Revision: 19305
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19305
Author:   theeth
Date:     2009-03-16 03:55:42 +0100 (Mon, 16 Mar 2009)

Log Message:
-----------
Merging etch-a-ton branch in trunk.

Slightly out of date documentation in wiki, I'll be updating that tomorrow.

http://wiki.blender.org/index.php/User:Theeth/etch-a-ton

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/object.c
    trunk/blender/source/blender/blenlib/BLI_arithb.h
    trunk/blender/source/blender/blenlib/BLI_graph.h
    trunk/blender/source/blender/blenlib/intern/arithb.c
    trunk/blender/source/blender/blenlib/intern/graph.c
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/include/BIF_editarmature.h
    trunk/blender/source/blender/include/BIF_space.h
    trunk/blender/source/blender/include/BIF_transform.h
    trunk/blender/source/blender/include/reeb.h
    trunk/blender/source/blender/makesdna/DNA_scene_types.h
    trunk/blender/source/blender/python/api2_2x/Armature.c
    trunk/blender/source/blender/python/api2_2x/Bone.c
    trunk/blender/source/blender/src/buttons_editing.c
    trunk/blender/source/blender/src/drawview.c
    trunk/blender/source/blender/src/edit.c
    trunk/blender/source/blender/src/editarmature.c
    trunk/blender/source/blender/src/gpencil.c
    trunk/blender/source/blender/src/header_view3d.c
    trunk/blender/source/blender/src/reeb.c
    trunk/blender/source/blender/src/space.c
    trunk/blender/source/blender/src/transform_snap.c
    trunk/blender/source/blender/src/usiblender.c
    trunk/blender/source/blender/src/view.c

Added Paths:
-----------
    trunk/blender/source/blender/include/BDR_sketch.h
    trunk/blender/source/blender/include/BIF_generate.h
    trunk/blender/source/blender/include/BIF_retarget.h
    trunk/blender/source/blender/include/BIF_sketch.h
    trunk/blender/source/blender/src/editarmature_generate.c
    trunk/blender/source/blender/src/editarmature_retarget.c
    trunk/blender/source/blender/src/editarmature_sketch.c

Removed Paths:
-------------
    trunk/blender/source/blender/src/autoarmature.c

Modified: trunk/blender/source/blender/blenkernel/intern/object.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/object.c     2009-03-16 
02:39:56 UTC (rev 19304)
+++ trunk/blender/source/blender/blenkernel/intern/object.c     2009-03-16 
02:55:42 UTC (rev 19305)
@@ -521,6 +521,7 @@
        while(sce) {
                if(sce->id.lib==NULL) {
                        if(sce->camera==ob) sce->camera= NULL;
+                       if(sce->toolsettings->skgen_template==ob) 
sce->toolsettings->skgen_template = NULL;
                }
                sce= sce->id.next;
        }

Modified: trunk/blender/source/blender/blenlib/BLI_arithb.h
===================================================================
--- trunk/blender/source/blender/blenlib/BLI_arithb.h   2009-03-16 02:39:56 UTC 
(rev 19304)
+++ trunk/blender/source/blender/blenlib/BLI_arithb.h   2009-03-16 02:55:42 UTC 
(rev 19305)
@@ -391,8 +391,10 @@
 void spheremap(float x, float y, float z, float *u, float *v);
 
 int LineIntersectLine(float v1[3], float v2[3], float v3[3], float v4[3], 
float i1[3], float i2[3]);
+int LineIntersectLineStrict(float v1[3], float v2[3], float v3[3], float 
v4[3], float vi[3], float *lambda);
 int LineIntersectsTriangle(float p1[3], float p2[3], float v0[3], float v1[3], 
float v2[3], float *lambda, float *uv);
 int RayIntersectsTriangle(float p1[3], float d[3], float v0[3], float v1[3], 
float v2[3], float *lambda, float *uv);
+int RayIntersectsTriangleThreshold(float p1[3], float d[3], float v0[3], float 
v1[3], float v2[3], float *lambda, float *uv, float threshold);
 int SweepingSphereIntersectsTriangleUV(float p1[3], float p2[3], float radius, 
float v0[3], float v1[3], float v2[3], float *lambda, float *ipoint);
 int AxialLineIntersectsTriangle(int axis, float co1[3], float co2[3], float 
v0[3], float v1[3], float v2[3], float *lambda);
 int AabbIntersectAabb(float min1[3], float max1[3], float min2[3], float 
max2[3]);

Modified: trunk/blender/source/blender/blenlib/BLI_graph.h
===================================================================
--- trunk/blender/source/blender/blenlib/BLI_graph.h    2009-03-16 02:39:56 UTC 
(rev 19304)
+++ trunk/blender/source/blender/blenlib/BLI_graph.h    2009-03-16 02:55:42 UTC 
(rev 19305)
@@ -60,6 +60,39 @@
        int symmetry_flag;
 } BArc;
 
+struct BArcIterator;
+
+void* IT_head(void* iter);
+void* IT_tail(void* iter);
+void* IT_peek(void* iter, int n);
+void* IT_next(void* iter);
+void* IT_nextN(void* iter, int n);
+void* IT_previous(void* iter);
+int   IT_stopped(void* iter);
+
+typedef void* (*HeadFct)(void* iter);
+typedef void* (*TailFct)(void* iter);
+typedef void* (*PeekFct)(void* iter, int n);
+typedef void* (*NextFct)(void* iter);
+typedef void* (*NextNFct)(void* iter, int n);
+typedef void* (*PreviousFct)(void* iter);
+typedef int   (*StoppedFct)(void* iter);
+
+typedef struct BArcIterator {
+       HeadFct         head;
+       TailFct         tail;
+       PeekFct         peek;
+       NextFct         next;
+       NextNFct        nextN;
+       PreviousFct     previous;
+       StoppedFct      stopped;
+       
+       float *p, *no;
+       
+       int length;
+       int index;
+} BArcIterator;
+
 /* Helper structure for radial symmetry */
 typedef struct RadialArc
 {

Modified: trunk/blender/source/blender/blenlib/intern/arithb.c
===================================================================
--- trunk/blender/source/blender/blenlib/intern/arithb.c        2009-03-16 
02:39:56 UTC (rev 19304)
+++ trunk/blender/source/blender/blenlib/intern/arithb.c        2009-03-16 
02:55:42 UTC (rev 19305)
@@ -3896,6 +3896,57 @@
        return 1;
 }
 
+int RayIntersectsTriangleThreshold(float p1[3], float d[3], float v0[3], float 
v1[3], float v2[3], float *lambda, float *uv, float threshold)
+{
+       float p[3], s[3], e1[3], e2[3], q[3];
+       float a, f, u, v;
+       float du = 0, dv = 0;
+       
+       VecSubf(e1, v1, v0);
+       VecSubf(e2, v2, v0);
+       
+       Crossf(p, d, e2);
+       a = Inpf(e1, p);
+       if ((a > -0.000001) && (a < 0.000001)) return 0;
+       f = 1.0f/a;
+       
+       VecSubf(s, p1, v0);
+       
+       Crossf(q, s, e1);
+       *lambda = f * Inpf(e2, q);
+       if ((*lambda < 0.0)) return 0;
+       
+       u = f * Inpf(s, p);
+       v = f * Inpf(d, q);
+       
+       if (u < 0) du = u;
+       if (u > 1) du = u - 1;
+       if (v < 0) dv = v;
+       if (v > 1) dv = v - 1;
+       if (u > 0 && v > 0 && u + v > 1)
+       {
+               float t = u + v - 1;
+               du = u - t/2;
+               dv = v - t/2;
+       }
+
+       VecMulf(e1, du);
+       VecMulf(e2, dv);
+       
+       if (Inpf(e1, e1) + Inpf(e2, e2) > threshold * threshold)
+       {
+               return 0;
+       }
+
+       if(uv) {
+               uv[0]= u;
+               uv[1]= v;
+       }
+       
+       return 1;
+}
+
+
 /* Adapted from the paper by Kasper Fauerby */
 /* "Improved Collision detection and Response" */
 static int getLowestRoot(float a, float b, float c, float maxR, float* root)
@@ -4245,6 +4296,67 @@
        }
 } 
 
+/* Intersection point strictly between the two lines
+ * 0 when no intersection is found 
+ * */
+int LineIntersectLineStrict(float v1[3], float v2[3], float v3[3], float 
v4[3], float vi[3], float *lambda)
+{
+       float a[3], b[3], c[3], ab[3], cb[3], ca[3], dir1[3], dir2[3];
+       float d;
+       float d1;
+       
+       VecSubf(c, v3, v1);
+       VecSubf(a, v2, v1);
+       VecSubf(b, v4, v3);
+
+       VecCopyf(dir1, a);
+       Normalize(dir1);
+       VecCopyf(dir2, b);
+       Normalize(dir2);
+       d = Inpf(dir1, dir2);
+       if (d == 1.0f || d == -1.0f || d == 0) {
+               /* colinear or one vector is zero-length*/
+               return 0;
+       }
+       
+       d1 = d;
+
+       Crossf(ab, a, b);
+       d = Inpf(c, ab);
+
+       /* test if the two lines are coplanar */
+       if (d > -0.000001f && d < 0.000001f) {
+               float f1, f2;
+               Crossf(cb, c, b);
+               Crossf(ca, c, a);
+
+               f1 = Inpf(cb, ab) / Inpf(ab, ab);
+               f2 = Inpf(ca, ab) / Inpf(ab, ab);
+               
+               if (f1 >= 0 && f1 <= 1 &&
+                       f2 >= 0 && f2 <= 1)
+               {
+                       VecMulf(a, f1);
+                       VecAddf(vi, v1, a);
+                       
+                       if (lambda != NULL)
+                       {
+                               *lambda = f1;
+                       }
+                       
+                       return 1; /* intersection found */
+               }
+               else
+               {
+                       return 0;
+               }
+       }
+       else
+       {
+               return 0;
+       }
+} 
+
 int AabbIntersectAabb(float min1[3], float max1[3], float min2[3], float 
max2[3])
 {
        return (min1[0]<max2[0] && min1[1]<max2[1] && min1[2]<max2[2] &&

Modified: trunk/blender/source/blender/blenlib/intern/graph.c
===================================================================
--- trunk/blender/source/blender/blenlib/intern/graph.c 2009-03-16 02:39:56 UTC 
(rev 19304)
+++ trunk/blender/source/blender/blenlib/intern/graph.c 2009-03-16 02:55:42 UTC 
(rev 19305)
@@ -465,8 +465,6 @@
 
 int BLI_subtreeShape(BGraph *graph, BNode *node, BArc *rootArc, int 
include_root)
 {
-       BNode *test_node;
-       
        BLI_flagNodes(graph, 0);
        return subtreeShape(node, rootArc, include_root);
 }
@@ -1033,6 +1031,11 @@
        BNode *node;
        BArc *arc;
        
+       if (root_node == NULL)
+       {
+               return;
+       }
+       
        if (BLI_isGraphCyclic(graph))
        {
                return;
@@ -1085,3 +1088,56 @@
        }
 }
 
+void* IT_head(void* arg)
+{
+       BArcIterator *iter = (BArcIterator*)arg; 
+       return iter->head(iter);
+}
+
+void* IT_tail(void* arg)
+{
+       BArcIterator *iter = (BArcIterator*)arg; 
+       return iter->tail(iter); 
+}
+
+void* IT_peek(void* arg, int n)
+{
+       BArcIterator *iter = (BArcIterator*)arg;
+       
+       if (iter->index + n < 0)
+       {
+               return iter->head(iter);
+       }
+       else if (iter->index + n >= iter->length)
+       {
+               return iter->tail(iter);
+       }
+       else
+       {
+               return iter->peek(iter, n);
+       }
+}
+
+void* IT_next(void* arg)
+{
+       BArcIterator *iter = (BArcIterator*)arg; 
+       return iter->next(iter);
+}
+
+void* IT_nextN(void* arg, int n)
+{
+       BArcIterator *iter = (BArcIterator*)arg; 
+       return iter->nextN(iter, n);
+}
+
+void* IT_previous(void* arg)
+{
+       BArcIterator *iter = (BArcIterator*)arg; 
+       return iter->previous(iter);
+}
+
+int   IT_stopped(void* arg)
+{
+       BArcIterator *iter = (BArcIterator*)arg; 
+       return iter->stopped(iter);
+}

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c   2009-03-16 
02:39:56 UTC (rev 19304)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c   2009-03-16 
02:55:42 UTC (rev 19305)
@@ -3477,6 +3477,9 @@
                        sce->toolsettings->imapaint.brush=
                                newlibadr_us(fd, sce->id.lib, 
sce->toolsettings->imapaint.brush);
 
+       
+                       sce->toolsettings->skgen_template = newlibadr(fd, 
sce->id.lib, sce->toolsettings->skgen_template);
+
                        /* Sculptdata textures */
                        for(a=0; a<MAX_MTEX; ++a) {
                                MTex *mtex= sce->sculptdata.mtex[a];
@@ -7387,28 +7390,6 @@
                                ima->flag |= IMA_DO_PREMUL;
                        }
                }
-
-               if (main->versionfile < 245 || main->subversionfile < 12)
-               {
-                       /* initialize skeleton generation toolsettings */
-                       for(sce=main->scene.first; sce; sce = sce->id.next)
-                       {
-                               sce->toolsettings->skgen_resolution = 50;
-                               sce->toolsettings->skgen_threshold_internal     
= 0.01f;
-                               sce->toolsettings->skgen_threshold_external     
= 0.01f;
-                               sce->toolsettings->skgen_angle_limit            
        = 45.0f;
-                               sce->toolsettings->skgen_length_ratio           
        = 1.3f;
-                               sce->toolsettings->skgen_length_limit           
        = 1.5f;
-                               sce->toolsettings->skgen_correlation_limit      
        = 0.98f;
-                               sce->toolsettings->skgen_symmetry_limit         
        = 0.1f;
-                               sce->toolsettings->skgen_postpro = SKGEN_SMOOTH;
-                               sce->toolsettings->skgen_postpro_passes = 1;
-                               sce->toolsettings->skgen_options = 
SKGEN_FILTER_INTERNAL|SKGEN_FILTER_EXTERNAL|SKGEN_SUB_CORRELATION;
-                               sce->toolsettings->skgen_subdivisions[0] = 
SKGEN_SUB_CORRELATION;
-                               sce->toolsettings->skgen_subdivisions[1] = 
SKGEN_SUB_LENGTH;
-                               sce->toolsettings->skgen_subdivisions[2] = 
SKGEN_SUB_ANGLE;
-                       }
-               }
        }
        
        /* sanity check for skgen
@@ -8016,10 +7997,34 @@
                for (sce= main->scene.first; sce; sce= sce->id.next) {
                        sce->toolsettings->imapaint.seam_bleed = 2;
                        sce->toolsettings->imapaint.normal_angle = 80;
+
+                       /* initialize skeleton generation toolsettings */
+                       sce->toolsettings->skgen_resolution = 250;
+                       sce->toolsettings->skgen_threshold_internal     = 0.1f;
+                       sce->toolsettings->skgen_threshold_external     = 0.1f;
+                       sce->toolsettings->skgen_angle_limit                    
= 30.0f;
+                       sce->toolsettings->skgen_length_ratio                   
= 1.3f;
+                       sce->toolsettings->skgen_length_limit                   
= 1.5f;
+                       sce->toolsettings->skgen_correlation_limit              
= 0.98f;
+                       sce->toolsettings->skgen_symmetry_limit                 
= 0.1f;
+                       sce->toolsettings->skgen_postpro = SKGEN_SMOOTH;
+                       sce->toolsettings->skgen_postpro_passes = 3;
+                       sce->toolsettings->skgen_options = 
SKGEN_FILTER_INTERNAL|SKGEN_FILTER_EXTERNAL|SKGEN_FILTER_SMART|SKGEN_SUB_CORRELATION|SKGEN_HARMONIC;
+                       sce->toolsettings->skgen_subdivisions[0] = 
SKGEN_SUB_CORRELATION;
+                       sce->toolsettings->skgen_subdivisions[1] = 
SKGEN_SUB_LENGTH;
+                       sce->toolsettings->skgen_subdivisions[2] = 
SKGEN_SUB_ANGLE;
+
+                       
+                       sce->toolsettings->skgen_retarget_angle_weight = 1.0f;
+                       sce->toolsettings->skgen_retarget_length_weight = 1.0f;

@@ Diff output truncated at 10240 characters. @@

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

Reply via email to