[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [57244] trunk/blender: fix [#35453] " copy mirrored uv coords" doesn't work
Campbell Barton
ideasman42 at gmail.com
Wed Jun 5 05:10:31 CEST 2013
Revision: 57244
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=57244
Author: campbellbarton
Date: 2013-06-05 03:10:29 +0000 (Wed, 05 Jun 2013)
Log Message:
-----------
fix [#35453] "copy mirrored uv coords" doesn't work
- made precision configurable.
- report a warning when doubles are found since they cause problems.
added Polygon.center attribute to avoid calculating in python.
Modified Paths:
--------------
trunk/blender/release/scripts/startup/bl_operators/mesh.py
trunk/blender/source/blender/makesrna/intern/rna_mesh.c
trunk/blender/source/blender/modifiers/intern/MOD_uvwarp.c
Modified: trunk/blender/release/scripts/startup/bl_operators/mesh.py
===================================================================
--- trunk/blender/release/scripts/startup/bl_operators/mesh.py 2013-06-04 22:30:41 UTC (rev 57243)
+++ trunk/blender/release/scripts/startup/bl_operators/mesh.py 2013-06-05 03:10:29 UTC (rev 57244)
@@ -21,7 +21,7 @@
import bpy
from bpy.types import Operator
-from bpy.props import EnumProperty
+from bpy.props import EnumProperty, IntProperty
class MeshMirrorUV(Operator):
@@ -36,6 +36,14 @@
('NEGATIVE', "Negative", "")),
)
+ precision = IntProperty(
+ name="Precision",
+ description=("Tolerance for finding vertex duplicates"),
+ min=1, max=16,
+ soft_min=1, soft_max=16,
+ default=3,
+ )
+
@classmethod
def poll(cls, context):
obj = context.active_object
@@ -43,6 +51,8 @@
def execute(self, context):
DIR = (self.direction == 'NEGATIVE')
+ precision = self.precision
+ double_warn = 0
ob = context.active_object
is_editmode = (ob.mode == 'EDIT')
@@ -55,12 +65,14 @@
mirror_gt = {}
mirror_lt = {}
- vcos = (v.co.to_tuple(5) for v in mesh.vertices)
+ vcos = (v.co.to_tuple(precision) for v in mesh.vertices)
for i, co in enumerate(vcos):
if co[0] >= 0.0:
+ double_warn += co in mirror_gt
mirror_gt[co] = i
if co[0] <= 0.0:
+ double_warn += co in mirror_lt
mirror_lt[co] = i
#for i, v in enumerate(mesh.vertices):
@@ -95,10 +107,7 @@
(uv.select for uv in uv_loops[lstart:lend]))
# Vert idx of the poly.
vidxs[i] = tuple(l.vertex_index for l in loops[lstart:lend])
- # As we have no poly.center yet...
- pcents[i] = tuple(map(lambda x: x / p.loop_total,
- map(sum, zip(*(verts[idx].co
- for idx in vidxs[i])))))
+ pcents[i] = p.center
# Preparing next step finding matching polys.
mirror_pm[tuple(sorted(vidxs[i]))] = i
@@ -135,4 +144,9 @@
if is_editmode:
bpy.ops.object.mode_set(mode='EDIT', toggle=False)
+ if double_warn:
+ self.report({'WARNING'},
+ "%d duplicates found, mirror may be incomplete" %
+ double_warn)
+
return {'FINISHED'}
Modified: trunk/blender/source/blender/makesrna/intern/rna_mesh.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_mesh.c 2013-06-04 22:30:41 UTC (rev 57243)
+++ trunk/blender/source/blender/makesrna/intern/rna_mesh.c 2013-06-05 03:10:29 UTC (rev 57244)
@@ -326,10 +326,17 @@
Mesh *me = rna_mesh(ptr);
MPoly *mp = (MPoly *)ptr->data;
- /* BMESH_TODO: might be faster to look for a CD_NORMALS layer and use that */
BKE_mesh_calc_poly_normal(mp, me->mloop + mp->loopstart, me->mvert, values);
}
+static void rna_MeshPolygon_center_get(PointerRNA *ptr, float *values)
+{
+ Mesh *me = rna_mesh(ptr);
+ MPoly *mp = (MPoly *)ptr->data;
+
+ BKE_mesh_calc_poly_center(mp, me->mloop + mp->loopstart, me->mvert, values);
+}
+
static float rna_MeshPolygon_area_get(PointerRNA *ptr)
{
Mesh *me = (Mesh *)ptr->id.data;
@@ -1880,6 +1887,12 @@
RNA_def_property_float_funcs(prop, "rna_MeshPolygon_normal_get", NULL, NULL);
RNA_def_property_ui_text(prop, "Face normal", "Local space unit length normal vector for this polygon");
+ prop = RNA_def_property(srna, "center", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_array(prop, 3);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_float_funcs(prop, "rna_MeshPolygon_center_get", NULL, NULL);
+ RNA_def_property_ui_text(prop, "Face center", "Center of the polygon");
+
prop = RNA_def_property(srna, "area", PROP_FLOAT, PROP_UNSIGNED);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_float_funcs(prop, "rna_MeshPolygon_area_get", NULL, NULL);
Modified: trunk/blender/source/blender/modifiers/intern/MOD_uvwarp.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_uvwarp.c 2013-06-04 22:30:41 UTC (rev 57243)
+++ trunk/blender/source/blender/modifiers/intern/MOD_uvwarp.c 2013-06-05 03:10:29 UTC (rev 57244)
@@ -105,7 +105,10 @@
}
}
-#define OMP_LIMIT 1000
+#ifdef _OPENMP
+# define OMP_LIMIT 1000
+#endif
+
static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
DerivedMesh *dm,
ModifierApplyFlag UNUSED(flag))
More information about the Bf-blender-cvs
mailing list