Revision: 38843
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=38843
Author:   jwilkins
Date:     2011-07-30 04:36:40 +0000 (Sat, 30 Jul 2011)
Log Message:
-----------
MyPaint BrushLib C wrapper is pretty much complete.  Next step is to integrate 
it into paint_stroke

Modified Paths:
--------------
    branches/soc-2011-onion/extern/brushlib/CMakeLists.txt
    branches/soc-2011-onion/extern/brushlib/brush.hpp
    
branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_brushlib.cpp
    branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_brushlib.h

Modified: branches/soc-2011-onion/extern/brushlib/CMakeLists.txt
===================================================================
--- branches/soc-2011-onion/extern/brushlib/CMakeLists.txt      2011-07-30 
00:21:26 UTC (rev 38842)
+++ branches/soc-2011-onion/extern/brushlib/CMakeLists.txt      2011-07-30 
04:36:40 UTC (rev 38843)
@@ -27,7 +27,6 @@
 ADD_CUSTOM_COMMAND(
        OUTPUT brushsettings.hpp
        COMMAND python ${CMAKE_CURRENT_SOURCE_DIR}/generate.py 
${CMAKE_CURRENT_SOURCE_DIR}
-#      DEPENDS brushsettings.hpp ${CMAKE_CURRENT_SOURCE_DIR}/generate.py
        )
 
 set(INC

Modified: branches/soc-2011-onion/extern/brushlib/brush.hpp
===================================================================
--- branches/soc-2011-onion/extern/brushlib/brush.hpp   2011-07-30 00:21:26 UTC 
(rev 38842)
+++ branches/soc-2011-onion/extern/brushlib/brush.hpp   2011-07-30 04:36:40 UTC 
(rev 38843)
@@ -23,7 +23,7 @@
 #endif
 
 #include <math.h>
-//#include "Python.h"
+#include "Python.h"
 
 #include "brushsettings.hpp"
 #include "mapping.hpp"

Modified: 
branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_brushlib.cpp
===================================================================
--- 
branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_brushlib.cpp  
    2011-07-30 00:21:26 UTC (rev 38842)
+++ 
branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_brushlib.cpp  
    2011-07-30 04:36:40 UTC (rev 38843)
@@ -34,7 +34,10 @@
  *  \ingroup edsculpt
  */
 
+#include "paint_brushlib.h"
+
 #include "MEM_sys_types.h"
+#include "BLI_rand.h"
 
 #include <stdio.h>
 #include <math.h>
@@ -42,21 +45,42 @@
 
 
 
-/* BrushLib uses glib, but Blender does not */
+/* BrushLib uses glib, but Blender does not,
+   so here is a thin wrapper so Blender can continue to not use glib */
 #if !WITH_GLIB
 
 typedef double gdouble;
 
 typedef int gint;
-
-struct GRand;
-GRand *g_rand_new();
-void g_rand_free(GRand *);
-int g_rand_int(GRand *);
-double g_rand_double(GRand *);
 typedef uint32_t guint32;
-void g_rand_set_seed(GRand *, guint32);
 
+typedef RNG GRand;
+
+static inline GRand *g_rand_new()
+{
+       return rng_new(BLI_rand());
+}
+
+static inline void g_rand_free(GRand *rng)
+{
+       rng_free(rng);
+}
+
+static inline int g_rand_int(GRand *rng)
+{
+       return rng_getInt(rng);
+}
+
+static inline double g_rand_double(GRand *rng)
+{
+       return rng_getDouble(rng);
+}
+
+static inline void g_rand_set_seed(GRand *rng, guint32 seed)
+{
+       rng_seed(rng, seed);
+}
+
 #define g_print printf
 
 template <typename A, typename B, typename C>
@@ -98,8 +122,10 @@
 #endif
 
 
+
 /* C99 stuff missing from MSVC */
-#ifdef MSVC
+#ifdef _MSC_VER
+
 #ifndef and
 #define and &&
 #endif
@@ -111,7 +137,6 @@
 #ifndef not
 #define not !
 #endif
-#endif
 
 float hypotf(float a, float b)
 {
@@ -122,8 +147,251 @@
 #define isfinite(A) ((A) < -DBL_MAX || (A) > DBL_MAX)
 #endif
 
+#endif // _MSC_VER
 
 
+
 #include <helpers.hpp>
 #include <surface.hpp>
 #include <brush.hpp>
+
+
+
+class BlenderSurface : public Surface {
+public:
+
+       void set_context(struct bContext *C, struct PaintStroke *stroke)
+       {
+               BlenderSurface::C= C;
+               BlenderSurface::stroke= stroke;
+       }
+
+protected:
+
+       struct bContext *C;
+       struct PaintStroke *stroke;
+
+};
+
+class VPaintSurface : public BlenderSurface {
+public:
+
+       bool draw_dab(
+               float x,
+               float y, 
+               float radius, 
+               float color_r,
+               float color_g,
+               float color_b,
+               float opaque,
+               float hardness = 0.5,
+               float alpha_eraser = 1.0,
+               float aspect_ratio = 1.0,
+               float angle = 0.0,
+               float lock_alpha = 0.0)
+       {
+               return
+                       vpaint_draw_dab(
+                               C,
+                               stroke,
+                               x,
+                               y,
+                               radius,
+                               color_r,
+                               color_g,
+                               color_b,
+                               opaque,
+                               hardness,
+                               alpha_eraser,
+                               aspect_ratio,
+                               angle,
+                               lock_alpha);
+       }
+
+       void get_color(
+               float x,
+               float y, 
+               float radius, 
+               float * color_r,
+               float * color_g,
+               float * color_b,
+               float * color_a)
+       {
+               vpaint_get_color(
+                       C,
+                       stroke,
+                       x,
+                       y,
+                       radius,
+                       color_r,
+                       color_g,
+                       color_b,
+                       color_a);
+       }
+};
+
+class SculptSurface : public BlenderSurface {
+public:
+
+       bool draw_dab(
+               float x,
+               float y, 
+               float radius, 
+               float color_r,
+               float color_g,
+               float color_b,
+               float opaque,
+               float hardness = 0.5,
+               float alpha_eraser = 1.0,
+               float aspect_ratio = 1.0,
+               float angle = 0.0,
+               float lock_alpha = 0.0)
+       {
+               return
+                       sculpt_draw_dab(
+                               C,
+                               stroke,
+                               x,
+                               y,
+                               radius,
+                               color_r,
+                               color_g,
+                               color_b,
+                               opaque,
+                               hardness,
+                               alpha_eraser,
+                               aspect_ratio,
+                               angle,
+                               lock_alpha);
+       }
+
+       void get_color(
+               float x,
+               float y, 
+               float radius, 
+               float * color_r,
+               float * color_g,
+               float * color_b,
+               float * color_a)
+       {
+               sculpt_get_color(
+                       C,
+                       stroke,
+                       x,
+                       y,
+                       radius,
+                       color_r,
+                       color_g,
+                       color_b,
+                       color_a);
+       }
+};
+
+class ImaPaintSurface : public BlenderSurface {
+public:
+
+       bool draw_dab(
+               float x,
+               float y, 
+               float radius, 
+               float color_r,
+               float color_g,
+               float color_b,
+               float opaque,
+               float hardness = 0.5,
+               float alpha_eraser = 1.0,
+               float aspect_ratio = 1.0,
+               float angle = 0.0,
+               float lock_alpha = 0.0)
+       {
+               return
+                       imapaint_draw_dab(
+                               C,
+                               stroke,
+                               x,
+                               y,
+                               radius,
+                               color_r,
+                               color_g,
+                               color_b,
+                               opaque,
+                               hardness,
+                               alpha_eraser,
+                               aspect_ratio,
+                               angle,
+                               lock_alpha);
+       }
+
+       void get_color(
+               float x,
+               float y, 
+               float radius, 
+               float * color_r,
+               float * color_g,
+               float * color_b,
+               float * color_a)
+       {
+               imapaint_get_color(
+                       C,
+                       stroke,
+                       x,
+                       y,
+                       radius,
+                       color_r,
+                       color_g,
+                       color_b,
+                       color_a);
+       }
+};
+
+struct BrushLibBrush *paint_brushlib_new_brush()
+{
+       return reinterpret_cast<BrushLibBrush *>(new Brush());
+}
+
+void paint_brushlib_free_brush(struct BrushLibBrush *brush)
+{
+       delete reinterpret_cast<Brush *>(brush);
+}
+
+int paint_brushlib_stroke_to(
+       struct BrushLibBrush *brushlib_brush,
+       struct BrushLibSurface *brushlib_surface,
+       float x,
+       float y,
+       float pressure,
+       float xtilt,
+       float ytilt,
+       float dtime)
+{
+       Brush   *brush=   reinterpret_cast<Brush *>   (brushlib_brush);
+       Surface *surface= reinterpret_cast<Surface *> (brushlib_surface);
+
+       return brush->stroke_to(surface, x, y, pressure, xtilt, ytilt, dtime);
+}
+
+struct BrushLibSurface *vpaint_brushlib_surface_new()
+{
+       return reinterpret_cast<BrushLibSurface *>(new VPaintSurface());
+}
+
+struct BrushLibSurface *sculpt_brushlib_surface_new()
+{
+       return reinterpret_cast<BrushLibSurface *>(new SculptSurface());
+}
+
+struct BrushLibSurface *imapaint_brushlib_surface_new()
+{
+       return reinterpret_cast<BrushLibSurface *>(new ImaPaintSurface());
+}
+
+void brushlib_surface_set_context(
+       struct BrushLibSurface *brushlib_surface,
+       bContext *C,
+       struct PaintStroke *stroke)
+{
+       BlenderSurface *blender_surface=
+               reinterpret_cast<BlenderSurface *>(brushlib_surface);
+
+       blender_surface->set_context(C, stroke);
+}

Modified: 
branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_brushlib.h
===================================================================
--- 
branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_brushlib.h    
    2011-07-30 00:21:26 UTC (rev 38842)
+++ 
branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_brushlib.h    
    2011-07-30 04:36:40 UTC (rev 38843)
@@ -37,4 +37,121 @@
 #ifndef PAINT_BRUSHLIB_H
 #define PAINT_BRUSHLIB_H
 
+#ifdef __cplusplus
+extern "C" {
 #endif
+
+int vpaint_draw_dab(
+       struct bContext *C,
+       struct PaintStroke *stroke,
+       float x,
+       float y, 
+       float radius, 
+       float color_r,
+       float color_g,
+       float color_b,
+       float opaque,
+       float hardness,
+       float alpha_eraser,
+       float aspect_ratio,
+       float angle,
+       float lock_alpha);
+
+void vpaint_get_color(
+       struct bContext *C,
+       struct PaintStroke *stroke,
+       float x,
+       float y, 
+       float radius, 
+       float * color_r,
+       float * color_g,
+       float * color_b,
+       float * color_a);
+
+int sculpt_draw_dab(
+       struct bContext *C,
+       struct PaintStroke *stroke,
+       float x,
+       float y, 
+       float radius, 
+       float color_r,
+       float color_g,
+       float color_b,
+       float opaque,
+       float hardness,
+       float alpha_eraser,
+       float aspect_ratio,
+       float angle,
+       float lock_alpha);
+
+void sculpt_get_color(
+       struct bContext *C,
+       struct PaintStroke *stroke,
+       float x,
+       float y, 
+       float radius, 
+       float * color_r,
+       float * color_g,
+       float * color_b,
+       float * color_a);
+
+int imapaint_draw_dab(
+       struct bContext *C,
+       struct PaintStroke *stroke,
+       float x,
+       float y, 
+       float radius, 
+       float color_r,
+       float color_g,
+       float color_b,
+       float opaque,
+       float hardness,
+       float alpha_eraser,
+       float aspect_ratio,
+       float angle,
+       float lock_alpha);
+
+void imapaint_get_color(
+       struct bContext *C,
+       struct PaintStroke *stroke,
+       float x,
+       float y, 
+       float radius, 
+       float * color_r,
+       float * color_g,
+       float * color_b,
+       float * color_a);
+
+/* BrushLibBrush and BrushLibSurface are opaque handles
+   There is no struct definition */
+
+struct BrushLibBrush *paint_brushlib_new_brush(void);
+
+void paint_brushlib_free_brush(struct BrushLibBrush *brush);
+
+int paint_brushlib_stroke_to(
+       struct BrushLibBrush *brushlib_brush,
+       struct BrushLibSurface *brushlib_surface,
+       float x,
+       float y,
+       float pressure,
+       float xtilt,
+       float ytilt,
+       float dtime);
+
+struct BrushLibSurface *vpaint_brushlib_surface_new(void);
+
+struct BrushLibSurface *sculpt_brushlib_surface_new(void);
+
+struct BrushLibSurface *imapaint_brushlib_surface_new(void);
+
+void paint_brushlib_surface_set_context(
+       struct BrushLibSurface *brushlib_surface,
+       bContext *C,
+       struct PaintStroke *stroke);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to