forked from bartvdbraak/blender
Multires/2.5:
Added subdivide operator and button for multires. Since this seems to be the only modifier with an operator defined, I'm not sure if I put it in a good place or not, someone can check on this?
This commit is contained in:
parent
1a69eab4a0
commit
380efe9dc4
@ -256,7 +256,9 @@ class DATA_PT_modifiers(DataButtonsPanel):
|
|||||||
layout.itemR(md, "mirror_object")
|
layout.itemR(md, "mirror_object")
|
||||||
|
|
||||||
def multires(self, layout, md):
|
def multires(self, layout, md):
|
||||||
layout.itemR(md, "levels")
|
layout.itemR(md, "subdivision_type")
|
||||||
|
layout.itemO("OBJECT_OT_multires_subdivide", text="Subdivide")
|
||||||
|
layout.itemR(md, "level")
|
||||||
|
|
||||||
def particleinstance(self, layout, md):
|
def particleinstance(self, layout, md):
|
||||||
layout.itemR(md, "object")
|
layout.itemR(md, "object")
|
||||||
|
@ -60,12 +60,12 @@ void multires_force_update(struct Object *ob);
|
|||||||
struct DerivedMesh *multires_dm_create_from_derived(struct MultiresModifierData*, struct DerivedMesh*,
|
struct DerivedMesh *multires_dm_create_from_derived(struct MultiresModifierData*, struct DerivedMesh*,
|
||||||
struct Mesh *, int, int);
|
struct Mesh *, int, int);
|
||||||
|
|
||||||
|
struct MultiresModifierData *find_multires_modifier(struct Object *ob);
|
||||||
int multiresModifier_switch_level(struct Object *, const int);
|
int multiresModifier_switch_level(struct Object *, const int);
|
||||||
void multiresModifier_join(struct Object *);
|
void multiresModifier_join(struct Object *);
|
||||||
void multiresModifier_del_levels(struct MultiresModifierData *, struct Object *, int direction);
|
void multiresModifier_del_levels(struct MultiresModifierData *, struct Object *, int direction);
|
||||||
void multiresModifier_subdivide(struct MultiresModifierData *mmd, struct Object *ob, int distance,
|
void multiresModifier_subdivide(struct MultiresModifierData *mmd, struct Object *ob, int distance,
|
||||||
int updateblock, int simple);
|
int updateblock, int simple);
|
||||||
void multiresModifier_setLevel(void *mmd_v, void *ob_v);
|
|
||||||
int multiresModifier_reshape(struct MultiresModifierData *mmd, struct Object *dst, struct Object *src);
|
int multiresModifier_reshape(struct MultiresModifierData *mmd, struct Object *dst, struct Object *src);
|
||||||
|
|
||||||
/* Related to the old multires */
|
/* Related to the old multires */
|
||||||
|
@ -59,16 +59,26 @@ static const int multires_max_levels = 13;
|
|||||||
static const int multires_quad_tot[] = {4, 9, 25, 81, 289, 1089, 4225, 16641, 66049, 263169, 1050625, 4198401, 16785409};
|
static const int multires_quad_tot[] = {4, 9, 25, 81, 289, 1089, 4225, 16641, 66049, 263169, 1050625, 4198401, 16785409};
|
||||||
static const int multires_side_tot[] = {2, 3, 5, 9, 17, 33, 65, 129, 257, 513, 1025, 2049, 4097};
|
static const int multires_side_tot[] = {2, 3, 5, 9, 17, 33, 65, 129, 257, 513, 1025, 2049, 4097};
|
||||||
|
|
||||||
int multiresModifier_switch_level(Object *ob, const int distance)
|
MultiresModifierData *find_multires_modifier(Object *ob)
|
||||||
{
|
{
|
||||||
ModifierData *md = NULL;
|
ModifierData *md;
|
||||||
MultiresModifierData *mmd = NULL;
|
MultiresModifierData *mmd = NULL;
|
||||||
|
|
||||||
for(md = ob->modifiers.first; md; md = md->next) {
|
for(md = ob->modifiers.first; md; md = md->next) {
|
||||||
if(md->type == eModifierType_Multires)
|
if(md->type == eModifierType_Multires) {
|
||||||
mmd = (MultiresModifierData*)md;
|
mmd = (MultiresModifierData*)md;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return mmd;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int multiresModifier_switch_level(Object *ob, const int distance)
|
||||||
|
{
|
||||||
|
MultiresModifierData *mmd = find_multires_modifier(ob);
|
||||||
|
|
||||||
if(mmd) {
|
if(mmd) {
|
||||||
mmd->lvl += distance;
|
mmd->lvl += distance;
|
||||||
if(mmd->lvl < 1) mmd->lvl = 1;
|
if(mmd->lvl < 1) mmd->lvl = 1;
|
||||||
|
@ -86,6 +86,7 @@ void GROUP_OT_objects_remove_active(struct wmOperatorType *ot);
|
|||||||
|
|
||||||
/* object_modifier.c */
|
/* object_modifier.c */
|
||||||
void OBJECT_OT_modifier_add(struct wmOperatorType *ot);
|
void OBJECT_OT_modifier_add(struct wmOperatorType *ot);
|
||||||
|
void OBJECT_OT_multires_subdivide(struct wmOperatorType *ot);
|
||||||
|
|
||||||
#endif /* ED_OBJECT_INTERN_H */
|
#endif /* ED_OBJECT_INTERN_H */
|
||||||
|
|
||||||
|
@ -46,6 +46,7 @@
|
|||||||
#include "BKE_global.h"
|
#include "BKE_global.h"
|
||||||
#include "BKE_mesh.h"
|
#include "BKE_mesh.h"
|
||||||
#include "BKE_modifier.h"
|
#include "BKE_modifier.h"
|
||||||
|
#include "BKE_multires.h"
|
||||||
#include "BKE_report.h"
|
#include "BKE_report.h"
|
||||||
#include "BKE_object.h"
|
#include "BKE_object.h"
|
||||||
#include "BKE_particle.h"
|
#include "BKE_particle.h"
|
||||||
@ -367,6 +368,32 @@ void OBJECT_OT_modifier_add(wmOperatorType *ot)
|
|||||||
RNA_def_enum(ot->srna, "type", modifier_type_items, 0, "Type", "");
|
RNA_def_enum(ot->srna, "type", modifier_type_items, 0, "Type", "");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int multires_subdivide_exec(bContext *C, wmOperator *op)
|
||||||
|
{
|
||||||
|
Object *ob = CTX_data_active_object(C);
|
||||||
|
MultiresModifierData *mmd = find_multires_modifier(ob);
|
||||||
|
|
||||||
|
if(mmd) {
|
||||||
|
multiresModifier_subdivide(mmd, ob, 1, 0, mmd->simple);
|
||||||
|
WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob);
|
||||||
|
}
|
||||||
|
|
||||||
|
return OPERATOR_FINISHED;
|
||||||
|
}
|
||||||
|
|
||||||
|
void OBJECT_OT_multires_subdivide(wmOperatorType *ot)
|
||||||
|
{
|
||||||
|
ot->name= "Multires Subdivide";
|
||||||
|
ot->description= "Add a new level of subdivision.";
|
||||||
|
ot->idname= "OBJECT_OT_multires_subdivide";
|
||||||
|
ot->poll= ED_operator_object_active;
|
||||||
|
|
||||||
|
ot->exec= multires_subdivide_exec;
|
||||||
|
|
||||||
|
/* flags */
|
||||||
|
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||||
|
}
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
static void modifiers_add(void *ob_v, int type)
|
static void modifiers_add(void *ob_v, int type)
|
||||||
{
|
{
|
||||||
|
@ -100,6 +100,7 @@ void ED_operatortypes_object(void)
|
|||||||
WM_operatortype_append(OBJECT_OT_primitive_add);
|
WM_operatortype_append(OBJECT_OT_primitive_add);
|
||||||
|
|
||||||
WM_operatortype_append(OBJECT_OT_modifier_add);
|
WM_operatortype_append(OBJECT_OT_modifier_add);
|
||||||
|
WM_operatortype_append(OBJECT_OT_multires_subdivide);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ED_keymap_object(wmWindowManager *wm)
|
void ED_keymap_object(wmWindowManager *wm)
|
||||||
|
@ -335,9 +335,9 @@ static void rna_def_modifier_multires(BlenderRNA *brna)
|
|||||||
|
|
||||||
rna_def_property_subdivision_common(srna, "simple");
|
rna_def_property_subdivision_common(srna, "simple");
|
||||||
|
|
||||||
prop= RNA_def_property(srna, "levels", PROP_INT, PROP_NONE);
|
prop= RNA_def_property(srna, "level", PROP_INT, PROP_NONE);
|
||||||
RNA_def_property_int_sdna(prop, NULL, "lvl");
|
RNA_def_property_int_sdna(prop, NULL, "lvl");
|
||||||
RNA_def_property_ui_text(prop, "Levels", "");
|
RNA_def_property_ui_text(prop, "Level", "");
|
||||||
RNA_def_property_int_funcs(prop, NULL, NULL, "rna_MultiresModifier_level_range");
|
RNA_def_property_int_funcs(prop, NULL, NULL, "rna_MultiresModifier_level_range");
|
||||||
RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Modifier_update");
|
RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Modifier_update");
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user