From 1fde6d457091b4ea94e40245eff6d62881eb55bf Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 24 Sep 2007 09:40:09 +0000 Subject: [PATCH] Made the remaining UV py scripts work with editmesh now. DrawShadow option didnt check the final derived mesh had CD_MTFACE's can would crash when enabled with mirror modifier. --- release/scripts/uv_export.py | 10 ++++-- release/scripts/uv_seams_from_islands.py | 7 ++-- source/blender/src/drawimage.c | 43 +++++++++++++----------- 3 files changed, 36 insertions(+), 24 deletions(-) diff --git a/release/scripts/uv_export.py b/release/scripts/uv_export.py index f73b7bc7b10..5977a3b76f6 100644 --- a/release/scripts/uv_export.py +++ b/release/scripts/uv_export.py @@ -183,12 +183,16 @@ def ExportCallback(f): time1= Blender.sys.time() - if obj.type != "Mesh": + if not obj or obj.type != "Mesh": BPyMessages.Error_NoMeshActive() return - + + is_editmode = Blender.Window.EditMode() + if is_editmode: Blender.Window.EditMode(0) + mesh = obj.getData(mesh=1) if not mesh.faceUV: + if is_editmode: Blender.Window.EditMode(1) BPyMessages.Error_NoMeshUvActive() return @@ -207,6 +211,8 @@ def ExportCallback(f): UVFaces = ExtractUVFaces(mesh, bAllFaces.val) + if is_editmode: Blender.Window.EditMode(1) + if not bSVG.val: print "TGA export is running..." UV_Export_TGA(UVFaces, bSize.val, bWSize.val, bWrap.val, name) diff --git a/release/scripts/uv_seams_from_islands.py b/release/scripts/uv_seams_from_islands.py index dd27aab4ce9..241f38fc4aa 100644 --- a/release/scripts/uv_seams_from_islands.py +++ b/release/scripts/uv_seams_from_islands.py @@ -37,7 +37,6 @@ def seams_from_islands(me): # add seams SEAM = Mesh.EdgeFlags.SEAM for ed in me.edges: - print len(set(edge_uvs[ed.key])) if len(set(edge_uvs[ed.key])) > 1: ed.flag |= SEAM @@ -59,7 +58,7 @@ def main(): # editmode if its enabled, we cant make # changes to the mesh data while in editmode. is_editmode = Window.EditMode() - if is_editmode: Window.EditMode(1) + if is_editmode: Window.EditMode(0) Window.WaitCursor(1) @@ -68,8 +67,10 @@ def main(): # Run the mesh editing function seams_from_islands(me) + if is_editmode: Window.EditMode(1) + # Timing the script is a good way to be aware on any speed hits when scripting - print 'My Script finished in %.2f seconds' % (sys.time()-t) + print 'UV Seams from Islands finished in %.2f seconds' % (sys.time()-t) Window.WaitCursor(0) diff --git a/source/blender/src/drawimage.c b/source/blender/src/drawimage.c index 5bc8dad86af..4c1333d0ce2 100644 --- a/source/blender/src/drawimage.c +++ b/source/blender/src/drawimage.c @@ -481,29 +481,34 @@ void draw_uvs_sima(void) return; /* only draw shadow mesh */ } else if (G.sima->flag & SI_DRAWSHADOW) { /* draw shadow mesh - this is the mesh with the modifier applied */ - DerivedMesh *finalDM, *cageDM; - glColor3ub(112, 112, 112); - if (G.editMesh->derivedFinal && G.editMesh->derivedFinal->drawUVEdges) { - G.editMesh->derivedFinal->drawUVEdges(G.editMesh->derivedFinal); - } - - /* draw final mesh with modifiers applied */ - cageDM = editmesh_get_derived_cage_and_final(&finalDM, CD_MASK_BAREMESH | CD_MASK_MTFACE); - - if (finalDM->drawUVEdges && - DM_get_face_data_layer(finalDM, CD_MTFACE) && - /* When sync selection is enabled, all faces are drawn (except for hidden) - * so if cage is the same as the final, theres no point in drawing the shadowmesh. */ - !((G.sima->flag & SI_SYNC_UVSEL && cageDM==finalDM)) + if ( em->derivedFinal && + em->derivedFinal->drawUVEdges && + CustomData_has_layer(&em->derivedFinal->faceData, CD_MTFACE) ) { + /* we can use the existing final mesh */ glColor3ub(112, 112, 112); - finalDM->drawUVEdges(finalDM); + G.editMesh->derivedFinal->drawUVEdges(G.editMesh->derivedFinal); + } else { + DerivedMesh *finalDM, *cageDM; + + /* draw final mesh with modifiers applied */ + cageDM = editmesh_get_derived_cage_and_final(&finalDM, CD_MASK_BAREMESH | CD_MASK_MTFACE); + + if (finalDM->drawUVEdges && + DM_get_face_data_layer(finalDM, CD_MTFACE) && + /* When sync selection is enabled, all faces are drawn (except for hidden) + * so if cage is the same as the final, theres no point in drawing the shadowmesh. */ + !((G.sima->flag & SI_SYNC_UVSEL && cageDM==finalDM)) + ) { + glColor3ub(112, 112, 112); + finalDM->drawUVEdges(finalDM); + } + + if (cageDM != finalDM) + cageDM->release(cageDM); + finalDM->release(finalDM); } - - if (cageDM != finalDM) - cageDM->release(cageDM); - finalDM->release(finalDM); } /* draw transparent faces */