Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2009-09-16 14:09:57 +0400
committerCampbell Barton <ideasman42@gmail.com>2009-09-16 14:09:57 +0400
commit103e11359d3838ac944f2a8895a41cc26ab9e74b (patch)
tree2d3eca56267542f12621f5fd021683e7d7ad8af1 /source/blender/makesrna/intern/rna_object_api.c
parente03b8b7be7c34450b0e419bbf1d8dfb78a8439b1 (diff)
- rna/python api object.create_render_mesh(...) support for getting a mesh from metaballs and curves (bevel, surface, text etc).
- povray converts curves to meshes on export, (metaballs don't need meshing). - use 'extend' bool rather then 'seltype' enum for object_select operators for consistency.
Diffstat (limited to 'source/blender/makesrna/intern/rna_object_api.c')
-rw-r--r--source/blender/makesrna/intern/rna_object_api.c85
1 files changed, 74 insertions, 11 deletions
diff --git a/source/blender/makesrna/intern/rna_object_api.c b/source/blender/makesrna/intern/rna_object_api.c
index 6545898c1ab..cfbd363e358 100644
--- a/source/blender/makesrna/intern/rna_object_api.c
+++ b/source/blender/makesrna/intern/rna_object_api.c
@@ -38,30 +38,92 @@
#include "BKE_customdata.h"
#include "BKE_DerivedMesh.h"
+#include "BKE_displist.h"
+#include "BKE_object.h"
+#include "BKE_main.h"
#include "DNA_mesh_types.h"
+#include "DNA_curve_types.h"
#include "DNA_scene_types.h"
/* copied from init_render_mesh (render code) */
-static Mesh *rna_Object_create_render_mesh(Object *ob, Scene *scene)
+static Mesh *rna_Object_create_render_mesh(Object *ob, bContext *C, Scene *scene)
{
CustomDataMask mask = CD_MASK_BAREMESH|CD_MASK_MTFACE|CD_MASK_MCOL;
+ Object *tmpobj = NULL;
DerivedMesh *dm;
Mesh *me;
- /* TODO: other types */
- if(ob->type != OB_MESH)
- return NULL;
+ switch(ob->type) {
+ case OB_FONT:
+ case OB_CURVE:
+ case OB_SURF:
+ {
+ int cage = 0; //XXX -todo
+ Curve *tmpcu = NULL;
+
+ /* copies object and modifiers (but not the data) */
+ tmpobj= copy_object( ob );
+ tmpcu = (Curve *)tmpobj->data;
+ tmpcu->id.us--;
+
+ /* if getting the original caged mesh, delete object modifiers */
+ if( cage )
+ object_free_modifiers(tmpobj);
+
+ /* copies the data */
+ tmpobj->data = copy_curve( (Curve *) ob->data );
+
+#if 0
+ /* copy_curve() sets disp.first null, so currently not need */
+ {
+ Curve *cu;
+ cu = (Curve *)tmpobj->data;
+ if( cu->disp.first )
+ MEM_freeN( cu->disp.first );
+ cu->disp.first = NULL;
+ }
- dm= mesh_create_derived_render(scene, ob, mask);
+#endif
- if(!dm)
- return NULL;
+ /* get updated display list, and convert to a mesh */
+ makeDispListCurveTypes( scene, tmpobj, 0 );
+ nurbs_to_mesh( tmpobj );
- me= add_mesh("tmp_render_mesh");
- me->id.us--; /* we don't assign it to anything */
- DM_to_mesh(dm, me);
- dm->release(dm);
+ /* nurbs_to_mesh changes the type tp a mesh, check it worked */
+ if (tmpobj->type != OB_MESH) {
+ free_libblock_us( &(CTX_data_main(C)->object), tmpobj );
+ printf("cant convert curve to mesh. Does the curve have any segments?" ); // XXX use report api
+ }
+ me = tmpobj->data;
+ free_libblock_us( &(CTX_data_main(C)->object), tmpobj );
+ break;
+ }
+ case OB_MBALL:
+ /* metaballs don't have modifiers, so just convert to mesh */
+ ob = find_basis_mball( ob );
+ /* todo, re-generatre for render-res */
+ // metaball_polygonize(scene, ob)
+ me = add_mesh("Mesh");
+ mball_to_mesh( &ob->disp, me );
+ break;
+ case OB_MESH:
+ {
+ dm= mesh_create_derived_render(scene, ob, mask);
+ // dm= mesh_create_derived_view(scene, ob, mask);
+
+ if(!dm)
+ return NULL;
+
+ me= add_mesh("tmp_render_mesh");
+ me->id.us--; /* we don't assign it to anything */
+ DM_to_mesh(dm, me);
+ dm->release(dm);
+ break;
+ }
+ default:
+ return NULL;
+ }
{ /* update the material */
@@ -94,6 +156,7 @@ void RNA_api_object(StructRNA *srna)
func= RNA_def_function(srna, "create_render_mesh", "rna_Object_create_render_mesh");
RNA_def_function_ui_description(func, "Create a Mesh datablock with all modifiers applied.");
+ RNA_def_function_flag(func, FUNC_USE_CONTEXT);
prop= RNA_def_pointer(func, "scene", "Scene", "", "");
RNA_def_property_flag(prop, PROP_REQUIRED);
prop= RNA_def_pointer(func, "mesh", "Mesh", "", "Mesh created from object, remove it if it is only used for export.");