Here you will find documentation on all the descriptions that Cinema 4D currently has. You can list them Alphabetically, by Type or Plugin . The sample Python and C++ code is automatically generated and in some cases may not be 100% correct. If something doesn't work then please refer to the official Cinema 4D SDK documentation for more information.

IDs and information for Omrotate

Omrotate

Attributes

  • ENGLISH NAME : X-ParticlesRotatorModifier
  • NAME : Omrotate
  • INCLUDE : Obase
  • PATH : res/description/omrotate.res
  • PLUGIN : X-Particles
  • MAXON online help (may not exist): OMROTATE

Elements

ID UI Name Type Parameters Cycle
XMRO_ROTATE_ENABLED Enabled BOOL  
XMRO_ROTATE_MODE Mode LONG  
ROTATE_MODE_INDEP Independent
ROTATE_MODE_ACTION Action-Controlled
XMRO_ROTATE_DRAW VisibleinEditor BOOL  
XMRO_ROTATE_OPERATION Operation LONG  
ROTATE_OP_INCR UseRotateSpeed
ROTATE_OP_OBJECT UseObject
ROTATE_OP_SPLINE UseSpline
XMRO_ROTATE_VALUE RotateSpeed REAL
UNIT DEGREE
STEP 1.0
MINSLIDER -360.0
MAXSLIDER 360.0
CUSTOMGUI REALSLIDER
XMRO_ROTATE_LINK_OBJECT ObtainSpeedFrom LINK  
XMRO_ROTATE_OBJECT_AXIS RotationAxis LONG  
RAXIS_H H
RAXIS_P P
RAXIS_B B
XMRO_ROTATE_SPEEDMULT SpeedMultiplier REAL
UNIT REAL
MINSLIDER -500.0
MAXSLIDER 500.0
CUSTOMGUI REALSLIDER
XMRO_ROTATE_ACCEL AngularAccel REAL
PARENTCOLLAPSE
UNIT DEGREE
STEP 1.0
MINSLIDER -360.0
MAXSLIDER 360.0
CUSTOMGUI REALSLIDER
XMRO_ROTATE_SPEEDCLAMP Clamp LONG  
ROTATE_SPEEDCLAMP_NONE Neither
ROTATE_SPEEDCLAMP_BOTH BothMinandMax
ROTATE_SPEEDCLAMP_MIN Minimum
ROTATE_SPEEDCLAMP_MAX Maximum
XMRO_ROTATE_SPEEDCLAMP_MIN Min.RotationSpeed REAL
UNIT DEGREE
STEP 1.0
MINSLIDER -360.0
MAXSLIDER 360.0
CUSTOMGUI REALSLIDER
XMRO_ROTATE_SPEEDCLAMP_MAX Max.RotationSpeed REAL
UNIT DEGREE
STEP 1.0
MINSLIDER -360.0
MAXSLIDER 360.0
CUSTOMGUI REALSLIDER
XMRO_ROTATE_FORCELIMIT EscapeVelocity REAL
UNIT METER
MIN 0.0
MINSLIDER 0.0
MAXSLIDER 10000
CUSTOMGUI REALSLIDER
XMRO_ROTATE_REVERSE Reverse BOOL  
XMRO_ROTATE_SPLINE RotateSpline SPLINE
Y_MIN -360.0
Y_MAX 360.0
X_MIN 0.0
X_MAX 1.0
X_STEPS 0.01
Y_STEPS 30.0
XMRO_ROTATE_YMAX RotateMaximum REAL
MIN 0.0
STEP 0.01
MINSLIDER 0.0
MAXSLIDER 360.0
CUSTOMGUI REALSLIDER
XMRO_ROTATE_NOCONTROL RemovefromModifierControl BOOL  
XMRO_ROTATE_ACTIONLIST ActionsonEscape IN_EXCLUDE NUM_FLAGS
XMRO_ROTATE_ADDACTION AddAction BUTTON  
XMRO_ROTATE_GROUP Groups IN_EXCLUDE
NUM_FLAGS 2
INIT_STATE 3
SEND_SELCHNGMSG 1
SCALE_V
IMAGE_01_ON 1009316
IMAGE_01_OFF 1009320
IMAGE_02_ON 300000231
IMAGE_02_OFF 300000230

Example Code

The following code does not use the correct values when setting the data. You should check directly in C4D for the correct values that you should use in place of the ones that are shown. This code is just to show you how to access the values for getting and setting the parameters.

Python

import c4d
from c4d import gui
def main():
    obj = c4d.BaseObject(c4d.Omrotate)
    doc.InsertObject(obj)
    c4d.EventAdd(c4d.EVENT_FORCEREDRAW)
    
    #You can set parameters two different ways. 
    #First way              
    obj[c4d.XMRO_ROTATE_ENABLED] = True
    obj[c4d.XMRO_ROTATE_MODE] = c4d.ROTATE_MODE_INDEP
    obj[c4d.XMRO_ROTATE_DRAW] = True
    obj[c4d.XMRO_ROTATE_OPERATION] = c4d.ROTATE_OP_INCR
    obj[c4d.XMRO_ROTATE_VALUE] = 0.1
    obj[c4d.XMRO_ROTATE_OBJECT_AXIS] = c4d.RAXIS_H
    obj[c4d.XMRO_ROTATE_SPEEDMULT] = 0.1
    obj[c4d.XMRO_ROTATE_ACCEL] = 0.1
    obj[c4d.XMRO_ROTATE_SPEEDCLAMP] = c4d.ROTATE_SPEEDCLAMP_NONE
    obj[c4d.XMRO_ROTATE_SPEEDCLAMP_MIN] = 0.1
    obj[c4d.XMRO_ROTATE_SPEEDCLAMP_MAX] = 0.1
    obj[c4d.XMRO_ROTATE_FORCELIMIT] = 0.1
    obj[c4d.XMRO_ROTATE_REVERSE] = True
    obj[c4d.XMRO_ROTATE_YMAX] = 0.1
    obj[c4d.XMRO_ROTATE_NOCONTROL] = True
    
    #Second way, using the base container.
    bc = obj.GetDataInstance()
    bc.SetBool(c4d.XMRO_ROTATE_ENABLED,True)
    bc.SetInt32(c4d.XMRO_ROTATE_MODE,c4d.ROTATE_MODE_INDEP)
    bc.SetBool(c4d.XMRO_ROTATE_DRAW,True)
    bc.SetInt32(c4d.XMRO_ROTATE_OPERATION,c4d.ROTATE_OP_INCR)
    bc.SetFloat(c4d.XMRO_ROTATE_VALUE,0.1)
    bc.SetInt32(c4d.XMRO_ROTATE_OBJECT_AXIS,c4d.RAXIS_H)
    bc.SetFloat(c4d.XMRO_ROTATE_SPEEDMULT,0.1)
    bc.SetFloat(c4d.XMRO_ROTATE_ACCEL,0.1)
    bc.SetInt32(c4d.XMRO_ROTATE_SPEEDCLAMP,c4d.ROTATE_SPEEDCLAMP_NONE)
    bc.SetFloat(c4d.XMRO_ROTATE_SPEEDCLAMP_MIN,0.1)
    bc.SetFloat(c4d.XMRO_ROTATE_SPEEDCLAMP_MAX,0.1)
    bc.SetFloat(c4d.XMRO_ROTATE_FORCELIMIT,0.1)
    bc.SetBool(c4d.XMRO_ROTATE_REVERSE,True)
    bc.SetFloat(c4d.XMRO_ROTATE_YMAX,0.1)
    bc.SetBool(c4d.XMRO_ROTATE_NOCONTROL,True)

if __name__=='__main__':
    main()
             

C++

#include "c4d.h"
#include "../res/description/omrotate.h"
void SampleFunction()
{
    BaseDocument *pDoc = GetActiveDocument();
    BaseObject *pObject = BaseObject::Alloc(Omrotate);
    pDoc->InsertObject(pObject);
    pDoc->StartUndo();
    pDoc->AddUndo(UNDO_NEW,pObject);
    pDoc->EndUndo();
    EventAdd(EVENT_FORCEREDRAW);
    
    //You can set parameters two different ways. 

    //First way              
    //Some objects do not store all their data in the container. You need to use GetParameter()/SetParameter() instead. 

    DESCFLAGS_SET flags = DESCFLAGS_SET_PARAM_SET;
    pObject->SetParameter(DescID(XMRO_ROTATE_ENABLED),GeData(true),flags);
    pObject->SetParameter(DescID(XMRO_ROTATE_MODE),GeData(ROTATE_MODE_INDEP),flags);
    pObject->SetParameter(DescID(XMRO_ROTATE_DRAW),GeData(true),flags);
    pObject->SetParameter(DescID(XMRO_ROTATE_OPERATION),GeData(ROTATE_OP_INCR),flags);
    pObject->SetParameter(DescID(XMRO_ROTATE_VALUE),GeData(0.1),flags);
    pObject->SetParameter(DescID(XMRO_ROTATE_OBJECT_AXIS),GeData(RAXIS_H),flags);
    pObject->SetParameter(DescID(XMRO_ROTATE_SPEEDMULT),GeData(0.1),flags);
    pObject->SetParameter(DescID(XMRO_ROTATE_ACCEL),GeData(0.1),flags);
    pObject->SetParameter(DescID(XMRO_ROTATE_SPEEDCLAMP),GeData(ROTATE_SPEEDCLAMP_NONE),flags);
    pObject->SetParameter(DescID(XMRO_ROTATE_SPEEDCLAMP_MIN),GeData(0.1),flags);
    pObject->SetParameter(DescID(XMRO_ROTATE_SPEEDCLAMP_MAX),GeData(0.1),flags);
    pObject->SetParameter(DescID(XMRO_ROTATE_FORCELIMIT),GeData(0.1),flags);
    pObject->SetParameter(DescID(XMRO_ROTATE_REVERSE),GeData(true),flags);
    pObject->SetParameter(DescID(XMRO_ROTATE_YMAX),GeData(0.1),flags);
    pObject->SetParameter(DescID(XMRO_ROTATE_NOCONTROL),GeData(true),flags);
    pObject->Message(MSG_UPDATE);            

    //Second way, using the base container.
    BaseContainer *bc =     pObject->GetDataInstance();
    bc->SetBool(XMRO_ROTATE_ENABLED,true);
    bc->SetInt32(XMRO_ROTATE_MODE,ROTATE_MODE_INDEP);
    bc->SetBool(XMRO_ROTATE_DRAW,true);
    bc->SetInt32(XMRO_ROTATE_OPERATION,ROTATE_OP_INCR);
    bc->SetFloat(XMRO_ROTATE_VALUE,0.1);
    bc->SetInt32(XMRO_ROTATE_OBJECT_AXIS,RAXIS_H);
    bc->SetFloat(XMRO_ROTATE_SPEEDMULT,0.1);
    bc->SetFloat(XMRO_ROTATE_ACCEL,0.1);
    bc->SetInt32(XMRO_ROTATE_SPEEDCLAMP,ROTATE_SPEEDCLAMP_NONE);
    bc->SetFloat(XMRO_ROTATE_SPEEDCLAMP_MIN,0.1);
    bc->SetFloat(XMRO_ROTATE_SPEEDCLAMP_MAX,0.1);
    bc->SetFloat(XMRO_ROTATE_FORCELIMIT,0.1);
    bc->SetBool(XMRO_ROTATE_REVERSE,true);
    bc->SetFloat(XMRO_ROTATE_YMAX,0.1);
    bc->SetBool(XMRO_ROTATE_NOCONTROL,true);
    pObject->Message(MSG_UPDATE);                                                      
}
             

Buttons

This node has buttons. Buttons can manually be executed by calling the following code

Python

c4d.CallButton(obj,c4d.XMRO_ROTATE_ADDACTION)

C++

DescriptionCommand dc;
dc.id = DescID(XMRO_ROTATE_ADDACTION);             
pObject->Message(MSG_DESCRIPTION_COMMAND, &dc);