svn merge ^/trunk/blender -r43294:43338
[blender.git] / source / blender / editors / object / object_add.c
index 196362d9fcd0716f5c1fd8b5e3eec6af23ea7aaf..48b1630025c2be466ccc66e7407c7a92b00e88d8 100644 (file)
@@ -251,7 +251,7 @@ int ED_object_add_generic_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED(ev
 }
 
 int ED_object_add_generic_get_opts(bContext *C, wmOperator *op, float *loc,
 }
 
 int ED_object_add_generic_get_opts(bContext *C, wmOperator *op, float *loc,
-       float *rot, int *enter_editmode, unsigned int *layer)
+       float *rot, int *enter_editmode, unsigned int *layer, int *is_view_aligned)
 {
        View3D *v3d = CTX_wm_view3d(C);
        int a, layer_values[20];
 {
        View3D *v3d = CTX_wm_view3d(C);
        int a, layer_values[20];
@@ -299,7 +299,9 @@ int ED_object_add_generic_get_opts(bContext *C, wmOperator *op, float *loc,
        else
                RNA_float_get_array(op->ptr, "rotation", rot);
        
        else
                RNA_float_get_array(op->ptr, "rotation", rot);
        
-
+       if (is_view_aligned)
+               *is_view_aligned = view_align;
+       
        RNA_float_get_array(op->ptr, "location", loc);
 
        if(*layer == 0) {
        RNA_float_get_array(op->ptr, "location", loc);
 
        if(*layer == 0) {
@@ -353,7 +355,7 @@ static int object_add_exec(bContext *C, wmOperator *op)
        unsigned int layer;
        float loc[3], rot[3];
        
        unsigned int layer;
        float loc[3], rot[3];
        
-       if(!ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer))
+       if(!ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer, NULL))
                return OPERATOR_CANCELLED;
 
        ED_object_add_type(C, RNA_enum_get(op->ptr, "type"), loc, rot, enter_editmode, layer);
                return OPERATOR_CANCELLED;
 
        ED_object_add_type(C, RNA_enum_get(op->ptr, "type"), loc, rot, enter_editmode, layer);
@@ -410,7 +412,7 @@ static Object *effector_add_type(bContext *C, wmOperator *op, int type)
        
        object_add_generic_invoke_options(C, op);
 
        
        object_add_generic_invoke_options(C, op);
 
-       if(!ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer))
+       if(!ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer, NULL))
                return NULL;
 
        if(type==PFIELD_GUIDE) {
                return NULL;
 
        if(type==PFIELD_GUIDE) {
@@ -490,7 +492,7 @@ static int object_camera_add_exec(bContext *C, wmOperator *op)
        
        object_add_generic_invoke_options(C, op);
 
        
        object_add_generic_invoke_options(C, op);
 
-       if(!ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer))
+       if(!ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer, NULL))
                return OPERATOR_CANCELLED;
 
        ob= ED_object_add_type(C, OB_CAMERA, loc, rot, FALSE, layer);
                return OPERATOR_CANCELLED;
 
        ob= ED_object_add_type(C, OB_CAMERA, loc, rot, FALSE, layer);
@@ -544,7 +546,7 @@ static int object_metaball_add_exec(bContext *C, wmOperator *op)
        
        object_add_generic_invoke_options(C, op); // XXX these props don't get set right when only exec() is called
 
        
        object_add_generic_invoke_options(C, op); // XXX these props don't get set right when only exec() is called
 
-       if(!ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer))
+       if(!ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer, NULL))
                return OPERATOR_CANCELLED;
        
        if(obedit==NULL || obedit->type!=OB_MBALL) {
                return OPERATOR_CANCELLED;
        
        if(obedit==NULL || obedit->type!=OB_MBALL) {
@@ -613,7 +615,7 @@ static int object_add_text_exec(bContext *C, wmOperator *op)
        float loc[3], rot[3];
        
        object_add_generic_invoke_options(C, op); // XXX these props don't get set right when only exec() is called
        float loc[3], rot[3];
        
        object_add_generic_invoke_options(C, op); // XXX these props don't get set right when only exec() is called
-       if(!ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer))
+       if(!ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer, NULL))
                return OPERATOR_CANCELLED;
        
        if(obedit && obedit->type==OB_FONT)
                return OPERATOR_CANCELLED;
        
        if(obedit && obedit->type==OB_FONT)
@@ -654,7 +656,7 @@ static int object_armature_add_exec(bContext *C, wmOperator *op)
        float loc[3], rot[3];
        
        object_add_generic_invoke_options(C, op); // XXX these props don't get set right when only exec() is called
        float loc[3], rot[3];
        
        object_add_generic_invoke_options(C, op); // XXX these props don't get set right when only exec() is called
-       if(!ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer))
+       if(!ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer, NULL))
                return OPERATOR_CANCELLED;
        
        if ((obedit==NULL) || (obedit->type != OB_ARMATURE)) {
                return OPERATOR_CANCELLED;
        
        if ((obedit==NULL) || (obedit->type != OB_ARMATURE)) {
@@ -722,7 +724,7 @@ static int object_lamp_add_exec(bContext *C, wmOperator *op)
        float loc[3], rot[3];
        
        object_add_generic_invoke_options(C, op);
        float loc[3], rot[3];
        
        object_add_generic_invoke_options(C, op);
-       if(!ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer))
+       if(!ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer, NULL))
                return OPERATOR_CANCELLED;
 
        ob= ED_object_add_type(C, OB_LAMP, loc, rot, FALSE, layer);
                return OPERATOR_CANCELLED;
 
        ob= ED_object_add_type(C, OB_LAMP, loc, rot, FALSE, layer);
@@ -778,7 +780,7 @@ static int group_instance_add_exec(bContext *C, wmOperator *op)
        float loc[3], rot[3];
        
        object_add_generic_invoke_options(C, op);
        float loc[3], rot[3];
        
        object_add_generic_invoke_options(C, op);
-       if(!ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer))
+       if(!ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer, NULL))
                return OPERATOR_CANCELLED;
 
        if(group) {
                return OPERATOR_CANCELLED;
 
        if(group) {
@@ -810,7 +812,7 @@ static int object_speaker_add_exec(bContext *C, wmOperator *op)
        Scene *scene = CTX_data_scene(C);
 
        object_add_generic_invoke_options(C, op);
        Scene *scene = CTX_data_scene(C);
 
        object_add_generic_invoke_options(C, op);
-       if(!ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer))
+       if(!ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer, NULL))
                return OPERATOR_CANCELLED;
 
        ob= ED_object_add_type(C, OB_SPEAKER, loc, rot, FALSE, layer);
                return OPERATOR_CANCELLED;
 
        ob= ED_object_add_type(C, OB_SPEAKER, loc, rot, FALSE, layer);
@@ -1369,7 +1371,11 @@ static int convert_exec(bContext *C, wmOperator *op)
                        dm= mesh_get_derived_final(scene, newob, CD_MASK_MESH);
                        /* dm= mesh_create_derived_no_deform(ob1, NULL);        this was called original (instead of get_derived). man o man why! (ton) */
 
                        dm= mesh_get_derived_final(scene, newob, CD_MASK_MESH);
                        /* dm= mesh_create_derived_no_deform(ob1, NULL);        this was called original (instead of get_derived). man o man why! (ton) */
 
-                       DM_to_mesh(dm, newob->data);
+                       DM_to_mesh(dm, newob->data, newob);
+
+                       /* re-tesselation doesn't happen automatic, calling like this is  */
+                       me= newob->data;
+                       me->totface = mesh_recalcTesselation(&me->fdata, &me->ldata, &me->pdata, me->mvert, me->totface, me->totloop, me->totpoly);
 
                        dm->release(dm);
                        object_free_modifiers(newob);   /* after derivedmesh calls! */
 
                        dm->release(dm);
                        object_free_modifiers(newob);   /* after derivedmesh calls! */