Revision: 43473
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=43473
Author:   psy-fi
Date:     2012-01-17 18:33:08 +0000 (Tue, 17 Jan 2012)
Log Message:
-----------
Smart Stitching
================
*preliminary support for edge stitching.

There are still issues to resolve. This commit reverts to the old behavior of V 
select Ctrl-V deselect that will be fixed later.

Modified Paths:
--------------
    branches/soc-2011-onion-uv-tools/source/blender/blenkernel/BKE_mesh.h
    branches/soc-2011-onion-uv-tools/source/blender/editors/mesh/editmesh_lib.c
    
branches/soc-2011-onion-uv-tools/source/blender/editors/sculpt_paint/sculpt_uv.c
    branches/soc-2011-onion-uv-tools/source/blender/editors/uvedit/uvedit_draw.c
    
branches/soc-2011-onion-uv-tools/source/blender/editors/uvedit/uvedit_intern.h
    
branches/soc-2011-onion-uv-tools/source/blender/editors/uvedit/uvedit_smart_stitch.c

Modified: branches/soc-2011-onion-uv-tools/source/blender/blenkernel/BKE_mesh.h
===================================================================
--- branches/soc-2011-onion-uv-tools/source/blender/blenkernel/BKE_mesh.h       
2012-01-17 18:32:14 UTC (rev 43472)
+++ branches/soc-2011-onion-uv-tools/source/blender/blenkernel/BKE_mesh.h       
2012-01-17 18:33:08 UTC (rev 43473)
@@ -135,11 +135,11 @@
        /* UvElement Store */
        struct UvElement *buf;
        /* Total number of UVs in the layer. Useful to know */
-       int totalUVs;
+       int total_uvs;
        /* Number of Islands in the mesh */
-       int totalIslands;
+       int total_islands;
        /* Stores the starting index in buf where each island begins */
-       int *islandIndices;
+       int *island_indices;
 } UvElementMap;
 
 typedef struct UvElement {

Modified: 
branches/soc-2011-onion-uv-tools/source/blender/editors/mesh/editmesh_lib.c
===================================================================
--- branches/soc-2011-onion-uv-tools/source/blender/editors/mesh/editmesh_lib.c 
2012-01-17 18:32:14 UTC (rev 43472)
+++ branches/soc-2011-onion-uv-tools/source/blender/editors/mesh/editmesh_lib.c 
2012-01-17 18:33:08 UTC (rev 43473)
@@ -2408,7 +2408,7 @@
                return NULL;
        }
 
-       vmap->totalUVs = totuv;
+       vmap->total_uvs = totuv;
 
        for(efa = em->faces.first; efa; a++, efa = efa->next) {
                if(!selected || ((!efa->h) && (efa->f & SELECT))) {
@@ -2535,8 +2535,8 @@
                                vmap->vert[i] = &islandbuf[map[vmap->vert[i] - 
vmap->buf]];
                }
 
-               vmap->islandIndices = 
MEM_callocN(sizeof(*vmap->islandIndices)*nislands,"UvVertMap2_island_indices");
-               if(!vmap->islandIndices) {
+               vmap->island_indices = 
MEM_callocN(sizeof(*vmap->island_indices)*nislands,"UvVertMap2_island_indices");
+               if(!vmap->island_indices) {
                        MEM_freeN(islandbuf);
                        MEM_freeN(stack);
                        MEM_freeN(map);
@@ -2553,14 +2553,14 @@
 
                        if(islandbuf[i].island != j) {
                                j++;
-                               vmap->islandIndices[j] = i;
+                               vmap->island_indices[j] = i;
                        }
                }
 
                MEM_freeN(vmap->buf);
 
                vmap->buf = islandbuf;
-               vmap->totalIslands = nislands;
+               vmap->total_islands = nislands;
                MEM_freeN(stack);
                MEM_freeN(map);
        }
@@ -2588,7 +2588,7 @@
        if (vmap) {
                if (vmap->vert) MEM_freeN(vmap->vert);
                if (vmap->buf) MEM_freeN(vmap->buf);
-               if (vmap->islandIndices) MEM_freeN(vmap->islandIndices);
+               if (vmap->island_indices) MEM_freeN(vmap->island_indices);
                MEM_freeN(vmap);
        }
 }

Modified: 
branches/soc-2011-onion-uv-tools/source/blender/editors/sculpt_paint/sculpt_uv.c
===================================================================
--- 
branches/soc-2011-onion-uv-tools/source/blender/editors/sculpt_paint/sculpt_uv.c
    2012-01-17 18:32:14 UTC (rev 43472)
+++ 
branches/soc-2011-onion-uv-tools/source/blender/editors/sculpt_paint/sculpt_uv.c
    2012-01-17 18:33:08 UTC (rev 43473)
@@ -502,7 +502,7 @@
 
 
                /* Count 'unique' uvs */
-               for(i = 0; i < data->elementMap->totalUVs; i++){
+               for(i = 0; i < data->elementMap->total_uvs; i++){
                        if(data->elementMap->buf[i].separate
                        && (!do_island_optimization || 
data->elementMap->buf[i].island == island_index)){
                                counter++;
@@ -511,10 +511,10 @@
 
                /* Allocate the unique uv buffers */
                data->uv = MEM_mallocN(sizeof(*data->uv)*counter, 
"uv_brush_unique_uvs");
-               uniqueUv = 
MEM_mallocN(sizeof(*uniqueUv)*data->elementMap->totalUVs, 
"uv_brush_unique_uv_map");
+               uniqueUv = 
MEM_mallocN(sizeof(*uniqueUv)*data->elementMap->total_uvs, 
"uv_brush_unique_uv_map");
                edgeHash = BLI_ghash_new(uv_edge_hash, uv_edge_compare, 
"uv_brush_edge_hash");
                /* we have at most totalUVs edges */
-               edges = MEM_mallocN(sizeof(*edges)*data->elementMap->totalUVs, 
"uv_brush_all_edges");
+               edges = MEM_mallocN(sizeof(*edges)*data->elementMap->total_uvs, 
"uv_brush_all_edges");
                if(!data->uv || !uniqueUv || !edgeHash || !edges){
                        if(edges){
                                MEM_freeN(edges);

Modified: 
branches/soc-2011-onion-uv-tools/source/blender/editors/uvedit/uvedit_draw.c
===================================================================
--- 
branches/soc-2011-onion-uv-tools/source/blender/editors/uvedit/uvedit_draw.c    
    2012-01-17 18:32:14 UTC (rev 43472)
+++ 
branches/soc-2011-onion-uv-tools/source/blender/editors/uvedit/uvedit_draw.c    
    2012-01-17 18:33:08 UTC (rev 43473)
@@ -899,16 +899,29 @@
 
                glDisable(GL_BLEND);
 
-               /* draw vert preview */
-               glPointSize(pointsize*2.0);
-               UI_ThemeColor4(TH_STITCH_PREVIEW_STITCHABLE);
-               glVertexPointer(2, GL_FLOAT, 0, 
stitch_preview->preview_stitchable);
-               glDrawArrays(GL_POINTS, 0, stitch_preview->num_stitchable);
+               if(stitch_preview->mode == STITCH_MODE_VERT){
+                       /* draw vert preview */
+                       glPointSize(5.0);
+                       UI_ThemeColor4(TH_STITCH_PREVIEW_STITCHABLE);
+                       glVertexPointer(2, GL_FLOAT, 0, 
stitch_preview->preview_stitchable);
+                       glDrawArrays(GL_POINTS, 0, 
stitch_preview->num_stitchable);
 
-               UI_ThemeColor4(TH_STITCH_PREVIEW_UNSTITCHABLE);
-               glVertexPointer(2, GL_FLOAT, 0, 
stitch_preview->preview_unstitchable);
-               glDrawArrays(GL_POINTS, 0, stitch_preview->num_unstitchable);
+                       UI_ThemeColor4(TH_STITCH_PREVIEW_UNSTITCHABLE);
+                       glVertexPointer(2, GL_FLOAT, 0, 
stitch_preview->preview_unstitchable);
+                       glDrawArrays(GL_POINTS, 0, 
stitch_preview->num_unstitchable);
+               }
+               else
+               {
+                       /* draw edge preview */
+                       UI_ThemeColor4(TH_STITCH_PREVIEW_STITCHABLE);
+                       glVertexPointer(2, GL_FLOAT, 0, 
stitch_preview->preview_stitchable);
+                       glDrawArrays(GL_LINES, 0, 
2*stitch_preview->num_stitchable);
 
+                       UI_ThemeColor4(TH_STITCH_PREVIEW_UNSTITCHABLE);
+                       glVertexPointer(2, GL_FLOAT, 0, 
stitch_preview->preview_unstitchable);
+                       glDrawArrays(GL_LINES, 0, 
2*stitch_preview->num_unstitchable);
+               }
+
                glPopClientAttrib();
                glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
        }

Modified: 
branches/soc-2011-onion-uv-tools/source/blender/editors/uvedit/uvedit_intern.h
===================================================================
--- 
branches/soc-2011-onion-uv-tools/source/blender/editors/uvedit/uvedit_intern.h  
    2012-01-17 18:32:14 UTC (rev 43472)
+++ 
branches/soc-2011-onion-uv-tools/source/blender/editors/uvedit/uvedit_intern.h  
    2012-01-17 18:33:08 UTC (rev 43473)
@@ -72,6 +72,10 @@
 
 /* smart stitch */
 
+#define STITCH_MODE_VERT 0
+#define STITCH_MODE_EDGE 1
+#define STITCH_MODE_UNINITIALISED 2
+
 /* object that stores display data for previewing before accepting stitching */
 typedef struct StitchPreviewer {
        /* OpenGL requires different calls for Triangles and Quads.
@@ -94,6 +98,8 @@
        float *static_tris;
        unsigned int num_static_tris;
        unsigned int num_static_quads;
+       /* edge or vert mode */
+       char mode;
 } StitchPreviewer;
 
 StitchPreviewer *uv_get_stitch_previewer(void);

Modified: 
branches/soc-2011-onion-uv-tools/source/blender/editors/uvedit/uvedit_smart_stitch.c
===================================================================
--- 
branches/soc-2011-onion-uv-tools/source/blender/editors/uvedit/uvedit_smart_stitch.c
        2012-01-17 18:32:14 UTC (rev 43472)
+++ 
branches/soc-2011-onion-uv-tools/source/blender/editors/uvedit/uvedit_smart_stitch.c
        2012-01-17 18:33:08 UTC (rev 43473)
@@ -1,3 +1,4 @@
+
 /*
  * ***** BEGIN GPL LICENSE BLOCK *****
  *
@@ -8,7 +9,7 @@
  *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
@@ -26,7 +27,7 @@
  */
 
 /** \file blender/editors/uvedit/uvedit_stitch.c
- *  \ingroup eduv
+ * \ingroup eduv
  */
 
 
@@ -37,23 +38,36 @@
 #include "MEM_guardedalloc.h"
 
 #include "DNA_object_types.h"
+#include "DNA_material_types.h"
 #include "DNA_meshdata_types.h"
+#include "DNA_node_types.h"
 #include "DNA_scene_types.h"
 
+#include "BLI_math.h"
+#include "BLI_blenlib.h"
 #include "BLI_editVert.h"
+#include "BLI_utildefines.h"
 #include "BLI_ghash.h"
-#include "BLI_math.h"
-#include "BLI_math_vector.h"
-#include "BLI_string.h"
 
 #include "BKE_context.h"
 #include "BKE_customdata.h"
 #include "BKE_depsgraph.h"
+#include "BKE_image.h"
+#include "BKE_library.h"
+#include "BKE_main.h"
+#include "BKE_material.h"
 #include "BKE_mesh.h"
+#include "BKE_node.h"
+#include "BKE_report.h"
+#include "BKE_scene.h"
 
+#include "ED_image.h"
 #include "ED_mesh.h"
+#include "ED_node.h"
 #include "ED_uvedit.h"
+#include "ED_object.h"
 #include "ED_screen.h"
+#include "ED_transform.h"
 
 #include "RNA_access.h"
 #include "RNA_define.h"
@@ -62,6 +76,7 @@
 #include "WM_types.h"
 
 #include "UI_view2d.h"
+#include "UI_resources.h"
 
 #include "uvedit_intern.h"
 
@@ -83,7 +98,9 @@
        /* Flag to remember if island has been added for preview */
        char addedForPreview;
        /* Flag an island to be considered for determining static island */
-       char stitchableCandidate;
+       char candidate;
+       /* remember if edge rotation has been used to skip doing vertex 
rotation */
+       char used_edge_rotation;
 }IslandStitchData;
 
 /* just for averaging UVs */
@@ -102,9 +119,12 @@
        UvElement *element;
 }UvEdge;
 
+#define STITCHNEW
 
 /* stitch state object */
 typedef struct StitchState {
+       /* edge or vertex stitch mode */
+       char mode;
        /* use limit flag */
        char use_limit;
        /* limit to operator, same as original operator */
@@ -117,25 +137,27 @@
        EditMesh *em;
        /* element map for getting info about uv connectivity */
        UvElementMap *element_map;
-       /* edge container */
+       /* Edge container */
        UvEdge *uvedges;
        /* container of first of a group of coincident uvs, these will be 
operated upon */
        UvElement **uvs;
+       int total_separate_uvs;
        /* maps uvelements to their first coincident uv */
        int *map;
-       /* 2D normals per uv to calculate rotation for snapping */
-       float *normals;
-       /* edge storage */
-       UvEdge *edges;
-
-       /* count of separate uvs and edges */
-       int total_boundary_edges;
-       int total_separate_uvs;
        /* hold selection related information */
-       UvElement **selection_stack;
+       void **selection_stack;
        int selection_size;
        /* island that stays in place */
        int static_island;
+       /* For fast edge lookup... */
+       GHash *edgeHash;
+       /* ...And actual edge storage */
+       UvEdge *edges;
+       int total_edges;
+       /* 2D normals per uv to calculate rotation for snapping */
+       float *normals;
+
+
        /* store number of primitives per face so that we can allocate the 
active island buffer later */
        unsigned int *quads_per_island;
        unsigned int *tris_per_island;
@@ -153,12 +175,12 @@
 
 #define STITCH_NO_PREVIEW -1
 

@@ 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