[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [56714] trunk/blender/source/blender/ editors: Fix for [#35238] Blender does not save custom orientations from " view"

Bastien Montagne montagne29 at wanadoo.fr
Sun May 12 17:52:05 CEST 2013


Revision: 56714
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=56714
Author:   mont29
Date:     2013-05-12 15:52:05 +0000 (Sun, 12 May 2013)
Log Message:
-----------
Fix for [#35238] Blender does not save custom orientations from "view"

Actually more a feature request... Now create orientations operator has an additional option, use_view, when this one is enabled it will use current view instead of active object to create the new space.

Also made some cleanup (made some funcs static).

Modified Paths:
--------------
    trunk/blender/source/blender/editors/include/ED_transform.h
    trunk/blender/source/blender/editors/transform/transform.h
    trunk/blender/source/blender/editors/transform/transform_ops.c
    trunk/blender/source/blender/editors/transform/transform_orientations.c

Modified: trunk/blender/source/blender/editors/include/ED_transform.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_transform.h	2013-05-12 15:25:35 UTC (rev 56713)
+++ trunk/blender/source/blender/editors/include/ED_transform.h	2013-05-12 15:52:05 UTC (rev 56714)
@@ -123,7 +123,8 @@
 void BIF_clearTransformOrientation(struct bContext *C);
 void BIF_removeTransformOrientation(struct bContext *C, struct TransformOrientation *ts);
 void BIF_removeTransformOrientationIndex(struct bContext *C, int index);
-void BIF_createTransformOrientation(struct bContext *C, struct ReportList *reports, char *name, int use, int overwrite);
+void BIF_createTransformOrientation(struct bContext *C, struct ReportList *reports, char *name, int use_view,
+                                    int use, int overwrite);
 void BIF_selectTransformOrientation(struct bContext *C, struct TransformOrientation *ts);
 void BIF_selectTransformOrientationValue(struct bContext *C, int orientation);
 

Modified: trunk/blender/source/blender/editors/transform/transform.h
===================================================================
--- trunk/blender/source/blender/editors/transform/transform.h	2013-05-12 15:25:35 UTC (rev 56713)
+++ trunk/blender/source/blender/editors/transform/transform.h	2013-05-12 15:52:05 UTC (rev 56714)
@@ -725,10 +725,6 @@
 
 void initTransformOrientation(struct bContext *C, TransInfo *t);
 
-struct TransformOrientation *createObjectSpace(struct bContext *C, struct ReportList *reports, char *name, int overwrite);
-struct TransformOrientation *createMeshSpace(struct bContext *C, struct ReportList *reports, char *name, int overwrite);
-struct TransformOrientation *createBoneSpace(struct bContext *C, struct ReportList *reports, char *name, int overwrite);
-
 /* Those two fill in mat and return non-zero on success */
 bool createSpaceNormal(float mat[3][3], const float normal[3]);
 bool createSpaceNormalTangent(float mat[3][3], float normal[3], float tangent[3]);

Modified: trunk/blender/source/blender/editors/transform/transform_ops.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_ops.c	2013-05-12 15:25:35 UTC (rev 56713)
+++ trunk/blender/source/blender/editors/transform/transform_ops.c	2013-05-12 15:52:05 UTC (rev 56714)
@@ -252,7 +252,8 @@
 	char name[MAX_NAME];
 	int use = RNA_boolean_get(op->ptr, "use");
 	int overwrite = RNA_boolean_get(op->ptr, "overwrite");
-	
+	int use_view = RNA_boolean_get(op->ptr, "use_view");
+
 	RNA_string_get(op->ptr, "name", name);
 
 	if (use && !CTX_wm_view3d(C)) {
@@ -260,7 +261,7 @@
 		return OPERATOR_CANCELLED;
 	}
 
-	BIF_createTransformOrientation(C, op->reports, name, use, overwrite);
+	BIF_createTransformOrientation(C, op->reports, name, use_view, use, overwrite);
 
 	WM_event_add_notifier(C, NC_SPACE | ND_SPACE_VIEW3D, CTX_wm_view3d(C));
 	WM_event_add_notifier(C, NC_SCENE | NA_EDITED, CTX_data_scene(C));
@@ -268,11 +269,6 @@
 	return OPERATOR_FINISHED;
 }
 
-static int create_orientation_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
-{
-	return create_orientation_exec(C, op);
-}
-
 static void TRANSFORM_OT_create_orientation(struct wmOperatorType *ot)
 {
 	/* identifiers */
@@ -282,14 +278,15 @@
 	ot->flag   = OPTYPE_REGISTER | OPTYPE_UNDO;
 
 	/* api callbacks */
-	ot->invoke = create_orientation_invoke;
 	ot->exec   = create_orientation_exec;
 	ot->poll   = ED_operator_areaactive;
-	ot->flag   = OPTYPE_REGISTER | OPTYPE_UNDO;
 
-	RNA_def_string(ot->srna, "name", "", MAX_NAME, "Name", "Text to insert at the cursor position");
-	RNA_def_boolean(ot->srna, "use", 0, "Use after creation", "Select orientation after its creation");
-	RNA_def_boolean(ot->srna, "overwrite", 0, "Overwrite previous", "Overwrite previously created orientation with same name");
+	RNA_def_string(ot->srna, "name", "", MAX_NAME, "Name", "Name of the new custom orientation");
+	RNA_def_boolean(ot->srna, "use_view", FALSE, "Use View",
+	                "Use the current view instead of the active object to create the new orientation");
+	RNA_def_boolean(ot->srna, "use", FALSE, "Use after creation", "Select orientation after its creation");
+	RNA_def_boolean(ot->srna, "overwrite", FALSE, "Overwrite previous",
+	                "Overwrite previously created orientation with same name");
 }
 
 static void transformops_exit(bContext *C, wmOperator *op)

Modified: trunk/blender/source/blender/editors/transform/transform_orientations.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_orientations.c	2013-05-12 15:25:35 UTC (rev 56713)
+++ trunk/blender/source/blender/editors/transform/transform_orientations.c	2013-05-12 15:52:05 UTC (rev 56714)
@@ -100,31 +100,32 @@
 	                  sizeof(((TransformOrientation *)NULL)->name));
 }
 
-void BIF_createTransformOrientation(bContext *C, ReportList *reports, char *name, int use, int overwrite)
+static TransformOrientation *createViewSpace(bContext *C, ReportList *UNUSED(reports), char *name, int overwrite)
 {
-	Object *obedit = CTX_data_edit_object(C);
-	Object *ob = CTX_data_active_object(C);
-	TransformOrientation *ts = NULL;
-	
-	if (obedit) {
-		if (obedit->type == OB_MESH)
-			ts = createMeshSpace(C, reports, name, overwrite);
-		else if (obedit->type == OB_ARMATURE)
-			ts = createBoneSpace(C, reports, name, overwrite);
+	RegionView3D *rv3d = CTX_wm_region_view3d(C);
+	float mat[3][3];
+
+	if (!rv3d)
+		return NULL;
+
+	copy_m3_m4(mat, rv3d->viewinv);
+	normalize_m3(mat);
+
+	if (!name[0]) {
+		View3D *v3d = CTX_wm_view3d(C);
+		if (rv3d->persp == RV3D_CAMOB && v3d->camera) {
+			/* If an object is used as camera, then this space is the same as object space! */
+			strncpy(name, v3d->camera->id.name + 2, MAX_NAME);
+		}
+		else {
+			strcpy(name, "Custom View");
+		}
 	}
-	else if (ob && (ob->mode & OB_MODE_POSE)) {
-		ts = createBoneSpace(C, reports, name, overwrite);
-	}
-	else {
-		ts = createObjectSpace(C, reports, name, overwrite);
-	}
-	
-	if (use && ts != NULL) {
-		BIF_selectTransformOrientation(C, ts);
-	}
+
+	return addMatrixSpace(C, mat, name, overwrite);
 }
 
-TransformOrientation *createObjectSpace(bContext *C, ReportList *UNUSED(reports), char *name, int overwrite)
+static TransformOrientation *createObjectSpace(bContext *C, ReportList *UNUSED(reports), char *name, int overwrite)
 {
 	Base *base = CTX_data_active_base(C);
 	Object *ob;
@@ -133,9 +134,8 @@
 	if (base == NULL)
 		return NULL;
 
+	ob = base->object;
 
-	ob = base->object;
-	
 	copy_m3_m4(mat, ob->obmat);
 	normalize_m3(mat);
 
@@ -147,7 +147,7 @@
 	return addMatrixSpace(C, mat, name, overwrite);
 }
 
-TransformOrientation *createBoneSpace(bContext *C, ReportList *reports, char *name, int overwrite)
+static TransformOrientation *createBoneSpace(bContext *C, ReportList *reports, char *name, int overwrite)
 {
 	float mat[3][3];
 	float normal[3], plane[3];
@@ -166,7 +166,7 @@
 	return addMatrixSpace(C, mat, name, overwrite);
 }
 
-TransformOrientation *createMeshSpace(bContext *C, ReportList *reports, char *name, int overwrite)
+static TransformOrientation *createMeshSpace(bContext *C, ReportList *reports, char *name, int overwrite)
 {
 	float mat[3][3];
 	float normal[3], plane[3];
@@ -260,6 +260,36 @@
 	return true;
 }
 
+/* name must be a MAX_NAME length string! */
+void BIF_createTransformOrientation(bContext *C, ReportList *reports, char *name, int use_view, int use, int overwrite)
+{
+	TransformOrientation *ts = NULL;
+
+	if (use_view) {
+		ts = createViewSpace(C, reports, name, overwrite);
+	}
+	else {
+		Object *obedit = CTX_data_edit_object(C);
+		Object *ob = CTX_data_active_object(C);
+		if (obedit) {
+			if (obedit->type == OB_MESH)
+				ts = createMeshSpace(C, reports, name, overwrite);
+			else if (obedit->type == OB_ARMATURE)
+				ts = createBoneSpace(C, reports, name, overwrite);
+		}
+		else if (ob && (ob->mode & OB_MODE_POSE)) {
+			ts = createBoneSpace(C, reports, name, overwrite);
+		}
+		else {
+			ts = createObjectSpace(C, reports, name, overwrite);
+		}
+	}
+
+	if (use && ts != NULL) {
+		BIF_selectTransformOrientation(C, ts);
+	}
+}
+
 TransformOrientation *addMatrixSpace(bContext *C, float mat[3][3], char name[], int overwrite)
 {
 	ListBase *transform_spaces = &CTX_data_scene(C)->transform_spaces;




More information about the Bf-blender-cvs mailing list