diff options
author | Jonathan deWerd <jjoonathan@gmail.com> | 2014-08-14 01:02:12 +0400 |
---|---|---|
committer | Jonathan deWerd <jjoonathan@gmail.com> | 2014-08-14 01:02:12 +0400 |
commit | ef4478c62b2c4f03586b5370d3be61f875b1586e (patch) | |
tree | e96c85b6db623de52e4fc0e64f0de7359c0c4dea | |
parent | 047e44dbcc1f5c7f6ddc79f275173ef2d643372a (diff) |
Selective selection based on what is selected in 3dview
-rw-r--r-- | source/blender/blenkernel/BKE_curve.h | 1 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/curve.cpp | 37 | ||||
-rw-r--r-- | source/blender/editors/curve/editcurve.c | 3 | ||||
-rw-r--r-- | source/blender/editors/include/ED_curve.h | 2 | ||||
-rw-r--r-- | source/blender/editors/io/io_rhino_import.cpp | 17 | ||||
-rw-r--r-- | source/blender/editors/uvedit/uvedit_draw.c | 62 | ||||
-rw-r--r-- | source/blender/editors/uvedit/uvedit_ops.c | 2 |
7 files changed, 74 insertions, 50 deletions
diff --git a/source/blender/blenkernel/BKE_curve.h b/source/blender/blenkernel/BKE_curve.h index 658e5903fe3..589b56b4816 100644 --- a/source/blender/blenkernel/BKE_curve.h +++ b/source/blender/blenkernel/BKE_curve.h @@ -185,6 +185,7 @@ void BKE_nurb_ensure2D(struct Nurb *nu); void BKE_nurb_minmax(struct Nurb *nu, bool use_radius, float min[3], float max[3]); void BKE_nurbs_domain(struct Nurb *nu, float *umin, float *umax, float *vmin, float *vmax); void BKE_nurbs_uvbounds(struct Nurb *nu, float *umin, float *umax, float *vmin, float *vmax); +void BKE_nurbs_printknots(struct Nurb *nu); void BKE_nurb_makeFaces(struct Nurb *nu, float *coord_array, int rowstride, int resolu, int resolv); void BKE_nurb_makeCurve(struct Nurb *nu, float *coord_array, float *tilt_array, float *radius_array, float *weight_array, int resolu, int stride); diff --git a/source/blender/blenkernel/intern/curve.cpp b/source/blender/blenkernel/intern/curve.cpp index 77d30e8b9d5..bcb6b17ef73 100644 --- a/source/blender/blenkernel/intern/curve.cpp +++ b/source/blender/blenkernel/intern/curve.cpp @@ -4176,24 +4176,33 @@ void BKE_nurbs_uvbounds(struct Nurb *nu, float *umin, float *umax, float *vmin, } void BKE_nurbs_domain(struct Nurb *nu, float *umin, float *umax, float *vmin, float *vmax) { - *umin = nu->knotsu[nu->orderu - 1]; - if (nu->flagu & CU_NURB_CYCLIC) - *umax = nu->knotsu[nu->pntsu + nu->orderu - 1]; - else - *umax = nu->knotsu[nu->pntsu]; - *umin = std::min(nu->knotsu[0], *umin); - *umax = std::max(nu->knotsu[nu->pntsu+nu->orderu-1], *umax); + int pu = nu->orderu-1; /* p{u,v} is the degree of the curve in the {u,v} direction */ + int pv = nu->orderv-1; + *umin = nu->knotsu[pu]; + *umax = nu->knotsu[KNOTSU(nu)-pu-1]; if (nu->knotsv) { - *vmin = nu->knotsv[nu->orderv - 1]; - if (nu->flagv & CU_NURB_CYCLIC) - *vmax = nu->knotsv[nu->pntsv + nu->orderv - 1]; - else - *vmax = nu->knotsv[nu->pntsv]; - if (vmin) *vmin = std::min(nu->knotsv[0], *umin); - if (vmin) *vmax = std::max(nu->knotsv[nu->pntsv+nu->orderv-1], *umax); + *vmin = nu->knotsv[pv]; + *vmax = nu->knotsv[KNOTSV(nu)-pv-1]; } } +void BKE_nurbs_printknots(struct Nurb *nu) { + int i,numknot; + float umin, umax, vmin, vmax; + printf("knotsu = {"); + for (i=0,numknot=KNOTSU(nu); i<numknot; i++) { + printf((i==numknot-1)?"%3f}\n":"%3f, ",nu->knotsu[i]); + } + printf("knotsv = {"); + for (i=0,numknot=KNOTSV(nu); i<numknot; i++) { + printf((i==numknot-1)?"%3f}\n":"%3f, ",nu->knotsv[i]); + } + BKE_nurbs_domain(nu, &umin, &umax, &vmin, &vmax); + printf("domain = [%3f,%3f]x[%3f,%3f]\n",umin,umax,vmin,vmax); + BKE_nurbs_uvbounds(nu, &umin, &umax, &vmin, &vmax); + printf("uvbounds = [%3f,%3f]x[%3f,%3f]\n",umin,umax,vmin,vmax); +} + GridMesh *BKE_nurb_compute_trimmed_GridMesh(struct Nurb* nu) { // Figure out the domain float ustart,uend,vstart,vend; diff --git a/source/blender/editors/curve/editcurve.c b/source/blender/editors/curve/editcurve.c index 752d875112d..06358da4d34 100644 --- a/source/blender/editors/curve/editcurve.c +++ b/source/blender/editors/curve/editcurve.c @@ -1477,8 +1477,9 @@ void ED_curve_select_swap(EditNurb *editnurb, bool hide_handles) * A Nurb is shown iff it has one or more of its BPoints selected. * The CU_SELECTED2 flag of nu->flag2 is where this data is stored. */ -void ED_curve_propagate_selected_pts_to_flag2(EditNurb *editnurb) { +void ED_curve_propagate_selected_pts_to_flag2(Curve *cu) { Nurb *nu; + EditNurb *editnurb = cu->editnurb; int numpts, i; for (nu=editnurb->nurbs.first; nu; nu=nu->next) { diff --git a/source/blender/editors/include/ED_curve.h b/source/blender/editors/include/ED_curve.h index 3e93351c2aa..3fe5ddbc94d 100644 --- a/source/blender/editors/include/ED_curve.h +++ b/source/blender/editors/include/ED_curve.h @@ -55,7 +55,7 @@ void ED_curve_transform(struct Curve *cu, float mat[4][4]); void ED_curve_deselect_all(struct EditNurb *editnurb); void ED_curve_select_all(struct EditNurb *editnurb); void ED_curve_select_swap(struct EditNurb *editnurb, bool hide_handles); -void ED_curve_propagate_selected_pts_to_flag2(struct EditNurb *editnurb); +void ED_curve_propagate_selected_pts_to_flag2(struct Curve *cu); void undo_push_curve(struct bContext *C, const char *name); ListBase *object_editcurve_get(struct Object *ob); diff --git a/source/blender/editors/io/io_rhino_import.cpp b/source/blender/editors/io/io_rhino_import.cpp index 0eea7f5899c..eb67b13437a 100644 --- a/source/blender/editors/io/io_rhino_import.cpp +++ b/source/blender/editors/io/io_rhino_import.cpp @@ -606,15 +606,16 @@ static Curve* rhino_import_nurbs_surf_start(bContext *C, static void rhino_import_nurbs_surf_end(bContext *C) { Curve *cu = (Curve*)CTX_data_edit_object(C)->data; float cent[3]; - BKE_curve_center_median(cu, cent); - copy_v3_v3(cu->loc, cent); - mul_v3_fl(cent, -1); - BKE_curve_translate(cu, cent, false); +// BKE_curve_center_median(cu, cent); +// copy_v3_v3(cu->loc, cent); +// mul_v3_fl(cent, -1); +// BKE_curve_translate(cu, cent, false); ED_object_editmode_exit(C, EM_FREEDATA); printf("nurbssurf done\n"); } static void nurb_normalize_knots(Nurb *nu) { + printf("\tnormalizing knots\n"); normalize_knots(nu, 'u'); normalize_knots(nu, 'v'); BKE_nurb_knot_calc_u(nu); @@ -675,10 +676,12 @@ static Nurb* rhino_import_nurbs_surf(bContext *C, int i=1; for (int l=nu->pntsu+nu->orderu-1; i<l; i++) { nu->knotsu[i] = surf->Knot(0,i-1); } + nu->knotsu[0] =nu->knotsu[1]; nu->knotsu[i] = nu->knotsu[i-1]; i=1; for (int l=nu->pntsv+nu->orderv-1; i<l; i++) { nu->knotsv[i] = surf->Knot(1,i-1); } + nu->knotsv[0] = nu->knotsv[1]; nu->knotsv[i] = nu->knotsv[i-1]; nu->flagu = analyze_knots(nu->knotsu, nu->pntsu+nu->orderu, nu->orderu, surf->IsPeriodic(0)); nu->flagv = analyze_knots(nu->knotsv, nu->pntsv+nu->orderv, nu->orderv, surf->IsPeriodic(1)); @@ -705,13 +708,13 @@ static void rhino_import_surface(bContext *C, bool did_handle = false; if (ns) { rhino_import_nurbs_surf_start(C, obj, attrs); - rhino_import_nurbs_surf(C, ns, obj, attrs, newobj); + rhino_import_nurbs_surf(C, ns, obj, attrs, newobj, false); rhino_import_nurbs_surf_end(C); did_handle = true; } if (!did_handle && surf->HasNurbForm()) { rhino_import_nurbs_surf_start(C, obj, attrs); - rhino_import_nurbs_surf(C, surf, obj, attrs, newobj); + rhino_import_nurbs_surf(C, surf, obj, attrs, newobj, false); rhino_import_nurbs_surf_end(C); did_handle = true; } @@ -764,7 +767,7 @@ static void rhino_import_brep_face(bContext *C, BLI_addtail(&nu->trims, trim); } - nurb_normalize_knots(nu); + //nurb_normalize_knots(nu); if (should_destroy_ns) delete ns; } diff --git a/source/blender/editors/uvedit/uvedit_draw.c b/source/blender/editors/uvedit/uvedit_draw.c index e67461be9d4..112e40429ae 100644 --- a/source/blender/editors/uvedit/uvedit_draw.c +++ b/source/blender/editors/uvedit/uvedit_draw.c @@ -61,6 +61,7 @@ #include "ED_image.h" #include "ED_mesh.h" #include "ED_uvedit.h" +#include "ED_curve.h" #include "UI_resources.h" #include "UI_interface.h" @@ -927,21 +928,22 @@ void draw_nurbuv(const struct bContext *C, SpaceImage *sima, ARegion *ar, Scene float x_view, y_view; /* XY in view (local, normalized) coord systems */ int x_region, y_region; /* XY in window coord systems */ int xmax_region, ymax_region, resoltrim; - int bot_tweak, top_tweak, left_tweak, right_tweak, line_width; - GLint quad_in[4][2]; + int line_width; double regionx2viewx, regiony2viewy; - float widget_unit, trash, fonth, fontw; + float widget_unit, fonth, fontw; int umin,vmin,umax,vmax; float uminf,vminf,umaxf,vmaxf; char lbl[128]; unsigned char col1[4], col2[4]; float (*trim_uv_pnts)[2]; + int grid_x_spacing, grid_y_spacing; BLI_assert(obedit && obedit->type == OB_SURF); cur = ar->v2d.cur; mask = ar->v2d.mask; cu = (Curve*)obedit->data; umin=INFINITY; vmin=INFINITY; umax=-INFINITY; vmax=-INFINITY; + ED_curve_propagate_selected_pts_to_flag2(cu); /* Figure out the union bounding box in UV space for all knots */ for (nu=cu->editnurb->nurbs.first; nu; nu=nu->next) { if (nu->knotsu[0]<umin) umin = nu->knotsu[0]; @@ -949,7 +951,6 @@ void draw_nurbuv(const struct bContext *C, SpaceImage *sima, ARegion *ar, Scene if (nu->knotsu[KNOTSU(nu)-1]>umax) umax = nu->knotsu[KNOTSU(nu)-1]; if (nu->knotsv[KNOTSV(nu)-1]>vmax) vmax = nu->knotsv[KNOTSV(nu)-1]; } - printf("\n"); umin = floor(umin)-1; vmin = floor(vmin)-1; umax = ceil(umax)+1; @@ -978,22 +979,33 @@ void draw_nurbuv(const struct bContext *C, SpaceImage *sima, ARegion *ar, Scene UI_ThemeColor(TH_TITLE); /* UI_ThemeColor(TH_GRID); probably more correct but too hard to see */ fonth = BLF_height_default("1",1); - for (i=umin; i<=umax; i++) { - x_view=i; y_view=vmin-widget_unit; - UI_view2d_view_to_region(&ar->v2d, x_view, y_view, &x_region, &y_region); - snprintf(lbl, sizeof(lbl), "%i", (int)i); - if (y_region < mask.ymin) y_region = mask.ymin; - if (y_region > ymax_region-fonth-4) y_region = ymax_region-fonth-4; - BLF_draw_default_ascii(x_region+4, y_region+4, 0.0f, lbl, strlen(lbl)); + snprintf(lbl, sizeof(lbl), "%i", umin); + fontw = BLF_width_default(lbl, strlen(lbl)); + snprintf(lbl, sizeof(lbl), "%i", umax); + i = BLF_width_default(lbl, strlen(lbl)); + fontw = (i>fontw) ? i : fontw; + grid_x_spacing = 1.0 * BLI_rcti_size_x(&ar->v2d.mask) / BLI_rctf_size_x(&ar->v2d.cur); + grid_y_spacing = 1.0 * BLI_rcti_size_y(&ar->v2d.mask) / BLI_rctf_size_y(&ar->v2d.cur); + if (grid_x_spacing>fontw) { + for (i=umin; i<=umax; i++) { + x_view=i; y_view=vmin-widget_unit; + UI_view2d_view_to_region(&ar->v2d, x_view, y_view, &x_region, &y_region); + snprintf(lbl, sizeof(lbl), "%i", (int)i); + if (y_region < mask.ymin) y_region = mask.ymin; + if (y_region > ymax_region-fonth-4) y_region = ymax_region-fonth-4; + BLF_draw_default_ascii(x_region+4, y_region+4, 0.0f, lbl, strlen(lbl)); + } } - for (i=vmin; i<=vmax; i++) { - x_view=umin-widget_unit; y_view=i; - UI_view2d_view_to_region(&ar->v2d, x_view, y_view, &x_region, &y_region); - snprintf(lbl, sizeof(lbl), "%i", (int)i); - fontw = BLF_width_default(lbl, strlen(lbl)); - if (x_region < mask.xmin) x_region = mask.xmin; - if (x_region > xmax_region-fontw-4) x_region = xmax_region-fontw-4; - BLF_draw_default_ascii(x_region+4, y_region-fonth-4, 0.0f, lbl, strlen(lbl)); + if (grid_y_spacing>fonth) { + for (i=vmin; i<=vmax; i++) { + x_view=umin-widget_unit; y_view=i; + UI_view2d_view_to_region(&ar->v2d, x_view, y_view, &x_region, &y_region); + snprintf(lbl, sizeof(lbl), "%i", (int)i); + fontw = BLF_width_default(lbl, strlen(lbl)); + if (x_region < mask.xmin) x_region = mask.xmin; + if (x_region > xmax_region-fontw-4) x_region = xmax_region-fontw-4; + BLF_draw_default_ascii(x_region+4, y_region-fonth-4, 0.0f, lbl, strlen(lbl)); + } } /******* (Normalized Coordinates) draw semitransparent domain background *********/ @@ -1004,6 +1016,7 @@ void draw_nurbuv(const struct bContext *C, SpaceImage *sima, ARegion *ar, Scene glEnable(GL_BLEND); glColor4ubv(col1); for (nu=cu->editnurb->nurbs.first; nu; nu=nu->next) { + if (!(nu->flag2&CU_SELECTED2)) continue; BKE_nurbs_domain(nu, &uminf, &umaxf, &vminf, &vmaxf); glRectf(uminf,vminf,umaxf,vmaxf); } @@ -1014,6 +1027,7 @@ void draw_nurbuv(const struct bContext *C, SpaceImage *sima, ARegion *ar, Scene glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); glBegin(GL_QUADS); for (nu=cu->editnurb->nurbs.first; nu; nu=nu->next) { + if (!(nu->flag2&CU_SELECTED2)) continue; NurbEditKnot *ek = BKE_nurbs_editKnot_get(nu); UI_view2d_view_to_region(&ar->v2d, ek->breaksu[0], ek->breaksv[0], &umin, &vmin); UI_view2d_view_to_region(&ar->v2d, ek->breaksu[ek->num_breaksu-1], ek->breaksv[ek->num_breaksv-1], &umax, &vmax); @@ -1051,6 +1065,7 @@ void draw_nurbuv(const struct bContext *C, SpaceImage *sima, ARegion *ar, Scene glBegin(GL_LINE_STRIP); UI_ThemeColor(TH_WIRE); for (nu=cu->editnurb->nurbs.first; nu; nu=nu->next) { + if (!(nu->flag2&CU_SELECTED2)) continue; resoltrim = nu->resol_trim; for (nt=nu->trims.first; nt; nt=nt->next) { j = BKE_nurbTrim_tess(nt, resoltrim, &trim_uv_pnts); @@ -1062,12 +1077,11 @@ void draw_nurbuv(const struct bContext *C, SpaceImage *sima, ARegion *ar, Scene } glEnd(); - if (glGetError()!=GL_NO_ERROR) - printf("ERR! %i\n",glGetError()); /******* (Normalized Coordinates) draw trim control polygon *********/ glBegin(GL_LINE_STRIP); UI_ThemeColor(TH_WIRE_EDIT); for (nu=cu->editnurb->nurbs.first; nu; nu=nu->next) { + if (!(nu->flag2&CU_SELECTED2)) continue; resoltrim = nu->resol_trim; for (nt=nu->trims.first; nt; nt=nt->next) { for (trimnu=nt->nurb_list.first; trimnu; trimnu=trimnu->next) { @@ -1080,13 +1094,12 @@ void draw_nurbuv(const struct bContext *C, SpaceImage *sima, ARegion *ar, Scene } glEnd(); - if (glGetError()!=GL_NO_ERROR) - printf("ERR! %i\n",glGetError()); /******* (Normalized Coordinates) draw handles for control polygon *********/ glPointSize(3); glBegin(GL_POINTS); UI_ThemeColor(TH_WIRE_EDIT); for (nu=cu->editnurb->nurbs.first; nu; nu=nu->next) { + if (!(nu->flag2&CU_SELECTED2)) continue; resoltrim = nu->resol_trim; for (nt=nu->trims.first; nt; nt=nt->next) { for (trimnu=nt->nurb_list.first; trimnu; trimnu=trimnu->next) { @@ -1101,9 +1114,6 @@ void draw_nurbuv(const struct bContext *C, SpaceImage *sima, ARegion *ar, Scene glEnd(); glPointSize(1); - if (glGetError()!=GL_NO_ERROR) - printf("ERR! %i\n",glGetError()); - } void draw_uvedit_main(const struct bContext *C, SpaceImage *sima, ARegion *ar, Scene *scene, Object *obedit, Object *obact) diff --git a/source/blender/editors/uvedit/uvedit_ops.c b/source/blender/editors/uvedit/uvedit_ops.c index 2004bd3bbca..bc84a84077e 100644 --- a/source/blender/editors/uvedit/uvedit_ops.c +++ b/source/blender/editors/uvedit/uvedit_ops.c @@ -2429,7 +2429,7 @@ static int nurbsuv_mouse_select(bContext *C, const float co[2], bool extend) { BLI_assert(cu->editnurb); nearest_trim = NULL; for (nu=cu->editnurb->nurbs.first; nu; nu=nu->next) { - ED_curve_propagate_selected_pts_to_flag2(cu->editnurb); + ED_curve_propagate_selected_pts_to_flag2(cu); /* if (!(nu->flag2 & ~CU_SELECTED2)) continue;*/ ek = BKE_nurbs_editKnot_get(nu); BKE_nurbs_uvbounds(nu, &umin, &umax, &vmin, &vmax); |