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:
authorTon Roosendaal <ton@blender.org>2009-02-25 17:50:40 +0300
committerTon Roosendaal <ton@blender.org>2009-02-25 17:50:40 +0300
commitc3078c94fb48cc1376b170bb3c7ce1f2e14fa2f3 (patch)
tree0a3764a70ec84e373ae5e40889909bedba373f12 /source/blender
parentc0a6cb950d683f5ef35031cd250d3e8b79f5609e (diff)
2.5
SHIFT+A add armature didn't add a bone yet. :)
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/editors/armature/editarmature.c45
-rw-r--r--source/blender/editors/include/ED_armature.h3
-rw-r--r--source/blender/editors/object/object_edit.c10
3 files changed, 14 insertions, 44 deletions
diff --git a/source/blender/editors/armature/editarmature.c b/source/blender/editors/armature/editarmature.c
index 7a17a9dc9a6..d3c59bf340c 100644
--- a/source/blender/editors/armature/editarmature.c
+++ b/source/blender/editors/armature/editarmature.c
@@ -2112,7 +2112,8 @@ static EditBone *add_editbone(Object *obedit, char *name)
return bone;
}
-static void add_primitive_bone(Scene *scene, View3D *v3d, RegionView3D *rv3d, short newob)
+/* v3d and rv3d are allowed to be NULL */
+void add_primitive_bone(Scene *scene, View3D *v3d, RegionView3D *rv3d)
{
Object *obedit= scene->obedit; // XXX get from context
float obmat[3][3], curs[3], viewmat[3][3], totmat[3][3], imat[3][3];
@@ -2124,7 +2125,7 @@ static void add_primitive_bone(Scene *scene, View3D *v3d, RegionView3D *rv3d, sh
Mat4Invert(obedit->imat, obedit->obmat);
Mat4MulVecfl(obedit->imat, curs);
- if ( !(newob) || (U.flag & USER_ADD_VIEWALIGNED) )
+ if (rv3d && (U.flag & USER_ADD_VIEWALIGNED))
Mat3CpyMat4(obmat, rv3d->viewmat);
else Mat3One(obmat);
@@ -2139,51 +2140,13 @@ static void add_primitive_bone(Scene *scene, View3D *v3d, RegionView3D *rv3d, sh
VECCOPY(bone->head, curs);
- if ( !(newob) || (U.flag & USER_ADD_VIEWALIGNED) )
+ if ( (U.flag & USER_ADD_VIEWALIGNED) )
VecAddf(bone->tail, bone->head, imat[1]); // bone with unit length 1
else
VecAddf(bone->tail, bone->head, imat[2]); // bone with unit length 1, pointing up Z
}
-void add_primitiveArmature(Scene *scene, View3D *v3d, int type)
-{
- RegionView3D *rv3d= NULL; // XXX get from context
- Object *obedit= scene->obedit; // XXX get from context
- short newob=0;
-
- if(scene->id.lib) return;
-
- G.f &= ~(G_VERTEXPAINT+G_TEXTUREPAINT+G_WEIGHTPAINT+G_SCULPTMODE);
-// setcursor_space(SPACE_VIEW3D, CURSOR_STD);
-
-// XXX check_editmode(OB_ARMATURE);
-
- /* If we're not the "obedit", make a new object and enter editmode */
- if (obedit==NULL) {
- add_object(scene, OB_ARMATURE);
- ED_object_base_init_from_view(NULL, BASACT); // XXX NULL is C
- obedit= BASACT->object;
-
- where_is_object(scene, obedit);
-
- ED_armature_to_edit(obedit);
-// setcursor_space(SPACE_VIEW3D, CURSOR_EDIT);
- newob=1;
- }
-
- /* no primitive support yet */
- add_primitive_bone(scene, v3d, rv3d, newob);
-
- //armature_sync_selection(arm->edbo); // XXX which armature?
-
- if ((newob) && !(U.flag & USER_ADD_EDITMODE)) {
- ED_armature_from_edit(scene, obedit);
- ED_armature_edit_free(obedit);
- }
-
- BIF_undo_push("Add primitive");
-}
/* previously addvert_armature */
/* the ctrl-click method */
diff --git a/source/blender/editors/include/ED_armature.h b/source/blender/editors/include/ED_armature.h
index 2aeec16f852..290c7bfbcad 100644
--- a/source/blender/editors/include/ED_armature.h
+++ b/source/blender/editors/include/ED_armature.h
@@ -37,6 +37,7 @@ struct bPoseChannel;
struct wmWindowManager;
struct ListBase;
struct View3D;
+struct RegionView3D;
typedef struct EditBone
{
@@ -102,6 +103,8 @@ struct Bone *get_indexed_bone (struct Object *ob, int index);
float ED_rollBoneToVector(EditBone *bone, float new_up_axis[3]);
EditBone *ED_armature_bone_get_mirrored(struct ListBase *edbo, EditBone *ebo); // XXX this is needed for populating the context iterators
+void add_primitive_bone(struct Scene *scene, struct View3D *v3d, struct RegionView3D *rv3d);
+
void transform_armature_mirror_update(struct Object *obedit);
void clear_armature(struct Scene *scene, struct Object *ob, char mode);
void create_vgroups_from_armature(struct Scene *scene, struct Object *ob, struct Object *par);
diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c
index 6e2b38acd8d..cc07c334aec 100644
--- a/source/blender/editors/object/object_edit.c
+++ b/source/blender/editors/object/object_edit.c
@@ -582,6 +582,8 @@ void OBJECT_OT_text_add(wmOperatorType *ot)
static int object_add_armature_exec(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
+ View3D *v3d= CTX_wm_view3d(C);
+ RegionView3D *rv3d= NULL;
int newob= 0;
if ((obedit==NULL) || (obedit->type != OB_ARMATURE)) {
@@ -591,10 +593,12 @@ static int object_add_armature_exec(bContext *C, wmOperator *op)
}
else DAG_object_flush_update(CTX_data_scene(C), obedit, OB_RECALC_DATA);
- //nu= add_nurbs_primitive(C, RNA_enum_get(op->ptr, "type"), newob);
- //editnurb= curve_get_editcurve(CTX_data_edit_object(C));
- //BLI_addtail(editnurb, nu);
+ if(v3d)
+ rv3d= CTX_wm_region(C)->regiondata;
+ /* v3d and rv3d are allowed to be NULL */
+ add_primitive_bone(CTX_data_scene(C), v3d, rv3d);
+
/* userdef */
if (newob && (U.flag & USER_ADD_EDITMODE)==0) {
ED_object_exit_editmode(C, EM_FREEDATA);