[Bf-blender-cvs] [54e68e1] soc-2014-nurbs: NURBS UV Editor

Jonathan deWerd noreply at git.blender.org
Sat Aug 9 10:18:18 CEST 2014


Commit: 54e68e1b1e58af2b0a799307fc180670705b9332
Author: Jonathan deWerd
Date:   Thu Aug 7 23:29:04 2014 -0400
Branches: soc-2014-nurbs
https://developer.blender.org/rB54e68e1b1e58af2b0a799307fc180670705b9332

NURBS UV Editor

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

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/include/ED_uvedit.h
M	source/blender/editors/io/io_rhino_import.cpp
M	source/blender/editors/space_image/image_draw.c
M	source/blender/editors/space_image/space_image.c
M	source/blender/editors/uvedit/uvedit_draw.c
M	source/blender/makesdna/DNA_curve_types.h

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

diff --git a/source/blender/blenkernel/intern/curve.cpp b/source/blender/blenkernel/intern/curve.cpp
index 1909ddb..993b465 100644
--- a/source/blender/blenkernel/intern/curve.cpp
+++ b/source/blender/blenkernel/intern/curve.cpp
@@ -617,12 +617,10 @@ Nurb *BKE_nurb_duplicate(Nurb *nu)
 	newnu->trims.first = newnu->trims.last = NULL;
 	for (NurbTrim *nt = (NurbTrim*)nu->trims.first; nt; nt=nt->next) {
 		NurbTrim *dup_nt = BKE_nurbTrim_duplicate(nt);
-		printf("\tTrim: 0x%lx->0x%lx\n",nt,dup_nt);
 		BLI_addtail(&newnu->trims, dup_nt);
 	}
 	BKE_nurb_clear_cached_UV_mesh(newnu,false);
 
-	printf("Duplicated nurb 0x%lx->0x%lx\n",nu,newnu);
 	return newnu;
 }
 
diff --git a/source/blender/editors/curve/editcurve.c b/source/blender/editors/curve/editcurve.c
index bb06f29..2a83104 100644
--- a/source/blender/editors/curve/editcurve.c
+++ b/source/blender/editors/curve/editcurve.c
@@ -1395,6 +1395,7 @@ void ED_curve_deselect_all(EditNurb *editnurb)
 	int a;
 
 	for (nu = editnurb->nurbs.first; nu; nu = nu->next) {
+		nu->flag2 &= ~CU_SELECTED2;
 		if (nu->bezt) {
 			BezTriple *bezt;
 			for (bezt = nu->bezt, a = 0; a < nu->pntsu; a++, bezt++) {
@@ -1417,6 +1418,7 @@ void ED_curve_select_all(EditNurb *editnurb)
 	Nurb *nu;
 	int a;
 	for (nu = editnurb->nurbs.first; nu; nu = nu->next) {
+		nu->flag2 |= CU_SELECTED2;
 		if (nu->bezt) {
 			BezTriple *bezt;
 			for (bezt = nu->bezt, a = 0; a < nu->pntsu; a++, bezt++) {
@@ -1470,6 +1472,23 @@ void ED_curve_select_swap(EditNurb *editnurb, bool hide_handles)
 	}
 }
 
+void ED_curve_propagate_selected_pts_to_flag2(EditNurb *editnurb) {
+	Nurb *nu;
+	int numpts, i;
+
+	for (nu=editnurb->nurbs.first; nu; nu=nu->next) {
+		if (nu->type != CU_NURBS) continue;
+		numpts = nu->pntsu * nu->pntsv;
+		nu->flag2 &= ~CU_SELECTED2;
+		for (i=0; i<numpts; i++) {
+			if (nu->bp[i].f1 & SELECT) {
+				nu->flag2 |= CU_SELECTED2;
+				break;
+			}
+		}
+	}
+}
+
 /******************** transform operator **********************/
 
 void ED_curve_transform(Curve *cu, float mat[4][4])
diff --git a/source/blender/editors/include/ED_curve.h b/source/blender/editors/include/ED_curve.h
index 4725cf8..3e93351 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    undo_push_curve(struct bContext *C, const char *name);
 ListBase *object_editcurve_get(struct Object *ob);
diff --git a/source/blender/editors/include/ED_uvedit.h b/source/blender/editors/include/ED_uvedit.h
index 04eb829..6e2adac 100644
--- a/source/blender/editors/include/ED_uvedit.h
+++ b/source/blender/editors/include/ED_uvedit.h
@@ -104,7 +104,7 @@ void ED_unwrap_lscm(struct Scene *scene, struct Object *obedit, const short sel)
 
 /* uvedit_draw.c */
 void draw_image_cursor(struct ARegion *ar, const float cursor[2]);
-void draw_uvedit_main(struct SpaceImage *sima, struct ARegion *ar, struct Scene *scene, struct Object *obedit, struct Object *obact);
+void draw_uvedit_main(const struct bContext *C, struct SpaceImage *sima, struct ARegion *ar, struct Scene *scene, struct Object *obedit, struct Object *obact);
 
 /* uvedit_buttons.c */
 void ED_uvedit_buttons_register(struct ARegionType *art);
diff --git a/source/blender/editors/io/io_rhino_import.cpp b/source/blender/editors/io/io_rhino_import.cpp
index 815d581..dac256d 100644
--- a/source/blender/editors/io/io_rhino_import.cpp
+++ b/source/blender/editors/io/io_rhino_import.cpp
@@ -255,7 +255,7 @@ static void rhino_import_polycurve(bContext *C, ON_PolyCurve *pc, ON_Object *obj
 
 static Nurb *nurb_from_ON_NurbsCurve(ON_NurbsCurve *nc) {
 	Nurb *nu = (Nurb *)MEM_callocN(sizeof(Nurb), "rhino_imported_NURBS_curve");
-	nu->flag = CU_3D + CU_TRIMMED;
+	nu->flag = (nc->Dimension()==2)? CU_2D : CU_3D;
 	nu->type = CU_NURBS;
 	nu->resolu = 10;
 	nu->resolv = 10;
@@ -285,9 +285,7 @@ static Nurb *nurb_from_ON_NurbsCurve(ON_NurbsCurve *nc) {
 	nu->flagu = analyze_knots(nu->knotsu, nu->pntsu+nu->orderu, nu->orderu, nc->IsPeriodic());
 	double minu,maxu;
 	nc->GetDomain(&minu, &maxu);
-	printf("nurb_from_ON_NurbsCurve1 0x%lx: knotsu=0x%lx knotsv=0x%lx\n",nu,nu->knotsu,nu->knotsv);
 	normalize_knots(nu, 'u');
-	printf("nurb_from_ON_NurbsCurve0 0x%lx: knotsu=0x%lx knotsv=0x%lx\n",nu,nu->knotsu,nu->knotsv);
 	return nu;
 }
 
@@ -635,7 +633,7 @@ static Nurb* rhino_import_nurbs_surf(bContext *C,
 	Object *obedit = CTX_data_edit_object(C);
 	Curve *cu = (Curve*)obedit->data;
 	Nurb *nu = (Nurb *)MEM_callocN(sizeof(Nurb), "rhino_imported_NURBS_surf");
-	nu->flag = CU_3D + CU_TRIMMED;
+	nu->flag = CU_3D;
 	nu->type = CU_NURBS;
 	nu->resolu = cu->resolu;
 	nu->resolv = cu->resolv;
@@ -679,7 +677,6 @@ static Nurb* rhino_import_nurbs_surf(bContext *C,
 	
 	ListBase *editnurb = object_editcurve_get(obedit);
 	BLI_addtail(editnurb, nu);
-	printf("BLI_addtail(editnurb, 0x%lx)\n",(long)nu);
 	if (surf_needs_delete) delete surf;
 	return nu;
 }
@@ -738,6 +735,7 @@ static void rhino_import_brep_face(bContext *C,
 	/* Add the trim curves */
 	ON_BrepLoop *outer_loop = face->OuterLoop();
 	int loop_count = face->LoopCount();
+	if (loop_count>0) nu->flag |= CU_TRIMMED;
 	printf("   outer_loop: 0x%lx\n",long(outer_loop));
 	for (int loopnum=0; loopnum<loop_count; loopnum++) {
 		ON_BrepLoop *loop = face->Loop(loopnum);
@@ -754,7 +752,6 @@ static void rhino_import_brep_face(bContext *C,
 			Nurb *trim_nurb = rhino_import_curve(C, cu, parentObj, parentAttrs, false, true, true);
 			BLI_addtail(nurb_list, trim_nurb);
 		}
-		printf("BLI_addtail(&nu->trims, 0x%lx);\n",trim);
 		BLI_addtail(&nu->trims, trim);
 	}
 	
diff --git a/source/blender/editors/space_image/image_draw.c b/source/blender/editors/space_image/image_draw.c
index 5f996f9..171aacc 100644
--- a/source/blender/editors/space_image/image_draw.c
+++ b/source/blender/editors/space_image/image_draw.c
@@ -798,10 +798,11 @@ void draw_image_main(const bContext *C, ARegion *ar)
 {
 	SpaceImage *sima = CTX_wm_space_image(C);
 	Scene *scene = CTX_data_scene(C);
+	Object *obact = CTX_data_active_object(C);
 	Image *ima;
 	ImBuf *ibuf;
 	float zoomx, zoomy;
-	bool show_viewer, show_render, show_paint;
+	bool show_viewer, show_render, show_paint, show_nurb;
 	void *lock;
 
 	/* XXX can we do this in refresh? */
@@ -831,6 +832,7 @@ void draw_image_main(const bContext *C, ARegion *ar)
 	show_viewer = (ima && ima->source == IMA_SRC_VIEWER) != 0;
 	show_render = (show_viewer && ima->type == IMA_TYPE_R_RESULT) != 0;
 	show_paint = (ima && (sima->mode == SI_MODE_PAINT) && (show_viewer == false) && (show_render == false));
+	show_nurb = (obact && obact->type == OB_SURF);
 
 	if (show_viewer) {
 		/* use locked draw for drawing viewer image buffer since the compositor
@@ -844,14 +846,16 @@ void draw_image_main(const bContext *C, ARegion *ar)
 	ibuf = ED_space_image_acquire_buffer(sima, &lock);
 
 	/* draw the image or grid */
-	if (ibuf == NULL)
-		ED_region_grid_draw(ar, zoomx, zoomy);
-	else if (sima->flag & SI_DRAW_TILE)
+	if (ibuf == NULL) {
+		/* NURBS surfaces need to draw their own grid corresponding to their own UV coords. */
+		if (!show_nurb) ED_region_grid_draw(ar, zoomx, zoomy);
+	} else if (sima->flag & SI_DRAW_TILE) {
 		draw_image_buffer_repeated(C, sima, ar, scene, ima, ibuf, zoomx, zoomy);
-	else if (ima && (ima->tpageflag & IMA_TILES))
+	} else if (ima && (ima->tpageflag & IMA_TILES)) {
 		draw_image_buffer_tiled(sima, ar, scene, ima, ibuf, 0.0f, 0.0, zoomx, zoomy);
-	else
+	} else {
 		draw_image_buffer(C, sima, ar, scene, ibuf, 0.0f, 0.0f, zoomx, zoomy);
+	}
 
 	/* paint helpers */
 	if (show_paint)
diff --git a/source/blender/editors/space_image/space_image.c b/source/blender/editors/space_image/space_image.c
index d186895..2efeb59 100644
--- a/source/blender/editors/space_image/space_image.c
+++ b/source/blender/editors/space_image/space_image.c
@@ -682,7 +682,7 @@ static void image_main_area_draw(const bContext *C, ARegion *ar)
 	/* we set view2d from own zoom and offset each time */
 	image_main_area_set_view2d(sima, ar);
 
-	/* we draw image in pixelspace */
+	/* draw grid background, image in pixelspace */
 	draw_image_main(C, ar);
 
 	/* and uvs in 0.0-1.0 space */
@@ -690,7 +690,8 @@ static void image_main_area_draw(const bContext *C, ARegion *ar)
 
 	ED_region_draw_cb_draw(C, ar, REGION_DRAW_PRE_VIEW);
 
-	draw_uvedit_main(sima, ar, scene, obedit, obact);
+	/* draw UV mesh */
+	draw_uvedit_main(C, sima, ar, scene, obedit, obact);
 
 	/* check for mask (delay draw) */
 	if (ED_space_image_show_uvedit(sima, obedit)) {
diff --git a/source/blender/editors/uvedit/uvedit_draw.c b/source/blender/editors/uvedit/uvedit_draw.c
index a1cc23f..fffee0a 100644
--- a/source/blender/editors/uvedit/uvedit_draw.c
+++ b/source/blender/editors/uvedit/uvedit_draw.c
@@ -39,16 +39,21 @@
 #include "DNA_scene_types.h"
 #include "DNA_screen_types.h"
 #include "DNA_space_types.h"
+#include "DNA_curve_types.h"
 
 #include "BLI_math.h"
 #include "BLI_utildefines.h"
 #include "BLI_alloca.h"
 #include "BLI_buffer.h"
 #include "BLI_bitmap.h"
+#include "BLI_rect.h"
+
+#include "BLF_api.h"
 
 #include "BKE_DerivedMesh.h"
 #include "BKE_editmesh.h"
 #include "BKE_scene.h"
+#include "BKE_curve.h"
 
 #include "BIF_gl.h"
 #include "BIF_glutil.h"
@@ -909,25 +914,197 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit)
 	glPointSize(1.0);
 }
 
-void draw_uvedit_main(SpaceImage *sima, ARegion *ar, Scene *scene, Object *obedit, Object *obact)
+void draw_nurbuv(const struct bContext *C, SpaceImage *sima, ARegion *ar, Scene *scene, Object *obedit, Object *obact)
 {
-	ToolSettings *toolsettings = scene->toolsettings;
-	int show_uvedit, show_uvshadow, show_texpaint_uvshadow;
+	Nurb *nu, *trimnu;
+	NurbTrim *nt;
+	Curve *cu;
+	rctf cur;
+	rcti mask;
+	int i,j;
+	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, r

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list