[Bf-blender-cvs] [ef4478c] soc-2014-nurbs: Selective selection based on what is selected in 3dview

Jonathan deWerd noreply at git.blender.org
Thu Aug 14 18:31:34 CEST 2014


Commit: ef4478c62b2c4f03586b5370d3be61f875b1586e
Author: Jonathan deWerd
Date:   Wed Aug 13 17:02:12 2014 -0400
Branches: soc-2014-nurbs
https://developer.blender.org/rBef4478c62b2c4f03586b5370d3be61f875b1586e

Selective selection based on what is selected in 3dview

===================================================================

M	source/blender/blenkernel/BKE_curve.h
M	source/blender/blenkernel/intern/curve.cpp
M	source/blender/editors/curve/editcurve.c
M	source/blender/editors/include/ED_curve.h
M	source/blender/editors/io/io_rhino_import.cpp
M	source/blender/editors/uvedit/uvedit_draw.c
M	source/blender/editors/uvedit/uvedit_ops.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_curve.h b/source/blender/blenkernel/BKE_curve.h
index 658e590..589b56b 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 77d30e8..bcb6b17 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 752d875..06358da 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 3e93351..3fe5ddb 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 0eea7f5..eb67b13 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 e67461b..112e404 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-f

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list