[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [39112] branches/soc-2011-onion/source/ blender: Smooth uv brush
Antony Riakiotakis
kalast at gmail.com
Sun Aug 7 03:35:39 CEST 2011
Revision: 39112
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=39112
Author: psy-fi
Date: 2011-08-07 01:35:35 +0000 (Sun, 07 Aug 2011)
Log Message:
-----------
Smooth uv brush
=================
-Some operator custom data defined
-Code made so far to get a feel for how brushes handle coordinates in uv editor. A minor problem with brush size remains.
-Better poll function for uv smooth brushes (could be used for objecs other than meshes causing crashes)
-a few warning fixes
Modified Paths:
--------------
branches/soc-2011-onion/source/blender/blenkernel/BKE_paint.h
branches/soc-2011-onion/source/blender/editors/include/ED_sculpt.h
branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_image.c
branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_uv.c
Modified: branches/soc-2011-onion/source/blender/blenkernel/BKE_paint.h
===================================================================
--- branches/soc-2011-onion/source/blender/blenkernel/BKE_paint.h 2011-08-06 23:25:13 UTC (rev 39111)
+++ branches/soc-2011-onion/source/blender/blenkernel/BKE_paint.h 2011-08-07 01:35:35 UTC (rev 39112)
@@ -47,6 +47,9 @@
struct PBVH;
struct Scene;
struct StrokeCache;
+struct PaintPersistentBase;
+struct PaintSessionMeshcache;
+struct PaintSessionTexcache;
void paint_init(struct Paint *p, int ob_mode);
void free_paint(struct Paint *p);
Modified: branches/soc-2011-onion/source/blender/editors/include/ED_sculpt.h
===================================================================
--- branches/soc-2011-onion/source/blender/editors/include/ED_sculpt.h 2011-08-06 23:25:13 UTC (rev 39111)
+++ branches/soc-2011-onion/source/blender/editors/include/ED_sculpt.h 2011-08-07 01:35:35 UTC (rev 39112)
@@ -38,6 +38,7 @@
struct RegionView3D;
struct wmKeyConfig;
struct wmWindowManager;
+struct ViewContext;
/* sculpt.c */
void ED_operatortypes_sculpt(void);
Modified: branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_image.c
===================================================================
--- branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_image.c 2011-08-06 23:25:13 UTC (rev 39111)
+++ branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_image.c 2011-08-07 01:35:35 UTC (rev 39112)
@@ -51,6 +51,7 @@
#include "BLI_memarena.h"
#include "BLI_threads.h"
#include "BLI_utildefines.h"
+#include "BLI_editVert.h"
#include "PIL_time.h"
@@ -89,6 +90,7 @@
#include "ED_screen.h"
#include "ED_sculpt.h"
#include "ED_view3d.h"
+#include "ED_mesh.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -4541,14 +4543,20 @@
static int uv_smooth_brush_poll(const bContext *C)
{
+ EditMesh *em;
+ int ret;
Object *obedit = CTX_data_edit_object(C);
SpaceImage *sima= CTX_wm_space_image(C);
ToolSettings *toolsettings = CTX_data_scene(C)->toolsettings;
- if(!uv_smooth_brush(C) || !obedit)
+ if(!uv_smooth_brush(C) || !obedit || obedit->type != OB_MESH)
return 0;
- if(sima) {
+ em = BKE_mesh_get_editmesh(obedit->data);
+ ret = EM_texFaceCheck(em);
+ BKE_mesh_end_editmesh(obedit->data, em);
+
+ if(ret && sima) {
ARegion *ar= CTX_wm_region(C);
if((toolsettings->use_uv_smooth) && ar->regiontype==RGN_TYPE_WINDOW)
return 1;
@@ -5011,7 +5019,7 @@
RNA_def_collection_runtime(ot->srna, "stroke", &RNA_OperatorStrokeElement, "Stroke", "");
}
-static int get_imapaint_zoom(bContext *C, float *zoomx, float *zoomy)
+int get_imapaint_zoom(bContext *C, float *zoomx, float *zoomy)
{
RegionView3D *rv3d= CTX_wm_region_view3d(C);
Modified: branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_uv.c
===================================================================
--- branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_uv.c 2011-08-06 23:25:13 UTC (rev 39111)
+++ branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_uv.c 2011-08-07 01:35:35 UTC (rev 39112)
@@ -38,16 +38,20 @@
#include "MEM_guardedalloc.h"
#include "BLI_utildefines.h"
+#include "BLI_editVert.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
#include "DNA_brush_types.h"
+#include "DNA_meshdata_types.h"
#include "BKE_brush.h"
+#include "BKE_paint.h"
#include "BKE_context.h"
#include "BKE_main.h"
#include "BKE_depsgraph.h"
#include "BKE_mesh.h"
+#include "BKE_customdata.h"
#include "ED_screen.h"
@@ -60,15 +64,67 @@
#include "paint_intern.h"
+#include "UI_view2d.h"
+
+typedef struct UvAdjacencyElement {
+ /* pointer to original uv of MTFace */
+ float *uv[2];
+ /* similar to uvvertmaps, holds the next uv corresponding to the vertex */
+ struct UvAdjacencyElement *next;
+} UvAdjacencyElement;
+
+typedef struct UvAdjacencyEdge {
+ UvAdjacencyElement *uv1;
+ UvAdjacencyElement *uv2;
+}UvAdjacencyEdge;
+
+/* custom data for uv smoothing brush */
typedef struct SmoothBrushData{
+ /* All uvs of the mesh */
+ UvAdjacencyElement *uvs;
+
+ /* Contains pointers to the first of each set of coincident uvs.
+ * These will be used to perform smoothing on and propagate the changes
+ * to their coincident uvs */
+ UvAdjacencyElement **uvCoincidentBases;
+
+ /* Edges used for adjacency info, used with laplacian smoothing */
+ UvAdjacencyEdge *uvedges;
+
/* Timer to be used for airbrush-type brush */
wmTimer *timer;
+
+ /* uvsmooth Paint for fast reference */
+ Paint *uvpaint
}SmoothBrushData;
-static void uv_smooth_stroke_apply(bContext *C, wmOperator *op, wmEvent *event)
+static void uv_smooth_stroke_apply(bContext *C, wmOperator *op, wmEvent *event, Object *obedit)
{
- printf("little ducks\n");
+ float co[2], radius;
+ ARegion *ar= CTX_wm_region(C);
+ EditMesh *em = BKE_mesh_get_editmesh(obedit->data);
+ EditFace *efa;
+ SmoothBrushData *smoothbrushdata = (SmoothBrushData *)op->customdata;
+
+ UI_view2d_region_to_view(&ar->v2d, event->mval[0], event->mval[1], &co[0], &co[1]);
+
+ radius = brush_size(paint_brush(smoothbrushdata->uvpaint));
+ //ED_space_image_size(sima, &width, &height);
+
+ for(efa = em->faces.first; efa; efa= efa->next){
+ int nverts, i;
+ MTFace *mt = CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
+ nverts = efa->v4 ? 4 : 3;
+
+ for(i = 0; i < nverts; i++)
+ {
+ //if()
+ }
+ }
+ /* for tradition's sake */
+ printf("little ducks coords: %f %f, brush size: %f\n", co[0], co[1], radius);
+ BKE_mesh_end_editmesh(obedit->data, em);
}
@@ -82,29 +138,29 @@
op->customdata = NULL;
}
-static int uv_smooth_stroke_init(bContext *UNUSED(C), wmOperator *op)
+static SmoothBrushData *uv_smooth_stroke_init(bContext *C, wmOperator *op)
{
+ Scene *scene = CTX_data_scene(C);
+ ToolSettings *ts = scene->toolsettings;
SmoothBrushData *data = MEM_mallocN(sizeof(*data), "UV Smooth Brush Data");
- if(data)
- {
- op->customdata = data;
- return 1;
+ op->customdata = data;
+ if(data){
+ data->uvpaint = &ts->uvsmooth->paint;
}
- else
- return 0;
+ return op->customdata;
}
static int uv_smooth_stroke_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
SmoothBrushData *data;
+ Object *obedit = CTX_data_edit_object(C);
- if(!uv_smooth_stroke_init(C, op)) {
+ if(!(data = uv_smooth_stroke_init(C, op))) {
return OPERATOR_CANCELLED;
}
- uv_smooth_stroke_apply(C, op, event);
+ uv_smooth_stroke_apply(C, op, event, obedit);
- data = op->customdata;
data->timer= WM_event_add_timer(CTX_wm_manager(C), CTX_wm_window(C), TIMER, 0.01f);
if(!data->timer){
@@ -118,10 +174,12 @@
static int uv_smooth_stroke_exec(bContext *C, wmOperator *op)
{
+ Object *obedit = CTX_data_edit_object(C);
+
if(!uv_smooth_stroke_init(C, op)) {
return OPERATOR_CANCELLED;
}
-// uv_smooth_stroke_apply(C, op, event);
+// uv_smooth_stroke_apply(C, op, event, obedit);
uv_smooth_stroke_exit(C, op);
return OPERATOR_FINISHED;
@@ -140,11 +198,11 @@
return OPERATOR_FINISHED;
case MOUSEMOVE:
case INBETWEEN_MOUSEMOVE:
- uv_smooth_stroke_apply(C, op, event);
+ uv_smooth_stroke_apply(C, op, event, obedit);
break;
case TIMER:
if(event->customdata == data->timer)
- uv_smooth_stroke_apply(C, op, event);
+ uv_smooth_stroke_apply(C, op, event, obedit);
break;
default:
return OPERATOR_RUNNING_MODAL;
More information about the Bf-blender-cvs
mailing list