[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [18555] branches/blender2.5/blender/source /blender: 2.5

Ton Roosendaal ton at blender.org
Sat Jan 17 19:35:34 CET 2009


Revision: 18555
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18555
Author:   ton
Date:     2009-01-17 19:35:33 +0100 (Sat, 17 Jan 2009)

Log Message:
-----------
2.5

- Added shift+d duplicate for object and editmode mesh.
  Note it uses WM_operator_name_call(), which is fine now,
  but in future might put again 2 undo's and operators on
  the stack. 
  Will have to spend some time on how Macros will work!

- added itterator CTX_selected_editable_objects()
  (named it first "edible" but that was too funny!)
  Also cleaned object_edit.c to use this correctly.

- added CTX_wm_view3d(), especially for hybrid tools
  that *can* use view3d, but don't have to.
  
- moved debug -d print for operators to the real invoke call

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenkernel/BKE_context.h
    branches/blender2.5/blender/source/blender/blenkernel/intern/context.c
    branches/blender2.5/blender/source/blender/editors/include/ED_object.h
    branches/blender2.5/blender/source/blender/editors/mesh/mesh_ops.c
    branches/blender2.5/blender/source/blender/editors/object/object_edit.c
    branches/blender2.5/blender/source/blender/editors/object/object_intern.h
    branches/blender2.5/blender/source/blender/editors/object/object_ops.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/space_view3d.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_edit.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_select.c
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_event_system.c

Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_context.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_context.h	2009-01-17 16:58:05 UTC (rev 18554)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_context.h	2009-01-17 18:35:33 UTC (rev 18555)
@@ -95,6 +95,7 @@
 struct bScreen *CTX_wm_screen(const bContext *C);
 struct ScrArea *CTX_wm_area(const bContext *C);
 struct SpaceLink *CTX_wm_space_data(const bContext *C);
+struct View3D *CTX_wm_view3d(const bContext *C);
 struct ARegion *CTX_wm_region(const bContext *C);
 void *CTX_wm_region_data(const bContext *C);
 struct uiBlock *CTX_wm_ui_block(const bContext *C);
@@ -141,6 +142,9 @@
 void CTX_data_main_set(bContext *C, struct Main *bmain);
 void CTX_data_scene_set(bContext *C, struct Scene *bmain);
 
+int CTX_data_selected_editable_objects(const bContext *C, ListBase *list);
+int CTX_data_selected_editable_bases(const bContext *C, ListBase *list);
+
 int CTX_data_selected_objects(const bContext *C, ListBase *list);
 int CTX_data_selected_bases(const bContext *C, ListBase *list);
 

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/context.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/context.c	2009-01-17 16:58:05 UTC (rev 18554)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/context.c	2009-01-17 18:35:33 UTC (rev 18555)
@@ -31,6 +31,7 @@
 #include "DNA_scene_types.h"
 #include "DNA_screen_types.h"
 #include "DNA_space_types.h"
+#include "DNA_view3d_types.h"
 #include "DNA_windowmanager_types.h"
 
 #include "RNA_access.h"
@@ -163,6 +164,14 @@
 	return (C->wm.area)? C->wm.area->spacedata.first: NULL;
 }
 
+View3D *CTX_wm_view3d(const bContext *C)
+{
+	if(C->wm.area && C->wm.area->spacetype==SPACE_VIEW3D)
+		return C->wm.area->spacedata.first;
+	return NULL;
+}
+
+
 ARegion *CTX_wm_region(const bContext *C)
 {
 	return C->wm.region;
@@ -367,6 +376,16 @@
 	return ctx_data_collection_get(C, CTX_data_selected_nodes, list);
 }
 
+int CTX_data_selected_editable_objects(const bContext *C, ListBase *list)
+{
+	return ctx_data_collection_get(C, CTX_data_selected_editable_objects, list);
+}
+
+int CTX_data_selected_editable_bases(const bContext *C, ListBase *list)
+{
+	return ctx_data_collection_get(C, CTX_data_selected_editable_bases, list);
+}
+
 int CTX_data_selected_objects(const bContext *C, ListBase *list)
 {
 	return ctx_data_collection_get(C, CTX_data_selected_objects, list);

Modified: branches/blender2.5/blender/source/blender/editors/include/ED_object.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/ED_object.h	2009-01-17 16:58:05 UTC (rev 18554)
+++ branches/blender2.5/blender/source/blender/editors/include/ED_object.h	2009-01-17 18:35:33 UTC (rev 18555)
@@ -64,7 +64,6 @@
 
 /* cleanup */
 int object_data_is_libdata(struct Object *ob);
-int object_is_libdata(struct Object *ob);
 
 /* constraints */
 struct bConstraint *add_new_constraint (short type);

Modified: branches/blender2.5/blender/source/blender/editors/mesh/mesh_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/mesh/mesh_ops.c	2009-01-17 16:58:05 UTC (rev 18554)
+++ branches/blender2.5/blender/source/blender/editors/mesh/mesh_ops.c	2009-01-17 18:35:33 UTC (rev 18555)
@@ -57,9 +57,48 @@
 #include "ED_mesh.h"
 #include "ED_view3d.h"
 
+#include "BIF_transform.h"
+
 #include "mesh_intern.h"
 
 
+static int mesh_add_duplicate_exec(bContext *C, wmOperator *op)
+{
+	Object *ob= CTX_data_edit_object(C);
+	EditMesh *em= ((Mesh *)ob->data)->edit_mesh;
+
+	adduplicateflag(em, SELECT);
+	
+	return OPERATOR_FINISHED;
+}
+
+static int mesh_add_duplicate_invoke(bContext *C, wmOperator *op, wmEvent *event)
+{
+	mesh_add_duplicate_exec(C, op);
+	RNA_int_set(op->ptr, "mode", TFM_TRANSLATION);
+	WM_operator_name_call(C, "TFM_OT_transform", WM_OP_INVOKE_REGION_WIN, op->ptr, NULL);
+	
+	return OPERATOR_FINISHED;
+}
+
+static void MESH_OT_add_duplicate(wmOperatorType *ot)
+{
+	
+	/* identifiers */
+	ot->name= "Add Duplicate";
+	ot->idname= "MESH_OT_add_duplicate";
+	
+	/* api callbacks */
+	ot->invoke= mesh_add_duplicate_invoke;
+	ot->exec= mesh_add_duplicate_exec;
+	
+	ot->poll= ED_operator_editmesh;
+	
+	/* to give to transform */
+	RNA_def_int(ot->srna, "mode", TFM_TRANSLATION, 0, INT_MAX, "Mode", "", 0, INT_MAX);
+}
+
+
 /* ************************** registration **********************************/
 
 void ED_operatortypes_mesh(void)
@@ -90,6 +129,7 @@
 	WM_operatortype_append(MESH_OT_add_primitive_monkey);
 	WM_operatortype_append(MESH_OT_add_primitive_uv_sphere);
 	WM_operatortype_append(MESH_OT_add_primitive_ico_sphere);
+	WM_operatortype_append(MESH_OT_add_duplicate);
 
 }
 
@@ -127,6 +167,7 @@
 	WM_keymap_add_item(keymap, "MESH_OT_subdivide_smooth", WKEY, KM_PRESS, KM_CTRL|KM_ALT, 0);
 
 	/* add */
+	WM_keymap_add_item(keymap, "MESH_OT_add_duplicate", DKEY, KM_PRESS, KM_SHIFT, 0);
 	WM_keymap_add_item(keymap, "MESH_OT_add_primitive_plane", ZEROKEY, KM_PRESS, KM_CTRL, 0);
 	WM_keymap_add_item(keymap, "MESH_OT_add_primitive_cube", ONEKEY, KM_PRESS, KM_CTRL, 0);
 	WM_keymap_add_item(keymap, "MESH_OT_add_primitive_circle", TWOKEY, KM_PRESS, KM_CTRL, 0);

Modified: branches/blender2.5/blender/source/blender/editors/object/object_edit.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/object/object_edit.c	2009-01-17 16:58:05 UTC (rev 18554)
+++ branches/blender2.5/blender/source/blender/editors/object/object_edit.c	2009-01-17 18:35:33 UTC (rev 18555)
@@ -120,6 +120,8 @@
 
 #include "BMF_Api.h"
 
+#include "BIF_transform.h"
+
 #include "UI_interface.h"
 
 #include "RNA_access.h"
@@ -204,21 +206,7 @@
 }
 
 
-
-
 /*
- * Returns true if the Object is a from an external blend file (libdata)
- */
-int object_is_libdata(Object *ob)
-{
-	if (!ob) return 0;
-	if (ob->proxy) return 0;
-	if (ob->id.lib) return 1;
-	return 0;
-}
-
-
-/*
  * Returns true if the Object data is a from an external blend file (libdata)
  */
 int object_data_is_libdata(Object *ob)
@@ -290,9 +278,7 @@
 static int object_add_exec(bContext *C, wmOperator *op)
 {
 	Scene *scene= CTX_data_scene(C);
-	ScrArea *sa= CTX_wm_area(C);
 	Object *ob;
-	View3D *v3d= NULL;
 	int type= RNA_int_get(op->ptr, "type");
 	
 	/* hrms, this is editor level operator */
@@ -307,9 +293,7 @@
 	ED_base_object_activate(C, BASACT);
 	
 	/* more editor stuff */
-	if(sa && sa->spacetype==SPACE_VIEW3D)
-		v3d= sa->spacedata.first;
-	ED_object_base_init_from_view(scene, v3d, BASACT);
+	ED_object_base_init_from_view(scene, CTX_wm_view3d(C), BASACT);
 	
 	DAG_scene_sort(scene);
 	
@@ -1066,7 +1050,7 @@
 static int clear_parent_exec(bContext *C, wmOperator *op)
 {
 	
-	CTX_DATA_BEGIN(C, Object*, ob, selected_objects) {
+	CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) {
 
 		if(RNA_enum_is_equal(op->ptr, "type", "CLEAR")) {
 			ob->parent= NULL;
@@ -1121,15 +1105,13 @@
 {
 	if(CTX_data_edit_object(C)) return OPERATOR_CANCELLED;
 
-	CTX_DATA_BEGIN(C, Object*, ob, selected_objects) {
-		/*if(TESTBASELIB(v3d, base)) {*/
-			ob->track= NULL;
-			ob->recalc |= OB_RECALC;
-			
-			if(RNA_enum_is_equal(op->ptr, "type", "CLEAR_KEEP_TRANSFORM")) {
-				ED_object_apply_obmat(ob);
-			}			
-		/*}*/
+	CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) {
+		ob->track= NULL;
+		ob->recalc |= OB_RECALC;
+		
+		if(RNA_enum_is_equal(op->ptr, "type", "CLEAR_KEEP_TRANSFORM")) {
+			ED_object_apply_obmat(ob);
+		}			
 	}
 	CTX_DATA_END;
 
@@ -1487,7 +1469,7 @@
 	Scene *scene= CTX_data_scene(C);
 	int armature_clear= 0;
 
-	CTX_DATA_BEGIN(C, Object*, ob, selected_objects) {
+	CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) {
 		if ((ob->flag & OB_POSEMODE)) {
 			/* only clear pose transforms if:
 			 *	- with a mesh in weightpaint mode, it's related armature needs to be cleared
@@ -1538,7 +1520,7 @@
 	Scene *scene= CTX_data_scene(C);
 	int armature_clear= 0;
 
-	CTX_DATA_BEGIN(C, Object*, ob, selected_objects) {
+	CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) {
 		if ((ob->flag & OB_POSEMODE)) {
 			/* only clear pose transforms if:
 			 *	- with a mesh in weightpaint mode, it's related armature needs to be cleared
@@ -1590,7 +1572,7 @@
 	Scene *scene= CTX_data_scene(C);
 	int armature_clear= 0;
 
-	CTX_DATA_BEGIN(C, Object*, ob, selected_objects) {
+	CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) {
 		if ((ob->flag & OB_POSEMODE)) {
 			/* only clear pose transforms if:
 			 *	- with a mesh in weightpaint mode, it's related armature needs to be cleared
@@ -1646,7 +1628,7 @@
 	float *v1, *v3, mat[3][3];
 	int armature_clear= 0;
 
-	CTX_DATA_BEGIN(C, Object*, ob, selected_objects) {
+	CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) {
 		if(ob->parent) {
 			v1= ob->loc;
 			v3= ob->parentinv[3];
@@ -1786,8 +1768,8 @@
 static int object_set_slowparent_exec(bContext *C, wmOperator *op)
 {
 
-	CTX_DATA_BEGIN(C, Base*, base, visible_bases) {
-				
+	CTX_DATA_BEGIN(C, Base*, base, selected_editable_bases) {
+		
 		if(base->object->parent) base->object->partype |= PARSLOW;
 		base->object->recalc |= OB_RECALC_OB;
 		
@@ -1819,7 +1801,7 @@
 {
 	Scene *scene= CTX_data_scene(C);
 
-	CTX_DATA_BEGIN(C, Base*, base, visible_bases) {
+	CTX_DATA_BEGIN(C, Base*, base, selected_editable_bases) {
 		if(base->object->parent) {
 			if(base->object->partype & PARSLOW) {
 				base->object->partype -= PARSLOW;
@@ -2154,7 +2136,7 @@
 	}
 	
 	/* context itterator */
-	CTX_DATA_BEGIN(C, Object*, ob, selected_objects) {
+	CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) {
 		
 		if(ob!=par) {
 			
@@ -2300,33 +2282,27 @@
 static int make_track_exec(bContext *C, wmOperator *op)
 {
 	Scene *scene= CTX_data_scene(C);
-	ScrArea *sa= CTX_wm_area(C);
-	View3D *v3d= sa->spacedata.first;
 		
-	if(scene->id.lib) return OPERATOR_CANCELLED;
-
 	if(RNA_enum_is_equal(op->ptr, "type", "TRACKTO")){
 		bConstraint *con;
 		bTrackToConstraint *data;
 
-		CTX_DATA_BEGIN(C, Base*, base, visible_bases) {
-			if(TESTBASELIB(v3d, base)) {
-				if(base!=BASACT) {
-					con = add_new_constraint(CONSTRAINT_TYPE_TRACKTO);
-					strcpy (con->name, "AutoTrack");
+		CTX_DATA_BEGIN(C, Base*, base, selected_editable_bases) {
+			if(base!=BASACT) {

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list