diff --git a/release/scripts/modules/bpy/path.py b/release/scripts/modules/bpy/path.py index 284fef97795..c8a78d521d5 100644 --- a/release/scripts/modules/bpy/path.py +++ b/release/scripts/modules/bpy/path.py @@ -40,7 +40,7 @@ import bpy as _bpy import os as _os -def abspath(path, start=None): +def abspath(path, start=None, library=None): """ Returns the absolute path relative to the current blend file using the "//" prefix. @@ -48,8 +48,13 @@ def abspath(path, start=None): :arg start: Relative to this path, when not set the current filename is used. :type start: string + :arg library: The library this path is from. This is only included for + convenience, when the library is not None its path replaces *start*. + :type library: :class:`bpy.types.Library` """ if path.startswith("//"): + if library: + start = abspath(_os.path.dirname(library.filepath)) return _os.path.join(_os.path.dirname(_bpy.data.filepath) if start is None else start, path[2:], diff --git a/release/scripts/startup/bl_operators/image.py b/release/scripts/startup/bl_operators/image.py index 2b190e1aee1..d0778ddafb2 100644 --- a/release/scripts/startup/bl_operators/image.py +++ b/release/scripts/startup/bl_operators/image.py @@ -69,8 +69,6 @@ class EditExternally(Operator): self.report({'ERROR'}, "Image path not set") return {'CANCELLED'} - filepath = os.path.normpath(bpy.path.abspath(filepath)) - if not os.path.exists(filepath): self.report({'ERROR'}, "Image path %r not found, image may be packed or " @@ -93,15 +91,16 @@ class EditExternally(Operator): return {'FINISHED'} def invoke(self, context, event): + import os try: - filepath = context.space_data.image.filepath - except: - import traceback - traceback.print_exc() - self.report({'ERROR'}, "Image not found on disk") + image = context.space_data.image + except AttributeError: + self.report({'ERROR'}, "Context incorrect, image not found") return {'CANCELLED'} - self.filepath = filepath + filepath = bpy.path.abspath(image.filepath, library=image.library) + + self.filepath = os.path.normpath(filepath) self.execute(context) return {'FINISHED'} diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c index bc6492f92ae..c379111ccfd 100644 --- a/source/blender/blenkernel/intern/DerivedMesh.c +++ b/source/blender/blenkernel/intern/DerivedMesh.c @@ -64,6 +64,7 @@ #ifdef WITH_GAMEENGINE #include "BKE_navmesh_conversion.h" +static DerivedMesh *navmesh_dm_createNavMeshForVisualization(DerivedMesh *dm); #endif #include "BLO_sys_types.h" // for intptr_t support @@ -77,8 +78,6 @@ extern GLubyte stipple_quarttone[128]; /* glutil.c, bad level data */ -static DerivedMesh *navmesh_dm_createNavMeshForVisualization(DerivedMesh *dm); - /////////////////////////////////// /////////////////////////////////// diff --git a/source/blender/editors/mesh/mesh_navmesh.c b/source/blender/editors/mesh/mesh_navmesh.c index bd5f4b5fe68..b8ace26991e 100644 --- a/source/blender/editors/mesh/mesh_navmesh.c +++ b/source/blender/editors/mesh/mesh_navmesh.c @@ -459,12 +459,14 @@ static int create_navmesh_exec(bContext *C, wmOperator *op) MEM_freeN(verts); MEM_freeN(tris); + + return OPERATOR_FINISHED; } else { BKE_report(op->reports, RPT_ERROR, "No mesh objects found"); - } - return OPERATOR_FINISHED; + return OPERATOR_CANCELLED; + } } void MESH_OT_navmesh_make(wmOperatorType *ot)