2.5: Most curve/surface editmode operators back:
* Hide, Reveal * Separate, Duplicate, Delete * Set Weight, Set Radius, Set Spline Type, Set Handle Type, Set Smooth * Tilt, Clear Tilt * Smooth, Smooth Radius * De(select) First, De(select) Last, De(select) All, Select Inverse, Select Linked, Select Control Point Row, Select Next, Select Previous, Select More, Select Less, Select Random, Select Every Nth * Switch Direction, Subdivide, Make Segment, Spin, Extrude, Toggle Cyclic * Specials Menu Not working correct yet: * Add Vertex (ctrl click) * Add Menu
This commit is contained in:
@@ -191,6 +191,8 @@ Curve *copy_curve(Curve *cu)
|
||||
cun->bev.first= cun->bev.last= 0;
|
||||
cun->path= 0;
|
||||
|
||||
cun->editnurb= NULL;
|
||||
|
||||
#if 0 // XXX old animation system
|
||||
/* single user ipo too */
|
||||
if(cun->ipo) cun->ipo= copy_ipo(cun->ipo);
|
||||
|
||||
@@ -44,20 +44,21 @@ void CURVE_OT_switch_direction(struct wmOperatorType *ot);
|
||||
void CURVE_OT_set_weight(struct wmOperatorType *ot);
|
||||
void CURVE_OT_set_radius(struct wmOperatorType *ot);
|
||||
void CURVE_OT_smooth(struct wmOperatorType *ot);
|
||||
void CURVE_OT_smooth_curve_radius(struct wmOperatorType *ot);
|
||||
void CURVE_OT_smooth_radius(struct wmOperatorType *ot);
|
||||
void CURVE_OT_de_select_first(struct wmOperatorType *ot);
|
||||
void CURVE_OT_de_select_last(struct wmOperatorType *ot);
|
||||
void CURVE_OT_de_select_all(struct wmOperatorType *ot);
|
||||
void CURVE_OT_hide(struct wmOperatorType *ot);
|
||||
void CURVE_OT_reveal(struct wmOperatorType *ot);
|
||||
void CURVE_OT_select_invert(struct wmOperatorType *ot);
|
||||
void CURVE_OT_select_inverse(struct wmOperatorType *ot);
|
||||
void CURVE_OT_subdivide(struct wmOperatorType *ot);
|
||||
void CURVE_OT_set_spline_type(struct wmOperatorType *ot);
|
||||
void CURVE_OT_set_handle_type(struct wmOperatorType *ot);
|
||||
void CURVE_OT_make_segment(struct wmOperatorType *ot);
|
||||
void CURVE_OT_spin(struct wmOperatorType *ot);
|
||||
void CURVE_OT_add_vertex(struct wmOperatorType *ot);
|
||||
void CURVE_OT_extrude(struct wmOperatorType *ot);
|
||||
void CURVE_OT_make_cyclic(struct wmOperatorType *ot);
|
||||
void CURVE_OT_toggle_cyclic(struct wmOperatorType *ot);
|
||||
void CURVE_OT_select_linked(struct wmOperatorType *ot);
|
||||
void CURVE_OT_select_row(struct wmOperatorType *ot);
|
||||
void CURVE_OT_select_next(struct wmOperatorType *ot);
|
||||
@@ -66,10 +67,16 @@ void CURVE_OT_select_more(struct wmOperatorType *ot);
|
||||
void CURVE_OT_select_less(struct wmOperatorType *ot);
|
||||
void CURVE_OT_select_random(struct wmOperatorType *ot);
|
||||
void CURVE_OT_select_every_nth(struct wmOperatorType *ot);
|
||||
void CURVE_OT_add_duplicate(struct wmOperatorType *ot);
|
||||
void CURVE_OT_duplicate(struct wmOperatorType *ot);
|
||||
void CURVE_OT_delete(struct wmOperatorType *ot);
|
||||
void CURVE_OT_set_smooth(struct wmOperatorType *ot);
|
||||
void CURVE_OT_clear_tilt(struct wmOperatorType *ot);
|
||||
void CURVE_OT_add_surface_primitive(struct wmOperatorType *ot);
|
||||
void CURVE_OT_add_curve_primitive(struct wmOperatorType *ot);
|
||||
|
||||
void CURVE_OT_specials_menu(struct wmOperatorType *ot);
|
||||
void CURVE_OT_add_menu(struct wmOperatorType *ot);
|
||||
|
||||
|
||||
#endif /* ED_UTIL_INTERN_H */
|
||||
|
||||
|
||||
@@ -55,35 +55,95 @@
|
||||
#include "ED_screen.h"
|
||||
#include "ED_object.h"
|
||||
|
||||
#include "BIF_transform.h"
|
||||
|
||||
#include "UI_interface.h"
|
||||
|
||||
#include "curve_intern.h"
|
||||
|
||||
|
||||
/* ************************** registration **********************************/
|
||||
/**************************** menus *****************************/
|
||||
|
||||
static int specials_menu_invoke(bContext *C, wmOperator *op, wmEvent *event)
|
||||
{
|
||||
uiMenuItem *head;
|
||||
|
||||
head= uiPupMenuBegin("Specials", 0);
|
||||
uiMenuItemO(head, 0, "CURVE_OT_subdivide");
|
||||
uiMenuItemO(head, 0, "CURVE_OT_switch_direction");
|
||||
uiMenuItemO(head, 0, "CURVE_OT_set_weight");
|
||||
uiMenuItemO(head, 0, "CURVE_OT_set_radius");
|
||||
uiMenuItemO(head, 0, "CURVE_OT_smooth");
|
||||
uiMenuItemO(head, 0, "CURVE_OT_smooth_radius");
|
||||
uiPupMenuEnd(C, head);
|
||||
|
||||
return OPERATOR_CANCELLED;
|
||||
}
|
||||
|
||||
void CURVE_OT_specials_menu(wmOperatorType *ot)
|
||||
{
|
||||
/* identifiers */
|
||||
ot->name= "Specials Menu";
|
||||
ot->idname= "CURVE_OT_specials_menu";
|
||||
|
||||
/* api clastbacks */
|
||||
ot->invoke= specials_menu_invoke;
|
||||
ot->poll= ED_operator_editsurfcurve;
|
||||
}
|
||||
|
||||
static int add_menu_invoke(bContext *C, wmOperator *op, wmEvent *event)
|
||||
{
|
||||
Object *obedit= CTX_data_edit_object(C);
|
||||
uiMenuItem *head;
|
||||
|
||||
head= uiPupMenuBegin("Add", 0);
|
||||
if(obedit->type == OB_CURVE)
|
||||
uiMenuItemsEnumO(head, "CURVE_OT_add_curve_primitive", "type");
|
||||
else
|
||||
uiMenuItemsEnumO(head, "CURVE_OT_add_surface_primitive", "type");
|
||||
uiPupMenuEnd(C, head);
|
||||
|
||||
return OPERATOR_CANCELLED;
|
||||
}
|
||||
|
||||
void CURVE_OT_add_menu(wmOperatorType *ot)
|
||||
{
|
||||
/* identifiers */
|
||||
ot->name= "Add Menu";
|
||||
ot->idname= "CURVE_OT_add_menu";
|
||||
|
||||
/* api clastbacks */
|
||||
ot->invoke= add_menu_invoke;
|
||||
ot->poll= ED_operator_editsurfcurve;
|
||||
}
|
||||
|
||||
/************************* registration ****************************/
|
||||
|
||||
void ED_operatortypes_curve(void)
|
||||
{
|
||||
WM_operatortype_append(FONT_OT_textedit);
|
||||
|
||||
WM_operatortype_append(CURVE_OT_hide);
|
||||
WM_operatortype_append(CURVE_OT_reveal);
|
||||
|
||||
WM_operatortype_append(CURVE_OT_separate);
|
||||
WM_operatortype_append(CURVE_OT_switch_direction);
|
||||
WM_operatortype_append(CURVE_OT_duplicate);
|
||||
WM_operatortype_append(CURVE_OT_delete);
|
||||
|
||||
WM_operatortype_append(CURVE_OT_set_weight);
|
||||
WM_operatortype_append(CURVE_OT_set_radius);
|
||||
WM_operatortype_append(CURVE_OT_set_spline_type);
|
||||
WM_operatortype_append(CURVE_OT_set_handle_type);
|
||||
WM_operatortype_append(CURVE_OT_set_smooth);
|
||||
WM_operatortype_append(CURVE_OT_clear_tilt);
|
||||
|
||||
WM_operatortype_append(CURVE_OT_smooth);
|
||||
WM_operatortype_append(CURVE_OT_smooth_curve_radius);
|
||||
WM_operatortype_append(CURVE_OT_smooth_radius);
|
||||
|
||||
WM_operatortype_append(CURVE_OT_de_select_first);
|
||||
WM_operatortype_append(CURVE_OT_de_select_last);
|
||||
WM_operatortype_append(CURVE_OT_de_select_all);
|
||||
WM_operatortype_append(CURVE_OT_hide);
|
||||
WM_operatortype_append(CURVE_OT_reveal);
|
||||
WM_operatortype_append(CURVE_OT_select_invert);
|
||||
WM_operatortype_append(CURVE_OT_subdivide);
|
||||
WM_operatortype_append(CURVE_OT_set_spline_type);
|
||||
WM_operatortype_append(CURVE_OT_make_segment);
|
||||
WM_operatortype_append(CURVE_OT_spin);
|
||||
WM_operatortype_append(CURVE_OT_add_vertex);
|
||||
WM_operatortype_append(CURVE_OT_extrude);
|
||||
WM_operatortype_append(CURVE_OT_make_cyclic);
|
||||
WM_operatortype_append(CURVE_OT_select_inverse);
|
||||
WM_operatortype_append(CURVE_OT_select_linked);
|
||||
WM_operatortype_append(CURVE_OT_select_row);
|
||||
WM_operatortype_append(CURVE_OT_select_next);
|
||||
@@ -92,10 +152,20 @@ void ED_operatortypes_curve(void)
|
||||
WM_operatortype_append(CURVE_OT_select_less);
|
||||
WM_operatortype_append(CURVE_OT_select_random);
|
||||
WM_operatortype_append(CURVE_OT_select_every_nth);
|
||||
WM_operatortype_append(CURVE_OT_add_duplicate);
|
||||
WM_operatortype_append(CURVE_OT_delete);
|
||||
WM_operatortype_append(CURVE_OT_set_smooth);
|
||||
WM_operatortype_append(CURVE_OT_clear_tilt);
|
||||
|
||||
WM_operatortype_append(CURVE_OT_switch_direction);
|
||||
WM_operatortype_append(CURVE_OT_subdivide);
|
||||
WM_operatortype_append(CURVE_OT_make_segment);
|
||||
WM_operatortype_append(CURVE_OT_spin);
|
||||
WM_operatortype_append(CURVE_OT_add_vertex);
|
||||
WM_operatortype_append(CURVE_OT_extrude);
|
||||
WM_operatortype_append(CURVE_OT_toggle_cyclic);
|
||||
|
||||
WM_operatortype_append(CURVE_OT_add_menu);
|
||||
WM_operatortype_append(CURVE_OT_specials_menu);
|
||||
|
||||
WM_operatortype_append(CURVE_OT_add_surface_primitive);
|
||||
WM_operatortype_append(CURVE_OT_add_curve_primitive);
|
||||
}
|
||||
|
||||
void ED_keymap_curve(wmWindowManager *wm)
|
||||
@@ -109,5 +179,33 @@ void ED_keymap_curve(wmWindowManager *wm)
|
||||
keymap= WM_keymap_listbase(wm, "Curve", 0, 0);
|
||||
|
||||
WM_keymap_add_item(keymap, "OBJECT_OT_curve_add", AKEY, KM_PRESS, KM_SHIFT, 0);
|
||||
WM_keymap_add_item(keymap, "CURVE_OT_add_vertex", ACTIONMOUSE, KM_PRESS, KM_CTRL, 0);
|
||||
|
||||
WM_keymap_add_item(keymap, "CURVE_OT_de_select_all", AKEY, KM_PRESS, 0, 0);
|
||||
WM_keymap_add_item(keymap, "CURVE_OT_select_row", RKEY, KM_PRESS, KM_SHIFT, 0);
|
||||
WM_keymap_add_item(keymap, "CURVE_OT_select_more", PADPLUSKEY, KM_PRESS, KM_CTRL, 0);
|
||||
WM_keymap_add_item(keymap, "CURVE_OT_select_less", PADMINUS, KM_PRESS, KM_CTRL, 0);
|
||||
WM_keymap_add_item(keymap, "CURVE_OT_select_linked", LKEY, KM_PRESS, 0, 0);
|
||||
RNA_boolean_set(WM_keymap_add_item(keymap, "CURVE_OT_select_linked", LKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "deselect", 1);
|
||||
|
||||
WM_keymap_add_item(keymap, "CURVE_OT_separate", PKEY, KM_PRESS, 0, 0);
|
||||
WM_keymap_add_item(keymap, "CURVE_OT_extrude", EKEY, KM_PRESS, 0, 0);
|
||||
WM_keymap_add_item(keymap, "CURVE_OT_duplicate", DKEY, KM_PRESS, KM_SHIFT, 0);
|
||||
WM_keymap_add_item(keymap, "CURVE_OT_make_segment", FKEY, KM_PRESS, 0, 0);
|
||||
WM_keymap_add_item(keymap, "CURVE_OT_toggle_cyclic", CKEY, KM_PRESS, 0, 0);
|
||||
WM_keymap_add_item(keymap, "CURVE_OT_delete", XKEY, KM_PRESS, 0, 0);
|
||||
WM_keymap_add_item(keymap, "CURVE_OT_delete", DELKEY, KM_PRESS, 0, 0);
|
||||
|
||||
WM_keymap_add_item(keymap, "CURVE_OT_clear_tilt", TKEY, KM_PRESS, KM_ALT, 0);
|
||||
RNA_enum_set(WM_keymap_add_item(keymap, "TFM_OT_transform", TKEY, KM_PRESS, 0, 0)->ptr, "mode", TFM_TILT);
|
||||
RNA_enum_set(WM_keymap_add_item(keymap, "CURVE_OT_set_handle_type", HKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "type", 1);
|
||||
RNA_enum_set(WM_keymap_add_item(keymap, "CURVE_OT_set_handle_type", HKEY, KM_PRESS, 0, 0)->ptr, "type", 3);
|
||||
RNA_enum_set(WM_keymap_add_item(keymap, "CURVE_OT_set_handle_type", VKEY, KM_PRESS, 0, 0)->ptr, "type", 2);
|
||||
|
||||
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);
|
||||
|
||||
WM_keymap_add_item(keymap, "CURVE_OT_specials_menu", WKEY, KM_PRESS, 0, 0);
|
||||
}
|
||||
|
||||
|
||||
@@ -71,6 +71,7 @@
|
||||
#include "WM_types.h"
|
||||
|
||||
#include "ED_anim_api.h"
|
||||
#include "ED_curve.h"
|
||||
#include "ED_keyframes_edit.h"
|
||||
#include "ED_object.h"
|
||||
#include "ED_screen.h"
|
||||
@@ -80,6 +81,8 @@
|
||||
|
||||
#include "UI_interface.h"
|
||||
|
||||
#include "BIF_transform.h"
|
||||
|
||||
#include "RNA_access.h"
|
||||
#include "RNA_define.h"
|
||||
|
||||
@@ -89,14 +92,6 @@
|
||||
/* for curve objects in editmode that can have hidden handles */
|
||||
#define BEZSELECTED_HIDDENHANDLES(bezt) ((G.f & G_HIDDENHANDLES) ? (bezt)->f2 & SELECT : BEZSELECTED(bezt))
|
||||
|
||||
/* XXX */
|
||||
static void BIF_undo_push() {}
|
||||
static int okee() {return 0;}
|
||||
static int pupmenu() {return 0;}
|
||||
static void adduplicate() {}
|
||||
static void error_libdata() {}
|
||||
/* XXX */
|
||||
|
||||
float nurbcircle[8][2]= {
|
||||
{0.0, -1.0}, {-1.0, -1.0}, {-1.0, 0.0}, {-1.0, 1.0},
|
||||
{0.0, 1.0}, { 1.0, 1.0}, { 1.0, 0.0}, { 1.0, -1.0}
|
||||
@@ -116,11 +111,10 @@ void set_actNurb(Object *obedit, Nurb *nu)
|
||||
{
|
||||
Curve *cu= obedit->data;
|
||||
|
||||
if (nu==NULL) {
|
||||
if(nu==NULL)
|
||||
cu->actnu = -1;
|
||||
} else {
|
||||
else
|
||||
cu->actnu = BLI_findindex(cu->editnurb, nu);
|
||||
}
|
||||
}
|
||||
|
||||
Nurb *get_actNurb(Object *obedit)
|
||||
@@ -130,7 +124,6 @@ Nurb *get_actNurb(Object *obedit)
|
||||
return BLI_findlink(cu->editnurb, cu->actnu);
|
||||
}
|
||||
|
||||
|
||||
/* ******************* SELECTION FUNCTIONS ********************* */
|
||||
|
||||
#define HIDDEN 1
|
||||
@@ -357,14 +350,6 @@ void make_editNurb(Object *obedit)
|
||||
set_actNurb(obedit, NULL);
|
||||
}
|
||||
|
||||
void remake_editNurb(Object *obedit)
|
||||
{
|
||||
|
||||
if(okee("Reload original data")==0) return;
|
||||
|
||||
make_editNurb(obedit);
|
||||
}
|
||||
|
||||
void free_editNurb(Object *obedit)
|
||||
{
|
||||
Curve *cu= obedit->data;
|
||||
@@ -376,90 +361,64 @@ void free_editNurb(Object *obedit)
|
||||
}
|
||||
}
|
||||
|
||||
/******************** XXX separate operator ***********************/
|
||||
/******************** separate operator ***********************/
|
||||
|
||||
static int separate_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
Scene *scene= CTX_data_scene(C);
|
||||
Object *obedit= CTX_data_edit_object(C);
|
||||
ListBase *editnurb= curve_get_editcurve(obedit);
|
||||
View3D *v3d= NULL; // XXX
|
||||
Nurb *nu, *nu1;
|
||||
Object *oldob;
|
||||
Base *base, *oldbase;
|
||||
Curve *cu;
|
||||
ListBase editnurbo;
|
||||
Object *oldob, *newob;
|
||||
Base *oldbase, *newbase;
|
||||
Curve *oldcu, *newcu;
|
||||
ListBase *oldedit, *newedit;
|
||||
|
||||
cu= obedit->data;
|
||||
if(cu->key) {
|
||||
BKE_report(op->reports, RPT_ERROR, "Can't separate a curve with vertex keys");
|
||||
oldbase= CTX_data_active_base(C);
|
||||
oldob= oldbase->object;
|
||||
oldcu= oldob->data;
|
||||
oldedit= oldcu->editnurb;
|
||||
|
||||
if(oldcu->key) {
|
||||
BKE_report(op->reports, RPT_ERROR, "Can't separate a curve with vertex keys.");
|
||||
return OPERATOR_CANCELLED;
|
||||
}
|
||||
|
||||
WM_cursor_wait(1);
|
||||
|
||||
/* we are going to trick everything as follows:
|
||||
* 1. duplicate base: this is the new one, remember old pointer
|
||||
* 2. set aside all NOT selected curves/nurbs
|
||||
* 3. load_ebaseNurb(): this will be the new base
|
||||
* 4. freelist and restore old nurbs
|
||||
*/
|
||||
|
||||
/* only edit-base selected */
|
||||
base= FIRSTBASE;
|
||||
while(base) {
|
||||
if(base->lay & v3d->lay) {
|
||||
if(base->object==obedit) base->flag |= 1;
|
||||
else base->flag &= ~1;
|
||||
}
|
||||
base= base->next;
|
||||
}
|
||||
/* 1. duplicate the object and data */
|
||||
newbase= ED_object_add_duplicate(scene, oldbase, 0); /* 0 = fully linked */
|
||||
ED_base_object_select(newbase, BA_DESELECT);
|
||||
newob= newbase->object;
|
||||
|
||||
/* set aside: everything that is not selected */
|
||||
editnurbo.first= editnurbo.last= 0;
|
||||
nu= editnurb->first;
|
||||
while(nu) {
|
||||
newcu= newob->data= copy_curve(oldcu);
|
||||
newcu->editnurb= NULL;
|
||||
oldcu->id.us--; /* because new curve is a copy: reduce user count */
|
||||
|
||||
/* 2. put new object in editmode and clear it */
|
||||
make_editNurb(newob);
|
||||
newedit= newcu->editnurb;
|
||||
freeNurblist(newedit);
|
||||
|
||||
/* 3. move over parts from old object */
|
||||
for(nu= oldedit->first; nu; nu=nu1) {
|
||||
nu1= nu->next;
|
||||
if(isNurbsel(nu)==0) {
|
||||
BLI_remlink(editnurb, nu);
|
||||
BLI_addtail(&editnurbo, nu);
|
||||
|
||||
if(isNurbsel(nu)) {
|
||||
BLI_remlink(oldedit, nu);
|
||||
BLI_addtail(newedit, nu);
|
||||
}
|
||||
nu= nu1;
|
||||
}
|
||||
|
||||
oldob= obedit;
|
||||
oldbase= BASACT;
|
||||
/* 4. put old object out of editmode */
|
||||
load_editNurb(newob);
|
||||
free_editNurb(newob);
|
||||
|
||||
adduplicate(1, 0); /* no transform and zero so do get a linked dupli */
|
||||
|
||||
obedit= BASACT->object; /* basact is set in adduplicate() */
|
||||
|
||||
obedit->data= copy_curve(cu);
|
||||
/* because new curve is a copy: reduce user count */
|
||||
cu->id.us--;
|
||||
|
||||
load_editNurb(obedit);
|
||||
|
||||
BASACT->flag &= ~SELECT;
|
||||
|
||||
if(editnurb->first) freeNurblist(editnurb);
|
||||
|
||||
*editnurb= editnurbo;
|
||||
|
||||
obedit= 0; /* displists behave different in edit mode */
|
||||
DAG_object_flush_update(scene, obedit, OB_RECALC_DATA); /* this is the separated one */
|
||||
DAG_object_flush_update(scene, oldob, OB_RECALC_DATA); /* this is the original one */
|
||||
|
||||
obedit= oldob;
|
||||
BASACT= oldbase;
|
||||
BASACT->flag |= SELECT;
|
||||
|
||||
set_actNurb(obedit, NULL);
|
||||
DAG_object_flush_update(scene, newob, OB_RECALC_DATA); /* this is the separated one */
|
||||
|
||||
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, oldob);
|
||||
|
||||
WM_cursor_wait(0);
|
||||
|
||||
// XXX notifier
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
@@ -471,7 +430,7 @@ void CURVE_OT_separate(wmOperatorType *ot)
|
||||
|
||||
/* api callbacks */
|
||||
ot->exec= separate_exec;
|
||||
ot->poll= ED_operator_editcurve;
|
||||
ot->poll= ED_operator_editsurfcurve;
|
||||
|
||||
/* flags */
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
@@ -1050,7 +1009,7 @@ static int switch_direction_exec(bContext *C, wmOperator *op)
|
||||
switchdirectionNurb(nu);
|
||||
|
||||
DAG_object_flush_update(CTX_data_scene(C), obedit, OB_RECALC_DATA);
|
||||
// XXX notifier
|
||||
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, obedit);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
@@ -1063,7 +1022,7 @@ void CURVE_OT_switch_direction(wmOperatorType *ot)
|
||||
|
||||
/* api callbacks */
|
||||
ot->exec= switch_direction_exec;
|
||||
ot->poll= ED_operator_editcurve; // XXX nurb poll()
|
||||
ot->poll= ED_operator_editsurfcurve;
|
||||
|
||||
/* flags */
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
@@ -1096,8 +1055,8 @@ static int set_weight_exec(bContext *C, wmOperator *op)
|
||||
}
|
||||
}
|
||||
|
||||
// XXX notifier
|
||||
DAG_object_flush_update(CTX_data_scene(C), obedit, OB_RECALC_DATA);
|
||||
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, obedit);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
@@ -1110,7 +1069,7 @@ void CURVE_OT_set_weight(wmOperatorType *ot)
|
||||
|
||||
/* api callbacks */
|
||||
ot->exec= set_weight_exec;
|
||||
ot->poll= ED_operator_editcurve; // XXX nurb poll()
|
||||
ot->poll= ED_operator_editsurfcurve;
|
||||
|
||||
// XXX invoke popup?
|
||||
|
||||
@@ -1148,6 +1107,7 @@ static int set_radius_exec(bContext *C, wmOperator *op)
|
||||
}
|
||||
}
|
||||
|
||||
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, obedit);
|
||||
DAG_object_flush_update(CTX_data_scene(C), obedit, OB_RECALC_DATA);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
@@ -1161,7 +1121,7 @@ void CURVE_OT_set_radius(wmOperatorType *ot)
|
||||
|
||||
/* api callbacks */
|
||||
ot->exec= set_radius_exec;
|
||||
ot->poll= ED_operator_editcurve; // XXX nurb poll()
|
||||
ot->poll= ED_operator_editsurfcurve;
|
||||
|
||||
// XXX invoke popup?
|
||||
|
||||
@@ -1223,8 +1183,8 @@ static int smooth_exec(bContext *C, wmOperator *op)
|
||||
}
|
||||
}
|
||||
|
||||
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, obedit);
|
||||
DAG_object_flush_update(CTX_data_scene(C), obedit, OB_RECALC_DATA);
|
||||
// XXX notifier
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
@@ -1237,7 +1197,7 @@ void CURVE_OT_smooth(wmOperatorType *ot)
|
||||
|
||||
/* api callbacks */
|
||||
ot->exec= smooth_exec;
|
||||
ot->poll= ED_operator_editcurve; // XXX nurb poll()
|
||||
ot->poll= ED_operator_editsurfcurve;
|
||||
|
||||
/* flags */
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
@@ -1246,7 +1206,7 @@ void CURVE_OT_smooth(wmOperatorType *ot)
|
||||
/**************** smooth curve radius operator *************/
|
||||
|
||||
/* TODO, make smoothing distance based */
|
||||
static int smooth_curve_radius_exec(bContext *C, wmOperator *op)
|
||||
static int smooth_radius_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
Object *obedit= CTX_data_edit_object(C);
|
||||
ListBase *editnurb= curve_get_editcurve(obedit);
|
||||
@@ -1388,21 +1348,21 @@ static int smooth_curve_radius_exec(bContext *C, wmOperator *op)
|
||||
}
|
||||
}
|
||||
|
||||
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, obedit);
|
||||
DAG_object_flush_update(CTX_data_scene(C), obedit, OB_RECALC_DATA);
|
||||
// XXX notifier
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
void CURVE_OT_smooth_curve_radius(wmOperatorType *ot)
|
||||
void CURVE_OT_smooth_radius(wmOperatorType *ot)
|
||||
{
|
||||
/* identifiers */
|
||||
ot->name= "Smooth Curve Radius";
|
||||
ot->idname= "CURVE_OT_smooth_curve_radius";
|
||||
ot->idname= "CURVE_OT_smooth_radius";
|
||||
|
||||
/* api clastbacks */
|
||||
ot->exec= smooth_curve_radius_exec;
|
||||
ot->poll= ED_operator_editcurve;
|
||||
ot->exec= smooth_radius_exec;
|
||||
ot->poll= ED_operator_editsurfcurve;
|
||||
|
||||
/* flags */
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
@@ -1643,7 +1603,7 @@ void CURVE_OT_de_select_all(wmOperatorType *ot)
|
||||
|
||||
/* api callbacks */
|
||||
ot->exec= de_select_all_exec;
|
||||
ot->poll= ED_operator_editcurve;
|
||||
ot->poll= ED_operator_editsurfcurve;
|
||||
|
||||
/* flags */
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
@@ -1658,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, "invert");
|
||||
int a, sel, invert= RNA_boolean_get(op->ptr, "deselected");
|
||||
|
||||
for(nu= editnurb->first; nu; nu= nu->next) {
|
||||
if((nu->type & 7)==CU_BEZIER) {
|
||||
@@ -1666,7 +1626,11 @@ static int hide_exec(bContext *C, wmOperator *op)
|
||||
a= nu->pntsu;
|
||||
sel= 0;
|
||||
while(a--) {
|
||||
if(BEZSELECTED_HIDDENHANDLES(bezt)) {
|
||||
if(invert == 0 && BEZSELECTED_HIDDENHANDLES(bezt)) {
|
||||
select_beztriple(bezt, DESELECT, 1, HIDDEN);
|
||||
bezt->hide= 1;
|
||||
}
|
||||
else if(invert && !BEZSELECTED_HIDDENHANDLES(bezt)) {
|
||||
select_beztriple(bezt, DESELECT, 1, HIDDEN);
|
||||
bezt->hide= 1;
|
||||
}
|
||||
@@ -1709,13 +1673,13 @@ void CURVE_OT_hide(wmOperatorType *ot)
|
||||
|
||||
/* api callbacks */
|
||||
ot->exec= hide_exec;
|
||||
ot->poll= ED_operator_editcurve;
|
||||
ot->poll= ED_operator_editsurfcurve;
|
||||
|
||||
/* flags */
|
||||
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, "deselected", 0, "Deselected", "Hide deselected rather than selected.");
|
||||
}
|
||||
|
||||
/********************** reveal operator *********************/
|
||||
@@ -1769,7 +1733,7 @@ void CURVE_OT_reveal(wmOperatorType *ot)
|
||||
|
||||
/* api callbacks */
|
||||
ot->exec= reveal_exec;
|
||||
ot->poll= ED_operator_editcurve;
|
||||
ot->poll= ED_operator_editsurfcurve;
|
||||
|
||||
/* flags */
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
@@ -1777,7 +1741,7 @@ void CURVE_OT_reveal(wmOperatorType *ot)
|
||||
|
||||
/********************** select invert operator *********************/
|
||||
|
||||
static int select_invert_exec(bContext *C, wmOperator *op)
|
||||
static int select_inverse_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
Object *obedit= CTX_data_edit_object(C);
|
||||
ListBase *editnurb= curve_get_editcurve(obedit);
|
||||
@@ -1816,15 +1780,15 @@ static int select_invert_exec(bContext *C, wmOperator *op)
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
void CURVE_OT_select_invert(wmOperatorType *ot)
|
||||
void CURVE_OT_select_inverse(wmOperatorType *ot)
|
||||
{
|
||||
/* identifiers */
|
||||
ot->name= "Select Invert";
|
||||
ot->idname= "CURVE_OT_select_invert";
|
||||
ot->name= "Select Inverse";
|
||||
ot->idname= "CURVE_OT_select_inverse";
|
||||
|
||||
/* api callbacks */
|
||||
ot->exec= select_invert_exec;
|
||||
ot->poll= ED_operator_editcurve;
|
||||
ot->exec= select_inverse_exec;
|
||||
ot->poll= ED_operator_editsurfcurve;
|
||||
|
||||
/* flags */
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
@@ -2207,9 +2171,8 @@ static int subdivide_exec(bContext *C, wmOperator *op)
|
||||
} /* End of 'if((nu->type & 7)==CU_NURBS)' */
|
||||
}
|
||||
|
||||
|
||||
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, obedit);
|
||||
DAG_object_flush_update(CTX_data_scene(C), obedit, OB_RECALC_DATA);
|
||||
// XXX notifier WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
@@ -2222,7 +2185,7 @@ void CURVE_OT_subdivide(wmOperatorType *ot)
|
||||
|
||||
/* api callbacks */
|
||||
ot->exec= subdivide_exec;
|
||||
ot->poll= ED_operator_editcurve;
|
||||
ot->poll= ED_operator_editsurfcurve;
|
||||
|
||||
/* flags */
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
@@ -2232,7 +2195,7 @@ void CURVE_OT_subdivide(wmOperatorType *ot)
|
||||
|
||||
static void findnearestNurbvert__doClosest(void *userData, Nurb *nu, BPoint *bp, BezTriple *bezt, int beztindex, int x, int y)
|
||||
{
|
||||
struct { BPoint *bp; BezTriple *bezt; Nurb *nurb; short dist, hpoint, select, mval[2]; } *data = userData;
|
||||
struct { BPoint *bp; BezTriple *bezt; Nurb *nurb; int dist, hpoint, select, mval[2]; } *data = userData;
|
||||
|
||||
short flag;
|
||||
short temp;
|
||||
@@ -2263,12 +2226,12 @@ static void findnearestNurbvert__doClosest(void *userData, Nurb *nu, BPoint *bp,
|
||||
}
|
||||
}
|
||||
|
||||
static short findnearestNurbvert(ViewContext *vc, short sel, short mval[2], Nurb **nurb, BezTriple **bezt, BPoint **bp)
|
||||
static short findnearestNurbvert(ViewContext *vc, short sel, int mval[2], Nurb **nurb, BezTriple **bezt, BPoint **bp)
|
||||
{
|
||||
/* sel==1: selected gets a disadvantage */
|
||||
/* in nurb and bezt or bp the nearest is written */
|
||||
/* return 0 1 2: handlepunt */
|
||||
struct { BPoint *bp; BezTriple *bezt; Nurb *nurb; short dist, hpoint, select, mval[2]; } data = {0};
|
||||
struct { BPoint *bp; BezTriple *bezt; Nurb *nurb; int dist, hpoint, select, mval[2]; } data = {0};
|
||||
|
||||
data.dist = 100;
|
||||
data.hpoint = 0;
|
||||
@@ -2538,7 +2501,48 @@ void CURVE_OT_set_spline_type(wmOperatorType *ot)
|
||||
RNA_def_enum(ot->srna, "type", type_items, CU_POLY, "Type", "Spline type");
|
||||
}
|
||||
|
||||
/***************** XXX make segment operator **********************/
|
||||
/***************** set handle type operator *******************/
|
||||
|
||||
static int set_handle_type_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
Scene *scene= CTX_data_scene(C);
|
||||
Object *obedit= CTX_data_edit_object(C);
|
||||
ListBase *editnurb= curve_get_editcurve(obedit);
|
||||
|
||||
sethandlesNurb(editnurb, RNA_enum_get(op->ptr, "type"));
|
||||
|
||||
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, obedit);
|
||||
DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
void CURVE_OT_set_handle_type(wmOperatorType *ot)
|
||||
{
|
||||
static EnumPropertyItem type_items[]= {
|
||||
{1, "AUTOMATIC", "Automatic", ""},
|
||||
{2, "VECTOR", "Vector", ""},
|
||||
{3, "TOGGLE_FREE_ALIGN", "Toggle Free/Align", ""},
|
||||
{5, "ALIGN", "Align", ""},
|
||||
{6, "FREE_ALIGN", "Free Align", ""},
|
||||
{0, NULL, NULL, NULL}};
|
||||
|
||||
/* identifiers */
|
||||
ot->name= "Set Handle Type";
|
||||
ot->idname= "CURVE_OT_set_handle_type";
|
||||
|
||||
/* api callbacks */
|
||||
ot->exec= set_handle_type_exec;
|
||||
ot->poll= ED_operator_editcurve;
|
||||
|
||||
/* flags */
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
|
||||
/* properties */
|
||||
RNA_def_enum(ot->srna, "type", type_items, CU_POLY, "Type", "Spline type");
|
||||
}
|
||||
|
||||
/***************** make segment operator **********************/
|
||||
|
||||
/* ******************** SKINNING LOFTING!!! ******************** */
|
||||
|
||||
@@ -2862,10 +2866,8 @@ static int merge_nurb(bContext *C, wmOperator *op)
|
||||
|
||||
set_actNurb(obedit, NULL);
|
||||
|
||||
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, obedit);
|
||||
DAG_object_flush_update(CTX_data_scene(C), obedit, OB_RECALC_DATA);
|
||||
// XXX notifier
|
||||
|
||||
// XXX BIF_undo_push("Merge");
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
@@ -3018,8 +3020,8 @@ static int make_segment_exec(bContext *C, wmOperator *op)
|
||||
|
||||
set_actNurb(obedit, NULL); /* for selected */
|
||||
|
||||
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, obedit);
|
||||
DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
|
||||
// XXX notifier
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
@@ -3037,13 +3039,13 @@ void CURVE_OT_make_segment(wmOperatorType *ot)
|
||||
|
||||
/* api callbacks */
|
||||
ot->exec= make_segment_exec;
|
||||
ot->poll= ED_operator_editcurve; // XXX nurb poll()
|
||||
ot->poll= ED_operator_editsurfcurve;
|
||||
|
||||
/* flags */
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
}
|
||||
|
||||
/***************** XXX pick select operator **********************/
|
||||
/***************** pick select from 3d view **********************/
|
||||
|
||||
void mouse_nurb(bContext *C, short mval[2], int extend)
|
||||
{
|
||||
@@ -3054,11 +3056,14 @@ void mouse_nurb(bContext *C, short mval[2], int extend)
|
||||
Nurb *nu;
|
||||
BezTriple *bezt=0;
|
||||
BPoint *bp=0;
|
||||
int location[2];
|
||||
short hand;
|
||||
|
||||
view3d_set_viewcontext(C, &vc);
|
||||
|
||||
hand= findnearestNurbvert(&vc, 1, mval, &nu, &bezt, &bp);
|
||||
location[0]= mval[0];
|
||||
location[1]= mval[1];
|
||||
hand= findnearestNurbvert(&vc, 1, location, &nu, &bezt, &bp);
|
||||
|
||||
if(bezt || bp) {
|
||||
if(extend==0) {
|
||||
@@ -3102,33 +3107,28 @@ void mouse_nurb(bContext *C, short mval[2], int extend)
|
||||
|
||||
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
|
||||
|
||||
if(nu!=get_actNurb(obedit)) {
|
||||
if(nu!=get_actNurb(obedit))
|
||||
set_actNurb(obedit, nu);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/***************** XXX spin operator **********************/
|
||||
/******************** spin operator ***********************/
|
||||
|
||||
/* from what I can gather, the mode==0 magic number spins and bridges the nurbs based on the
|
||||
* orientation of the global 3d view (yuck yuck!) mode==1 does the same, but doesn't bridge up
|
||||
* up the new geometry, mode==2 now does the same as 0, but aligned to world axes, not the view.
|
||||
*/
|
||||
static int spin_nurb(Scene *scene, Object *obedit, float *dvec, short mode)
|
||||
static int spin_nurb(bContext *C, Scene *scene, Object *obedit, float *dvec, short mode)
|
||||
{
|
||||
ListBase *editnurb= curve_get_editcurve(obedit);
|
||||
RegionView3D *rv3d= NULL; // XXX
|
||||
View3D *v3d= NULL; // XXX
|
||||
View3D *v3d= CTX_wm_view3d(C);
|
||||
RegionView3D *rv3d= CTX_wm_region_view3d(C);
|
||||
Nurb *nu;
|
||||
float *curs, si,phi,n[3],q[4],cmat[3][3],tmat[3][3],imat[3][3];
|
||||
float cent[3],bmat[3][3], rotmat[3][3], scalemat1[3][3], scalemat2[3][3];
|
||||
float persmat[3][3], persinv[3][3];
|
||||
short a,ok, changed= 0;
|
||||
|
||||
if(obedit->type!=OB_SURF)
|
||||
return changed; // XXX poll
|
||||
|
||||
if (mode != 2) Mat3CpyMat4(persmat, rv3d->viewmat);
|
||||
if(mode != 2 && rv3d) Mat3CpyMat4(persmat, rv3d->viewmat);
|
||||
else Mat3One(persmat);
|
||||
Mat3Inv(persinv, persmat);
|
||||
|
||||
@@ -3136,12 +3136,17 @@ static int spin_nurb(Scene *scene, Object *obedit, float *dvec, short mode)
|
||||
Mat3CpyMat4(bmat, obedit->obmat);
|
||||
Mat3Inv(imat, bmat);
|
||||
|
||||
curs= give_cursor(scene, v3d);
|
||||
VECCOPY(cent, curs);
|
||||
if(v3d) {
|
||||
curs= give_cursor(scene, v3d);
|
||||
VECCOPY(cent, curs);
|
||||
}
|
||||
else
|
||||
cent[0]= cent[1]= cent[2]= 0.0f;
|
||||
|
||||
VecSubf(cent, cent, obedit->obmat[3]);
|
||||
Mat3MulVecfl(imat,cent);
|
||||
|
||||
if(dvec || mode==2) {
|
||||
if(dvec || mode==2 || !rv3d) {
|
||||
n[0]=n[1]= 0.0;
|
||||
n[2]= 1.0;
|
||||
} else {
|
||||
@@ -3226,13 +3231,13 @@ static int spin_exec(bContext *C, wmOperator *op)
|
||||
Scene *scene= CTX_data_scene(C);
|
||||
Object *obedit= CTX_data_edit_object(C);
|
||||
|
||||
if(!spin_nurb(scene, obedit, 0, 0)) {
|
||||
if(!spin_nurb(C, scene, obedit, 0, 0)) {
|
||||
BKE_report(op->reports, RPT_ERROR, "Can't spin");
|
||||
return OPERATOR_CANCELLED;
|
||||
}
|
||||
|
||||
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, obedit);
|
||||
DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
|
||||
// XXX notifier
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
@@ -3245,26 +3250,25 @@ void CURVE_OT_spin(wmOperatorType *ot)
|
||||
|
||||
/* api callbacks */
|
||||
ot->exec= spin_exec;
|
||||
ot->poll= ED_operator_editcurve; // XXX nurb poll()
|
||||
ot->poll= ED_operator_editsurf;
|
||||
|
||||
/* flags */
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
}
|
||||
|
||||
/***************** XXX add vertex operator **********************/
|
||||
/***************** add vertex operator **********************/
|
||||
|
||||
static int addvert_Nurb(Scene *scene, Object *obedit, short mode)
|
||||
static int addvert_Nurb(bContext *C, short mode)
|
||||
{
|
||||
Scene *scene= CTX_data_scene(C);
|
||||
Object *obedit= CTX_data_edit_object(C);
|
||||
ListBase *editnurb= curve_get_editcurve(obedit);
|
||||
View3D *v3d= NULL; // XXX
|
||||
View3D *v3d= CTX_wm_view3d(C);
|
||||
Nurb *nu;
|
||||
BezTriple *bezt, *newbezt = NULL;
|
||||
BPoint *bp, *newbp = NULL;
|
||||
float *curs, mat[3][3],imat[3][3], temp[3];
|
||||
|
||||
if(obedit==0 || v3d == 0) return OPERATOR_CANCELLED;
|
||||
if( (v3d->lay & obedit->lay)==0 ) return OPERATOR_CANCELLED;
|
||||
|
||||
Mat3CpyMat4(mat, obedit->obmat);
|
||||
Mat3Inv(imat,mat);
|
||||
|
||||
@@ -3311,9 +3315,16 @@ static int addvert_Nurb(Scene *scene, Object *obedit, short mode)
|
||||
VECCOPY(newbezt->vec[2], bezt->vec[2]);
|
||||
}
|
||||
else {
|
||||
curs= give_cursor(scene, v3d);
|
||||
|
||||
VECCOPY(newbezt->vec[1], curs);
|
||||
if(v3d) {
|
||||
curs= give_cursor(scene, v3d);
|
||||
VECCOPY(newbezt->vec[1], curs);
|
||||
}
|
||||
else {
|
||||
newbezt->vec[1][0]= 0.0f;
|
||||
newbezt->vec[1][1]= 0.0f;
|
||||
newbezt->vec[1][2]= 0.0f;
|
||||
}
|
||||
|
||||
VecSubf(newbezt->vec[1],newbezt->vec[1], obedit->obmat[3]);
|
||||
Mat3MulVecfl(imat,newbezt->vec[1]);
|
||||
VecSubf(temp, newbezt->vec[1],temp);
|
||||
@@ -3359,9 +3370,16 @@ static int addvert_Nurb(Scene *scene, Object *obedit, short mode)
|
||||
VECCOPY(newbp->vec, bp->vec);
|
||||
}
|
||||
else {
|
||||
curs= give_cursor(scene, v3d);
|
||||
if(v3d) {
|
||||
curs= give_cursor(scene, v3d);
|
||||
VECCOPY(newbp->vec, curs);
|
||||
}
|
||||
else {
|
||||
newbp->vec[0]= 0.0f;
|
||||
newbp->vec[1]= 0.0f;
|
||||
newbp->vec[1]= 0.0f;
|
||||
}
|
||||
|
||||
VECCOPY(newbp->vec, curs);
|
||||
VecSubf(newbp->vec, newbp->vec, obedit->obmat[3]);
|
||||
Mat3MulVecfl(imat,newbp->vec);
|
||||
newbp->vec[3]= 1.0;
|
||||
@@ -3369,35 +3387,26 @@ static int addvert_Nurb(Scene *scene, Object *obedit, short mode)
|
||||
}
|
||||
}
|
||||
|
||||
// XXX retopo_do_all();
|
||||
// XXX retopo_do_all();
|
||||
|
||||
test2DNurb(nu);
|
||||
|
||||
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, obedit);
|
||||
DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
|
||||
|
||||
if(mode=='e') {
|
||||
// XXX BIF_TransformSetUndo("Extrude");
|
||||
// initTransform(TFM_TRANSLATION, CTX_NO_PET);
|
||||
// Transform();
|
||||
}
|
||||
// else while(get_mbut()&R_MOUSE) BIF_wait_for_statechange();
|
||||
|
||||
if(mode!='e') {
|
||||
/* dependencies with other objects, should become event */
|
||||
BIF_undo_push("Add vertex");
|
||||
|
||||
}
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
static int add_vertex_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
Scene *scene= CTX_data_scene(C);
|
||||
Object *obedit= CTX_data_edit_object(C);
|
||||
return addvert_Nurb(C, 0);
|
||||
}
|
||||
|
||||
// XXX
|
||||
|
||||
return addvert_Nurb(scene, obedit, 0);
|
||||
static int add_vertex_invoke(bContext *C, wmOperator *op, wmEvent *event)
|
||||
{
|
||||
// XXX doesn't work correct, old code was in mouse_cursor
|
||||
// temporarly setting cursor, adding vertex and restoring cursor
|
||||
return add_vertex_exec(C, 0);
|
||||
}
|
||||
|
||||
void CURVE_OT_add_vertex(wmOperatorType *ot)
|
||||
@@ -3408,13 +3417,14 @@ void CURVE_OT_add_vertex(wmOperatorType *ot)
|
||||
|
||||
/* api callbacks */
|
||||
ot->exec= add_vertex_exec;
|
||||
ot->poll= ED_operator_editcurve; // XXX nurb poll()
|
||||
ot->invoke= add_vertex_invoke;
|
||||
ot->poll= ED_operator_editcurve;
|
||||
|
||||
/* flags */
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
}
|
||||
|
||||
/***************** XXX extrude operator **********************/
|
||||
/***************** extrude operator **********************/
|
||||
|
||||
static int extrude_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
@@ -3422,32 +3432,37 @@ static int extrude_exec(bContext *C, wmOperator *op)
|
||||
Object *obedit= CTX_data_edit_object(C);
|
||||
ListBase *editnurb= curve_get_editcurve(obedit);
|
||||
Nurb *nu;
|
||||
int ok= 0;
|
||||
|
||||
if(obedit->type!=OB_SURF)
|
||||
return OPERATOR_CANCELLED;
|
||||
|
||||
/* first test: curve? */
|
||||
for(nu= editnurb->first; nu; nu= nu->next) {
|
||||
if(nu->pntsv==1 && isNurbsel_count(nu)==1 ) break;
|
||||
}
|
||||
if(nu) {
|
||||
addvert_Nurb(scene, obedit, 'e');
|
||||
} else {
|
||||
ok= extrudeflagNurb(editnurb, 1); /* '1'= flag */
|
||||
|
||||
if(ok) {
|
||||
/* first test: curve? */
|
||||
for(nu= editnurb->first; nu; nu= nu->next)
|
||||
if(nu->pntsv==1 && isNurbsel_count(nu)==1)
|
||||
break;
|
||||
|
||||
if(obedit->type==OB_CURVE || nu) {
|
||||
addvert_Nurb(C, 'e');
|
||||
}
|
||||
else {
|
||||
if(extrudeflagNurb(editnurb, 1)) { /* '1'= flag */
|
||||
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, obedit);
|
||||
DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
|
||||
// XXX notifier
|
||||
// XXX BIF_TransformSetUndo("Extrude");
|
||||
// initTransform(TFM_TRANSLATION, CTX_NO_PET);
|
||||
// Transform();
|
||||
}
|
||||
}
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
static int extrude_invoke(bContext *C, wmOperator *op, wmEvent *event)
|
||||
{
|
||||
if(extrude_exec(C, op) == OPERATOR_FINISHED) {
|
||||
RNA_int_set(op->ptr, "mode", TFM_TRANSLATION);
|
||||
WM_operator_name_call(C, "TFM_OT_transform", WM_OP_INVOKE_REGION_WIN, op->ptr);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
return OPERATOR_CANCELLED;
|
||||
}
|
||||
|
||||
void CURVE_OT_extrude(wmOperatorType *ot)
|
||||
{
|
||||
/* identifiers */
|
||||
@@ -3456,15 +3471,19 @@ void CURVE_OT_extrude(wmOperatorType *ot)
|
||||
|
||||
/* api callbacks */
|
||||
ot->exec= extrude_exec;
|
||||
ot->poll= ED_operator_editcurve; // XXX nurb poll()
|
||||
ot->invoke= extrude_invoke;
|
||||
ot->poll= ED_operator_editsurfcurve;
|
||||
|
||||
/* flags */
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
|
||||
/* to give to transform */
|
||||
RNA_def_int(ot->srna, "mode", TFM_TRANSLATION, 0, INT_MAX, "Mode", "", 0, INT_MAX);
|
||||
}
|
||||
|
||||
/***************** XXX make cyclic operator **********************/
|
||||
/***************** make cyclic operator **********************/
|
||||
|
||||
static int make_cyclic_exec(bContext *C, wmOperator *op)
|
||||
static int toggle_cyclic_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
Object *obedit= CTX_data_edit_object(C);
|
||||
ListBase *editnurb= curve_get_editcurve(obedit);
|
||||
@@ -3472,7 +3491,7 @@ static int make_cyclic_exec(bContext *C, wmOperator *op)
|
||||
BezTriple *bezt;
|
||||
BPoint *bp;
|
||||
float *fp;
|
||||
int a, b, cyclmode=0;
|
||||
int a, b, direction= RNA_enum_get(op->ptr, "direction");
|
||||
|
||||
for(nu= editnurb->first; nu; nu= nu->next) {
|
||||
if( nu->pntsu>1 || nu->pntsv>1) {
|
||||
@@ -3527,16 +3546,12 @@ static int make_cyclic_exec(bContext *C, wmOperator *op)
|
||||
}
|
||||
}
|
||||
else if(nu->type==CU_NURBS) {
|
||||
if(cyclmode==0) {
|
||||
cyclmode= pupmenu("Toggle %t|cyclic U%x1|cyclic V%x2"); // XXX
|
||||
if(cyclmode < 1) return OPERATOR_CANCELLED;
|
||||
}
|
||||
a= nu->pntsu*nu->pntsv;
|
||||
bp= nu->bp;
|
||||
while(a--) {
|
||||
|
||||
if( bp->f1 & SELECT) {
|
||||
if(cyclmode==1 && nu->pntsu>1) {
|
||||
if(direction==0 && nu->pntsu>1) {
|
||||
if(nu->flagu & CU_CYCLIC) nu->flagu &= ~CU_CYCLIC;
|
||||
else {
|
||||
nu->flagu |= CU_CYCLIC;
|
||||
@@ -3553,7 +3568,7 @@ static int make_cyclic_exec(bContext *C, wmOperator *op)
|
||||
}
|
||||
}
|
||||
}
|
||||
if(cyclmode==2 && nu->pntsv>1) {
|
||||
if(direction==1 && nu->pntsv>1) {
|
||||
if(nu->flagv & 1) nu->flagv--;
|
||||
else {
|
||||
nu->flagv++;
|
||||
@@ -3579,44 +3594,82 @@ static int make_cyclic_exec(bContext *C, wmOperator *op)
|
||||
}
|
||||
}
|
||||
|
||||
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, obedit);
|
||||
DAG_object_flush_update(CTX_data_scene(C), obedit, OB_RECALC_DATA);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
void CURVE_OT_make_cyclic(wmOperatorType *ot)
|
||||
static int toggle_cyclic_invoke(bContext *C, wmOperator *op, wmEvent *event)
|
||||
{
|
||||
Object *obedit= CTX_data_edit_object(C);
|
||||
ListBase *editnurb= curve_get_editcurve(obedit);
|
||||
uiMenuItem *head;
|
||||
Nurb *nu;
|
||||
|
||||
for(nu= editnurb->first; nu; nu= nu->next) {
|
||||
if(nu->pntsu>1 || nu->pntsv>1) {
|
||||
if(nu->type==CU_NURBS) {
|
||||
head= uiPupMenuBegin("Direction", 0);
|
||||
uiMenuItemsEnumO(head, op->type->idname, "direction");
|
||||
uiPupMenuEnd(C, head);
|
||||
return OPERATOR_CANCELLED;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return toggle_cyclic_exec(C, op);
|
||||
}
|
||||
|
||||
void CURVE_OT_toggle_cyclic(wmOperatorType *ot)
|
||||
{
|
||||
static EnumPropertyItem direction_items[]= {
|
||||
{0, "CYCLIC_U", "Cyclic U", ""},
|
||||
{1, "CYCLIC_V", "Cyclic V", ""},
|
||||
{0, NULL, NULL, NULL}};
|
||||
|
||||
/* identifiers */
|
||||
ot->name= "Make Cyclic";
|
||||
ot->idname= "CURVE_OT_make_cyclic";
|
||||
ot->name= "Toggle Cyclic";
|
||||
ot->idname= "CURVE_OT_toggle_cyclic";
|
||||
|
||||
/* api callbacks */
|
||||
ot->exec= make_cyclic_exec;
|
||||
ot->poll= ED_operator_editcurve; // XXX nurb poll()
|
||||
ot->exec= toggle_cyclic_exec;
|
||||
ot->invoke= toggle_cyclic_invoke;
|
||||
ot->poll= ED_operator_editsurfcurve;
|
||||
|
||||
/* flags */
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
|
||||
/* properties */
|
||||
RNA_def_enum(ot->srna, "direction", direction_items, 0, "Direction", "Direction to make surface cyclic in.");
|
||||
}
|
||||
|
||||
/***************** XXX select linked operator **********************/
|
||||
/***************** select linked operator ******************/
|
||||
|
||||
static int select_linked_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
Object *obedit= CTX_data_edit_object(C);
|
||||
RegionView3D *rv3d= CTX_wm_region_view3d(C);
|
||||
ViewContext vc;
|
||||
Nurb *nu;
|
||||
BezTriple *bezt;
|
||||
BPoint *bp;
|
||||
int a;
|
||||
short mval[2], shift= 0; // XXX
|
||||
int a, location[2], deselect;
|
||||
|
||||
if(!rv3d)
|
||||
return OPERATOR_CANCELLED;
|
||||
|
||||
findnearestNurbvert(&vc, 1, mval, &nu, &bezt, &bp);
|
||||
deselect= RNA_boolean_get(op->ptr, "deselect");
|
||||
RNA_int_get_array(op->ptr, "location", location);
|
||||
|
||||
view3d_set_viewcontext(C, &vc);
|
||||
findnearestNurbvert(&vc, 1, location, &nu, &bezt, &bp);
|
||||
|
||||
if(bezt) {
|
||||
a= nu->pntsu;
|
||||
bezt= nu->bezt;
|
||||
while(a--) {
|
||||
if(shift) select_beztriple(bezt, DESELECT, 1, VISIBLE);
|
||||
if(deselect) select_beztriple(bezt, DESELECT, 1, VISIBLE);
|
||||
else select_beztriple(bezt, SELECT, 1, VISIBLE);
|
||||
bezt++;
|
||||
}
|
||||
@@ -3625,7 +3678,7 @@ static int select_linked_exec(bContext *C, wmOperator *op)
|
||||
a= nu->pntsu*nu->pntsv;
|
||||
bp= nu->bp;
|
||||
while(a--) {
|
||||
if(shift) select_bpoint(bp, DESELECT, 1, VISIBLE);
|
||||
if(deselect) select_bpoint(bp, DESELECT, 1, VISIBLE);
|
||||
else select_bpoint(bp, SELECT, 1, VISIBLE);
|
||||
bp++;
|
||||
}
|
||||
@@ -3636,6 +3689,18 @@ static int select_linked_exec(bContext *C, wmOperator *op)
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
static int select_linked_invoke(bContext *C, wmOperator *op, wmEvent *event)
|
||||
{
|
||||
ARegion *ar= CTX_wm_region(C);
|
||||
int location[2];
|
||||
|
||||
location[0]= event->x - ar->winrct.xmin;
|
||||
location[1]= event->y - ar->winrct.ymin;
|
||||
RNA_int_set_array(op->ptr, "location", location);
|
||||
|
||||
return select_linked_exec(C, op);
|
||||
}
|
||||
|
||||
void CURVE_OT_select_linked(wmOperatorType *ot)
|
||||
{
|
||||
/* identifiers */
|
||||
@@ -3644,10 +3709,15 @@ void CURVE_OT_select_linked(wmOperatorType *ot)
|
||||
|
||||
/* api callbacks */
|
||||
ot->exec= select_linked_exec;
|
||||
ot->poll= ED_operator_editcurve;
|
||||
ot->invoke= select_linked_invoke;
|
||||
ot->poll= ED_operator_editsurfcurve;
|
||||
|
||||
/* flags */
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
|
||||
/* properties */
|
||||
RNA_def_boolean(ot->srna, "deselect", 0, "Deselect", "Deselect linked control points rather than selecting them.");
|
||||
RNA_def_int_vector(ot->srna, "location", 2, NULL, 0, INT_MAX, "Location", "", 0, 16384);
|
||||
}
|
||||
|
||||
/***************** select row operator **********************/
|
||||
@@ -3665,10 +3735,6 @@ static int select_row_exec(bContext *C, wmOperator *op)
|
||||
|
||||
if(editnurb->first==0)
|
||||
return OPERATOR_CANCELLED;
|
||||
|
||||
if(obedit->type!=OB_SURF)
|
||||
return OPERATOR_CANCELLED; // XXX poll()
|
||||
|
||||
if(cu->lastselbp==NULL)
|
||||
return OPERATOR_CANCELLED;
|
||||
|
||||
@@ -3723,7 +3789,7 @@ void CURVE_OT_select_row(wmOperatorType *ot)
|
||||
|
||||
/* api callbacks */
|
||||
ot->exec= select_row_exec;
|
||||
ot->poll= ED_operator_editcurve;
|
||||
ot->poll= ED_operator_editsurf;
|
||||
|
||||
/* flags */
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
@@ -3864,7 +3930,7 @@ void CURVE_OT_select_more(wmOperatorType *ot)
|
||||
|
||||
/* api callbacks */
|
||||
ot->exec= select_more_exec;
|
||||
ot->poll= ED_operator_editcurve;
|
||||
ot->poll= ED_operator_editsurfcurve;
|
||||
|
||||
/* flags */
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
@@ -4025,7 +4091,7 @@ void CURVE_OT_select_less(wmOperatorType *ot)
|
||||
|
||||
/* api callbacks */
|
||||
ot->exec= select_less_exec;
|
||||
ot->poll= ED_operator_editcurve;
|
||||
ot->poll= ED_operator_editsurfcurve;
|
||||
|
||||
/* flags */
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
@@ -4121,7 +4187,7 @@ void CURVE_OT_select_random(wmOperatorType *ot)
|
||||
|
||||
/* api callbacks */
|
||||
ot->exec= select_random_exec;
|
||||
ot->poll= ED_operator_editcurve;
|
||||
ot->poll= ED_operator_editsurfcurve;
|
||||
|
||||
// XXX invoke popup?
|
||||
|
||||
@@ -4156,7 +4222,7 @@ void CURVE_OT_select_every_nth(wmOperatorType *ot)
|
||||
|
||||
/* api callbacks */
|
||||
ot->exec= select_every_nth_exec;
|
||||
ot->poll= ED_operator_editcurve;
|
||||
ot->poll= ED_operator_editsurfcurve;
|
||||
|
||||
// XXX invoke popup?
|
||||
|
||||
@@ -4169,31 +4235,41 @@ void CURVE_OT_select_every_nth(wmOperatorType *ot)
|
||||
|
||||
/********************** add duplicate operator *********************/
|
||||
|
||||
static int add_duplicate_exec(bContext *C, wmOperator *op)
|
||||
static int duplicate_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
Object *obedit= CTX_data_edit_object(C);
|
||||
|
||||
adduplicateflagNurb(obedit, 1);
|
||||
|
||||
// XXX BIF_TransformSetUndo("Add Duplicate");
|
||||
// initTransform(TFM_TRANSLATION, CTX_NO_PET);
|
||||
// Transform();
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
void CURVE_OT_add_duplicate(wmOperatorType *ot)
|
||||
static int duplicate_invoke(bContext *C, wmOperator *op, wmEvent *event)
|
||||
{
|
||||
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);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
void CURVE_OT_duplicate(wmOperatorType *ot)
|
||||
{
|
||||
/* identifiers */
|
||||
ot->name= "Add Duplicate";
|
||||
ot->idname= "CURVE_OT_add_duplicate";
|
||||
ot->name= "Duplicate";
|
||||
ot->idname= "CURVE_OT_duplicate";
|
||||
|
||||
/* api callbacks */
|
||||
ot->exec= add_duplicate_exec;
|
||||
ot->poll= ED_operator_editcurve;
|
||||
ot->exec= duplicate_exec;
|
||||
ot->invoke= duplicate_invoke;
|
||||
ot->poll= ED_operator_editsurfcurve;
|
||||
|
||||
/* flags */
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
|
||||
/* to give to transform */
|
||||
RNA_def_int(ot->srna, "mode", TFM_TRANSLATION, 0, INT_MAX, "Mode", "", 0, INT_MAX);
|
||||
}
|
||||
|
||||
/********************** delete operator *********************/
|
||||
@@ -4212,7 +4288,7 @@ static int delete_exec(bContext *C, wmOperator *op)
|
||||
if(type==0) deleteflagNurb(C, op, 1);
|
||||
else freeNurblist(editnurb);
|
||||
|
||||
// XXX notifier
|
||||
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, obedit);
|
||||
DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
@@ -4342,11 +4418,12 @@ static int delete_exec(bContext *C, wmOperator *op)
|
||||
bezt2= bezt+(nu->pntsu-1);
|
||||
if( (bezt2->f1 & SELECT) || (bezt2->f2 & SELECT) || (bezt2->f3 & SELECT) ) {
|
||||
nu->flagu &= ~CU_CYCLIC;
|
||||
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, obedit);
|
||||
DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
|
||||
BIF_undo_push("Delete");
|
||||
}
|
||||
}
|
||||
return OPERATOR_FINISHED; //XXX
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
cut= a;
|
||||
nu1= nu;
|
||||
@@ -4367,11 +4444,12 @@ static int delete_exec(bContext *C, wmOperator *op)
|
||||
bp2= bp+(nu->pntsu-1);
|
||||
if( bp2->f1 & SELECT ) {
|
||||
nu->flagu &= ~CU_CYCLIC;
|
||||
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, obedit);
|
||||
DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
|
||||
BIF_undo_push("Delete");
|
||||
}
|
||||
}
|
||||
return OPERATOR_FINISHED; // XXX
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
cut= a;
|
||||
nu1= nu;
|
||||
@@ -4464,8 +4542,8 @@ static int delete_exec(bContext *C, wmOperator *op)
|
||||
else if(type==2)
|
||||
freeNurblist(editnurb);
|
||||
|
||||
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, obedit);
|
||||
DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
|
||||
// XXX notifier
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
@@ -4477,13 +4555,13 @@ static int delete_invoke(bContext *C, wmOperator *op, wmEvent *event)
|
||||
|
||||
if(obedit->type==OB_SURF) {
|
||||
head= uiPupMenuBegin("Delete", 0);
|
||||
uiMenuItemEnumO(head, "", 0, op->idname, "type", 0);
|
||||
uiMenuItemEnumO(head, "", 0, op->idname, "type", 2);
|
||||
uiMenuItemEnumO(head, "", 0, op->type->idname, "type", 0);
|
||||
uiMenuItemEnumO(head, "", 0, op->type->idname, "type", 2);
|
||||
uiPupMenuEnd(C, head);
|
||||
}
|
||||
else {
|
||||
head= uiPupMenuBegin("Delete", 0);
|
||||
uiMenuItemsEnumO(head, op->idname, "type");
|
||||
uiMenuItemsEnumO(head, op->type->idname, "type");
|
||||
uiPupMenuEnd(C, head);
|
||||
}
|
||||
|
||||
@@ -4505,7 +4583,7 @@ void CURVE_OT_delete(wmOperatorType *ot)
|
||||
/* api callbacks */
|
||||
ot->exec= delete_exec;
|
||||
ot->invoke= delete_invoke;
|
||||
ot->poll= ED_operator_editcurve;
|
||||
ot->poll= ED_operator_editsurfcurve;
|
||||
|
||||
/* flags */
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
@@ -4521,23 +4599,20 @@ static int set_smooth_exec(bContext *C, wmOperator *op)
|
||||
Object *obedit= CTX_data_edit_object(C);
|
||||
ListBase *editnurb= curve_get_editcurve(obedit);
|
||||
Nurb *nu;
|
||||
int disable= RNA_boolean_get(op->ptr, "disable");
|
||||
int clear= RNA_boolean_get(op->ptr, "clear");
|
||||
|
||||
if(obedit->type != OB_CURVE)
|
||||
return OPERATOR_CANCELLED;
|
||||
|
||||
for(nu= editnurb->first; nu; nu= nu->next) {
|
||||
if(isNurbsel(nu)) {
|
||||
if(!disable) nu->flag |= CU_SMOOTH;
|
||||
if(!clear) nu->flag |= CU_SMOOTH;
|
||||
else nu->flag &= ~CU_SMOOTH;
|
||||
}
|
||||
}
|
||||
|
||||
// XXX notifier
|
||||
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, obedit);
|
||||
DAG_object_flush_update(CTX_data_scene(C), obedit, OB_RECALC_DATA);
|
||||
|
||||
// XXX if(event==1) BIF_undo_push("Set Smooth");
|
||||
// XXX else if(event==0) BIF_undo_push("Set Solid");
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
@@ -4550,22 +4625,23 @@ void CURVE_OT_set_smooth(wmOperatorType *ot)
|
||||
|
||||
/* api callbacks */
|
||||
ot->exec= set_smooth_exec;
|
||||
ot->poll= ED_operator_editcurve;
|
||||
ot->poll= ED_operator_editsurfcurve;
|
||||
|
||||
/* flags */
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
|
||||
/* properties */
|
||||
RNA_def_boolean(ot->srna, "disable", 0, "Disable", "Disable smooth shading for selection instead of enabling it.");
|
||||
RNA_def_boolean(ot->srna, "clear", 0, "Clear", "Clear smooth shading to solid for selection instead of enabling it.");
|
||||
}
|
||||
|
||||
/********************* XXX join operator ***********************/
|
||||
/************** join operator, to be used externally? ****************/
|
||||
|
||||
int join_curve(Scene *scene, int type)
|
||||
int join_curve(bContext *C, wmOperator *op, int type)
|
||||
{
|
||||
View3D *v3d= NULL; // XXX
|
||||
View3D *v3d= CTX_wm_view3d(C);
|
||||
Scene *scene= CTX_data_scene(C);
|
||||
Object *ob= CTX_data_edit_object(C);
|
||||
Base *base, *nextb;
|
||||
Object *ob;
|
||||
Curve *cu;
|
||||
Nurb *nu, *newnu;
|
||||
BezTriple *bezt;
|
||||
@@ -4573,24 +4649,26 @@ int join_curve(Scene *scene, int type)
|
||||
ListBase tempbase;
|
||||
float imat[4][4], cmat[4][4];
|
||||
int a;
|
||||
|
||||
// XXX not integrated yet, to be called by object/ module? */
|
||||
|
||||
ob= OBACT;
|
||||
if (object_data_is_libdata(ob)) {
|
||||
error_libdata();
|
||||
return 0;
|
||||
if(object_data_is_libdata(ob)) {
|
||||
BKE_report(op->reports, RPT_ERROR, "Can't edit external libdata");
|
||||
return OPERATOR_CANCELLED;
|
||||
}
|
||||
|
||||
if(!v3d || ob->type!=type) return 0;
|
||||
if(ob->lay & v3d->lay); else return 0;
|
||||
if(ob->type!=type)
|
||||
return 0;
|
||||
|
||||
tempbase.first= tempbase.last= 0;
|
||||
|
||||
/* trasnform all selected curves inverse in obact */
|
||||
Mat4Invert(imat, ob->obmat);
|
||||
|
||||
base= FIRSTBASE;
|
||||
while(base) {
|
||||
for(base= FIRSTBASE; base; base=nextb) {
|
||||
nextb= base->next;
|
||||
if (TESTBASE(v3d, base)) {
|
||||
|
||||
if(TESTBASE(v3d, base)) {
|
||||
if(base->object->type==type) {
|
||||
if(base->object != ob) {
|
||||
|
||||
@@ -4629,7 +4707,6 @@ int join_curve(Scene *scene, int type)
|
||||
}
|
||||
}
|
||||
}
|
||||
base= nextb;
|
||||
}
|
||||
|
||||
cu= ob->data;
|
||||
@@ -4637,15 +4714,15 @@ int join_curve(Scene *scene, int type)
|
||||
|
||||
DAG_scene_sort(scene); // because we removed object(s), call before editmode!
|
||||
|
||||
// XXX Context
|
||||
ED_object_enter_editmode(NULL, EM_WAITCURSOR);
|
||||
ED_object_exit_editmode(NULL, EM_FREEDATA|EM_WAITCURSOR);
|
||||
ED_object_enter_editmode(C, EM_WAITCURSOR);
|
||||
ED_object_exit_editmode(C, EM_FREEDATA|EM_WAITCURSOR);
|
||||
|
||||
BIF_undo_push("Join");
|
||||
return 1;
|
||||
// BIF_undo_push("Join");
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
/***************** XXX add primitive operator ********************/
|
||||
/************ add primitive, internal + external ****************/
|
||||
|
||||
Nurb *addNurbprim(bContext *C, int type, int newname)
|
||||
{
|
||||
@@ -4672,16 +4749,23 @@ Nurb *addNurbprim(bContext *C, int type, int newname)
|
||||
if(obedit) {
|
||||
|
||||
Mat3CpyMat4(mat, obedit->obmat);
|
||||
curs= give_cursor(scene, v3d);
|
||||
VECCOPY(cent, curs);
|
||||
if(v3d) {
|
||||
curs= give_cursor(scene, v3d);
|
||||
VECCOPY(cent, curs);
|
||||
}
|
||||
else
|
||||
cent[0]= cent[1]= cent[2]= 0.0f;
|
||||
|
||||
cent[0]-= obedit->obmat[3][0];
|
||||
cent[1]-= obedit->obmat[3][1];
|
||||
cent[2]-= obedit->obmat[3][2];
|
||||
|
||||
if (rv3d) {
|
||||
if ( !(newname) || U.flag & USER_ADD_VIEWALIGNED)
|
||||
if(rv3d) {
|
||||
if (!(newname) || U.flag & USER_ADD_VIEWALIGNED || !rv3d)
|
||||
Mat3CpyMat4(imat, rv3d->viewmat);
|
||||
else Mat3One(imat);
|
||||
else
|
||||
Mat3One(imat);
|
||||
|
||||
Mat3MulVecfl(imat, cent);
|
||||
Mat3MulMat3(cmat, imat, mat);
|
||||
Mat3Inv(imat, cmat);
|
||||
@@ -4994,9 +5078,9 @@ Nurb *addNurbprim(bContext *C, int type, int newname)
|
||||
|
||||
BLI_addtail(editnurb, nu); /* temporal for spin */
|
||||
if(newname && (U.flag & USER_ADD_VIEWALIGNED) == 0)
|
||||
spin_nurb(scene, obedit, 0, 2);
|
||||
spin_nurb(C, scene, obedit, 0, 2);
|
||||
else
|
||||
spin_nurb(scene, obedit, 0, 0);
|
||||
spin_nurb(C, scene, obedit, 0, 0);
|
||||
|
||||
makeknots(nu, 2, nu->flagv>>1);
|
||||
|
||||
@@ -5024,9 +5108,9 @@ Nurb *addNurbprim(bContext *C, int type, int newname)
|
||||
nu->flag= CU_SMOOTH;
|
||||
BLI_addtail(editnurb, nu); /* temporal for extrude and translate */
|
||||
if(newname && (U.flag & USER_ADD_VIEWALIGNED) == 0)
|
||||
spin_nurb(scene, obedit, 0, 2);
|
||||
spin_nurb(C, scene, obedit, 0, 2);
|
||||
else
|
||||
spin_nurb(scene, obedit, 0, 0);
|
||||
spin_nurb(C, scene, obedit, 0, 0);
|
||||
|
||||
BLI_remlink(editnurb, nu);
|
||||
|
||||
@@ -5049,6 +5133,87 @@ Nurb *addNurbprim(bContext *C, int type, int newname)
|
||||
return nu;
|
||||
}
|
||||
|
||||
/***************** add curve primitive operator ********************/
|
||||
|
||||
static int add_curve_primitive_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
Scene *scene= CTX_data_scene(C);
|
||||
Object *obedit= CTX_data_edit_object(C);
|
||||
|
||||
addNurbprim(C, RNA_enum_get(op->ptr, "type"), 0);
|
||||
|
||||
DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
|
||||
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, obedit);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
void CURVE_OT_add_curve_primitive(wmOperatorType *ot)
|
||||
{
|
||||
static EnumPropertyItem type_items[]= {
|
||||
{CU_PRIM_CURVE|CU_2D|CU_BEZIER, "BEZIER_CURVE", "Bezier Curve", ""},
|
||||
{CU_PRIM_CIRCLE|CU_2D|CU_BEZIER, "BEZIER_CIRCLE", "Bezier Circle", ""},
|
||||
{CU_PRIM_CURVE|CU_2D|CU_NURBS, "NURBS_CURVE", "NURBS Curve", ""},
|
||||
{CU_PRIM_CIRCLE|CU_2D|CU_NURBS, "NURBS_CIRCLE", "NURBS Circle", ""},
|
||||
{CU_PRIM_PATH|CU_2D|CU_NURBS, "PATH", "Path", ""},
|
||||
{0, NULL, NULL, NULL}};
|
||||
|
||||
/* identifiers */
|
||||
ot->name= "Add Curve Primitive";
|
||||
ot->idname= "CURVE_OT_add_curve_primitive";
|
||||
|
||||
/* api callbacks */
|
||||
ot->exec= add_curve_primitive_exec;
|
||||
ot->poll= ED_operator_editcurve;
|
||||
|
||||
/* flags */
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
|
||||
/* properties */
|
||||
RNA_def_enum(ot->srna, "type", type_items, CU_PRIM_CURVE|CU_2D|CU_BEZIER, "Type", "Type of primitive to add.");
|
||||
}
|
||||
|
||||
/***************** add surface primitive operator ********************/
|
||||
|
||||
static int add_surface_primitive_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
Scene *scene= CTX_data_scene(C);
|
||||
Object *obedit= CTX_data_edit_object(C);
|
||||
|
||||
addNurbprim(C, RNA_enum_get(op->ptr, "type"), 0);
|
||||
|
||||
DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
|
||||
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, obedit);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
void CURVE_OT_add_surface_primitive(wmOperatorType *ot)
|
||||
{
|
||||
static EnumPropertyItem type_items[]= {
|
||||
{CU_PRIM_CURVE|CU_NURBS, "NURBS_CURVE", "NURBS Curve", ""},
|
||||
{CU_PRIM_CIRCLE|CU_NURBS, "NURBS_CIRCLE", "NURBS Circle", ""},
|
||||
{CU_PRIM_PATCH|CU_NURBS, "NURBS_SURFACE", "NURBS Surface", ""},
|
||||
{CU_PRIM_TUBE|CU_NURBS, "NURBS_TUBE", "NURBS Tube", ""},
|
||||
{CU_PRIM_SPHERE|CU_NURBS, "NURBS_SPHERE", "NURBS Sphere", ""},
|
||||
{CU_PRIM_DONUT|CU_NURBS, "NURBS_DONUT", "NURBS Donut", ""},
|
||||
{0, NULL, NULL, NULL}};
|
||||
|
||||
/* identifiers */
|
||||
ot->name= "Add Surface Primitive";
|
||||
ot->idname= "CURVE_OT_add_surface_primitive";
|
||||
|
||||
/* api callbacks */
|
||||
ot->exec= add_surface_primitive_exec;
|
||||
ot->poll= ED_operator_editsurf;
|
||||
|
||||
/* flags */
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
|
||||
/* properties */
|
||||
RNA_def_enum(ot->srna, "type", type_items, CU_PRIM_CURVE|CU_NURBS, "Type", "Type of primitive to add.");
|
||||
}
|
||||
|
||||
/***************** clear tilt operator ********************/
|
||||
|
||||
static int clear_tilt_exec(bContext *C, wmOperator *op)
|
||||
@@ -5079,7 +5244,7 @@ static int clear_tilt_exec(bContext *C, wmOperator *op)
|
||||
}
|
||||
}
|
||||
|
||||
// XXX notifier WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_TRANSFORM, obedit);
|
||||
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, obedit);
|
||||
DAG_object_flush_update(CTX_data_scene(C), obedit, OB_RECALC_DATA);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
|
||||
@@ -45,7 +45,6 @@ ListBase *curve_get_editcurve(struct Object *ob);
|
||||
|
||||
void load_editNurb (struct Object *obedit);
|
||||
void make_editNurb (struct Object *obedit);
|
||||
void remake_editNurb (struct Object *obedit);
|
||||
void free_editNurb (struct Object *obedit);
|
||||
|
||||
void mouse_nurb (struct bContext *C, short mval[2], int extend);
|
||||
|
||||
@@ -117,6 +117,8 @@ int ED_operator_object_active(struct bContext *C);
|
||||
int ED_operator_editmesh(struct bContext *C);
|
||||
int ED_operator_editarmature(struct bContext *C);
|
||||
int ED_operator_editcurve(struct bContext *C);
|
||||
int ED_operator_editsurf(struct bContext *C);
|
||||
int ED_operator_editsurfcurve(struct bContext *C);
|
||||
int ED_operator_uvedit(struct bContext *C);
|
||||
int ED_operator_uvmap(struct bContext *C);
|
||||
int ED_operator_posemode(struct bContext *C);
|
||||
|
||||
@@ -2309,7 +2309,7 @@ uiBut *ui_def_but_operator(uiBlock *block, int type, char *opname, int opcontext
|
||||
else str= opname;
|
||||
}
|
||||
|
||||
if ((!tip || tip[0]=='\0') && ot->description) {
|
||||
if ((!tip || tip[0]=='\0') && ot && ot->description) {
|
||||
tip= ot->description;
|
||||
}
|
||||
|
||||
|
||||
@@ -422,10 +422,10 @@ void OBJECT_OT_mesh_add(wmOperatorType *ot)
|
||||
}
|
||||
|
||||
static EnumPropertyItem prop_curve_types[] = {
|
||||
{CU_BEZIER|CU_2D|CU_PRIM_CURVE, "BEZCURVE", "Bezier Curve", ""},
|
||||
{CU_BEZIER|CU_2D|CU_PRIM_CIRCLE, "BEZCIRCLE", "Bezier Circle", ""},
|
||||
{CU_NURBS|CU_2D|CU_PRIM_CURVE, "NURBSCUVE", "NURBS Curve", ""},
|
||||
{CU_NURBS|CU_2D|CU_PRIM_CIRCLE, "NURBSCIRCLE", "NURBS Circle", ""},
|
||||
{CU_BEZIER|CU_2D|CU_PRIM_CURVE, "BEZIER_CURVE", "Bezier Curve", ""},
|
||||
{CU_BEZIER|CU_2D|CU_PRIM_CIRCLE, "BEZIER_CIRCLE", "Bezier Circle", ""},
|
||||
{CU_NURBS|CU_2D|CU_PRIM_CURVE, "NURBS_CURVE", "NURBS Curve", ""},
|
||||
{CU_NURBS|CU_2D|CU_PRIM_CIRCLE, "NURBS_CIRCLE", "NURBS Circle", ""},
|
||||
{CU_NURBS|CU_2D|CU_PRIM_PATH, "PATH", "Path", ""},
|
||||
{0, NULL, NULL, NULL}
|
||||
};
|
||||
@@ -5991,7 +5991,6 @@ static int add_duplicate_exec(bContext *C, wmOperator *op)
|
||||
|
||||
static int add_duplicate_invoke(bContext *C, wmOperator *op, wmEvent *event)
|
||||
{
|
||||
|
||||
add_duplicate_exec(C, op);
|
||||
|
||||
RNA_int_set(op->ptr, "mode", TFM_TRANSLATION);
|
||||
@@ -6020,7 +6019,6 @@ void OBJECT_OT_add_duplicate(wmOperatorType *ot)
|
||||
RNA_def_int(ot->srna, "mode", TFM_TRANSLATION, 0, INT_MAX, "Mode", "", 0, INT_MAX);
|
||||
}
|
||||
|
||||
|
||||
/* ********************** */
|
||||
|
||||
void image_aspect(Scene *scene, View3D *v3d)
|
||||
|
||||
@@ -232,11 +232,11 @@ int ED_operator_uvmap(bContext *C)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ED_operator_editcurve(bContext *C)
|
||||
int ED_operator_editsurfcurve(bContext *C)
|
||||
{
|
||||
Object *obedit= CTX_data_edit_object(C);
|
||||
if(obedit && obedit->type==OB_CURVE)
|
||||
return NULL != ((Mesh *)obedit->data)->edit_mesh;
|
||||
if(obedit && ELEM(obedit->type, OB_CURVE, OB_SURF))
|
||||
return NULL != ((Curve *)obedit->data)->editnurb;
|
||||
return 0;
|
||||
|
||||
// XXX this test was in many tools, still needed?
|
||||
@@ -244,6 +244,22 @@ int ED_operator_editcurve(bContext *C)
|
||||
}
|
||||
|
||||
|
||||
int ED_operator_editcurve(bContext *C)
|
||||
{
|
||||
Object *obedit= CTX_data_edit_object(C);
|
||||
if(obedit && obedit->type==OB_CURVE)
|
||||
return NULL != ((Curve *)obedit->data)->editnurb;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ED_operator_editsurf(bContext *C)
|
||||
{
|
||||
Object *obedit= CTX_data_edit_object(C);
|
||||
if(obedit && obedit->type==OB_SURF)
|
||||
return NULL != ((Curve *)obedit->data)->editnurb;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* *************************** action zone operator ************************** */
|
||||
|
||||
/* operator state vars used:
|
||||
|
||||
@@ -1152,109 +1152,46 @@ static uiBlock *view3d_select_meshmenu(bContext *C, ARegion *ar, void *arg_unuse
|
||||
return block;
|
||||
}
|
||||
|
||||
void do_view3d_select_curvemenu(bContext *C, void *arg, int event)
|
||||
static void view3d_select_curvemenu(bContext *C, uiMenuItem *head, void *arg_unused)
|
||||
{
|
||||
#if 0
|
||||
/* extern void borderselect(void);*/
|
||||
Object *obedit= CTX_data_edit_object(C);
|
||||
|
||||
switch(event) {
|
||||
case 0: /* border select */
|
||||
borderselect();
|
||||
break;
|
||||
case 2: /* Select/Deselect all */
|
||||
deselectall_nurb();
|
||||
break;
|
||||
case 3: /* Inverse */
|
||||
selectswapNurb();
|
||||
break;
|
||||
/* select connected control points */
|
||||
/*case 4:
|
||||
G.qual |= LR_CTRLKEY;
|
||||
select_connected_nurb();
|
||||
G.qual &= ~LR_CTRLKEY;
|
||||
break;*/
|
||||
case 5: /* select row (nurb) */
|
||||
selectrow_nurb();
|
||||
break;
|
||||
case 7: /* select/deselect first */
|
||||
selectend_nurb(FIRST, 1, DESELECT);
|
||||
break;
|
||||
case 8: /* select/deselect last */
|
||||
selectend_nurb(LAST, 1, DESELECT);
|
||||
break;
|
||||
case 9: /* select more */
|
||||
select_more_nurb();
|
||||
break;
|
||||
case 10: /* select less */
|
||||
select_less_nurb();
|
||||
break;
|
||||
case 11: /* select next */
|
||||
select_next_nurb();
|
||||
break;
|
||||
case 12: /* select previous */
|
||||
select_prev_nurb();
|
||||
break;
|
||||
case 13: /* select random */
|
||||
select_random_nurb();
|
||||
break;
|
||||
case 14: /* select every nth */
|
||||
select_every_nth_nurb();
|
||||
break;
|
||||
}
|
||||
allqueue(REDRAWVIEW3D, 0);
|
||||
#endif
|
||||
}
|
||||
uiMenuItemO(head, 0, "VIEW3D_OT_borderselect");
|
||||
uiMenuItemO(head, 0, "VIEW3D_OT_circle_select");
|
||||
|
||||
uiMenuSeparator(head);
|
||||
|
||||
static uiBlock *view3d_select_curvemenu(bContext *C, ARegion *ar, void *arg_unused)
|
||||
{
|
||||
Scene *scene= CTX_data_scene(C);
|
||||
uiBlock *block;
|
||||
short yco= 0, menuwidth=120;
|
||||
|
||||
block= uiBeginBlock(C, ar, "view3d_select_curvemenu", UI_EMBOSSP, UI_HELV);
|
||||
uiBlockSetButmFunc(block, do_view3d_select_curvemenu, 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, 2, "");
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Random...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Every Nth", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, "");
|
||||
|
||||
if (OBACT->type == OB_SURF) {
|
||||
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
|
||||
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Control Point Row|Shift R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
|
||||
uiMenuItemO(head, 0, "CURVE_OT_de_select_all");
|
||||
uiMenuItemO(head, 0, "CURVE_OT_select_inverse");
|
||||
uiMenuItemO(head, 0, "CURVE_OT_select_random"); // Random...
|
||||
uiMenuItemO(head, 0, "CURVE_OT_select_every_nth"); // Every Nth..
|
||||
|
||||
uiMenuSeparator(head);
|
||||
|
||||
if(obedit->type == OB_SURF) {
|
||||
uiMenuItemO(head, 0, "CURVE_OT_select_row");
|
||||
}
|
||||
else {
|
||||
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
|
||||
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect First", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect Last", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Next", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Previous", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
|
||||
uiMenuItemO(head, 0, "CURVE_OT_de_select_first");
|
||||
uiMenuItemO(head, 0, "CURVE_OT_de_select_last");
|
||||
uiMenuItemO(head, 0, "CURVE_OT_select_next");
|
||||
uiMenuItemO(head, 0, "CURVE_OT_select_previous");
|
||||
}
|
||||
|
||||
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, 9, "");
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Less|Ctrl NumPad -", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
|
||||
|
||||
|
||||
uiMenuSeparator(head);
|
||||
|
||||
uiMenuItemO(head, 0, "CURVE_OT_select_more");
|
||||
uiMenuItemO(head, 0, "CURVE_OT_select_less");
|
||||
|
||||
/* commented out because it seems to only like the LKEY method - based on mouse pointer position :( */
|
||||
/*uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Connected Control Points|Ctrl L", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");*/
|
||||
|
||||
if(ar->alignment==RGN_ALIGN_TOP) {
|
||||
uiBlockSetDirection(block, UI_DOWN);
|
||||
}
|
||||
else {
|
||||
uiBlockSetDirection(block, UI_TOP);
|
||||
uiBlockFlipOrder(block);
|
||||
}
|
||||
|
||||
uiTextBoundsBlock(block, 50);
|
||||
return block;
|
||||
/* uiMenuItemO(head, 0, "CURVE_OT_select_linked"); */
|
||||
|
||||
#if 0
|
||||
G.qual |= LR_CTRLKEY;
|
||||
select_connected_nurb();
|
||||
G.qual &= ~LR_CTRLKEY;
|
||||
break;*/
|
||||
#endif
|
||||
}
|
||||
|
||||
void do_view3d_select_metaballmenu(bContext *C, void *arg, int event)
|
||||
@@ -3327,262 +3264,85 @@ static uiBlock *view3d_edit_meshmenu(bContext *C, ARegion *ar, void *arg_unused)
|
||||
return block;
|
||||
}
|
||||
|
||||
static void do_view3d_edit_curve_controlpointsmenu(bContext *C, void *arg, int event)
|
||||
static void view3d_edit_curve_controlpointsmenu(bContext *C, uiMenuItem *head, void *arg_unused)
|
||||
{
|
||||
#if 0
|
||||
Scene *scene= CTX_data_scene(C);
|
||||
|
||||
switch(event) {
|
||||
case 0: /* tilt */
|
||||
initTransform(TFM_TILT, CTX_NONE);
|
||||
Transform();
|
||||
break;
|
||||
case 1: /* clear tilt */
|
||||
clear_tilt();
|
||||
break;
|
||||
case 2: /* Free */
|
||||
sethandlesNurb(editnurb, 3);
|
||||
DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
|
||||
break;
|
||||
case 3: /* vector */
|
||||
sethandlesNurb(editnurb, 2);
|
||||
DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
|
||||
break;
|
||||
case 4: /* smooth */
|
||||
sethandlesNurb(editnurb, 1);
|
||||
DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
|
||||
break;
|
||||
case 5: /* make vertex parent */
|
||||
make_parent();
|
||||
break;
|
||||
case 6: /* add hook */
|
||||
add_hook_menu();
|
||||
break;
|
||||
case 7:
|
||||
separate_nurb();
|
||||
break;
|
||||
}
|
||||
allqueue(REDRAWVIEW3D, 0);
|
||||
#endif
|
||||
}
|
||||
Object *obedit= CTX_data_edit_object(C);
|
||||
|
||||
static uiBlock *view3d_edit_curve_controlpointsmenu(bContext *C, ARegion *ar, void *arg_unused)
|
||||
{
|
||||
Scene *scene= CTX_data_scene(C);
|
||||
uiBlock *block;
|
||||
short yco = 20, menuwidth = 120;
|
||||
|
||||
block= uiBeginBlock(C, ar, "view3d_edit_curve_controlpointsmenu", UI_EMBOSSP, UI_HELV);
|
||||
uiBlockSetButmFunc(block, do_view3d_edit_curve_controlpointsmenu, NULL);
|
||||
|
||||
if (OBACT->type == OB_CURVE) {
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Tilt|T", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Tilt|Alt T", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Separate|P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
|
||||
if(obedit->type == OB_CURVE) {
|
||||
uiMenuItemEnumO(head, "", 0, "TFM_OT_transform", "mode", TFM_TILT);
|
||||
uiMenuItemO(head, 0, "CURVE_OT_clear_tilt");
|
||||
uiMenuItemO(head, 0, "CURVE_OT_separate");
|
||||
|
||||
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
|
||||
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Automatic|Shift H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Toggle Free/Aligned|H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Vector|V", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
|
||||
uiMenuSeparator(head);
|
||||
|
||||
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
|
||||
uiMenuItemEnumO(head, "", 0, "CURVE_OT_set_handle_type", "type", 1);
|
||||
uiMenuItemEnumO(head, "", 0, "CURVE_OT_set_handle_type", "type", 3);
|
||||
uiMenuItemEnumO(head, "", 0, "CURVE_OT_set_handle_type", "type", 2);
|
||||
|
||||
uiMenuSeparator(head);
|
||||
}
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Vertex Parent|Ctrl P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add Hook|Ctrl H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
|
||||
|
||||
uiBlockSetDirection(block, UI_RIGHT);
|
||||
uiTextBoundsBlock(block, 60);
|
||||
return block;
|
||||
|
||||
// XXX uiMenuItemO(head, 0, "OBJECT_OT_make_vertex_parent"); Make VertexParent|Ctrl P
|
||||
// make_parent()
|
||||
// XXX uiMenuItemO(head, 0, "OBJECT_OT_add_hook"); Add Hook| Ctrl H
|
||||
// add_hook_menu()
|
||||
}
|
||||
|
||||
void do_view3d_edit_curve_segmentsmenu(bContext *C, void *arg, int event)
|
||||
static void view3d_edit_curve_segmentsmenu(bContext *C, uiMenuItem *head, void *arg_unused)
|
||||
{
|
||||
#if 0
|
||||
switch(event) {
|
||||
case 0: /* subdivide */
|
||||
subdivideNurb();
|
||||
break;
|
||||
case 1: /* switch direction */
|
||||
switchdirectionNurb2();
|
||||
break;
|
||||
}
|
||||
allqueue(REDRAWVIEW3D, 0);
|
||||
#endif
|
||||
uiMenuItemO(head, 0, "CURVE_OT_subdivide");
|
||||
uiMenuItemO(head, 0, "CURVE_OT_switch_direction");
|
||||
}
|
||||
|
||||
static uiBlock *view3d_edit_curve_segmentsmenu(bContext *C, ARegion *ar, void *arg_unused)
|
||||
static void view3d_edit_curve_showhidemenu(bContext *C, uiMenuItem *head, void *arg_unused)
|
||||
{
|
||||
uiBlock *block;
|
||||
short yco = 20, menuwidth = 120;
|
||||
|
||||
block= uiBeginBlock(C, ar, "view3d_edit_curve_segmentsmenu", UI_EMBOSSP, UI_HELV);
|
||||
uiBlockSetButmFunc(block, do_view3d_edit_curve_segmentsmenu, NULL);
|
||||
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Subdivide", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Switch Direction", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
|
||||
|
||||
uiBlockSetDirection(block, UI_RIGHT);
|
||||
uiTextBoundsBlock(block, 60);
|
||||
return block;
|
||||
uiMenuItemO(head, 0, "CURVE_OT_reveal");
|
||||
uiMenuItemO(head, 0, "CURVE_OT_hide");
|
||||
uiMenuItemBooleanO(head, "Hide Deselected", 0, "CURVE_OT_hide", "deselected", 1);
|
||||
}
|
||||
|
||||
void do_view3d_edit_curve_showhidemenu(bContext *C, void *arg, int event)
|
||||
{
|
||||
#if 0
|
||||
switch(event) {
|
||||
case 10: /* show hidden control points */
|
||||
revealNurb();
|
||||
break;
|
||||
case 11: /* hide selected control points */
|
||||
hideNurb(0);
|
||||
break;
|
||||
case 12: /* hide deselected control points */
|
||||
hideNurb(1);
|
||||
break;
|
||||
}
|
||||
allqueue(REDRAWVIEW3D, 0);
|
||||
#endif
|
||||
}
|
||||
|
||||
static uiBlock *view3d_edit_curve_showhidemenu(bContext *C, ARegion *ar, void *arg_unused)
|
||||
static void view3d_edit_curvemenu(bContext *C, uiMenuItem *head, void *arg_unused)
|
||||
{
|
||||
PointerRNA sceneptr;
|
||||
Scene *scene= CTX_data_scene(C);
|
||||
uiBlock *block;
|
||||
short yco = 20, menuwidth = 120;
|
||||
|
||||
block= uiBeginBlock(C, ar, "view3d_edit_curve_showhidemenu", UI_EMBOSSP, UI_HELV);
|
||||
uiBlockSetButmFunc(block, do_view3d_edit_curve_showhidemenu, NULL);
|
||||
|
||||
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|Alt Ctrl H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
|
||||
if (OBACT->type == OB_SURF) uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Deselected Control Points|Alt Shift H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
|
||||
|
||||
RNA_id_pointer_create(&scene->id, &sceneptr);
|
||||
|
||||
uiBlockSetDirection(block, UI_RIGHT);
|
||||
uiTextBoundsBlock(block, 60);
|
||||
return block;
|
||||
}
|
||||
static void do_view3d_edit_curvemenu(bContext *C, void *arg, int event)
|
||||
{
|
||||
#if 0
|
||||
switch(event) {
|
||||
|
||||
case 0: /* Undo Editing */
|
||||
remake_editNurb(ob);
|
||||
break;
|
||||
case 1: /* transformation properties */
|
||||
// XXX mainqenter(NKEY, 1);
|
||||
break;
|
||||
case 2: /* insert keyframe */
|
||||
common_insertkey();
|
||||
break;
|
||||
case 4: /* extrude */
|
||||
if (OBACT->type == OB_CURVE) {
|
||||
addvert_Nurb('e');
|
||||
} else if (OBACT->type == OB_SURF) {
|
||||
extrude_nurb();
|
||||
}
|
||||
break;
|
||||
case 5: /* duplicate */
|
||||
duplicate_context_selected();
|
||||
break;
|
||||
case 6: /* make segment */
|
||||
addsegment_nurb();
|
||||
break;
|
||||
case 7: /* toggle cyclic */
|
||||
makecyclicNurb();
|
||||
DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
|
||||
break;
|
||||
case 8: /* delete */
|
||||
delete_context_selected();
|
||||
break;
|
||||
case 9: /* proportional edit (toggle) */
|
||||
if(scene->proportional) scene->proportional= 0;
|
||||
else scene->proportional= 1;
|
||||
break;
|
||||
case 13: /* Shear */
|
||||
initTransform(TFM_SHEAR, CTX_NONE);
|
||||
Transform();
|
||||
break;
|
||||
case 14: /* Warp */
|
||||
initTransform(TFM_WARP, CTX_NONE);
|
||||
Transform();
|
||||
break;
|
||||
case 15:
|
||||
uv_autocalc_tface();
|
||||
break;
|
||||
case 16: /* delete keyframe */
|
||||
common_deletekey();
|
||||
break;
|
||||
}
|
||||
allqueue(REDRAWVIEW3D, 0);
|
||||
#endif
|
||||
}
|
||||
|
||||
static uiBlock *view3d_edit_curvemenu(bContext *C, ARegion *ar, void *arg_unused)
|
||||
{
|
||||
Scene *scene= CTX_data_scene(C);
|
||||
uiBlock *block;
|
||||
short yco= 0, menuwidth=120;
|
||||
|
||||
block= uiBeginBlock(C, ar, "view3d_edit_curvemenu", UI_EMBOSSP, UI_HELV);
|
||||
uiBlockSetButmFunc(block, do_view3d_edit_curvemenu, NULL);
|
||||
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Reload Original|U", 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_MENU_PANEL, "Transform Properties...|N", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
|
||||
uiDefIconTextBlockBut(block, view3d_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Transform", 0, yco-=20, 120, 19, "");
|
||||
uiDefIconTextBlockBut(block, view3d_edit_mirrormenu, NULL, ICON_RIGHTARROW_THIN, "Mirror", 0, yco-=20, menuwidth, 19, "");
|
||||
uiDefIconTextBlockBut(block, view3d_edit_snapmenu, NULL, ICON_RIGHTARROW_THIN, "Snap", 0, yco-=20, 120, 19, "");
|
||||
|
||||
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
|
||||
uiMenuSeparator(head);
|
||||
#endif
|
||||
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Insert Keyframe|I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete Keyframe|Alt I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
|
||||
|
||||
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
|
||||
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "UV Unwrap|U", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
|
||||
|
||||
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
|
||||
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Extrude|E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Duplicate|Shift D", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Segment|F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Toggle Cyclic|C", 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, 8, "");
|
||||
|
||||
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
|
||||
|
||||
uiDefIconTextBlockBut(block, view3d_edit_curve_controlpointsmenu, NULL, ICON_RIGHTARROW_THIN, "Control Points", 0, yco-=20, menuwidth, 19, "");
|
||||
uiDefIconTextBlockBut(block, view3d_edit_curve_segmentsmenu, NULL, ICON_RIGHTARROW_THIN, "Segments", 0, yco-=20, menuwidth, 19, "");
|
||||
|
||||
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
|
||||
|
||||
if(scene->proportional) {
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Proportional Editing|O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
|
||||
} else {
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Proportional Editing|O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
|
||||
}
|
||||
uiDefIconTextBlockBut(block, view3d_edit_propfalloffmenu, NULL, ICON_RIGHTARROW_THIN, "Proportional Falloff", 0, yco-=20, menuwidth, 19, "");
|
||||
|
||||
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
|
||||
|
||||
uiDefIconTextBlockBut(block, view3d_edit_curve_showhidemenu, NULL, ICON_RIGHTARROW_THIN, "Show/Hide Control Points", 0, yco-=20, menuwidth, 19, "");
|
||||
|
||||
if(ar->alignment==RGN_ALIGN_TOP) {
|
||||
uiBlockSetDirection(block, UI_DOWN);
|
||||
}
|
||||
else {
|
||||
uiBlockSetDirection(block, UI_TOP);
|
||||
uiBlockFlipOrder(block);
|
||||
}
|
||||
// XXX uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Insert Keyframe|I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
|
||||
// common_insertkey();
|
||||
// XXX uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete Keyframe|Alt I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
|
||||
// common_deletekey();
|
||||
|
||||
uiTextBoundsBlock(block, 50);
|
||||
return block;
|
||||
|
||||
uiMenuItemO(head, 0, "CURVE_OT_extrude");
|
||||
uiMenuItemO(head, 0, "CURVE_OT_duplicate");
|
||||
uiMenuItemO(head, 0, "CURVE_OT_separate");
|
||||
uiMenuItemO(head, 0, "CURVE_OT_make_segment");
|
||||
uiMenuItemO(head, 0, "CURVE_OT_toggle_cyclic");
|
||||
uiMenuItemO(head, 0, "CURVE_OT_delete"); // Delete...
|
||||
|
||||
uiMenuSeparator(head);
|
||||
|
||||
uiMenuLevel(head, "Control Points", view3d_edit_curve_controlpointsmenu);
|
||||
uiMenuLevel(head, "Segments", view3d_edit_curve_segmentsmenu);
|
||||
|
||||
uiMenuSeparator(head);
|
||||
|
||||
uiMenuItemBooleanR(head, &sceneptr, "proportional_editing"); // |O
|
||||
uiMenuLevelEnumR(head, &sceneptr, "proportional_editing_falloff");
|
||||
|
||||
uiMenuSeparator(head);
|
||||
|
||||
uiMenuLevel(head, "Show/Hide Control Points", view3d_edit_curve_showhidemenu);
|
||||
}
|
||||
|
||||
static void do_view3d_edit_mball_showhidemenu(bContext *C, void *arg, int event)
|
||||
@@ -3650,9 +3410,6 @@ static void do_view3d_edit_metaballmenu(bContext *C, void *arg, int event)
|
||||
case 7: /* Transform Properties */
|
||||
add_blockhandler(sa, VIEW3D_HANDLER_OBJECT, 0);
|
||||
break;
|
||||
case 8:
|
||||
uv_autocalc_tface();
|
||||
break;
|
||||
}
|
||||
allqueue(REDRAWVIEW3D, 0);
|
||||
#endif
|
||||
@@ -3679,10 +3436,6 @@ static uiBlock *view3d_edit_metaballmenu(bContext *C, ARegion *ar, void *arg_unu
|
||||
|
||||
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
|
||||
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "UV Unwrap|U", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
|
||||
|
||||
uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
|
||||
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Duplicate|Shift D", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
|
||||
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete...|X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
|
||||
|
||||
@@ -5648,7 +5401,7 @@ static void view3d_header_pulldowns(const bContext *C, uiBlock *block, Object *o
|
||||
if (ob && ob->type == OB_MESH) {
|
||||
uiDefPulldownBut(block, view3d_select_meshmenu, NULL, "Select", xco,yco-2, xmax-3, 24, "");
|
||||
} else if (ob && (ob->type == OB_CURVE || ob->type == OB_SURF)) {
|
||||
uiDefPulldownBut(block, view3d_select_curvemenu, NULL, "Select", xco,yco-2, xmax-3, 24, "");
|
||||
uiDefMenuBut(block, view3d_select_curvemenu, NULL, "Select", xco, yco-2, xmax-3, 24, "");
|
||||
} else if (ob && ob->type == OB_FONT) {
|
||||
uiDefPulldownBut(block, view3d_select_meshmenu, NULL, "Select", xco, yco-2, xmax-3, 24, "");
|
||||
} else if (ob && ob->type == OB_MBALL) {
|
||||
@@ -5682,11 +5435,11 @@ static void view3d_header_pulldowns(const bContext *C, uiBlock *block, Object *o
|
||||
xco+= xmax;
|
||||
} else if (ob && ob->type == OB_CURVE) {
|
||||
xmax= GetButStringLength("Curve");
|
||||
uiDefPulldownBut(block, view3d_edit_curvemenu, NULL, "Curve", xco,yco-2, xmax-3, 24, "");
|
||||
uiDefMenuBut(block, view3d_edit_curvemenu, NULL, "Curve", xco, yco-2, xmax-3, 24, "");
|
||||
xco+= xmax;
|
||||
} else if (ob && ob->type == OB_SURF) {
|
||||
xmax= GetButStringLength("Surface");
|
||||
uiDefPulldownBut(block, view3d_edit_curvemenu, NULL, "Surface", xco,yco-2, xmax-3, 24, "");
|
||||
uiDefMenuBut(block, view3d_edit_curvemenu, NULL, "Surface", xco, yco-2, xmax-3, 24, "");
|
||||
xco+= xmax;
|
||||
} else if (ob && ob->type == OB_FONT) {
|
||||
xmax= GetButStringLength("Text");
|
||||
|
||||
@@ -596,10 +596,8 @@ static void uv_map_transform(bContext *C, wmOperator *op, float center[3], float
|
||||
Scene *scene= CTX_data_scene(C);
|
||||
Object *obedit= CTX_data_edit_object(C);
|
||||
EditMesh *em= ((Mesh*)obedit->data)->edit_mesh;
|
||||
SpaceLink *sl= CTX_wm_space_data(C);
|
||||
View3D *v3d= (sl->spacetype == SPACE_VIEW3D)? (View3D*)sl: NULL;
|
||||
ARegion *ar= CTX_wm_region(C);
|
||||
RegionView3D *rv3d= (v3d && ar->regiontype == RGN_TYPE_WINDOW)? ar->regiondata: NULL;
|
||||
View3D *v3d= CTX_wm_view3d(C);
|
||||
RegionView3D *rv3d= CTX_wm_region_view3d(C);
|
||||
/* common operator properties */
|
||||
int align= RNA_enum_get(op->ptr, "align");
|
||||
int direction= RNA_enum_get(op->ptr, "direction");
|
||||
@@ -935,13 +933,12 @@ static int from_view_exec(bContext *C, wmOperator *op)
|
||||
|
||||
static int from_view_poll(bContext *C)
|
||||
{
|
||||
SpaceLink *sl= CTX_wm_space_data(C);
|
||||
ARegion *ar= CTX_wm_region(C);
|
||||
RegionView3D *rv3d= CTX_wm_region_view3d(C)
|
||||
|
||||
if(!ED_operator_uvmap(C))
|
||||
return 0;
|
||||
|
||||
return (sl->spacetype == SPACE_VIEW3D && ar->regiontype == RGN_TYPE_WINDOW);
|
||||
return (rv3d != NULL);
|
||||
}
|
||||
|
||||
void UV_OT_from_view(wmOperatorType *ot)
|
||||
|
||||
Reference in New Issue
Block a user