[Bf-blender-cvs] [3113007] particles_refactor: Boilerplate RNA for the particle display settings.

Lukas Tönne noreply at git.blender.org
Tue Apr 22 12:07:01 CEST 2014


Commit: 31130076827042447848a0ec8086d22c42c0fbc0
Author: Lukas Tönne
Date:   Fri Jan 3 13:48:53 2014 +0100
https://developer.blender.org/rB31130076827042447848a0ec8086d22c42c0fbc0

Boilerplate RNA for the particle display settings.

===================================================================

M	source/blender/blenkernel/BKE_nparticle.h
M	source/blender/blenkernel/intern/nparticle.c
M	source/blender/makesdna/DNA_nparticle_types.h
M	source/blender/makesrna/intern/rna_nparticle.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_nparticle.h b/source/blender/blenkernel/BKE_nparticle.h
index 701d623..eaa2f7b 100644
--- a/source/blender/blenkernel/BKE_nparticle.h
+++ b/source/blender/blenkernel/BKE_nparticle.h
@@ -38,6 +38,7 @@ struct NParticleAttribute;
 struct NParticleState;
 struct NParticleAttributeState;
 struct NParticleDisplay;
+struct NParticleDisplayDupliObject;
 
 /* XXX where to put this? */
 typedef uint32_t NParticleID;
@@ -122,4 +123,9 @@ void BKE_nparticle_display_free(struct NParticleSystem *psys, struct NParticleDi
 /* update object transflag for nparticle duplis */
 void BKE_nparticle_update_object_dupli_flags(struct Object *ob, struct NParticleSystem *psys);
 
+struct NParticleDisplayDupliObject *BKE_nparticle_display_dupli_object_add(struct NParticleDisplay *display);
+void BKE_nparticle_display_dupli_object_remove(struct NParticleDisplay *display, struct NParticleDisplayDupliObject *dupli_object);
+void BKE_nparticle_display_dupli_object_remove_all(struct NParticleDisplay *display);
+void BKE_nparticle_display_dupli_object_move(struct NParticleDisplay *display, int from_index, int to_index);
+
 #endif /* BKE_NPARTICLE_H */
diff --git a/source/blender/blenkernel/intern/nparticle.c b/source/blender/blenkernel/intern/nparticle.c
index 5e0ca92..c675336 100644
--- a/source/blender/blenkernel/intern/nparticle.c
+++ b/source/blender/blenkernel/intern/nparticle.c
@@ -649,3 +649,64 @@ void BKE_nparticle_update_object_dupli_flags(Object *ob, NParticleSystem *psys)
 			ob->transflag |= OB_DUPLI_NPARTICLE;
 	}
 }
+
+NParticleDisplayDupliObject *BKE_nparticle_display_dupli_object_add(NParticleDisplay *display)
+{
+	NParticleDisplayDupliObject *dob;
+	
+	BLI_assert(display->type == PAR_DISPLAY_DUPLI);
+	
+	dob = MEM_callocN(sizeof(NParticleDisplayDupliObject), "particle dupli object");
+	BLI_addtail(&display->dupli_objects, dob);
+	return dob;
+}
+
+void BKE_nparticle_display_dupli_object_remove(NParticleDisplay *display, NParticleDisplayDupliObject *dupli_object)
+{
+	BLI_assert(display->type == PAR_DISPLAY_DUPLI);
+	
+	BLI_remlink(&display->dupli_objects, dupli_object);
+	MEM_freeN(dupli_object);
+}
+
+void BKE_nparticle_display_dupli_object_remove_all(NParticleDisplay *display)
+{
+	NParticleDisplayDupliObject *dob, *dob_next;
+	
+	BLI_assert(display->type == PAR_DISPLAY_DUPLI);
+	
+	for (dob = display->dupli_objects.first; dob; dob = dob_next) {
+		dob_next = dob->next;
+		
+		MEM_freeN(dob);
+	}
+	display->dupli_objects.first = display->dupli_objects.last = NULL;
+}
+
+void BKE_nparticle_display_dupli_object_move(NParticleDisplay *display, int from_index, int to_index)
+{
+	NParticleDisplayDupliObject *dob;
+	
+	BLI_assert(display->type == PAR_DISPLAY_DUPLI);
+	
+	if (from_index == to_index)
+		return;
+	if (from_index < 0 || to_index < 0)
+		return;
+	
+	dob = BLI_findlink(&display->dupli_objects, from_index);
+	if (to_index < from_index) {
+		NParticleDisplayDupliObject *nextdob = BLI_findlink(&display->dupli_objects, to_index);
+		if (nextdob) {
+			BLI_remlink(&display->dupli_objects, dob);
+			BLI_insertlinkbefore(&display->dupli_objects, nextdob, dob);
+		}
+	}
+	else {
+		NParticleDisplayDupliObject *prevdob = BLI_findlink(&display->dupli_objects, to_index);
+		if (prevdob) {
+			BLI_remlink(&display->dupli_objects, dob);
+			BLI_insertlinkafter(&display->dupli_objects, prevdob, dob);
+		}
+	}
+}
diff --git a/source/blender/makesdna/DNA_nparticle_types.h b/source/blender/makesdna/DNA_nparticle_types.h
index 2055285..7ec3c28 100644
--- a/source/blender/makesdna/DNA_nparticle_types.h
+++ b/source/blender/makesdna/DNA_nparticle_types.h
@@ -111,9 +111,11 @@ typedef struct NParticleDisplay {
 	ListBase dupli_objects;
 } NParticleDisplay;
 
-typedef struct NParticleDisplayDupli {
-	struct Object *ob;
-} NParticleDisplayDupli;
+typedef struct NParticleDisplayDupliObject {
+	struct NParticleDisplayDupliObject *next, *prev;
+	
+	struct Object *object;
+} NParticleDisplayDupliObject;
 
 typedef enum eParticleDisplayType {
 	PAR_DISPLAY_PARTICLE		= 1,
diff --git a/source/blender/makesrna/intern/rna_nparticle.c b/source/blender/makesrna/intern/rna_nparticle.c
index d2ffea6..64ad5f4 100644
--- a/source/blender/makesrna/intern/rna_nparticle.c
+++ b/source/blender/makesrna/intern/rna_nparticle.c
@@ -32,6 +32,13 @@
 
 #include "rna_internal.h"
 
+static EnumPropertyItem nparticle_display_type_items[] = {
+    {PAR_DISPLAY_PARTICLE, "PARTICLE", ICON_NONE, "Particles", "Display particle symbols"},
+    {PAR_DISPLAY_DUPLI, "DUPLI", ICON_NONE, "Duplis", "Create object dupli instances from particles"},
+    {0, NULL, 0, NULL, NULL}
+};
+
+
 #ifdef RNA_RUNTIME
 
 #include "MEM_guardedalloc.h"
@@ -118,7 +125,7 @@ int rna_NParticleAttributeState_data_lookup_int(PointerRNA *ptr, int key, Pointe
 	return data != NULL;
 }
 
-int rna_NParticleAttributeState_data_assign_int(PointerRNA *ptr, int key, const PointerRNA *assign_ptr, StructRNA *data_srna)
+int rna_NParticleAttributeState_data_assign_int(PointerRNA *ptr, int key, const PointerRNA *assign_ptr, StructRNA *UNUSED(data_srna))
 {
 	NParticleAttributeState *state = ptr->data;
 	void *data = BLI_pbuf_get(&state->data, key);
@@ -365,6 +372,37 @@ static void rna_NParticleSystem_attributes_move(NParticleSystem *psys, int from_
 	BKE_nparticle_attribute_move(psys, from_index, to_index);
 }
 
+static StructRNA *rna_NParticleDisplay_refine(PointerRNA *ptr)
+{
+	NParticleDisplay *display = ptr->data;
+	
+	switch (display->type) {
+		case PAR_DISPLAY_PARTICLE:      return &RNA_NParticleDisplayParticle;
+		case PAR_DISPLAY_DUPLI:         return &RNA_NParticleDisplayDupli;
+		default:                        return &RNA_NParticleDisplay;
+	}
+}
+
+static NParticleDisplayDupliObject *rna_NParticleDisplayDupli_dupli_objects_new(NParticleDisplay *display)
+{
+	return BKE_nparticle_display_dupli_object_add(display);
+}
+
+static void rna_NParticleDisplayDupli_dupli_objects_remove(NParticleDisplay *display, NParticleDisplayDupliObject *dupli_object)
+{
+	BKE_nparticle_display_dupli_object_remove(display, dupli_object);
+}
+
+static void rna_NParticleDisplayDupli_dupli_objects_clear(NParticleDisplay *display)
+{
+	BKE_nparticle_display_dupli_object_remove_all(display);
+}
+
+static void rna_NParticleDisplayDupli_dupli_objects_move(NParticleDisplay *display, int from_index, int to_index)
+{
+	BKE_nparticle_display_dupli_object_move(display, from_index, to_index);
+}
+
 #else
 
 EnumPropertyItem nparticle_attribute_datatype_all[] = {
@@ -574,7 +612,6 @@ static void rna_def_nparticle_attribute_state(BlenderRNA *brna)
 static void rna_def_nparticle_iterator(BlenderRNA *brna)
 {
 	StructRNA *srna;
-	PropertyRNA *prop;
 
 	srna = RNA_def_struct(brna, "NParticleIterator", NULL);
 	RNA_def_struct_ui_text(srna, "Particle Iterator", "Access iterator for individual particles");
@@ -679,6 +716,86 @@ static void rna_def_nparticle_system_attributes_api(BlenderRNA *brna, PropertyRN
 	RNA_def_property_flag(parm, PROP_REQUIRED);
 }
 
+static void rna_def_nparticle_display_dupli_object(BlenderRNA *brna)
+{
+	StructRNA *srna;
+	PropertyRNA *prop;
+
+	srna = RNA_def_struct(brna, "NParticleDisplayDupliObject", NULL);
+	RNA_def_struct_ui_text(srna, "Particle Display Dupli Object", "Object dupli settings");
+
+	prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
+	RNA_def_property_pointer_sdna(prop, NULL, "object");
+	RNA_def_property_struct_type(prop, "Object");
+	RNA_def_property_flag(prop, PROP_EDITABLE);
+	RNA_def_property_ui_text(prop, "Object", "Object to use for dupli instances");
+}
+
+static void rna_def_nparticle_display_dupli_objects_api(BlenderRNA *brna, PropertyRNA *cprop)
+{
+	StructRNA *srna;
+	PropertyRNA *parm;
+	FunctionRNA *func;
+	
+	RNA_def_property_srna(cprop, "NParticleDisplayDupliObjects");
+	srna = RNA_def_struct(brna, "NParticleDisplayDupliObjects", NULL);
+	RNA_def_struct_sdna(srna, "NParticleDisplay");
+	RNA_def_struct_ui_text(srna, "Dupli Objects", "Collection of dupli objects in a particle system");
+	
+	func = RNA_def_function(srna, "new", "rna_NParticleDisplayDupli_dupli_objects_new");
+	RNA_def_function_ui_description(func, "Add a particle dupli object");
+	/* return value */
+	parm = RNA_def_pointer(func, "dupli_object", "NParticleDisplayDupliObject", "Dupli Object", "");
+	RNA_def_function_return(func, parm);
+	
+	func = RNA_def_function(srna, "remove", "rna_NParticleDisplayDupli_dupli_objects_remove");
+	RNA_def_function_ui_description(func, "Remove an particle dupli object");
+	parm = RNA_def_pointer(func, "dupli_object", "NParticleDisplayDupliObject", "", "The dupli object to remove");
+	RNA_def_property_flag(parm, PROP_REQUIRED);
+	
+	func = RNA_def_function(srna, "clear", "rna_NParticleDisplayDupli_dupli_objects_clear");
+	RNA_def_function_ui_description(func, "Remove all particle dupli objects");
+	
+	func = RNA_def_function(srna, "move", "rna_NParticleDisplayDupli_dupli_objects_move");
+	RNA_def_function_ui_description(func, "Move a particle dupli object to another index");
+	parm = RNA_def_int(func, "from_index", -1, 0, INT_MAX, "From Index", "Index of the attribute to move", 0, 10000);
+	RNA_def_property_flag(parm, PROP_REQUIRED);
+	parm = RNA_def_int(func, "to_index", -1, 0, INT_MAX, "To Index", "Target index for the attribute", 0, 10000);
+	RNA_def_property_flag(parm, PROP_REQUIRED);
+}
+
+static void rna_def_nparticle_display(BlenderRNA *brna)
+{
+	StructRNA *srna;
+	PropertyRNA *prop;
+
+	srna = RNA_def_struct(brna, "NParticleDisplay", NULL);
+	RNA_def_struct_sdna(srna, "NParticleDisplay");
+	RNA_def_struct_ui_text(srna, "Particle Display", "Display mode for particles");
+	RNA_def_struct_refine_func(srna, "rna_NParticleDisplay_refine");
+
+	prop = RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
+	RNA_def_property_enum_items(prop, nparticle_display_type_items);
+	RNA_def_property_ui_text(prop, "Type", "");
+	RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+
+
+	srna = RNA_def_struct(brna, "NParticleDisplayParticle", "NParticleDisplay");
+	RNA_def_struct_sdna(srna, "NParticleDisplay");
+	RNA_def_struct_ui_text(srna, "Particle Symbol Display", "Displays particle symbols");
+
+
+	srna = RNA_def_struct(brna, "NParticleDisplayDupli", "NParticleDisplay");
+	RNA_

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list