[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