An object plugin class. Register this class with RegisterObjectData().
Note
Before you start writing your own ObjectData plugin, you should read NodeData Management before.
See also
Py-DoubleCircle, Py-Gravitation, Py-RoundedTube and Py-SpherifyModifier plugin examples.
On each call of a method of your class (Python), Python has to manage a lot of stuff so that the method can be called. The method GetVirtualObjects() is called on each frame and if you don’t want to calculate the object on each frame again and again you can still return the cache object with the following code:
def GetVirtualObjects(self, op, hierarchyhelp):
dirty = op.CheckCache(hierarchyhelp) or op.IsDirty(c4d.DIRTY_DATA)
if dirty is False: return op.GetCache(hierarchyhelp)
This is the common way how to return the cache object so Python don’t has to built the whole object on each frame. That saves a lot of time. But how you can read some lines before, just calling the method needs some time, because Python has to register this call to the internal management system.
So there is a new second way how to return the cache of your already-built object on a level which is much closer to the internal system than Python. You can set a flag in your class which is checked after the constructor of your object was read. The code you see above is called and if there is a cache available the Python method is not called anymore because the cache is already taken. That saves a lot of time. To use this code you should take a look at the following class:
class CacheTest(plugins.ObjectData):
"""CacheTest Generator"""
def __init__(self):
self.SetOptimizeCache(True)
def GetVirtualObjects(self, op, hierarchyhelp):
#disabled the following lines because cache flag was set
#so the cache build is done before this method is called
#dirty = op.CheckCache(hierarchyhelp) or op.IsDirty(c4d.DIRTY_DATA)
#if dirty is False: return op.GetCache(hierarchyhelp)
#create cube
return c4d.BaseObject(c4d.Ocube)
Override - Return the boundaries of your object.:
def GetDimension(self, op, mp, rad):
"""
(i) When the method runs without a raised exception
mp and rad will be internally copied, otherwise they
are ignored.
"""
mp.x = self.x_size # correct
mp.y = self.y_size # correct
mp.z = self.z_size # correct
mp = c4d.Vector(x_size, y_size, z_size) #!!! wrong !!! do not rebind mp!
#this assign applies for 'rad' as well
return
Parameters: |
|
---|
Override - Called when the display is updated for you to display some visual element of your op in the 3D view.
Note
Important: This function is called in a thread context. Please see the important information about threading.
Parameters: |
|
||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Return type: |
int |
||||||||||
Returns: |
Success of drawing into the editor view:
|
Override - Return an object chain of a generator object (in your case e.g. a polygonal object). Must not be overridden for non-generator objects.
Note
Important: The building, adding, comparing and touching must be always done - even if there has been no change! The reason is that CINEMA 4D must always know which objects are affected by the generator. This function is called in a thread context. Please see the important information about threading.
Note
Please read the Optimize Cache introduction at the top of this page to get in touch with the new caching options.
Parameters: | op (BaseObject) – The established base object. |
---|---|
Return type: | BaseObject or None |
Returns: | The newly allocated object or None if an error occured. |
Override - Return a spline contour. For spline objects only.
Note
Important: This function is called in a thread context. Please see the important information about threading.
Parameters: |
|
---|---|
Return type: |
SplineObject or None |
Returns: |
The newly allocated spline or None |
Only necessary for deformation objects. This is called when your plugin should modify the passed object.
Note
Important: This function is called in a thread context. Please see the important information about threading.
Parameters: |
|
---|---|
Return type: |
bool |
Returns: |
Success of modifying the object. |
You can override this function to check for a change in a deformer object manually.
Note
Important: This function is called in a thread context. Please see the important information about threading.
Parameters: |
|
---|
Override - Move a handle manually.
Parameters: |
|
||||||
---|---|---|---|---|---|---|---|
Return type: |
bool |
||||||
Returns: |
Success of modifying the handle. |
Override - Move a handle manually.
Parameters: |
|
||||||
---|---|---|---|---|---|---|---|
Return type: |
int |
||||||
Returns: |
The handle ID that is to be passed to MoveHandle() |
Override - By default this function returns False. Then C4D will call Execute() at the priority specified by the user in the EXPRESSION_PRIORITY parameter of the container.
If you override this function and return True, then you can insert your own points of execution in the list by calling for example:
list.Add(op, c4d.EXECUTION_ANIMATION, 0)
list.Add(op, c4d.EXECUTION_GENERATOR, 0)
Parameters: |
|
---|---|
Return type: |
bool |
Returns: |
Return**True**if you override this function and has added stuff to list. |
Override - Called at the point in the priority pipeline specified by AddToExecution(), or the lack thereof.
Parameters: |
|
||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Return type: |
int |
||||||||||||||||||||||||
Returns: |
The result:
|
Called for modifying particles. This is for particle modifiers only.
Note
Important: This function is called in a thread context. Please see the important information about threading.
Parameters: |
|
---|