2.5: Particle Edit, work in progress commit.

* Still incomplete and some operators don't work, refresh issues, etc.
* Made Hide/Reveal operators consistent for various modes.
This commit is contained in:
2009-02-20 20:39:27 +00:00
parent 39c2b438a9
commit ebd2b1212d
24 changed files with 2190 additions and 1757 deletions

View File

@@ -192,7 +192,7 @@ void ED_keymap_armature(wmWindowManager *wm)
WM_keymap_add_item(keymap, "POSE_OT_hide", HKEY, KM_PRESS, 0, 0);
kmi= WM_keymap_add_item(keymap, "POSE_OT_hide", HKEY, KM_PRESS, KM_SHIFT, 0);
RNA_boolean_set(kmi->ptr, "invert", 1);
RNA_boolean_set(kmi->ptr, "unselected", 1);
WM_keymap_add_item(keymap, "POSE_OT_reveal", HKEY, KM_PRESS, KM_ALT, 0);
/*clear pose*/
WM_keymap_add_item(keymap, "POSE_OT_rot_clear", RKEY, KM_PRESS, KM_ALT, 0);

View File

@@ -4703,7 +4703,7 @@ static int pose_hide_exec(bContext *C, wmOperator *op)
Object *ob= CTX_data_active_object(C);
bArmature *arm= ob->data;
if(RNA_boolean_get(op->ptr, "invert"))
if(RNA_boolean_get(op->ptr, "unselected"))
bone_looper(ob, arm->bonebase.first, NULL,
hide_unselected_pose_bone);
else
@@ -4719,7 +4719,7 @@ static int pose_hide_exec(bContext *C, wmOperator *op)
void POSE_OT_hide(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Hide Selection";
ot->name= "Hide Selected";
ot->idname= "POSE_OT_hide";
/* api callbacks */
@@ -4730,7 +4730,7 @@ void POSE_OT_hide(wmOperatorType *ot)
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
/* props */
RNA_def_boolean(ot->srna, "invert", 0, "Invert", "");
RNA_def_boolean(ot->srna, "unselected", 0, "Unselected", "");
}
static int show_pose_bone(Object *ob, Bone *bone, void *ptr)
@@ -4764,7 +4764,7 @@ static int pose_reveal_exec(bContext *C, wmOperator *op)
void POSE_OT_reveal(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Reveil Selection";
ot->name= "Reveal Selected";
ot->idname= "POSE_OT_reveal";
/* api callbacks */
@@ -4773,9 +4773,6 @@ void POSE_OT_reveal(wmOperatorType *ot)
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
/* props */
RNA_def_boolean(ot->srna, "invert", 0, "Invert", "");
}
/* ************* RENAMING DISASTERS ************ */

View File

@@ -128,7 +128,7 @@ void ED_armature_enter_posemode(bContext *C, Base *base)
ob->flag |= OB_POSEMODE;
base->flag= ob->flag;
WM_event_add_notifier(C, NC_SCENE|ND_MODE|NS_POSEMODE, NULL);
WM_event_add_notifier(C, NC_SCENE|ND_MODE|NS_MODE_POSE, NULL);
break;
default:

View File

@@ -237,7 +237,7 @@ void ED_keymap_curve(wmWindowManager *wm)
WM_keymap_add_item(keymap, "CURVE_OT_reveal", HKEY, KM_PRESS, KM_ALT, 0);
WM_keymap_add_item(keymap, "CURVE_OT_hide", HKEY, KM_PRESS, KM_ALT|KM_CTRL, 0);
RNA_enum_set(WM_keymap_add_item(keymap, "CURVE_OT_hide", HKEY, KM_PRESS, KM_ALT|KM_SHIFT, 0)->ptr, "deselected", 1);
RNA_enum_set(WM_keymap_add_item(keymap, "CURVE_OT_hide", HKEY, KM_PRESS, KM_ALT|KM_SHIFT, 0)->ptr, "unselected", 1);
WM_keymap_add_item(keymap, "CURVE_OT_specials_menu", WKEY, KM_PRESS, 0, 0);
}

View File

@@ -1618,7 +1618,7 @@ static int hide_exec(bContext *C, wmOperator *op)
Nurb *nu;
BPoint *bp;
BezTriple *bezt;
int a, sel, invert= RNA_boolean_get(op->ptr, "deselected");
int a, sel, invert= RNA_boolean_get(op->ptr, "unselected");
for(nu= editnurb->first; nu; nu= nu->next) {
if((nu->type & 7)==CU_BEZIER) {
@@ -1668,7 +1668,7 @@ static int hide_exec(bContext *C, wmOperator *op)
void CURVE_OT_hide(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Hide Selection";
ot->name= "Hide Selected";
ot->idname= "CURVE_OT_hide";
/* api callbacks */
@@ -1679,7 +1679,7 @@ void CURVE_OT_hide(wmOperatorType *ot)
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
/* props */
RNA_def_boolean(ot->srna, "deselected", 0, "Deselected", "Hide deselected rather than selected.");
RNA_def_boolean(ot->srna, "unselected", 0, "Unselected", "Hide unselected rather than selected.");
}
/********************** reveal operator *********************/

View File

@@ -27,8 +27,8 @@
* ***** END GPL LICENSE BLOCK *****
*/
#ifndef ED_EDITPARTICLE_H
#define ED_EDITPARTICLE_H
#ifndef ED_PARTICLE_H
#define ED_PARTICLE_H
struct Object;
struct ParticleSystem;
@@ -36,18 +36,19 @@ struct ParticleEditSettings;
struct RadialControl;
struct ViewContext;
struct rcti;
struct wmWindowManager;
/* particle edit mode */
void PE_set_particle_edit(struct Scene *scene);
void PE_create_particle_edit(struct Object *ob, struct ParticleSystem *psys);
void PE_create_particle_edit(struct Scene *scene, struct Object *ob, struct ParticleSystem *psys);
void PE_free_particle_edit(struct ParticleSystem *psys);
void PE_change_act(void *ob_v, void *act_v);
void PE_change_act_psys(struct Object *ob, struct ParticleSystem *psys);
void PE_change_act_psys(struct Scene *scene, struct Object *ob, struct ParticleSystem *psys);
int PE_can_edit(struct ParticleSystem *psys);
/* access */
struct ParticleSystem *PE_get_current(struct Object *ob);
struct ParticleSystem *PE_get_current(struct Scene *scene, struct Object *ob);
short PE_get_current_num(struct Object *ob);
int PE_minmax(struct Scene *scene, float *min, float *max);
void PE_get_colors(char sel[4], char nosel[4]);
@@ -69,18 +70,16 @@ void PE_select_less(void);
void PE_select_more(void);
void PE_mouse_particles(void);
void PE_borderselect(struct ViewContext *vc, struct rcti *rect, int select);
void PE_selectionCB(short selecting, struct Object *editobj, short *mval, float rad);
void PE_do_lasso_select(struct ViewContext *, short mcords[][2], short moves, short select);
void PE_border_select(struct ViewContext *vc, struct rcti *rect, int select);
void PE_circle_select(struct ViewContext *vc, int selecting, short *mval, float rad);
void PE_lasso_select(struct ViewContext *vc, short mcords[][2], short moves, short select);
/* tools */
void PE_hide(int mode);
void PE_rekey(void);
void PE_subdivide(Object *ob);
int PE_brush_particles(void);
void PE_delete_particle(void);
void PE_remove_doubles(void);
void PE_mirror_x(Scene *scene, int tagged);
void PE_selectbrush_menu(Scene *scene);
void PE_remove_doubles(void);
void PE_radialcontrol_start(const int mode);
@@ -90,7 +89,11 @@ void PE_undo_push(Scene *scene, char *str);
void PE_undo_step(Scene *scene, int step);
void PE_undo(Scene *scene);
void PE_redo(Scene *scene);
void PE_undo_menu(Scene *scene);
void PE_undo_menu(Scene *scene, Object *ob);
#endif /* ED_EDITPARTICLE_H */
/* operators */
void ED_operatortypes_particle(void);
void ED_keymap_particle(struct wmWindowManager *wm);
#endif /* ED_PARTICLE_H */

View File

@@ -33,6 +33,7 @@ struct ARegion;
struct View3D;
struct RegionView3D;
struct ViewContext;
struct bglMats;
struct BPoint;
struct Nurb;
struct BezTriple;
@@ -122,6 +123,7 @@ void view3d_set_viewcontext(struct bContext *C, struct ViewContext *vc);
void view3d_operator_needs_opengl(const struct bContext *C);
void view3d_get_view_aligned_coordinate(struct ViewContext *vc, float *fp, short mval[2]);
void view3d_get_object_project_mat(struct RegionView3D *v3d, struct Object *ob, float pmat[4][4], float vmat[4][4]);;
void view3d_get_transformation(struct ViewContext *vc, struct Object *ob, struct bglMats *mats);
/* XXX should move to arithb.c */
int edge_inside_circle(short centx, short centy, short rad, short x1, short y1, short x2, short y2);

View File

@@ -2631,7 +2631,7 @@ static int hide_mesh_exec(bContext *C, wmOperator *op)
Object *obedit= CTX_data_edit_object(C);
EditMesh *em= ((Mesh *)obedit->data)->edit_mesh;
EM_hide_mesh(em, RNA_boolean_get(op->ptr, "invert"));
EM_hide_mesh(em, RNA_boolean_get(op->ptr, "unselected"));
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
return OPERATOR_FINISHED;
@@ -2651,7 +2651,7 @@ void MESH_OT_hide(wmOperatorType *ot)
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
/* props */
RNA_def_boolean(ot->srna, "invert", 0, "Invert", "Hide unselected rather than selected.");
RNA_def_boolean(ot->srna, "unselected", 0, "Unselected", "Hide unselected rather than selected.");
}
void EM_reveal_mesh(EditMesh *em)

View File

@@ -234,7 +234,7 @@ void ED_keymap_mesh(wmWindowManager *wm)
/* hide */
WM_keymap_add_item(keymap, "MESH_OT_hide", HKEY, KM_PRESS, 0, 0);
RNA_boolean_set(WM_keymap_add_item(keymap, "MESH_OT_hide", HKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "invert", 1);
RNA_boolean_set(WM_keymap_add_item(keymap, "MESH_OT_hide", HKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "unselected", 1);
WM_keymap_add_item(keymap, "MESH_OT_reveal", HKEY, KM_PRESS, KM_ALT, 0);
/* tools */

View File

@@ -112,7 +112,7 @@
#include "ED_anim_api.h"
#include "ED_armature.h"
#include "ED_curve.h"
#include "ED_editparticle.h"
#include "ED_particle.h"
#include "ED_mesh.h"
#include "ED_object.h"
#include "ED_screen.h"
@@ -6366,15 +6366,8 @@ void texspace_edit(Scene *scene, View3D *v3d)
void mirrormenu(void)
{
Scene *scene= NULL; // XXX
if(G.f & G_PARTICLEEDIT) {
PE_mirror_x(scene, 0);
}
else {
// XXX initTransform(TFM_MIRROR, CTX_NO_PET);
// XXX Transform();
}
}
void hookmenu(Scene *scene, View3D *v3d)

File diff suppressed because it is too large Load Diff

View File

@@ -1300,26 +1300,6 @@ static void SCULPT_OT_radial_control(wmOperatorType *ot)
/**** Operator for applying a stroke (various attributes including mouse path)
using the current brush. ****/
static void sculpt_load_mats(bglMats *mats, ViewContext *vc)
{
float cpy[4][4];
int i, j;
Mat4MulMat4(cpy, vc->rv3d->viewmat, vc->obact->obmat);
for(i = 0; i < 4; ++i) {
for(j = 0; j < 4; ++j) {
mats->projection[i*4+j] = vc->rv3d->winmat[i][j];
mats->modelview[i*4+j] = cpy[i][j];
}
}
mats->viewport[0] = vc->ar->winrct.xmin;
mats->viewport[1] = vc->ar->winrct.ymin;
mats->viewport[2] = vc->ar->winx;
mats->viewport[3] = vc->ar->winy;
}
static float unproject_brush_radius(SculptSession *ss, float offset)
{
float brush_edge[3];
@@ -1363,7 +1343,7 @@ static void sculpt_update_cache_invariants(Sculpt *sd, bContext *C, wmOperator *
view3d_set_viewcontext(C, &cache->vc);
cache->mats = MEM_callocN(sizeof(bglMats), "sculpt bglMats");
sculpt_load_mats(cache->mats, &cache->vc);
view3d_get_transformation(&cache->vc, cache->vc.obact, cache->mats);
sculpt_update_mesh_elements(C);

View File

@@ -45,6 +45,7 @@
#include "ED_mesh.h"
#include "ED_markers.h"
#include "ED_object.h"
#include "ED_particle.h"
#include "ED_sculpt.h"
#include "ED_screen.h"
#include "ED_space_api.h"
@@ -83,6 +84,7 @@ void ED_spacetypes_init(void)
ED_operatortypes_sculpt();
ED_operatortypes_uvedit();
ED_operatortypes_paint();
ED_operatortypes_particle();
ED_operatortypes_curve();
ED_operatortypes_armature();
ED_marker_operatortypes();
@@ -111,6 +113,7 @@ void ED_spacetypes_keymap(wmWindowManager *wm)
ED_keymap_uvedit(wm);
ED_keymap_curve(wm);
ED_keymap_armature(wm);
ED_keymap_particle(wm);
ED_marker_keymap(wm);
UI_view2d_keymap(wm);

View File

@@ -261,9 +261,9 @@ static void image_imagemenu(bContext *C, uiMenuItem *head, void *arg_unused)
static void image_uvs_showhidemenu(bContext *C, uiMenuItem *head, void *arg_unused)
{
uiMenuItemO(head, 0, "UV_OT_show_hidden");
uiMenuItemO(head, 0, "UV_OT_hide_selected");
uiMenuItemO(head, 0, "UV_OT_hide_deselected");
uiMenuItemO(head, 0, "UV_OT_reveal");
uiMenuItemO(head, 0, "UV_OT_hide");
uiMenuItemBooleanO(head, "Hide Unselected", 0, "UV_OT_hide", "unselected", 1);
}
static void image_uvs_transformmenu(bContext *C, uiMenuItem *head, void *arg_unused)

View File

@@ -98,7 +98,7 @@
#include "GPU_material.h"
#include "GPU_extensions.h"
#include "ED_editparticle.h"
#include "ED_particle.h"
#include "ED_mesh.h"
#include "ED_types.h"
#include "ED_util.h"
@@ -5086,7 +5086,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
draw_new_particle_system(scene, v3d, rv3d, base, psys, dt);
if(G.f & G_PARTICLEEDIT && ob==OBACT) {
psys= PE_get_current(ob);
psys= PE_get_current(scene, ob);
if(psys && !scene->obedit && psys_in_edit_mode(scene, psys))
draw_particle_edit(scene, v3d, rv3d, ob, psys, dt);
}

View File

@@ -240,7 +240,13 @@ static void view3d_modal_keymaps(wmWindowManager *wm, ARegion *ar, int stype)
WM_event_add_keymap_handler(&ar->handlers, keymap);
else
WM_event_remove_keymap_handler(&ar->handlers, keymap);
keymap= WM_keymap_listbase(wm, "Particle", 0, 0);
if(stype==NS_MODE_PARTICLE)
WM_event_add_keymap_handler(&ar->handlers, keymap);
else
WM_event_remove_keymap_handler(&ar->handlers, keymap);
/* editfont keymap swallows all... */
keymap= WM_keymap_listbase(wm, "Font", 0, 0);
if(stype==NS_EDITMODE_TEXT)

View File

@@ -77,7 +77,7 @@
#include "ED_armature.h"
#include "ED_curve.h"
#include "ED_editparticle.h"
#include "ED_particle.h"
#include "ED_keyframing.h"
#include "ED_mesh.h"
#include "ED_object.h"

View File

@@ -70,7 +70,7 @@
#include "RNA_access.h"
#include "RNA_define.h"
#include "ED_editparticle.h"
#include "ED_particle.h"
#include "ED_space_api.h"
#include "ED_screen.h"
#include "ED_types.h"

View File

@@ -66,7 +66,7 @@
#include "BKE_utildefines.h" /* for VECCOPY */
#include "ED_armature.h"
#include "ED_editparticle.h"
#include "ED_particle.h"
#include "ED_object.h"
#include "ED_mesh.h"
#include "ED_util.h"
@@ -149,9 +149,8 @@ void ED_view3d_exit_paint_modes(bContext *C)
if(G.f & G_SCULPTMODE)
WM_operator_name_call(C, "SCULPT_OT_sculptmode_toggle", WM_OP_EXEC_REGION_WIN, NULL);
// if(G.f & G_TEXTUREPAINT) set_texturepaint();
if(G.f & G_PARTICLEEDIT) PE_set_particle_edit(CTX_data_scene(C));
if(G.f & G_PARTICLEEDIT)
WM_operator_name_call(C, "PARTICLE_OT_particle_edit_toggle", WM_OP_EXEC_REGION_WIN, NULL);
G.f &= ~(G_VERTEXPAINT+G_TEXTUREPAINT+G_WEIGHTPAINT+G_SCULPTMODE+G_PARTICLEEDIT);
}
@@ -2487,7 +2486,7 @@ static uiBlock *view3d_edit_object_showhidemenu(bContext *C, ARegion *ar, void *
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Show Hidden|Alt H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Selected|H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Deselected|Shift H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Unselected|Shift H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
uiBlockSetDirection(block, UI_RIGHT);
uiTextBoundsBlock(block, 60);
@@ -3104,7 +3103,7 @@ static uiBlock *view3d_edit_mesh_showhidemenu(bContext *C, ARegion *ar, void *ar
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Show Hidden|Alt H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Selected|H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Deselected|Shift H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Unselected|Shift H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
uiBlockSetDirection(block, UI_RIGHT);
uiTextBoundsBlock(block, 60);
@@ -3322,7 +3321,7 @@ static void view3d_edit_curve_showhidemenu(bContext *C, uiMenuItem *head, void *
{
uiMenuItemO(head, 0, "CURVE_OT_reveal");
uiMenuItemO(head, 0, "CURVE_OT_hide");
uiMenuItemBooleanO(head, "Hide Deselected", 0, "CURVE_OT_hide", "deselected", 1);
uiMenuItemBooleanO(head, "Hide Unselected", 0, "CURVE_OT_hide", "unselected", 1);
}
static void view3d_edit_curvemenu(bContext *C, uiMenuItem *head, void *arg_unused)
@@ -3379,7 +3378,7 @@ static void do_view3d_edit_mball_showhidemenu(bContext *C, void *arg, int event)
case 11: /* hide selected control points */
hide_mball(0);
break;
case 12: /* hide deselected control points */
case 12: /* hide selected control points */
hide_mball(1);
break;
}
@@ -3396,7 +3395,7 @@ static uiBlock *view3d_edit_mball_showhidemenu(bContext *C, ARegion *ar, void *a
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Show Hidden|Alt H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Selected|H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Deselected|Shift H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Unselected|Shift H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
uiBlockSetDirection(block, UI_RIGHT);
uiTextBoundsBlock(block, 60);
@@ -3934,7 +3933,7 @@ static uiBlock *view3d_pose_armature_showhidemenu(bContext *C, ARegion *ar, void
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Show Hidden|Alt H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Selected|H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Deselected|Shift H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Unselected|Shift H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
uiBlockSetDirection(block, UI_RIGHT);
uiTextBoundsBlock(block, 60);
@@ -4638,7 +4637,7 @@ static uiBlock *view3d_facesel_showhidemenu(bContext *C, ARegion *ar, void *arg_
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Show Hidden Faces|Alt H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Selected Faces|H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Deselected Faces|Shift H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Unselected Faces|Shift H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
uiBlockSetDirection(block, UI_RIGHT);
uiTextBoundsBlock(block, 60);
@@ -4693,195 +4692,61 @@ static uiBlock *view3d_faceselmenu(bContext *C, ARegion *ar, void *arg_unused)
return block;
}
void do_view3d_select_particlemenu(bContext *C, void *arg, int event)
{
/* events >= 6 are registered bpython scripts */
#ifndef DISABLE_PYTHON
// XXX if (event >= 6) BPY_menu_do_python(PYMENU_FACESELECT, event - 6);
#endif
switch(event) {
case 0:
// XXX PE_borderselect();
break;
case 1:
PE_deselectall();
break;
case 2:
PE_select_root();
break;
case 3:
PE_select_tip();
break;
case 4:
PE_select_more();
break;
case 5:
PE_select_less();
break;
case 7:
PE_select_linked();
break;
}
}
static uiBlock *view3d_select_particlemenu(bContext *C, ARegion *ar, void *arg_unused)
{
uiBlock *block;
short yco= 0, menuwidth=120;
block= uiBeginBlock(C, ar, "view3d_select_particlemenu", UI_EMBOSSP, UI_HELV);
uiBlockSetButmFunc(block, do_view3d_select_particlemenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B",
0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
uiDefBut(block, SEPR, 0, "",
0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A",
0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Linked|L",
0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Last|W, 4",
0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select First|W, 3",
0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
uiDefBut(block, SEPR, 0, "",
0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "More|Ctrl NumPad +",
0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Less|Ctrl NumPad -",
0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
if(ar->alignment==RGN_ALIGN_TOP) {
uiBlockSetDirection(block, UI_DOWN);
}
else {
uiBlockSetDirection(block, UI_TOP);
uiBlockFlipOrder(block);
}
uiTextBoundsBlock(block, 50);
return block;
}
void do_view3d_particle_showhidemenu(bContext *C, void *arg, int event)
{
switch(event) {
case 1: /* show hidden */
PE_hide(0);
break;
case 2: /* hide selected */
PE_hide(2);
break;
case 3: /* hide deselected */
PE_hide(1);
break;
}
}
static uiBlock *view3d_particle_showhidemenu(bContext *C, ARegion *ar, void *arg_unused)
{
uiBlock *block;
short yco = 20, menuwidth = 120;
block= uiBeginBlock(C, ar, "view3d_particle_showhidemenu", UI_EMBOSSP, UI_HELV);
uiBlockSetButmFunc(block, do_view3d_particle_showhidemenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Show Hidden|Alt H",
0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Selected|H",
0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Deselected|Shift H",
0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
uiBlockSetDirection(block, UI_RIGHT);
uiTextBoundsBlock(block, 60);
return block;
}
void do_view3d_particlemenu(bContext *C, void *arg, int event)
{
#if 0
Scene *scene= CTX_data_scene(C);
ScrArea *sa= CTX_wm_area(C);
View3D *v3d= sa->spacedata.first;
ParticleEditSettings *pset= PE_settings();
switch(event) {
case 1:
add_blockhandler(sa, VIEW3D_HANDLER_OBJECT, UI_PNL_UNSTOW);
break;
case 2:
if(button(&pset->totrekey, 2, 100, "Number of Keys:")==0) return;
PE_rekey();
break;
case 3:
PE_subdivide();
break;
case 4:
PE_delete_particle();
break;
case 5:
PE_mirror_x(0);
break;
case 6:
pset->flag ^= PE_X_MIRROR;
break;
case 7:
PE_remove_doubles();
break;
}
#endif
}
uiBlock *view3d_particlemenu(bContext *C, ARegion *ar, void *arg_unused)
static void view3d_select_particlemenu(bContext *C, uiMenuItem *head, void *arg_unused)
{
Scene *scene= CTX_data_scene(C);
uiBlock *block;
ParticleEditSettings *pset= PE_settings(scene);
short yco= 0, menuwidth= 120;
block= uiBeginBlock(C, ar, "view3d_particlemenu", UI_EMBOSSP, UI_HELV);
uiBlockSetButmFunc(block, do_view3d_particlemenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Particle Edit Properties|N", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
uiMenuItemO(head, 0, "VIEW3D_OT_borderselect");
uiDefIconTextBut(block, BUTM, 1, (pset->flag & PE_X_MIRROR)? ICON_CHECKBOX_HLT: ICON_CHECKBOX_DEHLT, "X-Axis Mirror Editing", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mirror|Ctrl M", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
uiMenuSeparator(head);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Remove Doubles|W, 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete...|X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
uiMenuItemO(head, 0, "PARTICLE_OT_de_select_all");
uiMenuItemO(head, 0, "PARTICLE_OT_select_linked");
if(scene->selectmode & SCE_SELECT_POINT) {
uiMenuItemO(head, 0, "PARTICLE_OT_select_last"); // |W, 4
uiMenuItemO(head, 0, "PARTICLE_OT_select_first"); // |W, 3
}
uiMenuSeparator(head);
uiMenuItemO(head, 0, "PARTICLE_OT_select_more");
uiMenuItemO(head, 0, "PARTICLE_OT_select_less");
}
static void view3d_particle_showhidemenu(bContext *C, uiMenuItem *head, void *arg_unused)
{
uiMenuItemO(head, 0, "PARTICLE_OT_reveal");
uiMenuItemO(head, 0, "PARTICLE_OT_hide");
uiMenuItemBooleanO(head, "Hide Unselected", 0, "PARTICLE_OT_hide", "unselected", 1);
}
static void view3d_particlemenu(bContext *C, uiMenuItem *head, void *arg_unused)
{
Scene *scene= CTX_data_scene(C);
// XXX uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Particle Edit Properties|N", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
// add_blockhandler(sa, VIEW3D_HANDLER_OBJECT, UI_PNL_UNSTOW);
// XXX uiMenuSeparator(head);
//
// XXX uiDefIconTextBut(block, BUTM, 1, (pset->flag & PE_X_MIRROR)? ICON_CHECKBOX_HLT: ICON_CHECKBOX_DEHLT, "X-Axis Mirror Editing", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
// pset->flag ^= PE_X_MIRROR;
uiMenuItemO(head, 0, "PARTICLE_OT_mirror"); // |Ctrl M
uiMenuSeparator(head);
uiMenuItemO(head, 0, "PARTICLE_OT_remove_doubles"); // |W, 5
uiMenuItemO(head, 0, "PARTICLE_OT_delete");
if(scene->selectmode & SCE_SELECT_POINT)
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Subdivide|W, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rekey|W, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
uiMenuItemO(head, 0, "PARTICLE_OT_subdivide"); // |W, 2
uiMenuItemO(head, 0, "PARTICLE_OT_rekey"); // |W, 1
uiDefIconTextBlockBut(block, view3d_particle_showhidemenu, NULL, ICON_RIGHTARROW_THIN, "Show/Hide Particles", 0, yco-=20, menuwidth, 19, "");
uiMenuSeparator(head);
if(ar->alignment==RGN_ALIGN_TOP) {
uiBlockSetDirection(block, UI_DOWN);
}
else {
uiBlockSetDirection(block, UI_TOP);
uiBlockFlipOrder(block);
}
uiTextBoundsBlock(block, 50);
return block;
uiMenuLevel(head, "Show/Hide Particles", view3d_particle_showhidemenu);
}
static char *view3d_modeselect_pup(Scene *scene)
{
Object *ob= OBACT;
@@ -5127,7 +4992,7 @@ static void do_view3d_header_buttons(bContext *C, void *arg, int event)
ED_view3d_exit_paint_modes(C);
if(obedit) ED_object_exit_editmode(C, EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR); /* exit editmode and undo */
PE_set_particle_edit(scene);
WM_operator_name_call(C, "PARTICLE_OT_particle_edit_toggle", WM_OP_EXEC_REGION_WIN, NULL);
}
}
break;
@@ -5295,7 +5160,7 @@ static void view3d_header_pulldowns(const bContext *C, uiBlock *block, Object *o
} else if ((G.f & G_VERTEXPAINT) || (G.f & G_TEXTUREPAINT) || (G.f & G_WEIGHTPAINT)) {
uiDefBut(block, LABEL,0,"", xco, 0, xmax, 20, 0, 0, 0, 0, 0, "");
} else if (G.f & G_PARTICLEEDIT) {
uiDefPulldownBut(block, view3d_select_particlemenu, NULL, "Select", xco,yco-2, xmax-3, 24, "");
uiDefMenuBut(block, view3d_select_particlemenu, NULL, "Select", xco,yco-2, xmax-3, 24, "");
} else {
if (ob && (ob->flag & OB_POSEMODE))
@@ -5366,7 +5231,7 @@ static void view3d_header_pulldowns(const bContext *C, uiBlock *block, Object *o
}
else if(G.f & G_PARTICLEEDIT) {
xmax= GetButStringLength("Particle");
uiDefPulldownBut(block, view3d_particlemenu, NULL, "Particle", xco,yco-2, xmax-3, 24, "");
uiDefMenuBut(block, view3d_particlemenu, NULL, "Particle", xco,yco-2, xmax-3, 24, "");
xco+= xmax;
}
else {

View File

@@ -76,7 +76,7 @@
#include "ED_armature.h"
#include "ED_curve.h"
#include "ED_editparticle.h"
#include "ED_particle.h"
#include "ED_mesh.h"
#include "ED_object.h"
#include "ED_screen.h"
@@ -121,6 +121,26 @@ void view3d_get_view_aligned_coordinate(ViewContext *vc, float *fp, short mval[2
}
}
void view3d_get_transformation(ViewContext *vc, Object *ob, bglMats *mats)
{
float cpy[4][4];
int i, j;
Mat4MulMat4(cpy, vc->rv3d->viewmat, ob->obmat);
for(i = 0; i < 4; ++i) {
for(j = 0; j < 4; ++j) {
mats->projection[i*4+j] = vc->rv3d->winmat[i][j];
mats->modelview[i*4+j] = cpy[i][j];
}
}
mats->viewport[0] = vc->ar->winrct.xmin;
mats->viewport[1] = vc->ar->winrct.ymin;
mats->viewport[2] = vc->ar->winx;
mats->viewport[3] = vc->ar->winy;
}
/* ********************** view3d_select: selection manipulations ********************* */
/* XXX to solve *************** */
@@ -677,7 +697,7 @@ void view3d_lasso_select(ViewContext *vc, short mcords[][2], short moves, short
else if(G.f & (G_VERTEXPAINT|G_TEXTUREPAINT|G_WEIGHTPAINT))
;
else if(G.f & G_PARTICLEEDIT)
PE_do_lasso_select(vc, mcords, moves, select);
PE_lasso_select(vc, mcords, moves, select);
else
do_lasso_select_objects(vc, mcords, moves, select);
}
@@ -1329,7 +1349,7 @@ static int view3d_borderselect_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
else if(obedit==NULL && (G.f & G_PARTICLEEDIT)) {
PE_borderselect(&vc, &rect, (val==LEFTMOUSE));
PE_border_select(&vc, &rect, (val==LEFTMOUSE));
return OPERATOR_FINISHED;
}
@@ -1765,7 +1785,7 @@ static int view3d_circle_select_exec(bContext *C, wmOperator *op)
int y= RNA_int_get(op->ptr, "y");
int radius= RNA_int_get(op->ptr, "radius");
if(CTX_data_edit_object(C)) {
if(CTX_data_edit_object(C) || (G.f & G_PARTICLEEDIT)) {
ViewContext vc;
short mval[2], selecting;
@@ -1775,7 +1795,11 @@ static int view3d_circle_select_exec(bContext *C, wmOperator *op)
mval[0]= x;
mval[1]= y;
selecting= LEFTMOUSE==RNA_int_get(op->ptr, "event_type"); // XXX solve
obedit_circle_select(&vc, selecting, mval, (float)radius);
if(CTX_data_edit_object(C))
obedit_circle_select(&vc, selecting, mval, (float)radius);
else
PE_circle_select(&vc, selecting, mval, (float)radius);
}
else {
Base *base;

View File

@@ -121,7 +121,7 @@
#include "ED_anim_api.h"
#include "ED_armature.h"
#include "ED_editparticle.h"
#include "ED_particle.h"
#include "ED_image.h"
#include "ED_keyframing.h"
#include "ED_keyframes_edit.h"

View File

@@ -55,7 +55,7 @@
#include "BKE_utildefines.h"
#include "ED_armature.h"
#include "ED_editparticle.h"
#include "ED_particle.h"
#include "ED_curve.h"
#include "ED_mesh.h"
#include "ED_object.h"
@@ -191,7 +191,7 @@ void ED_undo_menu(bContext *C)
}
else {
if(G.f & G_PARTICLEEDIT)
PE_undo_menu(CTX_data_scene(C));
PE_undo_menu(CTX_data_scene(C), CTX_data_active_object(C));
else if(U.uiflag & USER_GLOBALUNDO) {
char *menu= BKE_undo_menu_string();
if(menu) {

View File

@@ -2513,7 +2513,7 @@ void UV_OT_snap_selection(wmOperatorType *ot)
static EnumPropertyItem target_items[] = {
{0, "PIXELS", "Pixels", ""},
{1, "CURSOR", "Cursor", ""},
{2, "ADJACENT_DESELECTED", "Adjacent Deselected", ""},
{2, "ADJACENT_UNSELECTED", "Adjacent Unselected", ""},
{0, NULL, NULL, NULL}};
/* identifiers */
@@ -2633,7 +2633,7 @@ static int hide_exec(bContext *C, wmOperator *op)
EditMesh *em= ((Mesh*)obedit->data)->edit_mesh;
EditFace *efa;
MTFace *tf;
int swap= (strcmp(op->idname, "UV_OT_hide_deselected") == 0);
int swap= RNA_boolean_get(op->ptr, "unselected");
if(scene->toolsettings->uv_flag & UV_SYNC_SELECTION) {
EM_hide_mesh(em, swap);
@@ -2748,33 +2748,24 @@ static int hide_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
void UV_OT_hide_selected(wmOperatorType *ot)
void UV_OT_hide(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Hide Selected";
ot->idname= "UV_OT_hide_selected";
ot->idname= "UV_OT_hide";
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
/* api callbacks */
ot->exec= hide_exec;
ot->poll= ED_operator_uvedit;
/* props */
RNA_def_boolean(ot->srna, "unselected", 0, "Unselected", "Hide unselected rather than selected.");
}
void UV_OT_hide_deselected(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Hide Deselected";
ot->idname= "UV_OT_hide_deselected";
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
/* api callbacks */
ot->exec= hide_exec;
ot->poll= ED_operator_uvedit;
}
/****************** reveal operator ******************/
/****************** show hidden operator ******************/
static int show_hidden_exec(bContext *C, wmOperator *op)
static int reveal_exec(bContext *C, wmOperator *op)
{
SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C);
Scene *scene= CTX_data_scene(C);
@@ -2885,22 +2876,21 @@ static int show_hidden_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
void UV_OT_show_hidden(wmOperatorType *ot)
void UV_OT_reveal(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Show Hidden";
ot->idname= "UV_OT_show_hidden";
ot->name= "Reveal Hidden";
ot->idname= "UV_OT_reveal";
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
/* api callbacks */
ot->exec= show_hidden_exec;
ot->exec= reveal_exec;
ot->poll= ED_operator_uvedit;
}
/******************** set 3d cursor operator ********************/
static int set_3d_cursor_exec(bContext *C, wmOperator *op)
static int set_2d_cursor_exec(bContext *C, wmOperator *op)
{
ARegion *ar= CTX_wm_region(C);
float location[2];
@@ -2914,7 +2904,7 @@ static int set_3d_cursor_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
static int set_3d_cursor_invoke(bContext *C, wmOperator *op, wmEvent *event)
static int set_2d_cursor_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
ARegion *ar= CTX_wm_region(C);
int x, y;
@@ -2925,18 +2915,18 @@ static int set_3d_cursor_invoke(bContext *C, wmOperator *op, wmEvent *event)
UI_view2d_region_to_view(&ar->v2d, x, y, &location[0], &location[1]);
RNA_float_set_array(op->ptr, "location", location);
return set_3d_cursor_exec(C, op);
return set_2d_cursor_exec(C, op);
}
void UV_OT_set_3d_cursor(wmOperatorType *ot)
void UV_OT_set_2d_cursor(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Set 3D Cursor";
ot->idname= "UV_OT_set_3d_cursor";
ot->idname= "UV_OT_set_2d_cursor";
/* api callbacks */
ot->exec= set_3d_cursor_exec;
ot->invoke= set_3d_cursor_invoke;
ot->exec= set_2d_cursor_exec;
ot->invoke= set_2d_cursor_invoke;
ot->poll= ED_operator_uvedit;
/* flags */
@@ -3045,11 +3035,10 @@ void ED_operatortypes_uvedit(void)
WM_operatortype_append(UV_OT_sphere_project);
WM_operatortype_append(UV_OT_unwrap);
WM_operatortype_append(UV_OT_show_hidden);
WM_operatortype_append(UV_OT_hide_selected);
WM_operatortype_append(UV_OT_hide_deselected);
WM_operatortype_append(UV_OT_reveal);
WM_operatortype_append(UV_OT_hide);
WM_operatortype_append(UV_OT_set_3d_cursor);
WM_operatortype_append(UV_OT_set_2d_cursor);
WM_operatortype_append(UV_OT_set_tile);
}
@@ -3087,12 +3076,12 @@ void ED_keymap_uvedit(wmWindowManager *wm)
WM_keymap_add_item(keymap, "UV_OT_average_islands_scale", AKEY, KM_PRESS, KM_CTRL, 0);
/* hide */
WM_keymap_add_item(keymap, "UV_OT_hide_selected", HKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "UV_OT_hide_deselected", HKEY, KM_PRESS, KM_SHIFT, 0);
WM_keymap_add_item(keymap, "UV_OT_show_hidden", HKEY, KM_PRESS, KM_ALT, 0);
WM_keymap_add_item(keymap, "UV_OT_hide", HKEY, KM_PRESS, 0, 0);
RNA_boolean_set(WM_keymap_add_item(keymap, "UV_OT_hide", HKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "unselected", 1);
WM_keymap_add_item(keymap, "UV_OT_reveal", HKEY, KM_PRESS, KM_ALT, 0);
/* cursor */
WM_keymap_add_item(keymap, "UV_OT_set_3d_cursor", ACTIONMOUSE, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "UV_OT_set_2d_cursor", ACTIONMOUSE, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "UV_OT_set_tile", ACTIONMOUSE, KM_PRESS, KM_SHIFT, 0);
transform_keymap_for_space(wm, keymap, SPACE_IMAGE);

View File

@@ -218,7 +218,8 @@ typedef struct wmNotifier {
#define NS_EDITMODE_MBALL (6<<8)
#define NS_EDITMODE_LATTICE (7<<8)
#define NS_EDITMODE_ARMATURE (8<<8)
#define NS_POSEMODE (9<<8)
#define NS_MODE_POSE (9<<8)
#define NS_MODE_PARTICLE (10<<8)
/* action classification */