Help with Tag Plugin

On 11/08/2014 at 17:35, xxxxxxxx wrote:

I have a script that runs a function for each object in a selection. It exports an XML with things like the name, position, ect.

I want to make a plugin that has some user data (text boxes, floats, etc) and have my script pull the data from the plugin to later add to the XML. What's the best way of doing this?

I can figure out how to pull data from an existing tag (a material, phong). I just need a custom tag that will store the custom data I need. If someone could post a sample code of a tag plugin to get me in the right direction, It would be greatly appreciated.

Cheers,
Joe

On 17/08/2014 at 09:48, xxxxxxxx wrote:

You wouldn't necessarily have to write a plugin but rather a python tag will work just fine. You can then use python to write/read directly to an XML file or write the data to a multi-line string where you can then access it easily with XPresso or python.

Hope this helps,

Shawn

On 21/08/2014 at 11:01, xxxxxxxx wrote:

Thats for the input. I think for the sake of being user friendly, we would want a custom tag. That way we can have custom user data that is assignable and able to be read. Just having a problem actually making the tag structure... Thanks

On 21/08/2014 at 11:11, xxxxxxxx wrote:

If you just want a tag plugin to see how to make one. I have a bunch of Python and C++ tag examples on my site: https://sites.google.com/site/scottayersmedia/plugins

-ScottA

On 21/08/2014 at 12:50, xxxxxxxx wrote:

Hello,

the structure of a python tag plugin is pretty much like the structure of any other plugin.

First you have the actual python plugin source file:

import os  
import math  
  
import c4d  
from c4d import plugins, bitmaps, utils  
  
  
class ExamplePythonTag(plugins.TagData) :  
   
    
  def Init(self, node) :  
      # init your plugin here  
      return True  
    
  def Execute(self, tag, doc, op, bt, priority, flags) :  
      # execute the plugin here  
      return c4d.EXECUTIONRESULT_OK  
  
    
  
if __name__=='__main__':  
  plugins.RegisterTagPlugin(id=1027090, str="Example Tag",info=c4d.TAG_EXPRESSION|c4d.TAG_VISIBLE, g=ExamplePythonTag, description="Tpythontag", icon=bitmaps.BaseBitmap())

What you also need is three other files. First the description resource "Tpythontag.res" in the res\description folder. The resource file let's you define the (fixed) parameters of your plugin:

CONTAINER Tpythontag  
{  
  NAME Tpythontag;  
    
  // add your parameters here  
  
}  

Beside the resource file you have to add a "Tpythontag.h" that defines the IDs for each parameter within a enumeration:

#ifndef _Tpythontag_H_  
#define _Tpythontag_H_  
  
enum  
{  
  // add your parameters here  
}  
  
#endif  

Finally you need to define your string. This is done in the "Tpythontag.str" file in res\strings_us\description:

STRINGTABLE Tpythontag  
{  
  Tpythontag    "Example Python Tag";  
  
    
}  

Every plugin also needs a "c4d_symbols.h" in the res folder. There you can define IDs for global strings. These strings can be defined in "c4d_strings.str" in the "strings_us" folder.

You find an overview over python plugin structure in the SDK, where you also find an example tag plugin.

Best wishes,
Sebastian

On 25/08/2014 at 19:59, xxxxxxxx wrote:

This will get me in the right direction. Thanks for the help.

Also, would there be any way to avoid all the extra files and include the parameters in the pyp file? If not all then at least some of it? Like the ID's?

Thanks,
Joe

On 27/08/2014 at 12:25, xxxxxxxx wrote:

Hello,

To my knowledge it is currently not possible edit the description of a plugin via Python. The *.res and *.h files are needed to inform Cinema about the parameters so it can handle them

best wishes,
Sebastian

On 27/08/2014 at 15:43, xxxxxxxx wrote:

Got it.. One more thing. Is there documentation on making the .res file? I don't want some values to be animatable...

Thanks

On 28/08/2014 at 12:43, xxxxxxxx wrote:

Hello,

you can find the full documentation on description resources in the C++ SDK. To mark a parameter as not animateable simply use ANIM OFF:

  
CONTAINER Tpythontag  
{  
 NAME Tpythontag;  
 INCLUDE Texpression;  
   
  GROUP ID_TAGPROPERTIES  
  {  
      REAL P_X {ANIM OFF;}  
  }  
}  

best wishes,
Sebastian

On 09/09/2014 at 22:35, xxxxxxxx wrote:

On top of that shone some sort of light in weight are not chapters your a tale.