Thanks for your answer, it solved my problem.
I used: Vector::ClampMax() and Vector::ClampMin() to limit the tangent to the value I want.
@kbar and @m_magalhaes, Thank you for your reply.
I know that parameter changes can be determined by overriding SetDParameter().
But I don't know how to override SetDParameter() to know whether the user has added / deleted keyframes, or changed the value of keyframes (whether the small button next to the parameter is pressed). Thank you again for your help.
As I demonstrated above, how to track the user's changes to the parameter animation in a custom ObjectPlugin, or receive a message when the user changes the animation. Do I need to listen to the above events in ObjectData::Message()?Can someone help me?
@ferdinand Thank you for your reply.
My plugin is written in C++. Is there a way to call redshift.GetRSMaterialNodeMaster() in C++ 's existing sdk? (or call the python code through C++)
I need to get the node information on the Redshift material for a plugin that automatically adds maps, reads maps, and converts Redshift materials to default materials.
I don't know how to get the XPresso stored on the Redshift material. Can someone help me?
I use ZipFile::CopyInFileInZip() to compress the file into a zip package. However, when the file name contains non ASCII characters, the file name is replaced with an underscore. Is there a way to use non ASCII file names in zip without using external libraries?
if (zf == nullptr)
if (!zf->Open(fnZip, false, ZIP_APPEND_CREATE))
while (fnCopy.FileSelect(FILESELECTTYPE::ANYTHING, FILESELECT::LOAD, "Select file to add to Zip File"_s))
zf->CopyInFileInZip(fnCopy, "textures/" + fnCopy.GetFileString());
@m_magalhaes Thank you for your advice.
Is the dynamics engine in Cinema4D called in a thread?
How does it update the location of the object?
Can you provide a general reference for my project?
@ferdinand @fwilleke80 Thank you for your reply.
I'm writing an IPR (Interactive Photorealistic Rendering) rendering plugin like octane or redshift. I need to send scene polygons and materials to the outside through IPC (Inter-Process Communication).
BaseDocument.Polygonize() solved my problem very well.
I need further optimization, and I need to check whether the scene (tags, objects, et cetera) has been changed.
Does BaseDocument.Polygonize()copy the Dirty and HDirty of the object?
@m_magalhaes Thank you for your reply, I'm sorry I didn't make it clear.
I wanted to create my own implementation of Bullet Engine. Because the dynamic systems of MMD and Cinema4D are different, the transformation is complicated.
I need to do is:
I need to introduce the Bullet Physics engine into C4D to build the Physics system of MMD, AND I need to update objects just like the dynamics system of C4D.
Is there any information that was sent out before the calculation of dynamics?
Is there a more efficient update method?
I need to get the final polygon of the current active scene, lights and other objects for synchronization to the external renderer.
I learned that VolumeData can do this. I don't know how a dialog plugin gets the final VolumeData for synchronization.
If you knows how to get the right API, pls leave a comment. That would be really appriciated!