uv project from camera now sets defaults so the image maps to the camera bounds,
authorCampbell Barton <ideasman42@gmail.com>
Fri, 19 Apr 2013 15:50:17 +0000 (15:50 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Fri, 19 Apr 2013 15:50:17 +0000 (15:50 +0000)
also rename newly added `Mesh Debug` -> `Mesh Analysis`

release/scripts/startup/bl_ui/space_view3d.py
source/blender/editors/uvedit/uvedit_unwrap_ops.c

index ef658b65ddbef0e16a977d53ca215917cd608710..f0ee47eddd16b1ed8e4bf6f02f28aac735d2ec7d 100644 (file)
@@ -323,7 +323,7 @@ class VIEW3D_MT_uv_map(Menu):
 
         layout.separator()
 
 
         layout.separator()
 
-        layout.operator_context = 'EXEC_REGION_WIN'
+        layout.operator_context = 'INVOKE_REGION_WIN'
         layout.operator("uv.project_from_view").scale_to_bounds = False
         layout.operator("uv.project_from_view", text="Project from View (Bounds)").scale_to_bounds = True
 
         layout.operator("uv.project_from_view").scale_to_bounds = False
         layout.operator("uv.project_from_view", text="Project from View (Bounds)").scale_to_bounds = True
 
@@ -2610,7 +2610,7 @@ class VIEW3D_PT_view3d_meshdisplay(Panel):
 class VIEW3D_PT_view3d_meshstatvis(Panel):
     bl_space_type = 'VIEW_3D'
     bl_region_type = 'UI'
 class VIEW3D_PT_view3d_meshstatvis(Panel):
     bl_space_type = 'VIEW_3D'
     bl_region_type = 'UI'
-    bl_label = "Mesh Debug"
+    bl_label = "Mesh Analysis"
 
     @classmethod
     def poll(cls, context):
 
     @classmethod
     def poll(cls, context):
index 2f4847eb6194e2492b89605d97482882acc7c098..dd124edbf6a1a1f7535c6c9eb868a1107749d0dd 100644 (file)
@@ -1243,16 +1243,45 @@ void UV_OT_unwrap(wmOperatorType *ot)
        RNA_def_float_factor(ot->srna, "margin", 0.001f, 0.0f, 1.0f, "Margin", "Space between islands", 0.0f, 1.0f);
 }
 
        RNA_def_float_factor(ot->srna, "margin", 0.001f, 0.0f, 1.0f, "Margin", "Space between islands", 0.0f, 1.0f);
 }
 
+/* NOTE: could be generic function */
+static Camera *view3d_camera_get(View3D *v3d, RegionView3D *rv3d)
+{
+       /* establish the camera object, so we can default to view mapping if anything is wrong with it */
+       if ((rv3d->persp == RV3D_CAMOB) && (v3d->camera) && (v3d->camera->type == OB_CAMERA)) {
+               return v3d->camera->data;
+       }
+       else {
+               return NULL;
+       }
+}
+
 /**************** Project From View operator **************/
 /**************** Project From View operator **************/
+static int uv_from_view_exec(bContext *C, wmOperator *op);
+
+static int uv_from_view_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
+{
+       View3D *v3d = CTX_wm_view3d(C);
+       RegionView3D *rv3d = CTX_wm_region_view3d(C);
+       Camera *camera = view3d_camera_get(v3d, rv3d);
+       PropertyRNA *prop;
+
+       prop = RNA_struct_find_property(op->ptr, "camera_bounds");
+       if (!RNA_property_is_set(op->ptr, prop)) RNA_property_boolean_set(op->ptr, prop, (camera != NULL));
+       prop = RNA_struct_find_property(op->ptr, "correct_aspect");
+       if (!RNA_property_is_set(op->ptr, prop)) RNA_property_boolean_set(op->ptr, prop, (camera == NULL));
+
+       return uv_from_view_exec(C, op);
+}
+
 static int uv_from_view_exec(bContext *C, wmOperator *op)
 {
        Scene *scene = CTX_data_scene(C);
        Object *obedit = CTX_data_edit_object(C);
 static int uv_from_view_exec(bContext *C, wmOperator *op)
 {
        Scene *scene = CTX_data_scene(C);
        Object *obedit = CTX_data_edit_object(C);
-       Camera *camera = NULL;
        BMEditMesh *em = BKE_editmesh_from_object(obedit);
        ARegion *ar = CTX_wm_region(C);
        View3D *v3d = CTX_wm_view3d(C);
        RegionView3D *rv3d = CTX_wm_region_view3d(C);
        BMEditMesh *em = BKE_editmesh_from_object(obedit);
        ARegion *ar = CTX_wm_region(C);
        View3D *v3d = CTX_wm_view3d(C);
        RegionView3D *rv3d = CTX_wm_region_view3d(C);
+       Camera *camera = view3d_camera_get(v3d, rv3d);
        BMFace *efa;
        BMLoop *l;
        BMIter iter, liter;
        BMFace *efa;
        BMLoop *l;
        BMIter iter, liter;
@@ -1268,11 +1297,6 @@ static int uv_from_view_exec(bContext *C, wmOperator *op)
 
        cd_loop_uv_offset = CustomData_get_offset(&em->bm->ldata, CD_MLOOPUV);
 
 
        cd_loop_uv_offset = CustomData_get_offset(&em->bm->ldata, CD_MLOOPUV);
 
-       /* establish the camera object, so we can default to view mapping if anything is wrong with it */
-       if ((rv3d->persp == RV3D_CAMOB) && (v3d->camera) && (v3d->camera->type == OB_CAMERA)) {
-               camera = v3d->camera->data;
-       }
-
        if (RNA_boolean_get(op->ptr, "orthographic")) {
                uv_map_rotation_matrix(rotmat, rv3d, obedit, 90.0f, 0.0f, 1.0f);
                
        if (RNA_boolean_get(op->ptr, "orthographic")) {
                uv_map_rotation_matrix(rotmat, rv3d, obedit, 90.0f, 0.0f, 1.0f);
                
@@ -1351,6 +1375,7 @@ void UV_OT_project_from_view(wmOperatorType *ot)
        ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
        
        /* api callbacks */
        ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
        
        /* api callbacks */
+       ot->invoke = uv_from_view_invoke;
        ot->exec = uv_from_view_exec;
        ot->poll = uv_from_view_poll;
 
        ot->exec = uv_from_view_exec;
        ot->poll = uv_from_view_poll;