From BlenderWiki

Jump to: navigation, search
Note: This is an archived version of the Blender Developer Wiki. The current and active wiki is available on wiki.blender.org.

Matrix Indexing

Changes for 2.62 in Matrix Indexing

Matrix indexing has now been changed to be row first as is usual in math. This has some important consequences for script writers. See below for a list of Gotchas.


Cheat Sheet

matrix[j][k]   --> matrix[k][j]
matrix[j][k]   --> matrix.col[j][k]
matrix[j]      --> matrix.col[j]
matrix = Matrix((a, b, c), (d, e, f), (g, h, i)) --> Matrix((a, d, g), (b, e, h), (c, f, i))
len(matrix)    --> len(matrix[0])
len(matrix[0]) --> len(matrix)
translation = matrix[3][0:3] --> matrix.translation[:]
matrix[3][0:3] = x, y, z     --> matrix.translation = x, y, z
for vec in mat: ...          --> for vec in mat.col: ...
mat.col_size                 --> len(mat.row)
mat.row_size                 --> len(mat.col)

Gotchas for Script Writers

Matrix Index Order

Matrices now access the row with the first index and the column with the second index. So,

matrix = Matrix()
first_row = matrix[0]

Would access the first row of the matrix. Previously it was the first column.

This also means that matrix element access is now by row first indexing as is usual in math. That is, to access the second row's third element;

element = matrix[1][2]

In addition, care must be taken when looping over matrices. For example;

for row in matrix:
    for item in row:
        print(item)

will print all the items in the matrix reading the matrix from left to right and top to bottom. Previously this would have been from top to bottom and left to right.

Matrix Construction

When explicitly constructing new matrices, the rows are input as tuples.

matrix = Matrix(((1, 2), (3, 4)))

So this means matrix[0] == (1, 2) and matrix[1] == (3, 4).

Previously matrices were constructed by parsing tuples of the columns. The result is that all explicit matrix construction must be transposed.

Matrix Length

Matrix length,

len(matrix)

now returns the number of rows in the matrix. Previously this returned the number of columns.

Matrix Translation Component

For a 4 x 4 matrix you can now get and set the translation component using;

matrix.translation

Previously, you could could get the translation component from the third matrix item.

Matrix Column / Row Size

The col_size and row_size attributes have been removed, instead use;

len(mat.col)  # to replace mat.row_size
len(mat.row)  # to replace mat.col_size

Scripts to be Changed / Checked

Prefix with an '-' when checked. Prefix with an '*' when changes needed to be made.

- addons/add_curve_aceous_galore.py
- addons/add_curve_ivygen.py
- addons/add_curve_sapling/__init__.py
- addons/add_curve_sapling/presets/black_tupelo.py
- addons/add_curve_sapling/presets/ca_black_oak.py
- addons/add_curve_sapling/presets/quaking_aspen.py
- addons/add_curve_sapling/presets/weeping_willow.py
- addons/add_curve_sapling/utils.py
- addons/add_curve_torus_knots.py
- addons/add_mesh_BoltFactory/Boltfactory.py
- addons/add_mesh_BoltFactory/__init__.py
* addons/add_mesh_BoltFactory/createMesh.py
- addons/add_mesh_BoltFactory/preset_utils.py
- addons/add_mesh_BoltFactory/presets/M10.py
- addons/add_mesh_BoltFactory/presets/M12.py
- addons/add_mesh_BoltFactory/presets/M3.py
- addons/add_mesh_BoltFactory/presets/M4.py
- addons/add_mesh_BoltFactory/presets/M5.py
- addons/add_mesh_BoltFactory/presets/M6.py
- addons/add_mesh_BoltFactory/presets/M8.py
- addons/add_mesh_ant_landscape.py
- addons/add_mesh_extra_objects/__init__.py
- addons/add_mesh_extra_objects/add_mesh_3d_function_surface.py
- addons/add_mesh_extra_objects/add_mesh_extra_objects.py
- addons/add_mesh_extra_objects/add_mesh_gears.py
- addons/add_mesh_extra_objects/add_mesh_gemstones.py
- addons/add_mesh_extra_objects/add_mesh_polysphere.py
- addons/add_mesh_extra_objects/add_mesh_pyramid.py
- addons/add_mesh_extra_objects/add_mesh_supertoroid.py
- addons/add_mesh_extra_objects/add_mesh_twisted_torus.py
- addons/add_mesh_pipe_joint.py
- addons/add_mesh_solid.py
* addons/animation_add_corrective_shape_key.py
- addons/animation_animall.py
- addons/animation_rotobezier.py
- addons/curve_simplify.py
- addons/development_api_navigator.py
- addons/development_icon_get.py
- addons/game_engine_save_as_runtime.py
- addons/io_anim_acclaim/__init__.py
- addons/io_anim_bvh/__init__.py
- addons/io_anim_bvh/export_bvh.py
- addons/io_anim_bvh/import_bvh.py
- addons/io_anim_c3d/__init__.py
- addons/io_anim_c3d/import_c3d.py
- addons/io_anim_camera.py
- addons/io_anim_nuke_chan/__init__.py
- addons/io_anim_nuke_chan/export_nuke_chan.py
- addons/io_anim_nuke_chan/import_nuke_chan.py
- addons/io_coat3D/__init__.py
- addons/io_coat3D/coat.py
- addons/io_coat3D/tex.py
- addons/io_convert_image_to_mesh_img/__init__.py
- addons/io_convert_image_to_mesh_img/import_img.py
- addons/io_curve_svg/__init__.py
- addons/io_curve_svg/import_svg.py
- addons/io_curve_svg/svg_colors.py
- addons/io_export_after_effects.py
* addons/io_export_directx_x.py
- addons/io_export_pc2.py
- addons/io_export_unreal_psk_psa.py
- addons/io_import_gimp_image_to_scene.py
- addons/io_import_images_as_planes.py
* addons/io_import_scene_dxf.py
- addons/io_import_scene_lwo.py
addons/io_import_scene_mhx.py
* addons/io_import_scene_unreal_psk.py
- addons/io_mesh_pdb/__init__.py
- addons/io_mesh_pdb/import_pdb.py
- addons/io_mesh_ply/__init__.py
- addons/io_mesh_ply/export_ply.py
- addons/io_mesh_ply/import_ply.py
- addons/io_mesh_raw/__init__.py
- addons/io_mesh_raw/export_raw.py
- addons/io_mesh_raw/import_raw.py
- addons/io_mesh_stl/__init__.py
- addons/io_mesh_stl/blender_utils.py
- addons/io_mesh_stl/stl_utils.py
- addons/io_mesh_uv_layout/__init__.py
- addons/io_mesh_uv_layout/export_uv_eps.py
- addons/io_mesh_uv_layout/export_uv_png.py
- addons/io_mesh_uv_layout/export_uv_svg.py
- addons/io_scene_3ds/__init__.py
* addons/io_scene_3ds/export_3ds.py
* addons/io_scene_3ds/import_3ds.py
- addons/io_scene_fbx/__init__.py
* addons/io_scene_fbx/export_fbx.py
- addons/io_scene_m3/__init__.py
- addons/io_scene_m3/import_m3.py
- addons/io_scene_map/__init__.py
- addons/io_scene_map/export_map.py
- addons/io_scene_obj/__init__.py
- addons/io_scene_obj/export_obj.py
- addons/io_scene_obj/import_obj.py
- addons/io_scene_x3d/__init__.py
- addons/io_scene_x3d/export_x3d.py
- addons/io_scene_x3d/import_x3d.py
- addons/io_shape_mdd/__init__.py
- addons/io_shape_mdd/export_mdd.py
- addons/io_shape_mdd/import_mdd.py
- addons/light_field_tools/__init__.py
- addons/light_field_tools/light_field_tools.py
- addons/mesh_bsurfaces.py
- addons/mesh_inset/__init__.py
- addons/mesh_inset/geom.py
- addons/mesh_inset/model.py
- addons/mesh_inset/offset.py
- addons/mesh_inset/triquad.py
- addons/mesh_looptools.py --- note, this needs some care taken! <- fixed by original author
- addons/mesh_relax.py
addons/mocap/__init__.py
addons/mocap/mocap_constraints.py
addons/mocap/mocap_tools.py
addons/mocap/retarget.py
- addons/modules/add_utils.py
- addons/modules/constants_utils.py
- addons/modules/cursor_utils.py
- addons/modules/extensions_framework/__init__.py
- addons/modules/extensions_framework/ui.py
- addons/modules/extensions_framework/util.py
- addons/modules/extensions_framework/validate.py
- addons/modules/geometry_utils.py
- addons/modules/misc_utils.py
- addons/modules/ui_utils.py
- addons/netrender/__init__.py
- addons/netrender/balancing.py
- addons/netrender/client.py
- addons/netrender/master.py
- addons/netrender/master_html.py
- addons/netrender/model.py
- addons/netrender/operators.py
- addons/netrender/repath.py
- addons/netrender/slave.py
- addons/netrender/thumbnail.py
- addons/netrender/ui.py
- addons/netrender/utils.py
- addons/netrender/versioning.py
- addons/object_add_chain.py
- addons/object_animrenderbake.py
- addons/object_cloud_gen.py
- addons/object_fracture/__init__.py
- addons/object_fracture/fracture_ops.py
- addons/object_fracture/fracture_setup.py
- addons/object_grease_scatter.py
- addons/paint_palette.py
- addons/render_copy_settings/__init__.py
- addons/render_copy_settings/operator.py
- addons/render_copy_settings/panel.py
- addons/render_copy_settings/presets.py
- addons/render_povray/__init__.py
* addons/render_povray/render.py
- addons/render_povray/ui.py
- addons/render_povray/update_files.py
- addons/render_renderfarmfi.py
- addons/rigify/__init__.py
- addons/rigify/generate.py
- addons/rigify/metarig_menu.py
- addons/rigify/metarigs/__init__.py
- addons/rigify/metarigs/human.py
- addons/rigify/rig_ui_template.py
- addons/rigify/rigs/__init__.py
- addons/rigify/rigs/basic/__init__.py
- addons/rigify/rigs/basic/copy.py
- addons/rigify/rigs/basic/copy_chain.py
- addons/rigify/rigs/biped/__init__.py
- addons/rigify/rigs/biped/arm/__init__.py
- addons/rigify/rigs/biped/arm/deform.py
- addons/rigify/rigs/biped/arm/fk.py
- addons/rigify/rigs/biped/arm/ik.py
- addons/rigify/rigs/biped/leg/__init__.py
- addons/rigify/rigs/biped/leg/deform.py
- addons/rigify/rigs/biped/leg/fk.py
- addons/rigify/rigs/biped/leg/ik.py
- addons/rigify/rigs/finger.py
- addons/rigify/rigs/misc/__init__.py
- addons/rigify/rigs/misc/delta.py
- addons/rigify/rigs/neck_short.py
- addons/rigify/rigs/palm.py
- addons/rigify/rigs/spine.py
- addons/rigify/ui.py
- addons/rigify/utils.py
- addons/space_view3d_3d_navigation.py
- addons/space_view3d_copy_attributes.py
- addons/space_view3d_materials_utils.py
- addons/space_view3d_math_vis/__init__.py
* addons/space_view3d_math_vis/draw.py
- addons/space_view3d_math_vis/utils.py
- addons/space_view3d_panel_measure.py
- addons/space_view3d_screencast_keys.py
- addons/space_view3d_spacebar_menu.py
- addons/system_blend_info.py
- addons/system_demo_mode/__init__.py
- addons/system_demo_mode/config.py
- addons/system_demo_mode/demo_mode.py
- addons/system_property_chart.py
- addons/texture_paint_layer_manager.py

contrib

addons_contrib/add_mesh_beam_builder.py
addons_contrib/add_mesh_column.py
addons_contrib/add_mesh_rocks/__init__.py
addons_contrib/add_mesh_rocks/rockgen.py
addons_contrib/add_mesh_rocks/settings.py
addons_contrib/add_mesh_rocks/utils.py
addons_contrib/add_mesh_stairs/__init__.py
addons_contrib/add_mesh_stairs/general.py
addons_contrib/add_mesh_stairs/post.py
addons_contrib/add_mesh_stairs/rail.py
addons_contrib/add_mesh_stairs/retainer.py
addons_contrib/add_mesh_stairs/stairbuilder.py
addons_contrib/add_mesh_stairs/stringer.py
addons_contrib/add_mesh_stairs/tread.py
addons_contrib/add_mesh_walls/Blocks.py
addons_contrib/add_mesh_walls/Wallfactory.py
addons_contrib/add_mesh_walls/__init__.py
addons_contrib/animation_motion_trail.py
addons_contrib/btrace/__init__.py
addons_contrib/btrace/bTrace.py
addons_contrib/cmu_mocap_browser/__init__.py
addons_contrib/cmu_mocap_browser/library.py
addons_contrib/cursor_control/__init__.py
addons_contrib/cursor_control/data.py
addons_contrib/cursor_control/history.py
addons_contrib/cursor_control/memory.py
addons_contrib/cursor_control/operators.py
addons_contrib/cursor_control/ui.py
addons_contrib/curve_tools.py
addons_contrib/development_class_viewer.py
addons_contrib/game_engine_ragdolls_kit/__init__.py
addons_contrib/game_engine_ragdolls_kit/brik.py
addons_contrib/game_engine_ragdolls_kit/brik_funcs.py
addons_contrib/game_engine_ragdolls_kit/templates/brik_init_ragdoll.py
addons_contrib/game_engine_ragdolls_kit/templates/brik_load.py
addons_contrib/game_engine_ragdolls_kit/templates/brik_spawn.py
addons_contrib/geodesic_domes/__init__.py
addons_contrib/geodesic_domes/add_shape_geodesic.py
addons_contrib/geodesic_domes/forms_259.py
addons_contrib/geodesic_domes/geodesic_classes_259.py
addons_contrib/geodesic_domes/third_domes_panel.py
addons_contrib/geodesic_domes/vefm_259.py
addons_contrib/gpencil_retopo/__init__.py
addons_contrib/gpencil_retopo/retopo.py
addons_contrib/gyes/__init__.py
addons_contrib/gyes/random_material_generator.py
addons_contrib/gyes/random_texture_generator.py
addons_contrib/io_export_dxf/__init__.py
addons_contrib/io_export_dxf/draw_blenders/__init__.py
addons_contrib/io_export_dxf/export_dxf.py
addons_contrib/io_export_dxf/model/__init__.py
addons_contrib/io_export_dxf/model/dxfLibrary.py
addons_contrib/io_export_dxf/model/migiusModel.py
addons_contrib/io_export_dxf/model/model.py
addons_contrib/io_export_dxf/operator.py
addons_contrib/io_export_dxf/primitive_exporters/__init__.py
addons_contrib/io_export_dxf/primitive_exporters/base_exporter.py
addons_contrib/io_export_dxf/primitive_exporters/camera_exporter.py
addons_contrib/io_export_dxf/primitive_exporters/curve_exporter.py
addons_contrib/io_export_dxf/primitive_exporters/empty_exporter.py
addons_contrib/io_export_dxf/primitive_exporters/insert_exporter.py
addons_contrib/io_export_dxf/primitive_exporters/lamp_exporter.py
addons_contrib/io_export_dxf/primitive_exporters/mesh_exporter.py
addons_contrib/io_export_dxf/primitive_exporters/text_exporter.py
addons_contrib/io_export_dxf/primitive_exporters/viewborder_exporter.py
addons_contrib/io_export_md3.py
addons_contrib/io_import_BrushSet.py
addons_contrib/io_import_LRO_Lola_MGS_Mola_img.py
addons_contrib/io_import_fbx.py
addons_contrib/io_import_lipSync_Importer.py
addons_contrib/io_import_voodoo_camera.py
addons_contrib/io_mesh_wow_mdl.py
addons_contrib/io_mesh_xyz/__init__.py
addons_contrib/io_mesh_xyz/import_xyz.py
addons_contrib/io_points_pcd/__init__.py
addons_contrib/io_points_pcd/pcd_utils.py
addons_contrib/io_points_pcd/pcdparser.py
addons_contrib/io_scene_ms3d/__init__.py
addons_contrib/io_scene_ms3d/ms3d_export.py
addons_contrib/io_scene_ms3d/ms3d_import.py
addons_contrib/io_scene_ms3d/ms3d_spec.py
addons_contrib/io_scene_ms3d/ms3d_utils.py
addons_contrib/lamp_geographical_sun.py
addons_contrib/mesh_edge_intersection_tools.py
addons_contrib/mesh_inset_extrude.py
addons_contrib/mesh_normal_smooth.py
addons_contrib/mesh_seam_from_uv_isles.py
addons_contrib/mesh_select_vertex_groups.py
addons_contrib/mesh_vertex_slide.py
addons_contrib/object_batch_rename_datablocks.py
addons_contrib/object_drop_to_ground.py
addons_contrib/render_clay.py
addons_contrib/render_to_print.py
addons_contrib/space_view3d_add_surround_cameras.py
addons_contrib/space_view3d_align_tools.py
addons_contrib/space_view3d_enhanced_3d_cursor.py
addons_contrib/space_view3d_game_props_visualiser.py
addons_contrib/space_view3d_manipulator_Menu.py
addons_contrib/space_view3d_objects_panel.py
- addons_contrib/system_keyboard_svg.py
addons_contrib/system_theme_manager.py
addons_contrib/text_editor_pasteall.py
addons_contrib/wetted_mesh.py

trunk - modules

- modules/addon_utils.py
- modules/animsys_refactor.py
- modules/blend_render_info.py
- modules/bpy/__init__.py
- modules/bpy/ops.py
- modules/bpy/path.py
- modules/bpy/utils.py
- modules/bpy_extras/__init__.py
- modules/bpy_extras/anim_utils.py
- modules/bpy_extras/image_utils.py
* modules/bpy_extras/io_utils.py
- modules/bpy_extras/keyconfig_utils.py
- modules/bpy_extras/mesh_utils.py
- modules/bpy_extras/object_utils.py
* modules/bpy_extras/view3d_utils.py
- modules/bpy_types.py
- modules/bpyml.py
- modules/bpyml_ui.py
- modules/console/__init__.py
- modules/console/complete_calltip.py
- modules/console/complete_import.py
- modules/console/complete_namespace.py
- modules/console/intellisense.py
- modules/console_python.py
- modules/console_shell.py
- modules/graphviz_export.py
- modules/keyingsets_utils.py
- modules/rna_info.py
- modules/rna_prop_ui.py
- modules/sys_info.py

trunk - startup

- startup/bl_operators/add_mesh_torus.py
- startup/bl_operators/anim.py
- startup/bl_operators/clip.py
- startup/bl_operators/console.py
- startup/bl_operators/image.py
- startup/bl_operators/mesh.py
- startup/bl_operators/object.py
- startup/bl_operators/object_align.py
- startup/bl_operators/object_quick_effects.py
- startup/bl_operators/object_randomize_transform.py
- startup/bl_operators/presets.py
- startup/bl_operators/screen_play_rendered_anim.py
- startup/bl_operators/sequencer.py
- startup/bl_operators/uvcalc_follow_active.py
- startup/bl_operators/uvcalc_lightmap.py
- startup/bl_operators/uvcalc_smart_project.py
- startup/bl_operators/vertexpaint_dirt.py
- startup/bl_operators/view3d.py
- startup/bl_operators/wm.py
- startup/bl_ui/__init__.py
- startup/bl_ui/properties_animviz.py
- startup/bl_ui/properties_data_armature.py
- startup/bl_ui/properties_data_bone.py
- startup/bl_ui/properties_data_camera.py
- startup/bl_ui/properties_data_curve.py
- startup/bl_ui/properties_data_empty.py
- startup/bl_ui/properties_data_lamp.py
- startup/bl_ui/properties_data_lattice.py
- startup/bl_ui/properties_data_mesh.py
- startup/bl_ui/properties_data_metaball.py
- startup/bl_ui/properties_data_modifier.py
- startup/bl_ui/properties_data_speaker.py
- startup/bl_ui/properties_game.py
- startup/bl_ui/properties_material.py
- startup/bl_ui/properties_object.py
- startup/bl_ui/properties_object_constraint.py
- startup/bl_ui/properties_particle.py
- startup/bl_ui/properties_physics_cloth.py
- startup/bl_ui/properties_physics_common.py
- startup/bl_ui/properties_physics_dynamicpaint.py
- startup/bl_ui/properties_physics_field.py
- startup/bl_ui/properties_physics_fluid.py
- startup/bl_ui/properties_physics_smoke.py
- startup/bl_ui/properties_physics_softbody.py
- startup/bl_ui/properties_render.py
- startup/bl_ui/properties_scene.py
- startup/bl_ui/properties_texture.py
- startup/bl_ui/properties_world.py
- startup/bl_ui/space_clip.py
- startup/bl_ui/space_console.py
- startup/bl_ui/space_dopesheet.py
- startup/bl_ui/space_filebrowser.py
- startup/bl_ui/space_graph.py
- startup/bl_ui/space_image.py
- startup/bl_ui/space_info.py
- startup/bl_ui/space_logic.py
- startup/bl_ui/space_nla.py
- startup/bl_ui/space_node.py
- startup/bl_ui/space_outliner.py
- startup/bl_ui/space_sequencer.py
- startup/bl_ui/space_text.py
- startup/bl_ui/space_time.py
- startup/bl_ui/space_userpref.py
- startup/bl_ui/space_userpref_keymap.py
- startup/bl_ui/space_view3d.py
- startup/bl_ui/space_view3d_toolbar.py
- startup/keyingsets_builtins.py

trunk - templates

- templates/addon_add_object.py
- templates/background_job.py
- templates/batch_export.py
- templates/builtin_keyingset.py
- templates/driver_functions.py
- templates/gamelogic.py
- templates/gamelogic_basic.py
- templates/gamelogic_module.py
- templates/operator_export.py
- templates/operator_mesh_add.py
- templates/operator_modal.py
- templates/operator_modal_draw.py
- templates/operator_modal_timer.py
- templates/operator_modal_view3d.py
- templates/operator_simple.py
- templates/operator_uv.py
- templates/ui_menu.py
- templates/ui_menu_simple.py
- templates/ui_panel_simple.py