[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [40105] trunk/blender/doc/python_api/rst/ info_gotcha.rst: added section about editmode switching to gotchas

Campbell Barton ideasman42 at gmail.com
Sun Sep 11 01:06:45 CEST 2011


Revision: 40105
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=40105
Author:   campbellbarton
Date:     2011-09-10 23:06:44 +0000 (Sat, 10 Sep 2011)
Log Message:
-----------
added section about editmode switching to gotchas

Modified Paths:
--------------
    trunk/blender/doc/python_api/rst/info_gotcha.rst

Modified: trunk/blender/doc/python_api/rst/info_gotcha.rst
===================================================================
--- trunk/blender/doc/python_api/rst/info_gotcha.rst	2011-09-10 22:27:36 UTC (rev 40104)
+++ trunk/blender/doc/python_api/rst/info_gotcha.rst	2011-09-10 23:06:44 UTC (rev 40105)
@@ -378,6 +378,41 @@
 As suggested above, simply not holding references to data when Blender is used interactively by the user is the only way to ensure the script doesn't become unstable.
 
 
+Edit Mode / Memory Access
+-------------------------
+
+Switching edit-mode ``bpy.ops.object.mode_set(mode='EDIT')`` / ``bpy.ops.object.mode_set(mode='OBJECT')`` will re-allocate objects data, any references to a meshes vertices/faces/uvs, armatures bones, curves points etc cannot be accessed after switching edit-mode.
+
+Only the reference to the data its self can be re-accessed, the following example will crash.
+
+.. code-block:: python
+
+   mesh = bpy.context.active_object.data
+   faces = mesh.faces
+   bpy.ops.object.mode_set(mode='EDIT')
+   bpy.ops.object.mode_set(mode='OBJECT')
+
+   # this will crash
+   print(faces)
+
+
+So after switching edit-mode you need to re-access any object data variables, the following example shows how to avoid the crash above.
+
+.. code-block:: python
+
+   mesh = bpy.context.active_object.data
+   faces = mesh.faces
+   bpy.ops.object.mode_set(mode='EDIT')
+   bpy.ops.object.mode_set(mode='OBJECT')
+
+   # faces have been re-allocated
+   faces = mesh.faces
+   print(faces)
+
+
+These kinds of problems can happen for any functions which re-allocate the object data but are most common when switching edit-mode.
+
+
 Array Re-Allocation
 -------------------
 




More information about the Bf-blender-cvs mailing list