SDK Change Notes for Cinema 4D 2023.2

Summarizes the API and API documentation changes made between Cinema 4D versions 2023.1.0 and 2023.2.0.

Overview

For an an overview of the required development environment for this release on Windows, MacOS, or Linux, see Development Environments.

Major Changes

Added
The online documentation of APIs offered by Maxon has a new entry point with developers.maxon.net/docs which will always refer to the latest Cinema 4D C++ API documentation. Bookmark developers.maxon.net/docs/py instead to always refer to the latest Python documentation and developers.maxon.net/docs/cw to refer to the latest Cineware documentation. These changes also fix the issue of local caches of users shadowing newer content, users will now always see the newest content. As before, caching is still enabled for all pages.
Added

Added back has also been the online documentation of past versions of APIs. Provided have been versions between R21.2 and 2023.2.0 as this is the version range most developers work with. This is accompanied by the new API and version selector element in the top right corner of both the C++ and Python documentation, allowing to view an item over different versions.

Updated

The concept of command assets as exposed with 2023 has been substantially extended for the new Commander which is now asset based. See the asset.framework change notes for a more complete overview.

Minor Changes

Added
maxon::Paradis has been added, an implementation of the PARADIS algorithm which realizes a parallelized in-place radix-sort. Paradis is an algorithm that aims at offering both an expectational single threaded and multi threaded sorting performance.
Updated
The OpenColorIO (OCIO) API has been extended to provide more control over OCIO profiles and conversions. BaseDocument::GetOcioProfiles allows for constructing custom transform paths from and to OCIO color profiles (Example), and VideoPostData::GetColorProfileInfo provides renderers to manipulate the OCIO profiles associated with an upcoming rendering (Example).
Updated
The Redshift manual now provides an example for the Redshift Camera object. The node material creation example has been slightly modernized.
Updated
Multiple functions had meaningless void arguments being removed from their signature. For example, the method AllocParticle(void) of TP_MasterSystem has now become TP_MasterSystem::AllocParticle().

API Changes

Summarizes the technical changes made to the public APIs of Cinema 4D within the scope of these change notes.

asset.framework

Added:
static constexpr Int LEGACY_ID_UNDEF = -1;
maxon::Int Int
Definition: ge_sys_math.h:64
Added:
static MAXON_METHOD Result<Int> GetLegacyId(const AssetDescription& commandAsset);
#define MAXON_METHOD
Definition: interfacebase.h:1001
Added:
static MAXON_METHOD Result<Array<Id>> GetCommandScopes(const AssetDescription& commandAsset);
Added:
static MAXON_METHOD Result<Bool> AddCommandScope(const Id& scope, Array<Id>& scopeArray);
Added:
static MAXON_METHOD Result<Bool> EraseCommandScope(const Id& scope, Array<Id>& scopeArray);
Added:
static MAXON_METHOD Result<void> StoreCommandScopes(const AssetDescription& commandAsset, Array<Id>&& scopeArray);
Added:
static MAXON_METHOD Result<Bool> ContainsCommandScope(const AssetDescription& commandAsset, const Id& scope);
Added:
static MAXON_METHOD Result<BaseArray<String>> GetCommandScopeNames(const AssetDescription& commandAsset);
Added:
static MAXON_METHOD String GetCommandScopeName(const Id& scope);
Definition: c4d_string.h:39
Added:
static MAXON_METHOD Result<Id> GetCommandType(const AssetDescription& commandAsset);
Added:
static MAXON_METHOD Result<String> GetCommandTypeName(const Id& commandType, const AssetRepositoryRef& repository);
Added:
static MAXON_METHOD Bool AssetIsObjectCommandType(const AssetDescription& commandAsset);
maxon::Bool Bool
Definition: ge_sys_math.h:55
Added:
static MAXON_METHOD Bool IsObjectCommandType(const Id& commandType);
Added:
static MAXON_METHOD Result<void> RegisterLegacyCommandScopes(Int32 commandId, const BaseArray<Id>& scopes);
maxon::Int32 Int32
Definition: ge_sys_math.h:60
Added:
static MAXON_METHOD Result<BaseArray<Id>> GetRegisteredLegacyCommandScopes(Int32 commandId);
Added:
static MAXON_METHOD Result<void> RegisterLegacyCommandType(Int32 commandId, const Id& type);
PyObject ** type
Definition: pycore_pyerrors.h:34
Added:
static MAXON_METHOD Id GetRegisteredLegacyCommandType(Int32 commandId);
Added:
MAXON_ATTRIBUTE(String, CommandLegacyScope, "net.maxon.asset.command.metadata.legacyscope");
#define MAXON_ATTRIBUTE(TYPE, NAME, RID,...)
Definition: fid.h:156
Added:
MAXON_ATTRIBUTE(Bool, HiddenCommand, "net.maxon.asset.command.metadata.hidden");
Added:
MAXON_ATTRIBUTE(Array<Id>, CommandScopes, "net.maxon.asset.command.metadata.scopes");
Added:
MAXON_INTERNED_ID("net.maxon.asset.command.type.command", CommandTypeCommand);
MAXON_INTERNED_ID("net.maxon.asset.command.type.hotkey", CommandTypeHotkey);
MAXON_INTERNED_ID("net.maxon.asset.command.type.tool", CommandTypeTool);
MAXON_INTERNED_ID("net.maxon.asset.command.type.object.generator", CommandTypeObjectGenerator);
MAXON_INTERNED_ID("net.maxon.asset.command.type.object.deformer", CommandTypeObjectDeformer);
MAXON_INTERNED_ID("net.maxon.asset.command.type.object.effector", CommandTypeObjectEffector);
MAXON_INTERNED_ID("net.maxon.asset.command.type.object.force", CommandTypeObjectForce);
MAXON_INTERNED_ID("net.maxon.asset.command.type.object.filter", CommandTypeObjectFilter);
MAXON_INTERNED_ID("net.maxon.asset.command.type.object.primitive", CommandTypeObjectPrimitive);
MAXON_INTERNED_ID("net.maxon.asset.command.type.object.field", CommandTypeObjectField);
MAXON_INTERNED_ID("net.maxon.asset.command.type.object.scene", CommandTypeObjectScene);
MAXON_INTERNED_ID("net.maxon.asset.command.type.object.other", CommandTypeObjectOther);
MAXON_INTERNED_ID("net.maxon.asset.command.type.tag", CommandTypeTag);
MAXON_INTERNED_ID("net.maxon.asset.command.type.script", CommandTypeScript);
MAXON_INTERNED_ID("net.maxon.asset.command.type.mode", CommandTypeMode);
MAXON_INTERNED_ID("net.maxon.asset.command.type.manager", CommandTypeManager); ///< Manager command.
#define MAXON_INTERNED_ID(IID, NAME)
Definition: module.h:63
Added:
MAXON_INTERNED_ID("net.maxon.asset.command.scope.mesh", CommandScopeMesh);
MAXON_INTERNED_ID("net.maxon.asset.command.scope.model", CommandScopeModel);
MAXON_INTERNED_ID("net.maxon.asset.command.scope.spline", CommandScopeSpline);
MAXON_INTERNED_ID("net.maxon.asset.command.scope.sculpting", CommandScopeSculpting);
MAXON_INTERNED_ID("net.maxon.asset.command.scope.painting", CommandScopePainting);
MAXON_INTERNED_ID("net.maxon.asset.command.scope.uvs", CommandScopeUVS);
MAXON_INTERNED_ID("net.maxon.asset.command.scope.rigging", CommandScopeRigging);
MAXON_INTERNED_ID("net.maxon.asset.command.scope.exchange", CommandScopeExchange);
MAXON_INTERNED_ID("net.maxon.asset.command.scope.materials", CommandScopeMaterials);
MAXON_INTERNED_ID("net.maxon.asset.command.scope.nodes", CommandScopeNodes);
MAXON_INTERNED_ID("net.maxon.asset.command.scope.particles", CommandScopeParticles);
MAXON_INTERNED_ID("net.maxon.asset.command.scope.cloth", CommandScopeCloth);
MAXON_INTERNED_ID("net.maxon.asset.command.scope.pyro", CommandScopePyro);
MAXON_INTERNED_ID("net.maxon.asset.command.scope.bullet", CommandScopeBullet);
MAXON_INTERNED_ID("net.maxon.asset.command.scope.camera", CommandScopeCamera);
MAXON_INTERNED_ID("net.maxon.asset.command.scope.lighting", CommandScopeLighting);
MAXON_INTERNED_ID("net.maxon.asset.command.scope.animation", CommandScopeAnimation);
MAXON_INTERNED_ID("net.maxon.asset.command.scope.powerslider", CommandScopePowerslider);
MAXON_INTERNED_ID("net.maxon.asset.command.scope.mograph", CommandScopeMograph);
MAXON_INTERNED_ID("net.maxon.asset.command.scope.tracker", CommandScopeTracker);
MAXON_INTERNED_ID("net.maxon.asset.command.scope.viewport", CommandScopeViewport);
MAXON_INTERNED_ID("net.maxon.asset.command.scope.assetbrowser", CommandScopeAssetBrowser);
MAXON_INTERNED_ID("net.maxon.asset.command.scope.rendering", CommandScopeRendering);
MAXON_INTERNED_ID("net.maxon.asset.command.scope.teamrender", CommandScopeTeamRender);
MAXON_INTERNED_ID("net.maxon.asset.command.scope.redshift", CommandScopeRedshift);
MAXON_INTERNED_ID("net.maxon.asset.command.scope.substance", CommandScopeSubstance);
MAXON_INTERNED_ID("net.maxon.asset.command.scope.objects", CommandScopeObjects);
MAXON_INTERNED_ID("net.maxon.asset.command.scope.python", CommandScopePython);
MAXON_INTERNED_ID("net.maxon.asset.command.scope.other", CommandScopeOther); ///< Scope for ramaining items.
Added:
New file for AssetCreationHelper which is a helper interface for asset creation and drag&drop.
for(i=0;i< length;i++)
Definition: unicodeobject.h:61
const char const char const char * file
Definition: object.h:439
Added:
{
VALID
Valid asset version.
Definition: assets.h:0
INVALID_HIGHER_VERSION_REQUIRED
Invalid asset version: app version is too low: higher version required.
Definition: assets.h:1
INVALID_LOWER_VERSION_REQUIRED
< Invalid asset version: app version is too high: lower version required.
Definition: assets.h:3
#define MAXON_ENUM_LIST(E,...)
Definition: enumflags.h:137
ASSET_VERSION_VALIDITY
Definition: assets.h:1273
Added:
struct AssetVersionValidityData
{
Float assetVersionFrom = 0.0;
Float assetVersionTo = 0.0;
Float appCurrentVersion = 0.0;
};
maxon::Float Float
Definition: ge_sys_math.h:66
Added:
struct AssetLicenseValidityData
{
InternedId appLicenseType;
};
NONE
The command asset state is not defined.
Definition: asset_command.h:0
ASSET_LICENSE_VALIDITY
Definition: assets.h:1295
ASSETLICENSETYPE
Definition: assets.h:98
Added:
static MAXON_METHOD Result<AssetVersionValidityData> IsAssetVersionValid(const AssetDescription& asset);
Added:
static MAXON_METHOD Result<AssetLicenseValidityData> IsAssetLicenseValid(const AssetDescription& asset);
Added:
using BuiltinAssetReceiver = Delegate<Result<Bool>(const Asset& asset, const DataDictionary& meta, const Url& metaUrl)>;
Definition: lib_net.h:547
Delegate< Result< Bool >(const Asset &asset, const DataDictionary &meta, const Url &metaUrl)> BuiltinAssetReceiver
Definition: assets.h:1663
Added:
using BuiltinAssetLoaderNew = Delegate<Result<Bool>(const Block<const Id>& types, const Id& aid, ASSET_FIND_MODE findMode,
Delegate< Result< Bool >(const Block< const Id > &types, const Id &aid, ASSET_FIND_MODE findMode, const BuiltinAssetReceiver &receiver)> BuiltinAssetLoaderNew
Definition: assets.h:1676
ASSET_FIND_MODE
The flags of ASSET_FIND_MODE control the behavior of AssetRepositoryInterface::FindAssets.
Definition: assets.h:606
Added:
MAXON_REGISTRY(BuiltinAssetLoaderNew, BuiltinAssetLoadersNew, "net.maxon.registry.builtinassetloaders2");
MAXON_REGISTRY(maxon::Class< ColorRef >, ColorClasses, "net.maxonexample.registry.colors")
Added:
MAXON_METHOD Bool DoesSupportSetAsDefault() const;
Added:
MAXON_METHOD Id GetSuggestedCategory() const;
Added:
MAXON_METHOD Result<ConstDataPtr> GetPresetInternalConstDataPtr() const;
Added:
MAXON_METHOD Result<Data> GetPresetInternalData() const;
Added:
static constexpr LiteralId NODE_PRESET_DEFAULT_CATEGORY = LiteralId("category@8d81ba7c65084bfbafc6b2eed1b4a878");
static constexpr LiteralId NODE_PRESET_DEFAULT_CATEGORY
Definition: base_preset_asset.h:341
Added:
MAXON_ATTRIBUTE(Bool, Partial, "net.maxon.asset.preset.args.partial");
MAXON_ATTRIBUTE(void*, ClassicSubType, "net.maxon.asset.preset.args.classicsubtype");
MAXON_ATTRIBUTE(Array<Id>, AssetSubType, "net.maxon.asset.preset.args.assetsubtype");
MAXON_ATTRIBUTE(void*, DefaultsBaseContainer, "net.maxon.asset.preset.args.classicdefaultsdata");
MAXON_ATTRIBUTE(DataDictionary, DefaultsDictionary, "net.maxon.asset.preset.args.assetdefaultsdata");
Added
maxon::BasePresetAssetClass
Added:
MAXON_DECLARATION(Class<BasePresetAsset>, BasePresetAssetClass, "net.maxon.class.basepresetasset");
#define MAXON_DECLARATION(T, Name, id,...)
Definition: module.h:857
Added:
MAXON_DECLARATION(BasePresetAssetType, NodeDefaultsPreset, "net.maxon.assettype.preset.defaults.node");
MAXON_DECLARATION(BasePresetAssetType, ResourceEditorDefaultsPreset, "net.maxon.assettype.preset.defaults.re");
Added:
MAXON_DECLARATION(Class<BasePresetAsset>, NodeDefaultsPresetClass, "net.maxon.class.asset.preset.defaults.node");
MAXON_DECLARATION(Class<BasePresetAsset>, ResourceEditorDefaultsPresetClass, "net.maxon.class.asset.preset.defaults.re");
Added:
static MAXON_METHOD Result<BaseArray<String>> GetAssetBreadcrumbString(const AssetDescription& asset, const AssetRepositoryRef& repository);
Old:
MAXON_ATTRIBUTE(AssetCommandQueryStateDelegate, AssetCommandQueryState, "net.maxon.asset.command.querystate");
Delegate< Result< COMMAND_ASSET_STATE >()> AssetCommandQueryStateDelegate
The command asset query state delegate.
Definition: asset_command.h:172
New:
MAXON_ATTRIBUTE(AssetCommandQueryStateDelegate, CommandQueryState, "net.maxon.asset.command.metadata.querystate");
Old:
MAXON_ATTRIBUTE(String, AssetCommandHelp, "net.maxon.asset.command.help");
New:
MAXON_ATTRIBUTE(String, CommandHelp, "net.maxon.asset.command.metadata.help");
Old:
MAXON_ATTRIBUTE(String, AssetCommandShortcuts, "net.maxon.asset.command.shortcuts");
New:
MAXON_ATTRIBUTE(String, CommandShortcuts, "net.maxon.asset.command.metadata.shortcuts");
Old:
MAXON_ATTRIBUTE(Int, AssetCommandLegacyId, "net.maxon.asset.command.legacyid");
New:
MAXON_ATTRIBUTE(Int, CommandLegacyId, "net.maxon.asset.command.metadata.legacyid");

cinema.framework

Added:
const maxon::OcioConfig& GetOcioConfig() const;
Added:
void GetOcioProfiles(maxon::ColorProfile& renderingColorSpace, maxon::ColorProfile& displayColorSpace, maxon::ColorProfile& viewTransform, maxon::ColorProfile& viewTransformThumbnails) const;
Added:
const BaseContainer& GetOcioColorSpacesPopupMenu() const;
Definition: c4d_basecontainer.h:47
Added:
Bool DrawsPyro() const;
Added:
Bool DrawsVolume() const;
Added:
enum class MODIFIER_FLAG : Int64
{
NO_NORMAL_DEFORMATION = (1 << 0),
NONE = 0
#define MAXON_ENUM_FLAGS(E,...)
Definition: enumflags.h:192
maxon::Int64 Int64
Definition: ge_sys_math.h:62
MODIFIER_FLAG
Definition: c4d_baselist.h:117
@ NONE
No flags.
@ NO_NORMAL_DEFORMATION
Will prevent the deformer or deformer tag from deforming the normals via tangent space transformation...
Added:
{
};
Message structure for the MSG_GETMODIFIERFLAGS message. Private.
Definition: c4d_baselist.h:125
MODIFIER_FLAG flags
Definition: c4d_baselist.h:126
Added:
#define MSG_GETMODIFIERFLAGS 1060370 ///< @b Private. @since 2023.200
Added:
template <typename LEGACYTYPE> class ClassicObjectWrapper
Added:
using C4DBaseDocumentType = ClassicObjectWrapper<BaseDocument>;
MAXON_DATATYPE(C4DBaseDocumentType, "net.maxon.datatype.c4dbasedocument");
#define MAXON_DATATYPE(type, id)
Definition: datatype.h:295
ClassicObjectWrapper< BaseDocument > C4DBaseDocumentType
Definition: c4d_data_datatype.h:39
Added:
using C4DBaseObjectType = ClassicObjectWrapper<BaseObject>;
MAXON_DATATYPE(C4DBaseObjectType, "net.maxon.datatype.c4dbaseobject");
ClassicObjectWrapper< BaseObject > C4DBaseObjectType
Definition: c4d_data_datatype.h:42
Added:
class C4DPolyObjectType;
MAXON_DATATYPE(C4DPolyObjectType, "net.maxon.datatype.c4dpolyobject");
Added:
class C4DPolyLineObjectType;
MAXON_DATATYPE(C4DPolyLineObjectType, "net.maxon.datatype.c4dpolylineobject");
Added:
class C4DSplineObjectType;
MAXON_DATATYPE(C4DSplineObjectType, "net.maxon.datatype.c4dsplineobject");
Added:
#define MSG_VIDEOPOST_CHECK_MBL 1056197 ///< Called to request Magic Bullet Looks Video Post to check for availability of Magic Bullet Looks. @since 2023.2
Added:
{
};
Definition: c4d_basebitmap.h:156
Stores overwriteable color profiles associated with an upcoming rendering.
Definition: c4d_videopostdata.h:375
const ColorProfile * imageColorProfile
Color profile of output image.
Definition: c4d_videopostdata.h:377
const ColorProfile * renderColorProfile
Color profile of renderer - can be either linear or sRGB.
Definition: c4d_videopostdata.h:376
ColorProfile * renderingColorSpace
Color profile for the OCIO render space of an OCIO rendering.
Definition: c4d_videopostdata.h:378
ColorProfile * viewColorSpace
Color profile for the OCIO view transform of an OCIO rendering.
Definition: c4d_videopostdata.h:379
ColorProfile * displayColorSpace
Color profile for the OCIO display space of an OCIO rendering.
Definition: c4d_videopostdata.h:380
Added:
virtual void GetColorProfileInfo(BaseVideoPost* node, VideoPostStruct *vps, ColorProfileInfo& info);
Definition: c4d_videopost.h:24
_Py_clock_info_t * info
Definition: pytime.h:197
Definition: node.h:10
Definition: c4d_tools.h:2548
Added:
OCIO_RENDERING_TO_LINEAR = 30, ///< Rendering to linear color space transformation.
OCIO_LINEAR_TO_RENDERING
Linear to rendering color space transformation.
Definition: ge_prepass.h:18
OCIO_RENDERING_TO_LINEAR
Rendering to linear color space transformation.
Definition: ge_prepass.h:19
Added:
#define BIT_OVERRIDEDEFORMEDIT (1 << 22) ///< Draws the object in deformed state, even if deform editing is deactivated.
Added:
#define Osolidifygenerator 1060179 ///< Solidify Generator. @since 2023.200
Added:
#define Opointprojector 1060422 ///< Point projector.
Added:
PARTICLEOFFSET = 6 ///< ::Matrix Extra transform for the particles applied before conversion.
PARTICLEOFFSET
Matrix Extra transform for the particles applied before conversion.
Definition: ge_prepass.h:6
Added:
#define WPREF_NODE_EDITOR_HEATMAP_FLAGS 1055265 ///< ::Int32 Node editor heat map flags. @since 2023.2
Added:
#define WPREF_NODE_EDITOR_HEATMAP_GRADIENT 1055266 ///< ::Gradient Gradient Node editor gradient. @since 2023.2
Added:
#define WPREF_NODE_EDITOR_HEATMAP_NOVALUE_COLOR 1055267 ///< ::Color Gradient Node editor gradient no value color. @since 2023.2
Added:
#define WPREF_COMMANDER_SETTINGS 1060373 ///< ::BaseContainer Contains auto-saved commander settings like zoom level @b Private. @since R2023.2
Added:
DRAW_WITH_BLOCKED_INTERACTION = (1 << 27) ///< Execute the draw even if interaction is blocked (modal windows on top)
DRAW_WITH_BLOCKED_INTERACTION
Execute the draw even if interaction is blocked (modal windows on top)
Definition: ge_prepass.h:22
Added:
#define FORMAT_GLTFIMPORT 1060210 ///< glTF import. @since 2023.200
Added:
DIALOG_NOTEXTMENU, ///< Hides the text menu, useful to fill all the menu area with gadgets added with @ref GeDialog::GroupBeginInMenuLine()
@ DIALOG_NOTEXTMENU
Hides the text menu, useful to fill all the menu area with gadgets added with GeDialog::GroupBeginInM...
Definition: ge_prepass.h:5372
Added:
#define ID_MODELING_SOLIDIFY_TOOL 1060288 ///< Solidify Tool. See toolsolidify.h
Old:
BaseObject* GetAndCheckHierarchyClone(HierarchyHelp* hh, BaseObject* op, HIERARCHYCLONEFLAGS flags, Bool* dirty, AliasTrans* trans, Int childCount, maxon::BaseArray<BaseObject*>* children);
PyCompilerFlags * flags
Definition: ast.h:14
Definition: c4d_baselist.h:3067
Definition: c4d_baseobject.h:225
Definition: c4d_baseobject.h:180
HIERARCHYCLONEFLAGS
Definition: ge_prepass.h:3388
PyObject * op
Definition: object.h:520
New:
BaseObject* GetAndCheckHierarchyClone(HierarchyHelp* hh, BaseObject* op, HIERARCHYCLONEFLAGS flags, Bool* dirty, AliasTrans* trans, Int childCount, maxon::BaseArray<BaseObject*>* children, Bool addChildOrClone = false);
Old:
#define API_VERSION 2023100
New:
#define API_VERSION 2023200
Deprecated:
[[deprecated("Use CreateDefaultGraph or CreateEmptyGraph.")]] maxon::Result<void> AddGraph(const maxon::Id& spaceId) { return C4DOS.Mt->AddGraph(*this, spaceId); }
Definition: apibaseid.h:253
Removed
WPREF_ONLINEUPDATER_LANGUAGE_PACKS_LIST
Removed:
#define WPREF_ONLINEUPDATER_LANGUAGE_PACKS_LIST 40016 ///< ::String Language packs list available for download.
Removed
WPREF_COMMUNICATION_METRICS
Removed:
WPREF_COMMUNICATION_METRICS_DISABLE,
WPREF_COMMUNICATION_METRICS_LICENSE_ACCEPTED,
WPREF_COMMUNICATION_METRICS_ASK_ME_LATER,
WPREF_COMMUNICATION_METRICS_ACTIVE, ///< ::Bool. Set to <span style="font-weight:bold;">true</span> if a %User ID has been retrieved and data has been sent.

cinema_hybrid.framework

Added:
static MAXON_METHOD Result<void> CreateObjectsOnMultiDrag(BaseDocument* doc, const BaseArray<Tuple<Url, AssetDescription, String>>& assets, Bool allowPreviewCube, Bool overwriteMatrix, const Matrix& overwriteMatrixMg, Float placementScale, BaseObject* parent = nullptr, BaseObject* prev = nullptr);
Definition: c4d_basedocument.h:498
const char * doc
Definition: pyerrors.h:226
Added:
static MAXON_METHOD BasePresetAssetType GetDefaultsPresetAssetType(BaseList2D* bl);
Definition: c4d_baselist.h:2208
Added:
static MAXON_METHOD Result<Id> JoinDefaultsPresetSubType(const Block<const Int32>& blIds);
Added:
using AMEmulationType = decltype(presetargs::AssetSubType)::ValueType;
Added:
static MAXON_METHOD Result<void> SetEmulationDefaultObject(const AMEmulationType& defaultsType, const BasePresetAssetType& assetType, Bool partial, const String& baseAssetName, const DataDictionary& data, Bool setAsDefault, Bool allowMakeDefault);
Added:
static MAXON_METHOD Result<AMEmulationType> GetEmulationDefaultsPresetType(BaseList2D* bl);
Added:
static MAXON_METHOD Result<Id> GetJoinedDefaultsPresetSubType(const AtomArray& blList, const BaseArray<Int32>& defaultsType);
Definition: c4d_baselist.h:1651
Added:
SUBDIALOG = (1 << 5), ///< @internal dialog is running in a subdialog
SUBDIALOG
Definition: assetmanagerinterface.h:7
Added:
OTHERCOMMANDS, ///< FIlter for other commands only
OBJECTCOMMANDS
Filter for object commands only.
Definition: assetmanagerinterface.h:9
TOOLCOMMANDS
Filter for tool commands only.
Definition: assetmanagerinterface.h:8
OTHERCOMMANDS
FIlter for other commands only.
Definition: assetmanagerinterface.h:10
Added:
class AssetManagerSubDialogInterface : MAXON_INTERFACE_BASES(ObjectInterface)
{
MAXON_METHOD Result<void> SetNewGraphNode(const GraphModelPresenterRef& presenter, const nodes::NodesGraphModelRef& model, const GraphNode& node);
MAXON_METHOD Result<void> SetMasterFilter(MASTERFILTER filter);
MAXON_METHOD Result<void> ForceHideFilterTab(Bool hide);
};
This class is for creating sub-dialogs that can be attached to a SUBDIALOG control in an ordinary GeD...
Definition: c4d_gui.h:2975
#define MAXON_INTERFACE_BASES(...)
Definition: objectbase.h:1062
const Class< R > & Get(const Id &cls)
Definition: objectbase.h:2073
MASTERFILTER
Definition: assetmanagerinterface.h:35
Added:
static MAXON_METHOD Result<Bool> CheckDownloadAssetsWithModalProgressDialog(const BaseArray<AssetDescription>& assets, const AssetRepositoryRef& lookupRepository);
Added:
using AssetDragTuple = Tuple<Url, AssetDescription, String>;
using AssetDragArray = BaseArray<AssetDragTuple>;
using AssetDragSubtypeArray = BaseArray<Id>;
using AssetDragArrayTuple = Tuple<AssetDragArray, AssetDragSubtypeArray>;
static MAXON_METHOD Result<AssetDragArrayTuple> GetAssetFilenameFromMultiDragData(const void* dragData, Bool updateUsage, Bool showDownloadDialog, const Filter& filter = GetZeroRef<Filter>());
Added:
static MAXON_METHOD Result<AssetManagerSubDialogRef> GetAssetManagerSubDialogRef();
Added:
New file for CodeExchangerInterface which handles communication of codes from Cinema 4D to IDE and vice versa.
Py_ssize_t PyObject * from
Definition: unicodeobject.h:502
D
Quality D.
Definition: macros.h:4
Added:
using DescEntryMap = HashMap<DescID, DescEntryStruct>;
using GroupIdMap = HashMap<InternedId, DescID>;
Added:
const DescEntryStruct* FindTranslationDescID(const DescID& id) const;
Definition: lib_description.h:330
Added:
const DescEntryMap::Entry* ReverseFindTranslationDescID(const Block<const InternedId>& emulKey) const;
Added:
New file for WebSocketJsonCodeExchangerInterface which define the WebSocket and JSON Python code communication for Cinema 4D and IDE(s).
PyObject PyObject const char const char char ** s
Definition: bytesobject.h:60
JSON
Definition: io.h:3
Removed:
The numtostring.h file have been moved to the core framework

core.framework

Added:
static constexpr Float64 PI05_INV = 0.6366197723675813430755350534901;
maxon::Float64 Float64
Definition: ge_sys_math.h:67
static constexpr Float64 PI05_INV
floating point constant: 1.0 / (0.5 * PI)
Definition: apibasemath.h:127
Added:
static constexpr Float64 PI15 = 4.7123889803846898576939650749193;
static constexpr Float64 PI15
floating point constant: 1.5 * PI
Definition: apibasemath.h:130
Added:
static constexpr Float64 PI15_INV = 0.2122065907891937810251783511634;
static constexpr Float64 PI15_INV
floating point constant: 1.0 / (1.5 * PI)
Definition: apibasemath.h:133
Added:
New file for ObserverScopeGuard which is a RAII object, that hold the responsibility of deregistering an observer from an observable.
PyObject * object
Definition: asdl.h:7
Added:
#define iferr_diag_handler(errResult, formatString, ...) PRIVATE_MAXON_iferr_diag_handlera(MAXON_VA_ARGS_POPULATED(__VA_ARGS__), errResult, formatString, ##__VA_ARGS__)
Added:
template <typename T> MAXON_ATTRIBUTE_FORCE_INLINE T& MAXON_REMOVE_CONST(const T& value)
template <typename T> MAXON_ATTRIBUTE_FORCE_INLINE T* MAXON_REMOVE_CONST(const T* value)
template <typename T> MAXON_ATTRIBUTE_FORCE_INLINE const T& MAXON_MAKE_CONST(T& value)
template <typename T> MAXON_ATTRIBUTE_FORCE_INLINE const T* MAXON_MAKE_CONST(T* value)
PyObject * value
Definition: abstract.h:715
#define MAXON_ATTRIBUTE_FORCE_INLINE
Definition: apibase.h:111
Added:
Bool HasMultipleReferences() const
Added:
class DeepConstnessPointerHandler : public PointerHandler
Added:
#define MAXON_ATTRIBUTE_NO_INLINE
Definition: apibase.h:103
R
HPB rotation morphing.
Definition: lib_ca.h:2
Added:
New file for ConstData.
Added:
namespace CLASSIFICATION
{
namespace BASE
{
MAXON_RESOURCE_DATABASE_SCOPE("net.maxon.description.classification.base");
Classification of the attribute. This can be any of the given enum types.
MAXON_ATTRIBUTE(Id, ENUM, "net.maxon.description.classification.base.enum",
RESOURCE_DEFINE(ENUM_NONE, Id("none"))
RESOURCE_DEFINE(ENUM_INPUT, Id("input"))
RESOURCE_DEFINE(ENUM_OUTPUT, Id("output"))
RESOURCE_DEFINE(ENUM_DATA, Id("data")));
}
}
ENUM
The data type is an unnamed enum type created by DataTypeLib::GetEnumType().
Definition: apibase.h:8
#define RESOURCE_DEFINE(ID, VAL)
Definition: fid.h:103
#define MAXON_RESOURCE_DATABASE_SCOPE(id)
Definition: fid.h:107
Added:
MAXON_ATTRIBUTE(Id, TYPECONSTRAINT, "net.maxon.description.data.base.typeconstraint");
MAXON_ATTRIBUTE(Bool, EXCLUDEFROMPRESETS, "net.maxon.description.data.base.excludefrompresets");
Added:
static constexpr Char EXTENSION_ID_SEPARATOR = '#';
maxon::Char Char
Definition: ge_sys_math.h:56
static constexpr Char EXTENSION_ID_SEPARATOR
Used as separator for extension points below and some special identifier tags.
Definition: datadescriptiondatabase.h:20
Added:
#define ENUM_EXTENSION_SEPARATOR Id("---")
Added:
#define ENUM_EXTENSION_ENUM "enum#"_cs
Added:
#define ENUM_EXTENSION_REMOVE "remove#"_cs
Added:
#define PRESET_EXTENSION_VARIABLE "var#"_cs
Added:
template <UInt NUMBER>
static Result<InternedId> Create();
static auto Create(ARGS &&... args)
Definition: apibase.h:2773
Added:
MAXON_METHOD Result<GenericData> ProcessEx(const Id& descriptionId, const DataDescriptionDefinition& dataDescriptionDef, const DataDescription& dataDescription) const;
Added:
New file for IntersectionType and UnionType.
Added:
template <> class PromiseRef<void> : public JobRef
Added:
template <typename COMPARE> struct LessThanAsLessThanOrEqual
Added:
New file for Paradis sorting algorithm.
Result< void > Paradis(const Block< T > &data, UInt32 threadNum, GETINT &&getInt)
Sorts maxon::Block data using a parallelized in-place radix-sort.
Definition: sort_paradis.h:368
Added:
New Entry
Added:
static const Id URLSCHEME_MEMORYFILESTRUCT = Id("mfs");
static const Id URLSCHEME_MEMORYFILESTRUCT
Scheme identifier for MemoryFileStruct streams.
Definition: url.h:840
Added:
static const Id URLSCHEME_RAMDISK = Id("ramdisk");
static const Id URLSCHEME_RAMDISK
Scheme identifier for virtual file systems in RAM.
Definition: url.h:845
Old:
#define MAXON_LIKELY(X) __builtin_expect((bool)(X), true)
New:
#define MAXON_LIKELY(...) __builtin_expect((bool)(__VA_ARGS__), true)
Old:
#define MAXON_UNLIKELY(X) __builtin_expect((bool)(X), false)
New:
#define MAXON_UNLIKELY(...) __builtin_expect((bool)(__VA_ARGS__), false)
Old:
#define MAXON_CORE_FRAMEWORK_VERSION 2023100
New:
#define MAXON_CORE_FRAMEWORK_VERSION 2023200
Old:
Block(T* ptr, Int size, Int stride = (STRIDED && GENERIC) ? -1 : SIZEOF(StrideType)) : Super(ptr, size, stride)
GENERIC
The data type represents the Generic type.
Definition: apibase.h:3
Py_ssize_t size
Definition: bytesobject.h:86
#define SIZEOF(...)
Calculates the size of a datatype or element.
Definition: apibasemath.h:214
char ** ptr
Definition: pycore_dtoa.h:13
New:
constexpr Block(T* ptr, Int size, Int stride = (STRIDED && GENERIC) ? -1 : SIZEOF(StrideType)) : Super(ptr, size, stride)
Old:
template <typename... ARGS> MAXON_ATTRIBUTE_FORCE_INLINE explicit ArrayBase0(ARGS&&... args) : Super(std::forward<ARGS>(args)...) { }
PyObject * args
Definition: abstract.h:159
Definition: apibase.h:541
New:
template <typename... ARGS> MAXON_ATTRIBUTE_FORCE_INLINE constexpr explicit ArrayBase0(ARGS&&... args) : Super(std::forward<ARGS>(args)...) { }
Old:
template <typename... ARGS> MAXON_ATTRIBUTE_FORCE_INLINE explicit ArrayBase(ARGS&&... args) : Super(std::forward<ARGS>(args)...) { }
New:
template <typename... ARGS> MAXON_ATTRIBUTE_FORCE_INLINE constexpr explicit ArrayBase(ARGS&&... args) : Super(std::forward<ARGS>(args)...) { }
Old:
JobGroupRef& Enqueue(JobQueueInterface* queue = JOBQUEUE_CURRENT)
static const JobQueueInterface::Current JOBQUEUE_CURRENT
Equivalent to calling GetDestinationQueue(), you just save a function call.
Definition: jobqueue.h:377
New:
const JobGroupRef& Enqueue(JobQueueInterface* queue = JOBQUEUE_CURRENT) const
Old:
Result<void> EnqueueAndWait(JobQueueInterface* queue = JOBQUEUE_CURRENT)
New:
Result<void> EnqueueAndWait(JobQueueInterface* queue = JOBQUEUE_CURRENT) const
Old:
template <typename T> Result<void> Add(T&& obj)
@ Add
Definition: Python-ast.h:24
PyObject * obj
Definition: complexobject.h:60
New:
template <typename T> Result<void> Add(T&& obj) const
Old:
template <JOBCANCELLATION B, typename T> Result<void> Add(T&& obj)
New:
template <JOBCANCELLATION B, typename T> Result<void> Add(T&& obj) const
Old:
ObservableFinishedBase<JobGroupInterface> ObservableFinished()
New:
ObservableFinishedBase<JobGroupInterface> ObservableFinished() const
Old:
void Cancel()
New:
void Cancel() const
Old:
void CancelAndWait(WAITMODE mode = WAITMODE::DEFAULT)
const wchar_t * mode
Definition: fileutils.h:96
DEFAULT
Default.
Definition: lib_ca.h:4
WAITMODE
Definition: threadservicespods.h:196
New:
void CancelAndWait(WAITMODE mode = WAITMODE::DEFAULT) const
Old:
void Add(StaticJobArray<T>& jobs)
New:
void Add(StaticJobArray<T>& jobs) const
Old:
StaticJobGroupRef<T>& Enqueue(JobQueueInterface* queue = JOBQUEUE_CURRENT)
New:
const StaticJobGroupRef<T>& Enqueue(JobQueueInterface* queue = JOBQUEUE_CURRENT) const
Old:
Result<void> EnqueueAndWait(JobQueueInterface* queue = JOBQUEUE_CURRENT)
New:
Result<void> EnqueueAndWait(JobQueueInterface* queue = JOBQUEUE_CURRENT) const
Old:
ObservableFinishedBase<JobGroupInterface> ObservableFinished()
New:
ObservableFinishedBase<JobGroupInterface> ObservableFinished() const
Old:
void Cancel()
New:
void Cancel() const
Old:
void CancelAndWait(WAITMODE mode = WAITMODE::DEFAULT)
New:
void CancelAndWait(WAITMODE mode = WAITMODE::DEFAULT) const
Old:
operator JobGroupRef&()
New:
operator const JobGroupRef&() const
Deprecated:
[[deprecated("use DescriptionProcessorInterface::ProcessEx")]] MAXON_METHOD Result<GenericData> Process(const Id& descriptionId, const DataDescription& dataDescription) const;

corenodes.framework

Added
maxon::RootNodeId
Added:
MAXON_INTERNED_ID("Root", RootNodeId);
Added:
MAXON_METHOD const DataDictionary& GetCompilationData() const;
Added:
static constexpr Char g_coreNodeIdSeperator = '!';
static constexpr Char g_coreNodeIdSeperator
Definition: corenodes_lib.h:215
Deprecated:
[[deprecated]] MAXON_METHOD const Data& GetUserData() const; // Use GetCompilationData
Deprecated:
[[deprecated]] MAXON_METHOD void SetUserData(Data&& value); // Use SetCompilationData

exchange.framework

Added:
MAXON_ATTRIBUTE(Float, OCCLUSIONSTRENGTH, "occlusionStrength");
Added:
MAXON_ATTRIBUTE(Bool, ISVOLUME, "isvolume");
MAXON_ATTRIBUTE(Float, SCATTERING_COEFFICIENT, "scattering.coefficient");
MAXON_ATTRIBUTE(Float, ABSORPTION_COEFFICIENT, "absorption.coefficient");
MAXON_ATTRIBUTE(Float, EMISSION_COEFFICIENT, "emission.coefficient");
MAXON_ATTRIBUTE(Float, EMISSION_TEMPERATURE, "emission.temperature");
MAXON_ATTRIBUTE(Gradient, SCATTERING_GRADIENT, "scattering.gradient");
MAXON_ATTRIBUTE(Gradient, ABSORPTION_GRADIENT, "absorption.gradient");
MAXON_ATTRIBUTE(InternedId, EMISSION_TYPE, "emission.type");
MAXON_ATTRIBUTE(void, EMISSION_TYPE_ENUM_NONE, "none");
MAXON_ATTRIBUTE(void, EMISSION_TYPE_ENUM_RAMP, "ramp");
MAXON_ATTRIBUTE(void, EMISSION_TYPE_ENUM_BLACKBODY, "blackbody");
MAXON_ATTRIBUTE(Gradient, EMISSION_GRADIENT, "emission.gradient");
MAXON_ATTRIBUTE(Float, DENSITY_SHADOW_SCALE, "density.shadow_scale");
MAXON_ATTRIBUTE(Range<Float>, DENSITY_RANGE_OLD, "density.range_old");
MAXON_ATTRIBUTE(Range<Float>, DENSITY_RANGE_NEW, "density.range_new");
MAXON_ATTRIBUTE(Range<Float>, EMISSION_RANGE_OLD, "emission.range_old");
MAXON_ATTRIBUTE(Range<Float>, EMISSION_RANGE_NEW, "emission.range_new");
Definition: customgui_gradient.h:150
Old:
MAXON_ATTRIBUTE(Color, BASECOLORTEXTURE, "baseColorTexture");
Col3< Float, 1 > Color
Definition: vector.h:84
New:
MAXON_ATTRIBUTE(ColorA, BASECOLORTEXTURE, "baseColorTexture");
Col4< Float, 1 > ColorA
Definition: vector4d.h:60

geom.framework

Added:
New file for to work with tangent space normals.

graph.framework

Added:
MAXON_METHOD Result<HomogenousTupleType<3, HashMap<InternedId, InternedId>>> Duplicate(const Block<const GraphNode>& selection, Bool withConnections);

image.framework

Added:
Flags used by TransformColors
{
NONE = 0,
INVERSE_DIRECTION = (1 << 0)
void TransformColors(Vector64 *v, Int count, COLORSPACETRANSFORMATION colorSpaceTransformation)
INVERSE_DIRECTION
Inverse direction.
Definition: gfx_image.h:1
TRANSFORM_COLORS_FLAGS
Flags used by TransformColors.
Definition: gfx_image.h:123
Added:
MAXON_METHOD Result<ImageBaseRef> TransformColors(const ColorProfile& srcProfile, const ColorProfile& dstProfile, TRANSFORM_COLORS_FLAGS flags);

math.framework

Added:
Definition: dataserialize.h:207
PyObject * stream
Definition: codecs.h:186
Result< void > DescribeIO(const T &s, const DataSerializeInterface &dsi)
Definition: datatypefunctions.h:21
Added:
MAXON_DATATYPE(GradientKnot, "net.maxon.datatype.gradientknot");
Represents a knot in a gradient.
Definition: customgui_gradient.h:135
Added:
static MAXON_METHOD Result<void> DescribeIO(const DataSerializeInterface& stream);

misc.framework

Added:
New file to provides functionality for metrics.
Added:
MAXON_FUNCTION void AddResultBool(const String& testName, Bool state)
#define MAXON_FUNCTION
Definition: interfacebase.h:1022
Definition: grammar.h:37
Removed:
static const Id URLSCHEME_RAMDISK = Id("ramdisk"); // Moved to the maxon::URLInterface in "maxon/url.h"

neutron.framework

Added:
MAXON_DECLARATION(LoggerRef, Neutron, "net.maxon.core.logger.neutron");
Added:
static constexpr Int32 MSG_REGISTER_HEATMAP_LISTENER = 180420206;
static constexpr Int32 MSG_REGISTER_HEATMAP_LISTENER
Definition: neutron_ids.h:74
Added:
static constexpr Int32 NEUTRON_BASE_ID = 190000010; ///< Base instance type for all the neutron related objects (scene hooks, tags, ...).
static constexpr Int32 NEUTRON_BASE_ID
Base instance type for all the neutron related objects (scene hooks, tags, ...).
Definition: neutron_ids.h:85
Added:
static constexpr Int32 IDM_HEATMAP_DUMP = 190000000;
static constexpr Int32 IDM_HEATMAP_ENABLE = 190000001;
static constexpr Int32 IDM_HEATMAP_ISENABLED = 190000002;
static constexpr Int32 IDM_HEATMAP_ISSUPPORTED = 190000003;
static constexpr Int32 IDM_HEATMAP_QUEUE_DUMP = 190000004; ///< No data. Will force a heat map update and print heat map to console afterwards.
static constexpr Int32 IDM_HEATMAP_ISSUPPORTED
Expecting Bool* data, true if heat map is supported by the object.
Definition: neutron_ids.h:98
static constexpr Int32 IDM_HEATMAP_ISENABLED
Expecting Bool* data, true if heat map is enabled for the capsule/scene nodes.
Definition: neutron_ids.h:97
static constexpr Int32 IDM_HEATMAP_QUEUE_DUMP
No data. Will force a heat map update and print heat map to console afterwards.
Definition: neutron_ids.h:99
static constexpr Int32 IDM_HEATMAP_DUMP
No data. Will print heat map data from capsule/scene nodes to console.
Definition: neutron_ids.h:95
static constexpr Int32 IDM_HEATMAP_ENABLE
Expecting const Bool* data, true to enable heat map data collection on capsule/scene nodes.
Definition: neutron_ids.h:96
Added:
#define CUSTOMDATATYPE_PSRMATRIX 1055305
Added:
static constexpr LiteralId NODESPACE{"net.maxon.neutron.nodespace"};
static constexpr LiteralId NODESPACE
Neutron node space identifier.
Definition: neutron_ids.h:108
Added:
static constexpr LiteralId CAPSULEASSETWRAPPERID{"net.maxon.nbo.classicobject"};
static constexpr LiteralId CAPSULEASSETWRAPPERID
Identifier of the NodeTemplate used to wrap node assets in capsules. It's always the NodeSystem's fir...
Definition: neutron_ids.h:111
Deprecated:
[[deprecated("Use IsInstanceOf(CAPSULE_BASE_ID) instead")]] inline Bool IsNeutronObjectType(Int32 type)
Bool IsNeutronObjectType(Int32 type)
Definition: neutron_ids.h:114
Deprecated:
[[deprecated("Use IsInstanceOf(NEUTRON_BASE_ID) instead")]] inline Bool IsNeutronType(Int32 type)
Bool IsNeutronType(Int32 type)
Definition: neutron_ids.h:120

nodes.framework

Added:
NO_COMPONENT_ACCESS = 1 << 3, ///< All the unused component access ports will not be part of the graph.
NO_COMPONENT_ACCESS
All the unused component access ports will not be part of the graph.
Definition: nodesgraph.h:5
Added:
MAXON_METHOD Result<NodesGraphModelRef> CreateView(NodeSystemManagerInterface::FILTER filter, const NodePath& rootPath, const Class<>& graphModelClass);
FILTER
Filter a float grid VolumeObject.
Definition: ge_prepass.h:6
Added:
MAXON_METHOD Result<void> ReplaceBase(const GraphNode& node, const NodeSystem& newBase);
Added:
static MAXON_METHOD Result<DescriptionProcessor> CreateNodeDescriptionProcessorEx(Delegate<Result<NodeTemplate>(const Id& descriptionId, const DataDescriptionDefinition& dataDef, const DataDescription& dataDescription)>&& delegate);
Added:
MAXON_METHOD Result<HomogenousTupleType<3, HashMap<InternedId, InternedId>>> Duplicate(const Block<const NodePath>& selection, Bool withConnections, ChangeList* list = nullptr);
PyWideStringList * list
Definition: initconfig.h:447

nodespace.framework

Added:
MAXON_ATTRIBUTE(void, TYPE_ENUM_VOLUMETRIC, "volumetric");
MAXON_ATTRIBUTE(Float, SCATTERING_COEFFICIENT, "scattering.coefficient");
MAXON_ATTRIBUTE(Float, ABSORPTION_COEFFICIENT, "absorption.coefficient");
MAXON_ATTRIBUTE(Float, EMISSION_COEFFICIENT, "emission.coefficient");
MAXON_ATTRIBUTE(Float, EMISSION_TEMPERATURE, "emission.temperature");
MAXON_ATTRIBUTE(Gradient, SCATTERING_GRADIENT, "scattering.gradient");
MAXON_ATTRIBUTE(Gradient, ABSORPTION_GRADIENT, "absorption.gradient");
MAXON_ATTRIBUTE(InternedId, EMISSION_TYPE, "emission.type");
MAXON_ATTRIBUTE(void, EMISSION_TYPE_ENUM_NONE, "none");
MAXON_ATTRIBUTE(void, EMISSION_TYPE_ENUM_RAMP, "ramp");
MAXON_ATTRIBUTE(void, EMISSION_TYPE_ENUM_BLACKBODY, "blackbody");
MAXON_ATTRIBUTE(Gradient, EMISSION_GRADIENT, "emission.gradient");
MAXON_ATTRIBUTE(Float, DENSITY_SHADOW_SCALE, "density.shadow_scale");
MAXON_ATTRIBUTE(Range<Float>, DENSITY_RANGE_OLD, "density.range_old");
MAXON_ATTRIBUTE(Range<Float>, DENSITY_RANGE_NEW, "density.range_new");
MAXON_ATTRIBUTE(Range<Float>, EMISSION_RANGE_OLD, "emission.range_old");
MAXON_ATTRIBUTE(Range<Float>, EMISSION_RANGE_NEW, "emission.range_new");
MAXON_ATTRIBUTE(Group, GROUP_VOLUME, "group.volume");
void Group
special datatype for groups.
Definition: fid.h:112

python.framework

Removed
code_exchange.h
code_exchange.h
Removed:
This file have been moved to the cinema_hybrid.framework

volume.framework

Added:
MAXON_METHOD Result<void> MergeVolume(Volume& otherVolume, Bool keepOldVolume = false);
Added:
MAXON_METHOD Result<void> SetMinMaxValues(Range<Float> minMaxRange);