forked from bartvdbraak/blender
rna: move metaball.active_element to metaball.elements.active
added rna funcs... elem = metaball.elements.new() metaball.elements.remove(elem)
This commit is contained in:
parent
8a320974f1
commit
11228cb403
@ -80,12 +80,12 @@ class DATA_PT_metaball_element(DataButtonsPanel, bpy.types.Panel):
|
||||
|
||||
@classmethod
|
||||
def poll(cls, context):
|
||||
return (context.meta_ball and context.meta_ball.active_element)
|
||||
return (context.meta_ball and context.meta_ball.elements.active)
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
|
||||
metaelem = context.meta_ball.active_element
|
||||
metaelem = context.meta_ball.elements.active
|
||||
|
||||
layout.prop(metaelem, "type")
|
||||
|
||||
|
@ -162,6 +162,7 @@ void free_mball(struct MetaBall *mb);
|
||||
struct MetaBall *add_mball(char *name);
|
||||
struct MetaBall *copy_mball(struct MetaBall *mb);
|
||||
void make_local_mball(struct MetaBall *mb);
|
||||
struct MetaElem *add_metaball_element(struct MetaBall *mb, const int type);
|
||||
void tex_space_mball(struct Object *ob);
|
||||
float *make_orco_mball(struct Object *ob, struct ListBase *dispbase);
|
||||
void copy_mball_properties(struct Scene *scene, struct Object *active_object);
|
||||
|
@ -176,6 +176,55 @@ void make_local_mball(MetaBall *mb)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* most simple meta-element adding function
|
||||
* dont do context menipulation here (rna uses) */
|
||||
MetaElem *add_metaball_element(MetaBall *mb, const int type)
|
||||
{
|
||||
MetaElem *ml= MEM_callocN(sizeof(MetaElem), "metaelem");
|
||||
|
||||
unit_qt(ml->quat);
|
||||
|
||||
ml->rad= 2.0;
|
||||
ml->s= 2.0;
|
||||
ml->flag= MB_SCALE_RAD;
|
||||
|
||||
switch(type) {
|
||||
case MB_BALL:
|
||||
ml->type = MB_BALL;
|
||||
ml->expx= ml->expy= ml->expz= 1.0;
|
||||
|
||||
break;
|
||||
case MB_TUBE:
|
||||
ml->type = MB_TUBE;
|
||||
ml->expx= ml->expy= ml->expz= 1.0;
|
||||
|
||||
break;
|
||||
case MB_PLANE:
|
||||
ml->type = MB_PLANE;
|
||||
ml->expx= ml->expy= ml->expz= 1.0;
|
||||
|
||||
break;
|
||||
case MB_ELIPSOID:
|
||||
ml->type = MB_ELIPSOID;
|
||||
ml->expx= 1.2f;
|
||||
ml->expy= 0.8f;
|
||||
ml->expz= 1.0;
|
||||
|
||||
break;
|
||||
case MB_CUBE:
|
||||
ml->type = MB_CUBE;
|
||||
ml->expx= ml->expy= ml->expz= 1.0;
|
||||
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
BLI_addtail(&mb->elems, ml);
|
||||
|
||||
return ml;
|
||||
}
|
||||
/** Compute bounding box of all MetaElems/MetaBalls.
|
||||
*
|
||||
* Bounding box is computed from polygonized surface. Object *ob is
|
||||
|
@ -45,6 +45,7 @@
|
||||
|
||||
#include "BKE_depsgraph.h"
|
||||
#include "BKE_context.h"
|
||||
#include "BKE_mball.h"
|
||||
|
||||
#include "ED_screen.h"
|
||||
#include "ED_view3d.h"
|
||||
@ -102,54 +103,12 @@ MetaElem *add_metaball_primitive(bContext *C, float mat[4][4], int type, int new
|
||||
ml->flag &= ~SELECT;
|
||||
ml= ml->next;
|
||||
}
|
||||
|
||||
ml= MEM_callocN(sizeof(MetaElem), "metaelem");
|
||||
|
||||
ml->x= mat[3][0];
|
||||
ml->y= mat[3][1];
|
||||
ml->z= mat[3][2];
|
||||
ml->quat[0]= 1.0;
|
||||
ml->quat[1]= 0.0;
|
||||
ml->quat[2]= 0.0;
|
||||
ml->quat[3]= 0.0;
|
||||
ml->rad= 2.0;
|
||||
ml->s= 2.0;
|
||||
ml->flag= SELECT | MB_SCALE_RAD;
|
||||
|
||||
switch(type) {
|
||||
case MB_BALL:
|
||||
ml->type = MB_BALL;
|
||||
ml->expx= ml->expy= ml->expz= 1.0;
|
||||
|
||||
break;
|
||||
case MB_TUBE:
|
||||
ml->type = MB_TUBE;
|
||||
ml->expx= ml->expy= ml->expz= 1.0;
|
||||
|
||||
break;
|
||||
case MB_PLANE:
|
||||
ml->type = MB_PLANE;
|
||||
ml->expx= ml->expy= ml->expz= 1.0;
|
||||
|
||||
break;
|
||||
case MB_ELIPSOID:
|
||||
ml->type = MB_ELIPSOID;
|
||||
ml->expx= 1.2f;
|
||||
ml->expy= 0.8f;
|
||||
ml->expz= 1.0;
|
||||
|
||||
break;
|
||||
case MB_CUBE:
|
||||
ml->type = MB_CUBE;
|
||||
ml->expx= ml->expy= ml->expz= 1.0;
|
||||
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
ml= add_metaball_element(mball, type);
|
||||
copy_v3_v3(&ml->x, mat[3]);
|
||||
|
||||
ml->flag |= SELECT;
|
||||
mball->lastelem= ml;
|
||||
|
||||
return ml;
|
||||
}
|
||||
|
||||
|
@ -523,9 +523,7 @@ static int object_metaball_add_exec(bContext *C, wmOperator *op)
|
||||
ED_object_new_primitive_matrix(C, obedit, loc, rot, mat);
|
||||
|
||||
elem= (MetaElem*)add_metaball_primitive(C, mat, RNA_enum_get(op->ptr, "type"), newob);
|
||||
mball= (MetaBall*)obedit->data;
|
||||
BLI_addtail(mball->editelems, elem);
|
||||
|
||||
|
||||
/* userdef */
|
||||
if (newob && !enter_editmode) {
|
||||
ED_object_exit_editmode(C, EM_FREEDATA);
|
||||
|
@ -482,7 +482,6 @@ static Nurb *rna_Curve_spline_new(Curve *cu, int type)
|
||||
|
||||
static void rna_Curve_spline_remove(Curve *cu, ReportList *reports, Nurb *nu)
|
||||
{
|
||||
/* todo, check we're in the list */
|
||||
int found= 0;
|
||||
ListBase *nurbs= BKE_curve_nurbs(cu);
|
||||
|
||||
|
@ -35,6 +35,8 @@
|
||||
|
||||
#include "BLI_math.h"
|
||||
|
||||
#include "MEM_guardedalloc.h"
|
||||
|
||||
#include "DNA_scene_types.h"
|
||||
#include "DNA_object_types.h"
|
||||
|
||||
@ -89,28 +91,66 @@ static void rna_MetaBall_update_data(Main *bmain, Scene *scene, PointerRNA *ptr)
|
||||
MetaBall *mb= ptr->id.data;
|
||||
Object *ob;
|
||||
|
||||
for(ob=bmain->object.first; ob; ob= ob->id.next)
|
||||
if(ob->data == mb)
|
||||
copy_mball_properties(scene, ob);
|
||||
/* cheating way for importers to avoid slow updates */
|
||||
if(mb->id.us > 0) {
|
||||
for(ob=bmain->object.first; ob; ob= ob->id.next)
|
||||
if(ob->data == mb)
|
||||
copy_mball_properties(scene, ob);
|
||||
|
||||
DAG_id_flush_update(&mb->id, OB_RECALC_DATA);
|
||||
WM_main_add_notifier(NC_GEOM|ND_DATA, mb);
|
||||
}
|
||||
}
|
||||
|
||||
DAG_id_flush_update(&mb->id, OB_RECALC_DATA);
|
||||
WM_main_add_notifier(NC_GEOM|ND_DATA, mb);
|
||||
static MetaElem *rna_MetaBall_elements_new(MetaBall *mb, int type)
|
||||
{
|
||||
MetaElem *ml= add_metaball_element(mb, type);
|
||||
|
||||
/* cheating way for importers to avoid slow updates */
|
||||
if(mb->id.us > 0) {
|
||||
DAG_id_flush_update(&mb->id, OB_RECALC_DATA);
|
||||
WM_main_add_notifier(NC_GEOM|ND_DATA, &mb->id);
|
||||
}
|
||||
|
||||
return ml;
|
||||
}
|
||||
|
||||
static void rna_MetaBall_elements_remove(MetaBall *mb, ReportList *reports, MetaElem *ml)
|
||||
{
|
||||
int found= 0;
|
||||
|
||||
found= BLI_remlink_safe(&mb->elems, ml);
|
||||
|
||||
if(!found) {
|
||||
BKE_reportf(reports, RPT_ERROR, "MetaBall \"%s\" does not contain spline given", mb->id.name+2);
|
||||
return;
|
||||
}
|
||||
|
||||
MEM_freeN(ml);
|
||||
/* invalidate pointer!, no can do */
|
||||
|
||||
/* cheating way for importers to avoid slow updates */
|
||||
if(mb->id.us > 0) {
|
||||
DAG_id_flush_update(&mb->id, OB_RECALC_DATA);
|
||||
WM_main_add_notifier(NC_GEOM|ND_DATA, &mb->id);
|
||||
}
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
static EnumPropertyItem metaelem_type_items[] = {
|
||||
{MB_BALL, "BALL", ICON_META_BALL, "Ball", ""},
|
||||
{MB_TUBE, "TUBE", ICON_META_TUBE, "Tube", ""},
|
||||
{MB_PLANE, "PLANE", ICON_META_PLANE, "Plane", ""},
|
||||
{MB_ELIPSOID, "ELLIPSOID", ICON_META_ELLIPSOID, "Ellipsoid", ""}, // NOTE: typo at original definition!
|
||||
{MB_CUBE, "CUBE", ICON_META_CUBE, "Cube", ""},
|
||||
{0, NULL, 0, NULL, NULL}};
|
||||
|
||||
static void rna_def_metaelement(BlenderRNA *brna)
|
||||
{
|
||||
StructRNA *srna;
|
||||
PropertyRNA *prop;
|
||||
static EnumPropertyItem prop_type_items[] = {
|
||||
{MB_BALL, "BALL", ICON_META_BALL, "Ball", ""},
|
||||
{MB_TUBE, "TUBE", ICON_META_TUBE, "Tube", ""},
|
||||
{MB_PLANE, "PLANE", ICON_META_PLANE, "Plane", ""},
|
||||
{MB_ELIPSOID, "ELLIPSOID", ICON_META_ELLIPSOID, "Ellipsoid", ""}, // NOTE: typo at original definition!
|
||||
{MB_CUBE, "CUBE", ICON_META_CUBE, "Cube", ""},
|
||||
{0, NULL, 0, NULL, NULL}};
|
||||
|
||||
|
||||
srna= RNA_def_struct(brna, "MetaElement", NULL);
|
||||
RNA_def_struct_sdna(srna, "MetaElem");
|
||||
RNA_def_struct_ui_text(srna, "Meta Element", "Blobby element in a MetaBall datablock");
|
||||
@ -118,7 +158,7 @@ static void rna_def_metaelement(BlenderRNA *brna)
|
||||
|
||||
/* enums */
|
||||
prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
|
||||
RNA_def_property_enum_items(prop, prop_type_items);
|
||||
RNA_def_property_enum_items(prop, metaelem_type_items);
|
||||
RNA_def_property_ui_text(prop, "Type", "Metaball types");
|
||||
RNA_def_property_update(prop, 0, "rna_MetaBall_update_data");
|
||||
|
||||
@ -176,6 +216,37 @@ static void rna_def_metaelement(BlenderRNA *brna)
|
||||
RNA_def_property_update(prop, 0, "rna_MetaBall_update_data");
|
||||
}
|
||||
|
||||
/* mball.elements */
|
||||
static void rna_def_metaball_elements(BlenderRNA *brna, PropertyRNA *cprop)
|
||||
{
|
||||
StructRNA *srna;
|
||||
PropertyRNA *prop;
|
||||
|
||||
FunctionRNA *func;
|
||||
PropertyRNA *parm;
|
||||
|
||||
RNA_def_property_srna(cprop, "MetaBallElements");
|
||||
srna= RNA_def_struct(brna, "MetaBallElements", NULL);
|
||||
RNA_def_struct_sdna(srna, "MetaBall");
|
||||
RNA_def_struct_ui_text(srna, "Meta Elements", "Collection of metaball elements");
|
||||
|
||||
func= RNA_def_function(srna, "new", "rna_MetaBall_elements_new");
|
||||
RNA_def_function_ui_description(func, "Add a new spline to the curve.");
|
||||
parm= RNA_def_enum(func, "type", metaelem_type_items, MB_BALL, "", "type for the new meta element.");
|
||||
parm= RNA_def_pointer(func, "element", "MetaElement", "", "The newly created metaelement.");
|
||||
RNA_def_function_return(func, parm);
|
||||
|
||||
func= RNA_def_function(srna, "remove", "rna_MetaBall_elements_remove");
|
||||
RNA_def_function_ui_description(func, "Remove a spline from a curve.");
|
||||
RNA_def_function_flag(func, FUNC_USE_REPORTS);
|
||||
parm= RNA_def_pointer(func, "element", "MetaElement", "", "The element to remove.");
|
||||
RNA_def_property_flag(parm, PROP_REQUIRED);
|
||||
|
||||
prop= RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
|
||||
RNA_def_property_pointer_sdna(prop, NULL, "lastelem");
|
||||
RNA_def_property_ui_text(prop, "Active Element", "Last selected element");
|
||||
}
|
||||
|
||||
static void rna_def_metaball(BlenderRNA *brna)
|
||||
{
|
||||
StructRNA *srna;
|
||||
@ -195,11 +266,8 @@ static void rna_def_metaball(BlenderRNA *brna)
|
||||
RNA_def_property_collection_sdna(prop, NULL, "elems", NULL);
|
||||
RNA_def_property_struct_type(prop, "MetaElement");
|
||||
RNA_def_property_ui_text(prop, "Elements", "Meta elements");
|
||||
rna_def_metaball_elements(brna, prop);
|
||||
|
||||
prop= RNA_def_property(srna, "active_element", PROP_POINTER, PROP_NONE);
|
||||
RNA_def_property_pointer_sdna(prop, NULL, "lastelem");
|
||||
RNA_def_property_ui_text(prop, "Last selected element.", "Last selected element");
|
||||
|
||||
/* enums */
|
||||
prop= RNA_def_property(srna, "update_method", PROP_ENUM, PROP_NONE);
|
||||
RNA_def_property_enum_sdna(prop, NULL, "flag");
|
||||
|
@ -620,7 +620,7 @@
|
||||
#+ * CurveMapping.curves -> curves: collection, "(read-only)"
|
||||
#CurveMapping.use_clip -> use_clip: boolean "Force the curve view to fit a defined boundary"
|
||||
#+ * CurveMapping.white_level -> white_level: float[3] "For RGB curves, the color that white is mapped to"
|
||||
#TODO MOVE TO COLLECTION * CurveSplines.active -> active: pointer "Active curve spline"
|
||||
#+ * CurveSplines.active -> active: pointer "Active curve spline"
|
||||
#DopeSheet.filter_group -> filter_group: pointer "Group that included Object should be a member of"
|
||||
#DopeSheet.show_armatures -> show_armatures: boolean "Include visualization of Armature related Animation data"
|
||||
#DopeSheet.show_cameras -> show_cameras: boolean "Include visualization of Camera related Animation data"
|
||||
@ -1476,7 +1476,6 @@
|
||||
#+ * ID|Mesh.uv_textures -> uv_textures: collection, "(read-only)"
|
||||
#+ * ID|Mesh.vertex_colors -> vertex_colors: collection, "(read-only)"
|
||||
#ID|Mesh.vertices -> vertices: collection, "(read-only) Vertices of the mesh"
|
||||
#TODO MOVE TO ELEMENTS * ID|MetaBall.active_element -> active_element: pointer, "(read-only) Last selected element"
|
||||
#+ * ID|MetaBall.animation_data -> animation_data: pointer, "(read-only) Animation data for this datablock"
|
||||
#+ * ID|MetaBall.elements -> elements: collection, "(read-only) Meta elements"
|
||||
#+ * ID|MetaBall.materials -> materials: collection, "(read-only)"
|
||||
|
Loading…
Reference in New Issue
Block a user