Core Nodes Implementation

内容表

关于

A core node is a basic node of Cinema 4D 's node material system. It represents a basic functionality that can be used in a node material.

The relevant interfaces needed to implement custom core nodes are found in the corenodes.framework .

Implementation

A simple custom core node is implemented as follows:

// This example shows

#include " maxon/micronodes.h "

// core node class class MaximumComponentCoreNode { public : // input port "colora" MAXON_PORT_INPUT ( maxon::ColorA , colora);

// input port "colorb" MAXON_PORT_INPUT ( maxon::ColorA , colorb);

// output port "result" MAXON_PORT_OUTPUT ( maxon::ColorA , result);

class Impl : public maxon::corenodes::BasicMicroNode { public : MAXON_ATTRIBUTE_FORCE_INLINE maxon::Result<void> Process( const Ports<colora, colorb, result>& ports) const { iferr_scope ;

// access input port color const maxon::ColorA & inputColorA = ports.colora(); const maxon::ColorA & inputColorB = ports.colorb();

// invert color maxon::ColorA resultColor; resultColor. r = maxon::Max (inputColorA. r , inputColorB. r ); resultColor. g = maxon::Max (inputColorA. g , inputColorB. g ); resultColor. b = maxon::Max (inputColorA. b , inputColorB. b ); resultColor. a = maxon::Max (inputColorA. a , inputColorB. a );

// store in result port ports.result.Update(resultColor);

return maxon::OK ; } }; static maxon::Result<void> Init( const maxon::corenodes::MicroNodeGroupRef& group) { return group.AddChild<Impl>(); } }; using namespace maxon::corenodes ;

// we choose pure registration, because the node has no lazy evaluation (and is evaluated from left to right). MAXON_CORENODE_REGISTER_PURE (MaximumComponentCoreNode, "net.maxonexample.corenodes.examplenode" );

描述

The description of the core node must be created with the Resource Editor.The new data type must have the ID of the core node.

The data type properties are:

The core node needs a new attribute:

The name of the node is set with net.maxon.node.base.

Port descriptions are created with new attributes:

Description Handling

The description of the core node must be loaded and handled properly:

// This example loads and handles the description database containing the core node description. static maxon::BaseArray<maxon::GenericData> g_coreNodeDescriptions;

// the ID of the database storing the core node's description static maxon::Id g_corenodesDatabaseId = maxon::Id { "net.maxonexample.corenodes" };

// function to process the description // static maxon::Result<void> HandleCoreNodeDescriptions(const maxon::Id& databaseId) //{ // iferr_scope; // // const maxon::Id catData = maxon::DATADESCRIPTION_CATEGORY_DATA; // const maxon::LanguageRef language = maxon::LanguageRef(); // // maxon::BaseArray<maxon::IdAndVersion> ids = maxon::DataDescriptionDefinitionDatabaseInterface::GetRegisteredDescriptions(g_corenodesDatabaseId, catData, language) iferr_return; // for (const maxon::IdAndVersion& id : ids) // { // maxon::DataDescription description = maxon::DataDescriptionDatabaseInterface::LoadDescription(maxon::DATADESCRIPTION_CATEGORY_DATA, maxon::LanguageRef(), id.first) iferr_return; // // maxon::DataDictionary info = description.GetInfo(); // // maxon::Id builderId = info.Get(maxon::DESCRIPTION::DATA::INFO::PROCESSOR, maxon::Id()); // if (builderId.IsPopulated()) // { // const maxon::DescriptionProcessor& processor = maxon::DescriptionProcessors::Get(builderId); // if (processor) // { // maxon::GenericData d = processor.Process(id.first, description) iferr_return; // g_coreNodeDescriptions.Append(std::move(d)) iferr_return; // } // } // } // // return maxon::OK; //}

// load description static maxon::Result<void> HandleInitializeModule() { iferr_scope_handler { err.CritStop(); return err; };

// get plugin "res" folder maxon::Url pluginDir = maxon::Application::GetUrl ( maxon::APPLICATION_URLTYPE::CURRENT_MODULE_RESOURCE_DIR ) iferr_return ;

// get "nodes" folder within the "res" folder const maxon::Url coreNodesResourceUrl = pluginDir.Append( "nodes" _s) iferr_return ;

// register database maxon::DataDescriptionDefinitionDatabaseInterface::RegisterDatabaseWithUrl (g_corenodesDatabaseId, coreNodesResourceUrl) iferr_return ;

// handle the core node description //HandleCoreNodeDescriptions(g_corenodesDatabaseId) iferr_return; // commented out due to duplication in DB registration occurred because of the line above

return maxon::OK ; }

// free description static void HandleFreeModule() { g_coreNodeDescriptions. 重置 (); } MAXON_INITIALIZATION (HandleInitializeModule, HandleFreeModule);

This is an extended version of the typical procedure to load MAXON API descriptions. See Loading Data Descriptions .

延伸阅读

maxon::DataDescriptionDefinitionDatabaseInterface::RegisterDatabaseWithUrl
static MAXON_METHOD Result< void > RegisterDatabaseWithUrl(const Id &databaseId, const Url &url)
maxon::Col4::b
T b
定义: col4.h:35
MAXON_ATTRIBUTE_FORCE_INLINE
#define MAXON_ATTRIBUTE_FORCE_INLINE
定义: apibase.h:105
maxon::Col4::r
T r
定义: col4.h:33
maxon::OK
return OK
定义: apibase.h:2532
maxon::Id
定义: apibaseid.h:250
maxon::APPLICATION_URLTYPE::CURRENT_MODULE_RESOURCE_DIR
@ CURRENT_MODULE_RESOURCE_DIR
Resource directory of the module that invoked this call.
iferr_return
#define iferr_return
定义: resultbase.h:1434
MAXON_PORT_INPUT
#define MAXON_PORT_INPUT(T, name)
定义: micronodes_ports.h:60
maxon::corenodes
定义: corenodes.h:9
maxon::BaseArray
定义: basearray.h:366
maxon::Url
定义: url.h:819
MAXON_INITIALIZATION
#define MAXON_INITIALIZATION(...)
定义: module.h:735
maxon::Col4
A color consisting of three components R, G, B and an alpha.
定义: col4.h:14
maxon::Result< void >
iferr_scope
#define iferr_scope
定义: resultbase.h:1343
maxon::Col4::a
T a
定义: col4.h:36
MAXON_CORENODE_REGISTER_PURE
#define MAXON_CORENODE_REGISTER_PURE(CLS, id,...)
定义: corenodes.h:1008
iferr_scope_handler
#define iferr_scope_handler
定义: resultbase.h:1361
maxon::Application::GetUrl
static MAXON_FUNCTION Result< Url > GetUrl(APPLICATION_URLTYPE urlType)
maxon::Col4::g
T g
定义: col4.h:34
MAXON_PORT_OUTPUT
#define MAXON_PORT_OUTPUT(T, name)
定义: micronodes_ports.h:219
maxon::BaseArray::Reset
void Reset()
Deletes all elements (calls destructors and frees memory).
定义: basearray.h:495
maxon::Max
constexpr MAXON_ATTRIBUTE_FORCE_INLINE X Max(X a, X b)
Calculates the maximum of two values and return it.
定义: apibasemath.h:349
maxon::corenodes::BasicMicroNode
定义: micronodes.h:208
micronodes.h

Copyright  © 2014-2025 乐数软件    

工业和信息化部: 粤ICP备14079481号-1