[Bf-committers] In need for help/documentation for modifiers

Jeroen Bakker j.bakker at atmind.nl
Fri Oct 8 12:34:07 CEST 2010


I have a small step by step mind dump, but have not yet had time to 
write the complete documentation about it. see below. there is also a 
developer website who mentions it, but cannot find it right now.

Add custom modifier
1. DNA_modifier_types.h --> add ModifierType enumeration (must start 
with eModifierType_[NAME])
2. DNA_modifier_types.h --> Add [NAME]ModifierData struct. first field 
must be ModifierData modifier
3. rna_modifier.c -->     {eModifierType_[NAME], "[NAME]", 
ICON_MOD_PHYSICS, "Surface", ""},

static void rna_def_modifier_test(BlenderRNA *brna)
     StructRNA *srna;

     srna= RNA_def_struct(brna, "TestModifier", "Modifier");
     RNA_def_struct_ui_text(srna, "Test Modifier", "just a test");
     RNA_def_struct_sdna(srna, "TestModifierData");
     RNA_def_struct_ui_icon(srna, ICON_MOD_PARTICLES);
add sdna fields
static StructRNA* rna_Modifier_refine(struct PointerRNA *ptr)
  add case

call method from register

4 modifier.c
         mti = INIT_TYPE(Test);
         mti->type = eModifierTypeType_Constructive;
         mti->flags = eModifierTypeFlag_AcceptsMesh;
         mti->initData = testModifier_initData; // method to be called 
when created
         mti->copyData = testModifier_copyData; // method to be called 
when copied
         mti->applyModifier = testModifier_applyModifier; // method to 
be called when applied
         mti->applyModifierEM = testModifier_applyModifierEM; // method 
to be called when applied
/** test modifier **/
static void testModifier_initData(ModifierData *md)

static void testModifier_copyData(ModifierData *md, ModifierData *target)
static DerivedMesh *testModifier_applyModifier(ModifierData *md,
                            Object *ob,
                            DerivedMesh *dm,
                            int useRenderParams,
                            int isFinalCalc)
     return dm;
static DerivedMesh *testModifier_applyModifierEM(ModifierData *md,
                              Object *ob,
                              EditMesh *editData,
                              DerivedMesh *derivedData)
     return testModifier_applyModifier(md, ob, derivedData, 0, 1);

5. add user interface panel.
class DATA_PT_modifiers add method [NAME]

6. implement modifier.

On 10/08/2010 12:30 PM, Tobias Oelgarte wrote:
> Hello,
> Im currently looking into the sources of blender and try to understand
> how the modifiers are working. Writing a modifier seams to be simple,
> but on the other side there are many other files that are keeping lists
> of them (to know which are available). This is somehow like finding all
> needles in a haystack.
> Is there a documentation on modifiers, that lists all the files that
> need to be changed if you write/add your own modifier? Need this files
> to be changed, or will they be updated automatically? (guess not)
> Somehow i miss some document that points out how i can write my own
> modifier from scratch (including gui etc.). At least a very simple
> example would be nice.
> Currently i developed code to write a so called RestoreVolume-Modifer,
> that ensures that a closed mesh keeps/restores it's original volume
> after deformations (due to other modifiers). Simplest example would be a
> muscle that contracts and will grow on the sides (controllable by vertex
> group), because of the loss of volume in length.
> Any suggestions or hints?
> Best wishes Tobias Oelgarte
> _______________________________________________
> Bf-committers mailing list
> Bf-committers at blender.org
> http://lists.blender.org/mailman/listinfo/bf-committers


Met vriendelijke groet,

Jeroen Bakker

*At Mind BV

Telefoon: 06 50 611 262
E-mail: j.bakker at atmind.nl <mailto:j.bakker at atmind.nl>

More information about the Bf-committers mailing list