Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Eagar <joeedh@gmail.com>2009-05-23 07:24:15 +0400
committerJoseph Eagar <joeedh@gmail.com>2009-05-23 07:24:15 +0400
commitf026266e185f90543138a856898f50b2295a12fc (patch)
treef674a1a1b328a423ec4bdcdc4a11f35e56669e7a
parentb7fe3258b66698f62f630d0b18431b54b65101ed (diff)
merge with 2.5 at r20307. note there were some python hacking necassary for this to work, so um hopefully there's not too much cruft from that.
[[Split portion of a mixed commit.]]
-rw-r--r--CMake/macros.cmake21
-rw-r--r--CMakeLists.txt24
-rw-r--r--SConstruct87
-rw-r--r--blenderplayer/CMakeLists.txt3
-rw-r--r--config/darwin-config.py14
-rw-r--r--config/irix6-config.py10
-rw-r--r--config/linux2-config.py17
-rw-r--r--config/linuxcross-config.py8
-rw-r--r--config/openbsd3-config.py8
-rw-r--r--config/sunos5-config.py8
-rw-r--r--config/win32-mingw-config.py8
-rw-r--r--config/win32-vc-config.py10
-rw-r--r--config/win64-vc-config.py11
-rw-r--r--extern/CMakeLists.txt8
-rw-r--r--extern/Makefile8
-rw-r--r--extern/SConscript3
-rw-r--r--extern/bFTGL/CMakeLists.txt32
-rw-r--r--extern/bFTGL/COPYING.txt481
-rw-r--r--extern/bFTGL/README.txt51
-rw-r--r--extern/bFTGL/SConscript12
-rwxr-xr-xextern/bFTGL/cleanup4
-rw-r--r--extern/bFTGL/include/FTBBox.h124
-rw-r--r--extern/bFTGL/include/FTBitmapGlyph.h76
-rw-r--r--extern/bFTGL/include/FTBufferGlyph.h76
-rw-r--r--extern/bFTGL/include/FTCharToGlyphIndexMap.h130
-rw-r--r--extern/bFTGL/include/FTCharmap.h136
-rw-r--r--extern/bFTGL/include/FTContour.h88
-rw-r--r--extern/bFTGL/include/FTExtrdGlyph.h71
-rw-r--r--extern/bFTGL/include/FTFace.h149
-rw-r--r--extern/bFTGL/include/FTFont.h260
-rw-r--r--extern/bFTGL/include/FTGL.h100
-rw-r--r--extern/bFTGL/include/FTGLBitmapFont.h65
-rw-r--r--extern/bFTGL/include/FTGLBufferFont.h76
-rw-r--r--extern/bFTGL/include/FTGLExtrdFont.h55
-rw-r--r--extern/bFTGL/include/FTGLOutlineFont.h64
-rw-r--r--extern/bFTGL/include/FTGLPixmapFont.h68
-rw-r--r--extern/bFTGL/include/FTGLPolygonFont.h53
-rw-r--r--extern/bFTGL/include/FTGLTextureFont.h151
-rw-r--r--extern/bFTGL/include/FTGlyph.h89
-rw-r--r--extern/bFTGL/include/FTGlyphContainer.h127
-rw-r--r--extern/bFTGL/include/FTLibrary.h97
-rw-r--r--extern/bFTGL/include/FTList.h112
-rw-r--r--extern/bFTGL/include/FTOutlineGlyph.h54
-rw-r--r--extern/bFTGL/include/FTPixmapGlyph.h68
-rw-r--r--extern/bFTGL/include/FTPoint.h85
-rw-r--r--extern/bFTGL/include/FTPolyGlyph.h55
-rw-r--r--extern/bFTGL/include/FTSize.h132
-rw-r--r--extern/bFTGL/include/FTTextureGlyph.h89
-rw-r--r--extern/bFTGL/include/FTVector.h190
-rw-r--r--extern/bFTGL/include/FTVectoriser.h275
-rw-r--r--extern/bFTGL/license.txt27
-rw-r--r--extern/bFTGL/make/msvc_7_0/ftgl_static_lib.vcproj406
-rw-r--r--extern/bFTGL/make/msvc_9_0/ftgl_static_lib.vcproj537
-rw-r--r--extern/bFTGL/src/FTBitmapGlyph.cpp66
-rw-r--r--extern/bFTGL/src/FTBufferGlyph.cpp59
-rw-r--r--extern/bFTGL/src/FTCharmap.cpp62
-rw-r--r--extern/bFTGL/src/FTContour.cpp149
-rw-r--r--extern/bFTGL/src/FTExtrdGlyph.cpp141
-rw-r--r--extern/bFTGL/src/FTFace.cpp154
-rw-r--r--extern/bFTGL/src/FTFont.cpp271
-rw-r--r--extern/bFTGL/src/FTGLBitmapFont.cpp66
-rw-r--r--extern/bFTGL/src/FTGLBufferFont.cpp53
-rw-r--r--extern/bFTGL/src/FTGLExtrdFont.cpp35
-rw-r--r--extern/bFTGL/src/FTGLOutlineFont.cpp66
-rw-r--r--extern/bFTGL/src/FTGLPixmapFont.cpp68
-rw-r--r--extern/bFTGL/src/FTGLPolygonFont.cpp33
-rw-r--r--extern/bFTGL/src/FTGLTextureFont.cpp178
-rw-r--r--extern/bFTGL/src/FTGlyph.cpp17
-rw-r--r--extern/bFTGL/src/FTGlyphContainer.cpp93
-rw-r--r--extern/bFTGL/src/FTLibrary.cpp64
-rw-r--r--extern/bFTGL/src/FTOutlineGlyph.cpp57
-rw-r--r--extern/bFTGL/src/FTPixmapGlyph.cpp109
-rw-r--r--extern/bFTGL/src/FTPoint.cpp14
-rw-r--r--extern/bFTGL/src/FTPolyGlyph.cpp62
-rw-r--r--extern/bFTGL/src/FTSize.cpp105
-rw-r--r--extern/bFTGL/src/FTTextureGlyph.cpp87
-rw-r--r--extern/bFTGL/src/FTVectoriser.cpp229
-rw-r--r--extern/bFTGL/src/Makefile60
-rw-r--r--extern/bFTGL/win32_vcpp/README_WIN32.txt206
-rw-r--r--extern/bFTGL/win32_vcpp/ftgl.dsw92
-rw-r--r--extern/bFTGL/win32_vcpp/ftgl_dll/ftgl_dll.dsp357
-rw-r--r--extern/bFTGL/win32_vcpp/ftgl_static_lib/ftgl_static_lib.dsp342
-rw-r--r--extern/bFTGL/win32_vcpp/unit_tests/unit_tests.dsp168
-rw-r--r--extern/bullet2/make/msvc_9_0/Bullet.vcproj6
-rw-r--r--extern/bullet2/src/BulletCollision/NarrowPhaseCollision/btPersistentManifold.cpp7
-rw-r--r--extern/bullet2/src/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.cpp17
-rw-r--r--extern/libopenjpeg/opj_includes.h7
-rw-r--r--extern/make/msvc_9_0/build_install_all.vcproj2
-rw-r--r--intern/CMakeLists.txt2
-rw-r--r--intern/Makefile2
-rw-r--r--intern/SConscript1
-rw-r--r--intern/SoundSystem/Makefile1
-rw-r--r--intern/SoundSystem/SND_DependKludge.h3
-rw-r--r--intern/SoundSystem/SoundDefines.h10
-rw-r--r--intern/SoundSystem/dummy/SND_DummyDevice.cpp2
-rw-r--r--intern/SoundSystem/intern/Makefile2
-rw-r--r--intern/SoundSystem/intern/SND_DeviceManager.cpp15
-rw-r--r--intern/SoundSystem/intern/SND_Scene.cpp23
-rw-r--r--intern/SoundSystem/intern/SND_Utils.cpp32
-rw-r--r--intern/SoundSystem/make/msvc_6_0/SoundSystem.dsp412
-rw-r--r--intern/SoundSystem/make/msvc_6_0/dummy/DummySoundSystem.dsp206
-rw-r--r--intern/SoundSystem/make/msvc_6_0/openal/OpenALSoundSystem.dsp212
-rw-r--r--intern/SoundSystem/openal/SND_OpenALDevice.cpp2
-rw-r--r--intern/bmfont/BMF_Api.h162
-rw-r--r--intern/bmfont/BMF_Settings.h67
-rw-r--r--intern/bmfont/CMakeLists.txt32
-rw-r--r--intern/bmfont/Makefile52
-rw-r--r--intern/bmfont/SConscript10
-rw-r--r--intern/bmfont/intern/BDF2BMF.py177
-rw-r--r--intern/bmfont/intern/BMF_Api.cpp183
-rw-r--r--intern/bmfont/intern/BMF_BitmapFont.cpp323
-rw-r--r--intern/bmfont/intern/BMF_BitmapFont.h140
-rw-r--r--intern/bmfont/intern/BMF_font_helv10.cpp494
-rw-r--r--intern/bmfont/intern/BMF_font_helv12.cpp525
-rw-r--r--intern/bmfont/intern/BMF_font_helvb10.cpp492
-rw-r--r--intern/bmfont/intern/BMF_font_helvb12.cpp565
-rw-r--r--intern/bmfont/intern/BMF_font_helvb14.cpp623
-rw-r--r--intern/bmfont/intern/BMF_font_helvb8.cpp455
-rw-r--r--intern/bmfont/intern/BMF_font_scr12.cpp484
-rw-r--r--intern/bmfont/intern/BMF_font_scr14.cpp510
-rw-r--r--intern/bmfont/intern/BMF_font_scr15.cpp525
-rw-r--r--intern/bmfont/intern/Makefile41
-rw-r--r--intern/bmfont/make/msvc_6_0/bmfont.dsp176
-rw-r--r--intern/bmfont/make/msvc_6_0/bmfont.dsw29
-rw-r--r--intern/bmfont/make/msvc_7_0/bmfont.sln21
-rw-r--r--intern/bmfont/make/msvc_7_0/bmfont.vcproj314
-rw-r--r--intern/bmfont/make/msvc_9_0/bmfont.vcproj413
-rw-r--r--intern/bmfont/test/Makefile60
-rw-r--r--intern/bmfont/test/make/msvc_6_0/BMF_Test.dsp109
-rw-r--r--intern/bmfont/test/make/msvc_6_0/BMF_Test.dsw44
-rw-r--r--intern/bmfont/test/simpletest/BMF_Test.cpp226
-rw-r--r--intern/bmfont/test/simpletest/Makefile42
-rw-r--r--intern/boolop/intern/BOP_Merge2.cpp2
-rw-r--r--intern/boolop/intern/BOP_Misc.h2
-rw-r--r--intern/boolop/make/msvc_6_0/boolop.dsp444
-rw-r--r--intern/bsp/make/msvc6_0/bsplib.dsp276
-rw-r--r--intern/bsp/make/msvc6_0/bsplib.dsw58
-rw-r--r--intern/bsp/test/BSP_GhostTest/BSP_GhostTest.dsp252
-rw-r--r--intern/bsp/test/BSP_GhostTest/BSP_GhostTest.dsw250
-rw-r--r--intern/container/make/msvc_6_0/container.dsp266
-rw-r--r--intern/container/make/msvc_6_0/container.dsw58
-rw-r--r--intern/decimation/make/msvc_6_0/decimation.dsp372
-rw-r--r--intern/decimation/make/msvc_6_0/decimation.dsw66
-rw-r--r--intern/elbeem/make/msvc_6_0/elbeem.dsp580
-rw-r--r--intern/ghost/intern/GHOST_SystemWin32.cpp7
-rw-r--r--intern/ghost/intern/GHOST_SystemX11.cpp402
-rw-r--r--intern/ghost/intern/GHOST_SystemX11.h22
-rw-r--r--intern/ghost/make/msvc/ghost.dsp584
-rw-r--r--intern/ghost/make/msvc/ghost.dsw58
-rw-r--r--intern/ghost/test/make/msvc_6_0/gears.dsp204
-rw-r--r--intern/ghost/test/make/msvc_6_0/gears_C.dsp204
-rw-r--r--intern/ghost/test/make/msvc_6_0/ghost_test.dsw154
-rw-r--r--intern/ghost/test/multitest/Makefile2
-rw-r--r--intern/guardedalloc/mmap_win.h2
-rw-r--r--intern/iksolver/make/msvc_6_0/iksolver.dsp520
-rw-r--r--intern/iksolver/make/msvc_6_0/iksolver.dsw70
-rw-r--r--intern/iksolver/test/ik_glut_test/make/msvc_6_0/ik_glut_test.dsp260
-rw-r--r--intern/iksolver/test/ik_glut_test/make/msvc_6_0/ik_glut_test.dsw98
-rw-r--r--intern/make/msvc_6_0/build_install_all.dsp136
-rw-r--r--intern/make/msvc_6_0/intern.dsw604
-rw-r--r--intern/memutil/make/msvc_60/memutil.dsp300
-rw-r--r--intern/memutil/make/msvc_60/memutil.dsw58
-rw-r--r--intern/moto/include/MT_Quaternion.inl26
-rw-r--r--intern/moto/make/msvc_6_0/MoTo.dsp758
-rw-r--r--intern/moto/make/msvc_6_0/MoTo.dsw58
-rw-r--r--intern/opennl/make/msvc_6_0/OpenNL.dsp504
-rw-r--r--intern/opennl/make/msvc_6_0/OpenNL.dsw58
-rw-r--r--intern/string/make/msvc_6_0/string.dsp244
-rw-r--r--intern/string/make/msvc_6_0/string.dsw58
-rw-r--r--po/Makefile5
-rw-r--r--projectfiles/blender/BLO_readblenfile/BLO_readblenfile.dsp310
-rw-r--r--projectfiles/blender/BPY_python/BPY_python.dsp1176
-rw-r--r--projectfiles/blender/avi/BL_avi.dsp398
-rw-r--r--projectfiles/blender/blender.dsp248
-rw-r--r--projectfiles/blender/blender.dsw1486
-rw-r--r--projectfiles/blender/blenkernel/BKE_blenkernel.dsp1128
-rw-r--r--projectfiles/blender/blenlib/BLI_blenlib.dsp636
-rw-r--r--projectfiles/blender/blenpluginapi/blenpluginapi/blenpluginapi.dsp238
-rw-r--r--projectfiles/blender/ftfont/FTF_ftfont.dsp236
-rw-r--r--projectfiles/blender/glut/BL_glut.dsp648
-rw-r--r--projectfiles/blender/imbuf/BL_imbuf.dsp876
-rw-r--r--projectfiles/blender/img/BL_img.dsp342
-rw-r--r--projectfiles/blender/loader/BLO_loader.dsp372
-rw-r--r--projectfiles/blender/makesdna/DNA_makesdna.dsp746
-rw-r--r--projectfiles/blender/radiosity/BRA_radiosity.dsp266
-rw-r--r--projectfiles/blender/render/BRE_render.dsp384
-rw-r--r--projectfiles/blender/renderconverter/BRE_renderconverter.dsp204
-rw-r--r--projectfiles/blender/src/BL_src.dsp2080
-rw-r--r--projectfiles/blender/src/BL_src_cre.dsp204
-rw-r--r--projectfiles/datatoc/datatoc.dsp200
-rw-r--r--projectfiles/gameengine/blenderhook/KX_blenderhook.dsp322
-rw-r--r--projectfiles/gameengine/converter/KX_converter.dsp556
-rw-r--r--projectfiles/gameengine/expression/EXP_expressions.dsp604
-rw-r--r--projectfiles/gameengine/gamelogic/SCA_gamelogic.dsp812
-rw-r--r--projectfiles/gameengine/gameplayer/axctl/GP_axctl.dsp506
-rw-r--r--projectfiles/gameengine/gameplayer/common/GP_common.dsp510
-rw-r--r--projectfiles/gameengine/gameplayer/ghost/GP_ghost.dsp312
-rw-r--r--projectfiles/gameengine/gameplayer/glut/GP_glut.dsp410
-rw-r--r--projectfiles/gameengine/gameplayer/loader/BlenderLoader/BlenderLoader.dsp412
-rw-r--r--projectfiles/gameengine/gameplayer/netscape/GP_netscape.dsp346
-rw-r--r--projectfiles/gameengine/gameplayer/netscape2/GP_netscape.dsp362
-rw-r--r--projectfiles/gameengine/gameplayer/ps2/GP_ps2.dsp364
-rw-r--r--projectfiles/gameengine/gameplayer/qt/gp.dsp328
-rw-r--r--projectfiles/gameengine/gameplayer/qt/gpplugin.dsp1648
-rw-r--r--projectfiles/gameengine/gameplayer/qt/qtgp.dsw646
-rw-r--r--projectfiles/gameengine/gameplayer/sdl/GP_sdl.dsp410
-rw-r--r--projectfiles/gameengine/ketsji/KX_ketsji.dsp1380
-rw-r--r--projectfiles/gameengine/ketsji/network/KX_network.dsp372
-rw-r--r--projectfiles/gameengine/network/loopbacknetwork/NG_loopbacknetwork.dsp310
-rw-r--r--projectfiles/gameengine/network/network/NG_network.dsp348
-rw-r--r--projectfiles/gameengine/network/terraplaynetwork/NG_terraplaynetwork.dsp360
-rw-r--r--projectfiles/gameengine/physics/PHY_Physics/PHY_Dummy/PHY_Dummy.dsp308
-rw-r--r--projectfiles/gameengine/physics/PHY_Physics/PHY_Ode/PHY_Ode.dsp324
-rw-r--r--projectfiles/gameengine/physics/PHY_Physics/PHY_Physics.dsp356
-rw-r--r--projectfiles/gameengine/physics/PHY_Physics/PHY_Sumo/PHY_Sumo.dsp324
-rw-r--r--projectfiles/gameengine/rasterizer/RAS_rasterizer.dsp486
-rw-r--r--projectfiles/gameengine/rasterizer/openglrasterizer/RAS_openglrasterizer.dsp366
-rw-r--r--projectfiles/gameengine/scenegraph/SG_scenegraph.dsp398
-rw-r--r--projectfiles/kernel/gen_messaging/gen_messaging.dsp310
-rw-r--r--projectfiles/kernel/system/SYS_system.dsp366
-rw-r--r--projectfiles/sumo/fuzzics/SM_fuzzics.dsp432
-rw-r--r--projectfiles/sumo/moto/SM_moto.dsp664
-rw-r--r--projectfiles/sumo/solid/SM_solid.dsp680
-rw-r--r--projectfiles_vc7/sumo/moto/SM_moto.dsp664
-rw-r--r--projectfiles_vc7/sumo/solid/SM_solid.dsp680
-rw-r--r--projectfiles_vc9/blender/BPY_python/BPY_python.vcproj10
-rw-r--r--projectfiles_vc9/blender/blender.sln58
-rw-r--r--projectfiles_vc9/blender/blender.vcproj13
-rw-r--r--projectfiles_vc9/blender/blenfont/BLF_blenfont.vcproj8
-rw-r--r--projectfiles_vc9/blender/blenkernel/BKE_blenkernel.vcproj12
-rw-r--r--projectfiles_vc9/blender/blenlib/BLI_blenlib.vcproj10
-rw-r--r--projectfiles_vc9/blender/editors/ED_editors.vcproj130
-rw-r--r--projectfiles_vc9/blender/makesrna/RNA_makesrna.vcproj24
-rw-r--r--projectfiles_vc9/blender/makesrna/RNA_rna.vcproj12
-rw-r--r--projectfiles_vc9/blender/nodes/nodes.vcproj8
-rw-r--r--projectfiles_vc9/gameengine/gameplayer/ghost/GP_ghost.vcproj4
-rw-r--r--projectfiles_vc9/gameengine/ketsji/KX_ketsji.vcproj16
-rw-r--r--projectfiles_vc9/gameengine/physics/PHY_Physics/PHY_Bullet/PHY_Bullet.vcproj21
-rw-r--r--projectfiles_vc9/gameengine/physics/PHY_Physics/PHY_Physics.vcproj17
-rw-r--r--release/Makefile12
-rw-r--r--release/VERSION2
-rw-r--r--release/datafiles/blenderbuttonsbin131097 -> 146052 bytes
-rw-r--r--release/datafiles/prviconsbin9534 -> 12878 bytes
-rwxr-xr-xrelease/getversion.py13
-rw-r--r--release/scripts/3ds_import.py5
-rw-r--r--release/scripts/bevel_center.py2
-rw-r--r--release/scripts/bpymodules/dxfLibrary.py59
-rw-r--r--release/scripts/export_dxf.py195
-rw-r--r--release/scripts/image_auto_layout.py13
-rw-r--r--release/scripts/import_dxf.py245
-rw-r--r--release/scripts/import_obj.py2
-rw-r--r--[-rwxr-xr-x]release/scripts/import_web3d.py7
-rw-r--r--release/scripts/mesh_poly_reduce_grid.py351
-rw-r--r--release/scripts/scripttemplate_camera_object.py (renamed from release/scripts/scripttemplate_camer_object.py)0
-rw-r--r--release/scripts/uvcalc_smart_project.py2
-rw-r--r--release/ui/buttons_data_armature.py121
-rw-r--r--release/ui/buttons_data_bone.py67
-rw-r--r--release/ui/buttons_data_camera.py81
-rw-r--r--release/ui/buttons_data_curve.py147
-rw-r--r--release/ui/buttons_data_empty.py27
-rw-r--r--release/ui/buttons_data_lamp.py217
-rw-r--r--release/ui/buttons_data_lattice.py40
-rw-r--r--release/ui/buttons_data_modifier.py59
-rw-r--r--release/ui/buttons_data_text.py135
-rw-r--r--release/ui/buttons_material.py197
-rw-r--r--release/ui/buttons_objects.py147
-rw-r--r--release/ui/buttons_scene.py177
-rw-r--r--release/ui/buttons_world.py141
-rw-r--r--release/ui/space_text.py146
-rwxr-xr-xrelease/windows/specific.sh4
-rw-r--r--source/Makefile33
-rw-r--r--source/SConscript2
-rw-r--r--source/blender/CMakeLists.txt4
-rw-r--r--source/blender/Makefile4
-rw-r--r--source/blender/SConscript3
-rw-r--r--source/blender/blenfont/BLF_api.h73
-rw-r--r--source/blender/blenfont/CMakeLists.txt8
-rw-r--r--source/blender/blenfont/SConscript7
-rw-r--r--source/blender/blenfont/intern/Makefile5
-rw-r--r--source/blender/blenfont/intern/blf.c236
-rw-r--r--source/blender/blenfont/intern/blf_dir.c38
-rw-r--r--source/blender/blenfont/intern/blf_font.c124
-rw-r--r--source/blender/blenfont/intern/blf_font_helv10.h487
-rw-r--r--source/blender/blenfont/intern/blf_glyph.c346
-rw-r--r--source/blender/blenfont/intern/blf_internal.c290
-rw-r--r--source/blender/blenfont/intern/blf_internal.h14
-rw-r--r--source/blender/blenfont/intern/blf_internal_types.h110
-rw-r--r--source/blender/blenfont/intern/blf_lang.c274
-rw-r--r--source/blender/blenfont/intern/blf_util.c43
-rw-r--r--source/blender/blenkernel/BKE_DerivedMesh.h2
-rw-r--r--source/blender/blenkernel/BKE_action.h5
-rw-r--r--source/blender/blenkernel/BKE_animsys.h22
-rw-r--r--source/blender/blenkernel/BKE_blender.h3
-rw-r--r--source/blender/blenkernel/BKE_bmesh.h2
-rw-r--r--source/blender/blenkernel/BKE_bmeshCustomData.h2
-rw-r--r--source/blender/blenkernel/BKE_booleanops.h5
-rw-r--r--source/blender/blenkernel/BKE_bvhutils.h45
-rw-r--r--source/blender/blenkernel/BKE_cloth.h2
-rw-r--r--source/blender/blenkernel/BKE_collision.h2
-rw-r--r--source/blender/blenkernel/BKE_colortools.h1
-rw-r--r--source/blender/blenkernel/BKE_constraint.h4
-rw-r--r--source/blender/blenkernel/BKE_curve.h6
-rw-r--r--source/blender/blenkernel/BKE_fcurve.h13
-rw-r--r--source/blender/blenkernel/BKE_global.h4
-rw-r--r--source/blender/blenkernel/BKE_gpencil.h63
-rw-r--r--source/blender/blenkernel/BKE_library.h1
-rw-r--r--source/blender/blenkernel/BKE_main.h1
-rw-r--r--source/blender/blenkernel/BKE_mesh.h4
-rw-r--r--source/blender/blenkernel/BKE_particle.h19
-rw-r--r--source/blender/blenkernel/BKE_scene.h3
-rw-r--r--source/blender/blenkernel/BKE_screen.h58
-rw-r--r--source/blender/blenkernel/BKE_shrinkwrap.h19
-rw-r--r--source/blender/blenkernel/BKE_suggestions.h2
-rw-r--r--source/blender/blenkernel/CMakeLists.txt6
-rw-r--r--source/blender/blenkernel/SConscript37
-rw-r--r--source/blender/blenkernel/intern/BME_Customdata.c2
-rw-r--r--source/blender/blenkernel/intern/BME_conversions.c2
-rw-r--r--source/blender/blenkernel/intern/BME_eulers.c2
-rw-r--r--source/blender/blenkernel/intern/BME_mesh.c2
-rw-r--r--source/blender/blenkernel/intern/BME_structure.c2
-rw-r--r--source/blender/blenkernel/intern/BME_tools.c2
-rw-r--r--source/blender/blenkernel/intern/DerivedMesh.c231
-rw-r--r--source/blender/blenkernel/intern/Makefile10
-rw-r--r--source/blender/blenkernel/intern/action.c115
-rw-r--r--source/blender/blenkernel/intern/anim.c112
-rw-r--r--source/blender/blenkernel/intern/anim_sys.c65
-rw-r--r--source/blender/blenkernel/intern/blender.c13
-rw-r--r--source/blender/blenkernel/intern/bmesh_private.h2
-rw-r--r--source/blender/blenkernel/intern/booleanops.c122
-rw-r--r--source/blender/blenkernel/intern/bvhutils.c196
-rw-r--r--source/blender/blenkernel/intern/cdderivedmesh.c13
-rw-r--r--source/blender/blenkernel/intern/colortools.c36
-rw-r--r--source/blender/blenkernel/intern/constraint.c235
-rw-r--r--source/blender/blenkernel/intern/context.c1
-rw-r--r--source/blender/blenkernel/intern/curve.c18
-rw-r--r--source/blender/blenkernel/intern/customdata.c8
-rw-r--r--source/blender/blenkernel/intern/depsgraph.c94
-rw-r--r--source/blender/blenkernel/intern/effect.c29
-rw-r--r--source/blender/blenkernel/intern/exotic.c4
-rw-r--r--source/blender/blenkernel/intern/fcurve.c438
-rw-r--r--source/blender/blenkernel/intern/font.c20
-rw-r--r--source/blender/blenkernel/intern/gpencil.c516
-rw-r--r--source/blender/blenkernel/intern/image.c8
-rw-r--r--source/blender/blenkernel/intern/ipo.c53
-rw-r--r--source/blender/blenkernel/intern/library.c37
-rw-r--r--source/blender/blenkernel/intern/mesh.c15
-rw-r--r--source/blender/blenkernel/intern/modifier.c123
-rw-r--r--source/blender/blenkernel/intern/node.c39
-rw-r--r--source/blender/blenkernel/intern/object.c6
-rw-r--r--source/blender/blenkernel/intern/particle.c142
-rw-r--r--source/blender/blenkernel/intern/particle_system.c49
-rw-r--r--source/blender/blenkernel/intern/scene.c16
-rw-r--r--source/blender/blenkernel/intern/screen.c17
-rw-r--r--source/blender/blenkernel/intern/shrinkwrap.c300
-rw-r--r--source/blender/blenkernel/intern/suggestions.c2
-rw-r--r--source/blender/blenkernel/intern/text.c48
-rw-r--r--source/blender/blenkernel/intern/world.c2
-rw-r--r--source/blender/blenkernel/intern/writeffmpeg.c36
-rw-r--r--source/blender/blenlib/BLI_noise.h1
-rw-r--r--source/blender/blenlib/BLI_rect.h1
-rw-r--r--source/blender/blenlib/BLI_string.h4
-rw-r--r--source/blender/blenlib/BLI_util.h4
-rw-r--r--source/blender/blenlib/CMakeLists.txt4
-rw-r--r--source/blender/blenlib/SConscript3
-rw-r--r--source/blender/blenlib/intern/Makefile3
-rw-r--r--source/blender/blenlib/intern/fileops.c2
-rw-r--r--source/blender/blenlib/intern/freetypefont.c8
-rw-r--r--source/blender/blenlib/intern/psfont.c1
-rw-r--r--source/blender/blenlib/intern/string.c7
-rw-r--r--source/blender/blenlib/intern/util.c100
-rw-r--r--source/blender/blenloader/intern/readblenentry.c1
-rw-r--r--source/blender/blenloader/intern/readfile.c203
-rw-r--r--source/blender/blenloader/intern/writefile.c73
-rw-r--r--source/blender/editors/CMakeLists.txt4
-rw-r--r--source/blender/editors/animation/anim_channels.c329
-rw-r--r--source/blender/editors/animation/anim_draw.c6
-rw-r--r--source/blender/editors/animation/anim_filter.c41
-rw-r--r--source/blender/editors/animation/anim_intern.h18
-rw-r--r--source/blender/editors/animation/anim_ipo_utils.c70
-rw-r--r--source/blender/editors/animation/anim_markers.c255
-rw-r--r--source/blender/editors/animation/anim_ops.c12
-rw-r--r--source/blender/editors/animation/drivers.c292
-rw-r--r--source/blender/editors/animation/keyframes_draw.c3
-rw-r--r--source/blender/editors/animation/keyframes_edit.c145
-rw-r--r--source/blender/editors/animation/keyframing.c1609
-rw-r--r--source/blender/editors/animation/keyingsets.c1178
-rw-r--r--source/blender/editors/armature/BIF_generate.h2
-rw-r--r--source/blender/editors/armature/BIF_retarget.h2
-rw-r--r--source/blender/editors/armature/Makefile1
-rw-r--r--source/blender/editors/armature/SConscript2
-rw-r--r--source/blender/editors/armature/armature_intern.h10
-rw-r--r--source/blender/editors/armature/armature_ops.c60
-rw-r--r--source/blender/editors/armature/editarmature.c25
-rw-r--r--source/blender/editors/armature/editarmature_generate.c8
-rw-r--r--source/blender/editors/armature/editarmature_retarget.c23
-rw-r--r--source/blender/editors/armature/editarmature_sketch.c25
-rw-r--r--source/blender/editors/armature/poselib.c1023
-rw-r--r--source/blender/editors/armature/poseobject.c33
-rw-r--r--source/blender/editors/armature/reeb.c8
-rw-r--r--source/blender/editors/curve/Makefile1
-rw-r--r--source/blender/editors/curve/SConscript2
-rw-r--r--source/blender/editors/curve/curve_intern.h14
-rw-r--r--source/blender/editors/curve/curve_ops.c46
-rw-r--r--source/blender/editors/curve/editcurve.c125
-rw-r--r--source/blender/editors/curve/editfont.c24
-rw-r--r--source/blender/editors/datafiles/blenderbuttons.c8664
-rw-r--r--source/blender/editors/datafiles/prvicons.c703
-rw-r--r--source/blender/editors/gpencil/Makefile1
-rw-r--r--source/blender/editors/gpencil/SConscript2
-rw-r--r--source/blender/editors/gpencil/drawgpencil.c14
-rw-r--r--source/blender/editors/gpencil/editaction_gpencil.c9
-rw-r--r--source/blender/editors/gpencil/gpencil_edit.c (renamed from source/blender/editors/gpencil/gpencil.c)474
-rw-r--r--source/blender/editors/gpencil/gpencil_intern.h2
-rw-r--r--source/blender/editors/include/BIF_glutil.h2
-rw-r--r--source/blender/editors/include/BIF_transform.h4
-rw-r--r--source/blender/editors/include/ED_anim_api.h1
-rw-r--r--source/blender/editors/include/ED_fileselect.h15
-rw-r--r--source/blender/editors/include/ED_gpencil.h24
-rw-r--r--source/blender/editors/include/ED_keyframes_edit.h17
-rw-r--r--source/blender/editors/include/ED_keyframing.h100
-rw-r--r--source/blender/editors/include/ED_markers.h20
-rw-r--r--source/blender/editors/include/ED_mesh.h1
-rw-r--r--source/blender/editors/include/ED_screen.h4
-rw-r--r--source/blender/editors/include/ED_util.h1
-rw-r--r--source/blender/editors/include/ED_view3d.h3
-rw-r--r--source/blender/editors/include/UI_interface.h260
-rw-r--r--source/blender/editors/include/UI_resources.h97
-rw-r--r--source/blender/editors/include/UI_view2d.h2
-rw-r--r--source/blender/editors/interface/Makefile2
-rw-r--r--source/blender/editors/interface/SConscript7
-rw-r--r--source/blender/editors/interface/interface.c930
-rw-r--r--source/blender/editors/interface/interface_anim.c172
-rw-r--r--source/blender/editors/interface/interface_api.c193
-rw-r--r--source/blender/editors/interface/interface_draw.c2517
-rw-r--r--source/blender/editors/interface/interface_handlers.c155
-rw-r--r--source/blender/editors/interface/interface_icons.c6
-rw-r--r--source/blender/editors/interface/interface_intern.h125
-rw-r--r--source/blender/editors/interface/interface_layout.c1934
-rw-r--r--source/blender/editors/interface/interface_panel.c1271
-rw-r--r--source/blender/editors/interface/interface_regions.c770
-rw-r--r--source/blender/editors/interface/interface_style.c267
-rw-r--r--source/blender/editors/interface/interface_templates.c238
-rw-r--r--source/blender/editors/interface/interface_utils.c167
-rw-r--r--source/blender/editors/interface/interface_widgets.c1615
-rw-r--r--source/blender/editors/interface/resources.c842
-rw-r--r--source/blender/editors/interface/text.c276
-rw-r--r--source/blender/editors/interface/view2d.c86
-rw-r--r--source/blender/editors/interface/view2d_ops.c126
-rw-r--r--source/blender/editors/mesh/Makefile1
-rw-r--r--source/blender/editors/mesh/SConscript2
-rw-r--r--source/blender/editors/mesh/bmesh_tools.c20
-rw-r--r--source/blender/editors/mesh/bmeshutils.c2
-rw-r--r--source/blender/editors/mesh/bmeshutils_mods.c6
-rw-r--r--source/blender/editors/mesh/editdeform.c16
-rw-r--r--source/blender/editors/mesh/editmesh.c34
-rw-r--r--source/blender/editors/mesh/editmesh_add.c64
-rw-r--r--source/blender/editors/mesh/editmesh_lib.c6
-rw-r--r--source/blender/editors/mesh/editmesh_loop.c22
-rw-r--r--source/blender/editors/mesh/editmesh_mods.c155
-rw-r--r--source/blender/editors/mesh/editmesh_tools.c320
-rw-r--r--source/blender/editors/mesh/mesh_intern.h56
-rw-r--r--source/blender/editors/mesh/mesh_ops.c103
-rw-r--r--source/blender/editors/object/Makefile1
-rw-r--r--source/blender/editors/object/SConscript2
-rw-r--r--source/blender/editors/object/editconstraint.c5
-rw-r--r--source/blender/editors/object/object_edit.c294
-rw-r--r--source/blender/editors/object/object_intern.h3
-rw-r--r--source/blender/editors/object/object_modifier.c98
-rw-r--r--source/blender/editors/object/object_ops.c4
-rw-r--r--source/blender/editors/physics/Makefile1
-rw-r--r--source/blender/editors/physics/SConscript2
-rw-r--r--source/blender/editors/physics/editparticle.c22
-rw-r--r--source/blender/editors/physics/physics_intern.h6
-rw-r--r--source/blender/editors/preview/Makefile1
-rw-r--r--source/blender/editors/preview/SConscript2
-rw-r--r--source/blender/editors/preview/previewrender.c2
-rw-r--r--source/blender/editors/screen/CMakeLists.txt4
-rw-r--r--source/blender/editors/screen/Makefile2
-rw-r--r--source/blender/editors/screen/SConscript4
-rw-r--r--source/blender/editors/screen/area.c302
-rw-r--r--source/blender/editors/screen/glutil.c17
-rw-r--r--source/blender/editors/screen/screen_ops.c99
-rw-r--r--source/blender/editors/sculpt_paint/Makefile1
-rw-r--r--source/blender/editors/sculpt_paint/SConscript2
-rw-r--r--source/blender/editors/sculpt_paint/paint_image.c6
-rw-r--r--source/blender/editors/space_action/action_draw.c24
-rw-r--r--source/blender/editors/space_action/action_edit.c80
-rw-r--r--source/blender/editors/space_action/action_header.c62
-rw-r--r--source/blender/editors/space_action/action_ops.c15
-rw-r--r--source/blender/editors/space_action/action_select.c565
-rw-r--r--source/blender/editors/space_buttons/buttons_header.c127
-rw-r--r--source/blender/editors/space_buttons/buttons_intern.h41
-rw-r--r--source/blender/editors/space_buttons/buttons_object.c216
-rw-r--r--source/blender/editors/space_buttons/buttons_scene.c333
-rw-r--r--source/blender/editors/space_buttons/space_buttons.c99
-rw-r--r--source/blender/editors/space_file/Makefile2
-rw-r--r--source/blender/editors/space_file/SConscript4
-rw-r--r--source/blender/editors/space_file/file_draw.c174
-rw-r--r--source/blender/editors/space_file/file_header.c29
-rw-r--r--source/blender/editors/space_file/file_intern.h4
-rw-r--r--source/blender/editors/space_file/file_ops.c62
-rw-r--r--source/blender/editors/space_file/filelist.c40
-rw-r--r--source/blender/editors/space_file/filelist.h15
-rw-r--r--source/blender/editors/space_file/filesel.c84
-rw-r--r--source/blender/editors/space_file/fsmenu.c27
-rw-r--r--source/blender/editors/space_graph/graph_buttons.c470
-rw-r--r--source/blender/editors/space_graph/graph_draw.c112
-rw-r--r--source/blender/editors/space_graph/graph_edit.c343
-rw-r--r--source/blender/editors/space_graph/graph_header.c27
-rw-r--r--source/blender/editors/space_graph/graph_intern.h14
-rw-r--r--source/blender/editors/space_graph/graph_ops.c27
-rw-r--r--source/blender/editors/space_graph/graph_select.c149
-rw-r--r--source/blender/editors/space_graph/space_graph.c39
-rw-r--r--source/blender/editors/space_image/SConscript7
-rw-r--r--source/blender/editors/space_image/image_buttons.c (renamed from source/blender/editors/space_image/image_panels.c)152
-rw-r--r--source/blender/editors/space_image/image_draw.c38
-rw-r--r--source/blender/editors/space_image/image_header.c212
-rw-r--r--source/blender/editors/space_image/image_intern.h3
-rw-r--r--source/blender/editors/space_image/image_ops.c11
-rw-r--r--source/blender/editors/space_image/space_image.c39
-rw-r--r--source/blender/editors/space_info/info_header.c41
-rw-r--r--source/blender/editors/space_info/space_info.c34
-rw-r--r--source/blender/editors/space_nla/nla_header.c7
-rw-r--r--source/blender/editors/space_node/Makefile1
-rw-r--r--source/blender/editors/space_node/SConscript2
-rw-r--r--source/blender/editors/space_node/drawnode.c30
-rw-r--r--source/blender/editors/space_node/node_draw.c108
-rw-r--r--source/blender/editors/space_node/node_edit.c16
-rw-r--r--source/blender/editors/space_node/node_header.c47
-rw-r--r--source/blender/editors/space_node/node_intern.h2
-rw-r--r--source/blender/editors/space_node/node_ops.c4
-rw-r--r--source/blender/editors/space_node/space_node.c2
-rw-r--r--source/blender/editors/space_outliner/outliner.c316
-rw-r--r--source/blender/editors/space_outliner/outliner_header.c7
-rw-r--r--source/blender/editors/space_outliner/outliner_intern.h4
-rw-r--r--source/blender/editors/space_outliner/outliner_ops.c6
-rw-r--r--source/blender/editors/space_outliner/space_outliner.c2
-rw-r--r--source/blender/editors/space_script/script_edit.c34
-rw-r--r--source/blender/editors/space_script/script_header.c7
-rw-r--r--source/blender/editors/space_script/script_intern.h3
-rw-r--r--source/blender/editors/space_script/script_ops.c6
-rw-r--r--source/blender/editors/space_script/space_script.c2
-rw-r--r--source/blender/editors/space_sequencer/Makefile2
-rw-r--r--source/blender/editors/space_sequencer/SConscript4
-rw-r--r--source/blender/editors/space_sequencer/sequencer_add.c20
-rw-r--r--source/blender/editors/space_sequencer/sequencer_draw.c19
-rw-r--r--source/blender/editors/space_sequencer/sequencer_edit.c4
-rw-r--r--source/blender/editors/space_sequencer/sequencer_header.c164
-rw-r--r--source/blender/editors/space_sequencer/sequencer_intern.h12
-rw-r--r--source/blender/editors/space_sequencer/sequencer_ops.c14
-rw-r--r--source/blender/editors/space_sound/sound_header.c7
-rw-r--r--source/blender/editors/space_text/SConscript2
-rw-r--r--source/blender/editors/space_text/space_text.c19
-rw-r--r--source/blender/editors/space_text/text_header.c441
-rw-r--r--source/blender/editors/space_text/text_intern.h3
-rw-r--r--source/blender/editors/space_text/text_ops.c119
-rw-r--r--source/blender/editors/space_time/time_header.c17
-rw-r--r--source/blender/editors/space_view3d/Makefile2
-rw-r--r--source/blender/editors/space_view3d/SConscript4
-rw-r--r--source/blender/editors/space_view3d/drawarmature.c19
-rw-r--r--source/blender/editors/space_view3d/drawobject.c629
-rw-r--r--source/blender/editors/space_view3d/space_view3d.c84
-rw-r--r--source/blender/editors/space_view3d/view3d_buttons.c417
-rw-r--r--source/blender/editors/space_view3d/view3d_draw.c70
-rw-r--r--source/blender/editors/space_view3d/view3d_header.c544
-rw-r--r--source/blender/editors/space_view3d/view3d_intern.h16
-rw-r--r--source/blender/editors/space_view3d/view3d_ops.c8
-rw-r--r--source/blender/editors/space_view3d/view3d_select.c8
-rw-r--r--source/blender/editors/space_view3d/view3d_snap.c19
-rw-r--r--source/blender/editors/space_view3d/view3d_toolbar.c189
-rw-r--r--source/blender/editors/space_view3d/view3d_view.c71
-rw-r--r--source/blender/editors/transform/Makefile1
-rw-r--r--source/blender/editors/transform/SConscript2
-rw-r--r--source/blender/editors/transform/transform.c332
-rw-r--r--source/blender/editors/transform/transform.h13
-rw-r--r--source/blender/editors/transform/transform_constraints.c4
-rw-r--r--source/blender/editors/transform/transform_conversions.c110
-rw-r--r--source/blender/editors/transform/transform_generics.c5
-rw-r--r--source/blender/editors/transform/transform_input.c9
-rw-r--r--source/blender/editors/transform/transform_ops.c30
-rw-r--r--source/blender/editors/transform/transform_orientations.c34
-rw-r--r--source/blender/editors/transform/transform_snap.c31
-rw-r--r--source/blender/editors/util/ed_util.c55
-rw-r--r--source/blender/editors/util/editmode_undo.c2
-rw-r--r--source/blender/editors/util/undo.c4
-rw-r--r--source/blender/editors/uvedit/uvedit_draw.c11
-rw-r--r--source/blender/editors/uvedit/uvedit_ops.c127
-rw-r--r--source/blender/editors/uvedit/uvedit_parametrizer.c32
-rw-r--r--source/blender/editors/uvedit/uvedit_parametrizer.h2
-rw-r--r--source/blender/editors/uvedit/uvedit_unwrap_ops.c96
-rw-r--r--source/blender/ftfont/CMakeLists.txt43
-rw-r--r--source/blender/ftfont/FTF_Api.h163
-rw-r--r--source/blender/ftfont/Makefile34
-rw-r--r--source/blender/ftfont/SConscript16
-rw-r--r--source/blender/ftfont/intern/FTF_Api.cpp205
-rw-r--r--source/blender/ftfont/intern/FTF_TTFont.cpp403
-rw-r--r--source/blender/ftfont/intern/FTF_TTFont.h136
-rw-r--r--source/blender/ftfont/intern/Makefile56
-rw-r--r--source/blender/gpu/intern/gpu_draw.c34
-rw-r--r--source/blender/imbuf/IMB_imbuf_types.h1
-rw-r--r--source/blender/imbuf/intern/IMB_anim.h6
-rw-r--r--source/blender/imbuf/intern/IMB_jp2.h2
-rw-r--r--source/blender/imbuf/intern/allocimbuf.c5
-rw-r--r--source/blender/imbuf/intern/anim.c8
-rw-r--r--source/blender/imbuf/intern/anim5.c2
-rw-r--r--source/blender/imbuf/intern/dds/Makefile2
-rw-r--r--source/blender/imbuf/intern/scaling.c3
-rw-r--r--source/blender/imbuf/intern/util.c8
-rw-r--r--source/blender/makesdna/DNA_ID.h1
-rw-r--r--source/blender/makesdna/DNA_action_types.h4
-rw-r--r--source/blender/makesdna/DNA_actuator_types.h5
-rw-r--r--source/blender/makesdna/DNA_anim_types.h110
-rw-r--r--source/blender/makesdna/DNA_cloth_types.h2
-rw-r--r--source/blender/makesdna/DNA_constraint_types.h12
-rw-r--r--source/blender/makesdna/DNA_customdata_types.h6
-rw-r--r--source/blender/makesdna/DNA_gpencil_types.h3
-rw-r--r--source/blender/makesdna/DNA_material_types.h13
-rw-r--r--source/blender/makesdna/DNA_modifier_types.h9
-rw-r--r--source/blender/makesdna/DNA_object_fluidsim.h2
-rw-r--r--source/blender/makesdna/DNA_object_force.h1
-rw-r--r--source/blender/makesdna/DNA_object_types.h6
-rw-r--r--source/blender/makesdna/DNA_particle_types.h4
-rw-r--r--source/blender/makesdna/DNA_scene_types.h13
-rw-r--r--source/blender/makesdna/DNA_screen_types.h21
-rw-r--r--source/blender/makesdna/DNA_sensor_types.h11
-rw-r--r--source/blender/makesdna/DNA_space_types.h20
-rw-r--r--source/blender/makesdna/DNA_userdef_types.h157
-rw-r--r--source/blender/makesdna/DNA_view3d_types.h5
-rw-r--r--source/blender/makesdna/DNA_world_types.h6
-rw-r--r--source/blender/makesdna/intern/SConscript5
-rw-r--r--source/blender/makesdna/intern/dna_genfile.c8
-rw-r--r--source/blender/makesrna/RNA_access.h108
-rw-r--r--source/blender/makesrna/RNA_define.h70
-rw-r--r--source/blender/makesrna/RNA_enum_types.h8
-rw-r--r--source/blender/makesrna/RNA_types.h53
-rw-r--r--source/blender/makesrna/SConscript2
-rw-r--r--source/blender/makesrna/intern/CMakeLists.txt57
-rw-r--r--source/blender/makesrna/intern/Makefile23
-rw-r--r--source/blender/makesrna/intern/SConscript40
-rw-r--r--source/blender/makesrna/intern/makesrna.c568
-rw-r--r--source/blender/makesrna/intern/rna_ID.c25
-rw-r--r--source/blender/makesrna/intern/rna_access.c1030
-rw-r--r--source/blender/makesrna/intern/rna_action.c179
-rw-r--r--source/blender/makesrna/intern/rna_animation.c8
-rw-r--r--source/blender/makesrna/intern/rna_armature.c8
-rw-r--r--source/blender/makesrna/intern/rna_camera.c3
-rw-r--r--source/blender/makesrna/intern/rna_cloth.c2
-rw-r--r--source/blender/makesrna/intern/rna_context.c13
-rw-r--r--source/blender/makesrna/intern/rna_curve.c64
-rw-r--r--source/blender/makesrna/intern/rna_define.c595
-rw-r--r--source/blender/makesrna/intern/rna_fcurve.c656
-rw-r--r--source/blender/makesrna/intern/rna_fluidsim.c14
-rw-r--r--source/blender/makesrna/intern/rna_image.c4
-rw-r--r--source/blender/makesrna/intern/rna_internal.h41
-rw-r--r--source/blender/makesrna/intern/rna_internal_types.h54
-rw-r--r--source/blender/makesrna/intern/rna_lamp.c19
-rw-r--r--source/blender/makesrna/intern/rna_material.c53
-rw-r--r--source/blender/makesrna/intern/rna_modifier.c78
-rw-r--r--source/blender/makesrna/intern/rna_nodetree.c4
-rw-r--r--source/blender/makesrna/intern/rna_object.c62
-rw-r--r--source/blender/makesrna/intern/rna_particle.c5
-rw-r--r--source/blender/makesrna/intern/rna_pose.c14
-rw-r--r--source/blender/makesrna/intern/rna_rna.c184
-rw-r--r--source/blender/makesrna/intern/rna_scene.c122
-rw-r--r--source/blender/makesrna/intern/rna_screen.c20
-rw-r--r--source/blender/makesrna/intern/rna_space.c45
-rw-r--r--source/blender/makesrna/intern/rna_text.c13
-rw-r--r--source/blender/makesrna/intern/rna_texture.c564
-rw-r--r--source/blender/makesrna/intern/rna_ui.c565
-rw-r--r--source/blender/makesrna/intern/rna_userdef.c515
-rw-r--r--source/blender/makesrna/intern/rna_wm.c13
-rw-r--r--source/blender/makesrna/intern/rna_world.c35
-rw-r--r--source/blender/nodes/CMakeLists.txt4
-rw-r--r--source/blender/nodes/SConscript31
-rw-r--r--source/blender/nodes/TEX_node.h2
-rw-r--r--source/blender/nodes/intern/CMP_nodes/CMP_normalize.c2
-rw-r--r--source/blender/nodes/intern/SHD_nodes/SHD_dynamic.c6
-rw-r--r--source/blender/nodes/intern/SHD_nodes/SHD_invert.c2
-rw-r--r--source/blender/nodes/intern/TEX_nodes/Makefile2
-rw-r--r--source/blender/nodes/intern/TEX_nodes/TEX_image.c2
-rw-r--r--source/blender/nodes/intern/TEX_nodes/TEX_texture.c2
-rw-r--r--source/blender/nodes/intern/TEX_nodes/TEX_valToNor.c2
-rw-r--r--source/blender/nodes/intern/TEX_nodes/TEX_valToRgb.c2
-rw-r--r--source/blender/nodes/intern/TEX_util.c9
-rw-r--r--source/blender/python/BPY_extern.h6
-rw-r--r--source/blender/python/CMakeLists.txt5
-rw-r--r--source/blender/python/SConscript1
-rw-r--r--source/blender/python/epy_doc_gen.py298
-rw-r--r--source/blender/python/intern/Makefile1
-rw-r--r--source/blender/python/intern/bpy_compat.h1
-rw-r--r--source/blender/python/intern/bpy_interface.c387
-rw-r--r--source/blender/python/intern/bpy_operator.c22
-rw-r--r--source/blender/python/intern/bpy_operator.h2
-rw-r--r--source/blender/python/intern/bpy_operator_wrap.c (renamed from source/blender/python/intern/bpy_opwrapper.c)182
-rw-r--r--source/blender/python/intern/bpy_operator_wrap.h (renamed from source/blender/python/intern/bpy_opwrapper.h)4
-rw-r--r--source/blender/python/intern/bpy_rna.c901
-rw-r--r--source/blender/python/intern/bpy_rna.h9
-rw-r--r--source/blender/python/intern/bpy_ui.c68
-rw-r--r--source/blender/python/intern/bpy_util.c112
-rw-r--r--source/blender/python/intern/bpy_util.h28
-rw-r--r--source/blender/python/intern/stubs.c2
-rw-r--r--source/blender/render/intern/source/convertblender.c957
-rw-r--r--source/blender/render/intern/source/raytrace.c2
-rw-r--r--source/blender/render/intern/source/rendercore.c2
-rw-r--r--source/blender/render/intern/source/renderdatabase.c4
-rw-r--r--source/blender/windowmanager/CMakeLists.txt4
-rw-r--r--source/blender/windowmanager/SConscript4
-rw-r--r--source/blender/windowmanager/WM_api.h7
-rw-r--r--source/blender/windowmanager/intern/Makefile2
-rw-r--r--source/blender/windowmanager/intern/wm_event_system.c2
-rw-r--r--source/blender/windowmanager/intern/wm_files.c433
-rw-r--r--source/blender/windowmanager/intern/wm_init_exit.c22
-rw-r--r--source/blender/windowmanager/intern/wm_operators.c198
-rw-r--r--source/blender/windowmanager/intern/wm_subwindow.c23
-rw-r--r--source/blender/windowmanager/intern/wm_window.c4
-rw-r--r--source/creator/CMakeLists.txt10
-rw-r--r--source/creator/Makefile10
-rw-r--r--source/creator/SConscript16
-rw-r--r--source/creator/creator.c2
-rw-r--r--source/darwin/Makefile7
-rw-r--r--source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp14
-rw-r--r--source/gameengine/BlenderRoutines/CMakeLists.txt2
-rw-r--r--source/gameengine/BlenderRoutines/KX_BlenderGL.cpp14
-rw-r--r--source/gameengine/BlenderRoutines/KX_BlenderKeyboardDevice.cpp4
-rw-r--r--source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp166
-rw-r--r--source/gameengine/BlenderRoutines/KX_BlenderRenderTools.h3
-rw-r--r--source/gameengine/BlenderRoutines/Makefile3
-rw-r--r--source/gameengine/BlenderRoutines/SConscript5
-rw-r--r--source/gameengine/Converter/BL_ActionActuator.cpp172
-rw-r--r--source/gameengine/Converter/BL_ActionActuator.h14
-rw-r--r--source/gameengine/Converter/BL_BlenderDataConversion.cpp112
-rw-r--r--source/gameengine/Converter/BL_ShapeActionActuator.cpp176
-rw-r--r--source/gameengine/Converter/BL_ShapeActionActuator.h36
-rw-r--r--source/gameengine/Converter/CMakeLists.txt1
-rw-r--r--source/gameengine/Converter/KX_BlenderSceneConverter.cpp7
-rw-r--r--source/gameengine/Converter/KX_ConvertActuators.cpp16
-rw-r--r--source/gameengine/Converter/KX_ConvertSensors.cpp6
-rw-r--r--source/gameengine/Converter/SConscript2
-rw-r--r--source/gameengine/Expressions/BoolValue.cpp4
-rw-r--r--source/gameengine/Expressions/BoolValue.h2
-rw-r--r--source/gameengine/Expressions/ConstExpr.cpp2
-rw-r--r--source/gameengine/Expressions/ConstExpr.h2
-rw-r--r--source/gameengine/Expressions/EmptyValue.cpp2
-rw-r--r--source/gameengine/Expressions/EmptyValue.h2
-rw-r--r--source/gameengine/Expressions/ErrorValue.cpp2
-rw-r--r--source/gameengine/Expressions/ErrorValue.h2
-rw-r--r--source/gameengine/Expressions/FloatValue.cpp4
-rw-r--r--source/gameengine/Expressions/FloatValue.h2
-rw-r--r--source/gameengine/Expressions/InputParser.cpp17
-rw-r--r--source/gameengine/Expressions/InputParser.h2
-rw-r--r--source/gameengine/Expressions/IntValue.cpp21
-rw-r--r--source/gameengine/Expressions/IntValue.h12
-rw-r--r--source/gameengine/Expressions/ListValue.cpp138
-rw-r--r--source/gameengine/Expressions/ListValue.h13
-rw-r--r--source/gameengine/Expressions/PyObjectPlus.cpp1137
-rw-r--r--source/gameengine/Expressions/PyObjectPlus.h298
-rw-r--r--source/gameengine/Expressions/StringValue.cpp2
-rw-r--r--source/gameengine/Expressions/StringValue.h2
-rw-r--r--source/gameengine/Expressions/Value.cpp357
-rw-r--r--source/gameengine/Expressions/Value.h38
-rw-r--r--source/gameengine/Expressions/VectorValue.cpp2
-rw-r--r--source/gameengine/Expressions/VectorValue.h2
-rw-r--r--source/gameengine/Expressions/VoidValue.h2
-rw-r--r--source/gameengine/GameLogic/Joystick/SCA_Joystick.cpp91
-rw-r--r--source/gameengine/GameLogic/Joystick/SCA_Joystick.h41
-rw-r--r--source/gameengine/GameLogic/Joystick/SCA_JoystickDefines.h6
-rw-r--r--source/gameengine/GameLogic/Joystick/SCA_JoystickEvents.cpp4
-rw-r--r--source/gameengine/GameLogic/SCA_2DFilterActuator.cpp92
-rw-r--r--source/gameengine/GameLogic/SCA_2DFilterActuator.h37
-rw-r--r--source/gameengine/GameLogic/SCA_ANDController.cpp22
-rw-r--r--source/gameengine/GameLogic/SCA_ANDController.h2
-rw-r--r--source/gameengine/GameLogic/SCA_ActuatorSensor.cpp42
-rw-r--r--source/gameengine/GameLogic/SCA_ActuatorSensor.h6
-rw-r--r--source/gameengine/GameLogic/SCA_AlwaysSensor.cpp22
-rw-r--r--source/gameengine/GameLogic/SCA_AlwaysSensor.h2
-rw-r--r--source/gameengine/GameLogic/SCA_DelaySensor.cpp50
-rw-r--r--source/gameengine/GameLogic/SCA_DelaySensor.h10
-rw-r--r--source/gameengine/GameLogic/SCA_ExpressionController.cpp2
-rw-r--r--source/gameengine/GameLogic/SCA_ExpressionController.h2
-rw-r--r--source/gameengine/GameLogic/SCA_ILogicBrick.cpp67
-rw-r--r--source/gameengine/GameLogic/SCA_ILogicBrick.h10
-rw-r--r--source/gameengine/GameLogic/SCA_IObject.cpp22
-rw-r--r--source/gameengine/GameLogic/SCA_IObject.h2
-rw-r--r--source/gameengine/GameLogic/SCA_ISensor.cpp101
-rw-r--r--source/gameengine/GameLogic/SCA_ISensor.h19
-rw-r--r--source/gameengine/GameLogic/SCA_JoystickSensor.cpp244
-rw-r--r--source/gameengine/GameLogic/SCA_JoystickSensor.h13
-rw-r--r--source/gameengine/GameLogic/SCA_KeyboardSensor.cpp486
-rw-r--r--source/gameengine/GameLogic/SCA_KeyboardSensor.h58
-rw-r--r--source/gameengine/GameLogic/SCA_MouseSensor.cpp46
-rw-r--r--source/gameengine/GameLogic/SCA_MouseSensor.h8
-rw-r--r--source/gameengine/GameLogic/SCA_NANDController.cpp22
-rw-r--r--source/gameengine/GameLogic/SCA_NANDController.h2
-rw-r--r--source/gameengine/GameLogic/SCA_NORController.cpp22
-rw-r--r--source/gameengine/GameLogic/SCA_NORController.h2
-rw-r--r--source/gameengine/GameLogic/SCA_ORController.cpp22
-rw-r--r--source/gameengine/GameLogic/SCA_ORController.h2
-rw-r--r--source/gameengine/GameLogic/SCA_PropertyActuator.cpp67
-rw-r--r--source/gameengine/GameLogic/SCA_PropertyActuator.h5
-rw-r--r--source/gameengine/GameLogic/SCA_PropertySensor.cpp58
-rw-r--r--source/gameengine/GameLogic/SCA_PropertySensor.h16
-rw-r--r--source/gameengine/GameLogic/SCA_PythonController.cpp152
-rw-r--r--source/gameengine/GameLogic/SCA_PythonController.h8
-rw-r--r--source/gameengine/GameLogic/SCA_RandomActuator.cpp218
-rw-r--r--source/gameengine/GameLogic/SCA_RandomActuator.h64
-rw-r--r--source/gameengine/GameLogic/SCA_RandomSensor.cpp76
-rw-r--r--source/gameengine/GameLogic/SCA_RandomSensor.h15
-rw-r--r--source/gameengine/GameLogic/SCA_XNORController.cpp22
-rw-r--r--source/gameengine/GameLogic/SCA_XNORController.h2
-rw-r--r--source/gameengine/GameLogic/SCA_XORController.cpp22
-rw-r--r--source/gameengine/GameLogic/SCA_XORController.h2
-rw-r--r--source/gameengine/GamePlayer/common/CMakeLists.txt1
-rw-r--r--source/gameengine/GamePlayer/common/GPC_KeyboardDevice.cpp8
-rw-r--r--source/gameengine/GamePlayer/common/GPC_RenderTools.cpp200
-rw-r--r--source/gameengine/GamePlayer/common/GPC_RenderTools.h7
-rw-r--r--source/gameengine/GamePlayer/common/Makefile1
-rw-r--r--source/gameengine/GamePlayer/common/SConscript1
-rw-r--r--source/gameengine/GamePlayer/common/unix/Makefile1
-rw-r--r--source/gameengine/GamePlayer/common/windows/Makefile2
-rw-r--r--source/gameengine/GamePlayer/ghost/CMakeLists.txt1
-rw-r--r--source/gameengine/GamePlayer/ghost/GPG_Application.cpp22
-rw-r--r--source/gameengine/GamePlayer/ghost/GPG_Application.h6
-rw-r--r--source/gameengine/GamePlayer/ghost/GPG_ghost.cpp15
-rw-r--r--source/gameengine/GamePlayer/ghost/Makefile1
-rw-r--r--source/gameengine/GamePlayer/ghost/SConscript1
-rw-r--r--source/gameengine/Ketsji/BL_BlenderShader.cpp2
-rw-r--r--source/gameengine/Ketsji/BL_Shader.cpp276
-rw-r--r--source/gameengine/Ketsji/BL_Shader.h3
-rw-r--r--source/gameengine/Ketsji/CMakeLists.txt5
-rw-r--r--source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageActuator.cpp56
-rw-r--r--source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageActuator.h7
-rw-r--r--source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.cpp79
-rw-r--r--source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.h8
-rw-r--r--source/gameengine/Ketsji/KX_BlenderMaterial.cpp46
-rw-r--r--source/gameengine/Ketsji/KX_BlenderMaterial.h5
-rw-r--r--source/gameengine/Ketsji/KX_BulletPhysicsController.cpp38
-rw-r--r--source/gameengine/Ketsji/KX_BulletPhysicsController.h7
-rw-r--r--source/gameengine/Ketsji/KX_CDActuator.cpp113
-rw-r--r--source/gameengine/Ketsji/KX_CDActuator.h23
-rw-r--r--source/gameengine/Ketsji/KX_Camera.cpp298
-rw-r--r--source/gameengine/Ketsji/KX_Camera.h41
-rw-r--r--source/gameengine/Ketsji/KX_CameraActuator.cpp137
-rw-r--r--source/gameengine/Ketsji/KX_CameraActuator.h23
-rw-r--r--source/gameengine/Ketsji/KX_ConstraintActuator.cpp198
-rw-r--r--source/gameengine/Ketsji/KX_ConstraintActuator.h29
-rw-r--r--source/gameengine/Ketsji/KX_ConstraintWrapper.cpp37
-rw-r--r--source/gameengine/Ketsji/KX_ConstraintWrapper.h4
-rw-r--r--source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp29
-rw-r--r--source/gameengine/Ketsji/KX_Dome.cpp1819
-rw-r--r--source/gameengine/Ketsji/KX_Dome.h183
-rw-r--r--source/gameengine/Ketsji/KX_GameActuator.cpp53
-rw-r--r--source/gameengine/Ketsji/KX_GameActuator.h6
-rw-r--r--source/gameengine/Ketsji/KX_GameObject.cpp1253
-rw-r--r--source/gameengine/Ketsji/KX_GameObject.h156
-rw-r--r--source/gameengine/Ketsji/KX_IPhysicsController.h7
-rw-r--r--source/gameengine/Ketsji/KX_IpoActuator.cpp135
-rw-r--r--source/gameengine/Ketsji/KX_IpoActuator.h24
-rw-r--r--source/gameengine/Ketsji/KX_KetsjiEngine.cpp191
-rw-r--r--source/gameengine/Ketsji/KX_KetsjiEngine.h9
-rw-r--r--source/gameengine/Ketsji/KX_Light.cpp146
-rw-r--r--source/gameengine/Ketsji/KX_Light.h5
-rw-r--r--source/gameengine/Ketsji/KX_MeshProxy.cpp223
-rw-r--r--source/gameengine/Ketsji/KX_MeshProxy.h18
-rw-r--r--source/gameengine/Ketsji/KX_MotionState.cpp18
-rw-r--r--source/gameengine/Ketsji/KX_MotionState.h1
-rw-r--r--source/gameengine/Ketsji/KX_MouseFocusSensor.cpp245
-rw-r--r--source/gameengine/Ketsji/KX_MouseFocusSensor.h28
-rw-r--r--source/gameengine/Ketsji/KX_NearSensor.cpp51
-rw-r--r--source/gameengine/Ketsji/KX_NearSensor.h4
-rw-r--r--source/gameengine/Ketsji/KX_ObjectActuator.cpp110
-rw-r--r--source/gameengine/Ketsji/KX_ObjectActuator.h24
-rw-r--r--source/gameengine/Ketsji/KX_OdePhysicsController.h4
-rw-r--r--source/gameengine/Ketsji/KX_ParentActuator.cpp91
-rw-r--r--source/gameengine/Ketsji/KX_ParentActuator.h14
-rw-r--r--source/gameengine/Ketsji/KX_PhysicsObjectWrapper.cpp54
-rw-r--r--source/gameengine/Ketsji/KX_PhysicsObjectWrapper.h12
-rw-r--r--source/gameengine/Ketsji/KX_PolyProxy.cpp78
-rw-r--r--source/gameengine/Ketsji/KX_PolyProxy.h4
-rw-r--r--source/gameengine/Ketsji/KX_PolygonMaterial.cpp270
-rw-r--r--source/gameengine/Ketsji/KX_PolygonMaterial.h17
-rw-r--r--source/gameengine/Ketsji/KX_PyConstraintBinding.cpp5
-rw-r--r--source/gameengine/Ketsji/KX_PyMath.cpp36
-rw-r--r--source/gameengine/Ketsji/KX_PyMath.h33
-rw-r--r--source/gameengine/Ketsji/KX_PythonInit.cpp347
-rw-r--r--source/gameengine/Ketsji/KX_PythonInit.h5
-rw-r--r--source/gameengine/Ketsji/KX_PythonInitTypes.cpp233
-rw-r--r--source/gameengine/Ketsji/KX_PythonInitTypes.h35
-rw-r--r--source/gameengine/Ketsji/KX_RadarSensor.cpp45
-rw-r--r--source/gameengine/Ketsji/KX_RadarSensor.h4
-rw-r--r--source/gameengine/Ketsji/KX_RayCast.cpp3
-rw-r--r--source/gameengine/Ketsji/KX_RaySensor.cpp113
-rw-r--r--source/gameengine/Ketsji/KX_RaySensor.h28
-rw-r--r--source/gameengine/Ketsji/KX_SCA_AddObjectActuator.cpp157
-rw-r--r--source/gameengine/Ketsji/KX_SCA_AddObjectActuator.h15
-rw-r--r--source/gameengine/Ketsji/KX_SCA_DynamicActuator.cpp37
-rw-r--r--source/gameengine/Ketsji/KX_SCA_DynamicActuator.h13
-rw-r--r--source/gameengine/Ketsji/KX_SCA_EndObjectActuator.cpp22
-rw-r--r--source/gameengine/Ketsji/KX_SCA_EndObjectActuator.h2
-rw-r--r--source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.cpp82
-rw-r--r--source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.h7
-rw-r--r--source/gameengine/Ketsji/KX_SG_BoneParentNodeRelationship.cpp7
-rw-r--r--source/gameengine/Ketsji/KX_SG_BoneParentNodeRelationship.h3
-rw-r--r--source/gameengine/Ketsji/KX_SG_NodeRelationships.cpp52
-rw-r--r--source/gameengine/Ketsji/KX_SG_NodeRelationships.h9
-rw-r--r--source/gameengine/Ketsji/KX_Scene.cpp274
-rw-r--r--source/gameengine/Ketsji/KX_Scene.h45
-rw-r--r--source/gameengine/Ketsji/KX_SceneActuator.cpp158
-rw-r--r--source/gameengine/Ketsji/KX_SceneActuator.h18
-rw-r--r--source/gameengine/Ketsji/KX_SoundActuator.cpp382
-rw-r--r--source/gameengine/Ketsji/KX_SoundActuator.h65
-rw-r--r--source/gameengine/Ketsji/KX_StateActuator.cpp47
-rw-r--r--source/gameengine/Ketsji/KX_StateActuator.h13
-rw-r--r--source/gameengine/Ketsji/KX_SumoPhysicsController.cpp5
-rw-r--r--source/gameengine/Ketsji/KX_SumoPhysicsController.h5
-rw-r--r--source/gameengine/Ketsji/KX_TouchSensor.cpp83
-rw-r--r--source/gameengine/Ketsji/KX_TouchSensor.h8
-rw-r--r--source/gameengine/Ketsji/KX_TrackToActuator.cpp107
-rw-r--r--source/gameengine/Ketsji/KX_TrackToActuator.h18
-rw-r--r--source/gameengine/Ketsji/KX_VehicleWrapper.cpp121
-rw-r--r--source/gameengine/Ketsji/KX_VehicleWrapper.h34
-rw-r--r--source/gameengine/Ketsji/KX_VertexProxy.cpp171
-rw-r--r--source/gameengine/Ketsji/KX_VertexProxy.h6
-rw-r--r--source/gameengine/Ketsji/KX_VisibilityActuator.cpp51
-rw-r--r--source/gameengine/Ketsji/KX_VisibilityActuator.h12
-rw-r--r--source/gameengine/Ketsji/SConscript15
-rw-r--r--source/gameengine/Network/NG_NetworkScene.h5
-rw-r--r--source/gameengine/Physics/BlOde/OdePhysicsController.h4
-rw-r--r--source/gameengine/Physics/BlOde/OdePhysicsEnvironment.h1
-rw-r--r--source/gameengine/Physics/Bullet/CMakeLists.txt10
-rw-r--r--source/gameengine/Physics/Bullet/CcdGraphicController.cpp112
-rw-r--r--source/gameengine/Physics/Bullet/CcdGraphicController.h74
-rw-r--r--source/gameengine/Physics/Bullet/CcdPhysicsController.cpp338
-rw-r--r--source/gameengine/Physics/Bullet/CcdPhysicsController.h47
-rw-r--r--source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp655
-rw-r--r--source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h15
-rw-r--r--source/gameengine/Physics/Bullet/Makefile8
-rw-r--r--source/gameengine/Physics/Bullet/SConscript16
-rw-r--r--source/gameengine/Physics/Dummy/DummyPhysicsEnvironment.h1
-rw-r--r--source/gameengine/Physics/Sumo/SumoPhysicsController.h5
-rw-r--r--source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.h1
-rw-r--r--source/gameengine/Physics/common/CMakeLists.txt2
-rw-r--r--source/gameengine/Physics/common/PHY_DynamicTypes.h35
-rw-r--r--source/gameengine/Physics/common/PHY_IController.cpp (renamed from intern/bmfont/intern/BMF_FontData.h)32
-rw-r--r--source/gameengine/Physics/common/PHY_IController.h (renamed from source/blender/editors/include/UI_text.h)40
-rw-r--r--source/gameengine/Physics/common/PHY_IGraphicController.cpp (renamed from source/blender/ftfont/FTF_Settings.h)27
-rw-r--r--source/gameengine/Physics/common/PHY_IGraphicController.h (renamed from intern/bmfont/BMF_Fonts.h)60
-rw-r--r--source/gameengine/Physics/common/PHY_IMotionState.h2
-rw-r--r--source/gameengine/Physics/common/PHY_IPhysicsController.h14
-rw-r--r--source/gameengine/Physics/common/PHY_IPhysicsEnvironment.h4
-rw-r--r--source/gameengine/Physics/common/PHY_Pro.h6
-rw-r--r--source/gameengine/Physics/common/SConscript2
-rw-r--r--source/gameengine/PyDoc/BL_ActionActuator.py8
-rw-r--r--source/gameengine/PyDoc/BL_Shader.py228
-rw-r--r--source/gameengine/PyDoc/BL_ShapeActionActuator.py3
-rw-r--r--source/gameengine/PyDoc/CListValue.py59
-rw-r--r--source/gameengine/PyDoc/GameKeys.py26
-rw-r--r--source/gameengine/PyDoc/GameLogic.py53
-rw-r--r--source/gameengine/PyDoc/GameTypes.py75
-rw-r--r--source/gameengine/PyDoc/KX_BlenderMaterial.py38
-rw-r--r--source/gameengine/PyDoc/KX_CDActuator.py23
-rw-r--r--source/gameengine/PyDoc/KX_Camera.py22
-rw-r--r--source/gameengine/PyDoc/KX_ConstraintActuator.py69
-rw-r--r--source/gameengine/PyDoc/KX_ConstraintWrapper.py28
-rw-r--r--source/gameengine/PyDoc/KX_GameActuator.py7
-rw-r--r--source/gameengine/PyDoc/KX_GameObject.py137
-rw-r--r--source/gameengine/PyDoc/KX_IpoActuator.py47
-rw-r--r--source/gameengine/PyDoc/KX_LightObject.py (renamed from source/gameengine/PyDoc/KX_Light.py)2
-rw-r--r--source/gameengine/PyDoc/KX_MeshProxy.py9
-rw-r--r--source/gameengine/PyDoc/KX_MouseFocusSensor.py53
-rw-r--r--source/gameengine/PyDoc/KX_NetworkMessageActuator.py13
-rw-r--r--source/gameengine/PyDoc/KX_NetworkMessageSensor.py17
-rw-r--r--source/gameengine/PyDoc/KX_ParentActuator.py7
-rw-r--r--source/gameengine/PyDoc/KX_PhysicsObjectWrapper.py47
-rw-r--r--source/gameengine/PyDoc/KX_RaySensor.py25
-rw-r--r--source/gameengine/PyDoc/KX_SCA_AddObjectActuator.py22
-rw-r--r--source/gameengine/PyDoc/KX_SCA_DynamicActuator.py30
-rw-r--r--source/gameengine/PyDoc/KX_SCA_ReplaceMeshActuator.py24
-rw-r--r--source/gameengine/PyDoc/KX_Scene.py16
-rw-r--r--source/gameengine/PyDoc/KX_SceneActuator.py14
-rw-r--r--source/gameengine/PyDoc/KX_SoundActuator.py56
-rw-r--r--source/gameengine/PyDoc/KX_StateActuator.py18
-rw-r--r--source/gameengine/PyDoc/KX_TouchSensor.py4
-rw-r--r--source/gameengine/PyDoc/KX_TrackToActuator.py11
-rw-r--r--source/gameengine/PyDoc/KX_VehicleWrapper.py166
-rw-r--r--source/gameengine/PyDoc/KX_VertexProxy.py26
-rw-r--r--source/gameengine/PyDoc/KX_VisibilityActuator.py11
-rw-r--r--source/gameengine/PyDoc/SCA_2DFilterActuator.py44
-rw-r--r--source/gameengine/PyDoc/SCA_ActuatorSensor.py (renamed from source/gameengine/PyDoc/KX_ActuatorSensor.py)5
-rw-r--r--source/gameengine/PyDoc/SCA_ILogicBrick.py6
-rw-r--r--source/gameengine/PyDoc/SCA_JoystickSensor.py30
-rw-r--r--source/gameengine/PyDoc/SCA_KeyboardSensor.py37
-rw-r--r--source/gameengine/PyDoc/SCA_MouseSensor.py10
-rw-r--r--source/gameengine/PyDoc/SCA_NANDController.py11
-rw-r--r--source/gameengine/PyDoc/SCA_NORController.py11
-rw-r--r--source/gameengine/PyDoc/SCA_RandomSensor.py7
-rw-r--r--source/gameengine/PyDoc/SCA_XNORController.py11
-rw-r--r--source/gameengine/PyDoc/SCA_XORController.py11
-rw-r--r--source/gameengine/PyDoc/SConscript45
-rw-r--r--source/gameengine/PyDoc/WhatsNew.py2
-rw-r--r--source/gameengine/PyDoc/bge_api_validate_py.txt110
-rwxr-xr-x[-rw-r--r--]source/gameengine/PyDoc/epy_docgen.sh2
-rw-r--r--source/gameengine/Rasterizer/RAS_2DFilterManager.cpp8
-rw-r--r--source/gameengine/Rasterizer/RAS_BucketManager.cpp8
-rw-r--r--source/gameengine/Rasterizer/RAS_FramingManager.h7
-rw-r--r--source/gameengine/Rasterizer/RAS_IRasterizer.h1
-rw-r--r--source/gameengine/Rasterizer/RAS_IRenderTools.h6
-rw-r--r--source/gameengine/Rasterizer/RAS_LightObject.h1
-rw-r--r--source/gameengine/Rasterizer/RAS_MaterialBucket.cpp29
-rw-r--r--source/gameengine/Rasterizer/RAS_MaterialBucket.h5
-rw-r--r--source/gameengine/Rasterizer/RAS_MeshObject.cpp2
-rw-r--r--source/gameengine/Rasterizer/RAS_MeshObject.h10
-rw-r--r--source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.cpp4
-rw-r--r--source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.h2
-rw-r--r--source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp29
-rw-r--r--source/gameengine/Rasterizer/RAS_Polygon.cpp16
-rw-r--r--source/gameengine/Rasterizer/RAS_Polygon.h17
-rw-r--r--source/gameengine/SceneGraph/SG_BBox.cpp7
-rw-r--r--source/gameengine/SceneGraph/SG_BBox.h2
-rw-r--r--source/gameengine/SceneGraph/SG_IObject.cpp2
-rw-r--r--source/gameengine/SceneGraph/SG_IObject.h30
-rw-r--r--source/gameengine/SceneGraph/SG_Node.cpp7
-rw-r--r--source/gameengine/SceneGraph/SG_Node.h3
-rw-r--r--source/gameengine/SceneGraph/SG_ParentRelation.h3
-rw-r--r--source/gameengine/SceneGraph/SG_Spatial.cpp19
-rw-r--r--source/gameengine/SceneGraph/SG_Spatial.h13
-rw-r--r--source/gameengine/VideoTexture/FilterNormal.cpp21
-rw-r--r--source/gameengine/VideoTexture/FilterSource.h3
-rw-r--r--source/gameengine/VideoTexture/ImageRender.cpp27
-rw-r--r--source/gameengine/VideoTexture/ImageViewport.cpp2
-rw-r--r--source/gameengine/VideoTexture/Texture.cpp2
-rw-r--r--source/gameengine/VideoTexture/VideoBase.cpp2
-rw-r--r--source/gameengine/VideoTexture/VideoFFmpeg.h8
-rw-r--r--source/gameengine/VideoTexture/blendVideoTex.cpp10
-rw-r--r--source/nan_compile.mk5
-rw-r--r--source/nan_definitions.mk201
-rw-r--r--tools/Blender.py19
-rwxr-xr-xtools/btools.py23
1037 files changed, 66182 insertions, 64809 deletions
diff --git a/CMake/macros.cmake b/CMake/macros.cmake
index 95799a2c1fd..df8e7515e67 100644
--- a/CMake/macros.cmake
+++ b/CMake/macros.cmake
@@ -43,9 +43,9 @@ MACRO(SETUP_LIBDIRS)
CMAKE_POLICY(SET CMP0003 NEW)
endif(COMMAND cmake_policy)
LINK_DIRECTORIES(${PYTHON_LIBPATH} ${SDL_LIBPATH} ${JPEG_LIBPATH} ${PNG_LIBPATH} ${ZLIB_LIBPATH} ${ICONV_LIBPATH} ${OPENEXR_LIBPATH} ${QUICKTIME_LIBPATH} ${FFMPEG_LIBPATH})
+ LINK_DIRECTORIES(${FREETYPE_LIBPATH})
IF(WITH_INTERNATIONAL)
LINK_DIRECTORIES(${GETTEXT_LIBPATH})
- LINK_DIRECTORIES(${FREETYPE_LIBPATH})
ENDIF(WITH_INTERNATIONAL)
IF(WITH_OPENAL)
LINK_DIRECTORIES(${OPENAL_LIBPATH})
@@ -60,8 +60,25 @@ MACRO(SETUP_LIBLINKS
target)
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${PLATFORM_LINKFLAGS} ")
TARGET_LINK_LIBRARIES(${target} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} ${PYTHON_LIB} ${PYTHON_LINKFLAGS} ${JPEG_LIB} ${PNG_LIB} ${ZLIB_LIB} ${SDL_LIB} ${LLIBS})
+
+ TARGET_LINK_LIBRARIES(${target} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} ${PYTHON_LINKFLAGS} ${JPEG_LIB} ${PNG_LIB} ${ZLIB_LIB} ${SDL_LIB} ${LLIBS})
+ TARGET_LINK_LIBRARIES(${target} ${FREETYPE_LIB})
+
+ # since we are using the local libs for python when compiling msvc projects, we need to add _d when compiling debug versions
+
+ IF(WIN32)
+
+ TARGET_LINK_LIBRARIES(${target} debug ${PYTHON_LIB}_d)
+
+ TARGET_LINK_LIBRARIES(${target} optimized ${PYTHON_LIB})
+
+ ELSE(WIN32)
+
+ TARGET_LINK_LIBRARIES(${target} ${PYTHON_LIB})
+
+ ENDIF(WIN32)
+
IF(WITH_INTERNATIONAL)
- TARGET_LINK_LIBRARIES(${target} ${FREETYPE_LIB})
TARGET_LINK_LIBRARIES(${target} ${GETTEXT_LIB})
ENDIF(WITH_INTERNATIONAL)
IF(WITH_OPENAL)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 45caf48091b..f2bf65dfb57 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -223,11 +223,15 @@ IF(WIN32)
SET(PYTHON_LIB python25)
SET(PYTHON_LIBPATH ${PYTHON}/lib)
- #SET(WITH_OPENAL ON)
- SET(OPENAL ${LIBDIR}/openal)
- SET(OPENAL_INC ${OPENAL}/include ${OPENAL}/include/AL)
- SET(OPENAL_LIB openal_static)
- SET(OPENAL_LIBPATH ${OPENAL}/lib)
+ IF(CMAKE_CL_64)
+ SET(WITH_OPENAL OFF)
+ ELSE(CMAKE_CL_64)
+ #SET(WITH_OPENAL ON)
+ SET(OPENAL ${LIBDIR}/openal)
+ SET(OPENAL_INC ${OPENAL}/include ${OPENAL}/include/AL)
+ SET(OPENAL_LIB openal_static)
+ SET(OPENAL_LIBPATH ${OPENAL}/lib)
+ ENDIF(CMAKE_CL_64)
IF(CMAKE_CL_64)
SET(PNG_LIB libpng)
@@ -238,11 +242,7 @@ IF(WIN32)
SET(ZLIB ${LIBDIR}/zlib)
SET(ZLIB_INC ${ZLIB}/include)
- IF(CMAKE_CL_64)
- SET(ZLIB_LIB zlib)
- ELSE(CMAKE_CL_64)
- SET(ZLIB_LIB libz)
- ENDIF(CMAKE_CL_64)
+ SET(ZLIB_LIB libz)
SET(ZLIB_LIBPATH ${ZLIB}/lib)
SET(PTHREADS ${LIBDIR}/pthreads)
@@ -436,10 +436,6 @@ ENDIF(CMAKE_SYSTEM_NAME MATCHES "Linux")
#-----------------------------------------------------------------------------
# Common.
-SET(FTGL ${CMAKE_SOURCE_DIR}/extern/bFTGL)
-SET(FTGL_INC ${FTGL}/include)
-SET(FTGL_LIB extern_ftgl)
-
set(OPENJPEG ${CMAKE_SOURCE_DIR}/extern/libopenjpeg)
set(OPENJPEG_INC ${OPENJPEG})
set(OPENJPEG_LIb extern_libopenjpeg)
diff --git a/SConstruct b/SConstruct
index c91b44e3659..9053efbf474 100644
--- a/SConstruct
+++ b/SConstruct
@@ -270,29 +270,34 @@ if 'blendernogame' in B.targets:
env['WITH_BF_GAMEENGINE'] = False
if 'blenderlite' in B.targets:
- env['WITH_BF_GAMEENGINE'] = False
- env['WITH_BF_OPENAL'] = False
- env['WITH_BF_OPENEXR'] = False
- env['WITH_BF_ICONV'] = False
- env['WITH_BF_INTERNATIONAL'] = False
- env['WITH_BF_OPENJPEG'] = False
- env['WITH_BF_FFMPEG'] = False
- env['WITH_BF_QUICKTIME'] = False
- env['WITH_BF_YAFRAY'] = False
- env['WITH_BF_REDCODE'] = False
- env['WITH_BF_FTGL'] = False
- env['WITH_BF_DDS'] = False
- env['WITH_BF_ZLIB'] = False
- env['WITH_BF_SDL'] = False
- env['WITH_BF_JPEG'] = False
- env['WITH_BF_PNG'] = False
- env['WITH_BF_ODE'] = False
- env['WITH_BF_BULLET'] = False
- env['WITH_BF_SOLID'] = False
- env['WITH_BF_BINRELOC'] = False
- env['BF_BUILDINFO'] = False
- env['BF_NO_ELBEEM'] = True
- env['WITH_BF_PYTHON'] = False
+ target_env_defs = {}
+ target_env_defs['WITH_BF_GAMEENGINE'] = False
+ target_env_defs['WITH_BF_OPENAL'] = False
+ target_env_defs['WITH_BF_OPENEXR'] = False
+ target_env_defs['WITH_BF_ICONV'] = False
+ target_env_defs['WITH_BF_INTERNATIONAL'] = False
+ target_env_defs['WITH_BF_OPENJPEG'] = False
+ target_env_defs['WITH_BF_FFMPEG'] = False
+ target_env_defs['WITH_BF_QUICKTIME'] = False
+ target_env_defs['WITH_BF_YAFRAY'] = False
+ target_env_defs['WITH_BF_REDCODE'] = False
+ target_env_defs['WITH_BF_DDS'] = False
+ target_env_defs['WITH_BF_ZLIB'] = False
+ target_env_defs['WITH_BF_SDL'] = False
+ target_env_defs['WITH_BF_JPEG'] = False
+ target_env_defs['WITH_BF_PNG'] = False
+ target_env_defs['WITH_BF_ODE'] = False
+ target_env_defs['WITH_BF_BULLET'] = False
+ target_env_defs['WITH_BF_SOLID'] = False
+ target_env_defs['WITH_BF_BINRELOC'] = False
+ target_env_defs['BF_BUILDINFO'] = False
+ target_env_defs['BF_NO_ELBEEM'] = True
+ target_env_defs['WITH_BF_PYTHON'] = False
+
+ # Merge blenderlite, let command line to override
+ for k,v in target_env_defs.iteritems():
+ if k not in B.arguments:
+ env[k] = v
if env['WITH_BF_SDL'] == False and env['OURPLATFORM'] in ('win32-vc', 'win32-ming', 'win64-vc'):
env['PLATFORM_LINKFLAGS'].remove('/ENTRY:mainCRTStartup')
@@ -472,6 +477,17 @@ if env['OURPLATFORM']!='darwin':
source=[dp+os.sep+f for f in df]
scriptinstall.append(env.Install(dir=dir,source=source))
+ #-- .blender/ui
+ scriptpath='release/ui'
+ for dp, dn, df in os.walk(scriptpath):
+ if 'CVS' in dn:
+ dn.remove('CVS')
+ if '.svn' in dn:
+ dn.remove('.svn')
+ dir=env['BF_INSTALLDIR']+'/.blender/ui'+dp[len(scriptpath):]
+ source=[dp+os.sep+f for f in df]
+ scriptinstall.append(env.Install(dir=dir,source=source))
+
#-- icons
if env['OURPLATFORM']=='linux2':
iconlist = []
@@ -565,9 +581,11 @@ if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'win64-vc'):
else:
dllsources.append('${BF_SDL_LIBPATH}/SDL.dll')
if env['WITH_BF_PYTHON']:
- dllsources.append('#release/windows/extra/python25.zip')
+ ver = env["BF_PYTHON_VERSION"].replace(".", "")
+
+ dllsources.append('#release/windows/extra/python' + ver + '.zip')
dllsources.append('#release/windows/extra/zlib.pyd')
- if env['BF_DEBUG']:
+ if env['BF_DEBUG'] and not env["BF_NO_PYDEBUG"]:
dllsources.append('${BF_PYTHON_LIBPATH}/${BF_PYTHON_LIB}_d.dll')
else:
dllsources.append('${BF_PYTHON_LIBPATH}/${BF_PYTHON_LIB}.dll')
@@ -577,14 +595,14 @@ if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'win64-vc'):
else:
dllsources += ['${BF_ICONV_LIBPATH}/iconv.dll']
if env['WITH_BF_FFMPEG']:
- dllsources += ['${LCGDIR}/ffmpeg/lib/avcodec-51.dll',
+ dllsources += ['${LCGDIR}/ffmpeg/lib/avcodec-52.dll',
'${LCGDIR}/ffmpeg/lib/avformat-52.dll',
'${LCGDIR}/ffmpeg/lib/avdevice-52.dll',
- '${LCGDIR}/ffmpeg/lib/avutil-49.dll',
- '${LCGDIR}/ffmpeg/lib/libfaad-0.dll',
+ '${LCGDIR}/ffmpeg/lib/avutil-50.dll',
+ '${LCGDIR}/ffmpeg/lib/libfaad-2.dll',
'${LCGDIR}/ffmpeg/lib/libfaac-0.dll',
'${LCGDIR}/ffmpeg/lib/libmp3lame-0.dll',
- '${LCGDIR}/ffmpeg/lib/libx264-59.dll',
+ '${LCGDIR}/ffmpeg/lib/libx264-67.dll',
'${LCGDIR}/ffmpeg/lib/xvidcore.dll',
'${LCGDIR}/ffmpeg/lib/swscale-0.dll']
windlls = env.Install(dir=env['BF_INSTALLDIR'], source = dllsources)
@@ -622,6 +640,13 @@ if not env['WITHOUT_BF_INSTALL']:
#------------ EPYDOC
if env['WITH_BF_DOCS']:
- SConscript('source/blender/python/api2_2x/doc/SConscript')
- SConscript('source/gameengine/PyDoc/SConscript')
+ try: import epydoc
+ except: epydoc = None
+
+ if epydoc:
+ SConscript('source/blender/python/api2_2x/doc/SConscript')
+ SConscript('source/gameengine/PyDoc/SConscript')
+ else:
+ print "No epydoc install detected, Python API and Gameengine API Docs will not be generated "
+
diff --git a/blenderplayer/CMakeLists.txt b/blenderplayer/CMakeLists.txt
index b9ac3c7a8c6..5b13a5f4521 100644
--- a/blenderplayer/CMakeLists.txt
+++ b/blenderplayer/CMakeLists.txt
@@ -100,14 +100,11 @@ IF(UNIX)
extern_bullet
bf_guardedalloc
bf_memutil
- bf_bmfont
bf_blenlib
bf_cineon
bf_openexr
extern_libopenjpeg
bf_dds
- bf_ftfont
- extern_ftgl
bf_readblenfile
blenkernel_blc
bf_quicktime
diff --git a/config/darwin-config.py b/config/darwin-config.py
index 4f002aecef7..78a8c71b7dd 100644
--- a/config/darwin-config.py
+++ b/config/darwin-config.py
@@ -40,11 +40,7 @@ else:
# enable ffmpeg support
WITH_BF_FFMPEG = True # -DWITH_FFMPEG
BF_FFMPEG = "#extern/ffmpeg"
-# trick : The version of ffmpeg in extern/ffmpeg uses explicit libav.. directory in #include statements
-# To keep Blender compatible with older versions, I add ${BF_FFMPEG} to the inc dir so that ffmpeg
-# finds the files directly in extern/ffmpeg/libav... while blender finds them in
-# extern/ffmpeg/include.
-BF_FFMPEG_INC = '${BF_FFMPEG}/include ${BF_FFMPEG}'
+BF_FFMPEG_INC = '${BF_FFMPEG}'
if USE_SDK==True:
BF_FFMPEG_EXTRA = '-isysroot '+MACOSX_SDK+' -mmacosx-version-min='+MAC_MIN_VERS
#BF_FFMPEG_LIBPATH='${BF_FFMPEG}/lib'
@@ -104,9 +100,6 @@ BF_SDL_INC = '${BF_SDL}/include' #$(shell $(BF_SDL)/bin/sdl-config --cflags)
BF_SDL_LIB = 'SDL' #BF_SDL #$(shell $(BF_SDL)/bin/sdl-config --libs) -lSDL_mixer
BF_SDL_LIBPATH = '${BF_SDL}/lib'
-WITH_BF_FMOD = False
-BF_FMOD = LIBDIR + '/fmod'
-
WITH_BF_OPENEXR = True
WITH_BF_STATICOPENEXR = False
BF_OPENEXR = '${LCGDIR}/openexr'
@@ -145,11 +138,6 @@ BF_GETTEXT_INC = '${BF_GETTEXT}/include'
BF_GETTEXT_LIB = 'intl'
BF_GETTEXT_LIBPATH = '${BF_GETTEXT}/lib'
-WITH_BF_FTGL = True
-BF_FTGL = '#extern/bFTGL'
-BF_FTGL_INC = '${BF_FTGL}/include'
-BF_FTGL_LIB = 'extern_ftgl'
-
WITH_BF_GAMEENGINE=True
WITH_BF_PLAYER=True
diff --git a/config/irix6-config.py b/config/irix6-config.py
index cb66dbafcce..1ef271b5074 100644
--- a/config/irix6-config.py
+++ b/config/irix6-config.py
@@ -30,14 +30,11 @@ WITH_BF_STATICCXX = 'false'
BF_CXX_LIB_STATIC = '${BF_CXX}/lib/libstdc++.a'
WITH_BF_SDL = 'true'
-BF_SDL = LCGDIR+'/SDL' #$(shell sdl-config --prefix)
+BF_SDL = LCGDIR+'/sdl' #$(shell sdl-config --prefix)
BF_SDL_INC = '${BF_SDL}/include/SDL' #$(shell $(BF_SDL)/bin/sdl-config --cflags)
BF_SDL_LIB = 'SDL audio iconv charset' #BF_SDL #$(shell $(BF_SDL)/bin/sdl-config --libs) -lSDL_mixer
BF_SDL_LIBPATH = '${BF_SDL}/lib'
-WITH_BF_FMOD = 'false'
-BF_FMOD = LIBDIR + '/fmod'
-
WITH_BF_OPENEXR = 'false'
WITH_BF_STATICOPENEXR = 'false'
BF_OPENEXR = '/usr'
@@ -80,11 +77,6 @@ BF_GETTEXT_INC = '${BF_GETTEXT}/include'
BF_GETTEXT_LIB = 'gettextpo intl'
BF_GETTEXT_LIBPATH = '${BF_GETTEXT}/lib'
-WITH_BF_FTGL = 'true'
-BF_FTGL = '#extern/bFTGL'
-BF_FTGL_INC = '${BF_FTGL}/include'
-BF_FTGL_LIB = 'extern_ftgl'
-
WITH_BF_GAMEENGINE='false'
WITH_BF_ODE = 'false'
diff --git a/config/linux2-config.py b/config/linux2-config.py
index 45363f16cb0..eb93d8084f1 100644
--- a/config/linux2-config.py
+++ b/config/linux2-config.py
@@ -32,9 +32,6 @@ BF_SDL = '/usr' #$(shell sdl-config --prefix)
BF_SDL_INC = '${BF_SDL}/include/SDL' #$(shell $(BF_SDL)/bin/sdl-config --cflags)
BF_SDL_LIB = 'SDL' #BF_SDL #$(shell $(BF_SDL)/bin/sdl-config --libs) -lSDL_mixer
-WITH_BF_FMOD = False
-BF_FMOD = LIBDIR + '/fmod'
-
WITH_BF_OPENEXR = True
WITH_BF_STATICOPENEXR = False
BF_OPENEXR = '/usr'
@@ -74,11 +71,6 @@ BF_GETTEXT_INC = '${BF_GETTEXT}/include'
BF_GETTEXT_LIB = 'gettextlib'
BF_GETTEXT_LIBPATH = '${BF_GETTEXT}/lib'
-WITH_BF_FTGL = True
-BF_FTGL = '#extern/bFTGL'
-BF_FTGL_INC = '${BF_FTGL}/include'
-BF_FTGL_LIB = 'extern_ftgl'
-
WITH_BF_GAMEENGINE=False
WITH_BF_ODE = False
@@ -138,19 +130,14 @@ BF_FFMPEG_LIB = ''
# Uncomment the following two lines to use system's ffmpeg
# BF_FFMPEG = '/usr'
# BF_FFMPEG_LIB = 'avformat avcodec swscale avutil avdevice'
-# trick : The version of ffmpeg in extern/ffmpeg uses explicit libav.. directory in #include statements
-# To keep Blender compatible with older version, I add ${BF_FFMPEG} to the inc dir so that ffmpeg
-# finds the files directly in extern/ffmpeg/libav... while blender finds them in
-# extern/ffmpeg/include. When using system ffmpeg, you don't need that, assuming the system library
-# still use the flat directory model, otherwise will not compile anyway
-BF_FFMPEG_INC = '${BF_FFMPEG}/include ${BF_FFMPEG}'
+BF_FFMPEG_INC = '${BF_FFMPEG}'
BF_FFMPEG_LIBPATH='${BF_FFMPEG}/lib'
# enable ogg, vorbis and theora in ffmpeg
WITH_BF_OGG = False # -DWITH_OGG
BF_OGG = '/usr'
BF_OGG_INC = '${BF_OGG}/include'
-BF_OGG_LIB = 'ogg vorbis theoraenc theoradec'
+BF_OGG_LIB = 'ogg vorbis vorbisenc theoraenc theoradec'
WITH_BF_OPENJPEG = True
BF_OPENJPEG = '#extern/libopenjpeg'
diff --git a/config/linuxcross-config.py b/config/linuxcross-config.py
index 8c643b75d63..4b17224eacc 100644
--- a/config/linuxcross-config.py
+++ b/config/linuxcross-config.py
@@ -35,9 +35,6 @@ BF_PTHREADS_INC = '${BF_PTHREADS}/include'
BF_PTHREADS_LIB = 'pthreadGC2'
BF_PTHREADS_LIBPATH = '${BF_PTHREADS}/lib'
-WITH_BF_FMOD = False
-BF_FMOD = LIBDIR + '/fmod'
-
WITH_BF_OPENEXR = True
WITH_BF_STATICOPENEXR = False
BF_OPENEXR = LIBDIR + '/gcc/openexr'
@@ -77,11 +74,6 @@ BF_GETTEXT_INC = '${BF_GETTEXT}/include'
BF_GETTEXT_LIB = 'gnu_gettext'
BF_GETTEXT_LIBPATH = '${BF_GETTEXT}/lib'
-WITH_BF_FTGL = True
-BF_FTGL = LIBDIR + '/ftgl'
-BF_FTGL_INC = '${BF_FTGL}/include'
-BF_FTGL_LIB = 'extern_ftgl'
-
WITH_BF_GAMEENGINE = False
WITH_BF_ODE = True
diff --git a/config/openbsd3-config.py b/config/openbsd3-config.py
index 8fc334874f9..6a7518a7928 100644
--- a/config/openbsd3-config.py
+++ b/config/openbsd3-config.py
@@ -22,9 +22,6 @@ BF_SDL_INC = '${BF_SDL}/include/SDL' #$(shell $(BF_SDL)/bin/sdl-config --cflags)
BF_SDL_LIB = 'SDL' #BF_SDL #$(shell $(BF_SDL)/bin/sdl-config --libs) -lSDL_mixer
BF_SDL_LIBPATH = '${BF_SDL}/lib'
-WITH_BF_FMOD = False
-BF_FMOD = LIBDIR + '/fmod'
-
WITH_BF_OPENEXR = False
WITH_BF_STATICOPENEXR = False
BF_OPENEXR = '/usr/local'
@@ -62,11 +59,6 @@ BF_GETTEXT_INC = '${BF_GETTEXT}/include'
BF_GETTEXT_LIB = 'intl iconv'
BF_GETTEXT_LIBPATH = '${BF_GETTEXT}/lib'
-WITH_BF_FTGL = True
-BF_FTGL = '#extern/bFTGL'
-BF_FTGL_INC = '${BF_FTGL}/include'
-BF_FTGL_LIB = 'extern_ftgl'
-
WITH_BF_GAMEENGINE=False
WITH_BF_ODE = False
diff --git a/config/sunos5-config.py b/config/sunos5-config.py
index dda7d0ff2f3..25f200fe346 100644
--- a/config/sunos5-config.py
+++ b/config/sunos5-config.py
@@ -28,9 +28,6 @@ BF_SDL_INC = '${BF_SDL}/include/SDL' #$(shell $(BF_SDL)/bin/sdl-config --cflags)
BF_SDL_LIBPATH = '${BF_SDL}/lib'
BF_SDL_LIB = 'SDL' #BF_SDL #$(shell $(BF_SDL)/bin/sdl-config --libs) -lSDL_mixer
-WITH_BF_FMOD = False
-BF_FMOD = LIBDIR + '/fmod'
-
WITH_BF_OPENEXR = True
WITH_BF_STATICOPENEXR = False
BF_OPENEXR = '/usr/local'
@@ -70,11 +67,6 @@ BF_GETTEXT_INC = '${BF_GETTEXT}/include'
BF_GETTEXT_LIB = 'gettextlib'
BF_GETTEXT_LIBPATH = '${BF_GETTEXT}/lib'
-WITH_BF_FTGL = True
-BF_FTGL = '#extern/bFTGL'
-BF_FTGL_INC = '${BF_FTGL}/include'
-BF_FTGL_LIB = 'extern_ftgl'
-
WITH_BF_GAMEENGINE=False
WITH_BF_ODE = False
diff --git a/config/win32-mingw-config.py b/config/win32-mingw-config.py
index 0ad93c3d38c..a579d21a544 100644
--- a/config/win32-mingw-config.py
+++ b/config/win32-mingw-config.py
@@ -35,9 +35,6 @@ BF_PTHREADS_INC = '${BF_PTHREADS}/include'
BF_PTHREADS_LIB = 'pthreadGC2'
BF_PTHREADS_LIBPATH = '${BF_PTHREADS}/lib'
-WITH_BF_FMOD = False
-BF_FMOD = LIBDIR + '/fmod'
-
WITH_BF_OPENEXR = True
WITH_BF_STATICOPENEXR = False
BF_OPENEXR = LIBDIR + '/gcc/openexr'
@@ -78,11 +75,6 @@ BF_GETTEXT_INC = '${BF_GETTEXT}/include'
BF_GETTEXT_LIB = 'gnu_gettext'
BF_GETTEXT_LIBPATH = '${BF_GETTEXT}/lib'
-WITH_BF_FTGL = True
-BF_FTGL = LIBDIR + '/ftgl'
-BF_FTGL_INC = '${BF_FTGL}/include'
-BF_FTGL_LIB = 'extern_ftgl'
-
WITH_BF_GAMEENGINE = False
WITH_BF_ODE = True
diff --git a/config/win32-vc-config.py b/config/win32-vc-config.py
index 22877bb93dc..0717cdb6c8f 100644
--- a/config/win32-vc-config.py
+++ b/config/win32-vc-config.py
@@ -6,7 +6,7 @@ WITH_BF_FFMPEG = True # -DWITH_FFMPEG
BF_FFMPEG = LIBDIR +'/ffmpeg'
BF_FFMPEG_INC = '${BF_FFMPEG}/include'
BF_FFMPEG_LIBPATH='${BF_FFMPEG}/lib'
-BF_FFMPEG_LIB = 'avformat-52.lib avcodec-51.lib avdevice-52.lib avutil-49.lib swscale-0.lib'
+BF_FFMPEG_LIB = 'avformat-52.lib avcodec-52.lib avdevice-52.lib avutil-50.lib swscale-0.lib'
BF_PYTHON = LIBDIR + '/python'
BF_PYTHON_VERSION = '2.5'
@@ -46,9 +46,6 @@ BF_PTHREADS_INC = '${BF_PTHREADS}/include'
BF_PTHREADS_LIB = 'pthreadVC2'
BF_PTHREADS_LIBPATH = '${BF_PTHREADS}/lib'
-WITH_BF_FMOD = False
-BF_FMOD = LIBDIR + '/fmod'
-
WITH_BF_OPENEXR = True
WITH_BF_STATICOPENEXR = False
BF_OPENEXR = LIBDIR + '/openexr'
@@ -90,11 +87,6 @@ BF_GETTEXT_INC = '${BF_GETTEXT}/include'
BF_GETTEXT_LIB = 'gnu_gettext'
BF_GETTEXT_LIBPATH = '${BF_GETTEXT}/lib'
-WITH_BF_FTGL = True
-BF_FTGL = LIBDIR + '/ftgl'
-BF_FTGL_INC = '${BF_FTGL}/include'
-BF_FTGL_LIB = 'extern_ftgl'
-
WITH_BF_GAMEENGINE = True
WITH_BF_PLAYER = True
diff --git a/config/win64-vc-config.py b/config/win64-vc-config.py
index 222c6c55b22..945efecdc3c 100644
--- a/config/win64-vc-config.py
+++ b/config/win64-vc-config.py
@@ -9,10 +9,10 @@ BF_FFMPEG_LIBPATH='${BF_FFMPEG}/lib'
BF_FFMPEG_LIB = 'avformat-52.lib avcodec-51.lib avdevice-52.lib avutil-49.lib swscale-0.lib'
BF_PYTHON = LIBDIR + '/python'
-BF_PYTHON_VERSION = '2.5'
+BF_PYTHON_VERSION = '3.0'
BF_PYTHON_INC = '${BF_PYTHON}/include/python${BF_PYTHON_VERSION}'
BF_PYTHON_BINARY = 'python'
-BF_PYTHON_LIB = 'python25'
+BF_PYTHON_LIB = 'python30'
BF_PYTHON_LIBPATH = '${BF_PYTHON}/lib'
WITH_BF_OPENAL = False
@@ -87,14 +87,9 @@ WITH_BF_INTERNATIONAL = False
BF_GETTEXT = LIBDIR + '/gettext'
BF_GETTEXT_INC = '${BF_GETTEXT}/include'
-BF_GETTEXT_LIB = 'gnu_gettext'
+BF_GETTEXT_LIB = 'gettext'
BF_GETTEXT_LIBPATH = '${BF_GETTEXT}/lib'
-WITH_BF_FTGL = False
-BF_FTGL = LIBDIR + '/ftgl'
-BF_FTGL_INC = '${BF_FTGL}/include'
-BF_FTGL_LIB = 'extern_ftgl'
-
WITH_BF_GAMEENGINE = True
WITH_BF_PLAYER = False
diff --git a/extern/CMakeLists.txt b/extern/CMakeLists.txt
index b81efb52de9..45778e235cd 100644
--- a/extern/CMakeLists.txt
+++ b/extern/CMakeLists.txt
@@ -32,14 +32,6 @@ IF(WITH_BULLET)
SUBDIRS(bullet2)
ENDIF(WITH_BULLET)
-IF(WITH_INTERNATIONAL)
- SUBDIRS(bFTGL)
-ENDIF(WITH_INTERNATIONAL)
-
-IF(WITH_VERSE)
- SUBDIRS(verse)
-ENDIF(WITH_VERSE)
-
IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
SUBDIRS(binreloc)
ENDIF(CMAKE_SYSTEM_NAME MATCHES "Linux")
diff --git a/extern/Makefile b/extern/Makefile
index 38bec4b73dd..582d158b66f 100644
--- a/extern/Makefile
+++ b/extern/Makefile
@@ -32,10 +32,6 @@ SOURCEDIR = extern
DIR = $(OCGDIR)/extern
DIRS = qhull/src solid glew/src
-ifeq ($(WITH_FREETYPE2), true)
- DIRS += bFTGL/src
-endif
-
ifeq ($(WITH_FFMPEG), true)
ifeq ($(NAN_FFMPEG), $(LCGDIR)/ffmpeg)
DIRS += ffmpeg
@@ -45,10 +41,6 @@ ifeq ($(NAN_FFMPEG), $(LCGDIR)/gcc/ffmpeg)
endif
endif
-ifeq ($(WITH_VERSE), true)
- DIRS += verse
-endif
-
ifneq ($(NAN_NO_KETSJI), true)
DIRS += bullet2
endif
diff --git a/extern/SConscript b/extern/SConscript
index 716aee8991f..126f40b00b3 100644
--- a/extern/SConscript
+++ b/extern/SConscript
@@ -11,9 +11,6 @@ if env['WITH_BF_GAMEENGINE']:
if env['WITH_BF_BULLET']:
SConscript(['bullet2/src/SConscript'])
-if env['WITH_BF_INTERNATIONAL']:
- SConscript(['bFTGL/SConscript'])
-
if env['WITH_BF_FFMPEG'] and env['BF_FFMPEG_LIB'] == '':
SConscript(['x264/SConscript'])
SConscript(['libmp3lame/SConscript'])
diff --git a/extern/bFTGL/CMakeLists.txt b/extern/bFTGL/CMakeLists.txt
deleted file mode 100644
index 529dc74a4d2..00000000000
--- a/extern/bFTGL/CMakeLists.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-# $Id$
-# ***** BEGIN GPL LICENSE BLOCK *****
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# The Original Code is Copyright (C) 2006, Blender Foundation
-# All rights reserved.
-#
-# The Original Code is: all of this file.
-#
-# Contributor(s): Jacques Beaurain.
-#
-# ***** END GPL LICENSE BLOCK *****
-
-SET(INC include src ${FREETYPE_INC})
-
-FILE(GLOB SRC src/*.cpp)
-ADD_DEFINITIONS(-DFTGL_LIBRARY_STATIC)
-BLENDERLIB(extern_ftgl "${SRC}" "${INC}")
-#, libtype=['international','player'], priority=[5, 210])
diff --git a/extern/bFTGL/COPYING.txt b/extern/bFTGL/COPYING.txt
deleted file mode 100644
index 92b8903ff3f..00000000000
--- a/extern/bFTGL/COPYING.txt
+++ /dev/null
@@ -1,481 +0,0 @@
- GNU LIBRARY GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1991 Free Software Foundation, Inc.
- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the library GPL. It is
- numbered 2 because it goes with version 2 of the ordinary GPL.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it. You can use it for
-your libraries, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
-permission to copy, distribute and/or modify the library.
-
- Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library. If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software. To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
- Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs. This
-license, the GNU Library General Public License, applies to certain
-designated libraries. This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
-
- The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it. Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program. However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
-
- Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries. We
-concluded that weaker conditions might promote sharing better.
-
- However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves. This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them. (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.) The hope is that this
-will lead to faster development of free libraries.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, while the latter only
-works together with the library.
-
- Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
-
- GNU LIBRARY GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License"). Each licensee is
-addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also compile or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- c) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- d) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Libraries
-
- If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change. You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
- To apply these terms, attach the following notices to the library. It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
- <one line to give the library's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this library; if not, write to the Free
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the
- library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
- <signature of Ty Coon>, 1 April 1990
- Ty Coon, President of Vice
-
-That's all there is to it!
diff --git a/extern/bFTGL/README.txt b/extern/bFTGL/README.txt
deleted file mode 100644
index a679d86c22e..00000000000
--- a/extern/bFTGL/README.txt
+++ /dev/null
@@ -1,51 +0,0 @@
-FTGL 2.0.11
-16 August 2004
-
-DESCRIPTION:
-
-FTGL is a free open source library to enable developers to use arbitrary
-fonts in their OpenGL (www.opengl.org) applications.
-Unlike other OpenGL font libraries FTGL uses standard font file formats
-so doesn't need a preprocessing step to convert the high quality font data
-into a lesser quality, proprietary format.
-FTGL uses the Freetype (www.freetype.org) font library to open and 'decode'
-the fonts. It then takes that output and stores it in a format most efficient
-for OpenGL rendering.
-
-Rendering modes supported are
-- Bit maps
-- Antialiased Pix maps
-- Texture maps
-- Outlines
-- Polygon meshes
-- Extruded polygon meshes
-
-FTGL is designed to be used in commercial quality software. It has been
-written with performance, robustness and simplicity in mind.
-
-USAGE:
-
- FTGLPixmapFont font( "Fonts:Arial");
-
- font.FaceSize( 72);
-
- font.render( "Hello World!");
-
-This library was inspired by gltt, Copyright (C) 1998-1999 Stephane Rehel
-(http://gltt.sourceforge.net)
-Bezier curve code contributed by Jed Soane.
-Demo, Linux port, extrusion code and gltt maintainance by Gerard Lanois
-Linux port by Matthias Kretz
-Windows port by Andrew Ellerton & Max Rheiner
-Bug fixes by Robert Osfield, Marcelo E. Magallon, Markku Rontu, Mark A. Fox,
-Patrick Rogers
-Containers and optimisations by Sebastien Barre
-Autoconf Marcelo E. Magallon.
-
-
-Please contact me if you have any suggestions, feature requests, or problems.
-
-Henry Maddocks
-ftgl@opengl.geek.nz
-http://homepages.paradise.net.nz/henryj/
-
diff --git a/extern/bFTGL/SConscript b/extern/bFTGL/SConscript
deleted file mode 100644
index 03a17a62a17..00000000000
--- a/extern/bFTGL/SConscript
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/usr/bin/python
-import sys
-import os
-
-Import('env')
-
-incs = 'include src ' + env['BF_FREETYPE_INC'] + ' ' + env['BF_OPENGL_INC']
-defs = ''
-
-sources = env.Glob('src/*.cpp')
-
-env.BlenderLib ( 'extern_ftgl', sources, Split(incs), Split(defs), libtype=['extern'], priority=[5])
diff --git a/extern/bFTGL/cleanup b/extern/bFTGL/cleanup
deleted file mode 100755
index c6d24edb287..00000000000
--- a/extern/bFTGL/cleanup
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh -fx
-# script to get rid of the grabage that MAC OSX drops in all the directories
-
-find . -name .DS_Store -print -exec rm {} \;
diff --git a/extern/bFTGL/include/FTBBox.h b/extern/bFTGL/include/FTBBox.h
deleted file mode 100644
index 7ff530166ca..00000000000
--- a/extern/bFTGL/include/FTBBox.h
+++ /dev/null
@@ -1,124 +0,0 @@
-#ifndef __FTBBox__
-#define __FTBBox__
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-//#include FT_GLYPH_H
-#include FT_OUTLINE_H
-
-#include "FTGL.h"
-#include "FTPoint.h"
-
-
-/**
- * FTBBox is a convenience class for handling bounding boxes.
- */
-class FTGL_EXPORT FTBBox
-{
- public:
- /**
- * Default constructor. Bounding box is set to zero.
- */
- FTBBox()
- : lowerX(0.0f),
- lowerY(0.0f),
- lowerZ(0.0f),
- upperX(0.0f),
- upperY(0.0f),
- upperZ(0.0f)
- {}
-
- /**
- * Constructor.
- */
- FTBBox( float lx, float ly, float lz, float ux, float uy, float uz)
- : lowerX(lx),
- lowerY(ly),
- lowerZ(lz),
- upperX(ux),
- upperY(uy),
- upperZ(uz)
- {}
-
- /**
- * Constructor. Extracts a bounding box from a freetype glyph. Uses
- * the control box for the glyph. <code>FT_Glyph_Get_CBox()</code>
- *
- * @param glyph A freetype glyph
- */
- FTBBox( FT_GlyphSlot glyph)
- : lowerX(0.0f),
- lowerY(0.0f),
- lowerZ(0.0f),
- upperX(0.0f),
- upperY(0.0f),
- upperZ(0.0f)
- {
- FT_BBox bbox;
- FT_Outline_Get_CBox( &(glyph->outline), &bbox);
-
- lowerX = static_cast<float>( bbox.xMin) / 64.0f;
- lowerY = static_cast<float>( bbox.yMin) / 64.0f;
- lowerZ = 0.0f;
- upperX = static_cast<float>( bbox.xMax) / 64.0f;
- upperY = static_cast<float>( bbox.yMax) / 64.0f;
- upperZ = 0.0f;
-
- }
-
- /**
- * Destructor
- */
- ~FTBBox()
- {}
-
-
- /**
- * Move the Bounding Box by a vector.
- *
- * @param distance The distance to move the bbox in 3D space.
- */
- FTBBox& Move( FTPoint distance)
- {
- lowerX += distance.x;
- lowerY += distance.y;
- lowerZ += distance.z;
- upperX += distance.x;
- upperY += distance.y;
- upperZ += distance.z;
- return *this;
- }
-
- FTBBox& operator += ( const FTBBox& bbox)
- {
- lowerX = bbox.lowerX < lowerX? bbox.lowerX: lowerX;
- lowerY = bbox.lowerY < lowerY? bbox.lowerY: lowerY;
- lowerZ = bbox.lowerZ < lowerZ? bbox.lowerZ: lowerZ;
- upperX = bbox.upperX > upperX? bbox.upperX: upperX;
- upperY = bbox.upperY > upperY? bbox.upperY: upperY;
- upperZ = bbox.upperZ > upperZ? bbox.upperZ: upperZ;
-
- return *this;
- }
-
- void SetDepth( float depth)
- {
- upperZ = lowerZ + depth;
- }
-
-
- /**
- * The bounds of the box
- */
- // Make these ftPoints & private
- float lowerX, lowerY, lowerZ, upperX, upperY, upperZ;
- protected:
-
-
- private:
-
-};
-
-
-#endif // __FTBBox__
-
diff --git a/extern/bFTGL/include/FTBitmapGlyph.h b/extern/bFTGL/include/FTBitmapGlyph.h
deleted file mode 100644
index 89154a97fac..00000000000
--- a/extern/bFTGL/include/FTBitmapGlyph.h
+++ /dev/null
@@ -1,76 +0,0 @@
-#ifndef __FTBitmapGlyph__
-#define __FTBitmapGlyph__
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_GLYPH_H
-
-#include "FTGL.h"
-#include "FTGlyph.h"
-
-
-/**
- * FTBitmapGlyph is a specialisation of FTGlyph for creating bitmaps.
- *
- * It provides the interface between Freetype glyphs and their openGL
- * Renderable counterparts. This is an abstract class and derived classes
- * must implement the <code>Render</code> function.
- *
- * @see FTGlyphContainer
- *
- */
-class FTGL_EXPORT FTBitmapGlyph : public FTGlyph
-{
- public:
- /**
- * Constructor
- *
- * @param glyph The Freetype glyph to be processed
- */
- FTBitmapGlyph( FT_GlyphSlot glyph);
-
- /**
- * Destructor
- */
- virtual ~FTBitmapGlyph();
-
- /**
- * Renders this glyph at the current pen position.
- *
- * @param pen The current pen position.
- * @return The advance distance for this glyph.
- */
- virtual float Render( const FTPoint& pen);
-
- private:
- /**
- * The width of the glyph 'image'
- */
- unsigned int destWidth;
-
- /**
- * The height of the glyph 'image'
- */
- unsigned int destHeight;
-
- /**
- * The pitch of the glyph 'image'
- */
- unsigned int destPitch;
-
- /**
- * Vector from the pen position to the topleft corner of the bitmap
- */
- FTPoint pos;
-
- /**
- * Pointer to the 'image' data
- */
- unsigned char* data;
-
-};
-
-
-#endif // __FTBitmapGlyph__
-
diff --git a/extern/bFTGL/include/FTBufferGlyph.h b/extern/bFTGL/include/FTBufferGlyph.h
deleted file mode 100644
index 9795f4de5d4..00000000000
--- a/extern/bFTGL/include/FTBufferGlyph.h
+++ /dev/null
@@ -1,76 +0,0 @@
-#ifndef __FTBufferGlyph__
-#define __FTBufferGlyph__
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_GLYPH_H
-
-#include "FTGL.h"
-#include "FTGlyph.h"
-
-
-/**
- * FTBufferGlyph is a specialisation of FTGlyph for creating pixmaps.
- *
- * @see FTGlyphContainer
- *
- */
-class FTGL_EXPORT FTBufferGlyph : public FTGlyph
-{
- public:
- /**
- * Constructor
- *
- * @param glyph The Freetype glyph to be processed
- */
- FTBufferGlyph( FT_GlyphSlot glyph, unsigned char* clientBuffer);
-
- /**
- * Destructor
- */
- virtual ~FTBufferGlyph();
-
- /**
- * Renders this glyph at the current pen position.
- *
- * @param pen The current pen position.
- * @return The advance distance for this glyph.
- */
- virtual float Render( const FTPoint& pen);
-
- // attributes
-
- private:
- /**
- * The width of the glyph 'image'
- */
- int destWidth;
-
- /**
- * The height of the glyph 'image'
- */
- int destHeight;
-
- /**
- * The pitch of the glyph 'image'
- */
- unsigned int destPitch;
-
- /**
- * Vector from the pen position to the topleft corner of the pixmap
- */
- FTPoint pos;
-
- /**
- * Pointer to the 'image' data
- */
- unsigned char* data;
-
-
- unsigned char* buffer;
-
-};
-
-
-#endif // __FTBufferGlyph__
diff --git a/extern/bFTGL/include/FTCharToGlyphIndexMap.h b/extern/bFTGL/include/FTCharToGlyphIndexMap.h
deleted file mode 100644
index 6e40d3c9574..00000000000
--- a/extern/bFTGL/include/FTCharToGlyphIndexMap.h
+++ /dev/null
@@ -1,130 +0,0 @@
-#ifndef __FTCharToGlyphIndexMap__
-#define __FTCharToGlyphIndexMap__
-
-#include <stdlib.h>
-
-#include "FTGL.h"
-
-/**
- * Provides a non-STL alternative to the STL map<unsigned long, unsigned long>
- * which maps character codes to glyph indices inside FTCharmap.
- *
- * Implementation:
- * - NumberOfBuckets buckets are considered.
- * - Each bucket has BucketSize entries.
- * - When the glyph index for the character code C has to be stored, the
- * bucket this character belongs to is found using 'C div BucketSize'.
- * If this bucket has not been allocated yet, do it now.
- * The entry in the bucked is found using 'C mod BucketSize'.
- * If it is set to IndexNotFound, then the glyph entry has not been set.
- * - Try to mimic the calls made to the STL map API.
- *
- * Caveats:
- * - The glyph index is now a signed long instead of unsigned long, so
- * the special value IndexNotFound (= -1) can be used to specify that the
- * glyph index has not been stored yet.
- */
-class FTGL_EXPORT FTCharToGlyphIndexMap
-{
- public:
-
- typedef unsigned long CharacterCode;
- typedef signed long GlyphIndex;
-
- enum
- {
- NumberOfBuckets = 256,
- BucketSize = 256,
- IndexNotFound = -1
- };
-
- FTCharToGlyphIndexMap()
- {
- this->Indices = 0;
- }
-
- virtual ~FTCharToGlyphIndexMap()
- {
- if( this->Indices)
- {
- // Free all buckets
- this->clear();
-
- // Free main structure
- delete [] this->Indices;
- this->Indices = 0;
- }
- }
-
- void clear()
- {
- if(this->Indices)
- {
- for( int i = 0; i < FTCharToGlyphIndexMap::NumberOfBuckets; i++)
- {
- if( this->Indices[i])
- {
- delete [] this->Indices[i];
- this->Indices[i] = 0;
- }
- }
- }
- }
-
- const GlyphIndex find( CharacterCode c)
- {
- if( !this->Indices)
- {
- return 0;
- }
-
- // Find position of char code in buckets
- div_t pos = div( c, FTCharToGlyphIndexMap::BucketSize);
-
- if( !this->Indices[pos.quot])
- {
- return 0;
- }
-
- const FTCharToGlyphIndexMap::GlyphIndex *ptr = &this->Indices[pos.quot][pos.rem];
- if( *ptr == FTCharToGlyphIndexMap::IndexNotFound)
- {
- return 0;
- }
-
- return *ptr;
- }
-
- void insert( CharacterCode c, GlyphIndex g)
- {
- if( !this->Indices)
- {
- this->Indices = new GlyphIndex* [FTCharToGlyphIndexMap::NumberOfBuckets];
- for( int i = 0; i < FTCharToGlyphIndexMap::NumberOfBuckets; i++)
- {
- this->Indices[i] = 0;
- }
- }
-
- // Find position of char code in buckets
- div_t pos = div(c, FTCharToGlyphIndexMap::BucketSize);
-
- // Allocate bucket if does not exist yet
- if( !this->Indices[pos.quot])
- {
- this->Indices[pos.quot] = new GlyphIndex [FTCharToGlyphIndexMap::BucketSize];
- for( int i = 0; i < FTCharToGlyphIndexMap::BucketSize; i++)
- {
- this->Indices[pos.quot][i] = FTCharToGlyphIndexMap::IndexNotFound;
- }
- }
-
- this->Indices[pos.quot][pos.rem] = g;
- }
-
- private:
- GlyphIndex** Indices;
-};
-
-
-#endif // __FTCharToGlyphIndexMap__
diff --git a/extern/bFTGL/include/FTCharmap.h b/extern/bFTGL/include/FTCharmap.h
deleted file mode 100644
index 74ca6f2cacb..00000000000
--- a/extern/bFTGL/include/FTCharmap.h
+++ /dev/null
@@ -1,136 +0,0 @@
-#ifndef __FTCharmap__
-#define __FTCharmap__
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_GLYPH_H
-
-#include "FTCharToGlyphIndexMap.h"
-
-#include "FTGL.h"
-
-
-/**
- * FTCharmap takes care of specifying the encoding for a font and mapping
- * character codes to glyph indices.
- *
- * It doesn't preprocess all indices, only on an as needed basis. This may
- * seem like a performance penalty but it is quicker than using the 'raw'
- * freetype calls and will save significant amounts of memory when dealing
- * with unicode encoding
- *
- * @see "Freetype 2 Documentation"
- *
- */
-
-class FTFace;
-
-class FTGL_EXPORT FTCharmap
-{
- public:
- /**
- * Constructor
- */
- FTCharmap( FTFace* face);
-
- /**
- * Destructor
- */
- virtual ~FTCharmap();
-
- /**
- * Queries for the current character map code.
- *
- * @return The current character map code.
- */
- FT_Encoding Encoding() const { return ftEncoding;}
-
- /**
- * Sets the character map for the face.
- * Valid encodings as at Freetype 2.0.4
- * ft_encoding_none
- * ft_encoding_symbol
- * ft_encoding_unicode
- * ft_encoding_latin_2
- * ft_encoding_sjis
- * ft_encoding_gb2312
- * ft_encoding_big5
- * ft_encoding_wansung
- * ft_encoding_johab
- * ft_encoding_adobe_standard
- * ft_encoding_adobe_expert
- * ft_encoding_adobe_custom
- * ft_encoding_apple_roman
- *
- * @param encoding the Freetype encoding symbol. See above.
- * @return <code>true</code> if charmap was valid and set
- * correctly. If the requested encoding is
- * unavailable it will be set to ft_encoding_none.
- */
- bool CharMap( FT_Encoding encoding);
-
- /**
- * Get the FTGlyphContainer index of the input character.
- *
- * @param characterCode The character code of the requested glyph in
- * the current encoding eg apple roman.
- * @return The FTGlyphContainer index for the character or zero
- * if it wasn't found
- */
- unsigned int GlyphListIndex( const unsigned int characterCode);
-
- /**
- * Get the font glyph index of the input character.
- *
- * @param characterCode The character code of the requested glyph in
- * the current encoding eg apple roman.
- * @return The glyph index for the character.
- */
- unsigned int FontIndex( const unsigned int characterCode);
-
- /**
- * Set the FTGlyphContainer index of the character code.
- *
- * @param characterCode The character code of the requested glyph in
- * the current encoding eg apple roman.
- * @param containerIndex The index into the FTGlyphContainer of the
- * character code.
- */
- void InsertIndex( const unsigned int characterCode, const unsigned int containerIndex);
-
- /**
- * Queries for errors.
- *
- * @return The current error code. Zero means no error.
- */
- FT_Error Error() const { return err;}
-
- private:
- /**
- * Current character map code.
- */
- FT_Encoding ftEncoding;
-
- /**
- * The current Freetype face.
- */
- const FT_Face ftFace;
-
- /**
- * A structure that maps glyph indices to character codes
- *
- * < character code, face glyph index>
- */
- typedef FTCharToGlyphIndexMap CharacterMap;
- CharacterMap charMap;
-
- /**
- * Current error code.
- */
- FT_Error err;
-
-};
-
-
-#endif // __FTCharmap__
diff --git a/extern/bFTGL/include/FTContour.h b/extern/bFTGL/include/FTContour.h
deleted file mode 100644
index 895d9edeff8..00000000000
--- a/extern/bFTGL/include/FTContour.h
+++ /dev/null
@@ -1,88 +0,0 @@
-#ifndef __FTContour__
-#define __FTContour__
-
-#include "FTPoint.h"
-#include "FTVector.h"
-#include "FTGL.h"
-
-
-/**
- * FTContour class is a container of points that describe a vector font
- * outline. It is used as a container for the output of the bezier curve
- * evaluator in FTVectoriser.
- *
- * @see FTOutlineGlyph
- * @see FTPolyGlyph
- * @see FTPoint
- */
-class FTGL_EXPORT FTContour
-{
- public:
- /**
- * Constructor
- *
- * @param contour
- * @param pointTags
- * @param numberOfPoints
- */
- FTContour( FT_Vector* contour, char* pointTags, unsigned int numberOfPoints);
-
- /**
- * Destructor
- */
- ~FTContour()
- {
- pointList.clear();
- }
-
- /**
- * Return a point at index.
- *
- * @param index of the point in the curve.
- * @return const point reference
- */
- const FTPoint& Point( unsigned int index) const { return pointList[index];}
-
- /**
- * How many points define this contour
- *
- * @return the number of points in this contour
- */
- size_t PointCount() const { return pointList.size();}
-
- private:
- /**
- * Add a point to this contour. This function tests for duplicate
- * points.
- *
- * @param point The point to be added to the contour.
- */
- inline void AddPoint( FTPoint point);
-
- inline void AddPoint( float x, float y);
-
- /**
- * De Casteljau (bezier) algorithm contributed by Jed Soane
- * Evaluates a quadratic or conic (second degree) curve
- */
- inline void evaluateQuadraticCurve();
-
- /**
- * De Casteljau (bezier) algorithm contributed by Jed Soane
- * Evaluates a cubic (third degree) curve
- */
- inline void evaluateCubicCurve();
-
- /**
- * The list of points in this contour
- */
- typedef FTVector<FTPoint> PointVector;
- PointVector pointList;
-
- /**
- * 2D array storing values of de Casteljau algorithm.
- */
- float controlPoints[4][2];
-};
-
-#endif // __FTContour__
diff --git a/extern/bFTGL/include/FTExtrdGlyph.h b/extern/bFTGL/include/FTExtrdGlyph.h
deleted file mode 100644
index 01e7c9e1d76..00000000000
--- a/extern/bFTGL/include/FTExtrdGlyph.h
+++ /dev/null
@@ -1,71 +0,0 @@
-#ifndef __FTExtrdGlyph__
-#define __FTExtrdGlyph__
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_GLYPH_H
-
-#include "FTGL.h"
-#include "FTGlyph.h"
-
-class FTVectoriser;
-
-/**
- * FTExtrdGlyph is a specialisation of FTGlyph for creating tessellated
- * extruded polygon glyphs.
- *
- * @see FTGlyphContainer
- * @see FTVectoriser
- *
- */
-class FTGL_EXPORT FTExtrdGlyph : public FTGlyph
-{
- public:
- /**
- * Constructor. Sets the Error to Invalid_Outline if the glyphs isn't an outline.
- *
- * @param glyph The Freetype glyph to be processed
- * @param depth The distance along the z axis to extrude the glyph
- */
- FTExtrdGlyph( FT_GlyphSlot glyph, float depth);
-
- /**
- * Destructor
- */
- virtual ~FTExtrdGlyph();
-
- /**
- * Renders this glyph at the current pen position.
- *
- * @param pen The current pen position.
- * @return The advance distance for this glyph.
- */
- virtual float Render( const FTPoint& pen);
-
- private:
- /**
- * Calculate the normal vector to 2 points. This is 2D and ignores
- * the z component. The normal will be normalised
- *
- * @param a
- * @param b
- * @return
- */
- FTPoint GetNormal( const FTPoint &a, const FTPoint &b);
-
-
- /**
- * OpenGL display list
- */
- GLuint glList;
-
- /**
- * Distance to extrude the glyph
- */
- float depth;
-
-};
-
-
-#endif // __FTExtrdGlyph__
-
diff --git a/extern/bFTGL/include/FTFace.h b/extern/bFTGL/include/FTFace.h
deleted file mode 100644
index 26bb3966462..00000000000
--- a/extern/bFTGL/include/FTFace.h
+++ /dev/null
@@ -1,149 +0,0 @@
-#ifndef __FTFace__
-#define __FTFace__
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_GLYPH_H
-
-#include "FTGL.h"
-#include "FTPoint.h"
-#include "FTSize.h"
-
-/**
- * FTFace class provides an abstraction layer for the Freetype Face.
- *
- * @see "Freetype 2 Documentation"
- *
- */
-class FTGL_EXPORT FTFace
-{
- public:
- /**
- * Opens and reads a face file. Error is set.
- *
- * @param filename font file name.
- */
- FTFace( const char* filename);
-
- /**
- * Read face data from an in-memory buffer. Error is set.
- *
- * @param pBufferBytes the in-memory buffer
- * @param bufferSizeInBytes the length of the buffer in bytes
- */
- FTFace( const unsigned char *pBufferBytes, size_t bufferSizeInBytes );
-
- /**
- * Destructor
- *
- * Disposes of the current Freetype Face.
- */
- virtual ~FTFace();
-
- /**
- * Attach auxilliary file to font (e.g., font metrics).
- *
- * @param filename auxilliary font file name.
- * @return <code>true</code> if file has opened
- * successfully.
- */
- bool Attach( const char* filename);
-
- /**
- * Attach auxilliary data to font (e.g., font metrics) from memory
- *
- * @param pBufferBytes the in-memory buffer
- * @param bufferSizeInBytes the length of the buffer in bytes
- * @return <code>true</code> if file has opened
- * successfully.
- */
- bool Attach( const unsigned char *pBufferBytes, size_t bufferSizeInBytes);
-
- /**
- * Disposes of the face
- */
- void Close();
-
- /**
- * Get the freetype face object..
- *
- * @return pointer to an FT_Face.
- */
- FT_Face* Face() const { return ftFace;}
-
- /**
- * Sets the char size for the current face.
- *
- * This doesn't guarantee that the size was set correctly. Clients
- * should check errors.
- *
- * @param size the face size in points (1/72 inch)
- * @param res the resolution of the target device.
- * @return <code>FTSize</code> object
- */
- const FTSize& Size( const unsigned int size, const unsigned int res);
-
- unsigned int UnitsPerEM() const;
-
- /**
- * Get the number of character maps in this face.
- *
- * @return character map count.
- */
- unsigned int CharMapCount();
-
- /**
- * Get a list of character maps in this face.
- *
- * @return pointer to the first encoding.
- */
- FT_Encoding* CharMapList();
-
- /**
- * Gets the kerning vector between two glyphs
- */
- FTPoint KernAdvance( unsigned int index1, unsigned int index2);
-
- /**
- * Loads and creates a Freetype glyph.
- */
- FT_GlyphSlot Glyph( unsigned int index, FT_Int load_flags);
-
- /**
- * Gets the number of glyphs in the current face.
- */
- unsigned int GlyphCount() const { return numGlyphs;}
-
- /**
- * Queries for errors.
- *
- * @return The current error code.
- */
- FT_Error Error() const { return err; }
-
- private:
- /**
- * The Freetype face
- */
- FT_Face* ftFace;
-
- /**
- * The size object associated with this face
- */
- FTSize charSize;
-
- /**
- * The number of glyphs in this face
- */
- int numGlyphs;
-
- FT_Encoding* fontEncodingList;
-
- /**
- * Current error code. Zero means no error.
- */
- FT_Error err;
-};
-
-
-#endif // __FTFace__
diff --git a/extern/bFTGL/include/FTFont.h b/extern/bFTGL/include/FTFont.h
deleted file mode 100644
index 5b3d9e46f68..00000000000
--- a/extern/bFTGL/include/FTFont.h
+++ /dev/null
@@ -1,260 +0,0 @@
-#ifndef __FTFont__
-#define __FTFont__
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-#include "FTFace.h"
-#include "FTGL.h"
-
-class FTGlyphContainer;
-class FTGlyph;
-
-
-/**
- * FTFont is the public interface for the FTGL library.
- *
- * Specific font classes are derived from this class. It uses the helper
- * classes FTFace and FTSize to access the Freetype library. This class
- * is abstract and deriving classes must implement the protected
- * <code>MakeGlyph</code> function to create glyphs of the
- * appropriate type.
- *
- * It is good practice after using these functions to test the error
- * code returned. <code>FT_Error Error()</code>
- *
- * @see FTFace
- * @see FTSize
- * @see FTGlyphContainer
- * @see FTGlyph
- */
-class FTGL_EXPORT FTFont
-{
- public:
- /**
- * Open and read a font file. Sets Error flag.
- *
- * @param fontname font file name.
- */
- FTFont( const char* fontname);
-
- /**
- * Open and read a font from a buffer in memory. Sets Error flag.
- * The buffer is owned by the client and is NOT copied by FTGL. The
- * pointer must be valid while using FTGL.
- *
- * @param pBufferBytes the in-memory buffer
- * @param bufferSizeInBytes the length of the buffer in bytes
- */
- FTFont( const unsigned char *pBufferBytes, size_t bufferSizeInBytes);
-
- /**
- * Destructor
- */
- virtual ~FTFont();
-
- /**
- * Attach auxilliary file to font e.g font metrics.
- *
- * Note: not all font formats implement this function.
- *
- * @param filename auxilliary font file name.
- * @return <code>true</code> if file has been attached
- * successfully.
- */
- bool Attach( const char* filename);
-
- /**
- * Attach auxilliary data to font e.g font metrics, from memory
- *
- * Note: not all font formats implement this function.
- *
- * @param pBufferBytes the in-memory buffer
- * @param bufferSizeInBytes the length of the buffer in bytes
- * @return <code>true</code> if file has been attached
- * successfully.
- */
- bool Attach( const unsigned char *pBufferBytes, size_t bufferSizeInBytes);
-
- /**
- * Set the character map for the face.
- *
- * @param encoding Freetype enumerate for char map code.
- * @return <code>true</code> if charmap was valid and
- * set correctly
- */
- bool CharMap( FT_Encoding encoding );
-
- /**
- * Get the number of character maps in this face.
- *
- * @return character map count.
- */
- unsigned int CharMapCount();
-
- /**
- * Get a list of character maps in this face.
- *
- * @return pointer to the first encoding.
- */
- FT_Encoding* CharMapList();
-
- /**
- * Set the char size for the current face.
- *
- * @param size the face size in points (1/72 inch)
- * @param res the resolution of the target device.
- * @return <code>true</code> if size was set correctly
- */
- virtual bool FaceSize( const unsigned int size, const unsigned int res = 72);
-
- /**
- * Get the current face size in points.
- *
- * @return face size
- */
- unsigned int FaceSize() const;
-
- /**
- * Set the extrusion distance for the font. Only implemented by
- * FTGLExtrdFont
- *
- * @param d The extrusion distance.
- */
- virtual void Depth( float d){}
-
- /**
- * Get the global ascender height for the face.
- *
- * @return Ascender height
- */
- float Ascender() const;
-
- /**
- * Gets the global descender height for the face.
- *
- * @return Descender height
- */
- float Descender() const;
-
- /**
- * Get the bounding box for a string.
- *
- * @param string a char string
- * @param llx lower left near x coord
- * @param lly lower left near y coord
- * @param llz lower left near z coord
- * @param urx upper right far x coord
- * @param ury upper right far y coord
- * @param urz upper right far z coord
- */
- void BBox( const char* string, float& llx, float& lly, float& llz, float& urx, float& ury, float& urz);
-
- /**
- * Get the bounding box for a string.
- *
- * @param string a wchar_t string
- * @param llx lower left near x coord
- * @param lly lower left near y coord
- * @param llz lower left near z coord
- * @param urx upper right far x coord
- * @param ury upper right far y coord
- * @param urz upper right far z coord
- */
- void BBox( const wchar_t* string, float& llx, float& lly, float& llz, float& urx, float& ury, float& urz);
-
- /**
- * Get the advance width for a string.
- *
- * @param string a wchar_t string
- * @return advance width
- */
- float Advance( const wchar_t* string);
-
- /**
- * Get the advance width for a string.
- *
- * @param string a char string
- * @return advance width
- */
- float Advance( const char* string);
-
- /**
- * Render a string of characters
- *
- * @param string 'C' style string to be output.
- */
- virtual void Render( const char* string );
-
- /**
- * Render a string of characters
- *
- * @param string wchar_t string to be output.
- */
- virtual void Render( const wchar_t* string );
-
- /**
- * Queries the Font for errors.
- *
- * @return The current error code.
- */
- FT_Error Error() const { return err;}
-
- protected:
- /**
- * Construct a glyph of the correct type.
- *
- * Clients must overide the function and return their specialised
- * FTGlyph.
- *
- * @param g The glyph index NOT the char code.
- * @return An FT****Glyph or <code>null</code> on failure.
- */
- virtual FTGlyph* MakeGlyph( unsigned int g) = 0;
-
- /**
- * Current face object
- */
- FTFace face;
-
- /**
- * Current size object
- */
- FTSize charSize;
-
- /**
- * Current error code. Zero means no error.
- */
- FT_Error err;
-
- private:
- /**
- * Render a character
- * This function does an implicit conversion on it's arguments.
- *
- * @param chr current character
- * @param nextChr next character
- */
- inline void DoRender( const unsigned int chr, const unsigned int nextChr);
-
- /**
- * Check that the glyph at <code>chr</code> exist. If not load it.
- *
- * @param chr character index
- */
- inline void CheckGlyph( const unsigned int chr);
-
- /**
- * An object that holds a list of glyphs
- */
- FTGlyphContainer* glyphList;
-
- /**
- * Current pen or cursor position;
- */
- FTPoint pen;
-};
-
-
-#endif // __FTFont__
-
diff --git a/extern/bFTGL/include/FTGL.h b/extern/bFTGL/include/FTGL.h
deleted file mode 100644
index 2b76de8b8bd..00000000000
--- a/extern/bFTGL/include/FTGL.h
+++ /dev/null
@@ -1,100 +0,0 @@
-#ifndef __FTGL__
-#define __FTGL__
-
-
-typedef double FTGL_DOUBLE;
-typedef float FTGL_FLOAT;
-
-// Fixes for deprecated identifiers in 2.1.5
-#ifndef FT_OPEN_MEMORY
- #define FT_OPEN_MEMORY (FT_Open_Flags)1
-#endif
-
-#ifndef FT_RENDER_MODE_MONO
- #define FT_RENDER_MODE_MONO ft_render_mode_mono
-#endif
-
-#ifndef FT_RENDER_MODE_NORMAL
- #define FT_RENDER_MODE_NORMAL ft_render_mode_normal
-#endif
-
-
-#ifdef WIN32
-
- // Under windows avoid including <windows.h> is overrated.
- // Sure, it can be avoided and "name space pollution" can be
- // avoided, but why? It really doesn't make that much difference
- // these days.
- #define WIN32_LEAN_AND_MEAN
- #include <windows.h>
-
- #ifndef __gl_h_
- #include <GL/gl.h>
- #include <GL/glu.h>
- #endif
-
-#else
-
- // Non windows platforms - don't require nonsense as seen above :-)
- #ifndef __gl_h_
- #ifdef __APPLE_CC__
- #include <OpenGL/gl.h>
- #include <OpenGL/glu.h>
- #else
- #include <GL/gl.h>
- #if defined (__sun__) && !defined (__sparc__)
- #include <mesa/glu.h>
- #else
- #include <GL/glu.h>
- #endif
- #endif
-
- #endif
-
- // Required for compatibility with glext.h style function definitions of
- // OpenGL extensions, such as in src/osg/Point.cpp.
- #ifndef APIENTRY
- #define APIENTRY
- #endif
-#endif
-
-// Compiler-specific conditional compilation
-#ifdef _MSC_VER // MS Visual C++
-
- // Disable various warning.
- // 4786: template name too long
- #pragma warning( disable : 4251 )
- #pragma warning( disable : 4275 )
- #pragma warning( disable : 4786 )
-
- // The following definitions control how symbols are exported.
- // If the target is a static library ensure that FTGL_LIBRARY_STATIC
- // is defined. If building a dynamic library (ie DLL) ensure the
- // FTGL_LIBRARY macro is defined, as it will mark symbols for
- // export. If compiling a project to _use_ the _dynamic_ library
- // version of the library, no definition is required.
- #ifdef FTGL_LIBRARY_STATIC // static lib - no special export required
- # define FTGL_EXPORT
- #elif FTGL_LIBRARY // dynamic lib - must export/import symbols appropriately.
- # define FTGL_EXPORT __declspec(dllexport)
- #else
- # define FTGL_EXPORT __declspec(dllimport)
- #endif
-
-#else
- // Compiler that is not MS Visual C++.
- // Ensure that the export symbol is defined (and blank)
- #define FTGL_EXPORT
-#endif
-
-
-// lifted from glext.h, to remove dependancy on glext.h
-#ifndef GL_EXT_texture_object
- #define GL_TEXTURE_PRIORITY_EXT 0x8066
- #define GL_TEXTURE_RESIDENT_EXT 0x8067
- #define GL_TEXTURE_1D_BINDING_EXT 0x8068
- #define GL_TEXTURE_2D_BINDING_EXT 0x8069
- #define GL_TEXTURE_3D_BINDING_EXT 0x806A
-#endif
-
-#endif // __FTGL__
diff --git a/extern/bFTGL/include/FTGLBitmapFont.h b/extern/bFTGL/include/FTGLBitmapFont.h
deleted file mode 100644
index 12feae00cb6..00000000000
--- a/extern/bFTGL/include/FTGLBitmapFont.h
+++ /dev/null
@@ -1,65 +0,0 @@
-#ifndef __FTGLBitmapFont__
-#define __FTGLBitmapFont__
-
-#include "FTFont.h"
-#include "FTGL.h"
-
-
-class FTGlyph;
-
-/**
- * FTGLBitmapFont is a specialisation of the FTFont class for handling
- * Bitmap fonts
- *
- * @see FTFont
- */
-class FTGL_EXPORT FTGLBitmapFont : public FTFont
-{
- public:
- /**
- * Open and read a font file. Sets Error flag.
- *
- * @param fontname font file name.
- */
- FTGLBitmapFont( const char* fontname);
-
- /**
- * Open and read a font from a buffer in memory. Sets Error flag.
- *
- * @param pBufferBytes the in-memory buffer
- * @param bufferSizeInBytes the length of the buffer in bytes
- */
- FTGLBitmapFont( const unsigned char *pBufferBytes, size_t bufferSizeInBytes);
-
- /**
- * Destructor
- */
- ~FTGLBitmapFont();
-
- /**
- * Renders a string of characters
- *
- * @param string 'C' style string to be output.
- */
- void Render( const char* string);
-
- /**
- * Renders a string of characters
- *
- * @param string 'C' style wide string to be output.
- */
- void Render( const wchar_t* string);
-
- // attributes
-
- private:
- /**
- * Construct a FTBitmapGlyph.
- *
- * @param g The glyph index NOT the char code.
- * @return An FTBitmapGlyph or <code>null</code> on failure.
- */
- inline virtual FTGlyph* MakeGlyph( unsigned int g);
-
-};
-#endif // __FTGLBitmapFont__
diff --git a/extern/bFTGL/include/FTGLBufferFont.h b/extern/bFTGL/include/FTGLBufferFont.h
deleted file mode 100644
index 2f74b5cdef9..00000000000
--- a/extern/bFTGL/include/FTGLBufferFont.h
+++ /dev/null
@@ -1,76 +0,0 @@
-#ifndef __FTGLBufferFont__
-#define __FTGLBufferFont__
-
-
-#include "FTFont.h"
-#include "FTGL.h"
-
-
-class FTGlyph;
-
-
-/**
- * FTGLBufferFont is a specialisation of the FTFont class for handling
- * Pixmap (Grey Scale) fonts
- *
- * @see FTFont
- */
-class FTGL_EXPORT FTGLBufferFont : public FTFont
-{
- public:
- /**
- * Open and read a font file. Sets Error flag.
- *
- * @param fontname font file name.
- */
- FTGLBufferFont( const char* fontname);
-
- /**
- * Open and read a font from a buffer in memory. Sets Error flag.
- *
- * @param pBufferBytes the in-memory buffer
- * @param bufferSizeInBytes the length of the buffer in bytes
- */
- FTGLBufferFont( const unsigned char *pBufferBytes, size_t bufferSizeInBytes);
-
-
- void SetClientBuffer( unsigned char* b)
- {
- buffer = b;
- }
-
-
- /**
- * Destructor
- */
- ~FTGLBufferFont();
-
- /**
- * Renders a string of characters
- *
- * @param string 'C' style string to be output.
- */
- void Render( const char* string);
-
- /**
- * Renders a string of characters
- *
- * @param string wchar_t string to be output.
- */
- void Render( const wchar_t* string);
-
- private:
- /**
- * Construct a FTBufferGlyph.
- *
- * @param g The glyph index NOT the char code.
- * @return An FTBufferGlyph or <code>null</code> on failure.
- */
- inline virtual FTGlyph* MakeGlyph( unsigned int g);
-
- unsigned char* buffer;
-};
-
-
-#endif // __FTGLBufferFont__
-
diff --git a/extern/bFTGL/include/FTGLExtrdFont.h b/extern/bFTGL/include/FTGLExtrdFont.h
deleted file mode 100644
index dc784bbb5b0..00000000000
--- a/extern/bFTGL/include/FTGLExtrdFont.h
+++ /dev/null
@@ -1,55 +0,0 @@
-#ifndef __FTGLExtrdFont__
-#define __FTGLExtrdFont__
-
-#include "FTFont.h"
-#include "FTGL.h"
-
-class FTGlyph;
-
-/**
- * FTGLExtrdFont is a specialisation of the FTFont class for handling
- * extruded Polygon fonts
- *
- * @see FTFont
- * @see FTGLPolygonFont
- */
-class FTGL_EXPORT FTGLExtrdFont : public FTFont
-{
- public:
- /**
- * Open and read a font file. Sets Error flag.
- *
- * @param fontname font file name.
- */
- FTGLExtrdFont( const char* fontname);
-
- /**
- * Open and read a font from a buffer in memory. Sets Error flag.
- *
- * @param pBufferBytes the in-memory buffer
- * @param bufferSizeInBytes the length of the buffer in bytes
- */
- FTGLExtrdFont( const unsigned char *pBufferBytes, size_t bufferSizeInBytes);
-
- /**
- * Destructor
- */
- ~FTGLExtrdFont();
-
- void Depth( float d) { depth = d;}
-
- private:
- /**
- * Construct a FTPolyGlyph.
- *
- * @param glyphIndex The glyph index NOT the char code.
- * @return An FTExtrdGlyph or <code>null</code> on failure.
- */
- inline virtual FTGlyph* MakeGlyph( unsigned int glyphIndex);
-
- float depth;
-};
-
-
-#endif // __FTGLExtrdFont__
-
diff --git a/extern/bFTGL/include/FTGLOutlineFont.h b/extern/bFTGL/include/FTGLOutlineFont.h
deleted file mode 100644
index a7f4b23092d..00000000000
--- a/extern/bFTGL/include/FTGLOutlineFont.h
+++ /dev/null
@@ -1,64 +0,0 @@
-#ifndef __FTGLOutlineFont__
-#define __FTGLOutlineFont__
-
-
-#include "FTFont.h"
-#include "FTGL.h"
-
-class FTGlyph;
-
-
-/**
- * FTGLOutlineFont is a specialisation of the FTFont class for handling
- * Vector Outline fonts
- *
- * @see FTFont
- */
-class FTGL_EXPORT FTGLOutlineFont : public FTFont
-{
- public:
- /**
- * Open and read a font file. Sets Error flag.
- *
- * @param fontname font file name.
- */
- FTGLOutlineFont( const char* fontname);
-
- /**
- * Open and read a font from a buffer in memory. Sets Error flag.
- *
- * @param pBufferBytes the in-memory buffer
- * @param bufferSizeInBytes the length of the buffer in bytes
- */
- FTGLOutlineFont( const unsigned char *pBufferBytes, size_t bufferSizeInBytes);
-
- /**
- * Destructor
- */
- ~FTGLOutlineFont();
-
- /**
- * Renders a string of characters
- *
- * @param string 'C' style string to be output.
- */
- void Render( const char* string);
-
- /**
- * Renders a string of characters
- *
- * @param string wchar_t string to be output.
- */
- void Render( const wchar_t* string);
-
- private:
- /**
- * Construct a FTOutlineGlyph.
- *
- * @param g The glyph index NOT the char code.
- * @return An FTOutlineGlyph or <code>null</code> on failure.
- */
- inline virtual FTGlyph* MakeGlyph( unsigned int g);
-
-};
-#endif // __FTGLOutlineFont__
diff --git a/extern/bFTGL/include/FTGLPixmapFont.h b/extern/bFTGL/include/FTGLPixmapFont.h
deleted file mode 100644
index f781ddf68dd..00000000000
--- a/extern/bFTGL/include/FTGLPixmapFont.h
+++ /dev/null
@@ -1,68 +0,0 @@
-#ifndef __FTGLPixmapFont__
-#define __FTGLPixmapFont__
-
-
-#include "FTFont.h"
-#include "FTGL.h"
-
-
-class FTGlyph;
-
-
-/**
- * FTGLPixmapFont is a specialisation of the FTFont class for handling
- * Pixmap (Grey Scale) fonts
- *
- * @see FTFont
- */
-class FTGL_EXPORT FTGLPixmapFont : public FTFont
-{
- public:
- /**
- * Open and read a font file. Sets Error flag.
- *
- * @param fontname font file name.
- */
- FTGLPixmapFont( const char* fontname);
-
- /**
- * Open and read a font from a buffer in memory. Sets Error flag.
- *
- * @param pBufferBytes the in-memory buffer
- * @param bufferSizeInBytes the length of the buffer in bytes
- */
- FTGLPixmapFont( const unsigned char *pBufferBytes, size_t bufferSizeInBytes);
-
- /**
- * Destructor
- */
- ~FTGLPixmapFont();
-
- /**
- * Renders a string of characters
- *
- * @param string 'C' style string to be output.
- */
- void Render( const char* string);
-
- /**
- * Renders a string of characters
- *
- * @param string wchar_t string to be output.
- */
- void Render( const wchar_t* string);
-
- private:
- /**
- * Construct a FTPixmapGlyph.
- *
- * @param g The glyph index NOT the char code.
- * @return An FTPixmapGlyph or <code>null</code> on failure.
- */
- inline virtual FTGlyph* MakeGlyph( unsigned int g);
-
-};
-
-
-#endif // __FTGLPixmapFont__
-
diff --git a/extern/bFTGL/include/FTGLPolygonFont.h b/extern/bFTGL/include/FTGLPolygonFont.h
deleted file mode 100644
index 54e624a1893..00000000000
--- a/extern/bFTGL/include/FTGLPolygonFont.h
+++ /dev/null
@@ -1,53 +0,0 @@
-#ifndef __FTGLPolygonFont__
-#define __FTGLPolygonFont__
-
-
-#include "FTFont.h"
-#include "FTGL.h"
-
-class FTGlyph;
-
-
-/**
- * FTGLPolygonFont is a specialisation of the FTFont class for handling
- * tesselated Polygon Mesh fonts
- *
- * @see FTFont
- */
-class FTGL_EXPORT FTGLPolygonFont : public FTFont
-{
- public:
- /**
- * Open and read a font file. Sets Error flag.
- *
- * @param fontname font file name.
- */
- FTGLPolygonFont( const char* fontname);
-
- /**
- * Open and read a font from a buffer in memory. Sets Error flag.
- *
- * @param pBufferBytes the in-memory buffer
- * @param bufferSizeInBytes the length of the buffer in bytes
- */
- FTGLPolygonFont( const unsigned char *pBufferBytes, size_t bufferSizeInBytes);
-
- /**
- * Destructor
- */
- ~FTGLPolygonFont();
-
- private:
- /**
- * Construct a FTPolyGlyph.
- *
- * @param g The glyph index NOT the char code.
- * @return An FTPolyGlyph or <code>null</code> on failure.
- */
- inline virtual FTGlyph* MakeGlyph( unsigned int g);
-
-};
-
-
-#endif // __FTGLPolygonFont__
-
diff --git a/extern/bFTGL/include/FTGLTextureFont.h b/extern/bFTGL/include/FTGLTextureFont.h
deleted file mode 100644
index f0575143f4b..00000000000
--- a/extern/bFTGL/include/FTGLTextureFont.h
+++ /dev/null
@@ -1,151 +0,0 @@
-#ifndef __FTGLTextureFont__
-#define __FTGLTextureFont__
-
-#include "FTFont.h"
-#include "FTVector.h"
-#include "FTGL.h"
-
-class FTTextureGlyph;
-
-
-/**
- * FTGLTextureFont is a specialisation of the FTFont class for handling
- * Texture mapped fonts
- *
- * @see FTFont
- */
-class FTGL_EXPORT FTGLTextureFont : public FTFont
-{
- public:
- /**
- * Open and read a font file. Sets Error flag.
- *
- * @param fontname font file name.
- */
- FTGLTextureFont( const char* fontname);
-
- /**
- * Open and read a font from a buffer in memory. Sets Error flag.
- *
- * @param pBufferBytes the in-memory buffer
- * @param bufferSizeInBytes the length of the buffer in bytes
- */
- FTGLTextureFont( const unsigned char *pBufferBytes, size_t bufferSizeInBytes);
-
- /**
- * Destructor
- */
- virtual ~FTGLTextureFont();
-
- /**
- * Set the char size for the current face.
- *
- * @param size the face size in points (1/72 inch)
- * @param res the resolution of the target device.
- * @return <code>true</code> if size was set correctly
- */
- virtual bool FaceSize( const unsigned int size, const unsigned int res = 72);
-
- /**
- * Renders a string of characters
- *
- * @param string 'C' style string to be output.
- */
- virtual void Render( const char* string);
-
- /**
- * Renders a string of characters
- *
- * @param string wchar_t string to be output.
- */
- virtual void Render( const wchar_t* string);
-
-
- private:
- /**
- * Construct a FTTextureGlyph.
- *
- * @param glyphIndex The glyph index NOT the char code.
- * @return An FTTextureGlyph or <code>null</code> on failure.
- */
- inline virtual FTGlyph* MakeGlyph( unsigned int glyphIndex);
-
- /**
- * Get the size of a block of memory required to layout the glyphs
- *
- * Calculates a width and height based on the glyph sizes and the
- * number of glyphs. It over estimates.
- */
- inline void CalculateTextureSize();
-
- /**
- * Creates a 'blank' OpenGL texture object.
- *
- * The format is GL_ALPHA and the params are
- * GL_TEXTURE_WRAP_S = GL_CLAMP
- * GL_TEXTURE_WRAP_T = GL_CLAMP
- * GL_TEXTURE_MAG_FILTER = GL_LINEAR
- * GL_TEXTURE_MIN_FILTER = GL_LINEAR
- * Note that mipmapping is NOT used
- */
- inline GLuint CreateTexture();
-
- /**
- * The maximum texture dimension on this OpenGL implemetation
- */
- GLsizei maxTextSize;
-
- /**
- * The minimum texture width required to hold the glyphs
- */
- GLsizei textureWidth;
-
- /**
- * The minimum texture height required to hold the glyphs
- */
- GLsizei textureHeight;
-
- /**
- *An array of texture ids
- */
- FTVector<GLuint> textureIDList;
-
- /**
- * The max height for glyphs in the current font
- */
- int glyphHeight;
-
- /**
- * The max width for glyphs in the current font
- */
- int glyphWidth;
-
- /**
- * A value to be added to the height and width to ensure that
- * glyphs don't overlap in the texture
- */
- unsigned int padding;
-
- /**
- *
- */
- unsigned int numGlyphs;
-
- /**
- */
- unsigned int remGlyphs;
-
- /**
- */
- int xOffset;
-
- /**
- */
- int yOffset;
-
-};
-
-
-#endif // __FTGLTextureFont__
-
-
diff --git a/extern/bFTGL/include/FTGlyph.h b/extern/bFTGL/include/FTGlyph.h
deleted file mode 100644
index c38d51e728e..00000000000
--- a/extern/bFTGL/include/FTGlyph.h
+++ /dev/null
@@ -1,89 +0,0 @@
-#ifndef __FTGlyph__
-#define __FTGlyph__
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_GLYPH_H
-
-#include "FTBBox.h"
-#include "FTPoint.h"
-#include "FTGL.h"
-
-
-/**
- * FTGlyph is the base class for FTGL glyphs.
- *
- * It provides the interface between Freetype glyphs and their openGL
- * renderable counterparts. This is an abstract class and derived classes
- * must implement the <code>render</code> function.
- *
- * @see FTGlyphContainer
- * @see FTBBox
- * @see FTPoint
- *
- */
-class FTGL_EXPORT FTGlyph
-{
- public:
- /**
- * Constructor
- */
- FTGlyph( FT_GlyphSlot glyph);
-
- /**
- * Destructor
- */
- virtual ~FTGlyph();
-
- /**
- * Renders this glyph at the current pen position.
- *
- * @param pen The current pen position.
- * @return The advance distance for this glyph.
- */
- virtual float Render( const FTPoint& pen) = 0;
-
- /**
- * Return the advance width for this glyph.
- *
- * @return advance width.
- */
- float Advance() const { return advance;}
-
- /**
- * Return the bounding box for this glyph.
- *
- * @return bounding box.
- */
- const FTBBox& BBox() const { return bBox;}
-
- /**
- * Queries for errors.
- *
- * @return The current error code.
- */
- FT_Error Error() const { return err;}
-
- protected:
- /**
- * The advance distance for this glyph
- */
- float advance;
-
- /**
- * The bounding box of this glyph.
- */
- FTBBox bBox;
-
- /**
- * Current error code. Zero means no error.
- */
- FT_Error err;
-
- private:
-
-};
-
-
-#endif // __FTGlyph__
-
diff --git a/extern/bFTGL/include/FTGlyphContainer.h b/extern/bFTGL/include/FTGlyphContainer.h
deleted file mode 100644
index de668b61dbd..00000000000
--- a/extern/bFTGL/include/FTGlyphContainer.h
+++ /dev/null
@@ -1,127 +0,0 @@
-#ifndef __FTGlyphContainer__
-#define __FTGlyphContainer__
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_GLYPH_H
-
-#include "FTGL.h"
-#include "FTBBox.h"
-#include "FTPoint.h"
-#include "FTVector.h"
-
-class FTFace;
-class FTGlyph;
-class FTCharmap;
-
-/**
- * FTGlyphContainer holds the post processed FTGlyph objects.
- *
- * @see FTGlyph
- */
-class FTGL_EXPORT FTGlyphContainer
-{
- typedef FTVector<FTGlyph*> GlyphVector;
- public:
- /**
- * Constructor
- *
- * @param face The Freetype face
- */
- FTGlyphContainer( FTFace* face);
-
- /**
- * Destructor
- */
- ~FTGlyphContainer();
-
- /**
- * Sets the character map for the face.
- *
- * @param encoding the Freetype encoding symbol. See above.
- * @return <code>true</code> if charmap was valid
- * and set correctly
- */
- bool CharMap( FT_Encoding encoding);
-
- /**
- * Get the font index of the input character.
- *
- * @param characterCode The character code of the requested glyph in the
- * current encoding eg apple roman.
- * @return The font index for the character.
- */
- unsigned int FontIndex( const unsigned int characterCode ) const;
-
- /**
- * Adds a glyph to this glyph list.
- *
- * @param glyph The FTGlyph to be inserted into the container
- * @param characterCode The char code of the glyph NOT the glyph index.
- */
- void Add( FTGlyph* glyph, const unsigned int characterCode);
-
- /**
- * Get a glyph from the glyph list
- *
- * @param characterCode The char code of the glyph NOT the glyph index
- * @return An FTGlyph or <code>null</code> is it hasn't been
- * loaded.
- */
- const FTGlyph* const Glyph( const unsigned int characterCode) const;
-
- /**
- * Get the bounding box for a character.
- * @param characterCode The char code of the glyph NOT the glyph index
- */
- FTBBox BBox( const unsigned int characterCode) const;
-
- /**
- * Returns the kerned advance width for a glyph.
- *
- * @param characterCode glyph index of the character
- * @param nextCharacterCode the next glyph in a string
- * @return advance width
- */
- float Advance( const unsigned int characterCode, const unsigned int nextCharacterCode);
-
- /**
- * Renders a character
- * @param characterCode the glyph to be Rendered
- * @param nextCharacterCode the next glyph in the string. Used for kerning.
- * @param penPosition the position to Render the glyph
- * @return The distance to advance the pen position after Rendering
- */
- FTPoint Render( const unsigned int characterCode, const unsigned int nextCharacterCode, FTPoint penPosition);
-
- /**
- * Queries the Font for errors.
- *
- * @return The current error code.
- */
- FT_Error Error() const { return err;}
-
- private:
- /**
- * The FTGL face
- */
- FTFace* face;
-
- /**
- * The Character Map object associated with the current face
- */
- FTCharmap* charMap;
-
- /**
- * A structure to hold the glyphs
- */
- GlyphVector glyphs;
-
- /**
- * Current error code. Zero means no error.
- */
- FT_Error err;
-};
-
-
-#endif // __FTGlyphContainer__
diff --git a/extern/bFTGL/include/FTLibrary.h b/extern/bFTGL/include/FTLibrary.h
deleted file mode 100644
index 1e5ed6b1a08..00000000000
--- a/extern/bFTGL/include/FTLibrary.h
+++ /dev/null
@@ -1,97 +0,0 @@
-#ifndef __FTLibrary__
-#define __FTLibrary__
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-//#include FT_CACHE_H
-
-#include "FTGL.h"
-
-
-/**
- * FTLibrary class is the global accessor for the Freetype library.
- *
- * This class encapsulates the Freetype Library. This is a singleton class
- * and ensures that only one FT_Library is in existence at any one time.
- * All constructors are private therefore clients cannot create or
- * instantiate this class themselves and must access it's methods via the
- * static <code>FTLibrary::Instance()</code> function.
- *
- * Just because this class returns a valid <code>FTLibrary</code> object
- * doesn't mean that the Freetype Library has been successfully initialised.
- * Clients should check for errors. You can initialse the library AND check
- * for errors using the following code...
- * <code>err = FTLibrary::Instance().Error();</code>
- *
- * @see "Freetype 2 Documentation"
- *
- */
-class FTGL_EXPORT FTLibrary
-{
- public:
- /**
- * Global acces point to the single FTLibrary object.
- *
- * @return The global <code>FTLibrary</code> object.
- */
- static FTLibrary& Instance();
-
- /**
- * Gets a pointer to the native Freetype library.
- *
- * @return A handle to a FreeType library instance.
- */
- const FT_Library* const GetLibrary() const { return library;}
-
- /**
- * Queries the library for errors.
- *
- * @return The current error code.
- */
- FT_Error Error() const { return err;}
-
- /**
- * Destructor
- *
- * Disposes of the Freetype library
- */
- ~FTLibrary();
-
- private:
- /**
- * Default constructors.
- *
- * Made private to stop clients creating there own FTLibrary
- * objects.
- */
- FTLibrary();
- FTLibrary( const FT_Library&){}
- FTLibrary& operator=( const FT_Library&) { return *this; }
-
- /**
- * Initialises the Freetype library
- *
- * Even though this function indicates success via the return value,
- * clients can't see this so must check the error codes. This function
- * is only ever called by the default c_stor
- *
- * @return <code>true</code> if the Freetype library was
- * successfully initialised, <code>false</code>
- * otherwise.
- */
- bool Initialise();
-
- /**
- * Freetype library handle.
- */
- FT_Library* library;
-// FTC_Manager* manager;
-
- /**
- * Current error code. Zero means no error.
- */
- FT_Error err;
-
-};
-
-#endif // __FTLibrary__
diff --git a/extern/bFTGL/include/FTList.h b/extern/bFTGL/include/FTList.h
deleted file mode 100644
index 34992168103..00000000000
--- a/extern/bFTGL/include/FTList.h
+++ /dev/null
@@ -1,112 +0,0 @@
-#ifndef __FTList__
-#define __FTList__
-
-#include "FTGL.h"
-
-/**
-* Provides a non-STL alternative to the STL list
- */
-template <typename FT_LIST_ITEM_TYPE>
-class FTGL_EXPORT FTList
-{
- public:
- typedef FT_LIST_ITEM_TYPE value_type;
- typedef value_type& reference;
- typedef const value_type& const_reference;
- typedef size_t size_type;
-
- /**
- * Constructor
- */
- FTList()
- : listSize(0),
- tail(0)
- {
- tail = NULL;
- head = new Node;
- }
-
- /**
- * Destructor
- */
- ~FTList()
- {
- Node* next;
-
- for( Node *walk = head; walk; walk = next)
- {
- next = walk->next;
- delete walk;
- }
- }
-
- /**
- * Get the number of items in the list
- */
- size_type size() const
- {
- return listSize;
- }
-
- /**
- * Add an item to the end of the list
- */
- void push_back( const value_type& item)
- {
- Node* node = new Node( item);
-
- if( head->next == NULL)
- {
- head->next = node;
- }
-
- if( tail)
- {
- tail->next = node;
- }
- tail = node;
- ++listSize;
- }
-
- /**
- * Get the item at the front of the list
- */
- reference front() const
- {
- return head->next->payload;
- }
-
- /**
- * Get the item at the end of the list
- */
- reference back() const
- {
- return tail->payload;
- }
-
- private:
- struct Node
- {
- Node()
- : next(NULL)
- {}
-
- Node( const value_type& item)
- : next(NULL)
- {
- payload = item;
- }
-
- Node* next;
-
- value_type payload;
- };
-
- size_type listSize;
-
- Node* head;
- Node* tail;
-};
-
-#endif // __FTList__
-
diff --git a/extern/bFTGL/include/FTOutlineGlyph.h b/extern/bFTGL/include/FTOutlineGlyph.h
deleted file mode 100644
index 7dd0ba042b9..00000000000
--- a/extern/bFTGL/include/FTOutlineGlyph.h
+++ /dev/null
@@ -1,54 +0,0 @@
-#ifndef __FTOutlineGlyph__
-#define __FTOutlineGlyph__
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_GLYPH_H
-
-#include "FTGL.h"
-#include "FTGlyph.h"
-
-class FTVectoriser;
-
-
-/**
- * FTOutlineGlyph is a specialisation of FTGlyph for creating outlines.
- *
- * @see FTGlyphContainer
- * @see FTVectoriser
- *
- */
-class FTGL_EXPORT FTOutlineGlyph : public FTGlyph
-{
- public:
- /**
- * Constructor. Sets the Error to Invalid_Outline if the glyphs isn't an outline.
- *
- * @param glyph The Freetype glyph to be processed
- */
- FTOutlineGlyph( FT_GlyphSlot glyph);
-
- /**
- * Destructor
- */
- virtual ~FTOutlineGlyph();
-
- /**
- * Renders this glyph at the current pen position.
- *
- * @param pen The current pen position.
- * @return The advance distance for this glyph.
- */
- virtual float Render( const FTPoint& pen);
-
- private:
- /**
- * OpenGL display list
- */
- GLuint glList;
-
-};
-
-
-#endif // __FTOutlineGlyph__
-
diff --git a/extern/bFTGL/include/FTPixmapGlyph.h b/extern/bFTGL/include/FTPixmapGlyph.h
deleted file mode 100644
index 9d43d6c58b3..00000000000
--- a/extern/bFTGL/include/FTPixmapGlyph.h
+++ /dev/null
@@ -1,68 +0,0 @@
-#ifndef __FTPixmapGlyph__
-#define __FTPixmapGlyph__
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_GLYPH_H
-
-#include "FTGL.h"
-#include "FTGlyph.h"
-
-
-/**
- * FTPixmapGlyph is a specialisation of FTGlyph for creating pixmaps.
- *
- * @see FTGlyphContainer
- *
- */
-class FTGL_EXPORT FTPixmapGlyph : public FTGlyph
-{
- public:
- /**
- * Constructor
- *
- * @param glyph The Freetype glyph to be processed
- */
- FTPixmapGlyph( FT_GlyphSlot glyph);
-
- /**
- * Destructor
- */
- virtual ~FTPixmapGlyph();
-
- /**
- * Renders this glyph at the current pen position.
- *
- * @param pen The current pen position.
- * @return The advance distance for this glyph.
- */
- virtual float Render( const FTPoint& pen);
-
- // attributes
-
- private:
- /**
- * The width of the glyph 'image'
- */
- int destWidth;
-
- /**
- * The height of the glyph 'image'
- */
- int destHeight;
-
- /**
- * Vector from the pen position to the topleft corner of the pixmap
- */
- FTPoint pos;
-
- /**
- * Pointer to the 'image' data
- */
- unsigned char* data;
-
-};
-
-
-#endif // __FTPixmapGlyph__
diff --git a/extern/bFTGL/include/FTPoint.h b/extern/bFTGL/include/FTPoint.h
deleted file mode 100644
index bb1772c4c18..00000000000
--- a/extern/bFTGL/include/FTPoint.h
+++ /dev/null
@@ -1,85 +0,0 @@
-#ifndef __FTPoint__
-#define __FTPoint__
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_GLYPH_H
-
-#include "FTGL.h"
-
-/**
- * FTPoint class is a basic 3 dimensional point or vector.
- */
-class FTGL_EXPORT FTPoint
-{
- public:
- /**
- * Default constructor. Point is set to zero.
- */
- FTPoint()
- : x(0), y(0), z(0)
- {}
-
- /**
- * Constructor.
- *
- * @param X
- * @param Y
- * @param Z
- */
- FTPoint( const FTGL_DOUBLE X, const FTGL_DOUBLE Y, const FTGL_DOUBLE Z)
- : x(X), y(Y), z(Z)
- {}
-
- /**
- * Constructor. This converts an FT_Vector to an FT_Point
- *
- * @param ft_vector A freetype vector
- */
- FTPoint( const FT_Vector& ft_vector)
- : x(ft_vector.x), y(ft_vector.y), z(0)
- {}
-
- /**
- * Operator +=
- *
- * @param point
- * @return this plus point.
- */
- FTPoint& operator += ( const FTPoint& point)
- {
- x += point.x;
- y += point.y;
- z += point.z;
-
- return *this;
- }
-
- /**
- * Operator == Tests for eqaulity
- *
- * @param a
- * @param b
- * @return
- */
- friend bool operator == ( const FTPoint &a, const FTPoint &b);
-
- /**
- * Operator != Tests for non equality
- *
- * @param a
- * @param b
- * @return
- */
- friend bool operator != ( const FTPoint &a, const FTPoint &b);
-
- /**
- * The point data
- */
- FTGL_DOUBLE x, y, z; // FIXME make private
-
- private:
-};
-
-#endif // __FTPoint__
-
diff --git a/extern/bFTGL/include/FTPolyGlyph.h b/extern/bFTGL/include/FTPolyGlyph.h
deleted file mode 100644
index c8faeffceb6..00000000000
--- a/extern/bFTGL/include/FTPolyGlyph.h
+++ /dev/null
@@ -1,55 +0,0 @@
-#ifndef __FTPolyGlyph__
-#define __FTPolyGlyph__
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_GLYPH_H
-
-#include "FTGL.h"
-#include "FTGlyph.h"
-
-class FTVectoriser;
-
-/**
- * FTPolyGlyph is a specialisation of FTGlyph for creating tessellated
- * polygon glyphs.
- *
- * @see FTGlyphContainer
- * @see FTVectoriser
- *
- */
-class FTGL_EXPORT FTPolyGlyph : public FTGlyph
-{
- public:
- /**
- * Constructor. Sets the Error to Invalid_Outline if the glyphs isn't an outline.
- *
- * @param glyph The Freetype glyph to be processed
- */
- FTPolyGlyph( FT_GlyphSlot glyph);
-
- /**
- * Destructor
- */
- virtual ~FTPolyGlyph();
-
- /**
- * Renders this glyph at the current pen position.
- *
- * @param pen The current pen position.
- * @return The advance distance for this glyph.
- */
- virtual float Render( const FTPoint& pen);
-
- private:
- /**
- * OpenGL display list
- */
- GLuint glList;
-
-};
-
-
-#endif // __FTPolyGlyph__
-
diff --git a/extern/bFTGL/include/FTSize.h b/extern/bFTGL/include/FTSize.h
deleted file mode 100644
index 31f6bb66db1..00000000000
--- a/extern/bFTGL/include/FTSize.h
+++ /dev/null
@@ -1,132 +0,0 @@
-#ifndef __FTSize__
-#define __FTSize__
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-#include "FTGL.h"
-
-
-
-/**
- * FTSize class provides an abstraction layer for the Freetype Size.
- *
- * @see "Freetype 2 Documentation"
- *
- */
-class FTGL_EXPORT FTSize
-{
- public:
- /**
- * Default Constructor
- */
- FTSize();
-
- /**
- * Destructor
- */
- virtual ~FTSize();
-
- /**
- * Sets the char size for the current face.
- *
- * This doesn't guarantee that the size was set correctly. Clients
- * should check errors.
- *
- * @param face Parent face for this size object
- * @param point_size the face size in points (1/72 inch)
- * @param x_resolution the horizontal resolution of the target device.
- * @param y_resolution the vertical resolution of the target device.
- * @return <code>true</code> if the size has been set. Clients should check Error() for more information if this function returns false()
- */
- bool CharSize( FT_Face* face, unsigned int point_size, unsigned int x_resolution, unsigned int y_resolution);
-
- /**
- * get the char size for the current face.
- *
- * @return The char size in points
- */
- unsigned int CharSize() const;
-
- /**
- * Gets the global ascender height for the face in pixels.
- *
- * @return Ascender height
- */
- float Ascender() const;
-
- /**
- * Gets the global descender height for the face in pixels.
- *
- * @return Ascender height
- */
- float Descender() const;
-
- /**
- * Gets the global face height for the face.
- *
- * If the face is scalable this returns the height of the global
- * bounding box which ensures that any glyph will be less than or
- * equal to this height. If the font isn't scalable there is no
- * guarantee that glyphs will not be taller than this value.
- *
- * @return height in pixels.
- */
- float Height() const;
-
- /**
- * Gets the global face width for the face.
- *
- * If the face is scalable this returns the width of the global
- * bounding box which ensures that any glyph will be less than or
- * equal to this width. If the font isn't scalable this value is
- * the max_advance for the face.
- *
- * @return width in pixels.
- */
- float Width() const;
-
- /**
- * Gets the underline position for the face.
- *
- * @return underline position in pixels
- */
- float Underline() const;
-
- unsigned int XPixelsPerEm() const;
-
- unsigned int YPixelsPerEm() const;
-
- /**
- * Queries for errors.
- *
- * @return The current error code.
- */
- FT_Error Error() const { return err; }
-
- private:
- /**
- * The current Freetype face that this FTSize object relates to.
- */
- FT_Face* ftFace;
-
- /**
- * The Freetype size.
- */
- FT_Size ftSize;
-
- /**
- * The size in points.
- */
- unsigned int size;
-
- /**
- * Current error code. Zero means no error.
- */
- FT_Error err;
-
-};
-
-#endif // __FTSize__
-
diff --git a/extern/bFTGL/include/FTTextureGlyph.h b/extern/bFTGL/include/FTTextureGlyph.h
deleted file mode 100644
index 389e6f778da..00000000000
--- a/extern/bFTGL/include/FTTextureGlyph.h
+++ /dev/null
@@ -1,89 +0,0 @@
-#ifndef __FTTextureGlyph__
-#define __FTTextureGlyph__
-
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_GLYPH_H
-
-#include "FTGL.h"
-#include "FTGlyph.h"
-
-
-/**
- * FTTextureGlyph is a specialisation of FTGlyph for creating texture
- * glyphs.
- *
- * @see FTGlyphContainer
- *
- */
-class FTGL_EXPORT FTTextureGlyph : public FTGlyph
-{
- public:
- /**
- * Constructor
- *
- * @param glyph The Freetype glyph to be processed
- * @param id The id of the texture that this glyph will be
- * drawn in
- * @param xOffset The x offset into the parent texture to draw
- * this glyph
- * @param yOffset The y offset into the parent texture to draw
- * this glyph
- * @param width The width of the parent texture
- * @param height The height (number of rows) of the parent texture
- */
- FTTextureGlyph( FT_GlyphSlot glyph, int id, int xOffset, int yOffset, GLsizei width, GLsizei height);
-
- /**
- * Destructor
- */
- virtual ~FTTextureGlyph();
-
- /**
- * Renders this glyph at the current pen position.
- *
- * @param pen The current pen position.
- * @return The advance distance for this glyph.
- */
- virtual float Render( const FTPoint& pen);
-
- private:
- /**
- * The width of the glyph 'image'
- */
- int destWidth;
-
- /**
- * The height of the glyph 'image'
- */
- int destHeight;
-
- /**
- * Vector from the pen position to the topleft corner of the pixmap
- */
- FTPoint pos;
-
- /**
- * The texture co-ords of this glyph within the texture.
- */
- FTPoint uv[2];
-
- /**
- * The texture index that this glyph is contained in.
- */
- int glTextureID;
-
- /**
- * The texture index of the currently active texture
- *
- * We call glGetIntegerv( GL_TEXTURE_2D_BINDING, activeTextureID);
- * to get the currently active texture to try to reduce the number
- * of texture bind operations
- */
- GLint activeTextureID;
-
-};
-
-
-#endif // __FTTextureGlyph__
diff --git a/extern/bFTGL/include/FTVector.h b/extern/bFTGL/include/FTVector.h
deleted file mode 100644
index 6147f522c08..00000000000
--- a/extern/bFTGL/include/FTVector.h
+++ /dev/null
@@ -1,190 +0,0 @@
-#ifndef __FTVector__
-#define __FTVector__
-
-#include "FTGL.h"
-
-/**
- * Provides a non-STL alternative to the STL vector
- */
-template <typename FT_VECTOR_ITEM_TYPE>
-class FTGL_EXPORT FTVector
-{
- public:
- typedef FT_VECTOR_ITEM_TYPE value_type;
- typedef value_type& reference;
- typedef const value_type& const_reference;
- typedef value_type* iterator;
- typedef const value_type* const_iterator;
- typedef size_t size_type;
-
- FTVector()
- {
- Capacity = Size = 0;
- Items = 0;
- }
-
-
- virtual ~FTVector()
- {
- clear();
- }
-
- FTVector& operator =(const FTVector& v)
- {
- reserve(v.capacity());
-
- iterator ptr = begin();
- const_iterator vbegin = v.begin();
- const_iterator vend = v.end();
-
- while( vbegin != vend)
- {
- *ptr++ = *vbegin++;
- }
-
- Size = v.size();
- return *this;
- }
-
- size_type size() const
- {
- return Size;
- }
-
- size_type capacity() const
- {
- return Capacity;
- }
-
- iterator begin()
- {
- return Items;
- }
-
- const_iterator begin() const
- {
- return Items;
- }
-
- iterator end()
- {
- return begin() + size();
- }
-
- const_iterator end() const
- {
- return begin() + size();
- }
-
- bool empty() const
- {
- return size() == 0;
- }
-
- reference operator [](size_type pos)
- {
- return( *(begin() + pos));
- }
-
- const_reference operator []( size_type pos) const
- {
- return( *(begin() + pos));
- }
-
- void clear()
- {
- if( Capacity)
- {
- delete [] Items;
- Capacity = Size = 0;
- Items = 0;
- }
- }
-
- void reserve( size_type n)
- {
- if( capacity() < n)
- {
- expand(n);
- }
- }
-
- void push_back(const value_type& x)
- {
- if( size() == capacity())
- {
- expand();
- }
-
- ( *this)[size()] = x;
- ++Size;
- }
-
- void resize(size_type n, value_type x)
- {
- if( n == size())
- {
- return;
- }
-
- reserve(n);
- iterator begin, end;
-
- if( n >= Size)
- {
- begin = this->end();
- end = this->begin() + n;
- }
- else
- {
- begin = this->begin() + n;
- end = this->end();
- }
-
- while( begin != end)
- {
- *begin++ = x;
- }
-
- Size = n;
- }
-
-
- private:
- void expand(size_type capacity_hint = 0)
- {
- size_type new_capacity =( capacity() == 0) ? 256 : capacity()* 2;
- if( capacity_hint)
- {
- while( new_capacity < capacity_hint)
- {
- new_capacity *= 2;
- }
- }
-
- value_type *new_items = new value_type[new_capacity];
-
- iterator begin = this->begin();
- iterator end = this->end();
- value_type *ptr = new_items;
-
- while( begin != end)
- {
- *ptr++ = *begin++;
- }
-
- if( Capacity)
- {
- delete [] Items;
- }
-
- Items = new_items;
- Capacity = new_capacity;
- }
-
- size_type Capacity;
- size_type Size;
- value_type* Items;
-};
-
-#endif // __FTVector__
diff --git a/extern/bFTGL/include/FTVectoriser.h b/extern/bFTGL/include/FTVectoriser.h
deleted file mode 100644
index 7150560ce07..00000000000
--- a/extern/bFTGL/include/FTVectoriser.h
+++ /dev/null
@@ -1,275 +0,0 @@
-#ifndef __FTVectoriser__
-#define __FTVectoriser__
-
-
-#include "FTContour.h"
-#include "FTList.h"
-#include "FTPoint.h"
-#include "FTVector.h"
-#include "FTGL.h"
-
-
-#ifndef CALLBACK
-#define CALLBACK
-#endif
-
-
-/**
- * FTTesselation captures points that are output by OpenGL's gluTesselator.
- */
-class FTGL_EXPORT FTTesselation
-{
- public:
- /**
- * Default constructor
- */
- FTTesselation( GLenum m)
- : meshType(m)
- {
- pointList.reserve( 128);
- }
-
- /**
- * Destructor
- */
- ~FTTesselation()
- {
- pointList.clear();
- }
-
- /**
- * Add a point to the mesh.
- */
- void AddPoint( const FTGL_DOUBLE x, const FTGL_DOUBLE y, const FTGL_DOUBLE z)
- {
- pointList.push_back( FTPoint( x, y, z));
- }
-
- /**
- * The number of points in this mesh
- */
- size_t PointCount() const { return pointList.size();}
-
- /**
- *
- */
- const FTPoint& Point( unsigned int index) const { return pointList[index];}
-
- /**
- * Return the OpenGL polygon type.
- */
- GLenum PolygonType() const { return meshType;}
-
- private:
- /**
- * Points generated by gluTesselator.
- */
- typedef FTVector<FTPoint> PointVector;
- PointVector pointList;
-
- /**
- * OpenGL primitive type from gluTesselator.
- */
- GLenum meshType;
-};
-
-
-/**
- * FTMesh is a container of FTTesselation's that make up a polygon glyph
- */
-class FTGL_EXPORT FTMesh
-{
- typedef FTVector<FTTesselation*> TesselationVector;
- typedef FTList<FTPoint> PointList;
-
- public:
- /**
- * Default constructor
- */
- FTMesh();
-
- /**
- * Destructor
- */
- ~FTMesh();
-
- /**
- *
- */
- void AddPoint( const FTGL_DOUBLE x, const FTGL_DOUBLE y, const FTGL_DOUBLE z);
-
- /**
- *
- */
- FTGL_DOUBLE* Combine( const FTGL_DOUBLE x, const FTGL_DOUBLE y, const FTGL_DOUBLE z);
-
- /**
- *
- */
- void Begin( GLenum meshType);
-
- /**
- *
- */
- void End();
-
- /**
- *
- */
- void Error( GLenum e) { err = e;}
-
- /**
- *
- */
- unsigned int TesselationCount() const { return tesselationList.size();}
-
- /**
- *
- */
- const FTTesselation* const Tesselation( unsigned int index) const;
-
- /**
- *
- */
- const PointList& TempPointList() const { return tempPointList;}
-
- /**
- * Get the GL ERROR returned by the glu tesselator
- */
- GLenum Error() const { return err;}
-
- private:
- /**
- * The current sub mesh that we are constructing.
- */
- FTTesselation* currentTesselation;
-
- /**
- * Holds each sub mesh that comprises this glyph.
- */
- TesselationVector tesselationList;
-
- /**
- * Holds extra points created by gluTesselator. See ftglCombine.
- */
- PointList tempPointList;
-
- /**
- * GL ERROR returned by the glu tesselator
- */
- GLenum err;
-
-};
-
-const FTGL_DOUBLE FTGL_FRONT_FACING = 1.0;
-const FTGL_DOUBLE FTGL_BACK_FACING = -1.0;
-
-/**
- * FTVectoriser class is a helper class that converts font outlines into
- * point data.
- *
- * @see FTExtrdGlyph
- * @see FTOutlineGlyph
- * @see FTPolyGlyph
- * @see FTContour
- * @see FTPoint
- *
- */
-class FTGL_EXPORT FTVectoriser
-{
- public:
- /**
- * Constructor
- *
- * @param glyph The freetype glyph to be processed
- */
- FTVectoriser( const FT_GlyphSlot glyph);
-
- /**
- * Destructor
- */
- virtual ~FTVectoriser();
-
- /**
- * Build an FTMesh from the vector outline data.
- *
- * @param zNormal The direction of the z axis of the normal
- * for this mesh
- */
- void MakeMesh( FTGL_DOUBLE zNormal = FTGL_FRONT_FACING);
-
- /**
- * Get the current mesh.
- */
- const FTMesh* const GetMesh() const { return mesh;}
-
- /**
- * Get the total count of points in this outline
- *
- * @return the number of points
- */
- size_t PointCount();
-
- /**
- * Get the count of contours in this outline
- *
- * @return the number of contours
- */
- size_t ContourCount() const { return ftContourCount;}
-
- /**
- * Return a contour at index
- *
- * @return the number of contours
- */
- const FTContour* const Contour( unsigned int index) const;
-
- /**
- * Get the number of points in a specific contour in this outline
- *
- * @param c The contour index
- * @return the number of points in contour[c]
- */
- size_t ContourSize( int c) const { return contourList[c]->PointCount();}
-
- /**
- * Get the flag for the tesselation rule for this outline
- *
- * @return The contour flag
- */
- int ContourFlag() const { return contourFlag;}
-
- private:
- /**
- * Process the freetype outline data into contours of points
- */
- void ProcessContours();
-
- /**
- * The list of contours in the glyph
- */
- FTContour** contourList;
-
- /**
- * A Mesh for tesselations
- */
- FTMesh* mesh;
-
- /**
- * The number of contours reported by Freetype
- */
- short ftContourCount;
-
- /**
- * A flag indicating the tesselation rule for the glyph
- */
- int contourFlag;
-
- /**
- * A Freetype outline
- */
- FT_Outline outline;
-};
-
-
-#endif // __FTVectoriser__
diff --git a/extern/bFTGL/license.txt b/extern/bFTGL/license.txt
deleted file mode 100644
index b9fd0dbb580..00000000000
--- a/extern/bFTGL/license.txt
+++ /dev/null
@@ -1,27 +0,0 @@
-FTGL
-
-Herewith is a license. I've also chucked in a gnu (see COPYING.txt) license
-for those that are that way inclined. Basically I want you to use this
-software and if you think this license is preventing you from doing so
-let me know.
-
-Copyright (C) 2001-3 Henry Maddocks
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/extern/bFTGL/make/msvc_7_0/ftgl_static_lib.vcproj b/extern/bFTGL/make/msvc_7_0/ftgl_static_lib.vcproj
deleted file mode 100644
index a2dcf685ed2..00000000000
--- a/extern/bFTGL/make/msvc_7_0/ftgl_static_lib.vcproj
+++ /dev/null
@@ -1,406 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="ftgl_static_lib"
- ProjectGUID="{F9850C15-FF0A-429E-9D47-89FB433C9BD8}"
- SccProjectName=""
- SccLocalPath="">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Blender Debug|Win32"
- OutputDirectory="..\..\..\..\..\build\msvc_7\extern\ftgl\debug"
- IntermediateDirectory="..\..\..\..\..\build\msvc_7\extern\ftgl\debug"
- ConfigurationType="4"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="FALSE"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\include;..\..\..\..\..\lib\windows\freetype\include"
- PreprocessorDefinitions="_DEBUG;WIN32;_LIB;FTGL_LIBRARY_STATIC"
- BasicRuntimeChecks="3"
- RuntimeLibrary="1"
- UsePrecompiledHeader="2"
- PrecompiledHeaderFile="..\..\..\..\..\build\msvc_7\extern\ftgl\debug\ftgl_static_lib.pch"
- AssemblerListingLocation="..\..\..\..\..\build\msvc_7\extern\ftgl\debug\"
- ObjectFile="..\..\..\..\..\build\msvc_7\extern\ftgl\debug\"
- ProgramDataBaseFileName="..\..\..\..\..\build\msvc_7\extern\ftgl\debug\"
- WarningLevel="2"
- SuppressStartupBanner="TRUE"
- DebugInformationFormat="3"
- CompileAs="0"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\..\..\build\msvc_7\libs\extern\debug\ftgl_static.lib"
- SuppressStartupBanner="TRUE"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"
- Description="Copying FTGL files library (debug target) to lib tree."
- CommandLine="ECHO Copying header files
-IF NOT EXIST ..\..\..\..\..\build\msvc_7\extern\ftgl\include\ MKDIR ..\..\..\..\..\build\msvc_7\extern\ftgl\include
-XCOPY /Y ..\..\include\*.h ..\..\..\..\..\build\msvc_7\extern\ftgl\include
-ECHO Done
-"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Blender Release|Win32"
- OutputDirectory="..\..\..\..\..\build\msvc_7\extern\ftgl"
- IntermediateDirectory="..\..\..\..\..\build\msvc_7\extern\ftgl"
- ConfigurationType="4"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="FALSE"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\include;..\..\..\..\..\lib\windows\freetype\include"
- PreprocessorDefinitions="NDEBUG;WIN32;_LIB;FTGL_LIBRARY_STATIC"
- StringPooling="TRUE"
- RuntimeLibrary="0"
- EnableFunctionLevelLinking="TRUE"
- UsePrecompiledHeader="2"
- PrecompiledHeaderFile="..\..\..\..\..\build\msvc_7\extern\ftgl\ftgl_static_lib.pch"
- AssemblerListingLocation="..\..\..\..\..\build\msvc_7\extern\ftgl\"
- ObjectFile="..\..\..\..\..\build\msvc_7\extern\ftgl\"
- ProgramDataBaseFileName="..\..\..\..\..\build\msvc_7\extern\ftgl\"
- WarningLevel="2"
- SuppressStartupBanner="TRUE"
- CompileAs="0"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\..\..\build\msvc_7\libs\extern\ftgl_static.lib"
- SuppressStartupBanner="TRUE"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"
- Description="Copying FTGL files library to lib tree."
- CommandLine="ECHO Copying header files
-IF NOT EXIST ..\..\..\..\..\build\msvc_7\extern\ftgl\include\ MKDIR ..\..\..\..\..\build\msvc_7\extern\ftgl\include
-XCOPY /Y ..\..\include\*.h ..\..\..\..\..\build\msvc_7\extern\ftgl\include
-ECHO Done
-"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="3D Plugin Release|Win32"
- OutputDirectory="..\..\..\..\..\build\msvc_7\extern\ftgl\mtdll"
- IntermediateDirectory="..\..\..\..\..\build\msvc_7\extern\ftgl\mtdll"
- ConfigurationType="4"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="FALSE"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\include;..\..\..\..\..\lib\windows\freetype\include"
- PreprocessorDefinitions="NDEBUG;WIN32;_LIB;FTGL_LIBRARY_STATIC"
- StringPooling="TRUE"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="TRUE"
- UsePrecompiledHeader="2"
- PrecompiledHeaderFile="..\..\..\..\..\build\msvc_7\extern\ftgl\mtdll\ftgl_static_lib.pch"
- AssemblerListingLocation="..\..\..\..\..\build\msvc_7\extern\ftgl\mtdll\"
- ObjectFile="..\..\..\..\..\build\msvc_7\extern\ftgl\mtdll\"
- ProgramDataBaseFileName="..\..\..\..\..\build\msvc_7\extern\ftgl\mtdll\"
- WarningLevel="2"
- SuppressStartupBanner="TRUE"
- CompileAs="0"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\..\..\build\msvc_7\libs\extern\mtdll\ftgl_static.lib"
- SuppressStartupBanner="TRUE"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"
- Description="Copying FTGL files library to lib tree."
- CommandLine="ECHO Copying header files
-IF NOT EXIST ..\..\..\..\..\build\msvc_7\extern\ftgl\include\ MKDIR ..\..\..\..\..\build\msvc_7\extern\ftgl\include
-XCOPY /Y ..\..\include\*.h ..\..\..\..\..\build\msvc_7\extern\ftgl\include
-ECHO Done
-"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="3D Plugin Debug|Win32"
- OutputDirectory="..\..\..\..\..\build\msvc_7\extern\ftgl\mtdll\debug"
- IntermediateDirectory="..\..\..\..\..\build\msvc_7\extern\ftgl\mtdll\debug"
- ConfigurationType="4"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="FALSE"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\include;..\..\..\..\..\lib\windows\freetype\include"
- PreprocessorDefinitions="_DEBUG;WIN32;_LIB;FTGL_LIBRARY_STATIC"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="2"
- PrecompiledHeaderFile="..\..\..\..\..\build\msvc_7\extern\ftgl\mtdll\debug\ftgl_static_lib.pch"
- AssemblerListingLocation="..\..\..\..\..\build\msvc_7\extern\ftgl\mtdll\debug\"
- ObjectFile="..\..\..\..\..\build\msvc_7\extern\ftgl\mtdll\debug\"
- ProgramDataBaseFileName="..\..\..\..\..\build\msvc_7\extern\ftgl\mtdll\debug\"
- WarningLevel="2"
- SuppressStartupBanner="TRUE"
- DebugInformationFormat="3"
- CompileAs="0"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\..\..\build\msvc_7\libs\extern\mtdll\debug\ftgl_static.lib"
- SuppressStartupBanner="TRUE"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"
- Description="Copying FTGL files library (debug target) to lib tree."
- CommandLine="ECHO Copying header files
-IF NOT EXIST ..\..\..\..\..\build\msvc_7\extern\ftgl\include\ MKDIR ..\..\..\..\..\build\msvc_7\extern\ftgl\include
-XCOPY /Y ..\..\include\*.h ..\..\..\..\..\build\msvc_7\extern\ftgl\include
-ECHO Done
-"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">
- <File
- RelativePath="..\..\src\FTBitmapGlyph.cpp">
- </File>
- <File
- RelativePath="..\..\src\FTCharmap.cpp">
- </File>
- <File
- RelativePath="..\..\src\FTContour.cpp">
- </File>
- <File
- RelativePath="..\..\src\FTExtrdGlyph.cpp">
- </File>
- <File
- RelativePath="..\..\src\FTFace.cpp">
- </File>
- <File
- RelativePath="..\..\src\FTFont.cpp">
- </File>
- <File
- RelativePath="..\..\src\FTGLBitmapFont.cpp">
- </File>
- <File
- RelativePath="..\..\src\FTGLExtrdFont.cpp">
- </File>
- <File
- RelativePath="..\..\src\FTGLOutlineFont.cpp">
- </File>
- <File
- RelativePath="..\..\src\FTGLPixmapFont.cpp">
- </File>
- <File
- RelativePath="..\..\src\FTGLPolygonFont.cpp">
- </File>
- <File
- RelativePath="..\..\src\FTGLTextureFont.cpp">
- </File>
- <File
- RelativePath="..\..\src\FTGlyph.cpp">
- </File>
- <File
- RelativePath="..\..\src\FTGlyphContainer.cpp">
- </File>
- <File
- RelativePath="..\..\src\FTLibrary.cpp">
- </File>
- <File
- RelativePath="..\..\src\FTOutlineGlyph.cpp">
- </File>
- <File
- RelativePath="..\..\src\FTPixmapGlyph.cpp">
- </File>
- <File
- RelativePath="..\..\src\FTPoint.cpp">
- </File>
- <File
- RelativePath="..\..\src\FTPolyGlyph.cpp">
- </File>
- <File
- RelativePath="..\..\src\FTSize.cpp">
- </File>
- <File
- RelativePath="..\..\src\FTTextureGlyph.cpp">
- </File>
- <File
- RelativePath="..\..\src\FTVectoriser.cpp">
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl">
- <File
- RelativePath="..\..\include\FTBBox.h">
- </File>
- <File
- RelativePath="..\..\include\FTBitmapGlyph.h">
- </File>
- <File
- RelativePath="..\..\include\FTCharmap.h">
- </File>
- <File
- RelativePath="..\..\include\FTCharToGlyphIndexMap.h">
- </File>
- <File
- RelativePath="..\..\include\FTContour.h">
- </File>
- <File
- RelativePath="..\..\include\FTExtrdGlyph.h">
- </File>
- <File
- RelativePath="..\..\include\FTFace.h">
- </File>
- <File
- RelativePath="..\..\include\FTFont.h">
- </File>
- <File
- RelativePath="..\..\include\FTGL.h">
- </File>
- <File
- RelativePath="..\..\include\FTGLBitmapFont.h">
- </File>
- <File
- RelativePath="..\..\include\FTGLExtrdFont.h">
- </File>
- <File
- RelativePath="..\..\include\FTGLOutlineFont.h">
- </File>
- <File
- RelativePath="..\..\include\FTGLPixmapFont.h">
- </File>
- <File
- RelativePath="..\..\include\FTGLPolygonFont.h">
- </File>
- <File
- RelativePath="..\..\include\FTGLTextureFont.h">
- </File>
- <File
- RelativePath="..\..\include\FTGlyph.h">
- </File>
- <File
- RelativePath="..\..\include\FTGlyphContainer.h">
- </File>
- <File
- RelativePath="..\..\include\FTLibrary.h">
- </File>
- <File
- RelativePath="..\..\include\FTList.h">
- </File>
- <File
- RelativePath="..\..\include\FTOutlineGlyph.h">
- </File>
- <File
- RelativePath="..\..\include\FTPixmapGlyph.h">
- </File>
- <File
- RelativePath="..\..\include\FTPoint.h">
- </File>
- <File
- RelativePath="..\..\include\FTPolyGlyph.h">
- </File>
- <File
- RelativePath="..\..\include\FTSize.h">
- </File>
- <File
- RelativePath="..\..\include\FTTextureGlyph.h">
- </File>
- <File
- RelativePath="..\..\include\FTVector.h">
- </File>
- <File
- RelativePath="..\..\include\FTVectoriser.h">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/extern/bFTGL/make/msvc_9_0/ftgl_static_lib.vcproj b/extern/bFTGL/make/msvc_9_0/ftgl_static_lib.vcproj
deleted file mode 100644
index eefbecb3653..00000000000
--- a/extern/bFTGL/make/msvc_9_0/ftgl_static_lib.vcproj
+++ /dev/null
@@ -1,537 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9,00"
- Name="EXT_ftgl_static_lib"
- ProjectGUID="{F9850C15-FF0A-429E-9D47-89FB433C9BD8}"
- RootNamespace="ftgl_static_lib"
- TargetFrameworkVersion="131072"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Blender Debug|Win32"
- OutputDirectory="..\..\..\..\..\build\msvc_9\extern\ftgl\debug"
- IntermediateDirectory="..\..\..\..\..\build\msvc_9\extern\ftgl\debug"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\include;..\..\..\..\..\lib\windows\freetype\include"
- PreprocessorDefinitions="_DEBUG;WIN32;_LIB;FTGL_LIBRARY_STATIC"
- BasicRuntimeChecks="3"
- RuntimeLibrary="1"
- UsePrecompiledHeader="0"
- PrecompiledHeaderFile="..\..\..\..\..\build\msvc_9\extern\ftgl\debug\ftgl_static_lib.pch"
- AssemblerListingLocation="..\..\..\..\..\build\msvc_9\extern\ftgl\debug\"
- ObjectFile="..\..\..\..\..\build\msvc_9\extern\ftgl\debug\"
- ProgramDataBaseFileName="..\..\..\..\..\build\msvc_9\extern\ftgl\debug\"
- WarningLevel="2"
- SuppressStartupBanner="true"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\..\..\build\msvc_9\libs\extern\debug\ftgl_static.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- Description="Copying FTGL files library (debug target) to lib tree."
- CommandLine="ECHO Copying header files&#x0D;&#x0A;IF NOT EXIST ..\..\..\..\..\build\msvc_9\extern\ftgl\include\ MKDIR ..\..\..\..\..\build\msvc_9\extern\ftgl\include&#x0D;&#x0A;XCOPY /Y ..\..\include\*.h ..\..\..\..\..\build\msvc_9\extern\ftgl\include&#x0D;&#x0A;ECHO Done&#x0D;&#x0A;"
- />
- </Configuration>
- <Configuration
- Name="Blender Release|Win32"
- OutputDirectory="..\..\..\..\..\build\msvc_9\extern\ftgl"
- IntermediateDirectory="..\..\..\..\..\build\msvc_9\extern\ftgl"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\include;..\..\..\..\..\lib\windows\freetype\include"
- PreprocessorDefinitions="NDEBUG;WIN32;_LIB;FTGL_LIBRARY_STATIC"
- StringPooling="true"
- RuntimeLibrary="0"
- EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
- PrecompiledHeaderFile="..\..\..\..\..\build\msvc_9\extern\ftgl\ftgl_static_lib.pch"
- AssemblerListingLocation="..\..\..\..\..\build\msvc_9\extern\ftgl\"
- ObjectFile="..\..\..\..\..\build\msvc_9\extern\ftgl\"
- ProgramDataBaseFileName="..\..\..\..\..\build\msvc_9\extern\ftgl\"
- WarningLevel="2"
- SuppressStartupBanner="true"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\..\..\build\msvc_9\libs\extern\ftgl_static.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- Description="Copying FTGL files library to lib tree."
- CommandLine="ECHO Copying header files&#x0D;&#x0A;IF NOT EXIST ..\..\..\..\..\build\msvc_9\extern\ftgl\include\ MKDIR ..\..\..\..\..\build\msvc_9\extern\ftgl\include&#x0D;&#x0A;XCOPY /Y ..\..\include\*.h ..\..\..\..\..\build\msvc_9\extern\ftgl\include&#x0D;&#x0A;ECHO Done&#x0D;&#x0A;"
- />
- </Configuration>
- <Configuration
- Name="3D Plugin Release|Win32"
- OutputDirectory="..\..\..\..\..\build\msvc_9\extern\ftgl\mtdll"
- IntermediateDirectory="..\..\..\..\..\build\msvc_9\extern\ftgl\mtdll"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\include;..\..\..\..\..\lib\windows\freetype\include"
- PreprocessorDefinitions="NDEBUG;WIN32;_LIB;FTGL_LIBRARY_STATIC"
- StringPooling="true"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
- PrecompiledHeaderFile="..\..\..\..\..\build\msvc_9\extern\ftgl\mtdll\ftgl_static_lib.pch"
- AssemblerListingLocation="..\..\..\..\..\build\msvc_9\extern\ftgl\mtdll\"
- ObjectFile="..\..\..\..\..\build\msvc_9\extern\ftgl\mtdll\"
- ProgramDataBaseFileName="..\..\..\..\..\build\msvc_9\extern\ftgl\mtdll\"
- WarningLevel="2"
- SuppressStartupBanner="true"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\..\..\build\msvc_9\libs\extern\mtdll\ftgl_static.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- Description="Copying FTGL files library to lib tree."
- CommandLine="ECHO Copying header files&#x0D;&#x0A;IF NOT EXIST ..\..\..\..\..\build\msvc_9\extern\ftgl\include\ MKDIR ..\..\..\..\..\build\msvc_9\extern\ftgl\include&#x0D;&#x0A;XCOPY /Y ..\..\include\*.h ..\..\..\..\..\build\msvc_9\extern\ftgl\include&#x0D;&#x0A;ECHO Done&#x0D;&#x0A;"
- />
- </Configuration>
- <Configuration
- Name="3D Plugin Debug|Win32"
- OutputDirectory="..\..\..\..\..\build\msvc_9\extern\ftgl\mtdll\debug"
- IntermediateDirectory="..\..\..\..\..\build\msvc_9\extern\ftgl\mtdll\debug"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..\include;..\..\..\..\..\lib\windows\freetype\include"
- PreprocessorDefinitions="_DEBUG;WIN32;_LIB;FTGL_LIBRARY_STATIC"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="0"
- PrecompiledHeaderFile="..\..\..\..\..\build\msvc_9\extern\ftgl\mtdll\debug\ftgl_static_lib.pch"
- AssemblerListingLocation="..\..\..\..\..\build\msvc_9\extern\ftgl\mtdll\debug\"
- ObjectFile="..\..\..\..\..\build\msvc_9\extern\ftgl\mtdll\debug\"
- ProgramDataBaseFileName="..\..\..\..\..\build\msvc_9\extern\ftgl\mtdll\debug\"
- WarningLevel="2"
- SuppressStartupBanner="true"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\..\..\build\msvc_9\libs\extern\mtdll\debug\ftgl_static.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- Description="Copying FTGL files library (debug target) to lib tree."
- CommandLine="ECHO Copying header files&#x0D;&#x0A;IF NOT EXIST ..\..\..\..\..\build\msvc_9\extern\ftgl\include\ MKDIR ..\..\..\..\..\build\msvc_9\extern\ftgl\include&#x0D;&#x0A;XCOPY /Y ..\..\include\*.h ..\..\..\..\..\build\msvc_9\extern\ftgl\include&#x0D;&#x0A;ECHO Done&#x0D;&#x0A;"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
- >
- <File
- RelativePath="..\..\src\FTBitmapGlyph.cpp"
- >
- </File>
- <File
- RelativePath="..\..\src\FTCharmap.cpp"
- >
- </File>
- <File
- RelativePath="..\..\src\FTContour.cpp"
- >
- </File>
- <File
- RelativePath="..\..\src\FTExtrdGlyph.cpp"
- >
- </File>
- <File
- RelativePath="..\..\src\FTFace.cpp"
- >
- </File>
- <File
- RelativePath="..\..\src\FTFont.cpp"
- >
- </File>
- <File
- RelativePath="..\..\src\FTGLBitmapFont.cpp"
- >
- </File>
- <File
- RelativePath="..\..\src\FTGLExtrdFont.cpp"
- >
- </File>
- <File
- RelativePath="..\..\src\FTGLOutlineFont.cpp"
- >
- </File>
- <File
- RelativePath="..\..\src\FTGLPixmapFont.cpp"
- >
- </File>
- <File
- RelativePath="..\..\src\FTGLPolygonFont.cpp"
- >
- </File>
- <File
- RelativePath="..\..\src\FTGLTextureFont.cpp"
- >
- </File>
- <File
- RelativePath="..\..\src\FTGlyph.cpp"
- >
- </File>
- <File
- RelativePath="..\..\src\FTGlyphContainer.cpp"
- >
- </File>
- <File
- RelativePath="..\..\src\FTLibrary.cpp"
- >
- </File>
- <File
- RelativePath="..\..\src\FTOutlineGlyph.cpp"
- >
- </File>
- <File
- RelativePath="..\..\src\FTPixmapGlyph.cpp"
- >
- </File>
- <File
- RelativePath="..\..\src\FTPoint.cpp"
- >
- </File>
- <File
- RelativePath="..\..\src\FTPolyGlyph.cpp"
- >
- </File>
- <File
- RelativePath="..\..\src\FTSize.cpp"
- >
- </File>
- <File
- RelativePath="..\..\src\FTTextureGlyph.cpp"
- >
- </File>
- <File
- RelativePath="..\..\src\FTVectoriser.cpp"
- >
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl"
- >
- <File
- RelativePath="..\..\include\FTBBox.h"
- >
- </File>
- <File
- RelativePath="..\..\include\FTBitmapGlyph.h"
- >
- </File>
- <File
- RelativePath="..\..\include\FTCharmap.h"
- >
- </File>
- <File
- RelativePath="..\..\include\FTCharToGlyphIndexMap.h"
- >
- </File>
- <File
- RelativePath="..\..\include\FTContour.h"
- >
- </File>
- <File
- RelativePath="..\..\include\FTExtrdGlyph.h"
- >
- </File>
- <File
- RelativePath="..\..\include\FTFace.h"
- >
- </File>
- <File
- RelativePath="..\..\include\FTFont.h"
- >
- </File>
- <File
- RelativePath="..\..\include\FTGL.h"
- >
- </File>
- <File
- RelativePath="..\..\include\FTGLBitmapFont.h"
- >
- </File>
- <File
- RelativePath="..\..\include\FTGLExtrdFont.h"
- >
- </File>
- <File
- RelativePath="..\..\include\FTGLOutlineFont.h"
- >
- </File>
- <File
- RelativePath="..\..\include\FTGLPixmapFont.h"
- >
- </File>
- <File
- RelativePath="..\..\include\FTGLPolygonFont.h"
- >
- </File>
- <File
- RelativePath="..\..\include\FTGLTextureFont.h"
- >
- </File>
- <File
- RelativePath="..\..\include\FTGlyph.h"
- >
- </File>
- <File
- RelativePath="..\..\include\FTGlyphContainer.h"
- >
- </File>
- <File
- RelativePath="..\..\include\FTLibrary.h"
- >
- </File>
- <File
- RelativePath="..\..\include\FTList.h"
- >
- </File>
- <File
- RelativePath="..\..\include\FTOutlineGlyph.h"
- >
- </File>
- <File
- RelativePath="..\..\include\FTPixmapGlyph.h"
- >
- </File>
- <File
- RelativePath="..\..\include\FTPoint.h"
- >
- </File>
- <File
- RelativePath="..\..\include\FTPolyGlyph.h"
- >
- </File>
- <File
- RelativePath="..\..\include\FTSize.h"
- >
- </File>
- <File
- RelativePath="..\..\include\FTTextureGlyph.h"
- >
- </File>
- <File
- RelativePath="..\..\include\FTVector.h"
- >
- </File>
- <File
- RelativePath="..\..\include\FTVectoriser.h"
- >
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/extern/bFTGL/src/FTBitmapGlyph.cpp b/extern/bFTGL/src/FTBitmapGlyph.cpp
deleted file mode 100644
index 5db33f10c79..00000000000
--- a/extern/bFTGL/src/FTBitmapGlyph.cpp
+++ /dev/null
@@ -1,66 +0,0 @@
-#include <string>
-
-#include "FTBitmapGlyph.h"
-
-FTBitmapGlyph::FTBitmapGlyph( FT_GlyphSlot glyph)
-: FTGlyph( glyph),
- destWidth(0),
- destHeight(0),
- data(0)
-{
- err = FT_Render_Glyph( glyph, FT_RENDER_MODE_MONO);
- if( err || ft_glyph_format_bitmap != glyph->format)
- {
- return;
- }
-
- FT_Bitmap bitmap = glyph->bitmap;
-
- unsigned int srcWidth = bitmap.width;
- unsigned int srcHeight = bitmap.rows;
- unsigned int srcPitch = bitmap.pitch;
-
- destWidth = srcWidth;
- destHeight = srcHeight;
- destPitch = srcPitch;
-
- if( destWidth && destHeight)
- {
- data = new unsigned char[destPitch * destHeight];
- unsigned char* dest = data + (( destHeight - 1) * destPitch);
-
- unsigned char* src = bitmap.buffer;
-
- for( unsigned int y = 0; y < srcHeight; ++y)
- {
- memcpy( dest, src, srcPitch);
- dest -= destPitch;
- src += srcPitch;
- }
- }
-
- pos.x = glyph->bitmap_left;
- pos.y = static_cast<int>(srcHeight) - glyph->bitmap_top;
-}
-
-
-FTBitmapGlyph::~FTBitmapGlyph()
-{
- delete [] data;
-}
-
-
-float FTBitmapGlyph::Render( const FTPoint& pen)
-{
- if( data)
- {
- glBitmap( 0, 0, 0.0, 0.0, pen.x + pos.x, pen.y - pos.y, (const GLubyte*)0 );
-
- glPixelStorei( GL_UNPACK_ROW_LENGTH, destPitch * 8);
- glBitmap( destWidth, destHeight, 0.0f, 0.0, 0.0, 0.0, (const GLubyte*)data);
-
- glBitmap( 0, 0, 0.0, 0.0, -pen.x - pos.x, -pen.y + pos.y, (const GLubyte*)0 );
- }
-
- return advance;
-}
diff --git a/extern/bFTGL/src/FTBufferGlyph.cpp b/extern/bFTGL/src/FTBufferGlyph.cpp
deleted file mode 100644
index 27310103152..00000000000
--- a/extern/bFTGL/src/FTBufferGlyph.cpp
+++ /dev/null
@@ -1,59 +0,0 @@
-#include "FTBufferGlyph.h"
-
-FTBufferGlyph::FTBufferGlyph( FT_GlyphSlot glyph, unsigned char* b)
-: FTGlyph( glyph),
- destWidth(0),
- destHeight(0),
- data(0),
- buffer(b)
-{
- err = FT_Render_Glyph( glyph, FT_RENDER_MODE_NORMAL);
- if( err || ft_glyph_format_bitmap != glyph->format)
- {
- return;
- }
-
- FT_Bitmap bitmap = glyph->bitmap;
-
- unsigned int srcWidth = bitmap.width;
- unsigned int srcHeight = bitmap.rows;
- unsigned int srcPitch = bitmap.pitch;
-
- destWidth = srcWidth;
- destHeight = srcHeight;
- destPitch = srcPitch;
-
- if( destWidth && destHeight)
- {
- data = new unsigned char[destPitch * destHeight];
- unsigned char* dest = data + (( destHeight - 1) * destPitch);
-
- unsigned char* src = bitmap.buffer;
-
- for( unsigned int y = 0; y < srcHeight; ++y)
- {
- memcpy( dest, src, srcPitch);
- dest -= destPitch;
- src += srcPitch;
- }
- }
-
- pos.x = glyph->bitmap_left;
- pos.y = srcHeight - glyph->bitmap_top;
-}
-
-
-FTBufferGlyph::~FTBufferGlyph()
-{
- delete [] data;
-}
-
-
-float FTBufferGlyph::Render( const FTPoint& pen)
-{
- if( data && buffer)
- {
- }
-
- return advance;
-}
diff --git a/extern/bFTGL/src/FTCharmap.cpp b/extern/bFTGL/src/FTCharmap.cpp
deleted file mode 100644
index 00e8cfceca5..00000000000
--- a/extern/bFTGL/src/FTCharmap.cpp
+++ /dev/null
@@ -1,62 +0,0 @@
-#include "FTFace.h"
-#include "FTCharmap.h"
-
-
-FTCharmap::FTCharmap( FTFace* face)
-: ftFace( *(face->Face())),
- err(0)
-{
- if( !ftFace->charmap)
- {
- err = FT_Set_Charmap( ftFace, ftFace->charmaps[0]);
- }
-
- ftEncoding = ftFace->charmap->encoding;
-}
-
-
-FTCharmap::~FTCharmap()
-{
- charMap.clear();
-}
-
-
-bool FTCharmap::CharMap( FT_Encoding encoding)
-{
- if( ftEncoding == encoding)
- {
- return true;
- }
-
- err = FT_Select_Charmap( ftFace, encoding );
-
- if( !err)
- {
- ftEncoding = encoding;
- }
- else
- {
- ftEncoding = ft_encoding_none;
- }
-
- charMap.clear();
- return !err;
-}
-
-
-unsigned int FTCharmap::GlyphListIndex( const unsigned int characterCode )
-{
- return charMap.find( characterCode);
-}
-
-
-unsigned int FTCharmap::FontIndex( const unsigned int characterCode )
-{
- return FT_Get_Char_Index( ftFace, characterCode);
-}
-
-
-void FTCharmap::InsertIndex( const unsigned int characterCode, const unsigned int containerIndex)
-{
- charMap.insert( characterCode, containerIndex);
-}
diff --git a/extern/bFTGL/src/FTContour.cpp b/extern/bFTGL/src/FTContour.cpp
deleted file mode 100644
index 6b0cf8a23e1..00000000000
--- a/extern/bFTGL/src/FTContour.cpp
+++ /dev/null
@@ -1,149 +0,0 @@
-#include "FTContour.h"
-
-static const float BEZIER_STEP_SIZE = 0.2f;
-
-
-void FTContour::AddPoint( FTPoint point)
-{
- if( pointList.empty() || point != pointList[pointList.size() - 1])
- {
- pointList.push_back( point);
- }
-}
-
-
-void FTContour::AddPoint( float x, float y)
-{
- AddPoint( FTPoint( x, y, 0.0f));
-}
-
-
-void FTContour::evaluateQuadraticCurve()
-{
- for( unsigned int i = 0; i <= ( 1.0f / BEZIER_STEP_SIZE); i++)
- {
- float bezierValues[2][2];
-
- float t = static_cast<float>(i) * BEZIER_STEP_SIZE;
-
- bezierValues[0][0] = (1.0f - t) * controlPoints[0][0] + t * controlPoints[1][0];
- bezierValues[0][1] = (1.0f - t) * controlPoints[0][1] + t * controlPoints[1][1];
-
- bezierValues[1][0] = (1.0f - t) * controlPoints[1][0] + t * controlPoints[2][0];
- bezierValues[1][1] = (1.0f - t) * controlPoints[1][1] + t * controlPoints[2][1];
-
- bezierValues[0][0] = (1.0f - t) * bezierValues[0][0] + t * bezierValues[1][0];
- bezierValues[0][1] = (1.0f - t) * bezierValues[0][1] + t * bezierValues[1][1];
-
- AddPoint( bezierValues[0][0], bezierValues[0][1]);
- }
-}
-
-void FTContour::evaluateCubicCurve()
-{
- for( unsigned int i = 0; i <= ( 1.0f / BEZIER_STEP_SIZE); i++)
- {
- float bezierValues[3][2];
-
- float t = static_cast<float>(i) * BEZIER_STEP_SIZE;
-
- bezierValues[0][0] = (1.0f - t) * controlPoints[0][0] + t * controlPoints[1][0];
- bezierValues[0][1] = (1.0f - t) * controlPoints[0][1] + t * controlPoints[1][1];
-
- bezierValues[1][0] = (1.0f - t) * controlPoints[1][0] + t * controlPoints[2][0];
- bezierValues[1][1] = (1.0f - t) * controlPoints[1][1] + t * controlPoints[2][1];
-
- bezierValues[2][0] = (1.0f - t) * controlPoints[2][0] + t * controlPoints[3][0];
- bezierValues[2][1] = (1.0f - t) * controlPoints[2][1] + t * controlPoints[3][1];
-
- bezierValues[0][0] = (1.0f - t) * bezierValues[0][0] + t * bezierValues[1][0];
- bezierValues[0][1] = (1.0f - t) * bezierValues[0][1] + t * bezierValues[1][1];
-
- bezierValues[1][0] = (1.0f - t) * bezierValues[1][0] + t * bezierValues[2][0];
- bezierValues[1][1] = (1.0f - t) * bezierValues[1][1] + t * bezierValues[2][1];
-
- bezierValues[0][0] = (1.0f - t) * bezierValues[0][0] + t * bezierValues[1][0];
- bezierValues[0][1] = (1.0f - t) * bezierValues[0][1] + t * bezierValues[1][1];
-
- AddPoint( bezierValues[0][0], bezierValues[0][1]);
- }
-}
-
-
-FTContour::FTContour( FT_Vector* contour, char* pointTags, unsigned int numberOfPoints)
-{
- for( unsigned int pointIndex = 0; pointIndex < numberOfPoints; ++ pointIndex)
- {
- char pointTag = pointTags[pointIndex];
-
- if( pointTag == FT_Curve_Tag_On || numberOfPoints < 2)
- {
- AddPoint( contour[pointIndex].x, contour[pointIndex].y);
- continue;
- }
-
- FTPoint controlPoint( contour[pointIndex]);
- FTPoint previousPoint = ( 0 == pointIndex)
- ? FTPoint( contour[numberOfPoints - 1])
- : pointList[pointList.size() - 1];
-
- FTPoint nextPoint = ( pointIndex == numberOfPoints - 1)
- ? pointList[0]
- : FTPoint( contour[pointIndex + 1]);
-
- if( pointTag == FT_Curve_Tag_Conic)
- {
- char nextPointTag = ( pointIndex == numberOfPoints - 1)
- ? pointTags[0]
- : pointTags[pointIndex + 1];
-
- while( nextPointTag == FT_Curve_Tag_Conic)
- {
- nextPoint = FTPoint( static_cast<float>( controlPoint.x + nextPoint.x) * 0.5f,
- static_cast<float>( controlPoint.y + nextPoint.y) * 0.5f,
- 0);
-
- controlPoints[0][0] = previousPoint.x; controlPoints[0][1] = previousPoint.y;
- controlPoints[1][0] = controlPoint.x; controlPoints[1][1] = controlPoint.y;
- controlPoints[2][0] = nextPoint.x; controlPoints[2][1] = nextPoint.y;
-
- evaluateQuadraticCurve();
- ++pointIndex;
-
- previousPoint = nextPoint;
- controlPoint = FTPoint( contour[pointIndex]);
- nextPoint = ( pointIndex == numberOfPoints - 1)
- ? pointList[0]
- : FTPoint( contour[pointIndex + 1]);
- nextPointTag = ( pointIndex == numberOfPoints - 1)
- ? pointTags[0]
- : pointTags[pointIndex + 1];
- }
-
- controlPoints[0][0] = previousPoint.x; controlPoints[0][1] = previousPoint.y;
- controlPoints[1][0] = controlPoint.x; controlPoints[1][1] = controlPoint.y;
- controlPoints[2][0] = nextPoint.x; controlPoints[2][1] = nextPoint.y;
-
- evaluateQuadraticCurve();
- continue;
- }
-
- if( pointTag == FT_Curve_Tag_Cubic)
- {
- FTPoint controlPoint2 = nextPoint;
-
- FTPoint nextPoint = ( pointIndex == numberOfPoints - 2)
- ? pointList[0]
- : FTPoint( contour[pointIndex + 2]);
-
- controlPoints[0][0] = previousPoint.x; controlPoints[0][1] = previousPoint.y;
- controlPoints[1][0] = controlPoint.x; controlPoints[1][1] = controlPoint.y;
- controlPoints[2][0] = controlPoint2.x; controlPoints[2][1] = controlPoint2.y;
- controlPoints[3][0] = nextPoint.x; controlPoints[3][1] = nextPoint.y;
-
- evaluateCubicCurve();
- ++pointIndex;
- continue;
- }
- }
-}
diff --git a/extern/bFTGL/src/FTExtrdGlyph.cpp b/extern/bFTGL/src/FTExtrdGlyph.cpp
deleted file mode 100644
index 0b120e68709..00000000000
--- a/extern/bFTGL/src/FTExtrdGlyph.cpp
+++ /dev/null
@@ -1,141 +0,0 @@
-#include <math.h>
-
-#include "FTExtrdGlyph.h"
-#include "FTVectoriser.h"
-
-
-FTExtrdGlyph::FTExtrdGlyph( FT_GlyphSlot glyph, float d)
-: FTGlyph( glyph),
- glList(0),
- depth(d)
-{
- bBox.SetDepth( -depth);
-
- if( ft_glyph_format_outline != glyph->format)
- {
- err = 0x14; // Invalid_Outline
- return;
- }
-
- FTVectoriser vectoriser( glyph);
- if ( ( vectoriser.ContourCount() < 1) || ( vectoriser.PointCount() < 3))
- {
- return;
- }
-
- unsigned int tesselationIndex;
- glList = glGenLists(1);
- glNewList( glList, GL_COMPILE);
-
- vectoriser.MakeMesh( 1.0);
- glNormal3d(0.0, 0.0, 1.0);
-
- const FTMesh* mesh = vectoriser.GetMesh();
- for( tesselationIndex = 0; tesselationIndex < mesh->TesselationCount(); ++tesselationIndex)
- {
- const FTTesselation* subMesh = mesh->Tesselation( tesselationIndex);
- unsigned int polyonType = subMesh->PolygonType();
-
- glBegin( polyonType);
- for( unsigned int pointIndex = 0; pointIndex < subMesh->PointCount(); ++pointIndex)
- {
- glVertex3f( subMesh->Point( pointIndex).x / 64.0f,
- subMesh->Point( pointIndex).y / 64.0f,
- 0.0f);
- }
- glEnd();
- }
-
- vectoriser.MakeMesh( -1.0);
- glNormal3d(0.0, 0.0, -1.0);
-
- mesh = vectoriser.GetMesh();
- for( tesselationIndex = 0; tesselationIndex < mesh->TesselationCount(); ++tesselationIndex)
- {
- const FTTesselation* subMesh = mesh->Tesselation( tesselationIndex);
- unsigned int polyonType = subMesh->PolygonType();
-
- glBegin( polyonType);
- for( unsigned int pointIndex = 0; pointIndex < subMesh->PointCount(); ++pointIndex)
- {
- glVertex3f( subMesh->Point( pointIndex).x / 64.0f,
- subMesh->Point( pointIndex).y / 64.0f,
- -depth);
- }
- glEnd();
- }
-
- int contourFlag = vectoriser.ContourFlag();
-
- for( size_t c = 0; c < vectoriser.ContourCount(); ++c)
- {
- const FTContour* contour = vectoriser.Contour(c);
- unsigned int numberOfPoints = contour->PointCount();
-
- glBegin( GL_QUAD_STRIP);
- for( unsigned int j = 0; j <= numberOfPoints; ++j)
- {
- unsigned int index = ( j == numberOfPoints) ? 0 : j;
- unsigned int nextIndex = ( index == numberOfPoints - 1) ? 0 : index + 1;
-
- FTPoint normal = GetNormal( contour->Point(index), contour->Point(nextIndex));
- glNormal3f( normal.x, normal.y, 0.0f);
-
- if( contourFlag & ft_outline_reverse_fill)
- {
- glVertex3f( contour->Point(index).x / 64.0f, contour->Point(index).y / 64.0f, 0.0f);
- glVertex3f( contour->Point(index).x / 64.0f, contour->Point(index).y / 64.0f, -depth);
- }
- else
- {
- glVertex3f( contour->Point(index).x / 64.0f, contour->Point(index).y / 64.0f, -depth);
- glVertex3f( contour->Point(index).x / 64.0f, contour->Point(index).y / 64.0f, 0.0f);
- }
- }
- glEnd();
- }
-
- glEndList();
-}
-
-
-FTExtrdGlyph::~FTExtrdGlyph()
-{
- glDeleteLists( glList, 1);
-}
-
-
-float FTExtrdGlyph::Render( const FTPoint& pen)
-{
- if( glList)
- {
- glTranslatef( pen.x, pen.y, 0);
- glCallList( glList);
- glTranslatef( -pen.x, -pen.y, 0);
- }
-
- return advance;
-}
-
-
-FTPoint FTExtrdGlyph::GetNormal( const FTPoint &a, const FTPoint &b)
-{
- float vectorX = a.x - b.x;
- float vectorY = a.y - b.y;
-
- float length = sqrt( vectorX * vectorX + vectorY * vectorY );
-
- if( length > 0.0f)
- {
- length = 1 / length;
- }
- else
- {
- length = 0.0f;
- }
-
- return FTPoint( -vectorY * length,
- vectorX * length,
- 0.0f);
-}
-
diff --git a/extern/bFTGL/src/FTFace.cpp b/extern/bFTGL/src/FTFace.cpp
deleted file mode 100644
index 0385e234d6c..00000000000
--- a/extern/bFTGL/src/FTFace.cpp
+++ /dev/null
@@ -1,154 +0,0 @@
-#include "FTFace.h"
-#include "FTLibrary.h"
-
-#include FT_TRUETYPE_TABLES_H
-
-FTFace::FTFace( const char* filename)
-: numGlyphs(0),
- fontEncodingList(0),
- err(0)
-{
- const FT_Long DEFAULT_FACE_INDEX = 0;
- ftFace = new FT_Face;
-
- err = FT_New_Face( *FTLibrary::Instance().GetLibrary(), filename, DEFAULT_FACE_INDEX, ftFace);
-
- if( err)
- {
- delete ftFace;
- ftFace = 0;
- }
- else
- {
- numGlyphs = (*ftFace)->num_glyphs;
- }
-}
-
-
-FTFace::FTFace( const unsigned char *pBufferBytes, size_t bufferSizeInBytes)
-: numGlyphs(0),
- err(0)
-{
- const FT_Long DEFAULT_FACE_INDEX = 0;
- ftFace = new FT_Face;
-
- err = FT_New_Memory_Face( *FTLibrary::Instance().GetLibrary(), (FT_Byte *)pBufferBytes, bufferSizeInBytes, DEFAULT_FACE_INDEX, ftFace);
-
- if( err)
- {
- delete ftFace;
- ftFace = 0;
- }
- else
- {
- numGlyphs = (*ftFace)->num_glyphs;
- }
-}
-
-
-FTFace::~FTFace()
-{
- Close();
-}
-
-
-bool FTFace::Attach( const char* filename)
-{
- err = FT_Attach_File( *ftFace, filename);
- return !err;
-}
-
-
-bool FTFace::Attach( const unsigned char *pBufferBytes, size_t bufferSizeInBytes)
-{
- FT_Open_Args open;
-
- open.flags = FT_OPEN_MEMORY;
- open.memory_base = (FT_Byte *)pBufferBytes;
- open.memory_size = bufferSizeInBytes;
-
- err = FT_Attach_Stream( *ftFace, &open);
- return !err;
-}
-
-
-void FTFace::Close()
-{
- if( ftFace)
- {
- FT_Done_Face( *ftFace);
- delete ftFace;
- ftFace = 0;
- }
-}
-
-
-const FTSize& FTFace::Size( const unsigned int size, const unsigned int res)
-{
- charSize.CharSize( ftFace, size, res, res);
- err = charSize.Error();
-
- return charSize;
-}
-
-
-unsigned int FTFace::CharMapCount()
-{
- return (*ftFace)->num_charmaps;
-}
-
-
-FT_Encoding* FTFace::CharMapList()
-{
- if( 0 == fontEncodingList)
- {
- fontEncodingList = new FT_Encoding[CharMapCount()];
- for( size_t encodingIndex = 0; encodingIndex < CharMapCount(); ++encodingIndex)
- {
- fontEncodingList[encodingIndex] = (*ftFace)->charmaps[encodingIndex]->encoding;
- }
- }
-
- return fontEncodingList;
-}
-
-
-unsigned int FTFace::UnitsPerEM() const
-{
- return (*ftFace)->units_per_EM;
-}
-
-
-FTPoint FTFace::KernAdvance( unsigned int index1, unsigned int index2)
-{
- float x, y;
- x = y = 0.0f;
-
- if( FT_HAS_KERNING((*ftFace)) && index1 && index2)
- {
- FT_Vector kernAdvance;
- kernAdvance.x = kernAdvance.y = 0;
-
- err = FT_Get_Kerning( *ftFace, index1, index2, ft_kerning_unfitted, &kernAdvance);
- if( !err)
- {
- x = static_cast<float>( kernAdvance.x) / 64.0f;
- y = static_cast<float>( kernAdvance.y) / 64.0f;
- }
- }
-
- return FTPoint( x, y, 0.0);
-}
-
-
-FT_GlyphSlot FTFace::Glyph( unsigned int index, FT_Int load_flags)
-{
- err = FT_Load_Glyph( *ftFace, index, load_flags);
- if( err)
- {
- return NULL;
- }
-
- return (*ftFace)->glyph;
-}
-
diff --git a/extern/bFTGL/src/FTFont.cpp b/extern/bFTGL/src/FTFont.cpp
deleted file mode 100644
index c06d883104b..00000000000
--- a/extern/bFTGL/src/FTFont.cpp
+++ /dev/null
@@ -1,271 +0,0 @@
-#include "FTFace.h"
-#include "FTFont.h"
-#include "FTGlyphContainer.h"
-#include "FTBBox.h"
-
-
-FTFont::FTFont( const char* fontname)
-: face( fontname),
- glyphList(0)
-{
- err = face.Error();
- if( err == 0)
- {
- glyphList = new FTGlyphContainer( &face);
- }
-}
-
-
-FTFont::FTFont( const unsigned char *pBufferBytes, size_t bufferSizeInBytes)
-: face( pBufferBytes, bufferSizeInBytes),
- glyphList(0)
-{
- err = face.Error();
- if( err == 0)
- {
- glyphList = new FTGlyphContainer( &face);
- }
-}
-
-
-FTFont::~FTFont()
-{
- delete glyphList;
-}
-
-
-bool FTFont::Attach( const char* filename)
-{
- if( face.Attach( filename))
- {
- err = 0;
- return true;
- }
- else
- {
- err = face.Error();
- return false;
- }
-}
-
-
-bool FTFont::Attach( const unsigned char *pBufferBytes, size_t bufferSizeInBytes)
-{
- if( face.Attach( pBufferBytes, bufferSizeInBytes))
- {
- err = 0;
- return true;
- }
- else
- {
- err = face.Error();
- return false;
- }
-}
-
-
-bool FTFont::FaceSize( const unsigned int size, const unsigned int res )
-{
- charSize = face.Size( size, res);
-
- if( face.Error())
- {
- return false;
- }
-
- if( glyphList != NULL)
- {
- delete glyphList;
- }
-
- glyphList = new FTGlyphContainer( &face);
- return true;
-}
-
-
-unsigned int FTFont::FaceSize() const
-{
- return charSize.CharSize();
-}
-
-
-bool FTFont::CharMap( FT_Encoding encoding)
-{
- bool result = glyphList->CharMap( encoding);
- err = glyphList->Error();
- return result;
-}
-
-
-unsigned int FTFont::CharMapCount()
-{
- return face.CharMapCount();
-}
-
-
-FT_Encoding* FTFont::CharMapList()
-{
- return face.CharMapList();
-}
-
-
-float FTFont::Ascender() const
-{
- return charSize.Ascender();
-}
-
-
-float FTFont::Descender() const
-{
- return charSize.Descender();
-}
-
-
-void FTFont::BBox( const char* string,
- float& llx, float& lly, float& llz, float& urx, float& ury, float& urz)
-{
- FTBBox totalBBox;
-
- if((NULL != string) && ('\0' != *string))
- {
- const unsigned char* c = (unsigned char*)string;
-
- CheckGlyph( *c);
-
- totalBBox = glyphList->BBox( *c);
- float advance = glyphList->Advance( *c, *(c + 1));
- ++c;
-
- while( *c)
- {
- CheckGlyph( *c);
- FTBBox tempBBox = glyphList->BBox( *c);
- tempBBox.Move( FTPoint( advance, 0.0f, 0.0f));
- totalBBox += tempBBox;
- advance += glyphList->Advance( *c, *(c + 1));
- ++c;
- }
- }
-
- llx = totalBBox.lowerX;
- lly = totalBBox.lowerY;
- llz = totalBBox.lowerZ;
- urx = totalBBox.upperX;
- ury = totalBBox.upperY;
- urz = totalBBox.upperZ;
-}
-
-
-void FTFont::BBox( const wchar_t* string,
- float& llx, float& lly, float& llz, float& urx, float& ury, float& urz)
-{
- FTBBox totalBBox;
-
- if((NULL != string) && ('\0' != *string))
- {
- const wchar_t* c = string;
-
- CheckGlyph( *c);
-
- totalBBox = glyphList->BBox( *c);
- float advance = glyphList->Advance( *c, *(c + 1));
- ++c;
-
- while( *c)
- {
- CheckGlyph( *c);
- FTBBox tempBBox = glyphList->BBox( *c);
- tempBBox.Move( FTPoint( advance, 0.0f, 0.0f));
- totalBBox += tempBBox;
- advance += glyphList->Advance( *c, *(c + 1));
- ++c;
- }
- }
-
- llx = totalBBox.lowerX;
- lly = totalBBox.lowerY;
- llz = totalBBox.lowerZ;
- urx = totalBBox.upperX;
- ury = totalBBox.upperY;
- urz = totalBBox.upperZ;
-}
-
-
-float FTFont::Advance( const wchar_t* string)
-{
- const wchar_t* c = string;
- float width = 0.0f;
-
- while( *c)
- {
- CheckGlyph( *c);
- width += glyphList->Advance( *c, *(c + 1));
- ++c;
- }
-
- return width;
-}
-
-
-float FTFont::Advance( const char* string)
-{
- const unsigned char* c = (unsigned char*)string;
- float width = 0.0f;
-
- while( *c)
- {
- CheckGlyph( *c);
- width += glyphList->Advance( *c, *(c + 1));
- ++c;
- }
-
- return width;
-}
-
-
-void FTFont::Render( const char* string )
-{
- const unsigned char* c = (unsigned char*)string;
- pen.x = 0; pen.y = 0;
-
- while( *c)
- {
- DoRender( *c, *(c + 1));
- ++c;
- }
-}
-
-
-void FTFont::Render( const wchar_t* string )
-{
- const wchar_t* c = string;
- pen.x = 0; pen.y = 0;
-
- while( *c)
- {
- DoRender( *c, *(c + 1));
- ++c;
- }
-}
-
-
-void FTFont::DoRender( const unsigned int chr, const unsigned int nextChr)
-{
- CheckGlyph( chr);
-
- FTPoint kernAdvance = glyphList->Render( chr, nextChr, pen);
-
- pen.x += kernAdvance.x;
- pen.y += kernAdvance.y;
-}
-
-
-void FTFont::CheckGlyph( const unsigned int characterCode)
-{
- if( NULL == glyphList->Glyph( characterCode))
- {
- unsigned int glyphIndex = glyphList->FontIndex( characterCode);
- glyphList->Add( MakeGlyph( glyphIndex), characterCode);
- }
-}
-
diff --git a/extern/bFTGL/src/FTGLBitmapFont.cpp b/extern/bFTGL/src/FTGLBitmapFont.cpp
deleted file mode 100644
index 7e982a608da..00000000000
--- a/extern/bFTGL/src/FTGLBitmapFont.cpp
+++ /dev/null
@@ -1,66 +0,0 @@
-#include "FTGLBitmapFont.h"
-#include "FTBitmapGlyph.h"
-
-
-FTGLBitmapFont::FTGLBitmapFont( const char* fontname)
-: FTFont( fontname)
-{}
-
-
-FTGLBitmapFont::FTGLBitmapFont( const unsigned char *pBufferBytes, size_t bufferSizeInBytes)
-: FTFont( pBufferBytes, bufferSizeInBytes)
-{}
-
-
-FTGLBitmapFont::~FTGLBitmapFont()
-{}
-
-
-FTGlyph* FTGLBitmapFont::MakeGlyph( unsigned int g)
-{
- FT_GlyphSlot ftGlyph = face.Glyph( g, FT_LOAD_DEFAULT);
-
- if( ftGlyph)
- {
- FTBitmapGlyph* tempGlyph = new FTBitmapGlyph( ftGlyph);
- return tempGlyph;
- }
-
- err = face.Error();
- return NULL;
-}
-
-
-void FTGLBitmapFont::Render( const char* string)
-{
- glPushClientAttrib( GL_CLIENT_PIXEL_STORE_BIT);
- glPushAttrib( GL_ENABLE_BIT);
-
- glPixelStorei( GL_UNPACK_LSB_FIRST, GL_FALSE);
- glPixelStorei( GL_UNPACK_ALIGNMENT, 1);
-
- glDisable( GL_BLEND);
-
- FTFont::Render( string);
-
- glPopAttrib();
- glPopClientAttrib();
-}
-
-
-void FTGLBitmapFont::Render( const wchar_t* string)
-{
- glPushClientAttrib( GL_CLIENT_PIXEL_STORE_BIT);
- glPushAttrib( GL_ENABLE_BIT);
-
- glPixelStorei( GL_UNPACK_LSB_FIRST, GL_FALSE);
- glPixelStorei( GL_UNPACK_ALIGNMENT, 1);
-
- glDisable( GL_BLEND);
-
- FTFont::Render( string);
-
- glPopAttrib();
- glPopClientAttrib();
-}
-
diff --git a/extern/bFTGL/src/FTGLBufferFont.cpp b/extern/bFTGL/src/FTGLBufferFont.cpp
deleted file mode 100644
index b8af0fcb05f..00000000000
--- a/extern/bFTGL/src/FTGLBufferFont.cpp
+++ /dev/null
@@ -1,53 +0,0 @@
-#include "FTGLBufferFont.h"
-#include "FTBufferGlyph.h"
-
-
-FTGLBufferFont::FTGLBufferFont( const char* fontname)
-: FTFont( fontname),
- buffer(0)
-{}
-
-
-FTGLBufferFont::FTGLBufferFont( const unsigned char *pBufferBytes, size_t bufferSizeInBytes)
-: FTFont( pBufferBytes, bufferSizeInBytes),
- buffer(0)
-{}
-
-
-FTGLBufferFont::~FTGLBufferFont()
-{}
-
-
-FTGlyph* FTGLBufferFont::MakeGlyph( unsigned int g)
-{
- FT_GlyphSlot ftGlyph = face.Glyph( g, FT_LOAD_NO_HINTING);
-
- if( ftGlyph)
- {
- FTBufferGlyph* tempGlyph = new FTBufferGlyph( ftGlyph, buffer);
- return tempGlyph;
- }
-
- err = face.Error();
- return NULL;
-}
-
-
-void FTGLBufferFont::Render( const char* string)
-{
- if( NULL != buffer)
- {
- FTFont::Render( string);
- }
-}
-
-
-void FTGLBufferFont::Render( const wchar_t* string)
-{
- if( NULL != buffer)
- {
- FTFont::Render( string);
- }
-}
-
-
diff --git a/extern/bFTGL/src/FTGLExtrdFont.cpp b/extern/bFTGL/src/FTGLExtrdFont.cpp
deleted file mode 100644
index 37d89333a60..00000000000
--- a/extern/bFTGL/src/FTGLExtrdFont.cpp
+++ /dev/null
@@ -1,35 +0,0 @@
-#include "FTGLExtrdFont.h"
-#include "FTExtrdGlyph.h"
-
-
-FTGLExtrdFont::FTGLExtrdFont( const char* fontname)
-: FTFont( fontname),
- depth( 0.0f)
-{}
-
-
-FTGLExtrdFont::FTGLExtrdFont( const unsigned char *pBufferBytes, size_t bufferSizeInBytes)
-: FTFont( pBufferBytes, bufferSizeInBytes),
- depth( 0.0f)
-{}
-
-
-FTGLExtrdFont::~FTGLExtrdFont()
-{}
-
-
-FTGlyph* FTGLExtrdFont::MakeGlyph( unsigned int glyphIndex)
-{
- FT_GlyphSlot ftGlyph = face.Glyph( glyphIndex, FT_LOAD_NO_HINTING);
-
- if( ftGlyph)
- {
- FTExtrdGlyph* tempGlyph = new FTExtrdGlyph( ftGlyph, depth);
- return tempGlyph;
- }
-
- err = face.Error();
- return NULL;
-}
-
-
diff --git a/extern/bFTGL/src/FTGLOutlineFont.cpp b/extern/bFTGL/src/FTGLOutlineFont.cpp
deleted file mode 100644
index b9fd187e862..00000000000
--- a/extern/bFTGL/src/FTGLOutlineFont.cpp
+++ /dev/null
@@ -1,66 +0,0 @@
-#include "FTGLOutlineFont.h"
-#include "FTOutlineGlyph.h"
-
-
-FTGLOutlineFont::FTGLOutlineFont( const char* fontname)
-: FTFont( fontname)
-{}
-
-
-FTGLOutlineFont::FTGLOutlineFont( const unsigned char *pBufferBytes, size_t bufferSizeInBytes)
-: FTFont( pBufferBytes, bufferSizeInBytes)
-{}
-
-
-FTGLOutlineFont::~FTGLOutlineFont()
-{}
-
-
-FTGlyph* FTGLOutlineFont::MakeGlyph( unsigned int g)
-{
- FT_GlyphSlot ftGlyph = face.Glyph( g, FT_LOAD_NO_HINTING);
-
- if( ftGlyph)
- {
- FTOutlineGlyph* tempGlyph = new FTOutlineGlyph( ftGlyph);
- return tempGlyph;
- }
-
- err = face.Error();
- return NULL;
-}
-
-
-void FTGLOutlineFont::Render( const char* string)
-{
- glPushAttrib( GL_ENABLE_BIT | GL_HINT_BIT | GL_LINE_BIT | GL_COLOR_BUFFER_BIT);
-
- glDisable( GL_TEXTURE_2D);
-
- glEnable( GL_LINE_SMOOTH);
- glHint( GL_LINE_SMOOTH_HINT, GL_DONT_CARE);
- glEnable(GL_BLEND);
- glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // GL_ONE
-
- FTFont::Render( string);
-
- glPopAttrib();
-}
-
-
-void FTGLOutlineFont::Render( const wchar_t* string)
-{
- glPushAttrib( GL_ENABLE_BIT | GL_HINT_BIT | GL_LINE_BIT | GL_COLOR_BUFFER_BIT);
-
- glDisable( GL_TEXTURE_2D);
-
- glEnable( GL_LINE_SMOOTH);
- glHint( GL_LINE_SMOOTH_HINT, GL_DONT_CARE);
- glEnable(GL_BLEND);
- glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // GL_ONE
-
- FTFont::Render( string);
-
- glPopAttrib();
-}
-
diff --git a/extern/bFTGL/src/FTGLPixmapFont.cpp b/extern/bFTGL/src/FTGLPixmapFont.cpp
deleted file mode 100644
index 2654b85e31e..00000000000
--- a/extern/bFTGL/src/FTGLPixmapFont.cpp
+++ /dev/null
@@ -1,68 +0,0 @@
-#include "FTGLPixmapFont.h"
-#include "FTPixmapGlyph.h"
-
-
-FTGLPixmapFont::FTGLPixmapFont( const char* fontname)
-: FTFont( fontname)
-{}
-
-
-FTGLPixmapFont::FTGLPixmapFont( const unsigned char *pBufferBytes, size_t bufferSizeInBytes)
-: FTFont( pBufferBytes, bufferSizeInBytes)
-{}
-
-
-FTGLPixmapFont::~FTGLPixmapFont()
-{}
-
-
-FTGlyph* FTGLPixmapFont::MakeGlyph( unsigned int g)
-{
- FT_GlyphSlot ftGlyph = face.Glyph( g, FT_LOAD_NO_HINTING | FT_LOAD_NO_BITMAP);
-
- if( ftGlyph)
- {
- FTPixmapGlyph* tempGlyph = new FTPixmapGlyph( ftGlyph);
- return tempGlyph;
- }
-
- err = face.Error();
- return NULL;
-}
-
-
-void FTGLPixmapFont::Render( const char* string)
-{
- glPushAttrib( GL_ENABLE_BIT | GL_PIXEL_MODE_BIT | GL_COLOR_BUFFER_BIT);
- glPushClientAttrib( GL_CLIENT_PIXEL_STORE_BIT);
-
- glEnable(GL_BLEND);
- glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
-
- glDisable( GL_TEXTURE_2D);
-
- FTFont::Render( string);
-
- glPopClientAttrib();
- glPopAttrib();
-}
-
-
-void FTGLPixmapFont::Render( const wchar_t* string)
-{
- //glPushAttrib( GL_ENABLE_BIT | GL_PIXEL_MODE_BIT | GL_COLOR_BUFFER_BIT);
- // glPushClientAttrib( GL_CLIENT_PIXEL_STORE_BIT);
-
- glEnable(GL_BLEND);
- glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
-
- glDisable( GL_TEXTURE_2D);
-
- FTFont::Render( string);
-
- glDisable(GL_BLEND);
- // glPopClientAttrib();
- // glPopAttrib();
-}
-
-
diff --git a/extern/bFTGL/src/FTGLPolygonFont.cpp b/extern/bFTGL/src/FTGLPolygonFont.cpp
deleted file mode 100644
index 2d4dfa1f26a..00000000000
--- a/extern/bFTGL/src/FTGLPolygonFont.cpp
+++ /dev/null
@@ -1,33 +0,0 @@
-#include "FTGLPolygonFont.h"
-#include "FTPolyGlyph.h"
-
-
-FTGLPolygonFont::FTGLPolygonFont( const char* fontname)
-: FTFont( fontname)
-{}
-
-
-FTGLPolygonFont::FTGLPolygonFont( const unsigned char *pBufferBytes, size_t bufferSizeInBytes)
-: FTFont( pBufferBytes, bufferSizeInBytes)
-{}
-
-
-FTGLPolygonFont::~FTGLPolygonFont()
-{}
-
-
-FTGlyph* FTGLPolygonFont::MakeGlyph( unsigned int g)
-{
- FT_GlyphSlot ftGlyph = face.Glyph( g, FT_LOAD_NO_HINTING);
-
- if( ftGlyph)
- {
- FTPolyGlyph* tempGlyph = new FTPolyGlyph( ftGlyph);
- return tempGlyph;
- }
-
- err = face.Error();
- return NULL;
-}
-
-
diff --git a/extern/bFTGL/src/FTGLTextureFont.cpp b/extern/bFTGL/src/FTGLTextureFont.cpp
deleted file mode 100644
index 92f14be50f2..00000000000
--- a/extern/bFTGL/src/FTGLTextureFont.cpp
+++ /dev/null
@@ -1,178 +0,0 @@
-#include <string> // For memset
-
-#include "FTGLTextureFont.h"
-#include "FTTextureGlyph.h"
-
-
-inline GLuint NextPowerOf2( GLuint in)
-{
- in -= 1;
-
- in |= in >> 16;
- in |= in >> 8;
- in |= in >> 4;
- in |= in >> 2;
- in |= in >> 1;
-
- return in + 1;
-}
-
-
-FTGLTextureFont::FTGLTextureFont( const char* fontname)
-: FTFont( fontname),
- maxTextSize(0),
- textureWidth(0),
- textureHeight(0),
- glyphHeight(0),
- glyphWidth(0),
- padding(3),
- xOffset(0),
- yOffset(0)
-{
- remGlyphs = numGlyphs = face.GlyphCount();
-}
-
-
-FTGLTextureFont::FTGLTextureFont( const unsigned char *pBufferBytes, size_t bufferSizeInBytes)
-: FTFont( pBufferBytes, bufferSizeInBytes),
- maxTextSize(0),
- textureWidth(0),
- textureHeight(0),
- glyphHeight(0),
- glyphWidth(0),
- padding(3),
- xOffset(0),
- yOffset(0)
-{
- remGlyphs = numGlyphs = face.GlyphCount();
-}
-
-
-FTGLTextureFont::~FTGLTextureFont()
-{
- glDeleteTextures( textureIDList.size(), (const GLuint*)&textureIDList[0]);
-}
-
-
-FTGlyph* FTGLTextureFont::MakeGlyph( unsigned int glyphIndex)
-{
- FT_GlyphSlot ftGlyph = face.Glyph( glyphIndex, FT_LOAD_NO_HINTING | FT_LOAD_NO_BITMAP);
-
- if( ftGlyph)
- {
- glyphHeight = static_cast<int>( charSize.Height());
- glyphWidth = static_cast<int>( charSize.Width());
-
- if( textureIDList.empty())
- {
- textureIDList.push_back( CreateTexture());
- xOffset = yOffset = padding;
- }
-
- if( xOffset > ( textureWidth - glyphWidth))
- {
- xOffset = padding;
- yOffset += glyphHeight;
-
- if( yOffset > ( textureHeight - glyphHeight))
- {
- textureIDList.push_back( CreateTexture());
- yOffset = padding;
- }
- }
-
- FTTextureGlyph* tempGlyph = new FTTextureGlyph( ftGlyph, textureIDList[textureIDList.size() - 1],
- xOffset, yOffset, textureWidth, textureHeight);
- xOffset += static_cast<int>( tempGlyph->BBox().upperX - tempGlyph->BBox().lowerX + padding);
-
- --remGlyphs;
- return tempGlyph;
- }
-
- err = face.Error();
- return NULL;
-}
-
-
-void FTGLTextureFont::CalculateTextureSize()
-{
- if( !maxTextSize)
- {
- glGetIntegerv( GL_MAX_TEXTURE_SIZE, (GLint*)&maxTextSize);
- }
-
- textureWidth = NextPowerOf2( (remGlyphs * glyphWidth) + ( padding * 2));
- if( textureWidth > maxTextSize)
- {
- textureWidth = maxTextSize;
- }
-
- int h = static_cast<int>( (textureWidth - ( padding * 2)) / glyphWidth);
-
- textureHeight = NextPowerOf2( (( numGlyphs / h) + 1) * glyphHeight);
- textureHeight = textureHeight > maxTextSize ? maxTextSize : textureHeight;
-}
-
-
-GLuint FTGLTextureFont::CreateTexture()
-{
- CalculateTextureSize();
-
- int totalMemory = textureWidth * textureHeight;
- unsigned char* textureMemory = new unsigned char[totalMemory];
- memset( textureMemory, 0, totalMemory);
-
- GLuint textID;
- glGenTextures( 1, (GLuint*)&textID);
-
- glBindTexture( GL_TEXTURE_2D, textID);
- glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
- glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
- glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
-
- glTexImage2D( GL_TEXTURE_2D, 0, GL_ALPHA, textureWidth, textureHeight, 0, GL_ALPHA, GL_UNSIGNED_BYTE, textureMemory);
-
- delete [] textureMemory;
-
- return textID;
-}
-
-
-bool FTGLTextureFont::FaceSize( const unsigned int size, const unsigned int res)
-{
- if( !textureIDList.empty())
- {
- glDeleteTextures( textureIDList.size(), (const GLuint*)&textureIDList[0]);
- remGlyphs = numGlyphs = face.GlyphCount();
- }
-
- return FTFont::FaceSize( size, res);
-}
-
-
-void FTGLTextureFont::Render( const char* string)
-{
-// glPushAttrib( GL_ENABLE_BIT | GL_COLOR_BUFFER_BIT);
-
- glEnable(GL_BLEND);
- glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // GL_ONE
-
- FTFont::Render( string);
-
-// glPopAttrib();
-}
-
-
-void FTGLTextureFont::Render( const wchar_t* string)
-{
-// glPushAttrib( GL_ENABLE_BIT | GL_COLOR_BUFFER_BIT);
-
- glEnable(GL_BLEND);
- glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // GL_ONE
-
- FTFont::Render( string);
-
-// glPopAttrib();
-}
-
diff --git a/extern/bFTGL/src/FTGlyph.cpp b/extern/bFTGL/src/FTGlyph.cpp
deleted file mode 100644
index c68632949c2..00000000000
--- a/extern/bFTGL/src/FTGlyph.cpp
+++ /dev/null
@@ -1,17 +0,0 @@
-#include "FTGlyph.h"
-
-
-FTGlyph::FTGlyph( FT_GlyphSlot glyph)
-: advance(0.0f),
- err(0)
-{
- if( glyph)
- {
- bBox = FTBBox( glyph);
- advance = static_cast<float>( glyph->advance.x) / 64.0f;
- }
-}
-
-
-FTGlyph::~FTGlyph()
-{}
diff --git a/extern/bFTGL/src/FTGlyphContainer.cpp b/extern/bFTGL/src/FTGlyphContainer.cpp
deleted file mode 100644
index 2c1881bbfff..00000000000
--- a/extern/bFTGL/src/FTGlyphContainer.cpp
+++ /dev/null
@@ -1,93 +0,0 @@
-#include "FTGlyphContainer.h"
-#include "FTGlyph.h"
-#include "FTFace.h"
-#include "FTCharmap.h"
-
-
-FTGlyphContainer::FTGlyphContainer( FTFace* f)
-: face(f),
- err(0)
-{
- glyphs.push_back( NULL);
- charMap = new FTCharmap( face);
-}
-
-
-FTGlyphContainer::~FTGlyphContainer()
-{
- GlyphVector::iterator glyphIterator;
- for( glyphIterator = glyphs.begin(); glyphIterator != glyphs.end(); ++glyphIterator)
- {
- delete *glyphIterator;
- }
-
- glyphs.clear();
- delete charMap;
-}
-
-
-bool FTGlyphContainer::CharMap( FT_Encoding encoding)
-{
- bool result = charMap->CharMap( encoding);
- err = charMap->Error();
- return result;
-}
-
-
-unsigned int FTGlyphContainer::FontIndex( const unsigned int characterCode) const
-{
- return charMap->FontIndex( characterCode);
-}
-
-
-void FTGlyphContainer::Add( FTGlyph* tempGlyph, const unsigned int characterCode)
-{
- charMap->InsertIndex( characterCode, glyphs.size());
- glyphs.push_back( tempGlyph);
-}
-
-
-const FTGlyph* const FTGlyphContainer::Glyph( const unsigned int characterCode) const
-{
- signed int index = charMap->GlyphListIndex( characterCode);
- return glyphs[index];
-}
-
-
-FTBBox FTGlyphContainer::BBox( const unsigned int characterCode) const
-{
- return glyphs[charMap->GlyphListIndex( characterCode)]->BBox();
-}
-
-
-float FTGlyphContainer::Advance( const unsigned int characterCode, const unsigned int nextCharacterCode)
-{
- unsigned int left = charMap->FontIndex( characterCode);
- unsigned int right = charMap->FontIndex( nextCharacterCode);
-
- float width = face->KernAdvance( left, right).x;
- width += glyphs[charMap->GlyphListIndex( characterCode)]->Advance();
-
- return width;
-}
-
-
-FTPoint FTGlyphContainer::Render( const unsigned int characterCode, const unsigned int nextCharacterCode, FTPoint penPosition)
-{
- FTPoint kernAdvance;
- float advance = 0;
-
- unsigned int left = charMap->FontIndex( characterCode);
- unsigned int right = charMap->FontIndex( nextCharacterCode);
-
- kernAdvance = face->KernAdvance( left, right);
-
- if( !face->Error())
- {
- advance = glyphs[charMap->GlyphListIndex( characterCode)]->Render( penPosition);
- }
-
- kernAdvance.x = advance + kernAdvance.x;
-// kernAdvance.y = advance.y + kernAdvance.y;
- return kernAdvance;
-}
diff --git a/extern/bFTGL/src/FTLibrary.cpp b/extern/bFTGL/src/FTLibrary.cpp
deleted file mode 100644
index 29ab5ae2693..00000000000
--- a/extern/bFTGL/src/FTLibrary.cpp
+++ /dev/null
@@ -1,64 +0,0 @@
-#include "FTLibrary.h"
-
-
-FTLibrary& FTLibrary::Instance()
-{
- static FTLibrary ftlib;
- return ftlib;
-}
-
-
-FTLibrary::~FTLibrary()
-{
- if( library != 0)
- {
- FT_Done_FreeType( *library);
-
- delete library;
- library= 0;
- }
-
-// if( manager != 0)
-// {
-// FTC_Manager_Done( manager );
-//
-// delete manager;
-// manager= 0;
-// }
-}
-
-
-FTLibrary::FTLibrary()
-: library(0),
- err(0)
-{
- Initialise();
-}
-
-
-bool FTLibrary::Initialise()
-{
- if( library != 0)
- return true;
-
- library = new FT_Library;
-
- err = FT_Init_FreeType( library);
- if( err)
- {
- delete library;
- library = 0;
- return false;
- }
-
-// FTC_Manager* manager;
-//
-// if( FTC_Manager_New( lib, 0, 0, 0, my_face_requester, 0, manager )
-// {
-// delete manager;
-// manager= 0;
-// return false;
-// }
-
- return true;
-}
diff --git a/extern/bFTGL/src/FTOutlineGlyph.cpp b/extern/bFTGL/src/FTOutlineGlyph.cpp
deleted file mode 100644
index 340c7804140..00000000000
--- a/extern/bFTGL/src/FTOutlineGlyph.cpp
+++ /dev/null
@@ -1,57 +0,0 @@
-#include "FTOutlineGlyph.h"
-#include "FTVectoriser.h"
-
-
-FTOutlineGlyph::FTOutlineGlyph( FT_GlyphSlot glyph)
-: FTGlyph( glyph),
- glList(0)
-{
- if( ft_glyph_format_outline != glyph->format)
- {
- err = 0x14; // Invalid_Outline
- return;
- }
-
- FTVectoriser vectoriser( glyph);
-
- size_t numContours = vectoriser.ContourCount();
- if ( ( numContours < 1) || ( vectoriser.PointCount() < 3))
- {
- return;
- }
-
- glList = glGenLists(1);
- glNewList( glList, GL_COMPILE);
- for( unsigned int c = 0; c < numContours; ++c)
- {
- const FTContour* contour = vectoriser.Contour(c);
-
- glBegin( GL_LINE_LOOP);
- for( unsigned int p = 0; p < contour->PointCount(); ++p)
- {
- glVertex2f( contour->Point(p).x / 64.0f, contour->Point(p).y / 64.0f);
- }
- glEnd();
- }
- glEndList();
-}
-
-
-FTOutlineGlyph::~FTOutlineGlyph()
-{
- glDeleteLists( glList, 1);
-}
-
-
-float FTOutlineGlyph::Render( const FTPoint& pen)
-{
- if( glList)
- {
- glTranslatef( pen.x, pen.y, 0);
- glCallList( glList);
- glTranslatef( -pen.x, -pen.y, 0);
- }
-
- return advance;
-}
-
diff --git a/extern/bFTGL/src/FTPixmapGlyph.cpp b/extern/bFTGL/src/FTPixmapGlyph.cpp
deleted file mode 100644
index b051a06b6e3..00000000000
--- a/extern/bFTGL/src/FTPixmapGlyph.cpp
+++ /dev/null
@@ -1,109 +0,0 @@
-#include "FTPixmapGlyph.h"
-
-FTPixmapGlyph::FTPixmapGlyph( FT_GlyphSlot glyph)
-: FTGlyph( glyph),
- destWidth(0),
- destHeight(0),
- data(0)
-{
- err = FT_Render_Glyph( glyph, FT_RENDER_MODE_NORMAL);
- if( err || ft_glyph_format_bitmap != glyph->format)
- {
- return;
- }
-
- FT_Bitmap bitmap = glyph->bitmap;
-
- //check the pixel mode
- //ft_pixel_mode_grays
-
- int srcWidth = bitmap.width;
- int srcHeight = bitmap.rows;
-
- // FIXME What about dest alignment?
- destWidth = srcWidth;
- destHeight = srcHeight;
-
- if( destWidth && destHeight)
- {
- data = new unsigned char[destWidth * destHeight * 4];
-
- // Get the current glColor.
- float ftglColour[4];
-// glGetFloatv( GL_CURRENT_COLOR, ftglColour);
- ftglColour[0] = ftglColour[1] = ftglColour[2] = ftglColour[3] = 1.0;
-
- unsigned char redComponent = static_cast<unsigned char>( ftglColour[0] * 255.0f);
- unsigned char greenComponent = static_cast<unsigned char>( ftglColour[1] * 255.0f);
- unsigned char blueComponent = static_cast<unsigned char>( ftglColour[2] * 255.0f);
-
- unsigned char* src = bitmap.buffer;
-
- unsigned char* dest = data + ((destHeight - 1) * destWidth) * 4;
- size_t destStep = destWidth * 4 * 2;
-
- if( ftglColour[3] == 1.0f)
- {
- for( int y = 0; y < srcHeight; ++y)
- {
- for( int x = 0; x < srcWidth; ++x)
- {
- *dest++ = redComponent;
- *dest++ = greenComponent;
- *dest++ = blueComponent;
- *dest++ = *src++;
- }
- dest -= destStep;
- }
- }
- else
- {
- for( int y = 0; y < srcHeight; ++y)
- {
- for( int x = 0; x < srcWidth; ++x)
- {
- *dest++ = redComponent;
- *dest++ = greenComponent;
- *dest++ = blueComponent;
- *dest++ = static_cast<unsigned char>(ftglColour[3] * *src++);
- }
- dest -= destStep;
- }
- }
-
- destHeight = srcHeight;
- }
-
- pos.x = glyph->bitmap_left;
- pos.y = srcHeight - glyph->bitmap_top;
-}
-
-
-FTPixmapGlyph::~FTPixmapGlyph()
-{
- delete [] data;
-}
-
-#include <math.h>
-float FTPixmapGlyph::Render( const FTPoint& pen)
-{
- if( data)
- {
- float dx, dy;
-
- dx= floor( (pen.x + pos.x ) );
- dy= ( (pen.y - pos.y ) );
-
- // Move the glyph origin
- glBitmap( 0, 0, 0.0f, 0.0f, dx, dy, (const GLubyte*)0);
-
- glPixelStorei( GL_UNPACK_ROW_LENGTH, 0);
-
- glDrawPixels( destWidth, destHeight, GL_RGBA, GL_UNSIGNED_BYTE, (const GLvoid*)data);
-
- // Restore the glyph origin
- glBitmap( 0, 0, 0.0f, 0.0f, -dx, -dy, (const GLubyte*)0);
- }
-
- return advance;
-}
diff --git a/extern/bFTGL/src/FTPoint.cpp b/extern/bFTGL/src/FTPoint.cpp
deleted file mode 100644
index e4678bc9564..00000000000
--- a/extern/bFTGL/src/FTPoint.cpp
+++ /dev/null
@@ -1,14 +0,0 @@
-#include "FTPoint.h"
-
-
-bool operator == ( const FTPoint &a, const FTPoint &b)
-{
- return((a.x == b.x) && (a.y == b.y) && (a.z == b.z));
-}
-
-bool operator != ( const FTPoint &a, const FTPoint &b)
-{
- return((a.x != b.x) || (a.y != b.y) || (a.z != b.z));
-}
-
-
diff --git a/extern/bFTGL/src/FTPolyGlyph.cpp b/extern/bFTGL/src/FTPolyGlyph.cpp
deleted file mode 100644
index 7e0d695493c..00000000000
--- a/extern/bFTGL/src/FTPolyGlyph.cpp
+++ /dev/null
@@ -1,62 +0,0 @@
-#include "FTPolyGlyph.h"
-#include "FTVectoriser.h"
-
-
-FTPolyGlyph::FTPolyGlyph( FT_GlyphSlot glyph)
-: FTGlyph( glyph),
- glList(0)
-{
- if( ft_glyph_format_outline != glyph->format)
- {
- err = 0x14; // Invalid_Outline
- return;
- }
-
- FTVectoriser vectoriser( glyph);
-
- if(( vectoriser.ContourCount() < 1) || ( vectoriser.PointCount() < 3))
- {
- return;
- }
-
- vectoriser.MakeMesh( 1.0);
-
- glList = glGenLists( 1);
- glNewList( glList, GL_COMPILE);
-
- const FTMesh* mesh = vectoriser.GetMesh();
- for( unsigned int index = 0; index < mesh->TesselationCount(); ++index)
- {
- const FTTesselation* subMesh = mesh->Tesselation( index);
- unsigned int polyonType = subMesh->PolygonType();
-
- glBegin( polyonType);
- for( unsigned int x = 0; x < subMesh->PointCount(); ++x)
- {
- glVertex3f( subMesh->Point(x).x / 64.0f,
- subMesh->Point(x).y / 64.0f,
- 0.0f);
- }
- glEnd();
- }
- glEndList();
-}
-
-
-FTPolyGlyph::~FTPolyGlyph()
-{
- glDeleteLists( glList, 1);
-}
-
-
-float FTPolyGlyph::Render( const FTPoint& pen)
-{
- if( glList)
- {
- glTranslatef( pen.x, pen.y, 0);
- glCallList( glList);
- glTranslatef( -pen.x, -pen.y, 0);
- }
-
- return advance;
-}
diff --git a/extern/bFTGL/src/FTSize.cpp b/extern/bFTGL/src/FTSize.cpp
deleted file mode 100644
index 5fb8ffba157..00000000000
--- a/extern/bFTGL/src/FTSize.cpp
+++ /dev/null
@@ -1,105 +0,0 @@
-#include "FTSize.h"
-
-
-FTSize::FTSize()
-: ftFace(0),
- ftSize(0),
- size(0),
- err(0)
-{}
-
-
-FTSize::~FTSize()
-{}
-
-
-bool FTSize::CharSize( FT_Face* face, unsigned int point_size, unsigned int x_resolution, unsigned int y_resolution )
-{
- err = FT_Set_Char_Size( *face, 0L, point_size * 64, x_resolution, y_resolution);
-
- if( !err)
- {
- ftFace = face;
- size = point_size;
- ftSize = (*ftFace)->size;
- }
- else
- {
- ftFace = 0;
- size = 0;
- ftSize = 0;
- }
-
- return !err;
-}
-
-
-unsigned int FTSize::CharSize() const
-{
- return size;
-}
-
-
-float FTSize::Ascender() const
-{
- return ftSize == 0 ? 0.0f : static_cast<float>( ftSize->metrics.ascender) / 64.0f;
-}
-
-
-float FTSize::Descender() const
-{
- return ftSize == 0 ? 0.0f : static_cast<float>( ftSize->metrics.descender) / 64.0f;
-}
-
-
-float FTSize::Height() const
-{
- if( 0 == ftSize)
- {
- return 0.0f;
- }
-
- if( FT_IS_SCALABLE((*ftFace)))
- {
- return ( (*ftFace)->bbox.yMax - (*ftFace)->bbox.yMin) * ( (float)ftSize->metrics.y_ppem / (float)(*ftFace)->units_per_EM);
- }
- else
- {
- return static_cast<float>( ftSize->metrics.height) / 64.0f;
- }
-}
-
-
-float FTSize::Width() const
-{
- if( 0 == ftSize)
- {
- return 0.0f;
- }
-
- if( FT_IS_SCALABLE((*ftFace)))
- {
- return ( (*ftFace)->bbox.xMax - (*ftFace)->bbox.xMin) * ( static_cast<float>(ftSize->metrics.x_ppem) / static_cast<float>((*ftFace)->units_per_EM));
- }
- else
- {
- return static_cast<float>( ftSize->metrics.max_advance) / 64.0f;
- }
-}
-
-
-float FTSize::Underline() const
-{
- return 0.0f;
-}
-
-unsigned int FTSize::XPixelsPerEm() const
-{
- return ftSize == 0 ? 0 : ftSize->metrics.x_ppem;
-}
-
-unsigned int FTSize::YPixelsPerEm() const
-{
- return ftSize == 0 ? 0 : ftSize->metrics.y_ppem;
-}
-
diff --git a/extern/bFTGL/src/FTTextureGlyph.cpp b/extern/bFTGL/src/FTTextureGlyph.cpp
deleted file mode 100644
index b8267dcce89..00000000000
--- a/extern/bFTGL/src/FTTextureGlyph.cpp
+++ /dev/null
@@ -1,87 +0,0 @@
-#include "FTTextureGlyph.h"
-
-
-FTTextureGlyph::FTTextureGlyph( FT_GlyphSlot glyph, int id, int xOffset, int yOffset, GLsizei width, GLsizei height)
-: FTGlyph( glyph),
- destWidth(0),
- destHeight(0),
- glTextureID(id),
- activeTextureID(0)
-{
- err = FT_Render_Glyph( glyph, FT_RENDER_MODE_NORMAL);
- if( err || glyph->format != ft_glyph_format_bitmap)
- {
- return;
- }
-
- FT_Bitmap bitmap = glyph->bitmap;
-
- destWidth = bitmap.width;
- destHeight = bitmap.rows;
-
- if( destWidth && destHeight)
- {
- glPushClientAttrib( GL_CLIENT_PIXEL_STORE_BIT);
- glPixelStorei( GL_UNPACK_LSB_FIRST, GL_FALSE);
- glPixelStorei( GL_UNPACK_ROW_LENGTH, 0);
- glPixelStorei( GL_UNPACK_ALIGNMENT, 1);
-
- glBindTexture( GL_TEXTURE_2D, glTextureID);
- glTexSubImage2D( GL_TEXTURE_2D, 0, xOffset, yOffset, destWidth, destHeight, GL_ALPHA, GL_UNSIGNED_BYTE, bitmap.buffer);
-
- glPopClientAttrib();
- }
-
-
-// 0
-// +----+
-// | |
-// | |
-// | |
-// +----+
-// 1
-
- uv[0].x = static_cast<float>(xOffset) / static_cast<float>(width);
- uv[0].y = static_cast<float>(yOffset) / static_cast<float>(height);
- uv[1].x = static_cast<float>( xOffset + destWidth) / static_cast<float>(width);
- uv[1].y = static_cast<float>( yOffset + destHeight) / static_cast<float>(height);
-
- pos.x = glyph->bitmap_left;
- pos.y = glyph->bitmap_top;
-}
-
-
-FTTextureGlyph::~FTTextureGlyph()
-{}
-
-#include <math.h>
-
-float FTTextureGlyph::Render( const FTPoint& pen)
-{
- float dx;
-
- glGetIntegerv( GL_TEXTURE_2D_BINDING_EXT, &activeTextureID);
- if( activeTextureID != glTextureID)
- {
- glBindTexture( GL_TEXTURE_2D, (GLuint)glTextureID);
- }
-
- dx= floor( (pen.x + pos.x ) );
-
- glBegin( GL_QUADS);
- glTexCoord2f( uv[0].x, uv[0].y);
- glVertex2f( dx, pen.y + pos.y);
-
- glTexCoord2f( uv[0].x, uv[1].y);
- glVertex2f( dx, pen.y + pos.y - destHeight);
-
- glTexCoord2f( uv[1].x, uv[1].y);
- glVertex2f( dx + destWidth, pen.y + pos.y - destHeight);
-
- glTexCoord2f( uv[1].x, uv[0].y);
- glVertex2f( dx + destWidth, pen.y + pos.y);
- glEnd();
-
- return advance;
-}
-
diff --git a/extern/bFTGL/src/FTVectoriser.cpp b/extern/bFTGL/src/FTVectoriser.cpp
deleted file mode 100644
index 82dcb0c0f51..00000000000
--- a/extern/bFTGL/src/FTVectoriser.cpp
+++ /dev/null
@@ -1,229 +0,0 @@
-#include "FTVectoriser.h"
-#include "FTGL.h"
-
-#ifndef CALLBACK
-#define CALLBACK
-#endif
-
-#if defined(__APPLE_CC__)
- #if __APPLE_CC__ >= 5465
- typedef GLvoid (*GLUTesselatorFunction)();
- #else
- typedef GLvoid (*GLUTesselatorFunction)(...);
- #endif
-#elif defined( __mips ) || defined( __linux__ ) || defined( __FreeBSD__ ) || defined( __OpenBSD__ ) || defined( __sun ) || defined (__CYGWIN__)
- typedef GLvoid (*GLUTesselatorFunction)();
-#elif defined ( WIN32)
- typedef GLvoid (CALLBACK *GLUTesselatorFunction)( );
-#else
- #error "Error - need to define type GLUTesselatorFunction for this platform/compiler"
-#endif
-
-
-void CALLBACK ftglError( GLenum errCode, FTMesh* mesh)
-{
- mesh->Error( errCode);
-}
-
-
-void CALLBACK ftglVertex( void* data, FTMesh* mesh)
-{
- FTGL_DOUBLE* vertex = static_cast<FTGL_DOUBLE*>(data);
- mesh->AddPoint( vertex[0], vertex[1], vertex[2]);
-}
-
-
-void CALLBACK ftglCombine( FTGL_DOUBLE coords[3], void* vertex_data[4], GLfloat weight[4], void** outData, FTMesh* mesh)
-{
- FTGL_DOUBLE* vertex = static_cast<FTGL_DOUBLE*>(coords);
- *outData = mesh->Combine( vertex[0], vertex[1], vertex[2]);
-}
-
-
-void CALLBACK ftglBegin( GLenum type, FTMesh* mesh)
-{
- mesh->Begin( type);
-}
-
-
-void CALLBACK ftglEnd( FTMesh* mesh)
-{
- mesh->End();
-}
-
-
-FTMesh::FTMesh()
-: currentTesselation(0),
- err(0)
-{
- tesselationList.reserve( 16);
-}
-
-
-FTMesh::~FTMesh()
-{
- for( size_t t = 0; t < tesselationList.size(); ++t)
- {
- delete tesselationList[t];
- }
-
- tesselationList.clear();
-}
-
-
-void FTMesh::AddPoint( const FTGL_DOUBLE x, const FTGL_DOUBLE y, const FTGL_DOUBLE z)
-{
- currentTesselation->AddPoint( x, y, z);
-}
-
-
-FTGL_DOUBLE* FTMesh::Combine( const FTGL_DOUBLE x, const FTGL_DOUBLE y, const FTGL_DOUBLE z)
-{
- tempPointList.push_back( FTPoint( x, y,z));
- return &tempPointList.back().x;
-}
-
-
-void FTMesh::Begin( GLenum meshType)
-{
- currentTesselation = new FTTesselation( meshType);
-}
-
-
-void FTMesh::End()
-{
- tesselationList.push_back( currentTesselation);
-}
-
-
-const FTTesselation* const FTMesh::Tesselation( unsigned int index) const
-{
- return ( index < tesselationList.size()) ? tesselationList[index] : NULL;
-}
-
-
-FTVectoriser::FTVectoriser( const FT_GlyphSlot glyph)
-: contourList(0),
- mesh(0),
- ftContourCount(0),
- contourFlag(0)
-{
- if( glyph)
- {
- outline = glyph->outline;
-
- ftContourCount = outline.n_contours;;
- contourList = 0;
- contourFlag = outline.flags;
-
- ProcessContours();
- }
-}
-
-
-FTVectoriser::~FTVectoriser()
-{
- for( size_t c = 0; c < ContourCount(); ++c)
- {
- delete contourList[c];
- }
-
- delete [] contourList;
- delete mesh;
-}
-
-
-void FTVectoriser::ProcessContours()
-{
- short contourLength = 0;
- short startIndex = 0;
- short endIndex = 0;
-
- contourList = new FTContour*[ftContourCount];
-
- for( short contourIndex = 0; contourIndex < ftContourCount; ++contourIndex)
- {
- FT_Vector* pointList = &outline.points[startIndex];
- char* tagList = &outline.tags[startIndex];
-
- endIndex = outline.contours[contourIndex];
- contourLength = ( endIndex - startIndex) + 1;
-
- FTContour* contour = new FTContour( pointList, tagList, contourLength);
-
- contourList[contourIndex] = contour;
-
- startIndex = endIndex + 1;
- }
-}
-
-
-size_t FTVectoriser::PointCount()
-{
- size_t s = 0;
- for( size_t c = 0; c < ContourCount(); ++c)
- {
- s += contourList[c]->PointCount();
- }
-
- return s;
-}
-
-
-const FTContour* const FTVectoriser::Contour( unsigned int index) const
-{
- return ( index < ContourCount()) ? contourList[index] : NULL;
-}
-
-
-void FTVectoriser::MakeMesh( FTGL_DOUBLE zNormal)
-{
- if( mesh)
- {
- delete mesh;
- }
-
- mesh = new FTMesh;
-
- GLUtesselator* tobj = gluNewTess();
-
- gluTessCallback( tobj, GLU_TESS_BEGIN_DATA, (GLUTesselatorFunction)ftglBegin);
- gluTessCallback( tobj, GLU_TESS_VERTEX_DATA, (GLUTesselatorFunction)ftglVertex);
- gluTessCallback( tobj, GLU_TESS_COMBINE_DATA, (GLUTesselatorFunction)ftglCombine);
- gluTessCallback( tobj, GLU_TESS_END_DATA, (GLUTesselatorFunction)ftglEnd);
- gluTessCallback( tobj, GLU_TESS_ERROR_DATA, (GLUTesselatorFunction)ftglError);
-
- if( contourFlag & ft_outline_even_odd_fill) // ft_outline_reverse_fill
- {
- gluTessProperty( tobj, GLU_TESS_WINDING_RULE, GLU_TESS_WINDING_ODD);
- }
- else
- {
- gluTessProperty( tobj, GLU_TESS_WINDING_RULE, GLU_TESS_WINDING_NONZERO);
- }
-
-
- gluTessProperty( tobj, GLU_TESS_TOLERANCE, 0);
- gluTessNormal( tobj, 0.0f, 0.0f, zNormal);
- gluTessBeginPolygon( tobj, mesh);
-
- for( size_t c = 0; c < ContourCount(); ++c)
- {
- const FTContour* contour = contourList[c];
-
- gluTessBeginContour( tobj);
-
- for( size_t p = 0; p < contour->PointCount(); ++p)
- {
- FTGL_DOUBLE* d = const_cast<FTGL_DOUBLE*>(&contour->Point(p).x);
- gluTessVertex( tobj, d, d);
- }
-
- gluTessEndContour( tobj);
- }
-
- gluTessEndPolygon( tobj);
-
- gluDeleteTess( tobj);
-}
-
diff --git a/extern/bFTGL/src/Makefile b/extern/bFTGL/src/Makefile
deleted file mode 100644
index d91bcb2559d..00000000000
--- a/extern/bFTGL/src/Makefile
+++ /dev/null
@@ -1,60 +0,0 @@
-# -*- mode: gnumakefile; tab-width: 8; indent-tabs-mode: t; -*-
-# vim: tabstop=8
-#
-# $Id$
-#
-# ***** BEGIN GPL LICENSE BLOCK *****
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
-# All rights reserved.
-#
-# The Original Code is: all of this file.
-#
-# Contributor(s): GSR
-#
-# ***** END GPL LICENSE BLOCK *****
-#
-#
-
-LIBNAME = ftgl
-DIR = $(OCGDIR)/extern/$(LIBNAME)
-
-CCFLAGS += $(LEVEL_1_CPP_WARNINGS)
-
-CSRCS =
-CCSRCS = FTBitmapGlyph.cpp FTCharmap.cpp FTContour.cpp FTExtrdGlyph.cpp \
- FTFace.cpp FTFont.cpp FTGLBitmapFont.cpp FTGLExtrdFont.cpp \
- FTGLOutlineFont.cpp FTGLPixmapFont.cpp FTGLPolygonFont.cpp \
- FTGLTextureFont.cpp FTGlyph.cpp FTGlyphContainer.cpp FTLibrary.cpp \
- FTOutlineGlyph.cpp FTPixmapGlyph.cpp FTPoint.cpp FTPolyGlyph.cpp \
- FTSize.cpp FTTextureGlyph.cpp FTVectoriser.cpp
-
-include nan_compile.mk
-CPPFLAGS += -I../include
-CPPFLAGS += -I$(NAN_FREETYPE)/include -I$(NAN_FREETYPE)/include/freetype2
-CPPFLAGS += -I$(OPENGL_HEADERS)
-
-install: $(ALL_OR_DEBUG)
- @[ -d $(NAN_FTGL) ] || mkdir -p $(NAN_FTGL)
- @[ -d $(NAN_FTGL)/include ] || mkdir -p $(NAN_FTGL)/include
- @[ -d $(NAN_FTGL)/lib/$(DEBUG_DIR) ] || mkdir -p $(NAN_FTGL)/lib/$(DEBUG_DIR)
- @$(NANBLENDERHOME)/intern/tools/cpifdiff.sh $(DIR)/$(DEBUG_DIR)lib$(LIBNAME).a $(NAN_FTGL)/lib/$(DEBUG_DIR)
-ifeq ($(OS),darwin)
- ranlib $(NAN_FTGL)/lib/$(DEBUG_DIR)lib$(LIBNAME).a
-endif
- @$(NANBLENDERHOME)/intern/tools/cpifdiff.sh ../include/*.h $(NAN_FTGL)/include/
-
diff --git a/extern/bFTGL/win32_vcpp/README_WIN32.txt b/extern/bFTGL/win32_vcpp/README_WIN32.txt
deleted file mode 100644
index bc92bbb9591..00000000000
--- a/extern/bFTGL/win32_vcpp/README_WIN32.txt
+++ /dev/null
@@ -1,206 +0,0 @@
-FTGL 1.31
-
-NOTES FOR COMPILING ON WINDOWS
-
-14 Feb 2002
-
-Ellers, ellers@iinet.net.au
-
-
-
-
-
-SUPPORTED COMPILERS
-
-
-
-I have rebuilt the FTGL project files for Visual C++ (version 6). There are
-
-presently no other compilers or environments supported but feel free to
-
-contribute them.
-
-
-
-
-
-QUICK GUIDE: COMPILING FTGL
-
-
-
- - Start up MSVC++ with ftgl.dsw.
-
- - Tell MSVC++ where FreeType is. You'll need to do something like this:
-
-
-
- * select Project>Settings
-
- * select ftgl_static (for a start)
-
- * select "All Configurations"
-
- * go to the tab C++ > PreProcessor
-
- * Set additional include directories appropriately. For me it is:
-
- D:\cots\freetype-2.0.5\include
-
- * repeat for all configurations of ftgl_dll
-
-
-
-
-
-QUICK GUIDE: COMPILING/RUNNING SUPPLIED DEMO PROGRAM
-
-
-
- - The program expects the first argument to be the name of a truetype file.
-
- I copied timesbi.ttf from the windows directory to C:\TEMP and then edit
-
- the settings of the project:
-
-
-
- * select Project>Settings
-
- * select Demo project
-
- * select panel Debug>General
-
- * set Program Arguments to be "C:\TEMP\timesbi.ttf"
-
-
-
-
-
-QUICK GUIDE: COMPILING YOUR PROGRAM TO USE FTGL
-
-
-
- - Choose dynamic or static library linkage
-
- * if you want to link to a static FTGL library ensure that
-
- FTGL_LIBRARY_STATIC is defined in the preprocessor section
-
-
-
-
-
-CONFIGURATION / CODE GENERATION / C LIBRARIES
-
-
-
-FTGL can be built in various configurations (inspired by Freetype and libpng):
-
-
-
- - static library (.lib)
-
- - dynamic library (.dll)
-
-
-
-MSVC++ requires selection of "code generation" option, which seems to be
-
-mostly to do with which version of the Standard C library is linked with the
-
-library.
-
-
-
-The following modes are supported:
-
-
-
- - static/dynamic
-
- - single threaded (ST) or multithreaded (MT)
-
- NOTE: the multithreaded DLL (MD) mode was NOT included, as freetype itself
-
- doesn't support that mode so I figure there's no point yet.
-
- - debug/release (debug has _d suffix)
-
-
-
-So the static multithreaded release library is:
-
-
-
- ftgl_static_MT.lib
-
-
-
-The same library built in DEBUG mode:
-
-
-
- ftgl_static_MT_d.lib
-
-
-
-If you're not sure which one is appropriate (and if you're a novice don't
-
-been too put off...) start with making the decision about debug or release.
-
-This should be easy because if you're building the debug version of your
-
-app its probably a good idea to link with the debug version of FTGL (but
-
-not compulsory). Once thats done, you may get errors like:
-
-
-
- LIBCMTD.lib(crt0init.obj) : warning LNK4098: defaultlib "libcmt.lib" conflicts with use of other libs; use /NODEFAULTLIB:library
-
-
-
-This will happen, for example, when you link a glut app with an FTGL library
-
-compiled with different codegen options than the GLUT library.
-
-
-
-MSVC++ "sort of"
-
-requires that all libs be linked with the same codegen option. GLUT is built
-
-in XXX mode, so if you're linking with GLUT, you can get rid of the warning
-
-by linking with the XXX version of FTGL. The various versions are particularly
-
-useful if you're doing std C stuff, like printf etc.
-
-
-
-
-
-
-
-FAQ
-
-
-
-Q: "But... do I HAVE to use all these DIFFERENT build modes, like multi-
-
- threaded, debug single threaded, etc?"
-
-
-
-A: No. Sometimes library makers only generate one style anyway. It depends
-
- on your needs. Unless you're linking with standard C stuff (e.g. printf)
-
- then it probably won't make a great deal of difference. If you get
-
- warnings about "default lib libcmt.lib conflicts" etc, then you can make
-
- use of the different libraries.
-
-
-
diff --git a/extern/bFTGL/win32_vcpp/ftgl.dsw b/extern/bFTGL/win32_vcpp/ftgl.dsw
deleted file mode 100644
index 17b8fbe6f12..00000000000
--- a/extern/bFTGL/win32_vcpp/ftgl.dsw
+++ /dev/null
@@ -1,92 +0,0 @@
-Microsoft Developer Studio Workspace File, Format Version 6.00
-# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
-
-###############################################################################
-
-Project: "ftgl_demo"=".\ftgl_demo\ftgl_demo.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name ftgl_dll
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name ftgl_static_lib
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "ftgl_demo_2"=".\ftgl_demo\ftgl_demo_2.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name ftgl_dll
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name ftgl_static_lib
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "ftgl_dll"=".\ftgl_dll\ftgl_dll.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "ftgl_static_lib"=".\ftgl_static_lib\ftgl_static_lib.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "unit_tests"=".\unit_tests\unit_tests.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name ftgl_static_lib
- End Project Dependency
-}}}
-
-###############################################################################
-
-Global:
-
-Package=<5>
-{{{
-}}}
-
-Package=<3>
-{{{
-}}}
-
-###############################################################################
-
diff --git a/extern/bFTGL/win32_vcpp/ftgl_dll/ftgl_dll.dsp b/extern/bFTGL/win32_vcpp/ftgl_dll/ftgl_dll.dsp
deleted file mode 100644
index 7e297df9111..00000000000
--- a/extern/bFTGL/win32_vcpp/ftgl_dll/ftgl_dll.dsp
+++ /dev/null
@@ -1,357 +0,0 @@
-# Microsoft Developer Studio Project File - Name="ftgl_dll" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=ftgl_dll - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "ftgl_dll.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "ftgl_dll.mak" CFG="ftgl_dll - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "ftgl_dll - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "ftgl_dll - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "ftgl_dll - Win32 Release MT" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "ftgl_dll - Win32 Debug MT" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "ftgl_dll - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_ST"
-# PROP BASE Intermediate_Dir "Release_ST"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "../Build"
-# PROP Intermediate_Dir "Release_ST"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir "../Build"
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "FTGL_DLL_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "D:\cots\freetype-2.0.5\include" /I "..\..\include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "FTGL_LIBRARY" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib opengl32.lib glu32.lib freetype204.lib /nologo /dll /machine:I386 /out:"../Build/ftgl_dynamic_MT.dll" /libpath:"D:\cots\freetype-2.0.5\objs"
-
-!ELSEIF "$(CFG)" == "ftgl_dll - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_ST"
-# PROP BASE Intermediate_Dir "Debug_ST"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "../Build"
-# PROP Intermediate_Dir "Debug_ST"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir "../Build"
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "FTGL_DLL_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "D:\cots\freetype-2.0.5\include" /I "..\..\include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "FTGL_LIBRARY" /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib opengl32.lib glu32.lib freetype204_D.lib /nologo /dll /pdb:"Debug_ST/ftgl_dynamic_ST_d.pdb" /debug /machine:I386 /out:"../Build/ftgl_dynamic_MT_d.dll" /pdbtype:sept /libpath:"D:\cots\freetype-2.0.5\objs"
-# SUBTRACT LINK32 /pdb:none
-
-!ELSEIF "$(CFG)" == "ftgl_dll - Win32 Release MT"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_MT"
-# PROP BASE Intermediate_Dir "Release_MT"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "../Build"
-# PROP Intermediate_Dir "Release_MT"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir "../Build"
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "FTGL_DLL_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "D:\cots\freetype-2.0.5\include" /I "..\..\include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "FTGL_LIBRARY" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib opengl32.lib glu32.lib freetype204MT.lib /nologo /dll /machine:I386 /out:"../Build/ftgl_dynamic_MTD.dll" /libpath:"D:\cots\freetype-2.0.5\objs"
-
-!ELSEIF "$(CFG)" == "ftgl_dll - Win32 Debug MT"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_MT"
-# PROP BASE Intermediate_Dir "Debug_MT"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "../Build"
-# PROP Intermediate_Dir "Debug_MT"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir "../Build"
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "FTGL_DLL_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "D:\cots\freetype-2.0.5\include" /I "..\..\include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "FTGL_LIBRARY" /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib opengl32.lib glu32.lib freetype204MT_D.lib /nologo /dll /pdb:"Debug_ST/ftgl_dynamic_MT_d.pdb" /debug /machine:I386 /out:"../Build/ftgl_dynamic_MTD_d.dll" /pdbtype:sept /libpath:"D:\cots\freetype-2.0.5\objs"
-# SUBTRACT LINK32 /pdb:none
-
-!ENDIF
-
-# Begin Target
-
-# Name "ftgl_dll - Win32 Release"
-# Name "ftgl_dll - Win32 Debug"
-# Name "ftgl_dll - Win32 Release MT"
-# Name "ftgl_dll - Win32 Debug MT"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\src\FTBitmapGlyph.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\FTCharmap.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\FTContour.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\FTExtrdGlyph.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\FTFace.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\FTFont.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\FTGLBitmapFont.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\FTGLExtrdFont.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\FTGLOutlineFont.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\FTGLPixmapFont.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\FTGLPolygonFont.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\FTGLTextureFont.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\FTGlyph.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\FTGlyphContainer.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\FTLibrary.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\FTOutlineGlyph.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\FTPixmapGlyph.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\FTPoint.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\FTPolyGlyph.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\FTSize.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\FTTextureGlyph.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\FTVectoriser.cpp
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\include\FTBBox.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\FTBitmapGlyph.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\FTCharmap.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\FTCharToGlyphIndexMap.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\FTContour.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\FTExtrdGlyph.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\FTFace.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\FTFont.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\FTGL.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\FTGLBitmapFont.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\FTGLExtrdFont.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\FTGLOutlineFont.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\FTGLPixmapFont.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\FTGLPolygonFont.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\FTGLTextureFont.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\FTGlyph.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\FTGlyphContainer.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\FTLibrary.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\FTList.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\FTOutlineGlyph.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\FTPixmapGlyph.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\FTPoint.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\FTPolyGlyph.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\FTSize.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\FTTextureGlyph.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\FTVector.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\FTVectoriser.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
diff --git a/extern/bFTGL/win32_vcpp/ftgl_static_lib/ftgl_static_lib.dsp b/extern/bFTGL/win32_vcpp/ftgl_static_lib/ftgl_static_lib.dsp
deleted file mode 100644
index bc2c77cb0b6..00000000000
--- a/extern/bFTGL/win32_vcpp/ftgl_static_lib/ftgl_static_lib.dsp
+++ /dev/null
@@ -1,342 +0,0 @@
-# Microsoft Developer Studio Project File - Name="ftgl_static_lib" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=ftgl_static_lib - Win32 Debug MT
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "ftgl_static_lib.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "ftgl_static_lib.mak" CFG="ftgl_static_lib - Win32 Debug MT"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "ftgl_static_lib - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "ftgl_static_lib - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "ftgl_static_lib - Win32 Debug MT" (based on "Win32 (x86) Static Library")
-!MESSAGE "ftgl_static_lib - Win32 Release MT" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "ftgl_static_lib - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_ST"
-# PROP BASE Intermediate_Dir "Release_ST"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_ST"
-# PROP Intermediate_Dir "Release_ST"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\..\lib\windows\freetype\include" /I "..\..\include" /I "..\..\..\..\..\lib\windows\freetype\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FTGL_LIBRARY_STATIC" /YX /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\Build\ftgl_static_ST.lib"
-# Begin Special Build Tool
-SOURCE="$(InputPath)"
-PostBuild_Cmds=ECHO Copying lib to lib\windows\ftgl\lib XCOPY /Y ..\Build\*lib ..\..\..\..\..\lib\windows\ftgl\lib
-# End Special Build Tool
-
-!ELSEIF "$(CFG)" == "ftgl_static_lib - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_ST"
-# PROP BASE Intermediate_Dir "Debug_ST"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_ST"
-# PROP Intermediate_Dir "Debug_ST"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "D:\cots\freetype-2.0.5\include" /I "..\..\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FTGL_LIBRARY_STATIC" /YX /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\Build\ftgl_static_MT_d.lib"
-
-!ELSEIF "$(CFG)" == "ftgl_static_lib - Win32 Debug MT"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_MT"
-# PROP BASE Intermediate_Dir "Debug_MT"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_MT"
-# PROP Intermediate_Dir "Debug_MT"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "D:\cots\freetype-2.0.5\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FTGL_LIBRARY_STATIC" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "D:\cots\freetype-2.0.5\include" /I "..\..\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FTGL_LIBRARY_STATIC" /YX /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\Build\ftgl_static_MTD_d.lib"
-
-!ELSEIF "$(CFG)" == "ftgl_static_lib - Win32 Release MT"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_MT"
-# PROP BASE Intermediate_Dir "Release_MT"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_MT"
-# PROP Intermediate_Dir "Release_MT"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FTGL_LIBRARY_STATIC" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "D:\cots\freetype-2.0.5\include" /I "..\..\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FTGL_LIBRARY_STATIC" /YX /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\Build\ftgl_static_MTD.lib"
-
-!ENDIF
-
-# Begin Target
-
-# Name "ftgl_static_lib - Win32 Release"
-# Name "ftgl_static_lib - Win32 Debug"
-# Name "ftgl_static_lib - Win32 Debug MT"
-# Name "ftgl_static_lib - Win32 Release MT"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\src\FTBitmapGlyph.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\FTCharmap.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\FTContour.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\FTExtrdGlyph.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\FTFace.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\FTFont.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\FTGLBitmapFont.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\FTGLExtrdFont.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\FTGLOutlineFont.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\FTGLPixmapFont.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\FTGLPolygonFont.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\FTGLTextureFont.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\FTGlyph.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\FTGlyphContainer.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\FTLibrary.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\FTOutlineGlyph.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\FTPixmapGlyph.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\FTPoint.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\FTPolyGlyph.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\FTSize.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\FTTextureGlyph.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\src\FTVectoriser.cpp
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\include\FTBBox.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\FTBitmapGlyph.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\FTCharmap.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\FTCharToGlyphIndexMap.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\FTContour.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\FTExtrdGlyph.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\FTFace.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\FTFont.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\FTGL.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\FTGLBitmapFont.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\FTGLExtrdFont.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\FTGLOutlineFont.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\FTGLPixmapFont.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\FTGLPolygonFont.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\FTGLTextureFont.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\FTGlyph.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\FTGlyphContainer.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\FTLibrary.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\FTList.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\FTOutlineGlyph.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\FTPixmapGlyph.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\FTPoint.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\FTPolyGlyph.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\FTSize.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\FTTextureGlyph.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\FTVector.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\FTVectoriser.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/extern/bFTGL/win32_vcpp/unit_tests/unit_tests.dsp b/extern/bFTGL/win32_vcpp/unit_tests/unit_tests.dsp
deleted file mode 100644
index f68dfe9b2d8..00000000000
--- a/extern/bFTGL/win32_vcpp/unit_tests/unit_tests.dsp
+++ /dev/null
@@ -1,168 +0,0 @@
-# Microsoft Developer Studio Project File - Name="unit_tests" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=unit_tests - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "unit_tests.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "unit_tests.mak" CFG="unit_tests - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "unit_tests - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "unit_tests - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "unit_tests - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Yu"stdafx.h" /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "$(MIC_COTS_CPPUNIT_DIR)/include" /I "../../include" /I "../../extras" /I "D:\cots\freetype-2.0.5\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "FTGL_LIBRARY_STATIC" /FD /c
-# SUBTRACT CPP /YX /Yc /Yu
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 freetype204MT.lib ftgl_static_MT.lib cppunit.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib opengl32.lib glu32.lib /nologo /subsystem:console /machine:I386 /libpath:"..\Build" /libpath:"D:\cots\freetype-2.0.5\objs" /libpath:"D:\cots\cppunit-1.9.8\lib"
-
-!ELSEIF "$(CFG)" == "unit_tests - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Yu"stdafx.h" /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "$(MIC_COTS_CPPUNIT_DIR)/include" /I "../../include" /I "../../extras" /I "D:\cots\freetype-2.0.5\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "FTGL_LIBRARY_STATIC" /FD /GZ /c
-# SUBTRACT CPP /YX /Yc /Yu
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 freetype204MT_D.lib ftgl_static_MT_d.lib cppunitd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib opengl32.lib glu32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\Build" /libpath:"D:\cots\freetype-2.0.5\objs" /libpath:"D:\cots\cppunit-1.9.8\lib"
-
-!ENDIF
-
-# Begin Target
-
-# Name "unit_tests - Win32 Release"
-# Name "unit_tests - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE="..\..\test\FTBBox-Test.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\test\FTCharmap-Test.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\test\FTContour-Test.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\test\FTFace-Test.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\test\FTFont-Test.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\test\FTGlyphContainer-Test.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\test\FTLibrary-Test.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\test\FTList-Test.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\test\FTMesh-Test.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\test\FTPoint-Test.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\test\FTSize-Test.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\test\FTTesselation-Test.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\test\FTVector-Test.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\test\FTVectoriser-Test.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\test\HPGCalc_afm.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\test\HPGCalc_pfb.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\test\TestMain.cpp
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\test\Fontdefs.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/extern/bullet2/make/msvc_9_0/Bullet.vcproj b/extern/bullet2/make/msvc_9_0/Bullet.vcproj
index 6ec064913a5..9c8f9668f56 100644
--- a/extern/bullet2/make/msvc_9_0/Bullet.vcproj
+++ b/extern/bullet2/make/msvc_9_0/Bullet.vcproj
@@ -45,7 +45,7 @@
Optimization="0"
AdditionalIncludeDirectories="..\..\src"
PreprocessorDefinitions="_DEBUG;_LIB;WIN32;BUM_INLINED;USE_ALGEBRAIC"
- ExceptionHandling="0"
+ ExceptionHandling="1"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
UsePrecompiledHeader="0"
@@ -445,6 +445,10 @@
Name="Dynamics"
>
<File
+ RelativePath="..\..\src\BulletDynamics\Dynamics\btActionInterface.h"
+ >
+ </File>
+ <File
RelativePath="..\..\src\BulletDynamics\Dynamics\btContinuousDynamicsWorld.cpp"
>
</File>
diff --git a/extern/bullet2/src/BulletCollision/NarrowPhaseCollision/btPersistentManifold.cpp b/extern/bullet2/src/BulletCollision/NarrowPhaseCollision/btPersistentManifold.cpp
index d4e29882d37..eecf927ee10 100644
--- a/extern/bullet2/src/BulletCollision/NarrowPhaseCollision/btPersistentManifold.cpp
+++ b/extern/bullet2/src/BulletCollision/NarrowPhaseCollision/btPersistentManifold.cpp
@@ -172,6 +172,9 @@ int btPersistentManifold::addManifoldPoint(const btManifoldPoint& newPoint)
#if MANIFOLD_CACHE_SIZE >= 4
//sort cache so best points come first, based on area
insertIndex = sortCachedPoints(newPoint);
+
+ if (insertIndex<0)
+ insertIndex=0;
#else
insertIndex = 0;
#endif
@@ -180,11 +183,7 @@ int btPersistentManifold::addManifoldPoint(const btManifoldPoint& newPoint)
} else
{
m_cachedPoints++;
-
-
}
- if (insertIndex<0)
- insertIndex=0;
btAssert(m_pointCache[insertIndex].m_userPersistentData==0);
m_pointCache[insertIndex] = newPoint;
diff --git a/extern/bullet2/src/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.cpp b/extern/bullet2/src/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.cpp
index ea2e0ad2a2b..b6231a8fda6 100644
--- a/extern/bullet2/src/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.cpp
+++ b/extern/bullet2/src/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.cpp
@@ -350,12 +350,13 @@ int btDiscreteDynamicsWorld::stepSimulation( btScalar timeStep,int maxSubSteps,
for (int i=0;i<clampedSimulationSteps;i++)
{
internalSingleStepSimulation(fixedTimeStep);
- synchronizeMotionStates();
+ //for Blender, no need to synchronize here, it is done in blender anyway
+ //synchronizeMotionStates();
}
}
-
- synchronizeMotionStates();
+ //else
+ // synchronizeMotionStates();
clearForces();
@@ -725,9 +726,13 @@ void btDiscreteDynamicsWorld::calculateSimulationIslands()
{
if (colObj0->isActive() || colObj1->isActive())
{
-
- getSimulationIslandManager()->getUnionFind().unite((colObj0)->getIslandTag(),
- (colObj1)->getIslandTag());
+ if ((colObj0)->getIslandTag() != -1 && (colObj1)->getIslandTag() != -1)
+ {
+
+ getSimulationIslandManager()->getUnionFind().unite((colObj0)->getIslandTag(),
+ (colObj1)->getIslandTag());
+ }
+
}
}
}
diff --git a/extern/libopenjpeg/opj_includes.h b/extern/libopenjpeg/opj_includes.h
index 80d43df990f..3464cfcf9ed 100644
--- a/extern/libopenjpeg/opj_includes.h
+++ b/extern/libopenjpeg/opj_includes.h
@@ -88,6 +88,12 @@ Most compilers implement their own version of this keyword ...
/* MSVC does not have lrintf */
#ifdef _MSC_VER
+#ifdef _M_X64
+#include <emmintrin.h>
+static INLINE long lrintf(float f) {
+ return _mm_cvtss_si32(_mm_load_ss(&f));
+}
+#else
static INLINE long lrintf(float f){
int i;
@@ -99,6 +105,7 @@ static INLINE long lrintf(float f){
return i;
}
#endif
+#endif
#include "j2k_lib.h"
#include "opj_malloc.h"
diff --git a/extern/make/msvc_9_0/build_install_all.vcproj b/extern/make/msvc_9_0/build_install_all.vcproj
index 523b1c5d0a3..7909bbe63a0 100644
--- a/extern/make/msvc_9_0/build_install_all.vcproj
+++ b/extern/make/msvc_9_0/build_install_all.vcproj
@@ -23,7 +23,7 @@
ConfigurationType="10"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
CharacterSet="2"
- ManagedExtensions="4"
+ ManagedExtensions="0"
>
<Tool
Name="VCPreBuildEventTool"
diff --git a/intern/CMakeLists.txt b/intern/CMakeLists.txt
index 81ef8c121d1..1c0d795448c 100644
--- a/intern/CMakeLists.txt
+++ b/intern/CMakeLists.txt
@@ -24,7 +24,7 @@
#
# ***** END GPL LICENSE BLOCK *****
-SUBDIRS(SoundSystem string ghost guardedalloc bmfont moto container memutil decimation iksolver boolop opennl)
+SUBDIRS(SoundSystem string ghost guardedalloc moto container memutil decimation iksolver boolop opennl)
IF(WITH_ELBEEM)
SUBDIRS(elbeem)
diff --git a/intern/Makefile b/intern/Makefile
index 357e28309e3..995dc56c7d3 100644
--- a/intern/Makefile
+++ b/intern/Makefile
@@ -31,7 +31,7 @@ SOURCEDIR = intern
# include nan_subdirs.mk
-ALLDIRS = string ghost guardedalloc bmfont moto container memutil
+ALLDIRS = string ghost guardedalloc moto container memutil
ALLDIRS += decimation iksolver bsp SoundSystem opennl elbeem boolop
all::
diff --git a/intern/SConscript b/intern/SConscript
index 82c7739bf42..bb8525d5ce5 100644
--- a/intern/SConscript
+++ b/intern/SConscript
@@ -5,7 +5,6 @@ SConscript(['SoundSystem/SConscript',
'string/SConscript',
'ghost/SConscript',
'guardedalloc/SConscript',
- 'bmfont/SConscript',
'moto/SConscript',
'container/SConscript',
'memutil/SConscript/',
diff --git a/intern/SoundSystem/Makefile b/intern/SoundSystem/Makefile
index 61785e44e68..4d346f65138 100644
--- a/intern/SoundSystem/Makefile
+++ b/intern/SoundSystem/Makefile
@@ -40,7 +40,6 @@ DIRS += dummy
ifneq ($(NAN_NO_OPENAL),true)
ifeq ($(OS),windows)
- DIRS += fmod
DIRS += openal sdl
endif
ifeq ($(OS),darwin)
diff --git a/intern/SoundSystem/SND_DependKludge.h b/intern/SoundSystem/SND_DependKludge.h
index 1a95f977abe..06d4ec9c0c9 100644
--- a/intern/SoundSystem/SND_DependKludge.h
+++ b/intern/SoundSystem/SND_DependKludge.h
@@ -43,9 +43,6 @@
# ifdef USE_OPENAL
# undef USE_OPENAL
# endif
-# ifdef USE_FMOD
-# undef USE_FMOD
-# endif
#endif
#endif /* NO_SOUND */
diff --git a/intern/SoundSystem/SoundDefines.h b/intern/SoundSystem/SoundDefines.h
index 450fde187b5..5238507c866 100644
--- a/intern/SoundSystem/SoundDefines.h
+++ b/intern/SoundSystem/SoundDefines.h
@@ -38,7 +38,6 @@
enum
{
snd_e_dummydevice = 0,
- snd_e_fmoddevice,
snd_e_openaldevice
};
@@ -49,15 +48,6 @@ enum
/* openal related stuff */
#define AL_LOOPING 0x1007
-/* fmod related stuff */
-#ifdef WIN32
-#define MIXRATE 22050
-#else
-#define MIXRATE 44100
-#endif
-#define NUM_FMOD_MIN_HW_CHANNELS 16
-#define NUM_FMOD_MAX_HW_CHANNELS 16
-
/* activelist defines */
enum
{
diff --git a/intern/SoundSystem/dummy/SND_DummyDevice.cpp b/intern/SoundSystem/dummy/SND_DummyDevice.cpp
index 3e5874f02ca..672c73e9c52 100644
--- a/intern/SoundSystem/dummy/SND_DummyDevice.cpp
+++ b/intern/SoundSystem/dummy/SND_DummyDevice.cpp
@@ -25,7 +25,7 @@
* Contributor(s): none yet.
*
* ***** END GPL LICENSE BLOCK *****
- * SND_FmodDevice derived from SND_IAudioDevice
+ * SND_DummyDevice derived from SND_IAudioDevice
*/
#ifdef HAVE_CONFIG_H
diff --git a/intern/SoundSystem/intern/Makefile b/intern/SoundSystem/intern/Makefile
index c52be01f69f..7684b6b0bca 100644
--- a/intern/SoundSystem/intern/Makefile
+++ b/intern/SoundSystem/intern/Makefile
@@ -35,12 +35,10 @@ include nan_compile.mk
CCFLAGS += $(LEVEL_1_CPP_WARNINGS)
-CPPFLAGS += -I$(NAN_FMOD)/include
CPPFLAGS += -I$(NAN_STRING)/include
CPPFLAGS += -I$(NAN_MOTO)/include
CPPFLAGS += -I../../../source/blender/include
CPPFLAGS += -I../dummy
-CPPFLAGS += -I../fmod
CPPFLAGS += -I../openal
CPPFLAGS += -I..
CPPFLAGS += -I.
diff --git a/intern/SoundSystem/intern/SND_DeviceManager.cpp b/intern/SoundSystem/intern/SND_DeviceManager.cpp
index 215c0f5b6fa..c4bc887dffe 100644
--- a/intern/SoundSystem/intern/SND_DeviceManager.cpp
+++ b/intern/SoundSystem/intern/SND_DeviceManager.cpp
@@ -38,9 +38,6 @@
#include "SND_DeviceManager.h"
#include "SND_DependKludge.h"
#include "SND_DummyDevice.h"
-#ifdef USE_FMOD
-#include "SND_FmodDevice.h"
-#endif
#ifdef USE_OPENAL
#include "SND_OpenALDevice.h"
#endif
@@ -51,11 +48,7 @@ int SND_DeviceManager::m_subscriptions = 0;
#ifdef USE_OPENAL
int SND_DeviceManager::m_device_type = snd_e_openaldevice;
#else
-# ifdef USE_FMOD
-int SND_DeviceManager::m_device_type = snd_e_fmoddevice;
-# else
int SND_DeviceManager::m_device_type = snd_e_dummydevice;
-# endif
#endif
void SND_DeviceManager::Subscribe()
@@ -115,14 +108,6 @@ void SND_DeviceManager::SetDeviceType(int device_type)
// let's create the chosen device
switch (device_type)
{
-#ifdef USE_FMOD
- case snd_e_fmoddevice:
- {
- m_instance = new SND_FmodDevice();
- m_device_type = device_type;
- break;
- }
-#endif
#ifdef USE_OPENAL
case snd_e_openaldevice:
{
diff --git a/intern/SoundSystem/intern/SND_Scene.cpp b/intern/SoundSystem/intern/SND_Scene.cpp
index 9d050a81161..af1b43a08aa 100644
--- a/intern/SoundSystem/intern/SND_Scene.cpp
+++ b/intern/SoundSystem/intern/SND_Scene.cpp
@@ -217,14 +217,8 @@ void SND_Scene::UpdateListener()
if (m_listener.IsModified())
{
m_audiodevice->SetListenerGain(m_listener.GetGain());
-
- // fmod doesn't support dopplervelocity, so just use the dopplerfactor instead
-#ifdef USE_FMOD
- m_audiodevice->SetDopplerFactor(m_listener.GetDopplerVelocity());
-#else
m_audiodevice->SetDopplerVelocity(m_listener.GetDopplerVelocity());
m_audiodevice->SetDopplerFactor(m_listener.GetDopplerFactor());
-#endif
m_listener.SetModified(false);
}
}
@@ -304,23 +298,6 @@ void SND_Scene::UpdateActiveObects()
if (id >= 0)
{
-#ifdef USE_FMOD
- // fmod wants these set before playing the sample
- if (pObject->IsModified())
- {
- m_audiodevice->SetObjectLoop(id, pObject->GetLoopMode());
- m_audiodevice->SetObjectLoopPoints(id, pObject->GetLoopStart(), pObject->GetLoopEnd());
- }
-
- // ok, properties Set. now see if it must play
- if (pObject->GetPlaystate() == SND_MUST_PLAY)
- {
- m_audiodevice->PlayObject(id);
- pObject->SetPlaystate(SND_PLAYING);
- pObject->InitRunning();
-// printf("start play: %d\n", tijd);
- }
-#endif
if (pObject->Is3D())
{
// Get the global positions and velocity vectors
diff --git a/intern/SoundSystem/intern/SND_Utils.cpp b/intern/SoundSystem/intern/SND_Utils.cpp
index a9239576c96..dbc3135b35c 100644
--- a/intern/SoundSystem/intern/SND_Utils.cpp
+++ b/intern/SoundSystem/intern/SND_Utils.cpp
@@ -158,39 +158,7 @@ bool SND_IsSampleValid(const STR_String& name, void* memlocation)
if (shortbuf == SND_WAVE_FORMAT_PCM)
result = true;
-
- /* only fmod supports compressed wav */
-#ifdef USE_FMOD
- switch (shortbuf)
- {
- case SND_WAVE_FORMAT_ADPCM:
- case SND_WAVE_FORMAT_ALAW:
- case SND_WAVE_FORMAT_MULAW:
- case SND_WAVE_FORMAT_DIALOGIC_OKI_ADPCM:
- case SND_WAVE_FORMAT_CONTROL_RES_VQLPC:
- case SND_WAVE_FORMAT_GSM_610:
- case SND_WAVE_FORMAT_MPEG3:
- result = true;
- break;
- default:
- {
- break;
- }
- }
-#endif
}
-#ifdef USE_FMOD
- /* only valid publishers may use ogg vorbis */
- else if (!memcmp(buffer, "OggS", 4))
- {
- result = true;
- }
- /* only valid publishers may use mp3 */
- else if (((!memcmp(buffer, "ID3", 3)) || (!memcmp(buffer, "ÿû", 2))))
- {
- result = true;
- }
-#endif
}
if (loadedsample)
{
diff --git a/intern/SoundSystem/make/msvc_6_0/SoundSystem.dsp b/intern/SoundSystem/make/msvc_6_0/SoundSystem.dsp
index c7ce7aa7a70..1bd973dfb6c 100644
--- a/intern/SoundSystem/make/msvc_6_0/SoundSystem.dsp
+++ b/intern/SoundSystem/make/msvc_6_0/SoundSystem.dsp
@@ -1,206 +1,206 @@
-# Microsoft Developer Studio Project File - Name="SoundSystem" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=SoundSystem - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "SoundSystem.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "SoundSystem.mak" CFG="SoundSystem - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "SoundSystem - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "SoundSystem - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "SoundSystem - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\..\obj\windows\intern\soundsystem"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\intern\soundsystem"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../" /I "../../../../../lib/windows/string/include" /I "../../../../../lib/windows/moto/include" /I "../../dummy" /I "../../openal" /I "..\..\..\string" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\intern\soundsystem\libSoundSystem.lib"
-# Begin Special Build Tool
-SOURCE="$(InputPath)"
-PostBuild_Cmds=ECHO Copying header files XCOPY /Y ..\..\*.h ..\..\..\..\..\lib\windows\SoundSystem\include\*.h ECHO Copying lib XCOPY /Y ..\..\..\..\obj\windows\intern\soundsystem\*.lib ..\..\..\..\..\lib\windows\SoundSystem\lib\*.a ECHO Done
-# End Special Build Tool
-
-!ELSEIF "$(CFG)" == "SoundSystem - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "SoundSystem___Win32_Debug"
-# PROP BASE Intermediate_Dir "SoundSystem___Win32_Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\..\obj\windows\intern\soundsystem\debug"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\intern\soundsystem\debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "../../" /I "../../../../../lib/windows/string/include" /I "../../../../../lib/windows/moto/include" /I "../../dummy" /I "../../openal" /I "..\..\..\string" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\intern\soundsystem\debug\libSoundSystem.lib"
-# Begin Special Build Tool
-SOURCE="$(InputPath)"
-PostBuild_Cmds=ECHO Copying header files XCOPY /Y ..\..\*.h ..\..\..\..\..\lib\windows\SoundSystem\include\*.h ECHO Copying lib XCOPY /Y ..\..\..\..\obj\windows\intern\soundsystem\debug\*.lib ..\..\..\..\..\lib\windows\SoundSystem\lib\debug\*.a ECHO Done
-# End Special Build Tool
-
-!ENDIF
-
-# Begin Target
-
-# Name "SoundSystem - Win32 Release"
-# Name "SoundSystem - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\intern\SND_AudioDevice.cpp
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\intern\SND_C-api.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\SND_CDObject.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\SND_DeviceManager.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\SND_IdObject.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\SND_Scene.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\SND_SoundListener.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\SND_SoundObject.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\SND_Utils.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\SND_WaveCache.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\SND_WaveSlot.cpp
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\intern\SND_AudioDevice.h
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\SND_C-api.h"
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\SND_CDObject.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\SND_DependKludge.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\SND_DeviceManager.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\SND_IAudioDevice.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\SND_IdObject.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\SND_Object.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\SND_Scene.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\SND_SoundListener.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\SND_SoundObject.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\SND_Utils.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\SND_WaveCache.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\SND_WaveSlot.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\SoundDefines.h
-# End Source File
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="SoundSystem" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=SoundSystem - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "SoundSystem.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "SoundSystem.mak" CFG="SoundSystem - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "SoundSystem - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "SoundSystem - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "SoundSystem - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\..\obj\windows\intern\soundsystem"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\intern\soundsystem"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../" /I "../../../../../lib/windows/string/include" /I "../../../../../lib/windows/moto/include" /I "../../dummy" /I "../../openal" /I "..\..\..\string" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\intern\soundsystem\libSoundSystem.lib"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Cmds=ECHO Copying header files XCOPY /Y ..\..\*.h ..\..\..\..\..\lib\windows\SoundSystem\include\*.h ECHO Copying lib XCOPY /Y ..\..\..\..\obj\windows\intern\soundsystem\*.lib ..\..\..\..\..\lib\windows\SoundSystem\lib\*.a ECHO Done
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "SoundSystem - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "SoundSystem___Win32_Debug"
+# PROP BASE Intermediate_Dir "SoundSystem___Win32_Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\..\obj\windows\intern\soundsystem\debug"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\intern\soundsystem\debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "../../" /I "../../../../../lib/windows/string/include" /I "../../../../../lib/windows/moto/include" /I "../../dummy" /I "../../openal" /I "..\..\..\string" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\intern\soundsystem\debug\libSoundSystem.lib"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Cmds=ECHO Copying header files XCOPY /Y ..\..\*.h ..\..\..\..\..\lib\windows\SoundSystem\include\*.h ECHO Copying lib XCOPY /Y ..\..\..\..\obj\windows\intern\soundsystem\debug\*.lib ..\..\..\..\..\lib\windows\SoundSystem\lib\debug\*.a ECHO Done
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "SoundSystem - Win32 Release"
+# Name "SoundSystem - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\intern\SND_AudioDevice.cpp
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\intern\SND_C-api.cpp"
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\SND_CDObject.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\SND_DeviceManager.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\SND_IdObject.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\SND_Scene.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\SND_SoundListener.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\SND_SoundObject.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\SND_Utils.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\SND_WaveCache.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\SND_WaveSlot.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\intern\SND_AudioDevice.h
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\SND_C-api.h"
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\SND_CDObject.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\SND_DependKludge.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\SND_DeviceManager.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\SND_IAudioDevice.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\SND_IdObject.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\SND_Object.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\SND_Scene.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\SND_SoundListener.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\SND_SoundObject.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\SND_Utils.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\SND_WaveCache.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\SND_WaveSlot.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\SoundDefines.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/intern/SoundSystem/make/msvc_6_0/dummy/DummySoundSystem.dsp b/intern/SoundSystem/make/msvc_6_0/dummy/DummySoundSystem.dsp
index 4a27fdfa6e3..2bf372d0382 100644
--- a/intern/SoundSystem/make/msvc_6_0/dummy/DummySoundSystem.dsp
+++ b/intern/SoundSystem/make/msvc_6_0/dummy/DummySoundSystem.dsp
@@ -1,103 +1,103 @@
-# Microsoft Developer Studio Project File - Name="DummySoundSystem" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=DummySoundSystem - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "DummySoundSystem.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "DummySoundSystem.mak" CFG="DummySoundSystem - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "DummySoundSystem - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "DummySoundSystem - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "DummySoundSystem - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\..\..\obj\windows\intern\soundsystem\dummy"
-# PROP Intermediate_Dir "..\..\..\..\..\obj\windows\intern\soundsystem\dummy"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\intern" /I "..\..\..\..\SoundSystem" /I "..\..\..\..\moto\include" /I "..\..\..\..\string" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\..\..\..\obj\windows\intern\soundsystem\dummy\libDummySoundSystem.lib"
-
-!ELSEIF "$(CFG)" == "DummySoundSystem - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\..\..\obj\windows\intern\soundsystem\dummy\debug"
-# PROP Intermediate_Dir "..\..\..\..\..\obj\windows\intern\soundsystem\dummy\debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\intern" /I "..\..\..\..\SoundSystem" /I "..\..\..\..\moto\include" /I "..\..\..\..\string" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# SUBTRACT CPP /Fr
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\..\..\..\obj\windows\intern\soundsystem\dummy\debug\libDummySoundSystem.lib"
-
-!ENDIF
-
-# Begin Target
-
-# Name "DummySoundSystem - Win32 Release"
-# Name "DummySoundSystem - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\..\dummy\SND_DummyDevice.cpp
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\..\dummy\SND_DummyDevice.h
-# End Source File
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="DummySoundSystem" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=DummySoundSystem - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "DummySoundSystem.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "DummySoundSystem.mak" CFG="DummySoundSystem - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "DummySoundSystem - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "DummySoundSystem - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "DummySoundSystem - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\..\..\obj\windows\intern\soundsystem\dummy"
+# PROP Intermediate_Dir "..\..\..\..\..\obj\windows\intern\soundsystem\dummy"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\intern" /I "..\..\..\..\SoundSystem" /I "..\..\..\..\moto\include" /I "..\..\..\..\string" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"..\..\..\..\..\obj\windows\intern\soundsystem\dummy\libDummySoundSystem.lib"
+
+!ELSEIF "$(CFG)" == "DummySoundSystem - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\..\..\obj\windows\intern\soundsystem\dummy\debug"
+# PROP Intermediate_Dir "..\..\..\..\..\obj\windows\intern\soundsystem\dummy\debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\intern" /I "..\..\..\..\SoundSystem" /I "..\..\..\..\moto\include" /I "..\..\..\..\string" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# SUBTRACT CPP /Fr
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"..\..\..\..\..\obj\windows\intern\soundsystem\dummy\debug\libDummySoundSystem.lib"
+
+!ENDIF
+
+# Begin Target
+
+# Name "DummySoundSystem - Win32 Release"
+# Name "DummySoundSystem - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\dummy\SND_DummyDevice.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\dummy\SND_DummyDevice.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/intern/SoundSystem/make/msvc_6_0/openal/OpenALSoundSystem.dsp b/intern/SoundSystem/make/msvc_6_0/openal/OpenALSoundSystem.dsp
index 67a6bd0bb5a..ef0c10e8eff 100644
--- a/intern/SoundSystem/make/msvc_6_0/openal/OpenALSoundSystem.dsp
+++ b/intern/SoundSystem/make/msvc_6_0/openal/OpenALSoundSystem.dsp
@@ -1,106 +1,106 @@
-# Microsoft Developer Studio Project File - Name="OpenALSoundSystem" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=OpenALSoundSystem - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "OpenALSoundSystem.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "OpenALSoundSystem.mak" CFG="OpenALSoundSystem - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "OpenALSoundSystem - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "OpenALSoundSystem - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "OpenALSoundSystem - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\..\..\obj\windows\intern\soundsystem\openal"
-# PROP Intermediate_Dir "..\..\..\..\..\obj\windows\intern\soundsystem\openal"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\intern" /I "..\..\..\..\SoundSystem" /I "..\..\..\..\SoundSystem\sdl" /I "..\..\..\..\moto\include" /I "..\..\..\..\string" /I "..\..\..\..\..\..\lib\windows\openal\include" /I "..\..\..\..\..\..\lib\windows\sdl\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\..\..\..\obj\windows\intern\soundsystem\openal\libOpenALSoundSystem.lib"
-
-!ELSEIF "$(CFG)" == "OpenALSoundSystem - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "OpenALSoundSystem___Win32_Debug"
-# PROP BASE Intermediate_Dir "OpenALSoundSystem___Win32_Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\..\..\obj\windows\intern\soundsystem\openal\debug"
-# PROP Intermediate_Dir "..\..\..\..\..\obj\windows\intern\soundsystem\openal\debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\intern" /I "..\..\..\..\SoundSystem" /I "..\..\..\..\SoundSystem\sdl" /I "..\..\..\..\moto\include" /I "..\..\..\..\string" /I "..\..\..\..\..\..\lib\windows\sdl\include" /I "..\..\..\..\..\..\lib\windows\openal\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\..\..\..\obj\windows\intern\soundsystem\openal\debug\libOpenALSoundSystem.lib"
-
-!ENDIF
-
-# Begin Target
-
-# Name "OpenALSoundSystem - Win32 Release"
-# Name "OpenALSoundSystem - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\..\openal\SND_OpenALDevice.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\sdl\SND_SDLCDDevice.cpp
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\..\openal\SND_OpenALDevice.h
-# End Source File
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="OpenALSoundSystem" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=OpenALSoundSystem - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "OpenALSoundSystem.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "OpenALSoundSystem.mak" CFG="OpenALSoundSystem - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "OpenALSoundSystem - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "OpenALSoundSystem - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "OpenALSoundSystem - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\..\..\obj\windows\intern\soundsystem\openal"
+# PROP Intermediate_Dir "..\..\..\..\..\obj\windows\intern\soundsystem\openal"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\intern" /I "..\..\..\..\SoundSystem" /I "..\..\..\..\SoundSystem\sdl" /I "..\..\..\..\moto\include" /I "..\..\..\..\string" /I "..\..\..\..\..\..\lib\windows\openal\include" /I "..\..\..\..\..\..\lib\windows\sdl\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"..\..\..\..\..\obj\windows\intern\soundsystem\openal\libOpenALSoundSystem.lib"
+
+!ELSEIF "$(CFG)" == "OpenALSoundSystem - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "OpenALSoundSystem___Win32_Debug"
+# PROP BASE Intermediate_Dir "OpenALSoundSystem___Win32_Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\..\..\obj\windows\intern\soundsystem\openal\debug"
+# PROP Intermediate_Dir "..\..\..\..\..\obj\windows\intern\soundsystem\openal\debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\intern" /I "..\..\..\..\SoundSystem" /I "..\..\..\..\SoundSystem\sdl" /I "..\..\..\..\moto\include" /I "..\..\..\..\string" /I "..\..\..\..\..\..\lib\windows\sdl\include" /I "..\..\..\..\..\..\lib\windows\openal\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"..\..\..\..\..\obj\windows\intern\soundsystem\openal\debug\libOpenALSoundSystem.lib"
+
+!ENDIF
+
+# Begin Target
+
+# Name "OpenALSoundSystem - Win32 Release"
+# Name "OpenALSoundSystem - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\openal\SND_OpenALDevice.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\sdl\SND_SDLCDDevice.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\openal\SND_OpenALDevice.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/intern/SoundSystem/openal/SND_OpenALDevice.cpp b/intern/SoundSystem/openal/SND_OpenALDevice.cpp
index 9ce30f985ac..3649cf6de5a 100644
--- a/intern/SoundSystem/openal/SND_OpenALDevice.cpp
+++ b/intern/SoundSystem/openal/SND_OpenALDevice.cpp
@@ -316,7 +316,7 @@ SND_OpenALDevice::SND_OpenALDevice()
void SND_OpenALDevice::UseCD(void) const
{
- // only fmod has CD support, so only create it here
+ // we use SDL for CD, so we create the system
SND_CDObject::CreateSystem();
}
diff --git a/intern/bmfont/BMF_Api.h b/intern/bmfont/BMF_Api.h
deleted file mode 100644
index 252f60623a7..00000000000
--- a/intern/bmfont/BMF_Api.h
+++ /dev/null
@@ -1,162 +0,0 @@
-/**
- * $Id$
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/**
-
- * $Id$
- * Copyright (C) 2001 NaN Technologies B.V.
- *
- * API of the OpenGL bitmap font library.
- * Currently draws fonts using the glBitmap routine.
- * This implies that drawing speed is heavyly dependant on
- * the 2D capabilities of the graphics card.
- */
-
-#ifndef __BMF_API_H
-#define __BMF_API_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "BMF_Fonts.h"
-
-/**
- * Returns the font for a given font type.
- * @param font The font to retrieve.
- * @return The font (or nil if not found).
- */
-BMF_Font* BMF_GetFont(BMF_FontType font);
-
-/**
- * Draws a character at the current raster position.
- * @param font The font to use.
- * @param c The character to draw.
- * @return Indication of success (0 == error).
- */
-int BMF_DrawCharacter(BMF_Font* font, char c);
-
-/**
- * Draws a string at the current raster position.
- * @param font The font to use.
- * @param str The string to draw.
- * @return Indication of success (0 == error).
- */
-int BMF_DrawString(BMF_Font* font, char* str);
-
-/**
- * Returns the width of a character in pixels.
- * @param font The font to use.
- * @param c The character.
- * @return The length.
- */
-int BMF_GetCharacterWidth(BMF_Font* font, char c);
-
-/**
- * Returns the width of a string of characters.
- * @param font The font to use.
- * @param str The string.
- * @return The length.
- */
-int BMF_GetStringWidth(BMF_Font* font, char* str);
-
-/**
- * Returns the bounding box of a string of characters.
- * @param font The font to use.
- * @param str The string.
- * @param llx Lower left x coord
- * @param lly Lower left y coord
- * @param urx Upper right x coord
- * @param ury Upper right y coord
- */
-void BMF_GetStringBoundingBox(BMF_Font* font, char* str, float*llx, float *lly, float *urx, float *ury);
-
-
-/**
- * Returns the bounding box of the font. The width and
- * height represent the bounding box of the union of
- * all glyps. The minimum and maximum values of the
- * box represent the extent of the font and its positioning
- * about the origin.
- */
-void BMF_GetFontBoundingBox(BMF_Font* font, int *xmin_r, int *ymin_r, int *xmax_r, int *ymax_r);
-
-/**
- * Same as GetFontBoundingBox but only returns the height
- */
-int BMF_GetFontHeight(BMF_Font* font);
-
-/**
- * Convert the given @a font to a texture, and return the GL texture
- * ID of the texture. If the texture ID is bound, text can
- * be drawn using the texture by calling DrawStringTexture.
- *
- * @param font The font to create the texture from.
- * @return The GL texture ID of the new texture, or -1 if unable
- * to create.
- */
-int BMF_GetFontTexture(BMF_Font* font);
-
-/**
- * Draw the given @a str at the point @a x, @a y, @a z, using
- * texture coordinates. This assumes that an appropriate texture
- * has been bound, see BMF_BitmapFont::GetTexture(). The string
- * is drawn along the positive X axis.
- *
- * @param font The font to draw with.
- * @param string The c-string to draw.
- * @param x The x coordinate to start drawing at.
- * @param y The y coordinate to start drawing at.
- * @param z The z coordinate to start drawing at.
- */
-void BMF_DrawStringTexture(BMF_Font* font, char* string, float x, float y, float z);
-
- /**
- * Draw the given @a string at the point @a xpos, @a ypos using
- * char and float buffers.
- *
- * @param string The c-string to draw.
- * @param xpos The x coordinate to start drawing at.
- * @param ypos The y coordinate to start drawing at.
- * @param fgcol The forground color.
- * @param bgcol The background color.
- * @param buf Unsigned char image buffer, when NULL to not operate on it.
- * @param fbuf float image buffer, when NULL to not operate on it.
- * @param w image buffer width.
- * @param h image buffer height.
- * @param channels number of channels in the image (3 or 4 - currently)
- */
-void BMF_DrawStringBuf(BMF_Font* font, char *str, int posx, int posy, float *col, unsigned char *buf, float *fbuf, int w, int h, int channels);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __BMF_API_H */
-
diff --git a/intern/bmfont/BMF_Settings.h b/intern/bmfont/BMF_Settings.h
deleted file mode 100644
index b599c97d6ee..00000000000
--- a/intern/bmfont/BMF_Settings.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/**
- * $Id$
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/**
-
- * $Id$
- * Copyright (C) 2001 NaN Technologies B.V.
- * Allows you to determine which fonts to include in the library.
- */
-
-#ifndef __BMF_SETTINGS_H
-#define __BMF_SETTINGS_H
-
-/* This font is included always */
-#define BMF_INCLUDE_HELV10 1
-
-#ifndef BMF_MINIMAL
-
-/* These fonts are included with the minimal setting defined */
-#define BMF_INCLUDE_HELV12 1
-#define BMF_INCLUDE_HELVB8 1
-#define BMF_INCLUDE_HELVB10 1
-#define BMF_INCLUDE_HELVB12 1
-#define BMF_INCLUDE_HELVB14 1
-#define BMF_INCLUDE_SCR12 1
-#define BMF_INCLUDE_SCR14 1
-#define BMF_INCLUDE_SCR15 1
-
-#else /* BMF_MINIMAL */
-#define BMF_INCLUDE_HELV12 0
-#define BMF_INCLUDE_HELVB8 0
-#define BMF_INCLUDE_HELVB10 0
-#define BMF_INCLUDE_HELVB12 0
-#define BMF_INCLUDE_HELVB14 0
-#define BMF_INCLUDE_SCR12 0
-#define BMF_INCLUDE_SCR14 0
-#define BMF_INCLUDE_SCR15 0
-
-#endif /* BMF_MINIMAL */
-
-#endif /* __BMF_SETTINGS_H */
-
diff --git a/intern/bmfont/CMakeLists.txt b/intern/bmfont/CMakeLists.txt
deleted file mode 100644
index 3ae636a6097..00000000000
--- a/intern/bmfont/CMakeLists.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-# $Id$
-# ***** BEGIN GPL LICENSE BLOCK *****
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# The Original Code is Copyright (C) 2006, Blender Foundation
-# All rights reserved.
-#
-# The Original Code is: all of this file.
-#
-# Contributor(s): Jacques Beaurain.
-#
-# ***** END GPL LICENSE BLOCK *****
-
-SET(INC . intern)
-
-FILE(GLOB SRC intern/*.cpp)
-
-BLENDERLIB(bf_bmfont "${SRC}" "${INC}")
-#, libtype=['intern','player'], priority = [20, 185] )
diff --git a/intern/bmfont/Makefile b/intern/bmfont/Makefile
deleted file mode 100644
index de0fc715884..00000000000
--- a/intern/bmfont/Makefile
+++ /dev/null
@@ -1,52 +0,0 @@
-# -*- mode: gnumakefile; tab-width: 8; indent-tabs-mode: t; -*-
-# vim: tabstop=8
-#
-# $Id$
-#
-# ***** BEGIN GPL LICENSE BLOCK *****
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
-# All rights reserved.
-#
-# The Original Code is: all of this file.
-#
-# Contributor(s): Hans Lambermont, GSR
-#
-# ***** END GPL LICENSE BLOCK *****
-# bmfont main makefile.
-#
-
-include nan_definitions.mk
-
-LIBNAME = bmfont
-SOURCEDIR = intern/$(LIBNAME)
-DIR = $(OCGDIR)/$(SOURCEDIR)
-DIRS = intern
-#not ready yet TESTDIRS = test
-
-include nan_subdirs.mk
-
-install: $(ALL_OR_DEBUG)
- @[ -d $(NAN_BMFONT) ] || mkdir $(NAN_BMFONT)
- @[ -d $(NAN_BMFONT)/include ] || mkdir $(NAN_BMFONT)/include
- @[ -d $(NAN_BMFONT)/lib/$(DEBUG_DIR) ] || mkdir $(NAN_BMFONT)/lib/$(DEBUG_DIR)
- @../tools/cpifdiff.sh $(DIR)/$(DEBUG_DIR)libbmfont.a $(NAN_BMFONT)/lib/$(DEBUG_DIR)
-ifeq ($(OS),darwin)
- ranlib $(NAN_BMFONT)/lib/$(DEBUG_DIR)libbmfont.a
-endif
- @../tools/cpifdiff.sh *.h $(NAN_BMFONT)/include/
-
diff --git a/intern/bmfont/SConscript b/intern/bmfont/SConscript
deleted file mode 100644
index 4febe2735e7..00000000000
--- a/intern/bmfont/SConscript
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/bin/python
-Import ('env')
-
-sources = env.Glob('intern/*.cpp')
-
-incs = '. intern'
-incs += ' ' + env['BF_OPENGL_INC']
-defs = ''
-
-env.BlenderLib ('bf_bmfont', sources, Split(incs), Split(defs), libtype=['intern','player'], priority = [20, 185] )
diff --git a/intern/bmfont/intern/BDF2BMF.py b/intern/bmfont/intern/BDF2BMF.py
deleted file mode 100644
index 15b9e5b8eb4..00000000000
--- a/intern/bmfont/intern/BDF2BMF.py
+++ /dev/null
@@ -1,177 +0,0 @@
-#!/usr/bin/python
-
-# ***** BEGIN GPL LICENSE BLOCK *****
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# ***** END GPL LICENCE BLOCK *****
-# --------------------------------------------------------------------------
-
-HELP_TXT = \
-'''
-Convert BDF pixmap fonts into C++ files Blender can read.
-Use to replace bitmap fonts or add new ones.
-
-Usage
- python bdf2bmf.py -name=SomeName myfile.bdf
-
-Blender currently supports fonts with a maximum width of 8 pixels.
-'''
-
-# -------- Simple BDF parser
-import sys
-def parse_bdf(f, MAX_CHARS=256):
- lines = [l.strip().upper().split() for l in f.readlines()]
-
- is_bitmap = False
- dummy = {'BITMAP':[]}
- char_data = [dummy.copy() for i in xrange(MAX_CHARS)]
- context_bitmap = []
-
- for l in lines:
- if l[0]=='ENCODING': enc = int(l[1])
- elif l[0]=='BBX': bbx = [int(c) for c in l[1:]]
- elif l[0]=='DWIDTH': dwidth = int(l[1])
- elif l[0]=='BITMAP': is_bitmap = True
- elif l[0]=='ENDCHAR':
- if enc < MAX_CHARS:
- char_data[enc]['BBX'] = bbx
- char_data[enc]['DWIDTH'] = dwidth
- char_data[enc]['BITMAP'] = context_bitmap
-
- context_bitmap = []
- enc = bbx = None
- is_bitmap = False
- else:
- # None of the above, Ok, were reading a bitmap
- if is_bitmap and enc < MAX_CHARS:
- context_bitmap.append( int(l[0], 16) )
-
- return char_data
-# -------- end simple BDF parser
-
-def bdf2cpp_name(path):
- return path.split('.')[0] + '.cpp'
-
-def convert_to_blender(bdf_dict, font_name, origfilename, MAX_CHARS=256):
-
- # first get a global width/height, also set the offsets
- xmin = ymin = 10000000
- xmax = ymax = -10000000
-
- bitmap_offsets = [-1] * MAX_CHARS
- bitmap_tot = 0
- for i, c in enumerate(bdf_dict):
- if c.has_key('BBX'):
- bbx = c['BBX']
- xmax = max(bbx[0], xmax)
- ymax = max(bbx[1], ymax)
- xmin = min(bbx[2], xmin)
- ymin = min(bbx[3], ymin)
-
- bitmap_offsets[i] = bitmap_tot
- bitmap_tot += len(c['BITMAP'])
-
- c['BITMAP'].reverse()
-
- # Now we can write. Ok if we have no .'s in the path.
- f = open(bdf2cpp_name(origfilename), 'w')
-
- f.write('''
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "BMF_FontData.h"
-
-#include "BMF_Settings.h"
-''')
-
- f.write('#if BMF_INCLUDE_%s\n\n' % font_name.upper())
- f.write('static unsigned char bitmap_data[]= {')
- newline = 8
-
- for i, c in enumerate(bdf_dict):
-
- for cdata in c['BITMAP']:
- # Just formatting
- newline+=1
- if newline >= 8:
- newline = 0
- f.write('\n\t')
- # End formatting
-
- f.write('0x%.2hx,' % cdata) # 0x80 <- format
-
- f.write("\n};\n")
-
- f.write("BMF_FontData BMF_font_%s = {\n" % font_name)
- f.write('\t%d, %d,\n' % (xmin, ymin))
- f.write('\t%d, %d,\n' % (xmax, ymax))
-
- f.write('\t{\n')
-
-
- for i, c in enumerate(bdf_dict):
- if bitmap_offsets[i] == -1 or c.has_key('BBX') == False:
- f.write('\t\t{0,0,0,0,0, -1},\n')
- else:
- bbx = c['BBX']
- f.write('\t\t{%d,%d,%d,%d,%d, %d},\n' % (bbx[0], bbx[1], -bbx[2], -bbx[3], c['DWIDTH'], bitmap_offsets[i]))
-
- f.write('''
- },
- bitmap_data
-};
-
-#endif
-''')
-
-def main():
- # replace "[-name=foo]" with "[-name] [foo]"
- args = []
- for arg in sys.argv:
- for a in arg.replace('=', ' ').split():
- args.append(a)
-
- name = 'untitled'
- done_anything = False
- for i, arg in enumerate(args):
- if arg == '-name':
- if i==len(args)-1:
- print 'no arg given for -name, aborting'
- return
- else:
- name = args[i+1]
-
- elif arg.lower().endswith('.bdf'):
- try:
- f = open(arg)
- print '...Writing to:', bdf2cpp_name(arg)
- except:
- print 'could not open "%s", aborting' % arg
-
-
- bdf_dict = parse_bdf(f)
- convert_to_blender(bdf_dict, name, arg)
- done_anything = True
-
- if not done_anything:
- print HELP_TXT
- print '...nothing to do'
-
-if __name__ == '__main__':
- main()
-
diff --git a/intern/bmfont/intern/BMF_Api.cpp b/intern/bmfont/intern/BMF_Api.cpp
deleted file mode 100644
index 1699393e53d..00000000000
--- a/intern/bmfont/intern/BMF_Api.cpp
+++ /dev/null
@@ -1,183 +0,0 @@
-/**
- * $Id$
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/**
-
- * $Id$
- * Copyright (C) 2001 NaN Technologies B.V.
- *
- * Implementation of the API of the OpenGL bitmap font library.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "BMF_Api.h"
-
-#include "BMF_BitmapFont.h"
-
-
-#if BMF_INCLUDE_HELV10
-extern BMF_FontData BMF_font_helv10;
-static BMF_BitmapFont bmfHelv10(&BMF_font_helv10);
-#endif // BMF_INCLUDE_HELV10
-#if BMF_INCLUDE_HELV12
-extern BMF_FontData BMF_font_helv12;
-static BMF_BitmapFont bmfHelv12(&BMF_font_helv12);
-#endif // BMF_INCLUDE_HELV12
-#if BMF_INCLUDE_HELVB8
-extern BMF_FontData BMF_font_helvb8;
-static BMF_BitmapFont bmfHelvb8(&BMF_font_helvb8);
-#endif // BMF_INCLUDE_HELVB8
-#if BMF_INCLUDE_HELVB10
-extern BMF_FontData BMF_font_helvb10;
-static BMF_BitmapFont bmfHelvb10(&BMF_font_helvb10);
-#endif // BMF_INCLUDE_HELVB10
-#if BMF_INCLUDE_HELVB12
-extern BMF_FontData BMF_font_helvb12;
-static BMF_BitmapFont bmfHelvb12(&BMF_font_helvb12);
-#endif // BMF_INCLUDE_HELVB12
-#if BMF_INCLUDE_HELVB14
-extern BMF_FontData BMF_font_helvb14;
-static BMF_BitmapFont bmfHelvb14(&BMF_font_helvb14);
-#endif // BMF_INCLUDE_HELVB14
-#if BMF_INCLUDE_SCR12
-extern BMF_FontData BMF_font_scr12;
-static BMF_BitmapFont bmfScreen12(&BMF_font_scr12);
-#endif // BMF_INCLUDE_SCR12
-#if BMF_INCLUDE_SCR14
-extern BMF_FontData BMF_font_scr14;
-static BMF_BitmapFont bmfScreen14(&BMF_font_scr14);
-#endif // BMF_INCLUDE_SCR14
-#if BMF_INCLUDE_SCR15
-extern BMF_FontData BMF_font_scr15;
-static BMF_BitmapFont bmfScreen15(&BMF_font_scr15);
-#endif // BMF_INCLUDE_SCR15
-
-
-BMF_Font* BMF_GetFont(BMF_FontType font)
-{
- switch (font)
- {
-#if BMF_INCLUDE_HELV10
- case BMF_kHelvetica10: return (BMF_Font*) &bmfHelv10;
-#endif // BMF_INCLUDE_HELV10
-#if BMF_INCLUDE_HELV12
- case BMF_kHelvetica12: return (BMF_Font*) &bmfHelv12;
-#endif // BMF_INCLUDE_HELV12
-#if BMF_INCLUDE_HELVB8
- case BMF_kHelveticaBold8: return (BMF_Font*) &bmfHelvb8;
-#endif // BMF_INCLUDE_HELVB8
-#if BMF_INCLUDE_HELVB10
- case BMF_kHelveticaBold10: return (BMF_Font*) &bmfHelvb10;
-#endif // BMF_INCLUDE_HELVB10
-#if BMF_INCLUDE_HELVB12
- case BMF_kHelveticaBold12: return (BMF_Font*) &bmfHelvb12;
-#endif // BMF_INCLUDE_HELVB12
-#if BMF_INCLUDE_HELVB14
- case BMF_kHelveticaBold14: return (BMF_Font*) &bmfHelvb14;
-#endif // BMF_INCLUDE_HELVB12
-#if BMF_INCLUDE_SCR12
- case BMF_kScreen12: return (BMF_Font*) &bmfScreen12;
-#endif // BMF_INCLUDE_SCR12
-#if BMF_INCLUDE_SCR14
- case BMF_kScreen14: return (BMF_Font*) &bmfScreen14;
-#endif // BMF_INCLUDE_SCR14
-#if BMF_INCLUDE_SCR15
- case BMF_kScreen15: return (BMF_Font*) &bmfScreen15;
-#endif // BMF_INCLUDE_SCR15
- default:
- break;
- }
- return 0;
-}
-
-
-int BMF_DrawCharacter(BMF_Font* font, char c)
-{
- char str[2] = {c, '\0'};
- return BMF_DrawString(font, str);
-}
-
-
-int BMF_DrawString(BMF_Font* font, char* str)
-{
- if (!font) return 0;
- ((BMF_BitmapFont*)font)->DrawString(str);
- return 1;
-}
-
-
-int BMF_GetCharacterWidth(BMF_Font* font, char c)
-{
- char str[2] = {c, '\0'};
- return BMF_GetStringWidth(font, str);
-}
-
-
-int BMF_GetStringWidth(BMF_Font* font, char* str)
-{
- if (!font) return 0;
- return ((BMF_BitmapFont*)font)->GetStringWidth(str);
-}
-
-void BMF_GetStringBoundingBox(BMF_Font* font, char* str, float*llx, float *lly, float *urx, float *ury){
- if (!font){
- *llx = *lly = *urx = *ury = 0;
- }else{
- ((BMF_BitmapFont*)font)->GetStringBoundingBox(str, llx, lly, urx, ury);
- }
-}
-
-void BMF_GetFontBoundingBox(BMF_Font* font, int *xmin_r, int *ymin_r, int *xmax_r, int *ymax_r)
-{
- if (!font) return;
- ((BMF_BitmapFont*)font)->GetFontBoundingBox(*xmin_r, *ymin_r, *xmax_r, *ymax_r);
-}
-
-int BMF_GetFontHeight(BMF_Font* font)
-{
- if (!font) return -1;
- return ((BMF_BitmapFont*)font)->GetFontHeight();
-}
-
-int BMF_GetFontTexture(BMF_Font* font) {
- if (!font) return -1;
- return ((BMF_BitmapFont*)font)->GetTexture();
-}
-
-void BMF_DrawStringTexture(BMF_Font* font, char *string, float x, float y, float z) {
- if (!font) return;
- ((BMF_BitmapFont*)font)->DrawStringTexture(string, x, y, z);
-}
-
-void BMF_DrawStringBuf(BMF_Font* font, char *str, int posx, int posy, float *col, unsigned char *buf, float *fbuf, int w, int h, int channels) {
- if (!font) return;
- ((BMF_BitmapFont*)font)->DrawStringBuf(str, posx, posy, col, buf, fbuf, w, h, channels);
-}
diff --git a/intern/bmfont/intern/BMF_BitmapFont.cpp b/intern/bmfont/intern/BMF_BitmapFont.cpp
deleted file mode 100644
index 0111e9c3f93..00000000000
--- a/intern/bmfont/intern/BMF_BitmapFont.cpp
+++ /dev/null
@@ -1,323 +0,0 @@
-/**
- * $Id$
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/**
-
- * $Id$
- * Copyright (C) 2001 NaN Technologies B.V.
- */
-
-
-#include <stdio.h>
-
-
-
-#include <string.h>
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#if defined(WIN32) || defined(__APPLE__)
- #ifdef WIN32
- #if !defined(__CYGWIN32__)
- #pragma warning(disable:4244)
- #endif /* __CYGWIN32__ */
- #include <windows.h>
- #include <GL/gl.h>
- #else // WIN32
- // __APPLE__ is defined
- #include <AGL/gl.h>
- #endif // WIN32
-#else // defined(WIN32) || defined(__APPLE__)
- #include <GL/gl.h>
-#endif // defined(WIN32) || defined(__APPLE__)
-
-#include "BMF_BitmapFont.h"
-
-
-BMF_BitmapFont::BMF_BitmapFont(BMF_FontData* fontData)
-: m_fontData(fontData)
-{
-}
-
-
-BMF_BitmapFont::~BMF_BitmapFont(void)
-{
-}
-
-void BMF_BitmapFont::DrawString(char* str)
-{
- GLint alignment;
- unsigned char c;
-
- glGetIntegerv(GL_UNPACK_ALIGNMENT, &alignment);
- glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
-
- while ( (c = (unsigned char) *str++) ) {
- BMF_CharData & cd = m_fontData->chars[c];
-
- if (cd.data_offset==-1) {
- GLubyte nullBitmap = 0;
-
- glBitmap(1, 1, 0, 0, cd.advance, 0, &nullBitmap);
- } else {
- GLubyte *bitmap = &m_fontData->bitmap_data[cd.data_offset];
-
- glBitmap(cd.width, cd.height, cd.xorig, cd.yorig, cd.advance, 0, bitmap);
- }
- }
-
- glPixelStorei(GL_UNPACK_ALIGNMENT, alignment);
-}
-
-
-int BMF_BitmapFont::GetStringWidth(char* str)
-{
- unsigned char c;
- int length = 0;
-
- while ( (c = (unsigned char) *str++) ) {
- length += m_fontData->chars[c].advance;
- }
-
- return length;
-}
-
-void BMF_BitmapFont::GetFontBoundingBox(int & xMin, int & yMin, int & xMax, int & yMax)
-{
- xMin = m_fontData->xmin;
- yMin = m_fontData->ymin;
- xMax = m_fontData->xmax;
- yMax = m_fontData->ymax;
-}
-
-int BMF_BitmapFont::GetFontHeight( void )
-{
- return m_fontData->ymax - m_fontData->ymin;
-}
-
-void BMF_BitmapFont::GetStringBoundingBox(char* str, float*llx, float *lly, float *urx, float *ury)
-{
- unsigned char c;
- int length = 0;
- int ascent = 0;
- int descent = 0;
-
- while ( (c = (unsigned char) *str++) ) {
- length += m_fontData->chars[c].advance;
- int d = m_fontData->chars[c].yorig;
- int a = m_fontData->chars[c].height - m_fontData->chars[c].yorig;
- if(a > ascent) ascent = a;
- if(d > descent) descent = d;
- }
- *llx = (float)0;
- *lly = (float)-descent;
- *urx = (float)length;
- *ury = (float)ascent;
-}
-
-
-int BMF_BitmapFont::GetTexture()
-{
- int fWidth = m_fontData->xmax - m_fontData->xmin;
- int fHeight = m_fontData->ymax - m_fontData->ymin;
-
- if (fWidth>=16 || fHeight>=16) {
- return -1;
- }
-
- int cRows = 16, cCols = 16;
- int cWidth = 16, cHeight = 16;
- int iWidth = cCols*cWidth;
- int iHeight = cRows*cHeight;
- GLubyte *img = new GLubyte [iHeight*iWidth];
- GLuint texId;
-
- int baseLine = -(m_fontData->ymin);
-
- memset(img, 0, iHeight*iWidth);
- for (int i = 0; i<256; i++) {
- BMF_CharData & cd = m_fontData->chars[i];
-
- if (cd.data_offset != -1) {
- int cellX = i%16;
- int cellY = i/16;
-
- for (int y = 0; y<cd.height; y++) {
- GLubyte* imgRow = &img[(cellY*cHeight + y + baseLine - cd.yorig)*iWidth];
- GLubyte* chrRow = &m_fontData->bitmap_data[cd.data_offset + ((cd.width+7)/8)*y];
-
- for (int x = 0; x<cd.width; x++) {
- GLubyte* imgPxl = &imgRow[(cellX*cWidth + x - cd.xorig)];
- int byteIdx = x/8;
- int bitIdx = 7 - (x%8);
-
- if (chrRow[byteIdx]&(1<<bitIdx)) {
- imgPxl[0] = 255;
- }
- }
- }
- }
- }
-
- glGenTextures(1, &texId);
-
- glBindTexture(GL_TEXTURE_2D, texId);
-
- glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA4, iWidth, iHeight, 0, GL_ALPHA, GL_UNSIGNED_BYTE, img);
- if (glGetError()) {
- glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE4_ALPHA4, iWidth, iHeight, 0, GL_ALPHA, GL_UNSIGNED_BYTE, img);
- }
-
- glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
-
- delete [] img;
-
- return texId;
-}
-
-void BMF_BitmapFont::DrawStringTexture(char *str, float x, float y, float z)
-{
- unsigned char c;
- float pos = 0;
-
- int baseLine = -(m_fontData->ymin);
-
- glBegin(GL_QUADS);
- while ( (c = (unsigned char) *str++) ) {
- BMF_CharData & cd = m_fontData->chars[c];
-
- if (cd.data_offset != -1) {
- float cellX = (c%16)/16.0;
- float cellY = (c/16)/16.0;
-
- glTexCoord2f(cellX + 1.0/16.0, cellY);
- glVertex3f(x + pos + 16.0, -baseLine + y + 0.0, z);
-
- glTexCoord2f(cellX + 1.0/16.0, cellY + 1.0/16.0);
- glVertex3f(x + pos + 16.0, -baseLine + y + 16.0, z);
-
- glTexCoord2f(cellX, cellY + 1.0/16.0);
- glVertex3f(x + pos + 0.0, -baseLine + y + 16.0, z);
-
- glTexCoord2f(cellX, cellY);
- glVertex3f(x + pos + 0.0, -baseLine + y + 0.0, z);
- }
-
- pos += cd.advance;
- }
- glEnd();
-}
-
-#define FTOCHAR(val) val<=0.0f?0: (val>=1.0f?255: (char)(255.0f*val))
-void BMF_BitmapFont::DrawStringBuf(char *str, int posx, int posy, float *col, unsigned char *buf, float *fbuf, int w, int h, int channels)
-{
- int x, y;
-
- if (buf==0 && fbuf==0)
- return;
-
- /*offset for font*/
- posx -= m_fontData->xmin;
- posy -= m_fontData->ymin;
-
- if (buf) {
- unsigned char colch[4];
- unsigned char *max, *pixel;
- unsigned char c;
-
- for (x=0; x<4; x++) {
- colch[x] = FTOCHAR(col[x]);
- }
-
- max = buf + (4 * (w * h));
- while ((c = (unsigned char) *str++)) {
- BMF_CharData & cd = m_fontData->chars[c];
- if (cd.data_offset != -1) {
- for (y = 0; y < cd.height; y++) {
- unsigned char* chrRow = &m_fontData->bitmap_data[cd.data_offset + ((cd.width+7)/8)*y];
- for (x = cd.xorig; x < cd.width; x++) {
- pixel = buf + 4 * (((posy + y - cd.yorig) * w) + (posx + x));
- if ((pixel < max) && (pixel > buf)) {
- int byteIdx = x/8;
- int bitIdx = 7 - (x%8);
-
- if (chrRow[byteIdx]&(1<<bitIdx)) {
- pixel[0] = colch[0];
- pixel[1] = colch[1];
- pixel[2] = colch[2];
- if (channels==4) {
- pixel[4] = 1; /*colch[3];*/
- }
-
- }
- }
- }
- }
- }
- posx += cd.advance;
- }
- }
-
- if (fbuf) {
- float *pixel, *max;
- unsigned char c;
- int xi, yi;
-
- max = fbuf + (4 * (w * h));
-
- while ((c = (unsigned char) *str++)) {
- BMF_CharData & cd = m_fontData->chars[c];
- if (cd.data_offset != -1) {
- for (yi = 0; yi < cd.height; yi++) {
- unsigned char* chrRow = &m_fontData->bitmap_data[cd.data_offset + ((cd.width+7)/8)*yi];
- for (xi = cd.xorig; xi < cd.width; xi++) {
- pixel = fbuf + 4 * (((posy + yi - cd.yorig) * w) + (posx + xi));
- if ((pixel < max) && (pixel > fbuf)) {
- int byteIdx = xi/8;
- int bitIdx = 7 - (xi%8);
-
- if (chrRow[byteIdx]&(1<<bitIdx)) {
- pixel[0] = col[0];
- pixel[1] = col[1];
- pixel[2] = col[2];
- if (channels==4) {
- pixel[3] = 1; /*col[3];*/
- }
- }
- }
- }
- }
- }
- posx += cd.advance;
- }
- }
-}
diff --git a/intern/bmfont/intern/BMF_BitmapFont.h b/intern/bmfont/intern/BMF_BitmapFont.h
deleted file mode 100644
index ed060818f71..00000000000
--- a/intern/bmfont/intern/BMF_BitmapFont.h
+++ /dev/null
@@ -1,140 +0,0 @@
-/**
- * $Id$
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/**
-
- * $Id$
- * Copyright (C) 2001 NaN Technologies B.V.
- */
-
-#ifndef __BMF_BITMAP_FONT_H
-#define __BMF_BITMAP_FONT_H
-
-#include "BMF_FontData.h"
-
-/**
- * Base class for OpenGL bitmap fonts.
- */
-class BMF_BitmapFont
-{
-public:
- /**
- * Default constructor.
- */
- BMF_BitmapFont(BMF_FontData* fontData);
-
- /**
- * Destructor.
- */
- virtual ~BMF_BitmapFont(void);
-
- /**
- * Draws a string at the current raster position.
- * @param str The string to draw.
- */
- void DrawString(char* str);
-
- /**
- * Draws a string at the current raster position.
- * @param str The string to draw.
- * @return The width of the string.
- */
- int GetStringWidth(char* str);
-
- /**
- * Returns the bounding box of the font. The width and
- * height represent the bounding box of the union of
- * all glyps. The minimum and maximum values of the
- * box represent the extent of the font and its positioning
- * about the origin.
- */
- void GetFontBoundingBox(int & xMin, int & yMin, int & xMax, int & yMax);
-
- /**
- * Return the bounding box height of the font.
- */
- int GetFontHeight(void);
-
- /**
- * Returns the bounding box of a string of characters.
- * @param font The font to use.
- * @param str The string.
- * @param llx Lower left x coord
- * @param lly Lower left y coord
- * @param urx Upper right x coord
- * @param ury Upper right y coord
- */
- void GetStringBoundingBox(char* str, float*llx, float *lly, float *urx, float *ury);
-
-
- /**
- * Convert the font to a texture, and return the GL texture
- * ID of the texture. If the texture ID is bound, text can
- * be drawn using the texture by calling DrawStringTexture.
- *
- * @return The GL texture ID of the new texture, or -1 if unable
- * to create.
- */
- int GetTexture();
-
- /**
- * Draw the given @a string at the point @a x, @a y, @a z, using
- * texture coordinates. This assumes that an appropriate texture
- * has been bound, see BMF_BitmapFont::GetTexture(). The string
- * is drawn along the positive X axis.
- *
- * @param string The c-string to draw.
- * @param x The x coordinate to start drawing at.
- * @param y The y coordinate to start drawing at.
- * @param z The z coordinate to start drawing at.
- */
- void DrawStringTexture(char* string, float x, float y, float z);
-
- /**
- * Draw the given @a string at the point @a xpos, @a ypos using
- * char and float buffers.
- *
- * @param string The c-string to draw.
- * @param xpos The x coordinate to start drawing at.
- * @param ypos The y coordinate to start drawing at.
- * @param col The forground color.
- * @param buf Unsigned char image buffer, when NULL to not operate on it.
- * @param fbuf float image buffer, when NULL to not operate on it.
- * @param w image buffer width.
- * @param h image buffer height.
- * @param channels number of channels in the image (3 or 4 - currently)
- */
- void DrawStringBuf(char *str, int posx, int posy, float *col, unsigned char *buf, float *fbuf, int w, int h, int channels);
-
-protected:
- /** Pointer to the font data. */
- BMF_FontData* m_fontData;
-};
-
-#endif // __BMF_BITMAP_FONT_H
-
diff --git a/intern/bmfont/intern/BMF_font_helv10.cpp b/intern/bmfont/intern/BMF_font_helv10.cpp
deleted file mode 100644
index 2430e9f6d81..00000000000
--- a/intern/bmfont/intern/BMF_font_helv10.cpp
+++ /dev/null
@@ -1,494 +0,0 @@
-/**
- * $Id$
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "BMF_FontData.h"
-
-#include "BMF_Settings.h"
-
-#if BMF_INCLUDE_HELV10
-
-static unsigned char bitmap_data[]= {
- 0x80,0x00,0x80,0x80,0x80,0x80,0x80,0x80,
- 0xa0,0xa0,0x50,0x50,0xf8,0x28,0x7c,0x28,
- 0x28,0x20,0x70,0xa8,0x28,0x70,0xa0,0xa8,
- 0x70,0x20,0x26,0x29,0x16,0x10,0x08,0x68,
- 0x94,0x64,0x64,0x98,0x98,0xa4,0x60,0x50,
- 0x50,0x20,0x80,0x40,0x40,0x20,0x40,0x40,
- 0x80,0x80,0x80,0x80,0x40,0x40,0x20,0x80,
- 0x40,0x40,0x20,0x20,0x20,0x20,0x40,0x40,
- 0x80,0xa0,0x40,0xa0,0x20,0x20,0xf8,0x20,
- 0x20,0x80,0x40,0x40,0xf8,0x80,0x80,0x80,
- 0x40,0x40,0x40,0x40,0x20,0x20,0x70,0x88,
- 0x88,0x88,0x88,0x88,0x88,0x70,0x40,0x40,
- 0x40,0x40,0x40,0x40,0xc0,0x40,0xf8,0x80,
- 0x40,0x30,0x08,0x08,0x88,0x70,0x70,0x88,
- 0x08,0x08,0x30,0x08,0x88,0x70,0x10,0x10,
- 0xf8,0x90,0x50,0x50,0x30,0x10,0x70,0x88,
- 0x08,0x08,0xf0,0x80,0x80,0xf8,0x70,0x88,
- 0x88,0xc8,0xb0,0x80,0x88,0x70,0x40,0x40,
- 0x20,0x20,0x10,0x10,0x08,0xf8,0x70,0x88,
- 0x88,0x88,0x70,0x88,0x88,0x70,0x70,0x88,
- 0x08,0x68,0x98,0x88,0x88,0x70,0x80,0x00,
- 0x00,0x00,0x00,0x80,0x80,0x40,0x40,0x00,
- 0x00,0x00,0x00,0x40,0x20,0x40,0x80,0x40,
- 0x20,0xf0,0x00,0xf0,0x80,0x40,0x20,0x40,
- 0x80,0x40,0x00,0x40,0x40,0x20,0x10,0x90,
- 0x60,0x3e,0x00,0x40,0x00,0x9b,0x00,0xa4,
- 0x80,0xa4,0x80,0xa2,0x40,0x92,0x40,0x4d,
- 0x40,0x20,0x80,0x1f,0x00,0x82,0x82,0x7c,
- 0x44,0x28,0x28,0x10,0x10,0xf0,0x88,0x88,
- 0x88,0xf0,0x88,0x88,0xf0,0x78,0x84,0x80,
- 0x80,0x80,0x80,0x84,0x78,0xf0,0x88,0x84,
- 0x84,0x84,0x84,0x88,0xf0,0xf8,0x80,0x80,
- 0x80,0xf8,0x80,0x80,0xf8,0x80,0x80,0x80,
- 0x80,0xf0,0x80,0x80,0xf8,0x74,0x8c,0x84,
- 0x8c,0x80,0x80,0x84,0x78,0x84,0x84,0x84,
- 0x84,0xfc,0x84,0x84,0x84,0x80,0x80,0x80,
- 0x80,0x80,0x80,0x80,0x80,0x60,0x90,0x10,
- 0x10,0x10,0x10,0x10,0x10,0x88,0x88,0x90,
- 0x90,0xe0,0xa0,0x90,0x88,0xf0,0x80,0x80,
- 0x80,0x80,0x80,0x80,0x80,0x92,0x92,0x92,
- 0xaa,0xaa,0xc6,0xc6,0x82,0x8c,0x8c,0x94,
- 0x94,0xa4,0xa4,0xc4,0xc4,0x78,0x84,0x84,
- 0x84,0x84,0x84,0x84,0x78,0x80,0x80,0x80,
- 0x80,0xf0,0x88,0x88,0xf0,0x02,0x7c,0x8c,
- 0x94,0x84,0x84,0x84,0x84,0x78,0x88,0x88,
- 0x88,0x88,0xf0,0x88,0x88,0xf0,0x70,0x88,
- 0x88,0x08,0x70,0x80,0x88,0x70,0x20,0x20,
- 0x20,0x20,0x20,0x20,0x20,0xf8,0x78,0x84,
- 0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x28,
- 0x28,0x44,0x44,0x44,0x82,0x82,0x22,0x00,
- 0x22,0x00,0x22,0x00,0x55,0x00,0x49,0x00,
- 0x49,0x00,0x88,0x80,0x88,0x80,0x88,0x88,
- 0x50,0x50,0x20,0x50,0x88,0x88,0x10,0x10,
- 0x10,0x28,0x28,0x44,0x44,0x82,0xf8,0x80,
- 0x40,0x20,0x20,0x10,0x08,0xf8,0xc0,0x80,
- 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xc0,
- 0x20,0x20,0x40,0x40,0x40,0x40,0x80,0x80,
- 0xc0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
- 0x40,0xc0,0x88,0x50,0x50,0x20,0x20,0xfc,
- 0x80,0x80,0x40,0x68,0x90,0x90,0x70,0x10,
- 0xe0,0xb0,0xc8,0x88,0x88,0xc8,0xb0,0x80,
- 0x80,0x60,0x90,0x80,0x80,0x90,0x60,0x68,
- 0x98,0x88,0x88,0x98,0x68,0x08,0x08,0x60,
- 0x90,0x80,0xf0,0x90,0x60,0x40,0x40,0x40,
- 0x40,0x40,0xe0,0x40,0x30,0x70,0x08,0x68,
- 0x98,0x88,0x88,0x98,0x68,0x88,0x88,0x88,
- 0x88,0xc8,0xb0,0x80,0x80,0x80,0x80,0x80,
- 0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x80,
- 0x80,0x80,0x80,0x80,0x00,0x80,0x90,0x90,
- 0xa0,0xc0,0xa0,0x90,0x80,0x80,0x80,0x80,
- 0x80,0x80,0x80,0x80,0x80,0x80,0x92,0x92,
- 0x92,0x92,0x92,0xec,0x88,0x88,0x88,0x88,
- 0xc8,0xb0,0x70,0x88,0x88,0x88,0x88,0x70,
- 0x80,0x80,0xb0,0xc8,0x88,0x88,0xc8,0xb0,
- 0x08,0x08,0x68,0x98,0x88,0x88,0x98,0x68,
- 0x80,0x80,0x80,0x80,0xc0,0xa0,0x60,0x90,
- 0x10,0x60,0x90,0x60,0x60,0x40,0x40,0x40,
- 0x40,0xe0,0x40,0x40,0x70,0x90,0x90,0x90,
- 0x90,0x90,0x20,0x20,0x50,0x50,0x88,0x88,
- 0x28,0x28,0x54,0x54,0x92,0x92,0x88,0x88,
- 0x50,0x20,0x50,0x88,0x80,0x40,0x40,0x60,
- 0xa0,0xa0,0x90,0x90,0xf0,0x80,0x40,0x20,
- 0x10,0xf0,0x20,0x40,0x40,0x40,0x40,0x80,
- 0x40,0x40,0x40,0x20,0x80,0x80,0x80,0x80,
- 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x40,
- 0x40,0x40,0x40,0x20,0x40,0x40,0x40,0x80,
- 0x98,0x64,0x80,0x80,0x80,0x80,0x80,0x80,
- 0x00,0x80,0x40,0x70,0xa8,0xa0,0xa0,0xa8,
- 0x70,0x10,0xb0,0x48,0x40,0x40,0xe0,0x40,
- 0x48,0x30,0x90,0x60,0x90,0x90,0x60,0x90,
- 0x20,0xf8,0x20,0xf8,0x50,0x50,0x88,0x88,
- 0x80,0x80,0x80,0x80,0x00,0x00,0x80,0x80,
- 0x80,0x80,0x70,0x88,0x18,0x70,0xc8,0x98,
- 0x70,0xc0,0x88,0x70,0xa0,0x38,0x44,0x9a,
- 0xa2,0x9a,0x44,0x38,0xe0,0x00,0xa0,0x20,
- 0xe0,0x28,0x50,0xa0,0x50,0x28,0x08,0x08,
- 0xf8,0xe0,0x38,0x44,0xaa,0xb2,0xba,0x44,
- 0x38,0xe0,0x60,0x90,0x90,0x60,0xf8,0x00,
- 0x20,0x20,0xf8,0x20,0x20,0xe0,0x40,0xa0,
- 0x60,0xc0,0x20,0x40,0xe0,0x80,0x40,0x80,
- 0x80,0xf0,0x90,0x90,0x90,0x90,0x90,0x28,
- 0x28,0x28,0x28,0x28,0x68,0xe8,0xe8,0xe8,
- 0x7c,0xc0,0xc0,0x40,0x40,0x40,0xc0,0x40,
- 0xe0,0x00,0xe0,0xa0,0xe0,0xa0,0x50,0x28,
- 0x50,0xa0,0x21,0x00,0x17,0x80,0x13,0x00,
- 0x09,0x00,0x48,0x00,0x44,0x00,0xc4,0x00,
- 0x42,0x00,0x27,0x12,0x15,0x0b,0x48,0x44,
- 0xc4,0x42,0x21,0x00,0x17,0x80,0x13,0x00,
- 0x09,0x00,0xc8,0x00,0x24,0x00,0x44,0x00,
- 0xe2,0x00,0x60,0x90,0x80,0x40,0x20,0x20,
- 0x00,0x20,0x82,0x82,0x7c,0x44,0x28,0x28,
- 0x10,0x10,0x00,0x10,0x20,0x82,0x82,0x7c,
- 0x44,0x28,0x28,0x10,0x10,0x00,0x10,0x08,
- 0x82,0x82,0x7c,0x44,0x28,0x28,0x10,0x10,
- 0x00,0x28,0x10,0x82,0x82,0x7c,0x44,0x28,
- 0x28,0x10,0x10,0x00,0x28,0x14,0x82,0x82,
- 0x7c,0x44,0x28,0x28,0x10,0x10,0x00,0x28,
- 0x82,0x82,0x7c,0x44,0x28,0x28,0x10,0x10,
- 0x10,0x28,0x10,0x8f,0x80,0x88,0x00,0x78,
- 0x00,0x48,0x00,0x2f,0x80,0x28,0x00,0x18,
- 0x00,0x1f,0x80,0x30,0x10,0x78,0x84,0x80,
- 0x80,0x80,0x80,0x84,0x78,0xf8,0x80,0x80,
- 0x80,0xf8,0x80,0x80,0xf8,0x00,0x20,0x40,
- 0xf8,0x80,0x80,0x80,0xf8,0x80,0x80,0xf8,
- 0x00,0x20,0x10,0xf8,0x80,0x80,0xf8,0x80,
- 0x80,0x80,0xf8,0x00,0x50,0x20,0xf8,0x80,
- 0x80,0x80,0xf8,0x80,0x80,0xf8,0x00,0x50,
- 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
- 0x00,0x40,0x80,0x80,0x80,0x80,0x80,0x80,
- 0x80,0x80,0x80,0x00,0x80,0x40,0x40,0x40,
- 0x40,0x40,0x40,0x40,0x40,0x40,0x00,0xa0,
- 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
- 0x40,0x00,0xa0,0x78,0x44,0x42,0x42,0xf2,
- 0x42,0x44,0x78,0x8c,0x8c,0x94,0x94,0xa4,
- 0xa4,0xc4,0xc4,0x00,0x50,0x28,0x78,0x84,
- 0x84,0x84,0x84,0x84,0x84,0x78,0x00,0x10,
- 0x20,0x78,0x84,0x84,0x84,0x84,0x84,0x84,
- 0x78,0x00,0x10,0x08,0x78,0x84,0x84,0x84,
- 0x84,0x84,0x84,0x78,0x00,0x28,0x10,0x78,
- 0x84,0x84,0x84,0x84,0x84,0x84,0x78,0x00,
- 0x50,0x28,0x78,0x84,0x84,0x84,0x84,0x84,
- 0x84,0x78,0x00,0x48,0x88,0x50,0x20,0x50,
- 0x88,0x80,0x78,0xc4,0xa4,0xa4,0x94,0x94,
- 0x8c,0x78,0x04,0x78,0x84,0x84,0x84,0x84,
- 0x84,0x84,0x84,0x00,0x10,0x20,0x78,0x84,
- 0x84,0x84,0x84,0x84,0x84,0x84,0x00,0x20,
- 0x10,0x78,0x84,0x84,0x84,0x84,0x84,0x84,
- 0x84,0x00,0x28,0x10,0x78,0x84,0x84,0x84,
- 0x84,0x84,0x84,0x84,0x00,0x48,0x10,0x10,
- 0x10,0x28,0x28,0x44,0x44,0x82,0x00,0x10,
- 0x08,0x80,0x80,0xf0,0x88,0x88,0xf0,0x80,
- 0x80,0xa0,0x90,0x90,0x90,0xa0,0x90,0x90,
- 0x60,0x68,0x90,0x90,0x70,0x10,0xe0,0x00,
- 0x20,0x40,0x68,0x90,0x90,0x70,0x10,0xe0,
- 0x00,0x20,0x10,0x68,0x90,0x90,0x70,0x10,
- 0xe0,0x00,0x50,0x20,0x68,0x90,0x90,0x70,
- 0x10,0xe0,0x00,0xa0,0x50,0x68,0x90,0x90,
- 0x70,0x10,0xe0,0x00,0x50,0x68,0x90,0x90,
- 0x70,0x10,0xe0,0x20,0x50,0x20,0x6c,0x92,
- 0x90,0x7e,0x12,0xec,0x60,0x20,0x60,0x90,
- 0x80,0x80,0x90,0x60,0x60,0x90,0x80,0xf0,
- 0x90,0x60,0x00,0x20,0x40,0x60,0x90,0x80,
- 0xf0,0x90,0x60,0x00,0x40,0x20,0x60,0x90,
- 0x80,0xf0,0x90,0x60,0x00,0x50,0x20,0x60,
- 0x90,0x80,0xf0,0x90,0x60,0x00,0x50,0x40,
- 0x40,0x40,0x40,0x40,0x40,0x00,0x40,0x80,
- 0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x80,
- 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,
- 0xa0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
- 0x00,0xa0,0x70,0x88,0x88,0x88,0x88,0x78,
- 0x90,0x60,0x50,0x90,0x90,0x90,0x90,0x90,
- 0xe0,0x00,0xa0,0x50,0x70,0x88,0x88,0x88,
- 0x88,0x70,0x00,0x20,0x40,0x70,0x88,0x88,
- 0x88,0x88,0x70,0x00,0x20,0x10,0x70,0x88,
- 0x88,0x88,0x88,0x70,0x00,0x50,0x20,0x70,
- 0x88,0x88,0x88,0x88,0x70,0x00,0x50,0x28,
- 0x70,0x88,0x88,0x88,0x88,0x70,0x00,0x50,
- 0x20,0x00,0xf8,0x00,0x20,0x70,0x88,0xc8,
- 0xa8,0x98,0x74,0x70,0x90,0x90,0x90,0x90,
- 0x90,0x00,0x20,0x40,0x70,0x90,0x90,0x90,
- 0x90,0x90,0x00,0x40,0x20,0x70,0x90,0x90,
- 0x90,0x90,0x90,0x00,0x50,0x20,0x70,0x90,
- 0x90,0x90,0x90,0x90,0x00,0x50,0x80,0x40,
- 0x40,0x60,0xa0,0xa0,0x90,0x90,0x00,0x20,
- 0x10,0x80,0x80,0xb0,0xc8,0x88,0x88,0xc8,
- 0xb0,0x80,0x80,0x80,0x40,0x40,0x60,0xa0,
- 0xa0,0x90,0x90,0x00,0x50,
-};
-
-BMF_FontData BMF_font_helv10 = {
- -1, -2,
- 10, 11,
- {
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0, 0, 0, 0, 12, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0, 0, 0, 0, 3, -1},
- {1, 8, -1, 0, 3, 0},
- {3, 2, -1, -6, 4, 8},
- {6, 7, 0, 0, 6, 10},
- {5, 9, 0, 1, 6, 17},
- {8, 8, 0, 0, 9, 26},
- {6, 8, -1, 0, 8, 34},
- {2, 3, -1, -5, 3, 42},
- {3, 10, 0, 2, 4, 45},
- {3, 10, -1, 2, 4, 55},
- {3, 3, 0, -5, 4, 65},
- {5, 5, 0, -1, 6, 68},
- {2, 3, 0, 2, 3, 73},
- {5, 1, -1, -3, 7, 76},
- {1, 1, -1, 0, 3, 77},
- {3, 8, 0, 0, 3, 78},
- {5, 8, 0, 0, 6, 86},
- {2, 8, -1, 0, 6, 94},
- {5, 8, 0, 0, 6, 102},
- {5, 8, 0, 0, 6, 110},
- {5, 8, 0, 0, 6, 118},
- {5, 8, 0, 0, 6, 126},
- {5, 8, 0, 0, 6, 134},
- {5, 8, 0, 0, 6, 142},
- {5, 8, 0, 0, 6, 150},
- {5, 8, 0, 0, 6, 158},
- {1, 6, -1, 0, 3, 166},
- {2, 8, 0, 2, 3, 172},
- {3, 5, -1, -1, 6, 180},
- {4, 3, 0, -2, 5, 185},
- {3, 5, -1, -1, 6, 188},
- {4, 8, -1, 0, 6, 193},
- {10, 10, 0, 2, 11, 201},
- {7, 8, 0, 0, 7, 221},
- {5, 8, -1, 0, 7, 229},
- {6, 8, -1, 0, 8, 237},
- {6, 8, -1, 0, 8, 245},
- {5, 8, -1, 0, 7, 253},
- {5, 8, -1, 0, 6, 261},
- {6, 8, -1, 0, 8, 269},
- {6, 8, -1, 0, 8, 277},
- {1, 8, -1, 0, 3, 285},
- {4, 8, 0, 0, 5, 293},
- {5, 8, -1, 0, 7, 301},
- {4, 8, -1, 0, 6, 309},
- {7, 8, -1, 0, 9, 317},
- {6, 8, -1, 0, 8, 325},
- {6, 8, -1, 0, 8, 333},
- {5, 8, -1, 0, 7, 341},
- {7, 9, -1, 1, 8, 349},
- {5, 8, -1, 0, 7, 358},
- {5, 8, -1, 0, 7, 366},
- {5, 8, 0, 0, 5, 374},
- {6, 8, -1, 0, 8, 382},
- {7, 8, 0, 0, 7, 390},
- {9, 8, 0, 0, 9, 398},
- {5, 8, -1, 0, 7, 414},
- {7, 8, 0, 0, 7, 422},
- {5, 8, -1, 0, 7, 430},
- {2, 10, -1, 2, 3, 438},
- {3, 8, 0, 0, 3, 448},
- {2, 10, 0, 2, 3, 456},
- {5, 5, 0, -3, 6, 466},
- {6, 1, 0, 2, 6, 471},
- {2, 3, 0, -5, 3, 472},
- {5, 6, 0, 0, 5, 475},
- {5, 8, 0, 0, 6, 481},
- {4, 6, 0, 0, 5, 489},
- {5, 8, 0, 0, 6, 495},
- {4, 6, 0, 0, 5, 503},
- {4, 8, 0, 0, 4, 509},
- {5, 8, 0, 2, 6, 517},
- {5, 8, 0, 0, 6, 525},
- {1, 8, 0, 0, 2, 533},
- {1, 9, 0, 1, 2, 541},
- {4, 8, 0, 0, 5, 550},
- {1, 8, 0, 0, 2, 558},
- {7, 6, 0, 0, 8, 566},
- {5, 6, 0, 0, 6, 572},
- {5, 6, 0, 0, 6, 578},
- {5, 8, 0, 2, 6, 584},
- {5, 8, 0, 2, 6, 592},
- {3, 6, 0, 0, 4, 600},
- {4, 6, 0, 0, 5, 606},
- {3, 8, 0, 0, 4, 612},
- {4, 6, 0, 0, 5, 620},
- {5, 6, 0, 0, 6, 626},
- {7, 6, 0, 0, 8, 632},
- {5, 6, 0, 0, 6, 638},
- {4, 8, 0, 2, 5, 644},
- {4, 6, 0, 0, 5, 652},
- {3, 10, 0, 2, 3, 658},
- {1, 10, -1, 2, 3, 668},
- {3, 10, 0, 2, 3, 678},
- {6, 2, 0, -3, 7, 688},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0, 0, 0, 0, 3, -1},
- {1, 8, -1, 2, 3, 690},
- {5, 8, 0, 1, 6, 698},
- {5, 8, 0, 0, 6, 706},
- {4, 6, 0, -1, 5, 714},
- {5, 8, 0, 0, 6, 720},
- {1, 10, -1, 2, 3, 728},
- {5, 10, 0, 2, 6, 738},
- {3, 1, 0, -7, 3, 748},
- {7, 7, -1, 0, 9, 749},
- {3, 5, 0, -3, 4, 756},
- {5, 5, 0, 0, 6, 761},
- {5, 3, -1, -2, 7, 766},
- {3, 1, 0, -3, 4, 769},
- {7, 7, -1, 0, 9, 770},
- {3, 1, 0, -7, 3, 777},
- {4, 4, 0, -3, 4, 778},
- {5, 7, 0, 0, 6, 782},
- {3, 4, 0, -3, 3, 789},
- {3, 4, 0, -3, 3, 793},
- {2, 2, 0, -6, 3, 797},
- {4, 8, 0, 2, 5, 799},
- {6, 10, 0, 2, 6, 807},
- {2, 1, 0, -3, 3, 817},
- {2, 2, 0, 2, 3, 818},
- {2, 4, 0, -3, 3, 820},
- {3, 5, 0, -3, 4, 824},
- {5, 5, 0, 0, 6, 829},
- {9, 8, 0, 0, 9, 834},
- {8, 8, 0, 0, 9, 850},
- {9, 8, 0, 0, 9, 858},
- {4, 8, -1, 2, 6, 874},
- {7, 11, 0, 0, 7, 882},
- {7, 11, 0, 0, 7, 893},
- {7, 11, 0, 0, 7, 904},
- {7, 11, 0, 0, 7, 915},
- {7, 10, 0, 0, 7, 926},
- {7, 11, 0, 0, 7, 936},
- {9, 8, 0, 0, 10, 947},
- {6, 10, -1, 2, 8, 963},
- {5, 11, -1, 0, 7, 973},
- {5, 11, -1, 0, 7, 984},
- {5, 11, -1, 0, 7, 995},
- {5, 10, -1, 0, 7, 1006},
- {2, 11, 0, 0, 3, 1016},
- {2, 11, -1, 0, 3, 1027},
- {3, 11, 0, 0, 3, 1038},
- {3, 10, 0, 0, 3, 1049},
- {7, 8, 0, 0, 8, 1059},
- {6, 11, -1, 0, 8, 1067},
- {6, 11, -1, 0, 8, 1078},
- {6, 11, -1, 0, 8, 1089},
- {6, 11, -1, 0, 8, 1100},
- {6, 11, -1, 0, 8, 1111},
- {6, 10, -1, 0, 8, 1122},
- {5, 5, 0, -1, 6, 1132},
- {6, 10, -1, 1, 8, 1137},
- {6, 11, -1, 0, 8, 1147},
- {6, 11, -1, 0, 8, 1158},
- {6, 11, -1, 0, 8, 1169},
- {6, 10, -1, 0, 8, 1180},
- {7, 11, 0, 0, 7, 1190},
- {5, 8, -1, 0, 7, 1201},
- {4, 8, 0, 0, 5, 1209},
- {5, 9, 0, 0, 5, 1217},
- {5, 9, 0, 0, 5, 1226},
- {5, 9, 0, 0, 5, 1235},
- {5, 9, 0, 0, 5, 1244},
- {5, 8, 0, 0, 5, 1253},
- {5, 9, 0, 0, 5, 1261},
- {7, 6, 0, 0, 8, 1270},
- {4, 8, 0, 2, 5, 1276},
- {4, 9, 0, 0, 5, 1284},
- {4, 9, 0, 0, 5, 1293},
- {4, 9, 0, 0, 5, 1302},
- {4, 8, 0, 0, 5, 1311},
- {2, 9, 1, 0, 2, 1319},
- {2, 9, 0, 0, 2, 1328},
- {3, 9, 1, 0, 2, 1337},
- {3, 8, 0, 0, 2, 1346},
- {5, 9, 0, 0, 6, 1354},
- {4, 9, 0, 0, 5, 1363},
- {5, 9, 0, 0, 6, 1372},
- {5, 9, 0, 0, 6, 1381},
- {5, 9, 0, 0, 6, 1390},
- {5, 9, 0, 0, 6, 1399},
- {5, 8, 0, 0, 6, 1408},
- {5, 5, 0, -1, 6, 1416},
- {6, 6, 0, 0, 6, 1421},
- {4, 9, 0, 0, 5, 1427},
- {4, 9, 0, 0, 5, 1436},
- {4, 9, 0, 0, 5, 1445},
- {4, 8, 0, 0, 5, 1454},
- {4, 11, 0, 2, 5, 1462},
- {5, 10, 0, 2, 6, 1473},
- {4, 10, 0, 2, 5, 1483},
- },
- bitmap_data
-};
-
-#endif
-
diff --git a/intern/bmfont/intern/BMF_font_helv12.cpp b/intern/bmfont/intern/BMF_font_helv12.cpp
deleted file mode 100644
index 29b08b659ee..00000000000
--- a/intern/bmfont/intern/BMF_font_helv12.cpp
+++ /dev/null
@@ -1,525 +0,0 @@
-/**
- * $Id$
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "BMF_FontData.h"
-#include "BMF_Settings.h"
-
-#if BMF_INCLUDE_HELV12
-
-static unsigned char bitmap_data[]= {
- 0x80,0x00,0x80,0x80,0x80,0x80,0x80,0x80,
- 0x80,0xa0,0xa0,0xa0,0x50,0x50,0x50,0xfc,
- 0x28,0xfc,0x28,0x28,0x20,0x70,0xa8,0xa8,
- 0x28,0x70,0xa0,0xa8,0x70,0x20,0x23,0x00,
- 0x14,0x80,0x14,0x80,0x13,0x00,0x08,0x00,
- 0x68,0x00,0x94,0x00,0x94,0x00,0x62,0x00,
- 0x72,0x8c,0x84,0x8a,0x50,0x30,0x48,0x48,
- 0x30,0x80,0x40,0xc0,0x20,0x40,0x40,0x80,
- 0x80,0x80,0x80,0x80,0x80,0x40,0x40,0x20,
- 0x80,0x40,0x40,0x20,0x20,0x20,0x20,0x20,
- 0x20,0x40,0x40,0x80,0xa0,0x40,0xa0,0x20,
- 0x20,0xf8,0x20,0x20,0x80,0x40,0x40,0xf8,
- 0x80,0x80,0x80,0x40,0x40,0x40,0x20,0x20,
- 0x10,0x10,0x70,0x88,0x88,0x88,0x88,0x88,
- 0x88,0x88,0x70,0x20,0x20,0x20,0x20,0x20,
- 0x20,0x20,0xe0,0x20,0xf8,0x80,0x80,0x40,
- 0x20,0x10,0x08,0x88,0x70,0x70,0x88,0x88,
- 0x08,0x08,0x30,0x08,0x88,0x70,0x08,0x08,
- 0xfc,0x88,0x48,0x28,0x28,0x18,0x08,0x70,
- 0x88,0x88,0x08,0x08,0xf0,0x80,0x80,0xf8,
- 0x70,0x88,0x88,0x88,0xc8,0xb0,0x80,0x88,
- 0x70,0x40,0x40,0x20,0x20,0x20,0x10,0x10,
- 0x08,0xf8,0x70,0x88,0x88,0x88,0x88,0x70,
- 0x88,0x88,0x70,0x70,0x88,0x08,0x08,0x78,
- 0x88,0x88,0x88,0x70,0x80,0x00,0x00,0x00,
- 0x00,0x80,0x80,0x40,0x40,0x00,0x00,0x00,
- 0x00,0x40,0x0c,0x30,0xc0,0x30,0x0c,0xf8,
- 0x00,0xf8,0xc0,0x30,0x0c,0x30,0xc0,0x20,
- 0x00,0x20,0x20,0x10,0x10,0x88,0x88,0x70,
- 0x3e,0x00,0x40,0x00,0x9b,0x00,0xa6,0x80,
- 0xa2,0x40,0xa2,0x40,0x92,0x40,0x4d,0x40,
- 0x60,0x80,0x1f,0x00,0x82,0x82,0x82,0x7c,
- 0x44,0x44,0x28,0x28,0x10,0xf8,0x84,0x84,
- 0x84,0xf8,0x84,0x84,0x84,0xf8,0x3c,0x42,
- 0x80,0x80,0x80,0x80,0x80,0x42,0x3c,0xf8,
- 0x84,0x82,0x82,0x82,0x82,0x82,0x84,0xf8,
- 0xfc,0x80,0x80,0x80,0xfc,0x80,0x80,0x80,
- 0xfc,0x80,0x80,0x80,0x80,0xf8,0x80,0x80,
- 0x80,0xfc,0x3a,0x46,0x82,0x82,0x8e,0x80,
- 0x80,0x42,0x3c,0x82,0x82,0x82,0x82,0xfe,
- 0x82,0x82,0x82,0x82,0x80,0x80,0x80,0x80,
- 0x80,0x80,0x80,0x80,0x80,0x70,0x88,0x88,
- 0x08,0x08,0x08,0x08,0x08,0x08,0x82,0x84,
- 0x88,0x90,0xe0,0xa0,0x90,0x88,0x84,0xf8,
- 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
- 0x88,0x80,0x88,0x80,0x94,0x80,0x94,0x80,
- 0xa2,0x80,0xa2,0x80,0xc1,0x80,0xc1,0x80,
- 0x80,0x80,0x82,0x86,0x8a,0x8a,0x92,0xa2,
- 0xa2,0xc2,0x82,0x3c,0x42,0x81,0x81,0x81,
- 0x81,0x81,0x42,0x3c,0x80,0x80,0x80,0x80,
- 0xf8,0x84,0x84,0x84,0xf8,0x3d,0x42,0x85,
- 0x89,0x81,0x81,0x81,0x42,0x3c,0x84,0x84,
- 0x84,0x88,0xf8,0x84,0x84,0x84,0xf8,0x78,
- 0x84,0x84,0x04,0x18,0x60,0x80,0x84,0x78,
- 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
- 0xfe,0x78,0x84,0x84,0x84,0x84,0x84,0x84,
- 0x84,0x84,0x10,0x10,0x28,0x28,0x44,0x44,
- 0x44,0x82,0x82,0x22,0x00,0x22,0x00,0x22,
- 0x00,0x55,0x00,0x55,0x00,0x49,0x00,0x88,
- 0x80,0x88,0x80,0x88,0x80,0x82,0x44,0x44,
- 0x28,0x10,0x28,0x44,0x44,0x82,0x10,0x10,
- 0x10,0x10,0x28,0x44,0x44,0x82,0x82,0xfe,
- 0x80,0x40,0x20,0x10,0x08,0x04,0x02,0xfe,
- 0xc0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
- 0x80,0x80,0x80,0xc0,0x10,0x10,0x20,0x20,
- 0x20,0x40,0x40,0x80,0x80,0xc0,0x40,0x40,
- 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
- 0xc0,0x88,0x50,0x20,0xfe,0xc0,0x80,0x40,
- 0x74,0x88,0x88,0x78,0x08,0x88,0x70,0xb0,
- 0xc8,0x88,0x88,0x88,0xc8,0xb0,0x80,0x80,
- 0x70,0x88,0x80,0x80,0x80,0x88,0x70,0x68,
- 0x98,0x88,0x88,0x88,0x98,0x68,0x08,0x08,
- 0x70,0x88,0x80,0xf8,0x88,0x88,0x70,0x40,
- 0x40,0x40,0x40,0x40,0x40,0xe0,0x40,0x30,
- 0x70,0x88,0x08,0x68,0x98,0x88,0x88,0x88,
- 0x98,0x68,0x88,0x88,0x88,0x88,0x88,0xc8,
- 0xb0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
- 0x80,0x80,0x00,0x80,0x80,0x40,0x40,0x40,
- 0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x40,
- 0x88,0x90,0xa0,0xc0,0xc0,0xa0,0x90,0x80,
- 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
- 0x80,0x80,0x92,0x92,0x92,0x92,0x92,0xda,
- 0xa4,0x88,0x88,0x88,0x88,0x88,0xc8,0xb0,
- 0x70,0x88,0x88,0x88,0x88,0x88,0x70,0x80,
- 0x80,0x80,0xb0,0xc8,0x88,0x88,0x88,0xc8,
- 0xb0,0x08,0x08,0x08,0x68,0x98,0x88,0x88,
- 0x88,0x98,0x68,0x80,0x80,0x80,0x80,0x80,
- 0xc0,0xa0,0x60,0x90,0x10,0x60,0x80,0x90,
- 0x60,0x60,0x40,0x40,0x40,0x40,0x40,0xe0,
- 0x40,0x40,0x68,0x98,0x88,0x88,0x88,0x88,
- 0x88,0x20,0x20,0x50,0x50,0x88,0x88,0x88,
- 0x22,0x00,0x22,0x00,0x55,0x00,0x49,0x00,
- 0x49,0x00,0x88,0x80,0x88,0x80,0x84,0x84,
- 0x48,0x30,0x30,0x48,0x84,0x80,0x40,0x20,
- 0x20,0x50,0x50,0x90,0x88,0x88,0x88,0xf0,
- 0x80,0x40,0x40,0x20,0x10,0xf0,0x30,0x40,
- 0x40,0x40,0x40,0x40,0x80,0x40,0x40,0x40,
- 0x40,0x30,0x80,0x80,0x80,0x80,0x80,0x80,
- 0x80,0x80,0x80,0x80,0x80,0x80,0xc0,0x20,
- 0x20,0x20,0x20,0x20,0x10,0x20,0x20,0x20,
- 0x20,0xc0,0x98,0x64,0x80,0x80,0x80,0x80,
- 0x80,0x80,0x80,0x80,0x00,0x80,0x40,0x70,
- 0xc8,0xa0,0xa0,0xa0,0xa8,0x70,0x10,0xb0,
- 0x48,0x20,0x20,0xf0,0x40,0x40,0x48,0x30,
- 0x84,0x78,0x48,0x48,0x78,0x84,0x20,0x20,
- 0xf8,0x20,0xf8,0x20,0x50,0x88,0x88,0x80,
- 0x80,0x80,0x80,0x00,0x00,0x00,0x80,0x80,
- 0x80,0x80,0x70,0x88,0x08,0x30,0x48,0x88,
- 0x88,0x90,0x60,0x80,0x88,0x70,0xa0,0x3e,
- 0x00,0x41,0x00,0x9c,0x80,0xa2,0x80,0xa0,
- 0x80,0xa2,0x80,0x9c,0x80,0x41,0x00,0x3e,
- 0x00,0xe0,0x00,0xa0,0x20,0xe0,0x28,0x50,
- 0xa0,0x50,0x28,0x04,0x04,0x04,0xfc,0xf0,
- 0x3e,0x00,0x41,0x00,0x94,0x80,0x94,0x80,
- 0x98,0x80,0x94,0x80,0x9c,0x80,0x41,0x00,
- 0x3e,0x00,0xf0,0x60,0x90,0x90,0x60,0xf8,
- 0x00,0x20,0x20,0xf8,0x20,0x20,0xf0,0x40,
- 0x20,0x90,0x60,0xc0,0x20,0x40,0x20,0xe0,
- 0x80,0x40,0x80,0x80,0x80,0xe8,0x98,0x88,
- 0x88,0x88,0x88,0x88,0x28,0x28,0x28,0x28,
- 0x28,0x28,0x68,0xe8,0xe8,0xe8,0x68,0x3c,
- 0x80,0xc0,0x20,0x20,0x40,0x40,0x40,0x40,
- 0xc0,0x40,0xe0,0x00,0xe0,0xa0,0xe0,0xa0,
- 0x50,0x28,0x50,0xa0,0x41,0x00,0x27,0x80,
- 0x15,0x00,0x13,0x00,0x49,0x00,0x44,0x00,
- 0x44,0x00,0xc2,0x00,0x41,0x00,0x47,0x80,
- 0x22,0x00,0x11,0x00,0x14,0x80,0x4b,0x00,
- 0x48,0x00,0x44,0x00,0xc2,0x00,0x41,0x00,
- 0x21,0x00,0x17,0x80,0x15,0x00,0x0b,0x00,
- 0xc9,0x00,0x24,0x00,0x44,0x00,0x22,0x00,
- 0xe1,0x00,0x70,0x88,0x88,0x40,0x40,0x20,
- 0x20,0x00,0x20,0x82,0x82,0x82,0x7c,0x44,
- 0x44,0x28,0x10,0x10,0x00,0x10,0x20,0x82,
- 0x82,0x82,0x7c,0x44,0x44,0x28,0x10,0x10,
- 0x00,0x10,0x08,0x82,0x82,0x82,0x7c,0x44,
- 0x44,0x28,0x10,0x10,0x00,0x28,0x10,0x82,
- 0x82,0x82,0x7c,0x44,0x44,0x28,0x10,0x10,
- 0x00,0x28,0x14,0x82,0x82,0x82,0x7c,0x44,
- 0x44,0x28,0x10,0x10,0x00,0x28,0x82,0x82,
- 0x82,0x7c,0x44,0x44,0x28,0x10,0x10,0x10,
- 0x28,0x10,0x8f,0x80,0x88,0x00,0x88,0x00,
- 0x78,0x00,0x4f,0x80,0x48,0x00,0x28,0x00,
- 0x28,0x00,0x1f,0x80,0x30,0x08,0x08,0x3c,
- 0x42,0x80,0x80,0x80,0x80,0x80,0x42,0x3c,
- 0xfc,0x80,0x80,0x80,0xfc,0x80,0x80,0x80,
- 0xfc,0x00,0x10,0x20,0xfc,0x80,0x80,0x80,
- 0xfc,0x80,0x80,0x80,0xfc,0x00,0x10,0x08,
- 0xfc,0x80,0x80,0x80,0xfc,0x80,0x80,0x80,
- 0xfc,0x00,0x28,0x10,0xfc,0x80,0x80,0x80,
- 0xfc,0x80,0x80,0x80,0xfc,0x00,0x28,0x40,
- 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
- 0x00,0x40,0x80,0x80,0x80,0x80,0x80,0x80,
- 0x80,0x80,0x80,0x80,0x00,0x80,0x40,0x40,
- 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
- 0x00,0xa0,0x40,0x40,0x40,0x40,0x40,0x40,
- 0x40,0x40,0x40,0x40,0x00,0xa0,0x7c,0x42,
- 0x41,0x41,0xf1,0x41,0x41,0x42,0x7c,0x82,
- 0x86,0x8a,0x8a,0x92,0xa2,0xa2,0xc2,0x82,
- 0x00,0x28,0x14,0x3c,0x42,0x81,0x81,0x81,
- 0x81,0x81,0x42,0x3c,0x00,0x08,0x10,0x3c,
- 0x42,0x81,0x81,0x81,0x81,0x81,0x42,0x3c,
- 0x00,0x08,0x04,0x3c,0x42,0x81,0x81,0x81,
- 0x81,0x81,0x42,0x3c,0x00,0x14,0x08,0x3c,
- 0x42,0x81,0x81,0x81,0x81,0x81,0x42,0x3c,
- 0x00,0x28,0x14,0x3c,0x42,0x81,0x81,0x81,
- 0x81,0x81,0x42,0x3c,0x00,0x24,0x88,0x50,
- 0x20,0x50,0x88,0x80,0x00,0x5e,0x00,0x21,
- 0x00,0x50,0x80,0x48,0x80,0x44,0x80,0x44,
- 0x80,0x42,0x80,0x21,0x00,0x1e,0x80,0x00,
- 0x40,0x78,0x84,0x84,0x84,0x84,0x84,0x84,
- 0x84,0x84,0x00,0x10,0x20,0x78,0x84,0x84,
- 0x84,0x84,0x84,0x84,0x84,0x84,0x00,0x10,
- 0x08,0x78,0x84,0x84,0x84,0x84,0x84,0x84,
- 0x84,0x84,0x00,0x28,0x10,0x78,0x84,0x84,
- 0x84,0x84,0x84,0x84,0x84,0x84,0x00,0x48,
- 0x10,0x10,0x10,0x10,0x28,0x44,0x44,0x82,
- 0x82,0x00,0x10,0x08,0x80,0x80,0xf8,0x84,
- 0x84,0x84,0xf8,0x80,0x80,0xb0,0x88,0x88,
- 0x88,0xb0,0x88,0x88,0x88,0x70,0x74,0x88,
- 0x88,0x78,0x08,0x88,0x70,0x00,0x10,0x20,
- 0x74,0x88,0x88,0x78,0x08,0x88,0x70,0x00,
- 0x20,0x10,0x74,0x88,0x88,0x78,0x08,0x88,
- 0x70,0x00,0x50,0x20,0x74,0x88,0x88,0x78,
- 0x08,0x88,0x70,0x00,0x50,0x28,0x74,0x88,
- 0x88,0x78,0x08,0x88,0x70,0x00,0x50,0x74,
- 0x88,0x88,0x78,0x08,0x88,0x70,0x30,0x48,
- 0x30,0x77,0x00,0x88,0x80,0x88,0x00,0x7f,
- 0x80,0x08,0x80,0x88,0x80,0x77,0x00,0x60,
- 0x10,0x20,0x70,0x88,0x80,0x80,0x80,0x88,
- 0x70,0x70,0x88,0x80,0xf8,0x88,0x88,0x70,
- 0x00,0x20,0x40,0x70,0x88,0x80,0xf8,0x88,
- 0x88,0x70,0x00,0x20,0x10,0x70,0x88,0x80,
- 0xf8,0x88,0x88,0x70,0x00,0x50,0x20,0x70,
- 0x88,0x80,0xf8,0x88,0x88,0x70,0x00,0x50,
- 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,
- 0x40,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
- 0x80,0x00,0x80,0x40,0x40,0x40,0x40,0x40,
- 0x40,0x40,0x40,0x00,0xa0,0x40,0x40,0x40,
- 0x40,0x40,0x40,0x40,0x40,0x00,0xa0,0x70,
- 0x88,0x88,0x88,0x88,0x78,0x08,0x50,0x30,
- 0x68,0x88,0x88,0x88,0x88,0x88,0xc8,0xb0,
- 0x00,0x50,0x28,0x70,0x88,0x88,0x88,0x88,
- 0x88,0x70,0x00,0x20,0x40,0x70,0x88,0x88,
- 0x88,0x88,0x88,0x70,0x00,0x20,0x10,0x70,
- 0x88,0x88,0x88,0x88,0x88,0x70,0x00,0x50,
- 0x20,0x70,0x88,0x88,0x88,0x88,0x88,0x70,
- 0x00,0x50,0x28,0x70,0x88,0x88,0x88,0x88,
- 0x88,0x70,0x00,0x50,0x20,0x00,0xf8,0x00,
- 0x20,0xb8,0x44,0x64,0x54,0x4c,0x44,0x3a,
- 0x68,0x98,0x88,0x88,0x88,0x88,0x88,0x00,
- 0x20,0x40,0x68,0x98,0x88,0x88,0x88,0x88,
- 0x88,0x00,0x20,0x10,0x68,0x98,0x88,0x88,
- 0x88,0x88,0x88,0x00,0x50,0x20,0x68,0x98,
- 0x88,0x88,0x88,0x88,0x88,0x00,0x50,0x80,
- 0x40,0x20,0x20,0x50,0x50,0x90,0x88,0x88,
- 0x88,0x00,0x20,0x10,0x80,0x80,0x80,0xb0,
- 0xc8,0x88,0x88,0x88,0xc8,0xb0,0x80,0x80,
- 0xc0,0x20,0x20,0x20,0x30,0x50,0x50,0x48,
- 0x88,0x88,0x00,0x50,
-};
-
-BMF_FontData BMF_font_helv12 = {
- 0, -3,
- 11, 12,
- {
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0, 0, 0, 0, 16, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0, 0, 0, 0, 4, -1},
- {1, 9, -1, 0, 3, 0},
- {3, 3, -1, -6, 5, 9},
- {6, 8, 0, 0, 7, 12},
- {5, 10, -1, 1, 7, 20},
- {9, 9, -1, 0, 11, 30},
- {7, 9, -1, 0, 9, 48},
- {2, 3, -1, -6, 3, 57},
- {3, 12, -1, 3, 4, 60},
- {3, 12, 0, 3, 4, 72},
- {3, 3, -1, -6, 5, 84},
- {5, 5, -1, -1, 7, 87},
- {2, 3, -1, 2, 4, 92},
- {5, 1, -1, -3, 8, 95},
- {1, 1, -1, 0, 3, 96},
- {4, 9, 0, 0, 4, 97},
- {5, 9, -1, 0, 7, 106},
- {3, 9, -1, 0, 7, 115},
- {5, 9, -1, 0, 7, 124},
- {5, 9, -1, 0, 7, 133},
- {6, 9, 0, 0, 7, 142},
- {5, 9, -1, 0, 7, 151},
- {5, 9, -1, 0, 7, 160},
- {5, 9, -1, 0, 7, 169},
- {5, 9, -1, 0, 7, 178},
- {5, 9, -1, 0, 7, 187},
- {1, 6, -1, 0, 3, 196},
- {2, 8, 0, 2, 3, 202},
- {6, 5, 0, -1, 7, 210},
- {5, 3, -1, -2, 7, 215},
- {6, 5, -1, -1, 7, 218},
- {5, 9, -1, 0, 7, 223},
- {10, 10, -1, 1, 12, 232},
- {7, 9, -1, 0, 9, 252},
- {6, 9, -1, 0, 8, 261},
- {7, 9, -1, 0, 9, 270},
- {7, 9, -1, 0, 9, 279},
- {6, 9, -1, 0, 8, 288},
- {6, 9, -1, 0, 8, 297},
- {7, 9, -1, 0, 9, 306},
- {7, 9, -1, 0, 9, 315},
- {1, 9, -1, 0, 3, 324},
- {5, 9, -1, 0, 7, 333},
- {7, 9, -1, 0, 8, 342},
- {5, 9, -1, 0, 7, 351},
- {9, 9, -1, 0, 11, 360},
- {7, 9, -1, 0, 9, 378},
- {8, 9, -1, 0, 10, 387},
- {6, 9, -1, 0, 8, 396},
- {8, 9, -1, 0, 10, 405},
- {6, 9, -1, 0, 8, 414},
- {6, 9, -1, 0, 8, 423},
- {7, 9, 0, 0, 7, 432},
- {6, 9, -1, 0, 8, 441},
- {7, 9, -1, 0, 9, 450},
- {9, 9, -1, 0, 11, 459},
- {7, 9, -1, 0, 9, 477},
- {7, 9, -1, 0, 9, 486},
- {7, 9, -1, 0, 9, 495},
- {2, 12, -1, 3, 3, 504},
- {4, 9, 0, 0, 4, 516},
- {2, 12, 0, 3, 3, 525},
- {5, 3, 0, -5, 6, 537},
- {7, 1, 0, 2, 7, 540},
- {2, 3, 0, -6, 3, 541},
- {6, 7, -1, 0, 7, 544},
- {5, 9, -1, 0, 7, 551},
- {5, 7, -1, 0, 7, 560},
- {5, 9, -1, 0, 7, 567},
- {5, 7, -1, 0, 7, 576},
- {4, 9, 0, 0, 3, 583},
- {5, 10, -1, 3, 7, 592},
- {5, 9, -1, 0, 7, 602},
- {1, 9, -1, 0, 3, 611},
- {2, 12, 0, 3, 3, 620},
- {5, 9, -1, 0, 6, 632},
- {1, 9, -1, 0, 3, 641},
- {7, 7, -1, 0, 9, 650},
- {5, 7, -1, 0, 7, 657},
- {5, 7, -1, 0, 7, 664},
- {5, 10, -1, 3, 7, 671},
- {5, 10, -1, 3, 7, 681},
- {3, 7, -1, 0, 4, 691},
- {4, 7, -1, 0, 6, 698},
- {3, 9, 0, 0, 3, 705},
- {5, 7, -1, 0, 7, 714},
- {5, 7, -1, 0, 7, 721},
- {9, 7, 0, 0, 9, 728},
- {6, 7, 0, 0, 6, 742},
- {5, 10, -1, 3, 7, 749},
- {4, 7, -1, 0, 6, 759},
- {4, 12, 0, 3, 4, 766},
- {1, 12, -1, 3, 3, 778},
- {4, 12, 0, 3, 4, 790},
- {6, 2, 0, -3, 7, 802},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0, 0, 0, 0, 4, -1},
- {1, 10, -1, 3, 3, 804},
- {5, 9, -1, 1, 7, 814},
- {5, 9, -1, 0, 7, 823},
- {6, 6, 0, -1, 7, 832},
- {5, 9, -1, 0, 7, 838},
- {1, 11, -1, 2, 3, 847},
- {5, 12, 0, 3, 6, 858},
- {3, 1, 0, -8, 3, 870},
- {9, 9, -1, 0, 11, 871},
- {3, 5, -1, -4, 5, 889},
- {5, 5, -1, -1, 7, 894},
- {6, 4, -1, -2, 8, 899},
- {4, 1, 0, -3, 5, 903},
- {9, 9, -1, 0, 11, 904},
- {4, 1, 0, -8, 4, 922},
- {4, 4, 0, -4, 5, 923},
- {5, 7, -1, 0, 7, 927},
- {4, 5, 0, -3, 4, 934},
- {3, 5, 0, -3, 4, 939},
- {2, 2, 0, -8, 2, 944},
- {5, 10, -1, 3, 7, 946},
- {6, 12, 0, 3, 7, 956},
- {1, 1, -1, -3, 3, 968},
- {3, 4, 0, 3, 3, 969},
- {2, 5, -1, -3, 4, 973},
- {3, 5, -1, -4, 5, 978},
- {5, 5, -1, -1, 7, 983},
- {9, 9, 0, 0, 10, 988},
- {9, 9, 0, 0, 10, 1006},
- {9, 9, 0, 0, 10, 1024},
- {5, 9, -1, 3, 7, 1042},
- {7, 12, -1, 0, 9, 1051},
- {7, 12, -1, 0, 9, 1063},
- {7, 12, -1, 0, 9, 1075},
- {7, 12, -1, 0, 9, 1087},
- {7, 11, -1, 0, 9, 1099},
- {7, 12, -1, 0, 9, 1110},
- {9, 9, -1, 0, 11, 1122},
- {7, 12, -1, 3, 9, 1140},
- {6, 12, -1, 0, 8, 1152},
- {6, 12, -1, 0, 8, 1164},
- {6, 12, -1, 0, 8, 1176},
- {6, 11, -1, 0, 8, 1188},
- {2, 12, 0, 0, 3, 1199},
- {2, 12, -1, 0, 3, 1211},
- {3, 12, 0, 0, 3, 1223},
- {3, 11, 0, 0, 3, 1235},
- {8, 9, 0, 0, 9, 1246},
- {7, 12, -1, 0, 9, 1255},
- {8, 12, -1, 0, 10, 1267},
- {8, 12, -1, 0, 10, 1279},
- {8, 12, -1, 0, 10, 1291},
- {8, 12, -1, 0, 10, 1303},
- {8, 11, -1, 0, 10, 1315},
- {5, 5, -1, -1, 7, 1326},
- {10, 11, 0, 1, 10, 1331},
- {6, 12, -1, 0, 8, 1353},
- {6, 12, -1, 0, 8, 1365},
- {6, 12, -1, 0, 8, 1377},
- {6, 11, -1, 0, 8, 1389},
- {7, 12, -1, 0, 9, 1400},
- {6, 9, -1, 0, 8, 1412},
- {5, 9, -1, 0, 7, 1421},
- {6, 10, -1, 0, 7, 1430},
- {6, 10, -1, 0, 7, 1440},
- {6, 10, -1, 0, 7, 1450},
- {6, 10, -1, 0, 7, 1460},
- {6, 9, -1, 0, 7, 1470},
- {6, 10, -1, 0, 7, 1479},
- {9, 7, -1, 0, 11, 1489},
- {5, 10, -1, 3, 7, 1503},
- {5, 10, -1, 0, 7, 1513},
- {5, 10, -1, 0, 7, 1523},
- {5, 10, -1, 0, 7, 1533},
- {5, 9, -1, 0, 7, 1543},
- {2, 10, 0, 0, 3, 1552},
- {2, 10, -1, 0, 3, 1562},
- {3, 10, 0, 0, 3, 1572},
- {3, 9, 0, 0, 3, 1582},
- {5, 10, -1, 0, 7, 1591},
- {5, 10, -1, 0, 7, 1601},
- {5, 10, -1, 0, 7, 1611},
- {5, 10, -1, 0, 7, 1621},
- {5, 10, -1, 0, 7, 1631},
- {5, 10, -1, 0, 7, 1641},
- {5, 9, -1, 0, 7, 1651},
- {5, 5, -1, -1, 7, 1660},
- {7, 7, 0, 0, 7, 1665},
- {5, 10, -1, 0, 7, 1672},
- {5, 10, -1, 0, 7, 1682},
- {5, 10, -1, 0, 7, 1692},
- {5, 9, -1, 0, 7, 1702},
- {5, 13, -1, 3, 7, 1711},
- {5, 12, -1, 3, 7, 1724},
- {5, 12, -1, 3, 7, 1736},
- },
- bitmap_data
-};
-
-#endif
-
diff --git a/intern/bmfont/intern/BMF_font_helvb10.cpp b/intern/bmfont/intern/BMF_font_helvb10.cpp
deleted file mode 100644
index cdd3656c5c0..00000000000
--- a/intern/bmfont/intern/BMF_font_helvb10.cpp
+++ /dev/null
@@ -1,492 +0,0 @@
-/**
- * $Id$
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "BMF_FontData.h"
-#include "BMF_Settings.h"
-
-#if BMF_INCLUDE_HELVB10
-
-static unsigned char bitmap_data[]= {
- 0x00,0xc0,0x00,0x80,0x80,0xc0,0xc0,0xc0,
- 0xc0,0xa0,0xa0,0xa0,0x50,0x50,0xfc,0x28,
- 0x7e,0x28,0x28,0x20,0x70,0xa8,0x28,0x38,
- 0x70,0xe0,0xa8,0x70,0x20,0x8c,0x56,0x2c,
- 0x10,0x10,0x68,0xb4,0x62,0x76,0xdc,0xcc,
- 0xde,0x70,0xd8,0xd8,0x70,0x80,0x40,0xc0,
- 0xc0,0x20,0x60,0x40,0xc0,0xc0,0xc0,0xc0,
- 0x40,0x60,0x20,0x80,0xc0,0x40,0x60,0x60,
- 0x60,0x60,0x40,0xc0,0x80,0xa0,0x40,0xa0,
- 0x30,0x30,0xfc,0x30,0x30,0x80,0x40,0xc0,
- 0xc0,0xf8,0xc0,0xc0,0x80,0x80,0x40,0x40,
- 0x20,0x20,0x10,0x10,0x70,0xd8,0xd8,0xd8,
- 0xd8,0xd8,0xd8,0x70,0x60,0x60,0x60,0x60,
- 0x60,0x60,0xe0,0x60,0xf8,0xc0,0x60,0x30,
- 0x18,0x18,0xd8,0x70,0x70,0xd8,0x18,0x18,
- 0x30,0x18,0xd8,0x70,0x18,0x18,0xfc,0x98,
- 0x58,0x38,0x18,0x08,0x70,0xd8,0x98,0x18,
- 0xf0,0xc0,0xc0,0xf8,0x70,0xd8,0xd8,0xd8,
- 0xf0,0xc0,0xd8,0x70,0x60,0x60,0x60,0x30,
- 0x30,0x18,0x18,0xf8,0x70,0xd8,0xd8,0xd8,
- 0x70,0xd8,0xd8,0x70,0x70,0xd8,0x18,0x78,
- 0xd8,0xd8,0xd8,0x70,0xc0,0xc0,0x00,0x00,
- 0xc0,0xc0,0x80,0x40,0xc0,0xc0,0x00,0x00,
- 0xc0,0xc0,0x30,0x60,0xc0,0x60,0x30,0xf8,
- 0x00,0xf8,0xc0,0x60,0x30,0x60,0xc0,0x60,
- 0x00,0x60,0x60,0x30,0x18,0xd8,0x70,0x3e,
- 0x00,0x40,0x00,0x9b,0x00,0xa4,0x80,0xa2,
- 0x40,0x92,0x40,0x4d,0x40,0x60,0x80,0x1f,
- 0x00,0xc6,0xc6,0xfe,0x6c,0x6c,0x6c,0x38,
- 0x38,0xf8,0xcc,0xcc,0xcc,0xf8,0xcc,0xcc,
- 0xf8,0x3c,0x66,0xc2,0xc0,0xc0,0xc2,0x66,
- 0x3c,0xf0,0xd8,0xcc,0xcc,0xcc,0xcc,0xd8,
- 0xf0,0xf8,0xc0,0xc0,0xc0,0xf8,0xc0,0xc0,
- 0xf8,0xc0,0xc0,0xc0,0xc0,0xf0,0xc0,0xc0,
- 0xf8,0x3a,0x66,0xc6,0xce,0xc0,0xc2,0x66,
- 0x3c,0xcc,0xcc,0xcc,0xcc,0xfc,0xcc,0xcc,
- 0xcc,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
- 0xc0,0x70,0xd8,0x18,0x18,0x18,0x18,0x18,
- 0x18,0xc6,0xcc,0xd8,0xf0,0xe0,0xf0,0xd8,
- 0xcc,0xf8,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
- 0xc0,0xc9,0x80,0xc9,0x80,0xdd,0x80,0xd5,
- 0x80,0xf7,0x80,0xe3,0x80,0xe3,0x80,0xc1,
- 0x80,0xc6,0xce,0xce,0xd6,0xd6,0xe6,0xe6,
- 0xc6,0x38,0x6c,0xc6,0xc6,0xc6,0xc6,0x6c,
- 0x38,0xc0,0xc0,0xc0,0xf8,0xcc,0xcc,0xcc,
- 0xf8,0x02,0x3c,0x6c,0xd6,0xc6,0xc6,0xc6,
- 0x6c,0x38,0xcc,0xcc,0xcc,0xf8,0xcc,0xcc,
- 0xcc,0xf8,0x78,0xcc,0x8c,0x1c,0x78,0xe0,
- 0xcc,0x78,0x30,0x30,0x30,0x30,0x30,0x30,
- 0x30,0xfc,0x78,0xcc,0xcc,0xcc,0xcc,0xcc,
- 0xcc,0xcc,0x10,0x38,0x38,0x6c,0x6c,0x6c,
- 0xc6,0xc6,0x33,0x00,0x33,0x00,0x7f,0x80,
- 0x6d,0x80,0x6d,0x80,0xcc,0xc0,0xcc,0xc0,
- 0xcc,0xc0,0xc6,0xc6,0x6c,0x38,0x38,0x6c,
- 0xc6,0xc6,0x18,0x18,0x18,0x3c,0x66,0x66,
- 0xc3,0xc3,0xfc,0xc0,0x60,0x70,0x30,0x18,
- 0x0c,0xfc,0xe0,0xc0,0xc0,0xc0,0xc0,0xc0,
- 0xc0,0xc0,0xc0,0xe0,0x10,0x10,0x20,0x20,
- 0x40,0x40,0x80,0x80,0xe0,0x60,0x60,0x60,
- 0x60,0x60,0x60,0x60,0x60,0xe0,0x90,0x90,
- 0xf0,0x60,0xfc,0xc0,0xc0,0x80,0x40,0x6c,
- 0xd8,0xd8,0x78,0x98,0x70,0xf0,0xd8,0xd8,
- 0xd8,0xd8,0xf0,0xc0,0xc0,0x70,0xd0,0xc0,
- 0xc0,0xd0,0x70,0x78,0xd8,0xd8,0xd8,0xd8,
- 0x78,0x18,0x18,0x70,0xd8,0xc0,0xf8,0xd8,
- 0x70,0x60,0x60,0x60,0x60,0x60,0xf0,0x60,
- 0x38,0x70,0x18,0x78,0xd8,0xd8,0xd8,0xd8,
- 0x68,0xd8,0xd8,0xd8,0xd8,0xd8,0xf0,0xc0,
- 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x00,
- 0xc0,0xc0,0x60,0x60,0x60,0x60,0x60,0x60,
- 0x60,0x00,0x60,0xcc,0xd8,0xf0,0xe0,0xf0,
- 0xd8,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
- 0xc0,0xc0,0xc0,0xdb,0xdb,0xdb,0xdb,0xdb,
- 0xb6,0xd8,0xd8,0xd8,0xd8,0xd8,0xb0,0x70,
- 0xd8,0xd8,0xd8,0xd8,0x70,0xc0,0xc0,0xf0,
- 0xd8,0xd8,0xd8,0xd8,0xb0,0x18,0x18,0x78,
- 0xd8,0xd8,0xd8,0xd8,0x68,0xc0,0xc0,0xc0,
- 0xc0,0xe0,0xb0,0x70,0xd8,0x18,0x70,0xd8,
- 0x70,0x30,0x60,0x60,0x60,0x60,0xf0,0x60,
- 0x60,0x68,0xd8,0xd8,0xd8,0xd8,0xd8,0x20,
- 0x70,0x50,0xd8,0xd8,0xd8,0x6c,0x6c,0x6c,
- 0xd6,0xd6,0xd6,0xcc,0xcc,0x78,0x30,0x78,
- 0xcc,0x60,0x30,0x30,0x78,0xd8,0xd8,0xd8,
- 0xd8,0xf8,0xc0,0x60,0x30,0x18,0xf8,0x30,
- 0x60,0x60,0x60,0x60,0xc0,0x60,0x60,0x60,
- 0x30,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
- 0x80,0x80,0x80,0xc0,0x60,0x60,0x60,0x60,
- 0x30,0x60,0x60,0x60,0xc0,0xb0,0x68,0x00,
- 0xc0,0xc0,0xc0,0xc0,0x40,0x40,0x00,0xc0,
- 0x40,0x70,0xd8,0xa0,0xa0,0xd8,0x70,0x10,
- 0xd8,0x68,0x60,0x60,0xf0,0x60,0x68,0x38,
- 0x84,0x78,0x48,0x48,0x78,0x84,0x30,0xfc,
- 0x30,0xfc,0x48,0xcc,0x84,0x84,0x80,0x80,
- 0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,
- 0x70,0x98,0x38,0x70,0xc8,0x98,0x70,0xe0,
- 0xc8,0x70,0xa0,0x3c,0x42,0x9d,0xa1,0xa5,
- 0x99,0x42,0x3c,0xe0,0x00,0xa0,0x20,0xe0,
- 0x6c,0xd8,0x6c,0x08,0x08,0xf8,0xf0,0x3c,
- 0x42,0xa5,0xb9,0xa5,0xbd,0x42,0x3c,0xe0,
- 0xc0,0xa0,0x60,0xfc,0x00,0x30,0x30,0xfc,
- 0x30,0x30,0xe0,0x40,0xa0,0x60,0xc0,0x20,
- 0x40,0xe0,0x80,0x40,0xc0,0xc0,0xe8,0xd8,
- 0xd8,0xd8,0xd8,0xd8,0x28,0x28,0x28,0x28,
- 0x28,0x68,0xe8,0xe8,0xe8,0x7c,0xc0,0xc0,
- 0x40,0x40,0x40,0xc0,0x40,0xe0,0x00,0xe0,
- 0xa0,0xe0,0xd8,0x6c,0xd8,0x42,0x2f,0x26,
- 0x12,0x48,0x48,0xc4,0x44,0x4e,0x24,0x2a,
- 0x16,0x48,0x48,0xc4,0x44,0x42,0x2f,0x26,
- 0x12,0xc8,0x28,0x44,0xe4,0x70,0xd8,0xc0,
- 0x60,0x30,0x30,0x00,0x30,0xc6,0xc6,0xfe,
- 0x6c,0x6c,0x6c,0x38,0x38,0x00,0x10,0x20,
- 0xc6,0xc6,0xfe,0x6c,0x6c,0x6c,0x38,0x38,
- 0x00,0x10,0x08,0xc6,0xc6,0xfe,0x6c,0x6c,
- 0x6c,0x38,0x38,0x00,0x28,0x10,0xc6,0xc6,
- 0xfe,0x6c,0x6c,0x6c,0x38,0x38,0x00,0x28,
- 0x14,0xc6,0xc6,0xfe,0x6c,0x6c,0x6c,0x38,
- 0x38,0x00,0x28,0xc6,0xc6,0xfe,0x6c,0x6c,
- 0x6c,0x38,0x38,0x10,0x28,0x10,0xcf,0x80,
- 0xcc,0x00,0xfc,0x00,0x6c,0x00,0x6f,0x80,
- 0x6c,0x00,0x3c,0x00,0x3f,0x80,0x30,0x10,
- 0x3c,0x66,0xc2,0xc0,0xc0,0xc2,0x66,0x3c,
- 0xf8,0xc0,0xc0,0xc0,0xf8,0xc0,0xc0,0xf8,
- 0x00,0x20,0x40,0xf8,0xc0,0xc0,0xc0,0xf8,
- 0xc0,0xc0,0xf8,0x00,0x20,0x10,0xf8,0xc0,
- 0xc0,0xc0,0xf8,0xc0,0xc0,0xf8,0x00,0x50,
- 0x20,0xf8,0xc0,0xc0,0xc0,0xf8,0xc0,0xc0,
- 0xf8,0x00,0x50,0xc0,0xc0,0xc0,0xc0,0xc0,
- 0xc0,0xc0,0xc0,0x00,0x40,0x80,0xc0,0xc0,
- 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x00,0x80,
- 0x40,0x60,0x60,0x60,0x60,0x60,0x60,0x60,
- 0x60,0x00,0xa0,0x40,0x60,0x60,0x60,0x60,
- 0x60,0x60,0x60,0x60,0x00,0x90,0x78,0x6c,
- 0x66,0x66,0xf6,0x66,0x6c,0x78,0xc6,0xce,
- 0xce,0xd6,0xd6,0xe6,0xe6,0xc6,0x00,0x28,
- 0x14,0x38,0x6c,0xc6,0xc6,0xc6,0xc6,0x6c,
- 0x38,0x00,0x08,0x10,0x38,0x6c,0xc6,0xc6,
- 0xc6,0xc6,0x6c,0x38,0x00,0x10,0x08,0x38,
- 0x6c,0xc6,0xc6,0xc6,0xc6,0x6c,0x38,0x00,
- 0x28,0x10,0x38,0x6c,0xc6,0xc6,0xc6,0xc6,
- 0x6c,0x38,0x00,0x28,0x14,0x38,0x6c,0xc6,
- 0xc6,0xc6,0xc6,0x6c,0x38,0x00,0x28,0xcc,
- 0x78,0x30,0x78,0xcc,0xb8,0x6c,0xe6,0xd6,
- 0xd6,0xce,0x6c,0x3a,0x78,0xcc,0xcc,0xcc,
- 0xcc,0xcc,0xcc,0xcc,0x00,0x10,0x20,0x78,
- 0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0x00,
- 0x10,0x08,0x78,0xcc,0xcc,0xcc,0xcc,0xcc,
- 0xcc,0xcc,0x00,0x50,0x20,0x78,0xcc,0xcc,
- 0xcc,0xcc,0xcc,0xcc,0xcc,0x00,0x48,0x18,
- 0x18,0x18,0x3c,0x66,0x66,0xc3,0xc3,0x00,
- 0x08,0x04,0xc0,0xc0,0xf8,0xcc,0xcc,0xcc,
- 0xf8,0xc0,0xd0,0xc8,0xc8,0xc8,0xd0,0xc8,
- 0xc8,0x70,0x6c,0xd8,0xd8,0x78,0x98,0x70,
- 0x00,0x10,0x20,0x6c,0xd8,0xd8,0x78,0x98,
- 0x70,0x00,0x20,0x10,0x6c,0xd8,0xd8,0x78,
- 0x98,0x70,0x00,0x50,0x20,0x6c,0xd8,0xd8,
- 0x78,0x98,0x70,0x00,0x50,0x28,0x6c,0xd8,
- 0xd8,0x78,0x98,0x70,0x00,0x50,0x6c,0xd8,
- 0xd8,0x78,0x98,0x70,0x20,0x50,0x20,0x6e,
- 0xdb,0xd8,0x7f,0x9b,0x7e,0x60,0x20,0x70,
- 0xd0,0xc0,0xc0,0xd0,0x70,0x70,0xd8,0xc0,
- 0xf8,0xd8,0x70,0x00,0x20,0x40,0x70,0xd8,
- 0xc0,0xf8,0xd8,0x70,0x00,0x20,0x10,0x70,
- 0xd8,0xc0,0xf8,0xd8,0x70,0x00,0x50,0x20,
- 0x70,0xd8,0xc0,0xf8,0xd8,0x70,0x00,0x50,
- 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x00,0x40,
- 0x80,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x00,
- 0x80,0x40,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
- 0x00,0xa0,0x40,0xc0,0xc0,0xc0,0xc0,0xc0,
- 0xc0,0x00,0xa0,0x70,0xd8,0xd8,0xd8,0xd8,
- 0x70,0xa0,0x60,0x50,0xd8,0xd8,0xd8,0xd8,
- 0xd8,0xb0,0x00,0xa0,0x50,0x70,0xd8,0xd8,
- 0xd8,0xd8,0x70,0x00,0x20,0x40,0x70,0xd8,
- 0xd8,0xd8,0xd8,0x70,0x00,0x20,0x10,0x70,
- 0xd8,0xd8,0xd8,0xd8,0x70,0x00,0x50,0x20,
- 0x70,0xd8,0xd8,0xd8,0xd8,0x70,0x00,0xa0,
- 0x50,0x70,0xd8,0xd8,0xd8,0xd8,0x70,0x00,
- 0x50,0x30,0x00,0xfc,0x00,0x30,0xb8,0x6c,
- 0x6c,0x7c,0x6c,0x3a,0x68,0xd8,0xd8,0xd8,
- 0xd8,0xd8,0x00,0x20,0x40,0x68,0xd8,0xd8,
- 0xd8,0xd8,0xd8,0x00,0x20,0x10,0x68,0xd8,
- 0xd8,0xd8,0xd8,0xd8,0x00,0x50,0x20,0x68,
- 0xd8,0xd8,0xd8,0xd8,0xd8,0x00,0x50,0x60,
- 0x30,0x30,0x78,0xd8,0xd8,0xd8,0xd8,0x00,
- 0x20,0x10,0xc0,0xc0,0xf0,0xd8,0xc8,0xc8,
- 0xd8,0xf0,0xc0,0xc0,0x60,0x30,0x30,0x78,
- 0xd8,0xd8,0xd8,0xd8,0x00,0x50,
-};
-
-BMF_FontData BMF_font_helvb10 = {
- -1, -2,
- 10, 11,
- {
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0, 0, 0, 0, 12, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {1, 1, 0, 0, 3, 0},
- {2, 8, -1, 0, 4, 1},
- {3, 3, -1, -5, 5, 9},
- {7, 7, 1, 0, 6, 12},
- {5, 10, 0, 1, 6, 19},
- {7, 8, 0, 0, 8, 29},
- {7, 8, 0, 0, 8, 37},
- {2, 4, 0, -4, 3, 45},
- {3, 10, 0, 2, 4, 49},
- {3, 10, 0, 2, 4, 59},
- {3, 3, 0, -5, 4, 69},
- {6, 5, 0, -1, 6, 72},
- {2, 4, 0, 2, 3, 77},
- {5, 1, -1, -3, 7, 81},
- {2, 2, 0, 0, 3, 82},
- {4, 8, 0, 0, 4, 84},
- {5, 8, 0, 0, 6, 92},
- {3, 8, -1, 0, 6, 100},
- {5, 8, 0, 0, 6, 108},
- {5, 8, 0, 0, 6, 116},
- {6, 8, 0, 0, 6, 124},
- {5, 8, 0, 0, 6, 132},
- {5, 8, 0, 0, 6, 140},
- {5, 8, 0, 0, 6, 148},
- {5, 8, 0, 0, 6, 156},
- {5, 8, 0, 0, 6, 164},
- {2, 6, 0, 0, 3, 172},
- {2, 8, 0, 2, 3, 178},
- {4, 5, 0, -1, 5, 186},
- {5, 3, 0, -2, 6, 191},
- {4, 5, 0, -1, 5, 194},
- {5, 8, 0, 0, 6, 199},
- {10, 9, 0, 1, 11, 207},
- {7, 8, 0, 0, 8, 225},
- {6, 8, 0, 0, 7, 233},
- {7, 8, 0, 0, 8, 241},
- {6, 8, 0, 0, 7, 249},
- {5, 8, 0, 0, 6, 257},
- {5, 8, 0, 0, 6, 265},
- {7, 8, 0, 0, 8, 273},
- {6, 8, 0, 0, 7, 281},
- {2, 8, 0, 0, 3, 289},
- {5, 8, 0, 0, 6, 297},
- {7, 8, 0, 0, 7, 305},
- {5, 8, 0, 0, 6, 313},
- {9, 8, 0, 0, 10, 321},
- {7, 8, 0, 0, 8, 337},
- {7, 8, 0, 0, 8, 345},
- {6, 8, 0, 0, 7, 353},
- {7, 9, 0, 1, 8, 361},
- {6, 8, 0, 0, 7, 370},
- {6, 8, 0, 0, 7, 378},
- {6, 8, 0, 0, 7, 386},
- {6, 8, 0, 0, 7, 394},
- {7, 8, 0, 0, 8, 402},
- {10, 8, 0, 0, 11, 410},
- {7, 8, 0, 0, 8, 426},
- {8, 8, 0, 0, 9, 434},
- {6, 8, 0, 0, 7, 442},
- {3, 10, 0, 2, 4, 450},
- {4, 8, 0, 0, 4, 460},
- {3, 10, 0, 2, 4, 468},
- {4, 4, 0, -4, 5, 478},
- {6, 1, 0, 2, 6, 482},
- {2, 4, 0, -4, 3, 483},
- {6, 6, 0, 0, 6, 487},
- {5, 8, 0, 0, 6, 493},
- {4, 6, 0, 0, 5, 501},
- {5, 8, 0, 0, 6, 507},
- {5, 6, 0, 0, 6, 515},
- {5, 8, 1, 0, 4, 521},
- {5, 8, 0, 2, 6, 529},
- {5, 8, 0, 0, 6, 537},
- {2, 8, 0, 0, 3, 545},
- {3, 10, 1, 2, 3, 553},
- {6, 8, 0, 0, 6, 563},
- {2, 8, 0, 0, 3, 571},
- {8, 6, 0, 0, 9, 579},
- {5, 6, 0, 0, 6, 585},
- {5, 6, 0, 0, 6, 591},
- {5, 8, 0, 2, 6, 597},
- {5, 8, 0, 2, 6, 605},
- {4, 6, 0, 0, 4, 613},
- {5, 6, 0, 0, 6, 619},
- {4, 8, 1, 0, 4, 625},
- {5, 6, 0, 0, 6, 633},
- {5, 6, 0, 0, 6, 639},
- {7, 6, 0, 0, 8, 645},
- {6, 6, 0, 0, 7, 651},
- {5, 8, 0, 2, 6, 657},
- {5, 6, 0, 0, 6, 665},
- {4, 10, 0, 2, 5, 671},
- {1, 10, -1, 2, 3, 681},
- {4, 10, 0, 2, 5, 691},
- {5, 2, 0, -3, 6, 701},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {1, 1, 0, 0, 3, 703},
- {2, 8, -1, 2, 4, 704},
- {5, 8, 0, 1, 6, 712},
- {5, 8, 0, 0, 6, 720},
- {6, 6, 0, -1, 6, 728},
- {6, 8, 0, 0, 7, 734},
- {1, 10, -1, 2, 3, 742},
- {5, 10, 0, 2, 6, 752},
- {3, 1, 0, -7, 3, 762},
- {8, 8, -1, 0, 10, 763},
- {3, 5, -1, -3, 5, 771},
- {6, 3, 0, -1, 7, 776},
- {5, 3, -1, -2, 7, 779},
- {4, 1, 0, -3, 5, 782},
- {8, 8, -1, 0, 10, 783},
- {3, 1, 0, -7, 3, 791},
- {3, 3, 0, -5, 4, 792},
- {6, 7, 0, 0, 6, 795},
- {3, 4, 0, -4, 3, 802},
- {3, 4, 0, -4, 3, 806},
- {2, 2, 0, -7, 3, 810},
- {5, 8, 0, 2, 6, 812},
- {6, 10, 0, 2, 6, 820},
- {2, 1, 0, -3, 3, 830},
- {2, 2, 0, 2, 3, 831},
- {2, 4, 0, -4, 3, 833},
- {3, 5, -1, -3, 5, 837},
- {6, 3, 0, -1, 7, 842},
- {8, 8, 0, 0, 9, 845},
- {7, 8, 0, 0, 9, 853},
- {8, 8, 0, 0, 9, 861},
- {5, 8, 0, 2, 6, 869},
- {7, 11, 0, 0, 8, 877},
- {7, 11, 0, 0, 8, 888},
- {7, 11, 0, 0, 8, 899},
- {7, 11, 0, 0, 8, 910},
- {7, 10, 0, 0, 8, 921},
- {7, 11, 0, 0, 8, 931},
- {9, 8, 0, 0, 10, 942},
- {7, 10, 0, 2, 8, 958},
- {5, 11, 0, 0, 6, 968},
- {5, 11, 0, 0, 6, 979},
- {5, 11, 0, 0, 6, 990},
- {5, 10, 0, 0, 6, 1001},
- {2, 11, 0, 0, 3, 1011},
- {2, 11, 0, 0, 3, 1022},
- {3, 11, 1, 0, 3, 1033},
- {4, 10, 1, 0, 3, 1044},
- {7, 8, 1, 0, 7, 1054},
- {7, 11, 0, 0, 8, 1062},
- {7, 11, 0, 0, 8, 1073},
- {7, 11, 0, 0, 8, 1084},
- {7, 11, 0, 0, 8, 1095},
- {7, 11, 0, 0, 8, 1106},
- {7, 10, 0, 0, 8, 1117},
- {6, 5, 0, -1, 6, 1127},
- {7, 8, 0, 0, 8, 1132},
- {6, 11, 0, 0, 7, 1140},
- {6, 11, 0, 0, 7, 1151},
- {6, 11, 0, 0, 7, 1162},
- {6, 10, 0, 0, 7, 1173},
- {8, 11, 0, 0, 9, 1183},
- {6, 8, 0, 0, 7, 1194},
- {5, 8, 0, 0, 6, 1202},
- {6, 9, 0, 0, 6, 1210},
- {6, 9, 0, 0, 6, 1219},
- {6, 9, 0, 0, 6, 1228},
- {6, 9, 0, 0, 6, 1237},
- {6, 8, 0, 0, 6, 1246},
- {6, 9, 0, 0, 6, 1254},
- {8, 6, 0, 0, 9, 1263},
- {4, 8, 0, 2, 5, 1269},
- {5, 9, 0, 0, 6, 1277},
- {5, 9, 0, 0, 6, 1286},
- {5, 9, 0, 0, 6, 1295},
- {5, 8, 0, 0, 6, 1304},
- {2, 9, 0, 0, 3, 1312},
- {2, 9, 0, 0, 3, 1321},
- {3, 9, 0, 0, 3, 1330},
- {3, 8, 0, 0, 3, 1339},
- {5, 9, 0, 0, 6, 1347},
- {5, 9, 0, 0, 6, 1356},
- {5, 9, 0, 0, 6, 1365},
- {5, 9, 0, 0, 6, 1374},
- {5, 9, 0, 0, 6, 1383},
- {5, 9, 0, 0, 6, 1392},
- {5, 8, 0, 0, 6, 1401},
- {6, 5, 0, -1, 6, 1409},
- {7, 6, 1, 0, 6, 1414},
- {5, 9, 0, 0, 6, 1420},
- {5, 9, 0, 0, 6, 1429},
- {5, 9, 0, 0, 6, 1438},
- {5, 8, 0, 0, 6, 1447},
- {5, 11, 0, 2, 6, 1455},
- {5, 10, 0, 2, 6, 1466},
- {5, 10, 0, 2, 6, 1476},
- },
- bitmap_data
-};
-
-#endif
-
diff --git a/intern/bmfont/intern/BMF_font_helvb12.cpp b/intern/bmfont/intern/BMF_font_helvb12.cpp
deleted file mode 100644
index 8b56bdceee7..00000000000
--- a/intern/bmfont/intern/BMF_font_helvb12.cpp
+++ /dev/null
@@ -1,565 +0,0 @@
-/**
- * $Id$
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "BMF_FontData.h"
-#include "BMF_Settings.h"
-
-#if BMF_INCLUDE_HELVB12
-
-static unsigned char bitmap_data[]= {
- 0x00,0xc0,0xc0,0x00,0xc0,0xc0,0xc0,0xc0,
- 0xc0,0xc0,0xc0,0xc0,0xa0,0xa0,0xa0,0x6c,
- 0x00,0x6c,0x00,0x6c,0x00,0xff,0x00,0x36,
- 0x00,0x36,0x00,0x36,0x00,0x7f,0x80,0x1b,
- 0x00,0x1b,0x00,0x1b,0x00,0x30,0x30,0x78,
- 0xec,0xac,0x3c,0x38,0x70,0xf0,0xd4,0xdc,
- 0x78,0x30,0x63,0x80,0x37,0xc0,0x36,0xc0,
- 0x1f,0xc0,0x1b,0x80,0x0c,0x00,0x76,0x00,
- 0xfe,0x00,0xdb,0x00,0xfb,0x00,0x71,0x80,
- 0x73,0x80,0xff,0x00,0xce,0x00,0xcf,0x00,
- 0xdd,0x80,0x79,0x80,0x38,0x00,0x6c,0x00,
- 0x6c,0x00,0x7c,0x00,0x38,0x00,0x80,0x40,
- 0xc0,0xc0,0x30,0x60,0x60,0xc0,0xc0,0xc0,
- 0xc0,0xc0,0xc0,0xc0,0xc0,0x60,0x60,0x30,
- 0xc0,0x60,0x60,0x30,0x30,0x30,0x30,0x30,
- 0x30,0x30,0x30,0x60,0x60,0xc0,0xd8,0x70,
- 0x70,0xf8,0x20,0x30,0x30,0xfc,0xfc,0x30,
- 0x30,0x80,0x40,0xc0,0xc0,0xfc,0xfc,0xc0,
- 0xc0,0xc0,0xc0,0xc0,0x60,0x60,0x60,0x20,
- 0x30,0x30,0x30,0x18,0x18,0x18,0x78,0xfc,
- 0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xfc,
- 0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
- 0x30,0xf0,0xf0,0x30,0xfc,0xfc,0xc0,0x60,
- 0x70,0x38,0x18,0xcc,0xcc,0xfc,0x78,0x78,
- 0xfc,0xcc,0xcc,0x0c,0x38,0x38,0x0c,0xcc,
- 0xfc,0x78,0x0c,0x0c,0xfe,0xfe,0xcc,0x6c,
- 0x6c,0x3c,0x3c,0x1c,0x1c,0x78,0xfc,0xcc,
- 0xcc,0x0c,0xfc,0xf8,0xc0,0xc0,0xfc,0xfc,
- 0x78,0xfc,0xcc,0xcc,0xcc,0xfc,0xf8,0xc0,
- 0xcc,0xfc,0x78,0x60,0x60,0x60,0x30,0x30,
- 0x30,0x18,0x18,0x0c,0xfc,0xfc,0x78,0xfc,
- 0xcc,0xcc,0xcc,0x78,0x78,0xcc,0xcc,0xfc,
- 0x78,0x78,0xfc,0xcc,0x0c,0x7c,0xfc,0xcc,
- 0xcc,0xcc,0xfc,0x78,0xc0,0xc0,0x00,0x00,
- 0x00,0x00,0xc0,0xc0,0x80,0x40,0xc0,0xc0,
- 0x00,0x00,0x00,0x00,0xc0,0xc0,0x0c,0x38,
- 0xe0,0xe0,0x38,0x0c,0xfc,0xfc,0x00,0xfc,
- 0xfc,0xc0,0x70,0x1c,0x1c,0x70,0xc0,0x30,
- 0x30,0x00,0x30,0x30,0x38,0x1c,0xcc,0xcc,
- 0xfc,0x78,0x1f,0x00,0x71,0x80,0x40,0x00,
- 0xdd,0x80,0xb6,0xc0,0xb2,0x40,0xb3,0x60,
- 0xdb,0x20,0x4d,0xa0,0x60,0x40,0x39,0xc0,
- 0x0f,0x00,0xc3,0xc3,0xff,0x7e,0x66,0x66,
- 0x3c,0x3c,0x3c,0x18,0x18,0xf8,0xfc,0xcc,
- 0xcc,0xcc,0xf8,0xf8,0xcc,0xcc,0xfc,0xf8,
- 0x78,0xfc,0xcc,0xc0,0xc0,0xc0,0xc0,0xc0,
- 0xcc,0xfc,0x78,0xf8,0xfc,0xce,0xc6,0xc6,
- 0xc6,0xc6,0xc6,0xce,0xfc,0xf8,0xfc,0xfc,
- 0xc0,0xc0,0xc0,0xf8,0xf8,0xc0,0xc0,0xfc,
- 0xfc,0xc0,0xc0,0xc0,0xc0,0xc0,0xf8,0xf8,
- 0xc0,0xc0,0xfc,0xfc,0x76,0xfe,0xc6,0xc6,
- 0xde,0xde,0xc0,0xc0,0xc6,0xfe,0x7c,0xc6,
- 0xc6,0xc6,0xc6,0xc6,0xfe,0xfe,0xc6,0xc6,
- 0xc6,0xc6,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
- 0xc0,0xc0,0xc0,0xc0,0xc0,0x70,0xf8,0xd8,
- 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
- 0xc6,0xce,0xcc,0xd8,0xf8,0xf0,0xf0,0xd8,
- 0xcc,0xcc,0xc6,0xfc,0xfc,0xc0,0xc0,0xc0,
- 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc9,0x80,
- 0xc9,0x80,0xdd,0x80,0xdd,0x80,0xf7,0x80,
- 0xf7,0x80,0xe3,0x80,0xe3,0x80,0xe3,0x80,
- 0xc1,0x80,0xc1,0x80,0xc6,0xc6,0xce,0xce,
- 0xde,0xd6,0xf6,0xe6,0xe6,0xc6,0xc6,0x7c,
- 0xfe,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,
- 0xfe,0x7c,0xc0,0xc0,0xc0,0xc0,0xfc,0xfe,
- 0xc6,0xc6,0xc6,0xfe,0xfc,0x06,0x7e,0xfc,
- 0xce,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xfe,
- 0x7c,0xc6,0xc6,0xc6,0xce,0xfc,0xfc,0xc6,
- 0xc6,0xc6,0xfe,0xfc,0x78,0xfc,0xcc,0x0c,
- 0x1c,0x78,0xe0,0xc0,0xcc,0xfc,0x78,0x30,
- 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
- 0xfc,0xfc,0x7c,0xfe,0xc6,0xc6,0xc6,0xc6,
- 0xc6,0xc6,0xc6,0xc6,0xc6,0x18,0x18,0x18,
- 0x3c,0x3c,0x3c,0x66,0x66,0x66,0xc3,0xc3,
- 0x33,0x00,0x33,0x00,0x33,0x00,0x3b,0x00,
- 0x7f,0x80,0x6d,0x80,0x6d,0x80,0x6d,0x80,
- 0xcc,0xc0,0xcc,0xc0,0xcc,0xc0,0xc3,0xc3,
- 0x66,0x7e,0x3c,0x18,0x3c,0x7e,0x66,0xc3,
- 0xc3,0x18,0x18,0x18,0x18,0x18,0x3c,0x3c,
- 0x66,0x66,0xc3,0xc3,0xfe,0xfe,0xc0,0x60,
- 0x60,0x30,0x18,0x18,0x0c,0xfe,0xfe,0xe0,
- 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
- 0xc0,0xc0,0xc0,0xc0,0xe0,0x30,0x30,0x30,
- 0x70,0x60,0x60,0x60,0xe0,0xc0,0xc0,0xc0,
- 0xe0,0x60,0x60,0x60,0x60,0x60,0x60,0x60,
- 0x60,0x60,0x60,0x60,0x60,0xe0,0x88,0xd8,
- 0x70,0x70,0x20,0xfe,0xc0,0xc0,0x80,0x40,
- 0x76,0xfc,0xcc,0xfc,0x7c,0x8c,0xfc,0x78,
- 0xd8,0xfc,0xcc,0xcc,0xcc,0xcc,0xfc,0xd8,
- 0xc0,0xc0,0xc0,0x78,0xfc,0xcc,0xc0,0xc0,
- 0xcc,0xfc,0x78,0x6c,0xfc,0xcc,0xcc,0xcc,
- 0xcc,0xfc,0x6c,0x0c,0x0c,0x0c,0x78,0xfc,
- 0xc0,0xfc,0xfc,0xcc,0xfc,0x78,0x60,0x60,
- 0x60,0x60,0x60,0x60,0xf0,0xf0,0x60,0x70,
- 0x30,0x78,0xfc,0x0c,0x6c,0xfc,0xcc,0xcc,
- 0xcc,0xcc,0xfc,0x6c,0xcc,0xcc,0xcc,0xcc,
- 0xcc,0xec,0xfc,0xd8,0xc0,0xc0,0xc0,0xc0,
- 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x00,
- 0xc0,0xc0,0xc0,0x60,0x60,0x60,0x60,0x60,
- 0x60,0x60,0x60,0x60,0x60,0x00,0x60,0x60,
- 0xcc,0xd8,0xd8,0xf0,0xe0,0xf0,0xd8,0xcc,
- 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
- 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xcc,0xc0,
- 0xcc,0xc0,0xcc,0xc0,0xcc,0xc0,0xcc,0xc0,
- 0xee,0xc0,0xff,0xc0,0xbb,0x80,0xcc,0xcc,
- 0xcc,0xcc,0xcc,0xec,0xfc,0xd8,0x78,0xfc,
- 0xcc,0xcc,0xcc,0xcc,0xfc,0x78,0xc0,0xc0,
- 0xc0,0xd8,0xfc,0xcc,0xcc,0xcc,0xcc,0xfc,
- 0xd8,0x0c,0x0c,0x0c,0x6c,0xfc,0xcc,0xcc,
- 0xcc,0xcc,0xfc,0x6c,0xc0,0xc0,0xc0,0xc0,
- 0xc0,0xc0,0xe0,0xb0,0x78,0xfc,0xcc,0x1c,
- 0x78,0xe0,0xfc,0x78,0x30,0x70,0x60,0x60,
- 0x60,0x60,0xf0,0xf0,0x60,0x60,0x6c,0xfc,
- 0xdc,0xcc,0xcc,0xcc,0xcc,0xcc,0x30,0x30,
- 0x78,0x78,0x78,0xcc,0xcc,0xcc,0x24,0x24,
- 0x76,0x76,0x7e,0xdb,0xdb,0xdb,0xcc,0xcc,
- 0x78,0x38,0x70,0x78,0xcc,0xcc,0xe0,0xf0,
- 0x30,0x30,0x38,0x78,0x78,0x48,0xcc,0xcc,
- 0xcc,0xfc,0xfc,0x60,0x30,0x30,0x18,0xfc,
- 0xfc,0x30,0x60,0x60,0x60,0x60,0x60,0x40,
- 0x80,0x40,0x60,0x60,0x60,0x60,0x30,0x80,
- 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
- 0x80,0x80,0x80,0x80,0xc0,0x60,0x60,0x60,
- 0x60,0x60,0x20,0x10,0x20,0x60,0x60,0x60,
- 0x60,0xc0,0x98,0xfc,0x64,0xc0,0xc0,0xc0,
- 0xc0,0xc0,0xc0,0xc0,0xc0,0x00,0xc0,0xc0,
- 0xc0,0x78,0xfc,0xec,0xe0,0xd0,0xd4,0xfc,
- 0x78,0x0c,0xdc,0xfe,0x60,0x30,0x30,0xfc,
- 0x30,0x60,0x64,0x7c,0x38,0xcc,0x78,0xcc,
- 0xcc,0x78,0xcc,0x18,0x18,0x18,0x7e,0x18,
- 0x7e,0x3c,0x66,0x66,0xc3,0xc3,0x80,0x80,
- 0x80,0x80,0x80,0x80,0x00,0x00,0x80,0x80,
- 0x80,0x80,0x80,0x78,0xfc,0xcc,0x1c,0x38,
- 0x6c,0xcc,0xcc,0xd8,0x70,0xe0,0xcc,0xfc,
- 0x78,0xd8,0xd8,0x1f,0x00,0x71,0xc0,0x6e,
- 0xc0,0xdb,0x60,0xdb,0x60,0xd8,0x60,0xdb,
- 0x60,0xdb,0x60,0x6e,0xc0,0x71,0xc0,0x1f,
- 0x00,0xf0,0x00,0xd0,0xb0,0x70,0xb0,0x60,
- 0x36,0x6c,0xd8,0x6c,0x36,0x0c,0x0c,0xfc,
- 0xfc,0xe0,0xe0,0x1f,0x00,0x71,0xc0,0x7b,
- 0xc0,0xdb,0x60,0xdf,0x60,0xde,0x60,0xdb,
- 0x60,0xdb,0x60,0x7e,0xc0,0x71,0xc0,0x1f,
- 0x00,0xf0,0xf0,0x60,0x90,0x90,0x60,0xfc,
- 0xfc,0x00,0x30,0x30,0xfc,0xfc,0x30,0x30,
- 0xf0,0x40,0x20,0x10,0x90,0x60,0x60,0x90,
- 0x10,0x20,0x90,0x60,0xc0,0x70,0x30,0xc0,
- 0xc0,0xc0,0xec,0xfc,0xdc,0xcc,0xcc,0xcc,
- 0xcc,0xcc,0x36,0x36,0x36,0x36,0x36,0x36,
- 0x36,0x36,0x76,0xf6,0xf6,0xf6,0xfe,0x7e,
- 0xc0,0xc0,0xc0,0x60,0x40,0x40,0x40,0x40,
- 0x40,0xc0,0x40,0xf8,0x00,0x70,0xd8,0xd8,
- 0xd8,0x70,0xd8,0x6c,0x36,0x6c,0xd8,0x20,
- 0x80,0x27,0xc0,0x12,0x80,0x12,0x80,0x09,
- 0x80,0x4c,0x80,0x44,0x00,0x42,0x00,0x42,
- 0x00,0xc1,0x00,0x41,0x00,0x23,0xc0,0x21,
- 0x00,0x10,0x80,0x10,0x40,0x0a,0x40,0x4d,
- 0x80,0x44,0x00,0x42,0x00,0x42,0x00,0xc1,
- 0x00,0x41,0x00,0x20,0x80,0x27,0xc0,0x12,
- 0x80,0x12,0x80,0x09,0x80,0x6c,0x80,0x94,
- 0x00,0x12,0x00,0x22,0x00,0x91,0x00,0x61,
- 0x00,0x78,0xfc,0xcc,0xcc,0xe0,0x70,0x30,
- 0x30,0x00,0x30,0x30,0xc3,0xc3,0x7e,0x7e,
- 0x24,0x3c,0x18,0x18,0x00,0x0c,0x38,0x30,
- 0xc3,0xc3,0x7e,0x7e,0x24,0x3c,0x18,0x18,
- 0x00,0x30,0x1c,0x0c,0xc3,0xc3,0x7e,0x7e,
- 0x24,0x3c,0x18,0x18,0x00,0x66,0x3c,0x18,
- 0xc3,0xc3,0x7e,0x7e,0x24,0x3c,0x18,0x18,
- 0x00,0x2c,0x3e,0x1a,0xc3,0xc3,0x7e,0x7e,
- 0x24,0x3c,0x18,0x18,0x00,0x6c,0x6c,0xc3,
- 0xc3,0x7e,0x7e,0x24,0x3c,0x18,0x18,0x00,
- 0x18,0x34,0x18,0xc7,0xe0,0xc7,0xe0,0xfe,
- 0x00,0x7e,0x00,0x66,0x00,0x67,0xc0,0x37,
- 0xc0,0x36,0x00,0x3e,0x00,0x1f,0xe0,0x1f,
- 0xe0,0x60,0x30,0x20,0x78,0xfc,0xcc,0xc0,
- 0xc0,0xc0,0xc0,0xc0,0xcc,0xfc,0x78,0xfc,
- 0xfc,0xc0,0xf8,0xf8,0xc0,0xfc,0xfc,0x00,
- 0x18,0x70,0x60,0xfc,0xfc,0xc0,0xf8,0xf8,
- 0xc0,0xfc,0xfc,0x00,0x60,0x38,0x18,0xfc,
- 0xfc,0xc0,0xf8,0xf8,0xc0,0xfc,0xfc,0x00,
- 0xcc,0x78,0x30,0xfc,0xfc,0xc0,0xf8,0xf8,
- 0xc0,0xfc,0xfc,0x00,0xd8,0xd8,0x60,0x60,
- 0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x30,
- 0xe0,0xc0,0x60,0x60,0x60,0x60,0x60,0x60,
- 0x60,0x60,0x00,0xc0,0x70,0x30,0x30,0x30,
- 0x30,0x30,0x30,0x30,0x30,0x30,0x00,0xcc,
- 0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
- 0x30,0x30,0x00,0xd8,0xd8,0x7c,0x7e,0x67,
- 0x63,0x63,0xfb,0xfb,0x63,0x67,0x7e,0x7c,
- 0xc6,0xce,0xce,0xde,0xf6,0xe6,0xe6,0xc6,
- 0x00,0x58,0x7c,0x34,0x7c,0xfe,0xc6,0xc6,
- 0xc6,0xc6,0xfe,0x7c,0x00,0x18,0x70,0x60,
- 0x7c,0xfe,0xc6,0xc6,0xc6,0xc6,0xfe,0x7c,
- 0x00,0x30,0x1c,0x0c,0x7c,0xfe,0xc6,0xc6,
- 0xc6,0xc6,0xfe,0x7c,0x00,0xcc,0x78,0x30,
- 0x7c,0xfe,0xc6,0xc6,0xc6,0xc6,0xfe,0x7c,
- 0x00,0x58,0x7c,0x34,0x7c,0xfe,0xc6,0xc6,
- 0xc6,0xc6,0xfe,0x7c,0x00,0x6c,0x6c,0xcc,
- 0x78,0x30,0x30,0x78,0xcc,0xde,0x00,0x7f,
- 0x00,0x63,0x00,0x73,0x00,0x7b,0x00,0x6b,
- 0x00,0x6f,0x00,0x67,0x00,0x63,0x00,0x7f,
- 0x00,0x3d,0x80,0x7c,0xfe,0xc6,0xc6,0xc6,
- 0xc6,0xc6,0xc6,0x00,0x18,0x70,0x60,0x7c,
- 0xfe,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0x00,
- 0x30,0x1c,0x0c,0x7c,0xfe,0xc6,0xc6,0xc6,
- 0xc6,0xc6,0xc6,0x00,0xcc,0x78,0x30,0x7c,
- 0xfe,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0x00,
- 0x6c,0x6c,0x18,0x18,0x18,0x18,0x3c,0x7e,
- 0xe7,0xc3,0x00,0x30,0x1c,0x0c,0xc0,0xc0,
- 0xfc,0xfe,0xc6,0xc6,0xc6,0xfe,0xfc,0xc0,
- 0xc0,0xd8,0xdc,0xcc,0xcc,0xcc,0xd8,0xd8,
- 0xcc,0xcc,0xfc,0x78,0x76,0xfc,0xcc,0xfc,
- 0x7c,0x8c,0xfc,0x78,0x00,0x18,0x70,0x60,
- 0x76,0xfc,0xcc,0xfc,0x7c,0x8c,0xfc,0x78,
- 0x00,0x60,0x38,0x18,0x76,0xfc,0xcc,0xfc,
- 0x7c,0x8c,0xfc,0x78,0x00,0xcc,0x78,0x30,
- 0x76,0xfc,0xcc,0xfc,0x7c,0x8c,0xfc,0x78,
- 0x00,0x58,0x7c,0x34,0x76,0xfc,0xcc,0xfc,
- 0x7c,0x8c,0xfc,0x78,0x00,0xd8,0xd8,0x76,
- 0xfc,0xcc,0xfc,0x7c,0x8c,0xfc,0x78,0x00,
- 0x30,0x68,0x30,0x77,0x80,0xff,0xc0,0xcc,
- 0x00,0xff,0xc0,0x7f,0xc0,0x8c,0xc0,0xff,
- 0xc0,0x7b,0x80,0x60,0x30,0x20,0x78,0xfc,
- 0xcc,0xc0,0xc0,0xcc,0xfc,0x78,0x78,0xfc,
- 0xc0,0xfc,0xfc,0xcc,0xfc,0x78,0x00,0x18,
- 0x70,0x60,0x78,0xfc,0xc0,0xfc,0xfc,0xcc,
- 0xfc,0x78,0x00,0x60,0x38,0x18,0x78,0xfc,
- 0xc0,0xfc,0xfc,0xcc,0xfc,0x78,0x00,0xcc,
- 0x78,0x30,0x78,0xfc,0xc0,0xfc,0xfc,0xcc,
- 0xfc,0x78,0x00,0xd8,0xd8,0x60,0x60,0x60,
- 0x60,0x60,0x60,0x60,0x60,0x00,0x30,0xe0,
- 0xc0,0x60,0x60,0x60,0x60,0x60,0x60,0x60,
- 0x60,0x00,0xc0,0x70,0x30,0x30,0x30,0x30,
- 0x30,0x30,0x30,0x30,0x30,0x00,0xcc,0x78,
- 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
- 0x30,0x00,0xd8,0xd8,0x78,0xfc,0xcc,0xcc,
- 0xcc,0xcc,0xfc,0x78,0xb0,0x60,0xd0,0xcc,
- 0xcc,0xcc,0xcc,0xcc,0xec,0xfc,0xd8,0x00,
- 0xb0,0xf8,0x68,0x78,0xfc,0xcc,0xcc,0xcc,
- 0xcc,0xfc,0x78,0x00,0x18,0x70,0x60,0x78,
- 0xfc,0xcc,0xcc,0xcc,0xcc,0xfc,0x78,0x00,
- 0x60,0x38,0x18,0x78,0xfc,0xcc,0xcc,0xcc,
- 0xcc,0xfc,0x78,0x00,0xcc,0x78,0x30,0x78,
- 0xfc,0xcc,0xcc,0xcc,0xcc,0xfc,0x78,0x00,
- 0xb0,0xf8,0x68,0x78,0xfc,0xcc,0xcc,0xcc,
- 0xcc,0xfc,0x78,0x00,0xd8,0xd8,0x30,0x30,
- 0x00,0xfc,0xfc,0x00,0x30,0x30,0xc0,0x78,
- 0xfc,0xcc,0xec,0xdc,0xcc,0xfc,0x78,0x0c,
- 0x6c,0xfc,0xdc,0xcc,0xcc,0xcc,0xcc,0xcc,
- 0x00,0x18,0x70,0x60,0x6c,0xfc,0xdc,0xcc,
- 0xcc,0xcc,0xcc,0xcc,0x00,0x60,0x38,0x18,
- 0x6c,0xfc,0xdc,0xcc,0xcc,0xcc,0xcc,0xcc,
- 0x00,0xcc,0x78,0x30,0x6c,0xfc,0xdc,0xcc,
- 0xcc,0xcc,0xcc,0xcc,0x00,0xd8,0xd8,0xe0,
- 0xf0,0x30,0x30,0x38,0x78,0x78,0x48,0xcc,
- 0xcc,0xcc,0x00,0x60,0x38,0x18,0xc0,0xc0,
- 0xc0,0xd8,0xfc,0xcc,0xcc,0xcc,0xcc,0xfc,
- 0xd8,0xc0,0xc0,0xc0,0xe0,0xf0,0x30,0x30,
- 0x38,0x78,0x78,0x48,0xcc,0xcc,0xcc,0x00,
- 0xd8,0xd8,
-};
-
-BMF_FontData BMF_font_helvb12 = {
- -1, -3,
- 11, 12,
- {
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0, 0, 0, 0, 12, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {1, 1, 0, 0, 3, 0},
- {2, 11, -1, 0, 4, 1},
- {3, 3, 0, -8, 4, 12},
- {9, 11, 1, 0, 7, 15},
- {6, 13, 0, 2, 7, 37},
- {10, 11, 0, 0, 11, 50},
- {9, 11, 0, 0, 9, 72},
- {2, 4, 0, -7, 3, 94},
- {4, 14, 0, 3, 4, 98},
- {4, 14, 1, 3, 4, 112},
- {5, 5, 0, -6, 6, 126},
- {6, 6, 0, -1, 7, 131},
- {2, 4, 0, 2, 3, 137},
- {6, 2, -1, -3, 9, 141},
- {2, 2, 0, 0, 3, 143},
- {5, 13, 1, 2, 4, 145},
- {6, 11, 0, 0, 7, 158},
- {4, 11, 0, 0, 6, 169},
- {6, 11, 0, 0, 7, 180},
- {6, 11, 0, 0, 7, 191},
- {7, 11, 0, 0, 7, 202},
- {6, 11, 0, 0, 7, 213},
- {6, 11, 0, 0, 7, 224},
- {6, 11, 0, 0, 7, 235},
- {6, 11, 0, 0, 7, 246},
- {6, 11, 0, 0, 7, 257},
- {2, 8, -1, 0, 4, 268},
- {2, 10, -1, 2, 4, 276},
- {6, 6, 0, -1, 7, 286},
- {6, 5, 0, -2, 7, 292},
- {6, 6, 0, -1, 7, 297},
- {6, 11, 0, 0, 7, 303},
- {11, 12, 0, 1, 12, 314},
- {8, 11, 0, 0, 8, 338},
- {6, 11, -1, 0, 8, 349},
- {6, 11, -1, 0, 8, 360},
- {7, 11, -1, 0, 9, 371},
- {6, 11, -1, 0, 8, 382},
- {6, 11, -1, 0, 7, 393},
- {7, 11, -1, 0, 9, 404},
- {7, 11, -1, 0, 9, 415},
- {2, 11, -2, 0, 6, 426},
- {5, 11, 0, 0, 6, 437},
- {7, 11, -1, 0, 8, 448},
- {6, 11, -1, 0, 7, 459},
- {9, 11, -1, 0, 11, 470},
- {7, 11, -1, 0, 9, 492},
- {7, 11, -1, 0, 9, 503},
- {7, 11, -1, 0, 9, 514},
- {7, 12, -1, 1, 9, 525},
- {7, 11, -1, 0, 9, 537},
- {6, 11, -1, 0, 8, 548},
- {6, 11, 0, 0, 6, 559},
- {7, 11, -1, 0, 9, 570},
- {8, 11, 0, 0, 8, 581},
- {10, 11, 0, 0, 10, 592},
- {8, 11, 0, 0, 8, 614},
- {8, 11, 0, 0, 8, 625},
- {7, 11, 0, 0, 7, 636},
- {3, 14, 0, 3, 4, 647},
- {4, 11, 0, 0, 5, 661},
- {3, 14, 0, 3, 4, 672},
- {5, 5, 0, -6, 7, 686},
- {7, 1, 0, 2, 7, 691},
- {2, 4, 0, -7, 3, 692},
- {7, 8, 0, 0, 7, 696},
- {6, 11, 0, 0, 7, 704},
- {6, 8, 0, 0, 7, 715},
- {6, 11, 0, 0, 7, 723},
- {6, 8, 0, 0, 7, 734},
- {4, 11, 0, 0, 5, 742},
- {6, 11, 0, 3, 7, 753},
- {6, 11, 0, 0, 7, 764},
- {2, 11, -1, 0, 5, 775},
- {3, 14, 0, 3, 5, 786},
- {6, 11, 0, 0, 6, 800},
- {2, 11, -1, 0, 5, 811},
- {10, 8, 0, 0, 11, 822},
- {6, 8, 0, 0, 7, 838},
- {6, 8, 0, 0, 7, 846},
- {6, 11, 0, 3, 7, 854},
- {6, 11, 0, 3, 7, 865},
- {4, 8, 0, 0, 4, 876},
- {6, 8, 0, 0, 7, 884},
- {4, 10, 0, 0, 5, 892},
- {6, 8, 0, 0, 7, 902},
- {6, 8, 0, 0, 7, 910},
- {8, 8, 0, 0, 9, 918},
- {6, 8, 0, 0, 7, 926},
- {6, 11, 0, 3, 7, 934},
- {6, 8, 0, 0, 7, 945},
- {4, 14, 0, 3, 4, 953},
- {1, 13, -1, 2, 3, 967},
- {4, 14, 0, 3, 4, 980},
- {6, 3, 0, -3, 7, 994},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {2, 11, 0, 3, 3, 997},
- {6, 10, 0, 1, 7, 1008},
- {7, 11, 0, 0, 7, 1018},
- {6, 6, 0, -3, 7, 1029},
- {8, 11, 1, 0, 7, 1035},
- {1, 13, -1, 2, 3, 1046},
- {6, 14, 0, 3, 7, 1059},
- {5, 2, 0, -9, 5, 1073},
- {11, 11, 0, 0, 12, 1075},
- {4, 7, 0, -4, 5, 1097},
- {7, 5, 0, -2, 8, 1104},
- {6, 4, -1, -3, 9, 1109},
- {3, 2, 0, -3, 4, 1113},
- {11, 11, 0, 0, 12, 1115},
- {4, 2, 0, -9, 4, 1137},
- {4, 4, -1, -7, 6, 1139},
- {6, 9, 0, -1, 7, 1143},
- {4, 6, 0, -5, 4, 1152},
- {4, 6, 0, -5, 4, 1158},
- {4, 3, -1, -9, 4, 1164},
- {6, 11, 0, 3, 7, 1167},
- {7, 14, -1, 3, 10, 1178},
- {2, 2, 0, -5, 3, 1192},
- {3, 3, -1, 3, 5, 1194},
- {2, 6, 0, -5, 4, 1197},
- {5, 7, 0, -4, 6, 1203},
- {7, 5, 0, -2, 8, 1210},
- {10, 11, 0, 0, 11, 1215},
- {10, 11, 0, 0, 11, 1237},
- {10, 11, 0, 0, 11, 1259},
- {6, 11, 0, 3, 7, 1281},
- {8, 12, 0, 0, 8, 1292},
- {8, 12, 0, 0, 8, 1304},
- {8, 12, 0, 0, 8, 1316},
- {8, 12, 0, 0, 8, 1328},
- {8, 11, 0, 0, 8, 1340},
- {8, 12, 0, 0, 8, 1351},
- {11, 11, 0, 0, 12, 1363},
- {6, 14, -1, 3, 8, 1385},
- {6, 12, -1, 0, 8, 1399},
- {6, 12, -1, 0, 8, 1411},
- {6, 12, -1, 0, 8, 1423},
- {6, 11, -1, 0, 8, 1435},
- {4, 12, -1, 0, 6, 1446},
- {4, 12, -1, 0, 6, 1458},
- {6, 12, 0, 0, 6, 1470},
- {5, 11, 0, 0, 6, 1482},
- {8, 11, 0, 0, 9, 1493},
- {7, 12, -1, 0, 9, 1504},
- {7, 12, -1, 0, 9, 1516},
- {7, 12, -1, 0, 9, 1528},
- {7, 12, -1, 0, 9, 1540},
- {7, 12, -1, 0, 9, 1552},
- {7, 11, -1, 0, 9, 1564},
- {6, 6, 0, -1, 7, 1575},
- {9, 11, 0, 0, 9, 1581},
- {7, 12, -1, 0, 9, 1603},
- {7, 12, -1, 0, 9, 1615},
- {7, 12, -1, 0, 9, 1627},
- {7, 11, -1, 0, 9, 1639},
- {8, 12, 0, 0, 8, 1650},
- {7, 11, -1, 0, 9, 1662},
- {6, 11, 0, 0, 7, 1673},
- {7, 12, 0, 0, 7, 1684},
- {7, 12, 0, 0, 7, 1696},
- {7, 12, 0, 0, 7, 1708},
- {7, 12, 0, 0, 7, 1720},
- {7, 11, 0, 0, 7, 1732},
- {7, 12, 0, 0, 7, 1743},
- {10, 8, 0, 0, 11, 1755},
- {6, 11, 0, 3, 7, 1771},
- {6, 12, 0, 0, 7, 1782},
- {6, 12, 0, 0, 7, 1794},
- {6, 12, 0, 0, 7, 1806},
- {6, 11, 0, 0, 7, 1818},
- {4, 12, 0, 0, 5, 1829},
- {4, 12, 0, 0, 5, 1841},
- {6, 12, 1, 0, 5, 1853},
- {5, 11, 1, 0, 5, 1865},
- {6, 11, 0, 0, 7, 1876},
- {6, 12, 0, 0, 7, 1887},
- {6, 12, 0, 0, 7, 1899},
- {6, 12, 0, 0, 7, 1911},
- {6, 12, 0, 0, 7, 1923},
- {6, 12, 0, 0, 7, 1935},
- {6, 11, 0, 0, 7, 1947},
- {6, 8, 0, 0, 7, 1958},
- {6, 10, 0, 1, 7, 1966},
- {6, 12, 0, 0, 7, 1976},
- {6, 12, 0, 0, 7, 1988},
- {6, 12, 0, 0, 7, 2000},
- {6, 11, 0, 0, 7, 2012},
- {6, 15, 0, 3, 7, 2023},
- {6, 14, 0, 3, 7, 2038},
- {6, 14, 0, 3, 7, 2052},
- },
- bitmap_data
-};
-
-#endif
-
diff --git a/intern/bmfont/intern/BMF_font_helvb14.cpp b/intern/bmfont/intern/BMF_font_helvb14.cpp
deleted file mode 100644
index c6d3e0ec701..00000000000
--- a/intern/bmfont/intern/BMF_font_helvb14.cpp
+++ /dev/null
@@ -1,623 +0,0 @@
-/**
- * $Id$
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "BMF_FontData.h"
-#include "BMF_Settings.h"
-
-#if BMF_INCLUDE_HELVB14
-
-static unsigned char bitmap_data[]= {
- 0x00,0xc0,0xc0,0x00,0x00,0x80,0x80,0x80,
- 0xc0,0xc0,0xc0,0xc0,0xc0,0x90,0xd8,0xd8,
- 0xd8,0x48,0x48,0x48,0xfe,0xfe,0x24,0x24,
- 0x7f,0x7f,0x12,0x12,0x12,0x10,0x10,0x38,
- 0x7c,0xd6,0xd6,0x16,0x3c,0x78,0xd0,0xd6,
- 0xd6,0x7c,0x38,0x10,0x30,0xc0,0x11,0xe0,
- 0x19,0x20,0x09,0x20,0x0d,0xe0,0x64,0xc0,
- 0xf6,0x00,0x92,0x00,0x93,0x00,0xf1,0x00,
- 0x61,0x80,0x71,0x80,0xff,0x00,0xce,0x00,
- 0xc6,0x00,0xcf,0x00,0x79,0x00,0x30,0x00,
- 0x38,0x00,0x6c,0x00,0x6c,0x00,0x7c,0x00,
- 0x38,0x00,0x80,0x40,0xc0,0xc0,0x30,0x20,
- 0x60,0x40,0x40,0xc0,0xc0,0xc0,0xc0,0xc0,
- 0x40,0x40,0x60,0x20,0x30,0xc0,0x40,0x60,
- 0x20,0x20,0x30,0x30,0x30,0x30,0x30,0x20,
- 0x20,0x60,0x40,0xc0,0xd8,0x50,0x20,0xf8,
- 0x20,0x20,0x30,0x30,0x30,0xfc,0xfc,0x30,
- 0x30,0x30,0x80,0x40,0x40,0xc0,0xc0,0xfe,
- 0xfe,0xc0,0xc0,0x80,0x80,0xc0,0x40,0x40,
- 0x60,0x20,0x20,0x30,0x10,0x10,0x30,0x78,
- 0x48,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0x48,
- 0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
- 0x30,0x30,0x30,0xf0,0x30,0x10,0xfc,0xfc,
- 0x60,0x60,0x30,0x18,0x18,0x0c,0xcc,0xcc,
- 0x78,0x30,0x30,0x78,0xcc,0xcc,0x0c,0x38,
- 0x38,0x0c,0xcc,0xcc,0x78,0x30,0x18,0x18,
- 0xfc,0xfc,0x98,0x58,0x58,0x38,0x38,0x38,
- 0x18,0x18,0x70,0xf8,0xcc,0x0c,0x0c,0xcc,
- 0xfc,0xd8,0x60,0x60,0x7c,0x7c,0x30,0x78,
- 0xcc,0xcc,0xcc,0xcc,0xfc,0xd8,0xc0,0x4c,
- 0x7c,0x38,0x60,0x60,0x60,0x20,0x30,0x30,
- 0x10,0x18,0x08,0x0c,0xfc,0xfc,0x70,0xf8,
- 0xcc,0xcc,0xcc,0x78,0x30,0x78,0xcc,0xcc,
- 0x7c,0x38,0x70,0xf8,0xc8,0x0c,0x6c,0xfc,
- 0xcc,0xcc,0xcc,0xcc,0x78,0x30,0xc0,0xc0,
- 0x00,0x00,0x00,0x00,0xc0,0xc0,0x80,0x40,
- 0x40,0xc0,0xc0,0x00,0x00,0x00,0x00,0xc0,
- 0xc0,0x02,0x0e,0x3c,0xf0,0xf0,0x3c,0x0e,
- 0x02,0xfc,0xfc,0x00,0x00,0xfc,0xfc,0x80,
- 0xe0,0x78,0x1e,0x1e,0x78,0xe0,0x80,0x30,
- 0x30,0x00,0x30,0x30,0x18,0x18,0x0c,0xcc,
- 0xcc,0x7c,0x38,0x0f,0x80,0x38,0x60,0x60,
- 0x00,0x4d,0xc0,0xd3,0x20,0x93,0x30,0x91,
- 0x10,0x91,0x90,0xc9,0x90,0x46,0x90,0x60,
- 0x30,0x30,0x20,0x1c,0xc0,0x07,0x80,0xe1,
- 0xc0,0x61,0x80,0x7f,0x80,0x7f,0x80,0x33,
- 0x00,0x33,0x00,0x33,0x00,0x1e,0x00,0x1e,
- 0x00,0x1e,0x00,0x0c,0x00,0x0c,0x00,0xfc,
- 0xfe,0xc7,0xc3,0xc7,0xfe,0xfc,0xc6,0xc3,
- 0xc7,0xfe,0xfc,0x3c,0x7e,0x63,0xc3,0xc0,
- 0xc0,0xc0,0xc0,0xc3,0x63,0x7e,0x3c,0xfc,
- 0xfe,0xc6,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,
- 0xc6,0xfe,0xfc,0xfe,0xfe,0xc0,0xc0,0xc0,
- 0xfe,0xfe,0xc0,0xc0,0xc0,0xfe,0xfe,0xc0,
- 0xc0,0xc0,0xc0,0xc0,0xfc,0xfc,0xc0,0xc0,
- 0xc0,0xfe,0xfe,0x3e,0x80,0x7f,0x80,0x63,
- 0x80,0xc1,0x80,0xc7,0x80,0xc7,0x80,0xc0,
- 0x00,0xc0,0x00,0xc1,0x80,0x63,0x80,0x7f,
- 0x00,0x3e,0x00,0xc3,0xc3,0xc3,0xc3,0xc3,
- 0xff,0xff,0xc3,0xc3,0xc3,0xc3,0xc3,0xc0,
- 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
- 0xc0,0xc0,0xc0,0x78,0xfc,0xcc,0xcc,0xcc,
- 0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0xc3,
- 0x80,0xc7,0x00,0xc6,0x00,0xcc,0x00,0xdc,
- 0x00,0xf8,0x00,0xf0,0x00,0xd8,0x00,0xcc,
- 0x00,0xce,0x00,0xc7,0x00,0xc3,0x00,0xfe,
- 0xfe,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
- 0xc0,0xc0,0xc0,0xcc,0xc0,0xcc,0xc0,0xcc,
- 0xc0,0xde,0xc0,0xde,0xc0,0xd2,0xc0,0xd2,
- 0xc0,0xf3,0xc0,0xf3,0xc0,0xe1,0xc0,0xe1,
- 0xc0,0xe1,0xc0,0xc3,0xc7,0xc7,0xcf,0xcf,
- 0xdb,0xdb,0xf3,0xf3,0xe3,0xe3,0xc3,0x3e,
- 0x00,0x7f,0x00,0x63,0x00,0xc1,0x80,0xc1,
- 0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,
- 0x80,0x63,0x00,0x7f,0x00,0x3e,0x00,0xc0,
- 0xc0,0xc0,0xc0,0xf8,0xfc,0xce,0xc6,0xc6,
- 0xce,0xfc,0xf8,0x01,0x80,0x3d,0x80,0x7f,
- 0x00,0x67,0x00,0xcd,0x80,0xcd,0x80,0xc1,
- 0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0x63,
- 0x00,0x7f,0x00,0x3e,0x00,0xc3,0xc3,0xc3,
- 0xc3,0xc7,0xfe,0xfe,0xc7,0xc3,0xc7,0xfe,
- 0xfc,0x3c,0x7e,0xe7,0xc3,0x07,0x1e,0x78,
- 0xe0,0xc3,0xe7,0x7e,0x3c,0x18,0x18,0x18,
- 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xff,
- 0xff,0x3c,0x7e,0xe7,0xc3,0xc3,0xc3,0xc3,
- 0xc3,0xc3,0xc3,0xc3,0xc3,0x18,0x18,0x18,
- 0x3c,0x3c,0x24,0x66,0x66,0x66,0xc3,0xc3,
- 0xc3,0x30,0xc0,0x30,0xc0,0x30,0xc0,0x39,
- 0xc0,0x79,0xe0,0x69,0x60,0x6f,0x60,0x6f,
- 0x60,0xc6,0x30,0xc6,0x30,0xc6,0x30,0xc6,
- 0x30,0xe3,0x80,0x63,0x00,0x63,0x00,0x36,
- 0x00,0x36,0x00,0x1c,0x00,0x1c,0x00,0x36,
- 0x00,0x36,0x00,0x63,0x00,0x63,0x00,0xe3,
- 0x80,0x0c,0x00,0x0c,0x00,0x0c,0x00,0x0c,
- 0x00,0x0c,0x00,0x1e,0x00,0x1e,0x00,0x33,
- 0x00,0x33,0x00,0x61,0x80,0x61,0x80,0xe1,
- 0xc0,0xff,0xff,0x60,0x70,0x30,0x18,0x18,
- 0x0c,0x0e,0x06,0xff,0xff,0xe0,0xe0,0xc0,
- 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
- 0xc0,0xc0,0xe0,0xe0,0x10,0x10,0x30,0x20,
- 0x20,0x60,0x40,0x40,0xc0,0x80,0x80,0xe0,
- 0xe0,0x60,0x60,0x60,0x60,0x60,0x60,0x60,
- 0x60,0x60,0x60,0x60,0xe0,0xe0,0xcc,0xcc,
- 0x48,0x78,0x78,0x30,0x30,0xfe,0xc0,0xc0,
- 0x80,0x40,0x6c,0xfc,0xcc,0xcc,0x7c,0x1c,
- 0xcc,0xfc,0x78,0xd8,0xfc,0xee,0xc6,0xc6,
- 0xc6,0xee,0xfc,0xd8,0xc0,0xc0,0xc0,0x38,
- 0x7c,0xec,0xc0,0xc0,0xc0,0xec,0x7c,0x38,
- 0x36,0x7e,0xee,0xc6,0xc6,0xc6,0xee,0x7e,
- 0x36,0x06,0x06,0x06,0x38,0x7c,0xcc,0xc0,
- 0xfc,0xcc,0xcc,0x78,0x30,0x60,0x60,0x60,
- 0x60,0x60,0x60,0x60,0xf0,0xf0,0x60,0x70,
- 0x30,0x78,0xfc,0xc6,0x36,0x7e,0xee,0xc6,
- 0xc6,0xc6,0xee,0x7e,0x36,0xc6,0xc6,0xc6,
- 0xc6,0xc6,0xc6,0xe6,0xfe,0xdc,0xc0,0xc0,
- 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
- 0xc0,0xc0,0x00,0xc0,0xc0,0xc0,0xe0,0x60,
- 0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,
- 0x60,0x00,0x60,0x60,0xce,0xcc,0xd8,0xd8,
- 0xf0,0xf0,0xd8,0xd8,0xcc,0xc0,0xc0,0xc0,
- 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
- 0xc0,0xc0,0xc0,0xc0,0xcc,0xc0,0xcc,0xc0,
- 0xcc,0xc0,0xcc,0xc0,0xcc,0xc0,0xcc,0xc0,
- 0xcc,0xc0,0xff,0xc0,0xdb,0x80,0xc6,0xc6,
- 0xc6,0xc6,0xc6,0xc6,0xe6,0xfe,0xdc,0x38,
- 0x7c,0xee,0xc6,0xc6,0xc6,0xee,0x7c,0x38,
- 0xc0,0xc0,0xc0,0xd8,0xfc,0xee,0xc6,0xc6,
- 0xc6,0xee,0xfc,0xd8,0x06,0x06,0x06,0x36,
- 0x7e,0xee,0xc6,0xc6,0xc6,0xee,0x7e,0x36,
- 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xe0,0xf8,
- 0xd0,0x78,0xfc,0xcc,0x1c,0x78,0xe0,0xcc,
- 0xfc,0x78,0x30,0x70,0x60,0x60,0x60,0x60,
- 0x60,0xf0,0xf0,0x60,0x60,0x76,0xfe,0xce,
- 0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0x30,0x30,
- 0x30,0x78,0x78,0x48,0xcc,0xcc,0xcc,0x33,
- 0x00,0x33,0x00,0x33,0x00,0x73,0x80,0x7f,
- 0x80,0x4c,0x80,0x4c,0x80,0xcc,0xc0,0xcc,
- 0xc0,0xc6,0xee,0x6c,0x38,0x38,0x38,0x6c,
- 0xee,0xc6,0x60,0x70,0x10,0x18,0x38,0x38,
- 0x2c,0x6c,0x6c,0xc6,0xc6,0xc6,0xfc,0xfc,
- 0x60,0x60,0x30,0x18,0x18,0xfc,0xfc,0x30,
- 0x70,0x60,0x60,0x60,0x60,0x60,0xc0,0x60,
- 0x60,0x60,0x60,0x60,0x70,0x30,0x80,0x80,
- 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
- 0x80,0x80,0x80,0x80,0x80,0xc0,0xe0,0x60,
- 0x60,0x60,0x60,0x60,0x30,0x60,0x60,0x60,
- 0x60,0x60,0xe0,0xc0,0x98,0xfc,0x64,0xc0,
- 0xc0,0xc0,0xc0,0xc0,0x80,0x80,0x80,0x00,
- 0x00,0xc0,0xc0,0x20,0x20,0x38,0x7c,0xec,
- 0xe0,0xd0,0xd0,0xdc,0x7c,0x38,0x08,0x08,
- 0xcc,0xfe,0x70,0x30,0x30,0xf8,0x60,0xc0,
- 0xcc,0xcc,0x7c,0x38,0xcc,0x78,0xcc,0xcc,
- 0xcc,0xcc,0x78,0xcc,0x18,0x18,0x18,0x7e,
- 0x18,0x7e,0x18,0x3c,0x24,0x66,0x42,0xc3,
- 0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,
- 0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x38,
- 0x7c,0x6c,0x0c,0x18,0x7c,0xe6,0xc6,0xce,
- 0x7c,0x30,0x60,0x6c,0x7c,0x38,0xd8,0xd8,
- 0x1e,0x00,0x33,0x00,0x40,0x80,0xde,0xc0,
- 0xb3,0x40,0xa0,0x40,0xa0,0x40,0xb3,0x40,
- 0xde,0xc0,0x40,0x80,0x33,0x00,0x1e,0x00,
- 0xf0,0x00,0xd0,0xb0,0x70,0xb0,0x60,0x24,
- 0x6c,0xd8,0xd8,0x6c,0x24,0x06,0x06,0x06,
- 0xfe,0xfe,0xe0,0xe0,0x1e,0x00,0x33,0x00,
- 0x40,0x80,0xd2,0xc0,0x96,0x40,0x9c,0x40,
- 0x92,0x40,0x92,0x40,0xdc,0xc0,0x40,0x80,
- 0x33,0x00,0x1e,0x00,0xf0,0x60,0x90,0x90,
- 0x90,0x60,0xfc,0xfc,0x00,0x30,0x30,0x30,
- 0xfc,0xfc,0x30,0x30,0x30,0xf0,0x80,0x40,
- 0x20,0x90,0xb0,0x60,0x60,0xb0,0x10,0x60,
- 0x30,0x90,0x60,0xc0,0x60,0xc0,0xc0,0xc0,
- 0xf6,0xfe,0xce,0xc6,0xc6,0xc6,0xc6,0xc6,
- 0xc6,0x14,0x14,0x14,0x14,0x14,0x14,0x14,
- 0x14,0x74,0xf4,0xf4,0xf4,0xf4,0x74,0x3e,
- 0xc0,0xc0,0xc0,0x60,0x40,0x20,0x20,0x20,
- 0x20,0x20,0xe0,0x20,0xf0,0x00,0x60,0x90,
- 0x90,0x90,0x60,0x90,0xd8,0x6c,0x6c,0xd8,
- 0x90,0x20,0x40,0x10,0x40,0x13,0xe0,0x0a,
- 0x40,0x09,0x40,0x24,0xc0,0x24,0x40,0x22,
- 0x00,0x22,0x00,0x21,0x00,0xe1,0x00,0x20,
- 0x80,0x21,0xe0,0x11,0x00,0x10,0x80,0x08,
- 0x40,0x09,0x20,0x25,0x60,0x24,0xc0,0x22,
- 0x00,0x22,0x00,0x21,0x00,0xe1,0x00,0x20,
- 0x80,0x20,0x40,0x10,0x40,0x13,0xe0,0x0a,
- 0x40,0x09,0x40,0x64,0xc0,0xb4,0x40,0x12,
- 0x00,0x62,0x00,0x31,0x00,0x91,0x00,0x60,
- 0x80,0x70,0xf8,0xcc,0xcc,0xc0,0x60,0x60,
- 0x30,0x30,0x00,0x30,0x30,0xe1,0xc0,0x61,
- 0x80,0x7f,0x80,0x3f,0x00,0x33,0x00,0x33,
- 0x00,0x12,0x00,0x1e,0x00,0x1e,0x00,0x0c,
- 0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x18,
- 0x00,0xe1,0xc0,0x61,0x80,0x7f,0x80,0x3f,
- 0x00,0x33,0x00,0x33,0x00,0x12,0x00,0x1e,
- 0x00,0x1e,0x00,0x0c,0x00,0x0c,0x00,0x00,
- 0x00,0x0c,0x00,0x06,0x00,0xe1,0xc0,0x61,
- 0x80,0x7f,0x80,0x3f,0x00,0x33,0x00,0x33,
- 0x00,0x12,0x00,0x1e,0x00,0x1e,0x00,0x0c,
- 0x00,0x0c,0x00,0x00,0x00,0x36,0x00,0x1c,
- 0x00,0xe1,0xc0,0x61,0x80,0x7f,0x80,0x3f,
- 0x00,0x33,0x00,0x33,0x00,0x12,0x00,0x1e,
- 0x00,0x1e,0x00,0x0c,0x00,0x0c,0x00,0x00,
- 0x00,0x16,0x00,0x0d,0x00,0xe1,0xc0,0x61,
- 0x80,0x7f,0x80,0x3f,0x00,0x33,0x00,0x33,
- 0x00,0x12,0x00,0x1e,0x00,0x1e,0x00,0x0c,
- 0x00,0x0c,0x00,0x00,0x00,0x36,0x00,0x36,
- 0x00,0xe1,0xc0,0x61,0x80,0x7f,0x80,0x3f,
- 0x00,0x33,0x00,0x33,0x00,0x12,0x00,0x1e,
- 0x00,0x1e,0x00,0x0c,0x00,0x0c,0x00,0x0c,
- 0x00,0x0a,0x00,0x06,0x00,0xe3,0xf8,0x63,
- 0xf8,0x7f,0x00,0x7f,0x00,0x33,0x00,0x33,
- 0xf8,0x3b,0xf8,0x1b,0x00,0x1b,0x00,0x1f,
- 0x00,0x0f,0xf8,0x0f,0xf8,0x18,0x0c,0x08,
- 0x3c,0x7e,0x63,0xc3,0xc0,0xc0,0xc0,0xc0,
- 0xc3,0x63,0x7e,0x3c,0xfe,0xfe,0xc0,0xc0,
- 0xc0,0xfe,0xfe,0xc0,0xc0,0xfe,0xfe,0x00,
- 0x18,0x30,0xfe,0xfe,0xc0,0xc0,0xc0,0xfe,
- 0xfe,0xc0,0xc0,0xfe,0xfe,0x00,0x18,0x0c,
- 0xfe,0xfe,0xc0,0xc0,0xc0,0xfe,0xfe,0xc0,
- 0xc0,0xfe,0xfe,0x00,0x6c,0x38,0xfe,0xfe,
- 0xc0,0xc0,0xc0,0xfe,0xfe,0xc0,0xc0,0xfe,
- 0xfe,0x00,0x6c,0x6c,0x60,0x60,0x60,0x60,
- 0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x00,
- 0x60,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,
- 0xc0,0xc0,0xc0,0xc0,0xc0,0x00,0xc0,0x60,
- 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
- 0x30,0x30,0x30,0x00,0xd8,0x70,0x30,0x30,
- 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
- 0x30,0x00,0xd8,0xd8,0x7e,0x00,0x7f,0x00,
- 0x63,0x00,0x61,0x80,0x61,0x80,0xf9,0x80,
- 0xf9,0x80,0x61,0x80,0x61,0x80,0x63,0x00,
- 0x7f,0x00,0x7e,0x00,0xc3,0xc7,0xc7,0xcf,
- 0xcb,0xdb,0xd3,0xf3,0xe3,0xe3,0xc3,0x00,
- 0x2c,0x1a,0x3e,0x00,0x7f,0x00,0x63,0x00,
- 0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,
- 0xc1,0x80,0x63,0x00,0x7f,0x00,0x3e,0x00,
- 0x00,0x00,0x0c,0x00,0x18,0x00,0x3e,0x00,
- 0x7f,0x00,0x63,0x00,0xc1,0x80,0xc1,0x80,
- 0xc1,0x80,0xc1,0x80,0xc1,0x80,0x63,0x00,
- 0x7f,0x00,0x3e,0x00,0x00,0x00,0x18,0x00,
- 0x0c,0x00,0x3e,0x00,0x7f,0x00,0x63,0x00,
- 0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,
- 0xc1,0x80,0x63,0x00,0x7f,0x00,0x3e,0x00,
- 0x00,0x00,0x36,0x00,0x1c,0x00,0x3e,0x00,
- 0x7f,0x00,0x63,0x00,0xc1,0x80,0xc1,0x80,
- 0xc1,0x80,0xc1,0x80,0xc1,0x80,0x63,0x00,
- 0x7f,0x00,0x3e,0x00,0x00,0x00,0x2c,0x00,
- 0x1a,0x00,0x3e,0x00,0x7f,0x00,0x63,0x00,
- 0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,
- 0xc1,0x80,0x63,0x00,0x7f,0x00,0x3e,0x00,
- 0x00,0x00,0x36,0x00,0x36,0x00,0x84,0xcc,
- 0x78,0x30,0x30,0x78,0xcc,0x84,0xbe,0x00,
- 0xff,0x00,0x63,0x00,0xf1,0x80,0xd1,0x80,
- 0xc9,0x80,0xc9,0x80,0xc5,0x80,0xc7,0x80,
- 0x63,0x00,0x7f,0x80,0x3e,0x80,0x3c,0x7e,
- 0xe7,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,
- 0xc3,0x00,0x18,0x30,0x3c,0x7e,0xe7,0xc3,
- 0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0x00,
- 0x18,0x0c,0x3c,0x7e,0xe7,0xc3,0xc3,0xc3,
- 0xc3,0xc3,0xc3,0xc3,0xc3,0x00,0x6c,0x38,
- 0x3c,0x7e,0xe7,0xc3,0xc3,0xc3,0xc3,0xc3,
- 0xc3,0xc3,0xc3,0x00,0x6c,0x6c,0x0c,0x00,
- 0x0c,0x00,0x0c,0x00,0x0c,0x00,0x0c,0x00,
- 0x1e,0x00,0x1e,0x00,0x33,0x00,0x33,0x00,
- 0x61,0x80,0xe1,0xc0,0x00,0x00,0x0c,0x00,
- 0x06,0x00,0xc0,0xc0,0xf8,0xfc,0xce,0xc6,
- 0xc6,0xce,0xfc,0xf8,0xc0,0xc0,0xd8,0xdc,
- 0xc6,0xc6,0xc6,0xdc,0xd8,0xcc,0xcc,0xcc,
- 0x7c,0x38,0x6c,0xfc,0xcc,0xcc,0x7c,0x1c,
- 0xcc,0xfc,0x78,0x00,0x30,0x60,0x6c,0xfc,
- 0xcc,0xcc,0x7c,0x1c,0xcc,0xfc,0x78,0x00,
- 0x30,0x18,0x6c,0xfc,0xcc,0xcc,0x7c,0x1c,
- 0xcc,0xfc,0x78,0x00,0xd8,0x70,0x6c,0xfc,
- 0xcc,0xcc,0x7c,0x1c,0xcc,0xfc,0x78,0x00,
- 0x58,0x34,0x6c,0xfc,0xcc,0xcc,0x7c,0x1c,
- 0xcc,0xfc,0x78,0x00,0xd8,0xd8,0x6c,0xfc,
- 0xcc,0xcc,0x7c,0x1c,0xcc,0xfc,0x78,0x00,
- 0x30,0x28,0x18,0x73,0x80,0xff,0xc0,0xcc,
- 0xc0,0xcc,0x00,0x7f,0xc0,0x1c,0xc0,0xcc,
- 0xc0,0xff,0xc0,0x73,0x80,0x30,0x18,0x10,
- 0x38,0x7c,0xec,0xc0,0xc0,0xc0,0xec,0x7c,
- 0x38,0x38,0x7c,0xcc,0xc0,0xfc,0xcc,0xcc,
- 0x78,0x30,0x00,0x30,0x60,0x38,0x7c,0xcc,
- 0xc0,0xfc,0xcc,0xcc,0x78,0x30,0x00,0x30,
- 0x18,0x38,0x7c,0xcc,0xc0,0xfc,0xcc,0xcc,
- 0x78,0x30,0x00,0x6c,0x38,0x38,0x7c,0xcc,
- 0xc0,0xfc,0xcc,0xcc,0x78,0x30,0x00,0xd8,
- 0xd8,0x60,0x60,0x60,0x60,0x60,0x60,0x60,
- 0x60,0x60,0x00,0x60,0xc0,0xc0,0xc0,0xc0,
- 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x00,0xc0,
- 0x60,0x30,0x30,0x30,0x30,0x30,0x30,0x30,
- 0x30,0x30,0x00,0xd8,0x70,0x30,0x30,0x30,
- 0x30,0x30,0x30,0x30,0x30,0x30,0x00,0xd8,
- 0xd8,0x38,0x7c,0xee,0xc6,0xc6,0xc6,0xee,
- 0x7c,0x3c,0xf8,0x38,0x6c,0xc6,0xc6,0xc6,
- 0xc6,0xc6,0xc6,0xe6,0xfe,0xdc,0x00,0x58,
- 0x34,0x38,0x7c,0xee,0xc6,0xc6,0xc6,0xee,
- 0x7c,0x38,0x00,0x18,0x30,0x38,0x7c,0xee,
- 0xc6,0xc6,0xc6,0xee,0x7c,0x38,0x00,0x30,
- 0x18,0x38,0x7c,0xee,0xc6,0xc6,0xc6,0xee,
- 0x7c,0x38,0x00,0x6c,0x38,0x38,0x7c,0xee,
- 0xc6,0xc6,0xc6,0xee,0x7c,0x38,0x00,0x58,
- 0x34,0x38,0x7c,0xee,0xc6,0xc6,0xc6,0xee,
- 0x7c,0x38,0x00,0x6c,0x6c,0x30,0x30,0x00,
- 0xfc,0xfc,0x00,0x30,0x30,0xb8,0x7c,0xee,
- 0xe6,0xd6,0xce,0xee,0x7c,0x3a,0x76,0xfe,
- 0xce,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0x00,
- 0x18,0x30,0x76,0xfe,0xce,0xc6,0xc6,0xc6,
- 0xc6,0xc6,0xc6,0x00,0x30,0x18,0x76,0xfe,
- 0xce,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0x00,
- 0x6c,0x38,0x76,0xfe,0xce,0xc6,0xc6,0xc6,
- 0xc6,0xc6,0xc6,0x00,0x6c,0x6c,0x60,0x70,
- 0x10,0x18,0x38,0x38,0x2c,0x6c,0x6c,0xc6,
- 0xc6,0xc6,0x00,0x30,0x18,0xc0,0xc0,0xc0,
- 0xd8,0xfc,0xee,0xc6,0xc6,0xc6,0xee,0xfc,
- 0xd8,0xc0,0xc0,0xc0,0x60,0x70,0x10,0x18,
- 0x38,0x38,0x2c,0x6c,0x6c,0xc6,0xc6,0xc6,
- 0x00,0x6c,0x6c,
-};
-
-BMF_FontData BMF_font_helvb14 = {
- -2, -3,
- 12, 14,
- {
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0, 0, 0, 0, 12, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {1, 1, 0, 0, 3, 0},
- {2, 12, -1, 0, 4, 1},
- {5, 4, 0, -8, 6, 13},
- {8, 12, 1, 0, 7, 17},
- {7, 15, 0, 2, 7, 29},
- {11, 11, 0, 0, 12, 44},
- {9, 12, 0, 0, 9, 66},
- {2, 4, -1, -8, 4, 90},
- {4, 15, 0, 3, 4, 94},
- {4, 15, 1, 3, 4, 109},
- {5, 6, 0, -6, 5, 124},
- {6, 8, -1, 0, 8, 130},
- {2, 5, 0, 3, 3, 138},
- {7, 2, 0, -3, 8, 143},
- {2, 2, 0, 0, 3, 145},
- {4, 11, 0, 0, 4, 147},
- {6, 12, 0, 0, 7, 158},
- {4, 12, 0, 0, 7, 170},
- {6, 12, 0, 0, 7, 182},
- {6, 12, 0, 0, 7, 194},
- {6, 12, 0, 0, 7, 206},
- {6, 12, 0, 0, 7, 218},
- {6, 12, 0, 0, 7, 230},
- {6, 12, 0, 0, 7, 242},
- {6, 12, 0, 0, 7, 254},
- {6, 12, 0, 0, 7, 266},
- {2, 8, -1, 0, 4, 278},
- {2, 11, -1, 3, 4, 286},
- {7, 8, 0, 0, 8, 297},
- {6, 6, -1, -1, 8, 305},
- {7, 8, 0, 0, 8, 311},
- {6, 12, -1, 0, 8, 319},
- {12, 14, 0, 2, 13, 331},
- {10, 12, 1, 0, 9, 359},
- {8, 12, 0, 0, 9, 383},
- {8, 12, 0, 0, 9, 395},
- {8, 12, 0, 0, 9, 407},
- {7, 12, 0, 0, 8, 419},
- {7, 12, -1, 0, 8, 431},
- {9, 12, 0, 0, 10, 443},
- {8, 12, 0, 0, 9, 467},
- {2, 12, -1, 0, 5, 479},
- {6, 12, 0, 0, 7, 491},
- {9, 12, -1, 0, 10, 503},
- {7, 12, -1, 0, 8, 527},
- {10, 12, 0, 0, 11, 539},
- {8, 12, 0, 0, 9, 563},
- {9, 12, 0, 0, 10, 575},
- {7, 12, -1, 0, 9, 599},
- {9, 13, 0, 1, 10, 611},
- {8, 12, 0, 0, 9, 637},
- {8, 12, 0, 0, 9, 649},
- {8, 12, 0, 0, 9, 661},
- {8, 12, 0, 0, 9, 673},
- {8, 12, 0, 0, 9, 685},
- {12, 12, 0, 0, 13, 697},
- {9, 12, 0, 0, 10, 721},
- {10, 12, 1, 0, 9, 745},
- {8, 12, 0, 0, 9, 769},
- {3, 15, 0, 3, 4, 781},
- {4, 11, 0, 0, 4, 796},
- {3, 15, 0, 3, 4, 807},
- {6, 7, -1, -4, 8, 822},
- {7, 1, 0, 3, 7, 829},
- {2, 4, -1, -8, 4, 830},
- {6, 9, 0, 0, 7, 834},
- {7, 12, 0, 0, 8, 843},
- {6, 9, 0, 0, 7, 855},
- {7, 12, 0, 0, 8, 864},
- {6, 9, 0, 0, 7, 876},
- {4, 12, 0, 0, 5, 885},
- {7, 12, 0, 3, 8, 897},
- {7, 12, 0, 0, 8, 909},
- {2, 12, 0, 0, 3, 921},
- {3, 15, 1, 3, 3, 933},
- {7, 12, 0, 0, 7, 948},
- {2, 12, 0, 0, 3, 960},
- {10, 9, 0, 0, 11, 972},
- {7, 9, 0, 0, 8, 990},
- {7, 9, 0, 0, 8, 999},
- {7, 12, 0, 3, 8, 1008},
- {7, 12, 0, 3, 8, 1020},
- {5, 9, 0, 0, 5, 1032},
- {6, 9, 0, 0, 7, 1041},
- {4, 11, 0, 0, 5, 1050},
- {7, 9, 0, 0, 8, 1061},
- {6, 9, 0, 0, 7, 1070},
- {10, 9, 0, 0, 11, 1079},
- {7, 9, 0, 0, 8, 1097},
- {7, 12, 0, 3, 8, 1106},
- {6, 9, 0, 0, 7, 1118},
- {4, 15, 0, 3, 5, 1127},
- {1, 15, -1, 3, 4, 1142},
- {4, 15, 0, 3, 5, 1157},
- {6, 3, -1, -3, 8, 1172},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {2, 12, -1, 3, 4, 1175},
- {6, 13, 0, 2, 7, 1187},
- {7, 12, 0, 0, 7, 1200},
- {6, 8, 0, -2, 7, 1212},
- {8, 12, 1, 0, 7, 1220},
- {1, 15, -1, 3, 4, 1232},
- {7, 15, 0, 3, 7, 1247},
- {5, 2, 1, -10, 4, 1262},
- {10, 12, 0, 0, 10, 1264},
- {4, 7, 0, -5, 5, 1288},
- {6, 6, 0, -1, 7, 1295},
- {7, 5, 0, -2, 8, 1301},
- {3, 2, 0, -3, 4, 1306},
- {10, 12, 0, 0, 10, 1308},
- {4, 1, 0, -11, 4, 1332},
- {4, 5, 0, -7, 5, 1333},
- {6, 11, -1, 0, 8, 1338},
- {4, 7, 0, -5, 4, 1349},
- {4, 7, 0, -5, 4, 1356},
- {3, 2, -1, -10, 4, 1363},
- {7, 12, 0, 3, 8, 1365},
- {7, 15, 0, 3, 7, 1377},
- {2, 2, 0, -5, 3, 1392},
- {3, 3, 0, 3, 4, 1394},
- {3, 7, 0, -5, 4, 1397},
- {4, 7, 0, -5, 5, 1404},
- {6, 6, 0, -1, 7, 1411},
- {11, 12, 1, 0, 11, 1417},
- {11, 12, 1, 0, 11, 1441},
- {11, 12, 0, 0, 11, 1465},
- {6, 12, -1, 3, 8, 1489},
- {10, 14, 1, 0, 9, 1501},
- {10, 14, 1, 0, 9, 1529},
- {10, 14, 1, 0, 9, 1557},
- {10, 14, 1, 0, 9, 1585},
- {10, 14, 1, 0, 9, 1613},
- {10, 14, 1, 0, 9, 1641},
- {13, 12, 1, 0, 13, 1669},
- {8, 15, 0, 3, 9, 1693},
- {7, 14, 0, 0, 8, 1708},
- {7, 14, 0, 0, 8, 1722},
- {7, 14, 0, 0, 8, 1736},
- {7, 14, 0, 0, 8, 1750},
- {3, 14, 0, 0, 5, 1764},
- {3, 14, -1, 0, 5, 1778},
- {5, 14, 1, 0, 5, 1792},
- {5, 14, 1, 0, 5, 1806},
- {9, 12, 1, 0, 9, 1820},
- {8, 14, 0, 0, 9, 1844},
- {9, 14, 0, 0, 10, 1858},
- {9, 14, 0, 0, 10, 1886},
- {9, 14, 0, 0, 10, 1914},
- {9, 14, 0, 0, 10, 1942},
- {9, 14, 0, 0, 10, 1970},
- {6, 8, -1, 0, 8, 1998},
- {9, 12, 0, 0, 10, 2006},
- {8, 14, 0, 0, 9, 2030},
- {8, 14, 0, 0, 9, 2044},
- {8, 14, 0, 0, 9, 2058},
- {8, 14, 0, 0, 9, 2072},
- {10, 14, 1, 0, 9, 2086},
- {7, 12, -1, 0, 9, 2114},
- {7, 12, 0, 0, 8, 2126},
- {6, 12, 0, 0, 7, 2138},
- {6, 12, 0, 0, 7, 2150},
- {6, 12, 0, 0, 7, 2162},
- {6, 12, 0, 0, 7, 2174},
- {6, 12, 0, 0, 7, 2186},
- {6, 13, 0, 0, 7, 2198},
- {10, 9, 0, 0, 11, 2211},
- {6, 12, 0, 3, 7, 2229},
- {6, 12, 0, 0, 7, 2241},
- {6, 12, 0, 0, 7, 2253},
- {6, 12, 0, 0, 7, 2265},
- {6, 12, 0, 0, 7, 2277},
- {3, 12, 1, 0, 3, 2289},
- {3, 12, 0, 0, 3, 2301},
- {5, 12, 2, 0, 3, 2313},
- {5, 12, 2, 0, 3, 2325},
- {7, 12, 0, 0, 8, 2337},
- {7, 12, 0, 0, 8, 2349},
- {7, 12, 0, 0, 8, 2361},
- {7, 12, 0, 0, 8, 2373},
- {7, 12, 0, 0, 8, 2385},
- {7, 12, 0, 0, 8, 2397},
- {7, 12, 0, 0, 8, 2409},
- {6, 8, -1, 0, 8, 2421},
- {7, 9, 0, 0, 8, 2429},
- {7, 12, 0, 0, 8, 2438},
- {7, 12, 0, 0, 8, 2450},
- {7, 12, 0, 0, 8, 2462},
- {7, 12, 0, 0, 8, 2474},
- {7, 15, 0, 3, 8, 2486},
- {7, 15, 0, 3, 8, 2501},
- {7, 15, 0, 3, 8, 2516},
- },
- bitmap_data
-};
-
-#endif
-
diff --git a/intern/bmfont/intern/BMF_font_helvb8.cpp b/intern/bmfont/intern/BMF_font_helvb8.cpp
deleted file mode 100644
index fb56049c8fe..00000000000
--- a/intern/bmfont/intern/BMF_font_helvb8.cpp
+++ /dev/null
@@ -1,455 +0,0 @@
-/**
- * $Id$
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "BMF_FontData.h"
-#include "BMF_Settings.h"
-
-#if BMF_INCLUDE_HELVB8
-
-static unsigned char bitmap_data[]= {
- 0x00,0x80,0x00,0x80,0x80,0x80,0x80,0xa0,
- 0xa0,0xa0,0x50,0xf8,0x50,0xf8,0x50,0x40,
- 0xe0,0x10,0x60,0x80,0x70,0x20,0x5c,0x54,
- 0x2c,0xd0,0xa8,0xe8,0x58,0xb0,0xa8,0x48,
- 0xa0,0x40,0x80,0x80,0x80,0x40,0x80,0x80,
- 0x80,0x80,0x80,0x40,0x80,0x40,0x40,0x40,
- 0x40,0x40,0x80,0x40,0xe0,0x40,0x20,0x20,
- 0xf8,0x20,0x20,0x80,0x40,0x40,0xf0,0x80,
- 0x80,0x80,0x80,0x80,0x40,0x40,0x40,0x60,
- 0x90,0x90,0x90,0x90,0x60,0x40,0x40,0x40,
- 0x40,0xc0,0x40,0xf0,0x40,0x20,0x10,0x90,
- 0x60,0xc0,0x20,0x20,0xc0,0x20,0xc0,0x20,
- 0x20,0xf0,0x60,0x20,0x20,0xc0,0x20,0x20,
- 0xc0,0x80,0xe0,0x60,0x90,0x90,0xe0,0x80,
- 0x70,0x40,0x40,0x40,0x20,0x10,0xf0,0x60,
- 0x90,0x90,0x60,0x90,0x60,0x60,0x10,0x70,
- 0x90,0x90,0x60,0x80,0x00,0x00,0x80,0x80,
- 0x40,0x40,0x00,0x00,0x40,0x20,0x40,0x80,
- 0x40,0x20,0xe0,0x00,0xe0,0x80,0x40,0x20,
- 0x40,0x80,0x40,0x00,0x40,0x20,0xc0,0x78,
- 0x80,0x9e,0xa5,0x99,0x41,0x3e,0x88,0x88,
- 0x70,0x50,0x20,0x20,0xe0,0x90,0x90,0xe0,
- 0x90,0xe0,0x70,0x88,0x80,0x80,0x88,0x70,
- 0xf0,0x88,0x88,0x88,0x88,0xf0,0xf0,0x80,
- 0x80,0xe0,0x80,0xf0,0x80,0x80,0x80,0xe0,
- 0x80,0xf0,0x70,0x88,0x88,0x98,0x80,0x70,
- 0x88,0x88,0x88,0xf8,0x88,0x88,0x80,0x80,
- 0x80,0x80,0x80,0x80,0x40,0xa0,0x20,0x20,
- 0x20,0x20,0x90,0x90,0xe0,0xc0,0xa0,0x90,
- 0xe0,0x80,0x80,0x80,0x80,0x80,0xa8,0xa8,
- 0xa8,0xa8,0xd8,0x88,0x88,0x98,0xa8,0xa8,
- 0xc8,0x88,0x70,0x88,0x88,0x88,0x88,0x70,
- 0x80,0x80,0xe0,0x90,0x90,0xe0,0x10,0x20,
- 0x70,0x88,0x88,0x88,0x88,0x70,0x90,0x90,
- 0xe0,0x90,0x90,0xe0,0xe0,0x10,0x10,0xe0,
- 0x80,0x70,0x40,0x40,0x40,0x40,0x40,0xe0,
- 0x70,0x88,0x88,0x88,0x88,0x88,0x40,0xa0,
- 0x90,0x90,0x90,0x90,0x48,0x48,0x6c,0x92,
- 0x92,0x92,0x90,0x90,0x60,0x60,0x90,0x90,
- 0x20,0x20,0x30,0x48,0x48,0xc8,0xf0,0x80,
- 0x40,0x20,0x10,0xf0,0xc0,0x80,0x80,0x80,
- 0x80,0x80,0xc0,0x40,0x40,0x40,0x40,0x80,
- 0x80,0x80,0xc0,0x40,0x40,0x40,0x40,0x40,
- 0xc0,0x88,0x50,0x20,0xf8,0x80,0x80,0x80,
- 0xd0,0xa0,0xe0,0x20,0xc0,0xe0,0x90,0x90,
- 0x90,0xe0,0x80,0x80,0x60,0x80,0x80,0x80,
- 0x60,0x70,0x90,0x90,0x90,0x70,0x10,0x10,
- 0x60,0x80,0xe0,0xa0,0x40,0x40,0x40,0x40,
- 0x40,0xe0,0x40,0x20,0x60,0x10,0x70,0x90,
- 0x90,0x70,0x90,0x90,0x90,0x90,0xe0,0x80,
- 0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x80,
- 0x80,0x40,0x40,0x40,0x40,0x40,0x40,0x00,
- 0x40,0xa0,0xa0,0xc0,0xc0,0xa0,0x80,0x80,
- 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xa8,
- 0xa8,0xa8,0xa8,0xf0,0x90,0x90,0x90,0x90,
- 0xe0,0x60,0x90,0x90,0x90,0x60,0x80,0xe0,
- 0x90,0x90,0x90,0xe0,0x10,0x70,0x90,0x90,
- 0x90,0x70,0x80,0x80,0x80,0xc0,0xa0,0xc0,
- 0x20,0x60,0x80,0x60,0x40,0x40,0x40,0x40,
- 0xe0,0x40,0x40,0x60,0xa0,0xa0,0xa0,0xa0,
- 0x40,0xa0,0x90,0x90,0x90,0x50,0x50,0xa8,
- 0xa8,0xa8,0x90,0x90,0x60,0x90,0x90,0x80,
- 0x40,0x60,0x90,0x90,0x90,0xe0,0x80,0x40,
- 0x20,0xe0,0x20,0x40,0x40,0xc0,0x40,0x40,
- 0x20,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
- 0x80,0x40,0x40,0x60,0x40,0x40,0x80,0xb0,
- 0x48,0x00,0x80,0x80,0x80,0x80,0x80,0x00,
- 0x80,0x40,0x40,0xa0,0x80,0xa0,0x40,0x40,
- 0xf0,0x40,0x40,0xe0,0x40,0x30,0x88,0x70,
- 0x50,0x70,0x88,0x20,0x20,0xf8,0x50,0x88,
- 0x80,0x80,0x80,0x00,0x80,0x80,0x80,0xe0,
- 0x10,0x30,0x60,0x90,0x60,0x80,0x70,0x90,
- 0x78,0x84,0xb4,0xa4,0xb4,0x84,0x78,0xe0,
- 0x00,0xe0,0x20,0xc0,0x50,0xa0,0x50,0x10,
- 0x10,0xf0,0xc0,0x78,0x84,0xac,0xb4,0xb4,
- 0x84,0x78,0xe0,0x40,0xa0,0x40,0xf0,0x00,
- 0x20,0xf0,0x20,0xc0,0x80,0x40,0x80,0xc0,
- 0x20,0x60,0xe0,0x80,0x40,0x80,0x80,0xe0,
- 0xa0,0xa0,0xa0,0x50,0x50,0x50,0x50,0xd0,
- 0xd0,0xd0,0x78,0x80,0x80,0x80,0x40,0x40,
- 0x40,0xc0,0x40,0xe0,0x00,0xe0,0xa0,0xe0,
- 0xa0,0x50,0xa0,0x04,0x5e,0x2c,0x54,0x48,
- 0xc4,0x40,0x0e,0x44,0x22,0x5c,0x48,0xc4,
- 0x40,0x04,0x5e,0x2c,0xd4,0x28,0x64,0xe0,
- 0x60,0x90,0x40,0x20,0x00,0x20,0x88,0x88,
- 0x70,0x50,0x20,0x20,0x00,0x20,0x40,0x88,
- 0x88,0x70,0x50,0x20,0x20,0x00,0x20,0x10,
- 0x88,0x88,0x70,0x50,0x20,0x20,0x00,0x50,
- 0x20,0x88,0x88,0x70,0x50,0x20,0x20,0x00,
- 0x50,0x28,0x88,0x88,0x70,0x50,0x20,0x20,
- 0x00,0x50,0x88,0x88,0x70,0x50,0x20,0x20,
- 0x20,0x50,0x20,0x9e,0x90,0x7c,0x50,0x30,
- 0x3e,0x80,0x40,0x70,0x88,0x80,0x88,0x88,
- 0x70,0xf0,0x80,0x80,0xe0,0x80,0xf0,0x00,
- 0x20,0x40,0xf0,0x80,0x80,0xe0,0x80,0xf0,
- 0x00,0x40,0x20,0xf0,0x80,0x80,0xe0,0x80,
- 0xf0,0x00,0xa0,0x40,0xf0,0x80,0x80,0xe0,
- 0x80,0xf0,0x00,0xa0,0x40,0x40,0x40,0x40,
- 0x40,0x40,0x00,0x40,0x80,0x80,0x80,0x80,
- 0x80,0x80,0x80,0x00,0x80,0x40,0x40,0x40,
- 0x40,0x40,0x40,0x40,0x00,0xa0,0x40,0x40,
- 0x40,0x40,0x40,0x40,0x40,0x00,0xa0,0x70,
- 0x48,0x48,0xe8,0x48,0x70,0x88,0x98,0xa8,
- 0xa8,0xc8,0x88,0x00,0x50,0x28,0x70,0x88,
- 0x88,0x88,0x88,0x70,0x00,0x20,0x40,0x70,
- 0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x10,
- 0x70,0x88,0x88,0x88,0x88,0x70,0x00,0x50,
- 0x20,0x70,0x88,0x88,0x88,0x88,0x70,0x00,
- 0x50,0x28,0x70,0x88,0x88,0x88,0x88,0x70,
- 0x00,0x50,0x90,0x60,0x60,0x90,0x80,0xf0,
- 0xc8,0xa8,0x98,0x88,0x78,0x08,0x70,0x88,
- 0x88,0x88,0x88,0x88,0x00,0x20,0x40,0x70,
- 0x88,0x88,0x88,0x88,0x88,0x00,0x20,0x10,
- 0x70,0x88,0x88,0x88,0x88,0x88,0x00,0x50,
- 0x20,0x70,0x88,0x88,0x88,0x88,0x88,0x00,
- 0x50,0x20,0x20,0x30,0x48,0x48,0xc8,0x00,
- 0x10,0x08,0x80,0xf0,0x88,0x88,0xf0,0x80,
- 0x80,0xa0,0x90,0x90,0xa0,0x90,0x60,0xd0,
- 0xa0,0xe0,0x20,0xc0,0x00,0x40,0x80,0xd0,
- 0xa0,0xe0,0x20,0xc0,0x00,0x40,0x20,0xd0,
- 0xa0,0xe0,0x20,0xc0,0x00,0xa0,0x40,0x68,
- 0x50,0x70,0x10,0x60,0x00,0xb0,0x68,0xd0,
- 0xa0,0xe0,0x20,0xc0,0x00,0xa0,0xd0,0xa0,
- 0xe0,0x20,0xc0,0x40,0xa0,0x40,0xd8,0xa0,
- 0xf8,0x28,0xd0,0x80,0x40,0x60,0x80,0x80,
- 0x80,0x60,0x60,0x80,0xe0,0xa0,0x40,0x00,
- 0x20,0x40,0x60,0x80,0xe0,0xa0,0x40,0x00,
- 0x40,0x20,0x60,0x80,0xe0,0xa0,0x40,0x00,
- 0xa0,0x40,0x60,0x80,0xe0,0xa0,0x40,0x00,
- 0xa0,0x40,0x40,0x40,0x40,0x40,0x00,0x40,
- 0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x80,
- 0x40,0x40,0x40,0x40,0x40,0x40,0x00,0xa0,
- 0x40,0x40,0x40,0x40,0x40,0x40,0x00,0xa0,
- 0x60,0x90,0x90,0x90,0x70,0xa0,0x60,0x90,
- 0x90,0x90,0x90,0x90,0xe0,0x00,0xa0,0x50,
- 0x60,0x90,0x90,0x90,0x60,0x00,0x20,0x40,
- 0x60,0x90,0x90,0x90,0x60,0x00,0x20,0x10,
- 0x60,0x90,0x90,0x90,0x60,0x00,0xa0,0x40,
- 0x60,0x90,0x90,0x90,0x60,0x00,0xa0,0x50,
- 0x60,0x90,0x90,0x90,0x60,0x00,0x90,0x20,
- 0x00,0xf0,0x00,0x20,0x80,0x70,0x68,0x58,
- 0x48,0x3c,0x02,0x60,0xa0,0xa0,0xa0,0xa0,
- 0x00,0x40,0x80,0x60,0xa0,0xa0,0xa0,0xa0,
- 0x00,0x40,0x20,0x60,0xa0,0xa0,0xa0,0xa0,
- 0x00,0xa0,0x40,0x60,0xa0,0xa0,0xa0,0xa0,
- 0x00,0xa0,0x80,0x40,0x60,0x90,0x90,0x90,
- 0x00,0x20,0x10,0x80,0xe0,0x90,0x90,0x90,
- 0xe0,0x80,0x80,0x40,0x60,0x90,0x90,0x90,
- 0x00,0x50,
-};
-
-BMF_FontData BMF_font_helvb8 = {
- 0, -2,
- 9, 9,
- {
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0, 0, 0, 0, 8, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {1, 1, 0, 0, 2, 0},
- {1, 6, -1, 0, 2, 1},
- {3, 3, -1, -3, 3, 7},
- {5, 5, 0, 0, 5, 10},
- {4, 7, -1, 1, 5, 15},
- {6, 6, -1, 0, 7, 22},
- {5, 6, -1, 0, 6, 28},
- {1, 3, -1, -3, 2, 34},
- {2, 7, -1, 1, 3, 37},
- {2, 7, -1, 1, 3, 44},
- {3, 3, -1, -2, 3, 51},
- {5, 5, -1, 0, 5, 54},
- {2, 3, 0, 2, 2, 59},
- {4, 1, -2, -2, 6, 62},
- {1, 1, -1, 0, 2, 63},
- {2, 7, -1, 1, 2, 64},
- {4, 6, -1, 0, 5, 71},
- {2, 6, -2, 0, 5, 77},
- {4, 6, -1, 0, 5, 83},
- {3, 6, -2, 0, 5, 89},
- {4, 6, -1, 0, 5, 95},
- {3, 6, -2, 0, 5, 101},
- {4, 6, -1, 0, 5, 107},
- {4, 6, -1, 0, 5, 113},
- {4, 6, -1, 0, 5, 119},
- {4, 6, -1, 0, 5, 125},
- {1, 4, -1, 0, 2, 131},
- {2, 6, 0, 2, 2, 135},
- {3, 5, -1, 0, 5, 141},
- {3, 3, -1, -1, 4, 146},
- {3, 5, -2, 0, 5, 149},
- {3, 5, -2, 0, 5, 154},
- {8, 7, -1, 1, 9, 159},
- {5, 6, -1, 0, 6, 166},
- {4, 6, -2, 0, 6, 172},
- {5, 6, -1, 0, 6, 178},
- {5, 6, -1, 0, 6, 184},
- {4, 6, -2, 0, 6, 190},
- {4, 6, -2, 0, 5, 196},
- {5, 6, -1, 0, 6, 202},
- {5, 6, -1, 0, 6, 208},
- {1, 6, -1, 0, 2, 214},
- {3, 6, -1, 0, 4, 220},
- {4, 6, -2, 0, 6, 226},
- {3, 6, -2, 0, 5, 232},
- {5, 6, -2, 0, 7, 238},
- {5, 6, -1, 0, 6, 244},
- {5, 6, -1, 0, 6, 250},
- {4, 6, -2, 0, 6, 256},
- {5, 8, -1, 2, 6, 262},
- {4, 6, -2, 0, 6, 270},
- {4, 6, -2, 0, 6, 276},
- {3, 6, -1, 0, 4, 282},
- {5, 6, -1, 0, 6, 288},
- {4, 6, -2, 0, 6, 294},
- {7, 6, -1, 0, 7, 300},
- {4, 6, -2, 0, 6, 306},
- {5, 6, -1, 0, 6, 312},
- {4, 6, -2, 0, 6, 318},
- {2, 7, -1, 1, 2, 324},
- {2, 7, 0, 1, 2, 331},
- {2, 7, 0, 1, 2, 338},
- {5, 3, 0, -2, 5, 345},
- {5, 1, 0, 1, 5, 348},
- {1, 3, -1, -3, 2, 349},
- {4, 5, -1, 0, 4, 352},
- {4, 7, -1, 0, 5, 357},
- {3, 5, -1, 0, 4, 364},
- {4, 7, -1, 0, 5, 369},
- {3, 5, -1, 0, 4, 376},
- {3, 7, -1, 0, 3, 381},
- {4, 6, -1, 1, 5, 388},
- {4, 7, -1, 0, 5, 394},
- {1, 7, -1, 0, 2, 401},
- {2, 9, 0, 2, 2, 408},
- {3, 7, -1, 0, 4, 417},
- {1, 7, -1, 0, 2, 424},
- {5, 5, -1, 0, 6, 431},
- {4, 5, -1, 0, 5, 436},
- {4, 5, -1, 0, 5, 441},
- {4, 6, -1, 1, 5, 446},
- {4, 6, -1, 1, 5, 452},
- {3, 5, -1, 0, 3, 458},
- {3, 5, -1, 0, 4, 463},
- {3, 7, -1, 0, 3, 468},
- {3, 5, -1, 0, 4, 475},
- {4, 5, -1, 0, 5, 480},
- {5, 5, -1, 0, 6, 485},
- {4, 5, -1, 0, 5, 490},
- {4, 6, -1, 1, 4, 495},
- {3, 5, -1, 0, 4, 501},
- {3, 7, 0, 1, 2, 506},
- {1, 7, -1, 1, 2, 513},
- {3, 7, 0, 1, 2, 520},
- {5, 2, -1, -2, 6, 527},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {1, 1, 0, 0, 2, 529},
- {1, 7, -1, 2, 2, 530},
- {3, 7, -1, 1, 5, 537},
- {4, 6, -1, 0, 5, 544},
- {5, 5, 0, 0, 4, 550},
- {5, 5, -1, 0, 6, 555},
- {1, 7, -1, 1, 2, 560},
- {4, 8, -1, 2, 5, 567},
- {4, 1, 0, -5, 2, 575},
- {6, 7, -1, 1, 7, 576},
- {3, 5, 0, -1, 3, 583},
- {4, 3, -1, -1, 5, 588},
- {4, 3, -1, -1, 6, 591},
- {2, 1, 0, -2, 3, 594},
- {6, 7, -1, 1, 7, 595},
- {3, 1, 0, -5, 2, 602},
- {3, 3, -1, -3, 3, 603},
- {4, 5, -1, 0, 5, 606},
- {2, 4, -1, -2, 2, 611},
- {3, 4, 0, -2, 2, 615},
- {2, 2, 0, -4, 2, 619},
- {3, 6, -1, 2, 4, 621},
- {5, 8, 0, 2, 5, 627},
- {1, 2, -1, -1, 2, 635},
- {2, 2, 0, 2, 2, 637},
- {2, 4, 0, -2, 2, 639},
- {3, 5, 0, -1, 3, 643},
- {4, 3, -1, -1, 5, 648},
- {7, 7, 0, 1, 7, 651},
- {7, 7, 0, 1, 7, 658},
- {7, 7, 0, 1, 7, 665},
- {4, 6, -1, 1, 5, 672},
- {5, 9, -1, 0, 6, 678},
- {5, 9, -1, 0, 6, 687},
- {5, 9, -1, 0, 6, 696},
- {5, 9, -1, 0, 6, 705},
- {5, 8, -1, 0, 6, 714},
- {5, 9, -1, 0, 6, 722},
- {7, 6, -1, 0, 8, 731},
- {5, 8, -1, 2, 6, 737},
- {4, 9, -2, 0, 6, 745},
- {4, 9, -2, 0, 6, 754},
- {4, 9, -2, 0, 6, 763},
- {4, 8, -2, 0, 6, 772},
- {2, 9, 0, 0, 2, 780},
- {2, 9, -1, 0, 2, 789},
- {3, 9, 0, 0, 2, 798},
- {3, 8, 0, 0, 2, 807},
- {5, 6, -1, 0, 6, 815},
- {5, 9, -1, 0, 6, 821},
- {5, 9, -1, 0, 6, 830},
- {5, 9, -1, 0, 6, 839},
- {5, 9, -1, 0, 6, 848},
- {5, 9, -1, 0, 6, 857},
- {5, 8, -1, 0, 6, 866},
- {4, 4, -1, 0, 5, 874},
- {5, 8, -1, 1, 6, 878},
- {5, 9, -1, 0, 6, 886},
- {5, 9, -1, 0, 6, 895},
- {5, 9, -1, 0, 6, 904},
- {5, 8, -1, 0, 6, 913},
- {5, 9, -1, 0, 6, 921},
- {5, 6, -1, 0, 6, 930},
- {4, 7, -2, 1, 6, 936},
- {4, 8, -1, 0, 4, 943},
- {4, 8, -1, 0, 4, 951},
- {4, 8, -1, 0, 4, 959},
- {5, 8, 0, 0, 4, 967},
- {4, 7, -1, 0, 4, 975},
- {4, 8, -1, 0, 4, 982},
- {5, 5, -1, 0, 6, 990},
- {3, 7, -1, 2, 4, 995},
- {3, 8, -1, 0, 4, 1002},
- {3, 8, -1, 0, 4, 1010},
- {3, 8, -1, 0, 4, 1018},
- {3, 7, -1, 0, 4, 1026},
- {2, 8, 0, 0, 2, 1033},
- {2, 8, -1, 0, 2, 1041},
- {3, 8, 0, 0, 2, 1049},
- {3, 7, 0, 0, 2, 1057},
- {4, 8, -1, 0, 5, 1064},
- {4, 8, -1, 0, 5, 1072},
- {4, 8, -1, 0, 5, 1080},
- {4, 8, -1, 0, 5, 1088},
- {4, 8, -1, 0, 5, 1096},
- {4, 8, -1, 0, 5, 1104},
- {4, 7, -1, 0, 5, 1112},
- {4, 5, -1, 0, 5, 1119},
- {7, 7, 0, 1, 5, 1124},
- {3, 8, -1, 0, 4, 1131},
- {3, 8, -1, 0, 4, 1139},
- {3, 8, -1, 0, 4, 1147},
- {3, 7, -1, 0, 4, 1155},
- {4, 9, -1, 1, 4, 1162},
- {4, 7, -1, 1, 5, 1171},
- {4, 8, -1, 1, 4, 1178},
- },
- bitmap_data
-};
-
-#endif
-
diff --git a/intern/bmfont/intern/BMF_font_scr12.cpp b/intern/bmfont/intern/BMF_font_scr12.cpp
deleted file mode 100644
index be0be544474..00000000000
--- a/intern/bmfont/intern/BMF_font_scr12.cpp
+++ /dev/null
@@ -1,484 +0,0 @@
-/**
- * $Id$
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "BMF_FontData.h"
-#include "BMF_Settings.h"
-
-#if BMF_INCLUDE_SCR12
-
-static unsigned char bitmap_data[]= {
- 0x80,0x80,0x00,0x80,0x80,0x80,0x80,0x80,
- 0xa0,0xa0,0xa0,0xa0,0x50,0x50,0xfc,0x28,
- 0x28,0x7e,0x14,0x14,0x20,0x70,0xa8,0x28,
- 0x70,0xa0,0xa8,0x70,0x20,0x98,0x54,0x54,
- 0x2c,0xd0,0xa8,0xa8,0x64,0x74,0x88,0x8c,
- 0x50,0x20,0x50,0x48,0x30,0x80,0x40,0x20,
- 0x20,0x20,0x40,0x40,0x80,0x80,0x80,0x80,
- 0x40,0x40,0x20,0x80,0x40,0x40,0x20,0x20,
- 0x20,0x20,0x40,0x40,0x80,0x20,0xa8,0x70,
- 0xa8,0x20,0x20,0x20,0xf8,0x20,0x20,0x80,
- 0x40,0x40,0xc0,0xf8,0x80,0x80,0x80,0x80,
- 0x40,0x40,0x20,0x20,0x10,0x10,0x08,0x08,
- 0x70,0x88,0x88,0xc8,0xa8,0x98,0x88,0x70,
- 0xe0,0x40,0x40,0x40,0x40,0x40,0xc0,0x40,
- 0xf8,0x80,0x40,0x20,0x10,0x08,0x88,0x70,
- 0x70,0x88,0x08,0x08,0x70,0x08,0x88,0x70,
- 0x10,0x10,0x10,0xf8,0x90,0x50,0x30,0x10,
- 0x70,0x88,0x08,0x08,0xf0,0x80,0x80,0xf8,
- 0x70,0x88,0x88,0x88,0xf0,0x80,0x88,0x70,
- 0x40,0x40,0x20,0x20,0x10,0x10,0x08,0xf8,
- 0x70,0x88,0x88,0x88,0x70,0x88,0x88,0x70,
- 0x70,0x88,0x08,0x78,0x88,0x88,0x88,0x70,
- 0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x40,
- 0x40,0xc0,0x00,0x00,0x40,0x40,0x08,0x10,
- 0x20,0x40,0x80,0x40,0x20,0x10,0x08,0xf8,
- 0x00,0xf8,0x80,0x40,0x20,0x10,0x08,0x10,
- 0x20,0x40,0x80,0x20,0x00,0x20,0x20,0x10,
- 0x88,0x88,0x70,0x38,0x40,0x98,0xa8,0xa8,
- 0x98,0x48,0x30,0x88,0x88,0xf8,0x88,0x50,
- 0x50,0x20,0x20,0xf0,0x88,0x88,0x88,0xf0,
- 0x88,0x88,0xf0,0x70,0x88,0x80,0x80,0x80,
- 0x80,0x88,0x70,0xf0,0x88,0x88,0x88,0x88,
- 0x88,0x88,0xf0,0xf8,0x80,0x80,0x80,0xf0,
- 0x80,0x80,0xf8,0x80,0x80,0x80,0x80,0xf0,
- 0x80,0x80,0xf8,0x68,0x98,0x88,0x88,0x98,
- 0x80,0x88,0x70,0x88,0x88,0x88,0x88,0xf8,
- 0x88,0x88,0x88,0xe0,0x40,0x40,0x40,0x40,
- 0x40,0x40,0xe0,0x70,0x88,0x88,0x08,0x08,
- 0x08,0x08,0x08,0x88,0x88,0x90,0xa0,0xc0,
- 0xa0,0x90,0x88,0xf8,0x80,0x80,0x80,0x80,
- 0x80,0x80,0x80,0x88,0x88,0xa8,0xa8,0xd8,
- 0xd8,0x88,0x88,0x88,0x98,0x98,0xa8,0xa8,
- 0xc8,0xc8,0x88,0x70,0x88,0x88,0x88,0x88,
- 0x88,0x88,0x70,0x80,0x80,0x80,0x80,0xf0,
- 0x88,0x88,0xf0,0x08,0x10,0x70,0xa8,0x88,
- 0x88,0x88,0x88,0x88,0x70,0x88,0x90,0x90,
- 0xa0,0xf0,0x88,0x88,0xf0,0x70,0x88,0x88,
- 0x08,0x70,0x80,0x88,0x70,0x20,0x20,0x20,
- 0x20,0x20,0x20,0x20,0xf8,0x70,0x88,0x88,
- 0x88,0x88,0x88,0x88,0x88,0x20,0x20,0x50,
- 0x50,0x50,0x88,0x88,0x88,0x50,0x50,0xf8,
- 0xa8,0xa8,0xa8,0x88,0x88,0x88,0x88,0x50,
- 0x20,0x20,0x50,0x88,0x88,0x20,0x20,0x20,
- 0x20,0x50,0x50,0x88,0x88,0xf8,0x80,0x40,
- 0x40,0x20,0x10,0x08,0xf8,0xe0,0x80,0x80,
- 0x80,0x80,0x80,0x80,0x80,0xe0,0x08,0x08,
- 0x10,0x10,0x20,0x20,0x40,0x40,0x80,0x80,
- 0xe0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
- 0xe0,0x88,0x50,0x20,0xfe,0x20,0x40,0x80,
- 0x80,0x68,0x98,0x88,0x78,0x08,0x70,0xb0,
- 0xc8,0x88,0x88,0xc8,0xb0,0x80,0x80,0x70,
- 0x88,0x80,0x80,0x88,0x70,0x68,0x98,0x88,
- 0x88,0x98,0x68,0x08,0x08,0x70,0x88,0x80,
- 0xf8,0x88,0x70,0x40,0x40,0x40,0x40,0x40,
- 0xf0,0x40,0x38,0xf0,0x08,0x68,0x98,0x88,
- 0x88,0x98,0x68,0x88,0x88,0x88,0x88,0xc8,
- 0xb0,0x80,0x80,0x20,0x20,0x20,0x20,0x20,
- 0xe0,0x00,0x20,0x60,0x90,0x10,0x10,0x10,
- 0x10,0x10,0x70,0x00,0x10,0x88,0x90,0xa0,
- 0xc0,0xa0,0x90,0x80,0x80,0x20,0x20,0x20,
- 0x20,0x20,0x20,0x20,0xe0,0xa8,0xa8,0xa8,
- 0xa8,0xa8,0xd0,0x88,0x88,0x88,0x88,0xc8,
- 0xb0,0x70,0x88,0x88,0x88,0x88,0x70,0x80,
- 0x80,0xb0,0xc8,0x88,0x88,0xc8,0xb0,0x08,
- 0x08,0x68,0x98,0x88,0x88,0x98,0x68,0x80,
- 0x80,0x80,0x80,0xc8,0xb0,0x70,0x88,0x10,
- 0x60,0x88,0x70,0x30,0x40,0x40,0x40,0x40,
- 0xf0,0x40,0x68,0x98,0x88,0x88,0x88,0x88,
- 0x20,0x20,0x50,0x50,0x88,0x88,0x50,0xa8,
- 0xa8,0xa8,0x88,0x88,0x88,0x88,0x50,0x20,
- 0x50,0x88,0xf0,0x08,0x68,0x98,0x88,0x88,
- 0x88,0x88,0xf8,0x80,0x40,0x20,0x10,0xf8,
- 0x18,0x20,0x20,0x20,0x20,0xc0,0x20,0x20,
- 0x20,0x18,0x80,0x80,0x80,0x80,0x80,0x80,
- 0x80,0x80,0x80,0x80,0xc0,0x20,0x20,0x20,
- 0x20,0x18,0x20,0x20,0x20,0xc0,0x98,0xb4,
- 0x64,0x80,0x80,0x80,0x80,0x80,0x00,0x80,
- 0x80,0x20,0x20,0x70,0x88,0x80,0x88,0x70,
- 0x20,0x20,0xb0,0x48,0x40,0xf0,0x40,0x40,
- 0x48,0x30,0x90,0x60,0x90,0x90,0x60,0x90,
- 0x20,0x70,0x20,0x70,0x20,0x50,0x88,0x88,
- 0x80,0x80,0x80,0x80,0x00,0x00,0x80,0x80,
- 0x80,0x80,0x70,0x88,0x10,0x28,0x48,0x90,
- 0xa0,0x40,0x88,0x70,0xa0,0x78,0x84,0xb4,
- 0xa4,0xb4,0x84,0x78,0xf0,0x90,0x70,0x10,
- 0x60,0x14,0x28,0x50,0xa0,0x50,0x28,0x14,
- 0x08,0xf8,0xf0,0x78,0x84,0xac,0xb4,0xb4,
- 0x84,0x78,0xe0,0x60,0x90,0x60,0xf8,0x00,
- 0x20,0x20,0xf8,0x20,0x20,0xe0,0x40,0x20,
- 0xa0,0x40,0xc0,0x20,0x40,0x20,0xc0,0x80,
- 0x40,0x80,0xe8,0x90,0x90,0x90,0x90,0x28,
- 0x28,0x28,0x28,0x68,0xa8,0xa8,0xa8,0x7c,
- 0x80,0x80,0xc0,0x40,0xe0,0x40,0x40,0xc0,
- 0x40,0xf0,0x60,0x90,0x90,0x60,0xa0,0x50,
- 0x28,0x14,0x28,0x50,0xa0,0x08,0x38,0xa8,
- 0x58,0x28,0xf0,0x48,0x40,0xc0,0x40,0x38,
- 0x10,0x88,0x68,0x30,0xf0,0x48,0x40,0xc0,
- 0x40,0x08,0x38,0xa8,0x58,0x28,0xd0,0x28,
- 0x40,0x20,0xc0,0x70,0x88,0x88,0x40,0x20,
- 0x20,0x00,0x20,0x88,0x88,0xf8,0x88,0x50,
- 0x50,0x20,0x00,0x20,0x40,0x88,0x88,0xf8,
- 0x50,0x50,0x20,0x20,0x00,0x20,0x10,0x88,
- 0x88,0xf8,0x50,0x50,0x20,0x20,0x00,0x50,
- 0x20,0x88,0x88,0xf8,0x50,0x50,0x20,0x20,
- 0x00,0xb0,0x68,0x88,0x88,0xf8,0x50,0x50,
- 0x20,0x20,0x00,0x50,0x88,0x88,0xf8,0x50,
- 0x50,0x20,0x20,0x20,0x50,0x20,0x9c,0x90,
- 0xf0,0x50,0x5c,0x30,0x30,0x1c,0x60,0x20,
- 0x70,0x88,0x80,0x80,0x80,0x80,0x88,0x70,
- 0xf8,0x80,0x80,0xf0,0x80,0x80,0xf8,0x00,
- 0x20,0x40,0xf8,0x80,0x80,0xf0,0x80,0x80,
- 0xf8,0x00,0x20,0x10,0xf8,0x80,0x80,0xf0,
- 0x80,0x80,0xf8,0x00,0x50,0x20,0xf8,0x80,
- 0x80,0xf0,0x80,0x80,0xf8,0x00,0x50,0xe0,
- 0x40,0x40,0x40,0x40,0x40,0xe0,0x00,0x40,
- 0x80,0xe0,0x40,0x40,0x40,0x40,0x40,0xe0,
- 0x00,0x40,0x20,0xe0,0x40,0x40,0x40,0x40,
- 0x40,0xe0,0x00,0xa0,0x40,0xe0,0x40,0x40,
- 0x40,0x40,0x40,0xe0,0x00,0xa0,0x78,0x44,
- 0x44,0xf4,0x44,0x44,0x44,0x78,0x88,0x98,
- 0x98,0xa8,0xc8,0xc8,0x88,0x00,0xb0,0x68,
- 0x70,0x88,0x88,0x88,0x88,0x88,0x70,0x00,
- 0x20,0x40,0x70,0x88,0x88,0x88,0x88,0x88,
- 0x70,0x00,0x20,0x10,0x70,0x88,0x88,0x88,
- 0x88,0x88,0x70,0x00,0x50,0x20,0x70,0x88,
- 0x88,0x88,0x88,0x88,0x70,0x00,0xb0,0x68,
- 0x70,0x88,0x88,0x88,0x88,0x88,0x70,0x00,
- 0x50,0x88,0x50,0x20,0x50,0x88,0xb8,0x44,
- 0x64,0x54,0x4c,0x44,0x3a,0x70,0x88,0x88,
- 0x88,0x88,0x88,0x88,0x00,0x20,0x40,0x70,
- 0x88,0x88,0x88,0x88,0x88,0x88,0x00,0x20,
- 0x10,0x70,0x88,0x88,0x88,0x88,0x88,0x88,
- 0x00,0x50,0x20,0x70,0x88,0x88,0x88,0x88,
- 0x88,0x88,0x00,0x50,0x20,0x20,0x20,0x50,
- 0x50,0x88,0x88,0x00,0x20,0x10,0x80,0x80,
- 0xf0,0x88,0x88,0x88,0xf0,0x80,0x80,0xb0,
- 0x88,0x88,0x88,0x90,0xa0,0x90,0x60,0x78,
- 0x88,0x78,0x08,0x70,0x00,0x20,0x40,0x78,
- 0x88,0x78,0x08,0x70,0x00,0x20,0x10,0x78,
- 0x88,0x78,0x08,0x70,0x00,0x50,0x20,0x78,
- 0x88,0x78,0x08,0x70,0x00,0xb0,0x68,0x78,
- 0x88,0x78,0x08,0x70,0x00,0x50,0x78,0x88,
- 0x78,0x08,0x70,0x00,0x20,0x50,0x20,0x6c,
- 0x90,0x7c,0x12,0x6c,0x60,0x20,0x70,0x88,
- 0x80,0x80,0x88,0x70,0x78,0x80,0xf8,0x88,
- 0x70,0x00,0x20,0x40,0x78,0x80,0xf8,0x88,
- 0x70,0x00,0x20,0x10,0x78,0x80,0xf8,0x88,
- 0x70,0x00,0x50,0x20,0x78,0x80,0xf8,0x88,
- 0x70,0x00,0x50,0x20,0x20,0x20,0x20,0xe0,
- 0x00,0x40,0x80,0x20,0x20,0x20,0x20,0xe0,
- 0x00,0x40,0x20,0x20,0x20,0x20,0x20,0xe0,
- 0x00,0xa0,0x40,0x20,0x20,0x20,0x20,0xe0,
- 0x00,0xa0,0x70,0x88,0x88,0x88,0x78,0x08,
- 0x90,0x60,0xd0,0x88,0x88,0x88,0xc8,0xb0,
- 0x00,0xb0,0x68,0x70,0x88,0x88,0x88,0x70,
- 0x00,0x20,0x40,0x70,0x88,0x88,0x88,0x70,
- 0x00,0x20,0x10,0x70,0x88,0x88,0x88,0x70,
- 0x00,0x50,0x20,0x70,0x88,0x88,0x88,0x70,
- 0x00,0xb0,0x68,0x70,0x88,0x88,0x88,0x70,
- 0x00,0x50,0x20,0x00,0xf8,0x00,0x20,0xb8,
- 0x64,0x54,0x4c,0x3a,0x68,0x98,0x88,0x88,
- 0x88,0x00,0x20,0x40,0x68,0x98,0x88,0x88,
- 0x88,0x00,0x20,0x10,0x68,0x98,0x88,0x88,
- 0x88,0x00,0x50,0x20,0x68,0x98,0x88,0x88,
- 0x88,0x00,0x50,0xf0,0x08,0x68,0x98,0x88,
- 0x88,0x88,0x00,0x20,0x10,0x80,0x80,0xb0,
- 0xc8,0x88,0x88,0xc8,0xb0,0x80,0x80,0xf0,
- 0x08,0x68,0x98,0x88,0x88,0x88,0x00,0xd8,
-};
-
-BMF_FontData BMF_font_scr12 = {
- 0, -2,
- 7, 10,
- {
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0, 0, 0, 0, 16, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0, 0, 0, 0, 7, -1},
- {1, 8, -3, 0, 7, 0},
- {3, 4, -2, -5, 7, 8},
- {7, 8, 0, 0, 7, 12},
- {5, 9, -1, 1, 7, 20},
- {6, 8, 0, 0, 7, 29},
- {6, 8, 0, 0, 7, 37},
- {3, 4, -2, -5, 7, 45},
- {3, 10, -2, 2, 7, 49},
- {3, 10, -2, 2, 7, 59},
- {5, 5, -1, -3, 7, 69},
- {5, 5, -1, -1, 7, 74},
- {2, 4, -2, 2, 7, 79},
- {5, 1, -1, -3, 7, 83},
- {1, 2, -3, 0, 7, 84},
- {5, 10, -1, 1, 7, 86},
- {5, 8, -1, 0, 7, 96},
- {3, 8, -2, 0, 7, 104},
- {5, 8, -1, 0, 7, 112},
- {5, 8, -1, 0, 7, 120},
- {5, 8, -1, 0, 7, 128},
- {5, 8, -1, 0, 7, 136},
- {5, 8, -1, 0, 7, 144},
- {5, 8, -1, 0, 7, 152},
- {5, 8, -1, 0, 7, 160},
- {5, 8, -1, 0, 7, 168},
- {1, 6, -3, 0, 7, 176},
- {2, 8, -2, 2, 7, 182},
- {5, 9, -1, 1, 7, 190},
- {5, 3, -1, -2, 7, 199},
- {5, 9, -1, 1, 7, 202},
- {5, 8, -1, 0, 7, 211},
- {5, 8, -1, 0, 7, 219},
- {5, 8, -1, 0, 7, 227},
- {5, 8, -1, 0, 7, 235},
- {5, 8, -1, 0, 7, 243},
- {5, 8, -1, 0, 7, 251},
- {5, 8, -1, 0, 7, 259},
- {5, 8, -1, 0, 7, 267},
- {5, 8, -1, 0, 7, 275},
- {5, 8, -1, 0, 7, 283},
- {3, 8, -2, 0, 7, 291},
- {5, 8, -1, 0, 7, 299},
- {5, 8, -1, 0, 7, 307},
- {5, 8, -1, 0, 7, 315},
- {5, 8, -1, 0, 7, 323},
- {5, 8, -1, 0, 7, 331},
- {5, 8, -1, 0, 7, 339},
- {5, 8, -1, 0, 7, 347},
- {5, 10, -1, 2, 7, 355},
- {5, 8, -1, 0, 7, 365},
- {5, 8, -1, 0, 7, 373},
- {5, 8, -1, 0, 7, 381},
- {5, 8, -1, 0, 7, 389},
- {5, 8, -1, 0, 7, 397},
- {5, 8, -1, 0, 7, 405},
- {5, 8, -1, 0, 7, 413},
- {5, 8, -1, 0, 7, 421},
- {5, 8, -1, 0, 7, 429},
- {3, 9, -2, 1, 7, 437},
- {5, 10, -1, 1, 7, 446},
- {3, 9, -2, 1, 7, 456},
- {5, 3, -1, -5, 7, 465},
- {7, 1, 0, 1, 7, 468},
- {3, 4, -2, -5, 7, 469},
- {5, 6, -1, 0, 7, 473},
- {5, 8, -1, 0, 7, 479},
- {5, 6, -1, 0, 7, 487},
- {5, 8, -1, 0, 7, 493},
- {5, 6, -1, 0, 7, 501},
- {5, 8, -1, 0, 7, 507},
- {5, 8, -1, 2, 7, 515},
- {5, 8, -1, 0, 7, 523},
- {3, 8, -2, 0, 7, 531},
- {4, 10, -1, 2, 7, 539},
- {5, 8, -1, 0, 7, 549},
- {3, 8, -2, 0, 7, 557},
- {5, 6, -1, 0, 7, 565},
- {5, 6, -1, 0, 7, 571},
- {5, 6, -1, 0, 7, 577},
- {5, 8, -1, 2, 7, 583},
- {5, 8, -1, 2, 7, 591},
- {5, 6, -1, 0, 7, 599},
- {5, 6, -1, 0, 7, 605},
- {4, 7, -1, 0, 7, 611},
- {5, 6, -1, 0, 7, 618},
- {5, 6, -1, 0, 7, 624},
- {5, 6, -1, 0, 7, 630},
- {5, 6, -1, 0, 7, 636},
- {5, 8, -1, 2, 7, 642},
- {5, 6, -1, 0, 7, 650},
- {5, 10, -1, 2, 7, 656},
- {1, 10, -3, 1, 7, 666},
- {5, 10, -1, 2, 7, 676},
- {6, 3, 0, -2, 7, 686},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {1, 8, -3, 2, 7, 689},
- {5, 9, -1, 0, 7, 697},
- {5, 8, -1, 0, 7, 706},
- {4, 6, -1, -2, 7, 714},
- {5, 8, -1, 0, 7, 720},
- {1, 10, -3, 1, 7, 728},
- {5, 10, -1, 1, 7, 738},
- {3, 1, -2, -7, 7, 748},
- {6, 7, 0, 0, 7, 749},
- {4, 5, -1, -4, 7, 756},
- {6, 7, 0, 0, 7, 761},
- {5, 2, -1, -3, 7, 768},
- {4, 1, -1, -3, 7, 770},
- {6, 7, 0, 0, 7, 771},
- {3, 1, -2, -7, 7, 778},
- {4, 3, -1, -4, 7, 779},
- {5, 7, -1, 0, 7, 782},
- {3, 5, -2, -4, 7, 789},
- {3, 5, -2, -4, 7, 794},
- {2, 2, -2, -7, 7, 799},
- {5, 6, -1, 1, 7, 801},
- {6, 9, 0, 1, 7, 807},
- {1, 2, -3, -3, 7, 816},
- {2, 2, -2, 2, 7, 818},
- {3, 5, -2, -4, 7, 820},
- {4, 5, -1, -4, 7, 825},
- {6, 7, 0, 0, 7, 830},
- {5, 10, -1, 1, 7, 837},
- {5, 10, -1, 1, 7, 847},
- {5, 10, -1, 1, 7, 857},
- {5, 8, -1, 2, 7, 867},
- {5, 10, -1, 0, 7, 875},
- {5, 10, -1, 0, 7, 885},
- {5, 10, -1, 0, 7, 895},
- {5, 10, -1, 0, 7, 905},
- {5, 9, -1, 0, 7, 915},
- {5, 10, -1, 0, 7, 924},
- {6, 8, 0, 0, 7, 934},
- {5, 10, -1, 2, 7, 942},
- {5, 10, -1, 0, 7, 952},
- {5, 10, -1, 0, 7, 962},
- {5, 10, -1, 0, 7, 972},
- {5, 9, -1, 0, 7, 982},
- {3, 10, -2, 0, 7, 991},
- {3, 10, -2, 0, 7, 1001},
- {3, 10, -2, 0, 7, 1011},
- {3, 9, -2, 0, 7, 1021},
- {6, 8, 0, 0, 7, 1030},
- {5, 10, -1, 0, 7, 1038},
- {5, 10, -1, 0, 7, 1048},
- {5, 10, -1, 0, 7, 1058},
- {5, 10, -1, 0, 7, 1068},
- {5, 10, -1, 0, 7, 1078},
- {5, 9, -1, 0, 7, 1088},
- {5, 5, -1, -1, 7, 1097},
- {7, 7, 0, 0, 7, 1102},
- {5, 10, -1, 0, 7, 1109},
- {5, 10, -1, 0, 7, 1119},
- {5, 10, -1, 0, 7, 1129},
- {5, 9, -1, 0, 7, 1139},
- {5, 10, -1, 0, 7, 1148},
- {5, 9, -1, 0, 7, 1158},
- {5, 8, -1, 0, 7, 1167},
- {5, 8, -1, 0, 7, 1175},
- {5, 8, -1, 0, 7, 1183},
- {5, 8, -1, 0, 7, 1191},
- {5, 8, -1, 0, 7, 1199},
- {5, 7, -1, 0, 7, 1207},
- {5, 9, -1, 0, 7, 1214},
- {7, 5, 0, 0, 7, 1223},
- {5, 8, -1, 2, 7, 1228},
- {5, 8, -1, 0, 7, 1236},
- {5, 8, -1, 0, 7, 1244},
- {5, 8, -1, 0, 7, 1252},
- {5, 7, -1, 0, 7, 1260},
- {3, 8, -2, 0, 7, 1267},
- {3, 8, -2, 0, 7, 1275},
- {3, 8, -2, 0, 7, 1283},
- {3, 7, -2, 0, 7, 1291},
- {5, 9, -1, 0, 7, 1298},
- {5, 8, -1, 0, 7, 1307},
- {5, 8, -1, 0, 7, 1315},
- {5, 8, -1, 0, 7, 1323},
- {5, 8, -1, 0, 7, 1331},
- {5, 8, -1, 0, 7, 1339},
- {5, 7, -1, 0, 7, 1347},
- {5, 5, -1, -1, 7, 1354},
- {7, 5, 0, 0, 7, 1359},
- {5, 8, -1, 0, 7, 1364},
- {5, 8, -1, 0, 7, 1372},
- {5, 8, -1, 0, 7, 1380},
- {5, 7, -1, 0, 7, 1388},
- {5, 10, -1, 2, 7, 1395},
- {5, 10, -1, 2, 7, 1405},
- {5, 9, -1, 2, 7, 1415},
- },
- bitmap_data
-};
-
-#endif
-
diff --git a/intern/bmfont/intern/BMF_font_scr14.cpp b/intern/bmfont/intern/BMF_font_scr14.cpp
deleted file mode 100644
index 596442885e1..00000000000
--- a/intern/bmfont/intern/BMF_font_scr14.cpp
+++ /dev/null
@@ -1,510 +0,0 @@
-/**
- * $Id$
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "BMF_FontData.h"
-#include "BMF_Settings.h"
-
-#if BMF_INCLUDE_SCR14
-
-static unsigned char bitmap_data[]= {
- 0x80,0x80,0x00,0x80,0x80,0x80,0x80,0x80,
- 0x80,0xa0,0xa0,0xa0,0xa0,0x50,0x50,0xfc,
- 0x28,0x28,0x28,0x7e,0x14,0x14,0x20,0x70,
- 0xa8,0x28,0x30,0x60,0xa0,0xa8,0x70,0x20,
- 0x98,0x54,0x54,0x2c,0x10,0x68,0x54,0x54,
- 0x32,0x74,0x88,0x8c,0x90,0x60,0x20,0x50,
- 0x48,0x30,0x80,0x40,0x20,0x20,0x20,0x40,
- 0x40,0x80,0x80,0x80,0x80,0x80,0x40,0x40,
- 0x20,0x80,0x40,0x40,0x20,0x20,0x20,0x20,
- 0x20,0x40,0x40,0x80,0x20,0xa8,0x70,0x70,
- 0xa8,0x20,0x20,0x20,0xf8,0x20,0x20,0x80,
- 0x40,0x40,0xc0,0xf8,0x80,0x80,0x80,0x80,
- 0x40,0x40,0x20,0x20,0x10,0x10,0x08,0x08,
- 0x70,0x88,0x88,0xc8,0xa8,0x98,0x88,0x88,
- 0x70,0xe0,0x40,0x40,0x40,0x40,0x40,0x40,
- 0xc0,0x40,0xf8,0x80,0x40,0x20,0x10,0x08,
- 0x88,0x88,0x70,0x70,0x88,0x08,0x08,0x70,
- 0x08,0x08,0x88,0x70,0x10,0x10,0x10,0xf8,
- 0x90,0x50,0x50,0x30,0x10,0x70,0x88,0x08,
- 0x08,0x08,0xf0,0x80,0x80,0xf8,0x70,0x88,
- 0x88,0x88,0x88,0xf0,0x80,0x88,0x70,0x40,
- 0x40,0x40,0x20,0x20,0x10,0x10,0x08,0xf8,
- 0x70,0x88,0x88,0x88,0x70,0x88,0x88,0x88,
- 0x70,0x70,0x88,0x08,0x08,0x78,0x88,0x88,
- 0x88,0x70,0x80,0x80,0x00,0x00,0x80,0x80,
- 0x80,0x40,0x40,0xc0,0x00,0x00,0x40,0x40,
- 0x08,0x10,0x20,0x40,0x80,0x40,0x20,0x10,
- 0x08,0xf8,0x00,0xf8,0x80,0x40,0x20,0x10,
- 0x08,0x10,0x20,0x40,0x80,0x20,0x20,0x00,
- 0x20,0x20,0x10,0x88,0x88,0x70,0x38,0x40,
- 0x98,0xa8,0xa8,0x98,0x88,0x48,0x30,0x88,
- 0x88,0xf8,0x88,0x50,0x50,0x50,0x20,0x20,
- 0xf0,0x88,0x88,0x88,0xf0,0x88,0x88,0x88,
- 0xf0,0x70,0x88,0x80,0x80,0x80,0x80,0x80,
- 0x88,0x70,0xf0,0x88,0x88,0x88,0x88,0x88,
- 0x88,0x88,0xf0,0xf8,0x80,0x80,0x80,0xf0,
- 0x80,0x80,0x80,0xf8,0x80,0x80,0x80,0x80,
- 0xf0,0x80,0x80,0x80,0xf8,0x68,0x98,0x88,
- 0x88,0x98,0x80,0x80,0x88,0x70,0x88,0x88,
- 0x88,0x88,0xf8,0x88,0x88,0x88,0x88,0xe0,
- 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xe0,
- 0x70,0x88,0x88,0x08,0x08,0x08,0x08,0x08,
- 0x08,0x88,0x88,0x90,0xa0,0xc0,0xa0,0x90,
- 0x88,0x88,0xf8,0x80,0x80,0x80,0x80,0x80,
- 0x80,0x80,0x80,0x88,0x88,0x88,0xa8,0xa8,
- 0xd8,0xd8,0x88,0x88,0x88,0x98,0x98,0xa8,
- 0xa8,0xc8,0xc8,0x88,0x88,0x70,0x88,0x88,
- 0x88,0x88,0x88,0x88,0x88,0x70,0x80,0x80,
- 0x80,0x80,0xf0,0x88,0x88,0x88,0xf0,0x08,
- 0x10,0x70,0xa8,0x88,0x88,0x88,0x88,0x88,
- 0x88,0x70,0x88,0x88,0x90,0xa0,0xf0,0x88,
- 0x88,0x88,0xf0,0x70,0x88,0x08,0x08,0x70,
- 0x80,0x80,0x88,0x70,0x20,0x20,0x20,0x20,
- 0x20,0x20,0x20,0x20,0xf8,0x70,0x88,0x88,
- 0x88,0x88,0x88,0x88,0x88,0x88,0x20,0x20,
- 0x50,0x50,0x50,0x88,0x88,0x88,0x88,0x50,
- 0x50,0xf8,0xa8,0xa8,0x88,0x88,0x88,0x88,
- 0x88,0x88,0x50,0x50,0x20,0x50,0x50,0x88,
- 0x88,0x20,0x20,0x20,0x20,0x20,0x50,0x50,
- 0x88,0x88,0xf8,0x80,0x40,0x40,0x20,0x10,
- 0x10,0x08,0xf8,0xf0,0x80,0x80,0x80,0x80,
- 0x80,0x80,0x80,0x80,0x80,0xf0,0x08,0x08,
- 0x10,0x10,0x20,0x20,0x40,0x40,0x80,0x80,
- 0xf0,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
- 0x10,0x10,0xf0,0x88,0x50,0x20,0xfe,0x20,
- 0x40,0x80,0x80,0x68,0x98,0x88,0x78,0x08,
- 0x88,0x70,0xb0,0xc8,0x88,0x88,0x88,0xc8,
- 0xb0,0x80,0x80,0x70,0x88,0x80,0x80,0x80,
- 0x88,0x70,0x68,0x98,0x88,0x88,0x88,0x98,
- 0x68,0x08,0x08,0x70,0x88,0x80,0xf8,0x88,
- 0x88,0x70,0x40,0x40,0x40,0x40,0x40,0x40,
- 0xf0,0x40,0x38,0x70,0x88,0x08,0x68,0x98,
- 0x88,0x88,0x88,0x98,0x68,0x88,0x88,0x88,
- 0x88,0x88,0xc8,0xb0,0x80,0x80,0x20,0x20,
- 0x20,0x20,0x20,0x20,0xe0,0x00,0x20,0x60,
- 0x90,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
- 0x70,0x00,0x10,0x88,0x88,0x90,0xe0,0xa0,
- 0x90,0x88,0x80,0x80,0x20,0x20,0x20,0x20,
- 0x20,0x20,0x20,0x20,0xe0,0xa8,0xa8,0xa8,
- 0xa8,0xa8,0xa8,0xd0,0x88,0x88,0x88,0x88,
- 0x88,0xc8,0xb0,0x70,0x88,0x88,0x88,0x88,
- 0x88,0x70,0x80,0x80,0x80,0xb0,0xc8,0x88,
- 0x88,0x88,0xc8,0xb0,0x08,0x08,0x08,0x68,
- 0x98,0x88,0x88,0x88,0x98,0x68,0x80,0x80,
- 0x80,0x80,0x80,0xc8,0xb0,0x70,0x88,0x08,
- 0x70,0x80,0x88,0x70,0x30,0x40,0x40,0x40,
- 0x40,0x40,0xf0,0x40,0x40,0x68,0x98,0x88,
- 0x88,0x88,0x88,0x88,0x20,0x20,0x50,0x50,
- 0x88,0x88,0x88,0x50,0xa8,0xa8,0xa8,0xa8,
- 0x88,0x88,0x88,0x88,0x50,0x20,0x50,0x88,
- 0x88,0x70,0x88,0x08,0x68,0x98,0x88,0x88,
- 0x88,0x88,0x88,0xf8,0x80,0x40,0x20,0x10,
- 0x08,0xf8,0x18,0x20,0x20,0x20,0x20,0x20,
- 0xc0,0x20,0x20,0x20,0x20,0x18,0x80,0x80,
- 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
- 0x80,0x80,0xc0,0x20,0x20,0x20,0x20,0x20,
- 0x18,0x20,0x20,0x20,0x20,0xc0,0x98,0xb4,
- 0x64,0x80,0x80,0x80,0x80,0x80,0x80,0x00,
- 0x80,0x80,0x20,0x20,0x70,0x88,0x80,0x80,
- 0x88,0x70,0x20,0x20,0xb0,0x48,0x40,0x40,
- 0xf0,0x40,0x40,0x48,0x30,0x88,0x70,0x88,
- 0x88,0x70,0x88,0x70,0x20,0xf8,0x20,0xf8,
- 0x50,0x50,0x88,0x88,0x80,0x80,0x80,0x80,
- 0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x80,
- 0x70,0x88,0x10,0x28,0x48,0x88,0x90,0xa0,
- 0x40,0x88,0x70,0xd8,0x38,0x44,0x92,0xaa,
- 0xa2,0xaa,0x92,0x44,0x38,0xf8,0x00,0x68,
- 0x90,0x70,0x10,0x60,0x12,0x24,0x48,0x90,
- 0x48,0x24,0x12,0x08,0x08,0xf8,0xf0,0x38,
- 0x44,0xaa,0xaa,0xb2,0xaa,0xb2,0x44,0x38,
- 0xe0,0x60,0x90,0x90,0x60,0xf8,0x00,0x20,
- 0x20,0xf8,0x20,0x20,0xe0,0x40,0x20,0xa0,
- 0x40,0xc0,0x20,0x40,0x20,0xc0,0x80,0x40,
- 0x80,0x80,0xb4,0xc8,0x88,0x88,0x88,0x88,
- 0x28,0x28,0x28,0x28,0x28,0x68,0xa8,0xa8,
- 0xa8,0x7c,0x80,0x80,0xc0,0x20,0x40,0xe0,
- 0x40,0x40,0xc0,0x40,0xf8,0x00,0x70,0x88,
- 0x88,0x88,0x70,0x90,0x48,0x24,0x12,0x24,
- 0x48,0x90,0x04,0x9e,0x54,0x2c,0x14,0xe8,
- 0x44,0x40,0xc0,0x40,0x1c,0x08,0x84,0x54,
- 0x28,0x10,0xe8,0x44,0x40,0xc0,0x40,0x04,
- 0x9e,0x54,0x2c,0xd4,0x28,0x44,0x20,0xc0,
- 0x70,0x88,0x80,0x40,0x20,0x20,0x00,0x00,
- 0x20,0x20,0x88,0x88,0xf8,0x88,0x50,0x50,
- 0x20,0x20,0x00,0x20,0x40,0x88,0x88,0xf8,
- 0x88,0x50,0x50,0x20,0x20,0x00,0x20,0x10,
- 0x88,0x88,0xf8,0x88,0x50,0x50,0x20,0x20,
- 0x00,0x50,0x20,0x88,0x88,0xf8,0x88,0x50,
- 0x50,0x20,0x20,0x00,0xb0,0x68,0x88,0x88,
- 0xf8,0x88,0x50,0x50,0x20,0x20,0x00,0xd8,
- 0x88,0x88,0xf8,0x88,0x50,0x50,0x20,0x20,
- 0x20,0x50,0x20,0x9c,0x90,0xf0,0x90,0x5c,
- 0x50,0x30,0x30,0x1c,0x60,0x10,0x20,0x70,
- 0x88,0x80,0x80,0x80,0x80,0x80,0x88,0x70,
- 0xf8,0x80,0x80,0x80,0xf0,0x80,0x80,0xf8,
- 0x00,0x20,0x40,0xf8,0x80,0x80,0x80,0xf0,
- 0x80,0x80,0xf8,0x00,0x20,0x10,0xf8,0x80,
- 0x80,0x80,0xf0,0x80,0x80,0xf8,0x00,0x50,
- 0x20,0xf8,0x80,0x80,0x80,0xf0,0x80,0x80,
- 0xf8,0x00,0xd8,0xe0,0x40,0x40,0x40,0x40,
- 0x40,0x40,0xe0,0x00,0x40,0x80,0xe0,0x40,
- 0x40,0x40,0x40,0x40,0x40,0xe0,0x00,0x40,
- 0x20,0xe0,0x40,0x40,0x40,0x40,0x40,0x40,
- 0xe0,0x00,0xa0,0x40,0x70,0x20,0x20,0x20,
- 0x20,0x20,0x20,0x70,0x00,0xd8,0x78,0x44,
- 0x44,0x44,0xf4,0x44,0x44,0x44,0x78,0x88,
- 0x98,0x98,0xa8,0xa8,0xc8,0xc8,0x88,0x00,
- 0xb0,0x68,0x70,0x88,0x88,0x88,0x88,0x88,
- 0x88,0x70,0x00,0x20,0x40,0x70,0x88,0x88,
- 0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x10,
- 0x70,0x88,0x88,0x88,0x88,0x88,0x88,0x70,
- 0x00,0x50,0x20,0x70,0x88,0x88,0x88,0x88,
- 0x88,0x88,0x70,0x00,0xb0,0x68,0x70,0x88,
- 0x88,0x88,0x88,0x88,0x88,0x70,0x00,0xd8,
- 0x88,0x50,0x20,0x50,0x88,0xb8,0x44,0x64,
- 0x64,0x54,0x4c,0x4c,0x44,0x3a,0x70,0x88,
- 0x88,0x88,0x88,0x88,0x88,0x88,0x00,0x20,
- 0x40,0x70,0x88,0x88,0x88,0x88,0x88,0x88,
- 0x88,0x00,0x20,0x10,0x70,0x88,0x88,0x88,
- 0x88,0x88,0x88,0x88,0x00,0x50,0x20,0x70,
- 0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x00,
- 0xd8,0x20,0x20,0x20,0x20,0x50,0x50,0x88,
- 0x88,0x00,0x20,0x10,0xe0,0x40,0x78,0x44,
- 0x44,0x44,0x78,0x40,0xe0,0xb0,0x88,0x88,
- 0x88,0x90,0xa0,0x90,0x90,0x60,0x68,0x98,
- 0x88,0x78,0x08,0x88,0x70,0x00,0x20,0x40,
- 0x68,0x98,0x88,0x78,0x08,0x88,0x70,0x00,
- 0x20,0x10,0x68,0x98,0x88,0x78,0x08,0x88,
- 0x70,0x00,0x50,0x20,0x68,0x98,0x88,0x78,
- 0x08,0x88,0x70,0x00,0xb0,0x68,0x68,0x98,
- 0x88,0x78,0x08,0x88,0x70,0x00,0xd8,0x68,
- 0x98,0x88,0x78,0x08,0x88,0x70,0x00,0x20,
- 0x50,0x20,0x6c,0x92,0x90,0x7e,0x12,0x92,
- 0x6c,0x60,0x10,0x20,0x70,0x88,0x80,0x80,
- 0x80,0x88,0x70,0x70,0x88,0x80,0xf8,0x88,
- 0x88,0x70,0x00,0x20,0x40,0x70,0x88,0x80,
- 0xf8,0x88,0x88,0x70,0x00,0x20,0x10,0x70,
- 0x88,0x80,0xf8,0x88,0x88,0x70,0x00,0x50,
- 0x20,0x70,0x88,0x80,0xf8,0x88,0x88,0x70,
- 0x00,0xd8,0x20,0x20,0x20,0x20,0x20,0x20,
- 0xe0,0x00,0x20,0x40,0x20,0x20,0x20,0x20,
- 0x20,0x20,0xe0,0x00,0x20,0x10,0x20,0x20,
- 0x20,0x20,0x20,0x20,0xe0,0x00,0xa0,0x40,
- 0x20,0x20,0x20,0x20,0x20,0x20,0xe0,0x00,
- 0xd8,0x70,0x88,0x88,0x88,0x88,0x88,0x78,
- 0x10,0xd0,0x20,0xd0,0x88,0x88,0x88,0x88,
- 0x88,0xc8,0xb0,0x00,0xb0,0x68,0x70,0x88,
- 0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x40,
- 0x70,0x88,0x88,0x88,0x88,0x88,0x70,0x00,
- 0x20,0x10,0x70,0x88,0x88,0x88,0x88,0x88,
- 0x70,0x00,0x50,0x20,0x70,0x88,0x88,0x88,
- 0x88,0x88,0x70,0x00,0xb0,0x68,0x70,0x88,
- 0x88,0x88,0x88,0x88,0x70,0x00,0xd8,0x10,
- 0x10,0x00,0xfe,0x00,0x10,0x10,0xb8,0x44,
- 0x64,0x54,0x4c,0x44,0x3a,0x68,0x98,0x88,
- 0x88,0x88,0x88,0x88,0x00,0x20,0x40,0x68,
- 0x98,0x88,0x88,0x88,0x88,0x88,0x00,0x20,
- 0x10,0x68,0x98,0x88,0x88,0x88,0x88,0x88,
- 0x00,0x50,0x20,0x68,0x98,0x88,0x88,0x88,
- 0x88,0x88,0x00,0xd8,0x70,0x88,0x08,0x68,
- 0x98,0x88,0x88,0x88,0x88,0x88,0x00,0x20,
- 0x10,0xe0,0x40,0x58,0x64,0x44,0x44,0x44,
- 0x64,0x58,0x40,0xc0,0x70,0x88,0x08,0x68,
- 0x98,0x88,0x88,0x88,0x88,0x88,0x00,0xd8,
-};
-
-BMF_FontData BMF_font_scr14 = {
- 0, -3,
- 7, 11,
- {
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0, 0, 0, 0, 16, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0, 0, 0, 0, 7, -1},
- {1, 9, -3, 0, 7, 0},
- {3, 4, -2, -5, 7, 9},
- {7, 9, 0, 0, 7, 13},
- {5, 10, -1, 1, 7, 22},
- {7, 9, 0, 0, 7, 32},
- {6, 9, 0, 0, 7, 41},
- {3, 4, -2, -5, 7, 50},
- {3, 11, -2, 1, 7, 54},
- {3, 11, -2, 1, 7, 65},
- {5, 6, -1, -2, 7, 76},
- {5, 5, -1, -2, 7, 82},
- {2, 4, -2, 2, 7, 87},
- {5, 1, -1, -4, 7, 91},
- {1, 2, -3, 0, 7, 92},
- {5, 10, -1, 0, 7, 94},
- {5, 9, -1, 0, 7, 104},
- {3, 9, -2, 0, 7, 113},
- {5, 9, -1, 0, 7, 122},
- {5, 9, -1, 0, 7, 131},
- {5, 9, -1, 0, 7, 140},
- {5, 9, -1, 0, 7, 149},
- {5, 9, -1, 0, 7, 158},
- {5, 9, -1, 0, 7, 167},
- {5, 9, -1, 0, 7, 176},
- {5, 9, -1, 0, 7, 185},
- {1, 6, -3, 0, 7, 194},
- {2, 8, -2, 1, 7, 200},
- {5, 9, -1, 0, 7, 208},
- {5, 3, -1, -3, 7, 217},
- {5, 9, -1, 0, 7, 220},
- {5, 9, -1, 0, 7, 229},
- {5, 9, -1, 0, 7, 238},
- {5, 9, -1, 0, 7, 247},
- {5, 9, -1, 0, 7, 256},
- {5, 9, -1, 0, 7, 265},
- {5, 9, -1, 0, 7, 274},
- {5, 9, -1, 0, 7, 283},
- {5, 9, -1, 0, 7, 292},
- {5, 9, -1, 0, 7, 301},
- {5, 9, -1, 0, 7, 310},
- {3, 9, -2, 0, 7, 319},
- {5, 9, -1, 0, 7, 328},
- {5, 9, -1, 0, 7, 337},
- {5, 9, -1, 0, 7, 346},
- {5, 9, -1, 0, 7, 355},
- {5, 9, -1, 0, 7, 364},
- {5, 9, -1, 0, 7, 373},
- {5, 9, -1, 0, 7, 382},
- {5, 11, -1, 2, 7, 391},
- {5, 9, -1, 0, 7, 402},
- {5, 9, -1, 0, 7, 411},
- {5, 9, -1, 0, 7, 420},
- {5, 9, -1, 0, 7, 429},
- {5, 9, -1, 0, 7, 438},
- {5, 9, -1, 0, 7, 447},
- {5, 9, -1, 0, 7, 456},
- {5, 9, -1, 0, 7, 465},
- {5, 9, -1, 0, 7, 474},
- {4, 11, -2, 1, 7, 483},
- {5, 10, -1, 0, 7, 494},
- {4, 11, -1, 1, 7, 504},
- {5, 3, -1, -6, 7, 515},
- {7, 1, 0, 2, 7, 518},
- {3, 4, -2, -5, 7, 519},
- {5, 7, -1, 0, 7, 523},
- {5, 9, -1, 0, 7, 530},
- {5, 7, -1, 0, 7, 539},
- {5, 9, -1, 0, 7, 546},
- {5, 7, -1, 0, 7, 555},
- {5, 9, -1, 0, 7, 562},
- {5, 10, -1, 3, 7, 571},
- {5, 9, -1, 0, 7, 581},
- {3, 9, -2, 0, 7, 590},
- {4, 12, -1, 3, 7, 599},
- {5, 9, -1, 0, 7, 611},
- {3, 9, -2, 0, 7, 620},
- {5, 7, -1, 0, 7, 629},
- {5, 7, -1, 0, 7, 636},
- {5, 7, -1, 0, 7, 643},
- {5, 10, -1, 3, 7, 650},
- {5, 10, -1, 3, 7, 660},
- {5, 7, -1, 0, 7, 670},
- {5, 7, -1, 0, 7, 677},
- {4, 9, -1, 0, 7, 684},
- {5, 7, -1, 0, 7, 693},
- {5, 7, -1, 0, 7, 700},
- {5, 7, -1, 0, 7, 707},
- {5, 7, -1, 0, 7, 714},
- {5, 10, -1, 3, 7, 721},
- {5, 7, -1, 0, 7, 731},
- {5, 12, -1, 2, 7, 738},
- {1, 12, -3, 2, 7, 750},
- {5, 12, -1, 2, 7, 762},
- {6, 3, 0, -3, 7, 774},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {1, 9, -3, 2, 7, 777},
- {5, 10, -1, 0, 7, 786},
- {5, 9, -1, 0, 7, 796},
- {5, 6, -1, -3, 7, 805},
- {5, 9, -1, 0, 7, 811},
- {1, 12, -3, 2, 7, 820},
- {5, 11, -1, 2, 7, 832},
- {5, 1, -1, -8, 7, 843},
- {7, 9, 0, 0, 7, 844},
- {5, 7, -1, -2, 7, 853},
- {7, 7, 0, 0, 7, 860},
- {5, 3, -1, -3, 7, 867},
- {4, 1, -1, -4, 7, 870},
- {7, 9, 0, 0, 7, 871},
- {3, 1, -2, -8, 7, 880},
- {4, 4, -1, -4, 7, 881},
- {5, 7, -1, 0, 7, 885},
- {3, 5, -2, -5, 7, 892},
- {3, 5, -2, -5, 7, 897},
- {2, 2, -3, -8, 7, 902},
- {6, 8, -1, 2, 7, 904},
- {6, 10, 0, 1, 7, 912},
- {1, 2, -3, -3, 7, 922},
- {3, 3, -2, 3, 7, 924},
- {3, 5, -2, -5, 7, 927},
- {5, 7, -1, -2, 7, 932},
- {7, 7, 0, 0, 7, 939},
- {7, 10, 0, 0, 7, 946},
- {6, 11, 0, 1, 7, 956},
- {7, 9, 0, -1, 7, 967},
- {5, 10, -1, 3, 7, 976},
- {5, 11, -1, 0, 7, 986},
- {5, 11, -1, 0, 7, 997},
- {5, 11, -1, 0, 7, 1008},
- {5, 11, -1, 0, 7, 1019},
- {5, 10, -1, 0, 7, 1030},
- {5, 11, -1, 0, 7, 1040},
- {6, 9, 0, 0, 7, 1051},
- {5, 12, -1, 3, 7, 1060},
- {5, 11, -1, 0, 7, 1072},
- {5, 11, -1, 0, 7, 1083},
- {5, 11, -1, 0, 7, 1094},
- {5, 10, -1, 0, 7, 1105},
- {3, 11, -2, 0, 7, 1115},
- {3, 11, -2, 0, 7, 1126},
- {3, 11, -2, 0, 7, 1137},
- {5, 10, -1, 0, 7, 1148},
- {6, 9, 0, 0, 7, 1158},
- {5, 11, -1, 0, 7, 1167},
- {5, 11, -1, 0, 7, 1178},
- {5, 11, -1, 0, 7, 1189},
- {5, 11, -1, 0, 7, 1200},
- {5, 11, -1, 0, 7, 1211},
- {5, 10, -1, 0, 7, 1222},
- {5, 5, -1, -1, 7, 1232},
- {7, 9, 0, 0, 7, 1237},
- {5, 11, -1, 0, 7, 1246},
- {5, 11, -1, 0, 7, 1257},
- {5, 11, -1, 0, 7, 1268},
- {5, 10, -1, 0, 7, 1279},
- {5, 11, -1, 0, 7, 1289},
- {6, 9, 0, 0, 7, 1300},
- {5, 9, -1, 0, 7, 1309},
- {5, 10, -1, 0, 7, 1318},
- {5, 10, -1, 0, 7, 1328},
- {5, 10, -1, 0, 7, 1338},
- {5, 10, -1, 0, 7, 1348},
- {5, 9, -1, 0, 7, 1358},
- {5, 11, -1, 0, 7, 1367},
- {7, 7, 0, 0, 7, 1378},
- {5, 10, -1, 3, 7, 1385},
- {5, 10, -1, 0, 7, 1395},
- {5, 10, -1, 0, 7, 1405},
- {5, 10, -1, 0, 7, 1415},
- {5, 9, -1, 0, 7, 1425},
- {3, 10, -2, 0, 7, 1434},
- {4, 10, -2, 0, 7, 1444},
- {3, 10, -2, 0, 7, 1454},
- {5, 9, -2, 0, 7, 1464},
- {5, 11, -1, 0, 7, 1473},
- {5, 10, -1, 0, 7, 1484},
- {5, 10, -1, 0, 7, 1494},
- {5, 10, -1, 0, 7, 1504},
- {5, 10, -1, 0, 7, 1514},
- {5, 10, -1, 0, 7, 1524},
- {5, 9, -1, 0, 7, 1534},
- {7, 7, 0, 0, 7, 1543},
- {7, 7, 0, 0, 7, 1550},
- {5, 10, -1, 0, 7, 1557},
- {5, 10, -1, 0, 7, 1567},
- {5, 10, -1, 0, 7, 1577},
- {5, 9, -1, 0, 7, 1587},
- {5, 13, -1, 3, 7, 1596},
- {6, 11, 0, 2, 7, 1609},
- {5, 12, -1, 3, 7, 1620},
- },
- bitmap_data
-};
-
-#endif
-
diff --git a/intern/bmfont/intern/BMF_font_scr15.cpp b/intern/bmfont/intern/BMF_font_scr15.cpp
deleted file mode 100644
index 8490e999bdb..00000000000
--- a/intern/bmfont/intern/BMF_font_scr15.cpp
+++ /dev/null
@@ -1,525 +0,0 @@
-/**
- * $Id$
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "BMF_FontData.h"
-#include "BMF_Settings.h"
-
-#if BMF_INCLUDE_SCR15
-
-static unsigned char bitmap_data[]= {
- 0x80,0x80,0x00,0x80,0x80,0x80,0x80,0x80,
- 0x80,0x80,0x90,0x90,0x90,0x90,0x48,0x48,
- 0x48,0xfe,0x24,0x24,0x24,0x7f,0x12,0x12,
- 0x20,0x70,0xa8,0xa8,0x28,0x30,0x60,0xa0,
- 0xa8,0xa8,0x70,0x20,0x8c,0x52,0x52,0x2c,
- 0x10,0x10,0x68,0x94,0x94,0x62,0x72,0x8c,
- 0x84,0x8a,0x50,0x20,0x30,0x48,0x48,0x30,
- 0x80,0x40,0x60,0x60,0x10,0x20,0x40,0x40,
- 0x80,0x80,0x80,0x80,0x80,0x40,0x40,0x20,
- 0x10,0x80,0x40,0x20,0x20,0x10,0x10,0x10,
- 0x10,0x10,0x20,0x20,0x40,0x80,0x20,0xa8,
- 0x70,0x70,0xa8,0x20,0x10,0x10,0x10,0xfe,
- 0x10,0x10,0x10,0x80,0x40,0x20,0x60,0x60,
- 0xfc,0xc0,0xc0,0x80,0x80,0x40,0x40,0x20,
- 0x20,0x10,0x10,0x08,0x08,0x04,0x04,0x78,
- 0x84,0x84,0xc4,0xa4,0x94,0x8c,0x84,0x84,
- 0x78,0xe0,0x40,0x40,0x40,0x40,0x40,0x40,
- 0x40,0xc0,0x40,0xfc,0x80,0x40,0x20,0x10,
- 0x08,0x04,0x84,0x84,0x78,0x78,0x84,0x04,
- 0x04,0x04,0x38,0x04,0x04,0x84,0x78,0x08,
- 0x08,0x08,0xfc,0x88,0x48,0x48,0x28,0x18,
- 0x08,0x78,0x84,0x04,0x04,0x04,0xf8,0x80,
- 0x80,0x80,0xfc,0x78,0x84,0x84,0x84,0x84,
- 0xf8,0x80,0x80,0x84,0x78,0x20,0x20,0x20,
- 0x10,0x10,0x08,0x08,0x04,0x04,0xfc,0x78,
- 0x84,0x84,0x84,0x84,0x78,0x84,0x84,0x84,
- 0x78,0x78,0x84,0x04,0x04,0x7c,0x84,0x84,
- 0x84,0x84,0x78,0xc0,0xc0,0x00,0x00,0x00,
- 0xc0,0xc0,0x80,0x40,0xc0,0xc0,0x00,0x00,
- 0x00,0xc0,0xc0,0x04,0x08,0x10,0x20,0x40,
- 0x80,0x40,0x20,0x10,0x08,0x04,0xfc,0x00,
- 0x00,0xfc,0x80,0x40,0x20,0x10,0x08,0x04,
- 0x08,0x10,0x20,0x40,0x80,0x10,0x10,0x00,
- 0x10,0x10,0x08,0x04,0x84,0x84,0x78,0x38,
- 0x44,0x80,0x98,0xa4,0xa4,0x9c,0x84,0x48,
- 0x30,0x84,0x84,0xfc,0x84,0x48,0x48,0x48,
- 0x30,0x30,0x30,0xf8,0x84,0x84,0x84,0x84,
- 0xf8,0x84,0x84,0x84,0xf8,0x78,0x84,0x84,
- 0x80,0x80,0x80,0x80,0x84,0x84,0x78,0xf0,
- 0x88,0x84,0x84,0x84,0x84,0x84,0x84,0x88,
- 0xf0,0xfc,0x80,0x80,0x80,0x80,0xf8,0x80,
- 0x80,0x80,0xfc,0x80,0x80,0x80,0x80,0x80,
- 0xf8,0x80,0x80,0x80,0xfc,0x74,0x8c,0x84,
- 0x84,0x84,0x9c,0x80,0x80,0x84,0x78,0x84,
- 0x84,0x84,0x84,0x84,0xfc,0x84,0x84,0x84,
- 0x84,0xe0,0x40,0x40,0x40,0x40,0x40,0x40,
- 0x40,0x40,0xe0,0x70,0x88,0x88,0x08,0x08,
- 0x08,0x08,0x08,0x08,0x08,0x84,0x84,0x88,
- 0x90,0xa0,0xc0,0xa0,0x90,0x88,0x84,0xfc,
- 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
- 0x80,0x82,0x82,0x92,0x92,0xaa,0xaa,0xc6,
- 0xc6,0x82,0x82,0x84,0x8c,0x8c,0x94,0x94,
- 0xa4,0xa4,0xc4,0xc4,0x84,0x78,0x84,0x84,
- 0x84,0x84,0x84,0x84,0x84,0x84,0x78,0x80,
- 0x80,0x80,0x80,0xf8,0x84,0x84,0x84,0x84,
- 0xf8,0x04,0x08,0x10,0x78,0xa4,0x84,0x84,
- 0x84,0x84,0x84,0x84,0x84,0x78,0x84,0x84,
- 0x88,0x90,0xf8,0x84,0x84,0x84,0x84,0xf8,
- 0x78,0x84,0x84,0x04,0x18,0x60,0x80,0x84,
- 0x84,0x78,0x10,0x10,0x10,0x10,0x10,0x10,
- 0x10,0x10,0x10,0xfe,0x78,0x84,0x84,0x84,
- 0x84,0x84,0x84,0x84,0x84,0x84,0x30,0x30,
- 0x30,0x48,0x48,0x48,0x84,0x84,0x84,0x84,
- 0x44,0x44,0x44,0xaa,0xaa,0xaa,0x92,0x92,
- 0x92,0x82,0x84,0x84,0x48,0x48,0x30,0x30,
- 0x48,0x48,0x84,0x84,0x10,0x10,0x10,0x10,
- 0x10,0x28,0x44,0x44,0x82,0x82,0xfc,0x80,
- 0x40,0x40,0x20,0x10,0x08,0x08,0x04,0xfc,
- 0xf0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
- 0x80,0x80,0x80,0x80,0xf0,0x04,0x04,0x08,
- 0x08,0x10,0x10,0x20,0x20,0x40,0x40,0x80,
- 0x80,0xf0,0x10,0x10,0x10,0x10,0x10,0x10,
- 0x10,0x10,0x10,0x10,0x10,0xf0,0x88,0x50,
- 0x20,0xff,0x20,0x40,0xc0,0xc0,0x74,0x88,
- 0x88,0x78,0x08,0x88,0x70,0xb8,0xc4,0x84,
- 0x84,0x84,0xc4,0xb8,0x80,0x80,0x80,0x78,
- 0x84,0x80,0x80,0x80,0x84,0x78,0x74,0x8c,
- 0x84,0x84,0x84,0x8c,0x74,0x04,0x04,0x04,
- 0x78,0x84,0x80,0xfc,0x84,0x84,0x78,0x20,
- 0x20,0x20,0x20,0x20,0x20,0xf8,0x20,0x20,
- 0x1c,0x78,0x84,0x04,0x04,0x74,0x8c,0x84,
- 0x84,0x84,0x8c,0x74,0x84,0x84,0x84,0x84,
- 0x84,0xc4,0xb8,0x80,0x80,0x80,0x20,0x20,
- 0x20,0x20,0x20,0x20,0xe0,0x00,0x20,0x20,
- 0x70,0x88,0x08,0x08,0x08,0x08,0x08,0x08,
- 0x08,0x08,0x38,0x00,0x08,0x08,0x84,0x88,
- 0x90,0xe0,0xa0,0x90,0x88,0x80,0x80,0x80,
- 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
- 0x20,0xe0,0x92,0x92,0x92,0x92,0x92,0x92,
- 0xec,0x84,0x84,0x84,0x84,0x84,0xc4,0xb8,
- 0x78,0x84,0x84,0x84,0x84,0x84,0x78,0x80,
- 0x80,0x80,0x80,0xb8,0xc4,0x84,0x84,0x84,
- 0xc4,0xb8,0x04,0x04,0x04,0x04,0x74,0x8c,
- 0x84,0x84,0x84,0x8c,0x74,0x80,0x80,0x80,
- 0x80,0x80,0xc4,0xb8,0x78,0x84,0x04,0x78,
- 0x80,0x84,0x78,0x1c,0x20,0x20,0x20,0x20,
- 0x20,0xf8,0x20,0x20,0x74,0x8c,0x84,0x84,
- 0x84,0x84,0x84,0x30,0x30,0x48,0x48,0x84,
- 0x84,0x84,0x6c,0x92,0x92,0x92,0x92,0x82,
- 0x82,0x84,0x84,0x48,0x30,0x48,0x84,0x84,
- 0x78,0x84,0x04,0x04,0x74,0x8c,0x84,0x84,
- 0x84,0x84,0x84,0xfc,0x80,0x40,0x20,0x10,
- 0x08,0xfc,0x1c,0x20,0x20,0x20,0x20,0x20,
- 0xc0,0x20,0x20,0x20,0x20,0x20,0x1c,0x80,
- 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
- 0x80,0x80,0x80,0x80,0x80,0xe0,0x10,0x10,
- 0x10,0x10,0x10,0x0c,0x10,0x10,0x10,0x10,
- 0x10,0xe0,0x98,0xb4,0x64,0x80,0x80,0x80,
- 0x80,0x80,0x80,0x80,0x00,0x80,0x80,0x20,
- 0x20,0x70,0x88,0x80,0x80,0x88,0x70,0x20,
- 0x20,0xb8,0x44,0x40,0x40,0xf0,0x40,0x40,
- 0x40,0x48,0x30,0x84,0x78,0x84,0x84,0x84,
- 0x78,0x84,0x38,0x10,0x7c,0x10,0x7c,0x28,
- 0x44,0x44,0x82,0x82,0x80,0x80,0x80,0x80,
- 0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,
- 0x80,0x80,0x78,0x84,0x04,0x18,0x24,0x44,
- 0x84,0x88,0x90,0x60,0x80,0x84,0x78,0xd8,
- 0x38,0x44,0x92,0xaa,0xa2,0xaa,0x92,0x44,
- 0x38,0xf8,0x00,0x68,0x90,0x70,0x10,0x60,
- 0x09,0x12,0x24,0x48,0x90,0x48,0x24,0x12,
- 0x09,0x04,0x04,0xfc,0xfc,0x38,0x44,0xaa,
- 0xaa,0xb2,0xaa,0xb2,0x44,0x38,0xf0,0x60,
- 0x90,0x90,0x60,0xfe,0x00,0x10,0x10,0x10,
- 0xfe,0x10,0x10,0x10,0xf0,0x40,0x20,0x90,
- 0x60,0xe0,0x10,0x60,0x10,0xe0,0x80,0x40,
- 0x80,0x80,0x80,0xb4,0xc8,0x88,0x88,0x88,
- 0x88,0x88,0x24,0x24,0x24,0x24,0x24,0x24,
- 0x64,0xa4,0xa4,0xa4,0xa4,0x7e,0xc0,0xc0,
- 0x20,0x40,0xe0,0x40,0x40,0xc0,0x40,0xf8,
- 0x00,0x70,0x88,0x88,0x88,0x70,0x90,0x48,
- 0x24,0x12,0x09,0x12,0x24,0x48,0x90,0x04,
- 0x9e,0x54,0x2c,0x14,0xe8,0x44,0x42,0xc0,
- 0x40,0x1e,0x08,0x84,0x52,0x2c,0x10,0xe8,
- 0x44,0x42,0xc0,0x40,0x04,0x9e,0x54,0x2c,
- 0xd4,0x28,0x44,0x22,0xc0,0x78,0x84,0x84,
- 0x80,0x40,0x20,0x20,0x00,0x20,0x20,0x84,
- 0x84,0xfc,0x84,0x48,0x48,0x30,0x30,0x00,
- 0x20,0x40,0x84,0x84,0xfc,0x84,0x48,0x48,
- 0x30,0x30,0x00,0x10,0x08,0x84,0x84,0xfc,
- 0x84,0x48,0x48,0x30,0x30,0x00,0x48,0x30,
- 0x84,0x84,0xfc,0x84,0x48,0x48,0x30,0x30,
- 0x00,0x98,0x64,0x84,0x84,0xfc,0x84,0x48,
- 0x48,0x30,0x30,0x00,0x6c,0x84,0x84,0xfc,
- 0x84,0x48,0x48,0x30,0x30,0x30,0x48,0x30,
- 0x9e,0x90,0x90,0xf0,0x90,0x5c,0x50,0x50,
- 0x30,0x1e,0x30,0x08,0x10,0x78,0x84,0x84,
- 0x80,0x80,0x80,0x80,0x84,0x84,0x78,0xfc,
- 0x80,0x80,0x80,0xf8,0x80,0x80,0xfc,0x00,
- 0x20,0x40,0xfc,0x80,0x80,0x80,0xf8,0x80,
- 0x80,0xfc,0x00,0x10,0x08,0xfc,0x80,0x80,
- 0x80,0xf8,0x80,0x80,0xfc,0x00,0x48,0x30,
- 0xfc,0x80,0x80,0x80,0xf8,0x80,0x80,0xfc,
- 0x00,0x6c,0xe0,0x40,0x40,0x40,0x40,0x40,
- 0x40,0xe0,0x00,0x40,0x80,0xe0,0x40,0x40,
- 0x40,0x40,0x40,0x40,0xe0,0x00,0x40,0x20,
- 0xe0,0x40,0x40,0x40,0x40,0x40,0x40,0xe0,
- 0x00,0x90,0x60,0x70,0x20,0x20,0x20,0x20,
- 0x20,0x20,0x70,0x00,0xd8,0x78,0x44,0x42,
- 0x42,0x42,0xf2,0x42,0x42,0x44,0x78,0x84,
- 0x8c,0x94,0x94,0xa4,0xa4,0xc4,0x84,0x00,
- 0x98,0x64,0x78,0x84,0x84,0x84,0x84,0x84,
- 0x84,0x78,0x00,0x20,0x40,0x78,0x84,0x84,
- 0x84,0x84,0x84,0x84,0x78,0x00,0x10,0x08,
- 0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x78,
- 0x00,0x48,0x30,0x78,0x84,0x84,0x84,0x84,
- 0x84,0x84,0x78,0x00,0x98,0x64,0x78,0x84,
- 0x84,0x84,0x84,0x84,0x84,0x78,0x00,0x6c,
- 0x84,0x48,0x30,0x30,0x48,0x84,0xbc,0x42,
- 0x62,0x52,0x52,0x4a,0x4a,0x46,0x42,0x3d,
- 0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x84,
- 0x00,0x20,0x40,0x78,0x84,0x84,0x84,0x84,
- 0x84,0x84,0x84,0x00,0x10,0x08,0x78,0x84,
- 0x84,0x84,0x84,0x84,0x84,0x84,0x00,0x48,
- 0x30,0x78,0x84,0x84,0x84,0x84,0x84,0x84,
- 0x84,0x00,0x6c,0x10,0x10,0x10,0x10,0x28,
- 0x44,0x44,0x82,0x00,0x10,0x08,0xe0,0x40,
- 0x7c,0x42,0x42,0x42,0x42,0x7c,0x40,0xe0,
- 0x98,0xa4,0x84,0x84,0x84,0x88,0xb0,0x88,
- 0x88,0x70,0x74,0x88,0x88,0x78,0x08,0x88,
- 0x70,0x00,0x20,0x40,0x74,0x88,0x88,0x78,
- 0x08,0x88,0x70,0x00,0x20,0x10,0x74,0x88,
- 0x88,0x78,0x08,0x88,0x70,0x00,0x48,0x30,
- 0x74,0x88,0x88,0x78,0x08,0x88,0x70,0x00,
- 0x98,0x64,0x74,0x88,0x88,0x78,0x08,0x88,
- 0x70,0x00,0xd8,0x74,0x88,0x88,0x78,0x08,
- 0x88,0x70,0x00,0x30,0x48,0x30,0x6c,0x92,
- 0x90,0x7e,0x12,0x92,0x6c,0x30,0x08,0x10,
- 0x78,0x84,0x80,0x80,0x80,0x84,0x78,0x78,
- 0x84,0x80,0xfc,0x84,0x84,0x78,0x00,0x20,
- 0x40,0x78,0x84,0x80,0xfc,0x84,0x84,0x78,
- 0x00,0x10,0x08,0x78,0x84,0x80,0xfc,0x84,
- 0x84,0x78,0x00,0x48,0x30,0x78,0x84,0x80,
- 0xfc,0x84,0x84,0x78,0x00,0x6c,0x20,0x20,
- 0x20,0x20,0x20,0x20,0xe0,0x00,0x40,0x80,
- 0x20,0x20,0x20,0x20,0x20,0x20,0xe0,0x00,
- 0x40,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
- 0xe0,0x00,0x90,0x60,0x10,0x10,0x10,0x10,
- 0x10,0x10,0x70,0x00,0xd8,0x78,0x84,0x84,
- 0x84,0x84,0x84,0x7c,0x04,0xc8,0x30,0xc8,
- 0x84,0x84,0x84,0x84,0x84,0xc4,0xb8,0x00,
- 0x98,0x64,0x78,0x84,0x84,0x84,0x84,0x84,
- 0x78,0x00,0x20,0x40,0x78,0x84,0x84,0x84,
- 0x84,0x84,0x78,0x00,0x10,0x08,0x78,0x84,
- 0x84,0x84,0x84,0x84,0x78,0x00,0x48,0x30,
- 0x78,0x84,0x84,0x84,0x84,0x84,0x78,0x00,
- 0x98,0x64,0x78,0x84,0x84,0x84,0x84,0x84,
- 0x78,0x00,0x00,0x6c,0x30,0x00,0x00,0xfc,
- 0x00,0x00,0x30,0xbc,0x62,0x52,0x4a,0x46,
- 0x42,0x3d,0x74,0x8c,0x84,0x84,0x84,0x84,
- 0x84,0x00,0x20,0x40,0x74,0x8c,0x84,0x84,
- 0x84,0x84,0x84,0x00,0x20,0x10,0x74,0x8c,
- 0x84,0x84,0x84,0x84,0x84,0x00,0x48,0x30,
- 0x74,0x8c,0x84,0x84,0x84,0x84,0x84,0x00,
- 0x00,0x6c,0x78,0x84,0x04,0x04,0x74,0x8c,
- 0x84,0x84,0x84,0x84,0x84,0x00,0x20,0x10,
- 0xe0,0x40,0x40,0x5c,0x62,0x42,0x42,0x42,
- 0x62,0x5c,0x40,0x40,0xc0,0x78,0x84,0x04,
- 0x04,0x74,0x8c,0x84,0x84,0x84,0x84,0x84,
- 0x00,0x00,0x6c,
-};
-
-BMF_FontData BMF_font_scr15 = {
- 0, -4,
- 8, 11,
- {
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0, 0, 0, 0, 20, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0, 0, 0, 0, 8, -1},
- {1, 10, -3, 0, 8, 0},
- {4, 4, -2, -6, 8, 10},
- {8, 10, 0, 0, 8, 14},
- {5, 12, -1, 1, 8, 24},
- {7, 10, 0, 0, 8, 36},
- {7, 10, 0, 0, 8, 46},
- {3, 4, -2, -6, 8, 56},
- {4, 13, -2, 2, 8, 60},
- {4, 13, -2, 2, 8, 73},
- {5, 6, -1, -2, 8, 86},
- {7, 7, 0, -1, 8, 92},
- {3, 5, -2, 3, 8, 99},
- {6, 1, -1, -4, 8, 104},
- {2, 2, -3, 0, 8, 105},
- {6, 12, -1, 1, 8, 107},
- {6, 10, -1, 0, 8, 119},
- {3, 10, -3, 0, 8, 129},
- {6, 10, -1, 0, 8, 139},
- {6, 10, -1, 0, 8, 149},
- {6, 10, -1, 0, 8, 159},
- {6, 10, -1, 0, 8, 169},
- {6, 10, -1, 0, 8, 179},
- {6, 10, -1, 0, 8, 189},
- {6, 10, -1, 0, 8, 199},
- {6, 10, -1, 0, 8, 209},
- {2, 7, -3, 0, 8, 219},
- {2, 9, -3, 2, 8, 226},
- {6, 11, -1, 1, 8, 235},
- {6, 4, -1, -3, 8, 246},
- {6, 11, -1, 1, 8, 250},
- {6, 10, -1, 0, 8, 261},
- {6, 10, -1, 0, 8, 271},
- {6, 10, -1, 0, 8, 281},
- {6, 10, -1, 0, 8, 291},
- {6, 10, -1, 0, 8, 301},
- {6, 10, -1, 0, 8, 311},
- {6, 10, -1, 0, 8, 321},
- {6, 10, -1, 0, 8, 331},
- {6, 10, -1, 0, 8, 341},
- {6, 10, -1, 0, 8, 351},
- {3, 10, -2, 0, 8, 361},
- {5, 10, -1, 0, 8, 371},
- {6, 10, -1, 0, 8, 381},
- {6, 10, -1, 0, 8, 391},
- {7, 10, 0, 0, 8, 401},
- {6, 10, -1, 0, 8, 411},
- {6, 10, -1, 0, 8, 421},
- {6, 10, -1, 0, 8, 431},
- {6, 13, -1, 3, 8, 441},
- {6, 10, -1, 0, 8, 454},
- {6, 10, -1, 0, 8, 464},
- {7, 10, 0, 0, 8, 474},
- {6, 10, -1, 0, 8, 484},
- {6, 10, -1, 0, 8, 494},
- {7, 10, 0, 0, 8, 504},
- {6, 10, -1, 0, 8, 514},
- {7, 10, 0, 0, 8, 524},
- {6, 10, -1, 0, 8, 534},
- {4, 13, -2, 2, 8, 544},
- {6, 12, -1, 1, 8, 557},
- {4, 13, -2, 2, 8, 569},
- {5, 3, -1, -6, 8, 582},
- {8, 1, 0, 3, 8, 585},
- {3, 4, -2, -6, 8, 586},
- {6, 7, -1, 0, 8, 590},
- {6, 10, -1, 0, 8, 597},
- {6, 7, -1, 0, 8, 607},
- {6, 10, -1, 0, 8, 614},
- {6, 7, -1, 0, 8, 624},
- {6, 10, -1, 0, 8, 631},
- {6, 11, -1, 4, 8, 641},
- {6, 10, -1, 0, 8, 652},
- {3, 10, -2, 0, 8, 662},
- {5, 14, -1, 4, 8, 672},
- {6, 10, -1, 0, 8, 686},
- {3, 10, -2, 0, 8, 696},
- {7, 7, 0, 0, 8, 706},
- {6, 7, -1, 0, 8, 713},
- {6, 7, -1, 0, 8, 720},
- {6, 11, -1, 4, 8, 727},
- {6, 11, -1, 4, 8, 738},
- {6, 7, -1, 0, 8, 749},
- {6, 7, -1, 0, 8, 756},
- {6, 9, -1, 0, 8, 763},
- {6, 7, -1, 0, 8, 772},
- {6, 7, -1, 0, 8, 779},
- {7, 7, 0, 0, 8, 786},
- {6, 7, -1, 0, 8, 793},
- {6, 11, -1, 4, 8, 800},
- {6, 7, -1, 0, 8, 811},
- {6, 13, -1, 2, 8, 818},
- {1, 14, -3, 3, 8, 831},
- {6, 13, -1, 2, 8, 845},
- {6, 3, -1, -3, 8, 858},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0, 0, 0, 0, 8, -1},
- {1, 10, -3, 3, 8, 861},
- {5, 10, -1, 0, 8, 871},
- {6, 10, -1, 0, 8, 881},
- {6, 7, -1, -2, 8, 891},
- {7, 10, 0, 0, 8, 898},
- {1, 14, -3, 3, 8, 908},
- {6, 13, -1, 3, 8, 922},
- {5, 1, -1, -9, 8, 935},
- {7, 9, 0, 0, 8, 936},
- {5, 7, -1, -3, 8, 945},
- {8, 9, 0, 0, 8, 952},
- {6, 3, -1, -3, 8, 961},
- {6, 1, -1, -4, 8, 964},
- {7, 9, 0, 0, 8, 965},
- {4, 1, -2, -9, 8, 974},
- {4, 4, -2, -4, 8, 975},
- {7, 9, 0, 0, 8, 979},
- {4, 5, -2, -5, 8, 988},
- {4, 5, -2, -5, 8, 993},
- {2, 2, -3, -9, 8, 998},
- {6, 10, -1, 3, 8, 1000},
- {7, 12, 0, 2, 8, 1010},
- {2, 1, -3, -4, 8, 1022},
- {3, 3, -3, 3, 8, 1023},
- {3, 5, -3, -5, 8, 1026},
- {5, 7, -1, -3, 8, 1031},
- {8, 9, 0, 0, 8, 1038},
- {7, 10, 0, 0, 8, 1047},
- {7, 11, 0, 1, 8, 1057},
- {7, 9, 0, -1, 8, 1068},
- {6, 10, -1, 2, 8, 1077},
- {6, 11, -1, 0, 8, 1087},
- {6, 11, -1, 0, 8, 1098},
- {6, 11, -1, 0, 8, 1109},
- {6, 11, -1, 0, 8, 1120},
- {6, 10, -1, 0, 8, 1131},
- {6, 11, -1, 0, 8, 1141},
- {7, 10, 0, 0, 8, 1152},
- {6, 13, -1, 3, 8, 1162},
- {6, 11, -1, 0, 8, 1175},
- {6, 11, -1, 0, 8, 1186},
- {6, 11, -1, 0, 8, 1197},
- {6, 10, -1, 0, 8, 1208},
- {3, 11, -2, 0, 8, 1218},
- {3, 11, -2, 0, 8, 1229},
- {4, 11, -2, 0, 8, 1240},
- {5, 10, -1, 0, 8, 1251},
- {7, 10, 0, 0, 8, 1261},
- {6, 11, -1, 0, 8, 1271},
- {6, 11, -1, 0, 8, 1282},
- {6, 11, -1, 0, 8, 1293},
- {6, 11, -1, 0, 8, 1304},
- {6, 11, -1, 0, 8, 1315},
- {6, 10, -1, 0, 8, 1326},
- {6, 6, -1, -1, 8, 1336},
- {8, 10, 0, 0, 8, 1342},
- {6, 11, -1, 0, 8, 1352},
- {6, 11, -1, 0, 8, 1363},
- {6, 11, -1, 0, 8, 1374},
- {6, 10, -1, 0, 8, 1385},
- {7, 11, 0, 0, 8, 1395},
- {7, 10, 0, 0, 8, 1406},
- {6, 10, -1, 0, 8, 1416},
- {6, 10, -1, 0, 8, 1426},
- {6, 10, -1, 0, 8, 1436},
- {6, 10, -1, 0, 8, 1446},
- {6, 10, -1, 0, 8, 1456},
- {6, 9, -1, 0, 8, 1466},
- {6, 11, -1, 0, 8, 1475},
- {7, 7, 0, 0, 8, 1486},
- {6, 10, -1, 3, 8, 1493},
- {6, 10, -1, 0, 8, 1503},
- {6, 10, -1, 0, 8, 1513},
- {6, 10, -1, 0, 8, 1523},
- {6, 9, -1, 0, 8, 1533},
- {3, 10, -2, 0, 8, 1542},
- {3, 10, -2, 0, 8, 1552},
- {4, 10, -2, 0, 8, 1562},
- {5, 9, -1, 0, 8, 1572},
- {6, 11, -1, 0, 8, 1581},
- {6, 10, -1, 0, 8, 1592},
- {6, 10, -1, 0, 8, 1602},
- {6, 10, -1, 0, 8, 1612},
- {6, 10, -1, 0, 8, 1622},
- {6, 10, -1, 0, 8, 1632},
- {6, 10, -1, 0, 8, 1642},
- {6, 7, -1, 0, 8, 1652},
- {8, 7, 0, 0, 8, 1659},
- {6, 10, -1, 0, 8, 1666},
- {6, 10, -1, 0, 8, 1676},
- {6, 10, -1, 0, 8, 1686},
- {6, 10, -1, 0, 8, 1696},
- {6, 14, -1, 4, 8, 1706},
- {7, 13, 0, 3, 8, 1720},
- {6, 14, -1, 4, 8, 1733},
- },
- bitmap_data
-};
-
-#endif
-
diff --git a/intern/bmfont/intern/Makefile b/intern/bmfont/intern/Makefile
deleted file mode 100644
index f420cfcf1e6..00000000000
--- a/intern/bmfont/intern/Makefile
+++ /dev/null
@@ -1,41 +0,0 @@
-#
-# $Id$
-#
-# ***** BEGIN GPL LICENSE BLOCK *****
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
-# All rights reserved.
-#
-# The Original Code is: all of this file.
-#
-# Contributor(s): none yet.
-#
-# ***** END GPL LICENSE BLOCK *****
-# bmfont intern Makefile
-#
-
-LIBNAME = bmfont
-DIR = $(OCGDIR)/intern/$(LIBNAME)
-
-include nan_compile.mk
-
-CCFLAGS += $(LEVEL_2_CPP_WARNINGS)
-
-CPPFLAGS += -I.
-CPPFLAGS += -I..
-CPPFLAGS += -I$(OPENGL_HEADERS)
-
diff --git a/intern/bmfont/make/msvc_6_0/bmfont.dsp b/intern/bmfont/make/msvc_6_0/bmfont.dsp
deleted file mode 100644
index a9d2d9722e1..00000000000
--- a/intern/bmfont/make/msvc_6_0/bmfont.dsp
+++ /dev/null
@@ -1,176 +0,0 @@
-# Microsoft Developer Studio Project File - Name="bmfont" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=bmfont - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "bmfont.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "bmfont.mak" CFG="bmfont - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "bmfont - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "bmfont - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "bmfont - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\..\obj\windows\intern\bmfont"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\intern\bmfont"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "../.." /I "../../intern" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\intern\bmfont\libbmfont.lib"
-# Begin Special Build Tool
-SOURCE="$(InputPath)"
-PostBuild_Desc=Copying BMFONT files library (release target) to lib tree.
-PostBuild_Cmds=ECHO Copying header files XCOPY /Y ..\..\*.h ..\..\..\..\..\lib\windows\bmfont\include\ ECHO Copying lib XCOPY /Y ..\..\..\..\obj\windows\intern\bmfont\*.lib ..\..\..\..\..\lib\windows\bmfont\lib\*.a ECHO Done
-# End Special Build Tool
-
-!ELSEIF "$(CFG)" == "bmfont - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\..\obj\windows\intern\bmfont\debug"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\intern\bmfont\debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../.." /I "../../intern" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\intern\bmfont\debug\libbmfont.lib"
-# Begin Special Build Tool
-SOURCE="$(InputPath)"
-PostBuild_Desc=Copying BMFONT files library (debug target) to lib tree.
-PostBuild_Cmds=ECHO Copying header files XCOPY /Y ..\..\*.h ..\..\..\..\..\lib\windows\bmfont\include\ ECHO Copying lib XCOPY /Y ..\..\..\..\obj\windows\intern\bmfont\debug\*.lib ..\..\..\..\..\lib\windows\bmfont\lib\debug\*.a ECHO Done
-# End Special Build Tool
-
-!ENDIF
-
-# Begin Target
-
-# Name "bmfont - Win32 Release"
-# Name "bmfont - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\intern\BMF_Api.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\BMF_BitmapFont.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\BMF_font_helv10.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\BMF_font_helv12.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\BMF_font_helvb10.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\BMF_font_helvb12.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\BMF_font_helvb14.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\BMF_font_helvb8.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\BMF_font_scr12.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\BMF_font_scr14.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\BMF_font_scr15.cpp
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Group "intern"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\..\intern\BMF_BitmapFont.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\BMF_FontData.h
-# End Source File
-# End Group
-# Begin Group "extern"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\..\BMF_Api.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\BMF_Fonts.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\BMF_Settings.h
-# End Source File
-# End Group
-# End Group
-# End Target
-# End Project
diff --git a/intern/bmfont/make/msvc_6_0/bmfont.dsw b/intern/bmfont/make/msvc_6_0/bmfont.dsw
deleted file mode 100644
index d2e2f94cd0b..00000000000
--- a/intern/bmfont/make/msvc_6_0/bmfont.dsw
+++ /dev/null
@@ -1,29 +0,0 @@
-Microsoft Developer Studio Workspace File, Format Version 6.00
-# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
-
-###############################################################################
-
-Project: "bmfont"=.\bmfont.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Global:
-
-Package=<5>
-{{{
-}}}
-
-Package=<3>
-{{{
-}}}
-
-###############################################################################
-
diff --git a/intern/bmfont/make/msvc_7_0/bmfont.sln b/intern/bmfont/make/msvc_7_0/bmfont.sln
deleted file mode 100644
index 7f1979a8273..00000000000
--- a/intern/bmfont/make/msvc_7_0/bmfont.sln
+++ /dev/null
@@ -1,21 +0,0 @@
-Microsoft Visual Studio Solution File, Format Version 7.00
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bmfont", "bmfont.vcproj", "{8CDFE9DC-F28C-4E1F-9389-3066BB0AB09F}"
-EndProject
-Global
- GlobalSection(SolutionConfiguration) = preSolution
- ConfigName.0 = Debug
- ConfigName.1 = Release
- EndGlobalSection
- GlobalSection(ProjectDependencies) = postSolution
- EndGlobalSection
- GlobalSection(ProjectConfiguration) = postSolution
- {8CDFE9DC-F28C-4E1F-9389-3066BB0AB09F}.Debug.ActiveCfg = Debug|Win32
- {8CDFE9DC-F28C-4E1F-9389-3066BB0AB09F}.Debug.Build.0 = Debug|Win32
- {8CDFE9DC-F28C-4E1F-9389-3066BB0AB09F}.Release.ActiveCfg = Release|Win32
- {8CDFE9DC-F28C-4E1F-9389-3066BB0AB09F}.Release.Build.0 = Release|Win32
- EndGlobalSection
- GlobalSection(ExtensibilityGlobals) = postSolution
- EndGlobalSection
- GlobalSection(ExtensibilityAddIns) = postSolution
- EndGlobalSection
-EndGlobal
diff --git a/intern/bmfont/make/msvc_7_0/bmfont.vcproj b/intern/bmfont/make/msvc_7_0/bmfont.vcproj
deleted file mode 100644
index 089130bc5e0..00000000000
--- a/intern/bmfont/make/msvc_7_0/bmfont.vcproj
+++ /dev/null
@@ -1,314 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="bmfont"
- SccProjectName=""
- SccLocalPath="">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Blender Release|Win32"
- OutputDirectory="..\..\..\..\..\build\msvc_7\intern\bmfont"
- IntermediateDirectory="..\..\..\..\..\build\msvc_7\intern\bmfont"
- ConfigurationType="4"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="FALSE"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..;..\..\intern"
- PreprocessorDefinitions="WIN32,NDEBUG,_LIB"
- StringPooling="TRUE"
- RuntimeLibrary="0"
- EnableFunctionLevelLinking="TRUE"
- UsePrecompiledHeader="2"
- PrecompiledHeaderFile="..\..\..\..\..\build\msvc_7\intern\bmfont\bmfont.pch"
- AssemblerListingLocation="..\..\..\..\..\build\msvc_7\intern\bmfont\"
- ObjectFile="..\..\..\..\..\build\msvc_7\intern\bmfont\"
- ProgramDataBaseFileName="..\..\..\..\..\build\msvc_7\intern\bmfont\"
- WarningLevel="2"
- SuppressStartupBanner="TRUE"
- CompileAs="0"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\..\..\build\msvc_7\libs\intern\libbmfont.lib"
- SuppressStartupBanner="TRUE"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"
- Description="Copying BMFONT files library to lib tree"
- CommandLine="ECHO Copying header files
-IF NOT EXIST ..\..\..\..\..\build\msvc_7\intern\bmfont\include MKDIR ..\..\..\..\..\build\msvc_7\intern\bmfont\include
-XCOPY /Y ..\..\*.h ..\..\..\..\..\build\msvc_7\intern\bmfont\include
-ECHO Done
-"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Blender Debug|Win32"
- OutputDirectory="..\..\..\..\..\build\msvc_7\intern\bmfont\debug"
- IntermediateDirectory="..\..\..\..\..\build\msvc_7\intern\bmfont\debug"
- ConfigurationType="4"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="FALSE"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..;..\..\intern"
- PreprocessorDefinitions="WIN32,_DEBUG,_LIB"
- BasicRuntimeChecks="3"
- RuntimeLibrary="1"
- BufferSecurityCheck="TRUE"
- UsePrecompiledHeader="2"
- PrecompiledHeaderFile="..\..\..\..\..\build\msvc_7\intern\bmfont\debug\bmfont.pch"
- AssemblerListingLocation="..\..\..\..\..\build\msvc_7\intern\bmfont\debug\"
- ObjectFile="..\..\..\..\..\build\msvc_7\intern\bmfont\debug\"
- ProgramDataBaseFileName="..\..\..\..\..\build\msvc_7\intern\bmfont\debug\"
- WarningLevel="2"
- SuppressStartupBanner="TRUE"
- DebugInformationFormat="3"
- CompileAs="0"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\..\..\build\msvc_7\libs\intern\debug\libbmfont.lib"
- SuppressStartupBanner="TRUE"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"
- Description="Copying BMFONT files library (debug target) to lib tree"
- CommandLine="ECHO Copying header files
-IF NOT EXIST ..\..\..\..\..\build\msvc_7\intern\bmfont\include MKDIR ..\..\..\..\..\build\msvc_7\intern\bmfont\include
-XCOPY /Y ..\..\*.h ..\..\..\..\..\build\msvc_7\intern\bmfont\include
-ECHO Done
-"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="3DPlugin Release|Win32"
- OutputDirectory="..\..\..\..\..\build\msvc_7\intern\bmfont\mtdll"
- IntermediateDirectory="..\..\..\..\..\build\msvc_7\intern\bmfont\mtdll"
- ConfigurationType="4"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="FALSE"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..;..\..\intern"
- PreprocessorDefinitions="WIN32,NDEBUG,_LIB"
- StringPooling="TRUE"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="TRUE"
- UsePrecompiledHeader="2"
- PrecompiledHeaderFile="..\..\..\..\..\build\msvc_7\intern\bmfont\mtdll\bmfont.pch"
- AssemblerListingLocation="..\..\..\..\..\build\msvc_7\intern\bmfont\mtdll\"
- ObjectFile="..\..\..\..\..\build\msvc_7\intern\bmfont\mtdll\"
- ProgramDataBaseFileName="..\..\..\..\..\build\msvc_7\intern\bmfont\mtdll\"
- WarningLevel="2"
- SuppressStartupBanner="TRUE"
- CompileAs="0"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\..\..\build\msvc_7\libs\intern\mtdll\libbmfont.lib"
- SuppressStartupBanner="TRUE"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"
- Description="Copying BMFONT files library to lib tree"
- CommandLine="ECHO Copying header files
-IF NOT EXIST ..\..\..\..\..\build\msvc_7\intern\bmfont\include MKDIR ..\..\..\..\..\build\msvc_7\intern\bmfont\include
-XCOPY /Y ..\..\*.h ..\..\..\..\..\build\msvc_7\intern\bmfont\include
-ECHO Done
-"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="3DPlugin Debug|Win32"
- OutputDirectory="..\..\..\..\..\build\msvc_7\intern\bmfont\mtdll\debug"
- IntermediateDirectory="..\..\..\..\..\build\msvc_7\intern\bmfont\mtdll\debug"
- ConfigurationType="4"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="FALSE"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..;..\..\intern"
- PreprocessorDefinitions="WIN32,_DEBUG,_LIB"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- BufferSecurityCheck="TRUE"
- UsePrecompiledHeader="2"
- PrecompiledHeaderFile="..\..\..\..\..\build\msvc_7\intern\bmfont\mtdll\debug\bmfont.pch"
- AssemblerListingLocation="..\..\..\..\..\build\msvc_7\intern\bmfont\mtdll\debug\"
- ObjectFile="..\..\..\..\..\build\msvc_7\intern\bmfont\mtdll\debug\"
- ProgramDataBaseFileName="..\..\..\..\..\build\msvc_7\intern\bmfont\mtdll\debug\"
- WarningLevel="2"
- SuppressStartupBanner="TRUE"
- DebugInformationFormat="3"
- CompileAs="0"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\..\..\build\msvc_7\libs\intern\mtdll\debug\libbmfont.lib"
- SuppressStartupBanner="TRUE"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"
- Description="Copying BMFONT files library (debug target) to lib tree"
- CommandLine="ECHO Copying header files
-IF NOT EXIST ..\..\..\..\..\build\msvc_7\intern\bmfont\include MKDIR ..\..\..\..\..\build\msvc_7\intern\bmfont\include
-XCOPY /Y ..\..\*.h ..\..\..\..\..\build\msvc_7\intern\bmfont\include
-ECHO Done
-"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">
- <File
- RelativePath="..\..\intern\BMF_Api.cpp">
- </File>
- <File
- RelativePath="..\..\intern\BMF_BitmapFont.cpp">
- </File>
- <File
- RelativePath="..\..\intern\BMF_font_helv10.cpp">
- </File>
- <File
- RelativePath="..\..\intern\BMF_font_helv12.cpp">
- </File>
- <File
- RelativePath="..\..\intern\BMF_font_helvb10.cpp">
- </File>
- <File
- RelativePath="..\..\intern\BMF_font_helvb12.cpp">
- </File>
- <File
- RelativePath="..\..\intern\BMF_font_helvb14.cpp">
- </File>
- <File
- RelativePath="..\..\intern\BMF_font_helvb8.cpp">
- </File>
- <File
- RelativePath="..\..\intern\BMF_font_scr12.cpp">
- </File>
- <File
- RelativePath="..\..\intern\BMF_font_scr14.cpp">
- </File>
- <File
- RelativePath="..\..\intern\BMF_font_scr15.cpp">
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl">
- <Filter
- Name="intern"
- Filter="">
- <File
- RelativePath="..\..\intern\BMF_BitmapFont.h">
- </File>
- <File
- RelativePath="..\..\intern\BMF_FontData.h">
- </File>
- </Filter>
- <Filter
- Name="extern"
- Filter="">
- <File
- RelativePath="..\..\BMF_Api.h">
- </File>
- <File
- RelativePath="..\..\BMF_Fonts.h">
- </File>
- <File
- RelativePath="..\..\BMF_Settings.h">
- </File>
- </Filter>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/intern/bmfont/make/msvc_9_0/bmfont.vcproj b/intern/bmfont/make/msvc_9_0/bmfont.vcproj
deleted file mode 100644
index 91d6e6afc1a..00000000000
--- a/intern/bmfont/make/msvc_9_0/bmfont.vcproj
+++ /dev/null
@@ -1,413 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="9,00"
- Name="INT_bmfont"
- ProjectGUID="{E784098D-3ED8-433A-9353-9679415DDDC5}"
- RootNamespace="bmfont"
- TargetFrameworkVersion="131072"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Blender Release|Win32"
- OutputDirectory="..\..\..\..\..\build\msvc_9\intern\bmfont"
- IntermediateDirectory="..\..\..\..\..\build\msvc_9\intern\bmfont"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..;..\..\intern"
- PreprocessorDefinitions="WIN32,NDEBUG,_LIB"
- StringPooling="true"
- RuntimeLibrary="0"
- EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
- PrecompiledHeaderFile="..\..\..\..\..\build\msvc_9\intern\bmfont\bmfont.pch"
- AssemblerListingLocation="..\..\..\..\..\build\msvc_9\intern\bmfont\"
- ObjectFile="..\..\..\..\..\build\msvc_9\intern\bmfont\"
- ProgramDataBaseFileName="..\..\..\..\..\build\msvc_9\intern\bmfont\"
- WarningLevel="2"
- SuppressStartupBanner="true"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\..\..\build\msvc_9\libs\intern\libbmfont.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- Description="Copying BMFONT files library to lib tree"
- CommandLine="ECHO Copying header files&#x0D;&#x0A;IF NOT EXIST ..\..\..\..\..\build\msvc_9\intern\bmfont\include MKDIR ..\..\..\..\..\build\msvc_9\intern\bmfont\include&#x0D;&#x0A;XCOPY /Y ..\..\*.h ..\..\..\..\..\build\msvc_9\intern\bmfont\include&#x0D;&#x0A;ECHO Done&#x0D;&#x0A;"
- />
- </Configuration>
- <Configuration
- Name="Blender Debug|Win32"
- OutputDirectory="..\..\..\..\..\build\msvc_9\intern\bmfont\debug"
- IntermediateDirectory="..\..\..\..\..\build\msvc_9\intern\bmfont\debug"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..;..\..\intern"
- PreprocessorDefinitions="WIN32,_DEBUG,_LIB"
- BasicRuntimeChecks="3"
- RuntimeLibrary="1"
- BufferSecurityCheck="true"
- UsePrecompiledHeader="0"
- PrecompiledHeaderFile="..\..\..\..\..\build\msvc_9\intern\bmfont\debug\bmfont.pch"
- AssemblerListingLocation="..\..\..\..\..\build\msvc_9\intern\bmfont\debug\"
- ObjectFile="..\..\..\..\..\build\msvc_9\intern\bmfont\debug\"
- ProgramDataBaseFileName="..\..\..\..\..\build\msvc_9\intern\bmfont\debug\"
- WarningLevel="2"
- SuppressStartupBanner="true"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\..\..\build\msvc_9\libs\intern\debug\libbmfont.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- Description="Copying BMFONT files library (debug target) to lib tree"
- CommandLine="ECHO Copying header files&#x0D;&#x0A;IF NOT EXIST ..\..\..\..\..\build\msvc_9\intern\bmfont\include MKDIR ..\..\..\..\..\build\msvc_9\intern\bmfont\include&#x0D;&#x0A;XCOPY /Y ..\..\*.h ..\..\..\..\..\build\msvc_9\intern\bmfont\include&#x0D;&#x0A;ECHO Done&#x0D;&#x0A;"
- />
- </Configuration>
- <Configuration
- Name="3DPlugin Release|Win32"
- OutputDirectory="..\..\..\..\..\build\msvc_9\intern\bmfont\mtdll"
- IntermediateDirectory="..\..\..\..\..\build\msvc_9\intern\bmfont\mtdll"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..;..\..\intern"
- PreprocessorDefinitions="WIN32,NDEBUG,_LIB"
- StringPooling="true"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
- PrecompiledHeaderFile="..\..\..\..\..\build\msvc_9\intern\bmfont\mtdll\bmfont.pch"
- AssemblerListingLocation="..\..\..\..\..\build\msvc_9\intern\bmfont\mtdll\"
- ObjectFile="..\..\..\..\..\build\msvc_9\intern\bmfont\mtdll\"
- ProgramDataBaseFileName="..\..\..\..\..\build\msvc_9\intern\bmfont\mtdll\"
- WarningLevel="2"
- SuppressStartupBanner="true"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\..\..\build\msvc_9\libs\intern\mtdll\libbmfont.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- Description="Copying BMFONT files library to lib tree"
- CommandLine="ECHO Copying header files&#x0D;&#x0A;IF NOT EXIST ..\..\..\..\..\build\msvc_9\intern\bmfont\include MKDIR ..\..\..\..\..\build\msvc_9\intern\bmfont\include&#x0D;&#x0A;XCOPY /Y ..\..\*.h ..\..\..\..\..\build\msvc_9\intern\bmfont\include&#x0D;&#x0A;ECHO Done&#x0D;&#x0A;"
- />
- </Configuration>
- <Configuration
- Name="3DPlugin Debug|Win32"
- OutputDirectory="..\..\..\..\..\build\msvc_9\intern\bmfont\mtdll\debug"
- IntermediateDirectory="..\..\..\..\..\build\msvc_9\intern\bmfont\mtdll\debug"
- ConfigurationType="4"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\..;..\..\intern"
- PreprocessorDefinitions="WIN32,_DEBUG,_LIB"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- BufferSecurityCheck="true"
- UsePrecompiledHeader="0"
- PrecompiledHeaderFile="..\..\..\..\..\build\msvc_9\intern\bmfont\mtdll\debug\bmfont.pch"
- AssemblerListingLocation="..\..\..\..\..\build\msvc_9\intern\bmfont\mtdll\debug\"
- ObjectFile="..\..\..\..\..\build\msvc_9\intern\bmfont\mtdll\debug\"
- ProgramDataBaseFileName="..\..\..\..\..\build\msvc_9\intern\bmfont\mtdll\debug\"
- WarningLevel="2"
- SuppressStartupBanner="true"
- DebugInformationFormat="3"
- CompileAs="0"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLibrarianTool"
- OutputFile="..\..\..\..\..\build\msvc_9\libs\intern\mtdll\debug\libbmfont.lib"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- Description="Copying BMFONT files library (debug target) to lib tree"
- CommandLine="ECHO Copying header files&#x0D;&#x0A;IF NOT EXIST ..\..\..\..\..\build\msvc_9\intern\bmfont\include MKDIR ..\..\..\..\..\build\msvc_9\intern\bmfont\include&#x0D;&#x0A;XCOPY /Y ..\..\*.h ..\..\..\..\..\build\msvc_9\intern\bmfont\include&#x0D;&#x0A;ECHO Done&#x0D;&#x0A;"
- />
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
- >
- <File
- RelativePath="..\..\intern\BMF_Api.cpp"
- >
- </File>
- <File
- RelativePath="..\..\intern\BMF_BitmapFont.cpp"
- >
- </File>
- <File
- RelativePath="..\..\intern\BMF_font_helv10.cpp"
- >
- </File>
- <File
- RelativePath="..\..\intern\BMF_font_helv12.cpp"
- >
- </File>
- <File
- RelativePath="..\..\intern\BMF_font_helvb10.cpp"
- >
- </File>
- <File
- RelativePath="..\..\intern\BMF_font_helvb12.cpp"
- >
- </File>
- <File
- RelativePath="..\..\intern\BMF_font_helvb14.cpp"
- >
- </File>
- <File
- RelativePath="..\..\intern\BMF_font_helvb8.cpp"
- >
- </File>
- <File
- RelativePath="..\..\intern\BMF_font_scr12.cpp"
- >
- </File>
- <File
- RelativePath="..\..\intern\BMF_font_scr14.cpp"
- >
- </File>
- <File
- RelativePath="..\..\intern\BMF_font_scr15.cpp"
- >
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl"
- >
- <Filter
- Name="intern"
- >
- <File
- RelativePath="..\..\intern\BMF_BitmapFont.h"
- >
- </File>
- <File
- RelativePath="..\..\intern\BMF_FontData.h"
- >
- </File>
- </Filter>
- <Filter
- Name="extern"
- >
- <File
- RelativePath="..\..\BMF_Api.h"
- >
- </File>
- <File
- RelativePath="..\..\BMF_Fonts.h"
- >
- </File>
- <File
- RelativePath="..\..\BMF_Settings.h"
- >
- </File>
- </Filter>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/intern/bmfont/test/Makefile b/intern/bmfont/test/Makefile
deleted file mode 100644
index 135db74f38b..00000000000
--- a/intern/bmfont/test/Makefile
+++ /dev/null
@@ -1,60 +0,0 @@
-# ***** BEGIN GPL LICENSE BLOCK *****
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
-# All rights reserved.
-#
-# The Original Code is: all of this file.
-#
-# Contributor(s): none yet.
-#
-# ***** END GPL LICENSE BLOCK *****
-# Test the bmfont module
-#
-
-LIBNAME = bmfont
-SOURCEDIR = intern/$(LIBNAME)/test
-DIR = $(OCGDIR)/$(SOURCEDIR)
-DIRS = simpletest
-
-include nan_subdirs.mk
-include nan_compile.mk
-include nan_link.mk
-
-TESTLIBS = $(OCGDIR)/intern/$(LIBNAME)/$(DEBUG_DIR)lib$(LIBNAME).a
-TESTLIBS += $(NAN_STRING)/lib/$(DEBUG_DIR)libstring.a
-TESTLIBS += $(LCGDIR)/ghost/$(DEBUG_DIR)lib/libghost.a
-
-
-ifeq ($(OS),$(findstring $(OS), "beos darwin linux freebsd openbsd"))
- TESTLIBS += -L/usr/X11R6/lib -lglut -pthread
-endif
-
-ifeq ($(OS),$(findstring $(OS), "solaris"))
- TESTLIBS += -L/usr/openwin/lib -lglut -lX11 -lGL -lGLU -lXmu
-endif
-
-
-all debug::
- @echo "****> linking $@ in $(SOURCEDIR)"
- $(CCC) $(LDFLAGS) -o $(DIR)/$(DEBUG_DIR)BMF_Test $(DIR)/BMF_Test.o $(TESTLIBS)
-
-clean::
- $(RM) $(DIR)/BMF_Test $(DIR)/debug/BMF_Test
-
-test:: $(DIR)/BMF_Test
- $(DIR)/BMF_Test $(NAN_TEST_VERBOSITY)
-
diff --git a/intern/bmfont/test/make/msvc_6_0/BMF_Test.dsp b/intern/bmfont/test/make/msvc_6_0/BMF_Test.dsp
deleted file mode 100644
index 13e6e65f706..00000000000
--- a/intern/bmfont/test/make/msvc_6_0/BMF_Test.dsp
+++ /dev/null
@@ -1,109 +0,0 @@
-# Microsoft Developer Studio Project File - Name="BMF_Test" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=BMF_Test - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "BMF_Test.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "BMF_Test.mak" CFG="BMF_Test - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "BMF_Test - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "BMF_Test - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "BMF_Test - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "../../../../../../obj/windows/intern/BMF_bmfont/test"
-# PROP Intermediate_Dir "../../../../../../obj/windows/intern/BMF_bmfont/test"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /W3 /GX /O2 /I "../../../" /I "../../../../../lib/windows/string/include" /I "../../../../../lib/windows/ghost/include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 kernel32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libstring.a libghost.a glu32.lib opengl32.lib user32.lib gdi32.lib /nologo /subsystem:console /machine:I386 /libpath:"../../../../../lib/windows/string/lib" /libpath:"../../../../../lib/windows/ghost/lib"
-
-!ELSEIF "$(CFG)" == "BMF_Test - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "../../../../../../obj/windows/intern/BMF_bmfont/test/debug"
-# PROP Intermediate_Dir "../../../../../../obj/windows/intern/BMF_bmfont/test/debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
-# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../" /I "../../../../../lib/windows/string/include" /I "../../../../../lib/windows/ghost/include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 glu32.lib opengl32.lib libstring.a libghost.a user32.lib gdi32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"../../../../../lib/windows/string/lib" /libpath:"../../../../../lib/windows/ghost/lib"
-
-!ENDIF
-
-# Begin Target
-
-# Name "BMF_Test - Win32 Release"
-# Name "BMF_Test - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\..\intern\BMF_glut_helb8.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\intern\BMF_glut_helb8.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\BMF_Test.cpp
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
diff --git a/intern/bmfont/test/make/msvc_6_0/BMF_Test.dsw b/intern/bmfont/test/make/msvc_6_0/BMF_Test.dsw
deleted file mode 100644
index 5baacb9adf7..00000000000
--- a/intern/bmfont/test/make/msvc_6_0/BMF_Test.dsw
+++ /dev/null
@@ -1,44 +0,0 @@
-Microsoft Developer Studio Workspace File, Format Version 6.00
-# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
-
-###############################################################################
-
-Project: "BMF_Test"=.\BMF_Test.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name BMF_bmfont
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "BMF_bmfont"=..\..\..\make\msvc_6_0\BMF_bmfont.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Global:
-
-Package=<5>
-{{{
-}}}
-
-Package=<3>
-{{{
-}}}
-
-###############################################################################
-
diff --git a/intern/bmfont/test/simpletest/BMF_Test.cpp b/intern/bmfont/test/simpletest/BMF_Test.cpp
deleted file mode 100644
index 93a55042a4f..00000000000
--- a/intern/bmfont/test/simpletest/BMF_Test.cpp
+++ /dev/null
@@ -1,226 +0,0 @@
-/**
- * $Id$
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/**
-
- * $Id$
- * Copyright (C) 2001 NaN Technologies B.V.
- * Simple test file for the bitmap font library using GHOST.
- * @author Maarten Gribnau
- * @date November 15, 2001
- */
-
-#include <iostream>
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#define FALSE 0
-#define TRUE 1
-
-#if defined(WIN32) || defined(__APPLE__)
-#ifdef WIN32
-#include <windows.h>
-#include <GL/gl.h>
-#else // WIN32
-// __APPLE__ is defined
-#include <AGL/gl.h>
-#endif // WIN32
-#else // defined(WIN32) || defined(__APPLE__)
-#include <GL/gl.h>
-#endif // defined(WIN32) || defined(__APPLE__)
-
-
-#include "STR_String.h"
-#include "GHOST_Rect.h"
-
-#include "GHOST_ISystem.h"
-#include "GHOST_IEvent.h"
-#include "GHOST_IEventConsumer.h"
-
-#include "BMF_Api.h"
-
-static class Application* fApp;
-static GHOST_ISystem* fSystem = 0;
-
-
-static void drawGL()
-{
- GLint x = 10, y = 10;
-
- ::glRasterPos2i(x, y);
- BMF_Font *font = BMF_GetFont(BMF_kHelvetica10);
- BMF_DrawString(font, "Helvetica 10 point");
- y += 14;
- ::glRasterPos2i(x, y);
- font = BMF_GetFont(BMF_kHelvetica12);
- BMF_DrawString(font, "Helvetica 12 point");
- y += 16;
- ::glRasterPos2i(x, y);
- font = BMF_GetFont(BMF_kHelveticaBold8);
- BMF_DrawString(font, "Helvetica Bold 8 point");
- y += 12;
- ::glRasterPos2i(x, y);
- font = BMF_GetFont(BMF_kHelveticaBold10);
- BMF_DrawString(font, "Helvetica Bold 10 point");
- y += 14;
- ::glRasterPos2i(x, y);
- font = BMF_GetFont(BMF_kHelveticaBold12);
- BMF_DrawString(font, "Helvetica Bold 12 point");
- y += 16;
- ::glRasterPos2i(x, y);
- font = BMF_GetFont(BMF_kHelveticaBold14);
- BMF_DrawString(font, "Helvetica Bold 14 point");
- y += 18;
- ::glRasterPos2i(x, y);
- font = BMF_GetFont(BMF_kScreen12);
- BMF_DrawString(font, "Screen 12 point");
- y += 16;
- ::glRasterPos2i(x, y);
- font = BMF_GetFont(BMF_kScreen14);
- BMF_DrawString(font, "Screen 14 point");
- y += 18;
- ::glRasterPos2i(x, y);
- font = BMF_GetFont(BMF_kScreen15);
- BMF_DrawString(font, "Screen 15 point");
-}
-
-
-static void setViewPortGL(GHOST_IWindow* window)
-{
- window->activateDrawingContext();
- GHOST_Rect bnds;
- window->getClientBounds(bnds);
-
- ::glViewport(0, 0, bnds.getWidth(), bnds.getHeight());
-
- ::glMatrixMode(GL_PROJECTION);
- ::glLoadIdentity();
- ::glOrtho(0, bnds.getWidth(), 0, bnds.getHeight(), -10, 10);
-
- ::glClearColor(.2f,0.0f,0.0f,0.0f);
- ::glClear(GL_COLOR_BUFFER_BIT);
-}
-
-
-
-class Application : public GHOST_IEventConsumer {
-public:
- Application(GHOST_ISystem* system);
- virtual bool processEvent(GHOST_IEvent* event);
-
- GHOST_ISystem* m_system;
- GHOST_IWindow* m_mainWindow;
- bool m_exitRequested;
-};
-
-
-Application::Application(GHOST_ISystem* system)
- : m_system(system), m_mainWindow(0), m_exitRequested(false)
-{
- fApp = this;
-
- // Create the main window
- STR_String title1 ("gears - main window");
- m_mainWindow = system->createWindow(title1, 10, 64, 320, 200, GHOST_kWindowStateNormal, GHOST_kDrawingContextTypeOpenGL,FALSE);
- if (!m_mainWindow) {
- std::cout << "could not create main window\n";
- exit(-1);
- }
-}
-
-
-bool Application::processEvent(GHOST_IEvent* event)
-{
- bool handled = true;
-
- switch (event->getType()) {
- case GHOST_kEventWindowClose:
- {
- GHOST_IWindow* window2 = event->getWindow();
- if (window2 == m_mainWindow) {
- exit(0);
- } else {
- m_system->disposeWindow(window2);
- }
- }
- break;
-
- case GHOST_kEventWindowActivate:
- handled = false;
- break;
- case GHOST_kEventWindowDeactivate:
- handled = false;
- break;
- case GHOST_kEventWindowUpdate:
- {
- GHOST_IWindow* window2 = event->getWindow();
- if (!m_system->validWindow(window2)) break;
- {
- setViewPortGL(window2);
- drawGL();
- window2->swapBuffers();
- }
- }
- break;
-
- default:
- handled = false;
- break;
- }
- return handled;
-}
-
-
-int main(int /*argc*/, char** /*argv*/)
-{
- // Create the system
- GHOST_ISystem::createSystem();
- fSystem = GHOST_ISystem::getSystem();
-
- if (fSystem) {
- // Create an application object
- Application app (fSystem);
-
- // Add the application as event consumer
- fSystem->addEventConsumer(&app);
-
- // Enter main loop
- while (!app.m_exitRequested) {
- fSystem->processEvents(TRUE);
- fSystem->dispatchEvents();
- }
- }
-
- // Dispose the system
- GHOST_ISystem::disposeSystem();
-
- return 0;
-}
-
diff --git a/intern/bmfont/test/simpletest/Makefile b/intern/bmfont/test/simpletest/Makefile
deleted file mode 100644
index 5c5e32f2ed2..00000000000
--- a/intern/bmfont/test/simpletest/Makefile
+++ /dev/null
@@ -1,42 +0,0 @@
-# ***** BEGIN GPL LICENSE BLOCK *****
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
-# All rights reserved.
-#
-# The Original Code is: all of this file.
-#
-# Contributor(s): none yet.
-#
-# ***** END GPL LICENSE BLOCK *****
-# Test the bmfont module
-#
-
-LIBNAME = bmfont
-DIR = $(OCGDIR)/intern/$(LIBNAME)/test
-
-# we don't want a library here, only object files:
-ALLTARGETS = $(OBJS)
-
-include nan_compile.mk
-
-CCFLAGS += $(LEVEL_2_CPP_WARNINGS)
-
-CPPFLAGS = -I../..
-CPPFLAGS += -I../../intern
-CPPFLAGS += -I$(OPENGL_HEADERS)
-CPPFLAGS += -I$(NAN_STRING)/include
-CPPFLAGS += -I$(NAN_GHOST)/include
diff --git a/intern/boolop/intern/BOP_Merge2.cpp b/intern/boolop/intern/BOP_Merge2.cpp
index f75fddc554e..e2367d1319e 100644
--- a/intern/boolop/intern/BOP_Merge2.cpp
+++ b/intern/boolop/intern/BOP_Merge2.cpp
@@ -1,6 +1,6 @@
/**
*
- * $Id: BOP_Merge22.cpp 14444 2008-04-16 22:40:48Z hos $
+ * $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
*
diff --git a/intern/boolop/intern/BOP_Misc.h b/intern/boolop/intern/BOP_Misc.h
index d021579d161..ce963b5ce92 100644
--- a/intern/boolop/intern/BOP_Misc.h
+++ b/intern/boolop/intern/BOP_Misc.h
@@ -1,6 +1,6 @@
/**
*
- * $Id: BOP_Misc.h 14444 2008-04-16 22:40:48Z khughes $
+ * $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
*
diff --git a/intern/boolop/make/msvc_6_0/boolop.dsp b/intern/boolop/make/msvc_6_0/boolop.dsp
index f8a072b4531..d4e0025adc2 100644
--- a/intern/boolop/make/msvc_6_0/boolop.dsp
+++ b/intern/boolop/make/msvc_6_0/boolop.dsp
@@ -1,222 +1,222 @@
-# Microsoft Developer Studio Project File - Name="boolop" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=boolop - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "boolop.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "boolop.mak" CFG="boolop - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "boolop - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "boolop - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "boolop - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\source\blender\makesdna" /I "..\..\..\..\source\blender\makesdna\\" /I "..\..\..\..\..\lib\windows\moto\include\\" /I "..\..\..\..\..\lib\windows\container\include\\" /I "..\..\..\..\..\lib\windows\memutil\include\\" /I "../../extern" /I "..\..\..\..\..\lib\windows\guardedalloc\include\\" /I "..\..\..\..\source\blender\blenlib\\" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD BASE RSC /l 0x407 /d "NDEBUG"
-# ADD RSC /l 0x407 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-# Begin Special Build Tool
-SOURCE="$(InputPath)"
-PostBuild_Cmds=ECHO copy to lib folder XCOPY /Y .\release\*.lib ..\..\..\..\..\lib\windows\boolop\lib\*.lib
-# End Special Build Tool
-
-!ELSEIF "$(CFG)" == "boolop - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\..\..\source\blender\makesdna\\" /I "..\..\..\..\..\lib\windows\moto\include\\" /I "..\..\..\..\..\lib\windows\container\include\\" /I "..\..\..\..\..\lib\windows\memutil\include\\" /I "../../extern" /I "..\..\..\..\..\lib\windows\guardedalloc\include\\" /I "..\..\..\..\source\blender\blenlib\\" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD BASE RSC /l 0x407 /d "_DEBUG"
-# ADD RSC /l 0x407 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ENDIF
-
-# Begin Target
-
-# Name "boolop - Win32 Release"
-# Name "boolop - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\intern\BOP_BBox.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\BOP_BSPNode.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\BOP_BSPTree.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\BOP_Edge.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\BOP_Face.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\BOP_Face2Face.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\BOP_Interface.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\BOP_MathUtils.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\BOP_Merge.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\BOP_Mesh.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\BOP_Segment.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\BOP_Splitter.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\BOP_Tag.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\BOP_Triangulator.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\BOP_Vertex.cpp
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\intern\BOP_BBox.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\BOP_BSPNode.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\BOP_BSPTree.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\BOP_Chrono.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\BOP_Edge.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\BOP_Face.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\BOP_Face2Face.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\BOP_Indexs.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\BOP_MathUtils.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\BOP_Merge.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\BOP_Mesh.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\BOP_Segment.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\BOP_Splitter.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\BOP_Tag.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\BOP_Triangulator.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\BOP_Vertex.h
-# End Source File
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="boolop" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=boolop - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "boolop.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "boolop.mak" CFG="boolop - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "boolop - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "boolop - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "boolop - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\source\blender\makesdna" /I "..\..\..\..\source\blender\makesdna\\" /I "..\..\..\..\..\lib\windows\moto\include\\" /I "..\..\..\..\..\lib\windows\container\include\\" /I "..\..\..\..\..\lib\windows\memutil\include\\" /I "../../extern" /I "..\..\..\..\..\lib\windows\guardedalloc\include\\" /I "..\..\..\..\source\blender\blenlib\\" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD BASE RSC /l 0x407 /d "NDEBUG"
+# ADD RSC /l 0x407 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Cmds=ECHO copy to lib folder XCOPY /Y .\release\*.lib ..\..\..\..\..\lib\windows\boolop\lib\*.lib
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "boolop - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\..\..\source\blender\makesdna\\" /I "..\..\..\..\..\lib\windows\moto\include\\" /I "..\..\..\..\..\lib\windows\container\include\\" /I "..\..\..\..\..\lib\windows\memutil\include\\" /I "../../extern" /I "..\..\..\..\..\lib\windows\guardedalloc\include\\" /I "..\..\..\..\source\blender\blenlib\\" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x407 /d "_DEBUG"
+# ADD RSC /l 0x407 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ENDIF
+
+# Begin Target
+
+# Name "boolop - Win32 Release"
+# Name "boolop - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\intern\BOP_BBox.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\BOP_BSPNode.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\BOP_BSPTree.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\BOP_Edge.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\BOP_Face.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\BOP_Face2Face.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\BOP_Interface.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\BOP_MathUtils.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\BOP_Merge.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\BOP_Mesh.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\BOP_Segment.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\BOP_Splitter.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\BOP_Tag.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\BOP_Triangulator.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\BOP_Vertex.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\intern\BOP_BBox.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\BOP_BSPNode.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\BOP_BSPTree.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\BOP_Chrono.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\BOP_Edge.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\BOP_Face.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\BOP_Face2Face.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\BOP_Indexs.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\BOP_MathUtils.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\BOP_Merge.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\BOP_Mesh.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\BOP_Segment.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\BOP_Splitter.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\BOP_Tag.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\BOP_Triangulator.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\BOP_Vertex.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/intern/bsp/make/msvc6_0/bsplib.dsp b/intern/bsp/make/msvc6_0/bsplib.dsp
index 00bac967221..703a6326d3a 100644
--- a/intern/bsp/make/msvc6_0/bsplib.dsp
+++ b/intern/bsp/make/msvc6_0/bsplib.dsp
@@ -1,138 +1,138 @@
-# Microsoft Developer Studio Project File - Name="bsplib" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=bsplib - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "bsplib.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "bsplib.mak" CFG="bsplib - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "bsplib - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "bsplib - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "bsplib - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\..\obj\windows\intern\bsp\"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\intern\bsp\"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /Ob2 /I "../../../../../lib/windows/memutil/include" /I "../.." /I "../../../../../lib/windows/moto/include" /I "../../../../../lib/windows/container/include" /I "..\..\..\container" /I "..\..\..\moto\include" /I "..\..\..\memutil" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD BASE RSC /l 0x413 /d "NDEBUG"
-# ADD RSC /l 0x413 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\intern\bsp\libbsp.lib"
-# Begin Special Build Tool
-SOURCE="$(InputPath)"
-PostBuild_Cmds=ECHO Copying header files XCOPY /Y ..\..\extern\*.h ..\..\..\..\..\lib\windows\bsp\include\ ECHO Copying lib XCOPY /Y ..\..\..\..\obj\windows\intern\bsp\*.lib ..\..\..\..\..\lib\windows\bsp\lib\*.a ECHO Done
-# End Special Build Tool
-
-!ELSEIF "$(CFG)" == "bsplib - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\..\obj\windows\intern\bsp\debug"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\intern\bsp\debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../../../../lib/windows/memutil" /I "../.." /I "../../../../../lib/windows/moto/include" /I "../../../../../lib/windows/container/include" /I "../../../../../lib/windows/memutil/include" /I "..\..\..\container" /I "..\..\..\moto\include" /I "..\..\..\memutil" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /FD /GZ /c
-# ADD BASE RSC /l 0x413 /d "_DEBUG"
-# ADD RSC /l 0x413 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\intern\bsp\debug\libbsp.lib"
-# Begin Special Build Tool
-SOURCE="$(InputPath)"
-PostBuild_Cmds=ECHO Copying header files XCOPY /Y ..\..\extern\*.h ..\..\..\..\..\lib\windows\bsp\include\ ECHO Copying lib XCOPY /Y ..\..\..\..\obj\windows\intern\bsp\debug\*.lib ..\..\..\..\..\lib\windows\bsp\lib\debug\*.a ECHO Copying Debug info. XCOPY /Y ..\..\..\..\obj\windows\intern\bsp\debug\vc60.* ..\..\..\..\..\lib\windows\bsp\lib\debug\ ECHO Done
-# End Special Build Tool
-
-!ENDIF
-
-# Begin Target
-
-# Name "bsplib - Win32 Release"
-# Name "bsplib - Win32 Debug"
-# Begin Group "intern"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\..\intern\BSP_CSGException.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\BSP_CSGISplitter.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\BSP_CSGMesh.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\BSP_CSGMesh.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\BSP_CSGMesh_CFIterator.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\BSP_MeshPrimitives.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\BSP_MeshPrimitives.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\CSG_BooleanOps.cpp
-# End Source File
-# End Group
-# Begin Group "extern"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\..\extern\CSG_BooleanOps.h
-# End Source File
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="bsplib" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=bsplib - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "bsplib.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "bsplib.mak" CFG="bsplib - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "bsplib - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "bsplib - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "bsplib - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\..\obj\windows\intern\bsp\"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\intern\bsp\"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /Ob2 /I "../../../../../lib/windows/memutil/include" /I "../.." /I "../../../../../lib/windows/moto/include" /I "../../../../../lib/windows/container/include" /I "..\..\..\container" /I "..\..\..\moto\include" /I "..\..\..\memutil" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD BASE RSC /l 0x413 /d "NDEBUG"
+# ADD RSC /l 0x413 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\intern\bsp\libbsp.lib"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Cmds=ECHO Copying header files XCOPY /Y ..\..\extern\*.h ..\..\..\..\..\lib\windows\bsp\include\ ECHO Copying lib XCOPY /Y ..\..\..\..\obj\windows\intern\bsp\*.lib ..\..\..\..\..\lib\windows\bsp\lib\*.a ECHO Done
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "bsplib - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\..\obj\windows\intern\bsp\debug"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\intern\bsp\debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../../../../lib/windows/memutil" /I "../.." /I "../../../../../lib/windows/moto/include" /I "../../../../../lib/windows/container/include" /I "../../../../../lib/windows/memutil/include" /I "..\..\..\container" /I "..\..\..\moto\include" /I "..\..\..\memutil" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /FD /GZ /c
+# ADD BASE RSC /l 0x413 /d "_DEBUG"
+# ADD RSC /l 0x413 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\intern\bsp\debug\libbsp.lib"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Cmds=ECHO Copying header files XCOPY /Y ..\..\extern\*.h ..\..\..\..\..\lib\windows\bsp\include\ ECHO Copying lib XCOPY /Y ..\..\..\..\obj\windows\intern\bsp\debug\*.lib ..\..\..\..\..\lib\windows\bsp\lib\debug\*.a ECHO Copying Debug info. XCOPY /Y ..\..\..\..\obj\windows\intern\bsp\debug\vc60.* ..\..\..\..\..\lib\windows\bsp\lib\debug\ ECHO Done
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "bsplib - Win32 Release"
+# Name "bsplib - Win32 Debug"
+# Begin Group "intern"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\intern\BSP_CSGException.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\BSP_CSGISplitter.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\BSP_CSGMesh.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\BSP_CSGMesh.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\BSP_CSGMesh_CFIterator.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\BSP_MeshPrimitives.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\BSP_MeshPrimitives.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\CSG_BooleanOps.cpp
+# End Source File
+# End Group
+# Begin Group "extern"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\extern\CSG_BooleanOps.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/intern/bsp/make/msvc6_0/bsplib.dsw b/intern/bsp/make/msvc6_0/bsplib.dsw
index 1827dc3746e..de8cdcd1d33 100644
--- a/intern/bsp/make/msvc6_0/bsplib.dsw
+++ b/intern/bsp/make/msvc6_0/bsplib.dsw
@@ -1,29 +1,29 @@
-Microsoft Developer Studio Workspace File, Format Version 6.00
-# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
-
-###############################################################################
-
-Project: "bsplib"=.\bsplib.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Global:
-
-Package=<5>
-{{{
-}}}
-
-Package=<3>
-{{{
-}}}
-
-###############################################################################
-
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "bsplib"=.\bsplib.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/intern/bsp/test/BSP_GhostTest/BSP_GhostTest.dsp b/intern/bsp/test/BSP_GhostTest/BSP_GhostTest.dsp
index aaa45273845..4474eaa5d90 100644
--- a/intern/bsp/test/BSP_GhostTest/BSP_GhostTest.dsp
+++ b/intern/bsp/test/BSP_GhostTest/BSP_GhostTest.dsp
@@ -1,126 +1,126 @@
-# Microsoft Developer Studio Project File - Name="BSP_GhostTest" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=BSP_GhostTest - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "BSP_GhostTest.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "BSP_GhostTest.mak" CFG="BSP_GhostTest - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "BSP_GhostTest - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "BSP_GhostTest - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "BSP_GhostTest - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /G6 /MT /W3 /GX /O2 /Ob2 /I "../../extern/" /I "../../../../lib/windows/string/include" /I "../../../../lib/windows/ghost/include" /I "../../../../lib/windows/moto/include" /I "../../../../lib/windows/memutil/include" /I "../../../../lib/windows/container/include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD BASE RSC /l 0x413 /d "NDEBUG"
-# ADD RSC /l 0x413 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 glu32.lib opengl32.lib kernel32.lib user32.lib gdi32.lib /nologo /subsystem:console /machine:I386 /libpath:"..\..\..\..\lib\windows\glut-3.7\lib\\"
-
-!ELSEIF "$(CFG)" == "BSP_GhostTest - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../extern/" /I "../../../../lib/windows/string/include" /I "../../../../lib/windows/ghost/include" /I "../../../../lib/windows/moto/include" /I "../../../../lib/windows/memutil/include" /I "../../../../lib/windows/container/include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
-# ADD BASE RSC /l 0x413 /d "_DEBUG"
-# ADD RSC /l 0x413 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 glu32.lib opengl32.lib user32.lib gdi32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\..\lib\windows\glut-3.7\lib\\"
-
-!ENDIF
-
-# Begin Target
-
-# Name "BSP_GhostTest - Win32 Release"
-# Name "BSP_GhostTest - Win32 Debug"
-# Begin Source File
-
-SOURCE=.\BSP_GhostTest3D.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\BSP_GhostTest3D.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\BSP_MeshDrawer.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\BSP_MeshDrawer.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\BSP_PlyLoader.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\BSP_PlyLoader.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\BSP_TMesh.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\main.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\ply.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\plyfile.c
-# End Source File
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="BSP_GhostTest" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=BSP_GhostTest - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "BSP_GhostTest.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "BSP_GhostTest.mak" CFG="BSP_GhostTest - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "BSP_GhostTest - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "BSP_GhostTest - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "BSP_GhostTest - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /G6 /MT /W3 /GX /O2 /Ob2 /I "../../extern/" /I "../../../../lib/windows/string/include" /I "../../../../lib/windows/ghost/include" /I "../../../../lib/windows/moto/include" /I "../../../../lib/windows/memutil/include" /I "../../../../lib/windows/container/include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x413 /d "NDEBUG"
+# ADD RSC /l 0x413 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 glu32.lib opengl32.lib kernel32.lib user32.lib gdi32.lib /nologo /subsystem:console /machine:I386 /libpath:"..\..\..\..\lib\windows\glut-3.7\lib\\"
+
+!ELSEIF "$(CFG)" == "BSP_GhostTest - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../extern/" /I "../../../../lib/windows/string/include" /I "../../../../lib/windows/ghost/include" /I "../../../../lib/windows/moto/include" /I "../../../../lib/windows/memutil/include" /I "../../../../lib/windows/container/include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x413 /d "_DEBUG"
+# ADD RSC /l 0x413 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 glu32.lib opengl32.lib user32.lib gdi32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\..\lib\windows\glut-3.7\lib\\"
+
+!ENDIF
+
+# Begin Target
+
+# Name "BSP_GhostTest - Win32 Release"
+# Name "BSP_GhostTest - Win32 Debug"
+# Begin Source File
+
+SOURCE=.\BSP_GhostTest3D.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\BSP_GhostTest3D.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\BSP_MeshDrawer.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\BSP_MeshDrawer.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\BSP_PlyLoader.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\BSP_PlyLoader.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\BSP_TMesh.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\main.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\ply.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\plyfile.c
+# End Source File
+# End Target
+# End Project
diff --git a/intern/bsp/test/BSP_GhostTest/BSP_GhostTest.dsw b/intern/bsp/test/BSP_GhostTest/BSP_GhostTest.dsw
index 802fba84bef..0d9ca3d2b08 100644
--- a/intern/bsp/test/BSP_GhostTest/BSP_GhostTest.dsw
+++ b/intern/bsp/test/BSP_GhostTest/BSP_GhostTest.dsw
@@ -1,125 +1,125 @@
-Microsoft Developer Studio Workspace File, Format Version 6.00
-# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
-
-###############################################################################
-
-Project: "BSP_GhostTest"=.\BSP_GhostTest.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name bsplib
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name ghost
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name string
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name MoTo
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "MoTo"=..\..\..\moto\make\msvc_6_0\MoTo.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "bsplib"=..\..\make\msvc6_0\bsplib.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name container
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name memutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name MoTo
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "container"=..\..\..\container\make\msvc_6_0\container.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name memutil
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "ghost"=..\..\..\ghost\make\msvc\ghost.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "memutil"=..\..\..\memutil\make\msvc_60\memutil.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "string"=..\..\..\string\make\msvc_6_0\string.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Global:
-
-Package=<5>
-{{{
-}}}
-
-Package=<3>
-{{{
-}}}
-
-###############################################################################
-
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "BSP_GhostTest"=.\BSP_GhostTest.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name bsplib
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name ghost
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name string
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name MoTo
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "MoTo"=..\..\..\moto\make\msvc_6_0\MoTo.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "bsplib"=..\..\make\msvc6_0\bsplib.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name container
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name memutil
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name MoTo
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "container"=..\..\..\container\make\msvc_6_0\container.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name memutil
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "ghost"=..\..\..\ghost\make\msvc\ghost.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "memutil"=..\..\..\memutil\make\msvc_60\memutil.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "string"=..\..\..\string\make\msvc_6_0\string.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/intern/container/make/msvc_6_0/container.dsp b/intern/container/make/msvc_6_0/container.dsp
index 2ccf1f0a384..ac565c4c1ec 100644
--- a/intern/container/make/msvc_6_0/container.dsp
+++ b/intern/container/make/msvc_6_0/container.dsp
@@ -1,133 +1,133 @@
-# Microsoft Developer Studio Project File - Name="container" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=container - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "container.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "container.mak" CFG="container - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "container - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "container - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "container - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\..\obj\windows\intern\container"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\intern\container"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /Ob2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD BASE RSC /l 0x413 /d "NDEBUG"
-# ADD RSC /l 0x413 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"../../../../obj/windows/intern/container/libcontainer.lib"
-# Begin Special Build Tool
-SOURCE="$(InputPath)"
-PostBuild_Cmds=ECHO Copying header files XCOPY /Y ..\..\*.h ..\..\..\..\..\lib\windows\container\include\ ECHO Copying lib XCOPY /Y ..\..\..\..\obj\windows\intern\container\*.lib ..\..\..\..\..\lib\windows\container\lib\*.a ECHO Done
-# End Special Build Tool
-
-!ELSEIF "$(CFG)" == "container - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\..\obj\windows\intern\container\debug"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\intern\container\debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD BASE RSC /l 0x413 /d "_DEBUG"
-# ADD RSC /l 0x413 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\intern\container\debug\libcontainer.lib"
-# Begin Special Build Tool
-SOURCE="$(InputPath)"
-PostBuild_Cmds=ECHO Copying header files XCOPY /Y ..\..\*.h ..\..\..\..\..\lib\windows\container\include\ ECHO Copying lib XCOPY /Y ..\..\..\..\obj\windows\intern\container\debug\*.lib ..\..\..\..\..\lib\windows\container\lib\debug\*.a ECHO Copying Debug info. XCOPY /Y ..\..\..\..\obj\windows\intern\container\debug\vc60.* ..\..\..\..\..\lib\windows\container\lib\debug\ ECHO Done
-# End Special Build Tool
-
-!ENDIF
-
-# Begin Target
-
-# Name "container - Win32 Release"
-# Name "container - Win32 Debug"
-# Begin Group "intern"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\..\intern\CTR_List.cpp
-
-!IF "$(CFG)" == "container - Win32 Release"
-
-# ADD CPP /I "../extern" /I "../../"
-
-!ELSEIF "$(CFG)" == "container - Win32 Debug"
-
-# ADD CPP /I "../../"
-
-!ENDIF
-
-# End Source File
-# End Group
-# Begin Source File
-
-SOURCE=..\..\CTR_List.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\CTR_Map.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\CTR_TaggedIndex.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\CTR_TaggedSetOps.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\CTR_UHeap.h
-# End Source File
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="container" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=container - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "container.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "container.mak" CFG="container - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "container - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "container - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "container - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\..\obj\windows\intern\container"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\intern\container"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /Ob2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD BASE RSC /l 0x413 /d "NDEBUG"
+# ADD RSC /l 0x413 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"../../../../obj/windows/intern/container/libcontainer.lib"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Cmds=ECHO Copying header files XCOPY /Y ..\..\*.h ..\..\..\..\..\lib\windows\container\include\ ECHO Copying lib XCOPY /Y ..\..\..\..\obj\windows\intern\container\*.lib ..\..\..\..\..\lib\windows\container\lib\*.a ECHO Done
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "container - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\..\obj\windows\intern\container\debug"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\intern\container\debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x413 /d "_DEBUG"
+# ADD RSC /l 0x413 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\intern\container\debug\libcontainer.lib"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Cmds=ECHO Copying header files XCOPY /Y ..\..\*.h ..\..\..\..\..\lib\windows\container\include\ ECHO Copying lib XCOPY /Y ..\..\..\..\obj\windows\intern\container\debug\*.lib ..\..\..\..\..\lib\windows\container\lib\debug\*.a ECHO Copying Debug info. XCOPY /Y ..\..\..\..\obj\windows\intern\container\debug\vc60.* ..\..\..\..\..\lib\windows\container\lib\debug\ ECHO Done
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "container - Win32 Release"
+# Name "container - Win32 Debug"
+# Begin Group "intern"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\intern\CTR_List.cpp
+
+!IF "$(CFG)" == "container - Win32 Release"
+
+# ADD CPP /I "../extern" /I "../../"
+
+!ELSEIF "$(CFG)" == "container - Win32 Debug"
+
+# ADD CPP /I "../../"
+
+!ENDIF
+
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=..\..\CTR_List.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\CTR_Map.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\CTR_TaggedIndex.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\CTR_TaggedSetOps.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\CTR_UHeap.h
+# End Source File
+# End Target
+# End Project
diff --git a/intern/container/make/msvc_6_0/container.dsw b/intern/container/make/msvc_6_0/container.dsw
index 13092e3c427..ed9604641fb 100644
--- a/intern/container/make/msvc_6_0/container.dsw
+++ b/intern/container/make/msvc_6_0/container.dsw
@@ -1,29 +1,29 @@
-Microsoft Developer Studio Workspace File, Format Version 6.00
-# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
-
-###############################################################################
-
-Project: "container"=.\container.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Global:
-
-Package=<5>
-{{{
-}}}
-
-Package=<3>
-{{{
-}}}
-
-###############################################################################
-
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "container"=.\container.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/intern/decimation/make/msvc_6_0/decimation.dsp b/intern/decimation/make/msvc_6_0/decimation.dsp
index 013e9e077fb..40b65a032db 100644
--- a/intern/decimation/make/msvc_6_0/decimation.dsp
+++ b/intern/decimation/make/msvc_6_0/decimation.dsp
@@ -1,186 +1,186 @@
-# Microsoft Developer Studio Project File - Name="decimation" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=decimation - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "decimation.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "decimation.mak" CFG="decimation - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "decimation - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "decimation - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "decimation - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\..\obj\windows\intern\decimation"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\intern\decimation"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /W3 /GX /O2 /Ob2 /I "..\..\..\..\..\lib\windows\container\include\\" /I "..\..\..\..\..\lib\windows\memutil\include\\" /I "..\..\..\..\..\lib\windows\moto\include\\" /I"..\..\..\moto\include" /I"..\..\..\memutil" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /FD /c
-# ADD BASE RSC /l 0x413 /d "NDEBUG"
-# ADD RSC /l 0x413 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\intern\decimation\libdecimation.lib"
-# Begin Special Build Tool
-SOURCE="$(InputPath)"
-PostBuild_Cmds=ECHO Copying header files XCOPY /Y ..\..\extern\*.h ..\..\..\..\..\lib\windows\decimation\include\ ECHO Copying lib XCOPY /Y ..\..\..\..\obj\windows\intern\decimation\*.lib ..\..\..\..\..\lib\windows\decimation\lib\*.a ECHO Done
-# End Special Build Tool
-
-!ELSEIF "$(CFG)" == "decimation - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\..\obj\windows\intern\decimation\debug"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\intern\decimation\debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /W4 /Gm /GX /ZI /Od /I "..\..\..\..\..\lib\windows\container\include\\" /I "..\..\..\..\..\lib\windows\memutil\include\\" /I "..\..\..\..\..\lib\windows\moto\include\\" /I"..\..\..\moto\include" /I"..\..\..\memutil" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /FD /GZ /c
-# ADD BASE RSC /l 0x413 /d "_DEBUG"
-# ADD RSC /l 0x413 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\intern\decimation\debug\libdecimation.lib"
-# Begin Special Build Tool
-SOURCE="$(InputPath)"
-PostBuild_Cmds=ECHO Copying header files XCOPY /Y ..\..\extern\*.h ..\..\..\..\..\lib\windows\decimation\include\ ECHO Copying lib XCOPY /Y ..\..\..\..\obj\windows\intern\decimation\debug\*.lib ..\..\..\..\..\lib\windows\decimation\lib\debug\*.a ECHO Copying Debug info. XCOPY /Y ..\..\..\..\obj\windows\intern\decimation\debug\vc60.* ..\..\..\..\..\lib\windows\decimation\lib\debug\ ECHO Done
-# End Special Build Tool
-
-!ENDIF
-
-# Begin Target
-
-# Name "decimation - Win32 Release"
-# Name "decimation - Win32 Debug"
-# Begin Group "intern"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\..\intern\LOD_decimation.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\LOD_DecimationClass.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\LOD_EdgeCollapser.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\LOD_EdgeCollapser.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\LOD_ExternBufferEditor.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\LOD_ExternNormalEditor.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\LOD_ExternNormalEditor.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\LOD_FaceNormalEditor.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\LOD_FaceNormalEditor.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\LOD_ManMesh2.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\LOD_ManMesh2.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\LOD_MeshBounds.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\LOD_MeshException.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\LOD_MeshPrimitives.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\LOD_MeshPrimitives.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\LOD_QSDecimator.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\LOD_QSDecimator.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\LOD_Quadric.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\LOD_QuadricEditor.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\LOD_QuadricEditor.h
-# End Source File
-# End Group
-# Begin Group "extern"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\..\extern\LOD_decimation.h
-# End Source File
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="decimation" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=decimation - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "decimation.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "decimation.mak" CFG="decimation - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "decimation - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "decimation - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "decimation - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\..\obj\windows\intern\decimation"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\intern\decimation"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /Ob2 /I "..\..\..\..\..\lib\windows\container\include\\" /I "..\..\..\..\..\lib\windows\memutil\include\\" /I "..\..\..\..\..\lib\windows\moto\include\\" /I"..\..\..\moto\include" /I"..\..\..\memutil" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /FD /c
+# ADD BASE RSC /l 0x413 /d "NDEBUG"
+# ADD RSC /l 0x413 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\intern\decimation\libdecimation.lib"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Cmds=ECHO Copying header files XCOPY /Y ..\..\extern\*.h ..\..\..\..\..\lib\windows\decimation\include\ ECHO Copying lib XCOPY /Y ..\..\..\..\obj\windows\intern\decimation\*.lib ..\..\..\..\..\lib\windows\decimation\lib\*.a ECHO Done
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "decimation - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\..\obj\windows\intern\decimation\debug"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\intern\decimation\debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /W4 /Gm /GX /ZI /Od /I "..\..\..\..\..\lib\windows\container\include\\" /I "..\..\..\..\..\lib\windows\memutil\include\\" /I "..\..\..\..\..\lib\windows\moto\include\\" /I"..\..\..\moto\include" /I"..\..\..\memutil" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /FD /GZ /c
+# ADD BASE RSC /l 0x413 /d "_DEBUG"
+# ADD RSC /l 0x413 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\intern\decimation\debug\libdecimation.lib"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Cmds=ECHO Copying header files XCOPY /Y ..\..\extern\*.h ..\..\..\..\..\lib\windows\decimation\include\ ECHO Copying lib XCOPY /Y ..\..\..\..\obj\windows\intern\decimation\debug\*.lib ..\..\..\..\..\lib\windows\decimation\lib\debug\*.a ECHO Copying Debug info. XCOPY /Y ..\..\..\..\obj\windows\intern\decimation\debug\vc60.* ..\..\..\..\..\lib\windows\decimation\lib\debug\ ECHO Done
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "decimation - Win32 Release"
+# Name "decimation - Win32 Debug"
+# Begin Group "intern"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\intern\LOD_decimation.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\LOD_DecimationClass.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\LOD_EdgeCollapser.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\LOD_EdgeCollapser.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\LOD_ExternBufferEditor.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\LOD_ExternNormalEditor.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\LOD_ExternNormalEditor.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\LOD_FaceNormalEditor.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\LOD_FaceNormalEditor.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\LOD_ManMesh2.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\LOD_ManMesh2.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\LOD_MeshBounds.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\LOD_MeshException.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\LOD_MeshPrimitives.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\LOD_MeshPrimitives.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\LOD_QSDecimator.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\LOD_QSDecimator.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\LOD_Quadric.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\LOD_QuadricEditor.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\LOD_QuadricEditor.h
+# End Source File
+# End Group
+# Begin Group "extern"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\extern\LOD_decimation.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/intern/decimation/make/msvc_6_0/decimation.dsw b/intern/decimation/make/msvc_6_0/decimation.dsw
index f874b324725..d46268c2545 100644
--- a/intern/decimation/make/msvc_6_0/decimation.dsw
+++ b/intern/decimation/make/msvc_6_0/decimation.dsw
@@ -1,33 +1,33 @@
-Microsoft Developer Studio Workspace File, Format Version 6.00
-# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
-
-###############################################################################
-
-Project: "decimation"=.\decimation.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Global:
-
-Package=<5>
-{{{
-}}}
-
-Package=<3>
-{{{
-}}}
-
-###############################################################################
-
-
-
-
-
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "decimation"=.\decimation.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
+
+
+
+
diff --git a/intern/elbeem/make/msvc_6_0/elbeem.dsp b/intern/elbeem/make/msvc_6_0/elbeem.dsp
index ef5daa29fa4..652687ca82b 100644
--- a/intern/elbeem/make/msvc_6_0/elbeem.dsp
+++ b/intern/elbeem/make/msvc_6_0/elbeem.dsp
@@ -1,290 +1,290 @@
-# Microsoft Developer Studio Project File - Name="elbeem" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=elbeem - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "elbeem.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "elbeem.mak" CFG="elbeem - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "elbeem - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "elbeem - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "elbeem - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /I "../../../../../lib/windows/sdl/include" /I "../../../../../lib/windows/zlib/include" /I "../../../../../lib/windows/png/include" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "NOGUI" /D "ELBEEM_BLENDER" /YX /FD /c
-# ADD BASE RSC /l 0x407 /d "NDEBUG"
-# ADD RSC /l 0x407 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"Release\blender_elbeem.lib"
-# Begin Special Build Tool
-SOURCE="$(InputPath)"
-PostBuild_Cmds=ECHO copy to lib ... xcopy /Y .\release\blender_elbeem.lib ..\..\..\..\..\lib\windows\elbeem\lib\*.*
-# End Special Build Tool
-
-!ELSEIF "$(CFG)" == "elbeem - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../../../../lib/windows/sdl/include" /I "../../../../../lib/windows/zlib/include" /I "../../../../../lib/windows/png/include" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "NOGUI" /D "ELBEEM_BLENDER" /YX /FD /GZ /c
-# ADD BASE RSC /l 0x407 /d "_DEBUG"
-# ADD RSC /l 0x407 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"Debug\blender_elbeem.lib"
-# Begin Special Build Tool
-SOURCE="$(InputPath)"
-PostBuild_Cmds=ECHO copy to lib ... xcopy /Y .\debug\blender_elbeem.lib ..\..\..\..\..\lib\windows\elbeem\lib\debug\*.*
-# End Special Build Tool
-
-!ENDIF
-
-# Begin Target
-
-# Name "elbeem - Win32 Release"
-# Name "elbeem - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\intern\attributes.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\elbeem.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\isosurface.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\ntl_blenderdumper.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\ntl_bsptree.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\ntl_geometrymodel.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\ntl_geometryobject.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\ntl_lighting.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\ntl_ray.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\ntl_world.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\parametrizer.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\particletracer.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\simulation_object.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\solver_adap.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\solver_init.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\solver_interface.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\solver_main.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\solver_util.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\utilities.cpp
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\intern\attributes.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\isosurface.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\mcubes_tables.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\ntl_blenderdumper.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\ntl_bsptree.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\ntl_geometryclass.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\ntl_geometrymodel.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\ntl_geometryobject.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\ntl_geometryshader.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\ntl_lighting.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\ntl_lightobject.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\ntl_material.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\ntl_matrices.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\ntl_ray.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\ntl_renderglobals.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\ntl_rndstream.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\ntl_scene.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\ntl_triangle.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\ntl_vector3dim.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\ntl_world.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\parametrizer.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\particletracer.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\simulation_object.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\solver_class.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\solver_dimenions.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\solver_interface.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\solver_relax.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\utilities.h
-# End Source File
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="elbeem" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=elbeem - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "elbeem.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "elbeem.mak" CFG="elbeem - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "elbeem - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "elbeem - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "elbeem - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /I "../../../../../lib/windows/sdl/include" /I "../../../../../lib/windows/zlib/include" /I "../../../../../lib/windows/png/include" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "NOGUI" /D "ELBEEM_BLENDER" /YX /FD /c
+# ADD BASE RSC /l 0x407 /d "NDEBUG"
+# ADD RSC /l 0x407 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"Release\blender_elbeem.lib"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Cmds=ECHO copy to lib ... xcopy /Y .\release\blender_elbeem.lib ..\..\..\..\..\lib\windows\elbeem\lib\*.*
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "elbeem - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../../../../lib/windows/sdl/include" /I "../../../../../lib/windows/zlib/include" /I "../../../../../lib/windows/png/include" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "NOGUI" /D "ELBEEM_BLENDER" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x407 /d "_DEBUG"
+# ADD RSC /l 0x407 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"Debug\blender_elbeem.lib"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Cmds=ECHO copy to lib ... xcopy /Y .\debug\blender_elbeem.lib ..\..\..\..\..\lib\windows\elbeem\lib\debug\*.*
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "elbeem - Win32 Release"
+# Name "elbeem - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\intern\attributes.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\elbeem.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\isosurface.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\ntl_blenderdumper.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\ntl_bsptree.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\ntl_geometrymodel.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\ntl_geometryobject.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\ntl_lighting.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\ntl_ray.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\ntl_world.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\parametrizer.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\particletracer.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\simulation_object.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\solver_adap.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\solver_init.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\solver_interface.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\solver_main.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\solver_util.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\utilities.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\intern\attributes.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\isosurface.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\mcubes_tables.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\ntl_blenderdumper.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\ntl_bsptree.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\ntl_geometryclass.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\ntl_geometrymodel.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\ntl_geometryobject.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\ntl_geometryshader.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\ntl_lighting.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\ntl_lightobject.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\ntl_material.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\ntl_matrices.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\ntl_ray.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\ntl_renderglobals.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\ntl_rndstream.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\ntl_scene.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\ntl_triangle.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\ntl_vector3dim.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\ntl_world.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\parametrizer.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\particletracer.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\simulation_object.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\solver_class.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\solver_dimenions.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\solver_interface.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\solver_relax.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\utilities.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/intern/ghost/intern/GHOST_SystemWin32.cpp b/intern/ghost/intern/GHOST_SystemWin32.cpp
index e79a075ff2c..8513d056795 100644
--- a/intern/ghost/intern/GHOST_SystemWin32.cpp
+++ b/intern/ghost/intern/GHOST_SystemWin32.cpp
@@ -39,6 +39,7 @@
#endif
#include "GHOST_SystemWin32.h"
+//#include <stdio.h> //for printf()
// win64 doesn't define GWL_USERDATA
#ifdef WIN32
@@ -536,7 +537,7 @@ GHOST_Event* GHOST_SystemWin32::processWindowEvent(GHOST_TEventType type, GHOST_
LRESULT WINAPI GHOST_SystemWin32::s_wndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
GHOST_Event* event = 0;
- LRESULT lResult;
+ LRESULT lResult = 0;
GHOST_SystemWin32* system = ((GHOST_SystemWin32*)getSystem());
GHOST_ASSERT(system, "GHOST_SystemWin32::s_wndProc(): system not initialized")
@@ -746,6 +747,9 @@ LRESULT WINAPI GHOST_SystemWin32::s_wndProc(HWND hwnd, UINT msg, WPARAM wParam,
* the message is sent asynchronously, so the window is activated immediately.
*/
event = processWindowEvent(LOWORD(wParam) ? GHOST_kEventWindowActivate : GHOST_kEventWindowDeactivate, window);
+ /* WARNING: Let DefWindowProc handle WM_ACTIVATE, otherwise WM_MOUSEWHEEL
+ will not be dispatched to OUR active window if we minimize one of OUR windows. */
+ lResult = ::DefWindowProc(hwnd, msg, wParam, lParam);
break;
case WM_PAINT:
/* An application sends the WM_PAINT message when the system or another application
@@ -905,7 +909,6 @@ LRESULT WINAPI GHOST_SystemWin32::s_wndProc(HWND hwnd, UINT msg, WPARAM wParam,
if (event) {
system->pushEvent(event);
- lResult = 0;
}
else {
lResult = ::DefWindowProc(hwnd, msg, wParam, lParam);
diff --git a/intern/ghost/intern/GHOST_SystemX11.cpp b/intern/ghost/intern/GHOST_SystemX11.cpp
index c6ce7b628e9..a975322e9ce 100644
--- a/intern/ghost/intern/GHOST_SystemX11.cpp
+++ b/intern/ghost/intern/GHOST_SystemX11.cpp
@@ -117,7 +117,15 @@ GHOST_SystemX11(
m_net_fullscreen= XInternAtom(m_display,
"_NET_WM_STATE_FULLSCREEN", False);
m_motif= XInternAtom(m_display, "_MOTIF_WM_HINTS", False);
-
+ m_targets= XInternAtom(m_display, "TARGETS", False);
+ m_string= XInternAtom(m_display, "STRING", False);
+ m_compound_text= XInternAtom(m_display, "COMPOUND_TEXT", False);
+ m_text= XInternAtom(m_display, "TEXT", False);
+ m_clipboard= XInternAtom(m_display, "CLIPBOARD", False);
+ m_primary= XInternAtom(m_display, "PRIMARY", False);
+ m_xclip_out= XInternAtom(m_display, "XCLIP_OUT", False);
+ m_incr= XInternAtom(m_display, "INCR", False);
+ m_utf8_string= XInternAtom(m_display, "UTF8_STRING", False);
// compute the initial time
timeval tv;
@@ -1004,144 +1012,298 @@ convertXKey(
#undef GXMAP
- GHOST_TUns8*
-GHOST_SystemX11::
-getClipboard(bool selection
-) const {
- //Flag
- //0 = Regular clipboard 1 = selection
- static Atom Primary_atom, clip_String, compound_text, a_text, a_string;
- Atom rtype;
- Window m_window, owner;
- unsigned char *data, *tmp_data;
- int bits, count;
- unsigned long len, bytes;
- XEvent xevent;
-
+/* from xclip.c xcout() v0.11 */
+
+#define XCLIB_XCOUT_NONE 0 /* no context */
+#define XCLIB_XCOUT_SENTCONVSEL 1 /* sent a request */
+#define XCLIB_XCOUT_INCR 2 /* in an incr loop */
+#define XCLIB_XCOUT_FALLBACK 3 /* STRING failed, need fallback to UTF8 */
+#define XCLIB_XCOUT_FALLBACK_UTF8 4 /* UTF8 failed, move to compouned */
+#define XCLIB_XCOUT_FALLBACK_COMP 5 /* compouned failed, move to text. */
+#define XCLIB_XCOUT_FALLBACK_TEXT 6
+
+// Retrieves the contents of a selections.
+void GHOST_SystemX11::getClipboard_xcout(XEvent evt,
+ Atom sel, Atom target, unsigned char **txt,
+ unsigned long *len, unsigned int *context) const
+{
+ Atom pty_type;
+ int pty_format;
+ unsigned char *buffer;
+ unsigned long pty_size, pty_items;
+ unsigned char *ltxt= *txt;
+
vector<GHOST_IWindow *> & win_vec = m_windowManager->getWindows();
vector<GHOST_IWindow *>::iterator win_it = win_vec.begin();
GHOST_WindowX11 * window = static_cast<GHOST_WindowX11 *>(*win_it);
- m_window = window->getXWindow();
+ Window win = window->getXWindow();
+
+ switch (*context) {
+ // There is no context, do an XConvertSelection()
+ case XCLIB_XCOUT_NONE:
+ // Initialise return length to 0
+ if (*len > 0) {
+ free(*txt);
+ *len = 0;
+ }
- clip_String = XInternAtom(m_display, "_BLENDER_STRING", False);
- compound_text = XInternAtom(m_display, "COMPOUND_TEXT", False);
- a_text= XInternAtom(m_display, "TEXT", False);
- a_string= XInternAtom(m_display, "STRING", False);
-
- //lets check the owner and if it is us then return the static buffer
- if(!selection) {
- Primary_atom = XInternAtom(m_display, "CLIPBOARD", False);
- owner = XGetSelectionOwner(m_display, Primary_atom);
- if (owner == m_window) {
- data = (unsigned char*) malloc(strlen(txt_cut_buffer)+1);
- strcpy((char*)data, txt_cut_buffer);
- return (GHOST_TUns8*)data;
- } else if (owner == None) {
- return NULL;
- }
- } else {
- Primary_atom = XInternAtom(m_display, "PRIMARY", False);
- owner = XGetSelectionOwner(m_display, Primary_atom);
- if (owner == m_window) {
- data = (unsigned char*) malloc(strlen(txt_select_buffer)+1);
- strcpy((char*)data, txt_select_buffer);
- return (GHOST_TUns8*)data;
- } else if (owner == None) {
- return NULL;
- }
- }
+ // Send a selection request
+ XConvertSelection(m_display, sel, target, m_xclip_out, win, CurrentTime);
+ *context = XCLIB_XCOUT_SENTCONVSEL;
+ return;
- if(!Primary_atom) {
- return NULL;
- }
-
- XDeleteProperty(m_display, m_window, Primary_atom);
- XConvertSelection(m_display, Primary_atom, compound_text, clip_String, m_window, CurrentTime); //XA_STRING
- XFlush(m_display);
+ case XCLIB_XCOUT_SENTCONVSEL:
+ if (evt.type != SelectionNotify)
+ return;
- //This needs to change so we do not wait for ever or check owner first
- count= 1;
- while(1) {
- XNextEvent(m_display, &xevent);
- if(xevent.type == SelectionNotify) {
- if (xevent.xselection.property == None) {
- /* Ok, the client can't convert the property
- * to some that we can handle, try other types..
- */
- if (count == 1) {
- XConvertSelection(m_display, Primary_atom, a_text, clip_String, m_window, CurrentTime);
- count++;
- }
- else if (count == 2) {
- XConvertSelection(m_display, Primary_atom, a_string, clip_String, m_window, CurrentTime);
- count++;
- }
- else {
- /* Ok, the owner of the selection can't
- * convert the data to something that we can
- * handle.
- */
- return(NULL);
- }
+ if (target == m_utf8_string && evt.xselection.property == None) {
+ *context= XCLIB_XCOUT_FALLBACK_UTF8;
+ return;
+ }
+ else if (target == m_compound_text && evt.xselection.property == None) {
+ *context= XCLIB_XCOUT_FALLBACK_COMP;
+ return;
+ }
+ else if (target == m_text && evt.xselection.property == None) {
+ *context= XCLIB_XCOUT_FALLBACK_TEXT;
+ return;
+ }
+
+ // find the size and format of the data in property
+ XGetWindowProperty(m_display, win, m_xclip_out, 0, 0, False,
+ AnyPropertyType, &pty_type, &pty_format,
+ &pty_items, &pty_size, &buffer);
+ XFree(buffer);
+
+ if (pty_type == m_incr) {
+ // start INCR mechanism by deleting property
+ XDeleteProperty(m_display, win, m_xclip_out);
+ XFlush(m_display);
+ *context = XCLIB_XCOUT_INCR;
+ return;
+ }
+
+ // if it's not incr, and not format == 8, then there's
+ // nothing in the selection (that xclip understands, anyway)
+
+ if (pty_format != 8) {
+ *context = XCLIB_XCOUT_NONE;
+ return;
+ }
+
+ // not using INCR mechanism, just read the property
+ XGetWindowProperty(m_display, win, m_xclip_out, 0, (long) pty_size,
+ False, AnyPropertyType, &pty_type,
+ &pty_format, &pty_items, &pty_size, &buffer);
+
+ // finished with property, delete it
+ XDeleteProperty(m_display, win, m_xclip_out);
+
+ // copy the buffer to the pointer for returned data
+ ltxt = (unsigned char *) malloc(pty_items);
+ memcpy(ltxt, buffer, pty_items);
+
+ // set the length of the returned data
+ *len = pty_items;
+ *txt = ltxt;
+
+ // free the buffer
+ XFree(buffer);
+
+ *context = XCLIB_XCOUT_NONE;
+
+ // complete contents of selection fetched, return 1
+ return;
+
+ case XCLIB_XCOUT_INCR:
+ // To use the INCR method, we basically delete the
+ // property with the selection in it, wait for an
+ // event indicating that the property has been created,
+ // then read it, delete it, etc.
+
+ // make sure that the event is relevant
+ if (evt.type != PropertyNotify)
+ return;
+
+ // skip unless the property has a new value
+ if (evt.xproperty.state != PropertyNewValue)
+ return;
+
+ // check size and format of the property
+ XGetWindowProperty(m_display, win, m_xclip_out, 0, 0, False,
+ AnyPropertyType, &pty_type, &pty_format,
+ &pty_items, &pty_size, (unsigned char **) &buffer);
+
+ if (pty_format != 8) {
+ // property does not contain text, delete it
+ // to tell the other X client that we have read
+ // it and to send the next property
+ XFree(buffer);
+ XDeleteProperty(m_display, win, m_xclip_out);
+ return;
+ }
+
+ if (pty_size == 0) {
+ // no more data, exit from loop
+ XFree(buffer);
+ XDeleteProperty(m_display, win, m_xclip_out);
+ *context = XCLIB_XCOUT_NONE;
+
+ // this means that an INCR transfer is now
+ // complete, return 1
+ return;
+ }
+
+ XFree(buffer);
+
+ // if we have come this far, the propery contains
+ // text, we know the size.
+ XGetWindowProperty(m_display, win, m_xclip_out, 0, (long) pty_size,
+ False, AnyPropertyType, &pty_type, &pty_format,
+ &pty_items, &pty_size, (unsigned char **) &buffer);
+
+ // allocate memory to accommodate data in *txt
+ if (*len == 0) {
+ *len = pty_items;
+ ltxt = (unsigned char *) malloc(*len);
}
else {
- if(XGetWindowProperty(m_display, m_window, xevent.xselection.property , 0L, 4096L, False, AnyPropertyType, &rtype, &bits, &len, &bytes, &data) == Success) {
- if (data) {
- if (bits == 8 && (rtype == compound_text || rtype == a_text || rtype == a_string)) {
- tmp_data = (unsigned char*) malloc(strlen((char*)data)+1);
- strcpy((char*)tmp_data, (char*)data);
- }
- else
- tmp_data= NULL;
-
- XFree(data);
- return (GHOST_TUns8*)tmp_data;
- }
- }
- return(NULL);
+ *len += pty_items;
+ ltxt = (unsigned char *) realloc(ltxt, *len);
}
- }
+
+ // add data to ltxt
+ memcpy(&ltxt[*len - pty_items], buffer, pty_items);
+
+ *txt = ltxt;
+ XFree(buffer);
+
+ // delete property to get the next item
+ XDeleteProperty(m_display, win, m_xclip_out);
+ XFlush(m_display);
+ return;
}
+ return;
}
- void
-GHOST_SystemX11::
-putClipboard(
-GHOST_TInt8 *buffer, bool selection) const
+GHOST_TUns8 *GHOST_SystemX11::getClipboard(bool selection) const
{
- static Atom Primary_atom;
- Window m_window, owner;
-
- if(!buffer) {return;}
-
- if(!selection) {
- Primary_atom = XInternAtom(m_display, "CLIPBOARD", False);
- if(txt_cut_buffer) { free((void*)txt_cut_buffer); }
+ Atom sseln;
+ Atom target= m_string;
+ Window owner;
+
+ // from xclip.c doOut() v0.11
+ unsigned char *sel_buf;
+ unsigned long sel_len= 0;
+ XEvent evt;
+ unsigned int context= XCLIB_XCOUT_NONE;
+
+ if (selection == True)
+ sseln= m_primary;
+ else
+ sseln= m_clipboard;
+
+ vector<GHOST_IWindow *> & win_vec = m_windowManager->getWindows();
+ vector<GHOST_IWindow *>::iterator win_it = win_vec.begin();
+ GHOST_WindowX11 * window = static_cast<GHOST_WindowX11 *>(*win_it);
+ Window win = window->getXWindow();
+
+ /* check if we are the owner. */
+ owner= XGetSelectionOwner(m_display, sseln);
+ if (owner == win) {
+ if (sseln == m_clipboard) {
+ sel_buf= (unsigned char *)malloc(strlen(txt_cut_buffer)+1);
+ strcpy((char *)sel_buf, txt_cut_buffer);
+ return((GHOST_TUns8*)sel_buf);
+ }
+ else {
+ sel_buf= (unsigned char *)malloc(strlen(txt_select_buffer)+1);
+ strcpy((char *)sel_buf, txt_select_buffer);
+ return((GHOST_TUns8*)sel_buf);
+ }
+ }
+ else if (owner == None)
+ return(NULL);
+
+ while (1) {
+ /* only get an event if xcout() is doing something */
+ if (context != XCLIB_XCOUT_NONE)
+ XNextEvent(m_display, &evt);
+
+ /* fetch the selection, or part of it */
+ getClipboard_xcout(evt, sseln, target, &sel_buf, &sel_len, &context);
+
+ /* fallback is needed. set XA_STRING to target and restart the loop. */
+ if (context == XCLIB_XCOUT_FALLBACK) {
+ context= XCLIB_XCOUT_NONE;
+ target= m_string;
+ continue;
+ }
+ else if (context == XCLIB_XCOUT_FALLBACK_UTF8) {
+ /* utf8 fail, move to compouned text. */
+ context= XCLIB_XCOUT_NONE;
+ target= m_compound_text;
+ continue;
+ }
+ else if (context == XCLIB_XCOUT_FALLBACK_COMP) {
+ /* compouned text faile, move to text. */
+ context= XCLIB_XCOUT_NONE;
+ target= m_text;
+ continue;
+ }
+
+ /* only continue if xcout() is doing something */
+ if (context == XCLIB_XCOUT_NONE)
+ break;
+ }
+
+ if (sel_len) {
+ /* only print the buffer out, and free it, if it's not
+ * empty
+ */
+ unsigned char *tmp_data = (unsigned char*) malloc(sel_len+1);
+ memcpy((char*)tmp_data, (char*)sel_buf, sel_len);
+ tmp_data[sel_len] = '\0';
- txt_cut_buffer = (char*) malloc(strlen(buffer)+1);
- strcpy(txt_cut_buffer, buffer);
- } else {
- Primary_atom = XInternAtom(m_display, "PRIMARY", False);
- if(txt_select_buffer) { free((void*)txt_select_buffer); }
+ if (sseln == m_string)
+ XFree(sel_buf);
+ else
+ free(sel_buf);
- txt_select_buffer = (char*) malloc(strlen(buffer)+1);
- strcpy(txt_select_buffer, buffer);
+ return (GHOST_TUns8*)tmp_data;
}
-
- vector<GHOST_IWindow *> & win_vec = m_windowManager->getWindows();
+ return(NULL);
+}
+
+void GHOST_SystemX11::putClipboard(GHOST_TInt8 *buffer, bool selection) const
+{
+ Window m_window, owner;
+
+ vector<GHOST_IWindow *> & win_vec = m_windowManager->getWindows();
vector<GHOST_IWindow *>::iterator win_it = win_vec.begin();
GHOST_WindowX11 * window = static_cast<GHOST_WindowX11 *>(*win_it);
m_window = window->getXWindow();
- if(!Primary_atom) {
- return;
- }
-
- XSetSelectionOwner(m_display, Primary_atom, m_window, CurrentTime);
- owner = XGetSelectionOwner(m_display, Primary_atom);
- if (owner != m_window)
- fprintf(stderr, "failed to own primary\n");
+ if (buffer) {
+ if (selection == False) {
+ XSetSelectionOwner(m_display, m_clipboard, m_window, CurrentTime);
+ owner= XGetSelectionOwner(m_display, m_clipboard);
+ if (txt_cut_buffer)
+ free((void*)txt_cut_buffer);
+
+ txt_cut_buffer = (char*) malloc(strlen(buffer)+1);
+ strcpy(txt_cut_buffer, buffer);
+ } else {
+ XSetSelectionOwner(m_display, m_primary, m_window, CurrentTime);
+ owner= XGetSelectionOwner(m_display, m_primary);
+ if (txt_select_buffer)
+ free((void*)txt_select_buffer);
+
+ txt_select_buffer = (char*) malloc(strlen(buffer)+1);
+ strcpy(txt_select_buffer, buffer);
+ }
- return;
+ if (owner != m_window)
+ fprintf(stderr, "failed to own primary\n");
+ }
}
-
diff --git a/intern/ghost/intern/GHOST_SystemX11.h b/intern/ghost/intern/GHOST_SystemX11.h
index 6eacd88b8c2..711a188ffe9 100644
--- a/intern/ghost/intern/GHOST_SystemX11.h
+++ b/intern/ghost/intern/GHOST_SystemX11.h
@@ -199,20 +199,25 @@ public:
prepareNdofInfo(
volatile GHOST_TEventNDOFData *current_values
);
-
+
+ /* Helped function for get data from the clipboard. */
+ void getClipboard_xcout(XEvent evt, Atom sel, Atom target,
+ unsigned char **txt, unsigned long *len,
+ unsigned int *context) const;
+
/**
* Returns unsinged char from CUT_BUFFER0
* @param selection Get selection, X11 only feature
* @return Returns the Clipboard indicated by Flag
*/
- GHOST_TUns8* getClipboard(bool selection) const;
+ GHOST_TUns8 *getClipboard(bool selection) const;
/**
* Puts buffer to system clipboard
* @param buffer The buffer to copy to the clipboard
* @param selection Set the selection into the clipboard, X11 only feature
*/
- virtual void putClipboard(GHOST_TInt8 *buffer, bool selection) const;
+ void putClipboard(GHOST_TInt8 *buffer, bool selection) const;
/**
* Atom used for ICCCM, WM-spec and Motif.
@@ -231,6 +236,17 @@ public:
Atom m_wm_protocols;
Atom m_delete_window_atom;
+ /* Atoms for Selection, copy & paste. */
+ Atom m_targets;
+ Atom m_string;
+ Atom m_compound_text;
+ Atom m_text;
+ Atom m_clipboard;
+ Atom m_primary;
+ Atom m_xclip_out;
+ Atom m_incr;
+ Atom m_utf8_string;
+
private :
Display * m_display;
diff --git a/intern/ghost/make/msvc/ghost.dsp b/intern/ghost/make/msvc/ghost.dsp
index fd287488b56..741d1c3a247 100644
--- a/intern/ghost/make/msvc/ghost.dsp
+++ b/intern/ghost/make/msvc/ghost.dsp
@@ -1,292 +1,292 @@
-# Microsoft Developer Studio Project File - Name="ghost" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=ghost - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "ghost.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "ghost.mak" CFG="ghost - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "ghost - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "ghost - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "ghost - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\..\obj\windows\intern\ghost"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\intern\ghost"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "../.." /I "../../../../../lib/windows/string/include" /I "..\..\..\..\intern\string" /I "../../../../../lib/windows/wintab/include" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\intern\ghost\libghost.lib"
-# Begin Special Build Tool
-SOURCE="$(InputPath)"
-PostBuild_Desc=Copying GHOST files library (release target) to lib tree.
-PostBuild_Cmds=ECHO Copying header files XCOPY /Y ..\..\*.h ..\..\..\..\..\lib\windows\ghost\include\ ECHO Copying lib XCOPY /Y ..\..\..\..\obj\windows\intern\ghost\*.lib ..\..\..\..\..\lib\windows\ghost\lib\*.a ECHO Done
-# End Special Build Tool
-
-!ELSEIF "$(CFG)" == "ghost - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\..\obj\windows\intern\ghost\debug"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\intern\ghost\debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "../.." /I "../../../../../lib/windows/string/include" /I "..\..\..\..\intern\string" /I "../../../../../lib/windows/wintab/include" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /FR /YX /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\intern\ghost\debug\libghost.lib"
-# Begin Special Build Tool
-SOURCE="$(InputPath)"
-PostBuild_Desc=Copying GHOST files library (debug target) to lib tree.
-PostBuild_Cmds=ECHO Copying header files XCOPY /Y ..\..\*.h ..\..\..\..\..\lib\windows\ghost\include\ ECHO Copying lib XCOPY /Y ..\..\..\..\obj\windows\intern\ghost\debug\*.lib ..\..\..\..\..\lib\windows\ghost\lib\debug\*.a ECHO Done
-# End Special Build Tool
-
-!ENDIF
-
-# Begin Target
-
-# Name "ghost - Win32 Release"
-# Name "ghost - Win32 Debug"
-# Begin Group "Header Files"
-
-# PROP Default_Filter ""
-# Begin Group "intern"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\..\intern\GHOST_Buttons.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\GHOST_CallbackEventConsumer.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\GHOST_Debug.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\GHOST_DisplayManager.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\GHOST_DisplayManagerWin32.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\GHOST_Event.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\GHOST_EventButton.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\GHOST_EventCursor.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\GHOST_EventKey.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\GHOST_EventManager.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\GHOST_EventPrinter.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\GHOST_EventWheel.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\GHOST_EventWindow.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\GHOST_ModifierKeys.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\GHOST_System.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\GHOST_SystemWin32.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\GHOST_TimerManager.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\GHOST_TimerTask.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\GHOST_Window.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\GHOST_WindowManager.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\GHOST_WindowWin32.h
-# End Source File
-# End Group
-# Begin Group "extern"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE="..\..\GHOST_C-api.h"
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\GHOST_IEvent.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\GHOST_IEventConsumer.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\GHOST_ISystem.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\GHOST_ITimerTask.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\GHOST_IWindow.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\GHOST_Rect.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\GHOST_Types.h
-# End Source File
-# End Group
-# End Group
-# Begin Group "Source Files"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\..\intern\GHOST_Buttons.cpp
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\intern\GHOST_C-api.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\GHOST_CallbackEventConsumer.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\GHOST_DisplayManager.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\GHOST_DisplayManagerWin32.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\GHOST_EventManager.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\GHOST_EventPrinter.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\GHOST_ISystem.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\GHOST_ModifierKeys.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\GHOST_Rect.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\GHOST_System.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\GHOST_SystemWin32.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\GHOST_TimerManager.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\GHOST_Window.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\GHOST_WindowManager.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\GHOST_WindowWin32.cpp
-# End Source File
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="ghost" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=ghost - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "ghost.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "ghost.mak" CFG="ghost - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "ghost - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "ghost - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "ghost - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\..\obj\windows\intern\ghost"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\intern\ghost"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "../.." /I "../../../../../lib/windows/string/include" /I "..\..\..\..\intern\string" /I "../../../../../lib/windows/wintab/include" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\intern\ghost\libghost.lib"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copying GHOST files library (release target) to lib tree.
+PostBuild_Cmds=ECHO Copying header files XCOPY /Y ..\..\*.h ..\..\..\..\..\lib\windows\ghost\include\ ECHO Copying lib XCOPY /Y ..\..\..\..\obj\windows\intern\ghost\*.lib ..\..\..\..\..\lib\windows\ghost\lib\*.a ECHO Done
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "ghost - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\..\obj\windows\intern\ghost\debug"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\intern\ghost\debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "../.." /I "../../../../../lib/windows/string/include" /I "..\..\..\..\intern\string" /I "../../../../../lib/windows/wintab/include" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /FR /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\intern\ghost\debug\libghost.lib"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Copying GHOST files library (debug target) to lib tree.
+PostBuild_Cmds=ECHO Copying header files XCOPY /Y ..\..\*.h ..\..\..\..\..\lib\windows\ghost\include\ ECHO Copying lib XCOPY /Y ..\..\..\..\obj\windows\intern\ghost\debug\*.lib ..\..\..\..\..\lib\windows\ghost\lib\debug\*.a ECHO Done
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "ghost - Win32 Release"
+# Name "ghost - Win32 Debug"
+# Begin Group "Header Files"
+
+# PROP Default_Filter ""
+# Begin Group "intern"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\intern\GHOST_Buttons.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\GHOST_CallbackEventConsumer.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\GHOST_Debug.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\GHOST_DisplayManager.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\GHOST_DisplayManagerWin32.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\GHOST_Event.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\GHOST_EventButton.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\GHOST_EventCursor.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\GHOST_EventKey.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\GHOST_EventManager.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\GHOST_EventPrinter.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\GHOST_EventWheel.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\GHOST_EventWindow.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\GHOST_ModifierKeys.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\GHOST_System.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\GHOST_SystemWin32.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\GHOST_TimerManager.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\GHOST_TimerTask.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\GHOST_Window.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\GHOST_WindowManager.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\GHOST_WindowWin32.h
+# End Source File
+# End Group
+# Begin Group "extern"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE="..\..\GHOST_C-api.h"
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\GHOST_IEvent.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\GHOST_IEventConsumer.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\GHOST_ISystem.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\GHOST_ITimerTask.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\GHOST_IWindow.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\GHOST_Rect.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\GHOST_Types.h
+# End Source File
+# End Group
+# End Group
+# Begin Group "Source Files"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\intern\GHOST_Buttons.cpp
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\intern\GHOST_C-api.cpp"
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\GHOST_CallbackEventConsumer.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\GHOST_DisplayManager.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\GHOST_DisplayManagerWin32.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\GHOST_EventManager.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\GHOST_EventPrinter.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\GHOST_ISystem.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\GHOST_ModifierKeys.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\GHOST_Rect.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\GHOST_System.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\GHOST_SystemWin32.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\GHOST_TimerManager.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\GHOST_Window.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\GHOST_WindowManager.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\GHOST_WindowWin32.cpp
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/intern/ghost/make/msvc/ghost.dsw b/intern/ghost/make/msvc/ghost.dsw
index 807a6ec3157..a98e7644c11 100644
--- a/intern/ghost/make/msvc/ghost.dsw
+++ b/intern/ghost/make/msvc/ghost.dsw
@@ -1,29 +1,29 @@
-Microsoft Developer Studio Workspace File, Format Version 6.00
-# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
-
-###############################################################################
-
-Project: "ghost"=".\ghost.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Global:
-
-Package=<5>
-{{{
-}}}
-
-Package=<3>
-{{{
-}}}
-
-###############################################################################
-
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "ghost"=".\ghost.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/intern/ghost/test/make/msvc_6_0/gears.dsp b/intern/ghost/test/make/msvc_6_0/gears.dsp
index 3e809a6b604..e068231bf32 100644
--- a/intern/ghost/test/make/msvc_6_0/gears.dsp
+++ b/intern/ghost/test/make/msvc_6_0/gears.dsp
@@ -1,102 +1,102 @@
-# Microsoft Developer Studio Project File - Name="gears" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=gears - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "gears.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "gears.mak" CFG="gears - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "gears - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "gears - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "gears - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "../../../../../../obj/windows/intern/ghost/test/"
-# PROP Intermediate_Dir "../../../../../../obj/windows/intern/ghost/test/"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../.." /I "../../../../string" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 glu32.lib opengl32.lib user32.lib gdi32.lib /nologo /subsystem:console /machine:I386
-
-!ELSEIF "$(CFG)" == "gears - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "../../../../../../obj/windows/intern/ghost/test/debug"
-# PROP Intermediate_Dir "../../../../../../obj/windows/intern/ghost/test/debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "../../.." /I "../../../../string" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 glu32.lib opengl32.lib user32.lib gdi32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-
-!ENDIF
-
-# Begin Target
-
-# Name "gears - Win32 Release"
-# Name "gears - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\gears\GHOST_Test.cpp
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="gears" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=gears - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "gears.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "gears.mak" CFG="gears - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "gears - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "gears - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "gears - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "../../../../../../obj/windows/intern/ghost/test/"
+# PROP Intermediate_Dir "../../../../../../obj/windows/intern/ghost/test/"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../.." /I "../../../../string" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 glu32.lib opengl32.lib user32.lib gdi32.lib /nologo /subsystem:console /machine:I386
+
+!ELSEIF "$(CFG)" == "gears - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "../../../../../../obj/windows/intern/ghost/test/debug"
+# PROP Intermediate_Dir "../../../../../../obj/windows/intern/ghost/test/debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "../../.." /I "../../../../string" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 glu32.lib opengl32.lib user32.lib gdi32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+
+!ENDIF
+
+# Begin Target
+
+# Name "gears - Win32 Release"
+# Name "gears - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\gears\GHOST_Test.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/intern/ghost/test/make/msvc_6_0/gears_C.dsp b/intern/ghost/test/make/msvc_6_0/gears_C.dsp
index 5972d123268..df0ae0448fd 100644
--- a/intern/ghost/test/make/msvc_6_0/gears_C.dsp
+++ b/intern/ghost/test/make/msvc_6_0/gears_C.dsp
@@ -1,102 +1,102 @@
-# Microsoft Developer Studio Project File - Name="gears_C" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=gears_C - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "gears_C.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "gears_C.mak" CFG="gears_C - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "gears_C - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "gears_C - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "gears_C - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "../../../../../../obj/windows/intern/ghost/test/"
-# PROP Intermediate_Dir "../../../../../../obj/windows/intern/ghost/test/"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../.." /I "../../../../string" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 glu32.lib opengl32.lib user32.lib gdi32.lib /nologo /subsystem:console /machine:I386
-
-!ELSEIF "$(CFG)" == "gears_C - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "../../../../../../obj/windows/intern/ghost/test/debug"
-# PROP Intermediate_Dir "../../../../../../obj/windows/intern/ghost/test/debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "../../.." /I "../../../../string" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 glu32.lib opengl32.lib user32.lib gdi32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-
-!ENDIF
-
-# Begin Target
-
-# Name "gears_C - Win32 Release"
-# Name "gears_C - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE="..\..\gears\GHOST_C-Test.c"
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="gears_C" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=gears_C - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "gears_C.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "gears_C.mak" CFG="gears_C - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "gears_C - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "gears_C - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "gears_C - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "../../../../../../obj/windows/intern/ghost/test/"
+# PROP Intermediate_Dir "../../../../../../obj/windows/intern/ghost/test/"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../.." /I "../../../../string" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 glu32.lib opengl32.lib user32.lib gdi32.lib /nologo /subsystem:console /machine:I386
+
+!ELSEIF "$(CFG)" == "gears_C - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "../../../../../../obj/windows/intern/ghost/test/debug"
+# PROP Intermediate_Dir "../../../../../../obj/windows/intern/ghost/test/debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "../../.." /I "../../../../string" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 glu32.lib opengl32.lib user32.lib gdi32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+
+!ENDIF
+
+# Begin Target
+
+# Name "gears_C - Win32 Release"
+# Name "gears_C - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE="..\..\gears\GHOST_C-Test.c"
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/intern/ghost/test/make/msvc_6_0/ghost_test.dsw b/intern/ghost/test/make/msvc_6_0/ghost_test.dsw
index 03bf5eb5c9a..7a56a3b5ef1 100644
--- a/intern/ghost/test/make/msvc_6_0/ghost_test.dsw
+++ b/intern/ghost/test/make/msvc_6_0/ghost_test.dsw
@@ -1,77 +1,77 @@
-Microsoft Developer Studio Workspace File, Format Version 6.00
-# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
-
-###############################################################################
-
-Project: "gears"=.\gears.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name ghost
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name string
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "gears_C"=.\gears_C.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name ghost
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name string
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "ghost"=..\..\..\make\msvc\ghost.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "string"=..\..\..\..\string\make\msvc_6_0\string.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Global:
-
-Package=<5>
-{{{
-}}}
-
-Package=<3>
-{{{
-}}}
-
-###############################################################################
-
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "gears"=.\gears.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name ghost
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name string
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "gears_C"=.\gears_C.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name ghost
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name string
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "ghost"=..\..\..\make\msvc\ghost.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "string"=..\..\..\..\string\make\msvc_6_0\string.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/intern/ghost/test/multitest/Makefile b/intern/ghost/test/multitest/Makefile
index e67faf012d2..1ecbcd98e2b 100644
--- a/intern/ghost/test/multitest/Makefile
+++ b/intern/ghost/test/multitest/Makefile
@@ -41,7 +41,6 @@ CCFLAGS += $(LEVEL_1_CPP_WARNINGS)
CPPFLAGS += -I$(OPENGL_HEADERS)
CPPFLAGS += -I$(NAN_STRING)/include
-CPPFLAGS += -I$(NAN_BMFONT)/include
CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include
CPPFLAGS += -I../..
@@ -49,7 +48,6 @@ OCGGHOST = $(OCGDIR)/intern/ghost
LIBS = $(OCGGHOST)/$(DEBUG_DIR)libghost.a
SLIBS += $(LCGDIR)/string/lib/libstring.a
-SLIBS += $(LCGDIR)/bmfont/lib/libbmfont.a
SLIBS += $(LCGDIR)/guardedalloc/lib/libguardedalloc.a
all::
diff --git a/intern/guardedalloc/mmap_win.h b/intern/guardedalloc/mmap_win.h
index 443c3b6f4ce..855c46c08da 100644
--- a/intern/guardedalloc/mmap_win.h
+++ b/intern/guardedalloc/mmap_win.h
@@ -1,5 +1,5 @@
/**
- * $Id: $
+ * $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
*
diff --git a/intern/iksolver/make/msvc_6_0/iksolver.dsp b/intern/iksolver/make/msvc_6_0/iksolver.dsp
index c5e842bdd04..f40ef72a62a 100644
--- a/intern/iksolver/make/msvc_6_0/iksolver.dsp
+++ b/intern/iksolver/make/msvc_6_0/iksolver.dsp
@@ -1,260 +1,260 @@
-# Microsoft Developer Studio Project File - Name="iksolver" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=iksolver - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "iksolver.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "iksolver.mak" CFG="iksolver - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "iksolver - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "iksolver - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "iksolver - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\..\obj\windows\intern\iksolver"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\intern\iksolver"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /W3 /GX /O2 /Ob2 /I "..\..\..\..\intern\moto\include" /I "..\..\..\..\intern\memutil" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /FD /c
-# SUBTRACT CPP /YX
-# ADD BASE RSC /l 0x413 /d "NDEBUG"
-# ADD RSC /l 0x413 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\intern\iksolver\libiksolver.lib"
-# Begin Special Build Tool
-SOURCE="$(InputPath)"
-PostBuild_Cmds=ECHO Copying header files XCOPY /Y ..\..\extern\*.h ..\..\..\..\..\lib\windows\iksolver\include\ ECHO Copying lib XCOPY /Y ..\..\..\..\obj\windows\intern\iksolver\*.lib ..\..\..\..\..\lib\windows\iksolver\lib\*.a ECHO Done
-# End Special Build Tool
-
-!ELSEIF "$(CFG)" == "iksolver - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\..\obj\windows\intern\iksolver\debug"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\intern\iksolver\debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\..\..\intern\moto\include" /I "..\..\..\..\intern\memutil" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /FD /GZ /c
-# SUBTRACT CPP /YX
-# ADD BASE RSC /l 0x413 /d "_DEBUG"
-# ADD RSC /l 0x413 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\intern\iksolver\debug\libiksolver.lib"
-# Begin Special Build Tool
-SOURCE="$(InputPath)"
-PostBuild_Cmds=ECHO Copying header files XCOPY /Y ..\..\extern\*.h ..\..\..\..\..\lib\windows\iksolver\include\ ECHO Copying lib XCOPY /Y ..\..\..\..\obj\windows\intern\iksolver\debug\*.lib ..\..\..\..\..\lib\windows\iksolver\lib\debug\*.a ECHO Done
-# End Special Build Tool
-
-!ENDIF
-
-# Begin Target
-
-# Name "iksolver - Win32 Release"
-# Name "iksolver - Win32 Debug"
-# Begin Group "intern"
-
-# PROP Default_Filter ""
-# Begin Group "common"
-
-# PROP Default_Filter ""
-# End Group
-# Begin Group "TNT"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\..\intern\TNT\cholesky.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\TNT\cmat.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\TNT\fcscmat.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\TNT\fmat.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\TNT\fortran.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\TNT\fspvec.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\TNT\index.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\TNT\lapack.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\TNT\lu.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\TNT\qr.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\TNT\region1d.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\TNT\region2d.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\TNT\stopwatch.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\TNT\subscript.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\TNT\svd.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\TNT\tnt.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\TNT\tntmath.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\TNT\tntreqs.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\TNT\transv.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\TNT\triang.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\TNT\trisolve.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\TNT\vec.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\TNT\vecadaptor.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\TNT\version.h
-# End Source File
-# End Group
-# Begin Source File
-
-SOURCE=..\..\intern\IK_QJacobian.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\IK_QJacobian.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\IK_QJacobianSolver.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\IK_QJacobianSolver.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\IK_QSegment.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\IK_QSegment.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\IK_QSolver_Class.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\IK_QTask.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\IK_QTask.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\IK_Solver.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\MT_ExpMap.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\MT_ExpMap.h
-# End Source File
-# End Group
-# Begin Group "extern"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\..\extern\IK_solver.h
-# End Source File
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="iksolver" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=iksolver - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "iksolver.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "iksolver.mak" CFG="iksolver - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "iksolver - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "iksolver - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "iksolver - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\..\obj\windows\intern\iksolver"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\intern\iksolver"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /Ob2 /I "..\..\..\..\intern\moto\include" /I "..\..\..\..\intern\memutil" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /FD /c
+# SUBTRACT CPP /YX
+# ADD BASE RSC /l 0x413 /d "NDEBUG"
+# ADD RSC /l 0x413 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\intern\iksolver\libiksolver.lib"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Cmds=ECHO Copying header files XCOPY /Y ..\..\extern\*.h ..\..\..\..\..\lib\windows\iksolver\include\ ECHO Copying lib XCOPY /Y ..\..\..\..\obj\windows\intern\iksolver\*.lib ..\..\..\..\..\lib\windows\iksolver\lib\*.a ECHO Done
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "iksolver - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\..\obj\windows\intern\iksolver\debug"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\intern\iksolver\debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\..\..\intern\moto\include" /I "..\..\..\..\intern\memutil" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /FD /GZ /c
+# SUBTRACT CPP /YX
+# ADD BASE RSC /l 0x413 /d "_DEBUG"
+# ADD RSC /l 0x413 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\intern\iksolver\debug\libiksolver.lib"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Cmds=ECHO Copying header files XCOPY /Y ..\..\extern\*.h ..\..\..\..\..\lib\windows\iksolver\include\ ECHO Copying lib XCOPY /Y ..\..\..\..\obj\windows\intern\iksolver\debug\*.lib ..\..\..\..\..\lib\windows\iksolver\lib\debug\*.a ECHO Done
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "iksolver - Win32 Release"
+# Name "iksolver - Win32 Debug"
+# Begin Group "intern"
+
+# PROP Default_Filter ""
+# Begin Group "common"
+
+# PROP Default_Filter ""
+# End Group
+# Begin Group "TNT"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\intern\TNT\cholesky.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\TNT\cmat.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\TNT\fcscmat.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\TNT\fmat.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\TNT\fortran.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\TNT\fspvec.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\TNT\index.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\TNT\lapack.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\TNT\lu.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\TNT\qr.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\TNT\region1d.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\TNT\region2d.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\TNT\stopwatch.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\TNT\subscript.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\TNT\svd.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\TNT\tnt.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\TNT\tntmath.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\TNT\tntreqs.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\TNT\transv.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\TNT\triang.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\TNT\trisolve.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\TNT\vec.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\TNT\vecadaptor.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\TNT\version.h
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=..\..\intern\IK_QJacobian.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\IK_QJacobian.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\IK_QJacobianSolver.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\IK_QJacobianSolver.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\IK_QSegment.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\IK_QSegment.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\IK_QSolver_Class.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\IK_QTask.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\IK_QTask.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\IK_Solver.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\MT_ExpMap.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\MT_ExpMap.h
+# End Source File
+# End Group
+# Begin Group "extern"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\extern\IK_solver.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/intern/iksolver/make/msvc_6_0/iksolver.dsw b/intern/iksolver/make/msvc_6_0/iksolver.dsw
index 90a123d9ce8..9771088c42d 100644
--- a/intern/iksolver/make/msvc_6_0/iksolver.dsw
+++ b/intern/iksolver/make/msvc_6_0/iksolver.dsw
@@ -1,35 +1,35 @@
-Microsoft Developer Studio Workspace File, Format Version 6.00
-# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
-
-###############################################################################
-
-Project: "iksolver"=.\iksolver.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Global:
-
-Package=<5>
-{{{
-}}}
-
-Package=<3>
-{{{
-}}}
-
-###############################################################################
-
-
-
-
-
-
-
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "iksolver"=.\iksolver.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
+
+
+
+
+
+
diff --git a/intern/iksolver/test/ik_glut_test/make/msvc_6_0/ik_glut_test.dsp b/intern/iksolver/test/ik_glut_test/make/msvc_6_0/ik_glut_test.dsp
index 8688b2fcc2c..2de994d12e3 100644
--- a/intern/iksolver/test/ik_glut_test/make/msvc_6_0/ik_glut_test.dsp
+++ b/intern/iksolver/test/ik_glut_test/make/msvc_6_0/ik_glut_test.dsp
@@ -1,130 +1,130 @@
-# Microsoft Developer Studio Project File - Name="ik_glut_test" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=ik_glut_test - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "ik_glut_test.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "ik_glut_test.mak" CFG="ik_glut_test - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "ik_glut_test - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "ik_glut_test - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "ik_glut_test - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\..\extern" /I "..\..\..\..\..\..\lib\windows\glut-3.7\include" /I "..\..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\..\..\lib\windows\memutil\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD BASE RSC /l 0x413 /d "NDEBUG"
-# ADD RSC /l 0x413 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 iksolver_rmtd.lib libmoto.a /nologo /subsystem:console /machine:I386 /libpath:"..\..\..\..\lib\windows\release" /libpath:"..\..\..\..\..\..\lib\windows\glut-3.7\lib" /libpath:"..\..\..\..\..\..\lib\windows\moto\lib"
-
-!ELSEIF "$(CFG)" == "ik_glut_test - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
-# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\..\..\extern" /I "..\..\..\..\..\..\lib\windows\glut-3.7\include" /I "..\..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\..\..\lib\windows\memutil\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
-# ADD BASE RSC /l 0x413 /d "_DEBUG"
-# ADD RSC /l 0x413 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 iksolver_dmtd.lib libmoto.a /nologo /subsystem:console /debug /machine:I386 /nodefaultlib:"LIBCMTD.lib" /pdbtype:sept /libpath:"..\..\..\..\lib\windows\debug" /libpath:"..\..\..\..\..\..\lib\windows\glut-3.7\lib" /libpath:"..\..\..\..\..\..\lib\windows\moto\lib\debug"
-
-!ENDIF
-
-# Begin Target
-
-# Name "ik_glut_test - Win32 Release"
-# Name "ik_glut_test - Win32 Debug"
-# Begin Group "common"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\..\common\GlutDrawer.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\common\GlutDrawer.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\common\GlutKeyboardManager.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\common\GlutKeyboardManager.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\common\GlutMouseManager.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\common\GlutMouseManager.h
-# End Source File
-# End Group
-# Begin Source File
-
-SOURCE=..\..\intern\ChainDrawer.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\main.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\MyGlutKeyHandler.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\MyGlutMouseHandler.h
-# End Source File
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="ik_glut_test" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=ik_glut_test - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "ik_glut_test.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "ik_glut_test.mak" CFG="ik_glut_test - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "ik_glut_test - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "ik_glut_test - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "ik_glut_test - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\..\extern" /I "..\..\..\..\..\..\lib\windows\glut-3.7\include" /I "..\..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\..\..\lib\windows\memutil\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x413 /d "NDEBUG"
+# ADD RSC /l 0x413 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 iksolver_rmtd.lib libmoto.a /nologo /subsystem:console /machine:I386 /libpath:"..\..\..\..\lib\windows\release" /libpath:"..\..\..\..\..\..\lib\windows\glut-3.7\lib" /libpath:"..\..\..\..\..\..\lib\windows\moto\lib"
+
+!ELSEIF "$(CFG)" == "ik_glut_test - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\..\..\extern" /I "..\..\..\..\..\..\lib\windows\glut-3.7\include" /I "..\..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\..\..\lib\windows\memutil\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x413 /d "_DEBUG"
+# ADD RSC /l 0x413 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 iksolver_dmtd.lib libmoto.a /nologo /subsystem:console /debug /machine:I386 /nodefaultlib:"LIBCMTD.lib" /pdbtype:sept /libpath:"..\..\..\..\lib\windows\debug" /libpath:"..\..\..\..\..\..\lib\windows\glut-3.7\lib" /libpath:"..\..\..\..\..\..\lib\windows\moto\lib\debug"
+
+!ENDIF
+
+# Begin Target
+
+# Name "ik_glut_test - Win32 Release"
+# Name "ik_glut_test - Win32 Debug"
+# Begin Group "common"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\common\GlutDrawer.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\common\GlutDrawer.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\common\GlutKeyboardManager.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\common\GlutKeyboardManager.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\common\GlutMouseManager.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\common\GlutMouseManager.h
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=..\..\intern\ChainDrawer.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\main.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\MyGlutKeyHandler.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\MyGlutMouseHandler.h
+# End Source File
+# End Target
+# End Project
diff --git a/intern/iksolver/test/ik_glut_test/make/msvc_6_0/ik_glut_test.dsw b/intern/iksolver/test/ik_glut_test/make/msvc_6_0/ik_glut_test.dsw
index 09b7094137b..84915beaeb2 100644
--- a/intern/iksolver/test/ik_glut_test/make/msvc_6_0/ik_glut_test.dsw
+++ b/intern/iksolver/test/ik_glut_test/make/msvc_6_0/ik_glut_test.dsw
@@ -1,49 +1,49 @@
-Microsoft Developer Studio Workspace File, Format Version 6.00
-# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
-
-###############################################################################
-
-Project: "ik_glut_test"=.\ik_glut_test.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name iksolver
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "iksolver"=..\..\..\..\make\msvc_6_0\iksolver.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Global:
-
-Package=<5>
-{{{
-}}}
-
-Package=<3>
-{{{
-}}}
-
-###############################################################################
-
-
-
-
-
-
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "ik_glut_test"=.\ik_glut_test.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name iksolver
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "iksolver"=..\..\..\..\make\msvc_6_0\iksolver.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
+
+
+
+
+
diff --git a/intern/make/msvc_6_0/build_install_all.dsp b/intern/make/msvc_6_0/build_install_all.dsp
index 110c28ddeac..714c30fc5cf 100644
--- a/intern/make/msvc_6_0/build_install_all.dsp
+++ b/intern/make/msvc_6_0/build_install_all.dsp
@@ -1,68 +1,68 @@
-# Microsoft Developer Studio Project File - Name="Build_install_all" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Generic Project" 0x010a
-
-CFG=Build_install_all - Win32 Debug
-!MESSAGE This is not a valid makefile. To Build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "Build_install_all.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "Build_install_all.mak" CFG="Build_install_all - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "Build_install_all - Win32 Release" (based on "Win32 (x86) Generic Project")
-!MESSAGE "Build_install_all - Win32 Debug" (based on "Win32 (x86) Generic Project")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-MTL=midl.exe
-
-!IF "$(CFG)" == "Build_install_all - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Target_Dir ""
-
-!ELSEIF "$(CFG)" == "Build_install_all - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Target_Dir ""
-# Begin Special Build Tool
-SOURCE="$(InputPath)"
-PostBuild_Desc=Python freeze
-PostBuild_Cmds=ECHO Freezing Blender Python code ..\..\python\freeze\freeze.bat
-# End Special Build Tool
-
-!ENDIF
-
-# Begin Target
-
-# Name "Build_install_all - Win32 Release"
-# Name "Build_install_all - Win32 Debug"
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="Build_install_all" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Generic Project" 0x010a
+
+CFG=Build_install_all - Win32 Debug
+!MESSAGE This is not a valid makefile. To Build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "Build_install_all.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "Build_install_all.mak" CFG="Build_install_all - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "Build_install_all - Win32 Release" (based on "Win32 (x86) Generic Project")
+!MESSAGE "Build_install_all - Win32 Debug" (based on "Win32 (x86) Generic Project")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+MTL=midl.exe
+
+!IF "$(CFG)" == "Build_install_all - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Target_Dir ""
+
+!ELSEIF "$(CFG)" == "Build_install_all - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Target_Dir ""
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Python freeze
+PostBuild_Cmds=ECHO Freezing Blender Python code ..\..\python\freeze\freeze.bat
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "Build_install_all - Win32 Release"
+# Name "Build_install_all - Win32 Debug"
+# End Target
+# End Project
diff --git a/intern/make/msvc_6_0/intern.dsw b/intern/make/msvc_6_0/intern.dsw
index 2818636c1c6..1f37f3c618a 100644
--- a/intern/make/msvc_6_0/intern.dsw
+++ b/intern/make/msvc_6_0/intern.dsw
@@ -1,302 +1,302 @@
-Microsoft Developer Studio Workspace File, Format Version 6.00
-# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
-
-###############################################################################
-
-Project: "Build_install_all"=.\build_install_all.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name OpenNL
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name bmfont
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name bsplib
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name container
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name decimation
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name DummySoundSystem
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name ghost
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name guardedalloc
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name iksolver
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name memutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name MoTo
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name SoundSystem
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name string
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name elbeem
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name boolop
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name OpenALSoundSystem
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "DummySoundSystem"=..\..\SoundSystem\make\msvc_6_0\dummy\DummySoundSystem.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "MoTo"=..\..\moto\make\msvc_6_0\MoTo.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "OpenALSoundSystem"=..\..\SoundSystem\make\msvc_6_0\openal\OpenALSoundSystem.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "OpenNL"=..\..\opennl\make\msvc_6_0\OpenNL.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "SoundSystem"=..\..\SoundSystem\make\msvc_6_0\SoundSystem.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "bmfont"=..\..\bmfont\make\msvc_6_0\bmfont.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "boolop"=..\..\boolop\make\msvc_6_0\boolop.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "bsplib"=..\..\bsp\make\msvc6_0\bsplib.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name container
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name memutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name MoTo
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "container"=..\..\container\make\msvc_6_0\container.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "csg"=..\..\csg\make\msvc60\csg.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "decimation"=..\..\decimation\make\msvc_6_0\decimation.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name memutil
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name MoTo
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name container
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "elbeem"=..\..\elbeem\make\msvc_6_0\elbeem.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "ghost"=..\..\ghost\make\msvc\ghost.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name string
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "guardedalloc"=..\..\guardedalloc\make\msvc_6_0\guardedalloc.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "iksolver"=..\..\iksolver\make\msvc_6_0\iksolver.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "memutil"=..\..\memutil\make\msvc_60\memutil.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "string"=..\..\string\make\msvc_6_0\string.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Global:
-
-Package=<5>
-{{{
-}}}
-
-Package=<3>
-{{{
-}}}
-
-###############################################################################
-
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "Build_install_all"=.\build_install_all.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name OpenNL
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name bmfont
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name bsplib
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name container
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name decimation
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name DummySoundSystem
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name ghost
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name guardedalloc
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name iksolver
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name memutil
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name MoTo
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name SoundSystem
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name string
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name elbeem
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name boolop
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name OpenALSoundSystem
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "DummySoundSystem"=..\..\SoundSystem\make\msvc_6_0\dummy\DummySoundSystem.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "MoTo"=..\..\moto\make\msvc_6_0\MoTo.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "OpenALSoundSystem"=..\..\SoundSystem\make\msvc_6_0\openal\OpenALSoundSystem.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "OpenNL"=..\..\opennl\make\msvc_6_0\OpenNL.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "SoundSystem"=..\..\SoundSystem\make\msvc_6_0\SoundSystem.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "bmfont"=..\..\bmfont\make\msvc_6_0\bmfont.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "boolop"=..\..\boolop\make\msvc_6_0\boolop.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "bsplib"=..\..\bsp\make\msvc6_0\bsplib.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name container
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name memutil
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name MoTo
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "container"=..\..\container\make\msvc_6_0\container.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "csg"=..\..\csg\make\msvc60\csg.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "decimation"=..\..\decimation\make\msvc_6_0\decimation.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name memutil
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name MoTo
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name container
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "elbeem"=..\..\elbeem\make\msvc_6_0\elbeem.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "ghost"=..\..\ghost\make\msvc\ghost.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name string
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "guardedalloc"=..\..\guardedalloc\make\msvc_6_0\guardedalloc.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "iksolver"=..\..\iksolver\make\msvc_6_0\iksolver.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "memutil"=..\..\memutil\make\msvc_60\memutil.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "string"=..\..\string\make\msvc_6_0\string.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/intern/memutil/make/msvc_60/memutil.dsp b/intern/memutil/make/msvc_60/memutil.dsp
index 62b7efba9d8..b7e7904e9bf 100644
--- a/intern/memutil/make/msvc_60/memutil.dsp
+++ b/intern/memutil/make/msvc_60/memutil.dsp
@@ -1,150 +1,150 @@
-# Microsoft Developer Studio Project File - Name="memutil" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=memutil - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "memutil.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "memutil.mak" CFG="memutil - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "memutil - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "memutil - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "memutil - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\..\obj\windows\intern\memutil\"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\intern\memutil\"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /Ob2 /I "../../" /I "../../../" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-# Begin Special Build Tool
-SOURCE="$(InputPath)"
-PostBuild_Cmds=ECHO Copying header files XCOPY /Y ..\..\*.h ..\..\..\..\..\lib\windows\memutil\include\ ECHO Copying lib XCOPY /Y ..\..\..\..\obj\windows\intern\memutil\*.lib ..\..\..\..\..\lib\windows\memutil\lib\*.a ECHO Done
-# End Special Build Tool
-
-!ELSEIF "$(CFG)" == "memutil - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\..\obj\windows\intern\memutil\debug"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\intern\memutil\debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../" /I "../../../" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-# Begin Special Build Tool
-SOURCE="$(InputPath)"
-PostBuild_Cmds=ECHO Copying header files XCOPY /Y ..\..\*.h ..\..\..\..\..\lib\windows\memutil\include\ ECHO Copying lib XCOPY /Y ..\..\..\..\obj\windows\intern\memutil\debug\*.lib ..\..\..\..\..\lib\windows\memutil\lib\debug\*.a ECHO Copying Debug info. XCOPY /Y ..\..\..\..\obj\windows\intern\memutil\debug\vc60.* ..\..\..\..\..\lib\windows\memutil\lib\debug\ ECHO Done
-# End Special Build Tool
-
-!ENDIF
-
-# Begin Target
-
-# Name "memutil - Win32 Release"
-# Name "memutil - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\MEM_Allocator.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\MEM_CacheLimiter.h
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\intern\MEM_CacheLimiterC-Api.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\guardedalloc\MEM_guardedalloc.h
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\intern\MEM_RefCountedC-Api.cpp"
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Group "intern"
-
-# PROP Default_Filter ""
-# End Group
-# Begin Group "extern"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\..\MEM_NonCopyable.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\MEM_RefCounted.h
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\MEM_RefCountedC-Api.h"
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\MEM_RefCountPtr.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\MEM_SmartPtr.h
-# End Source File
-# End Group
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="memutil" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=memutil - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "memutil.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "memutil.mak" CFG="memutil - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "memutil - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "memutil - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "memutil - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\..\obj\windows\intern\memutil\"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\intern\memutil\"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /Ob2 /I "../../" /I "../../../" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Cmds=ECHO Copying header files XCOPY /Y ..\..\*.h ..\..\..\..\..\lib\windows\memutil\include\ ECHO Copying lib XCOPY /Y ..\..\..\..\obj\windows\intern\memutil\*.lib ..\..\..\..\..\lib\windows\memutil\lib\*.a ECHO Done
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "memutil - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\..\obj\windows\intern\memutil\debug"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\intern\memutil\debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../" /I "../../../" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Cmds=ECHO Copying header files XCOPY /Y ..\..\*.h ..\..\..\..\..\lib\windows\memutil\include\ ECHO Copying lib XCOPY /Y ..\..\..\..\obj\windows\intern\memutil\debug\*.lib ..\..\..\..\..\lib\windows\memutil\lib\debug\*.a ECHO Copying Debug info. XCOPY /Y ..\..\..\..\obj\windows\intern\memutil\debug\vc60.* ..\..\..\..\..\lib\windows\memutil\lib\debug\ ECHO Done
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "memutil - Win32 Release"
+# Name "memutil - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\MEM_Allocator.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\MEM_CacheLimiter.h
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\intern\MEM_CacheLimiterC-Api.cpp"
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\guardedalloc\MEM_guardedalloc.h
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\intern\MEM_RefCountedC-Api.cpp"
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Group "intern"
+
+# PROP Default_Filter ""
+# End Group
+# Begin Group "extern"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\MEM_NonCopyable.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\MEM_RefCounted.h
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\MEM_RefCountedC-Api.h"
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\MEM_RefCountPtr.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\MEM_SmartPtr.h
+# End Source File
+# End Group
+# End Group
+# End Target
+# End Project
diff --git a/intern/memutil/make/msvc_60/memutil.dsw b/intern/memutil/make/msvc_60/memutil.dsw
index bba4cbcdafd..3c19a94c701 100644
--- a/intern/memutil/make/msvc_60/memutil.dsw
+++ b/intern/memutil/make/msvc_60/memutil.dsw
@@ -1,29 +1,29 @@
-Microsoft Developer Studio Workspace File, Format Version 6.00
-# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
-
-###############################################################################
-
-Project: "memutil"=".\memutil.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Global:
-
-Package=<5>
-{{{
-}}}
-
-Package=<3>
-{{{
-}}}
-
-###############################################################################
-
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "memutil"=".\memutil.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/intern/moto/include/MT_Quaternion.inl b/intern/moto/include/MT_Quaternion.inl
index ecfd6699f67..ec747c453d3 100644
--- a/intern/moto/include/MT_Quaternion.inl
+++ b/intern/moto/include/MT_Quaternion.inl
@@ -74,19 +74,27 @@ GEN_INLINE MT_Scalar MT_Quaternion::angle(const MT_Quaternion& q) const
GEN_INLINE MT_Quaternion MT_Quaternion::slerp(const MT_Quaternion& q, const MT_Scalar& t) const
{
- MT_Scalar theta = angle(q);
-
- if (!MT_fuzzyZero(theta))
+ MT_Scalar d, s0, s1;
+ MT_Scalar s = dot(q);
+ bool neg = (s < 0.0);
+
+ if (neg)
+ s = -s;
+ if ((1.0 - s) > 0.0001)
{
- MT_Scalar d = MT_Scalar(1.0) / sin(theta);
- MT_Scalar s0 = sin((MT_Scalar(1.0) - t) * theta);
- MT_Scalar s1 = sin(t * theta);
-
- return d*(*this * s0 + q * s1);
+ MT_Scalar theta = acos(s);
+ d = MT_Scalar(1.0) / sin(theta);
+ s0 = sin((MT_Scalar(1.0) - t) * theta);
+ s1 = sin(t * theta);
}
else
{
- return *this;
+ d = MT_Scalar(1.0);
+ s0 = MT_Scalar(1.0) - t;
+ s1 = t;
}
+ if (neg)
+ s1 = -s1;
+ return d*(*this * s0 + q * s1);
}
diff --git a/intern/moto/make/msvc_6_0/MoTo.dsp b/intern/moto/make/msvc_6_0/MoTo.dsp
index 23224fc7fa8..541c4aa4774 100644
--- a/intern/moto/make/msvc_6_0/MoTo.dsp
+++ b/intern/moto/make/msvc_6_0/MoTo.dsp
@@ -1,379 +1,379 @@
-# Microsoft Developer Studio Project File - Name="MoTo" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=MoTo - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "MoTo.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "MoTo.mak" CFG="MoTo - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "MoTo - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "MoTo - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "MoTo - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\..\obj\windows\intern\moto\"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\intern\moto\"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MT /W4 /GX /O2 /Ob2 /I "..\..\include\\" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /FD /c
-# SUBTRACT CPP /YX
-# ADD BASE RSC /l 0x413 /d "NDEBUG"
-# ADD RSC /l 0x413 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\intern\moto\libmoto.lib"
-# Begin Special Build Tool
-SOURCE="$(InputPath)"
-PostBuild_Cmds=ECHO Copying header files XCOPY /Y ..\..\include\*.h ..\..\..\..\..\lib\windows\moto\include\ ECHO Copying lib XCOPY /Y ..\..\..\..\obj\windows\intern\moto\*.lib ..\..\..\..\..\lib\windows\moto\lib\*.a ECHO Done
-# End Special Build Tool
-
-!ELSEIF "$(CFG)" == "MoTo - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\..\obj\windows\intern\moto\debug"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\intern\moto\debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\..\include\\" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /FD /GZ /c
-# SUBTRACT CPP /YX
-# ADD BASE RSC /l 0x413 /d "_DEBUG"
-# ADD RSC /l 0x413 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\intern\moto\debug\libmoto.lib"
-# Begin Special Build Tool
-SOURCE="$(InputPath)"
-PostBuild_Cmds=ECHO Copying header files XCOPY /Y ..\..\include\*.h ..\..\..\..\..\lib\windows\moto\include\ ECHO Copying lib XCOPY /Y ..\..\..\..\obj\windows\intern\moto\debug\*.lib ..\..\..\..\..\lib\windows\moto\lib\debug\*.a ECHO Copying Debug info. XCOPY /Y ..\..\..\..\obj\windows\intern\moto\debug\vc60.* ..\..\..\..\..\lib\windows\moto\lib\debug\ ECHO Done
-# End Special Build Tool
-
-!ENDIF
-
-# Begin Target
-
-# Name "MoTo - Win32 Release"
-# Name "MoTo - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\intern\MT_CmMatrix4x4.cpp
-
-!IF "$(CFG)" == "MoTo - Win32 Release"
-
-# ADD CPP /W3 /I "../../include"
-
-!ELSEIF "$(CFG)" == "MoTo - Win32 Debug"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\MT_Matrix3x3.cpp
-
-!IF "$(CFG)" == "MoTo - Win32 Release"
-
-# ADD CPP /W3 /I "../../include"
-
-!ELSEIF "$(CFG)" == "MoTo - Win32 Debug"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\MT_Matrix4x4.cpp
-
-!IF "$(CFG)" == "MoTo - Win32 Release"
-
-# ADD CPP /W3 /I "../../include"
-
-!ELSEIF "$(CFG)" == "MoTo - Win32 Debug"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\MT_Plane3.cpp
-
-!IF "$(CFG)" == "MoTo - Win32 Release"
-
-# ADD CPP /W3
-
-!ELSEIF "$(CFG)" == "MoTo - Win32 Debug"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\MT_Point3.cpp
-
-!IF "$(CFG)" == "MoTo - Win32 Release"
-
-# ADD CPP /W3 /I "../../include"
-
-!ELSEIF "$(CFG)" == "MoTo - Win32 Debug"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\MT_Quaternion.cpp
-
-!IF "$(CFG)" == "MoTo - Win32 Release"
-
-# ADD CPP /W3 /I "../../include"
-
-!ELSEIF "$(CFG)" == "MoTo - Win32 Debug"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\MT_random.cpp
-
-!IF "$(CFG)" == "MoTo - Win32 Release"
-
-# ADD CPP /W3 /I "../../include"
-
-!ELSEIF "$(CFG)" == "MoTo - Win32 Debug"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\MT_Transform.cpp
-
-!IF "$(CFG)" == "MoTo - Win32 Release"
-
-# ADD CPP /W3 /I "../../include"
-
-!ELSEIF "$(CFG)" == "MoTo - Win32 Debug"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\MT_Vector2.cpp
-
-!IF "$(CFG)" == "MoTo - Win32 Release"
-
-# ADD CPP /W3 /I "../../include"
-
-!ELSEIF "$(CFG)" == "MoTo - Win32 Debug"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\MT_Vector3.cpp
-
-!IF "$(CFG)" == "MoTo - Win32 Release"
-
-# ADD CPP /W3 /I "../../include"
-
-!ELSEIF "$(CFG)" == "MoTo - Win32 Debug"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\MT_Vector4.cpp
-
-!IF "$(CFG)" == "MoTo - Win32 Release"
-
-# ADD CPP /W3 /I "../../include"
-
-!ELSEIF "$(CFG)" == "MoTo - Win32 Debug"
-
-!ENDIF
-
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Group "inlines"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\..\include\MT_Matrix3x3.inl
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\MT_Matrix4x4.inl
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\MT_Plane3.inl
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\MT_Point2.inl
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\MT_Point3.inl
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\MT_Quaternion.inl
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\MT_Vector2.inl
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\MT_Vector3.inl
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\MT_Vector4.inl
-# End Source File
-# End Group
-# Begin Source File
-
-SOURCE=..\..\include\GEN_List.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\GEN_Map.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\MT_assert.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\MT_CmMatrix4x4.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\MT_Matrix3x3.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\MT_Matrix4x4.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\MT_MinMax.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\MT_Optimize.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\MT_Plane3.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\MT_Point2.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\MT_Point3.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\MT_Quaternion.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\MT_random.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\MT_Scalar.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\MT_Stream.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\MT_Transform.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\MT_Tuple2.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\MT_Tuple3.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\MT_Tuple4.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\MT_Vector2.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\MT_Vector3.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\MT_Vector4.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\include\NM_Scalar.h
-# End Source File
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="MoTo" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=MoTo - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "MoTo.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "MoTo.mak" CFG="MoTo - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "MoTo - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "MoTo - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "MoTo - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\..\obj\windows\intern\moto\"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\intern\moto\"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MT /W4 /GX /O2 /Ob2 /I "..\..\include\\" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /FD /c
+# SUBTRACT CPP /YX
+# ADD BASE RSC /l 0x413 /d "NDEBUG"
+# ADD RSC /l 0x413 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\intern\moto\libmoto.lib"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Cmds=ECHO Copying header files XCOPY /Y ..\..\include\*.h ..\..\..\..\..\lib\windows\moto\include\ ECHO Copying lib XCOPY /Y ..\..\..\..\obj\windows\intern\moto\*.lib ..\..\..\..\..\lib\windows\moto\lib\*.a ECHO Done
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "MoTo - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\..\obj\windows\intern\moto\debug"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\intern\moto\debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\..\include\\" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /FD /GZ /c
+# SUBTRACT CPP /YX
+# ADD BASE RSC /l 0x413 /d "_DEBUG"
+# ADD RSC /l 0x413 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\intern\moto\debug\libmoto.lib"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Cmds=ECHO Copying header files XCOPY /Y ..\..\include\*.h ..\..\..\..\..\lib\windows\moto\include\ ECHO Copying lib XCOPY /Y ..\..\..\..\obj\windows\intern\moto\debug\*.lib ..\..\..\..\..\lib\windows\moto\lib\debug\*.a ECHO Copying Debug info. XCOPY /Y ..\..\..\..\obj\windows\intern\moto\debug\vc60.* ..\..\..\..\..\lib\windows\moto\lib\debug\ ECHO Done
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "MoTo - Win32 Release"
+# Name "MoTo - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\intern\MT_CmMatrix4x4.cpp
+
+!IF "$(CFG)" == "MoTo - Win32 Release"
+
+# ADD CPP /W3 /I "../../include"
+
+!ELSEIF "$(CFG)" == "MoTo - Win32 Debug"
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\MT_Matrix3x3.cpp
+
+!IF "$(CFG)" == "MoTo - Win32 Release"
+
+# ADD CPP /W3 /I "../../include"
+
+!ELSEIF "$(CFG)" == "MoTo - Win32 Debug"
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\MT_Matrix4x4.cpp
+
+!IF "$(CFG)" == "MoTo - Win32 Release"
+
+# ADD CPP /W3 /I "../../include"
+
+!ELSEIF "$(CFG)" == "MoTo - Win32 Debug"
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\MT_Plane3.cpp
+
+!IF "$(CFG)" == "MoTo - Win32 Release"
+
+# ADD CPP /W3
+
+!ELSEIF "$(CFG)" == "MoTo - Win32 Debug"
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\MT_Point3.cpp
+
+!IF "$(CFG)" == "MoTo - Win32 Release"
+
+# ADD CPP /W3 /I "../../include"
+
+!ELSEIF "$(CFG)" == "MoTo - Win32 Debug"
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\MT_Quaternion.cpp
+
+!IF "$(CFG)" == "MoTo - Win32 Release"
+
+# ADD CPP /W3 /I "../../include"
+
+!ELSEIF "$(CFG)" == "MoTo - Win32 Debug"
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\MT_random.cpp
+
+!IF "$(CFG)" == "MoTo - Win32 Release"
+
+# ADD CPP /W3 /I "../../include"
+
+!ELSEIF "$(CFG)" == "MoTo - Win32 Debug"
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\MT_Transform.cpp
+
+!IF "$(CFG)" == "MoTo - Win32 Release"
+
+# ADD CPP /W3 /I "../../include"
+
+!ELSEIF "$(CFG)" == "MoTo - Win32 Debug"
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\MT_Vector2.cpp
+
+!IF "$(CFG)" == "MoTo - Win32 Release"
+
+# ADD CPP /W3 /I "../../include"
+
+!ELSEIF "$(CFG)" == "MoTo - Win32 Debug"
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\MT_Vector3.cpp
+
+!IF "$(CFG)" == "MoTo - Win32 Release"
+
+# ADD CPP /W3 /I "../../include"
+
+!ELSEIF "$(CFG)" == "MoTo - Win32 Debug"
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\MT_Vector4.cpp
+
+!IF "$(CFG)" == "MoTo - Win32 Release"
+
+# ADD CPP /W3 /I "../../include"
+
+!ELSEIF "$(CFG)" == "MoTo - Win32 Debug"
+
+!ENDIF
+
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Group "inlines"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\include\MT_Matrix3x3.inl
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\MT_Matrix4x4.inl
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\MT_Plane3.inl
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\MT_Point2.inl
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\MT_Point3.inl
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\MT_Quaternion.inl
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\MT_Vector2.inl
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\MT_Vector3.inl
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\MT_Vector4.inl
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=..\..\include\GEN_List.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\GEN_Map.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\MT_assert.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\MT_CmMatrix4x4.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\MT_Matrix3x3.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\MT_Matrix4x4.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\MT_MinMax.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\MT_Optimize.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\MT_Plane3.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\MT_Point2.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\MT_Point3.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\MT_Quaternion.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\MT_random.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\MT_Scalar.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\MT_Stream.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\MT_Transform.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\MT_Tuple2.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\MT_Tuple3.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\MT_Tuple4.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\MT_Vector2.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\MT_Vector3.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\MT_Vector4.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\include\NM_Scalar.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/intern/moto/make/msvc_6_0/MoTo.dsw b/intern/moto/make/msvc_6_0/MoTo.dsw
index bc76539dd6c..e45520d5c72 100644
--- a/intern/moto/make/msvc_6_0/MoTo.dsw
+++ b/intern/moto/make/msvc_6_0/MoTo.dsw
@@ -1,29 +1,29 @@
-Microsoft Developer Studio Workspace File, Format Version 6.00
-# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
-
-###############################################################################
-
-Project: "MoTo"=.\MoTo.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Global:
-
-Package=<5>
-{{{
-}}}
-
-Package=<3>
-{{{
-}}}
-
-###############################################################################
-
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "MoTo"=.\MoTo.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/intern/opennl/make/msvc_6_0/OpenNL.dsp b/intern/opennl/make/msvc_6_0/OpenNL.dsp
index bce93059e50..aaf8f0298c1 100644
--- a/intern/opennl/make/msvc_6_0/OpenNL.dsp
+++ b/intern/opennl/make/msvc_6_0/OpenNL.dsp
@@ -1,252 +1,252 @@
-# Microsoft Developer Studio Project File - Name="OpenNL" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=OpenNL - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "OpenNL.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "OpenNL.mak" CFG="OpenNL - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "OpenNL - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "OpenNL - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "OpenNL - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "../../../../obj/windows/intern/opennl"
-# PROP Intermediate_Dir "../../../../obj/windows/intern/opennl/imf"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /W3 /GX /O2 /I "../../extern" /I "../../superlu" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD BASE RSC /l 0x407 /d "NDEBUG"
-# ADD RSC /l 0x407 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"../../../../obj/windows/intern/opennl\blender_ONL.lib"
-# Begin Special Build Tool
-SOURCE="$(InputPath)"
-PostBuild_Cmds=ECHO copy header files XCOPY /Y ..\..\extern\*.h ..\..\..\..\..\lib\windows\opennl\include\*.h ECHO copy library XCOPY /Y ..\..\..\..\obj\windows\intern\openNL\*.lib ..\..\..\..\..\lib\windows\openNL\*.lib
-# End Special Build Tool
-
-!ELSEIF "$(CFG)" == "OpenNL - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "../../../../obj/windows/intern/opennl/Debug/"
-# PROP Intermediate_Dir "../../../../obj/windows/intern/opennl/imf/Debug"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../extern" /I "../../superlu" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD BASE RSC /l 0x407 /d "_DEBUG"
-# ADD RSC /l 0x407 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"../../../../obj/windows/intern/opennl/Debug/blender_ONL.lib"
-# Begin Special Build Tool
-SOURCE="$(InputPath)"
-PostBuild_Cmds=ECHO copy header files XCOPY /Y ..\..\extern\*.h ..\..\..\..\..\lib\windows\opennl\include\*.h ECHO copy library XCOPY /Y ..\..\..\..\obj\windows\intern\openNL\debug\*.lib ..\..\..\..\..\lib\windows\openNL\debug\*.lib
-# End Special Build Tool
-
-!ENDIF
-
-# Begin Target
-
-# Name "OpenNL - Win32 Release"
-# Name "OpenNL - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\superlu\colamd.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\superlu\get_perm_c.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\superlu\heap_relax_snode.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\superlu\lsame.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\superlu\memory.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\superlu\mmd.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\intern\opennl.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\superlu\relax_snode.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\superlu\scolumn_bmod.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\superlu\scolumn_dfs.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\superlu\scopy_to_ucol.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\superlu\sgssv.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\superlu\sgstrf.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\superlu\sgstrs.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\superlu\smemory.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\superlu\smyblas2.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\superlu\sp_coletree.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\superlu\sp_ienv.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\superlu\sp_preorder.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\superlu\spanel_bmod.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\superlu\spanel_dfs.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\superlu\spivotL.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\superlu\spruneL.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\superlu\ssnode_bmod.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\superlu\ssnode_dfs.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\superlu\ssp_blas2.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\superlu\ssp_blas3.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\superlu\strsv.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\superlu\superlu_timer.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\superlu\sutil.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\superlu\util.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\superlu\xerbla.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\superlu\Cnames.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\superlu\colamd.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\extern\ONL_opennl.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\superlu\ssp_defs.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\superlu\supermatrix.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\superlu\util.h
-# End Source File
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="OpenNL" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=OpenNL - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "OpenNL.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "OpenNL.mak" CFG="OpenNL - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "OpenNL - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "OpenNL - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "OpenNL - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "../../../../obj/windows/intern/opennl"
+# PROP Intermediate_Dir "../../../../obj/windows/intern/opennl/imf"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../extern" /I "../../superlu" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD BASE RSC /l 0x407 /d "NDEBUG"
+# ADD RSC /l 0x407 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"../../../../obj/windows/intern/opennl\blender_ONL.lib"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Cmds=ECHO copy header files XCOPY /Y ..\..\extern\*.h ..\..\..\..\..\lib\windows\opennl\include\*.h ECHO copy library XCOPY /Y ..\..\..\..\obj\windows\intern\openNL\*.lib ..\..\..\..\..\lib\windows\openNL\*.lib
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "OpenNL - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "../../../../obj/windows/intern/opennl/Debug/"
+# PROP Intermediate_Dir "../../../../obj/windows/intern/opennl/imf/Debug"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../extern" /I "../../superlu" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x407 /d "_DEBUG"
+# ADD RSC /l 0x407 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"../../../../obj/windows/intern/opennl/Debug/blender_ONL.lib"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Cmds=ECHO copy header files XCOPY /Y ..\..\extern\*.h ..\..\..\..\..\lib\windows\opennl\include\*.h ECHO copy library XCOPY /Y ..\..\..\..\obj\windows\intern\openNL\debug\*.lib ..\..\..\..\..\lib\windows\openNL\debug\*.lib
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "OpenNL - Win32 Release"
+# Name "OpenNL - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\superlu\colamd.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\superlu\get_perm_c.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\superlu\heap_relax_snode.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\superlu\lsame.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\superlu\memory.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\superlu\mmd.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\intern\opennl.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\superlu\relax_snode.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\superlu\scolumn_bmod.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\superlu\scolumn_dfs.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\superlu\scopy_to_ucol.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\superlu\sgssv.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\superlu\sgstrf.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\superlu\sgstrs.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\superlu\smemory.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\superlu\smyblas2.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\superlu\sp_coletree.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\superlu\sp_ienv.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\superlu\sp_preorder.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\superlu\spanel_bmod.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\superlu\spanel_dfs.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\superlu\spivotL.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\superlu\spruneL.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\superlu\ssnode_bmod.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\superlu\ssnode_dfs.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\superlu\ssp_blas2.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\superlu\ssp_blas3.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\superlu\strsv.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\superlu\superlu_timer.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\superlu\sutil.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\superlu\util.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\superlu\xerbla.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\superlu\Cnames.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\superlu\colamd.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\extern\ONL_opennl.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\superlu\ssp_defs.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\superlu\supermatrix.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\superlu\util.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/intern/opennl/make/msvc_6_0/OpenNL.dsw b/intern/opennl/make/msvc_6_0/OpenNL.dsw
index 407aeb006fd..5b7c9138c97 100644
--- a/intern/opennl/make/msvc_6_0/OpenNL.dsw
+++ b/intern/opennl/make/msvc_6_0/OpenNL.dsw
@@ -1,29 +1,29 @@
-Microsoft Developer Studio Workspace File, Format Version 6.00
-# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
-
-###############################################################################
-
-Project: "OpenNL"=.\OpenNL.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Global:
-
-Package=<5>
-{{{
-}}}
-
-Package=<3>
-{{{
-}}}
-
-###############################################################################
-
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "OpenNL"=.\OpenNL.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/intern/string/make/msvc_6_0/string.dsp b/intern/string/make/msvc_6_0/string.dsp
index c6ac70e193a..38250e44170 100644
--- a/intern/string/make/msvc_6_0/string.dsp
+++ b/intern/string/make/msvc_6_0/string.dsp
@@ -1,122 +1,122 @@
-# Microsoft Developer Studio Project File - Name="string" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=string - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "string.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "string.mak" CFG="string - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "string - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "string - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "string - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\..\obj\windows\intern\string"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\intern\string"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "../.." /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\intern\string\libstring.lib"
-# Begin Special Build Tool
-SOURCE="$(InputPath)"
-PostBuild_Cmds=ECHO Copying header files XCOPY /Y ..\..\*.h ..\..\..\..\..\lib\windows\string\include\ ECHO Copying lib XCOPY /Y ..\..\..\..\obj\windows\intern\string\*.lib ..\..\..\..\..\lib\windows\string\lib\*.a ECHO Done
-# End Special Build Tool
-
-!ELSEIF "$(CFG)" == "string - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "../../../../obj/windows/intern/string/debug"
-# PROP Intermediate_Dir "../../../../obj/windows/intern/string/debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "../.." /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"../../../../obj/windows/intern/string/debug\libstring.lib"
-# Begin Special Build Tool
-SOURCE="$(InputPath)"
-PostBuild_Cmds=ECHO Copying header files XCOPY /Y ..\..\*.h ..\..\..\..\..\lib\windows\string\include\ ECHO Copying lib XCOPY /Y ..\..\..\..\obj\windows\intern\string\debug\*.lib ..\..\..\..\..\lib\windows\string\lib\debug\*.a ECHO Done
-# End Special Build Tool
-
-!ENDIF
-
-# Begin Target
-
-# Name "string - Win32 Release"
-# Name "string - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\intern\STR_String.cpp
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Group "intern"
-
-# PROP Default_Filter ""
-# End Group
-# Begin Group "extern"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\..\STR_HashedString.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\STR_String.h
-# End Source File
-# End Group
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="string" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=string - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "string.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "string.mak" CFG="string - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "string - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "string - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "string - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\..\obj\windows\intern\string"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\intern\string"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "../.." /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\intern\string\libstring.lib"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Cmds=ECHO Copying header files XCOPY /Y ..\..\*.h ..\..\..\..\..\lib\windows\string\include\ ECHO Copying lib XCOPY /Y ..\..\..\..\obj\windows\intern\string\*.lib ..\..\..\..\..\lib\windows\string\lib\*.a ECHO Done
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "string - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "../../../../obj/windows/intern/string/debug"
+# PROP Intermediate_Dir "../../../../obj/windows/intern/string/debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "../.." /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"../../../../obj/windows/intern/string/debug\libstring.lib"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Cmds=ECHO Copying header files XCOPY /Y ..\..\*.h ..\..\..\..\..\lib\windows\string\include\ ECHO Copying lib XCOPY /Y ..\..\..\..\obj\windows\intern\string\debug\*.lib ..\..\..\..\..\lib\windows\string\lib\debug\*.a ECHO Done
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "string - Win32 Release"
+# Name "string - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\intern\STR_String.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Group "intern"
+
+# PROP Default_Filter ""
+# End Group
+# Begin Group "extern"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\STR_HashedString.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\STR_String.h
+# End Source File
+# End Group
+# End Group
+# End Target
+# End Project
diff --git a/intern/string/make/msvc_6_0/string.dsw b/intern/string/make/msvc_6_0/string.dsw
index b599b6407c5..23886681438 100644
--- a/intern/string/make/msvc_6_0/string.dsw
+++ b/intern/string/make/msvc_6_0/string.dsw
@@ -1,29 +1,29 @@
-Microsoft Developer Studio Workspace File, Format Version 6.00
-# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
-
-###############################################################################
-
-Project: "string"=".\string.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Global:
-
-Package=<5>
-{{{
-}}}
-
-Package=<3>
-{{{
-}}}
-
-###############################################################################
-
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "string"=".\string.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/po/Makefile b/po/Makefile
index 40b4684f5c0..425efbc08b3 100644
--- a/po/Makefile
+++ b/po/Makefile
@@ -22,7 +22,7 @@
# Amsterdam, the Netherlands.
# All rights reserved.
#
-# The Original Code is: revision 1.2
+# The Original Code is: revision 1.3
#
# Contributor(s): Wouter van Heyst, GSR
#
@@ -50,6 +50,9 @@ LINGUAS_DEST= $(foreach LINGUA, $(LINGUAS),$(DIR)$(LINGUA)/LC_MESSAGES/blender.m
$(DIR)%/LC_MESSAGES/blender.mo: %.po
mkdir -p $(@D)
msgfmt -o $@ $<
+ @cmp $@ $(NANBLENDERHOME)/bin/.blender/locale/$(basename $<)/LC_MESSAGES/blender.mo \
+ || ( echo Mismatch between generated and commited $(basename $<).mo catalog && \
+ rm -f $@ && false )
all debug:: $(LINGUAS_DEST)
# Just trigger the deps
diff --git a/projectfiles/blender/BLO_readblenfile/BLO_readblenfile.dsp b/projectfiles/blender/BLO_readblenfile/BLO_readblenfile.dsp
index 8e478f425d9..2cfb77b61aa 100644
--- a/projectfiles/blender/BLO_readblenfile/BLO_readblenfile.dsp
+++ b/projectfiles/blender/BLO_readblenfile/BLO_readblenfile.dsp
@@ -1,155 +1,155 @@
-# Microsoft Developer Studio Project File - Name="BLO_readblenfile" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=BLO_readblenfile - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "BLO_readblenfile.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "BLO_readblenfile.mak" CFG="BLO_readblenfile - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "BLO_readblenfile - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "BLO_readblenfile - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "BLO_readblenfile - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "BLO_readblenfile - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "BLO_readblenfile - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\obj\windows\blender\readblenfile"
-# PROP Intermediate_Dir "..\..\..\obj\windows\blender\readblenfile"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\source\blender\streamglue\\" /I "..\..\..\source\blender\blenloader\\" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\kernel\gen_messaging" /I "..\..\..\source\blender\readblenfile\\" /I "..\..\..\source\blender\deflate\\" /I "..\..\..\source\blender\inflate\\" /I "..\..\..\..\lib\windows\zlib\include" /I "..\..\..\source\blender\readstreamglue" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD BASE RSC /l 0x413 /d "NDEBUG"
-# ADD RSC /l 0x413 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "BLO_readblenfile - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\obj\windows\blender\readblenfile\debug"
-# PROP Intermediate_Dir "..\..\..\obj\windows\blender\readblenfile\debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\source\blender\readstreamglue\\" /I "..\..\..\source\blender\blenloader\\" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\kernel\gen_messaging" /I "..\..\..\source\blender\readblenfile\\" /I "..\..\..\source\blender\deflate\\" /I "..\..\..\source\blender\inflate\\" /I "..\..\..\..\lib\windows\zlib\include" /I "..\..\..\source\blender\readstreamglue" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# SUBTRACT CPP /Fr
-# ADD BASE RSC /l 0x413 /d "_DEBUG"
-# ADD RSC /l 0x413 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "BLO_readblenfile - Win32 MT DLL Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "BLO_readblenfile___Win32_MT_DLL_Release"
-# PROP BASE Intermediate_Dir "BLO_readblenfile___Win32_MT_DLL_Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\obj\windows\blender\readblenfile\mtdll"
-# PROP Intermediate_Dir "..\..\..\obj\windows\blender\readblenfile\mtdll"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /GX /O2 /I "..\..\..\source\blender\streamglue\\" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\kernel\gen_messaging" /I "..\..\..\source\blender\readblenfile\\" /I "..\..\..\source\blender\deflate\\" /I "..\..\..\source\blender\inflate\\" /I "..\..\..\..\lib\windows\zlib\include" /I "..\..\..\source\blender\readstreamglue" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\..\source\blender\streamglue\\" /I "..\..\..\source\blender\blenloader\\" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\kernel\gen_messaging" /I "..\..\..\source\blender\readblenfile\\" /I "..\..\..\source\blender\deflate\\" /I "..\..\..\source\blender\inflate\\" /I "..\..\..\..\lib\windows\zlib\include" /I "..\..\..\source\blender\readstreamglue" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD BASE RSC /l 0x413 /d "NDEBUG"
-# ADD RSC /l 0x413 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "BLO_readblenfile - Win32 MT DLL Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "BLO_readblenfile___Win32_MT_DLL_Debug"
-# PROP BASE Intermediate_Dir "BLO_readblenfile___Win32_MT_DLL_Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\obj\windows\blender\readblenfile\mtdll_debug"
-# PROP Intermediate_Dir "..\..\..\obj\windows\blender\readblenfile\mtdll_debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\readstreamglue\\" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\kernel\gen_messaging" /I "..\..\..\source\blender\readblenfile\\" /I "..\..\..\source\blender\deflate\\" /I "..\..\..\source\blender\inflate\\" /I "..\..\..\..\lib\windows\zlib\include" /I "..\..\..\source\blender\readstreamglue" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\..\..\source\blender\readstreamglue\\" /I "..\..\..\source\blender\blenloader\\" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\kernel\gen_messaging" /I "..\..\..\source\blender\readblenfile\\" /I "..\..\..\source\blender\deflate\\" /I "..\..\..\source\blender\inflate\\" /I "..\..\..\..\lib\windows\zlib\include" /I "..\..\..\source\blender\readstreamglue" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD BASE RSC /l 0x413 /d "_DEBUG"
-# ADD RSC /l 0x413 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ENDIF
-
-# Begin Target
-
-# Name "BLO_readblenfile - Win32 Release"
-# Name "BLO_readblenfile - Win32 Debug"
-# Name "BLO_readblenfile - Win32 MT DLL Release"
-# Name "BLO_readblenfile - Win32 MT DLL Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\readblenfile\intern\BLO_readblenfile.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\readblenfile\BLO_readblenfile.h
-# End Source File
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="BLO_readblenfile" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=BLO_readblenfile - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "BLO_readblenfile.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "BLO_readblenfile.mak" CFG="BLO_readblenfile - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "BLO_readblenfile - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "BLO_readblenfile - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "BLO_readblenfile - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "BLO_readblenfile - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "BLO_readblenfile - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\obj\windows\blender\readblenfile"
+# PROP Intermediate_Dir "..\..\..\obj\windows\blender\readblenfile"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\source\blender\streamglue\\" /I "..\..\..\source\blender\blenloader\\" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\kernel\gen_messaging" /I "..\..\..\source\blender\readblenfile\\" /I "..\..\..\source\blender\deflate\\" /I "..\..\..\source\blender\inflate\\" /I "..\..\..\..\lib\windows\zlib\include" /I "..\..\..\source\blender\readstreamglue" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD BASE RSC /l 0x413 /d "NDEBUG"
+# ADD RSC /l 0x413 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "BLO_readblenfile - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\obj\windows\blender\readblenfile\debug"
+# PROP Intermediate_Dir "..\..\..\obj\windows\blender\readblenfile\debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\source\blender\readstreamglue\\" /I "..\..\..\source\blender\blenloader\\" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\kernel\gen_messaging" /I "..\..\..\source\blender\readblenfile\\" /I "..\..\..\source\blender\deflate\\" /I "..\..\..\source\blender\inflate\\" /I "..\..\..\..\lib\windows\zlib\include" /I "..\..\..\source\blender\readstreamglue" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# SUBTRACT CPP /Fr
+# ADD BASE RSC /l 0x413 /d "_DEBUG"
+# ADD RSC /l 0x413 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "BLO_readblenfile - Win32 MT DLL Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "BLO_readblenfile___Win32_MT_DLL_Release"
+# PROP BASE Intermediate_Dir "BLO_readblenfile___Win32_MT_DLL_Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\obj\windows\blender\readblenfile\mtdll"
+# PROP Intermediate_Dir "..\..\..\obj\windows\blender\readblenfile\mtdll"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /GX /O2 /I "..\..\..\source\blender\streamglue\\" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\kernel\gen_messaging" /I "..\..\..\source\blender\readblenfile\\" /I "..\..\..\source\blender\deflate\\" /I "..\..\..\source\blender\inflate\\" /I "..\..\..\..\lib\windows\zlib\include" /I "..\..\..\source\blender\readstreamglue" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\..\source\blender\streamglue\\" /I "..\..\..\source\blender\blenloader\\" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\kernel\gen_messaging" /I "..\..\..\source\blender\readblenfile\\" /I "..\..\..\source\blender\deflate\\" /I "..\..\..\source\blender\inflate\\" /I "..\..\..\..\lib\windows\zlib\include" /I "..\..\..\source\blender\readstreamglue" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD BASE RSC /l 0x413 /d "NDEBUG"
+# ADD RSC /l 0x413 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "BLO_readblenfile - Win32 MT DLL Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "BLO_readblenfile___Win32_MT_DLL_Debug"
+# PROP BASE Intermediate_Dir "BLO_readblenfile___Win32_MT_DLL_Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\obj\windows\blender\readblenfile\mtdll_debug"
+# PROP Intermediate_Dir "..\..\..\obj\windows\blender\readblenfile\mtdll_debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\readstreamglue\\" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\kernel\gen_messaging" /I "..\..\..\source\blender\readblenfile\\" /I "..\..\..\source\blender\deflate\\" /I "..\..\..\source\blender\inflate\\" /I "..\..\..\..\lib\windows\zlib\include" /I "..\..\..\source\blender\readstreamglue" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\..\..\source\blender\readstreamglue\\" /I "..\..\..\source\blender\blenloader\\" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\kernel\gen_messaging" /I "..\..\..\source\blender\readblenfile\\" /I "..\..\..\source\blender\deflate\\" /I "..\..\..\source\blender\inflate\\" /I "..\..\..\..\lib\windows\zlib\include" /I "..\..\..\source\blender\readstreamglue" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x413 /d "_DEBUG"
+# ADD RSC /l 0x413 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ENDIF
+
+# Begin Target
+
+# Name "BLO_readblenfile - Win32 Release"
+# Name "BLO_readblenfile - Win32 Debug"
+# Name "BLO_readblenfile - Win32 MT DLL Release"
+# Name "BLO_readblenfile - Win32 MT DLL Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\readblenfile\intern\BLO_readblenfile.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\readblenfile\BLO_readblenfile.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/projectfiles/blender/BPY_python/BPY_python.dsp b/projectfiles/blender/BPY_python/BPY_python.dsp
index e122f0ffe90..2cbb9e05717 100644
--- a/projectfiles/blender/BPY_python/BPY_python.dsp
+++ b/projectfiles/blender/BPY_python/BPY_python.dsp
@@ -1,588 +1,588 @@
-# Microsoft Developer Studio Project File - Name="BPY_python" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=BPY_python - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "BPY_python.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "BPY_python.mak" CFG="BPY_python - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "BPY_python - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "BPY_python - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "BPY_python - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\obj\windows\blender\bpython"
-# PROP Intermediate_Dir "..\..\..\obj\windows\blender\bpython"
-# PROP Target_Dir ""
-MTL=midl.exe
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\..\lib\windows\python\include\python2.4" /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\blender\img" /I "..\..\..\source\blender\radiosity\extern\include" /I "..\..\..\..\lib\windows\bmfont\include" /I "..\..\source\blender\misc" /I "..\..\..\lib\windows\guardedalloc\include" /I "..\..\source\blender\blenlib" /I "..\..\source\kernel\gen_messaging" /I "..\..\source\blender\include" /I "..\..\source\blender" /I "..\..\source\blender\makesdna" /I "..\..\source\blender\blenkernel" /I "..\..\source\blender\blenloader" /I "..\..\source\blender\bpython\include" /I "..\..\source\blender\imbuf" /I "..\..\source\blender\render\extern\include" /I "..\..\source\blender\radiosity\extern\include" /I "..\..\source\kernel\gen_system" /I "..\..\source\blender\renderconverter\\" /I "..\..\source\blender\renderui\\" /I "..\..\source\blender\python" /I "../../../../lib/windows/bsp/include" /I "..\..\..\source\blender\renderconverter" /I "..\..\..\source\blender\render\extern\include" /I "..\..\..\source\blender\avi" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\blender\blenloader" /I "..\..\..\source\blender" /I "..\..\..\source\blender\bpython\include" /I "../../../source/gameengine\SoundSystem\\" /I "../../../../lib/windows/iksolver/include" /I "..\..\..\source\blender\python" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "BPY_python - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\obj\windows\blender\bpython\debug"
-# PROP Intermediate_Dir "..\..\..\obj\windows\blender\bpython\debug"
-# PROP Target_Dir ""
-MTL=midl.exe
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /w /W0 /Gm /GX /Zi /Od /I "..\..\..\..\lib\windows\python\include\python2.4" /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\blender\img" /I "..\..\..\..\lib\windows\bmfont\include" /I "..\..\source\blender\misc" /I "..\..\..\lib\windows\guardedalloc\include" /I "..\..\source\blender\blenlib" /I "..\..\source\kernel\gen_messaging" /I "..\..\source\blender\include" /I "..\..\source\blender" /I "..\..\source\blender\makesdna" /I "..\..\source\blender\blenkernel" /I "..\..\source\blender\blenloader" /I "..\..\..\source\blender\radiosity\extern\include" /I "..\..\source\blender\bpython\include" /I "..\..\source\blender\imbuf" /I "..\..\source\blender\render\extern\include" /I "..\..\source\kernel\gen_system" /I "..\..\source\blender\renderconverter\\" /I "..\..\source\blender\renderui\\" /I "..\..\source\blender\python" /I "../../../../lib/windows/bsp/include" /I "..\..\..\source\blender\renderconverter" /I "..\..\..\source\blender\render\extern\include" /I "..\..\..\source\blender\avi" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\blender\blenloader" /I "..\..\..\source\blender" /I "..\..\..\source\blender\bpython\include" /I "../../../source/gameengine\SoundSystem\\" /I "../../../../lib/windows/iksolver/include" /I "..\..\..\source\blender\python" /D "WIN32" /D "_MBCS" /D "_LIB" /U "_DEBUG" /YX /J /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ENDIF
-
-# Begin Target
-
-# Name "BPY_python - Win32 Release"
-# Name "BPY_python - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Armature.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\BezTriple.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\BGL.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Blender.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Bone.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\BPY_interface.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\BPY_menus.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Camera.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\charRGBA.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\constant.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Constraint.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\CurNurb.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Curve.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Draw.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Effect.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\euler.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\EXPP_interface.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Font.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\gen_utils.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Geometry.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Group.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\IDProp.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Image.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Ipo.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Ipocurve.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Key.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Lamp.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Lattice.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Library.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\logic.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Material.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Mathutils.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\matrix.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Mesh.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\meshPrimitive.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Metaball.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Modifier.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\MTex.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\NLA.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\NMesh.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Noise.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Object.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Particle.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\point.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Pose.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\quat.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Registry.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\rgbTuple.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Scene.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\sceneRadio.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\sceneRender.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\sceneTimeLine.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Sound.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\SurfNurb.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Sys.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Text.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Text3d.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Texture.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Types.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\vector.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Window.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\windowTheme.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\World.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Armature.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\BezTriple.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\BGL.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Blender.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Bone.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\BPY_extern.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\BPY_menus.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\bpy_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Camera.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\charRGBA.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\constant.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Constraint.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\CurNurb.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Curve.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Draw.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Effect.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\euler.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\EXPP_interface.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Font.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\gen_utils.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Geometry.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Group.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Image.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Ipo.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Ipocurve.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Key.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Lamp.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Lattice.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Material.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Mathutils.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\matrix.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Mesh.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\meshPrimitive.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Metaball.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Modifier.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\modules.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\MTex.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\NLA.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\NMesh.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Object.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Particle.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\point.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\quat.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Registry.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\rgbTuple.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Scene.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\sceneRadio.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\sceneRender.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\sceneTimeLine.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Sound.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\SurfNurb.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Sys.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Text.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Text3d.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Texture.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\vector.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\Window.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\windowTheme.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\python\api2_2x\World.h
-# End Source File
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="BPY_python" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=BPY_python - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "BPY_python.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "BPY_python.mak" CFG="BPY_python - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "BPY_python - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "BPY_python - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "BPY_python - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\obj\windows\blender\bpython"
+# PROP Intermediate_Dir "..\..\..\obj\windows\blender\bpython"
+# PROP Target_Dir ""
+MTL=midl.exe
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\..\lib\windows\python\include\python2.4" /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\blender\img" /I "..\..\..\source\blender\radiosity\extern\include" /I "..\..\..\..\lib\windows\bmfont\include" /I "..\..\source\blender\misc" /I "..\..\..\lib\windows\guardedalloc\include" /I "..\..\source\blender\blenlib" /I "..\..\source\kernel\gen_messaging" /I "..\..\source\blender\include" /I "..\..\source\blender" /I "..\..\source\blender\makesdna" /I "..\..\source\blender\blenkernel" /I "..\..\source\blender\blenloader" /I "..\..\source\blender\bpython\include" /I "..\..\source\blender\imbuf" /I "..\..\source\blender\render\extern\include" /I "..\..\source\blender\radiosity\extern\include" /I "..\..\source\kernel\gen_system" /I "..\..\source\blender\renderconverter\\" /I "..\..\source\blender\renderui\\" /I "..\..\source\blender\python" /I "../../../../lib/windows/bsp/include" /I "..\..\..\source\blender\renderconverter" /I "..\..\..\source\blender\render\extern\include" /I "..\..\..\source\blender\avi" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\blender\blenloader" /I "..\..\..\source\blender" /I "..\..\..\source\blender\bpython\include" /I "../../../source/gameengine\SoundSystem\\" /I "../../../../lib/windows/iksolver/include" /I "..\..\..\source\blender\python" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "BPY_python - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\obj\windows\blender\bpython\debug"
+# PROP Intermediate_Dir "..\..\..\obj\windows\blender\bpython\debug"
+# PROP Target_Dir ""
+MTL=midl.exe
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /w /W0 /Gm /GX /Zi /Od /I "..\..\..\..\lib\windows\python\include\python2.4" /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\blender\img" /I "..\..\..\..\lib\windows\bmfont\include" /I "..\..\source\blender\misc" /I "..\..\..\lib\windows\guardedalloc\include" /I "..\..\source\blender\blenlib" /I "..\..\source\kernel\gen_messaging" /I "..\..\source\blender\include" /I "..\..\source\blender" /I "..\..\source\blender\makesdna" /I "..\..\source\blender\blenkernel" /I "..\..\source\blender\blenloader" /I "..\..\..\source\blender\radiosity\extern\include" /I "..\..\source\blender\bpython\include" /I "..\..\source\blender\imbuf" /I "..\..\source\blender\render\extern\include" /I "..\..\source\kernel\gen_system" /I "..\..\source\blender\renderconverter\\" /I "..\..\source\blender\renderui\\" /I "..\..\source\blender\python" /I "../../../../lib/windows/bsp/include" /I "..\..\..\source\blender\renderconverter" /I "..\..\..\source\blender\render\extern\include" /I "..\..\..\source\blender\avi" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\blender\blenloader" /I "..\..\..\source\blender" /I "..\..\..\source\blender\bpython\include" /I "../../../source/gameengine\SoundSystem\\" /I "../../../../lib/windows/iksolver/include" /I "..\..\..\source\blender\python" /D "WIN32" /D "_MBCS" /D "_LIB" /U "_DEBUG" /YX /J /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ENDIF
+
+# Begin Target
+
+# Name "BPY_python - Win32 Release"
+# Name "BPY_python - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Armature.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\BezTriple.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\BGL.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Blender.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Bone.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\BPY_interface.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\BPY_menus.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Camera.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\charRGBA.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\constant.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Constraint.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\CurNurb.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Curve.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Draw.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Effect.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\euler.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\EXPP_interface.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Font.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\gen_utils.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Geometry.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Group.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\IDProp.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Image.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Ipo.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Ipocurve.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Key.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Lamp.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Lattice.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Library.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\logic.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Material.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Mathutils.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\matrix.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Mesh.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\meshPrimitive.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Metaball.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Modifier.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\MTex.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\NLA.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\NMesh.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Noise.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Object.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Particle.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\point.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Pose.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\quat.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Registry.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\rgbTuple.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Scene.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\sceneRadio.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\sceneRender.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\sceneTimeLine.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Sound.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\SurfNurb.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Sys.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Text.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Text3d.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Texture.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Types.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\vector.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Window.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\windowTheme.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\World.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Armature.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\BezTriple.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\BGL.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Blender.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Bone.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\BPY_extern.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\BPY_menus.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\bpy_types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Camera.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\charRGBA.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\constant.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Constraint.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\CurNurb.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Curve.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Draw.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Effect.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\euler.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\EXPP_interface.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Font.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\gen_utils.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Geometry.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Group.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Image.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Ipo.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Ipocurve.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Key.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Lamp.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Lattice.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Material.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Mathutils.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\matrix.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Mesh.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\meshPrimitive.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Metaball.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Modifier.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\modules.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\MTex.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\NLA.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\NMesh.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Object.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Particle.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\point.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\quat.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Registry.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\rgbTuple.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Scene.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\sceneRadio.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\sceneRender.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\sceneTimeLine.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Sound.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\SurfNurb.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Sys.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Text.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Text3d.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Texture.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\vector.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\Window.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\windowTheme.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\python\api2_2x\World.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/projectfiles/blender/avi/BL_avi.dsp b/projectfiles/blender/avi/BL_avi.dsp
index 1237ddcec47..4aafde508c0 100644
--- a/projectfiles/blender/avi/BL_avi.dsp
+++ b/projectfiles/blender/avi/BL_avi.dsp
@@ -1,199 +1,199 @@
-# Microsoft Developer Studio Project File - Name="BL_avi" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=BL_avi - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "BL_avi.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "BL_avi.mak" CFG="BL_avi - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "BL_avi - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "BL_avi - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "BL_avi - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "BL_avi - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "BL_avi - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\obj\windows\blender\avi"
-# PROP Intermediate_Dir "..\..\..\obj\windows\blender\avi"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\avi" /I "..\..\..\source\blender\include" /I "..\..\..\..\lib\windows\jpeg\include" /I "..\..\..\source\blender\makesdna" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "DWORDS_LITTLEENDIAN" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "BL_avi - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\obj\windows\blender\avi\debug"
-# PROP Intermediate_Dir "..\..\..\obj\windows\blender\avi\debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\avi" /I "..\..\..\source\blender\include" /I "..\..\..\..\lib\windows\jpeg\include" /I "..\..\..\source\blender\makesdna" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "DWORDS_LITTLEENDIAN" /YX /J /FD /GZ /c
-# SUBTRACT CPP /Fr
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "BL_avi - Win32 MT DLL Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "BL_avi___Win32_MT_DLL_Debug"
-# PROP BASE Intermediate_Dir "BL_avi___Win32_MT_DLL_Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\obj\windows\blender\avi\mtdll_debug"
-# PROP Intermediate_Dir "..\..\..\obj\windows\blender\avi\mtdll_debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /Gm /GX /ZI /Od /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\avi" /I "..\..\..\source\blender\include" /I "..\..\..\..\lib\windows\jpeg\include" /I "..\..\..\source\blender\makesdna" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "DWORDS_LITTLEENDIAN" /YX /J /FD /GZ /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\avi" /I "..\..\..\source\blender\include" /I "..\..\..\..\lib\windows\jpeg\include" /I "..\..\..\source\blender\makesdna" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "DWORDS_LITTLEENDIAN" /YX /J /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\blender\avi\debug\BL_avi.lib"
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "BL_avi - Win32 MT DLL Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "BL_avi___Win32_MT_DLL_Release"
-# PROP BASE Intermediate_Dir "BL_avi___Win32_MT_DLL_Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\obj\windows\blender\avi\mtdll"
-# PROP Intermediate_Dir "..\..\..\obj\windows\blender\avi\mtdll"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /GX /O2 /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\avi" /I "..\..\..\source\blender\include" /I "..\..\..\..\lib\windows\jpeg\include" /I "..\..\..\source\blender\makesdna" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "DWORDS_LITTLEENDIAN" /YX /J /FD /c
-# ADD CPP /nologo /MD /GX /O2 /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\avi" /I "..\..\..\source\blender\include" /I "..\..\..\..\lib\windows\jpeg\include" /I "..\..\..\source\blender\makesdna" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "DWORDS_LITTLEENDIAN" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\blender\avi\BL_avi.lib"
-# ADD LIB32 /nologo
-
-!ENDIF
-
-# Begin Target
-
-# Name "BL_avi - Win32 Release"
-# Name "BL_avi - Win32 Debug"
-# Name "BL_avi - Win32 MT DLL Debug"
-# Name "BL_avi - Win32 MT DLL Release"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\avi\intern\avi.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\avi\intern\avirgb.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\avi\intern\codecs.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\avi\intern\endian.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\avi\intern\mjpeg.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\avi\intern\options.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\avi\intern\rgb32.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\avi\AVI_avi.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\avi\intern\avi_intern.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\avi\intern\avirgb.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\avi\intern\endian.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\avi\intern\mjpeg.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\avi\intern\rgb32.h
-# End Source File
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="BL_avi" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=BL_avi - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "BL_avi.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "BL_avi.mak" CFG="BL_avi - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "BL_avi - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "BL_avi - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "BL_avi - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "BL_avi - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "BL_avi - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\obj\windows\blender\avi"
+# PROP Intermediate_Dir "..\..\..\obj\windows\blender\avi"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\avi" /I "..\..\..\source\blender\include" /I "..\..\..\..\lib\windows\jpeg\include" /I "..\..\..\source\blender\makesdna" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "DWORDS_LITTLEENDIAN" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "BL_avi - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\obj\windows\blender\avi\debug"
+# PROP Intermediate_Dir "..\..\..\obj\windows\blender\avi\debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\avi" /I "..\..\..\source\blender\include" /I "..\..\..\..\lib\windows\jpeg\include" /I "..\..\..\source\blender\makesdna" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "DWORDS_LITTLEENDIAN" /YX /J /FD /GZ /c
+# SUBTRACT CPP /Fr
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "BL_avi - Win32 MT DLL Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "BL_avi___Win32_MT_DLL_Debug"
+# PROP BASE Intermediate_Dir "BL_avi___Win32_MT_DLL_Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\obj\windows\blender\avi\mtdll_debug"
+# PROP Intermediate_Dir "..\..\..\obj\windows\blender\avi\mtdll_debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /Gm /GX /ZI /Od /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\avi" /I "..\..\..\source\blender\include" /I "..\..\..\..\lib\windows\jpeg\include" /I "..\..\..\source\blender\makesdna" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "DWORDS_LITTLEENDIAN" /YX /J /FD /GZ /c
+# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\avi" /I "..\..\..\source\blender\include" /I "..\..\..\..\lib\windows\jpeg\include" /I "..\..\..\source\blender\makesdna" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "DWORDS_LITTLEENDIAN" /YX /J /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\blender\avi\debug\BL_avi.lib"
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "BL_avi - Win32 MT DLL Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "BL_avi___Win32_MT_DLL_Release"
+# PROP BASE Intermediate_Dir "BL_avi___Win32_MT_DLL_Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\obj\windows\blender\avi\mtdll"
+# PROP Intermediate_Dir "..\..\..\obj\windows\blender\avi\mtdll"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /GX /O2 /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\avi" /I "..\..\..\source\blender\include" /I "..\..\..\..\lib\windows\jpeg\include" /I "..\..\..\source\blender\makesdna" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "DWORDS_LITTLEENDIAN" /YX /J /FD /c
+# ADD CPP /nologo /MD /GX /O2 /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\avi" /I "..\..\..\source\blender\include" /I "..\..\..\..\lib\windows\jpeg\include" /I "..\..\..\source\blender\makesdna" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "DWORDS_LITTLEENDIAN" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\blender\avi\BL_avi.lib"
+# ADD LIB32 /nologo
+
+!ENDIF
+
+# Begin Target
+
+# Name "BL_avi - Win32 Release"
+# Name "BL_avi - Win32 Debug"
+# Name "BL_avi - Win32 MT DLL Debug"
+# Name "BL_avi - Win32 MT DLL Release"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\avi\intern\avi.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\avi\intern\avirgb.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\avi\intern\codecs.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\avi\intern\endian.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\avi\intern\mjpeg.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\avi\intern\options.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\avi\intern\rgb32.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\avi\AVI_avi.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\avi\intern\avi_intern.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\avi\intern\avirgb.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\avi\intern\endian.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\avi\intern\mjpeg.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\avi\intern\rgb32.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/projectfiles/blender/blender.dsp b/projectfiles/blender/blender.dsp
index 17cd7022d82..48bc7b4b41e 100644
--- a/projectfiles/blender/blender.dsp
+++ b/projectfiles/blender/blender.dsp
@@ -1,124 +1,124 @@
-# Microsoft Developer Studio Project File - Name="blender" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=blender - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "blender.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "blender.mak" CFG="blender - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "blender - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "blender - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "blender - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\obj\windows\blender"
-# PROP Intermediate_Dir "..\..\obj\windows\blender"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\source\blender\misc" /I "..\..\..\lib\windows\guardedalloc\include" /I "..\..\source\blender\blenlib" /I "..\..\source\kernel\gen_messaging" /I "..\..\source\blender\include" /I "..\..\source\blender" /I "..\..\source\blender\makesdna" /I "..\..\source\blender\blenkernel" /I "..\..\source\blender\blenloader" /I "..\..\source\blender\python" /I "..\..\source\blender\imbuf" /I "..\..\source\blender\render\extern\include" /I "..\..\source\blender\radiosity\extern\include" /I "..\..\source\kernel\gen_system" /I "..\..\source\blender\renderconverter\\" /I "..\..\source\blender\renderui\\" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "WITH_QUICKTIME" /YX /FD /c
-# ADD BASE RSC /l 0x413 /d "NDEBUG"
-# ADD RSC /l 0x413 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 solid.lib SDL.lib freetype2ST.lib ftgl_static_ST.lib gnu_gettext.lib qtmlClient.lib openal_static.lib libsoundsystem.a libopenalsoundsystem.lib libdummysoundsystem.lib libguardedalloc.a libbsp.a libbmfont.a libghost.a libstring.a ws2_32.lib dxguid.lib opengl32.lib libjpeg.a glu32.lib user32.lib shell32.lib gdi32.lib vfw32.lib advapi32.lib winmm.lib ole32.lib libdecimation.a libiksolver.a libpng.a zlib.lib libmoto.a blender_ONL.lib blender_elbeem.lib boolop.lib BLI_bullet.lib pthreadVC2.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"msvcprt.lib" /nodefaultlib:"msvcrt.lib" /nodefaultlib:"glut32.lib" /nodefaultlib:"libcd.lib" /nodefaultlib:"libc.lib" /nodefaultlib:"libcpd.lib" /nodefaultlib:"libcp.lib" /nodefaultlib:"libcmtd.lib" /out:"..\..\bin\blender.exe" /libpath:"..\..\..\lib\windows\sdl\lib" /libpath:"..\..\..\lib\windows\freetype\lib" /libpath:"..\..\..\lib\windows\ftgl\lib" /libpath:"..\..\..\lib\windows\gettext\lib" /libpath:"..\..\..\lib\windows\ode\lib" /libpath:"..\..\..\lib\windows\bsp\lib" /libpath:"..\..\..\lib\windows\moto\lib" /libpath:"..\..\..\lib\windows\bmfont\lib" /libpath:"..\..\..\lib\windows\ghost\lib" /libpath:"..\..\..\lib\windows\python\frozen" /libpath:"..\..\..\lib\windows\guardedalloc\lib" /libpath:"..\..\..\lib\windows\string\lib" /libpath:"..\..\..\lib\windows\solid\lib" /libpath:"..\..\..\lib\windows\python\lib" /libpath:"..\..\..\lib\windows\iksolver\lib" /libpath:"..\..\..\lib\windows\decimation\lib" /libpath:"..\..\..\lib\windows\openal\lib" /libpath:"..\..\..\lib\windows\jpeg\lib" /libpath:"..\..\..\lib\windows\blenkey\lib" /libpath:"..\..\..\lib\windows\openssl\lib" /libpath:"..\..\obj\windows\intern\soundsystem\dummy" /libpath:"..\..\obj\windows\intern\soundsystem\openal" /libpath:"..\..\..\lib\windows\soundsystem\lib\\" /libpath:"..\..\..\lib\windows\zlib\lib\\" /libpath:"..\..\..\lib\windows\png\lib\\" /libpath:"..\..\..\lib\windows\opennl" /libpath:"..\..\..\lib\windows\elbeem\lib" /libpath:"..\..\..\lib\windows\boolop\lib" /libpath:"..\..\..\lib\windows\bullet\lib" /libpath:"..\..\..\lib\windows\pthreads\lib"
-# SUBTRACT LINK32 /pdb:none
-# Begin Special Build Tool
-SOURCE="$(InputPath)"
-PostBuild_Cmds=ECHO Copying required 3rd party dlls... XCOPY /Y ..\..\..\lib\windows\gettext\lib\*.dll ..\..\bin\ XCOPY /Y ..\..\..\lib\windows\sdl\lib\*dll ..\..\bin\ ECHO Done
-# End Special Build Tool
-
-!ELSEIF "$(CFG)" == "blender - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\obj\windows\blender\debug"
-# PROP Intermediate_Dir "..\..\obj\windows\blender\debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\source\blender\misc" /I "..\..\..\lib\windows\guardedalloc\include" /I "..\..\source\blender\blenlib" /I "..\..\source\kernel\gen_messaging" /I "..\..\source\blender\include" /I "..\..\source\blender" /I "..\..\source\blender\makesdna" /I "..\..\source\blender\blenkernel" /I "..\..\source\blender\blenloader" /I "..\..\source\blender\python" /I "..\..\source\blender\imbuf" /I "..\..\source\blender\render\extern\include" /I "..\..\source\blender\radiosity\extern\include" /I "..\..\source\kernel\gen_system" /I "..\..\source\blender\renderconverter\\" /I "..\..\source\blender\renderui" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "WITH_QUICKTIME" /YX /FD /GZ /c
-# ADD BASE RSC /l 0x413 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 solid.lib SDL.lib freetype2ST.lib ftgl_static_ST.lib gnu_gettext.lib qtmlClient.lib openal_static.lib libsoundsystem.a libopenalsoundsystem.lib libdummysoundsystem.lib libguardedalloc.a libbsp.a libbmfont.a libghost.a libstring.a ws2_32.lib dxguid.lib opengl32.lib libjpeg.a glu32.lib user32.lib gdi32.lib shell32.lib vfw32.lib advapi32.lib winmm.lib ole32.lib libdecimation.a libiksolver.a libpng.a zlib.lib libmoto.a blender_ONL.lib blender_elbeem.lib boolop.lib BLI_bullet_d.lib pthreadVC2.lib /nologo /subsystem:console /debug /machine:I386 /nodefaultlib:"glut32.lib" /nodefaultlib:"libcd.lib" /nodefaultlib:"libc.lib" /nodefaultlib:"libcpd.lib" /nodefaultlib:"libcp.lib" /nodefaultlib:"libcmt.lib" /nodefaultlib:"libcpmtd.lib" /nodefaultlib:"msvcprtd.lib" /out:"..\..\bin\debug\blender.exe" /pdbtype:sept /libpath:"..\..\..\lib\windows\sdl\lib" /libpath:"..\..\..\lib\windows\freetype\lib" /libpath:"..\..\..\lib\windows\ftgl\lib" /libpath:"..\..\..\lib\windows\gettext\lib" /libpath:"..\..\..\lib\windows\ode\lib" /libpath:"..\..\..\lib\windows\bsp\lib\debug" /libpath:"..\..\..\lib\windows\moto\lib\debug" /libpath:"..\..\..\lib\windows\bmfont\lib\debug" /libpath:"..\..\..\lib\windows\ghost\lib\debug" /libpath:"..\..\..\lib\windows\python\frozen" /libpath:"..\..\..\lib\windows\guardedalloc\lib\debug" /libpath:"..\..\..\lib\windows\string\lib\debug" /libpath:"..\..\..\lib\windows\solid\lib\\" /libpath:"..\..\..\lib\windows\python\lib" /libpath:"..\..\..\lib\windows\iksolver\lib\debug" /libpath:"..\..\..\lib\windows\decimation\lib\debug" /libpath:"..\..\..\lib\windows\openal\lib" /libpath:"..\..\obj\windows\intern\soundsystem\dummy\debug" /libpath:"..\..\obj\windows\intern\soundsystem\openal\debug" /libpath:"..\..\..\lib\windows\soundsystem\lib\debug\\" /libpath:"..\..\..\lib\windows\jpeg\lib" /libpath:"..\..\..\lib\windows\blenkey\lib\debug" /libpath:"..\..\..\lib\windows\openssl\lib" /libpath:"..\..\..\lib\windows\zlib\lib\\" /libpath:"..\..\..\lib\windows\png\lib\\" /libpath:"..\..\..\lib\windows\opennl\debug" /libpath:"..\..\..\lib\windows\elbeem\lib\debug" /libpath:"..\..\..\lib\windows\boolop\lib" /libpath:"..\..\..\lib\windows\bullet\lib" /libpath:"..\..\..\lib\windows\elbeem\lib" /libpath:"..\..\..\lib\windows\pthreads\lib"
-# SUBTRACT LINK32 /pdb:none
-# Begin Special Build Tool
-SOURCE="$(InputPath)"
-PostBuild_Cmds=ECHO Copying required 3rd party dlls... XCOPY /Y ..\..\..\lib\windows\gettext\lib\*.dll ..\..\bin\ ECHO Done
-# End Special Build Tool
-
-!ENDIF
-
-# Begin Target
-
-# Name "blender - Win32 Release"
-# Name "blender - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\source\creator\creator.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\source\icons\winblender.rc
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# Begin Source File
-
-SOURCE=..\..\source\icons\winblender.ico
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\source\icons\winblenderfile.ico
-# End Source File
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="blender" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=blender - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "blender.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "blender.mak" CFG="blender - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "blender - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "blender - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "blender - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\obj\windows\blender"
+# PROP Intermediate_Dir "..\..\obj\windows\blender"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\source\blender\misc" /I "..\..\..\lib\windows\guardedalloc\include" /I "..\..\source\blender\blenlib" /I "..\..\source\kernel\gen_messaging" /I "..\..\source\blender\include" /I "..\..\source\blender" /I "..\..\source\blender\makesdna" /I "..\..\source\blender\blenkernel" /I "..\..\source\blender\blenloader" /I "..\..\source\blender\python" /I "..\..\source\blender\imbuf" /I "..\..\source\blender\render\extern\include" /I "..\..\source\blender\radiosity\extern\include" /I "..\..\source\kernel\gen_system" /I "..\..\source\blender\renderconverter\\" /I "..\..\source\blender\renderui\\" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "WITH_QUICKTIME" /YX /FD /c
+# ADD BASE RSC /l 0x413 /d "NDEBUG"
+# ADD RSC /l 0x413 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 solid.lib SDL.lib freetype2ST.lib ftgl_static_ST.lib gnu_gettext.lib qtmlClient.lib openal_static.lib libsoundsystem.a libopenalsoundsystem.lib libdummysoundsystem.lib libguardedalloc.a libbsp.a libbmfont.a libghost.a libstring.a ws2_32.lib dxguid.lib opengl32.lib libjpeg.a glu32.lib user32.lib shell32.lib gdi32.lib vfw32.lib advapi32.lib winmm.lib ole32.lib libdecimation.a libiksolver.a libpng.a zlib.lib libmoto.a blender_ONL.lib blender_elbeem.lib boolop.lib BLI_bullet.lib pthreadVC2.lib /nologo /subsystem:console /machine:I386 /nodefaultlib:"msvcprt.lib" /nodefaultlib:"msvcrt.lib" /nodefaultlib:"glut32.lib" /nodefaultlib:"libcd.lib" /nodefaultlib:"libc.lib" /nodefaultlib:"libcpd.lib" /nodefaultlib:"libcp.lib" /nodefaultlib:"libcmtd.lib" /out:"..\..\bin\blender.exe" /libpath:"..\..\..\lib\windows\sdl\lib" /libpath:"..\..\..\lib\windows\freetype\lib" /libpath:"..\..\..\lib\windows\ftgl\lib" /libpath:"..\..\..\lib\windows\gettext\lib" /libpath:"..\..\..\lib\windows\ode\lib" /libpath:"..\..\..\lib\windows\bsp\lib" /libpath:"..\..\..\lib\windows\moto\lib" /libpath:"..\..\..\lib\windows\bmfont\lib" /libpath:"..\..\..\lib\windows\ghost\lib" /libpath:"..\..\..\lib\windows\python\frozen" /libpath:"..\..\..\lib\windows\guardedalloc\lib" /libpath:"..\..\..\lib\windows\string\lib" /libpath:"..\..\..\lib\windows\solid\lib" /libpath:"..\..\..\lib\windows\python\lib" /libpath:"..\..\..\lib\windows\iksolver\lib" /libpath:"..\..\..\lib\windows\decimation\lib" /libpath:"..\..\..\lib\windows\openal\lib" /libpath:"..\..\..\lib\windows\jpeg\lib" /libpath:"..\..\..\lib\windows\blenkey\lib" /libpath:"..\..\..\lib\windows\openssl\lib" /libpath:"..\..\obj\windows\intern\soundsystem\dummy" /libpath:"..\..\obj\windows\intern\soundsystem\openal" /libpath:"..\..\..\lib\windows\soundsystem\lib\\" /libpath:"..\..\..\lib\windows\zlib\lib\\" /libpath:"..\..\..\lib\windows\png\lib\\" /libpath:"..\..\..\lib\windows\opennl" /libpath:"..\..\..\lib\windows\elbeem\lib" /libpath:"..\..\..\lib\windows\boolop\lib" /libpath:"..\..\..\lib\windows\bullet\lib" /libpath:"..\..\..\lib\windows\pthreads\lib"
+# SUBTRACT LINK32 /pdb:none
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Cmds=ECHO Copying required 3rd party dlls... XCOPY /Y ..\..\..\lib\windows\gettext\lib\*.dll ..\..\bin\ XCOPY /Y ..\..\..\lib\windows\sdl\lib\*dll ..\..\bin\ ECHO Done
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "blender - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\obj\windows\blender\debug"
+# PROP Intermediate_Dir "..\..\obj\windows\blender\debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\source\blender\misc" /I "..\..\..\lib\windows\guardedalloc\include" /I "..\..\source\blender\blenlib" /I "..\..\source\kernel\gen_messaging" /I "..\..\source\blender\include" /I "..\..\source\blender" /I "..\..\source\blender\makesdna" /I "..\..\source\blender\blenkernel" /I "..\..\source\blender\blenloader" /I "..\..\source\blender\python" /I "..\..\source\blender\imbuf" /I "..\..\source\blender\render\extern\include" /I "..\..\source\blender\radiosity\extern\include" /I "..\..\source\kernel\gen_system" /I "..\..\source\blender\renderconverter\\" /I "..\..\source\blender\renderui" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "WITH_QUICKTIME" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x413 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 solid.lib SDL.lib freetype2ST.lib ftgl_static_ST.lib gnu_gettext.lib qtmlClient.lib openal_static.lib libsoundsystem.a libopenalsoundsystem.lib libdummysoundsystem.lib libguardedalloc.a libbsp.a libbmfont.a libghost.a libstring.a ws2_32.lib dxguid.lib opengl32.lib libjpeg.a glu32.lib user32.lib gdi32.lib shell32.lib vfw32.lib advapi32.lib winmm.lib ole32.lib libdecimation.a libiksolver.a libpng.a zlib.lib libmoto.a blender_ONL.lib blender_elbeem.lib boolop.lib BLI_bullet_d.lib pthreadVC2.lib /nologo /subsystem:console /debug /machine:I386 /nodefaultlib:"glut32.lib" /nodefaultlib:"libcd.lib" /nodefaultlib:"libc.lib" /nodefaultlib:"libcpd.lib" /nodefaultlib:"libcp.lib" /nodefaultlib:"libcmt.lib" /nodefaultlib:"libcpmtd.lib" /nodefaultlib:"msvcprtd.lib" /out:"..\..\bin\debug\blender.exe" /pdbtype:sept /libpath:"..\..\..\lib\windows\sdl\lib" /libpath:"..\..\..\lib\windows\freetype\lib" /libpath:"..\..\..\lib\windows\ftgl\lib" /libpath:"..\..\..\lib\windows\gettext\lib" /libpath:"..\..\..\lib\windows\ode\lib" /libpath:"..\..\..\lib\windows\bsp\lib\debug" /libpath:"..\..\..\lib\windows\moto\lib\debug" /libpath:"..\..\..\lib\windows\bmfont\lib\debug" /libpath:"..\..\..\lib\windows\ghost\lib\debug" /libpath:"..\..\..\lib\windows\python\frozen" /libpath:"..\..\..\lib\windows\guardedalloc\lib\debug" /libpath:"..\..\..\lib\windows\string\lib\debug" /libpath:"..\..\..\lib\windows\solid\lib\\" /libpath:"..\..\..\lib\windows\python\lib" /libpath:"..\..\..\lib\windows\iksolver\lib\debug" /libpath:"..\..\..\lib\windows\decimation\lib\debug" /libpath:"..\..\..\lib\windows\openal\lib" /libpath:"..\..\obj\windows\intern\soundsystem\dummy\debug" /libpath:"..\..\obj\windows\intern\soundsystem\openal\debug" /libpath:"..\..\..\lib\windows\soundsystem\lib\debug\\" /libpath:"..\..\..\lib\windows\jpeg\lib" /libpath:"..\..\..\lib\windows\blenkey\lib\debug" /libpath:"..\..\..\lib\windows\openssl\lib" /libpath:"..\..\..\lib\windows\zlib\lib\\" /libpath:"..\..\..\lib\windows\png\lib\\" /libpath:"..\..\..\lib\windows\opennl\debug" /libpath:"..\..\..\lib\windows\elbeem\lib\debug" /libpath:"..\..\..\lib\windows\boolop\lib" /libpath:"..\..\..\lib\windows\bullet\lib" /libpath:"..\..\..\lib\windows\elbeem\lib" /libpath:"..\..\..\lib\windows\pthreads\lib"
+# SUBTRACT LINK32 /pdb:none
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Cmds=ECHO Copying required 3rd party dlls... XCOPY /Y ..\..\..\lib\windows\gettext\lib\*.dll ..\..\bin\ ECHO Done
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "blender - Win32 Release"
+# Name "blender - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\source\creator\creator.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\source\icons\winblender.rc
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# Begin Source File
+
+SOURCE=..\..\source\icons\winblender.ico
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\source\icons\winblenderfile.ico
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/projectfiles/blender/blender.dsw b/projectfiles/blender/blender.dsw
index 3a69055807e..c7369f9df6c 100644
--- a/projectfiles/blender/blender.dsw
+++ b/projectfiles/blender/blender.dsw
@@ -1,743 +1,743 @@
-Microsoft Developer Studio Workspace File, Format Version 6.00
-# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
-
-###############################################################################
-
-Project: "BKE_blenkernel"=.\blenkernel\BKE_blenkernel.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "BLI_blenlib"=.\blenlib\BLI_blenlib.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "BLO_loader"=.\loader\BLO_loader.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "BLO_readblenfile"=.\BLO_readblenfile\BLO_readblenfile.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "BL_avi"=.\avi\BL_avi.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "BL_imbuf"=.\imbuf\BL_imbuf.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "BL_src"=.\src\BL_src.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "BL_src_cre"=.\src\BL_src_cre.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "BPY_python"=.\BPY_python\BPY_python.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "BRA_radiosity"=.\radiosity\BRA_radiosity.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "BRE_render"=.\render\BRE_render.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name BRE_yafray
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "BRE_renderconverter"=.\renderconverter\BRE_renderconverter.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "BRE_yafray"=.\yafray\BRE_yafray.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "Bullet"=..\..\extern\bullet\Bullet\BLI_Bullet.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "BulletDynamics"=..\..\extern\bullet\BulletDynamics\BLI_BulletDynamics.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "DNA_makesdna"=.\makesdna\DNA_makesdna.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "EXP_expressions"=..\gameengine\expression\EXP_expressions.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "FTF_ftfont"=.\ftfont\FTF_ftfont.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "GP_axctl"=..\gameengine\gameplayer\axctl\GP_axctl.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name KX_converter
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name EXP_expressions
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name SCA_GameLogic
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name KX_ketsji
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name SG_SceneGraph
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name RAS_openglrasterizer
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name RAS_rasterizer
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name SYS_system
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name GP_common
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name KX_network
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name NG_loopbacknetwork
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name NG_network
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name DNA_makesdna
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name gen_messaging
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name BLO_verify
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name BLO_decrypt
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name BLO_loader
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name BLO_readblenfile
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name BKE_blenkernel
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name BL_avi
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name BL_imbuf
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name BLI_blenlib
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name SND_OpenAL
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name PHY_Physics
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name PHY_Ode
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name PHY_Dummy
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "GP_common"=..\gameengine\gameplayer\common\GP_common.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "GP_ghost"=..\gameengine\gameplayer\ghost\GP_ghost.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name BKE_blenkernel
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name BL_avi
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name BL_imbuf
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name BLI_blenlib
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name BLO_loader
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name DNA_makesdna
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name EXP_expressions
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name KX_converter
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name KX_ketsji
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name KX_network
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name NG_loopbacknetwork
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name NG_network
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name RAS_openglrasterizer
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name RAS_rasterizer
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name SCA_GameLogic
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name SG_SceneGraph
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name SYS_system
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name gen_messaging
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name BLO_readblenfile
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name BLO_decrypt
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name BLO_verify
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name SND_OpenAL
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name GP_common
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name PHY_Physics
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name PHY_Dummy
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name PHY_Sumo
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "KX_blenderhook"=..\gameengine\blenderhook\KX_blenderhook.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "KX_converter"=..\gameengine\converter\KX_converter.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "KX_ketsji"=..\gameengine\ketsji\KX_ketsji.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "KX_network"=..\gameengine\ketsji\network\KX_network.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "NG_loopbacknetwork"=..\gameengine\network\loopbacknetwork\NG_loopbacknetwork.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "NG_network"=..\gameengine\network\network\NG_network.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "PHY_Dummy"=..\GAMEENGINE\PHYSICS\PHY_PHYSICS\PHY_Dummy\PHY_Dummy.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "PHY_Ode"=..\gameengine\physics\PHY_Physics\PHY_Ode\PHY_Ode.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "PHY_Physics"=..\gameengine\physics\PHY_Physics\PHY_Physics.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "PHY_Sumo"=..\gameengine\physics\PHY_Physics\PHY_Sumo\PHY_Sumo.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "RAS_openglrasterizer"=..\gameengine\rasterizer\openglrasterizer\RAS_openglrasterizer.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "RAS_rasterizer"=..\gameengine\rasterizer\RAS_rasterizer.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "SCA_GameLogic"=..\gameengine\gamelogic\SCA_GameLogic.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "SG_SceneGraph"=..\gameengine\scenegraph\SG_SceneGraph.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "SYS_system"=..\kernel\system\SYS_system.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "blender"=.\blender.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name BKE_blenkernel
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name BL_avi
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name BL_imbuf
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name BLI_blenlib
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name BLO_decrypt
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name BLO_encrypt
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name BLO_loader
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name BLO_sign
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name BLO_verify
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name BRA_radiosity
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name BRE_render
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name DNA_makesdna
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name EXP_expressions
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name gen_messaging
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name NG_loopbacknetwork
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name NG_network
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name RAS_openglrasterizer
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name RAS_rasterizer
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name SCA_GameLogic
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name SG_SceneGraph
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name SYS_system
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name BL_src_pub
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name blenpluginapi
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name BL_src
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name SND_OpenAL
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name PHY_Dummy
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name PHY_Physics
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name FTF_ftfont
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name BPY_python
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name PHY_Sumo
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name BLO_readblenfile
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name Bullet
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name BulletDynamics
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "blenpluginapi"=.\blenpluginapi\blenpluginapi\blenpluginapi.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "gen_messaging"=..\KERNEL\gen_messaging\gen_messaging.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Global:
-
-Package=<5>
-{{{
-}}}
-
-Package=<3>
-{{{
-}}}
-
-###############################################################################
-
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "BKE_blenkernel"=.\blenkernel\BKE_blenkernel.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "BLI_blenlib"=.\blenlib\BLI_blenlib.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "BLO_loader"=.\loader\BLO_loader.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "BLO_readblenfile"=.\BLO_readblenfile\BLO_readblenfile.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "BL_avi"=.\avi\BL_avi.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "BL_imbuf"=.\imbuf\BL_imbuf.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "BL_src"=.\src\BL_src.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "BL_src_cre"=.\src\BL_src_cre.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "BPY_python"=.\BPY_python\BPY_python.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "BRA_radiosity"=.\radiosity\BRA_radiosity.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "BRE_render"=.\render\BRE_render.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name BRE_yafray
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "BRE_renderconverter"=.\renderconverter\BRE_renderconverter.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "BRE_yafray"=.\yafray\BRE_yafray.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "Bullet"=..\..\extern\bullet\Bullet\BLI_Bullet.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "BulletDynamics"=..\..\extern\bullet\BulletDynamics\BLI_BulletDynamics.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "DNA_makesdna"=.\makesdna\DNA_makesdna.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "EXP_expressions"=..\gameengine\expression\EXP_expressions.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "FTF_ftfont"=.\ftfont\FTF_ftfont.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "GP_axctl"=..\gameengine\gameplayer\axctl\GP_axctl.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name KX_converter
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name EXP_expressions
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name SCA_GameLogic
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name KX_ketsji
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name SG_SceneGraph
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name RAS_openglrasterizer
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name RAS_rasterizer
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name SYS_system
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name GP_common
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name KX_network
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name NG_loopbacknetwork
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name NG_network
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name DNA_makesdna
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name gen_messaging
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name BLO_verify
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name BLO_decrypt
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name BLO_loader
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name BLO_readblenfile
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name BKE_blenkernel
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name BL_avi
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name BL_imbuf
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name BLI_blenlib
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name SND_OpenAL
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name PHY_Physics
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name PHY_Ode
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name PHY_Dummy
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "GP_common"=..\gameengine\gameplayer\common\GP_common.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "GP_ghost"=..\gameengine\gameplayer\ghost\GP_ghost.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name BKE_blenkernel
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name BL_avi
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name BL_imbuf
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name BLI_blenlib
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name BLO_loader
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name DNA_makesdna
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name EXP_expressions
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name KX_converter
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name KX_ketsji
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name KX_network
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name NG_loopbacknetwork
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name NG_network
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name RAS_openglrasterizer
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name RAS_rasterizer
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name SCA_GameLogic
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name SG_SceneGraph
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name SYS_system
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name gen_messaging
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name BLO_readblenfile
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name BLO_decrypt
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name BLO_verify
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name SND_OpenAL
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name GP_common
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name PHY_Physics
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name PHY_Dummy
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name PHY_Sumo
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "KX_blenderhook"=..\gameengine\blenderhook\KX_blenderhook.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "KX_converter"=..\gameengine\converter\KX_converter.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "KX_ketsji"=..\gameengine\ketsji\KX_ketsji.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "KX_network"=..\gameengine\ketsji\network\KX_network.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "NG_loopbacknetwork"=..\gameengine\network\loopbacknetwork\NG_loopbacknetwork.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "NG_network"=..\gameengine\network\network\NG_network.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "PHY_Dummy"=..\GAMEENGINE\PHYSICS\PHY_PHYSICS\PHY_Dummy\PHY_Dummy.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "PHY_Ode"=..\gameengine\physics\PHY_Physics\PHY_Ode\PHY_Ode.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "PHY_Physics"=..\gameengine\physics\PHY_Physics\PHY_Physics.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "PHY_Sumo"=..\gameengine\physics\PHY_Physics\PHY_Sumo\PHY_Sumo.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "RAS_openglrasterizer"=..\gameengine\rasterizer\openglrasterizer\RAS_openglrasterizer.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "RAS_rasterizer"=..\gameengine\rasterizer\RAS_rasterizer.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "SCA_GameLogic"=..\gameengine\gamelogic\SCA_GameLogic.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "SG_SceneGraph"=..\gameengine\scenegraph\SG_SceneGraph.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "SYS_system"=..\kernel\system\SYS_system.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "blender"=.\blender.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name BKE_blenkernel
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name BL_avi
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name BL_imbuf
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name BLI_blenlib
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name BLO_decrypt
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name BLO_encrypt
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name BLO_loader
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name BLO_sign
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name BLO_verify
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name BRA_radiosity
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name BRE_render
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name DNA_makesdna
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name EXP_expressions
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name gen_messaging
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name NG_loopbacknetwork
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name NG_network
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name RAS_openglrasterizer
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name RAS_rasterizer
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name SCA_GameLogic
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name SG_SceneGraph
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name SYS_system
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name BL_src_pub
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name blenpluginapi
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name BL_src
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name SND_OpenAL
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name PHY_Dummy
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name PHY_Physics
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name FTF_ftfont
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name BPY_python
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name PHY_Sumo
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name BLO_readblenfile
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name Bullet
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name BulletDynamics
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "blenpluginapi"=.\blenpluginapi\blenpluginapi\blenpluginapi.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "gen_messaging"=..\KERNEL\gen_messaging\gen_messaging.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/projectfiles/blender/blenkernel/BKE_blenkernel.dsp b/projectfiles/blender/blenkernel/BKE_blenkernel.dsp
index 171bfab7dad..d430498d44d 100644
--- a/projectfiles/blender/blenkernel/BKE_blenkernel.dsp
+++ b/projectfiles/blender/blenkernel/BKE_blenkernel.dsp
@@ -1,564 +1,564 @@
-# Microsoft Developer Studio Project File - Name="BKE_blenkernel" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=BKE_blenkernel - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "BKE_blenkernel.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "BKE_blenkernel.mak" CFG="BKE_blenkernel - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "BKE_blenkernel - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "BKE_blenkernel - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "BKE_blenkernel - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "BKE_blenkernel - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "BKE_blenkernel - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\obj\windows\blender\blenkernel"
-# PROP Intermediate_Dir "..\..\..\obj\windows\blender\blenkernel"
-# PROP Target_Dir ""
-MTL=midl.exe
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\..\lib\windows\decimation\include" /I "../../../../lib/windows/zlib/include" /I "..\..\..\intern\elbeem\extern" /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\renderconverter" /I "..\..\..\source\blender\render\extern\include" /I "..\..\..\source\blender\avi" /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\blender\blenloader" /I "..\..\..\source\blender" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\python" /I "..\..\..\source\blender\blenlib" /I "../../../source/gameengine\SoundSystem\\" /I "../../../../lib/windows/iksolver/include" /I "../../../../lib/windows/bsp/include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "WITH_FREETYPE2" /D "USE_CCGSUBSURFLIB" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "BKE_blenkernel - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\obj\windows\blender\blenkernel\debug"
-# PROP Intermediate_Dir "..\..\..\obj\windows\blender\blenkernel\debug"
-# PROP Target_Dir ""
-MTL=midl.exe
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\..\lib\windows\decimation\include" /I "../../../../lib/windows/zlib/include" /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\renderconverter" /I "..\..\..\source\blender\render\extern\include" /I "..\..\..\source\blender\avi" /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\blender\blenloader" /I "..\..\..\source\blender" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\python" /I "..\..\..\source\blender\blenlib" /I "../../../source/gameengine\SoundSystem\\" /I "../../../../lib/windows/iksolver/include" /I "../../../../lib/windows/bsp/include" /I "..\..\..\intern\elbeem\extern" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "WITH_FREETYPE2" /YX /J /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "BKE_blenkernel - Win32 MT DLL Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "BKE_blenkernel___Win32_MT_DLL_Debug"
-# PROP BASE Intermediate_Dir "BKE_blenkernel___Win32_MT_DLL_Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\obj\windows\blender\blenkernel\mtdll_debug"
-# PROP Intermediate_Dir "..\..\..\obj\windows\blender\blenkernel\mtdll_debug"
-# PROP Target_Dir ""
-MTL=midl.exe
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /Gm /GX /ZI /Od /I "..\..\..\source\blender\render\extern\include" /I "..\..\..\source\blender\avi" /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\gameengine\soundsystem" /I "..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\source\blender\blenloader" /I "..\..\..\source\blender" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\python" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\gameengine\soundsystem\snd_blenderwavecache" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
-# SUBTRACT BASE CPP /WX
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "..\..\..\source\blenloader" /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\renderconverter" /I "..\..\..\source\blender\render\extern\include" /I "..\..\..\source\blender\avi" /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\blender\blenloader" /I "..\..\..\source\blender" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\python" /I "..\..\..\source\blender\blenlib" /I "../../../source/gameengine\SoundSystem\\" /I "../../../../lib/windows/iksolver/include" /I "../../../../lib/windows/bsp/include" /I "..\..\..\intern\elbeem\extern" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
-# SUBTRACT CPP /WX
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\blender\blenkernel\debug\BKE_blenkernel.lib"
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "BKE_blenkernel - Win32 MT DLL Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "BKE_blenkernel___Win32_MT_DLL_Release"
-# PROP BASE Intermediate_Dir "BKE_blenkernel___Win32_MT_DLL_Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\obj\windows\blender\blenkernel\mtdll"
-# PROP Intermediate_Dir "..\..\..\obj\windows\blender\blenkernel\mtdll"
-# PROP Target_Dir ""
-MTL=midl.exe
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /GX /O2 /I "..\..\..\source\blender\render\extern\include" /I "..\..\..\source\blender\avi" /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\gameengine\soundsystem" /I "..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\source\blender\blenloader" /I "..\..\..\source\blender" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\python" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\gameengine\soundsystem\snd_blenderwavecache" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD CPP /nologo /MD /GX /O2 /I "..\..\..\source\gameengine\soundsystem" /I "..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\source\gameengine\soundsystem\snd_blenderwavecache" /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\renderconverter" /I "..\..\..\source\blender\render\extern\include" /I "..\..\..\source\blender\avi" /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\blender\blenloader" /I "..\..\..\source\blender" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\python" /I "..\..\..\source\blender\blenlib" /I "../../../source/gameengine\SoundSystem\\" /I "../../../../lib/windows/iksolver/include" /I "../../../../lib/windows/bsp/include" /I "..\..\..\intern\elbeem\extern" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\blender\blenkernel\BKE_blenkernel.lib"
-# ADD LIB32 /nologo
-
-!ENDIF
-
-# Begin Target
-
-# Name "BKE_blenkernel - Win32 Release"
-# Name "BKE_blenkernel - Win32 Debug"
-# Name "BKE_blenkernel - Win32 MT DLL Debug"
-# Name "BKE_blenkernel - Win32 MT DLL Release"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\intern\action.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\intern\idprop.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\intern\anim.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\intern\armature.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\intern\blender.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\intern\bmfont.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\intern\brush.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\intern\CCGSubSurf.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\intern\cdderivedmesh.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\intern\colortools.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\intern\constraint.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\intern\curve.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\intern\customdata.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\intern\deform.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\intern\depsgraph.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\intern\DerivedMesh.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\intern\displist.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\intern\effect.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\intern\exotic.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\intern\font.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\intern\group.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\intern\icons.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\intern\image.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\intern\ipo.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\intern\key.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\intern\lattice.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\intern\library.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\intern\material.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\intern\mball.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\intern\mesh.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\intern\modifier.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\intern\nla.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\intern\node.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\intern\node_composite.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\intern\node_shaders.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\intern\object.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\intern\packedFile.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\intern\property.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\intern\sca.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\intern\scene.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\intern\screen.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\intern\script.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\intern\softbody.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\intern\sound.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\intern\subsurf_ccg.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\intern\text.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\intern\texture.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\intern\world.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\intern\writeavi.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\intern\writeframeserver.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\BKE_action.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\BKE_anim.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\BKE_armature.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\BKE_bad_level_calls.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\BKE_blender.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\BKE_bmfont.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\BKE_bmfont_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\BKE_booleanops.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\BKE_booleanops_mesh.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\BKE_brush.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\BKE_cdderivedmesh.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\BKE_constraint.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\BKE_curve.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\BKE_customdata.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\BKE_deform.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\BKE_depsgraph.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\BKE_DerivedMesh.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\BKE_displist.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\BKE_effect.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\BKE_endian.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\BKE_exotic.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\BKE_font.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\BKE_global.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\BKE_group.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\BKE_image.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\BKE_ipo.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\BKE_key.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\BKE_lattice.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\BKE_library.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\BKE_main.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\BKE_material.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\BKE_mball.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\BKE_mesh.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\BKE_modifier.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\BKE_nla.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\BKE_object.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\BKE_packedFile.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\BKE_plugin_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\BKE_property.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\BKE_sca.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\BKE_scene.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\BKE_screen.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\BKE_script.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\BKE_softbody.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\BKE_sound.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\BKE_subsurf.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\BKE_text.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\BKE_texture.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\BKE_utildefines.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\BKE_world.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\BKE_writeavi.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\intern\CCGSubSurf.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenkernel\depsgraph_private.h
-# End Source File
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="BKE_blenkernel" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=BKE_blenkernel - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "BKE_blenkernel.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "BKE_blenkernel.mak" CFG="BKE_blenkernel - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "BKE_blenkernel - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "BKE_blenkernel - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "BKE_blenkernel - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "BKE_blenkernel - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "BKE_blenkernel - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\obj\windows\blender\blenkernel"
+# PROP Intermediate_Dir "..\..\..\obj\windows\blender\blenkernel"
+# PROP Target_Dir ""
+MTL=midl.exe
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\..\lib\windows\decimation\include" /I "../../../../lib/windows/zlib/include" /I "..\..\..\intern\elbeem\extern" /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\renderconverter" /I "..\..\..\source\blender\render\extern\include" /I "..\..\..\source\blender\avi" /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\blender\blenloader" /I "..\..\..\source\blender" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\python" /I "..\..\..\source\blender\blenlib" /I "../../../source/gameengine\SoundSystem\\" /I "../../../../lib/windows/iksolver/include" /I "../../../../lib/windows/bsp/include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "WITH_FREETYPE2" /D "USE_CCGSUBSURFLIB" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "BKE_blenkernel - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\obj\windows\blender\blenkernel\debug"
+# PROP Intermediate_Dir "..\..\..\obj\windows\blender\blenkernel\debug"
+# PROP Target_Dir ""
+MTL=midl.exe
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\..\lib\windows\decimation\include" /I "../../../../lib/windows/zlib/include" /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\renderconverter" /I "..\..\..\source\blender\render\extern\include" /I "..\..\..\source\blender\avi" /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\blender\blenloader" /I "..\..\..\source\blender" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\python" /I "..\..\..\source\blender\blenlib" /I "../../../source/gameengine\SoundSystem\\" /I "../../../../lib/windows/iksolver/include" /I "../../../../lib/windows/bsp/include" /I "..\..\..\intern\elbeem\extern" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "WITH_FREETYPE2" /YX /J /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "BKE_blenkernel - Win32 MT DLL Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "BKE_blenkernel___Win32_MT_DLL_Debug"
+# PROP BASE Intermediate_Dir "BKE_blenkernel___Win32_MT_DLL_Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\obj\windows\blender\blenkernel\mtdll_debug"
+# PROP Intermediate_Dir "..\..\..\obj\windows\blender\blenkernel\mtdll_debug"
+# PROP Target_Dir ""
+MTL=midl.exe
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /Gm /GX /ZI /Od /I "..\..\..\source\blender\render\extern\include" /I "..\..\..\source\blender\avi" /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\gameengine\soundsystem" /I "..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\source\blender\blenloader" /I "..\..\..\source\blender" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\python" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\gameengine\soundsystem\snd_blenderwavecache" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
+# SUBTRACT BASE CPP /WX
+# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "..\..\..\source\blenloader" /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\renderconverter" /I "..\..\..\source\blender\render\extern\include" /I "..\..\..\source\blender\avi" /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\blender\blenloader" /I "..\..\..\source\blender" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\python" /I "..\..\..\source\blender\blenlib" /I "../../../source/gameengine\SoundSystem\\" /I "../../../../lib/windows/iksolver/include" /I "../../../../lib/windows/bsp/include" /I "..\..\..\intern\elbeem\extern" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
+# SUBTRACT CPP /WX
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\blender\blenkernel\debug\BKE_blenkernel.lib"
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "BKE_blenkernel - Win32 MT DLL Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "BKE_blenkernel___Win32_MT_DLL_Release"
+# PROP BASE Intermediate_Dir "BKE_blenkernel___Win32_MT_DLL_Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\obj\windows\blender\blenkernel\mtdll"
+# PROP Intermediate_Dir "..\..\..\obj\windows\blender\blenkernel\mtdll"
+# PROP Target_Dir ""
+MTL=midl.exe
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /GX /O2 /I "..\..\..\source\blender\render\extern\include" /I "..\..\..\source\blender\avi" /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\gameengine\soundsystem" /I "..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\source\blender\blenloader" /I "..\..\..\source\blender" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\python" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\gameengine\soundsystem\snd_blenderwavecache" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD CPP /nologo /MD /GX /O2 /I "..\..\..\source\gameengine\soundsystem" /I "..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\source\gameengine\soundsystem\snd_blenderwavecache" /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\renderconverter" /I "..\..\..\source\blender\render\extern\include" /I "..\..\..\source\blender\avi" /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\blender\blenloader" /I "..\..\..\source\blender" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\python" /I "..\..\..\source\blender\blenlib" /I "../../../source/gameengine\SoundSystem\\" /I "../../../../lib/windows/iksolver/include" /I "../../../../lib/windows/bsp/include" /I "..\..\..\intern\elbeem\extern" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\blender\blenkernel\BKE_blenkernel.lib"
+# ADD LIB32 /nologo
+
+!ENDIF
+
+# Begin Target
+
+# Name "BKE_blenkernel - Win32 Release"
+# Name "BKE_blenkernel - Win32 Debug"
+# Name "BKE_blenkernel - Win32 MT DLL Debug"
+# Name "BKE_blenkernel - Win32 MT DLL Release"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\intern\action.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\intern\idprop.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\intern\anim.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\intern\armature.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\intern\blender.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\intern\bmfont.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\intern\brush.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\intern\CCGSubSurf.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\intern\cdderivedmesh.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\intern\colortools.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\intern\constraint.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\intern\curve.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\intern\customdata.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\intern\deform.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\intern\depsgraph.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\intern\DerivedMesh.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\intern\displist.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\intern\effect.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\intern\exotic.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\intern\font.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\intern\group.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\intern\icons.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\intern\image.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\intern\ipo.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\intern\key.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\intern\lattice.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\intern\library.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\intern\material.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\intern\mball.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\intern\mesh.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\intern\modifier.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\intern\nla.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\intern\node.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\intern\node_composite.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\intern\node_shaders.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\intern\object.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\intern\packedFile.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\intern\property.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\intern\sca.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\intern\scene.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\intern\screen.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\intern\script.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\intern\softbody.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\intern\sound.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\intern\subsurf_ccg.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\intern\text.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\intern\texture.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\intern\world.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\intern\writeavi.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\intern\writeframeserver.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\BKE_action.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\BKE_anim.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\BKE_armature.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\BKE_bad_level_calls.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\BKE_blender.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\BKE_bmfont.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\BKE_bmfont_types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\BKE_booleanops.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\BKE_booleanops_mesh.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\BKE_brush.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\BKE_cdderivedmesh.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\BKE_constraint.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\BKE_curve.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\BKE_customdata.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\BKE_deform.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\BKE_depsgraph.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\BKE_DerivedMesh.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\BKE_displist.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\BKE_effect.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\BKE_endian.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\BKE_exotic.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\BKE_font.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\BKE_global.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\BKE_group.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\BKE_image.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\BKE_ipo.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\BKE_key.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\BKE_lattice.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\BKE_library.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\BKE_main.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\BKE_material.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\BKE_mball.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\BKE_mesh.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\BKE_modifier.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\BKE_nla.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\BKE_object.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\BKE_packedFile.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\BKE_plugin_types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\BKE_property.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\BKE_sca.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\BKE_scene.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\BKE_screen.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\BKE_script.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\BKE_softbody.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\BKE_sound.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\BKE_subsurf.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\BKE_text.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\BKE_texture.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\BKE_utildefines.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\BKE_world.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\BKE_writeavi.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\intern\CCGSubSurf.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenkernel\depsgraph_private.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/projectfiles/blender/blenlib/BLI_blenlib.dsp b/projectfiles/blender/blenlib/BLI_blenlib.dsp
index 137725d3f7f..0a5ed2c4d9d 100644
--- a/projectfiles/blender/blenlib/BLI_blenlib.dsp
+++ b/projectfiles/blender/blenlib/BLI_blenlib.dsp
@@ -1,318 +1,318 @@
-# Microsoft Developer Studio Project File - Name="BLI_blenlib" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=BLI_blenlib - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "BLI_blenlib.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "BLI_blenlib.mak" CFG="BLI_blenlib - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "BLI_blenlib - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "BLI_blenlib - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "BLI_blenlib - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "BLI_blenlib - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "BLI_blenlib - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\obj\windows\blender\blenlib"
-# PROP Intermediate_Dir "..\..\..\obj\windows\blender\blenlib"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-MTL=midl.exe
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\..\lib\windows\freetype\include" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\python" /I "..\..\..\source\blender\makesdna" /I "../../../../lib/windows/zlib/include" /I "..\..\..\..\lib\windows\sdl\include" /I "..\..\..\..\lib\windows\pthreads\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "WITH_FREETYPE2" /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "BLI_blenlib - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\obj\windows\blender\blenlib\debug"
-# PROP Intermediate_Dir "..\..\..\obj\windows\blender\blenlib\debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-MTL=midl.exe
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\..\lib\windows\freetype\include" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\python" /I "..\..\..\source\blender\makesdna" /I "../../../../lib/windows/zlib/include" /I "..\..\..\..\lib\windows\sdl\include" /I "..\..\..\..\lib\windows\pthreads\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "WITH_FREETYPE2" /J /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "BLI_blenlib - Win32 MT DLL Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "BLI_blenlib___Win32_MT_DLL_Debug"
-# PROP BASE Intermediate_Dir "BLI_blenlib___Win32_MT_DLL_Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\obj\windows\blender\blenlib\mtdll_debug"
-# PROP Intermediate_Dir "..\..\..\obj\windows\blender\blenlib\mtdll_debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-MTL=midl.exe
-# ADD BASE CPP /nologo /Gm /GX /ZI /Od /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\python" /I "..\..\..\source\blender\makesdna" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\python" /I "..\..\..\source\blender\makesdna" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\blender\blenlib\debug\BLI_blenlib.lib"
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "BLI_blenlib - Win32 MT DLL Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "BLI_blenlib___Win32_MT_DLL_Release"
-# PROP BASE Intermediate_Dir "BLI_blenlib___Win32_MT_DLL_Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\obj\windows\blender\blenlib\mtdll"
-# PROP Intermediate_Dir "..\..\..\obj\windows\blender\blenlib\mtdll"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-MTL=midl.exe
-# ADD BASE CPP /nologo /GX /O2 /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\python" /I "..\..\..\source\blender\makesdna" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD CPP /nologo /MD /GX /O2 /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\python" /I "..\..\..\source\blender\makesdna" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\blender\blenlib\BLI_blenlib.lib"
-# ADD LIB32 /nologo
-
-!ENDIF
-
-# Begin Target
-
-# Name "BLI_blenlib - Win32 Release"
-# Name "BLI_blenlib - Win32 Debug"
-# Name "BLI_blenlib - Win32 MT DLL Debug"
-# Name "BLI_blenlib - Win32 MT DLL Release"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenlib\intern\arithb.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenlib\intern\BLI_dynstr.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenlib\intern\BLI_ghash.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenlib\intern\BLI_heap.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenlib\intern\BLI_linklist.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenlib\intern\BLI_memarena.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenlib\intern\dynlib.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenlib\intern\edgehash.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenlib\intern\fileops.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenlib\intern\freetypefont.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenlib\intern\gsqueue.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenlib\intern\jitter.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenlib\intern\matrixops.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenlib\intern\noise.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenlib\intern\psfont.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenlib\intern\rand.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenlib\intern\rct.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenlib\intern\scanfill.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenlib\intern\storage.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenlib\intern\threads.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenlib\intern\time.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenlib\intern\util.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenlib\intern\vectorops.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenlib\intern\winstuff.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenlib\BLI_arithb.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenlib\BLI_blenlib.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenlib\intern\BLI_callbacks.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenlib\BLI_edgehash.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenlib\BLI_editVert.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenlib\intern\BLI_fileops.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenlib\BLI_ghash.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenlib\BLI_linklist.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenlib\BLI_memarena.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenlib\intern\BLI_scanfill.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenlib\intern\BLI_storage.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenlib\BLI_storage_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenlib\intern\BLI_util.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenlib\BLI_winstuff.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenlib\MTC_matrixops.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenlib\MTC_vectorops.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenlib\PIL_dynlib.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenlib\PIL_time.h
-# End Source File
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="BLI_blenlib" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=BLI_blenlib - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "BLI_blenlib.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "BLI_blenlib.mak" CFG="BLI_blenlib - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "BLI_blenlib - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "BLI_blenlib - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "BLI_blenlib - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "BLI_blenlib - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "BLI_blenlib - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\obj\windows\blender\blenlib"
+# PROP Intermediate_Dir "..\..\..\obj\windows\blender\blenlib"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+MTL=midl.exe
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\..\lib\windows\freetype\include" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\python" /I "..\..\..\source\blender\makesdna" /I "../../../../lib/windows/zlib/include" /I "..\..\..\..\lib\windows\sdl\include" /I "..\..\..\..\lib\windows\pthreads\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "WITH_FREETYPE2" /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "BLI_blenlib - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\obj\windows\blender\blenlib\debug"
+# PROP Intermediate_Dir "..\..\..\obj\windows\blender\blenlib\debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+MTL=midl.exe
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\..\lib\windows\freetype\include" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\python" /I "..\..\..\source\blender\makesdna" /I "../../../../lib/windows/zlib/include" /I "..\..\..\..\lib\windows\sdl\include" /I "..\..\..\..\lib\windows\pthreads\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "WITH_FREETYPE2" /J /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "BLI_blenlib - Win32 MT DLL Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "BLI_blenlib___Win32_MT_DLL_Debug"
+# PROP BASE Intermediate_Dir "BLI_blenlib___Win32_MT_DLL_Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\obj\windows\blender\blenlib\mtdll_debug"
+# PROP Intermediate_Dir "..\..\..\obj\windows\blender\blenlib\mtdll_debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+MTL=midl.exe
+# ADD BASE CPP /nologo /Gm /GX /ZI /Od /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\python" /I "..\..\..\source\blender\makesdna" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
+# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\python" /I "..\..\..\source\blender\makesdna" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\blender\blenlib\debug\BLI_blenlib.lib"
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "BLI_blenlib - Win32 MT DLL Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "BLI_blenlib___Win32_MT_DLL_Release"
+# PROP BASE Intermediate_Dir "BLI_blenlib___Win32_MT_DLL_Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\obj\windows\blender\blenlib\mtdll"
+# PROP Intermediate_Dir "..\..\..\obj\windows\blender\blenlib\mtdll"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+MTL=midl.exe
+# ADD BASE CPP /nologo /GX /O2 /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\python" /I "..\..\..\source\blender\makesdna" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD CPP /nologo /MD /GX /O2 /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\python" /I "..\..\..\source\blender\makesdna" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\blender\blenlib\BLI_blenlib.lib"
+# ADD LIB32 /nologo
+
+!ENDIF
+
+# Begin Target
+
+# Name "BLI_blenlib - Win32 Release"
+# Name "BLI_blenlib - Win32 Debug"
+# Name "BLI_blenlib - Win32 MT DLL Debug"
+# Name "BLI_blenlib - Win32 MT DLL Release"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenlib\intern\arithb.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenlib\intern\BLI_dynstr.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenlib\intern\BLI_ghash.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenlib\intern\BLI_heap.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenlib\intern\BLI_linklist.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenlib\intern\BLI_memarena.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenlib\intern\dynlib.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenlib\intern\edgehash.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenlib\intern\fileops.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenlib\intern\freetypefont.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenlib\intern\gsqueue.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenlib\intern\jitter.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenlib\intern\matrixops.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenlib\intern\noise.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenlib\intern\psfont.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenlib\intern\rand.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenlib\intern\rct.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenlib\intern\scanfill.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenlib\intern\storage.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenlib\intern\threads.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenlib\intern\time.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenlib\intern\util.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenlib\intern\vectorops.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenlib\intern\winstuff.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenlib\BLI_arithb.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenlib\BLI_blenlib.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenlib\intern\BLI_callbacks.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenlib\BLI_edgehash.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenlib\BLI_editVert.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenlib\intern\BLI_fileops.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenlib\BLI_ghash.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenlib\BLI_linklist.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenlib\BLI_memarena.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenlib\intern\BLI_scanfill.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenlib\intern\BLI_storage.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenlib\BLI_storage_types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenlib\intern\BLI_util.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenlib\BLI_winstuff.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenlib\MTC_matrixops.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenlib\MTC_vectorops.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenlib\PIL_dynlib.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenlib\PIL_time.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/projectfiles/blender/blenpluginapi/blenpluginapi/blenpluginapi.dsp b/projectfiles/blender/blenpluginapi/blenpluginapi/blenpluginapi.dsp
index 6b219ffad19..935335448a4 100644
--- a/projectfiles/blender/blenpluginapi/blenpluginapi/blenpluginapi.dsp
+++ b/projectfiles/blender/blenpluginapi/blenpluginapi/blenpluginapi.dsp
@@ -1,119 +1,119 @@
-# Microsoft Developer Studio Project File - Name="blenpluginapi" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=blenpluginapi - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "blenpluginapi.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "blenpluginapi.mak" CFG="blenpluginapi - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "blenpluginapi - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "blenpluginapi - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "blenpluginapi - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\..\obj\windows\blender\blenpluginapi"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\blender\blenpluginapi"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\..\source\blender" /I "..\..\..\..\source\blender\blenpluginapi" /I "..\..\..\..\source\blender\blenlib" /I "..\..\..\..\source\blender\imbuf" /I "..\..\..\..\source\blender\makesdna" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\blender\blenpluginapi.lib"
-
-!ELSEIF "$(CFG)" == "blenpluginapi - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\..\obj\windows\blender\blenpluginapi\debug"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\blender\blenpluginapi\debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\..\source\blender" /I "..\..\..\..\source\blender\blenpluginapi" /I "..\..\..\..\source\blender\blenlib" /I "..\..\..\..\source\blender\imbuf" /I "..\..\..\..\source\blender\makesdna" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# SUBTRACT CPP /X
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\blender\debug\blenpluginapi.lib"
-
-!ENDIF
-
-# Begin Target
-
-# Name "blenpluginapi - Win32 Release"
-# Name "blenpluginapi - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\..\..\source\blender\blenpluginapi\intern\pluginapi.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\..\..\source\blender\blenpluginapi\documentation.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\blender\blenpluginapi\floatpatch.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\blender\blenpluginapi\iff.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\blender\blenpluginapi\plugin.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\blender\blenpluginapi\util.h
-# End Source File
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="blenpluginapi" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=blenpluginapi - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "blenpluginapi.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "blenpluginapi.mak" CFG="blenpluginapi - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "blenpluginapi - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "blenpluginapi - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "blenpluginapi - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\..\obj\windows\blender\blenpluginapi"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\blender\blenpluginapi"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\..\source\blender" /I "..\..\..\..\source\blender\blenpluginapi" /I "..\..\..\..\source\blender\blenlib" /I "..\..\..\..\source\blender\imbuf" /I "..\..\..\..\source\blender\makesdna" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\blender\blenpluginapi.lib"
+
+!ELSEIF "$(CFG)" == "blenpluginapi - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\..\obj\windows\blender\blenpluginapi\debug"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\blender\blenpluginapi\debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\..\source\blender" /I "..\..\..\..\source\blender\blenpluginapi" /I "..\..\..\..\source\blender\blenlib" /I "..\..\..\..\source\blender\imbuf" /I "..\..\..\..\source\blender\makesdna" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# SUBTRACT CPP /X
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\blender\debug\blenpluginapi.lib"
+
+!ENDIF
+
+# Begin Target
+
+# Name "blenpluginapi - Win32 Release"
+# Name "blenpluginapi - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\..\source\blender\blenpluginapi\intern\pluginapi.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\..\source\blender\blenpluginapi\documentation.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\blender\blenpluginapi\floatpatch.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\blender\blenpluginapi\iff.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\blender\blenpluginapi\plugin.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\blender\blenpluginapi\util.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/projectfiles/blender/ftfont/FTF_ftfont.dsp b/projectfiles/blender/ftfont/FTF_ftfont.dsp
index 7ecd50aa75f..9a90df08483 100644
--- a/projectfiles/blender/ftfont/FTF_ftfont.dsp
+++ b/projectfiles/blender/ftfont/FTF_ftfont.dsp
@@ -1,118 +1,118 @@
-# Microsoft Developer Studio Project File - Name="FTF_ftfont" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=FTF_ftfont - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "FTF_ftfont.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "FTF_ftfont.mak" CFG="FTF_ftfont - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "FTF_ftfont - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "FTF_ftfont - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "FTF_ftfont - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\obj\windows\blender\ftfont"
-# PROP Intermediate_Dir "..\..\..\obj\windows\blender\ftfont"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /W3 /GX /O2 /I "../../../source\blender\makesdna" /I "../../../source\blender\blenloader" /I "../../../source\blender\blenlib" /I "../../../../lib/windows/ftgl/include" /I "../../../../lib/windows/freetype/include" /I "../../../lib/windows/iconv/include" /I "../../../../lib/windows/gettext/include" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "WCHAR_T16" /D "HAVE_LC_MESSAGES" /YX /FD /c
-# ADD BASE RSC /l 0x411 /d "NDEBUG"
-# ADD RSC /l 0x411 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "FTF_ftfont - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\obj\windows\blender\ftfont"
-# PROP Intermediate_Dir "..\..\..\obj\windows\blender\ftfont"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../source\blender\blenlib" /I "../../../source\blender\makesdna" /I "../../../../lib/windows/ftgl/include" /I "../../../../lib/windows/freetype/include" /I "../../../lib/windows/iconv/include" /I "../../../../lib/windows/gettext/include" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "WCHAR_T16" /D "HAVE_LC_MESSAGES" /D "FTGL_LIBRARY_STATIC" /YX /FD /GZ /c
-# ADD BASE RSC /l 0x411 /d "_DEBUG"
-# ADD RSC /l 0x411 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ENDIF
-
-# Begin Target
-
-# Name "FTF_ftfont - Win32 Release"
-# Name "FTF_ftfont - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\ftfont\intern\FTF_Api.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\ftfont\intern\FTF_TTFont.cpp
-# End Source File
-# End Group
-# Begin Group "extern"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\ftfont\FTF_Api.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\ftfont\FTF_Settings.h
-# End Source File
-# End Group
-# Begin Group "intern"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\ftfont\intern\FTF_TTFont.h
-# End Source File
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="FTF_ftfont" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=FTF_ftfont - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "FTF_ftfont.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "FTF_ftfont.mak" CFG="FTF_ftfont - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "FTF_ftfont - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "FTF_ftfont - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "FTF_ftfont - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\obj\windows\blender\ftfont"
+# PROP Intermediate_Dir "..\..\..\obj\windows\blender\ftfont"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../../source\blender\makesdna" /I "../../../source\blender\blenloader" /I "../../../source\blender\blenlib" /I "../../../../lib/windows/ftgl/include" /I "../../../../lib/windows/freetype/include" /I "../../../lib/windows/iconv/include" /I "../../../../lib/windows/gettext/include" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "WCHAR_T16" /D "HAVE_LC_MESSAGES" /YX /FD /c
+# ADD BASE RSC /l 0x411 /d "NDEBUG"
+# ADD RSC /l 0x411 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "FTF_ftfont - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\obj\windows\blender\ftfont"
+# PROP Intermediate_Dir "..\..\..\obj\windows\blender\ftfont"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../source\blender\blenlib" /I "../../../source\blender\makesdna" /I "../../../../lib/windows/ftgl/include" /I "../../../../lib/windows/freetype/include" /I "../../../lib/windows/iconv/include" /I "../../../../lib/windows/gettext/include" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "WCHAR_T16" /D "HAVE_LC_MESSAGES" /D "FTGL_LIBRARY_STATIC" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x411 /d "_DEBUG"
+# ADD RSC /l 0x411 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ENDIF
+
+# Begin Target
+
+# Name "FTF_ftfont - Win32 Release"
+# Name "FTF_ftfont - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\ftfont\intern\FTF_Api.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\ftfont\intern\FTF_TTFont.cpp
+# End Source File
+# End Group
+# Begin Group "extern"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\ftfont\FTF_Api.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\ftfont\FTF_Settings.h
+# End Source File
+# End Group
+# Begin Group "intern"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\ftfont\intern\FTF_TTFont.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/projectfiles/blender/glut/BL_glut.dsp b/projectfiles/blender/glut/BL_glut.dsp
index 2e351603e67..a4f1573ab38 100644
--- a/projectfiles/blender/glut/BL_glut.dsp
+++ b/projectfiles/blender/glut/BL_glut.dsp
@@ -1,324 +1,324 @@
-# Microsoft Developer Studio Project File - Name="BL_glut" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=BL_glut - Win32 Profile
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "BL_glut.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "BL_glut.mak" CFG="BL_glut - Win32 Profile"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "BL_glut - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "BL_glut - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "BL_glut - Win32 Profile" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "BL_glut - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\blender\glut"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /W3 /GX /O2 /I "..\..\..\source\blender\\" /I "..\..\..\..\lib\windows\glut-3.7\include" /I "..\..\..\source\blender\glut-win" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\blender\glut\BL_glut.lib"
-
-!ELSEIF "$(CFG)" == "BL_glut - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\blender\glut\debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /I "..\..\..\..\lib\windows\glut-3.7\include" /I "..\..\..\source\blender\glut-win" /I "..\..\..\source\blender\\" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /FR /YX /J /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\blender\glut\debug\BL_glut.lib"
-
-!ELSEIF "$(CFG)" == "BL_glut - Win32 Profile"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "BL_glut___Win32_Profile"
-# PROP BASE Intermediate_Dir "BL_glut___Win32_Profile"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "BL_glut___Win32_Profile"
-# PROP Intermediate_Dir "BL_glut___Win32_Profile"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\..\..\lib\windows\glut-3.7\include" /I "..\..\..\source\blender\glut-win" /I "..\..\..\source\blender\\" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
-# ADD CPP /nologo /W3 /Gm /GX /Zi /O2 /I "..\..\..\..\lib\windows\glut-3.7\include" /I "..\..\..\source\blender\glut-win" /I "..\..\..\source\blender\\" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\..\obj\windows\blender\glut\debug\BL_glut.lib"
-# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\blender\glut\profile\BL_glut.lib"
-
-!ENDIF
-
-# Begin Target
-
-# Name "BL_glut - Win32 Release"
-# Name "BL_glut - Win32 Debug"
-# Name "BL_glut - Win32 Profile"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE="..\..\..\source\blender\glut-win\glut_8x13.c"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\blender\glut-win\glut_9x15.c"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\blender\glut-win\glut_bitmap.c"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\blender\glut-win\glut_blender.c"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\blender\glut-win\glut_bwidth.c"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\blender\glut-win\glut_cindex.c"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\blender\glut-win\glut_cmap.c"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\blender\glut-win\glut_cursor.c"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\blender\glut-win\glut_dials.c"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\blender\glut-win\glut_draw.c"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\blender\glut-win\glut_dstr.c"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\blender\glut-win\glut_event.c"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\blender\glut-win\glut_ext.c"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\blender\glut-win\glut_fullscrn.c"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\blender\glut-win\glut_get.c"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\blender\glut-win\glut_hel10.c"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\blender\glut-win\glut_hel12.c"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\blender\glut-win\glut_hel18.c"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\blender\glut-win\glut_helb10.c"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\blender\glut-win\glut_helb12.c"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\blender\glut-win\glut_helb14.c"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\blender\glut-win\glut_helb8.c"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\blender\glut-win\glut_init.c"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\blender\glut-win\glut_input.c"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\blender\glut-win\glut_mesa.c"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\blender\glut-win\glut_modifier.c"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\blender\glut-win\glut_mroman.c"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\blender\glut-win\glut_overlay.c"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\blender\glut-win\glut_roman.c"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\blender\glut-win\glut_scr12.c"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\blender\glut-win\glut_scr14.c"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\blender\glut-win\glut_scr15.c"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\blender\glut-win\glut_shapes.c"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\blender\glut-win\glut_space.c"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\blender\glut-win\glut_stroke.c"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\blender\glut-win\glut_swap.c"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\blender\glut-win\glut_swidth.c"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\blender\glut-win\glut_tablet.c"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\blender\glut-win\glut_teapot.c"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\blender\glut-win\glut_tr10.c"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\blender\glut-win\glut_tr24.c"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\blender\glut-win\glut_util.c"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\blender\glut-win\glut_vidresize.c"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\blender\glut-win\glut_warp.c"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\blender\glut-win\glut_win.c"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\blender\glut-win\glut_winmisc.c"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\blender\glut-win\win32_glx.c"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\blender\glut-win\win32_menu.c"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\blender\glut-win\win32_util.c"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\blender\glut-win\win32_x11.c"
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\glut\blenderglut.h
-# End Source File
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="BL_glut" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=BL_glut - Win32 Profile
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "BL_glut.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "BL_glut.mak" CFG="BL_glut - Win32 Profile"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "BL_glut - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "BL_glut - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "BL_glut - Win32 Profile" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "BL_glut - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\blender\glut"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "..\..\..\source\blender\\" /I "..\..\..\..\lib\windows\glut-3.7\include" /I "..\..\..\source\blender\glut-win" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\blender\glut\BL_glut.lib"
+
+!ELSEIF "$(CFG)" == "BL_glut - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\blender\glut\debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /I "..\..\..\..\lib\windows\glut-3.7\include" /I "..\..\..\source\blender\glut-win" /I "..\..\..\source\blender\\" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /FR /YX /J /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\blender\glut\debug\BL_glut.lib"
+
+!ELSEIF "$(CFG)" == "BL_glut - Win32 Profile"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "BL_glut___Win32_Profile"
+# PROP BASE Intermediate_Dir "BL_glut___Win32_Profile"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "BL_glut___Win32_Profile"
+# PROP Intermediate_Dir "BL_glut___Win32_Profile"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\..\..\lib\windows\glut-3.7\include" /I "..\..\..\source\blender\glut-win" /I "..\..\..\source\blender\\" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /Zi /O2 /I "..\..\..\..\lib\windows\glut-3.7\include" /I "..\..\..\source\blender\glut-win" /I "..\..\..\source\blender\\" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\..\obj\windows\blender\glut\debug\BL_glut.lib"
+# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\blender\glut\profile\BL_glut.lib"
+
+!ENDIF
+
+# Begin Target
+
+# Name "BL_glut - Win32 Release"
+# Name "BL_glut - Win32 Debug"
+# Name "BL_glut - Win32 Profile"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE="..\..\..\source\blender\glut-win\glut_8x13.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\blender\glut-win\glut_9x15.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\blender\glut-win\glut_bitmap.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\blender\glut-win\glut_blender.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\blender\glut-win\glut_bwidth.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\blender\glut-win\glut_cindex.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\blender\glut-win\glut_cmap.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\blender\glut-win\glut_cursor.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\blender\glut-win\glut_dials.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\blender\glut-win\glut_draw.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\blender\glut-win\glut_dstr.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\blender\glut-win\glut_event.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\blender\glut-win\glut_ext.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\blender\glut-win\glut_fullscrn.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\blender\glut-win\glut_get.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\blender\glut-win\glut_hel10.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\blender\glut-win\glut_hel12.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\blender\glut-win\glut_hel18.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\blender\glut-win\glut_helb10.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\blender\glut-win\glut_helb12.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\blender\glut-win\glut_helb14.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\blender\glut-win\glut_helb8.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\blender\glut-win\glut_init.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\blender\glut-win\glut_input.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\blender\glut-win\glut_mesa.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\blender\glut-win\glut_modifier.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\blender\glut-win\glut_mroman.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\blender\glut-win\glut_overlay.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\blender\glut-win\glut_roman.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\blender\glut-win\glut_scr12.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\blender\glut-win\glut_scr14.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\blender\glut-win\glut_scr15.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\blender\glut-win\glut_shapes.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\blender\glut-win\glut_space.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\blender\glut-win\glut_stroke.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\blender\glut-win\glut_swap.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\blender\glut-win\glut_swidth.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\blender\glut-win\glut_tablet.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\blender\glut-win\glut_teapot.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\blender\glut-win\glut_tr10.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\blender\glut-win\glut_tr24.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\blender\glut-win\glut_util.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\blender\glut-win\glut_vidresize.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\blender\glut-win\glut_warp.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\blender\glut-win\glut_win.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\blender\glut-win\glut_winmisc.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\blender\glut-win\win32_glx.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\blender\glut-win\win32_menu.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\blender\glut-win\win32_util.c"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\blender\glut-win\win32_x11.c"
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\glut\blenderglut.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/projectfiles/blender/imbuf/BL_imbuf.dsp b/projectfiles/blender/imbuf/BL_imbuf.dsp
index 002426124b6..04d81d8229c 100644
--- a/projectfiles/blender/imbuf/BL_imbuf.dsp
+++ b/projectfiles/blender/imbuf/BL_imbuf.dsp
@@ -1,438 +1,438 @@
-# Microsoft Developer Studio Project File - Name="BL_imbuf" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=BL_imbuf - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "BL_imbuf.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "BL_imbuf.mak" CFG="BL_imbuf - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "BL_imbuf - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "BL_imbuf - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "BL_imbuf - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "BL_imbuf - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "BL_imbuf - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\obj\windows\blender\imbuf"
-# PROP Intermediate_Dir "..\..\..\obj\windows\blender\imbuf"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-MTL=midl.exe
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\source\blender\imbuf\intern" /I "..\..\..\source\blender\quicktime" /I "..\..\..\source\blender\blenloader" /I "..\..\..\source\blender\render\extern\include" /I "..\..\..\source\blender\makesdna" /I "..\..\..\..\lib\windows\memutil\include" /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\avi" /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\include" /I "..\..\..\..\lib\windows\jpeg\include" /I "..\..\..\..\lib\windows\zlib\include" /I "..\..\..\..\lib\windows\png\include" /I "..\..\..\..\lib\windows\tiff\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "WITH_QUICKTIME" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "BL_imbuf - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\obj\windows\blender\imbuf\debug"
-# PROP Intermediate_Dir "..\..\..\obj\windows\blender\imbuf\debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-MTL=midl.exe
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\source\blender\imbuf\intern" /I "..\..\..\source\blender\quicktime" /I "..\..\..\source\blender\blenloader" /I "..\..\..\source\blender\render\extern\include" /I "..\..\..\source\blender\makesdna" /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\avi" /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\include" /I "..\..\..\..\lib\windows\jpeg\include" /I "..\..\..\..\lib\windows\zlib\include" /I "..\..\..\..\lib\windows\png\include" /I "..\..\..\..\lib\windows\memutil\include" /I "..\..\..\..\lib\windows\tiff\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "WITH_QUICKTIME" /YX /FD /I /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "BL_imbuf - Win32 MT DLL Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "BL_imbuf___Win32_MT_DLL_Debug"
-# PROP BASE Intermediate_Dir "BL_imbuf___Win32_MT_DLL_Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\obj\windows\blender\imbuf\mtdll_debug"
-# PROP Intermediate_Dir "..\..\..\obj\windows\blender\imbuf\mtdll_debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-MTL=midl.exe
-# ADD BASE CPP /nologo /Gm /GX /ZI /Od /I "..\..\..\source\blender\avi" /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\include" /I "..\..\..\..\lib\windows\jpeg\include" /I "..\..\..\source\blender\makesdna" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "..\..\..\source\blender\makesdna..\..\..\lib\windows\\" /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\avi" /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\include" /I "..\..\..\..\lib\windows\jpeg\include" /I "..\..\..\..\lib\windows\zlib\include" /I "..\..\..\..\lib\windows\png\include" /I "..\..\..\..\lib\windows\memutil\include" /I "..\..\..\..\lib\windows\tiff\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\blender\imbuf\debug\BL_imbuf.lib"
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "BL_imbuf - Win32 MT DLL Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "BL_imbuf___Win32_MT_DLL_Release"
-# PROP BASE Intermediate_Dir "BL_imbuf___Win32_MT_DLL_Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\obj\windows\blender\imbuf\mtdll"
-# PROP Intermediate_Dir "..\..\..\obj\windows\blender\imbuf\mtdll"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-MTL=midl.exe
-# ADD BASE CPP /nologo /GX /O2 /I "..\..\..\source\blender\avi" /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\include" /I "..\..\..\..\lib\windows\jpeg\include" /I "..\..\..\source\blender\makesdna" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD CPP /nologo /MD /GX /O2 /I "..\..\..\source\blender\makesdna..\..\..\lib\windows\\" /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\avi" /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\include" /I "..\..\..\..\lib\windows\jpeg\include" /I "..\..\..\..\lib\windows\zlib\include" /I "..\..\..\..\lib\windows\png\include" /I "..\..\..\..\lib\windows\memutil\include" /I "..\..\..\..\lib\windows\tiff\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\blender\imbuf\BL_imbuf.lib"
-# ADD LIB32 /nologo
-
-!ENDIF
-
-# Begin Target
-
-# Name "BL_imbuf - Win32 Release"
-# Name "BL_imbuf - Win32 Debug"
-# Name "BL_imbuf - Win32 MT DLL Debug"
-# Name "BL_imbuf - Win32 MT DLL Release"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\allocimbuf.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\amiga.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\anim.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\anim5.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\antialias.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\bitplanes.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\bmp.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\cineon\cineon_dpx.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\cineon\cineonlib.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\cmap.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\cspace.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\data.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\dither.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\divers.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\cineon\dpxlib.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\dynlibtiff.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\filter.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\ham.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\hamx.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\iff.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\imageprocess.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\iris.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\jpeg.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\cineon\logImageCore.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\cineon\logImageLib.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\cineon\logmemfile.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\png.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\quicktime\apple\quicktime_export.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\quicktime\apple\quicktime_import.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\radiance_hdr.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\readimage.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\rectop.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\rotate.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\scaling.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\targa.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\tiff.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\util.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\writeimage.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\cineon\cin_debug_stuff.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\cineon\cineonfile.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\cineon\cineonlib.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\cineon\dpxfile.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\cineon\dpxlib.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\dynlibtiff.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\IMB_allocimbuf.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\IMB_amiga.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\IMB_anim.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\IMB_anim5.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\IMB_bitplanes.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\IMB_bmp.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\IMB_cmap.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\IMB_divers.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\IMB_filter.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\IMB_ham.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\IMB_hamx.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\IMB_iff.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\IMB_imbuf.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\IMB_imbuf_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\IMB_iris.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\IMB_jpeg.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\IMB_png.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\IMB_radiance_hdr.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\IMB_targa.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\IMB_tiff.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\imbuf.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\imbuf_patch.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\cineon\logImageCore.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\cineon\logImageLib.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\cineon\logmemfile.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\imbuf\intern\matrix.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\quicktime\quicktime_export.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\quicktime\quicktime_import.h
-# End Source File
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="BL_imbuf" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=BL_imbuf - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "BL_imbuf.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "BL_imbuf.mak" CFG="BL_imbuf - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "BL_imbuf - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "BL_imbuf - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "BL_imbuf - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "BL_imbuf - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "BL_imbuf - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\obj\windows\blender\imbuf"
+# PROP Intermediate_Dir "..\..\..\obj\windows\blender\imbuf"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+MTL=midl.exe
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\source\blender\imbuf\intern" /I "..\..\..\source\blender\quicktime" /I "..\..\..\source\blender\blenloader" /I "..\..\..\source\blender\render\extern\include" /I "..\..\..\source\blender\makesdna" /I "..\..\..\..\lib\windows\memutil\include" /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\avi" /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\include" /I "..\..\..\..\lib\windows\jpeg\include" /I "..\..\..\..\lib\windows\zlib\include" /I "..\..\..\..\lib\windows\png\include" /I "..\..\..\..\lib\windows\tiff\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "WITH_QUICKTIME" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "BL_imbuf - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\obj\windows\blender\imbuf\debug"
+# PROP Intermediate_Dir "..\..\..\obj\windows\blender\imbuf\debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+MTL=midl.exe
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\source\blender\imbuf\intern" /I "..\..\..\source\blender\quicktime" /I "..\..\..\source\blender\blenloader" /I "..\..\..\source\blender\render\extern\include" /I "..\..\..\source\blender\makesdna" /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\avi" /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\include" /I "..\..\..\..\lib\windows\jpeg\include" /I "..\..\..\..\lib\windows\zlib\include" /I "..\..\..\..\lib\windows\png\include" /I "..\..\..\..\lib\windows\memutil\include" /I "..\..\..\..\lib\windows\tiff\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "WITH_QUICKTIME" /YX /FD /I /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "BL_imbuf - Win32 MT DLL Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "BL_imbuf___Win32_MT_DLL_Debug"
+# PROP BASE Intermediate_Dir "BL_imbuf___Win32_MT_DLL_Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\obj\windows\blender\imbuf\mtdll_debug"
+# PROP Intermediate_Dir "..\..\..\obj\windows\blender\imbuf\mtdll_debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+MTL=midl.exe
+# ADD BASE CPP /nologo /Gm /GX /ZI /Od /I "..\..\..\source\blender\avi" /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\include" /I "..\..\..\..\lib\windows\jpeg\include" /I "..\..\..\source\blender\makesdna" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "..\..\..\source\blender\makesdna..\..\..\lib\windows\\" /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\avi" /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\include" /I "..\..\..\..\lib\windows\jpeg\include" /I "..\..\..\..\lib\windows\zlib\include" /I "..\..\..\..\lib\windows\png\include" /I "..\..\..\..\lib\windows\memutil\include" /I "..\..\..\..\lib\windows\tiff\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\blender\imbuf\debug\BL_imbuf.lib"
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "BL_imbuf - Win32 MT DLL Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "BL_imbuf___Win32_MT_DLL_Release"
+# PROP BASE Intermediate_Dir "BL_imbuf___Win32_MT_DLL_Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\obj\windows\blender\imbuf\mtdll"
+# PROP Intermediate_Dir "..\..\..\obj\windows\blender\imbuf\mtdll"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+MTL=midl.exe
+# ADD BASE CPP /nologo /GX /O2 /I "..\..\..\source\blender\avi" /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\include" /I "..\..\..\..\lib\windows\jpeg\include" /I "..\..\..\source\blender\makesdna" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD CPP /nologo /MD /GX /O2 /I "..\..\..\source\blender\makesdna..\..\..\lib\windows\\" /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\avi" /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\include" /I "..\..\..\..\lib\windows\jpeg\include" /I "..\..\..\..\lib\windows\zlib\include" /I "..\..\..\..\lib\windows\png\include" /I "..\..\..\..\lib\windows\memutil\include" /I "..\..\..\..\lib\windows\tiff\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\blender\imbuf\BL_imbuf.lib"
+# ADD LIB32 /nologo
+
+!ENDIF
+
+# Begin Target
+
+# Name "BL_imbuf - Win32 Release"
+# Name "BL_imbuf - Win32 Debug"
+# Name "BL_imbuf - Win32 MT DLL Debug"
+# Name "BL_imbuf - Win32 MT DLL Release"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\allocimbuf.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\amiga.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\anim.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\anim5.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\antialias.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\bitplanes.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\bmp.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\cineon\cineon_dpx.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\cineon\cineonlib.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\cmap.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\cspace.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\data.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\dither.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\divers.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\cineon\dpxlib.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\dynlibtiff.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\filter.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\ham.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\hamx.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\iff.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\imageprocess.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\iris.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\jpeg.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\cineon\logImageCore.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\cineon\logImageLib.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\cineon\logmemfile.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\png.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\quicktime\apple\quicktime_export.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\quicktime\apple\quicktime_import.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\radiance_hdr.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\readimage.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\rectop.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\rotate.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\scaling.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\targa.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\tiff.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\util.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\writeimage.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\cineon\cin_debug_stuff.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\cineon\cineonfile.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\cineon\cineonlib.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\cineon\dpxfile.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\cineon\dpxlib.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\dynlibtiff.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\IMB_allocimbuf.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\IMB_amiga.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\IMB_anim.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\IMB_anim5.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\IMB_bitplanes.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\IMB_bmp.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\IMB_cmap.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\IMB_divers.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\IMB_filter.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\IMB_ham.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\IMB_hamx.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\IMB_iff.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\IMB_imbuf.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\IMB_imbuf_types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\IMB_iris.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\IMB_jpeg.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\IMB_png.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\IMB_radiance_hdr.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\IMB_targa.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\IMB_tiff.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\imbuf.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\imbuf_patch.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\cineon\logImageCore.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\cineon\logImageLib.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\cineon\logmemfile.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\imbuf\intern\matrix.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\quicktime\quicktime_export.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\quicktime\quicktime_import.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/projectfiles/blender/img/BL_img.dsp b/projectfiles/blender/img/BL_img.dsp
index 16f0827fbe9..465db34f4da 100644
--- a/projectfiles/blender/img/BL_img.dsp
+++ b/projectfiles/blender/img/BL_img.dsp
@@ -1,171 +1,171 @@
-# Microsoft Developer Studio Project File - Name="BL_img" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=BL_IMG - WIN32 DEBUG
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "BL_img.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "BL_img.mak" CFG="BL_IMG - WIN32 DEBUG"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "BL_img - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "BL_img - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "BL_img - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\obj\windows\blender\img"
-# PROP Intermediate_Dir "..\..\..\obj\windows\blender\img"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "BL_img - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\obj\windows\blender\img\debug"
-# PROP Intermediate_Dir "..\..\..\obj\windows\blender\img\debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
-# SUBTRACT CPP /Fr
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ENDIF
-
-# Begin Target
-
-# Name "BL_img - Win32 Release"
-# Name "BL_img - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\img\intern\IMG_Api.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\img\intern\IMG_BrushRGBA32.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\img\intern\IMG_CanvasRGBA32.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\img\intern\IMG_Line.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\img\intern\IMG_Pixmap.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\img\intern\IMG_PixmapRGBA32.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\img\intern\IMG_Rect.cpp
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Group "intern"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\img\intern\IMG_BrushRGBA32.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\img\intern\IMG_CanvasRGBA32.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\img\intern\IMG_Color.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\img\intern\IMG_Line.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\img\intern\IMG_MemPtr.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\img\intern\IMG_Pixmap.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\img\intern\IMG_PixmapRGBA32.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\img\intern\IMG_Rect.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\img\intern\IMG_Types.h
-# End Source File
-# End Group
-# Begin Group "extern"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\img\IMG_Api.h
-# End Source File
-# End Group
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="BL_img" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=BL_IMG - WIN32 DEBUG
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "BL_img.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "BL_img.mak" CFG="BL_IMG - WIN32 DEBUG"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "BL_img - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "BL_img - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "BL_img - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\obj\windows\blender\img"
+# PROP Intermediate_Dir "..\..\..\obj\windows\blender\img"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "BL_img - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\obj\windows\blender\img\debug"
+# PROP Intermediate_Dir "..\..\..\obj\windows\blender\img\debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
+# SUBTRACT CPP /Fr
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ENDIF
+
+# Begin Target
+
+# Name "BL_img - Win32 Release"
+# Name "BL_img - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\img\intern\IMG_Api.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\img\intern\IMG_BrushRGBA32.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\img\intern\IMG_CanvasRGBA32.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\img\intern\IMG_Line.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\img\intern\IMG_Pixmap.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\img\intern\IMG_PixmapRGBA32.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\img\intern\IMG_Rect.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Group "intern"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\img\intern\IMG_BrushRGBA32.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\img\intern\IMG_CanvasRGBA32.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\img\intern\IMG_Color.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\img\intern\IMG_Line.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\img\intern\IMG_MemPtr.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\img\intern\IMG_Pixmap.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\img\intern\IMG_PixmapRGBA32.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\img\intern\IMG_Rect.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\img\intern\IMG_Types.h
+# End Source File
+# End Group
+# Begin Group "extern"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\img\IMG_Api.h
+# End Source File
+# End Group
+# End Group
+# End Target
+# End Project
diff --git a/projectfiles/blender/loader/BLO_loader.dsp b/projectfiles/blender/loader/BLO_loader.dsp
index 13b32246652..6671f256bc9 100644
--- a/projectfiles/blender/loader/BLO_loader.dsp
+++ b/projectfiles/blender/loader/BLO_loader.dsp
@@ -1,186 +1,186 @@
-# Microsoft Developer Studio Project File - Name="BLO_loader" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=BLO_loader - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "BLO_loader.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "BLO_loader.mak" CFG="BLO_loader - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "BLO_loader - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "BLO_loader - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "BLO_loader - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "BLO_loader - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "BLO_loader - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\obj\windows\blender\loader"
-# PROP Intermediate_Dir "..\..\..\obj\windows\blender\loader"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\source\blender\blenloader" /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender\streamglue\\" /I "..\..\..\source\blender\readblenfile\\" /I "..\..\..\source\blender\writeblenfile\\" /I "..\..\..\source\blender\deflate\\" /I "..\..\..\source\blender\inflate\\" /I "..\..\..\..\lib\windows\zlib\include" /I "..\..\..\source\blender\readblenfile" /I "..\..\..\source\kernel\gen_messaging" /I "..\..\..\source\blender\readstreamglue" /I "..\..\..\source\blender\writestreamglue" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\render\extern\include" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\python" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "BLO_loader - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\obj\windows\blender\loader\debug"
-# PROP Intermediate_Dir "..\..\..\obj\windows\blender\loader\debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender\blenloader" /I "..\..\..\source\blender\streamglue\\" /I "..\..\..\source\blender\readblenfile\\" /I "..\..\..\source\blender\writeblenfile\\" /I "..\..\..\source\blender\deflate\\" /I "..\..\..\source\blender\inflate\\" /I "..\..\..\..\lib\windows\zlib\include" /I "..\..\..\source\blender\readblenfile" /I "..\..\..\source\kernel\gen_messaging" /I "..\..\..\source\blender\readstreamglue" /I "..\..\..\source\blender\writestreamglue" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\render\extern\include" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\python" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
-# SUBTRACT CPP /Fr
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "BLO_loader - Win32 MT DLL Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "BLO_loader___Win32_MT_DLL_Debug"
-# PROP BASE Intermediate_Dir "BLO_loader___Win32_MT_DLL_Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\obj\windows\blender\loader\mtdll_debug"
-# PROP Intermediate_Dir "..\..\..\obj\windows\blender\loader\mtdll_debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /Gm /GX /ZI /Od /I "..\..\..\source\blender\render\extern\include" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\python" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender\blenloader" /I "..\..\..\source\blender\streamglue\\" /I "..\..\..\source\blender\readblenfile\\" /I "..\..\..\source\blender\writeblenfile\\" /I "..\..\..\source\blender\deflate\\" /I "..\..\..\source\blender\inflate\\" /I "..\..\..\..\lib\windows\zlib\include" /I "..\..\..\source\blender\readblenfile" /I "..\..\..\source\kernel\gen_messaging" /I "..\..\..\source\blender\readstreamglue" /I "..\..\..\source\blender\writestreamglue" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\render\extern\include" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\python" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\blender\loader\debug\BLO_loader.lib"
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "BLO_loader - Win32 MT DLL Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "BLO_loader___Win32_MT_DLL_Release"
-# PROP BASE Intermediate_Dir "BLO_loader___Win32_MT_DLL_Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\obj\windows\blender\loader\mtdll"
-# PROP Intermediate_Dir "..\..\..\obj\windows\blender\loader\mtdll"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /GX /O2 /I "..\..\..\source\blender\render\extern\include" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\python" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD CPP /nologo /MD /GX /O2 /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender\blenloader" /I "..\..\..\source\blender\streamglue\\" /I "..\..\..\source\blender\readblenfile\\" /I "..\..\..\source\blender\writeblenfile\\" /I "..\..\..\source\blender\deflate\\" /I "..\..\..\source\blender\inflate\\" /I "..\..\..\..\lib\windows\zlib\include" /I "..\..\..\source\blender\readblenfile" /I "..\..\..\source\kernel\gen_messaging" /I "..\..\..\source\blender\readstreamglue" /I "..\..\..\source\blender\writestreamglue" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\render\extern\include" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\python" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\blender\loader\BLO_loader.lib"
-# ADD LIB32 /nologo
-
-!ENDIF
-
-# Begin Target
-
-# Name "BLO_loader - Win32 Release"
-# Name "BLO_loader - Win32 Debug"
-# Name "BLO_loader - Win32 MT DLL Debug"
-# Name "BLO_loader - Win32 MT DLL Release"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenloader\intern\genfile.c
-# ADD CPP /I "..\..\..\source\blender"
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenloader\intern\readblenentry.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenloader\intern\readfile.c
-# ADD CPP /I "..\..\..\source\blender"
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenloader\intern\undofile.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenloader\intern\writefile.c
-# ADD CPP /I "..\..\..\source\blender"
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenloader\BLO_genfile.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenloader\BLO_readfile.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenloader\BLO_soundfile.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenloader\BLO_undofile.h
-# End Source File
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="BLO_loader" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=BLO_loader - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "BLO_loader.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "BLO_loader.mak" CFG="BLO_loader - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "BLO_loader - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "BLO_loader - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "BLO_loader - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "BLO_loader - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "BLO_loader - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\obj\windows\blender\loader"
+# PROP Intermediate_Dir "..\..\..\obj\windows\blender\loader"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\source\blender\blenloader" /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender\streamglue\\" /I "..\..\..\source\blender\readblenfile\\" /I "..\..\..\source\blender\writeblenfile\\" /I "..\..\..\source\blender\deflate\\" /I "..\..\..\source\blender\inflate\\" /I "..\..\..\..\lib\windows\zlib\include" /I "..\..\..\source\blender\readblenfile" /I "..\..\..\source\kernel\gen_messaging" /I "..\..\..\source\blender\readstreamglue" /I "..\..\..\source\blender\writestreamglue" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\render\extern\include" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\python" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "BLO_loader - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\obj\windows\blender\loader\debug"
+# PROP Intermediate_Dir "..\..\..\obj\windows\blender\loader\debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender\blenloader" /I "..\..\..\source\blender\streamglue\\" /I "..\..\..\source\blender\readblenfile\\" /I "..\..\..\source\blender\writeblenfile\\" /I "..\..\..\source\blender\deflate\\" /I "..\..\..\source\blender\inflate\\" /I "..\..\..\..\lib\windows\zlib\include" /I "..\..\..\source\blender\readblenfile" /I "..\..\..\source\kernel\gen_messaging" /I "..\..\..\source\blender\readstreamglue" /I "..\..\..\source\blender\writestreamglue" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\render\extern\include" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\python" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
+# SUBTRACT CPP /Fr
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "BLO_loader - Win32 MT DLL Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "BLO_loader___Win32_MT_DLL_Debug"
+# PROP BASE Intermediate_Dir "BLO_loader___Win32_MT_DLL_Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\obj\windows\blender\loader\mtdll_debug"
+# PROP Intermediate_Dir "..\..\..\obj\windows\blender\loader\mtdll_debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /Gm /GX /ZI /Od /I "..\..\..\source\blender\render\extern\include" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\python" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
+# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender\blenloader" /I "..\..\..\source\blender\streamglue\\" /I "..\..\..\source\blender\readblenfile\\" /I "..\..\..\source\blender\writeblenfile\\" /I "..\..\..\source\blender\deflate\\" /I "..\..\..\source\blender\inflate\\" /I "..\..\..\..\lib\windows\zlib\include" /I "..\..\..\source\blender\readblenfile" /I "..\..\..\source\kernel\gen_messaging" /I "..\..\..\source\blender\readstreamglue" /I "..\..\..\source\blender\writestreamglue" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\render\extern\include" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\python" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\blender\loader\debug\BLO_loader.lib"
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "BLO_loader - Win32 MT DLL Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "BLO_loader___Win32_MT_DLL_Release"
+# PROP BASE Intermediate_Dir "BLO_loader___Win32_MT_DLL_Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\obj\windows\blender\loader\mtdll"
+# PROP Intermediate_Dir "..\..\..\obj\windows\blender\loader\mtdll"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /GX /O2 /I "..\..\..\source\blender\render\extern\include" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\python" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD CPP /nologo /MD /GX /O2 /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender\blenloader" /I "..\..\..\source\blender\streamglue\\" /I "..\..\..\source\blender\readblenfile\\" /I "..\..\..\source\blender\writeblenfile\\" /I "..\..\..\source\blender\deflate\\" /I "..\..\..\source\blender\inflate\\" /I "..\..\..\..\lib\windows\zlib\include" /I "..\..\..\source\blender\readblenfile" /I "..\..\..\source\kernel\gen_messaging" /I "..\..\..\source\blender\readstreamglue" /I "..\..\..\source\blender\writestreamglue" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\render\extern\include" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\python" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\blender\loader\BLO_loader.lib"
+# ADD LIB32 /nologo
+
+!ENDIF
+
+# Begin Target
+
+# Name "BLO_loader - Win32 Release"
+# Name "BLO_loader - Win32 Debug"
+# Name "BLO_loader - Win32 MT DLL Debug"
+# Name "BLO_loader - Win32 MT DLL Release"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenloader\intern\genfile.c
+# ADD CPP /I "..\..\..\source\blender"
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenloader\intern\readblenentry.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenloader\intern\readfile.c
+# ADD CPP /I "..\..\..\source\blender"
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenloader\intern\undofile.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenloader\intern\writefile.c
+# ADD CPP /I "..\..\..\source\blender"
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenloader\BLO_genfile.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenloader\BLO_readfile.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenloader\BLO_soundfile.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenloader\BLO_undofile.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/projectfiles/blender/makesdna/DNA_makesdna.dsp b/projectfiles/blender/makesdna/DNA_makesdna.dsp
index 993968c2f6d..e08d44ade7c 100644
--- a/projectfiles/blender/makesdna/DNA_makesdna.dsp
+++ b/projectfiles/blender/makesdna/DNA_makesdna.dsp
@@ -1,373 +1,373 @@
-# Microsoft Developer Studio Project File - Name="DNA_makesdna" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=DNA_makesdna - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "DNA_makesdna.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "DNA_makesdna.mak" CFG="DNA_makesdna - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "DNA_makesdna - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "DNA_makesdna - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE "DNA_makesdna - Win32 MT DLL Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "DNA_makesdna - Win32 MT DLL Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "DNA_makesdna - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\source\blender\makesdna\intern"
-# PROP Intermediate_Dir "..\..\..\obj\windows\blender\makesdna"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo /o"DNA_makesdna.bsc"
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 libguardedalloc.a BLI_blenlib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:"DNA_makesdna.pdb" /machine:I386 /nodefaultlib:"libc.lib" /libpath:"..\..\..\..\lib\windows\guardedalloc\lib" /libpath:"..\..\..\obj\windows\blender\blenlib"
-# SUBTRACT LINK32 /pdb:none
-# Begin Special Build Tool
-SOURCE="$(InputPath)"
-PostBuild_Desc=Building DNA
-PostBuild_Cmds=CD ..\..\..\source\blender\makesdna\intern\ DNA_makesdna.exe dna.c
-# End Special Build Tool
-
-!ELSEIF "$(CFG)" == "DNA_makesdna - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\source\blender\makesdna\intern"
-# PROP Intermediate_Dir "..\..\..\obj\windows\blender\makesdna\debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /J /FD /GZ /c
-# SUBTRACT CPP /Fr
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo /o"DNA_makesdna.bsc"
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 libguardedalloc.a BLI_blenlib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:"DNA_makesdna.pdb" /debug /machine:I386 /nodefaultlib:"libc.lib" /pdbtype:sept /libpath:"..\..\..\..\lib\windows\guardedalloc\lib\debug" /libpath:"..\..\..\obj\windows\blender\blenlib\debug"
-# SUBTRACT LINK32 /pdb:none
-# Begin Special Build Tool
-SOURCE="$(InputPath)"
-PostBuild_Desc=Building DNA
-PostBuild_Cmds=CD ..\..\..\source\blender\makesdna\intern\ DNA_makesdna.exe dna.c
-# End Special Build Tool
-
-!ELSEIF "$(CFG)" == "DNA_makesdna - Win32 MT DLL Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "DNA_makesdna___Win32_MT_DLL_Release"
-# PROP BASE Intermediate_Dir "DNA_makesdna___Win32_MT_DLL_Release"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\source\blender\makesdna\intern"
-# PROP Intermediate_Dir "..\..\..\obj\windows\blender\makesdna\mtdll"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /J /FD /c
-# ADD CPP /nologo /W3 /GX /O2 /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo /o"DNA_makesdna.bsc"
-# ADD BSC32 /nologo /o"DNA_makesdna.bsc"
-LINK32=link.exe
-# ADD BASE LINK32 BLI_blenlib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:"DNA_makesdna.pdb" /machine:I386 /out:"..\..\..\source\blender\makesdna\intern\DNA_makesdna.exe" /libpath:"..\..\..\..\obj\windows\blender\blenlib"
-# SUBTRACT BASE LINK32 /pdb:none
-# ADD LINK32 libguardedalloc.a /nologo /subsystem:console /pdb:"DNA_makesdna.pdb" /machine:I386 /libpath:"..\..\..\..\lib\windows\guardedalloc\lib" /libpath:"..\..\..\..\obj\windows\blender\blenlib"
-# SUBTRACT LINK32 /pdb:none
-# Begin Special Build Tool
-SOURCE="$(InputPath)"
-PostBuild_Cmds=CD ..\..\..\source\blender\makesdna\intern\ DNA_makesdna.exe dna.c
-# End Special Build Tool
-
-!ELSEIF "$(CFG)" == "DNA_makesdna - Win32 MT DLL Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "DNA_makesdna___Win32_MT_DLL_Debug"
-# PROP BASE Intermediate_Dir "DNA_makesdna___Win32_MT_DLL_Debug"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\source\blender\makesdna\intern"
-# PROP Intermediate_Dir "..\..\..\obj\windows\blender\makesdna\mtdll_debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /J /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /J /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo /o"DNA_makesdna.bsc"
-# ADD BSC32 /nologo /o"DNA_makesdna.bsc"
-LINK32=link.exe
-# ADD BASE LINK32 BLI_blenlib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:"DNA_makesdna.pdb" /debug /machine:I386 /out:"..\..\..\source\blender\makesdna\debug\DNA_makesdna.exe" /pdbtype:sept /libpath:"..\..\..\..\obj\windows\blender\blenlib\debug"
-# SUBTRACT BASE LINK32 /pdb:none
-# ADD LINK32 libguardedalloc.a /nologo /subsystem:console /pdb:"DNA_makesdna.pdb" /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\..\lib\windows\guardedalloc\lib"
-# SUBTRACT LINK32 /pdb:none
-# Begin Special Build Tool
-SOURCE="$(InputPath)"
-PostBuild_Cmds=CD ..\..\..\source\blender\makesdna\intern\ DNA_makesdna.exe dna.c
-# End Special Build Tool
-
-!ENDIF
-
-# Begin Target
-
-# Name "DNA_makesdna - Win32 Release"
-# Name "DNA_makesdna - Win32 Debug"
-# Name "DNA_makesdna - Win32 MT DLL Release"
-# Name "DNA_makesdna - Win32 MT DLL Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\makesdna\intern\makesdna.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\makesdna\DNA_action_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\makesdna\DNA_actuator_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\makesdna\DNA_armature_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\makesdna\DNA_camera_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\makesdna\DNA_constraint_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\makesdna\DNA_controller_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\makesdna\DNA_curve_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\makesdna\DNA_customdata_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\makesdna\DNA_documentation.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\makesdna\DNA_effect_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\makesdna\DNA_fileglobal_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\makesdna\DNA_group_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\makesdna\DNA_ID.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\makesdna\DNA_image_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\makesdna\DNA_ipo_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\makesdna\DNA_key_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\makesdna\DNA_lamp_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\makesdna\DNA_lattice_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\makesdna\DNA_listBase.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\makesdna\DNA_material_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\makesdna\DNA_mesh_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\makesdna\DNA_meshdata_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\makesdna\DNA_meta_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\makesdna\DNA_modifier_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\makesdna\DNA_nla_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\makesdna\DNA_object_force.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\makesdna\DNA_object_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\makesdna\DNA_oops_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\makesdna\DNA_packedFile_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\makesdna\DNA_property_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\makesdna\DNA_radio_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\makesdna\DNA_scene_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\makesdna\DNA_screen_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\makesdna\DNA_scriptlink_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\makesdna\DNA_sdna_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\makesdna\DNA_sensor_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\makesdna\DNA_sequence_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\makesdna\DNA_sound_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\makesdna\DNA_space_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\makesdna\DNA_text_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\makesdna\DNA_texture_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\makesdna\DNA_userdef_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\makesdna\DNA_vec_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\makesdna\DNA_vfont_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\makesdna\DNA_view2d_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\makesdna\DNA_view3d_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\makesdna\DNA_wave_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\makesdna\DNA_world_types.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="DNA_makesdna" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=DNA_makesdna - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "DNA_makesdna.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "DNA_makesdna.mak" CFG="DNA_makesdna - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "DNA_makesdna - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "DNA_makesdna - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "DNA_makesdna - Win32 MT DLL Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "DNA_makesdna - Win32 MT DLL Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "DNA_makesdna - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\source\blender\makesdna\intern"
+# PROP Intermediate_Dir "..\..\..\obj\windows\blender\makesdna"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo /o"DNA_makesdna.bsc"
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 libguardedalloc.a BLI_blenlib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:"DNA_makesdna.pdb" /machine:I386 /nodefaultlib:"libc.lib" /libpath:"..\..\..\..\lib\windows\guardedalloc\lib" /libpath:"..\..\..\obj\windows\blender\blenlib"
+# SUBTRACT LINK32 /pdb:none
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Building DNA
+PostBuild_Cmds=CD ..\..\..\source\blender\makesdna\intern\ DNA_makesdna.exe dna.c
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "DNA_makesdna - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\source\blender\makesdna\intern"
+# PROP Intermediate_Dir "..\..\..\obj\windows\blender\makesdna\debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /J /FD /GZ /c
+# SUBTRACT CPP /Fr
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo /o"DNA_makesdna.bsc"
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libguardedalloc.a BLI_blenlib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:"DNA_makesdna.pdb" /debug /machine:I386 /nodefaultlib:"libc.lib" /pdbtype:sept /libpath:"..\..\..\..\lib\windows\guardedalloc\lib\debug" /libpath:"..\..\..\obj\windows\blender\blenlib\debug"
+# SUBTRACT LINK32 /pdb:none
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=Building DNA
+PostBuild_Cmds=CD ..\..\..\source\blender\makesdna\intern\ DNA_makesdna.exe dna.c
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "DNA_makesdna - Win32 MT DLL Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "DNA_makesdna___Win32_MT_DLL_Release"
+# PROP BASE Intermediate_Dir "DNA_makesdna___Win32_MT_DLL_Release"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\source\blender\makesdna\intern"
+# PROP Intermediate_Dir "..\..\..\obj\windows\blender\makesdna\mtdll"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /J /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo /o"DNA_makesdna.bsc"
+# ADD BSC32 /nologo /o"DNA_makesdna.bsc"
+LINK32=link.exe
+# ADD BASE LINK32 BLI_blenlib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:"DNA_makesdna.pdb" /machine:I386 /out:"..\..\..\source\blender\makesdna\intern\DNA_makesdna.exe" /libpath:"..\..\..\..\obj\windows\blender\blenlib"
+# SUBTRACT BASE LINK32 /pdb:none
+# ADD LINK32 libguardedalloc.a /nologo /subsystem:console /pdb:"DNA_makesdna.pdb" /machine:I386 /libpath:"..\..\..\..\lib\windows\guardedalloc\lib" /libpath:"..\..\..\..\obj\windows\blender\blenlib"
+# SUBTRACT LINK32 /pdb:none
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Cmds=CD ..\..\..\source\blender\makesdna\intern\ DNA_makesdna.exe dna.c
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "DNA_makesdna - Win32 MT DLL Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "DNA_makesdna___Win32_MT_DLL_Debug"
+# PROP BASE Intermediate_Dir "DNA_makesdna___Win32_MT_DLL_Debug"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\source\blender\makesdna\intern"
+# PROP Intermediate_Dir "..\..\..\obj\windows\blender\makesdna\mtdll_debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /J /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /J /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo /o"DNA_makesdna.bsc"
+# ADD BSC32 /nologo /o"DNA_makesdna.bsc"
+LINK32=link.exe
+# ADD BASE LINK32 BLI_blenlib.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /pdb:"DNA_makesdna.pdb" /debug /machine:I386 /out:"..\..\..\source\blender\makesdna\debug\DNA_makesdna.exe" /pdbtype:sept /libpath:"..\..\..\..\obj\windows\blender\blenlib\debug"
+# SUBTRACT BASE LINK32 /pdb:none
+# ADD LINK32 libguardedalloc.a /nologo /subsystem:console /pdb:"DNA_makesdna.pdb" /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\..\lib\windows\guardedalloc\lib"
+# SUBTRACT LINK32 /pdb:none
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Cmds=CD ..\..\..\source\blender\makesdna\intern\ DNA_makesdna.exe dna.c
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "DNA_makesdna - Win32 Release"
+# Name "DNA_makesdna - Win32 Debug"
+# Name "DNA_makesdna - Win32 MT DLL Release"
+# Name "DNA_makesdna - Win32 MT DLL Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\makesdna\intern\makesdna.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\makesdna\DNA_action_types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\makesdna\DNA_actuator_types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\makesdna\DNA_armature_types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\makesdna\DNA_camera_types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\makesdna\DNA_constraint_types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\makesdna\DNA_controller_types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\makesdna\DNA_curve_types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\makesdna\DNA_customdata_types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\makesdna\DNA_documentation.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\makesdna\DNA_effect_types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\makesdna\DNA_fileglobal_types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\makesdna\DNA_group_types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\makesdna\DNA_ID.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\makesdna\DNA_image_types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\makesdna\DNA_ipo_types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\makesdna\DNA_key_types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\makesdna\DNA_lamp_types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\makesdna\DNA_lattice_types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\makesdna\DNA_listBase.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\makesdna\DNA_material_types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\makesdna\DNA_mesh_types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\makesdna\DNA_meshdata_types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\makesdna\DNA_meta_types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\makesdna\DNA_modifier_types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\makesdna\DNA_nla_types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\makesdna\DNA_object_force.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\makesdna\DNA_object_types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\makesdna\DNA_oops_types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\makesdna\DNA_packedFile_types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\makesdna\DNA_property_types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\makesdna\DNA_radio_types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\makesdna\DNA_scene_types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\makesdna\DNA_screen_types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\makesdna\DNA_scriptlink_types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\makesdna\DNA_sdna_types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\makesdna\DNA_sensor_types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\makesdna\DNA_sequence_types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\makesdna\DNA_sound_types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\makesdna\DNA_space_types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\makesdna\DNA_text_types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\makesdna\DNA_texture_types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\makesdna\DNA_userdef_types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\makesdna\DNA_vec_types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\makesdna\DNA_vfont_types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\makesdna\DNA_view2d_types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\makesdna\DNA_view3d_types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\makesdna\DNA_wave_types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\makesdna\DNA_world_types.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/projectfiles/blender/radiosity/BRA_radiosity.dsp b/projectfiles/blender/radiosity/BRA_radiosity.dsp
index be9e33e311f..4bae7c4e50f 100644
--- a/projectfiles/blender/radiosity/BRA_radiosity.dsp
+++ b/projectfiles/blender/radiosity/BRA_radiosity.dsp
@@ -1,133 +1,133 @@
-# Microsoft Developer Studio Project File - Name="BRA_radiosity" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=BRA_radiosity - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "BRA_radiosity.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "BRA_radiosity.mak" CFG="BRA_radiosity - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "BRA_radiosity - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "BRA_radiosity - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "BRA_radiosity - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\obj\windows\blender\radiosity"
-# PROP Intermediate_Dir "..\..\..\obj\windows\blender\radiosity"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-MTL=midl.exe
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\render\extern\include" /I "..\..\..\source\blender\radiosity\extern\include" /I "..\..\..\source\blender" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender\misc" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\render\intern\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "BRA_radiosity - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\obj\windows\blender\radiosity\debug"
-# PROP Intermediate_Dir "..\..\..\obj\windows\blender\radiosity\debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-MTL=midl.exe
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\render\extern\include" /I "..\..\..\source\blender\radiosity\extern\include" /I "..\..\..\source\blender" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender\misc" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\render\intern\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
-# SUBTRACT CPP /Fr
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ENDIF
-
-# Begin Target
-
-# Name "BRA_radiosity - Win32 Release"
-# Name "BRA_radiosity - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\radiosity\intern\source\raddisplay.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\radiosity\intern\source\radfactors.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\radiosity\intern\source\radio.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\radiosity\intern\source\radnode.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\radiosity\intern\source\radpostprocess.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\radiosity\intern\source\radpreprocess.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\radiosity\intern\source\radrender.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\radiosity\extern\include\radio.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\radiosity\extern\include\radio_types.h
-# End Source File
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="BRA_radiosity" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=BRA_radiosity - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "BRA_radiosity.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "BRA_radiosity.mak" CFG="BRA_radiosity - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "BRA_radiosity - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "BRA_radiosity - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "BRA_radiosity - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\obj\windows\blender\radiosity"
+# PROP Intermediate_Dir "..\..\..\obj\windows\blender\radiosity"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+MTL=midl.exe
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\render\extern\include" /I "..\..\..\source\blender\radiosity\extern\include" /I "..\..\..\source\blender" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender\misc" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\render\intern\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "BRA_radiosity - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\obj\windows\blender\radiosity\debug"
+# PROP Intermediate_Dir "..\..\..\obj\windows\blender\radiosity\debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+MTL=midl.exe
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\render\extern\include" /I "..\..\..\source\blender\radiosity\extern\include" /I "..\..\..\source\blender" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender\misc" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\render\intern\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
+# SUBTRACT CPP /Fr
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ENDIF
+
+# Begin Target
+
+# Name "BRA_radiosity - Win32 Release"
+# Name "BRA_radiosity - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\radiosity\intern\source\raddisplay.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\radiosity\intern\source\radfactors.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\radiosity\intern\source\radio.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\radiosity\intern\source\radnode.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\radiosity\intern\source\radpostprocess.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\radiosity\intern\source\radpreprocess.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\radiosity\intern\source\radrender.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\radiosity\extern\include\radio.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\radiosity\extern\include\radio_types.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/projectfiles/blender/render/BRE_render.dsp b/projectfiles/blender/render/BRE_render.dsp
index 7d29bce934c..2e41812071f 100644
--- a/projectfiles/blender/render/BRE_render.dsp
+++ b/projectfiles/blender/render/BRE_render.dsp
@@ -1,192 +1,192 @@
-# Microsoft Developer Studio Project File - Name="BRE_render" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=BRE_render - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "BRE_render.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "BRE_render.mak" CFG="BRE_render - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "BRE_render - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "BRE_render - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "BRE_render - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\obj\windows\blender\render"
-# PROP Intermediate_Dir "..\..\..\obj\windows\blender\render"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-MTL=midl.exe
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\..\lib\windows\sdl\include" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\kernel\gen_messaging" /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\blender\quicktime" /I "..\..\..\source\blender\blenloader" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender\misc" /I "..\..\..\source\kernel" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\radiosity\extern\include" /I "..\..\..\source\blender\render\intern\include" /I "..\..\..\source\blender\render\extern\include" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\python" /I "..\..\..\source\blender" /I "..\..\..\source\blender\yafray" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "WITH_QUICKTIME" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "BRE_render - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\obj\windows\blender\render\debug"
-# PROP Intermediate_Dir "..\..\..\obj\windows\blender\render\debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-MTL=midl.exe
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\..\lib\windows\sdl\include" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\kernel\gen_messaging" /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\blender\quicktime" /I "..\..\..\source\blender\blenloader" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender\misc" /I "..\..\..\source\kernel" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\radiosity\extern\include" /I "..\..\..\source\blender\render\intern\include" /I "..\..\..\source\blender\render\extern\include" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\python" /I "..\..\..\source\blender" /I "..\..\..\source\blender\yafray" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "WITH_QUICKTIME" /YX /J /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ENDIF
-
-# Begin Target
-
-# Name "BRE_render - Win32 Release"
-# Name "BRE_render - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\render\intern\source\convertblender.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\render\intern\source\envmap.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\render\intern\source\gammaCorrectionTables.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\render\intern\source\imagetexture.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\render\intern\source\initrender.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\render\intern\source\pipeline.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\render\intern\source\pixelblending.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\render\intern\source\pixelshading.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\render\intern\source\ray.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\render\intern\source\rendercore.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\render\intern\source\renderdatabase.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\render\intern\source\shadbuf.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\render\intern\source\texture.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\render\intern\source\zbuf.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\render\intern\include\edgeRender.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\render\intern\include\envmap.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\render\intern\include\gammaCorrectionTables.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\render\intern\include\initrender.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\render\intern\include\pixelblending.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\render\intern\include\pixelshading.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\render\intern\include\rendercore.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\render\intern\include\shadbuf.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\render\intern\include\texture.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\render\intern\include\zbuf.h
-# End Source File
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="BRE_render" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=BRE_render - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "BRE_render.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "BRE_render.mak" CFG="BRE_render - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "BRE_render - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "BRE_render - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "BRE_render - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\obj\windows\blender\render"
+# PROP Intermediate_Dir "..\..\..\obj\windows\blender\render"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+MTL=midl.exe
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\..\lib\windows\sdl\include" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\kernel\gen_messaging" /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\blender\quicktime" /I "..\..\..\source\blender\blenloader" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender\misc" /I "..\..\..\source\kernel" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\radiosity\extern\include" /I "..\..\..\source\blender\render\intern\include" /I "..\..\..\source\blender\render\extern\include" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\python" /I "..\..\..\source\blender" /I "..\..\..\source\blender\yafray" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "WITH_QUICKTIME" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "BRE_render - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\obj\windows\blender\render\debug"
+# PROP Intermediate_Dir "..\..\..\obj\windows\blender\render\debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+MTL=midl.exe
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\..\lib\windows\sdl\include" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\kernel\gen_messaging" /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\blender\quicktime" /I "..\..\..\source\blender\blenloader" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender\misc" /I "..\..\..\source\kernel" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\radiosity\extern\include" /I "..\..\..\source\blender\render\intern\include" /I "..\..\..\source\blender\render\extern\include" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\python" /I "..\..\..\source\blender" /I "..\..\..\source\blender\yafray" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "WITH_QUICKTIME" /YX /J /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ENDIF
+
+# Begin Target
+
+# Name "BRE_render - Win32 Release"
+# Name "BRE_render - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\render\intern\source\convertblender.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\render\intern\source\envmap.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\render\intern\source\gammaCorrectionTables.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\render\intern\source\imagetexture.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\render\intern\source\initrender.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\render\intern\source\pipeline.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\render\intern\source\pixelblending.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\render\intern\source\pixelshading.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\render\intern\source\ray.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\render\intern\source\rendercore.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\render\intern\source\renderdatabase.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\render\intern\source\shadbuf.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\render\intern\source\texture.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\render\intern\source\zbuf.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\render\intern\include\edgeRender.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\render\intern\include\envmap.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\render\intern\include\gammaCorrectionTables.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\render\intern\include\initrender.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\render\intern\include\pixelblending.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\render\intern\include\pixelshading.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\render\intern\include\rendercore.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\render\intern\include\shadbuf.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\render\intern\include\texture.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\render\intern\include\zbuf.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/projectfiles/blender/renderconverter/BRE_renderconverter.dsp b/projectfiles/blender/renderconverter/BRE_renderconverter.dsp
index 4b3729061a8..6f07a365069 100644
--- a/projectfiles/blender/renderconverter/BRE_renderconverter.dsp
+++ b/projectfiles/blender/renderconverter/BRE_renderconverter.dsp
@@ -1,102 +1,102 @@
-# Microsoft Developer Studio Project File - Name="BRE_renderconverter" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=BRE_renderconverter - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "BRE_renderconverter.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "BRE_renderconverter.mak" CFG="BRE_renderconverter - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "BRE_renderconverter - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "BRE_renderconverter - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "BRE_renderconverter - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\obj\windows\blender\renderconverter"
-# PROP Intermediate_Dir "..\..\..\obj\windows\blender\renderconverter"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\python" /I "..\..\..\source\blender\yafray" /I "..\..\..\source\blender\radiosity\extern\include" /I "..\..\..\source\blender\misc" /I "..\..\..\source\blender\renderconverter" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\render\extern\include" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD BASE RSC /l 0x413 /d "NDEBUG"
-# ADD RSC /l 0x413 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "BRE_renderconverter - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "BRE_renderconverter___Win32_Debug"
-# PROP BASE Intermediate_Dir "BRE_renderconverter___Win32_Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\obj\windows\blender\render\debug"
-# PROP Intermediate_Dir "..\..\..\obj\windows\blender\render\debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\python" /I "..\..\..\source\blender\yafray" /I "..\..\..\source\blender\radiosity\extern\include" /I "..\..\..\source\blender\misc" /I "..\..\..\source\blender\renderconverter" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\render\extern\include" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
-# ADD BASE RSC /l 0x413 /d "_DEBUG"
-# ADD RSC /l 0x413 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\..\obj\windows\blender\renderconverter\debug\BRE_renderconverter.lib"
-
-!ENDIF
-
-# Begin Target
-
-# Name "BRE_renderconverter - Win32 Release"
-# Name "BRE_renderconverter - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\renderconverter\intern\convertBlenderScene.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\renderconverter\RE_renderconverter.h
-# End Source File
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="BRE_renderconverter" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=BRE_renderconverter - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "BRE_renderconverter.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "BRE_renderconverter.mak" CFG="BRE_renderconverter - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "BRE_renderconverter - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "BRE_renderconverter - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "BRE_renderconverter - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\obj\windows\blender\renderconverter"
+# PROP Intermediate_Dir "..\..\..\obj\windows\blender\renderconverter"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\python" /I "..\..\..\source\blender\yafray" /I "..\..\..\source\blender\radiosity\extern\include" /I "..\..\..\source\blender\misc" /I "..\..\..\source\blender\renderconverter" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\render\extern\include" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD BASE RSC /l 0x413 /d "NDEBUG"
+# ADD RSC /l 0x413 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "BRE_renderconverter - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "BRE_renderconverter___Win32_Debug"
+# PROP BASE Intermediate_Dir "BRE_renderconverter___Win32_Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\obj\windows\blender\render\debug"
+# PROP Intermediate_Dir "..\..\..\obj\windows\blender\render\debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\python" /I "..\..\..\source\blender\yafray" /I "..\..\..\source\blender\radiosity\extern\include" /I "..\..\..\source\blender\misc" /I "..\..\..\source\blender\renderconverter" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\render\extern\include" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
+# ADD BASE RSC /l 0x413 /d "_DEBUG"
+# ADD RSC /l 0x413 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"..\..\..\obj\windows\blender\renderconverter\debug\BRE_renderconverter.lib"
+
+!ENDIF
+
+# Begin Target
+
+# Name "BRE_renderconverter - Win32 Release"
+# Name "BRE_renderconverter - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\renderconverter\intern\convertBlenderScene.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\renderconverter\RE_renderconverter.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/projectfiles/blender/src/BL_src.dsp b/projectfiles/blender/src/BL_src.dsp
index d6a1c3945e9..82bc14bc0a8 100644
--- a/projectfiles/blender/src/BL_src.dsp
+++ b/projectfiles/blender/src/BL_src.dsp
@@ -1,1040 +1,1040 @@
-# Microsoft Developer Studio Project File - Name="BL_src" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=BL_SRC - WIN32 DEBUG
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "BL_src.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "BL_src.mak" CFG="BL_SRC - WIN32 DEBUG"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "BL_src - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "BL_src - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "BL_src - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\obj\windows\blender\src"
-# PROP Intermediate_Dir "..\..\..\obj\windows\blender\src"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-MTL=midl.exe
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\..\lib\windows\sdl\include\\" /I "..\..\..\source\blender\img" /I "..\..\..\source\blender\renderui" /I "..\..\..\..\lib\windows\soundsystem\include\\" /I "..\..\..\..\lib\windows\python\include\python2.0\\" /I "..\..\..\..\lib\windows\bmfont\include" /I "..\..\..\source\blender\ftfont" /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\renderconverter" /I "..\..\..\source\blender\verify" /I "..\..\..\source\blender\readstreamglue" /I "..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\blender\blenloader" /I "..\..\..\source\blender\quicktime" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\misc" /I "..\..\..\source\blender\python" /I "..\..\..\source\blender\radiosity\extern\include" /I "..\..\..\source\blender\render\extern\include" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\gameengine\network" /I "..\..\..\..\lib\windows\decimation\include" /I "..\..\..\source\blender\blenpluginapi\\" /I "..\..\..\..\lib\windows\blenkey\include" /I "..\..\..\..\lib\windows\ghost\include" /I "..\..\..\..\lib\windows\bsp\include" /I "..\..\..\..\lib\windows\opennl\include" /I "..\..\..\intern\elbeem\extern" /I "..\..\..\..\lib\windows\memutil\include" /I "..\..\..\..\lib\windows\pthreads\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "_CONSOLE" /D "xGAMEBLENDER" /D "WITH_QUICKTIME" /D "INTERNATIONAL" /FR /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "BL_src - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\obj\windows\blender\src\debug"
-# PROP Intermediate_Dir "..\..\..\obj\windows\blender\src\debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-MTL=midl.exe
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\..\lib\windows\sdl\include\\" /I "..\..\..\source\blender\img" /I "..\..\..\source\blender\renderui" /I "..\..\..\..\lib\windows\soundsystem\include\\" /I "..\..\..\..\lib\windows\python\include\python2.0\\" /I "..\..\..\..\lib\windows\bmfont\include" /I "..\..\..\source\blender\ftfont" /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\renderconverter" /I "..\..\..\source\blender\verify" /I "..\..\..\source\blender\readstreamglue" /I "..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\blender\blenloader" /I "..\..\..\source\blender\quicktime" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\misc" /I "..\..\..\source\blender\python" /I "..\..\..\source\blender\radiosity\extern\include" /I "..\..\..\source\blender\render\extern\include" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\gameengine\network" /I "..\..\..\..\lib\windows\decimation\include" /I "..\..\..\source\blender\blenpluginapi\\" /I "..\..\..\..\lib\windows\blenkey\include" /I "..\..\..\..\lib\windows\ghost\include" /I "..\..\..\..\lib\windows\bsp\include" /I "..\..\..\..\lib\windows\opennl\include" /I "..\..\..\intern\elbeem\extern" /I "..\..\..\..\lib\windows\memutil\include" /I "..\..\..\..\lib\windows\pthreads\include" /D "WIN32" /D "_MBCS" /D "_LIB" /D "_CONSOLE" /D "xGAMEBLENDER" /D "WITH_QUICKTIME" /D "INTERNATIONAL" /U "_DEBUG" /J /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ENDIF
-
-# Begin Target
-
-# Name "BL_src - Win32 Release"
-# Name "BL_src - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\B.blend.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\Bfont.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\bfont.ttf.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\blenderbuttons.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\booleanops.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\booleanops_mesh.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\butspace.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\buttons_editing.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\buttons_logic.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\buttons_object.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\buttons_scene.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\buttons_script.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\buttons_shading.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\cmap.tga.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\cmovie.tga.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\cursors.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\makesdna\intern\dna.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\drawaction.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\drawarmature.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\drawdeps.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\drawimage.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\drawimasel.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\drawipo.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\drawmesh.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\drawnla.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\drawnode.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\drawobject.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\drawoops.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\drawscene.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\drawscript.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\drawseq.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\drawsound.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\drawtext.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\drawtime.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\drawview.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\edit.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\editaction.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\editarmature.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\editconstraint.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\editcurve.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\editdeform.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\editface.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\editfont.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\editgroup.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\editimasel.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\editipo.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\editipo_lib.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\editipo_mods.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\editkey.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\editlattice.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\editmball.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\editmesh.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\editmesh_add.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\editmesh_lib.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\editmesh_loop.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\editmesh_mods.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\editmesh_tools.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\editmode_undo.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\editnla.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\editnode.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\editobject.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\editoops.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\editscreen.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\editseq.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\editsima.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\editsound.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\edittime.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\editview.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\eventdebug.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\filesel.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\fluidsim.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\ghostwinlay.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\glutil.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\hddaudio.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\header_action.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\header_buttonswin.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\header_filesel.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\header_image.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\header_imasel.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\header_info.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\header_ipo.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\header_nla.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\header_node.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\header_oops.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\header_script.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\header_seq.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\header_sound.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\header_text.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\header_time.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\header_view3d.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\headerbuttons.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\imagepaint.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\imasel.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\interface.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\interface_draw.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\interface_icons.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\interface_panel.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\keyval.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\language.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\lorem.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\mainqueue.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\meshtools.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\multires.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\mywindow.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\oops.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\outliner.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\parametrizer.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\playanim.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\blenpluginapi\intern\pluginapi.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\poseobject.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\preview.blend.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\previewrender.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\renderwin.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\resources.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\retopo.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\scrarea.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\screendump.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\sculptmode.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\seqaudio.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\seqeffects.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\seqscopes.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\sequence.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\space.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\spacetypes.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\splash.jpg.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\swapbuffers.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\toets.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\toolbox.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\transform.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\transform_constraints.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\transform_conversions.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\transform_generics.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\transform_manipulator.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\transform_numinput.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\transform_snap.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\unwrapper.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\usiblender.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\view.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\vpaint.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\writeavicodec.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\writeimage.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\writemovie.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BDR_drawaction.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BDR_drawmesh.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BDR_drawobject.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BDR_editcurve.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BDR_editface.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BDR_editmball.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BDR_editobject.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BDR_sculptmode.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BDR_unwrapper.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BDR_vpaint.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_butspace.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_cursors.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_drawimage.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_drawoops.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_drawscene.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_drawscript.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_drawseq.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_drawtext.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_editaction.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_editarmature.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_editconstraint.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_editdeform.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_editfont.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_editgroup.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_editkey.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_editlattice.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_editmesh.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_editmode_undo.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_editnla.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_editoops.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_editsca.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_editseq.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_editsima.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_editsound.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_editview.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_fsmenu.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_gl.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_glutil.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_graphics.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_imasel.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_interface.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_keyval.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_language.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_mainqueue.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_meshtools.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_mywindow.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_oops.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_outliner.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_poseobject.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_previewrender.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_renderwin.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_resources.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_retopo.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_scrarea.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_screen.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_space.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_spacetypes.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_tbcallback.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_toets.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_toolbox.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_transform.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_usiblender.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_writeavicodec.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_writeimage.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BIF_writemovie.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\blendef.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BPI_script.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BSE_buttons.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BSE_drawimasel.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BSE_drawipo.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BSE_drawnla.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BSE_drawoops.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BSE_drawview.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BSE_edit.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BSE_editaction.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BSE_editaction_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BSE_editipo.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BSE_editipo_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BSE_editnla_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BSE_filesel.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BSE_headerbuttons.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BSE_seqaudio.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BSE_sequence.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BSE_time.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BSE_trans_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BSE_types.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\BSE_view.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\butspace.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\editmesh.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\multires.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\parametrizer.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\parametrizer_intern.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\include\transform.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\winlay.h
-# End Source File
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="BL_src" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=BL_SRC - WIN32 DEBUG
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "BL_src.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "BL_src.mak" CFG="BL_SRC - WIN32 DEBUG"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "BL_src - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "BL_src - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "BL_src - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\obj\windows\blender\src"
+# PROP Intermediate_Dir "..\..\..\obj\windows\blender\src"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+MTL=midl.exe
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\..\lib\windows\sdl\include\\" /I "..\..\..\source\blender\img" /I "..\..\..\source\blender\renderui" /I "..\..\..\..\lib\windows\soundsystem\include\\" /I "..\..\..\..\lib\windows\python\include\python2.0\\" /I "..\..\..\..\lib\windows\bmfont\include" /I "..\..\..\source\blender\ftfont" /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\renderconverter" /I "..\..\..\source\blender\verify" /I "..\..\..\source\blender\readstreamglue" /I "..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\blender\blenloader" /I "..\..\..\source\blender\quicktime" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\misc" /I "..\..\..\source\blender\python" /I "..\..\..\source\blender\radiosity\extern\include" /I "..\..\..\source\blender\render\extern\include" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\gameengine\network" /I "..\..\..\..\lib\windows\decimation\include" /I "..\..\..\source\blender\blenpluginapi\\" /I "..\..\..\..\lib\windows\blenkey\include" /I "..\..\..\..\lib\windows\ghost\include" /I "..\..\..\..\lib\windows\bsp\include" /I "..\..\..\..\lib\windows\opennl\include" /I "..\..\..\intern\elbeem\extern" /I "..\..\..\..\lib\windows\memutil\include" /I "..\..\..\..\lib\windows\pthreads\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "_CONSOLE" /D "xGAMEBLENDER" /D "WITH_QUICKTIME" /D "INTERNATIONAL" /FR /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "BL_src - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\obj\windows\blender\src\debug"
+# PROP Intermediate_Dir "..\..\..\obj\windows\blender\src\debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+MTL=midl.exe
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\..\lib\windows\sdl\include\\" /I "..\..\..\source\blender\img" /I "..\..\..\source\blender\renderui" /I "..\..\..\..\lib\windows\soundsystem\include\\" /I "..\..\..\..\lib\windows\python\include\python2.0\\" /I "..\..\..\..\lib\windows\bmfont\include" /I "..\..\..\source\blender\ftfont" /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\renderconverter" /I "..\..\..\source\blender\verify" /I "..\..\..\source\blender\readstreamglue" /I "..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\blender\blenloader" /I "..\..\..\source\blender\quicktime" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\misc" /I "..\..\..\source\blender\python" /I "..\..\..\source\blender\radiosity\extern\include" /I "..\..\..\source\blender\render\extern\include" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\gameengine\network" /I "..\..\..\..\lib\windows\decimation\include" /I "..\..\..\source\blender\blenpluginapi\\" /I "..\..\..\..\lib\windows\blenkey\include" /I "..\..\..\..\lib\windows\ghost\include" /I "..\..\..\..\lib\windows\bsp\include" /I "..\..\..\..\lib\windows\opennl\include" /I "..\..\..\intern\elbeem\extern" /I "..\..\..\..\lib\windows\memutil\include" /I "..\..\..\..\lib\windows\pthreads\include" /D "WIN32" /D "_MBCS" /D "_LIB" /D "_CONSOLE" /D "xGAMEBLENDER" /D "WITH_QUICKTIME" /D "INTERNATIONAL" /U "_DEBUG" /J /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ENDIF
+
+# Begin Target
+
+# Name "BL_src - Win32 Release"
+# Name "BL_src - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\B.blend.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\Bfont.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\bfont.ttf.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\blenderbuttons.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\booleanops.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\booleanops_mesh.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\butspace.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\buttons_editing.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\buttons_logic.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\buttons_object.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\buttons_scene.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\buttons_script.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\buttons_shading.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\cmap.tga.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\cmovie.tga.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\cursors.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\makesdna\intern\dna.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\drawaction.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\drawarmature.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\drawdeps.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\drawimage.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\drawimasel.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\drawipo.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\drawmesh.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\drawnla.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\drawnode.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\drawobject.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\drawoops.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\drawscene.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\drawscript.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\drawseq.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\drawsound.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\drawtext.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\drawtime.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\drawview.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\edit.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\editaction.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\editarmature.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\editconstraint.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\editcurve.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\editdeform.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\editface.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\editfont.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\editgroup.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\editimasel.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\editipo.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\editipo_lib.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\editipo_mods.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\editkey.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\editlattice.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\editmball.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\editmesh.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\editmesh_add.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\editmesh_lib.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\editmesh_loop.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\editmesh_mods.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\editmesh_tools.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\editmode_undo.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\editnla.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\editnode.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\editobject.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\editoops.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\editscreen.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\editseq.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\editsima.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\editsound.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\edittime.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\editview.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\eventdebug.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\filesel.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\fluidsim.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\ghostwinlay.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\glutil.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\hddaudio.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\header_action.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\header_buttonswin.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\header_filesel.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\header_image.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\header_imasel.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\header_info.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\header_ipo.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\header_nla.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\header_node.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\header_oops.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\header_script.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\header_seq.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\header_sound.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\header_text.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\header_time.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\header_view3d.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\headerbuttons.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\imagepaint.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\imasel.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\interface.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\interface_draw.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\interface_icons.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\interface_panel.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\keyval.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\language.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\lorem.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\mainqueue.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\meshtools.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\multires.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\mywindow.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\oops.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\outliner.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\parametrizer.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\playanim.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\blenpluginapi\intern\pluginapi.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\poseobject.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\preview.blend.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\previewrender.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\renderwin.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\resources.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\retopo.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\scrarea.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\screendump.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\sculptmode.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\seqaudio.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\seqeffects.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\seqscopes.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\sequence.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\space.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\spacetypes.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\splash.jpg.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\swapbuffers.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\toets.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\toolbox.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\transform.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\transform_constraints.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\transform_conversions.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\transform_generics.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\transform_manipulator.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\transform_numinput.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\transform_snap.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\unwrapper.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\usiblender.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\view.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\vpaint.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\writeavicodec.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\writeimage.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\writemovie.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BDR_drawaction.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BDR_drawmesh.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BDR_drawobject.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BDR_editcurve.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BDR_editface.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BDR_editmball.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BDR_editobject.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BDR_sculptmode.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BDR_unwrapper.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BDR_vpaint.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_butspace.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_cursors.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_drawimage.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_drawoops.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_drawscene.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_drawscript.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_drawseq.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_drawtext.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_editaction.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_editarmature.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_editconstraint.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_editdeform.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_editfont.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_editgroup.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_editkey.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_editlattice.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_editmesh.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_editmode_undo.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_editnla.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_editoops.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_editsca.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_editseq.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_editsima.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_editsound.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_editview.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_fsmenu.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_gl.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_glutil.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_graphics.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_imasel.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_interface.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_keyval.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_language.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_mainqueue.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_meshtools.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_mywindow.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_oops.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_outliner.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_poseobject.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_previewrender.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_renderwin.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_resources.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_retopo.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_scrarea.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_screen.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_space.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_spacetypes.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_tbcallback.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_toets.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_toolbox.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_transform.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_usiblender.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_writeavicodec.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_writeimage.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BIF_writemovie.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\blendef.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BPI_script.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BSE_buttons.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BSE_drawimasel.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BSE_drawipo.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BSE_drawnla.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BSE_drawoops.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BSE_drawview.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BSE_edit.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BSE_editaction.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BSE_editaction_types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BSE_editipo.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BSE_editipo_types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BSE_editnla_types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BSE_filesel.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BSE_headerbuttons.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BSE_seqaudio.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BSE_sequence.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BSE_time.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BSE_trans_types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BSE_types.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\BSE_view.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\butspace.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\editmesh.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\multires.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\parametrizer.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\parametrizer_intern.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\include\transform.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\winlay.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/projectfiles/blender/src/BL_src_cre.dsp b/projectfiles/blender/src/BL_src_cre.dsp
index 1705b45a96f..448f0962dcf 100644
--- a/projectfiles/blender/src/BL_src_cre.dsp
+++ b/projectfiles/blender/src/BL_src_cre.dsp
@@ -1,102 +1,102 @@
-# Microsoft Developer Studio Project File - Name="BL_src_cre" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=BL_src_cre - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "BL_src_cre.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "BL_src_cre.mak" CFG="BL_src_cre - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "BL_src_cre - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "BL_src_cre - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "BL_src_cre - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\obj\windows\blender\src_cre"
-# PROP Intermediate_Dir "..\..\..\obj\windows\blender\src_cre"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\renderui" /I "..\..\..\source\gameengine\soundsystem\\" /I "..\..\..\..\lib\windows\python\include\python2.2\\" /I "..\..\..\source\blender\renderconverter" /I "..\..\..\source\blender\verify" /I "..\..\..\source\blender\readstreamglue" /I "..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\blender\blenloader" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\misc" /I "..\..\..\source\blender\python" /I "..\..\..\source\blender\radiosity\extern\include" /I "..\..\..\source\blender\render\extern\include" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\gameengine\network" /I "..\..\..\..\lib\windows\decimation\include" /I "..\..\..\source\blender\blenpluginapi\\" /I "..\..\..\..\lib\windows\blenkey\include" /I "..\..\..\..\lib\windows\pthreads\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "_CONSOLE" /D "NAN_GAME" /D "GAME" /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\..\obj\windows\blender\src\BL_src_cre.lib"
-
-!ELSEIF "$(CFG)" == "BL_src_cre - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\obj\windows\blender\src_cre\debug"
-# PROP Intermediate_Dir "..\..\..\obj\windows\blender\src_cre\debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\renderui" /I "..\..\..\source\gameengine\soundsystem\\" /I "..\..\..\..\lib\windows\python\include\python2.2\\" /I "..\..\..\source\blender\renderconverter" /I "..\..\..\source\blender\verify" /I "..\..\..\source\blender\readstreamglue" /I "..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\blender\blenloader" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\misc" /I "..\..\..\source\blender\python" /I "..\..\..\source\blender\radiosity\extern\include" /I "..\..\..\source\blender\render\extern\include" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\gameengine\network" /I "..\..\..\..\lib\windows\decimation\include" /I "..\..\..\source\blender\blenpluginapi\\" /I "..\..\..\..\lib\windows\blenkey\include" /I "..\..\..\..\lib\windows\pthreads\include" /D "WIN32" /D "_MBCS" /D "_LIB" /D "_CONSOLE" /D "NAN_GAME" /D "GAME" /U "_DEBUG" /J /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\..\obj\windows\blender\src\debug\BL_src_cre.lib"
-
-!ENDIF
-
-# Begin Target
-
-# Name "BL_src_cre - Win32 Release"
-# Name "BL_src_cre - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\cre\license.jpeg.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\blender\src\cre\license_key.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="BL_src_cre" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=BL_src_cre - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "BL_src_cre.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "BL_src_cre.mak" CFG="BL_src_cre - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "BL_src_cre - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "BL_src_cre - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "BL_src_cre - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\obj\windows\blender\src_cre"
+# PROP Intermediate_Dir "..\..\..\obj\windows\blender\src_cre"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\renderui" /I "..\..\..\source\gameengine\soundsystem\\" /I "..\..\..\..\lib\windows\python\include\python2.2\\" /I "..\..\..\source\blender\renderconverter" /I "..\..\..\source\blender\verify" /I "..\..\..\source\blender\readstreamglue" /I "..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\blender\blenloader" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\misc" /I "..\..\..\source\blender\python" /I "..\..\..\source\blender\radiosity\extern\include" /I "..\..\..\source\blender\render\extern\include" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\gameengine\network" /I "..\..\..\..\lib\windows\decimation\include" /I "..\..\..\source\blender\blenpluginapi\\" /I "..\..\..\..\lib\windows\blenkey\include" /I "..\..\..\..\lib\windows\pthreads\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "_CONSOLE" /D "NAN_GAME" /D "GAME" /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"..\..\..\obj\windows\blender\src\BL_src_cre.lib"
+
+!ELSEIF "$(CFG)" == "BL_src_cre - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\obj\windows\blender\src_cre\debug"
+# PROP Intermediate_Dir "..\..\..\obj\windows\blender\src_cre\debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\renderui" /I "..\..\..\source\gameengine\soundsystem\\" /I "..\..\..\..\lib\windows\python\include\python2.2\\" /I "..\..\..\source\blender\renderconverter" /I "..\..\..\source\blender\verify" /I "..\..\..\source\blender\readstreamglue" /I "..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\blender\blenloader" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\misc" /I "..\..\..\source\blender\python" /I "..\..\..\source\blender\radiosity\extern\include" /I "..\..\..\source\blender\render\extern\include" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\gameengine\network" /I "..\..\..\..\lib\windows\decimation\include" /I "..\..\..\source\blender\blenpluginapi\\" /I "..\..\..\..\lib\windows\blenkey\include" /I "..\..\..\..\lib\windows\pthreads\include" /D "WIN32" /D "_MBCS" /D "_LIB" /D "_CONSOLE" /D "NAN_GAME" /D "GAME" /U "_DEBUG" /J /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"..\..\..\obj\windows\blender\src\debug\BL_src_cre.lib"
+
+!ENDIF
+
+# Begin Target
+
+# Name "BL_src_cre - Win32 Release"
+# Name "BL_src_cre - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\cre\license.jpeg.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\blender\src\cre\license_key.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# End Target
+# End Project
diff --git a/projectfiles/datatoc/datatoc.dsp b/projectfiles/datatoc/datatoc.dsp
index 4e55182bb2c..f5dd5348fda 100644
--- a/projectfiles/datatoc/datatoc.dsp
+++ b/projectfiles/datatoc/datatoc.dsp
@@ -1,100 +1,100 @@
-# Microsoft Developer Studio Project File - Name="datatoc" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=datatoc - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "datatoc.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "datatoc.mak" CFG="datatoc - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "datatoc - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "datatoc - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "datatoc - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-
-!ELSEIF "$(CFG)" == "datatoc - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
-# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-
-!ENDIF
-
-# Begin Target
-
-# Name "datatoc - Win32 Release"
-# Name "datatoc - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\release\datafiles\datatoc.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="datatoc" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=datatoc - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "datatoc.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "datatoc.mak" CFG="datatoc - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "datatoc - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "datatoc - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "datatoc - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+
+!ELSEIF "$(CFG)" == "datatoc - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+
+!ENDIF
+
+# Begin Target
+
+# Name "datatoc - Win32 Release"
+# Name "datatoc - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\release\datafiles\datatoc.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/projectfiles/gameengine/blenderhook/KX_blenderhook.dsp b/projectfiles/gameengine/blenderhook/KX_blenderhook.dsp
index c3657ed30c5..f43db4bf02b 100644
--- a/projectfiles/gameengine/blenderhook/KX_blenderhook.dsp
+++ b/projectfiles/gameengine/blenderhook/KX_blenderhook.dsp
@@ -1,161 +1,161 @@
-# Microsoft Developer Studio Project File - Name="KX_blenderhook" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=KX_blenderhook - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "KX_blenderhook.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "KX_blenderhook.mak" CFG="KX_blenderhook - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "KX_blenderhook - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "KX_blenderhook - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "KX_blenderhook - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\obj\windows\gameengine\blenderhook"
-# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\blenderhook"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GR /GX /O2 /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\extern\solid" /I "..\..\..\source\gameengine\physics\sumo" /I "..\..\..\source\gameengine\physics\common" /I "..\..\..\source\gameengine\rasterizer\ras_openglrasterizer" /I "..\..\..\..\lib\windows\python\include\python2.4" /I "..\..\..\..\lib\windows\string\include" /I "..\..\..\..\lib\windows\bmfont\include" /I "..\..\..\source\gameengine\Converter\\" /I "..\..\..\source\blender\imbuf" /I "..\..\..\..\lib\windows\moto\include" /I "..\..\..\source\gameengine\ketsji" /I "..\..\..\source\gameengine\physics\sumo\fuzzics\include" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\gameengine\rasterizer" /I "..\..\..\source\gameengine\gamelogic" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\gameengine\expressions" /I "..\..\..\source\gameengine\network" /I "..\..\..\source\gameengine\scenegraph" /I "..\..\..\source\sumo\include" /I "..\..\..\source\sumo\fuzzics\include" /I "..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\lib\windows\soundsystem\include" /I "..\..\..\source\blender\misc" /I "..\..\..\source\blender\blenloader" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "KX_blenderhook - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\obj\windows\gameengine\blenderhook\debug"
-# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\blenderhook\debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD CPP /nologo /MTd /W3 /Gm /GR /GX /Zi /Od /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\extern\solid" /I "..\..\..\source\gameengine\physics\sumo" /I "..\..\..\source\gameengine\physics\common" /I "..\..\..\source\gameengine\rasterizer\ras_openglrasterizer" /I "..\..\..\..\lib\windows\python\include\python2.4" /I "..\..\..\..\lib\windows\string\include" /I "..\..\..\..\lib\windows\bmfont\include" /I "..\..\..\source\gameengine\Converter\\" /I "..\..\..\source\blender\imbuf" /I "..\..\..\..\lib\windows\moto\include" /I "..\..\..\source\gameengine\ketsji" /I "..\..\..\source\gameengine\physics\sumo\fuzzics\include" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\gameengine\rasterizer" /I "..\..\..\source\gameengine\gamelogic" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\gameengine\expressions" /I "..\..\..\source\gameengine\network" /I "..\..\..\source\gameengine\scenegraph" /I "..\..\..\source\sumo\include" /I "..\..\..\source\sumo\fuzzics\include" /I "..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\lib\windows\soundsystem\include" /I "..\..\..\source\blender\misc" /I "..\..\..\source\blender\blenloader" /D "WIN32" /D "_MBCS" /D "_LIB" /U "_DEBUG" /YX /J /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ENDIF
-
-# Begin Target
-
-# Name "KX_blenderhook - Win32 Release"
-# Name "KX_blenderhook - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\BlenderRoutines\BL_KetsjiEmbedStart.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\BlenderRoutines\KX_BlenderCanvas.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\BlenderRoutines\KX_BlenderGL.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\BlenderRoutines\KX_BlenderInputDevice.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\BlenderRoutines\KX_BlenderKeyboardDevice.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\BlenderRoutines\KX_BlenderMouseDevice.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\BlenderRoutines\KX_BlenderPolyMaterial.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\BlenderRoutines\KX_BlenderRenderTools.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\BlenderRoutines\KX_BlenderSystem.cpp
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\BlenderRoutines\KX_BlenderCanvas.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\BlenderRoutines\KX_BlenderGL.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\BlenderRoutines\KX_BlenderInputDevice.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\BlenderRoutines\KX_BlenderKeyboardDevice.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\BlenderRoutines\KX_BlenderMouseDevice.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\BlenderRoutines\KX_BlenderPolyMaterial.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\BlenderRoutines\KX_BlenderRenderTools.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\BlenderRoutines\KX_BlenderSystem.h
-# End Source File
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="KX_blenderhook" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=KX_blenderhook - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "KX_blenderhook.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "KX_blenderhook.mak" CFG="KX_blenderhook - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "KX_blenderhook - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "KX_blenderhook - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "KX_blenderhook - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\obj\windows\gameengine\blenderhook"
+# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\blenderhook"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GR /GX /O2 /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\extern\solid" /I "..\..\..\source\gameengine\physics\sumo" /I "..\..\..\source\gameengine\physics\common" /I "..\..\..\source\gameengine\rasterizer\ras_openglrasterizer" /I "..\..\..\..\lib\windows\python\include\python2.4" /I "..\..\..\..\lib\windows\string\include" /I "..\..\..\..\lib\windows\bmfont\include" /I "..\..\..\source\gameengine\Converter\\" /I "..\..\..\source\blender\imbuf" /I "..\..\..\..\lib\windows\moto\include" /I "..\..\..\source\gameengine\ketsji" /I "..\..\..\source\gameengine\physics\sumo\fuzzics\include" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\gameengine\rasterizer" /I "..\..\..\source\gameengine\gamelogic" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\gameengine\expressions" /I "..\..\..\source\gameengine\network" /I "..\..\..\source\gameengine\scenegraph" /I "..\..\..\source\sumo\include" /I "..\..\..\source\sumo\fuzzics\include" /I "..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\lib\windows\soundsystem\include" /I "..\..\..\source\blender\misc" /I "..\..\..\source\blender\blenloader" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "KX_blenderhook - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\obj\windows\gameengine\blenderhook\debug"
+# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\blenderhook\debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD CPP /nologo /MTd /W3 /Gm /GR /GX /Zi /Od /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\extern\solid" /I "..\..\..\source\gameengine\physics\sumo" /I "..\..\..\source\gameengine\physics\common" /I "..\..\..\source\gameengine\rasterizer\ras_openglrasterizer" /I "..\..\..\..\lib\windows\python\include\python2.4" /I "..\..\..\..\lib\windows\string\include" /I "..\..\..\..\lib\windows\bmfont\include" /I "..\..\..\source\gameengine\Converter\\" /I "..\..\..\source\blender\imbuf" /I "..\..\..\..\lib\windows\moto\include" /I "..\..\..\source\gameengine\ketsji" /I "..\..\..\source\gameengine\physics\sumo\fuzzics\include" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\gameengine\rasterizer" /I "..\..\..\source\gameengine\gamelogic" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\gameengine\expressions" /I "..\..\..\source\gameengine\network" /I "..\..\..\source\gameengine\scenegraph" /I "..\..\..\source\sumo\include" /I "..\..\..\source\sumo\fuzzics\include" /I "..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\lib\windows\soundsystem\include" /I "..\..\..\source\blender\misc" /I "..\..\..\source\blender\blenloader" /D "WIN32" /D "_MBCS" /D "_LIB" /U "_DEBUG" /YX /J /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ENDIF
+
+# Begin Target
+
+# Name "KX_blenderhook - Win32 Release"
+# Name "KX_blenderhook - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\BlenderRoutines\BL_KetsjiEmbedStart.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\BlenderRoutines\KX_BlenderCanvas.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\BlenderRoutines\KX_BlenderGL.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\BlenderRoutines\KX_BlenderInputDevice.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\BlenderRoutines\KX_BlenderKeyboardDevice.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\BlenderRoutines\KX_BlenderMouseDevice.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\BlenderRoutines\KX_BlenderPolyMaterial.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\BlenderRoutines\KX_BlenderRenderTools.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\BlenderRoutines\KX_BlenderSystem.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\BlenderRoutines\KX_BlenderCanvas.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\BlenderRoutines\KX_BlenderGL.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\BlenderRoutines\KX_BlenderInputDevice.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\BlenderRoutines\KX_BlenderKeyboardDevice.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\BlenderRoutines\KX_BlenderMouseDevice.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\BlenderRoutines\KX_BlenderPolyMaterial.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\BlenderRoutines\KX_BlenderRenderTools.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\BlenderRoutines\KX_BlenderSystem.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/projectfiles/gameengine/converter/KX_converter.dsp b/projectfiles/gameengine/converter/KX_converter.dsp
index 96826d3004b..5eb80f58305 100644
--- a/projectfiles/gameengine/converter/KX_converter.dsp
+++ b/projectfiles/gameengine/converter/KX_converter.dsp
@@ -1,278 +1,278 @@
-# Microsoft Developer Studio Project File - Name="KX_converter" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=KX_converter - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "KX_converter.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "KX_converter.mak" CFG="KX_converter - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "KX_converter - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "KX_converter - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "KX_converter - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "KX_converter - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "KX_converter - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\obj\windows\gameengine\converter"
-# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\converter"
-# PROP Target_Dir ""
-MTL=midl.exe
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GR /GX /O2 /I "..\..\..\..\lib\windows\python\include\python2.4" /I "..\..\..\source\gameengine\physics\common" /I "..\..\..\source\gameengine\physics\BlOde" /I "..\..\..\source\gameengine\physics\Dummy" /I "..\..\..\extern\solid" /I "..\..\..\..\lib\windows\string\include" /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\gameengine\expressions" /I "..\..\..\source\gameengine\BlenderRoutines" /I "..\..\..\source\sumo\include" /I "..\..\..\..\lib\windows\moto\include" /I "..\..\..\source\\gameengine\physics\sumo\Fuzzics\include" /I "..\..\..\source\gameengine\Ketsji" /I "..\..\..\source\gameengine\SceneGraph" /I "..\..\..\source\gameengine\rasterizer" /I "..\..\..\source\gameengine\rasterizer\ras_openglrasterizer" /I "..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\lib\windows\soundsystem\include" /I "..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\source\gameengine\soundsystem\snd_blenderwavecache" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\gameengine\network" /I "..\..\..\source\gameengine\ketsji\kxnetwork" /I "..\..\..\source\gameengine\physics" /I "..\..\..\source\gameengine\physics\ode" /I "..\..\..\source\gameengine\physics\dummy" /I "..\..\..\source\gameengine\physics\sumo" /I "..\..\..\source\gameengine\physics\bullet" /I "..\..\..\extern\bullet\linearmath" /I "..\..\..\extern\bullet\Bulletdynamics" /I "..\..\..\extern\bullet\Bullet" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "USE_SUMO_SOLID" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "KX_converter - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\obj\windows\gameengine\converter\debug"
-# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\converter\debug"
-# PROP Target_Dir ""
-MTL=midl.exe
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GR /GX /Zi /Od /I "..\..\..\..\lib\windows\python\include\python2.4" /I "..\..\..\source\gameengine\physics\common" /I "..\..\..\source\gameengine\physics\BlOde" /I "..\..\..\source\gameengine\physics\Dummy" /I "..\..\..\extern\solid" /I "..\..\..\..\lib\windows\string\include" /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\gameengine\expressions" /I "..\..\..\source\gameengine\BlenderRoutines" /I "..\..\..\source\sumo\include" /I "..\..\..\..\lib\windows\moto\include" /I "..\..\..\source\\gameengine\physics\sumo\Fuzzics\include" /I "..\..\..\source\gameengine\Ketsji" /I "..\..\..\source\gameengine\SceneGraph" /I "..\..\..\source\gameengine\rasterizer" /I "..\..\..\source\gameengine\rasterizer\ras_openglrasterizer" /I "..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\lib\windows\soundsystem\include" /I "..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\source\gameengine\soundsystem\snd_blenderwavecache" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\gameengine\network" /I "..\..\..\source\gameengine\ketsji\kxnetwork" /I "..\..\..\source\gameengine\physics" /I "..\..\..\source\gameengine\physics\ode" /I "..\..\..\source\gameengine\physics\dummy" /I "..\..\..\source\gameengine\physics\sumo" /I "..\..\..\source\gameengine\physics\bullet" /I "..\..\..\extern\bullet\linearmath" /I "..\..\..\extern\bullet\Bulletdynamics" /I "..\..\..\extern\bullet\Bullet" /D "WIN32" /D "_MBCS" /D "_LIB" /D "USE_SUMO_SOLID" /U "_DEBUG" /YX /J /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "KX_converter - Win32 MT DLL Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "KX_converter___Win32_MT_DLL_Debug"
-# PROP BASE Intermediate_Dir "KX_converter___Win32_MT_DLL_Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\obj\windows\gameengine\converter\mtdll_debug"
-# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\converter\mtdll_debug"
-# PROP Target_Dir ""
-MTL=midl.exe
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /Gm /GX /ZI /Od /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\gameengine\expressions" /I "..\..\..\source\gameengine\BlenderRoutines" /I "..\..\..\source\sumo\include" /I "..\..\..\..\lib\windows\moto\include" /I "..\..\..\source\sumo\Fuzzics\include" /I "..\..\..\source\gameengine\Ketsji" /I "..\..\..\source\gameengine\SceneGraph" /I "..\..\..\source\gameengine\rasterizer" /I "..\..\..\source\gameengine\rasterizer\ras_openglrasterizer" /I "..\..\..\source\gameengine\gamelogic" /I "..\..\..\source\gameengine\soundsystem" /I "..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\source\gameengine\soundsystem\snd_blenderwavecache" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender" /I "..\..\..\source\blender\makesdna" /I "..\..\..\..\lib\windows\python\include\python1.5" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "..\..\..\..\lib\windows\python\include\python2.0" /I "..\..\..\source\gameengine\physics" /I "..\..\..\source\gameengine\physics\ode" /I "..\..\..\source\gameengine\physics\dummy" /I "..\..\..\source\gameengine\physics\sumo\include" /I "..\..\..\..\lib\windows\python\include\python2.2" /I "..\..\..\..\lib\windows\string\include" /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\gameengine\expressions" /I "..\..\..\source\gameengine\BlenderRoutines" /I "..\..\..\source\sumo\include" /I "..\..\..\..\lib\windows\moto\include" /I "..\..\..\source\sumo\Fuzzics\include" /I "..\..\..\source\gameengine\Ketsji" /I "..\..\..\source\gameengine\SceneGraph" /I "..\..\..\source\gameengine\rasterizer" /I "..\..\..\source\gameengine\rasterizer\ras_openglrasterizer" /I "..\..\..\source\gameengine\gamelogic" /I "..\..\..\source\gameengine\soundsystem" /I "..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\source\gameengine\soundsystem\snd_blenderwavecache" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\gameengine\network" /I "..\..\..\source\gameengine\ketsji\kxnetwork" /I "..\..\..\source\gameengine\physics\sumo" /I "..\..\..\source\gameengine\physics\sumo\fuzzics\include" /I "..\..\..\source\gameengine\physics\common" /I "..\..\..\source\gameengine\physics\BlOde" /D "WIN32" /D "_MBCS" /D "_LIB" /U "_DEBUG" /YX /J /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\gameengine\converter\debug\KX_converter.lib"
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "KX_converter - Win32 MT DLL Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "KX_converter___Win32_MT_DLL_Release"
-# PROP BASE Intermediate_Dir "KX_converter___Win32_MT_DLL_Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\obj\windows\gameengine\converter\mtdll"
-# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\converter\mtdll"
-# PROP Target_Dir ""
-MTL=midl.exe
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /GX /O2 /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\gameengine\expressions" /I "..\..\..\source\gameengine\BlenderRoutines" /I "..\..\..\source\sumo\include" /I "..\..\..\..\lib\windows\moto\include" /I "..\..\..\source\sumo\Fuzzics\include" /I "..\..\..\source\gameengine\Ketsji" /I "..\..\..\source\gameengine\SceneGraph" /I "..\..\..\source\gameengine\rasterizer" /I "..\..\..\source\gameengine\rasterizer\ras_openglrasterizer" /I "..\..\..\source\gameengine\gamelogic" /I "..\..\..\source\gameengine\soundsystem" /I "..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\source\gameengine\soundsystem\snd_blenderwavecache" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender" /I "..\..\..\source\blender\makesdna" /I "..\..\..\..\lib\windows\python\include\python2.0" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD CPP /nologo /MD /GX /O2 /I "..\..\..\..\lib\windows\python\include\python2.0" /I "..\..\..\source\gameengine\physics" /I "..\..\..\source\gameengine\physics\ode" /I "..\..\..\source\gameengine\physics\dummy" /I "..\..\..\source\gameengine\physics\sumo\include" /I "..\..\..\..\lib\windows\python\include\python2.2" /I "..\..\..\..\lib\windows\string\include" /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\gameengine\expressions" /I "..\..\..\source\gameengine\BlenderRoutines" /I "..\..\..\source\sumo\include" /I "..\..\..\..\lib\windows\moto\include" /I "..\..\..\source\sumo\Fuzzics\include" /I "..\..\..\source\gameengine\Ketsji" /I "..\..\..\source\gameengine\SceneGraph" /I "..\..\..\source\gameengine\rasterizer" /I "..\..\..\source\gameengine\rasterizer\ras_openglrasterizer" /I "..\..\..\source\gameengine\gamelogic" /I "..\..\..\source\gameengine\soundsystem" /I "..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\source\gameengine\soundsystem\snd_blenderwavecache" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\gameengine\network" /I "..\..\..\source\gameengine\ketsji\kxnetwork" /I "..\..\..\source\gameengine\physics\sumo" /I "..\..\..\source\gameengine\physics\sumo\fuzzics\include" /I "..\..\..\source\gameengine\physics\common" /I "..\..\..\source\gameengine\physics\BlOde" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\gameengine\converter\KX_converter.lib"
-# ADD LIB32 /nologo
-
-!ENDIF
-
-# Begin Target
-
-# Name "KX_converter - Win32 Release"
-# Name "KX_converter - Win32 Debug"
-# Name "KX_converter - Win32 MT DLL Debug"
-# Name "KX_converter - Win32 MT DLL Release"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Converter\BL_ActionActuator.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Converter\BL_ArmatureObject.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Converter\BL_BlenderDataConversion.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Converter\BL_DeformableGameObject.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Converter\BL_MeshDeformer.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Converter\BL_SkinDeformer.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Converter\BL_SkinMeshObject.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Converter\BlenderWorldInfo.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Physics\Bullet\CcdPhysicsController.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Physics\Bullet\CcdPhysicsEnvironment.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Converter\KX_BlenderScalarInterpolator.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Converter\KX_BlenderSceneConverter.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Converter\KX_ConvertActuators.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Converter\KX_ConvertControllers.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Converter\KX_ConvertProperties.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Converter\KX_ConvertSensors.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Converter\KX_IpoConvert.cpp
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Converter\BL_ActionActuator.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Converter\BL_ArmatureObject.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Converter\BL_BlenderDataConversion.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Converter\BL_DeformableGameObject.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Converter\BL_MeshDeformer.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Converter\BL_SkinDeformer.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Converter\BL_SkinMeshObject.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Converter\BlenderWorldInfo.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Converter\KX_BlenderScalarInterpolator.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Converter\KX_BlenderSceneConverter.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Converter\KX_ConvertActuators.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Converter\KX_ConvertControllers.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Converter\KX_ConvertProperties.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Converter\KX_ConvertSensors.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Converter\KX_IpoConvert.h
-# End Source File
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="KX_converter" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=KX_converter - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "KX_converter.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "KX_converter.mak" CFG="KX_converter - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "KX_converter - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "KX_converter - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "KX_converter - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "KX_converter - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "KX_converter - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\obj\windows\gameengine\converter"
+# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\converter"
+# PROP Target_Dir ""
+MTL=midl.exe
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GR /GX /O2 /I "..\..\..\..\lib\windows\python\include\python2.4" /I "..\..\..\source\gameengine\physics\common" /I "..\..\..\source\gameengine\physics\BlOde" /I "..\..\..\source\gameengine\physics\Dummy" /I "..\..\..\extern\solid" /I "..\..\..\..\lib\windows\string\include" /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\gameengine\expressions" /I "..\..\..\source\gameengine\BlenderRoutines" /I "..\..\..\source\sumo\include" /I "..\..\..\..\lib\windows\moto\include" /I "..\..\..\source\\gameengine\physics\sumo\Fuzzics\include" /I "..\..\..\source\gameengine\Ketsji" /I "..\..\..\source\gameengine\SceneGraph" /I "..\..\..\source\gameengine\rasterizer" /I "..\..\..\source\gameengine\rasterizer\ras_openglrasterizer" /I "..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\lib\windows\soundsystem\include" /I "..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\source\gameengine\soundsystem\snd_blenderwavecache" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\gameengine\network" /I "..\..\..\source\gameengine\ketsji\kxnetwork" /I "..\..\..\source\gameengine\physics" /I "..\..\..\source\gameengine\physics\ode" /I "..\..\..\source\gameengine\physics\dummy" /I "..\..\..\source\gameengine\physics\sumo" /I "..\..\..\source\gameengine\physics\bullet" /I "..\..\..\extern\bullet\linearmath" /I "..\..\..\extern\bullet\Bulletdynamics" /I "..\..\..\extern\bullet\Bullet" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "USE_SUMO_SOLID" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "KX_converter - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\obj\windows\gameengine\converter\debug"
+# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\converter\debug"
+# PROP Target_Dir ""
+MTL=midl.exe
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GR /GX /Zi /Od /I "..\..\..\..\lib\windows\python\include\python2.4" /I "..\..\..\source\gameengine\physics\common" /I "..\..\..\source\gameengine\physics\BlOde" /I "..\..\..\source\gameengine\physics\Dummy" /I "..\..\..\extern\solid" /I "..\..\..\..\lib\windows\string\include" /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\gameengine\expressions" /I "..\..\..\source\gameengine\BlenderRoutines" /I "..\..\..\source\sumo\include" /I "..\..\..\..\lib\windows\moto\include" /I "..\..\..\source\\gameengine\physics\sumo\Fuzzics\include" /I "..\..\..\source\gameengine\Ketsji" /I "..\..\..\source\gameengine\SceneGraph" /I "..\..\..\source\gameengine\rasterizer" /I "..\..\..\source\gameengine\rasterizer\ras_openglrasterizer" /I "..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\lib\windows\soundsystem\include" /I "..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\source\gameengine\soundsystem\snd_blenderwavecache" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\gameengine\network" /I "..\..\..\source\gameengine\ketsji\kxnetwork" /I "..\..\..\source\gameengine\physics" /I "..\..\..\source\gameengine\physics\ode" /I "..\..\..\source\gameengine\physics\dummy" /I "..\..\..\source\gameengine\physics\sumo" /I "..\..\..\source\gameengine\physics\bullet" /I "..\..\..\extern\bullet\linearmath" /I "..\..\..\extern\bullet\Bulletdynamics" /I "..\..\..\extern\bullet\Bullet" /D "WIN32" /D "_MBCS" /D "_LIB" /D "USE_SUMO_SOLID" /U "_DEBUG" /YX /J /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "KX_converter - Win32 MT DLL Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "KX_converter___Win32_MT_DLL_Debug"
+# PROP BASE Intermediate_Dir "KX_converter___Win32_MT_DLL_Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\obj\windows\gameengine\converter\mtdll_debug"
+# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\converter\mtdll_debug"
+# PROP Target_Dir ""
+MTL=midl.exe
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /Gm /GX /ZI /Od /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\gameengine\expressions" /I "..\..\..\source\gameengine\BlenderRoutines" /I "..\..\..\source\sumo\include" /I "..\..\..\..\lib\windows\moto\include" /I "..\..\..\source\sumo\Fuzzics\include" /I "..\..\..\source\gameengine\Ketsji" /I "..\..\..\source\gameengine\SceneGraph" /I "..\..\..\source\gameengine\rasterizer" /I "..\..\..\source\gameengine\rasterizer\ras_openglrasterizer" /I "..\..\..\source\gameengine\gamelogic" /I "..\..\..\source\gameengine\soundsystem" /I "..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\source\gameengine\soundsystem\snd_blenderwavecache" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender" /I "..\..\..\source\blender\makesdna" /I "..\..\..\..\lib\windows\python\include\python1.5" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
+# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "..\..\..\..\lib\windows\python\include\python2.0" /I "..\..\..\source\gameengine\physics" /I "..\..\..\source\gameengine\physics\ode" /I "..\..\..\source\gameengine\physics\dummy" /I "..\..\..\source\gameengine\physics\sumo\include" /I "..\..\..\..\lib\windows\python\include\python2.2" /I "..\..\..\..\lib\windows\string\include" /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\gameengine\expressions" /I "..\..\..\source\gameengine\BlenderRoutines" /I "..\..\..\source\sumo\include" /I "..\..\..\..\lib\windows\moto\include" /I "..\..\..\source\sumo\Fuzzics\include" /I "..\..\..\source\gameengine\Ketsji" /I "..\..\..\source\gameengine\SceneGraph" /I "..\..\..\source\gameengine\rasterizer" /I "..\..\..\source\gameengine\rasterizer\ras_openglrasterizer" /I "..\..\..\source\gameengine\gamelogic" /I "..\..\..\source\gameengine\soundsystem" /I "..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\source\gameengine\soundsystem\snd_blenderwavecache" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\gameengine\network" /I "..\..\..\source\gameengine\ketsji\kxnetwork" /I "..\..\..\source\gameengine\physics\sumo" /I "..\..\..\source\gameengine\physics\sumo\fuzzics\include" /I "..\..\..\source\gameengine\physics\common" /I "..\..\..\source\gameengine\physics\BlOde" /D "WIN32" /D "_MBCS" /D "_LIB" /U "_DEBUG" /YX /J /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\gameengine\converter\debug\KX_converter.lib"
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "KX_converter - Win32 MT DLL Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "KX_converter___Win32_MT_DLL_Release"
+# PROP BASE Intermediate_Dir "KX_converter___Win32_MT_DLL_Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\obj\windows\gameengine\converter\mtdll"
+# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\converter\mtdll"
+# PROP Target_Dir ""
+MTL=midl.exe
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /GX /O2 /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\gameengine\expressions" /I "..\..\..\source\gameengine\BlenderRoutines" /I "..\..\..\source\sumo\include" /I "..\..\..\..\lib\windows\moto\include" /I "..\..\..\source\sumo\Fuzzics\include" /I "..\..\..\source\gameengine\Ketsji" /I "..\..\..\source\gameengine\SceneGraph" /I "..\..\..\source\gameengine\rasterizer" /I "..\..\..\source\gameengine\rasterizer\ras_openglrasterizer" /I "..\..\..\source\gameengine\gamelogic" /I "..\..\..\source\gameengine\soundsystem" /I "..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\source\gameengine\soundsystem\snd_blenderwavecache" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender" /I "..\..\..\source\blender\makesdna" /I "..\..\..\..\lib\windows\python\include\python2.0" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD CPP /nologo /MD /GX /O2 /I "..\..\..\..\lib\windows\python\include\python2.0" /I "..\..\..\source\gameengine\physics" /I "..\..\..\source\gameengine\physics\ode" /I "..\..\..\source\gameengine\physics\dummy" /I "..\..\..\source\gameengine\physics\sumo\include" /I "..\..\..\..\lib\windows\python\include\python2.2" /I "..\..\..\..\lib\windows\string\include" /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\blender\imbuf" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\gameengine\expressions" /I "..\..\..\source\gameengine\BlenderRoutines" /I "..\..\..\source\sumo\include" /I "..\..\..\..\lib\windows\moto\include" /I "..\..\..\source\sumo\Fuzzics\include" /I "..\..\..\source\gameengine\Ketsji" /I "..\..\..\source\gameengine\SceneGraph" /I "..\..\..\source\gameengine\rasterizer" /I "..\..\..\source\gameengine\rasterizer\ras_openglrasterizer" /I "..\..\..\source\gameengine\gamelogic" /I "..\..\..\source\gameengine\soundsystem" /I "..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\source\gameengine\soundsystem\snd_blenderwavecache" /I "..\..\..\source\blender\blenlib" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\gameengine\network" /I "..\..\..\source\gameengine\ketsji\kxnetwork" /I "..\..\..\source\gameengine\physics\sumo" /I "..\..\..\source\gameengine\physics\sumo\fuzzics\include" /I "..\..\..\source\gameengine\physics\common" /I "..\..\..\source\gameengine\physics\BlOde" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\gameengine\converter\KX_converter.lib"
+# ADD LIB32 /nologo
+
+!ENDIF
+
+# Begin Target
+
+# Name "KX_converter - Win32 Release"
+# Name "KX_converter - Win32 Debug"
+# Name "KX_converter - Win32 MT DLL Debug"
+# Name "KX_converter - Win32 MT DLL Release"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Converter\BL_ActionActuator.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Converter\BL_ArmatureObject.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Converter\BL_BlenderDataConversion.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Converter\BL_DeformableGameObject.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Converter\BL_MeshDeformer.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Converter\BL_SkinDeformer.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Converter\BL_SkinMeshObject.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Converter\BlenderWorldInfo.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Physics\Bullet\CcdPhysicsController.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Physics\Bullet\CcdPhysicsEnvironment.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Converter\KX_BlenderScalarInterpolator.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Converter\KX_BlenderSceneConverter.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Converter\KX_ConvertActuators.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Converter\KX_ConvertControllers.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Converter\KX_ConvertProperties.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Converter\KX_ConvertSensors.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Converter\KX_IpoConvert.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Converter\BL_ActionActuator.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Converter\BL_ArmatureObject.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Converter\BL_BlenderDataConversion.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Converter\BL_DeformableGameObject.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Converter\BL_MeshDeformer.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Converter\BL_SkinDeformer.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Converter\BL_SkinMeshObject.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Converter\BlenderWorldInfo.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Converter\KX_BlenderScalarInterpolator.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Converter\KX_BlenderSceneConverter.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Converter\KX_ConvertActuators.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Converter\KX_ConvertControllers.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Converter\KX_ConvertProperties.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Converter\KX_ConvertSensors.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Converter\KX_IpoConvert.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/projectfiles/gameengine/expression/EXP_expressions.dsp b/projectfiles/gameengine/expression/EXP_expressions.dsp
index 94ded903d41..7fa6e9da45e 100644
--- a/projectfiles/gameengine/expression/EXP_expressions.dsp
+++ b/projectfiles/gameengine/expression/EXP_expressions.dsp
@@ -1,302 +1,302 @@
-# Microsoft Developer Studio Project File - Name="EXP_expressions" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=EXP_expressions - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "EXP_expressions.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "EXP_expressions.mak" CFG="EXP_expressions - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "EXP_expressions - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "EXP_expressions - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "EXP_expressions - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "EXP_expressions - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "EXP_expressions - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\obj\windows\gameengine\expressions"
-# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\expressions"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GR /GX /O2 /I "..\..\..\intern\moto\include" /I "..\..\..\..\lib\windows\python\include\python2.4" /I "..\..\..\..\lib\windows\string\include" /I "..\..\..\source\kernel\gen_system" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "EXP_PYTHON_EMBEDDING" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "EXP_expressions - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\obj\windows\gameengine\expressions\debug"
-# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\expressions\debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GR /GX /Zi /Od /I "..\..\..\intern\moto\include" /I "..\..\..\..\lib\windows\python\include\python2.4" /I "..\..\..\..\lib\windows\string\include" /I "..\..\..\source\kernel\gen_system" /D "WIN32" /D "_MBCS" /D "_LIB" /D "EXP_PYTHON_EMBEDDING" /U "_DEBUG" /YX /J /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "EXP_expressions - Win32 MT DLL Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "EXP_expressions___Win32_MT_DLL_Debug"
-# PROP BASE Intermediate_Dir "EXP_expressions___Win32_MT_DLL_Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\obj\windows\gameengine\expressions\mtdll_debug"
-# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\expressions\mtdll_debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /MDd /Gm /GX /ZI /Od /I "..\..\..\source\kernel\gen_system" /I "..\..\..\..\lib\windows\python\include\python1.5" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "EXP_PYTHON_EMBEDDING" /YX /J /FD /GZ /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "..\..\..\..\lib\windows\python\include\python2.0" /I "..\..\..\..\..\lib\windows\python\include\python2.0" /I "..\..\..\..\lib\windows\python\include\python2.2" /I "..\..\..\..\lib\windows\string\include" /I "..\..\..\source\kernel\gen_system" /D "WIN32" /D "_MBCS" /D "_LIB" /D "EXP_PYTHON_EMBEDDING" /U "_DEBUG" /YX /J /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\gameengine\expressions\debug\EXP_expressions.lib"
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "EXP_expressions - Win32 MT DLL Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "EXP_expressions___Win32_MT_DLL_Release"
-# PROP BASE Intermediate_Dir "EXP_expressions___Win32_MT_DLL_Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\obj\windows\gameengine\expressions\mtdll"
-# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\expressions\mtdll"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /GX /O2 /I "..\..\..\source\kernel\gen_system" /I "..\..\..\..\lib\windows\python\include\python2.0" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "EXP_PYTHON_EMBEDDING" /YX /J /FD /c
-# ADD CPP /nologo /MD /GX /O2 /I "..\..\..\..\lib\windows\python\include\python2.0" /I "..\..\..\..\..\lib\windows\python\include\python2.0" /I "..\..\..\..\lib\windows\python\include\python2.2" /I "..\..\..\..\lib\windows\string\include" /I "..\..\..\source\kernel\gen_system" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "EXP_PYTHON_EMBEDDING" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\gameengine\expressions\EXP_expressions.lib"
-# ADD LIB32 /nologo
-
-!ENDIF
-
-# Begin Target
-
-# Name "EXP_expressions - Win32 Release"
-# Name "EXP_expressions - Win32 Debug"
-# Name "EXP_expressions - Win32 MT DLL Debug"
-# Name "EXP_expressions - Win32 MT DLL Release"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Expressions\BoolValue.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Expressions\ConstExpr.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Expressions\EmptyValue.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Expressions\ErrorValue.cpp
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Expressions\EXP_C-Api.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Expressions\Expression.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Expressions\FloatValue.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Expressions\IdentifierExpr.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Expressions\IfExpr.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Expressions\InputParser.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Expressions\IntValue.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Expressions\KX_HashedPtr.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Expressions\ListValue.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Expressions\Operator1Expr.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Expressions\Operator2Expr.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Expressions\PyObjectPlus.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Expressions\StringValue.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Expressions\Value.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Expressions\VectorValue.cpp
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Expressions\BoolValue.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Expressions\ConstExpr.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Expressions\EmptyValue.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Expressions\ErrorValue.h
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Expressions\EXP_C-Api.h"
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Expressions\Expression.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Expressions\FloatValue.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Expressions\IdentifierExpr.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Expressions\IfExpr.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Expressions\InputParser.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Expressions\IntValue.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Expressions\KX_HashedPtr.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Expressions\ListValue.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Expressions\Operator1Expr.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Expressions\Operator2Expr.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Expressions\PyObjectPlus.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Expressions\StringValue.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Expressions\Value.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Expressions\VectorValue.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Expressions\VoidValue.h
-# End Source File
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="EXP_expressions" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=EXP_expressions - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "EXP_expressions.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "EXP_expressions.mak" CFG="EXP_expressions - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "EXP_expressions - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "EXP_expressions - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "EXP_expressions - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "EXP_expressions - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "EXP_expressions - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\obj\windows\gameengine\expressions"
+# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\expressions"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GR /GX /O2 /I "..\..\..\intern\moto\include" /I "..\..\..\..\lib\windows\python\include\python2.4" /I "..\..\..\..\lib\windows\string\include" /I "..\..\..\source\kernel\gen_system" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "EXP_PYTHON_EMBEDDING" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "EXP_expressions - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\obj\windows\gameengine\expressions\debug"
+# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\expressions\debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GR /GX /Zi /Od /I "..\..\..\intern\moto\include" /I "..\..\..\..\lib\windows\python\include\python2.4" /I "..\..\..\..\lib\windows\string\include" /I "..\..\..\source\kernel\gen_system" /D "WIN32" /D "_MBCS" /D "_LIB" /D "EXP_PYTHON_EMBEDDING" /U "_DEBUG" /YX /J /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "EXP_expressions - Win32 MT DLL Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "EXP_expressions___Win32_MT_DLL_Debug"
+# PROP BASE Intermediate_Dir "EXP_expressions___Win32_MT_DLL_Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\obj\windows\gameengine\expressions\mtdll_debug"
+# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\expressions\mtdll_debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /MDd /Gm /GX /ZI /Od /I "..\..\..\source\kernel\gen_system" /I "..\..\..\..\lib\windows\python\include\python1.5" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "EXP_PYTHON_EMBEDDING" /YX /J /FD /GZ /c
+# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "..\..\..\..\lib\windows\python\include\python2.0" /I "..\..\..\..\..\lib\windows\python\include\python2.0" /I "..\..\..\..\lib\windows\python\include\python2.2" /I "..\..\..\..\lib\windows\string\include" /I "..\..\..\source\kernel\gen_system" /D "WIN32" /D "_MBCS" /D "_LIB" /D "EXP_PYTHON_EMBEDDING" /U "_DEBUG" /YX /J /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\gameengine\expressions\debug\EXP_expressions.lib"
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "EXP_expressions - Win32 MT DLL Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "EXP_expressions___Win32_MT_DLL_Release"
+# PROP BASE Intermediate_Dir "EXP_expressions___Win32_MT_DLL_Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\obj\windows\gameengine\expressions\mtdll"
+# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\expressions\mtdll"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /GX /O2 /I "..\..\..\source\kernel\gen_system" /I "..\..\..\..\lib\windows\python\include\python2.0" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "EXP_PYTHON_EMBEDDING" /YX /J /FD /c
+# ADD CPP /nologo /MD /GX /O2 /I "..\..\..\..\lib\windows\python\include\python2.0" /I "..\..\..\..\..\lib\windows\python\include\python2.0" /I "..\..\..\..\lib\windows\python\include\python2.2" /I "..\..\..\..\lib\windows\string\include" /I "..\..\..\source\kernel\gen_system" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "EXP_PYTHON_EMBEDDING" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\gameengine\expressions\EXP_expressions.lib"
+# ADD LIB32 /nologo
+
+!ENDIF
+
+# Begin Target
+
+# Name "EXP_expressions - Win32 Release"
+# Name "EXP_expressions - Win32 Debug"
+# Name "EXP_expressions - Win32 MT DLL Debug"
+# Name "EXP_expressions - Win32 MT DLL Release"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Expressions\BoolValue.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Expressions\ConstExpr.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Expressions\EmptyValue.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Expressions\ErrorValue.cpp
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Expressions\EXP_C-Api.cpp"
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Expressions\Expression.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Expressions\FloatValue.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Expressions\IdentifierExpr.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Expressions\IfExpr.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Expressions\InputParser.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Expressions\IntValue.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Expressions\KX_HashedPtr.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Expressions\ListValue.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Expressions\Operator1Expr.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Expressions\Operator2Expr.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Expressions\PyObjectPlus.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Expressions\StringValue.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Expressions\Value.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Expressions\VectorValue.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Expressions\BoolValue.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Expressions\ConstExpr.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Expressions\EmptyValue.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Expressions\ErrorValue.h
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Expressions\EXP_C-Api.h"
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Expressions\Expression.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Expressions\FloatValue.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Expressions\IdentifierExpr.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Expressions\IfExpr.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Expressions\InputParser.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Expressions\IntValue.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Expressions\KX_HashedPtr.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Expressions\ListValue.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Expressions\Operator1Expr.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Expressions\Operator2Expr.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Expressions\PyObjectPlus.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Expressions\StringValue.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Expressions\Value.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Expressions\VectorValue.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Expressions\VoidValue.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/projectfiles/gameengine/gamelogic/SCA_gamelogic.dsp b/projectfiles/gameengine/gamelogic/SCA_gamelogic.dsp
index 45be1cf2772..fcdbf33a80c 100644
--- a/projectfiles/gameengine/gamelogic/SCA_gamelogic.dsp
+++ b/projectfiles/gameengine/gamelogic/SCA_gamelogic.dsp
@@ -1,406 +1,406 @@
-# Microsoft Developer Studio Project File - Name="SCA_GameLogic" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=SCA_GameLogic - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "SCA_GameLogic.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "SCA_GameLogic.mak" CFG="SCA_GameLogic - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "SCA_GameLogic - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "SCA_GameLogic - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "SCA_GameLogic - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "SCA_GameLogic - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "SCA_GameLogic - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\obj\windows\gameengine\gamelogic"
-# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\gamelogic"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GR /GX /O2 /I "..\..\..\..\lib\windows\python\include\python2.4" /I "..\..\..\..\lib\windows\string\include" /I "..\..\..\..\lib\windows\sdl\include" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\gameengine\expressions" /I "..\..\..\..\lib\windows\moto\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "EXP_PYTHON_EMBEDDING" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "SCA_GameLogic - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "SCA_GameLogic___Win32_Debug"
-# PROP BASE Intermediate_Dir "SCA_GameLogic___Win32_Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\obj\windows\gameengine\gamelogic\debug"
-# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\gamelogic\debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GR /GX /Zi /Od /I "..\..\..\..\lib\windows\python\include\python2.4" /I "..\..\..\..\lib\windows\string\include" /I "..\..\..\..\lib\windows\sdl\include" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\gameengine\expressions" /I "..\..\..\..\lib\windows\moto\include" /D "WIN32" /D "_MBCS" /D "_LIB" /D "EXP_PYTHON_EMBEDDING" /U "_DEBUG" /YX /J /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "SCA_GameLogic - Win32 MT DLL Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "SCA_GameLogic___Win32_MT_DLL_Debug"
-# PROP BASE Intermediate_Dir "SCA_GameLogic___Win32_MT_DLL_Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\obj\windows\gameengine\gamelogic\mtdll_debug"
-# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\gamelogic\mtdll_debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /Gm /GX /ZI /Od /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\gameengine\expressions" /I "..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\lib\windows\python\include\python1.5" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "EXP_PYTHON_EMBEDDING" /YX /J /FD /GZ /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "..\..\..\..\lib\windows\python\include\python2.4" /I "..\..\..\..\lib\windows\string\include" /I "..\..\..\..\lib\windows\sdl\include" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\gameengine\expressions" /I "..\..\..\..\lib\windows\moto\include" /D "WIN32" /D "_MBCS" /D "_LIB" /D "EXP_PYTHON_EMBEDDING" /U "_DEBUG" /YX /J /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\gameengine\gamelogic\debug\SCA_GameLogic.lib"
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "SCA_GameLogic - Win32 MT DLL Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "SCA_GameLogic___Win32_MT_DLL_Release"
-# PROP BASE Intermediate_Dir "SCA_GameLogic___Win32_MT_DLL_Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\obj\windows\gameengine\gamelogic\mtdll"
-# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\gamelogic\mtdll"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /GX /O2 /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\gameengine\expressions" /I "..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\lib\windows\python\include\python2.0" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "EXP_PYTHON_EMBEDDING" /YX /J /FD /c
-# ADD CPP /nologo /MD /GX /O2 /I "..\..\..\..\lib\windows\python\include\python2.4" /I "..\..\..\..\lib\windows\string\include" /I "..\..\..\..\lib\windows\sdl\include" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\gameengine\expressions" /I "..\..\..\..\lib\windows\moto\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "EXP_PYTHON_EMBEDDING" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\gameengine\gamelogic\SCA_GameLogic.lib"
-# ADD LIB32 /nologo
-
-!ENDIF
-
-# Begin Target
-
-# Name "SCA_GameLogic - Win32 Release"
-# Name "SCA_GameLogic - Win32 Debug"
-# Name "SCA_GameLogic - Win32 MT DLL Debug"
-# Name "SCA_GameLogic - Win32 MT DLL Release"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Group "JoystickImp"
-
-# PROP Default_Filter "cpp"
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\Joystick\SCA_Joystick.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\Joystick\SCA_JoystickEvents.cpp
-# End Source File
-# End Group
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_AlwaysEventManager.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_AlwaysSensor.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_ANDController.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_EventManager.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_ExpressionController.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_IActuator.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_IController.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_IInputDevice.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_ILogicBrick.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_IObject.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_IScene.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_ISensor.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_JoystickManager.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_JoystickSensor.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_KeyboardManager.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_KeyboardSensor.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_LogicManager.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_MouseManager.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_MouseSensor.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_ORController.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_PropertyActuator.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_PropertyEventManager.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_PropertySensor.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_PythonController.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_RandomActuator.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_RandomEventManager.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_RandomNumberGenerator.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_RandomSensor.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_TimeEventManager.cpp
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Group "Joystick"
-
-# PROP Default_Filter "h"
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\Joystick\SCA_Joystick.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\Joystick\SCA_JoystickDefines.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\Joystick\SCA_JoystickPrivate.h
-# End Source File
-# End Group
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_AlwaysEventManager.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_AlwaysSensor.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_ANDController.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_EventManager.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_ExpressionController.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_IActuator.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_IController.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_IInputDevice.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_ILogicBrick.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_IObject.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_IScene.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_ISensor.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_JoystickManager.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_JoystickSensor.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_KeyboardManager.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_KeyboardSensor.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_LogicManager.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_MouseManager.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_MouseSensor.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_ORController.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_PropertyActuator.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_PropertyEventManager.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_PropertySensor.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_PythonController.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_RandomActuator.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_RandomEventManager.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_RandomNumberGenerator.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_RandomSensor.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\GameLogic\SCA_TimeEventManager.h
-# End Source File
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="SCA_GameLogic" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=SCA_GameLogic - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "SCA_GameLogic.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "SCA_GameLogic.mak" CFG="SCA_GameLogic - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "SCA_GameLogic - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "SCA_GameLogic - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "SCA_GameLogic - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "SCA_GameLogic - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "SCA_GameLogic - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\obj\windows\gameengine\gamelogic"
+# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\gamelogic"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GR /GX /O2 /I "..\..\..\..\lib\windows\python\include\python2.4" /I "..\..\..\..\lib\windows\string\include" /I "..\..\..\..\lib\windows\sdl\include" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\gameengine\expressions" /I "..\..\..\..\lib\windows\moto\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "EXP_PYTHON_EMBEDDING" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "SCA_GameLogic - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "SCA_GameLogic___Win32_Debug"
+# PROP BASE Intermediate_Dir "SCA_GameLogic___Win32_Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\obj\windows\gameengine\gamelogic\debug"
+# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\gamelogic\debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GR /GX /Zi /Od /I "..\..\..\..\lib\windows\python\include\python2.4" /I "..\..\..\..\lib\windows\string\include" /I "..\..\..\..\lib\windows\sdl\include" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\gameengine\expressions" /I "..\..\..\..\lib\windows\moto\include" /D "WIN32" /D "_MBCS" /D "_LIB" /D "EXP_PYTHON_EMBEDDING" /U "_DEBUG" /YX /J /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "SCA_GameLogic - Win32 MT DLL Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "SCA_GameLogic___Win32_MT_DLL_Debug"
+# PROP BASE Intermediate_Dir "SCA_GameLogic___Win32_MT_DLL_Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\obj\windows\gameengine\gamelogic\mtdll_debug"
+# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\gamelogic\mtdll_debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /Gm /GX /ZI /Od /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\gameengine\expressions" /I "..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\lib\windows\python\include\python1.5" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "EXP_PYTHON_EMBEDDING" /YX /J /FD /GZ /c
+# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "..\..\..\..\lib\windows\python\include\python2.4" /I "..\..\..\..\lib\windows\string\include" /I "..\..\..\..\lib\windows\sdl\include" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\gameengine\expressions" /I "..\..\..\..\lib\windows\moto\include" /D "WIN32" /D "_MBCS" /D "_LIB" /D "EXP_PYTHON_EMBEDDING" /U "_DEBUG" /YX /J /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\gameengine\gamelogic\debug\SCA_GameLogic.lib"
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "SCA_GameLogic - Win32 MT DLL Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "SCA_GameLogic___Win32_MT_DLL_Release"
+# PROP BASE Intermediate_Dir "SCA_GameLogic___Win32_MT_DLL_Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\obj\windows\gameengine\gamelogic\mtdll"
+# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\gamelogic\mtdll"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /GX /O2 /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\gameengine\expressions" /I "..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\lib\windows\python\include\python2.0" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "EXP_PYTHON_EMBEDDING" /YX /J /FD /c
+# ADD CPP /nologo /MD /GX /O2 /I "..\..\..\..\lib\windows\python\include\python2.4" /I "..\..\..\..\lib\windows\string\include" /I "..\..\..\..\lib\windows\sdl\include" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\gameengine\expressions" /I "..\..\..\..\lib\windows\moto\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "EXP_PYTHON_EMBEDDING" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\gameengine\gamelogic\SCA_GameLogic.lib"
+# ADD LIB32 /nologo
+
+!ENDIF
+
+# Begin Target
+
+# Name "SCA_GameLogic - Win32 Release"
+# Name "SCA_GameLogic - Win32 Debug"
+# Name "SCA_GameLogic - Win32 MT DLL Debug"
+# Name "SCA_GameLogic - Win32 MT DLL Release"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Group "JoystickImp"
+
+# PROP Default_Filter "cpp"
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\Joystick\SCA_Joystick.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\Joystick\SCA_JoystickEvents.cpp
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_AlwaysEventManager.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_AlwaysSensor.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_ANDController.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_EventManager.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_ExpressionController.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_IActuator.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_IController.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_IInputDevice.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_ILogicBrick.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_IObject.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_IScene.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_ISensor.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_JoystickManager.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_JoystickSensor.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_KeyboardManager.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_KeyboardSensor.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_LogicManager.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_MouseManager.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_MouseSensor.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_ORController.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_PropertyActuator.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_PropertyEventManager.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_PropertySensor.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_PythonController.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_RandomActuator.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_RandomEventManager.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_RandomNumberGenerator.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_RandomSensor.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_TimeEventManager.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Group "Joystick"
+
+# PROP Default_Filter "h"
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\Joystick\SCA_Joystick.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\Joystick\SCA_JoystickDefines.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\Joystick\SCA_JoystickPrivate.h
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_AlwaysEventManager.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_AlwaysSensor.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_ANDController.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_EventManager.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_ExpressionController.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_IActuator.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_IController.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_IInputDevice.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_ILogicBrick.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_IObject.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_IScene.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_ISensor.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_JoystickManager.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_JoystickSensor.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_KeyboardManager.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_KeyboardSensor.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_LogicManager.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_MouseManager.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_MouseSensor.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_ORController.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_PropertyActuator.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_PropertyEventManager.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_PropertySensor.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_PythonController.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_RandomActuator.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_RandomEventManager.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_RandomNumberGenerator.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_RandomSensor.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\GameLogic\SCA_TimeEventManager.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/projectfiles/gameengine/gameplayer/axctl/GP_axctl.dsp b/projectfiles/gameengine/gameplayer/axctl/GP_axctl.dsp
index 99b6798bf59..56ba052b32d 100644
--- a/projectfiles/gameengine/gameplayer/axctl/GP_axctl.dsp
+++ b/projectfiles/gameengine/gameplayer/axctl/GP_axctl.dsp
@@ -1,253 +1,253 @@
-# Microsoft Developer Studio Project File - Name="GP_axctl" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=GP_axctl - Win32 MT DLL Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "GP_axctl.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "GP_axctl.mak" CFG="GP_axctl - Win32 MT DLL Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "GP_axctl - Win32 MT DLL Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "GP_axctl - Win32 MT DLL Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "GP_axctl - Win32 MT DLL Debug"
-
-# PROP BASE Use_MFC 2
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "GP_axctl___Win32_MT_DLL_Debug"
-# PROP BASE Intermediate_Dir "GP_axctl___Win32_MT_DLL_Debug"
-# PROP BASE Target_Ext "ocx"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 2
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\..\obj\windows\gameengine\gameplayer\axctl\mtdll_debug"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\gameplayer\axctl\mtdll_debug"
-# PROP Target_Ext "ocx"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\gameengine\gameplayer\common" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\sumo\Fuzzics\include" /I "..\..\..\..\..\lib\windows\python\include\python1.5" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_WINDLL" /D "_AFXDLL" /D "_MBCS" /D "_USRDLL" /FR /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\..\..\..\..\lib\windows\python\include\python2.2" /I "..\..\..\..\source\kernel\gen_messaging" /I "..\..\..\..\..\lib\windows\bmfont\include" /I "..\..\..\..\..\lib\windows\string\include" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\gameengine\ketsji" /I "..\..\..\..\source\gameengine\ketsji\kxnetwork" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\rasterizer\ras_openglrasterizer" /I "..\..\..\..\source\gameengine\scenegraph" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\gameengine\soundsystem" /I "..\..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\sumo\fuzzics\include" /I "..\..\..\..\..\lib\windows\openal\include" /I "..\..\..\..\source\gameengine\gameplayer\common" /I "../../../../source/blender/blenkernel" /I "../../../../source/blender/makesdna" /I "../../../../source/blender/blenlib" /I "../../../../source/blender/blenloader" /I "../../../../source/blender/render/extern/include" /I "../../../../source/blender/imbuf" /I "..\..\..\..\source\gameengine\converter" /I "..\..\..\..\source\gameengine\GamePlayer\common" /I "..\..\..\..\source\gameengine\GamePlayer\common\windows" /I "..\..\..\..\..\lib\windows\iksolver\include" /D "WIN32" /D "_WINDOWS" /D "_WINDLL" /D "_AFXDLL" /D "_MBCS" /D "_USRDLL" /U "_DEBUG" /YX /FD /GZ /c
-# SUBTRACT CPP /Fr
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG" /d "_AFXDLL"
-# ADD RSC /l 0x409 /d "_DEBUG" /d "_AFXDLL"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 opengl32.lib glu32.lib glaux.lib /nologo /subsystem:windows /dll /debug /machine:I386 /out:"Debug/ActiveXgp.ocx" /pdbtype:sept /libpath:"..\..\..\..\..\lib\windows\python\lib" /libpath:"..\..\..\..\..\lib\windows\openal\lib\lib_release"
-# SUBTRACT BASE LINK32 /nodefaultlib
-# ADD LINK32 openal_static.lib libmoto.a libguardedalloc.a libbmfont.a libstring.a ws2_32.lib opengl32.lib glu32.lib glaux.lib dxguid.lib ole32.lib vfw32.lib libblenkey.a libeay32.lib libz.a libpng.a libjpeg.a odelib.lib /nologo /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"libc.lib" /nodefaultlib:"libcmt.lib" /nodefaultlib:"msvcrt.lib" /out:"..\..\..\..\obj\windows\debug\Blender3DPlugin.ocx" /pdbtype:sept /libpath:"..\..\..\..\..\lib\windows\ode\lib\mt_dll" /libpath:"..\..\..\..\..\lib\windows\openal\lib" /libpath:"..\..\..\..\..\lib\windows\guardedalloc\lib" /libpath:"..\..\..\..\..\lib\windows\moto\lib" /libpath:"../../../../../lib/windows/bmfont/lib" /libpath:"../../../../../lib/windows/string/lib" /libpath:"../../../../../lib/windows/python/lib" /libpath:"..\..\..\..\..\lib\windows\openssl\lib\mt_dll" /libpath:"..\..\..\..\..\lib\windows\jpeg\lib" /libpath:"..\..\..\..\..\lib\windows\bmfont/lib" /libpath:"..\..\..\..\..\lib\windows\string\lib" /libpath:"..\..\..\..\..\lib\windows\python\lib" /libpath:"..\..\..\..\..\lib\windows\openssl\lib\\" /libpath:"..\..\..\..\..\lib\windows\zlib\lib\\" /libpath:"..\..\..\..\..\lib\windows\blenkey\lib\\" /libpath:"..\..\..\..\..\lib\windows\png\lib"
-# SUBTRACT LINK32 /pdb:none
-
-!ELSEIF "$(CFG)" == "GP_axctl - Win32 MT DLL Release"
-
-# PROP BASE Use_MFC 2
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "GP_axctl___Win32_MT_DLL_Release"
-# PROP BASE Intermediate_Dir "GP_axctl___Win32_MT_DLL_Release"
-# PROP BASE Target_Ext "ocx"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 2
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\..\obj\windows\gameengine\gameplayer\axctl\mtdll"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\gameplayer\axctl\mtdll"
-# PROP Target_Ext "ocx"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_WINDLL" /D "_AFXDLL" /D "_MBCS" /D "_USRDLL" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\..\..\..\lib\windows\python\include\python2.0" /I "..\..\..\..\..\lib\windows\python\include\python2.2" /I "..\..\..\..\source\kernel\gen_messaging" /I "..\..\..\..\..\lib\windows\bmfont\include" /I "..\..\..\..\..\lib\windows\string\include" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\gameengine\ketsji" /I "..\..\..\..\source\gameengine\ketsji\kxnetwork" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\rasterizer\ras_openglrasterizer" /I "..\..\..\..\source\gameengine\scenegraph" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\gameengine\soundsystem" /I "..\..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\sumo\fuzzics\include" /I "..\..\..\..\..\lib\windows\openal\include" /I "..\..\..\..\source\gameengine\gameplayer\common" /I "../../../../source/blender/blenkernel" /I "../../../../source/blender/makesdna" /I "../../../../source/blender/blenlib" /I "../../../../source/blender/blenloader" /I "../../../../source/blender/render/extern/include" /I "../../../../source/blender/imbuf" /I "..\..\..\..\source\gameengine\converter" /I "..\..\..\..\source\gameengine\GamePlayer\common" /I "..\..\..\..\source\gameengine\GamePlayer\common\windows" /I "..\..\..\..\..\lib\windows\iksolver\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_WINDLL" /D "_AFXDLL" /D "_MBCS" /D "_USRDLL" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG" /d "_AFXDLL"
-# ADD RSC /l 0x409 /d "NDEBUG" /d "_AFXDLL"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 opengl32.lib glu32.lib glaux.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/ActiveXgp.ocx"
-# ADD LINK32 openal_static.lib libmoto.a libguardedalloc.a libbmfont.a libstring.a ws2_32.lib opengl32.lib glu32.lib glaux.lib dxguid.lib ole32.lib vfw32.lib libblenkey.a libeay32.lib libz.a libpng.a libjpeg.a odelib.lib /nologo /subsystem:windows /dll /machine:I386 /nodefaultlib:"libc.lib" /nodefaultlib:"libcmt.lib" /nodefaultlib:"msvcrtd.lib" /out:"..\..\..\..\obj\windows\Blender3DPlugin.ocx" /libpath:"..\..\..\..\..\lib\windows\ode\lib\mt_dll" /libpath:"..\..\..\..\..\lib\windows\openal\lib" /libpath:"..\..\..\..\..\lib\windows\guardedalloc\lib" /libpath:"..\..\..\..\..\lib\windows\moto\lib" /libpath:"..\..\..\..\..\lib\windows\bmfont/lib" /libpath:"..\..\..\..\..\lib\windows\string\lib" /libpath:"..\..\..\..\..\lib\windows\python\lib" /libpath:"..\..\..\..\..\lib\windows\openssl\lib\mt_dll" /libpath:"..\..\..\..\..\lib\windows\jpeg\lib" /libpath:"..\..\..\..\..\lib\windows\zlib\lib\\" /libpath:"..\..\..\..\..\lib\windows\blenkey\lib\\" /libpath:"..\..\..\..\..\lib\windows\png\lib"
-# SUBTRACT LINK32 /pdb:none
-
-!ENDIF
-
-# Begin Target
-
-# Name "GP_axctl - Win32 MT DLL Debug"
-# Name "GP_axctl - Win32 MT DLL Release"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\BlenderDataPathProperty.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\BlenderPlayer.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\BlenderPlayer.def
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\BlenderPlayer.odl
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\BlenderPlayer.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\BlenderPlayerCtl.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\BlenderPlayerPpg.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\CControlRefresher.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\blender\makesdna\intern\dna.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\MemoryResource.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\RawImageRsrc.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\SafeControl.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\StdAfx.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\blender\blenkernel\bad_level_call_stubs\stubs.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\BlenderDataPathProperty.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\BlenderPlayer.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\BlenderPlayerCtl.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\BlenderPlayerPpg.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\CControlRefresher.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\MemoryResource.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\RawImageRsrc.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\Resource.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\SafeControl.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\BlenderPlayer.ico
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\BlenderPlayerCtl.bmp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\splash.bmp
-# End Source File
-# End Group
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\ActiveXandNetscapeTest.html
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\BlenderPlayer.html
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\BlenderPlayerDuo.html
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\load.blend
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\logo_blender.raw
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\logo_blender3d.raw
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\logo_nan.raw
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\ReadMe.txt
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\ReadMeBuilding.txt
-# End Source File
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="GP_axctl" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=GP_axctl - Win32 MT DLL Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "GP_axctl.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "GP_axctl.mak" CFG="GP_axctl - Win32 MT DLL Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "GP_axctl - Win32 MT DLL Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "GP_axctl - Win32 MT DLL Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "GP_axctl - Win32 MT DLL Debug"
+
+# PROP BASE Use_MFC 2
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "GP_axctl___Win32_MT_DLL_Debug"
+# PROP BASE Intermediate_Dir "GP_axctl___Win32_MT_DLL_Debug"
+# PROP BASE Target_Ext "ocx"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 2
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\..\obj\windows\gameengine\gameplayer\axctl\mtdll_debug"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\gameplayer\axctl\mtdll_debug"
+# PROP Target_Ext "ocx"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\gameengine\gameplayer\common" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\sumo\Fuzzics\include" /I "..\..\..\..\..\lib\windows\python\include\python1.5" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_WINDLL" /D "_AFXDLL" /D "_MBCS" /D "_USRDLL" /FR /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\..\..\..\..\lib\windows\python\include\python2.2" /I "..\..\..\..\source\kernel\gen_messaging" /I "..\..\..\..\..\lib\windows\bmfont\include" /I "..\..\..\..\..\lib\windows\string\include" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\gameengine\ketsji" /I "..\..\..\..\source\gameengine\ketsji\kxnetwork" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\rasterizer\ras_openglrasterizer" /I "..\..\..\..\source\gameengine\scenegraph" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\gameengine\soundsystem" /I "..\..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\sumo\fuzzics\include" /I "..\..\..\..\..\lib\windows\openal\include" /I "..\..\..\..\source\gameengine\gameplayer\common" /I "../../../../source/blender/blenkernel" /I "../../../../source/blender/makesdna" /I "../../../../source/blender/blenlib" /I "../../../../source/blender/blenloader" /I "../../../../source/blender/render/extern/include" /I "../../../../source/blender/imbuf" /I "..\..\..\..\source\gameengine\converter" /I "..\..\..\..\source\gameengine\GamePlayer\common" /I "..\..\..\..\source\gameengine\GamePlayer\common\windows" /I "..\..\..\..\..\lib\windows\iksolver\include" /D "WIN32" /D "_WINDOWS" /D "_WINDLL" /D "_AFXDLL" /D "_MBCS" /D "_USRDLL" /U "_DEBUG" /YX /FD /GZ /c
+# SUBTRACT CPP /Fr
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "_DEBUG" /d "_AFXDLL"
+# ADD RSC /l 0x409 /d "_DEBUG" /d "_AFXDLL"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 opengl32.lib glu32.lib glaux.lib /nologo /subsystem:windows /dll /debug /machine:I386 /out:"Debug/ActiveXgp.ocx" /pdbtype:sept /libpath:"..\..\..\..\..\lib\windows\python\lib" /libpath:"..\..\..\..\..\lib\windows\openal\lib\lib_release"
+# SUBTRACT BASE LINK32 /nodefaultlib
+# ADD LINK32 openal_static.lib libmoto.a libguardedalloc.a libbmfont.a libstring.a ws2_32.lib opengl32.lib glu32.lib glaux.lib dxguid.lib ole32.lib vfw32.lib libblenkey.a libeay32.lib libz.a libpng.a libjpeg.a odelib.lib /nologo /subsystem:windows /dll /debug /machine:I386 /nodefaultlib:"libc.lib" /nodefaultlib:"libcmt.lib" /nodefaultlib:"msvcrt.lib" /out:"..\..\..\..\obj\windows\debug\Blender3DPlugin.ocx" /pdbtype:sept /libpath:"..\..\..\..\..\lib\windows\ode\lib\mt_dll" /libpath:"..\..\..\..\..\lib\windows\openal\lib" /libpath:"..\..\..\..\..\lib\windows\guardedalloc\lib" /libpath:"..\..\..\..\..\lib\windows\moto\lib" /libpath:"../../../../../lib/windows/bmfont/lib" /libpath:"../../../../../lib/windows/string/lib" /libpath:"../../../../../lib/windows/python/lib" /libpath:"..\..\..\..\..\lib\windows\openssl\lib\mt_dll" /libpath:"..\..\..\..\..\lib\windows\jpeg\lib" /libpath:"..\..\..\..\..\lib\windows\bmfont/lib" /libpath:"..\..\..\..\..\lib\windows\string\lib" /libpath:"..\..\..\..\..\lib\windows\python\lib" /libpath:"..\..\..\..\..\lib\windows\openssl\lib\\" /libpath:"..\..\..\..\..\lib\windows\zlib\lib\\" /libpath:"..\..\..\..\..\lib\windows\blenkey\lib\\" /libpath:"..\..\..\..\..\lib\windows\png\lib"
+# SUBTRACT LINK32 /pdb:none
+
+!ELSEIF "$(CFG)" == "GP_axctl - Win32 MT DLL Release"
+
+# PROP BASE Use_MFC 2
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "GP_axctl___Win32_MT_DLL_Release"
+# PROP BASE Intermediate_Dir "GP_axctl___Win32_MT_DLL_Release"
+# PROP BASE Target_Ext "ocx"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 2
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\..\obj\windows\gameengine\gameplayer\axctl\mtdll"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\gameplayer\axctl\mtdll"
+# PROP Target_Ext "ocx"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_WINDLL" /D "_AFXDLL" /D "_MBCS" /D "_USRDLL" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\..\..\..\lib\windows\python\include\python2.0" /I "..\..\..\..\..\lib\windows\python\include\python2.2" /I "..\..\..\..\source\kernel\gen_messaging" /I "..\..\..\..\..\lib\windows\bmfont\include" /I "..\..\..\..\..\lib\windows\string\include" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\gameengine\ketsji" /I "..\..\..\..\source\gameengine\ketsji\kxnetwork" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\rasterizer\ras_openglrasterizer" /I "..\..\..\..\source\gameengine\scenegraph" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\gameengine\soundsystem" /I "..\..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\sumo\fuzzics\include" /I "..\..\..\..\..\lib\windows\openal\include" /I "..\..\..\..\source\gameengine\gameplayer\common" /I "../../../../source/blender/blenkernel" /I "../../../../source/blender/makesdna" /I "../../../../source/blender/blenlib" /I "../../../../source/blender/blenloader" /I "../../../../source/blender/render/extern/include" /I "../../../../source/blender/imbuf" /I "..\..\..\..\source\gameengine\converter" /I "..\..\..\..\source\gameengine\GamePlayer\common" /I "..\..\..\..\source\gameengine\GamePlayer\common\windows" /I "..\..\..\..\..\lib\windows\iksolver\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_WINDLL" /D "_AFXDLL" /D "_MBCS" /D "_USRDLL" /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "NDEBUG" /d "_AFXDLL"
+# ADD RSC /l 0x409 /d "NDEBUG" /d "_AFXDLL"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 opengl32.lib glu32.lib glaux.lib /nologo /subsystem:windows /dll /machine:I386 /out:"Release/ActiveXgp.ocx"
+# ADD LINK32 openal_static.lib libmoto.a libguardedalloc.a libbmfont.a libstring.a ws2_32.lib opengl32.lib glu32.lib glaux.lib dxguid.lib ole32.lib vfw32.lib libblenkey.a libeay32.lib libz.a libpng.a libjpeg.a odelib.lib /nologo /subsystem:windows /dll /machine:I386 /nodefaultlib:"libc.lib" /nodefaultlib:"libcmt.lib" /nodefaultlib:"msvcrtd.lib" /out:"..\..\..\..\obj\windows\Blender3DPlugin.ocx" /libpath:"..\..\..\..\..\lib\windows\ode\lib\mt_dll" /libpath:"..\..\..\..\..\lib\windows\openal\lib" /libpath:"..\..\..\..\..\lib\windows\guardedalloc\lib" /libpath:"..\..\..\..\..\lib\windows\moto\lib" /libpath:"..\..\..\..\..\lib\windows\bmfont/lib" /libpath:"..\..\..\..\..\lib\windows\string\lib" /libpath:"..\..\..\..\..\lib\windows\python\lib" /libpath:"..\..\..\..\..\lib\windows\openssl\lib\mt_dll" /libpath:"..\..\..\..\..\lib\windows\jpeg\lib" /libpath:"..\..\..\..\..\lib\windows\zlib\lib\\" /libpath:"..\..\..\..\..\lib\windows\blenkey\lib\\" /libpath:"..\..\..\..\..\lib\windows\png\lib"
+# SUBTRACT LINK32 /pdb:none
+
+!ENDIF
+
+# Begin Target
+
+# Name "GP_axctl - Win32 MT DLL Debug"
+# Name "GP_axctl - Win32 MT DLL Release"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\BlenderDataPathProperty.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\BlenderPlayer.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\BlenderPlayer.def
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\BlenderPlayer.odl
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\BlenderPlayer.rc
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\BlenderPlayerCtl.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\BlenderPlayerPpg.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\CControlRefresher.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\blender\makesdna\intern\dna.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\MemoryResource.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\RawImageRsrc.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\SafeControl.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\StdAfx.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\blender\blenkernel\bad_level_call_stubs\stubs.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\BlenderDataPathProperty.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\BlenderPlayer.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\BlenderPlayerCtl.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\BlenderPlayerPpg.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\CControlRefresher.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\MemoryResource.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\RawImageRsrc.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\Resource.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\SafeControl.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\BlenderPlayer.ico
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\BlenderPlayerCtl.bmp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\splash.bmp
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\ActiveXandNetscapeTest.html
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\BlenderPlayer.html
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\BlenderPlayerDuo.html
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\load.blend
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\logo_blender.raw
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\logo_blender3d.raw
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\logo_nan.raw
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\ReadMe.txt
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\ActiveX\ReadMeBuilding.txt
+# End Source File
+# End Target
+# End Project
diff --git a/projectfiles/gameengine/gameplayer/common/GP_common.dsp b/projectfiles/gameengine/gameplayer/common/GP_common.dsp
index c1509608731..d3103c4f88a 100644
--- a/projectfiles/gameengine/gameplayer/common/GP_common.dsp
+++ b/projectfiles/gameengine/gameplayer/common/GP_common.dsp
@@ -1,255 +1,255 @@
-# Microsoft Developer Studio Project File - Name="GP_common" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=GP_common - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "GP_common.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "GP_common.mak" CFG="GP_common - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "GP_common - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "GP_common - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "GP_common - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "GP_common - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "GP_common - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\..\obj\windows\gameengine\gameplayer\common"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\gameplayer\common"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\..\..\lib\windows\python\include\python2.0" /I "..\..\..\..\..\lib\windows\python\include\python2.2" /I "..\..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\..\source\gameengine\Converter" /I "..\..\..\..\source\gameengine\soundsystem\snd_dummy" /I "..\..\..\..\..\lib\windows\bmfont\include" /I "..\..\..\..\..\lib\windows\string\include" /I "..\..\..\..\lib\windows\string\include" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\gameengine\ketsji" /I "..\..\..\..\source\gameengine\GamePlayer\common\\" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\ketsji\kxnetwork" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\rasterizer\ras_openglrasterizer" /I "..\..\..\..\source\gameengine\scenegraph" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\gameengine\soundsystem" /I "..\..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\sumo\fuzzics\include" /I "..\..\..\..\..\lib\windows\openal\include" /I "../../../../source/blender/blenkernel" /I "../../../../source/blender/makesdna" /I "../../../../source/blender/blenlib" /I "../../../../source/blender/blenloader" /I "../../../../source/blender/render/extern/include" /I "../../../../source/blender/imbuf" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "GP_common - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\..\obj\windows\gameengine\gameplayer\common\debug"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\gameplayer\common\debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\..\..\lib\windows\python\include\python2.2" /I "..\..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\..\source\gameengine\Converter" /I "..\..\..\..\source\gameengine\soundsystem\snd_dummy" /I "..\..\..\..\..\lib\windows\bmfont\include" /I "..\..\..\..\..\lib\windows\string\include" /I "..\..\..\..\lib\windows\string\include" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\gameengine\ketsji" /I "..\..\..\..\source\gameengine\GamePlayer\common\\" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\ketsji\kxnetwork" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\rasterizer\ras_openglrasterizer" /I "..\..\..\..\source\gameengine\scenegraph" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\gameengine\soundsystem" /I "..\..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\sumo\fuzzics\include" /I "..\..\..\..\..\lib\windows\openal\include" /I "../../../../source/blender/blenkernel" /I "../../../../source/blender/makesdna" /I "../../../../source/blender/blenlib" /I "../../../../source/blender/blenloader" /I "../../../../source/blender/render/extern/include" /I "../../../../source/blender/imbuf" /D "WIN32" /D "_MBCS" /D "_LIB" /U "_DEBUG" /YX /FD /GZ /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "GP_common - Win32 MT DLL Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "GP_common___Win32_MT_DLL_Debug"
-# PROP BASE Intermediate_Dir "GP_common___Win32_MT_DLL_Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\..\obj\windows\gameengine\gameplayer\common\mtdll_debug"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\gameplayer\common\mtdll_debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /MDd /Gm /GX /ZI /Od /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\gameengine\ketsji" /I "..\..\..\..\source\gameengine\ketsji\kxnetwork" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\rasterizer\ras_openglrasterizer" /I "..\..\..\..\source\gameengine\scenegraph" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\gameengine\soundsystem" /I "..\..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\sumo\fuzzics\include" /I "..\..\..\..\..\lib\windows\openal\include" /I "..\..\..\..\..\lib\windows\python\include\python1.5" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "..\..\..\..\..\lib\windows\python\include\python2.0" /I "..\..\..\..\..\lib\windows\python\include\python2.2" /I "..\..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\..\source\gameengine\Converter" /I "..\..\..\..\source\gameengine\soundsystem\snd_dummy" /I "..\..\..\..\..\lib\windows\bmfont\include" /I "..\..\..\..\..\lib\windows\string\include" /I "..\..\..\..\lib\windows\string\include" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\gameengine\ketsji" /I "..\..\..\..\source\gameengine\GamePlayer\common\\" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\ketsji\kxnetwork" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\rasterizer\ras_openglrasterizer" /I "..\..\..\..\source\gameengine\scenegraph" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\gameengine\soundsystem" /I "..\..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\sumo\fuzzics\include" /I "..\..\..\..\..\lib\windows\openal\include" /I "../../../../source/blender/blenkernel" /I "../../../../source/blender/makesdna" /I "../../../../source/blender/blenlib" /I "../../../../source/blender/blenloader" /I "../../../../source/blender/render/extern/include" /I "../../../../source/blender/imbuf" /D "WIN32" /D "_MBCS" /D "_LIB" /U "_DEBUG" /YX /FD /GZ /c
-# SUBTRACT CPP /Fr
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\gameengine\gameplayer\common\debug\GP_common.lib"
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "GP_common - Win32 MT DLL Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "GP_common___Win32_MT_DLL_Release"
-# PROP BASE Intermediate_Dir "GP_common___Win32_MT_DLL_Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\..\obj\windows\gameengine\gameplayer\common\mtdll"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\gameplayer\common\mtdll"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /GX /O2 /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\gameengine\ketsji" /I "..\..\..\..\source\gameengine\ketsji\kxnetwork" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\rasterizer\ras_openglrasterizer" /I "..\..\..\..\source\gameengine\scenegraph" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\gameengine\soundsystem" /I "..\..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\sumo\fuzzics\include" /I "..\..\..\..\..\lib\windows\openal\include" /I "..\..\..\..\..\lib\windows\python\include\python2.0" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD CPP /nologo /MD /GX /O2 /I "..\..\..\..\..\lib\windows\python\include\python1.5" /I "..\..\..\..\..\lib\windows\python\include\python2.0" /I "..\..\..\..\..\lib\windows\python\include\python2.2" /I "..\..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\..\source\gameengine\Converter" /I "..\..\..\..\source\gameengine\soundsystem\snd_dummy" /I "..\..\..\..\..\lib\windows\bmfont\include" /I "..\..\..\..\..\lib\windows\string\include" /I "..\..\..\..\lib\windows\string\include" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\gameengine\ketsji" /I "..\..\..\..\source\gameengine\GamePlayer\common\\" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\ketsji\kxnetwork" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\rasterizer\ras_openglrasterizer" /I "..\..\..\..\source\gameengine\scenegraph" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\gameengine\soundsystem" /I "..\..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\sumo\fuzzics\include" /I "..\..\..\..\..\lib\windows\openal\include" /I "../../../../source/blender/blenkernel" /I "../../../../source/blender/makesdna" /I "../../../../source/blender/blenlib" /I "../../../../source/blender/blenloader" /I "../../../../source/blender/render/extern/include" /I "../../../../source/blender/imbuf" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\gameengine\gameplayer\common\GP_common.lib"
-# ADD LIB32 /nologo
-
-!ENDIF
-
-# Begin Target
-
-# Name "GP_common - Win32 Release"
-# Name "GP_common - Win32 Debug"
-# Name "GP_common - Win32 MT DLL Debug"
-# Name "GP_common - Win32 MT DLL Release"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\bmfont.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\GPC_Canvas.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\GPC_Engine.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\GPC_KeyboardDevice.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\GPC_MouseDevice.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\GPC_PolygonMaterial.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\GPC_RawImage.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\GPC_RawLoadDotBlendArray.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\GPC_RawLogoArrays.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\GPC_RenderTools.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\GPC_System.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\windows\GPW_Canvas.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\windows\GPW_Engine.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\windows\GPW_KeyboardDevice.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\windows\GPW_System.cpp
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\GPC_Canvas.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\GPC_Engine.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\GPC_KeyboardDevice.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\GPC_MouseDevice.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\GPC_PolygonMaterial.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\GPC_RenderTools.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\GPC_System.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\windows\GPW_Canvas.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\windows\GPW_Engine.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\windows\GPW_KeyboardDevice.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\windows\GPW_System.h
-# End Source File
-# End Group
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\Makefile
-# End Source File
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="GP_common" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=GP_common - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "GP_common.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "GP_common.mak" CFG="GP_common - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "GP_common - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "GP_common - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "GP_common - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "GP_common - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "GP_common - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\..\obj\windows\gameengine\gameplayer\common"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\gameplayer\common"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\..\..\lib\windows\python\include\python2.0" /I "..\..\..\..\..\lib\windows\python\include\python2.2" /I "..\..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\..\source\gameengine\Converter" /I "..\..\..\..\source\gameengine\soundsystem\snd_dummy" /I "..\..\..\..\..\lib\windows\bmfont\include" /I "..\..\..\..\..\lib\windows\string\include" /I "..\..\..\..\lib\windows\string\include" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\gameengine\ketsji" /I "..\..\..\..\source\gameengine\GamePlayer\common\\" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\ketsji\kxnetwork" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\rasterizer\ras_openglrasterizer" /I "..\..\..\..\source\gameengine\scenegraph" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\gameengine\soundsystem" /I "..\..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\sumo\fuzzics\include" /I "..\..\..\..\..\lib\windows\openal\include" /I "../../../../source/blender/blenkernel" /I "../../../../source/blender/makesdna" /I "../../../../source/blender/blenlib" /I "../../../../source/blender/blenloader" /I "../../../../source/blender/render/extern/include" /I "../../../../source/blender/imbuf" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "GP_common - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\..\obj\windows\gameengine\gameplayer\common\debug"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\gameplayer\common\debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\..\..\lib\windows\python\include\python2.2" /I "..\..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\..\source\gameengine\Converter" /I "..\..\..\..\source\gameengine\soundsystem\snd_dummy" /I "..\..\..\..\..\lib\windows\bmfont\include" /I "..\..\..\..\..\lib\windows\string\include" /I "..\..\..\..\lib\windows\string\include" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\gameengine\ketsji" /I "..\..\..\..\source\gameengine\GamePlayer\common\\" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\ketsji\kxnetwork" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\rasterizer\ras_openglrasterizer" /I "..\..\..\..\source\gameengine\scenegraph" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\gameengine\soundsystem" /I "..\..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\sumo\fuzzics\include" /I "..\..\..\..\..\lib\windows\openal\include" /I "../../../../source/blender/blenkernel" /I "../../../../source/blender/makesdna" /I "../../../../source/blender/blenlib" /I "../../../../source/blender/blenloader" /I "../../../../source/blender/render/extern/include" /I "../../../../source/blender/imbuf" /D "WIN32" /D "_MBCS" /D "_LIB" /U "_DEBUG" /YX /FD /GZ /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "GP_common - Win32 MT DLL Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "GP_common___Win32_MT_DLL_Debug"
+# PROP BASE Intermediate_Dir "GP_common___Win32_MT_DLL_Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\..\obj\windows\gameengine\gameplayer\common\mtdll_debug"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\gameplayer\common\mtdll_debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /MDd /Gm /GX /ZI /Od /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\gameengine\ketsji" /I "..\..\..\..\source\gameengine\ketsji\kxnetwork" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\rasterizer\ras_openglrasterizer" /I "..\..\..\..\source\gameengine\scenegraph" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\gameengine\soundsystem" /I "..\..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\sumo\fuzzics\include" /I "..\..\..\..\..\lib\windows\openal\include" /I "..\..\..\..\..\lib\windows\python\include\python1.5" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "..\..\..\..\..\lib\windows\python\include\python2.0" /I "..\..\..\..\..\lib\windows\python\include\python2.2" /I "..\..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\..\source\gameengine\Converter" /I "..\..\..\..\source\gameengine\soundsystem\snd_dummy" /I "..\..\..\..\..\lib\windows\bmfont\include" /I "..\..\..\..\..\lib\windows\string\include" /I "..\..\..\..\lib\windows\string\include" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\gameengine\ketsji" /I "..\..\..\..\source\gameengine\GamePlayer\common\\" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\ketsji\kxnetwork" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\rasterizer\ras_openglrasterizer" /I "..\..\..\..\source\gameengine\scenegraph" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\gameengine\soundsystem" /I "..\..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\sumo\fuzzics\include" /I "..\..\..\..\..\lib\windows\openal\include" /I "../../../../source/blender/blenkernel" /I "../../../../source/blender/makesdna" /I "../../../../source/blender/blenlib" /I "../../../../source/blender/blenloader" /I "../../../../source/blender/render/extern/include" /I "../../../../source/blender/imbuf" /D "WIN32" /D "_MBCS" /D "_LIB" /U "_DEBUG" /YX /FD /GZ /c
+# SUBTRACT CPP /Fr
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\gameengine\gameplayer\common\debug\GP_common.lib"
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "GP_common - Win32 MT DLL Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "GP_common___Win32_MT_DLL_Release"
+# PROP BASE Intermediate_Dir "GP_common___Win32_MT_DLL_Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\..\obj\windows\gameengine\gameplayer\common\mtdll"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\gameplayer\common\mtdll"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /GX /O2 /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\gameengine\ketsji" /I "..\..\..\..\source\gameengine\ketsji\kxnetwork" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\rasterizer\ras_openglrasterizer" /I "..\..\..\..\source\gameengine\scenegraph" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\gameengine\soundsystem" /I "..\..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\sumo\fuzzics\include" /I "..\..\..\..\..\lib\windows\openal\include" /I "..\..\..\..\..\lib\windows\python\include\python2.0" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD CPP /nologo /MD /GX /O2 /I "..\..\..\..\..\lib\windows\python\include\python1.5" /I "..\..\..\..\..\lib\windows\python\include\python2.0" /I "..\..\..\..\..\lib\windows\python\include\python2.2" /I "..\..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\..\source\gameengine\Converter" /I "..\..\..\..\source\gameengine\soundsystem\snd_dummy" /I "..\..\..\..\..\lib\windows\bmfont\include" /I "..\..\..\..\..\lib\windows\string\include" /I "..\..\..\..\lib\windows\string\include" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\gameengine\ketsji" /I "..\..\..\..\source\gameengine\GamePlayer\common\\" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\ketsji\kxnetwork" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\rasterizer\ras_openglrasterizer" /I "..\..\..\..\source\gameengine\scenegraph" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\gameengine\soundsystem" /I "..\..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\sumo\fuzzics\include" /I "..\..\..\..\..\lib\windows\openal\include" /I "../../../../source/blender/blenkernel" /I "../../../../source/blender/makesdna" /I "../../../../source/blender/blenlib" /I "../../../../source/blender/blenloader" /I "../../../../source/blender/render/extern/include" /I "../../../../source/blender/imbuf" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\gameengine\gameplayer\common\GP_common.lib"
+# ADD LIB32 /nologo
+
+!ENDIF
+
+# Begin Target
+
+# Name "GP_common - Win32 Release"
+# Name "GP_common - Win32 Debug"
+# Name "GP_common - Win32 MT DLL Debug"
+# Name "GP_common - Win32 MT DLL Release"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\bmfont.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\GPC_Canvas.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\GPC_Engine.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\GPC_KeyboardDevice.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\GPC_MouseDevice.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\GPC_PolygonMaterial.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\GPC_RawImage.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\GPC_RawLoadDotBlendArray.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\GPC_RawLogoArrays.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\GPC_RenderTools.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\GPC_System.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\windows\GPW_Canvas.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\windows\GPW_Engine.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\windows\GPW_KeyboardDevice.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\windows\GPW_System.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\GPC_Canvas.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\GPC_Engine.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\GPC_KeyboardDevice.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\GPC_MouseDevice.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\GPC_PolygonMaterial.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\GPC_RenderTools.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\GPC_System.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\windows\GPW_Canvas.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\windows\GPW_Engine.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\windows\GPW_KeyboardDevice.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\windows\GPW_System.h
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\common\Makefile
+# End Source File
+# End Target
+# End Project
diff --git a/projectfiles/gameengine/gameplayer/ghost/GP_ghost.dsp b/projectfiles/gameengine/gameplayer/ghost/GP_ghost.dsp
index d569d6fceac..63ce23d2647 100644
--- a/projectfiles/gameengine/gameplayer/ghost/GP_ghost.dsp
+++ b/projectfiles/gameengine/gameplayer/ghost/GP_ghost.dsp
@@ -1,156 +1,156 @@
-# Microsoft Developer Studio Project File - Name="GP_ghost" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=GP_ghost - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "GP_ghost.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "GP_ghost.mak" CFG="GP_ghost - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "GP_ghost - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "GP_ghost - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "GP_ghost - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\..\obj\windows\"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\gameplayer\ghost\"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\..\..\lib\windows\ode\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\gameengine\Physics\Ode" /I "..\..\..\..\source\gameengine\Physics" /I "..\..\..\..\..\lib\windows\python\include\python2.2" /I "..\..\..\..\..\lib\windows\bmfont\include" /I "..\..\..\..\source\kernel\gen_messaging" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\gameengine\ketsji" /I "..\..\..\..\source\gameengine\ketsji\kxnetwork" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\rasterizer\ras_openglrasterizer" /I "..\..\..\..\source\gameengine\scenegraph" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\gameengine\soundsystem" /I "..\..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\source\sumo\fuzzics\include" /I "..\..\..\..\..\lib\windows\openal\include" /I "..\..\..\..\source\gameengine\gameplayer\common" /I "../../../../source/blender/blenkernel" /I "../../../../source/blender/makesdna" /I "../../../../source/blender/blenlib" /I "../../../../source/blender/blenloader" /I "../../../../source/blender/readblenfile" /I "../../../../source/blender/render/extern/include" /I "../../../../source/blender/imbuf" /I "..\..\..\..\source\gameengine\converter" /I "..\..\..\..\source\gameengine\gameplayer\common\windows" /I "..\..\..\..\..\lib\windows\string\include" /I "..\..\..\..\..\lib\windows\ghost\include" /I "..\..\..\..\..\lib\windows\iksolver\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 libguardedalloc.a libstring.a libghost.a odelib.lib fmodvc.lib libbmfont.a ws2_32.lib kernel32.lib user32.lib gdi32.lib vfw32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libjpeg.a opengl32.lib glu32.lib openal_static.lib dxguid.lib libblenkey.a libeay32.lib libpng.a libz.a libmoto.a /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcd.lib" /nodefaultlib:"libc.lib" /nodefaultlib:"msvcrt.lib" /nodefaultlib:"msvcrtd.lib" /nodefaultlib:"msvcprt.lib" /out:"..\..\..\..\obj\windows\blenderplayer.exe" /libpath:"..\..\..\..\..\lib\windows\ode\lib" /libpath:"..\..\..\..\..\lib\windows\bmfont\lib" /libpath:"..\..\..\..\..\lib\windows\guardedalloc\lib" /libpath:"..\..\..\..\..\lib\windows\string\lib" /libpath:"..\..\..\..\..\lib\windows\ghost\lib" /libpath:"..\..\..\..\..\lib\windows\jpeg/lib" /libpath:"..\..\..\..\..\lib\windows\moto\lib\\" /libpath:"..\..\..\..\..\lib\windows\png\lib" /libpath:"..\..\..\..\..\lib\windows\zlib\lib" /libpath:"..\..\..\..\..\lib\windows\ode-0.03\lib" /libpath:"../../../../../lib/windows/fmod/lib" /libpath:"..\..\..\..\..\lib\windows\python\lib" /libpath:"../../../../../lib/windows/openal/lib" /libpath:"..\..\..\..\..\lib\windows\openssl\lib" /libpath:"..\..\..\..\..\lib\windows\blenkey\lib\\"
-# SUBTRACT LINK32 /pdb:none
-
-!ELSEIF "$(CFG)" == "GP_ghost - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\..\obj\windows\debug"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\gameplayer\ghost\debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "../../../../../lib/windows/moto/include" /I "..\..\..\..\source\gameengine\Physics\Ode" /I "..\..\..\..\source\gameengine\Physics" /I "..\..\..\..\..\lib\windows\python\include\python2.2" /I "..\..\..\..\..\lib\windows\bmfont\include" /I "..\..\..\..\source\kernel\gen_messaging" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\gameengine\ketsji" /I "..\..\..\..\source\gameengine\ketsji\kxnetwork" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\rasterizer\ras_openglrasterizer" /I "..\..\..\..\source\gameengine\scenegraph" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\gameengine\soundsystem" /I "..\..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\source\sumo\fuzzics\include" /I "..\..\..\..\..\lib\windows\openal\include" /I "..\..\..\..\source\gameengine\gameplayer\common" /I "../../../../source/blender/blenkernel" /I "../../../../source/blender/makesdna" /I "../../../../source/blender/blenlib" /I "../../../../source/blender/blenloader" /I "../../../../source/blender/readblenfile" /I "../../../../source/blender/render/extern/include" /I "../../../../source/blender/imbuf" /I "..\..\..\..\source\gameengine\converter" /I "..\..\..\..\source\gameengine\gameplayer\common\windows" /I "..\..\..\..\..\lib\windows\string\include" /I "..\..\..\..\..\lib\windows\ghost\include" /I "../../../../../lib/windows/iksolver/include" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "dSINGLE" /U "_DEBUG" /YX /FD /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 libguardedalloc.a libstring.a libghost.a odelib.lib fmodvc.lib libbmfont.a ws2_32.lib kernel32.lib user32.lib gdi32.lib vfw32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib opengl32.lib glu32.lib openal_static.lib libjpeg.a dxguid.lib libblenkey.a libeay32.lib libpng.a libz.a libmoto.a /nologo /subsystem:console /debug /machine:I386 /nodefaultlib:"libcd.lib" /nodefaultlib:"libc.lib" /nodefaultlib:"libcmt.lib" /nodefaultlib:"msvcrt.lib" /nodefaultlib:"msvcrtd.lib" /nodefaultlib:"msvcprtd.lib" /out:"..\..\..\..\obj\windows\debug\blenderplayer.exe" /pdbtype:sept /libpath:"..\..\..\..\..\lib\windows\ode\lib" /libpath:"..\..\..\..\..\lib\windows\bmfont\lib\\" /libpath:"..\..\..\..\..\lib\windows\guardedalloc\lib" /libpath:"..\..\..\..\..\lib\windows\string\lib\\" /libpath:"..\..\..\..\..\lib\windows\ghost\lib\\" /libpath:"..\..\..\..\..\lib\windows\jpeg\lib" /libpath:"..\..\..\..\..\lib\windows\moto\lib\\" /libpath:"..\..\..\..\..\lib\windows\zlib\lib\\" /libpath:"..\..\..\..\..\lib\windows\png\lib\\" /libpath:"..\..\..\..\..\lib\windows\ode-0.03\lib" /libpath:"../../../../../lib/windows/fmod/lib" /libpath:"..\..\..\..\..\lib\windows\python\lib" /libpath:"../../../../../lib/windows/openal/lib" /libpath:"..\..\..\..\..\lib\windows\openssl\lib" /libpath:"..\..\..\..\..\lib\windows\blenkey\lib\\"
-# SUBTRACT LINK32 /pdb:none
-
-!ENDIF
-
-# Begin Target
-
-# Name "GP_ghost - Win32 Release"
-# Name "GP_ghost - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\..\..\source\blender\makesdna\intern\dna.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\ghost\GPG_Application.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\ghost\GPG_Canvas.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\ghost\GPG_ghost.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\ghost\GPG_KeyboardDevice.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\ghost\GPG_System.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\blender\blenkernel\bad_level_call_stubs\stubs.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\icons\winplayer.rc
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\ghost\GPG_Application.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\ghost\GPG_Canvas.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\ghost\GPG_KeyboardDevice.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\ghost\GPG_System.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# Begin Source File
-
-SOURCE=..\..\..\..\source\icons\winplayer.ico
-# End Source File
-# End Group
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\ghost\Makefile
-# End Source File
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="GP_ghost" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=GP_ghost - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "GP_ghost.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "GP_ghost.mak" CFG="GP_ghost - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "GP_ghost - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "GP_ghost - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "GP_ghost - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\..\obj\windows\"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\gameplayer\ghost\"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\..\..\lib\windows\ode\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\gameengine\Physics\Ode" /I "..\..\..\..\source\gameengine\Physics" /I "..\..\..\..\..\lib\windows\python\include\python2.2" /I "..\..\..\..\..\lib\windows\bmfont\include" /I "..\..\..\..\source\kernel\gen_messaging" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\gameengine\ketsji" /I "..\..\..\..\source\gameengine\ketsji\kxnetwork" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\rasterizer\ras_openglrasterizer" /I "..\..\..\..\source\gameengine\scenegraph" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\gameengine\soundsystem" /I "..\..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\source\sumo\fuzzics\include" /I "..\..\..\..\..\lib\windows\openal\include" /I "..\..\..\..\source\gameengine\gameplayer\common" /I "../../../../source/blender/blenkernel" /I "../../../../source/blender/makesdna" /I "../../../../source/blender/blenlib" /I "../../../../source/blender/blenloader" /I "../../../../source/blender/readblenfile" /I "../../../../source/blender/render/extern/include" /I "../../../../source/blender/imbuf" /I "..\..\..\..\source\gameengine\converter" /I "..\..\..\..\source\gameengine\gameplayer\common\windows" /I "..\..\..\..\..\lib\windows\string\include" /I "..\..\..\..\..\lib\windows\ghost\include" /I "..\..\..\..\..\lib\windows\iksolver\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 libguardedalloc.a libstring.a libghost.a odelib.lib fmodvc.lib libbmfont.a ws2_32.lib kernel32.lib user32.lib gdi32.lib vfw32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libjpeg.a opengl32.lib glu32.lib openal_static.lib dxguid.lib libblenkey.a libeay32.lib libpng.a libz.a libmoto.a /nologo /subsystem:console /machine:I386 /nodefaultlib:"libcd.lib" /nodefaultlib:"libc.lib" /nodefaultlib:"msvcrt.lib" /nodefaultlib:"msvcrtd.lib" /nodefaultlib:"msvcprt.lib" /out:"..\..\..\..\obj\windows\blenderplayer.exe" /libpath:"..\..\..\..\..\lib\windows\ode\lib" /libpath:"..\..\..\..\..\lib\windows\bmfont\lib" /libpath:"..\..\..\..\..\lib\windows\guardedalloc\lib" /libpath:"..\..\..\..\..\lib\windows\string\lib" /libpath:"..\..\..\..\..\lib\windows\ghost\lib" /libpath:"..\..\..\..\..\lib\windows\jpeg/lib" /libpath:"..\..\..\..\..\lib\windows\moto\lib\\" /libpath:"..\..\..\..\..\lib\windows\png\lib" /libpath:"..\..\..\..\..\lib\windows\zlib\lib" /libpath:"..\..\..\..\..\lib\windows\ode-0.03\lib" /libpath:"../../../../../lib/windows/fmod/lib" /libpath:"..\..\..\..\..\lib\windows\python\lib" /libpath:"../../../../../lib/windows/openal/lib" /libpath:"..\..\..\..\..\lib\windows\openssl\lib" /libpath:"..\..\..\..\..\lib\windows\blenkey\lib\\"
+# SUBTRACT LINK32 /pdb:none
+
+!ELSEIF "$(CFG)" == "GP_ghost - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\..\obj\windows\debug"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\gameplayer\ghost\debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "../../../../../lib/windows/moto/include" /I "..\..\..\..\source\gameengine\Physics\Ode" /I "..\..\..\..\source\gameengine\Physics" /I "..\..\..\..\..\lib\windows\python\include\python2.2" /I "..\..\..\..\..\lib\windows\bmfont\include" /I "..\..\..\..\source\kernel\gen_messaging" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\gameengine\ketsji" /I "..\..\..\..\source\gameengine\ketsji\kxnetwork" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\rasterizer\ras_openglrasterizer" /I "..\..\..\..\source\gameengine\scenegraph" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\gameengine\soundsystem" /I "..\..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\source\sumo\fuzzics\include" /I "..\..\..\..\..\lib\windows\openal\include" /I "..\..\..\..\source\gameengine\gameplayer\common" /I "../../../../source/blender/blenkernel" /I "../../../../source/blender/makesdna" /I "../../../../source/blender/blenlib" /I "../../../../source/blender/blenloader" /I "../../../../source/blender/readblenfile" /I "../../../../source/blender/render/extern/include" /I "../../../../source/blender/imbuf" /I "..\..\..\..\source\gameengine\converter" /I "..\..\..\..\source\gameengine\gameplayer\common\windows" /I "..\..\..\..\..\lib\windows\string\include" /I "..\..\..\..\..\lib\windows\ghost\include" /I "../../../../../lib/windows/iksolver/include" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "dSINGLE" /U "_DEBUG" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 libguardedalloc.a libstring.a libghost.a odelib.lib fmodvc.lib libbmfont.a ws2_32.lib kernel32.lib user32.lib gdi32.lib vfw32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib opengl32.lib glu32.lib openal_static.lib libjpeg.a dxguid.lib libblenkey.a libeay32.lib libpng.a libz.a libmoto.a /nologo /subsystem:console /debug /machine:I386 /nodefaultlib:"libcd.lib" /nodefaultlib:"libc.lib" /nodefaultlib:"libcmt.lib" /nodefaultlib:"msvcrt.lib" /nodefaultlib:"msvcrtd.lib" /nodefaultlib:"msvcprtd.lib" /out:"..\..\..\..\obj\windows\debug\blenderplayer.exe" /pdbtype:sept /libpath:"..\..\..\..\..\lib\windows\ode\lib" /libpath:"..\..\..\..\..\lib\windows\bmfont\lib\\" /libpath:"..\..\..\..\..\lib\windows\guardedalloc\lib" /libpath:"..\..\..\..\..\lib\windows\string\lib\\" /libpath:"..\..\..\..\..\lib\windows\ghost\lib\\" /libpath:"..\..\..\..\..\lib\windows\jpeg\lib" /libpath:"..\..\..\..\..\lib\windows\moto\lib\\" /libpath:"..\..\..\..\..\lib\windows\zlib\lib\\" /libpath:"..\..\..\..\..\lib\windows\png\lib\\" /libpath:"..\..\..\..\..\lib\windows\ode-0.03\lib" /libpath:"../../../../../lib/windows/fmod/lib" /libpath:"..\..\..\..\..\lib\windows\python\lib" /libpath:"../../../../../lib/windows/openal/lib" /libpath:"..\..\..\..\..\lib\windows\openssl\lib" /libpath:"..\..\..\..\..\lib\windows\blenkey\lib\\"
+# SUBTRACT LINK32 /pdb:none
+
+!ENDIF
+
+# Begin Target
+
+# Name "GP_ghost - Win32 Release"
+# Name "GP_ghost - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\..\source\blender\makesdna\intern\dna.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\ghost\GPG_Application.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\ghost\GPG_Canvas.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\ghost\GPG_ghost.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\ghost\GPG_KeyboardDevice.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\ghost\GPG_System.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\blender\blenkernel\bad_level_call_stubs\stubs.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\icons\winplayer.rc
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\ghost\GPG_Application.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\ghost\GPG_Canvas.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\ghost\GPG_KeyboardDevice.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\ghost\GPG_System.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# Begin Source File
+
+SOURCE=..\..\..\..\source\icons\winplayer.ico
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\ghost\Makefile
+# End Source File
+# End Target
+# End Project
diff --git a/projectfiles/gameengine/gameplayer/glut/GP_glut.dsp b/projectfiles/gameengine/gameplayer/glut/GP_glut.dsp
index 64315293ac6..7e3a2060f92 100644
--- a/projectfiles/gameengine/gameplayer/glut/GP_glut.dsp
+++ b/projectfiles/gameengine/gameplayer/glut/GP_glut.dsp
@@ -1,205 +1,205 @@
-# Microsoft Developer Studio Project File - Name="GP_glut" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=GP_glut - Win32 Profile
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "GP_glut.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "GP_glut.mak" CFG="GP_glut - Win32 Profile"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "GP_glut - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "GP_glut - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE "GP_glut - Win32 Profile" (based on "Win32 (x86) Console Application")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "GP_glut - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "..\..\..\..\..\obj\windows\gameengine\gameplayer\glut"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /W3 /GX /O2 /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\gameengine\gameplayer\common" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\source\sumo\Fuzzics\include" /I "..\..\..\..\..\lib\windows\glut-3.7\include" /I "..\..\..\..\..\lib\windows\python\include\python2.0" /I "..\..\source\gameengine\SoundSystem" /I "../../../../../lib/windows/moto/include" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 glu32.lib user32.lib gdi32.lib advapi32.lib dxguid.lib ole32.lib /nologo /subsystem:console /machine:I386 /libpath:"..\..\..\..\..\lib\windows\glut-3.7\lib" /libpath:"..\..\..\..\..\lib\windows\python\lib" /libpath:"..\..\..\..\..\lib\windows\openal\lib\lib_release"
-
-!ELSEIF "$(CFG)" == "GP_glut - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "..\..\..\..\..\obj\windows\gameengine\gameplayer\glut\debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
-# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\gameengine\gameplayer\common" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\source\sumo\Fuzzics\include" /I "..\..\..\..\..\lib\windows\glut-3.7\include" /I "..\..\..\..\..\lib\windows\python\include\python1.5" /I "..\..\source\gameengine\SoundSystem" /I "../../../../../lib/windows/moto/include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 glu32.lib user32.lib gdi32.lib advapi32.lib dxguid.lib ole32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\..\..\lib\windows\glut-3.7\lib" /libpath:"..\..\..\..\..\lib\windows\python\lib" /libpath:"..\..\..\..\..\lib\windows\openal\lib\lib_release"
-
-!ELSEIF "$(CFG)" == "GP_glut - Win32 Profile"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "GP_glut___Win32_Profile"
-# PROP BASE Intermediate_Dir "GP_glut___Win32_Profile"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "GP_glut___Win32_Profile"
-# PROP Intermediate_Dir "GP_glut___Win32_Profile"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\gameengine\gameplayer\common" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\sumo\Fuzzics\include" /I "..\..\..\..\..\lib\windows\glut-3.7\include" /I "..\..\..\..\..\lib\windows\python\include\python1.5" /I "..\..\source\gameengine\SoundSystem" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
-# ADD CPP /nologo /W3 /Gm /GX /Zi /O2 /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\gameengine\gameplayer\common" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\sumo\Fuzzics\include" /I "..\..\..\..\..\lib\windows\glut-3.7\include" /I "..\..\..\..\..\lib\windows\python\include\python1.5" /I "..\..\source\gameengine\SoundSystem" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 glu32.lib user32.lib gdi32.lib advapi32.lib dxguid.lib ole32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\..\..\lib\windows\glut-3.7\lib" /libpath:"..\..\..\..\..\lib\windows\python\lib" /libpath:"..\..\..\..\..\lib\windows\openal\lib\lib_release"
-# ADD LINK32 glu32.lib user32.lib gdi32.lib advapi32.lib dxguid.lib ole32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\..\..\lib\windows\glut-3.7\lib" /libpath:"..\..\..\..\..\lib\windows\python\lib" /libpath:"..\..\..\..\..\lib\windows\openal\lib\lib_release"
-
-!ENDIF
-
-# Begin Target
-
-# Name "GP_glut - Win32 Release"
-# Name "GP_glut - Win32 Debug"
-# Name "GP_glut - Win32 Profile"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Glut\GlutGamePlayer.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Glut\GlutKeyboardDevice.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Glut\GlutSystem.cpp
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Glut\GlutCanvas.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Glut\GlutInputDevice.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Glut\GlutKeyboardDevice.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Glut\GlutPolygonMaterial.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Glut\GlutRenderTools.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Glut\GlutSystem.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# Begin Source File
-
-SOURCE=..\..\..\..\..\lib\windows\openal\lib\alc\ALc.obj
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\lib\windows\openal\lib\alu\ALu.obj
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\lib\windows\openal\lib\alut\ALut.obj
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\lib\windows\openal\lib\OpenAL32\alBuffer.obj
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\lib\windows\openal\lib\OpenAL32\alEax.obj
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\lib\windows\openal\lib\OpenAL32\alError.obj
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\lib\windows\openal\lib\OpenAL32\alExtension.obj
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\lib\windows\openal\lib\OpenAL32\alListener.obj
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\lib\windows\openal\lib\OpenAL32\alSource.obj
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\lib\windows\openal\lib\OpenAL32\alState.obj
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\lib\windows\openal\lib\OpenAL32\OpenAL32.obj
-# End Source File
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="GP_glut" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=GP_glut - Win32 Profile
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "GP_glut.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "GP_glut.mak" CFG="GP_glut - Win32 Profile"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "GP_glut - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "GP_glut - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "GP_glut - Win32 Profile" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "GP_glut - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "..\..\..\..\..\obj\windows\gameengine\gameplayer\glut"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\gameengine\gameplayer\common" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\source\sumo\Fuzzics\include" /I "..\..\..\..\..\lib\windows\glut-3.7\include" /I "..\..\..\..\..\lib\windows\python\include\python2.0" /I "..\..\source\gameengine\SoundSystem" /I "../../../../../lib/windows/moto/include" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 glu32.lib user32.lib gdi32.lib advapi32.lib dxguid.lib ole32.lib /nologo /subsystem:console /machine:I386 /libpath:"..\..\..\..\..\lib\windows\glut-3.7\lib" /libpath:"..\..\..\..\..\lib\windows\python\lib" /libpath:"..\..\..\..\..\lib\windows\openal\lib\lib_release"
+
+!ELSEIF "$(CFG)" == "GP_glut - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "..\..\..\..\..\obj\windows\gameengine\gameplayer\glut\debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\gameengine\gameplayer\common" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\source\sumo\Fuzzics\include" /I "..\..\..\..\..\lib\windows\glut-3.7\include" /I "..\..\..\..\..\lib\windows\python\include\python1.5" /I "..\..\source\gameengine\SoundSystem" /I "../../../../../lib/windows/moto/include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 glu32.lib user32.lib gdi32.lib advapi32.lib dxguid.lib ole32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\..\..\lib\windows\glut-3.7\lib" /libpath:"..\..\..\..\..\lib\windows\python\lib" /libpath:"..\..\..\..\..\lib\windows\openal\lib\lib_release"
+
+!ELSEIF "$(CFG)" == "GP_glut - Win32 Profile"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "GP_glut___Win32_Profile"
+# PROP BASE Intermediate_Dir "GP_glut___Win32_Profile"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "GP_glut___Win32_Profile"
+# PROP Intermediate_Dir "GP_glut___Win32_Profile"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\gameengine\gameplayer\common" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\sumo\Fuzzics\include" /I "..\..\..\..\..\lib\windows\glut-3.7\include" /I "..\..\..\..\..\lib\windows\python\include\python1.5" /I "..\..\source\gameengine\SoundSystem" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /Zi /O2 /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\gameengine\gameplayer\common" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\sumo\Fuzzics\include" /I "..\..\..\..\..\lib\windows\glut-3.7\include" /I "..\..\..\..\..\lib\windows\python\include\python1.5" /I "..\..\source\gameengine\SoundSystem" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 glu32.lib user32.lib gdi32.lib advapi32.lib dxguid.lib ole32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\..\..\lib\windows\glut-3.7\lib" /libpath:"..\..\..\..\..\lib\windows\python\lib" /libpath:"..\..\..\..\..\lib\windows\openal\lib\lib_release"
+# ADD LINK32 glu32.lib user32.lib gdi32.lib advapi32.lib dxguid.lib ole32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\..\..\lib\windows\glut-3.7\lib" /libpath:"..\..\..\..\..\lib\windows\python\lib" /libpath:"..\..\..\..\..\lib\windows\openal\lib\lib_release"
+
+!ENDIF
+
+# Begin Target
+
+# Name "GP_glut - Win32 Release"
+# Name "GP_glut - Win32 Debug"
+# Name "GP_glut - Win32 Profile"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Glut\GlutGamePlayer.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Glut\GlutKeyboardDevice.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Glut\GlutSystem.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Glut\GlutCanvas.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Glut\GlutInputDevice.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Glut\GlutKeyboardDevice.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Glut\GlutPolygonMaterial.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Glut\GlutRenderTools.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Glut\GlutSystem.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# Begin Source File
+
+SOURCE=..\..\..\..\..\lib\windows\openal\lib\alc\ALc.obj
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\lib\windows\openal\lib\alu\ALu.obj
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\lib\windows\openal\lib\alut\ALut.obj
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\lib\windows\openal\lib\OpenAL32\alBuffer.obj
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\lib\windows\openal\lib\OpenAL32\alEax.obj
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\lib\windows\openal\lib\OpenAL32\alError.obj
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\lib\windows\openal\lib\OpenAL32\alExtension.obj
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\lib\windows\openal\lib\OpenAL32\alListener.obj
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\lib\windows\openal\lib\OpenAL32\alSource.obj
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\lib\windows\openal\lib\OpenAL32\alState.obj
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\lib\windows\openal\lib\OpenAL32\OpenAL32.obj
+# End Source File
+# End Target
+# End Project
diff --git a/projectfiles/gameengine/gameplayer/loader/BlenderLoader/BlenderLoader.dsp b/projectfiles/gameengine/gameplayer/loader/BlenderLoader/BlenderLoader.dsp
index 1af82b0644f..eb16fea9fd2 100644
--- a/projectfiles/gameengine/gameplayer/loader/BlenderLoader/BlenderLoader.dsp
+++ b/projectfiles/gameengine/gameplayer/loader/BlenderLoader/BlenderLoader.dsp
@@ -1,206 +1,206 @@
-# Microsoft Developer Studio Project File - Name="BlenderLoader" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=BlenderLoader - Win32 Profile
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "BlenderLoader.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "BlenderLoader.mak" CFG="BlenderLoader - Win32 Profile"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "BlenderLoader - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "BlenderLoader - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE "BlenderLoader - Win32 Profile" (based on "Win32 (x86) Console Application")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "BlenderLoader - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\..\..\..\obj\windows\gameengine\gameplayer\BlenderLoader"
-# PROP Intermediate_Dir "..\..\..\..\..\..\obj\windows\gameengine\gameplayer\BlenderLoader"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /W3 /GX /O2 /I "../../../../../../lib/windows/python/include/python2.0" /I "../../../../../source/blender/encrypt" /I "../../../../../source/blender/blenkernel" /I "../../../../../source/blender/makesdna" /I "../../../../../source/blender/blenlib" /I "../../../../../source/blender/blenloader" /I "../../../../../source/blender/render/extern/include" /I "../../../../../source/gameengine/Rasterizer" /I "../../../../../../lib\windows\sdl\SDL-1.1.7\include" /I "../../../../../source/gameengine/GameLogic" /I "..\..\..\..\..\source\sumo\include" /I "..\..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\..\source\sumo\Fuzzics\include" /I "..\..\..\..\..\source\kernel\gen_system" /I "../../../../../source/blender/imbuf" /I "../../../../../source/gameengine/SoundSystem" /I "../../../../../source/gameengine/SoundSystem/SND_OpenAL" /I "../../../../../source/gameengine/Ketsji" /I "../../../../../source/gameengine/Expressions" /I "../../../../../source/gameengine/SceneGraph" /I "../../../../../source/gameengine/ketsji/kxnetwork" /I "../../../../../source/gameengine/network" /I "../../../../../source/gameengine/network/loopbacknetwork" /I "../../../../../source/gameengine/GamePlayer/common" /I "../../../../../../lib/windows/iksolver/include" /I "../../../../../source/gameengine/SoundSystem/SND_Dummy" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 libguardedalloc.a libmoto.a sdlmain.lib sdl.lib dxguid.lib ole32.lib libjpeg.lib glu32.lib opengl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /out:"..\..\..\..\..\..\obj\windows\BlenderLoader.exe" /libpath:"../../../../../../lib/windows/moto/lib" /libpath:"..\..\..\..\..\..\lib\windows\guardedalloc\lib" /libpath:"../../../../../../lib/windows/python/lib" /libpath:"../../../../../../lib/windows/jpeg/lib" /libpath:"../../../../../../lib/windows/sdl/SDL-1.1.7\Lib"
-
-!ELSEIF "$(CFG)" == "BlenderLoader - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\..\..\..\obj\windows\gameengine\gameplayer\BlenderLoader\debug"
-# PROP Intermediate_Dir "..\..\..\..\..\..\obj\windows\gameengine\gameplayer\BlenderLoader\debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
-# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /I "../../../../../../lib/windows/python/include/python1.5" /I "../../../../../source/blender/encrypt" /I "../../../../../source/blender/blenkernel" /I "../../../../../source/blender/makesdna" /I "../../../../../source/blender/blenlib" /I "../../../../../source/blender/blenloader" /I "../../../../../source/blender/render/extern/include" /I "../../../../../source/gameengine/Rasterizer" /I "../../../../../../lib\windows\sdl\SDL-1.1.7\include" /I "../../../../../source/gameengine/GameLogic" /I "..\..\..\..\..\source\sumo\include" /I "..\..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\..\source\sumo\Fuzzics\include" /I "..\..\..\..\..\source\kernel\gen_system" /I "../../../../../source/blender/imbuf" /I "../../../../../source/gameengine/SoundSystem" /I "../../../../../source/gameengine/SoundSystem/SND_OpenAL" /I "../../../../../source/gameengine/Ketsji" /I "../../../../../source/gameengine/Expressions" /I "../../../../../source/gameengine/SceneGraph" /I "../../../../../source/gameengine/ketsji/kxnetwork" /I "../../../../../source/gameengine/network" /I "../../../../../source/gameengine/network/loopbacknetwork" /I "../../../../../source/gameengine/GamePlayer/common" /I "../../../../../../lib/windows/iksolver/include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Fr /YX /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 sdldebug.lib libguardedalloc.a libmoto.a sdlmain.lib sdl.lib dxguid.lib ole32.lib libjpeg.lib glu32.lib opengl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /out:"..\..\..\..\..\..\obj\windows\debug\BlenderLoader.exe" /pdbtype:sept /libpath:"..\..\..\..\..\..\lib\windows\guardedalloc\lib" /libpath:"../../../../../../lib/windows/python/lib" /libpath:"../../../../../../lib/windows/jpeg/lib" /libpath:"../../../../../../lib/windows/sdl/SDL-1.1.7\Lib"
-
-!ELSEIF "$(CFG)" == "BlenderLoader - Win32 Profile"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "BlenderLoader___Win32_Profile"
-# PROP BASE Intermediate_Dir "BlenderLoader___Win32_Profile"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "BlenderLoader___Win32_Profile"
-# PROP Intermediate_Dir "BlenderLoader___Win32_Profile"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../../../../lib/windows/python/include/python1.5" /I "../../../../../source/blender/blenkernel" /I "../../../../../source/blender/makesdna" /I "../../../../../source/blender/blenlib" /I "../../../../../source/blender/blenloader" /I "../../../../../source/blender/render/extern/include" /I "../../../../../source/gameengine/Rasterizer" /I "../../../../../../lib\windows\sdl\SDL-1.1.7\include" /I "../../../../../source/gameengine/GameLogic" /I "..\..\..\..\..\source\sumo\include" /I "..\..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\..\source\sumo\Fuzzics\include" /I "..\..\..\..\..\source\kernel\gen_system" /I "../../../../../source/blender/imbuf" /I "../../../../../source/gameengine/SoundSystem" /I "../../../../../source/gameengine/SoundSystem/SND_OpenAL" /I "../../../../../source/gameengine/Ketsji" /I "../../../../../source/gameengine/Expressions" /I "../../../../../source/gameengine/SceneGraph" /I "../../../../../source/gameengine/ketsji/kxnetwork" /I "../../../../../source/gameengine/network" /I "../../../../../source/gameengine/network/loopbacknetwork" /I "../../../../../source/gameengine/GamePlayer/common" /I "../../../../../../lib/windows/iksolver/include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
-# SUBTRACT BASE CPP /Fr
-# ADD CPP /nologo /W3 /Gm /GX /Zi /O2 /I "../../../../../../lib/windows/python/include/python1.5" /I "../../../../../source/blender/encrypt" /I "../../../../../source/blender/blenkernel" /I "../../../../../source/blender/makesdna" /I "../../../../../source/blender/blenlib" /I "../../../../../source/blender/blenloader" /I "../../../../../source/blender/render/extern/include" /I "../../../../../source/gameengine/Rasterizer" /I "../../../../../../lib\windows\sdl\SDL-1.1.7\include" /I "../../../../../source/gameengine/GameLogic" /I "..\..\..\..\..\source\sumo\include" /I "..\..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\..\source\sumo\Fuzzics\include" /I "..\..\..\..\..\source\kernel\gen_system" /I "../../../../../source/blender/imbuf" /I "../../../../../source/gameengine/SoundSystem" /I "../../../../../source/gameengine/SoundSystem/SND_OpenAL" /I "../../../../../source/gameengine/Ketsji" /I "../../../../../source/gameengine/Expressions" /I "../../../../../source/gameengine/SceneGraph" /I "../../../../../source/gameengine/ketsji/kxnetwork" /I "../../../../../source/gameengine/network" /I "../../../../../source/gameengine/network/loopbacknetwork" /I "../../../../../source/gameengine/GamePlayer/common" /I "../../../../../../lib/windows/iksolver/include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 sdldebug.lib sdlmain.lib sdl.lib dxguid.lib ole32.lib libjpeg.lib glu32.lib opengl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /out:"..\..\..\..\..\..\obj\windows\debug\BlenderLoader.exe" /pdbtype:sept /libpath:"../../../../../../lib/windows/python/lib" /libpath:"../../../../../../lib/windows/jpeg/lib" /libpath:"../../../../../../lib/windows/sdl/SDL-1.1.7\Lib"
-# ADD LINK32 sdldebug.lib libguardedalloc.a libmoto.a sdlmain.lib sdl.lib dxguid.lib ole32.lib libjpeg.lib glu32.lib opengl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /out:"..\..\..\..\..\..\obj\windows\profile\BlenderLoader.exe" /pdbtype:sept /libpath:"..\..\..\..\..\..\lib\windows\guardedalloc\lib" /libpath:"../../../../../../lib/windows/python/lib" /libpath:"../../../../../../lib/windows/jpeg/lib" /libpath:"../../../../../../lib/windows/sdl/SDL-1.1.7\Lib"
-
-!ENDIF
-
-# Begin Target
-
-# Name "BlenderLoader - Win32 Release"
-# Name "BlenderLoader - Win32 Debug"
-# Name "BlenderLoader - Win32 Profile"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\..\..\..\source\blender\makesdna\intern\dna.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\source\gameengine\GamePlayer\Loaders\Blender\loader.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\source\gameengine\GamePlayer\Loaders\Blender\SDLKeyboardDevice.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\source\gameengine\GamePlayer\Loaders\Blender\SDLSystem.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\source\blender\blenkernel\bad_level_call_stubs\stubs.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\..\..\..\source\gameengine\GamePlayer\Loaders\Blender\SDLCanvas.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\source\gameengine\GamePlayer\Loaders\Blender\SDLInputDevice.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\source\gameengine\GamePlayer\Loaders\Blender\SDLKeyboardDevice.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\source\gameengine\GamePlayer\Loaders\Blender\SDLSystem.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# Begin Source File
-
-SOURCE=..\..\..\..\..\..\lib\windows\openal\lib\alc\ALc.obj
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\..\lib\windows\openal\lib\alu\ALu.obj
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\..\lib\windows\openal\lib\alut\ALut.obj
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\..\lib\windows\openal\lib\OpenAL32\alBuffer.obj
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\..\lib\windows\openal\lib\OpenAL32\alEax.obj
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\..\lib\windows\openal\lib\OpenAL32\alError.obj
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\..\lib\windows\openal\lib\OpenAL32\alExtension.obj
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\..\lib\windows\openal\lib\OpenAL32\alListener.obj
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\..\lib\windows\openal\lib\OpenAL32\alSource.obj
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\..\lib\windows\openal\lib\OpenAL32\alState.obj
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\..\lib\windows\openal\lib\OpenAL32\OpenAL32.obj
-# End Source File
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="BlenderLoader" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=BlenderLoader - Win32 Profile
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "BlenderLoader.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "BlenderLoader.mak" CFG="BlenderLoader - Win32 Profile"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "BlenderLoader - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "BlenderLoader - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "BlenderLoader - Win32 Profile" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "BlenderLoader - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\..\..\..\obj\windows\gameengine\gameplayer\BlenderLoader"
+# PROP Intermediate_Dir "..\..\..\..\..\..\obj\windows\gameengine\gameplayer\BlenderLoader"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../../../../../../lib/windows/python/include/python2.0" /I "../../../../../source/blender/encrypt" /I "../../../../../source/blender/blenkernel" /I "../../../../../source/blender/makesdna" /I "../../../../../source/blender/blenlib" /I "../../../../../source/blender/blenloader" /I "../../../../../source/blender/render/extern/include" /I "../../../../../source/gameengine/Rasterizer" /I "../../../../../../lib\windows\sdl\SDL-1.1.7\include" /I "../../../../../source/gameengine/GameLogic" /I "..\..\..\..\..\source\sumo\include" /I "..\..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\..\source\sumo\Fuzzics\include" /I "..\..\..\..\..\source\kernel\gen_system" /I "../../../../../source/blender/imbuf" /I "../../../../../source/gameengine/SoundSystem" /I "../../../../../source/gameengine/SoundSystem/SND_OpenAL" /I "../../../../../source/gameengine/Ketsji" /I "../../../../../source/gameengine/Expressions" /I "../../../../../source/gameengine/SceneGraph" /I "../../../../../source/gameengine/ketsji/kxnetwork" /I "../../../../../source/gameengine/network" /I "../../../../../source/gameengine/network/loopbacknetwork" /I "../../../../../source/gameengine/GamePlayer/common" /I "../../../../../../lib/windows/iksolver/include" /I "../../../../../source/gameengine/SoundSystem/SND_Dummy" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 libguardedalloc.a libmoto.a sdlmain.lib sdl.lib dxguid.lib ole32.lib libjpeg.lib glu32.lib opengl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /out:"..\..\..\..\..\..\obj\windows\BlenderLoader.exe" /libpath:"../../../../../../lib/windows/moto/lib" /libpath:"..\..\..\..\..\..\lib\windows\guardedalloc\lib" /libpath:"../../../../../../lib/windows/python/lib" /libpath:"../../../../../../lib/windows/jpeg/lib" /libpath:"../../../../../../lib/windows/sdl/SDL-1.1.7\Lib"
+
+!ELSEIF "$(CFG)" == "BlenderLoader - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\..\..\..\obj\windows\gameengine\gameplayer\BlenderLoader\debug"
+# PROP Intermediate_Dir "..\..\..\..\..\..\obj\windows\gameengine\gameplayer\BlenderLoader\debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /I "../../../../../../lib/windows/python/include/python1.5" /I "../../../../../source/blender/encrypt" /I "../../../../../source/blender/blenkernel" /I "../../../../../source/blender/makesdna" /I "../../../../../source/blender/blenlib" /I "../../../../../source/blender/blenloader" /I "../../../../../source/blender/render/extern/include" /I "../../../../../source/gameengine/Rasterizer" /I "../../../../../../lib\windows\sdl\SDL-1.1.7\include" /I "../../../../../source/gameengine/GameLogic" /I "..\..\..\..\..\source\sumo\include" /I "..\..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\..\source\sumo\Fuzzics\include" /I "..\..\..\..\..\source\kernel\gen_system" /I "../../../../../source/blender/imbuf" /I "../../../../../source/gameengine/SoundSystem" /I "../../../../../source/gameengine/SoundSystem/SND_OpenAL" /I "../../../../../source/gameengine/Ketsji" /I "../../../../../source/gameengine/Expressions" /I "../../../../../source/gameengine/SceneGraph" /I "../../../../../source/gameengine/ketsji/kxnetwork" /I "../../../../../source/gameengine/network" /I "../../../../../source/gameengine/network/loopbacknetwork" /I "../../../../../source/gameengine/GamePlayer/common" /I "../../../../../../lib/windows/iksolver/include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Fr /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 sdldebug.lib libguardedalloc.a libmoto.a sdlmain.lib sdl.lib dxguid.lib ole32.lib libjpeg.lib glu32.lib opengl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /out:"..\..\..\..\..\..\obj\windows\debug\BlenderLoader.exe" /pdbtype:sept /libpath:"..\..\..\..\..\..\lib\windows\guardedalloc\lib" /libpath:"../../../../../../lib/windows/python/lib" /libpath:"../../../../../../lib/windows/jpeg/lib" /libpath:"../../../../../../lib/windows/sdl/SDL-1.1.7\Lib"
+
+!ELSEIF "$(CFG)" == "BlenderLoader - Win32 Profile"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "BlenderLoader___Win32_Profile"
+# PROP BASE Intermediate_Dir "BlenderLoader___Win32_Profile"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "BlenderLoader___Win32_Profile"
+# PROP Intermediate_Dir "BlenderLoader___Win32_Profile"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../../../../lib/windows/python/include/python1.5" /I "../../../../../source/blender/blenkernel" /I "../../../../../source/blender/makesdna" /I "../../../../../source/blender/blenlib" /I "../../../../../source/blender/blenloader" /I "../../../../../source/blender/render/extern/include" /I "../../../../../source/gameengine/Rasterizer" /I "../../../../../../lib\windows\sdl\SDL-1.1.7\include" /I "../../../../../source/gameengine/GameLogic" /I "..\..\..\..\..\source\sumo\include" /I "..\..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\..\source\sumo\Fuzzics\include" /I "..\..\..\..\..\source\kernel\gen_system" /I "../../../../../source/blender/imbuf" /I "../../../../../source/gameengine/SoundSystem" /I "../../../../../source/gameengine/SoundSystem/SND_OpenAL" /I "../../../../../source/gameengine/Ketsji" /I "../../../../../source/gameengine/Expressions" /I "../../../../../source/gameengine/SceneGraph" /I "../../../../../source/gameengine/ketsji/kxnetwork" /I "../../../../../source/gameengine/network" /I "../../../../../source/gameengine/network/loopbacknetwork" /I "../../../../../source/gameengine/GamePlayer/common" /I "../../../../../../lib/windows/iksolver/include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# SUBTRACT BASE CPP /Fr
+# ADD CPP /nologo /W3 /Gm /GX /Zi /O2 /I "../../../../../../lib/windows/python/include/python1.5" /I "../../../../../source/blender/encrypt" /I "../../../../../source/blender/blenkernel" /I "../../../../../source/blender/makesdna" /I "../../../../../source/blender/blenlib" /I "../../../../../source/blender/blenloader" /I "../../../../../source/blender/render/extern/include" /I "../../../../../source/gameengine/Rasterizer" /I "../../../../../../lib\windows\sdl\SDL-1.1.7\include" /I "../../../../../source/gameengine/GameLogic" /I "..\..\..\..\..\source\sumo\include" /I "..\..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\..\source\sumo\Fuzzics\include" /I "..\..\..\..\..\source\kernel\gen_system" /I "../../../../../source/blender/imbuf" /I "../../../../../source/gameengine/SoundSystem" /I "../../../../../source/gameengine/SoundSystem/SND_OpenAL" /I "../../../../../source/gameengine/Ketsji" /I "../../../../../source/gameengine/Expressions" /I "../../../../../source/gameengine/SceneGraph" /I "../../../../../source/gameengine/ketsji/kxnetwork" /I "../../../../../source/gameengine/network" /I "../../../../../source/gameengine/network/loopbacknetwork" /I "../../../../../source/gameengine/GamePlayer/common" /I "../../../../../../lib/windows/iksolver/include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 sdldebug.lib sdlmain.lib sdl.lib dxguid.lib ole32.lib libjpeg.lib glu32.lib opengl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /out:"..\..\..\..\..\..\obj\windows\debug\BlenderLoader.exe" /pdbtype:sept /libpath:"../../../../../../lib/windows/python/lib" /libpath:"../../../../../../lib/windows/jpeg/lib" /libpath:"../../../../../../lib/windows/sdl/SDL-1.1.7\Lib"
+# ADD LINK32 sdldebug.lib libguardedalloc.a libmoto.a sdlmain.lib sdl.lib dxguid.lib ole32.lib libjpeg.lib glu32.lib opengl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /out:"..\..\..\..\..\..\obj\windows\profile\BlenderLoader.exe" /pdbtype:sept /libpath:"..\..\..\..\..\..\lib\windows\guardedalloc\lib" /libpath:"../../../../../../lib/windows/python/lib" /libpath:"../../../../../../lib/windows/jpeg/lib" /libpath:"../../../../../../lib/windows/sdl/SDL-1.1.7\Lib"
+
+!ENDIF
+
+# Begin Target
+
+# Name "BlenderLoader - Win32 Release"
+# Name "BlenderLoader - Win32 Debug"
+# Name "BlenderLoader - Win32 Profile"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\..\..\source\blender\makesdna\intern\dna.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\source\gameengine\GamePlayer\Loaders\Blender\loader.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\source\gameengine\GamePlayer\Loaders\Blender\SDLKeyboardDevice.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\source\gameengine\GamePlayer\Loaders\Blender\SDLSystem.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\source\blender\blenkernel\bad_level_call_stubs\stubs.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\..\..\source\gameengine\GamePlayer\Loaders\Blender\SDLCanvas.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\source\gameengine\GamePlayer\Loaders\Blender\SDLInputDevice.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\source\gameengine\GamePlayer\Loaders\Blender\SDLKeyboardDevice.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\source\gameengine\GamePlayer\Loaders\Blender\SDLSystem.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# Begin Source File
+
+SOURCE=..\..\..\..\..\..\lib\windows\openal\lib\alc\ALc.obj
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\..\lib\windows\openal\lib\alu\ALu.obj
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\..\lib\windows\openal\lib\alut\ALut.obj
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\..\lib\windows\openal\lib\OpenAL32\alBuffer.obj
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\..\lib\windows\openal\lib\OpenAL32\alEax.obj
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\..\lib\windows\openal\lib\OpenAL32\alError.obj
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\..\lib\windows\openal\lib\OpenAL32\alExtension.obj
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\..\lib\windows\openal\lib\OpenAL32\alListener.obj
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\..\lib\windows\openal\lib\OpenAL32\alSource.obj
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\..\lib\windows\openal\lib\OpenAL32\alState.obj
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\..\lib\windows\openal\lib\OpenAL32\OpenAL32.obj
+# End Source File
+# End Target
+# End Project
diff --git a/projectfiles/gameengine/gameplayer/netscape/GP_netscape.dsp b/projectfiles/gameengine/gameplayer/netscape/GP_netscape.dsp
index 60dc29e4918..e3145b14931 100644
--- a/projectfiles/gameengine/gameplayer/netscape/GP_netscape.dsp
+++ b/projectfiles/gameengine/gameplayer/netscape/GP_netscape.dsp
@@ -1,173 +1,173 @@
-# Microsoft Developer Studio Project File - Name="GP_netscape" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=GP_netscape - Win32 Profile
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "GP_netscape.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "GP_netscape.mak" CFG="GP_netscape - Win32 Profile"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "GP_netscape - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "GP_netscape - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "GP_netscape - Win32 Profile" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "GP_netscape - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir ".\Release"
-# PROP BASE Intermediate_Dir ".\Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "C:\Program Files\Netscape\Communicator\Program\Plugins"
-# PROP Intermediate_Dir ".\Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c
-# ADD CPP /nologo /W3 /GX /O2 /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\gameengine\ketsji" /I "..\..\..\..\source\gameengine\ketsji\kxnetwork" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\rasterizer\ras_openglrasterizer" /I "..\..\..\..\source\gameengine\scenegraph" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\gameengine\soundsystem" /I "..\..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\source\sumo\fuzzics\include" /I "..\..\..\..\..\lib\windows\openal\include" /I "..\..\..\..\..\lib\windows\python\include\python2.0" /I "..\..\..\..\source\gameengine\gameplayer\common" /I "../../../../source/blender/blenkernel" /I "../../../../source/blender/makesdna" /I "../../../../source/blender/blenlib" /I "../../../../source/blender/blenloader" /I "../../../../source/blender/render/extern/include" /I "../../../../source/blender/imbuf" /I "..\..\..\..\source\gameengine\converter" /I "..\..\..\..\source\gameengine\gameplayer\common\windows" /I "..\..\..\..\source\gameengine\GamePlayer\Netscape\windows_sdk" /I "..\..\..\..\..\lib\windows\iksolver\include" /I "../../../../../lib/windows/moto/include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libjpeg.lib opengl32.lib glu32.lib libblenkey.a libz.a /nologo /subsystem:windows /dll /machine:I386 /out:"C:\Program Files\Netscape\Communicator\Program\Plugins\NPBlender.dll" /libpath:"../../../../../lib/windows/python/lib" /libpath:"../../../../../lib/windows/jpeg/lib" /libpath:"../../../../../lib/windows/zlib/lib/" /libpath:"..\..\..\..\..\lib\windows\blenkey\lib" /libpath:"..\..\..\..\..\lib\windows\openssl\lib" /libpath:"..\..\..\..\..\lib\windows\iksolver\lib\\"
-
-!ELSEIF "$(CFG)" == "GP_netscape - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir ".\Debug"
-# PROP BASE Intermediate_Dir ".\Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "C:\Program Files\Netscape\Communicator\Program\Plugins"
-# PROP Intermediate_Dir ".\Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c
-# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\gameengine\ketsji" /I "..\..\..\..\source\gameengine\ketsji\kxnetwork" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\rasterizer\ras_openglrasterizer" /I "..\..\..\..\source\gameengine\scenegraph" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\gameengine\soundsystem" /I "..\..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\gameengine\GamePlayer\Netscape\windows_sdk" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\source\sumo\fuzzics\include" /I "..\..\..\..\..\lib\windows\openal\include" /I "..\..\..\..\..\lib\windows\python\include\python1.5" /I "..\..\..\..\source\gameengine\gameplayer\common" /I "../../../../source/blender/blenkernel" /I "../../../../source/blender/makesdna" /I "../../../../source/blender/blenlib" /I "../../../../source/blender/blenloader" /I "../../../../source/blender/render/extern/include" /I "../../../../source/blender/imbuf" /I "..\..\..\..\source\gameengine\converter" /I "..\..\..\..\source\gameengine\gameplayer\common\windows" /I "..\..\..\..\..\lib\windows\iksolver\include" /I "../../../../../lib/windows/moto/include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libjpeg.lib opengl32.lib glu32.lib openal_static.lib dxguid.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libjpeg.lib opengl32.lib glu32.lib openal_static.lib dxguid.lib libblenkey.a libz.a kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libjpeg.lib opengl32.lib glu32.lib openal_static.lib dxguid.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libjpeg.lib opengl32.lib glu32.lib openal_static.lib dxguid.lib python15.lib /nologo /subsystem:windows /dll /debug /machine:I386 /out:"C:\Program Files\Netscape\Communicator\Program\Plugins\NPBlender.dll" /libpath:"../../../../../lib/windows/python/lib" /libpath:"../../../../../lib/windows/jpeg/lib" /libpath:"../../../../../lib/windows/openal/lib" /libpath:"../../../../../lib/windows/zlib/lib/" /libpath:"..\..\..\..\..\lib\windows\blenkey\lib" /libpath:"..\..\..\..\..\lib\windows\openssl\lib" /libpath:"..\..\..\..\..\lib\windows\iksolver\lib\\"
-
-!ELSEIF "$(CFG)" == "GP_netscape - Win32 Profile"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "GP_netscape___Win32_Profile"
-# PROP BASE Intermediate_Dir "GP_netscape___Win32_Profile"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "GP_netscape___Win32_Profile"
-# PROP Intermediate_Dir "GP_netscape___Win32_Profile"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\gameengine\ketsji" /I "..\..\..\..\source\gameengine\ketsji\kxnetwork" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\rasterizer\ras_openglrasterizer" /I "..\..\..\..\source\gameengine\scenegraph" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\gameengine\soundsystem" /I "..\..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\gameengine\GamePlayer\Netscape\windows_sdk" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\sumo\fuzzics\include" /I "..\..\..\..\..\lib\windows\openal\include" /I "..\..\..\..\..\lib\windows\python\include\python1.5" /I "..\..\..\..\source\gameengine\gameplayer\common" /I "../../../../source/blender/blenkernel" /I "../../../../source/blender/makesdna" /I "../../../../source/blender/blenlib" /I "../../../../source/blender/blenloader" /I "../../../../source/blender/render/extern/include" /I "../../../../source/blender/imbuf" /I "..\..\..\..\source\gameengine\converter" /I "..\..\..\..\source\gameengine\gameplayer\common\windows" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR /YX /FD /c
-# ADD CPP /nologo /W3 /Gm /GX /Zi /O2 /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\gameengine\ketsji" /I "..\..\..\..\source\gameengine\ketsji\kxnetwork" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\rasterizer\ras_openglrasterizer" /I "..\..\..\..\source\gameengine\scenegraph" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\gameengine\soundsystem" /I "..\..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\gameengine\GamePlayer\Netscape\windows_sdk" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\sumo\fuzzics\include" /I "..\..\..\..\..\lib\windows\openal\include" /I "..\..\..\..\..\lib\windows\python\include\python1.5" /I "..\..\..\..\source\gameengine\gameplayer\common" /I "../../../../source/blender/blenkernel" /I "../../../../source/blender/makesdna" /I "../../../../source/blender/blenlib" /I "../../../../source/blender/blenloader" /I "../../../../source/blender/render/extern/include" /I "../../../../source/blender/imbuf" /I "..\..\..\..\source\gameengine\converter" /I "..\..\..\..\source\gameengine\gameplayer\common\windows" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
-# SUBTRACT CPP /Fr
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libjpeg.lib opengl32.lib glu32.lib openal_static.lib dxguid.lib /nologo /subsystem:windows /dll /debug /machine:I386 /out:"C:\Program Files\Netscape\Communicator\Program\Plugins\NPBlender.dll" /libpath:"../../../../../lib/windows/python/lib" /libpath:"../../../../../lib/windows/jpeg/lib" /libpath:"../../../../../lib/windows/openal/lib"
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libjpeg.lib opengl32.lib glu32.lib openal_static.lib dxguid.lib /nologo /subsystem:windows /dll /debug /machine:I386 /out:"C:\Program Files\Netscape\Communicator\Program\Plugins\NPBlender.dll" /libpath:"../../../../../lib/windows/python/lib" /libpath:"../../../../../lib/windows/jpeg/lib" /libpath:"../../../../../lib/windows/openal/lib"
-
-!ENDIF
-
-# Begin Target
-
-# Name "GP_netscape - Win32 Release"
-# Name "GP_netscape - Win32 Debug"
-# Name "GP_netscape - Win32 Profile"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat;for;f90"
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Netscape\windows\BlenderPlayer.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\blender\makesdna\intern\dna.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Netscape\windows\netscape_plugin_Plugin.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Netscape\npblender.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Netscape\windows\npblender.def
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Netscape\windows\npblender.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Netscape\windows\npwin.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\blender\blenkernel\bad_level_call_stubs\stubs.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd"
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe"
-# End Group
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\NSPlugin\autodownload.html
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Netscape\Testing\NetscapeExample.html
-# End Source File
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="GP_netscape" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=GP_netscape - Win32 Profile
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "GP_netscape.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "GP_netscape.mak" CFG="GP_netscape - Win32 Profile"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "GP_netscape - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "GP_netscape - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "GP_netscape - Win32 Profile" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "GP_netscape - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir ".\Release"
+# PROP BASE Intermediate_Dir ".\Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "C:\Program Files\Netscape\Communicator\Program\Plugins"
+# PROP Intermediate_Dir ".\Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c
+# ADD CPP /nologo /W3 /GX /O2 /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\gameengine\ketsji" /I "..\..\..\..\source\gameengine\ketsji\kxnetwork" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\rasterizer\ras_openglrasterizer" /I "..\..\..\..\source\gameengine\scenegraph" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\gameengine\soundsystem" /I "..\..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\source\sumo\fuzzics\include" /I "..\..\..\..\..\lib\windows\openal\include" /I "..\..\..\..\..\lib\windows\python\include\python2.0" /I "..\..\..\..\source\gameengine\gameplayer\common" /I "../../../../source/blender/blenkernel" /I "../../../../source/blender/makesdna" /I "../../../../source/blender/blenlib" /I "../../../../source/blender/blenloader" /I "../../../../source/blender/render/extern/include" /I "../../../../source/blender/imbuf" /I "..\..\..\..\source\gameengine\converter" /I "..\..\..\..\source\gameengine\gameplayer\common\windows" /I "..\..\..\..\source\gameengine\GamePlayer\Netscape\windows_sdk" /I "..\..\..\..\..\lib\windows\iksolver\include" /I "../../../../../lib/windows/moto/include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libjpeg.lib opengl32.lib glu32.lib libblenkey.a libz.a /nologo /subsystem:windows /dll /machine:I386 /out:"C:\Program Files\Netscape\Communicator\Program\Plugins\NPBlender.dll" /libpath:"../../../../../lib/windows/python/lib" /libpath:"../../../../../lib/windows/jpeg/lib" /libpath:"../../../../../lib/windows/zlib/lib/" /libpath:"..\..\..\..\..\lib\windows\blenkey\lib" /libpath:"..\..\..\..\..\lib\windows\openssl\lib" /libpath:"..\..\..\..\..\lib\windows\iksolver\lib\\"
+
+!ELSEIF "$(CFG)" == "GP_netscape - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir ".\Debug"
+# PROP BASE Intermediate_Dir ".\Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "C:\Program Files\Netscape\Communicator\Program\Plugins"
+# PROP Intermediate_Dir ".\Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c
+# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\gameengine\ketsji" /I "..\..\..\..\source\gameengine\ketsji\kxnetwork" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\rasterizer\ras_openglrasterizer" /I "..\..\..\..\source\gameengine\scenegraph" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\gameengine\soundsystem" /I "..\..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\gameengine\GamePlayer\Netscape\windows_sdk" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\source\sumo\fuzzics\include" /I "..\..\..\..\..\lib\windows\openal\include" /I "..\..\..\..\..\lib\windows\python\include\python1.5" /I "..\..\..\..\source\gameengine\gameplayer\common" /I "../../../../source/blender/blenkernel" /I "../../../../source/blender/makesdna" /I "../../../../source/blender/blenlib" /I "../../../../source/blender/blenloader" /I "../../../../source/blender/render/extern/include" /I "../../../../source/blender/imbuf" /I "..\..\..\..\source\gameengine\converter" /I "..\..\..\..\source\gameengine\gameplayer\common\windows" /I "..\..\..\..\..\lib\windows\iksolver\include" /I "../../../../../lib/windows/moto/include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR /YX /FD /c
+# ADD BASE MTL /nologo /D "_DEBUG" /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libjpeg.lib opengl32.lib glu32.lib openal_static.lib dxguid.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libjpeg.lib opengl32.lib glu32.lib openal_static.lib dxguid.lib libblenkey.a libz.a kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libjpeg.lib opengl32.lib glu32.lib openal_static.lib dxguid.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libjpeg.lib opengl32.lib glu32.lib openal_static.lib dxguid.lib python15.lib /nologo /subsystem:windows /dll /debug /machine:I386 /out:"C:\Program Files\Netscape\Communicator\Program\Plugins\NPBlender.dll" /libpath:"../../../../../lib/windows/python/lib" /libpath:"../../../../../lib/windows/jpeg/lib" /libpath:"../../../../../lib/windows/openal/lib" /libpath:"../../../../../lib/windows/zlib/lib/" /libpath:"..\..\..\..\..\lib\windows\blenkey\lib" /libpath:"..\..\..\..\..\lib\windows\openssl\lib" /libpath:"..\..\..\..\..\lib\windows\iksolver\lib\\"
+
+!ELSEIF "$(CFG)" == "GP_netscape - Win32 Profile"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "GP_netscape___Win32_Profile"
+# PROP BASE Intermediate_Dir "GP_netscape___Win32_Profile"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "GP_netscape___Win32_Profile"
+# PROP Intermediate_Dir "GP_netscape___Win32_Profile"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\gameengine\ketsji" /I "..\..\..\..\source\gameengine\ketsji\kxnetwork" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\rasterizer\ras_openglrasterizer" /I "..\..\..\..\source\gameengine\scenegraph" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\gameengine\soundsystem" /I "..\..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\gameengine\GamePlayer\Netscape\windows_sdk" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\sumo\fuzzics\include" /I "..\..\..\..\..\lib\windows\openal\include" /I "..\..\..\..\..\lib\windows\python\include\python1.5" /I "..\..\..\..\source\gameengine\gameplayer\common" /I "../../../../source/blender/blenkernel" /I "../../../../source/blender/makesdna" /I "../../../../source/blender/blenlib" /I "../../../../source/blender/blenloader" /I "../../../../source/blender/render/extern/include" /I "../../../../source/blender/imbuf" /I "..\..\..\..\source\gameengine\converter" /I "..\..\..\..\source\gameengine\gameplayer\common\windows" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR /YX /FD /c
+# ADD CPP /nologo /W3 /Gm /GX /Zi /O2 /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\gameengine\ketsji" /I "..\..\..\..\source\gameengine\ketsji\kxnetwork" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\rasterizer\ras_openglrasterizer" /I "..\..\..\..\source\gameengine\scenegraph" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\gameengine\soundsystem" /I "..\..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\gameengine\GamePlayer\Netscape\windows_sdk" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\sumo\fuzzics\include" /I "..\..\..\..\..\lib\windows\openal\include" /I "..\..\..\..\..\lib\windows\python\include\python1.5" /I "..\..\..\..\source\gameengine\gameplayer\common" /I "../../../../source/blender/blenkernel" /I "../../../../source/blender/makesdna" /I "../../../../source/blender/blenlib" /I "../../../../source/blender/blenloader" /I "../../../../source/blender/render/extern/include" /I "../../../../source/blender/imbuf" /I "..\..\..\..\source\gameengine\converter" /I "..\..\..\..\source\gameengine\gameplayer\common\windows" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
+# SUBTRACT CPP /Fr
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libjpeg.lib opengl32.lib glu32.lib openal_static.lib dxguid.lib /nologo /subsystem:windows /dll /debug /machine:I386 /out:"C:\Program Files\Netscape\Communicator\Program\Plugins\NPBlender.dll" /libpath:"../../../../../lib/windows/python/lib" /libpath:"../../../../../lib/windows/jpeg/lib" /libpath:"../../../../../lib/windows/openal/lib"
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libjpeg.lib opengl32.lib glu32.lib openal_static.lib dxguid.lib /nologo /subsystem:windows /dll /debug /machine:I386 /out:"C:\Program Files\Netscape\Communicator\Program\Plugins\NPBlender.dll" /libpath:"../../../../../lib/windows/python/lib" /libpath:"../../../../../lib/windows/jpeg/lib" /libpath:"../../../../../lib/windows/openal/lib"
+
+!ENDIF
+
+# Begin Target
+
+# Name "GP_netscape - Win32 Release"
+# Name "GP_netscape - Win32 Debug"
+# Name "GP_netscape - Win32 Profile"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat;for;f90"
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Netscape\windows\BlenderPlayer.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\blender\makesdna\intern\dna.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Netscape\windows\netscape_plugin_Plugin.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Netscape\npblender.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Netscape\windows\npblender.def
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Netscape\windows\npblender.rc
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Netscape\windows\npwin.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\blender\blenkernel\bad_level_call_stubs\stubs.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe"
+# End Group
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\NSPlugin\autodownload.html
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Netscape\Testing\NetscapeExample.html
+# End Source File
+# End Target
+# End Project
diff --git a/projectfiles/gameengine/gameplayer/netscape2/GP_netscape.dsp b/projectfiles/gameengine/gameplayer/netscape2/GP_netscape.dsp
index e065ac280b7..5ebdc5c9b7d 100644
--- a/projectfiles/gameengine/gameplayer/netscape2/GP_netscape.dsp
+++ b/projectfiles/gameengine/gameplayer/netscape2/GP_netscape.dsp
@@ -1,181 +1,181 @@
-# Microsoft Developer Studio Project File - Name="GP_netscape2" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=GP_netscape2 - Win32 Profile
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "GP_netscape.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "GP_netscape.mak" CFG="GP_netscape2 - Win32 Profile"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "GP_netscape2 - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "GP_netscape2 - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "GP_netscape2 - Win32 Profile" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "GP_netscape2 - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir ".\Release"
-# PROP BASE Intermediate_Dir ".\Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "C:\Program Files\Netscape\Communicator\Program\Plugins"
-# PROP Intermediate_Dir ".\Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c
-# ADD CPP /nologo /W3 /GX /O2 /I "..\..\..\..\source\kernel\gen_messaging" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\gameengine\ketsji" /I "..\..\..\..\source\gameengine\ketsji\kxnetwork" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\rasterizer\ras_openglrasterizer" /I "..\..\..\..\source\gameengine\scenegraph" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\gameengine\soundsystem" /I "..\..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\gameengine\GamePlayer\Netscape2\windows_sdk" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\sumo\fuzzics\include" /I "..\..\..\..\..\lib\windows\openal\include" /I "..\..\..\..\..\lib\windows\python\include\python1.5" /I "..\..\..\..\source\gameengine\gameplayer\common" /I "../../../../source/blender/blenkernel" /I "../../../../source/blender/makesdna" /I "../../../../source/blender/blenlib" /I "../../../../source/blender/blenloader" /I "../../../../source/blender/render/extern/include" /I "../../../../source/blender/imbuf" /I "..\..\..\..\source\gameengine\converter" /I "..\..\..\..\source\gameengine\gameplayer\common\windows" /I "..\..\..\..\source\gameengine\gameplayer\Netscape2\windows" /I "..\..\..\..\..\lib\windows\iksolver\include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
-# ADD LINK32 libblenkey.a libeay32.lib libz.a ws2_32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libjpeg.lib opengl32.lib glu32.lib openal_static.lib dxguid.lib /nologo /subsystem:windows /dll /machine:I386 /out:"C:\Program Files\Netscape\Communicator\Program\Plugins\npBlender3DPlugin.dll" /libpath:"../../../../../lib/windows/python/lib" /libpath:"../../../../../lib/windows/jpeg/lib" /libpath:"../../../../../lib/windows/zlib/lib/" /libpath:"..\..\..\..\..\lib\windows\blenkey\lib" /libpath:"..\..\..\..\..\lib\windows\openssl\lib" /libpath:"..\..\..\..\..\lib\windows\iksolver\lib\\" /libpath:"../../../../../lib/windows/openal/lib"
-
-!ELSEIF "$(CFG)" == "GP_netscape2 - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir ".\Debug"
-# PROP BASE Intermediate_Dir ".\Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "C:\Program Files\Netscape\Communicator\Program\Plugins"
-# PROP Intermediate_Dir ".\Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c
-# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /I "..\..\..\..\source\kernel\gen_messaging" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\gameengine\ketsji" /I "..\..\..\..\source\gameengine\ketsji\kxnetwork" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\rasterizer\ras_openglrasterizer" /I "..\..\..\..\source\gameengine\scenegraph" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\gameengine\soundsystem" /I "..\..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\gameengine\GamePlayer\Netscape2\windows_sdk" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\sumo\fuzzics\include" /I "..\..\..\..\..\lib\windows\openal\include" /I "..\..\..\..\..\lib\windows\python\include\python1.5" /I "..\..\..\..\source\gameengine\gameplayer\common" /I "../../../../source/blender/blenkernel" /I "../../../../source/blender/makesdna" /I "../../../../source/blender/blenlib" /I "../../../../source/blender/blenloader" /I "../../../../source/blender/render/extern/include" /I "../../../../source/blender/imbuf" /I "..\..\..\..\source\gameengine\converter" /I "..\..\..\..\source\gameengine\gameplayer\common\windows" /I "..\..\..\..\source\gameengine\gameplayer\Netscape2\windows" /I "..\..\..\..\..\lib\windows\iksolver\include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /FR /YX /FD /c
-# ADD BASE MTL /nologo /D "_DEBUG" /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386
-# ADD LINK32 libblenkey.a libeay32.lib libz.a ws2_32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libjpeg.lib opengl32.lib glu32.lib openal_static.lib dxguid.lib /nologo /subsystem:windows /dll /debug /machine:I386 /out:"C:\Program Files\Netscape\Communicator\Program\Plugins\npBlender3DPlugin.dll" /libpath:"../../../../../lib/windows/python/lib" /libpath:"../../../../../lib/windows/jpeg/lib" /libpath:"../../../../../lib/windows/openal/lib" /libpath:"../../../../../lib/windows/zlib/lib/" /libpath:"..\..\..\..\..\lib\windows\blenkey\lib" /libpath:"..\..\..\lib\windows\openssl\lib" /libpath:"..\..\..\lib\windows\iksolver\lib\\"
-
-!ELSEIF "$(CFG)" == "GP_netscape2 - Win32 Profile"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "GP_netscape2___Win32_Profile"
-# PROP BASE Intermediate_Dir "GP_netscape2___Win32_Profile"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "GP_netscape2___Win32_Profile"
-# PROP Intermediate_Dir "GP_netscape2___Win32_Profile"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\gameengine\ketsji" /I "..\..\..\..\source\gameengine\ketsji\kxnetwork" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\rasterizer\ras_openglrasterizer" /I "..\..\..\..\source\gameengine\scenegraph" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\gameengine\soundsystem" /I "..\..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\gameengine\GamePlayer\Netscape\windows_sdk" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\sumo\fuzzics\include" /I "..\..\..\..\..\lib\windows\openal\include" /I "..\..\..\..\..\lib\windows\python\include\python1.5" /I "..\..\..\..\source\gameengine\gameplayer\common" /I "../../../../source/blender/blenkernel" /I "../../../../source/blender/makesdna" /I "../../../../source/blender/blenlib" /I "../../../../source/blender/blenloader" /I "../../../../source/blender/render/extern/include" /I "../../../../source/blender/imbuf" /I "..\..\..\..\source\gameengine\converter" /I "..\..\..\..\source\gameengine\gameplayer\common\windows" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR /YX /FD /c
-# ADD CPP /nologo /W3 /Gm /GX /Zi /O2 /I "..\..\..\..\source\kernel\gen_messaging" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\gameengine\ketsji" /I "..\..\..\..\source\gameengine\ketsji\kxnetwork" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\rasterizer\ras_openglrasterizer" /I "..\..\..\..\source\gameengine\scenegraph" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\gameengine\soundsystem" /I "..\..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\gameengine\GamePlayer\Netscape2\windows_sdk" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\sumo\fuzzics\include" /I "..\..\..\..\..\lib\windows\openal\include" /I "..\..\..\..\..\lib\windows\python\include\python1.5" /I "..\..\..\..\source\gameengine\gameplayer\common" /I "../../../../source/blender/blenkernel" /I "../../../../source/blender/makesdna" /I "../../../../source/blender/blenlib" /I "../../../../source/blender/blenloader" /I "../../../../source/blender/render/extern/include" /I "../../../../source/blender/imbuf" /I "..\..\..\..\source\gameengine\converter" /I "..\..\..\..\source\gameengine\gameplayer\common\windows" /I "..\..\..\..\source\gameengine\gameplayer\Netscape2\windows" /I "..\..\..\..\..\lib\windows\iksolver\include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c
-# SUBTRACT CPP /Fr
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libjpeg.lib opengl32.lib glu32.lib openal_static.lib dxguid.lib /nologo /subsystem:windows /dll /debug /machine:I386 /out:"C:\Program Files\Netscape\Communicator\Program\Plugins\NPBlender.dll" /libpath:"../../../../../lib/windows/python/lib" /libpath:"../../../../../lib/windows/jpeg/lib" /libpath:"../../../../../lib/windows/openal/lib"
-# ADD LINK32 libblenkey.a libeay32.lib libz.a ws2_32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libjpeg.lib opengl32.lib glu32.lib openal_static.lib dxguid.lib /nologo /subsystem:windows /dll /debug /machine:I386 /out:"C:\Program Files\Netscape\Communicator\Program\Plugins\npBlender3DPlugin.dll" /libpath:"../../../../../lib/windows/python/lib" /libpath:"../../../../../lib/windows/jpeg/lib" /libpath:"../../../../../lib/windows/openal/lib"
-
-!ENDIF
-
-# Begin Target
-
-# Name "GP_netscape2 - Win32 Release"
-# Name "GP_netscape2 - Win32 Debug"
-# Name "GP_netscape2 - Win32 Profile"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat;for;f90"
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Netscape2\windows\Blender3DPlugin.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\blender\makesdna\intern\dna.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Netscape2\windows\netscape_plugin_Plugin.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Netscape2\windows\npblender.def
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Netscape2\windows\npblender.rc
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Netscape2\npshell.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Netscape2\windows\npwin.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Netscape2\windows\plgwnd.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\blender\blenkernel\bad_level_call_stubs\stubs.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd"
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Netscape\plgwnd.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe"
-# End Group
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\NSPlugin\autodownload.html
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Netscape\Testing\NetscapeExample.html
-# End Source File
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="GP_netscape2" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=GP_netscape2 - Win32 Profile
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "GP_netscape.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "GP_netscape.mak" CFG="GP_netscape2 - Win32 Profile"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "GP_netscape2 - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "GP_netscape2 - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "GP_netscape2 - Win32 Profile" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "GP_netscape2 - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir ".\Release"
+# PROP BASE Intermediate_Dir ".\Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "C:\Program Files\Netscape\Communicator\Program\Plugins"
+# PROP Intermediate_Dir ".\Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c
+# ADD CPP /nologo /W3 /GX /O2 /I "..\..\..\..\source\kernel\gen_messaging" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\gameengine\ketsji" /I "..\..\..\..\source\gameengine\ketsji\kxnetwork" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\rasterizer\ras_openglrasterizer" /I "..\..\..\..\source\gameengine\scenegraph" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\gameengine\soundsystem" /I "..\..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\gameengine\GamePlayer\Netscape2\windows_sdk" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\sumo\fuzzics\include" /I "..\..\..\..\..\lib\windows\openal\include" /I "..\..\..\..\..\lib\windows\python\include\python1.5" /I "..\..\..\..\source\gameengine\gameplayer\common" /I "../../../../source/blender/blenkernel" /I "../../../../source/blender/makesdna" /I "../../../../source/blender/blenlib" /I "../../../../source/blender/blenloader" /I "../../../../source/blender/render/extern/include" /I "../../../../source/blender/imbuf" /I "..\..\..\..\source\gameengine\converter" /I "..\..\..\..\source\gameengine\gameplayer\common\windows" /I "..\..\..\..\source\gameengine\gameplayer\Netscape2\windows" /I "..\..\..\..\..\lib\windows\iksolver\include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
+# ADD LINK32 libblenkey.a libeay32.lib libz.a ws2_32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libjpeg.lib opengl32.lib glu32.lib openal_static.lib dxguid.lib /nologo /subsystem:windows /dll /machine:I386 /out:"C:\Program Files\Netscape\Communicator\Program\Plugins\npBlender3DPlugin.dll" /libpath:"../../../../../lib/windows/python/lib" /libpath:"../../../../../lib/windows/jpeg/lib" /libpath:"../../../../../lib/windows/zlib/lib/" /libpath:"..\..\..\..\..\lib\windows\blenkey\lib" /libpath:"..\..\..\..\..\lib\windows\openssl\lib" /libpath:"..\..\..\..\..\lib\windows\iksolver\lib\\" /libpath:"../../../../../lib/windows/openal/lib"
+
+!ELSEIF "$(CFG)" == "GP_netscape2 - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir ".\Debug"
+# PROP BASE Intermediate_Dir ".\Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "C:\Program Files\Netscape\Communicator\Program\Plugins"
+# PROP Intermediate_Dir ".\Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c
+# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /I "..\..\..\..\source\kernel\gen_messaging" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\gameengine\ketsji" /I "..\..\..\..\source\gameengine\ketsji\kxnetwork" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\rasterizer\ras_openglrasterizer" /I "..\..\..\..\source\gameengine\scenegraph" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\gameengine\soundsystem" /I "..\..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\gameengine\GamePlayer\Netscape2\windows_sdk" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\sumo\fuzzics\include" /I "..\..\..\..\..\lib\windows\openal\include" /I "..\..\..\..\..\lib\windows\python\include\python1.5" /I "..\..\..\..\source\gameengine\gameplayer\common" /I "../../../../source/blender/blenkernel" /I "../../../../source/blender/makesdna" /I "../../../../source/blender/blenlib" /I "../../../../source/blender/blenloader" /I "../../../../source/blender/render/extern/include" /I "../../../../source/blender/imbuf" /I "..\..\..\..\source\gameengine\converter" /I "..\..\..\..\source\gameengine\gameplayer\common\windows" /I "..\..\..\..\source\gameengine\gameplayer\Netscape2\windows" /I "..\..\..\..\..\lib\windows\iksolver\include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /FR /YX /FD /c
+# ADD BASE MTL /nologo /D "_DEBUG" /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386
+# ADD LINK32 libblenkey.a libeay32.lib libz.a ws2_32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libjpeg.lib opengl32.lib glu32.lib openal_static.lib dxguid.lib /nologo /subsystem:windows /dll /debug /machine:I386 /out:"C:\Program Files\Netscape\Communicator\Program\Plugins\npBlender3DPlugin.dll" /libpath:"../../../../../lib/windows/python/lib" /libpath:"../../../../../lib/windows/jpeg/lib" /libpath:"../../../../../lib/windows/openal/lib" /libpath:"../../../../../lib/windows/zlib/lib/" /libpath:"..\..\..\..\..\lib\windows\blenkey\lib" /libpath:"..\..\..\lib\windows\openssl\lib" /libpath:"..\..\..\lib\windows\iksolver\lib\\"
+
+!ELSEIF "$(CFG)" == "GP_netscape2 - Win32 Profile"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "GP_netscape2___Win32_Profile"
+# PROP BASE Intermediate_Dir "GP_netscape2___Win32_Profile"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "GP_netscape2___Win32_Profile"
+# PROP Intermediate_Dir "GP_netscape2___Win32_Profile"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\gameengine\ketsji" /I "..\..\..\..\source\gameengine\ketsji\kxnetwork" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\rasterizer\ras_openglrasterizer" /I "..\..\..\..\source\gameengine\scenegraph" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\gameengine\soundsystem" /I "..\..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\gameengine\GamePlayer\Netscape\windows_sdk" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\sumo\fuzzics\include" /I "..\..\..\..\..\lib\windows\openal\include" /I "..\..\..\..\..\lib\windows\python\include\python1.5" /I "..\..\..\..\source\gameengine\gameplayer\common" /I "../../../../source/blender/blenkernel" /I "../../../../source/blender/makesdna" /I "../../../../source/blender/blenlib" /I "../../../../source/blender/blenloader" /I "../../../../source/blender/render/extern/include" /I "../../../../source/blender/imbuf" /I "..\..\..\..\source\gameengine\converter" /I "..\..\..\..\source\gameengine\gameplayer\common\windows" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR /YX /FD /c
+# ADD CPP /nologo /W3 /Gm /GX /Zi /O2 /I "..\..\..\..\source\kernel\gen_messaging" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\gameengine\ketsji" /I "..\..\..\..\source\gameengine\ketsji\kxnetwork" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\rasterizer\ras_openglrasterizer" /I "..\..\..\..\source\gameengine\scenegraph" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\gameengine\soundsystem" /I "..\..\..\..\source\gameengine\soundsystem\snd_openal" /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\gameengine\GamePlayer\Netscape2\windows_sdk" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\sumo\fuzzics\include" /I "..\..\..\..\..\lib\windows\openal\include" /I "..\..\..\..\..\lib\windows\python\include\python1.5" /I "..\..\..\..\source\gameengine\gameplayer\common" /I "../../../../source/blender/blenkernel" /I "../../../../source/blender/makesdna" /I "../../../../source/blender/blenlib" /I "../../../../source/blender/blenloader" /I "../../../../source/blender/render/extern/include" /I "../../../../source/blender/imbuf" /I "..\..\..\..\source\gameengine\converter" /I "..\..\..\..\source\gameengine\gameplayer\common\windows" /I "..\..\..\..\source\gameengine\gameplayer\Netscape2\windows" /I "..\..\..\..\..\lib\windows\iksolver\include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /YX /FD /c
+# SUBTRACT CPP /Fr
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libjpeg.lib opengl32.lib glu32.lib openal_static.lib dxguid.lib /nologo /subsystem:windows /dll /debug /machine:I386 /out:"C:\Program Files\Netscape\Communicator\Program\Plugins\NPBlender.dll" /libpath:"../../../../../lib/windows/python/lib" /libpath:"../../../../../lib/windows/jpeg/lib" /libpath:"../../../../../lib/windows/openal/lib"
+# ADD LINK32 libblenkey.a libeay32.lib libz.a ws2_32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libjpeg.lib opengl32.lib glu32.lib openal_static.lib dxguid.lib /nologo /subsystem:windows /dll /debug /machine:I386 /out:"C:\Program Files\Netscape\Communicator\Program\Plugins\npBlender3DPlugin.dll" /libpath:"../../../../../lib/windows/python/lib" /libpath:"../../../../../lib/windows/jpeg/lib" /libpath:"../../../../../lib/windows/openal/lib"
+
+!ENDIF
+
+# Begin Target
+
+# Name "GP_netscape2 - Win32 Release"
+# Name "GP_netscape2 - Win32 Debug"
+# Name "GP_netscape2 - Win32 Profile"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat;for;f90"
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Netscape2\windows\Blender3DPlugin.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\blender\makesdna\intern\dna.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Netscape2\windows\netscape_plugin_Plugin.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Netscape2\windows\npblender.def
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Netscape2\windows\npblender.rc
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Netscape2\npshell.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Netscape2\windows\npwin.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Netscape2\windows\plgwnd.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\blender\blenkernel\bad_level_call_stubs\stubs.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd"
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Netscape\plgwnd.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe"
+# End Group
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\NSPlugin\autodownload.html
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Netscape\Testing\NetscapeExample.html
+# End Source File
+# End Target
+# End Project
diff --git a/projectfiles/gameengine/gameplayer/ps2/GP_ps2.dsp b/projectfiles/gameengine/gameplayer/ps2/GP_ps2.dsp
index 84aa94ef1a5..6fc1d06c3f1 100644
--- a/projectfiles/gameengine/gameplayer/ps2/GP_ps2.dsp
+++ b/projectfiles/gameengine/gameplayer/ps2/GP_ps2.dsp
@@ -1,182 +1,182 @@
-# Microsoft Developer Studio Project File - Name="GP_ps2" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=GP_ps2 - Win32 Profile
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "GP_ps2.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "GP_ps2.mak" CFG="GP_ps2 - Win32 Profile"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "GP_ps2 - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "GP_ps2 - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE "GP_ps2 - Win32 Profile" (based on "Win32 (x86) Console Application")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "GP_ps2 - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\gameplayer\ps2"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /GX /O2 /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\sumo\include" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-
-!ELSEIF "$(CFG)" == "GP_ps2 - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\gameplayer\ps2\debug"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
-# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\sumo\include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-
-!ELSEIF "$(CFG)" == "GP_ps2 - Win32 Profile"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "GP_ps2___Win32_Profile"
-# PROP BASE Intermediate_Dir "GP_ps2___Win32_Profile"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "GP_ps2___Win32_Profile"
-# PROP Intermediate_Dir "GP_ps2___Win32_Profile"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\sumo\include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
-# ADD CPP /nologo /W3 /Gm /GX /Zi /O2 /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\sumo\include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-
-!ENDIF
-
-# Begin Target
-
-# Name "GP_ps2 - Win32 Release"
-# Name "GP_ps2 - Win32 Debug"
-# Name "GP_ps2 - Win32 Profile"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\PS2\DebugActuator.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\PS2\GPC_Init.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\PS2\PS2DualShockDevice.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\PS2\PS2GamePlayer.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\PS2\PS2System.cpp
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\PS2\DebugActuator.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\PS2\ExampleEngine.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\PS2\GPC_Init.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\PS2\PS2Canvas.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\PS2\PS2DualShockDevice.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\PS2\PS2InputDevice.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\PS2\PS2Rasterizer.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\PS2\PS2RenderTools.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\PS2\PS2System.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\PS2\SamplePolygonMaterial.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="GP_ps2" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=GP_ps2 - Win32 Profile
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "GP_ps2.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "GP_ps2.mak" CFG="GP_ps2 - Win32 Profile"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "GP_ps2 - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "GP_ps2 - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "GP_ps2 - Win32 Profile" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "GP_ps2 - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\gameplayer\ps2"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /GX /O2 /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\sumo\include" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+
+!ELSEIF "$(CFG)" == "GP_ps2 - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\gameplayer\ps2\debug"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\sumo\include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+
+!ELSEIF "$(CFG)" == "GP_ps2 - Win32 Profile"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "GP_ps2___Win32_Profile"
+# PROP BASE Intermediate_Dir "GP_ps2___Win32_Profile"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "GP_ps2___Win32_Profile"
+# PROP Intermediate_Dir "GP_ps2___Win32_Profile"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\sumo\include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /Zi /O2 /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\rasterizer" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\sumo\include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+
+!ENDIF
+
+# Begin Target
+
+# Name "GP_ps2 - Win32 Release"
+# Name "GP_ps2 - Win32 Debug"
+# Name "GP_ps2 - Win32 Profile"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\PS2\DebugActuator.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\PS2\GPC_Init.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\PS2\PS2DualShockDevice.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\PS2\PS2GamePlayer.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\PS2\PS2System.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\PS2\DebugActuator.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\PS2\ExampleEngine.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\PS2\GPC_Init.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\PS2\PS2Canvas.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\PS2\PS2DualShockDevice.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\PS2\PS2InputDevice.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\PS2\PS2Rasterizer.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\PS2\PS2RenderTools.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\PS2\PS2System.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\PS2\SamplePolygonMaterial.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/projectfiles/gameengine/gameplayer/qt/gp.dsp b/projectfiles/gameengine/gameplayer/qt/gp.dsp
index 512c5b69de6..9f3e82b6cd6 100644
--- a/projectfiles/gameengine/gameplayer/qt/gp.dsp
+++ b/projectfiles/gameengine/gameplayer/qt/gp.dsp
@@ -1,164 +1,164 @@
-# Microsoft Developer Studio Project File - Name="gp" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=gp - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "gp.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "gp.mak" CFG="gp - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "gp - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "gp - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "gp - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\..\..\obj\windows\gameengine\gameplayer\qt\gp"
-# PROP Intermediate_Dir "..\..\..\..\..\obj\windows\gameengine\gameplayer\qt\gp"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /W3 /GX /O2 /I "h:\qtwin\include" /I "..\..\..\..\source\gameengine\Expressions" /I "..\..\..\..\source\gameengine\GameLogic" /I "..\..\..\..\source\gameengine\Ketsji" /I "..\..\..\..\source\gameengine\Ketsji\KXNetwork" /I "..\..\..\..\source\gameengine\Network" /I "..\..\..\..\source\gameengine\Network\LoopBackNetwork" /I "..\..\..\..\source\gameengine\Rasterizer" /I "..\..\..\..\source\gameengine\Rasterizer\RAS_OpenGLRasterizer" /I "..\..\..\..\source\gameengine\SceneGraph" /I "..\..\..\..\source\sumo\Fuzzics\include" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\..\lib\windows\python\include\python2.0" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x413 /d "NDEBUG"
-# ADD RSC /l 0x413 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 opengl32.lib glu32.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib imm32.lib winmm.lib wsock32.lib h:\qtwin\lib\qt.lib h:\qtwin\lib\qnp.lib python20.lib /nologo /subsystem:windows /machine:I386 /out:"..\..\..\..\..\obj\windows\gp.exe" /libpath:"..\..\..\..\..\lib\windows\python\lib\\"
-
-!ELSEIF "$(CFG)" == "gp - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\..\..\obj\windows\gameengine\gameplayer\qt\gp\debug"
-# PROP Intermediate_Dir "..\..\..\..\..\obj\windows\gameengine\gameplayer\qt\gp\debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c
-# ADD CPP /nologo /W3 /GX /Od /I "h:\qtwin\include" /I "..\..\..\..\source\gameengine\Expressions" /I "..\..\..\..\source\gameengine\GameLogic" /I "..\..\..\..\source\gameengine\Ketsji" /I "..\..\..\..\source\gameengine\Ketsji\KXNetwork" /I "..\..\..\..\source\gameengine\Network" /I "..\..\..\..\source\gameengine\Network\LoopBackNetwork" /I "..\..\..\..\source\gameengine\Rasterizer" /I "..\..\..\..\source\gameengine\Rasterizer\RAS_OpenGLRasterizer" /I "..\..\..\..\source\gameengine\SceneGraph" /I "..\..\..\..\source\sumo\Fuzzics\include" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\..\lib\windows\python\include\python1.5" /D "_DEBUG" /D "WIN32"
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x413 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 opengl32.lib glu32.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib imm32.lib winmm.lib wsock32.lib h:\qtwin\lib\qt.lib python15_d.lib /nologo /subsystem:windows /debug /machine:I386 /out:"..\..\..\..\..\obj\windows\debug\gp.exe" /libpath:"..\..\..\..\..\lib\windows\python\lib\\"
-# SUBTRACT LINK32 /pdb:none
-
-!ENDIF
-
-# Begin Target
-
-# Name "gp - Win32 Release"
-# Name "gp - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\GP.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\GP_Init.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\QtExampleEngine.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\QtKeyboardDevice.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\QtOpenGLWidget.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\QtSystem.cpp
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\DebugActuator.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\GP_Init.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\QtExampleEngine.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\QtInputDevice.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\QtKeyboardDevice.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\QtOpenGLWidget.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\QtRenderTools.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\QtSystem.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\SamplePolygonMaterial.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="gp" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Application" 0x0101
+
+CFG=gp - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "gp.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "gp.mak" CFG="gp - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "gp - Win32 Release" (based on "Win32 (x86) Application")
+!MESSAGE "gp - Win32 Debug" (based on "Win32 (x86) Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "gp - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\..\..\obj\windows\gameengine\gameplayer\qt\gp"
+# PROP Intermediate_Dir "..\..\..\..\..\obj\windows\gameengine\gameplayer\qt\gp"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "h:\qtwin\include" /I "..\..\..\..\source\gameengine\Expressions" /I "..\..\..\..\source\gameengine\GameLogic" /I "..\..\..\..\source\gameengine\Ketsji" /I "..\..\..\..\source\gameengine\Ketsji\KXNetwork" /I "..\..\..\..\source\gameengine\Network" /I "..\..\..\..\source\gameengine\Network\LoopBackNetwork" /I "..\..\..\..\source\gameengine\Rasterizer" /I "..\..\..\..\source\gameengine\Rasterizer\RAS_OpenGLRasterizer" /I "..\..\..\..\source\gameengine\SceneGraph" /I "..\..\..\..\source\sumo\Fuzzics\include" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\..\lib\windows\python\include\python2.0" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x413 /d "NDEBUG"
+# ADD RSC /l 0x413 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
+# ADD LINK32 opengl32.lib glu32.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib imm32.lib winmm.lib wsock32.lib h:\qtwin\lib\qt.lib h:\qtwin\lib\qnp.lib python20.lib /nologo /subsystem:windows /machine:I386 /out:"..\..\..\..\..\obj\windows\gp.exe" /libpath:"..\..\..\..\..\lib\windows\python\lib\\"
+
+!ELSEIF "$(CFG)" == "gp - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\..\..\obj\windows\gameengine\gameplayer\qt\gp\debug"
+# PROP Intermediate_Dir "..\..\..\..\..\obj\windows\gameengine\gameplayer\qt\gp\debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /GX /Od /I "h:\qtwin\include" /I "..\..\..\..\source\gameengine\Expressions" /I "..\..\..\..\source\gameengine\GameLogic" /I "..\..\..\..\source\gameengine\Ketsji" /I "..\..\..\..\source\gameengine\Ketsji\KXNetwork" /I "..\..\..\..\source\gameengine\Network" /I "..\..\..\..\source\gameengine\Network\LoopBackNetwork" /I "..\..\..\..\source\gameengine\Rasterizer" /I "..\..\..\..\source\gameengine\Rasterizer\RAS_OpenGLRasterizer" /I "..\..\..\..\source\gameengine\SceneGraph" /I "..\..\..\..\source\sumo\Fuzzics\include" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\..\lib\windows\python\include\python1.5" /D "_DEBUG" /D "WIN32"
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x413 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 opengl32.lib glu32.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib imm32.lib winmm.lib wsock32.lib h:\qtwin\lib\qt.lib python15_d.lib /nologo /subsystem:windows /debug /machine:I386 /out:"..\..\..\..\..\obj\windows\debug\gp.exe" /libpath:"..\..\..\..\..\lib\windows\python\lib\\"
+# SUBTRACT LINK32 /pdb:none
+
+!ENDIF
+
+# Begin Target
+
+# Name "gp - Win32 Release"
+# Name "gp - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\GP.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\GP_Init.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\QtExampleEngine.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\QtKeyboardDevice.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\QtOpenGLWidget.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\QtSystem.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\DebugActuator.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\GP_Init.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\QtExampleEngine.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\QtInputDevice.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\QtKeyboardDevice.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\QtOpenGLWidget.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\QtRenderTools.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\QtSystem.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\SamplePolygonMaterial.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/projectfiles/gameengine/gameplayer/qt/gpplugin.dsp b/projectfiles/gameengine/gameplayer/qt/gpplugin.dsp
index 180f147c79a..65148dd706d 100644
--- a/projectfiles/gameengine/gameplayer/qt/gpplugin.dsp
+++ b/projectfiles/gameengine/gameplayer/qt/gpplugin.dsp
@@ -1,824 +1,824 @@
-# Microsoft Developer Studio Project File - Name="gpplugin" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=gpplugin - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "gpplugin.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "gpplugin.mak" CFG="gpplugin - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "gpplugin - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "gpplugin - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "gpplugin - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\..\..\obj\windows\gameengine\gameplayer\qt\gpplugin"
-# PROP Intermediate_Dir "..\..\..\..\..\obj\windows\gameengine\gameplayer\qt\gpplugin"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GPPLUGIN_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "h:\qtwin\include" /I "..\..\..\..\source\gameengine\Expressions" /I "..\..\..\..\source\gameengine\GameLogic" /I "..\..\..\..\source\gameengine\Ketsji" /I "..\..\..\..\source\gameengine\Ketsji\KXNetwork" /I "..\..\..\..\source\gameengine\Network" /I "..\..\..\..\source\gameengine\Network\LoopBackNetwork" /I "..\..\..\..\source\gameengine\Rasterizer" /I "..\..\..\..\source\gameengine\Rasterizer\RAS_OpenGLRasterizer" /I "..\..\..\..\source\gameengine\SceneGraph" /I "..\..\..\..\source\sumo\Fuzzics\include" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\..\lib\windows\python\include\python2.0" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GPPLUGIN_EXPORTS" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x413 /d "NDEBUG"
-# ADD RSC /l 0x413 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib imm32.lib winmm.lib wsock32.lib h:\qtwin\lib\qnp.lib h:\qtwin\lib\qt.lib opengl32.lib glu32.lib python20.lib /nologo /dll /machine:I386 /out:"..\..\..\..\..\obj\windows\npWebGP.dll" /libpath:"..\..\..\..\..\lib\windows\python\lib\\"
-
-!ELSEIF "$(CFG)" == "gpplugin - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\..\..\obj\windows\gameengine\gameplayer\qt\gpplugin\debug"
-# PROP Intermediate_Dir "..\..\..\..\..\obj\windows\gameengine\gameplayer\qt\gpplugin\debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GPPLUGIN_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /GX /Zi /Od /I "h:\qtwin\include" /I "..\..\..\..\source\gameengine\Expressions" /I "..\..\..\..\source\gameengine\GameLogic" /I "..\..\..\..\source\gameengine\Ketsji" /I "..\..\..\..\source\gameengine\Ketsji\KXNetwork" /I "..\..\..\..\source\gameengine\Network" /I "..\..\..\..\source\gameengine\Network\LoopBackNetwork" /I "..\..\..\..\source\gameengine\Rasterizer" /I "..\..\..\..\source\gameengine\Rasterizer\RAS_OpenGLRasterizer" /I "..\..\..\..\source\gameengine\SceneGraph" /I "..\..\..\..\source\sumo\Fuzzics\include" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\..\lib\windows\python\include\python1.5" /D "WIN32" /D "PLUGIN" /D "_DEBUG"
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x413 /d "_DEBUG"
-# ADD RSC /l 0x409
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib imm32.lib winmm.lib wsock32.lib h:\qtwin\lib\qnp.lib h:\qtwin\lib\qt.lib opengl32.lib glu32.lib python15_d.lib /nologo /subsystem:windows /dll /debug /machine:I386 /def:"..\..\..\..\source\gameengine\GamePlayer\Qt\GP.def" /out:"..\..\..\..\..\obj\windows\debug\npWebGP.dll" /libpath:"..\..\..\..\..\lib\windows\python\lib"
-# SUBTRACT LINK32 /pdb:none
-
-!ENDIF
-
-# Begin Target
-
-# Name "gpplugin - Win32 Release"
-# Name "gpplugin - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\GP.cpp
-DEP_CPP_GP_CP=\
- "..\..\..\..\..\qtwin\include\qapplication.h"\
- "..\..\..\..\..\qtwin\include\qarray.h"\
- "..\..\..\..\..\qtwin\include\qasciidict.h"\
- "..\..\..\..\..\qtwin\include\qbrush.h"\
- "..\..\..\..\..\qtwin\include\qcollection.h"\
- "..\..\..\..\..\qtwin\include\qcolor.h"\
- "..\..\..\..\..\qtwin\include\qconfig-large.h"\
- "..\..\..\..\..\qtwin\include\qconfig-medium.h"\
- "..\..\..\..\..\qtwin\include\qconfig-minimal.h"\
- "..\..\..\..\..\qtwin\include\qconfig-small.h"\
- "..\..\..\..\..\qtwin\include\qconfig.h"\
- "..\..\..\..\..\qtwin\include\qcstring.h"\
- "..\..\..\..\..\qtwin\include\qcursor.h"\
- "..\..\..\..\..\qtwin\include\qdatastream.h"\
- "..\..\..\..\..\qtwin\include\qdialog.h"\
- "..\..\..\..\..\qtwin\include\qevent.h"\
- "..\..\..\..\..\qtwin\include\qfeatures.h"\
- "..\..\..\..\..\qtwin\include\qfont.h"\
- "..\..\..\..\..\qtwin\include\qfontinfo.h"\
- "..\..\..\..\..\qtwin\include\qfontmetrics.h"\
- "..\..\..\..\..\qtwin\include\qframe.h"\
- "..\..\..\..\..\qtwin\include\qgarray.h"\
- "..\..\..\..\..\qtwin\include\qgdict.h"\
- "..\..\..\..\..\qtwin\include\qgl.h"\
- "..\..\..\..\..\qtwin\include\qglist.h"\
- "..\..\..\..\..\qtwin\include\qglobal.h"\
- "..\..\..\..\..\qtwin\include\qiconset.h"\
- "..\..\..\..\..\qtwin\include\qimage.h"\
- "..\..\..\..\..\qtwin\include\qintdict.h"\
- "..\..\..\..\..\qtwin\include\qiodevice.h"\
- "..\..\..\..\..\qtwin\include\qlist.h"\
- "..\..\..\..\..\qtwin\include\qmenudata.h"\
- "..\..\..\..\..\qtwin\include\qmessagebox.h"\
- "..\..\..\..\..\qtwin\include\qmime.h"\
- "..\..\..\..\..\qtwin\include\qnamespace.h"\
- "..\..\..\..\..\qtwin\include\qnp.h"\
- "..\..\..\..\..\qtwin\include\qobject.h"\
- "..\..\..\..\..\qtwin\include\qobjectdefs.h"\
- "..\..\..\..\..\qtwin\include\qpaintdevice.h"\
- "..\..\..\..\..\qtwin\include\qpainter.h"\
- "..\..\..\..\..\qtwin\include\qpalette.h"\
- "..\..\..\..\..\qtwin\include\qpen.h"\
- "..\..\..\..\..\qtwin\include\qpixmap.h"\
- "..\..\..\..\..\qtwin\include\qpngio.h"\
- "..\..\..\..\..\qtwin\include\qpoint.h"\
- "..\..\..\..\..\qtwin\include\qpointarray.h"\
- "..\..\..\..\..\qtwin\include\qpopupmenu.h"\
- "..\..\..\..\..\qtwin\include\qrect.h"\
- "..\..\..\..\..\qtwin\include\qregexp.h"\
- "..\..\..\..\..\qtwin\include\qregion.h"\
- "..\..\..\..\..\qtwin\include\qshared.h"\
- "..\..\..\..\..\qtwin\include\qsignal.h"\
- "..\..\..\..\..\qtwin\include\qsize.h"\
- "..\..\..\..\..\qtwin\include\qsizepolicy.h"\
- "..\..\..\..\..\qtwin\include\qstring.h"\
- "..\..\..\..\..\qtwin\include\qstringlist.h"\
- "..\..\..\..\..\qtwin\include\qstrlist.h"\
- "..\..\..\..\..\qtwin\include\qstyle.h"\
- "..\..\..\..\..\qtwin\include\qt_windows.h"\
- "..\..\..\..\..\qtwin\include\qtranslator.h"\
- "..\..\..\..\..\qtwin\include\qvaluelist.h"\
- "..\..\..\..\..\qtwin\include\qwidget.h"\
- "..\..\..\..\..\qtwin\include\qwindowdefs.h"\
- "..\..\..\..\..\qtwin\include\qwindowdefs_win.h"\
- "..\..\..\..\..\qtwin\include\qwmatrix.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\abstract.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\bufferobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\ceval.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\classobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\cobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\complexobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\config.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\dictobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\fileobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\floatobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\funcobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\import.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\intobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\intrcheck.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\listobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\longobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\methodobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\modsupport.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\moduleobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\mymalloc.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\myproto.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\object.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\objimpl.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\patchlevel.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\pydebug.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\pyerrors.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\pyfpe.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\pystate.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\Python.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\pythonrun.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\rangeobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\sliceobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\stringobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\sysmodule.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\traceback.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\tupleobject.h"\
- "..\..\..\..\source\gameengine\GameLogic\SCA_IInputDevice.h"\
- "..\..\..\..\source\gameengine\GameLogic\SCA_ISystem.h"\
- "..\..\..\..\source\gameengine\GamePlayer\Qt\GP_Init.h"\
- "..\..\..\..\source\gameengine\GamePlayer\Qt\QtInputDevice.h"\
- "..\..\..\..\source\gameengine\GamePlayer\Qt\QtKeyboardDevice.h"\
- "..\..\..\..\source\gameengine\GamePlayer\Qt\QtOpenGLWidget.h"\
- "..\..\..\..\source\gameengine\GamePlayer\Qt\QtRenderTools.h"\
- "..\..\..\..\source\gameengine\GamePlayer\Qt\QtSystem.h"\
- "..\..\..\..\source\gameengine\Network\LoopBackNetwork\NG_LoopBackNetworkDeviceInterface.h"\
- "..\..\..\..\source\gameengine\Network\NG_NetworkDeviceInterface.h"\
- "..\..\..\..\source\gameengine\Network\NG_NetworkScene.h"\
- "..\..\..\..\source\gameengine\Rasterizer\RAS_ICanvas.h"\
- "..\..\..\..\source\gameengine\Rasterizer\RAS_IPolygonMaterial.h"\
- "..\..\..\..\source\gameengine\Rasterizer\RAS_IRasterizer.h"\
- "..\..\..\..\source\gameengine\Rasterizer\RAS_IRenderTools.h"\
- "..\..\..\..\source\gameengine\Rasterizer\RAS_MaterialBucket.h"\
- "..\..\..\..\source\gameengine\Rasterizer\RAS_TexVert.h"\
- "..\..\..\..\source\kernel\gen_system\GEN_HashedString.h"\
- "..\..\..\..\source\kernel\gen_system\GEN_Matrix4x4.h"\
- "..\..\..\..\source\kernel\gen_system\GEN_StdString.h"\
- "..\..\..\..\..\lib\windows\moto\include\GEN_Map.h"\
- "..\..\..\..\..\lib\windows\moto\include\GEN_MinMax.h"\
- "..\..\..\..\..\lib\windows\moto\include\GEN_Optimize.h"\
- "..\..\..\..\..\lib\windows\moto\include\GEN_random.h"\
- "..\..\..\..\..\lib\windows\moto\include\GEN_Stream.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_assert.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Matrix3x3.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Matrix3x3.inl"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Point2.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Point2.inl"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Point3.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Point3.inl"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Quaternion.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Quaternion.inl"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Scalar.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Transform.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Tuple2.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Tuple3.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Tuple4.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Vector2.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Vector2.inl"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Vector3.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Vector3.inl"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Vector4.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Vector4.inl"\
- "..\..\..\..\..\lib\windows\moto\include\NM_Scalar.h"\
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\GP_Init.cpp
-DEP_CPP_GP_IN=\
- "..\..\..\..\..\lib\windows\python\include\python1.5\abstract.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\bufferobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\ceval.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\classobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\cobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\complexobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\config.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\dictobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\fileobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\floatobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\funcobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\import.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\intobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\intrcheck.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\listobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\longobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\methodobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\modsupport.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\moduleobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\mymalloc.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\myproto.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\object.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\objimpl.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\patchlevel.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\pydebug.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\pyerrors.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\pyfpe.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\pystate.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\Python.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\pythonrun.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\rangeobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\sliceobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\stringobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\sysmodule.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\traceback.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\tupleobject.h"\
- "..\..\..\..\source\gameengine\Expressions\BoolValue.h"\
- "..\..\..\..\source\gameengine\Expressions\ListValue.h"\
- "..\..\..\..\source\gameengine\Expressions\PyObjectPlus.h"\
- "..\..\..\..\source\gameengine\Expressions\Value.h"\
- "..\..\..\..\source\gameengine\GameLogic\SCA_AlwaysEventManager.h"\
- "..\..\..\..\source\gameengine\GameLogic\SCA_AlwaysSensor.h"\
- "..\..\..\..\source\gameengine\GameLogic\SCA_ANDController.h"\
- "..\..\..\..\source\gameengine\GameLogic\SCA_EventManager.h"\
- "..\..\..\..\source\gameengine\GameLogic\SCA_IActuator.h"\
- "..\..\..\..\source\gameengine\GameLogic\SCA_IController.h"\
- "..\..\..\..\source\gameengine\GameLogic\SCA_IInputDevice.h"\
- "..\..\..\..\source\gameengine\GameLogic\SCA_ILogicBrick.h"\
- "..\..\..\..\source\gameengine\GameLogic\SCA_IObject.h"\
- "..\..\..\..\source\gameengine\GameLogic\SCA_ISensor.h"\
- "..\..\..\..\source\gameengine\GameLogic\SCA_ISystem.h"\
- "..\..\..\..\source\gameengine\GameLogic\SCA_KeyboardManager.h"\
- "..\..\..\..\source\gameengine\GameLogic\SCA_KeyboardSensor.h"\
- "..\..\..\..\source\gameengine\GameLogic\SCA_LogicManager.h"\
- "..\..\..\..\source\gameengine\GameLogic\SCA_PythonController.h"\
- "..\..\..\..\source\gameengine\GamePlayer\Qt\DebugActuator.h"\
- "..\..\..\..\source\gameengine\GamePlayer\Qt\QtExampleEngine.h"\
- "..\..\..\..\source\gameengine\GamePlayer\Qt\SamplePolygonMaterial.h"\
- "..\..\..\..\source\gameengine\Ketsji\KX_GameObject.h"\
- "..\..\..\..\source\gameengine\Ketsji\KX_ObjectActuator.h"\
- "..\..\..\..\source\gameengine\Ketsji\KX_PythonInit.h"\
- "..\..\..\..\source\gameengine\Ketsji\KX_SoundActuator.h"\
- "..\..\..\..\source\gameengine\Ketsji\KXNetwork\KX_NetworkEventManager.h"\
- "..\..\..\..\source\gameengine\Network\LoopBackNetwork\NG_LoopBackNetworkDeviceInterface.h"\
- "..\..\..\..\source\gameengine\Network\NG_NetworkDeviceInterface.h"\
- "..\..\..\..\source\gameengine\Network\NG_NetworkScene.h"\
- "..\..\..\..\source\gameengine\Rasterizer\RAS_BucketManager.h"\
- "..\..\..\..\source\gameengine\Rasterizer\RAS_ICanvas.h"\
- "..\..\..\..\source\gameengine\Rasterizer\RAS_IPolygonMaterial.h"\
- "..\..\..\..\source\gameengine\Rasterizer\RAS_IRasterizer.h"\
- "..\..\..\..\source\gameengine\Rasterizer\RAS_MaterialBucket.h"\
- "..\..\..\..\source\gameengine\Rasterizer\RAS_MeshObject.h"\
- "..\..\..\..\source\gameengine\Rasterizer\RAS_OpenGLRasterizer\RAS_OpenGLRasterizer.h"\
- "..\..\..\..\source\gameengine\Rasterizer\RAS_Polygon.h"\
- "..\..\..\..\source\gameengine\Rasterizer\RAS_TexVert.h"\
- "..\..\..\..\source\gameengine\SceneGraph\SG_IObject.h"\
- "..\..\..\..\source\gameengine\SceneGraph\SG_Node.h"\
- "..\..\..\..\source\gameengine\SceneGraph\SG_Spatial.h"\
- "..\..\..\..\source\kernel\gen_system\GEN_HashedPtr.h"\
- "..\..\..\..\source\kernel\gen_system\GEN_HashedString.h"\
- "..\..\..\..\source\kernel\gen_system\GEN_Matrix4x4.h"\
- "..\..\..\..\source\kernel\gen_system\GEN_StdString.h"\
- "..\..\..\..\source\sumo\include\solid.h"\
- "..\..\..\..\source\sumo\include\solid_types.h"\
- "..\..\..\..\..\lib\windows\moto\include\GEN_Map.h"\
- "..\..\..\..\..\lib\windows\moto\include\GEN_MinMax.h"\
- "..\..\..\..\..\lib\windows\moto\include\GEN_Optimize.h"\
- "..\..\..\..\..\lib\windows\moto\include\GEN_random.h"\
- "..\..\..\..\..\lib\windows\moto\include\GEN_Stream.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_assert.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Matrix3x3.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Matrix3x3.inl"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Point2.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Point2.inl"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Point3.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Point3.inl"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Quaternion.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Quaternion.inl"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Scalar.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Transform.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Tuple2.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Tuple3.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Tuple4.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Vector2.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Vector2.inl"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Vector3.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Vector3.inl"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Vector4.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Vector4.inl"\
- "..\..\..\..\..\lib\windows\moto\include\NM_Scalar.h"\
-
-NODEP_CPP_GP_IN=\
- "..\..\..\..\source\gameengine\GamePlayer\Qt\GPC_OpenALWaveCache.h"\
- "..\..\..\..\source\gameengine\GamePlayer\Qt\OpenALScene.h"\
- "..\..\..\..\source\gameengine\GamePlayer\Qt\SND_SoundObject.h"\
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\QtExampleEngine.cpp
-DEP_CPP_QTEXA=\
- "..\..\..\..\..\lib\windows\python\include\python1.5\abstract.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\bufferobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\ceval.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\classobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\cobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\complexobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\config.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\dictobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\fileobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\floatobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\funcobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\import.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\intobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\intrcheck.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\listobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\longobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\methodobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\modsupport.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\moduleobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\mymalloc.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\myproto.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\object.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\objimpl.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\patchlevel.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\pydebug.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\pyerrors.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\pyfpe.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\pystate.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\Python.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\pythonrun.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\rangeobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\sliceobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\stringobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\sysmodule.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\traceback.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\tupleobject.h"\
- "..\..\..\..\source\gameengine\Expressions\BoolValue.h"\
- "..\..\..\..\source\gameengine\Expressions\IntValue.h"\
- "..\..\..\..\source\gameengine\Expressions\ListValue.h"\
- "..\..\..\..\source\gameengine\Expressions\PyObjectPlus.h"\
- "..\..\..\..\source\gameengine\Expressions\Value.h"\
- "..\..\..\..\source\gameengine\GameLogic\SCA_IActuator.h"\
- "..\..\..\..\source\gameengine\GameLogic\SCA_IInputDevice.h"\
- "..\..\..\..\source\gameengine\GameLogic\SCA_ILogicBrick.h"\
- "..\..\..\..\source\gameengine\GameLogic\SCA_IObject.h"\
- "..\..\..\..\source\gameengine\GameLogic\SCA_ISystem.h"\
- "..\..\..\..\source\gameengine\GameLogic\SCA_LogicManager.h"\
- "..\..\..\..\source\gameengine\GamePlayer\Qt\QtExampleEngine.h"\
- "..\..\..\..\source\gameengine\Ketsji\KX_Camera.h"\
- "..\..\..\..\source\gameengine\Ketsji\KX_GameObject.h"\
- "..\..\..\..\source\gameengine\Ketsji\KX_ObjectActuator.h"\
- "..\..\..\..\source\gameengine\Network\NG_NetworkScene.h"\
- "..\..\..\..\source\gameengine\Rasterizer\RAS_BucketManager.h"\
- "..\..\..\..\source\gameengine\Rasterizer\RAS_CameraData.h"\
- "..\..\..\..\source\gameengine\Rasterizer\RAS_IPolygonMaterial.h"\
- "..\..\..\..\source\gameengine\Rasterizer\RAS_IRasterizer.h"\
- "..\..\..\..\source\gameengine\Rasterizer\RAS_IRenderTools.h"\
- "..\..\..\..\source\gameengine\Rasterizer\RAS_MaterialBucket.h"\
- "..\..\..\..\source\gameengine\Rasterizer\RAS_MeshObject.h"\
- "..\..\..\..\source\gameengine\Rasterizer\RAS_Polygon.h"\
- "..\..\..\..\source\gameengine\Rasterizer\RAS_TexVert.h"\
- "..\..\..\..\source\gameengine\SceneGraph\SG_IObject.h"\
- "..\..\..\..\source\gameengine\SceneGraph\SG_Node.h"\
- "..\..\..\..\source\gameengine\SceneGraph\SG_Spatial.h"\
- "..\..\..\..\source\kernel\gen_system\GEN_HashedPtr.h"\
- "..\..\..\..\source\kernel\gen_system\GEN_HashedString.h"\
- "..\..\..\..\source\kernel\gen_system\GEN_Matrix4x4.h"\
- "..\..\..\..\source\kernel\gen_system\GEN_StdString.h"\
- "..\..\..\..\source\sumo\Fuzzics\include\SM_Scene.h"\
- "..\..\..\..\source\sumo\include\solid.h"\
- "..\..\..\..\source\sumo\include\solid_types.h"\
- "..\..\..\..\..\lib\windows\moto\include\GEN_Map.h"\
- "..\..\..\..\..\lib\windows\moto\include\GEN_MinMax.h"\
- "..\..\..\..\..\lib\windows\moto\include\GEN_Optimize.h"\
- "..\..\..\..\..\lib\windows\moto\include\GEN_random.h"\
- "..\..\..\..\..\lib\windows\moto\include\GEN_Stream.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_assert.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Matrix3x3.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Matrix3x3.inl"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Point2.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Point2.inl"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Point3.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Point3.inl"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Quaternion.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Quaternion.inl"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Scalar.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Transform.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Tuple2.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Tuple3.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Tuple4.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Vector2.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Vector2.inl"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Vector3.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Vector3.inl"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Vector4.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Vector4.inl"\
- "..\..\..\..\..\lib\windows\moto\include\NM_Scalar.h"\
-
-NODEP_CPP_QTEXA=\
- "..\..\..\..\source\gameengine\GamePlayer\Qt\OpenALScene.h"\
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\QtKeyboardDevice.cpp
-DEP_CPP_QTKEY=\
- "..\..\..\..\source\gameengine\GameLogic\SCA_IInputDevice.h"\
- "..\..\..\..\source\gameengine\GamePlayer\Qt\QtInputDevice.h"\
- "..\..\..\..\source\gameengine\GamePlayer\Qt\QtKeyboardDevice.h"\
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\QtOpenGLWidget.cpp
-DEP_CPP_QTOPE=\
- "..\..\..\..\..\qtwin\include\qapplication.h"\
- "..\..\..\..\..\qtwin\include\qarray.h"\
- "..\..\..\..\..\qtwin\include\qasciidict.h"\
- "..\..\..\..\..\qtwin\include\qbrush.h"\
- "..\..\..\..\..\qtwin\include\qcollection.h"\
- "..\..\..\..\..\qtwin\include\qcolor.h"\
- "..\..\..\..\..\qtwin\include\qconfig-large.h"\
- "..\..\..\..\..\qtwin\include\qconfig-medium.h"\
- "..\..\..\..\..\qtwin\include\qconfig-minimal.h"\
- "..\..\..\..\..\qtwin\include\qconfig-small.h"\
- "..\..\..\..\..\qtwin\include\qconfig.h"\
- "..\..\..\..\..\qtwin\include\qcstring.h"\
- "..\..\..\..\..\qtwin\include\qcursor.h"\
- "..\..\..\..\..\qtwin\include\qdatastream.h"\
- "..\..\..\..\..\qtwin\include\qevent.h"\
- "..\..\..\..\..\qtwin\include\qfeatures.h"\
- "..\..\..\..\..\qtwin\include\qfont.h"\
- "..\..\..\..\..\qtwin\include\qfontinfo.h"\
- "..\..\..\..\..\qtwin\include\qfontmetrics.h"\
- "..\..\..\..\..\qtwin\include\qframe.h"\
- "..\..\..\..\..\qtwin\include\qgarray.h"\
- "..\..\..\..\..\qtwin\include\qgdict.h"\
- "..\..\..\..\..\qtwin\include\qgl.h"\
- "..\..\..\..\..\qtwin\include\qglist.h"\
- "..\..\..\..\..\qtwin\include\qglobal.h"\
- "..\..\..\..\..\qtwin\include\qiconset.h"\
- "..\..\..\..\..\qtwin\include\qintdict.h"\
- "..\..\..\..\..\qtwin\include\qiodevice.h"\
- "..\..\..\..\..\qtwin\include\qlist.h"\
- "..\..\..\..\..\qtwin\include\qmenudata.h"\
- "..\..\..\..\..\qtwin\include\qmime.h"\
- "..\..\..\..\..\qtwin\include\qnamespace.h"\
- "..\..\..\..\..\qtwin\include\qobject.h"\
- "..\..\..\..\..\qtwin\include\qobjectdefs.h"\
- "..\..\..\..\..\qtwin\include\qpaintdevice.h"\
- "..\..\..\..\..\qtwin\include\qpalette.h"\
- "..\..\..\..\..\qtwin\include\qpixmap.h"\
- "..\..\..\..\..\qtwin\include\qpoint.h"\
- "..\..\..\..\..\qtwin\include\qpopupmenu.h"\
- "..\..\..\..\..\qtwin\include\qrect.h"\
- "..\..\..\..\..\qtwin\include\qregexp.h"\
- "..\..\..\..\..\qtwin\include\qregion.h"\
- "..\..\..\..\..\qtwin\include\qshared.h"\
- "..\..\..\..\..\qtwin\include\qsignal.h"\
- "..\..\..\..\..\qtwin\include\qsize.h"\
- "..\..\..\..\..\qtwin\include\qsizepolicy.h"\
- "..\..\..\..\..\qtwin\include\qstring.h"\
- "..\..\..\..\..\qtwin\include\qstringlist.h"\
- "..\..\..\..\..\qtwin\include\qstyle.h"\
- "..\..\..\..\..\qtwin\include\qt_windows.h"\
- "..\..\..\..\..\qtwin\include\qtranslator.h"\
- "..\..\..\..\..\qtwin\include\qvaluelist.h"\
- "..\..\..\..\..\qtwin\include\qwidget.h"\
- "..\..\..\..\..\qtwin\include\qwindowdefs.h"\
- "..\..\..\..\..\qtwin\include\qwindowdefs_win.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\abstract.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\bufferobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\ceval.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\classobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\cobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\complexobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\config.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\dictobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\fileobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\floatobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\funcobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\import.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\intobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\intrcheck.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\listobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\longobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\methodobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\modsupport.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\moduleobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\mymalloc.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\myproto.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\object.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\objimpl.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\patchlevel.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\pydebug.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\pyerrors.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\pyfpe.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\pystate.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\Python.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\pythonrun.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\rangeobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\sliceobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\stringobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\sysmodule.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\traceback.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\tupleobject.h"\
- "..\..\..\..\source\gameengine\GameLogic\SCA_IInputDevice.h"\
- "..\..\..\..\source\gameengine\GameLogic\SCA_ISystem.h"\
- "..\..\..\..\source\gameengine\GamePlayer\Qt\GP_Init.h"\
- "..\..\..\..\source\gameengine\GamePlayer\Qt\QtInputDevice.h"\
- "..\..\..\..\source\gameengine\GamePlayer\Qt\QtKeyboardDevice.h"\
- "..\..\..\..\source\gameengine\GamePlayer\Qt\QtOpenGLWidget.h"\
- "..\..\..\..\source\gameengine\GamePlayer\Qt\QtRenderTools.h"\
- "..\..\..\..\source\gameengine\GamePlayer\Qt\QtSystem.h"\
- "..\..\..\..\source\gameengine\Rasterizer\RAS_ICanvas.h"\
- "..\..\..\..\source\gameengine\Rasterizer\RAS_IPolygonMaterial.h"\
- "..\..\..\..\source\gameengine\Rasterizer\RAS_IRasterizer.h"\
- "..\..\..\..\source\gameengine\Rasterizer\RAS_IRenderTools.h"\
- "..\..\..\..\source\gameengine\Rasterizer\RAS_MaterialBucket.h"\
- "..\..\..\..\source\gameengine\Rasterizer\RAS_TexVert.h"\
- "..\..\..\..\source\kernel\gen_system\GEN_HashedString.h"\
- "..\..\..\..\source\kernel\gen_system\GEN_Matrix4x4.h"\
- "..\..\..\..\source\kernel\gen_system\GEN_StdString.h"\
- "..\..\..\..\..\lib\windows\moto\include\GEN_Map.h"\
- "..\..\..\..\..\lib\windows\moto\include\GEN_MinMax.h"\
- "..\..\..\..\..\lib\windows\moto\include\GEN_Optimize.h"\
- "..\..\..\..\..\lib\windows\moto\include\GEN_random.h"\
- "..\..\..\..\..\lib\windows\moto\include\GEN_Stream.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_assert.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Matrix3x3.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Matrix3x3.inl"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Point2.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Point2.inl"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Point3.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Point3.inl"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Quaternion.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Quaternion.inl"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Scalar.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Transform.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Tuple2.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Tuple3.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Tuple4.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Vector2.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Vector2.inl"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Vector3.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Vector3.inl"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Vector4.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Vector4.inl"\
- "..\..\..\..\..\lib\windows\moto\include\NM_Scalar.h"\
-
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\QtSystem.cpp
-DEP_CPP_QTSYS=\
- "..\..\..\..\..\qtwin\include\qapplication.h"\
- "..\..\..\..\..\qtwin\include\qarray.h"\
- "..\..\..\..\..\qtwin\include\qasciidict.h"\
- "..\..\..\..\..\qtwin\include\qbrush.h"\
- "..\..\..\..\..\qtwin\include\qcollection.h"\
- "..\..\..\..\..\qtwin\include\qcolor.h"\
- "..\..\..\..\..\qtwin\include\qconfig-large.h"\
- "..\..\..\..\..\qtwin\include\qconfig-medium.h"\
- "..\..\..\..\..\qtwin\include\qconfig-minimal.h"\
- "..\..\..\..\..\qtwin\include\qconfig-small.h"\
- "..\..\..\..\..\qtwin\include\qconfig.h"\
- "..\..\..\..\..\qtwin\include\qcstring.h"\
- "..\..\..\..\..\qtwin\include\qcursor.h"\
- "..\..\..\..\..\qtwin\include\qdatastream.h"\
- "..\..\..\..\..\qtwin\include\qevent.h"\
- "..\..\..\..\..\qtwin\include\qfeatures.h"\
- "..\..\..\..\..\qtwin\include\qfont.h"\
- "..\..\..\..\..\qtwin\include\qfontinfo.h"\
- "..\..\..\..\..\qtwin\include\qfontmetrics.h"\
- "..\..\..\..\..\qtwin\include\qframe.h"\
- "..\..\..\..\..\qtwin\include\qgarray.h"\
- "..\..\..\..\..\qtwin\include\qgdict.h"\
- "..\..\..\..\..\qtwin\include\qgl.h"\
- "..\..\..\..\..\qtwin\include\qglist.h"\
- "..\..\..\..\..\qtwin\include\qglobal.h"\
- "..\..\..\..\..\qtwin\include\qiconset.h"\
- "..\..\..\..\..\qtwin\include\qintdict.h"\
- "..\..\..\..\..\qtwin\include\qiodevice.h"\
- "..\..\..\..\..\qtwin\include\qlist.h"\
- "..\..\..\..\..\qtwin\include\qmenudata.h"\
- "..\..\..\..\..\qtwin\include\qmime.h"\
- "..\..\..\..\..\qtwin\include\qnamespace.h"\
- "..\..\..\..\..\qtwin\include\qobject.h"\
- "..\..\..\..\..\qtwin\include\qobjectdefs.h"\
- "..\..\..\..\..\qtwin\include\qpaintdevice.h"\
- "..\..\..\..\..\qtwin\include\qpalette.h"\
- "..\..\..\..\..\qtwin\include\qpixmap.h"\
- "..\..\..\..\..\qtwin\include\qpoint.h"\
- "..\..\..\..\..\qtwin\include\qpopupmenu.h"\
- "..\..\..\..\..\qtwin\include\qrect.h"\
- "..\..\..\..\..\qtwin\include\qregexp.h"\
- "..\..\..\..\..\qtwin\include\qregion.h"\
- "..\..\..\..\..\qtwin\include\qshared.h"\
- "..\..\..\..\..\qtwin\include\qsignal.h"\
- "..\..\..\..\..\qtwin\include\qsize.h"\
- "..\..\..\..\..\qtwin\include\qsizepolicy.h"\
- "..\..\..\..\..\qtwin\include\qstring.h"\
- "..\..\..\..\..\qtwin\include\qstringlist.h"\
- "..\..\..\..\..\qtwin\include\qstyle.h"\
- "..\..\..\..\..\qtwin\include\qt_windows.h"\
- "..\..\..\..\..\qtwin\include\qtranslator.h"\
- "..\..\..\..\..\qtwin\include\qvaluelist.h"\
- "..\..\..\..\..\qtwin\include\qwidget.h"\
- "..\..\..\..\..\qtwin\include\qwindowdefs.h"\
- "..\..\..\..\..\qtwin\include\qwindowdefs_win.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\abstract.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\bufferobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\ceval.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\classobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\cobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\complexobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\config.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\dictobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\fileobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\floatobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\funcobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\import.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\intobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\intrcheck.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\listobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\longobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\methodobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\modsupport.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\moduleobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\mymalloc.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\myproto.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\object.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\objimpl.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\patchlevel.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\pydebug.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\pyerrors.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\pyfpe.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\pystate.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\Python.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\pythonrun.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\rangeobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\sliceobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\stringobject.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\sysmodule.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\traceback.h"\
- "..\..\..\..\..\lib\windows\python\include\python1.5\tupleobject.h"\
- "..\..\..\..\source\gameengine\GameLogic\SCA_IInputDevice.h"\
- "..\..\..\..\source\gameengine\GameLogic\SCA_ISystem.h"\
- "..\..\..\..\source\gameengine\GamePlayer\Qt\GP_Init.h"\
- "..\..\..\..\source\gameengine\GamePlayer\Qt\QtInputDevice.h"\
- "..\..\..\..\source\gameengine\GamePlayer\Qt\QtKeyboardDevice.h"\
- "..\..\..\..\source\gameengine\GamePlayer\Qt\QtOpenGLWidget.h"\
- "..\..\..\..\source\gameengine\GamePlayer\Qt\QtRenderTools.h"\
- "..\..\..\..\source\gameengine\GamePlayer\Qt\QtSystem.h"\
- "..\..\..\..\source\gameengine\Network\LoopBackNetwork\NG_LoopBackNetworkDeviceInterface.h"\
- "..\..\..\..\source\gameengine\Network\NG_NetworkDeviceInterface.h"\
- "..\..\..\..\source\gameengine\Network\NG_NetworkScene.h"\
- "..\..\..\..\source\gameengine\Rasterizer\RAS_ICanvas.h"\
- "..\..\..\..\source\gameengine\Rasterizer\RAS_IPolygonMaterial.h"\
- "..\..\..\..\source\gameengine\Rasterizer\RAS_IRasterizer.h"\
- "..\..\..\..\source\gameengine\Rasterizer\RAS_IRenderTools.h"\
- "..\..\..\..\source\gameengine\Rasterizer\RAS_MaterialBucket.h"\
- "..\..\..\..\source\gameengine\Rasterizer\RAS_TexVert.h"\
- "..\..\..\..\source\kernel\gen_system\GEN_HashedString.h"\
- "..\..\..\..\source\kernel\gen_system\GEN_Matrix4x4.h"\
- "..\..\..\..\source\kernel\gen_system\GEN_StdString.h"\
- "..\..\..\..\..\lib\windows\moto\include\GEN_Map.h"\
- "..\..\..\..\..\lib\windows\moto\include\GEN_MinMax.h"\
- "..\..\..\..\..\lib\windows\moto\include\GEN_Optimize.h"\
- "..\..\..\..\..\lib\windows\moto\include\GEN_random.h"\
- "..\..\..\..\..\lib\windows\moto\include\GEN_Stream.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_assert.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Matrix3x3.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Matrix3x3.inl"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Point2.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Point2.inl"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Point3.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Point3.inl"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Quaternion.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Quaternion.inl"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Scalar.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Transform.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Tuple2.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Tuple3.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Tuple4.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Vector2.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Vector2.inl"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Vector3.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Vector3.inl"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Vector4.h"\
- "..\..\..\..\..\lib\windows\moto\include\MT_Vector4.inl"\
- "..\..\..\..\..\lib\windows\moto\include\NM_Scalar.h"\
-
-NODEP_CPP_QTSYS=\
- "..\..\..\..\source\gameengine\GamePlayer\Qt\BKE_bad_level_calls.h"\
- "..\..\..\..\source\gameengine\GamePlayer\Qt\BLO_readfile.h"\
-
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\DebugActuator.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\GP_Init.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\QtExampleEngine.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\QtInputDevice.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\QtKeyboardDevice.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\QtOpenGLWidget.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\QtRenderTools.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\QtSystem.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\resource.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\SamplePolygonMaterial.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\GP.rc
-# End Source File
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="gpplugin" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=gpplugin - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "gpplugin.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "gpplugin.mak" CFG="gpplugin - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "gpplugin - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "gpplugin - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "gpplugin - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\..\..\obj\windows\gameengine\gameplayer\qt\gpplugin"
+# PROP Intermediate_Dir "..\..\..\..\..\obj\windows\gameengine\gameplayer\qt\gpplugin"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GPPLUGIN_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "h:\qtwin\include" /I "..\..\..\..\source\gameengine\Expressions" /I "..\..\..\..\source\gameengine\GameLogic" /I "..\..\..\..\source\gameengine\Ketsji" /I "..\..\..\..\source\gameengine\Ketsji\KXNetwork" /I "..\..\..\..\source\gameengine\Network" /I "..\..\..\..\source\gameengine\Network\LoopBackNetwork" /I "..\..\..\..\source\gameengine\Rasterizer" /I "..\..\..\..\source\gameengine\Rasterizer\RAS_OpenGLRasterizer" /I "..\..\..\..\source\gameengine\SceneGraph" /I "..\..\..\..\source\sumo\Fuzzics\include" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\..\lib\windows\python\include\python2.0" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GPPLUGIN_EXPORTS" /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x413 /d "NDEBUG"
+# ADD RSC /l 0x413 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib imm32.lib winmm.lib wsock32.lib h:\qtwin\lib\qnp.lib h:\qtwin\lib\qt.lib opengl32.lib glu32.lib python20.lib /nologo /dll /machine:I386 /out:"..\..\..\..\..\obj\windows\npWebGP.dll" /libpath:"..\..\..\..\..\lib\windows\python\lib\\"
+
+!ELSEIF "$(CFG)" == "gpplugin - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\..\..\obj\windows\gameengine\gameplayer\qt\gpplugin\debug"
+# PROP Intermediate_Dir "..\..\..\..\..\obj\windows\gameengine\gameplayer\qt\gpplugin\debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GPPLUGIN_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /GX /Zi /Od /I "h:\qtwin\include" /I "..\..\..\..\source\gameengine\Expressions" /I "..\..\..\..\source\gameengine\GameLogic" /I "..\..\..\..\source\gameengine\Ketsji" /I "..\..\..\..\source\gameengine\Ketsji\KXNetwork" /I "..\..\..\..\source\gameengine\Network" /I "..\..\..\..\source\gameengine\Network\LoopBackNetwork" /I "..\..\..\..\source\gameengine\Rasterizer" /I "..\..\..\..\source\gameengine\Rasterizer\RAS_OpenGLRasterizer" /I "..\..\..\..\source\gameengine\SceneGraph" /I "..\..\..\..\source\sumo\Fuzzics\include" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\..\lib\windows\python\include\python1.5" /D "WIN32" /D "PLUGIN" /D "_DEBUG"
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x413 /d "_DEBUG"
+# ADD RSC /l 0x409
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib imm32.lib winmm.lib wsock32.lib h:\qtwin\lib\qnp.lib h:\qtwin\lib\qt.lib opengl32.lib glu32.lib python15_d.lib /nologo /subsystem:windows /dll /debug /machine:I386 /def:"..\..\..\..\source\gameengine\GamePlayer\Qt\GP.def" /out:"..\..\..\..\..\obj\windows\debug\npWebGP.dll" /libpath:"..\..\..\..\..\lib\windows\python\lib"
+# SUBTRACT LINK32 /pdb:none
+
+!ENDIF
+
+# Begin Target
+
+# Name "gpplugin - Win32 Release"
+# Name "gpplugin - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\GP.cpp
+DEP_CPP_GP_CP=\
+ "..\..\..\..\..\qtwin\include\qapplication.h"\
+ "..\..\..\..\..\qtwin\include\qarray.h"\
+ "..\..\..\..\..\qtwin\include\qasciidict.h"\
+ "..\..\..\..\..\qtwin\include\qbrush.h"\
+ "..\..\..\..\..\qtwin\include\qcollection.h"\
+ "..\..\..\..\..\qtwin\include\qcolor.h"\
+ "..\..\..\..\..\qtwin\include\qconfig-large.h"\
+ "..\..\..\..\..\qtwin\include\qconfig-medium.h"\
+ "..\..\..\..\..\qtwin\include\qconfig-minimal.h"\
+ "..\..\..\..\..\qtwin\include\qconfig-small.h"\
+ "..\..\..\..\..\qtwin\include\qconfig.h"\
+ "..\..\..\..\..\qtwin\include\qcstring.h"\
+ "..\..\..\..\..\qtwin\include\qcursor.h"\
+ "..\..\..\..\..\qtwin\include\qdatastream.h"\
+ "..\..\..\..\..\qtwin\include\qdialog.h"\
+ "..\..\..\..\..\qtwin\include\qevent.h"\
+ "..\..\..\..\..\qtwin\include\qfeatures.h"\
+ "..\..\..\..\..\qtwin\include\qfont.h"\
+ "..\..\..\..\..\qtwin\include\qfontinfo.h"\
+ "..\..\..\..\..\qtwin\include\qfontmetrics.h"\
+ "..\..\..\..\..\qtwin\include\qframe.h"\
+ "..\..\..\..\..\qtwin\include\qgarray.h"\
+ "..\..\..\..\..\qtwin\include\qgdict.h"\
+ "..\..\..\..\..\qtwin\include\qgl.h"\
+ "..\..\..\..\..\qtwin\include\qglist.h"\
+ "..\..\..\..\..\qtwin\include\qglobal.h"\
+ "..\..\..\..\..\qtwin\include\qiconset.h"\
+ "..\..\..\..\..\qtwin\include\qimage.h"\
+ "..\..\..\..\..\qtwin\include\qintdict.h"\
+ "..\..\..\..\..\qtwin\include\qiodevice.h"\
+ "..\..\..\..\..\qtwin\include\qlist.h"\
+ "..\..\..\..\..\qtwin\include\qmenudata.h"\
+ "..\..\..\..\..\qtwin\include\qmessagebox.h"\
+ "..\..\..\..\..\qtwin\include\qmime.h"\
+ "..\..\..\..\..\qtwin\include\qnamespace.h"\
+ "..\..\..\..\..\qtwin\include\qnp.h"\
+ "..\..\..\..\..\qtwin\include\qobject.h"\
+ "..\..\..\..\..\qtwin\include\qobjectdefs.h"\
+ "..\..\..\..\..\qtwin\include\qpaintdevice.h"\
+ "..\..\..\..\..\qtwin\include\qpainter.h"\
+ "..\..\..\..\..\qtwin\include\qpalette.h"\
+ "..\..\..\..\..\qtwin\include\qpen.h"\
+ "..\..\..\..\..\qtwin\include\qpixmap.h"\
+ "..\..\..\..\..\qtwin\include\qpngio.h"\
+ "..\..\..\..\..\qtwin\include\qpoint.h"\
+ "..\..\..\..\..\qtwin\include\qpointarray.h"\
+ "..\..\..\..\..\qtwin\include\qpopupmenu.h"\
+ "..\..\..\..\..\qtwin\include\qrect.h"\
+ "..\..\..\..\..\qtwin\include\qregexp.h"\
+ "..\..\..\..\..\qtwin\include\qregion.h"\
+ "..\..\..\..\..\qtwin\include\qshared.h"\
+ "..\..\..\..\..\qtwin\include\qsignal.h"\
+ "..\..\..\..\..\qtwin\include\qsize.h"\
+ "..\..\..\..\..\qtwin\include\qsizepolicy.h"\
+ "..\..\..\..\..\qtwin\include\qstring.h"\
+ "..\..\..\..\..\qtwin\include\qstringlist.h"\
+ "..\..\..\..\..\qtwin\include\qstrlist.h"\
+ "..\..\..\..\..\qtwin\include\qstyle.h"\
+ "..\..\..\..\..\qtwin\include\qt_windows.h"\
+ "..\..\..\..\..\qtwin\include\qtranslator.h"\
+ "..\..\..\..\..\qtwin\include\qvaluelist.h"\
+ "..\..\..\..\..\qtwin\include\qwidget.h"\
+ "..\..\..\..\..\qtwin\include\qwindowdefs.h"\
+ "..\..\..\..\..\qtwin\include\qwindowdefs_win.h"\
+ "..\..\..\..\..\qtwin\include\qwmatrix.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\abstract.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\bufferobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\ceval.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\classobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\cobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\complexobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\config.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\dictobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\fileobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\floatobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\funcobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\import.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\intobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\intrcheck.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\listobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\longobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\methodobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\modsupport.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\moduleobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\mymalloc.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\myproto.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\object.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\objimpl.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\patchlevel.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\pydebug.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\pyerrors.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\pyfpe.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\pystate.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\Python.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\pythonrun.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\rangeobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\sliceobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\stringobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\sysmodule.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\traceback.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\tupleobject.h"\
+ "..\..\..\..\source\gameengine\GameLogic\SCA_IInputDevice.h"\
+ "..\..\..\..\source\gameengine\GameLogic\SCA_ISystem.h"\
+ "..\..\..\..\source\gameengine\GamePlayer\Qt\GP_Init.h"\
+ "..\..\..\..\source\gameengine\GamePlayer\Qt\QtInputDevice.h"\
+ "..\..\..\..\source\gameengine\GamePlayer\Qt\QtKeyboardDevice.h"\
+ "..\..\..\..\source\gameengine\GamePlayer\Qt\QtOpenGLWidget.h"\
+ "..\..\..\..\source\gameengine\GamePlayer\Qt\QtRenderTools.h"\
+ "..\..\..\..\source\gameengine\GamePlayer\Qt\QtSystem.h"\
+ "..\..\..\..\source\gameengine\Network\LoopBackNetwork\NG_LoopBackNetworkDeviceInterface.h"\
+ "..\..\..\..\source\gameengine\Network\NG_NetworkDeviceInterface.h"\
+ "..\..\..\..\source\gameengine\Network\NG_NetworkScene.h"\
+ "..\..\..\..\source\gameengine\Rasterizer\RAS_ICanvas.h"\
+ "..\..\..\..\source\gameengine\Rasterizer\RAS_IPolygonMaterial.h"\
+ "..\..\..\..\source\gameengine\Rasterizer\RAS_IRasterizer.h"\
+ "..\..\..\..\source\gameengine\Rasterizer\RAS_IRenderTools.h"\
+ "..\..\..\..\source\gameengine\Rasterizer\RAS_MaterialBucket.h"\
+ "..\..\..\..\source\gameengine\Rasterizer\RAS_TexVert.h"\
+ "..\..\..\..\source\kernel\gen_system\GEN_HashedString.h"\
+ "..\..\..\..\source\kernel\gen_system\GEN_Matrix4x4.h"\
+ "..\..\..\..\source\kernel\gen_system\GEN_StdString.h"\
+ "..\..\..\..\..\lib\windows\moto\include\GEN_Map.h"\
+ "..\..\..\..\..\lib\windows\moto\include\GEN_MinMax.h"\
+ "..\..\..\..\..\lib\windows\moto\include\GEN_Optimize.h"\
+ "..\..\..\..\..\lib\windows\moto\include\GEN_random.h"\
+ "..\..\..\..\..\lib\windows\moto\include\GEN_Stream.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_assert.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Matrix3x3.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Matrix3x3.inl"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Point2.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Point2.inl"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Point3.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Point3.inl"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Quaternion.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Quaternion.inl"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Scalar.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Transform.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Tuple2.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Tuple3.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Tuple4.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Vector2.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Vector2.inl"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Vector3.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Vector3.inl"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Vector4.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Vector4.inl"\
+ "..\..\..\..\..\lib\windows\moto\include\NM_Scalar.h"\
+
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\GP_Init.cpp
+DEP_CPP_GP_IN=\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\abstract.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\bufferobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\ceval.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\classobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\cobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\complexobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\config.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\dictobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\fileobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\floatobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\funcobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\import.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\intobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\intrcheck.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\listobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\longobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\methodobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\modsupport.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\moduleobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\mymalloc.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\myproto.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\object.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\objimpl.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\patchlevel.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\pydebug.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\pyerrors.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\pyfpe.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\pystate.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\Python.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\pythonrun.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\rangeobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\sliceobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\stringobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\sysmodule.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\traceback.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\tupleobject.h"\
+ "..\..\..\..\source\gameengine\Expressions\BoolValue.h"\
+ "..\..\..\..\source\gameengine\Expressions\ListValue.h"\
+ "..\..\..\..\source\gameengine\Expressions\PyObjectPlus.h"\
+ "..\..\..\..\source\gameengine\Expressions\Value.h"\
+ "..\..\..\..\source\gameengine\GameLogic\SCA_AlwaysEventManager.h"\
+ "..\..\..\..\source\gameengine\GameLogic\SCA_AlwaysSensor.h"\
+ "..\..\..\..\source\gameengine\GameLogic\SCA_ANDController.h"\
+ "..\..\..\..\source\gameengine\GameLogic\SCA_EventManager.h"\
+ "..\..\..\..\source\gameengine\GameLogic\SCA_IActuator.h"\
+ "..\..\..\..\source\gameengine\GameLogic\SCA_IController.h"\
+ "..\..\..\..\source\gameengine\GameLogic\SCA_IInputDevice.h"\
+ "..\..\..\..\source\gameengine\GameLogic\SCA_ILogicBrick.h"\
+ "..\..\..\..\source\gameengine\GameLogic\SCA_IObject.h"\
+ "..\..\..\..\source\gameengine\GameLogic\SCA_ISensor.h"\
+ "..\..\..\..\source\gameengine\GameLogic\SCA_ISystem.h"\
+ "..\..\..\..\source\gameengine\GameLogic\SCA_KeyboardManager.h"\
+ "..\..\..\..\source\gameengine\GameLogic\SCA_KeyboardSensor.h"\
+ "..\..\..\..\source\gameengine\GameLogic\SCA_LogicManager.h"\
+ "..\..\..\..\source\gameengine\GameLogic\SCA_PythonController.h"\
+ "..\..\..\..\source\gameengine\GamePlayer\Qt\DebugActuator.h"\
+ "..\..\..\..\source\gameengine\GamePlayer\Qt\QtExampleEngine.h"\
+ "..\..\..\..\source\gameengine\GamePlayer\Qt\SamplePolygonMaterial.h"\
+ "..\..\..\..\source\gameengine\Ketsji\KX_GameObject.h"\
+ "..\..\..\..\source\gameengine\Ketsji\KX_ObjectActuator.h"\
+ "..\..\..\..\source\gameengine\Ketsji\KX_PythonInit.h"\
+ "..\..\..\..\source\gameengine\Ketsji\KX_SoundActuator.h"\
+ "..\..\..\..\source\gameengine\Ketsji\KXNetwork\KX_NetworkEventManager.h"\
+ "..\..\..\..\source\gameengine\Network\LoopBackNetwork\NG_LoopBackNetworkDeviceInterface.h"\
+ "..\..\..\..\source\gameengine\Network\NG_NetworkDeviceInterface.h"\
+ "..\..\..\..\source\gameengine\Network\NG_NetworkScene.h"\
+ "..\..\..\..\source\gameengine\Rasterizer\RAS_BucketManager.h"\
+ "..\..\..\..\source\gameengine\Rasterizer\RAS_ICanvas.h"\
+ "..\..\..\..\source\gameengine\Rasterizer\RAS_IPolygonMaterial.h"\
+ "..\..\..\..\source\gameengine\Rasterizer\RAS_IRasterizer.h"\
+ "..\..\..\..\source\gameengine\Rasterizer\RAS_MaterialBucket.h"\
+ "..\..\..\..\source\gameengine\Rasterizer\RAS_MeshObject.h"\
+ "..\..\..\..\source\gameengine\Rasterizer\RAS_OpenGLRasterizer\RAS_OpenGLRasterizer.h"\
+ "..\..\..\..\source\gameengine\Rasterizer\RAS_Polygon.h"\
+ "..\..\..\..\source\gameengine\Rasterizer\RAS_TexVert.h"\
+ "..\..\..\..\source\gameengine\SceneGraph\SG_IObject.h"\
+ "..\..\..\..\source\gameengine\SceneGraph\SG_Node.h"\
+ "..\..\..\..\source\gameengine\SceneGraph\SG_Spatial.h"\
+ "..\..\..\..\source\kernel\gen_system\GEN_HashedPtr.h"\
+ "..\..\..\..\source\kernel\gen_system\GEN_HashedString.h"\
+ "..\..\..\..\source\kernel\gen_system\GEN_Matrix4x4.h"\
+ "..\..\..\..\source\kernel\gen_system\GEN_StdString.h"\
+ "..\..\..\..\source\sumo\include\solid.h"\
+ "..\..\..\..\source\sumo\include\solid_types.h"\
+ "..\..\..\..\..\lib\windows\moto\include\GEN_Map.h"\
+ "..\..\..\..\..\lib\windows\moto\include\GEN_MinMax.h"\
+ "..\..\..\..\..\lib\windows\moto\include\GEN_Optimize.h"\
+ "..\..\..\..\..\lib\windows\moto\include\GEN_random.h"\
+ "..\..\..\..\..\lib\windows\moto\include\GEN_Stream.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_assert.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Matrix3x3.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Matrix3x3.inl"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Point2.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Point2.inl"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Point3.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Point3.inl"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Quaternion.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Quaternion.inl"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Scalar.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Transform.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Tuple2.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Tuple3.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Tuple4.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Vector2.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Vector2.inl"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Vector3.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Vector3.inl"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Vector4.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Vector4.inl"\
+ "..\..\..\..\..\lib\windows\moto\include\NM_Scalar.h"\
+
+NODEP_CPP_GP_IN=\
+ "..\..\..\..\source\gameengine\GamePlayer\Qt\GPC_OpenALWaveCache.h"\
+ "..\..\..\..\source\gameengine\GamePlayer\Qt\OpenALScene.h"\
+ "..\..\..\..\source\gameengine\GamePlayer\Qt\SND_SoundObject.h"\
+
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\QtExampleEngine.cpp
+DEP_CPP_QTEXA=\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\abstract.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\bufferobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\ceval.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\classobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\cobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\complexobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\config.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\dictobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\fileobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\floatobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\funcobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\import.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\intobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\intrcheck.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\listobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\longobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\methodobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\modsupport.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\moduleobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\mymalloc.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\myproto.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\object.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\objimpl.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\patchlevel.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\pydebug.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\pyerrors.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\pyfpe.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\pystate.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\Python.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\pythonrun.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\rangeobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\sliceobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\stringobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\sysmodule.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\traceback.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\tupleobject.h"\
+ "..\..\..\..\source\gameengine\Expressions\BoolValue.h"\
+ "..\..\..\..\source\gameengine\Expressions\IntValue.h"\
+ "..\..\..\..\source\gameengine\Expressions\ListValue.h"\
+ "..\..\..\..\source\gameengine\Expressions\PyObjectPlus.h"\
+ "..\..\..\..\source\gameengine\Expressions\Value.h"\
+ "..\..\..\..\source\gameengine\GameLogic\SCA_IActuator.h"\
+ "..\..\..\..\source\gameengine\GameLogic\SCA_IInputDevice.h"\
+ "..\..\..\..\source\gameengine\GameLogic\SCA_ILogicBrick.h"\
+ "..\..\..\..\source\gameengine\GameLogic\SCA_IObject.h"\
+ "..\..\..\..\source\gameengine\GameLogic\SCA_ISystem.h"\
+ "..\..\..\..\source\gameengine\GameLogic\SCA_LogicManager.h"\
+ "..\..\..\..\source\gameengine\GamePlayer\Qt\QtExampleEngine.h"\
+ "..\..\..\..\source\gameengine\Ketsji\KX_Camera.h"\
+ "..\..\..\..\source\gameengine\Ketsji\KX_GameObject.h"\
+ "..\..\..\..\source\gameengine\Ketsji\KX_ObjectActuator.h"\
+ "..\..\..\..\source\gameengine\Network\NG_NetworkScene.h"\
+ "..\..\..\..\source\gameengine\Rasterizer\RAS_BucketManager.h"\
+ "..\..\..\..\source\gameengine\Rasterizer\RAS_CameraData.h"\
+ "..\..\..\..\source\gameengine\Rasterizer\RAS_IPolygonMaterial.h"\
+ "..\..\..\..\source\gameengine\Rasterizer\RAS_IRasterizer.h"\
+ "..\..\..\..\source\gameengine\Rasterizer\RAS_IRenderTools.h"\
+ "..\..\..\..\source\gameengine\Rasterizer\RAS_MaterialBucket.h"\
+ "..\..\..\..\source\gameengine\Rasterizer\RAS_MeshObject.h"\
+ "..\..\..\..\source\gameengine\Rasterizer\RAS_Polygon.h"\
+ "..\..\..\..\source\gameengine\Rasterizer\RAS_TexVert.h"\
+ "..\..\..\..\source\gameengine\SceneGraph\SG_IObject.h"\
+ "..\..\..\..\source\gameengine\SceneGraph\SG_Node.h"\
+ "..\..\..\..\source\gameengine\SceneGraph\SG_Spatial.h"\
+ "..\..\..\..\source\kernel\gen_system\GEN_HashedPtr.h"\
+ "..\..\..\..\source\kernel\gen_system\GEN_HashedString.h"\
+ "..\..\..\..\source\kernel\gen_system\GEN_Matrix4x4.h"\
+ "..\..\..\..\source\kernel\gen_system\GEN_StdString.h"\
+ "..\..\..\..\source\sumo\Fuzzics\include\SM_Scene.h"\
+ "..\..\..\..\source\sumo\include\solid.h"\
+ "..\..\..\..\source\sumo\include\solid_types.h"\
+ "..\..\..\..\..\lib\windows\moto\include\GEN_Map.h"\
+ "..\..\..\..\..\lib\windows\moto\include\GEN_MinMax.h"\
+ "..\..\..\..\..\lib\windows\moto\include\GEN_Optimize.h"\
+ "..\..\..\..\..\lib\windows\moto\include\GEN_random.h"\
+ "..\..\..\..\..\lib\windows\moto\include\GEN_Stream.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_assert.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Matrix3x3.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Matrix3x3.inl"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Point2.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Point2.inl"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Point3.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Point3.inl"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Quaternion.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Quaternion.inl"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Scalar.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Transform.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Tuple2.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Tuple3.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Tuple4.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Vector2.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Vector2.inl"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Vector3.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Vector3.inl"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Vector4.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Vector4.inl"\
+ "..\..\..\..\..\lib\windows\moto\include\NM_Scalar.h"\
+
+NODEP_CPP_QTEXA=\
+ "..\..\..\..\source\gameengine\GamePlayer\Qt\OpenALScene.h"\
+
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\QtKeyboardDevice.cpp
+DEP_CPP_QTKEY=\
+ "..\..\..\..\source\gameengine\GameLogic\SCA_IInputDevice.h"\
+ "..\..\..\..\source\gameengine\GamePlayer\Qt\QtInputDevice.h"\
+ "..\..\..\..\source\gameengine\GamePlayer\Qt\QtKeyboardDevice.h"\
+
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\QtOpenGLWidget.cpp
+DEP_CPP_QTOPE=\
+ "..\..\..\..\..\qtwin\include\qapplication.h"\
+ "..\..\..\..\..\qtwin\include\qarray.h"\
+ "..\..\..\..\..\qtwin\include\qasciidict.h"\
+ "..\..\..\..\..\qtwin\include\qbrush.h"\
+ "..\..\..\..\..\qtwin\include\qcollection.h"\
+ "..\..\..\..\..\qtwin\include\qcolor.h"\
+ "..\..\..\..\..\qtwin\include\qconfig-large.h"\
+ "..\..\..\..\..\qtwin\include\qconfig-medium.h"\
+ "..\..\..\..\..\qtwin\include\qconfig-minimal.h"\
+ "..\..\..\..\..\qtwin\include\qconfig-small.h"\
+ "..\..\..\..\..\qtwin\include\qconfig.h"\
+ "..\..\..\..\..\qtwin\include\qcstring.h"\
+ "..\..\..\..\..\qtwin\include\qcursor.h"\
+ "..\..\..\..\..\qtwin\include\qdatastream.h"\
+ "..\..\..\..\..\qtwin\include\qevent.h"\
+ "..\..\..\..\..\qtwin\include\qfeatures.h"\
+ "..\..\..\..\..\qtwin\include\qfont.h"\
+ "..\..\..\..\..\qtwin\include\qfontinfo.h"\
+ "..\..\..\..\..\qtwin\include\qfontmetrics.h"\
+ "..\..\..\..\..\qtwin\include\qframe.h"\
+ "..\..\..\..\..\qtwin\include\qgarray.h"\
+ "..\..\..\..\..\qtwin\include\qgdict.h"\
+ "..\..\..\..\..\qtwin\include\qgl.h"\
+ "..\..\..\..\..\qtwin\include\qglist.h"\
+ "..\..\..\..\..\qtwin\include\qglobal.h"\
+ "..\..\..\..\..\qtwin\include\qiconset.h"\
+ "..\..\..\..\..\qtwin\include\qintdict.h"\
+ "..\..\..\..\..\qtwin\include\qiodevice.h"\
+ "..\..\..\..\..\qtwin\include\qlist.h"\
+ "..\..\..\..\..\qtwin\include\qmenudata.h"\
+ "..\..\..\..\..\qtwin\include\qmime.h"\
+ "..\..\..\..\..\qtwin\include\qnamespace.h"\
+ "..\..\..\..\..\qtwin\include\qobject.h"\
+ "..\..\..\..\..\qtwin\include\qobjectdefs.h"\
+ "..\..\..\..\..\qtwin\include\qpaintdevice.h"\
+ "..\..\..\..\..\qtwin\include\qpalette.h"\
+ "..\..\..\..\..\qtwin\include\qpixmap.h"\
+ "..\..\..\..\..\qtwin\include\qpoint.h"\
+ "..\..\..\..\..\qtwin\include\qpopupmenu.h"\
+ "..\..\..\..\..\qtwin\include\qrect.h"\
+ "..\..\..\..\..\qtwin\include\qregexp.h"\
+ "..\..\..\..\..\qtwin\include\qregion.h"\
+ "..\..\..\..\..\qtwin\include\qshared.h"\
+ "..\..\..\..\..\qtwin\include\qsignal.h"\
+ "..\..\..\..\..\qtwin\include\qsize.h"\
+ "..\..\..\..\..\qtwin\include\qsizepolicy.h"\
+ "..\..\..\..\..\qtwin\include\qstring.h"\
+ "..\..\..\..\..\qtwin\include\qstringlist.h"\
+ "..\..\..\..\..\qtwin\include\qstyle.h"\
+ "..\..\..\..\..\qtwin\include\qt_windows.h"\
+ "..\..\..\..\..\qtwin\include\qtranslator.h"\
+ "..\..\..\..\..\qtwin\include\qvaluelist.h"\
+ "..\..\..\..\..\qtwin\include\qwidget.h"\
+ "..\..\..\..\..\qtwin\include\qwindowdefs.h"\
+ "..\..\..\..\..\qtwin\include\qwindowdefs_win.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\abstract.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\bufferobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\ceval.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\classobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\cobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\complexobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\config.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\dictobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\fileobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\floatobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\funcobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\import.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\intobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\intrcheck.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\listobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\longobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\methodobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\modsupport.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\moduleobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\mymalloc.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\myproto.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\object.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\objimpl.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\patchlevel.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\pydebug.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\pyerrors.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\pyfpe.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\pystate.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\Python.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\pythonrun.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\rangeobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\sliceobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\stringobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\sysmodule.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\traceback.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\tupleobject.h"\
+ "..\..\..\..\source\gameengine\GameLogic\SCA_IInputDevice.h"\
+ "..\..\..\..\source\gameengine\GameLogic\SCA_ISystem.h"\
+ "..\..\..\..\source\gameengine\GamePlayer\Qt\GP_Init.h"\
+ "..\..\..\..\source\gameengine\GamePlayer\Qt\QtInputDevice.h"\
+ "..\..\..\..\source\gameengine\GamePlayer\Qt\QtKeyboardDevice.h"\
+ "..\..\..\..\source\gameengine\GamePlayer\Qt\QtOpenGLWidget.h"\
+ "..\..\..\..\source\gameengine\GamePlayer\Qt\QtRenderTools.h"\
+ "..\..\..\..\source\gameengine\GamePlayer\Qt\QtSystem.h"\
+ "..\..\..\..\source\gameengine\Rasterizer\RAS_ICanvas.h"\
+ "..\..\..\..\source\gameengine\Rasterizer\RAS_IPolygonMaterial.h"\
+ "..\..\..\..\source\gameengine\Rasterizer\RAS_IRasterizer.h"\
+ "..\..\..\..\source\gameengine\Rasterizer\RAS_IRenderTools.h"\
+ "..\..\..\..\source\gameengine\Rasterizer\RAS_MaterialBucket.h"\
+ "..\..\..\..\source\gameengine\Rasterizer\RAS_TexVert.h"\
+ "..\..\..\..\source\kernel\gen_system\GEN_HashedString.h"\
+ "..\..\..\..\source\kernel\gen_system\GEN_Matrix4x4.h"\
+ "..\..\..\..\source\kernel\gen_system\GEN_StdString.h"\
+ "..\..\..\..\..\lib\windows\moto\include\GEN_Map.h"\
+ "..\..\..\..\..\lib\windows\moto\include\GEN_MinMax.h"\
+ "..\..\..\..\..\lib\windows\moto\include\GEN_Optimize.h"\
+ "..\..\..\..\..\lib\windows\moto\include\GEN_random.h"\
+ "..\..\..\..\..\lib\windows\moto\include\GEN_Stream.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_assert.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Matrix3x3.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Matrix3x3.inl"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Point2.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Point2.inl"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Point3.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Point3.inl"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Quaternion.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Quaternion.inl"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Scalar.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Transform.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Tuple2.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Tuple3.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Tuple4.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Vector2.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Vector2.inl"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Vector3.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Vector3.inl"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Vector4.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Vector4.inl"\
+ "..\..\..\..\..\lib\windows\moto\include\NM_Scalar.h"\
+
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\QtSystem.cpp
+DEP_CPP_QTSYS=\
+ "..\..\..\..\..\qtwin\include\qapplication.h"\
+ "..\..\..\..\..\qtwin\include\qarray.h"\
+ "..\..\..\..\..\qtwin\include\qasciidict.h"\
+ "..\..\..\..\..\qtwin\include\qbrush.h"\
+ "..\..\..\..\..\qtwin\include\qcollection.h"\
+ "..\..\..\..\..\qtwin\include\qcolor.h"\
+ "..\..\..\..\..\qtwin\include\qconfig-large.h"\
+ "..\..\..\..\..\qtwin\include\qconfig-medium.h"\
+ "..\..\..\..\..\qtwin\include\qconfig-minimal.h"\
+ "..\..\..\..\..\qtwin\include\qconfig-small.h"\
+ "..\..\..\..\..\qtwin\include\qconfig.h"\
+ "..\..\..\..\..\qtwin\include\qcstring.h"\
+ "..\..\..\..\..\qtwin\include\qcursor.h"\
+ "..\..\..\..\..\qtwin\include\qdatastream.h"\
+ "..\..\..\..\..\qtwin\include\qevent.h"\
+ "..\..\..\..\..\qtwin\include\qfeatures.h"\
+ "..\..\..\..\..\qtwin\include\qfont.h"\
+ "..\..\..\..\..\qtwin\include\qfontinfo.h"\
+ "..\..\..\..\..\qtwin\include\qfontmetrics.h"\
+ "..\..\..\..\..\qtwin\include\qframe.h"\
+ "..\..\..\..\..\qtwin\include\qgarray.h"\
+ "..\..\..\..\..\qtwin\include\qgdict.h"\
+ "..\..\..\..\..\qtwin\include\qgl.h"\
+ "..\..\..\..\..\qtwin\include\qglist.h"\
+ "..\..\..\..\..\qtwin\include\qglobal.h"\
+ "..\..\..\..\..\qtwin\include\qiconset.h"\
+ "..\..\..\..\..\qtwin\include\qintdict.h"\
+ "..\..\..\..\..\qtwin\include\qiodevice.h"\
+ "..\..\..\..\..\qtwin\include\qlist.h"\
+ "..\..\..\..\..\qtwin\include\qmenudata.h"\
+ "..\..\..\..\..\qtwin\include\qmime.h"\
+ "..\..\..\..\..\qtwin\include\qnamespace.h"\
+ "..\..\..\..\..\qtwin\include\qobject.h"\
+ "..\..\..\..\..\qtwin\include\qobjectdefs.h"\
+ "..\..\..\..\..\qtwin\include\qpaintdevice.h"\
+ "..\..\..\..\..\qtwin\include\qpalette.h"\
+ "..\..\..\..\..\qtwin\include\qpixmap.h"\
+ "..\..\..\..\..\qtwin\include\qpoint.h"\
+ "..\..\..\..\..\qtwin\include\qpopupmenu.h"\
+ "..\..\..\..\..\qtwin\include\qrect.h"\
+ "..\..\..\..\..\qtwin\include\qregexp.h"\
+ "..\..\..\..\..\qtwin\include\qregion.h"\
+ "..\..\..\..\..\qtwin\include\qshared.h"\
+ "..\..\..\..\..\qtwin\include\qsignal.h"\
+ "..\..\..\..\..\qtwin\include\qsize.h"\
+ "..\..\..\..\..\qtwin\include\qsizepolicy.h"\
+ "..\..\..\..\..\qtwin\include\qstring.h"\
+ "..\..\..\..\..\qtwin\include\qstringlist.h"\
+ "..\..\..\..\..\qtwin\include\qstyle.h"\
+ "..\..\..\..\..\qtwin\include\qt_windows.h"\
+ "..\..\..\..\..\qtwin\include\qtranslator.h"\
+ "..\..\..\..\..\qtwin\include\qvaluelist.h"\
+ "..\..\..\..\..\qtwin\include\qwidget.h"\
+ "..\..\..\..\..\qtwin\include\qwindowdefs.h"\
+ "..\..\..\..\..\qtwin\include\qwindowdefs_win.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\abstract.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\bufferobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\ceval.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\classobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\cobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\complexobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\config.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\dictobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\fileobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\floatobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\funcobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\import.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\intobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\intrcheck.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\listobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\longobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\methodobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\modsupport.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\moduleobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\mymalloc.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\myproto.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\object.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\objimpl.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\patchlevel.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\pydebug.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\pyerrors.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\pyfpe.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\pystate.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\Python.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\pythonrun.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\rangeobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\sliceobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\stringobject.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\sysmodule.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\traceback.h"\
+ "..\..\..\..\..\lib\windows\python\include\python1.5\tupleobject.h"\
+ "..\..\..\..\source\gameengine\GameLogic\SCA_IInputDevice.h"\
+ "..\..\..\..\source\gameengine\GameLogic\SCA_ISystem.h"\
+ "..\..\..\..\source\gameengine\GamePlayer\Qt\GP_Init.h"\
+ "..\..\..\..\source\gameengine\GamePlayer\Qt\QtInputDevice.h"\
+ "..\..\..\..\source\gameengine\GamePlayer\Qt\QtKeyboardDevice.h"\
+ "..\..\..\..\source\gameengine\GamePlayer\Qt\QtOpenGLWidget.h"\
+ "..\..\..\..\source\gameengine\GamePlayer\Qt\QtRenderTools.h"\
+ "..\..\..\..\source\gameengine\GamePlayer\Qt\QtSystem.h"\
+ "..\..\..\..\source\gameengine\Network\LoopBackNetwork\NG_LoopBackNetworkDeviceInterface.h"\
+ "..\..\..\..\source\gameengine\Network\NG_NetworkDeviceInterface.h"\
+ "..\..\..\..\source\gameengine\Network\NG_NetworkScene.h"\
+ "..\..\..\..\source\gameengine\Rasterizer\RAS_ICanvas.h"\
+ "..\..\..\..\source\gameengine\Rasterizer\RAS_IPolygonMaterial.h"\
+ "..\..\..\..\source\gameengine\Rasterizer\RAS_IRasterizer.h"\
+ "..\..\..\..\source\gameengine\Rasterizer\RAS_IRenderTools.h"\
+ "..\..\..\..\source\gameengine\Rasterizer\RAS_MaterialBucket.h"\
+ "..\..\..\..\source\gameengine\Rasterizer\RAS_TexVert.h"\
+ "..\..\..\..\source\kernel\gen_system\GEN_HashedString.h"\
+ "..\..\..\..\source\kernel\gen_system\GEN_Matrix4x4.h"\
+ "..\..\..\..\source\kernel\gen_system\GEN_StdString.h"\
+ "..\..\..\..\..\lib\windows\moto\include\GEN_Map.h"\
+ "..\..\..\..\..\lib\windows\moto\include\GEN_MinMax.h"\
+ "..\..\..\..\..\lib\windows\moto\include\GEN_Optimize.h"\
+ "..\..\..\..\..\lib\windows\moto\include\GEN_random.h"\
+ "..\..\..\..\..\lib\windows\moto\include\GEN_Stream.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_assert.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Matrix3x3.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Matrix3x3.inl"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Point2.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Point2.inl"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Point3.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Point3.inl"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Quaternion.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Quaternion.inl"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Scalar.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Transform.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Tuple2.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Tuple3.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Tuple4.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Vector2.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Vector2.inl"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Vector3.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Vector3.inl"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Vector4.h"\
+ "..\..\..\..\..\lib\windows\moto\include\MT_Vector4.inl"\
+ "..\..\..\..\..\lib\windows\moto\include\NM_Scalar.h"\
+
+NODEP_CPP_QTSYS=\
+ "..\..\..\..\source\gameengine\GamePlayer\Qt\BKE_bad_level_calls.h"\
+ "..\..\..\..\source\gameengine\GamePlayer\Qt\BLO_readfile.h"\
+
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\DebugActuator.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\GP_Init.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\QtExampleEngine.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\QtInputDevice.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\QtKeyboardDevice.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\QtOpenGLWidget.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\QtRenderTools.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\QtSystem.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\resource.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\SamplePolygonMaterial.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\Qt\GP.rc
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/projectfiles/gameengine/gameplayer/qt/qtgp.dsw b/projectfiles/gameengine/gameplayer/qt/qtgp.dsw
index 22d9c5db23c..aac0b0f2423 100644
--- a/projectfiles/gameengine/gameplayer/qt/qtgp.dsw
+++ b/projectfiles/gameengine/gameplayer/qt/qtgp.dsw
@@ -1,323 +1,323 @@
-Microsoft Developer Studio Workspace File, Format Version 6.00
-# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
-
-###############################################################################
-
-Project: "BLO_loader"=..\..\..\blender\loader\BLO_loader.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "EXP_expressions"=..\..\expression\EXP_expressions.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "SCA_GameLogic"=..\..\gamelogic\SCA_GameLogic.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "KX_ketsji"=..\..\ketsji\KX_ketsji.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "KX_network"=..\..\ketsji\network\KX_network.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "SG_SceneGraph"=..\..\scenegraph\SG_SceneGraph.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "NG_loopbacknetwork"=..\..\network\loopbacknetwork\NG_loopbacknetwork.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "NG_network"=..\..\network\network\NG_network.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "RAS_openglrasterizer"=..\..\rasterizer\openglrasterizer\RAS_openglrasterizer.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "RAS_rasterizer"=..\..\rasterizer\RAS_rasterizer.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "SM_fuzzics"=..\..\..\sumo\fuzzics\SM_fuzzics.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "SM_moto"=..\..\..\sumo\moto\SM_moto.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "SM_solid"=..\..\..\sumo\solid\SM_solid.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "SND_openal"=..\..\sound\openal\SND_openal.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "SND_sound"=..\..\sound\SND_sound.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "SYS_system"=..\..\..\kernel\system\SYS_system.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "gp"=.\gp.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name EXP_expressions
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name SCA_GameLogic
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name KX_ketsji
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name KX_network
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name SG_SceneGraph
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name NG_loopbacknetwork
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name NG_network
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name RAS_openglrasterizer
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name RAS_rasterizer
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name SM_fuzzics
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name SM_moto
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name SM_solid
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name SND_openal
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name SND_sound
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name SYS_system
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "gpplugin"=.\gpplugin.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name EXP_expressions
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name SCA_GameLogic
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name KX_ketsji
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name KX_network
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name SG_SceneGraph
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name NG_loopbacknetwork
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name NG_network
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name RAS_openglrasterizer
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name RAS_rasterizer
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name SM_fuzzics
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name SM_moto
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name SM_solid
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name SND_openal
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name SND_sound
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name SYS_system
- End Project Dependency
-}}}
-
-###############################################################################
-
-Global:
-
-Package=<5>
-{{{
-}}}
-
-Package=<3>
-{{{
-}}}
-
-###############################################################################
-
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "BLO_loader"=..\..\..\blender\loader\BLO_loader.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "EXP_expressions"=..\..\expression\EXP_expressions.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "SCA_GameLogic"=..\..\gamelogic\SCA_GameLogic.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "KX_ketsji"=..\..\ketsji\KX_ketsji.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "KX_network"=..\..\ketsji\network\KX_network.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "SG_SceneGraph"=..\..\scenegraph\SG_SceneGraph.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "NG_loopbacknetwork"=..\..\network\loopbacknetwork\NG_loopbacknetwork.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "NG_network"=..\..\network\network\NG_network.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "RAS_openglrasterizer"=..\..\rasterizer\openglrasterizer\RAS_openglrasterizer.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "RAS_rasterizer"=..\..\rasterizer\RAS_rasterizer.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "SM_fuzzics"=..\..\..\sumo\fuzzics\SM_fuzzics.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "SM_moto"=..\..\..\sumo\moto\SM_moto.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "SM_solid"=..\..\..\sumo\solid\SM_solid.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "SND_openal"=..\..\sound\openal\SND_openal.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "SND_sound"=..\..\sound\SND_sound.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "SYS_system"=..\..\..\kernel\system\SYS_system.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "gp"=.\gp.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name EXP_expressions
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name SCA_GameLogic
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name KX_ketsji
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name KX_network
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name SG_SceneGraph
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name NG_loopbacknetwork
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name NG_network
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name RAS_openglrasterizer
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name RAS_rasterizer
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name SM_fuzzics
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name SM_moto
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name SM_solid
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name SND_openal
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name SND_sound
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name SYS_system
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "gpplugin"=.\gpplugin.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name EXP_expressions
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name SCA_GameLogic
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name KX_ketsji
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name KX_network
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name SG_SceneGraph
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name NG_loopbacknetwork
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name NG_network
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name RAS_openglrasterizer
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name RAS_rasterizer
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name SM_fuzzics
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name SM_moto
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name SM_solid
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name SND_openal
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name SND_sound
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name SYS_system
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/projectfiles/gameengine/gameplayer/sdl/GP_sdl.dsp b/projectfiles/gameengine/gameplayer/sdl/GP_sdl.dsp
index 56c758de7e9..a3a1c226d61 100644
--- a/projectfiles/gameengine/gameplayer/sdl/GP_sdl.dsp
+++ b/projectfiles/gameengine/gameplayer/sdl/GP_sdl.dsp
@@ -1,205 +1,205 @@
-# Microsoft Developer Studio Project File - Name="GP_sdl" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=GP_sdl - Win32 Profile
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "GP_sdl.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "GP_sdl.mak" CFG="GP_sdl - Win32 Profile"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "GP_sdl - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "GP_sdl - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE "GP_sdl - Win32 Profile" (based on "Win32 (x86) Console Application")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "GP_sdl - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\gameplayer\sdl"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /W3 /GX /O2 /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\gameengine\gameplayer\common" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\gameengine\Rasterizer" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\sumo\Fuzzics\include" /I "..\..\..\..\..\lib\windows\sdl\SDL-1.1.7\include" /I "..\..\..\..\..\lib\windows\python\include\python2.0" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 sdl.lib sdlmain.lib kernel32.lib winspool.lib comdlg32.lib shell32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib opengl32.lib user32.lib gdi32.lib advapi32.lib dxguid.lib ole32.lib /nologo /subsystem:console /machine:I386 /libpath:"..\..\..\..\..\lib\windows\sdl\sdl-1.1.7\lib" /libpath:"..\..\..\..\..\lib\windows\python\lib"
-
-!ELSEIF "$(CFG)" == "GP_sdl - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\gameplayer\sdl\debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
-# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\gameengine\gameplayer\common" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\gameengine\Rasterizer" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\sumo\Fuzzics\include" /I "..\..\..\..\..\lib\windows\sdl\SDL-1.1.7\include" /I "..\..\..\..\..\lib\windows\python\include\python1.5" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 glu32.lib sdlmaindebug.lib sdldebug.lib opengl32.lib user32.lib gdi32.lib advapi32.lib dxguid.lib ole32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\..\..\lib\windows\sdl\sdl-1.1.7\lib" /libpath:"..\..\..\..\..\lib\windows\python\lib" /libpath:"..\..\..\..\..\lib\windows\openal\lib\lib_release"
-
-!ELSEIF "$(CFG)" == "GP_sdl - Win32 Profile"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "GP_sdl___Win32_Profile"
-# PROP BASE Intermediate_Dir "GP_sdl___Win32_Profile"
-# PROP BASE Ignore_Export_Lib 0
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "GP_sdl___Win32_Profile"
-# PROP Intermediate_Dir "GP_sdl___Win32_Profile"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\gameengine\gameplayer\common" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\gameengine\Rasterizer" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\sumo\Fuzzics\include" /I "..\..\..\..\..\lib\windows\sdl\SDL-1.1.7\include" /I "..\..\..\..\..\lib\windows\python\include\python1.5" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
-# ADD CPP /nologo /W3 /Gm /GX /Zi /O2 /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\gameengine\gameplayer\common" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\gameengine\Rasterizer" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\sumo\Fuzzics\include" /I "..\..\..\..\..\lib\windows\sdl\SDL-1.1.7\include" /I "..\..\..\..\..\lib\windows\python\include\python1.5" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 glu32.lib sdlmaindebug.lib sdldebug.lib opengl32.lib user32.lib gdi32.lib advapi32.lib dxguid.lib ole32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\..\..\lib\windows\sdl\sdl-1.1.7\lib" /libpath:"..\..\..\..\..\lib\windows\python\lib" /libpath:"..\..\..\..\..\lib\windows\openal\lib\lib_release"
-# ADD LINK32 glu32.lib sdlmaindebug.lib sdldebug.lib opengl32.lib user32.lib gdi32.lib advapi32.lib dxguid.lib ole32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\..\..\lib\windows\sdl\sdl-1.1.7\lib" /libpath:"..\..\..\..\..\lib\windows\python\lib" /libpath:"..\..\..\..\..\lib\windows\openal\lib\lib_release"
-
-!ENDIF
-
-# Begin Target
-
-# Name "GP_sdl - Win32 Release"
-# Name "GP_sdl - Win32 Debug"
-# Name "GP_sdl - Win32 Profile"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\SDL\main.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\SDL\SDLKeyboardDevice.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\SDL\SDLRenderTools.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\SDL\SDLSystem.cpp
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\SDL\SDLCanvas.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\SDL\SDLInputDevice.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\SDL\SDLKeyboardDevice.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\SDL\SDLRenderTools.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\GamePlayer\SDL\SDLSystem.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# Begin Source File
-
-SOURCE=..\..\..\..\..\lib\windows\openal\lib\alc\ALc.obj
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\lib\windows\openal\lib\alu\ALu.obj
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\lib\windows\openal\lib\alut\ALut.obj
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\lib\windows\openal\lib\OpenAL32\alBuffer.obj
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\lib\windows\openal\lib\OpenAL32\alEax.obj
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\lib\windows\openal\lib\OpenAL32\alError.obj
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\lib\windows\openal\lib\OpenAL32\alExtension.obj
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\lib\windows\openal\lib\OpenAL32\alListener.obj
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\lib\windows\openal\lib\OpenAL32\alSource.obj
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\lib\windows\openal\lib\OpenAL32\alState.obj
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\lib\windows\openal\lib\OpenAL32\OpenAL32.obj
-# End Source File
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="GP_sdl" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=GP_sdl - Win32 Profile
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "GP_sdl.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "GP_sdl.mak" CFG="GP_sdl - Win32 Profile"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "GP_sdl - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "GP_sdl - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE "GP_sdl - Win32 Profile" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "GP_sdl - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\gameplayer\sdl"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\gameengine\gameplayer\common" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\gameengine\Rasterizer" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\sumo\Fuzzics\include" /I "..\..\..\..\..\lib\windows\sdl\SDL-1.1.7\include" /I "..\..\..\..\..\lib\windows\python\include\python2.0" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 sdl.lib sdlmain.lib kernel32.lib winspool.lib comdlg32.lib shell32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib opengl32.lib user32.lib gdi32.lib advapi32.lib dxguid.lib ole32.lib /nologo /subsystem:console /machine:I386 /libpath:"..\..\..\..\..\lib\windows\sdl\sdl-1.1.7\lib" /libpath:"..\..\..\..\..\lib\windows\python\lib"
+
+!ELSEIF "$(CFG)" == "GP_sdl - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\gameplayer\sdl\debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\gameengine\gameplayer\common" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\gameengine\Rasterizer" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\sumo\Fuzzics\include" /I "..\..\..\..\..\lib\windows\sdl\SDL-1.1.7\include" /I "..\..\..\..\..\lib\windows\python\include\python1.5" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 glu32.lib sdlmaindebug.lib sdldebug.lib opengl32.lib user32.lib gdi32.lib advapi32.lib dxguid.lib ole32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\..\..\lib\windows\sdl\sdl-1.1.7\lib" /libpath:"..\..\..\..\..\lib\windows\python\lib" /libpath:"..\..\..\..\..\lib\windows\openal\lib\lib_release"
+
+!ELSEIF "$(CFG)" == "GP_sdl - Win32 Profile"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "GP_sdl___Win32_Profile"
+# PROP BASE Intermediate_Dir "GP_sdl___Win32_Profile"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "GP_sdl___Win32_Profile"
+# PROP Intermediate_Dir "GP_sdl___Win32_Profile"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\gameengine\gameplayer\common" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\gameengine\Rasterizer" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\sumo\Fuzzics\include" /I "..\..\..\..\..\lib\windows\sdl\SDL-1.1.7\include" /I "..\..\..\..\..\lib\windows\python\include\python1.5" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /Zi /O2 /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\gameengine\network\loopbacknetwork" /I "..\..\..\..\source\gameengine\gameplayer\common" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\gamelogic" /I "..\..\..\..\source\gameengine\Rasterizer" /I "..\..\..\..\source\sumo\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\sumo\Fuzzics\include" /I "..\..\..\..\..\lib\windows\sdl\SDL-1.1.7\include" /I "..\..\..\..\..\lib\windows\python\include\python1.5" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 glu32.lib sdlmaindebug.lib sdldebug.lib opengl32.lib user32.lib gdi32.lib advapi32.lib dxguid.lib ole32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\..\..\lib\windows\sdl\sdl-1.1.7\lib" /libpath:"..\..\..\..\..\lib\windows\python\lib" /libpath:"..\..\..\..\..\lib\windows\openal\lib\lib_release"
+# ADD LINK32 glu32.lib sdlmaindebug.lib sdldebug.lib opengl32.lib user32.lib gdi32.lib advapi32.lib dxguid.lib ole32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\..\..\lib\windows\sdl\sdl-1.1.7\lib" /libpath:"..\..\..\..\..\lib\windows\python\lib" /libpath:"..\..\..\..\..\lib\windows\openal\lib\lib_release"
+
+!ENDIF
+
+# Begin Target
+
+# Name "GP_sdl - Win32 Release"
+# Name "GP_sdl - Win32 Debug"
+# Name "GP_sdl - Win32 Profile"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\SDL\main.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\SDL\SDLKeyboardDevice.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\SDL\SDLRenderTools.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\SDL\SDLSystem.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\SDL\SDLCanvas.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\SDL\SDLInputDevice.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\SDL\SDLKeyboardDevice.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\SDL\SDLRenderTools.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\GamePlayer\SDL\SDLSystem.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# Begin Source File
+
+SOURCE=..\..\..\..\..\lib\windows\openal\lib\alc\ALc.obj
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\lib\windows\openal\lib\alu\ALu.obj
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\lib\windows\openal\lib\alut\ALut.obj
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\lib\windows\openal\lib\OpenAL32\alBuffer.obj
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\lib\windows\openal\lib\OpenAL32\alEax.obj
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\lib\windows\openal\lib\OpenAL32\alError.obj
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\lib\windows\openal\lib\OpenAL32\alExtension.obj
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\lib\windows\openal\lib\OpenAL32\alListener.obj
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\lib\windows\openal\lib\OpenAL32\alSource.obj
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\lib\windows\openal\lib\OpenAL32\alState.obj
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\lib\windows\openal\lib\OpenAL32\OpenAL32.obj
+# End Source File
+# End Target
+# End Project
diff --git a/projectfiles/gameengine/ketsji/KX_ketsji.dsp b/projectfiles/gameengine/ketsji/KX_ketsji.dsp
index b7139d01bc3..8c4370d9c9a 100644
--- a/projectfiles/gameengine/ketsji/KX_ketsji.dsp
+++ b/projectfiles/gameengine/ketsji/KX_ketsji.dsp
@@ -1,690 +1,690 @@
-# Microsoft Developer Studio Project File - Name="KX_ketsji" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=KX_ketsji - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "KX_ketsji.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "KX_ketsji.mak" CFG="KX_ketsji - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "KX_ketsji - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "KX_ketsji - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "KX_ketsji - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "KX_ketsji - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "KX_ketsji - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\obj\windows\gameengine\ketsji"
-# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\ketsji"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-MTL=midl.exe
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GR /GX /O2 /I "..\..\..\source\gameengine\physics\common\dummy" /I "..\..\..\extern\solid" /I "..\..\..\..\lib\windows\string\include" /I "..\..\..\..\lib\windows\moto\include" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\..\lib\windows\soundsystem\include" /I "..\..\..\source\gameengine\rasterizer" /I "..\..\..\source\gameengine\scenegraph" /I "..\..\..\source\gameengine\gamelogic" /I "..\..\..\source\gameengine\expressions" /I "..\..\..\source\sumo\include" /I "..\..\..\source\sumo\fuzzics\include" /I "..\..\..\source\gameengine\network" /I "..\..\..\source\gameengine\Converter" /I "..\..\..\source\gameengine\ketsji\kxnetwork" /I "..\..\..\source\gameengine\physics" /I "..\..\..\source\gameengine\physics\common" /I "..\..\..\source\gameengine\physics\dummy" /I "..\..\..\source\gameengine\physics\sumo" /I "..\..\..\source\gameengine\physics\sumo\fuzzics\include" /I "..\..\..\source\gameengine\physics\sumo\include" /I "..\..\..\source\gameengine\physics\BlOde" /I "..\..\..\..\lib\windows\python\include\python2.4" /I "..\..\..\source\blender\python" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender\imbuf" /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\gameengine\physics\bullet" /I "..\..\..\extern\bullet\linearmath" /I "..\..\..\extern\bullet\Bulletdynamics" /I "..\..\..\extern\bullet\Bullet" /I "..\..\..\source\gameengine\Rasterizer\RAS_OpenGLRasterizer" /I "..\..\..\source\blender\blenlib" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "EXP_PYTHON_EMBEDDING" /D "USE_SUMO_SOLID" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "KX_ketsji - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\obj\windows\gameengine\ketsji\debug"
-# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\ketsji\debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-MTL=midl.exe
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GR /GX /Zi /Od /I "..\..\..\source\gameengine\physics\common\dummy" /I "..\..\..\extern\solid" /I "..\..\..\..\lib\windows\string\include" /I "..\..\..\..\lib\windows\moto\include" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\..\lib\windows\soundsystem\include" /I "..\..\..\source\gameengine\rasterizer" /I "..\..\..\source\gameengine\scenegraph" /I "..\..\..\source\gameengine\gamelogic" /I "..\..\..\source\gameengine\expressions" /I "..\..\..\source\sumo\include" /I "..\..\..\source\sumo\fuzzics\include" /I "..\..\..\source\gameengine\network" /I "..\..\..\source\gameengine\Converter" /I "..\..\..\source\gameengine\ketsji\kxnetwork" /I "..\..\..\source\gameengine\physics" /I "..\..\..\source\gameengine\physics\common" /I "..\..\..\source\gameengine\physics\dummy" /I "..\..\..\source\gameengine\physics\sumo" /I "..\..\..\source\gameengine\physics\sumo\fuzzics\include" /I "..\..\..\source\gameengine\physics\sumo\include" /I "..\..\..\source\gameengine\physics\BlOde" /I "..\..\..\..\lib\windows\python\include\python2.4" /I "..\..\..\source\blender\python" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender\imbuf" /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\gameengine\physics\bullet" /I "..\..\..\extern\bullet\linearmath" /I "..\..\..\extern\bullet\Bulletdynamics" /I "..\..\..\extern\bullet\Bullet" /I "..\..\..\source\gameengine\Rasterizer\RAS_OpenGLRasterizer" /I "..\..\..\source\blender\blenlib" /D "JANCODEPANCO" /D "WIN32" /D "_MBCS" /D "_LIB" /D "EXP_PYTHON_EMBEDDING" /D "USE_SUMO_SOLID" /U "_DEBUG" /YX /J /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "KX_ketsji - Win32 MT DLL Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "KX_ketsji___Win32_MT_DLL_Debug"
-# PROP BASE Intermediate_Dir "KX_ketsji___Win32_MT_DLL_Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\obj\windows\gameengine\ketsji\mtdll_debug"
-# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\ketsji\mtdll_debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-MTL=midl.exe
-# ADD BASE CPP /nologo /Gm /GX /ZI /Od /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\gameengine\soundsystem" /I "..\..\..\source\gameengine\rasterizer" /I "..\..\..\source\gameengine\scenegraph" /I "..\..\..\source\gameengine\gamelogic" /I "..\..\..\source\gameengine\expressions" /I "..\..\..\source\sumo\include" /I "..\..\..\source\sumo\fuzzics\include" /I "..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\lib\windows\python\include\python1.5" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "EXP_PYTHON_EMBEDDING" /YX /J /FD /GZ /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "..\..\..\..\lib\windows\python\include\python2.4" /I "..\..\..\source\gameengine\physics\common\dummy" /I "..\..\..\..\lib\windows\python\include\python2.2" /I "..\..\..\..\lib\windows\string\include" /I "..\..\..\..\lib\windows\moto\include" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\gameengine\soundsystem" /I "..\..\..\source\gameengine\rasterizer" /I "..\..\..\source\gameengine\scenegraph" /I "..\..\..\source\gameengine\gamelogic" /I "..\..\..\source\gameengine\expressions" /I "..\..\..\source\sumo\include" /I "..\..\..\source\sumo\fuzzics\include" /I "..\..\..\source\gameengine\network" /I "..\..\..\source\gameengine\ketsji\kxnetwork" /I "..\..\..\source\gameengine\physics" /I "..\..\..\source\gameengine\physics\common" /I "..\..\..\source\gameengine\physics\dummy" /I "..\..\..\source\gameengine\physics\sumo" /I "..\..\..\source\gameengine\physics\sumo\fuzzics\include" /I "..\..\..\source\gameengine\physics\sumo\include" /I "..\..\..\source\gameengine\physics\BlOde" /D "WIN32" /D "_MBCS" /D "_LIB" /D "EXP_PYTHON_EMBEDDING" /U "_DEBUG" /YX /J /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\gameengine\ketsji\debug\KX_ketsji.lib"
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "KX_ketsji - Win32 MT DLL Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "KX_ketsji___Win32_MT_DLL_Release"
-# PROP BASE Intermediate_Dir "KX_ketsji___Win32_MT_DLL_Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\obj\windows\gameengine\ketsji\mtdll"
-# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\ketsji\mtdll"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-MTL=midl.exe
-# ADD BASE CPP /nologo /GX /O2 /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\gameengine\soundsystem" /I "..\..\..\source\gameengine\rasterizer" /I "..\..\..\source\gameengine\scenegraph" /I "..\..\..\source\gameengine\gamelogic" /I "..\..\..\source\gameengine\expressions" /I "..\..\..\source\sumo\include" /I "..\..\..\source\sumo\fuzzics\include" /I "..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\lib\windows\python\include\python2.0" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "EXP_PYTHON_EMBEDDING" /YX /J /FD /c
-# ADD CPP /nologo /MD /GX /O2 /I "..\..\..\..\lib\windows\python\include\python2.4" /I "..\..\..\source\gameengine\physics\common\dummy" /I "..\..\..\..\lib\windows\python\include\python2.2" /I "..\..\..\..\lib\windows\string\include" /I "..\..\..\..\lib\windows\moto\include" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\gameengine\soundsystem" /I "..\..\..\source\gameengine\rasterizer" /I "..\..\..\source\gameengine\scenegraph" /I "..\..\..\source\gameengine\gamelogic" /I "..\..\..\source\gameengine\expressions" /I "..\..\..\source\sumo\include" /I "..\..\..\source\sumo\fuzzics\include" /I "..\..\..\source\gameengine\network" /I "..\..\..\source\gameengine\ketsji\kxnetwork" /I "..\..\..\source\gameengine\physics" /I "..\..\..\source\gameengine\physics\common" /I "..\..\..\source\gameengine\physics\dummy" /I "..\..\..\source\gameengine\physics\sumo" /I "..\..\..\source\gameengine\physics\sumo\fuzzics\include" /I "..\..\..\source\gameengine\physics\sumo\include" /I "..\..\..\source\gameengine\physics\BlOde" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "EXP_PYTHON_EMBEDDING" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\gameengine\ketsji\KX_ketsji.lib"
-# ADD LIB32 /nologo
-
-!ENDIF
-
-# Begin Target
-
-# Name "KX_ketsji - Win32 Release"
-# Name "KX_ketsji - Win32 Debug"
-# Name "KX_ketsji - Win32 MT DLL Debug"
-# Name "KX_ketsji - Win32 MT DLL Release"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Group "ActuatorsImp"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_CameraActuator.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_CDActuator.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_ConstraintActuator.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_GameActuator.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_IpoActuator.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_ObjectActuator.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_SCA_AddObjectActuator.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_SCA_EndObjectActuator.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_SCA_ReplaceMeshActuator.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_SceneActuator.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_SoundActuator.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_TrackToActuator.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_VisibilityActuator.cpp
-# End Source File
-# End Group
-# Begin Group "SG_ControllersImp"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_CameraIpoSGController.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_IPO_SGController.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_LightIpoSGController.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_ObColorIpoSGController.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_WorldIpoController.cpp
-# End Source File
-# End Group
-# Begin Group "SensorsImp"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_MouseFocusSensor.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_NearSensor.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_RadarSensor.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_RaySensor.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_TouchSensor.cpp
-# End Source File
-# End Group
-# Begin Group "IposImp"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_OrientationInterpolator.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_PositionInterpolator.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_ScalarInterpolator.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_ScalingInterpolator.cpp
-# End Source File
-# End Group
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\BL_Material.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\BL_Shader.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\BL_Texture.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_BlenderMaterial.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_BulletPhysicsController.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_Camera.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_ConstraintWrapper.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_ConvertPhysicsObjects.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_EmptyObject.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_GameObject.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_IPhysicsController.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_KetsjiEngine.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_Light.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_MaterialIpoController.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_MeshProxy.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_MotionState.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_OdePhysicsController.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_PhysicsObjectWrapper.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_PolygonMaterial.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_PyConstraintBinding.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_PyMath.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_PythonInit.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_RayCast.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_RayEventManager.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_Scene.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_SG_BoneParentNodeRelationship.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_SG_NodeRelationships.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_SumoPhysicsController.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_TimeCategoryLogger.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_TimeLogger.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_TouchEventManager.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_VehicleWrapper.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_VertexProxy.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_WorldInfo.cpp
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Group "Actuators"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_CameraActuator.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_CDActuator.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_ConstraintActuator.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_GameActuator.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_IpoActuator.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_ObjectActuator.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_SCA_AddObjectActuator.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_SCA_EndObjectActuator.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_SCA_ReplaceMeshActuator.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_SceneActuator.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_SoundActuator.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_TrackToActuator.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_VisibilityActuator.h
-# End Source File
-# End Group
-# Begin Group "SG_Controllers"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_CameraIpoSGController.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_IPO_SGController.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_LightIpoSGController.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_ObColorIpoSGController.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_WorldIpoController.h
-# End Source File
-# End Group
-# Begin Group "Sensors"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_MouseFocusSensor.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_NearSensor.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_RadarSensor.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_RaySensor.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_TouchSensor.h
-# End Source File
-# End Group
-# Begin Group "Ipos"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_IInterpolator.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_IScalarInterpolator.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_OrientationInterpolator.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_PositionInterpolator.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_ScalarInterpolator.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_ScalingInterpolator.h
-# End Source File
-# End Group
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\BL_Material.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\BL_Shader.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\BL_Texture.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_BlenderMaterial.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_BulletPhysicsController.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_Camera.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_ConstraintWrapper.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_ConvertPhysicsObject.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_EmptyObject.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_GameObject.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_IPhysicsController.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_IPOTransform.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_ISceneConverter.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_ISystem.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_KetsjiEngine.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_Light.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_MaterialIpoController.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_MeshProxy.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_MotionState.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_OdePhysicsController.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_PhysicsObjectWrapper.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_PolygonMaterial.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_PyConstraintBinding.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_PyMath.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_PythonInit.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_RayCast.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_RayEventManager.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_Scene.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_SG_BoneParentNodeRelationship.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_SG_NodeRelationships.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_SumoPhysicsController.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_TimeCategoryLogger.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_TimeLogger.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_TouchEventManager.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_VehicleWrapper.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_VertexProxy.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Ketsji\KX_WorldInfo.h
-# End Source File
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="KX_ketsji" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=KX_ketsji - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "KX_ketsji.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "KX_ketsji.mak" CFG="KX_ketsji - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "KX_ketsji - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "KX_ketsji - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "KX_ketsji - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "KX_ketsji - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "KX_ketsji - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\obj\windows\gameengine\ketsji"
+# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\ketsji"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+MTL=midl.exe
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GR /GX /O2 /I "..\..\..\source\gameengine\physics\common\dummy" /I "..\..\..\extern\solid" /I "..\..\..\..\lib\windows\string\include" /I "..\..\..\..\lib\windows\moto\include" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\..\lib\windows\soundsystem\include" /I "..\..\..\source\gameengine\rasterizer" /I "..\..\..\source\gameengine\scenegraph" /I "..\..\..\source\gameengine\gamelogic" /I "..\..\..\source\gameengine\expressions" /I "..\..\..\source\sumo\include" /I "..\..\..\source\sumo\fuzzics\include" /I "..\..\..\source\gameengine\network" /I "..\..\..\source\gameengine\Converter" /I "..\..\..\source\gameengine\ketsji\kxnetwork" /I "..\..\..\source\gameengine\physics" /I "..\..\..\source\gameengine\physics\common" /I "..\..\..\source\gameengine\physics\dummy" /I "..\..\..\source\gameengine\physics\sumo" /I "..\..\..\source\gameengine\physics\sumo\fuzzics\include" /I "..\..\..\source\gameengine\physics\sumo\include" /I "..\..\..\source\gameengine\physics\BlOde" /I "..\..\..\..\lib\windows\python\include\python2.4" /I "..\..\..\source\blender\python" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender\imbuf" /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\gameengine\physics\bullet" /I "..\..\..\extern\bullet\linearmath" /I "..\..\..\extern\bullet\Bulletdynamics" /I "..\..\..\extern\bullet\Bullet" /I "..\..\..\source\gameengine\Rasterizer\RAS_OpenGLRasterizer" /I "..\..\..\source\blender\blenlib" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "EXP_PYTHON_EMBEDDING" /D "USE_SUMO_SOLID" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "KX_ketsji - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\obj\windows\gameengine\ketsji\debug"
+# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\ketsji\debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+MTL=midl.exe
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GR /GX /Zi /Od /I "..\..\..\source\gameengine\physics\common\dummy" /I "..\..\..\extern\solid" /I "..\..\..\..\lib\windows\string\include" /I "..\..\..\..\lib\windows\moto\include" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\..\lib\windows\soundsystem\include" /I "..\..\..\source\gameengine\rasterizer" /I "..\..\..\source\gameengine\scenegraph" /I "..\..\..\source\gameengine\gamelogic" /I "..\..\..\source\gameengine\expressions" /I "..\..\..\source\sumo\include" /I "..\..\..\source\sumo\fuzzics\include" /I "..\..\..\source\gameengine\network" /I "..\..\..\source\gameengine\Converter" /I "..\..\..\source\gameengine\ketsji\kxnetwork" /I "..\..\..\source\gameengine\physics" /I "..\..\..\source\gameengine\physics\common" /I "..\..\..\source\gameengine\physics\dummy" /I "..\..\..\source\gameengine\physics\sumo" /I "..\..\..\source\gameengine\physics\sumo\fuzzics\include" /I "..\..\..\source\gameengine\physics\sumo\include" /I "..\..\..\source\gameengine\physics\BlOde" /I "..\..\..\..\lib\windows\python\include\python2.4" /I "..\..\..\source\blender\python" /I "..\..\..\source\blender\blenkernel" /I "..\..\..\source\blender\makesdna" /I "..\..\..\source\blender\include" /I "..\..\..\source\blender\imbuf" /I "..\..\..\..\lib\windows\guardedalloc\include" /I "..\..\..\source\gameengine\physics\bullet" /I "..\..\..\extern\bullet\linearmath" /I "..\..\..\extern\bullet\Bulletdynamics" /I "..\..\..\extern\bullet\Bullet" /I "..\..\..\source\gameengine\Rasterizer\RAS_OpenGLRasterizer" /I "..\..\..\source\blender\blenlib" /D "JANCODEPANCO" /D "WIN32" /D "_MBCS" /D "_LIB" /D "EXP_PYTHON_EMBEDDING" /D "USE_SUMO_SOLID" /U "_DEBUG" /YX /J /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "KX_ketsji - Win32 MT DLL Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "KX_ketsji___Win32_MT_DLL_Debug"
+# PROP BASE Intermediate_Dir "KX_ketsji___Win32_MT_DLL_Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\obj\windows\gameengine\ketsji\mtdll_debug"
+# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\ketsji\mtdll_debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+MTL=midl.exe
+# ADD BASE CPP /nologo /Gm /GX /ZI /Od /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\gameengine\soundsystem" /I "..\..\..\source\gameengine\rasterizer" /I "..\..\..\source\gameengine\scenegraph" /I "..\..\..\source\gameengine\gamelogic" /I "..\..\..\source\gameengine\expressions" /I "..\..\..\source\sumo\include" /I "..\..\..\source\sumo\fuzzics\include" /I "..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\lib\windows\python\include\python1.5" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "EXP_PYTHON_EMBEDDING" /YX /J /FD /GZ /c
+# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "..\..\..\..\lib\windows\python\include\python2.4" /I "..\..\..\source\gameengine\physics\common\dummy" /I "..\..\..\..\lib\windows\python\include\python2.2" /I "..\..\..\..\lib\windows\string\include" /I "..\..\..\..\lib\windows\moto\include" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\gameengine\soundsystem" /I "..\..\..\source\gameengine\rasterizer" /I "..\..\..\source\gameengine\scenegraph" /I "..\..\..\source\gameengine\gamelogic" /I "..\..\..\source\gameengine\expressions" /I "..\..\..\source\sumo\include" /I "..\..\..\source\sumo\fuzzics\include" /I "..\..\..\source\gameengine\network" /I "..\..\..\source\gameengine\ketsji\kxnetwork" /I "..\..\..\source\gameengine\physics" /I "..\..\..\source\gameengine\physics\common" /I "..\..\..\source\gameengine\physics\dummy" /I "..\..\..\source\gameengine\physics\sumo" /I "..\..\..\source\gameengine\physics\sumo\fuzzics\include" /I "..\..\..\source\gameengine\physics\sumo\include" /I "..\..\..\source\gameengine\physics\BlOde" /D "WIN32" /D "_MBCS" /D "_LIB" /D "EXP_PYTHON_EMBEDDING" /U "_DEBUG" /YX /J /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\gameengine\ketsji\debug\KX_ketsji.lib"
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "KX_ketsji - Win32 MT DLL Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "KX_ketsji___Win32_MT_DLL_Release"
+# PROP BASE Intermediate_Dir "KX_ketsji___Win32_MT_DLL_Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\obj\windows\gameengine\ketsji\mtdll"
+# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\ketsji\mtdll"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+MTL=midl.exe
+# ADD BASE CPP /nologo /GX /O2 /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\gameengine\soundsystem" /I "..\..\..\source\gameengine\rasterizer" /I "..\..\..\source\gameengine\scenegraph" /I "..\..\..\source\gameengine\gamelogic" /I "..\..\..\source\gameengine\expressions" /I "..\..\..\source\sumo\include" /I "..\..\..\source\sumo\fuzzics\include" /I "..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\lib\windows\python\include\python2.0" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "EXP_PYTHON_EMBEDDING" /YX /J /FD /c
+# ADD CPP /nologo /MD /GX /O2 /I "..\..\..\..\lib\windows\python\include\python2.4" /I "..\..\..\source\gameengine\physics\common\dummy" /I "..\..\..\..\lib\windows\python\include\python2.2" /I "..\..\..\..\lib\windows\string\include" /I "..\..\..\..\lib\windows\moto\include" /I "..\..\..\source\kernel\gen_system" /I "..\..\..\source\gameengine\soundsystem" /I "..\..\..\source\gameengine\rasterizer" /I "..\..\..\source\gameengine\scenegraph" /I "..\..\..\source\gameengine\gamelogic" /I "..\..\..\source\gameengine\expressions" /I "..\..\..\source\sumo\include" /I "..\..\..\source\sumo\fuzzics\include" /I "..\..\..\source\gameengine\network" /I "..\..\..\source\gameengine\ketsji\kxnetwork" /I "..\..\..\source\gameengine\physics" /I "..\..\..\source\gameengine\physics\common" /I "..\..\..\source\gameengine\physics\dummy" /I "..\..\..\source\gameengine\physics\sumo" /I "..\..\..\source\gameengine\physics\sumo\fuzzics\include" /I "..\..\..\source\gameengine\physics\sumo\include" /I "..\..\..\source\gameengine\physics\BlOde" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "EXP_PYTHON_EMBEDDING" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\gameengine\ketsji\KX_ketsji.lib"
+# ADD LIB32 /nologo
+
+!ENDIF
+
+# Begin Target
+
+# Name "KX_ketsji - Win32 Release"
+# Name "KX_ketsji - Win32 Debug"
+# Name "KX_ketsji - Win32 MT DLL Debug"
+# Name "KX_ketsji - Win32 MT DLL Release"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Group "ActuatorsImp"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_CameraActuator.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_CDActuator.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_ConstraintActuator.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_GameActuator.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_IpoActuator.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_ObjectActuator.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_SCA_AddObjectActuator.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_SCA_EndObjectActuator.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_SCA_ReplaceMeshActuator.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_SceneActuator.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_SoundActuator.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_TrackToActuator.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_VisibilityActuator.cpp
+# End Source File
+# End Group
+# Begin Group "SG_ControllersImp"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_CameraIpoSGController.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_IPO_SGController.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_LightIpoSGController.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_ObColorIpoSGController.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_WorldIpoController.cpp
+# End Source File
+# End Group
+# Begin Group "SensorsImp"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_MouseFocusSensor.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_NearSensor.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_RadarSensor.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_RaySensor.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_TouchSensor.cpp
+# End Source File
+# End Group
+# Begin Group "IposImp"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_OrientationInterpolator.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_PositionInterpolator.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_ScalarInterpolator.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_ScalingInterpolator.cpp
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\BL_Material.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\BL_Shader.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\BL_Texture.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_BlenderMaterial.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_BulletPhysicsController.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_Camera.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_ConstraintWrapper.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_ConvertPhysicsObjects.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_EmptyObject.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_GameObject.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_IPhysicsController.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_KetsjiEngine.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_Light.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_MaterialIpoController.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_MeshProxy.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_MotionState.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_OdePhysicsController.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_PhysicsObjectWrapper.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_PolygonMaterial.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_PyConstraintBinding.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_PyMath.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_PythonInit.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_RayCast.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_RayEventManager.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_Scene.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_SG_BoneParentNodeRelationship.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_SG_NodeRelationships.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_SumoPhysicsController.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_TimeCategoryLogger.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_TimeLogger.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_TouchEventManager.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_VehicleWrapper.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_VertexProxy.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_WorldInfo.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Group "Actuators"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_CameraActuator.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_CDActuator.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_ConstraintActuator.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_GameActuator.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_IpoActuator.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_ObjectActuator.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_SCA_AddObjectActuator.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_SCA_EndObjectActuator.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_SCA_ReplaceMeshActuator.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_SceneActuator.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_SoundActuator.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_TrackToActuator.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_VisibilityActuator.h
+# End Source File
+# End Group
+# Begin Group "SG_Controllers"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_CameraIpoSGController.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_IPO_SGController.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_LightIpoSGController.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_ObColorIpoSGController.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_WorldIpoController.h
+# End Source File
+# End Group
+# Begin Group "Sensors"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_MouseFocusSensor.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_NearSensor.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_RadarSensor.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_RaySensor.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_TouchSensor.h
+# End Source File
+# End Group
+# Begin Group "Ipos"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_IInterpolator.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_IScalarInterpolator.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_OrientationInterpolator.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_PositionInterpolator.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_ScalarInterpolator.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_ScalingInterpolator.h
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\BL_Material.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\BL_Shader.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\BL_Texture.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_BlenderMaterial.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_BulletPhysicsController.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_Camera.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_ConstraintWrapper.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_ConvertPhysicsObject.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_EmptyObject.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_GameObject.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_IPhysicsController.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_IPOTransform.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_ISceneConverter.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_ISystem.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_KetsjiEngine.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_Light.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_MaterialIpoController.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_MeshProxy.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_MotionState.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_OdePhysicsController.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_PhysicsObjectWrapper.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_PolygonMaterial.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_PyConstraintBinding.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_PyMath.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_PythonInit.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_RayCast.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_RayEventManager.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_Scene.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_SG_BoneParentNodeRelationship.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_SG_NodeRelationships.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_SumoPhysicsController.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_TimeCategoryLogger.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_TimeLogger.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_TouchEventManager.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_VehicleWrapper.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_VertexProxy.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Ketsji\KX_WorldInfo.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/projectfiles/gameengine/ketsji/network/KX_network.dsp b/projectfiles/gameengine/ketsji/network/KX_network.dsp
index 0c265e9dd56..7a67a825988 100644
--- a/projectfiles/gameengine/ketsji/network/KX_network.dsp
+++ b/projectfiles/gameengine/ketsji/network/KX_network.dsp
@@ -1,186 +1,186 @@
-# Microsoft Developer Studio Project File - Name="KX_network" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=KX_network - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "KX_network.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "KX_network.mak" CFG="KX_network - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "KX_network - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "KX_network - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "KX_network - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "KX_network - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "KX_network - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\..\obj\windows\gameengine\ketsji\network"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\ketsji\network"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GR /GX /O2 /I "..\..\..\..\..\lib\windows\python\include\python2.4" /I "..\..\..\..\..\lib\windows\string\include" /I "..\..\..\..\source\gameengine\ketsji" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\GameLogic" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\gameengine\Network" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "KX_network - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\..\obj\windows\gameengine\ketsji\network\debug"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\ketsji\network\debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GR /GX /Zi /Od /I "..\..\..\..\..\lib\windows\python\include\python2.4" /I "..\..\..\..\..\lib\windows\string\include" /I "..\..\..\..\source\gameengine\ketsji" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\GameLogic" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\gameengine\Network" /D "WIN32" /D "_MBCS" /D "_LIB" /U "_DEBUG" /YX /J /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "KX_network - Win32 MT DLL Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "KX_network___Win32_MT_DLL_Debug"
-# PROP BASE Intermediate_Dir "KX_network___Win32_MT_DLL_Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\..\obj\windows\gameengine\ketsji\network\mtdll_debug"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\ketsji\network\mtdll_debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /Gm /GX /ZI /Od /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\GameLogic" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\gameengine\Network" /I "..\..\..\..\..\lib\windows\python\include\python1.5" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "..\..\..\..\..\lib\windows\python\include\python2.2" /I "..\..\..\..\..\lib\windows\string\include" /I "..\..\..\..\source\gameengine\ketsji" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\GameLogic" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\gameengine\Network" /D "WIN32" /D "_MBCS" /D "_LIB" /U "_DEBUG" /YX /J /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\..\obj\windows\gameengine\ketsji\network\debug\KX_network.lib"
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "KX_network - Win32 MT DLL Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "KX_network___Win32_MT_DLL_Release"
-# PROP BASE Intermediate_Dir "KX_network___Win32_MT_DLL_Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\..\obj\windows\gameengine\ketsji\network\mtdll"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\ketsji\network\mtdll"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /GX /O2 /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\GameLogic" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\gameengine\Network" /I "..\..\..\..\..\lib\windows\python\include\python2.0" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD CPP /nologo /MD /GX /O2 /I "..\..\..\..\..\lib\windows\python\include\python2.0" /I "..\..\..\..\..\lib\windows\python\include\python2.2" /I "..\..\..\..\..\lib\windows\string\include" /I "..\..\..\..\source\gameengine\ketsji" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\GameLogic" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\gameengine\Network" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\..\obj\windows\gameengine\ketsji\network\KX_network.lib"
-# ADD LIB32 /nologo
-
-!ENDIF
-
-# Begin Target
-
-# Name "KX_network - Win32 Release"
-# Name "KX_network - Win32 Debug"
-# Name "KX_network - Win32 MT DLL Debug"
-# Name "KX_network - Win32 MT DLL Release"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\Ketsji\KXNetwork\KX_NetworkEventManager.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\Ketsji\KXNetwork\KX_NetworkMessageActuator.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\Ketsji\KXNetwork\KX_NetworkMessageSensor.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\Ketsji\KXNetwork\KX_NetworkObjectActuator.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\Ketsji\KXNetwork\KX_NetworkObjectSensor.cpp
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\Ketsji\KXNetwork\KX_NetworkEventManager.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\Ketsji\KXNetwork\KX_NetworkMessageActuator.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\Ketsji\KXNetwork\KX_NetworkMessageSensor.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\Ketsji\KXNetwork\KX_NetworkObjectActuator.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\Ketsji\KXNetwork\KX_NetworkObjectSensor.h
-# End Source File
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="KX_network" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=KX_network - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "KX_network.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "KX_network.mak" CFG="KX_network - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "KX_network - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "KX_network - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "KX_network - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "KX_network - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "KX_network - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\..\obj\windows\gameengine\ketsji\network"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\ketsji\network"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GR /GX /O2 /I "..\..\..\..\..\lib\windows\python\include\python2.4" /I "..\..\..\..\..\lib\windows\string\include" /I "..\..\..\..\source\gameengine\ketsji" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\GameLogic" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\gameengine\Network" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "KX_network - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\..\obj\windows\gameengine\ketsji\network\debug"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\ketsji\network\debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GR /GX /Zi /Od /I "..\..\..\..\..\lib\windows\python\include\python2.4" /I "..\..\..\..\..\lib\windows\string\include" /I "..\..\..\..\source\gameengine\ketsji" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\GameLogic" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\gameengine\Network" /D "WIN32" /D "_MBCS" /D "_LIB" /U "_DEBUG" /YX /J /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "KX_network - Win32 MT DLL Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "KX_network___Win32_MT_DLL_Debug"
+# PROP BASE Intermediate_Dir "KX_network___Win32_MT_DLL_Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\..\obj\windows\gameengine\ketsji\network\mtdll_debug"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\ketsji\network\mtdll_debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /Gm /GX /ZI /Od /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\GameLogic" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\gameengine\Network" /I "..\..\..\..\..\lib\windows\python\include\python1.5" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
+# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "..\..\..\..\..\lib\windows\python\include\python2.2" /I "..\..\..\..\..\lib\windows\string\include" /I "..\..\..\..\source\gameengine\ketsji" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\GameLogic" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\gameengine\Network" /D "WIN32" /D "_MBCS" /D "_LIB" /U "_DEBUG" /YX /J /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\..\obj\windows\gameengine\ketsji\network\debug\KX_network.lib"
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "KX_network - Win32 MT DLL Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "KX_network___Win32_MT_DLL_Release"
+# PROP BASE Intermediate_Dir "KX_network___Win32_MT_DLL_Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\..\obj\windows\gameengine\ketsji\network\mtdll"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\ketsji\network\mtdll"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /GX /O2 /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\GameLogic" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\gameengine\Network" /I "..\..\..\..\..\lib\windows\python\include\python2.0" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD CPP /nologo /MD /GX /O2 /I "..\..\..\..\..\lib\windows\python\include\python2.0" /I "..\..\..\..\..\lib\windows\python\include\python2.2" /I "..\..\..\..\..\lib\windows\string\include" /I "..\..\..\..\source\gameengine\ketsji" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\GameLogic" /I "..\..\..\..\source\gameengine\expressions" /I "..\..\..\..\source\gameengine\Network" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\..\obj\windows\gameengine\ketsji\network\KX_network.lib"
+# ADD LIB32 /nologo
+
+!ENDIF
+
+# Begin Target
+
+# Name "KX_network - Win32 Release"
+# Name "KX_network - Win32 Debug"
+# Name "KX_network - Win32 MT DLL Debug"
+# Name "KX_network - Win32 MT DLL Release"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\Ketsji\KXNetwork\KX_NetworkEventManager.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\Ketsji\KXNetwork\KX_NetworkMessageActuator.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\Ketsji\KXNetwork\KX_NetworkMessageSensor.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\Ketsji\KXNetwork\KX_NetworkObjectActuator.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\Ketsji\KXNetwork\KX_NetworkObjectSensor.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\Ketsji\KXNetwork\KX_NetworkEventManager.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\Ketsji\KXNetwork\KX_NetworkMessageActuator.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\Ketsji\KXNetwork\KX_NetworkMessageSensor.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\Ketsji\KXNetwork\KX_NetworkObjectActuator.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\Ketsji\KXNetwork\KX_NetworkObjectSensor.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/projectfiles/gameengine/network/loopbacknetwork/NG_loopbacknetwork.dsp b/projectfiles/gameengine/network/loopbacknetwork/NG_loopbacknetwork.dsp
index 08bd4a1326d..30c08933fad 100644
--- a/projectfiles/gameengine/network/loopbacknetwork/NG_loopbacknetwork.dsp
+++ b/projectfiles/gameengine/network/loopbacknetwork/NG_loopbacknetwork.dsp
@@ -1,155 +1,155 @@
-# Microsoft Developer Studio Project File - Name="NG_loopbacknetwork" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=NG_loopbacknetwork - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "NG_loopbacknetwork.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "NG_loopbacknetwork.mak" CFG="NG_loopbacknetwork - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "NG_loopbacknetwork - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "NG_loopbacknetwork - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "NG_loopbacknetwork - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "NG_loopbacknetwork - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "NG_loopbacknetwork - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\..\obj\windows\gameengine\network\loopbacknetwork"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\network\loopbacknetwork"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GR /GX /O2 /I "..\..\..\..\..\lib\windows\string\include" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\Network" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "NG_loopbacknetwork - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\..\obj\windows\gameengine\network\loopbacknetwork\debug"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\network\loopbacknetwork\debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GR /GX /Zi /Od /I "..\..\..\..\..\lib\windows\string\include" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\Network" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
-# SUBTRACT CPP /Fr
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "NG_loopbacknetwork - Win32 MT DLL Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "NG_loopbacknetwork___Win32_MT_DLL_Debug"
-# PROP BASE Intermediate_Dir "NG_loopbacknetwork___Win32_MT_DLL_Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\..\obj\windows\gameengine\network\loopbacknetwork\mtdll_debug"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\network\loopbacknetwork\mtdll_debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /Gm /GX /ZI /Od /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\Network" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "..\..\..\..\..\lib\windows\string\include" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\Network" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\..\obj\windows\gameengine\network\loopbacknetwork\debug\NG_loopbacknetwork.lib"
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "NG_loopbacknetwork - Win32 MT DLL Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "NG_loopbacknetwork___Win32_MT_DLL_Release"
-# PROP BASE Intermediate_Dir "NG_loopbacknetwork___Win32_MT_DLL_Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\..\obj\windows\gameengine\network\loopbacknetwork\mtdll"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\network\loopbacknetwork\mtdll"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /GX /O2 /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\Network" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD CPP /nologo /MD /GX /O2 /I "..\..\..\..\..\lib\windows\string\include" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\Network" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\..\obj\windows\gameengine\network\loopbacknetwork\NG_loopbacknetwork.lib"
-# ADD LIB32 /nologo
-
-!ENDIF
-
-# Begin Target
-
-# Name "NG_loopbacknetwork - Win32 Release"
-# Name "NG_loopbacknetwork - Win32 Debug"
-# Name "NG_loopbacknetwork - Win32 MT DLL Debug"
-# Name "NG_loopbacknetwork - Win32 MT DLL Release"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\Network\LoopBackNetwork\NG_LoopBackNetworkDeviceInterface.cpp
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\Network\LoopBackNetwork\NG_LoopBackNetworkDeviceInterface.h
-# End Source File
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="NG_loopbacknetwork" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=NG_loopbacknetwork - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "NG_loopbacknetwork.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "NG_loopbacknetwork.mak" CFG="NG_loopbacknetwork - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "NG_loopbacknetwork - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "NG_loopbacknetwork - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "NG_loopbacknetwork - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "NG_loopbacknetwork - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "NG_loopbacknetwork - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\..\obj\windows\gameengine\network\loopbacknetwork"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\network\loopbacknetwork"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GR /GX /O2 /I "..\..\..\..\..\lib\windows\string\include" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\Network" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "NG_loopbacknetwork - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\..\obj\windows\gameengine\network\loopbacknetwork\debug"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\network\loopbacknetwork\debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GR /GX /Zi /Od /I "..\..\..\..\..\lib\windows\string\include" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\Network" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
+# SUBTRACT CPP /Fr
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "NG_loopbacknetwork - Win32 MT DLL Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "NG_loopbacknetwork___Win32_MT_DLL_Debug"
+# PROP BASE Intermediate_Dir "NG_loopbacknetwork___Win32_MT_DLL_Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\..\obj\windows\gameengine\network\loopbacknetwork\mtdll_debug"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\network\loopbacknetwork\mtdll_debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /Gm /GX /ZI /Od /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\Network" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
+# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "..\..\..\..\..\lib\windows\string\include" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\Network" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\..\obj\windows\gameengine\network\loopbacknetwork\debug\NG_loopbacknetwork.lib"
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "NG_loopbacknetwork - Win32 MT DLL Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "NG_loopbacknetwork___Win32_MT_DLL_Release"
+# PROP BASE Intermediate_Dir "NG_loopbacknetwork___Win32_MT_DLL_Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\..\obj\windows\gameengine\network\loopbacknetwork\mtdll"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\network\loopbacknetwork\mtdll"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /GX /O2 /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\Network" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD CPP /nologo /MD /GX /O2 /I "..\..\..\..\..\lib\windows\string\include" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\source\gameengine\Network" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\..\obj\windows\gameengine\network\loopbacknetwork\NG_loopbacknetwork.lib"
+# ADD LIB32 /nologo
+
+!ENDIF
+
+# Begin Target
+
+# Name "NG_loopbacknetwork - Win32 Release"
+# Name "NG_loopbacknetwork - Win32 Debug"
+# Name "NG_loopbacknetwork - Win32 MT DLL Debug"
+# Name "NG_loopbacknetwork - Win32 MT DLL Release"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\Network\LoopBackNetwork\NG_LoopBackNetworkDeviceInterface.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\Network\LoopBackNetwork\NG_LoopBackNetworkDeviceInterface.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/projectfiles/gameengine/network/network/NG_network.dsp b/projectfiles/gameengine/network/network/NG_network.dsp
index 8c13c01f7e7..ca67963500c 100644
--- a/projectfiles/gameengine/network/network/NG_network.dsp
+++ b/projectfiles/gameengine/network/network/NG_network.dsp
@@ -1,174 +1,174 @@
-# Microsoft Developer Studio Project File - Name="NG_network" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=NG_network - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "NG_network.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "NG_network.mak" CFG="NG_network - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "NG_network - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "NG_network - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "NG_network - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "NG_network - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "NG_network - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\..\obj\windows\gameengine\network\network"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\network\network"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GR /GX /O2 /I "..\..\..\..\..\lib\windows\string\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\kernel\gen_system" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "NG_network - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\..\obj\windows\gameengine\network\network\debug"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\network\network\debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GR /GX /Zi /Od /I "..\..\..\..\..\lib\windows\string\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\kernel\gen_system" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "NG_network - Win32 MT DLL Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "NG_network___Win32_MT_DLL_Debug"
-# PROP BASE Intermediate_Dir "NG_network___Win32_MT_DLL_Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\..\obj\windows\gameengine\network\network\mtdll_debug"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\network\network\mtdll_debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /Gm /GX /ZI /Od /I "..\..\..\..\source\kernel\gen_system" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "..\..\..\..\..\lib\windows\string\include" /I "..\..\..\..\source\kernel\gen_system" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\..\obj\windows\gameengine\network\network\debug\NG_network.lib"
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "NG_network - Win32 MT DLL Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "NG_network___Win32_MT_DLL_Release"
-# PROP BASE Intermediate_Dir "NG_network___Win32_MT_DLL_Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\..\obj\windows\gameengine\network\network\mtdll"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\network\network\mtdll"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /GX /O2 /I "..\..\..\..\source\kernel\gen_system" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD CPP /nologo /MD /GX /O2 /I "..\..\..\..\..\lib\windows\string\include" /I "..\..\..\..\source\kernel\gen_system" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\..\obj\windows\gameengine\network\network\NG_network.lib"
-# ADD LIB32 /nologo
-
-!ENDIF
-
-# Begin Target
-
-# Name "NG_network - Win32 Release"
-# Name "NG_network - Win32 Debug"
-# Name "NG_network - Win32 MT DLL Debug"
-# Name "NG_network - Win32 MT DLL Release"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\Network\NG_NetworkMessage.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\Network\NG_NetworkObject.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\Network\NG_NetworkScene.cpp
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\Network\NG_NetworkDeviceInterface.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\Network\NG_NetworkMessage.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\Network\NG_NetworkObject.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\Network\NG_NetworkScene.h
-# End Source File
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="NG_network" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=NG_network - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "NG_network.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "NG_network.mak" CFG="NG_network - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "NG_network - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "NG_network - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "NG_network - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "NG_network - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "NG_network - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\..\obj\windows\gameengine\network\network"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\network\network"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GR /GX /O2 /I "..\..\..\..\..\lib\windows\string\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\kernel\gen_system" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "NG_network - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\..\obj\windows\gameengine\network\network\debug"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\network\network\debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GR /GX /Zi /Od /I "..\..\..\..\..\lib\windows\string\include" /I "..\..\..\..\..\lib\windows\moto\include" /I "..\..\..\..\source\kernel\gen_system" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "NG_network - Win32 MT DLL Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "NG_network___Win32_MT_DLL_Debug"
+# PROP BASE Intermediate_Dir "NG_network___Win32_MT_DLL_Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\..\obj\windows\gameengine\network\network\mtdll_debug"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\network\network\mtdll_debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /Gm /GX /ZI /Od /I "..\..\..\..\source\kernel\gen_system" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
+# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "..\..\..\..\..\lib\windows\string\include" /I "..\..\..\..\source\kernel\gen_system" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\..\obj\windows\gameengine\network\network\debug\NG_network.lib"
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "NG_network - Win32 MT DLL Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "NG_network___Win32_MT_DLL_Release"
+# PROP BASE Intermediate_Dir "NG_network___Win32_MT_DLL_Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\..\obj\windows\gameengine\network\network\mtdll"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\network\network\mtdll"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /GX /O2 /I "..\..\..\..\source\kernel\gen_system" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD CPP /nologo /MD /GX /O2 /I "..\..\..\..\..\lib\windows\string\include" /I "..\..\..\..\source\kernel\gen_system" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\..\obj\windows\gameengine\network\network\NG_network.lib"
+# ADD LIB32 /nologo
+
+!ENDIF
+
+# Begin Target
+
+# Name "NG_network - Win32 Release"
+# Name "NG_network - Win32 Debug"
+# Name "NG_network - Win32 MT DLL Debug"
+# Name "NG_network - Win32 MT DLL Release"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\Network\NG_NetworkMessage.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\Network\NG_NetworkObject.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\Network\NG_NetworkScene.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\Network\NG_NetworkDeviceInterface.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\Network\NG_NetworkMessage.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\Network\NG_NetworkObject.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\Network\NG_NetworkScene.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/projectfiles/gameengine/network/terraplaynetwork/NG_terraplaynetwork.dsp b/projectfiles/gameengine/network/terraplaynetwork/NG_terraplaynetwork.dsp
index ce407eda0f7..6653783bcae 100644
--- a/projectfiles/gameengine/network/terraplaynetwork/NG_terraplaynetwork.dsp
+++ b/projectfiles/gameengine/network/terraplaynetwork/NG_terraplaynetwork.dsp
@@ -1,180 +1,180 @@
-# Microsoft Developer Studio Project File - Name="NG_terraplaynetwork" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=NG_terraplaynetwork - Win32 Profile
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "NG_terraplaynetwork.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "NG_terraplaynetwork.mak" CFG="NG_terraplaynetwork - Win32 Profile"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "NG_terraplaynetwork - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "NG_terraplaynetwork - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "NG_terraplaynetwork - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "NG_terraplaynetwork - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "NG_terraplaynetwork - Win32 Profile" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "NG_terraplaynetwork - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "..\..\..\..\..\obj\windows\gameengine\network\terraplaynetwork"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /W3 /GX /O2 /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\..\lib\windows\terraplay\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\..\..\..\obj\windows\gameengine\network\terraplaynetwork\NG_terraplaynetwork.lib"
-
-!ELSEIF "$(CFG)" == "NG_terraplaynetwork - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "..\..\..\..\..\obj\windows\gameengine\network\terraplaynetwork\debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\..\lib\windows\terraplay\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /FR /YX /J /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\..\..\..\obj\windows\gameengine\network\terraplaynetwork\debug\NG_terraplaynetwork.lib"
-
-!ELSEIF "$(CFG)" == "NG_terraplaynetwork - Win32 MT DLL Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "NG_terraplaynetwork___Win32_MT_DLL_Debug"
-# PROP BASE Intermediate_Dir "NG_terraplaynetwork___Win32_MT_DLL_Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\..\..\obj\windows\gameengine\network\terraplaynetwork\mtdll_debug"
-# PROP Intermediate_Dir "..\..\..\..\..\obj\windows\gameengine\network\terraplaynetwork\mtdll_debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /Gm /GX /ZI /Od /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\..\lib\windows\terraplay\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\..\lib\windows\terraplay\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\..\obj\windows\gameengine\network\terraplaynetwork\debug\NG_terraplaynetwork.lib"
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "NG_terraplaynetwork - Win32 MT DLL Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "NG_terraplaynetwork___Win32_MT_DLL_Release"
-# PROP BASE Intermediate_Dir "NG_terraplaynetwork___Win32_MT_DLL_Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\..\..\obj\windows\gameengine\network\terraplaynetwork\mtdll"
-# PROP Intermediate_Dir "..\..\..\..\..\obj\windows\gameengine\network\terraplaynetwork\mtdll"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /GX /O2 /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\..\lib\windows\terraplay\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD CPP /nologo /MD /GX /O2 /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\..\lib\windows\terraplay\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\..\obj\windows\gameengine\network\terraplaynetwork\NG_terraplaynetwork.lib"
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "NG_terraplaynetwork - Win32 Profile"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "NG_terraplaynetwork___Win32_Profile"
-# PROP BASE Intermediate_Dir "NG_terraplaynetwork___Win32_Profile"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "NG_terraplaynetwork___Win32_Profile"
-# PROP Intermediate_Dir "NG_terraplaynetwork___Win32_Profile"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\..\lib\windows\terraplay\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
-# ADD CPP /nologo /W3 /Gm /GX /Zi /O2 /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\..\lib\windows\terraplay\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\gameengine\network\terraplaynetwork\debug\NG_terraplaynetwork.lib"
-# ADD LIB32 /nologo /out:"..\..\..\..\..\obj\windows\gameengine\network\terraplaynetwork\profile\NG_terraplaynetwork.lib"
-
-!ENDIF
-
-# Begin Target
-
-# Name "NG_terraplaynetwork - Win32 Release"
-# Name "NG_terraplaynetwork - Win32 Debug"
-# Name "NG_terraplaynetwork - Win32 MT DLL Debug"
-# Name "NG_terraplaynetwork - Win32 MT DLL Release"
-# Name "NG_terraplaynetwork - Win32 Profile"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\Network\TerraplayNetwork\NG_TerraplayNetworkDeviceInterface.cpp
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\Network\TerraplayNetwork\NG_TerraplayNetworkDeviceInterface.h
-# End Source File
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="NG_terraplaynetwork" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=NG_terraplaynetwork - Win32 Profile
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "NG_terraplaynetwork.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "NG_terraplaynetwork.mak" CFG="NG_terraplaynetwork - Win32 Profile"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "NG_terraplaynetwork - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "NG_terraplaynetwork - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "NG_terraplaynetwork - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "NG_terraplaynetwork - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "NG_terraplaynetwork - Win32 Profile" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "NG_terraplaynetwork - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "..\..\..\..\..\obj\windows\gameengine\network\terraplaynetwork"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\..\lib\windows\terraplay\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"..\..\..\..\..\obj\windows\gameengine\network\terraplaynetwork\NG_terraplaynetwork.lib"
+
+!ELSEIF "$(CFG)" == "NG_terraplaynetwork - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "..\..\..\..\..\obj\windows\gameengine\network\terraplaynetwork\debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\..\lib\windows\terraplay\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /FR /YX /J /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"..\..\..\..\..\obj\windows\gameengine\network\terraplaynetwork\debug\NG_terraplaynetwork.lib"
+
+!ELSEIF "$(CFG)" == "NG_terraplaynetwork - Win32 MT DLL Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "NG_terraplaynetwork___Win32_MT_DLL_Debug"
+# PROP BASE Intermediate_Dir "NG_terraplaynetwork___Win32_MT_DLL_Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\..\..\obj\windows\gameengine\network\terraplaynetwork\mtdll_debug"
+# PROP Intermediate_Dir "..\..\..\..\..\obj\windows\gameengine\network\terraplaynetwork\mtdll_debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /Gm /GX /ZI /Od /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\..\lib\windows\terraplay\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
+# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\..\lib\windows\terraplay\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\..\obj\windows\gameengine\network\terraplaynetwork\debug\NG_terraplaynetwork.lib"
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "NG_terraplaynetwork - Win32 MT DLL Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "NG_terraplaynetwork___Win32_MT_DLL_Release"
+# PROP BASE Intermediate_Dir "NG_terraplaynetwork___Win32_MT_DLL_Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\..\..\obj\windows\gameengine\network\terraplaynetwork\mtdll"
+# PROP Intermediate_Dir "..\..\..\..\..\obj\windows\gameengine\network\terraplaynetwork\mtdll"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /GX /O2 /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\..\lib\windows\terraplay\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD CPP /nologo /MD /GX /O2 /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\..\lib\windows\terraplay\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\..\obj\windows\gameengine\network\terraplaynetwork\NG_terraplaynetwork.lib"
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "NG_terraplaynetwork - Win32 Profile"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "NG_terraplaynetwork___Win32_Profile"
+# PROP BASE Intermediate_Dir "NG_terraplaynetwork___Win32_Profile"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "NG_terraplaynetwork___Win32_Profile"
+# PROP Intermediate_Dir "NG_terraplaynetwork___Win32_Profile"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\..\lib\windows\terraplay\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /Zi /O2 /I "..\..\..\..\source\gameengine\network" /I "..\..\..\..\source\kernel\gen_system" /I "..\..\..\..\..\lib\windows\terraplay\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\gameengine\network\terraplaynetwork\debug\NG_terraplaynetwork.lib"
+# ADD LIB32 /nologo /out:"..\..\..\..\..\obj\windows\gameengine\network\terraplaynetwork\profile\NG_terraplaynetwork.lib"
+
+!ENDIF
+
+# Begin Target
+
+# Name "NG_terraplaynetwork - Win32 Release"
+# Name "NG_terraplaynetwork - Win32 Debug"
+# Name "NG_terraplaynetwork - Win32 MT DLL Debug"
+# Name "NG_terraplaynetwork - Win32 MT DLL Release"
+# Name "NG_terraplaynetwork - Win32 Profile"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\Network\TerraplayNetwork\NG_TerraplayNetworkDeviceInterface.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\Network\TerraplayNetwork\NG_TerraplayNetworkDeviceInterface.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/projectfiles/gameengine/physics/PHY_Physics/PHY_Dummy/PHY_Dummy.dsp b/projectfiles/gameengine/physics/PHY_Physics/PHY_Dummy/PHY_Dummy.dsp
index 0cc26260fd0..0620baa5d03 100644
--- a/projectfiles/gameengine/physics/PHY_Physics/PHY_Dummy/PHY_Dummy.dsp
+++ b/projectfiles/gameengine/physics/PHY_Physics/PHY_Dummy/PHY_Dummy.dsp
@@ -1,154 +1,154 @@
-# Microsoft Developer Studio Project File - Name="PHY_Dummy" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=PHY_Dummy - Win32 MT DLL Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "PHY_Dummy.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "PHY_Dummy.mak" CFG="PHY_Dummy - Win32 MT DLL Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "PHY_Dummy - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "PHY_Dummy - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "PHY_Dummy - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "PHY_Dummy - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "PHY_Dummy - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\..\..\obj\windows\gameengine\physics\dummy\"
-# PROP Intermediate_Dir "..\..\..\..\..\obj\windows\gameengine\physics\dummy\"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /W3 /GR /GX /O2 /I "../../../../../source/gameengine/physics/common" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "PHY_Dummy - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\..\..\obj\windows\gameengine\physics\dummy\debug"
-# PROP Intermediate_Dir "..\..\..\..\..\obj\windows\gameengine\physics\dummy\debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /W3 /Gm /GR /GX /ZI /Od /I "../../../../../source/gameengine/physics/common" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "PHY_Dummy - Win32 MT DLL Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "PHY_Dummy___Win32_MT_DLL_Debug"
-# PROP BASE Intermediate_Dir "PHY_Dummy___Win32_MT_DLL_Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\..\..\obj\windows\gameengine\physics\dummy\mtdll_debug"
-# PROP Intermediate_Dir "..\..\..\..\..\obj\windows\gameengine\physics\dummy\mtdll_debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../../../source/gameengine/physics/common" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../../../../source/gameengine/physics/common" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "PHY_Dummy - Win32 MT DLL Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "PHY_Dummy___Win32_MT_DLL_Release"
-# PROP BASE Intermediate_Dir "PHY_Dummy___Win32_MT_DLL_Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\..\..\obj\windows\gameengine\physics\dummy\mtdll"
-# PROP Intermediate_Dir "..\..\..\..\..\obj\windows\gameengine\physics\dummy\mtdll"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /GX /O2 /I "../../../../../source/gameengine/physics/common" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "../../../../../source/gameengine/physics/common" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ENDIF
-
-# Begin Target
-
-# Name "PHY_Dummy - Win32 Release"
-# Name "PHY_Dummy - Win32 Debug"
-# Name "PHY_Dummy - Win32 MT DLL Debug"
-# Name "PHY_Dummy - Win32 MT DLL Release"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\..\..\..\source\gameengine\Physics\Dummy\DummyPhysicsEnvironment.cpp
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\..\..\..\source\gameengine\Physics\Dummy\DummyPhysicsEnvironment.h
-# End Source File
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="PHY_Dummy" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=PHY_Dummy - Win32 MT DLL Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "PHY_Dummy.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "PHY_Dummy.mak" CFG="PHY_Dummy - Win32 MT DLL Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "PHY_Dummy - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "PHY_Dummy - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "PHY_Dummy - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "PHY_Dummy - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "PHY_Dummy - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\..\..\obj\windows\gameengine\physics\dummy\"
+# PROP Intermediate_Dir "..\..\..\..\..\obj\windows\gameengine\physics\dummy\"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /W3 /GR /GX /O2 /I "../../../../../source/gameengine/physics/common" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "PHY_Dummy - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\..\..\obj\windows\gameengine\physics\dummy\debug"
+# PROP Intermediate_Dir "..\..\..\..\..\obj\windows\gameengine\physics\dummy\debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GR /GX /ZI /Od /I "../../../../../source/gameengine/physics/common" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "PHY_Dummy - Win32 MT DLL Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "PHY_Dummy___Win32_MT_DLL_Debug"
+# PROP BASE Intermediate_Dir "PHY_Dummy___Win32_MT_DLL_Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\..\..\obj\windows\gameengine\physics\dummy\mtdll_debug"
+# PROP Intermediate_Dir "..\..\..\..\..\obj\windows\gameengine\physics\dummy\mtdll_debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../../../source/gameengine/physics/common" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../../../../source/gameengine/physics/common" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "PHY_Dummy - Win32 MT DLL Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "PHY_Dummy___Win32_MT_DLL_Release"
+# PROP BASE Intermediate_Dir "PHY_Dummy___Win32_MT_DLL_Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\..\..\obj\windows\gameengine\physics\dummy\mtdll"
+# PROP Intermediate_Dir "..\..\..\..\..\obj\windows\gameengine\physics\dummy\mtdll"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /GX /O2 /I "../../../../../source/gameengine/physics/common" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "../../../../../source/gameengine/physics/common" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ENDIF
+
+# Begin Target
+
+# Name "PHY_Dummy - Win32 Release"
+# Name "PHY_Dummy - Win32 Debug"
+# Name "PHY_Dummy - Win32 MT DLL Debug"
+# Name "PHY_Dummy - Win32 MT DLL Release"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\..\..\source\gameengine\Physics\Dummy\DummyPhysicsEnvironment.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\..\..\source\gameengine\Physics\Dummy\DummyPhysicsEnvironment.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/projectfiles/gameengine/physics/PHY_Physics/PHY_Ode/PHY_Ode.dsp b/projectfiles/gameengine/physics/PHY_Physics/PHY_Ode/PHY_Ode.dsp
index fef5dbf63f5..9d607db809c 100644
--- a/projectfiles/gameengine/physics/PHY_Physics/PHY_Ode/PHY_Ode.dsp
+++ b/projectfiles/gameengine/physics/PHY_Physics/PHY_Ode/PHY_Ode.dsp
@@ -1,162 +1,162 @@
-# Microsoft Developer Studio Project File - Name="PHY_Ode" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=PHY_Ode - Win32 MT DLL Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "PHY_Ode.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "PHY_Ode.mak" CFG="PHY_Ode - Win32 MT DLL Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "PHY_Ode - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "PHY_Ode - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "PHY_Ode - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "PHY_Ode - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "PHY_Ode - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\..\..\obj\windows\gameengine\physics\ode\"
-# PROP Intermediate_Dir "..\..\..\..\..\obj\windows\gameengine\physics\ode\"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /W3 /GR /GX /O2 /I "..\..\..\..\..\..\lib\windows\ode\include" /I "..\..\..\..\..\source\gameengine\physics\common" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "PHY_Ode - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\..\..\obj\windows\gameengine\physics\ode\debug"
-# PROP Intermediate_Dir "..\..\..\..\..\obj\windows\gameengine\physics\ode\debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GR /GX /ZI /Od /I "..\..\..\..\..\..\lib\windows\ode\include" /I "..\..\..\..\..\source\gameengine\physics\common" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "PHY_Ode - Win32 MT DLL Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "PHY_Ode___Win32_MT_DLL_Release"
-# PROP BASE Intermediate_Dir "PHY_Ode___Win32_MT_DLL_Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\..\..\obj\windows\gameengine\physics\ode\mtdll"
-# PROP Intermediate_Dir "..\..\..\..\..\obj\windows\gameengine\physics\ode\mtdll"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /GX /O2 /I "../../../../../source/ode/include" /I "..\..\..\..\..\..\lib\windows\ode\include" /I "../../../../../source/gameengine/physics/common" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "dSINGLE" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\..\..\..\..\lib\windows\ode\include" /I "..\..\..\..\..\source\gameengine\physics\common" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "PHY_Ode - Win32 MT DLL Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "PHY_Ode___Win32_MT_DLL_Debug"
-# PROP BASE Intermediate_Dir "PHY_Ode___Win32_MT_DLL_Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\..\..\obj\windows\gameengine\physics\ode\mtdll_debug"
-# PROP Intermediate_Dir "..\..\..\..\..\obj\windows\gameengine\physics\ode\mtdll_debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../../../../../lib/windows/ode/include" /I "../../../../../source/gameengine/physics/common" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "dSINGLE" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\..\..\..\..\..\lib\windows\ode\include" /I "..\..\..\..\..\source\gameengine\physics\common" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ENDIF
-
-# Begin Target
-
-# Name "PHY_Ode - Win32 Release"
-# Name "PHY_Ode - Win32 Debug"
-# Name "PHY_Ode - Win32 MT DLL Release"
-# Name "PHY_Ode - Win32 MT DLL Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\..\..\..\source\gameengine\Physics\BlOde\OdePhysicsController.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\source\gameengine\Physics\BlOde\OdePhysicsEnvironment.cpp
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\..\..\..\source\gameengine\Physics\BlOde\OdePhysicsController.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\source\gameengine\Physics\BlOde\OdePhysicsEnvironment.h
-# End Source File
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="PHY_Ode" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=PHY_Ode - Win32 MT DLL Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "PHY_Ode.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "PHY_Ode.mak" CFG="PHY_Ode - Win32 MT DLL Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "PHY_Ode - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "PHY_Ode - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "PHY_Ode - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "PHY_Ode - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "PHY_Ode - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\..\..\obj\windows\gameengine\physics\ode\"
+# PROP Intermediate_Dir "..\..\..\..\..\obj\windows\gameengine\physics\ode\"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /W3 /GR /GX /O2 /I "..\..\..\..\..\..\lib\windows\ode\include" /I "..\..\..\..\..\source\gameengine\physics\common" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "PHY_Ode - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\..\..\obj\windows\gameengine\physics\ode\debug"
+# PROP Intermediate_Dir "..\..\..\..\..\obj\windows\gameengine\physics\ode\debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GR /GX /ZI /Od /I "..\..\..\..\..\..\lib\windows\ode\include" /I "..\..\..\..\..\source\gameengine\physics\common" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "PHY_Ode - Win32 MT DLL Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "PHY_Ode___Win32_MT_DLL_Release"
+# PROP BASE Intermediate_Dir "PHY_Ode___Win32_MT_DLL_Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\..\..\obj\windows\gameengine\physics\ode\mtdll"
+# PROP Intermediate_Dir "..\..\..\..\..\obj\windows\gameengine\physics\ode\mtdll"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /GX /O2 /I "../../../../../source/ode/include" /I "..\..\..\..\..\..\lib\windows\ode\include" /I "../../../../../source/gameengine/physics/common" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "dSINGLE" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\..\..\..\..\lib\windows\ode\include" /I "..\..\..\..\..\source\gameengine\physics\common" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "PHY_Ode - Win32 MT DLL Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "PHY_Ode___Win32_MT_DLL_Debug"
+# PROP BASE Intermediate_Dir "PHY_Ode___Win32_MT_DLL_Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\..\..\obj\windows\gameengine\physics\ode\mtdll_debug"
+# PROP Intermediate_Dir "..\..\..\..\..\obj\windows\gameengine\physics\ode\mtdll_debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../../../../../lib/windows/ode/include" /I "../../../../../source/gameengine/physics/common" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "dSINGLE" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\..\..\..\..\..\lib\windows\ode\include" /I "..\..\..\..\..\source\gameengine\physics\common" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ENDIF
+
+# Begin Target
+
+# Name "PHY_Ode - Win32 Release"
+# Name "PHY_Ode - Win32 Debug"
+# Name "PHY_Ode - Win32 MT DLL Release"
+# Name "PHY_Ode - Win32 MT DLL Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\..\..\source\gameengine\Physics\BlOde\OdePhysicsController.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\source\gameengine\Physics\BlOde\OdePhysicsEnvironment.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\..\..\source\gameengine\Physics\BlOde\OdePhysicsController.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\source\gameengine\Physics\BlOde\OdePhysicsEnvironment.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/projectfiles/gameengine/physics/PHY_Physics/PHY_Physics.dsp b/projectfiles/gameengine/physics/PHY_Physics/PHY_Physics.dsp
index f54875c2c18..bdf4e0f5db5 100644
--- a/projectfiles/gameengine/physics/PHY_Physics/PHY_Physics.dsp
+++ b/projectfiles/gameengine/physics/PHY_Physics/PHY_Physics.dsp
@@ -1,178 +1,178 @@
-# Microsoft Developer Studio Project File - Name="PHY_Physics" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=PHY_Physics - Win32 MT DLL Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "PHY_Physics.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "PHY_Physics.mak" CFG="PHY_Physics - Win32 MT DLL Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "PHY_Physics - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "PHY_Physics - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "PHY_Physics - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "PHY_Physics - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "PHY_Physics - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\..\obj\windows\gameengine\physics"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\physics"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /W3 /GR /GX /O2 /I "common" /I "dummy" /I "../../../../extern/solid/include" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "PHY_Physics - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\..\obj\windows\gameengine\physics\debug"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\physics\debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /W3 /Gm /GR /GX /ZI /Od /I "common" /I "dummy" /I "../../../../extern/solid/include" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "PHY_Physics - Win32 MT DLL Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "PHY_Physics___Win32_MT_DLL_Debug"
-# PROP BASE Intermediate_Dir "PHY_Physics___Win32_MT_DLL_Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\..\obj\windows\gameengine\physics\mtdll_debug"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\physics\mtdll_debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "common" /I "dummy" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "common" /I "dummy" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "PHY_Physics - Win32 MT DLL Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "PHY_Physics___Win32_MT_DLL_Release"
-# PROP BASE Intermediate_Dir "PHY_Physics___Win32_MT_DLL_Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\..\obj\windows\gameengine\physics\mtdll"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\physics\mtdll"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /GX /O2 /I "common" /I "dummy" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "common" /I "dummy" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ENDIF
-
-# Begin Target
-
-# Name "PHY_Physics - Win32 Release"
-# Name "PHY_Physics - Win32 Debug"
-# Name "PHY_Physics - Win32 MT DLL Debug"
-# Name "PHY_Physics - Win32 MT DLL Release"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\Physics\common\PHY_IMotionState.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\Physics\common\PHY_IPhysicsController.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\Physics\common\PHY_IPhysicsEnvironment.cpp
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\Physics\common\PHY_DynamicTypes.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\Physics\common\PHY_IMotionState.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\Physics\common\PHY_IPhysicsController.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\Physics\common\PHY_IPhysicsEnvironment.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\Physics\common\PHY_Pro.h
-# End Source File
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="PHY_Physics" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=PHY_Physics - Win32 MT DLL Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "PHY_Physics.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "PHY_Physics.mak" CFG="PHY_Physics - Win32 MT DLL Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "PHY_Physics - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "PHY_Physics - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "PHY_Physics - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "PHY_Physics - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "PHY_Physics - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\..\obj\windows\gameengine\physics"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\physics"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /W3 /GR /GX /O2 /I "common" /I "dummy" /I "../../../../extern/solid/include" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "PHY_Physics - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\..\obj\windows\gameengine\physics\debug"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\physics\debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GR /GX /ZI /Od /I "common" /I "dummy" /I "../../../../extern/solid/include" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "PHY_Physics - Win32 MT DLL Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "PHY_Physics___Win32_MT_DLL_Debug"
+# PROP BASE Intermediate_Dir "PHY_Physics___Win32_MT_DLL_Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\..\obj\windows\gameengine\physics\mtdll_debug"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\physics\mtdll_debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "common" /I "dummy" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "common" /I "dummy" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "PHY_Physics - Win32 MT DLL Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "PHY_Physics___Win32_MT_DLL_Release"
+# PROP BASE Intermediate_Dir "PHY_Physics___Win32_MT_DLL_Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\..\obj\windows\gameengine\physics\mtdll"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\physics\mtdll"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /GX /O2 /I "common" /I "dummy" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "common" /I "dummy" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ENDIF
+
+# Begin Target
+
+# Name "PHY_Physics - Win32 Release"
+# Name "PHY_Physics - Win32 Debug"
+# Name "PHY_Physics - Win32 MT DLL Debug"
+# Name "PHY_Physics - Win32 MT DLL Release"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\Physics\common\PHY_IMotionState.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\Physics\common\PHY_IPhysicsController.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\Physics\common\PHY_IPhysicsEnvironment.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\Physics\common\PHY_DynamicTypes.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\Physics\common\PHY_IMotionState.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\Physics\common\PHY_IPhysicsController.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\Physics\common\PHY_IPhysicsEnvironment.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\Physics\common\PHY_Pro.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/projectfiles/gameengine/physics/PHY_Physics/PHY_Sumo/PHY_Sumo.dsp b/projectfiles/gameengine/physics/PHY_Physics/PHY_Sumo/PHY_Sumo.dsp
index 8f148363add..1a9f6e98201 100644
--- a/projectfiles/gameengine/physics/PHY_Physics/PHY_Sumo/PHY_Sumo.dsp
+++ b/projectfiles/gameengine/physics/PHY_Physics/PHY_Sumo/PHY_Sumo.dsp
@@ -1,162 +1,162 @@
-# Microsoft Developer Studio Project File - Name="PHY_Sumo" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=PHY_Sumo - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "PHY_Sumo.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "PHY_Sumo.mak" CFG="PHY_Sumo - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "PHY_Sumo - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "PHY_Sumo - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "PHY_Sumo - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GR /GX /O2 /I "../../../../../extern/solid" /I "../../../../../source/gameengine/physics" /I "../../../../../source/gameengine/physics/common" /I "../../../../../source/gameengine/physics/sumo" /I "../../../../../source/gameengine/physics/sumo/include" /I "../../../../../source/gameengine/physics/sumo/fuzzics/include" /I "../../../../../../lib/windows/Moto/include" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\gameengine\physics\sumo\PHY_Sumo.lib"
-
-!ELSEIF "$(CFG)" == "PHY_Sumo - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /W3 /Gm /GR /GX /ZI /Od /I "../../../../../extern/solid" /I "../../../../../source/gameengine/physics" /I "../../../../../source/gameengine/physics/common" /I "../../../../../source/gameengine/physics/sumo" /I "../../../../../source/gameengine/physics/sumo/include" /I "../../../../../source/gameengine/physics/sumo/fuzzics/include" /I "../../../../../../lib/windows/Moto/include" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\gameengine\physics\sumo\debug\PHY_Sumo.lib"
-
-!ENDIF
-
-# Begin Target
-
-# Name "PHY_Sumo - Win32 Release"
-# Name "PHY_Sumo - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\..\..\..\source\gameengine\Physics\Sumo\Fuzzics\src\SM_FhObject.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\source\gameengine\Physics\Sumo\Fuzzics\src\SM_MotionState.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\source\gameengine\Physics\Sumo\Fuzzics\src\SM_Object.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\source\gameengine\Physics\Sumo\Fuzzics\src\SM_Scene.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\source\gameengine\Physics\Sumo\SumoPHYCallbackBridge.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\source\gameengine\Physics\Sumo\SumoPhysicsController.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\source\gameengine\Physics\Sumo\SumoPhysicsEnvironment.cpp
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\..\..\..\source\gameengine\Physics\Sumo\Fuzzics\include\SM_Callback.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\source\gameengine\Physics\Sumo\Fuzzics\include\SM_ClientObjectInfo.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\source\gameengine\Physics\Sumo\Fuzzics\include\SM_FhObject.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\source\gameengine\Physics\Sumo\Fuzzics\include\SM_MotionState.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\source\gameengine\Physics\Sumo\Fuzzics\include\SM_Object.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\source\gameengine\Physics\Sumo\Fuzzics\include\SM_Props.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\source\gameengine\Physics\Sumo\Fuzzics\include\SM_Scene.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\source\gameengine\Physics\Sumo\SumoPHYCallbackBridge.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\source\gameengine\Physics\Sumo\SumoPhysicsController.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\..\source\gameengine\Physics\Sumo\SumoPhysicsEnvironment.h
-# End Source File
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="PHY_Sumo" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=PHY_Sumo - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "PHY_Sumo.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "PHY_Sumo.mak" CFG="PHY_Sumo - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "PHY_Sumo - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "PHY_Sumo - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "PHY_Sumo - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GR /GX /O2 /I "../../../../../extern/solid" /I "../../../../../source/gameengine/physics" /I "../../../../../source/gameengine/physics/common" /I "../../../../../source/gameengine/physics/sumo" /I "../../../../../source/gameengine/physics/sumo/include" /I "../../../../../source/gameengine/physics/sumo/fuzzics/include" /I "../../../../../../lib/windows/Moto/include" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\gameengine\physics\sumo\PHY_Sumo.lib"
+
+!ELSEIF "$(CFG)" == "PHY_Sumo - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GR /GX /ZI /Od /I "../../../../../extern/solid" /I "../../../../../source/gameengine/physics" /I "../../../../../source/gameengine/physics/common" /I "../../../../../source/gameengine/physics/sumo" /I "../../../../../source/gameengine/physics/sumo/include" /I "../../../../../source/gameengine/physics/sumo/fuzzics/include" /I "../../../../../../lib/windows/Moto/include" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\gameengine\physics\sumo\debug\PHY_Sumo.lib"
+
+!ENDIF
+
+# Begin Target
+
+# Name "PHY_Sumo - Win32 Release"
+# Name "PHY_Sumo - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\..\..\source\gameengine\Physics\Sumo\Fuzzics\src\SM_FhObject.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\source\gameengine\Physics\Sumo\Fuzzics\src\SM_MotionState.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\source\gameengine\Physics\Sumo\Fuzzics\src\SM_Object.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\source\gameengine\Physics\Sumo\Fuzzics\src\SM_Scene.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\source\gameengine\Physics\Sumo\SumoPHYCallbackBridge.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\source\gameengine\Physics\Sumo\SumoPhysicsController.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\source\gameengine\Physics\Sumo\SumoPhysicsEnvironment.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\..\..\source\gameengine\Physics\Sumo\Fuzzics\include\SM_Callback.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\source\gameengine\Physics\Sumo\Fuzzics\include\SM_ClientObjectInfo.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\source\gameengine\Physics\Sumo\Fuzzics\include\SM_FhObject.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\source\gameengine\Physics\Sumo\Fuzzics\include\SM_MotionState.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\source\gameengine\Physics\Sumo\Fuzzics\include\SM_Object.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\source\gameengine\Physics\Sumo\Fuzzics\include\SM_Props.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\source\gameengine\Physics\Sumo\Fuzzics\include\SM_Scene.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\source\gameengine\Physics\Sumo\SumoPHYCallbackBridge.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\source\gameengine\Physics\Sumo\SumoPhysicsController.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\source\gameengine\Physics\Sumo\SumoPhysicsEnvironment.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/projectfiles/gameengine/rasterizer/RAS_rasterizer.dsp b/projectfiles/gameengine/rasterizer/RAS_rasterizer.dsp
index c764823632e..bb960e95969 100644
--- a/projectfiles/gameengine/rasterizer/RAS_rasterizer.dsp
+++ b/projectfiles/gameengine/rasterizer/RAS_rasterizer.dsp
@@ -1,243 +1,243 @@
-# Microsoft Developer Studio Project File - Name="RAS_rasterizer" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=RAS_rasterizer - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "RAS_rasterizer.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "RAS_rasterizer.mak" CFG="RAS_rasterizer - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "RAS_rasterizer - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "RAS_rasterizer - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "RAS_rasterizer - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "RAS_rasterizer - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "RAS_rasterizer - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\obj\windows\gameengine\rasterizer"
-# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\rasterizer"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GR /GX /O2 /I "..\..\..\..\lib\windows\moto\include\\" /I "..\..\..\..\lib\windows\string\include" /I "..\..\..\source\kernel\gen_system" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "RAS_rasterizer - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\obj\windows\gameengine\rasterizer\debug"
-# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\rasterizer\debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GR /GX /Zi /Od /I "..\..\..\..\lib\windows\moto\include\\" /I "..\..\..\..\lib\windows\string\include" /I "..\..\..\source\kernel\gen_system" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
-# SUBTRACT CPP /Fr
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "RAS_rasterizer - Win32 MT DLL Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "RAS_rasterizer___Win32_MT_DLL_Debug"
-# PROP BASE Intermediate_Dir "RAS_rasterizer___Win32_MT_DLL_Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\obj\windows\gameengine\rasterizer\mtdll_debug"
-# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\rasterizer\mtdll_debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /Gm /GX /ZI /Od /I "../../../../../lib/windows/moto/include" /I "..\..\..\source\kernel\gen_system" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "../../../../lib/windows/moto/include" /I "..\..\..\..\lib\windows\string\include" /I "..\..\..\source\kernel\gen_system" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\gameengine\rasterizer\debug\RAS_rasterizer.lib"
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "RAS_rasterizer - Win32 MT DLL Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "RAS_rasterizer___Win32_MT_DLL_Release"
-# PROP BASE Intermediate_Dir "RAS_rasterizer___Win32_MT_DLL_Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\obj\windows\gameengine\rasterizer\mtdll"
-# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\rasterizer\mtdll"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /GX /O2 /I "../../../../../lib/windows/moto/include" /I "..\..\..\source\kernel\gen_system" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD CPP /nologo /MD /GX /O2 /I "../../../../lib/windows/moto/include" /I "..\..\..\..\lib\windows\string\include" /I "..\..\..\source\kernel\gen_system" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\gameengine\rasterizer\RAS_rasterizer.lib"
-# ADD LIB32 /nologo
-
-!ENDIF
-
-# Begin Target
-
-# Name "RAS_rasterizer - Win32 Release"
-# Name "RAS_rasterizer - Win32 Debug"
-# Name "RAS_rasterizer - Win32 MT DLL Debug"
-# Name "RAS_rasterizer - Win32 MT DLL Release"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Rasterizer\RAS_BucketManager.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Rasterizer\RAS_FramingManager.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Rasterizer\RAS_IPolygonMaterial.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Rasterizer\RAS_IRenderTools.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Rasterizer\RAS_MaterialBucket.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Rasterizer\RAS_MeshObject.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Rasterizer\RAS_Polygon.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Rasterizer\RAS_texmatrix.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Rasterizer\RAS_TexVert.cpp
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Rasterizer\RAS_BucketManager.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Rasterizer\RAS_CameraData.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Rasterizer\RAS_Deformer.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Rasterizer\RAS_FramingManager.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Rasterizer\RAS_ICanvas.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Rasterizer\RAS_IPolygonMaterial.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Rasterizer\RAS_IRasterizer.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Rasterizer\RAS_IRenderTools.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Rasterizer\RAS_LightObject.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Rasterizer\RAS_MaterialBucket.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Rasterizer\RAS_MeshObject.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Rasterizer\RAS_ObjectColor.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Rasterizer\RAS_Polygon.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Rasterizer\RAS_TexMatrix.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Rasterizer\RAS_TexVert.h
-# End Source File
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="RAS_rasterizer" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=RAS_rasterizer - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "RAS_rasterizer.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "RAS_rasterizer.mak" CFG="RAS_rasterizer - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "RAS_rasterizer - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "RAS_rasterizer - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "RAS_rasterizer - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "RAS_rasterizer - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "RAS_rasterizer - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\obj\windows\gameengine\rasterizer"
+# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\rasterizer"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GR /GX /O2 /I "..\..\..\..\lib\windows\moto\include\\" /I "..\..\..\..\lib\windows\string\include" /I "..\..\..\source\kernel\gen_system" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "RAS_rasterizer - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\obj\windows\gameengine\rasterizer\debug"
+# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\rasterizer\debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GR /GX /Zi /Od /I "..\..\..\..\lib\windows\moto\include\\" /I "..\..\..\..\lib\windows\string\include" /I "..\..\..\source\kernel\gen_system" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
+# SUBTRACT CPP /Fr
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "RAS_rasterizer - Win32 MT DLL Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "RAS_rasterizer___Win32_MT_DLL_Debug"
+# PROP BASE Intermediate_Dir "RAS_rasterizer___Win32_MT_DLL_Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\obj\windows\gameengine\rasterizer\mtdll_debug"
+# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\rasterizer\mtdll_debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /Gm /GX /ZI /Od /I "../../../../../lib/windows/moto/include" /I "..\..\..\source\kernel\gen_system" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
+# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "../../../../lib/windows/moto/include" /I "..\..\..\..\lib\windows\string\include" /I "..\..\..\source\kernel\gen_system" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\gameengine\rasterizer\debug\RAS_rasterizer.lib"
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "RAS_rasterizer - Win32 MT DLL Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "RAS_rasterizer___Win32_MT_DLL_Release"
+# PROP BASE Intermediate_Dir "RAS_rasterizer___Win32_MT_DLL_Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\obj\windows\gameengine\rasterizer\mtdll"
+# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\rasterizer\mtdll"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /GX /O2 /I "../../../../../lib/windows/moto/include" /I "..\..\..\source\kernel\gen_system" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD CPP /nologo /MD /GX /O2 /I "../../../../lib/windows/moto/include" /I "..\..\..\..\lib\windows\string\include" /I "..\..\..\source\kernel\gen_system" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\gameengine\rasterizer\RAS_rasterizer.lib"
+# ADD LIB32 /nologo
+
+!ENDIF
+
+# Begin Target
+
+# Name "RAS_rasterizer - Win32 Release"
+# Name "RAS_rasterizer - Win32 Debug"
+# Name "RAS_rasterizer - Win32 MT DLL Debug"
+# Name "RAS_rasterizer - Win32 MT DLL Release"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Rasterizer\RAS_BucketManager.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Rasterizer\RAS_FramingManager.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Rasterizer\RAS_IPolygonMaterial.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Rasterizer\RAS_IRenderTools.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Rasterizer\RAS_MaterialBucket.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Rasterizer\RAS_MeshObject.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Rasterizer\RAS_Polygon.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Rasterizer\RAS_texmatrix.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Rasterizer\RAS_TexVert.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Rasterizer\RAS_BucketManager.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Rasterizer\RAS_CameraData.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Rasterizer\RAS_Deformer.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Rasterizer\RAS_FramingManager.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Rasterizer\RAS_ICanvas.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Rasterizer\RAS_IPolygonMaterial.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Rasterizer\RAS_IRasterizer.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Rasterizer\RAS_IRenderTools.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Rasterizer\RAS_LightObject.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Rasterizer\RAS_MaterialBucket.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Rasterizer\RAS_MeshObject.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Rasterizer\RAS_ObjectColor.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Rasterizer\RAS_Polygon.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Rasterizer\RAS_TexMatrix.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Rasterizer\RAS_TexVert.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/projectfiles/gameengine/rasterizer/openglrasterizer/RAS_openglrasterizer.dsp b/projectfiles/gameengine/rasterizer/openglrasterizer/RAS_openglrasterizer.dsp
index 1f1b95291ed..8b4cce618d1 100644
--- a/projectfiles/gameengine/rasterizer/openglrasterizer/RAS_openglrasterizer.dsp
+++ b/projectfiles/gameengine/rasterizer/openglrasterizer/RAS_openglrasterizer.dsp
@@ -1,183 +1,183 @@
-# Microsoft Developer Studio Project File - Name="RAS_openglrasterizer" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=RAS_openglrasterizer - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "RAS_openglrasterizer.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "RAS_openglrasterizer.mak" CFG="RAS_openglrasterizer - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "RAS_openglrasterizer - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "RAS_openglrasterizer - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "RAS_openglrasterizer - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "RAS_openglrasterizer - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "RAS_openglrasterizer - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\..\obj\windows\gameengine\rasterizer\openglrasterizer"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\rasterizer\openglrasterizer"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-MTL=midl.exe
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GR /GX /O2 /I "..\..\..\..\..\lib\windows\string\include" /I "..\..\..\..\source\kernel\gen_system" /I "../../../../../lib/windows/moto/include" /I "..\..\..\..\source\gameengine\Rasterizer" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "RAS_openglrasterizer - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\..\obj\windows\gameengine\rasterizer\openglrasterizer\debug"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\rasterizer\openglrasterizer\debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-MTL=midl.exe
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GR /GX /Zi /Od /I "..\..\..\..\..\lib\windows\string\include" /I "..\..\..\..\source\kernel\gen_system" /I "../../../../../lib/windows/moto/include" /I "..\..\..\..\source\gameengine\Rasterizer" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
-# SUBTRACT CPP /Fr
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "RAS_openglrasterizer - Win32 MT DLL Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "RAS_openglrasterizer___Win32_MT_DLL_Debug"
-# PROP BASE Intermediate_Dir "RAS_openglrasterizer___Win32_MT_DLL_Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\..\obj\windows\gameengine\rasterizer\openglrasterizer\mtdll_debug"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\rasterizer\openglrasterizer\mtdll_debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-MTL=midl.exe
-# ADD BASE CPP /nologo /Gm /GX /ZI /Od /I "..\..\..\..\source\kernel\gen_system" /I "../../../../../lib/windows/moto/include" /I "..\..\..\..\source\gameengine\Rasterizer" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "..\..\..\..\..\lib\windows\string\include" /I "..\..\..\..\source\kernel\gen_system" /I "../../../../../lib/windows/moto/include" /I "..\..\..\..\source\gameengine\Rasterizer" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\..\obj\windows\gameengine\rasterizer\openglrasterizer\debug\RAS_openglrasterizer.lib"
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "RAS_openglrasterizer - Win32 MT DLL Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "RAS_openglrasterizer___Win32_MT_DLL_Release"
-# PROP BASE Intermediate_Dir "RAS_openglrasterizer___Win32_MT_DLL_Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\..\obj\windows\gameengine\rasterizer\openglrasterizer\mtdll"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\rasterizer\openglrasterizer\mtdll"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-MTL=midl.exe
-# ADD BASE CPP /nologo /GX /O2 /I "..\..\..\..\source\kernel\gen_system" /I ".../../../../../lib/windows/moto/include" /I "..\..\..\..\source\gameengine\Rasterizer" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD CPP /nologo /MD /GX /O2 /I "..\..\..\..\..\lib\windows\string\include" /I "..\..\..\..\source\kernel\gen_system" /I "../../../../../lib/windows/moto/include" /I "..\..\..\..\source\gameengine\Rasterizer" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\..\obj\windows\gameengine\rasterizer\openglrasterizer\RAS_openglrasterizer.lib"
-# ADD LIB32 /nologo
-
-!ENDIF
-
-# Begin Target
-
-# Name "RAS_openglrasterizer - Win32 Release"
-# Name "RAS_openglrasterizer - Win32 Debug"
-# Name "RAS_openglrasterizer - Win32 MT DLL Debug"
-# Name "RAS_openglrasterizer - Win32 MT DLL Release"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\Rasterizer\RAS_OpenGLRasterizer\RAS_GLExtensionManager.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\Rasterizer\RAS_OpenGLRasterizer\RAS_ListRasterizer.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\Rasterizer\RAS_OpenGLRasterizer\RAS_OpenGLRasterizer.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\Rasterizer\RAS_OpenGLRasterizer\RAS_VAOpenGLRasterizer.cpp
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\Rasterizer\RAS_OpenGLRasterizer\RAS_GLExtensionManager.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\Rasterizer\RAS_OpenGLRasterizer\RAS_ListRasterizer.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\Rasterizer\RAS_OpenGLRasterizer\RAS_OpenGLRasterizer.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\..\source\gameengine\Rasterizer\RAS_OpenGLRasterizer\RAS_VAOpenGLRasterizer.h
-# End Source File
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="RAS_openglrasterizer" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=RAS_openglrasterizer - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "RAS_openglrasterizer.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "RAS_openglrasterizer.mak" CFG="RAS_openglrasterizer - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "RAS_openglrasterizer - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "RAS_openglrasterizer - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "RAS_openglrasterizer - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "RAS_openglrasterizer - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "RAS_openglrasterizer - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\..\obj\windows\gameengine\rasterizer\openglrasterizer"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\rasterizer\openglrasterizer"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+MTL=midl.exe
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GR /GX /O2 /I "..\..\..\..\..\lib\windows\string\include" /I "..\..\..\..\source\kernel\gen_system" /I "../../../../../lib/windows/moto/include" /I "..\..\..\..\source\gameengine\Rasterizer" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "RAS_openglrasterizer - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\..\obj\windows\gameengine\rasterizer\openglrasterizer\debug"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\rasterizer\openglrasterizer\debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+MTL=midl.exe
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GR /GX /Zi /Od /I "..\..\..\..\..\lib\windows\string\include" /I "..\..\..\..\source\kernel\gen_system" /I "../../../../../lib/windows/moto/include" /I "..\..\..\..\source\gameengine\Rasterizer" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
+# SUBTRACT CPP /Fr
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "RAS_openglrasterizer - Win32 MT DLL Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "RAS_openglrasterizer___Win32_MT_DLL_Debug"
+# PROP BASE Intermediate_Dir "RAS_openglrasterizer___Win32_MT_DLL_Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\..\obj\windows\gameengine\rasterizer\openglrasterizer\mtdll_debug"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\rasterizer\openglrasterizer\mtdll_debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+MTL=midl.exe
+# ADD BASE CPP /nologo /Gm /GX /ZI /Od /I "..\..\..\..\source\kernel\gen_system" /I "../../../../../lib/windows/moto/include" /I "..\..\..\..\source\gameengine\Rasterizer" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
+# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "..\..\..\..\..\lib\windows\string\include" /I "..\..\..\..\source\kernel\gen_system" /I "../../../../../lib/windows/moto/include" /I "..\..\..\..\source\gameengine\Rasterizer" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\..\obj\windows\gameengine\rasterizer\openglrasterizer\debug\RAS_openglrasterizer.lib"
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "RAS_openglrasterizer - Win32 MT DLL Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "RAS_openglrasterizer___Win32_MT_DLL_Release"
+# PROP BASE Intermediate_Dir "RAS_openglrasterizer___Win32_MT_DLL_Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\..\obj\windows\gameengine\rasterizer\openglrasterizer\mtdll"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\gameengine\rasterizer\openglrasterizer\mtdll"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+MTL=midl.exe
+# ADD BASE CPP /nologo /GX /O2 /I "..\..\..\..\source\kernel\gen_system" /I ".../../../../../lib/windows/moto/include" /I "..\..\..\..\source\gameengine\Rasterizer" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD CPP /nologo /MD /GX /O2 /I "..\..\..\..\..\lib\windows\string\include" /I "..\..\..\..\source\kernel\gen_system" /I "../../../../../lib/windows/moto/include" /I "..\..\..\..\source\gameengine\Rasterizer" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\..\obj\windows\gameengine\rasterizer\openglrasterizer\RAS_openglrasterizer.lib"
+# ADD LIB32 /nologo
+
+!ENDIF
+
+# Begin Target
+
+# Name "RAS_openglrasterizer - Win32 Release"
+# Name "RAS_openglrasterizer - Win32 Debug"
+# Name "RAS_openglrasterizer - Win32 MT DLL Debug"
+# Name "RAS_openglrasterizer - Win32 MT DLL Release"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\Rasterizer\RAS_OpenGLRasterizer\RAS_GLExtensionManager.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\Rasterizer\RAS_OpenGLRasterizer\RAS_ListRasterizer.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\Rasterizer\RAS_OpenGLRasterizer\RAS_OpenGLRasterizer.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\Rasterizer\RAS_OpenGLRasterizer\RAS_VAOpenGLRasterizer.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\Rasterizer\RAS_OpenGLRasterizer\RAS_GLExtensionManager.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\Rasterizer\RAS_OpenGLRasterizer\RAS_ListRasterizer.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\Rasterizer\RAS_OpenGLRasterizer\RAS_OpenGLRasterizer.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\source\gameengine\Rasterizer\RAS_OpenGLRasterizer\RAS_VAOpenGLRasterizer.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/projectfiles/gameengine/scenegraph/SG_scenegraph.dsp b/projectfiles/gameengine/scenegraph/SG_scenegraph.dsp
index 5a2b4c8cba3..72777059b50 100644
--- a/projectfiles/gameengine/scenegraph/SG_scenegraph.dsp
+++ b/projectfiles/gameengine/scenegraph/SG_scenegraph.dsp
@@ -1,199 +1,199 @@
-# Microsoft Developer Studio Project File - Name="SG_SceneGraph" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=SG_SceneGraph - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "SG_SceneGraph.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "SG_SceneGraph.mak" CFG="SG_SceneGraph - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "SG_SceneGraph - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "SG_SceneGraph - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "SG_SceneGraph - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "SG_SceneGraph - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "SG_SceneGraph - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\obj\windows\gameengine\scenegraph"
-# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\scenegraph"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GR /GX /O2 /I "../../../../lib/windows/moto/include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "SG_SceneGraph - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\obj\windows\gameengine\scenegraph\debug"
-# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\scenegraph\debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GR /GX /Zi /Od /I "../../../../lib/windows/moto/include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
-# SUBTRACT CPP /Fr
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "SG_SceneGraph - Win32 MT DLL Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "SG_SceneGraph___Win32_MT_DLL_Debug"
-# PROP BASE Intermediate_Dir "SG_SceneGraph___Win32_MT_DLL_Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\obj\windows\gameengine\scenegraph\mtdll_debug"
-# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\scenegraph\mtdll_debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /Gm /GX /ZI /Od /I "../../../../../lib/windows/moto/include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "../../../../lib/windows/moto/include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\gameengine\scenegraph\debug\SG_SceneGraph.lib"
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "SG_SceneGraph - Win32 MT DLL Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "SG_SceneGraph___Win32_MT_DLL_Release"
-# PROP BASE Intermediate_Dir "SG_SceneGraph___Win32_MT_DLL_Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\obj\windows\gameengine\scenegraph\mtdll"
-# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\scenegraph\mtdll"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /GX /O2 /I "../../../../../lib/windows/moto/include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD CPP /nologo /MD /GX /O2 /I "../../../../lib/windows/moto/include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\gameengine\scenegraph\SG_SceneGraph.lib"
-# ADD LIB32 /nologo
-
-!ENDIF
-
-# Begin Target
-
-# Name "SG_SceneGraph - Win32 Release"
-# Name "SG_SceneGraph - Win32 Debug"
-# Name "SG_SceneGraph - Win32 MT DLL Debug"
-# Name "SG_SceneGraph - Win32 MT DLL Release"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\SceneGraph\SG_BBox.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\SceneGraph\SG_Controller.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\SceneGraph\SG_IObject.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\SceneGraph\SG_Node.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\SceneGraph\SG_Spatial.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\SceneGraph\SG_Tree.cpp
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\SceneGraph\SG_BBox.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\SceneGraph\SG_Controller.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\SceneGraph\SG_IObject.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\SceneGraph\SG_Node.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\SceneGraph\SG_ParentRelation.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\SceneGraph\SG_Spatial.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\SceneGraph\SG_Tree.h
-# End Source File
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="SG_SceneGraph" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=SG_SceneGraph - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "SG_SceneGraph.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "SG_SceneGraph.mak" CFG="SG_SceneGraph - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "SG_SceneGraph - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "SG_SceneGraph - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "SG_SceneGraph - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "SG_SceneGraph - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "SG_SceneGraph - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\obj\windows\gameengine\scenegraph"
+# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\scenegraph"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GR /GX /O2 /I "../../../../lib/windows/moto/include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "SG_SceneGraph - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\obj\windows\gameengine\scenegraph\debug"
+# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\scenegraph\debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GR /GX /Zi /Od /I "../../../../lib/windows/moto/include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
+# SUBTRACT CPP /Fr
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "SG_SceneGraph - Win32 MT DLL Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "SG_SceneGraph___Win32_MT_DLL_Debug"
+# PROP BASE Intermediate_Dir "SG_SceneGraph___Win32_MT_DLL_Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\obj\windows\gameengine\scenegraph\mtdll_debug"
+# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\scenegraph\mtdll_debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /Gm /GX /ZI /Od /I "../../../../../lib/windows/moto/include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
+# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "../../../../lib/windows/moto/include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\gameengine\scenegraph\debug\SG_SceneGraph.lib"
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "SG_SceneGraph - Win32 MT DLL Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "SG_SceneGraph___Win32_MT_DLL_Release"
+# PROP BASE Intermediate_Dir "SG_SceneGraph___Win32_MT_DLL_Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\obj\windows\gameengine\scenegraph\mtdll"
+# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\scenegraph\mtdll"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /GX /O2 /I "../../../../../lib/windows/moto/include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD CPP /nologo /MD /GX /O2 /I "../../../../lib/windows/moto/include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\gameengine\scenegraph\SG_SceneGraph.lib"
+# ADD LIB32 /nologo
+
+!ENDIF
+
+# Begin Target
+
+# Name "SG_SceneGraph - Win32 Release"
+# Name "SG_SceneGraph - Win32 Debug"
+# Name "SG_SceneGraph - Win32 MT DLL Debug"
+# Name "SG_SceneGraph - Win32 MT DLL Release"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\SceneGraph\SG_BBox.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\SceneGraph\SG_Controller.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\SceneGraph\SG_IObject.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\SceneGraph\SG_Node.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\SceneGraph\SG_Spatial.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\SceneGraph\SG_Tree.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\SceneGraph\SG_BBox.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\SceneGraph\SG_Controller.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\SceneGraph\SG_IObject.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\SceneGraph\SG_Node.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\SceneGraph\SG_ParentRelation.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\SceneGraph\SG_Spatial.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\SceneGraph\SG_Tree.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/projectfiles/kernel/gen_messaging/gen_messaging.dsp b/projectfiles/kernel/gen_messaging/gen_messaging.dsp
index 578f8971122..8aebbedecde 100644
--- a/projectfiles/kernel/gen_messaging/gen_messaging.dsp
+++ b/projectfiles/kernel/gen_messaging/gen_messaging.dsp
@@ -1,155 +1,155 @@
-# Microsoft Developer Studio Project File - Name="gen_messaging" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=gen_messaging - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "gen_messaging.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "gen_messaging.mak" CFG="gen_messaging - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "gen_messaging - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "gen_messaging - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "gen_messaging - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "gen_messaging - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "gen_messaging - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\obj\windows\kernel\gen_messaging"
-# PROP Intermediate_Dir "..\..\..\obj\windows\kernel\gen_messaging"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\source\kernel\gen_messaging" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "gen_messaging - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\obj\windows\kernel\gen_messaging\debug"
-# PROP Intermediate_Dir "..\..\..\obj\windows\kernel\gen_messaging\debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\source\kernel\gen_messaging" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# SUBTRACT CPP /Fr
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "gen_messaging - Win32 MT DLL Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "gen_messaging___Win32_MT_DLL_Release"
-# PROP BASE Intermediate_Dir "gen_messaging___Win32_MT_DLL_Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\obj\windows\kernel\gen_messaging\mtdll"
-# PROP Intermediate_Dir "..\..\..\obj\windows\kernel\gen_messaging\mtdll"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /GX /O2 /I "..\..\..\source\kernel\gen_messaging" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\..\source\kernel\gen_messaging" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "gen_messaging - Win32 MT DLL Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "gen_messaging___Win32_MT_DLL_Debug"
-# PROP BASE Intermediate_Dir "gen_messaging___Win32_MT_DLL_Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\obj\windows\kernel\gen_messaging\mtdll_debug"
-# PROP Intermediate_Dir "..\..\..\obj\windows\kernel\gen_messaging\mtdll_debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\..\source\kernel\gen_messaging" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\..\..\source\kernel\gen_messaging" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ENDIF
-
-# Begin Target
-
-# Name "gen_messaging - Win32 Release"
-# Name "gen_messaging - Win32 Debug"
-# Name "gen_messaging - Win32 MT DLL Release"
-# Name "gen_messaging - Win32 MT DLL Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\..\source\kernel\gen_messaging\intern\messaging.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\..\source\kernel\gen_messaging\GEN_messaging.h
-# End Source File
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="gen_messaging" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=gen_messaging - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "gen_messaging.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "gen_messaging.mak" CFG="gen_messaging - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "gen_messaging - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "gen_messaging - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "gen_messaging - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "gen_messaging - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "gen_messaging - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\obj\windows\kernel\gen_messaging"
+# PROP Intermediate_Dir "..\..\..\obj\windows\kernel\gen_messaging"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\source\kernel\gen_messaging" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "gen_messaging - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\obj\windows\kernel\gen_messaging\debug"
+# PROP Intermediate_Dir "..\..\..\obj\windows\kernel\gen_messaging\debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\source\kernel\gen_messaging" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# SUBTRACT CPP /Fr
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "gen_messaging - Win32 MT DLL Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "gen_messaging___Win32_MT_DLL_Release"
+# PROP BASE Intermediate_Dir "gen_messaging___Win32_MT_DLL_Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\obj\windows\kernel\gen_messaging\mtdll"
+# PROP Intermediate_Dir "..\..\..\obj\windows\kernel\gen_messaging\mtdll"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /GX /O2 /I "..\..\..\source\kernel\gen_messaging" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\..\source\kernel\gen_messaging" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "gen_messaging - Win32 MT DLL Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "gen_messaging___Win32_MT_DLL_Debug"
+# PROP BASE Intermediate_Dir "gen_messaging___Win32_MT_DLL_Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\obj\windows\kernel\gen_messaging\mtdll_debug"
+# PROP Intermediate_Dir "..\..\..\obj\windows\kernel\gen_messaging\mtdll_debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\..\source\kernel\gen_messaging" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\..\..\source\kernel\gen_messaging" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ENDIF
+
+# Begin Target
+
+# Name "gen_messaging - Win32 Release"
+# Name "gen_messaging - Win32 Debug"
+# Name "gen_messaging - Win32 MT DLL Release"
+# Name "gen_messaging - Win32 MT DLL Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\source\kernel\gen_messaging\intern\messaging.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\source\kernel\gen_messaging\GEN_messaging.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/projectfiles/kernel/system/SYS_system.dsp b/projectfiles/kernel/system/SYS_system.dsp
index b424839e4ba..c5b66202f9c 100644
--- a/projectfiles/kernel/system/SYS_system.dsp
+++ b/projectfiles/kernel/system/SYS_system.dsp
@@ -1,183 +1,183 @@
-# Microsoft Developer Studio Project File - Name="SYS_system" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=SYS_system - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "SYS_system.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "SYS_system.mak" CFG="SYS_system - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "SYS_system - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "SYS_system - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "SYS_system - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "SYS_system - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "SYS_system - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\obj\windows\gameengine\kernel\gen_system"
-# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\kernel\gen_system"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\..\lib\windows\string\include" /I "../../../../../lib/windows/moto/include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "SYS_system - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\obj\windows\gameengine\kernel\gen_system\debug"
-# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\kernel\gen_system\debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\..\lib\windows\string\include" /I "../../../../../lib/windows/moto/include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
-# SUBTRACT CPP /Fr
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "SYS_system - Win32 MT DLL Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "SYS_system___Win32_MT_DLL_Debug"
-# PROP BASE Intermediate_Dir "SYS_system___Win32_MT_DLL_Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\obj\windows\gameengine\kernel\gen_system\mtdll_debug"
-# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\kernel\gen_system\mtdll_debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /MDd /Gm /GX /ZI /Od /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "..\..\..\..\lib\windows\string\include" /I "../../../../../lib/windows/moto/include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\gameengine\kernel\gen_system\debug\SYS_system.lib"
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "SYS_system - Win32 MT DLL Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "SYS_system___Win32_MT_DLL_Release"
-# PROP BASE Intermediate_Dir "SYS_system___Win32_MT_DLL_Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\obj\windows\gameengine\kernel\gen_system\mtdll"
-# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\kernel\gen_system\mtdll"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /GX /O2 /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD CPP /nologo /MD /GX /O2 /I "..\..\..\..\lib\windows\string\include" /I "../../../../../lib/windows/moto/include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\gameengine\kernel\gen_system\SYS_system.lib"
-# ADD LIB32 /nologo
-
-!ENDIF
-
-# Begin Target
-
-# Name "SYS_system - Win32 Release"
-# Name "SYS_system - Win32 Debug"
-# Name "SYS_system - Win32 MT DLL Debug"
-# Name "SYS_system - Win32 MT DLL Release"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\..\source\kernel\gen_system\GEN_HashedPtr.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\kernel\gen_system\SYS_SingletonSystem.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\kernel\gen_system\SYS_System.cpp
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\..\source\kernel\gen_system\GEN_DataCache.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\kernel\gen_system\GEN_HashedPtr.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\kernel\gen_system\GEN_Map.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\kernel\gen_system\GEN_SmartPtr.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\kernel\gen_system\SYS_SingletonSystem.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\kernel\gen_system\SYS_System.h
-# End Source File
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="SYS_system" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=SYS_system - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "SYS_system.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "SYS_system.mak" CFG="SYS_system - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "SYS_system - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "SYS_system - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "SYS_system - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "SYS_system - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "SYS_system - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\obj\windows\gameengine\kernel\gen_system"
+# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\kernel\gen_system"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\..\lib\windows\string\include" /I "../../../../../lib/windows/moto/include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "SYS_system - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\obj\windows\gameengine\kernel\gen_system\debug"
+# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\kernel\gen_system\debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\..\lib\windows\string\include" /I "../../../../../lib/windows/moto/include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
+# SUBTRACT CPP /Fr
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "SYS_system - Win32 MT DLL Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "SYS_system___Win32_MT_DLL_Debug"
+# PROP BASE Intermediate_Dir "SYS_system___Win32_MT_DLL_Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\obj\windows\gameengine\kernel\gen_system\mtdll_debug"
+# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\kernel\gen_system\mtdll_debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /MDd /Gm /GX /ZI /Od /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
+# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "..\..\..\..\lib\windows\string\include" /I "../../../../../lib/windows/moto/include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\gameengine\kernel\gen_system\debug\SYS_system.lib"
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "SYS_system - Win32 MT DLL Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "SYS_system___Win32_MT_DLL_Release"
+# PROP BASE Intermediate_Dir "SYS_system___Win32_MT_DLL_Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\obj\windows\gameengine\kernel\gen_system\mtdll"
+# PROP Intermediate_Dir "..\..\..\obj\windows\gameengine\kernel\gen_system\mtdll"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /GX /O2 /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD CPP /nologo /MD /GX /O2 /I "..\..\..\..\lib\windows\string\include" /I "../../../../../lib/windows/moto/include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\gameengine\kernel\gen_system\SYS_system.lib"
+# ADD LIB32 /nologo
+
+!ENDIF
+
+# Begin Target
+
+# Name "SYS_system - Win32 Release"
+# Name "SYS_system - Win32 Debug"
+# Name "SYS_system - Win32 MT DLL Debug"
+# Name "SYS_system - Win32 MT DLL Release"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\source\kernel\gen_system\GEN_HashedPtr.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\kernel\gen_system\SYS_SingletonSystem.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\kernel\gen_system\SYS_System.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\source\kernel\gen_system\GEN_DataCache.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\kernel\gen_system\GEN_HashedPtr.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\kernel\gen_system\GEN_Map.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\kernel\gen_system\GEN_SmartPtr.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\kernel\gen_system\SYS_SingletonSystem.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\kernel\gen_system\SYS_System.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/projectfiles/sumo/fuzzics/SM_fuzzics.dsp b/projectfiles/sumo/fuzzics/SM_fuzzics.dsp
index c415810d2c9..8804fdcb796 100644
--- a/projectfiles/sumo/fuzzics/SM_fuzzics.dsp
+++ b/projectfiles/sumo/fuzzics/SM_fuzzics.dsp
@@ -1,216 +1,216 @@
-# Microsoft Developer Studio Project File - Name="SM_fuzzics" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=SM_fuzzics - Win32 Profile
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "SM_fuzzics.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "SM_fuzzics.mak" CFG="SM_fuzzics - Win32 Profile"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "SM_fuzzics - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "SM_fuzzics - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "SM_fuzzics - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "SM_fuzzics - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "SM_fuzzics - Win32 Profile" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "SM_fuzzics - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\obj\windows\sumo\fuzzics"
-# PROP Intermediate_Dir "..\..\..\obj\windows\sumo\fuzzics"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GR /GX /O2 /I "..\..\..\source\gameengine\physics\sumo\Fuzzics\include" /I "../../../../lib/windows/moto/include" /I "../../../extern/solid" /I "..\..\..\source\sumo\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "SM_fuzzics - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\obj\windows\sumo\fuzzics\debug"
-# PROP Intermediate_Dir "..\..\..\obj\windows\sumo\fuzzics\debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GR /GX /Zi /Od /I "..\..\..\source\gameengine\physics\sumo\Fuzzics\include" /I "../../../../lib/windows/moto/include" /I "../../../extern/solid" /I "..\..\..\source\sumo\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "SM_fuzzics - Win32 MT DLL Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "SM_fuzzics___Win32_MT_DLL_Debug"
-# PROP BASE Intermediate_Dir "SM_fuzzics___Win32_MT_DLL_Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\..\obj\windows\sumo\fuzzics\mtdll_debug"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\sumo\fuzzics\mtdll_debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /Gm /GX /ZI /Od /I "..\..\..\source\sumo\Fuzzics\include" /I "../../../../../lib/windows/moto/include" /I "..\..\..\source\sumo\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "..\..\..\source\sumo\Fuzzics\include" /I "../../../../lib/windows/moto/include" /I "..\..\..\source\sumo\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\sumo\fuzzics\debug\SM_fuzzics.lib"
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "SM_fuzzics - Win32 MT DLL Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "SM_fuzzics___Win32_MT_DLL_Release"
-# PROP BASE Intermediate_Dir "SM_fuzzics___Win32_MT_DLL_Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\..\obj\windows\sumo\fuzzics\mtdll"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\sumo\fuzzics\mtdll"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /GX /O2 /I "..\..\..\source\sumo\Fuzzics\include" /I "../../../../../lib/windows/moto/include" /I "..\..\..\source\sumo\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD CPP /nologo /MD /GX /O2 /I "..\..\..\source\sumo\Fuzzics\include" /I "../../../../lib/windows/moto/include" /I "..\..\..\source\sumo\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\sumo\fuzzics\SM_fuzzics.lib"
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "SM_fuzzics - Win32 Profile"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "SM_fuzzics___Win32_Profile"
-# PROP BASE Intermediate_Dir "SM_fuzzics___Win32_Profile"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "SM_fuzzics___Win32_Profile"
-# PROP Intermediate_Dir "SM_fuzzics___Win32_Profile"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\..\source\sumo\Fuzzics\include" /I "../../../../../lib/windows/moto/include" /I "..\..\..\source\sumo\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
-# ADD CPP /nologo /W3 /Gm /GX /Zi /O2 /I "..\..\..\source\sumo\Fuzzics\include" /I "../../../../lib/windows/moto/include" /I "..\..\..\source\sumo\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\..\obj\windows\sumo\fuzzics\debug\SM_fuzzics.lib"
-# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\sumo\fuzzics\profile\SM_fuzzics.lib"
-
-!ENDIF
-
-# Begin Target
-
-# Name "SM_fuzzics - Win32 Release"
-# Name "SM_fuzzics - Win32 Debug"
-# Name "SM_fuzzics - Win32 MT DLL Debug"
-# Name "SM_fuzzics - Win32 MT DLL Release"
-# Name "SM_fuzzics - Win32 Profile"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Physics\Sumo\Fuzzics\src\SM_FhObject.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Physics\Sumo\Fuzzics\src\SM_Object.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Physics\Sumo\Fuzzics\src\SM_Scene.cpp
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Physics\Sumo\Fuzzics\include\SM_Callback.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Physics\Sumo\Fuzzics\include\SM_ClientObjectInfo.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Physics\Sumo\Fuzzics\include\SM_Debug.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Physics\Sumo\Fuzzics\include\SM_FhObject.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Physics\Sumo\Fuzzics\include\SM_MotionState.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Physics\Sumo\Fuzzics\include\SM_Object.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Physics\Sumo\Fuzzics\include\SM_Props.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\gameengine\Physics\Sumo\Fuzzics\include\SM_Scene.h
-# End Source File
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="SM_fuzzics" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=SM_fuzzics - Win32 Profile
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "SM_fuzzics.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "SM_fuzzics.mak" CFG="SM_fuzzics - Win32 Profile"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "SM_fuzzics - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "SM_fuzzics - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "SM_fuzzics - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "SM_fuzzics - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "SM_fuzzics - Win32 Profile" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "SM_fuzzics - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\obj\windows\sumo\fuzzics"
+# PROP Intermediate_Dir "..\..\..\obj\windows\sumo\fuzzics"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GR /GX /O2 /I "..\..\..\source\gameengine\physics\sumo\Fuzzics\include" /I "../../../../lib/windows/moto/include" /I "../../../extern/solid" /I "..\..\..\source\sumo\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "SM_fuzzics - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\obj\windows\sumo\fuzzics\debug"
+# PROP Intermediate_Dir "..\..\..\obj\windows\sumo\fuzzics\debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GR /GX /Zi /Od /I "..\..\..\source\gameengine\physics\sumo\Fuzzics\include" /I "../../../../lib/windows/moto/include" /I "../../../extern/solid" /I "..\..\..\source\sumo\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "SM_fuzzics - Win32 MT DLL Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "SM_fuzzics___Win32_MT_DLL_Debug"
+# PROP BASE Intermediate_Dir "SM_fuzzics___Win32_MT_DLL_Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\..\obj\windows\sumo\fuzzics\mtdll_debug"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\sumo\fuzzics\mtdll_debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /Gm /GX /ZI /Od /I "..\..\..\source\sumo\Fuzzics\include" /I "../../../../../lib/windows/moto/include" /I "..\..\..\source\sumo\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
+# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "..\..\..\source\sumo\Fuzzics\include" /I "../../../../lib/windows/moto/include" /I "..\..\..\source\sumo\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\sumo\fuzzics\debug\SM_fuzzics.lib"
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "SM_fuzzics - Win32 MT DLL Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "SM_fuzzics___Win32_MT_DLL_Release"
+# PROP BASE Intermediate_Dir "SM_fuzzics___Win32_MT_DLL_Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\..\obj\windows\sumo\fuzzics\mtdll"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\sumo\fuzzics\mtdll"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /GX /O2 /I "..\..\..\source\sumo\Fuzzics\include" /I "../../../../../lib/windows/moto/include" /I "..\..\..\source\sumo\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD CPP /nologo /MD /GX /O2 /I "..\..\..\source\sumo\Fuzzics\include" /I "../../../../lib/windows/moto/include" /I "..\..\..\source\sumo\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\sumo\fuzzics\SM_fuzzics.lib"
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "SM_fuzzics - Win32 Profile"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "SM_fuzzics___Win32_Profile"
+# PROP BASE Intermediate_Dir "SM_fuzzics___Win32_Profile"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "SM_fuzzics___Win32_Profile"
+# PROP Intermediate_Dir "SM_fuzzics___Win32_Profile"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\..\..\source\sumo\Fuzzics\include" /I "../../../../../lib/windows/moto/include" /I "..\..\..\source\sumo\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /Zi /O2 /I "..\..\..\source\sumo\Fuzzics\include" /I "../../../../lib/windows/moto/include" /I "..\..\..\source\sumo\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\..\obj\windows\sumo\fuzzics\debug\SM_fuzzics.lib"
+# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\sumo\fuzzics\profile\SM_fuzzics.lib"
+
+!ENDIF
+
+# Begin Target
+
+# Name "SM_fuzzics - Win32 Release"
+# Name "SM_fuzzics - Win32 Debug"
+# Name "SM_fuzzics - Win32 MT DLL Debug"
+# Name "SM_fuzzics - Win32 MT DLL Release"
+# Name "SM_fuzzics - Win32 Profile"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Physics\Sumo\Fuzzics\src\SM_FhObject.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Physics\Sumo\Fuzzics\src\SM_Object.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Physics\Sumo\Fuzzics\src\SM_Scene.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Physics\Sumo\Fuzzics\include\SM_Callback.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Physics\Sumo\Fuzzics\include\SM_ClientObjectInfo.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Physics\Sumo\Fuzzics\include\SM_Debug.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Physics\Sumo\Fuzzics\include\SM_FhObject.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Physics\Sumo\Fuzzics\include\SM_MotionState.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Physics\Sumo\Fuzzics\include\SM_Object.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Physics\Sumo\Fuzzics\include\SM_Props.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\gameengine\Physics\Sumo\Fuzzics\include\SM_Scene.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/projectfiles/sumo/moto/SM_moto.dsp b/projectfiles/sumo/moto/SM_moto.dsp
index 3fd627ce60d..0a27fad5a0d 100644
--- a/projectfiles/sumo/moto/SM_moto.dsp
+++ b/projectfiles/sumo/moto/SM_moto.dsp
@@ -1,332 +1,332 @@
-# Microsoft Developer Studio Project File - Name="SM_moto" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=SM_moto - Win32 Profile
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "SM_moto.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "SM_moto.mak" CFG="SM_moto - Win32 Profile"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "SM_moto - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "SM_moto - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "SM_moto - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "SM_moto - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "SM_moto - Win32 Profile" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "SM_moto - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\sumo\moto"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /W3 /GX /O2 /I "..\..\..\..\lib\windows\moto\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\sumo\moto\SM_moto.lib"
-
-!ELSEIF "$(CFG)" == "SM_moto - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\sumo\moto\debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /I "..\..\..\source\sumo\MoTo\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /FR /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\sumo\moto\debug\SM_moto.lib"
-
-!ELSEIF "$(CFG)" == "SM_moto - Win32 MT DLL Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "SM_moto___Win32_MT_DLL_Debug"
-# PROP BASE Intermediate_Dir "SM_moto___Win32_MT_DLL_Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\..\obj\windows\sumo\moto\mtdll_debug"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\sumo\moto\mtdll_debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /Gm /GX /ZI /Od /I "..\..\..\source\sumo\MoTo\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "..\..\..\source\sumo\MoTo\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /FR /YX /J /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\sumo\moto\debug\SM_moto.lib"
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "SM_moto - Win32 MT DLL Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "SM_moto___Win32_MT_DLL_Release"
-# PROP BASE Intermediate_Dir "SM_moto___Win32_MT_DLL_Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\..\obj\windows\sumo\moto\mtdll"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\sumo\moto\mtdll"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /GX /O2 /I "..\..\..\source\sumo\MoTo\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD CPP /nologo /MD /GX /O2 /I "..\..\..\source\sumo\MoTo\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\sumo\moto\SM_moto.lib"
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "SM_moto - Win32 Profile"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "SM_moto___Win32_Profile"
-# PROP BASE Intermediate_Dir "SM_moto___Win32_Profile"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "SM_moto___Win32_Profile"
-# PROP Intermediate_Dir "SM_moto___Win32_Profile"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /O2 /I "..\..\..\source\sumo\MoTo\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD CPP /nologo /W3 /Gm /GX /Zi /O2 /I "..\..\..\source\sumo\MoTo\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\..\obj\windows\sumo\moto\debug\SM_moto.lib"
-# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\sumo\moto\profile\SM_moto.lib"
-
-!ENDIF
-
-# Begin Target
-
-# Name "SM_moto - Win32 Release"
-# Name "SM_moto - Win32 Debug"
-# Name "SM_moto - Win32 MT DLL Debug"
-# Name "SM_moto - Win32 MT DLL Release"
-# Name "SM_moto - Win32 Profile"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\src\MT_CmMatrix4x4.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\src\MT_Matrix3x3.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\src\MT_Matrix4x4.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\src\MT_Point3.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\src\MT_Quaternion.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\src\MT_random.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\src\MT_Transform.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\src\MT_Vector2.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\src\MT_Vector3.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\src\MT_Vector4.cpp
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\GEN_List.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\GEN_Map.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_assert.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_CmMatrix4x4.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_Matrix3x3.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_Matrix3x3.inl
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_Matrix4x4.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_Matrix4x4.inl
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_MinMax.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_Optimize.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_Point2.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_Point2.inl
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_Point3.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_Point3.inl
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_Quaternion.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_Quaternion.inl
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_random.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_Scalar.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_Stream.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_Transform.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_Tuple2.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_Tuple3.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_Tuple4.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_Vector2.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_Vector2.inl
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_Vector3.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_Vector3.inl
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_Vector4.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_Vector4.inl
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\NM_Scalar.h
-# End Source File
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="SM_moto" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=SM_moto - Win32 Profile
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "SM_moto.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "SM_moto.mak" CFG="SM_moto - Win32 Profile"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "SM_moto - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "SM_moto - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "SM_moto - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "SM_moto - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "SM_moto - Win32 Profile" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "SM_moto - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\sumo\moto"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "..\..\..\..\lib\windows\moto\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\sumo\moto\SM_moto.lib"
+
+!ELSEIF "$(CFG)" == "SM_moto - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\sumo\moto\debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /I "..\..\..\source\sumo\MoTo\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /FR /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\sumo\moto\debug\SM_moto.lib"
+
+!ELSEIF "$(CFG)" == "SM_moto - Win32 MT DLL Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "SM_moto___Win32_MT_DLL_Debug"
+# PROP BASE Intermediate_Dir "SM_moto___Win32_MT_DLL_Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\..\obj\windows\sumo\moto\mtdll_debug"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\sumo\moto\mtdll_debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /Gm /GX /ZI /Od /I "..\..\..\source\sumo\MoTo\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
+# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "..\..\..\source\sumo\MoTo\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /FR /YX /J /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\sumo\moto\debug\SM_moto.lib"
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "SM_moto - Win32 MT DLL Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "SM_moto___Win32_MT_DLL_Release"
+# PROP BASE Intermediate_Dir "SM_moto___Win32_MT_DLL_Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\..\obj\windows\sumo\moto\mtdll"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\sumo\moto\mtdll"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /GX /O2 /I "..\..\..\source\sumo\MoTo\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD CPP /nologo /MD /GX /O2 /I "..\..\..\source\sumo\MoTo\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\sumo\moto\SM_moto.lib"
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "SM_moto - Win32 Profile"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "SM_moto___Win32_Profile"
+# PROP BASE Intermediate_Dir "SM_moto___Win32_Profile"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "SM_moto___Win32_Profile"
+# PROP Intermediate_Dir "SM_moto___Win32_Profile"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /O2 /I "..\..\..\source\sumo\MoTo\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD CPP /nologo /W3 /Gm /GX /Zi /O2 /I "..\..\..\source\sumo\MoTo\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\..\obj\windows\sumo\moto\debug\SM_moto.lib"
+# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\sumo\moto\profile\SM_moto.lib"
+
+!ENDIF
+
+# Begin Target
+
+# Name "SM_moto - Win32 Release"
+# Name "SM_moto - Win32 Debug"
+# Name "SM_moto - Win32 MT DLL Debug"
+# Name "SM_moto - Win32 MT DLL Release"
+# Name "SM_moto - Win32 Profile"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\src\MT_CmMatrix4x4.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\src\MT_Matrix3x3.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\src\MT_Matrix4x4.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\src\MT_Point3.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\src\MT_Quaternion.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\src\MT_random.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\src\MT_Transform.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\src\MT_Vector2.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\src\MT_Vector3.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\src\MT_Vector4.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\GEN_List.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\GEN_Map.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_assert.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_CmMatrix4x4.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_Matrix3x3.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_Matrix3x3.inl
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_Matrix4x4.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_Matrix4x4.inl
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_MinMax.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_Optimize.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_Point2.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_Point2.inl
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_Point3.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_Point3.inl
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_Quaternion.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_Quaternion.inl
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_random.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_Scalar.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_Stream.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_Transform.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_Tuple2.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_Tuple3.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_Tuple4.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_Vector2.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_Vector2.inl
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_Vector3.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_Vector3.inl
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_Vector4.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_Vector4.inl
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\NM_Scalar.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/projectfiles/sumo/solid/SM_solid.dsp b/projectfiles/sumo/solid/SM_solid.dsp
index dfaa85c35d8..221a72f67ef 100644
--- a/projectfiles/sumo/solid/SM_solid.dsp
+++ b/projectfiles/sumo/solid/SM_solid.dsp
@@ -1,340 +1,340 @@
-# Microsoft Developer Studio Project File - Name="SM_solid" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=SM_solid - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "SM_solid.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "SM_solid.mak" CFG="SM_solid - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "SM_solid - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "SM_solid - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "SM_solid - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "SM_solid - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "SM_solid - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\obj\windows\sumo\solid"
-# PROP Intermediate_Dir "..\..\..\obj\windows\sumo\solid"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\source\gameengine\physics\sumo\SOLID-3.0\include" /I "../../../../lib/windows/moto/include" /I "..\..\..\source\gameengine\physics\sumo\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /J /FD /c
-# SUBTRACT CPP /YX
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "SM_solid - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\obj\windows\sumo\solid\debug"
-# PROP Intermediate_Dir "..\..\..\obj\windows\sumo\solid\debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\source\gameengine\physics\sumo\SOLID-3.0\include" /I "../../../../lib/windows/moto/include" /I "..\..\..\source\gameengine\physics\sumo\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
-# SUBTRACT CPP /Fr
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "SM_solid - Win32 MT DLL Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "SM_solid___Win32_MT_DLL_Debug"
-# PROP BASE Intermediate_Dir "SM_solid___Win32_MT_DLL_Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\obj\windows\sumo\solid\mtdll_debug"
-# PROP Intermediate_Dir "..\..\..\obj\windows\sumo\solid\mtdll_debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /Gm /GX /ZI /Od /I "..\..\..\source\sumo\SOLID-3.0\include" /I "../../../../../lib/windows/moto/include" /I "..\..\..\source\sumo\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "..\..\..\source\gameengine\physics\sumo\SOLID-3.0\include" /I "../../../../lib/windows/moto/include" /I "..\..\..\source\gameengine\physics\sumo\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\sumo\solid\debug\SM_solid.lib"
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "SM_solid - Win32 MT DLL Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "SM_solid___Win32_MT_DLL_Release"
-# PROP BASE Intermediate_Dir "SM_solid___Win32_MT_DLL_Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\obj\windows\sumo\solid\mtdll"
-# PROP Intermediate_Dir "..\..\..\obj\windows\sumo\solid\mtdll"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /GX /O2 /I "..\..\..\source\sumo\SOLID-3.0\include" /I "../../../../../lib/windows/moto/include" /I "..\..\..\source\sumo\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD CPP /nologo /MD /GX /O2 /I "..\..\..\source\gameengine\physics\sumo\SOLID-3.0\include" /I "../../../../lib/windows/moto/include" /I "..\..\..\source\gameengine\physics\sumo\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\sumo\solid\SM_solid.lib"
-# ADD LIB32 /nologo
-
-!ENDIF
-
-# Begin Target
-
-# Name "SM_solid - Win32 Release"
-# Name "SM_solid - Win32 Debug"
-# Name "SM_solid - Win32 MT DLL Debug"
-# Name "SM_solid - Win32 MT DLL Release"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\BBoxTree.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\Box.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\Complex.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\Cone.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\Convex.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\Cylinder.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\DT_BP_C-api.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\DT_BP_Endpoint.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\DT_BP_Proxy.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\DT_BP_Scene.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\DT_C-api.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\DT_DoubleBase.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\DT_Encounter.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\DT_FloatBase.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\DT_LineSegment.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\DT_Object.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\DT_RespTable.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\DT_Scene.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\Polyhedron.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\Polytope.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\Sphere.cpp"
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\AlgoTable.h"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\BBoxTree.h"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\Box.h"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\Complex.h"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\Cone.h"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\Convex.h"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\Cylinder.h"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_AABBox.h"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_BBox.h"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_BP_Endpoint.h"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_BP_Proxy.h"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_BP_Scene.h"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_DoubleBase.h"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_Encounter.h"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_FloatBase.h"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_LineSegment.h"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_Object.h"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_Response.h"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_RespTable.h"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_Scene.h"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_VertexBase.h"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_VertexBased.h"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\IndexArray.h"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\Polyhedron.h"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\Polytope.h"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\Shape.h"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\Sphere.h"
-# End Source File
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="SM_solid" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=SM_solid - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "SM_solid.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "SM_solid.mak" CFG="SM_solid - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "SM_solid - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "SM_solid - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "SM_solid - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "SM_solid - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "SM_solid - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\obj\windows\sumo\solid"
+# PROP Intermediate_Dir "..\..\..\obj\windows\sumo\solid"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\source\gameengine\physics\sumo\SOLID-3.0\include" /I "../../../../lib/windows/moto/include" /I "..\..\..\source\gameengine\physics\sumo\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /J /FD /c
+# SUBTRACT CPP /YX
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "SM_solid - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\obj\windows\sumo\solid\debug"
+# PROP Intermediate_Dir "..\..\..\obj\windows\sumo\solid\debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\source\gameengine\physics\sumo\SOLID-3.0\include" /I "../../../../lib/windows/moto/include" /I "..\..\..\source\gameengine\physics\sumo\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
+# SUBTRACT CPP /Fr
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "SM_solid - Win32 MT DLL Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "SM_solid___Win32_MT_DLL_Debug"
+# PROP BASE Intermediate_Dir "SM_solid___Win32_MT_DLL_Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\obj\windows\sumo\solid\mtdll_debug"
+# PROP Intermediate_Dir "..\..\..\obj\windows\sumo\solid\mtdll_debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /Gm /GX /ZI /Od /I "..\..\..\source\sumo\SOLID-3.0\include" /I "../../../../../lib/windows/moto/include" /I "..\..\..\source\sumo\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
+# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "..\..\..\source\gameengine\physics\sumo\SOLID-3.0\include" /I "../../../../lib/windows/moto/include" /I "..\..\..\source\gameengine\physics\sumo\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\sumo\solid\debug\SM_solid.lib"
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "SM_solid - Win32 MT DLL Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "SM_solid___Win32_MT_DLL_Release"
+# PROP BASE Intermediate_Dir "SM_solid___Win32_MT_DLL_Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\obj\windows\sumo\solid\mtdll"
+# PROP Intermediate_Dir "..\..\..\obj\windows\sumo\solid\mtdll"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /GX /O2 /I "..\..\..\source\sumo\SOLID-3.0\include" /I "../../../../../lib/windows/moto/include" /I "..\..\..\source\sumo\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD CPP /nologo /MD /GX /O2 /I "..\..\..\source\gameengine\physics\sumo\SOLID-3.0\include" /I "../../../../lib/windows/moto/include" /I "..\..\..\source\gameengine\physics\sumo\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\sumo\solid\SM_solid.lib"
+# ADD LIB32 /nologo
+
+!ENDIF
+
+# Begin Target
+
+# Name "SM_solid - Win32 Release"
+# Name "SM_solid - Win32 Debug"
+# Name "SM_solid - Win32 MT DLL Debug"
+# Name "SM_solid - Win32 MT DLL Release"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\BBoxTree.cpp"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\Box.cpp"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\Complex.cpp"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\Cone.cpp"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\Convex.cpp"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\Cylinder.cpp"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\DT_BP_C-api.cpp"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\DT_BP_Endpoint.cpp"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\DT_BP_Proxy.cpp"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\DT_BP_Scene.cpp"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\DT_C-api.cpp"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\DT_DoubleBase.cpp"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\DT_Encounter.cpp"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\DT_FloatBase.cpp"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\DT_LineSegment.cpp"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\DT_Object.cpp"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\DT_RespTable.cpp"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\DT_Scene.cpp"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\Polyhedron.cpp"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\Polytope.cpp"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\Sphere.cpp"
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\AlgoTable.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\BBoxTree.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\Box.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\Complex.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\Cone.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\Convex.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\Cylinder.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_AABBox.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_BBox.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_BP_Endpoint.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_BP_Proxy.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_BP_Scene.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_DoubleBase.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_Encounter.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_FloatBase.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_LineSegment.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_Object.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_Response.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_RespTable.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_Scene.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_VertexBase.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_VertexBased.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\IndexArray.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\Polyhedron.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\Polytope.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\Shape.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\Sphere.h"
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/projectfiles_vc7/sumo/moto/SM_moto.dsp b/projectfiles_vc7/sumo/moto/SM_moto.dsp
index 3fd627ce60d..0a27fad5a0d 100644
--- a/projectfiles_vc7/sumo/moto/SM_moto.dsp
+++ b/projectfiles_vc7/sumo/moto/SM_moto.dsp
@@ -1,332 +1,332 @@
-# Microsoft Developer Studio Project File - Name="SM_moto" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=SM_moto - Win32 Profile
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "SM_moto.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "SM_moto.mak" CFG="SM_moto - Win32 Profile"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "SM_moto - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "SM_moto - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "SM_moto - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "SM_moto - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "SM_moto - Win32 Profile" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "SM_moto - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\sumo\moto"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /W3 /GX /O2 /I "..\..\..\..\lib\windows\moto\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\sumo\moto\SM_moto.lib"
-
-!ELSEIF "$(CFG)" == "SM_moto - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\sumo\moto\debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /I "..\..\..\source\sumo\MoTo\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /FR /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\sumo\moto\debug\SM_moto.lib"
-
-!ELSEIF "$(CFG)" == "SM_moto - Win32 MT DLL Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "SM_moto___Win32_MT_DLL_Debug"
-# PROP BASE Intermediate_Dir "SM_moto___Win32_MT_DLL_Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\..\obj\windows\sumo\moto\mtdll_debug"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\sumo\moto\mtdll_debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /Gm /GX /ZI /Od /I "..\..\..\source\sumo\MoTo\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "..\..\..\source\sumo\MoTo\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /FR /YX /J /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\sumo\moto\debug\SM_moto.lib"
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "SM_moto - Win32 MT DLL Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "SM_moto___Win32_MT_DLL_Release"
-# PROP BASE Intermediate_Dir "SM_moto___Win32_MT_DLL_Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\..\obj\windows\sumo\moto\mtdll"
-# PROP Intermediate_Dir "..\..\..\..\obj\windows\sumo\moto\mtdll"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /GX /O2 /I "..\..\..\source\sumo\MoTo\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD CPP /nologo /MD /GX /O2 /I "..\..\..\source\sumo\MoTo\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\sumo\moto\SM_moto.lib"
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "SM_moto - Win32 Profile"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "SM_moto___Win32_Profile"
-# PROP BASE Intermediate_Dir "SM_moto___Win32_Profile"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "SM_moto___Win32_Profile"
-# PROP Intermediate_Dir "SM_moto___Win32_Profile"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /O2 /I "..\..\..\source\sumo\MoTo\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD CPP /nologo /W3 /Gm /GX /Zi /O2 /I "..\..\..\source\sumo\MoTo\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\..\obj\windows\sumo\moto\debug\SM_moto.lib"
-# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\sumo\moto\profile\SM_moto.lib"
-
-!ENDIF
-
-# Begin Target
-
-# Name "SM_moto - Win32 Release"
-# Name "SM_moto - Win32 Debug"
-# Name "SM_moto - Win32 MT DLL Debug"
-# Name "SM_moto - Win32 MT DLL Release"
-# Name "SM_moto - Win32 Profile"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\src\MT_CmMatrix4x4.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\src\MT_Matrix3x3.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\src\MT_Matrix4x4.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\src\MT_Point3.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\src\MT_Quaternion.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\src\MT_random.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\src\MT_Transform.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\src\MT_Vector2.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\src\MT_Vector3.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\src\MT_Vector4.cpp
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\GEN_List.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\GEN_Map.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_assert.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_CmMatrix4x4.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_Matrix3x3.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_Matrix3x3.inl
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_Matrix4x4.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_Matrix4x4.inl
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_MinMax.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_Optimize.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_Point2.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_Point2.inl
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_Point3.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_Point3.inl
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_Quaternion.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_Quaternion.inl
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_random.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_Scalar.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_Stream.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_Transform.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_Tuple2.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_Tuple3.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_Tuple4.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_Vector2.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_Vector2.inl
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_Vector3.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_Vector3.inl
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_Vector4.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\MT_Vector4.inl
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\..\source\sumo\MoTo\include\NM_Scalar.h
-# End Source File
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="SM_moto" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=SM_moto - Win32 Profile
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "SM_moto.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "SM_moto.mak" CFG="SM_moto - Win32 Profile"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "SM_moto - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "SM_moto - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "SM_moto - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "SM_moto - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "SM_moto - Win32 Profile" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "SM_moto - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\sumo\moto"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "..\..\..\..\lib\windows\moto\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\sumo\moto\SM_moto.lib"
+
+!ELSEIF "$(CFG)" == "SM_moto - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\sumo\moto\debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /I "..\..\..\source\sumo\MoTo\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /FR /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\sumo\moto\debug\SM_moto.lib"
+
+!ELSEIF "$(CFG)" == "SM_moto - Win32 MT DLL Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "SM_moto___Win32_MT_DLL_Debug"
+# PROP BASE Intermediate_Dir "SM_moto___Win32_MT_DLL_Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\..\obj\windows\sumo\moto\mtdll_debug"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\sumo\moto\mtdll_debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /Gm /GX /ZI /Od /I "..\..\..\source\sumo\MoTo\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
+# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "..\..\..\source\sumo\MoTo\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /FR /YX /J /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\sumo\moto\debug\SM_moto.lib"
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "SM_moto - Win32 MT DLL Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "SM_moto___Win32_MT_DLL_Release"
+# PROP BASE Intermediate_Dir "SM_moto___Win32_MT_DLL_Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\..\obj\windows\sumo\moto\mtdll"
+# PROP Intermediate_Dir "..\..\..\..\obj\windows\sumo\moto\mtdll"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /GX /O2 /I "..\..\..\source\sumo\MoTo\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD CPP /nologo /MD /GX /O2 /I "..\..\..\source\sumo\MoTo\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\sumo\moto\SM_moto.lib"
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "SM_moto - Win32 Profile"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "SM_moto___Win32_Profile"
+# PROP BASE Intermediate_Dir "SM_moto___Win32_Profile"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "SM_moto___Win32_Profile"
+# PROP Intermediate_Dir "SM_moto___Win32_Profile"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /O2 /I "..\..\..\source\sumo\MoTo\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD CPP /nologo /W3 /Gm /GX /Zi /O2 /I "..\..\..\source\sumo\MoTo\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\..\obj\windows\sumo\moto\debug\SM_moto.lib"
+# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\sumo\moto\profile\SM_moto.lib"
+
+!ENDIF
+
+# Begin Target
+
+# Name "SM_moto - Win32 Release"
+# Name "SM_moto - Win32 Debug"
+# Name "SM_moto - Win32 MT DLL Debug"
+# Name "SM_moto - Win32 MT DLL Release"
+# Name "SM_moto - Win32 Profile"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\src\MT_CmMatrix4x4.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\src\MT_Matrix3x3.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\src\MT_Matrix4x4.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\src\MT_Point3.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\src\MT_Quaternion.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\src\MT_random.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\src\MT_Transform.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\src\MT_Vector2.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\src\MT_Vector3.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\src\MT_Vector4.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\GEN_List.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\GEN_Map.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_assert.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_CmMatrix4x4.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_Matrix3x3.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_Matrix3x3.inl
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_Matrix4x4.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_Matrix4x4.inl
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_MinMax.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_Optimize.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_Point2.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_Point2.inl
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_Point3.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_Point3.inl
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_Quaternion.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_Quaternion.inl
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_random.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_Scalar.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_Stream.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_Transform.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_Tuple2.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_Tuple3.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_Tuple4.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_Vector2.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_Vector2.inl
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_Vector3.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_Vector3.inl
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_Vector4.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\MT_Vector4.inl
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\source\sumo\MoTo\include\NM_Scalar.h
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/projectfiles_vc7/sumo/solid/SM_solid.dsp b/projectfiles_vc7/sumo/solid/SM_solid.dsp
index dfaa85c35d8..221a72f67ef 100644
--- a/projectfiles_vc7/sumo/solid/SM_solid.dsp
+++ b/projectfiles_vc7/sumo/solid/SM_solid.dsp
@@ -1,340 +1,340 @@
-# Microsoft Developer Studio Project File - Name="SM_solid" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=SM_solid - Win32 Release
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "SM_solid.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "SM_solid.mak" CFG="SM_solid - Win32 Release"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "SM_solid - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "SM_solid - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "SM_solid - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE "SM_solid - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "SM_solid - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\obj\windows\sumo\solid"
-# PROP Intermediate_Dir "..\..\..\obj\windows\sumo\solid"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\source\gameengine\physics\sumo\SOLID-3.0\include" /I "../../../../lib/windows/moto/include" /I "..\..\..\source\gameengine\physics\sumo\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /J /FD /c
-# SUBTRACT CPP /YX
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "SM_solid - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\obj\windows\sumo\solid\debug"
-# PROP Intermediate_Dir "..\..\..\obj\windows\sumo\solid\debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\source\gameengine\physics\sumo\SOLID-3.0\include" /I "../../../../lib/windows/moto/include" /I "..\..\..\source\gameengine\physics\sumo\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
-# SUBTRACT CPP /Fr
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "SM_solid - Win32 MT DLL Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "SM_solid___Win32_MT_DLL_Debug"
-# PROP BASE Intermediate_Dir "SM_solid___Win32_MT_DLL_Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "..\..\..\obj\windows\sumo\solid\mtdll_debug"
-# PROP Intermediate_Dir "..\..\..\obj\windows\sumo\solid\mtdll_debug"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /Gm /GX /ZI /Od /I "..\..\..\source\sumo\SOLID-3.0\include" /I "../../../../../lib/windows/moto/include" /I "..\..\..\source\sumo\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
-# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "..\..\..\source\gameengine\physics\sumo\SOLID-3.0\include" /I "../../../../lib/windows/moto/include" /I "..\..\..\source\gameengine\physics\sumo\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\sumo\solid\debug\SM_solid.lib"
-# ADD LIB32 /nologo
-
-!ELSEIF "$(CFG)" == "SM_solid - Win32 MT DLL Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "SM_solid___Win32_MT_DLL_Release"
-# PROP BASE Intermediate_Dir "SM_solid___Win32_MT_DLL_Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "..\..\..\obj\windows\sumo\solid\mtdll"
-# PROP Intermediate_Dir "..\..\..\obj\windows\sumo\solid\mtdll"
-# PROP Target_Dir ""
-LINK32=link.exe -lib
-# ADD BASE CPP /nologo /GX /O2 /I "..\..\..\source\sumo\SOLID-3.0\include" /I "../../../../../lib/windows/moto/include" /I "..\..\..\source\sumo\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD CPP /nologo /MD /GX /O2 /I "..\..\..\source\gameengine\physics\sumo\SOLID-3.0\include" /I "../../../../lib/windows/moto/include" /I "..\..\..\source\gameengine\physics\sumo\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\sumo\solid\SM_solid.lib"
-# ADD LIB32 /nologo
-
-!ENDIF
-
-# Begin Target
-
-# Name "SM_solid - Win32 Release"
-# Name "SM_solid - Win32 Debug"
-# Name "SM_solid - Win32 MT DLL Debug"
-# Name "SM_solid - Win32 MT DLL Release"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\BBoxTree.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\Box.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\Complex.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\Cone.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\Convex.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\Cylinder.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\DT_BP_C-api.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\DT_BP_Endpoint.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\DT_BP_Proxy.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\DT_BP_Scene.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\DT_C-api.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\DT_DoubleBase.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\DT_Encounter.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\DT_FloatBase.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\DT_LineSegment.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\DT_Object.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\DT_RespTable.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\DT_Scene.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\Polyhedron.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\Polytope.cpp"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\Sphere.cpp"
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\AlgoTable.h"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\BBoxTree.h"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\Box.h"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\Complex.h"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\Cone.h"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\Convex.h"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\Cylinder.h"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_AABBox.h"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_BBox.h"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_BP_Endpoint.h"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_BP_Proxy.h"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_BP_Scene.h"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_DoubleBase.h"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_Encounter.h"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_FloatBase.h"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_LineSegment.h"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_Object.h"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_Response.h"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_RespTable.h"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_Scene.h"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_VertexBase.h"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_VertexBased.h"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\IndexArray.h"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\Polyhedron.h"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\Polytope.h"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\Shape.h"
-# End Source File
-# Begin Source File
-
-SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\Sphere.h"
-# End Source File
-# End Group
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="SM_solid" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=SM_solid - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "SM_solid.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "SM_solid.mak" CFG="SM_solid - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "SM_solid - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "SM_solid - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "SM_solid - Win32 MT DLL Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE "SM_solid - Win32 MT DLL Release" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "SM_solid - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\obj\windows\sumo\solid"
+# PROP Intermediate_Dir "..\..\..\obj\windows\sumo\solid"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\source\gameengine\physics\sumo\SOLID-3.0\include" /I "../../../../lib/windows/moto/include" /I "..\..\..\source\gameengine\physics\sumo\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /J /FD /c
+# SUBTRACT CPP /YX
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "SM_solid - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\obj\windows\sumo\solid\debug"
+# PROP Intermediate_Dir "..\..\..\obj\windows\sumo\solid\debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "..\..\..\source\gameengine\physics\sumo\SOLID-3.0\include" /I "../../../../lib/windows/moto/include" /I "..\..\..\source\gameengine\physics\sumo\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
+# SUBTRACT CPP /Fr
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "SM_solid - Win32 MT DLL Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "SM_solid___Win32_MT_DLL_Debug"
+# PROP BASE Intermediate_Dir "SM_solid___Win32_MT_DLL_Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "..\..\..\obj\windows\sumo\solid\mtdll_debug"
+# PROP Intermediate_Dir "..\..\..\obj\windows\sumo\solid\mtdll_debug"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /Gm /GX /ZI /Od /I "..\..\..\source\sumo\SOLID-3.0\include" /I "../../../../../lib/windows/moto/include" /I "..\..\..\source\sumo\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
+# ADD CPP /nologo /MDd /Gm /GX /ZI /Od /I "..\..\..\source\gameengine\physics\sumo\SOLID-3.0\include" /I "../../../../lib/windows/moto/include" /I "..\..\..\source\gameengine\physics\sumo\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\sumo\solid\debug\SM_solid.lib"
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "SM_solid - Win32 MT DLL Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "SM_solid___Win32_MT_DLL_Release"
+# PROP BASE Intermediate_Dir "SM_solid___Win32_MT_DLL_Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "..\..\..\obj\windows\sumo\solid\mtdll"
+# PROP Intermediate_Dir "..\..\..\obj\windows\sumo\solid\mtdll"
+# PROP Target_Dir ""
+LINK32=link.exe -lib
+# ADD BASE CPP /nologo /GX /O2 /I "..\..\..\source\sumo\SOLID-3.0\include" /I "../../../../../lib/windows/moto/include" /I "..\..\..\source\sumo\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD CPP /nologo /MD /GX /O2 /I "..\..\..\source\gameengine\physics\sumo\SOLID-3.0\include" /I "../../../../lib/windows/moto/include" /I "..\..\..\source\gameengine\physics\sumo\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /YX /J /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo /out:"..\..\..\..\..\obj\windows\sumo\solid\SM_solid.lib"
+# ADD LIB32 /nologo
+
+!ENDIF
+
+# Begin Target
+
+# Name "SM_solid - Win32 Release"
+# Name "SM_solid - Win32 Debug"
+# Name "SM_solid - Win32 MT DLL Debug"
+# Name "SM_solid - Win32 MT DLL Release"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\BBoxTree.cpp"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\Box.cpp"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\Complex.cpp"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\Cone.cpp"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\Convex.cpp"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\Cylinder.cpp"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\DT_BP_C-api.cpp"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\DT_BP_Endpoint.cpp"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\DT_BP_Proxy.cpp"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\DT_BP_Scene.cpp"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\DT_C-api.cpp"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\DT_DoubleBase.cpp"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\DT_Encounter.cpp"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\DT_FloatBase.cpp"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\DT_LineSegment.cpp"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\DT_Object.cpp"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\DT_RespTable.cpp"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\DT_Scene.cpp"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\Polyhedron.cpp"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\Polytope.cpp"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\src\Sphere.cpp"
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\AlgoTable.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\BBoxTree.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\Box.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\Complex.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\Cone.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\Convex.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\Cylinder.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_AABBox.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_BBox.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_BP_Endpoint.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_BP_Proxy.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_BP_Scene.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_DoubleBase.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_Encounter.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_FloatBase.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_LineSegment.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_Object.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_Response.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_RespTable.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_Scene.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_VertexBase.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\DT_VertexBased.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\IndexArray.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\Polyhedron.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\Polytope.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\Shape.h"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\source\gameengine\Physics\Sumo\SOLID-3.0\include\Sphere.h"
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/projectfiles_vc9/blender/BPY_python/BPY_python.vcproj b/projectfiles_vc9/blender/BPY_python/BPY_python.vcproj
index 96218215184..e66693cc86f 100644
--- a/projectfiles_vc9/blender/BPY_python/BPY_python.vcproj
+++ b/projectfiles_vc9/blender/BPY_python/BPY_python.vcproj
@@ -343,7 +343,7 @@
>
</File>
<File
- RelativePath="..\..\..\source\blender\python\intern\bpy_opwrapper.c"
+ RelativePath="..\..\..\source\blender\python\intern\bpy_operator_wrap.c"
>
</File>
<File
@@ -392,10 +392,18 @@
>
</File>
<File
+ RelativePath="..\..\..\source\blender\python\intern\bpy_operator_wrap.h"
+ >
+ </File>
+ <File
RelativePath="..\..\..\source\blender\python\intern\bpy_opwrapper.h"
>
</File>
<File
+ RelativePath="..\..\..\source\blender\python\intern\bpy_panel_wrap.h"
+ >
+ </File>
+ <File
RelativePath="..\..\..\source\blender\python\intern\bpy_rna.h"
>
</File>
diff --git a/projectfiles_vc9/blender/blender.sln b/projectfiles_vc9/blender/blender.sln
index a807fa93afa..b3f43f69c0a 100644
--- a/projectfiles_vc9/blender/blender.sln
+++ b/projectfiles_vc9/blender/blender.sln
@@ -3,7 +3,6 @@ Microsoft Visual Studio Solution File, Format Version 10.00
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "blender", "blender.vcproj", "{F78B7FC9-DE32-465E-9F26-BB0B6B7A2EAF}"
ProjectSection(ProjectDependencies) = postProject
{E5F2F004-C704-4DCC-A08F-6EB1E38EAB9F} = {E5F2F004-C704-4DCC-A08F-6EB1E38EAB9F}
- {F9850C15-FF0A-429E-9D47-89FB433C9BD8} = {F9850C15-FF0A-429E-9D47-89FB433C9BD8}
{A90C4918-4B21-4277-93BD-AF65F30951D9} = {A90C4918-4B21-4277-93BD-AF65F30951D9}
{FB88301F-F725-401B-ACD7-D2ABBF333B71} = {FB88301F-F725-401B-ACD7-D2ABBF333B71}
{98330220-47A6-42E0-9DE4-AD0FF5D204D6} = {98330220-47A6-42E0-9DE4-AD0FF5D204D6}
@@ -27,7 +26,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "blender", "blender.vcproj",
{106AE171-0083-41D6-A949-20DB0E8DC251} = {106AE171-0083-41D6-A949-20DB0E8DC251}
{670EC17A-0548-4BBF-A27B-636C7C188139} = {670EC17A-0548-4BBF-A27B-636C7C188139}
{4C3AB78A-52CA-4276-A041-39776E52D8C8} = {4C3AB78A-52CA-4276-A041-39776E52D8C8}
- {E784098D-3ED8-433A-9353-9679415DDDC5} = {E784098D-3ED8-433A-9353-9679415DDDC5}
{CAE37E91-6570-43AC-A4B4-7A37A4B0FC94} = {CAE37E91-6570-43AC-A4B4-7A37A4B0FC94}
{76D90B92-ECC7-409C-9F98-A8814B90F3C0} = {76D90B92-ECC7-409C-9F98-A8814B90F3C0}
{9C71A793-C177-4CAB-8EC5-923D500B39F8} = {9C71A793-C177-4CAB-8EC5-923D500B39F8}
@@ -38,7 +36,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "blender", "blender.vcproj",
{213356A9-3A1F-41DA-9819-1297BCD17DEE} = {213356A9-3A1F-41DA-9819-1297BCD17DEE}
{727F90AC-ABE6-40BF-8937-C2F2F1D13DEA} = {727F90AC-ABE6-40BF-8937-C2F2F1D13DEA}
{BAC615B0-F1AF-418B-8D23-A10FD8870D6A} = {BAC615B0-F1AF-418B-8D23-A10FD8870D6A}
- {A1CCF5B0-08E1-4F00-B417-8BFAC34E5E90} = {A1CCF5B0-08E1-4F00-B417-8BFAC34E5E90}
{E90C7BC2-CF30-4A60-A8F2-0050D592E358} = {E90C7BC2-CF30-4A60-A8F2-0050D592E358}
{8B8D4FC3-3234-4E54-8376-5AB83D00D164} = {8B8D4FC3-3234-4E54-8376-5AB83D00D164}
{9991A3C3-83FE-4AFE-9E18-9D01CB57E879} = {9991A3C3-83FE-4AFE-9E18-9D01CB57E879}
@@ -94,8 +91,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DNA_makesdna", "makesdna\DN
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EXP_expressions", "..\gameengine\expression\EXP_expressions.vcproj", "{EADC3C5A-6C51-4F03-8038-1553E7D7F740}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FTF_ftfont", "ftfont\FTF_ftfont.vcproj", "{A1CCF5B0-08E1-4F00-B417-8BFAC34E5E90}"
-EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GP_axctl", "..\gameengine\gameplayer\axctl\GP_axctl.vcproj", "{DF25E6F2-780C-438B-8AAD-D10CF8B3820A}"
ProjectSection(ProjectDependencies) = postProject
{E5F2F004-C704-4DCC-A08F-6EB1E38EAB9F} = {E5F2F004-C704-4DCC-A08F-6EB1E38EAB9F}
@@ -152,7 +147,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "blenderplayer", "..\gameeng
{415BFD6E-64CF-422B-AF88-C07F040A7292} = {415BFD6E-64CF-422B-AF88-C07F040A7292}
{670EC17A-0548-4BBF-A27B-636C7C188139} = {670EC17A-0548-4BBF-A27B-636C7C188139}
{4C3AB78A-52CA-4276-A041-39776E52D8C8} = {4C3AB78A-52CA-4276-A041-39776E52D8C8}
- {E784098D-3ED8-433A-9353-9679415DDDC5} = {E784098D-3ED8-433A-9353-9679415DDDC5}
{6B801390-5F95-4F07-81A7-97FBA046AACC} = {6B801390-5F95-4F07-81A7-97FBA046AACC}
{CAE37E91-6570-43AC-A4B4-7A37A4B0FC94} = {CAE37E91-6570-43AC-A4B4-7A37A4B0FC94}
{76D90B92-ECC7-409C-9F98-A8814B90F3C0} = {76D90B92-ECC7-409C-9F98-A8814B90F3C0}
@@ -245,21 +239,16 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EXT_solid", "..\..\extern\s
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EXT_bullet2", "..\..\extern\bullet2\make\msvc_9_0\Bullet.vcproj", "{FFD3C64A-30E2-4BC7-BC8F-51818C320400}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EXT_ftgl_static_lib", "..\..\extern\bFTGL\make\msvc_9_0\ftgl_static_lib.vcproj", "{F9850C15-FF0A-429E-9D47-89FB433C9BD8}"
-EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EXT_glew", "..\..\extern\glew\make\msvc_9_0\glew.vcproj", "{BAC615B0-F1AF-418B-8D23-A10FD8870D6A}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EXT_qhull", "..\..\extern\qhull\make\msvc_9_0\qhull.vcproj", "{6461F05D-4698-47AB-A8E8-1CA2ACC9948B}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EXT_build_install_all", "..\..\extern\make\msvc_9_0\build_install_all.vcproj", "{9C71A793-C177-4CAB-8EC5-923D500B39F8}"
ProjectSection(ProjectDependencies) = postProject
- {F9850C15-FF0A-429E-9D47-89FB433C9BD8} = {F9850C15-FF0A-429E-9D47-89FB433C9BD8}
{FFD3C64A-30E2-4BC7-BC8F-51818C320400} = {FFD3C64A-30E2-4BC7-BC8F-51818C320400}
{D696C86B-0B53-4471-A50D-5B983A6FA4AD} = {D696C86B-0B53-4471-A50D-5B983A6FA4AD}
EndProjectSection
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "INT_bmfont", "..\..\intern\bmfont\make\msvc_9_0\bmfont.vcproj", "{E784098D-3ED8-433A-9353-9679415DDDC5}"
-EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "INT_boolop", "..\..\intern\boolop\make\msvc_9_0\boolop.vcproj", "{EB75F4D6-2970-4A3A-8D99-2BAD7201C0E9}"
ProjectSection(ProjectDependencies) = postProject
{4B6AFCC5-968C-424A-8F20-76E41B3BEF74} = {4B6AFCC5-968C-424A-8F20-76E41B3BEF74}
@@ -312,7 +301,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "INT_build_install_all", "..
{C66F722C-46BE-40C9-ABAE-2EAC7A697EB8} = {C66F722C-46BE-40C9-ABAE-2EAC7A697EB8}
{FAF46346-65CC-4DB2-85C4-B99826F79D0C} = {FAF46346-65CC-4DB2-85C4-B99826F79D0C}
{B093415D-C0F6-4E76-8F5A-6BC1917BCE9E} = {B093415D-C0F6-4E76-8F5A-6BC1917BCE9E}
- {E784098D-3ED8-433A-9353-9679415DDDC5} = {E784098D-3ED8-433A-9353-9679415DDDC5}
{76D90B92-ECC7-409C-9F98-A8814B90F3C0} = {76D90B92-ECC7-409C-9F98-A8814B90F3C0}
{542A9FA1-B7FF-441C-AE15-054DB31D3488} = {542A9FA1-B7FF-441C-AE15-054DB31D3488}
{213356A9-3A1F-41DA-9819-1297BCD17DEE} = {213356A9-3A1F-41DA-9819-1297BCD17DEE}
@@ -327,7 +315,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "INT_build_install_all", "..
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WM_windowmanager", "windowmanager\windowmanager.vcproj", "{884D8731-654C-4C7F-9A75-8F37A305BE1E}"
ProjectSection(ProjectDependencies) = postProject
- {E784098D-3ED8-433A-9353-9679415DDDC5} = {E784098D-3ED8-433A-9353-9679415DDDC5}
{DFE7F3E3-E62A-4677-B666-DF0DDF70C359} = {DFE7F3E3-E62A-4677-B666-DF0DDF70C359}
EndProjectSection
EndProject
@@ -363,6 +350,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ED_editors", "editors\ED_ed
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RNA_makesrna", "makesrna\RNA_makesrna.vcproj", "{8C2BCCF8-4D9E-46D3-BABF-C1545A332CE6}"
ProjectSection(ProjectDependencies) = postProject
+ {FB88301F-F725-401B-ACD7-D2ABBF333B71} = {FB88301F-F725-401B-ACD7-D2ABBF333B71}
{7495FE37-933A-4AC1-BB2A-B3FDB4DE4284} = {7495FE37-933A-4AC1-BB2A-B3FDB4DE4284}
EndProjectSection
EndProject
@@ -582,20 +570,6 @@ Global
{EADC3C5A-6C51-4F03-8038-1553E7D7F740}.Debug|Win32.Build.0 = BlenderPlayer Debug|Win32
{EADC3C5A-6C51-4F03-8038-1553E7D7F740}.Release|Win32.ActiveCfg = BlenderPlayer Release|Win32
{EADC3C5A-6C51-4F03-8038-1553E7D7F740}.Release|Win32.Build.0 = BlenderPlayer Release|Win32
- {A1CCF5B0-08E1-4F00-B417-8BFAC34E5E90}.3D Plugin Debug|Win32.ActiveCfg = Blender Debug|Win32
- {A1CCF5B0-08E1-4F00-B417-8BFAC34E5E90}.3D Plugin Debug|Win32.Build.0 = Blender Debug|Win32
- {A1CCF5B0-08E1-4F00-B417-8BFAC34E5E90}.3D Plugin Release|Win32.ActiveCfg = Blender Debug|Win32
- {A1CCF5B0-08E1-4F00-B417-8BFAC34E5E90}.3D Plugin Release|Win32.Build.0 = Blender Debug|Win32
- {A1CCF5B0-08E1-4F00-B417-8BFAC34E5E90}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
- {A1CCF5B0-08E1-4F00-B417-8BFAC34E5E90}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
- {A1CCF5B0-08E1-4F00-B417-8BFAC34E5E90}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
- {A1CCF5B0-08E1-4F00-B417-8BFAC34E5E90}.Blender Release|Win32.Build.0 = Blender Release|Win32
- {A1CCF5B0-08E1-4F00-B417-8BFAC34E5E90}.BlenderPlayer Debug|Win32.ActiveCfg = Blender Debug|Win32
- {A1CCF5B0-08E1-4F00-B417-8BFAC34E5E90}.BlenderPlayer Release|Win32.ActiveCfg = Blender Release|Win32
- {A1CCF5B0-08E1-4F00-B417-8BFAC34E5E90}.Debug|Win32.ActiveCfg = Blender Debug|Win32
- {A1CCF5B0-08E1-4F00-B417-8BFAC34E5E90}.Debug|Win32.Build.0 = Blender Debug|Win32
- {A1CCF5B0-08E1-4F00-B417-8BFAC34E5E90}.Release|Win32.ActiveCfg = Blender Release|Win32
- {A1CCF5B0-08E1-4F00-B417-8BFAC34E5E90}.Release|Win32.Build.0 = Blender Release|Win32
{DF25E6F2-780C-438B-8AAD-D10CF8B3820A}.3D Plugin Debug|Win32.ActiveCfg = 3D Plugin Debug|Win32
{DF25E6F2-780C-438B-8AAD-D10CF8B3820A}.3D Plugin Debug|Win32.Build.0 = 3D Plugin Debug|Win32
{DF25E6F2-780C-438B-8AAD-D10CF8B3820A}.3D Plugin Release|Win32.ActiveCfg = 3D Plugin Release|Win32
@@ -1048,20 +1022,6 @@ Global
{FFD3C64A-30E2-4BC7-BC8F-51818C320400}.Debug|Win32.Build.0 = 3D Plugin Debug|Win32
{FFD3C64A-30E2-4BC7-BC8F-51818C320400}.Release|Win32.ActiveCfg = 3D Plugin Release|Win32
{FFD3C64A-30E2-4BC7-BC8F-51818C320400}.Release|Win32.Build.0 = 3D Plugin Release|Win32
- {F9850C15-FF0A-429E-9D47-89FB433C9BD8}.3D Plugin Debug|Win32.ActiveCfg = 3D Plugin Debug|Win32
- {F9850C15-FF0A-429E-9D47-89FB433C9BD8}.3D Plugin Debug|Win32.Build.0 = 3D Plugin Debug|Win32
- {F9850C15-FF0A-429E-9D47-89FB433C9BD8}.3D Plugin Release|Win32.ActiveCfg = 3D Plugin Release|Win32
- {F9850C15-FF0A-429E-9D47-89FB433C9BD8}.3D Plugin Release|Win32.Build.0 = 3D Plugin Release|Win32
- {F9850C15-FF0A-429E-9D47-89FB433C9BD8}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
- {F9850C15-FF0A-429E-9D47-89FB433C9BD8}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
- {F9850C15-FF0A-429E-9D47-89FB433C9BD8}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
- {F9850C15-FF0A-429E-9D47-89FB433C9BD8}.Blender Release|Win32.Build.0 = Blender Release|Win32
- {F9850C15-FF0A-429E-9D47-89FB433C9BD8}.BlenderPlayer Debug|Win32.ActiveCfg = Blender Debug|Win32
- {F9850C15-FF0A-429E-9D47-89FB433C9BD8}.BlenderPlayer Release|Win32.ActiveCfg = Blender Release|Win32
- {F9850C15-FF0A-429E-9D47-89FB433C9BD8}.Debug|Win32.ActiveCfg = 3D Plugin Debug|Win32
- {F9850C15-FF0A-429E-9D47-89FB433C9BD8}.Debug|Win32.Build.0 = 3D Plugin Debug|Win32
- {F9850C15-FF0A-429E-9D47-89FB433C9BD8}.Release|Win32.ActiveCfg = 3D Plugin Release|Win32
- {F9850C15-FF0A-429E-9D47-89FB433C9BD8}.Release|Win32.Build.0 = 3D Plugin Release|Win32
{BAC615B0-F1AF-418B-8D23-A10FD8870D6A}.3D Plugin Debug|Win32.ActiveCfg = Blender Release|Win32
{BAC615B0-F1AF-418B-8D23-A10FD8870D6A}.3D Plugin Debug|Win32.Build.0 = Blender Release|Win32
{BAC615B0-F1AF-418B-8D23-A10FD8870D6A}.3D Plugin Release|Win32.ActiveCfg = Blender Release|Win32
@@ -1106,22 +1066,6 @@ Global
{9C71A793-C177-4CAB-8EC5-923D500B39F8}.Debug|Win32.Build.0 = 3D Plugin Debug|Win32
{9C71A793-C177-4CAB-8EC5-923D500B39F8}.Release|Win32.ActiveCfg = 3D Plugin Release|Win32
{9C71A793-C177-4CAB-8EC5-923D500B39F8}.Release|Win32.Build.0 = 3D Plugin Release|Win32
- {E784098D-3ED8-433A-9353-9679415DDDC5}.3D Plugin Debug|Win32.ActiveCfg = 3DPlugin Debug|Win32
- {E784098D-3ED8-433A-9353-9679415DDDC5}.3D Plugin Debug|Win32.Build.0 = 3DPlugin Debug|Win32
- {E784098D-3ED8-433A-9353-9679415DDDC5}.3D Plugin Release|Win32.ActiveCfg = 3DPlugin Debug|Win32
- {E784098D-3ED8-433A-9353-9679415DDDC5}.3D Plugin Release|Win32.Build.0 = 3DPlugin Debug|Win32
- {E784098D-3ED8-433A-9353-9679415DDDC5}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32
- {E784098D-3ED8-433A-9353-9679415DDDC5}.Blender Debug|Win32.Build.0 = Blender Debug|Win32
- {E784098D-3ED8-433A-9353-9679415DDDC5}.Blender Release|Win32.ActiveCfg = Blender Release|Win32
- {E784098D-3ED8-433A-9353-9679415DDDC5}.Blender Release|Win32.Build.0 = Blender Release|Win32
- {E784098D-3ED8-433A-9353-9679415DDDC5}.BlenderPlayer Debug|Win32.ActiveCfg = Blender Debug|Win32
- {E784098D-3ED8-433A-9353-9679415DDDC5}.BlenderPlayer Debug|Win32.Build.0 = Blender Debug|Win32
- {E784098D-3ED8-433A-9353-9679415DDDC5}.BlenderPlayer Release|Win32.ActiveCfg = Blender Release|Win32
- {E784098D-3ED8-433A-9353-9679415DDDC5}.BlenderPlayer Release|Win32.Build.0 = Blender Release|Win32
- {E784098D-3ED8-433A-9353-9679415DDDC5}.Debug|Win32.ActiveCfg = 3DPlugin Debug|Win32
- {E784098D-3ED8-433A-9353-9679415DDDC5}.Debug|Win32.Build.0 = 3DPlugin Debug|Win32
- {E784098D-3ED8-433A-9353-9679415DDDC5}.Release|Win32.ActiveCfg = 3DPlugin Release|Win32
- {E784098D-3ED8-433A-9353-9679415DDDC5}.Release|Win32.Build.0 = 3DPlugin Release|Win32
{EB75F4D6-2970-4A3A-8D99-2BAD7201C0E9}.3D Plugin Debug|Win32.ActiveCfg = 3DPlugin Debug|Win32
{EB75F4D6-2970-4A3A-8D99-2BAD7201C0E9}.3D Plugin Debug|Win32.Build.0 = 3DPlugin Debug|Win32
{EB75F4D6-2970-4A3A-8D99-2BAD7201C0E9}.3D Plugin Release|Win32.ActiveCfg = 3DPlugin Debug|Win32
diff --git a/projectfiles_vc9/blender/blender.vcproj b/projectfiles_vc9/blender/blender.vcproj
index 3111c322311..befaf4e975b 100644
--- a/projectfiles_vc9/blender/blender.vcproj
+++ b/projectfiles_vc9/blender/blender.vcproj
@@ -73,14 +73,15 @@
<Tool
Name="VCLinkerTool"
AdditionalOptions="/MACHINE:I386"
- AdditionalDependencies="SDL.lib freetype2ST.lib gnu_gettext.lib qtmlClient.lib openal_static.lib ws2_32.lib dxguid.lib opengl32.lib libjpeg.lib glu32.lib vfw32.lib winmm.lib libpng_st.lib zlib.lib python25.lib pthreadVSE2.lib pthreadVC2.lib libtiff.lib Half.lib Iex.lib IlmImf.lib Imath.lib IlmThread.lib avcodec-51.lib avformat-52.lib avutil-49.lib swscale-0.lib avdevice-52.lib"
+ AdditionalDependencies="SDL.lib freetype2ST.lib gnu_gettext.lib qtmlClient.lib openal_static.lib ws2_32.lib dxguid.lib opengl32.lib libjpeg.lib glu32.lib vfw32.lib winmm.lib libpng_st.lib zlib.lib python25.lib pthreadVSE2.lib pthreadVC2.lib libtiff.lib Half.lib Iex.lib IlmImf.lib Imath.lib IlmThread.lib avcodec-52.lib avformat-52.lib avutil-50.lib swscale-0.lib avdevice-52.lib"
ShowProgress="0"
- OutputFile="..\..\bin\blender.exe"
+ OutputFile="..\..\..\install\msvc_9\blender.exe"
LinkIncremental="1"
SuppressStartupBanner="true"
AdditionalLibraryDirectories="..\..\..\lib\windows\sdl\lib;..\..\..\lib\windows\ode\lib;..\..\..\lib\windows\zlib\lib;..\..\..\lib\windows\png\lib;..\..\..\lib\windows\jpeg\lib;..\..\..\lib\windows\gettext\lib;..\..\..\lib\windows\python\lib\lib25_vs2008;..\..\..\lib\windows\freetype\lib;..\..\..\lib\windows\tiff\lib;..\..\..\lib\windows\pthreads\lib;..\..\..\lib\windows\openal\lib;..\..\..\lib\windows\openexr\lib_vs2008;..\..\..\lib\windows\QTDevWin\Libraries;..\..\..\build\msvc_9\libs\intern;..\..\..\build\msvc_9\libs\extern;..\..\..\lib\windows\ffmpeg\lib"
IgnoreAllDefaultLibraries="false"
IgnoreDefaultLibraryNames="msvcprt.lib;glut32.lib;libc.lib;libcd.lib;libcpd.lib;libcp.lib;libcmtd.lib;odbc32.lib;odbccp32.lib"
+ GenerateDebugInformation="true"
ProgramDatabaseFile="..\..\..\build\msvc_9\libs\blender.pdb"
SubSystem="1"
RandomizedBaseAddress="1"
@@ -106,7 +107,7 @@
/>
<Tool
Name="VCPostBuildEventTool"
- CommandLine="ECHO Moving libraries and export definitions...&#x0D;&#x0A;MOVE /Y ..\..\bin\blender.lib ..\..\..\build\msvc_9\libs&#x0D;&#x0A;MOVE /Y ..\..\bin\blender.exp ..\..\..\build\msvc_9\libs&#x0D;&#x0A;ECHO Copying required 3rd party dlls...&#x0D;&#x0A;XCOPY /Y ..\..\..\lib\windows\python\lib\lib25_vs2008\python25.dll ..\..\bin&#x0D;&#x0A;XCOPY /Y ..\..\..\lib\windows\gettext\lib\*.dll ..\..\bin&#x0D;&#x0A;XCOPY /Y ..\..\..\lib\windows\sdl\lib\*.dll ..\..\bin&#x0D;&#x0A;XCOPY /Y ..\..\..\lib\windows\tiff\lib\*.dll ..\..\bin&#x0D;&#x0A;XCOPY /Y ..\..\..\lib\windows\pthreads\lib\pthreadVSE2.dll ..\..\bin&#x0D;&#x0A;XCOPY /Y ..\..\..\lib\windows\ffmpeg\lib\*.dll ..\..\bin&#x0D;&#x0A;ECHO Copying language folder&#x0D;&#x0A;ECHO Copying python scripts&#x0D;&#x0A;IF NOT EXIST ..\..\bin\.blender\scripts MKDIR ..\..\bin\.blender\scripts&#x0D;&#x0A;XCOPY /Y ..\..\release\scripts ..\..\bin\.blender\scripts /E&#x0D;&#x0A;ECHO Copying manuals/text&#x0D;&#x0A;XCOPY/Y ..\..\release\text ..\..\bin /E&#x0D;&#x0A;ECHO Done&#x0D;&#x0A;"
+ CommandLine="ECHO Moving libraries and export definitions...&#x0D;&#x0A;MOVE /Y ..\..\bin\blender.lib ..\..\..\build\msvc_9\libs&#x0D;&#x0A;MOVE /Y ..\..\bin\blender.exp ..\..\..\build\msvc_9\libs&#x0D;&#x0A;ECHO Copying required 3rd party dlls...&#x0D;&#x0A;XCOPY /Y ..\..\..\lib\windows\python\lib\lib25_vs2008\python25.dll ..\..\..\install\msvc_9&#x0D;&#x0A;XCOPY /Y ..\..\..\lib\windows\gettext\lib\*.dll ..\..\..\install\msvc_9&#x0D;&#x0A;XCOPY /Y ..\..\..\lib\windows\sdl\lib\*.dll ..\..\..\install\msvc_9&#x0D;&#x0A;XCOPY /Y ..\..\..\lib\windows\tiff\lib\*.dll ..\..\..\install\msvc_9&#x0D;&#x0A;XCOPY /Y ..\..\..\lib\windows\pthreads\lib\pthreadVSE2.dll ..\..\..\install\msvc_9&#x0D;&#x0A;XCOPY /Y ..\..\..\lib\windows\ffmpeg\lib\*.dll ..\..\..\install\msvc_9&#x0D;&#x0A;ECHO Copying language folder&#x0D;&#x0A;IF NOT EXIST ..\..\..\install\msvc_9\.blender MKDIR ..\..\..\install\msvc_9\.blender&#x0D;&#x0A;XCOPY /Y ..\..\bin\.blender ..\..\..\install\msvc_9\.blender /E&#x0D;&#x0A;ECHO Copying python scripts&#x0D;&#x0A;IF NOT EXIST ..\..\..\install\msvc_9\.blender\scripts MKDIR ..\..\..\install\msvc_9\.blender\scripts&#x0D;&#x0A;XCOPY /Y ..\..\release\scripts ..\..\..\install\msvc_9\.blender\scripts /E&#x0D;&#x0A;ECHO Copying python ui scripts&#x0D;&#x0A;IF NOT EXIST ..\..\bin\.blender\ui MKDIR ..\..\..\install\msvc_9\.blender\ui&#x0D;&#x0A;XCOPY /Y ..\..\release\ui ..\..\..\install\msvc_9\.blender\ui /E&#x0D;&#x0A;ECHO Copying manuals/text&#x0D;&#x0A;XCOPY/Y ..\..\release\text ..\..\..\install\msvc_9 /E&#x0D;&#x0A;ECHO Done&#x0D;&#x0A;"
/>
</Configuration>
<Configuration
@@ -167,9 +168,9 @@
<Tool
Name="VCLinkerTool"
AdditionalOptions="/MACHINE:I386&#x0D;&#x0A;"
- AdditionalDependencies="SDL.lib freetype2ST.lib gnu_gettext.lib qtmlClient.lib openal_static.lib ws2_32.lib dxguid.lib opengl32.lib libjpeg.lib glu32.lib vfw32.lib winmm.lib libpng_st.lib zlib.lib python25_d.lib pthreadVSE2.lib pthreadVC2.lib libtiff.lib Half.lib Iex.lib Imath.lib IlmImf.lib IlmThread.lib avcodec-51.lib avformat-52.lib avdevice-52.lib avutil-49.lib swscale-0.lib"
+ AdditionalDependencies="SDL.lib freetype2ST.lib gnu_gettext.lib qtmlClient.lib openal_static.lib ws2_32.lib dxguid.lib opengl32.lib libjpeg.lib glu32.lib vfw32.lib winmm.lib libpng_st.lib zlib.lib python25_d.lib pthreadVSE2.lib pthreadVC2.lib libtiff.lib Half_d.lib Iex_d.lib Imath_d.lib IlmImf_d.lib IlmThread_d.lib avcodec-52.lib avformat-52.lib avdevice-52.lib avutil-50.lib swscale-0.lib"
ShowProgress="0"
- OutputFile="..\..\bin\debug\blender.exe"
+ OutputFile="..\..\..\install\msvc_9d\blender.exe"
LinkIncremental="2"
SuppressStartupBanner="true"
AdditionalLibraryDirectories="..\..\..\lib\windows\sdl\lib;..\..\..\lib\windows\ode\lib;..\..\..\lib\windows\zlib\lib;..\..\..\lib\windows\png\lib;..\..\..\lib\windows\jpeg\lib;..\..\..\lib\windows\pthreads\lib;..\..\..\lib\windows\tiff\lib;..\..\..\lib\windows\gettext\lib;..\..\..\lib\windows\freetype\lib;..\..\..\lib\windows\python\lib\lib25_vs2008;..\..\..\lib\windows\openal\lib;..\..\..\lib\windows\openexr\lib_vs2008;..\..\..\lib\windows\QTDevWin\Libraries;..\..\..\lib\windows\ffmpeg\lib;..\..\..\build\msvc_9\libs\intern\debug;..\..\..\build\msvc_9\libs\extern\debug"
@@ -200,7 +201,7 @@
/>
<Tool
Name="VCPostBuildEventTool"
- CommandLine="ECHO Moving libraries and export definitions...&#x0D;&#x0A;MOVE /Y ..\..\bin\debug\blender.lib ..\..\..\build\msvc_9\libs\debug&#x0D;&#x0A;MOVE /Y ..\..\bin\debug\blender.exp ..\..\..\build\msvc_9\libs\debug&#x0D;&#x0A;MOVE /Y ..\..\bin\debug\blender.ilk ..\..\..\build\msvc_9\libs\debug&#x0D;&#x0A;ECHO Copying required 3rd party dlls...&#x0D;&#x0A;XCOPY /Y ..\..\..\lib\windows\gettext\lib\*.dll ..\..\bin\debug&#x0D;&#x0A;XCOPY /Y ..\..\..\lib\windows\sdl\lib\*.dll ..\..\bin\debug&#x0D;&#x0A;XCOPY /Y ..\..\..\lib\windows\python\lib\lib25_vs2008\python25_d.dll ..\..\bin\debug&#x0D;&#x0A;XCOPY /Y ..\..\..\lib\windows\CRTL\lib\msvcrtd.dll ..\..\bin\debug&#x0D;&#x0A;XCOPY /Y ..\..\..\lib\windows\tiff\lib\*.dll ..\..\bin\debug&#x0D;&#x0A;XCOPY /Y ..\..\..\lib\windows\pthreads\lib\pthreadVSE2.dll ..\..\bin\debug&#x0D;&#x0A;XCOPY /Y ..\..\..\lib\windows\ffmpeg\lib\*.dll ..\..\bin\debug&#x0D;&#x0A;ECHO Copying language folder&#x0D;&#x0A;IF NOT EXIST ..\..\bin\debug\.blender MKDIR ..\..\bin\debug\.blender&#x0D;&#x0A;XCOPY /Y ..\..\bin\.blender ..\..\bin\debug\.blender /E&#x0D;&#x0A;ECHO Copying python scripts&#x0D;&#x0A;IF NOT EXIST ..\..\bin\debug\.blender\scripts MKDIR ..\..\bin\debug\.blender\scripts&#x0D;&#x0A;XCOPY /Y ..\..\release\scripts ..\..\bin\debug\.blender\scripts /E&#x0D;&#x0A;ECHO Copying manuals/text&#x0D;&#x0A;XCOPY/Y ..\..\release\text ..\..\bin\debug /E&#x0D;&#x0A;ECHO Done&#x0D;&#x0A;"
+ CommandLine="ECHO Moving libraries and export definitions...&#x0D;&#x0A;MOVE /Y ..\..\bin\debug\blender.lib ..\..\..\build\msvc_9\libs\debug&#x0D;&#x0A;MOVE /Y ..\..\bin\debug\blender.exp ..\..\..\build\msvc_9\libs\debug&#x0D;&#x0A;MOVE /Y ..\..\bin\debug\blender.ilk ..\..\..\build\msvc_9\libs\debug&#x0D;&#x0A;ECHO Copying required 3rd party dlls...&#x0D;&#x0A;XCOPY /Y ..\..\..\lib\windows\gettext\lib\*.dll ..\..\..\install\msvc_9d&#x0D;&#x0A;XCOPY /Y ..\..\..\lib\windows\sdl\lib\*.dll ..\..\..\install\msvc_9d&#x0D;&#x0A;XCOPY /Y ..\..\..\lib\windows\python\lib\lib25_vs2008\python25_d.dll ..\..\..\install\msvc_9d&#x0D;&#x0A;XCOPY /Y ..\..\..\lib\windows\CRTL\lib\msvcrtd.dll ..\..\..\install\msvc_9d&#x0D;&#x0A;XCOPY /Y ..\..\..\lib\windows\tiff\lib\*.dll ..\..\..\install\msvc_9d&#x0D;&#x0A;XCOPY /Y ..\..\..\lib\windows\pthreads\lib\pthreadVSE2.dll ..\..\..\install\msvc_9d&#x0D;&#x0A;XCOPY /Y ..\..\..\lib\windows\ffmpeg\lib\*.dll ..\..\..\install\msvc_9d&#x0D;&#x0A;ECHO Copying language folder&#x0D;&#x0A;IF NOT EXIST ..\..\..\install\msvc_9d\.blender MKDIR ..\..\..\install\msvc_9d\.blender&#x0D;&#x0A;XCOPY /Y ..\..\bin\.blender ..\..\..\install\msvc_9d\.blender /E&#x0D;&#x0A;ECHO Copying python scripts&#x0D;&#x0A;IF NOT EXIST ..\..\..\install\msvc_9d\.blender\scripts MKDIR ..\..\..\install\msvc_9d\.blender\scripts&#x0D;&#x0A;XCOPY /Y ..\..\release\scripts ..\..\..\install\msvc_9d\.blender\scripts /E&#x0D;&#x0A;ECHO Copying python ui scripts&#x0D;&#x0A;IF NOT EXIST ..\..\..\install\msvc_9d\.blender\ui MKDIR ..\..\..\install\msvc_9d\.blender\ui&#x0D;&#x0A;XCOPY /Y ..\..\release\ui ..\..\..\install\msvc_9d\.blender\ui /E&#x0D;&#x0A;ECHO Copying manuals/text&#x0D;&#x0A;XCOPY/Y ..\..\release\text ..\..\..\install\msvc_9d /E&#x0D;&#x0A;ECHO Done&#x0D;&#x0A;"
/>
</Configuration>
</Configurations>
diff --git a/projectfiles_vc9/blender/blenfont/BLF_blenfont.vcproj b/projectfiles_vc9/blender/blenfont/BLF_blenfont.vcproj
index 0aa9c1a3185..7b92276d4b8 100644
--- a/projectfiles_vc9/blender/blenfont/BLF_blenfont.vcproj
+++ b/projectfiles_vc9/blender/blenfont/BLF_blenfont.vcproj
@@ -44,7 +44,7 @@
Name="VCCLCompilerTool"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..\..\..\intern\guardedalloc;..\..\..\source\blender\makesdna;..\..\..\source\blender\blenlib;..\..\..\source\blender\blenkernel;..\..\..\source\blender\blenfont;..\..\..\source\blender\ftfont;..\..\..\..\lib\windows\freetype\include;..\..\..\source\blender\editors\include;..\..\..\..\build\msvc_9\extern\glew\include"
- PreprocessorDefinitions="WIN32;NDEBUG;_LIB;WITH_BF_INTERNATIONAL;WITH_FREETYPE2"
+ PreprocessorDefinitions="WIN32;NDEBUG;_LIB;WITH_BF_INTERNATIONAL"
StringPooling="true"
RuntimeLibrary="0"
EnableFunctionLevelLinking="true"
@@ -120,7 +120,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\..\..\intern\guardedalloc;..\..\..\source\blender\makesdna;..\..\..\source\blender\blenlib;..\..\..\source\blender\blenkernel;..\..\..\source\blender\blenfont;..\..\..\source\blender\ftfont;..\..\..\..\lib\windows\freetype\include;..\..\..\source\blender\editors\include;..\..\..\..\build\msvc_9\extern\glew\include"
- PreprocessorDefinitions="WIN32,_DEBUG,_LIB,WITH_BF_INTERNATIONAL,WITH_FREETYPE2"
+ PreprocessorDefinitions="WIN32,_DEBUG,_LIB,WITH_BF_INTERNATIONAL"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
UsePrecompiledHeader="0"
@@ -210,6 +210,10 @@
Name="intern"
>
<File
+ RelativePath="..\..\..\source\blender\blenfont\intern\blf_font_helv10.h"
+ >
+ </File>
+ <File
RelativePath="..\..\..\source\blender\blenfont\intern\blf_internal.h"
>
</File>
diff --git a/projectfiles_vc9/blender/blenkernel/BKE_blenkernel.vcproj b/projectfiles_vc9/blender/blenkernel/BKE_blenkernel.vcproj
index a181ee9a4e9..8a53eed0c63 100644
--- a/projectfiles_vc9/blender/blenkernel/BKE_blenkernel.vcproj
+++ b/projectfiles_vc9/blender/blenkernel/BKE_blenkernel.vcproj
@@ -119,7 +119,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\..\..\..\lib\windows\pthreads\include;..\..\..\..\lib\windows\python\include\python2.5;..\..\..\..\lib\windows\zlib\include;..\..\..\..\lib\windows\sdl\include;..\..\..\..\lib\windows\ffmpeg\include;..\..\..\..\build\msvc_9\intern\bmfont\include;..\..\..\..\build\msvc_9\intern\bsp\include;..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\..\build\msvc_9\intern\decimation\include;..\..\..\..\build\msvc_9\intern\elbeem\include;..\..\..\..\build\msvc_9\intern\iksolver\include;..\..\..\source\blender;..\..\..\source\blender\avi;..\..\..\source\blender\imbuf;..\..\..\source\blender\editors\include;..\..\..\source\blender\python;..\..\..\source\blender\blenlib;..\..\..\source\blender\blenkernel;..\..\..\source\blender\makesdna;..\..\..\source\blender\makesrna;..\..\..\source\blender\nodes;..\..\..\source\blender\blenloader;..\..\..\source\kernel\gen_system;..\..\..\source\blender\renderconverter;..\..\..\source\blender\render\extern\include;..\..\..\source\gameengine\SoundSystem;..\..\..\..\build\msvc_9\extern\verse\include;..\..\..\..\build\msvc_9\intern\opennl\include;..\..\..\..\build\msvc_9\extern\bullet\include;..\..\..\..\build\msvc_9\extern\glew\include;..\..\..\source\blender\gpu"
- PreprocessorDefinitions="_DEBUG;WIN32;_LIB;WITH_FREETYPE2;WITH_OPENEXR;WITH_DDS;WITH_BULLET;WITH_FFMPEG"
+ PreprocessorDefinitions="_DEBUG;WIN32;_LIB;WITH_OPENEXR;WITH_DDS;WITH_BULLET;WITH_FFMPEG"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
DefaultCharIsUnsigned="true"
@@ -194,7 +194,7 @@
Name="VCCLCompilerTool"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..\..\..\..\lib\windows\pthreads\include;..\..\..\..\lib\windows\python\include\python2.5;..\..\..\..\lib\windows\zlib\include;..\..\..\..\lib\windows\sdl\include;..\..\..\..\lib\windows\ffmpeg\include;..\..\..\..\build\msvc_9\intern\bmfont\include;..\..\..\..\build\msvc_9\intern\bsp\include;..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\..\build\msvc_9\intern\decimation\include;..\..\..\..\build\msvc_9\intern\elbeem\include;..\..\..\..\build\msvc_9\intern\iksolver\include;..\..\..\source\blender;..\..\..\source\blender\avi;..\..\..\source\blender\imbuf;..\..\..\source\blender\editors\include;..\..\..\source\blender\python;..\..\..\source\blender\blenlib;..\..\..\source\blender\blenkernel;..\..\..\source\blender\makesdna;..\..\..\source\blender\makesrna;..\..\..\source\blender\nodes;..\..\..\source\blender\blenloader;..\..\..\source\kernel\gen_system;..\..\..\source\blender\renderconverter;..\..\..\source\blender\render\extern\include;..\..\..\source\gameengine\SoundSystem;..\..\..\..\build\msvc_9\extern\verse\include;..\..\..\..\build\msvc_9\intern\opennl\include;..\..\..\..\build\msvc_9\extern\bullet\include;..\..\..\..\build\msvc_9\extern\glew\include;..\..\..\source\blender\gpu"
- PreprocessorDefinitions="NDEBUG;WIN32;_LIB;WITH_FREETYPE2;UNWRAPPER;WITH_OPENEXR;WITH_DDS;WITH_BULLET=1;WITH_FFMPEG"
+ PreprocessorDefinitions="NDEBUG;WIN32;_LIB;UNWRAPPER;WITH_OPENEXR;WITH_DDS;WITH_BULLET=1;WITH_FFMPEG"
StringPooling="true"
RuntimeLibrary="0"
EnableFunctionLevelLinking="true"
@@ -344,7 +344,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\..\..\..\lib\windows\pthreads\include;..\..\..\..\lib\windows\python\include\python2.5;..\..\..\..\lib\windows\zlib\include;..\..\..\..\lib\windows\sdl\include;..\..\..\..\lib\windows\ffmpeg\include;..\..\..\..\build\msvc_9\intern\bmfont\include;..\..\..\..\build\msvc_9\intern\bsp\include;..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\..\build\msvc_9\intern\decimation\include;..\..\..\..\build\msvc_9\intern\elbeem\include;..\..\..\..\build\msvc_9\intern\iksolver\include;..\..\..\source\blender;..\..\..\source\blender\avi;..\..\..\source\blender\imbuf;..\..\..\source\blender\editors\include;..\..\..\source\blender\python;..\..\..\source\blender\blenlib;..\..\..\source\blender\blenkernel;..\..\..\source\blender\makesdna;..\..\..\source\blender\makesrna;..\..\..\source\blender\nodes;..\..\..\source\blender\blenloader;..\..\..\source\kernel\gen_system;..\..\..\source\blender\renderconverter;..\..\..\source\blender\render\extern\include;..\..\..\source\gameengine\SoundSystem;..\..\..\..\build\msvc_9\extern\verse\include;..\..\..\..\build\msvc_9\intern\opennl\include;..\..\..\..\build\msvc_9\extern\bullet\include;..\..\..\..\build\msvc_9\extern\glew\include;..\..\..\source\blender\gpu"
- PreprocessorDefinitions="_DEBUG;WIN32;_LIB;WITH_FREETYPE2;WITH_FFMPEG"
+ PreprocessorDefinitions="_DEBUG;WIN32;_LIB;WITH_FFMPEG"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
DefaultCharIsUnsigned="true"
@@ -419,7 +419,7 @@
Name="VCCLCompilerTool"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..\..\..\..\lib\windows\pthreads\include;..\..\..\..\lib\windows\python\include\python2.5;..\..\..\..\lib\windows\zlib\include;..\..\..\..\lib\windows\sdl\include;..\..\..\..\lib\windows\ffmpeg\include;..\..\..\..\build\msvc_9\intern\bmfont\include;..\..\..\..\build\msvc_9\intern\bsp\include;..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\..\build\msvc_9\intern\decimation\include;..\..\..\..\build\msvc_9\intern\elbeem\include;..\..\..\..\build\msvc_9\intern\iksolver\include;..\..\..\source\blender;..\..\..\source\blender\avi;..\..\..\source\blender\imbuf;..\..\..\source\blender\editors\include;..\..\..\source\blender\python;..\..\..\source\blender\blenlib;..\..\..\source\blender\blenkernel;..\..\..\source\blender\makesdna;..\..\..\source\blender\makesrna;..\..\..\source\blender\nodes;..\..\..\source\blender\blenloader;..\..\..\source\kernel\gen_system;..\..\..\source\blender\renderconverter;..\..\..\source\blender\render\extern\include;..\..\..\source\gameengine\SoundSystem;..\..\..\..\build\msvc_9\extern\verse\include;..\..\..\..\build\msvc_9\intern\opennl\include;..\..\..\..\build\msvc_9\extern\bullet\include;..\..\..\..\build\msvc_9\extern\glew\include;..\..\..\source\blender\gpu"
- PreprocessorDefinitions="NDEBUG;WIN32;_LIB;WITH_FREETYPE2;UNWRAPPER;WITH_FFMPEG"
+ PreprocessorDefinitions="NDEBUG;WIN32;_LIB;UNWRAPPER;WITH_FFMPEG"
StringPooling="true"
RuntimeLibrary="0"
EnableFunctionLevelLinking="true"
@@ -618,6 +618,10 @@
>
</File>
<File
+ RelativePath="..\..\..\source\blender\blenkernel\intern\gpencil.c"
+ >
+ </File>
+ <File
RelativePath="..\..\..\source\blender\blenkernel\intern\group.c"
>
</File>
diff --git a/projectfiles_vc9/blender/blenlib/BLI_blenlib.vcproj b/projectfiles_vc9/blender/blenlib/BLI_blenlib.vcproj
index 502f7cb86b4..e31436b9280 100644
--- a/projectfiles_vc9/blender/blenlib/BLI_blenlib.vcproj
+++ b/projectfiles_vc9/blender/blenlib/BLI_blenlib.vcproj
@@ -44,7 +44,7 @@
Name="VCCLCompilerTool"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..\..\..\..\lib\windows\zlib\include;..\..\..\..\lib\windows\pthreads\include;..\..\..\..\lib\windows\freetype\include;..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\source\blender\include;..\..\..\source\blender\blenlib;..\..\..\source\blender\python;..\..\..\source\blender\makesdna;..\..\..\source\blender\blenkernel"
- PreprocessorDefinitions="NDEBUG,WIN32,_LIB,WITH_FREETYPE2"
+ PreprocessorDefinitions="NDEBUG,WIN32,_LIB"
StringPooling="true"
RuntimeLibrary="2"
EnableFunctionLevelLinking="true"
@@ -120,7 +120,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\..\..\..\lib\windows\zlib\include;..\..\..\..\lib\windows\pthreads\include;..\..\..\..\lib\windows\freetype\include;..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\source\blender\include;..\..\..\source\blender\blenlib;..\..\..\source\blender\python;..\..\..\source\blender\makesdna;..\..\..\source\blender\blenkernel"
- PreprocessorDefinitions="_DEBUG;WIN32;_LIB;WITH_FREETYPE2;_CRT_SECURE_NO_WARNINGS"
+ PreprocessorDefinitions="_DEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
DefaultCharIsUnsigned="true"
@@ -196,7 +196,7 @@
Name="VCCLCompilerTool"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..\..\..\..\lib\windows\zlib\include;..\..\..\..\lib\windows\pthreads\include;..\..\..\..\lib\windows\freetype\include;..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\source\blender\include;..\..\..\source\blender\blenlib;..\..\..\source\blender\python;..\..\..\source\blender\makesdna;..\..\..\source\blender\blenkernel"
- PreprocessorDefinitions="NDEBUG;WIN32;_LIB;WITH_FREETYPE2"
+ PreprocessorDefinitions="NDEBUG;WIN32;_LIB"
StringPooling="true"
RuntimeLibrary="0"
EnableFunctionLevelLinking="true"
@@ -347,7 +347,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\..\..\..\lib\windows\zlib\include;..\..\..\..\lib\windows\pthreads\include;..\..\..\..\lib\windows\freetype\include;..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\source\blender\include;..\..\..\source\blender\blenlib;..\..\..\source\blender\python;..\..\..\source\blender\makesdna;..\..\..\source\blender\blenkernel"
- PreprocessorDefinitions="_DEBUG,WIN32,_LIB,WITH_FREETYPE2"
+ PreprocessorDefinitions="_DEBUG,WIN32,_LIB"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
DefaultCharIsUnsigned="true"
@@ -423,7 +423,7 @@
Name="VCCLCompilerTool"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..\..\..\..\lib\windows\zlib\include;..\..\..\..\lib\windows\pthreads\include;..\..\..\..\lib\windows\freetype\include;..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\source\blender\include;..\..\..\source\blender\blenlib;..\..\..\source\blender\python;..\..\..\source\blender\makesdna;..\..\..\source\blender\blenkernel"
- PreprocessorDefinitions="NDEBUG,WIN32,_LIB,WITH_FREETYPE2"
+ PreprocessorDefinitions="NDEBUG,WIN32,_LIB"
StringPooling="true"
RuntimeLibrary="0"
EnableFunctionLevelLinking="true"
diff --git a/projectfiles_vc9/blender/editors/ED_editors.vcproj b/projectfiles_vc9/blender/editors/ED_editors.vcproj
index 0655c455f66..dea66fb87c3 100644
--- a/projectfiles_vc9/blender/editors/ED_editors.vcproj
+++ b/projectfiles_vc9/blender/editors/ED_editors.vcproj
@@ -44,7 +44,7 @@
Name="VCCLCompilerTool"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="..\..\..\..\lib\windows\QTDevWin\CIncludes;..\..\..\..\lib\windows\sdl\include;..\..\..\..\lib\windows\python\include\python2.5;..\..\..\..\build\msvc_9\intern\bsp\include;..\..\..\..\build\msvc_9\intern\ghost\include;..\..\..\..\build\msvc_9\intern\elbeem\include;..\..\..\..\build\msvc_9\intern\opennl\include;..\..\..\..\build\msvc_9\intern\bmfont\include;..\..\..\..\build\msvc_9\intern\blenkey\include;..\..\..\..\build\msvc_9\intern\decimation\include;..\..\..\..\build\msvc_9\intern\memutil\include;..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\..\build\msvc_9\intern\soundsystem\include;..\..\..\source\blender;..\..\..\source\blender\img;..\..\..\source\blender\verify;..\..\..\source\blender\ftfont;..\..\..\source\blender\misc;..\..\..\source\blender\imbuf;..\..\..\source\blender\blenlib;..\..\..\source\blender\python;..\..\..\source\blender\editors\include;..\..\..\source\blender\renderui;..\..\..\source\blender\blenloader;..\..\..\source\blender\quicktime;..\..\..\source\blender\blenkernel;..\..\..\source\blender\blenfont;..\..\..\source\blender\makesdna;..\..\..\source\blender\makesrna;..\..\..\source\blender\nodes;..\..\..\source\blender\windowmanager;..\..\..\source\blender\blenpluginapi;..\..\..\source\blender\renderconverter;..\..\..\source\blender\readstreamglue;..\..\..\source\blender\render\extern\include;..\..\..\source\blender\radiosity\extern\include;..\..\..\source\kernel\gen_system;..\..\..\source\gameengine\network;..\..\..\source\gameengine\soundsystem\snd_openal;..\..\..\..\build\msvc_9\extern\verse\include;..\..\..\..\lib\windows\pthreads\include;..\..\..\..\lib\windows\ffmpeg\include;..\..\..\..\build\msvc_9\extern\glew\include;..\..\..\source\blender\gpu"
- PreprocessorDefinitions="NDEBUG;WIN32;_LIB;_CONSOLE;GAMEBLENDER=1;WITH_QUICKTIME;INTERNATIONAL;WITH_OPENEXR;WITH_DDS;WITH_BULLET=1;WITH_FFMPEG"
+ PreprocessorDefinitions="NDEBUG;WIN32;_LIB;_CONSOLE;GAMEBLENDER=1;WITH_QUICKTIME;INTERNATIONAL;WITH_FREETYPE2;WITH_INTERNATIONAL;WITH_OPENEXR;WITH_DDS;WITH_BULLET=1;WITH_FFMPEG"
StringPooling="true"
RuntimeLibrary="0"
EnableFunctionLevelLinking="true"
@@ -119,7 +119,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\..\..\..\lib\windows\QTDevWin\CIncludes;..\..\..\..\lib\windows\sdl\include;..\..\..\..\lib\windows\python\include\python2.5;..\..\..\..\build\msvc_9\intern\bsp\include;..\..\..\..\build\msvc_9\intern\ghost\include;..\..\..\..\build\msvc_9\intern\elbeem\include;..\..\..\..\build\msvc_9\intern\opennl\include;..\..\..\..\build\msvc_9\intern\bmfont\include;..\..\..\..\build\msvc_9\intern\blenkey\include;..\..\..\..\build\msvc_9\intern\decimation\include;..\..\..\..\build\msvc_9\intern\memutil\include;..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\..\build\msvc_9\intern\soundsystem\include;..\..\..\source\blender;..\..\..\source\blender\img;..\..\..\source\blender\verify;..\..\..\source\blender\ftfont;..\..\..\source\blender\misc;..\..\..\source\blender\imbuf;..\..\..\source\blender\blenlib;..\..\..\source\blender\python;..\..\..\source\blender\editors\include;..\..\..\source\blender\renderui;..\..\..\source\blender\blenloader;..\..\..\source\blender\quicktime;..\..\..\source\blender\blenkernel;..\..\..\source\blender\blenfont;..\..\..\source\blender\makesdna;..\..\..\source\blender\makesrna;..\..\..\source\blender\nodes;..\..\..\source\blender\windowmanager;..\..\..\source\blender\blenpluginapi;..\..\..\source\blender\renderconverter;..\..\..\source\blender\readstreamglue;..\..\..\source\blender\render\extern\include;..\..\..\source\blender\radiosity\extern\include;..\..\..\source\kernel\gen_system;..\..\..\source\gameengine\network;..\..\..\source\gameengine\soundsystem\snd_openal;..\..\..\..\build\msvc_9\extern\verse\include;..\..\..\..\lib\windows\pthreads\include;..\..\..\..\lib\windows\ffmpeg\include;..\..\..\..\build\msvc_9\extern\glew\include;..\..\..\source\blender\gpu"
- PreprocessorDefinitions="_DEBUG;WIN32;_LIB;_CONSOLE;GAMEBLENDER;WITH_QUICKTIME;INTERNATIONAL;WITH_OPENEXR;WITH_DDS;WITH_BULLET = 1;WITH_FFMPEG"
+ PreprocessorDefinitions="_DEBUG;WIN32;_LIB;_CONSOLE;GAMEBLENDER;WITH_QUICKTIME;INTERNATIONAL;WITH_BF_INTERNATIONAL;WITH_FREETYPE2;WITH_OPENEXR;WITH_DDS;WITH_BULLET = 1;WITH_FFMPEG"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
DefaultCharIsUnsigned="true"
@@ -222,6 +222,10 @@
>
</File>
<File
+ RelativePath="..\..\..\source\blender\editors\include\ED_image.h"
+ >
+ </File>
+ <File
RelativePath="..\..\..\source\blender\editors\include\ED_interface.h"
>
</File>
@@ -282,6 +286,10 @@
>
</File>
<File
+ RelativePath="..\..\..\source\blender\editors\include\ED_text.h"
+ >
+ </File>
+ <File
RelativePath="..\..\..\source\blender\editors\include\ED_transform.h"
>
</File>
@@ -314,10 +322,6 @@
>
</File>
<File
- RelativePath="..\..\..\source\blender\editors\include\UI_text.h"
- >
- </File>
- <File
RelativePath="..\..\..\source\blender\editors\include\UI_view2d.h"
>
</File>
@@ -367,6 +371,10 @@
>
</File>
<File
+ RelativePath="..\..\..\source\blender\editors\interface\interface_anim.c"
+ >
+ </File>
+ <File
RelativePath="..\..\..\source\blender\editors\interface\interface_draw.c"
>
</File>
@@ -395,6 +403,10 @@
>
</File>
<File
+ RelativePath="..\..\..\source\blender\editors\interface\interface_style.c"
+ >
+ </File>
+ <File
RelativePath="..\..\..\source\blender\editors\interface\interface_utils.c"
>
</File>
@@ -411,10 +423,6 @@
>
</File>
<File
- RelativePath="..\..\..\source\blender\editors\interface\text.c"
- >
- </File>
- <File
RelativePath="..\..\..\source\blender\editors\interface\view2d.c"
>
</File>
@@ -475,6 +483,10 @@
>
</File>
<File
+ RelativePath="..\..\..\source\blender\editors\space_view3d\view3d_toolbar.c"
+ >
+ </File>
+ <File
RelativePath="..\..\..\source\blender\editors\space_view3d\view3d_view.c"
>
</File>
@@ -588,42 +600,6 @@
</File>
</Filter>
<Filter
- Name="space_graph"
- >
- <File
- RelativePath="..\..\..\source\blender\editors\space_graph\graph_buttons.c"
- >
- </File>
- <File
- RelativePath="..\..\..\source\blender\editors\space_graph\graph_draw.c"
- >
- </File>
- <File
- RelativePath="..\..\..\source\blender\editors\space_graph\graph_edit.c"
- >
- </File>
- <File
- RelativePath="..\..\..\source\blender\editors\space_graph\graph_header.c"
- >
- </File>
- <File
- RelativePath="..\..\..\source\blender\editors\space_graph\graph_intern.h"
- >
- </File>
- <File
- RelativePath="..\..\..\source\blender\editors\space_graph\graph_ops.c"
- >
- </File>
- <File
- RelativePath="..\..\..\source\blender\editors\space_graph\graph_select.c"
- >
- </File>
- <File
- RelativePath="..\..\..\source\blender\editors\space_graph\space_graph.c"
- >
- </File>
- </Filter>
- <Filter
Name="space_image"
>
<File
@@ -707,14 +683,6 @@
>
</File>
<File
- RelativePath="..\..\..\source\blender\editors\space_buttons\buttons_object.c"
- >
- </File>
- <File
- RelativePath="..\..\..\source\blender\editors\space_buttons\buttons_scene.c"
- >
- </File>
- <File
RelativePath="..\..\..\source\blender\editors\space_buttons\space_buttons.c"
>
</File>
@@ -959,6 +927,10 @@
>
</File>
<File
+ RelativePath="..\..\..\source\blender\editors\animation\anim_intern.h"
+ >
+ </File>
+ <File
RelativePath="..\..\..\source\blender\editors\animation\anim_ipo_utils.c"
>
</File>
@@ -971,6 +943,10 @@
>
</File>
<File
+ RelativePath="..\..\..\source\blender\editors\animation\drivers.c"
+ >
+ </File>
+ <File
RelativePath="..\..\..\source\blender\editors\animation\keyframes_draw.c"
>
</File>
@@ -986,6 +962,10 @@
RelativePath="..\..\..\source\blender\editors\animation\keyframing.c"
>
</File>
+ <File
+ RelativePath="..\..\..\source\blender\editors\animation\keyingsets.c"
+ >
+ </File>
</Filter>
<Filter
Name="object"
@@ -1015,6 +995,10 @@
>
</File>
<File
+ RelativePath="..\..\..\source\blender\editors\object\object_modifier.c"
+ >
+ </File>
+ <File
RelativePath="..\..\..\source\blender\editors\object\object_ops.c"
>
</File>
@@ -1267,7 +1251,7 @@
>
</File>
<File
- RelativePath="..\..\..\source\blender\editors\gpencil\gpencil.c"
+ RelativePath="..\..\..\source\blender\editors\gpencil\gpencil_edit.c"
>
</File>
<File
@@ -1327,6 +1311,42 @@
>
</File>
</Filter>
+ <Filter
+ Name="space_graph"
+ >
+ <File
+ RelativePath="..\..\..\source\blender\editors\space_graph\graph_buttons.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\source\blender\editors\space_graph\graph_draw.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\source\blender\editors\space_graph\graph_edit.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\source\blender\editors\space_graph\graph_header.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\source\blender\editors\space_graph\graph_intern.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\source\blender\editors\space_graph\graph_ops.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\source\blender\editors\space_graph\graph_select.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\source\blender\editors\space_graph\space_graph.c"
+ >
+ </File>
+ </Filter>
</Files>
<Globals>
</Globals>
diff --git a/projectfiles_vc9/blender/makesrna/RNA_makesrna.vcproj b/projectfiles_vc9/blender/makesrna/RNA_makesrna.vcproj
index 92dd343ab8f..0f3d2b01030 100644
--- a/projectfiles_vc9/blender/makesrna/RNA_makesrna.vcproj
+++ b/projectfiles_vc9/blender/makesrna/RNA_makesrna.vcproj
@@ -44,7 +44,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
- AdditionalIncludeDirectories="..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\source\blender;..\..\..\source\blender\blenlib;..\..\..\source\blender\makesrna;..\..\..\source\blender\blenkernel;..\..\..\..\lib\windows\pthreads\include;..\..\..\source\blender\makesdna;..\..\..\source\blender\windowmanager"
+ AdditionalIncludeDirectories="..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\source\blender;..\..\..\source\blender\blenlib;..\..\..\source\blender\makesrna;..\..\..\source\blender\editors\include;..\..\..\source\blender\blenkernel;..\..\..\..\lib\windows\pthreads\include;..\..\..\source\blender\makesdna;..\..\..\source\blender\windowmanager"
PreprocessorDefinitions="_DEBUG,WIN32,_CONSOLE"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
@@ -138,7 +138,7 @@
<Tool
Name="VCCLCompilerTool"
InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\source\blender;..\..\..\source\blender\blenlib;..\..\..\source\blender\makesrna;..\..\..\source\blender\blenkernel;..\..\..\..\lib\windows\pthreads\include;..\..\..\source\blender\makesdna;..\..\..\source\blender\windowmanager"
+ AdditionalIncludeDirectories="..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\source\blender;..\..\..\source\blender\blenlib;..\..\..\source\blender\editors\include;..\..\..\source\blender\makesrna;..\..\..\source\blender\blenkernel;..\..\..\..\lib\windows\pthreads\include;..\..\..\source\blender\makesdna;..\..\..\source\blender\windowmanager"
PreprocessorDefinitions="NDEBUG,WIN32,_CONSOLE"
StringPooling="true"
RuntimeLibrary="0"
@@ -231,7 +231,7 @@
<Tool
Name="VCCLCompilerTool"
InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\source\blender;..\..\..\source\blender\blenlib;..\..\..\source\blender\makesrna;..\..\..\source\blender\blenkernel;..\..\..\..\lib\windows\pthreads\include;..\..\..\source\blender\makesdna;..\..\..\source\blender\windowmanager"
+ AdditionalIncludeDirectories="..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\source\blender;..\..\..\source\blender\blenlib;..\..\..\source\blender\makesrna;..\..\..\source\blender\editors\include;..\..\..\source\blender\blenkernel;..\..\..\..\lib\windows\pthreads\include;..\..\..\source\blender\makesdna;..\..\..\source\blender\windowmanager"
PreprocessorDefinitions="NDEBUG,WIN32,_CONSOLE"
StringPooling="true"
RuntimeLibrary="2"
@@ -324,7 +324,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
- AdditionalIncludeDirectories="..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\source\blender;..\..\..\source\blender\blenlib;..\..\..\source\blender\makesrna;..\..\..\source\blender\blenkernel;..\..\..\..\lib\windows\pthreads\include;..\..\..\source\blender\makesdna;..\..\..\source\blender\windowmanager"
+ AdditionalIncludeDirectories="..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\source\blender;..\..\..\source\blender\blenlib;..\..\..\source\blender\makesrna;..\..\..\source\blender\editors\include;..\..\..\source\blender\blenkernel;..\..\..\..\lib\windows\pthreads\include;..\..\..\source\blender\makesdna;..\..\..\source\blender\windowmanager"
PreprocessorDefinitions="_DEBUG;WIN32;_CONSOLE"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
@@ -420,7 +420,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
- AdditionalIncludeDirectories="..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\source\blender;..\..\..\source\blender\blenlib;..\..\..\source\blender\makesrna;..\..\..\source\blender\blenkernel;..\..\..\..\lib\windows\pthreads\include;..\..\..\source\blender\makesdna;..\..\..\source\blender\windowmanager"
+ AdditionalIncludeDirectories="..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\source\blender;..\..\..\source\blender\blenlib;..\..\..\source\blender\makesrna;..\..\..\source\blender\editors\include;..\..\..\source\blender\blenkernel;..\..\..\..\lib\windows\pthreads\include;..\..\..\source\blender\makesdna;..\..\..\source\blender\windowmanager"
PreprocessorDefinitions="_DEBUG,WIN32,_CONSOLE"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
@@ -516,7 +516,7 @@
<Tool
Name="VCCLCompilerTool"
InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\source\blender;..\..\..\source\blender\blenlib;..\..\..\source\blender\makesrna;..\..\..\source\blender\blenkernel;..\..\..\..\lib\windows\pthreads\include;..\..\..\source\blender\makesdna;..\..\..\source\blender\windowmanager"
+ AdditionalIncludeDirectories="..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\source\blender;..\..\..\source\blender\blenlib;..\..\..\source\blender\makesrna;..\..\..\source\blender\editors\include;..\..\..\source\blender\blenkernel;..\..\..\..\lib\windows\pthreads\include;..\..\..\source\blender\makesdna;..\..\..\source\blender\windowmanager"
PreprocessorDefinitions="NDEBUG,WIN32,_CONSOLE"
StringPooling="true"
RuntimeLibrary="0"
@@ -589,6 +589,10 @@
Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
>
<File
+ RelativePath="..\..\..\source\blender\editors\interface\interface_api.c"
+ >
+ </File>
+ <File
RelativePath="..\..\..\source\blender\makesrna\intern\makesrna.c"
>
</File>
@@ -645,6 +649,10 @@
>
</File>
<File
+ RelativePath="..\..\..\source\blender\makesrna\intern\rna_fcurve.c"
+ >
+ </File>
+ <File
RelativePath="..\..\..\source\blender\makesrna\intern\rna_fluidsim.c"
>
</File>
@@ -769,6 +777,10 @@
>
</File>
<File
+ RelativePath="..\..\..\source\blender\makesrna\intern\rna_ui.c"
+ >
+ </File>
+ <File
RelativePath="..\..\..\source\blender\makesrna\intern\rna_userdef.c"
>
</File>
diff --git a/projectfiles_vc9/blender/makesrna/RNA_rna.vcproj b/projectfiles_vc9/blender/makesrna/RNA_rna.vcproj
index dd63bc8e70b..65aa5e6f3f4 100644
--- a/projectfiles_vc9/blender/makesrna/RNA_rna.vcproj
+++ b/projectfiles_vc9/blender/makesrna/RNA_rna.vcproj
@@ -43,7 +43,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
- AdditionalIncludeDirectories="..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\source\blender\makesdna;..\..\..\source\blender\makesrna;..\..\..\source\blender\blenlib;..\..\..\source\blender\blenkernel;..\..\..\source\blender\windowmanager"
+ AdditionalIncludeDirectories="..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\source\blender\makesdna;..\..\..\source\blender\makesrna;..\..\..\source\blender\blenlib;..\..\..\source\blender\blenkernel;..\..\..\source\blender\windowmanager;..\..\..\source\blender\editors\include"
PreprocessorDefinitions="WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS"
MinimalRebuild="true"
BasicRuntimeChecks="3"
@@ -114,7 +114,7 @@
Name="VCCLCompilerTool"
Optimization="2"
EnableIntrinsicFunctions="true"
- AdditionalIncludeDirectories="..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\source\blender\makesdna;..\..\..\source\blender\makesrna;..\..\..\source\blender\blenlib;..\..\..\source\blender\blenkernel;..\..\..\source\blender\windowmanager"
+ AdditionalIncludeDirectories="..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\source\blender\makesdna;..\..\..\source\blender\makesrna;..\..\..\source\blender\blenlib;..\..\..\source\blender\blenkernel;..\..\..\source\blender\windowmanager;..\..\..\source\blender\editors\include"
PreprocessorDefinitions="WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS"
MinimalRebuild="true"
RuntimeLibrary="0"
@@ -215,6 +215,10 @@
>
</File>
<File
+ RelativePath="..\..\..\source\blender\makesrna\intern\rna.crna_fcurve_gen.c"
+ >
+ </File>
+ <File
RelativePath="..\..\..\source\blender\makesrna\intern\rna.crna_fluidsim_gen.c"
>
</File>
@@ -339,6 +343,10 @@
>
</File>
<File
+ RelativePath="..\..\..\source\blender\makesrna\intern\rna.crna_ui_gen.c"
+ >
+ </File>
+ <File
RelativePath="..\..\..\source\blender\makesrna\intern\rna.crna_userdef_gen.c"
>
</File>
diff --git a/projectfiles_vc9/blender/nodes/nodes.vcproj b/projectfiles_vc9/blender/nodes/nodes.vcproj
index a289fffb3c2..cbe1954c14e 100644
--- a/projectfiles_vc9/blender/nodes/nodes.vcproj
+++ b/projectfiles_vc9/blender/nodes/nodes.vcproj
@@ -43,7 +43,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\..\..\..\lib\windows\python\include\python2.5;..\..\..\..\lib\windows\zlib\include;..\..\..\..\build\msvc_9\intern\bsp\include;..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\..\build\msvc_9\intern\decimation\include;..\..\..\..\build\msvc_9\intern\elbeem\include;..\..\..\..\build\msvc_9\intern\iksolver\include;..\..\..\source\blender;..\..\..\source\blender\avi;..\..\..\source\blender\imbuf;..\..\..\source\blender\editors\include;..\..\..\source\blender\python;..\..\..\source\blender\blenlib;..\..\..\source\blender\blenkernel;..\..\..\source\blender\makesdna;..\..\..\source\blender\nodes;..\..\..\source\blender\blenloader;..\..\..\source\kernel\gen_system;..\..\..\source\blender\renderconverter;..\..\..\source\blender\render\extern\include;..\..\..\source\gameengine\SoundSystem;..\..\..\..\build\msvc_9\extern\verse\include;..\..\..\..\build\msvc_9\extern\glew\include;..\..\..\source\blender\gpu"
- PreprocessorDefinitions="_DEBUG;WIN32;_LIB;WITH_FREETYPE2"
+ PreprocessorDefinitions="_DEBUG;WIN32;_LIB"
MinimalRebuild="false"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
@@ -113,7 +113,7 @@
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories="..\..\..\..\lib\windows\python\include\python2.5;..\..\..\..\lib\windows\zlib\include;..\..\..\..\build\msvc_9\intern\bsp\include;..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\..\build\msvc_9\intern\decimation\include;..\..\..\..\build\msvc_9\intern\elbeem\include;..\..\..\..\build\msvc_9\intern\iksolver\include;..\..\..\source\blender;..\..\..\source\blender\avi;..\..\..\source\blender\imbuf;..\..\..\source\blender\editors\include;..\..\..\source\blender\python;..\..\..\source\blender\blenlib;..\..\..\source\blender\blenkernel;..\..\..\source\blender\makesdna;..\..\..\source\blender\nodes;..\..\..\source\blender\blenloader;..\..\..\source\kernel\gen_system;..\..\..\source\blender\renderconverter;..\..\..\source\blender\render\extern\include;..\..\..\source\gameengine\SoundSystem;..\..\..\..\build\msvc_9\extern\verse\include;..\..\..\..\build\msvc_9\extern\glew\include;..\..\..\source\blender\gpu"
- PreprocessorDefinitions="_DEBUG;WIN32;_LIB;WITH_FREETYPE2"
+ PreprocessorDefinitions="_DEBUG;WIN32;_LIB"
BasicRuntimeChecks="0"
RuntimeLibrary="0"
DefaultCharIsUnsigned="true"
@@ -183,7 +183,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\..\..\..\lib\windows\python\include\python2.5;..\..\..\..\lib\windows\zlib\include;..\..\..\..\build\msvc_9\intern\bsp\include;..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\..\build\msvc_9\intern\decimation\include;..\..\..\..\build\msvc_9\intern\elbeem\include;..\..\..\..\build\msvc_9\intern\iksolver\include;..\..\..\source\blender;..\..\..\source\blender\avi;..\..\..\source\blender\imbuf;..\..\..\source\blender\editors\include;..\..\..\source\blender\python;..\..\..\source\blender\blenlib;..\..\..\source\blender\blenkernel;..\..\..\source\blender\makesdna;..\..\..\source\blender\nodes;..\..\..\source\blender\blenloader;..\..\..\source\kernel\gen_system;..\..\..\source\blender\renderconverter;..\..\..\source\blender\render\extern\include;..\..\..\source\gameengine\SoundSystem;..\..\..\..\build\msvc_9\extern\verse\include;..\..\..\..\build\msvc_9\extern\glew\include;..\..\..\source\blender\gpu"
- PreprocessorDefinitions="_DEBUG;WIN32;_LIB;WITH_FREETYPE2;WITH_OPENEXR"
+ PreprocessorDefinitions="_DEBUG;WIN32;_LIB;WITH_OPENEXR"
MinimalRebuild="false"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
@@ -253,7 +253,7 @@
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories="..\..\..\..\lib\windows\python\include\python2.5;..\..\..\..\lib\windows\zlib\include;..\..\..\..\build\msvc_9\intern\bsp\include;..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\..\build\msvc_9\intern\decimation\include;..\..\..\..\build\msvc_9\intern\elbeem\include;..\..\..\..\build\msvc_9\intern\iksolver\include;..\..\..\source\blender;..\..\..\source\blender\avi;..\..\..\source\blender\imbuf;..\..\..\source\blender\editors\include;..\..\..\source\blender\python;..\..\..\source\blender\blenlib;..\..\..\source\blender\blenkernel;..\..\..\source\blender\makesdna;..\..\..\source\blender\nodes;..\..\..\source\blender\blenloader;..\..\..\source\kernel\gen_system;..\..\..\source\blender\renderconverter;..\..\..\source\blender\render\extern\include;..\..\..\source\gameengine\SoundSystem;..\..\..\..\build\msvc_9\extern\verse\include;..\..\..\..\build\msvc_9\extern\glew\include;..\..\..\source\blender\gpu"
- PreprocessorDefinitions="NDEBUG;WIN32;_LIB;WITH_FREETYPE2, WITH_OPENEXR"
+ PreprocessorDefinitions="NDEBUG;WIN32;_LIB;WITH_OPENEXR"
BasicRuntimeChecks="0"
RuntimeLibrary="0"
DefaultCharIsUnsigned="true"
diff --git a/projectfiles_vc9/gameengine/gameplayer/ghost/GP_ghost.vcproj b/projectfiles_vc9/gameengine/gameplayer/ghost/GP_ghost.vcproj
index fe20152388a..01ccd916edb 100644
--- a/projectfiles_vc9/gameengine/gameplayer/ghost/GP_ghost.vcproj
+++ b/projectfiles_vc9/gameengine/gameplayer/ghost/GP_ghost.vcproj
@@ -72,7 +72,7 @@
<Tool
Name="VCLinkerTool"
AdditionalOptions="/MACHINE:I386&#x0D;&#x0A;"
- AdditionalDependencies="odelib.lib fmodvc.lib ws2_32.lib vfw32.lib odbc32.lib odbccp32.lib opengl32.lib glu32.lib openal_static.lib libjpeg.lib dxguid.lib libeay32.lib libpng.lib libz.lib qtmlClient.lib SDL.lib freetype2ST.lib python25_d.lib pthreadVSE2.lib pthreadVC2.lib Half.lib Iex.lib IlmImf.lib IlmThread.lib Imath.lib avcodec-51.lib avformat-52.lib avutil-49.lib swscale-0.lib avdevice-52.lib"
+ AdditionalDependencies="odelib.lib fmodvc.lib ws2_32.lib vfw32.lib odbc32.lib odbccp32.lib opengl32.lib glu32.lib openal_static.lib libjpeg.lib dxguid.lib libeay32.lib libpng.lib libz.lib qtmlClient.lib SDL.lib freetype2ST.lib python25_d.lib pthreadVSE2.lib pthreadVC2.lib Half_d.lib Iex_d.lib IlmImf_d.lib IlmThread_d.lib Imath_d.lib avcodec-52.lib avformat-52.lib avutil-50.lib swscale-0.lib avdevice-52.lib"
ShowProgress="0"
OutputFile="..\..\..\..\bin\debug\blenderplayer.exe"
LinkIncremental="2"
@@ -166,7 +166,7 @@
<Tool
Name="VCLinkerTool"
AdditionalOptions="/MACHINE:I386"
- AdditionalDependencies="odelib.lib fmodvc.lib ws2_32.lib vfw32.lib odbc32.lib odbccp32.lib opengl32.lib glu32.lib openal_static.lib libjpeg.lib dxguid.lib libeay32.lib libpng.lib libz.lib qtmlClient.lib SDL.lib freetype2ST.lib python25_d.lib pthreadVSE2.lib pthreadVC2.lib Half.lib Iex.lib IlmImf.lib IlmThread.lib Imath.lib avcodec-51.lib avformat-52.lib avutil-49.lib swscale-0.lib avdevice-52.lib"
+ AdditionalDependencies="odelib.lib fmodvc.lib ws2_32.lib vfw32.lib odbc32.lib odbccp32.lib opengl32.lib glu32.lib openal_static.lib libjpeg.lib dxguid.lib libeay32.lib libpng.lib libz.lib qtmlClient.lib SDL.lib freetype2ST.lib python25.lib pthreadVSE2.lib pthreadVC2.lib Half.lib Iex.lib IlmImf.lib IlmThread.lib Imath.lib avcodec-52.lib avformat-52.lib avutil-50.lib swscale-0.lib avdevice-52.lib"
OutputFile="..\..\..\..\bin\blenderplayer.exe"
LinkIncremental="1"
SuppressStartupBanner="true"
diff --git a/projectfiles_vc9/gameengine/ketsji/KX_ketsji.vcproj b/projectfiles_vc9/gameengine/ketsji/KX_ketsji.vcproj
index 62a0d7a7bfa..80c34bef223 100644
--- a/projectfiles_vc9/gameengine/ketsji/KX_ketsji.vcproj
+++ b/projectfiles_vc9/gameengine/ketsji/KX_ketsji.vcproj
@@ -514,6 +514,10 @@
>
</File>
<File
+ RelativePath="..\..\..\source\gameengine\Ketsji\KX_Dome.cpp"
+ >
+ </File>
+ <File
RelativePath="..\..\..\source\gameengine\Ketsji\KX_EmptyObject.cpp"
>
</File>
@@ -574,6 +578,10 @@
>
</File>
<File
+ RelativePath="..\..\..\source\gameengine\Ketsji\KX_PythonInitTypes.cpp"
+ >
+ </File>
+ <File
RelativePath="..\..\..\source\gameengine\Ketsji\KX_RayCast.cpp"
>
</File>
@@ -799,6 +807,10 @@
>
</File>
<File
+ RelativePath="..\..\..\source\gameengine\Ketsji\KX_Dome.h"
+ >
+ </File>
+ <File
RelativePath="..\..\..\source\gameengine\Ketsji\KX_EmptyObject.h"
>
</File>
@@ -875,6 +887,10 @@
>
</File>
<File
+ RelativePath="..\..\..\source\gameengine\Ketsji\KX_PythonInitTypes.h"
+ >
+ </File>
+ <File
RelativePath="..\..\..\source\gameengine\Ketsji\KX_RayCast.h"
>
</File>
diff --git a/projectfiles_vc9/gameengine/physics/PHY_Physics/PHY_Bullet/PHY_Bullet.vcproj b/projectfiles_vc9/gameengine/physics/PHY_Physics/PHY_Bullet/PHY_Bullet.vcproj
index 9d55727e90f..e6991592d40 100644
--- a/projectfiles_vc9/gameengine/physics/PHY_Physics/PHY_Bullet/PHY_Bullet.vcproj
+++ b/projectfiles_vc9/gameengine/physics/PHY_Physics/PHY_Bullet/PHY_Bullet.vcproj
@@ -4,6 +4,7 @@
Version="9,00"
Name="PHY_Bullet"
ProjectGUID="{E90C7BC2-CF30-4A60-A8F2-0050D592E358}"
+ RootNamespace="PHY_Bullet"
Keyword="Win32Proj"
TargetFrameworkVersion="131072"
>
@@ -41,7 +42,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
- AdditionalIncludeDirectories="..\..\..\..\..\..\build\msvc_9\intern\moto\include;..\..\..\..\..\..\build\msvc_9\intern\string\include;..\..\..\..\..\..\build\msvc_9\extern\bullet\include;..\..\..\..\..\source\gameengine\Physics\common;..\..\..\..\..\source\gameengine\Physics\Bullet;..\..\..\..\..\source\gameengine\Rasterizer;..\..\..\..\..\source\kernel\gen_system"
+ AdditionalIncludeDirectories="..\..\..\..\..\..\lib\windows\python\include\python2.5;..\..\..\..\..\..\build\msvc_9\intern\moto\include;..\..\..\..\..\..\build\msvc_9\intern\string\include;..\..\..\..\..\..\build\msvc_9\extern\bullet\include;..\..\..\..\..\..\build\msvc_9\extern\glew\include;..\..\..\..\..\..\build\msvc_9\intern\SoundSystem\include;..\..\..\..\..\source\gameengine\Physics\common;..\..\..\..\..\source\gameengine\Physics\Bullet;..\..\..\..\..\source\gameengine\Rasterizer;..\..\..\..\..\source\gameengine\Ketsji;..\..\..\..\..\source\gameengine\Expressions;..\..\..\..\..\source\gameengine\GameLogic;..\..\..\..\..\source\gameengine\SceneGraph;..\..\..\..\..\source\kernel\gen_system;..\..\..\..\..\source\blender\makesdna"
PreprocessorDefinitions="WIN32;_DEBUG;_LIB"
MinimalRebuild="false"
BasicRuntimeChecks="3"
@@ -109,7 +110,7 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="..\..\..\..\..\..\build\msvc_9\intern\moto\include;..\..\..\..\..\..\build\msvc_9\intern\string\include;..\..\..\..\..\..\build\msvc_9\extern\bullet\include;..\..\..\..\..\source\gameengine\Physics\common;..\..\..\..\..\source\gameengine\Physics\Bullet;..\..\..\..\..\source\gameengine\Rasterizer;..\..\..\..\..\source\kernel\gen_system"
+ AdditionalIncludeDirectories="..\..\..\..\..\..\lib\windows\python\include\python2.5;..\..\..\..\..\..\build\msvc_9\intern\moto\include;..\..\..\..\..\..\build\msvc_9\intern\string\include;..\..\..\..\..\..\build\msvc_9\extern\bullet\include;..\..\..\..\..\..\build\msvc_9\extern\glew\include;..\..\..\..\..\..\build\msvc_9\intern\SoundSystem\include;..\..\..\..\..\source\gameengine\Physics\common;..\..\..\..\..\source\gameengine\Physics\Bullet;..\..\..\..\..\source\gameengine\Rasterizer;..\..\..\..\..\source\gameengine\Ketsji;..\..\..\..\..\source\gameengine\Expressions;..\..\..\..\..\source\gameengine\GameLogic;..\..\..\..\..\source\gameengine\SceneGraph;..\..\..\..\..\source\kernel\gen_system;..\..\..\..\..\source\blender\makesdna"
PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
RuntimeLibrary="0"
UsePrecompiledHeader="0"
@@ -175,7 +176,7 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="..\..\..\..\..\..\build\msvc_9\intern\moto\include;..\..\..\..\..\..\build\msvc_9\intern\string\include;..\..\..\..\..\..\build\msvc_9\extern\bullet\include;..\..\..\..\..\source\gameengine\Physics\common;..\..\..\..\..\source\gameengine\Physics\Bullet;..\..\..\..\..\source\gameengine\Rasterizer;..\..\..\..\..\source\kernel\gen_system"
+ AdditionalIncludeDirectories="..\..\..\..\..\..\lib\windows\python\include\python2.5;..\..\..\..\..\..\build\msvc_9\intern\moto\include;..\..\..\..\..\..\build\msvc_9\intern\string\include;..\..\..\..\..\..\build\msvc_9\extern\bullet\include;..\..\..\..\..\..\build\msvc_9\extern\glew\include;..\..\..\..\..\..\build\msvc_9\intern\SoundSystem\include;..\..\..\..\..\source\gameengine\Physics\common;..\..\..\..\..\source\gameengine\Physics\Bullet;..\..\..\..\..\source\gameengine\Rasterizer;..\..\..\..\..\source\gameengine\Ketsji;..\..\..\..\..\source\gameengine\Expressions;..\..\..\..\..\source\gameengine\GameLogic;..\..\..\..\..\source\gameengine\SceneGraph;..\..\..\..\..\source\kernel\gen_system;..\..\..\..\..\source\blender\makesdna"
PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
RuntimeLibrary="0"
UsePrecompiledHeader="0"
@@ -242,7 +243,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
- AdditionalIncludeDirectories="..\..\..\..\..\..\build\msvc_9\intern\moto\include;..\..\..\..\..\..\build\msvc_9\intern\string\include;..\..\..\..\..\..\build\msvc_9\extern\bullet\include;..\..\..\..\..\source\gameengine\Physics\common;..\..\..\..\..\source\gameengine\Physics\Bullet;..\..\..\..\..\source\gameengine\Rasterizer;..\..\..\..\..\source\kernel\gen_system"
+ AdditionalIncludeDirectories="..\..\..\..\..\..\lib\windows\python\include\python2.5;..\..\..\..\..\..\build\msvc_9\intern\moto\include;..\..\..\..\..\..\build\msvc_9\intern\string\include;..\..\..\..\..\..\build\msvc_9\extern\bullet\include;..\..\..\..\..\..\build\msvc_9\extern\glew\include;..\..\..\..\..\..\build\msvc_9\intern\SoundSystem\include;..\..\..\..\..\source\gameengine\Physics\common;..\..\..\..\..\source\gameengine\Physics\Bullet;..\..\..\..\..\source\gameengine\Rasterizer;..\..\..\..\..\source\gameengine\Ketsji;..\..\..\..\..\source\gameengine\Expressions;..\..\..\..\..\source\gameengine\GameLogic;..\..\..\..\..\source\gameengine\SceneGraph;..\..\..\..\..\source\kernel\gen_system;..\..\..\..\..\source\blender\makesdna"
PreprocessorDefinitions="WIN32;_DEBUG;_LIB"
MinimalRebuild="false"
BasicRuntimeChecks="3"
@@ -311,7 +312,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
- AdditionalIncludeDirectories="..\..\..\..\..\..\build\msvc_9\intern\moto\include;..\..\..\..\..\..\build\msvc_9\intern\string\include;..\..\..\..\..\..\build\msvc_9\extern\bullet\include;..\..\..\..\..\source\gameengine\Physics\common;..\..\..\..\..\source\gameengine\Physics\Bullet;..\..\..\..\..\source\gameengine\Rasterizer;..\..\..\..\..\source\kernel\gen_system"
+ AdditionalIncludeDirectories="..\..\..\..\..\..\lib\windows\python\include\python2.5;..\..\..\..\..\..\build\msvc_9\intern\moto\include;..\..\..\..\..\..\build\msvc_9\intern\string\include;..\..\..\..\..\..\build\msvc_9\extern\bullet\include;..\..\..\..\..\..\build\msvc_9\extern\glew\include;..\..\..\..\..\..\build\msvc_9\intern\SoundSystem\include;..\..\..\..\..\source\gameengine\Physics\common;..\..\..\..\..\source\gameengine\Physics\Bullet;..\..\..\..\..\source\gameengine\Rasterizer;..\..\..\..\..\source\gameengine\Ketsji;..\..\..\..\..\source\gameengine\Expressions;..\..\..\..\..\source\gameengine\GameLogic;..\..\..\..\..\source\gameengine\SceneGraph;..\..\..\..\..\source\kernel\gen_system;..\..\..\..\..\source\blender\makesdna"
PreprocessorDefinitions="WIN32;_DEBUG;_LIB"
MinimalRebuild="false"
BasicRuntimeChecks="3"
@@ -379,7 +380,7 @@
/>
<Tool
Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="..\..\..\..\..\..\build\msvc_9\intern\moto\include;..\..\..\..\..\..\build\msvc_9\intern\string\include;..\..\..\..\..\..\build\msvc_9\extern\bullet\include;..\..\..\..\..\source\gameengine\Physics\common;..\..\..\..\..\source\gameengine\Physics\Bullet;..\..\..\..\..\source\gameengine\Rasterizer;..\..\..\..\..\source\kernel\gen_system"
+ AdditionalIncludeDirectories="..\..\..\..\..\..\lib\windows\python\include\python2.5;..\..\..\..\..\..\build\msvc_9\intern\moto\include;..\..\..\..\..\..\build\msvc_9\intern\string\include;..\..\..\..\..\..\build\msvc_9\extern\bullet\include;..\..\..\..\..\..\build\msvc_9\extern\glew\include;..\..\..\..\..\..\build\msvc_9\intern\SoundSystem\include;..\..\..\..\..\source\gameengine\Physics\common;..\..\..\..\..\source\gameengine\Physics\Bullet;..\..\..\..\..\source\gameengine\Rasterizer;..\..\..\..\..\source\gameengine\Ketsji;..\..\..\..\..\source\gameengine\Expressions;..\..\..\..\..\source\gameengine\GameLogic;..\..\..\..\..\source\gameengine\SceneGraph;..\..\..\..\..\source\kernel\gen_system;..\..\..\..\..\source\blender\makesdna"
PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
RuntimeLibrary="2"
UsePrecompiledHeader="0"
@@ -430,6 +431,10 @@
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
>
<File
+ RelativePath="..\..\..\..\..\source\gameengine\Physics\Bullet\CcdGraphicController.cpp"
+ >
+ </File>
+ <File
RelativePath="..\..\..\..\..\source\gameengine\Physics\Bullet\CcdPhysicsController.cpp"
>
</File>
@@ -444,6 +449,10 @@
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
>
<File
+ RelativePath="..\..\..\..\..\source\gameengine\Physics\Bullet\CcdGraphicController.h"
+ >
+ </File>
+ <File
RelativePath="..\..\..\..\..\source\gameengine\Physics\Bullet\CcdPhysicsController.h"
>
</File>
diff --git a/projectfiles_vc9/gameengine/physics/PHY_Physics/PHY_Physics.vcproj b/projectfiles_vc9/gameengine/physics/PHY_Physics/PHY_Physics.vcproj
index 582aed500ac..5441c5bd4f1 100644
--- a/projectfiles_vc9/gameengine/physics/PHY_Physics/PHY_Physics.vcproj
+++ b/projectfiles_vc9/gameengine/physics/PHY_Physics/PHY_Physics.vcproj
@@ -4,6 +4,7 @@
Version="9,00"
Name="PHY_Physics"
ProjectGUID="{E109F1A5-FDD3-4F56-A1C4-96867EEA4C5B}"
+ RootNamespace="PHY_Physics"
TargetFrameworkVersion="131072"
>
<Platforms>
@@ -470,6 +471,14 @@
Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
>
<File
+ RelativePath="..\..\..\..\source\gameengine\Physics\common\PHY_IController.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\source\gameengine\Physics\common\PHY_IGraphicController.cpp"
+ >
+ </File>
+ <File
RelativePath="..\..\..\..\source\gameengine\Physics\common\PHY_IMotionState.cpp"
>
</File>
@@ -495,6 +504,14 @@
>
</File>
<File
+ RelativePath="..\..\..\..\source\gameengine\Physics\common\PHY_IController.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\source\gameengine\Physics\common\PHY_IGraphicController.h"
+ >
+ </File>
+ <File
RelativePath="..\..\..\..\source\gameengine\Physics\common\PHY_IMotionState.h"
>
</File>
diff --git a/release/Makefile b/release/Makefile
index 43a369d8f77..b2066d0e8d6 100644
--- a/release/Makefile
+++ b/release/Makefile
@@ -1,4 +1,5 @@
-#
+# -*- mode: gnumakefile; tab-width: 8; indent-tabs-mode: t; -*-
+# vim: tabstop=8
# $Id$
#
# ***** BEGIN GPL LICENSE BLOCK *****
@@ -163,6 +164,9 @@ endif
@echo "----> Copy python infrastructure"
@[ ! -d scripts ] || cp -r scripts $(CONFDIR)/scripts
+ @echo "----> Copy python UI files"
+ @[ ! -d ui ] || cp -r ui $(CONFDIR)/ui
+
ifeq ($(OS),darwin)
@echo "----> Move .blender to .app/Contents/MacOS/"
@rm -fr $(DISTDIR)/blender$(EXT0)/Contents/MacOS/.blender
@@ -197,16 +201,16 @@ pkg: install
@$(COMPRESS) $(COMPRESSFLAGS) $(NAN_OBJDIR)/$(VERSION)/$(BLENDNAME)$(EXT1)
endif
@#echo "****> Clean up temporary distribution directory"
- @rm -fr $(DISTDIR)
+ @#rm -fr $(DISTDIR)
@echo "****> $(NAN_OBJDIR)/$(VERSION)/$(BLENDNAME)$(EXT1)$(EXT2) is ready"
version: FORCE
@echo "*---> Create $(BLENDNAME) package"
makedirs: FORCE
- @#echo "****> Create package directory $(VERSION) if necessary"
+ @echo "****> Create package directory $(VERSION) if necessary"
@[ -d $(NAN_OBJDIR)/$(VERSION) ] || mkdir $(NAN_OBJDIR)/$(VERSION)
- @#echo "****> Prepare temporary distribution directory"
+ @echo "****> Remove and recreate temporary distribution directory"
@rm -fr $(DISTDIR)
@mkdir $(DISTDIR)
diff --git a/release/VERSION b/release/VERSION
index da3f7c3bab4..8821853a13d 100644
--- a/release/VERSION
+++ b/release/VERSION
@@ -1 +1 @@
-2.5 devel
+2.5-devel
diff --git a/release/datafiles/blenderbuttons b/release/datafiles/blenderbuttons
index aa71ab4cfae..219dacd8870 100644
--- a/release/datafiles/blenderbuttons
+++ b/release/datafiles/blenderbuttons
Binary files differ
diff --git a/release/datafiles/prvicons b/release/datafiles/prvicons
index 5863afefbdc..2f715172209 100644
--- a/release/datafiles/prvicons
+++ b/release/datafiles/prvicons
Binary files differ
diff --git a/release/getversion.py b/release/getversion.py
index a64a6189b6f..fd52129bf4a 100755
--- a/release/getversion.py
+++ b/release/getversion.py
@@ -1,4 +1,7 @@
#!/usr/bin/env python
+# -*- mode: python; tab-width: 4; indent-tabs-mode: t; -*-
+# vim: tabstop=4
+# $Id#
# ***** BEGIN GPL LICENSE BLOCK *****
#
# This program is free software; you can redistribute it and/or
@@ -18,9 +21,9 @@
# The Original Code is Copyright (C) 2008 by the Blender Foundation
# All rights reserved.
#
-# The Original Code is: all of this file.
+# The Original Code is: see repository.
#
-# Contributor(s): none yet.
+# Contributor(s): see repository.
#
import sys, os, re
@@ -49,7 +52,11 @@ for line in infile.readlines():
infile.close()
+# Major was changed to float, but minor is still a string
if minor and major:
- print str(major)+"."+minor
+ if minor == "0":
+ print "%.2f" % major
+ else:
+ print "%.2f.%s" % (major, minor)
else:
print "unknownversion"
diff --git a/release/scripts/3ds_import.py b/release/scripts/3ds_import.py
index 028b9633606..1963d2e7433 100644
--- a/release/scripts/3ds_import.py
+++ b/release/scripts/3ds_import.py
@@ -844,11 +844,13 @@ def load_3ds(filename, PREF_UI= True):
# IMPORT_AS_INSTANCE= Blender.Draw.Create(0)
IMPORT_CONSTRAIN_BOUNDS= Blender.Draw.Create(10.0)
IMAGE_SEARCH= Blender.Draw.Create(1)
+ APPLY_MATRIX= Blender.Draw.Create(0)
# Get USER Options
pup_block= [\
('Size Constraint:', IMPORT_CONSTRAIN_BOUNDS, 0.0, 1000.0, 'Scale the model by 10 until it reacehs the size constraint. Zero Disables.'),\
('Image Search', IMAGE_SEARCH, 'Search subdirs for any assosiated images (Warning, may be slow)'),\
+ ('Transform Fix', APPLY_MATRIX, 'Workaround for object transformations importing incorrectly'),\
#('Group Instance', IMPORT_AS_INSTANCE, 'Import objects into a new scene and group, creating an instance in the current scene.'),\
]
@@ -861,6 +863,7 @@ def load_3ds(filename, PREF_UI= True):
IMPORT_CONSTRAIN_BOUNDS= IMPORT_CONSTRAIN_BOUNDS.val
# IMPORT_AS_INSTANCE= IMPORT_AS_INSTANCE.val
IMAGE_SEARCH = IMAGE_SEARCH.val
+ APPLY_MATRIX = APPLY_MATRIX.val
if IMPORT_CONSTRAIN_BOUNDS:
BOUNDS_3DS[:]= [1<<30, 1<<30, 1<<30, -1<<30, -1<<30, -1<<30]
@@ -887,6 +890,8 @@ def load_3ds(filename, PREF_UI= True):
if ob.type=='Mesh':
me= ob.getData(mesh=1)
me.verts.delete([me.verts[0],])
+ if not APPLY_MATRIX:
+ me.transform(ob.matrixWorld.copy().invert())
# Done DUMMYVERT
"""
diff --git a/release/scripts/bevel_center.py b/release/scripts/bevel_center.py
index 063c6380483..637ed08127f 100644
--- a/release/scripts/bevel_center.py
+++ b/release/scripts/bevel_center.py
@@ -1,5 +1,5 @@
#!BPY
-# coding: utf-8
+# -*- coding: utf-8 -*-
""" Registration info for Blender menus
Name: 'Bevel Center'
Blender: 243
diff --git a/release/scripts/bpymodules/dxfLibrary.py b/release/scripts/bpymodules/dxfLibrary.py
index 96caa50cc41..5390be084ee 100644
--- a/release/scripts/bpymodules/dxfLibrary.py
+++ b/release/scripts/bpymodules/dxfLibrary.py
@@ -1,6 +1,6 @@
#dxfLibrary.py : provides functions for generating DXF files
# --------------------------------------------------------------------------
-__version__ = "v1.28beta - 2008.12.13"
+__version__ = "v1.29beta - 2008.12.28"
__author__ = "Stani Michiels(Stani), Remigiusz Fiedler(migius)"
__license__ = "GPL"
__url__ = "http://wiki.blender.org/index.php/Scripts/Manual/Export/autodesk_dxf"
@@ -18,9 +18,11 @@ IDEAs:
-
TODO:
-- add support for SPLINEs
+- add support for SPLINEs, (bad idea, cause DXF r14 object :(
History
+v1.29 - 2008.12.28 by Yorik
+- modif POLYLINE to support bulge segments
v1.28 - 2008.12.13 by Steeve/BlenderArtists
- bugfix for EXTMIN/EXTMAX to suit Cycas-CAD
v1.27 - 2008.10.07 by migius
@@ -297,41 +299,60 @@ class Line(_Entity):
#-----------------------------------------------
class PolyLine(_Entity):
def __init__(self,points,org_point=[0,0,0],flag=0,width=None,**common):
+ #width = number, or width = list [width_start=None, width_end=None]
+ #for 2d-polyline: points = [ [x, y, z, width_start=None, width_end=None, bulge=0 or None], ...]
+ #for 3d-polyline: points = [ [x, y, z], ...]
+ #for polyface: points = [points_list, faces_list]
_Entity.__init__(self,**common)
self.points=points
self.org_point=org_point
self.flag=flag
- if self.flag==64:
+ if self.flag & POLYFACE_MESH:
+ self.polyface=True
self.points=points[0]
self.faces=points[1]
self.p_count=len(self.points)
self.f_count=len(self.faces)
- self.width=width
+ elif not self.flag & POLYLINE_3D:
+ self.polyline2d = True
+ if width:
+ if type(width)!='list':
+ width=[width,width]
+ self.width=width
def __str__(self):
result= ' 0\nPOLYLINE\n%s 70\n%s\n' %(self._common(),self.flag)
#print 'deb: self._common()', self._common() #----------
result+=' 66\n1\n'
result+='%s\n' %_point(self.org_point)
- if self.flag==64:
+ if self.polyface:
result+=' 71\n%s\n' %self.p_count
result+=' 72\n%s\n' %self.f_count
+ elif self.polyline2d:
+ if self.width: result+=' 40\n%s\n 41\n%s\n' %(self.width[0],self.width[1])
for point in self.points:
result+=' 0\nVERTEX\n'
result+=' 8\n%s\n' %self.layer
- result+='%s\n' %_point(point)
- if self.flag==64: result+=' 70\n192\n'
- if self.width: result+=' 40\n%s\n 41\n%s\n' %(self.width,self.width)
- if self.flag==64:
- for face in self.faces:
- result+=' 0\nVERTEX\n'
- result+=' 8\n%s\n' %self.layer
- result+='%s\n' %_point(self.org_point)
- result+=' 70\n128\n'
- result+=' 71\n%s\n' %face[0]
- result+=' 72\n%s\n' %face[1]
- result+=' 73\n%s\n' %face[2]
- if len(face)==4: result+=' 74\n%s\n' %face[3]
+ result+='%s\n' %_point(point[0:2])
+ if self.polyface:
+ result+=' 70\n192\n'
+ elif self.polyline2d:
+ if len(point)>4:
+ width1, width2 = point[3], point[4]
+ if width1!=None: result+=' 40\n%s\n' %width1
+ if width2!=None: result+=' 41\n%s\n' %width2
+ if len(point)==6:
+ bulge = point[5]
+ if bulge: result+=' 42\n%s\n' %bulge
+ for face in self.faces:
+ result+=' 0\nVERTEX\n'
+ result+=' 8\n%s\n' %self.layer
+ result+='%s\n' %_point(self.org_point)
+ result+=' 70\n128\n'
+ result+=' 71\n%s\n' %face[0]
+ result+=' 72\n%s\n' %face[1]
+ result+=' 73\n%s\n' %face[2]
+ if len(face)==4: result+=' 74\n%s\n' %face[3]
result+=' 0\nSEQEND\n'
result+=' 8\n%s\n' %self.layer
return result
@@ -711,5 +732,5 @@ def test():
if __name__=='__main__':
if not copy:
Draw.PupMenu('Error%t|This script requires a full python install')
- main()
+ else: main()
\ No newline at end of file
diff --git a/release/scripts/export_dxf.py b/release/scripts/export_dxf.py
index 061e29b81c7..99c6acaceab 100644
--- a/release/scripts/export_dxf.py
+++ b/release/scripts/export_dxf.py
@@ -1,14 +1,14 @@
#!BPY
"""
- Name: 'Autodesk DXF (.dxf)'
+ Name: 'Autodesk (.dxf .dwg)'
Blender: 247
Group: 'Export'
- Tooltip: 'Export geometry to DXF-r12 (Drawing eXchange Format).'
+ Tooltip: 'Export geometry to Autocad DXF/DWG-r12 (Drawing eXchange Format).'
"""
-__version__ = "v1.27beta - 2008.10.07"
-__author__ = "Remigiusz Fiedler (AKA migius)"
+__version__ = "v1.29 - 2009.04.11"
+__author__ = "Remigiusz Fiedler (AKA migius), Alexandros Sigalas (AKA alxarch), Stani Michiels"
__license__ = "GPL"
__url__ = "http://wiki.blender.org/index.php/Scripts/Manual/Export/autodesk_dxf"
__bpydoc__ ="""The script exports Blender geometry to DXF format r12 version.
@@ -25,8 +25,9 @@ url: %s
IDEAs:
- correct normals for POLYLINE-POLYFACE via proper point-order
- HPGL output for 2d and flattened 3d content
-
+
TODO:
+- export dupligroups and dupliverts as blocks ( option for the user to decide )
- optimize back-faces removal (probably needs matrix transform)
- optimize POLYFACE routine: remove double-vertices
- optimize POLYFACE routine: remove unused vertices
@@ -36,6 +37,11 @@ TODO:
- write drawing extends for automatic view positioning in CAD
History
+v1.29 - 2009.04.11 by migius
+- added DWG support, Stani Michiels idea for binding an extern DXF-DWG-converter
+v1.28 - 2009.02.05 by alxarch
+- added option to apply modifiers on exported meshes
+- added option to also export duplicates (from dupliverts etc)
v1.27 - 2008.10.07 by migius
- exclude Stani's DXF-Library to extern module
v1.26 - 2008.10.05 by migius
@@ -86,14 +92,95 @@ ______________________________________________________________
import Blender
-from Blender import Mathutils, Window, Scene, sys, Draw
+from Blender import Mathutils, Window, Scene, sys, Draw, Mesh
import BPyMessages
+import os
+import subprocess
+
+#print os.sys.platform
+#print dir(os.sys.version)
#import dxfLibrary
#reload(dxfLibrary)
from dxfLibrary import *
+#-------- DWG support ------------------------------------------
+extCONV_OK = True
+extCONV = 'DConvertCon.exe'
+extCONV_PATH = os.path.join(Blender.Get('scriptsdir'),extCONV)
+if not os.path.isfile(extCONV_PATH):
+ extCONV_OK = False
+ extCONV_TEXT = 'DWG-Exporter: Abort, nothing done!|\
+Copy first %s into Blender script directory.|\
+More details in online Help.' %extCONV
+else:
+ if not os.sys.platform.startswith('win'):
+ # check if Wine installed:
+ if subprocess.Popen(('which', 'winepath'), stdout=subprocess.PIPE).stdout.read().strip():
+ extCONV_PATH = 'wine %s'%extCONV_PATH
+ else:
+ extCONV_OK = False
+ extCONV_TEXT = 'DWG-Exporter: Abort, nothing done!|\
+The external DWG-converter (%s) needs Wine installed on your system.|\
+More details in online Help.' %extCONV
+#print 'extCONV_PATH = ', extCONV_PATH
+
+
+
+#-----------------------------------------------------
+def dupTest(object):
+ """
+ Checks objects for duplicates enabled (any type)
+ object: Blender Object.
+ Returns: Boolean - True if object has any kind of duplicates enabled.
+ """
+ if (object.enableDupFrames or \
+ object.enableDupGroup or \
+ object.enableDupVerts):
+ return True
+ else:
+ return False
+
+def getObjectsAndDuplis(oblist,MATRICES=False,HACK=False):
+ """
+ Return a list of real objects and duplicates and optionally their matrices
+ oblist: List of Blender Objects
+ MATRICES: Boolean - Check to also get the objects matrices default=False
+ HACK: Boolean - See note default=False
+ Returns: List of objects or
+ List of tuples of the form:(ob,matrix) if MATRICES is set to True
+ NOTE: There is an ugly hack here that excludes all objects whose name
+ starts with "dpl_" to exclude objects that are parented to a duplicating
+ object, User must name objects properly if hack is used.
+ """
+
+ result = []
+ for ob in oblist:
+ if dupTest(ob):
+ dup_obs=ob.DupObjects
+ if len(dup_obs):
+ for dup_ob, dup_mx in dup_obs:
+ if MATRICES:
+ result.append((dup_ob,dup_mx))
+ else:
+ result.append(dup_ob)
+ else:
+ if HACK:
+ if ob.getName()[0:4] != "dpl_":
+ if MATRICES:
+ mx = ob.mat
+ result.append((ob,mx))
+ else:
+ result.append(ob)
+ else:
+ if MATRICES:
+ mx = ob.mat
+ result.append((ob,mx))
+ else:
+ result.append(ob)
+ return result
+
#-----------------------------------------------------
def hidden_status(faces, mx_n):
#print 'HIDDEN_MODE: caution! not full implemented yet'
@@ -146,9 +233,13 @@ def flatten(points, mw):
return points
#-----------------------------------------------------
-def exportMesh(ob, mx, mx_n):
+def exportMesh(ob, mx, mx_n,me=None):
entities = []
- me = ob.getData(mesh=1)
+ global APPLY_MODIFIERS
+ if me is None:
+ me = ob.getData(mesh=1)
+ else:
+ me.getFromObject(ob)
#me.transform(mx)
# above is eventualy faster, but bad, cause
# directly transforms origin geometry and write back rounding errors
@@ -209,7 +300,7 @@ def exportMesh(ob, mx, mx_n):
points = [ me_verts[key].co[:3] for key in e]
dxfLINE = Line(points)
entities.append(dxfLINE)
-
+
else:
for e in me.edges:
#print 'deb: edge=', e #---------
@@ -257,7 +348,7 @@ def exportCurve(ob, mx):
return entities
#-----------------------------------------------------
-def do_export(sel_group, filepath):
+def do_export(export_list, filepath):
Window.WaitCursor(1)
t = sys.time()
@@ -281,22 +372,27 @@ def do_export(sel_group, filepath):
m0[2][2]=0.0
mw *= m0 #flatten ViewMatrix
- for ob in sel_group:
+ if APPLY_MODIFIERS:
+ tmp_me = Mesh.New('tmp')
+ else:
+ tmp_me = None
+
+ for ob,mx in export_list:
entities = []
- mx = ob.matrix.copy()
+ #mx = ob.matrix.copy()
mb = mx.copy()
#print 'deb: mb =\n', mb #---------
#print 'deb: mw0 =\n', mw0 #---------
mx_n = mx.rotationPart() * mw0.rotationPart() #trans-matrix for normal_vectors
if SCALE_FACTOR!=1.0: mx *= SCALE_FACTOR
if FLATTEN: mx *= mw
-
+
#mx_inv = mx.copy().invert()
#print 'deb: mx =\n', mx #---------
#print 'deb: mx_inv=\n', mx_inv #---------
if (ob.type == 'Mesh'):
- entities = exportMesh(ob, mx, mx_n)
+ entities = exportMesh(ob, mx, mx_n,tmp_me)
elif (ob.type == 'Curve'):
entities = exportCurve(ob, mx)
@@ -305,11 +401,30 @@ def do_export(sel_group, filepath):
something_ready = True
if something_ready:
- d.saveas(filepath)
- Window.WaitCursor(0)
- #Draw.PupMenu('DXF Exporter: job finished')
- print 'exported to %s' % filepath
- print 'finished in %.2f seconds' % (sys.time()-t)
+ if not OUTPUT_DWG:
+ print 'exporting to %s' % filepath
+ d.saveas(filepath)
+ Window.WaitCursor(0)
+ #Draw.PupMenu('DXF Exporter: job finished')
+ print ' finished in %.2f seconds. -----DONE-----' % (sys.time()-t)
+ else:
+ if not extCONV_OK:
+ Draw.PupMenu(extCONV_TEXT)
+ Window.WaitCursor(False)
+ else:
+ print 'temp. exporting to %s' % filepath
+ d.saveas(filepath)
+ #Draw.PupMenu('DXF Exporter: job finished')
+ #print 'exported to %s' % filepath
+ #print 'finished in %.2f seconds' % (sys.time()-t)
+ filedwg = filepath[:-3]+'dwg'
+ print 'exporting to %s' % filedwg
+ os.system('%s %s -acad13 -dwg' %(extCONV_PATH,filepath))
+ #os.chdir(cwd)
+ os.remove(filepath)
+ Window.WaitCursor(0)
+ print ' finished in %.2f seconds. -----DONE-----' % (sys.time()-t)
+
else:
Window.WaitCursor(0)
print "Abort: selected objects dont mach choosen export option, nothing exported!"
@@ -323,8 +438,9 @@ POLYFACES = 1
FLATTEN = 0
HIDDEN_MODE = False #filter out hidden lines
SCALE_FACTOR = 1.0 #optional, can be done later in CAD too
-
-
+APPLY_MODIFIERS = True
+INCLUDE_DUPLIS = False
+OUTPUT_DWG = False #optional save to DWG with extern converter
#-----------------------------------------------------
def dxf_export_ui(filepath):
@@ -334,9 +450,12 @@ def dxf_export_ui(filepath):
POLYFACES,\
FLATTEN,\
HIDDEN_MODE,\
- SCALE_FACTOR
+ SCALE_FACTOR,\
+ APPLY_MODIFIERS,\
+ OUTPUT_DWG,\
+ INCLUDE_DUPLIS
- print '\n\nDXF-Export %s -----------------------' %__version__
+ print '\n\nDXF-Export %s -----------START-----------' %__version__
#filepath = 'blend_test.dxf'
# Dont overwrite
if not BPyMessages.Warning_SaveOver(filepath):
@@ -352,19 +471,26 @@ def dxf_export_ui(filepath):
PREF_FLATTEN= Draw.Create(FLATTEN)
PREF_HIDDEN_MODE= Draw.Create(HIDDEN_MODE)
PREF_SCALE_FACTOR= Draw.Create(SCALE_FACTOR)
+ PREF_APPLY_MODIFIERS= Draw.Create(APPLY_MODIFIERS)
+ PREF_INCLUDE_DUPLIS= Draw.Create(INCLUDE_DUPLIS)
PREF_HELP= Draw.Create(0)
+ PREF_DWG= Draw.Create(OUTPUT_DWG)
block = [\
("only selected", PREF_ONLYSELECTED, "export only selected geometry"),\
+ ("Apply Modifiers", PREF_APPLY_MODIFIERS, "Apply modifier stack to mesh objects before export"),\
+ ("Include Duplis", PREF_INCLUDE_DUPLIS, "Export also Duplicates (dupliverts, dupliframes etc)"),\
("global Scale:", PREF_SCALE_FACTOR, 0.001, 1000, "set global Scale factor for exporting geometry"),\
- ("only faces", PREF_ONLYFACES, "from mesh-objects export only faces, otherwise only edges"),\
- ("write POLYFACE", PREF_POLYFACES, "export mesh to POLYFACE, otherwise to 3DFACEs"),\
- ("write POLYLINEs", PREF_POLYLINES, "export curve to POLYLINE, otherwise to LINEs"),\
+ (''),\
+ ("export to 3DFaces", PREF_ONLYFACES, "from mesh-objects export only faces, otherwise only edges"),\
+ ("mesh to POLYFACE", PREF_POLYFACES, "export mesh to POLYFACE, otherwise to 3DFACEs"),\
+ ("curves to POLYLINEs", PREF_POLYLINES, "export curve to POLYLINE, otherwise to LINEs"),\
("3D-View to Flat", PREF_FLATTEN, "flatten geometry according current 3d-View"),\
("Hidden Mode", PREF_HIDDEN_MODE, "filter out hidden lines"),\
- #(''),\
("online Help", PREF_HELP, "calls DXF-Exporter Manual Page on Wiki.Blender.org"),\
+ (''),\
+ ("DXF->DWG", PREF_DWG, "writes DWG with extern converter"),\
]
-
+
if not Draw.PupBlock("DXF-Exporter %s" %__version__[:10], block): return
if PREF_HELP.val!=0:
@@ -372,7 +498,7 @@ def dxf_export_ui(filepath):
import webbrowser
webbrowser.open('http://wiki.blender.org/index.php?title=Scripts/Manual/Export/autodesk_dxf')
except:
- Draw.PupMenu('DXF Exporter: %t|no connection to manual-page on Blender-Wiki! try:|\
+ Draw.PupMenu('DXF Exporter: %t|no connection to manual-page on Blender-Wiki! try:|\
http://wiki.blender.org/index.php?title=Scripts/Manual/Export/autodesk_dxf')
return
@@ -383,12 +509,14 @@ http://wiki.blender.org/index.php?title=Scripts/Manual/Export/autodesk_dxf')
FLATTEN = PREF_FLATTEN.val
HIDDEN_MODE = PREF_HIDDEN_MODE.val
SCALE_FACTOR = PREF_SCALE_FACTOR.val
-
+ OUTPUT_DWG = PREF_DWG.val
+
sce = Scene.GetCurrent()
if ONLYSELECTED: sel_group = sce.objects.selected
else: sel_group = sce.objects
+ export_list = getObjectsAndDuplis(sel_group,MATRICES=True)
- if sel_group: do_export(sel_group, filepath)
+ if export_list: do_export(export_list, filepath)
else:
print "Abort: selection was empty, no object to export!"
Draw.PupMenu('DXF Exporter: nothing exported!|empty selection!')
@@ -401,7 +529,4 @@ if __name__=='__main__':
#main()
if not copy:
Draw.PupMenu('Error%t|This script requires a full python install')
- Window.FileSelector(dxf_export_ui, 'EXPORT DXF', sys.makename(ext='.dxf'))
-
-
- \ No newline at end of file
+ else: Window.FileSelector(dxf_export_ui, 'EXPORT DXF', sys.makename(ext='.dxf')) \ No newline at end of file
diff --git a/release/scripts/image_auto_layout.py b/release/scripts/image_auto_layout.py
index c6f97a25434..d19ba1da662 100644
--- a/release/scripts/image_auto_layout.py
+++ b/release/scripts/image_auto_layout.py
@@ -9,7 +9,7 @@ Tooltip: 'Pack all texture images into 1 image and remap faces.'
__author__ = "Campbell Barton"
__url__ = ("blender", "blenderartists.org")
-__version__ = "1.1 2007/02/15"
+__version__ = "1.1a 2009/04/01"
__bpydoc__ = """\
This script makes a new image from the used areas of all the images mapped to the selected mesh objects.
@@ -273,9 +273,12 @@ def consolidate_mesh_images(mesh_list, scn, PREF_IMAGE_PATH, PREF_IMAGE_SIZE, PR
# New Mesh and Object
render_mat= B.Material.New()
- render_mat.mode |= B.Material.Modes.SHADELESS
- render_mat.mode |= B.Material.Modes.TEXFACE
- render_mat.mode |= B.Material.Modes.ZTRANSP
+ render_mat.mode |= \
+ B.Material.Modes.SHADELESS | \
+ B.Material.Modes.TEXFACE | \
+ B.Material.Modes.TEXFACE_ALPHA | \
+ B.Material.Modes.ZTRANSP
+
render_mat.setAlpha(0.0)
render_me= B.Mesh.New()
@@ -420,7 +423,7 @@ def main():
PREF_IMAGE_PATH= PREF_IMAGE_PATH.val
PREF_IMAGE_SIZE= PREF_IMAGE_SIZE.val
- PREF_IMAGE_MARGIN= PREF_IMAGE_MARGIN.val
+ PREF_IMAGE_MARGIN= float(PREF_IMAGE_MARGIN.val) # important this is a float otherwise division wont work properly
PREF_KEEP_ASPECT= PREF_KEEP_ASPECT.val
PREF_ALL_SEL_OBS= PREF_ALL_SEL_OBS.val
diff --git a/release/scripts/import_dxf.py b/release/scripts/import_dxf.py
index c3203891c60..ceb4dd56722 100644
--- a/release/scripts/import_dxf.py
+++ b/release/scripts/import_dxf.py
@@ -1,20 +1,21 @@
#!BPY
"""
-Name: 'Autodesk DXF (.dxf)'
+Name: 'Autodesk DXF (.dxf .dwg)'
Blender: 246
Group: 'Import'
-Tooltip: 'Import for DXF geometry data (Drawing eXchange Format).'
+Tooltip: 'Import for DWG/DXF geometry data.'
"""
__author__ = 'Kitsu(Ed Blake) & migius(Remigiusz Fiedler)'
-__version__ = '1.12 - 2009.03.14 by migius'
+__version__ = '1.12 - 2009.04.11 by migius'
__url__ = ["http://blenderartists.org/forum/showthread.php?t=84319",
"http://wiki.blender.org/index.php/Scripts/Manual/Import/DXF-3D"]
__email__ = ["migius(at)4d-vectors.de","Kitsune_e(at)yahoo.com"]
__bpydoc__ = """\
-This script imports objects from DXF (2d/3d) into Blender.
+This script imports objects from DWG/DXF (2d/3d) into Blender.
This script imports 2d and 3d geometery from DXF files.
+It supports DWG format too, with help of an external converter.
Supported DXF format versions: from (r2.5) r12 up to r2008.
Enhanced features are:
- configurable object filtering and geometry manipulation,
@@ -111,6 +112,8 @@ History:
-- support ortho mode for VIEWs and VPORTs as cameras
+ v1.12 - 2009.04.11 by migius
+ d4 added DWG support, Stani Michiels idea for binding an extern DXF-DWG-converter
v1.12 - 2009.03.14 by migius
d3 removed all set()functions (problem with osx/python<2.4 reported by Blinkozo)
d3 code-cleaning
@@ -305,7 +308,8 @@ History:
# --------------------------------------------------------------------------
import Blender
-from Blender import *
+from Blender import Mathutils, BezTriple, Draw, Registry, sys,\
+Text3d, Window, Mesh, Material, Group
#from Blender.Mathutils import Vector, Matrix
#import bpy #not used yet
#import BPyMessages
@@ -314,7 +318,7 @@ from dxfReader import readDXF
#from dxfReader import get_name, get_layer
from dxfReader import Object as dxfObject
from dxfColorMap import color_map
-from math import *
+from math import log10, sqrt, radians, degrees, atan, cos, sin
# osx-patch by Blinkozo
#todo: avoid additional modules, prefer Blender-build-in test routines
@@ -325,9 +329,10 @@ from math import *
#ver = '%s.%s' % version_info[0:2]
# end osx-patch
-try:
- import os
- if os.name != 'mac':
+import subprocess
+import os
+if os.name != 'mac':
+ try:
import psyco
psyco.log(Blender.Get('tempdir')+"/blender.log-psyco")
#psyco.log()
@@ -335,14 +340,13 @@ try:
psyco.profile(0.05, memory=100)
psyco.profile(0.2)
#print 'psyco imported'
-except ImportError:
- print 'psyco not imported'
- pass
+ except ImportError:
+ print 'psyco not imported'
#try: Curve.orderU
print '\n\n\n'
-print 'DXF-Importer v%s *** start ***' %(__version__) #---------------------
+print 'DXF/DWG-Importer v%s *** start ***' %(__version__) #---------------------
SCENE = None
WORLDX = Mathutils.Vector((1,0,0))
@@ -386,6 +390,29 @@ FREE = BezTriple.HandleTypes.FREE
VECT = BezTriple.HandleTypes.VECT
ALIGN = BezTriple.HandleTypes.ALIGN
+UI_MODE = True #activates UI-popup-print, if not multiple files imported
+
+
+#-------- DWG support ------------------------------------------
+extCONV_OK = True
+extCONV = 'DConvertCon.exe'
+extCONV_PATH = os.path.join(Blender.Get('scriptsdir'),extCONV)
+if not os.path.isfile(extCONV_PATH):
+ extCONV_OK = False
+ extCONV_TEXT = 'DWG-Importer cant find external DWG-converter (%s) in Blender script directory.|\
+More details in online Help.' %extCONV
+else:
+ if not os.sys.platform.startswith('win'):
+ # check if Wine installed:
+ if subprocess.Popen(('which', 'winepath'), stdout=subprocess.PIPE).stdout.read().strip():
+ extCONV_PATH = 'wine %s'%extCONV_PATH
+ else:
+ extCONV_OK = False
+ extCONV_TEXT = 'The external DWG-converter (%s) needs Wine installed on your system.|\
+More details in online Help.' %extCONV
+#print 'extCONV_PATH = ', extCONV_PATH
+
+
class View: #-----------------------------------------------------------------
"""Class for objects representing dxf VIEWs.
@@ -754,7 +781,7 @@ class Solid: #-----------------------------------------------------------------
if settings.var['vGroup_on'] and not M_OBJ:
# each MeshSide becomes vertexGroup for easier material assignment ---------------------
- replace = Blender.Mesh.AssignModes.ADD #or .AssignModes.ADD/REPLACE
+ replace = Mesh.AssignModes.ADD #or .AssignModes.ADD/REPLACE
if vg_left: me.addVertGroup('side.left') ; me.assignVertsToGroup('side.left', vg_left, 1.0, replace)
if vg_right:me.addVertGroup('side.right') ; me.assignVertsToGroup('side.right', vg_right, 1.0, replace)
if vg_top: me.addVertGroup('side.top') ; me.assignVertsToGroup('side.top', vg_top, 1.0, replace)
@@ -899,7 +926,7 @@ class Line: #-----------------------------------------------------------------
ob.link(me) # link mesh to that object
vG_name = 'color_%s' %self.color_index
if edges: faces = edges
- replace = Blender.Mesh.AssignModes.ADD #or .AssignModes.REPLACE or ADD
+ replace = Mesh.AssignModes.ADD #or .AssignModes.REPLACE or ADD
try:
me.assignVertsToGroup(vG_name, faces[0], 1.0, replace)
#print 'deb: existed vGroup:', vG_name #---------------------
@@ -1792,7 +1819,7 @@ class Polyline: #--------------------------------------------------------------
# which may be linked to more than one object.
if settings.var['vGroup_on'] and not M_OBJ:
# each MeshSide becomes vertexGroup for easier material assignment ---------------------
- replace = Blender.Mesh.AssignModes.REPLACE #or .AssignModes.ADD
+ replace = Mesh.AssignModes.REPLACE #or .AssignModes.ADD
vg_left, vg_right, vg_top, vg_bottom = [], [], [], []
for v in f_left: vg_left.extend(v)
for v in f_right: vg_right.extend(v)
@@ -2640,7 +2667,7 @@ class Circle: #----------------------------------------------------------------
# each MeshSide becomes vertexGroup for easier material assignment ---------------------
if settings.var['vGroup_on'] and not M_OBJ:
# each MeshSide becomes vertexGroup for easier material assignment ---------------------
- replace = Blender.Mesh.AssignModes.REPLACE #or .AssignModes.ADD
+ replace = Mesh.AssignModes.REPLACE #or .AssignModes.ADD
vg_band, vg_top, vg_bottom = [], [], []
for v in f_band: vg_band.extend(v)
me.addVertGroup('side.band') ; me.assignVertsToGroup('side.band', vg_band, 1.0, replace)
@@ -2820,7 +2847,7 @@ class Arc: #-----------------------------------------------------------------
# each MeshSide becomes vertexGroup for easier material assignment ---------------------
if settings.var['vGroup_on'] and not M_OBJ:
# each MeshSide becomes vertexGroup for easier material assignment ---------------------
- replace = Blender.Mesh.AssignModes.REPLACE #or .AssignModes.ADD
+ replace = Mesh.AssignModes.REPLACE #or .AssignModes.ADD
vg_left, vg_right, vg_top, vg_bottom = [], [], [], []
for v in f_left: vg_left.extend(v)
for v in f_right: vg_right.extend(v)
@@ -3364,7 +3391,7 @@ class Ellipse: #---------------------------------------------------------------
me.faces[i].smooth = True
if settings.var['vGroup_on'] and not M_OBJ:
# each MeshSide becomes vertexGroup for easier material assignment ---------------------
- replace = Blender.Mesh.AssignModes.REPLACE #or .AssignModes.ADD
+ replace = Mesh.AssignModes.REPLACE #or .AssignModes.ADD
vg_left, vg_right, vg_top, vg_bottom = [], [], [], []
for v in f_left: vg_left.extend(v)
for v in f_right: vg_right.extend(v)
@@ -3517,7 +3544,7 @@ class Face: #-----------------------------------------------------------------
ob.link(me) # link mesh to that object
vG_name = 'color_%s' %self.color_index
if edges: faces = edges
- replace = Blender.Mesh.AssignModes.ADD #or .AssignModes.REPLACE or ADD
+ replace = Mesh.AssignModes.ADD #or .AssignModes.REPLACE or ADD
try:
me.assignVertsToGroup(vG_name, faces[0], 1.0, replace)
#print 'deb: existed vGroup:', vG_name #---------------------
@@ -4022,10 +4049,8 @@ class Settings: #--------------------------------------------------------------
"""Wraps the built-in print command in a optimization check.
"""
if self.var['optimization'] <= self.MID:
- if newline:
- print text
- else:
- print text,
+ if newline: print text
+ else: print text,
def redraw(self):
@@ -4067,9 +4092,9 @@ def analyzeDXF(dxfFile): #---------------------------------------
"""
Window.WaitCursor(True) # Let the user know we are thinking
print 'reading DXF file: %s.' % dxfFile
- time1 = Blender.sys.time() #time marker1
+ time1 = sys.time() #time marker1
drawing = readDXF(dxfFile, objectify)
- print 'finish reading in %.4f sec.' % (Blender.sys.time()-time1)
+ print 'finish reading in %.4f sec.' % (sys.time()-time1)
# First sort out all the section_items
sections = dict([(item.name, item) for item in drawing.data])
@@ -4282,10 +4307,45 @@ def main(dxfFile): #---------------#############################-----------
if dxfFile.lower().endswith('.dxf') and sys.exists(dxfFile):
Window.WaitCursor(True) # Let the user know we are thinking
print 'reading file: %s.' % dxfFile
- time1 = Blender.sys.time() #time marker1
+ time1 = sys.time() #time marker1
drawing = readDXF(dxfFile, objectify)
- print 'reading finished in %.4f sec.' % (Blender.sys.time()-time1)
+ print 'reading finished in %.4f sec.' % (sys.time()-time1)
Window.WaitCursor(False)
+ elif dxfFile.lower().endswith('.dwg') and sys.exists(dxfFile):
+ if not extCONV_OK:
+ Draw.PupMenu(extCONV_TEXT)
+ Window.WaitCursor(False)
+ if editmode: Window.EditMode(1) # and put things back how we fond them
+ return None
+ else:
+ Window.WaitCursor(True) # Let the user know we are thinking
+ #todo: issue: in DConvertCon.exe the output filename is fixed to dwg_name.dxf
+
+ if 0: # works only for Windows
+ dwgTemp = 'temp_01.dwg'
+ dxfTemp = 'temp_01.dxf'
+ os.system('copy %s %s' %(dxfFile,dwgTemp))
+ else:
+ dwgTemp = dxfFile
+ dxfTemp = dxfFile[:-3]+'dxf'
+ #print 'temp. converting: %s\n to: %s' %(dxfFile, dxfTemp)
+ #os.system('%s %s -acad11 -dxf' %(extCONV_PATH, dxfFile))
+ os.system('%s %s -dxf' %(extCONV_PATH, dwgTemp))
+ #os.system('%s %s -dxf' %(extCONV_PATH, dxfFile_temp))
+ if sys.exists(dxfTemp):
+ print 'reading file: %s.' % dxfTemp
+ time1 = sys.time() #time marker1
+ drawing = readDXF(dxfTemp, objectify)
+ #os.remove(dwgTemp)
+ os.remove(dxfTemp) # clean up
+ print 'reading finished in %.4f sec.' % (sys.time()-time1)
+ Window.WaitCursor(False)
+ else:
+ if UI_MODE: Draw.PupMenu('DWG importer: nothing imported!%t|No valid DXF-representation found!')
+ print 'DWG importer: nothing imported. No valid DXF-representation found.'
+ Window.WaitCursor(False)
+ if editmode: Window.EditMode(1) # and put things back how we fond them
+ return None
else:
if UI_MODE: Draw.PupMenu('DXF importer: Alert!%t| no valid DXF-file selected!')
print "DXF importer: Alert! - no valid DXF-file selected."
@@ -4295,7 +4355,7 @@ def main(dxfFile): #---------------#############################-----------
# Draw all the know entity types in the current scene
oblist = [] # a list of all created AND linked objects for final f_globalScale
- time2 = Blender.sys.time() #time marker2
+ time2 = sys.time() #time marker2
Window.WaitCursor(True) # Let the user know we are thinking
settings.write("\n\nDrawing entities...")
@@ -4322,7 +4382,7 @@ def main(dxfFile): #---------------#############################-----------
#SCENE.objects.selected = SCENE.objects #select all objects in current scene
Blender.Redraw()
- time_text = Blender.sys.time() - time2
+ time_text = sys.time() - time2
Window.WaitCursor(False)
if settings.var['paper_space_on']: space = 'from paper space'
else: space = 'from model space'
@@ -4571,7 +4631,7 @@ def drawer(_type, entities, settings, block_def): #----------------------------
activObjectLayer = ''
activObjectName = ''
- message = "Drawing dxf\'%ss\'..." %_type
+ message = "Drawing dxf \'%ss\'..." %_type
cur_COUNTER += len_temp - len(entities)
settings.write(message, False)
settings.progress(cur_COUNTER, message)
@@ -5078,7 +5138,7 @@ def drawCurveArc(self): #---- only for ELLIPSE --------------------------------
# GUI STUFF -----#################################################-----------------
-from Blender.BGL import *
+from Blender.BGL import glColor3f, glRecti, glClear, glRasterPos2d
EVENT_NONE = 1
EVENT_START = 2
@@ -5577,7 +5637,7 @@ def draw_UI(): #---------------------------------------------------------------
y += 30
colorbox(x, y+20, x+menu_w+menu_margin*2, menu_margin)
- Draw.Label("DXF-Importer v" + __version__, but0c, y, menu_w, 20)
+ Draw.Label("DXF/DWG-Importer v" + __version__, but0c, y, menu_w, 20)
if config_UI.val:
b0, b0_ = but0c, but_0c + butt_margin
@@ -5853,9 +5913,9 @@ def draw_UI(): #---------------------------------------------------------------
#y -= 10
Draw.BeginAlign()
- Draw.PushButton('DXFfile >', EVENT_CHOOSE_DXF, but0c, y, but_0c, 20, 'Select DXF-file from project directory')
- dxfFileName = Draw.String(' :', EVENT_NONE, but1c, y, but_1c+but_2c+but_3c-20, 20, dxfFileName.val, FILENAME_MAX, "type the name of DXF-file or type *.dxf for multi-import")
- Draw.PushButton('*.*', EVENT_DXF_DIR, but3c+but_3c-20, y, 20, 20, 'import all dxf files from this directory')
+ Draw.PushButton('DXFfile >', EVENT_CHOOSE_DXF, but0c, y, but_0c, 20, 'Select DXF/DWG-file for import')
+ dxfFileName = Draw.String(' :', EVENT_NONE, but1c, y, but_1c+but_2c+but_3c-20, 20, dxfFileName.val, FILENAME_MAX, "type the name of DXF/DWG-file or type *.dxf/*.dwg for multiple files")
+ Draw.PushButton('*.*', EVENT_DXF_DIR, but3c+but_3c-20, y, 20, 20, 'set filter for import all files from this directory')
Draw.EndAlign()
y -= 30
@@ -5902,8 +5962,9 @@ def colorbox(x,y,xright,bottom):
def dxf_callback(input_filename):
global dxfFileName
- dxfFileName.val=input_filename
-# dirname == Blender.sys.dirname(Blender.Get('filename'))
+ if input_filename.lower()[-3:] in ('dwg','dxf'):
+ dxfFileName.val=input_filename
+# dirname == sys.dirname(Blender.Get('filename'))
# update_RegistryKey('DirName', dirname)
# update_RegistryKey('dxfFileName', input_filename)
@@ -5913,17 +5974,17 @@ def ini_callback(input_filename):
def event(evt, val):
if evt in (Draw.QKEY, Draw.ESCKEY) and not val:
- Blender.Draw.Exit()
+ Draw.Exit()
def bevent(evt):
# global EVENT_NONE,EVENT_LOAD_DXF,EVENT_LOAD_INI,EVENT_SAVE_INI,EVENT_EXIT
global config_UI, user_preset
- global GUI_A
+ global GUI_A, UI_MODE
######### Manages GUI events
if (evt==EVENT_EXIT):
- Blender.Draw.Exit()
- print 'DXF-Importer *** exit ***' #---------------------
+ Draw.Exit()
+ print 'DXF/DWG-Importer *** exit ***' #---------------------
elif (evt==EVENT_CHOOSE_INI):
Window.FileSelector(ini_callback, "INI-file Selection", '*.ini')
elif (evt==EVENT_REDRAW):
@@ -5980,13 +6041,14 @@ http://wiki.blender.org/index.php?title=Scripts/Manual/Import/DXF-3D')
Draw.Redraw()
elif (evt==EVENT_DXF_DIR):
dxfFile = dxfFileName.val
+ dxfFileExt = '*'+dxfFile.lower()[-4:] #can be .dxf or .dwg
dxfPathName = ''
if '/' in dxfFile:
dxfPathName = '/'.join(dxfFile.split('/')[:-1]) + '/'
elif '\\' in dxfFile:
dxfPathName = '\\'.join(dxfFile.split('\\')[:-1]) + '\\'
- dxfFileName.val = dxfPathName + '*.dxf'
-# dirname == Blender.sys.dirname(Blender.Get('filename'))
+ dxfFileName.val = dxfPathName + dxfFileExt
+# dirname == sys.dirname(Blender.Get('filename'))
# update_RegistryKey('DirName', dirname)
# update_RegistryKey('dxfFileName', dxfFileName.val)
GUI_A['newScene_on'].val = 1
@@ -5994,45 +6056,55 @@ http://wiki.blender.org/index.php?title=Scripts/Manual/Import/DXF-3D')
elif (evt==EVENT_CHOOSE_DXF):
filename = '' # '*.dxf'
if dxfFileName.val: filename = dxfFileName.val
- Window.FileSelector(dxf_callback, "DXF-file Selection", filename)
+ Window.FileSelector(dxf_callback, "DXF/DWG-file Selection", filename)
elif (evt==EVENT_START):
dxfFile = dxfFileName.val
#print 'deb: dxfFile file: ', dxfFile #----------------------
if E_M: dxfFileName.val, dxfFile = e_mode(dxfFile) #evaluation mode
update_RegistryKey('dxfFileName', dxfFileName.val)
if dxfFile.lower().endswith('*.dxf'):
- if Draw.PupMenu('DXF importer: OK?|will import all DXF-files from:|%s' % dxfFile) == 1:
- global UI_MODE
+ if Draw.PupMenu('DXF importer will import all DXF-files from:|%s|OK?' % dxfFile) != -1:
UI_MODE = False
- multi_import(dxfFile[:-5]) # cut last 5 characters '*.dxf'
+ multi_import(dxfFile)
+ UI_MODE = True
Draw.Redraw()
- #Draw.Exit()
- else:
+
+ elif dxfFile.lower().endswith('*.dwg'):
+ if not extCONV_OK: Draw.PupMenu(extCONV_TEXT)
+ elif Draw.PupMenu('DWG importer will import all DWG-files from:|%s|OK?' % dxfFile) != -1:
+ #elif Draw.PupMenu('DWG importer will import all DWG-files from:|%s|Caution! overwrites existing DXF-files!| OK?' % dxfFile) != -1:
+ UI_MODE = False
+ multi_import(dxfFile)
+ UI_MODE = True
Draw.Redraw()
- elif dxfFile.lower().endswith('.dxf') and sys.exists(dxfFile):
- print '\nStandard Mode: active'
- if GUI_A['newScene_on'].val:
- _dxf_file = dxfFile.split('/')[-1].split('\\')[-1]
- _dxf_file = _dxf_file[:-4] # cut last char:'.dxf'
- _dxf_file = _dxf_file[:MAX_NAMELENGTH] #? [-MAX_NAMELENGTH:])
- global SCENE
- SCENE = Blender.Scene.New(_dxf_file)
- SCENE.makeCurrent()
- Blender.Redraw()
- #or so? Blender.Scene.makeCurrent(_dxf_file)
- #sce = bpy.data.scenes.new(_dxf_file)
- #bpy.data.scenes.active = sce
+
+ elif sys.exists(dxfFile) and dxfFile.lower()[-4:] in ('.dxf','.dwg'):
+ if dxfFile.lower().endswith('.dwg') and (not extCONV_OK):
+ Draw.PupMenu(extCONV_TEXT)
else:
- SCENE = Blender.Scene.GetCurrent()
- SCENE.objects.selected = [] # deselect all
- main(dxfFile)
- #SCENE.objects.selected = SCENE.objects
- #Window.RedrawAll()
- #Blender.Redraw()
- #Draw.Redraw()
+ #print '\nStandard Mode: active'
+ if GUI_A['newScene_on'].val:
+ _dxf_file = dxfFile.split('/')[-1].split('\\')[-1]
+ _dxf_file = _dxf_file[:-4] # cut last char:'.dxf'
+ _dxf_file = _dxf_file[:MAX_NAMELENGTH] #? [-MAX_NAMELENGTH:])
+ global SCENE
+ SCENE = Blender.Scene.New(_dxf_file)
+ SCENE.makeCurrent()
+ Blender.Redraw()
+ #or so? Blender.Scene.makeCurrent(_dxf_file)
+ #sce = bpy.data.scenes.new(_dxf_file)
+ #bpy.data.scenes.active = sce
+ else:
+ SCENE = Blender.Scene.GetCurrent()
+ SCENE.objects.selected = [] # deselect all
+ main(dxfFile)
+ #SCENE.objects.selected = SCENE.objects
+ #Window.RedrawAll()
+ #Blender.Redraw()
+ #Draw.Redraw()
else:
- Draw.PupMenu('DXF importer: Alert!%t|no valid DXF-file selected!')
- print "DXF importer: error, no valid DXF-file selected! try again"
+ Draw.PupMenu('DXF importer: nothing imported!%t|no valid DXF-file selected!')
+ print "DXF importer: nothing imported, no valid DXF-file selected! try again"
Draw.Redraw()
@@ -6043,20 +6115,25 @@ def multi_import(DIR):
"""
global SCENE
- batchTIME = Blender.sys.time()
+ batchTIME = sys.time()
#if #DIR == "": DIR = os.path.curdir
- if DIR == "": DIR = Blender.sys.dirname(Blender.Get('filename'))
- print 'Multifiles Import from %s' %DIR
+ if DIR == "":
+ DIR = sys.dirname(Blender.Get('filename'))
+ EXT = '.dxf'
+ else:
+ EXT = DIR[-4:] # get last 4 characters '.dxf'
+ DIR = DIR[:-5] # cut last 5 characters '*.dxf'
+ print 'importing multiple %s files from %s' %(EXT,DIR)
files = \
- [sys.join(DIR, f) for f in os.listdir(DIR) if f.lower().endswith('.dxf')]
+ [sys.join(DIR, f) for f in os.listdir(DIR) if f.lower().endswith(EXT)]
if not files:
- print '...None DXF-files found. Abort!'
+ print '...None %s-files found. Abort!' %EXT
return
i = 0
for dxfFile in files:
i += 1
- print '\nDXF-file', i, 'of', len(files) #,'\nImporting', dxfFile
+ print '\n%s-file' %EXT, i, 'of', len(files) #,'\nImporting', dxfFile
if GUI_A['newScene_on'].val:
_dxf_file = dxfFile.split('/')[-1].split('\\')[-1]
_dxf_file = _dxf_file[:-4] # cut last char:'.dxf'
@@ -6072,13 +6149,11 @@ def multi_import(DIR):
main(dxfFile)
#Blender.Redraw()
- print 'TOTAL TIME: %.6f' % (Blender.sys.time() - batchTIME)
+ print 'TOTAL TIME: %.6f' % (sys.time() - batchTIME)
print '\a\r', # beep when done
+ Draw.PupMenu('DXF importer: Done!|finished in %.4f sec.' % (sys.time() - batchTIME))
-
-UI_MODE = True
-
if __name__ == "__main__":
UI_MODE = True
# recall last used DXF-file and INI-file names
@@ -6086,7 +6161,7 @@ if __name__ == "__main__":
#print 'deb:start dxffilename:', dxffilename #----------------
if dxffilename: dxfFileName.val = dxffilename
else:
- dirname = Blender.sys.dirname(Blender.Get('filename'))
+ dirname = sys.dirname(Blender.Get('filename'))
#print 'deb:start dirname:', dirname #----------------
dxfFileName.val = sys.join(dirname, '')
inifilename = check_RegistryKey('iniFileName')
@@ -6099,7 +6174,7 @@ if __name__ == "__main__":
if 1:
# DEBUG ONLY
UI_MODE = False
- TIME= Blender.sys.time()
+ TIME= sys.time()
#DIR = '/dxf_r12_testfiles/'
DIR = '/metavr/'
import os
@@ -6128,5 +6203,5 @@ if 1:
dxfFileName.val = _dxf
main(_dxf)
- print 'TOTAL TIME: %.6f' % (Blender.sys.time() - TIME)
+ print 'TOTAL TIME: %.6f' % (sys.time() - TIME)
""" \ No newline at end of file
diff --git a/release/scripts/import_obj.py b/release/scripts/import_obj.py
index 42cdac4dc35..493354601a6 100644
--- a/release/scripts/import_obj.py
+++ b/release/scripts/import_obj.py
@@ -537,6 +537,7 @@ def get_float_func(filepath):
'''
file= open(filepath, 'rU')
for line in file: #.xreadlines():
+ line = line.lstrip()
if line.startswith('v'): # vn vt v
if ',' in line:
return lambda f: float(f.replace(',', '.'))
@@ -590,6 +591,7 @@ def load_obj(filepath, CLAMP_SIZE= 0.0, CREATE_FGONS= True, CREATE_SMOOTH_GROUPS
time_sub= sys.time()
file= open(filepath, 'rU')
for line in file: #.xreadlines():
+ line = line.lstrip() # rare cases there is white space at the start of the line
if line.startswith('v '):
line_split= line.split()
diff --git a/release/scripts/import_web3d.py b/release/scripts/import_web3d.py
index 87a259cbe56..fc3b5262376 100755..100644
--- a/release/scripts/import_web3d.py
+++ b/release/scripts/import_web3d.py
@@ -1332,7 +1332,9 @@ class x3dNode(vrmlNode):
# Other funcs operate from vrml, but this means we can wrap XML fields, still use nice utility funcs
# getFieldAsArray getFieldAsBool etc
- def getFieldName(self, field):
+ def getFieldName(self, field, ancestry, AS_CHILD=False):
+ # ancestry and AS_CHILD are ignored, only used for VRML now
+
self_real = self.getRealNode() # incase we're an instance
field_xml = self.x3dNode.getAttributeNode(field)
if field_xml:
@@ -1564,7 +1566,8 @@ def importMesh_IndexedFaceSet(geom, bpyima, ancestry):
vcolor_spot = None # spot color when we dont have an array of colors
if vcolor:
# float to char
- ifs_vcol = [[int(c*256) for c in col] for col in vcolor.getFieldAsArray('color', 3, ancestry)]
+ ifs_vcol = [(0,0,0)] # EEKADOODLE - vertex start at 1
+ ifs_vcol.extend([[int(c*256) for c in col] for col in vcolor.getFieldAsArray('color', 3, ancestry)])
ifs_color_index = geom.getFieldAsArray('colorIndex', 0, ancestry)
if not ifs_vcol:
diff --git a/release/scripts/mesh_poly_reduce_grid.py b/release/scripts/mesh_poly_reduce_grid.py
new file mode 100644
index 00000000000..3741a47723a
--- /dev/null
+++ b/release/scripts/mesh_poly_reduce_grid.py
@@ -0,0 +1,351 @@
+#!BPY
+"""
+Name: 'Poly Reduce Selection (Unsubsurf)'
+Blender: 245
+Group: 'Mesh'
+Tooltip: 'pradictable mesh simplifaction maintaining face loops'
+"""
+
+from Blender import Scene, Mesh, Window, sys
+import BPyMessages
+import bpy
+
+# ***** BEGIN GPL LICENSE BLOCK *****
+#
+# Script copyright (C) Campbell J Barton
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# ***** END GPL LICENCE BLOCK *****
+# --------------------------------------------------------------------------
+
+
+def my_mesh_util(me):
+ me_verts = me.verts
+
+ vert_faces = [ [] for v in me_verts]
+ vert_faces_corner = [ [] for v in me_verts]
+
+
+ # Ignore topology where there are not 2 faces connected to an edge.
+ edge_count = {}
+ for f in me.faces:
+ for edkey in f.edge_keys:
+ try:
+ edge_count[edkey] += 1
+ except:
+ edge_count[edkey] = 1
+
+ for edkey, count in edge_count.iteritems():
+
+ # Ignore verts that connect to edges with more then 2 faces.
+ if count != 2:
+ vert_faces[edkey[0]] = None
+ vert_faces[edkey[1]] = None
+ # Done
+
+
+
+ def faces_set_verts(face_ls):
+ unique_verts = set()
+ for f in face_ls:
+ for v in f:
+ unique_verts.add(v.index)
+ return unique_verts
+
+ for f in me.faces:
+ for corner, v in enumerate(f):
+ i = v.index
+ if vert_faces[i] != None:
+ vert_faces[i].append(f)
+ vert_faces_corner[i].append( corner )
+
+ grid_data_ls = []
+
+ for vi, face_ls in enumerate(vert_faces):
+ if face_ls != None:
+ if len(face_ls) == 4:
+ if face_ls[0].sel and face_ls[1].sel and face_ls[2].sel and face_ls[3].sel:
+ # Support triangles also
+ unique_vert_count = len(faces_set_verts(face_ls))
+ quads = 0
+ for f in face_ls:
+ if len(f) ==4:
+ quads += 1
+ if unique_vert_count==5+quads: # yay we have a grid
+ grid_data_ls.append( (vi, face_ls) )
+
+ elif len(face_ls) == 3:
+ if face_ls[0].sel and face_ls[1].sel and face_ls[2].sel:
+ unique_vert_count = len(faces_set_verts(face_ls))
+ if unique_vert_count==4: # yay we have 3 triangles to make into a bigger triangle
+ grid_data_ls.append( (vi, face_ls) )
+
+
+
+ # Now sort out which grid faces to use
+
+
+ # This list will be used for items we can convert, vertex is key, faces are values
+ grid_data_dict = {}
+
+ if not grid_data_ls:
+ print "doing nothing"
+ return
+
+ # quick lookup for the opposing corner of a qiad
+ quad_diag_mapping = 2,3,0,1
+
+ verts_used = [0] * len(me_verts) # 0 == untouched, 1==should touch, 2==touched
+ verts_used[grid_data_ls[0][0]] = 1 # start touching 1!
+
+ # From the corner vert, get the 2 edges that are not the corner or its opposing vert, this edge will make a new face
+ quad_edge_mapping = (1,3), (2,0), (1,3), (0,2) # hi-low, low-hi order is intended
+ tri_edge_mapping = (1,2), (0,2), (0,1)
+
+ done_somthing = True
+ while done_somthing:
+ done_somthing = False
+ grid_data_ls_index = -1
+
+ for vi, face_ls in grid_data_ls:
+ grid_data_ls_index += 1
+ if len(face_ls) == 3:
+ grid_data_dict[vi] = face_ls
+ grid_data_ls.pop( grid_data_ls_index )
+ break
+ elif len(face_ls) == 4:
+ # print vi
+ if verts_used[vi] == 1:
+ verts_used[vi] = 2 # dont look at this again.
+ done_somthing = True
+
+ grid_data_dict[vi] = face_ls
+
+ # Tag all faces verts as used
+
+ for i, f in enumerate(face_ls):
+ # i == face index on vert, needed to recall which corner were on.
+ v_corner = vert_faces_corner[vi][i]
+ fv =f.v
+
+ if len(f) == 4:
+ v_other = quad_diag_mapping[v_corner]
+ # get the 2 other corners
+ corner1, corner2 = quad_edge_mapping[v_corner]
+ if verts_used[fv[v_other].index] == 0:
+ verts_used[fv[v_other].index] = 1 # TAG for touching!
+ else:
+ corner1, corner2 = tri_edge_mapping[v_corner]
+
+ verts_used[fv[corner1].index] = 2 # Dont use these, they are
+ verts_used[fv[corner2].index] = 2
+
+
+ # remove this since we have used it.
+ grid_data_ls.pop( grid_data_ls_index )
+
+ break
+
+ if done_somthing == False:
+ # See if there are any that have not even been tagged, (probably on a different island), then tag them.
+
+ for vi, face_ls in grid_data_ls:
+ if verts_used[vi] == 0:
+ verts_used[vi] = 1
+ done_somthing = True
+ break
+
+
+ # Now we have all the areas we will fill, calculate corner triangles we need to fill in.
+ new_faces = []
+ quad_del_vt_map = (1,2,3), (0,2,3), (0,1,3), (0,1,2)
+ for vi, face_ls in grid_data_dict.iteritems():
+ for i, f in enumerate(face_ls):
+ if len(f) == 4:
+ # i == face index on vert, needed to recall which corner were on.
+ v_corner = vert_faces_corner[vi][i]
+ v_other = quad_diag_mapping[v_corner]
+ fv =f.v
+
+ #print verts_used[fv[v_other].index]
+ #if verts_used[fv[v_other].index] != 2: # DOSNT WORK ALWAYS
+
+ if 1: # THIS IS LAzY - some of these faces will be removed after adding.
+ # Ok we are removing half of this face, add the other half
+
+ # This is probably slower
+ # new_faces.append( [fv[ii].index for ii in (0,1,2,3) if ii != v_corner ] )
+
+ # do this instead
+ new_faces.append( (fv[quad_del_vt_map[v_corner][0]], fv[quad_del_vt_map[v_corner][1]], fv[quad_del_vt_map[v_corner][2]]) )
+
+ del grid_data_ls
+
+
+ # me.sel = 0
+ def faceCombine4(vi, face_ls):
+ edges = []
+
+ for i, f in enumerate(face_ls):
+ fv = f.v
+ v_corner = vert_faces_corner[vi][i]
+ if len(f)==4: ed = quad_edge_mapping[v_corner]
+ else: ed = tri_edge_mapping[v_corner]
+
+ edges.append( [fv[ed[0]].index, fv[ed[1]].index] )
+
+ # get the face from the edges
+ face = edges.pop()
+ while len(face) != 4:
+ # print len(edges), edges, face
+ for ed_idx, ed in enumerate(edges):
+ if face[-1] == ed[0] and (ed[1] != face[0]):
+ face.append(ed[1])
+ elif face[-1] == ed[1] and (ed[0] != face[0]):
+ face.append(ed[0])
+ else:
+ continue
+
+ edges.pop(ed_idx) # we used the edge alredy
+ break
+
+ return face
+
+ for vi, face_ls in grid_data_dict.iteritems():
+ if len(face_ls) == 4:
+ new_faces.append( faceCombine4(vi, face_ls) )
+ #pass
+ if len(face_ls) == 3: # 3 triangles
+ face = list(faces_set_verts(face_ls))
+ face.remove(vi)
+ new_faces.append( face )
+
+
+ # Now remove verts surounded by 3 triangles
+
+
+
+ # print new_edges
+ # me.faces.extend(new_faces, ignoreDups=True)
+
+ '''
+ faces_remove = []
+ for vi, face_ls in grid_data_dict.iteritems():
+ faces_remove.extend(face_ls)
+ '''
+
+ orig_facelen = len(me.faces)
+
+ orig_faces = list(me.faces)
+ me.faces.extend(new_faces, ignoreDups=True)
+ new_faces = list(me.faces)[len(orig_faces):]
+
+
+
+
+
+ if me.faceUV:
+ uvnames = me.getUVLayerNames()
+ act_uvlay = me.activeUVLayer
+
+ vert_faces_uvs = []
+ vert_faces_images = []
+
+
+ act_uvlay = me.activeUVLayer
+
+ for uvlay in uvnames:
+ me.activeUVLayer = uvlay
+ vert_faces_uvs[:] = [None] * len(me.verts)
+ vert_faces_images[:] = vert_faces_uvs[:]
+
+ for i,f in enumerate(orig_faces):
+ img = f.image
+ fv = f.v
+ uv = f.uv
+ mat = f.mat
+ for i,v in enumerate(fv):
+ vi = v.index
+ vert_faces_uvs[vi] = uv[i] # no nice averaging
+ vert_faces_images[vi] = img
+
+
+ # Now copy UVs across
+ for f in new_faces:
+ fi = [v.index for v in f.v]
+ f.image = vert_faces_images[fi[0]]
+ uv = f.uv
+ for i,vi in enumerate(fi):
+ uv[i][:] = vert_faces_uvs[vi]
+
+ if len(me.materials) > 1:
+ vert_faces_mats = [None] * len(me.verts)
+ for i,f in enumerate(orig_faces):
+ mat = f.mat
+ for i,v in enumerate(f.v):
+ vi = v.index
+ vert_faces_mats[vi] = mat
+
+ # Now copy UVs across
+ for f in new_faces:
+ print vert_faces_mats[f.v[0].index]
+ f.mat = vert_faces_mats[f.v[0].index]
+
+
+ me.verts.delete(grid_data_dict.keys())
+
+ # me.faces.delete(1, faces_remove)
+
+ if me.faceUV:
+ me.activeUVLayer = act_uvlay
+
+ me.calcNormals()
+
+def main():
+
+ # Gets the current scene, there can be many scenes in 1 blend file.
+ sce = bpy.data.scenes.active
+
+ # Get the active object, there can only ever be 1
+ # and the active object is always the editmode object.
+ ob_act = sce.objects.active
+
+ if not ob_act or ob_act.type != 'Mesh':
+ BPyMessages.Error_NoMeshActive()
+ return
+
+ is_editmode = Window.EditMode()
+ if is_editmode: Window.EditMode(0)
+
+ Window.WaitCursor(1)
+ me = ob_act.getData(mesh=1) # old NMesh api is default
+ t = sys.time()
+
+ # Run the mesh editing function
+ my_mesh_util(me)
+
+ # Restore editmode if it was enabled
+ 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)
+ Window.WaitCursor(0)
+
+
+# This lets you can import the script without running it
+if __name__ == '__main__':
+ main()
+
diff --git a/release/scripts/scripttemplate_camer_object.py b/release/scripts/scripttemplate_camera_object.py
index cacc35ed1a5..cacc35ed1a5 100644
--- a/release/scripts/scripttemplate_camer_object.py
+++ b/release/scripts/scripttemplate_camera_object.py
diff --git a/release/scripts/uvcalc_smart_project.py b/release/scripts/uvcalc_smart_project.py
index d622e1a2af8..55d6ebfaa6f 100644
--- a/release/scripts/uvcalc_smart_project.py
+++ b/release/scripts/uvcalc_smart_project.py
@@ -870,7 +870,7 @@ def main():
'UV Layout',\
('Share Tex Space', USER_SHARE_SPACE, 'Objects Share texture space, map all objects into 1 uvmap.'),\
('Stretch to bounds', USER_STRETCH_ASPECT, 'Stretch the final output to texture bounds.'),\
- ('Island Margin:', USER_ISLAND_MARGIN, 0.0, 0.25, 'Margin to reduce bleed from adjacent islands.'),\
+ ('Island Margin:', USER_ISLAND_MARGIN, 0.0, 0.5, 'Margin to reduce bleed from adjacent islands.'),\
'Fill in empty areas',\
('Fill Holes', USER_FILL_HOLES, 'Fill in empty areas reduced texture waistage (slow).'),\
('Fill Quality:', USER_FILL_HOLES_QUALITY, 1, 100, 'Depends on fill holes, how tightly to fill UV holes, (higher is slower)'),\
diff --git a/release/ui/buttons_data_armature.py b/release/ui/buttons_data_armature.py
new file mode 100644
index 00000000000..2982ad52a6d
--- /dev/null
+++ b/release/ui/buttons_data_armature.py
@@ -0,0 +1,121 @@
+import bpy
+
+class DataButtonsPanel(bpy.types.Panel):
+ __space_type__ = "BUTTONS_WINDOW"
+ __region_type__ = "WINDOW"
+ __context__ = "data"
+
+ def poll(self, context):
+ ob = context.active_object
+ return (ob and ob.type == 'ARMATURE')
+
+class DATA_PT_skeleton(DataButtonsPanel):
+ __idname__ = "DATA_PT_skeleton"
+ __label__ = "Skeleton"
+
+ def draw(self, context):
+ arm = context.active_object.data
+ layout = self.layout
+
+ row = layout.row()
+ row.itemR(arm, "rest_position")
+
+ split = layout.split()
+
+ sub = split.column()
+
+ sub.itemL(text="Deform:")
+ sub.itemR(arm, "deform_vertexgroups", text="Vertes Groups")
+ sub.itemR(arm, "deform_envelope", text="Envelopes")
+ sub.itemR(arm, "deform_quaternion", text="Quaternion")
+ sub.itemR(arm, "deform_bbone_rest", text="B-Bones Rest")
+ #sub.itemR(arm, "x_axis_mirror")
+ #sub.itemR(arm, "auto_ik")
+
+ sub = split.column()
+ sub.itemL(text="Layers:")
+ sub.itemL(text="LAYERS")
+ #sub.itemR(arm, "layer")
+ #sub.itemR(arm, "layer_protection")
+
+
+class DATA_PT_display(DataButtonsPanel):
+ __idname__ = "DATA_PT_display"
+ __label__ = "Display"
+
+ def draw(self, context):
+ arm = context.active_object.data
+ layout = self.layout
+
+ split = layout.split()
+
+ sub = split.column()
+ sub.itemR(arm, "drawtype", text="Style")
+ sub.itemR(arm, "delay_deform", text="Delay Refresh")
+
+ sub = split.column()
+ sub.itemR(arm, "draw_names", text="Names")
+ sub.itemR(arm, "draw_axes", text="Axes")
+ sub.itemR(arm, "draw_custom_bone_shapes", text="Shapes")
+ sub.itemR(arm, "draw_group_colors", text="Colors")
+
+
+class DATA_PT_paths(DataButtonsPanel):
+ __idname__ = "DATA_PT_paths"
+ __label__ = "Paths"
+
+ def draw(self, context):
+ arm = context.active_object.data
+ layout = self.layout
+
+ split = layout.split()
+
+ sub = split.column()
+
+ sub.itemR(arm, "paths_show_around_current_frame", text="Around Frame")
+ if (arm.paths_show_around_current_frame):
+ sub.itemR(arm, "path_before_current", text="Before")
+ sub.itemR(arm, "path_after_current", text="After")
+ else:
+ sub.itemR(arm, "path_start_frame", text="Start")
+ sub.itemR(arm, "path_end_frame", text="End")
+
+ sub.itemR(arm, "path_size", text="Step")
+ sub.itemR(arm, "paths_calculate_head_positions", text="Head")
+
+ sub = split.column()
+ sub.itemL(text="Show:")
+ sub.itemR(arm, "paths_show_frame_numbers", text="Frame Numbers")
+ sub.itemR(arm, "paths_highlight_keyframes", text="Keyframes")
+ sub.itemR(arm, "paths_show_keyframe_numbers", text="Keyframe Numbers")
+
+
+class DATA_PT_ghost(DataButtonsPanel):
+ __idname__ = "DATA_PT_ghost"
+ __label__ = "Ghost"
+
+ def draw(self, context):
+ arm = context.active_object.data
+ layout = self.layout
+
+ split = layout.split()
+
+ sub = split.column()
+
+ sub.itemR(arm, "ghost_type", text="Scope")
+ if arm.ghost_type == 'RANGE':
+ sub.itemR(arm, "ghost_start_frame", text="Start")
+ sub.itemR(arm, "ghost_end_frame", text="End")
+ sub.itemR(arm, "ghost_size", text="Step")
+ elif arm.ghost_type == 'CURRENT_FRAME':
+ sub.itemR(arm, "ghost_step", text="Range")
+ sub.itemR(arm, "ghost_size", text="Step")
+
+ sub = split.column()
+
+ sub.itemR(arm, "ghost_only_selected", text="Selected Only")
+
+bpy.types.register(DATA_PT_skeleton)
+bpy.types.register(DATA_PT_display)
+bpy.types.register(DATA_PT_paths)
+bpy.types.register(DATA_PT_ghost)
diff --git a/release/ui/buttons_data_bone.py b/release/ui/buttons_data_bone.py
new file mode 100644
index 00000000000..6982b9beecb
--- /dev/null
+++ b/release/ui/buttons_data_bone.py
@@ -0,0 +1,67 @@
+
+import bpy
+
+class DataButtonsPanel(bpy.types.Panel):
+ __space_type__ = "BUTTONS_WINDOW"
+ __region_type__ = "WINDOW"
+ __context__ = "bone"
+
+ def poll(self, context):
+ ob = context.active_object
+ return (ob and ob.type == 'ARMATURE')
+
+class DATA_PT_bone(DataButtonsPanel):
+ __idname__ = "DATA_PT_bone"
+ __label__ = "Bone"
+
+ def draw(self, context):
+ bone = context.main.armatures[0].bones[0]
+ layout = self.layout
+
+ split = layout.split()
+
+ sub = split.column()
+ sub.itemR(bone, "name")
+ sub.itemR(bone, "parent")
+ sub.itemR(bone, "connected")
+ sub.itemR(bone, "deform")
+
+
+ sub.itemL(text="Inherit:")
+ sub.itemR(bone, "hinge")
+ sub.itemR(bone, "inherit_scale")
+
+ sub.itemL(text="Envelope:")
+ sub.itemR(bone, "envelope_distance", text="Distance")
+ sub.itemR(bone, "envelope_weight", text="Weight")
+ sub.itemR(bone, "multiply_vertexgroup_with_envelope", text="Multiply")
+
+ sub = split.column()
+ #sub.itemR(bone, "layer")
+ sub.itemL(text="Display:")
+ sub.itemR(bone, "draw_wire", text="Wireframe")
+ sub.itemR(bone, "editmode_hidden", text="Hide (EditMode)")
+ sub.itemR(bone, "pose_channel_hidden", text="Hide (PoseMode)")
+
+ sub.itemL(text="Curved Bones:")
+ sub.itemR(bone, "bbone_segments", text="Segments")
+ sub.itemR(bone, "bbone_in", text="Ease In")
+ sub.itemR(bone, "bbone_out", text="Ease Out")
+
+
+ sub.itemR(bone, "cyclic_offset")
+
+
+class DATA_PT_constraints(DataButtonsPanel):
+ __idname__ = "DATA_PT_constraints"
+ __label__ = "Constraints"
+
+ def draw(self, context):
+ bone = context.main.armatures[0].bones[0]
+ layout = self.layout
+ split = layout.split()
+
+ sub = split.column()
+
+bpy.types.register(DATA_PT_bone)
+bpy.types.register(DATA_PT_constraints)
diff --git a/release/ui/buttons_data_camera.py b/release/ui/buttons_data_camera.py
new file mode 100644
index 00000000000..b41293758ea
--- /dev/null
+++ b/release/ui/buttons_data_camera.py
@@ -0,0 +1,81 @@
+
+import bpy
+
+class DataButtonsPanel(bpy.types.Panel):
+ __space_type__ = "BUTTONS_WINDOW"
+ __region_type__ = "WINDOW"
+ __context__ = "data"
+
+ def poll(self, context):
+ ob = context.active_object
+ return (ob and ob.type == 'CAMERA')
+
+class DATA_PT_cameralens(DataButtonsPanel):
+ __idname__ = "DATA_PT_camera"
+ __label__ = "Lens"
+
+ def draw(self, context):
+ cam = context.active_object.data
+ layout = self.layout
+
+ if not cam:
+ return
+
+ layout.itemR(cam, "type", expand=True)
+
+ row = layout.row(align=True)
+ if cam.type == 'PERSP':
+ if cam.lens_unit == 'MILLIMETERS':
+ row.itemR(cam, "lens", text="Angle")
+ elif cam.lens_unit == 'DEGREES':
+ row.itemR(cam, "angle")
+
+ row.itemR(cam, "lens_unit", text="")
+ elif cam.type == 'ORTHO':
+ row.itemR(cam, "ortho_scale")
+
+ split = layout.split()
+
+ sub = split.column(align=True)
+ sub.itemL(text="Shift:")
+ sub.itemR(cam, "shift_x", text="X")
+ sub.itemR(cam, "shift_y", text="Y")
+
+ sub = split.column(align=True)
+ sub.itemL(text="Clipping:")
+ sub.itemR(cam, "clip_start", text="Start")
+ sub.itemR(cam, "clip_end", text="End")
+
+ row = layout.row()
+ row.itemR(cam, "dof_object")
+ row.itemR(cam, "dof_distance")
+
+class DATA_PT_cameradisplay(DataButtonsPanel):
+ __idname__ = "DATA_PT_cameradisplay"
+ __label__ = "Display"
+
+ def draw(self, context):
+ cam = context.active_object.data
+ layout = self.layout
+
+ if not cam:
+ return
+
+ split = layout.split()
+
+ sub = split.column()
+ sub.itemR(cam, "show_limits", text="Limits")
+ sub.itemR(cam, "show_mist", text="Mist")
+ sub.itemR(cam, "show_title_safe", text="Title Safe")
+ sub.itemR(cam, "show_name", text="Name")
+
+ sub = split.column()
+ sub.itemR(cam, "show_passepartout", text="Passepartout")
+ if (cam.show_passepartout):
+ sub.itemR(cam, "passepartout_alpha", text="Alpha", slider=True)
+ sub.itemR(cam, "draw_size", text="Size")
+
+bpy.types.register(DATA_PT_cameralens)
+bpy.types.register(DATA_PT_cameradisplay)
+
+
diff --git a/release/ui/buttons_data_curve.py b/release/ui/buttons_data_curve.py
new file mode 100644
index 00000000000..e7dc7810493
--- /dev/null
+++ b/release/ui/buttons_data_curve.py
@@ -0,0 +1,147 @@
+
+import bpy
+
+class DataButtonsPanel(bpy.types.Panel):
+ __space_type__ = "BUTTONS_WINDOW"
+ __region_type__ = "WINDOW"
+ __context__ = "data"
+
+ def poll(self, context):
+ ob = context.active_object
+ return (ob and ob.type == 'CURVE')
+
+
+class DATA_PT_shape_curve(DataButtonsPanel):
+ __idname__ = "DATA_PT_shape_curve"
+ __label__ = "Shape"
+
+ def draw(self, context):
+ curve = context.main.curves[0]
+ layout = self.layout
+
+ if not curve:
+ return
+ row = layout.row()
+ row.itemR(curve, "curve_2d")
+
+ split = layout.split()
+
+ sub = split.column()
+ sub.itemL(text="Caps:")
+ sub.itemR(curve, "front")
+ sub.itemR(curve, "back")
+
+ sub.itemL(text="Textures:")
+ sub.itemR(curve, "uv_orco")
+ sub.itemR(curve, "auto_texspace")
+
+ sub = split.column()
+ sub.itemL(text="Resolution:")
+ sub.itemR(curve, "resolution_u", text="Preview U")
+ sub.itemR(curve, "resolution_v", text="Preview V")
+ sub.itemR(curve, "render_resolution_u", text="Render U")
+ sub.itemR(curve, "render_resolution_v", text="Render V")
+
+ sub.itemL(text="Display:")
+ sub.itemL(text="HANDLES")
+ sub.itemL(text="NORMALS")
+ sub.itemR(curve, "vertex_normal_flip")
+
+
+class DATA_PT_geometry(DataButtonsPanel):
+ __idname__ = "DATA_PT_geometry"
+ __label__ = "Geometry"
+
+ def draw(self, context):
+ curve = context.main.curves[0]
+ layout = self.layout
+
+ if not curve:
+ return
+
+
+ split = layout.split()
+
+ sub = split.column()
+ sub.itemL(text="Modification:")
+ sub.itemR(curve, "width")
+ sub.itemR(curve, "extrude")
+ sub.itemR(curve, "taper_object")
+ sub = split.column()
+ sub.itemL(text="Bevel:")
+ sub.itemR(curve, "bevel_depth", text="Depth", slider=True)
+ sub.itemR(curve, "bevel_resolution", text="Resolution")
+ sub.itemR(curve, "bevel_object")
+
+
+
+
+class DATA_PT_pathanim(DataButtonsPanel):
+ __idname__ = "DATA_PT_pathanim"
+ __label__ = "Path Animation"
+
+ def draw(self, context):
+ curve = context.main.curves[0]
+ layout = self.layout
+
+ if not curve:
+ return
+
+
+ split = layout.split()
+ sub = split.column(1)
+ sub.itemR(curve, "path", text="Enable")
+
+
+ split = layout.split()
+ sub = split.column()
+ sub.itemR(curve, "path_length", text="Frames")
+ sub.itemR(curve, "follow")
+
+ sub = split.column()
+ sub.itemR(curve, "stretch")
+ sub.itemR(curve, "offset_path_distance", text="Offset Children")
+
+
+class DATA_PT_current_curve(DataButtonsPanel):
+ __idname__ = "DATA_PT_current_curve"
+ __label__ = "Current Curve"
+
+ def draw(self, context):
+ currentcurve = context.main.curves[0].curves[0]
+ layout = self.layout
+
+ if not currentcurve:
+ return
+
+ split = layout.split()
+
+ sub = split.column()
+ sub.itemL(text="Cyclic:")
+ sub.itemR(currentcurve, "cyclic_u", text="U")
+ sub.itemR(currentcurve, "cyclic_v", text="V")
+ sub.itemL(text="Order:")
+ sub.itemR(currentcurve, "order_u", text="U")
+ sub.itemR(currentcurve, "order_v", text="V")
+ sub.itemL(text="Point Count:")
+ sub.itemR(currentcurve, "point_count_u", text="U")
+ sub.itemR(currentcurve, "point_count_v", text="V")
+ sub.itemL(text="Endpoints:")
+ sub.itemR(currentcurve, "endpoint_u", text="U")
+ sub.itemR(currentcurve, "endpoint_v", text="V")
+ sub = split.column()
+ sub.itemL(text="Bezier:")
+ sub.itemR(currentcurve, "bezier_u", text="U")
+ sub.itemR(currentcurve, "bezier_v", text="V")
+ sub.itemL(text="Resolution:")
+ sub.itemR(currentcurve, "resolution_u", text="U")
+ sub.itemR(currentcurve, "resolution_v", text="V")
+ sub.itemL(text="Interpolation:")
+ sub.itemR(currentcurve, "tilt_interpolation", text="Tilt")
+ sub.itemR(currentcurve, "radius_interpolation", text="Tilt")
+ sub.itemR(currentcurve, "smooth")
+
+bpy.types.register(DATA_PT_shape_curve)
+bpy.types.register(DATA_PT_geometry)
+bpy.types.register(DATA_PT_pathanim)
+bpy.types.register(DATA_PT_current_curve)
diff --git a/release/ui/buttons_data_empty.py b/release/ui/buttons_data_empty.py
new file mode 100644
index 00000000000..5fe1e943f1f
--- /dev/null
+++ b/release/ui/buttons_data_empty.py
@@ -0,0 +1,27 @@
+
+import bpy
+
+class DataButtonsPanel(bpy.types.Panel):
+ __space_type__ = "BUTTONS_WINDOW"
+ __region_type__ = "WINDOW"
+ __context__ = "data"
+
+ def poll(self, context):
+ ob = context.active_object
+ return (ob and ob.type == 'EMPTY')
+
+class DATA_PT_empty(DataButtonsPanel):
+ __idname__ = "DATA_PT_empty"
+ __label__ = "Empty"
+
+ def draw(self, context):
+ ob = context.active_object
+ layout = self.layout
+
+ if not ob:
+ return
+
+ layout.itemR(ob, "empty_draw_type")
+ layout.itemR(ob, "empty_draw_size")
+
+bpy.types.register(DATA_PT_empty)
diff --git a/release/ui/buttons_data_lamp.py b/release/ui/buttons_data_lamp.py
new file mode 100644
index 00000000000..2d0efdb83ac
--- /dev/null
+++ b/release/ui/buttons_data_lamp.py
@@ -0,0 +1,217 @@
+
+import bpy
+
+class DataButtonsPanel(bpy.types.Panel):
+ __space_type__ = "BUTTONS_WINDOW"
+ __region_type__ = "WINDOW"
+ __context__ = "data"
+
+ def poll(self, context):
+ ob = context.active_object
+ return (ob and ob.type == 'LAMP')
+
+class DATA_PT_lamp(DataButtonsPanel):
+ __idname__ = "DATA_PT_lamp"
+ __label__ = "Lamp"
+
+ def draw(self, context):
+ lamp = context.active_object.data
+ layout = self.layout
+
+ if not lamp:
+ return
+
+ row = layout.row()
+ row.itemR(lamp, "type", expand=True)
+
+ split = layout.split()
+
+ sub = split.column()
+ sub.itemR(lamp, "color")
+ sub.itemR(lamp, "energy", slider=True)
+ sub.itemR(lamp, "distance")
+ sub.itemR(lamp, "negative")
+
+ sub = split.column()
+ sub.itemR(lamp, "layer", text="This Layer Only")
+ sub.itemR(lamp, "specular")
+ sub.itemR(lamp, "diffuse")
+
+ if lamp.type in ('POINT', 'SPOT'):
+ sub.itemR(lamp, "falloff_type")
+ sub.itemR(lamp, "sphere")
+
+ if (lamp.falloff_type == 'LINEAR_QUADRATIC_WEIGHTED'):
+ sub.itemR(lamp, "linear_attenuation")
+ sub.itemR(lamp, "quadratic_attenuation")
+
+ if lamp.type == 'AREA':
+ sub.column()
+ sub.itemR(lamp, "gamma")
+ sub.itemR(lamp, "shape")
+ if (lamp.shape == 'SQUARE'):
+ sub.itemR(lamp, "size")
+ if (lamp.shape == 'RECTANGLE'):
+ sub.itemR(lamp, "size", text="Size X")
+ sub.itemR(lamp, "size_y")
+
+class DATA_PT_sunsky(DataButtonsPanel):
+ __idname__ = "DATA_PT_sunsky"
+ __label__ = "Sun/Sky"
+
+ def poll(self, context):
+ ob = context.active_object
+ return (ob.type == 'LAMP' and ob.data.type == 'SUN')
+
+ def draw(self, context):
+ lamp = context.active_object.data
+ layout = self.layout
+
+ if not lamp:
+ return
+
+ row = layout.row()
+ row.itemR(lamp, "sky")
+ row.itemR(lamp, "atmosphere")
+
+ if lamp.sky or lamp.atmosphere:
+ layout.itemR(lamp, "atmosphere_turbidity", text="Turbidity")
+
+ split = layout.split()
+
+ col = split.column()
+ if lamp.sky:
+ sub = col.column()
+ sub.itemR(lamp, "sky_blend_type", text="Blend Type")
+ sub.itemR(lamp, "sky_blend")
+ sub.itemR(lamp, "sky_color_space", text="Color Space")
+ sub.itemR(lamp, "sky_exposure")
+ sub = col.column()
+ sub.itemR(lamp, "horizon_brightness", text="Hor Bright")
+ sub.itemR(lamp, "spread", text="Hor Spread")
+ sub.itemR(lamp, "sun_brightness", text="Sun Bright")
+ sub.itemR(lamp, "sun_size")
+ sub.itemR(lamp, "backscattered_light", text="Back Light")
+
+ sub = split.column()
+ if lamp.atmosphere:
+ sub.itemR(lamp, "sun_intensity", text="Sun Intens")
+ sub.itemR(lamp, "atmosphere_inscattering", text="Inscattering")
+ sub.itemR(lamp, "atmosphere_extinction", text="Extinction")
+ sub.itemR(lamp, "atmosphere_distance_factor", text="Distance")
+
+class DATA_PT_shadow(DataButtonsPanel):
+ __idname__ = "DATA_PT_shadow"
+ __label__ = "Shadow"
+
+ def poll(self, context):
+ ob = context.active_object
+ return (ob.type == 'LAMP' and ob.data.type in ('POINT','SUN', 'SPOT', 'AREA'))
+
+ def draw(self, context):
+ lamp = context.active_object.data
+ layout = self.layout
+
+ if not lamp:
+ return
+
+ layout.itemR(lamp, "shadow_method", expand=True)
+
+ if lamp.shadow_method in ('BUFFER_SHADOW', 'RAY_SHADOW'):
+
+ split = layout.split()
+
+ sub = split.column()
+ sub.itemR(lamp, "shadow_color")
+
+ sub = split.column()
+ sub.itemR(lamp, "shadow_layer", text="This Layer Only")
+ sub.itemR(lamp, "only_shadow")
+
+ if lamp.shadow_method == 'RAY_SHADOW':
+
+ col = layout.column()
+ col.itemL(text="Sampling:")
+ col.row().itemR(lamp, "shadow_ray_sampling_method", expand=True)
+
+ if lamp.type in ('POINT', 'SUN', 'SPOT'):
+ flow = layout.column_flow()
+ flow.itemR(lamp, "shadow_soft_size", text="Soft Size")
+ flow.itemR(lamp, "shadow_ray_samples", text="Samples")
+ if lamp.shadow_ray_sampling_method == 'ADAPTIVE_QMC':
+ flow.itemR(lamp, "shadow_adaptive_threshold", text="Threshold")
+
+ if lamp.type == 'AREA':
+ flow = layout.column_flow()
+ flow.itemR(lamp, "shadow_ray_samples_x", text="Samples")
+ if lamp.shadow_ray_sampling_method == 'ADAPTIVE_QMC':
+ flow.itemR(lamp, "shadow_adaptive_threshold", text="Threshold")
+ if lamp.shadow_ray_sampling_method == 'CONSTANT_JITTERED':
+ flow.itemR(lamp, "umbra")
+ flow.itemR(lamp, "dither")
+ flow.itemR(lamp, "jitter")
+
+ if lamp.shadow_method == 'BUFFER_SHADOW':
+ col = layout.column()
+ col.itemL(text="Buffer Type:")
+ col.row().itemR(lamp, "shadow_buffer_type", expand=True)
+
+ if lamp.shadow_buffer_type in ('REGULAR', 'HALFWAY'):
+ flow = layout.column_flow()
+ flow.itemL(text="Sample Buffers:")
+ flow.itemR(lamp, "shadow_sample_buffers", text="")
+ flow.itemL(text="Filter Type:")
+ flow.itemR(lamp, "shadow_filter_type", text="")
+
+ flow = layout.column_flow()
+ flow.itemR(lamp, "shadow_buffer_size", text="Size")
+ flow.itemR(lamp, "shadow_buffer_samples", text="Samples")
+ flow.itemR(lamp, "shadow_buffer_bias", text="Bias")
+ flow.itemR(lamp, "shadow_buffer_soft", text="Soft")
+
+ if (lamp.shadow_buffer_type == 'IRREGULAR'):
+ row = layout.row()
+ row.itemR(lamp, "shadow_buffer_bias", text="Bias")
+
+ row = layout.row()
+ row.itemR(lamp, "auto_clip_start", text="Autoclip Start")
+ if not (lamp.auto_clip_start):
+ row.itemR(lamp, "shadow_buffer_clip_start", text="Clip Start")
+ row = layout.row()
+ row.itemR(lamp, "auto_clip_end", text="Autoclip End")
+ if not (lamp.auto_clip_end):
+ row.itemR(lamp, "shadow_buffer_clip_end", text=" Clip End")
+
+class DATA_PT_spot(DataButtonsPanel):
+ __idname__ = "DATA_PT_spot"
+ __label__ = "Spot"
+
+ def poll(self, context):
+ ob = context.active_object
+ return (ob.type == 'LAMP' and ob.data.type == 'SPOT')
+
+ def draw(self, context):
+ lamp = context.active_object.data
+ layout = self.layout
+
+ if not lamp:
+ return
+
+ split = layout.split()
+
+ sub = split.column()
+ sub.itemR(lamp, "square")
+ sub.itemR(lamp, "spot_size")
+ sub.itemR(lamp, "spot_blend")
+
+ sub = split.column()
+ sub.itemR(lamp, "halo")
+ if lamp.halo:
+ sub.itemR(lamp, "halo_intensity")
+ if lamp.shadow_method == 'BUFFER_SHADOW':
+ sub.itemR(lamp, "halo_step")
+
+bpy.types.register(DATA_PT_lamp)
+bpy.types.register(DATA_PT_shadow)
+bpy.types.register(DATA_PT_sunsky)
+bpy.types.register(DATA_PT_spot)
diff --git a/release/ui/buttons_data_lattice.py b/release/ui/buttons_data_lattice.py
new file mode 100644
index 00000000000..c7d5b9cfe4a
--- /dev/null
+++ b/release/ui/buttons_data_lattice.py
@@ -0,0 +1,40 @@
+
+import bpy
+
+class DataButtonsPanel(bpy.types.Panel):
+ __space_type__ = "BUTTONS_WINDOW"
+ __region_type__ = "WINDOW"
+ __context__ = "data"
+
+ def poll(self, context):
+ ob = context.active_object
+ return (ob and ob.type == 'LATTICE')
+
+class DATA_PT_lattice(DataButtonsPanel):
+ __idname__ = "DATA_PT_lattice"
+ __label__ = "Lattice"
+
+ def draw(self, context):
+ lat = context.active_object.data
+ layout = self.layout
+
+ if not lat:
+ return
+
+ row = layout.row()
+ row.itemR(lat, "points_u")
+ row.itemR(lat, "interpolation_type_u", expand=True)
+
+ row = layout.row()
+ row.itemR(lat, "points_v")
+ row.itemR(lat, "interpolation_type_v", expand=True)
+
+ row = layout.row()
+ row.itemR(lat, "points_w")
+ row.itemR(lat, "interpolation_type_w", expand=True)
+
+ row = layout.row()
+ row.itemR(lat, "outside")
+ row.itemR(lat, "shape_keys")
+
+bpy.types.register(DATA_PT_lattice)
diff --git a/release/ui/buttons_data_modifier.py b/release/ui/buttons_data_modifier.py
new file mode 100644
index 00000000000..a28a978080d
--- /dev/null
+++ b/release/ui/buttons_data_modifier.py
@@ -0,0 +1,59 @@
+
+import bpy
+
+class DataButtonsPanel(bpy.types.Panel):
+ __space_type__ = "BUTTONS_WINDOW"
+ __region_type__ = "WINDOW"
+ __context__ = "modifier"
+
+ def poll(self, context):
+ ob = context.active_object
+ return (ob and ob.type in ('MESH', 'CURVE', 'SURFACE', 'TEXT', 'LATTICE'))
+
+class DATA_PT_modifiers(DataButtonsPanel):
+ __idname__ = "DATA_PT_modifiers"
+ __label__ = "Modifiers"
+
+ def draw(self, context):
+ ob = context.active_object
+ layout = self.layout
+
+ if not ob:
+ return
+
+ layout.row()
+ layout.item_menu_enumO("OBJECT_OT_modifier_add", "type")
+
+ for md in ob.modifiers:
+ sub = layout.box()
+
+ row = sub.row()
+ row.itemR(md, "expanded", text="")
+ row.itemR(md, "name", text="")
+
+ row.itemR(md, "render", text="")
+ row.itemR(md, "realtime", text="")
+ row.itemR(md, "editmode", text="")
+ row.itemR(md, "on_cage", text="")
+
+ if md.expanded:
+ sub.itemS()
+
+ if (md.type == 'ARMATURE'):
+ self.armature(sub, md)
+
+ def armature(self, layout, md):
+ layout.itemR(md, "object")
+ row = layout.row()
+ row.itemR(md, "vertex_group")
+ row.itemR(md, "invert")
+ flow = layout.column_flow()
+ flow.itemR(md, "use_vertex_groups")
+ flow.itemR(md, "use_bone_envelopes")
+ flow.itemR(md, "quaternion")
+ flow.itemR(md, "b_bone_rest")
+ flow.itemR(md, "multi_modifier")
+
+bpy.types.register(DATA_PT_modifiers)
+
+
diff --git a/release/ui/buttons_data_text.py b/release/ui/buttons_data_text.py
new file mode 100644
index 00000000000..8db1d0316a9
--- /dev/null
+++ b/release/ui/buttons_data_text.py
@@ -0,0 +1,135 @@
+
+import bpy
+
+class DataButtonsPanel(bpy.types.Panel):
+ __space_type__ = "BUTTONS_WINDOW"
+ __region_type__ = "WINDOW"
+ __context__ = "data"
+
+ def poll(self, context):
+ ob = context.active_object
+ return (ob and ob.type == 'TEXT')
+
+class DATA_PT_shape_text(DataButtonsPanel):
+ __idname__ = "DATA_PT_shape_text"
+ __label__ = "Shape"
+
+ def draw(self, context):
+ curve = context.main.curves[0]
+ layout = self.layout
+
+ if not curve:
+ return
+ row = layout.row()
+ row.itemR(curve, "curve_2d")
+
+ split = layout.split()
+
+ sub = split.column()
+ sub.itemL(text="Caps:")
+ sub.itemR(curve, "front")
+ sub.itemR(curve, "back")
+
+ sub.itemL(text="Textures:")
+ sub.itemR(curve, "uv_orco")
+ sub.itemR(curve, "auto_texspace")
+
+ sub = split.column()
+ sub.itemL(text="Resolution:")
+ sub.itemR(curve, "resolution_u", text="Preview U")
+ sub.itemR(curve, "resolution_v", text="Preview V")
+ sub.itemR(curve, "render_resolution_u", text="Render U")
+ sub.itemR(curve, "render_resolution_v", text="Render V")
+
+ sub.itemL(text="Display:")
+ sub.itemR(curve, "fast")
+
+
+class DATA_PT_font(DataButtonsPanel):
+ __idname__ = "DATA_PT_font"
+ __label__ = "Font"
+
+ def draw(self, context):
+ text = context.main.curves[0]
+ layout = self.layout
+
+ if not text:
+ return
+
+ layout.row()
+ layout.itemR(text, "font")
+
+ split = layout.split()
+
+ sub = split.column()
+
+ # sub.itemR(text, "style")
+ sub.itemR(text, "bold")
+ sub.itemR(text, "italic")
+ sub.itemR(text, "underline")
+ sub.itemR(text, "text_size")
+ sub.itemR(text, "shear")
+
+ sub = split.column()
+
+ sub.itemR(text, "text_on_curve")
+ sub.itemR(text, "family")
+ sub.itemL(text="Underline:")
+ sub.itemR(text, "ul_position", text="Position")
+ sub.itemR(text, "ul_height", text="Height")
+
+ # sub.itemR(text, "edit_format")
+
+
+
+
+
+class DATA_PT_paragraph(DataButtonsPanel):
+ __idname__ = "DATA_PT_paragraph"
+ __label__ = "Paragraph"
+
+ def draw(self, context):
+ text = context.main.curves[0]
+ layout = self.layout
+
+ if not text:
+ return
+
+ row = layout.row()
+ row.itemL(text="Align:")
+ row = layout.row()
+ row.itemR(text, "spacemode", expand=True)
+
+ split = layout.split()
+
+ sub = split.column()
+
+ sub.itemL(text="Spacing:")
+ sub.itemR(text, "spacing", text="Character")
+ sub.itemR(text, "word_spacing", text="Word")
+ sub.itemR(text, "line_dist", text="Line")
+
+ sub = split.column()
+ sub.itemL(text="Offset:")
+ sub.itemR(text, "x_offset", text="X")
+ sub.itemR(text, "y_offset", text="Y")
+ sub.itemR(text, "wrap")
+
+class DATA_PT_textboxes(DataButtonsPanel):
+ __idname__ = "DATA_PT_textboxes"
+ __label__ = "Text Boxes"
+
+ def draw(self, context):
+ text = context.main.curves[0]
+ layout = self.layout
+
+ if not text:
+ return
+
+
+
+bpy.types.register(DATA_PT_shape_text)
+bpy.types.register(DATA_PT_font)
+bpy.types.register(DATA_PT_paragraph)
+bpy.types.register(DATA_PT_textboxes)
+
diff --git a/release/ui/buttons_material.py b/release/ui/buttons_material.py
new file mode 100644
index 00000000000..d13ae251a5a
--- /dev/null
+++ b/release/ui/buttons_material.py
@@ -0,0 +1,197 @@
+
+import bpy
+
+class MaterialButtonsPanel(bpy.types.Panel):
+ __space_type__ = "BUTTONS_WINDOW"
+ __region_type__ = "WINDOW"
+ __context__ = "material"
+
+ def poll(self, context):
+ ob = context.active_object
+ return (ob and ob.active_material)
+
+class MATERIAL_PT_material(MaterialButtonsPanel):
+ __idname__= "MATERIAL_PT_material"
+ __label__ = "Material"
+
+ def draw(self, context):
+ layout = self.layout
+ mat = context.active_object.active_material
+
+ row = layout.row()
+ row.itemR(mat, "type", expand=True)
+
+ row = layout.row()
+ row.column().itemR(mat, "diffuse_color")
+ row.column().itemR(mat, "specular_color")
+ row.column().itemR(mat, "mirror_color")
+
+ row = layout.row()
+ row.itemR(mat, "alpha", slider=True)
+
+class MATERIAL_PT_sss(MaterialButtonsPanel):
+ __idname__= "MATERIAL_PT_sss"
+ __label__ = "Subsurface Scattering"
+
+ def poll(self, context):
+ ob = context.active_object
+ return (ob and ob.active_material and ob.active_material.type == "SURFACE")
+
+ def draw_header(self, context):
+ sss = context.active_object.active_material.subsurface_scattering
+
+ layout = self.layout
+ layout.itemR(sss, "enabled", text="")
+
+ def draw(self, context):
+ layout = self.layout
+ sss = context.active_object.active_material.subsurface_scattering
+
+ flow = layout.column_flow()
+ flow.itemR(sss, "error_tolerance")
+ flow.itemR(sss, "ior")
+ flow.itemR(sss, "scale", slider=True)
+
+ row = layout.row()
+ row.column().itemR(sss, "color")
+ row.column().itemR(sss, "radius")
+
+ flow = layout.column_flow()
+ flow.itemR(sss, "color_factor", slider=True)
+ flow.itemR(sss, "texture_factor", slider=True)
+ flow.itemR(sss, "front", slider=True)
+ flow.itemR(sss, "back", slider=True)
+
+class MATERIAL_PT_raymir(MaterialButtonsPanel):
+ __idname__= "MATERIAL_PT_raymir"
+ __label__ = "Ray Mirror"
+
+ def poll(self, context):
+ ob = context.active_object
+ return (ob and ob.active_material and ob.active_material.type == "SURFACE")
+
+ def draw_header(self, context):
+ raym = context.active_object.active_material.raytrace_mirror
+
+ layout = self.layout
+ layout.itemR(raym, "enabled", text="")
+
+ def draw(self, context):
+ layout = self.layout
+ raym = context.active_object.active_material.raytrace_mirror
+
+ split = layout.split()
+
+ sub = split.column()
+ sub.itemR(raym, "reflect", text="RayMir", slider=True)
+ sub.itemR(raym, "fresnel", slider=True)
+ sub.itemR(raym, "fresnel_fac", text="Fac", slider=True)
+
+ sub = split.column()
+ sub.itemR(raym, "gloss", slider=True)
+ sub.itemR(raym, "gloss_threshold", slider=True)
+ sub.itemR(raym, "gloss_samples")
+ sub.itemR(raym, "gloss_anisotropic", slider=True)
+
+ flow = layout.column_flow()
+ flow.itemR(raym, "distance", text="Max Dist")
+ flow.itemR(raym, "depth")
+ flow.itemR(raym, "fade_to")
+
+class MATERIAL_PT_raytransp(MaterialButtonsPanel):
+ __idname__= "MATERIAL_PT_raytransp"
+ __label__= "Ray Transparency"
+
+ def poll(self, context):
+ ob = context.active_object
+ return (ob and ob.active_material and ob.active_material.type == "SURFACE")
+
+ def draw_header(self, context):
+ rayt = context.active_object.active_material.raytrace_transparency
+
+ layout = self.layout
+ layout.itemR(rayt, "enabled", text="")
+
+ def draw(self, context):
+ layout = self.layout
+ rayt = context.active_object.active_material.raytrace_transparency
+
+ split = layout.split()
+
+ sub = split.column()
+ sub.itemR(rayt, "ior")
+ sub.itemR(rayt, "fresnel", slider=True)
+ sub.itemR(rayt, "fresnel_fac", text="Fac", slider=True)
+
+ sub = split.column()
+ sub.itemR(rayt, "gloss", slider=True)
+ sub.itemR(rayt, "gloss_threshold", slider=True)
+ sub.itemR(rayt, "gloss_samples")
+
+ flow = layout.column_flow()
+ flow.itemR(rayt, "filter", slider=True)
+ flow.itemR(rayt, "limit")
+ flow.itemR(rayt, "falloff", slider=True)
+ flow.itemR(rayt, "specular_opacity", slider=True)
+ flow.itemR(rayt, "depth")
+
+class MATERIAL_PT_halo(MaterialButtonsPanel):
+ __idname__= "MATERIAL_PT_halo"
+ __label__= "Halo"
+
+ def poll(self, context):
+ ob = context.active_object
+ return (ob and ob.active_material and ob.active_material.type == "HALO")
+
+ def draw(self, context):
+ layout = self.layout
+ mat = context.active_object.active_material
+ halo = mat.halo
+
+ split = layout.split()
+
+ sub = split.column()
+ sub.itemL(text="General Settings:")
+ sub.itemR(halo, "size", slider=True)
+ sub.itemR(halo, "hardness", slider=True)
+ sub.itemR(halo, "add", slider=True)
+
+ sub = split.column()
+ sub.itemL(text="Elements:")
+ sub.itemR(halo, "ring")
+ sub.itemR(halo, "lines")
+ sub.itemR(halo, "star")
+ sub.itemR(halo, "flare_mode")
+
+ row = layout.row()
+
+ sub = row.column()
+ sub.itemL(text="Options:")
+ sub.itemR(halo, "use_texture", text="Texture")
+ sub.itemR(halo, "use_vertex_normal", text="Vertex Normal")
+ sub.itemR(halo, "xalpha")
+ sub.itemR(halo, "shaded")
+ sub.itemR(halo, "soft")
+
+ sub = row.column()
+ if (halo.ring):
+ sub.itemR(halo, "rings", slider=True)
+ if (halo.lines):
+ sub.itemR(halo, "line_number", slider=True)
+ if (halo.ring or halo.lines):
+ sub.itemR(halo, "seed")
+ if (halo.star):
+ sub.itemR(halo, "star_tips", slider=True)
+ if (halo.flare_mode):
+ sub.itemL(text="Flare:")
+ sub.itemR(halo, "flare_size", text="Size", slider=True)
+ sub.itemR(halo, "flare_subsize", text="Subsize", slider=True)
+ sub.itemR(halo, "flare_boost", text="Boost", slider=True)
+ sub.itemR(halo, "flare_seed", text="Seed")
+ sub.itemR(halo, "flares_sub", text="Sub", slider=True)
+
+bpy.types.register(MATERIAL_PT_material)
+bpy.types.register(MATERIAL_PT_raymir)
+bpy.types.register(MATERIAL_PT_raytransp)
+bpy.types.register(MATERIAL_PT_sss)
+bpy.types.register(MATERIAL_PT_halo)
diff --git a/release/ui/buttons_objects.py b/release/ui/buttons_objects.py
new file mode 100644
index 00000000000..c0e1f439df8
--- /dev/null
+++ b/release/ui/buttons_objects.py
@@ -0,0 +1,147 @@
+
+import bpy
+
+class ObjectButtonsPanel(bpy.types.Panel):
+ __space_type__ = "BUTTONS_WINDOW"
+ __region_type__ = "WINDOW"
+ __context__ = "object"
+
+ def poll(self, context):
+ return (context.active_object != None)
+
+class OBJECT_PT_transform(ObjectButtonsPanel):
+ __idname__ = "OBJECT_PT_transform"
+ __label__ = "Transform"
+
+ def draw(self, context):
+ ob = context.active_object
+ layout = self.layout
+
+ row = layout.row()
+ row.column().itemR(ob, "location")
+ row.column().itemR(ob, "rotation")
+ row.column().itemR(ob, "scale")
+
+class OBJECT_PT_groups(ObjectButtonsPanel):
+ __idname__ = "OBJECT_PT_groups"
+ __label__ = "Groups"
+
+ def draw(self, context):
+ ob = context.active_object
+ layout = self.layout
+
+ row = layout.row()
+ row.itemR(ob, "pass_index")
+ row.itemR(ob, "parent")
+
+ # layout.left_right()
+ # layout.itemO("OBJECT_OT_add_group");
+
+ for group in bpy.data.groups:
+ if ob in group.objects:
+ box = layout.box()
+
+ row = box.row()
+ row.itemR(group, "name")
+ #row.itemO("OBJECT_OT_remove_group")
+
+ row = box.row()
+ row.column().itemR(group, "layer")
+ row.column().itemR(group, "dupli_offset")
+
+class OBJECT_PT_display(ObjectButtonsPanel):
+ __idname__ = "OBJECT_PT_display"
+ __label__ = "Display"
+
+ def draw(self, context):
+ ob = context.active_object
+ layout = self.layout
+
+ row = layout.row()
+ row.itemR(ob, "max_draw_type", text="Type")
+ row.itemR(ob, "draw_bounds_type", text="Bounds")
+
+ flow = layout.column_flow()
+ flow.itemR(ob, "draw_name", text="Name")
+ flow.itemR(ob, "draw_axis", text="Axis")
+ flow.itemR(ob, "draw_wire", text="Wire")
+ flow.itemR(ob, "draw_texture_space", text="Texture Space")
+ flow.itemR(ob, "x_ray", text="X-Ray")
+ flow.itemR(ob, "draw_transparent", text="Transparency")
+
+class OBJECT_PT_duplication(ObjectButtonsPanel):
+ __idname__ = "OBJECT_PT_duplication"
+ __label__ = "Duplication"
+
+ def draw(self, context):
+ ob = context.active_object
+ layout = self.layout
+
+ row = layout.row()
+ row.itemR(ob, "dupli_type", expand=True)
+
+ if ob.dupli_type == "FRAMES":
+ split = layout.split()
+
+ sub = split.column(align=True)
+ sub.itemR(ob, "dupli_frames_start", text="Start")
+ sub.itemR(ob, "dupli_frames_end", text="End")
+
+ sub = split.column(align=True)
+ sub.itemR(ob, "dupli_frames_on", text="On")
+ sub.itemR(ob, "dupli_frames_off", text="Off")
+
+ split = layout.split()
+ sub = split.column()
+ sub.itemR(ob, "dupli_frames_no_speed", text="No Speed")
+
+ elif ob.dupli_type == "VERTS":
+ split = layout.split()
+
+ sub = split.column(align=True)
+ sub.itemR(ob, "dupli_verts_rotation", text="Rotation")
+
+ elif ob.dupli_type == "FACES":
+ split = layout.split()
+
+ sub = split.column()
+ sub.itemR(ob, "dupli_faces_scale", text="Scale")
+ sub = split.column()
+ sub.itemR(ob, "dupli_faces_inherit_scale", text="Inherit Scale")
+
+ elif ob.dupli_type == "GROUP":
+ split = layout.split()
+
+ sub = split.column(align=True)
+ sub.itemR(ob, "dupli_group", text="Group")
+
+class OBJECT_PT_animation(ObjectButtonsPanel):
+ __idname__ = "OBJECT_PT_animation"
+ __label__ = "Animation"
+
+ def draw(self, context):
+ ob = context.active_object
+ layout = self.layout
+
+ row = layout.row()
+
+ sub = row.column()
+ sub.itemL(text="Time Offset:")
+ sub.itemR(ob, "time_offset_edit", text="Edit")
+ sub.itemR(ob, "time_offset_particle", text="Particle")
+ sub.itemR(ob, "time_offset_parent", text="Parent")
+ sub.itemR(ob, "slow_parent")
+ sub.itemR(ob, "time_offset", text="Offset")
+
+ sub = row.column()
+ sub.itemL(text="Tracking:")
+ sub.itemR(ob, "track_axis", text="Axis")
+ sub.itemR(ob, "up_axis", text="Up Axis")
+ sub.itemR(ob, "track_rotation", text="Rotation")
+
+bpy.types.register(OBJECT_PT_transform)
+bpy.types.register(OBJECT_PT_groups)
+bpy.types.register(OBJECT_PT_display)
+bpy.types.register(OBJECT_PT_duplication)
+bpy.types.register(OBJECT_PT_animation)
+
diff --git a/release/ui/buttons_scene.py b/release/ui/buttons_scene.py
new file mode 100644
index 00000000000..f3ab661a678
--- /dev/null
+++ b/release/ui/buttons_scene.py
@@ -0,0 +1,177 @@
+
+import bpy
+
+class RenderButtonsPanel(bpy.types.Panel):
+ __space_type__ = "BUTTONS_WINDOW"
+ __region_type__ = "WINDOW"
+ __context__ = "scene"
+
+class RENDER_PT_shading(RenderButtonsPanel):
+ __label__ = "Shading"
+
+ def draw(self, context):
+ scene = context.scene
+ layout = self.layout
+
+ rd = scene.render_data
+
+ split = layout.split()
+
+ sub = split.column()
+ sub.itemR(rd, "render_shadows", text="Shadows")
+ sub.itemR(rd, "render_sss", text="Subsurface Scattering")
+ sub.itemR(rd, "render_envmaps", text="Environment Map")
+ # sub.itemR(rd, "render_radiosity", text="Radio")
+
+ sub = split.column()
+ sub.itemR(rd, "render_raytracing", text="Ray Tracing")
+ if (rd.render_raytracing):
+ sub.itemR(rd, "octree_resolution", text="Octree")
+
+class RENDER_PT_output(RenderButtonsPanel):
+ __label__ = "Output"
+
+ def draw(self, context):
+ scene = context.scene
+ layout = self.layout
+
+ rd = scene.render_data
+
+ col = layout.column()
+ col.itemR(rd, "output_path")
+
+ split = layout.split()
+
+ sub = split.column()
+ sub.itemR(rd, "image_type")
+ if rd.image_type in ("AVIJPEG", "JPEG"):
+ sub.itemR(rd, "quality", slider=True)
+
+ sub = split.column()
+ sub.itemR(rd, "color_mode")
+ sub.itemR(rd, "alpha_mode")
+
+ split = layout.split()
+
+ sub = split.column()
+ sub.itemL(text="Distributed Rendering:")
+ sub.itemR(rd, "placeholders")
+ sub.itemR(rd, "no_overwrite")
+
+ sub = split.column()
+ sub.itemL(text="Settings:")
+ sub.itemR(rd, "file_extensions")
+ sub.itemR(rd, "fields", text="Fields")
+ if rd.fields:
+ sub.itemR(rd, "fields_still", text="Still")
+ sub.row().itemR(rd, "field_order", expand=True)
+
+
+class RENDER_PT_antialiasing(RenderButtonsPanel):
+ __label__ = "Anti-Aliasing"
+
+ def draw_header(self, context):
+ rd = context.scene.render_data
+
+ layout = self.layout
+ layout.itemR(rd, "antialiasing", text="")
+
+ def draw(self, context):
+ scene = context.scene
+ layout = self.layout
+
+ rd = scene.render_data
+
+ split = layout.split()
+
+ sub = split.column()
+ sub.itemL(text="Samples:")
+ sub.row().itemR(rd, "antialiasing_samples", expand=True)
+
+ sub = split.column()
+ sub.itemR(rd, "pixel_filter")
+ sub.itemR(rd, "filter_size", text="Size", slider=True)
+ sub.itemR(rd, "save_buffers")
+ if rd.save_buffers:
+ sub.itemR(rd, "full_sample")
+
+class RENDER_PT_render(RenderButtonsPanel):
+ __label__ = "Render"
+
+ def draw(self, context):
+ scene = context.scene
+ layout = self.layout
+
+ rd = scene.render_data
+
+ row = layout.row()
+ row.itemO("SCREEN_OT_render", text="Render Still")
+ row.item_booleanO("SCREEN_OT_render", "anim", True, text="Render Animation")
+
+ row = layout.row()
+ row.itemR(rd, "do_composite")
+ row.itemR(rd, "do_sequence")
+ if rd.do_composite:
+ row = layout.row()
+ row.itemR(rd, "free_image_textures")
+
+ row = layout.row()
+ row.itemL(text="Threads:")
+ row.itemL(text="Tiles:")
+
+ split = layout.split()
+
+ sub = split.column(align=True)
+ sub.row().itemR(rd, "threads_mode", expand=True)
+ if rd.threads_mode == 'THREADS_FIXED':
+ sub.itemR(rd, "threads")
+
+ sub = split.column(align=True)
+ sub.itemR(rd, "parts_x", text="X")
+ sub.itemR(rd, "parts_y", text="Y")
+
+ row = layout.row()
+ row.itemR(rd, "panorama")
+ row.itemR(rd, "dither_intensity", text="Dither", slider=True)
+ # row.itemR(rd, "backbuf")
+
+class RENDER_PT_dimensions(RenderButtonsPanel):
+ __label__ = "Dimensions"
+
+ def draw(self, context):
+ scene = context.scene
+ layout = self.layout
+
+ rd = scene.render_data
+
+ split = layout.split()
+
+ col = split.column(align=True)
+ col.itemL(text="Resolution:")
+ col.itemR(rd, "resolution_x", text="X")
+ col.itemR(rd, "resolution_y", text="Y")
+ col.itemR(rd, "resolution_percentage", text="")
+
+ col.itemL(text="Aspect Ratio:")
+ col.itemR(rd, "pixel_aspect_x", text="X")
+ col.itemR(rd, "pixel_aspect_y", text="Y")
+
+ col.itemR(rd, "border", text="Border")
+ if rd.border:
+ col.itemR(rd, "crop_to_border")
+
+ col = split.column(align=True)
+ col.itemL(text="Frame Range:")
+ col.itemR(scene, "start_frame", text="Start")
+ col.itemR(scene, "end_frame", text="End")
+ col.itemR(scene, "frame_step", text="Step")
+
+ col.itemL(text="Frame Rate:")
+ col.itemR(rd, "fps")
+ col.itemR(rd, "fps_base",text="/")
+
+bpy.types.register(RENDER_PT_render)
+bpy.types.register(RENDER_PT_dimensions)
+bpy.types.register(RENDER_PT_antialiasing)
+bpy.types.register(RENDER_PT_shading)
+bpy.types.register(RENDER_PT_output)
diff --git a/release/ui/buttons_world.py b/release/ui/buttons_world.py
new file mode 100644
index 00000000000..0bcd466366a
--- /dev/null
+++ b/release/ui/buttons_world.py
@@ -0,0 +1,141 @@
+
+import bpy
+
+class WorldButtonsPanel(bpy.types.Panel):
+ __space_type__ = "BUTTONS_WINDOW"
+ __region_type__ = "WINDOW"
+ __context__ = "world"
+
+ def poll(self, context):
+ return (context.scene.world != None)
+
+class WORLD_PT_world(WorldButtonsPanel):
+ __label__ = "World"
+
+ def draw(self, context):
+ world = context.scene.world
+ layout = self.layout
+
+ row = layout.row()
+ row.itemR(world, "blend_sky")
+ row.itemR(world, "paper_sky")
+ row.itemR(world, "real_sky")
+
+ row = layout.row()
+ row.column().itemR(world, "horizon_color")
+ row.column().itemR(world, "zenith_color")
+ row.column().itemR(world, "ambient_color")
+
+class WORLD_PT_color_correction(WorldButtonsPanel):
+ __label__ = "Color Correction"
+
+ def draw(self, context):
+ world = context.scene.world
+ layout = self.layout
+
+ row = layout.row()
+ row.itemR(world, "exposure")
+ row.itemR(world, "range")
+
+class WORLD_PT_mist(WorldButtonsPanel):
+ __label__ = "Mist"
+
+ def draw_header(self, context):
+ world = context.scene.world
+
+ layout = self.layout
+ layout.itemR(world.mist, "enabled", text="")
+
+ def draw(self, context):
+ world = context.scene.world
+ layout = self.layout
+
+ flow = layout.column_flow()
+ flow.itemR(world.mist, "start")
+ flow.itemR(world.mist, "depth")
+ flow.itemR(world.mist, "height")
+ flow.itemR(world.mist, "intensity")
+ col = layout.column()
+ col.itemL(text="Fallof:")
+ col.row().itemR(world.mist, "falloff", expand=True)
+
+class WORLD_PT_stars(WorldButtonsPanel):
+ __label__ = "Stars"
+
+ def draw_header(self, context):
+ world = context.scene.world
+
+ layout = self.layout
+ layout.itemR(world.stars, "enabled", text="")
+
+ def draw(self, context):
+ world = context.scene.world
+ layout = self.layout
+
+ flow = layout.column_flow()
+ flow.itemR(world.stars, "size")
+ flow.itemR(world.stars, "min_distance", text="Min. Dist")
+ flow.itemR(world.stars, "average_separation", text="Separation")
+ flow.itemR(world.stars, "color_randomization", text="Random:")
+
+class WORLD_PT_ambient_occlusion(WorldButtonsPanel):
+ __label__ = "Ambient Occlusion"
+
+ def draw_header(self, context):
+ world = context.scene.world
+
+ layout = self.layout
+ layout.itemR(world.ambient_occlusion, "enabled", text="")
+
+ def draw(self, context):
+ world = context.scene.world
+ layout = self.layout
+
+ ao = world.ambient_occlusion
+
+ row = layout.row()
+ row.itemR(ao, "gather_method", expand=True)
+
+ if ao.gather_method == 'RAYTRACE':
+ row = layout.row()
+ row.itemR(ao, "samples")
+ row.itemR(ao, "distance")
+
+ row = layout.row()
+ row.itemR(ao, "sample_method")
+ if ao.sample_method == 'ADAPTIVE_QMC':
+ row = layout.row()
+ row.itemR(ao, "threshold")
+ row.itemR(ao, "adapt_to_speed")
+
+ if ao.sample_method == 'CONSTANT_JITTERED':
+ row = layout.row()
+ row.itemR(ao, "bias")
+
+ if ao.gather_method == 'APPROXIMATE':
+ row = layout.row()
+ row.itemR(ao, "passes")
+ row.itemR(ao, "error_tolerance", text="Error")
+
+ row = layout.row()
+ row.itemR(ao, "correction")
+ row.itemR(ao, "pixel_cache")
+
+ row = layout.row()
+ row.itemS()
+
+ row = layout.row()
+ row.itemR(ao, "falloff")
+ row.itemR(ao, "strength")
+
+ col = layout.column()
+ col.row().itemR(ao, "blend_mode", expand=True)
+ col.row().itemR(ao, "color", expand=True)
+ col.itemR(ao, "energy")
+
+bpy.types.register(WORLD_PT_world)
+bpy.types.register(WORLD_PT_ambient_occlusion)
+bpy.types.register(WORLD_PT_mist)
+bpy.types.register(WORLD_PT_stars)
+bpy.types.register(WORLD_PT_color_correction)
+
diff --git a/release/ui/space_text.py b/release/ui/space_text.py
new file mode 100644
index 00000000000..d4187c10b69
--- /dev/null
+++ b/release/ui/space_text.py
@@ -0,0 +1,146 @@
+
+import bpy
+
+# temporary
+ICON_LINENUMBERS_OFF = 588
+ICON_WORDWRAP_OFF = 584
+ICON_SYNTAX_OFF = 586
+ICON_TEXT = 120
+ICON_HELP = 1
+ICON_SCRIPTPLUGINS = 1
+
+class TEXT_HT_header(bpy.types.Header):
+ __space_type__ = "TEXT_EDITOR"
+ __idname__ = "TEXT_HT_header"
+
+ def draw(self, context):
+ st = context.space_data
+ text = st.text
+ layout = self.layout
+
+ layout.template_header(context)
+
+ if context.area.show_menus:
+ row = layout.row(align=True)
+ row.itemM(context, "TEXT_MT_text")
+ if text:
+ row.itemM(context, "TEXT_MT_edit")
+ row.itemM(context, "TEXT_MT_format")
+
+ if text and text.modified:
+ row = layout.row()
+ # row.color(redalert)
+ row.itemO("TEXT_OT_resolve_conflict", text="", icon=ICON_HELP)
+
+ row = layout.row(align=True)
+ row.itemR(st, "line_numbers", text="", icon=ICON_LINENUMBERS_OFF)
+ row.itemR(st, "word_wrap", text="", icon=ICON_WORDWRAP_OFF)
+ row.itemR(st, "syntax_highlight", text="", icon=ICON_SYNTAX_OFF)
+ # row.itemR(st, "do_python_plugins", text="", icon=ICON_SCRIPTPLUGINS)
+
+ layout.template_header_ID(context, st, "text", new="TEXT_OT_new", open="TEXT_OT_open", unlink="TEXT_OT_unlink")
+
+ if text:
+ row = layout.row()
+ if text.filename != "":
+ if text.dirty:
+ row.itemL(text="File: *" + text.filename + " (unsaved)")
+ else:
+ row.itemL(text="File: " + text.filename)
+ else:
+ if text.library:
+ row.itemL(text="Text: External")
+ else:
+ row.itemL(text="Text: Internal")
+
+class TEXT_PT_properties(bpy.types.Panel):
+ __space_type__ = "TEXT_EDITOR"
+ __region_type__ = "UI"
+ __label__ = "Properties"
+
+ def draw(self, context):
+ st = context.space_data
+ layout = self.layout
+
+ flow = layout.column_flow()
+ flow.itemR(st, "line_numbers", icon=ICON_LINENUMBERS_OFF)
+ flow.itemR(st, "word_wrap", icon=ICON_WORDWRAP_OFF)
+ flow.itemR(st, "syntax_highlight", icon=ICON_SYNTAX_OFF)
+
+ flow = layout.column_flow()
+ flow.itemR(st, "font_size")
+ flow.itemR(st, "tab_width")
+
+class TEXT_PT_find(bpy.types.Panel):
+ __space_type__ = "TEXT_EDITOR"
+ __region_type__ = "UI"
+ __label__ = "Find"
+
+ def draw(self, context):
+ st = context.space_data
+ layout = self.layout
+
+ # find
+ col = layout.column(align=True)
+ row = col.row()
+ row.itemR(st, "find_text", text="")
+ row.itemO("TEXT_OT_find_set_selected", text="", icon=ICON_TEXT)
+ col.itemO("TEXT_OT_find")
+
+ # replace
+ col = layout.column(align=True)
+ row = col.row()
+ row.itemR(st, "replace_text", text="")
+ row.itemO("TEXT_OT_replace_set_selected", text="", icon=ICON_TEXT)
+ col.itemO("TEXT_OT_replace")
+
+ # mark
+ layout.itemO("TEXT_OT_mark_all")
+
+ # settings
+ row = layout.row()
+ row.itemR(st, "find_wrap", text="Wrap")
+ row.itemR(st, "find_all", text="All")
+
+class TEXT_MT_text(bpy.types.Menu):
+ __space_type__ = "TEXT_EDITOR"
+ __label__ = "Text"
+
+ def draw(self, context):
+ layout = self.layout
+ st = context.space_data
+ text = st.text
+
+ layout.column()
+ layout.itemO("TEXT_OT_new")
+ layout.itemO("TEXT_OT_open")
+
+ if text:
+ layout.itemO("TEXT_OT_reload")
+
+ layout.column()
+ layout.itemO("TEXT_OT_save")
+ layout.itemO("TEXT_OT_save_as")
+
+ if text.filename != "":
+ layout.itemO("TEXT_OT_make_internal")
+
+ layout.column()
+ layout.itemO("TEXT_OT_run_script")
+
+ #ifndef DISABLE_PYTHON
+ # XXX if(BPY_is_pyconstraint(text))
+ # XXX uiMenuItemO(head, 0, "TEXT_OT_refresh_pyconstraints");
+ #endif
+
+ #ifndef DISABLE_PYTHON
+ # XXX layout.column()
+ # XXX uiDefIconTextBlockBut(block, text_template_scriptsmenu, NULL, ICON_RIGHTARROW_THIN, "Script Templates", 0, yco-=20, 120, 19, "");
+ # XXX uiDefIconTextBlockBut(block, text_plugin_scriptsmenu, NULL, ICON_RIGHTARROW_THIN, "Text Plugins", 0, yco-=20, 120, 19, "");
+ #endif
+
+bpy.types.register(TEXT_HT_header)
+bpy.types.register(TEXT_PT_properties)
+bpy.types.register(TEXT_PT_find)
+bpy.types.register(TEXT_MT_text)
+
diff --git a/release/windows/specific.sh b/release/windows/specific.sh
index e3ecfcb959f..5df90869914 100755
--- a/release/windows/specific.sh
+++ b/release/windows/specific.sh
@@ -60,10 +60,6 @@ chmod +x $DISTDIR/python$PVERS.dll
#Add pthreads dll to package
cp -f $NAN_PTHREADS/lib/pthreadGC2.dll $DISTDIR/pthreadGC2.dll
-# Add fmod DLL to package
-# cp -f $NAN_FMOD/lib/fmod.dll $DISTDIR/fmod.dll
-# chmod +x $DISTDIR/fmod.dll
-
# Add gettext DLL to package
cp -f $NAN_GETTEXT/lib/gnu_gettext.dll $DISTDIR/gnu_gettext.dll
diff --git a/source/Makefile b/source/Makefile
index b81f0c4e5ed..85486c3a81f 100644
--- a/source/Makefile
+++ b/source/Makefile
@@ -158,7 +158,6 @@ endif
COMLIB += $(OCGDIR)/blender/makesdna/$(DEBUG_DIR)libdna.a
COMLIB += $(NAN_GUARDEDALLOC)/lib/libguardedalloc.a
COMLIB += $(NAN_MEMUTIL)/lib/libmemutil.a
-COMLIB += $(NAN_BMFONT)/lib/$(DEBUG_DIR)libbmfont.a
COMLIB += $(NAN_PNG)/lib/libpng.a
COMLIB += $(OCGDIR)/blender/yafray/$(DEBUG_DIR)libyafrayexport.a
@@ -184,23 +183,17 @@ ifeq ($(WITH_BINRELOC), true)
COMLIB += $(OCGDIR)/extern/binreloc/$(DEBUG_DIR)libbinreloc.a
endif
-ifeq ($(WITH_FREETYPE2), true)
- COMLIB += $(OCGDIR)/blender/ftfont/$(DEBUG_DIR)libftfont.a
- ifeq ($(OS), windows)
- ifeq ($(FREE_WINDOWS), true)
- COMLIB += $(NAN_FTGL)/lib/libftgl.a
+ifeq ($(OS), windows)
+ ifeq ($(FREE_WINDOWS), true)
COMLIB += $(NAN_FREETYPE)/lib/libfreetype.a
- else
- COMLIB += $(NAN_FTGL)/lib/ftgl_static_ST.lib
+ else
COMLIB += $(NAN_FREETYPE)/lib/freetype2ST.lib
- endif
+ endif
+else
+ ifeq ($(OS), irix)
+ COMLIB += $(NAN_FREETYPE)/lib/libfreetype.a
else
- COMLIB += $(NAN_FTGL)/lib/$(DEBUG_DIR)libftgl.a
- ifeq ($(OS), irix)
COMLIB += $(NAN_FREETYPE)/lib/libfreetype.a
- else
- COMLIB += $(NAN_FREETYPE)/lib/libfreetype.a
- endif
endif
endif
@@ -361,7 +354,7 @@ ifeq ($(OS),solaris)
SPLIB += $(NAN_ZLIB)/lib/libz.a
endif
-# OpenAL libs are already compiled as shared code! Check FMod if we switch to that. (nzc)
+# OpenAL libs are already compiled as shared code!
# Some vars to keep the rest of this section mostly readable
# in an 80 char term
@@ -544,7 +537,7 @@ ifdef NAN_BUILDINFO
$(CCC) $(REL_CFLAGS) -DBUILD_DATE='"$(BUILD_DATE)"' -DBUILD_TIME='"$(BUILD_TIME)"' -DBUILD_REV='"$(BUILD_REV)"' -DBUILD_PLATFORM='"$(CONFIG_GUESS)"' -DBUILD_TYPE='"static"' $(BUILDINFO_C) -c -o $(BUILDINFO_O) -DNAN_BUILDINFO
endif
mkdir -p $(DIR)/$(DEBUG_DIR)bin
- $(CCC) $(LDFLAGS) -o $(DIR)/$(DEBUG_DIR)bin/blenderstatic $(BUILDINFO_O) $(OBJS) $(GRPLIB) $(PULIB) $(COMLIB) $(LLIBS) $(SADD) $(LOPTS)
+ $(CCC) $(CCFLAGS) $(LDFLAGS) -o $(DIR)/$(DEBUG_DIR)bin/blenderstatic $(BUILDINFO_O) $(OBJS) $(GRPLIB) $(PULIB) $(COMLIB) $(LLIBS) $(SADD) $(LOPTS)
ifdef NAN_BUILDINFO
/bin/rm $(BUILDINFO_O)
endif
@@ -558,7 +551,7 @@ ifdef NAN_BUILDINFO
$(CCC) $(REL_CFLAGS) -DBUILD_DATE='"$(BUILD_DATE)"' -DBUILD_TIME='"$(BUILD_TIME)"' -DBUILD_REV='"$(BUILD_REV)"' -DBUILD_PLATFORM='"$(CONFIG_GUESS)"' -DBUILD_TYPE='"dynamic"' $(BUILDINFO_C) -c -o $(BUILDINFO_O) -DNAN_BUILDINFO
endif
mkdir -p $(DIR)/$(DEBUG_DIR)bin
- $(CCC) $(LDFLAGS) -o $(DIR)/$(DEBUG_DIR)bin/blender$(EXT) $(BUILDINFO_O) $(OBJS) $(GRPLIB) $(PULIB) $(COMLIB) $(LLIBS) $(DADD) $(LOPTS)
+ $(CCC) $(CCFLAGS) $(LDFLAGS) -o $(DIR)/$(DEBUG_DIR)bin/blender$(EXT) $(BUILDINFO_O) $(OBJS) $(GRPLIB) $(PULIB) $(COMLIB) $(LLIBS) $(DADD) $(LOPTS)
ifdef NAN_BUILDINFO
/bin/rm $(BUILDINFO_O)
endif
@@ -572,7 +565,7 @@ ifdef NAN_BUILDINFO
$(CCC) $(REL_CFLAGS) -DBUILD_DATE='"$(BUILD_DATE)"' -DBUILD_TIME='"$(BUILD_TIME)"' -DBUILD_REV='"$(BUILD_REV)"' -DBUILD_PLATFORM='"$(CONFIG_GUESS)"' -DBUILD_TYPE='"dynamic"' $(BUILDINFO_C) -c -o $(BUILDINFO_O) -DNAN_BUILDINFO
endif
mkdir -p $(DIR)/$(DEBUG_DIR)bin
- $(CCC) $(LDFLAGS) -o $(DIR)/$(DEBUG_DIR)bin/blenderplayer$(EXT) $(BUILDINFO_O) $(OBJS) $(SPLIB1) $(COMLIB) $(SPLIB) $(LLIBS) $(DADD) $(LOPTS)
+ $(CCC) $(CCFLAGS) $(LDFLAGS) -o $(DIR)/$(DEBUG_DIR)bin/blenderplayer$(EXT) $(BUILDINFO_O) $(OBJS) $(SPLIB1) $(COMLIB) $(SPLIB) $(LLIBS) $(DADD) $(LOPTS)
ifdef NAN_BUILDINFO
/bin/rm $(BUILDINFO_O)
endif
@@ -586,7 +579,7 @@ ifdef NAN_BUILDINFO
$(CCC) $(REL_CFLAGS) -DBUILD_DATE='"$(BUILD_DATE)"' -DBUILD_TIME='"$(BUILD_TIME)"' -DBUILD_REV='"$(BUILD_REV)"' -DBUILD_PLATFORM='"$(CONFIG_GUESS)"' -DBUILD_TYPE='"dynamic"' $(BUILDINFO_C) -c -o $(BUILDINFO_O) -DNAN_BUILDINFO
endif
mkdir -p $(DIR)/$(DEBUG_DIR)bin
- $(CCC) $(LDFLAGS) -o $(DIR)/$(DEBUG_DIR)bin/blenderdynplayer$(EXT) $(BUILDINFO_O) $(OBJS) $(SPLIB1) $(COMLIB) $(SPLIB) $(LLIBS) $(DADD) $(LOPTS)
+ $(CCC) $(CCFLAGS) $(LDFLAGS) -o $(DIR)/$(DEBUG_DIR)bin/blenderdynplayer$(EXT) $(BUILDINFO_O) $(OBJS) $(SPLIB1) $(COMLIB) $(SPLIB) $(LLIBS) $(DADD) $(LOPTS)
ifdef NAN_BUILDINFO
/bin/rm $(BUILDINFO_O)
endif
@@ -600,7 +593,7 @@ ifdef NAN_BUILDINFO
$(CCC) $(REL_CFLAGS) -DBUILD_DATE='"$(BUILD_DATE)"' -DBUILD_TIME='"$(BUILD_TIME)"' -DBUILD_REV='"$(BUILD_REV)"' -DBUILD_PLATFORM='"$(CONFIG_GUESS)"' -DBUILD_TYPE='"dynamic"' $(BUILDINFO_C) -c -o $(BUILDINFO_O) -DNAN_BUILDINFO
endif
mkdir -p $(DIR)/$(DEBUG_DIR)bin
- $(CCC) $(DYNLDFLAGS) -o $@ $(PLUGAPPLIB_XPLINK) $(LOPTS)
+ $(CCC) $(CCFLAGS) $(DYNLDFLAGS) -o $@ $(PLUGAPPLIB_XPLINK) $(LOPTS)
ifdef NAN_BUILDINFO
/bin/rm $(BUILDINFO_O)
endif
diff --git a/source/SConscript b/source/SConscript
index 9b497edd85a..d3a9373b4d8 100644
--- a/source/SConscript
+++ b/source/SConscript
@@ -7,5 +7,5 @@ SConscript(['blender/SConscript',
if env['WITH_BF_GAMEENGINE']:
SConscript (['gameengine/SConscript'])
-if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw'):
+if env['OURPLATFORM'] in ('win64-vc', 'win32-vc', 'win32-mingw'):
SConscript (['icons/SConscript'])
diff --git a/source/blender/CMakeLists.txt b/source/blender/CMakeLists.txt
index b76ce220ab3..9ec9efa6a8d 100644
--- a/source/blender/CMakeLists.txt
+++ b/source/blender/CMakeLists.txt
@@ -26,10 +26,6 @@
SUBDIRS(windowmanager editors avi nodes blenkernel blenlib blenloader blenpluginapi imbuf imbuf/intern/cineon gpu makesdna makesrna radiosity readblenfile render blenfont)
-IF(WITH_INTERNATIONAL)
- SUBDIRS(ftfont)
-ENDIF(WITH_INTERNATIONAL)
-
IF(WITH_OPENEXR)
SUBDIRS(imbuf/intern/openexr)
ENDIF(WITH_OPENEXR)
diff --git a/source/blender/Makefile b/source/blender/Makefile
index a12b53e6153..b8809c87213 100644
--- a/source/blender/Makefile
+++ b/source/blender/Makefile
@@ -36,10 +36,6 @@ DIRS += makesdna makesrna yafray
DIRS += python nodes gpu
DIRS += blenfont
-ifeq ($(WITH_FREETYPE2), true)
- DIRS += ftfont
-endif
-
ifeq ($(WITH_QUICKTIME), true)
DIRS += quicktime
endif
diff --git a/source/blender/SConscript b/source/blender/SConscript
index 8cbed8c1045..f0af7956c40 100644
--- a/source/blender/SConscript
+++ b/source/blender/SConscript
@@ -29,9 +29,6 @@ if env['WITH_BF_PYTHON']:
if env['WITH_BF_YAFRAY']:
SConscript(['yafray/SConscript'])
-if env['WITH_BF_INTERNATIONAL']:
- SConscript (['ftfont/SConscript'])
-
if env['WITH_BF_DDS']:
SConscript (['imbuf/intern/dds/SConscript'])
diff --git a/source/blender/blenfont/BLF_api.h b/source/blender/blenfont/BLF_api.h
index 71554df57ab..b5a61f2727f 100644
--- a/source/blender/blenfont/BLF_api.h
+++ b/source/blender/blenfont/BLF_api.h
@@ -31,49 +31,76 @@
struct rctf;
-int BLF_init(void);
+int BLF_init(int points, int dpi);
void BLF_exit(void);
int BLF_load(char *name);
int BLF_load_mem(char *name, unsigned char *mem, int mem_size);
+/* Attach a file with metrics information from memory. */
+void BLF_metrics_attach(unsigned char *mem, int mem_size);
+
+/*
+ * Set/Get the current font.
+ */
void BLF_set(int fontid);
+int BLF_get(void);
+
void BLF_aspect(float aspect);
void BLF_position(float x, float y, float z);
void BLF_size(int size, int dpi);
+
+/* Draw the string using the default font, size and dpi. */
+void BLF_draw_default(float x, float y, float z, char *str);
+
+/* Draw the string using the current font. */
void BLF_draw(char *str);
+/*
+ * This function return the bounding box of the string
+ * and are not multiplied by the aspect.
+ */
void BLF_boundbox(char *str, struct rctf *box);
+
+/*
+ * The next both function return the width and height
+ * of the string, using the current font and both value
+ * are multiplied by the aspect of the font.
+ */
float BLF_width(char *str);
float BLF_height(char *str);
+
+/*
+ * and this two function return the width and height
+ * of the string, using the default font and both value
+ * are multiplied by the aspect of the font.
+ */
+float BLF_width_default(char *str);
+float BLF_height_default(char *str);
+
+/*
+ * By default, rotation and clipping are disable and
+ * have to be enable/disable using BLF_enable/disable.
+ */
void BLF_rotation(float angle);
void BLF_clipping(float xmin, float ymin, float xmax, float ymax);
+void BLF_blur(int size);
+
void BLF_enable(int option);
void BLF_disable(int option);
-/* return the id of the current font. */
-int BLF_get(void);
-
-/* Read the .Blanguages file, return 1 on success or 0 if fails. */
-int BLF_lang_init(void);
-
-/* Free the memory allocate for the .Blanguages. */
-void BLF_lang_exit(void);
-
-/* Set the current Language. */
-void BLF_lang_set(int id);
-
-/* Return a string with all the Language available. */
-char *BLF_lang_pup(void);
-
-/* Return the number of invalid lines in the .Blanguages file,
- * zero means no error found.
+/*
+ * Search the path directory to the locale files, this try all
+ * the case for Linux, Win and Mac.
*/
-int BLF_lang_error(void);
+void BLF_lang_init(void);
-/* Return the code string for the specified language code. */
-char *BLF_lang_find_code(short langid);
+/* Set the current locale. */
+void BLF_lang_set(const char *);
+
+/* Set the current encoding name. */
+void BLF_lang_encoding_name(const char *str);
/* Add a path to the font dir paths. */
void BLF_dir_add(const char *path);
@@ -91,4 +118,8 @@ void BLF_dir_free(char **dirs, int count);
#define BLF_ROTATION (1<<0)
#define BLF_CLIPPING (1<<1)
+/* font->mode. */
+#define BLF_MODE_TEXTURE 0
+#define BLF_MODE_BITMAP 1
+
#endif /* BLF_API_H */
diff --git a/source/blender/blenfont/CMakeLists.txt b/source/blender/blenfont/CMakeLists.txt
index 4c21138f552..aef655ca0d1 100644
--- a/source/blender/blenfont/CMakeLists.txt
+++ b/source/blender/blenfont/CMakeLists.txt
@@ -26,18 +26,12 @@ FILE(GLOB SRC intern/*.c)
SET(INC
../../../intern/guardedalloc ../blenlib ../makesdna ../editors/include
- ../blenkernel ../ftfont ../../../extern/glew/include .
+ ../blenkernel ../../../extern/glew/include .
${FTGL_INC}
${FREETYPE_INC}
${GETTEXT_INC}
)
-ADD_DEFINITIONS(-DFTGL_LIBRARY_STATIC)
-
-IF(WITH_INTERNATIONAL)
- ADD_DEFINITIONS(-DWITH_FREETYPE2)
-ENDIF(WITH_INTERNATIONAL)
-
IF(WIN32)
ADD_DEFINITIONS(-D_WIN32 -DUSE_GETTEXT_DLL)
ENDIF(WIN32)
diff --git a/source/blender/blenfont/SConscript b/source/blender/blenfont/SConscript
index 85797c3c23b..fa6fa19a9ef 100644
--- a/source/blender/blenfont/SConscript
+++ b/source/blender/blenfont/SConscript
@@ -4,19 +4,14 @@ Import ('env')
sources = env.Glob('intern/*.c')
-incs = '. intern #/intern/guardedalloc ../blenkernel ../blenlib ../makesdna ../ftfont ../editors/include'
+incs = '. intern #/intern/guardedalloc ../blenkernel ../blenlib ../makesdna ../editors/include'
incs += ' #/extern/glew/include'
-incs += ' ' + env['BF_FTGL_INC']
incs += ' ' + env['BF_FREETYPE_INC']
incs += ' ' + env['BF_GETTEXT_INC']
defs = ''
-defs += 'FTGL_STATIC_LIBRARY'
if sys.platform == 'win32':
defs += ' _WIN32 USE_GETTEXT_DLL'
-if env['WITH_BF_INTERNATIONAL']:
- defs += ' WITH_FREETYPE2'
-
env.BlenderLib ( 'bf_blenfont', sources, Split(incs), Split(defs), libtype=['core'], priority=[210] )
diff --git a/source/blender/blenfont/intern/Makefile b/source/blender/blenfont/intern/Makefile
index 18bf42f3fa5..6e53ca959d3 100644
--- a/source/blender/blenfont/intern/Makefile
+++ b/source/blender/blenfont/intern/Makefile
@@ -60,16 +60,11 @@ ifeq ($(OS),linux)
endif
endif
-ifeq ($(WITH_FREETYPE2), true)
- CPPFLAGS += -DWITH_FREETYPE2
-endif
-
# Modules
CPPFLAGS += -I../../editors/include
CPPFLAGS += -I../../makesdna
CPPFLAGS += -I../../blenlib
CPPFLAGS += -I../../blenkernel
-CPPFLAGS += -I../../ftfont
# Memory allocator
CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include
diff --git a/source/blender/blenfont/intern/blf.c b/source/blender/blenfont/intern/blf.c
index 8e3b27bb425..14bc6a33b72 100644
--- a/source/blender/blenfont/intern/blf.c
+++ b/source/blender/blenfont/intern/blf.c
@@ -31,15 +31,11 @@
#include <string.h>
#include <math.h>
-#ifdef WITH_FREETYPE2
-
#include <ft2build.h>
#include FT_FREETYPE_H
#include FT_GLYPH_H
-#endif /* WITH_FREETYPE2 */
-
#include "MEM_guardedalloc.h"
#include "DNA_listBase.h"
@@ -75,14 +71,20 @@ int global_font_num= 0;
/* Current font. */
int global_font_cur= 0;
+/* Default size and dpi, for BLF_draw_default. */
+int global_font_default= -1;
+int global_font_points= 11;
+int global_font_dpi= 72;
-int BLF_init(void)
+int BLF_init(int points, int dpi)
{
int i;
for (i= 0; i < BLF_MAX_FONT; i++)
global_font[i]= NULL;
+ global_font_points= points;
+ global_font_dpi= dpi;
return(blf_font_init());
}
@@ -93,8 +95,8 @@ void BLF_exit(void)
for (i= 0; i < global_font_num; i++) {
font= global_font[i];
- if(font && font->free)
- (*font->free)(font);
+ if (font)
+ blf_font_free(font);
}
blf_font_exit();
@@ -126,8 +128,6 @@ int BLF_load(char *name)
i= blf_search(name);
if (i >= 0) {
font= global_font[i];
- font->ref++;
- printf("Increment reference (%d): %s\n", font->ref, name);
return(i);
}
@@ -138,11 +138,10 @@ int BLF_load(char *name)
filename= blf_dir_search(name);
if (!filename) {
- printf("Can't found font: %s\n", name);
+ printf("Can't find font: %s\n", name);
return(-1);
}
-#ifdef WITH_FREETYPE2
font= blf_font_new(name, filename);
MEM_freeN(filename);
@@ -155,9 +154,15 @@ int BLF_load(char *name)
i= global_font_num;
global_font_num++;
return(i);
-#endif /* WITH_FREETYPE2 */
+}
- return(-1);
+void BLF_metrics_attach(unsigned char *mem, int mem_size)
+{
+ FontBLF *font;
+
+ font= global_font[global_font_cur];
+ if (font)
+ blf_font_attach_from_mem(font, mem, mem_size);
}
int BLF_load_mem(char *name, unsigned char *mem, int mem_size)
@@ -171,8 +176,6 @@ int BLF_load_mem(char *name, unsigned char *mem, int mem_size)
i= blf_search(name);
if (i >= 0) {
font= global_font[i];
- font->ref++;
- printf("Increment reference (%d): %s\n", font->ref, name);
return(i);
}
@@ -181,21 +184,15 @@ int BLF_load_mem(char *name, unsigned char *mem, int mem_size)
return(-1);
}
- font= blf_internal_new(name);
- if (!font) {
-#ifdef WITH_FREETYPE2
- if (!mem || !mem_size) {
- printf("Can't load font, %s from memory!!\n", name);
- return(-1);
- }
-
- font= blf_font_new_from_mem(name, mem, mem_size);
-#endif /* WITH_FREETYPE2 */
+ if (!mem || !mem_size) {
+ printf("Can't load font: %s from memory!!\n", name);
+ return(-1);
+ }
- if (!font) {
- printf("Can't load font, %s from memory!!\n", name);
- return(-1);
- }
+ font= blf_font_new_from_mem(name, mem, mem_size);
+ if (!font) {
+ printf("Can't load font: %s from memory!!\n", name);
+ return(-1);
}
global_font[global_font_num]= font;
@@ -276,32 +273,96 @@ void BLF_size(int size, int dpi)
FontBLF *font;
font= global_font[global_font_cur];
- if (font && font->size_set)
- (*font->size_set)(font, size, dpi);
+ if (font)
+ blf_font_size(font, size, dpi);
+}
+
+void BLF_blur(int size)
+{
+ FontBLF *font;
+
+ font= global_font[global_font_cur];
+ if (font)
+ font->blur= size;
+}
+
+void BLF_draw_default(float x, float y, float z, char *str)
+{
+ FontBLF *font;
+ int old_font, old_point, old_dpi;
+
+ if (!str)
+ return;
+
+ if (global_font_default == -1)
+ global_font_default= blf_search("default");
+
+ if (global_font_default == -1) {
+ printf("Warning: Can't found default font!!\n");
+ return;
+ }
+
+ font= global_font[global_font_cur];
+ if (font) {
+ old_font= global_font_cur;
+ old_point= font->size;
+ old_dpi= font->dpi;
+ }
+
+ global_font_cur= global_font_default;
+ BLF_size(global_font_points, global_font_dpi);
+ BLF_position(x, y, z);
+ BLF_draw(str);
+
+ /* restore the old font. */
+ if (font) {
+ global_font_cur= old_font;
+ BLF_size(old_point, old_dpi);
+ }
}
void BLF_draw(char *str)
{
FontBLF *font;
+ /*
+ * The pixmap alignment hack is handle
+ * in BLF_position (old ui_rasterpos_safe).
+ */
+
font= global_font[global_font_cur];
- if (font && font->draw) {
- glEnable(GL_BLEND);
- glEnable(GL_TEXTURE_2D);
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ if (font) {
+ if (font->mode == BLF_MODE_BITMAP) {
+ glPushClientAttrib(GL_CLIENT_PIXEL_STORE_BIT);
+ glPushAttrib(GL_ENABLE_BIT);
+ glPixelStorei(GL_UNPACK_LSB_FIRST, GL_FALSE);
+ glPixelStorei( GL_UNPACK_ALIGNMENT, 1);
+ glDisable(GL_BLEND);
+ glRasterPos3f(font->pos[0], font->pos[1], font->pos[2]);
+
+ blf_font_draw(font, str);
+
+ glPopAttrib();
+ glPopClientAttrib();
+ }
+ else {
+ glEnable(GL_BLEND);
+ glEnable(GL_TEXTURE_2D);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- glPushMatrix();
- glTranslatef(font->pos[0], font->pos[1], font->pos[2]);
- glScalef(font->aspect, font->aspect, 1.0);
+ glPushMatrix();
+ glTranslatef(font->pos[0], font->pos[1], font->pos[2]);
+ glScalef(font->aspect, font->aspect, 1.0);
- if (font->flags & BLF_ROTATION)
- glRotatef(font->angle, 0.0f, 0.0f, 1.0f);
+ if (font->flags & BLF_ROTATION)
+ glRotatef(font->angle, 0.0f, 0.0f, 1.0f);
- (*font->draw)(font, str);
+ blf_font_draw(font, str);
- glPopMatrix();
- glDisable(GL_BLEND);
- glDisable(GL_TEXTURE_2D);
+ glPopMatrix();
+ glDisable(GL_BLEND);
+ glDisable(GL_TEXTURE_2D);
+ }
}
}
@@ -310,8 +371,8 @@ void BLF_boundbox(char *str, rctf *box)
FontBLF *font;
font= global_font[global_font_cur];
- if (font && font->boundbox_get)
- (*font->boundbox_get)(font, str, box);
+ if (font)
+ blf_font_boundbox(font, str, box);
}
float BLF_width(char *str)
@@ -319,21 +380,87 @@ float BLF_width(char *str)
FontBLF *font;
font= global_font[global_font_cur];
- if (font && font->width_get)
- return((*font->width_get)(font, str));
+ if (font)
+ return(blf_font_width(font, str));
return(0.0f);
}
+float BLF_width_default(char *str)
+{
+ FontBLF *font;
+ float width;
+ int old_font, old_point, old_dpi;
+
+ if (global_font_default == -1)
+ global_font_default= blf_search("default");
+
+ if (global_font_default == -1) {
+ printf("Error: Can't found default font!!\n");
+ return(0.0f);
+ }
+
+ font= global_font[global_font_cur];
+ if (font) {
+ old_font= global_font_cur;
+ old_point= font->size;
+ old_dpi= font->dpi;
+ }
+
+ global_font_cur= global_font_default;
+ BLF_size(global_font_points, global_font_dpi);
+ width= BLF_width(str);
+
+ /* restore the old font. */
+ if (font) {
+ global_font_cur= old_font;
+ BLF_size(old_point, old_dpi);
+ }
+ return(width);
+}
+
float BLF_height(char *str)
{
FontBLF *font;
font= global_font[global_font_cur];
- if (font && font->height_get)
- return((*font->height_get)(font, str));
+ if (font)
+ return(blf_font_height(font, str));
return(0.0f);
}
+float BLF_height_default(char *str)
+{
+ FontBLF *font;
+ float height;
+ int old_font, old_point, old_dpi;
+
+ if (global_font_default == -1)
+ global_font_default= blf_search("default");
+
+ if (global_font_default == -1) {
+ printf("Error: Can't found default font!!\n");
+ return(0.0f);
+ }
+
+ font= global_font[global_font_cur];
+ if (font) {
+ old_font= global_font_cur;
+ old_point= font->size;
+ old_dpi= font->dpi;
+ }
+
+ global_font_cur= global_font_default;
+ BLF_size(global_font_points, global_font_dpi);
+ height= BLF_height(str);
+
+ /* restore the old font. */
+ if (font) {
+ global_font_cur= old_font;
+ BLF_size(old_point, old_dpi);
+ }
+ return(height);
+}
+
void BLF_rotation(float angle)
{
FontBLF *font;
@@ -355,3 +482,12 @@ void BLF_clipping(float xmin, float ymin, float xmax, float ymax)
font->clip_rec.ymax= ymax;
}
}
+
+void BLF_mode(int mode)
+{
+ FontBLF *font;
+
+ font= global_font[global_font_cur];
+ if (font)
+ font->mode= mode;
+}
diff --git a/source/blender/blenfont/intern/blf_dir.c b/source/blender/blenfont/intern/blf_dir.c
index 1216c610515..92dfe8457b0 100644
--- a/source/blender/blenfont/intern/blf_dir.c
+++ b/source/blender/blenfont/intern/blf_dir.c
@@ -29,15 +29,11 @@
#include <stdlib.h>
#include <string.h>
-#ifdef WITH_FREETYPE2
-
#include <ft2build.h>
#include FT_FREETYPE_H
#include FT_GLYPH_H
-#endif /* WITH_FREETYPE2 */
-
#include "MEM_guardedalloc.h"
#include "DNA_listBase.h"
@@ -177,3 +173,37 @@ int blf_dir_split(const char *str, char *file, int *size)
}
return(0);
}
+
+/* Some font have additional file with metrics information,
+ * in general, the extension of the file is: .afm or .pfm
+ */
+char *blf_dir_metrics_search(char *filename)
+{
+ char *mfile;
+ char *s;
+
+ mfile= BLI_strdup(filename);
+ s= strrchr(mfile, '.');
+ if (s) {
+ if (strlen(s) < 4) {
+ MEM_freeN(mfile);
+ return(NULL);
+ }
+ s++;
+ s[0]= 'a';
+ s[1]= 'f';
+ s[2]= 'm';
+
+ /* first check .afm */
+ if (BLI_exist(s))
+ return(s);
+
+ /* and now check .pfm */
+ s[0]= 'p';
+
+ if (BLI_exist(s))
+ return(s);
+ }
+ MEM_freeN(mfile);
+ return(NULL);
+}
diff --git a/source/blender/blenfont/intern/blf_font.c b/source/blender/blenfont/intern/blf_font.c
index d5c6ae5b359..1a96dbc13bc 100644
--- a/source/blender/blenfont/intern/blf_font.c
+++ b/source/blender/blenfont/intern/blf_font.c
@@ -30,15 +30,11 @@
#include <stdlib.h>
#include <string.h>
-#ifdef WITH_FREETYPE2
-
#include <ft2build.h>
#include FT_FREETYPE_H
#include FT_GLYPH_H
-#endif /* WITH_FREETYPE2 */
-
#include "MEM_guardedalloc.h"
#include "DNA_listBase.h"
@@ -58,8 +54,6 @@
#include "blf_internal.h"
-#ifdef WITH_FREETYPE2
-
/* freetype2 handle. */
FT_Library global_ft_lib;
@@ -78,7 +72,7 @@ void blf_font_size(FontBLF *font, int size, int dpi)
GlyphCacheBLF *gc;
FT_Error err;
- err= FT_Set_Char_Size((FT_Face)font->engine, 0, (size * 64), dpi, dpi);
+ err= FT_Set_Char_Size(font->face, 0, (size * 64), dpi, dpi);
if (err) {
/* FIXME: here we can go through the fixed size and choice a close one */
printf("The current font don't support the size, %d and dpi, %d\n", size, dpi);
@@ -105,7 +99,6 @@ void blf_font_draw(FontBLF *font, char *str)
unsigned int c;
GlyphBLF *g, *g_prev;
FT_Vector delta;
- FT_Face face;
FT_UInt glyph_index, g_prev_index;
int pen_x, pen_y;
int i, has_kerning;
@@ -113,11 +106,10 @@ void blf_font_draw(FontBLF *font, char *str)
if (!font->glyph_cache)
return;
- face= (FT_Face)font->engine;
i= 0;
pen_x= 0;
pen_y= 0;
- has_kerning= FT_HAS_KERNING(face);
+ has_kerning= FT_HAS_KERNING(font->face);
g_prev= NULL;
g_prev_index= 0;
@@ -126,7 +118,7 @@ void blf_font_draw(FontBLF *font, char *str)
if (c == 0)
break;
- glyph_index= FT_Get_Char_Index(face, c);
+ glyph_index= FT_Get_Char_Index(font->face, c);
g= blf_glyph_search(font->glyph_cache, c);
if (!g)
g= blf_glyph_add(font, glyph_index, c);
@@ -135,17 +127,27 @@ void blf_font_draw(FontBLF *font, char *str)
if (!g)
continue;
+ /*
+ * This happen if we change the mode of the
+ * font, we don't drop the glyph cache, so it's
+ * possible that some glyph don't have the
+ * bitmap or texture information.
+ */
+ if (font->mode == BLF_MODE_BITMAP && (!g->bitmap_data))
+ g= blf_glyph_add(font, glyph_index, c);
+ else if (font->mode == BLF_MODE_TEXTURE && (!g->tex_data))
+ g= blf_glyph_add(font, glyph_index, c);
+
if (has_kerning && g_prev) {
delta.x= 0;
delta.y= 0;
- FT_Get_Kerning(face, g_prev_index, glyph_index, FT_KERNING_UNFITTED, &delta);
+ FT_Get_Kerning(font->face, g_prev_index, glyph_index, FT_KERNING_UNFITTED, &delta);
pen_x += delta.x >> 6;
}
- /* This only return zero if the clipping is enable and the glyph is out of the clip rctf. */
- if (blf_glyph_render(font, g, (float)pen_x, (float)pen_y) == 0)
- break;
+ /* do not return this loop if clipped, we want every character tested */
+ blf_glyph_render(font, g, (float)pen_x, (float)pen_y);
pen_x += g->advance;
g_prev= g;
@@ -159,7 +161,6 @@ void blf_font_boundbox(FontBLF *font, char *str, rctf *box)
GlyphBLF *g, *g_prev;
FT_Vector delta;
FT_UInt glyph_index, g_prev_index;
- FT_Face face;
rctf gbox;
int pen_x, pen_y;
int i, has_kerning;
@@ -167,7 +168,6 @@ void blf_font_boundbox(FontBLF *font, char *str, rctf *box)
if (!font->glyph_cache)
return;
- face= (FT_Face)font->engine;
box->xmin= 32000.0f;
box->xmax= -32000.0f;
box->ymin= 32000.0f;
@@ -176,7 +176,7 @@ void blf_font_boundbox(FontBLF *font, char *str, rctf *box)
i= 0;
pen_x= 0;
pen_y= 0;
- has_kerning= FT_HAS_KERNING(face);
+ has_kerning= FT_HAS_KERNING(font->face);
g_prev= NULL;
g_prev_index= 0;
@@ -185,7 +185,7 @@ void blf_font_boundbox(FontBLF *font, char *str, rctf *box)
if (c == 0)
break;
- glyph_index= FT_Get_Char_Index(face, c);
+ glyph_index= FT_Get_Char_Index(font->face, c);
g= blf_glyph_search(font->glyph_cache, c);
if (!g)
g= blf_glyph_add(font, glyph_index, c);
@@ -194,11 +194,22 @@ void blf_font_boundbox(FontBLF *font, char *str, rctf *box)
if (!g)
continue;
+ /*
+ * This happen if we change the mode of the
+ * font, we don't drop the glyph cache, so it's
+ * possible that some glyph don't have the
+ * bitmap or texture information.
+ */
+ if (font->mode == BLF_MODE_BITMAP && (!g->bitmap_data))
+ g= blf_glyph_add(font, glyph_index, c);
+ else if (font->mode == BLF_MODE_TEXTURE && (!g->tex_data))
+ g= blf_glyph_add(font, glyph_index, c);
+
if (has_kerning && g_prev) {
delta.x= 0;
delta.y= 0;
- FT_Get_Kerning(face, g_prev_index, glyph_index, FT_KERNING_UNFITTED, &delta);
+ FT_Get_Kerning(font->face, g_prev_index, glyph_index, FT_KERNING_UNFITTED, &delta);
pen_x += delta.x >> 6;
}
@@ -263,7 +274,7 @@ void blf_font_free(FontBLF *font)
blf_glyph_cache_free(gc);
}
- FT_Done_Face((FT_Face)font->engine);
+ FT_Done_Face(font->face);
if (font->filename)
MEM_freeN(font->filename);
if (font->name)
@@ -273,8 +284,7 @@ void blf_font_free(FontBLF *font)
void blf_font_fill(FontBLF *font)
{
- font->type= BLF_FONT_FREETYPE2;
- font->ref= 1;
+ font->mode= BLF_MODE_TEXTURE;
font->aspect= 1.0f;
font->pos[0]= 0.0f;
font->pos[1]= 0.0f;
@@ -290,75 +300,75 @@ void blf_font_fill(FontBLF *font)
font->cache.first= NULL;
font->cache.last= NULL;
font->glyph_cache= NULL;
+ font->blur= 0;
glGetIntegerv(GL_MAX_TEXTURE_SIZE, (GLint *)&font->max_tex_size);
-
- font->size_set= blf_font_size;
- font->draw= blf_font_draw;
- font->boundbox_get= blf_font_boundbox;
- font->width_get= blf_font_width;
- font->height_get= blf_font_height;
- font->free= blf_font_free;
}
FontBLF *blf_font_new(char *name, char *filename)
{
FontBLF *font;
FT_Error err;
- FT_Face face;
+ char *mfile;
- err= FT_New_Face(global_ft_lib, filename, 0, &face);
- if (err)
+ font= (FontBLF *)MEM_mallocN(sizeof(FontBLF), "blf_font_new");
+ err= FT_New_Face(global_ft_lib, filename, 0, &font->face);
+ if (err) {
+ MEM_freeN(font);
return(NULL);
+ }
- err= FT_Select_Charmap(face, ft_encoding_unicode);
+ err= FT_Select_Charmap(font->face, ft_encoding_unicode);
if (err) {
printf("Can't set the unicode character map!\n");
- FT_Done_Face(face);
+ FT_Done_Face(font->face);
+ MEM_freeN(font);
return(NULL);
}
- font= (FontBLF *)MEM_mallocN(sizeof(FontBLF), "blf_font_new");
+ mfile= blf_dir_metrics_search(filename);
+ if (mfile) {
+ err= FT_Attach_File(font->face, mfile);
+ MEM_freeN(mfile);
+ }
+
font->name= BLI_strdup(name);
font->filename= BLI_strdup(filename);
- font->engine= (void *)face;
blf_font_fill(font);
return(font);
}
+void blf_font_attach_from_mem(FontBLF *font, const unsigned char *mem, int mem_size)
+{
+ FT_Open_Args open;
+
+ open.flags= FT_OPEN_MEMORY;
+ open.memory_base= (FT_Byte *)mem;
+ open.memory_size= mem_size;
+ FT_Attach_Stream(font->face, &open);
+}
+
FontBLF *blf_font_new_from_mem(char *name, unsigned char *mem, int mem_size)
{
FontBLF *font;
FT_Error err;
- FT_Face face;
- err= FT_New_Memory_Face(global_ft_lib, mem, mem_size, 0, &face);
- if (err)
+ font= (FontBLF *)MEM_mallocN(sizeof(FontBLF), "blf_font_new_from_mem");
+ err= FT_New_Memory_Face(global_ft_lib, mem, mem_size, 0, &font->face);
+ if (err) {
+ MEM_freeN(font);
return(NULL);
+ }
- err= FT_Select_Charmap(face, ft_encoding_unicode);
+ err= FT_Select_Charmap(font->face, ft_encoding_unicode);
if (err) {
printf("Can't set the unicode character map!\n");
- FT_Done_Face(face);
+ FT_Done_Face(font->face);
+ MEM_freeN(font);
return(NULL);
}
- font= (FontBLF *)MEM_mallocN(sizeof(FontBLF), "blf_font_new_from_mem");
font->name= BLI_strdup(name);
font->filename= NULL;
- font->engine= (void *)face;
blf_font_fill(font);
return(font);
}
-
-#else /* !WITH_FREETYPE2 */
-
-int blf_font_init(void)
-{
- return(0);
-}
-
-void blf_font_exit(void)
-{
-}
-
-#endif /* WITH_FREETYPE2 */
diff --git a/source/blender/blenfont/intern/blf_font_helv10.h b/source/blender/blenfont/intern/blf_font_helv10.h
deleted file mode 100644
index 7a0a48d83bc..00000000000
--- a/source/blender/blenfont/intern/blf_font_helv10.h
+++ /dev/null
@@ -1,487 +0,0 @@
-/**
- * $Id:
- *
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * The Original Code is Copyright (C) 2009 Blender Foundation.
- * All rights reserved.
- *
- *
- * Contributor(s): Blender Foundation
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-#ifndef BLF_FONT_HELV10_H
-#define BLF_FONT_HELV10_H
-
-static unsigned char helv10_bitmap_data[]= {
- 0x80,0x00,0x80,0x80,0x80,0x80,0x80,0x80,
- 0xa0,0xa0,0x50,0x50,0xf8,0x28,0x7c,0x28,
- 0x28,0x20,0x70,0xa8,0x28,0x70,0xa0,0xa8,
- 0x70,0x20,0x26,0x29,0x16,0x10,0x08,0x68,
- 0x94,0x64,0x64,0x98,0x98,0xa4,0x60,0x50,
- 0x50,0x20,0x80,0x40,0x40,0x20,0x40,0x40,
- 0x80,0x80,0x80,0x80,0x40,0x40,0x20,0x80,
- 0x40,0x40,0x20,0x20,0x20,0x20,0x40,0x40,
- 0x80,0xa0,0x40,0xa0,0x20,0x20,0xf8,0x20,
- 0x20,0x80,0x40,0x40,0xf8,0x80,0x80,0x80,
- 0x40,0x40,0x40,0x40,0x20,0x20,0x70,0x88,
- 0x88,0x88,0x88,0x88,0x88,0x70,0x40,0x40,
- 0x40,0x40,0x40,0x40,0xc0,0x40,0xf8,0x80,
- 0x40,0x30,0x08,0x08,0x88,0x70,0x70,0x88,
- 0x08,0x08,0x30,0x08,0x88,0x70,0x10,0x10,
- 0xf8,0x90,0x50,0x50,0x30,0x10,0x70,0x88,
- 0x08,0x08,0xf0,0x80,0x80,0xf8,0x70,0x88,
- 0x88,0xc8,0xb0,0x80,0x88,0x70,0x40,0x40,
- 0x20,0x20,0x10,0x10,0x08,0xf8,0x70,0x88,
- 0x88,0x88,0x70,0x88,0x88,0x70,0x70,0x88,
- 0x08,0x68,0x98,0x88,0x88,0x70,0x80,0x00,
- 0x00,0x00,0x00,0x80,0x80,0x40,0x40,0x00,
- 0x00,0x00,0x00,0x40,0x20,0x40,0x80,0x40,
- 0x20,0xf0,0x00,0xf0,0x80,0x40,0x20,0x40,
- 0x80,0x40,0x00,0x40,0x40,0x20,0x10,0x90,
- 0x60,0x3e,0x00,0x40,0x00,0x9b,0x00,0xa4,
- 0x80,0xa4,0x80,0xa2,0x40,0x92,0x40,0x4d,
- 0x40,0x20,0x80,0x1f,0x00,0x82,0x82,0x7c,
- 0x44,0x28,0x28,0x10,0x10,0xf0,0x88,0x88,
- 0x88,0xf0,0x88,0x88,0xf0,0x78,0x84,0x80,
- 0x80,0x80,0x80,0x84,0x78,0xf0,0x88,0x84,
- 0x84,0x84,0x84,0x88,0xf0,0xf8,0x80,0x80,
- 0x80,0xf8,0x80,0x80,0xf8,0x80,0x80,0x80,
- 0x80,0xf0,0x80,0x80,0xf8,0x74,0x8c,0x84,
- 0x8c,0x80,0x80,0x84,0x78,0x84,0x84,0x84,
- 0x84,0xfc,0x84,0x84,0x84,0x80,0x80,0x80,
- 0x80,0x80,0x80,0x80,0x80,0x60,0x90,0x10,
- 0x10,0x10,0x10,0x10,0x10,0x88,0x88,0x90,
- 0x90,0xe0,0xa0,0x90,0x88,0xf0,0x80,0x80,
- 0x80,0x80,0x80,0x80,0x80,0x92,0x92,0x92,
- 0xaa,0xaa,0xc6,0xc6,0x82,0x8c,0x8c,0x94,
- 0x94,0xa4,0xa4,0xc4,0xc4,0x78,0x84,0x84,
- 0x84,0x84,0x84,0x84,0x78,0x80,0x80,0x80,
- 0x80,0xf0,0x88,0x88,0xf0,0x02,0x7c,0x8c,
- 0x94,0x84,0x84,0x84,0x84,0x78,0x88,0x88,
- 0x88,0x88,0xf0,0x88,0x88,0xf0,0x70,0x88,
- 0x88,0x08,0x70,0x80,0x88,0x70,0x20,0x20,
- 0x20,0x20,0x20,0x20,0x20,0xf8,0x78,0x84,
- 0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x28,
- 0x28,0x44,0x44,0x44,0x82,0x82,0x22,0x00,
- 0x22,0x00,0x22,0x00,0x55,0x00,0x49,0x00,
- 0x49,0x00,0x88,0x80,0x88,0x80,0x88,0x88,
- 0x50,0x50,0x20,0x50,0x88,0x88,0x10,0x10,
- 0x10,0x28,0x28,0x44,0x44,0x82,0xf8,0x80,
- 0x40,0x20,0x20,0x10,0x08,0xf8,0xc0,0x80,
- 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xc0,
- 0x20,0x20,0x40,0x40,0x40,0x40,0x80,0x80,
- 0xc0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
- 0x40,0xc0,0x88,0x50,0x50,0x20,0x20,0xfc,
- 0x80,0x80,0x40,0x68,0x90,0x90,0x70,0x10,
- 0xe0,0xb0,0xc8,0x88,0x88,0xc8,0xb0,0x80,
- 0x80,0x60,0x90,0x80,0x80,0x90,0x60,0x68,
- 0x98,0x88,0x88,0x98,0x68,0x08,0x08,0x60,
- 0x90,0x80,0xf0,0x90,0x60,0x40,0x40,0x40,
- 0x40,0x40,0xe0,0x40,0x30,0x70,0x08,0x68,
- 0x98,0x88,0x88,0x98,0x68,0x88,0x88,0x88,
- 0x88,0xc8,0xb0,0x80,0x80,0x80,0x80,0x80,
- 0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x80,
- 0x80,0x80,0x80,0x80,0x00,0x80,0x90,0x90,
- 0xa0,0xc0,0xa0,0x90,0x80,0x80,0x80,0x80,
- 0x80,0x80,0x80,0x80,0x80,0x80,0x92,0x92,
- 0x92,0x92,0x92,0xec,0x88,0x88,0x88,0x88,
- 0xc8,0xb0,0x70,0x88,0x88,0x88,0x88,0x70,
- 0x80,0x80,0xb0,0xc8,0x88,0x88,0xc8,0xb0,
- 0x08,0x08,0x68,0x98,0x88,0x88,0x98,0x68,
- 0x80,0x80,0x80,0x80,0xc0,0xa0,0x60,0x90,
- 0x10,0x60,0x90,0x60,0x60,0x40,0x40,0x40,
- 0x40,0xe0,0x40,0x40,0x70,0x90,0x90,0x90,
- 0x90,0x90,0x20,0x20,0x50,0x50,0x88,0x88,
- 0x28,0x28,0x54,0x54,0x92,0x92,0x88,0x88,
- 0x50,0x20,0x50,0x88,0x80,0x40,0x40,0x60,
- 0xa0,0xa0,0x90,0x90,0xf0,0x80,0x40,0x20,
- 0x10,0xf0,0x20,0x40,0x40,0x40,0x40,0x80,
- 0x40,0x40,0x40,0x20,0x80,0x80,0x80,0x80,
- 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x40,
- 0x40,0x40,0x40,0x20,0x40,0x40,0x40,0x80,
- 0x98,0x64,0x80,0x80,0x80,0x80,0x80,0x80,
- 0x00,0x80,0x40,0x70,0xa8,0xa0,0xa0,0xa8,
- 0x70,0x10,0xb0,0x48,0x40,0x40,0xe0,0x40,
- 0x48,0x30,0x90,0x60,0x90,0x90,0x60,0x90,
- 0x20,0xf8,0x20,0xf8,0x50,0x50,0x88,0x88,
- 0x80,0x80,0x80,0x80,0x00,0x00,0x80,0x80,
- 0x80,0x80,0x70,0x88,0x18,0x70,0xc8,0x98,
- 0x70,0xc0,0x88,0x70,0xa0,0x38,0x44,0x9a,
- 0xa2,0x9a,0x44,0x38,0xe0,0x00,0xa0,0x20,
- 0xe0,0x28,0x50,0xa0,0x50,0x28,0x08,0x08,
- 0xf8,0xe0,0x38,0x44,0xaa,0xb2,0xba,0x44,
- 0x38,0xe0,0x60,0x90,0x90,0x60,0xf8,0x00,
- 0x20,0x20,0xf8,0x20,0x20,0xe0,0x40,0xa0,
- 0x60,0xc0,0x20,0x40,0xe0,0x80,0x40,0x80,
- 0x80,0xf0,0x90,0x90,0x90,0x90,0x90,0x28,
- 0x28,0x28,0x28,0x28,0x68,0xe8,0xe8,0xe8,
- 0x7c,0xc0,0xc0,0x40,0x40,0x40,0xc0,0x40,
- 0xe0,0x00,0xe0,0xa0,0xe0,0xa0,0x50,0x28,
- 0x50,0xa0,0x21,0x00,0x17,0x80,0x13,0x00,
- 0x09,0x00,0x48,0x00,0x44,0x00,0xc4,0x00,
- 0x42,0x00,0x27,0x12,0x15,0x0b,0x48,0x44,
- 0xc4,0x42,0x21,0x00,0x17,0x80,0x13,0x00,
- 0x09,0x00,0xc8,0x00,0x24,0x00,0x44,0x00,
- 0xe2,0x00,0x60,0x90,0x80,0x40,0x20,0x20,
- 0x00,0x20,0x82,0x82,0x7c,0x44,0x28,0x28,
- 0x10,0x10,0x00,0x10,0x20,0x82,0x82,0x7c,
- 0x44,0x28,0x28,0x10,0x10,0x00,0x10,0x08,
- 0x82,0x82,0x7c,0x44,0x28,0x28,0x10,0x10,
- 0x00,0x28,0x10,0x82,0x82,0x7c,0x44,0x28,
- 0x28,0x10,0x10,0x00,0x28,0x14,0x82,0x82,
- 0x7c,0x44,0x28,0x28,0x10,0x10,0x00,0x28,
- 0x82,0x82,0x7c,0x44,0x28,0x28,0x10,0x10,
- 0x10,0x28,0x10,0x8f,0x80,0x88,0x00,0x78,
- 0x00,0x48,0x00,0x2f,0x80,0x28,0x00,0x18,
- 0x00,0x1f,0x80,0x30,0x10,0x78,0x84,0x80,
- 0x80,0x80,0x80,0x84,0x78,0xf8,0x80,0x80,
- 0x80,0xf8,0x80,0x80,0xf8,0x00,0x20,0x40,
- 0xf8,0x80,0x80,0x80,0xf8,0x80,0x80,0xf8,
- 0x00,0x20,0x10,0xf8,0x80,0x80,0xf8,0x80,
- 0x80,0x80,0xf8,0x00,0x50,0x20,0xf8,0x80,
- 0x80,0x80,0xf8,0x80,0x80,0xf8,0x00,0x50,
- 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
- 0x00,0x40,0x80,0x80,0x80,0x80,0x80,0x80,
- 0x80,0x80,0x80,0x00,0x80,0x40,0x40,0x40,
- 0x40,0x40,0x40,0x40,0x40,0x40,0x00,0xa0,
- 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
- 0x40,0x00,0xa0,0x78,0x44,0x42,0x42,0xf2,
- 0x42,0x44,0x78,0x8c,0x8c,0x94,0x94,0xa4,
- 0xa4,0xc4,0xc4,0x00,0x50,0x28,0x78,0x84,
- 0x84,0x84,0x84,0x84,0x84,0x78,0x00,0x10,
- 0x20,0x78,0x84,0x84,0x84,0x84,0x84,0x84,
- 0x78,0x00,0x10,0x08,0x78,0x84,0x84,0x84,
- 0x84,0x84,0x84,0x78,0x00,0x28,0x10,0x78,
- 0x84,0x84,0x84,0x84,0x84,0x84,0x78,0x00,
- 0x50,0x28,0x78,0x84,0x84,0x84,0x84,0x84,
- 0x84,0x78,0x00,0x48,0x88,0x50,0x20,0x50,
- 0x88,0x80,0x78,0xc4,0xa4,0xa4,0x94,0x94,
- 0x8c,0x78,0x04,0x78,0x84,0x84,0x84,0x84,
- 0x84,0x84,0x84,0x00,0x10,0x20,0x78,0x84,
- 0x84,0x84,0x84,0x84,0x84,0x84,0x00,0x20,
- 0x10,0x78,0x84,0x84,0x84,0x84,0x84,0x84,
- 0x84,0x00,0x28,0x10,0x78,0x84,0x84,0x84,
- 0x84,0x84,0x84,0x84,0x00,0x48,0x10,0x10,
- 0x10,0x28,0x28,0x44,0x44,0x82,0x00,0x10,
- 0x08,0x80,0x80,0xf0,0x88,0x88,0xf0,0x80,
- 0x80,0xa0,0x90,0x90,0x90,0xa0,0x90,0x90,
- 0x60,0x68,0x90,0x90,0x70,0x10,0xe0,0x00,
- 0x20,0x40,0x68,0x90,0x90,0x70,0x10,0xe0,
- 0x00,0x20,0x10,0x68,0x90,0x90,0x70,0x10,
- 0xe0,0x00,0x50,0x20,0x68,0x90,0x90,0x70,
- 0x10,0xe0,0x00,0xa0,0x50,0x68,0x90,0x90,
- 0x70,0x10,0xe0,0x00,0x50,0x68,0x90,0x90,
- 0x70,0x10,0xe0,0x20,0x50,0x20,0x6c,0x92,
- 0x90,0x7e,0x12,0xec,0x60,0x20,0x60,0x90,
- 0x80,0x80,0x90,0x60,0x60,0x90,0x80,0xf0,
- 0x90,0x60,0x00,0x20,0x40,0x60,0x90,0x80,
- 0xf0,0x90,0x60,0x00,0x40,0x20,0x60,0x90,
- 0x80,0xf0,0x90,0x60,0x00,0x50,0x20,0x60,
- 0x90,0x80,0xf0,0x90,0x60,0x00,0x50,0x40,
- 0x40,0x40,0x40,0x40,0x40,0x00,0x40,0x80,
- 0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x80,
- 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,
- 0xa0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
- 0x00,0xa0,0x70,0x88,0x88,0x88,0x88,0x78,
- 0x90,0x60,0x50,0x90,0x90,0x90,0x90,0x90,
- 0xe0,0x00,0xa0,0x50,0x70,0x88,0x88,0x88,
- 0x88,0x70,0x00,0x20,0x40,0x70,0x88,0x88,
- 0x88,0x88,0x70,0x00,0x20,0x10,0x70,0x88,
- 0x88,0x88,0x88,0x70,0x00,0x50,0x20,0x70,
- 0x88,0x88,0x88,0x88,0x70,0x00,0x50,0x28,
- 0x70,0x88,0x88,0x88,0x88,0x70,0x00,0x50,
- 0x20,0x00,0xf8,0x00,0x20,0x70,0x88,0xc8,
- 0xa8,0x98,0x74,0x70,0x90,0x90,0x90,0x90,
- 0x90,0x00,0x20,0x40,0x70,0x90,0x90,0x90,
- 0x90,0x90,0x00,0x40,0x20,0x70,0x90,0x90,
- 0x90,0x90,0x90,0x00,0x50,0x20,0x70,0x90,
- 0x90,0x90,0x90,0x90,0x00,0x50,0x80,0x40,
- 0x40,0x60,0xa0,0xa0,0x90,0x90,0x00,0x20,
- 0x10,0x80,0x80,0xb0,0xc8,0x88,0x88,0xc8,
- 0xb0,0x80,0x80,0x80,0x40,0x40,0x60,0xa0,
- 0xa0,0x90,0x90,0x00,0x50,
-};
-
-FontDataBLF blf_font_helv10 = {
- -1, -2,
- 10, 11,
- {
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0, 0, 0, 0, 12, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0, 0, 0, 0, 3, -1},
- {1, 8, -1, 0, 3, 0},
- {3, 2, -1, -6, 4, 8},
- {6, 7, 0, 0, 6, 10},
- {5, 9, 0, 1, 6, 17},
- {8, 8, 0, 0, 9, 26},
- {6, 8, -1, 0, 8, 34},
- {2, 3, -1, -5, 3, 42},
- {3, 10, 0, 2, 4, 45},
- {3, 10, -1, 2, 4, 55},
- {3, 3, 0, -5, 4, 65},
- {5, 5, 0, -1, 6, 68},
- {2, 3, 0, 2, 3, 73},
- {5, 1, -1, -3, 7, 76},
- {1, 1, -1, 0, 3, 77},
- {3, 8, 0, 0, 3, 78},
- {5, 8, 0, 0, 6, 86},
- {2, 8, -1, 0, 6, 94},
- {5, 8, 0, 0, 6, 102},
- {5, 8, 0, 0, 6, 110},
- {5, 8, 0, 0, 6, 118},
- {5, 8, 0, 0, 6, 126},
- {5, 8, 0, 0, 6, 134},
- {5, 8, 0, 0, 6, 142},
- {5, 8, 0, 0, 6, 150},
- {5, 8, 0, 0, 6, 158},
- {1, 6, -1, 0, 3, 166},
- {2, 8, 0, 2, 3, 172},
- {3, 5, -1, -1, 6, 180},
- {4, 3, 0, -2, 5, 185},
- {3, 5, -1, -1, 6, 188},
- {4, 8, -1, 0, 6, 193},
- {10, 10, 0, 2, 11, 201},
- {7, 8, 0, 0, 7, 221},
- {5, 8, -1, 0, 7, 229},
- {6, 8, -1, 0, 8, 237},
- {6, 8, -1, 0, 8, 245},
- {5, 8, -1, 0, 7, 253},
- {5, 8, -1, 0, 6, 261},
- {6, 8, -1, 0, 8, 269},
- {6, 8, -1, 0, 8, 277},
- {1, 8, -1, 0, 3, 285},
- {4, 8, 0, 0, 5, 293},
- {5, 8, -1, 0, 7, 301},
- {4, 8, -1, 0, 6, 309},
- {7, 8, -1, 0, 9, 317},
- {6, 8, -1, 0, 8, 325},
- {6, 8, -1, 0, 8, 333},
- {5, 8, -1, 0, 7, 341},
- {7, 9, -1, 1, 8, 349},
- {5, 8, -1, 0, 7, 358},
- {5, 8, -1, 0, 7, 366},
- {5, 8, 0, 0, 5, 374},
- {6, 8, -1, 0, 8, 382},
- {7, 8, 0, 0, 7, 390},
- {9, 8, 0, 0, 9, 398},
- {5, 8, -1, 0, 7, 414},
- {7, 8, 0, 0, 7, 422},
- {5, 8, -1, 0, 7, 430},
- {2, 10, -1, 2, 3, 438},
- {3, 8, 0, 0, 3, 448},
- {2, 10, 0, 2, 3, 456},
- {5, 5, 0, -3, 6, 466},
- {6, 1, 0, 2, 6, 471},
- {2, 3, 0, -5, 3, 472},
- {5, 6, 0, 0, 5, 475},
- {5, 8, 0, 0, 6, 481},
- {4, 6, 0, 0, 5, 489},
- {5, 8, 0, 0, 6, 495},
- {4, 6, 0, 0, 5, 503},
- {4, 8, 0, 0, 4, 509},
- {5, 8, 0, 2, 6, 517},
- {5, 8, 0, 0, 6, 525},
- {1, 8, 0, 0, 2, 533},
- {1, 9, 0, 1, 2, 541},
- {4, 8, 0, 0, 5, 550},
- {1, 8, 0, 0, 2, 558},
- {7, 6, 0, 0, 8, 566},
- {5, 6, 0, 0, 6, 572},
- {5, 6, 0, 0, 6, 578},
- {5, 8, 0, 2, 6, 584},
- {5, 8, 0, 2, 6, 592},
- {3, 6, 0, 0, 4, 600},
- {4, 6, 0, 0, 5, 606},
- {3, 8, 0, 0, 4, 612},
- {4, 6, 0, 0, 5, 620},
- {5, 6, 0, 0, 6, 626},
- {7, 6, 0, 0, 8, 632},
- {5, 6, 0, 0, 6, 638},
- {4, 8, 0, 2, 5, 644},
- {4, 6, 0, 0, 5, 652},
- {3, 10, 0, 2, 3, 658},
- {1, 10, -1, 2, 3, 668},
- {3, 10, 0, 2, 3, 678},
- {6, 2, 0, -3, 7, 688},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0,0,0,0,0, -1},
- {0, 0, 0, 0, 3, -1},
- {1, 8, -1, 2, 3, 690},
- {5, 8, 0, 1, 6, 698},
- {5, 8, 0, 0, 6, 706},
- {4, 6, 0, -1, 5, 714},
- {5, 8, 0, 0, 6, 720},
- {1, 10, -1, 2, 3, 728},
- {5, 10, 0, 2, 6, 738},
- {3, 1, 0, -7, 3, 748},
- {7, 7, -1, 0, 9, 749},
- {3, 5, 0, -3, 4, 756},
- {5, 5, 0, 0, 6, 761},
- {5, 3, -1, -2, 7, 766},
- {3, 1, 0, -3, 4, 769},
- {7, 7, -1, 0, 9, 770},
- {3, 1, 0, -7, 3, 777},
- {4, 4, 0, -3, 4, 778},
- {5, 7, 0, 0, 6, 782},
- {3, 4, 0, -3, 3, 789},
- {3, 4, 0, -3, 3, 793},
- {2, 2, 0, -6, 3, 797},
- {4, 8, 0, 2, 5, 799},
- {6, 10, 0, 2, 6, 807},
- {2, 1, 0, -3, 3, 817},
- {2, 2, 0, 2, 3, 818},
- {2, 4, 0, -3, 3, 820},
- {3, 5, 0, -3, 4, 824},
- {5, 5, 0, 0, 6, 829},
- {9, 8, 0, 0, 9, 834},
- {8, 8, 0, 0, 9, 850},
- {9, 8, 0, 0, 9, 858},
- {4, 8, -1, 2, 6, 874},
- {7, 11, 0, 0, 7, 882},
- {7, 11, 0, 0, 7, 893},
- {7, 11, 0, 0, 7, 904},
- {7, 11, 0, 0, 7, 915},
- {7, 10, 0, 0, 7, 926},
- {7, 11, 0, 0, 7, 936},
- {9, 8, 0, 0, 10, 947},
- {6, 10, -1, 2, 8, 963},
- {5, 11, -1, 0, 7, 973},
- {5, 11, -1, 0, 7, 984},
- {5, 11, -1, 0, 7, 995},
- {5, 10, -1, 0, 7, 1006},
- {2, 11, 0, 0, 3, 1016},
- {2, 11, -1, 0, 3, 1027},
- {3, 11, 0, 0, 3, 1038},
- {3, 10, 0, 0, 3, 1049},
- {7, 8, 0, 0, 8, 1059},
- {6, 11, -1, 0, 8, 1067},
- {6, 11, -1, 0, 8, 1078},
- {6, 11, -1, 0, 8, 1089},
- {6, 11, -1, 0, 8, 1100},
- {6, 11, -1, 0, 8, 1111},
- {6, 10, -1, 0, 8, 1122},
- {5, 5, 0, -1, 6, 1132},
- {6, 10, -1, 1, 8, 1137},
- {6, 11, -1, 0, 8, 1147},
- {6, 11, -1, 0, 8, 1158},
- {6, 11, -1, 0, 8, 1169},
- {6, 10, -1, 0, 8, 1180},
- {7, 11, 0, 0, 7, 1190},
- {5, 8, -1, 0, 7, 1201},
- {4, 8, 0, 0, 5, 1209},
- {5, 9, 0, 0, 5, 1217},
- {5, 9, 0, 0, 5, 1226},
- {5, 9, 0, 0, 5, 1235},
- {5, 9, 0, 0, 5, 1244},
- {5, 8, 0, 0, 5, 1253},
- {5, 9, 0, 0, 5, 1261},
- {7, 6, 0, 0, 8, 1270},
- {4, 8, 0, 2, 5, 1276},
- {4, 9, 0, 0, 5, 1284},
- {4, 9, 0, 0, 5, 1293},
- {4, 9, 0, 0, 5, 1302},
- {4, 8, 0, 0, 5, 1311},
- {2, 9, 1, 0, 2, 1319},
- {2, 9, 0, 0, 2, 1328},
- {3, 9, 1, 0, 2, 1337},
- {3, 8, 0, 0, 2, 1346},
- {5, 9, 0, 0, 6, 1354},
- {4, 9, 0, 0, 5, 1363},
- {5, 9, 0, 0, 6, 1372},
- {5, 9, 0, 0, 6, 1381},
- {5, 9, 0, 0, 6, 1390},
- {5, 9, 0, 0, 6, 1399},
- {5, 8, 0, 0, 6, 1408},
- {5, 5, 0, -1, 6, 1416},
- {6, 6, 0, 0, 6, 1421},
- {4, 9, 0, 0, 5, 1427},
- {4, 9, 0, 0, 5, 1436},
- {4, 9, 0, 0, 5, 1445},
- {4, 8, 0, 0, 5, 1454},
- {4, 11, 0, 2, 5, 1462},
- {5, 10, 0, 2, 6, 1473},
- {4, 10, 0, 2, 5, 1483},
- },
- helv10_bitmap_data,
- 0
-};
-
-#endif /* BLF_FONT_HELV10_H */
diff --git a/source/blender/blenfont/intern/blf_glyph.c b/source/blender/blenfont/intern/blf_glyph.c
index 7212deff8c8..142d2145ab2 100644
--- a/source/blender/blenfont/intern/blf_glyph.c
+++ b/source/blender/blenfont/intern/blf_glyph.c
@@ -31,16 +31,12 @@
#include <string.h>
#include <math.h>
-#ifdef WITH_FREETYPE2
-
#include <ft2build.h>
#include FT_FREETYPE_H
#include FT_GLYPH_H
#include FT_OUTLINE_H
-#endif /* WITH_FREETYPE2 */
-
#include "MEM_guardedalloc.h"
#include "DNA_listBase.h"
@@ -59,8 +55,6 @@
#include "blf_internal.h"
-#ifdef WITH_FREETYPE2
-
GlyphCacheBLF *blf_glyph_cache_find(FontBLF *font, int size, int dpi)
{
GlyphCacheBLF *p;
@@ -78,10 +72,8 @@ GlyphCacheBLF *blf_glyph_cache_find(FontBLF *font, int size, int dpi)
GlyphCacheBLF *blf_glyph_cache_new(FontBLF *font)
{
GlyphCacheBLF *gc;
- FT_Face face;
int i;
- face= (FT_Face)font->engine;
gc= (GlyphCacheBLF *)MEM_mallocN(sizeof(GlyphCacheBLF), "blf_glyph_cache_new");
gc->next= NULL;
gc->prev= NULL;
@@ -100,23 +92,23 @@ GlyphCacheBLF *blf_glyph_cache_new(FontBLF *font)
gc->y_offs= 0;
gc->pad= 3;
- gc->num_glyphs= face->num_glyphs;
- gc->rem_glyphs= face->num_glyphs;
- gc->ascender= ((float)face->size->metrics.ascender) / 64.0f;
- gc->descender= ((float)face->size->metrics.descender) / 64.0f;
+ gc->num_glyphs= font->face->num_glyphs;
+ gc->rem_glyphs= font->face->num_glyphs;
+ gc->ascender= ((float)font->face->size->metrics.ascender) / 64.0f;
+ gc->descender= ((float)font->face->size->metrics.descender) / 64.0f;
- if (FT_IS_SCALABLE(face)) {
- gc->max_glyph_width= (float)((face->bbox.xMax - face->bbox.xMin) *
- (((float)face->size->metrics.x_ppem) /
- ((float)face->units_per_EM)));
+ if (FT_IS_SCALABLE(font->face)) {
+ gc->max_glyph_width= (float)((font->face->bbox.xMax - font->face->bbox.xMin) *
+ (((float)font->face->size->metrics.x_ppem) /
+ ((float)font->face->units_per_EM)));
- gc->max_glyph_height= (float)((face->bbox.yMax - face->bbox.yMin) *
- (((float)face->size->metrics.y_ppem) /
- ((float)face->units_per_EM)));
+ gc->max_glyph_height= (float)((font->face->bbox.yMax - font->face->bbox.yMin) *
+ (((float)font->face->size->metrics.y_ppem) /
+ ((float)font->face->units_per_EM)));
}
else {
- gc->max_glyph_width= ((float)face->size->metrics.max_advance) / 64.0f;
- gc->max_glyph_height= ((float)face->size->metrics.height) / 64.0f;
+ gc->max_glyph_width= ((float)font->face->size->metrics.max_advance) / 64.0f;
+ gc->max_glyph_height= ((float)font->face->size->metrics.height) / 64.0f;
}
gc->p2_width= 0;
@@ -197,39 +189,53 @@ GlyphBLF *blf_glyph_search(GlyphCacheBLF *gc, unsigned int c)
return(NULL);
}
-GlyphBLF *blf_glyph_add(FontBLF *font, FT_UInt index, unsigned int c)
+GlyphBLF *blf_glyph_texture_add(FontBLF *font, FT_UInt index, unsigned int c)
{
FT_GlyphSlot slot;
GlyphCacheBLF *gc;
GlyphBLF *g;
- FT_Face face;
+ GlyphTextureBLF *gt;
FT_Error err;
FT_Bitmap bitmap;
FT_BBox bbox;
unsigned int key;
+ int do_new;
g= blf_glyph_search(font->glyph_cache, c);
- if (g)
+
+ /* The glyph can be add on Bitmap mode, so we have the
+ * glyph, but not the texture data.
+ */
+ if (g && g->tex_data)
return(g);
+ else if (g)
+ do_new= 0;
+ else
+ do_new= 1;
- face= (FT_Face)font->engine;
- err= FT_Load_Glyph(face, index, FT_LOAD_NO_HINTING | FT_LOAD_NO_BITMAP);
+ err= FT_Load_Glyph(font->face, index, FT_LOAD_NO_HINTING | FT_LOAD_NO_BITMAP);
if (err)
return(NULL);
/* get the glyph. */
- slot= face->glyph;
+ slot= font->face->glyph;
err= FT_Render_Glyph(slot, FT_RENDER_MODE_NORMAL);
if (err || slot->format != FT_GLYPH_FORMAT_BITMAP)
return(NULL);
- g= (GlyphBLF *)MEM_mallocN(sizeof(GlyphBLF), "blf_glyph_add");
- g->next= NULL;
- g->prev= NULL;
- g->c= c;
+ if (do_new) {
+ g= (GlyphBLF *)MEM_mallocN(sizeof(GlyphBLF), "blf_glyph_add");
+ g->next= NULL;
+ g->prev= NULL;
+ g->tex_data= NULL;
+ g->bitmap_data= NULL;
+ g->c= c;
+ }
+ gt= (GlyphTextureBLF *)MEM_mallocN(sizeof(GlyphTextureBLF), "blf_glyph_texture_add");
gc= font->glyph_cache;
+
if (gc->cur_tex == -1) {
blf_glyph_cache_texture(font, gc);
gc->x_offs= gc->pad;
@@ -247,27 +253,27 @@ GlyphBLF *blf_glyph_add(FontBLF *font, FT_UInt index, unsigned int c)
}
bitmap= slot->bitmap;
- g->tex= gc->textures[gc->cur_tex];
+ gt->tex= gc->textures[gc->cur_tex];
- g->xoff= gc->x_offs;
- g->yoff= gc->y_offs;
- g->width= bitmap.width;
- g->height= bitmap.rows;
+ gt->xoff= gc->x_offs;
+ gt->yoff= gc->y_offs;
+ gt->width= bitmap.width;
+ gt->height= bitmap.rows;
- if (g->width && g->height) {
+ if (gt->width && gt->height) {
glPushClientAttrib(GL_CLIENT_PIXEL_STORE_BIT);
glPixelStorei(GL_UNPACK_LSB_FIRST, GL_FALSE);
glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
- glBindTexture(GL_TEXTURE_2D, g->tex);
- glTexSubImage2D(GL_TEXTURE_2D, 0, g->xoff, g->yoff, g->width, g->height, GL_ALPHA, GL_UNSIGNED_BYTE, bitmap.buffer);
+ glBindTexture(GL_TEXTURE_2D, gt->tex);
+ glTexSubImage2D(GL_TEXTURE_2D, 0, gt->xoff, gt->yoff, gt->width, gt->height, GL_ALPHA, GL_UNSIGNED_BYTE, bitmap.buffer);
glPopClientAttrib();
}
g->advance= ((float)slot->advance.x) / 64.0f;
- g->pos_x= slot->bitmap_left;
- g->pos_y= slot->bitmap_top;
+ gt->pos_x= slot->bitmap_left;
+ gt->pos_y= slot->bitmap_top;
FT_Outline_Get_CBox(&(slot->outline), &bbox);
g->box.xmin= ((float)bbox.xMin) / 64.0f;
@@ -275,38 +281,219 @@ GlyphBLF *blf_glyph_add(FontBLF *font, FT_UInt index, unsigned int c)
g->box.ymin= ((float)bbox.yMin) / 64.0f;
g->box.ymax= ((float)bbox.yMax) / 64.0f;
- g->uv[0][0]= ((float)g->xoff) / ((float)gc->p2_width);
- g->uv[0][1]= ((float)g->yoff) / ((float)gc->p2_height);
- g->uv[1][0]= ((float)(g->xoff + g->width)) / ((float)gc->p2_width);
- g->uv[1][1]= ((float)(g->yoff + g->height)) / ((float)gc->p2_height);
+ gt->uv[0][0]= ((float)gt->xoff) / ((float)gc->p2_width);
+ gt->uv[0][1]= ((float)gt->yoff) / ((float)gc->p2_height);
+ gt->uv[1][0]= ((float)(gt->xoff + gt->width)) / ((float)gc->p2_width);
+ gt->uv[1][1]= ((float)(gt->yoff + gt->height)) / ((float)gc->p2_height);
/* update the x offset for the next glyph. */
gc->x_offs += (int)(g->box.xmax - g->box.xmin + gc->pad);
- key= blf_hash(g->c);
- BLI_addhead(&(gc->bucket[key]), g);
- gc->rem_glyphs--;
+ if (do_new) {
+ key= blf_hash(g->c);
+ BLI_addhead(&(gc->bucket[key]), g);
+ gc->rem_glyphs--;
+ }
+
+ /* and attach the texture information. */
+ g->tex_data= gt;
+
return(g);
}
+GlyphBLF *blf_glyph_bitmap_add(FontBLF *font, FT_UInt index, unsigned int c)
+{
+ FT_GlyphSlot slot;
+ GlyphCacheBLF *gc;
+ GlyphBLF *g;
+ GlyphBitmapBLF *gt;
+ FT_Error err;
+ FT_Bitmap bitmap;
+ FT_BBox bbox;
+ unsigned char *dest, *src;
+ unsigned int key, y;
+ unsigned int src_width, src_height, src_pitch;
+ int do_new;
+
+ g= blf_glyph_search(font->glyph_cache, c);
+
+ /*
+ * The glyph can be add on Texture mode, so we have the
+ * glyph, but not the bitmap data.
+ */
+ if (g && g->bitmap_data)
+ return(g);
+ else if (g)
+ do_new= 0;
+ else
+ do_new= 1;
+
+ err= FT_Load_Glyph(font->face, index, FT_LOAD_NO_HINTING | FT_LOAD_NO_BITMAP);
+ if (err)
+ return(NULL);
+
+ /* get the glyph. */
+ slot= font->face->glyph;
+
+ err= FT_Render_Glyph(slot, FT_RENDER_MODE_MONO);
+ if (err || slot->format != FT_GLYPH_FORMAT_BITMAP)
+ return(NULL);
+
+ if (do_new) {
+ g= (GlyphBLF *)MEM_mallocN(sizeof(GlyphBLF), "blf_glyph_add");
+ g->next= NULL;
+ g->prev= NULL;
+ g->tex_data= NULL;
+ g->bitmap_data= NULL;
+ g->c= c;
+ }
+
+ gt= (GlyphBitmapBLF *)MEM_mallocN(sizeof(GlyphBitmapBLF), "blf_glyph_bitmap_add");
+ gc= font->glyph_cache;
+
+ bitmap= slot->bitmap;
+
+ src_width= bitmap.width;
+ src_height= bitmap.rows;
+ src_pitch= bitmap.pitch;
+
+ gt->width= src_width;
+ gt->height= src_height;
+ gt->pitch= src_pitch;
+ gt->image= NULL;
+
+ if (gt->width && gt->height) {
+ gt->image= (unsigned char *)malloc(gt->pitch * gt->height);
+
+ dest= gt->image + ((gt->height - 1) * gt->pitch);
+ src= bitmap.buffer;
+
+ for (y= 0; y < src_height; ++y) {
+ memcpy((void *)dest, (void *)src, src_pitch);
+ dest -= gt->pitch;
+ src += src_pitch;
+ }
+ }
+
+ g->advance= ((float)slot->advance.x) / 64.0f;
+ gt->pos_x= slot->bitmap_left;
+ gt->pos_y= ((int)src_height) - slot->bitmap_top;
+
+ FT_Outline_Get_CBox(&(slot->outline), &bbox);
+ g->box.xmin= ((float)bbox.xMin) / 64.0f;
+ g->box.xmax= ((float)bbox.xMax) / 64.0f;
+ g->box.ymin= ((float)bbox.yMin) / 64.0f;
+ g->box.ymax= ((float)bbox.yMax) / 64.0f;
+
+ if (do_new) {
+ key= blf_hash(g->c);
+ BLI_addhead(&(gc->bucket[key]), g);
+ gc->rem_glyphs--;
+ }
+
+ /* and attach the bitmap information. */
+ g->bitmap_data= gt;
+
+ return(g);
+}
+
+GlyphBLF *blf_glyph_add(FontBLF *font, FT_UInt index, unsigned int c)
+{
+ if (font->mode == BLF_MODE_BITMAP)
+ return(blf_glyph_bitmap_add(font, index, c));
+ return(blf_glyph_texture_add(font, index, c));
+}
+
void blf_glyph_free(GlyphBLF *g)
{
+ if (g->tex_data)
+ MEM_freeN(g->tex_data);
+
+ if (g->bitmap_data) {
+ if (g->bitmap_data->image)
+ free((void *)g->bitmap_data->image);
+ MEM_freeN(g->bitmap_data);
+ }
+
/* don't need free the texture, the GlyphCache already
* have a list of all the texture and free it.
*/
MEM_freeN(g);
}
-int blf_glyph_render(FontBLF *font, GlyphBLF *g, float x, float y)
+static void blf_texture_draw(float uv[2][2], float dx, float y1, float dx1, float y2)
+{
+
+ glBegin(GL_QUADS);
+ glTexCoord2f(uv[0][0], uv[0][1]);
+ glVertex2f(dx, y1);
+
+ glTexCoord2f(uv[0][0], uv[1][1]);
+ glVertex2f(dx, y2);
+
+ glTexCoord2f(uv[1][0], uv[1][1]);
+ glVertex2f(dx1, y2);
+
+ glTexCoord2f(uv[1][0], uv[0][1]);
+ glVertex2f(dx1, y1);
+ glEnd();
+
+}
+
+static void blf_texture5_draw(float uv[2][2], float x1, float y1, float x2, float y2)
+{
+ float soft[25]= {
+ 1/60.0f, 1/60.0f, 2/60.0f, 1/60.0f, 1/60.0f,
+ 1/60.0f, 3/60.0f, 5/60.0f, 3/60.0f, 1/60.0f,
+ 2/60.0f, 5/60.0f, 8/60.0f, 5/60.0f, 2/60.0f,
+ 1/60.0f, 3/60.0f, 5/60.0f, 3/60.0f, 1/60.0f,
+ 1/60.0f, 1/60.0f, 2/60.0f, 1/60.0f, 1/60.0f};
+
+ float color[4], *fp= soft;
+ int dx, dy;
+
+ glGetFloatv(GL_CURRENT_COLOR, color);
+
+ for(dx=-2; dx<3; dx++) {
+ for(dy=-2; dy<3; dy++, fp++) {
+ glColor4f(color[0], color[1], color[2], fp[0]*color[3]);
+ blf_texture_draw(uv, x1+dx, y1+dy, x2+dx, y2+dy);
+ }
+ }
+
+ glColor4fv(color);
+}
+
+static void blf_texture3_draw(float uv[2][2], float x1, float y1, float x2, float y2)
+{
+ float soft[9]= {1/16.0f, 2/16.0f, 1/16.0f, 2/16.0f, 4/16.0f, 2/16.0f, 1/16.0f, 2/16.0f, 1/16.0f};
+ float color[4], *fp= soft;
+ int dx, dy;
+
+ glGetFloatv(GL_CURRENT_COLOR, color);
+
+ for(dx=-1; dx<2; dx++) {
+ for(dy=-1; dy<2; dy++, fp++) {
+ glColor4f(color[0], color[1], color[2], fp[0]*color[3]);
+ blf_texture_draw(uv, x1+dx, y1+dy, x2+dx, y2+dy);
+ }
+ }
+
+ glColor4fv(color);
+}
+
+int blf_glyph_texture_render(FontBLF *font, GlyphBLF *g, float x, float y)
{
+ GlyphTextureBLF *gt;
GLint cur_tex;
float dx, dx1;
float y1, y2;
- dx= floor(x + g->pos_x);
- dx1= dx + g->width;
- y1= y + g->pos_y;
- y2= y + g->pos_y - g->height;
+ gt= g->tex_data;
+ dx= floor(x + gt->pos_x);
+ dx1= dx + gt->width;
+ y1= y + gt->pos_y;
+ y2= y + gt->pos_y - gt->height;
if (font->flags & BLF_CLIPPING) {
if (!BLI_in_rctf(&font->clip_rec, dx + font->pos[0], y1 + font->pos[1]))
@@ -320,24 +507,49 @@ int blf_glyph_render(FontBLF *font, GlyphBLF *g, float x, float y)
}
glGetIntegerv(GL_TEXTURE_2D_BINDING_EXT, &cur_tex);
- if (cur_tex != g->tex)
- glBindTexture(GL_TEXTURE_2D, g->tex);
-
- glBegin(GL_QUADS);
- glTexCoord2f(g->uv[0][0], g->uv[0][1]);
- glVertex2f(dx, y1);
+ if (cur_tex != gt->tex)
+ glBindTexture(GL_TEXTURE_2D, gt->tex);
+
+ if (font->blur==3)
+ blf_texture3_draw(gt->uv, dx, y1, dx1, y2);
+ else if (font->blur==5)
+ blf_texture5_draw(gt->uv, dx, y1, dx1, y2);
+ else
+ blf_texture_draw(gt->uv, dx, y1, dx1, y2);
+
+ return(1);
+}
- glTexCoord2f(g->uv[0][0], g->uv[1][1]);
- glVertex2f(dx, y2);
+int blf_glyph_bitmap_render(FontBLF *font, GlyphBLF *g, float x, float y)
+{
+ GlyphBitmapBLF *gt;
+ GLubyte null_bitmap= 0;
- glTexCoord2f(g->uv[1][0], g->uv[1][1]);
- glVertex2f(dx1, y2);
+ gt= g->bitmap_data;
+ if (!gt->image)
+ return(1);
- glTexCoord2f(g->uv[1][0], g->uv[0][1]);
- glVertex2f(dx1, y1);
- glEnd();
+ if (font->flags & BLF_CLIPPING) {
+ if (!BLI_in_rctf(&font->clip_rec, x + font->pos[0], y + font->pos[1]))
+ return(0);
+ if (!BLI_in_rctf(&font->clip_rec, x + font->pos[0], y + gt->height + font->pos[1]))
+ return(0);
+ if (!BLI_in_rctf(&font->clip_rec, x + gt->width + font->pos[0], y + gt->height + font->pos[1]))
+ return(0);
+ if (!BLI_in_rctf(&font->clip_rec, x + gt->width + font->pos[0], y + font->pos[1]))
+ return(0);
+ }
+ glBitmap(0, 0, 0.0, 0.0, x + font->pos[0], y - font->pos[1], (const GLubyte *)&null_bitmap);
+ glPixelStorei(GL_UNPACK_ROW_LENGTH, gt->pitch * 8);
+ glBitmap(gt->width, gt->height, 0.0, gt->pos_y, 0.0, 0.0, (const GLubyte *)gt->image);
+ glBitmap(0, 0, 0.0, 0.0, -x - font->pos[0], -y + font->pos[1], (const GLubyte *)&null_bitmap);
return(1);
}
-#endif /* WITH_FREETYPE2 */
+int blf_glyph_render(FontBLF *font, GlyphBLF *g, float x, float y)
+{
+ if (font->mode == BLF_MODE_BITMAP)
+ return(blf_glyph_bitmap_render(font, g, x, y));
+ return(blf_glyph_texture_render(font, g, x, y));
+}
diff --git a/source/blender/blenfont/intern/blf_internal.c b/source/blender/blenfont/intern/blf_internal.c
deleted file mode 100644
index d5ec20f790a..00000000000
--- a/source/blender/blenfont/intern/blf_internal.c
+++ /dev/null
@@ -1,290 +0,0 @@
-/**
- * $Id:
- *
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * The Original Code is Copyright (C) 2009 Blender Foundation.
- * All rights reserved.
- *
- *
- * Contributor(s): Blender Foundation
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#ifdef WITH_FREETYPE2
-
-#include <ft2build.h>
-
-#include FT_FREETYPE_H
-#include FT_GLYPH_H
-
-#endif /* WITH_FREETYPE2 */
-
-#include "MEM_guardedalloc.h"
-
-#include "DNA_listBase.h"
-#include "DNA_vec_types.h"
-
-#include "BKE_utildefines.h"
-
-#include "BLI_blenlib.h"
-#include "BLI_linklist.h" /* linknode */
-#include "BLI_string.h"
-#include "BLI_arithb.h"
-
-#include "BIF_gl.h"
-#include "BLF_api.h"
-
-#include "blf_internal_types.h"
-#include "blf_internal.h"
-#include "blf_font_helv10.h"
-
-
-int blf_internal_get_texture(FontBLF *font)
-{
- FontDataBLF *data;
- CharDataBLF *cd;
- int width;
- int height;
- int c_rows, c_cols, c_width, c_height;
- int i_width, i_height;
- GLubyte *img, *img_row, *chr_row, *img_pxl;
- int base_line, i, cell_x, cell_y, y, x;
- int byte_idx, bit_idx;
-
- data= (FontDataBLF *)font->engine;
- if (data->texid != 0)
- return(0);
-
- width= data->xmax - data->xmin;
- height= data->ymax - data->ymin;
- c_rows= 16;
- c_cols= 16;
- c_width= 16;
- c_height= 16;
- i_width= c_cols * c_width;
- i_height= c_rows * c_height;
- base_line= -(data->ymin);
- img= (GLubyte *)malloc(i_height * i_width);
- memset((void *)img, 0, i_height * i_width);
-
- if (width >= 16 || height >= 16) {
- printf("Warning: Bad font size for: %s\n", font->name);
- return(-1);
- }
-
- for (i= 0; i < 256; i++) {
- cd= &data->chars[i];
-
- if (cd->data_offset != -1) {
- cell_x= i%16;
- cell_y= i/16;
-
- for (y= 0; y < cd->height; y++) {
- img_row = &img[(cell_y*c_height + y + base_line - cd->yorig)*i_width];
- chr_row = &data->bitmap_data[cd->data_offset + ((cd->width+7)/8)*y];
-
- for (x= 0; x < cd->width; x++) {
- img_pxl= &img_row[(cell_x*c_width + x - cd->xorig)];
- byte_idx= x/8;
- bit_idx= 7 - (x%8);
-
- if (chr_row[byte_idx]&(1<<bit_idx)) {
- img_pxl[0]= 255;
- }
- }
- }
- }
- }
-
- glGenTextures(1, &data->texid);
- glBindTexture(GL_TEXTURE_2D, data->texid);
- glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA4, i_width, i_height, 0, GL_ALPHA, GL_UNSIGNED_BYTE, img);
- if (glGetError()) {
- glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE4_ALPHA4, i_width, i_height, 0, GL_ALPHA, GL_UNSIGNED_BYTE, img);
- }
-
- glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- free((void *)img);
- return(0);
-}
-
-void blf_internal_size(FontBLF *font, int size, int dpi)
-{
- return;
-}
-
-void blf_internal_draw(FontBLF *font, char *str)
-{
- FontDataBLF *data;
- CharDataBLF *cd;
- unsigned char c;
- float pos, cell_x, cell_y, x, y, z;
- int base_line;
- GLint cur_tex;
-
- data= (FontDataBLF *)font->engine;
- base_line= -(data->ymin);
- pos= 0;
- x= 0.0f;
- y= 0.0f;
- z= 0.0f;
-
- glGetIntegerv(GL_TEXTURE_2D_BINDING_EXT, &cur_tex);
- if (cur_tex != data->texid)
- glBindTexture(GL_TEXTURE_2D, data->texid);
-
- glBegin(GL_QUADS);
- while ((c= (unsigned char) *str++)) {
- cd= &data->chars[c];
-
- if (cd->data_offset != -1) {
- cell_x= (c%16)/16.0;
- cell_y= (c/16)/16.0;
-
- glTexCoord2f(cell_x + 1.0/16.0, cell_y);
- glVertex3f(x + pos + 16.0, -base_line + y + 0.0, z);
-
- glTexCoord2f(cell_x + 1.0/16.0, cell_y + 1.0/16.0);
- glVertex3f(x + pos + 16.0, -base_line + y + 16.0, z);
-
- glTexCoord2f(cell_x, cell_y + 1.0/16.0);
- glVertex3f(x + pos + 0.0, -base_line + y + 16.0, z);
-
- glTexCoord2f(cell_x, cell_y);
- glVertex3f(x + pos + 0.0, -base_line + y + 0.0, z);
- }
-
- pos += cd->advance;
- }
- glEnd();
-}
-
-void blf_internal_boundbox(FontBLF *font, char *str, rctf *box)
-{
- FontDataBLF *data;
- unsigned char c;
- int length= 0;
- int ascent= 0;
- int descent= 0;
-
- data= (FontDataBLF *)font->engine;
- while ((c= (unsigned char) *str++)) {
- int d = data->chars[c].yorig;
- int a = data->chars[c].height - data->chars[c].yorig;
-
- length += data->chars[c].advance;
- if (a > ascent)
- ascent= a;
- if (d > descent)
- descent= d;
- }
- box->xmin = (float)0;
- box->ymin = (float)-descent;
- box->xmax = (float)length;
- box->ymax = (float)ascent;
-}
-
-float blf_internal_width(FontBLF *font, char *str)
-{
- FontDataBLF *data;
- unsigned char c;
- int length= 0;
-
- data= (FontDataBLF *)font->engine;
- while ((c= (unsigned char) *str++)) {
- length += data->chars[c].advance;
- }
-
- return((float)(length * font->aspect));
-}
-
-float blf_internal_height(FontBLF *font, char *str)
-{
- FontDataBLF *data;
-
- data= (FontDataBLF *)font->engine;
- return(((float)(data->ymax - data->ymin)) * font->aspect);
-}
-
-void blf_internal_free(FontBLF *font)
-{
- MEM_freeN(font->name);
- MEM_freeN(font);
-}
-
-FontBLF *blf_internal_new(char *name)
-{
- FontBLF *font;
-
- font= (FontBLF *)MEM_mallocN(sizeof(FontBLF), "blf_internal_new");
- font->name= BLI_strdup(name);
- font->filename= NULL;
-
- if (!strcmp(name, "helv10")) {
- font->engine= (void *)&blf_font_helv10;
- font->size= 10;
- }
- else
- font->engine= NULL;
-
- if (!font->engine) {
- MEM_freeN(font->name);
- MEM_freeN(font);
- return(NULL);
- }
-
- font->type= BLF_FONT_INTERNAL;
- font->ref= 1;
- font->aspect= 1.0f;
- font->pos[0]= 0.0f;
- font->pos[1]= 0.0f;
- font->angle= 0.0f;
- Mat4One(font->mat);
- font->clip_rec.xmin= 0.0f;
- font->clip_rec.xmax= 0.0f;
- font->clip_rec.ymin= 0.0f;
- font->clip_rec.ymax= 0.0f;
- font->flags= 0;
- font->dpi= 72;
- font->cache.first= NULL;
- font->cache.last= NULL;
- font->glyph_cache= NULL;
- glGetIntegerv(GL_MAX_TEXTURE_SIZE, (GLint *)&font->max_tex_size);
-
- font->size_set= blf_internal_size;
- font->draw= blf_internal_draw;
- font->boundbox_get= blf_internal_boundbox;
- font->width_get= blf_internal_width;
- font->height_get= blf_internal_height;
- font->free= blf_internal_free;
-
- if (blf_internal_get_texture(font) != 0) {
- MEM_freeN(font->name);
- MEM_freeN(font);
- return(NULL);
- }
-
- return(font);
-}
diff --git a/source/blender/blenfont/intern/blf_internal.h b/source/blender/blenfont/intern/blf_internal.h
index 87d5938db9c..c9bdc428ebb 100644
--- a/source/blender/blenfont/intern/blf_internal.h
+++ b/source/blender/blenfont/intern/blf_internal.h
@@ -33,17 +33,22 @@ unsigned int blf_hash(unsigned int val);
int blf_utf8_next(unsigned char *buf, int *iindex);
char *blf_dir_search(const char *file);
+char *blf_dir_metrics_search(char *filename);
int blf_dir_split(const char *str, char *file, int *size);
int blf_font_init(void);
void blf_font_exit(void);
-FontBLF *blf_internal_new(char *name);
-
-#ifdef WITH_FREETYPE2
-
FontBLF *blf_font_new(char *name, char *filename);
FontBLF *blf_font_new_from_mem(char *name, unsigned char *mem, int mem_size);
+void blf_font_attach_from_mem(FontBLF *font, const unsigned char *mem, int mem_size);
+
+void blf_font_size(FontBLF *font, int size, int dpi);
+void blf_font_draw(FontBLF *font, char *str);
+void blf_font_boundbox(FontBLF *font, char *str, rctf *box);
+float blf_font_width(FontBLF *font, char *str);
+float blf_font_height(FontBLF *font, char *str);
+void blf_font_free(FontBLF *font);
GlyphCacheBLF *blf_glyph_cache_find(FontBLF *font, int size, int dpi);
GlyphCacheBLF *blf_glyph_cache_new(FontBLF *font);
@@ -55,5 +60,4 @@ GlyphBLF *blf_glyph_add(FontBLF *font, FT_UInt index, unsigned int c);
void blf_glyph_free(GlyphBLF *g);
int blf_glyph_render(FontBLF *font, GlyphBLF *g, float x, float y);
-#endif /* WITH_FREETYPE2 */
#endif /* BLF_INTERNAL_H */
diff --git a/source/blender/blenfont/intern/blf_internal_types.h b/source/blender/blenfont/intern/blf_internal_types.h
index 9df04522b1f..1c55499b568 100644
--- a/source/blender/blenfont/intern/blf_internal_types.h
+++ b/source/blender/blenfont/intern/blf_internal_types.h
@@ -78,13 +78,7 @@ typedef struct GlyphCacheBLF {
float descender;
} GlyphCacheBLF;
-typedef struct GlyphBLF {
- struct GlyphBLF *next;
- struct GlyphBLF *prev;
-
- /* and the character, as UTF8 */
- unsigned int c;
-
+typedef struct GlyphTextureBLF {
/* texture id where this glyph is store. */
GLuint tex;
@@ -96,21 +90,47 @@ typedef struct GlyphBLF {
int width;
int height;
- /* glyph bounding box. */
- rctf box;
-
/* uv coords. */
float uv[2][2];
- /* advance value. */
- float advance;
-
/* X and Y bearing of the glyph.
* The X bearing is from the origin to the glyph left bbox edge.
* The Y bearing is from the baseline to the top of the glyph edge.
*/
float pos_x;
float pos_y;
+} GlyphTextureBLF;
+
+typedef struct GlyphBitmapBLF {
+ /* image data. */
+ unsigned char *image;
+
+ int width;
+ int height;
+ int pitch;
+
+ float pos_x;
+ float pos_y;
+} GlyphBitmapBLF;
+
+typedef struct GlyphBLF {
+ struct GlyphBLF *next;
+ struct GlyphBLF *prev;
+
+ /* and the character, as UTF8 */
+ unsigned int c;
+
+ /* glyph box. */
+ rctf box;
+
+ /* advance size. */
+ float advance;
+
+ /* texture information. */
+ GlyphTextureBLF *tex_data;
+
+ /* bitmap information. */
+ GlyphBitmapBLF *bitmap_data;
} GlyphBLF;
typedef struct FontBLF {
@@ -120,11 +140,8 @@ typedef struct FontBLF {
/* filename or NULL. */
char *filename;
- /* font type, can be freetype2 or internal. */
- int type;
-
- /* reference count. */
- int ref;
+ /* draw mode, texture or bitmap. */
+ int mode;
/* aspect ratio or scale. */
float aspect;
@@ -134,7 +151,10 @@ typedef struct FontBLF {
/* angle in degrees. */
float angle;
-
+
+ /* blur: 3 or 5 large kernel */
+ int blur;
+
/* this is the matrix that we load before rotate/scale/translate. */
float mat[4][4];
@@ -159,36 +179,10 @@ typedef struct FontBLF {
/* current glyph cache, size and dpi. */
GlyphCacheBLF *glyph_cache;
- /* engine data. */
- void *engine;
-
- /* engine functions. */
- void (*size_set)(struct FontBLF *, int, int);
- void (*draw)(struct FontBLF *, char *);
- void (*boundbox_get)(struct FontBLF *, char *, rctf *);
- float (*width_get)(struct FontBLF *, char *);
- float (*height_get)(struct FontBLF *, char *);
- void (*free)(struct FontBLF *);
+ /* freetype2 face. */
+ FT_Face face;
} FontBLF;
-typedef struct CharDataBLF {
- signed char width, height;
- signed char xorig, yorig;
- signed char advance;
-
- short data_offset;
-} CharDataBLF;
-
-typedef struct FontDataBLF {
- int xmin, ymin;
- int xmax, ymax;
-
- CharDataBLF chars[256];
- unsigned char *bitmap_data;
-
- GLuint texid;
-} FontDataBLF;
-
typedef struct DirBLF {
struct DirBLF *next;
struct DirBLF *prev;
@@ -197,26 +191,4 @@ typedef struct DirBLF {
char *path;
} DirBLF;
-typedef struct LangBLF {
- struct LangBLF *next;
- struct LangBLF *prev;
-
- char *line;
- char *language;
- char *code;
- int id;
-} LangBLF;
-
-#define BLF_LANG_FIND_BY_LINE 0
-#define BLF_LANG_FIND_BY_LANGUAGE 1
-#define BLF_LANG_FIND_BY_CODE 2
-
-/* font->clip_mode */
-#define BLF_CLIP_DISABLE 0
-#define BLF_CLIP_OUT 1
-
-/* font->type */
-#define BLF_FONT_FREETYPE2 0
-#define BLF_FONT_INTERNAL 1
-
#endif /* BLF_INTERNAL_TYPES_H */
diff --git a/source/blender/blenfont/intern/blf_lang.c b/source/blender/blenfont/intern/blf_lang.c
index 730440a5ae5..024172d6db4 100644
--- a/source/blender/blenfont/intern/blf_lang.c
+++ b/source/blender/blenfont/intern/blf_lang.c
@@ -29,12 +29,10 @@
#include <stdlib.h>
#include <string.h>
-#ifdef WITH_FREETYPE2
-#include <ft2build.h>
+#ifdef INTERNATIONAL
-#include FT_FREETYPE_H
-#include FT_GLYPH_H
-#endif
+#include <locale.h>
+#include "libintl.h"
#include "MEM_guardedalloc.h"
@@ -49,208 +47,126 @@
#include "BIF_gl.h"
-#include "blf_internal_types.h"
-
-// XXX 2.50 Remove this later.
-#ifdef WITH_FREETYPE2
-#include "FTF_Api.h"
+#ifdef __APPLE__
+#include "BKE_utildefines.h"
#endif
-static ListBase global_lang= { NULL, NULL };
-static int global_tot_lang= 0;
-static int global_err_lang= 0;
+#define DOMAIN_NAME "blender"
+#define SYSTEM_ENCODING_DEFAULT "UTF-8"
+#define FONT_SIZE_DEFAULT 12
-int BLF_lang_error(void)
-{
- return(global_err_lang);
-}
+/* locale options. */
+char global_messagepath[1024];
+char global_language[32];
+char global_encoding_name[32];
-char *BLF_lang_pup(void)
-{
- LangBLF *lme;
- static char string[1024];
- static char tmp[1024];
-
- if(global_tot_lang == 0)
- sprintf(string, "Choose Language: %%t|Language: English %%x0");
- else {
- lme= global_lang.first;
- sprintf(string, "Choose Language: %%t");
- while (lme) {
- sprintf(tmp, "|Language: %s %%x%d", lme->language, lme->id);
- strcat(string, tmp);
- lme= lme->next;
- }
- }
-
- return(string);
-}
-
-LangBLF *blf_lang_find_by_id(short langid)
-{
- LangBLF *p;
-
- p= global_lang.first;
- while (p) {
- if (p->id == langid)
- return(p);
- p= p->next;
- }
- return(NULL);
-}
-char *BLF_lang_find_code(short langid)
+void BLF_lang_init(void)
{
- LangBLF *p;
+#ifdef __APPLE__
+ char *bundlepath;
+#endif
- p= blf_lang_find_by_id(langid);
- if (p)
- return(p->code);
- return(NULL);
-}
+ strcpy(global_encoding_name, SYSTEM_ENCODING_DEFAULT);
-void BLF_lang_set(int id)
-{
-#ifdef WITH_FREETYPE2
- LangBLF *lme;
+ /* set messagepath directory */
- // XXX 2.50 Remove this later, with ftfont
- lme= blf_lang_find_by_id(id);
- if(lme) FTF_SetLanguage(lme->code);
- else FTF_SetLanguage("en_US");
+#ifndef LOCALEDIR
+#define LOCALEDIR "/usr/share/locale"
#endif
-}
-static void blf_lang_split(char *line, LangBLF* lme)
-{
- char *dpointchar= strchr(line, ':');
-
- if (dpointchar) {
- lme->code= BLI_strdup(dpointchar+1);
- *(dpointchar)=0;
- lme->language= BLI_strdup(line);
- } else {
- lme->code= NULL;
- lme->language= NULL;
- /* XXX 2.50 bad call error("Invalid language file");
- * If we set this to NULL, the function blf_lang_new
- * drop the line and increment the error lang value
- * so the init code can call BLF_lang_error to get
- * the number of invalid lines and show the error.
- */
- }
-}
+ strcpy(global_messagepath, ".blender/locale");
-LangBLF *blf_lang_find(char *s, int find_by)
-{
- LangBLF *p;
+ if (!BLI_exist(global_messagepath)) { /* locale not in current dir */
+ BLI_make_file_string("/", global_messagepath, BLI_gethome(), ".blender/locale");
- p= global_lang.first;
- while (p) {
- if (find_by == BLF_LANG_FIND_BY_LINE) {
- if (BLI_streq(s, p->line))
- return(p);
- }
- else if (find_by == BLF_LANG_FIND_BY_CODE) {
- if (BLI_streq(s, p->code))
- return(p);
- }
- else if (find_by == BLF_LANG_FIND_BY_LANGUAGE) {
- if (BLI_streq(s, p->language))
- return(p);
- }
- p= p->next;
- }
- return(NULL);
-}
+ if (!BLI_exist(global_messagepath)) { /* locale not in home dir */
+#ifdef WIN32
+ BLI_make_file_string("/", global_messagepath, BLI_gethome(), "/locale");
+ if (!BLI_exist(global_messagepath)) {
+#endif
+#ifdef __APPLE__
+ /* message catalogs are stored inside the application bundle */
+ bundlepath= BLI_getbundle();
+ strcpy(global_messagepath, bundlepath);
+ strcat(global_messagepath, "/Contents/Resources/locale");
+ if (!BLI_exist(global_messagepath)) { /* locale not in bundle (now that's odd..) */
+#endif
+ strcpy(global_messagepath, LOCALEDIR);
-static void blf_lang_new(char *line)
-{
- LangBLF *lme;
-
- lme= blf_lang_find(line, BLF_LANG_FIND_BY_LINE);
- if (!lme) {
- lme= MEM_mallocN(sizeof(LangBLF), "blf_lang_new");
- lme->next= NULL;
- lme->prev= NULL;
- lme->line = BLI_strdup(line);
- blf_lang_split(line, lme);
-
- if (lme->code && lme->language) {
- lme->id = global_tot_lang;
- global_tot_lang++;
- BLI_addhead(&global_lang, lme);
- }
- else {
- global_err_lang++;
- MEM_freeN(lme->line);
- MEM_freeN(lme);
+ if (!BLI_exist(global_messagepath)) { /* locale not in LOCALEDIR */
+ strcpy(global_messagepath, "message"); /* old compatibility as last */
+ }
+#ifdef WIN32
+ }
+#endif
+#ifdef __APPLE__
+ }
+#endif
}
}
}
-int BLF_lang_init(void)
+void BLF_lang_set(const char *str)
{
- char name[FILE_MAXDIR+FILE_MAXFILE];
- LinkNode *l, *lines;
-
- /* .Blanguages, http://www.blender3d.org/cms/Installation_Policy.352.0.html*/
-#if defined (__APPLE__) || (WIN32)
- BLI_make_file_string("/", name, BLI_gethome(), ".Blanguages");
+#if defined (_WIN32) || defined(__APPLE__)
+ char envstr[12];
+
+ sprintf(envstr, "LANG=%s", str);
+ envstr[strlen(envstr)]= '\0';
+#ifdef _WIN32
+ gettext_putenv(envstr);
#else
- BLI_make_file_string("/", name, BLI_gethome(), ".blender/.Blanguages");
+ putenv(envstr);
#endif
+#else
+ char *locreturn= setlocale(LC_ALL, str);
+ if (locreturn == NULL) {
+ char *lang;
- lines= BLI_read_file_as_lines(name);
+ lang= (char*)malloc(sizeof(char)*(strlen(str)+7));
- if(lines == NULL) {
- /* If not found in home, try current dir
- * (Resources folder of app bundle on OS X) */
-#if defined (__APPLE__)
- char *bundlePath = BLI_getbundle();
- strcpy(name, bundlePath);
- strcat(name, "/Contents/Resources/.Blanguages");
-#else
- /* Check the CWD. Takes care of the case where users
- * unpack blender tarball; cd blender-dir; ./blender */
- strcpy(name, ".blender/.Blanguages");
-#endif
- lines= BLI_read_file_as_lines(name);
-
- if(lines == NULL) {
- /* If not found in .blender, try current dir */
- strcpy(name, ".Blanguages");
- lines= BLI_read_file_as_lines(name);
- if(lines == NULL) {
-// XXX 2.50 if(G.f & G_DEBUG)
- printf("File .Blanguages not found\n");
- return(0);
- }
- }
- }
+ lang[0]= '\0';
+ strcat(lang, str);
+ strcat(lang, ".UTF-8");
- for (l= lines; l; l= l->next) {
- char *line= l->link;
-
- if (!BLI_streq(line, "")) {
- blf_lang_new(line);
+ locreturn= setlocale(LC_ALL, lang);
+ if (locreturn == NULL) {
+ printf("could not change language to %s nor %s\n", str, lang);
}
+
+ free(lang);
}
- BLI_free_file_lines(lines);
- return(1);
+ setlocale(LC_NUMERIC, "C");
+#endif
+ textdomain(DOMAIN_NAME);
+ bindtextdomain(DOMAIN_NAME, global_messagepath);
+ /* bind_textdomain_codeset(DOMAIN_NAME, global_encoding_name); */
+ strcpy(global_language, str);
}
-void BLF_lang_exit(void)
+void BLF_lang_encoding(const char *str)
{
- LangBLF *p;
-
- while (global_lang.first) {
- p= global_lang.first;
- BLI_remlink(&global_lang, p);
- MEM_freeN(p->line);
- MEM_freeN(p->language);
- MEM_freeN(p->code);
- MEM_freeN(p);
- }
+ strcpy(global_encoding_name, str);
+ /* bind_textdomain_codeset(DOMAIN_NAME, encoding_name); */
+}
+
+#else /* ! INTERNATIONAL */
+
+void BLF_lang_init(void)
+{
+ return;
}
+
+void BLF_lang_encoding(char *str)
+{
+ return;
+}
+
+void BLF_lang_set(char *str)
+{
+ return;
+}
+
+#endif /* INTERNATIONAL */
diff --git a/source/blender/blenfont/intern/blf_util.c b/source/blender/blenfont/intern/blf_util.c
index a4ccbedc38b..03e1066caa1 100644
--- a/source/blender/blenfont/intern/blf_util.c
+++ b/source/blender/blenfont/intern/blf_util.c
@@ -30,6 +30,8 @@
#include <stdlib.h>
#include <string.h>
+#include "BIF_gl.h"
+
unsigned int blf_next_p2(unsigned int x)
{
@@ -74,34 +76,30 @@ int blf_utf8_next(unsigned char *buf, int *iindex)
*
* Returns 0 to indicate an error (e.g. invalid UTF8)
*/
- int index= *iindex, r;
- unsigned char d= buf[index++], d2, d3, d4;
+ int index= *iindex, len, r;
+ unsigned char d, d2, d3, d4;
+ d= buf[index++];
if (!d)
return(0);
- if (d < 0x80) {
- *iindex= index;
- return(d);
- }
+ while (buf[index] && ((buf[index] & 0xc0) == 0x80))
+ index++;
- if ((d & 0xe0) == 0xc0) {
+ len= index - *iindex;
+ if (len == 1)
+ r= d;
+ else if (len == 2) {
/* 2 byte */
- d2= buf[index++];
- if ((d2 & 0xc0) != 0x80)
- return(0);
+ d2= buf[*iindex + 1];
r= d & 0x1f; /* copy lower 5 */
r <<= 6;
r |= (d2 & 0x3f); /* copy lower 6 */
}
- else if ((d & 0xf0) == 0xe0) {
+ else if (len == 3) {
/* 3 byte */
- d2= buf[index++];
- d3= buf[index++];
-
- if ((d2 & 0xc0) != 0x80 || (d3 & 0xc0) != 0x80)
- return(0);
-
+ d2= buf[*iindex + 1];
+ d3= buf[*iindex + 2];
r= d & 0x0f; /* copy lower 4 */
r <<= 6;
r |= (d2 & 0x3f);
@@ -110,14 +108,9 @@ int blf_utf8_next(unsigned char *buf, int *iindex)
}
else {
/* 4 byte */
- d2= buf[index++];
- d3= buf[index++];
- d4= buf[index++];
-
- if ((d2 & 0xc0) != 0x80 || (d3 & 0xc0) != 0x80 ||
- (d4 & 0xc0) != 0x80)
- return(0);
-
+ d2= buf[*iindex + 1];
+ d3= buf[*iindex + 2];
+ d4= buf[*iindex + 3];
r= d & 0x0f; /* copy lower 4 */
r <<= 6;
r |= (d2 & 0x3f);
diff --git a/source/blender/blenkernel/BKE_DerivedMesh.h b/source/blender/blenkernel/BKE_DerivedMesh.h
index 8df30b1eaf5..42904014ea8 100644
--- a/source/blender/blenkernel/BKE_DerivedMesh.h
+++ b/source/blender/blenkernel/BKE_DerivedMesh.h
@@ -44,6 +44,7 @@
#include "DNA_customdata_types.h"
#include "BKE_customdata.h"
+#include "BKE_bvhutils.h"
struct MVert;
struct MEdge;
@@ -71,6 +72,7 @@ struct DerivedMesh {
int numVertData, numEdgeData, numFaceData;
int needsFree; /* checked on ->release, is set to 0 for cached results */
int deformedOnly; /* set by modifier stack if only deformed from original */
+ BVHCache bvhCache;
/* Misc. Queries */
diff --git a/source/blender/blenkernel/BKE_action.h b/source/blender/blenkernel/BKE_action.h
index a5a978ae3fa..67eb2ed58bf 100644
--- a/source/blender/blenkernel/BKE_action.h
+++ b/source/blender/blenkernel/BKE_action.h
@@ -64,9 +64,8 @@ void free_action(struct bAction *act);
// XXX is this needed?
void make_local_action(struct bAction *act);
-
+
/* Some kind of bounding box operation on the action */
-// XXX depreceated..
void calc_action_range(const struct bAction *act, float *start, float *end, int incl_hidden);
/* Action Groups API ----------------- */
@@ -135,7 +134,7 @@ void update_pose_constraint_flags(struct bPose *pose);
void framechange_poses_clear_unkeyed(void);
/* Used for the Action Constraint */
-void what_does_obaction(struct Scene *scene, struct Object *ob, struct Object *workob, struct bPose *pose, struct bAction *act, float cframe);
+void what_does_obaction(struct Scene *scene, struct Object *ob, struct Object *workob, struct bPose *pose, struct bAction *act, char groupname[], float cframe);
/* exported for game engine */
void blend_poses(struct bPose *dst, struct bPose *src, float srcweight, short mode);
diff --git a/source/blender/blenkernel/BKE_animsys.h b/source/blender/blenkernel/BKE_animsys.h
index 44c8d827e8c..b45917e6ca1 100644
--- a/source/blender/blenkernel/BKE_animsys.h
+++ b/source/blender/blenkernel/BKE_animsys.h
@@ -12,6 +12,11 @@ struct AnimData;
struct KeyingSet;
struct KS_Path;
+struct PointerRNA;
+struct bAction;
+struct bActionGroup;
+struct AnimMapper;
+
/* ************************************* */
/* AnimData API */
@@ -50,6 +55,9 @@ void BKE_keyingsets_free(struct ListBase *list);
/* ************************************* */
/* Evaluation API */
+/* ------------- Main API -------------------- */
+/* In general, these ones should be called to do all animation evaluation */
+
/* Evaluation loop for evaluating animation data */
void BKE_animsys_evaluate_animdata(struct ID *id, struct AnimData *adt, float ctime, short recalc);
@@ -57,6 +65,20 @@ void BKE_animsys_evaluate_animdata(struct ID *id, struct AnimData *adt, float ct
void BKE_animsys_evaluate_all_animation(struct Main *main, float ctime);
+/* ------------ Specialised API --------------- */
+/* There are a few special tools which require these following functions. They are NOT to be used
+ * for standard animation evaluation UNDER ANY CIRCUMSTANCES!
+ *
+ * i.e. Pose Library (PoseLib) uses some of these for selectively applying poses, but
+ * Particles/Sequencer performing funky time manipulation is not ok.
+ */
+
+/* Evaluate Action (F-Curve Bag) */
+void animsys_evaluate_action(struct PointerRNA *ptr, struct bAction *act, struct AnimMapper *remap, float ctime);
+
+/* Evaluate Action Group */
+void animsys_evaluate_action_group(struct PointerRNA *ptr, struct bAction *act, struct bActionGroup *agrp, struct AnimMapper *remap, float ctime);
+
/* ************************************* */
#endif /* BKE_ANIM_SYS_H*/
diff --git a/source/blender/blenkernel/BKE_blender.h b/source/blender/blenkernel/BKE_blender.h
index 5a374802d36..795c7585b9c 100644
--- a/source/blender/blenkernel/BKE_blender.h
+++ b/source/blender/blenkernel/BKE_blender.h
@@ -55,6 +55,9 @@ int BKE_read_file_from_memfile(struct bContext *C, struct MemFile *memfile, stru
void free_blender(void);
void initglobals(void);
+/* load new userdef from file, exit blender */
+void BKE_userdef_free(void);
+
/* set this callback when a UI is running */
void set_blender_test_break_cb(void (*func)(void) );
int blender_test_break(void);
diff --git a/source/blender/blenkernel/BKE_bmesh.h b/source/blender/blenkernel/BKE_bmesh.h
index b3ce5447e68..957cd8ef9bd 100644
--- a/source/blender/blenkernel/BKE_bmesh.h
+++ b/source/blender/blenkernel/BKE_bmesh.h
@@ -3,7 +3,7 @@
*
* BMesh modeler structure and functions.
*
- * $Id: BKE_bmesh.h,v 1.00 2007/01/17 17:42:01 Briggs Exp $
+ * $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
*
diff --git a/source/blender/blenkernel/BKE_bmeshCustomData.h b/source/blender/blenkernel/BKE_bmeshCustomData.h
index 4f5f2641f54..e910fc13ed4 100644
--- a/source/blender/blenkernel/BKE_bmeshCustomData.h
+++ b/source/blender/blenkernel/BKE_bmeshCustomData.h
@@ -3,7 +3,7 @@
*
* BMesh modeler structure and functions.
*
- * $Id: BKE_bmesh.h,v 1.00 2007/01/17 17:42:01 Briggs Exp $
+ * $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
*
diff --git a/source/blender/blenkernel/BKE_booleanops.h b/source/blender/blenkernel/BKE_booleanops.h
index b51ee2646fc..a32f21af859 100644
--- a/source/blender/blenkernel/BKE_booleanops.h
+++ b/source/blender/blenkernel/BKE_booleanops.h
@@ -43,8 +43,7 @@ int NewBooleanMesh(struct Scene *scene, struct Base *base, struct Base *base_sel
/* Performs a boolean between two mesh objects, it is assumed that both objects
are in fact mesh object. On success returns a DerivedMesh. On failure
returns NULL and reports an error. */
-struct DerivedMesh *NewBooleanDerivedMesh(struct Object *ob,
- struct Object *ob_select,
- int op);
+struct DerivedMesh *NewBooleanDerivedMesh(struct DerivedMesh *dm, struct Object *ob, struct DerivedMesh *dm_select, struct Object *ob_select,
+ int int_op_type);
#endif
diff --git a/source/blender/blenkernel/BKE_bvhutils.h b/source/blender/blenkernel/BKE_bvhutils.h
index dd9ea61f24b..66c8d99959a 100644
--- a/source/blender/blenkernel/BKE_bvhutils.h
+++ b/source/blender/blenkernel/BKE_bvhutils.h
@@ -31,6 +31,7 @@
#define BKE_BVHUTILS_H
#include "BLI_kdopbvh.h"
+#include "BLI_linklist.h"
/*
* This header encapsulates necessary code to buld a BVH
@@ -52,7 +53,7 @@ typedef struct BVHTreeFromMesh
BVHTree_RayCastCallback raycast_callback;
/* Mesh represented on this BVHTree */
- struct DerivedMesh *mesh;
+ struct DerivedMesh *mesh;
/* Vertex array, so that callbacks have instante access to data */
struct MVert *vert;
@@ -61,6 +62,9 @@ typedef struct BVHTreeFromMesh
/* radius for raycast */
float sphere_radius;
+ /* Private data */
+ int cached;
+
} BVHTreeFromMesh;
/*
@@ -74,7 +78,7 @@ typedef struct BVHTreeFromMesh
*
* free_bvhtree_from_mesh should be called when the tree is no longer needed.
*/
-void bvhtree_from_mesh_verts(struct BVHTreeFromMesh *data, struct DerivedMesh *mesh, float epsilon, int tree_type, int axis);
+BVHTree* bvhtree_from_mesh_verts(struct BVHTreeFromMesh *data, struct DerivedMesh *mesh, float epsilon, int tree_type, int axis);
/*
* Builds a bvh tree where nodes are the faces of the given mesh.
@@ -84,15 +88,50 @@ void bvhtree_from_mesh_verts(struct BVHTreeFromMesh *data, struct DerivedMesh *m
* so that the coordinates and rays are first translated on the mesh local coordinates.
* Reason for this is that later bvh_from_mesh_* might use a cache system and so it becames possible to reuse
* a BVHTree.
+ *
+ * The returned value is the same as in data->tree, its only returned to make it easier to test
+ * the success
*
* free_bvhtree_from_mesh should be called when the tree is no longer needed.
*/
-void bvhtree_from_mesh_faces(struct BVHTreeFromMesh *data, struct DerivedMesh *mesh, float epsilon, int tree_type, int axis);
+BVHTree* bvhtree_from_mesh_faces(struct BVHTreeFromMesh *data, struct DerivedMesh *mesh, float epsilon, int tree_type, int axis);
/*
* Frees data allocated by a call to bvhtree_from_mesh_*.
*/
void free_bvhtree_from_mesh(struct BVHTreeFromMesh *data);
+
+/*
+ * BVHCache
+ */
+
+//Using local coordinates
+#define BVHTREE_FROM_FACES 0
+#define BVHTREE_FROM_VERTICES 1
+
+typedef LinkNode* BVHCache;
+
+
+/*
+ * Queries a bvhcache for the chache bvhtree of the request type
+ */
+BVHTree *bvhcache_find(BVHCache *cache, int type);
+
+/*
+ * Inserts a BVHTree of the given type under the cache
+ * After that the caller no longer needs to worry when to free the BVHTree
+ * as that will be done when the cache is freed.
+ *
+ * A call to this assumes that there was no previous cached tree of the given type
+ */
+void bvhcache_insert(BVHCache *cache, BVHTree *tree, int type);
+
+/*
+ * inits and frees a bvhcache
+ */
+void bvhcache_init(BVHCache *cache);
+void bvhcache_free(BVHCache *cache);
+
#endif
diff --git a/source/blender/blenkernel/BKE_cloth.h b/source/blender/blenkernel/BKE_cloth.h
index 791cf40f8a0..e09be838f06 100644
--- a/source/blender/blenkernel/BKE_cloth.h
+++ b/source/blender/blenkernel/BKE_cloth.h
@@ -1,7 +1,7 @@
/**
* BKE_cloth.h
*
- * $Id: BKE_cloth.h,v 1.1 2007/08/01 02:07:27 daniel Exp $
+ * $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
*
diff --git a/source/blender/blenkernel/BKE_collision.h b/source/blender/blenkernel/BKE_collision.h
index 2518c1d6939..e4eed084a3d 100644
--- a/source/blender/blenkernel/BKE_collision.h
+++ b/source/blender/blenkernel/BKE_collision.h
@@ -1,7 +1,7 @@
/**
* BKE_cloth.h
*
- * $Id: BKE_cloth.h,v 1.1 2007/08/01 02:07:27 daniel Exp $
+ * $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
*
diff --git a/source/blender/blenkernel/BKE_colortools.h b/source/blender/blenkernel/BKE_colortools.h
index 555b467b1d6..6f6c4a834df 100644
--- a/source/blender/blenkernel/BKE_colortools.h
+++ b/source/blender/blenkernel/BKE_colortools.h
@@ -58,6 +58,7 @@ void curvemapping_premultiply(struct CurveMapping *cumap, int restore);
int curvemapping_RGBA_does_something(struct CurveMapping *cumap);
void curvemapping_initialize(struct CurveMapping *cumap);
void curvemapping_table_RGBA(struct CurveMapping *cumap, float **array, int *size);
+void colorcorrection_do_ibuf(struct ImBuf *ibuf, const char *profile);
#endif
diff --git a/source/blender/blenkernel/BKE_constraint.h b/source/blender/blenkernel/BKE_constraint.h
index 0d8c81a5a75..6e69906b71d 100644
--- a/source/blender/blenkernel/BKE_constraint.h
+++ b/source/blender/blenkernel/BKE_constraint.h
@@ -110,11 +110,13 @@ bConstraintTypeInfo *get_constraint_typeinfo(int type);
/* Constraint function prototypes */
void unique_constraint_name(struct bConstraint *con, struct ListBase *list);
-void free_constraints(struct ListBase *conlist);
+void free_constraints(struct ListBase *list);
void copy_constraints(struct ListBase *dst, struct ListBase *src);
void relink_constraints(struct ListBase *list);
void free_constraint_data(struct bConstraint *con);
+struct bConstraint *constraints_get_active(struct ListBase *list);
+
/* Constraints + Proxies function prototypes */
void extract_proxylocal_constraints(struct ListBase *dst, struct ListBase *src);
short proxylocked_constraints_owner(struct Object *ob, struct bPoseChannel *pchan);
diff --git a/source/blender/blenkernel/BKE_curve.h b/source/blender/blenkernel/BKE_curve.h
index b17f4a76198..e5a8df1a932 100644
--- a/source/blender/blenkernel/BKE_curve.h
+++ b/source/blender/blenkernel/BKE_curve.h
@@ -47,6 +47,10 @@ struct BevList;
#define SEGMENTSU(nu) ( ((nu)->flagu & CU_CYCLIC) ? (nu)->pntsu : (nu)->pntsu-1 )
#define SEGMENTSV(nu) ( ((nu)->flagv & CU_CYCLIC) ? (nu)->pntsv : (nu)->pntsv-1 )
+#define CU_DO_TILT(cu, nu) (((nu->type & CU_2D) && (cu->flag & CU_3D)==0) ? 0 : 1)
+#define CU_DO_RADIUS(cu, nu) ((CU_DO_TILT(cu, nu) || cu->bevobj || cu->ext1!=0.0 || cu->ext2!=0.0) ? 1:0)
+
+
void unlink_curve( struct Curve *cu);
void free_curve( struct Curve *cu);
void BKE_free_editfont(struct Curve *cu);
@@ -65,7 +69,7 @@ void duplicateNurblist( struct ListBase *lb1, struct ListBase *lb2);
void test2DNurb( struct Nurb *nu);
void minmaxNurb( struct Nurb *nu, float *min, float *max);
-void makeknots( struct Nurb *nu, short uv, short type);
+void makeknots( struct Nurb *nu, short uv);
void makeNurbfaces(struct Nurb *nu, float *coord_array, int rowstride);
void makeNurbcurve(struct Nurb *nu, float *coord_array, float *tilt_array, float *radius_array, int resolu);
diff --git a/source/blender/blenkernel/BKE_fcurve.h b/source/blender/blenkernel/BKE_fcurve.h
index 9503c569e8b..9b8a2990fe5 100644
--- a/source/blender/blenkernel/BKE_fcurve.h
+++ b/source/blender/blenkernel/BKE_fcurve.h
@@ -6,9 +6,12 @@
#define BKE_FCURVE_H
//struct ListBase;
+
struct FCurve;
struct FModifier;
struct ChannelDriver;
+struct DriverTarget;
+
struct BezTriple;
/* ************** Keyframe Tools ***************** */
@@ -27,6 +30,11 @@ void bezt_add_to_cfra_elem(ListBase *lb, struct BezTriple *bezt);
void fcurve_free_driver(struct FCurve *fcu);
struct ChannelDriver *fcurve_copy_driver(struct ChannelDriver *driver);
+void driver_free_target(struct ChannelDriver *driver, struct DriverTarget *dtar);
+struct DriverTarget *driver_add_new_target(struct ChannelDriver *driver);
+
+float driver_get_target_value(struct ChannelDriver *driver, struct DriverTarget *dtar);
+
/* ************** F-Curve Modifiers *************** */
/* F-Curve Modifier Type-Info (fmi):
@@ -60,6 +68,8 @@ typedef struct FModifierTypeInfo {
void (*verify_data)(struct FModifier *fcm);
/* evaluation */
+ /* evaluate time that the modifier requires the F-Curve to be evaluated at */
+ float (*evaluate_modifier_time)(struct FCurve *fcu, struct FModifier *fcm, float cvalue, float evaltime);
/* evaluate the modifier for the given time and 'accumulated' value */
void (*evaluate_modifier)(struct FCurve *fcu, struct FModifier *fcm, float *cvalue, float evaltime);
} FModifierTypeInfo;
@@ -116,6 +126,9 @@ void copy_fcurves(ListBase *dst, ListBase *src);
/* find matching F-Curve in the given list of F-Curves */
struct FCurve *list_find_fcurve(ListBase *list, const char rna_path[], const int array_index);
+/* test if there is a keyframe at cfra */
+short on_keyframe_fcurve(struct FCurve *fcu, float cfra);
+
/* get the time extents for F-Curve */
void calc_fcurve_range(struct FCurve *fcu, float *min, float *max);
diff --git a/source/blender/blenkernel/BKE_global.h b/source/blender/blenkernel/BKE_global.h
index ac161caeb2e..4b7ddf43647 100644
--- a/source/blender/blenkernel/BKE_global.h
+++ b/source/blender/blenkernel/BKE_global.h
@@ -45,7 +45,6 @@ extern "C" {
struct Main;
struct Object;
struct bSoundListener;
-struct BMF_Font;
struct BME_Glob;
typedef struct Global {
@@ -53,9 +52,6 @@ typedef struct Global {
/* active pointers */
struct Main *main;
- /* fonts, allocated global data */
- struct BMF_Font *font, *fonts, *fontss;
-
/* strings: lastsaved */
char ima[256], sce[256], lib[256];
diff --git a/source/blender/blenkernel/BKE_gpencil.h b/source/blender/blenkernel/BKE_gpencil.h
new file mode 100644
index 00000000000..581285be21c
--- /dev/null
+++ b/source/blender/blenkernel/BKE_gpencil.h
@@ -0,0 +1,63 @@
+/**
+ * $Id: BDR_gpencil.h 19541 2009-04-05 06:54:47Z aligorith $
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2008, Blender Foundation
+ * This is a new part of Blender
+ *
+ * Contributor(s): Joshua Leung
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifndef BKE_GPENCIL_H
+#define BKE_GPENCIL_H
+
+struct ListBase;
+struct bGPdata;
+struct bGPDlayer;
+struct bGPDframe;
+
+/* ------------ Grease-Pencil API ------------------ */
+
+void free_gpencil_strokes(struct bGPDframe *gpf);
+void free_gpencil_frames(struct bGPDlayer *gpl);
+void free_gpencil_layers(struct ListBase *list);
+void free_gpencil_data(struct bGPdata *gpd);
+
+struct bGPDframe *gpencil_frame_addnew(struct bGPDlayer *gpl, int cframe);
+struct bGPDlayer *gpencil_layer_addnew(struct bGPdata *gpd);
+struct bGPdata *gpencil_data_addnew(char name[]);
+
+struct bGPDframe *gpencil_frame_duplicate(struct bGPDframe *src);
+struct bGPDlayer *gpencil_layer_duplicate(struct bGPDlayer *src);
+struct bGPdata *gpencil_data_duplicate(struct bGPdata *gpd);
+
+//struct bGPdata *gpencil_data_getactive(struct ScrArea *sa);
+//short gpencil_data_setactive(struct ScrArea *sa, struct bGPdata *gpd);
+//struct ScrArea *gpencil_data_findowner(struct bGPdata *gpd);
+
+void gpencil_frame_delete_laststroke(struct bGPDlayer *gpl, struct bGPDframe *gpf);
+
+struct bGPDframe *gpencil_layer_getframe(struct bGPDlayer *gpl, int cframe, short addnew);
+void gpencil_layer_delframe(struct bGPDlayer *gpl, struct bGPDframe *gpf);
+struct bGPDlayer *gpencil_layer_getactive(struct bGPdata *gpd);
+void gpencil_layer_setactive(struct bGPdata *gpd, struct bGPDlayer *active);
+void gpencil_layer_delactive(struct bGPdata *gpd);
+
+#endif /* BKE_GPENCIL_H */
diff --git a/source/blender/blenkernel/BKE_library.h b/source/blender/blenkernel/BKE_library.h
index 212e9f08c35..e598394cc60 100644
--- a/source/blender/blenkernel/BKE_library.h
+++ b/source/blender/blenkernel/BKE_library.h
@@ -61,6 +61,7 @@ void free_main(struct Main *mainvar);
void splitIDname(char *name, char *left, int *nr);
void rename_id(struct ID *id, char *name);
void test_idbutton(char *name);
+void text_idbutton(struct ID *id, char *text);
void all_local(struct Library *lib, int untagged_only);
struct ID *find_id(char *type, char *name);
void clear_id_newpoins(void);
diff --git a/source/blender/blenkernel/BKE_main.h b/source/blender/blenkernel/BKE_main.h
index 30cf800a3d8..6881bdfdb2c 100644
--- a/source/blender/blenkernel/BKE_main.h
+++ b/source/blender/blenkernel/BKE_main.h
@@ -77,6 +77,7 @@ typedef struct Main {
ListBase brush;
ListBase particle;
ListBase wm;
+ ListBase gpencil;
} Main;
diff --git a/source/blender/blenkernel/BKE_mesh.h b/source/blender/blenkernel/BKE_mesh.h
index b2f533649e3..e168e616944 100644
--- a/source/blender/blenkernel/BKE_mesh.h
+++ b/source/blender/blenkernel/BKE_mesh.h
@@ -36,6 +36,7 @@
struct BoundBox;
struct DispList;
struct ListBase;
+struct EditMesh;
struct MDeformVert;
struct Mesh;
struct MFace;
@@ -51,6 +52,9 @@ struct CustomData;
extern "C" {
#endif
+struct EditMesh *BKE_mesh_get_editmesh(struct Mesh *me);
+void BKE_mesh_end_editmesh(struct Mesh *me, struct EditMesh *em);
+
void unlink_mesh(struct Mesh *me);
void free_mesh(struct Mesh *me);
struct Mesh *add_mesh(char *name);
diff --git a/source/blender/blenkernel/BKE_particle.h b/source/blender/blenkernel/BKE_particle.h
index 8bf6d91e325..db4d948216e 100644
--- a/source/blender/blenkernel/BKE_particle.h
+++ b/source/blender/blenkernel/BKE_particle.h
@@ -1,7 +1,7 @@
/* BKE_particle.h
*
*
- * $Id: BKE_particle.h $
+ * $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
*
@@ -180,7 +180,7 @@ typedef struct ParticleThreadContext {
/* path caching */
int editupdate, between, steps;
- int totchild, totparent;
+ int totchild, totparent, parent_pass;
float cfra;
@@ -195,6 +195,19 @@ typedef struct ParticleThread {
int num, tot;
} ParticleThread;
+typedef struct ParticleBillboardData
+{
+ struct Object *ob;
+ float vec[3], vel[3];
+ float offset[2];
+ float size, tilt, random, time;
+ int uv[3];
+ int lock, num;
+ int totnum;
+ short align, uv_split, anim, split_offset;
+}
+ParticleBillboardData;
+
/* ----------- functions needed outside particlesystem ---------------- */
/* particle.c */
int count_particles(struct ParticleSystem *psys);
@@ -268,6 +281,8 @@ void psys_threads_free(ParticleThread *threads);
void psys_thread_distribute_particle(ParticleThread *thread, struct ParticleData *pa, struct ChildParticle *cpa, int p);
void psys_thread_create_path(ParticleThread *thread, struct ChildParticle *cpa, ParticleCacheKey *keys, int i);
+void psys_make_billboard(ParticleBillboardData *bb, float xvec[3], float yvec[3], float zvec[3], float center[3]);
+
/* particle_system.c */
int psys_count_keyed_targets(struct Object *ob, struct ParticleSystem *psys);
void psys_get_reactor_target(struct Object *ob, struct ParticleSystem *psys, struct Object **target_ob, struct ParticleSystem **target_psys);
diff --git a/source/blender/blenkernel/BKE_scene.h b/source/blender/blenkernel/BKE_scene.h
index 734687adafb..70eba5006d6 100644
--- a/source/blender/blenkernel/BKE_scene.h
+++ b/source/blender/blenkernel/BKE_scene.h
@@ -38,6 +38,7 @@ struct Base;
struct AviCodecData;
struct QuicktimeCodecData;
struct RenderData;
+struct Text;
/* note; doesn't work when scene is empty */
#define SETLOOPER(s, b) sce= s, b= (Base*)sce->base.first; b; b= (Base*)(b->next?b->next:sce->set?(sce=sce->set)->base.first:NULL)
@@ -73,5 +74,7 @@ int get_render_child_particle_number(struct RenderData *r, int num);
int get_render_shadow_samples(struct RenderData *r, int samples);
float get_render_aosss_error(struct RenderData *r, float error);
+void free_dome_warp_text(struct Text *txt);
+
#endif
diff --git a/source/blender/blenkernel/BKE_screen.h b/source/blender/blenkernel/BKE_screen.h
index a25a7cff51d..9b5d99f6ae6 100644
--- a/source/blender/blenkernel/BKE_screen.h
+++ b/source/blender/blenkernel/BKE_screen.h
@@ -37,6 +37,8 @@ struct bContextDataResult;
struct bScreen;
struct ListBase;
struct Panel;
+struct Header;
+struct Menu;
struct ScrArea;
struct SpaceType;
struct wmNotifier;
@@ -44,6 +46,10 @@ struct wmWindow;
struct wmWindowManager;
struct uiLayout;
struct uiMenuItem;
+struct StructRNA;
+struct PointerRNA;
+struct FunctionRNA;
+struct ParameterList;
/* spacetype has everything stored to get an editor working, it gets initialized via
ED_spacetypes_init() in editors/area/spacetypes.c */
@@ -131,6 +137,9 @@ typedef struct ARegionType {
/* header type definitions */
ListBase headertypes;
+ /* menu type definitions */
+ ListBase menutypes;
+
/* hardcoded constraints, smaller than these values region is not visible */
int minsizex, minsizey;
/* default keymaps to add */
@@ -142,17 +151,24 @@ typedef struct ARegionType {
typedef struct PanelType {
struct PanelType *next, *prev;
- char *idname; /* unique name */
- char *name; /* for panel header */
- char *context; /* for buttons window */
+ char idname[BKE_ST_MAXNAME]; /* unique name */
+ char label[BKE_ST_MAXNAME]; /* for panel header */
+ char context[BKE_ST_MAXNAME]; /* for buttons window */
+ int space_type;
+ int region_type;
/* verify if the panel should draw or not */
- int (*poll)(const struct bContext *);
+ int (*poll)(const struct bContext *, struct PanelType *);
+ /* draw header (optional) */
+ void (*draw_header)(const struct bContext *, struct Panel *);
/* draw entirely, view changes should be handled here */
void (*draw)(const struct bContext *, struct Panel *);
/* python integration */
- void *py_data;
+ void *py_data;
+ struct StructRNA *py_srna;
+ int (*py_call)(struct PointerRNA *, struct FunctionRNA *, struct ParameterList *);
+ void (*py_free)(void *py_data);
} PanelType;
/* header types */
@@ -160,16 +176,40 @@ typedef struct PanelType {
typedef struct HeaderType {
struct HeaderType *next, *prev;
- char *idname; /* unique name */
- char *name; /* for UI */
+ char idname[BKE_ST_MAXNAME]; /* unique name */
+ int space_type;
/* draw entirely, view changes should be handled here */
- void (*draw)(const struct bContext *, struct uiLayout *);
+ void (*draw)(const struct bContext *, struct Header *);
/* python integration */
- void *py_data;
+ void *py_data;
+ struct StructRNA *py_srna;
+ int (*py_call)(struct PointerRNA *, struct FunctionRNA *, struct ParameterList *);
+ void (*py_free)(void *py_data);
} HeaderType;
+/* menu types */
+
+typedef struct MenuType {
+ struct MenuType *next, *prev;
+
+ char idname[BKE_ST_MAXNAME]; /* unique name */
+ char label[BKE_ST_MAXNAME]; /* for button text */
+ int space_type;
+
+ /* verify if the menu should draw or not */
+ int (*poll)(const struct bContext *, struct MenuType *);
+ /* draw entirely, view changes should be handled here */
+ void (*draw)(const struct bContext *, struct Menu *);
+
+ /* python integration */
+ void *py_data;
+ struct StructRNA *py_srna;
+ int (*py_call)(struct PointerRNA *, struct FunctionRNA *, struct ParameterList *);
+ void (*py_free)(void *py_data);
+} MenuType;
+
/* spacetypes */
struct SpaceType *BKE_spacetype_from_id(int spaceid);
struct ARegionType *BKE_regiontype_from_id(struct SpaceType *st, int regionid);
diff --git a/source/blender/blenkernel/BKE_shrinkwrap.h b/source/blender/blenkernel/BKE_shrinkwrap.h
index 103b78f0d6e..eb0e3c4ef00 100644
--- a/source/blender/blenkernel/BKE_shrinkwrap.h
+++ b/source/blender/blenkernel/BKE_shrinkwrap.h
@@ -35,6 +35,8 @@
#include "BKE_customdata.h"
struct DerivedMesh;
struct Object;
+struct DerivedMesh *object_get_derived_final(struct Scene *scene, struct Object *ob, CustomDataMask dataMask);
+
/* SpaceTransform stuff */
/*
@@ -59,7 +61,7 @@ struct Object;
* space_transform_invert_normal(&data, &no);
*
*/
-
+struct Object;
typedef struct SpaceTransform
{
@@ -92,6 +94,8 @@ void space_transform_invert(const struct SpaceTransform *data, float *co);
struct Object;
struct Scene;
struct DerivedMesh;
+struct MVert;
+struct MDeformVert;
struct ShrinkwrapModifierData;
struct MDeformVert;
struct BVHTree;
@@ -102,8 +106,8 @@ typedef struct ShrinkwrapCalcData
ShrinkwrapModifierData *smd; //shrinkwrap modifier data
struct Object *ob; //object we are applying shrinkwrap to
- struct DerivedMesh *original; //mesh before shrinkwrap
+ MVert *vert; //Array of verts being projected (to fetch normals or other data)
float (*vertexCos)[3]; //vertexs being shrinkwraped
int numVerts;
@@ -120,6 +124,17 @@ typedef struct ShrinkwrapCalcData
void shrinkwrapModifier_deform(struct ShrinkwrapModifierData *smd, struct Scene *scene, struct Object *ob, struct DerivedMesh *dm, float (*vertexCos)[3], int numVerts);
/*
+ * This function casts a ray in the given BVHTree.. but it takes into consideration the space_transform, that is:
+ *
+ * if transf was configured with "space_transform_setup( &transf, ob1, ob2 )"
+ * then the input (vert, dir, BVHTreeRayHit) must be defined in ob1 coordinates space
+ * and the BVHTree must be built in ob2 coordinate space.
+ *
+ * Thus it provides an easy way to cast the same ray across several trees (where each tree was built on its own coords space)
+ */
+int normal_projection_project_vertex(char options, const float *vert, const float *dir, const SpaceTransform *transf, BVHTree *tree, BVHTreeRayHit *hit, BVHTree_RayCastCallback callback, void *userdata);
+
+/*
* NULL initializers to local data
*/
#define NULL_ShrinkwrapCalcData {NULL, }
diff --git a/source/blender/blenkernel/BKE_suggestions.h b/source/blender/blenkernel/BKE_suggestions.h
index d58b8f58bf5..473e3f547f2 100644
--- a/source/blender/blenkernel/BKE_suggestions.h
+++ b/source/blender/blenkernel/BKE_suggestions.h
@@ -1,5 +1,5 @@
/**
- * $Id: $
+ * $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
*
diff --git a/source/blender/blenkernel/CMakeLists.txt b/source/blender/blenkernel/CMakeLists.txt
index 5a612df2589..ebe0ea74c28 100644
--- a/source/blender/blenkernel/CMakeLists.txt
+++ b/source/blender/blenkernel/CMakeLists.txt
@@ -31,7 +31,7 @@ SET(INC
../render/extern/include ../../../intern/decimation/extern
../imbuf ../avi ../../../intern/elbeem/extern ../../../intern/opennl/extern
../../../intern/iksolver/extern ../blenloader ../quicktime
- ../../../intern/bmfont ../../../extern/bullet2/src
+ ../../../extern/bullet2/src
../nodes ../../../extern/glew/include ../gpu ../makesrna
../../../intern/bsp/extern
${SDL_INC}
@@ -66,10 +66,6 @@ ELSE(WITH_PYTHON)
ADD_DEFINITIONS(-DDISABLE_PYTHON)
ENDIF(WITH_PYTHON)
-IF(WITH_INTERNATIONAL)
- ADD_DEFINITIONS(-DWITH_FREETYPE2)
-ENDIF(WITH_INTERNATIONAL)
-
IF(NOT WITH_ELBEEM)
ADD_DEFINITIONS(-DDISABLE_ELBEEM)
ENDIF(NOT WITH_ELBEEM)
diff --git a/source/blender/blenkernel/SConscript b/source/blender/blenkernel/SConscript
index 3754abb38ec..ae522b029cb 100644
--- a/source/blender/blenkernel/SConscript
+++ b/source/blender/blenkernel/SConscript
@@ -8,7 +8,6 @@ incs += ' ../render/extern/include #/intern/decimation/extern ../makesrna'
incs += ' ../imbuf ../avi #/intern/elbeem/extern ../nodes'
incs += ' #/intern/iksolver/extern ../blenloader'
incs += ' #/extern/bullet2/src'
-incs += ' #/intern/bmfont'
incs += ' #/intern/opennl/extern #/intern/bsp/extern'
incs += ' ../gpu #/extern/glew/include'
incs += ' ../bmesh'
@@ -16,49 +15,51 @@ incs += ' ../bmesh'
incs += ' ' + env['BF_OPENGL_INC']
incs += ' ' + env['BF_ZLIB_INC']
-defs = ''
+defs = []
if not env['WITH_BF_PYTHON']:
- defs += 'DISABLE_PYTHON'
+ defs.append('DISABLE_PYTHON')
else:
incs += ' ../python'
incs += ' ' + env['BF_PYTHON_INC']
+ if env['BF_DEBUG']:
+ defs.append('_DEBUG')
if env['WITH_BF_QUICKTIME']:
- incs += ' ../quicktime'
+ incs += ' ../quicktime'
if env['WITH_BF_SDL']:
incs += ' ' + env['BF_SDL_INC']
else:
- defs += ' DISABLE_SDL'
+ defs.append('DISABLE_SDL')
-if env['WITH_BF_INTERNATIONAL']:
- defs += ' WITH_FREETYPE2'
-
if env['WITH_BF_OPENEXR']:
- defs += ' WITH_OPENEXR'
+ defs.append('WITH_OPENEXR')
if env['WITH_BF_OPENJPEG']:
- defs += ' WITH_OPENJPEG'
+ defs.append('WITH_OPENJPEG')
if env['WITH_BF_DDS']:
- defs += ' WITH_DDS'
+ defs.append('WITH_DDS')
if env['WITH_BF_FFMPEG']:
- defs += ' WITH_FFMPEG'
- incs += ' ' + env['BF_FFMPEG_INC']
+ defs.append('WITH_FFMPEG')
+ incs += ' ' + env['BF_FFMPEG_INC']
if env['WITH_BF_QUICKTIME']:
- defs += ' WITH_QUICKTIME'
- incs += ' ' + env['BF_QUICKTIME_INC']
+ defs.append('WITH_QUICKTIME')
+ incs += ' ' + env['BF_QUICKTIME_INC']
if env['WITH_BF_BULLET']:
- defs += ' WITH_BULLET'
+ defs.append('WITH_BULLET')
if env['BF_NO_ELBEEM']:
- defs += ' DISABLE_ELBEEM'
+ defs.append('DISABLE_ELBEEM')
+if env['WITH_BF_LCMS']:
+ defs.append('WITH_LCMS')
+
if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc'):
incs += ' ' + env['BF_PTHREADS_INC']
-env.BlenderLib ( libname = 'bf_blenkernel', sources = sources, includes = Split(incs), defines = Split(defs), libtype=['core'], priority = [165] )
+env.BlenderLib ( libname = 'bf_blenkernel', sources = sources, includes = Split(incs), defines = defs, libtype=['core'], priority = [165] )
diff --git a/source/blender/blenkernel/intern/BME_Customdata.c b/source/blender/blenkernel/intern/BME_Customdata.c
index 1fc8a4071dc..ea149e03959 100644
--- a/source/blender/blenkernel/intern/BME_Customdata.c
+++ b/source/blender/blenkernel/intern/BME_Customdata.c
@@ -3,7 +3,7 @@
*
* Custom Data functions for Bmesh
*
- * $Id: BKE_bmesh.h,v 1.00 2007/01/17 17:42:01 Briggs Exp $
+ * $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
*
diff --git a/source/blender/blenkernel/intern/BME_conversions.c b/source/blender/blenkernel/intern/BME_conversions.c
index 1e332bcf393..177bb4a136b 100644
--- a/source/blender/blenkernel/intern/BME_conversions.c
+++ b/source/blender/blenkernel/intern/BME_conversions.c
@@ -3,7 +3,7 @@
*
* BMesh mesh level functions.
*
- * $Id: BME_eulers.c,v 1.00 2007/01/17 17:42:01 Briggs Exp $
+ * $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
*
diff --git a/source/blender/blenkernel/intern/BME_eulers.c b/source/blender/blenkernel/intern/BME_eulers.c
index 801e0b8bdec..d0b4ab6a9ca 100644
--- a/source/blender/blenkernel/intern/BME_eulers.c
+++ b/source/blender/blenkernel/intern/BME_eulers.c
@@ -3,7 +3,7 @@
*
* BMesh Euler construction API.
*
- * $Id: BME_eulers.c,v 1.00 2007/01/17 17:42:01 Briggs Exp $
+ * $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
*
diff --git a/source/blender/blenkernel/intern/BME_mesh.c b/source/blender/blenkernel/intern/BME_mesh.c
index ad46a7c1eb7..f635cfcfcd2 100644
--- a/source/blender/blenkernel/intern/BME_mesh.c
+++ b/source/blender/blenkernel/intern/BME_mesh.c
@@ -3,7 +3,7 @@
*
* BMesh mesh level functions.
*
- * $Id: BME_eulers.c,v 1.00 2007/01/17 17:42:01 Briggs Exp $
+ * $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
*
diff --git a/source/blender/blenkernel/intern/BME_structure.c b/source/blender/blenkernel/intern/BME_structure.c
index ca27f5efd10..22ee48e4f7e 100644
--- a/source/blender/blenkernel/intern/BME_structure.c
+++ b/source/blender/blenkernel/intern/BME_structure.c
@@ -3,7 +3,7 @@
*
* Low level routines for manipulating the BMesh structure.
*
- * $Id: BME_structure.c,v 1.00 2007/01/17 17:42:01 Briggs Exp $
+ * $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
*
diff --git a/source/blender/blenkernel/intern/BME_tools.c b/source/blender/blenkernel/intern/BME_tools.c
index 3ddd790e90b..a41307de183 100644
--- a/source/blender/blenkernel/intern/BME_tools.c
+++ b/source/blender/blenkernel/intern/BME_tools.c
@@ -3,7 +3,7 @@
*
* Functions for changing the topology of a mesh.
*
- * $Id: BME_eulers.c,v 1.00 2007/01/17 17:42:01 Briggs Exp $
+ * $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
*
diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c
index f5eb628ffe6..2eed104f43b 100644
--- a/source/blender/blenkernel/intern/DerivedMesh.c
+++ b/source/blender/blenkernel/intern/DerivedMesh.c
@@ -77,6 +77,7 @@
#include "BKE_utildefines.h"
#include "BKE_particle.h"
#include "BKE_tessmesh.h"
+#include "BKE_bvhutils.h"
#include "BLO_sys_types.h" // for intptr_t support
@@ -178,6 +179,8 @@ void DM_init_funcs(DerivedMesh *dm)
dm->getVertDataArray = DM_get_vert_data_layer;
dm->getEdgeDataArray = DM_get_edge_data_layer;
dm->getFaceDataArray = DM_get_face_data_layer;
+
+ bvhcache_init(&dm->bvhCache);
}
void DM_init(DerivedMesh *dm,
@@ -214,6 +217,8 @@ void DM_from_template(DerivedMesh *dm, DerivedMesh *source,
int DM_release(DerivedMesh *dm)
{
if (dm->needsFree) {
+ bvhcache_free(&dm->bvhCache);
+
CustomData_free(&dm->vertData, dm->numVertData);
CustomData_free(&dm->edgeData, dm->numEdgeData);
CustomData_free(&dm->faceData, dm->numFaceData);
@@ -1434,6 +1439,7 @@ static float *get_editbmesh_orco_verts(BMEditMesh *em)
return orco;
}
+/* orco custom data layer */
static DerivedMesh *create_orco_dm(Object *ob, Mesh *me, BMEditMesh *em)
{
DerivedMesh *dm;
@@ -1485,6 +1491,96 @@ static void add_orco_dm(Object *ob, BMEditMesh *em, DerivedMesh *dm, DerivedMesh
DM_add_vert_layer(dm, CD_ORCO, CD_ASSIGN, orco);
}
+/* weight paint colors */
+
+/* Something of a hack, at the moment deal with weightpaint
+ * by tucking into colors during modifier eval, only in
+ * wpaint mode. Works ok but need to make sure recalc
+ * happens on enter/exit wpaint.
+ */
+
+void weight_to_rgb(float input, float *fr, float *fg, float *fb)
+{
+ float blend;
+
+ blend= ((input/2.0f)+0.5f);
+
+ if (input<=0.25f){ // blue->cyan
+ *fr= 0.0f;
+ *fg= blend*input*4.0f;
+ *fb= blend;
+ }
+ else if (input<=0.50f){ // cyan->green
+ *fr= 0.0f;
+ *fg= blend;
+ *fb= blend*(1.0f-((input-0.25f)*4.0f));
+ }
+ else if (input<=0.75){ // green->yellow
+ *fr= blend * ((input-0.50f)*4.0f);
+ *fg= blend;
+ *fb= 0.0f;
+ }
+ else if (input<=1.0){ // yellow->red
+ *fr= blend;
+ *fg= blend * (1.0f-((input-0.75f)*4.0f));
+ *fb= 0.0f;
+ }
+}
+
+static void calc_weightpaint_vert_color(Object *ob, ColorBand *coba, int vert, unsigned char *col)
+{
+ Mesh *me = ob->data;
+ float colf[4], input = 0.0f;
+ int i;
+
+ if (me->dvert) {
+ for (i=0; i<me->dvert[vert].totweight; i++)
+ if (me->dvert[vert].dw[i].def_nr==ob->actdef-1)
+ input+=me->dvert[vert].dw[i].weight;
+ }
+
+ CLAMP(input, 0.0f, 1.0f);
+
+ if(coba)
+ do_colorband(coba, input, colf);
+ else
+ weight_to_rgb(input, colf, colf+1, colf+2);
+
+ col[3] = (unsigned char)(colf[0] * 255.0f);
+ col[2] = (unsigned char)(colf[1] * 255.0f);
+ col[1] = (unsigned char)(colf[2] * 255.0f);
+ col[0] = 255;
+}
+
+static ColorBand *stored_cb= NULL;
+
+void vDM_ColorBand_store(ColorBand *coba)
+{
+ stored_cb= coba;
+}
+
+static void add_weight_mcol_dm(Object *ob, DerivedMesh *dm)
+{
+ Mesh *me = ob->data;
+ MFace *mf = me->mface;
+ ColorBand *coba= stored_cb; /* warning, not a local var */
+ unsigned char *wtcol;
+ int i;
+
+ wtcol = MEM_callocN (sizeof (unsigned char) * me->totface*4*4, "weightmap");
+
+ memset(wtcol, 0x55, sizeof (unsigned char) * me->totface*4*4);
+ for (i=0; i<me->totface; i++, mf++) {
+ calc_weightpaint_vert_color(ob, coba, mf->v1, &wtcol[(i*4 + 0)*4]);
+ calc_weightpaint_vert_color(ob, coba, mf->v2, &wtcol[(i*4 + 1)*4]);
+ calc_weightpaint_vert_color(ob, coba, mf->v3, &wtcol[(i*4 + 2)*4]);
+ if (mf->v4)
+ calc_weightpaint_vert_color(ob, coba, mf->v4, &wtcol[(i*4 + 3)*4]);
+ }
+
+ CustomData_add_layer(&dm->faceData, CD_WEIGHT_MCOL, CD_ASSIGN, wtcol, dm->numFaceData);
+}
+
static void mesh_calc_modifiers(Scene *scene, Object *ob, float (*inputVertexCos)[3],
DerivedMesh **deform_r, DerivedMesh **final_r,
int useRenderParams, int useDeform,
@@ -1548,6 +1644,7 @@ static void mesh_calc_modifiers(Scene *scene, Object *ob, float (*inputVertexCos
*/
if (deform_r) {
*deform_r = CDDM_from_mesh(me, ob);
+
if(deformedVerts) {
CDDM_apply_vert_coords(*deform_r, deformedVerts);
CDDM_calc_normals(*deform_r);
@@ -1633,6 +1730,9 @@ static void mesh_calc_modifiers(Scene *scene, Object *ob, float (*inputVertexCos
CDDM_apply_vert_coords(dm, deformedVerts);
CDDM_calc_normals(dm);
}
+
+ if(dataMask & CD_MASK_WEIGHT_MCOL)
+ add_weight_mcol_dm(ob, dm);
}
/* create an orco derivedmesh in parallel */
@@ -1696,14 +1796,21 @@ static void mesh_calc_modifiers(Scene *scene, Object *ob, float (*inputVertexCos
CDDM_apply_vert_coords(finaldm, deformedVerts);
CDDM_calc_normals(finaldm);
+
+ if(dataMask & CD_MASK_WEIGHT_MCOL)
+ add_weight_mcol_dm(ob, finaldm);
} else if(dm) {
finaldm = dm;
} else {
finaldm = CDDM_from_mesh(me, ob);
+
if(deformedVerts) {
CDDM_apply_vert_coords(finaldm, deformedVerts);
CDDM_calc_normals(finaldm);
}
+
+ if(dataMask & CD_MASK_WEIGHT_MCOL)
+ add_weight_mcol_dm(ob, finaldm);
}
/* add an orco layer if needed */
@@ -1936,96 +2043,6 @@ static void editbmesh_calc_modifiers(Scene *scene, Object *ob, BMEditMesh *em, D
MEM_freeN(deformedVerts);
}
-/***/
-
-
- /* Something of a hack, at the moment deal with weightpaint
- * by tucking into colors during modifier eval, only in
- * wpaint mode. Works ok but need to make sure recalc
- * happens on enter/exit wpaint.
- */
-
-void weight_to_rgb(float input, float *fr, float *fg, float *fb)
-{
- float blend;
-
- blend= ((input/2.0f)+0.5f);
-
- if (input<=0.25f){ // blue->cyan
- *fr= 0.0f;
- *fg= blend*input*4.0f;
- *fb= blend;
- }
- else if (input<=0.50f){ // cyan->green
- *fr= 0.0f;
- *fg= blend;
- *fb= blend*(1.0f-((input-0.25f)*4.0f));
- }
- else if (input<=0.75){ // green->yellow
- *fr= blend * ((input-0.50f)*4.0f);
- *fg= blend;
- *fb= 0.0f;
- }
- else if (input<=1.0){ // yellow->red
- *fr= blend;
- *fg= blend * (1.0f-((input-0.75f)*4.0f));
- *fb= 0.0f;
- }
-}
-static void calc_weightpaint_vert_color(Object *ob, ColorBand *coba, int vert, unsigned char *col)
-{
- Mesh *me = ob->data;
- float colf[4], input = 0.0f;
- int i;
-
- if (me->dvert) {
- for (i=0; i<me->dvert[vert].totweight; i++)
- if (me->dvert[vert].dw[i].def_nr==ob->actdef-1)
- input+=me->dvert[vert].dw[i].weight;
- }
-
- CLAMP(input, 0.0f, 1.0f);
-
- if(coba)
- do_colorband(coba, input, colf);
- else
- weight_to_rgb(input, colf, colf+1, colf+2);
-
- col[3] = (unsigned char)(colf[0] * 255.0f);
- col[2] = (unsigned char)(colf[1] * 255.0f);
- col[1] = (unsigned char)(colf[2] * 255.0f);
- col[0] = 255;
-}
-
-static ColorBand *stored_cb= NULL;
-
-void vDM_ColorBand_store(ColorBand *coba)
-{
- stored_cb= coba;
-}
-
-static unsigned char *calc_weightpaint_colors(Object *ob)
-{
- Mesh *me = ob->data;
- MFace *mf = me->mface;
- ColorBand *coba= stored_cb; /* warning, not a local var */
- unsigned char *wtcol;
- int i;
-
- wtcol = MEM_callocN (sizeof (unsigned char) * me->totface*4*4, "weightmap");
-
- memset(wtcol, 0x55, sizeof (unsigned char) * me->totface*4*4);
- for (i=0; i<me->totface; i++, mf++) {
- calc_weightpaint_vert_color(ob, coba, mf->v1, &wtcol[(i*4 + 0)*4]);
- calc_weightpaint_vert_color(ob, coba, mf->v2, &wtcol[(i*4 + 1)*4]);
- calc_weightpaint_vert_color(ob, coba, mf->v3, &wtcol[(i*4 + 2)*4]);
- if (mf->v4)
- calc_weightpaint_vert_color(ob, coba, mf->v4, &wtcol[(i*4 + 3)*4]);
- }
-
- return wtcol;
-}
-
static void clear_mesh_caches(Object *ob)
{
Mesh *me= ob->data;
@@ -2056,42 +2073,16 @@ static void clear_mesh_caches(Object *ob)
static void mesh_build_data(Scene *scene, Object *ob, CustomDataMask dataMask)
{
- Mesh *me = ob->data;
- float min[3], max[3];
- //int needMapping= 0;
-
Object *obact = scene->basact?scene->basact->object:NULL;
int editing = (FACESEL_PAINT_TEST)|(G.f & G_PARTICLEEDIT);
int needMapping = editing && (ob==obact);
+ float min[3], max[3];
clear_mesh_caches(ob);
- if( (G.f & G_WEIGHTPAINT) && ob==obact ) {
-// if(dataMask & CD_MASK_WEIGHTPAINT) {
- MCol *wpcol = (MCol*)calc_weightpaint_colors(ob);
- int layernum = CustomData_number_of_layers(&me->fdata, CD_MCOL);
- int prevactive = CustomData_get_active_layer(&me->fdata, CD_MCOL);
- int prevrender = CustomData_get_render_layer(&me->fdata, CD_MCOL);
-
- /* ugly hack here, we temporarily add a new active mcol layer with
- weightpaint colors in it, that is then duplicated in CDDM_from_mesh */
- CustomData_add_layer(&me->fdata, CD_MCOL, CD_ASSIGN, wpcol, me->totface);
- CustomData_set_layer_active(&me->fdata, CD_MCOL, layernum);
- CustomData_set_layer_render(&me->fdata, CD_MCOL, layernum);
-
- mesh_calc_modifiers(scene, ob, NULL, &ob->derivedDeform,
- &ob->derivedFinal, 0, 1,
- needMapping, dataMask, -1);
-
- CustomData_free_layer_active(&me->fdata, CD_MCOL, me->totface);
- CustomData_set_layer_active(&me->fdata, CD_MCOL, prevactive);
- CustomData_set_layer_render(&me->fdata, CD_MCOL, prevrender);
- }
- else {
- mesh_calc_modifiers(scene, ob, NULL, &ob->derivedDeform,
- &ob->derivedFinal, G.rendering, 1,
- needMapping, dataMask, -1);
- }
+ mesh_calc_modifiers(scene, ob, NULL, &ob->derivedDeform,
+ &ob->derivedFinal, 0, 1,
+ needMapping, dataMask, -1);
INIT_MINMAX(min, max);
diff --git a/source/blender/blenkernel/intern/Makefile b/source/blender/blenkernel/intern/Makefile
index 6554c93662d..1528ec1c86e 100644
--- a/source/blender/blenkernel/intern/Makefile
+++ b/source/blender/blenkernel/intern/Makefile
@@ -59,8 +59,6 @@ CPPFLAGS += -I../../editors/include
# to include the render stuff:
CPPFLAGS += -I../../render/extern/include
-# for image stamping
-CPPFLAGS += -I$(NAN_BMFONT)/include
# for sound
#CPPFLAGS += -I../../../kernel/gen_system
CPPFLAGS += $(NAN_SDLCFLAGS)
@@ -85,12 +83,8 @@ CPPFLAGS += -I..
# path to bullet2, for cloth
CPPFLAGS += -I../../../../extern/bullet2/src
-
-ifeq ($(WITH_FREETYPE2), true)
- CPPFLAGS += -DWITH_FREETYPE2
- CPPFLAGS += -I$(NAN_FREETYPE)/include
- CPPFLAGS += -I$(NAN_FREETYPE)/include/freetype2
-endif
+CPPFLAGS += -I$(NAN_FREETYPE)/include
+CPPFLAGS += -I$(NAN_FREETYPE)/include/freetype2
ifeq ($(WITH_FFMPEG),true)
CPPFLAGS += -DWITH_FFMPEG
diff --git a/source/blender/blenkernel/intern/action.c b/source/blender/blenkernel/intern/action.c
index 9ed469c9028..d54bc749b71 100644
--- a/source/blender/blenkernel/intern/action.c
+++ b/source/blender/blenkernel/intern/action.c
@@ -65,6 +65,9 @@
#include "BLI_blenlib.h"
#include "BLI_ghash.h"
+#include "RNA_access.h"
+#include "RNA_types.h"
+
//XXX #include "nla.h"
/* *********************** NOTE ON POSE AND ACTION **********************
@@ -169,17 +172,39 @@ void free_action (bAction *act)
bAction *copy_action (bAction *src)
{
bAction *dst = NULL;
- //bActionGroup *dgrp, *sgrp; // XXX not used yet
+ bActionGroup *dgrp, *sgrp;
+ FCurve *dfcu, *sfcu;
if (src == NULL)
return NULL;
dst= copy_libblock(src);
- BLI_duplicatelist(&dst->groups, &src->groups); // XXX not used yet
+ /* duplicate the lists of groups and markers */
+ BLI_duplicatelist(&dst->groups, &src->groups);
BLI_duplicatelist(&dst->markers, &src->markers);
- /* copy f-curves */
- copy_fcurves(&dst->curves, &src->curves);
+ /* copy F-Curves, fixing up the links as we go */
+ dst->curves.first= dst->curves.last= NULL;
+
+ for (sfcu= src->curves.first; sfcu; sfcu= sfcu->next) {
+ /* duplicate F-Curve */
+ dfcu= copy_fcurve(sfcu);
+ BLI_addtail(&dst->curves, dfcu);
+
+ /* fix group links (kindof bad list-in-list search, but this is the most reliable way) */
+ for (dgrp=dst->groups.first, sgrp=src->groups.first; dgrp && sgrp; dgrp=dgrp->next, sgrp=sgrp->next) {
+ if (sfcu->grp == sgrp) {
+ dfcu->grp= dgrp;
+
+ if (dgrp->channels.first == sfcu)
+ dgrp->channels.first= dfcu;
+ if (dgrp->channels.last == sfcu)
+ dgrp->channels.last= dfcu;
+
+ break;
+ }
+ }
+ }
dst->id.flag |= LIB_FAKEUSER; // XXX this is nasty for new users... maybe we don't want this anymore
dst->id.us++;
@@ -740,38 +765,27 @@ float get_action_frame_inv(Object *ob, float cframe)
/* Calculate the extents of given action */
void calc_action_range(const bAction *act, float *start, float *end, int incl_hidden)
{
- // FCurve *fcu;
+ FCurve *fcu;
float min=999999999.0f, max=-999999999.0f;
- int foundvert=0;
+ short foundvert=0;
if (act) {
-#if 0 // XXX old animation system
- for (chan=act->chanbase.first; chan; chan=chan->next) {
- if ((incl_hidden) || (chan->flag & ACHAN_HIDDEN)==0) {
- if (chan->ipo) {
- for (icu=chan->ipo->curve.first; icu; icu=icu->next) {
- if (icu->totvert) {
- min= MIN2(min, icu->bezt[0].vec[1][0]);
- max= MAX2(max, icu->bezt[icu->totvert-1].vec[1][0]);
- foundvert=1;
- }
- }
- }
- for (conchan=chan->constraintChannels.first; conchan; conchan=conchan->next) {
- if (conchan->ipo) {
- for (icu=conchan->ipo->curve.first; icu; icu=icu->next) {
- if (icu->totvert) {
- min= MIN2(min, icu->bezt[0].vec[1][0]);
- max= MAX2(max, icu->bezt[icu->totvert-1].vec[1][0]);
- foundvert=1;
- }
- }
- }
- }
+ for (fcu= act->curves.first; fcu; fcu= fcu->next) {
+ if (fcu->totvert) {
+ float nmin, nmax;
+
+ /* get extents for this curve */
+ calc_fcurve_range(fcu, &nmin, &nmax);
+
+ /* compare to the running tally */
+ min= MIN2(min, nmin);
+ max= MAX2(max, nmax);
+
+ foundvert= 1;
}
}
-#endif // XXX old animation system
}
+
if (foundvert) {
if(min==max) max+= 1.0f;
*start= min;
@@ -847,9 +861,11 @@ void copy_pose_result(bPose *to, bPose *from)
if(pchanto) {
Mat4CpyMat4(pchanto->pose_mat, pchanfrom->pose_mat);
Mat4CpyMat4(pchanto->chan_mat, pchanfrom->chan_mat);
+
/* used for local constraints */
VECCOPY(pchanto->loc, pchanfrom->loc);
QUATCOPY(pchanto->quat, pchanfrom->quat);
+ VECCOPY(pchanto->eul, pchanfrom->eul);
VECCOPY(pchanto->size, pchanfrom->size);
VECCOPY(pchanto->pose_head, pchanfrom->pose_head);
@@ -862,13 +878,12 @@ void copy_pose_result(bPose *to, bPose *from)
/* For the calculation of the effects of an Action at the given frame on an object
* This is currently only used for the Action Constraint
*/
-void what_does_obaction (Scene *scene, Object *ob, Object *workob, bPose *pose, bAction *act, float cframe)
+void what_does_obaction (Scene *scene, Object *ob, Object *workob, bPose *pose, bAction *act, char groupname[], float cframe)
{
- AnimData adt;
+ bActionGroup *agrp= action_groups_find_named(act, groupname);
- /* clear workob and animdata */
+ /* clear workob */
clear_workob(workob);
- memset(&adt, 0, sizeof(AnimData));
/* init workob */
Mat4CpyMat4(workob->obmat, ob->obmat);
@@ -893,14 +908,30 @@ void what_does_obaction (Scene *scene, Object *ob, Object *workob, bPose *pose,
strcpy(workob->parsubstr, ob->parsubstr);
strcpy(workob->id.name, "OB<ConstrWorkOb>"); /* we don't use real object name, otherwise RNA screws with the real thing */
- /* init animdata, and attach to workob */
- workob->adt= &adt;
-
- adt.recalc= ADT_RECALC_ANIM;
- adt.action= act;
-
- /* execute effects of Action on to workob (or it's PoseChannels) */
- BKE_animsys_evaluate_animdata(&workob->id, &adt, cframe, ADT_RECALC_ANIM);
+ /* if we're given a group to use, it's likely to be more efficient (though a bit more dangerous) */
+ if (agrp) {
+ /* specifically evaluate this group only */
+ PointerRNA id_ptr;
+
+ /* get RNA-pointer for the workob's ID */
+ RNA_id_pointer_create(&workob->id, &id_ptr);
+
+ /* execute action for this group only */
+ animsys_evaluate_action_group(&id_ptr, act, agrp, NULL, cframe);
+ }
+ else {
+ AnimData adt;
+
+ /* init animdata, and attach to workob */
+ memset(&adt, 0, sizeof(AnimData));
+ workob->adt= &adt;
+
+ adt.recalc= ADT_RECALC_ANIM;
+ adt.action= act;
+
+ /* execute effects of Action on to workob (or it's PoseChannels) */
+ BKE_animsys_evaluate_animdata(&workob->id, &adt, cframe, ADT_RECALC_ANIM);
+ }
}
/* ********** NLA with non-poses works with ipo channels ********** */
diff --git a/source/blender/blenkernel/intern/anim.c b/source/blender/blenkernel/intern/anim.c
index bd99893bc37..b2cbd82cfc2 100644
--- a/source/blender/blenkernel/intern/anim.c
+++ b/source/blender/blenkernel/intern/anim.c
@@ -227,14 +227,16 @@ int where_on_path(Object *ob, float ctime, float *vec, float *dir) /* returns OK
cu= ob->data;
if(cu->path==NULL || cu->path->data==NULL) {
printf("no path!\n");
+ return 0;
}
path= cu->path;
fp= path->data;
/* test for cyclic */
bl= cu->bev.first;
+ if (!bl) return 0;
if (!bl->nr) return 0;
- if(bl && bl->poly> -1) cycl= 1;
+ if(bl->poly> -1) cycl= 1;
ctime *= (path->len-1);
@@ -571,11 +573,10 @@ static void face_duplilist(ListBase *lb, ID *id, Scene *scene, Object *par, floa
if(level>MAX_DUPLI_RECUR) return;
Mat4CpyMat4(pmat, par->obmat);
-
em = me->edit_btmesh;
+
if(em) {
int totvert;
-
dm= editbmesh_get_derived_cage(scene, par, em, CD_MASK_BAREMESH);
totface= dm->getNumFaces(dm);
@@ -584,7 +585,6 @@ static void face_duplilist(ListBase *lb, ID *id, Scene *scene, Object *par, floa
totvert= dm->getNumVerts(dm);
mvert= MEM_mallocN(sizeof(MVert)*totvert, "mvert temp");
dm->copyVertArray(dm, mvert);
-
}
else {
dm = mesh_get_derived_deform(scene, par, CD_MASK_BAREMESH);
@@ -758,7 +758,7 @@ static void new_particle_duplilist(ListBase *lb, ID *id, Scene *scene, Object *p
float ctime, pa_time, scale = 1.0f;
float tmat[4][4], mat[4][4], pamat[4][4], size=0.0;
float (*obmat)[4], (*oldobmat)[4];
- int lay, a, b, k, step_nbr = 0, counter, hair = 0;
+ int lay, a, b, counter, hair = 0;
int totpart, totchild, totgroup=0, pa_num;
if(psys==0) return;
@@ -786,11 +786,6 @@ static void new_particle_duplilist(ListBase *lb, ID *id, Scene *scene, Object *p
if((part->draw_as == PART_DRAW_OB && part->dup_ob) ||
(part->draw_as == PART_DRAW_GR && part->dup_group && part->dup_group->gobject.first)) {
- if(psys->flag & (PSYS_HAIR_DONE|PSYS_KEYED) && part->draw & PART_DRAW_KEYS)
- step_nbr = part->keys_step;
- else
- step_nbr = 0;
-
/* if we have a hair particle system, use the path cache */
if(part->type == PART_HAIR) {
if(psys->flag & PSYS_HAIR_DONE)
@@ -870,76 +865,65 @@ static void new_particle_duplilist(ListBase *lb, ID *id, Scene *scene, Object *p
oldobmat= obcopy.obmat;
}
- for(k=0; k<=step_nbr; k++, counter++) {
- if(hair) {
- /* hair we handle separate and compute transform based on hair keys */
- if(a < totpart) {
- cache = psys->pathcache[a];
- psys_get_dupli_path_transform(par, psys, psmd, pa, 0, cache, pamat, &scale);
- }
- else {
- cache = psys->childcache[a-totpart];
- psys_get_dupli_path_transform(par, psys, psmd, 0, cpa, cache, pamat, &scale);
- }
-
- VECCOPY(pamat[3], cache->co);
- pamat[3][3]= 1.0f;
-
- }
- else if(step_nbr) {
- /* other keys */
- state.time = (float)k / (float)step_nbr;
- psys_get_particle_on_path(scene, par, psys, a, &state, 0);
-
- QuatToMat4(state.rot, pamat);
- VECCOPY(pamat[3], state.co);
- pamat[3][3]= 1.0f;
+ if(hair) {
+ /* hair we handle separate and compute transform based on hair keys */
+ if(a < totpart) {
+ cache = psys->pathcache[a];
+ psys_get_dupli_path_transform(par, psys, psmd, pa, 0, cache, pamat, &scale);
}
else {
- /* first key */
- state.time = -1.0;
- if(psys_get_particle_state(scene, par, psys, a, &state, 0) == 0)
- continue;
-
- QuatToMat4(state.rot, pamat);
- VECCOPY(pamat[3], state.co);
- pamat[3][3]= 1.0f;
+ cache = psys->childcache[a-totpart];
+ psys_get_dupli_path_transform(par, psys, psmd, 0, cpa, cache, pamat, &scale);
}
- if(part->draw_as==PART_DRAW_GR && psys->part->draw & PART_DRAW_WHOLE_GR) {
- for(go= part->dup_group->gobject.first, b=0; go; go= go->next, b++) {
- Mat4MulMat4(tmat, oblist[b]->obmat, pamat);
- Mat4MulFloat3((float *)tmat, size*scale);
- if(par_space_mat)
- Mat4MulMat4(mat, tmat, par_space_mat);
- else
- Mat4CpyMat4(mat, tmat);
+ VECCOPY(pamat[3], cache->co);
+ pamat[3][3]= 1.0f;
+
+ }
+ else {
+ /* first key */
+ state.time = ctime;
+ if(psys_get_particle_state(scene, par, psys, a, &state, 0) == 0)
+ continue;
- dob= new_dupli_object(lb, go->ob, mat, par->lay, counter, OB_DUPLIPARTS, animated);
- Mat4CpyMat4(dob->omat, obcopylist[b].obmat);
- if(G.rendering)
- psys_get_dupli_texture(par, part, psmd, pa, cpa, dob->uv, dob->orco);
- }
- }
- else {
- /* to give ipos in object correct offset */
- where_is_object_time(scene, ob, ctime-pa_time);
-
- Mat4CpyMat4(mat, pamat);
+ QuatToMat4(state.rot, pamat);
+ VECCOPY(pamat[3], state.co);
+ pamat[3][3]= 1.0f;
+ }
- Mat4MulMat4(tmat, obmat, mat);
+ if(part->draw_as==PART_DRAW_GR && psys->part->draw & PART_DRAW_WHOLE_GR) {
+ for(go= part->dup_group->gobject.first, b=0; go; go= go->next, b++) {
+ Mat4MulMat4(tmat, oblist[b]->obmat, pamat);
Mat4MulFloat3((float *)tmat, size*scale);
if(par_space_mat)
Mat4MulMat4(mat, tmat, par_space_mat);
else
Mat4CpyMat4(mat, tmat);
- dob= new_dupli_object(lb, ob, mat, par->lay, counter, OB_DUPLIPARTS, animated);
- Mat4CpyMat4(dob->omat, oldobmat);
+ dob= new_dupli_object(lb, go->ob, mat, par->lay, counter, OB_DUPLIPARTS, animated);
+ Mat4CpyMat4(dob->omat, obcopylist[b].obmat);
if(G.rendering)
psys_get_dupli_texture(par, part, psmd, pa, cpa, dob->uv, dob->orco);
}
}
+ else {
+ /* to give ipos in object correct offset */
+ where_is_object_time(scene, ob, ctime-pa_time);
+
+ Mat4CpyMat4(mat, pamat);
+
+ Mat4MulMat4(tmat, obmat, mat);
+ Mat4MulFloat3((float *)tmat, size*scale);
+ if(par_space_mat)
+ Mat4MulMat4(mat, tmat, par_space_mat);
+ else
+ Mat4CpyMat4(mat, tmat);
+
+ dob= new_dupli_object(lb, ob, mat, ob->lay, counter, OB_DUPLIPARTS, animated);
+ Mat4CpyMat4(dob->omat, oldobmat);
+ if(G.rendering)
+ psys_get_dupli_texture(par, part, psmd, pa, cpa, dob->uv, dob->orco);
+ }
}
/* restore objects since they were changed in where_is_object_time */
diff --git a/source/blender/blenkernel/intern/anim_sys.c b/source/blender/blenkernel/intern/anim_sys.c
index 0097b30b685..30dcb383ef6 100644
--- a/source/blender/blenkernel/intern/anim_sys.c
+++ b/source/blender/blenkernel/intern/anim_sys.c
@@ -4,6 +4,7 @@
#include <stdio.h>
#include <string.h>
+#include <stddef.h>
#include "MEM_guardedalloc.h"
@@ -238,6 +239,9 @@ KeyingSet *BKE_keyingset_add (ListBase *list, const char name[], short flag, sho
/* add KeyingSet to list */
BLI_addtail(list, ks);
+ /* make sure KeyingSet has a unique name (this helps with identification) */
+ BLI_uniquename(list, ks, "Keying Set", ' ', offsetof(KeyingSet, name), 64);
+
/* return new KeyingSet for further editing */
return ks;
}
@@ -275,6 +279,10 @@ void BKE_keyingset_add_destination (KeyingSet *ks, ID *id, const char group_name
strcpy(ksp->group, "");
}
+ /* store additional info for relative paths (just in case user makes the set relative) */
+ if (id)
+ ksp->idtype= GS(id->name);
+
/* just copy path info */
// XXX no checks are performed for templates yet
// should array index be checked too?
@@ -369,22 +377,22 @@ static short animsys_write_rna_setting (PointerRNA *ptr, char *path, int array_i
/* set value - only for animatable numerical values */
if (RNA_property_animateable(&new_ptr, prop))
{
- switch (RNA_property_type(&new_ptr, prop))
+ switch (RNA_property_type(prop))
{
case PROP_BOOLEAN:
- if (RNA_property_array_length(&new_ptr, prop))
+ if (RNA_property_array_length(prop))
RNA_property_boolean_set_index(&new_ptr, prop, array_index, (int)value);
else
RNA_property_boolean_set(&new_ptr, prop, (int)value);
break;
case PROP_INT:
- if (RNA_property_array_length(&new_ptr, prop))
+ if (RNA_property_array_length(prop))
RNA_property_int_set_index(&new_ptr, prop, array_index, (int)value);
else
RNA_property_int_set(&new_ptr, prop, (int)value);
break;
case PROP_FLOAT:
- if (RNA_property_array_length(&new_ptr, prop))
+ if (RNA_property_array_length(prop))
RNA_property_float_set_index(&new_ptr, prop, array_index, value);
else
RNA_property_float_set(&new_ptr, prop, value);
@@ -393,12 +401,12 @@ static short animsys_write_rna_setting (PointerRNA *ptr, char *path, int array_i
RNA_property_enum_set(&new_ptr, prop, (int)value);
break;
default:
- break;
+ /* nothing can be done here... so it is unsuccessful? */
+ return 0;
}
}
/* successful */
- // XXX should the unhandled case also be successful?
return 1;
}
else {
@@ -415,21 +423,25 @@ static short animsys_write_rna_setting (PointerRNA *ptr, char *path, int array_i
}
/* Simple replacement based data-setting of the FCurve using RNA */
-static void animsys_execute_fcurve (PointerRNA *ptr, AnimMapper *remap, FCurve *fcu)
+static short animsys_execute_fcurve (PointerRNA *ptr, AnimMapper *remap, FCurve *fcu)
{
char *path = NULL;
short free_path=0;
+ short ok= 0;
/* get path, remapped as appropriate to work in its new environment */
free_path= animsys_remap_path(remap, fcu->rna_path, &path);
/* write value to setting */
if (path)
- animsys_write_rna_setting(ptr, path, fcu->array_index, fcu->curval);
+ ok= animsys_write_rna_setting(ptr, path, fcu->array_index, fcu->curval);
/* free temp path-info */
if (free_path)
MEM_freeN(path);
+
+ /* return whether we were successful */
+ return ok;
}
/* Evaluate all the F-Curves in the given list
@@ -465,20 +477,25 @@ static void animsys_evaluate_drivers (PointerRNA *ptr, AnimData *adt, float ctim
for (fcu= adt->drivers.first; fcu; fcu= fcu->next)
{
ChannelDriver *driver= fcu->driver;
+ short ok= 0;
/* check if this driver's curve should be skipped */
// FIXME: maybe we shouldn't check for muted, though that would make things more confusing, as there's already too many ways to disable?
if ((fcu->flag & (FCURVE_MUTED|FCURVE_DISABLED)) == 0)
{
/* check if driver itself is tagged for recalculation */
- if ((driver) /*&& (driver->flag & DRIVER_FLAG_RECALC)*/) { // XXX driver recalc flag is not set yet by depsgraph!
+ if ((driver) && !(driver->flag & DRIVER_FLAG_INVALID)/*&& (driver->flag & DRIVER_FLAG_RECALC)*/) { // XXX driver recalc flag is not set yet by depsgraph!
/* evaluate this using values set already in other places */
// NOTE: for 'layering' option later on, we should check if we should remove old value before adding new to only be done when drivers only changed
calculate_fcurve(fcu, ctime);
- animsys_execute_fcurve(ptr, NULL, fcu);
+ ok= animsys_execute_fcurve(ptr, NULL, fcu);
/* clear recalc flag */
driver->flag &= ~DRIVER_FLAG_RECALC;
+
+ /* set error-flag if evaluation failed */
+ if (ok == 0)
+ driver->flag |= DRIVER_FLAG_INVALID;
}
}
}
@@ -487,8 +504,29 @@ static void animsys_evaluate_drivers (PointerRNA *ptr, AnimData *adt, float ctim
/* ***************************************** */
/* Actions Evaluation */
+/* Evaluate Action Group */
+void animsys_evaluate_action_group (PointerRNA *ptr, bAction *act, bActionGroup *agrp, AnimMapper *remap, float ctime)
+{
+ FCurve *fcu;
+
+ /* check if mapper is appropriate for use here (we set to NULL if it's inappropriate) */
+ if ELEM(NULL, act, agrp) return;
+ if ((remap) && (remap->target != act)) remap= NULL;
+
+ /* calculate then execute each curve */
+ for (fcu= agrp->channels.first; (fcu) && (fcu->grp == agrp); fcu= fcu->next)
+ {
+ /* check if this curve should be skipped */
+ if ((fcu->flag & (FCURVE_MUTED|FCURVE_DISABLED)) == 0)
+ {
+ calculate_fcurve(fcu, ctime);
+ animsys_execute_fcurve(ptr, remap, fcu);
+ }
+ }
+}
+
/* Evaluate Action (F-Curve Bag) */
-static void animsys_evaluate_action (PointerRNA *ptr, bAction *act, AnimMapper *remap, float ctime)
+void animsys_evaluate_action (PointerRNA *ptr, bAction *act, AnimMapper *remap, float ctime)
{
/* check if mapper is appropriate for use here (we set to NULL if it's inappropriate) */
if (act == NULL) return;
@@ -846,7 +884,10 @@ void BKE_animsys_evaluate_all_animation (Main *main, float ctime)
// TODO...
/* objects */
- EVAL_ANIM_IDS(main->object.first, 0);
+ /* ADT_RECALC_ANIM doesn't need to be supplied here, since object AnimData gets
+ * this tagged by Depsgraph on framechange
+ */
+ EVAL_ANIM_IDS(main->object.first, /*ADT_RECALC_ANIM*/0);
/* worlds */
EVAL_ANIM_IDS(main->world.first, ADT_RECALC_ANIM);
diff --git a/source/blender/blenkernel/intern/blender.c b/source/blender/blenkernel/intern/blender.c
index 2033250585d..3169905b7f5 100644
--- a/source/blender/blenkernel/intern/blender.c
+++ b/source/blender/blenkernel/intern/blender.c
@@ -325,8 +325,8 @@ static void setup_app_data(bContext *C, BlendFileData *bfd, char *filename)
if (bfd->user) {
/* only here free userdef themes... */
- BLI_freelistN(&U.themes);
-
+ BKE_userdef_free();
+
U= *bfd->user;
MEM_freeN(bfd->user);
}
@@ -414,6 +414,15 @@ static void handle_subversion_warning(Main *main)
}
+void BKE_userdef_free(void)
+{
+
+ BLI_freelistN(&U.uistyles);
+ BLI_freelistN(&U.uifonts);
+ BLI_freelistN(&U.themes);
+
+}
+
/* returns:
0: no load file
1: OK
diff --git a/source/blender/blenkernel/intern/bmesh_private.h b/source/blender/blenkernel/intern/bmesh_private.h
index f34ef0090f3..dd7d20bcf15 100644
--- a/source/blender/blenkernel/intern/bmesh_private.h
+++ b/source/blender/blenkernel/intern/bmesh_private.h
@@ -3,7 +3,7 @@
*
* low level, 'private' function prototypes for bmesh kernel.
*
- * $Id: BKE_bmesh.h,v 1.00 2007/01/17 17:42:01 Briggs Exp $
+ * $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
*
diff --git a/source/blender/blenkernel/intern/booleanops.c b/source/blender/blenkernel/intern/booleanops.c
index e57dfea8eaf..27b78c6644c 100644
--- a/source/blender/blenkernel/intern/booleanops.c
+++ b/source/blender/blenkernel/intern/booleanops.c
@@ -65,7 +65,7 @@
*/
typedef struct {
- Mesh *mesh;
+ DerivedMesh *dm;
Object *ob;
int pos;
} VertexIt;
@@ -93,13 +93,13 @@ static void VertexIt_Destruct(CSG_VertexIteratorDescriptor * iterator)
static int VertexIt_Done(CSG_IteratorPtr it)
{
VertexIt * iterator = (VertexIt *)it;
- return(iterator->pos >= iterator->mesh->totvert);
+ return(iterator->pos >= iterator->dm->getNumVerts(iterator->dm));
}
static void VertexIt_Fill(CSG_IteratorPtr it, CSG_IVertex *vert)
{
VertexIt * iterator = (VertexIt *)it;
- MVert *verts = iterator->mesh->mvert;
+ MVert *verts = iterator->dm->getVertArray(iterator->dm);
float global_pos[3];
@@ -127,7 +127,7 @@ static void VertexIt_Reset(CSG_IteratorPtr it)
iterator->pos = 0;
}
-static void VertexIt_Construct(CSG_VertexIteratorDescriptor *output, Object *ob)
+static void VertexIt_Construct(CSG_VertexIteratorDescriptor *output, DerivedMesh *dm, Object *ob)
{
VertexIt *it;
@@ -139,8 +139,8 @@ static void VertexIt_Construct(CSG_VertexIteratorDescriptor *output, Object *ob)
return;
}
// assign blender specific variables
- it->ob = ob;
- it->mesh = ob->data;
+ it->dm = dm;
+ it->ob = ob; // needed for obmat transformations
it->pos = 0;
@@ -149,7 +149,7 @@ static void VertexIt_Construct(CSG_VertexIteratorDescriptor *output, Object *ob)
output->Fill = VertexIt_Fill;
output->Done = VertexIt_Done;
output->Reset = VertexIt_Reset;
- output->num_elements = it->mesh->totvert;
+ output->num_elements = it->dm->getNumVerts(it->dm);
output->it = it;
}
@@ -158,7 +158,7 @@ static void VertexIt_Construct(CSG_VertexIteratorDescriptor *output, Object *ob)
*/
typedef struct {
- Mesh *mesh;
+ DerivedMesh *dm;
int pos;
int offset;
} FaceIt;
@@ -177,14 +177,14 @@ static int FaceIt_Done(CSG_IteratorPtr it)
{
// assume CSG_IteratorPtr is of the correct type.
FaceIt * iterator = (FaceIt *)it;
- return(iterator->pos >= iterator->mesh->totface);
+ return(iterator->pos >= iterator->dm->getNumFaces(iterator->dm));
}
static void FaceIt_Fill(CSG_IteratorPtr it, CSG_IFace *face)
{
// assume CSG_IteratorPtr is of the correct type.
FaceIt *face_it = (FaceIt *)it;
- MFace *mfaces = face_it->mesh->mface;
+ MFace *mfaces = face_it->dm->getFaceArray(face_it->dm);
MFace *mface = &mfaces[face_it->pos];
face->vertex_index[0] = mface->v1;
@@ -213,7 +213,7 @@ static void FaceIt_Reset(CSG_IteratorPtr it)
}
static void FaceIt_Construct(
- CSG_FaceIteratorDescriptor *output, Object *ob, int offset)
+ CSG_FaceIteratorDescriptor *output, DerivedMesh *dm, int offset)
{
FaceIt *it;
if (output == 0) return;
@@ -224,7 +224,7 @@ static void FaceIt_Construct(
return ;
}
// assign blender specific variables
- it->mesh = ob->data;
+ it->dm = dm;
it->offset = offset;
it->pos = 0;
@@ -233,7 +233,7 @@ static void FaceIt_Construct(
output->Fill = FaceIt_Fill;
output->Done = FaceIt_Done;
output->Reset = FaceIt_Reset;
- output->num_elements = it->mesh->totface;
+ output->num_elements = it->dm->getNumFaces(it->dm);
output->it = it;
}
@@ -276,7 +276,7 @@ static Object *AddNewBlenderMesh(Scene *scene, Base *base)
}
static void InterpCSGFace(
- DerivedMesh *dm, Mesh *orig_me, int index, int orig_index, int nr,
+ DerivedMesh *dm, DerivedMesh *orig_dm, int index, int orig_index, int nr,
float mapmat[][4])
{
float obco[3], *co[4], *orig_co[4], w[4][4];
@@ -284,13 +284,13 @@ static void InterpCSGFace(
int j;
mface = CDDM_get_face(dm, index);
- orig_mface = orig_me->mface + orig_index;
+ orig_mface = orig_dm->getFaceArray(orig_dm) + orig_index;
// get the vertex coordinates from the original mesh
- orig_co[0] = (orig_me->mvert + orig_mface->v1)->co;
- orig_co[1] = (orig_me->mvert + orig_mface->v2)->co;
- orig_co[2] = (orig_me->mvert + orig_mface->v3)->co;
- orig_co[3] = (orig_mface->v4)? (orig_me->mvert + orig_mface->v4)->co: NULL;
+ orig_co[0] = (orig_dm->getVertArray(orig_dm) + orig_mface->v1)->co;
+ orig_co[1] = (orig_dm->getVertArray(orig_dm) + orig_mface->v2)->co;
+ orig_co[2] = (orig_dm->getVertArray(orig_dm) + orig_mface->v3)->co;
+ orig_co[3] = (orig_mface->v4)? (orig_dm->getVertArray(orig_dm) + orig_mface->v4)->co: NULL;
// get the vertex coordinates from the new derivedmesh
co[0] = CDDM_get_vert(dm, mface->v1)->co;
@@ -308,7 +308,7 @@ static void InterpCSGFace(
InterpWeightsQ3Dfl(orig_co[0], orig_co[1], orig_co[2], orig_co[3], obco, w[j]);
}
- CustomData_interp(&orig_me->fdata, &dm->faceData, &orig_index, NULL, (float*)w, 1, index);
+ CustomData_interp(&orig_dm->faceData, &dm->faceData, &orig_index, NULL, (float*)w, 1, index);
}
/* Iterate over the CSG Output Descriptors and create a new DerivedMesh
@@ -320,27 +320,28 @@ static DerivedMesh *ConvertCSGDescriptorsToDerivedMesh(
float mapmat[][4],
Material **mat,
int *totmat,
+ DerivedMesh *dm1,
Object *ob1,
+ DerivedMesh *dm2,
Object *ob2)
{
- DerivedMesh *dm;
+ DerivedMesh *result, *orig_dm;
GHash *material_hash = NULL;
Mesh *me1= (Mesh*)ob1->data;
Mesh *me2= (Mesh*)ob2->data;
int i;
// create a new DerivedMesh
- dm = CDDM_new(vertex_it->num_elements, 0, face_it->num_elements);
-
- CustomData_merge(&me1->fdata, &dm->faceData, CD_MASK_DERIVEDMESH,
- CD_DEFAULT, face_it->num_elements);
- CustomData_merge(&me2->fdata, &dm->faceData, CD_MASK_DERIVEDMESH,
- CD_DEFAULT, face_it->num_elements);
+ result = CDDM_new(vertex_it->num_elements, 0, face_it->num_elements);
+ CustomData_merge(&dm1->faceData, &result->faceData, CD_MASK_DERIVEDMESH,
+ CD_DEFAULT, face_it->num_elements);
+ CustomData_merge(&dm2->faceData, &result->faceData, CD_MASK_DERIVEDMESH,
+ CD_DEFAULT, face_it->num_elements);
// step through the vertex iterators:
for (i = 0; !vertex_it->Done(vertex_it->it); i++) {
CSG_IVertex csgvert;
- MVert *mvert = CDDM_get_vert(dm, i);
+ MVert *mvert = CDDM_get_vert(result, i);
// retrieve a csg vertex from the boolean module
vertex_it->Fill(vertex_it->it, &csgvert);
@@ -371,15 +372,16 @@ static DerivedMesh *ConvertCSGDescriptorsToDerivedMesh(
face_it->Step(face_it->it);
// find the original mesh and data
- orig_ob = (csgface.orig_face < me1->totface)? ob1: ob2;
+ orig_ob = (csgface.orig_face < dm1->getNumFaces(dm1))? ob1: ob2;
+ orig_dm = (csgface.orig_face < dm1->getNumFaces(dm1))? dm1: dm2;
orig_me = (orig_ob == ob1)? me1: me2;
- orig_index = (orig_ob == ob1)? csgface.orig_face: csgface.orig_face - me1->totface;
+ orig_index = (orig_ob == ob1)? csgface.orig_face: csgface.orig_face - dm1->getNumFaces(dm1);
// copy all face layers, including mface
- CustomData_copy_data(&orig_me->fdata, &dm->faceData, orig_index, i, 1);
+ CustomData_copy_data(&orig_dm->faceData, &result->faceData, orig_index, i, 1);
// set mface
- mface = CDDM_get_face(dm, i);
+ mface = CDDM_get_face(result, i);
mface->v1 = csgface.vertex_index[0];
mface->v2 = csgface.vertex_index[1];
mface->v3 = csgface.vertex_index[2];
@@ -400,29 +402,30 @@ static DerivedMesh *ConvertCSGDescriptorsToDerivedMesh(
else
mface->mat_nr = 0;
- InterpCSGFace(dm, orig_me, i, orig_index, csgface.vertex_number,
+ InterpCSGFace(result, orig_dm, i, orig_index, csgface.vertex_number,
(orig_me == me2)? mapmat: NULL);
- test_index_face(mface, &dm->faceData, i, csgface.vertex_number);
+ test_index_face(mface, &result->faceData, i, csgface.vertex_number);
}
if (material_hash)
BLI_ghash_free(material_hash, NULL, NULL);
- CDDM_calc_edges(dm);
- CDDM_calc_normals(dm);
+ CDDM_calc_edges(result);
+ CDDM_calc_normals(result);
- return dm;
+ return result;
}
static void BuildMeshDescriptors(
+ struct DerivedMesh *dm,
struct Object *ob,
int face_offset,
struct CSG_FaceIteratorDescriptor * face_it,
struct CSG_VertexIteratorDescriptor * vertex_it)
{
- VertexIt_Construct(vertex_it,ob);
- FaceIt_Construct(face_it,ob,face_offset);
+ VertexIt_Construct(vertex_it,dm, ob);
+ FaceIt_Construct(face_it,dm,face_offset);
}
static void FreeMeshDescriptors(
@@ -434,19 +437,17 @@ static void FreeMeshDescriptors(
}
DerivedMesh *NewBooleanDerivedMesh_intern(
- struct Object *ob, struct Object *ob_select,
+ DerivedMesh *dm, struct Object *ob, DerivedMesh *dm_select, struct Object *ob_select,
int int_op_type, Material **mat, int *totmat)
{
float inv_mat[4][4];
float map_mat[4][4];
- DerivedMesh *dm = NULL;
- Mesh *me1 = get_mesh(ob_select);
- Mesh *me2 = get_mesh(ob);
+ DerivedMesh *result = NULL;
- if (me1 == NULL || me2 == NULL) return 0;
- if (!me1->totface || !me2->totface) return 0;
+ if (dm == NULL || dm_select == NULL) return 0;
+ if (!dm->getNumFaces(dm) || !dm_select->getNumFaces(dm_select)) return 0;
// we map the final object back into ob's local coordinate space. For this
// we need to compute the inverse transform from global to ob (inv_mat),
@@ -477,8 +478,8 @@ DerivedMesh *NewBooleanDerivedMesh_intern(
default : op_type = e_csg_intersection;
}
- BuildMeshDescriptors(ob_select, 0, &fd_1, &vd_1);
- BuildMeshDescriptors(ob, me1->totface, &fd_2, &vd_2);
+ BuildMeshDescriptors(dm_select, ob_select, 0, &fd_1, &vd_1);
+ BuildMeshDescriptors(dm, ob, dm_select->getNumFaces(dm_select) , &fd_2, &vd_2);
bool_op = CSG_NewBooleanFunction();
@@ -492,8 +493,8 @@ DerivedMesh *NewBooleanDerivedMesh_intern(
// iterate through results of operation and insert
// into new object
- dm = ConvertCSGDescriptorsToDerivedMesh(
- &fd_o, &vd_o, inv_mat, map_mat, mat, totmat, ob_select, ob);
+ result = ConvertCSGDescriptorsToDerivedMesh(
+ &fd_o, &vd_o, inv_mat, map_mat, mat, totmat, dm_select, ob_select, dm, ob);
// free up the memory
CSG_FreeVertexDescriptor(&vd_o);
@@ -508,7 +509,7 @@ DerivedMesh *NewBooleanDerivedMesh_intern(
FreeMeshDescriptors(&fd_2, &vd_2);
}
- return dm;
+ return result;
}
int NewBooleanMesh(Scene *scene, Base *base, Base *base_select, int int_op_type)
@@ -517,24 +518,30 @@ int NewBooleanMesh(Scene *scene, Base *base, Base *base_select, int int_op_type)
int a, maxmat, totmat= 0;
Object *ob_new, *ob, *ob_select;
Material **mat;
+ DerivedMesh *result;
+ DerivedMesh *dm_select;
DerivedMesh *dm;
ob= base->object;
ob_select= base_select->object;
+ dm = mesh_get_derived_final(scene, ob, CD_MASK_BAREMESH);
+ dm_select = mesh_create_derived_view(scene, ob_select, 0); // no modifiers in editmode ??
+
maxmat= ob->totcol + ob_select->totcol;
mat= (Material**)MEM_mallocN(sizeof(Material*)*maxmat, "NewBooleanMeshMat");
/* put some checks in for nice user feedback */
- if((!(get_mesh(ob)->totface)) || (!(get_mesh(ob_select)->totface)))
+ if (dm == NULL || dm_select == NULL) return 0;
+ if (!dm->getNumFaces(dm) || !dm_select->getNumFaces(dm_select))
{
MEM_freeN(mat);
return -1;
}
- dm= NewBooleanDerivedMesh_intern(ob, ob_select, int_op_type, mat, &totmat);
+ result= NewBooleanDerivedMesh_intern(dm, ob, dm_select, ob_select, int_op_type, mat, &totmat);
- if (dm == NULL) {
+ if (result == NULL) {
MEM_freeN(mat);
return 0;
}
@@ -543,8 +550,11 @@ int NewBooleanMesh(Scene *scene, Base *base, Base *base_select, int int_op_type)
ob_new= AddNewBlenderMesh(scene, base_select);
me_new= ob_new->data;
- DM_to_mesh(dm, me_new);
+ DM_to_mesh(result, me_new);
+ result->release(result);
+
dm->release(dm);
+ dm_select->release(dm_select);
/* add materials to object */
for (a = 0; a < totmat; a++)
@@ -558,9 +568,9 @@ int NewBooleanMesh(Scene *scene, Base *base, Base *base_select, int int_op_type)
return 1;
}
-DerivedMesh *NewBooleanDerivedMesh(struct Object *ob, struct Object *ob_select,
+DerivedMesh *NewBooleanDerivedMesh(DerivedMesh *dm, struct Object *ob, DerivedMesh *dm_select, struct Object *ob_select,
int int_op_type)
{
- return NewBooleanDerivedMesh_intern(ob, ob_select, int_op_type, NULL, NULL);
+ return NewBooleanDerivedMesh_intern(dm, ob, dm_select, ob_select, int_op_type, NULL, NULL);
}
diff --git a/source/blender/blenkernel/intern/bvhutils.c b/source/blender/blenkernel/intern/bvhutils.c
index ae449843d2a..d9e005811d0 100644
--- a/source/blender/blenkernel/intern/bvhutils.c
+++ b/source/blender/blenkernel/intern/bvhutils.c
@@ -30,6 +30,7 @@
#include <stdio.h>
#include <string.h>
#include <math.h>
+#include <assert.h>
#include "BKE_bvhutils.h"
@@ -45,6 +46,8 @@
#include "BKE_global.h"
#include "BLI_arithb.h"
+#include "BLI_linklist.h"
+#include "MEM_guardedalloc.h"
/* Math stuff for ray casting on mesh faces and for nearest surface */
@@ -480,30 +483,47 @@ static void mesh_faces_spherecast(void *userdata, int index, const BVHTreeRay *r
* BVH builders
*/
// Builds a bvh tree.. where nodes are the vertexs of the given mesh
-void bvhtree_from_mesh_verts(BVHTreeFromMesh *data, DerivedMesh *mesh, float epsilon, int tree_type, int axis)
+BVHTree* bvhtree_from_mesh_verts(BVHTreeFromMesh *data, DerivedMesh *mesh, float epsilon, int tree_type, int axis)
{
- int i;
- int numVerts= mesh->getNumVerts(mesh);
- MVert *vert = mesh->getVertDataArray(mesh, CD_MVERT);
- BVHTree *tree = NULL;
+ BVHTree *tree = bvhcache_find(&mesh->bvhCache, BVHTREE_FROM_VERTICES);
- memset(data, 0, sizeof(*data));
+ //Not in cache
+ if(tree == NULL)
+ {
+ int i;
+ int numVerts= mesh->getNumVerts(mesh);
+ MVert *vert = mesh->getVertDataArray(mesh, CD_MVERT);
- if(vert == NULL)
+ if(vert != NULL)
+ {
+ tree = BLI_bvhtree_new(numVerts, epsilon, tree_type, axis);
+
+ if(tree != NULL)
+ {
+ for(i = 0; i < numVerts; i++)
+ BLI_bvhtree_insert(tree, i, vert[i].co, 1);
+
+ BLI_bvhtree_balance(tree);
+
+ //Save on cache for later use
+// printf("BVHTree built and saved on cache\n");
+ bvhcache_insert(&mesh->bvhCache, tree, BVHTREE_FROM_VERTICES);
+ }
+ }
+ }
+ else
{
- printf("bvhtree cant be build: cant get a vertex array");
- return;
+// printf("BVHTree is already build, using cached tree\n");
}
- tree = BLI_bvhtree_new(numVerts, epsilon, tree_type, axis);
- if(tree != NULL)
- {
- for(i = 0; i < numVerts; i++)
- BLI_bvhtree_insert(tree, i, vert[i].co, 1);
- BLI_bvhtree_balance(tree);
+ //Setup BVHTreeFromMesh
+ memset(data, 0, sizeof(*data));
+ data->tree = tree;
- data->tree = tree;
+ if(data->tree)
+ {
+ data->cached = TRUE;
//a NULL nearest callback works fine
//remeber the min distance to point is the same as the min distance to BV of point
@@ -516,43 +536,62 @@ void bvhtree_from_mesh_verts(BVHTreeFromMesh *data, DerivedMesh *mesh, float eps
data->sphere_radius = epsilon;
}
+
+ return data->tree;
}
// Builds a bvh tree.. where nodes are the faces of the given mesh.
-void bvhtree_from_mesh_faces(BVHTreeFromMesh *data, DerivedMesh *mesh, float epsilon, int tree_type, int axis)
+BVHTree* bvhtree_from_mesh_faces(BVHTreeFromMesh *data, DerivedMesh *mesh, float epsilon, int tree_type, int axis)
{
- int i;
- int numFaces= mesh->getNumFaces(mesh);
- MVert *vert = mesh->getVertDataArray(mesh, CD_MVERT);
- MFace *face = mesh->getFaceDataArray(mesh, CD_MFACE);
- BVHTree *tree = NULL;
-
- memset(data, 0, sizeof(*data));
+ BVHTree *tree = bvhcache_find(&mesh->bvhCache, BVHTREE_FROM_FACES);
- if(vert == NULL && face == NULL)
+ //Not in cache
+ if(tree == NULL)
{
- printf("bvhtree cant be build: cant get a vertex/face array");
- return;
- }
+ int i;
+ int numFaces= mesh->getNumFaces(mesh);
+ MVert *vert = mesh->getVertDataArray(mesh, CD_MVERT);
+ MFace *face = mesh->getFaceDataArray(mesh, CD_MFACE);
- /* Create a bvh-tree of the given target */
- tree = BLI_bvhtree_new(numFaces, epsilon, tree_type, axis);
- if(tree != NULL)
- {
- for(i = 0; i < numFaces; i++)
+ if(vert != NULL && face != NULL)
{
- float co[4][3];
- VECCOPY(co[0], vert[ face[i].v1 ].co);
- VECCOPY(co[1], vert[ face[i].v2 ].co);
- VECCOPY(co[2], vert[ face[i].v3 ].co);
- if(face[i].v4)
- VECCOPY(co[3], vert[ face[i].v4 ].co);
+ /* Create a bvh-tree of the given target */
+ tree = BLI_bvhtree_new(numFaces, epsilon, tree_type, axis);
+ if(tree != NULL)
+ {
+ for(i = 0; i < numFaces; i++)
+ {
+ float co[4][3];
+ VECCOPY(co[0], vert[ face[i].v1 ].co);
+ VECCOPY(co[1], vert[ face[i].v2 ].co);
+ VECCOPY(co[2], vert[ face[i].v3 ].co);
+ if(face[i].v4)
+ VECCOPY(co[3], vert[ face[i].v4 ].co);
- BLI_bvhtree_insert(tree, i, co[0], face[i].v4 ? 4 : 3);
+ BLI_bvhtree_insert(tree, i, co[0], face[i].v4 ? 4 : 3);
+ }
+ BLI_bvhtree_balance(tree);
+
+ //Save on cache for later use
+// printf("BVHTree built and saved on cache\n");
+ bvhcache_insert(&mesh->bvhCache, tree, BVHTREE_FROM_FACES);
+ }
}
- BLI_bvhtree_balance(tree);
+ }
+ else
+ {
+// printf("BVHTree is already build, using cached tree\n");
+ }
+
+
+ //Setup BVHTreeFromMesh
+ memset(data, 0, sizeof(*data));
+ data->tree = tree;
+
+ if(data->tree)
+ {
+ data->cached = TRUE;
- data->tree = tree;
data->nearest_callback = mesh_faces_nearest_point;
data->raycast_callback = mesh_faces_spherecast;
@@ -562,6 +601,8 @@ void bvhtree_from_mesh_faces(BVHTreeFromMesh *data, DerivedMesh *mesh, float eps
data->sphere_radius = epsilon;
}
+ return data->tree;
+
}
// Frees data allocated by a call to bvhtree_from_mesh_*.
@@ -569,9 +610,78 @@ void free_bvhtree_from_mesh(struct BVHTreeFromMesh *data)
{
if(data->tree)
{
- BLI_bvhtree_free(data->tree);
+ if(!data->cached)
+ BLI_bvhtree_free(data->tree);
+
memset( data, 0, sizeof(data) );
}
}
+/* BVHCache */
+typedef struct BVHCacheItem
+{
+ int type;
+ BVHTree *tree;
+
+} BVHCacheItem;
+
+static void bvhcacheitem_set_if_match(void *_cached, void *_search)
+{
+ BVHCacheItem * cached = (BVHCacheItem *)_cached;
+ BVHCacheItem * search = (BVHCacheItem *)_search;
+
+ if(search->type == cached->type)
+ {
+ search->tree = cached->tree;
+ }
+}
+
+BVHTree *bvhcache_find(BVHCache *cache, int type)
+{
+ BVHCacheItem item;
+ item.type = type;
+ item.tree = NULL;
+
+ BLI_linklist_apply(*cache, bvhcacheitem_set_if_match, &item);
+ return item.tree;
+}
+
+void bvhcache_insert(BVHCache *cache, BVHTree *tree, int type)
+{
+ BVHCacheItem *item = NULL;
+
+ assert( tree != NULL );
+ assert( bvhcache_find(cache, type) == NULL );
+
+ item = MEM_mallocN(sizeof(BVHCacheItem), "BVHCacheItem");
+ assert( item != NULL );
+
+ item->type = type;
+ item->tree = tree;
+
+ BLI_linklist_prepend( cache, item );
+}
+
+
+void bvhcache_init(BVHCache *cache)
+{
+ *cache = NULL;
+}
+
+static void bvhcacheitem_free(void *_item)
+{
+ BVHCacheItem *item = (BVHCacheItem *)_item;
+
+ BLI_bvhtree_free(item->tree);
+ MEM_freeN(item);
+}
+
+
+void bvhcache_free(BVHCache *cache)
+{
+ BLI_linklist_free(*cache, (LinkNodeFreeFP)bvhcacheitem_free);
+ *cache = NULL;
+}
+
+
diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c
index 7476d2f5fda..ecdf0e78df2 100644
--- a/source/blender/blenkernel/intern/cdderivedmesh.c
+++ b/source/blender/blenkernel/intern/cdderivedmesh.c
@@ -483,10 +483,14 @@ static void cdDM_drawMappedFaces(DerivedMesh *dm, int (*setDrawOptions)(void *us
CDDerivedMesh *cddm = (CDDerivedMesh*) dm;
MVert *mv = cddm->mvert;
MFace *mf = cddm->mface;
- MCol *mc = DM_get_face_data_layer(dm, CD_MCOL);
+ MCol *mc;
float *nors= dm->getFaceDataArray(dm, CD_NORMAL);
int i, orig, *index = DM_get_face_data_layer(dm, CD_ORIGINDEX);
+ mc = DM_get_face_data_layer(dm, CD_WEIGHT_MCOL);
+ if(!mc)
+ mc = DM_get_face_data_layer(dm, CD_MCOL);
+
for(i = 0; i < dm->numFaceData; i++, mf++) {
int drawSmooth = (mf->flag & ME_SMOOTH);
@@ -927,13 +931,6 @@ DerivedMesh *CDDM_from_mesh(Mesh *mesh, Object *ob)
index = CustomData_get_layer(&dm->faceData, CD_ORIGINDEX);
for(i = 0; i < mesh->totface; ++i, ++index)
*index = i;
-
- /* works in conjunction with hack during modifier calc, where active mcol
- layer with weight paint colors is temporarily added */
- /* XXX make this real but temporary layer */
-// if ((G.f & G_WEIGHTPAINT) &&
-// (ob && ob==(scene->basact?scene->basact->object:NULL)))
-// CustomData_duplicate_referenced_layer(&dm->faceData, CD_MCOL);
return dm;
}
diff --git a/source/blender/blenkernel/intern/colortools.c b/source/blender/blenkernel/intern/colortools.c
index 1bc34aea9a1..e8716aba296 100644
--- a/source/blender/blenkernel/intern/colortools.c
+++ b/source/blender/blenkernel/intern/colortools.c
@@ -32,6 +32,10 @@
#include <stdlib.h>
#include <float.h>
+#ifdef WITH_LCMS
+#include <lcms.h>
+#endif
+
#include "MEM_guardedalloc.h"
#include "DNA_color_types.h"
@@ -650,6 +654,38 @@ void curvemapping_evaluate_premulRGBF(CurveMapping *cumap, float *vecout, const
vecout[2]= curvemap_evaluateF(cumap->cm+2, fac);
}
+void colorcorrection_do_ibuf(ImBuf *ibuf, const char *profile)
+{
+ if (ibuf->crect == NULL)
+ {
+#ifdef WITH_LCMS
+ cmsHPROFILE imageProfile, proofingProfile;
+ cmsHTRANSFORM hTransform;
+
+ ibuf->crect = MEM_mallocN(ibuf->x*ibuf->y*sizeof(int), "imbuf crect");
+
+ imageProfile = cmsCreate_sRGBProfile();
+ proofingProfile = cmsOpenProfileFromFile(profile, "r");
+
+ cmsErrorAction(LCMS_ERROR_SHOW);
+
+ hTransform = cmsCreateProofingTransform(imageProfile, TYPE_RGBA_8, imageProfile, TYPE_RGBA_8,
+ proofingProfile,
+ INTENT_ABSOLUTE_COLORIMETRIC,
+ INTENT_ABSOLUTE_COLORIMETRIC,
+ cmsFLAGS_SOFTPROOFING);
+
+ cmsDoTransform(hTransform, ibuf->rect, ibuf->crect, ibuf->x * ibuf->y);
+
+ cmsDeleteTransform(hTransform);
+ cmsCloseProfile(imageProfile);
+ cmsCloseProfile(proofingProfile);
+#else
+ ibuf->crect = ibuf->rect;
+#endif
+ }
+}
+
void curvemapping_do_ibuf(CurveMapping *cumap, ImBuf *ibuf)
{
diff --git a/source/blender/blenkernel/intern/constraint.c b/source/blender/blenkernel/intern/constraint.c
index 5adbcadcf39..25fc7bd3b4f 100644
--- a/source/blender/blenkernel/intern/constraint.c
+++ b/source/blender/blenkernel/intern/constraint.c
@@ -34,7 +34,6 @@
#include <float.h>
#include "MEM_guardedalloc.h"
-//XXX #include "nla.h"
#include "BLI_blenlib.h"
#include "BLI_arithb.h"
@@ -42,6 +41,7 @@
#include "DNA_armature_types.h"
#include "DNA_constraint_types.h"
+#include "DNA_modifier_types.h"
#include "DNA_object_types.h"
#include "DNA_action_types.h"
#include "DNA_curve_types.h"
@@ -67,6 +67,8 @@
#include "BKE_library.h"
#include "BKE_idprop.h"
#include "BKE_mesh.h"
+#include "BKE_shrinkwrap.h"
+#include "BKE_mesh.h"
#ifndef DISABLE_PYTHON
#include "BPY_extern.h"
@@ -95,7 +97,7 @@
/* Find the first available, non-duplicate name for a given constraint */
void unique_constraint_name (bConstraint *con, ListBase *list)
{
- BLI_uniquename(list, con, "Const", offsetof(bConstraint, name), 32);
+ BLI_uniquename(list, con, "Const", '.', offsetof(bConstraint, name), 32);
}
/* ----------------- Evaluation Loop Preparation --------------- */
@@ -389,15 +391,16 @@ void constraint_mat_convertspace (Object *ob, bPoseChannel *pchan, float mat[][4
/* ------------ General Target Matrix Tools ---------- */
/* function that sets the given matrix based on given vertex group in mesh */
-static void contarget_get_mesh_mat (Object *ob, char *substring, float mat[][4])
+static void contarget_get_mesh_mat (Scene *scene, Object *ob, char *substring, float mat[][4])
{
DerivedMesh *dm;
Mesh *me= ob->data;
- EditMesh *em = EM_GetEditMesh(me);
+ EditMesh *em = BKE_mesh_get_editmesh(me);
float vec[3] = {0.0f, 0.0f, 0.0f}, tvec[3];
float normal[3] = {0.0f, 0.0f, 0.0f}, plane[3];
float imat[3][3], tmat[3][3];
int dgroup;
+ short freeDM = 0;
/* initialize target matrix using target matrix */
Mat4CpyMat4(mat, ob->obmat);
@@ -410,10 +413,19 @@ static void contarget_get_mesh_mat (Object *ob, char *substring, float mat[][4])
if (em) {
/* target is in editmode, so get a special derived mesh */
dm = CDDM_from_editmesh(em, ob->data);
+ freeDM= 1;
}
else {
- /* when not in EditMode, this should exist */
- dm = (DerivedMesh *)ob->derivedFinal;
+ /* when not in EditMode, use the 'final' derived mesh
+ * - check if the custom data masks for derivedFinal mean that we can just use that
+ * (this is more effficient + sufficient for most cases)
+ */
+ if (ob->lastDataMask != CD_MASK_DERIVEDMESH) {
+ dm = mesh_get_derived_final(scene, ob, CD_MASK_DERIVEDMESH);
+ freeDM= 1;
+ }
+ else
+ dm = (DerivedMesh *)ob->derivedFinal;
}
/* only continue if there's a valid DerivedMesh */
@@ -479,10 +491,10 @@ static void contarget_get_mesh_mat (Object *ob, char *substring, float mat[][4])
}
/* free temporary DerivedMesh created (in EditMode case) */
- if (em) {
- if (dm) dm->release(dm);
- EM_EndEditMesh(me, em);
- }
+ if (dm && freeDM)
+ dm->release(dm);
+ if (em)
+ BKE_mesh_end_editmesh(me, em);
}
/* function that sets the given matrix based on given vertex group in lattice */
@@ -544,7 +556,7 @@ static void contarget_get_lattice_mat (Object *ob, char *substring, float mat[][
/* generic function to get the appropriate matrix for most target cases */
/* The cases where the target can be object data have not been implemented */
-static void constraint_target_to_mat4 (Object *ob, char *substring, float mat[][4], short from, short to, float headtail)
+static void constraint_target_to_mat4 (Scene *scene, Object *ob, char *substring, float mat[][4], short from, short to, float headtail)
{
/* Case OBJECT */
if (!strlen(substring)) {
@@ -561,7 +573,7 @@ static void constraint_target_to_mat4 (Object *ob, char *substring, float mat[][
* way as constraints can only really affect things on object/bone level.
*/
else if (ob->type == OB_MESH) {
- contarget_get_mesh_mat(ob, substring, mat);
+ contarget_get_mesh_mat(scene, ob, substring, mat);
constraint_mat_convertspace(ob, NULL, mat, from, to);
}
else if (ob->type == OB_LATTICE) {
@@ -643,7 +655,7 @@ static bConstraintTypeInfo CTI_CONSTRNAME = {
static void default_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstraintTarget *ct, float ctime)
{
if (VALID_CONS_TARGET(ct))
- constraint_target_to_mat4(ct->tar, ct->subtarget, ct->matrix, CONSTRAINT_SPACE_WORLD, ct->space, con->headtail);
+ constraint_target_to_mat4(cob->scene, ct->tar, ct->subtarget, ct->matrix, CONSTRAINT_SPACE_WORLD, ct->space, con->headtail);
else if (ct)
Mat4One(ct->matrix);
}
@@ -1058,7 +1070,7 @@ static void kinematic_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstra
bKinematicConstraint *data= con->data;
if (VALID_CONS_TARGET(ct))
- constraint_target_to_mat4(ct->tar, ct->subtarget, ct->matrix, CONSTRAINT_SPACE_WORLD, ct->space, con->headtail);
+ constraint_target_to_mat4(cob->scene, ct->tar, ct->subtarget, ct->matrix, CONSTRAINT_SPACE_WORLD, ct->space, con->headtail);
else if (ct) {
if (data->flag & CONSTRAINT_IK_AUTO) {
Object *ob= cob->ob;
@@ -1748,7 +1760,7 @@ static void pycon_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstraintT
/* firstly calculate the matrix the normal way, then let the py-function override
* this matrix if it needs to do so
*/
- constraint_target_to_mat4(ct->tar, ct->subtarget, ct->matrix, CONSTRAINT_SPACE_WORLD, ct->space, con->headtail);
+ constraint_target_to_mat4(cob->scene, ct->tar, ct->subtarget, ct->matrix, CONSTRAINT_SPACE_WORLD, ct->space, con->headtail);
/* only execute target calculation if allowed */
#ifndef DISABLE_PYTHON
@@ -1855,7 +1867,7 @@ static void actcon_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstraint
Mat4One(ct->matrix);
/* get the transform matrix of the target */
- constraint_target_to_mat4(ct->tar, ct->subtarget, tempmat, CONSTRAINT_SPACE_WORLD, ct->space, con->headtail);
+ constraint_target_to_mat4(cob->scene, ct->tar, ct->subtarget, tempmat, CONSTRAINT_SPACE_WORLD, ct->space, con->headtail);
/* determine where in transform range target is */
/* data->type is mapped as follows for backwards compatability:
@@ -1891,7 +1903,6 @@ static void actcon_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstraint
printf("do Action Constraint %s - Ob %s Pchan %s \n", con->name, cob->ob->id.name+2, (cob->pchan)?cob->pchan->name:NULL);
/* Get the appropriate information from the action */
- // XXX probably we might need some special filtering methods to make this more efficient
if (cob->type == CONSTRAINT_OBTYPE_BONE) {
Object workob;
bPose *pose;
@@ -1905,8 +1916,7 @@ static void actcon_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstraint
tchan= verify_pose_channel(pose, pchan->name);
/* evaluate action using workob (it will only set the PoseChannel in question) */
- // XXX we need some flags to prevent evaluation from setting disabled flags on all other settings
- what_does_obaction(cob->scene, cob->ob, &workob, pose, data->act, t);
+ what_does_obaction(cob->scene, cob->ob, &workob, pose, data->act, pchan->name, t);
/* convert animation to matrices for use here */
chan_calc_mat(tchan);
@@ -1919,7 +1929,8 @@ static void actcon_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstraint
Object workob;
/* evaluate using workob */
- what_does_obaction(cob->scene, cob->ob, &workob, NULL, data->act, t);
+ // FIXME: we don't have any consistent standards on limiting effects on object...
+ what_does_obaction(cob->scene, cob->ob, &workob, NULL, data->act, NULL, t);
object_to_mat4(&workob, ct->matrix);
}
else {
@@ -3111,6 +3122,165 @@ static bConstraintTypeInfo CTI_TRANSFORM = {
transform_evaluate /* evaluate */
};
+/* ---------- Shrinkwrap Constraint ----------- */
+
+static int shrinkwrap_get_tars (bConstraint *con, ListBase *list)
+{
+ if (con && list) {
+ bShrinkwrapConstraint *data = con->data;
+ bConstraintTarget *ct;
+
+ SINGLETARGETNS_GET_TARS(con, data->target, ct, list)
+
+ return 1;
+ }
+
+ return 0;
+}
+
+
+static void shrinkwrap_flush_tars (bConstraint *con, ListBase *list, short nocopy)
+{
+ if (con && list) {
+ bShrinkwrapConstraint *data = con->data;
+ bConstraintTarget *ct= list->first;
+
+ SINGLETARGETNS_FLUSH_TARS(con, data->target, ct, list, nocopy)
+ }
+}
+
+
+static void shrinkwrap_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstraintTarget *ct, float ctime)
+{
+ bShrinkwrapConstraint *scon = (bShrinkwrapConstraint *) con->data;
+
+ if( VALID_CONS_TARGET(ct) && (ct->tar->type == OB_MESH) )
+ {
+ int fail = FALSE;
+ float co[3] = {0.0f, 0.0f, 0.0f};
+ float no[3] = {0.0f, 0.0f, 0.0f};
+ float dist;
+
+ SpaceTransform transform;
+ DerivedMesh *target = object_get_derived_final(cob->scene, ct->tar, CD_MASK_BAREMESH);
+ BVHTreeRayHit hit;
+ BVHTreeNearest nearest;
+
+ BVHTreeFromMesh treeData;
+ memset( &treeData, 0, sizeof(treeData) );
+
+ nearest.index = -1;
+ nearest.dist = FLT_MAX;
+
+ hit.index = -1;
+ hit.dist = 100000.0f; //TODO should use FLT_MAX.. but normal projection doenst yet supports it
+
+ Mat4One(ct->matrix);
+
+ if(target != NULL)
+ {
+ space_transform_from_matrixs(&transform, cob->matrix, ct->tar->obmat);
+
+ switch(scon->shrinkType)
+ {
+ case MOD_SHRINKWRAP_NEAREST_SURFACE:
+ case MOD_SHRINKWRAP_NEAREST_VERTEX:
+
+ if(scon->shrinkType == MOD_SHRINKWRAP_NEAREST_VERTEX)
+ bvhtree_from_mesh_verts(&treeData, target, 0.0, 2, 6);
+ else
+ bvhtree_from_mesh_faces(&treeData, target, 0.0, 2, 6);
+
+ if(treeData.tree == NULL)
+ {
+ fail = TRUE;
+ break;
+ }
+
+ space_transform_apply(&transform, co);
+
+ BLI_bvhtree_find_nearest(treeData.tree, co, &nearest, treeData.nearest_callback, &treeData);
+
+ dist = VecLenf(co, nearest.co);
+ VecLerpf(co, co, nearest.co, (dist - scon->dist)/dist); /* linear interpolation */
+ space_transform_invert(&transform, co);
+ break;
+
+ case MOD_SHRINKWRAP_PROJECT:
+ if(scon->projAxis & MOD_SHRINKWRAP_PROJECT_OVER_X_AXIS) no[0] = 1.0f;
+ if(scon->projAxis & MOD_SHRINKWRAP_PROJECT_OVER_Y_AXIS) no[1] = 1.0f;
+ if(scon->projAxis & MOD_SHRINKWRAP_PROJECT_OVER_Z_AXIS) no[2] = 1.0f;
+
+ if(INPR(no,no) < FLT_EPSILON)
+ {
+ fail = TRUE;
+ break;
+ }
+
+ Normalize(no);
+
+
+ bvhtree_from_mesh_faces(&treeData, target, scon->dist, 4, 6);
+ if(treeData.tree == NULL)
+ {
+ fail = TRUE;
+ break;
+ }
+
+ if(normal_projection_project_vertex(0, co, no, &transform, treeData.tree, &hit, treeData.raycast_callback, &treeData) == FALSE)
+ {
+ fail = TRUE;
+ break;
+ }
+ VECCOPY(co, hit.co);
+ break;
+ }
+
+ free_bvhtree_from_mesh(&treeData);
+
+ target->release(target);
+
+ if(fail == TRUE)
+ {
+ /* Don't move the point */
+ co[0] = co[1] = co[2] = 0.0f;
+ }
+
+ /* co is in local object coordinates, change it to global and update target position */
+ VecMat4MulVecfl(co, cob->matrix, co);
+ VECCOPY(ct->matrix[3], co);
+ }
+ }
+}
+
+static void shrinkwrap_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *targets)
+{
+ bConstraintTarget *ct= targets->first;
+
+ /* only evaluate if there is a target */
+ if (VALID_CONS_TARGET(ct))
+ {
+ VECCOPY(cob->matrix[3], ct->matrix[3]);
+ }
+}
+
+static bConstraintTypeInfo CTI_SHRINKWRAP = {
+ CONSTRAINT_TYPE_SHRINKWRAP, /* type */
+ sizeof(bShrinkwrapConstraint), /* size */
+ "Shrinkwrap", /* name */
+ "bShrinkwrapConstraint", /* struct name */
+ NULL, /* free data */
+ NULL, /* relink data */
+ NULL, /* copy data */
+ NULL, /* new data */
+ shrinkwrap_get_tars, /* get constraint targets */
+ shrinkwrap_flush_tars, /* flush constraint targets */
+ shrinkwrap_get_tarmat, /* get a target matrix */
+ shrinkwrap_evaluate /* evaluate */
+};
+
+
+
/* ************************* Constraints Type-Info *************************** */
/* All of the constraints api functions use bConstraintTypeInfo structs to carry out
* and operations that involve constraint specific code.
@@ -3142,6 +3312,7 @@ static void constraints_init_typeinfo () {
constraintsTypeInfo[17]= &CTI_RIGIDBODYJOINT; /* RigidBody Constraint */
constraintsTypeInfo[18]= &CTI_CLAMPTO; /* ClampTo Constraint */
constraintsTypeInfo[19]= &CTI_TRANSFORM; /* Transformation Constraint */
+ constraintsTypeInfo[20]= &CTI_SHRINKWRAP; /* Shrinkwrap Constraint */
}
/* This function should be used for getting the appropriate type-info when only
@@ -3204,17 +3375,16 @@ void free_constraint_data (bConstraint *con)
}
/* Free all constraints from a constraint-stack */
-void free_constraints (ListBase *conlist)
+void free_constraints (ListBase *list)
{
bConstraint *con;
/* Free constraint data and also any extra data */
- for (con= conlist->first; con; con= con->next) {
+ for (con= list->first; con; con= con->next)
free_constraint_data(con);
- }
/* Free the whole list */
- BLI_freelistN(conlist);
+ BLI_freelistN(list);
}
/* Reassign links that constraints have to other data (called during file loading?) */
@@ -3267,6 +3437,23 @@ void copy_constraints (ListBase *dst, ListBase *src)
}
}
+/* finds the 'active' constraint in a constraint stack */
+bConstraint *constraints_get_active (ListBase *list)
+{
+ bConstraint *con;
+
+ /* search for the first constraint with the 'active' flag set */
+ if (list) {
+ for (con= list->first; con; con= con->next) {
+ if (con->flag & CONSTRAINT_ACTIVE)
+ return con;
+ }
+ }
+
+ /* no active constraint found */
+ return NULL;
+}
+
/* -------- Constraints and Proxies ------- */
/* Rescue all constraints tagged as being CONSTRAINT_PROXY_LOCAL (i.e. added to bone that's proxy-synced in this file) */
diff --git a/source/blender/blenkernel/intern/context.c b/source/blender/blenkernel/intern/context.c
index 47622611cb9..9d2830983e1 100644
--- a/source/blender/blenkernel/intern/context.c
+++ b/source/blender/blenkernel/intern/context.c
@@ -41,7 +41,6 @@
#include "BKE_context.h"
#include "BKE_main.h"
-#include "BKE_report.h"
#include "BKE_screen.h"
#include <string.h>
diff --git a/source/blender/blenkernel/intern/curve.c b/source/blender/blenkernel/intern/curve.c
index 30cb4016061..fab9669d55f 100644
--- a/source/blender/blenkernel/intern/curve.c
+++ b/source/blender/blenkernel/intern/curve.c
@@ -591,8 +591,8 @@ static void makecyclicknots(float *knots, short pnts, short order)
}
-/* type - 0: uniform, 1: endpoints, 2: bezier, note, cyclic nurbs are always uniform */
-void makeknots(Nurb *nu, short uv, short type)
+
+void makeknots(Nurb *nu, short uv)
{
if( (nu->type & 7)==CU_NURBS ) {
if(uv == 1) {
@@ -603,7 +603,7 @@ void makeknots(Nurb *nu, short uv, short type)
calcknots(nu->knotsu, nu->pntsu, nu->orderu, 0); /* cyclic should be uniform */
makecyclicknots(nu->knotsu, nu->pntsu, nu->orderu);
} else {
- calcknots(nu->knotsu, nu->pntsu, nu->orderu, type);
+ calcknots(nu->knotsu, nu->pntsu, nu->orderu, nu->flagu>>1);
}
}
else nu->knotsu= NULL;
@@ -616,7 +616,7 @@ void makeknots(Nurb *nu, short uv, short type)
calcknots(nu->knotsv, nu->pntsv, nu->orderv, 0); /* cyclic should be uniform */
makecyclicknots(nu->knotsv, nu->pntsv, nu->orderv);
} else {
- calcknots(nu->knotsv, nu->pntsv, nu->orderv, type);
+ calcknots(nu->knotsv, nu->pntsv, nu->orderv, nu->flagv>>1);
}
}
else nu->knotsv= NULL;
@@ -1572,8 +1572,8 @@ void makeBevelList(Object *ob)
while(nu) {
/* check if we will calculate tilt data */
- do_tilt = ((nu->type & CU_2D) && (cu->flag & CU_3D)==0) ? 0 : 1;
- do_radius = (do_tilt || cu->bevobj) ? 1 : 0; /* normal display uses the radius, better just to calculate them */
+ do_tilt = CU_DO_TILT(cu, nu);
+ do_radius = CU_DO_RADIUS(cu, nu); /* normal display uses the radius, better just to calculate them */
/* check we are a single point? also check we are not a surface and that the orderu is sane,
* enforced in the UI but can go wrong possibly */
@@ -2370,7 +2370,7 @@ void sethandlesNurb(ListBase *editnurb, short code)
if(code==1 || code==2) {
nu= editnurb->first;
while(nu) {
- if( (nu->type & 7)==1) {
+ if( (nu->type & 7)==CU_BEZIER) {
bezt= nu->bezt;
a= nu->pntsu;
while(a--) {
@@ -2400,7 +2400,7 @@ void sethandlesNurb(ListBase *editnurb, short code)
} else {
/* Toggle */
while(nu) {
- if( (nu->type & 7)==1) {
+ if( (nu->type & 7)==CU_BEZIER) {
bezt= nu->bezt;
a= nu->pntsu;
while(a--) {
@@ -2417,7 +2417,7 @@ void sethandlesNurb(ListBase *editnurb, short code)
}
nu= editnurb->first;
while(nu) {
- if( (nu->type & 7)==1) {
+ if( (nu->type & 7)==CU_BEZIER) {
bezt= nu->bezt;
a= nu->pntsu;
while(a--) {
diff --git a/source/blender/blenkernel/intern/customdata.c b/source/blender/blenkernel/intern/customdata.c
index daac8b71dd1..35f0b4b087c 100644
--- a/source/blender/blenkernel/intern/customdata.c
+++ b/source/blender/blenkernel/intern/customdata.c
@@ -708,14 +708,16 @@ const LayerTypeInfo LAYERTYPEINFO[CD_NUMTYPES] = {
{sizeof(MLoopCol), "MLoopCol", 1, "Col", NULL, NULL, layerInterp_mloopcol, NULL, layerDefault_mloopcol},
{sizeof(float)*3*4, "", 0, NULL, NULL, NULL, NULL, NULL, NULL},
{sizeof(MDisps), "MDisps", 1, NULL, layerCopy_mdisps,
- layerFree_mdisps, layerInterp_mdisps, layerSwap_mdisps, NULL}
+ layerFree_mdisps, layerInterp_mdisps, layerSwap_mdisps, NULL},
+ {sizeof(MCol)*4, "MCol", 4, "WeightCol", NULL, NULL, layerInterp_mcol,
+ layerSwap_mcol, layerDefault_mcol},
};
const char *LAYERTYPENAMES[CD_NUMTYPES] = {
"CDMVert", "CDMSticky", "CDMDeformVert", "CDMEdge", "CDMFace", "CDMTFace",
"CDMCol", "CDOrigIndex", "CDNormal", "CDFlags","CDMFloatProperty",
"CDMIntProperty","CDMStringProperty", "CDOrigSpace", "CDOrco", "CDMTexPoly", "CDMLoopUV",
- "CDMloopCol", "CDTangent", "CDMDisps"};
+ "CDMloopCol", "CDTangent", "CDMDisps", "CDWeightMCol"};
const CustomDataMask CD_MASK_BAREMESH =
CD_MASK_MVERT | CD_MASK_MEDGE | CD_MASK_MFACE;
@@ -729,7 +731,7 @@ const CustomDataMask CD_MASK_EDITMESH =
const CustomDataMask CD_MASK_DERIVEDMESH =
CD_MASK_MSTICKY | CD_MASK_MDEFORMVERT | CD_MASK_MTFACE |
CD_MASK_MCOL | CD_MASK_ORIGINDEX | CD_MASK_PROP_FLT | CD_MASK_PROP_INT |
- CD_MASK_PROP_STR | CD_MASK_ORIGSPACE | CD_MASK_ORCO | CD_MASK_TANGENT;
+ CD_MASK_PROP_STR | CD_MASK_ORIGSPACE | CD_MASK_ORCO | CD_MASK_TANGENT | CD_MASK_WEIGHT_MCOL;
const CustomDataMask CD_MASK_BMESH =
CD_MASK_MSTICKY | CD_MASK_MDEFORMVERT | CD_MASK_PROP_FLT | CD_MASK_PROP_INT | CD_MASK_PROP_STR;
const CustomDataMask CD_MASK_FACECORNERS =
diff --git a/source/blender/blenkernel/intern/depsgraph.c b/source/blender/blenkernel/intern/depsgraph.c
index 917fb7d1de4..dfe3b7ea279 100644
--- a/source/blender/blenkernel/intern/depsgraph.c
+++ b/source/blender/blenkernel/intern/depsgraph.c
@@ -33,8 +33,6 @@
#include "BLI_winstuff.h"
#endif
-//#include "BMF_Api.h"
-
#include "BLI_blenlib.h"
#include "BLI_arithb.h"
@@ -312,62 +310,29 @@ static void dag_add_driver_relation(AnimData *adt, DagForest *dag, DagNode *node
for (fcu= adt->drivers.first; fcu; fcu= fcu->next) {
ChannelDriver *driver= fcu->driver;
+ DriverTarget *dtar;
- if (driver->type == DRIVER_TYPE_PYTHON) {
- /* PyDriver / 'Expression' */
-
- /* skip if invalid in some way */
- if ((driver->flag & DRIVER_FLAG_INVALID) || (driver->expression[0] == '\0'))
- continue;
-#ifndef DISABLE_PYTHON
- else {
- /* now we need refs to all objects mentioned in this
- * pydriver expression, to call 'dag_add_relation'
- * for each of them */
- Object **obarray = NULL; // XXX BPY_pydriver_get_objects(fcu->driver);
- if (obarray) {
- Object *ob, **oba = obarray;
+ /* loop over targets, adding relationships as appropriate */
+ for (dtar= driver->targets.first; dtar; dtar= dtar->next) {
+ if (dtar->id) {
+ if (GS(dtar->id->name)==ID_OB) {
+ Object *ob= (Object *)dtar->id;
- while (*oba) {
- ob = *oba;
- node1 = dag_get_node(dag, ob);
- if (ob->type == OB_ARMATURE)
- dag_add_relation(dag, node1, node, isdata?DAG_RL_DATA_DATA:DAG_RL_DATA_OB, "Python Driver");
- else
- dag_add_relation(dag, node1, node, isdata?DAG_RL_OB_DATA:DAG_RL_OB_OB, "Python Driver");
- oba++;
- }
+ /* normal channel-drives-channel */
+ node1 = dag_get_node(dag, dtar->id);
- MEM_freeN(obarray);
+ /* check if bone... */
+ if ((ob->type==OB_ARMATURE) && dtar->rna_path && strstr(dtar->rna_path, "pose.pose_channels["))
+ dag_add_relation(dag, node1, node, isdata?DAG_RL_DATA_DATA:DAG_RL_DATA_OB, "Driver");
+ /* check if ob data */
+ else if (dtar->rna_path && strstr(dtar->rna_path, "data."))
+ dag_add_relation(dag, node1, node, isdata?DAG_RL_DATA_DATA:DAG_RL_DATA_OB, "Driver");
+ /* normal */
+ else
+ dag_add_relation(dag, node1, node, isdata?DAG_RL_OB_DATA:DAG_RL_OB_OB, "Driver");
}
}
-#endif /* DISABLE_PYTHON */
- }
- else if (driver->type == DRIVER_TYPE_ROTDIFF) {
- // XXX rotational difference
}
- else if (driver->id) {
- if(GS(driver->id->name)==ID_OB) {
- /* normal channel-drives-channel */
- node1 = dag_get_node(dag, driver->id);
-
- // XXX how to find out rnapath is bone?
- if( ((Object *)driver->id)->type==OB_ARMATURE )
- dag_add_relation(dag, node1, node, isdata?DAG_RL_DATA_DATA:DAG_RL_DATA_OB, "Ipo Driver");
- else
- dag_add_relation(dag, node1, node, isdata?DAG_RL_OB_DATA:DAG_RL_OB_OB, "Ipo Driver");
- }
- }
-#if 0 // XXX old 'normal' type
-
- else if (icu->driver->ob) {
- node1 = dag_get_node(dag, icu->driver->ob);
- if(icu->driver->blocktype==ID_AR)
- dag_add_relation(dag, node1, node, isdata?DAG_RL_DATA_DATA:DAG_RL_DATA_OB, "Ipo Driver");
- else
- dag_add_relation(dag, node1, node, isdata?DAG_RL_OB_DATA:DAG_RL_OB_OB, "Ipo Driver");
- }
-#endif // XXX old 'normal' type
}
}
@@ -447,35 +412,10 @@ static void build_dag_object(DagForest *dag, DagNode *scenenode, Scene *scene, O
/* driver dependencies, nla modifiers */
#if 0 // XXX old animation system
- if(ob->ipo)
- dag_add_driver_relation(ob->ipo, dag, node, 0);
-
- key= ob_get_key(ob);
- if(key && key->ipo)
- dag_add_driver_relation(key->ipo, dag, node, 1);
-
- for (conchan=ob->constraintChannels.first; conchan; conchan=conchan->next)
- if(conchan->ipo)
- dag_add_driver_relation(conchan->ipo, dag, node, 0);
-
- if(ob->action) {
- bActionChannel *chan;
- for (chan = ob->action->chanbase.first; chan; chan=chan->next){
- if(chan->ipo)
- dag_add_driver_relation(chan->ipo, dag, node, 1);
- for (conchan=chan->constraintChannels.first; conchan; conchan=conchan->next)
- if(conchan->ipo)
- dag_add_driver_relation(conchan->ipo, dag, node, 1);
- }
- }
if(ob->nlastrips.first) {
bActionStrip *strip;
bActionChannel *chan;
for(strip= ob->nlastrips.first; strip; strip= strip->next) {
- if(strip->act && strip->act!=ob->action)
- for (chan = strip->act->chanbase.first; chan; chan=chan->next)
- if(chan->ipo)
- dag_add_driver_relation(chan->ipo, dag, node, 1);
if(strip->modifiers.first) {
bActionModifier *amod;
for(amod= strip->modifiers.first; amod; amod= amod->next) {
diff --git a/source/blender/blenkernel/intern/effect.c b/source/blender/blenkernel/intern/effect.c
index 5217464c2c9..077a0c437d4 100644
--- a/source/blender/blenkernel/intern/effect.c
+++ b/source/blender/blenkernel/intern/effect.c
@@ -299,24 +299,22 @@ static float wind_func(struct RNG *rng, float strength)
return ret;
}
-
+/* maxdist: zero effect from this distance outwards (if usemax) */
+/* mindist: full effect up to this distance (if usemin) */
+/* power: falloff with formula 1/r^power */
static float falloff_func(float fac, int usemin, float mindist, int usemax, float maxdist, float power)
{
- if(!usemin)
- mindist= 0.0f;
+ /* first quick checks */
+ if(usemax && fac > maxdist)
+ return 0.0f;
- if(fac < mindist) {
+ if(usemin && fac < mindist)
return 1.0f;
- }
- else if(usemax) {
- if(fac>maxdist || (maxdist-mindist)<=0.0f)
- return 0.0f;
- fac= (fac-mindist)/(maxdist-mindist);
- return 1.0f - (float)pow((double)fac, (double)power);
- }
- else
- return pow((double)1.0f+fac-mindist, (double)-power);
+ if(!usemin)
+ mindist = 0.0;
+
+ return pow((double)1.0+fac-mindist, (double)-power);
}
static float falloff_func_dist(PartDeflect *pd, float fac)
@@ -443,14 +441,11 @@ void do_physical_effector(Scene *scene, Object *ob, float *opco, short type, flo
else
VecCopyf(mag_vec,vec_to_part);
- Normalize(mag_vec);
-
VecMulf(mag_vec,force_val*falloff);
VecSubf(field,field,mag_vec);
VecCopyf(mag_vec,velocity);
- /* 1.9 is an experimental value to get critical damping at damp=1.0 */
- VecMulf(mag_vec,damp*1.9f*(float)sqrt(force_val));
+ VecMulf(mag_vec,damp*2.0f*(float)sqrt(force_val));
VecSubf(field,field,mag_vec);
break;
case PFIELD_CHARGE:
diff --git a/source/blender/blenkernel/intern/exotic.c b/source/blender/blenkernel/intern/exotic.c
index 660a02bcb9e..5488d50e226 100644
--- a/source/blender/blenkernel/intern/exotic.c
+++ b/source/blender/blenkernel/intern/exotic.c
@@ -2388,7 +2388,7 @@ void write_stl(Scene *scene, char *str)
static void write_videoscape_mesh(Scene *scene, Object *ob, char *str)
{
Mesh *me= ob->data;
- EditMesh *em = EM_GetEditMesh(me);
+ EditMesh *em = BKE_mesh_get_editmesh(me);
Material *ma;
MFace *mface;
FILE *fp;
@@ -2490,7 +2490,7 @@ static void write_videoscape_mesh(Scene *scene, Object *ob, char *str)
fclose(fp);
- if (em) EM_EndEditMesh(me, em);
+ if (em) BKE_mesh_end_editmesh(me, em);
}
diff --git a/source/blender/blenkernel/intern/fcurve.c b/source/blender/blenkernel/intern/fcurve.c
index 2dfa1db171f..fed5ffc2ebd 100644
--- a/source/blender/blenkernel/intern/fcurve.c
+++ b/source/blender/blenkernel/intern/fcurve.c
@@ -5,6 +5,7 @@
#include <math.h>
#include <stdio.h>
+#include <stddef.h>
#include <string.h>
#include <float.h>
@@ -18,6 +19,7 @@
#include "BLI_blenlib.h"
#include "BLI_arithb.h"
+#include "BLI_noise.h"
#include "BKE_fcurve.h"
#include "BKE_curve.h"
@@ -98,7 +100,9 @@ FCurve *copy_fcurve (FCurve *fcu)
/* make a copy */
fcu_d= MEM_dupallocN(fcu);
+
fcu_d->next= fcu_d->prev= NULL;
+ fcu_d->grp= NULL;
/* copy curve data */
fcu_d->bezt= MEM_dupallocN(fcu_d->bezt);
@@ -171,13 +175,27 @@ FCurve *list_find_fcurve (ListBase *list, const char rna_path[], const int array
return NULL;
}
+short on_keyframe_fcurve(FCurve *fcu, float cfra)
+{
+ BezTriple *bezt;
+ unsigned i;
+
+ bezt= fcu->bezt;
+ for (i=0; i<fcu->totvert; i++, bezt++) {
+ if (IS_EQ(bezt->vec[1][0], cfra))
+ return 1;
+ }
+
+ return 0;
+}
+
/* Calculate the extents of F-Curve's data */
void calc_fcurve_bounds (FCurve *fcu, float *xmin, float *xmax, float *ymin, float *ymax)
{
float xminv=999999999.0f, xmaxv=-999999999.0f;
float yminv=999999999.0f, ymaxv=-999999999.0f;
short foundvert=0;
- int i;
+ unsigned int i;
if (fcu->totvert) {
if (fcu->bezt) {
@@ -192,8 +210,10 @@ void calc_fcurve_bounds (FCurve *fcu, float *xmin, float *xmax, float *ymin, flo
BezTriple *bezt;
for (bezt=fcu->bezt, i=0; i < fcu->totvert; bezt++, i++) {
- yminv= MIN2(yminv, bezt->vec[1][1]);
- ymaxv= MAX2(ymaxv, bezt->vec[1][1]);
+ if (bezt->vec[1][1] < yminv)
+ yminv= bezt->vec[1][1];
+ if (bezt->vec[1][1] > ymaxv)
+ ymaxv= bezt->vec[1][1];
}
}
}
@@ -209,8 +229,10 @@ void calc_fcurve_bounds (FCurve *fcu, float *xmin, float *xmax, float *ymin, flo
FPoint *fpt;
for (fpt=fcu->fpt, i=0; i < fcu->totvert; fpt++, i++) {
- yminv= MIN2(yminv, fpt->vec[1]);
- ymaxv= MAX2(ymaxv, fpt->vec[1]);
+ if (fpt->vec[1] < yminv)
+ yminv= fpt->vec[1];
+ if (fpt->vec[1] > ymaxv)
+ ymaxv= fpt->vec[1];
}
}
}
@@ -418,7 +440,7 @@ void calchandles_fcurve (FCurve *fcu)
void testhandles_fcurve (FCurve *fcu)
{
BezTriple *bezt;
- int a;
+ unsigned int a;
/* only beztriples have handles (bpoints don't though) */
if ELEM(NULL, fcu, fcu->bezt)
@@ -475,7 +497,7 @@ void sort_time_fcurve (FCurve *fcu)
/* currently, will only be needed when there are beztriples */
if (fcu->bezt) {
BezTriple *bezt;
- int a;
+ unsigned int a;
/* loop over ALL points to adjust position in array and recalculate handles */
for (a=0, bezt=fcu->bezt; a < fcu->totvert; a++, bezt++) {
@@ -509,7 +531,7 @@ void sort_time_fcurve (FCurve *fcu)
/* This function tests if any BezTriples are out of order, thus requiring a sort */
short test_time_fcurve (FCurve *fcu)
{
- int a;
+ unsigned int a;
/* sanity checks */
if (fcu == NULL)
@@ -543,19 +565,61 @@ short test_time_fcurve (FCurve *fcu)
/* Driver API --------------------------------- */
+/* This frees the driver target itself */
+void driver_free_target (ChannelDriver *driver, DriverTarget *dtar)
+{
+ /* sanity checks */
+ if (dtar == NULL)
+ return;
+
+ /* free target vars */
+ if (dtar->rna_path)
+ MEM_freeN(dtar->rna_path);
+
+ /* remove the target from the driver */
+ if (driver)
+ BLI_freelinkN(&driver->targets, dtar);
+ else
+ MEM_freeN(dtar);
+}
+
+/* Add a new driver target variable */
+DriverTarget *driver_add_new_target (ChannelDriver *driver)
+{
+ DriverTarget *dtar;
+
+ /* sanity checks */
+ if (driver == NULL)
+ return NULL;
+
+ /* make a new target */
+ dtar= MEM_callocN(sizeof(DriverTarget), "DriverTarget");
+ BLI_addtail(&driver->targets, dtar);
+
+ /* give the target a 'unique' name */
+ strcpy(dtar->name, "var");
+ BLI_uniquename(&driver->targets, dtar, "var", '_', offsetof(DriverTarget, name), 64);
+
+ /* return the target */
+ return dtar;
+}
+
/* This frees the driver itself */
void fcurve_free_driver(FCurve *fcu)
{
ChannelDriver *driver;
+ DriverTarget *dtar, *dtarn;
/* sanity checks */
if ELEM(NULL, fcu, fcu->driver)
return;
driver= fcu->driver;
- /* free RNA-paths, as these were allocated when getting the path string */
- if (driver->rna_path) MEM_freeN(driver->rna_path);
- if (driver->rna_path2) MEM_freeN(driver->rna_path2);
+ /* free driver targets */
+ for (dtar= driver->targets.first; dtar; dtar= dtarn) {
+ dtarn= dtar->next;
+ driver_free_target(driver, dtar);
+ }
/* free driver itself, then set F-Curve's point to this to NULL (as the curve may still be used) */
MEM_freeN(driver);
@@ -566,6 +630,7 @@ void fcurve_free_driver(FCurve *fcu)
ChannelDriver *fcurve_copy_driver (ChannelDriver *driver)
{
ChannelDriver *ndriver;
+ DriverTarget *dtar;
/* sanity checks */
if (driver == NULL)
@@ -573,8 +638,16 @@ ChannelDriver *fcurve_copy_driver (ChannelDriver *driver)
/* copy all data */
ndriver= MEM_dupallocN(driver);
- ndriver->rna_path= MEM_dupallocN(ndriver->rna_path);
- ndriver->rna_path2= MEM_dupallocN(ndriver->rna_path2);
+
+ /* copy targets */
+ ndriver->targets.first= ndriver->targets.last= NULL;
+ BLI_duplicatelist(&ndriver->targets, &driver->targets);
+
+ for (dtar= ndriver->targets.first; dtar; dtar= dtar->next) {
+ /* make a copy of target's rna path if available */
+ if (dtar->rna_path)
+ dtar->rna_path = MEM_dupallocN(dtar->rna_path);
+ }
/* return the new driver */
return ndriver;
@@ -582,10 +655,8 @@ ChannelDriver *fcurve_copy_driver (ChannelDriver *driver)
/* Driver Evaluation -------------------------- */
-/* Helper function to obtain a value using RNA from the specified source (for evaluating drivers)
- * - target: used to specify which of the two driver-targets to use
- */
-static float driver_get_driver_value (ChannelDriver *driver, short target)
+/* Helper function to obtain a value using RNA from the specified source (for evaluating drivers) */
+float driver_get_target_value (ChannelDriver *driver, DriverTarget *dtar)
{
PointerRNA id_ptr, ptr;
PropertyRNA *prop;
@@ -594,21 +665,15 @@ static float driver_get_driver_value (ChannelDriver *driver, short target)
int index;
float value= 0.0f;
- /* get RNA-pointer for the ID-block given in driver */
- if (target == 1) {
- /* second target */
- RNA_id_pointer_create(driver->id2, &id_ptr);
- id= driver->id2;
- path= driver->rna_path2;
- index= driver->array_index2;
- }
- else {
- /* first/main target */
- RNA_id_pointer_create(driver->id, &id_ptr);
- id= driver->id;
- path= driver->rna_path;
- index= driver->array_index;
- }
+ /* sanity check */
+ if ELEM(NULL, driver, dtar)
+ return 0.0f;
+
+ /* get RNA-pointer for the ID-block given in target */
+ RNA_id_pointer_create(dtar->id, &id_ptr);
+ id= dtar->id;
+ path= dtar->rna_path;
+ index= dtar->array_index;
/* error check for missing pointer... */
if (id == NULL) {
@@ -620,21 +685,21 @@ static float driver_get_driver_value (ChannelDriver *driver, short target)
/* get property to read from, and get value as appropriate */
if (RNA_path_resolve(&id_ptr, path, &ptr, &prop)) {
- switch (RNA_property_type(&ptr, prop)) {
+ switch (RNA_property_type(prop)) {
case PROP_BOOLEAN:
- if (RNA_property_array_length(&ptr, prop))
+ if (RNA_property_array_length(prop))
value= (float)RNA_property_boolean_get_index(&ptr, prop, index);
else
value= (float)RNA_property_boolean_get(&ptr, prop);
break;
case PROP_INT:
- if (RNA_property_array_length(&ptr, prop))
+ if (RNA_property_array_length(prop))
value= (float)RNA_property_int_get_index(&ptr, prop, index);
else
value= (float)RNA_property_int_get(&ptr, prop);
break;
case PROP_FLOAT:
- if (RNA_property_array_length(&ptr, prop))
+ if (RNA_property_array_length(prop))
value= RNA_property_float_get_index(&ptr, prop, index);
else
value= RNA_property_float_get(&ptr, prop);
@@ -650,21 +715,80 @@ static float driver_get_driver_value (ChannelDriver *driver, short target)
return value;
}
+/* Get two PoseChannels from the targets of the given Driver */
+static void driver_get_target_pchans2 (ChannelDriver *driver, bPoseChannel **pchan1, bPoseChannel **pchan2)
+{
+ DriverTarget *dtar;
+ short i = 0;
+
+ /* before doing anything */
+ *pchan1= NULL;
+ *pchan2= NULL;
+
+ /* only take the first two targets */
+ for (dtar= driver->targets.first; (dtar) && (i < 2); dtar=dtar->next, i++) {
+ PointerRNA id_ptr, ptr;
+ PropertyRNA *prop;
+
+ /* get RNA-pointer for the ID-block given in target */
+ if (dtar->id)
+ RNA_id_pointer_create(dtar->id, &id_ptr);
+ else
+ continue;
+
+ /* resolve path so that we have pointer to the right posechannel */
+ if (RNA_path_resolve(&id_ptr, dtar->rna_path, &ptr, &prop)) {
+ /* is pointer valid (i.e. pointing to an actual posechannel */
+ if ((ptr.type == &RNA_PoseChannel) && (ptr.data)) {
+ /* first or second target? */
+ if (i)
+ *pchan1= ptr.data;
+ else
+ *pchan2= ptr.data;
+ }
+ }
+ }
+}
+
/* Evaluate an Channel-Driver to get a 'time' value to use instead of "evaltime"
* - "evaltime" is the frame at which F-Curve is being evaluated
* - has to return a float value
*/
static float evaluate_driver (ChannelDriver *driver, float evaltime)
{
+ DriverTarget *dtar;
+
/* check if driver can be evaluated */
- if (driver->flag & DRIVER_FLAG_DISABLED)
+ if (driver->flag & DRIVER_FLAG_INVALID)
return 0.0f;
+ // TODO: the flags for individual targets need to be used too for more fine-grained support...
switch (driver->type) {
- case DRIVER_TYPE_CHANNEL: /* channel/setting drivers channel/setting */
- return driver_get_driver_value(driver, 0);
-
-
+ case DRIVER_TYPE_AVERAGE: /* average values of driver targets */
+ {
+ /* check how many targets there are first (i.e. just one?) */
+ if (driver->targets.first == driver->targets.last) {
+ /* just one target, so just use that */
+ dtar= driver->targets.first;
+ return driver_get_target_value(driver, dtar);
+ }
+ else {
+ /* more than one target, so average the values of the targets */
+ int tot = 0;
+ float value = 0.0f;
+
+ /* loop through targets, adding (hopefully we don't get any overflow!) */
+ for (dtar= driver->targets.first; dtar; dtar=dtar->next) {
+ value += driver_get_target_value(driver, dtar);
+ tot++;
+ }
+
+ /* return the average of these */
+ return (value / (float)tot);
+ }
+ }
+ break;
+
case DRIVER_TYPE_PYTHON: /* expression */
{
#ifndef DISABLE_PYTHON
@@ -684,11 +808,30 @@ static float evaluate_driver (ChannelDriver *driver, float evaltime)
break;
- case DRIVER_TYPE_ROTDIFF: /* difference of rotations of 2 bones (should be in same armature) */
+ case DRIVER_TYPE_ROTDIFF: /* difference of rotations of 2 bones (should ideally be in same armature) */
{
- /*
+ bPoseChannel *pchan, *pchan2;
float q1[4], q2[4], quat[4], angle;
+ /* get pose channels, and check if we've got two */
+ driver_get_target_pchans2(driver, &pchan, &pchan2);
+ if (ELEM(NULL, pchan, pchan2)) {
+ /* disable this driver, since it doesn't work correctly... */
+ driver->flag |= DRIVER_FLAG_INVALID;
+
+ /* check what the error was */
+ if ((pchan == NULL) && (pchan2 == NULL))
+ printf("Driver Evaluation Error: Rotational difference failed - first 2 targets invalid \n");
+ else if (pchan == NULL)
+ printf("Driver Evaluation Error: Rotational difference failed - first target not valid PoseChannel \n");
+ else if (pchan2 == NULL)
+ printf("Driver Evaluation Error: Rotational difference failed - second target not valid PoseChannel \n");
+
+ /* stop here... */
+ return 0.0f;
+ }
+
+ /* use the final posed locations */
Mat4ToQuat(pchan->pose_mat, q1);
Mat4ToQuat(pchan2->pose_mat, q2);
@@ -698,7 +841,6 @@ static float evaluate_driver (ChannelDriver *driver, float evaltime)
angle= ABS(angle);
return (angle > M_PI) ? (float)((2.0f * M_PI) - angle) : (float)(angle);
- */
}
break;
@@ -895,7 +1037,8 @@ static float fcurve_eval_keyframes (FCurve *fcu, BezTriple *bezts, float evaltim
{
BezTriple *bezt, *prevbezt, *lastbezt;
float v1[2], v2[2], v3[2], v4[2], opl[32], dx, fac;
- int a, b;
+ unsigned int a;
+ int b;
float cvalue = 0.0f;
/* get pointers */
@@ -1115,6 +1258,7 @@ static FModifierTypeInfo FMI_MODNAME = {
fcm_modname_copy, /* copy data */
fcm_modname_new_data, /* new data */
fcm_modname_verify, /* verify */
+ fcm_modname_time, /* evaluate time */
fcm_modname_evaluate /* evaluate */
};
#endif
@@ -1370,7 +1514,7 @@ static void fcm_generator_evaluate (FCurve *fcu, FModifier *fcm, float *cvalue,
/* execute function callback to set value if appropriate */
if (fn) {
- float value= data->coefficients[0]*fn(arg) + data->coefficients[3];
+ float value= (float)(data->coefficients[0]*fn(arg) + data->coefficients[3]);
if (data->flag & FCM_GENERATOR_ADDITIVE)
*cvalue += value;
@@ -1399,6 +1543,7 @@ static FModifierTypeInfo FMI_GENERATOR = {
fcm_generator_copy, /* copy data */
fcm_generator_new_data, /* new data */
fcm_generator_verify, /* verify */
+ NULL, /* evaluate time */
fcm_generator_evaluate /* evaluate */
};
@@ -1505,6 +1650,7 @@ static FModifierTypeInfo FMI_ENVELOPE = {
fcm_envelope_copy, /* copy data */
fcm_envelope_new_data, /* new data */
fcm_envelope_verify, /* verify */
+ NULL, /* evaluate time */
fcm_envelope_evaluate /* evaluate */
};
@@ -1520,6 +1666,11 @@ static FModifierTypeInfo FMI_ENVELOPE = {
* as appropriate
*/
+/* temp data used during evaluation */
+typedef struct tFCMED_Cycles {
+ float cycyofs; /* y-offset to apply */
+} tFCMED_Cycles;
+
static void fcm_cycles_new_data (void *mdata)
{
FMod_Cycles *data= (FMod_Cycles *)mdata;
@@ -1527,13 +1678,11 @@ static void fcm_cycles_new_data (void *mdata)
/* turn on cycles by default */
data->before_mode= data->after_mode= FCM_EXTRAPOLATE_CYCLIC;
}
-
-static void fcm_cycles_evaluate (FCurve *fcu, FModifier *fcm, float *cvalue, float evaltime)
+
+static float fcm_cycles_time (FCurve *fcu, FModifier *fcm, float cvalue, float evaltime)
{
FMod_Cycles *data= (FMod_Cycles *)fcm->data;
- ListBase mods = {NULL, NULL};
float prevkey[2], lastkey[2], cycyofs=0.0f;
- float new_value;
short side=0, mode=0;
int cycles=0;
@@ -1541,7 +1690,7 @@ static void fcm_cycles_evaluate (FCurve *fcu, FModifier *fcm, float *cvalue, flo
// FIXME...
if (fcm->prev) {
fcm->flag |= FMODIFIER_FLAG_DISABLED;
- return;
+ return evaltime;
}
/* calculate new evaltime due to cyclic interpolation */
@@ -1566,7 +1715,7 @@ static void fcm_cycles_evaluate (FCurve *fcu, FModifier *fcm, float *cvalue, flo
lastkey[1]= lastfpt->vec[1];
}
else
- return;
+ return evaltime;
/* check if modifier will do anything
* 1) if in data range, definitely don't do anything
@@ -1587,11 +1736,12 @@ static void fcm_cycles_evaluate (FCurve *fcu, FModifier *fcm, float *cvalue, flo
}
}
if ELEM(0, side, mode)
- return;
+ return evaltime;
/* find relative place within a cycle */
{
float cycdx=0, cycdy=0, ofs=0;
+ float cycle= 0;
/* ofs is start frame of cycle */
ofs= prevkey[0];
@@ -1602,19 +1752,22 @@ static void fcm_cycles_evaluate (FCurve *fcu, FModifier *fcm, float *cvalue, flo
/* check if cycle is infinitely small, to be point of being impossible to use */
if (cycdx == 0)
- return;
+ return evaltime;
+ /* calculate the 'number' of the cycle */
+ cycle= ((float)side * (evaltime - ofs) / cycdx);
+
/* check that cyclic is still enabled for the specified time */
if (cycles == 0) {
/* catch this case so that we don't exit when we have cycles=0
* as this indicates infinite cycles...
*/
}
- else if ( ((float)side * (evaltime - ofs) / cycdx) > (cycles+1) ) {
+ else if (cycle > (cycles+1)) {
/* we are too far away from range to evaluate
* TODO: but we should still hold last value...
*/
- return;
+ return evaltime;
}
/* check if 'cyclic extrapolation', and thus calculate y-offset for this cycle */
@@ -1624,21 +1777,49 @@ static void fcm_cycles_evaluate (FCurve *fcu, FModifier *fcm, float *cvalue, flo
}
/* calculate where in the cycle we are (overwrite evaltime to reflect this) */
- evaltime= (float)(fmod(evaltime-ofs, cycdx) + ofs);
+ if ((mode == FCM_EXTRAPOLATE_MIRROR) && ((int)(cycle) % 2)) {
+ /* when 'mirror' option is used and cycle number is odd, this cycle is played in reverse
+ * - for 'before' extrapolation, we need to flip in a different way, otherwise values past
+ * then end of the curve get referenced (result of fmod will be negative, and with different phase)
+ */
+ if (side < 0)
+ evaltime= (float)(prevkey[0] - fmod(evaltime-ofs, cycdx));
+ else
+ evaltime= (float)(lastkey[0] - fmod(evaltime-ofs, cycdx));
+ }
+ else {
+ /* the cycle is played normally... */
+ evaltime= (float)(fmod(evaltime-ofs, cycdx) + ofs);
+ }
if (evaltime < ofs) evaltime += cycdx;
}
+ /* store temp data if needed */
+ if (mode == FCM_EXTRAPOLATE_CYCLIC_OFFSET) {
+ tFCMED_Cycles *edata;
+
+ /* for now, this is just a float, but we could get more stuff... */
+ fcm->edata= edata= MEM_callocN(sizeof(tFCMED_Cycles), "tFCMED_Cycles");
+ edata->cycyofs= cycyofs;
+ }
- /* store modifiers after (and including ourself) before recalculating curve with new evaltime */
- mods= fcu->modifiers;
- fcu->modifiers.first= fcu->modifiers.last= NULL;
-
- /* re-enter the evaluation loop (but without the burden of evaluating any modifiers, so 'should' be relatively quick) */
- new_value= evaluate_fcurve(fcu, evaltime);
+ /* return the new frame to evaluate */
+ return evaltime;
+}
+
+static void fcm_cycles_evaluate (FCurve *fcu, FModifier *fcm, float *cvalue, float evaltime)
+{
+ tFCMED_Cycles *edata= (tFCMED_Cycles *)fcm->edata;
- /* restore modifiers, and set new value (don't assume everything is still ok after being re-entrant) */
- fcu->modifiers= mods;
- *cvalue= new_value + cycyofs;
+ /* use temp data */
+ if (edata) {
+ /* add cyclic offset - no need to check for now, otherwise the data wouldn't exist! */
+ *cvalue += edata->cycyofs;
+
+ /* free temp data */
+ MEM_freeN(edata);
+ fcm->edata= NULL;
+ }
}
static FModifierTypeInfo FMI_CYCLES = {
@@ -1652,12 +1833,48 @@ static FModifierTypeInfo FMI_CYCLES = {
NULL, /* copy data */
fcm_cycles_new_data, /* new data */
NULL /*fcm_cycles_verify*/, /* verify */
+ fcm_cycles_time, /* evaluate time */
fcm_cycles_evaluate /* evaluate */
};
/* Noise F-Curve Modifier --------------------------- */
-#if 0 // XXX not yet implemented
+static void fcm_noise_new_data (void *mdata)
+{
+ FMod_Noise *data= (FMod_Noise *)mdata;
+
+ /* defaults */
+ data->size= 1.0f;
+ data->strength= 1.0f;
+ data->phase= 1.0f;
+ data->depth = 0;
+ data->modification = FCM_NOISE_MODIF_REPLACE;
+}
+
+static void fcm_noise_evaluate (FCurve *fcu, FModifier *fcm, float *cvalue, float evaltime)
+{
+ FMod_Noise *data= (FMod_Noise *)fcm->data;
+ float noise;
+
+ noise = BLI_turbulence(data->size, evaltime, data->phase, 0.f, data->depth);
+
+ switch (data->modification) {
+ case FCM_NOISE_MODIF_ADD:
+ *cvalue= *cvalue + noise * data->strength;
+ break;
+ case FCM_NOISE_MODIF_SUBTRACT:
+ *cvalue= *cvalue - noise * data->strength;
+ break;
+ case FCM_NOISE_MODIF_MULTIPLY:
+ *cvalue= *cvalue * noise * data->strength;
+ break;
+ case FCM_NOISE_MODIF_REPLACE:
+ default:
+ *cvalue= *cvalue + (noise - 0.5f) * data->strength;
+ break;
+ }
+}
+
static FModifierTypeInfo FMI_NOISE = {
FMODIFIER_TYPE_NOISE, /* type */
sizeof(FMod_Noise), /* size */
@@ -1669,9 +1886,9 @@ static FModifierTypeInfo FMI_NOISE = {
NULL, /* copy data */
fcm_noise_new_data, /* new data */
NULL /*fcm_noise_verify*/, /* verify */
+ NULL, /* evaluate time */
fcm_noise_evaluate /* evaluate */
};
-#endif // XXX not yet implemented
/* Filter F-Curve Modifier --------------------------- */
@@ -1687,6 +1904,7 @@ static FModifierTypeInfo FMI_FILTER = {
NULL, /* copy data */
NULL, /* new data */
NULL /*fcm_filter_verify*/, /* verify */
+ NULL, /* evlauate time */
fcm_filter_evaluate /* evaluate */
};
#endif // XXX not yet implemented
@@ -1742,10 +1960,53 @@ static FModifierTypeInfo FMI_PYTHON = {
fcm_python_copy, /* copy data */
fcm_python_new_data, /* new data */
NULL /*fcm_python_verify*/, /* verify */
+ NULL /*fcm_python_time*/, /* evaluate time */
fcm_python_evaluate /* evaluate */
};
+/* Limits F-Curve Modifier --------------------------- */
+
+static float fcm_limits_time (FCurve *fcu, FModifier *fcm, float cvalue, float evaltime)
+{
+ FMod_Limits *data= (FMod_Limits *)fcm->data;
+
+ /* check for the time limits */
+ if ((data->flag & FCM_LIMIT_XMIN) && (evaltime < data->rect.xmin))
+ return data->rect.xmin;
+ if ((data->flag & FCM_LIMIT_XMAX) && (evaltime > data->rect.xmax))
+ return data->rect.xmax;
+
+ /* modifier doesn't change time */
+ return evaltime;
+}
+
+static void fcm_limits_evaluate (FCurve *fcu, FModifier *fcm, float *cvalue, float evaltime)
+{
+ FMod_Limits *data= (FMod_Limits *)fcm->data;
+
+ /* value limits now */
+ if ((data->flag & FCM_LIMIT_YMIN) && (*cvalue < data->rect.ymin))
+ *cvalue= data->rect.ymin;
+ if ((data->flag & FCM_LIMIT_YMAX) && (*cvalue > data->rect.ymax))
+ *cvalue= data->rect.ymax;
+}
+
+static FModifierTypeInfo FMI_LIMITS = {
+ FMODIFIER_TYPE_LIMITS, /* type */
+ sizeof(FMod_Limits), /* size */
+ FMI_TYPE_GENERATE_CURVE, /* action type */ /* XXX... err... */
+ FMI_REQUIRES_RUNTIME_CHECK, /* requirements */
+ "Limits", /* name */
+ "FMod_Limits", /* struct name */
+ NULL, /* free data */
+ NULL, /* copy data */
+ NULL, /* new data */
+ NULL, /* verify */
+ fcm_limits_time, /* evaluate time */
+ fcm_limits_evaluate /* evaluate */
+};
+
/* F-Curve Modifier API --------------------------- */
/* All of the F-Curve Modifier api functions use FModifierTypeInfo structs to carry out
* and operations that involve F-Curve modifier specific code.
@@ -1762,9 +2023,10 @@ static void fmods_init_typeinfo ()
fmodifiersTypeInfo[1]= &FMI_GENERATOR; /* Generator F-Curve Modifier */
fmodifiersTypeInfo[2]= &FMI_ENVELOPE; /* Envelope F-Curve Modifier */
fmodifiersTypeInfo[3]= &FMI_CYCLES; /* Cycles F-Curve Modifier */
- fmodifiersTypeInfo[4]= NULL/*&FMI_NOISE*/; /* Apply-Noise F-Curve Modifier */ // XXX unimplemented
+ fmodifiersTypeInfo[4]= &FMI_NOISE; /* Apply-Noise F-Curve Modifier */
fmodifiersTypeInfo[5]= NULL/*&FMI_FILTER*/; /* Filter F-Curve Modifier */ // XXX unimplemented
fmodifiersTypeInfo[6]= &FMI_PYTHON; /* Custom Python F-Curve Modifier */
+ fmodifiersTypeInfo[7]= &FMI_LIMITS; /* Limits F-Curve Modifier */
}
/* This function should be used for getting the appropriate type-info when only
@@ -1981,9 +2243,11 @@ void fcurve_set_active_modifier (FCurve *fcu, FModifier *fcm)
float evaluate_fcurve (FCurve *fcu, float evaltime)
{
FModifier *fcm;
- float cvalue = 0.0f;
+ float cvalue= 0.0f;
+ float devaltime;
/* if there is a driver (only if this F-Curve is acting as 'driver'), evaluate it to find value to use as "evaltime"
+ * since drivers essentially act as alternative input (i.e. in place of 'time') for F-Curves
* - this value will also be returned as the value of the 'curve', if there are no keyframes
*/
if (fcu->driver) {
@@ -1991,11 +2255,37 @@ float evaluate_fcurve (FCurve *fcu, float evaltime)
evaltime= cvalue= evaluate_driver(fcu->driver, evaltime);
}
- /* evaluate curve-data */
+ /* evaluate time modifications imposed by some F-Curve Modifiers
+ * - this step acts as an optimisation to prevent the F-Curve stack being evaluated
+ * several times by modifiers requesting the time be modified, as the final result
+ * would have required using the modified time
+ * - modifiers only ever recieve the unmodified time, as subsequent modifiers should be
+ * working on the 'global' result of the modified curve, not some localised segment,
+ * so nevaltime gets set to whatever the last time-modifying modifier likes...
+ * - we start from the end of the stack, as only the last one matters for now
+ */
+ devaltime= evaltime;
+
+ for (fcm= fcu->modifiers.last; fcm; fcm= fcm->prev) {
+ FModifierTypeInfo *fmi= fmodifier_get_typeinfo(fcm);
+
+ /* only evaluate if there's a callback for this */
+ // TODO: implement the 'influence' control feature...
+ if (fmi && fmi->evaluate_modifier_time) {
+ if ((fcm->flag & (FMODIFIER_FLAG_DISABLED|FMODIFIER_FLAG_MUTED)) == 0)
+ devaltime= fmi->evaluate_modifier_time(fcu, fcm, cvalue, evaltime);
+ break;
+ }
+ }
+
+ /* evaluate curve-data
+ * - 'devaltime' instead of 'evaltime', as this is the time that the last time-modifying
+ * F-Curve modifier on the stack requested the curve to be evaluated at
+ */
if (fcu->bezt)
- cvalue= fcurve_eval_keyframes(fcu, fcu->bezt, evaltime);
+ cvalue= fcurve_eval_keyframes(fcu, fcu->bezt, devaltime);
else if (fcu->fpt)
- cvalue= fcurve_eval_samples(fcu, fcu->fpt, evaltime);
+ cvalue= fcurve_eval_samples(fcu, fcu->fpt, devaltime);
/* evaluate modifiers */
for (fcm= fcu->modifiers.first; fcm; fcm= fcm->next) {
@@ -2004,7 +2294,7 @@ float evaluate_fcurve (FCurve *fcu, float evaltime)
/* only evaluate if there's a callback for this */
// TODO: implement the 'influence' control feature...
if (fmi && fmi->evaluate_modifier) {
- if ((fcm->flag & FMODIFIER_FLAG_DISABLED) == 0)
+ if ((fcm->flag & (FMODIFIER_FLAG_DISABLED|FMODIFIER_FLAG_MUTED)) == 0)
fmi->evaluate_modifier(fcu, fcm, &cvalue, evaltime);
}
}
diff --git a/source/blender/blenkernel/intern/font.c b/source/blender/blenkernel/intern/font.c
index ced8d3bdebb..b94652eb7c3 100644
--- a/source/blender/blenkernel/intern/font.c
+++ b/source/blender/blenkernel/intern/font.c
@@ -355,11 +355,7 @@ static VFontData *vfont_get_data(VFont *vfont)
}
if (pf) {
-#ifdef WITH_FREETYPE2
vfont->data= BLI_vfontdata_from_freetypefont(pf);
-#else
- vfont->data= BLI_vfontdata_from_psfont(pf);
-#endif
if (pf != vfont->packedfile) {
freePackedFile(pf);
}
@@ -398,12 +394,7 @@ VFont *load_vfont(char *name)
if (pf) {
VFontData *vfd;
-#ifdef WITH_FREETYPE2
vfd= BLI_vfontdata_from_freetypefont(pf);
-#else
- vfd= BLI_vfontdata_from_psfont(pf);
-#endif
-
if (vfd) {
vfont = alloc_libblock(&G.main->vfont, ID_VF, filename);
vfont->data = vfd;
@@ -755,21 +746,22 @@ struct chartrans *BKE_text_to_curve(Scene *scene, Object *ob, int mode)
che = che->next;
}
-#ifdef WITH_FREETYPE2
- // The character wasn't in the current curve base so load it
- // But if the font is <builtin> then do not try loading since whole font is in the memory already
+ /*
+ * The character wasn't in the current curve base so load it
+ * But if the font is <builtin> then do not try loading since
+ * whole font is in the memory already
+ */
if(che == NULL && strcmp(vfont->name, "<builtin>")) {
BLI_vfontchar_from_freetypefont(vfont, ascii);
}
- // Try getting the character again from the list
+ /* Try getting the character again from the list */
che = vfd->characters.first;
while(che) {
if(che->index == ascii)
break;
che = che->next;
}
-#endif
/* No VFont found */
if (vfont==0) {
diff --git a/source/blender/blenkernel/intern/gpencil.c b/source/blender/blenkernel/intern/gpencil.c
new file mode 100644
index 00000000000..6086aa58d40
--- /dev/null
+++ b/source/blender/blenkernel/intern/gpencil.c
@@ -0,0 +1,516 @@
+/**
+ * $Id: gpencil.c 19758 2009-04-16 13:10:08Z aligorith $
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2008, Blender Foundation
+ * This is a new part of Blender
+ *
+ * Contributor(s): Joshua Leung
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <stddef.h>
+#include <math.h>
+
+#include "MEM_guardedalloc.h"
+
+#include "IMB_imbuf.h"
+#include "IMB_imbuf_types.h"
+
+#include "BLI_arithb.h"
+#include "BLI_blenlib.h"
+
+#include "DNA_listBase.h"
+#include "DNA_gpencil_types.h"
+#include "DNA_object_types.h"
+#include "DNA_scene_types.h"
+#include "DNA_screen_types.h"
+#include "DNA_space_types.h"
+#include "DNA_userdef_types.h"
+#include "DNA_vec_types.h"
+
+#include "BKE_blender.h"
+#include "BKE_context.h"
+#include "BKE_curve.h"
+#include "BKE_global.h"
+#include "BKE_gpencil.h"
+#include "BKE_image.h"
+#include "BKE_library.h"
+#include "BKE_main.h"
+#include "BKE_utildefines.h"
+
+
+/* ************************************************** */
+/* GENERAL STUFF */
+
+/* --------- Memory Management ------------ */
+
+/* Free strokes belonging to a gp-frame */
+void free_gpencil_strokes (bGPDframe *gpf)
+{
+ bGPDstroke *gps, *gpsn;
+
+ /* error checking */
+ if (gpf == NULL) return;
+
+ /* free strokes */
+ for (gps= gpf->strokes.first; gps; gps= gpsn) {
+ gpsn= gps->next;
+
+ /* free stroke memory arrays, then stroke itself */
+ if (gps->points) MEM_freeN(gps->points);
+ BLI_freelinkN(&gpf->strokes, gps);
+ }
+}
+
+/* Free all of a gp-layer's frames */
+void free_gpencil_frames (bGPDlayer *gpl)
+{
+ bGPDframe *gpf, *gpfn;
+
+ /* error checking */
+ if (gpl == NULL) return;
+
+ /* free frames */
+ for (gpf= gpl->frames.first; gpf; gpf= gpfn) {
+ gpfn= gpf->next;
+
+ /* free strokes and their associated memory */
+ free_gpencil_strokes(gpf);
+ BLI_freelinkN(&gpl->frames, gpf);
+ }
+}
+
+/* Free all of the gp-layers for a viewport (list should be &gpd->layers or so) */
+void free_gpencil_layers (ListBase *list)
+{
+ bGPDlayer *gpl, *gpln;
+
+ /* error checking */
+ if (list == NULL) return;
+
+ /* delete layers*/
+ for (gpl= list->first; gpl; gpl= gpln) {
+ gpln= gpl->next;
+
+ /* free layers and their data */
+ free_gpencil_frames(gpl);
+ BLI_freelinkN(list, gpl);
+ }
+}
+
+/* Free all of GPencil datablock's related data, but not the block itself */
+void free_gpencil_data (bGPdata *gpd)
+{
+ /* free layers */
+ free_gpencil_layers(&gpd->layers);
+}
+
+/* -------- Container Creation ---------- */
+
+/* add a new gp-frame to the given layer */
+bGPDframe *gpencil_frame_addnew (bGPDlayer *gpl, int cframe)
+{
+ bGPDframe *gpf, *gf;
+ short state=0;
+
+ /* error checking */
+ if ((gpl == NULL) || (cframe <= 0))
+ return NULL;
+
+ /* allocate memory for this frame */
+ gpf= MEM_callocN(sizeof(bGPDframe), "bGPDframe");
+ gpf->framenum= cframe;
+
+ /* find appropriate place to add frame */
+ if (gpl->frames.first) {
+ for (gf= gpl->frames.first; gf; gf= gf->next) {
+ /* check if frame matches one that is supposed to be added */
+ if (gf->framenum == cframe) {
+ state= -1;
+ break;
+ }
+
+ /* if current frame has already exceeded the frame to add, add before */
+ if (gf->framenum > cframe) {
+ BLI_insertlinkbefore(&gpl->frames, gf, gpf);
+ state= 1;
+ break;
+ }
+ }
+ }
+
+ /* check whether frame was added successfully */
+ if (state == -1) {
+ MEM_freeN(gpf);
+ printf("Error: frame (%d) existed already for this layer \n", cframe);
+ }
+ else if (state == 0) {
+ /* add to end then! */
+ BLI_addtail(&gpl->frames, gpf);
+ }
+
+ /* return frame */
+ return gpf;
+}
+
+/* add a new gp-layer and make it the active layer */
+bGPDlayer *gpencil_layer_addnew (bGPdata *gpd)
+{
+ bGPDlayer *gpl;
+
+ /* check that list is ok */
+ if (gpd == NULL)
+ return NULL;
+
+ /* allocate memory for frame and add to end of list */
+ gpl= MEM_callocN(sizeof(bGPDlayer), "bGPDlayer");
+
+ /* add to datablock */
+ BLI_addtail(&gpd->layers, gpl);
+
+ /* set basic settings */
+ gpl->color[3]= 0.9f;
+ gpl->thickness = 3;
+
+ /* auto-name */
+ sprintf(gpl->info, "GP_Layer");
+ BLI_uniquename(&gpd->layers, gpl, "GP_Layer", '.', offsetof(bGPDlayer, info[0]), 128);
+
+ /* make this one the active one */
+ gpencil_layer_setactive(gpd, gpl);
+
+ /* return layer */
+ return gpl;
+}
+
+/* add a new gp-datablock */
+bGPdata *gpencil_data_addnew (char name[])
+{
+ bGPdata *gpd;
+
+ /* allocate memory for a new block */
+ gpd= alloc_libblock(&G.main->gpencil, ID_GD, name);
+
+ /* initial settings */
+ gpd->flag = (GP_DATA_DISPINFO|GP_DATA_EXPAND);
+
+ return gpd;
+}
+
+/* -------- Data Duplication ---------- */
+
+/* make a copy of a given gpencil frame */
+bGPDframe *gpencil_frame_duplicate (bGPDframe *src)
+{
+ bGPDstroke *gps, *gpsd;
+ bGPDframe *dst;
+
+ /* error checking */
+ if (src == NULL)
+ return NULL;
+
+ /* make a copy of the source frame */
+ dst= MEM_dupallocN(src);
+ dst->prev= dst->next= NULL;
+
+ /* copy strokes */
+ dst->strokes.first = dst->strokes.last= NULL;
+ for (gps= src->strokes.first; gps; gps= gps->next) {
+ /* make copy of source stroke, then adjust pointer to points too */
+ gpsd= MEM_dupallocN(gps);
+ gpsd->points= MEM_dupallocN(gps->points);
+
+ BLI_addtail(&dst->strokes, gpsd);
+ }
+
+ /* return new frame */
+ return dst;
+}
+
+/* make a copy of a given gpencil layer */
+bGPDlayer *gpencil_layer_duplicate (bGPDlayer *src)
+{
+ bGPDframe *gpf, *gpfd;
+ bGPDlayer *dst;
+
+ /* error checking */
+ if (src == NULL)
+ return NULL;
+
+ /* make a copy of source layer */
+ dst= MEM_dupallocN(src);
+ dst->prev= dst->next= NULL;
+
+ /* copy frames */
+ dst->frames.first= dst->frames.last= NULL;
+ for (gpf= src->frames.first; gpf; gpf= gpf->next) {
+ /* make a copy of source frame */
+ gpfd= gpencil_frame_duplicate(gpf);
+ BLI_addtail(&dst->frames, gpfd);
+
+ /* if source frame was the current layer's 'active' frame, reassign that too */
+ if (gpf == dst->actframe)
+ dst->actframe= gpfd;
+ }
+
+ /* return new layer */
+ return dst;
+}
+
+/* make a copy of a given gpencil datablock */
+bGPdata *gpencil_data_duplicate (bGPdata *src)
+{
+ bGPDlayer *gpl, *gpld;
+ bGPdata *dst;
+
+ /* error checking */
+ if (src == NULL)
+ return NULL;
+
+ /* make a copy of the base-data */
+ dst= MEM_dupallocN(src);
+
+ /* copy layers */
+ dst->layers.first= dst->layers.last= NULL;
+ for (gpl= src->layers.first; gpl; gpl= gpl->next) {
+ /* make a copy of source layer and its data */
+ gpld= gpencil_layer_duplicate(gpl);
+ BLI_addtail(&dst->layers, gpld);
+ }
+
+ /* return new */
+ return dst;
+}
+
+/* -------- GP-Frame API ---------- */
+
+/* delete the last stroke of the given frame */
+void gpencil_frame_delete_laststroke (bGPDlayer *gpl, bGPDframe *gpf)
+{
+ bGPDstroke *gps= (gpf) ? gpf->strokes.last : NULL;
+ int cfra = 1; // XXX FIXME!!!
+
+ /* error checking */
+ if (ELEM(NULL, gpf, gps))
+ return;
+
+ /* free the stroke and its data */
+ MEM_freeN(gps->points);
+ BLI_freelinkN(&gpf->strokes, gps);
+
+ /* if frame has no strokes after this, delete it */
+ if (gpf->strokes.first == NULL) {
+ gpencil_layer_delframe(gpl, gpf);
+ gpencil_layer_getframe(gpl, cfra, 0);
+ }
+}
+
+/* -------- GP-Layer API ---------- */
+
+/* get the appropriate gp-frame from a given layer
+ * - this sets the layer's actframe var (if allowed to)
+ * - extension beyond range (if first gp-frame is after all frame in interest and cannot add)
+ */
+bGPDframe *gpencil_layer_getframe (bGPDlayer *gpl, int cframe, short addnew)
+{
+ bGPDframe *gpf = NULL;
+ short found = 0;
+
+ /* error checking */
+ if (gpl == NULL) return NULL;
+ if (cframe <= 0) cframe = 1;
+
+ /* check if there is already an active frame */
+ if (gpl->actframe) {
+ gpf= gpl->actframe;
+
+ /* do not allow any changes to layer's active frame if layer is locked */
+ if (gpl->flag & GP_LAYER_LOCKED)
+ return gpf;
+ /* do not allow any changes to actframe if frame has painting tag attached to it */
+ if (gpf->flag & GP_FRAME_PAINT)
+ return gpf;
+
+ /* try to find matching frame */
+ if (gpf->framenum < cframe) {
+ for (; gpf; gpf= gpf->next) {
+ if (gpf->framenum == cframe) {
+ found= 1;
+ break;
+ }
+ else if ((gpf->next) && (gpf->next->framenum > cframe)) {
+ found= 1;
+ break;
+ }
+ }
+
+ /* set the appropriate frame */
+ if (addnew) {
+ if ((found) && (gpf->framenum == cframe))
+ gpl->actframe= gpf;
+ else
+ gpl->actframe= gpencil_frame_addnew(gpl, cframe);
+ }
+ else if (found)
+ gpl->actframe= gpf;
+ else
+ gpl->actframe= gpl->frames.last;
+ }
+ else {
+ for (; gpf; gpf= gpf->prev) {
+ if (gpf->framenum <= cframe) {
+ found= 1;
+ break;
+ }
+ }
+
+ /* set the appropriate frame */
+ if (addnew) {
+ if ((found) && (gpf->framenum == cframe))
+ gpl->actframe= gpf;
+ else
+ gpl->actframe= gpencil_frame_addnew(gpl, cframe);
+ }
+ else if (found)
+ gpl->actframe= gpf;
+ else
+ gpl->actframe= gpl->frames.first;
+ }
+ }
+ else if (gpl->frames.first) {
+ /* check which of the ends to start checking from */
+ const int first= ((bGPDframe *)(gpl->frames.first))->framenum;
+ const int last= ((bGPDframe *)(gpl->frames.last))->framenum;
+
+ if (abs(cframe-first) > abs(cframe-last)) {
+ /* find gp-frame which is less than or equal to cframe */
+ for (gpf= gpl->frames.last; gpf; gpf= gpf->prev) {
+ if (gpf->framenum <= cframe) {
+ found= 1;
+ break;
+ }
+ }
+ }
+ else {
+ /* find gp-frame which is less than or equal to cframe */
+ for (gpf= gpl->frames.first; gpf; gpf= gpf->next) {
+ if (gpf->framenum <= cframe) {
+ found= 1;
+ break;
+ }
+ }
+ }
+
+ /* set the appropriate frame */
+ if (addnew) {
+ if ((found) && (gpf->framenum == cframe))
+ gpl->actframe= gpf;
+ else
+ gpl->actframe= gpencil_frame_addnew(gpl, cframe);
+ }
+ else if (found)
+ gpl->actframe= gpf;
+ else {
+ /* unresolved errogenous situation! */
+ printf("Error: cannot find appropriate gp-frame \n");
+ /* gpl->actframe should still be NULL */
+ }
+ }
+ else {
+ /* currently no frames (add if allowed to) */
+ if (addnew)
+ gpl->actframe= gpencil_frame_addnew(gpl, cframe);
+ else {
+ /* don't do anything... this may be when no frames yet! */
+ /* gpl->actframe should still be NULL */
+ }
+ }
+
+ /* return */
+ return gpl->actframe;
+}
+
+/* delete the given frame from a layer */
+void gpencil_layer_delframe (bGPDlayer *gpl, bGPDframe *gpf)
+{
+ /* error checking */
+ if (ELEM(NULL, gpl, gpf))
+ return;
+
+ /* free the frame and its data */
+ free_gpencil_strokes(gpf);
+ BLI_freelinkN(&gpl->frames, gpf);
+ gpl->actframe = NULL;
+}
+
+/* get the active gp-layer for editing */
+bGPDlayer *gpencil_layer_getactive (bGPdata *gpd)
+{
+ bGPDlayer *gpl;
+
+ /* error checking */
+ if (ELEM(NULL, gpd, gpd->layers.first))
+ return NULL;
+
+ /* loop over layers until found (assume only one active) */
+ for (gpl=gpd->layers.first; gpl; gpl=gpl->next) {
+ if (gpl->flag & GP_LAYER_ACTIVE)
+ return gpl;
+ }
+
+ /* no active layer found */
+ return NULL;
+}
+
+/* set the active gp-layer */
+void gpencil_layer_setactive (bGPdata *gpd, bGPDlayer *active)
+{
+ bGPDlayer *gpl;
+
+ /* error checking */
+ if (ELEM3(NULL, gpd, gpd->layers.first, active))
+ return;
+
+ /* loop over layers deactivating all */
+ for (gpl=gpd->layers.first; gpl; gpl=gpl->next)
+ gpl->flag &= ~GP_LAYER_ACTIVE;
+
+ /* set as active one */
+ active->flag |= GP_LAYER_ACTIVE;
+}
+
+/* delete the active gp-layer */
+void gpencil_layer_delactive (bGPdata *gpd)
+{
+ bGPDlayer *gpl= gpencil_layer_getactive(gpd);
+
+ /* error checking */
+ if (ELEM(NULL, gpd, gpl))
+ return;
+
+ /* free layer */
+ free_gpencil_frames(gpl);
+ BLI_freelinkN(&gpd->layers, gpl);
+}
+
+/* ************************************************** */
diff --git a/source/blender/blenkernel/intern/image.c b/source/blender/blenkernel/intern/image.c
index 53b805f5f4c..629f34518b9 100644
--- a/source/blender/blenkernel/intern/image.c
+++ b/source/blender/blenkernel/intern/image.c
@@ -77,9 +77,6 @@
#include "RE_pipeline.h"
-/* for stamp drawing to an image */
-#include "BMF_Api.h"
-
#include "GPU_extensions.h"
#include "GPU_draw.h"
@@ -1069,6 +1066,9 @@ static void stampdata(Scene *scene, StampData *stamp_data, int do_prefix)
void BKE_stamp_buf(Scene *scene, unsigned char *rect, float *rectf, int width, int height, int channels)
{
+#if 0
+// XXX
+// This go back when BLF_draw_buffer is implemented - Diego
struct StampData stamp_data;
int x=1,y=1;
@@ -1188,7 +1188,7 @@ void BKE_stamp_buf(Scene *scene, unsigned char *rect, float *rectf, int width, i
buf_rectfill_area(rect, rectf, width, height, scene->r.bg_stamp, x-1, y-1, x+text_width+text_pad+1, y+font_height+1);
BMF_DrawStringBuf(font, stamp_data.strip, x+(text_pad/2), y, scene->r.fg_stamp, rect, rectf, width, height, channels);
}
-
+#endif // 0 XXX
}
void BKE_stamp_info(Scene *scene, struct ImBuf *ibuf)
diff --git a/source/blender/blenkernel/intern/ipo.c b/source/blender/blenkernel/intern/ipo.c
index b9417ccb467..6a01311f6fc 100644
--- a/source/blender/blenkernel/intern/ipo.c
+++ b/source/blender/blenkernel/intern/ipo.c
@@ -160,7 +160,7 @@ static AdrBit2Path ma_mode_bits[]= {
// ...
{MA_RAYTRANSP, "raytrace_transparency.enabled", 0},
{MA_RAYMIRROR, "raytrace_mirror.enabled", 0},
- {MA_HALO, "halo.enabled", 0}
+// {MA_HALO, "type", MA_TYPE_HALO}
};
/* ----------------- */
@@ -950,6 +950,7 @@ char *get_rna_access (int blocktype, int adrcode, char actname[], char constname
static ChannelDriver *idriver_to_cdriver (IpoDriver *idriver)
{
ChannelDriver *cdriver;
+ DriverTarget *dtar=NULL, *dtar2=NULL;
/* allocate memory for new driver */
cdriver= MEM_callocN(sizeof(ChannelDriver), "ChannelDriver");
@@ -957,6 +958,7 @@ static ChannelDriver *idriver_to_cdriver (IpoDriver *idriver)
/* if 'pydriver', just copy data across */
if (idriver->type == IPO_DRIVER_TYPE_PYTHON) {
/* PyDriver only requires the expression to be copied */
+ // TODO: but the expression will be useless...
cdriver->type = DRIVER_TYPE_PYTHON;
strcpy(cdriver->expression, idriver->name); // XXX is this safe?
}
@@ -965,12 +967,15 @@ static ChannelDriver *idriver_to_cdriver (IpoDriver *idriver)
if (idriver->blocktype == ID_AR) {
/* ID_PO */
if (idriver->adrcode == OB_ROT_DIFF) {
- if (G.f & G_DEBUG) printf("idriver_to_cdriver - rotdiff %p \n", idriver->ob);
/* Rotational Difference is a special type of driver now... */
cdriver->type= DRIVER_TYPE_ROTDIFF;
+ /* make 2 driver targets */
+ dtar= driver_add_new_target(cdriver);
+ dtar2= driver_add_new_target(cdriver);
+
/* driver must use bones from same armature... */
- cdriver->id= cdriver->id2= (ID *)idriver->ob;
+ dtar->id= dtar2->id= (ID *)idriver->ob;
/* paths for the two targets get the pointers to the relevant Pose-Channels
* - return pointers to Pose-Channels not rotation channels, as calculation code is picky
@@ -979,34 +984,36 @@ static ChannelDriver *idriver_to_cdriver (IpoDriver *idriver)
* - we use several hacks here - blocktype == -1 specifies that no property needs to be found, and
* providing a name for 'actname' will automatically imply Pose-Channel with name 'actname'
*/
- cdriver->rna_path= get_rna_access(-1, -1, idriver->name, NULL, NULL);
- cdriver->rna_path2= get_rna_access(-1, -1, idriver->name+DRIVER_NAME_OFFS, NULL, NULL);
+ dtar->rna_path= get_rna_access(-1, -1, idriver->name, NULL, NULL);
+ dtar2->rna_path= get_rna_access(-1, -1, idriver->name+DRIVER_NAME_OFFS, NULL, NULL);
}
else {
- if (G.f & G_DEBUG) printf("idriver_to_cdriver - arm %p \n", idriver->ob);
/* 'standard' driver */
- cdriver->type= DRIVER_TYPE_CHANNEL;
- cdriver->id= (ID *)idriver->ob;
+ cdriver->type= DRIVER_TYPE_AVERAGE;
+
+ /* make 1 driver target */
+ dtar= driver_add_new_target(cdriver);
+ dtar->id= (ID *)idriver->ob;
switch (idriver->adrcode) {
case OB_LOC_X: /* x,y,z location are quite straightforward */
- cdriver->rna_path= get_rna_access(ID_PO, AC_LOC_X, idriver->name, NULL, &cdriver->array_index);
+ dtar->rna_path= get_rna_access(ID_PO, AC_LOC_X, idriver->name, NULL, &dtar->array_index);
break;
case OB_LOC_Y:
- cdriver->rna_path= get_rna_access(ID_PO, AC_LOC_Y, idriver->name, NULL, &cdriver->array_index);
+ dtar->rna_path= get_rna_access(ID_PO, AC_LOC_Y, idriver->name, NULL, &dtar->array_index);
break;
case OB_LOC_Z:
- cdriver->rna_path= get_rna_access(ID_PO, AC_LOC_Z, idriver->name, NULL, &cdriver->array_index);
+ dtar->rna_path= get_rna_access(ID_PO, AC_LOC_Z, idriver->name, NULL, &dtar->array_index);
break;
case OB_SIZE_X: /* x,y,z scaling are also quite straightforward */
- cdriver->rna_path= get_rna_access(ID_PO, AC_SIZE_X, idriver->name, NULL, &cdriver->array_index);
+ dtar->rna_path= get_rna_access(ID_PO, AC_SIZE_X, idriver->name, NULL, &dtar->array_index);
break;
case OB_SIZE_Y:
- cdriver->rna_path= get_rna_access(ID_PO, AC_SIZE_Y, idriver->name, NULL, &cdriver->array_index);
+ dtar->rna_path= get_rna_access(ID_PO, AC_SIZE_Y, idriver->name, NULL, &dtar->array_index);
break;
case OB_SIZE_Z:
- cdriver->rna_path= get_rna_access(ID_PO, AC_SIZE_Z, idriver->name, NULL, &cdriver->array_index);
+ dtar->rna_path= get_rna_access(ID_PO, AC_SIZE_Z, idriver->name, NULL, &dtar->array_index);
break;
case OB_ROT_X: /* rotation - we need to be careful with this... XXX (another reason why we need eulers) */
@@ -1015,8 +1022,8 @@ static ChannelDriver *idriver_to_cdriver (IpoDriver *idriver)
{
// XXX this is not yet a 1:1 map, since we'd need euler rotations to make this work nicely (unless we make some hacks)
// XXX -1 here is a special hack...
- cdriver->rna_path= get_rna_access(ID_PO, -1, idriver->name, NULL, NULL);
- cdriver->array_index= idriver->adrcode - OB_ROT_X;
+ dtar->rna_path= get_rna_access(ID_PO, -1, idriver->name, NULL, NULL);
+ dtar->array_index= idriver->adrcode - OB_ROT_X;
}
break;
}
@@ -1024,14 +1031,16 @@ static ChannelDriver *idriver_to_cdriver (IpoDriver *idriver)
}
else {
/* ID_OB */
- if (G.f & G_DEBUG) printf("idriver_to_cdriver - ob %p \n", idriver->ob);
- cdriver->type= DRIVER_TYPE_CHANNEL;
- cdriver->id= (ID *)idriver->ob;
- cdriver->rna_path= get_rna_access(ID_OB, idriver->adrcode, NULL, NULL, &cdriver->array_index);
+ cdriver->type= DRIVER_TYPE_AVERAGE;
+
+ /* make 1 driver target */
+ dtar= driver_add_new_target(cdriver);
+
+ dtar->id= (ID *)idriver->ob;
+ dtar->rna_path= get_rna_access(ID_OB, idriver->adrcode, NULL, NULL, &dtar->array_index);
}
}
- if (G.f & G_DEBUG) printf("\tcdriver -> id = %p \n", cdriver->id);
/* free old driver */
MEM_freeN(idriver);
@@ -1073,7 +1082,7 @@ static void fcurve_add_to_list (ListBase *groups, ListBase *list, FCurve *fcu, c
BLI_snprintf(agrp->name, 64, grpname);
BLI_addtail(&tmp_act.groups, agrp);
- BLI_uniquename(&tmp_act.groups, agrp, "Group", offsetof(bActionGroup, name), 64);
+ BLI_uniquename(&tmp_act.groups, agrp, "Group", '.', offsetof(bActionGroup, name), 64);
}
}
diff --git a/source/blender/blenkernel/intern/library.c b/source/blender/blenkernel/intern/library.c
index 0712b53c5dd..d0e4c1a15bc 100644
--- a/source/blender/blenkernel/intern/library.c
+++ b/source/blender/blenkernel/intern/library.c
@@ -79,6 +79,7 @@
#include "DNA_space_types.h"
#include "DNA_windowmanager_types.h"
#include "DNA_anim_types.h"
+#include "DNA_gpencil_types.h"
#include "BLI_blenlib.h"
#include "BLI_dynstr.h"
@@ -114,6 +115,7 @@
#include "BKE_brush.h"
#include "BKE_idprop.h"
#include "BKE_particle.h"
+#include "BKE_gpencil.h"
#define MAX_IDPUP 60 /* was 24 */
@@ -199,6 +201,8 @@ ListBase *wich_libbase(Main *mainlib, short type)
return &(mainlib->particle);
case ID_WM:
return &(mainlib->wm);
+ case ID_GD:
+ return &(mainlib->gpencil);
}
return 0;
}
@@ -269,6 +273,7 @@ int set_listbasepointers(Main *main, ListBase **lb)
lb[a++]= &(main->scene);
lb[a++]= &(main->library);
lb[a++]= &(main->wm);
+ lb[a++]= &(main->gpencil);
lb[a]= NULL;
@@ -374,6 +379,9 @@ static ID *alloc_libblock_notest(short type)
case ID_WM:
id = MEM_callocN(sizeof(wmWindowManager), "Window manager");
break;
+ case ID_GD:
+ id = MEM_callocN(sizeof(bGPdata), "Grease Pencil");
+ break;
}
return id;
}
@@ -577,6 +585,9 @@ void free_libblock(ListBase *lb, void *idv)
if(free_windowmanager_cb)
free_windowmanager_cb(NULL, (wmWindowManager *)id);
break;
+ case ID_GD:
+ free_gpencil_data((bGPdata *)id);
+ break;
}
if (id->properties) {
@@ -986,14 +997,15 @@ static void lib_indirect_test_id(ID *id)
if(id->lib)
return;
-
+
if(GS(id->name)==ID_OB) {
Object *ob= (Object *)id;
bActionStrip *strip;
Mesh *me;
int a;
-
+
+ // XXX old animation system!
for (strip=ob->nlastrips.first; strip; strip=strip->next){
LIBTAG(strip->object);
LIBTAG(strip->act);
@@ -1090,6 +1102,27 @@ void test_idbutton(char *name)
if(idtest) if( new_id(lb, idtest, name)==0 ) sort_alpha_id(lb, idtest);
}
+void text_idbutton(struct ID *id, char *text)
+{
+ if(id) {
+ if(GS(id->name)==ID_SCE)
+ strcpy(text, "SCE: ");
+ else if(GS(id->name)==ID_SCE)
+ strcpy(text, "SCR: ");
+ else if(GS(id->name)==ID_MA && ((Material*)id)->use_nodes)
+ strcpy(text, "NT: ");
+ else {
+ text[0]= id->name[0];
+ text[1]= id->name[1];
+ text[2]= ':';
+ text[3]= ' ';
+ text[4]= 0;
+ }
+ }
+ else
+ strcpy(text, "");
+}
+
void rename_id(ID *id, char *name)
{
ListBase *lb;
diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c
index f554888d978..de6f2f7e558 100644
--- a/source/blender/blenkernel/intern/mesh.c
+++ b/source/blender/blenkernel/intern/mesh.c
@@ -66,11 +66,26 @@
/* -- */
#include "BKE_object.h"
#include "BKE_utildefines.h"
+#include "BKE_tessmesh.h"
#include "BLI_blenlib.h"
#include "BLI_editVert.h"
#include "BLI_arithb.h"
+EditMesh *BKE_mesh_get_editmesh(Mesh *me)
+{
+ return bmesh_to_editmesh(me->edit_btmesh->bm);
+}
+
+void BKE_mesh_end_editmesh(Mesh *me, EditMesh *em)
+{
+ BM_Free_Mesh(me->edit_btmesh->bm);
+
+ me->edit_btmesh->bm = editmesh_to_bmesh(em);
+ TM_RecalcTesselation(me->edit_btmesh);
+}
+
+
void mesh_update_customdata_pointers(Mesh *me)
{
me->mvert = CustomData_get_layer(&me->vdata, CD_MVERT);
diff --git a/source/blender/blenkernel/intern/modifier.c b/source/blender/blenkernel/intern/modifier.c
index c96f0af0ffa..ad48814f21c 100644
--- a/source/blender/blenkernel/intern/modifier.c
+++ b/source/blender/blenkernel/intern/modifier.c
@@ -6023,6 +6023,80 @@ static void collisionModifier_deformVerts(
}
+
+/* Surface */
+
+static void surfaceModifier_initData(ModifierData *md)
+{
+ SurfaceModifierData *surmd = (SurfaceModifierData*) md;
+
+ surmd->bvhtree = NULL;
+}
+
+static void surfaceModifier_freeData(ModifierData *md)
+{
+ SurfaceModifierData *surmd = (SurfaceModifierData*) md;
+
+ if (surmd)
+ {
+ if(surmd->bvhtree) {
+ free_bvhtree_from_mesh(surmd->bvhtree);
+ MEM_freeN(surmd->bvhtree);
+ }
+
+ surmd->dm->release(surmd->dm);
+
+ surmd->bvhtree = NULL;
+ surmd->dm = NULL;
+ }
+}
+
+static int surfaceModifier_dependsOnTime(ModifierData *md)
+{
+ return 1;
+}
+
+static void surfaceModifier_deformVerts(
+ ModifierData *md, Object *ob, DerivedMesh *derivedData,
+ float (*vertexCos)[3], int numVerts)
+{
+ SurfaceModifierData *surmd = (SurfaceModifierData*) md;
+ unsigned int numverts = 0, i = 0;
+
+ if(surmd->dm)
+ surmd->dm->release(surmd->dm);
+
+ /* if possible use/create DerivedMesh */
+ if(derivedData) surmd->dm = CDDM_copy(derivedData);
+ else if(ob->type==OB_MESH) surmd->dm = CDDM_from_mesh(ob->data, ob);
+
+ if(!ob->pd)
+ {
+ printf("surfaceModifier_deformVerts: Should not happen!\n");
+ return;
+ }
+
+ if(surmd->dm)
+ {
+ CDDM_apply_vert_coords(surmd->dm, vertexCos);
+ CDDM_calc_normals(surmd->dm);
+
+ numverts = surmd->dm->getNumVerts ( surmd->dm );
+
+ /* convert to global coordinates */
+ for(i = 0; i<numverts; i++)
+ Mat4MulVecfl(ob->obmat, CDDM_get_vert(surmd->dm, i)->co);
+
+ if(surmd->bvhtree)
+ free_bvhtree_from_mesh(surmd->bvhtree);
+ else
+ surmd->bvhtree = MEM_callocN(sizeof(BVHTreeFromMesh), "BVHTreeFromMesh");
+
+ bvhtree_from_mesh_faces(surmd->bvhtree, surmd->dm, 0.0, 2, 6);
+ }
+}
+
+
/* Boolean */
static void booleanModifier_copyData(ModifierData *md, ModifierData *target)
@@ -6071,22 +6145,44 @@ static DerivedMesh *booleanModifier_applyModifier(
{
// XXX doesn't handle derived data
BooleanModifierData *bmd = (BooleanModifierData*) md;
+ DerivedMesh *dm = mesh_get_derived_final(md->scene, bmd->object, CD_MASK_BAREMESH);
/* we do a quick sanity check */
- if(((Mesh *)ob->data)->totface > 3
- && bmd->object && ((Mesh *)bmd->object->data)->totface > 3) {
- DerivedMesh *result = NewBooleanDerivedMesh(bmd->object, ob,
+ if(dm && (derivedData->getNumFaces(derivedData) > 3)
+ && bmd->object && dm->getNumFaces(dm) > 3) {
+ DerivedMesh *result = NewBooleanDerivedMesh(dm, bmd->object, derivedData, ob,
1 + bmd->operation);
+ if(dm)
+ dm->release(dm);
+
/* if new mesh returned, return it; otherwise there was
* an error, so delete the modifier object */
if(result)
return result;
else
bmd->object = NULL;
- }
+ }
+
+ if(dm)
+ dm->release(dm);
- return derivedData;
+ return derivedData;
+}
+
+CustomDataMask booleanModifier_requiredDataMask(ModifierData *md)
+{
+ CustomDataMask dataMask = (1 << CD_MTFACE) + (1 << CD_MEDGE);
+
+ dataMask |= (1 << CD_MDEFORMVERT);
+
+ /* particles only need this if they are after a non deform modifier, and
+ * the modifier stack will only create them in that case. */
+// dataMask |= CD_MASK_ORIGSPACE;
+
+// dataMask |= CD_MASK_ORCO;
+
+ return dataMask;
}
/* Particles */
@@ -6380,6 +6476,7 @@ static DerivedMesh * particleInstanceModifier_applyModifier(
if(psys->flag & (PSYS_HAIR_DONE|PSYS_KEYED)){
float min_r[3], max_r[3];
+ INIT_MINMAX(min_r, max_r);
dm->getMinMax(dm, min_r, max_r);
min_co=min_r[track];
max_co=max_r[track];
@@ -7190,7 +7287,7 @@ static DerivedMesh * explodeModifier_explodeMesh(ExplodeModifierData *emd,
pa= pars+i;
/* get particle state */
- psys_particle_on_emitter(psmd,part->from,pa->num,-1,pa->fuv,pa->foffset,loc0,nor,0,0,0,0);
+ psys_particle_on_emitter(psmd,part->from,pa->num,pa->num_dmcache,pa->fuv,pa->foffset,loc0,nor,0,0,0,0);
Mat4MulVecfl(ob->obmat,loc0);
state.time=cfra;
@@ -7246,7 +7343,7 @@ static DerivedMesh * explodeModifier_explodeMesh(ExplodeModifierData *emd,
*mf = source;
- test_index_face(mf, &explode->faceData, i, (mf->v4 ? 4 : 3));
+ test_index_face(mf, &explode->faceData, i, (orig_v4 ? 4 : 3));
}
MEM_printmemlist_stats();
@@ -7543,6 +7640,7 @@ static void meshdeformModifier_do(
DerivedMesh *tmpdm, *cagedm;
MDeformVert *dvert = NULL;
MDeformWeight *dw;
+ EditMesh *em = BKE_mesh_get_editmesh(me);
MVert *cagemvert;
float imat[4][4], cagemat[4][4], iobmat[4][4], icagemat[3][3], cmat[4][4];
float weight, totweight, fac, co[3], *weights, (*dco)[3], (*bindcos)[3];
@@ -7556,6 +7654,7 @@ static void meshdeformModifier_do(
tmpdm= editbmesh_get_derived_cage_and_final(md->scene, ob, bem, &cagedm, 0);
if(tmpdm)
tmpdm->release(tmpdm);
+ BKE_mesh_end_editmesh(me, em);
}
else
cagedm= mmd->object->derivedFinal;
@@ -8268,16 +8367,24 @@ ModifierTypeInfo *modifierType_getInfo(ModifierType type)
mti->deformVerts = collisionModifier_deformVerts;
// mti->copyData = collisionModifier_copyData;
+ mti = INIT_TYPE(Surface);
+ mti->type = eModifierTypeType_OnlyDeform;
+ mti->initData = surfaceModifier_initData;
+ mti->flags = eModifierTypeFlag_AcceptsMesh;
+ mti->dependsOnTime = surfaceModifier_dependsOnTime;
+ mti->freeData = surfaceModifier_freeData;
+ mti->deformVerts = surfaceModifier_deformVerts;
+
mti = INIT_TYPE(Boolean);
mti->type = eModifierTypeType_Nonconstructive;
mti->flags = eModifierTypeFlag_AcceptsMesh
- | eModifierTypeFlag_RequiresOriginalData
| eModifierTypeFlag_UsesPointCache;
mti->copyData = booleanModifier_copyData;
mti->isDisabled = booleanModifier_isDisabled;
mti->applyModifier = booleanModifier_applyModifier;
mti->foreachObjectLink = booleanModifier_foreachObjectLink;
mti->updateDepgraph = booleanModifier_updateDepgraph;
+ mti->requiredDataMask = booleanModifier_requiredDataMask;
mti = INIT_TYPE(MeshDeform);
mti->type = eModifierTypeType_OnlyDeform;
diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c
index 1acad4e9e86..941e73982a5 100644
--- a/source/blender/blenkernel/intern/node.c
+++ b/source/blender/blenkernel/intern/node.c
@@ -1739,7 +1739,8 @@ void ntreeSolveOrder(bNodeTree *ntree)
might be different for editor or for "real" use... */
}
-/* should be callback! */
+/* Should be callback! */
+/* Do not call execs here */
void NodeTagChanged(bNodeTree *ntree, bNode *node)
{
if(ntree->type==NTREE_COMPOSIT) {
@@ -1753,8 +1754,6 @@ void NodeTagChanged(bNodeTree *ntree, bNode *node)
}
node->need_exec= 1;
}
- else if(ntree->type == NTREE_TEXTURE)
- ntreeTexUpdatePreviews(ntree);
}
void NodeTagIDChanged(bNodeTree *ntree, ID *id)
@@ -2067,6 +2066,11 @@ void ntreeBeginExecTree(bNodeTree *ntree)
/* tag used outputs, so we know when we can skip operations */
for(node= ntree->nodes.first; node; node= node->next) {
bNodeSocket *sock;
+
+ /* composite has own need_exec tag handling */
+ if(ntree->type!=NTREE_COMPOSIT)
+ node->need_exec= 1;
+
for(sock= node->inputs.first; sock; sock= sock->next) {
if(sock->link) {
ns= ntree->stack + sock->link->fromsock->stack_index;
@@ -2075,9 +2079,22 @@ void ntreeBeginExecTree(bNodeTree *ntree)
}
else
sock->ns.sockettype= sock->type;
+
+ if(sock->link) {
+ bNodeLink *link= sock->link;
+ /* this is the test for a cyclic case */
+ if(link->fromnode && link->tonode) {
+ if(link->fromnode->level >= link->tonode->level && link->tonode->level!=0xFFF);
+ else {
+ node->need_exec= 0;
+ }
+ }
+ }
}
+
if(node->type==NODE_GROUP && node->id)
group_tag_used_outputs(node, ntree->stack);
+
}
if(ntree->type==NTREE_COMPOSIT)
@@ -2160,13 +2177,15 @@ void ntreeExecTree(bNodeTree *ntree, void *callerdata, int thread)
}
for(node= ntree->nodes.first; node; node= node->next) {
- if(node->typeinfo->execfunc) {
- node_get_stack(node, stack, nsin, nsout);
- node->typeinfo->execfunc(callerdata, node, nsin, nsout);
- }
- else if(node->type==NODE_GROUP && node->id) {
- node_get_stack(node, stack, nsin, nsout);
- node_group_execute(stack, callerdata, node, nsin, nsout);
+ if(node->need_exec) {
+ if(node->typeinfo->execfunc) {
+ node_get_stack(node, stack, nsin, nsout);
+ node->typeinfo->execfunc(callerdata, node, nsin, nsout);
+ }
+ else if(node->type==NODE_GROUP && node->id) {
+ node_get_stack(node, stack, nsin, nsout);
+ node_group_execute(stack, callerdata, node, nsin, nsout);
+ }
}
}
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index 2c851a1115a..77775e431f3 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -1643,7 +1643,7 @@ static void give_parvert(Object *par, int nr, float *vec)
if(par->type==OB_MESH) {
Mesh *me= par->data;
- em = EM_GetEditMesh(me);
+ em = BKE_mesh_get_editmesh(me);
if(em) {
EditVert *eve;
@@ -1654,7 +1654,7 @@ static void give_parvert(Object *par, int nr, float *vec)
break;
}
}
- EM_EndEditMesh(me, em);
+ BKE_mesh_end_editmesh(me, em);
}
else {
DerivedMesh *dm = par->derivedFinal;
@@ -2299,7 +2299,7 @@ void object_handle_update(Scene *scene, Object *ob)
if(ob->type==OB_MESH) {
BMEditMesh *em = ((Mesh*)ob->data)->edit_btmesh;
- // here was vieweditdatamask? XXX
+ // here was vieweditdatamask? XXX
if(ob==scene->obedit) {
makeDerivedMesh(scene, ob, em, CD_MASK_BAREMESH);
} else
diff --git a/source/blender/blenkernel/intern/particle.c b/source/blender/blenkernel/intern/particle.c
index 2b1dcc782c6..7d998a481f6 100644
--- a/source/blender/blenkernel/intern/particle.c
+++ b/source/blender/blenkernel/intern/particle.c
@@ -1,7 +1,7 @@
/* particle.c
*
*
- * $Id: particle.c $
+ * $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
*
@@ -1460,7 +1460,7 @@ static void do_prekink(ParticleKey *state, ParticleKey *par, float *par_rot, flo
case PART_KINK_WAVE:
vec[axis]=1.0;
if(obmat)
- Mat4MulVecfl(obmat,vec);
+ Mat4Mul3Vecfl(obmat,vec);
if(par_rot)
QuatMulVecf(par_rot,vec);
@@ -1806,10 +1806,13 @@ void psys_find_parents(Object *ob, ParticleSystemModifierData *psmd, ParticleSys
int from=PART_FROM_FACE;
totparent=(int)(totchild*part->parents*0.3);
+ if(G.rendering && part->child_nbr && part->ren_child_nbr)
+ totparent*=(float)part->child_nbr/(float)part->ren_child_nbr;
+
tree=BLI_kdtree_new(totparent);
for(p=0,cpa=psys->child; p<totparent; p++,cpa++){
- psys_particle_on_emitter(psmd,from,cpa->num,-1,cpa->fuv,cpa->foffset,co,0,0,0,orco,0);
+ psys_particle_on_emitter(psmd,from,cpa->num,DMCACHE_ISCHILD,cpa->fuv,cpa->foffset,co,0,0,0,orco,0);
BLI_kdtree_insert(tree, p, orco, NULL);
}
@@ -1873,6 +1876,10 @@ int psys_threads_init_path(ParticleThread *threads, Scene *scene, float cfra, in
if(totchild && part->from!=PART_FROM_PARTICLE && part->childtype==PART_CHILD_FACES){
totparent=(int)(totchild*part->parents*0.3);
+
+ if(G.rendering && part->child_nbr && part->ren_child_nbr)
+ totparent*=(float)part->child_nbr/(float)part->ren_child_nbr;
+
/* part->parents could still be 0 so we can't test with totparent */
between=1;
}
@@ -1905,6 +1912,7 @@ int psys_threads_init_path(ParticleThread *threads, Scene *scene, float cfra, in
ctx->steps= steps;
ctx->totchild= totchild;
ctx->totparent= totparent;
+ ctx->parent_pass= 0;
ctx->cfra= cfra;
psys->lattice = psys_get_lattice(scene, ob, psys);
@@ -1944,14 +1952,14 @@ void psys_thread_create_path(ParticleThread *thread, struct ChildParticle *cpa,
ParticleCacheKey *state, *par = NULL, *key[4];
ParticleData *pa=NULL;
ParticleTexture ptex;
- float *cpa_fuv=0;
+ float *cpa_fuv=0, *par_rot=0;
float co[3], orco[3], ornor[3], t, rough_t, cpa_1st[3], dvec[3];
float branch_begin, branch_end, branch_prob, branchfac, rough_rand;
float pa_rough1, pa_rough2, pa_roughe;
float length, pa_length, pa_clump, pa_kink, pa_effector;
float max_length = 1.0f, cur_length = 0.0f;
float eff_length, eff_vec[3];
- int k, cpa_num, guided=0;
+ int k, cpa_num, guided = 0;
short cpa_from;
if(part->flag & PART_BRANCHING) {
@@ -2055,9 +2063,10 @@ void psys_thread_create_path(ParticleThread *thread, struct ChildParticle *cpa,
ptex.clump=1.0;
ptex.kink=1.0;
ptex.rough= 1.0;
+ ptex.exist= 1.0;
get_cpa_texture(ctx->dm,ctx->ma,cpa_num,cpa_fuv,orco,&ptex,
- MAP_PA_LENGTH|MAP_PA_CLUMP|MAP_PA_KINK|MAP_PA_ROUGH);
+ MAP_PA_DENS|MAP_PA_LENGTH|MAP_PA_CLUMP|MAP_PA_KINK|MAP_PA_ROUGH);
pa_length=ptex.length;
pa_clump=ptex.clump;
@@ -2067,6 +2076,11 @@ void psys_thread_create_path(ParticleThread *thread, struct ChildParticle *cpa,
pa_roughe=ptex.rough;
pa_effector= 1.0f;
+ if(ptex.exist < cpa->rand[1]) {
+ keys->steps = -1;
+ return;
+ }
+
if(ctx->vg_length)
pa_length*=psys_interpolate_value_from_verts(ctx->dm,cpa_from,cpa_num,cpa_fuv,ctx->vg_length);
if(ctx->vg_clump)
@@ -2137,15 +2151,16 @@ void psys_thread_create_path(ParticleThread *thread, struct ChildParticle *cpa,
t=(float)k/(float)ctx->steps;
if(ctx->totparent){
- if(i>=ctx->totparent)
- /* this is not threadsafe, but should only happen for
- * branching particles particles, which are not threaded */
+ if(i>=ctx->totparent) {
+ /* this is now threadsafe, virtual parents are calculated before rest of children */
par = cache[cpa->parent] + k;
+ }
else
par=0;
}
else if(cpa->parent>=0){
par=pcache[cpa->parent]+k;
+ par_rot = par->rot;
}
/* apply different deformations to the child path */
@@ -2155,7 +2170,7 @@ void psys_thread_create_path(ParticleThread *thread, struct ChildParticle *cpa,
if(guided==0){
if(part->kink)
- do_prekink((ParticleKey*)state, (ParticleKey*)par, par->rot, t,
+ do_prekink((ParticleKey*)state, (ParticleKey*)par, par_rot, t,
part->kink_freq * pa_kink, part->kink_shape, part->kink_amp, part->kink, part->kink_axis, ob->obmat);
do_clump((ParticleKey*)state, (ParticleKey*)par, t, part->clumpfac, part->clumppow, pa_clump);
@@ -2254,10 +2269,15 @@ static void *exec_child_path_cache(void *data)
ParticleSystem *psys= ctx->psys;
ParticleCacheKey **cache= psys->childcache;
ChildParticle *cpa;
- int i, totchild= ctx->totchild;
+ int i, totchild= ctx->totchild, first= 0;
+
+ if(thread->tot > 1){
+ first= ctx->parent_pass? 0 : ctx->totparent;
+ totchild= ctx->parent_pass? ctx->totparent : ctx->totchild;
+ }
- cpa= psys->child + thread->num;
- for(i=thread->num; i<totchild; i+=thread->tot, cpa+=thread->tot)
+ cpa= psys->child + first + thread->num;
+ for(i=first+thread->num; i<totchild; i+=thread->tot, cpa+=thread->tot)
psys_thread_create_path(thread, cpa, cache[i], i);
return 0;
@@ -2296,6 +2316,22 @@ void psys_cache_child_paths(Scene *scene, Object *ob, ParticleSystem *psys, floa
totthread= pthreads[0].tot;
if(totthread > 1) {
+
+ /* make virtual child parents thread safe by calculating them first */
+ if(totparent) {
+ BLI_init_threads(&threads, exec_child_path_cache, totthread);
+
+ for(i=0; i<totthread; i++) {
+ pthreads[i].ctx->parent_pass = 1;
+ BLI_insert_thread(&threads, &pthreads[i]);
+ }
+
+ BLI_end_threads(&threads);
+
+ for(i=0; i<totthread; i++)
+ pthreads[i].ctx->parent_pass = 0;
+ }
+
BLI_init_threads(&threads, exec_child_path_cache, totthread);
for(i=0; i<totthread; i++)
@@ -3171,6 +3207,8 @@ static void get_cpa_texture(DerivedMesh *dm, Material *ma, int face_index, float
ptex->kink= texture_value_blend(def,ptex->kink,value,var,blend,neg & MAP_PA_KINK);
if((event & mtex->pmapto) & MAP_PA_ROUGH)
ptex->rough= texture_value_blend(def,ptex->rough,value,var,blend,neg & MAP_PA_ROUGH);
+ if((event & mtex->pmapto) & MAP_PA_DENS)
+ ptex->exist= texture_value_blend(def,ptex->exist,value,var,blend,neg & MAP_PA_DENS);
}
}
if(event & MAP_PA_TIME) { CLAMP(ptex->time,0.0,1.0); }
@@ -3178,6 +3216,7 @@ static void get_cpa_texture(DerivedMesh *dm, Material *ma, int face_index, float
if(event & MAP_PA_CLUMP) { CLAMP(ptex->clump,0.0,1.0); }
if(event & MAP_PA_KINK) { CLAMP(ptex->kink,0.0,1.0); }
if(event & MAP_PA_ROUGH) { CLAMP(ptex->rough,0.0,1.0); }
+ if(event & MAP_PA_DENS) { CLAMP(ptex->exist,0.0,1.0); }
}
void psys_get_texture(Object *ob, Material *ma, ParticleSystemModifierData *psmd, ParticleSystem *psys, ParticleData *pa, ParticleTexture *ptex, int event)
{
@@ -3496,6 +3535,10 @@ void psys_get_particle_on_path(Scene *scene, Object *ob, ParticleSystem *psys, i
if(totchild && part->from!=PART_FROM_PARTICLE && part->childtype==PART_CHILD_FACES){
totparent=(int)(totchild*part->parents*0.3);
+
+ if(G.rendering && part->child_nbr && part->ren_child_nbr)
+ totparent*=(float)part->child_nbr/(float)part->ren_child_nbr;
+
/* part->parents could still be 0 so we can't test with totparent */
between=1;
}
@@ -3872,3 +3915,76 @@ void psys_get_dupli_path_transform(Object *ob, ParticleSystem *psys, ParticleSys
*scale= len;
}
+void psys_make_billboard(ParticleBillboardData *bb, float xvec[3], float yvec[3], float zvec[3], float center[3])
+{
+ float onevec[3] = {0.0f,0.0f,0.0f}, tvec[3], tvec2[3];
+
+ xvec[0] = 1.0f; xvec[1] = 0.0f; xvec[2] = 0.0f;
+ yvec[0] = 0.0f; yvec[1] = 1.0f; yvec[2] = 0.0f;
+
+ if(bb->align < PART_BB_VIEW)
+ onevec[bb->align]=1.0f;
+
+ if(bb->lock && (bb->align == PART_BB_VIEW)) {
+ VECCOPY(xvec, bb->ob->obmat[0]);
+ Normalize(xvec);
+
+ VECCOPY(yvec, bb->ob->obmat[1]);
+ Normalize(yvec);
+
+ VECCOPY(zvec, bb->ob->obmat[2]);
+ Normalize(zvec);
+ }
+ else if(bb->align == PART_BB_VEL) {
+ float temp[3];
+
+ VECCOPY(temp, bb->vel);
+ Normalize(temp);
+
+ VECSUB(zvec, bb->ob->obmat[3], bb->vec);
+
+ if(bb->lock) {
+ float fac = -Inpf(zvec, temp);
+
+ VECADDFAC(zvec, zvec, temp, fac);
+ }
+ Normalize(zvec);
+
+ Crossf(xvec,temp,zvec);
+ Normalize(xvec);
+
+ Crossf(yvec,zvec,xvec);
+ }
+ else {
+ VECSUB(zvec, bb->ob->obmat[3], bb->vec);
+ if(bb->lock)
+ zvec[bb->align] = 0.0f;
+ Normalize(zvec);
+
+ if(bb->align < PART_BB_VIEW)
+ Crossf(xvec, onevec, zvec);
+ else
+ Crossf(xvec, bb->ob->obmat[1], zvec);
+ Normalize(xvec);
+
+ Crossf(yvec,zvec,xvec);
+ }
+
+ VECCOPY(tvec, xvec);
+ VECCOPY(tvec2, yvec);
+
+ VecMulf(xvec, cos(bb->tilt * (float)M_PI));
+ VecMulf(tvec2, sin(bb->tilt * (float)M_PI));
+ VECADD(xvec, xvec, tvec2);
+
+ VecMulf(yvec, cos(bb->tilt * (float)M_PI));
+ VecMulf(tvec, -sin(bb->tilt * (float)M_PI));
+ VECADD(yvec, yvec, tvec);
+
+ VecMulf(xvec, bb->size);
+ VecMulf(yvec, bb->size);
+
+ VECADDFAC(center, bb->vec, xvec, bb->offset[0]);
+ VECADDFAC(center, center, yvec, bb->offset[1]);
+}
+
diff --git a/source/blender/blenkernel/intern/particle_system.c b/source/blender/blenkernel/intern/particle_system.c
index 928730fb1f0..f8b1852b728 100644
--- a/source/blender/blenkernel/intern/particle_system.c
+++ b/source/blender/blenkernel/intern/particle_system.c
@@ -1,7 +1,7 @@
/* particle_system.c
*
*
- * $Id: particle_system.c $
+ * $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
*
@@ -75,6 +75,7 @@
#include "BKE_mesh.h"
#include "BKE_modifier.h"
#include "BKE_scene.h"
+#include "BKE_bvhutils.h"
#include "PIL_time.h"
@@ -1294,7 +1295,8 @@ int psys_threads_init_distribution(ParticleThread *threads, Scene *scene, Derive
MEM_freeN(sum);
/* for hair, sort by origindex, allows optimizations in rendering */
- if(part->type == PART_HAIR) {
+ /* however with virtual parents the children need to be in random order */
+ if(part->type == PART_HAIR && !(part->childtype==PART_CHILD_FACES && part->parents!=0.0)) {
COMPARE_ORIG_INDEX= dm->getFaceDataArray(dm, CD_ORIGINDEX);
if(COMPARE_ORIG_INDEX)
qsort(index, totpart, sizeof(int), compare_orig_index);
@@ -1611,7 +1613,7 @@ void initialize_particle(ParticleData *pa, int p, Object *ob, ParticleSystem *ps
NormalQuat(pa->r_rot);
- if(part->distr!=PART_DISTR_GRID && part->from != PART_FROM_VERT){
+ if(part->type!=PART_HAIR && part->distr!=PART_DISTR_GRID && part->from != PART_FROM_VERT){
/* any unique random number will do (r_ave[0]) */
if(ptex.exist < 0.5*(1.0+pa->r_ave[0]))
pa->flag |= PARS_UNEXIST;
@@ -1733,6 +1735,8 @@ void reset_particle(Scene *scene, ParticleData *pa, ParticleSystem *psys, Partic
VECSUB(p_vel,pa->r_ve,p_vel);
Normalize(p_vel);
VecMulf(p_vel,speed);
+
+ VECCOPY(pa->fuv,loc); /* abusing pa->fuv (not used for "from particle") for storing emit location */
}
else{
/* get precise emitter matrix if particle is born */
@@ -2447,7 +2451,6 @@ void psys_end_effectors(ParticleSystem *psys)
if(ec->rng)
rng_free(ec->rng);
-
}
BLI_freelistN(lb);
@@ -2486,7 +2489,12 @@ static void precalc_effectors(Scene *scene, Object *ob, ParticleSystem *psys, Pa
ec->locations=MEM_callocN(totpart*3*sizeof(float),"particle locations");
for(p=0,pa=psys->particles; p<totpart; p++, pa++){
- psys_particle_on_emitter(psmd,part->from,pa->num,pa->num_dmcache,pa->fuv,pa->foffset,loc,0,0,0,0,0);
+ if(part->from == PART_FROM_PARTICLE) {
+ VECCOPY(loc, pa->fuv);
+ }
+ else
+ psys_particle_on_emitter(psmd,part->from,pa->num,pa->num_dmcache,pa->fuv,pa->foffset,loc,0,0,0,0,0);
+
Mat4MulVecfl(ob->obmat,loc);
ec->distances[p]=VecLenf(loc,vec);
VECSUB(loc,loc,vec);
@@ -2539,6 +2547,7 @@ void do_effectors(int pa_no, ParticleData *pa, ParticleKey *state, Scene *scene,
ParticleData *epa;
ParticleKey estate;
PartDeflect *pd;
+ SurfaceModifierData *surmd = NULL;
ListBase *lb=&psys->effectors;
ParticleEffectorCache *ec;
float distance, vec_to_part[3];
@@ -2566,8 +2575,34 @@ void do_effectors(int pa_no, ParticleData *pa, ParticleKey *state, Scene *scene,
if(psys->part->type!=PART_HAIR && psys->part->integrator)
where_is_object_time(scene, eob,cfra);
- /* use center of object for distance calculus */
- VecSubf(vec_to_part, state->co, eob->obmat[3]);
+ if(pd && pd->flag&PFIELD_SURFACE) {
+ surmd = (SurfaceModifierData *)modifiers_findByType ( eob, eModifierType_Surface );
+ }
+ if(surmd) {
+ /* closest point in the object surface is an effector */
+ BVHTreeNearest nearest;
+ float velocity[3];
+
+ nearest.index = -1;
+ nearest.dist = FLT_MAX;
+
+ /* using velocity corrected location allows for easier sliding over effector surface */
+ VecCopyf(velocity, state->vel);
+ VecMulf(velocity, psys_get_timestep(psys->part));
+ VecAddf(vec_to_part, state->co, velocity);
+
+ BLI_bvhtree_find_nearest(surmd->bvhtree->tree, vec_to_part, &nearest, surmd->bvhtree->nearest_callback, surmd->bvhtree);
+
+ if(nearest.index != -1) {
+ VecSubf(vec_to_part, state->co, nearest.co);
+ }
+ else
+ vec_to_part[0] = vec_to_part[1] = vec_to_part[2] = 0.0f;
+ }
+ else
+ /* use center of object for distance calculus */
+ VecSubf(vec_to_part, state->co, eob->obmat[3]);
+
distance = VecLength(vec_to_part);
falloff=effector_falloff(pd,eob->obmat[2],vec_to_part);
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index 22f26741c55..5c936c3ab39 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -243,6 +243,11 @@ Scene *add_scene(char *name)
sce->r.threads= 1;
sce->r.stereomode = 1; // no stereo
+ sce->r.domeangle = 180;
+ sce->r.domemode = 1;
+ sce->r.domesize = 1.0f;
+ sce->r.domeres = 4;
+ sce->r.domeresbuf = 1.0f;
sce->r.simplify_subsurf= 6;
sce->r.simplify_particles= 1.0f;
@@ -708,3 +713,14 @@ float get_render_aosss_error(RenderData *r, float error)
return error;
}
+void free_dome_warp_text(struct Text *txt)
+{
+ Scene *scene;
+
+ scene = G.main->scene.first;
+ while(scene) {
+ if (scene->r.dometext == txt)
+ scene->r.dometext = NULL;
+ scene = scene->id.next;
+ }
+} \ No newline at end of file
diff --git a/source/blender/blenkernel/intern/screen.c b/source/blender/blenkernel/intern/screen.c
index 483876e5e05..e25e4be90c8 100644
--- a/source/blender/blenkernel/intern/screen.c
+++ b/source/blender/blenkernel/intern/screen.c
@@ -53,11 +53,28 @@ static ListBase spacetypes= {NULL, NULL};
static void spacetype_free(SpaceType *st)
{
ARegionType *art;
+ PanelType *pt;
+ HeaderType *ht;
+ MenuType *mt;
for(art= st->regiontypes.first; art; art= art->next) {
BLI_freelistN(&art->drawcalls);
+
+ for(pt= art->paneltypes.first; pt; pt= pt->next)
+ if(pt->py_free)
+ pt->py_free(pt->py_data);
+
+ for(ht= art->headertypes.first; ht; ht= ht->next)
+ if(ht->py_free)
+ ht->py_free(ht->py_data);
+
+ for(mt= art->menutypes.first; mt; mt= mt->next)
+ if(mt->py_free)
+ mt->py_free(mt->py_data);
+
BLI_freelistN(&art->paneltypes);
BLI_freelistN(&art->headertypes);
+ BLI_freelistN(&art->menutypes);
}
BLI_freelistN(&st->regiontypes);
diff --git a/source/blender/blenkernel/intern/shrinkwrap.c b/source/blender/blenkernel/intern/shrinkwrap.c
index 66cc92a19af..8fb4ed8e272 100644
--- a/source/blender/blenkernel/intern/shrinkwrap.c
+++ b/source/blender/blenkernel/intern/shrinkwrap.c
@@ -38,6 +38,7 @@
#include "DNA_modifier_types.h"
#include "DNA_meshdata_types.h"
#include "DNA_mesh_types.h"
+#include "DNA_scene_types.h"
#include "BKE_shrinkwrap.h"
#include "BKE_DerivedMesh.h"
@@ -47,6 +48,7 @@
#include "BKE_cdderivedmesh.h"
#include "BKE_displist.h"
#include "BKE_global.h"
+#include "BKE_mesh.h"
#include "BKE_subsurf.h"
#include "BKE_mesh.h"
#include "BKE_tessmesh.h"
@@ -95,7 +97,7 @@ typedef void ( *Shrinkwrap_ForeachVertexCallback) (DerivedMesh *target, float *c
/* get derived mesh */
//TODO is anyfunction that does this? returning the derivedFinal witouth we caring if its in edit mode or not?
-static DerivedMesh *object_get_derived_final(struct Scene *scene, Object *ob, CustomDataMask dataMask)
+DerivedMesh *object_get_derived_final(struct Scene *scene, Object *ob, CustomDataMask dataMask)
{
Mesh *me= ob->data;
BMEditMesh *em = me->edit_btmesh;
@@ -104,7 +106,7 @@ static DerivedMesh *object_get_derived_final(struct Scene *scene, Object *ob, Cu
{
DerivedMesh *final = NULL;
editbmesh_get_derived_cage_and_final(scene, ob, em, &final, dataMask);
-
+
return final;
}
else
@@ -152,7 +154,6 @@ static float squared_dist(const float *a, const float *b)
return INPR(tmp, tmp);
}
-
/*
* Shrinkwrap to the nearest vertex
*
@@ -187,8 +188,17 @@ static void shrinkwrap_calc_nearest_vertex(ShrinkwrapCalcData *calc)
float weight = vertexgroup_get_vertex_weight(calc->dvert, i, calc->vgroup);
if(weight == 0.0f) continue;
- VECCOPY(tmp_co, co);
- space_transform_apply(&calc->local2target, tmp_co); //Convert the coordinates to the tree coordinates
+
+ //Convert the vertex to tree coordinates
+ if(calc->vert)
+ {
+ VECCOPY(tmp_co, calc->vert[i].co);
+ }
+ else
+ {
+ VECCOPY(tmp_co, co);
+ }
+ space_transform_apply(&calc->local2target, tmp_co);
//Use local proximity heuristics (to reduce the nearest search)
//
@@ -291,174 +301,117 @@ static void shrinkwrap_calc_normal_projection(ShrinkwrapCalcData *calc, struct S
int i;
//Options about projection direction
- const char use_normal = calc->smd->shrinkOpts;
- float proj_axis[3] = {0.0f, 0.0f, 0.0f};
- MVert *vert = NULL; //Needed in case of vertex normal
- DerivedMesh* ss_mesh = NULL;
+ const char use_normal = calc->smd->shrinkOpts;
+ float proj_axis[3] = {0.0f, 0.0f, 0.0f};
//Raycast and tree stuff
BVHTreeRayHit hit;
- BVHTreeFromMesh treeData = NULL_BVHTreeFromMesh; //target
+ BVHTreeFromMesh treeData= NULL_BVHTreeFromMesh;
//auxiliar target
- DerivedMesh * aux_mesh = NULL;
- BVHTreeFromMesh auxData= NULL_BVHTreeFromMesh;
+ DerivedMesh *auxMesh = NULL;
+ BVHTreeFromMesh auxData = NULL_BVHTreeFromMesh;
SpaceTransform local2aux;
-do
-{
+ //If the user doesn't allows to project in any direction of projection axis
+ //then theres nothing todo.
+ if((use_normal & (MOD_SHRINKWRAP_PROJECT_ALLOW_POS_DIR | MOD_SHRINKWRAP_PROJECT_ALLOW_NEG_DIR)) == 0)
+ return;
+
//Prepare data to retrieve the direction in which we should project each vertex
if(calc->smd->projAxis == MOD_SHRINKWRAP_PROJECT_OVER_NORMAL)
{
- //No Mvert information: jump to "free memory and return" part
- if(calc->original == NULL) break;
-
- if(calc->smd->subsurfLevels)
- {
- SubsurfModifierData smd;
- memset(&smd, 0, sizeof(smd));
- smd.subdivType = ME_CC_SUBSURF; //catmull clark
- smd.levels = calc->smd->subsurfLevels; //levels
-
- ss_mesh = subsurf_make_derived_from_derived(calc->original, &smd, FALSE, NULL, 0, 0);
-
- if(ss_mesh)
- {
- vert = ss_mesh->getVertDataArray(ss_mesh, CD_MVERT);
- if(vert)
- {
- //TRICKY: this code assumes subsurface will have the transformed original vertices
- //in their original order at the end of the vert array.
- vert = vert
- + ss_mesh->getNumVerts(ss_mesh)
- - calc->original->getNumVerts(calc->original);
- }
- }
-
- //To make sure we are not letting any memory behind
- assert(smd.emCache == NULL);
- assert(smd.mCache == NULL);
- }
- else
- vert = calc->original->getVertDataArray(calc->original, CD_MVERT);
-
- //Not able to get vert information: jump to "free memory and return" part
- if(vert == NULL) break;
+ if(calc->vert == NULL) return;
}
else
{
- //The code supports any axis that is a combination of X,Y,Z.. altought currently UI only allows to set the 3 diferent axis
+ //The code supports any axis that is a combination of X,Y,Z
+ //altought currently UI only allows to set the 3 diferent axis
if(calc->smd->projAxis & MOD_SHRINKWRAP_PROJECT_OVER_X_AXIS) proj_axis[0] = 1.0f;
if(calc->smd->projAxis & MOD_SHRINKWRAP_PROJECT_OVER_Y_AXIS) proj_axis[1] = 1.0f;
if(calc->smd->projAxis & MOD_SHRINKWRAP_PROJECT_OVER_Z_AXIS) proj_axis[2] = 1.0f;
Normalize(proj_axis);
- //Invalid projection direction: jump to "free memory and return" part
- if(INPR(proj_axis, proj_axis) < FLT_EPSILON) break;
+ //Invalid projection direction
+ if(INPR(proj_axis, proj_axis) < FLT_EPSILON)
+ return;
}
- //If the user doesn't allows to project in any direction of projection axis... then theres nothing todo.
- if((use_normal & (MOD_SHRINKWRAP_PROJECT_ALLOW_POS_DIR | MOD_SHRINKWRAP_PROJECT_ALLOW_NEG_DIR)) == 0)
- break; //jump to "free memory and return" part
-
-
- //Build target tree
- BENCH(bvhtree_from_mesh_faces(&treeData, calc->target, calc->keepDist, 4, 6));
- if(treeData.tree == NULL)
- break; //jump to "free memory and return" part
-
-
- //Build auxiliar target
if(calc->smd->auxTarget)
{
+ auxMesh = object_get_derived_final(scene, calc->smd->auxTarget, CD_MASK_BAREMESH);
space_transform_setup( &local2aux, calc->ob, calc->smd->auxTarget);
-
- aux_mesh = CDDM_copy( object_get_derived_final(scene, calc->smd->auxTarget, CD_MASK_BAREMESH) ); //TODO currently we need a copy in case object_get_derived_final returns an emDM that does not defines getVertArray or getFace array
- if(aux_mesh)
- BENCH(bvhtree_from_mesh_faces(&auxData, aux_mesh, 0.0, 4, 6));
- else
- printf("Auxiliar target finalDerived mesh is null\n");
}
+ //After sucessufuly build the trees, start projection vertexs
+ if( bvhtree_from_mesh_faces(&treeData, calc->target, calc->keepDist, 4, 6)
+ && (auxMesh == NULL || bvhtree_from_mesh_faces(&auxData, auxMesh, 0.0, 4, 6)))
+ {
- //Now, everything is ready to project the vertexs!
#ifndef __APPLE__
#pragma omp parallel for private(i,hit) schedule(static)
#endif
- for(i = 0; i<calc->numVerts; ++i)
- {
- float *co = calc->vertexCos[i];
- float tmp_co[3], tmp_no[3];
- float lim = 10000.0f; //TODO: we should use FLT_MAX here, but sweepsphere code isnt prepared for that
- float weight = vertexgroup_get_vertex_weight(calc->dvert, i, calc->vgroup);
-
- if(weight == 0.0f) continue;
-
- if(ss_mesh)
- {
- VECCOPY(tmp_co, vert[i].co);
- }
- else
+ for(i = 0; i<calc->numVerts; ++i)
{
- VECCOPY(tmp_co, co);
- }
+ float *co = calc->vertexCos[i];
+ float tmp_co[3], tmp_no[3];
+ float weight = vertexgroup_get_vertex_weight(calc->dvert, i, calc->vgroup);
+ if(weight == 0.0f) continue;
- if(vert)
- NormalShortToFloat(tmp_no, vert[i].no);
- else
- VECCOPY( tmp_no, proj_axis );
-
+ if(calc->vert)
+ {
+ VECCOPY(tmp_co, calc->vert[i].co);
+ if(calc->smd->projAxis == MOD_SHRINKWRAP_PROJECT_OVER_NORMAL)
+ NormalShortToFloat(tmp_no, calc->vert[i].no);
+ else
+ VECCOPY(tmp_no, proj_axis);
+ }
+ else
+ {
+ VECCOPY(tmp_co, co);
+ VECCOPY(tmp_no, proj_axis);
+ }
- hit.index = -1;
- hit.dist = lim;
+ hit.index = -1;
+ hit.dist = 10000.0f; //TODO: we should use FLT_MAX here, but sweepsphere code isnt prepared for that
- //Project over positive direction of axis
- if(use_normal & MOD_SHRINKWRAP_PROJECT_ALLOW_POS_DIR)
- {
+ //Project over positive direction of axis
+ if(use_normal & MOD_SHRINKWRAP_PROJECT_ALLOW_POS_DIR)
+ {
- if(auxData.tree)
- normal_projection_project_vertex(0, tmp_co, tmp_no, &local2aux, auxData.tree, &hit, auxData.raycast_callback, &auxData);
+ if(auxData.tree)
+ normal_projection_project_vertex(0, tmp_co, tmp_no, &local2aux, auxData.tree, &hit, auxData.raycast_callback, &auxData);
- normal_projection_project_vertex(calc->smd->shrinkOpts, tmp_co, tmp_no, &calc->local2target, treeData.tree, &hit, treeData.raycast_callback, &treeData);
- }
+ normal_projection_project_vertex(calc->smd->shrinkOpts, tmp_co, tmp_no, &calc->local2target, treeData.tree, &hit, treeData.raycast_callback, &treeData);
+ }
- //Project over negative direction of axis
- if(use_normal & MOD_SHRINKWRAP_PROJECT_ALLOW_NEG_DIR)
- {
- float inv_no[3] = { -tmp_no[0], -tmp_no[1], -tmp_no[2] };
+ //Project over negative direction of axis
+ if(use_normal & MOD_SHRINKWRAP_PROJECT_ALLOW_NEG_DIR)
+ {
+ float inv_no[3] = { -tmp_no[0], -tmp_no[1], -tmp_no[2] };
- if(auxData.tree)
- normal_projection_project_vertex(0, tmp_co, inv_no, &local2aux, auxData.tree, &hit, auxData.raycast_callback, &auxData);
+ if(auxData.tree)
+ normal_projection_project_vertex(0, tmp_co, inv_no, &local2aux, auxData.tree, &hit, auxData.raycast_callback, &auxData);
- normal_projection_project_vertex(calc->smd->shrinkOpts, tmp_co, inv_no, &calc->local2target, treeData.tree, &hit, treeData.raycast_callback, &treeData);
- }
+ normal_projection_project_vertex(calc->smd->shrinkOpts, tmp_co, inv_no, &calc->local2target, treeData.tree, &hit, treeData.raycast_callback, &treeData);
+ }
- if(hit.index != -1)
- {
- VecLerpf(co, co, hit.co, weight);
+ if(hit.index != -1)
+ {
+ VecLerpf(co, co, hit.co, weight);
+ }
}
}
-
-//Simple do{} while(0) structure to allow to easily jump to the "free memory and return" part
-} while(0);
-
//free data structures
-
free_bvhtree_from_mesh(&treeData);
free_bvhtree_from_mesh(&auxData);
-
- if(aux_mesh)
- aux_mesh->release(aux_mesh);
-
- if(ss_mesh)
- ss_mesh->release(ss_mesh);
}
/*
@@ -474,8 +427,6 @@ static void shrinkwrap_calc_nearest_surface_point(ShrinkwrapCalcData *calc)
BVHTreeFromMesh treeData = NULL_BVHTreeFromMesh;
BVHTreeNearest nearest = NULL_BVHTreeNearest;
-
-
//Create a bvh-tree of the given target
BENCH(bvhtree_from_mesh_faces( &treeData, calc->target, 0.0, 2, 6));
if(treeData.tree == NULL)
@@ -501,7 +452,14 @@ static void shrinkwrap_calc_nearest_surface_point(ShrinkwrapCalcData *calc)
if(weight == 0.0f) continue;
//Convert the vertex to tree coordinates
- VECCOPY(tmp_co, co);
+ if(calc->vert)
+ {
+ VECCOPY(tmp_co, calc->vert[i].co);
+ }
+ else
+ {
+ VECCOPY(tmp_co, co);
+ }
space_transform_apply(&calc->local2target, tmp_co);
//Use local proximity heuristics (to reduce the nearest search)
@@ -540,53 +498,89 @@ static void shrinkwrap_calc_nearest_surface_point(ShrinkwrapCalcData *calc)
}
}
-
free_bvhtree_from_mesh(&treeData);
}
/* Main shrinkwrap function */
-void shrinkwrapModifier_deform(ShrinkwrapModifierData *smd, struct Scene *scene, Object *ob, DerivedMesh *dm, float (*vertexCos)[3], int numVerts)
+void shrinkwrapModifier_deform(ShrinkwrapModifierData *smd, Scene *scene, Object *ob, DerivedMesh *dm, float (*vertexCos)[3], int numVerts)
{
-
+
+ DerivedMesh *ss_mesh = NULL;
ShrinkwrapCalcData calc = NULL_ShrinkwrapCalcData;
-
+
//remove loop dependencies on derived meshs (TODO should this be done elsewhere?)
if(smd->target == ob) smd->target = NULL;
if(smd->auxTarget == ob) smd->auxTarget = NULL;
-
-
+
+
//Configure Shrinkwrap calc data
calc.smd = smd;
calc.ob = ob;
- calc.original = dm;
calc.numVerts = numVerts;
calc.vertexCos = vertexCos;
-
+
//DeformVertex
calc.vgroup = get_named_vertexgroup_num(calc.ob, calc.smd->vgroup_name);
- if(calc.original)
+ if(dm)
{
- calc.dvert = calc.original->getVertDataArray(calc.original, CD_MDEFORMVERT);
+ calc.dvert = dm->getVertDataArray(dm, CD_MDEFORMVERT);
}
else if(calc.ob->type == OB_LATTICE)
{
calc.dvert = lattice_get_deform_verts(calc.ob);
}
-
-
+
+
if(smd->target)
{
- //TODO currently we need a copy in case object_get_derived_final returns an emDM that does not defines getVertArray or getFace array
- calc.target = CDDM_copy( object_get_derived_final(scene, smd->target, CD_MASK_BAREMESH) );
-
- //TODO there might be several "bugs" on non-uniform scales matrixs.. because it will no longer be nearest surface, not sphere projection
+ calc.target = object_get_derived_final(scene, smd->target, CD_MASK_BAREMESH);
+
+ //TODO there might be several "bugs" on non-uniform scales matrixs
+ //because it will no longer be nearest surface, not sphere projection
//because space has been deformed
space_transform_setup(&calc.local2target, ob, smd->target);
-
- calc.keepDist = smd->keepDist; //TODO: smd->keepDist is in global units.. must change to local
+
+ //TODO: smd->keepDist is in global units.. must change to local
+ calc.keepDist = smd->keepDist;
+ }
+
+
+
+ calc.vgroup = get_named_vertexgroup_num(calc.ob, smd->vgroup_name);
+
+ if(dm != NULL)
+ {
+ //Setup arrays to get vertexs positions, normals and deform weights
+ calc.vert = dm->getVertDataArray(dm, CD_MVERT);
+ calc.dvert = dm->getVertDataArray(dm, CD_MDEFORMVERT);
+
+ //Using vertexs positions/normals as if a subsurface was applied
+ if(smd->subsurfLevels)
+ {
+ SubsurfModifierData ssmd;
+ memset(&ssmd, 0, sizeof(ssmd));
+ ssmd.subdivType = ME_CC_SUBSURF; //catmull clark
+ ssmd.levels = smd->subsurfLevels; //levels
+
+ ss_mesh = subsurf_make_derived_from_derived(dm, &ssmd, FALSE, NULL, 0, 0);
+
+ if(ss_mesh)
+ {
+ calc.vert = ss_mesh->getVertDataArray(ss_mesh, CD_MVERT);
+ if(calc.vert)
+ {
+ //TRICKY: this code assumes subsurface will have the transformed original vertices
+ //in their original order at the end of the vert array.
+ calc.vert = calc.vert + ss_mesh->getNumVerts(ss_mesh) - dm->getNumVerts(dm);
+ }
+ }
+
+ //Just to make sure we are not letting any memory behind
+ assert(ssmd.emCache == NULL);
+ assert(ssmd.mCache == NULL);
+ }
}
-
-
+
//Projecting target defined - lets work!
if(calc.target)
{
@@ -594,20 +588,20 @@ void shrinkwrapModifier_deform(ShrinkwrapModifierData *smd, struct Scene *scene,
{
case MOD_SHRINKWRAP_NEAREST_SURFACE:
BENCH(shrinkwrap_calc_nearest_surface_point(&calc));
- break;
-
+ break;
+
case MOD_SHRINKWRAP_PROJECT:
BENCH(shrinkwrap_calc_normal_projection(&calc, scene));
- break;
-
+ break;
+
case MOD_SHRINKWRAP_NEAREST_VERTEX:
BENCH(shrinkwrap_calc_nearest_vertex(&calc));
- break;
+ break;
}
}
-
+
//free memory
- if(calc.target)
- calc.target->release( calc.target );
+ if(ss_mesh)
+ ss_mesh->release(ss_mesh);
}
diff --git a/source/blender/blenkernel/intern/suggestions.c b/source/blender/blenkernel/intern/suggestions.c
index 6530909336c..dee33656332 100644
--- a/source/blender/blenkernel/intern/suggestions.c
+++ b/source/blender/blenkernel/intern/suggestions.c
@@ -1,5 +1,5 @@
/**
- * $Id: $
+ * $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
*
diff --git a/source/blender/blenkernel/intern/text.c b/source/blender/blenkernel/intern/text.c
index 47a33bdee66..8e3d59bbc58 100644
--- a/source/blender/blenkernel/intern/text.c
+++ b/source/blender/blenkernel/intern/text.c
@@ -1282,24 +1282,28 @@ void txt_insert_buf(Text *text, char *in_buffer)
/* Undo functions */
/******************/
-#define MAX_UNDO_TEST(x) \
- while (text->undo_pos+x >= text->undo_len) { \
- if(text->undo_len*2 > TXT_MAX_UNDO) { \
- error("Undo limit reached, buffer cleared\n"); \
- MEM_freeN(text->undo_buf); \
- text->undo_len= TXT_INIT_UNDO; \
- text->undo_buf= MEM_mallocN(text->undo_len, "undo buf"); \
- text->undo_pos=-1; \
- return; \
- } else { \
- void *tmp= text->undo_buf; \
- text->undo_buf= MEM_callocN(text->undo_len*2, "undo buf"); \
- memcpy(text->undo_buf, tmp, text->undo_len); \
- text->undo_len*=2; \
- MEM_freeN(tmp); \
- } \
+static int max_undo_test(Text *text, int x)
+{
+ while (text->undo_pos+x >= text->undo_len) {
+ if(text->undo_len*2 > TXT_MAX_UNDO) {
+ /* XXX error("Undo limit reached, buffer cleared\n"); */
+ MEM_freeN(text->undo_buf);
+ text->undo_len= TXT_INIT_UNDO;
+ text->undo_buf= MEM_mallocN(text->undo_len, "undo buf");
+ text->undo_pos=-1;
+ return 0;
+ } else {
+ void *tmp= text->undo_buf;
+ text->undo_buf= MEM_callocN(text->undo_len*2, "undo buf");
+ memcpy(text->undo_buf, tmp, text->undo_len);
+ text->undo_len*=2;
+ MEM_freeN(tmp);
+ }
}
+ return 1;
+}
+
static void dump_buffer(Text *text)
{
int i= 0;
@@ -1445,7 +1449,8 @@ void txt_print_undo(Text *text)
static void txt_undo_add_op(Text *text, int op)
{
- //XXX MAX_UNDO_TEST(2);
+ if(!max_undo_test(text, 2))
+ return;
text->undo_pos++;
text->undo_buf[text->undo_pos]= op;
@@ -1458,7 +1463,8 @@ static void txt_undo_add_block(Text *text, int op, char *buf)
length= strlen(buf);
- //XXX MAX_UNDO_TEST(length+11);
+ if(!max_undo_test(text, length+11))
+ return;
text->undo_pos++;
text->undo_buf[text->undo_pos]= op;
@@ -1492,7 +1498,8 @@ static void txt_undo_add_block(Text *text, int op, char *buf)
void txt_undo_add_toop(Text *text, int op, unsigned int froml, unsigned short fromc, unsigned int tol, unsigned short toc)
{
- //XXX MAX_UNDO_TEST(15);
+ if(!max_undo_test(text, 15))
+ return;
if (froml==tol && fromc==toc) return;
@@ -1535,7 +1542,8 @@ void txt_undo_add_toop(Text *text, int op, unsigned int froml, unsigned short fr
static void txt_undo_add_charop(Text *text, int op, char c)
{
- //XXX MAX_UNDO_TEST(4);
+ if(!max_undo_test(text, 4))
+ return;
text->undo_pos++;
text->undo_buf[text->undo_pos]= op;
diff --git a/source/blender/blenkernel/intern/world.c b/source/blender/blenkernel/intern/world.c
index 7278460c61c..8bad269a85e 100644
--- a/source/blender/blenkernel/intern/world.c
+++ b/source/blender/blenkernel/intern/world.c
@@ -107,6 +107,8 @@ World *add_world(char *name)
wrld->ao_approx_error= 0.25f;
wrld->physicsEngine= WOPHY_BULLET;//WOPHY_SUMO; Bullet by default
+ wrld->mode = WO_DBVT_CULLING; // DBVT culling by default
+ wrld->occlusionRes = 128;
wrld->preview = NULL;
return wrld;
diff --git a/source/blender/blenkernel/intern/writeffmpeg.c b/source/blender/blenkernel/intern/writeffmpeg.c
index 8fd2426a1b6..472a6612a50 100644
--- a/source/blender/blenkernel/intern/writeffmpeg.c
+++ b/source/blender/blenkernel/intern/writeffmpeg.c
@@ -29,11 +29,11 @@
#include <stdlib.h>
-#include <ffmpeg/avformat.h>
-#include <ffmpeg/avcodec.h>
-#include <ffmpeg/rational.h>
-#include <ffmpeg/swscale.h>
-#include <ffmpeg/opt.h>
+#include <libavformat/avformat.h>
+#include <libavcodec/avcodec.h>
+#include <libavutil/rational.h>
+#include <libswscale/swscale.h>
+#include <libavcodec/opt.h>
#if LIBAVFORMAT_VERSION_INT < (49 << 16)
#define FFMPEG_OLD_FRAME_RATE 1
@@ -284,8 +284,8 @@ static AVFrame* generate_video_frame(uint8_t* pixels)
int height = c->height;
AVFrame* rgb_frame;
- if (c->pix_fmt != PIX_FMT_RGBA32) {
- rgb_frame = alloc_picture(PIX_FMT_RGBA32, width, height);
+ if (c->pix_fmt != PIX_FMT_BGR32) {
+ rgb_frame = alloc_picture(PIX_FMT_BGR32, width, height);
if (!rgb_frame) {
G.afbreek=1;
//XXX error("Couldn't allocate temporary frame");
@@ -309,9 +309,9 @@ static AVFrame* generate_video_frame(uint8_t* pixels)
uint8_t* end = src + width * 4;
while (src != end) {
target[3] = src[3];
- target[2] = src[0];
+ target[2] = src[2];
target[1] = src[1];
- target[0] = src[2];
+ target[0] = src[0];
target += 4;
src += 4;
@@ -325,9 +325,9 @@ static AVFrame* generate_video_frame(uint8_t* pixels)
uint8_t* src = rendered_frame + width * 4 * y;
uint8_t* end = src + width * 4;
while (src != end) {
- target[3] = src[2];
+ target[3] = src[0];
target[2] = src[1];
- target[1] = src[0];
+ target[1] = src[2];
target[0] = src[3];
target += 4;
@@ -336,7 +336,7 @@ static AVFrame* generate_video_frame(uint8_t* pixels)
}
}
- if (c->pix_fmt != PIX_FMT_RGBA32) {
+ if (c->pix_fmt != PIX_FMT_BGR32) {
sws_scale(img_convert_ctx, rgb_frame->data,
rgb_frame->linesize, 0, c->height,
current_frame->data, current_frame->linesize);
@@ -492,9 +492,11 @@ static AVStream* alloc_video_stream(RenderData *rd, int codec_id, AVFormatContex
c->pix_fmt = PIX_FMT_YUV420P;
}
- if (!strcmp(of->oformat->name, "mp4") ||
- !strcmp(of->oformat->name, "mov") ||
- !strcmp(of->oformat->name, "3gp")) {
+ if ((of->oformat->flags & AVFMT_GLOBALHEADER)
+// || !strcmp(of->oformat->name, "mp4")
+// || !strcmp(of->oformat->name, "mov")
+// || !strcmp(of->oformat->name, "3gp")
+ ) {
fprintf(stderr, "Using global header\n");
c->flags |= CODEC_FLAG_GLOBAL_HEADER;
}
@@ -508,7 +510,7 @@ static AVStream* alloc_video_stream(RenderData *rd, int codec_id, AVFormatContex
/* xasp & yasp got float lately... */
- c->sample_aspect_ratio = av_d2q(
+ st->sample_aspect_ratio = c->sample_aspect_ratio = av_d2q(
((double) rd->xasp / (double) rd->yasp), 255);
set_ffmpeg_properties(rd, c, "video");
@@ -526,7 +528,7 @@ static AVStream* alloc_video_stream(RenderData *rd, int codec_id, AVFormatContex
current_frame = alloc_picture(c->pix_fmt, c->width, c->height);
img_convert_ctx = sws_getContext(c->width, c->height,
- PIX_FMT_RGBA32,
+ PIX_FMT_BGR32,
c->width, c->height,
c->pix_fmt,
SWS_BICUBIC,
diff --git a/source/blender/blenlib/BLI_noise.h b/source/blender/blenlib/BLI_noise.h
index f419746bc13..9f72c5e7b54 100644
--- a/source/blender/blenlib/BLI_noise.h
+++ b/source/blender/blenlib/BLI_noise.h
@@ -26,7 +26,6 @@
*
* ***** END GPL LICENSE BLOCK *****
*
- * $Id: $
*/
#ifndef BLI_NOISE_H
diff --git a/source/blender/blenlib/BLI_rect.h b/source/blender/blenlib/BLI_rect.h
index 1bae821ae55..c7026b21494 100644
--- a/source/blender/blenlib/BLI_rect.h
+++ b/source/blender/blenlib/BLI_rect.h
@@ -26,7 +26,6 @@
*
* ***** END GPL LICENSE BLOCK *****
*
- * $Id: $
*/
#ifndef BLI_RECT_H
diff --git a/source/blender/blenlib/BLI_string.h b/source/blender/blenlib/BLI_string.h
index 22b41d0055b..ce9dd44601b 100644
--- a/source/blender/blenlib/BLI_string.h
+++ b/source/blender/blenlib/BLI_string.h
@@ -84,14 +84,14 @@ char *BLI_sprintfN(const char *format, ...);
*
* @retval True if the strings are equal, false otherwise.
*/
-int BLI_streq(char *a, char *b);
+int BLI_streq(const char *a, const char *b);
/**
* Compare two strings without regard to case.
*
* @retval True if the strings are equal, false otherwise.
*/
-int BLI_strcaseeq(char *a, char *b);
+int BLI_strcaseeq(const char *a, const char *b);
char *BLI_strcasestr(const char *s, const char *find);
int BLI_strcasecmp(const char *s1, const char *s2);
diff --git a/source/blender/blenlib/BLI_util.h b/source/blender/blenlib/BLI_util.h
index e78a58b2282..30c9fc353b3 100644
--- a/source/blender/blenlib/BLI_util.h
+++ b/source/blender/blenlib/BLI_util.h
@@ -42,6 +42,8 @@ struct ListBase;
struct direntry;
char *BLI_gethome(void);
+char *BLI_gethome_folder(char *folder_name);
+
void BLI_make_file_string(const char *relabase, char *string, const char *dir, const char *file);
void BLI_make_exist(char *dir);
void BLI_make_existing_file(char *name);
@@ -49,7 +51,7 @@ void BLI_split_dirfile(char *string, char *dir, char *file);
void BLI_split_dirfile_basic(const char *string, char *dir, char *file);
void BLI_join_dirfile(char *string, const char *dir, const char *file);
int BLI_testextensie(const char *str, const char *ext);
-void BLI_uniquename(struct ListBase *list, void *vlink, char defname[], short name_offs, short len);
+void BLI_uniquename(struct ListBase *list, void *vlink, char defname[], char delim, short name_offs, short len);
void BLI_newname(char * name, int add);
int BLI_stringdec(char *string, char *kop, char *start, unsigned short *numlen);
void BLI_stringenc(char *string, char *kop, char *start, unsigned short numlen, int pic);
diff --git a/source/blender/blenlib/CMakeLists.txt b/source/blender/blenlib/CMakeLists.txt
index b22e7b1dd70..334c8e6906b 100644
--- a/source/blender/blenlib/CMakeLists.txt
+++ b/source/blender/blenlib/CMakeLists.txt
@@ -40,10 +40,6 @@ SET(INC
)
ENDIF(CMAKE_SYSTEM_NAME MATCHES "Linux")
-IF(WITH_INTERNATIONAL)
- ADD_DEFINITIONS(-DWITH_FREETYPE2)
-ENDIF(WITH_INTERNATIONAL)
-
IF(WIN32)
SET(INC ${INC} ${PTHREADS_INC})
ENDIF(WIN32)
diff --git a/source/blender/blenlib/SConscript b/source/blender/blenlib/SConscript
index d0084be0d56..e0411a6fc80 100644
--- a/source/blender/blenlib/SConscript
+++ b/source/blender/blenlib/SConscript
@@ -12,9 +12,6 @@ defs = ''
if env['WITH_BF_SDL']:
incs += ' ' + env['BF_SDL_INC']
-if env['WITH_BF_INTERNATIONAL']:
- defs = 'WITH_FREETYPE2'
-
if env['OURPLATFORM'] == 'linux2':
cflags='-pthread'
incs += ' ../../../extern/binreloc/include'
diff --git a/source/blender/blenlib/intern/Makefile b/source/blender/blenlib/intern/Makefile
index f92fa0a7e25..f729a4e3fe0 100644
--- a/source/blender/blenlib/intern/Makefile
+++ b/source/blender/blenlib/intern/Makefile
@@ -53,9 +53,6 @@ CPPFLAGS += -I$(NAN_ZLIB)/include
ifdef NAN_PTHREADS
CPPFLAGS += -I$(NAN_PTHREADS)/include
endif
-ifeq ($(WITH_FREETYPE2), true)
- CPPFLAGS += -DWITH_FREETYPE2
-endif
ifeq ($(OS),linux)
CPPFLAGS += -I$(OCGDIR)/extern/binreloc/include
endif
diff --git a/source/blender/blenlib/intern/fileops.c b/source/blender/blenlib/intern/fileops.c
index 676a7e32333..ffebd05f2f6 100644
--- a/source/blender/blenlib/intern/fileops.c
+++ b/source/blender/blenlib/intern/fileops.c
@@ -153,7 +153,7 @@ int BLI_is_writable(char *filename)
{
int file;
- file = open(filename, O_BINARY | O_RDWR | O_CREAT | O_TRUNC, 0666);
+ file = open(filename, O_BINARY | O_RDWR, 0666);
if (file < 0)
return 0;
diff --git a/source/blender/blenlib/intern/freetypefont.c b/source/blender/blenlib/intern/freetypefont.c
index 2c114ea6971..0f2a6179964 100644
--- a/source/blender/blenlib/intern/freetypefont.c
+++ b/source/blender/blenlib/intern/freetypefont.c
@@ -30,8 +30,6 @@
* Code that uses exotic character maps is present but commented out.
*/
-#ifdef WITH_FREETYPE2
-
#ifdef WIN32
#pragma warning (disable:4244)
#endif
@@ -179,6 +177,7 @@ void freetypechar_to_vchar(FT_Face face, FT_ULong charcode, VFontData *vfd)
bezt->vec[2][1] = (dy + (2 * ftoutline.points[l+1].y)* scale) / 3.0;
bezt->h1= bezt->h2= HD_ALIGN;
+ bezt->radius= 1.0f;
bezt++;
}
}
@@ -265,6 +264,7 @@ void freetypechar_to_vchar(FT_Face face, FT_ULong charcode, VFontData *vfd)
{
bezt->h1= bezt->h2= HD_ALIGN;
}
+ bezt->radius= 1.0f;
bezt++;
}
}
@@ -512,10 +512,6 @@ int BLI_vfontchar_from_freetypefont(VFont *vfont, unsigned long character)
return TRUE;
}
-#endif // WITH_FREETYPE2
-
-
-
#if 0
// Freetype2 Outline struct
diff --git a/source/blender/blenlib/intern/psfont.c b/source/blender/blenlib/intern/psfont.c
index 54d7f8ec1af..39d38e4cf3a 100644
--- a/source/blender/blenlib/intern/psfont.c
+++ b/source/blender/blenlib/intern/psfont.c
@@ -2094,6 +2094,7 @@ static VFontData *objfnt_to_vfontdata(objfnt *fnt)
while(a--) {
if(bezt->h1!=HD_ALIGN && bezt->h2==HD_ALIGN) bezt->h2= 0;
else if(bezt->h2!=HD_ALIGN && bezt->h1==HD_ALIGN) bezt->h1= 0;
+ bezt->radius= 1.0f;
bezt++;
}
diff --git a/source/blender/blenlib/intern/string.c b/source/blender/blenlib/intern/string.c
index 8485a0c975b..843f6b62735 100644
--- a/source/blender/blenlib/intern/string.c
+++ b/source/blender/blenlib/intern/string.c
@@ -100,10 +100,13 @@ char *BLI_sprintfN(const char *format, ...)
return n;
}
-int BLI_streq(char *a, char *b) {
+int BLI_streq(const char *a, const char *b)
+{
return (strcmp(a, b)==0);
}
-int BLI_strcaseeq(char *a, char *b) {
+
+int BLI_strcaseeq(const char *a, const char *b)
+{
return (BLI_strcasecmp(a, b)==0);
}
diff --git a/source/blender/blenlib/intern/util.c b/source/blender/blenlib/intern/util.c
index f363e9c4cc5..137a32c4689 100644
--- a/source/blender/blenlib/intern/util.c
+++ b/source/blender/blenlib/intern/util.c
@@ -224,8 +224,9 @@ void BLI_newname(char *name, int add)
* name_offs: should be calculated using offsetof(structname, membername) macro from stddef.h
* len: maximum length of string (to prevent overflows, etc.)
* defname: the name that should be used by default if none is specified already
+ * delim: the character which acts as a delimeter between parts of the name
*/
-void BLI_uniquename(ListBase *list, void *vlink, char defname[], short name_offs, short len)
+void BLI_uniquename(ListBase *list, void *vlink, char defname[], char delim, short name_offs, short len)
{
Link *link;
char tempname[128];
@@ -261,12 +262,12 @@ void BLI_uniquename(ListBase *list, void *vlink, char defname[], short name_offs
return;
/* Strip off the suffix */
- dot = strchr(GIVE_STRADDR(vlink, name_offs), '.');
+ dot = strchr(GIVE_STRADDR(vlink, name_offs), delim);
if (dot)
*dot=0;
for (number = 1; number <= 999; number++) {
- BLI_snprintf(tempname, 128, "%s.%03d", GIVE_STRADDR(vlink, name_offs), number);
+ BLI_snprintf(tempname, 128, "%s%c%03d", GIVE_STRADDR(vlink, name_offs), delim, number);
exists = 0;
for (link= list->first; link; link= link->next) {
@@ -827,6 +828,99 @@ char *BLI_gethome(void) {
#endif
}
+/* this function returns the path to a blender folder, if it exists,
+ * trying in this order:
+ *
+ * path_to_executable/release/folder_name (in svn)
+ * ./release/folder_name (in svn)
+ * $HOME/.blender/folder_name
+ * path_to_executable/.blender/folder_name
+ *
+ * returns NULL if none is found. */
+
+char *BLI_gethome_folder(char *folder_name)
+{
+ extern char bprogname[]; /* argv[0] from creator.c */
+ static char homedir[FILE_MAXDIR] = "";
+ static char fulldir[FILE_MAXDIR] = "";
+ char tmpdir[FILE_MAXDIR];
+ char bprogdir[FILE_MAXDIR];
+ char *s;
+ int i;
+
+ /* use argv[0] (bprogname) to get the path to the executable */
+ s = BLI_last_slash(bprogname);
+
+ i = s - bprogname + 1;
+ BLI_strncpy(bprogdir, bprogname, i);
+
+ /* try path_to_executable/release/folder_name (in svn) */
+ if (folder_name) {
+ BLI_snprintf(tmpdir, sizeof(tmpdir), "release/%s", folder_name);
+ BLI_make_file_string("/", fulldir, bprogdir, tmpdir);
+ if (BLI_exists(fulldir)) return fulldir;
+ else fulldir[0] = '\0';
+ }
+
+ /* try ./release/folder_name (in svn) */
+ if(folder_name) {
+ BLI_snprintf(fulldir, sizeof(fulldir), "./release/%s", folder_name);
+ if (BLI_exists(fulldir)) return fulldir;
+ else fulldir[0] = '\0';
+ }
+
+ /* BLI_gethome() can return NULL if env vars are not set */
+ s = BLI_gethome();
+
+ if(!s) { /* bail if no $HOME */
+ printf("$HOME is NOT set\n");
+ return NULL;
+ }
+
+ if(strstr(s, ".blender"))
+ BLI_strncpy(homedir, s, FILE_MAXDIR);
+ else
+ BLI_make_file_string("/", homedir, s, ".blender");
+
+ /* if $HOME/.blender/folder_name exists, return it */
+ if(BLI_exists(homedir)) {
+ if (folder_name) {
+ BLI_make_file_string("/", fulldir, homedir, folder_name);
+ if(BLI_exists(fulldir))
+ return fulldir;
+ }
+ else
+ return homedir;
+ }
+ else
+ homedir[0] = '\0';
+
+ /* using tmpdir to preserve homedir (if) found above:
+ * the ideal is to have a home dir with folder_name dir inside
+ * it, but if that isn't available, it's possible to
+ * have a 'broken' home dir somewhere and a folder_name dir in the
+ * svn sources */
+ BLI_make_file_string("/", tmpdir, bprogdir, ".blender");
+
+ if(BLI_exists(tmpdir)) {
+ if(folder_name) {
+ BLI_make_file_string("/", fulldir, tmpdir, folder_name);
+ if(BLI_exists(fulldir)) {
+ BLI_strncpy(homedir, tmpdir, FILE_MAXDIR);
+ return fulldir;
+ }
+ else {
+ homedir[0] = '\0';
+ fulldir[0] = '\0';
+ }
+ }
+ else return homedir;
+ }
+
+ return NULL;
+}
+
+
void BLI_clean(char *path)
{
if(path==0) return;
diff --git a/source/blender/blenloader/intern/readblenentry.c b/source/blender/blenloader/intern/readblenentry.c
index 23e334fbbd1..0c8b8a6b31d 100644
--- a/source/blender/blenloader/intern/readblenentry.c
+++ b/source/blender/blenloader/intern/readblenentry.c
@@ -86,6 +86,7 @@ static IDType idtypes[]= {
{ ID_BR, "Brush", IDTYPE_FLAGS_ISLINKABLE},
{ ID_CA, "Camera", IDTYPE_FLAGS_ISLINKABLE},
{ ID_CU, "Curve", IDTYPE_FLAGS_ISLINKABLE},
+ { ID_GD, "GPencil", IDTYPE_FLAGS_ISLINKABLE},
{ ID_GR, "Group", IDTYPE_FLAGS_ISLINKABLE},
{ ID_ID, "ID", 0},
{ ID_IM, "Image", IDTYPE_FLAGS_ISLINKABLE},
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 87d9c36045a..6429ca98b3e 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -178,7 +178,7 @@ READ
- read associated 'direct data'
- link direct data (internal and to LibBlock)
- read FileGlobal
-- read USER data, only when indicated (file is ~/.B.blend)
+- read USER data, only when indicated (file is ~/.B.blend or .B25.blend)
- free file
- per Library (per Main)
- read file
@@ -1667,8 +1667,10 @@ static void lib_link_fcurves(FileData *fd, ID *id, ListBase *list)
/* driver data */
if (fcu->driver) {
ChannelDriver *driver= fcu->driver;
- driver->id= newlibadr(fd, id->lib, driver->id);
- driver->id2= newlibadr(fd, id->lib, driver->id2);
+ DriverTarget *dtar;
+
+ for (dtar= driver->targets.first; dtar; dtar= dtar->next)
+ dtar->id= newlibadr(fd, id->lib, dtar->id);
}
/* modifiers */
@@ -1708,9 +1710,12 @@ static void direct_link_fcurves(FileData *fd, ListBase *list)
fcu->driver= newdataadr(fd, fcu->driver);
if (fcu->driver) {
ChannelDriver *driver= fcu->driver;
+ DriverTarget *dtar;
- driver->rna_path= newdataadr(fd, driver->rna_path);
- driver->rna_path2= newdataadr(fd, driver->rna_path2);
+ /* relink targets and their paths */
+ link_list(fd, &driver->targets);
+ for (dtar= driver->targets.first; dtar; dtar= dtar->next)
+ dtar->rna_path= newdataadr(fd, dtar->rna_path);
}
/* modifiers */
@@ -1718,6 +1723,7 @@ static void direct_link_fcurves(FileData *fd, ListBase *list)
for (fcm= fcu->modifiers.first; fcm; fcm= fcm->next) {
/* relink general data */
fcm->data = newdataadr(fd, fcm->data);
+ fcm->edata= NULL;
/* do relinking of data for specific types */
switch (fcm->type) {
@@ -2147,6 +2153,13 @@ static void lib_link_constraints(FileData *fd, ID *id, ListBase *conlist)
data->tar = newlibadr(fd, id->lib, data->tar);
}
break;
+ case CONSTRAINT_TYPE_SHRINKWRAP:
+ {
+ bShrinkwrapConstraint *data;
+ data= ((bShrinkwrapConstraint*)con->data);
+ data->target = newlibadr(fd, id->lib, data->target);
+ }
+ break;
case CONSTRAINT_TYPE_NULL:
break;
}
@@ -2163,9 +2176,12 @@ static void direct_link_constraints(FileData *fd, ListBase *lb)
if (cons->type == CONSTRAINT_TYPE_PYTHON) {
bPythonConstraint *data= cons->data;
+
link_list(fd, &data->targets);
+
data->prop = newdataadr(fd, data->prop);
- IDP_DirectLinkProperty(data->prop, (fd->flags & FD_FLAGS_SWITCH_ENDIAN), fd);
+ if (data->prop)
+ IDP_DirectLinkProperty(data->prop, (fd->flags & FD_FLAGS_SWITCH_ENDIAN), fd);
}
}
}
@@ -3404,7 +3420,13 @@ static void direct_link_pose(FileData *fd, bPose *pose)
pchan->bone= NULL;
pchan->parent= newdataadr(fd, pchan->parent);
pchan->child= newdataadr(fd, pchan->child);
+
direct_link_constraints(fd, &pchan->constraints);
+
+ pchan->prop = newdataadr(fd, pchan->prop);
+ if (pchan->prop)
+ IDP_DirectLinkProperty(pchan->prop, (fd->flags & FD_FLAGS_SWITCH_ENDIAN), fd);
+
pchan->iktree.first= pchan->iktree.last= NULL;
pchan->path= NULL;
}
@@ -3479,6 +3501,12 @@ static void direct_link_modifiers(FileData *fd, ListBase *lb)
collmd->mfaces = NULL;
}
+ else if (md->type==eModifierType_Surface) {
+ SurfaceModifierData *surmd = (SurfaceModifierData*) md;
+
+ surmd->dm = NULL;
+ surmd->bvhtree = NULL;
+ }
else if (md->type==eModifierType_Hook) {
HookModifierData *hmd = (HookModifierData*) md;
@@ -3815,7 +3843,9 @@ static void lib_link_scene(FileData *fd, Main *main)
srl->mat_override= newlibadr_us(fd, sce->id.lib, srl->mat_override);
srl->light_override= newlibadr_us(fd, sce->id.lib, srl->light_override);
}
-
+ /*Game Settings: Dome Warp Text*/
+ sce->r.dometext= newlibadr_us(fd, sce->id.lib, sce->r.dometext);
+
sce->id.flag -= LIB_NEEDLINK;
}
@@ -3842,6 +3872,8 @@ static void direct_link_scene(FileData *fd, Scene *sce)
sce->theDag = NULL;
sce->dagisvalid = 0;
+ sce->obedit= NULL;
+
/* set users to one by default, not in lib-link, this will increase it for compo nodes */
sce->id.us= 1;
@@ -4060,13 +4092,17 @@ static void lib_link_windowmanager(FileData *fd, Main *main)
/* ****************** READ GREASE PENCIL ***************** */
-/* relinks grease-pencil data for 3d-view(s) - used for direct_link */
-static void link_gpencil(FileData *fd, bGPdata *gpd)
+/* relinks grease-pencil data - used for direct_link and old file linkage */
+static void direct_link_gpencil(FileData *fd, bGPdata *gpd)
{
bGPDlayer *gpl;
bGPDframe *gpf;
bGPDstroke *gps;
+ /* we must firstly have some grease-pencil data to link! */
+ if (gpd == NULL)
+ return;
+
/* relink layers */
link_list(fd, &gpd->layers);
@@ -4162,9 +4198,7 @@ static void lib_link_screen(FileData *fd, Main *main)
sfile->files= NULL;
sfile->params= NULL;
sfile->op= NULL;
- /* sfile->returnfunc= NULL;
- sfile->menup= NULL;
- sfile->pupmenu= NULL; */ /* XXX removed */
+ sfile->layout= NULL;
}
else if(sl->spacetype==SPACE_IMASEL) {
SpaceImaSel *simasel= (SpaceImaSel *)sl;
@@ -4239,7 +4273,6 @@ static void lib_link_screen(FileData *fd, Main *main)
else if(GS(snode->id->name)==ID_TE)
snode->nodetree= ((Tex *)snode->id)->nodetree;
}
-
}
}
sa= sa->next;
@@ -4350,7 +4383,7 @@ void lib_link_screen_restore(Main *newmain, bScreen *curscreen, Scene *curscene)
*/
}
else if(v3d->scenelock) v3d->lay= sc->scene->lay;
-
+
/* not very nice, but could help */
if((v3d->layact & v3d->lay)==0) v3d->layact= v3d->lay;
@@ -4457,9 +4490,9 @@ static void direct_link_region(FileData *fd, ARegion *ar, int spacetype)
for(pa= ar->panels.first; pa; pa=pa->next) {
pa->paneltab= newdataadr(fd, pa->paneltab);
- pa->active= 0;
- pa->sortcounter= 0;
+ pa->runtime_flag= 0;
pa->activedata= NULL;
+ pa->type= NULL;
}
ar->regiondata= newdataadr(fd, ar->regiondata);
@@ -4505,7 +4538,6 @@ static void view3d_split_250(View3D *v3d, ListBase *regions)
rv3d->dist= v3d->dist;
VECCOPY(rv3d->ofs, v3d->ofs);
QUATCOPY(rv3d->viewquat, v3d->viewquat);
- Mat4One(rv3d->twmat);
}
}
}
@@ -4589,7 +4621,7 @@ static void direct_link_screen(FileData *fd, bScreen *sc)
v3d->bgpic->iuser.ok= 1;
if(v3d->gpd) {
v3d->gpd= newdataadr(fd, v3d->gpd);
- link_gpencil(fd, v3d->gpd);
+ direct_link_gpencil(fd, v3d->gpd);
}
v3d->localvd= newdataadr(fd, v3d->localvd);
v3d->afterdraw.first= v3d->afterdraw.last= NULL;
@@ -4601,6 +4633,7 @@ static void direct_link_screen(FileData *fd, bScreen *sc)
SpaceIpo *sipo= (SpaceIpo*)sl;
sipo->ads= newdataadr(fd, sipo->ads);
+ sipo->ghostCurves.first= sipo->ghostCurves.last= NULL;
}
else if (sl->spacetype==SPACE_OUTLINER) {
SpaceOops *soops= (SpaceOops*) sl;
@@ -4617,11 +4650,11 @@ static void direct_link_screen(FileData *fd, bScreen *sc)
SpaceImage *sima= (SpaceImage *)sl;
sima->cumap= newdataadr(fd, sima->cumap);
- if(sima->cumap)
- direct_link_curvemapping(fd, sima->cumap);
sima->gpd= newdataadr(fd, sima->gpd);
if (sima->gpd)
- link_gpencil(fd, sima->gpd);
+ direct_link_gpencil(fd, sima->gpd);
+ if(sima->cumap)
+ direct_link_curvemapping(fd, sima->cumap);
sima->iuser.ok= 1;
}
else if(sl->spacetype==SPACE_NODE) {
@@ -4629,7 +4662,7 @@ static void direct_link_screen(FileData *fd, bScreen *sc)
if(snode->gpd) {
snode->gpd= newdataadr(fd, snode->gpd);
- link_gpencil(fd, snode->gpd);
+ direct_link_gpencil(fd, snode->gpd);
}
snode->nodetree= snode->edittree= NULL;
}
@@ -4637,7 +4670,7 @@ static void direct_link_screen(FileData *fd, bScreen *sc)
SpaceSeq *sseq= (SpaceSeq *)sl;
if(sseq->gpd) {
sseq->gpd= newdataadr(fd, sseq->gpd);
- link_gpencil(fd, sseq->gpd);
+ direct_link_gpencil(fd, sseq->gpd);
}
}
}
@@ -4814,6 +4847,7 @@ static char *dataname(short id_code)
case ID_NT: return "Data from NT";
case ID_BR: return "Data from BR";
case ID_PA: return "Data from PA";
+ case ID_GD: return "Data from GD";
}
return "Data from Lib Block";
@@ -4970,6 +5004,9 @@ static BHead *read_libblock(FileData *fd, Main *main, BHead *bhead, int flag, ID
case ID_SCRIPT:
direct_link_script(fd, (Script*)id);
break;
+ case ID_GD:
+ direct_link_gpencil(fd, (bGPdata *)id);
+ break;
}
/*link direct data of ID properties*/
@@ -5613,7 +5650,6 @@ static void area_add_window_regions(ScrArea *sa, SpaceLink *sl, ListBase *lb)
{
SpaceButs *sbuts= (SpaceButs *)sl;
memcpy(&ar->v2d, &sbuts->v2d, sizeof(View2D));
- ar->v2d.keepzoom |= V2D_KEEPASPECT;
break;
}
case SPACE_FILE:
@@ -5673,6 +5709,63 @@ static void do_versions_windowmanager_2_50(bScreen *screen)
}
}
+static void versions_gpencil_add_main(ListBase *lb, ID *id, char *name)
+{
+
+ BLI_addtail(lb, id);
+ id->us= 1;
+ id->flag= LIB_FAKEUSER;
+ *( (short *)id->name )= ID_GD;
+
+ new_id(lb, id, name);
+ /* alphabetic insterion: is in new_id */
+
+ if(G.f & G_DEBUG)
+ printf("Converted GPencil to ID: %s\n", id->name+2);
+}
+
+static void do_versions_gpencil_2_50(Main *main, bScreen *screen)
+{
+ ScrArea *sa;
+ SpaceLink *sl;
+
+ /* add regions */
+ for(sa= screen->areabase.first; sa; sa= sa->next) {
+ for(sl= sa->spacedata.first; sl; sl= sl->next) {
+ if (sl->spacetype==SPACE_VIEW3D) {
+ View3D *v3d= (View3D*) sl;
+ if(v3d->gpd) {
+ versions_gpencil_add_main(&main->gpencil, (ID *)v3d->gpd, "GPencil View3D");
+ v3d->gpd= NULL;
+ }
+ }
+ else if (sl->spacetype==SPACE_NODE) {
+ SpaceNode *snode= (SpaceNode *)sl;
+ if(snode->gpd) {
+ versions_gpencil_add_main(&main->gpencil, (ID *)snode->gpd, "GPencil Node");
+ snode->gpd= NULL;
+ }
+ }
+ else if (sl->spacetype==SPACE_SEQ) {
+ SpaceSeq *sseq= (SpaceSeq *)sl;
+ if(sseq->gpd) {
+ versions_gpencil_add_main(&main->gpencil, (ID *)sseq->gpd, "GPencil Node");
+ sseq->gpd= NULL;
+ }
+ }
+ else if (sl->spacetype==SPACE_IMAGE) {
+ SpaceImage *sima= (SpaceImage *)sl;
+ if(sima->gpd) {
+ versions_gpencil_add_main(&main->gpencil, (ID *)sima->gpd, "GPencil Image");
+ sima->gpd= NULL;
+ }
+ }
+ }
+ }
+}
+
+
+
static void do_versions(FileData *fd, Library *lib, Main *main)
{
/* WATCH IT!!!: pointers from libdata have not been converted */
@@ -8736,6 +8829,35 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
}
}
+ if (main->versionfile < 248 || (main->versionfile == 248 && main->subversionfile < 3)) {
+ Object *ob;
+
+ /* Adjustments needed after Bullets update */
+ for(ob = main->object.first; ob; ob= ob->id.next) {
+ ob->damping *= 0.635f;
+ ob->rdamping = 0.1 + (0.59f * ob->rdamping);
+ }
+ }
+
+ if (main->versionfile < 248 || (main->versionfile == 248 && main->subversionfile < 4)) {
+ Scene *sce;
+ World *wrld;
+
+ /* Dome (Fisheye) default parameters */
+ for (sce= main->scene.first; sce; sce= sce->id.next) {
+ sce->r.domeangle = 180;
+ sce->r.domemode = 1;
+ sce->r.domesize = 1.0f;
+ sce->r.domeres = 4;
+ sce->r.domeresbuf = 1.0f;
+ }
+ /* DBVT culling by default */
+ for(wrld=main->world.first; wrld; wrld= wrld->id.next) {
+ wrld->mode |= WO_DBVT_CULLING;
+ wrld->occlusionRes = 128;
+ }
+ }
+
if (main->versionfile < 250) {
bScreen *screen;
Scene *scene;
@@ -8744,8 +8866,10 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
Scene *sce;
Tex *tx;
- for(screen= main->screen.first; screen; screen= screen->id.next)
+ for(screen= main->screen.first; screen; screen= screen->id.next) {
do_versions_windowmanager_2_50(screen);
+ do_versions_gpencil_2_50(main, screen);
+ }
/* old Animation System (using IPO's) needs to be converted to the new Animato system
* (NOTE: conversion code in blenkernel/intern/ipo.c for now)
@@ -8788,6 +8912,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
bump the version (or sub-version.) */
{
Object *ob;
+ Material *ma;
int i;
for(ob = main->object.first; ob; ob = ob->id.next) {
@@ -8853,8 +8978,15 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
ob->data = olddata;
}
}
+
+ for(ma = main->mat.first; ma; ma = ma->id.next) {
+ if(ma->mode & MA_HALO) {
+ ma->material_type= MA_TYPE_HALO;
+ ma->mode &= ~MA_HALO;
+ }
+ }
}
-
+
/* WATCH IT!!!: pointers from libdata have not been converted yet here! */
/* WATCH IT 2!: Userdef struct init has to be in src/usiblender.c! */
@@ -8902,7 +9034,10 @@ static BHead *read_userdef(BlendFileData *bfd, FileData *fd, BHead *bhead)
bfd->user= read_struct(fd, bhead, "user def");
bfd->user->themes.first= bfd->user->themes.last= NULL;
-
+ // XXX
+ bfd->user->uifonts.first= bfd->user->uifonts.last= NULL;
+ bfd->user->uistyles.first= bfd->user->uistyles.last= NULL;
+
bhead = blo_nextbhead(fd, bhead);
/* read all attached data */
@@ -9190,9 +9325,10 @@ static void expand_animdata(FileData *fd, Main *mainvar, AnimData *adt)
/* drivers - assume that these F-Curves have driver data to be in this list... */
for (fcd= adt->drivers.first; fcd; fcd= fcd->next) {
ChannelDriver *driver= fcd->driver;
+ DriverTarget *dtar;
- expand_doit(fd, mainvar, driver->id);
- expand_doit(fd, mainvar, driver->id2);
+ for (dtar= driver->targets.first; dtar; dtar= dtar->next)
+ expand_doit(fd, mainvar, dtar->id);
}
}
@@ -9497,6 +9633,12 @@ static void expand_constraints(FileData *fd, Main *mainvar, ListBase *lb)
expand_doit(fd, mainvar, data->tar);
}
break;
+ case CONSTRAINT_TYPE_SHRINKWRAP:
+ {
+ bShrinkwrapConstraint *data = (bShrinkwrapConstraint*)curcon->data;
+ expand_doit(fd, mainvar, data->target);
+ }
+ break;
default:
break;
}
@@ -9726,6 +9868,9 @@ static void expand_scene(FileData *fd, Main *mainvar, Scene *sce)
expand_doit(fd, mainvar, srl->mat_override);
expand_doit(fd, mainvar, srl->light_override);
}
+
+ if(sce->r.dometext)
+ expand_doit(fd, mainvar, sce->r.dometext);
}
static void expand_camera(FileData *fd, Main *mainvar, Camera *ca)
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index 1c9c5cad19f..943e23861ad 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -781,13 +781,17 @@ static void write_fcurves(WriteData *wd, ListBase *fcurves)
/* driver data */
if (fcu->driver) {
ChannelDriver *driver= fcu->driver;
+ DriverTarget *dtar;
writestruct(wd, DATA, "ChannelDriver", 1, driver);
- if (driver->rna_path)
- writedata(wd, DATA, strlen(driver->rna_path)+1, driver->rna_path);
- if (driver->rna_path2)
- writedata(wd, DATA, strlen(driver->rna_path2)+1, driver->rna_path2);
+ /* targets */
+ for (dtar= driver->targets.first; dtar; dtar= dtar->next) {
+ writestruct(wd, DATA, "DriverTarget", 1, dtar);
+
+ if (dtar->rna_path)
+ writedata(wd, DATA, strlen(dtar->rna_path)+1, dtar->rna_path);
+ }
}
/* Modifiers */
@@ -952,6 +956,11 @@ static void write_pose(WriteData *wd, bPose *pose)
/* Write channels */
for (chan=pose->chanbase.first; chan; chan=chan->next) {
+ /* Write ID Properties -- and copy this comment EXACTLY for easy finding
+ of library blocks that implement this.*/
+ if (chan->prop)
+ IDP_WriteProperty(chan->prop, wd);
+
write_constraints(wd, &chan->constraints);
/* prevent crashes with autosave, when a bone duplicated in editmode has not yet been assigned to its posechannel */
@@ -1430,9 +1439,9 @@ static void write_textures(WriteData *wd, ListBase *idbase)
if (tex->adt) write_animdata(wd, tex->adt);
/* direct data */
- if(tex->plugin) writestruct(wd, DATA, "PluginTex", 1, tex->plugin);
+ if(tex->type == TEX_PLUGIN && tex->plugin) writestruct(wd, DATA, "PluginTex", 1, tex->plugin);
if(tex->coba) writestruct(wd, DATA, "ColorBand", 1, tex->coba);
- if(tex->env) writestruct(wd, DATA, "EnvMap", 1, tex->env);
+ if(tex->type == TEX_ENVMAP && tex->env) writestruct(wd, DATA, "EnvMap", 1, tex->env);
/* nodetree is integral part of texture, no libdata */
if(tex->nodetree) {
@@ -1689,27 +1698,30 @@ static void write_scenes(WriteData *wd, ListBase *scebase)
mywrite(wd, MYWRITE_FLUSH, 0);
}
-static void write_gpencil(WriteData *wd, bGPdata *gpd)
+static void write_gpencils(WriteData *wd, ListBase *lb)
{
+ bGPdata *gpd;
bGPDlayer *gpl;
bGPDframe *gpf;
bGPDstroke *gps;
- /* write gpd data block to file */
- writestruct(wd, DATA, "bGPdata", 1, gpd);
-
- /* write grease-pencil layers to file */
- for (gpl= gpd->layers.first; gpl; gpl= gpl->next) {
- writestruct(wd, DATA, "bGPDlayer", 1, gpl);
+ for (gpd= lb->first; gpd; gpd= gpd->id.next) {
+ /* write gpd data block to file */
+ writestruct(wd, ID_GD, "bGPdata", 1, gpd);
- /* write this layer's frames to file */
- for (gpf= gpl->frames.first; gpf; gpf= gpf->next) {
- writestruct(wd, DATA, "bGPDframe", 1, gpf);
+ /* write grease-pencil layers to file */
+ for (gpl= gpd->layers.first; gpl; gpl= gpl->next) {
+ writestruct(wd, DATA, "bGPDlayer", 1, gpl);
- /* write strokes */
- for (gps= gpf->strokes.first; gps; gps= gps->next) {
- writestruct(wd, DATA, "bGPDstroke", 1, gps);
- writestruct(wd, DATA, "bGPDspoint", gps->totpoints, gps->points);
+ /* write this layer's frames to file */
+ for (gpf= gpl->frames.first; gpf; gpf= gpf->next) {
+ writestruct(wd, DATA, "bGPDframe", 1, gpf);
+
+ /* write strokes */
+ for (gps= gpf->strokes.first; gps; gps= gps->next) {
+ writestruct(wd, DATA, "bGPDstroke", 1, gps);
+ writestruct(wd, DATA, "bGPDspoint", gps->totpoints, gps->points);
+ }
}
}
}
@@ -1804,10 +1816,19 @@ static void write_screens(WriteData *wd, ListBase *scrbase)
writestruct(wd, DATA, "View3D", 1, v3d);
if(v3d->bgpic) writestruct(wd, DATA, "BGpic", 1, v3d->bgpic);
if(v3d->localvd) writestruct(wd, DATA, "View3D", 1, v3d->localvd);
- if(v3d->gpd) write_gpencil(wd, v3d->gpd);
}
else if(sl->spacetype==SPACE_IPO) {
+ SpaceIpo *sipo= (SpaceIpo *)sl;
+ ListBase tmpGhosts = sipo->ghostCurves;
+
+ /* temporarily disable ghost curves when saving */
+ sipo->ghostCurves.first= sipo->ghostCurves.last= NULL;
+
writestruct(wd, DATA, "SpaceIpo", 1, sl);
+ if(sipo->ads) writestruct(wd, DATA, "bDopeSheet", 1, sipo->ads);
+
+ /* reenable ghost curves */
+ sipo->ghostCurves= tmpGhosts;
}
else if(sl->spacetype==SPACE_BUTS) {
writestruct(wd, DATA, "SpaceButs", 1, sl);
@@ -1816,9 +1837,7 @@ static void write_screens(WriteData *wd, ListBase *scrbase)
writestruct(wd, DATA, "SpaceFile", 1, sl);
}
else if(sl->spacetype==SPACE_SEQ) {
- SpaceSeq *sseq= (SpaceSeq *)sl;
writestruct(wd, DATA, "SpaceSeq", 1, sl);
- if(sseq->gpd) write_gpencil(wd, sseq->gpd);
}
else if(sl->spacetype==SPACE_OUTLINER) {
SpaceOops *so= (SpaceOops *)sl;
@@ -1838,8 +1857,6 @@ static void write_screens(WriteData *wd, ListBase *scrbase)
writestruct(wd, DATA, "SpaceImage", 1, sl);
if(sima->cumap)
write_curvemapping(wd, sima->cumap);
- if(sima->gpd)
- write_gpencil(wd, sima->gpd);
}
else if(sl->spacetype==SPACE_IMASEL) {
writestruct(wd, DATA, "SpaceImaSel", 1, sl);
@@ -1865,9 +1882,7 @@ static void write_screens(WriteData *wd, ListBase *scrbase)
writestruct(wd, DATA, "SpaceTime", 1, sl);
}
else if(sl->spacetype==SPACE_NODE){
- SpaceNode *snode= (SpaceNode *)sl;
writestruct(wd, DATA, "SpaceNode", 1, sl);
- if(snode->gpd) write_gpencil(wd, snode->gpd);
}
sl= sl->next;
}
@@ -2194,6 +2209,7 @@ static int write_file_handle(Main *mainvar, int handle, MemFile *compare, MemFil
write_nodetrees(wd, &mainvar->nodetree);
write_brushes (wd, &mainvar->brush);
write_scripts (wd, &mainvar->script);
+ write_gpencils (wd, &mainvar->gpencil);
if(current==NULL)
write_libraries(wd, mainvar->next); /* no library save in undo */
@@ -2229,8 +2245,7 @@ int BLO_write_file(Main *mainvar, char *dir, int write_flags, ReportList *report
return 0;
}
- BLI_make_file_string(G.sce, userfilename, BLI_gethome(), ".B.blend");
-
+ BLI_make_file_string(G.sce, userfilename, BLI_gethome(), ".B25.blend");
write_user_block= BLI_streq(dir, userfilename);
err= write_file_handle(mainvar, file, NULL,NULL, write_user_block, write_flags);
diff --git a/source/blender/editors/CMakeLists.txt b/source/blender/editors/CMakeLists.txt
index 06b0fb4ab41..914fdaa4bc6 100644
--- a/source/blender/editors/CMakeLists.txt
+++ b/source/blender/editors/CMakeLists.txt
@@ -30,7 +30,7 @@ SET(INC ../windowmanager
../editors/include
../../../intern/guardedalloc ../../../intern/memutil
../blenlib ../makesdna ../makesrna ../blenkernel
- ../include ../../../intern/bmfont ../imbuf ../render/extern/include
+ ../include ../imbuf ../render/extern/include
../../../intern/bsp/extern ../radiosity/extern/include
../../../intern/decimation/extern ../blenloader ../python
../../kernel/gen_system ../../../intern/SoundSystem ../readstreamglue
@@ -43,9 +43,7 @@ SET(INC ../windowmanager
)
IF(WITH_INTERNATIONAL)
- SET(INC ${INC} ../ftfont)
ADD_DEFINITIONS(-DINTERNATIONAL)
- ADD_DEFINITIONS(-DFTGL_STATIC_LIBRARY)
ENDIF(WITH_INTERNATIONAL)
IF(WITH_OPENEXR)
diff --git a/source/blender/editors/animation/anim_channels.c b/source/blender/editors/animation/anim_channels.c
index ff9876bf715..9e0e50a8de5 100644
--- a/source/blender/editors/animation/anim_channels.c
+++ b/source/blender/editors/animation/anim_channels.c
@@ -100,6 +100,18 @@
else if (smode == ACHANNEL_SETFLAG_ADD) (channel)->flag |= (sflag); \
else (channel)->flag &= ~(sflag); \
}
+
+/* set/clear/toggle macro, where the flag is negative
+ * - channel - channel with a 'flag' member that we're setting
+ * - smode - 0=clear, 1=set, 2=toggle
+ * - sflag - bitflag to set
+ */
+#define ACHANNEL_SET_FLAG_NEG(channel, smode, sflag) \
+ { \
+ if (smode == ACHANNEL_SETFLAG_TOGGLE) (channel)->flag ^= (sflag); \
+ else if (smode == ACHANNEL_SETFLAG_ADD) (channel)->flag &= ~(sflag); \
+ else (channel)->flag |= (sflag); \
+ }
/* -------------------------- Exposed API ----------------------------------- */
@@ -108,7 +120,6 @@ void ANIM_set_active_channel (void *data, short datatype, int filter, void *chan
{
ListBase anim_data = {NULL, NULL};
bAnimListElem *ale;
- short smode;
/* try to build list of filtered items */
// XXX we don't need/supply animcontext for now, since in this case, there's nothing really essential there that isn't already covered
@@ -120,15 +131,7 @@ void ANIM_set_active_channel (void *data, short datatype, int filter, void *chan
for (ale= anim_data.first; ale; ale= ale->next) {
/* skip if types don't match */
if (channel_type != ale->type)
- continue;
-
- /* flag setting mode
- * - depends on whether the provided channel is encountered
- */
- if (ale->data == channel_data)
- smode= ACHANNEL_SETFLAG_ADD;
- else
- smode= ACHANNEL_SETFLAG_CLEAR;
+ continue;
/* flag to set depends on type */
switch (ale->type) {
@@ -136,14 +139,32 @@ void ANIM_set_active_channel (void *data, short datatype, int filter, void *chan
{
bActionGroup *agrp= (bActionGroup *)ale->data;
- ACHANNEL_SET_FLAG(agrp, smode, AGRP_ACTIVE);
+ ACHANNEL_SET_FLAG(agrp, ACHANNEL_SETFLAG_CLEAR, AGRP_ACTIVE);
}
break;
case ANIMTYPE_FCURVE:
{
FCurve *fcu= (FCurve *)ale->data;
- ACHANNEL_SET_FLAG(fcu, smode, FCURVE_ACTIVE);
+ ACHANNEL_SET_FLAG(fcu, ACHANNEL_SETFLAG_CLEAR, FCURVE_ACTIVE);
+ }
+ break;
+ }
+ }
+
+ /* set active flag */
+ if (channel_data) {
+ switch (channel_type) {
+ case ANIMTYPE_GROUP:
+ {
+ bActionGroup *agrp= (bActionGroup *)channel_data;
+ agrp->flag |= AGRP_ACTIVE;
+ }
+ break;
+ case ANIMTYPE_FCURVE:
+ {
+ FCurve *fcu= (FCurve *)channel_data;
+ fcu->flag |= FCURVE_ACTIVE;
}
break;
}
@@ -695,6 +716,7 @@ enum {
ACHANNEL_SETTING_PROTECT = 1,
ACHANNEL_SETTING_MUTE,
ACHANNEL_SETTING_VISIBLE,
+ ACHANNEL_SETTING_EXPAND,
} eAnimChannel_Settings;
/* defines for setting animation-channel flags */
@@ -715,30 +737,158 @@ EnumPropertyItem prop_animchannel_settings_types[] = {
/* ------------------- */
+/* macro to be used in setflag_anim_channels */
+#define ASUBCHANNEL_SEL_OK(ale) ( (onlysel == 0) || \
+ ((ale->id) && (GS(ale->id->name)==ID_OB) && (((Object *)ale->id)->flag & SELECT)) )
+
/* Set/clear a particular flag (setting) for all selected + visible channels
* setting: the setting to modify
* mode: eAnimChannels_SetFlag
+ * onlysel: only selected channels get the flag set
*/
-static void setflag_anim_channels (bAnimContext *ac, short setting, short mode)
+static void setflag_anim_channels (bAnimContext *ac, short setting, short mode, short onlysel)
{
ListBase anim_data = {NULL, NULL};
bAnimListElem *ale;
int filter;
/* filter data */
- filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CHANNELS | ANIMFILTER_SEL);
+ filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CHANNELS);
+ if (onlysel) filter |= ANIMFILTER_SEL;
ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);
/* affect selected channels */
for (ale= anim_data.first; ale; ale= ale->next) {
switch (ale->type) {
+ case ANIMTYPE_OBJECT:
+ {
+ Base *base= (Base *)ale->data;
+ Object *ob= base->object;
+
+ if (setting == ACHANNEL_SETTING_EXPAND) {
+ // XXX - settings should really be moved out of ob->nlaflag
+ if (mode == ACHANNEL_SETFLAG_TOGGLE) ob->nlaflag ^= OB_ADS_COLLAPSED;
+ else if (mode == ACHANNEL_SETFLAG_ADD) ob->nlaflag &= ~OB_ADS_COLLAPSED;
+ else ob->nlaflag |= OB_ADS_COLLAPSED;
+ }
+ }
+ break;
+
+ case ANIMTYPE_FILLACTD:
+ {
+ bAction *act= (bAction *)ale->data;
+
+ if (ASUBCHANNEL_SEL_OK(ale)) {
+ if (setting == ACHANNEL_SETTING_EXPAND) {
+ ACHANNEL_SET_FLAG_NEG(act, mode, ACT_COLLAPSED);
+ }
+ }
+ }
+ break;
+ case ANIMTYPE_FILLDRIVERS:
+ {
+ AnimData *adt= (AnimData *)ale->data;
+
+ if (ASUBCHANNEL_SEL_OK(ale)) {
+ if (setting == ACHANNEL_SETTING_EXPAND) {
+ ACHANNEL_SET_FLAG_NEG(adt, mode, ADT_DRIVERS_COLLAPSED);
+ }
+ }
+ }
+ break;
+ case ANIMTYPE_FILLMATD:
+ {
+ Object *ob= (Object *)ale->data;
+
+ // XXX - settings should really be moved out of ob->nlaflag
+ if ((onlysel == 0) || (ob->flag & SELECT)) {
+ if (setting == ACHANNEL_SETTING_EXPAND) {
+ if (mode == ACHANNEL_SETFLAG_TOGGLE) ob->nlaflag ^= OB_ADS_SHOWMATS;
+ else if (mode == ACHANNEL_SETFLAG_ADD) ob->nlaflag |= OB_ADS_SHOWMATS;
+ else ob->nlaflag &= ~OB_ADS_SHOWMATS;
+ }
+ }
+ }
+ break;
+
+ case ANIMTYPE_DSMAT:
+ {
+ Material *ma= (Material *)ale->data;
+
+ if (ASUBCHANNEL_SEL_OK(ale)) {
+ if (setting == ACHANNEL_SETTING_EXPAND) {
+ ACHANNEL_SET_FLAG(ma, mode, MA_DS_EXPAND);
+ }
+ }
+ }
+ break;
+ case ANIMTYPE_DSLAM:
+ {
+ Lamp *la= (Lamp *)ale->data;
+
+ if (ASUBCHANNEL_SEL_OK(ale)) {
+ if (setting == ACHANNEL_SETTING_EXPAND) {
+ ACHANNEL_SET_FLAG(la, mode, LA_DS_EXPAND);
+ }
+ }
+ }
+ break;
+ case ANIMTYPE_DSCAM:
+ {
+ Camera *ca= (Camera *)ale->data;
+
+ if (ASUBCHANNEL_SEL_OK(ale)) {
+ if (setting == ACHANNEL_SETTING_EXPAND) {
+ ACHANNEL_SET_FLAG(ca, mode, CAM_DS_EXPAND);
+ }
+ }
+ }
+ break;
+ case ANIMTYPE_DSCUR:
+ {
+ Curve *cu= (Curve *)ale->data;
+
+ if (ASUBCHANNEL_SEL_OK(ale)) {
+ if (setting == ACHANNEL_SETTING_EXPAND) {
+ ACHANNEL_SET_FLAG(cu, mode, CU_DS_EXPAND);
+ }
+ }
+ }
+ break;
+ case ANIMTYPE_DSSKEY:
+ {
+ Key *key= (Key *)ale->data;
+
+ if (ASUBCHANNEL_SEL_OK(ale)) {
+ if (setting == ACHANNEL_SETTING_EXPAND) {
+ ACHANNEL_SET_FLAG(key, mode, KEYBLOCK_DS_EXPAND);
+ }
+ }
+ }
+ break;
+ case ANIMTYPE_DSWOR:
+ {
+ World *wo= (World *)ale->data;
+
+ if (ASUBCHANNEL_SEL_OK(ale)) {
+ if (setting == ACHANNEL_SETTING_EXPAND) {
+ ACHANNEL_SET_FLAG(wo, mode, WO_DS_EXPAND);
+ }
+ }
+ }
+ break;
+
case ANIMTYPE_GROUP:
{
bActionGroup *agrp= (bActionGroup *)ale->data;
- /* only 'protect' is available */
- if (setting == ACHANNEL_SETTING_PROTECT) {
- ACHANNEL_SET_FLAG(agrp, mode, AGRP_PROTECTED);
+ switch (setting) {
+ case ACHANNEL_SETTING_PROTECT:
+ ACHANNEL_SET_FLAG(agrp, mode, AGRP_PROTECTED);
+ break;
+ case ACHANNEL_SETTING_EXPAND:
+ ACHANNEL_SET_FLAG(agrp, mode, AGRP_EXPANDED);
+ break;
}
}
break;
@@ -746,15 +896,16 @@ static void setflag_anim_channels (bAnimContext *ac, short setting, short mode)
{
FCurve *fcu= (FCurve *)ale->data;
- /* mute */
- if (setting == ACHANNEL_SETTING_MUTE) {
- ACHANNEL_SET_FLAG(fcu, mode, FCURVE_MUTED);
- }
- else if (setting == ACHANNEL_SETTING_PROTECT) {
- ACHANNEL_SET_FLAG(fcu, mode, FCURVE_PROTECTED);
- }
- else if (setting == ACHANNEL_SETTING_VISIBLE) {
- ACHANNEL_SET_FLAG(fcu, mode, FCURVE_VISIBLE);
+ switch (setting) {
+ case ACHANNEL_SETTING_MUTE:
+ ACHANNEL_SET_FLAG(fcu, mode, FCURVE_MUTED);
+ break;
+ case ACHANNEL_SETTING_PROTECT:
+ ACHANNEL_SET_FLAG(fcu, mode, FCURVE_PROTECTED);
+ break;
+ case ACHANNEL_SETTING_VISIBLE:
+ ACHANNEL_SET_FLAG(fcu, mode, FCURVE_VISIBLE);
+ break;
}
}
break;
@@ -762,14 +913,13 @@ static void setflag_anim_channels (bAnimContext *ac, short setting, short mode)
{
bGPDlayer *gpl= (bGPDlayer *)ale->data;
- /* 'protect' and 'mute' */
- if (setting == ACHANNEL_SETTING_MUTE) {
- /* mute */
- ACHANNEL_SET_FLAG(gpl, mode, GP_LAYER_HIDE);
- }
- else if (setting == ACHANNEL_SETTING_PROTECT) {
- /* protected */
- ACHANNEL_SET_FLAG(gpl, mode, GP_LAYER_LOCKED);
+ switch (setting) {
+ case ACHANNEL_SETTING_MUTE:
+ ACHANNEL_SET_FLAG(gpl, mode, GP_LAYER_HIDE);
+ break;
+ case ACHANNEL_SETTING_PROTECT:
+ ACHANNEL_SET_FLAG(gpl, mode, GP_LAYER_LOCKED);
+ break;
}
}
break;
@@ -795,7 +945,7 @@ static int animchannels_setflag_exec(bContext *C, wmOperator *op)
setting= RNA_enum_get(op->ptr, "type");
/* modify setting */
- setflag_anim_channels(&ac, setting, mode);
+ setflag_anim_channels(&ac, setting, mode, 1);
/* set notifier tha things have changed */
ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_CHANNELS);
@@ -888,6 +1038,88 @@ void ANIM_OT_channels_editable_toggle (wmOperatorType *ot)
RNA_def_enum(ot->srna, "type", prop_animchannel_settings_types, ACHANNEL_SETTING_PROTECT, "Type", "");
}
+/* ********************** Expand Channels Operator *********************** */
+
+static int animchannels_expand_exec (bContext *C, wmOperator *op)
+{
+ bAnimContext ac;
+ short onlysel= 1;
+
+ /* get editor data */
+ if (ANIM_animdata_get_context(C, &ac) == 0)
+ return OPERATOR_CANCELLED;
+
+ /* only affect selected channels? */
+ if (RNA_boolean_get(op->ptr, "all"))
+ onlysel= 0;
+
+ /* modify setting */
+ setflag_anim_channels(&ac, ACHANNEL_SETTING_EXPAND, ACHANNEL_SETFLAG_ADD, onlysel);
+
+ /* set notifier that things have changed */
+ ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_CHANNELS);
+
+ return OPERATOR_FINISHED;
+}
+
+void ANIM_OT_channels_expand (wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "Expand Channels";
+ ot->idname= "ANIM_OT_channels_expand";
+
+ /* api callbacks */
+ ot->exec= animchannels_expand_exec;
+ ot->poll= ED_operator_areaactive;
+
+ /* flags */
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+
+ /* props */
+ RNA_def_boolean(ot->srna, "all", 0, "All", "Expand all channels (not just selected ones)");
+}
+
+/* ********************** Collapse Channels Operator *********************** */
+
+static int animchannels_collapse_exec (bContext *C, wmOperator *op)
+{
+ bAnimContext ac;
+ short onlysel= 1;
+
+ /* get editor data */
+ if (ANIM_animdata_get_context(C, &ac) == 0)
+ return OPERATOR_CANCELLED;
+
+ /* only affect selected channels? */
+ if (RNA_boolean_get(op->ptr, "all"))
+ onlysel= 0;
+
+ /* modify setting */
+ setflag_anim_channels(&ac, ACHANNEL_SETTING_EXPAND, ACHANNEL_SETFLAG_CLEAR, onlysel);
+
+ /* set notifier that things have changed */
+ ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_CHANNELS);
+
+ return OPERATOR_FINISHED;
+}
+
+void ANIM_OT_channels_collapse (wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "Collapse Channels";
+ ot->idname= "ANIM_OT_channels_collapse";
+
+ /* api callbacks */
+ ot->exec= animchannels_collapse_exec;
+ ot->poll= ED_operator_areaactive;
+
+ /* flags */
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+
+ /* props */
+ RNA_def_boolean(ot->srna, "all", 0, "All", "Collapse all channels (not just selected ones)");
+}
+
/* ********************** Select All Operator *********************** */
static int animchannels_deselectall_exec(bContext *C, wmOperator *op)
@@ -1262,8 +1494,9 @@ static void mouse_anim_channels (bAnimContext *ac, float x, int channel_index, s
offset = 0;
if (x >= (ACHANNEL_NAMEWIDTH-ACHANNEL_BUTTON_WIDTH)) {
- /* toggle protection */
- fcu->flag ^= FCURVE_PROTECTED;
+ /* toggle protection (only if there's a toggle there) */
+ if (fcu->bezt)
+ fcu->flag ^= FCURVE_PROTECTED;
}
else if (x >= (ACHANNEL_NAMEWIDTH-2*ACHANNEL_BUTTON_WIDTH)) {
/* toggle mute */
@@ -1389,11 +1622,11 @@ static int animchannels_mouseclick_invoke(bContext *C, wmOperator *op, wmEvent *
return OPERATOR_FINISHED;
}
-void ANIM_OT_channels_mouseclick (wmOperatorType *ot)
+void ANIM_OT_channels_click (wmOperatorType *ot)
{
/* identifiers */
ot->name= "Mouse Click on Channels";
- ot->idname= "ANIM_OT_channels_mouseclick";
+ ot->idname= "ANIM_OT_channels_click";
/* api callbacks */
ot->invoke= animchannels_mouseclick_invoke;
@@ -1414,7 +1647,7 @@ void ED_operatortypes_animchannels(void)
{
WM_operatortype_append(ANIM_OT_channels_select_all_toggle);
WM_operatortype_append(ANIM_OT_channels_select_border);
- WM_operatortype_append(ANIM_OT_channels_mouseclick);
+ WM_operatortype_append(ANIM_OT_channels_click);
WM_operatortype_append(ANIM_OT_channels_setting_enable);
WM_operatortype_append(ANIM_OT_channels_setting_disable);
@@ -1429,6 +1662,9 @@ void ED_operatortypes_animchannels(void)
//WM_operatortype_append(ANIM_OT_channels_move_top);
//WM_operatortype_append(ANIM_OT_channels_move_bottom);
+ WM_operatortype_append(ANIM_OT_channels_expand);
+ WM_operatortype_append(ANIM_OT_channels_collapse);
+
WM_operatortype_append(ANIM_OT_channels_visibility_toggle);
}
@@ -1439,9 +1675,9 @@ void ED_keymap_animchannels(wmWindowManager *wm)
/* selection */
/* click-select */
// XXX for now, only leftmouse....
- WM_keymap_add_item(keymap, "ANIM_OT_channels_mouseclick", LEFTMOUSE, KM_PRESS, 0, 0);
- RNA_boolean_set(WM_keymap_add_item(keymap, "ANIM_OT_channels_mouseclick", LEFTMOUSE, KM_PRESS, KM_SHIFT, 0)->ptr, "extend", 1);
- RNA_boolean_set(WM_keymap_add_item(keymap, "ANIM_OT_channels_mouseclick", LEFTMOUSE, KM_PRESS, KM_CTRL|KM_SHIFT, 0)->ptr, "children_only", 1);
+ WM_keymap_add_item(keymap, "ANIM_OT_channels_click", LEFTMOUSE, KM_PRESS, 0, 0);
+ RNA_boolean_set(WM_keymap_add_item(keymap, "ANIM_OT_channels_click", LEFTMOUSE, KM_PRESS, KM_SHIFT, 0)->ptr, "extend", 1);
+ RNA_boolean_set(WM_keymap_add_item(keymap, "ANIM_OT_channels_click", LEFTMOUSE, KM_PRESS, KM_CTRL|KM_SHIFT, 0)->ptr, "children_only", 1);
/* deselect all */
WM_keymap_add_item(keymap, "ANIM_OT_channels_select_all_toggle", AKEY, KM_PRESS, 0, 0);
@@ -1458,6 +1694,13 @@ void ED_keymap_animchannels(wmWindowManager *wm)
/* settings - specialised hotkeys */
WM_keymap_add_item(keymap, "ANIM_OT_channels_editable_toggle", TABKEY, KM_PRESS, 0, 0);
+ /* expand/collapse */
+ WM_keymap_add_item(keymap, "ANIM_OT_channels_expand", PADPLUSKEY, KM_PRESS, 0, 0);
+ WM_keymap_add_item(keymap, "ANIM_OT_channels_collapse", PADMINUS, KM_PRESS, 0, 0);
+
+ RNA_boolean_set(WM_keymap_add_item(keymap, "ANIM_OT_channels_expand", PADPLUSKEY, KM_PRESS, KM_CTRL, 0)->ptr, "all", 1);
+ RNA_boolean_set(WM_keymap_add_item(keymap, "ANIM_OT_channels_collapse", PADMINUS, KM_PRESS, KM_CTRL, 0)->ptr, "all", 1);
+
/* rearranging - actions only */
//WM_keymap_add_item(keymap, "ANIM_OT_channels_move_up", PAGEUPKEY, KM_PRESS, KM_SHIFT, 0);
//WM_keymap_add_item(keymap, "ANIM_OT_channels_move_down", PAGEDOWNKEY, KM_PRESS, KM_SHIFT, 0);
diff --git a/source/blender/editors/animation/anim_draw.c b/source/blender/editors/animation/anim_draw.c
index e0962eadfca..7f07de80754 100644
--- a/source/blender/editors/animation/anim_draw.c
+++ b/source/blender/editors/animation/anim_draw.c
@@ -62,7 +62,6 @@
#include "UI_interface.h"
#include "UI_resources.h"
-#include "UI_text.h"
#include "UI_view2d.h"
/* XXX */
@@ -86,7 +85,7 @@ static void draw_cfra_number (Scene *scene, View2D *v2d, float cfra, short time)
sprintf(str, " %.2f", FRA2TIME(CFRA));
else
sprintf(str, " %d", CFRA);
- slen= (short)UI_GetStringWidth(G.font, str, 0) - 1;
+ slen= (short)UI_GetStringWidth(str) - 1;
/* get starting coordinates for drawing */
x= cfra * xscale;
@@ -98,8 +97,7 @@ static void draw_cfra_number (Scene *scene, View2D *v2d, float cfra, short time)
/* draw current frame number - black text */
UI_ThemeColor(TH_TEXT);
- ui_rasterpos_safe(x-5, y+3, 1.0f);
- UI_DrawString(G.fonts, str, 0); // XXX may need to be updated for font stuff
+ UI_DrawString(x-5, y+3, str); // XXX may need to be updated for font stuff
/* restore view transform */
glScalef(xscale, 1.0, 1.0);
diff --git a/source/blender/editors/animation/anim_filter.c b/source/blender/editors/animation/anim_filter.c
index ea30fe83f35..afad396607b 100644
--- a/source/blender/editors/animation/anim_filter.c
+++ b/source/blender/editors/animation/anim_filter.c
@@ -291,7 +291,10 @@ short ANIM_animdata_get_context (const bContext *C, bAnimContext *ac)
/* get useful default context settings from context */
ac->scene= scene;
- ac->obact= (scene && scene->basact)? scene->basact->object : NULL;
+ if (scene) {
+ ac->markers= &scene->markers;
+ ac->obact= (scene->basact)? scene->basact->object : NULL;
+ }
ac->sa= sa;
ac->ar= ar;
ac->spacetype= (sa) ? sa->spacetype : 0;
@@ -563,7 +566,7 @@ static int animdata_filter_action (ListBase *anim_data, bAction *act, int filter
lastchan= agrp->channels.last;
- /* there are some situations, where only the channels of the animive group should get considered */
+ /* there are some situations, where only the channels of the action group should get considered */
if (!(filter_mode & ANIMFILTER_ACTGROUPED) || (agrp->flag & AGRP_ACTIVE)) {
/* filters here are a bit convoulted...
* - groups show a "summary" of keyframes beside their name which must accessable for tools which handle keyframes
@@ -574,8 +577,9 @@ static int animdata_filter_action (ListBase *anim_data, bAction *act, int filter
* - group is expanded
* - we're interested in keyframes, but not if they appear in selected channels
*/
+ // XXX what was the selection check here for again?
if ( (!(filter_mode & ANIMFILTER_VISIBLE) || EXPANDED_AGRP(agrp)) ||
- ( ANIMCHANNEL_SELOK(SEL_AGRP(agrp)) && (filter_mode & ANIMFILTER_CURVESONLY) ) )
+ ( /*ANIMCHANNEL_SELOK(SEL_AGRP(agrp)) &&*/ (filter_mode & ANIMFILTER_CURVESONLY) ) )
{
if (!(filter_mode & ANIMFILTER_FOREDIT) || EDITABLE_AGRP(agrp)) {
// XXX the 'owner' info here needs review...
@@ -750,7 +754,17 @@ static int animdata_filter_dopesheet_mats (ListBase *anim_data, bDopeSheet *ads,
Material *ma= give_current_material(ob, a);
/* for now, if no material returned, skip (this shouldn't confuse the user I hope) */
- if (ELEM3(NULL, ma, ma->adt, ma->adt->action)) continue;
+ if (ELEM(NULL, ma, ma->adt))
+ continue;
+
+ if ((ads->filterflag & ADS_FILTER_ONLYDRIVERS)==0) {
+ if (ANIMDATA_HAS_KEYS(ma) == 0)
+ continue;
+ }
+ else {
+ if (ANIMDATA_HAS_DRIVERS(ma) == 0)
+ continue;
+ }
/* make a temp list elem for this */
ld= MEM_callocN(sizeof(LinkData), "DopeSheet-MaterialCache");
@@ -787,10 +801,16 @@ static int animdata_filter_dopesheet_mats (ListBase *anim_data, bDopeSheet *ads,
}
}
- /* add material's F-Curve channels? */
+ /* add material's F-Curve or Driver channels? */
if (FILTER_MAT_OBJD(ma) || (filter_mode & ANIMFILTER_CURVESONLY)) {
+ if ((ads->filterflag & ADS_FILTER_ONLYDRIVERS)==0) {
// XXX the 'owner' info here is still subject to improvement
- items += animdata_filter_action(anim_data, ma->adt->action, filter_mode, ma, ANIMTYPE_DSMAT, (ID *)ma);
+ items += animdata_filter_action(anim_data, ma->adt->action, filter_mode, ma, ANIMTYPE_DSMAT, (ID *)ma);
+ }
+ else {
+ // need to make the ownertype normal object here... (maybe type should be a separate one for clarity?)
+ items += animdata_filter_fcurves(anim_data, ma->adt->drivers.first, NULL, ma, ANIMTYPE_DSMAT, filter_mode, (ID *)ma);
+ }
}
}
}
@@ -869,7 +889,6 @@ static int animdata_filter_dopesheet_obdata (ListBase *anim_data, bDopeSheet *ad
static int animdata_filter_dopesheet_ob (ListBase *anim_data, bDopeSheet *ads, Base *base, int filter_mode)
{
bAnimListElem *ale=NULL;
- Scene *sce= (Scene *)ads->source;
Object *ob= base->object;
Key *key= ob_get_key(ob);
int items = 0;
@@ -877,7 +896,7 @@ static int animdata_filter_dopesheet_ob (ListBase *anim_data, bDopeSheet *ads, B
/* add this object as a channel first */
if ((filter_mode & ANIMFILTER_CURVESONLY) == 0) {
/* check if filtering by selection */
- if (ANIMCHANNEL_SELOK( ((base->flag & SELECT) || (base == sce->basact)) )) {
+ if ANIMCHANNEL_SELOK((base->flag & SELECT)) {
ale= make_new_animlistelem(base, ANIMTYPE_OBJECT, NULL, ANIMTYPE_NONE, NULL);
if (ale) {
BLI_addtail(anim_data, ale);
@@ -1195,7 +1214,7 @@ static int animdata_filter_dopesheet (ListBase *anim_data, bDopeSheet *ads, int
if (base->object) {
Object *ob= base->object;
Key *key= ob_get_key(ob);
- short actOk, keyOk, dataOk, matOk;
+ short actOk=1, keyOk=1, dataOk=1, matOk=1;
/* firstly, check if object can be included, by the following fanimors:
* - if only visible, must check for layer and also viewport visibility
@@ -1204,8 +1223,8 @@ static int animdata_filter_dopesheet (ListBase *anim_data, bDopeSheet *ads, int
*/
// TODO: if cache is implemented, just check name here, and then
if (filter_mode & ANIMFILTER_VISIBLE) {
- /* layer visibility */
- if ((ob->lay & sce->lay)==0) continue;
+ /* layer visibility - we check both object and base, since these may not be in sync yet */
+ if ((sce->lay & (ob->lay|base->lay))==0) continue;
/* outliner restrict-flag */
if (ob->restrictflag & OB_RESTRICT_VIEW) continue;
diff --git a/source/blender/editors/animation/anim_intern.h b/source/blender/editors/animation/anim_intern.h
new file mode 100644
index 00000000000..e903007fbc0
--- /dev/null
+++ b/source/blender/editors/animation/anim_intern.h
@@ -0,0 +1,18 @@
+/* Testing code for 2.5 animation system
+ * Copyright 2009, Joshua Leung
+ */
+
+#ifndef ANIM_INTERN_H
+#define ANIM_INTERN_H
+
+
+/* KeyingSets/Keyframing Interface ------------- */
+
+/* list of builtin KeyingSets (defined in keyingsets.c) */
+extern ListBase builtin_keyingsets;
+
+short keyingset_context_ok_poll(bContext *C, KeyingSet *ks);
+
+short modifykey_get_context_data (bContext *C, ListBase *dsources, KeyingSet *ks);
+
+#endif // ANIM_INTERN_H
diff --git a/source/blender/editors/animation/anim_ipo_utils.c b/source/blender/editors/animation/anim_ipo_utils.c
index ae0b8435635..c2a1199f6c6 100644
--- a/source/blender/editors/animation/anim_ipo_utils.c
+++ b/source/blender/editors/animation/anim_ipo_utils.c
@@ -135,31 +135,25 @@ void getname_anim_fcurve(char *name, ID *id, FCurve *fcu)
/* for structname, we use a custom name if one is available */
// xxx we might want an icon from types?
// xxx it is hard to differentiate between object and bone channels then, if ob + bone motion occur together...
- nameprop= RNA_struct_name_property(&ptr);
+ nameprop= RNA_struct_name_property(ptr.type);
if (nameprop) {
/* this gets a string which will need to be freed */
structname= RNA_property_string_get_alloc(&ptr, nameprop, NULL, 0);
}
else
- structname= (char *)RNA_struct_ui_name(&ptr);
+ structname= (char *)RNA_struct_ui_name(ptr.type);
/* Property Name is straightforward */
- propname= (char *)RNA_property_ui_name(&ptr, prop);
+ propname= (char *)RNA_property_ui_name(prop);
/* Array Index - only if applicable */
- if (RNA_property_array_length(&ptr, prop)) {
- // XXX the format of these is not final... we don't know how this will go yet
- // format 1 style
- //static char *vectoritem[4]= {".X", ".Y", ".Z", ".W"};
- //static char *quatitem[4]= {".W", ".X", ".Y", ".Z"};
- //static char *coloritem[4]= {".R", ".G", ".B", ".A"};
- // format 2 style
+ if (RNA_property_array_length(prop)) {
static char *vectoritem[4]= {"X ", "Y ", "Z ", "W "};
static char *quatitem[4]= {"W ", "X ", "Y ", "Z "};
static char *coloritem[4]= {"R ", "G ", "B ", "A "};
- int tot= RNA_property_array_length(&ptr, prop);
- int propsubtype= RNA_property_subtype(&ptr, prop);
+ int tot= RNA_property_array_length(prop);
+ int propsubtype= RNA_property_subtype(prop);
/* get string to use for array index */
if ((tot == 4) && (propsubtype == PROP_ROTATION))
@@ -181,8 +175,7 @@ void getname_anim_fcurve(char *name, ID *id, FCurve *fcu)
/* putting this all together into the buffer */
// XXX we need to check for invalid names...
- //BLI_snprintf(name, 128, "%s.%s%s", structname, propname, arrayname); // format 1
- BLI_snprintf(name, 128, "%s%s (%s)", arrayname, propname, structname); // format 2
+ BLI_snprintf(name, 128, "%s%s (%s)", arrayname, propname, structname);
/* free temp name if nameprop is set */
if (nameprop)
@@ -197,6 +190,7 @@ void getname_anim_fcurve(char *name, ID *id, FCurve *fcu)
/* ------------------------------- Color Codes for F-Curve Channels ---------------------------- */
+#if 0
/* used for FCURVE_COLOR_AUTO_RAINBOW */
// XXX this still doesn't work too great when there are more than 32 curves (which happens most of the time)
void ipo_rainbow (int cur, int tot, float *out)
@@ -206,14 +200,60 @@ void ipo_rainbow (int cur, int tot, float *out)
dfac= (float)(1.0/( (float)tot+1.0));
/* this calculation makes 2 or 4 different cycles of rainbow colors */
+ // 2 different cycles - for hue
if(cur< tot/2) fac= (float)(cur*2.0f*dfac);
else fac= (float)((cur-tot/2)*2.0f*dfac +dfac);
+
+ // third cycle with altered hue
if(tot > 32) fac= fac*1.95f;
+ // clamping for excessive ranges
if(fac>1.0f) fac-= 1.0f;
+ // saturation adjustments for more visible range
if(fac>0.5f && fac<0.8f) sat= 0.5f;
else sat= 0.6f;
- //return hsv_to_cpack(fac, sat, 1.0f);
hsv_to_rgb(fac, sat, 1.0f, out, out+1, out+2);
}
+#endif
+
+/* step between the major distinguishable color bands of the primary colors */
+#define HSV_BANDWIDTH 0.3f
+
+/* testbed for FCURVE_COLOR_AUTO_RAINBOW determination methods */
+//void fcurve_rainbow (unsigned int cur, unsigned int tot, float *out)
+void ipo_rainbow (int cur, int tot, float *out)
+{
+ float hue, val, sat, fac;
+ int grouping;
+
+ /* we try to divide the colours into groupings of n colors,
+ * where n is:
+ * 3 - for 'odd' numbers of curves - there should be a majority of triplets of curves
+ * 4 - for 'even' numbers of curves - there should be a majority of quartets of curves
+ * so the base color is simply one of the three primary colors
+ */
+ grouping= (4 - (tot % 2));
+ hue= HSV_BANDWIDTH * (float)(cur % grouping);
+
+ /* 'Value' (i.e. darkness) needs to vary so that larger sets of three will be
+ * 'darker' (i.e. smaller value), so that they don't look that similar to previous ones.
+ * However, only a range of 0.3 to 1.0 is really usable to avoid clashing
+ * with some other stuff
+ */
+ fac = ((float)cur / (float)tot) * 0.7f;
+
+ /* the base color can get offset a bit so that the colors aren't so identical */
+ hue += fac * HSV_BANDWIDTH;
+ if (hue > 1.0f) hue= fmod(hue, 1.0f);
+
+ /* saturation adjustments for more visible range */
+ if ((hue > 0.5f) && (hue < 0.8f)) sat= 0.5f;
+ else sat= 0.6f;
+
+ /* value is fixed at 1.0f, otherwise we cannot clearly see the curves... */
+ val= 1.0f;
+
+ /* finally, conver this to RGB colors */
+ hsv_to_rgb(hue, sat, val, out, out+1, out+2);
+}
diff --git a/source/blender/editors/animation/anim_markers.c b/source/blender/editors/animation/anim_markers.c
index fc52d9c4511..2abec6b831c 100644
--- a/source/blender/editors/animation/anim_markers.c
+++ b/source/blender/editors/animation/anim_markers.c
@@ -31,6 +31,7 @@
#include "MEM_guardedalloc.h"
+#include "DNA_action_types.h"
#include "DNA_scene_types.h"
#include "DNA_screen_types.h"
#include "DNA_space_types.h"
@@ -45,6 +46,7 @@
#include "BKE_context.h"
#include "BKE_global.h"
+#include "BKE_fcurve.h"
#include "BKE_utildefines.h"
#include "WM_api.h"
@@ -57,7 +59,6 @@
#include "UI_interface_icons.h"
#include "UI_view2d.h"
#include "UI_resources.h"
-#include "UI_text.h"
#include "ED_markers.h"
#include "ED_screen.h"
@@ -83,10 +84,142 @@ static ListBase *context_get_markers(const bContext *C)
return &CTX_data_scene(C)->markers;
}
-/* ************* Marker Drawing ************ */
+/* Get the marker that is closest to this point */
+TimeMarker *ED_markers_find_nearest_marker (ListBase *markers, float x)
+{
+ TimeMarker *marker, *nearest=NULL;
+ float dist, min_dist= 1000000;
+
+ if (markers) {
+ for (marker= markers->first; marker; marker= marker->next) {
+ dist = ABS((float)marker->frame - x);
+
+ if (dist < min_dist) {
+ min_dist= dist;
+ nearest= marker;
+ }
+ }
+ }
+
+ return nearest;
+}
+
+/* Return the time of the marker that occurs on a frame closest to the given time */
+int ED_markers_find_nearest_marker_time (ListBase *markers, float x)
+{
+ TimeMarker *nearest= ED_markers_find_nearest_marker(markers, x);
+ return (nearest) ? (nearest->frame) : (int)floor(x + 0.5f);
+}
+
+
+void ED_markers_get_minmax (ListBase *markers, short sel, float *first, float *last)
+{
+ TimeMarker *marker;
+ float min, max;
+ int selcount = 0;
+
+ /* sanity check */
+ printf("markers = %p - %p, %p \n", markers, markers->first, markers->last);
+ if (markers == NULL) {
+ *first = 0.0f;
+ *last = 0.0f;
+ return;
+ }
+
+ if (markers->first && markers->last) {
+ TimeMarker *fm= markers->first;
+ TimeMarker *lm= markers->last;
+
+ min= (float)fm->frame;
+ max= (float)lm->frame;
+ }
+ else {
+ *first = 0.0f;
+ *last = 0.0f;
+ return;
+ }
+
+ /* count how many markers are usable - see later */
+ if (sel) {
+ for (marker= markers->first; marker; marker= marker->next) {
+ if (marker->flag & SELECT)
+ selcount++;
+ }
+ }
+ else
+ selcount= BLI_countlist(markers);
+
+ /* if only selected are to be considered, only consider the selected ones
+ * (optimisation for not searching list)
+ */
+ if (selcount > 1) {
+ for (marker= markers->first; marker; marker= marker->next) {
+ if (sel) {
+ if (marker->flag & SELECT) {
+ if (marker->frame < min)
+ min= (float)marker->frame;
+ if (marker->frame > max)
+ max= (float)marker->frame;
+ }
+ }
+ else {
+ if (marker->frame < min)
+ min= (float)marker->frame;
+ if (marker->frame > max)
+ max= (float)marker->frame;
+ }
+ }
+ }
+
+ /* set the min/max values */
+ *first= min;
+ *last= max;
+}
+
+/* Adds a marker to list of cfra elems */
+void add_marker_to_cfra_elem(ListBase *lb, TimeMarker *marker, short only_sel)
+{
+ CfraElem *ce, *cen;
+
+ /* should this one only be considered if it is selected? */
+ if ((only_sel) && ((marker->flag & SELECT)==0))
+ return;
+
+ /* insertion sort - try to find a previous cfra elem */
+ for (ce= lb->first; ce; ce= ce->next) {
+ if (ce->cfra == marker->frame) {
+ /* do because of double keys */
+ if (marker->flag & SELECT)
+ ce->sel= marker->flag;
+ return;
+ }
+ else if (ce->cfra > marker->frame) break;
+ }
+
+ cen= MEM_callocN(sizeof(CfraElem), "add_to_cfra_elem");
+ if (ce) BLI_insertlinkbefore(lb, ce, cen);
+ else BLI_addtail(lb, cen);
-/* XXX */
-extern void ui_rasterpos_safe(float x, float y, float aspect);
+ cen->cfra= marker->frame;
+ cen->sel= marker->flag;
+}
+
+/* This function makes a list of all the markers. The only_sel
+ * argument is used to specify whether only the selected markers
+ * are added.
+ */
+void ED_markers_make_cfra_list(ListBase *markers, ListBase *lb, short only_sel)
+{
+ TimeMarker *marker;
+
+ if (markers == NULL)
+ return;
+
+ for (marker= markers->first; marker; marker= marker->next)
+ add_marker_to_cfra_elem(lb, marker, only_sel);
+}
+
+/* ************* Marker Drawing ************ */
/* function to draw markers */
static void draw_marker(View2D *v2d, TimeMarker *marker, int cfra, int flag)
@@ -100,12 +233,13 @@ static void draw_marker(View2D *v2d, TimeMarker *marker, int cfra, int flag)
ypixels= v2d->mask.ymax-v2d->mask.ymin;
UI_view2d_getscale(v2d, &xscale, &yscale);
- glScalef(1.0/xscale, 1.0, 1.0);
+ glScalef(1.0f/xscale, 1.0f, 1.0f);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
/* vertical line - dotted */
+ // NOTE: currently only used for sequencer
if (flag & DRAW_MARKERS_LINES) {
setlinestyle(3);
@@ -115,8 +249,8 @@ static void draw_marker(View2D *v2d, TimeMarker *marker, int cfra, int flag)
glColor4ub(0, 0, 0, 96);
glBegin(GL_LINES);
- glVertex2f((xpos*xscale)+0.5, 12);
- glVertex2f((xpos*xscale)+0.5, 34*yscale); /* a bit lazy but we know it cant be greater then 34 strips high*/
+ glVertex2f((xpos*xscale)+0.5f, 12.0f);
+ glVertex2f((xpos*xscale)+0.5f, 34.0f*yscale); /* a bit lazy but we know it cant be greater then 34 strips high */
glEnd();
setlinestyle(0);
@@ -133,27 +267,35 @@ static void draw_marker(View2D *v2d, TimeMarker *marker, int cfra, int flag)
ICON_MARKER;
}
- UI_icon_draw(xpos*xscale-5.0, 16.0, icon_id);
+ UI_icon_draw(xpos*xscale-5.0f, 16.0f, icon_id);
glBlendFunc(GL_ONE, GL_ZERO);
glDisable(GL_BLEND);
/* and the marker name too, shifted slightly to the top-right */
if (marker->name && marker->name[0]) {
- if(marker->flag & SELECT) {
+ float x, y;
+
+ if (marker->flag & SELECT) {
UI_ThemeColor(TH_TEXT_HI);
- ui_rasterpos_safe(xpos*xscale+4.0, (ypixels<=39.0)?(ypixels-10.0):29.0, 1.0);
+ x= xpos*xscale + 4.0f;
+ y= (ypixels <= 39.0f)? (ypixels-10.0f) : 29.0f;
}
else {
UI_ThemeColor(TH_TEXT);
- if((marker->frame <= cfra) && (marker->frame+5 > cfra))
- ui_rasterpos_safe(xpos*xscale+4.0, (ypixels<=39.0)?(ypixels-10.0):29.0, 1.0);
- else
- ui_rasterpos_safe(xpos*xscale+4.0, 17.0, 1.0);
+ if((marker->frame <= cfra) && (marker->frame+5 > cfra)) {
+ x= xpos*xscale + 4.0f;
+ y= (ypixels <= 39.0f)? (ypixels - 10.0f) : 29.0f;
+ }
+ else {
+ x= xpos*xscale + 4.0f;
+ y= 17.0f;
+ }
}
- UI_DrawString(G.font, marker->name, 0);
+ UI_DrawString(x, y, marker->name);
}
- glScalef(xscale, 1.0, 1.0);
+
+ glScalef(xscale, 1.0f, 1.0f);
}
/* Draw Scene-Markers in time window */
@@ -163,22 +305,22 @@ void draw_markers_time(const bContext *C, int flag)
View2D *v2d= UI_view2d_fromcontext(C);
TimeMarker *marker;
- if(markers == NULL)
+ if (markers == NULL)
return;
/* unselected markers are drawn at the first time */
for (marker= markers->first; marker; marker= marker->next) {
- if (!(marker->flag & SELECT)) draw_marker(v2d, marker, CTX_data_scene(C)->r.cfra, flag);
+ if ((marker->flag & SELECT) == 0)
+ draw_marker(v2d, marker, CTX_data_scene(C)->r.cfra, flag);
}
/* selected markers are drawn later */
for (marker= markers->first; marker; marker= marker->next) {
- if (marker->flag & SELECT) draw_marker(v2d, marker, CTX_data_scene(C)->r.cfra, flag);
+ if (marker->flag & SELECT)
+ draw_marker(v2d, marker, CTX_data_scene(C)->r.cfra, flag);
}
}
-
-
/* ************************** add markers *************************** */
/* add TimeMarker at curent frame */
@@ -188,13 +330,14 @@ static int ed_marker_add(bContext *C, wmOperator *op)
TimeMarker *marker;
int frame= CTX_data_scene(C)->r.cfra;
- if(markers == NULL)
+ if (markers == NULL)
return OPERATOR_CANCELLED;
/* two markers can't be at the same place */
- for(marker= markers->first; marker; marker= marker->next)
- if(marker->frame == frame)
+ for (marker= markers->first; marker; marker= marker->next) {
+ if (marker->frame == frame)
return OPERATOR_CANCELLED;
+ }
/* deselect all */
for(marker= markers->first; marker; marker= marker->next)
@@ -295,9 +438,13 @@ static void ed_marker_move_exit(bContext *C, wmOperator *op)
{
MarkerMove *mm= op->customdata;
+ /* free data */
MEM_freeN(mm->oldframe);
MEM_freeN(op->customdata);
op->customdata= NULL;
+
+ /* clear custom header prints */
+ ED_area_headerprint(CTX_wm_area(C), NULL);
}
static int ed_marker_move_invoke(bContext *C, wmOperator *op, wmEvent *evt)
@@ -362,7 +509,7 @@ static int ed_marker_move_modal(bContext *C, wmOperator *op, wmEvent *evt)
case ESCKEY:
ed_marker_move_cancel(C, op);
return OPERATOR_CANCELLED;
-
+
case LEFTMOUSE:
case MIDDLEMOUSE:
case RIGHTMOUSE:
@@ -374,7 +521,6 @@ static int ed_marker_move_modal(bContext *C, wmOperator *op, wmEvent *evt)
break;
case MOUSEMOVE:
-
dx= v2d->mask.xmax-v2d->mask.xmin;
dx= (v2d->cur.xmax-v2d->cur.xmin)/dx;
@@ -412,12 +558,11 @@ static int ed_marker_move_modal(bContext *C, wmOperator *op, wmEvent *evt)
sprintf(str, "Marker %.2f offset %.2f", FRA2TIME(selmarker->frame), FRA2TIME(offs));
}
else if (mm->slink->spacetype == SPACE_ACTION) {
-#if 0
-XXX if (saction->flag & SACTION_DRAWTIME)
+ SpaceAction *saction= (SpaceAction *)mm->slink;
+ if (saction->flag & SACTION_DRAWTIME)
sprintf(str, "Marker %.2f offset %.2f", FRA2TIME(selmarker->frame), FRA2TIME(offs));
else
sprintf(str, "Marker %.2f offset %.2f", (double)(selmarker->frame), (double)(offs));
-#endif
}
else {
sprintf(str, "Marker %.2f offset %.2f", (double)(selmarker->frame), (double)(offs));
@@ -432,21 +577,20 @@ XXX if (saction->flag & SACTION_DRAWTIME)
else
sprintf(str, "Marker offset %.2f ", FRA2TIME(offs));
}
-#if 0
-XXX else if (mm->slink->spacetype == SPACE_ACTION) {
+ else if (mm->slink->spacetype == SPACE_ACTION) {
+ SpaceAction *saction= (SpaceAction *)mm->slink;
if (saction->flag & SACTION_DRAWTIME)
sprintf(str, "Marker offset %.2f ", FRA2TIME(offs));
else
sprintf(str, "Marker offset %.2f ", (double)(offs));
}
-#endif
else {
sprintf(str, "Marker offset %.2f ", (double)(offs));
}
}
WM_event_add_notifier(C, NC_SCENE|ND_MARKERS, NULL);
- // headerprint(str); XXX
+ ED_area_headerprint(CTX_wm_area(C), str);
}
}
@@ -508,19 +652,23 @@ static void ed_marker_duplicate_apply(bContext *C, wmOperator *op)
ListBase *markers= context_get_markers(C);
TimeMarker *marker, *newmarker;
- if(markers == NULL) return;
+ if (markers == NULL)
+ return;
/* go through the list of markers, duplicate selected markers and add duplicated copies
- * to the begining of the list (unselect original markers) */
- for(marker= markers->first; marker; marker= marker->next) {
- if(marker->flag & SELECT){
+ * to the begining of the list (unselect original markers)
+ */
+ for (marker= markers->first; marker; marker= marker->next) {
+ if (marker->flag & SELECT) {
/* unselect selected marker */
marker->flag &= ~SELECT;
+
/* create and set up new marker */
newmarker = MEM_callocN(sizeof(TimeMarker), "TimeMarker");
newmarker->flag= SELECT;
newmarker->frame= marker->frame;
BLI_strncpy(newmarker->name, marker->name, sizeof(marker->name));
+
/* new marker is added to the begining of list */
BLI_addhead(markers, newmarker);
}
@@ -569,12 +717,13 @@ static void select_timeline_marker_frame(ListBase *markers, int frame, unsigned
TimeMarker *marker;
int select=0;
- for(marker= markers->first; marker; marker= marker->next) {
+ for (marker= markers->first; marker; marker= marker->next) {
/* if Shift is not set, then deselect Markers */
- if(!shift) marker->flag &= ~SELECT;
+ if (!shift) marker->flag &= ~SELECT;
+
/* this way a not-shift select will allways give 1 selected marker */
- if((marker->frame == frame) && (!select)) {
- if(marker->flag & SELECT)
+ if ((marker->frame == frame) && (!select)) {
+ if (marker->flag & SELECT)
marker->flag &= ~SELECT;
else
marker->flag |= SELECT;
@@ -583,24 +732,6 @@ static void select_timeline_marker_frame(ListBase *markers, int frame, unsigned
}
}
-int find_nearest_marker_time(ListBase *markers, float dx)
-{
- TimeMarker *marker, *nearest= NULL;
- float dist, min_dist= 1000000;
-
- for(marker= markers->first; marker; marker= marker->next) {
- dist = ABS((float)marker->frame - dx);
- if(dist < min_dist){
- min_dist= dist;
- nearest= marker;
- }
- }
-
- if(nearest) return nearest->frame;
- else return (int)floor(dx); /* hrmf? */
-}
-
-
static int ed_marker_select(bContext *C, wmEvent *evt, int extend)
{
ListBase *markers= context_get_markers(C);
@@ -616,7 +747,7 @@ static int ed_marker_select(bContext *C, wmEvent *evt, int extend)
UI_view2d_region_to_view(v2d, x, y, &viewx, NULL);
- cfra= find_nearest_marker_time(markers, viewx);
+ cfra= ED_markers_find_nearest_marker_time(markers, viewx);
if (extend)
select_timeline_marker_frame(markers, cfra, 1);
@@ -819,9 +950,9 @@ static int ed_marker_delete_exec(bContext *C, wmOperator *op)
}
}
- if(changed) {
+ if (changed)
WM_event_add_notifier(C, NC_SCENE|ND_MARKERS, NULL);
- }
+
return OPERATOR_FINISHED;
}
diff --git a/source/blender/editors/animation/anim_ops.c b/source/blender/editors/animation/anim_ops.c
index f8c7cc909ae..e899cc1d520 100644
--- a/source/blender/editors/animation/anim_ops.c
+++ b/source/blender/editors/animation/anim_ops.c
@@ -327,7 +327,7 @@ static int toggle_time_exec(bContext *C, wmOperator *op)
saction->flag ^= SACTION_DRAWTIME;
}
break;
- case SPACE_IPO: /* IPO Editor */
+ case SPACE_IPO: /* Graph Editor */
{
SpaceIpo *sipo= (SpaceIpo *)CTX_wm_space_data(C);
sipo->flag ^= SIPO_DRAWTIME;
@@ -380,8 +380,14 @@ void ED_operatortypes_anim(void)
// XXX this is used all over... maybe for screen instead?
WM_operatortype_append(ANIM_OT_insert_keyframe);
WM_operatortype_append(ANIM_OT_delete_keyframe);
- WM_operatortype_append(ANIM_OT_insert_keyframe_old);
- WM_operatortype_append(ANIM_OT_delete_keyframe_old);
+ WM_operatortype_append(ANIM_OT_insert_keyframe_menu);
+ //WM_operatortype_append(ANIM_OT_delete_keyframe_menu);
+ WM_operatortype_append(ANIM_OT_insert_keyframe_button);
+ WM_operatortype_append(ANIM_OT_delete_keyframe_button);
+ WM_operatortype_append(ANIM_OT_delete_keyframe_old); // xxx remove?
+
+ WM_operatortype_append(ANIM_OT_add_driver_button);
+ WM_operatortype_append(ANIM_OT_remove_driver_button);
WM_operatortype_append(ANIM_OT_keyingset_add_new);
WM_operatortype_append(ANIM_OT_keyingset_add_destination);
diff --git a/source/blender/editors/animation/drivers.c b/source/blender/editors/animation/drivers.c
new file mode 100644
index 00000000000..9c401289011
--- /dev/null
+++ b/source/blender/editors/animation/drivers.c
@@ -0,0 +1,292 @@
+/* Testing code for 2.5 animation system
+ * Copyright 2009, Joshua Leung
+ */
+
+#include <stdio.h>
+#include <stddef.h>
+#include <string.h>
+#include <math.h>
+#include <float.h>
+
+#include "MEM_guardedalloc.h"
+
+#include "BLI_blenlib.h"
+#include "BLI_arithb.h"
+#include "BLI_dynstr.h"
+
+#include "DNA_anim_types.h"
+#include "DNA_action_types.h"
+#include "DNA_armature_types.h"
+#include "DNA_constraint_types.h"
+#include "DNA_key_types.h"
+#include "DNA_object_types.h"
+#include "DNA_material_types.h"
+#include "DNA_scene_types.h"
+#include "DNA_userdef_types.h"
+#include "DNA_windowmanager_types.h"
+
+#include "BKE_animsys.h"
+#include "BKE_action.h"
+#include "BKE_constraint.h"
+#include "BKE_fcurve.h"
+#include "BKE_utildefines.h"
+#include "BKE_context.h"
+#include "BKE_report.h"
+#include "BKE_key.h"
+#include "BKE_material.h"
+
+#include "ED_anim_api.h"
+#include "ED_keyframing.h"
+#include "ED_keyframes_edit.h"
+#include "ED_screen.h"
+#include "ED_util.h"
+
+#include "UI_interface.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+
+#include "RNA_access.h"
+#include "RNA_define.h"
+#include "RNA_types.h"
+
+/* ************************************************** */
+/* Animation Data Validation */
+
+/* Get (or add relevant data to be able to do so) F-Curve from the driver stack,
+ * for the given Animation Data block. This assumes that all the destinations are valid.
+ */
+FCurve *verify_driver_fcurve (ID *id, const char rna_path[], const int array_index, short add)
+{
+ AnimData *adt;
+ FCurve *fcu;
+
+ /* sanity checks */
+ if ELEM(NULL, id, rna_path)
+ return NULL;
+
+ /* init animdata if none available yet */
+ adt= BKE_animdata_from_id(id);
+ if ((adt == NULL) && (add))
+ adt= BKE_id_add_animdata(id);
+ if (adt == NULL) {
+ /* if still none (as not allowed to add, or ID doesn't have animdata for some reason) */
+ return NULL;
+ }
+
+ /* try to find f-curve matching for this setting
+ * - add if not found and allowed to add one
+ * TODO: add auto-grouping support? how this works will need to be resolved
+ */
+ fcu= list_find_fcurve(&adt->drivers, rna_path, array_index);
+
+ if ((fcu == NULL) && (add)) {
+ /* use default settings to make a F-Curve */
+ fcu= MEM_callocN(sizeof(FCurve), "FCurve");
+
+ fcu->flag = (FCURVE_VISIBLE|FCURVE_AUTO_HANDLES|FCURVE_SELECTED);
+
+ /* store path - make copy, and store that */
+ fcu->rna_path= BLI_strdupn(rna_path, strlen(rna_path));
+ fcu->array_index= array_index;
+
+ /* add some new driver data */
+ fcu->driver= MEM_callocN(sizeof(ChannelDriver), "ChannelDriver");
+
+ /* add simple generator modifier for driver so that there is some visible representation */
+ fcurve_add_modifier(fcu, FMODIFIER_TYPE_GENERATOR);
+
+ /* just add F-Curve to end of driver list */
+ BLI_addtail(&adt->drivers, fcu);
+ }
+
+ /* return the F-Curve */
+ return fcu;
+}
+
+/* ************************************************** */
+/* Driver Management API */
+
+/* Main Driver Management API calls:
+ * Add a new driver for the specified property on the given ID block
+ */
+short ANIM_add_driver (ID *id, const char rna_path[], int array_index, short flag)
+{
+ PointerRNA id_ptr, ptr;
+ PropertyRNA *prop;
+ FCurve *fcu;
+
+ /* validate pointer first - exit if failure */
+ RNA_id_pointer_create(id, &id_ptr);
+ if ((RNA_path_resolve(&id_ptr, rna_path, &ptr, &prop) == 0) || (prop == NULL)) {
+ printf("Insert Key: Could not add Driver, as RNA Path is invalid for the given ID (ID = %s, Path = %s)\n", id->name, rna_path);
+ return 0;
+ }
+
+ /* create F-Curve with Driver */
+ fcu= verify_driver_fcurve(id, rna_path, array_index, 1);
+
+ /* done */
+ return (fcu != NULL);
+}
+
+/* Main Driver Management API calls:
+ * Remove the driver for the specified property on the given ID block (if available)
+ */
+short ANIM_remove_driver (struct ID *id, const char rna_path[], int array_index, short flag)
+{
+ AnimData *adt;
+ FCurve *fcu;
+
+ /* get F-Curve
+ * Note: here is one of the places where we don't want new F-Curve + Driver added!
+ * so 'add' var must be 0
+ */
+ /* we don't check the validity of the path here yet, but it should be ok... */
+ fcu= verify_driver_fcurve(id, rna_path, array_index, 0);
+ adt= BKE_animdata_from_id(id);
+
+ /* only continue if we have an driver to remove */
+ if (adt && fcu) {
+ /* remove F-Curve from driver stack, then free it */
+ BLI_remlink(&adt->drivers, fcu);
+ free_fcurve(fcu);
+
+ /* done successfully */
+ return 1;
+ }
+
+ /* failed */
+ return 0;
+}
+
+
+/* ************************************************** */
+/* UI-Button Interface */
+
+/* Add Driver Button Operator ------------------------ */
+
+static int add_driver_button_exec (bContext *C, wmOperator *op)
+{
+ PointerRNA ptr;
+ PropertyRNA *prop= NULL;
+ char *path;
+ short success= 0;
+ int a, index, length, all= RNA_boolean_get(op->ptr, "all");
+
+ /* try to insert keyframe using property retrieved from UI */
+ memset(&ptr, 0, sizeof(PointerRNA));
+ uiAnimContextProperty(C, &ptr, &prop, &index);
+
+ if (ptr.data && prop && RNA_property_animateable(ptr.data, prop)) {
+ path= RNA_path_from_ID_to_property(&ptr, prop);
+
+ if (path) {
+ if (all) {
+ length= RNA_property_array_length(prop);
+
+ if (length) index= 0;
+ else length= 1;
+ }
+ else
+ length= 1;
+
+ for (a=0; a<length; a++)
+ success+= ANIM_add_driver(ptr.id.data, path, index+a, 0);
+
+ MEM_freeN(path);
+ }
+ }
+
+ if (success) {
+ /* send updates */
+ ED_anim_dag_flush_update(C);
+
+ /* for now, only send ND_KEYS for KeyingSets */
+ WM_event_add_notifier(C, ND_KEYS, NULL); // XXX
+ }
+
+ return (success)? OPERATOR_FINISHED: OPERATOR_CANCELLED;
+}
+
+void ANIM_OT_add_driver_button (wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "Add Driver";
+ ot->idname= "ANIM_OT_add_driver_button";
+
+ /* callbacks */
+ ot->exec= add_driver_button_exec;
+ //op->poll= ???
+
+ /* flags */
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+
+ /* properties */
+ RNA_def_boolean(ot->srna, "all", 1, "All", "Insert a keyframe for all element of the array.");
+}
+
+/* Remove Driver Button Operator ------------------------ */
+
+static int remove_driver_button_exec (bContext *C, wmOperator *op)
+{
+ PointerRNA ptr;
+ PropertyRNA *prop= NULL;
+ char *path;
+ short success= 0;
+ int a, index, length, all= RNA_boolean_get(op->ptr, "all");
+
+ /* try to insert keyframe using property retrieved from UI */
+ memset(&ptr, 0, sizeof(PointerRNA));
+ uiAnimContextProperty(C, &ptr, &prop, &index);
+
+ if (ptr.data && prop) {
+ path= RNA_path_from_ID_to_property(&ptr, prop);
+
+ if (path) {
+ if (all) {
+ length= RNA_property_array_length(prop);
+
+ if(length) index= 0;
+ else length= 1;
+ }
+ else
+ length= 1;
+
+ for (a=0; a<length; a++)
+ success+= ANIM_remove_driver(ptr.id.data, path, index+a, 0);
+
+ MEM_freeN(path);
+ }
+ }
+
+
+ if (success) {
+ /* send updates */
+ ED_anim_dag_flush_update(C);
+
+ /* for now, only send ND_KEYS for KeyingSets */
+ WM_event_add_notifier(C, ND_KEYS, NULL); // XXX
+ }
+
+ return (success)? OPERATOR_FINISHED: OPERATOR_CANCELLED;
+}
+
+void ANIM_OT_remove_driver_button (wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "Remove Driver";
+ ot->idname= "ANIM_OT_remove_driver_button";
+
+ /* callbacks */
+ ot->exec= remove_driver_button_exec;
+ //op->poll= ???
+
+ /* flags */
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+
+ /* properties */
+ RNA_def_boolean(ot->srna, "all", 1, "All", "Delete keyfames from all elements of the array.");
+}
+
+/* ************************************************** */
diff --git a/source/blender/editors/animation/keyframes_draw.c b/source/blender/editors/animation/keyframes_draw.c
index d67a40518e3..cfbd6d2bced 100644
--- a/source/blender/editors/animation/keyframes_draw.c
+++ b/source/blender/editors/animation/keyframes_draw.c
@@ -83,7 +83,6 @@
#include "UI_interface.h"
#include "UI_interface_icons.h"
#include "UI_resources.h"
-#include "UI_text.h"
#include "UI_view2d.h"
#include "ED_anim_api.h"
@@ -449,8 +448,6 @@ void ob_to_keylist(Object *ob, ListBase *keys, ListBase *blocks, ActKeysInc *aki
/* get filterflag */
if (ads)
filterflag= ads->filterflag;
- else if ((aki) && (aki->actmode == -1)) /* only set like this by NLA */
- filterflag= ADS_FILTER_NLADUMMY;
else
filterflag= 0;
diff --git a/source/blender/editors/animation/keyframes_edit.c b/source/blender/editors/animation/keyframes_edit.c
index 44814812c76..8243629b4a6 100644
--- a/source/blender/editors/animation/keyframes_edit.c
+++ b/source/blender/editors/animation/keyframes_edit.c
@@ -36,12 +36,12 @@
#include "DNA_anim_types.h"
#include "DNA_action_types.h"
-#include "DNA_constraint_types.h"
#include "DNA_curve_types.h"
#include "DNA_key_types.h"
#include "DNA_object_types.h"
#include "DNA_space_types.h"
#include "DNA_scene_types.h"
+#include "DNA_world_types.h"
#include "BKE_action.h"
#include "BKE_fcurve.h"
@@ -71,7 +71,7 @@
*/
/* ************************************************************************** */
-/* IPO Editing Loops - Exposed API */
+/* Keyframe Editing Loops - Exposed API */
/* --------------------------- Base Functions ------------------------------------ */
@@ -121,14 +121,14 @@ short ANIM_fcurve_keys_bezier_loop(BeztEditData *bed, FCurve *fcu, BeztEditFunc
return 0;
}
-/* -------------------------------- Further Abstracted ----------------------------- */
+/* -------------------------------- Further Abstracted (Not Exposed Directly) ----------------------------- */
/* This function is used to loop over the keyframe data in an Action Group */
static short agrp_keys_bezier_loop(BeztEditData *bed, bActionGroup *agrp, BeztEditFunc bezt_ok, BeztEditFunc bezt_cb, FcuEditFunc fcu_cb)
{
FCurve *fcu;
- /* only iterate over the action-channels and their sub-channels that are in this group */
+ /* only iterate over the F-Curves that are in this group */
for (fcu= agrp->channels.first; fcu && fcu->grp==agrp; fcu= fcu->next) {
if (ANIM_fcurve_keys_bezier_loop(bed, fcu, bezt_ok, bezt_cb, fcu_cb))
return 1;
@@ -144,17 +144,73 @@ static short act_keys_bezier_loop(BeztEditData *bed, bAction *act, BeztEditFunc
/* just loop through all F-Curves */
for (fcu= act->curves.first; fcu; fcu= fcu->next) {
- ANIM_fcurve_keys_bezier_loop(bed, fcu, bezt_ok, bezt_cb, fcu_cb);
+ if (ANIM_fcurve_keys_bezier_loop(bed, fcu, bezt_ok, bezt_cb, fcu_cb))
+ return 1;
}
return 0;
}
-/* --- */
+/* This function is used to loop over the keyframe data of an AnimData block */
+static short adt_keys_bezier_loop(BeztEditData *bed, AnimData *adt, BeztEditFunc bezt_ok, BeztEditFunc bezt_cb, FcuEditFunc fcu_cb, int filterflag)
+{
+ /* drivers or actions? */
+ if (filterflag & ADS_FILTER_ONLYDRIVERS) {
+ FCurve *fcu;
+
+ /* just loop through all F-Curves acting as Drivers */
+ for (fcu= adt->drivers.first; fcu; fcu= fcu->next) {
+ if (ANIM_fcurve_keys_bezier_loop(bed, fcu, bezt_ok, bezt_cb, fcu_cb))
+ return 1;
+ }
+ }
+ else if (adt->action) {
+ /* call the function for actions */
+ if (act_keys_bezier_loop(bed, adt->action, bezt_ok, bezt_cb, fcu_cb))
+ return 1;
+ }
+
+ return 0;
+}
+/* This function is used to loop over the keyframe data in an Object */
+static short ob_keys_bezier_loop(BeztEditData *bed, Object *ob, BeztEditFunc bezt_ok, BeztEditFunc bezt_cb, FcuEditFunc fcu_cb, int filterflag)
+{
+ Key *key= ob_get_key(ob);
+
+ /* firstly, Object's own AnimData */
+ if (ob->adt)
+ adt_keys_bezier_loop(bed, ob->adt, bezt_ok, bezt_cb, fcu_cb, filterflag);
+
+ /* shapekeys */
+ if ((key && key->adt) && !(filterflag & ADS_FILTER_NOSHAPEKEYS))
+ adt_keys_bezier_loop(bed, key->adt, bezt_ok, bezt_cb, fcu_cb, filterflag);
+
+ // FIXME: add materials, etc. (but drawing code doesn't do it yet too! :)
+
+ return 0;
+}
+
+/* This function is used to loop over the keyframe data in a Scene */
+static short scene_keys_bezier_loop(BeztEditData *bed, Scene *sce, BeztEditFunc bezt_ok, BeztEditFunc bezt_cb, FcuEditFunc fcu_cb, int filterflag)
+{
+ World *wo= sce->world;
+
+ /* Scene's own animation */
+ if (sce->adt)
+ adt_keys_bezier_loop(bed, sce->adt, bezt_ok, bezt_cb, fcu_cb, filterflag);
+
+ /* World */
+ if (wo && wo->adt)
+ adt_keys_bezier_loop(bed, wo->adt, bezt_ok, bezt_cb, fcu_cb, filterflag);
+
+ return 0;
+}
+
+/* --- */
/* This function is used to apply operation to all keyframes, regardless of the type */
-short ANIM_animchannel_keys_bezier_loop(BeztEditData *bed, bAnimListElem *ale, BeztEditFunc bezt_ok, BeztEditFunc bezt_cb, FcuEditFunc fcu_cb)
+short ANIM_animchannel_keys_bezier_loop(BeztEditData *bed, bAnimListElem *ale, BeztEditFunc bezt_ok, BeztEditFunc bezt_cb, FcuEditFunc fcu_cb, int filterflag)
{
/* sanity checks */
if (ale == NULL)
@@ -173,6 +229,41 @@ short ANIM_animchannel_keys_bezier_loop(BeztEditData *bed, bAnimListElem *ale, B
return agrp_keys_bezier_loop(bed, (bActionGroup *)ale->data, bezt_ok, bezt_cb, fcu_cb);
case ALE_ACT: /* action */
return act_keys_bezier_loop(bed, (bAction *)ale->data, bezt_ok, bezt_cb, fcu_cb);
+
+ case ALE_OB: /* object */
+ return ob_keys_bezier_loop(bed, (Object *)ale->data, bezt_ok, bezt_cb, fcu_cb, filterflag);
+ case ALE_SCE: /* scene */
+ return scene_keys_bezier_loop(bed, (Scene *)ale->data, bezt_ok, bezt_cb, fcu_cb, filterflag);
+ }
+
+ return 0;
+}
+
+/* This function is used to apply operation to all keyframes, regardless of the type without needed an AnimListElem wrapper */
+short ANIM_animchanneldata_keys_bezier_loop(BeztEditData *bed, void *data, int keytype, BeztEditFunc bezt_ok, BeztEditFunc bezt_cb, FcuEditFunc fcu_cb, int filterflag)
+{
+ /* sanity checks */
+ if (data == NULL)
+ return 0;
+
+ /* method to use depends on the type of keyframe data */
+ switch (keytype) {
+ /* direct keyframe data (these loops are exposed) */
+ case ALE_FCURVE: /* F-Curve */
+ return ANIM_fcurve_keys_bezier_loop(bed, data, bezt_ok, bezt_cb, fcu_cb);
+
+ /* indirect 'summaries' (these are not exposed directly)
+ * NOTE: must keep this code in sync with the drawing code and also the filtering code!
+ */
+ case ALE_GROUP: /* action group */
+ return agrp_keys_bezier_loop(bed, (bActionGroup *)data, bezt_ok, bezt_cb, fcu_cb);
+ case ALE_ACT: /* action */
+ return act_keys_bezier_loop(bed, (bAction *)data, bezt_ok, bezt_cb, fcu_cb);
+
+ case ALE_OB: /* object */
+ return ob_keys_bezier_loop(bed, (Object *)data, bezt_ok, bezt_cb, fcu_cb, filterflag);
+ case ALE_SCE: /* scene */
+ return scene_keys_bezier_loop(bed, (Scene *)data, bezt_ok, bezt_cb, fcu_cb, filterflag);
}
return 0;
@@ -274,6 +365,38 @@ BeztEditFunc ANIM_editkeyframes_ok(short mode)
}
/* ******************************************* */
+/* Assorted Utility Functions */
+
+/* helper callback for <animeditor>_cfrasnap_exec() -> used to help get the average time of all selected beztriples */
+short bezt_calc_average(BeztEditData *bed, BezTriple *bezt)
+{
+ /* only if selected */
+ if (bezt->f2 & SELECT) {
+ /* store average time in float (only do rounding at last step */
+ bed->f1 += bezt->vec[1][0];
+
+ /* increment number of items */
+ bed->i1++;
+ }
+
+ return 0;
+}
+
+/* helper callback for columnselect_<animeditor>_keys() -> populate list CfraElems with frame numbers from selected beztriples */
+short bezt_to_cfraelem(BeztEditData *bed, BezTriple *bezt)
+{
+ /* only if selected */
+ if (bezt->f2 & SELECT) {
+ CfraElem *ce= MEM_callocN(sizeof(CfraElem), "cfraElem");
+ BLI_addtail(&bed->list, ce);
+
+ ce->cfra= bezt->vec[1][0];
+ }
+
+ return 0;
+}
+
+/* ******************************************* */
/* Transform */
static short snap_bezier_nearest(BeztEditData *bed, BezTriple *bezt)
@@ -303,22 +426,22 @@ static short snap_bezier_cframe(BeztEditData *bed, BezTriple *bezt)
static short snap_bezier_nearmarker(BeztEditData *bed, BezTriple *bezt)
{
- //if (bezt->f2 & SELECT)
- // bezt->vec[1][0]= (float)find_nearest_marker_time(bezt->vec[1][0]); // XXX missing function!
+ if (bezt->f2 & SELECT)
+ bezt->vec[1][0]= (float)ED_markers_find_nearest_marker_time(&bed->list, bezt->vec[1][0]);
return 0;
}
static short snap_bezier_horizontal(BeztEditData *bed, BezTriple *bezt)
{
if (bezt->f2 & SELECT) {
- bezt->vec[0][1]= bezt->vec[2][1]= bezt->vec[1][1];
+ bezt->vec[0][1]= bezt->vec[2][1]= (float)floor(bezt->vec[1][1] + 0.5f);
if ((bezt->h1==HD_AUTO) || (bezt->h1==HD_VECT)) bezt->h1= HD_ALIGN;
if ((bezt->h2==HD_AUTO) || (bezt->h2==HD_VECT)) bezt->h2= HD_ALIGN;
}
return 0;
}
-// calchandles_ipocurve
+
BeztEditFunc ANIM_editkeyframes_snap(short type)
{
/* eEditKeyframes_Snap */
diff --git a/source/blender/editors/animation/keyframing.c b/source/blender/editors/animation/keyframing.c
index b04eaa0c378..9a40fb44f47 100644
--- a/source/blender/editors/animation/keyframing.c
+++ b/source/blender/editors/animation/keyframing.c
@@ -29,6 +29,7 @@
#include "BKE_action.h"
#include "BKE_constraint.h"
#include "BKE_fcurve.h"
+#include "BKE_global.h"
#include "BKE_utildefines.h"
#include "BKE_context.h"
#include "BKE_report.h"
@@ -50,39 +51,17 @@
#include "RNA_define.h"
#include "RNA_types.h"
-/* ************************************************** */
-/* LOCAL TYPES AND DEFINES */
-
-/* ----------- Common KeyData Sources ------------ */
-
-/* temporary struct to gather data combos to keyframe */
-typedef struct bCommonKeySrc {
- struct bCommonKeySrc *next, *prev;
-
- /* general data/destination-source settings */
- ID *id; /* id-block this comes from */
- char *rna_path; /* base path to use */ // xxx.... maybe we don't need this?
-
- /* specific cases */
- bPoseChannel *pchan; /* only needed when doing recalcs... */
-} bCommonKeySrc;
+#include "anim_intern.h"
/* ******************************************* */
/* Animation Data Validation */
-/* Get (or add relevant data to be able to do so) F-Curve from the Active Action,
- * for the given Animation Data block. This assumes that all the destinations are valid.
+/* Get (or add relevant data to be able to do so) the Active Action for the given
+ * Animation Data block, given an ID block where the Animation Data should reside.
*/
-FCurve *verify_fcurve (ID *id, const char group[], const char rna_path[], const int array_index, short add)
+bAction *verify_adt_action (ID *id, short add)
{
AnimData *adt;
- bAction *act;
- bActionGroup *grp;
- FCurve *fcu;
-
- /* sanity checks */
- if ELEM(NULL, id, rna_path)
- return NULL;
/* init animdata if none available yet */
adt= BKE_animdata_from_id(id);
@@ -90,6 +69,7 @@ FCurve *verify_fcurve (ID *id, const char group[], const char rna_path[], const
adt= BKE_id_add_animdata(id);
if (adt == NULL) {
/* if still none (as not allowed to add, or ID doesn't have animdata for some reason) */
+ printf("ERROR: Couldn't add AnimData (ID = %s) \n", (id) ? (id->name) : "<None>");
return NULL;
}
@@ -97,7 +77,22 @@ FCurve *verify_fcurve (ID *id, const char group[], const char rna_path[], const
// TODO: need some wizardry to handle NLA stuff correct
if ((adt->action == NULL) && (add))
adt->action= add_empty_action("Action");
- act= adt->action;
+
+ /* return the action */
+ return adt->action;
+}
+
+/* Get (or add relevant data to be able to do so) F-Curve from the Active Action,
+ * for the given Animation Data block. This assumes that all the destinations are valid.
+ */
+FCurve *verify_fcurve (bAction *act, const char group[], const char rna_path[], const int array_index, short add)
+{
+ bActionGroup *grp;
+ FCurve *fcu;
+
+ /* sanity checks */
+ if ELEM(NULL, act, rna_path)
+ return NULL;
/* try to find f-curve matching for this setting
* - add if not found and allowed to add one
@@ -134,7 +129,7 @@ FCurve *verify_fcurve (ID *id, const char group[], const char rna_path[], const
BLI_snprintf(grp->name, 64, group);
BLI_addtail(&act->groups, grp);
- BLI_uniquename(&act->groups, grp, "Group", offsetof(bActionGroup, name), 64);
+ BLI_uniquename(&act->groups, grp, "Group", '.', offsetof(bActionGroup, name), 64);
}
/* add F-Curve to group */
@@ -480,21 +475,21 @@ static float setting_get_rna_value (PointerRNA *ptr, PropertyRNA *prop, int inde
{
float value= 0.0f;
- switch (RNA_property_type(ptr, prop)) {
+ switch (RNA_property_type(prop)) {
case PROP_BOOLEAN:
- if (RNA_property_array_length(ptr, prop))
+ if (RNA_property_array_length(prop))
value= (float)RNA_property_boolean_get_index(ptr, prop, index);
else
value= (float)RNA_property_boolean_get(ptr, prop);
break;
case PROP_INT:
- if (RNA_property_array_length(ptr, prop))
+ if (RNA_property_array_length(prop))
value= (float)RNA_property_int_get_index(ptr, prop, index);
else
value= (float)RNA_property_int_get(ptr, prop);
break;
case PROP_FLOAT:
- if (RNA_property_array_length(ptr, prop))
+ if (RNA_property_array_length(prop))
value= RNA_property_float_get_index(ptr, prop, index);
else
value= RNA_property_float_get(ptr, prop);
@@ -545,14 +540,14 @@ static short visualkey_can_use (PointerRNA *ptr, PropertyRNA *prop)
Object *ob= (Object *)ptr->data;
con= ob->constraints.first;
- identifier= (char *)RNA_property_identifier(ptr, prop);
+ identifier= (char *)RNA_property_identifier(prop);
}
else if (ptr->type == &RNA_PoseChannel) {
/* Pose Channel */
bPoseChannel *pchan= (bPoseChannel *)ptr->data;
con= pchan->constraints.first;
- identifier= (char *)RNA_property_identifier(ptr, prop);
+ identifier= (char *)RNA_property_identifier(prop);
}
/* check if any data to search using */
@@ -631,7 +626,7 @@ static short visualkey_can_use (PointerRNA *ptr, PropertyRNA *prop)
*/
static float visualkey_get_value (PointerRNA *ptr, PropertyRNA *prop, int array_index)
{
- char *identifier= (char *)RNA_property_identifier(ptr, prop);
+ char *identifier= (char *)RNA_property_identifier(prop);
/* handle for Objects or PoseChannels only
* - constraints can be on either Objects or PoseChannels, so we only check if the
@@ -710,28 +705,30 @@ static float visualkey_get_value (PointerRNA *ptr, PropertyRNA *prop, int array_
* the keyframe insertion. These include the 'visual' keyframing modes, quick refresh,
* and extra keyframe filtering.
*/
-short insertkey (ID *id, const char group[], const char rna_path[], int array_index, float cfra, short flag)
+short insert_keyframe (ID *id, bAction *act, const char group[], const char rna_path[], int array_index, float cfra, short flag)
{
PointerRNA id_ptr, ptr;
PropertyRNA *prop;
FCurve *fcu;
- /* validate pointer first - exit if failure*/
+ /* validate pointer first - exit if failure */
RNA_id_pointer_create(id, &id_ptr);
- if (RNA_path_resolve(&id_ptr, rna_path, &ptr, &prop) == 0 || prop == NULL) {
- printf("Insert Key: Could not insert keyframe, as RNA Path is invalid for the given ID (%s)\n", rna_path);
+ if ((RNA_path_resolve(&id_ptr, rna_path, &ptr, &prop) == 0) || (prop == NULL)) {
+ printf("Insert Key: Could not insert keyframe, as RNA Path is invalid for the given ID (ID = %s, Path = %s)\n", id->name, rna_path);
return 0;
}
- /* get F-Curve */
- fcu= verify_fcurve(id, group, rna_path, array_index, 1);
+ /* get F-Curve - if no action is provided, keyframe to the default one attached to this ID-block */
+ if (act == NULL)
+ act= verify_adt_action(id, 1);
+ fcu= verify_fcurve(act, group, rna_path, array_index, 1);
/* only continue if we have an F-Curve to add keyframe to */
if (fcu) {
float curval= 0.0f;
/* set additional flags for the F-Curve (i.e. only integer values) */
- if (RNA_property_type(&ptr, prop) != PROP_FLOAT)
+ if (RNA_property_type(prop) != PROP_FLOAT)
fcu->flag |= FCURVE_INT_VALUES;
/* apply special time tweaking */
@@ -798,6 +795,9 @@ short insertkey (ID *id, const char group[], const char rna_path[], int array_in
}
}
+ /* no F-Curve to add keyframes to */
+ printf("ERROR: no F-Curve to add keyframes to \n");
+
/* return failure */
return 0;
}
@@ -812,22 +812,24 @@ short insertkey (ID *id, const char group[], const char rna_path[], int array_in
* The flag argument is used for special settings that alter the behaviour of
* the keyframe deletion. These include the quick refresh options.
*/
-short deletekey (ID *id, const char group[], const char rna_path[], int array_index, float cfra, short flag)
+short delete_keyframe (ID *id, bAction *act, const char group[], const char rna_path[], int array_index, float cfra, short flag)
{
- AnimData *adt;
- FCurve *fcu;
+ FCurve *fcu = NULL;
/* get F-Curve
* Note: here is one of the places where we don't want new Action + F-Curve added!
* so 'add' var must be 0
*/
+ if (act == NULL) {
+ /* if no action is provided, use the default one attached to this ID-block */
+ AnimData *adt= BKE_animdata_from_id(id);
+ act= adt->action;
+ }
/* we don't check the validity of the path here yet, but it should be ok... */
- fcu= verify_fcurve(id, group, rna_path, array_index, 0);
- adt= BKE_animdata_from_id(id);
+ fcu= verify_fcurve(act, group, rna_path, array_index, 0);
- /* only continue if we have an ipo-curve to remove keyframes from */
- if (adt && adt->action && fcu) {
- bAction *act= adt->action;
+ /* only continue if we have an F-Curve to remove keyframes from */
+ if (act && fcu) {
short found = -1;
int i;
@@ -867,183 +869,6 @@ short deletekey (ID *id, const char group[], const char rna_path[], int array_in
}
/* ******************************************* */
-/* KEYINGSETS */
-
-/* Operators ------------------------------------------- */
-
-/* These operators are only provided for scripting/macro usage, not for direct
- * calling from the UI since they wrap some of the data-access API code for these
- * (defined in blenkernel) which have quite a few properties.
- */
-
-/* ----- */
-
-static int keyingset_add_destination_exec (bContext *C, wmOperator *op)
-{
- PointerRNA ptr;
- KeyingSet *ks= NULL;
- ID *id= NULL;
- char rna_path[256], group_name[64]; // xxx
- short groupmode=0, flag=0;
- int array_index=0;
-
- /* get settings from operator properties */
- ptr = RNA_pointer_get(op->ptr, "keyingset");
- if (ptr.data)
- ks= (KeyingSet *)ptr.data;
-
- ptr = RNA_pointer_get(op->ptr, "id");
- if (ptr.data)
- id= (ID *)ptr.data;
-
- groupmode= RNA_enum_get(op->ptr, "grouping_method");
- RNA_string_get(op->ptr, "group_name", group_name);
-
- RNA_string_get(op->ptr, "rna_path", rna_path);
- array_index= RNA_int_get(op->ptr, "array_index");
-
- if (RNA_boolean_get(op->ptr, "entire_array"))
- flag |= KSP_FLAG_WHOLE_ARRAY;
-
- /* if enough args are provided, call API method */
- if (ks) {
- BKE_keyingset_add_destination(ks, id, group_name, rna_path, array_index, flag, groupmode);
- return OPERATOR_FINISHED;
- }
- else {
- BKE_report(op->reports, RPT_ERROR, "Keying Set could not be added.");
- return OPERATOR_CANCELLED;
- }
-}
-
-void ANIM_OT_keyingset_add_destination (wmOperatorType *ot)
-{
- // XXX: this is also defined in rna_animation.c
- static EnumPropertyItem prop_mode_grouping_items[] = {
- {KSP_GROUP_NAMED, "NAMED", "Named Group", ""},
- {KSP_GROUP_NONE, "NONE", "None", ""},
- {KSP_GROUP_KSNAME, "KEYINGSET", "Keying Set Name", ""},
- {0, NULL, NULL, NULL}};
-
- /* identifiers */
- ot->name= "Add Keying Set Destination";
- ot->idname= "ANIM_OT_keyingset_add_destination";
-
- /* callbacks */
- ot->exec= keyingset_add_destination_exec;
- ot->poll= ED_operator_scene_editable;
-
- /* props */
- /* pointers */ // xxx - do we want to directly expose these?
- RNA_def_pointer_runtime(ot->srna, "keyingset", &RNA_KeyingSet, "Keying Set", "Keying Set to add destination to.");
- RNA_def_pointer_runtime(ot->srna, "id", &RNA_ID, "ID", "ID-block for the destination.");
- /* grouping */
- RNA_def_enum(ot->srna, "grouping_method", prop_mode_grouping_items, KSP_GROUP_NAMED, "Grouping Method", "Method used to define which Group-name to use.");
- RNA_def_string(ot->srna, "group_name", "", 64, "Group Name", "Name of Action Group to assign destination to (only if grouping mode is to use this name).");
- /* rna-path */
- RNA_def_string(ot->srna, "rna_path", "", 256, "RNA-Path", "RNA-Path to destination property."); // xxx hopefully this is long enough
- RNA_def_int(ot->srna, "array_index", 0, 0, INT_MAX, "Array Index", "If applicable, the index ", 0, INT_MAX);
- /* flags */
- RNA_def_boolean(ot->srna, "entire_array", 1, "Entire Array", "hen an 'array/vector' type is chosen (Location, Rotation, Color, etc.), entire array is to be used.");
-
-}
-
-/* ----- */
-
-static int keyingset_add_new_exec (bContext *C, wmOperator *op)
-{
- Scene *sce= CTX_data_scene(C);
- KeyingSet *ks= NULL;
- short flag=0, keyingflag=0;
- char name[64];
-
- /* get settings from operator properties */
- RNA_string_get(op->ptr, "name", name);
-
- if (RNA_boolean_get(op->ptr, "absolute"))
- flag |= KEYINGSET_ABSOLUTE;
- if (RNA_boolean_get(op->ptr, "insertkey_needed"))
- keyingflag |= INSERTKEY_NEEDED;
- if (RNA_boolean_get(op->ptr, "insertkey_visual"))
- keyingflag |= INSERTKEY_MATRIX;
-
- /* call the API func, and set the active keyingset index */
- ks= BKE_keyingset_add(&sce->keyingsets, name, flag, keyingflag);
-
- if (ks) {
- sce->active_keyingset= BLI_countlist(&sce->keyingsets);
- return OPERATOR_FINISHED;
- }
- else {
- BKE_report(op->reports, RPT_ERROR, "Keying Set could not be added.");
- return OPERATOR_CANCELLED;
- }
-}
-
-void ANIM_OT_keyingset_add_new (wmOperatorType *ot)
-{
- /* identifiers */
- ot->name= "Add Keying Set";
- ot->idname= "ANIM_OT_keyingset_add_new";
-
- /* callbacks */
- ot->exec= keyingset_add_new_exec;
- ot->poll= ED_operator_scene_editable;
-
- /* props */
- /* name */
- RNA_def_string(ot->srna, "name", "KeyingSet", 64, "Name", "Name of Keying Set");
- /* flags */
- RNA_def_boolean(ot->srna, "absolute", 1, "Absolute", "Keying Set defines specific paths/settings to be keyframed (i.e. is not reliant on context info)");
- /* keying flags */
- RNA_def_boolean(ot->srna, "insertkey_needed", 0, "Insert Keyframes - Only Needed", "Only insert keyframes where they're needed in the relevant F-Curves.");
- RNA_def_boolean(ot->srna, "insertkey_visual", 0, "Insert Keyframes - Visual", "Insert keyframes based on 'visual transforms'.");
-}
-
-/* UI API --------------------------------------------- */
-
-/* Build menu-string of available keying-sets (allocates memory for string)
- * NOTE: mode must not be longer than 64 chars
- */
-char *ANIM_build_keyingsets_menu (ListBase *list, short for_edit)
-{
- DynStr *pupds= BLI_dynstr_new();
- KeyingSet *ks;
- char buf[64];
- char *str;
- int i;
-
- /* add title first */
- BLI_dynstr_append(pupds, "Keying Sets%t|");
-
- /* add dummy entries for none-active */
- if (for_edit) {
- BLI_dynstr_append(pupds, "Add New%x-1|");
- BLI_dynstr_append(pupds, " %x0|");
- }
- else
- BLI_dynstr_append(pupds, "<No Keying Set Active>%x0|");
-
- /* loop through keyingsets, adding them */
- for (ks=list->first, i=1; ks; ks=ks->next, i++) {
- if (for_edit == 0)
- BLI_dynstr_append(pupds, "KS: ");
-
- BLI_dynstr_append(pupds, ks->name);
- BLI_snprintf( buf, 64, "%%x%d%s", i, ((ks->next)?"|":"") );
- BLI_dynstr_append(pupds, buf);
- }
-
- /* convert to normal MEM_malloc'd string */
- str= BLI_dynstr_get_cstring(pupds);
- BLI_dynstr_free(pupds);
-
- return str;
-}
-
-
-
-/* ******************************************* */
/* KEYFRAME MODIFICATION */
/* mode for commonkey_modifykey */
@@ -1052,829 +877,6 @@ enum {
COMMONKEY_MODE_DELETE,
} eCommonModifyKey_Modes;
-#if 0 // XXX old keyingsets code based on adrcodes... to be restored in due course
-
-/* --------- KeyingSet Adrcode Getters ------------ */
-
-/* initialise a channel-getter storage */
-static void ks_adrcodegetter_init (bKS_AdrcodeGetter *kag, bKeyingSet *ks, bCommonKeySrc *cks)
-{
- /* error checking */
- if (kag == NULL)
- return;
-
- if (ELEM(NULL, ks, cks)) {
- /* set invalid settings that won't cause harm */
- kag->ks= NULL;
- kag->cks= NULL;
- kag->index= -2;
- kag->tot= 0;
- }
- else {
- /* store settings */
- kag->ks= ks;
- kag->cks= cks;
-
- /* - index is -1, as that allows iterators to return first element
- * - tot is chan_num by default, but may get overriden if -1 is encountered (for extension-type getters)
- */
- kag->index= -1;
- kag->tot= ks->chan_num;
- }
-}
-
-/* 'default' channel-getter that will be used when iterating through keyingset's channels
- * - iteration will stop when adrcode <= 0 is encountered, so we use that as escape
- */
-static short ks_getnextadrcode_default (bKS_AdrcodeGetter *kag)
-{
- bKeyingSet *ks= (kag)? kag->ks : NULL;
-
- /* error checking */
- if (ELEM(NULL, kag, ks)) return 0;
- if (kag->tot <= 0) return 0;
-
- kag->index++;
- if ((kag->index < 0) || (kag->index >= kag->tot)) return 0;
-
- /* return the adrcode stored at index then */
- return ks->adrcodes[kag->index];
-}
-
-/* add map flag (for MTex channels, as certain ones need special offset) */
-static short ks_getnextadrcode_addmap (bKS_AdrcodeGetter *kag)
-{
- short adrcode= ks_getnextadrcode_default(kag);
-
- /* if there was an adrcode returned, assume that kag stuff is set ok */
- if (adrcode) {
- bCommonKeySrc *cks= kag->cks;
- bKeyingSet *ks= kag->ks;
-
- if (ELEM3(ks->blocktype, ID_MA, ID_LA, ID_WO)) {
- switch (adrcode) {
- case MAP_OFS_X: case MAP_OFS_Y: case MAP_OFS_Z:
- case MAP_SIZE_X: case MAP_SIZE_Y: case MAP_SIZE_Z:
- case MAP_R: case MAP_G: case MAP_B: case MAP_DVAR:
- case MAP_COLF: case MAP_NORF: case MAP_VARF: case MAP_DISP:
- adrcode += cks->map;
- break;
- }
- }
- }
-
- /* adrcode must be returned! */
- return adrcode;
-}
-
-/* extend posechannel keyingsets with rotation info (when KAG_CHAN_EXTEND is encountered)
- * - iteration will stop when adrcode <= 0 is encountered, so we use that as escape
- * - when we encounter KAG_CHAN_EXTEND as adrcode, start returning our own
- */
-static short ks_getnextadrcode_pchanrot (bKS_AdrcodeGetter *kag)
-{
- /* hardcoded adrcode channels used here only
- * - length is keyed-channels + 1 (last item must be 0 to escape)
- */
- static short quat_adrcodes[5] = {AC_QUAT_W, AC_QUAT_X, AC_QUAT_Y, AC_QUAT_Z, 0};
- static short eul_adrcodes[4] = {AC_EUL_X, AC_EUL_Y, AC_EUL_Z, 0};
-
- /* useful variables */
- bKeyingSet *ks= (kag)? kag->ks : NULL;
- bCommonKeySrc *cks= (kag) ? kag->cks : NULL;
- short index, adrcode;
-
- /* error checking */
- if (ELEM3(NULL, kag, ks, cks)) return 0;
- if (ks->chan_num <= 0) return 0;
-
- /* get index
- * - if past the last item (kag->tot), return stuff from our static arrays
- * - otherwise, just keep returning stuff from the keyingset (but check out for -1!)
- */
- kag->index++;
- if (kag->index < 0)
- return 0;
-
- /* normal (static stuff) */
- if (kag->index < kag->tot) {
- /* get adrcode, and return if not KAG_CHAN_EXTEND (i.e. point for start of iteration) */
- adrcode= ks->adrcodes[kag->index];
-
- if (adrcode != KAG_CHAN_EXTEND)
- return adrcode;
- else
- kag->tot= kag->index;
- }
-
- /* based on current rotation-mode
- * - index can be at most 5, if we are to prevent segfaults
- */
- index= kag->index - kag->tot;
- if ((index < 0) || (index > 5))
- return 0;
-
- if (cks->pchan && cks->pchan->rotmode)
- return eul_adrcodes[index];
- else
- return quat_adrcodes[index];
-}
-
-/* ------------- KeyingSet Defines ------------ */
-/* Note: these must all be named with the defks_* prefix, otherwise the template macro will not work! */
-
-/* macro for defining keyingset contexts */
-#define KSC_TEMPLATE(ctx_name) {&defks_##ctx_name[0], NULL, sizeof(defks_##ctx_name)/sizeof(bKeyingSet)}
-
-/* --- */
-
-/* check if option not available for deleting keys */
-static short incl_non_del_keys (bKeyingSet *ks, const char mode[])
-{
- /* as optimisation, assume that it is sufficient to check only first letter
- * of mode (int comparison should be faster than string!)
- */
- //if (strcmp(mode, "Delete")==0)
- if (mode && mode[0]=='D')
- return 0;
-
- return 1;
-}
-
-/* Object KeyingSets ------ */
-
-/* check if include shapekey entry */
-static short incl_v3d_ob_shapekey (bKeyingSet *ks, const char mode[])
-{
- //Object *ob= (G.obedit)? (G.obedit) : (OBACT); // XXX
- Object *ob= NULL;
- char *newname= NULL;
-
- if(ob==NULL)
- return 0;
-
- /* not available for delete mode */
- if (strcmp(mode, "Delete")==0)
- return 0;
-
- /* check if is geom object that can get shapekeys */
- switch (ob->type) {
- /* geometry? */
- case OB_MESH: newname= "Mesh"; break;
- case OB_CURVE: newname= "Curve"; break;
- case OB_SURF: newname= "Surface"; break;
- case OB_LATTICE: newname= "Lattice"; break;
-
- /* not geometry! */
- default:
- return 0;
- }
-
- /* if ks is shapekey entry (this could be callled for separator before too!) */
- if (ks->flag == -3)
- BLI_strncpy(ks->name, newname, sizeof(ks->name));
-
- /* if it gets here, it's ok */
- return 1;
-}
-
-/* array for object keyingset defines */
-bKeyingSet defks_v3d_object[] =
-{
- /* include_cb, adrcode-getter, name, blocktype, flag, chan_num, adrcodes */
- {NULL, "Loc", ID_OB, 0, 3, {OB_LOC_X,OB_LOC_Y,OB_LOC_Z}},
- {NULL, "Rot", ID_OB, 0, 3, {OB_ROT_X,OB_ROT_Y,OB_ROT_Z}},
- {NULL, "Scale", ID_OB, 0, 3, {OB_SIZE_X,OB_SIZE_Y,OB_SIZE_Z}},
-
- {NULL, "%l", 0, -1, 0, {0}}, // separator
-
- {NULL, "LocRot", ID_OB, 0, 6,
- {OB_LOC_X,OB_LOC_Y,OB_LOC_Z,
- OB_ROT_X,OB_ROT_Y,OB_ROT_Z}},
-
- {NULL, "LocScale", ID_OB, 0, 6,
- {OB_LOC_X,OB_LOC_Y,OB_LOC_Z,
- OB_SIZE_X,OB_SIZE_Y,OB_SIZE_Z}},
-
- {NULL, "LocRotScale", ID_OB, 0, 9,
- {OB_LOC_X,OB_LOC_Y,OB_LOC_Z,
- OB_ROT_X,OB_ROT_Y,OB_ROT_Z,
- OB_SIZE_X,OB_SIZE_Y,OB_SIZE_Z}},
-
- {NULL, "RotScale", ID_OB, 0, 6,
- {OB_ROT_X,OB_ROT_Y,OB_ROT_Z,
- OB_SIZE_X,OB_SIZE_Y,OB_SIZE_Z}},
-
- {incl_non_del_keys, "%l", 0, -1, 0, {0}}, // separator
-
- {incl_non_del_keys, "VisualLoc", ID_OB, INSERTKEY_MATRIX, 3, {OB_LOC_X,OB_LOC_Y,OB_LOC_Z}},
- {incl_non_del_keys, "VisualRot", ID_OB, INSERTKEY_MATRIX, 3, {OB_ROT_X,OB_ROT_Y,OB_ROT_Z}},
-
- {incl_non_del_keys, "VisualLocRot", ID_OB, INSERTKEY_MATRIX, 6,
- {OB_LOC_X,OB_LOC_Y,OB_LOC_Z,
- OB_ROT_X,OB_ROT_Y,OB_ROT_Z}},
-
- {NULL, "%l", 0, -1, 0, {0}}, // separator
-
- {NULL, "Layer", ID_OB, 0, 1, {OB_LAY}}, // icky option...
- {NULL, "Available", ID_OB, -2, 0, {0}},
-
- {incl_v3d_ob_shapekey, "%l%l", 0, -1, 0, {0}}, // separator (linked to shapekey entry)
- {incl_v3d_ob_shapekey, "<ShapeKey>", ID_OB, -3, 0, {0}}
-};
-
-/* PoseChannel KeyingSets ------ */
-
-/* array for posechannel keyingset defines */
-bKeyingSet defks_v3d_pchan[] =
-{
- /* include_cb, name, blocktype, flag, chan_num, adrcodes */
- {NULL, "Loc", ID_PO, 0, 3, {AC_LOC_X,AC_LOC_Y,AC_LOC_Z}},
- {NULL, "Rot", ID_PO, COMMONKEY_PCHANROT, 1, {KAG_CHAN_EXTEND}},
- {NULL, "Scale", ID_PO, 0, 3, {AC_SIZE_X,AC_SIZE_Y,AC_SIZE_Z}},
-
- {NULL, "%l", 0, -1, 0, {0}}, // separator
-
- {NULL, "LocRot", ID_PO, COMMONKEY_PCHANROT, 4,
- {AC_LOC_X,AC_LOC_Y,AC_LOC_Z,
- KAG_CHAN_EXTEND}},
-
- {NULL, "LocScale", ID_PO, 0, 6,
- {AC_LOC_X,AC_LOC_Y,AC_LOC_Z,
- AC_SIZE_X,AC_SIZE_Y,AC_SIZE_Z}},
-
- {NULL, "LocRotScale", ID_PO, COMMONKEY_PCHANROT, 7,
- {AC_LOC_X,AC_LOC_Y,AC_LOC_Z,AC_SIZE_X,AC_SIZE_Y,AC_SIZE_Z,
- KAG_CHAN_EXTEND}},
-
- {NULL, "RotScale", ID_PO, 0, 4,
- {AC_SIZE_X,AC_SIZE_Y,AC_SIZE_Z,
- KAG_CHAN_EXTEND}},
-
- {incl_non_del_keys, "%l", 0, -1, 0, {0}}, // separator
-
- {incl_non_del_keys, "VisualLoc", ID_PO, INSERTKEY_MATRIX, 3, {AC_LOC_X,AC_LOC_Y,AC_LOC_Z}},
- {incl_non_del_keys, "VisualRot", ID_PO, INSERTKEY_MATRIX|COMMONKEY_PCHANROT, 1, {KAG_CHAN_EXTEND}},
-
- {incl_non_del_keys, "VisualLocRot", ID_PO, INSERTKEY_MATRIX|COMMONKEY_PCHANROT, 4,
- {AC_LOC_X,AC_LOC_Y,AC_LOC_Z, KAG_CHAN_EXTEND}},
-
- {NULL, "%l", 0, -1, 0, {0}}, // separator
-
- {NULL, "Available", ID_PO, -2, 0, {0}}
-};
-
-/* Material KeyingSets ------ */
-
-/* array for material keyingset defines */
-bKeyingSet defks_buts_shading_mat[] =
-{
- /* include_cb, name, blocktype, flag, chan_num, adrcodes */
- {NULL, "RGB", ID_MA, 0, 3, {MA_COL_R,MA_COL_G,MA_COL_B}},
- {NULL, "Alpha", ID_MA, 0, 1, {MA_ALPHA}},
- {NULL, "Halo Size", ID_MA, 0, 1, {MA_HASIZE}},
- {NULL, "Mode", ID_MA, 0, 1, {MA_MODE}}, // evil bitflags
-
- {NULL, "%l", 0, -1, 0, {0}}, // separator
-
- {NULL, "All Color", ID_MA, 0, 18,
- {MA_COL_R,MA_COL_G,MA_COL_B,
- MA_ALPHA,MA_HASIZE, MA_MODE,
- MA_SPEC_R,MA_SPEC_G,MA_SPEC_B,
- MA_REF,MA_EMIT,MA_AMB,MA_SPEC,MA_HARD,
- MA_MODE,MA_TRANSLU,MA_ADD}},
-
- {NULL, "All Mirror", ID_MA, 0, 5,
- {MA_RAYM,MA_FRESMIR,MA_FRESMIRI,
- MA_FRESTRA,MA_FRESTRAI}},
-
- {NULL, "%l", 0, -1, 0, {0}}, // separator
-
- {NULL, "Ofs", ID_MA, COMMONKEY_ADDMAP, 3, {MAP_OFS_X,MAP_OFS_Y,MAP_OFS_Z}},
- {NULL, "Size", ID_MA, COMMONKEY_ADDMAP, 3, {MAP_SIZE_X,MAP_SIZE_Y,MAP_SIZE_Z}},
-
- {NULL, "All Mapping", ID_MA, COMMONKEY_ADDMAP, 14,
- {MAP_OFS_X,MAP_OFS_Y,MAP_OFS_Z,
- MAP_SIZE_X,MAP_SIZE_Y,MAP_SIZE_Z,
- MAP_R,MAP_G,MAP_B,MAP_DVAR,
- MAP_COLF,MAP_NORF,MAP_VARF,MAP_DISP}},
-
- {NULL, "%l", 0, -1, 0, {0}}, // separator
-
- {NULL, "Available", ID_MA, -2, 0, {0}}
-};
-
-/* World KeyingSets ------ */
-
-/* array for world keyingset defines */
-bKeyingSet defks_buts_shading_wo[] =
-{
- /* include_cb, name, blocktype, flag, chan_num, adrcodes */
- {NULL, "Zenith RGB", ID_WO, 0, 3, {WO_ZEN_R,WO_ZEN_G,WO_ZEN_B}},
- {NULL, "Horizon RGB", ID_WO, 0, 3, {WO_HOR_R,WO_HOR_G,WO_HOR_B}},
-
- {NULL, "%l", 0, -1, 0, {0}}, // separator
-
- {NULL, "Mist", ID_WO, 0, 4, {WO_MISI,WO_MISTDI,WO_MISTSTA,WO_MISTHI}},
- {NULL, "Stars", ID_WO, 0, 5, {WO_STAR_R,WO_STAR_G,WO_STAR_B,WO_STARDIST,WO_STARSIZE}},
-
-
- {NULL, "%l", 0, -1, 0, {0}}, // separator
-
- {NULL, "Ofs", ID_WO, COMMONKEY_ADDMAP, 3, {MAP_OFS_X,MAP_OFS_Y,MAP_OFS_Z}},
- {NULL, "Size", ID_WO, COMMONKEY_ADDMAP, 3, {MAP_SIZE_X,MAP_SIZE_Y,MAP_SIZE_Z}},
-
- {NULL, "All Mapping", ID_WO, COMMONKEY_ADDMAP, 14,
- {MAP_OFS_X,MAP_OFS_Y,MAP_OFS_Z,
- MAP_SIZE_X,MAP_SIZE_Y,MAP_SIZE_Z,
- MAP_R,MAP_G,MAP_B,MAP_DVAR,
- MAP_COLF,MAP_NORF,MAP_VARF,MAP_DISP}},
-
- {NULL, "%l", 0, -1, 0, {0}}, // separator
-
- {NULL, "Available", ID_WO, -2, 0, {0}}
-};
-
-/* Lamp KeyingSets ------ */
-
-/* array for lamp keyingset defines */
-bKeyingSet defks_buts_shading_la[] =
-{
- /* include_cb, name, blocktype, flag, chan_num, adrcodes */
- {NULL, "RGB", ID_LA, 0, 3, {LA_COL_R,LA_COL_G,LA_COL_B}},
- {NULL, "Energy", ID_LA, 0, 1, {LA_ENERGY}},
- {NULL, "Spot Size", ID_LA, 0, 1, {LA_SPOTSI}},
-
- {NULL, "%l", 0, -1, 0, {0}}, // separator
-
- {NULL, "Ofs", ID_LA, COMMONKEY_ADDMAP, 3, {MAP_OFS_X,MAP_OFS_Y,MAP_OFS_Z}},
- {NULL, "Size", ID_LA, COMMONKEY_ADDMAP, 3, {MAP_SIZE_X,MAP_SIZE_Y,MAP_SIZE_Z}},
-
- {NULL, "All Mapping", ID_LA, COMMONKEY_ADDMAP, 14,
- {MAP_OFS_X,MAP_OFS_Y,MAP_OFS_Z,
- MAP_SIZE_X,MAP_SIZE_Y,MAP_SIZE_Z,
- MAP_R,MAP_G,MAP_B,MAP_DVAR,
- MAP_COLF,MAP_NORF,MAP_VARF,MAP_DISP}},
-
- {NULL, "%l", 0, -1, 0, {0}}, // separator
-
- {NULL, "Available", ID_LA, -2, 0, {0}}
-};
-
-/* Texture KeyingSets ------ */
-
-/* array for texture keyingset defines */
-bKeyingSet defks_buts_shading_tex[] =
-{
- /* include_cb, name, blocktype, flag, chan_num, adrcodes */
- {NULL, "Clouds", ID_TE, 0, 5,
- {TE_NSIZE,TE_NDEPTH,TE_NTYPE,
- TE_MG_TYP,TE_N_BAS1}},
-
- {NULL, "Marble", ID_TE, 0, 7,
- {TE_NSIZE,TE_NDEPTH,TE_NTYPE,
- TE_TURB,TE_MG_TYP,TE_N_BAS1,TE_N_BAS2}},
-
- {NULL, "Stucci", ID_TE, 0, 5,
- {TE_NSIZE,TE_NTYPE,TE_TURB,
- TE_MG_TYP,TE_N_BAS1}},
-
- {NULL, "Wood", ID_TE, 0, 6,
- {TE_NSIZE,TE_NTYPE,TE_TURB,
- TE_MG_TYP,TE_N_BAS1,TE_N_BAS2}},
-
- {NULL, "Magic", ID_TE, 0, 2, {TE_NDEPTH,TE_TURB}},
-
- {NULL, "Blend", ID_TE, 0, 1, {TE_MG_TYP}},
-
- {NULL, "Musgrave", ID_TE, 0, 6,
- {TE_MG_TYP,TE_MGH,TE_MG_LAC,
- TE_MG_OCT,TE_MG_OFF,TE_MG_GAIN}},
-
- {NULL, "Voronoi", ID_TE, 0, 9,
- {TE_VNW1,TE_VNW2,TE_VNW3,TE_VNW4,
- TE_VNMEXP,TE_VN_DISTM,TE_VN_COLT,
- TE_ISCA,TE_NSIZE}},
-
- {NULL, "Distorted Noise", ID_TE, 0, 4,
- {TE_MG_OCT,TE_MG_OFF,TE_MG_GAIN,TE_DISTA}},
-
- {NULL, "Color Filter", ID_TE, 0, 5,
- {TE_COL_R,TE_COL_G,TE_COL_B,TE_BRIGHT,TE_CONTRA}},
-
- {NULL, "%l", 0, -1, 0, {0}}, // separator
-
- {NULL, "Available", ID_TE, -2, 0, {0}}
-};
-
-/* Object Buttons KeyingSets ------ */
-
-/* check if include particles entry */
-static short incl_buts_ob (bKeyingSet *ks, const char mode[])
-{
- //Object *ob= OBACT; // xxx
- Object *ob= NULL;
- /* only if object is mesh type */
-
- if(ob==NULL) return 0;
- return (ob->type == OB_MESH);
-}
-
-/* array for texture keyingset defines */
-bKeyingSet defks_buts_object[] =
-{
- /* include_cb, name, blocktype, flag, chan_num, adrcodes */
- {incl_buts_ob, "Surface Damping", ID_OB, 0, 1, {OB_PD_SDAMP}},
- {incl_buts_ob, "Random Damping", ID_OB, 0, 1, {OB_PD_RDAMP}},
- {incl_buts_ob, "Permeability", ID_OB, 0, 1, {OB_PD_PERM}},
-
- {NULL, "%l", 0, -1, 0, {0}}, // separator
-
- {NULL, "Force Strength", ID_OB, 0, 1, {OB_PD_FSTR}},
- {NULL, "Force Falloff", ID_OB, 0, 1, {OB_PD_FFALL}},
-
- {NULL, "%l", 0, -1, 0, {0}}, // separator
-
- {NULL, "Available", ID_OB, -2, 0, {0}} // this will include ob-transforms too!
-};
-
-/* Camera Buttons KeyingSets ------ */
-
-/* check if include internal-renderer entry */
-static short incl_buts_cam1 (bKeyingSet *ks, const char mode[])
-{
- Scene *scene= NULL; // FIXME this will cause a crash, but we need an extra arg first!
- /* only if renderer is internal renderer */
- return (scene->r.renderer==R_INTERN);
-}
-
-/* check if include external-renderer entry */
-static short incl_buts_cam2 (bKeyingSet *ks, const char mode[])
-{
- Scene *scene= NULL; // FIXME this will cause a crash, but we need an extra arg first!
- /* only if renderer is internal renderer */
- return (scene->r.renderer!=R_INTERN);
-}
-
-/* array for camera keyingset defines */
-bKeyingSet defks_buts_cam[] =
-{
- /* include_cb, name, blocktype, flag, chan_num, adrcodes */
- {NULL, "Lens", ID_CA, 0, 1, {CAM_LENS}},
- {NULL, "Clipping", ID_CA, 0, 2, {CAM_STA,CAM_END}},
- {NULL, "Focal Distance", ID_CA, 0, 1, {CAM_YF_FDIST}},
-
- {NULL, "%l", 0, -1, 0, {0}}, // separator
-
-
- {incl_buts_cam2, "Aperture", ID_CA, 0, 1, {CAM_YF_APERT}},
- {incl_buts_cam1, "Viewplane Shift", ID_CA, 0, 2, {CAM_SHIFT_X,CAM_SHIFT_Y}},
-
- {NULL, "%l", 0, -1, 0, {0}}, // separator
-
- {NULL, "Available", ID_CA, -2, 0, {0}}
-};
-
-/* --- */
-
-/* Keying Context Defines - Must keep in sync with enumeration (eKS_Contexts) */
-bKeyingContext ks_contexts[] =
-{
- KSC_TEMPLATE(v3d_object),
- KSC_TEMPLATE(v3d_pchan),
-
- KSC_TEMPLATE(buts_shading_mat),
- KSC_TEMPLATE(buts_shading_wo),
- KSC_TEMPLATE(buts_shading_la),
- KSC_TEMPLATE(buts_shading_tex),
-
- KSC_TEMPLATE(buts_object),
- KSC_TEMPLATE(buts_cam)
-};
-
-/* Keying Context Enumeration - Must keep in sync with definitions*/
-typedef enum eKS_Contexts {
- KSC_V3D_OBJECT = 0,
- KSC_V3D_PCHAN,
-
- KSC_BUTS_MAT,
- KSC_BUTS_WO,
- KSC_BUTS_LA,
- KSC_BUTS_TEX,
-
- KSC_BUTS_OB,
- KSC_BUTS_CAM,
-
- /* make sure this last one remains untouched! */
- KSC_TOT_TYPES
-} eKS_Contexts;
-
-
-/* ---------------- KeyingSet Tools ------------------- */
-
-/* helper for commonkey_context_get() - get keyingsets for 3d-view */
-static void commonkey_context_getv3d (const bContext *C, ListBase *sources, bKeyingContext **ksc)
-{
- Scene *scene= CTX_data_scene(C);
- Object *ob;
- IpoCurve *icu;
-
- if ((OBACT) && (OBACT->flag & OB_POSEMODE)) {
- bPoseChannel *pchan;
-
- /* pose-level */
- ob= OBACT;
- *ksc= &ks_contexts[KSC_V3D_PCHAN];
- // XXX
- //set_pose_keys(ob); /* sets pchan->flag to POSE_KEY if bone selected, and clears if not */
-
- /* loop through posechannels */
- for (pchan=ob->pose->chanbase.first; pchan; pchan=pchan->next) {
- if (pchan->flag & POSE_KEY) {
- bCommonKeySrc *cks;
-
- /* add new keyframing destination */
- cks= MEM_callocN(sizeof(bCommonKeySrc), "bCommonKeySrc");
- BLI_addtail(sources, cks);
-
- /* set id-block to key to, and action */
- cks->id= (ID *)ob;
- cks->act= ob->action;
-
- /* set pchan */
- cks->pchan= pchan;
- cks->actname= pchan->name;
- }
- }
- }
- else {
- /* object-level */
- *ksc= &ks_contexts[KSC_V3D_OBJECT];
-
- /* loop through bases */
- // XXX but we're only supposed to do this on editable ones, not just selected ones!
- CTX_DATA_BEGIN(C, Base*, base, selected_bases) {
- bCommonKeySrc *cks;
-
- /* add new keyframing destination */
- cks= MEM_callocN(sizeof(bCommonKeySrc), "bCommonKeySrc");
- BLI_addtail(sources, cks);
-
- /* set id-block to key to */
- ob= base->object;
- cks->id= (ID *)ob;
- }
- CTX_DATA_END;
- }
-}
-
-/* helper for commonkey_context_get() - get keyingsets for buttons window */
-static void commonkey_context_getsbuts (const bContext *C, ListBase *sources, bKeyingContext **ksc)
-{
-#if 0 // XXX dunno what's the future of this stuff...
- bCommonKeySrc *cks;
-
- /* check on tab-type */
- switch (G.buts->mainb) {
- case CONTEXT_SHADING: /* ------------- Shading buttons ---------------- */
- /* subtabs include "Material", "Texture", "Lamp", "World"*/
- switch (G.buts->tab[CONTEXT_SHADING]) {
- case TAB_SHADING_MAT: /* >------------- Material Tab -------------< */
- {
- Material *ma= editnode_get_active_material(G.buts->lockpoin);
-
- if (ma) {
- /* add new keyframing destination */
- cks= MEM_callocN(sizeof(bCommonKeySrc), "bCommonKeySrc");
- BLI_addtail(sources, cks);
-
- /* set data */
- cks->id= (ID *)ma;
- cks->ipo= ma->ipo;
- cks->map= texchannel_to_adrcode(ma->texact);
-
- /* set keyingsets */
- *ksc= &ks_contexts[KSC_BUTS_MAT];
- return;
- }
- }
- break;
- case TAB_SHADING_WORLD: /* >------------- World Tab -------------< */
- {
- World *wo= G.buts->lockpoin;
-
- if (wo) {
- /* add new keyframing destination */
- cks= MEM_callocN(sizeof(bCommonKeySrc), "bCommonKeySrc");
- BLI_addtail(sources, cks);
-
- /* set data */
- cks->id= (ID *)wo;
- cks->ipo= wo->ipo;
- cks->map= texchannel_to_adrcode(wo->texact);
-
- /* set keyingsets */
- *ksc= &ks_contexts[KSC_BUTS_WO];
- return;
- }
- }
- break;
- case TAB_SHADING_LAMP: /* >------------- Lamp Tab -------------< */
- {
- Lamp *la= G.buts->lockpoin;
-
- if (la) {
- /* add new keyframing destination */
- cks= MEM_callocN(sizeof(bCommonKeySrc), "bCommonKeySrc");
- BLI_addtail(sources, cks);
-
- /* set data */
- cks->id= (ID *)la;
- cks->ipo= la->ipo;
- cks->map= texchannel_to_adrcode(la->texact);
-
- /* set keyingsets */
- *ksc= &ks_contexts[KSC_BUTS_LA];
- return;
- }
- }
- break;
- case TAB_SHADING_TEX: /* >------------- Texture Tab -------------< */
- {
- Tex *tex= G.buts->lockpoin;
-
- if (tex) {
- /* add new keyframing destination */
- cks= MEM_callocN(sizeof(bCommonKeySrc), "bCommonKeySrc");
- BLI_addtail(sources, cks);
-
- /* set data */
- cks->id= (ID *)tex;
- cks->ipo= tex->ipo;
-
- /* set keyingsets */
- *ksc= &ks_contexts[KSC_BUTS_TEX];
- return;
- }
- }
- break;
- }
- break;
-
- case CONTEXT_OBJECT: /* ------------- Object buttons ---------------- */
- {
- Object *ob= OBACT;
-
- if (ob) {
- /* add new keyframing destination */
- cks= MEM_callocN(sizeof(bCommonKeySrc), "bCommonKeySrc");
- BLI_addtail(sources, cks);
-
- /* set id-block to key to */
- cks->id= (ID *)ob;
- cks->ipo= ob->ipo;
-
- /* set keyingsets */
- *ksc= &ks_contexts[KSC_BUTS_OB];
- return;
- }
- }
- break;
-
- case CONTEXT_EDITING: /* ------------- Editing buttons ---------------- */
- {
- Object *ob= OBACT;
-
- if ((ob) && (ob->type==OB_CAMERA) && (G.buts->lockpoin)) { /* >---------------- camera buttons ---------------< */
- Camera *ca= G.buts->lockpoin;
-
- /* add new keyframing destination */
- cks= MEM_callocN(sizeof(bCommonKeySrc), "bCommonKeySrc");
- BLI_addtail(sources, cks);
-
- /* set id-block to key to */
- cks->id= (ID *)ca;
- cks->ipo= ca->ipo;
-
- /* set keyingsets */
- *ksc= &ks_contexts[KSC_BUTS_CAM];
- return;
- }
- }
- break;
- }
-#endif // XXX end of buttons stuff to port...
-
- /* if nothing happened... */
- *ksc= NULL;
-}
-
-#endif // XXX old keyingsets code based on adrcodes... to be restored in due course
-
-#if 0 // XXX new relative keyingsets code
-
-/* Check if context data is suitable for the given absolute Keying Set */
-static short keyingset_context_ok_poll (bContext *C, KeyingSet *ks)
-{
-
- return 1;
-}
-
-/* Get list of data-sources from context for inserting keyframes using the given relative Keying Set */
-static short commonkey_get_context_data (bContext *C, ListBase *dsources, KeyingSet *ks)
-{
-
-}
-
-#endif // XXX new relative keyingsets code
-
-/* Given a KeyingSet and context info (if required), modify keyframes for the channels specified
- * by the KeyingSet. This takes into account many of the different combinations of using KeyingSets.
- * Returns the number of channels that keyframes were added to
- */
-static int commonkey_modifykey (ListBase *dsources, KeyingSet *ks, short mode, float cfra)
-{
- KS_Path *ksp;
- int kflag=0, success= 0;
- char *groupname= NULL;
-
- /* get flags to use */
- if (mode == COMMONKEY_MODE_INSERT) {
- /* use KeyingSet's flags as base */
- kflag= ks->keyingflag;
-
- /* suppliment with info from the context */
- if (IS_AUTOKEY_FLAG(AUTOMATKEY)) kflag |= INSERTKEY_MATRIX;
- if (IS_AUTOKEY_FLAG(INSERTNEEDED)) kflag |= INSERTKEY_NEEDED;
- // if (IS_AUTOKEY_MODE(EDITKEYS)) flag |= INSERTKEY_REPLACE;
- }
- else if (mode == COMMONKEY_MODE_DELETE)
- kflag= 0;
-
- /* check if the KeyingSet is absolute or not (i.e. does it requires sources info) */
- if (ks->flag & KEYINGSET_ABSOLUTE) {
- /* Absolute KeyingSets are simpler to use, as all the destination info has already been
- * provided by the user, and is stored, ready to use, in the KeyingSet paths.
- */
- for (ksp= ks->paths.first; ksp; ksp= ksp->next) {
- int arraylen, i;
-
- /* get pointer to name of group to add channels to */
- if (ksp->groupmode == KSP_GROUP_NONE)
- groupname= NULL;
- else if (ksp->groupmode == KSP_GROUP_KSNAME)
- groupname= ks->name;
- else
- groupname= ksp->group;
-
- /* init arraylen and i - arraylen should be greater than i so that
- * normal non-array entries get keyframed correctly
- */
- i= ksp->array_index;
- arraylen= i+1;
-
- /* get length of array if whole array option is enabled */
- if (ksp->flag & KSP_FLAG_WHOLE_ARRAY) {
- PointerRNA id_ptr, ptr;
- PropertyRNA *prop;
-
- RNA_id_pointer_create(ksp->id, &id_ptr);
- if (RNA_path_resolve(&id_ptr, ksp->rna_path, &ptr, &prop) && prop)
- arraylen= RNA_property_array_length(&ptr, prop);
- }
-
- /* for each possible index, perform operation
- * - assume that arraylen is greater than index
- */
- for (; i < arraylen; i++) {
- /* action to take depends on mode */
- if (mode == COMMONKEY_MODE_INSERT)
- success+= insertkey(ksp->id, groupname, ksp->rna_path, i, cfra, kflag);
- else if (mode == COMMONKEY_MODE_DELETE)
- success+= deletekey(ksp->id, groupname, ksp->rna_path, i, cfra, kflag);
- }
-
- // TODO: set recalc tags on the ID?
- }
- }
-#if 0 // XXX still need to figure out how to get such keyingsets working
- else if (dsources) {
- /* for each one of the 'sources', resolve the template markers and expand arrays, then insert keyframes */
- bCommonKeySrc *cks;
- char *path = NULL;
- int index=0, tot=0;
-
- /* for each 'source' for keyframe data, resolve each of the paths from the KeyingSet */
- for (cks= dsources->first; cks; cks= cks->next) {
-
- }
- }
-#endif // XXX still need to figure out how to get such
-
- return success;
-}
-
-
/* Polling callback for use with ANIM_*_keyframe() operators
* This is based on the standard ED_operator_areaactive callback,
* except that it does special checks for a few spacetypes too...
@@ -1904,38 +906,56 @@ static int modify_key_op_poll(bContext *C)
/* Insert Key Operator ------------------------ */
-/* NOTE:
- * This is one of the 'simpler new-style' Insert Keyframe operators which relies on Keying Sets.
- * For now, these are absolute Keying Sets only, so there is very little context info involved.
- *
- * -- Joshua Leung, Feb 2009
- */
-
static int insert_key_exec (bContext *C, wmOperator *op)
{
ListBase dsources = {NULL, NULL};
Scene *scene= CTX_data_scene(C);
KeyingSet *ks= NULL;
+ int type= RNA_int_get(op->ptr, "type");
float cfra= (float)CFRA; // XXX for now, don't bother about all the yucky offset crap
short success;
- /* try to get KeyingSet */
- if (scene->active_keyingset > 0)
+ /* type is the Keying Set the user specified to use when calling the operator:
+ * - type == 0: use scene's active Keying Set
+ * - type > 0: use a user-defined Keying Set from the active scene
+ * - type < 0: use a builtin Keying Set
+ */
+ if (type == 0)
+ type= scene->active_keyingset;
+ if (type > 0)
ks= BLI_findlink(&scene->keyingsets, scene->active_keyingset-1);
- /* report failure */
+ else
+ ks= BLI_findlink(&builtin_keyingsets, -type-1);
+
+ /* report failures */
if (ks == NULL) {
BKE_report(op->reports, RPT_ERROR, "No active Keying Set");
return OPERATOR_CANCELLED;
}
+ /* get context info for relative Keying Sets */
+ if ((ks->flag & KEYINGSET_ABSOLUTE) == 0) {
+ /* exit if no suitable data obtained */
+ if (modifykey_get_context_data(C, &dsources, ks) == 0) {
+ BKE_report(op->reports, RPT_ERROR, "No suitable context info for active Keying Set");
+ return OPERATOR_CANCELLED;
+ }
+ }
+
/* try to insert keyframes for the channels specified by KeyingSet */
- success= commonkey_modifykey(&dsources, ks, COMMONKEY_MODE_INSERT, cfra);
+ success= modify_keyframes(C, &dsources, NULL, ks, MODIFYKEY_MODE_INSERT, cfra);
printf("KeyingSet '%s' - Successfully added %d Keyframes \n", ks->name, success);
/* report failure? */
if (success == 0)
BKE_report(op->reports, RPT_WARNING, "Keying Set failed to insert any keyframes");
+ /* free temp context-data if available */
+ if (dsources.first) {
+ /* we assume that there is no extra data that needs to be freed from here... */
+ BLI_freelistN(&dsources);
+ }
+
/* send updates */
ED_anim_dag_flush_update(C);
@@ -1957,42 +977,130 @@ void ANIM_OT_insert_keyframe (wmOperatorType *ot)
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+
+ /* settings */
+ RNA_def_int(ot->srna, "type", 0, INT_MIN, INT_MAX, "Keying Set Number", "Index (determined internally) of the Keying Set to use", 0, 1);
}
-/* Delete Key Operator ------------------------ */
+/* Insert Key Operator (With Menu) ------------------------ */
-/* NOTE:
- * This is one of the 'simpler new-style' Insert Keyframe operators which relies on Keying Sets.
- * For now, these are absolute Keying Sets only, so there is very little context info involved.
- *
- * -- Joshua Leung, Feb 2009
+/* XXX
+ * This operator pops up a menu which sets gets the index of the keyingset to use,
+ * setting the global settings, and calling the insert-keyframe operator using these
+ * settings
*/
+
+static int insert_key_menu_invoke (bContext *C, wmOperator *op, wmEvent *event)
+{
+ Scene *scene= CTX_data_scene(C);
+ KeyingSet *ks;
+ uiPopupMenu *pup;
+ uiLayout *layout;
+ int i = 0;
+
+ pup= uiPupMenuBegin(C, "Insert Keyframe", 0);
+ layout= uiPupMenuLayout(pup);
+
+ /* active Keying Set */
+ uiItemIntO(layout, "Active Keying Set", 0, "ANIM_OT_insert_keyframe_menu", "type", i++);
+ uiItemS(layout);
+
+ /* user-defined Keying Sets
+ * - these are listed in the order in which they were defined for the active scene
+ */
+ if (scene->keyingsets.first) {
+ for (ks= scene->keyingsets.first; ks; ks= ks->next)
+ uiItemIntO(layout, ks->name, 0, "ANIM_OT_insert_keyframe_menu", "type", i++);
+ uiItemS(layout);
+ }
+
+ /* builtin Keying Sets */
+ // XXX polling the entire list may lag
+ i= -1;
+ for (ks= builtin_keyingsets.first; ks; ks= ks->next) {
+ /* only show KeyingSet if context is suitable */
+ if (keyingset_context_ok_poll(C, ks)) {
+ uiItemIntO(layout, ks->name, 0, "ANIM_OT_insert_keyframe_menu", "type", i--);
+ }
+ }
+
+ uiPupMenuEnd(C, pup);
+
+ return OPERATOR_CANCELLED;
+}
+void ANIM_OT_insert_keyframe_menu (wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "Insert Keyframe";
+ ot->idname= "ANIM_OT_insert_keyframe_menu";
+
+ /* callbacks */
+ ot->invoke= insert_key_menu_invoke;
+ ot->exec= insert_key_exec;
+ ot->poll= ED_operator_areaactive;
+
+ /* flags */
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+
+ /* properties
+ * - NOTE: here the type is int not enum, since many of the indicies here are determined dynamically
+ */
+ RNA_def_int(ot->srna, "type", 0, INT_MIN, INT_MAX, "Keying Set Number", "Index (determined internally) of the Keying Set to use", 0, 1);
+}
+
+/* Delete Key Operator ------------------------ */
+
static int delete_key_exec (bContext *C, wmOperator *op)
{
ListBase dsources = {NULL, NULL};
Scene *scene= CTX_data_scene(C);
- KeyingSet *ks= NULL;
+ KeyingSet *ks= NULL;
+ int type= RNA_int_get(op->ptr, "type");
float cfra= (float)CFRA; // XXX for now, don't bother about all the yucky offset crap
short success;
- /* try to get KeyingSet */
- if (scene->active_keyingset > 0)
+ /* type is the Keying Set the user specified to use when calling the operator:
+ * - type == 0: use scene's active Keying Set
+ * - type > 0: use a user-defined Keying Set from the active scene
+ * - type < 0: use a builtin Keying Set
+ */
+ if (type == 0)
+ type= scene->active_keyingset;
+ if (type > 0)
ks= BLI_findlink(&scene->keyingsets, scene->active_keyingset-1);
+ else
+ ks= BLI_findlink(&builtin_keyingsets, -type-1);
+
/* report failure */
if (ks == NULL) {
BKE_report(op->reports, RPT_ERROR, "No active Keying Set");
return OPERATOR_CANCELLED;
}
+ /* get context info for relative Keying Sets */
+ if ((ks->flag & KEYINGSET_ABSOLUTE) == 0) {
+ /* exit if no suitable data obtained */
+ if (modifykey_get_context_data(C, &dsources, ks) == 0) {
+ BKE_report(op->reports, RPT_ERROR, "No suitable context info for active Keying Set");
+ return OPERATOR_CANCELLED;
+ }
+ }
+
/* try to insert keyframes for the channels specified by KeyingSet */
- success= commonkey_modifykey(&dsources, ks, COMMONKEY_MODE_DELETE, cfra);
+ success= modify_keyframes(C, &dsources, NULL, ks, MODIFYKEY_MODE_DELETE, cfra);
printf("KeyingSet '%s' - Successfully removed %d Keyframes \n", ks->name, success);
/* report failure? */
if (success == 0)
BKE_report(op->reports, RPT_WARNING, "Keying Set failed to remove any keyframes");
+ /* free temp context-data if available */
+ if (dsources.first) {
+ /* we assume that there is no extra data that needs to be freed from here... */
+ BLI_freelistN(&dsources);
+ }
+
/* send updates */
ED_anim_dag_flush_update(C);
@@ -2014,276 +1122,217 @@ void ANIM_OT_delete_keyframe (wmOperatorType *ot)
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+
+ /* properties
+ * - NOTE: here the type is int not enum, since many of the indicies here are determined dynamically
+ */
+ RNA_def_int(ot->srna, "type", 0, INT_MIN, INT_MAX, "Keying Set Number", "Index (determined internally) of the Keying Set to use", 0, 1);
}
-/* Insert Key Operator ------------------------ */
+/* Delete Key Operator ------------------------ */
/* XXX WARNING:
- * This is currently just a basic operator, which work in 3d-view context on objects/bones only
- * and will insert keyframes for a few settings only. This is until it becomes clear how
- * to separate (or not) the process for RNA-path creation between context + keyingsets.
- *
+ * This is currently just a basic operator, which work in 3d-view context on objects only.
+ * Should this be kept? It does have advantages over a version which requires selecting a keyingset to use...
* -- Joshua Leung, Jan 2009
*/
-
-/* defines for basic insert-key testing operator */
- // XXX this will definitely be replaced
-EnumPropertyItem prop_insertkey_types[] = {
- {0, "KEYINGSET", "Active KeyingSet", ""},
- {1, "OBLOC", "Object Location", ""},
- {2, "OBROT", "Object Rotation", ""},
- {3, "OBSCALE", "Object Scale", ""},
- {4, "MAT_COL", "Active Material - Color", ""},
- {5, "PCHANLOC", "Pose-Channel Location", ""},
- {6, "PCHANROT", "Pose-Channel Rotation", ""},
- {7, "PCHANSCALE", "Pose-Channel Scale", ""},
- {0, NULL, NULL, NULL}
-};
-
-static int insert_key_old_invoke (bContext *C, wmOperator *op, wmEvent *event)
+
+static int delete_key_old_exec (bContext *C, wmOperator *op)
{
- Object *ob= CTX_data_active_object(C);
- uiMenuItem *head;
+ Scene *scene= CTX_data_scene(C);
+ float cfra= (float)CFRA; // XXX for now, don't bother about all the yucky offset crap
- if (ob == NULL)
- return OPERATOR_CANCELLED;
+ // XXX more comprehensive tests will be needed
+ CTX_DATA_BEGIN(C, Base*, base, selected_bases)
+ {
+ Object *ob= base->object;
+ ID *id= (ID *)ob;
+ FCurve *fcu, *fcn;
+ short success= 0;
- head= uiPupMenuBegin("Insert Keyframe", 0);
+ /* loop through all curves in animdata and delete keys on this frame */
+ if (ob->adt) {
+ AnimData *adt= ob->adt;
+ bAction *act= adt->action;
+
+ for (fcu= act->curves.first; fcu; fcu= fcn) {
+ fcn= fcu->next;
+ success+= delete_keyframe(id, NULL, NULL, fcu->rna_path, fcu->array_index, cfra, 0);
+ }
+ }
+
+ printf("Ob '%s' - Successfully removed %d keyframes \n", id->name+2, success);
+
+ ob->recalc |= OB_RECALC_OB;
+ }
+ CTX_DATA_END;
- /* active keyingset */
- uiMenuItemEnumO(head, "", 0, "ANIM_OT_insert_keyframe_old", "type", 0);
+ /* send updates */
+ ED_anim_dag_flush_update(C);
- /* selective inclusion */
- if ((ob->pose) && (ob->flag & OB_POSEMODE)) {
- /* bone types */
- uiMenuItemEnumO(head, "", 0, "ANIM_OT_insert_keyframe_old", "type", 5);
- uiMenuItemEnumO(head, "", 0, "ANIM_OT_insert_keyframe_old", "type", 6);
- uiMenuItemEnumO(head, "", 0, "ANIM_OT_insert_keyframe_old", "type", 7);
- }
- else {
- /* object types */
- uiMenuItemEnumO(head, "", 0, "ANIM_OT_insert_keyframe_old", "type", 1);
- uiMenuItemEnumO(head, "", 0, "ANIM_OT_insert_keyframe_old", "type", 2);
- uiMenuItemEnumO(head, "", 0, "ANIM_OT_insert_keyframe_old", "type", 3);
- uiMenuItemEnumO(head, "", 0, "ANIM_OT_insert_keyframe_old", "type", 4);
- }
+ WM_event_add_notifier(C, NC_OBJECT|ND_KEYS, NULL);
+
+ return OPERATOR_FINISHED;
+}
+
+void ANIM_OT_delete_keyframe_old (wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "Delete Keyframe";
+ ot->idname= "ANIM_OT_delete_keyframe_old";
- uiPupMenuEnd(C, head);
+ /* callbacks */
+ ot->invoke= WM_operator_confirm;
+ ot->exec= delete_key_old_exec;
- return OPERATOR_CANCELLED;
+ ot->poll= ED_operator_areaactive;
+
+ /* flags */
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
}
-
-static int insert_key_old_exec (bContext *C, wmOperator *op)
+
+
+/* Insert Key Button Operator ------------------------ */
+
+static int insert_key_button_exec (bContext *C, wmOperator *op)
{
Scene *scene= CTX_data_scene(C);
- short mode= RNA_enum_get(op->ptr, "type");
+ PointerRNA ptr;
+ PropertyRNA *prop= NULL;
+ char *path;
float cfra= (float)CFRA; // XXX for now, don't bother about all the yucky offset crap
+ short success= 0;
+ int a, index, length, all= RNA_boolean_get(op->ptr, "all");
- /* for now, handle 'active keyingset' one separately */
- if (mode == 0) {
- ListBase dsources = {NULL, NULL};
- KeyingSet *ks= NULL;
- short success;
-
- /* try to get KeyingSet */
- if (scene->active_keyingset > 0)
- ks= BLI_findlink(&scene->keyingsets, scene->active_keyingset-1);
- /* report failure */
- if (ks == NULL) {
- BKE_report(op->reports, RPT_ERROR, "No active Keying Set");
- return OPERATOR_CANCELLED;
- }
-
- /* try to insert keyframes for the channels specified by KeyingSet */
- success= commonkey_modifykey(&dsources, ks, COMMONKEY_MODE_INSERT, cfra);
- printf("KeyingSet '%s' - Successfully added %d Keyframes \n", ks->name, success);
+ /* try to insert keyframe using property retrieved from UI */
+ memset(&ptr, 0, sizeof(PointerRNA));
+ uiAnimContextProperty(C, &ptr, &prop, &index);
+
+ if ((ptr.data && prop) && RNA_property_animateable(&ptr, prop)) {
+ path= RNA_path_from_ID_to_property(&ptr, prop);
- /* report failure? */
- if (success == 0)
- BKE_report(op->reports, RPT_WARNING, "Keying Set failed to insert any keyframes");
- }
- else {
- // more comprehensive tests will be needed
- CTX_DATA_BEGIN(C, Base*, base, selected_bases)
- {
- Object *ob= base->object;
- ID *id= (ID *)ob;
- short success= 0;
-
- /* check which keyframing mode chosen for this object */
- if (mode < 4) {
- /* object-based keyframes */
- switch (mode) {
- case 4: /* color of active material (only for geometry...) */
- // NOTE: this is just a demo... but ideally we'd go through materials instead of active one only so reference stays same
- // XXX no group for now
- success+= insertkey(id, NULL, "active_material.diffuse_color", 0, cfra, 0);
- success+= insertkey(id, NULL, "active_material.diffuse_color", 1, cfra, 0);
- success+= insertkey(id, NULL, "active_material.diffuse_color", 2, cfra, 0);
- break;
- case 3: /* object scale */
- success+= insertkey(id, "Object Transforms", "scale", 0, cfra, 0);
- success+= insertkey(id, "Object Transforms", "scale", 1, cfra, 0);
- success+= insertkey(id, "Object Transforms", "scale", 2, cfra, 0);
- break;
- case 2: /* object rotation */
- success+= insertkey(id, "Object Transforms", "rotation", 0, cfra, 0);
- success+= insertkey(id, "Object Transforms", "rotation", 1, cfra, 0);
- success+= insertkey(id, "Object Transforms", "rotation", 2, cfra, 0);
- break;
- default: /* object location */
- success+= insertkey(id, "Object Transforms", "location", 0, cfra, 0);
- success+= insertkey(id, "Object Transforms", "location", 1, cfra, 0);
- success+= insertkey(id, "Object Transforms", "location", 2, cfra, 0);
- break;
- }
+ if (path) {
+ if (all) {
+ length= RNA_property_array_length(prop);
- ob->recalc |= OB_RECALC_OB;
- }
- else if ((ob->pose) && (ob->flag & OB_POSEMODE)) {
- /* PoseChannel based keyframes */
- bPoseChannel *pchan;
-
- for (pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) {
- /* only if selected */
- if ((pchan->bone) && (pchan->bone->flag & BONE_SELECTED)) {
- char buf[512];
-
- switch (mode) {
- case 7: /* pchan scale */
- sprintf(buf, "pose.pose_channels[\"%s\"].scale", pchan->name);
- success+= insertkey(id, pchan->name, buf, 0, cfra, 0);
- success+= insertkey(id, pchan->name, buf, 1, cfra, 0);
- success+= insertkey(id, pchan->name, buf, 2, cfra, 0);
- break;
- case 6: /* pchan rotation */
- if (pchan->rotmode == PCHAN_ROT_QUAT) {
- sprintf(buf, "pose.pose_channels[\"%s\"].rotation", pchan->name);
- success+= insertkey(id, pchan->name, buf, 0, cfra, 0);
- success+= insertkey(id, pchan->name, buf, 1, cfra, 0);
- success+= insertkey(id, pchan->name, buf, 2, cfra, 0);
- success+= insertkey(id, pchan->name, buf, 3, cfra, 0);
- }
- else {
- sprintf(buf, "pose.pose_channels[\"%s\"].euler_rotation", pchan->name);
- success+= insertkey(id, pchan->name, buf, 0, cfra, 0);
- success+= insertkey(id, pchan->name, buf, 1, cfra, 0);
- success+= insertkey(id, pchan->name, buf, 2, cfra, 0);
- }
- break;
- default: /* pchan location */
- sprintf(buf, "pose.pose_channels[\"%s\"].location", pchan->name);
- success+= insertkey(id, pchan->name, buf, 0, cfra, 0);
- success+= insertkey(id, pchan->name, buf, 1, cfra, 0);
- success+= insertkey(id, pchan->name, buf, 2, cfra, 0);
- break;
- }
- }
- }
-
- ob->recalc |= OB_RECALC_OB;
+ if(length) index= 0;
+ else length= 1;
}
+ else
+ length= 1;
- printf("Ob '%s' - Successfully added %d Keyframes \n", id->name+2, success);
+ for (a=0; a<length; a++)
+ success+= insert_keyframe(ptr.id.data, NULL, NULL, path, index+a, cfra, 0);
+
+ MEM_freeN(path);
+ }
+ else {
+ if (G.f & G_DEBUG)
+ printf("Button Insert-Key: no path to property \n");
+ BKE_report(op->reports, RPT_WARNING, "Failed to resolve path to property. Try using a Keying Set instead.");
}
- CTX_DATA_END;
+ }
+ else if (G.f & G_DEBUG) {
+ printf("ptr.data = %p, prop = %p,", ptr.data, prop);
+ printf("animateable = %d \n", RNA_property_animateable(&ptr, prop));
}
- /* send updates */
- ED_anim_dag_flush_update(C);
-
- if (mode == 0) /* for now, only send ND_KEYS for KeyingSets */
+ if (success) {
+ /* send updates */
+ ED_anim_dag_flush_update(C);
+
+ /* for now, only send ND_KEYS for KeyingSets */
WM_event_add_notifier(C, ND_KEYS, NULL);
- else if (mode == 4) /* material color requires different notifiers */
- WM_event_add_notifier(C, NC_MATERIAL|ND_KEYS, NULL);
- else
- WM_event_add_notifier(C, NC_OBJECT|ND_KEYS, NULL);
+ }
- return OPERATOR_FINISHED;
+ return (success)? OPERATOR_FINISHED: OPERATOR_CANCELLED;
}
-void ANIM_OT_insert_keyframe_old (wmOperatorType *ot)
+void ANIM_OT_insert_keyframe_button (wmOperatorType *ot)
{
- PropertyRNA *prop;
-
/* identifiers */
ot->name= "Insert Keyframe";
- ot->idname= "ANIM_OT_insert_keyframe_old";
+ ot->idname= "ANIM_OT_insert_keyframe_button";
/* callbacks */
- ot->invoke= insert_key_old_invoke;
- ot->exec= insert_key_old_exec;
- ot->poll= ED_operator_areaactive;
+ ot->exec= insert_key_button_exec;
+ ot->poll= modify_key_op_poll;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
-
+
/* properties */
- // XXX update this for the latest RNA stuff styles...
- prop= RNA_def_property(ot->srna, "type", PROP_ENUM, PROP_NONE);
- RNA_def_property_enum_items(prop, prop_insertkey_types);
+ RNA_def_boolean(ot->srna, "all", 1, "All", "Insert a keyframe for all element of the array.");
}
-/* Delete Key Operator ------------------------ */
+/* Delete Key Button Operator ------------------------ */
-/* XXX WARNING:
- * This is currently just a basic operator, which work in 3d-view context on objects only.
- * -- Joshua Leung, Jan 2009
- */
-
-static int delete_key_old_exec (bContext *C, wmOperator *op)
+static int delete_key_button_exec (bContext *C, wmOperator *op)
{
Scene *scene= CTX_data_scene(C);
+ PointerRNA ptr;
+ PropertyRNA *prop= NULL;
+ char *path;
float cfra= (float)CFRA; // XXX for now, don't bother about all the yucky offset crap
+ short success= 0;
+ int a, index, length, all= RNA_boolean_get(op->ptr, "all");
- // XXX more comprehensive tests will be needed
- CTX_DATA_BEGIN(C, Base*, base, selected_bases)
- {
- Object *ob= base->object;
- ID *id= (ID *)ob;
- FCurve *fcu, *fcn;
- short success= 0;
+ /* try to insert keyframe using property retrieved from UI */
+ memset(&ptr, 0, sizeof(PointerRNA));
+ uiAnimContextProperty(C, &ptr, &prop, &index);
+
+ if (ptr.data && prop) {
+ path= RNA_path_from_ID_to_property(&ptr, prop);
- /* loop through all curves in animdata and delete keys on this frame */
- if (ob->adt) {
- AnimData *adt= ob->adt;
- bAction *act= adt->action;
-
- for (fcu= act->curves.first; fcu; fcu= fcn) {
- fcn= fcu->next;
- success+= deletekey(id, NULL, fcu->rna_path, fcu->array_index, cfra, 0);
+ if (path) {
+ if (all) {
+ length= RNA_property_array_length(prop);
+
+ if(length) index= 0;
+ else length= 1;
}
+ else
+ length= 1;
+
+ for (a=0; a<length; a++)
+ success+= delete_keyframe(ptr.id.data, NULL, NULL, path, index+a, cfra, 0);
+
+ MEM_freeN(path);
}
-
- printf("Ob '%s' - Successfully removed %d keyframes \n", id->name+2, success);
-
- ob->recalc |= OB_RECALC_OB;
+ else if (G.f & G_DEBUG)
+ printf("Button Delete-Key: no path to property \n");
+ }
+ else if (G.f & G_DEBUG) {
+ printf("ptr.data = %p, prop = %p \n", ptr.data, prop);
}
- CTX_DATA_END;
- /* send updates */
- ED_anim_dag_flush_update(C);
- // XXX what if it was a material keyframe?
- WM_event_add_notifier(C, NC_OBJECT|ND_KEYS, NULL);
+ if(success) {
+ /* send updates */
+ ED_anim_dag_flush_update(C);
+
+ /* for now, only send ND_KEYS for KeyingSets */
+ WM_event_add_notifier(C, ND_KEYS, NULL);
+ }
- return OPERATOR_FINISHED;
+ return (success)? OPERATOR_FINISHED: OPERATOR_CANCELLED;
}
-void ANIM_OT_delete_keyframe_old (wmOperatorType *ot)
+void ANIM_OT_delete_keyframe_button (wmOperatorType *ot)
{
/* identifiers */
ot->name= "Delete Keyframe";
- ot->idname= "ANIM_OT_delete_keyframe_old";
+ ot->idname= "ANIM_OT_delete_keyframe_button";
/* callbacks */
- ot->invoke= WM_operator_confirm; // XXX we will need our own one eventually, to cope with the dynamic menus...
- ot->exec= delete_key_old_exec;
-
- ot->poll= ED_operator_areaactive;
+ ot->exec= delete_key_button_exec;
+ ot->poll= modify_key_op_poll;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+
+ /* properties */
+ RNA_def_boolean(ot->srna, "all", 1, "All", "Delete keyfames from all elements of the array.");
}
/* ******************************************* */
@@ -2291,7 +1340,7 @@ void ANIM_OT_delete_keyframe_old (wmOperatorType *ot)
/* --------------- API/Per-Datablock Handling ------------------- */
-/* Checks whether an IPO-block has a keyframe for a given frame
+/* Checks whether an Action has a keyframe for a given frame
* Since we're only concerned whether a keyframe exists, we can simply loop until a match is found...
*/
short action_frame_has_keyframe (bAction *act, float frame, short filter)
diff --git a/source/blender/editors/animation/keyingsets.c b/source/blender/editors/animation/keyingsets.c
new file mode 100644
index 00000000000..0f5cef51bdb
--- /dev/null
+++ b/source/blender/editors/animation/keyingsets.c
@@ -0,0 +1,1178 @@
+/* Testing code for 2.5 animation system
+ * Copyright 2009, Joshua Leung
+ */
+
+#include <stdio.h>
+#include <stddef.h>
+#include <string.h>
+#include <math.h>
+#include <float.h>
+
+#include "MEM_guardedalloc.h"
+
+#include "BLI_blenlib.h"
+#include "BLI_arithb.h"
+#include "BLI_dynstr.h"
+
+#include "DNA_anim_types.h"
+#include "DNA_action_types.h"
+#include "DNA_armature_types.h"
+#include "DNA_constraint_types.h"
+#include "DNA_key_types.h"
+#include "DNA_object_types.h"
+#include "DNA_material_types.h"
+#include "DNA_scene_types.h"
+#include "DNA_userdef_types.h"
+#include "DNA_windowmanager_types.h"
+
+#include "BKE_animsys.h"
+#include "BKE_action.h"
+#include "BKE_constraint.h"
+#include "BKE_fcurve.h"
+#include "BKE_utildefines.h"
+#include "BKE_context.h"
+#include "BKE_report.h"
+#include "BKE_key.h"
+#include "BKE_material.h"
+
+#include "ED_anim_api.h"
+#include "ED_keyframing.h"
+#include "ED_keyframes_edit.h"
+#include "ED_screen.h"
+#include "ED_util.h"
+
+#include "UI_interface.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+
+#include "RNA_access.h"
+#include "RNA_define.h"
+#include "RNA_types.h"
+
+#include "anim_intern.h"
+
+/* ************************************************** */
+/* KEYING SETS - EDITING API */
+
+/* Operators ------------------------------------------- */
+
+/* These operators are only provided for scripting/macro usage, not for direct
+ * calling from the UI since they wrap some of the data-access API code for these
+ * (defined in blenkernel) which have quite a few properties.
+ */
+
+/* ----- */
+
+static int keyingset_add_destination_exec (bContext *C, wmOperator *op)
+{
+ PointerRNA ptr;
+ KeyingSet *ks= NULL;
+ ID *id= NULL;
+ char rna_path[256], group_name[64]; // xxx
+ short groupmode=0, flag=0;
+ int array_index=0;
+
+ /* get settings from operator properties */
+ ptr = RNA_pointer_get(op->ptr, "keyingset");
+ if (ptr.data)
+ ks= (KeyingSet *)ptr.data;
+
+ ptr = RNA_pointer_get(op->ptr, "id");
+ if (ptr.data)
+ id= (ID *)ptr.data;
+
+ groupmode= RNA_enum_get(op->ptr, "grouping_method");
+ RNA_string_get(op->ptr, "group_name", group_name);
+
+ RNA_string_get(op->ptr, "rna_path", rna_path);
+ array_index= RNA_int_get(op->ptr, "array_index");
+
+ if (RNA_boolean_get(op->ptr, "entire_array"))
+ flag |= KSP_FLAG_WHOLE_ARRAY;
+
+ /* if enough args are provided, call API method */
+ if (ks) {
+ BKE_keyingset_add_destination(ks, id, group_name, rna_path, array_index, flag, groupmode);
+ return OPERATOR_FINISHED;
+ }
+ else {
+ BKE_report(op->reports, RPT_ERROR, "Keying Set could not be added.");
+ return OPERATOR_CANCELLED;
+ }
+}
+
+void ANIM_OT_keyingset_add_destination (wmOperatorType *ot)
+{
+ // XXX: this is also defined in rna_animation.c
+ static EnumPropertyItem prop_mode_grouping_items[] = {
+ {KSP_GROUP_NAMED, "NAMED", "Named Group", ""},
+ {KSP_GROUP_NONE, "NONE", "None", ""},
+ {KSP_GROUP_KSNAME, "KEYINGSET", "Keying Set Name", ""},
+ {0, NULL, NULL, NULL}};
+
+ /* identifiers */
+ ot->name= "Add Keying Set Destination";
+ ot->idname= "ANIM_OT_keyingset_add_destination";
+
+ /* callbacks */
+ ot->exec= keyingset_add_destination_exec;
+ ot->poll= ED_operator_scene_editable;
+
+ /* props */
+ /* pointers */ // xxx - do we want to directly expose these?
+ RNA_def_pointer_runtime(ot->srna, "keyingset", &RNA_KeyingSet, "Keying Set", "Keying Set to add destination to.");
+ RNA_def_pointer_runtime(ot->srna, "id", &RNA_ID, "ID", "ID-block for the destination.");
+ /* grouping */
+ RNA_def_enum(ot->srna, "grouping_method", prop_mode_grouping_items, KSP_GROUP_NAMED, "Grouping Method", "Method used to define which Group-name to use.");
+ RNA_def_string(ot->srna, "group_name", "", 64, "Group Name", "Name of Action Group to assign destination to (only if grouping mode is to use this name).");
+ /* rna-path */
+ RNA_def_string(ot->srna, "rna_path", "", 256, "RNA-Path", "RNA-Path to destination property."); // xxx hopefully this is long enough
+ RNA_def_int(ot->srna, "array_index", 0, 0, INT_MAX, "Array Index", "If applicable, the index ", 0, INT_MAX);
+ /* flags */
+ RNA_def_boolean(ot->srna, "entire_array", 1, "Entire Array", "hen an 'array/vector' type is chosen (Location, Rotation, Color, etc.), entire array is to be used.");
+
+}
+
+/* ----- */
+
+static int keyingset_add_new_exec (bContext *C, wmOperator *op)
+{
+ Scene *sce= CTX_data_scene(C);
+ KeyingSet *ks= NULL;
+ short flag=0, keyingflag=0;
+ char name[64];
+
+ /* get settings from operator properties */
+ RNA_string_get(op->ptr, "name", name);
+
+ if (RNA_boolean_get(op->ptr, "absolute"))
+ flag |= KEYINGSET_ABSOLUTE;
+ if (RNA_boolean_get(op->ptr, "insertkey_needed"))
+ keyingflag |= INSERTKEY_NEEDED;
+ if (RNA_boolean_get(op->ptr, "insertkey_visual"))
+ keyingflag |= INSERTKEY_MATRIX;
+
+ /* call the API func, and set the active keyingset index */
+ ks= BKE_keyingset_add(&sce->keyingsets, name, flag, keyingflag);
+
+ if (ks) {
+ sce->active_keyingset= BLI_countlist(&sce->keyingsets);
+ return OPERATOR_FINISHED;
+ }
+ else {
+ BKE_report(op->reports, RPT_ERROR, "Keying Set could not be added.");
+ return OPERATOR_CANCELLED;
+ }
+}
+
+void ANIM_OT_keyingset_add_new (wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "Add Keying Set";
+ ot->idname= "ANIM_OT_keyingset_add_new";
+
+ /* callbacks */
+ ot->exec= keyingset_add_new_exec;
+ ot->poll= ED_operator_scene_editable;
+
+ /* props */
+ /* name */
+ RNA_def_string(ot->srna, "name", "KeyingSet", 64, "Name", "Name of Keying Set");
+ /* flags */
+ RNA_def_boolean(ot->srna, "absolute", 1, "Absolute", "Keying Set defines specific paths/settings to be keyframed (i.e. is not reliant on context info)");
+ /* keying flags */
+ RNA_def_boolean(ot->srna, "insertkey_needed", 0, "Insert Keyframes - Only Needed", "Only insert keyframes where they're needed in the relevant F-Curves.");
+ RNA_def_boolean(ot->srna, "insertkey_visual", 0, "Insert Keyframes - Visual", "Insert keyframes based on 'visual transforms'.");
+}
+
+/* UI API --------------------------------------------- */
+
+/* Build menu-string of available keying-sets (allocates memory for string)
+ * NOTE: mode must not be longer than 64 chars
+ */
+char *ANIM_build_keyingsets_menu (ListBase *list, short for_edit)
+{
+ DynStr *pupds= BLI_dynstr_new();
+ KeyingSet *ks;
+ char buf[64];
+ char *str;
+ int i;
+
+ /* add title first */
+ BLI_dynstr_append(pupds, "Keying Sets%t|");
+
+ /* add dummy entries for none-active */
+ if (for_edit) {
+ BLI_dynstr_append(pupds, "Add New%x-1|");
+ BLI_dynstr_append(pupds, " %x0|");
+ }
+ else
+ BLI_dynstr_append(pupds, "<No Keying Set Active>%x0|");
+
+ /* loop through keyingsets, adding them */
+ for (ks=list->first, i=1; ks; ks=ks->next, i++) {
+ if (for_edit == 0)
+ BLI_dynstr_append(pupds, "KS: ");
+
+ BLI_dynstr_append(pupds, ks->name);
+ BLI_snprintf( buf, 64, "%%x%d%s", i, ((ks->next)?"|":"") );
+ BLI_dynstr_append(pupds, buf);
+ }
+
+ /* convert to normal MEM_malloc'd string */
+ str= BLI_dynstr_get_cstring(pupds);
+ BLI_dynstr_free(pupds);
+
+ return str;
+}
+
+
+/* ******************************************* */
+/* KEYING SETS - BUILTIN */
+
+#if 0 // XXX old keyingsets code based on adrcodes... to be restored in due course
+
+/* ------------- KeyingSet Defines ------------ */
+/* Note: these must all be named with the defks_* prefix, otherwise the template macro will not work! */
+
+/* macro for defining keyingset contexts */
+#define KSC_TEMPLATE(ctx_name) {&defks_##ctx_name[0], NULL, sizeof(defks_##ctx_name)/sizeof(bKeyingSet)}
+
+/* --- */
+
+/* check if option not available for deleting keys */
+static short incl_non_del_keys (bKeyingSet *ks, const char mode[])
+{
+ /* as optimisation, assume that it is sufficient to check only first letter
+ * of mode (int comparison should be faster than string!)
+ */
+ //if (strcmp(mode, "Delete")==0)
+ if (mode && mode[0]=='D')
+ return 0;
+
+ return 1;
+}
+
+/* Object KeyingSets ------ */
+
+/* check if include shapekey entry */
+static short incl_v3d_ob_shapekey (bKeyingSet *ks, const char mode[])
+{
+ //Object *ob= (G.obedit)? (G.obedit) : (OBACT); // XXX
+ Object *ob= NULL;
+ char *newname= NULL;
+
+ if(ob==NULL)
+ return 0;
+
+ /* not available for delete mode */
+ if (strcmp(mode, "Delete")==0)
+ return 0;
+
+ /* check if is geom object that can get shapekeys */
+ switch (ob->type) {
+ /* geometry? */
+ case OB_MESH: newname= "Mesh"; break;
+ case OB_CURVE: newname= "Curve"; break;
+ case OB_SURF: newname= "Surface"; break;
+ case OB_LATTICE: newname= "Lattice"; break;
+
+ /* not geometry! */
+ default:
+ return 0;
+ }
+
+ /* if ks is shapekey entry (this could be callled for separator before too!) */
+ if (ks->flag == -3)
+ BLI_strncpy(ks->name, newname, sizeof(ks->name));
+
+ /* if it gets here, it's ok */
+ return 1;
+}
+
+/* array for object keyingset defines */
+bKeyingSet defks_v3d_object[] =
+{
+ /* include_cb, adrcode-getter, name, blocktype, flag, chan_num, adrcodes */
+ {NULL, "Loc", ID_OB, 0, 3, {OB_LOC_X,OB_LOC_Y,OB_LOC_Z}},
+ {NULL, "Rot", ID_OB, 0, 3, {OB_ROT_X,OB_ROT_Y,OB_ROT_Z}},
+ {NULL, "Scale", ID_OB, 0, 3, {OB_SIZE_X,OB_SIZE_Y,OB_SIZE_Z}},
+
+ {NULL, "%l", 0, -1, 0, {0}}, // separator
+
+ {NULL, "LocRot", ID_OB, 0, 6,
+ {OB_LOC_X,OB_LOC_Y,OB_LOC_Z,
+ OB_ROT_X,OB_ROT_Y,OB_ROT_Z}},
+
+ {NULL, "LocScale", ID_OB, 0, 6,
+ {OB_LOC_X,OB_LOC_Y,OB_LOC_Z,
+ OB_SIZE_X,OB_SIZE_Y,OB_SIZE_Z}},
+
+ {NULL, "LocRotScale", ID_OB, 0, 9,
+ {OB_LOC_X,OB_LOC_Y,OB_LOC_Z,
+ OB_ROT_X,OB_ROT_Y,OB_ROT_Z,
+ OB_SIZE_X,OB_SIZE_Y,OB_SIZE_Z}},
+
+ {NULL, "RotScale", ID_OB, 0, 6,
+ {OB_ROT_X,OB_ROT_Y,OB_ROT_Z,
+ OB_SIZE_X,OB_SIZE_Y,OB_SIZE_Z}},
+
+ {incl_non_del_keys, "%l", 0, -1, 0, {0}}, // separator
+
+ {incl_non_del_keys, "VisualLoc", ID_OB, INSERTKEY_MATRIX, 3, {OB_LOC_X,OB_LOC_Y,OB_LOC_Z}},
+ {incl_non_del_keys, "VisualRot", ID_OB, INSERTKEY_MATRIX, 3, {OB_ROT_X,OB_ROT_Y,OB_ROT_Z}},
+
+ {incl_non_del_keys, "VisualLocRot", ID_OB, INSERTKEY_MATRIX, 6,
+ {OB_LOC_X,OB_LOC_Y,OB_LOC_Z,
+ OB_ROT_X,OB_ROT_Y,OB_ROT_Z}},
+
+ {NULL, "%l", 0, -1, 0, {0}}, // separator
+
+ {NULL, "Layer", ID_OB, 0, 1, {OB_LAY}}, // icky option...
+ {NULL, "Available", ID_OB, -2, 0, {0}},
+
+ {incl_v3d_ob_shapekey, "%l%l", 0, -1, 0, {0}}, // separator (linked to shapekey entry)
+ {incl_v3d_ob_shapekey, "<ShapeKey>", ID_OB, -3, 0, {0}}
+};
+
+/* PoseChannel KeyingSets ------ */
+
+/* array for posechannel keyingset defines */
+bKeyingSet defks_v3d_pchan[] =
+{
+ /* include_cb, name, blocktype, flag, chan_num, adrcodes */
+ {NULL, "Loc", ID_PO, 0, 3, {AC_LOC_X,AC_LOC_Y,AC_LOC_Z}},
+ {NULL, "Rot", ID_PO, COMMONKEY_PCHANROT, 1, {KAG_CHAN_EXTEND}},
+ {NULL, "Scale", ID_PO, 0, 3, {AC_SIZE_X,AC_SIZE_Y,AC_SIZE_Z}},
+
+ {NULL, "%l", 0, -1, 0, {0}}, // separator
+
+ {NULL, "LocRot", ID_PO, COMMONKEY_PCHANROT, 4,
+ {AC_LOC_X,AC_LOC_Y,AC_LOC_Z,
+ KAG_CHAN_EXTEND}},
+
+ {NULL, "LocScale", ID_PO, 0, 6,
+ {AC_LOC_X,AC_LOC_Y,AC_LOC_Z,
+ AC_SIZE_X,AC_SIZE_Y,AC_SIZE_Z}},
+
+ {NULL, "LocRotScale", ID_PO, COMMONKEY_PCHANROT, 7,
+ {AC_LOC_X,AC_LOC_Y,AC_LOC_Z,AC_SIZE_X,AC_SIZE_Y,AC_SIZE_Z,
+ KAG_CHAN_EXTEND}},
+
+ {NULL, "RotScale", ID_PO, 0, 4,
+ {AC_SIZE_X,AC_SIZE_Y,AC_SIZE_Z,
+ KAG_CHAN_EXTEND}},
+
+ {incl_non_del_keys, "%l", 0, -1, 0, {0}}, // separator
+
+ {incl_non_del_keys, "VisualLoc", ID_PO, INSERTKEY_MATRIX, 3, {AC_LOC_X,AC_LOC_Y,AC_LOC_Z}},
+ {incl_non_del_keys, "VisualRot", ID_PO, INSERTKEY_MATRIX|COMMONKEY_PCHANROT, 1, {KAG_CHAN_EXTEND}},
+
+ {incl_non_del_keys, "VisualLocRot", ID_PO, INSERTKEY_MATRIX|COMMONKEY_PCHANROT, 4,
+ {AC_LOC_X,AC_LOC_Y,AC_LOC_Z, KAG_CHAN_EXTEND}},
+
+ {NULL, "%l", 0, -1, 0, {0}}, // separator
+
+ {NULL, "Available", ID_PO, -2, 0, {0}}
+};
+
+/* Material KeyingSets ------ */
+
+/* array for material keyingset defines */
+bKeyingSet defks_buts_shading_mat[] =
+{
+ /* include_cb, name, blocktype, flag, chan_num, adrcodes */
+ {NULL, "RGB", ID_MA, 0, 3, {MA_COL_R,MA_COL_G,MA_COL_B}},
+ {NULL, "Alpha", ID_MA, 0, 1, {MA_ALPHA}},
+ {NULL, "Halo Size", ID_MA, 0, 1, {MA_HASIZE}},
+ {NULL, "Mode", ID_MA, 0, 1, {MA_MODE}}, // evil bitflags
+
+ {NULL, "%l", 0, -1, 0, {0}}, // separator
+
+ {NULL, "All Color", ID_MA, 0, 18,
+ {MA_COL_R,MA_COL_G,MA_COL_B,
+ MA_ALPHA,MA_HASIZE, MA_MODE,
+ MA_SPEC_R,MA_SPEC_G,MA_SPEC_B,
+ MA_REF,MA_EMIT,MA_AMB,MA_SPEC,MA_HARD,
+ MA_MODE,MA_TRANSLU,MA_ADD}},
+
+ {NULL, "All Mirror", ID_MA, 0, 5,
+ {MA_RAYM,MA_FRESMIR,MA_FRESMIRI,
+ MA_FRESTRA,MA_FRESTRAI}},
+
+ {NULL, "%l", 0, -1, 0, {0}}, // separator
+
+ {NULL, "Ofs", ID_MA, COMMONKEY_ADDMAP, 3, {MAP_OFS_X,MAP_OFS_Y,MAP_OFS_Z}},
+ {NULL, "Size", ID_MA, COMMONKEY_ADDMAP, 3, {MAP_SIZE_X,MAP_SIZE_Y,MAP_SIZE_Z}},
+
+ {NULL, "All Mapping", ID_MA, COMMONKEY_ADDMAP, 14,
+ {MAP_OFS_X,MAP_OFS_Y,MAP_OFS_Z,
+ MAP_SIZE_X,MAP_SIZE_Y,MAP_SIZE_Z,
+ MAP_R,MAP_G,MAP_B,MAP_DVAR,
+ MAP_COLF,MAP_NORF,MAP_VARF,MAP_DISP}},
+
+ {NULL, "%l", 0, -1, 0, {0}}, // separator
+
+ {NULL, "Available", ID_MA, -2, 0, {0}}
+};
+
+/* World KeyingSets ------ */
+
+/* array for world keyingset defines */
+bKeyingSet defks_buts_shading_wo[] =
+{
+ /* include_cb, name, blocktype, flag, chan_num, adrcodes */
+ {NULL, "Zenith RGB", ID_WO, 0, 3, {WO_ZEN_R,WO_ZEN_G,WO_ZEN_B}},
+ {NULL, "Horizon RGB", ID_WO, 0, 3, {WO_HOR_R,WO_HOR_G,WO_HOR_B}},
+
+ {NULL, "%l", 0, -1, 0, {0}}, // separator
+
+ {NULL, "Mist", ID_WO, 0, 4, {WO_MISI,WO_MISTDI,WO_MISTSTA,WO_MISTHI}},
+ {NULL, "Stars", ID_WO, 0, 5, {WO_STAR_R,WO_STAR_G,WO_STAR_B,WO_STARDIST,WO_STARSIZE}},
+
+
+ {NULL, "%l", 0, -1, 0, {0}}, // separator
+
+ {NULL, "Ofs", ID_WO, COMMONKEY_ADDMAP, 3, {MAP_OFS_X,MAP_OFS_Y,MAP_OFS_Z}},
+ {NULL, "Size", ID_WO, COMMONKEY_ADDMAP, 3, {MAP_SIZE_X,MAP_SIZE_Y,MAP_SIZE_Z}},
+
+ {NULL, "All Mapping", ID_WO, COMMONKEY_ADDMAP, 14,
+ {MAP_OFS_X,MAP_OFS_Y,MAP_OFS_Z,
+ MAP_SIZE_X,MAP_SIZE_Y,MAP_SIZE_Z,
+ MAP_R,MAP_G,MAP_B,MAP_DVAR,
+ MAP_COLF,MAP_NORF,MAP_VARF,MAP_DISP}},
+
+ {NULL, "%l", 0, -1, 0, {0}}, // separator
+
+ {NULL, "Available", ID_WO, -2, 0, {0}}
+};
+
+/* Lamp KeyingSets ------ */
+
+/* array for lamp keyingset defines */
+bKeyingSet defks_buts_shading_la[] =
+{
+ /* include_cb, name, blocktype, flag, chan_num, adrcodes */
+ {NULL, "RGB", ID_LA, 0, 3, {LA_COL_R,LA_COL_G,LA_COL_B}},
+ {NULL, "Energy", ID_LA, 0, 1, {LA_ENERGY}},
+ {NULL, "Spot Size", ID_LA, 0, 1, {LA_SPOTSI}},
+
+ {NULL, "%l", 0, -1, 0, {0}}, // separator
+
+ {NULL, "Ofs", ID_LA, COMMONKEY_ADDMAP, 3, {MAP_OFS_X,MAP_OFS_Y,MAP_OFS_Z}},
+ {NULL, "Size", ID_LA, COMMONKEY_ADDMAP, 3, {MAP_SIZE_X,MAP_SIZE_Y,MAP_SIZE_Z}},
+
+ {NULL, "All Mapping", ID_LA, COMMONKEY_ADDMAP, 14,
+ {MAP_OFS_X,MAP_OFS_Y,MAP_OFS_Z,
+ MAP_SIZE_X,MAP_SIZE_Y,MAP_SIZE_Z,
+ MAP_R,MAP_G,MAP_B,MAP_DVAR,
+ MAP_COLF,MAP_NORF,MAP_VARF,MAP_DISP}},
+
+ {NULL, "%l", 0, -1, 0, {0}}, // separator
+
+ {NULL, "Available", ID_LA, -2, 0, {0}}
+};
+
+/* Texture KeyingSets ------ */
+
+/* array for texture keyingset defines */
+bKeyingSet defks_buts_shading_tex[] =
+{
+ /* include_cb, name, blocktype, flag, chan_num, adrcodes */
+ {NULL, "Clouds", ID_TE, 0, 5,
+ {TE_NSIZE,TE_NDEPTH,TE_NTYPE,
+ TE_MG_TYP,TE_N_BAS1}},
+
+ {NULL, "Marble", ID_TE, 0, 7,
+ {TE_NSIZE,TE_NDEPTH,TE_NTYPE,
+ TE_TURB,TE_MG_TYP,TE_N_BAS1,TE_N_BAS2}},
+
+ {NULL, "Stucci", ID_TE, 0, 5,
+ {TE_NSIZE,TE_NTYPE,TE_TURB,
+ TE_MG_TYP,TE_N_BAS1}},
+
+ {NULL, "Wood", ID_TE, 0, 6,
+ {TE_NSIZE,TE_NTYPE,TE_TURB,
+ TE_MG_TYP,TE_N_BAS1,TE_N_BAS2}},
+
+ {NULL, "Magic", ID_TE, 0, 2, {TE_NDEPTH,TE_TURB}},
+
+ {NULL, "Blend", ID_TE, 0, 1, {TE_MG_TYP}},
+
+ {NULL, "Musgrave", ID_TE, 0, 6,
+ {TE_MG_TYP,TE_MGH,TE_MG_LAC,
+ TE_MG_OCT,TE_MG_OFF,TE_MG_GAIN}},
+
+ {NULL, "Voronoi", ID_TE, 0, 9,
+ {TE_VNW1,TE_VNW2,TE_VNW3,TE_VNW4,
+ TE_VNMEXP,TE_VN_DISTM,TE_VN_COLT,
+ TE_ISCA,TE_NSIZE}},
+
+ {NULL, "Distorted Noise", ID_TE, 0, 4,
+ {TE_MG_OCT,TE_MG_OFF,TE_MG_GAIN,TE_DISTA}},
+
+ {NULL, "Color Filter", ID_TE, 0, 5,
+ {TE_COL_R,TE_COL_G,TE_COL_B,TE_BRIGHT,TE_CONTRA}},
+
+ {NULL, "%l", 0, -1, 0, {0}}, // separator
+
+ {NULL, "Available", ID_TE, -2, 0, {0}}
+};
+
+/* Object Buttons KeyingSets ------ */
+
+/* check if include particles entry */
+static short incl_buts_ob (bKeyingSet *ks, const char mode[])
+{
+ //Object *ob= OBACT; // xxx
+ Object *ob= NULL;
+ /* only if object is mesh type */
+
+ if(ob==NULL) return 0;
+ return (ob->type == OB_MESH);
+}
+
+/* array for texture keyingset defines */
+bKeyingSet defks_buts_object[] =
+{
+ /* include_cb, name, blocktype, flag, chan_num, adrcodes */
+ {incl_buts_ob, "Surface Damping", ID_OB, 0, 1, {OB_PD_SDAMP}},
+ {incl_buts_ob, "Random Damping", ID_OB, 0, 1, {OB_PD_RDAMP}},
+ {incl_buts_ob, "Permeability", ID_OB, 0, 1, {OB_PD_PERM}},
+
+ {NULL, "%l", 0, -1, 0, {0}}, // separator
+
+ {NULL, "Force Strength", ID_OB, 0, 1, {OB_PD_FSTR}},
+ {NULL, "Force Falloff", ID_OB, 0, 1, {OB_PD_FFALL}},
+
+ {NULL, "%l", 0, -1, 0, {0}}, // separator
+
+ {NULL, "Available", ID_OB, -2, 0, {0}} // this will include ob-transforms too!
+};
+
+/* Camera Buttons KeyingSets ------ */
+
+/* check if include internal-renderer entry */
+static short incl_buts_cam1 (bKeyingSet *ks, const char mode[])
+{
+ Scene *scene= NULL; // FIXME this will cause a crash, but we need an extra arg first!
+ /* only if renderer is internal renderer */
+ return (scene->r.renderer==R_INTERN);
+}
+
+/* check if include external-renderer entry */
+static short incl_buts_cam2 (bKeyingSet *ks, const char mode[])
+{
+ Scene *scene= NULL; // FIXME this will cause a crash, but we need an extra arg first!
+ /* only if renderer is internal renderer */
+ return (scene->r.renderer!=R_INTERN);
+}
+
+/* array for camera keyingset defines */
+bKeyingSet defks_buts_cam[] =
+{
+ /* include_cb, name, blocktype, flag, chan_num, adrcodes */
+ {NULL, "Lens", ID_CA, 0, 1, {CAM_LENS}},
+ {NULL, "Clipping", ID_CA, 0, 2, {CAM_STA,CAM_END}},
+ {NULL, "Focal Distance", ID_CA, 0, 1, {CAM_YF_FDIST}},
+
+ {NULL, "%l", 0, -1, 0, {0}}, // separator
+
+
+ {incl_buts_cam2, "Aperture", ID_CA, 0, 1, {CAM_YF_APERT}},
+ {incl_buts_cam1, "Viewplane Shift", ID_CA, 0, 2, {CAM_SHIFT_X,CAM_SHIFT_Y}},
+
+ {NULL, "%l", 0, -1, 0, {0}}, // separator
+
+ {NULL, "Available", ID_CA, -2, 0, {0}}
+};
+
+/* --- */
+
+/* Keying Context Defines - Must keep in sync with enumeration (eKS_Contexts) */
+bKeyingContext ks_contexts[] =
+{
+ KSC_TEMPLATE(v3d_object),
+ KSC_TEMPLATE(v3d_pchan),
+
+ KSC_TEMPLATE(buts_shading_mat),
+ KSC_TEMPLATE(buts_shading_wo),
+ KSC_TEMPLATE(buts_shading_la),
+ KSC_TEMPLATE(buts_shading_tex),
+
+ KSC_TEMPLATE(buts_object),
+ KSC_TEMPLATE(buts_cam)
+};
+
+/* Keying Context Enumeration - Must keep in sync with definitions*/
+typedef enum eKS_Contexts {
+ KSC_V3D_OBJECT = 0,
+ KSC_V3D_PCHAN,
+
+ KSC_BUTS_MAT,
+ KSC_BUTS_WO,
+ KSC_BUTS_LA,
+ KSC_BUTS_TEX,
+
+ KSC_BUTS_OB,
+ KSC_BUTS_CAM,
+
+ /* make sure this last one remains untouched! */
+ KSC_TOT_TYPES
+} eKS_Contexts;
+
+
+#endif // XXX old keyingsets code based on adrcodes... to be restored in due course
+
+/* Macros for Declaring KeyingSets ------------------- */
+
+/* A note about this system for declaring built-in Keying Sets:
+ * One may ask, "What is the purpose of all of these macros and static arrays?" and
+ * "Why not call the KeyingSets API defined in BKE_animsys.h?". The answer is two-fold.
+ *
+ * 1) Firstly, we use static arrays of struct definitions instead of function calls, as
+ * it reduces the start-up overhead and allocated-memory footprint of Blender. If we called
+ * the KeyingSets API to build these sets, the overhead of checking for unique names, allocating
+ * memory for each and every path and KeyingSet, scattered around in RAM, all of which would increase
+ * the startup time (which is totally unacceptable) and could lead to fragmentation+slower access times.
+ * 2) Since we aren't using function calls, we need a nice way of defining these KeyingSets in a way which
+ * is easily readable and less prone to breakage from changes to the underlying struct definitions. Further,
+ * adding additional entries SHOULD NOT require custom code to be written to access these new entries/sets.
+ * Therefore, here we have a system with nice, human-readable statements via macros, and static arrays which
+ * are linked together using more special macros + struct definitions, allowing for such a generic + simple
+ * initialisation function (init_builtin_keyingsets()) compared with that of something like the Nodes system.
+ *
+ * -- Joshua Leung, April 2009
+ */
+
+/* Struct type for declaring builtin KeyingSets in as entries in static arrays*/
+typedef struct bBuiltinKeyingSet {
+ KeyingSet ks; /* the KeyingSet to build */
+ int tot; /* the total number of paths defined */
+ KS_Path paths[64]; /* the paths for the KeyingSet to use */
+} bBuiltinKeyingSet;
+
+ /* WARNING: the following macros must be kept in sync with the
+ * struct definitions in DNA_anim_types.h!
+ */
+
+/* macro for defining a builtin KeyingSet */
+#define BI_KS_DEFINE_BEGIN(name, keyingflag) \
+ {{NULL, NULL, {NULL, NULL}, name, KEYINGSET_BUILTIN, keyingflag},
+
+/* macro to finish defining a builtin KeyingSet */
+#define BI_KS_DEFINE_END \
+ }
+
+/* macro to start defining paths for a builtin KeyingSet */
+#define BI_KS_PATHS_BEGIN(tot) \
+ tot, {
+
+/* macro to finish defining paths for a builtin KeyingSet */
+#define BI_KS_PATHS_END \
+ }
+
+/* macro for defining a builtin KeyingSet's path */
+#define BI_KSP_DEFINE(id_type, templates, prop_path, array_index, flag, groupflag) \
+ {NULL, NULL, NULL, "", id_type, templates, prop_path, array_index, flag, groupflag}
+
+/* macro for defining a builtin KeyingSet with no paths (use in place of BI_KS_PAHTS_BEGIN/END block) */
+#define BI_KS_PATHS_NONE \
+ 0, {0}
+
+/* ---- */
+
+/* Struct type for finding all the arrays of builtin KeyingSets */
+typedef struct bBuiltinKSContext {
+ bBuiltinKeyingSet *bks; /* array of KeyingSet definitions */
+ int tot; /* number of KeyingSets in this array */
+} bBuiltinKSContext;
+
+/* macro for defining builtin KeyingSet sets
+ * NOTE: all the arrays of sets must follow this naming convention!
+ */
+#define BKSC_TEMPLATE(ctx_name) {&def_builtin_keyingsets_##ctx_name[0], sizeof(def_builtin_keyingsets_##ctx_name)/sizeof(bBuiltinKeyingSet)}
+
+
+/* 3D-View Builtin KeyingSets ------------------------ */
+
+static bBuiltinKeyingSet def_builtin_keyingsets_v3d[] =
+{
+ /* Simple Keying Sets ************************************* */
+ /* Keying Set - "Location" ---------- */
+ BI_KS_DEFINE_BEGIN("Location", 0)
+ BI_KS_PATHS_BEGIN(1)
+ BI_KSP_DEFINE(ID_OB, KSP_TEMPLATE_OBJECT|KSP_TEMPLATE_PCHAN, "location", 0, KSP_FLAG_WHOLE_ARRAY, KSP_GROUP_TEMPLATE_ITEM)
+ BI_KS_PATHS_END
+ BI_KS_DEFINE_END,
+
+ /* Keying Set - "Rotation" ---------- */
+ BI_KS_DEFINE_BEGIN("Rotation", 0)
+ BI_KS_PATHS_BEGIN(1)
+ BI_KSP_DEFINE(ID_OB, KSP_TEMPLATE_OBJECT|KSP_TEMPLATE_PCHAN, "rotation", 0, KSP_FLAG_WHOLE_ARRAY, KSP_GROUP_TEMPLATE_ITEM)
+ BI_KS_PATHS_END
+ BI_KS_DEFINE_END,
+
+ /* Keying Set - "Scaling" ---------- */
+ BI_KS_DEFINE_BEGIN("Scaling", 0)
+ BI_KS_PATHS_BEGIN(1)
+ BI_KSP_DEFINE(ID_OB, KSP_TEMPLATE_OBJECT|KSP_TEMPLATE_PCHAN, "scale", 0, KSP_FLAG_WHOLE_ARRAY, KSP_GROUP_TEMPLATE_ITEM)
+ BI_KS_PATHS_END
+ BI_KS_DEFINE_END,
+
+ /* Compound Keying Sets *********************************** */
+ /* Keying Set - "LocRot" ---------- */
+ BI_KS_DEFINE_BEGIN("LocRot", 0)
+ BI_KS_PATHS_BEGIN(2)
+ BI_KSP_DEFINE(ID_OB, KSP_TEMPLATE_OBJECT|KSP_TEMPLATE_PCHAN, "location", 0, KSP_FLAG_WHOLE_ARRAY, KSP_GROUP_TEMPLATE_ITEM),
+ BI_KSP_DEFINE(ID_OB, KSP_TEMPLATE_OBJECT|KSP_TEMPLATE_PCHAN, "rotation", 0, KSP_FLAG_WHOLE_ARRAY, KSP_GROUP_TEMPLATE_ITEM)
+ BI_KS_PATHS_END
+ BI_KS_DEFINE_END,
+
+ /* Keying Set - "LocRotScale" ---------- */
+ BI_KS_DEFINE_BEGIN("LocRotScale", 0)
+ BI_KS_PATHS_BEGIN(3)
+ BI_KSP_DEFINE(ID_OB, KSP_TEMPLATE_OBJECT|KSP_TEMPLATE_PCHAN, "location", 0, KSP_FLAG_WHOLE_ARRAY, KSP_GROUP_TEMPLATE_ITEM),
+ BI_KSP_DEFINE(ID_OB, KSP_TEMPLATE_OBJECT|KSP_TEMPLATE_PCHAN, "rotation", 0, KSP_FLAG_WHOLE_ARRAY, KSP_GROUP_TEMPLATE_ITEM),
+ BI_KSP_DEFINE(ID_OB, KSP_TEMPLATE_OBJECT|KSP_TEMPLATE_PCHAN, "scale", 0, KSP_FLAG_WHOLE_ARRAY, KSP_GROUP_TEMPLATE_ITEM)
+ BI_KS_PATHS_END
+ BI_KS_DEFINE_END,
+
+ /* Keying Sets with Keying Flags ************************* */
+ /* Keying Set - "VisualLoc" ---------- */
+ BI_KS_DEFINE_BEGIN("VisualLoc", 0)
+ BI_KS_PATHS_BEGIN(1)
+ BI_KSP_DEFINE(ID_OB, KSP_TEMPLATE_OBJECT|KSP_TEMPLATE_PCHAN, "location", INSERTKEY_MATRIX, KSP_FLAG_WHOLE_ARRAY, KSP_GROUP_TEMPLATE_ITEM)
+ BI_KS_PATHS_END
+ BI_KS_DEFINE_END,
+
+ /* Keying Set - "Rotation" ---------- */
+ BI_KS_DEFINE_BEGIN("VisualRot", 0)
+ BI_KS_PATHS_BEGIN(1)
+ BI_KSP_DEFINE(ID_OB, KSP_TEMPLATE_OBJECT|KSP_TEMPLATE_PCHAN, "rotation", INSERTKEY_MATRIX, KSP_FLAG_WHOLE_ARRAY, KSP_GROUP_TEMPLATE_ITEM)
+ BI_KS_PATHS_END
+ BI_KS_DEFINE_END,
+
+ /* Keying Set - "VisualLocRot" ---------- */
+ BI_KS_DEFINE_BEGIN("VisualLocRot", 0)
+ BI_KS_PATHS_BEGIN(2)
+ BI_KSP_DEFINE(ID_OB, KSP_TEMPLATE_OBJECT|KSP_TEMPLATE_PCHAN, "location", INSERTKEY_MATRIX, KSP_FLAG_WHOLE_ARRAY, KSP_GROUP_TEMPLATE_ITEM),
+ BI_KSP_DEFINE(ID_OB, KSP_TEMPLATE_OBJECT|KSP_TEMPLATE_PCHAN, "rotation", INSERTKEY_MATRIX, KSP_FLAG_WHOLE_ARRAY, KSP_GROUP_TEMPLATE_ITEM)
+ BI_KS_PATHS_END
+ BI_KS_DEFINE_END
+};
+
+/* All Builtin KeyingSets ------------------------ */
+
+/* total number of builtin KeyingSet contexts */
+#define MAX_BKSC_TYPES 1
+
+/* array containing all the available builtin KeyingSets definition sets
+ * - size of this is MAX_BKSC_TYPES+1 so that we don't smash the stack
+ */
+static bBuiltinKSContext def_builtin_keyingsets[MAX_BKSC_TYPES+1] =
+{
+ BKSC_TEMPLATE(v3d)
+ /* add more contexts above this line... */
+};
+
+
+/* ListBase of these KeyingSets chained up ready for usage
+ * NOTE: this is exported to keyframing.c for use...
+ */
+ListBase builtin_keyingsets = {NULL, NULL};
+
+/* Utility API ------------------------ */
+
+/* Link up all of the builtin Keying Sets when starting up Blender
+ * This is called from WM_init() in wm_init_exit.c
+ */
+void init_builtin_keyingsets (void)
+{
+ bBuiltinKSContext *bksc;
+ bBuiltinKeyingSet *bks;
+ int bksc_i, bks_i;
+
+ /* loop over all the sets of KeyingSets, setting them up, and chaining them to the builtins list */
+ for (bksc_i= 0, bksc= &def_builtin_keyingsets[0]; bksc_i < MAX_BKSC_TYPES; bksc_i++, bksc++)
+ {
+ /* for each set definitions for a builtin KeyingSet, chain the paths to that KeyingSet and add */
+ for (bks_i= 0, bks= bksc->bks; bks_i < bksc->tot; bks_i++, bks++)
+ {
+ KeyingSet *ks= &bks->ks;
+ KS_Path *ksp;
+ int pIndex;
+
+ /* loop over paths, linking them to the KeyingSet and each other */
+ for (pIndex= 0, ksp= &bks->paths[0]; pIndex < bks->tot; pIndex++, ksp++)
+ BLI_addtail(&ks->paths, ksp);
+
+ /* add KeyingSet to builtin sets list */
+ BLI_addtail(&builtin_keyingsets, ks);
+ }
+ }
+}
+
+
+/* Get the first builtin KeyingSet with the given name, which occurs after the given one (or start of list if none given) */
+KeyingSet *ANIM_builtin_keyingset_get_named (KeyingSet *prevKS, char name[])
+{
+ KeyingSet *ks, *first=NULL;
+
+ /* sanity checks - any name to check? */
+ if (name[0] == 0)
+ return NULL;
+
+ /* get first KeyingSet to use */
+ if (prevKS && prevKS->next)
+ first= prevKS->next;
+ else
+ first= builtin_keyingsets.first;
+
+ /* loop over KeyingSets checking names */
+ for (ks= first; ks; ks= ks->next) {
+ if (strcmp(name, ks->name) == 0)
+ return ks;
+ }
+
+ /* no matches found */
+ return NULL;
+}
+
+/* ******************************************* */
+/* KEYFRAME MODIFICATION */
+
+/* KeyingSet Menu Helpers ------------ */
+
+/* Extract the maximum set of requirements from the KeyingSet */
+static int keyingset_relative_get_templates (KeyingSet *ks)
+{
+ KS_Path *ksp;
+ int templates= 0;
+
+ /* loop over the paths (could be slow to do for a number of KeyingSets)? */
+ for (ksp= ks->paths.first; ksp; ksp= ksp->next) {
+ /* add the destination's templates to the set of templates required for the set */
+ templates |= ksp->templates;
+ }
+
+ return templates;
+}
+
+/* Check if context data is suitable for the given absolute Keying Set */
+short keyingset_context_ok_poll (bContext *C, KeyingSet *ks)
+{
+ ScrArea *sa= CTX_wm_area(C);
+
+ /* data retrieved from context depends on active editor */
+ if (sa == NULL) return 0;
+
+ switch (sa->spacetype) {
+ case SPACE_VIEW3D:
+ {
+ Object *obact= CTX_data_active_object(C);
+
+ /* if in posemode, check if 'pose-channels' requested for in KeyingSet */
+ if ((obact && obact->pose) && (obact->flag & OB_POSEMODE)) {
+ /* check for posechannels */
+
+ }
+ else {
+ /* check for selected object */
+
+ }
+ }
+ break;
+ }
+
+
+ return 1;
+}
+
+/* KeyingSet Context Operations ------------ */
+
+/* Get list of data-sources from context (in 3D-View) for inserting keyframes using the given relative Keying Set */
+static short modifykey_get_context_v3d_data (bContext *C, ListBase *dsources, KeyingSet *ks)
+{
+ bCommonKeySrc *cks;
+ Object *obact= CTX_data_active_object(C);
+ int templates;
+ short ok= 0;
+
+ /* get the templates in use in this KeyingSet which we should supply data for */
+ templates = keyingset_relative_get_templates(ks);
+
+ /* check if the active object is in PoseMode (i.e. only deal with bones) */
+ // TODO: check with the templates to see what we really need to store
+ if ((obact && obact->pose) && (obact->flag & OB_POSEMODE)) {
+ /* Pose Mode: Selected bones */
+#if 0
+ //set_pose_keys(ob); /* sets pchan->flag to POSE_KEY if bone selected, and clears if not */
+
+ /* loop through posechannels */
+ //for (pchan=ob->pose->chanbase.first; pchan; pchan=pchan->next) {
+ // if (pchan->flag & POSE_KEY) {
+ // }
+ //}
+#endif
+
+ CTX_DATA_BEGIN(C, bPoseChannel*, pchan, selected_pchans)
+ {
+ /* add a new keying-source */
+ cks= MEM_callocN(sizeof(bCommonKeySrc), "bCommonKeySrc");
+ BLI_addtail(dsources, cks);
+
+ /* set necessary info */
+ cks->id= &obact->id;
+ cks->pchan= pchan;
+
+ if (templates & KSP_TEMPLATE_CONSTRAINT)
+ cks->con= constraints_get_active(&pchan->constraints);
+
+ ok= 1;
+ }
+ CTX_DATA_END;
+ }
+ else {
+ /* Object Mode: Selected objects */
+ CTX_DATA_BEGIN(C, Base*, base, selected_bases)
+ {
+ Object *ob= base->object;
+
+ /* add a new keying-source */
+ cks= MEM_callocN(sizeof(bCommonKeySrc), "bCommonKeySrc");
+ BLI_addtail(dsources, cks);
+
+ /* set necessary info */
+ cks->id= &ob->id;
+
+ if (templates & KSP_TEMPLATE_CONSTRAINT)
+ cks->con= constraints_get_active(&ob->constraints);
+
+ ok= 1;
+ }
+ CTX_DATA_END;
+ }
+
+ /* return whether any data was extracted */
+ return ok;
+}
+
+/* Get list of data-sources from context for inserting keyframes using the given relative Keying Set */
+short modifykey_get_context_data (bContext *C, ListBase *dsources, KeyingSet *ks)
+{
+ ScrArea *sa= CTX_wm_area(C);
+
+ /* for now, the active area is used to determine what set of contexts apply */
+ if (sa == NULL)
+ return 0;
+
+ switch (sa->spacetype) {
+ case SPACE_VIEW3D: /* 3D-View: Selected Objects or Bones */
+ return modifykey_get_context_v3d_data(C, dsources, ks);
+ }
+
+ /* nothing happened */
+ return 0;
+}
+
+/* KeyingSet Operations (Insert/Delete Keyframes) ------------ */
+
+/* Given a KeyingSet and context info (if required), modify keyframes for the channels specified
+ * by the KeyingSet. This takes into account many of the different combinations of using KeyingSets.
+ * Returns the number of channels that keyframes were added to
+ */
+int modify_keyframes (bContext *C, ListBase *dsources, bAction *act, KeyingSet *ks, short mode, float cfra)
+{
+ KS_Path *ksp;
+ int kflag=0, success= 0;
+ char *groupname= NULL;
+
+ /* get flags to use */
+ if (mode == MODIFYKEY_MODE_INSERT) {
+ /* use KeyingSet's flags as base */
+ kflag= ks->keyingflag;
+
+ /* suppliment with info from the context */
+ if (IS_AUTOKEY_FLAG(AUTOMATKEY)) kflag |= INSERTKEY_MATRIX;
+ if (IS_AUTOKEY_FLAG(INSERTNEEDED)) kflag |= INSERTKEY_NEEDED;
+ // if (IS_AUTOKEY_MODE(EDITKEYS)) flag |= INSERTKEY_REPLACE;
+ }
+ else if (mode == MODIFYKEY_MODE_DELETE)
+ kflag= 0;
+
+ /* check if the KeyingSet is absolute or not (i.e. does it requires sources info) */
+ if (ks->flag & KEYINGSET_ABSOLUTE) {
+ /* Absolute KeyingSets are simpler to use, as all the destination info has already been
+ * provided by the user, and is stored, ready to use, in the KeyingSet paths.
+ */
+ for (ksp= ks->paths.first; ksp; ksp= ksp->next) {
+ int arraylen, i;
+
+ /* get pointer to name of group to add channels to */
+ if (ksp->groupmode == KSP_GROUP_NONE)
+ groupname= NULL;
+ else if (ksp->groupmode == KSP_GROUP_KSNAME)
+ groupname= ks->name;
+ else
+ groupname= ksp->group;
+
+ /* init arraylen and i - arraylen should be greater than i so that
+ * normal non-array entries get keyframed correctly
+ */
+ i= ksp->array_index;
+ arraylen= i+1;
+
+ /* get length of array if whole array option is enabled */
+ if (ksp->flag & KSP_FLAG_WHOLE_ARRAY) {
+ PointerRNA id_ptr, ptr;
+ PropertyRNA *prop;
+
+ RNA_id_pointer_create(ksp->id, &id_ptr);
+ if (RNA_path_resolve(&id_ptr, ksp->rna_path, &ptr, &prop) && prop)
+ arraylen= RNA_property_array_length(prop);
+ }
+
+ /* for each possible index, perform operation
+ * - assume that arraylen is greater than index
+ */
+ for (; i < arraylen; i++) {
+ /* action to take depends on mode */
+ if (mode == MODIFYKEY_MODE_INSERT)
+ success+= insert_keyframe(ksp->id, act, groupname, ksp->rna_path, i, cfra, kflag);
+ else if (mode == MODIFYKEY_MODE_DELETE)
+ success+= delete_keyframe(ksp->id, act, groupname, ksp->rna_path, i, cfra, kflag);
+ }
+
+ /* send notifiers and set recalc-flags */
+ // TODO: hopefully this doesn't result in execessive flooding of the notifier stack
+ if (C && ksp->id) {
+ switch (GS(ksp->id->name)) {
+ case ID_OB: /* Object (or Object-Related) Keyframes */
+ {
+ Object *ob= (Object *)ksp->id;
+
+ ob->recalc |= OB_RECALC;
+ WM_event_add_notifier(C, NC_OBJECT|ND_KEYS, ksp->id);
+ }
+ break;
+ case ID_MA: /* Material Keyframes */
+ WM_event_add_notifier(C, NC_MATERIAL|ND_KEYS, ksp->id);
+ break;
+ }
+ }
+ }
+ }
+ else if (dsources && dsources->first) {
+ /* for each one of the 'sources', resolve the template markers and expand arrays, then insert keyframes */
+ bCommonKeySrc *cks;
+
+ /* for each 'source' for keyframe data, resolve each of the paths from the KeyingSet */
+ for (cks= dsources->first; cks; cks= cks->next) {
+ /* for each path in KeyingSet, construct a path using the templates */
+ for (ksp= ks->paths.first; ksp; ksp= ksp->next) {
+ DynStr *pathds= BLI_dynstr_new();
+ char *path = NULL;
+ int arraylen, i;
+
+ /* set initial group name */
+ groupname= (cks->id) ? cks->id->name+2 : NULL;
+
+ /* construct the path */
+ // FIXME: this currently only works with a few hardcoded cases
+ if ((ksp->templates & KSP_TEMPLATE_PCHAN) && (cks->pchan)) {
+ /* add basic pose-channel path access */
+ BLI_dynstr_append(pathds, "pose.pose_channels[\"");
+ BLI_dynstr_append(pathds, cks->pchan->name);
+ BLI_dynstr_append(pathds, "\"]");
+
+ /* override default group name */
+ groupname= cks->pchan->name;
+ }
+ if ((ksp->templates & KSP_TEMPLATE_CONSTRAINT) && (cks->con)) {
+ /* add basic constraint path access */
+ BLI_dynstr_append(pathds, "constraints[\"");
+ BLI_dynstr_append(pathds, cks->con->name);
+ BLI_dynstr_append(pathds, "\"]");
+
+ /* override default group name */
+ groupname= cks->con->name;
+ }
+ {
+ /* add property stored in KeyingSet Path */
+ if (BLI_dynstr_get_len(pathds))
+ BLI_dynstr_append(pathds, ".");
+ BLI_dynstr_append(pathds, ksp->rna_path);
+
+ /* convert to C-string */
+ path= BLI_dynstr_get_cstring(pathds);
+ BLI_dynstr_free(pathds);
+ }
+
+ /* get pointer to name of group to add channels to
+ * - KSP_GROUP_TEMPLATE_ITEM is handled above while constructing the paths
+ */
+ if (ksp->groupmode == KSP_GROUP_NONE)
+ groupname= NULL;
+ else if (ksp->groupmode == KSP_GROUP_KSNAME)
+ groupname= ks->name;
+ else if (ksp->groupmode == KSP_GROUP_NAMED)
+ groupname= ksp->group;
+
+ /* init arraylen and i - arraylen should be greater than i so that
+ * normal non-array entries get keyframed correctly
+ */
+ i= ksp->array_index;
+ arraylen= i+1;
+
+ /* get length of array if whole array option is enabled */
+ if (ksp->flag & KSP_FLAG_WHOLE_ARRAY) {
+ PointerRNA id_ptr, ptr;
+ PropertyRNA *prop;
+
+ RNA_id_pointer_create(cks->id, &id_ptr);
+ if (RNA_path_resolve(&id_ptr, path, &ptr, &prop) && prop)
+ arraylen= RNA_property_array_length(prop);
+ }
+
+ /* for each possible index, perform operation
+ * - assume that arraylen is greater than index
+ */
+ for (; i < arraylen; i++) {
+ /* action to take depends on mode */
+ if (mode == MODIFYKEY_MODE_INSERT)
+ success+= insert_keyframe(cks->id, act, groupname, path, i, cfra, kflag);
+ else if (mode == MODIFYKEY_MODE_DELETE)
+ success+= delete_keyframe(cks->id, act, groupname, path, i, cfra, kflag);
+ }
+
+ /* free the path */
+ MEM_freeN(path);
+ }
+
+ /* send notifiers and set recalc-flags */
+ // TODO: hopefully this doesn't result in execessive flooding of the notifier stack
+ if (C && cks->id) {
+ switch (GS(cks->id->name)) {
+ case ID_OB: /* Object (or Object-Related) Keyframes */
+ {
+ Object *ob= (Object *)cks->id;
+
+ ob->recalc |= OB_RECALC;
+ WM_event_add_notifier(C, NC_OBJECT|ND_KEYS, cks->id);
+ }
+ break;
+ case ID_MA: /* Material Keyframes */
+ WM_event_add_notifier(C, NC_MATERIAL|ND_KEYS, cks->id);
+ break;
+ }
+ }
+ }
+ }
+
+ /* return the number of channels successfully affected */
+ return success;
+}
+
+/* ************************************************** */
diff --git a/source/blender/editors/armature/BIF_generate.h b/source/blender/editors/armature/BIF_generate.h
index bc655a4cdff..bde079c45fb 100644
--- a/source/blender/editors/armature/BIF_generate.h
+++ b/source/blender/editors/armature/BIF_generate.h
@@ -1,5 +1,5 @@
/**
- * $Id: $
+ * $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
*
diff --git a/source/blender/editors/armature/BIF_retarget.h b/source/blender/editors/armature/BIF_retarget.h
index 049ddf5baa5..c39f410424a 100644
--- a/source/blender/editors/armature/BIF_retarget.h
+++ b/source/blender/editors/armature/BIF_retarget.h
@@ -1,5 +1,5 @@
/**
- * $Id: $
+ * $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
*
diff --git a/source/blender/editors/armature/Makefile b/source/blender/editors/armature/Makefile
index f8cbb5ab37e..6c7ce81a8a1 100644
--- a/source/blender/editors/armature/Makefile
+++ b/source/blender/editors/armature/Makefile
@@ -38,7 +38,6 @@ CFLAGS += $(LEVEL_1_C_WARNINGS)
CPPFLAGS += -I$(NAN_GLEW)/include
CPPFLAGS += -I$(OPENGL_HEADERS)
-CPPFLAGS += -I$(NAN_BMFONT)/include
CPPFLAGS += -I$(NAN_OPENNL)/include
# not very neat....
diff --git a/source/blender/editors/armature/SConscript b/source/blender/editors/armature/SConscript
index e4e42a27b36..f96d25b0fe0 100644
--- a/source/blender/editors/armature/SConscript
+++ b/source/blender/editors/armature/SConscript
@@ -5,7 +5,7 @@ sources = env.Glob('*.c')
incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../imbuf'
incs += ' ../../windowmanager #/intern/guardedalloc #/extern/glew/include'
-incs += ' ../../render/extern/include #/intern/guardedalloc #intern/bmfont'
+incs += ' ../../render/extern/include #/intern/guardedalloc'
incs += ' ../../gpu ../../makesrna #/intern/opennl/extern'
env.BlenderLib ( 'bf_editors_armature', sources, Split(incs), [], libtype=['core'], priority=[44] )
diff --git a/source/blender/editors/armature/armature_intern.h b/source/blender/editors/armature/armature_intern.h
index 8142189b61b..646c75f50bf 100644
--- a/source/blender/editors/armature/armature_intern.h
+++ b/source/blender/editors/armature/armature_intern.h
@@ -33,7 +33,7 @@ struct wmOperatorType;
/* editarmature.c operators */
void ARMATURE_OT_bone_primitive_add(struct wmOperatorType *ot);
-void ARMATURE_OT_align_bones(struct wmOperatorType *ot);
+void ARMATURE_OT_bones_align(struct wmOperatorType *ot);
void ARMATURE_OT_calculate_roll(struct wmOperatorType *ot);
void ARMATURE_OT_switch_direction(struct wmOperatorType *ot);
void ARMATURE_OT_subdivs(struct wmOperatorType *ot);
@@ -69,14 +69,20 @@ void SKETCH_OT_finish_stroke(struct wmOperatorType *ot);
void SKETCH_OT_cancel_stroke(struct wmOperatorType *ot);
void SKETCH_OT_select(struct wmOperatorType *ot);
+/* PoseLib */
+void POSELIB_OT_pose_add(struct wmOperatorType *ot);
+void POSELIB_OT_pose_remove(struct wmOperatorType *ot);
+void POSELIB_OT_pose_rename(struct wmOperatorType *ot);
+void POSELIB_OT_browse_interactive(struct wmOperatorType *ot);
+
/* editarmature.c */
struct bArmature;
struct EditBone;
struct ListBase;
void make_boneList(struct ListBase *edbo, struct ListBase *bones, struct EditBone *parent);
-
struct EditBone *addEditBone(struct bArmature *arm, char *name);
+void BIF_sk_selectStroke(struct bContext *C, short mval[2], short extend);
/* duplicate method */
void preEditBoneDuplicate(struct ListBase *editbones);
diff --git a/source/blender/editors/armature/armature_ops.c b/source/blender/editors/armature/armature_ops.c
index bc171acfac7..5c31883834c 100644
--- a/source/blender/editors/armature/armature_ops.c
+++ b/source/blender/editors/armature/armature_ops.c
@@ -110,7 +110,7 @@ void ED_operatortypes_armature(void)
/* EDIT ARMATURE */
WM_operatortype_append(ARMATURE_OT_bone_primitive_add);
- WM_operatortype_append(ARMATURE_OT_align_bones);
+ WM_operatortype_append(ARMATURE_OT_bones_align);
WM_operatortype_append(ARMATURE_OT_calculate_roll);
WM_operatortype_append(ARMATURE_OT_switch_direction);
WM_operatortype_append(ARMATURE_OT_subdivs);
@@ -154,6 +154,14 @@ void ED_operatortypes_armature(void)
WM_operatortype_append(POSE_OT_select_hierarchy);
WM_operatortype_append(POSE_OT_select_linked);
+ /* POSELIB */
+ WM_operatortype_append(POSELIB_OT_browse_interactive);
+
+ WM_operatortype_append(POSELIB_OT_pose_add);
+ WM_operatortype_append(POSELIB_OT_pose_remove);
+ WM_operatortype_append(POSELIB_OT_pose_rename);
+
+ /* TESTS */
WM_operatortype_append(ARMATURE_OT_test); // XXX temp test for context iterators... to be removed
}
@@ -167,7 +175,7 @@ void ED_keymap_armature(wmWindowManager *wm)
/* only set in editmode armature, by space_view3d listener */
// WM_keymap_add_item(keymap, "ARMATURE_OT_hide", HKEY, KM_PRESS, 0, 0);
- WM_keymap_add_item(keymap, "ARMATURE_OT_align_bones", AKEY, KM_PRESS, KM_CTRL|KM_ALT, 0);
+ WM_keymap_add_item(keymap, "ARMATURE_OT_bones_align", AKEY, KM_PRESS, KM_CTRL|KM_ALT, 0);
WM_keymap_add_item(keymap, "ARMATURE_OT_calculate_roll", NKEY, KM_PRESS, KM_CTRL, 0);
WM_keymap_add_item(keymap, "ARMATURE_OT_switch_direction", FKEY, KM_PRESS, KM_ALT, 0);
@@ -185,28 +193,28 @@ void ED_keymap_armature(wmWindowManager *wm)
WM_keymap_add_item(keymap, "ARMATURE_OT_test", TKEY, KM_PRESS, 0, 0); // XXX temp test for context iterators... to be removed
kmi= WM_keymap_add_item(keymap, "ARMATURE_OT_select_hierarchy", LEFTBRACKETKEY, KM_PRESS, 0, 0);
- RNA_enum_set(kmi->ptr, "direction", BONE_SELECT_PARENT);
- RNA_boolean_set(kmi->ptr, "extend", 0);
+ RNA_enum_set(kmi->ptr, "direction", BONE_SELECT_PARENT);
+ RNA_boolean_set(kmi->ptr, "extend", 0);
kmi= WM_keymap_add_item(keymap, "ARMATURE_OT_select_hierarchy", LEFTBRACKETKEY, KM_PRESS, KM_SHIFT, 0);
- RNA_enum_set(kmi->ptr, "direction", BONE_SELECT_PARENT);
- RNA_boolean_set(kmi->ptr, "extend", 1);
+ RNA_enum_set(kmi->ptr, "direction", BONE_SELECT_PARENT);
+ RNA_boolean_set(kmi->ptr, "extend", 1);
kmi= WM_keymap_add_item(keymap, "ARMATURE_OT_select_hierarchy", RIGHTBRACKETKEY, KM_PRESS, 0, 0);
- RNA_enum_set(kmi->ptr, "direction", BONE_SELECT_CHILD);
- RNA_boolean_set(kmi->ptr, "extend", 0);
+ RNA_enum_set(kmi->ptr, "direction", BONE_SELECT_CHILD);
+ RNA_boolean_set(kmi->ptr, "extend", 0);
kmi= WM_keymap_add_item(keymap, "ARMATURE_OT_select_hierarchy", RIGHTBRACKETKEY, KM_PRESS, KM_SHIFT, 0);
- RNA_enum_set(kmi->ptr, "direction", BONE_SELECT_CHILD);
- RNA_boolean_set(kmi->ptr, "extend", 1);
+ RNA_enum_set(kmi->ptr, "direction", BONE_SELECT_CHILD);
+ RNA_boolean_set(kmi->ptr, "extend", 1);
WM_keymap_add_item(keymap, "ARMATURE_OT_select_linked", LKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "ARMATURE_OT_delete", XKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "ARMATURE_OT_duplicate_selected", DKEY, KM_PRESS, KM_SHIFT, 0);
WM_keymap_add_item(keymap, "ARMATURE_OT_extrude", EKEY, KM_PRESS, 0, 0);
kmi= WM_keymap_add_item(keymap, "ARMATURE_OT_extrude", EKEY, KM_PRESS, KM_SHIFT, 0);
- RNA_boolean_set(kmi->ptr, "forked", 1);
+ RNA_boolean_set(kmi->ptr, "forked", 1);
WM_keymap_add_item(keymap, "ARMATURE_OT_click_extrude", LEFTMOUSE, KM_PRESS, KM_CTRL, 0);
- /* Armature ------------------------ */
+ /* Armature -> Etch-A-Ton ------------------------ */
WM_keymap_add_item(keymap, "SKETCH_OT_delete", XKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "SKETCH_OT_finish_stroke", SELECTMOUSE, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "SKETCH_OT_cancel_stroke", ESCKEY, KM_PRESS, 0, 0);
@@ -231,19 +239,31 @@ void ED_keymap_armature(wmWindowManager *wm)
WM_keymap_add_item(keymap, "POSE_OT_select_parent", PKEY, KM_PRESS, KM_SHIFT, 0);
kmi= WM_keymap_add_item(keymap, "POSE_OT_select_hierarchy", LEFTBRACKETKEY, KM_PRESS, 0, 0);
- RNA_enum_set(kmi->ptr, "direction", BONE_SELECT_PARENT);
- RNA_boolean_set(kmi->ptr, "extend", 0);
+ RNA_enum_set(kmi->ptr, "direction", BONE_SELECT_PARENT);
+ RNA_boolean_set(kmi->ptr, "extend", 0);
kmi= WM_keymap_add_item(keymap, "POSE_OT_select_hierarchy", LEFTBRACKETKEY, KM_PRESS, KM_SHIFT, 0);
- RNA_enum_set(kmi->ptr, "direction", BONE_SELECT_PARENT);
- RNA_boolean_set(kmi->ptr, "extend", 1);
+ RNA_enum_set(kmi->ptr, "direction", BONE_SELECT_PARENT);
+ RNA_boolean_set(kmi->ptr, "extend", 1);
kmi= WM_keymap_add_item(keymap, "POSE_OT_select_hierarchy", RIGHTBRACKETKEY, KM_PRESS, 0, 0);
- RNA_enum_set(kmi->ptr, "direction", BONE_SELECT_CHILD);
- RNA_boolean_set(kmi->ptr, "extend", 0);
+ RNA_enum_set(kmi->ptr, "direction", BONE_SELECT_CHILD);
+ RNA_boolean_set(kmi->ptr, "extend", 0);
kmi= WM_keymap_add_item(keymap, "POSE_OT_select_hierarchy", RIGHTBRACKETKEY, KM_PRESS, KM_SHIFT, 0);
- RNA_enum_set(kmi->ptr, "direction", BONE_SELECT_CHILD);
- RNA_boolean_set(kmi->ptr, "extend", 1);
+ RNA_enum_set(kmi->ptr, "direction", BONE_SELECT_CHILD);
+ RNA_boolean_set(kmi->ptr, "extend", 1);
WM_keymap_add_item(keymap, "POSE_OT_select_linked", LKEY, KM_PRESS, 0, 0);
+
+ // XXX this should probably be in screen instead... here for testing purposes in the meantime... - Aligorith
+ WM_keymap_verify_item(keymap, "ANIM_OT_insert_keyframe_menu", IKEY, KM_PRESS, 0, 0);
+ WM_keymap_verify_item(keymap, "ANIM_OT_delete_keyframe_old", IKEY, KM_PRESS, KM_ALT, 0);
+
+ /* Pose -> PoseLib ------------- */
+ /* only set in posemode, by space_view3d listener */
+ WM_keymap_add_item(keymap, "POSELIB_OT_browse_interactive", LKEY, KM_PRESS, KM_CTRL, 0);
+
+ WM_keymap_add_item(keymap, "POSELIB_OT_pose_add", LKEY, KM_PRESS, KM_SHIFT, 0);
+ WM_keymap_add_item(keymap, "POSELIB_OT_pose_remove", LKEY, KM_PRESS, KM_ALT, 0);
+ WM_keymap_add_item(keymap, "POSELIB_OT_pose_rename", LKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0);
}
diff --git a/source/blender/editors/armature/editarmature.c b/source/blender/editors/armature/editarmature.c
index 659cd586902..1c113c25720 100644
--- a/source/blender/editors/armature/editarmature.c
+++ b/source/blender/editors/armature/editarmature.c
@@ -33,8 +33,6 @@
#include "MEM_guardedalloc.h"
-#include "BMF_Api.h"
-
#include "DNA_action_types.h"
#include "DNA_armature_types.h"
#include "DNA_constraint_types.h"
@@ -3460,11 +3458,13 @@ void ARMATURE_OT_subdivide_multi(wmOperatorType *ot)
static int armature_subdivs_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
- uiMenuItem *head;
+ uiPopupMenu *pup;
+ uiLayout *layout;
- head= uiPupMenuBegin("Subdivision Type", 0);
- uiMenuItemsEnumO(head, "ARMATURE_OT_subdivs", "type");
- uiPupMenuEnd(C, head);
+ pup= uiPupMenuBegin(C, "Subdivision Type", 0);
+ layout= uiPupMenuLayout(pup);
+ uiItemsEnumO(layout, "ARMATURE_OT_subdivs", "type");
+ uiPupMenuEnd(C, pup);
return OPERATOR_CANCELLED;
}
@@ -3744,7 +3744,8 @@ static int armature_parent_set_exec(bContext *C, wmOperator *op)
static int armature_parent_set_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
EditBone *actbone = CTX_data_active_bone(C);
- uiMenuItem *head= uiPupMenuBegin("Make Parent ", 0);
+ uiPopupMenu *pup= uiPupMenuBegin(C, "Make Parent ", 0);
+ uiLayout *layout= uiPupMenuLayout(pup);
int allchildbones = 0;
CTX_DATA_BEGIN(C, EditBone *, ebone, selected_editable_bones) {
@@ -3754,13 +3755,13 @@ static int armature_parent_set_invoke(bContext *C, wmOperator *op, wmEvent *even
}
CTX_DATA_END;
- uiMenuItemEnumO(head, "", 0, "ARMATURE_OT_parent_set", "type", ARM_PAR_CONNECT);
+ uiItemEnumO(layout, NULL, 0, "ARMATURE_OT_parent_set", "type", ARM_PAR_CONNECT);
/* ob becomes parent, make the associated menus */
if (allchildbones)
- uiMenuItemEnumO(head, "", 0, "ARMATURE_OT_parent_set", "type", ARM_PAR_OFFSET);
+ uiItemEnumO(layout, NULL, 0, "ARMATURE_OT_parent_set", "type", ARM_PAR_OFFSET);
- uiPupMenuEnd(C, head);
+ uiPupMenuEnd(C, pup);
return OPERATOR_CANCELLED;
}
@@ -4112,11 +4113,11 @@ static int armature_align_bones_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
-void ARMATURE_OT_align_bones(wmOperatorType *ot)
+void ARMATURE_OT_bones_align(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Align Bones";
- ot->idname= "ARMATURE_OT_align_bones";
+ ot->idname= "ARMATURE_OT_bones_align";
/* api callbacks */
ot->invoke = WM_operator_confirm;
diff --git a/source/blender/editors/armature/editarmature_generate.c b/source/blender/editors/armature/editarmature_generate.c
index a1990814a02..6d271375c64 100644
--- a/source/blender/editors/armature/editarmature_generate.c
+++ b/source/blender/editors/armature/editarmature_generate.c
@@ -1,5 +1,5 @@
/**
- * $Id: editarmature_generate.c $
+ * $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
*
@@ -53,14 +53,14 @@ void setBoneRollFromNormal(EditBone *bone, float *no, float invmat[][4], float t
{
if (no != NULL && !VecIsNull(no))
{
- float tangent[3], cotangent[3], normal[3];
+ float tangent[3], vec[3], normal[3];
VECCOPY(normal, no);
Mat3MulVecfl(tmat, normal);
VecSubf(tangent, bone->tail, bone->head);
- Crossf(cotangent, tangent, normal);
- Crossf(normal, cotangent, tangent);
+ Projf(vec, tangent, normal);
+ VecSubf(normal, normal, vec);
Normalize(normal);
diff --git a/source/blender/editors/armature/editarmature_retarget.c b/source/blender/editors/armature/editarmature_retarget.c
index 5fc8d52ffef..68e8b45e7d2 100644
--- a/source/blender/editors/armature/editarmature_retarget.c
+++ b/source/blender/editors/armature/editarmature_retarget.c
@@ -64,9 +64,9 @@
#include "BKE_context.h"
#include "ED_armature.h"
+#include "ED_util.h"
+
#include "BIF_retarget.h"
-//#include "BIF_space.h"
-//#include "BIF_toolbox.h"
#include "PIL_time.h"
@@ -206,12 +206,12 @@ float rollBoneByQuatAligned(EditBone *bone, float old_up_axis[3], float qrot[4],
}
}
-float rollBoneByQuatJoint(RigEdge *edge, RigEdge *previous, float qrot[4], float qroll[4])
+float rollBoneByQuatJoint(RigEdge *edge, RigEdge *previous, float qrot[4], float qroll[4], float up_axis[3])
{
if (previous == NULL)
{
- QuatOne(qroll);
- return rollBoneByQuat(edge->bone, edge->up_axis, qrot);
+ /* default to up_axis if no previous */
+ return rollBoneByQuatAligned(edge->bone, edge->up_axis, qrot, qroll, up_axis);
}
else
{
@@ -228,9 +228,8 @@ float rollBoneByQuatJoint(RigEdge *edge, RigEdge *previous, float qrot[4], float
}
else
{
- /* SHOULDN'T BE HERE */
- QuatOne(qroll);
- return rollBoneByQuat(edge->bone, edge->up_axis, qrot);
+ /* default to up_axis if first bone in the chain is an offset */
+ return rollBoneByQuatAligned(edge->bone, edge->up_axis, qrot, qroll, up_axis);
}
VecSubf(vec_second, edge->bone->tail, edge->bone->head);
@@ -1645,6 +1644,7 @@ RigGraph *armatureSelectedToGraph(bContext *C, Object *ob, bArmature *arm)
}
/************************************ GENERATING *****************************************************/
+#if 0
static EditBone *add_editbonetolist(char *name, ListBase *list)
{
EditBone *bone= MEM_callocN(sizeof(EditBone), "eBone");
@@ -1668,6 +1668,7 @@ static EditBone *add_editbonetolist(char *name, ListBase *list)
return bone;
}
+#endif
void generateMissingArcsFromNode(RigGraph *rigg, ReebNode *node, int multi_level_limit)
{
@@ -1857,7 +1858,7 @@ static void repositionBone(bContext *C, RigGraph *rigg, RigEdge *edge, float vec
}
else if (scene->toolsettings->skgen_retarget_roll == SK_RETARGET_ROLL_JOINT)
{
- bone->roll = rollBoneByQuatJoint(edge, edge->next, qrot, qroll);
+ bone->roll = rollBoneByQuatJoint(edge, edge->prev, qrot, qroll, up_axis);
}
else
{
@@ -2733,7 +2734,7 @@ static void adjustGraphs(bContext *C, RigGraph *rigg)
arm->edbo = rigg->editbones;
ED_armature_from_edit(scene, rigg->ob);
- ED_undo_push("Retarget Skeleton");
+ ED_undo_push(C, "Retarget Skeleton");
}
static void retargetGraphs(bContext *C, RigGraph *rigg)
@@ -2890,7 +2891,7 @@ void BIF_retargetArmature(bContext *C)
printf("retarget: \t%.3f (%.1f%%)\n", retarget_time, retarget_time / total_time * 100);
printf("-----------\n");
- ED_undo_push("Retarget Skeleton");
+ ED_undo_push(C, "Retarget Skeleton");
// XXX
// allqueue(REDRAWVIEW3D, 0);
diff --git a/source/blender/editors/armature/editarmature_sketch.c b/source/blender/editors/armature/editarmature_sketch.c
index 5d0b954046c..45605ad472d 100644
--- a/source/blender/editors/armature/editarmature_sketch.c
+++ b/source/blender/editors/armature/editarmature_sketch.c
@@ -1,5 +1,5 @@
/**
- * $Id: $
+ * $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
*
@@ -293,7 +293,7 @@ char *BIF_listTemplates(bContext *C)
while (!BLI_ghashIterator_isDone(&ghi))
{
Object *ob = BLI_ghashIterator_getValue(&ghi);
- int key = (int)BLI_ghashIterator_getKey(&ghi);
+ int key = GET_INT_FROM_POINTER(BLI_ghashIterator_getKey(&ghi));
p += sprintf(p, "|%s%%x%i", ob->id.name+2, key);
@@ -314,7 +314,7 @@ int BIF_currentTemplate(bContext *C)
while (!BLI_ghashIterator_isDone(&ghi))
{
Object *ob = BLI_ghashIterator_getValue(&ghi);
- int key = (int)BLI_ghashIterator_getKey(&ghi);
+ int key = GET_INT_FROM_POINTER(BLI_ghashIterator_getKey(&ghi));
if (ob == scene->toolsettings->skgen_template)
{
@@ -1035,7 +1035,22 @@ void sk_drawStroke(SK_Stroke *stk, int id, float color[3], int start, int end)
}
glEnd();
-
+
+#if 0
+ glColor3f(0, 0, 1);
+ glBegin(GL_LINES);
+
+ for (i = 0; i < stk->nb_points; i++)
+ {
+ float *p = stk->points[i].p;
+ float *no = stk->points[i].no;
+ glVertex3fv(p);
+ glVertex3f(p[0] + no[0], p[1] + no[1], p[2] + no[2]);
+ }
+
+ glEnd();
+#endif
+
glColor3f(0, 0, 0);
glBegin(GL_POINTS);
@@ -1998,7 +2013,7 @@ void sk_convertStroke(bContext *C, SK_Stroke *stk)
Mat4MulVecfl(invmat, bone->head);
Mat4MulVecfl(invmat, bone->tail);
- setBoneRollFromNormal(bone, pt->no, invmat, tmat);
+ setBoneRollFromNormal(bone, head->no, invmat, tmat);
}
new_parent = bone;
diff --git a/source/blender/editors/armature/poselib.c b/source/blender/editors/armature/poselib.c
index 8e6f118118a..dec4847f125 100644
--- a/source/blender/editors/armature/poselib.c
+++ b/source/blender/editors/armature/poselib.c
@@ -39,6 +39,7 @@
#include "BLI_dynstr.h"
#include "DNA_listBase.h"
+#include "DNA_anim_types.h"
#include "DNA_action_types.h"
#include "DNA_armature_types.h"
#include "DNA_curve_types.h"
@@ -48,25 +49,36 @@
#include "DNA_scene_types.h"
#include "DNA_userdef_types.h"
+#include "BKE_animsys.h"
#include "BKE_action.h"
#include "BKE_armature.h"
#include "BKE_depsgraph.h"
-#include "BKE_ipo.h"
#include "BKE_modifier.h"
#include "BKE_object.h"
#include "BKE_global.h"
+#include "BKE_context.h"
+#include "BKE_report.h"
#include "BKE_utildefines.h"
#include "PIL_time.h" /* sleep */
+#include "RNA_access.h"
+#include "RNA_define.h"
+#include "RNA_types.h"
+
+#include "WM_api.h"
#include "WM_types.h"
+#include "UI_interface.h"
+#include "UI_resources.h"
+
#include "ED_anim_api.h"
#include "ED_armature.h"
#include "ED_keyframes_draw.h"
#include "ED_keyframing.h"
#include "ED_keyframes_edit.h"
+#include "ED_screen.h"
#include "armature_intern.h"
@@ -74,20 +86,8 @@
static void BIF_undo_push() {}
static void error() {}
-static int qtest() {return 0;}
-static int sbutton() {return 0;}
-static int pupmenu() {return 0;}
-static int pupmenu_col() {return 0;}
-static int extern_qread_ext() {return 0;}
-static void persptoetsen() {}
-static void headerprint() {}
-
-static void remake_action_ipos() {} // xxx depreceated
-//static void verify_pchan2achan_grouping() {} // xxx depreceated
-static void action_set_activemarker() {}
-
-/* ******* XXX ********** */
+static void action_set_activemarker() {}
/* ************************************************************* */
/* == POSE-LIBRARY TOOL FOR BLENDER ==
@@ -193,8 +193,7 @@ bAction *poselib_init_new (Object *ob)
/* init object's poselib action (unlink old one if there) */
if (ob->poselib)
ob->poselib->id.us--;
- // XXX old anim stuff
- // ob->poselib= add_empty_action("PoseLib");
+ ob->poselib= add_empty_action("PoseLib");
return ob->poselib;
}
@@ -214,6 +213,7 @@ bAction *poselib_validate (Object *ob)
/* This tool automagically generates/validates poselib data so that it corresponds to the data
* in the action. This is for use in making existing actions usable as poselibs.
*/
+// TODO: operatorfy me!
void poselib_validate_act (bAction *act)
{
ListBase keys = {NULL, NULL};
@@ -273,147 +273,145 @@ void poselib_validate_act (bAction *act)
}
/* ************************************************************* */
-#if 0 // XXX old animation system
-/* This function adds an ipo-curve of the right type where it's needed */
-static IpoCurve *poselib_verify_icu (Ipo *ipo, int adrcode)
+/* Pointers to the builtin KeyingSets that we want to use */
+static KeyingSet *poselib_ks_locrotscale = NULL; /* quaternion rotations */
+static KeyingSet *poselib_ks_locrotscale2 = NULL; /* euler rotations */ // XXX FIXME...
+static short poselib_ks_need_init= 1; /* have the above been obtained yet? */
+
+/* Make sure the builtin KeyingSets are initialised properly
+ * (only gets called on first run of poselib_add_current_pose).
+ */
+static void poselib_get_builtin_keyingsets (void)
{
- IpoCurve *icu;
-
- for (icu= ipo->curve.first; icu; icu= icu->next) {
- if (icu->adrcode==adrcode) break;
- }
- if (icu==NULL) {
- icu= MEM_callocN(sizeof(IpoCurve), "ipocurve");
+ /* only if we haven't got these yet */
+ // FIXME: this assumes that we will always get the builtin sets...
+ if (poselib_ks_need_init) {
+ /* LocRotScale (quaternions) */
+ poselib_ks_locrotscale= ANIM_builtin_keyingset_get_named(NULL, "LocRotScale");
- icu->flag |= IPO_VISIBLE|IPO_AUTO_HORIZ;
- if (ipo->curve.first==NULL) icu->flag |= IPO_ACTIVE; /* first one added active */
+ /* LocRotScale (euler) */
+ //ks_locrotscale2= ANIM_builtin_keyingset_get_named(ks_locrotscale, "LocRotScale");
+ poselib_ks_locrotscale2= poselib_ks_locrotscale; // FIXME: for now, just use the same one...
- icu->blocktype= ID_PO;
- icu->adrcode= adrcode;
-
- set_icu_vars(icu);
+ /* clear flag requesting init */
+ poselib_ks_need_init= 0;
+ }
+}
+
+/* ----- */
+
+static void poselib_add_menu_invoke__replacemenu (bContext *C, uiLayout *layout, void *arg)
+{
+ Object *ob= CTX_data_active_object(C);
+ bAction *act= ob->poselib;
+ TimeMarker *marker;
+
+ /* add each marker to this menu */
+ for (marker= act->markers.first; marker; marker= marker->next)
+ uiItemIntO(layout, marker->name, ICON_ARMATURE_DATA, "POSELIB_OT_pose_add", "frame", marker->frame);
+}
+
+static int poselib_add_menu_invoke (bContext *C, wmOperator *op, wmEvent *evt)
+{
+ Scene *scene= CTX_data_scene(C);
+ Object *ob= CTX_data_active_object(C);
+ bArmature *arm= (ob) ? ob->data : NULL;
+ bPose *pose= (ob) ? ob->pose : NULL;
+ uiPopupMenu *pup;
+ uiLayout *layout;
+
+ /* sanity check */
+ if (ELEM3(NULL, ob, arm, pose))
+ return OPERATOR_CANCELLED;
+
+ /* start building */
+ pup= uiPupMenuBegin(C, op->type->name, 0);
+ layout= uiPupMenuLayout(pup);
+ uiLayoutContext(layout, WM_OP_EXEC_DEFAULT);
+
+ /* add new (adds to the first unoccupied frame) */
+ uiItemIntO(layout, "Add New", 0, "POSELIB_OT_pose_add", "frame", poselib_get_free_index(ob->poselib));
+
+ /* check if we have any choices to add a new pose in any other way */
+ if ((ob->poselib) && (ob->poselib->markers.first)) {
+ /* add new (on current frame) */
+ uiItemIntO(layout, "Add New (Current Frame)", 0, "POSELIB_OT_pose_add", "frame", CFRA);
- BLI_addtail(&ipo->curve, icu);
+ /* replace existing - submenu */
+ uiItemMenuF(layout, "Replace Existing...", 0, poselib_add_menu_invoke__replacemenu);
}
- return icu;
+ uiPupMenuEnd(C, pup);
+
+ /* this operator is only for a menu, not used further */
+ return OPERATOR_CANCELLED;
}
-#endif // XXX old animation system
-/* This tool adds the current pose to the poselib
- * Note: Standard insertkey cannot be used for this due to its limitations
- */
-void poselib_add_current_pose (Scene *scene, Object *ob, int val)
+
+static int poselib_add_exec (bContext *C, wmOperator *op)
{
+ Object *ob= CTX_data_active_object(C);
+ bAction *act = poselib_validate(ob);
bArmature *arm= (ob) ? ob->data : NULL;
bPose *pose= (ob) ? ob->pose : NULL;
bPoseChannel *pchan;
TimeMarker *marker;
- bAction *act;
- // bActionChannel *achan;
- // IpoCurve *icu;
- int frame;
+ int frame= RNA_int_get(op->ptr, "frame");
char name[64];
- /* sanity check */
+ bCommonKeySrc cks;
+ ListBase dsources = {&cks, &cks};
+
+ /* sanity check (invoke should have checked this anyway) */
if (ELEM3(NULL, ob, arm, pose))
- return;
+ return OPERATOR_CANCELLED;
- /* mode - add new or replace existing */
- if (val == 0) {
- if ((ob->poselib) && (ob->poselib->markers.first)) {
- val= pupmenu("PoseLib Add Current Pose%t|Add New%x1|Add New (Current Frame)%x3|Replace Existing%x2");
- if (val <= 0) return;
+ /* get name to give to pose */
+ RNA_string_get(op->ptr, "name", name);
+
+ /* add pose to poselib - replaces any existing pose there
+ * - for the 'replace' option, this should end up finding the appropriate marker,
+ * so no new one will be added
+ */
+ for (marker= act->markers.first; marker; marker= marker->next) {
+ if (marker->frame == frame) {
+ BLI_strncpy(marker->name, name, sizeof(marker->name));
+ break;
}
- else
- val= 1;
}
-
- if ((ob->poselib) && (val == 2)) {
- char *menustr;
-
- /* get poselib */
- act= ob->poselib;
-
- /* get the pose to replace */
- menustr= poselib_build_poses_menu(act, "Replace PoseLib Pose");
- val= pupmenu_col(menustr, 20);
- if (menustr) MEM_freeN(menustr);
+ if (marker == NULL) {
+ marker= MEM_callocN(sizeof(TimeMarker), "ActionMarker");
- if (val <= 0) return;
- marker= BLI_findlink(&act->markers, val-1);
- if (marker == NULL) return;
+ BLI_strncpy(marker->name, name, sizeof(marker->name));
+ marker->frame= frame;
- /* get the frame from the poselib */
- frame= marker->frame;
+ BLI_addtail(&act->markers, marker);
}
- else {
- /* get name of pose */
- sprintf(name, "Pose");
- if (sbutton(name, 0, sizeof(name)-1, "Name: ") == 0)
- return;
-
- /* get/initialise poselib */
- act= poselib_validate(ob);
-
- /* get frame */
- if (val == 3)
- frame= CFRA;
- else /* if (val == 1) */
- frame= poselib_get_free_index(act);
-
- /* add pose to poselib - replaces any existing pose there */
- for (marker= act->markers.first; marker; marker= marker->next) {
- if (marker->frame == frame) {
- BLI_strncpy(marker->name, name, sizeof(marker->name));
- break;
- }
- }
- if (marker == NULL) {
- marker= MEM_callocN(sizeof(TimeMarker), "ActionMarker");
-
- BLI_strncpy(marker->name, name, sizeof(marker->name));
- marker->frame= frame;
-
- BLI_addtail(&act->markers, marker);
- }
-
- /* validate name */
- BLI_uniquename(&act->markers, marker, "Pose", offsetof(TimeMarker, name), 64);
- }
+
+ /* validate name */
+ BLI_uniquename(&act->markers, marker, "Pose", '.', offsetof(TimeMarker, name), 64);
+
+ /* make sure we've got KeyingSets to use */
+ poselib_get_builtin_keyingsets();
+
+ /* init common-key-source for use by KeyingSets */
+ memset(&cks, 0, sizeof(bCommonKeySrc));
+ cks.id= &ob->id;
/* loop through selected posechannels, keying their pose to the action */
for (pchan= pose->chanbase.first; pchan; pchan= pchan->next) {
/* check if available */
if ((pchan->bone) && (arm->layer & pchan->bone->layer)) {
if (pchan->bone->flag & (BONE_SELECTED|BONE_ACTIVE)) {
-#if 0 // XXX old animation system
- /* make action-channel if needed (action groups are also created) */
- achan= verify_action_channel(act, pchan->name);
- verify_pchan2achan_grouping(act, pose, pchan->name);
+ /* init cks for this PoseChannel, then use the relative KeyingSets to keyframe it */
+ cks.pchan= pchan;
- /* make ipo if needed... */
- if (achan->ipo == NULL)
- achan->ipo= add_ipo(scene, achan->name, ID_PO);
-
- /* add missing ipo-curves and insert keys */
- #define INSERT_KEY_ICU(adrcode, data) {\
- icu= poselib_verify_icu(achan->ipo, adrcode); \
- insert_vert_icu(icu, (float)frame, data, 1); \
- }
-
- INSERT_KEY_ICU(AC_LOC_X, pchan->loc[0])
- INSERT_KEY_ICU(AC_LOC_Y, pchan->loc[1])
- INSERT_KEY_ICU(AC_LOC_Z, pchan->loc[2])
- INSERT_KEY_ICU(AC_SIZE_X, pchan->size[0])
- INSERT_KEY_ICU(AC_SIZE_Y, pchan->size[1])
- INSERT_KEY_ICU(AC_SIZE_Z, pchan->size[2])
- INSERT_KEY_ICU(AC_QUAT_W, pchan->quat[0])
- INSERT_KEY_ICU(AC_QUAT_X, pchan->quat[1])
- INSERT_KEY_ICU(AC_QUAT_Y, pchan->quat[2])
- INSERT_KEY_ICU(AC_QUAT_Z, pchan->quat[3])
-#endif // XXX old animation system
+ /* KeyingSet to use depends on rotation mode */
+ if (pchan->rotmode)
+ modify_keyframes(C, &dsources, act, poselib_ks_locrotscale2, MODIFYKEY_MODE_INSERT, (float)frame);
+ else
+ modify_keyframes(C, &dsources, act, poselib_ks_locrotscale, MODIFYKEY_MODE_INSERT, (float)frame);
}
}
}
@@ -421,64 +419,97 @@ void poselib_add_current_pose (Scene *scene, Object *ob, int val)
/* store new 'active' pose number */
act->active_marker= BLI_countlist(&act->markers);
- BIF_undo_push("PoseLib Add Pose");
+ /* done */
+ return OPERATOR_FINISHED;
}
-/* This tool removes the pose that the user selected from the poselib (or the provided pose) */
-void poselib_remove_pose (Object *ob, TimeMarker *marker)
+void POSELIB_OT_pose_add (wmOperatorType *ot)
{
- bPose *pose= (ob) ? ob->pose : NULL;
+ /* identifiers */
+ ot->name= "PoseLib Add Pose";
+ ot->idname= "POSELIB_OT_pose_add";
+ ot->description= "Add the current Pose to the active Pose Library";
+
+ /* api callbacks */
+ ot->invoke= poselib_add_menu_invoke;
+ ot->exec= poselib_add_exec;
+ ot->poll= ED_operator_posemode;
+
+ /* flags */
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+
+ /* properties */
+ RNA_def_int(ot->srna, "frame", 1, 0, INT_MAX, "Frame", "Frame to store pose on", 0, INT_MAX);
+ RNA_def_string(ot->srna, "name", "Pose", 64, "Pose Name", "Name of newly added Pose");
+}
+
+/* ----- */
+
+static int poselib_stored_pose_menu_invoke (bContext *C, wmOperator *op, wmEvent *evt)
+{
+ Object *ob= CTX_data_active_object(C);
bAction *act= (ob) ? ob->poselib : NULL;
- // bActionChannel *achan;
- char *menustr;
- int val;
+ TimeMarker *marker;
+ uiPopupMenu *pup;
+ uiLayout *layout;
+ int i;
+
+ /* sanity check */
+ if (ELEM(NULL, ob, act))
+ return OPERATOR_CANCELLED;
+
+ /* start building */
+ pup= uiPupMenuBegin(C, op->type->name, 0);
+ layout= uiPupMenuLayout(pup);
+ uiLayoutContext(layout, WM_OP_EXEC_DEFAULT);
+
+ /* add each marker to this menu */
+ for (marker=act->markers.first, i=0; marker; marker= marker->next, i++)
+ uiItemIntO(layout, marker->name, ICON_ARMATURE_DATA, op->idname, "index", i);
+
+ uiPupMenuEnd(C, pup);
+
+ /* this operator is only for a menu, not used further */
+ return OPERATOR_CANCELLED;
+}
+
+
+
+static int poselib_remove_exec (bContext *C, wmOperator *op)
+{
+ Object *ob= CTX_data_active_object(C);
+ bAction *act= (ob) ? ob->poselib : NULL;
+ TimeMarker *marker;
+ FCurve *fcu;
/* check if valid poselib */
- if (ELEM(NULL, ob, pose)) {
- error("PoseLib is only for Armatures in PoseMode");
- return;
- }
if (act == NULL) {
- error("Object doesn't have PoseLib data");
- return;
+ BKE_report(op->reports, RPT_ERROR, "Object doesn't have PoseLib data");
+ return OPERATOR_CANCELLED;
}
/* get index (and pointer) of pose to remove */
+ marker= BLI_findlink(&act->markers, RNA_int_get(op->ptr, "index"));
if (marker == NULL) {
- menustr= poselib_build_poses_menu(act, "Remove PoseLib Pose");
- val= pupmenu_col(menustr, 20);
- if (menustr) MEM_freeN(menustr);
-
- if (val <= 0) return;
- marker= BLI_findlink(&act->markers, val-1);
- if (marker == NULL) return;
- }
- else {
- /* only continue if pose belongs to poselib */
- if (BLI_findindex(&act->markers, marker) == -1)
- return;
+ BKE_report(op->reports, RPT_ERROR, "Invalid index for Pose");
}
/* remove relevant keyframes */
-#if 0 // XXX old animation system
- for (achan= act->chanbase.first; achan; achan= achan->next) {
- Ipo *ipo= achan->ipo;
- IpoCurve *icu;
+ for (fcu= act->curves.first; fcu; fcu= fcu->next) {
BezTriple *bezt;
int i;
- for (icu= ipo->curve.first; icu; icu= icu->next) {
- for (i=0, bezt=icu->bezt; i < icu->totvert; i++, bezt++) {
- /* check if remove... */
+ if (fcu->bezt) {
+ for (i=0, bezt=fcu->bezt; i < fcu->totvert; i++, bezt++) {
+ /* check if remove */
if (IS_EQ(bezt->vec[1][0], marker->frame)) {
- delete_icu_key(icu, i, 1);
+ delete_fcurve_key(fcu, i, 1);
break;
}
- }
+ }
}
}
-#endif // XXX old animation system
/* remove poselib from list */
BLI_freelinkN(&act->markers, marker);
@@ -486,52 +517,80 @@ void poselib_remove_pose (Object *ob, TimeMarker *marker)
/* fix active pose number */
act->active_marker= 0;
- /* undo + redraw */
- BIF_undo_push("PoseLib Remove Pose");
+ /* done */
+ return OPERATOR_FINISHED;
+}
+
+void POSELIB_OT_pose_remove (wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "PoseLib Remove Pose";
+ ot->idname= "POSELIB_OT_pose_remove";
+ ot->description= "Remove nth pose from the active Pose Library";
+
+ /* api callbacks */
+ ot->invoke= poselib_stored_pose_menu_invoke;
+ ot->exec= poselib_remove_exec;
+ ot->poll= ED_operator_posemode;
+
+ /* flags */
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+
+ /* properties */
+ RNA_def_int(ot->srna, "index", 0, 0, INT_MAX, "Index", "The index of the pose to remove", 0, INT_MAX);
}
-/* This tool renames the pose that the user selected from the poselib */
-void poselib_rename_pose (Object *ob)
+
+static int poselib_rename_exec (bContext *C, wmOperator *op)
{
- bPose *pose= (ob) ? ob->pose : NULL;
+ Object *ob= CTX_data_active_object(C);
bAction *act= (ob) ? ob->poselib : NULL;
TimeMarker *marker;
- char *menustr, name[64];
- int val;
+ char newname[64];
/* check if valid poselib */
- if (ELEM(NULL, ob, pose)) {
- error("PoseLib is only for Armatures in PoseMode");
- return;
- }
if (act == NULL) {
- error("Object doesn't have a valid PoseLib");
- return;
+ BKE_report(op->reports, RPT_ERROR, "Object doesn't have PoseLib data");
+ return OPERATOR_CANCELLED;
}
- /* get index of pose to remove */
- menustr= poselib_build_poses_menu(act, "Rename PoseLib Pose");
- val= pupmenu_col(menustr, 20);
- if (menustr) MEM_freeN(menustr);
-
- if (val <= 0) return;
- marker= BLI_findlink(&act->markers, val-1);
- if (marker == NULL) return;
+ /* get index (and pointer) of pose to remove */
+ marker= BLI_findlink(&act->markers, RNA_int_get(op->ptr, "index"));
+ if (marker == NULL) {
+ BKE_report(op->reports, RPT_ERROR, "Invalid index for Pose");
+ }
- /* get name of pose */
- strncpy(name, marker->name, sizeof(name));
- if (sbutton(name, 0, sizeof(name)-1, "Name: ") == 0)
- return;
+ /* get new name */
+ RNA_string_get(op->ptr, "name", newname);
/* copy name and validate it */
- BLI_strncpy(marker->name, name, sizeof(marker->name));
- BLI_uniquename(&act->markers, marker, "Pose", offsetof(TimeMarker, name), 64);
+ BLI_strncpy(marker->name, newname, sizeof(marker->name));
+ BLI_uniquename(&act->markers, marker, "Pose", '.', offsetof(TimeMarker, name), 64);
- /* undo and update */
- BIF_undo_push("PoseLib Rename Pose");
+ /* done */
+ return OPERATOR_FINISHED;
}
+void POSELIB_OT_pose_rename (wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "PoseLib Rename Pose";
+ ot->idname= "POSELIB_OT_pose_rename";
+ ot->description= "Rename nth pose from the active Pose Library";
+
+ /* api callbacks */
+ ot->invoke= poselib_stored_pose_menu_invoke;
+ ot->exec= poselib_rename_exec;
+ ot->poll= ED_operator_posemode;
+
+ /* flags */
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+
+ /* properties */
+ RNA_def_int(ot->srna, "index", 0, 0, INT_MAX, "Index", "The index of the pose to remove", 0, INT_MAX);
+ RNA_def_string(ot->srna, "name", "RenamedPose", 64, "New Pose Name", "New name for pose");
+}
/* ************************************************************* */
@@ -540,6 +599,10 @@ typedef struct tPoseLib_PreviewData {
ListBase backups; /* tPoseLib_Backup structs for restoring poses */
ListBase searchp; /* LinkData structs storing list of poses which match the current search-string */
+ Scene *scene; /* active scene */
+ ScrArea *sa; /* active area */
+
+ PointerRNA rna_ptr; /* RNA-Pointer to Object 'ob' */
Object *ob; /* object to work on */
bArmature *arm; /* object's armature data */
bPose *pose; /* object's pose */
@@ -595,13 +658,13 @@ typedef struct tPoseLib_Backup {
/* Makes a copy of the current pose for restoration purposes - doesn't do constraints currently */
static void poselib_backup_posecopy (tPoseLib_PreviewData *pld)
{
- bActionChannel *achan;
+ bActionGroup *agrp;
bPoseChannel *pchan;
/* for each posechannel that has an actionchannel in */
- for (achan= pld->act->chanbase.first; achan; achan= achan->next) {
+ for (agrp= pld->act->groups.first; agrp; agrp= agrp->next) {
/* try to find posechannel */
- pchan= get_pose_channel(pld->pose, achan->name);
+ pchan= get_pose_channel(pld->pose, agrp->name);
/* backup data if available */
if (pchan) {
@@ -642,74 +705,58 @@ static void poselib_backup_restore (tPoseLib_PreviewData *pld)
*/
static void poselib_apply_pose (tPoseLib_PreviewData *pld)
{
+ PointerRNA *ptr= &pld->rna_ptr;
+ bArmature *arm= pld->arm;
bPose *pose= pld->pose;
bPoseChannel *pchan;
bAction *act= pld->act;
- bActionChannel *achan;
- IpoCurve *icu;
- int frame;
+ bActionGroup *agrp;
+
+ BeztEditData bed;
+ BeztEditFunc group_ok_cb;
+ int frame= 1;
+ /* get the frame */
if (pld->marker)
frame= pld->marker->frame;
else
return;
+
+ /* init settings for testing groups for keyframes */
+ group_ok_cb= ANIM_editkeyframes_ok(BEZT_OK_FRAMERANGE);
+ memset(&bed, 0, sizeof(BeztEditData));
+ bed.f1= ((float)frame) - 0.5f;
+ bed.f2= ((float)frame) + 0.5f;
+
+
/* start applying - only those channels which have a key at this point in time! */
- for (achan= act->chanbase.first; achan; achan= achan->next) {
- short found= 0;
-
- /* apply this achan? */
- if (achan->ipo) {
- /* find a keyframe at this frame - users may not have defined the pose on every channel, so this is necessary */
- // TODO: this may be bad for user-defined poses...
- for (icu= achan->ipo->curve.first; icu; icu= icu->next) {
- BezTriple *bezt;
- int i;
-
- for (i=0, bezt=icu->bezt; i < icu->totvert; i++, bezt++) {
- if (IN_RANGE(bezt->vec[1][0], (frame-0.5f), (frame+0.5f))) {
- found= 1;
- break;
- }
- }
-
- if (found) break;
- }
+ for (agrp= act->groups.first; agrp; agrp= agrp->next) {
+ /* check if group has any keyframes */
+ if (ANIM_animchanneldata_keys_bezier_loop(&bed, agrp, ALE_GROUP, NULL, group_ok_cb, NULL, 0)) {
+ /* has keyframe on this frame, so try to get a PoseChannel with this name */
+ pchan= get_pose_channel(pose, agrp->name);
- /* apply pose - only if posechannel selected? */
- if (found) {
- pchan= get_pose_channel(pose, achan->name);
+ if (pchan) {
+ short ok= 0;
- if (pchan) {
- short ok= 0;
-
- if (pchan->bone) {
- if ( (pchan->bone->flag & (BONE_SELECTED|BONE_ACTIVE)) &&
- (pchan->bone->flag & BONE_HIDDEN_P)==0 )
- ok = 1;
- else if (pld->selcount == 0)
- ok= 1;
- }
- else if (pld->selcount == 0)
- ok= 1;
-
- if (ok) {
-#if 0 // XXX old animation system
- /* Evaluates and sets the internal ipo values */
- calc_ipo(achan->ipo, (float)frame);
- /* This call also sets the pchan flags */
- execute_action_ipo(achan, pchan);
-#endif // XXX old animation system
- }
+ /* check if this bone should get any animation applied */
+ if (pld->selcount == 0) {
+ /* if no bones are selected, then any bone is ok */
+ ok= 1;
+ }
+ else if (pchan->bone) {
+ /* only ok if bone is visible and selected */
+ if ( (pchan->bone->flag & (BONE_SELECTED|BONE_ACTIVE)) &&
+ (pchan->bone->flag & BONE_HIDDEN_P)==0 &&
+ (pchan->bone->layer & arm->layer) )
+ ok = 1;
}
+
+ if (ok)
+ animsys_evaluate_action_group(ptr, act, agrp, NULL, (float)frame);
}
}
-
- /* tag achan as having been used or not... */
- if (found)
- achan->flag |= ACHAN_SELECTED;
- else
- achan->flag &= ~ACHAN_SELECTED;
}
}
@@ -719,13 +766,13 @@ static void poselib_keytag_pose (Scene *scene, tPoseLib_PreviewData *pld)
bPose *pose= pld->pose;
bPoseChannel *pchan;
bAction *act= pld->act;
- bActionChannel *achan;
+ bActionGroup *agrp;
/* start tagging/keying */
- for (achan= act->chanbase.first; achan; achan= achan->next) {
+ for (agrp= act->groups.first; agrp; agrp= agrp->next) {
/* only for selected action channels */
- if (achan->flag & ACHAN_SELECTED) {
- pchan= get_pose_channel(pose, achan->name);
+ if (agrp->flag & AGRP_SELECTED) {
+ pchan= get_pose_channel(pose, agrp->name);
if (pchan) {
#if 0 // XXX old animation system
@@ -761,11 +808,86 @@ static void poselib_keytag_pose (Scene *scene, tPoseLib_PreviewData *pld)
pchan->bone->flag |= BONE_UNKEYED;
}
#endif // XXX old animation system
+
}
}
}
}
+/* Apply the relevant changes to the pose */
+static void poselib_preview_apply (bContext *C, wmOperator *op)
+{
+ tPoseLib_PreviewData *pld= (tPoseLib_PreviewData *)op->customdata;
+
+ /* only recalc pose (and its dependencies) if pose has changed */
+ if (pld->redraw == PL_PREVIEW_REDRAWALL) {
+ /* don't clear pose if firsttime */
+ if ((pld->flag & PL_PREVIEW_FIRSTTIME)==0)
+ poselib_backup_restore(pld);
+ else
+ pld->flag &= ~PL_PREVIEW_FIRSTTIME;
+
+ /* pose should be the right one to draw (unless we're temporarily not showing it) */
+ if ((pld->flag & PL_PREVIEW_SHOWORIGINAL)==0) {
+ RNA_int_set(op->ptr, "pose_index", BLI_findindex(&pld->act->markers, pld->marker));
+ poselib_apply_pose(pld);
+ }
+ else
+ RNA_int_set(op->ptr, "pose_index", -2); /* -2 means don't apply any pose */
+
+ /* old optimize trick... this enforces to bypass the depgraph
+ * - note: code copied from transform_generics.c -> recalcData()
+ */
+ // FIXME: shouldn't this use the builtin stuff?
+ if ((pld->arm->flag & ARM_DELAYDEFORM)==0)
+ DAG_object_flush_update(pld->scene, pld->ob, OB_RECALC_DATA); /* sets recalc flags */
+ else
+ where_is_pose(pld->scene, pld->ob);
+ }
+
+ /* do header print - if interactively previewing */
+ if (pld->state == PL_PREVIEW_RUNNING) {
+ if (pld->flag & PL_PREVIEW_SHOWORIGINAL) {
+ sprintf(pld->headerstr, "PoseLib Previewing Pose: [Showing Original Pose] | Use Tab to start previewing poses again");
+ ED_area_headerprint(pld->sa, pld->headerstr);
+ }
+ else if (pld->searchstr[0]) {
+ char tempstr[65];
+ char markern[64];
+ short index;
+
+ /* get search-string */
+ index= pld->search_cursor;
+
+ if (IN_RANGE(index, 0, 64)) {
+ memcpy(&tempstr[0], &pld->searchstr[0], index);
+ tempstr[index]= '|';
+ memcpy(&tempstr[index+1], &pld->searchstr[index], 64-index);
+ }
+ else {
+ strncpy(tempstr, pld->searchstr, 64);
+ }
+
+ /* get marker name */
+ if (pld->marker)
+ strcpy(markern, pld->marker->name);
+ else
+ strcpy(markern, "No Matches");
+
+ sprintf(pld->headerstr, "PoseLib Previewing Pose: Filter - [%s] | Current Pose - \"%s\" | Use ScrollWheel or PageUp/Down to change", tempstr, markern);
+ ED_area_headerprint(pld->sa, pld->headerstr);
+ }
+ else {
+ sprintf(pld->headerstr, "PoseLib Previewing Pose: \"%s\" | Use ScrollWheel or PageUp/Down to change", pld->marker->name);
+ ED_area_headerprint(pld->sa, pld->headerstr);
+ }
+ }
+
+ /* request drawing of view + clear redraw flag */
+ WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM|ND_POSE, pld->ob);
+ pld->redraw= PL_PREVIEW_NOREDRAW;
+}
+
/* ---------------------------- */
/* This helper function is called during poselib_preview_poses to find the
@@ -864,6 +986,43 @@ static void poselib_preview_get_next (tPoseLib_PreviewData *pld, int step)
/* specially handle events for searching */
static void poselib_preview_handle_search (tPoseLib_PreviewData *pld, unsigned short event, char ascii)
{
+ /* try doing some form of string manipulation first */
+ switch (event) {
+ case BACKSPACEKEY:
+ if (pld->searchstr[0] && pld->search_cursor) {
+ short len= strlen(pld->searchstr);
+ short index= pld->search_cursor;
+ short i;
+
+ for (i = index; i <= len; i++)
+ pld->searchstr[i-1] = pld->searchstr[i];
+
+ pld->search_cursor--;
+
+ poselib_preview_get_next(pld, 1);
+ pld->redraw = PL_PREVIEW_REDRAWALL;
+ return;
+ }
+ break;
+
+ case DELKEY:
+ if (pld->searchstr[0] && pld->searchstr[1]) {
+ short len= strlen(pld->searchstr);
+ short index= pld->search_cursor;
+ int i;
+
+ if (index < len) {
+ for (i = index; i < len; i++)
+ pld->searchstr[i] = pld->searchstr[i+1];
+
+ poselib_preview_get_next(pld, 1);
+ pld->redraw = PL_PREVIEW_REDRAWALL;
+ return;
+ }
+ }
+ break;
+ }
+
if (ascii) {
/* character to add to the string */
short index= pld->search_cursor;
@@ -883,47 +1042,14 @@ static void poselib_preview_handle_search (tPoseLib_PreviewData *pld, unsigned s
poselib_preview_get_next(pld, 1);
pld->redraw = PL_PREVIEW_REDRAWALL;
}
- else {
- /* some form of string manipulation */
- switch (event) {
- case BACKSPACEKEY:
- if (pld->searchstr[0] && pld->search_cursor) {
- short len= strlen(pld->searchstr);
- short index= pld->search_cursor;
- short i;
-
- for (i = index; i <= len; i++)
- pld->searchstr[i-1] = pld->searchstr[i];
-
- pld->search_cursor--;
-
- poselib_preview_get_next(pld, 1);
- pld->redraw = PL_PREVIEW_REDRAWALL;
- }
- break;
-
- case DELKEY:
- if (pld->searchstr[0] && pld->searchstr[1]) {
- short len= strlen(pld->searchstr);
- short index= pld->search_cursor;
- int i;
-
- if (index < len) {
- for (i = index; i < len; i++)
- pld->searchstr[i] = pld->searchstr[i+1];
-
- poselib_preview_get_next(pld, 1);
- pld->redraw = PL_PREVIEW_REDRAWALL;
- }
- }
- break;
- }
- }
}
/* handle events for poselib_preview_poses */
-static void poselib_preview_handle_event (tPoseLib_PreviewData *pld, unsigned short event, char ascii)
+static int poselib_preview_handle_event (bContext *C, wmOperator *op, wmEvent *event)
{
+ tPoseLib_PreviewData *pld= op->customdata;
+ int ret = OPERATOR_RUNNING_MODAL;
+
/* backup stuff that needs to occur before every operation
* - make a copy of searchstr, so that we know if cache needs to be rebuilt
*/
@@ -931,7 +1057,7 @@ static void poselib_preview_handle_event (tPoseLib_PreviewData *pld, unsigned sh
/* if we're currently showing the original pose, only certain events are handled */
if (pld->flag & PL_PREVIEW_SHOWORIGINAL) {
- switch (event) {
+ switch (event->type) {
/* exit - cancel */
case ESCKEY:
case RIGHTMOUSE:
@@ -947,33 +1073,33 @@ static void poselib_preview_handle_event (tPoseLib_PreviewData *pld, unsigned sh
break;
/* view manipulation */
- case MIDDLEMOUSE:
- // there's a little bug here that causes the normal header to get drawn while view is manipulated
- // XXX handle_view_middlemouse();
- pld->redraw= PL_PREVIEW_REDRAWHEADER;
- break;
-
- /* view manipulation, or searching */
+ /* we add pass through here, so that the operators responsible for these can still run,
+ * even though we still maintain control (as RUNNING_MODAL flag is still set too)
+ */
case PAD0: case PAD1: case PAD2: case PAD3: case PAD4:
case PAD5: case PAD6: case PAD7: case PAD8: case PAD9:
- case PADPLUSKEY: case PADMINUS:
- //persptoetsen(event);
- pld->redraw= PL_PREVIEW_REDRAWHEADER;
+ case PADPLUSKEY: case PADMINUS: case MIDDLEMOUSE:
+ //pld->redraw= PL_PREVIEW_REDRAWHEADER;
+ ret |= OPERATOR_PASS_THROUGH;
break;
+ /* quicky compare to original */
case TABKEY:
- pld->flag &= ~PL_PREVIEW_SHOWORIGINAL;
- pld->redraw= PL_PREVIEW_REDRAWALL;
+ /* only respond to one event */
+ if (event->val == 0) {
+ pld->flag &= ~PL_PREVIEW_SHOWORIGINAL;
+ pld->redraw= PL_PREVIEW_REDRAWALL;
+ }
break;
}
/* EXITS HERE... */
- return;
+ return ret;
}
/* NORMAL EVENT HANDLING... */
/* searching takes priority over normal activity */
- switch (event) {
+ switch (event->type) {
/* exit - cancel */
case ESCKEY:
case RIGHTMOUSE:
@@ -990,8 +1116,11 @@ static void poselib_preview_handle_event (tPoseLib_PreviewData *pld, unsigned sh
/* toggle between original pose and poselib pose*/
case TABKEY:
- pld->flag |= PL_PREVIEW_SHOWORIGINAL;
- pld->redraw= PL_PREVIEW_REDRAWALL;
+ /* only respond to one event */
+ if (event->val == 0) {
+ pld->flag |= PL_PREVIEW_SHOWORIGINAL;
+ pld->redraw= PL_PREVIEW_REDRAWALL;
+ }
break;
/* change to previous pose (cyclic) */
@@ -1079,12 +1208,14 @@ static void poselib_preview_handle_event (tPoseLib_PreviewData *pld, unsigned sh
pld->redraw= PL_PREVIEW_REDRAWALL;
}
break;
-
+
/* view manipulation */
+ /* we add pass through here, so that the operators responsible for these can still run,
+ * even though we still maintain control (as RUNNING_MODAL flag is still set too)
+ */
case MIDDLEMOUSE:
- // there's a little bug here that causes the normal header to get drawn while view is manipulated
- // XXX handle_view_middlemouse();
- pld->redraw= PL_PREVIEW_REDRAWHEADER;
+ //pld->redraw= PL_PREVIEW_REDRAWHEADER;
+ ret |= OPERATOR_PASS_THROUGH;
break;
/* view manipulation, or searching */
@@ -1092,67 +1223,88 @@ static void poselib_preview_handle_event (tPoseLib_PreviewData *pld, unsigned sh
case PAD5: case PAD6: case PAD7: case PAD8: case PAD9:
case PADPLUSKEY: case PADMINUS:
if (pld->searchstr[0]) {
- poselib_preview_handle_search(pld, event, ascii);
+ /* searching... */
+ poselib_preview_handle_search(pld, event->type, event->ascii);
}
else {
- persptoetsen(event);
- pld->redraw= PL_PREVIEW_REDRAWHEADER;
+ /* view manipulation (see above) */
+ //pld->redraw= PL_PREVIEW_REDRAWHEADER;
+ ret |= OPERATOR_PASS_THROUGH;
}
break;
/* otherwise, assume that searching might be able to handle it */
default:
- poselib_preview_handle_search(pld, event, ascii);
+ poselib_preview_handle_search(pld, event->type, event->ascii);
break;
}
+
+ return ret;
}
/* ---------------------------- */
/* Init PoseLib Previewing data */
-static void poselib_preview_init_data (tPoseLib_PreviewData *pld, Object *ob, short apply_active)
+static void poselib_preview_init_data (bContext *C, wmOperator *op)
{
- /* clear pld first as it resides on the stack */
- memset(pld, 0, sizeof(tPoseLib_PreviewData));
+ tPoseLib_PreviewData *pld;
+ Object *ob= CTX_data_active_object(C);
+ int pose_index = RNA_int_get(op->ptr, "pose_index");
+
+ /* set up preview state info */
+ op->customdata= pld= MEM_callocN(sizeof(tPoseLib_PreviewData), "PoseLib Preview Data");
/* get basic data */
pld->ob= ob;
pld->arm= (ob) ? (ob->data) : NULL;
pld->pose= (ob) ? (ob->pose) : NULL;
pld->act= (ob) ? (ob->poselib) : NULL;
- pld->marker= poselib_get_active_pose(pld->act);
+
+ pld->scene= CTX_data_scene(C);
+ pld->sa= CTX_wm_area(C);
+
+ /* get starting pose based on RNA-props for this operator */
+ if (pose_index == -1)
+ pld->marker= poselib_get_active_pose(pld->act);
+ else if (pose_index == -2)
+ pld->flag |= PL_PREVIEW_SHOWORIGINAL;
+ else
+ pld->marker= (pld->act) ? BLI_findlink(&pld->act->markers, pose_index) : NULL;
/* check if valid poselib */
if (ELEM3(NULL, pld->ob, pld->pose, pld->arm)) {
- error("PoseLib is only for Armatures in PoseMode");
+ BKE_report(op->reports, RPT_ERROR, "PoseLib is only for Armatures in PoseMode");
pld->state= PL_PREVIEW_ERROR;
return;
}
if (pld->act == NULL) {
- error("Object doesn't have a valid PoseLib");
+ BKE_report(op->reports, RPT_ERROR, "Object doesn't have a valid PoseLib");
pld->state= PL_PREVIEW_ERROR;
return;
}
if (pld->marker == NULL) {
- if ((apply_active==0) && (pld->act->markers.first)) {
+ if (pld->act->markers.first) {
/* just use first one then... */
pld->marker= pld->act->markers.first;
- printf("PoseLib had no active pose\n");
+ if (pose_index > -2) printf("PoseLib had no active pose\n");
}
else {
- error("PoseLib has no poses to preview/apply");
+ BKE_report(op->reports, RPT_ERROR, "PoseLib has no poses to preview/apply");
pld->state= PL_PREVIEW_ERROR;
return;
}
}
+ /* get ID pointer for applying poses */
+ RNA_id_pointer_create(&ob->id, &pld->rna_ptr);
+
/* make backups for restoring pose */
poselib_backup_posecopy(pld);
/* set flags for running */
- pld->state= (apply_active) ? PL_PREVIEW_RUNONCE : PL_PREVIEW_RUNNING;
+ pld->state= PL_PREVIEW_RUNNING;
pld->redraw= PL_PREVIEW_REDRAWALL;
- pld->flag= PL_PREVIEW_FIRSTTIME;
+ pld->flag |= PL_PREVIEW_FIRSTTIME;
/* set depsgraph flags */
/* make sure the lock is set OK, unlock can be accidentally saved? */
@@ -1167,14 +1319,19 @@ static void poselib_preview_init_data (tPoseLib_PreviewData *pld, Object *ob, sh
}
/* After previewing poses */
-static void poselib_preview_cleanup (Scene *scene, tPoseLib_PreviewData *pld)
+static void poselib_preview_cleanup (bContext *C, wmOperator *op)
{
+ tPoseLib_PreviewData *pld= (tPoseLib_PreviewData *)op->customdata;
+ Scene *scene= pld->scene;
Object *ob= pld->ob;
bPose *pose= pld->pose;
bArmature *arm= pld->arm;
bAction *act= pld->act;
TimeMarker *marker= pld->marker;
+ /* redraw the header so that it doesn't show any of our stuff anymore */
+ ED_area_headerprint(pld->sa, NULL);
+
/* this signal does one recalc on pose, then unlocks, so ESC or edit will work */
pose->flag |= POSE_DO_UNLOCK;
@@ -1204,8 +1361,7 @@ static void poselib_preview_cleanup (Scene *scene, tPoseLib_PreviewData *pld)
/* updates */
if (IS_AUTOKEY_MODE(scene, NORMAL)) {
- remake_action_ipos(ob->action);
-
+ //remake_action_ipos(ob->action);
}
else {
/* need to trick depgraph, action is not allowed to execute on pose */
@@ -1217,117 +1373,124 @@ static void poselib_preview_cleanup (Scene *scene, tPoseLib_PreviewData *pld)
/* free memory used for backups */
BLI_freelistN(&pld->backups);
BLI_freelistN(&pld->searchp);
+
+ /* free temp data for operator */
+ MEM_freeN(pld);
+ op->customdata= NULL;
}
+/* End previewing operation */
+static int poselib_preview_exit (bContext *C, wmOperator *op)
+{
+ tPoseLib_PreviewData *pld= op->customdata;
+
+ /* finish up */
+ poselib_preview_cleanup(C, op);
+
+ if (ELEM(pld->state, PL_PREVIEW_CANCEL, PL_PREVIEW_ERROR))
+ return OPERATOR_CANCELLED;
+ else
+ return OPERATOR_FINISHED;
+}
+/* Cancel previewing operation (called when exiting Blender) */
+static int poselib_preview_cancel (bContext *C, wmOperator *op)
+{
+ poselib_preview_exit(C, op);
+ return OPERATOR_CANCELLED;
+}
-/* This tool allows users to preview the pose from the pose-lib using the mouse-scrollwheel/pageupdown
- * It is also used to apply the active poselib pose only
- */
-void poselib_preview_poses (Scene *scene, Object *ob, short apply_active)
+/* main modal status check */
+static int poselib_preview_modal (bContext *C, wmOperator *op, wmEvent *event)
{
- tPoseLib_PreviewData pld;
+ tPoseLib_PreviewData *pld= op->customdata;
+ int ret;
- unsigned short event;
- short val=0;
- char ascii;
+ /* 1) check state to see if we're still running */
+ if (pld->state != PL_PREVIEW_RUNNING)
+ return poselib_preview_exit(C, op);
- /* check if valid poselib */
- poselib_preview_init_data(&pld, ob, apply_active);
- if (pld.state == PL_PREVIEW_ERROR)
- return;
-
- /* start preview loop */
- while (ELEM(pld.state, PL_PREVIEW_RUNNING, PL_PREVIEW_RUNONCE)) {
- /* preview a pose */
- if (pld.redraw) {
- /* only recalc pose (and its dependencies) if pose has changed */
- if (pld.redraw == PL_PREVIEW_REDRAWALL) {
- /* don't clear pose if firsttime */
- if ((pld.flag & PL_PREVIEW_FIRSTTIME)==0)
- poselib_backup_restore(&pld);
- else
- pld.flag &= ~PL_PREVIEW_FIRSTTIME;
-
- /* pose should be the right one to draw (unless we're temporarily not showing it) */
- if ((pld.flag & PL_PREVIEW_SHOWORIGINAL)==0)
- poselib_apply_pose(&pld);
-
- /* old optimize trick... this enforces to bypass the depgraph
- * - note: code copied from transform_generics.c -> recalcData()
- */
- if ((pld.arm->flag & ARM_DELAYDEFORM)==0)
- DAG_object_flush_update(scene, ob, OB_RECALC_DATA); /* sets recalc flags */
- else
- where_is_pose(scene, ob);
- }
-
- /* do header print - if interactively previewing */
- if (pld.state == PL_PREVIEW_RUNNING) {
- if (pld.flag & PL_PREVIEW_SHOWORIGINAL) {
- sprintf(pld.headerstr, "PoseLib Previewing Pose: [Showing Original Pose] | Use Tab to start previewing poses again");
- headerprint(pld.headerstr);
- }
- else if (pld.searchstr[0]) {
- char tempstr[65];
- char markern[64];
- short index;
-
- /* get search-string */
- index= pld.search_cursor;
-
- if (IN_RANGE(index, 0, 64)) {
- memcpy(&tempstr[0], &pld.searchstr[0], index);
- tempstr[index]= '|';
- memcpy(&tempstr[index+1], &pld.searchstr[index], 64-index);
- }
- else {
- strncpy(tempstr, pld.searchstr, 64);
- }
-
- /* get marker name */
- if (pld.marker)
- strcpy(markern, pld.marker->name);
- else
- strcpy(markern, "No Matches");
-
- sprintf(pld.headerstr, "PoseLib Previewing Pose: Filter - [%s] | Current Pose - \"%s\" | Use ScrollWheel or PageUp/Down to change", tempstr, markern);
- headerprint(pld.headerstr);
- }
- else {
- sprintf(pld.headerstr, "PoseLib Previewing Pose: \"%s\" | Use ScrollWheel or PageUp/Down to change", pld.marker->name);
- headerprint(pld.headerstr);
- }
- }
-
- /* force drawing of view + clear redraw flag */
- // XXX force_draw(0);
- pld.redraw= PL_PREVIEW_NOREDRAW;
- }
-
- /* stop now if only running once */
- if (pld.state == PL_PREVIEW_RUNONCE) {
- pld.state = PL_PREVIEW_CONFIRM;
- break;
- }
-
- /* essential for idling subloop */
- if (qtest() == 0)
- PIL_sleep_ms(2);
-
- /* emptying queue and reading events */
- while ( qtest() ) {
- event= extern_qread_ext(&val, &ascii);
-
- /* event processing */
- if (val) {
- poselib_preview_handle_event(&pld, event, ascii);
- }
- }
+ /* 2) handle events */
+ ret= poselib_preview_handle_event(C, op, event);
+
+ /* 3) apply changes and redraw, otherwise, confirming goes wrong */
+ if (pld->redraw)
+ poselib_preview_apply(C, op);
+
+ return ret;
+}
+
+/* Modal Operator init */
+static int poselib_preview_invoke(bContext *C, wmOperator *op, wmEvent *event)
+{
+ tPoseLib_PreviewData *pld;
+
+ /* check if everything is ok, and init settings for modal operator */
+ poselib_preview_init_data(C, op);
+ pld= (tPoseLib_PreviewData *)op->customdata;
+
+ if (pld->state == PL_PREVIEW_ERROR) {
+ /* an error occurred, so free temp mem used */
+ poselib_preview_cleanup(C, op);
+ return OPERATOR_CANCELLED;
}
- /* finish up */
- poselib_preview_cleanup(scene, &pld);
+ /* do initial apply to have something to look at */
+ poselib_preview_apply(C, op);
+
+ /* add temp handler if we're running as a modal operator */
+ WM_event_add_modal_handler(C, &CTX_wm_window(C)->handlers, op);
+
+ return OPERATOR_RUNNING_MODAL;
+}
+
+/* Repeat operator */
+static int poselib_preview_exec (bContext *C, wmOperator *op)
+{
+ tPoseLib_PreviewData *pld;
+
+ /* check if everything is ok, and init settings for modal operator */
+ poselib_preview_init_data(C, op);
+ pld= (tPoseLib_PreviewData *)op->customdata;
+
+ if (pld->state == PL_PREVIEW_ERROR) {
+ /* an error occurred, so free temp mem used */
+ poselib_preview_cleanup(C, op);
+ return OPERATOR_CANCELLED;
+ }
+
+ /* the exec() callback is effectively a 'run-once' scenario, so set the state to that
+ * so that everything draws correctly
+ */
+ pld->state = PL_PREVIEW_RUNONCE;
+
+ /* apply the active pose */
+ poselib_preview_apply(C, op);
+
+ /* now, set the status to exit */
+ pld->state = PL_PREVIEW_CONFIRM;
+
+ /* cleanup */
+ return poselib_preview_exit(C, op);
+}
+
+void POSELIB_OT_browse_interactive (wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "PoseLib Browse Poses";
+ ot->idname= "POSELIB_OT_browse_interactive";
+ ot->description= "Interactively browse poses in 3D-View";
+
+ /* api callbacks */
+ ot->invoke= poselib_preview_invoke;
+ ot->modal= poselib_preview_modal;
+ ot->cancel= poselib_preview_cancel;
+ ot->exec= poselib_preview_exec;
+ ot->poll= ED_operator_posemode;
+
+ /* flags */
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
- BIF_undo_push("PoseLib Apply Pose");
+ /* properties */
+ RNA_def_int(ot->srna, "pose_index", -1, -2, INT_MAX, "Pose", "Index of the pose to apply (-2 for no change to pose, -1 for poselib active pose)", 0, INT_MAX);
}
diff --git a/source/blender/editors/armature/poseobject.c b/source/blender/editors/armature/poseobject.c
index ae82c063435..3d8d446c579 100644
--- a/source/blender/editors/armature/poseobject.c
+++ b/source/blender/editors/armature/poseobject.c
@@ -970,7 +970,7 @@ void pose_add_posegroup (Scene *scene)
grp= MEM_callocN(sizeof(bActionGroup), "PoseGroup");
strcpy(grp->name, "Group");
BLI_addtail(&pose->agroups, grp);
- BLI_uniquename(&pose->agroups, grp, "Group", offsetof(bActionGroup, name), 32);
+ BLI_uniquename(&pose->agroups, grp, "Group", '.', offsetof(bActionGroup, name), 32);
pose->active_group= BLI_countlist(&pose->agroups);
@@ -1237,7 +1237,6 @@ static short pose_select_same_layer (Object *ob)
return changed;
}
-
void pose_select_grouped (Scene *scene, short nr)
{
short changed = 0;
@@ -1669,9 +1668,7 @@ void pose_special_editmenu(Scene *scene)
pose_clear_paths(ob);
}
else if(nr==5) {
- rest_pose(ob->pose);
- DAG_object_flush_update(scene, ob, OB_RECALC_DATA);
- BIF_undo_push("Clear User Transform Pose");
+ pose_clear_user_transforms(scene, ob);
}
else if(nr==6) {
pose_relax();
@@ -1682,3 +1679,29 @@ void pose_special_editmenu(Scene *scene)
#endif
}
+/* Restore selected pose-bones to 'action'-defined pose */
+void pose_clear_user_transforms(Scene *scene, Object *ob)
+{
+ bArmature *arm= ob->data;
+ bPoseChannel *pchan;
+
+ if (ob->pose == NULL)
+ return;
+
+ /* find selected bones */
+ for (pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) {
+ if (pchan->bone && (pchan->bone->flag & BONE_SELECTED) && (pchan->bone->layer & arm->layer)) {
+ /* just clear the BONE_UNKEYED flag, allowing this bone to get overwritten by actions again */
+ pchan->bone->flag &= ~BONE_UNKEYED;
+ }
+ }
+
+ /* clear pose locking flag
+ * - this will only clear the user-defined pose in the selected bones, where BONE_UNKEYED has been cleared
+ */
+ ob->pose->flag |= POSE_DO_UNLOCK;
+
+ DAG_object_flush_update(scene, ob, OB_RECALC_DATA);
+ BIF_undo_push("Clear User Transform");
+}
+
diff --git a/source/blender/editors/armature/reeb.c b/source/blender/editors/armature/reeb.c
index a197172fff8..f8c17f80391 100644
--- a/source/blender/editors/armature/reeb.c
+++ b/source/blender/editors/armature/reeb.c
@@ -53,8 +53,6 @@
//#include "BDR_editobject.h"
-#include "BMF_Api.h"
-
#include "ED_mesh.h"
#include "ED_armature.h"
//#include "BIF_interface.h"
@@ -1740,10 +1738,10 @@ int filterCyclesReebGraph(ReebGraph *rg, float distance_threshold)
int filterSmartReebGraph(ReebGraph *rg, float threshold)
{
- ReebArc *arc = NULL, *nextArc = NULL;
int value = 0;
+#if 0 //XXX
+ ReebArc *arc = NULL, *nextArc = NULL;
- #if 0 //XXX
BLI_sortlist(&rg->arcs, compareArcs);
#ifdef DEBUG_REEB
@@ -3403,7 +3401,7 @@ ReebGraph *BIF_ReebGraphMultiFromEditMesh(bContext *C)
if (weightFromDistance(em, &indexed_edges) == 0)
{
- error("No selected vertex\n");
+ // XXX error("No selected vertex\n");
freeEdgeIndex(&indexed_edges);
return NULL;
}
diff --git a/source/blender/editors/curve/Makefile b/source/blender/editors/curve/Makefile
index b27749ce6fd..6b1f628f231 100644
--- a/source/blender/editors/curve/Makefile
+++ b/source/blender/editors/curve/Makefile
@@ -38,7 +38,6 @@ CFLAGS += $(LEVEL_1_C_WARNINGS)
CPPFLAGS += -I$(NAN_GLEW)/include
CPPFLAGS += -I$(OPENGL_HEADERS)
-CPPFLAGS += -I$(NAN_BMFONT)/include
CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include
CPPFLAGS += -I$(NAN_ELBEEM)/include
diff --git a/source/blender/editors/curve/SConscript b/source/blender/editors/curve/SConscript
index 92c982db611..3a1930899d3 100644
--- a/source/blender/editors/curve/SConscript
+++ b/source/blender/editors/curve/SConscript
@@ -5,7 +5,7 @@ sources = env.Glob('*.c')
incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../imbuf'
incs += ' ../../windowmanager #/intern/guardedalloc #/extern/glew/include'
-incs += ' #/intern/guardedalloc #intern/bmfont ../../gpu'
+incs += ' #/intern/guardedalloc ../../gpu'
incs += ' ../../makesrna ../../render/extern/include #/intern/elbeem/extern'
env.BlenderLib ( 'bf_editors_curve', sources, Split(incs), [], libtype=['core'], priority=[45] )
diff --git a/source/blender/editors/curve/curve_intern.h b/source/blender/editors/curve/curve_intern.h
index 71684ceae7a..a73a54323ee 100644
--- a/source/blender/editors/curve/curve_intern.h
+++ b/source/blender/editors/curve/curve_intern.h
@@ -41,7 +41,7 @@ enum { CASE_LOWER, CASE_UPPER };
enum { LINE_BEGIN, LINE_END, PREV_CHAR, NEXT_CHAR, PREV_WORD, NEXT_WORD,
PREV_LINE, NEXT_LINE, PREV_PAGE, NEXT_PAGE };
-void FONT_OT_insert_text(struct wmOperatorType *ot);
+void FONT_OT_text_insert(struct wmOperatorType *ot);
void FONT_OT_line_break(struct wmOperatorType *ot);
void FONT_OT_insert_lorem(struct wmOperatorType *ot);
@@ -51,11 +51,11 @@ void FONT_OT_style_toggle(struct wmOperatorType *ot);
void FONT_OT_style_set(struct wmOperatorType *ot);
void FONT_OT_material_set(struct wmOperatorType *ot);
-void FONT_OT_copy_text(struct wmOperatorType *ot);
-void FONT_OT_cut_text(struct wmOperatorType *ot);
-void FONT_OT_paste_text(struct wmOperatorType *ot);
-void FONT_OT_paste_file(struct wmOperatorType *ot);
-void FONT_OT_paste_buffer(struct wmOperatorType *ot);
+void FONT_OT_text_copy(struct wmOperatorType *ot);
+void FONT_OT_text_cut(struct wmOperatorType *ot);
+void FONT_OT_text_paste(struct wmOperatorType *ot);
+void FONT_OT_file_paste(struct wmOperatorType *ot);
+void FONT_OT_buffer_paste(struct wmOperatorType *ot);
void FONT_OT_move(struct wmOperatorType *ot);
void FONT_OT_move_select(struct wmOperatorType *ot);
@@ -99,7 +99,7 @@ void CURVE_OT_switch_direction(struct wmOperatorType *ot);
void CURVE_OT_subdivide(struct wmOperatorType *ot);
void CURVE_OT_make_segment(struct wmOperatorType *ot);
void CURVE_OT_spin(struct wmOperatorType *ot);
-void CURVE_OT_add_vertex(struct wmOperatorType *ot);
+void CURVE_OT_vertex_add(struct wmOperatorType *ot);
void CURVE_OT_extrude(struct wmOperatorType *ot);
void CURVE_OT_cyclic_toggle(struct wmOperatorType *ot);
diff --git a/source/blender/editors/curve/curve_ops.c b/source/blender/editors/curve/curve_ops.c
index a0390fe1084..5292d86d3c9 100644
--- a/source/blender/editors/curve/curve_ops.c
+++ b/source/blender/editors/curve/curve_ops.c
@@ -67,16 +67,18 @@
static int specials_menu_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
- uiMenuItem *head;
-
- head= uiPupMenuBegin("Specials", 0);
- uiMenuItemO(head, 0, "CURVE_OT_subdivide");
- uiMenuItemO(head, 0, "CURVE_OT_switch_direction");
- uiMenuItemO(head, 0, "CURVE_OT_spline_weight_set");
- uiMenuItemO(head, 0, "CURVE_OT_radius_set");
- uiMenuItemO(head, 0, "CURVE_OT_smooth");
- uiMenuItemO(head, 0, "CURVE_OT_smooth_radius");
- uiPupMenuEnd(C, head);
+ uiPopupMenu *pup;
+ uiLayout *layout;
+
+ pup= uiPupMenuBegin(C, "Specials", 0);
+ layout= uiPupMenuLayout(pup);
+ uiItemO(layout, NULL, 0, "CURVE_OT_subdivide");
+ uiItemO(layout, NULL, 0, "CURVE_OT_switch_direction");
+ uiItemO(layout, NULL, 0, "CURVE_OT_spline_weight_set");
+ uiItemO(layout, NULL, 0, "CURVE_OT_radius_set");
+ uiItemO(layout, NULL, 0, "CURVE_OT_smooth");
+ uiItemO(layout, NULL, 0, "CURVE_OT_smooth_radius");
+ uiPupMenuEnd(C, pup);
return OPERATOR_CANCELLED;
}
@@ -96,7 +98,7 @@ void CURVE_OT_specials_menu(wmOperatorType *ot)
void ED_operatortypes_curve(void)
{
- WM_operatortype_append(FONT_OT_insert_text);
+ WM_operatortype_append(FONT_OT_text_insert);
WM_operatortype_append(FONT_OT_line_break);
WM_operatortype_append(FONT_OT_insert_lorem);
@@ -106,11 +108,11 @@ void ED_operatortypes_curve(void)
WM_operatortype_append(FONT_OT_style_set);
WM_operatortype_append(FONT_OT_material_set);
- WM_operatortype_append(FONT_OT_copy_text);
- WM_operatortype_append(FONT_OT_cut_text);
- WM_operatortype_append(FONT_OT_paste_text);
- WM_operatortype_append(FONT_OT_paste_file);
- WM_operatortype_append(FONT_OT_paste_buffer);
+ WM_operatortype_append(FONT_OT_text_copy);
+ WM_operatortype_append(FONT_OT_text_cut);
+ WM_operatortype_append(FONT_OT_text_paste);
+ WM_operatortype_append(FONT_OT_file_paste);
+ WM_operatortype_append(FONT_OT_buffer_paste);
WM_operatortype_append(FONT_OT_move);
WM_operatortype_append(FONT_OT_move_select);
@@ -153,7 +155,7 @@ void ED_operatortypes_curve(void)
WM_operatortype_append(CURVE_OT_subdivide);
WM_operatortype_append(CURVE_OT_make_segment);
WM_operatortype_append(CURVE_OT_spin);
- WM_operatortype_append(CURVE_OT_add_vertex);
+ WM_operatortype_append(CURVE_OT_vertex_add);
WM_operatortype_append(CURVE_OT_extrude);
WM_operatortype_append(CURVE_OT_cyclic_toggle);
@@ -200,18 +202,18 @@ void ED_keymap_curve(wmWindowManager *wm)
RNA_int_set(WM_keymap_add_item(keymap, "FONT_OT_change_character", UPARROWKEY, KM_PRESS, KM_ALT, 0)->ptr, "delta", 1);
RNA_int_set(WM_keymap_add_item(keymap, "FONT_OT_change_character", DOWNARROWKEY, KM_PRESS, KM_ALT, 0)->ptr, "delta", -1);
- WM_keymap_add_item(keymap, "FONT_OT_copy_text", CKEY, KM_PRESS, KM_CTRL, 0);
- WM_keymap_add_item(keymap, "FONT_OT_cut_text", XKEY, KM_PRESS, KM_CTRL, 0);
- WM_keymap_add_item(keymap, "FONT_OT_paste_text", PKEY, KM_PRESS, KM_CTRL, 0);
+ WM_keymap_add_item(keymap, "FONT_OT_text_copy", CKEY, KM_PRESS, KM_CTRL, 0);
+ WM_keymap_add_item(keymap, "FONT_OT_text_cut", XKEY, KM_PRESS, KM_CTRL, 0);
+ WM_keymap_add_item(keymap, "FONT_OT_text_paste", PKEY, KM_PRESS, KM_CTRL, 0);
WM_keymap_add_item(keymap, "FONT_OT_line_break", RETKEY, KM_PRESS, 0, 0);
- WM_keymap_add_item(keymap, "FONT_OT_insert_text", KM_TEXTINPUT, KM_ANY, KM_ANY, 0); // last!
+ WM_keymap_add_item(keymap, "FONT_OT_text_insert", KM_TEXTINPUT, KM_ANY, KM_ANY, 0); // last!
/* only set in editmode curve, by space_view3d listener */
keymap= WM_keymap_listbase(wm, "Curve", 0, 0);
WM_keymap_add_item(keymap, "OBJECT_OT_curve_add", AKEY, KM_PRESS, KM_SHIFT, 0);
- WM_keymap_add_item(keymap, "CURVE_OT_add_vertex", ACTIONMOUSE, KM_PRESS, KM_CTRL, 0);
+ WM_keymap_add_item(keymap, "CURVE_OT_vertex_add", ACTIONMOUSE, KM_PRESS, KM_CTRL, 0);
WM_keymap_add_item(keymap, "CURVE_OT_select_all_toggle", AKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "CURVE_OT_select_row", RKEY, KM_PRESS, KM_SHIFT, 0);
diff --git a/source/blender/editors/curve/editcurve.c b/source/blender/editors/curve/editcurve.c
index ce639e4bfc1..45b9a589bd5 100644
--- a/source/blender/editors/curve/editcurve.c
+++ b/source/blender/editors/curve/editcurve.c
@@ -38,8 +38,6 @@
#include <stdlib.h>
#include "MEM_guardedalloc.h"
-#include "BMF_Api.h"
-
#include "BLI_blenlib.h"
#include "BLI_arithb.h"
#include "BLI_dynstr.h"
@@ -652,7 +650,7 @@ static int deleteflagNurb(bContext *C, wmOperator *op, int flag)
nu->bp= newbp;
clamp_nurb_order_v(nu);
- makeknots(nu, 2, nu->flagv>>1);
+ makeknots(nu, 2);
}
else {
/* is the nurb in V direction selected */
@@ -698,7 +696,7 @@ static int deleteflagNurb(bContext *C, wmOperator *op, int flag)
nu->pntsu= newu;
clamp_nurb_order_u(nu);
}
- makeknots(nu, 1, nu->flagu>>1);
+ makeknots(nu, 1);
}
}
}
@@ -746,7 +744,7 @@ static short extrudeflagNurb(ListBase *editnurb, int flag)
nu->pntsv= 2;
nu->orderv= 2;
- makeknots(nu, 2, nu->flagv>>1);
+ makeknots(nu, 2);
}
}
else {
@@ -789,7 +787,7 @@ static short extrudeflagNurb(ListBase *editnurb, int flag)
MEM_freeN(nu->bp);
nu->bp= newbp;
nu->pntsv++;
- makeknots(nu, 2, nu->flagv>>1);
+ makeknots(nu, 2);
}
else if(v==0 || v== nu->pntsu-1) { /* collumn in v-direction selected */
ok= 1;
@@ -816,7 +814,7 @@ static short extrudeflagNurb(ListBase *editnurb, int flag)
MEM_freeN(nu->bp);
nu->bp= newbp;
nu->pntsu++;
- makeknots(nu, 1, nu->flagu>>1);
+ makeknots(nu, 1);
}
}
}
@@ -911,7 +909,7 @@ static void adduplicateflagNurb(Object *obedit, short flag)
/* knots */
newnu->knotsu= NULL;
- makeknots(newnu, 1, newnu->flagu>>1);
+ makeknots(newnu, 1);
}
bp++;
}
@@ -975,14 +973,14 @@ static void adduplicateflagNurb(Object *obedit, short flag)
if(nu->pntsu==newnu->pntsu && nu->knotsu) {
newnu->knotsu= MEM_dupallocN( nu->knotsu );
} else {
- makeknots(newnu, 1, newnu->flagu>>1);
+ makeknots(newnu, 1);
}
}
if (check_valid_nurb_v(newnu)) {
if(nu->pntsv==newnu->pntsv && nu->knotsv) {
newnu->knotsv= MEM_dupallocN( nu->knotsv );
} else {
- makeknots(newnu, 2, newnu->flagv>>1);
+ makeknots(newnu, 2);
}
}
}
@@ -1069,10 +1067,9 @@ void CURVE_OT_spline_weight_set(wmOperatorType *ot)
/* api callbacks */
ot->exec= set_weight_exec;
+ ot->invoke= WM_operator_redo;
ot->poll= ED_operator_editsurfcurve;
- // XXX invoke popup?
-
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
@@ -1121,10 +1118,9 @@ void CURVE_OT_radius_set(wmOperatorType *ot)
/* api callbacks */
ot->exec= set_radius_exec;
+ ot->invoke= WM_operator_redo;
ot->poll= ED_operator_editsurfcurve;
- // XXX invoke popup?
-
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
@@ -1964,8 +1960,8 @@ static int subdivide_exec(bContext *C, wmOperator *op)
nu->bp= bpnew;
nu->pntsu+= amount;
- if(nu->type & 4) {
- makeknots(nu, 1, nu->flagu>>1);
+ if(nu->type & CU_NURBS) {
+ makeknots(nu, 1);
}
}
} /* End of 'else if(nu->pntsv==1)' */
@@ -2076,8 +2072,8 @@ static int subdivide_exec(bContext *C, wmOperator *op)
nu->bp= bpnew;
nu->pntsu= 2*nu->pntsu-1;
nu->pntsv= 2*nu->pntsv-1;
- makeknots(nu, 1, nu->flagu>>1);
- makeknots(nu, 2, nu->flagv>>1);
+ makeknots(nu, 1);
+ makeknots(nu, 2);
} /* End of 'if(sel== nu->pntsu*nu->pntsv)' (subdivide entire NURB) */
else {
/* subdivide in v direction? */
@@ -2120,7 +2116,7 @@ static int subdivide_exec(bContext *C, wmOperator *op)
MEM_freeN(nu->bp);
nu->bp= bpnew;
nu->pntsv+= sel;
- makeknots(nu, 2, nu->flagv>>1);
+ makeknots(nu, 2);
}
else {
/* or in u direction? */
@@ -2160,7 +2156,7 @@ static int subdivide_exec(bContext *C, wmOperator *op)
MEM_freeN(nu->bp);
nu->bp= bpnew;
nu->pntsu+= sel;
- makeknots(nu, 1, nu->flagu>>1); /* shift knots
+ makeknots(nu, 1); /* shift knots
forward */
}
}
@@ -2318,7 +2314,7 @@ static int convertspline(short type, Nurb *nu)
BPoint *bp;
int a, c, nr;
- if((nu->type & 7)==0) { /* Poly */
+ if((nu->type & 7)==CU_POLY) {
if(type==CU_BEZIER) { /* to Bezier with vecthandles */
nr= nu->pntsu;
bezt =
@@ -2339,16 +2335,16 @@ static int convertspline(short type, Nurb *nu)
nu->bp= 0;
nu->pntsu= nr;
nu->type &= ~7;
- nu->type |= 1;
+ nu->type |= CU_BEZIER;
calchandlesNurb(nu);
}
else if(type==CU_NURBS) {
nu->type &= ~7;
- nu->type+= 4;
+ nu->type |= CU_NURBS;
nu->orderu= 4;
nu->flagu &= CU_CYCLIC; /* disable all flags except for cyclic */
nu->flagu += 4;
- makeknots(nu, 1, nu->flagu>>1);
+ makeknots(nu, 1);
a= nu->pntsu*nu->pntsv;
bp= nu->bp;
while(a--) {
@@ -2402,7 +2398,7 @@ static int convertspline(short type, Nurb *nu)
if(type== 4) {
nu->flagu &= CU_CYCLIC; /* disable all flags except for cyclic */
nu->flagu += 4;
- makeknots(nu, 1, nu->flagu>>1);
+ makeknots(nu, 1);
}
}
}
@@ -2444,7 +2440,7 @@ static int convertspline(short type, Nurb *nu)
nu->knotsu= NULL;
nu->pntsu= nr;
nu->type &= ~7;
- nu->type+= 1;
+ nu->type |= CU_BEZIER;
}
}
}
@@ -2805,12 +2801,12 @@ static void merge_2_nurb(wmOperator *op, ListBase *editnurb, Nurb *nu1, Nurb *nu
}
}
- if((nu1->type & 7)==4) {
+ if((nu1->type & 7)==CU_NURBS) {
/* merge knots */
- makeknots(nu1, 1, nu1->flagu>>1);
+ makeknots(nu1, 1);
/* make knots, for merged curved for example */
- makeknots(nu1, 2, nu1->flagv>>1);
+ makeknots(nu1, 2);
}
MEM_freeN(temp);
@@ -2993,9 +2989,9 @@ static int make_segment_exec(bContext *C, wmOperator *op)
BLI_remlink(editnurb, nu2);
/* now join the knots */
- if((nu1->type & 7)==4) {
+ if((nu1->type & 7)==CU_NURBS) {
if(nu1->knotsu==NULL) {
- makeknots(nu1, 1, nu1->flagu>>1);
+ makeknots(nu1, 1);
}
else {
fp= MEM_mallocN(sizeof(float)*KNOTSU(nu1), "addsegment3");
@@ -3218,7 +3214,7 @@ static int spin_nurb(bContext *C, Scene *scene, Object *obedit, float *dvec, sho
if(isNurbsel(nu)) {
nu->orderv= 4;
nu->flagv |= CU_CYCLIC;
- makeknots(nu, 2, nu->flagv>>1);
+ makeknots(nu, 2);
}
}
}
@@ -3354,7 +3350,7 @@ static int addvert_Nurb(bContext *C, short mode, float location[3])
if(bp) {
nu->pntsu++;
- makeknots(nu, 1, nu->flagu>>1);
+ makeknots(nu, 1);
if(mode=='e') {
VECCOPY(newbp->vec, bp->vec);
@@ -3406,11 +3402,11 @@ static int add_vertex_invoke(bContext *C, wmOperator *op, wmEvent *event)
return add_vertex_exec(C, op);
}
-void CURVE_OT_add_vertex(wmOperatorType *ot)
+void CURVE_OT_vertex_add(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Add Vertex";
- ot->idname= "CURVE_OT_add_vertex";
+ ot->idname= "CURVE_OT_vertex_add";
/* api callbacks */
ot->exec= add_vertex_exec;
@@ -3494,7 +3490,7 @@ static int toggle_cyclic_exec(bContext *C, wmOperator *op)
for(nu= editnurb->first; nu; nu= nu->next) {
if( nu->pntsu>1 || nu->pntsv>1) {
- if( (nu->type & 7)==0 ) {
+ if( (nu->type & 7)==CU_POLY ) {
a= nu->pntsu;
bp= nu->bp;
while(a--) {
@@ -3524,7 +3520,7 @@ static int toggle_cyclic_exec(bContext *C, wmOperator *op)
while(a--) {
if( bp->f1 & SELECT ) {
nu->flagu ^= CU_CYCLIC;
- makeknots(nu, 1, nu->flagu>>1); /* 1==u type is ignored for cyclic curves */
+ makeknots(nu, 1); /* 1==u type is ignored for cyclic curves */
break;
}
bp++;
@@ -3539,11 +3535,11 @@ static int toggle_cyclic_exec(bContext *C, wmOperator *op)
if( bp->f1 & SELECT) {
if(direction==0 && nu->pntsu>1) {
nu->flagu ^= CU_CYCLIC;
- makeknots(nu, 1, nu->flagu>>1); /* 1==u type is ignored for cyclic curves */
+ makeknots(nu, 1); /* 1==u type is ignored for cyclic curves */
}
if(direction==1 && nu->pntsv>1) {
nu->flagv ^= CU_CYCLIC;
- makeknots(nu, 2, nu->flagv>>1); /* 2==v type is ignored for cyclic curves */
+ makeknots(nu, 2); /* 2==v type is ignored for cyclic curves */
}
break;
}
@@ -3564,15 +3560,17 @@ static int toggle_cyclic_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
Object *obedit= CTX_data_edit_object(C);
ListBase *editnurb= curve_get_editcurve(obedit);
- uiMenuItem *head;
+ uiPopupMenu *pup;
+ uiLayout *layout;
Nurb *nu;
for(nu= editnurb->first; nu; nu= nu->next) {
if(nu->pntsu>1 || nu->pntsv>1) {
if(nu->type==CU_NURBS) {
- head= uiPupMenuBegin("Direction", 0);
- uiMenuItemsEnumO(head, op->type->idname, "direction");
- uiPupMenuEnd(C, head);
+ pup= uiPupMenuBegin(C, "Direction", 0);
+ layout= uiPupMenuLayout(pup);
+ uiItemsEnumO(layout, op->type->idname, "direction");
+ uiPupMenuEnd(C, pup);
return OPERATOR_CANCELLED;
}
}
@@ -4147,9 +4145,8 @@ void CURVE_OT_select_random(wmOperatorType *ot)
/* api callbacks */
ot->exec= select_random_exec;
+ ot->invoke= WM_operator_redo;
ot->poll= ED_operator_editsurfcurve;
-
- // XXX invoke popup?
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
@@ -4182,9 +4179,8 @@ void CURVE_OT_select_every_nth(wmOperatorType *ot)
/* api callbacks */
ot->exec= select_every_nth_exec;
+ ot->invoke= WM_operator_redo;
ot->poll= ED_operator_editsurfcurve;
-
- // XXX invoke popup?
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
@@ -4353,7 +4349,7 @@ static int delete_exec(bContext *C, wmOperator *op)
clamp_nurb_order_u(nu);
}*/
}
- makeknots(nu, 1, nu->flagu>>1);
+ makeknots(nu, 1);
}
nu= next;
}
@@ -4511,18 +4507,21 @@ static int delete_exec(bContext *C, wmOperator *op)
static int delete_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
Object *obedit= CTX_data_edit_object(C);
- uiMenuItem *head;
+ uiPopupMenu *pup;
+ uiLayout *layout;
if(obedit->type==OB_SURF) {
- head= uiPupMenuBegin("Delete", 0);
- uiMenuItemEnumO(head, "", 0, op->type->idname, "type", 0);
- uiMenuItemEnumO(head, "", 0, op->type->idname, "type", 2);
- uiPupMenuEnd(C, head);
+ pup= uiPupMenuBegin(C, "Delete", 0);
+ layout= uiPupMenuLayout(pup);
+ uiItemEnumO(layout, NULL, 0, op->type->idname, "type", 0);
+ uiItemEnumO(layout, NULL, 0, op->type->idname, "type", 2);
+ uiPupMenuEnd(C, pup);
}
else {
- head= uiPupMenuBegin("Delete", 0);
- uiMenuItemsEnumO(head, op->type->idname, "type");
- uiPupMenuEnd(C, head);
+ pup= uiPupMenuBegin(C, "Delete", 0);
+ layout= uiPupMenuLayout(pup);
+ uiItemsEnumO(layout, op->type->idname, "type");
+ uiPupMenuEnd(C, pup);
}
return OPERATOR_CANCELLED;
@@ -4814,7 +4813,7 @@ Nurb *add_nurbs_primitive(bContext *C, int type, int newname)
if(cutype==CU_NURBS) {
nu->knotsu= 0; /* makeknots allocates */
- makeknots(nu, 1, nu->flagu>>1);
+ makeknots(nu, 1);
}
}
@@ -4849,7 +4848,7 @@ Nurb *add_nurbs_primitive(bContext *C, int type, int newname)
if(cutype==CU_NURBS) {
nu->knotsu= 0; /* makeknots allocates */
- makeknots(nu, 1, nu->flagu>>1);
+ makeknots(nu, 1);
}
break;
@@ -4934,7 +4933,7 @@ Nurb *add_nurbs_primitive(bContext *C, int type, int newname)
bp++;
}
- makeknots(nu, 1, nu->flagu>>1);
+ makeknots(nu, 1);
}
break;
case CU_PRIM_PATCH: /* 4x4 patch */
@@ -4971,8 +4970,8 @@ Nurb *add_nurbs_primitive(bContext *C, int type, int newname)
}
}
- makeknots(nu, 1, nu->flagu>>1);
- makeknots(nu, 2, nu->flagv>>1);
+ makeknots(nu, 1);
+ makeknots(nu, 2);
}
break;
case CU_PRIM_TUBE: /* tube */
@@ -5034,7 +5033,7 @@ Nurb *add_nurbs_primitive(bContext *C, int type, int newname)
bp++;
}
nu->flagu= 4;
- makeknots(nu, 1, nu->flagu>>1);
+ makeknots(nu, 1);
BLI_addtail(editnurb, nu); /* temporal for spin */
if(newname && (U.flag & USER_ADD_VIEWALIGNED) == 0)
@@ -5042,7 +5041,7 @@ Nurb *add_nurbs_primitive(bContext *C, int type, int newname)
else
spin_nurb(C, scene, obedit, 0, 0);
- makeknots(nu, 2, nu->flagv>>1);
+ makeknots(nu, 2);
a= nu->pntsu*nu->pntsv;
bp= nu->bp;
diff --git a/source/blender/editors/curve/editfont.c b/source/blender/editors/curve/editfont.c
index e6992009056..ec4e79a7e5a 100644
--- a/source/blender/editors/curve/editfont.c
+++ b/source/blender/editors/curve/editfont.c
@@ -401,11 +401,11 @@ static int paste_file_invoke(bContext *C, wmOperator *op, wmEvent *event)
return OPERATOR_RUNNING_MODAL;
}
-void FONT_OT_paste_file(wmOperatorType *ot)
+void FONT_OT_file_paste(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Paste File";
- ot->idname= "FONT_OT_paste_file";
+ ot->idname= "FONT_OT_file_paste";
/* api callbacks */
ot->exec= paste_file_exec;
@@ -449,11 +449,11 @@ static int paste_buffer_exec(bContext *C, wmOperator *op)
return paste_file(C, NULL, filename);
}
-void FONT_OT_paste_buffer(wmOperatorType *ot)
+void FONT_OT_buffer_paste(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Paste Buffer";
- ot->idname= "FONT_OT_paste_buffer";
+ ot->idname= "FONT_OT_buffer_paste";
/* api callbacks */
ot->exec= paste_buffer_exec;
@@ -769,11 +769,11 @@ static int copy_text_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
-void FONT_OT_copy_text(wmOperatorType *ot)
+void FONT_OT_text_copy(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Copy Text";
- ot->idname= "FONT_OT_copy_text";
+ ot->idname= "FONT_OT_text_copy";
/* api callbacks */
ot->exec= copy_text_exec;
@@ -799,11 +799,11 @@ static int cut_text_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
-void FONT_OT_cut_text(wmOperatorType *ot)
+void FONT_OT_text_cut(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Cut Text";
- ot->idname= "FONT_OT_cut_text";
+ ot->idname= "FONT_OT_text_cut";
/* api callbacks */
ot->exec= cut_text_exec;
@@ -856,11 +856,11 @@ static int paste_text_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
-void FONT_OT_paste_text(wmOperatorType *ot)
+void FONT_OT_text_paste(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Paste Text";
- ot->idname= "FONT_OT_paste_text";
+ ot->idname= "FONT_OT_text_paste";
/* api callbacks */
ot->exec= paste_text_exec;
@@ -1374,11 +1374,11 @@ static int insert_text_invoke(bContext *C, wmOperator *op, wmEvent *evt)
return OPERATOR_FINISHED;
}
-void FONT_OT_insert_text(wmOperatorType *ot)
+void FONT_OT_text_insert(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Insert Text";
- ot->idname= "FONT_OT_insert_text";
+ ot->idname= "FONT_OT_text_insert";
/* api callbacks */
ot->exec= insert_text_exec;
diff --git a/source/blender/editors/datafiles/blenderbuttons.c b/source/blender/editors/datafiles/blenderbuttons.c
index c29137ab74c..e3fdee554f7 100644
--- a/source/blender/editors/datafiles/blenderbuttons.c
+++ b/source/blender/editors/datafiles/blenderbuttons.c
@@ -1,4103 +1,4571 @@
/* DataToC output of file <blenderbuttons> */
-int datatoc_blenderbuttons_size= 131097;
+int datatoc_blenderbuttons_size= 146052;
char datatoc_blenderbuttons[]= {
-137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 2, 88, 0, 0, 2, 0, 8,
- 6, 0, 0, 0, 94,187, 18, 70, 0, 0, 1, 57,105, 67, 67, 80, 80,104,111,116,111,115,104,111,112, 32, 73, 67, 67, 32,112,114,
-111,102,105,108,101, 0, 0,120,218,173,145,177, 74,195, 80, 20,134,191, 27, 69,197,161, 86, 8,226,224,112, 39, 81, 80,108,213,
-193,140, 73, 91,138, 32, 88,171, 67,146,173, 73, 67,149,210, 36,220,220,170,125, 8, 71,183, 14, 46,238, 62,129,147,163,224,160,
-248, 4,190,129,226,212,193, 33, 72,112, 18,193,111,250,206,207,225,112,224, 7,163, 98,215,157,134, 81,134, 65,172, 85,187,233,
- 72,215,243,229,236, 19, 51, 76, 1, 64, 39,204, 82,187,213, 58, 0,136,147, 56,226, 39, 2, 62, 95, 17, 0,207,155,118,221,105,
-240, 55,230,195, 84,105, 96, 2,108,119,163, 44, 4, 81, 1,250, 23, 58,213, 32,198,128, 25,244, 83, 13,226, 14, 48,213, 73,187,
- 6,226, 1, 40,245,114,127, 1, 74, 65,238,111, 64, 73,185,158, 15,226, 3, 48,123,174,231,131, 49, 7,152, 65,238, 43,128,169,
-163, 75, 13, 80, 75,210,145, 58,235,157,106, 89,181, 44, 75,218,221, 36,136,228,241, 40,211,209, 32,147,251,113,152,168, 52, 81,
- 29, 29,117,129,252, 63, 0, 22,243,197,118,211,145,107, 85,203,218, 91,231,159,113, 61, 95,230,246,126,132, 0,196,210, 99,145,
- 21,132, 67,117,254,221,133,177,243,251, 92,220, 24, 47,195,225, 45, 76, 79,138,108,247, 10,110, 54, 96,225,186,200, 86,171, 80,
-222,130,251,241, 23,194,179, 79,254, 28, 9,179, 39, 0, 0, 0, 6, 98, 75, 71, 68, 0, 0, 0, 0, 0, 0,249, 67,187,127, 0,
- 0, 0, 9,112, 72, 89,115, 0, 0, 13,215, 0, 0, 13,215, 1, 66, 40,155,120, 0, 0, 0, 7,116, 73, 77, 69, 7,217, 3, 11,
- 22, 59, 45, 8,130,118, 25, 0, 0, 32, 0, 73, 68, 65, 84,120,218,236, 93,119,120, 84, 85,226, 61,247,181,201,180,132, 20,146,
- 64, 40, 65,138, 72, 9, 93,138, 32, 29,130, 16, 84, 64, 84,196, 31,224,234,162,171,162,226,170, 65, 69,176,145,192, 42, 32,184,
-148,197, 93, 68, 41, 10, 22, 52, 40, 44, 69,138, 52, 33,184, 2, 34,132, 22, 4, 66, 73, 34,144, 76, 50,153,246,230,254,254,200,
-188,231,100,152,242, 6, 38, 8,120,207,247,205, 55, 51,111,222, 59,115,251, 61,247,220,251,238, 35,148, 82, 84, 23, 8, 33,105,
-148,210,125,140,147,113, 50, 78,198,201, 56, 25, 39,227,100,156,127, 38,112, 87,144,168, 17, 87,100,132, 16,234,121,245,184,222,
- 57,171, 49,238, 52,130,156, 61, 60,156,147,111,144,112,246,184, 94, 57,149,248, 70,146,215, 59, 13, 35,149,158, 94,225,164,145,
- 14,103,117,113, 70,186, 94, 70,178,140,250,201,247,201, 55, 72, 56,123, 92,111,156,190,229, 39, 18,188,254,202,228,213,166,167,
-159,112,210, 72,135,179,186, 56, 35,221, 95, 70,170,140, 6,201,251,136,245, 77,215, 51,132, 63, 90, 96, 0, 0,165,148,120,241,
-147,235,149,211, 59, 29, 20,254, 72,134, 53,130,216, 24,105, 78,159,244,140, 20, 38, 83, 74, 9, 33,100, 19,128, 30,145,140,123,
- 36,242,221, 39,174, 17,225,173, 78,113, 21,201,114, 95,221,156,145,170, 75,190,156,145, 40,247,254,242,189, 26,243, 40, 82,225,
-140, 72, 93,170,142, 50,239,167,252, 92, 53,175, 47,103, 36,234,146, 47,103, 36,202,253,181,224,140, 68, 93,242,199, 25,137,114,
- 31, 40,239,153,131,117,109,132,128,111,197,238,121, 61, 11,161,106,118,177,122,220, 8,156, 17,206,163,201, 30,206, 72,142,102,
-122, 70, 42,143,124,203, 78, 36, 70, 93,222,156,145, 42,155,126,194,121,213,249,228,143,243,106,195, 27, 32,156, 17,143,251,213,
-150,251,107,197, 25,225, 60,138, 72, 93,242,225,236, 25,225, 65, 64,207, 72,214, 37,111,206, 72,213, 37, 63,225,188,234,124,242,
-199,121,181,225, 13, 16,206,136,199, 61,130,142,104,196,121,111, 58, 7,171, 58,197, 85,117,136, 55,101,148, 20,233,142, 44,146,
- 34,171,186,156,182, 72,185, 56,126,120, 55, 69,144,110, 99,164,195,233, 9, 31,169, 14, 33, 76, 41,157, 76, 8,153,116, 61, 87,
-104, 86,151, 88, 93,186,222,234,146,191,114,115,181,117,169,186, 6,207,222,156,145, 18, 66,126,226,126, 85,117,201,247,218, 72,
-212,165, 16,156,164, 58,226, 31,233,250,116, 61,130,187, 94, 2, 82, 13,235,123,104,117,184, 98,213, 24,239, 72,134,179,231,141,
- 16,247,234, 8, 39, 33,100,114, 53,197,253, 70, 73, 83, 86,151, 88, 93,186,238,234,146, 79,153,236, 25, 41,103, 40,210, 3, 41,
- 95,206, 72,174, 67,138,100, 25,173,238,184, 71,178, 46, 85, 71,222,223, 40, 8,219,193,170,174,209,241,141,192, 89, 29,220,213,
- 20,247, 77,213, 49, 58,168,134,117, 93, 17, 15, 39,165,116, 50, 34, 56,229,168,196, 57,146, 97,173,206,105,194,234, 40,155,213,
- 89,222, 35,185,206,163,154,226,126,163,228,123,196,195, 25,169,186,228, 39,207,175, 58,172,254,210, 47,210, 83,216,145, 44,155,
-213,201, 25, 9,238,234, 8,103,117,229,253,141, 4, 82,157,219, 52, 48, 48, 48, 48, 48, 48, 48, 48,252, 25,225,215,193, 74, 75,
- 75,219,208,177, 99,199,166, 63,254,248,163,131, 82, 10, 66, 8, 8, 33,224, 56, 14,132, 16,184,221,238, 51,187,119,239,190,131,
- 37, 31, 3, 3,131,166,145, 28, 33, 28,126, 95,146,224,174, 28,204,178,209, 29, 3, 3,195, 77,220,238,249,107,227, 90,183,110,
-157,247,227,143, 63,214,249,239,127,255, 11,131,193, 0,147,201, 4,147,201, 4,179,217, 12,147,201,132, 65,131, 6,157,221,178,
-101, 75,163,112,255,236,150, 91,110, 57,228,114,185,106,133,165, 0, 5,161, 48, 63, 63,191, 41,165, 84,246,247,123,237,218,181,
- 15, 17, 66,234,134,217,216, 23, 23, 20, 20, 52,164,148,186,174, 21,103,199,142, 29,243,101, 89, 78, 12,135, 83,167,211,157,218,
-182,109, 91, 83, 86, 76,175, 13,238,184,227,142, 67, 78,167, 51,236,242, 89,167, 78,157,166,203,151, 47,247, 91, 62, 59,117,234,
-116,220,237,118, 39,104, 44, 67, 0, 0,142,227,142,239,220,185,179, 77, 32, 1,210,174, 93,187,176,203, 39,128,194,220,220,220,
- 6,129,126,108,211,166,205, 33,158,231, 35,202,169,160,125,251,246, 98,237,218,181, 23, 0,184, 47,216,121,162, 40, 22, 95,184,
-112,161,225,198,141, 27, 93,172, 52, 50, 48, 48,220,232,240,235, 96,185,221,238,211,143, 63,254,184,105,207,158, 61,129, 28,172,
-243, 87,242,103,118,187,189,110,254,186,117, 16,146,147, 65,237,118,184,226,226, 64, 41,133,219,237, 6,159,151, 7,234,112, 0,
- 14, 7, 92,109,218, 0, 0,156, 78, 39,218,183,111,159,148,154,154, 42, 2,144, 3,208,214, 26, 55,110, 28,162,163,163, 81, 81,
- 81,129,138,138, 10,216,108, 54,216,108, 54,216,237,118,216,237,118, 56, 28, 14, 56, 28, 14, 56,157, 78,216,108, 54,236,217,179,
- 39, 54, 53, 53, 85, 0, 16,168, 33,175,245,244,211, 79,195,108, 54,171,124,202,187,194,225,205,103,179,217,240,211, 79, 63, 5,
-229,148,101, 57,113,211,166, 77, 48,153, 76,112,187,221,144,101, 25,178, 44,195,237,118,195,237,118, 43,233,238,125, 62,210,211,
-211,107,177, 34,122,237, 96,183,219,235,110,121,251,109,240, 53,107,130, 58,157,112, 53,111,174,230,143,248,253,247,128,211, 9,
-234,116,194,217,175,159, 90,110,239,190,251,238,164,162,162,162,128,229,211,229,114, 37,109,122,225, 5,112,209,209,160, 21, 21,
- 48, 14, 25, 2, 84,218, 55, 40,157, 57, 19,212,233, 4,117, 56, 96,206,204, 4,165, 20, 69, 69, 69,214,180,180,180,253,168, 92,
-167, 64, 3, 8,177, 90,235,215,175, 87,203, 12,165, 20,138, 22, 83,234, 41,207,243,234,235,135, 31,126,192,243,207, 63, 31, 84,
-220,243, 60, 95,107,244,232,209,112, 56, 28,106,221, 81, 62, 59,157, 78,181,188,187, 92, 46, 56,157, 78,216,237,118,156, 58,117,
- 42,228,128, 65, 17, 87,245,234,213, 27, 48,125,250,116,228,228,228,224,150, 91,110,129, 36, 73,106,248,148,240, 62,251,236,179,
-177,158, 54,137, 9, 44, 6, 6,134,155, 83, 96,237,219,183,175, 55, 0, 12, 29, 58,116, 67, 90, 90, 90,211, 95,126,249,197,161,
- 52,222,158, 87,237,135, 30,122, 40, 95,105,204, 41,165,103, 62,254,248, 99, 77, 83,134, 66,114, 50,242,227,227, 1, 0,151,114,
-115,149, 17, 59,162,219,182, 85,207,113,252,242, 11, 56,142, 67, 74, 74,138, 58,170, 15, 6,179,217,140,254,253,251, 67,167,211,
-161,125,251,246,144, 36, 9,162, 40, 6,124,105,129,209,104,196,235,175,191,174,184, 20, 48,233,163,240,183, 59, 59, 67, 79,128,
-255,252,244, 11,108,178, 27,130, 32, 64, 16, 4,205,156, 38,147, 9,159,126,250, 41, 36, 73,242,251, 90,191,126, 61,238,185,231,
- 30, 72,146,132,248,248,120,252,153, 54,100,187, 94,192,215,172,137,211,237,218, 93, 94, 62, 7, 15,190,172,124, 38, 37, 37,105,
- 42,159, 92,116, 52,206,222,117, 23, 0,160, 96,243,102,232,116, 58, 72,146,132,152, 55,223, 4, 21, 69,112,146, 4,199, 99,143,
-193, 98,177, 88, 71,143, 30,189,221,104, 52,174,253,237,183,223,130,114,202,178,140,157, 59,119, 66,146, 36, 68, 69, 69, 93,246,
-210,233,116,136,138,138,194,178,101,203,112,242,228, 73, 77,113,183, 90,173,120,251,237,183, 65, 8,169, 82,135, 2,125,214,224,
-200,113, 3, 7, 14,156, 91,183,110,221,126,211,167, 79, 55, 73,146,132, 57,115,230, 64, 16, 4, 12, 26, 52, 8,241,241,241, 88,
-187,118, 45, 36, 73,194, 11, 47,188,192, 10, 31, 3, 3,195,205, 47,176,188, 26,200, 58,175,190,250,106,141,197,139, 23, 35, 42,
- 42, 10, 6,131, 1, 70,163, 17, 70,163,177,202,231, 87, 94,121, 69,214,250,135,212,110,175,218,249,112, 28, 56,142, 11,120, 76,
- 75, 7,102,183,219, 49,124,248,112, 0, 8, 41,174,180,138, 33,155,205, 6, 65, 16,208,168,126, 34, 94, 29,222, 1, 93,121, 10,
-107, 49,128,162, 50,140,174, 45,224,127,117,111,197,236, 95,139,113,162,196, 2, 65,208,118, 51,166, 44,203, 1,197,149, 36, 73,
-248,248,227,143, 49,124,248,112, 72,146,116, 89,154, 48, 92, 27, 80,167, 51,172,242,169,137,179,162, 66,177,137, 84,113,165,211,
-233, 0,157, 14,156, 40,130, 72, 18, 44, 22,139,117,232,208,161,187, 12, 6,195,146,196,196,196,130, 80,162,136, 82,138,168,168,
-168,203, 4,150, 78,167, 83,197,213,242,229,203,177,120,241, 98,116,234,212, 73,115,153,151, 36, 9, 79, 61,245,212,101,191,173,
- 92,185, 82, 21, 88,130, 32, 64,146,164, 80,226,138, 0,224, 68, 81,188,255, 31,255,248, 7,167,156,159,144,144, 0, 81, 20,145,
-150,150, 6,179,217,140,173, 91,183,170,245,130,129,129,129, 33, 8, 68, 0,109, 0, 36,162,114,198,160, 20, 64,172,215,239,133,
-158,247, 68,175,239,187,252,240,220,238, 57, 71,249, 93,249,110, 7,160,243,115,188, 24,128,193,243,178, 1,216, 6,160,165,215,
-255, 40,215,193,247,127, 5, 79, 99,216, 3,192, 70, 0, 61,189, 55,191,163,148,158,126,235,173,183, 76,126, 28,172, 42,211,134,
-148, 82,205, 83,134,114,124,188,234, 12,212,104,223,254,247,198,253,231,159,213,142, 75,236,218, 21,196,104, 4,222,121, 71, 19,
-167,221,110,199,249,243,231, 47, 27,121, 95,169,192, 34,132,192,233,116,194, 96,136,194,119,243,187,227,204, 49, 23,222,206, 57,
-137,149, 63, 28,135, 32, 8,200,184,173, 9,134,185,128,236,120, 61,198,186,100, 56,220,218,214,234,186, 92, 46,191, 78,128,242,
- 34,132, 84,249,204,112,237,225,106,222, 92,115,249, 36, 47,191,172,137,211, 56,100, 8,206,108,217, 2, 73,146,144,208,175, 31,
-224,113,173,132, 93,187, 32, 73, 18,202,202,202,172, 15,116,236,248,253, 5,189,126,241,160, 65,131,142,175, 93,187,214, 24, 82,
-180, 81, 90, 69, 76,121,187, 86,222,226, 74, 20, 69, 56,125, 68, 99, 48,129, 21,168,126, 40,229, 53, 28, 7, 11, 0,220,110, 55,
-253,246,219,111, 49,103,206, 28, 36, 36, 36,160,127,255,254,168, 85,171, 22,150, 47, 95, 14, 74, 41,158,122,234, 41, 24, 12, 6,
- 24, 12, 6, 86,230, 25, 24,254,164, 8,164, 65,124,208,125,194,132, 9, 29,178,179,179,167,116,233,210,101,217,182,109,219,150,
- 18, 66,114,188,218,196, 12, 15, 87,142,215,247,219,125, 68,150, 8, 32,145, 16,146,163,156,239,253,221,235,120, 95, 0, 58,229,
-251,132, 9, 19, 90,102,103,103, 79,201,204,204,124, 57, 43, 43, 75,154, 48, 97, 66,171,236,236,236, 41,202,255,248, 11,135,183,
-131,229,119, 23,224,207, 63,255,188,183,111, 12,155, 55,111,190,161,115,231,206, 77,247,236,217,227, 45,186,106,223,126,251,237,
-249,148,210,144,119, 23, 42,107,186, 2,185, 2, 28,199,129,152, 76,128,201,164, 53, 99,224,116, 58, 33, 8, 2, 56,142,195,218,
-181,107, 97, 48, 24, 48,112,224,192,128, 2, 75,171, 43,166,211, 73, 16, 98, 57,252,223,244,221, 40,186, 80,174, 78, 9,174,203,
- 63,137, 31,244,122,188,218,162, 53,204,150,124,148,216,236, 97, 57, 88, 58,157, 78,237,172, 36, 73,194,147, 79, 62, 9,187,221,
- 14,142,227,212, 99, 30,225,202,122,156, 63,166,178,107, 42,159, 84,163,139,229,118,187,127,119,173, 36, 9,156, 36,129,120,242,
-185,172,172,204, 58,100,200,144, 93, 23,244,250,197,167, 78,157,250, 1,128, 94,171,192, 82, 68,149,194,237, 79, 92, 9,130, 0,
-135,195,161,121,160, 18,200, 73, 10, 87, 96,209,202, 6,197, 13,128, 54,104,208, 64,189, 38, 57, 57, 25,177,177,177,234,218, 54,
-189, 94, 15,131,193,192, 28, 44, 6,134, 63, 55,180, 60,137, 32, 42, 59, 59,123,138,183,128,241, 21, 52,222,194,201, 71, 68,121,
-139,180,150, 33,218,255, 28, 95,209,164,252, 47, 33, 36, 39, 43, 43, 43, 35, 68, 56, 10,125, 5,150,230,109,246,121,158,175, 51,
-127,254,252, 26, 95,126,249, 37,204,102, 51, 98, 99, 99, 17, 19, 19,131,216,216, 88, 12, 27, 54, 44,228, 84,161,219,237, 14, 56,
-237,194,243,124,165, 96, 51,155, 43, 59, 49,141, 29,152,195,225,128, 40,138,224, 56, 14, 79, 60,241,132,186, 46,234,106,166, 8,
-237,118, 59,120,142, 7,162,110, 1,197, 78, 85, 92,169, 47,157, 14,249,245, 91,131,156, 61, 13, 65,208, 54, 67,234,118,187,213,
- 78, 79, 20, 69,188,246,218,107,120,247,221,119,171,220, 64, 32,138, 34,218,182,109,139,188,188, 60, 86,229,254, 0,132, 85, 62,
- 5, 65,147, 88, 87,220, 38, 73,146,192,233,116, 32, 30,129, 85, 86, 86,102, 29, 49, 98,196,247, 37, 37, 37,139,155, 54,109,122,
- 4,149,219, 24,104, 18,213,132, 16,149, 83,175,215, 7, 20, 87,130, 32,104,118,176,148,122,228,141,191,254,245,175, 85,222, 1,
-224,169,167,158,210, 90,143, 40, 0,136,162,136,190,125,251,162, 85,171, 86, 88,185,114, 37,220,110, 55,158,124,242, 73, 24, 12,
- 6,204,156, 57, 19, 46,151, 11, 83,167, 78,101,133,143,129,225,207, 61,176, 13,165, 65,172,153,153,153, 47, 19, 66,114, 60, 78,
-210,254, 32, 66,202, 31,110,247, 17,105,133, 1,218,235, 12,127, 34,203,251,179,130, 9, 19, 38,180,244, 19,142, 93,151, 9, 44,
- 47,245, 24,170, 3, 58, 61,118,236, 88,147,178, 71,150, 34, 12,120,158,215,116,119, 33,119,232, 16,204,158, 5,237,246, 3, 7,
-126, 23, 22,221,187,131,152, 76, 32, 70, 35,184, 85,171, 42, 59,174,216, 88,224,165,151, 66,166,154,211,233, 84, 5, 86,113,113,
-113, 68,214, 96, 57,157, 78,240,146,136, 29,102, 17, 84,228,171,136, 43, 81, 20,193, 9, 34,242, 19,111, 5, 17,254, 11, 65,214,
-118,211,147, 34,176,148, 23,199,113,120,246,217,103,213, 52,224, 56, 14, 93,187,118, 85,132, 44,171,113,127, 0,132, 45, 91, 96,
-206,200,208, 84, 62, 73,116, 52,240,239,127,135,228, 44,155, 51, 7,209,111,191, 13, 34,138, 16,118,236,128, 78,167,131,197, 98,
-177,222,211,182,237, 46, 75,108,236,226, 19, 39, 78,252, 0,128, 27, 62,124,120,141, 14, 29, 58,240, 26, 27, 35,191,211,130, 75,
-151, 46,173, 34,174, 4, 65,128,203,165,173,124, 6,115,176,252,185, 89, 26,132, 37,189,251,238,187,193,243, 60,106,212,168,129,
-232,232,104,245,238, 75,197,185,114,185, 92,112,185, 92,154,215, 49, 50, 48, 48,220,156,208,160, 65,108, 89, 89, 89,251,179,178,
-178, 84, 39,201,215,193, 10,128, 65, 30, 49,149,168,136, 51, 84,174,165,218, 21, 36, 44, 25,129,132,151,247,177,236,236,236, 41,
-126,194,161, 78, 75, 6,220,104,180, 83,167, 78, 77,189,183,105,224,121, 30,178, 44,159,249,249,231,159,175,106,131, 81,234, 53,
- 93,225, 45,206, 20, 87,128,152, 76, 97, 47, 34, 86,166, 8,121,158, 87,197,203,162, 69,139, 96, 54,155, 49,102,204,152,171, 16,
- 88, 60,190,146,242, 0, 73,184,204,193,226, 69, 17,191,214,168, 7, 78, 20, 33,200, 78, 77, 78, 70, 73, 73, 9, 36, 73,194,123,
-239,189,135, 87, 94,121, 69, 73, 83,213, 29,241, 22, 90, 12,127, 80, 37,247,114,123, 66,149, 79,158,231,161,105,175, 76,151, 11,
-144, 36,192, 51,149,103,177, 88,172, 35, 70,140,248,222, 18, 27,187,184,113,227,198,138,115,197, 25,141, 70,240, 60,175,201,193,
-226, 56,206,175,184, 82,234,129, 90, 78,121, 62, 44, 7, 75,146, 36,172, 90,181, 74,173, 43,222,206, 85,184, 2,203, 59,172,155,
- 55,111,198,158, 61,123,240,196, 19, 79,192, 96, 48, 96,214,172, 89,112,185, 92,120,227,141, 55, 96, 48, 24, 42,167, 79, 25, 24,
- 24, 24, 2, 35, 78, 17, 56, 30,145, 84,197, 89,162,148,102,120,139,160, 64, 83,133, 30,199,105,115,136,255, 90,229, 17,102,126,
-161, 56,105, 62,131,222, 28, 95,113, 38, 40,202,209,251,157,227,184, 58,243,230,205,171,177,121,243,102, 24,141, 70,117,163,209,
- 17, 35, 70,200, 87,157, 68,138,192,242, 76,183,168,194,194,211,129,113, 94, 29,152,214, 69,175,138,131,229, 45,176, 38, 77,154,
- 4, 65, 16,176, 96,193, 2, 0,192,223,255,254,247,176, 4,150,195,225, 0,117, 3,219,228,141, 72,153,211, 26,244, 67, 61,206,
-109,254, 5,162, 40,162, 86,199,126,112,119, 24,134, 98, 93, 12, 76,212,173,121,244,125,225,194, 5, 28, 56,112, 0,132, 16,188,
-254,250,235, 85,246, 0,242, 94,227, 3, 0,107,215,174, 5,254, 68,207,108,186,238, 4,150,134,242,169, 56, 73, 90, 56,137, 78,
- 7,222, 35,174,134, 12, 25,178,171,164,164,100,241,137, 19, 39,118, 1, 32, 35, 71,142,172, 97, 52, 26,177,112,225, 66, 43, 0,
-113,197,138, 21, 6, 45,162,197,159,184,242, 39,176,100, 89, 14,171, 30,133, 26,140, 92,137,192, 34,132, 64,150,101,213,185,114,
- 58,157,234,247,168,168, 40, 86,240, 24, 24,254,228,238,149,247,123, 0, 20,250,172,115, 34, 62, 78, 83,161, 63, 97,229, 61, 29,
-232,245,217,233,135,215,238, 51,117,232,123, 92,121, 47,206,202,202,250, 78,113,174,188,142, 87, 9, 71, 64, 7,139, 82,170,110,
- 52,170,116, 34, 28,199, 65,150,229,243, 87,155,144,174, 54,109,224, 60,120, 16, 60,207, 67,234,217,179,114, 45,139,209, 8,110,
-229,202,223, 59,174, 73,147, 64, 77, 38,208, 1, 3,180,113,122,238,206,243, 22, 88, 23, 47, 94,132, 40,138,120,235,173,183,192,
-113, 28,166, 78,157,138, 58,117,234,224,204,153, 51, 88,189,122,181, 38, 78,206,205, 65, 63, 58, 30,250,177,209,224,158,104,140,
-150,131,199,226, 82,105, 3,236,181,155,208,172, 44, 15,113, 27, 38,193, 33,107,159,222,112, 58,157,234,222, 69,148, 82,213,189,
- 82,166, 77,100, 89, 86, 55,117,156, 54,109, 26,216,147, 68,174, 61, 28,125,250,104, 46,159,238,158,218, 30, 8,111,120,246, 89,
- 56, 70,143,134,197, 98,177, 62,208,165,203,214, 18,189,254,227,230,205,155,171,107,174,140, 70, 35,244,122, 61, 81,156, 44, 45,
-156,202, 77, 29,161,196,149,242, 89,107,249,244,222,134, 33, 18, 2, 75,105, 59,198,140, 25,131,218,181,107, 99,246,236,217, 85,
-156,171,151, 95,126, 25, 78,167, 19, 51,103,206,100,133,143,129,129, 33, 24,118,133,113,238,237, 94, 98,105,215, 21,242,238,186,
-218, 0,251,109,121,247,238,221,219, 59,208, 5,222,211,135, 74, 3, 74, 41, 61,179,103,207,158, 59,252, 52,174,105,148,210,125,
-222,199,100, 89,254,125, 81,183,201, 84,233, 12, 24,141, 85, 28, 28,106, 54,131, 51,155, 1, 63,119,252,249,227, 84, 4, 22,199,
-113, 85, 70,223,130, 32,224,210,165, 75, 16, 69, 17,179,103,207, 70, 76, 76, 12,108, 54, 27,180,132,211,225,112,128,231,121,148,
-159, 40,199,241,137,123, 17,101, 58,130,166,253,162, 17, 45, 30, 69,147, 45, 95,194,229,178, 3, 94, 83,134, 90, 56, 27, 54,108,
-136,241,227,199,171,139,147,125, 95,222,113,165,148,226,246,219,111, 15,201,121,181, 96,156, 85, 57,189,239,114, 13, 85, 62, 57,
-159, 60, 11, 22, 78,229,110,193, 50,147,233,227, 19,199,142,237, 2,192,141, 28, 57, 50,198,104, 52, 98,254,252,249, 86, 0,220,
-155,111,190,105,104,208,160, 1,175, 37,156, 60,207, 95, 38,174,194, 17, 88,129,234,145,239,246, 33,207, 60,243,204,101, 27,141,
- 6, 18, 88,129,226,206,243, 60,106,214,172, 9,163,209, 8,151,203,165, 58, 87,122,189, 94,221, 29, 62,208, 96,130,149, 79,198,
-201, 56,255, 60,156,127,144, 24,171, 54,132,189,178, 84,153, 62,220,177, 99, 7,162,163,163, 81,163, 70,141,176,166, 14,157, 78,
- 39, 18, 19, 19, 65, 41,133,144,157, 13,160,242,201,175,118, 81, 84, 31,249, 33,246,238, 13, 55,199,193, 82, 94, 14,135,195, 17,
-114, 26,198,106,181, 86, 89,128,174,136, 43,239,142,193, 98,177,168,155,135,106,129,194,169,184, 98, 68,166, 56,182,110,197,229,
-119, 19,134,177,147,187, 44,203, 72, 74, 74,170,178,134, 71,233, 4,253,116,212, 0,155, 34,188,230,112, 58,157,136,243, 60,194,
- 73,204,204, 4, 8, 1, 37, 4, 54,143,211,232,114,185, 32,118,233, 2,202,243, 40,177, 90,225,112, 56,160,215,235,131,114, 22,
- 23, 23, 91, 31,124,240,193,239, 41,165, 31, 13, 30, 60, 56, 15,149, 11, 44,169,201,100,210,241, 60, 79, 1,252, 6,128,158, 63,
-127,190,198,185,115,231,220, 46,151,171, 94,168,112,238,216,177, 3,199,142, 29, 67,187,118,237,212,199,215, 40, 47,229, 17, 76,
- 87,226, 96,249,219,163,237, 74,119,114,247,106, 51, 80,163, 70, 13,232,116, 58,188,245,214, 91,144, 36, 9, 6, 67,229, 44,232,
-204,153, 51, 43,211, 58, 12, 62, 6, 6, 6,134, 27, 1, 97, 11, 44,101,250,240,199, 31,127,116, 40,141,167,214,141, 70, 37, 73,
- 42,108,213,170, 85, 88, 15, 60,150, 36,233,226,137, 19, 39, 92, 65, 84,244,217,141, 27, 55,134,245,144, 90,158,231, 67,114,238,
-216,177, 35, 44, 78,142,227,130,114,138,162, 88,152,158,158, 30, 86,220,163,162,162,206,179, 34,122,237, 32,138, 98,225,160, 65,
-131,252,231,209,172, 89,129,174,185,136, 32,207,206, 19, 69,241, 88,203,150, 45,127, 49,153, 76,223, 38, 36, 36,252,182,101,203,
-150,132,118,237,218, 85,121,248,115,187,118,237,106,249,148, 37, 59, 2, 60,135,208,131,179, 47,190,248, 98,184,229,179, 48,196,
-104,244,236,217,179,103,195,173, 71,133, 33, 27, 24, 65, 56, 59,110,220,184,186, 90,235, 58,216,115, 8, 25, 24, 24,254,172, 2,
- 43,216,244, 97, 40,228,231,231, 55,136,116, 4, 78,159, 62,221,244, 70,224,220,177, 99, 71, 3, 86,220,174,111, 84, 71, 30,237,
-216,177, 35, 45,210,156,185,185,185, 17, 47,159,187,119,239,110, 90, 29,105,250,217,103,159, 53,101, 37,139,129,129,225,207, 8,
-182, 31, 0, 3, 3, 3, 3, 3, 3, 3, 3, 19, 88, 12, 12, 12, 12, 12, 12, 12, 12,215, 55, 8, 0,191, 83, 24,225,220, 29, 64,
- 8, 9,123, 26, 36, 20, 63,227,100,156,140,147,113, 50, 78,198,201, 56,111, 62,206, 80,220,215,241,221,137,225, 9,172,234,220,
-107,137,221,194,202, 56, 25, 39,227,100,156,140,147,113, 50,206, 63, 35,216, 20, 33, 3, 3, 3, 3, 3, 3, 3, 3, 19, 88, 55,
- 7,136,214,231, 0, 49, 48, 48, 48, 48, 48, 48,220,112, 8,184, 77, 67,199,142, 29,243,101, 89, 14,107,223, 38, 81, 20, 11,181,
-222,234, 78, 8, 17, 82, 82, 82,134, 24, 12,134, 30,162, 40,118, 1, 0,167,211,185,221,106,181,110, 42, 40, 40,248,130, 82,122,
- 69,251,225, 36, 39, 39, 55,224, 56,238, 33, 66,200,112, 0,160,148, 46,119,187,221, 75,206,157, 59,151,127,189, 8, 43, 73,146,
- 38,222,121,231,157,119, 18, 66, 22, 82, 74,151, 68,144,251,130,191,227,148,210,184, 43,229,172, 95,191,126,172,203,229,234, 0,
-160,173,231,208,143,130, 32,236,254,245,215, 95, 47,178,234,115,115,224, 74,234, 58, 80,185,175,221,246,237,219, 27, 68,146, 83,
-167,211,157,218,182,109,155,223,173, 29, 58,117,234,116,200,229,114,213,141,100, 56, 59,117,234,148,239,114,185,194, 14,103, 84,
- 84,212,169,173, 91,183, 54,141, 36,231,181, 14,103, 32,116,232,208,225,115, 74,105,186,167, 77, 89,179,123,247,238,161,172,150,
- 48, 48, 68, 80, 96,201,178,156,184,105,211, 38,152, 76, 38,165,147,134, 44,203,234, 46,209,110,183, 91,125,134,158,178,195,117,
-255,254,253, 53, 53, 0,245,234,213,107,209,180,105,211,197, 79, 61,245, 84,189,193,131, 7,235,146,147,147, 65, 8,193,217,179,
-103, 27,231,228,228, 60, 48,123,246,236,151,235,213,171, 55,242,228,201,147, 63,107,225, 75, 76, 76, 52, 73,146,116, 47,165,116,
-100,235,214,173,239,120,225,133, 23, 72,215,174, 93, 33,203, 50, 54,108,216, 48, 97,250,244,233,153, 41, 41, 41,219, 8, 33,139,
- 29, 14,199,151,133,133,133,101,127, 96,154,247, 30, 55,110,220, 3,127,251,219,223,106, 62,250,232,163,255, 7, 96, 73, 4,185,
-117, 17, 20,107, 66,237,218,181,199, 3,200,244,229,117,185, 92,246,148,148,148,236, 51,103,206, 76,191, 82, 33,204,112,253,192,
-187,174, 43,207,196,116,185, 92,106,221,150,101, 89,125,202,130, 98,188, 82, 74,209,183,111,223,196,112, 56,149,118, 67,225, 5,
- 0,183,219,237,125, 13,210,211,211,107, 5,226,116,187,221,181, 20, 78,239,112, 41,124,190,235, 73,149,176,222,121,231,157, 1,
-195,233,114,185, 18,191,255,254,123,232,245,122,149,203, 55,140,222,188,202, 67,171,123,245,234, 85, 43, 92, 78,229,179, 63, 78,
- 0,232,218,181,235, 53, 13,167,151,120, 75,114,185, 92,179, 8, 33, 58,158,231, 95,160,148,166,175, 94,189, 26,178, 44, 99,208,
-160, 65,233,157, 58,117,106, 44,203,242, 63,140, 70,163,219,102,179, 61,177,115,231, 78,182, 1, 50, 3,195,213, 8, 44, 0, 48,
-153, 76, 88,186,116,169,250,120, 12,223, 71,209,120,127, 78, 77, 77,213,244,135,181,107,215,110,215,160, 65,131, 53, 95,124,241,
-133, 33, 41, 41, 73, 61,238,112, 56, 16, 19, 19,131, 49, 99,198,232,250,246,237,219,120,228,200,145, 27,107,215,174,157,126,230,
-204,153, 61,193,248,234,212,169,243,120, 82, 82,210,155,227,199,143, 55,220,125,247,221,136,139,171,106,214,100,100,100, 96,224,
-192,129,228,216,177, 99, 93,151, 47, 95,222,245,163,143, 62,122,183, 78,157, 58,175,157, 62,125,122, 94,168,176,214,173, 91, 55,
- 78,175,215,191,159,156,156,156,118,252,248,241,109, 58,157,238,197,138,138,138,167,106,215,174, 61,194, 98,177,156,180,217,108,
- 79,254,250,235,175,199,195, 17, 45,241,241,241,127, 31, 59,118,108,124,105,105,169,156,155,155,123, 88, 57,174,215,235,159,239,
-220,185,115,199,239,190,251,110, 9,165,244,243, 43,113,174, 92, 46,215,238, 96,191,107,117,178, 90,180,104, 33,213,174, 93,123,
- 13,128,142,131, 7, 15, 62, 49,121,242,100, 26, 27, 27, 27,205,113, 28, 41, 46, 46,190, 48,109,218, 52,233,211, 79, 63,157, 84,
-187,118,237,244, 22, 45, 90,164,255,252,243,207, 14, 86,149,110,108,152, 76, 38,124,242,201, 39, 85, 30,135,227,253,220, 65,223,
-199,229,196,199,199, 87, 11, 39,165, 52,232,212,185,193, 96,192,134, 13, 27, 46,123, 52, 86,160,151,217,108, 6, 33, 4,132, 16,
- 66, 3,220,209,163,215,235,177,110,221, 58,245, 65,215,161, 56,141, 70, 35, 16, 98,121, 69,184,156,102,179, 57,100,122, 94, 97,
- 56, 67, 46, 69,112,185, 92,179,166, 77,155, 54, 40, 58, 58, 26, 47,189,244,210,255, 82, 83, 83, 17, 19, 19,131,249,243,231, 35,
- 46, 46, 14,178, 44,255,239,157,119,222, 33, 39, 79,158,196,204,153, 51,231, 2, 24,194,106, 12, 3,195, 85, 10, 44, 0, 85, 26,
-193, 96, 2,203, 31,124,239, 48,104,208,160, 65,148,217,108, 94,242,213, 87, 95, 25, 18, 18,126,127, 90,136,221,110, 71,105,105,
- 41, 44, 22, 11, 74, 75, 75, 97, 50,153, 48,103,206, 28,195, 67, 15, 61,180,164, 65,131, 6,173,243,243,243,109,129, 56, 41,165,
-217, 63,253,244,147,232,114,185,160,211,249, 55,112, 56,142, 67,227,198,141,241,204, 51,207,160, 91,183,110,198, 7, 31,124, 48,
- 27,192,188, 64,156, 94,194,228,195, 45, 91,182,116, 73, 74, 74,210,127,249,229,151,250, 57,115,230,228, 13, 28, 56,208, 50,106,
-212,168,218, 23, 47, 94,172,157,145,145,241, 53,128, 22, 90,226,238,193, 3,227,199,143,111, 17, 23, 23,199, 77,155, 54,237, 98,
-105,105,233, 7,158,227, 79,205,156, 57,115, 84,143, 30, 61,106, 62,250,232,163,110, 66,200, 23,254, 58,131, 32,119,108,232, 60,
-241, 20,194,117,182,252,113, 94,188,120,241,101, 0, 29, 23, 45, 90,180,175, 79,159, 62,245, 41,165,197, 0,206, 2, 64, 82, 82,
-146,126,250,244,233,198, 30, 61,122,252,248,196, 19, 79,116,244,156, 59, 89, 99, 56,175, 24,140,179,122, 57,221,110, 55, 68, 81,
-196,176, 97,195, 64, 8,169,242, 28, 67,165,158,111,217,178, 5,253,251,247,135, 40,138,120,244,209, 71, 53,115, 62,248,224,131,
-112,185, 92,151,113,174, 95,191,190,138,208,226, 56, 78, 51,167,242,140,208, 80, 47,173,156, 90, 69,203,245,194,217,171, 87, 47,
-236,220,185,243,170, 57,149,102,254,167,159,126, 66,235,214,173,177,120,241, 98,194,243, 60,118,238,220, 9,131,193,128,209,163,
- 71, 35, 45, 45,141, 24, 12, 6, 28, 59,118, 12, 22,139,133,176,122,196, 56,171,139, 51, 4, 68, 0,109, 0, 36, 2,144, 1,148,
- 2,136, 5, 96,247,244,113,197, 0, 12,158,151, 13,128, 5, 64, 77,207,181, 69,158,193,134,247, 99,202, 10, 81,245,161,208,183,
-123,184,149, 71,128,121, 59,202,118,159,126, 84,249,238,251, 94,133, 91,240, 8, 9,165, 51,239, 73, 41,221,228,149,128,154,196,
-149, 40,138,208,178,102,219,237,118,143,205,204,204, 76,242, 22, 87, 54,155,173,138,184,178, 88, 44, 40, 40, 40, 64,253,250,245,
- 49,124,248,240,164, 69,139, 22,141, 5,240, 94,176, 68,231,121, 30, 63,252,240, 3,206,159, 63,143, 86,173, 90,225,150, 91,110,
-169,114,194,209,163, 71,241,205, 55,223,224,194,133, 11,104,223,190,189,146, 81,126,145,146,146,146, 16, 27, 27, 59,142,227,184,
-251, 59,117,234,148, 82, 88, 88, 72,206,158, 61,139,212,212,212,228, 47,190,248, 2,123,247,238, 53,231,230,230,194,225,112, 72,
- 93,186,116,169,223,188,121,243, 19,162, 40,174, 58,119,238,220,187,193,214,121, 17, 66,248,186,117,235,190,252,248,227,143,235,
- 10, 10, 10,220, 31,125,244,209,119,148,210,189,132,144,251, 95,121,229,149,199,210,211,211,107,238,217,179,167,116,215,174, 93,
- 59,168,198,189, 51,252, 56, 87,130,111,131,108,177, 88,112,226,196,137,221, 37, 37, 37,156,231,124, 59,165,180, 86, 16,215,174,
- 17,128,241,247,223,127,255, 97,143,184,250,213, 83,152, 1, 0,178, 44, 59, 75, 75, 75,203,122,244,232, 81,187,111,223,190, 7,
-215,173, 91, 55,190,110,221,186,139, 79,157, 58,117,148,141, 87,110, 92,184, 92, 46,136,162,136,111,191,253, 54,168,219,180,117,
-235, 86,213,113, 89,177, 98,133, 38,206,175,190,250, 42,164,131, 21, 70, 27,162,138, 7,223,135,174,207,157, 59, 23,227,198,141,
-171,114,204,227, 94, 81, 79,227, 74, 3,113, 6, 18, 66,183, 52,108,136,179,103,206, 84,225,228, 56,174,202,212,102, 48,206,143,
- 62,250, 8, 25, 25, 25,200,201,201, 9,250,126,215, 93,119,105,138,187, 34,174, 28, 14,135, 26,198, 35, 71,142,248,229,253,231,
- 63,255, 9, 45, 77, 9,207,243,227,151, 45, 91,246,211,133, 11, 23,132,220,220, 92,232,245,122, 24, 12, 6,245,253,236,217,179,
-176,219,237,248,244,211, 79, 93, 28,199, 61,207,106, 11, 67,164, 17, 72,131,248,160,251,132, 9, 19, 58,100,103,103, 79,233,210,
-165,203,178,109,219,182, 45, 37,132,228, 80, 74, 51,148,247, 9, 19, 38,180,204,206,206,158,146,153,153,249,114, 86, 86,214,126,
- 66, 72, 14, 0,248,126,247,232,155, 12, 31,241,150,168,240,120,194, 84,229, 92,127,223,125,223,125,185, 5,175, 3,196,171, 33,
- 82, 58, 83,205, 2,203,223,104,201, 23,209,209,209, 3, 6, 12, 24, 32, 5, 19, 87,165,165,165, 40, 45, 45,197,161, 67,135,144,
-150,150, 38, 69, 71, 71, 15, 8, 33,176, 42,149,133, 32, 32, 37, 37, 5, 69, 69, 69,216,183,111, 31, 82, 83, 83,225,116, 58,177,
-102,205, 26, 92,188,120, 81,109,216,237,118,123, 80,158,164,164,164,217, 15, 61,244,208,192,177, 99,199,242,255,253,239,127,209,
-172, 89, 51,220,114,203, 45,216,182,109, 27, 28, 14, 7,234,213,171,135, 46, 93,186, 96,197,138, 21,104,211,166, 13,247,215,191,
-254,181,230,254,253,251, 71,207,154, 53,171, 51,128,118, 65,168,219, 12, 29, 58,180,102,116,116, 52,198,141, 27, 71,237,118,251,
- 12, 66, 72,218,176, 97,195, 38, 63,253,244,211, 9,249,249,249,142,199, 30,123,108,187,221,110,159, 31, 70,185, 12,232, 92,185,
- 92, 46, 88, 44, 22,148,148,148,160,180,180, 84, 40, 41, 41,225,160, 97,141,150,219,237,190, 19, 0, 63,113,226, 68, 80, 74,127,
-243, 22, 87,118,187, 29, 22,139, 5, 22,139,197, 45,203,242,165,177, 99,199, 90,215,173, 91,199,123,174, 97, 2,235, 6,134, 82,
-215,135, 14, 29, 90,197, 29, 90,191,126, 61, 50, 50, 50, 46,155,230,211, 34, 8, 20,206, 7, 30,120, 64, 21, 70, 74,155,177,122,
-245,106, 77,142, 75, 32,145,225,207,193,226, 56,206,239,177, 80, 34, 67,225,244,247, 2,112, 25,167, 86, 33, 40, 8, 2,198,142,
- 29, 11, 81, 20,241,220,115,207, 65, 20, 69,164,165,165, 65, 20, 69,116,234,212, 9,162, 40,162, 87,175, 94, 97,115,110,222,188,
- 25,157, 59,119, 86,195,152,150,150,134,118,237,218, 65, 20, 69,116,235,214, 13,162, 40,162,127,255,254,154, 56,149, 5,237,105,
-105,105,120,226,137, 39,240,197, 23, 95, 96,209,162, 69,234,239,195,134, 13,195,208,161, 67, 97,177, 88,144,156,156, 44, 20, 20,
- 20,236,239,208,161, 3, 91,248,206, 16,113,248,211, 32, 62,136,202,206,206,158,226, 35,140,170, 64,249,157, 16,146,147,149,149,
-149,225, 45,134,188,191,123,185, 76,222,226,173,165,183, 3,229, 45,158, 2,136, 50,223,240,123,159, 95, 88, 69, 96,121, 34,214,
-211, 95, 3, 41, 73,146,218,160, 5, 18, 90, 90, 80, 81, 81,209, 74,113,175, 42, 42, 42,170, 8, 42, 79,199,173,126,182,219,237,
-104,216,176, 33, 42, 42, 42, 90,133,169,132, 81,187,118,109, 56, 28, 14, 44, 88,176, 64, 21, 86, 10, 28, 14, 71,168, 76,174,221,
-187,119,111, 62, 63, 63, 31,167, 79,159,134,219,237,198,246,237,219, 33,138, 34,172, 86, 43,108, 54, 27, 86,172, 88, 1,158,231,
-113,244,232, 81,232,245,122,180,110,221,154,200,178, 28, 27, 34,104, 61,122,247,238, 13, 66, 8, 86,175, 94,125,156, 82,154,103,
- 52, 26, 23, 78,153, 50, 37,206,102,179,185, 71,141, 26,117,252,183,223,126,123, 25,128, 75,175,215, 79,236,209,163, 71,215,117,
-235,214,125,236,114,185, 22,135, 91, 80,109, 54, 91,149,180, 44, 41, 41,193,165, 75,151,180, 94,222, 22, 0, 98, 98, 98,106, 2,
- 56,163, 28, 44, 47, 47, 71,121,121, 57, 74, 74, 74, 80, 94, 94, 14,171,213,234, 48, 26,141, 58,175,107,254,195,154,136, 27, 95,
- 96,173, 94,189,186,138,203, 36,138, 34, 54,108,216,112,153, 3,165,211,233,176,106,213, 42, 77,110,211,215, 95,127, 29,212,185,
-242,110, 99, 66,173,193,242, 22, 67, 31,124, 80, 57,195,254,204, 51,207,248,157, 54,244, 94,186,112,223,125,247,145, 80,225, 20,
- 69, 17,105,111,114, 0,100,252,250,142, 65,109,215,124, 57,181,184, 66, 10,231,252,249,243, 53, 57, 88, 3, 7, 14,212,204,233,
- 27,174,125,251,246,249,229,157, 59,119,110,200,244, 84, 22,180,199,196,196,168,211,130, 0,144,145,145,241,188,217,108,238, 86,
- 81, 81,113, 79, 78, 78, 14, 46, 94,188,136,134, 13, 27, 34, 41, 41, 9, 59,119,238, 76,103, 53,134,161,154, 92,172,158, 65, 78,
-177,102,102,102,190, 76, 8,201, 81, 28, 41, 95,167,201,223,119, 63,255,163,136, 32,101,122,240,118, 31,241,166, 76, 29, 14, 10,
-114,173,221, 71, 80,249, 78, 17,238, 10,233, 96, 41,115,254,222, 13, 87, 32,129,165,101,244, 73, 41,229, 9, 33, 85, 4, 64, 32,
- 7,203,233,116,162,184,184, 24,148, 82, 62,146,153, 24, 74, 96, 21, 23, 23,191,240,212, 83, 79,173,156, 49, 99, 70,204, 3, 15,
- 60,128,239,191,255, 30,205,155, 55,135,205,102, 67, 66, 66, 2,142, 31, 63, 14,158,231,145,151,151,135,212,212, 84,152, 76, 38,
-188,246,218,107, 22,171,213,250, 90, 48, 94, 73,146,122,118,239,222, 29,185,185,185,184,112,225,194,122, 66, 72,227,199, 30,123,
-236,174,186,117,235,114,111,191,253,182,237,240,225,195,211, 0, 92, 52,155,205,239,125,244,209, 71,253,218,181,107,103, 26, 53,
-106, 20, 37,132, 44,163,148,202, 90,227, 87, 86, 86,118,153,184, 82,190,107, 28, 69,136,132, 16, 74, 8, 81,231, 64, 20,241,171,
-188, 74, 74, 74, 96,179,217,168,211,233,228, 42, 47,161, 34,107, 30,110,108, 40,157,247,240,225,195, 47,155, 46,147, 36, 9,107,
-214,172,193,208,161, 67,161,211,233, 32, 73,146, 50,213, 30,170, 44, 65, 20, 69,140, 24, 49, 66, 21, 4, 95,125,245,149, 95,113,
-165,184, 82, 90, 57,121,158,199,211, 79, 63, 13, 81, 20, 49,103,206, 28, 60,251,236,179,224, 56, 14,211,167, 79, 7,207,243,152,
- 56,113,162,191,233,135,160,156,162, 40,226,104, 86,229,123,253,191, 91, 80, 52,167,242, 38,156,152, 26, 53, 42,207, 11, 49, 45,
-232,143,211,159,115, 37, 8, 2,122,246,236, 9, 81, 20, 53, 9, 43,127,225, 60,112,224,128,250,185, 83,167, 78,232,218,181, 43,
- 68, 81, 68,191,126,253, 84, 94,173, 79,233,144,101, 25,243,231,207, 87,167, 5, 61,121,213,121,252,248,241,247,248, 59,191, 69,
-139, 22,172,194, 48,252, 17, 14,150, 45, 43, 43,107,127, 86, 86,150, 95,135,202,215, 73, 10,230, 52,121, 9,171, 93,240, 76, 13,
-102,102,102,190,140,202,181, 91,187, 52, 92,171,243,157, 34,244,119,190,175,131,245,122,160,209, 98, 48,129,165,172, 75, 8, 5,
-163,209,184,191,168,168,168, 83, 84, 84,148,218,241,251, 19, 39, 80,170,230, 0, 0, 32, 0, 73, 68, 65, 84, 87, 22,139, 5, 60,
-207,227,252,249,243, 48, 26,141,251, 35,153,137,161,166, 8, 79,157, 58,181,171,110,221,186,143,252,245,175,127, 29,111,183,219,
- 91, 10,130, 32,217,108, 54,221,215, 95,127, 77,214,172, 89,131, 90,181,106,225,153,103,158,161, 22,139,197, 65, 8,177,139,162,
-120,188,172,172,108,222,241,227,199,131, 58, 77,141, 27, 55,190,213,100, 50, 97,235,214,173, 0,176, 3,192,195, 79, 60,241, 4,
-231,116, 58, 49,119,238,220,115, 0,182,198,198,198,126,188,124,249,242, 14,173, 91,183,214,173, 93,187,214,178,115,231,206,117,
- 90,197,149,178,222,202, 59, 13,189,211,184,164,164, 68, 83,250,112, 28,247, 63, 74,233,200,242,242,242, 18,131,193,160, 47, 41,
- 41,113,120, 59,140, 22,139, 5,101,101,101,144,101, 89, 56,119,238,220, 41, 0,205, 56,142,251, 31,107, 30,110, 14,129,181,106,
-213,170,128,110,147,226,110, 41, 3,170, 53,107,214,104,114,197, 86,174, 92,121,153, 43,230,235, 10,105,157, 38,163,148, 86, 89,
-115, 5, 64, 29, 0,114, 28,135,204,204, 76,232,245,122,188,245,214, 91,200,204,204, 84, 93,172,162,162, 34,162,133,179,209, 4,
-155,167,141,133,122,173,195,110,175, 12, 31,199,105, 22, 89,222,156,190, 47,239,184,135,217, 1, 85,225,136, 4, 39,128, 85,131,
- 6, 13, 26, 20, 23, 23,135,209,163, 71,195,104, 52, 98,200,144, 33,168,168,168, 24, 6, 0,217,217,217,152, 48, 97, 2, 0, 96,
-210,164, 73,152, 60,121, 50,202,203,203,109,172,198, 48, 84,147,131,245,122,144, 83,226,188,215, 84,133,193,155,227,125,190,194,
-225, 43,138, 60,142,216,230, 80, 92,254,174, 13, 4, 65, 81,142,193, 42,116, 40,247, 74, 25, 81,106,112, 87, 54,110,220,184,177,
-253,189,247,222, 43,120,119,252,190, 66,203, 51,223,143,163, 71,143,186,202,202,202, 54,106, 25,129, 69,202,193,242,136,172, 53,
- 0,212,222, 35, 33, 33, 97,137,197, 98, 25,152,148,148, 36,218,237,118, 92,186,116,233,232,145, 35, 71, 90,135, 83,120, 76, 38,
-147, 30, 0, 46, 94,188, 8, 0, 23, 1, 52,185,245,214, 91,145,155,155,139,223,126,251, 45, 7, 64,191,201,147, 39,119,236,220,
-185,179,184,108,217, 50,235,147, 79, 62,249,169,195,225,152,165, 53, 78,254, 28,193,178,178, 50, 92,186,116, 9,229,229,229,154,
-167, 8, 9, 33,219, 40,165,152, 50,101, 74,201,228,201,147, 27,148,148,148,148, 93,186,116, 73,246,118,198,202,203,203,137,209,
-104, 20,150, 46, 93, 26,173, 92,195,154,135,155, 67, 96, 93,233, 29,111,161, 28, 44,111,183, 74, 17, 90, 58,157, 14,203,151, 47,
-247, 93, 43, 21, 82,101, 41,174,213, 51,207, 60, 3,189, 94,143,247,222,123, 79,109,131,252,221,209, 76, 8,241,123,247,155,111,
- 56, 27,191,108, 71,193,204, 88,136,162,136,196, 39, 11,171, 76,197,249,171, 42, 90,194,249,143,127,252, 35, 98, 83,132,106, 56,
- 27, 55, 6, 0,204,159, 63, 31,195,135, 15,199,214,173, 91, 3, 78, 17,134, 10,103,110,110,238,253,237,218,181,107,228,114,185,
-246,180,106,213, 74, 56,123,246, 44,134, 14, 29,138,229,203,151,195,211,145, 33, 51, 51,179,202, 53, 22,139,133, 9, 44,134,136,
-187, 87, 26, 78, 43,244, 89, 63, 69,188,167,235,130,188,251,158, 15,175, 99,222,188,133, 0,156,126,254,175,208,143,168,242,253,
- 15,239,115, 10, 47,115,176,180, 52,186,193,196,150, 22,129, 69, 8,153, 61,105,210,164,177,221,186,117,139,139,137,137, 65, 65,
- 65,129, 95, 7, 43, 38, 38, 6, 14,135, 3, 27, 55,110, 44, 37,132,204, 14, 65,235,114, 58,157, 66, 82, 82, 18,138,138,138, 2,
-222,221,195,113, 28, 12, 6, 3, 44, 22, 11, 0,132,187, 57,166,189,180,180,212, 57, 98,196, 8,113,246,236,217,176, 90,173, 97,
- 53, 48,132, 16,174,103,207,158, 18, 80,185,150, 9, 64, 89,157, 58,117, 26,233,245,122,228,231,231, 3,192,113, 0,189, 6, 12,
- 24, 32, 20, 23, 23,211,177, 99,199,174,119,187,221,175, 80, 74, 67, 13,151,227, 1, 32, 58, 58,250, 12, 0,108,223,190,253, 23,
-127,235,218, 94,126,249,229,102,158,206, 43, 30, 1,238,164,242, 18,151,251, 83, 82, 82, 62, 92,180,104,209,232, 30, 61,122,108,
-111,211,166, 77,195, 11, 23, 46, 92,178, 88, 44,246,242,242,114, 74, 41, 21,140, 70,163,184,101,203,150,188,188,188,188, 12, 0,
- 31,158, 58,117,106, 63,107, 34,110,124, 68, 82, 92,121, 11, 2, 95, 7,203,247, 61, 28, 78, 37,156,227,199,143,199,251,239,191,
- 15, 74,169, 42,172, 56,142,195,148, 41, 83, 0, 0,175,188,242, 74,192,237, 99, 2,113, 22,204, 52, 32,229,217,139, 85,142, 1,
- 0,241,132,239, 74,166, 8, 39, 77,154, 4, 81, 20,171, 76,225, 9,130,160, 10,170,112,166, 8,213,112, 22, 20, 84,138,192,196,
- 68, 60,244,208, 67,232,215,175, 31,238,186,235, 46, 16, 66,170,240,106,157, 34,228, 56,238,157,169, 83,167, 10,122,189, 30,118,
-187, 29,229,229,229, 40, 46, 46, 70, 32, 7,203,106,181, 70,177,218,194,240, 7, 96,215, 53,230,189,234,255, 19,180, 52, 18, 87,
-186, 77,131,239,211,182,143, 29, 59, 86,146,146,146, 50,102,196,136, 17,203,230,204,153, 99,104,212,168, 17, 14, 30, 60,136, 11,
- 23, 46,192,225,112, 64,146, 36,164,164,164,192, 98,177,224,179,207, 62, 43,183, 90,173, 99, 10, 10, 10, 74,130,113, 18, 66,222,
- 24, 48, 96,192,164,137, 19, 39,242, 45, 90,180,192,133, 11, 23, 96,177, 88,212,198,133, 16,130,152,152, 24, 24,141, 70,236,219,
-183, 15, 59,118,236,144, 9, 33,111, 4,227,244,211,168,157, 60,126,252,184,123,214,172, 89,168,168,168,176,185, 92,174, 83, 26,
- 68,149, 55,167,193,179,233, 31,202,202,202, 0,192, 86,191,126,253, 20, 79,154, 0,192,175,141, 27, 55,126,181, 81,163, 70,228,
-227,143, 63,166,110,183,123,157, 63,113,229, 27, 78, 74,169,205,115, 92,167,184, 99,190,107,218, 74, 74, 74, 32,203,178,206,251,
-252, 80,113,119, 58,157, 47,137,162,216,109,204,152, 49, 93, 6, 13, 26,244,211,200,145, 35, 43, 98, 99, 99, 19,120,158,183, 30,
- 61,122,244,183,229,203,151, 71, 29, 57,114, 36, 3,192, 49,167,211,249,146, 22,206, 8,216,199,140,179, 26, 57,149,186, 30,108,
-223,166, 80,131,168, 64,156,163, 70,141, 82, 5,150,242, 82,156, 43, 95, 78, 63,187,177, 95, 22,119,101, 90,236,197, 23, 95,172,
- 18,190, 87, 95,125, 53, 96,216,108, 54, 27,209,194,121, 97,126,237,170, 11,218, 3,136, 42,173,225,124,253,245,215,175,216,193,
- 10, 22,206,222,189,123,195, 98,177, 64, 16, 4,172, 93,187, 54,216, 34,119, 45,101,169, 98,245,234,213,208,235,245,248,236,179,
-207, 92,201,201,201, 66,108,108,108, 64, 7,171,162,162, 34,138,213, 35,198, 89, 29,156, 55, 27,130, 10, 44,151,203,133,122,245,
-234,169,226,137,227, 56,101, 95, 25,240, 60, 15,142,227,192,243, 60,194,121,110,113, 65, 65,193,250,148,148,148, 17, 67,134, 12,
-249,207,232,209,163,205,205,154, 53, 19, 83, 83, 83, 97,181, 90,145,159,159,143,252,252,124,215,134, 13, 27, 74,173, 86,235, 35,
- 5, 5, 5,235, 67,241,157, 62,125,250,221,148,148,148, 85, 15, 63,252,240,155,109,218,180, 25, 56,126,252,120, 52,108,216, 16,
-151, 46, 93, 66, 92, 92, 28,146,146,146,112,252,248,113,172, 88,177, 2,151, 46, 93,250, 6,192,196,130,130,130,188,112, 18,201,
- 96, 48,204,152, 58,117,106,247,228,228,228,102,197,197,197,167, 36, 73,122, 57,220,132,118, 56, 28, 50, 0,190,168,168, 8, 0,
-172, 6,131,129, 0,192,145, 35, 71, 0,224,215,250,245,235,199, 0,192,250,245,235, 9,128,157, 97,210,199, 3,192,128, 1, 3,
-126,243,109,252,189,156, 43,205, 40, 44, 44, 44,107,220,184,113, 87,171,213,154,181,106,213,170,209, 1,238, 22,251,208, 96, 48,
- 76, 56,114,228, 72, 25,171, 70, 55, 73, 99, 32, 8,208,233,116, 87, 36,174,130,113,126,246,217,103,126,157, 43, 95, 78,173,237,
-136,175, 8, 84,246,187, 10, 54, 80, 12,209, 81,248,141,115, 32, 78, 45,225, 84, 56,179,179,179, 33,138, 34,250,246,237, 91,101,
- 81,251,149, 56, 88, 10,167,242, 4, 12,179,217, 12, 89,150, 49,112,224,192,171,226,165,148, 62,157,147,147,227,162,148, 26, 57,
-142,251,123, 65, 65,193,126,197, 85,244,231, 96, 49, 48, 48, 92,165,192, 18, 69,177, 80,235,179, 5, 21,232,116,186, 66,141, 34,
-107, 93,227,198,141,155, 47, 88,176,224, 73,179,217,220,203,106,181,166,121,132,204, 62,139,197,242,157, 32, 8,255, 44, 40, 40,
- 40,213,250,191, 30,193, 52, 60, 37, 37,165,203,195, 15, 63,252,230, 29,119,220,209,233,177,199, 30,131, 32, 8,248,244,211, 79,
-113,250,244,233,157, 30, 97,181,253, 74, 18,233,216,177, 99, 37, 8,126,251,104,168, 6,172, 76, 20,197,121,221,186,117,123,108,
-219,182,109, 31, 80, 74,207,232,245,250,127,247,236,217,115,212,247,223,127,255, 31, 74,233, 73, 81, 20, 63,232,218,181,235,152,
-157, 59,119,126, 76, 41, 61, 17, 38,191, 45, 88,195,239,207,185, 10,133, 35, 71,142,148, 2,120,178,118,237,218,239,243, 60,223,
- 85,150,229,182, 0,192,243,252,143,178, 44,111, 61,115,230,204, 65, 86,125,110, 30,184,221,110, 36, 38, 38, 86, 25, 52, 41, 83,
-111, 87, 42,174,220,110, 55,146,146,146,192,113,156,202,171,108, 16, 26,100, 90,144, 4, 19, 24,110,183, 27,209,209,209, 42,167,
- 50,232, 11, 81, 63,168,221,110, 15,186, 6, 43, 92, 78,132, 88,219,116,133,156,208,194,105,183,219, 35, 22, 78, 0,200,205,205,
- 45, 6,240,176,242,189,125,251,246,171, 14, 30, 60, 56, 40,144,131,197,192,192,112,149, 2,107,199,142, 29, 13,170,243,143, 61,
- 29,120,150,231, 21, 17,120, 4, 84,239,148,148,148,140,109,219,182, 41, 83, 87, 83, 11, 10, 10,114,254,232,132,118, 58,157,147,
- 9, 33,111, 83, 74,157, 0, 80, 81, 81,241, 10, 33,100,146,242,176,100,167,211, 57,145, 16,242,250,213, 60, 60,153, 82,106,140,
-116,184, 61, 66,138,137,169,155, 24,162, 40, 22, 14, 24, 48, 32, 49,220,235,130, 13,168, 68, 81, 44, 76, 79, 79, 15,155, 51, 42,
- 42,234,124, 16,206,179,189,122,245,170,123, 5,225,188, 88,167, 78, 29,191,119,194, 72,146, 84,216,189,123,247,136,134,243, 74,
- 57,131,165,103,117,132, 51,136,224,186, 63, 37, 37,101, 91, 66, 66, 66, 35,155,205, 38, 89,173, 86,201,219, 5, 52, 24, 12, 69,
-172,214, 48, 48, 92,133,192,186,145,225, 17, 84, 57,215, 91,184, 20,113,229,245,221, 21,236, 59, 3,195,181, 64,117, 12,166,170,
-131,115,235,214,173, 77, 35,205,185,125,251,246, 6,127, 86,206, 16,109,232, 29,172,102, 48, 48, 92, 29, 56,150, 4, 12, 12, 12,
- 12, 12, 12, 12, 12,145, 5, 1,144,230,239,135,112,238, 14, 32,132,164,133,251,199,161,248, 25, 39,227,100,156,140,147,113, 50,
- 78,198,121,243,113,134,226,190, 89,238, 78, 36, 90,247, 74,185, 34,114,118, 11, 43,227,100,156,140,147,113, 50, 78,198,201, 56,
-255,132, 96, 83,132, 12, 12, 12, 12, 12, 12, 12, 12, 76, 96, 49, 48, 48, 48, 48, 48, 48, 48, 48,129,197,192,192,192,192,192,192,
-192,192, 4, 22, 3, 3, 3, 3, 3, 3, 3, 3, 3, 19, 88, 12, 12, 12, 12, 12, 12, 12, 12,215, 13,170,245, 46, 66, 6, 6, 6,
- 6, 6, 6, 6,134, 63, 35, 84, 7,139, 16,178,137, 16,178,137, 37, 9, 3, 3, 3, 3, 3, 3,195,181,196,205,168, 65, 4, 79,
-196, 40,174,226, 97,198, 12, 12, 12, 12, 12, 12, 12, 12, 87, 40,174,110, 74, 13, 66, 40,165, 32,132, 80, 74, 41, 97,217,204,192,
-192,192,192,192,192,112,173, 5,214,205,168, 65,216, 34,119, 6, 6, 6, 6, 6, 6, 6,134,106, 18, 88,175,179, 53, 88, 12, 12,
- 12, 12, 12, 12, 12,127, 0,110, 74, 13,162,222, 69, 72, 8,233, 1, 0,148, 82, 38,178, 24, 24, 24, 24, 24, 24, 24,174,157, 24,
-185, 9, 53, 8,219,166,129,129,129,129,129,129,129,129, 33,194,168,214, 53, 88,132,144, 52,198,201, 56, 25, 39,227,100,156,140,
-147,113, 50, 78, 38,176, 24, 24, 24, 24, 24, 24, 24, 24, 24,152,192, 98, 96, 96, 96, 96, 96, 96, 96, 96, 2,139,129,129,129,129,
-129,129,129,129, 9, 44, 6, 6, 6, 6, 6, 6, 6, 6, 6, 38,176, 24, 24, 24, 24, 24, 24, 24, 24,254, 32, 16, 0,126,239, 4,
-160,148,238,211, 76,114, 5,119, 19,132,226,103,156,140,147,113, 50, 78,198,201, 56, 25,231,205,199, 25,138, 59, 28,253,113, 93,
- 11, 44, 45,251, 96, 17,207,131,130,194, 38, 39, 36, 45,210, 9,197, 56, 25, 39,227,100,156,140,179,122, 56,175,164,173,247,199,
- 73, 8, 33, 94,131,120, 0,160,158,142,147, 94, 79,225,188, 81,242,168, 58,210,179,186,243,136, 1, 16, 66, 36, 32,135,202,105,
- 68, 66, 8,113, 3,112,211, 8,236, 76,234,201, 88, 46, 82,124, 12,213,160,188, 43,243,136,252, 62,160, 96,249,196,192,112, 19,
-215,247,136,181,245, 94,109, 7,175,112, 2,144, 1,200,132, 16, 92, 77, 91, 82, 29,125,146, 55, 39,128,106,139,251,149,182,163,
-213,145,158,213,153, 71, 12, 33, 4, 22, 33,132, 52,111,222, 92,236,218,181,235, 15,177,177,177, 77,188,127, 27, 60,120, 48, 0,
- 64,150,101,249,155,111,190,137, 14,231,207,122,246,236, 41, 8,130,240, 85, 70, 70, 70, 15, 95, 62, 79, 47, 46,231,228,228, 68,
- 95,207, 9, 54,108,216,176, 82,135,195,193,251, 30,151, 36, 73,254,236,179,207,162,111,134, 66, 65, 8, 17,154, 52,105, 50,204,
-104, 52, 26,148, 99,109,219,182,245,254,157,238,217,179,103,161, 22,174,215, 95,127,157, 91,180,104,209, 86,163,209,104,228, 56,
- 14,130, 32, 64, 16, 4,148,149,149, 21, 13, 31, 62,188, 31, 0, 44, 89,159,191, 54,202,104, 72,128, 27,112,187, 41,168,155,162,
-188,162,172,120, 76,122,227,126,147, 38, 77,114,179,106,122,121, 61, 10, 53, 56,242, 3,215,198,141, 27, 93, 44,245, 52,215, 1,
-165, 77,186,242,139,171, 54,180, 3,100,224, 65,207,215, 10, 14, 40, 38, 64, 94, 2,240,217, 57,192, 90,229,228,107,216,185, 41,
- 29,109,221,186,117,223, 75, 78, 78, 30, 83, 90, 90, 90,206,243, 60, 8, 33,180,101,203,150,151, 69,135, 16, 2,183,219,125,106,
-255,254,253, 29, 66,116,220, 98,253,250,245,167, 39, 38, 38,142, 42, 47, 47, 47, 39,132,128, 16, 66, 9, 33, 72, 75, 75, 83, 57,
-149,119,183,219,125,106,223,190,125, 29,174, 85, 56,255,200,184, 43, 92, 90,226,238,205, 89,183,110,221,233,201,201,201,163, 44,
- 22, 75, 57,199,113, 42,103,203,150, 45,175, 56,156,145,226,100, 8, 67, 96, 53,106,212, 72, 74, 76, 76,220,156,154,154,218,120,
-193,130, 5,200,203,203, 67,179,102,205, 32,203, 50,220,110, 55, 40,165, 24, 54,108, 24, 31,110,167, 32,138,226,170, 58,117,234,
-220,177, 96,193, 2,228,228,228,224,246,219,111, 7, 33, 4,178, 44, 67,150,101, 60,253,244,211,252, 85, 54, 22, 38, 65, 16,158,
-214,233,116,119,186, 92,174,219, 60,194,231, 96, 69, 69,197, 22,151,203, 53,155, 82, 90,118,181, 9,230,112, 56,248,175,191,254,
-218,159,240, 10, 26,246, 78,157, 58, 29,114,185, 92,117,195,249, 47,157, 78,119,106,219,182,109, 77, 3,253,222,165, 75,151, 67,
- 14,135, 35, 44,206,168,168,168, 83, 91,183,110,109, 26, 76, 92, 53,110,220,248,190,150, 45, 91,234, 63,253,244, 83,156, 62,125,
- 26, 6,131, 1,110,183, 27,178, 44,195,233,116,226,222,123,239, 37,225,252,167,209,104, 52,110,219,182,173, 81,116,116, 52,202,
-202,202,112,225,194, 5, 60,240,192, 3,106,103, 31,165, 55, 36,204,204,154,216,216,233,116,225,183, 18, 43,206, 95,176, 98,222,
-220,185, 55,124,229,234,210,165,203, 6,187,221, 30,175,124, 23, 69,241,183,157, 59,119,246,190, 90, 94,171,213,122,140, 82, 26,
-171,177,111, 7, 0,240, 60,127, 17, 64,253, 16,245, 39, 21,192, 64, 65, 16, 26, 9,130,208,148, 82, 90,223,229,114, 37,121,202,
-226,121,158,231,127,117, 56, 28,135,236,118,251, 81, 0,223, 80, 74, 79,220,164,226,170, 62, 0, 87, 74, 74, 74,129,103, 52,127,
-213,156, 50,240, 32,165,180, 6, 0, 92,186,116,169,198,201,147, 39,107,125,253,245,215, 45,167, 76,153,210, 91, 87, 81, 49,205,
- 14, 28, 8,118,125,211,166, 77,119,139,162,152,234,213, 14,157,200,203,203,139, 68,103,199,213,169, 83,231,189,187,238,186,235,
-225,121,243,230, 25,119,238,220,105,108,213,170, 21, 42, 59, 91,168,237, 61,165, 84, 45, 91,157, 59,119, 1,249,221,221,190, 44,
-249, 0, 8, 41, 41, 41, 51, 7, 12, 24, 48, 98,238,220,185,198,125,251,246, 25,155, 52,105,162,114,122,167,167,167, 83, 71,251,
-246, 29, 64, 0, 66, 61,211, 84,145, 10,103,117,196,189, 69,139, 22,248,249,231,159,131,198, 61, 61, 61,125,196,188,121,243,140,
-123,247,238, 53,222,122,235,173,126,227,174,196,191, 67,135,219,131, 22, 71,239,244,156, 63,127,190, 49, 55, 55,215,216,188,121,
-115,143, 72,131, 26,198, 48,226, 94, 29,156, 12, 90, 4, 22, 33,132,235,217,179,231, 55,245,235,215,111,177, 96,193, 2,194,243,
- 60,114,115,115, 81, 92, 92,140, 58,117,234,192,108, 54, 67,175,215,135,255, 71,130,240,149, 71, 92,113, 60,207, 99,195,189,247,
-194, 10, 96,152,221, 14, 73,146,112,228,200,145,171,109, 20,187, 69, 71, 71, 47, 88,178,100, 73,108,151, 46, 93,184,147, 39, 79,
- 34, 45, 45, 13, 69, 69, 69,237, 55,110,220,216,118,236,216,177,163, 8, 33,143, 81, 74,191,143,196,200,246,155,111,190,129,201,
-100,130,209,104,132,201,100,130,195,225, 8,122,157,219,237,174,181, 97,195, 6, 68, 71, 71, 67,150,101, 80, 74,171, 84, 96,223,
-138,231,114,185,208,183,111,223, 90, 65, 45, 9,151,171,214,230,205,155, 85, 1,228,205, 37,203, 50,116, 58, 29, 56,142, 83, 28,
- 71, 56, 28, 14,244,232,209,163, 86,176, 17, 93,147, 38, 77,134, 41,226,138,231,121, 44, 91,182, 12,201,201,201, 72, 74, 74,130,
-217,108,134,209,104,188,146,188, 71,116,116, 52,190,250,234, 43,196,197,197,161, 65,131, 6, 16,132,223,139,158,236,114,163,220,
-106, 71,198, 45,139, 48,122,109, 39,196,155, 37,184, 92,242, 13, 95,185,236,118,123,252,158, 61,123,212,239,189,123,247, 54,183,
-107,215,238,167, 64,231,107, 21, 96,178, 44, 39,108,217,178, 5, 6,131, 65, 91,231, 46,203,232,216,177, 99, 66,136,114,157,158,
-144,144,176,164, 75,151, 46, 98, 98, 98, 34,111, 48, 24, 96, 50,153, 16, 27, 27, 11,189, 94, 15,183,219, 93,223,229,114,213,183,
-217,108,119,158, 63,127, 94,254,226,139, 47,222, 32,132, 60, 68, 41, 93,115,147,137,171, 91, 82, 82, 82,254, 1, 0, 5, 5, 5,
- 47, 24, 12,134,227,145, 18, 89, 10,106,212,168,129, 26, 53,106, 32, 45, 45, 13, 67,135, 14,141,109,219,182,237,223, 27,216,108,
-143,231, 3,246,128, 74,128,227,234,238,223,191, 63,193,107,192,198,223,122,235,173,231,252, 25, 94,158, 54,224,212,209,163, 71,
- 59,132,136, 43, 87,171, 86,173,119, 6, 12, 24,112,255,188,121,243,162, 1,224,223,255,254, 55, 6, 14, 28,136, 90,181,106,193,
- 96, 48, 64,146, 36, 72,146, 4, 81, 20,213,119,175, 78,218,175,150,175, 85,171,214,180,129, 3, 7,222, 55,119,238,220,104, 0,
-248,232,163,143,144,158,158,142,132,132, 4, 68, 71, 71, 35, 42, 42, 10, 58,157,174, 10,183, 23, 39,213, 18,206,233,157, 59,163,
- 55, 0,241,223,255, 70,108,108, 44, 82, 71,142,132, 94,146,192,239,218,133,152,152, 24,111, 78,205,113,207,205,205,197,185,115,
-231,252,198,157,231,121, 68, 69, 69, 85,218,143, 21, 21,129, 92, 33, 53,238, 10,231,162, 69,139,212,184,155,205,102, 63,113,231,
- 66,185,139,124,173, 90,181,166,165,167,167,223, 55,127,254,124,149,179, 79,159, 62,136,143,143, 71,116,116, 52, 36, 73,130, 78,
-167,243,151, 71,215,132,147, 65,163,192, 82,214, 70,153, 76,166,206, 31,124,240, 1,120,158, 87, 59,200,168,168, 40,181,112,232,
-116,186,176,109,232,140,140,140, 30, 11, 22, 44, 80, 57,109, 62,231, 92,137,104,243,226,239,117,231,157,119, 46, 90,181,106, 85,
-148, 32, 8,184,116,233, 18, 54,111,222,140,216,216, 88, 24, 12, 6, 12, 27, 54,140,235,213,171, 87,124,175, 94,189,150, 16, 66,
- 70, 83, 74,191,187,154, 68,163,148,170, 98,195,100, 50,193,100, 50,105,117,114,176,114,229, 74, 8,130, 80,165,224,122, 87,100,
-229,123, 98, 98,162, 86, 71, 10,219,182,109, 3,199,113,234,245,162, 40, 98,213,170, 85,120,254,249,231,113,238,220, 57,245, 55,
- 13,225, 36, 70,163,209,160,136, 43,143, 3,168, 52, 54, 68, 16, 4,226, 57, 78,195, 89,100, 42, 8, 2, 46, 94,188,136,154, 53,
-107, 34, 46, 46, 14, 81, 81, 81, 85, 42,172,211,229, 70, 65, 81, 41,134,127,219, 6,101,214, 18,148,148, 18, 56,156,206,155,174,
-178,125,240,193, 7,146, 44,203,138,224, 86, 93, 65,143, 43,133,199, 31,127, 60, 94, 43,151,193, 96,192,154, 53,107,212,178,164,
-116, 2, 74,163,232,125,188,110,221,186, 90,202,209,171,203,151, 47,143, 90,186,116,169, 58,216,209,233,116, 48,153, 76,136,137,
-137, 65,108,108, 44,226,227,227,145,144,144,128,182,109,219,242,143, 62,250, 40,223,173, 91,183, 87, 1,220, 52, 2,139, 16, 18,
- 99, 48, 24, 38, 46, 95,190, 92, 2,128,190,125,251, 78,180, 90,173,207, 2, 40,185, 90,145,197, 3,203, 8, 33, 15,122,242, 78,
-223,175, 95, 63,221, 63,255,249, 79,220,118,219,109, 24, 55,110, 92,252,187,211,166, 13, 6,176, 34, 88,155,227,141, 89,179,102,
-197, 42,101, 72, 25,172, 41,175,178,178, 50, 60,247,220,115, 33,219,100, 0, 92, 74, 74,202, 95,254,245,175,127,153,149,227,241,
-241,241,151,181, 69,190,239,129, 92, 82, 47, 87,232,145,249,243,231,171,156, 9, 9, 9,106, 27,167,188,126, 61,248, 19, 54, 44,
-158, 1, 83,124, 45,140,124, 97,106,216,225,236, 8,160, 35,199,193,221,186, 53, 12, 6, 3, 18,140, 70, 64,146,224,246,136, 43,
- 45,225,244,229,228,121, 94,141, 39,165, 20, 21, 21, 21, 40, 45, 45,133, 44,203,176,219,237,104,223,190, 61, 8, 33,184,229,150,
- 91, 2,185, 66,151,197,189,102,205,154,151,197,221,187,157,246, 30,104, 6,226, 76, 73, 73,121,228,131, 15, 62,240,155,158,130,
- 32, 64,146, 36, 44, 90,180, 72,147,147, 29, 14,103,152,249,206,160,197,193, 82, 70, 38,121,121,121,216,189,123, 55, 68, 81, 68,
- 82, 82, 18, 58,118,236,168, 88,211, 16, 4, 1, 28,199, 97,240,224,193,229,190, 23, 75,146, 84,248,217,103,159, 53,240, 52, 10,
-202, 29, 6, 28, 0,172, 95,191, 30,171,210,211, 97, 3,208, 48, 43, 11,173, 50, 50,112, 72,167, 3, 15, 32,169,168, 8, 60,207,
-251,229,244, 94,155,229,231, 78, 8,179,201,100,154,151,147,147, 19, 37,203, 50,138,138,138, 0, 0, 25, 25, 25,224,121, 30,191,
-252,242, 11, 38, 79,158,140, 47,190,248, 2,171, 87,175,214, 55,107,214,108, 30, 33,164, 29,165,212,226,197, 95,133,243,158,123,
-238,201,115,187,221,117,252, 37,152, 36, 73, 0,128,232,232,104,232,245,122,152,205,102,191,194,197,223,221, 21,178, 44, 99,200,
-144, 33, 32,132,128,231,121,117, 61,146,119,101, 83, 62,239,221,187, 87, 19,167,219,237, 70,183,110,221, 0, 0, 38,147, 9,102,
-179, 25,223,125,247,187,126,108,215,174, 29,236,118, 59, 18, 19, 19,177,111,223, 62, 77,156,103,206,156,193,146, 37, 75, 32, 73,
- 18,226,226,226, 32,138,162,180,126,253,250,215,140, 70, 99, 12,207,243,136,139,139, 67, 70, 70,198, 44,101,253,156,219,237,150,
- 87,173, 90, 21, 29,136, 83, 16, 4, 88,173, 86, 85, 96,197,197,197, 85,117,226,220, 46,156, 58,119, 17,105,173,108,232,221, 67,
- 66,206,234, 50,236,216,224, 14, 25,206,171,197,181,224, 60,113,226, 4,142, 28, 57,162, 78,175, 42,211,225,223,175, 95, 18,119,
- 52,111,151, 73,233, 56, 41,165,208,185, 46,161, 75, 43,178, 19,110,124,182,125, 63,125, 39, 84, 56, 5, 65,128, 44,203, 88,189,
-122, 53,142, 31, 63,142,245,235,215,163,162,162, 2, 53,107,214, 68,108,108, 44, 58,119,238,140, 71, 30,121,196,175,192,242,229,
-148,101,121, 9, 33,164,245,200,145, 35,201, 55,223,124,131,162,162, 34,148,150,150,194,225,112,192,225,112, 64, 20, 69,117, 64,
-145,146,146, 2,142,227,104, 69, 69,197,146,155, 33,143, 60,237,136, 0, 96,194,251,239,191,159,208,190,125,123, 0,192,251,239,
-191,159,240,200, 35,143, 76, 0,240, 42, 0,215,149,132,211, 0,212, 65,229,197,171, 81,249,194,235, 86, 43,121,115,229,202, 33,
- 0, 70,125,249,229,151, 24, 49, 98, 4,222,153, 54,173,149,175,192,242,230,116,187,221,216,181,107, 23,118,238,220, 9,151,203,
- 5, 89,150,213,119,239,207,202,123, 32, 49,232, 19, 78, 98,177, 88, 42,118,238,220,105, 94,184,112, 33,226,227,227,209,160, 65,
- 3,213,101,242, 21, 3,202, 43, 84,220, 45, 22, 75,197,190,125,251,204, 75,150, 44, 65,124,124, 60,234,215,175, 15,163,209,168,
-114, 74,146,132, 61,223,173,194, 19,163,238, 65,225,209,159, 48,235,217, 7, 52,135,115,122,231,206,232, 12,192, 52,111, 30,202,
-154, 55, 71,195, 62,125, 32, 72, 18,108, 63,254, 88, 25,190,222,189, 65,117, 58,136,219,183,107,230,220,181,107, 23, 40,165, 72,
- 77, 77,133,213,106, 69, 76, 76,140, 26,214,117,235,214,225,238,187,239,198,226,197,139,209,185,115,103, 77,113,223,187,119,175,
- 26,247,122,245,234, 93, 22,119, 69,196, 52,108,216, 16, 23, 47, 94, 68,163, 70,141,130,114,150,149,149, 85,228,230,230,154, 23,
- 47, 94,140,248,248,120,212,173, 91, 23, 70,163,177,138, 19,246,250,235,175, 87,225,104,221,186,245, 85,115,134,155,239,215, 0,
-183, 3,240,118, 30,236, 0,116, 94,239,133, 0,118,249, 57, 79, 57, 46, 2,104,227,249, 77, 6, 80, 10, 32,214, 15, 95, 32,158,
- 34,143,195,154,232,115,190,239,255, 84, 21, 88,132, 16,165, 54,246, 4,240, 61, 0, 52,107,214, 12,197,197,197,136,138,138, 66,
-199,142, 29, 81, 88, 88,168, 90,135,110,183, 27,183,221,118, 27,222,126,251,109,112, 28, 7,167,211, 9, 74, 41,120,158,199,189,
-247,222,235,207,122,113, 3,192, 29,119,220,129,223, 60, 7, 90,101,100,160,110,221,186, 56,233,229,196,164,165,165, 97,210,164,
- 73,234,180, 22,165, 20, 86,171, 21, 15, 62,248, 32, 31,196, 29,121,234,163,143, 62,138,145, 36, 9,103,206,156,129, 50,210,148,
- 36, 9,199,142, 29,195,204,153, 51,241,200, 35,143,224,248,241,227,168, 95,191, 62, 38, 78,156,104,158, 56,113,226, 83, 0,178,
-130, 52,150,201,159,127,254,185, 90,168,236,118, 59, 74, 75, 75, 81, 90, 90,138,197,139, 23, 3, 64, 21, 7, 75,235,180,153,219,
-237,198,234,213,171,253,142, 14,125, 71, 12, 90, 71, 11,110,183, 27, 59,119,238, 84,197,153, 32, 8,170,251, 68, 8,193,254,253,
-251,193,113,156, 42, 12, 67,245, 61, 74,220,146,147,147, 97, 48, 24, 32,138,162,244,195, 15, 63, 76,174, 85,171,150,105,212,168,
- 81, 40, 45, 45, 69, 74, 74, 10,250,247,239, 15,183,219, 13,135,195, 17,114,237,156, 32, 8, 32,132,160,102,205,154,136,137,137,
-241, 51,213, 41, 99,208,144,139, 0, 42,195,152, 49,192,132,255,204,186, 57, 70, 48, 78,167, 19, 21, 21, 21, 85,196,213,246, 77,
-159,198,237,248,254,155,184,220, 93,155, 42, 51,249,208,221,191,119,199, 48,180,108,251,240,111,169,173,110, 37, 63,236,205, 11,
- 62,157,205,243, 60,198,143, 31,143,204,204, 76, 12, 31, 62, 28,235,215,175,199, 75, 47,189,132, 71, 30,121, 68,235, 8,217, 59,
-156,255,121,248,225,135,255,178,124,249,242, 91,199,143, 31,207, 41,117,210,104, 52,130, 16, 2,155,205, 6,171,213,138,138,138,
- 10, 28, 60,120,208,253,232,163,143, 30,182,219,237,255,185,137, 6,155,143, 63,247,220,115,205, 31,122,232, 33,245,192, 67, 15,
- 61,132,253,251,247, 55,159, 49, 99,198,227,253,250,245,123, 63, 92, 23,203, 0,212,173, 81,171,214, 12, 0, 48,156, 61,251,156,
- 21, 56, 5, 0,111, 2,233, 50,112,247,218,181,107, 1, 0,245,235,215,135, 27,104, 78,128,143,120, 96,153, 11,248,214,159,131,
-229,114,185, 80, 81, 81,113,153,152,242,247, 30, 42,156,148, 82, 74, 8,113,243, 60,143,180,180, 52,164,167,167, 67,167,211,193,
-108, 54,171,237,188,111,155, 20,168,163,245,109,146,120,158, 71,147, 38, 77,208,167, 79, 31, 72,146, 4,147,201,164, 14, 72, 21,
-135,181,117,183,190, 88,182,248, 29, 60,156,222, 18,255,215, 61, 25,159,237, 45,210, 20,206, 59, 57, 14, 93, 37, 9,150,102,205,
- 16, 29, 29, 13,206, 96, 0,241,154,202,162, 70, 35, 56, 31,135, 60, 88, 56,211,210,210,112,246,236, 89,228,231,231, 35, 63, 63,
- 31, 28,199,161,107,215,174,208,233,116, 16, 4, 1,121,121,121,120,227,141, 55, 96,183,219, 67,113, 82, 0,110,142,227,208,164,
- 73, 19,244,238,221, 27, 58,157, 14, 70,163,241,178,169, 65, 81, 20, 81, 90, 90,138,198,141, 27, 99,229,202,149,184,243,206, 59,
- 67,114, 54,111,222, 28, 61,123,246, 84,103, 20,148,165, 58, 74,122,122,196,157,154, 14,222, 55, 37,105,225, 92,254,131, 13,175,
-255,247, 44,202,237,133,248,173,220, 93,101, 6,184, 94, 77, 61, 78, 44, 25, 88,221,238,177,170, 65, 40,165,155, 2,156,150, 72,
- 8,201,241, 42, 27, 25,132,144, 28,239,247, 64,231,121, 62,118,159, 48, 97, 66,135,236,236,236, 41, 93,186,116, 89,182,109,219,
-182,165,129,248, 2,241, 76,152, 48,161,101,118,118,246, 20,239,243,253,252,207,229, 14, 86,101, 57, 38, 20, 94,187,187,215,169,
- 83, 71,157,119, 54,155,205, 85, 58,105,151,203,133,255,252,231, 63, 72, 74, 74, 82,215,232, 36, 39, 39, 7,172, 36,138,219,113,
-159,103,173,210, 65, 73,194, 73, 0, 45, 60, 13,129,203,229,130,195,225,192,138, 21, 43, 16, 29, 29,173, 86,116,179,217, 28, 52,
- 99,116, 58, 93,247, 59,238,184,131, 43, 45, 45, 85, 69,137, 40,138, 56,118,236, 24,222,125,247, 93, 60,244,208, 67,104,220,184,
- 49,100, 89, 70, 73, 73, 9,122,246,236, 41, 24,141,198,238,193, 4,150,226, 76,127,254,249,231,234,212,165,210,120, 41, 80, 4,
-150,214,117, 48,138, 24, 26, 50,100, 8,120,158,247,235, 90,121, 55,104, 91,182,108,209,204,217,185,115,103, 24,141, 70, 53,189,
-190,253,246,247,246,185, 99,199,142,160,148, 34, 49, 49, 17,223,127,255,125,200, 70,183,109,219,182,112,187,221, 72, 74, 74,130,
- 36, 73,100,253,250,245,175,121,196, 21, 17, 69, 17, 63,254,248, 35,246,239,223,143,196,196, 68,152, 76, 38, 77, 83,187,165,165,
-165, 69, 35, 70,140,112, 41,194, 15, 0, 74, 74, 74,206,252,222,185,219,139,239, 29,240,153, 79, 88, 28,197, 55, 67,175,237,112,
- 56, 80, 94, 94,142,195,135, 15,195,106,181, 66,150,101, 28, 61,178, 79, 55,229,141,113,228,245,231,187, 2, 0, 94,155,125, 6,
-214,173,181,213,107,118,124,249, 87,115,175, 7, 22,125, 12, 32, 53, 24,183,213,106,133,195,225, 64,106,106, 42,114,115,115, 81,
- 86, 86,134, 62,125,250, 92,230,144,106,116,117,236,132,144,222,131, 7, 15,222, 50,125,250,244,134, 45, 90,180, 32,101,101,101,
- 40, 43, 43, 67,121,121, 57,148,207,251,246,237,163, 75,151, 46, 61, 94, 94, 94,222,139, 82,106,191, 73,166, 6, 7,246,235,215,
-175,255,219,111,191,125,217,111,111,191,253, 54, 14, 28, 56,208,127,237,218,181,249,183,222,122,235, 55, 90, 69, 86, 3, 64,231,
- 18,197,151, 62,253,244, 83, 9, 0,122,247,238,253, 82, 3,167,243,249,124,192,222,162, 85,171,251,182,109,219, 86, 67, 25,152,
-213,168, 81, 3,148, 82,190,188,188,188,198, 29,119,220,113, 31, 2, 8, 44,167,211, 9,171,213,170,254,191,247, 20,161,247, 98,
-100,142,227, 96, 54,155,227,110,189,245, 86,155,103,224, 91,118,240,224, 65,127,107,240,220,149,119,141, 1,181,106,213,130, 40,
-138,208,235,245, 85,214,223,132,114, 49,252, 64,174,236, 71,168, 58,237,244,243,247,171,113,241,200, 15,144, 8,133, 91,118,194,
-237,114, 64,118, 58,192,195,141, 3, 71, 79,163, 69, 74,200, 54, 68, 13, 39, 55,123, 54,228,142, 29,209,104,208, 32,112,162, 8,
-199,142, 29,149,142,208,192,129,128, 78, 7,227,230,205, 90,195, 89, 37,238,185,185,185, 24, 55,110, 28,166, 78,157, 10,131,193,
-160, 14, 84, 15, 30, 60,136, 79, 62,249, 4,253,250,245,211, 28,119, 66, 42,167, 90,149, 52,156, 48, 97, 2, 10, 10, 10, 48, 99,
-198, 12,116,232,208, 1,162, 40,226,226,197,139,184,227,142, 59,112,238,220, 57, 77,156,148,186, 17, 31, 31, 15, 81, 20, 17, 21,
- 21,117,217, 26, 49,165,223, 11, 39,143,188, 57,159,189, 55, 10, 31,110, 61, 8,192,141,115, 75,186, 87,233,143,166,124,114,228,
-154,212, 67, 47, 13, 66, 66,156,151,161,145, 79, 57, 79, 73,228,168,236,236,236, 41,190,215,135,226,243,254,221,231,122,187,143,
- 40, 59, 23,114,138, 80, 17, 67,110,183, 27,102,179, 89, 93,111,229,219,145, 42,191,121,143,110, 66, 53,230,110,183, 91, 45, 0,
-188,159,209,248,129, 3, 7,112,224, 64,213,155,105, 62,248,224,131,160,156, 46,151,235,182,184,184, 56,156, 61,123,214,187,113,
-193,107, 19, 39,226,255, 70,141, 82,197,149, 78,167, 67,102,102, 38,238,186,235, 46,216,108,182,219, 52, 52,186,234,186, 51,183,
-219,173, 58,117, 58,157, 14,111,188,241, 6,246,239,223, 95,101, 97,187, 78,167,147, 53,100, 56,214,172, 89, 19,210,193,146, 36,
- 73,117,241,180,112,238,217,179,231,178,181, 56, 74, 99,251,191,255,253, 79,237,108,181,186, 98,178, 44,195,104, 52, 18, 73,146,
-136,209,104,140, 25, 53,106, 84,149, 53, 62,146, 36, 65,175,215,171,233, 19, 10, 67,134, 12, 9,218, 58, 61, 62,248,182,126,184,
- 73,225,114,185, 96,179,217,112,233,210, 37, 76,158, 60,217,115,116,226, 89, 0,232,216,247, 53, 60,254,112,167,122, 62, 54,179,
- 82, 2, 67,182,148,241,241,241, 88,188,120, 49, 68, 81, 68, 78, 78, 14, 98, 98, 98, 48,116,232, 80,196,196,196,224,197, 23, 95,
-196, 3, 15, 60, 16,214,226, 84, 74,105, 9, 33,164,207,115,207, 61,183,101,218,180,105,245,234,215,175, 15,135,195, 1,187,221,
- 14,135,195,129,163, 71,143, 98,217,178,101,167,202,203,203,251, 80, 74, 75,110, 18,113, 85,247,214, 91,111,253,235,226,197,139,
-225, 61, 0,240,110,151, 22, 47, 94,140,110,221,186,253, 53, 47, 47,239, 23, 0,249, 90,120, 79, 2,143,191, 51,117,106, 61,101,
-250,126,234,212,169,245,254, 62,126,252,227, 0,222, 59,176,119,239,199, 99,198,140,121,110,249,242,229, 85,174, 25, 51,102, 12,
- 14,236,221,251,113,160,122,174,184,161, 60,207,227,217,103,159, 13, 21, 4, 17, 0,108, 54, 27,250,244,233, 19,112, 64,213,162,
- 69, 11,200,178,172,184,213,151, 45,108,246,110,223, 53,182, 31,202,102,149,234,160,252,196,174, 53, 24,255,196,112, 64,118, 1,
-142, 50,192, 81, 14,234, 40, 7,181,151,129,232, 12,160,206,138,144, 3, 63, 37,156, 49, 49, 49,149, 2, 72,175, 7,188,250, 31,
- 98, 52,130,120,156, 43, 45,225,244,141,251,137, 19, 39,240,228,147, 79,194,110,183, 99,232,208,161,168,168,168,128,205,102, 67,
- 69, 69, 5, 26, 54,108, 8,171,213,170,197, 17, 84,182, 51, 80, 93,192,231,158,123, 14, 29, 58,116,192, 27,111,188,129, 23, 95,
-124, 17, 13, 27, 54,196,227,143, 63,142,101,203,150,161,101,203,150, 40, 47, 47, 15,201,169,244,157,102,179, 25,130, 32,168,109,
-176,119, 94, 41, 2, 43, 84,220,131,113,130, 84,110,135,229,155,239,147,255,175,249,245, 86,103,115,180,136, 44,175,243,114,149,
- 49,105,102,102,230,203,132,144,156,204,204,204,151,179,178,178,246,107,225, 11,240,251, 42,207,251, 32,175, 99,185, 33, 5,150,
-119,133, 86, 70, 51, 74,102, 40, 2, 70, 17, 88, 57, 57, 57, 88,177, 98, 69, 21, 1, 21, 74, 96, 29,240,100,110,115,207, 40, 76,
-249,222,204,237, 70,143, 30, 61,208,186,117,235, 42,238, 85, 40,135,136, 82,138, 3, 7, 14, 96,203,150, 45,184,235,174,187, 80,
- 94, 94, 14,167,221,142,103,127,250, 9, 45, 70,142,132,221, 51,165, 25, 21, 21,133,119,223,125, 87,115,135,163,196, 63, 42, 42,
- 74,181,231, 69, 81, 68,219,182,109, 33, 8, 2,126,252,241, 71,124,253,245,215, 97,221, 82,231,118,187,113,223,125,247, 85, 17,
- 67,190, 2, 75,169, 60,171, 86,173,210, 28,206, 30, 61,122,192,108, 54,171,233,246,197, 23, 95,168,191,119,239,222, 29,132, 16,
- 36, 37, 37, 33, 39, 39, 71,115, 56, 21,241,196,243, 60,202,202,202,144,155,155, 11,157, 78,167,174,207,208,235,245,106,250, 48,
- 4, 23, 88,229,229,229,176,219, 43,205,158, 99,199,142, 85,249,221,238,184,114, 19, 72, 41, 71, 22,139, 5, 27, 55,110,196, 39,
-159,124,162,142,144,189,197,118,152,163,200, 34, 66, 72,223, 23, 95,124,113,227,155,111,190, 89, 59, 33, 33, 1, 74,181, 76, 0,
- 0, 32, 0, 73, 68, 65, 84, 1, 14,135, 3, 39, 78,156,192,194,133, 11,207,148,149,149,245,165,148, 22,221, 68, 89, 68,243,242,
-242,138, 19, 19, 19, 21,123, 62,198,110,183, 19,207,160,137, 2, 80,132,100, 25, 0,135, 22,247, 74, 4,122, 14,189,239,190,222,
-222, 11,205,159,123,238, 57,236,216,177,163,183,184, 98,197, 62, 39,176,145, 95,177, 34,109,198,140, 25,234, 57, 51,102,204,192,
-231, 43, 86,108,144,129,141,193,202,146,213,106, 85,219,176,221,187,119,107,110, 35,130, 13, 36,149, 37, 21,129,214, 92,133,179,
-100,129, 82, 74,211,210,210, 42,215, 20,122,218,178,219,238,188, 7,211,223,251, 0, 81, 28,197,189, 61,154, 32,201, 44,128, 24,
-227, 33,245,200, 4,137,245,152,180,147,219,132, 28,240, 82, 74, 81,231,133, 23, 16,111, 52,194,230,113,170,164, 33, 67, 0,157,
- 14,134,181,107, 33,138, 34,172, 35, 71, 2,146, 4,227,194,208,219,244,121,199,253,200,145, 35,216,186,117, 43,154, 53,107,134,
-195,135, 15,171,251, 84,113, 28,167, 14,176,181,198,221, 83,118, 32, 73, 18,206,158, 61,139,140,140, 12, 72,146,132, 15, 63,252,
- 16,155, 54,109,194,139, 47,190,136, 49, 99,198,160, 87,175, 94,151, 25, 10,254, 56, 91,182,108, 89, 37,143, 2,173,143, 10, 39,
-143,252,113, 42,198,209,149,228,251, 53,173,176,191,187, 69,254,166,204, 6,249,113,158,110, 71,229,218, 40, 91, 86, 86,214,254,
-172,172,172, 12, 66, 72, 78, 86, 86, 86, 70, 16, 7,107, 80, 8,135,107, 16, 42,215, 92, 5,111,163,189, 10, 27, 69,229, 26, 44,
- 21,193,110,207, 52,155,205,248,203, 95,254,130,151, 94,122, 9, 9, 9, 9, 72, 77, 77,213, 84,160,131, 97,211,166, 77,216,180,
-105, 83,149, 99, 43, 87,174, 12,122,141, 36, 73, 7,147,147,147,219, 61,240,192, 3,184,120,241, 34, 10, 10, 10, 16, 19, 19,131,
- 22,239,188,131,189,127,251, 27,218,204,155, 7,174,119,229,157,239, 81, 81, 81,200,203,203, 67, 84, 84,212,193, 80, 65, 85, 92,
- 59,101,171, 3,197,142, 87,210,133, 42,126,102, 24,139, 50, 40,165, 88,181,106, 85,208,181, 87,222,119,177,104,229,220,190,125,
-251,101, 14,150,146,222,202,111,202,130,104,173, 48, 24, 12, 84, 17, 88, 70,163, 17,241,241,241, 85,132, 85, 56, 14,214,207,217,
-217,107,121,131, 33, 65, 20, 69, 72,162, 8, 65, 20,225,176, 88,138, 83,159,122,170, 31, 0, 44, 92,184,112,171,201,100, 82, 55,
- 34, 21, 69, 17,229,229,229, 69,247,221,119,223, 13,239,108,217,237,118,117,237, 82,152,141, 72,200,115, 28, 14, 7, 36, 73,194,
- 87, 95,125,133,219,111,191, 29,237,219,183, 87,243, 90,153,226,208, 58, 69,232,243,223,167, 9, 33, 3,102,205,154,181,105,250,
-244,233,177, 22,139, 5, 11, 23, 46, 44, 41, 45, 45, 29, 64, 41, 61,125, 51, 9, 96, 79,124,254,226,213, 70,125, 12,160,134,231,
-107, 9,128,135,195,189,123,176,121,171, 86, 15, 47,244,211,193, 47, 92,184, 16,135, 15, 31,126, 24,123,247,110,172, 7,204,123,
-233,165,151, 26,183,111,223,190, 30, 0,188,244,210, 75, 39,235, 1,243,130,149, 7,197,193, 10, 53,144,245, 55, 96,210, 50,179,
- 16,232,206,193, 43,237,100, 21,145,209,123,216,104,156,255,245, 8, 90,152,127, 67,114,156, 25,238,178,243,144,250, 76,198,222,
-223,140,152, 57,111, 77, 88,241,208, 69, 69,129,120,220, 54, 73,146, 0,131, 1,188, 94,255,123, 56, 61,107,178,194,225, 20, 69,
- 17, 7, 15, 30,132,209,104,132, 44,203,151,137, 41,173,179, 9,222,121,165,184, 75,211,167, 79,199, 11, 47,188,128, 15, 63,252,
- 16,123,247,238, 69,155, 54,109,208,183,111, 95,156, 63,127, 30, 63,253,244, 19,108, 54,155,230,112,122,247, 23, 7, 14, 28,192,
-186,117,235,112,232,208, 33,156, 60,121,242,138,242,199,151,211,183,223, 95,180,238, 87,140,238,151,122,205,234,162, 63, 13, 18,
- 4,185, 62,238, 17,148,245, 80,138, 32,242,253, 14, 32, 78, 57,150,153,153,249,178,214,235,188,191, 43, 14, 88, 16,225,117,185,
-192,162,148, 18,127, 98, 72, 73,116,239, 10,170,124, 86,220, 18,147,201,132,212,212, 84, 77,149,158,231,121,212,183, 88, 20,129,
-162, 58, 87, 10,134, 15, 31,142,180,180,180, 42,107,176, 66, 85,110,155,205,182,229,187,239,190,107, 51,100,200, 16, 46, 47, 47,
- 15,146, 36, 85,222, 86,219,165, 11,218,204,155,135,125,227,199,163,199,177, 99,168,112, 58,149, 91,219,157,229,229,229, 91, 52,
-100,182,186, 48, 81, 17, 17,202, 66,126,165, 50, 79,158, 60,217,239,190, 45,193, 42, 94,160, 17,162,247,139,227, 56,205, 98,200,
-237,118,171, 29, 41,207,243,234,139, 16,162,142,118,195,117, 49, 20,219, 92,225,229, 56, 14, 53,106,212, 80, 43,163,178, 6, 64,
-171,192, 18, 12,134,132, 89,195,135, 55,118, 78,156,136,232,185,115,225,122,254,121,188,222,181,171,250,187,201,100, 50,110,219,
-182,173,145,193, 96, 0,165, 20,133,133,133,184,255,254,251,111,138, 93,199,101, 89, 86, 23,136, 71, 26,159,126,250, 41,142, 29,
- 59, 6,135,195,129,183,222,122,171,138,184,242,126, 93,161,240, 56,218,174, 93, 59,247,128, 1, 3,176,125,251,118,232,245,122,
- 39,165,244, 40,243, 36, 67,227,231,189,123, 87,152, 76,166, 7, 1,152, 47, 94,188,200,215,168, 81, 3, 70,163, 17, 86,171,245,
- 18,239,185, 83, 48, 31,176, 27,156,206,169,247,223,127,255, 12, 0, 16,156,206,169,193,246,193,186, 26,129, 21,202,193,242,238,
- 84,175,212,185,242,199, 41,138, 34, 4,158,199,178,233,175,162,133,185, 24,237,110, 49,161,162, 40, 31, 81, 49, 53, 65, 98, 27,
- 96,230,188, 53, 56,144,255, 91, 88,156,220, 39,159, 64,174, 87, 15,226,131, 15,130, 68, 69, 65,159,147, 3, 73,146, 96,253,203,
- 95, 64,116, 58, 24, 23, 44,184,162,112,150,151,151, 7,116,170,180, 58, 88,190,156,146, 36,161, 93,187,118,104,210,164, 9, 54,
-110,220,136,118,237,218,225,240,225,195, 56,124,248, 48,242,243,243,177,119,239, 94, 92,184,112, 65, 51,167,146, 71,159,124,242,
- 9, 10, 11, 11, 33, 73, 18, 74, 74, 74,112,252,248,241,128,235,159,195,201,119, 5, 81,131, 42, 55,210,174,159,104,184,102, 2,
-203,159, 6,241,131, 34,159,181, 78,202,119,187,143,216,241,253,238,123, 62, 0,156, 7,192,135,184,206,247,123, 81, 86, 86,214,
- 70,197,249,242,240,242,129,214, 95, 85,113,176,124,251,133,123,238,185,231,178, 94, 57, 42, 42, 10,247,220,115, 15,120,158, 71,
-108,108, 44,106,212,168,129,166, 77,155,134,220,100,211, 35,174,228, 17, 35, 70, 92,198,169,215,235,113,239,189,247, 98,233,210,
-165, 0, 0,223,117, 9, 95,125,245, 85,168, 41,152,217,127,249,203, 95, 70,247,233,211, 39, 54, 37, 37, 5,103,206,156, 81,239,
-116, 36,189,122,161,251,209,163,176,203, 50, 76, 38, 19,142, 30, 61,138,217,179,103,151, 57, 28,142,217,161, 50,219, 91, 96, 41,
-110, 13, 33, 68,237,176, 8, 33,244,192,129, 3, 97,183, 62, 90,196, 85,184, 80, 68,149,183,200,122,226,137, 39,212,239,225, 52,
-146,146, 36,209, 65,131, 6,169,207, 32,140,139,139, 67, 66, 66, 2,206,157, 59,167, 54, 26, 38,147, 73, 21, 87, 90, 4,150,168,
-211,193,245,218,107, 16, 26, 52,192,175,123,246,160, 97,124, 60,248,230,205,171,140, 16, 45, 22, 11,210,211,211, 33, 8, 2,230,
-206,157,123,197,194,224,122,131,114,247, 96,106,106,106, 68, 55,171,116, 56, 28,120,236,177,199,252,174,127, 84, 22, 61,187,221,
-110, 56,157, 78,173,119,144, 94,145,139,118,179, 35, 53, 53, 53, 96,253, 9,148, 62,202,150, 12, 60,240,230,175,191,254,218,170,
- 70,141, 26,232,223,191, 63,190,254,242,203,175, 38,122,237, 27,102, 5, 78, 25,206,158,125,214,243,249,116,168,188, 80,238, 34,
-140,124, 62,146,203,220,171,171,157, 30, 34,164,242,206,229,111, 23,189,135, 22,166, 66,180,169, 31,133,173, 59,126, 66,167,122,
- 20,212, 38, 93, 41, 43,204,102,115,101, 59,105, 50,169,119, 15, 18, 66, 64, 12, 6, 32,204,253, 25, 21, 78,165,126, 40,109,239,
-213, 58, 88, 74,220,149,116,124,244,209, 71,241,210, 75, 47,161,127,255,254, 56,124,248, 48, 54,111,222,140,188,188, 60,140, 27,
- 55, 14, 45, 91,182, 68,122,122,186,166,112, 42,124, 95,124,241, 5, 46, 93,186,164, 14, 70, 43, 42, 42,240,218,107,175, 93, 81,
-220,189,243, 93, 21,148,107,135, 1, 0, 62, 92,123,226,122,171,142, 63,132,248, 30,238,245,213, 14,191,189,216,215, 95,127,237,
-247,153,122,131, 7, 15, 46,191,251,238,187,113,232,208, 33,152, 76, 38, 52,109,218, 20, 54,155, 45, 96,103,232,253,180,237, 47,
-191,252, 50, 32,231, 61,247,220,131,134, 13, 27, 86,113,174, 2,109,125,224,251, 4,111, 74,169,133, 16,242, 84,247,238,221, 63,
- 88,191,126,189,190,101,203,150, 40, 46, 46,134,219,237,198,132, 9, 19,240,254,251,239,195,100, 50,225,248,241,227, 24, 52,104,
-144,213, 98,177, 60,229,189, 7,150, 63, 78,143,112,171, 34, 34,148,233,194, 42,114,186,168,136, 4, 25, 33,248,125,210,248,172,
- 89,179, 48,127,235, 86,140,245,114,112,252,225,253,247,223,215,196, 73, 41,197, 59,239,188, 19, 49,206,157, 59,119, 46,244,201,
-159,217,233,233,233, 56,121,242,100,149,105,193, 96, 2,203,151, 83, 18, 4, 68,207,153,131, 83, 63,253,132, 70,183,221, 6,201,
-237, 6, 90,181,250,189, 16, 10, 2,234,212,169,131,183,222,122, 11, 53,107,214, 68, 82, 82,210,101,101,234, 90, 61,181, 62,146,
-156,162, 40,110,126,231,157,119,186,253,235, 95,255,226, 12, 6, 3,118,239,222,141,226,226,226,203,132,146, 42,148, 19, 6, 65,
- 46, 94,229,201, 87,185, 44, 88, 56, 43, 42, 42, 48,123,246,108, 77,249, 62,127,254,252, 43,138,187,183, 83,162, 69,108,221,136,
-121, 20, 66, 92,197,156, 56,113,194,223,162,243,101,240,185,211,207, 31, 39, 1,246, 45, 93,186,180, 85,171, 86,173,148,186, 55,
-106,218,127,255,251,192,100,171,181, 2,168,220,124,212, 35,198, 66,134,147, 82, 74, 12, 6, 3,210,210,210,224,116, 58,195,114,
-177,188,207,245, 13,167,178,214,232,106, 6,122,254, 56, 57,142, 3,207,243, 56,186,237,107,100, 12,168,141,109, 59,243,176,254,
-148, 9,245,162, 10, 80,187,188, 16,238,194, 95,240,236,125,237, 48,115, 69,229,147, 14,246,238, 14,205, 73, 8,129,249,233,167,
- 65,140, 70,232, 87,172,128, 40,138,176, 61,249,100,229, 26, 44, 79,219, 86,241,230,155,128, 78, 7,253,139, 47,106, 10,167,239,
- 76,141,178, 28,196, 91, 92, 5,115,176, 2,197, 29,168,220, 54,225,194,133, 11,248,232,163,143,240,200, 35,143,224,252,249,243,
- 56,126,252, 56, 14, 29, 58,132,101,203,150,105,238,227,124,243, 40, 51, 51, 19,207, 63,255, 60, 56,142, 67, 90, 90, 26, 38, 79,
-158,140, 46, 93,186,132,157, 71,190,249,238,139, 80,238, 85,117,212,205,155, 13, 97,219, 4, 28,199,161,102,205,154,234,230,154,
-222, 29,108,184,214,181,183,152, 49, 24, 12, 48, 24, 12, 85,182, 62,184,251,238,187, 67, 58, 88,158,198,103, 45, 33,100, 76,227,
-198,141,231,101,103,103,155,251,244,233,195, 39, 39, 39, 99,224,192,129, 56,113,226, 4, 86,173, 90,229,156, 49, 99, 70,185,197,
- 98,121,156, 82,186, 65,107,163,228, 45, 34,252,236, 94, 79,155, 52,105,162,121,136, 39,138,226,175, 71,143, 30,109,240,238,187,
-239,114,101, 0,102,112,156,218, 8,113,158,207,222,248,238,187,239, 92, 58,157, 46,232, 29, 75, 58,157, 78,229, 44, 39, 4, 51,
- 60,149,155,243,226, 14,151, 51, 16,188,167, 75,255,159,189,243, 14,143,162,248,255,248,123,118,175, 39,164, 64, 72,128, 36, 23,
- 66, 2,132, 14, 73,104,130, 20, 21, 68, 65,138, 72, 81, 81, 17,148,162, 8, 95, 84,186, 72, 19, 65, 17, 84, 4, 5, 69,137,128,
- 52, 11, 8, 34,189, 23, 41, 73, 40, 2, 9, 2, 9,164, 65, 10,169, 87,183,205,239,143,148, 95, 8, 41,119, 73, 20,196,121, 61,
-207, 61,151,219,221,188,119,118,103,118,246,189,159, 41, 91,252,156, 56, 82, 17,171,213,106,144,105,211,208,192,221, 29,106, 69,
- 1,225, 56,160,224,101,170,133,235,207,159, 63,143,247,223,127, 31,106,181, 26, 63,255,252,243, 67,113,113, 25,141,198,183,111,
-222,188,185,190, 95,191,126,141,203,204, 67, 41,179,200, 92,133, 15,248, 13,145, 91,250, 20, 84, 94, 82, 86, 57,121, 17,127,232,
-208, 33,227,220,185,115,249,116,142,195,130, 98, 77,195,133,159,226,249,114,224,192, 1,217, 96, 48, 36, 84,229, 88,254, 67,209,
- 44,115, 66, 66,130,135,209,104,196,149, 43, 87, 8,254,191, 63, 86,241,235,238,121,148, 50,149, 66, 73,252,129,109, 75,151, 46,
-125,122,248,240,225,181,154, 52,105, 82, 56,248, 68, 91,240, 65,193,204,238, 59, 29, 60,255, 91, 63,250,232,163, 87,126,248,225,
- 7,109,225,245, 18, 23, 23, 87, 81, 52, 26,171, 87,175,182, 87,116, 19, 44,124,211, 67, 97,212,165, 50, 81,244,178,162,234,225,
-253, 70,225,203, 29,223,192,167,213,211, 24,220,247, 81, 28, 93,246, 10,134, 52,179, 64,216,244, 2, 90, 14, 94,139,136,105,249,
-209,155, 54,155,167, 57,116,239,209,187,187,131, 47, 24, 45,200,113, 28,224,226, 2, 82, 44,250, 66, 10,102,116,119,230,126, 86,
-104, 46,202, 58,110,103,207, 7,207,243, 8, 10, 10, 66,112,112, 48, 58,119,238,140,208,208, 80, 60,246,216, 99, 56,119,238, 28,
-206,157, 59,135,241,227,199, 59,253,202,177,226,121,244,228,147, 79,226,169,167,158,170,114, 30,149,204,119,198, 3, 98,176,188,
-189,189,161,213,106, 43,109,168, 74, 98,183,219,139,140,149,193, 96, 40, 10, 77, 59, 98,174,138, 85, 64,251, 9, 33,109,223,125,
-247,221, 55, 13, 6, 67,215,194,169, 24,116, 58, 93,140,197, 98, 57, 44, 8,194,114, 74,105,182,227, 15,101,228, 46, 67, 81,202,
- 6,200,202,202,114,216, 96,201,178,220,227,127,255,251,223,126,155,205, 22,232,200,246, 6,131, 33,201,100, 50,245, 40,111, 27,
- 81, 20,123, 76,152, 48,161, 90, 53,203, 72,251, 93,166,170,240,219,209,190, 93,106,141, 6,218,201,147,193, 9, 2, 8,199,129,
-150,136, 96,169,213,106,120,122,122, 98,235,214,173,240,242,242,122,104, 46,174,205,155, 55,203, 0,134,148,183,205, 35,173,200,
- 73, 0, 45, 30, 25,252, 91,218,197,235, 52, 48, 52,132,196,255,177,117,148,119, 5, 15, 36,143,127,242,201, 39,123, 5, 65, 8,
-112, 36, 29, 90,173,246,166, 32, 8, 78,231,187,162, 40, 36, 37, 37, 5,139, 22, 45, 50,101,100,100, 28,255,143,212,137, 43,123,
-244,232,241,254,222,189,123, 85, 70,163,177, 74, 66,241,128, 93,107,179,125, 18, 22, 22, 54,121,250,244,233,158,125,251,246,133,
-209,104,132,135,135,135,211, 90, 9, 9, 9,163, 1,212,233,218,181,107,239,194, 73, 25, 11,235,223,226,111, 3, 40,252, 46, 24,
-127,163,200,178,124,225,214,173, 91,237,202,169,232,138, 30,198,170,203, 92, 21,206,195, 6, 0, 79, 12,122, 21, 79, 12,122,181,
- 40, 93,251,126,236,142,200,164,221, 8,231,146, 96,251,250, 81, 16,247,194, 34,204, 85,168,201,113, 28, 12,235,214,221, 53,141,
-141,225,147, 79,238,126,248,120,251,109,167,210, 89,252, 65,180,186,250, 96,241, 60,143,244,244,116,196,198,198,226,246,237,219,
- 48,155,205,184,116,233, 18,236,118, 59, 50, 51, 51, 81, 56,210,176, 50,233,172,206, 60,170,110, 77, 70, 21, 13,150, 70,163, 73,
- 27, 52,104,144,119, 69,219, 56,233,246,229, 87, 95,125,181,220, 59,181,171,171,171, 67, 61,190, 11, 12,212,124, 0,243, 11,222,
- 97, 5,171,213,234,244,163,183, 90,173, 78, 29, 52,104,144, 79, 5,199,153,133,252,233,246, 29,226,228,201,147,169, 0,154, 87,
-103,230,253, 29,154,165, 92,136,242,232,209,163,203,205,159, 26, 53,106,148,123, 30,236,217,217, 25, 83,142, 28,201, 55, 85, 45,
- 90, 0,173, 90, 33,239,206,157,140,194, 41,100,115,115,115,211, 95,122,233, 37,169,120,179, 96,241,137, 72, 31,106, 40,174,135,
-181,172,231, 19, 29, 75, 3, 1, 32, 58, 54,223,100,233, 52,184, 94, 65,190,183,252,187,147,150,156,156,124,190, 69,139, 22,127,
-101,102,102,126, 74, 41, 77,252, 79,100, 7,165,103, 9, 33,115, 27, 54,108, 56, 26, 64, 89, 97,134, 13,142, 70,244,236,192,165,
- 58, 86,235,216,217, 51,103, 62, 55,107,230,204,198, 10,224, 5, 64, 15,228, 55, 17, 58, 25, 65,236, 87,221,199, 43,203,114, 98,
-167, 78,157,156,254,159,138,214,151, 51,147, 56,126,128, 17, 56,227,188,230,223,145,206, 66,205, 86,173, 90,161, 77,155, 54, 69,
-223,133, 20, 95, 30, 26, 26, 10, 89,150, 19, 37, 73, 42, 87, 51, 44, 44, 12,205,154, 53, 43,115,134,246,146,125,174,238,247,177,
- 23, 82,248,114,157,208,208, 15, 43,165,201, 40,229,254,249,119,134,254, 31,182, 62, 25, 76,147,105, 50, 77,166,249, 32,104,146,
-138, 66, 62,247,248,248,252,215,149, 85,167,102,177,132, 54,103,121,196, 52, 25, 85,140, 96, 49, 24, 12, 6,227,254, 83,104,152,
- 30, 4, 77,194,178,131,193, 40,243,218, 40,181,169,193, 25,103, 74, 8,113,186,185,162, 34,125,166,201, 52,153, 38,211,100,154,
- 76,147,105, 62,124,154, 21,105, 63, 44,145, 49,214, 68,200, 52,153, 38,211,100,154, 76,147,105, 50,205,251,174,249,176,193,134,
- 14, 48, 24, 12, 6,131,193, 96, 48,131,197, 96, 48, 24, 12, 6,131,193, 12, 22,131,193, 96, 48, 24, 12, 6, 51, 88, 12, 6,131,
-193, 96, 48, 24, 12,102,176, 24, 12, 6,131,193, 96, 48, 30, 24,200,127,232, 29, 99, 12, 6,131,193, 96, 48, 24,255, 8, 44,130,
-197, 96, 48, 24, 12, 6,131, 81,205,168, 0,160,240,229,161, 0, 64, 41,101, 19,243, 50, 24, 12, 6,131,193,248, 71,120, 88, 61,
-136,138, 25, 43, 6,131,193, 96, 48, 24,247,147,135,209,131,112,165, 57, 72, 6,131,193, 96, 48, 24,140,127,138,135,209,131,112,
- 15,179,123,100, 48, 24, 12, 6,131,241,224,243,208, 71,176, 88, 20,139,193, 96, 48, 24, 12,198, 63,205,195,232, 65,216, 52, 13,
- 12, 6,131,193, 96, 48, 24,213,204,223, 58, 77, 3, 33,164, 37,211,100,154, 76,147,105, 50, 77,166,201, 52,153, 38, 51, 88, 12,
- 6,131,193, 96, 48, 24, 12,102,176, 24, 12, 6,131,193, 96, 48,152,193, 98, 48, 24, 12, 6,131,193, 96, 6,139,193, 96, 48, 24,
- 12, 6,131,193, 12, 22,131,193, 96, 48, 24, 12,198,125,130, 0, 40,117, 36, 0,165,244,130,195, 34,149, 24, 77, 80,145, 62,211,
-100,154, 76,147,105, 50, 77,166,201, 52, 31, 62,205,138,180,157,241, 31, 15,180,193,250, 59,231,193, 34,132,180,172,238, 19,197,
- 52,153, 38,211,100,154, 76,147,105, 50,205,135, 79,243, 97,131, 53, 17, 50, 24, 12, 6,131,193, 96, 84, 51, 42,118, 10, 24, 12,
-199, 8, 15, 15, 55,232,116,186, 39, 14, 28, 56,160,185,116,233, 18, 78,157, 58, 69,215,173, 91, 39,218,108,182,125,145,145,145,
- 22,118,134, 30, 14,218,180,105,211,131,231,249,119, 0, 64,150,229,197,103,207,158,221, 91,133,167,124, 18, 28, 28,252,134, 78,
-167,235,165, 86,171,235,201,178, 76,108, 54, 91,138,217,108,222,151,156,156,188,148, 82,170, 84, 66, 51,220,203,203,235,181,150,
- 45, 91, 54,188,118,237, 90, 98, 66, 66,194, 6, 0,123, 1,244, 48, 26,141,207, 7, 7, 7,251, 95,184,112,225,106, 70, 70,198,
- 42, 74,105,228,253, 74, 39,131,193, 12,150, 99, 23, 31,231,238,238,254,152, 90,173, 30,101,177, 88,218,232,245,250, 63, 57,142,
- 91,149,158,158,190,139, 93,120, 15, 47,132, 16,190, 94,189,122,143,251,248,248, 76,200,201,201,233,224,233,233,121,230,206,157,
- 59,159,221,184,113, 99, 47,165, 84,174,164, 38,231,226,226,210, 93,165, 82,141,180,219,237,225, 58,157,238,188,162, 40,223,230,
-230,230,238,185,159,101,169,115,231,206,231,101, 89,246, 43,111, 27,157, 78,167,222,191,127, 63,255,203, 47,191,208, 31,126,248,
-225,206,243,207, 63,239, 58, 98,196, 8, 85, 68, 68,196, 74, 0,147, 75,110,223,177, 99,199,120, 81, 20,189, 29,217,191, 90,173,
- 78,251,227,143, 63, 2, 89,169,187,255,240, 60,255,206,136,133, 7, 59, 43, 20,136,152,214, 29, 5,230,165, 82,132,133,133,125,
-211,191,127,255, 65, 33, 33, 33, 42, 69, 81, 32,138, 34,108, 54, 91,227,168,168,168, 46,187,118,237, 10, 3,240,146,147,215,207,
-211, 83,167, 78, 93, 62,119,238,220,218,106,181,154,136,162,216,126,227,198,141, 79,142, 29, 59,246,252, 87, 95,125,213,106,232,
-208,161, 53, 10,151,207,154, 53,235, 73, 66,200, 20, 74,233,230,127, 58,157, 12, 6,163, 2,131,229,238,238,222,208, 96, 48,140,
-118,115,115,235,213,168, 81,163,164, 17, 35, 70,156, 22, 4,225, 47,158,231,233,154, 53,107,198,219,237,246, 79,252,252,252,246,
-216,108,182, 21, 25, 25, 25,177, 78, 86, 20, 13, 1,140, 0,240, 36, 0, 95, 0,183, 0,236, 2,176,154, 82,122,165, 50, 7,227,
-239,239,223,194, 96, 48,188,205,243,124, 59,147,201,228,231,226,226,146, 2,224,116,110,110,238,103,201,201,201,103, 43,163,105,
- 52, 26,131, 0,140,209,104, 52,157, 37, 73, 10, 84,171,213, 55, 69, 81, 60, 38,203,242,138,196,196,196,171,149,209,236, 84,223,
-189, 55,117,117, 91, 32, 16,189,191,201, 38,107, 92,181,188,168,161,182, 68,217,156,253,254,169, 27,185, 91,238,119,161,240,245,
-245, 13,169, 91,183,238, 91,141, 26, 53,122,174,126,253,250,154, 97,195,134,105,186,117,235,134, 67,135, 14, 61,186,110,221,186,
-246, 26,141, 70,104,223,190,253,207, 73, 73, 73, 75,147,147,147, 29,202,119,157, 78, 23, 92,163, 70,141,215, 93, 92, 92,122, 53,
-105,210, 36,101,220,184,113,177, 81, 81, 81, 49,173, 90,181, 74, 88,177, 98,197, 91,177,177,177,139,124,124,124,118, 91,173,214,
-111,114,115,115,175,252,211,199,108,179,217,130,143, 30, 61, 10,141, 70, 83,234,122, 69, 81, 48,120,240, 96,104,181, 90,172, 88,
-177,130,156, 58,117,106,174,197, 98,153,185,124,249,114,175,136,136,136,103, 75, 51, 88,162, 40,122,255,241,199, 31, 80,171,213,
-247,232,201,178, 12, 81, 20, 33, 73, 18,108, 54, 27,122,245,234,229,205,170,163, 7, 3, 74,105, 93, 10, 96,231, 57, 43, 0,120,
- 86, 69, 75,175,215,135, 60,251,236,179,170,244,244,116,168, 84, 42, 8,130,128, 91,183,110, 33, 56, 56,152,183,217,108,141,157,
-213,107,210,164,201,107, 11, 22, 44,240,222,177, 99,135,176,110,221, 58,123,143, 30, 61,212, 35, 70,140,112,235,214,173, 91, 39,
-127,127,127,238,187,239,190,179,237,221,187, 87, 28, 54,108,152,246,195, 15, 63,244,222,185,115,231, 32, 0,155,255,233,116, 50,
- 24,140,114, 12,150,139,139,203, 14,173, 86, 27, 48,120,240,224,195, 51,103,206,252,194,203,203, 75, 4,128,245,235,215,251, 14,
- 25, 50, 36,229,205, 55,223,140,207,202,202, 82,205,157, 59,183,229,218,181,107,127, 50, 24, 12,183, 45, 22,203, 19, 14, 24, 43,
- 2,224, 77,142,227,198,180,107,215,110,135, 44,203, 87, 15, 28, 56,176,240,137, 39,158,232, 15,128,158, 57,115,230, 39, 66,200,
-119, 0, 62,119, 52,162, 65, 8,225, 27, 52,104, 48,195,207,207,111,194, 87, 95,125,165,107,208,160, 1, 92, 92, 92,144,155,155,
-107,188,114,229,138,255,132, 9, 19,250, 4, 7, 7,127,229,225,225, 49, 39, 50, 50, 82,116, 80,147,248,249,249,141,115,119,119,
-127,127,241,226,197,250,144,144, 16,226,234,234,138,164,164,164,230,167, 79,159,110,246,217,103,159,189,108, 52, 26, 63, 76, 76,
- 76,116, 56,157,221, 9, 81, 89, 27,214,254,181,102,227,118, 93,191,250,122, 21,169,235,226, 2, 53,199, 65, 20, 4,117,162,201,
-212, 96,220, 27, 99,214,118,108, 92,231, 68,158, 58,181,207,197,139, 84,184, 31, 5, 34, 56, 56,248,188,155,155, 91,192,179,207,
- 62,171, 30, 60,120, 48,130,131,131,139,214,189,244,210, 75,120,233,165,151, 52,215,174, 93,211,108,222,188,249,149,181,107,215,
-190,208,160, 65,131,132,184,184,184,150, 21,152,171,237, 6,131,161,254,232,209,163,207, 78,158, 60,249,176,155,155,155, 0, 32,
-249,252,249,243,242,176, 97,195,254, 26, 57,114,100, 98,110,110, 46,102,204,152, 81,127,221,186,117,155,116, 58, 93,170,205,102,
-123,242,159, 62,118,189, 94,143,171, 87,175,222, 99,132, 82, 83, 83,145,145,145, 1,139,197,130,172,172, 44, 20, 60,225, 91, 21,
- 69, 1,199,113, 64,254,104,220,178, 34, 83,136,141,189,215,131,138,162, 8,139,197, 2, 65, 16, 96, 23, 4,168,180, 58,116,237,
-209,243, 47, 66,177, 61,215,106, 94, 26,125,252,248, 77, 86, 61,221, 31, 56,142,187,182,237,240,213, 32, 0, 2,128,152, 42,202,
- 41, 0,112,248,240, 97,220,190,125, 27,105,105,105, 72, 75, 75,131,209,104, 68,101, 34,182, 49, 49, 49,203,195,194,194, 72,116,
-116,244, 14, 0,171, 55,110,220,216,239,206,157, 59,159, 79,154, 52,169,230,162, 69,139, 50, 39, 79,158, 60, 1,192,175, 27, 55,
-110,124,169,117,235,214,189,207,157, 59,183,236,126,164,147,193, 96,148,211,201,157, 82, 90, 47, 32, 32,224,230,154, 53,107,186,
-142, 25, 51,166,105, 70, 70,134, 26, 0,188,189,189,109, 0,144,149,149,165,122,253,245,215, 91,124,251,237,183, 93,245,122,125,
-162, 44,203,181, 75,209, 40,109,132,193, 88, 23, 23,151,167, 46, 94,188,248,113,195,134, 13,245,243,231,207, 63,232,234,234,138,
-101,203,150,237,247,247,247,247,136,141,141,253,208,213,213,181, 11,128, 9,101,164,235, 30,205,192,192,192,233,131, 6, 13,154,
-112,236,216, 49, 93,235,214,173,225,230,230, 6,158,231,225,233,233,137, 14, 29, 58,144,195,135, 15,235,250,244,233, 51, 54, 59,
- 59,123,190,163,154, 70,163,113,194, 51,207, 60, 51, 43, 50, 50,210,208,169, 83, 39,162, 86,171,145,157,157, 13,141, 70,131, 71,
- 30,121,132,108, 88,183,206,208, 54, 52,116,186,209,104,156,233,168,166,173, 81,237,237, 67,198, 76,238,182,253,247, 93,196,199,
-199, 7,182,185,115,145,221,162, 5,108, 83,166,160, 78,221,186,216,182, 99, 39,121,230,165, 55, 58,185,137, 62, 59, 28,213,172,
-134,167,245,187, 52,173, 86,107,112,104,104, 40,127,252,248,113,219,213,171, 87, 45, 37, 71,153, 82, 74,113,241,226, 69,243,239,
-191,255,110,242,242,242,130,221,110, 15,170, 72,147, 82, 90,183, 75,151, 46, 98, 68, 68, 68,167,209,163, 71,171,111,221,186,117,
- 2, 64,108,205,154, 53, 19, 1, 36,165,166,166,198,189,240,194, 11,126,107,215,174,125,188,118,237,218,201,148, 82,239,251,113,
-236,133,134,170,228,167,112,185,175,175, 47,182,111,223,142, 62,125,250,160, 99,199,142, 31,245,235,215, 79,119,234,212, 41, 74,
- 8,249,221,153,116, 42,138, 2,139,197, 2,139,197,130,196,196, 68, 44, 89,186, 12, 39,143, 31,195,198, 53,223,251,142,123, 99,
-236,235, 30, 46,110,199, 67, 59,117, 10,248,167,143,157,105, 22,173, 79,202, 55, 87,196, 76, 41,189, 81, 89,205,103,159,125,182,
-121, 96, 96,160,207,166, 63,107, 34, 83,211, 4,178,218, 3,138,214, 19,178, 87, 91,252,165,121, 10,190,190,190, 62,129,129,129,
- 29,156,209,164,148,238,143,138,138, 26, 64, 41, 93, 69, 41,149, 41,165,191, 76,158, 60,249, 13, 66,200,150,201,147, 39,191, 69,
- 41,253,165, 96,121,196,217,179,103, 7, 81, 74, 15,223,143,116,178,178,196, 52,255, 6,218, 1,232, 83,240,105, 15,160, 67,137,
-223,218, 18,219,245, 40,227,187, 79,137,223,237, 74,252, 95,187,106, 53, 88,132, 16, 90,248, 41, 22,193, 17, 87,172, 88,241,243,
-215, 95,127,189, 34, 45, 45,205, 39, 40, 40,104,226,163,143, 62,218,249,218,181,107, 46, 93,187,118,237,236,235,235,251,118, 84,
- 84,148,207,192,129, 3,191,126,249,229,151,127, 36,132, 72, 14, 68,133,130, 56,142,123,243,248,241,227, 27,154, 52,105, 98, 75,
- 73, 73,241,236,209,163, 71, 38, 0,132,135,135,231,101,101,101,213,240,246,246,150,183,110,221,250, 19, 33,228, 85, 66, 72,133,
-161,105, 63, 63,191,214,181,107,215,158, 48,127,254,124, 29,207,243,101, 69, 80,240,193, 7, 31,232,220,221,221, 95,245,247,247,
-111, 95,145,166,175,175,111,136,155,155,219,140, 79, 63,253, 84,111,181, 90, 33, 73, 18,188,189,189,225,226,226,130,140,244,116,
-164,222,188,137,172,228, 68, 76,159, 56,193,224,106, 48,140,243,243,243,107, 85,145,230,163, 13,220,158,113,245,109,218,101,252,
-132,137,176,142, 28, 9,179, 94, 15,243,219,111,195, 22, 25, 9,243,194,133,176,213,172, 9,235,147, 79, 98,226,196,119,160,245,
- 9,238,248, 72, 64,141, 65,247,203,117,191,255,254,251,220,196,137, 19,117,219,183,111,215,119,235,214,205,190,122,245,234, 92,
-147,201,132,229,203,151,231,134,135,135, 91, 87,172, 88,161,239,216,177,163,235,227,143, 63,174,118, 48, 34, 32,174, 93,187,246,
-252,202,149, 43,231, 95,185,114, 69,221,168, 81,163,185,109,218,180,233,157,155,155,171,238,208,161, 67,159,128,128,128, 5, 81,
- 81, 81, 53,159,126,250,233,121, 51,102,204, 88, 15, 64,196, 3, 2,207,243,224,121, 30, 26,141, 6,173, 90,181,194,198,141, 27,
-225,231,231,135,111,190,249,198,179, 78,157, 58, 46, 17, 17, 17,217, 89, 89, 89,159, 58,163,105,183,219, 97,179,217, 96, 54,155,
-241,199,233, 51,248,253,215, 45, 88,179,238, 7,188,242,218,235,153,146, 36,217,198,142,126,221,205, 77,239, 50,158, 61,255,221,
- 31,242,251, 23, 18, 51, 64,243, 8, 33,118, 0,104,216,176,161,214,223,223,191,125,195,134, 13,181,142,234, 88, 44,150, 47,150,
- 44, 89,226,199,233, 60,113,212,222, 27, 27,233, 92,236,241, 88,142,180,192,201,168, 99,108,132,167,159,126,218, 27,192,146,106,
- 72,239,118, 74,233, 48, 74,233,214,202,252,255,223,157,206,240,240,240,206,225,225,225, 71,195,195,195,175, 23,124,119,174,234,
- 49,175,152, 73, 30,251,238,125,237, 95, 95, 77, 35,230,239,222,215,254,181, 98, 38,121,140,149,220,127, 47,165,121,144, 82,240,
- 38,132,108, 39,132,108,159, 54,109,218, 99, 0,188, 74,252,238, 84,124, 59, 0,218,210,190, 11, 63,197,150,123, 23, 24, 43,239,
- 98,191,171, 5, 85,177,139,180,212,102, 14,163,209,104, 89,180,104,209, 30,147,201,116,224,243,207, 63,111, 55,113,226,196,151,
-252,252,252, 14, 15, 26, 52,232, 83,119,119,119,177,180,254, 37,229,240, 74,199,142, 29,127, 54, 26,141, 74, 82, 82,146, 70, 20,
- 69,205,245,235,215,117,162, 40, 18,181, 90, 77, 45, 22,139,250,194,133, 11, 26, 81, 20,229, 22, 45, 90,108,186,112,225,194, 8,
- 0, 83,202, 19, 52, 24, 12,163,191,254,250,107,125, 89,230, 74,150,101,228,229,229, 65,146, 36,204,153, 51, 71, 63,105,210,164,
- 55, 0,156, 42, 79, 83,173, 86,191,177,124,249,114,189, 40,138, 69,253,103, 98, 99, 99,145,157,153, 9, 49, 47, 15, 66, 94, 14,
-164,188,108,168,204,238,152,240,210,139,250, 5,223,124, 59, 30,192,200,242, 52, 5,109,141,121,223,127,243, 45, 68, 81,132,125,
-195,134, 82,183, 17, 15, 30, 4,236,118,124,240,225, 66,242,206,232, 23,230, 0,248,241, 62,221, 96,192,243, 60, 94,125,245, 85,
- 98,183,219,181,219,182,109,211,182,106,213, 74, 14, 13, 13,117,235,223,191, 63, 36, 73, 66,118,118, 54,244,122,189, 51,178,114,
-131, 6, 13,204, 95,127,253,245,207, 25, 25, 25,219, 62,250,232,163, 46, 75,151, 46, 29,229,237,237,189, 99,200,144, 33,211,221,
-220,220, 4,173, 86, 11, 73,146,220, 31,180,139, 95,163,209,192, 96, 48,192,223,223, 31, 3, 7, 14,196,210,165, 75,193,243,124,
- 6,207,243,123,242,242,242, 22, 93,184,112, 33,206, 89,131,101,181, 90, 97,177, 88,112, 61,254, 6, 68, 81, 68,196,218,181, 56,
-118,240,192,123,148,210,185,235,215,124,239,178,124,229,202,254, 0,222, 97, 85,239, 63,203,224,193,131,121, 66,136,103,195,186,
-122, 19,225,168,249, 4,165, 53, 3, 2, 2, 94,146, 36,233,113,163,209, 88, 59, 33, 33, 33,221,223,223,127,175,221,110,255, 53,
- 45, 45,205, 84, 65,164,146, 72,146,132,209,237,179, 48,182, 35, 7, 73,146,144,149,149,133,155, 55,111,226,207, 63,255,196,201,
-147,127, 86, 42,141,129,129,129,175, 24, 12,134, 39, 52, 26, 77,125, 74, 41,103, 50,153,110,218,237,246, 3, 73, 73, 73,223,210,
- 74, 76,108,248,119,165,179, 24, 11, 6, 14, 28, 88,207,195,195, 3, 81, 81, 81,245,206,157, 59,183, 0,192,163, 85,186, 38,137,
-102,197,144, 55, 14,248,186,184,213, 65,106,236, 70,223, 29, 91,231,174, 0,208,136,149,224,127,245,131, 13,169, 96,147, 52, 74,
-233, 51, 5,134,108,251,130, 5, 11,158, 41,248,191,103,138,255,118, 96, 63,207,148, 98,240,182,151,182,188,218, 12, 22, 33,132,
-150,119,128,174,174,174,210,140, 25, 51, 78, 28, 58,116, 40,188,115,231,206,199,156, 52, 86,133,116,108,220,184,113,228,238,221,
-187,189,234,213,171,103, 83, 20,133,184,187,187, 75,110,110,110,114, 65,223, 22, 26, 23, 23,167,142,139,139,171,225,229,229, 37,
- 3,232, 88,145,160, 90,173,238, 16, 20, 20, 84,230,141, 44, 47, 47, 15,185,185,185,176,217,108,168, 83,167, 14,225, 56,174,194,
-240,159, 74,165,234,212,168, 81, 35,146,155,155,139, 58,117,234,224,220,185,115,176,230,229, 65, 52,229, 66,202,201,133,156,151,
- 13,154,147, 5, 83,118, 22,130,124,106, 19,158,231, 43,140,138, 73,188,193,232,235,234, 10,251,212,169, 16,254,250, 11,208,104,
-160,169, 95, 31, 16,242,187, 90, 9,241,241,128, 86, 11,110,228, 72, 52,122,237, 53, 72,208,249,222,199,130, 14,187,221, 14,179,
-217, 12,141, 70,131,231,158,123, 14,135, 14, 29, 18,218,181,107,167, 79, 76, 76,132,221,110, 7,199,113, 69,205,103, 14, 86,226,
- 50,199,113, 20, 0,188,188,188,196, 69,139, 22,237,239,218,181,107,247, 30, 61,122,236,209,106,255, 63, 40, 96,179,217, 20, 0,
-244, 65,186,240,117, 58, 29,212,106, 53, 8, 33,168, 81,163, 6,114,115,115,113,249,242,229,250,149,209,146,101, 57,191,223, 85,
- 65, 20, 75,150,101,252,113,250, 4,244, 6, 3, 58,116,233, 58, 93, 81, 20,131, 90,165, 2, 95,208,185,139,241,207,209,161, 67,
-135, 48, 13,149,230,191,225, 43, 4, 60, 53,208,223,164,119, 81,153, 6,238,176,119, 15,110,216, 97,192,252, 15,230,215, 8, 10,
- 10,114,141,142,142,206,155, 63,127,190,223,153, 51,103, 0,224,135,242,244,146,146,146,182, 44, 92,184,176,102,247,238,221, 27,
-168,213,106,146,149,149,133,180,180, 52,164,166,166, 34, 33, 33,129,198,197,197, 93, 23, 69,241,103,103,210,216,166, 77,155, 47,
-135, 13, 27,246, 66,243,230,205,213,148, 82,136,162, 8,179,217,220,250,228,201,147,125,142, 30, 61,218, 9,192,171,206, 30,119,
-114,114,242, 47, 11, 23, 46,116,237,222,189,123, 99,181, 90,205, 85, 71, 58, 75, 80,207,205,205, 13,123,247,238,133,135,135, 7,
- 0,212,171,106, 94,217, 69,193,215,197,221, 23,136,255, 20, 62,158, 1,176,139,130, 47, 43,193,255,254, 40, 86, 5, 38,235, 52,
-128, 62, 85, 53, 67,127,151,153,170, 84, 4,171,144,219,183,111,235,114,115,115, 85,148, 82, 78,150,101,149,162, 40, 68,167,211,
- 57,219,148,211,108,208,160, 65, 63,245,234,213, 43,171, 32, 50, 32,122,121,121, 73,153,153,153,200,206,206,134, 36, 73,178,187,
-187,187,185,110,221,186,230,166, 77,155,230, 28, 56,112,160,194, 38, 66,139,197,226, 95, 90, 36,197,108, 54, 35, 47, 47,175,200,
- 96,153,205,102,184,187,187,195,100, 50, 85,120,113, 11,130, 16, 96, 48, 24,144,150,150,134,244,244,116, 88,243,114, 32,228,230,
- 65,202,203,129,148,147, 13, 37, 55, 27, 52, 47, 23,138, 34,163,166,183, 55,236,118,187,127, 69,154,102,155,172, 85, 3,176,252,
-252, 51,240,191,255,149,109,110, 14, 28,128, 75, 72, 8, 44, 22,225,190,205, 81, 86,252, 33, 88, 16, 4, 72,146, 4, 74, 41,181,
-219,237,176,219,237,197, 77,147,147,222, 34,223,144,157, 61,123,214, 61, 53, 53, 85, 79, 41,229,243,242,242,116, 38,147,137,171,
- 93,187,182, 21, 0,149, 36, 73,126,208, 46,124, 73,146, 32, 8, 2, 4, 65,128,205,102,115,234,184, 75,110, 91, 56,114,176, 96,
- 24, 60,236,162, 29,159, 45,253, 18, 91, 54,109,196,165, 75, 23,253,102,206,253, 0,162, 36, 65, 86, 88,191,226,127,138,214,173,
- 91,247,228,121,254,179,142, 30,138,219, 4,127, 49,175,182, 86, 49,197, 46,127,203,116,206,104,176, 88, 45,130,239,130,165, 31,
-122, 81, 10,204,152, 49,227,246,144, 33, 67,106, 76,156, 56,177,197,208,161, 67,123, 52,111,222,252,199,139, 23, 47, 10,101, 84,
-226,154, 17, 35, 70,156,174, 89,179,102,208,218,181,107, 83, 83, 82, 82,106,137,162,104,176,219,237,130,221,110,191,110,183,219,
-143,139,162,120, 32, 57, 57, 57,218,153,180,186,186,186,182, 28, 58,116,168, 58, 51, 51,179,104,180, 95, 90, 90, 26,194,194,194,
-248,125,251,246, 53,171,204, 93,185,173,144, 0, 0, 32, 0, 73, 68, 65, 84,241, 95,186,116,105,169,159,159,223,225,109,219,182,
- 61, 81,163, 70,141, 80,173, 86, 91, 71, 81, 20,217, 98,177,164, 90, 44,150,243,149, 73,103, 9, 82,162,162,162,234,185,187,187,
- 35, 49, 49, 17, 0, 82,170,154,103, 90,181, 38, 49,245,202, 70,127, 31,143, 32, 92,187,244, 27,180,106, 77, 34, 43,201, 15,125,
- 4,171, 93,241,136, 85, 57, 38,201, 50,117,234,212,233,132,144,237, 83,167, 78,157, 94, 78, 4, 75, 46,190, 93,177,237,109,213,
-110,176, 74,195,100, 50,169, 78,159, 62,237,117,251,246,237, 26, 62, 62, 62,166,102,205,154,101, 17, 66, 64, 41, 37, 57, 57, 57,
- 46,169,169,169, 46,174,174,174,182,250,245,235,231, 56,184,191,191,254,247,191,255,245,155, 50,101,202,222, 23, 95,124, 49, 5,
- 0, 50, 51, 51,113,251,246,109,100,100,100, 64, 16, 4, 36, 37, 37,145, 35, 71,142,212,217,183,111,223,227, 0,226, 43, 18, 52,
- 24, 12,137,185,185,185,141, 60, 61, 61,139,204, 65,161,169, 42,254, 45, 8, 2,114,115,115,225,234,234, 90,225,197,173, 86,171,
-147,211,210,210,130,237, 54, 27,210, 18, 19,243,141, 85, 94, 46,228,156, 44,200, 57,217, 32,166, 92,104, 68, 17, 58,181, 26,185,
-119, 50,160,209,104,110, 87,164,233,162,227,237,118, 73,210,242,125,251, 2,164,236,114, 68, 59,117,194,157, 22, 45,160,223,254,
-179,120, 31, 11,122,169,191, 75,154, 5,103,140,198,157, 59,119,184,165, 75,151, 54,139,141,141,173,225,227,227,147,222,163, 71,
-143, 56, 66, 8,229, 56, 78, 73, 77, 77,173, 21, 27, 27,219,200,211,211,211,164, 86,171,211,238,167,145, 42,109,153,201,100,130,
-205,102,131,213,106, 69, 86, 86, 22, 84, 42, 21,186,118,237,122,192,102,179,253, 66, 8, 89,115,242,228,201,220,178, 52, 69, 81,
-188,231, 92,202,178, 92,100,178, 84,132,199, 47,155, 54, 97,217,202,101,248,249,231,109,116,200,160,129,228,208,225, 35, 80, 20,
-154,196,170,220,127, 6,158,231, 63, 60, 54,229, 57, 55, 34, 75,121, 89,251, 55,153,151, 37,104, 77,191,157,189,112,204,108,181,
-243, 13,130,131,154, 6,214,111,160,158, 57,107, 74,234,185,203,127,196,103,126,149, 89,247,221,119,223,173,223,168, 81,163, 58,
-113,113,113,193, 0, 46,151,166,233,230,230, 22, 48,124,248,240,151,179,178,178,212,223,126,251,237,186,132,132,132, 99,148,210,
-235, 37, 76, 88, 27, 66,200,135, 5,245,176, 15, 0, 25,192, 62, 74,233,250,242, 60, 59, 33, 4, 7, 15, 30,188,103,180,159, 44,
-203,149,118,229,201,201,201, 89, 29, 59,118,108, 25, 27, 27,187, 61, 51, 51,115,227, 61,245,151,139, 75,159, 22, 45, 90, 12, 58,
-117,234,212, 60, 74,233, 53,103,180, 57,142,155,242,231,159,127,126, 64, 41, 13, 32,132,220,228, 56,238,189,170,230,153, 64,133,
- 55,118,108,153,189,220, 46,216,141, 90,141, 54, 65,160,194,155,172, 36, 63,244, 20,246,145, 66,113,227, 84,138, 49, 58,190, 96,
-193, 2,195,194,133, 11,177, 96,193,130, 63, 75,139, 96, 21, 26,173, 5, 11, 22,252, 89,184, 93,177,237, 15, 87,171,193, 42,205,
- 57,202,178,172, 95,184,112, 97,167,230,205,155, 39,119,238,220, 57,217,104, 52, 90, 10,111, 16, 42,149, 74,244,241,241,201,150,
- 36,201,122,251,246,237,218,135, 15, 31,110, 64, 41,117,164,243,231, 33, 55, 55, 55,205,153, 51,103,234,109,220,184,177,117, 76,
- 76, 76, 72,159, 62,125,138,162, 3,137,137,137, 33,159,125,246,153,172,211,233,210,121,158,143, 4, 80, 97, 39, 31, 81, 20, 79,
- 94,185,114,165, 97,135, 14, 29,136, 40,138,119,153,170,226,127,107,181, 90, 36, 38, 38, 82, 69, 81, 78, 59, 96, 48, 78,159,139,
-142, 14,110,209,164, 73,190,185,202,205,134,156,147, 13, 57, 59, 11,196,156, 7,141, 40,192,213, 69,129, 78,235,130, 63,243,159,
-200, 42,156, 45, 89, 37, 89,110,198,231,228, 52,170,191,104, 17, 52,158,158,128, 32, 20, 53, 11, 2, 40,106, 46,164, 41, 41, 56,
-115,226, 4, 84,138, 45,249,126, 26,141, 90,181,106, 33, 39, 39, 7, 54,155, 13,148, 82, 80, 74,139, 12,149, 86,171, 69, 65,127,
- 41, 71, 67, 87, 30,253,251,247,127,180, 67,135, 14, 49,175,190,250,234,254,102,205,154,221, 40, 44,235, 46, 46, 46, 66,147, 38,
- 77,146,109, 54, 91,222,245,235,215, 67,214,174, 93,219, 73, 81,148, 26,247,227,184, 75,154,161,194, 8, 94,161,185, 74, 75, 75,
-195,174, 93,187,112,252,248,113, 92,188,120,177,221,201,147, 39, 91,109,217,178,229,221,230,205,155,119,184,120,241,226,109, 71,
- 13, 86,225,185,164,148,130,230,143,142,199,214, 95,127, 71,239, 62,221, 72,174, 41, 7,219,119,236, 6,165,180, 30,171, 79,255,
- 49, 76,144,100,147,237,208, 6,243,171,151,116, 89,105,118,204,139,142,142, 60,210,167, 79,159,189,193, 13, 26,187, 3,128,221,
- 70,107,186,104,188, 12, 42,149, 74, 11, 0, 1, 1, 1,225,148,210,207,145, 63, 18,233, 30, 6, 12, 24,208,177, 78,157, 58,173,
-119,238,220,121, 62, 33, 33,225,120, 73,115, 5, 0, 33, 33, 33,239, 93,184,112,225, 73,181, 90, 77,138, 85,254, 20, 64,169, 6,
-235,217,103,159,109,100, 52, 26,107,237,184,226,129, 28, 77, 48, 20, 46, 11,148,215, 65,246,108,141, 27,154,230,168, 91,247,114,
-173,198,141, 27,183,186,114,229,202,121,103, 14,158, 16, 98, 28, 50,100,200,207,171, 86,173, 10,233,213,171,151, 22,192, 61, 6,
-171,105,211,166,253,247,237,219,247,236,216,177, 99, 91, 17, 66, 6, 81, 74, 29,158, 3,240,244,233,211, 39, 0, 84,107, 39,244,
- 49,243,232, 1, 0, 77, 88,209,253,207, 68,175,128, 98,125,176, 0,164, 33,255, 93,202,197,127, 23,206,117,105, 47,182,109, 90,
-177,168,149,189, 68,212,171,180,117,105,168,198, 65, 86,170,114,110,178, 7, 79,157, 58,213, 38, 60, 60,252, 90,161,185, 42,188,
- 30, 11,255,112,117,117,181, 3,160, 49, 49, 49,205,100, 89, 62,238,192,254, 86, 71, 70, 70,238,248,242,203, 47, 63, 14, 8, 8,
-176,245,239,223,159,251,224,131, 15,182, 23, 70,177,150, 44, 89, 66,123,247,238,253, 91,108,108, 44,185,116,233,210,123, 0,158,
-173, 72,208, 98,177,172,124,243,205, 55, 7, 29, 57,114, 68,111,183,219,145,149,149,117, 87,244, 42, 55, 55, 23,146, 36,129,231,
-121,124,249,229,151, 54,147,201,244,101,133, 79, 71,130,240,237, 71, 31,125, 52, 96,253,234,239,244,188,104,135, 53, 43, 19, 74,
- 78, 22, 56,179, 9, 42,193, 14,157, 90, 70,189, 70,174,200, 77,213, 96,217,174,131, 22, 81, 20, 87, 86, 24, 21,179,153,166,191,
- 49,122,212, 79,123,246, 31,128,250,241,199, 33,238,220,121,239,147, 94,157, 58,176, 10, 2, 22,204,159, 71,137, 37,107,230,253,
- 40,232,106,181,250,242,168, 81,163,234,140, 30, 61,186,102,203,150, 45, 33, 8, 2, 68, 81, 44,138,188,120,121,121, 1, 0, 18,
- 18, 18, 16, 21, 21,149,205,243,124,133,209, 59, 89,150, 15,221,184,113,163,249,200,145, 35,175, 62,245,212, 83, 62,130, 32,168,
- 50, 51, 51, 83, 10,158,140, 85,254,254,254, 6,173, 86, 75, 82, 83, 83,179,238,220,185,227,163, 40,202,241,251,113,236,162, 40,
-226,253,247,223, 71, 68,108, 44,134,135,132, 20,153, 77,155,205,150,223,156,103,183, 99,247,238,221, 56,124,248, 48,214,173, 91,
-151,241,220,115,207,121,188,248,226,139, 30,235,214,173, 27, 7,224,189,178,204,234,228,201,147,177,237,250,117,244, 45,165,175,
- 32,165, 4, 73,201, 73, 16, 69, 17, 63,255,188, 39, 89,173, 82,123, 46,249,120,161, 97,210,244,233,132, 85,187,255, 12,138,162,
-204,238,188,120,203, 56,142,115, 17, 0, 44,143,142, 62,115, 28, 0, 12, 6,131,247,226,197,139,181, 0,176,232,227, 69,106, 74,
-169, 90,146, 36,216,237,118,204,155, 55, 79, 63,122,244,232, 50, 71, 27,253,248,227,143, 89,115,231,206,173,245,218,107,175,245,
- 60,120,240,160,142, 16,178,167,224, 65, 44,163, 32, 82, 85, 27,192,137,218,181,107,215,221,180,105, 83,208,147, 79, 62,233, 90,
- 81, 58,173, 86,235, 87, 43, 87,174,172,191,248,176, 27,118,152, 6, 34,129, 14, 1,173, 69, 81, 75,147,139,102, 53,110,162, 91,
-189,132,122,235,214,173, 91, 14,192,225, 81,122,132,144,166,207, 61,247,220,198, 85,171, 86, 5,142, 26, 53, 42,233,248,241,227,
-137,132,144,210,202,114,198,240,225,195,111, 70, 68, 68, 4, 41,138,178,149, 16,210,223, 25,147,197, 96, 84, 3,167,255,166,109,
-255, 54,202, 51, 88,227, 9, 33,205, 22, 45, 90,244,193,183,223,126,219, 97,250,244,233, 7, 59,118,236,152, 89,104,176,110,221,
-186, 85,235,200,145, 35,221,205,102,179, 36,203,242,184,210,230,196, 40,249,182,109, 74,233, 77, 66,200,103,157, 59,119,126, 97,
-205,154, 53,235, 92, 93, 93, 51,247,238,221, 91,203,215,215,247, 78,100,100,164, 59,199,113,185, 87,174, 92, 81,237,221,187,119,
- 40,128,149,165, 93,192, 37, 53,147,146,146,206, 53,104,208,224,243,119,223,125,119,194,204,153, 51,245,133,115, 12,229,230,230,
-194,106,181, 66,173, 86,131,231,121,108,216,176,193,102,183,219,191, 75, 76, 76, 60,229,128,230,201,192,192,192, 85,159, 44,250,
-100,212, 91, 35, 94,209,114, 57, 89,176,220, 73, 7, 4, 27,116, 42, 14,198,240,154,176,100,242, 88,190,235,168, 61,205, 98,249,
- 41, 33, 33,225, 72, 69,154,199,110,228,236,236,216,200,251,192,188, 57,179, 30,155,250,227,143,128, 44,131,188,242, 10,176,111,
- 31,208,178, 37,148,228,100, 88, 5, 1, 51,166, 77, 1,111, 73, 61,118,242, 70,222, 47, 21,105, 86, 7, 37, 53,111,222,188,217,
- 65,146,164, 97,115,231,206,157, 29, 28, 28,172, 30, 49, 98,132,103, 96, 96, 32, 20, 69,129, 70,163, 65, 82, 82, 18, 78,157, 58,
-149,115,231,206, 29,129, 82,250,126,114,114,242, 15, 21,105,202,178, 60,150, 16,210,236,157,119,222,153,247,193, 7, 31,168, 63,
-249,228,147, 19, 61,123,246,244, 83,171,213,154,214,173, 91,123, 31, 62,124,216,176,101,203,150, 39, 76, 38, 19, 40,165, 19, 28,
- 41, 75,213,125,236, 26,141, 38,237,242,229,203,181, 23, 45, 90, 68,110,101,101, 97,182, 70, 3,161, 96, 0, 66, 97,228,110,214,
-172, 89,112,117,117,197,146, 37, 75,112,250,244,233, 37, 25, 25, 25,111, 47, 93,186,212,107,195,134, 13,131, 11, 13, 86,113, 77,
-189, 94,127,227,220,185,115,198, 21, 43, 86,112, 9,146,132, 79, 69,241,158,136,214,228, 25,239, 65,176, 11, 32,132, 71,212, 31,
-135,231, 63,218,253,137,185, 53, 61, 61, 13,138, 66,233, 63,153,239,255,101,205,179,103,207, 30, 2,112,168,156,167,235,194,135,
- 57,164,167,167, 35, 61, 61, 29, 30, 30, 30,133,147, 38,151,170,105,177, 88,206, 79,153, 50, 37,122,197,138, 21, 61,143, 29, 59,
-246,220,161, 67,135,158,218,191,127,191, 53, 62, 62, 94, 18, 69,145,214,171, 87, 79,245,232,163,143,234,123,247,238,237,162,211,
-233,184, 25, 51,102,100,204,159, 63,223,171,192,128,149,170,169, 40, 10,175, 40, 10,222,238,146,131,201,143,169, 96,179,229, 63,
- 80, 38, 39, 39,225,226,197,139, 56,126, 60, 6,132, 16,206,201,243,249,201,186,117,235, 26,104,181, 90,178,126,253,122,227,250,
-245,235,223,168,232,252,173, 89,179,166,254,250,245,235, 63, 39,132,244,161,148, 42,172, 44, 49, 77,134,147, 6,171,160, 98,185,
- 4, 96, 0, 33,164,211,164, 73,147,230,248,251,251,103,200,178,172,217,182,109,219, 83, 57, 57, 57,181,100, 89,158, 69, 41, 61,
-234,100, 40,112, 21, 33, 4, 67,135, 14,157,230,239,239,255,219,159,127,254,249,216,115,207, 61,183,105,219,182,109,143,203,178,
-124,227,218,181,107,211, 1,124, 9,224, 43, 71, 53,227,227,227, 63,220,179,103, 15, 57,113,226,196,248,169, 83,167,234,124,124,
-124,136,167,167, 39, 44, 22, 11, 18, 18, 18,232,234,213,171,109,118,187,125,133,135,135,199, 28, 71, 53,107,213,170, 53,115,207,
-177, 99,218,243, 23, 47,188,244,191,231, 7,235,235,251, 25,225,198, 25,145,123, 39, 3, 71,143, 37,225,243,221, 71,172,233,118,
-251, 38,142,227, 28, 30, 74,239,127, 53,189,255,158,205,223,110, 57,124,240,224, 99,243, 22,124, 68,154,188,246, 26, 92, 26, 52,
- 64,118,163, 70, 56,117,248, 48, 22,204,159, 71,121, 83,234, 49,233,234,237,103,238, 87,129, 40,120,199,224,247,129,129,129,155,
-174, 92,185, 50,122,250,244,233, 83,195,194,194,168,205,102,211,236,216,177,195,148,146,146,162, 40,138,242,177, 90,173, 94, 17,
- 31, 31,111,115, 66,247, 18,128,103, 9, 33,157, 70,142, 28, 57,219,207,207, 47, 85,146, 36,213,228,201,147, 31,203,204,204,172,
- 67, 41,157,237,108, 89,170, 78, 4, 65,120, 98,210,164, 73, 7, 0,212, 40,222, 28,122,215,197,162, 82,105,114,114,114,136,162,
- 40,162,213,106, 77, 43,140,140,150,117, 29,137,162,248,216,204,153, 51, 15, 88,173,214,250,101,237, 87,163, 55,224,232,241, 19,
- 24, 54,116,136,172,226,249, 15, 94, 28, 58, 68,123,252,143,147, 50,165,202, 86, 86, 61, 61,152, 80, 74, 81,240, 48, 64,203,217,
- 38,129, 16,242,222,153, 51,103,244, 99,198,140, 9, 29, 54,108,152,219,227,143, 63,238, 90, 34,250,174,108,219,182,205,188,114,
-229,202,140, 67,135, 14, 69,142, 28, 57,178, 31,242,103,143, 47,149,228,228,228,157,203,150, 45,243,232,214,173, 91, 67, 89,150,
-145,158,158, 94,212, 7, 43, 49, 49, 17, 55,110,220,184, 41,203,242,111, 78, 30,206,255, 94,124,241,197, 95, 34, 34, 34, 2, 70,
-141, 26,149,180, 97,195,134,223, 0,148,214,167,214,117,224,192,129,125, 34, 34, 34, 2, 70,143, 30,157, 0,224, 29, 54,195, 59,
-131, 81, 5,131, 85,172,178, 56, 14,224, 9, 66,200, 51,132, 16, 47,171,213,186,134, 82,186,189, 10, 21,212, 42, 66,200,222,132,
-132,132,225, 0,252,190,248,226,139, 47, 0, 36, 2,184, 2,160, 95,105,253, 21, 28, 48, 5,115,253,253,253,183,204,158, 61,187,
- 90,222, 69, 88,240, 74,157,137,190,190,190, 63,190,247,245,234, 41,138,162,180, 81, 68,161, 22,120, 85, 22,207,243,231, 68, 81,
-252, 40, 33, 33,193, 41, 67,176, 57, 63,157,125, 59,212,119,127,122,202,216, 97,243, 37,222, 16, 96,178, 73, 90, 23,173,202,174,
-161,214, 4,206,146, 61,251,100,124,238, 3,113, 99, 45, 48, 79,159, 55,108,216,112,245,169, 83,167,222, 5, 48, 38, 47, 47,111,
-165, 94,175,255,228,234,213,171,185, 85,200,251,227, 0,122, 20,148, 37, 31,179,217,188,177, 42,101,169,186,136,140,140,188, 30,
- 30, 30, 30, 12,192, 80,214, 54, 60,207, 47,221,185,115,231,179, 61,123,246,180,218,108,182, 69, 61,123,246, 84, 69, 71, 71, 83,
- 74,233,129,210,182, 63,121,242,100, 42,128,114, 71,118,133,118,234, 20, 16,177,102,205,241, 17,195,135,187, 45,255,108, 73,205,
-211,145, 81,242,119, 17, 17,185, 38,171,117, 41,171,158, 30, 12, 10, 3, 85,106,181, 26, 46, 46, 46,112,119,119, 71, 90, 90, 90,
-133,131, 60, 40,165,215, 8, 33, 3, 39, 77,154,212,105,210,164, 73, 79,249,249,249, 53,171, 95,191,190, 63,199,113, 92, 74, 74,
- 74,122, 66, 66,194, 77, 65, 16, 14, 0,216, 9, 64, 19, 20, 20,116, 14,192,134,178,244, 46, 94,188,248,145,159,159,223,225, 95,
-126,249,229, 41,189, 94,223, 68,163,209,212, 20, 4,129, 51,155,205,153,118,187, 61, 70, 16,132,223,147,146,146,254,112,242,122,
-252,139, 16,242,180, 74,165,250,121,213,170, 85, 33, 41, 41, 41,245, 15, 29, 58,116,207, 36,199,225,225,225, 95, 71, 68, 68, 4,
-140, 29, 59,246,250,250,245,235, 7,177,230, 65, 6,195,129,186,163, 18,243,210, 57, 83, 49, 61, 84,161,206,192,192, 64,157,163,
- 81, 27, 22, 58,126,248, 52, 91,182,108,233, 89,167, 78,157,193,227,199,143,215, 54,105,210, 4, 49, 49, 49, 88,190,124,185, 61,
- 57, 57,121,243,133, 11, 23,178, 42,155,206,208, 78,157, 2, 92,245,250,241, 0,121, 6,160,219, 77, 86,235, 93,239, 34,100,121,
-116,127, 52,251,247,239,191, 69,167,211, 53,224, 56,142, 80, 74,105,225,171,147, 10, 71,128,218,237,246,184,253,251,247, 15,120,
- 24,142,157, 16, 98,108,223,190,253,156,152,152,152,221, 57, 57, 57,247,116,114,215,233,116,125,194,194,194,134,158, 56,113, 98,
-118,201, 81,132,172, 44, 49, 77, 70, 21, 34, 88,140,187,162, 58,140,255, 40, 5, 38,170,104, 64, 67, 80, 80, 16,250,244,233, 83,
-101,221, 2, 51,245, 14,216,204,237, 15, 20, 91,183,110, 29,240, 95, 57, 86, 74,105, 2,202,153,164,212,102,179,253, 6,224, 55,
- 86, 42, 24, 12,199, 97,179, 69, 51, 24, 12, 6,131,193, 96, 84, 51, 4, 64,203, 50,158,104, 28, 14,253, 17, 66, 90, 86,226,137,
-233, 2,211,100,154, 76,147,105, 50, 77,166,201, 52,255, 91,154,197,180,231,150,177, 42,169, 64,231,235,127,181,193, 98,125,176,
-152, 38,211,100,154, 76,147,105, 50, 77,166,121,191, 53, 75,232,143,250,183, 27, 44,214, 68,200, 96, 48, 24, 12, 6,131,193, 12,
- 22,131,193, 96, 48, 24, 12,198,131,141, 67,163, 8,181, 90,109, 51, 0, 47, 3,168, 67, 8,185, 77, 41, 93, 99,183,219, 47,253,
-215, 78,150, 86,171,109, 70, 8,121,153, 82, 90, 7,192,109, 0,247,247, 60, 16, 66,230,204,206,159, 89,127,214,108, 80,252,157,
-237,189, 12, 6,131,193, 96, 48,170,110,176, 26, 4, 4, 60, 71, 56,124, 34, 74,138,167,167,167, 39,183,108,217, 50,174,111,223,
-190,216,182,109, 27,198,191,245,214, 27,254,254,190,138,154, 87,101,129,202,239,198,221, 76,250,201,145,157, 13, 28, 56, 48, 94,
- 20,197, 50,223,223,197,243,124,218,150, 45, 91, 2,171,122, 80,126, 97, 67,226, 69, 81, 40,115, 63, 42,149, 58, 45, 57,122,179,
- 67,251, 9, 8,240,123,142, 3,249, 68, 82, 20,207,154, 53,107,114, 95,124,241, 69,209,121, 24, 55,110,220, 27, 70,127,127, 69,
-173,226,178,168,130,119,227,110,222,252,233, 31,203,185, 98,230, 10, 0,230,204, 6,153, 69, 8, 30, 72,147, 85,144,214, 89,179,
- 64, 1,102, 2, 25, 12, 6,131,241, 31, 54, 88,132,208,207,214,175,252,196, 51, 35, 35, 19, 27,182,238, 66,211,166, 77,113,241,
-226, 69, 52,109,218, 20,143,182,111,205,245,122,164, 13,199,115,168,253,254, 23,107, 63, 3,224,144,177, 16, 69,209,251,151, 95,
-126, 1, 33,164,104,194,190,194, 73,251,114,115,115, 49, 97,194, 4,239,234, 56, 40, 81, 20,188,175,159,254, 25, 42,158, 64,146,
- 41, 4,137, 66,148, 20, 8, 50, 69,142, 89,194,227,125, 94,116,120, 63,132,146,207,190,251, 98,145,103, 86,118, 54,126,222,177,
-231,174,243,240,120,231,118,220,224,222,221, 57, 23,131,166,246,232, 41, 31, 57,124, 30,170,131,226,230,234, 46,147, 5, 60,112,
- 6,166, 48,173,115,230,128, 0,249,211, 98,207,158, 13, 74, 89,196,141,193, 96, 48, 24,255, 53,131,101, 19,101,207, 58,181, 60,
-176,250,187,239, 48,121,234, 60, 52,105,210, 4,148, 82, 16, 66, 48,125,230, 92,124, 58,111, 42,134, 62,221, 21,162,164,120,150,
-165, 81,198,140,193,136,139,139,131,197, 98,185,235,211,162, 69, 11,135, 18,236,232,168, 5, 21, 79,240, 91, 84, 46, 4, 81,129,
- 32, 21,124, 68, 5,143,181,116,115, 74, 83,148, 21, 79, 79,143, 26, 88,181,242, 43, 76,154,187,232,174,243, 48,101,250, 76, 44,
- 95,248, 30, 38,142,125, 5, 54, 81,246,172, 76, 58,157,225, 97,210,156, 61, 27,100,206, 28, 66, 28,109,218,100,231,147,105, 50,
- 77,166,201, 52, 31,110,205,135,210, 96, 17, 66,186, 1, 56, 88,112,210,138, 34, 35,162,221,138,230, 70, 47,124,181,248, 3, 80,
-112, 80, 64, 1, 5,160,138,136, 6,181, 93, 96, 49,155,157,222,161,162, 40, 16, 4, 1,162, 40,226,235,175,191, 70, 94, 94, 30,
- 20, 69, 65,211,166, 77, 1, 0,225,225,225,197, 69, 19, 34, 35, 35,155, 84,164,233,221,178,127, 12, 1, 49, 22, 95, 54,107,209,
-183, 56, 22,117, 13,148, 2, 58,131, 11, 6, 13, 27, 13, 89,161, 16, 68,231,223, 79,106, 53,153, 81,167,134, 26,159,206,159, 9,
- 78,173, 1, 7, 2,142, 35,224,136,130, 38,254, 53, 97,179, 88,254,241,140,155, 53, 27,180,100, 20,107,214,108, 80,204,250,119,
- 21,192, 7,186,105,147,193, 96, 48, 24,127, 59,101,121,144,135,194, 96, 1, 56, 88,218, 65,217,173,102,248,215,212,160,110, 13,
- 15, 72,146,140, 63,133,122,200, 53, 91, 33, 8, 34,110, 8, 2,174, 70,167,160, 83,167, 78, 24, 48, 96, 64,158,221,110,135, 70,
-163,201,217,186,117,171, 95, 69, 6, 75, 20, 69, 8,130, 0,147,201,132,117,235,214, 65,165, 82, 21,189, 56,181,240, 62, 75, 41,
- 69,231,206,157,141, 14,101, 14,136,241,234,169,159,224,166,231, 33, 41, 20,146, 68, 33,201,128,164, 80,152,237, 10, 6,142,124,
- 15,146,162, 64, 86, 20,216,133,138,239,227,119, 25,182, 90,237,208,127,218, 6, 0, 53,138,214,187,235, 40, 38,119,230,160,209,
-234,160,213,240,176, 89,204,255,124,206, 81, 74,103, 17,130,127, 91, 39,247, 89,179,168, 2, 16,146,223, 92, 88,204,100, 61,128,
- 77,155, 12, 6,131,193,248, 71, 56,248, 48, 25,171,146, 6,171,200, 69, 82, 74, 15,253,191,193,178, 64, 18,101,136,146, 12, 73,
-148,144,157,103,193,199, 31,127, 12,157, 78, 7, 66, 72,145, 89, 82, 20,133, 19, 69, 17,189,123,247,246,172,104,135,178, 44, 23,
- 69,176, 40,165,224,121, 30, 29, 58,116,184,103,187, 63,254,112,234,165,240,112,211,243,104,208, 99,218, 61,203, 79,254,244, 1,
- 40,165,144,101, 10, 73,166,176, 75,114,149, 13, 91,104,183,193,176,217,197,252,238,218, 20,176,154,205,247, 39,247, 40,165, 69,
-198,228, 95, 21,185,162,116,214, 44,208, 57,115, 8,155, 38,132,193, 96, 48, 24,165,122,144,135,202, 96, 33, 63, 68, 87,228, 34,
-109, 22, 11, 68, 81,130, 36,201, 16,197,124, 99,100, 48, 24,208,181,107,215,194,251,123,209,247,174, 93,187, 32, 8, 66,133, 59,
- 44,236,212, 46, 8, 2, 20, 69, 1,165, 20, 27, 54,108,128, 90,173, 46,250,104, 52, 26,167, 15, 68,146, 41,166, 77,121, 27, 26,
- 53, 7, 53,207, 65,163,226,160, 86,241,144, 41, 5,165,128,162, 80,200, 10,133, 77,116, 44, 80, 82,158, 97, 3, 0,193, 38, 0,
-148,130,130,194, 98, 50,177, 43,131,193, 96, 48, 24,140,170,113,151, 7,121, 88, 12, 86,119, 66,200, 61,206,195,110, 49, 21, 68,
-175,100,136,146, 84,100,160, 22, 47, 94, 12,149, 74, 5,173, 86, 11,149, 74, 85,100,136, 28, 49, 88, 86,171, 21, 65, 65, 65,176,
-219,237,104,218,180, 41, 40,165,120,254,249,231,239,217,238,212,169, 83, 78, 29,136, 40, 83, 44,248,104,201, 61,203,143,110,158,
-135, 86,205, 26,160, 93, 35, 87, 88, 5, 5, 57,102,169,202,134, 13, 0,172,118, 17, 10,242, 39, 29,176,152,204,236,178, 96, 48,
- 24, 12, 6,163,114,148,234, 65, 30, 10,131, 85, 16,146,187,199, 53, 90,205,102, 72,162, 84,100,178,236,118, 59, 20, 69,193, 91,
-111,189,117,143,208,190,125,251, 96,183,219,203,223,153, 74,149,246,250,235,175,223, 53, 69, 2,165, 20, 63,253,244, 19,116, 58,
-221, 93, 81, 44, 66,156, 51,177,162, 76, 49,251,189,119,161, 85,241, 80,171, 10, 13, 17, 7, 69, 1,182,253,182, 27,219,126,219,
- 93,180, 45,207,171,211,170, 98,216, 0,192,110, 23, 0,154, 31,129, 51,229,229,178,203,195, 65, 8, 33,132, 77,207,192, 96, 48,
- 24,140, 98, 62,160, 84, 15,242, 80, 24,172,178,176, 90, 76, 16,139,245,193, 18, 4, 1,146, 36,225,235,175,191,190,171, 57, 79,
-173, 86,131,227,184, 10, 35, 88,191,252,242,203, 93,147,123,134,135,135,155, 41,165, 24, 52,104, 80, 81,115,227,171,175,190,138,
- 81,163, 70, 57,109,176, 36,153, 98,206,252,197, 69, 58,189,123,116, 65,255,167,187, 65, 41,184,149,167, 94,216,226, 82, 93,134,
- 13, 0,236,182,252, 62, 88, 20,128, 57,151, 53, 17, 58, 74,209,244, 12,179,168,194,206, 6,131,193, 96, 48, 30, 86,202, 52, 88,
-106, 21,151,115,245,198, 45,247,218,174, 6, 72,138, 21,178,146,223,111, 74,150,101,140, 26, 53,170,104,187, 23, 94,120, 1, 47,
-191,252,114,169, 6,203,145,183,109, 43,138,130,163, 71,143,130, 16, 2,142,227,138, 62,229, 68, 64, 74,213, 52,217, 20, 28,219,
- 52, 23, 10,165, 80, 40,160, 20, 12, 72,176, 73, 21, 7, 75, 74,211,172,200,176,233,220, 60,193, 19, 10, 66,128,171,137,183,161,
-226,185, 28,103,143,221, 89,254,173,154,179,103,131,206, 46, 49,165,132,179, 29,220,217,249,100,154, 76,147,105, 50,205,135, 91,
-243, 63, 99,176, 8, 37,239,172,216,254,199, 98, 81, 86,220, 11,151, 53,111,222, 28,130, 32, 96,231,206,157, 69,198,131,231,249,
-162, 38, 61, 71,250, 96,149, 32,161,107,215,174,229, 77,197,144,224,136, 8, 5, 77,104,251,216, 16, 99,121,235,157, 77, 88, 69,
-134,109,213,161, 63,255,255, 36,114, 92, 14, 71,200, 59,172, 56,149,113,254,105,225,120,203,187,167,103, 96, 48, 24, 12, 6,227,
- 63,103,176,226, 19, 18, 54, 0,216, 80,124, 89,239,222,189, 83,251,247,239,111,144, 36, 9, 54,155, 13,130, 32,192,110,183, 67,
- 16, 4,216,108, 54,232,245,122,167,102,220,116,100, 18, 81, 71, 72,187,176,181, 73,117,158, 20, 71, 12, 91,114,114,114, 19, 86,
-124,156,183, 90,249,239, 35,100, 70,139,193, 96, 48, 24,255, 81,131, 85, 26, 22,139,197, 23,128, 42, 41, 41,233,158,117,183,110,
-221, 2, 0,233, 97, 56, 41,213,109,216, 24,229, 27,173,127,227, 12,244, 12, 6,131,193, 96, 84,155,193, 58,120,240,160,244,176,
-152, 40,198, 3,100,180,152,185, 98, 48, 24, 12,198, 67, 6,155, 73,155,193, 96, 48, 24, 12, 6,163,154, 33, 0, 90,150,182,194,
-153,209, 1,132,144,150,206,238,184, 34,125,166,201, 52,153, 38,211,100,154, 76,147,105, 62,124,154, 21,105, 83, 74, 47, 16, 66,
- 70, 81, 74,191,254, 87, 27,172,191,115,206, 71, 54,132,149,105, 50, 77,166,201, 52,153, 38,211,100,154,149,208,255,215, 27, 44,
-214, 68,200,184,111,132,143,142, 50,176,179,192, 96, 48, 24,140,135, 17,213,131,152,168,240,240,240,186,148,210, 48,142,227,106,
- 82, 74,247, 70, 70, 70,222, 98, 89, 85,169, 39, 0, 21,165, 84,122, 16, 53,141, 67, 55,253,172, 83,242,158,244,237,127, 41,161,
-147, 70,223, 98,243,230, 65, 50,203, 49, 6,131,193, 96, 48,131, 85, 64,251,246,237, 3,101, 89,126, 17,192, 80, 0,231, 35, 35,
- 35, 95,116, 86,227,145, 71, 30,209,139,162, 56, 6, 64,123,112,170,176,198,173,187,214, 11,235,208, 21,153,102, 5,123, 55,125,
- 18,215,189,123,247,182, 7, 15, 30,180, 57,163,217,182,109,219,159, 41,165,189,202, 48, 9, 31,158, 57,115,102,190, 51,122,109,
-218,180,233,193,243,252, 59, 0, 32,203,242,226,179,103,207,238,125, 16, 51,212,219,219,219,213,221,221,253,189,134, 13, 27,246,
-120,241,197, 23,131, 59,119,238,156,145,156,156,124, 90, 20,197,133, 73, 73, 73,231, 43,171,233,233,233,249, 94,139, 22, 45,158,
-124,245,213, 87, 27,116,238,220, 57, 35, 41, 41,233,180, 36, 73,149,210,236, 56,241,100,125,106, 74,239,245,203,138, 55, 49,118,
-222,134,128,243,146,254, 69, 0,107,156, 54,226,163,127,169,203,169,120,213,233,229,253, 18, 1, 32, 48, 48,176,190, 40,138,221,
- 20, 69,105,165, 82,169,206,243, 60,127, 40, 62, 62,254, 70, 85,206,231,191, 69,147,193, 96, 48, 24, 15,129,193,106,222,188,185,
-171, 70,163, 25,192,113,220,176, 54,237, 58,119,234, 55,232, 21, 34,114, 6,124,240,246, 11, 78, 71, 54,194,195,195,219,131,240,
- 95,191, 60,126, 65,112, 64, 80, 83,232, 92, 60, 96,178, 3,183,179, 21,104,205, 50,140,173,175, 54,184,126,114, 67, 39, 0,251,
-157,209,165,148,246,218,180,227, 36, 82,178,100, 16,146,223,155,159,227,128, 60,171,130,233, 35, 30,157, 14,192, 41,131,197,113,
-220,180,145, 11, 15,181, 87, 40,240,221,212,174, 26, 0, 15,156,193,242,245,245,125,164, 99,199,142,107,222,126,251,237,186, 94,
- 94, 94,112,117,117,133, 90,173,174,147,148,148,212,119,220,184,113, 79,251,249,249, 77, 73, 74, 74, 90,225,172,102,175, 94,189,
-214,189,251,238,187, 62,132, 16,168, 84, 42,104, 52,154, 58, 73, 73, 73,125,223,121,231, 29,167, 53, 9, 33, 92,139,199, 71,140,
-112,243,233, 10,142, 35,240,112,213, 35, 59,254,252,224,192,192,183, 54,199,199,199, 59,108,162, 67, 71,239,152, 73,161,155,164,
- 72,132,180,124, 97,229,206, 59,135,231,222, 12, 9, 9, 33, 35, 70,140,184, 35,203,178, 69, 20, 69,239,136,136,136,113,190,190,
-190,148,227,184,131, 54,155,237,104,122,122,122, 94,121, 9,155, 83,240, 58,159, 53,107, 60,107,216,237,134, 71, 41,165, 93,155,
- 52,105, 66, 70,142, 28,153, 33,138,162,197,106,181,250,172, 89,179,198,113,205, 98,212,174, 93,187,134, 86,171,237, 66, 41,237,
- 86,165,116, 22, 99,112, 15,114,118,243, 94,218,166,178,235, 75, 28,190, 7, 0, 61,165,244,150, 3,219,250, 0,112,161,148,198,
-253,211,154,127, 7,126,126,126,217,148, 82,181, 51,255,163,209,104,106, 57, 83, 94, 25, 12, 6, 51, 88,229, 85,128, 36, 52, 52,
-180, 51, 33,228,165,192,160,134, 3, 6,190, 56,218, 16,216,168, 37,242, 20,119,196,165, 83, 68, 29,248, 1,132,144,159, 28,213,
-107,216,176,161,214,195,195,227,253,128,198,109,199,143,154, 56,155,187,112, 91,143, 67,113, 50, 84,156, 29, 60, 0,187, 57, 13,
- 57, 41, 49,184, 29,123,208, 34,203,242,201,202, 28, 92, 82,166,132,195, 49,118,240, 92,190,185,226, 57, 2, 85,229,231, 15,175,
- 75, 1,252,126,206, 2, 66, 72,189, 7, 45, 35,141, 70,227,147,125,251,246,221, 60, 97,194, 4,149,217,108,134,213,106, 5,165,
- 20,122,189, 30,190,190,190,248,233,167,159, 84, 67,135, 14,253,216,223,223,255,108, 98, 98,226, 41, 71, 53,135, 15, 31,190,249,
-205, 55,223, 84,197,196,196, 64, 16, 4, 24, 12, 6,232,245,122,212,170, 85, 11, 17, 17, 17,170,215, 94,123,205, 33,205,166, 77,
-155,118,208,233,116,243,218,181,107,215,182, 97,176, 55,159, 94,171, 49, 0, 32, 32,168, 17,220,112,187,235,245, 20,159,180,176,
-176,176, 88,179,217, 60, 63, 54, 54,246,215,242,180, 90,190,177,195, 83, 5,242,246,138,183, 59,113, 42,158, 39, 99, 63, 61,218,
-123,253,175,135,150,117, 13,111,152, 9,192,180, 99,199, 14,107,239,222,189,237, 35, 71,142, 20, 98, 99, 99,185, 79, 63,253,180,
-245,254,253,251,251,249,251,251, 31, 73, 76, 76,252,161, 52,205, 57,179, 65,118,164,252,122, 89, 16, 37,255,154, 93, 69,219,211,
-254, 23,191,120,237,181, 81, 57,254,254,254, 98,129,166,173,119,239,222,246,209,163, 71,219,175, 93,187, 70, 22, 47, 94,220,114,
-207,158, 61,207, 24,141,198, 35, 9,249,111, 61, 40,147,176,161, 75,119,251,180,121, 94,211,167, 93,205, 99,111,141,125, 61,219,
-215,215, 87,170,108, 58, 75,208,168,138,235,139,195, 3,152, 75, 8, 89, 77, 41, 61, 81, 78, 61,208, 6,192, 96, 0,159,222, 39,
-205,114, 49, 24, 12,241, 86,171,213, 27, 0,244,122,125,154,197, 98, 9,116,224, 97,140, 44, 93,186, 20, 26,141, 6, 28,199, 65,
-150,101,200,178, 12, 69, 81, 64, 41, 45,250, 46, 28, 16, 52,117,234, 84,214,156,205, 96, 48,170,207, 96,133,133,133,253,210,123,
-224, 43, 61, 59,118,237, 9, 73, 83, 7, 49,169, 4, 9,113, 20, 42, 94, 2, 7, 5,113,167,183, 82,158,231,127, 40, 81,113, 93,
- 40, 43, 2,230,225,225,121, 96,208,232,217,205,130, 90,116,193,246,139, 2, 20,217,142,244,203,191, 35,235,198, 41,152,110, 95,
-182,139,182,188,139,132,144,227, 90,173,246,211,243,231,207,155, 43,210, 44,141,252,119, 8, 82, 16, 74, 0, 5, 0, 40,192,145,
-210, 42,216, 10, 53, 57,142, 59,191,245,192, 69, 35, 81,187, 2,192, 53, 7, 42,237,106, 31, 93, 81,150,166,159,159, 95,239,113,
-227,198,109,236,211,167, 15,151,158,158, 14, 0,216,178,101, 11,206,156, 57, 3,163,209,136,201,147, 39, 35, 32, 32, 0,115,230,
-204,225,135, 15, 31,190, 0,192, 99,142,104,190,247,242,203, 27,251,140, 28,201,157, 57,115, 6,146, 36, 97,239,222,189,184,112,
-225, 2,234,213,171,135, 9, 19, 38, 32, 32, 32, 0, 51,102,204,224,199,140, 25, 83,174,102,219,182,109, 47, 6, 6, 6, 26, 95,
-126,249,101,174,111,223,190, 36, 53, 23, 24,179, 44, 38,191, 0,106,116, 24, 50,248, 57,238,233,143, 94,199,158, 61,123,154,173,
- 94,189,122, 77,219,182,109,237,103,206,156,241,118,248,124, 18, 66,107,184,123,101, 0, 72, 5, 0,119,119,119, 87, 0,102, 0,
-230,144,144, 16,213,151, 95,126, 41,197,196,196, 92,235,213,171,215, 83, 0,126, 40, 75, 83,146,148,186,223, 78,239,137,145, 31,
-238,209,205,154,245,126, 42,199,169, 69, 0, 2, 0,120,122,122, 22,105, 6, 7, 7,171,150, 45, 91, 38,198,196,196,196, 21,104,
-110, 40, 47,157,162,218,171, 83,155, 71, 91, 8, 7, 19, 50, 90,102,175,191,122,252,205,103,117,123, 90, 4,213,202,171,108, 58,
- 7,247, 32,103, 11,205,211,224, 30,196, 92, 65,148,203, 12,224,175,146,145,172,146,154,148,210, 59,132,144, 85, 0, 54, 16, 66,
-134,149,102,136, 8, 33,143, 0, 88, 7, 96, 0,165, 52,173,162,242, 89, 92, 83,167,211,105,236,118,187,103, 73,227,227,172,102,
-177,180,152, 35, 35, 35, 17, 30, 30,142,226,223,133, 15, 22, 5,219,120, 59,122, 29,241, 60,143,175,190,250, 10, 28,199, 65,163,
-209, 64,173, 86, 67,163,209,220,243,105,211,166, 13, 40,165, 32,132, 56,124,189, 19, 66,248,128,128,128,183, 85, 42,213,112,187,
-221,238,167,211,233, 82, 68, 81, 92,231,229,229,245,113,100,100,164,248, 32,212, 33, 76,147,105, 62, 8,154, 21,208, 14, 64,241,
-107,218, 14, 64, 91,240,119, 58,242, 27,170,188, 74, 44, 47,190, 93,225,119, 97, 61,227, 93,240,127,180,152,110, 26,128,211,213,
-106,176, 8, 33,148, 82, 74, 10,191,203, 56,153,110,137, 22, 79,228,197,121, 67,197, 41, 80,241, 4, 42, 30, 0, 8, 50, 18, 47,
-193,154,151,126, 60, 50, 50, 50,222,145,157,234,245,250,121,131,199,206,111, 38,123,181,195,111,231,236, 16,115, 18,144,120,232,
- 19,106, 78,187,178,138,231,249,213,178, 44, 95,142,138,138, 18,171,122,112, 10, 5,228,226,198, 74, 1, 8, 42, 61, 45, 69,241,
- 23, 70,167, 60, 40, 14,217,215,215,183,223,148, 41, 83,126, 8, 11, 11, 35,107,215,174, 69,203,150, 45,177,106,213, 42,122,229,
-202,149,207, 8, 33,159,197,199,199, 63,102, 50,153, 86,255,240,195, 15,232,216,177, 35, 60, 60, 60,218,132,135,135,171,203,171,
-216,125,125,125,251,173,121,235,173, 31, 90,117,238, 76, 22,247,232, 1,223,231,159,199,198, 67,135,104, 92, 92,220,103,132,144,
-207, 18, 18, 18, 30,179, 90,173,171,191,249,230, 27,180,109,219,182, 66, 77,158,231,253, 55,108,216,192,187,184,184,128,231,121,
-212,215, 3, 62,158, 26,124,188, 41, 6,105,217, 86, 76, 26,224, 11,149, 74,133, 30, 61,122,192,207,207, 79, 53,118,236,216,114,
- 71,183, 94,248,178,119, 86,232,232, 29, 75,198, 44, 62, 54,133, 35, 28, 13,242, 81, 29,240,224,179, 46, 1,158, 42, 0, 30,222,
-222,222, 34, 0,216,237,246,236,223,126,251, 77,138,138,138,170, 21, 20, 20,228,229,204,121,141,142, 62,107,174, 89,211, 43,163,
- 65,131, 6, 42, 0, 30, 94, 94, 94, 85,210,124,169,119,107,109,158,197,142,131,103,174, 63, 58,114,193,129,206, 13,124,221,206,
-245,111, 87,107, 31, 0,147,179,154,133,102,105,112, 15, 98,222,188,249,120, 26,168, 12, 72,185, 34,132,108, 17,114,182, 8, 33,
- 71,130,120, 71, 28, 60, 97, 73,203,205,123,169,139, 19, 21,230, 41, 66,200, 48, 0,235, 74,154,172, 98, 70,104, 24,165,244,188,
-179,154,118,187,125,111,161,241,209,235,245,222,132,228, 27, 67,189, 94, 47, 90,173,214,167,157,209, 4,128,200,200, 72,132,133,
-133,213, 40,208,164,133,223, 5,134,213,105, 10, 95, 90,207,243, 60,194,194,194,208,183,111, 95,132,132,132, 32, 49, 49, 17, 7,
- 15, 30,196,149, 43, 87,138, 34, 92,206, 64, 8,225, 3, 3, 3,247,247,236,217,179,249,248,241,227,245, 1, 1, 1,136,137,137,
- 49,126,249,229,151,255, 59,122,244,104,159,240,240,240, 46,229, 93,139, 12,198,127, 1, 71, 60, 8, 0,111, 66,200,246, 98,117,
-203, 51,133,191,167, 78,157, 58,125,193,130, 5,127, 18, 66,182, 23, 95, 94,124,187,226,223, 5,251,220, 78, 41,125,102,218,180,
-105, 45, 22, 46, 92,248, 97,225,182,247, 37,130,165, 86,171, 95,184,176,243,179, 99,141, 5, 90,207,167, 69,159,130,186,140, 0,
-160,184,113,118, 39, 20, 69, 89,231,136, 78,104,104,104, 23, 99,147,142,175,251,134,116,196,142,179, 54,228, 94,221,133, 91, 39,
-150, 39, 40,146,125, 76,116,116,244,225,234, 56,168,176,176,176, 1, 53,107,215,131, 77,160, 5, 6,235,110,147,245,176, 16, 16,
- 16,240,220,252,249,243, 35,130,131,131,201,230,205,155, 65, 41,197,143, 63,127, 11,148,161, 0, 0, 32, 0, 73, 68, 65, 84,254,
- 72,175, 94,189, 58, 54, 37, 37,101,109,225,253, 56, 36, 36,100, 57,207,243, 6,142,227, 96, 52, 26, 53,231,206,157,243, 5,112,
-163, 44,205,141, 83,166,124,223, 38, 36, 4, 73,131, 7,227, 81, 73,194,183,107,214,208, 27,138,114,151,102,227,198,141,151,171,
- 84, 42, 3,207,243, 8, 8, 8,208,156, 61,123,182, 76, 77, 0, 16, 69, 17,231,206,157,131, 74,165, 66,173, 90,181,240,209,203,
-254, 56,121,249, 14, 90, 5,249,192,146,153,136, 77,251,162, 17, 23, 23, 7, 79, 79, 79,199, 12,208,202,222,243,234, 55, 14,107,
-186,102,221,166,100, 29,205,188,144,145,145,225,149,145,145, 1,119,119,247,108, 89,150,197,143, 63,254, 88,125,245,234, 85, 15,
-189, 94, 15,157, 78, 7, 81, 20,157,114,214,146, 36,113,213,173, 89,211, 77,143,129,143, 55,215, 60,213,169, 49,142,158,189, 17,
-254,201, 79,113, 45, 19, 46, 29, 24, 81, 21, 77, 80, 25, 56,209, 37,234,158,229,254,195,189, 43,249, 84,122,162,192,100,237, 32,
-132,104, 10, 22,167, 22,124, 15, 43,175,169,175, 2,205,162,223, 54,155,173,120,148, 73, 93, 25,205,240,240,240, 66, 13,165,196,
-195, 91, 90, 97,228, 74,175,215,167, 57,170, 39,203, 50,180, 90, 45, 90,180,104,129,119,222,121, 7, 49, 49, 49, 56,122,244, 40,
-124,124,124,208,171, 87, 47,168, 84, 42, 36, 36, 36, 56,109,176,252,252,252,222,126,226,137, 39,154, 46, 93,186, 84, 31, 31, 31,
-143,152,152, 24,184,187,187, 99,222,188,121,134,169, 83,167, 6, 29, 59,118,108, 26,128,185,236, 22,203, 96, 56, 92,159, 60, 83,
-242, 55, 33,100,251,130, 5, 11,158, 41,205, 84,149, 98,230,238, 90,190,112,225,194, 15,139,253,206,172,206,180,114,197, 29,100,
-121, 27,138,162,248,136,103,109, 95,239, 81, 47,246,130,162, 0,146, 2, 72, 50,133,217,108,194,173,152,131,102, 65, 16,182, 84,
-180,179,230,205,155,187, 18, 94,179,226,213,113, 51,201,142,104, 27,172,119,226,145,114,124,217, 77, 21, 71,219, 87,179,185,138,
-152,249,241,183, 56,125,221, 94,208, 76,152, 31,201,146,149,252,191, 31, 6,124,125,125, 67,158,121,230,153,136,160,160, 32,178,
-105,211, 38,216,108, 54, 36, 36, 36,208,168,168,168,209, 73, 73, 73,107,139, 85,240,195,159,126,250,105, 3,207,243, 16, 69, 17,
-215,175, 95, 55,221,190,125, 59,161, 44,205,145, 93,186, 68,180,242,247, 71,226,139, 47, 66,206,206,198, 57,131,129,158,166,244,
- 30,205, 1, 3, 6, 24, 52,154,252,251,239,181,107,215,202,212, 44, 81,176, 97,183,219,145,148,148,132,243, 81, 39, 97, 74, 56,
-129,141,107, 86, 98,205,154, 53,136,139,139,131, 74,165,130, 36, 57, 62, 78, 66, 50,167,218,130,125, 13,185,197,151,229,228,228,
-120, 68, 69, 69, 41,151, 47, 95,246, 40,188,113, 2,128,162, 40,149,182,214, 37, 53,139, 34,164,149,212, 52,232,212,120,172,109,
- 16, 47, 42, 84, 83,229,116,202,185, 66,169,203,133, 59, 98, 21, 42,176, 19, 0, 52,197,250, 29,249, 84,214, 92,149, 48, 62,247,
- 52,173, 85,150,200,200,200,194,136,213, 93, 88, 44,150, 64, 74,169, 75,100,100, 36, 28,233,127, 85, 44, 47,161,213,106,209,175,
- 95, 63, 92,190,124, 25, 73, 73, 73,224,121, 30, 54,155, 13, 54,155, 13, 97, 97, 97,208,104, 52, 78,167, 95,167,211,189, 48,126,
-252,120,151,184,184, 56,100,100,100,128,227, 56, 72,146, 4, 89,150,241,218,107,175,185,232,245,250,161,236,150,201, 96,148,238,
- 65, 8, 33,163, 8, 33,163, 74, 26,164,170, 26,180,210, 52,166, 77,155,214, 2,128,238,111,137, 96, 21,134,231,202, 50, 45,158,
-181,125, 35,166, 45, 88,165,250,229, 28,143,204,148, 88, 88, 83, 99, 97, 12,235,143,212,216, 99,160,178,240,235,197,139, 23, 77,
- 14, 84, 54,111, 15,124,125,118,192,145,120, 29, 44,130, 21,105, 71, 63, 81, 8,149, 70,157, 60, 25,153, 91, 93,230,202,211,171,
-110,196,123, 31,125,171,250,245, 79, 53,238, 36,199, 34,102,235, 20,200,130,185,100,166,237,114, 50,227, 73,120,120,120,221, 70,
-245, 12,224, 52, 58,252, 65,136,207,224,193,131,249,205,155, 55,223,183,206,174,201,201,201,177,190,190,190, 31,216,237,246,153,
- 28,199,225,214,173, 91,244,236,217,179,163, 18, 19, 19,215, 23,110, 99, 52, 26,159,108,223,190,253,103, 83,167, 78, 5, 33, 4,
-251,247,239,135,201,100, 58, 70, 41, 85,202,211,172,245,231,159, 51,187,153,205,216,226,229, 69, 87,202,242, 61,154, 61,123,246,
-252,108,226,196,137, 32,132,224,200,145, 35,229,106, 22, 39, 46,157,194,100, 3, 2,189, 56,120,122,122,226,224,193,131, 69,253,
- 93,178, 68, 55,200,146, 22,190,106, 75,165,207,137,162, 40, 36, 43, 43,139,183, 88, 44,188, 40,138,156, 74,165,162,133, 55, 97,
- 81, 20,149,234,210,148,101,185, 74,154, 37, 30, 92,170,150, 78, 49,187,116, 35,101, 79,171,142,102, 39,123,193,183,182, 42,230,
-170,208,248, 20,118, 64,215,233,116, 69, 70,197,153, 40, 83, 25, 17,172, 74,173, 47,205, 96,169,213,106, 52,106,212, 8, 39, 78,
-156,128,187,187, 59,106,212,168, 1,131,193, 0,157, 78, 7,119,119,119,104,181, 90,112, 28,231,148,201, 18, 4,193,223,223,223,
- 31,127,253,245, 23,244,122,125,209, 71,171,213, 34, 36, 36, 4,102,179,217,151,221, 90, 25,140,210, 61, 72,105, 51,185, 87, 71,
- 51, 94,105, 38,107,225,194,133, 31, 22,143,130, 85,171,193, 42,215,180,212,246,141,152,250,225, 42,213,230, 40, 14, 89, 41, 49,
-184,177,115,186, 36, 11,230, 52, 69, 17,235,101, 94, 59, 10, 69, 81,214, 58,120, 80,143,214, 13,106,133, 99,209, 2,172, 49, 63,
-193,158,117,125, 89,100,100,228,177,234, 52, 87,211, 23,126,171,250,249,156, 10,119,146, 99,113,237,183,169,178,100, 55,189, 30,
- 21, 21,181,169,178,186, 29, 58,116,104,248, 72,219,208,175, 94,170, 35,116,236, 55, 56, 8, 90,131, 6, 83,174,169,158,184,120,
- 60,254, 72,219,182,109, 71,159, 57,115,230,226,125, 52, 89, 11,235,214,173,171, 54, 26,141, 83,146,146,146, 94, 75, 78, 78,222,
- 88, 44,202,212,123,224,192,129, 27,199,140, 25,195,185,187,187, 35, 35, 35, 3,179,102,205,178,240, 60, 63,197, 17,205,125, 94,
- 94, 83, 78,203,242, 61,154,221,250,143,222, 56,229,127,175,112,106,181, 26,233,233,233,152, 51,103, 78,133,154, 84, 95,143, 60,
-255,233, 77,212, 48,168,161,211,232,145,112,204,132, 15, 7,228, 55, 21,105, 52, 26,156,201,105, 9,206, 61, 0, 6,141, 10, 81,
-137,153, 16,221, 46,146,240,209, 81,234,200,149, 97, 21,154, 4, 66,136,156,158,158,174,142,139,139,211,219,237,118, 46, 48, 48,
-208, 10,228, 55,241,101,102,102,106,180, 90, 45, 8, 33,130, 36, 73, 78,197, 46, 51, 51, 51, 85, 87,175, 94,215,137,162, 88,166,
-166, 32, 8, 85,142,135, 86, 53,157, 16,179, 75, 15,249, 9,233, 85, 53, 88, 9,132, 16, 99,225,223,213, 81, 94,173, 86,171,119,
-177,166, 65, 80,234,120,255,176, 50, 34, 88,149, 94, 95, 74,221, 4,173, 86,139,171, 87,175,194,219,219, 27,146, 36,193,213,213,
- 21, 6,131, 1, 6,131, 1, 22,139, 5, 90,173, 22, 60,207,151,218,201,189, 44,180, 90,109, 98, 76, 76, 76, 35, 79, 79, 79, 40,
-138,114,151,201,138,139,139,131,171,171,107, 50,187,181, 50, 24, 78, 5, 60,182, 23, 55, 90,132,144,237, 83,167, 78,157, 94, 89,
-189,169, 83,167, 78,175,106, 84,172, 92,131, 85,216,169,172,100,231,178,176,176,176, 1, 30, 94,245, 34, 38,125,240,141,234,135,
- 51, 28,178, 83, 46, 35,121,207, 12, 73, 22,204,195,213,106,245,137,155,199, 86,174,227, 56,206,114,246,236,217,163, 14,156, 20,
- 46,188, 99,151, 86,188,166, 6, 40,181,192,154,116, 18, 42,149,234,179,234, 52, 87, 83, 23,172, 82,109,142, 86, 33, 51, 37, 6,
- 55,126,159, 38,203,130,185,210,230,170,123,247,238,170,188,188,188, 9, 45, 92,229,247,222, 9, 16, 53,126, 90, 5,151,190,154,
-130,152, 0,119,180,232,104, 64, 96, 19,185,245,201, 93,182,227,225,225,225,139,109, 54,219,194,139, 23, 47, 10,247,163,176,221,
-186,117,107,158,191,191,255,175,201,201,201, 69, 35, 58,124,125,125,251, 13, 27, 54,108, 93,183,110,221,184,245,235,215,163,127,
-255,254,120,255,253,247,105,122,122,250, 91,201,201,201,215, 42,171, 57,112,252,234, 31, 6,247,121,132, 12,153,244, 41,102,190,
-254, 24,190, 93, 54,191, 66,205, 90,125,214,158, 52,250,246,225, 27,215,178, 96,236,144,206,249, 79, 10, 27, 47,227,202,237,252,
-128,167,168,168,144,141, 58,248,106, 68,107,112, 28,193,225, 51, 87,176,250,118, 75,146, 20,127,240, 2, 16,214,164,188,116,202,
-178, 76,190,255,254,123,247,212,212, 84, 46, 36, 36,228, 78,235,214,173, 77, 90,173, 86,177, 88, 44,178, 94,175,151, 92, 93, 93,
- 21,171,213,170,189,113,227, 70,205,164,164, 36,190,176, 25,206, 17,246,236,217, 83,175, 73,147,102, 25,161,161,161,101,106, 38,
- 39, 39,115,206,104,150, 70, 85,211, 89,102, 4, 75,168, 90, 4,139, 82,218,132, 16, 98,174,138, 9,250,187, 40,136,132, 1,128,
-169,172,169, 24,156,137, 96, 21,246,171,210,106,181, 56,126,252, 56,158,122,234, 41, 40,138, 2,157, 78, 87, 52, 45,201,169, 83,
-167,160,209,104,192,243,188, 83,105, 21, 4, 97,253,178,101,203,222, 93,184,112,161,107, 97, 51,164,139,139, 11,180, 90, 45, 22,
- 47, 94,108,178, 88, 44, 27,217, 45,147,193,162, 87,165,123,144, 18,164,149,136, 94,217,139,253, 78, 67,254,187,149,159, 41,248,
- 27,165,252,109, 47,101, 89,198,130, 5, 11, 14, 20,139, 92,165, 85,231,113,149, 25,193, 10, 13, 13,125,194,179,182,111,196,187,
- 31,124,163, 90,115,146, 71, 86,202, 37,164, 31,120, 79, 82, 68,203,240,168,168,168,194,254, 86, 61, 28,221, 81,120,120,120,195,
-250, 77, 58,184,164,230, 42,160,138, 4, 41,251,122,234,153,211, 39, 83,171,122, 0,161,161,161, 79,120,122,213,141,152, 60,127,
-149,106,125,164, 10, 89,201,151,145,188,103, 70,149,204, 85,155, 54,109,122,232, 84,220,183,227,253,197, 90,207,212,150, 32, 83,
- 96,237, 45, 53, 54, 68,159, 60, 42, 16,197,214,226, 17,125,143,150,157,181,120, 98,168,139,234,218,121, 97,202,153,189,120, 51,
- 52, 52,116,120,116,116,244,206,251, 81, 56, 19, 19, 19,139,140,144,191,191,255,192, 17, 35, 70,124,223,189,123,119,178,115,231,
- 78, 40,138,130, 69,139, 22,209,115,231,206,141, 47, 30,141,114, 86,115,224,248,213,223, 63,215,175, 39,153,177, 89,196, 29,179,
- 11, 38,205,254,148,218,147,207, 87,168,217,220,168,105,254,213,123, 47, 1, 0,254,184,120, 11,251,206,101, 34, 41,221,140,145,
-237,129,139, 0, 84, 68, 68, 77,238, 22,102,174, 62,143,214,129, 53, 48,232,177,198,232,218,182, 49,190,248,254,119, 99,237, 94,
- 31,214, 77,223, 53,189,204, 73, 42, 21, 69, 73,223,179,103,143,203,204,153, 51,243,234,213,171,167,202,203,203,227,138,247, 97,
-210,104, 52,168, 87,175,158,148,149,149, 37,236,217,179,167,129,162, 40,119,202,189, 24, 84,220,173,145, 31,238,241,215,114,138,
-117,192,128,129,180,118,237,218, 42,139,197, 82,170,102, 70, 70,134,176,127,255,254, 32, 69, 81,210, 43, 58,151,188,156,155,190,
-120,221, 97,207,193, 61, 90,171, 27,248,222,219,137,223,217,116,222,109,176,238,136, 48,190, 82, 27,246, 59, 34,236,105, 18,132,
- 12, 17, 66,154, 8,201,244,192, 13,231,168,108, 7,244, 10, 34, 97,222,213, 21,193,210,104, 52, 72, 72, 72,192,190,125,251,208,
-190,125,123,184,185,185,193,100, 50,225,196,137, 19,184,117,235, 86, 81, 4,203, 25,110,222,188,185, 68,173, 86,247, 30, 55,110,
- 92,147, 49, 99,198,184, 54,109,218, 20,241,241,241, 88,178,100,137,249,252,249,243,113,181,106,213, 90,192,110,175, 12,134, 67,
-156,254,183, 37, 88, 85,206, 83,221,164, 71, 6,205, 84, 69,252,161, 66,102,210,159,200, 62,242,126, 73,115,229, 72, 40,175,232,
-109,219,178, 44,183,105, 17,250, 8,174,221,150, 32,229,196, 3, 84,142,174,100,120,240,174, 55,120,115, 28,247,110,167, 65, 51,
- 85,107, 78,171,144,157,124, 9,105, 7,102, 58,109,174, 74,209,156,122, 96,210,160, 90,144, 36,156,219,177, 17,159, 38,104, 76,
-215, 45,100, 74,116,116,212,247,148, 82, 26, 26, 26, 58, 52,241,138,184,164,195,211,122,247,231, 6, 62,143,129, 3, 36,215,137,
-175, 70, 76, 6,176,179, 44,205,106, 10,141,150,171,233,235,235, 27,210,172, 89,179,136,222,189,123,147, 45, 91,182, 32, 55, 55,
- 23,153,153,153,248,227,143, 63,222, 76, 78, 78,254,190,178,154,245,154,247,141, 24,208,183, 39,153,249,163,140,216,147,155, 80,
-195,118, 19,182,148,147, 14,105, 94, 72, 16,206,190, 56,249,187, 80,157,222, 0,217,224,135,119,251,251,162,169, 55,129,197,252,
-255, 93,246,218,213,252, 11,121,200,194,209,232,186,248,117,247, 97,240,138, 25, 55, 83,173,137,233,251,254,223, 92,149,150,206,
-180,180,180,201, 26,141,166,235,136, 17, 35,158,239,210,165,139,219,168, 81,163, 82,221,221,221, 77, 90,173,150,175, 85,171,150,
-150, 82,170,221,189,123,183,239,173, 91,183,106, 2,216,144,150,150,118,184,172,116,206,154, 13,138,217,253,154, 94,186, 4,114,
-250,180,111,151,225,251,213, 67,187,116,233, 82, 99,212,168, 81,105,197, 53,101, 89,214,238,222,189,219,239,214,173, 91,158, 0,
-214,167,165,165, 29,169,232,124,158,219,144, 26,212,168, 87,226,251,203,239,228,190, 21,236,239,205, 63,219,163,133,186,102,141,
-252,247, 92, 59,155, 78,160,196, 60, 88,227, 63,109, 85, 94,153, 41,107, 30,172,251, 81, 62, 45, 22, 75,160,179, 81, 49, 71,210,
- 25, 21, 21,101, 46, 57, 31, 86,121, 17,172,178, 52,181, 90, 45, 84, 42, 21,210,210,210,176,103,207,158,187,230,194,210,106,181,
- 69,211, 56, 56,163, 73, 41,149, 9, 33,143,203,178,252,246,196,137, 19,135,155,205,102, 63, 23, 23,151, 20,187,221,190,174,102,
-205,154,229,206,131,117, 63,242,136,105, 50,205,251,169,249,176, 81, 94, 31, 44,195,209,200, 43,224,117,169,200, 61,249,177,211,
-230,170, 52,110,221,177, 34, 81, 47, 65,188, 19, 11, 0,103,171, 41,180,232,118, 36,234, 42,212,250, 12,100,255,241,145,172,136,
-150, 42,245,185, 42, 40, 56, 34, 36, 9,246, 67,235, 49,254,138, 62,131,112,124,251,168,168,211,183, 11,215, 71, 71, 71,111, 12,
- 13, 13,221,191,107,141,233, 76,143,174, 82,237,243,113,191,130,227, 56,225,126,103,102, 65, 39,245,249, 63,254,248,227, 76,147,
-201,132, 59,119,238,208, 83,167, 78,141, 73, 74, 74, 90, 87, 85,205, 79,191, 27, 56,243, 74,108, 54, 12,185, 39,169,237,198,214,
-177,197, 71, 21,150, 71,214,111, 47, 61,218,252,181,157,157, 72,214,133,246, 46, 87, 86, 76,252, 53,195,215,211,247,141, 55, 72,
-189,122,245, 80,179,102, 77,120,121,121, 33, 47, 47, 15,215,206,252, 78, 45, 41, 41, 54,169, 70,248, 87,246,122,143,239, 73,219,
-215,239,168, 3,121, 79, 1, 28, 10, 15, 15, 63,126,240,224,193,167,142, 29, 59,214,239,241,199, 31, 79,237,212,169, 83, 94, 84,
- 84, 84,253,184,184, 56, 31, 0,219,124,124,124,118, 86, 56,215, 16,165,116,214,255,143, 74, 59, 24, 30, 30,126,172, 64,179,111,
-143, 30, 61,210, 58,118,236,152, 23, 21, 21, 85, 63, 62, 62,222, 91,150,229, 95, 27, 54,108,184,235,224,193,131,146, 99,101,116,
-150, 2, 96,118,171, 39, 39, 45,186,156,229,186,228, 90,210,157, 33,173, 26,251, 17, 0,196,233,116,162,196, 60, 88,229,204,115,
- 85,209,122, 7,136,252, 27,138,105,149, 53, 75, 70,194,194,194,194, 2, 11,205, 84,201,111, 39,174,121,180,110,221, 26,197, 71,
- 58,114, 28,119,215,135,231,121,168, 84,170,202,212, 81, 50,128, 69, 5, 31, 6,131,241, 95, 55, 88, 42,149,106,146, 41,242,243,
-185,148, 82,111, 0, 83,163,162,162,118, 85,101, 71, 26,141,230, 88,212,238,111,178,180,126,151, 61,173, 9,135, 77, 28, 33,107,
-170,227, 0, 8, 33,147, 77,145,159,207, 5,224,165, 40,202,123,209,209,209,219,170,170, 41,203,242,226, 71,151,108, 5, 96, 32,
-178, 44,127,114, 54, 50,234,118,201,109,162,163,163,211,219,180,105,243,250, 59, 35,215, 20,189, 0,250, 65,200,208,194, 78,234,
- 65, 65, 65, 83,110,222,188,121,215, 8,192,170,106, 26,234,182,155, 34,166, 71,143, 78, 74, 74,250,193,153,255,191,184,234,169,
-227,192, 83,199,129, 41, 75, 66, 66, 66, 6, 79,159, 62,125, 89,179,102,205, 12,181,107,215, 38, 39, 79,158,164,215,174, 93,147,
- 76, 38,211, 39, 23, 46, 92,248,160, 82,119,236,124, 83,178,205,215,215,119,223,158, 61,123, 6,236,222,189,187,189,162, 40,167,
- 20, 69,153,159,156,156,108,169,170,230,174, 93,187, 6,236,220,185,179, 61,165,244, 4,165,244,215,164,164, 36,107,101, 52,207,
-239, 94,244,127,236,157,103,120, 20, 85,195,134,159, 51,179,125, 55,189,145, 70, 9, 9,132, 16, 18, 32,155, 2,129, 64, 64,144,
-174,162,160, 84, 1, 41,138, 32, 8,250, 34,189,247, 94, 68,225,149,222, 4, 20, 16, 5,164, 72,111, 9,161, 67, 40,129, 4,210,
-123,207,110,182,204,156,239, 7,129, 15,120,129,108, 2, 42,226,185,175,107,174, 77,102,103,238, 61, 83,246,236, 51,103,206,204,
-148, 0, 24, 84,239,173,177, 19, 46, 20, 39,175,224,101,214,129,119,239,222,141,125,137,114,222,126,201,247,203, 99,231,159,176,
-139,190,180,179, 34,183, 95,176, 48, 0,209,225,195,135, 87,100, 22,254,225, 45, 74, 24, 12, 6,227, 69,149,203,159, 54, 0, 8,
-120,252,255,240,240,112,171,250,245,235,191, 19, 16, 16,160,126, 85,206, 63,163,156,111,130,211,195,195, 35,224,117,118,214,169,
- 83,103,120, 88, 88, 88, 70,131, 6, 13,190, 3, 32, 97,219,253,245,115, 2,208,252, 9,206, 42,108, 27, 49, 39,115, 50,167, 5,
-254,129,127,166,255,175, 24, 36,127,101,152, 59,121,242,100, 17,128, 95, 88,172,253,243,121,188,147,250,235,232,140,141,141, 93,
- 4, 96, 17,219, 82,175,245,193, 87,241,159,224, 76,103,107,150,193, 96,252, 27,224,216, 42, 96, 48, 24, 12, 6,131,193,120,181,
- 16, 0, 1,207, 57,210,180,184,181,130, 16, 18, 80,137, 35,217, 43,204,201,156,204,201,156,204,201,156,204,249,239,114,150,231,
-166,148, 94, 33,132, 12,124,214,157,220,255, 81, 1,171,162, 87,219, 84, 72,206, 46, 97,101, 78,230,100, 78,230,100, 78,230,100,
-206,138,251,255,241, 1,139,157, 34,100, 48, 24, 12, 6,131,193,120,197, 72,216, 42, 96, 88,130,135,135,199,148, 70,141, 26, 13,
-140,142,142, 94,124,255,254,253, 74,221,125, 58, 36, 36,164,190, 90,173,158,100, 54,155,181,102,179, 89,161, 82,169, 98, 11, 11,
- 11,191, 59,119,238,220,150,202,150, 43, 36, 36, 36, 88,173, 86, 79, 48,155,205, 13,202,156,215,242,242,242,150, 93,184,112,225,
-167,215,201,201, 96, 48, 24, 12, 22,176, 30,177,104, 44,113,149,149, 66, 50,120, 62, 77, 2,128, 26, 53,106, 84, 55,153, 76,205,
- 69, 81, 12,148, 72, 36,151,121,158, 63,154,144,144,112,239,101, 10,240, 79,113,254, 83, 32,132, 84, 81,171,213,189, 9, 33,173,
- 41,165,191,151,148,148,108,160,148,190,212, 35,137,170, 84,169,226,220,181,107,215,145,139, 23, 47, 70,191,126,253, 70, 57, 59,
- 59, 47,205,204,204,172,208, 21,102, 77,155, 54, 29,172, 82,169, 38,125,254,249, 16, 85,112,112, 48, 81,171,213,184,121,243,102,
-208,130, 5,243, 23, 53,111,222,188,203,177, 99,199, 62,160,148, 86,232,241, 46, 17, 17, 17, 95,170, 84,170,177,195,135, 15, 87,
- 52,108,216,144,200,100, 50, 92,188,120, 49,120,201,146, 37,203,155, 55,111,222,249,216,177, 99, 61,104, 5,207,129, 63,237, 84,
- 42,149,184,114,229, 74,240,252,249,243, 43,229,212, 14, 58, 47,149,169,141, 18, 0, 48,150,200,204, 49, 43,130, 76,150,142, 99,
-213, 19,131,193, 96,188,129, 1,107,249,104, 50, 94, 14,124, 13, 25,200,228, 65,242,125, 43,127,115,188,239,235,235, 75,250,245,
-235,151, 35, 8,130,206,100, 50, 57,175, 93,187,118,136,187,187, 59,229, 56,238, 72,105,105,233,137,172,172,172, 34, 75, 62,212,
-201,201,201, 74, 46,151, 71, 80, 74,155,249,250,250,146,254,253,251,231,152, 76, 38,157, 94,175,119,217,184,113,227, 80,119,119,
-119,209, 98, 39, 33,100,242, 36,144,141, 27,237, 53,122,189,178, 41,165,180,249,171, 42,231, 63, 40, 84,201,149, 74,101, 39,169,
- 84,250,137,163,163,163, 83,187,118,237, 46, 85,169, 82,229,122,122,122,122,157,189,123,247,238,177,177,177,201, 52,153, 76,171,
-245,122,253,110, 74,105,133,239, 56, 47,149, 74,171, 19, 66,144,156,156, 12,169, 84, 42,149,203,229, 53, 0, 92,181,116,254,176,
-176,176, 0,153, 76, 54,229,187, 85,155,149,102,222, 26,217,102, 17,217, 5,128,204,201, 23,147,102, 46,210,204,155, 62,174, 73,
-227,198,141,135, 3, 88, 80,145, 86, 38,149, 74, 53,118,235,214,173, 74, 23, 23, 23,136,162,136,194,194, 66,248,249,249, 97,218,
-180,105,234,153, 51,103,190, 21, 22, 22,246, 41,128,239, 42,235,164,148,194,104, 52,162, 94,189,122,152, 59,119,174,122,210,164,
- 73, 21,114,106, 87,158,151,154,140, 55,194,140, 37,194, 40, 0, 32, 82,126,118,228,100,135,115, 38,227,141,224,242,198,105, 87,
-226,108,204, 64, 22,178, 24,127, 45,238,238,238,141,189,188,188,126,188,127,255,254, 25,158,231, 63, 78, 72, 72, 40,125, 5,245,
-147, 7,128, 26, 0,236,240,224,194,170, 92, 0,247, 40,125,112,224, 94, 25,156,106,181,104, 15,185,186, 23, 64, 3, 9, 0,112,
-220,101,106, 42,222,144, 21,123,120,207, 75, 57, 21,154,222,160, 66, 32, 1, 68,112,252, 21, 34, 20,175,201,184,118,120, 63,219,
- 51, 24,175, 44, 96,109, 30, 77,236, 64, 49, 98, 96,183,129, 28,207,243,100,197,143, 43,219, 31,248,245,191,203,234, 54,108,151,
- 11,160,120,207,158, 61,250,246,237,219, 27, 62,249,228, 19,227,205,155, 55,185,133, 11, 23,214,255,227,143, 63,222,241,244,244,
- 60,158,148,148,244,220,187,124,175,156,160,185, 41,152, 74, 60, 39,124,162, 42,205,150, 15, 92, 50,112,224,224, 2,119,119,119,
-115,153,179,180,125,251,246,134, 65,131, 6, 25, 30,115,190,235,233,233,121,236, 69,206,201,147, 64,100, 57,234,125,145,245,137,
-204,213,183,219,169,254, 3,191, 40,112,119,119, 55,115, 28, 87, 84,217,114,254,147,176,182,182,158,163,209,104, 58, 6, 5, 5,
-197,126,249,229,151, 71,223,121,231,157, 76, 0, 88,187,118,173,231,236,217,179, 47, 3, 56,245,203, 47,191, 56, 47, 92,184,176,
-219,249,243,231,167, 90, 91, 91,255, 90, 88, 88,248, 31, 11, 43, 70,206,213,213,117, 76,155, 54,109, 70,245,232,209, 3,214,214,
-214,232,211,167, 15,244,122,253, 73,119,119,247,169,169,169,169,243, 45,105,205, 81, 40, 20, 99, 63,251,236, 51,133, 40,177,198,
-184,117,113,200, 41,122,144, 27,212,114, 14,159,183, 82,160, 75,151,174,234,153, 51,103,124, 83,145,128,165, 86,171, 39, 12, 31,
- 62, 92,225,226,226, 2, 0, 40, 42, 42, 66, 81, 81, 17, 10, 11, 11, 81, 90, 90,138,119,222,121, 71,253,253,247,223, 79,168, 72,
-192,122,220,121,243,230, 77, 24, 12, 6,232,116, 58,232,245,122, 88, 91, 91,163,115,231,206,234,101,203,150, 89,236,116, 75,131,
-244,158, 81, 92, 56,242,179, 15,157, 0, 96,254,119,219, 22, 2,186,230,212,130,113,110,105,136, 0,192, 2,214,139,247, 79, 30,
-192, 59, 82,169,244, 29, 31, 31,159,160,184,184,184, 75, 38,147,233, 23, 0,187, 40,165,166,151,116, 71,186,185,185, 77, 74, 77,
- 77,253,158, 82,186,229,223,178, 78,189,189,189,183,108,218,180,201, 97,207,158, 61, 29,166, 77,155,246, 62,128, 77, 47,177, 14,
-165, 0,194,202,254,189, 89, 22,172, 80, 22,180,124, 9, 33, 94, 0,206, 84,228,160,207,217, 63, 82, 35, 66,181, 46, 60,178, 77,
-120,215, 46,157,173,156, 29,108, 81, 92, 42,224, 86, 66, 90,213,253,123,126,142,112, 13,236,112, 70, 16, 74, 62,206,188,118,164,
-184,162,206,150,109,223, 9,111,249, 86, 43, 43, 91, 91, 59,100, 23,154,112, 39, 33,169,218,209, 3,187,154, 84, 9,236,112, 2,
- 48,245, 79,191,188,191,132,125,235, 24, 21,193,162, 78,238, 4,160, 14,118,234,108, 0,105, 0,138,108,108,108,140, 0, 74, 0,
-228,250,250,250,230, 47, 95,190, 60,121,215,174, 93,127, 80, 74,223,122,124,190,167,175, 48, 16,133, 82,215, 79,123, 12,133, 66,
- 38,202,198,124, 51, 34,199,221,221, 61,163, 28,231,161,242,156, 0, 96,163,210,133,119,142,180, 11,172,202, 45,255,236,242,193,
-254,161, 57,169, 49, 37,128, 80,108, 99,101,101,170, 76, 57, 95, 5,127,149,211, 96, 48,188,107,103,103,151,159,147,147,163, 49,
-153, 76,164, 64,103,146,222, 72,210,219,220,215,185,185,222, 72,210,219, 20,232, 76, 82,147,201, 68, 50, 50, 50, 52, 74,165, 50,
-191,180,180,244, 93, 75,203,233,230,230, 54, 97,230,204,153,163, 87,175, 94,205,133,132,132,192,218,218, 26,141, 27, 55,198,134,
- 13, 27, 36, 19, 39, 78,156,236,230,230,246,181, 37,229,164,148,134,104,181, 90, 34, 2,200, 45, 50,227,240, 76, 45, 78,206, 13,
- 65,137, 65, 68,126, 65, 17, 56,142,131, 68, 34, 33, 65, 65, 65,222,150, 46,187,217,108,110,208,176, 97, 67, 2, 0,133,133,133,
-101,225,234,193, 80, 84, 84, 12,153, 76, 14, 81, 20,101, 13, 27, 54,116,171,140,211, 96, 48,160, 70,141, 26,168, 94,189, 58, 10,
- 11, 11, 81, 80, 80, 0,153, 76, 86, 33,167, 65, 45, 37, 20,212, 69,165, 84, 56,170,148, 10, 71, 10,234, 2, 0,150,140, 51,168,
-165,228,239,220, 63, 9, 33, 78, 60,207,127,239,227,227,115,158,231,249,255, 18, 66,170,188,140,147, 16,162, 37,132, 76, 86,171,
-213,191,213,173, 91,247,150, 70,163,217, 75, 8,153, 74, 8, 9,171,140,147, 16, 34, 87,171,213,123,102,204,152,177,225,194,133,
- 11, 31, 28, 58,116,168,198,165, 75,151,222,155, 51,103,206, 90, 43, 43,171,253,132, 16,213,203,124, 55,189,188,188,190,139,138,
-138,210, 54,105,210,100, 57, 33, 68,241, 42,190,239,132, 16,158, 16, 82,159, 60,124,216,225,107, 82,135, 60,196,211,211,211,187,
- 97,195,134,142, 60,207, 35, 34, 34, 2,130, 32, 52,121, 73,103, 24,128,116, 74,233, 9, 74,105, 22,165, 84, 40, 27,178, 41,165,
- 39, 1, 36, 1, 8,175,136, 83,132,106,221,240, 47,255,211,250,171, 47, 6, 88,157,191, 39,224,191,251, 83,177,245, 68, 38,146,
- 11, 21,104,253,238, 39, 54,145,237,122,180,226,121,245,186,138, 58,199,140, 30,221,186,127,159,158, 86, 87, 82, 56,108, 59,153,
-133, 19,177, 5, 40, 33,246,136,124,119,160, 93,221,144,118,109, 65,100, 43, 94,135,109,244,166, 59,255, 21, 45, 88,221,103,210,
-188,229,163,201,130,239,183,172, 28,197, 17, 66, 53, 14, 1,135,117,212,243,122,217,244,182,206,206,206,166,178, 31,161,252,223,
-126,251,205,124,254,252,121,135,154, 53,107, 58, 90,190,101, 64, 46, 93,186,168,115,114,241, 74,247,242,242,122, 37,206, 86,225,
- 45,228,250, 82, 29, 46,221,184,210,100,247,202,102,225,246, 46,126,151, 92,234, 12,248, 3, 66,120,177,193,108,206,171, 84, 57,
-255, 1,240, 60,175,219,190,125,251,127, 15, 28, 56,224, 54,110,194,148,214, 83,254,123,212,197,166, 94, 55,123,147,104, 99,117,
-104,209,133,162,188, 43, 27,115,115,110,236,203,208, 54,168,247, 71,231,206,157, 83,231,205,155,247, 69,121, 78, 79, 79, 79,165,
- 68, 34,169,221,161, 67,135,145, 31,127,252, 49, 18, 18, 18,240,213, 87, 95,233, 46, 94,188,152, 19, 28, 28,236, 48,119,238, 92,
-213,192,129, 3,113,250,244,233,177, 94, 94, 94,191,152, 76,166,196,164,164,164,231, 62,159, 79, 16, 4,133, 82,169,132,174,172,
- 77,193,104,166, 0,196, 71, 45, 79, 28,205,131, 68, 34,129, 40,138,181, 8, 33,119, 45,105, 21, 51,155,205, 10,165, 82,137,226,
-226, 98, 20, 21, 21, 33, 57,179, 8,247,210,139, 81, 88, 92, 10,157,206,132,146, 98, 19,164,106, 71,152,205,233,126,132,144,180,
-138, 56, 5, 65,128, 78,167, 67,113,113, 49,116, 58, 29,116, 58, 29, 68, 81, 68, 65, 65, 1,164, 82, 41, 53, 24, 12,190, 0, 82,
-203,221, 54,114,149, 25,224,230,126,191,118,215,216,178,227,153,185, 86,208,139,217, 22,140,123, 48,239,223,214, 50,164,112,114,
-114,218,183,125,251,246, 58,181,106,213, 66,124,124,188,111,215,174, 93,131, 9, 33,225,148,210,146, 10,186,212, 28,199, 77,237,
-219,183,239,192,238,221,187,147,218,181,107, 67, 34,145,192,108, 54,123,196,197,197, 53,219,186,117,235, 8,137, 68,178, 70, 16,
-132,111, 44,189,115, 60, 33,132, 83, 40, 20,235, 86,172, 88,209, 52, 44, 44, 12,235,214,173,195,217,179,103,197,208,208, 80,174,
-119,239,222,168, 94,189,122,232,199, 31,127,188,137, 16,242, 65,217,131,150, 43,186,252,213,122,246,236,233,201,243, 60, 26, 55,
-110, 44, 59,121,242,100, 3, 0,103, 94,114,157,106, 60, 60, 60,246,183,104,209,162,254,193,131, 7, 47, 18, 66,218, 84,228, 78,
-249,238,238,238, 29,171, 84,169, 50,205,218,218,218,222,210,121,138,138,138, 74, 50, 50, 50,198, 36, 37, 37,237,176,112,150,176,
-192,192, 64,152,205,102,216,218,218,194,205,205,173,177,167,167,231, 23, 54, 54, 54,239, 20, 22, 22,126,147,152,152,120,174, 2,
-203,235, 14,128,163,148,198,149,253, 95, 29, 64,237,178,183,111, 83, 74, 19, 40,165,241,132, 16, 55, 66,136,167, 37,167, 11,157,
-106,181,104,223,164,101,251,240,136,176, 0,110,230,246, 4, 8,162, 8, 9, 4, 72,120, 17, 89,130, 20,132, 16, 84,243, 13,225,
-171, 92, 57, 23,234,228,215,170,125, 86,236,193, 61,150, 56,219,117,234,220,196,183,182, 47, 55,127,231,125,228, 37, 95, 17,210,
- 99,255,200, 38, 28, 7,175, 6,173, 29,107,248, 54,228,125, 26,182,148,166, 37, 92,105,238,232,219,172, 69,246,205, 99,135, 89,
-108, 96, 84, 56, 96, 17, 66, 40,165,244,209,145,213,224,153,116,106,160, 95, 21,191, 45,155,214,164, 20,155, 28,174,100,103,103,
- 59,102,103,103,195,198,198, 38, 95, 16, 4,211,156, 57,115,164,113,113,113,182, 74,165, 18, 10,133, 2, 38,147,169, 66,157,137,
- 69, 81, 36,175,218,169, 81, 91,161,137, 54, 92, 22, 28,160,197,181,184,235,218,243,135,135, 5,156,190, 80,240,201,173, 91,119,
- 42,237,252,167,208,186,117,235,212,218,218, 54,191, 45,253,195,244,159, 69, 67, 66,212, 84, 20, 40,225,120,205,208,197, 34, 9,
-173,235,185,202, 65,150,159,199,243,124,185,158,106,213,170, 77,106,209,162,197,112,137, 68, 34, 29, 48, 96, 0, 0, 96,216,176,
- 97,133,209,209,209,129,233,233,233,153, 85,171, 86,117, 27, 57,114,228,165,237,219,183,171, 63,249,228, 19,137, 78,167,187, 32,
-149, 74,169,155,155,219,204,212,212,212,233,207,114,202,100,178,203,215,175, 95,111,106,227, 17, 0, 39,107, 14,109,198,158, 7,
- 0, 88, 41, 41,114,179,210,112,231,254,101, 84,175, 94, 93, 85,173, 90,181, 31,221,220,220,196, 70,141, 26,205,243,244,244,156,
-185,109,219,182,231,254, 56,170, 84,170,107, 23, 47, 94, 12,174, 91,183, 46,138,138,138,144,152, 81,140,213,167, 9, 74,244, 42,
- 0, 42,112,176,130,149,189,135, 66, 74,117, 91,194,194,194,184,198,141, 27,207,242,240,240, 88, 80,158,243,250,245,235,193,245,
-234,213,131,201,100, 66, 76, 76, 12,138,139,139, 97, 48, 24,144,155,155,139,248,248,120,120,123,123, 43, 69, 81,220,213,161, 67,
- 7, 33, 59, 59,123, 82, 84, 84,212,146,231,133,183,125, 95,248, 24,155, 79, 58,178,210,160, 43,252, 9, 0, 28, 29, 61,115,127,
-157, 20,100,104, 62,169,168,220,113,251,190,240, 49, 98,232,223,182,171,246, 26, 59,118,108, 29, 7, 7, 7,124,250,233,167,152,
- 60,121, 50, 38, 76,152,224,243,233,167,159,246, 3,176,180, 2, 63,178, 42, 87, 87,215,227,139, 23, 47,246,109,210,164, 9,246,
-236,217,131,205,155, 55,227,238,221,187,102, 47, 47, 47, 73, 88, 88, 24, 38, 78,156,136, 54,109,218,244, 29, 58,116,104,211,178,
- 0,103, 73,232,232, 61, 97,194,132,142, 77,155, 54, 69,223,190,125, 75, 15, 31, 62,220, 27,192,161,131, 7, 15, 54, 63,118,236,
-216,198, 13, 27, 54,168,166, 79,159,222,122,196,136, 17, 3, 0,124, 95,137,229,239,212,172, 89, 51, 0, 64,211,166, 77, 49,103,
-206,156, 86, 47, 19,176, 8, 33,114, 7, 7,135,159,215,175, 95, 95,223,215,215, 23,189,122,245,106,240,225,135, 31,254, 76, 8,
-233, 68, 41, 53, 88,226,112,117,117,157,186,114,229, 74,111,149, 74,101,241,231, 26, 12, 6,251, 65,131, 6, 77, 1,176,195,194,
- 58,185, 81, 64, 64, 0,142, 28, 57,130, 86,173, 90,161, 94,189,122,222,131, 6, 13,154,217,166, 77, 27,124,249,229,151, 7,221,
-221,221,189, 83, 82, 82,178, 45,252,248,106, 0,110,149, 45,127, 85, 0,222, 0, 78,151,189, 23, 66, 8, 1,165, 52,161,108, 26,
-223,178,214,172, 23,163,212,244,122,167, 83, 7,171,159, 79,101, 64, 16, 69,248,121, 40, 81,183,154, 13, 18, 50,244,184,151,156,
- 13, 41, 49,194, 90,165, 64, 96,120, 7,187,156,244,132, 94, 0,202,239,143, 37, 87,247,122,239,157, 14,154, 29,167, 51,144,151,
-124,149, 38, 68,111, 61, 42,148,234, 62, 7,128,235,199, 55, 44,113,179, 87,182,172,221, 64,203,151, 68,188,107,119,100,103,122,
- 47, 0, 44, 96,253,121, 7,118, 79,100,144, 55,182, 5,235, 33, 57,133,146, 82, 91,151,192,194,226,228,228, 71,227, 10, 10, 10,
-108,111,221,186,149, 17, 27, 27,107, 43,149, 74, 33, 8,194,195, 47,167, 88,217, 66,188,106,167, 92, 38, 71,125,223, 64, 62,230,
-242, 57, 89,108,108,172, 45,207,203,232,171, 40,231,235,206,149, 20,161,170, 73,228, 53, 74,153,228,209,166, 21,137, 76, 83, 64,
- 92,171, 58, 32, 63,175,188,249,181, 90,173,180,101,203,150,195, 87,173, 90, 37, 77, 77, 77,133,157,157, 29, 76, 38, 19,206,159,
- 63,159,156,158,158,158, 9, 0,137,137,137,169,158,158,158,169,130, 32,248,248,249,249, 97,208,160, 65,168, 83,167, 14, 25, 57,
-114,228, 8, 66,200,204,103, 93, 9, 88, 80, 80,240,237,252,249,243, 27, 78,158,177, 64,221, 51,140,160,184,196,128,162,162, 34,
-164, 36,220,130,194, 76, 49,125,250,116, 40,149, 74, 0,224,179,179,179,249,217,179,103,141,186,120,241,226, 91, 0,154, 63,175,
-172,121,121,121,203, 22, 45, 90,180,124,206,156, 57,106,157, 78, 7,157, 94,143, 66,157, 28,103, 23,132, 62, 56, 20, 31, 17,133,
- 89,179,231, 32,160,186, 70,149,156,156,140,137, 19, 39,126,117,247,238,221,198, 0,222,123,145,115,238,220,185,203,231,207,159,
-175,182,178,178, 2,165, 20,162, 40, 34, 49, 49, 17, 0, 48,117,234, 52,148,253,192,241,169,169,169,252,140, 25,211,167, 41, 20,
-138,150, 0, 58, 61,167, 9,157, 2, 40, 37, 4,105, 30, 30, 53,189, 21, 10,110,172,135, 71,233,169, 35, 19,147, 54, 19,130,180,
- 7,211,128,186,175,116,255,232,254, 58,121,184,193,128,101,169,169,241,183, 41, 5,197,196,191,239, 56,192,201,201,233,179,119,
-223,125, 23,179,102,205,194,238,221,187,191,113,112,112,152, 53,121,242,100,184,185,185, 13, 34,132, 44,171,192, 85,148,211, 23,
- 46, 92,232,235,231,231,135,143, 63,254,216,112,240,224,193, 73, 0,118, 3,184,127,252,248,241,170,107,215,174,109,191,117,235,
-214, 41,139, 22, 45, 82, 46, 93,186,212,251,131, 15, 62,152, 11,224,179,242,164, 85,170, 84, 25,218,189,123,119,204,155, 55, 15,
-135, 15, 31,238, 65, 41,253,189,236,173,253,132,144, 46, 51,102,204,216, 51,110,220, 56, 44, 92,184,240,243,138, 6, 44, 66,136,
-198,207,207,239,155,182,109,219,226,248,241,227,136,136,136, 64,120,120,248, 80, 66,200,114, 74,105,118, 37,126, 52, 56,107,107,
-235,117,107,215,174,109, 82,163, 70, 13, 76,155, 54, 13, 95,127,253, 53, 86,173, 90,213,164, 87,175, 94,235, 8, 33,221, 45,185,
-122,214,198,198,198, 74,165, 82, 97,214,172, 89,244,254,253,251,229,126,151,221,220,220,236,198,143, 31, 79,108,108,108,108, 45,
- 40, 35,239,225,225, 97,227,234,234,218,196,213,213, 21,139, 23, 47,134,139,139, 11, 70,140, 24, 1, 71, 71, 71, 20, 23, 23,163,
-115,231,206,210, 51,103,206,116, 5,176,220,194, 69,119, 0,240,176,197,171, 14,128,211,148,210,162,178,207,139,194,131, 83,131,
- 9,120,208, 47,203,162, 86, 57,142, 82,127,123, 59, 91,164, 92, 78,135, 4,102,248, 85,179,198,185,184, 98, 24, 5, 10,149,198,
- 10,197,133,121,104,224,227,140,130, 18, 79,128,138,254,150, 56,101, 60,105, 40, 87,168,144, 81,144,143,180,235,135,114, 76,162,
-113,104,222,157, 99, 73, 0,224,224, 19, 57,244, 74,212,222, 19,157,219, 69, 56,103,228, 86, 3,165, 66, 48,139, 65,140,138, 48,
-126,107,157, 0, 0, 32, 0, 73, 68, 65, 84, 80,161, 27,141,138,162, 72,114,114,114, 36, 58,157,142, 55,153, 76,220,227,105,211,
-100, 50, 85, 42,184,252, 25,206,199,249, 51,156,175, 43,181, 92,184, 84,158,199, 19,167,234, 8,168,222,138,100,165, 90, 50,127,
- 76, 76,140,233,216,177, 99,155, 70,143, 30,141, 5, 11, 22,224,206,157, 59,144, 74,165,240,243,243,115,117,118,118,214, 0, 64,
-205,154, 53,109, 2, 2, 2, 92,120,158, 71, 92, 92, 28, 54,111,222,140, 73,147, 38,209,152,152,152,117,207,251,161, 56,127,254,
-252,175,165,165,165,123,230, 76, 31, 95, 82,154,117, 19,106, 33, 19,180, 32, 30,106, 94,135,190, 3,135,226,110,166,128, 11,241,
-133,184, 16, 95,136,148, 98, 5, 62, 31, 49,150,243,242,242, 10, 10, 13, 13,253,228,121,101,189,112,225,194, 79, 37, 37, 37,135,
-166, 76,153, 82,114,247,238, 93,232,116, 58, 0,128,209, 44,194,104,126,178, 24, 30, 30, 30,152, 53,107,150, 70,163,209,132,107,
-181,218,238, 47,114, 22, 23, 23, 31,154, 48, 97, 66, 73, 92, 92, 28,242,243,243,145,150,150, 6, 66, 8,250, 15, 30,137,187,153,
-226,163,114,102, 27,173, 49,252, 63, 19,185,170, 85,171, 54,111,216,176,225,251, 47, 90,175, 30, 30,158,222,126,126,222, 27,206,
-156, 57,211,211,219,219,123,224,195, 96, 69, 41, 40, 0, 84,175, 94,189,127, 76, 76, 76,239, 6, 13,252, 54,186,185,185,215,254,
-155,143, 34,155,125,244,209, 71,181, 69, 81,196,182,109,219,174, 82, 74,151,238,220,185, 51,166,180,180, 20,221,187,119,175, 1,
-160,181,133, 30,109,143, 30, 61, 6, 70, 68, 68, 96,216,176, 97,198,131, 7, 15, 54,161,148, 46,161,148,222,163, 15,184, 79, 41,
- 93,126,228,200,145, 70, 67,135, 14, 45, 13, 13, 13, 69,159, 62,125,122, 19, 66,154,148,227,109,212,189,123,119, 95, 81, 20,177,
-121,243,230, 43,143,133,171,135,161,246,232,182,109,219,162, 12, 6, 3,122,246,236,233, 69, 8,105, 94,129,101,151, 41,149,202,
-141,211,166, 77,179, 77, 78, 78, 70,239,222,189, 75,111,220,184,129,137, 19, 39,170,108,109,109,119, 16, 66, 52, 21, 93,159, 74,
-165,114,217,242,229,203, 59, 6, 6, 6,226,179,207, 62, 51, 44, 95,190,252,171,193,131, 7, 27,180, 90, 45,190,253,246,219,142,
-114,185,124, 89, 69,124,105,105,105,249, 71,142, 28,241, 44,111, 72, 79, 79,183,232,214, 44, 53,106,212,176,173, 87,175, 94, 84,
- 72, 72, 72, 98,253,250,245,107, 2,192,213,171, 87,179,182,109,219, 70, 29, 29, 29,177,111,223, 62,172, 92,185, 18, 77,155, 54,
-133,181,181,117,151, 10, 20,149,150, 13,120,236,245,233,247,159,158,174, 92,103,126,137, 25, 18,142,131,148,167,184,151,174,131,
- 81,160,144, 73, 57, 72,121, 64,194, 81, 56, 90, 75, 33,149,242, 0, 33, 22, 57, 57, 66,144, 91,108,130,132, 39,144,202,165,132,
- 23, 68,229,195,247,120,169,168,148,203,149,196,197, 86, 6,185,132,128, 35, 96, 48, 94, 93, 11, 86, 89,165, 35,100,101,101, 73,
-227,227,227,149, 6,131,129,171, 81,163,134, 30, 0,204,102, 51,151,155,155, 43,147,203,229, 32,132, 24,205,102,115,133, 14,185,
-115,114,114,165, 9,247,111,189, 82,231,179, 48,155,205, 92, 73, 73,174,252, 85, 58, 95, 71,110,220,184, 97,117, 59, 62, 69, 83,
-133,175, 27, 51,116,105, 76, 24, 5,164,132, 82,147, 66,119,227, 76, 86,198, 69, 25,108, 21,106, 79, 79,207,114,251,207,220,189,
-123,247,115,119,119,247,217,148, 82, 63, 74,233, 79, 11, 22, 44, 32, 75,150, 44,177, 27, 60,120,240, 85,119,119,247, 20, 95, 95,
-223,106, 11, 22, 44,176, 6,128, 13, 27, 54,136,123,247,238,237,164, 80, 40,110, 36, 36, 36,164,191,200,123,244,232,209,190,161,
-161,161,159,124,247,221,119, 83,204,102,179,194,217,217, 89,177,126,253,122, 36,231, 25, 48,110,253,255, 95, 89,168, 81,240, 24,
-214, 70,131,200,200,150,220,253,251,247,191, 2,176,234,121,206, 99,199,142,245, 8, 11, 11,251,244,219,111,191,157, 0,171,234,
- 10, 69,157,126,178,150,163, 31,156,126,116,115, 80, 60,170, 16,243,243,243,145,155,155,139,206,157, 59,171, 55,110,220,248, 25,
-128,205,229, 57,151, 46, 93, 58, 65, 16, 4,153,179,179,179, 98,211,166, 77,136,207, 50,224,155,181,113, 40,212, 63, 40,167,149,
- 66,130,161,173, 20,104,217,178, 37,159,146,146, 50, 10,192,207,207,242,121,122,122,250,248,249,249,109,216,180,105, 83,157, 69,
-139, 22,229,222,186,117,171,196,205,205,109,220, 83,147, 25,102,206,156,153,179,126,253,250, 90,189,123,247,222,232,230,230,214,
- 43, 53, 53,245,198,223,177, 31,217,218,218, 78, 29, 52,104, 16,126,252,241, 71,228,230,230, 46, 43, 91,127,203, 54,109,218,180,
-182,127,255,254, 88,183,110,221, 84, 66,200, 1, 11, 90,177,222,238,214,173, 27,246,238,221,139, 63,254,248, 99, 10,165, 52,246,
- 57,173,124,113,132,144,241,187,118,237,154,219,189,123,119,172, 94,189,186, 53,128,147, 47,240,182,108,211,166, 13,246,236,217,
-131,156,156,156,103,118, 60,206,207,207, 95,185,123,247,238,208, 54,109,218, 96,230,204,153,111, 1, 56,106, 65, 61,231,107,107,
-107,187, 98,241,226,197,218,192,192, 64,244,232,209, 67,111, 52, 26,223,251,234,171,175,182,111,217,178,197,106,221,186,117, 65,
- 3, 6, 12, 56, 70, 8, 25, 76, 41,141,178,100, 93,242, 60, 63,121,233,210,165, 31, 71, 70, 70, 98,228,200,145,230,223,127,255,
-189, 43,165,244, 16, 33,228,206,168, 81,163,126,158, 55,111, 30, 63,111,222,188,143,121,158,207, 18, 4, 97,226,223,177,189, 69,
- 81,156, 57,127,254,252, 58,254,254,254,208,235,245,184,115,231, 14,210,210,210,126,204,200,200, 56,116,229,202,149,233,169,169,
-169, 59, 93, 93, 93,251,142, 24, 49,194, 35, 56, 56, 88, 91,173, 90, 53, 59, 75, 90,208, 30,107,153,202, 4,112, 3, 64,104, 89,
-203, 21, 0,132, 0,184, 93,246,183, 29,128, 60,139, 10, 75,184,171,183,226,147,189,236,173,108,144, 43,202, 17,159,156, 13,149,
- 70, 3,142,114, 48,235,114, 81,171,186, 11, 68, 10, 20,100, 37,131,227,136, 69,183,145, 49,137,244, 66, 66, 98,186,187,157, 70,
-137, 90,218, 14, 14, 23, 15,175, 94,101,231,211,108,136,132, 23,120,137,220,102,105,143,238, 31, 59,154, 5,138,162,220, 84, 16,
-158, 63, 7, 6,227, 85, 5, 44, 65, 16,200,186,117,235,108, 50, 50, 50, 56, 95, 95,223,156,250,245,235, 23,203,229,114, 81,167,
-211, 9, 74,165,210,172,209,104, 68,189, 94, 47,191,119,239,158,125,114,114, 50,255,240, 52,156, 37, 28, 61,122,220,213,167,118,
- 96,198,171,116, 62,231, 8,210,172, 82, 73,132, 87,233,124,157, 16, 69, 81, 62,125,250,244, 70, 14, 14, 14,197,161,161,161,201,
-225, 62,206,187, 83,138,113, 98,193,194,255,246,246,175, 91,109,189, 45,159,155, 87, 44,167,210,164,164, 36,215,219,183,111,171,
- 41,165,178,242,156, 41, 41, 41,137, 0, 18,221,220,220, 86, 70, 70, 70, 14,234,216,177, 35,142, 28, 57,226, 92, 92, 92,236,172,
-209, 60, 56,136,255,233,167,159,176,115,231,206, 37,105,105,105, 71, 44, 45,107, 84, 84,212, 42, 0,171, 26, 54,108,168,181,181,
-181, 61, 98, 99, 99,195, 37,230, 23, 63,186,178, 80, 38,225,208,228,235,104,100,231,230, 65,202, 17, 40,149, 74, 15, 66, 8,247,
-188,150,177,178, 31,249,239, 0,124, 23,218,174,255,187, 54,247,182,172,154,191, 96,129,226,225,145,105, 21,123, 25,242,242,242,
-144,153,153,137,172,172, 44, 72, 36, 18,232,245,122,191, 23, 30, 34, 63,230, 12, 12, 12,108,225,232,232,184, 75,173, 86,243, 52,
-171, 24,185, 69,198, 39, 78, 65,230,230,149, 66, 42,149, 66,163,209,248, 60,203,229,228,228,100, 37,147,201, 86,252,240,195, 15,
-190,214,214,214,252,128, 1, 3,108, 7, 12, 24,208, 24, 64,227,103, 77,175, 86,171,249,213,171, 87,251, 52,104,208, 96, 69,205,
-154, 53, 59,222,189,123,183,224, 47,108,185,226, 1,244,255,234,171,175,130,148, 74, 37,150, 46, 93, 26, 15,224,199,178,183,127,
- 94,190,124,249,232,110,221,186,213, 30, 54,108, 88,221,113,227,198, 13, 37,132,124,251,162, 14,228, 50,153,172, 97,221,186,117,
-177, 99,199, 14,224,193,105,193, 23,177,227,212,169, 83,115, 59,118,236, 8,149, 74,165, 45,175,209,165,106,213,170,216,181,107,
- 23, 0, 92,122,206, 52,151, 98, 99, 99,209,185,115,103,112, 28, 87,221,130,101,239,248,246,219,111,111,156, 57,115,166,196,218,
-218, 26,159,124,242,137,225,236,217,179,157, 41,165, 39, 8, 33,109,123,245,234,245,251,134, 13, 27, 52,199,142, 29,243,157, 62,
-125,250, 31, 60,207,207, 21, 4, 97,114, 57,206,222,211,166, 77,251,234,189,247,222,195,228,201,147,233,143, 63,254,216,143, 82,
-122,168,108, 31, 59, 72, 8,233,111,111,111,191,122,204,152, 49, 36, 63, 63,255, 43, 66, 72, 50,165,244,191,207,243, 21, 21, 21,
- 21, 8,130, 80, 69,167,211, 89,212,103,203,210,233,125,124,124,222,246,247,247,199,174, 93,187,208,169, 83, 39, 28, 56,112, 0,
- 18,137,100, 95, 82, 82,210, 49, 0,135, 0,192,205,205,205, 38, 46, 46,238,139,102,205,154,113,127,252,241,199,187, 0,214, 88,
- 80,132, 4, 0,245, 0,252, 65, 41, 77, 42,187,112,178, 17, 30,220, 7,235, 6,165, 52,177,108, 58,127, 0,119, 45,170,235, 76,
- 69,155, 14,237,217,222,188,245, 7,131,109,120,158, 64, 2, 25, 74, 10, 11, 0, 65,128, 79,245, 42, 8,173, 91, 5,151, 18,116,
- 56,117, 96, 91,126, 73, 73,177, 69,183,151, 16, 76,197, 27, 14,253,190, 51, 34,164,117, 31, 27,133, 79, 93, 84,173, 50,188,254,
-213,168,253,191, 42,229, 50,242,254, 7, 93,109, 91,132,214,194,161,203, 5, 56,125,104, 71,158,174, 56,111, 3,139, 12,140, 74,
- 5,172,103,117, 46, 19, 69, 49,235,192,129, 3,234,241,227,199, 23,185,185,185, 73,138,138,138,184,199,251, 48,201,100, 50,184,
-185,185,153,243,242,242,140, 7, 14, 28,240, 18, 69, 49,231,133,205,177,188, 34,237,251, 77, 75, 61, 5,162, 54,180,105,215, 73,
-244,244,172,241,210, 78, 0,208, 27, 20, 89,219,247,237,176,107, 30,218, 84, 90,197,169,202,179, 42,251, 10, 59,255, 65,164,222,
-190,125,219,105,250,244,233,151, 60, 60, 60,244, 0,224,168, 17,210,178,175,253,156,107, 85,163, 99,154, 84,161,128,179,179,115,
-169,149,149,149,121,207,158, 61,111, 81, 74,211, 44, 21,219,219,219,127, 51,104,208, 32,238,248,241,227,253,123,245,234, 69,188,
-188,188,112,225,194, 5,108,216,176,129,110,219,182,237,219,180,180,180, 74, 29,117, 43, 20,138,120,163,241,201, 91,223, 60,126,
-101, 97,110,110, 46,184,194, 44, 8,130, 96,182,244,238,238, 66,230,165,168, 82,149, 10,245,170,253,255, 89,156,220,220, 92,100,
-102,101, 61, 10, 88, 25, 25, 25,224,121, 94,111,105, 57,229,114,249, 61,131,193,240, 84, 57,197,199, 91, 74, 32,228,101,193,248,
-244,194,148,145,149,149, 85,228,225,225,241,253,210,165, 75,103, 78,153, 50,197,121,225,194,133,185,177,177,177,133, 28,199,233,
-159,250,158, 41,189,189,189,173,230,207,159,239,178,100,201,146, 92, 0,223,253,197,225,170, 83, 64, 64,192,202,246,237,219, 91,
- 13, 30, 60, 24, 75,150, 44, 65, 90, 90,218, 4, 74,169,185,172,110, 16, 9, 33, 99,151, 47, 95,254,211,168, 81,163, 96, 52, 26,
-103,238,217,179,103, 28, 33,228, 11, 74,233,143,207,114, 58, 59, 59,123, 72, 36, 18,196,196,196, 20, 82, 74,239,150, 19,106,211,
-125,125,125, 51, 8, 33, 46,174,174,174, 94, 47,154,214,193,193,161,166,181,181, 53,146, 31,244, 11, 77,120,206,100,247, 83, 82,
- 82,168, 92, 46, 39,110,110,110, 62,229, 45,191,157,157,221,151, 63,252,240,131,228,240,225,195,152, 56,113, 98,242,189,123,247,
- 62, 41,187,141, 0, 40,165, 23, 9, 33,173, 91,180,104,177,118,212,168, 81,181,102,207,158, 77, 98, 99, 99, 7, 0,120, 97,192,
-170, 94,189,122,255,126,253,250, 97,233,210,165, 88,177, 98,197, 48, 74,233,207, 79, 45,243, 54, 66,136,189,131,131,195,252, 65,
-131, 6, 97,205,154, 53, 31, 1,120,110,192, 74, 75, 75, 27,247,209, 71, 31,141,206,205,205,157,107,201, 54,181,100,122, 15, 15,
-143, 14, 61,123,246,116,161,148, 98,201,146, 37,233, 75,151, 46, 45,201,207,207,255, 49, 53, 53,245,216, 83, 45,113,187,246,237,
-219,247,197,224,193,131,113,228,200,145, 5, 30, 30, 30, 52, 57, 57,121,109, 57,219, 52,141, 16, 82,147, 16, 82,135, 82,122,163,
-236, 42,193,164,167,246,187, 90,101,211, 38, 91,178, 76, 89,177,135,247,184,212,107,127,250, 98,212,145,183,188,234, 69, 72, 93,
-236,173,225, 81,219, 9, 14, 26, 25, 40,128, 43,247,116, 56,115,108,191, 41, 35,253,254, 25, 75,174, 32,124,232,116, 13,236,112,
- 70,237,120,252,173,154,254,225, 18,175, 90,181,209,186, 73,125, 59, 71, 27, 41, 12, 38,138, 3, 23,243,113,250,216, 94, 83,102,
- 70,210, 81,118, 5,225,159,203,155,214,193,189,220, 22,172,204,204,204,255,200,100,178,102,253,250,245,235, 22, 17, 17, 97, 61,
-112,224,192, 12, 27, 27,155, 98,185, 92,206, 59, 56, 56,200, 41,165,242,253,251,247,187,167,165,165,217, 3,216,146,153,153,121,
-236,169, 47,208, 19, 79,219, 30, 56,165,216,151, 16, 66, 60, 60,236,154, 73,182,124,214, 45, 34, 34, 66,243,178,206, 73,147, 64,
- 39, 53,215,251,156,118, 37,227,179,243,246, 12,241,116,117,229,155,133,132, 75,173,212,154,178,144,224, 32, 23, 69,200, 42,226,
-124, 69, 63, 90,127,137,211, 96, 48,188,117,231,206,157, 15,123,245,234, 53, 82,171,213, 94, 27, 51,102,204, 89, 59, 59, 59, 83,
-217,145, 34, 12, 6,131,244,192,129, 3, 97, 73, 73, 73,254, 38,147,105, 62,128,173,150,150,243,218,181,107, 70, 0,195,221,221,
-221,127,203,200,200,248,165, 91,183,110, 88,179,102, 13, 78,157, 58,213, 58, 37, 37,229,116,101,151,253,244,233,211,185,109,219,
-182,213,221,184,113, 67,195,107,170,194,213, 94,134,182,227, 47,128,138, 20, 86, 74,138,226,194,124,152,114,114, 80, 82, 82,114,
-221, 82,103, 76, 76, 76, 90,211,166, 77,245,119,239,222, 85,212,172, 89,243, 65,184, 42, 11, 86,153,153,153,200,201,201, 65, 65,
- 65, 1,149, 74,165, 49,150, 58,163,163,163,227,219,180,105, 35, 36, 36, 36,240, 60,239,140, 42,118, 50,180, 28,253, 96,118,123,
- 53, 80, 88,144, 15, 93, 86, 22,116, 58,221,115,157,201,201,201,219, 60, 60, 60, 0, 96,230,132, 9, 19, 28,219,182,109, 27, 23,
- 21, 21,213,230,241,207, 9, 14, 14,254,113,202,148, 41,109,167, 79,159,158,189,110,221,186,113, 41, 41, 41, 91,254,202,125,201,
-193,193,225,139, 61,123,246, 88, 25,141, 70, 44, 89,178, 4, 11, 22, 44, 88, 71, 41,221,249, 84,229,183,143,231,249, 21, 28,199,
- 13, 26, 50,100, 8, 6, 13, 26,164, 14, 14, 14,254,226,177, 86,174, 39,156,201,201,201,147,131,130,130, 70,103,102,102, 90, 20,
- 8,110,221,186, 53, 36, 40, 40,104, 84,102,102,230,194, 23, 45,187, 70,163,209, 8,130,128,248,248,248, 60, 74,105,193,115, 42,
-106,189,175,175,111,138, 32, 8, 30, 26,141,198,190,188,253, 51, 47, 47,111,174, 86,171, 29,155,145,145,113, 8,192,108, 74,169,
-254, 41,223,101, 66, 72,240,176, 97,195, 62,155, 57,115,230, 59,233,233,233,219,203,115,222,187,119,111,110,139, 22, 45,190,185,
-121,243,230, 70, 74,233,170,231,148,243,123, 66,136,113,227,198,141, 3,226,227,227,231,189,200,153,148,148,180, 23,192, 94, 75,
-183,239,243,166,127,106,187,143, 24, 58,116, 40,246,238,221,139,162,162,162,111,147,147,147, 23, 60,199, 21,229,229,229,245, 91,
-227,198,141, 59,204,157, 59, 87,214,190,125,251, 1, 0,214, 90,176,127,158, 5,208,168,172, 31,220, 77, 0, 15, 15,108,237,241,
-224,150, 13, 4,207,185, 58,243,121, 78, 74,117,125, 46, 28,223,177, 54,241,246,165, 48,109,100,103,187,252, 18, 79,200, 36, 28,
-138,114, 83,113,250,224,207,121, 41,201,119,206, 26,141,197,125, 42,226, 20,132,146,143, 47,157,216,177, 46, 45,225, 90,104, 73,
-147,246,118,121,133,213, 33,147, 16,228,101, 37,225,236,145, 93,185,169,137,241, 39, 77, 66,233,160,191,179,158,255,183, 56,255,
- 85, 1,171,236,116,201, 81,173, 86,123,234,200,145, 35,109, 79,158, 60,249, 78,203,150, 45, 51,194,195,195,139,206,159, 63, 95,
- 61, 62, 62,222, 5,192,110, 23, 23,151,125, 49, 49, 49, 22,221, 57,249, 85, 59,203,124,102,128, 76,154,252,185,211,220,164,203,
- 89, 11, 82, 51,182,119,245,169,238, 69, 0,144,152,152, 11,213,227,227,227,157, 43, 90,206,127, 80,234,167, 0,126, 36,132,236,
- 56,123,246,236,128,247,223,127,127, 80,203,150, 45,207, 82, 74,201,169, 83,167,180,247,238,221, 11, 19, 4, 97,149, 40,138,131,
- 42,243,152,156,135,167, 92,100, 50, 25,245,245,245, 37, 42,149, 10, 10,133,226,250,203,150, 59, 47, 47,111,228,252,249,243,151,
- 79,159,179,132,255,252,109, 91,100,101,103, 35, 59, 59, 27,185, 57, 57,144, 65,135,139,215,174, 10, 69, 69, 69, 35, 43,226, 52,
- 26,141, 99,198,143, 31, 63,119,222,188,121,154,194,194,194, 71, 1, 43, 39, 39, 7, 58,157, 14, 71,142, 28, 41, 53, 26,141,227,
- 42,226, 44, 40, 40,152, 48,119,238,220, 25, 67, 71,142,229, 6, 68, 72,145, 87,160, 67, 94, 94, 30,138, 10, 11,161, 32, 58, 68,
- 93,189, 42, 24, 12,134,175, 95,228, 40, 11, 89, 52, 49, 49,113, 92, 97, 97,225,237,103,124, 70,218,144, 33, 67, 82, 79,157, 58,
- 53, 53, 41, 41,105,243, 95,189, 15,229,228,228,204,105,212,168,209,236,204,204,204,120,163,209,248, 51,165,244,153,101, 16, 4,
- 97, 4, 33,228,236,178,101,203,186, 56, 57, 57,185,164,165,165,205,127,193,126, 89,161, 64, 96,233,244,247,239,223,159,160,213,
-106,191,206,200,200,152, 95, 78, 96,251,178,108,186,133, 22,124,246, 62, 0,251,202,153,198,140, 7,183,168, 88,106,225,242,252,
- 10,224, 87, 11,166, 91, 13, 96,245,223, 81,119,228,230,230,206,235,216,177,227,248,244,244,244,163,105,105,105,139, 95, 52,173,
-201,100,234, 51,104,208,160,241,174,174,174, 97, 25, 25, 25, 75, 44, 92, 7,102, 0, 39,202, 30,149,227, 13,224,225, 85,120,121,
- 0, 18, 42,243,168,156,178, 59,180,127,224,228,215,170,253,193,237,139,123, 65, 16, 2, 1, 2, 78,202, 95,214,151, 20,111,176,
-180,229,234, 25,206,247,157,252, 90,181,207, 73, 79,232, 45, 10, 66, 32, 71, 32, 18,158,191, 82,170, 47, 94,147,113,237, 32,123,
- 84, 14,163,114, 33,180, 34,207,194,117,119,119, 87, 73,165,210,247, 40,165,161,162, 40, 70,137,162,184, 51, 37, 37, 69,247, 50,
- 9,247,213, 59, 9,249,178,151,170,138,149, 10,223, 91,169, 16,176,108,135,253,120,179, 89,220,241,178,229,252,167, 28, 49, 16,
- 66, 52, 50,153,108,164, 40,138, 61, 68, 81,220, 36,138,226,252, 23,221, 91,200,210,114,214,170, 85,107,121,139, 22, 45,122,253,
-254,251,239, 43,239,221,187, 55,242, 85, 44,123, 68, 68,196,154,170, 85,171,190, 31, 25, 25,201, 43,149, 74,164,166,166, 34, 39,
- 39, 7, 55,111,222, 52,103,103,103,207, 56,113,226,196,236, 74, 56,255, 43,151,203,223,233,212,169,147, 90, 38,147, 33, 39, 39,
- 7,249,249,249,244,196,137, 19, 6,142,227, 70,159, 58,117,106,101, 5,215, 39,137,136,136,248,185,106,213,170,111,133,135,135,
-243, 50,153, 12,185,185,185,200,206,206,198,141, 27, 55,132,204,204,204,255,156, 57,115,230,123, 75,156, 62, 62, 62,242,184,184,
-184,103,246,137,209,106,181,210,231,133,127,118,148,204,156,204,201,156,255,182, 22, 44, 66,200, 64, 74,233,202, 55,182, 5,235,
-105,202, 66,202, 38,188,196,243,169,254,124, 39,165, 11, 55, 32, 13, 32,239, 78,158, 12,114, 63, 81,247,224,130,248,127, 9,101,
- 97,106, 50,202,233, 35, 82, 81,110,223,190, 61,216,221,221,253,171, 23, 5,213,138,114,252,248,241,190, 65, 65, 65, 91,147,146,
-146,198,169, 84,170, 58,130, 32,152, 13, 6,195, 69,131,193, 48,246,236,217,179,231, 43,233, 28, 16, 20, 20,244,211,206,157, 59,
-135, 11,130,224,207,113, 92, 41,165, 52,134, 82, 58,245,212,169, 83,177,149,108, 33,236, 28, 20, 20,212, 57, 57, 57,249,107,133,
- 66, 81, 91, 20, 69, 83,105,105,233, 57,131,193,240,159,179,103,207, 90,236,124, 94,184, 2, 30,220, 34,131, 29,239, 49, 24, 12,
-198,155,131,228,205, 93, 52, 74, 39, 78, 4,197, 68,182,145, 95,113, 24,126,165,156, 63,127,254,119, 0,191,191, 98,231,126, 0,
-251, 95,177,115, 7, 44,188, 35, 54,131,193, 96, 48, 24, 28, 91, 5, 12, 6,131,193, 96, 48, 24,175, 22, 2, 32,224, 89,111, 84,
-228,220, 42, 33, 36,160,162, 31,108, 65,223, 23,230,100, 78,230,100, 78,230,100, 78,230,124,195,156,143,185,167, 60,231,173,228,
- 50,207, 63,186, 15, 22,249, 51,187, 39,177, 14,128,204,201,156,204,201,156,204,201,156,204,249,111,132,157, 34,100, 48, 24, 12,
- 6,131,193, 96, 1,139,193, 96, 48, 24, 12, 6,131, 5, 44, 6,131,193, 96, 48, 24, 12, 22,176, 24, 12, 6,131,193, 96, 48, 24,
- 44, 96, 49, 24, 12, 6,131,193, 96,188, 54,144,127,209, 77,206, 25, 12, 6,131,193, 96, 48,254, 18,158,104,193, 34,132,176,180,
-197, 96, 48, 24, 12, 6,227, 47,231, 77,203, 32,236, 20, 33,131,193, 96, 48, 24, 12, 6, 11, 88, 12, 6,131,193, 96, 48, 24,255,
-128,128,197, 78, 13, 50, 24, 12, 6,131,193,248, 59,120, 83, 51,200,195, 22,172,200,178, 5,140,100,155,154,193, 96, 48, 24, 12,
-198, 95,200, 27,153, 65,216, 85,132, 12, 6,131,193, 96, 48, 24,175, 24,214, 7,139,193, 96, 48, 24, 12, 6,227,159, 20,176, 8,
- 33, 1,204,201,156,204,201,156,204,201,156,204,201,156, 44, 96, 49, 24, 12, 6,131,193, 96, 48, 88,192, 98, 48, 24, 12, 6,131,
-193, 96, 1,139,193, 96, 48, 24, 12, 6,131, 5, 44, 6,131,193, 96, 48, 24, 12, 6, 11, 88, 12, 6,131,193, 96, 48, 24,127, 19,
- 4,192, 51,175, 4,160,148, 94,177, 88, 82,137,171, 9,202,243, 51, 39,115, 50, 39,115, 50, 39,115, 50,231,155,231, 44,207, 93,
-145,252,241, 90, 7,172, 63,243, 70,163,132,144,128, 87,189,162,152,147, 57,153,147, 57,153,147, 57,153,243,205,115,190,105, 72,
-216, 42, 96, 48,254,225,108, 39, 60,156,234,214, 0,161,174, 32,178,116, 28,185,116, 23, 19,169,248,210, 78,215,122,213, 96, 48,
-185, 64,165,202,194,129, 11,241, 47,237,100, 48, 24, 12, 22,176, 24, 12,198, 63, 6, 79,255, 90, 48,137, 83, 0,184, 2,134, 59,
-104, 22, 48, 15,192,181,151,114,186,248,215,130, 40, 78,132,140,243,128,177,244, 54, 90,212,157, 7, 32,150,173,108, 6,131,193,
-176,140,191,165,147,123,112,112,240,201,144,144,144, 9,145,145,145, 10,182, 9, 24,140,151,224, 74,160, 26, 38,211,219,165, 70,
-209,125,223,169, 28,231, 98,189, 80, 27,156,177, 13, 98,253, 53, 47,229,228,196, 86,122,163, 80,117,195,193, 98,151, 34,189,185,
- 14, 68,225,229,156,101, 52,104,208,192, 54, 52, 52,116,151, 86,171,117,100, 27,143,193, 96,176,128,245,138,161,148, 54,112,113,
-113, 25,170,211,233,110, 4, 5, 5,117,248, 55,173,240,176,176,176, 63, 26, 55,110,156, 16, 30, 30,158, 16, 30, 30,126,170,188,
-241,111, 42,193,193,193, 13,154, 54,109,186,215,223,255,193,143,118,224,103, 59,157,131,250,239,247, 14,251, 98,159, 7,251, 90,
- 86,128, 66,234, 2,240,205, 99,227, 75, 84,233,185,102,151,152, 27,197, 86,160,124, 51,100,139,174, 47,229, 20, 73,243, 11,113,
-122,245,233, 59,206, 46, 39,175,150, 90, 3,124,243,151,114,150, 33,145, 72, 6, 0,104,201,243,252, 16,182,241,254,221, 16, 66,
-252, 9, 33, 29, 8, 33,218, 87,232,156, 86,183,110,221, 56, 66,200,231,108, 13, 51,254, 49, 1,171,139, 55,105,220,195,155,252,
-222,173, 38,201,232,238, 77, 50,122,122,147,131, 93,106,147,166,149,253,224,159,126,250, 73,181,126,253,122,231,128,128,128,181,
- 97, 97, 97, 7,195,194,194,124, 42,227, 9, 13, 13,221, 21, 28, 28,252,254,211,227,180, 90,109,151,167,198,157, 11, 13, 13, 77,
- 11, 9, 9,185,106,137, 87,171,213, 94,214,106,181,153,193,193,193,151,159, 26,223, 37, 52, 52,116,215, 83, 97,225,253,167,199,
- 61, 15,158,231, 61,118,239,222,237,252,219,111,191, 57, 75,165, 82,151,167,199,255,250,235,175, 79,140,175, 40, 33, 33, 33,125,
- 67, 66, 66,254,120,124, 92, 80, 80, 80,159,167,199,149,179,236,127, 4, 5, 5,245,121,202,251, 71, 72, 72, 72,223, 87, 20, 50,
-131,228,114,249,239, 70,163,177,169, 70,163, 81, 3,128,196,164,178, 22,101,146, 46, 70, 42,105, 24,248,245, 1,103,246,213,180,
-128, 88,127, 25, 68,115, 19, 65,164, 78, 87,227,245,206,237, 58,118,145, 92,186,173,115, 50, 9,130, 61, 68, 52,195,209, 26,138,
- 74, 57, 5, 67,184, 64, 69,151, 67, 23,164,206,145, 29,134,240,135,175, 72,157, 76,130,224, 0, 65,108, 90, 41,231,255,239, 87,
- 82,158,231,191, 24, 56,112, 32, 71, 8,249,212,199,199, 71,254,111,218, 92,141,235, 19,247,183,130, 37,199, 66,234,145,198,175,
- 48, 80,212,181,178,178, 58, 65, 8,169,245, 15, 11, 87, 13, 0,168, 41,165,191, 1,112, 33,132, 72, 94,129,115,246,148, 41, 83,
-190,188,124,249,178, 91,205,154, 53,199, 17, 66,120, 86, 73, 48, 94,251,128,245,145, 23, 25,235,230,234,241,203,216,133,155,154,
-254,247,232, 93,205,183,187,207,107, 70,142,154,209,216,205,214,121, 71, 79,111, 50,245,121,243,189,232, 10, 3,185, 92,142, 59,
-119,238, 96,233,210,165,202, 73,147, 38, 53,178,178,178, 58, 27, 22, 22, 54,231, 97,139,134,165, 78, 74,105, 35,153, 76,182, 60,
- 44, 44,108,197, 99, 21,118, 35,165, 82,185, 44, 44, 44,108,213,195,211,144, 90,173,182, 70, 84, 84,148, 53, 33,196,197,146,114,
-134,134,134,186,198,196,196,168, 9, 33,174, 0, 16, 25, 25,169, 8, 13, 13,253,193,211,211,115, 41,128, 70, 0,224,227,227, 35,
- 15, 11, 11, 91, 81,181,106,213,111, 9, 33,141, 44, 89,118,142,227, 96,103,103,135, 77,155, 54,129,227,184,199, 43, 7,216,217,
-217, 97,227,198,141, 32,132, 84,120,125,250,251,251,107, 66, 67, 67, 55,185,185,185,205, 17, 69, 49, 12, 0, 2, 3, 3,213,161,
-161,161, 27, 61, 61, 61,231, 62, 28,103,161, 51, 76,161, 80,204, 9, 13, 13,221, 24, 24, 24,168, 6, 0, 81, 20,195,164, 82,233,
-236,208,208,208, 77, 21,221, 70,205,155, 55, 31,220,168, 81,163,220,144,144,144,194,136,136,136,141, 60,207,239,157, 62,125,186,
- 90,169, 84, 26,204,246,213, 53,218, 65,135,170,202,164,114, 51, 37, 92, 41, 21, 48, 69, 90, 40,179,247,249, 98,159,220,210,101,
-175, 44,255,120,103, 38,239, 12,130, 22, 55,239,233,148, 94,181,130,213, 46,126, 93,224,108, 39, 85,156,185, 94,108, 5, 9,137,
- 4,167,113,170,148, 19,210, 22, 87,239,232, 84, 14,222,237, 84, 33,141,155, 1,234, 90,138,163, 23,139,173, 33,225, 43,231,252,
-255,247,223, 11, 15, 15,151,181,106,213, 10,238,238,238,156,141,141,205, 71,111,252, 54,122, 44, 92, 89, 41,228, 71,231, 79,249,
- 50,200,213, 65,189,213,146,144,101,193,229,243,117, 93, 92, 92,246, 45, 91,182,172,161,181,181,245, 1, 75, 66,214,235,176, 62,
-203,194,149,140, 82, 26,245, 48,214, 3, 8,127, 73,231,236, 73,147, 38, 13, 25, 61,122, 52, 10, 11, 11,209,167, 79, 31,107, 0,
- 51, 43,227,236,218,181, 43,223,181,107, 87,254, 95, 81,135,188,102,206,114,144, 3,104, 1,160, 3,128,183, 0,132,150,253, 29,
- 82, 54,116, 0,208,234,169,215,144,135,109, 4,101,255,135, 61,199,209,225, 25,243,133, 60, 54,254,241,255,159,254,251,197, 1,
-139, 16, 66, 31,127,125, 98,103,243, 33,141,156,220, 60,190,156,181, 35, 90, 37,222,186,136,243,159,180,196,141, 97,239, 65,117,
-251, 34, 70, 13,253, 70,101, 99, 99,247,105, 87, 31,210,172, 50,107,235,214,173, 91,216,188,121, 51,156,156,156,200,170, 85,171,
- 20, 31,126,248,225, 0, 27, 27,155, 91,193,193,193, 31, 89,234,224, 56, 78, 92,189,122,181,230,221,119,223,237,226,224,224, 16,
- 29, 18, 18,226,197,113,156,184,110,221, 58, 77,183,110,221, 58, 27, 12,134,152,176,176, 48,159,243,231,207, 11,209,209,209,224,
-121,203, 14,106, 98, 98, 98,132,189,123,247, 62,108,113,241, 1, 16, 51,107,214,172, 46, 59,118,236,176,178,177,177,161, 33, 33,
- 33, 94, 85,171, 86,141,158, 51,103,206, 71, 63,253,244,147,149,181,181, 53,181,176, 34,128, 94,175,135, 82,169,124, 34, 72, 61,
- 28,175, 80, 40,158, 27,176, 94,208,106, 85,215,209,209,241,252,204,153, 51, 59,238,220,185, 83,101,109,109,141, 70,141, 26,213,
-177,179,179,187, 48,119,238,220, 78,187,118,237, 82, 89, 91, 91, 91,236,147,201,100,216,176, 97,131,186, 71,143, 30, 29, 20, 10,
-197,249, 70,141, 26,213,145,201,100,216,180,105,147,186, 71,143, 30,237,212,106,117, 76, 72, 72, 72, 93, 75,125,130, 32,140, 90,
-184,112,161,124,235,214,173,124,245,234,213, 91, 79,159, 62, 93,173,213,106, 9,165, 20, 84, 94,203,214, 44,161, 93,244,156,217,
-131, 55, 24,127,229, 64,210, 5,137,177,167,157,192,179, 86,172, 23,177,157,240, 32,198, 6, 0,241,142,185, 85,226,216, 32,162,
-167, 4, 25,191, 32,212,207, 74,114, 56,166,208,133,138,168, 6,193, 28,140,163,145,146, 10, 57,101,166, 64,112,212,231,192, 69,
-206, 49,188, 85, 79,201,253,251,247,225, 85, 55,146,223, 29, 13, 23, 74, 81, 3, 68, 8,170,144,243,201,253,106, 76,215,174, 93,
- 53, 9, 9, 9, 8, 15, 15, 87, 43, 20,138,209,175,164, 21,239,180, 95, 53, 28,247,139,192, 9, 63,215,202,150,237,207,110,185,
-178, 82,200,143,108,218,240,163, 91, 96, 68,127,178,226,203,234,246,142, 86,178,173, 47,211,146, 85, 22,174,246,158, 61,123,214,
-225,237,183,223,198,164, 73,147,156,108,108,108, 14,188,238, 45, 89,143,135, 43, 66,136,170,236,244, 96, 10, 0,143,151,112,206,
-157, 52,105,210,144, 49, 99,198,224,204,153, 51,152, 51,103, 14,218,181,107, 7, 59, 59,187, 80, 75, 29,193,193,193, 33,205,155,
- 55,223,220,188,121,243,212,196,196,196,130,123,247,238, 21, 68, 68, 68,164, 54,111,222,124,115,112,112,112,200,203, 44,114,217,
-192,120,241, 54,124,110, 6,121,140,250,163, 71,143, 14, 37,132,252, 58,122,244,232, 96, 0, 78,132,144, 95, 1, 56, 3,112, 46,
-251, 91,254,212,171,115, 89,104,122,248,190,227,179, 28, 15,135,167,230,115,126,108,252,227,159,241,244,223,229,183, 96, 17, 66,
-154, 3, 56,246,244, 4, 82, 17,227, 7,141,152,170,140, 95,187, 0,169, 27, 22,130,100, 37,131,207, 75, 67,233,177, 95, 96, 58,
-254, 11,122, 55, 14, 87,169, 64, 38, 86,102,165, 90, 89, 89, 65, 38,147,225,214,173, 91,184,126,253, 58,218,181,107, 39, 91,178,
-100,137,109, 64, 64,192,178, 38, 77,154,156, 9, 11, 11, 11,176, 96,195,160,118,237,218,232,214,173,155,124,216,176, 97, 53,229,
-114,249, 41, 74,169,196,203,203, 11, 31,126,248,161,108,212,168, 81,213,229,114,249, 9, 81, 20,101,106,181,218,226,240, 66, 8,
-129, 90,173, 6, 0,169,183,183,247,201,205,155, 55,215,104,210,164,137,100,255,254,253, 40, 44, 44,228,107,213,170,117,102,243,
-230,205,222,141, 27, 55,150,156, 56,113, 2, 58,157,206,226,128, 85, 92, 92,252,204,128, 85, 84, 84,244, 63,227, 45, 8, 87,125,
-107,214,172,121,124,203,150, 45, 30, 77,155, 54,229, 15, 31, 62,140,194,194, 66,120,122,122,158,216,178,101,139, 71,120,120, 56,
-127,234,212, 41, 20, 22, 22, 86, 40, 96,149,173, 63,233,200,145, 35, 61,120,158, 63, 46,147,201, 80,189,122,117,124,248,225,135,
-178, 17, 35, 70,120,200,100,178,163,150,158, 50, 20, 4, 65,238,236,236, 12, 91, 91, 91,244,239,223, 95, 93,167, 78, 29, 98, 54,
-155, 65, 41,133,220, 88,108, 36, 34,173, 77, 8,247, 62,225,121,163, 0,178,145, 80, 62, 66, 52, 75,100,172,218,121, 1, 54, 1,
- 14,224, 73,203,123,169,165, 10,165,166,170,149,198,169, 14,144,115, 12, 53, 61, 20, 32,132, 83, 68,197, 22,105,192,147,150, 16,
-178, 29, 42,228, 20,208,242,110,114,169,194,168,170,167,113,247,168,134,172,172, 44, 84,245,242,131,158,115,150,159,186, 90,164,
- 1,173,160,179, 12,173, 86,219,164,106,213,170,174, 53,106,212, 64, 86, 86, 22,106,213,170, 5, 43, 43, 43,187,134, 13, 27,182,
-172,244, 58, 56, 90, 67,129, 2,174, 17, 4,204, 4, 48, 14,224,166,128,100, 53,192,121,173,244,117, 11, 87,155, 55,254,232,238,
-232, 86, 7,184,210, 31, 85, 28,228, 88, 53,186,190,189,163,149,162, 82, 33,139, 16, 82,183, 74,149, 42,123,207,158, 61,235,168,
- 84, 42, 17, 19, 19, 3,127,127,127, 44, 88,176,192,201,206,206,238,181, 13, 89, 79,133, 43,123, 74,169, 14,128, 8,160, 43, 42,
-113,213, 43,121,192,130,169, 83,167, 14, 30, 51,102, 12, 78,159, 62, 13, 15, 15, 15,100,100,100,160, 89,179,102,247,243,242,242,
-102, 91,210, 90,213,172, 89,179,111,237,237,237,127, 29, 48, 96, 64,199, 77,155, 54,217,236,220,185,147, 52,111,222,156, 84,171,
- 86,205,102,192,128, 1, 29,237,237,237,127,109,214,172,217,183,150,182,106,149, 33, 1,160, 4,160,126, 56,220,185,115, 71,238,
-227,227, 35, 39,132, 40,203,194,165,130, 16,194,158,166, 82, 78, 6,121, 12,167, 89,179,102,205,160,148,118,156, 53,107,214,140,
-199,230,251,245, 5,206,199, 67, 19, 0,224,105, 7,165,180,227,227,175,143,207, 75, 41,237, 72, 41,237,248,248,252, 47,250,188,
-231, 6, 44, 0, 71, 40,165,205,255,167, 25,144, 32,192,181,102, 29,228, 29,216, 6, 21, 79,158, 24,184,187, 87, 80, 85, 41,129,
-153,210,186,149, 89,161, 86, 86, 86,143, 6,142,227,144,154,154, 10,158,231, 49, 97,194, 4,229,144, 33, 67,234, 73, 36,146,195,
-205,155, 55,159, 82, 94, 96, 1,128,168,168, 40,212,170, 85,139,140, 25, 51,198,186, 89,179,102, 18, 0,184,116,233, 18,124,124,
-124,200,180,105,211,172, 58,117,234, 68, 42, 18,176, 56,142,131, 82,169, 68,100,100, 36, 89,179,102,141, 70,161, 80,224,183,223,
-126, 67, 86, 86, 22,222,126,251,109,201,154, 53,107, 52, 74,165, 18, 71,143, 30, 69,126,126,126,133,130, 91,105,105, 41,158, 46,
-203,243, 90,182, 94, 68,147, 38, 77,190,115,117,117,157,179,126,253,122,133, 74,165,194,225,195,135,145,159,159,143,238,221,187,
-155, 55,110,220,168,180,177,177,193,169, 83,167,144,159,159, 95,169, 29,254,177,117,170, 10, 15, 15, 55, 1,192,133, 11, 23,224,
-235,235, 75,198,140, 25,163,178,177,177,153, 29, 17, 17,241,157, 5, 77,201, 40, 41, 41,129, 94,175,199,237,219,183,145,147,147,
-131,164,164, 36,136,162, 8,130,140, 66, 81, 38,221, 74, 68,225,125, 94,170, 80, 72, 56, 18, 11, 2, 63, 42, 17,101,100,242,100,
- 86,249, 60,111, 39,146,149,214,130, 72, 26,156,190, 86,100,223,244,237, 30, 50,100,238, 5,168, 9, 32, 18,180, 8,243,148,252,
-114,170,196, 5,148, 4, 64, 69,124, 1, 11,118, 40, 66, 8,164, 6, 31, 80, 18,116, 32,198,236,208,180,205,103,178,164,164, 36,
-200,100, 50, 40, 20, 10, 4, 53,254, 64,178,249,136,201, 21, 64, 32,148,164,182, 69,206, 39, 67,251, 55,253,250,245, 83, 39, 39,
- 39, 63,114,182,107,215, 78, 99,101,101, 53,166,210,225,138,183, 10,133, 89, 24,114,245,174,174,218,180,245,169,117,226,146,116,
-190,224,232, 23, 48, 8,245, 95, 54,100,121,121,121, 69,212,169, 83,231,154,183,183,119,248,203,132, 43,107,133,252,240,150,141,
- 63,186, 59,184, 62, 8, 87, 16, 74, 0, 94, 5, 87, 23,123,172,154, 24,105,239,104,173,170, 80,200, 42, 11, 87,123,206,156, 57,
-227,168, 84, 42,113,238,220, 57,200,229,114, 40,149, 74, 4, 6, 6, 98,229,202,149, 78,246,246,246,175, 69,200, 34,132,216, 17,
- 66, 90, 17, 66, 58, 19, 66,222,123, 44, 92,213, 0, 16, 73, 8,105, 9,160, 10,128, 19,148,210,203, 22, 58,195, 37, 18,201,207,
- 13, 26, 52,184, 35,145, 72, 98,102,204,152, 49,104,212,168, 81, 88,188,120, 49, 34, 35, 35,239,126,243,205, 55,184,113,227,134,
-185,184,184,184, 43,165,116,111,121,190,148,148,148,113,222,222,222, 93,118,238,220,169,169, 94,189, 58, 87, 92, 92,140, 3, 7,
- 14, 96,238,220,185, 40, 45, 45,133,167,167, 39,183,115,231, 78,141,183,183,119,151,148,148,148,113, 22,148,207,201,201,201,169,
- 22, 30,156,206, 82, 0, 80, 1, 80, 39, 36, 36,104, 14, 31, 62,108,223,160, 65, 3, 59, 43, 43, 43,245,184,113,227,220,135, 13,
- 27,214,177,188, 22,144,127, 25,207,204, 32,207, 9, 77,143,255,190,116,124, 94,232,121,248,222,179,194, 83,101, 11,249,162,207,
-123, 81,192,138, 36,132, 28,125,214, 68,198,112,179,214,203, 0, 0, 32, 0, 73, 68, 65, 84,156,116, 40, 32, 64,205, 19,168, 36,
-228,193, 43, 79,160, 34, 34, 36,185,233, 21,172,106,159, 12, 88,214,214,214,176,182,182,126, 34,104,233,116, 58, 20, 23, 23, 63,
-209, 71,233,121, 60, 60,229,103,111,111,143,194,194, 66,152,205,102, 60, 60, 29,230,224,224,128,210,210, 82, 16, 66,160,209,104,
-160,209,104, 42, 28,176, 0,224,244,233,211, 56,121,242, 36, 36, 18, 9, 28, 28, 30, 28,188,159, 59,119, 14,151, 47, 95,134, 92,
- 46,135,163,163, 99,133,188, 6,131, 1, 74,165,242,127,250, 96, 25, 12, 6, 40, 20, 10,139, 79, 99,114, 28, 7,189, 94, 79,207,
-157, 59,135, 43, 87,174, 64,161, 80,192,217,217, 25, 50,153, 12,137,137,137,136,141,141,133, 92, 46,135,179,115,229,190,195, 54,
- 54, 54,200,203,203,131, 40,138, 80,169, 84,143,198, 21, 21, 21,129,227, 56,139,182,207, 67, 46, 92,184,128,211,167, 79, 35, 62,
- 62, 30,151, 46, 93,194,141, 27, 55,240,196, 83, 4,104, 89, 51,186, 73, 52, 81,128,227, 77, 60, 55, 9, 19, 89,149,243,204,106,
-168,190, 13, 56,201, 91,153,121, 38, 69, 86,145,220,166,138,207, 91, 64,214, 94,128,240,128,212, 14,141, 26,214,196,253, 52, 65,
-125, 35,169, 84, 9,163,208, 26,251,235,218, 89,228,148, 72, 90,102,228,153, 20,241,249,206,214,117, 3,180,200,200,200,128, 66,
-161,128, 66,161, 64,112,216, 91,184,147, 38,170,174, 38,232,212, 16,197, 86, 22, 57,255,191,245,170,166, 82,169, 12, 13, 10, 10,
- 34,233,233,233, 80, 40, 20, 80, 42,149,104,220,184, 49, 56,142,171,167,213,106,125, 43,180,252,119,124,228,144, 89,133, 0,194,
-144,235,119, 75,220,118,157,212,213,122,231,157, 15,236, 23,109,207,244,189,158,160,175, 1,179,113, 24, 10, 77, 13, 43, 27,178,
-188,188,188,154,170,213,234,159,198,141, 27, 87, 67, 42,149,238,168, 89,179,102,147,202,120,212, 10,126,201,216, 97,221,221,237,
- 31,134, 43,115, 49,192,171, 0, 94,253, 32,100, 85,113,194,180, 97,173,236, 85, 82,217,102, 75,157, 42,149,106,237,178,101,203,
-156, 30,134, 43,153, 76, 6,165, 82,249,104, 8, 10, 10,194,196,137, 19,157,236,237,237,215,252,205,225,202, 30, 64, 19, 0, 87,
- 0,236, 4,112,248,177,112,229, 13, 96, 87, 89,171,213, 69, 74,233,125, 11,157,141,218,182,109,187,247,206,157, 59,109, 46, 94,
-188,232,154,150,150,230, 59,114,228, 72, 44, 90,180, 8,163, 70,141,218, 74, 41,109,176,109,219,182,198, 81, 81, 81,161,148,210,
-107, 22,214,161,159,244,236,217, 83,173, 82,169,160, 84, 42,177,126,253,122,124,246,217,103, 80, 40, 30, 92,203,161, 86,171,161,
- 82,169,208,179,103, 79, 53, 33,164,159, 5,202,156,130,130, 2,171,206,157, 59, 87, 45,107,185,210, 24, 12, 6,171,172,172, 44,
- 27,142,227,108,235,213,171,231, 50,113,226, 68,223,162,162,162,250,187,119,239,206, 0,144,197, 42,180,242, 51,200,211, 1,199,
-146,113,149,157,222,210,144, 85,161,128, 69, 41, 61, 10,160,217, 51, 38,184,114, 63,250, 40, 28,252,131,158,108,193,146, 16,168,
-173,109,112, 55, 57, 17, 82,144,235,149, 40,224, 19, 45, 88, 15,135,212,212, 84,124,243,205, 55, 37, 27, 54,108,184,106, 52, 26,
- 91, 28, 61,122,116,130, 37, 45, 88, 46, 46, 46,184,127,255, 62,157, 59,119,110,225,190,125,251,204, 15,199, 37, 38, 38,210,241,
-227,199, 23,253,248,227,143,180,162,167, 8, 85, 42, 21,142, 30, 61, 74, 39, 76,152, 80,144,156,156, 76, 29, 28, 28,224,232,232,
-136, 67,135, 14,153, 71,143, 30, 93, 16, 23, 23, 71, 29, 28, 28,224,224,224, 80, 33,175, 32, 8, 80,169, 84, 79,204,195,113, 28,
- 76, 38,211,255,140,127, 17,199,143, 31,255, 44, 63, 63,127,212,215, 95,127,173,187,118,237, 26,117,118,118,134,179,179, 51,214,
-174, 93, 43,233,211,167,143,238,210,165, 75,143,198, 85, 6, 39, 39, 39,220,184,113,131,206,156, 57, 83,119,240,224, 65, 41, 0,
- 56, 59, 59,227,198,141, 27,116,234,212,169,186,188,188,188, 81,199,143, 31,255,204,146,109,157,147,147,131,172,172, 44, 36, 37,
- 37, 33, 43, 43, 11,217,217,217, 16, 69, 17, 20, 46,214,156,209,244, 33,120,110,135, 96, 42, 45, 53, 73, 72,109,128,222, 21, 68,
-163, 97,226, 68,176, 59,135, 63, 11,185, 80, 5,160,141, 79, 92, 46,178,109,221,254, 35, 57, 41,136, 2, 76, 69,128,212, 30,144,
-218, 67,162,116, 68,219,150, 13,249, 53,251, 11,170,128, 32, 12,182,242,242,251,183, 72, 69, 23, 80, 49,252,224,121,189, 93,211,
-118, 67,229, 57, 57, 57,224, 56,238, 81,192, 82,107, 52,104,213,190, 39,183,250,128,190, 10, 68,218, 8, 42, 98,113,159, 25,153,
- 76,246,101,191,126,253,100, 79, 59, 85, 42, 21,222,125,247, 93,133, 70,163, 25,101,241,178,199,250,203,144,161, 10,129, 40, 12,
-185,145,160,115,219,121, 74, 87,107,228,196,213,170,122,245,195,240,233, 59,206,170,153, 27, 50,253, 46,222, 41,169, 1,137,121,
- 40,138, 76, 65, 88, 89,177,144, 85,179,102,205, 38,106,181,250,231,157, 59,119,170, 91,180,104,129,175,190,250, 74, 35,147,201,
-118,120,121,121, 85,248,138,105, 93,161, 48, 98,234,162,245, 25,151,182,182, 5,204,133,101,225,234,255,135,140,124, 17,227,151,
- 29, 46, 48, 80,177,143,197, 78,157,110, 64,255,254,253,115,126,250,233,167,255, 9, 87, 74,165, 18,241,241,241,152, 54,109, 90,
-110,110,110,238,192,191,121, 47,173, 15,224, 18, 0, 61,128,166, 0,212,101, 87, 10,134,150,133, 45,129, 82,154, 65, 41, 77,179,
- 84,200,243,252,136,229,203,151, 75,116, 58, 29, 6, 12, 24,128,196,196, 68,164,164,164, 96,236,216,177, 9,162, 40, 14, 40,115,
- 94,166,148,222,180,212, 89, 92, 92,252,233,148, 41, 83,116,201,201,201, 8, 8, 8, 64, 70, 70, 6,218,183,111,143, 14, 29, 58,
- 64,173, 86, 35, 48, 48, 16,137,137,137,152, 60,121,178,190,164,164,196,146,186, 78, 52,153, 76,215, 15, 31, 62,172,236,216,177,
- 99,237,121,243,230,121, 29, 62,124,216,167,164,164,164, 70,105,105,169, 95,106,106,170,255,238,221,187,171,173, 92,185, 50, 49,
- 33, 33, 33,154, 82, 42,176, 10,237,197, 25,228, 21,240,219,203,180, 84, 61,171, 5,204, 82,184, 50, 17,121,252,245,137,214, 43,
-130,169,235,182,175,213,203,171,215,134,173, 95, 3,168,149, 74,168, 20,114,168,236, 28,160, 23, 69,252, 16,159, 86, 82, 12, 58,
-249,101, 3,150, 40,138, 88,177, 98,133,126,218,180,105,249,169,169,169, 95, 28, 59,118,172,209,217,179,103,203,189, 74,129,227,
- 56, 20, 20, 20, 96,219,182,109,186, 53,107,214,220, 45, 45, 45, 13,151, 74,165,102,131,193,128, 77,155, 54,233, 23, 47, 94,124,
- 79,175,215, 55,149, 74,165,198,138,156,126,123, 24,176,164, 82,169,169,180,180, 52,124,235,214,173,119,126,253,245, 87,157,141,
-141, 13, 36, 18,137, 89,175,215,135,174, 95,191,254,214,150, 45, 91,116, 54, 54, 54, 21,242,138,162,248,204, 62, 88,130, 32, 60,
- 58,114,178,148,232,232,232, 53, 38,147,169,249,230,205,155,147,215,172, 89,163,183,177,177, 1, 0, 8,130, 16,177,110,221,186,
-228,239,191,255,190,180, 34, 29,220, 1,192,104, 52, 66, 16, 4,172, 91,183,174,116,203,150, 45,201,162, 40, 70, 60, 28,183,122,
-245,106,253,250,245,235,147, 77, 38, 83,243,232,232,232, 53, 22,110,107, 67, 74, 74, 10, 82, 83, 83,113,233,210, 37, 67,108,108,
- 44,205,202,202, 2,165, 20, 38,137, 70, 66, 57,114, 75,164,116, 59, 21, 4, 25, 79,241, 17, 1, 57, 70,120,222,200,170,156,231,
- 80, 4, 53, 8, 81,221, 76,212, 91, 43,101, 38,130,180,159, 1,153,253,163,128, 5,169, 61,220, 61, 60, 17,125,163,196, 10, 4,
-114,232, 77,229, 39,236, 18,170, 1, 33,234,171, 9,212, 90, 34, 83,145,244,244,244, 71, 63,218, 15, 3,145,151,183, 63, 46,220,
- 42,209,128, 64, 1, 17, 22,223, 74, 68, 20,197,118, 86, 86, 86,146,135,206,135, 62,133, 66,129,154, 53,107,242, 38,147,169,181,
-197,203,158, 46,186, 66, 48,127,122,243,158,222,109,231, 9,157,207,136,241,171, 85, 42, 46, 23, 72, 88,140,122,181, 92, 49,226,
-227,250,242,177,171,178,234, 70, 95, 47,169, 9, 78,232,143,186,197, 78,150,170,189,189,189,195, 85, 42,213,142,157, 59,119,170,
- 53, 26, 13,238,220,185,131,250,245,235, 99,218,180,105,106,149, 74,245,179,151,151, 87, 68, 69, 54,211,169, 88,122,191,164, 72,
-104,241,159, 21,137,233,151,226,133, 7,193,138,123, 16,174, 50, 11, 40,250,143,255, 37, 63,183, 72,223,253,204, 69,211,209, 10,
-212,155,151,242,243,243, 59,141, 31, 63, 62, 39, 43, 43,235,137,112,117,239,222, 61,116,235,214, 45, 55, 43, 43,171, 13,165,244,
-250,223,188,151,106,240,160,243,186,111, 89,139, 85, 32,165,212, 12,160,168,178,161,162,110,221,186, 13,170, 87,175,142,239,190,
-251, 14, 63,252,240, 67,222,130, 5, 11, 64, 41, 69,237,218,181,109, 42,235,188,120,241,226, 94,157, 78,247, 77,239,222,189,117,
- 27, 55,110, 20,250,244,233,131,144,144, 16,104,181, 90,244,238,221, 27, 63,252,240,131,185, 87,175, 94,122,189, 94, 63,234,226,
-197,139,123, 45,220, 70,165, 5, 5, 5, 23,127,251,237,183,203,203,151, 47, 79, 26, 62,124,120,209,192,129, 3,101, 51,102,204,
-200,218,182,109,219,197,227,199,143,255,174,215,235,163, 41,165,165,172, 50,123,180,206,158,155, 65, 30, 35,179, 44,232, 24,158,
-122,205, 44,231, 61, 75,231,125,230,223, 22, 76,247, 92,202,189,226,102, 91, 28, 61,211,211,155, 44,156,186,250,251,225,189, 2,
-235,170,106,120,213,133, 80,148,135,203,105,105, 88,151,154, 95, 98, 20,233,138,109,119,232,177,202, 6, 44,158,231,241,251,239,
-191, 11,155, 54,109, 50, 2, 88,157,159,159, 63,229,218,181,107,197, 21,168,188,185,126,253,250, 21,231,228,228,236, 74, 77, 77,
-253, 34, 46, 46,206, 16, 17, 17,193,245,232,209,163, 56, 59, 59,251, 55, 66,200,231,103,207,158, 45,109,218,180, 41, 42,242, 96,
-107, 66, 8,100, 50, 25, 8, 33,136,138,138, 74,240,247,247, 15, 57,115,230,204,194, 91,183,110,125, 64, 41,229,162,163,163,147,
-180, 90,109,216,169, 83,167,230,199,198,198,126, 40,138, 34,103,169,151,227,184,255,105,169, 34,132, 60, 10,117, 21,189,138, 48,
- 58, 58,250,186,191,191,191,246,204,153, 51, 43, 6, 14, 28,216, 10,128,250,204,153, 51, 55, 2, 3, 3,131,206,156, 57,179,226,
-227,143, 63,110, 93,214, 92,109,113,192,122,239,189,247, 74,242,243,243, 15, 20, 22, 22, 14,186,124,249,114,137, 86,171,197,123,
-239,189, 87,146,151,151,119, 48, 47, 47,111, 80, 69,182, 17,165,116,246,137, 19, 39,166, 81, 74, 37, 42,149,106,239,197,139, 23,
- 91,149,148,148,168, 41,165, 32,194,221, 2,206, 16,246,147, 64, 36, 28,149,240, 29, 64, 80, 11, 60, 38,200,228,106,214,116,254,
- 60, 20,230, 66, 16,146,218,181,165,131, 98,241,178,213,210,190,157,106, 42, 3,252,170, 63, 8, 87, 50,123, 68, 95,207,195,196,
- 5,219,196,153, 3,157, 18, 32,210, 36, 24,233,173,114,157, 54,124, 33, 74,197,204,126,109,228,138, 89,255, 29, 94,163, 73,135,
-175, 21,117, 3, 66, 31, 5,161,216,107,231,176,104,214, 23,226,204, 1,118, 9, 16,145, 10, 3,110, 86,224, 59,218,115,214,172,
- 89, 59,251,246,237,171,169, 87,175,222, 35,103,124,124, 60,230,204,153,163,211,235,245,221, 45,253, 86, 66,234, 87, 95, 48, 83,
-231,141, 7,178,125,190, 28,250,169, 90,197,229, 0,119,231, 61, 8, 47, 82, 91, 52,172,231,132, 9,159,187, 74, 71,206,221,237,
-119, 98,113,205, 34,136,242, 58, 0, 82, 45, 58,218,228,184,159,103,204,152,161, 86,169, 84,184,117,235, 22, 30,158, 54,210,106,
-181, 88,180,104,145,122,200,144, 33, 59, 35, 35, 35, 93,142, 28, 57, 98,174, 72,200, 10,247, 35, 45,254,179, 60,238,240,156, 97,
-118, 85,234,215,113, 70, 86, 33,208,127,226,238,188,236, 34,125,207,138,132,171,199, 67, 22, 33,164,211,176, 97,195,118,175, 93,
-187,214,161,110,221,186, 72, 76, 76, 68,183,110,221,114,178,178,178,218,190, 6,225, 10, 0,138, 1,184, 3,184,133, 7,125,145,
-238, 16, 66,228,120,137,199,179, 93,191,126,253,226,189,123,247, 92, 63,249,228, 19, 20, 20, 20,216,125,244,209, 71,184,115,231,
- 14,110,222,188,121,233,101, 10, 26, 21, 21,181,170, 81,163, 70,167,215,172, 89, 51,146,227,184, 38,165,165,165,206, 0,196,253,
-251,247,167, 9,130,112, 92,167,211, 45, 57,119,238,220,173, 10,110, 35, 10, 32,187,108,184,197, 42,173, 87, 66,244,223, 52,111,
-165,177,104,103,223,120,135, 78,239,226, 77,142,252,112, 38,106,130,145,210, 6, 0, 32,227,200,149, 34, 66,167,108,191, 67, 79,
-188, 32, 76,188,240,105,219,241,241,241, 88,188,120,113, 73, 81, 81,209,101,179,217, 60,248,236,217,179,113, 22, 4,148, 39,156,
- 18,137,228, 76, 98, 98,226,134,115,231,206,253,252,248,184,164,164,164, 77, 81, 81, 81,219, 31, 27,151,216,162, 69, 11, 15, 66,
- 72,182, 37,229, 36,132,164,189,251,238,187, 60,207,243,201, 0,112,237,218, 53, 35,128,207, 67, 66, 66,126,183,178,178,234, 3,
- 0, 49, 49, 49, 38, 0, 95,132,134,134, 30,208,104, 52,125, 45, 89,118, 66, 8,120,158,127,102, 11, 22,128, 23,118,114,127,209,
-250, 44, 11, 60, 61, 66, 66, 66,250,170,213,234,158, 0,112,249,242,229, 18, 0, 61, 67, 66, 66,250,168,213,234, 94,150, 58,213,
-106,245,217,244,244,244, 13,209,209,209,107,159, 26,183,209,146, 86,171,167,157,209,209,209,203, 1, 44,127,248,127, 88, 88, 88,
-208,237,219,183,247,138,162,168,146,100,223, 45,185,240, 91,187, 12,237,160,195, 53, 5,142,106, 64,232,120, 51, 71,114, 46, 44,
-104,164,175,200,190, 84, 25,254,177, 78, 71,238, 62,178,201, 34, 31,119,229,200,129,157, 28,200,236, 45,119,107, 12,237,233, 42,
- 15,106, 96,143,179,215,114,241,213,180,141,226,172, 65,206,119,155,248, 91, 37, 64,196,114, 8,165,153,229, 58,173, 76,247,161,
- 55, 45,168, 93, 85, 49,114,228,251, 34,153,176,126,186,151, 82, 57, 77, 22, 28, 22,137,235, 87,163, 48,123,210, 32,113,246, 32,
-187,187, 77,234, 90, 39,130,112,223, 66,208,103, 90,186,236,209,209,209,167, 67, 66, 66,222, 91,187,118,237,206, 97,195,134,105,
- 2, 3, 3, 17, 31, 31,143, 41, 83,166,232, 74, 74, 74, 62,184,112,225,194, 49,139,151,157, 18, 10, 80,136, 2,132,111, 38,125,
-107,208, 25, 4,162, 51, 82,162, 55,128,211,149,138,164,200, 32, 18,147, 73, 36, 30,206,234, 7, 45, 26,220,255, 30,248, 60,175,
-156, 28,199,229, 15, 27, 54,204,234,185,185, 86,161, 40,174,204,118,127, 20,178, 22,199, 28, 30,213, 95, 86,101,201,166,115,185,
- 89, 5,250, 94,229,133,171, 23, 57, 31,134,172,190,125,251,238,158, 59,119,174,195,232,209,163,179, 51, 50, 50,218,149, 23,174,
-254,194,125,254, 18, 30,220,219,234, 44,165,244, 56, 33, 68,131, 7,247, 32,186, 90, 89,167, 32, 8, 11, 62,253,244,211,214, 51,
-102,204,144, 76,156, 56, 17,113,113,113,152, 58,117,170, 96, 54,155,231,190,236,119,243,204,153, 51, 55, 0,244,255,215,212, 33,
-175,169,243, 77,131, 84,164, 85,231, 85,109, 0,173, 86, 91,210,166, 77, 27,221,209,163, 71,139,245,122,253,208,243,231,207,255,
-246,111,217,249, 90,182,108,249, 7,207,243, 94,132, 16, 80, 74, 83, 15, 28, 56, 16, 14, 0, 45, 90,180,248, 67, 34,145,120,149,
- 29,241,167, 30, 58,116, 40,252, 77,254,226, 5, 7, 7, 55, 0, 48, 93,175,215,119,189,118,237, 90,113,195, 47,246, 57, 17, 29,
-103, 67,120,222, 24,179,226,173, 68, 86,233,148,227,220,231, 35,135, 90, 17, 4,208,145,151,239,148,212, 24,191, 54,219,171, 99,
-235,198,210,117,219,143,137,179, 62,125, 20,174, 22,128,234,206,161,121, 66,169,197, 78, 37, 23, 12, 94, 50,242,194,237,146,106,
- 95,173,200,245,110,221,177, 63,255,235,207, 43,196,217,131, 28, 30,134,171,249, 16,138,162, 44,118, 62, 70, 72, 72, 72, 99,153,
- 76,182,179,123,247,238,154, 45, 91,182,148, 27,174,158,233, 60,229, 95, 21,102, 58, 9,132,150,223, 7,140,114,119, 96,194, 44,
-188,117, 45,241,117,216,238,225,126,164,154,202, 74,249, 83,177,209,244,181, 37, 45, 87,150, 56, 9, 33,245,237,236,236, 86,229,
-229,229,245,182,164,229,234,175, 92,118, 66,136, 19, 0,109,217,129, 60, 1,112,157, 82,122,247, 37,157,225, 60,207,143,240,241,
-241, 9,136,139,139,187, 38, 8,194, 66, 74,233,113, 22, 92, 88,192, 98, 1,171,140,136,136,136,147,162, 40, 30,144, 74,165,115,
-142, 28, 57, 82,202,118, 62,230,100,206, 74, 56, 31, 11, 89,231,110, 21,123,205,218,146, 91,245,203, 46,182, 73,229,133,171,114,
-157,101, 33, 43,234, 70, 73,245,217, 91, 11,170,142,248,192, 42,169,188,112,101,233,178,135,132,132, 52,150,203,229, 43, 75, 74,
- 74, 62, 47, 47, 92, 61,211, 25,235, 47, 67,182,217, 29,148,248,131,210,231, 63,106,135,240, 37, 32,220, 53,100,208, 12,116,185,
-102,100,251, 18,115, 50, 39, 11, 88,127, 53,127,203, 93,143,143, 31, 63,222,132,173,122, 6,227, 37,105, 27,103,192, 62,159,243,
- 80, 43,230, 7,251,170, 62,253,121,178,186, 4,148, 36, 67,164,223,190, 40, 92, 89,224, 60, 7,165,121,126,104,109,213,231, 59,
- 38,169, 75, 0,164, 3,220,210, 23,133, 43, 75,137,142,142, 62, 13,192,191,210, 2,191,107, 70, 0, 9, 0,185,135,201, 47,184,
- 67,246, 68, 80,224, 79, 60,122,100, 48, 24,140,215, 49, 96, 49, 24,140, 87, 24,178, 98,253, 99,144, 41, 29, 3,130, 26,144,154,
- 18, 81, 96, 74, 71,219, 4,195, 75, 58,163,145,201,223, 3, 69, 45, 72, 76,119, 81,160,127, 57,231, 43,135,210, 7, 33,138,193,
- 96, 48, 88,192, 98, 48, 24,127, 6,126,215,140,240, 67, 50,128,228,215,218,201, 96, 48, 24,255, 34, 8,128,128,103, 31, 31, 90,
-126,110,149, 16, 18, 80,209, 15,182,160,243, 38,115, 50, 39,115, 50, 39,115, 50, 39,115,190, 97,206,242,220,111, 74,223,174,191,
-165,147, 59,115, 50, 39,115, 50, 39,115, 50, 39,115, 50,231,155, 12,123,152, 46,131,193, 96, 48, 24, 12, 6, 11, 88, 12, 6,131,
-193, 96, 48, 24, 44, 96, 49, 24, 12, 6,131,193, 96,176,128,197, 96, 48, 24, 12, 6,131,193, 96, 1,139,193, 96, 48, 24, 12, 6,
-227,181,225, 79,189,138,144,193, 96, 48, 24, 12, 6,227,223, 8, 7, 0,132, 16,150,178, 24, 12, 6,131,193, 96,252,229,188,169,
- 25,132,157, 34,100, 48, 24, 12, 6,131,193, 96, 1,139,193, 96, 48, 24, 12, 6,131, 5, 44, 6,131,193, 96, 48, 24,140,127,103,
-192, 34,132, 80,214, 23,139,193, 96, 48, 24, 12,198, 95,205,155,152, 65,216, 85,132, 12, 6,131,193, 96, 48, 24,175, 24,118,138,
-144,193, 96, 48, 24, 12, 6,227,159, 20,176, 8, 33, 1,204,201,156,204,201,156,204,201,156,204,201,156, 44, 96, 49, 24, 12, 6,
-131,193, 96, 48, 88,192, 98, 48, 24, 12, 6,131,193, 96, 1,139,193, 96, 48, 24, 12, 6,131, 5, 44, 6,131,193, 96, 48, 24, 12,
- 6, 11, 88, 12, 6,131,193, 96, 48, 24,127, 19, 4,192, 51,175, 4,160,148, 94,177, 88, 82,137,171, 9,202,243, 51, 39,115, 50,
- 39,115, 50, 39,115, 50,231,155,231, 44,207, 93,145,252,241, 90, 7,172, 63,243, 70,163,132,144,128, 87,189,162,152,147, 57,153,
-147, 57,153,147, 57,153,243,205,115,190,105,176, 83,132, 12, 6,131,193, 96, 48, 24,175, 24,201,155,182, 64,254,254, 93,101,249,
- 82,250,142,189,189,205, 72, 80,138,220,188,194,249,182, 38,242,203,181,107,219,140,127,214,103, 18, 66, 8, 0,208, 55,244,185,
- 67,132, 16,101,189,122,245, 66, 0,224,234,213,171,209,148, 82,253,203,174, 47,103,255,206, 35,172,109, 84,189,204, 38,129,234,
-117,165,107,210,175,238, 88,242, 42,203,236,236,236,175, 49, 40, 53,211, 0,241,109, 16,112,148,146, 35,146, 34, 97, 84,110,110,
- 76,129,165, 14,247,102,163, 70,241, 50, 73, 63,193,104,154,157,114,108,206,106,247,200,201,142,130,185,120,150, 84, 33,143, 16,
- 13,198, 57, 41,199,231,252,192,170,144,138, 99,227,223,198, 94, 37,179,230,211, 46,108,203, 98,107,131,193, 96,176,128, 85, 70,
-181,128, 30,118,165,196, 56,150,151,240,239, 81, 42, 90,165, 93,216,230,252, 58, 44,136, 75,189,247,106,218,217, 91, 15,173,215,
-200,175, 75,143, 15,218, 40, 3,235,249,202, 75,141,102,252,178,231,216,183, 91,127,217, 63,207,183,217,199, 59,243,114, 11,151,
-254, 31,123,215, 29, 31, 69,181,182,159, 51,179,125, 55,157,100, 55,217, 77, 0, 9, 36, 64, 18, 32, 84, 19, 66,145,222,155,160,
-162,136,160, 2, 74, 19,229, 74, 71,244,162,160,116, 68, 64,138,210, 81,144, 94, 2,210,123, 73,168, 9, 4, 8,164,215, 77, 79,
-182,100,203,204,249,254, 72,194,141, 24,200, 6,240,126,247,122,231,209,253,177, 51, 57,231,217,119, 78,125,230, 61, 45, 59,102,
-207,163,151, 44, 62,100, 51, 70, 4,116,243,112,146, 73, 9, 33,187, 41,165,246,170,194,105,154,191,125,130,128,188, 82, 22,135,
- 1, 97, 0, 2,154,145,118,117,115,120, 21,156, 74, 0,222, 0,146,158,198, 87, 21, 20,218, 96, 95, 9, 35,253,130, 49,226,179,
-154, 8,137,103, 60,155,186,126,253,250,225, 1, 1, 1,234,113,227,198,137, 1, 96,241,226,197,141, 26, 52,104,144, 29, 31, 31,
-127,129, 82,154,253, 92,121, 21,212,127,234,172, 41, 31,205,236,215, 61, 2,249, 37, 54,124,191,254,215,121,154,144,129,108,214,
-237,221, 75, 94, 74,158,104, 91, 40,220,157,156,174,140,255,244, 75, 93,207,142, 45, 68, 5, 70, 59,118, 70, 94,124,107,239,207,
-243, 58,184,187,183,104,237, 72,218,232,194,255,241,170,239, 43,190,179, 7,246,239,139,239, 87,173, 27,167,141,152,154, 35,150,
-137, 86,133,133,181,119,243,241,173,131, 93, 59,183, 78, 0, 32, 8,172,154,149, 39,151,166, 1,110, 65, 3,154,133,238, 60,119,
-223,224,228, 21, 50, 96, 23, 88, 44,213,223,216,115,211, 81, 14,223, 70,225, 23, 68, 12,235,195,241, 92, 90,202,221, 11, 17,127,
-133,157, 42, 77,227, 78, 32, 88, 79, 40, 21, 83,208,239, 89,158,236, 42,206,137,123,248,162, 47, 80, 46,190, 65,238, 28,111,237,
- 38,101,148,205,172,188,233,154, 72,162, 56, 90,144,120,163,240, 37,165, 45,171,212, 4,190, 35,151, 41, 63,169, 31,216,168, 65,
- 66,194,131, 7,134,226,194,229,198,172,251, 27, 41,165,124, 77,184,252, 59, 79,123,131, 3, 63,141,183, 91, 24, 17, 37,223, 62,
- 58,179,100,171, 80,122, 5, 8,248,139, 5,150, 87,208, 16, 21, 17,209,171,237,195, 95,245,152, 62,118,160,116,233,150, 51,240,
-110,246, 70,124,230,141, 95,235,255,127, 62,132, 79,232,160,218,132,224,214,164,209, 67,241,254, 27, 93, 73, 78,177, 29, 69, 38,
- 14, 68, 12, 12,121,189,183,114,208,128, 30,202,111,151,173,255,224, 96,228,201, 15,124, 66, 7, 53,206,184,190, 43,185, 58, 78,
-239, 22,111, 31, 1, 72, 64,197, 53,229,236,114,194,138,204, 0,202,197, 17, 3,149,155,250,236,236,145,129,251,231,188, 31, 60,
-103, 67,100,210, 74, 0,181, 0,100, 85,217, 0, 50, 34,221,166, 53,139,189,116,181,164, 96, 24, 6, 5, 6, 27,222, 28, 57,137,
-171,162,161, 84,173,158, 28,218,255,189,222,117,223,146,117,216, 53,147, 16,114,203,145, 6, 82,165,105, 24, 44,149,187, 28,240,
-111,214,197, 45,225,230,177, 32, 39, 77,163, 15, 12,114,243, 67,154,152, 88, 90,211,134, 90,165, 82, 5,184,184,184,180,236,209,
-163,135, 98,202,148, 41,226,246,237,219, 63,254,251,168, 81,163,196,103,206,156,209,125,251,237,183, 3,117, 58,157,169,168,168,
- 40,202, 96, 48,220,167,148,114,142,254,134,187,187,251,123,131,122,183, 71,159,183,198,130,130,193,228,169,179,112,248, 80,228,
-112, 0, 47, 69, 96,185,176,204,204, 81, 19,103,233,218,135, 53, 23, 45,216,157, 12, 59, 79,209, 49,184,169,168,244,141, 79,189,
-143,253,186,228, 91, 0, 99,170,227,224, 36,204, 63,123,119,123, 13,224, 44,176,217,173, 94,110,181,220, 54, 15, 30, 56, 64,108,
-231, 40,142, 29, 59, 14,222,198,255,228,136, 45,222,205,135,158, 3, 97,116, 21,101,134, 16,128, 33, 0, 1, 1,165,124, 90,202,
-149,205, 47, 44, 18, 8, 33,172, 66,211,176, 59, 67,249, 97, 0,192, 19,102,179, 41, 43,238, 72, 77,242, 4, 0, 52, 77, 95, 79,
-164, 60,247,167, 23, 38,150, 21,235, 51,110,236,168,251, 2,246,121,246, 8,215,180, 56,253, 67,199, 46, 97,193,238, 33, 63,254,
- 94,234,210,162,231,120,164, 21, 96,240,222,221,187, 6,123,133, 12, 56,195,128, 46,206,186,189,247,120,117, 92,114,153, 76,189,
-127,255,126,175, 30, 61,122,185,169, 67, 6,236,225, 9, 50, 25,138, 76,194, 51,153,132,216, 51,237, 12,205, 4, 75,178,114,253,
-165,217,190,177,233,167, 89,134,213,217,121, 46, 35,245,238,133,112,199, 13,198,250,200, 99,231, 60,205, 54,138,239,126,216, 58,
-203, 88,152, 53, 43,241,142,103,146, 82,211,112,138, 49, 43,238, 96, 77,158, 93,225,219, 84, 43,226,205, 61,124,180,245, 94, 31,
- 63,241,243,214, 93, 59,181, 23,215,243,211,144, 71, 41, 89,244,247, 19,103,172,129,173,123, 94,202, 72, 75,216,197,219, 68,135,
- 13,250,216,172,231, 75,223,142, 34, 39,117,163,159,251,190,241,254,192,126,131,134,194,205,197, 9, 22,107,105,131,147,191, 31,
- 90,177,118,197,252, 48, 66,200,168,154,136, 67,142,218,167,173,157, 55,182, 62,192, 99,248,132,185, 51, 8, 33,219,107, 42,210,
- 4, 8, 16, 80, 67,129, 69, 88,251,236,176, 54,175,122,124, 50,110,164,116,204,242, 83, 72,190,114,216,244,178,196,149, 74, 29,
-172, 22, 73, 68,239, 50, 12,235, 70,192,200,121,142, 75, 41, 36,250,213, 52, 53,181,218,225,168,140,235,187,146,189, 67,251,183,
- 90,246,227, 47,179,163,110,196,182, 31, 51,124,160,202, 87,167,101,108,118,138, 11, 81,183,184, 21,107,182, 21,229,229, 23, 93,
- 32, 34,250,149, 35,226, 10, 0, 40,133,255,162,133,223,121,233,106,201, 80,104,180, 99,236,167,179,240,237,215, 95, 56,213, 86,
-203, 97,182,240, 88, 25,153,170, 15,202, 95, 24, 61,103, 96,240,156,125,231, 51,214,143,156, 27,117, 19,128,241,153, 2,213, 85,
-138,241,171,239, 65, 33, 23,193, 85, 41, 1, 75,152, 63,137,171, 85,159,135,246, 27,213,175,222,244,111, 54,222,221, 0, 64, 12,
- 64, 10,224,153,105,224,228, 29,212, 81,233, 82,107, 75,207, 17, 95,185, 42, 93, 53,120,103,112,207,160,179, 71,127,251, 61, 37,
- 37, 17,126,141, 35,204,118, 59,127,162,184, 40,255,123, 67, 86, 92, 76,117,207, 93,183,110,221,161,189,123,247, 86,125,254,249,
-231, 98,157, 78,135, 95,247,157,208,117,126,125, 98,215,180,172, 92,111, 0,208,105,106,101,126, 56,172,239,239,135, 15, 31, 78,
- 75, 75, 75,115,153, 55,111, 94,196,174, 93,187,154, 2,216,230,104, 94, 83,202,195,206, 81,112, 60, 5, 79,121,228, 22, 91,158,
- 75, 84, 60, 85, 64, 16,244,233,222,161,165,104,233,254, 20,220, 79, 47,203, 18,153,152, 69,139, 22,173, 68,199,119,145,246,213,
-138,162,118, 83,123, 53, 13, 14,124,213, 87,171,198,165,168,155,144,138,197,110,111, 13,234, 11,185, 66,129,109,191,238,226,179,
-178,210,199,101,158, 93,184,209, 49, 67, 25,221,154,149, 75,188,106, 57, 75,192, 18, 2, 86,196,128,101,128, 18, 51,135,119, 63,
-152,240, 66,117, 70,161, 13,246,101,169,109,184,179,182,241,240, 65,131,222,244, 25,250,214, 16,202,178, 12,118,236, 62,208,231,
-151,109, 27, 50,157,124, 2, 55,112, 68,188,209,148, 30,147,234, 80,190,240,156,215,254,157, 27, 80,203, 69, 2,134, 0,185,197,
- 28, 18,178, 76,152, 48,118,244,115,121,169, 9, 33,110, 31,247,127,165,251,205, 77,157, 59, 4,214,118,174,127,243, 65,193,221,
- 17,255,140,254,225,104,106,195, 87,231, 44,104, 4,163,185, 20, 99, 62,157,137,156,244,196,246, 71, 14,237,107, 95,171, 97,247,
-251,196, 82,244, 69, 78,194,165, 3, 79,227, 52,155,205, 5, 61,123,244,118,241,246, 86, 43,214,175, 91,211, 53,175,208,132,188,
-130, 98,232,243,138,144,147,155,143,140,172, 28,164,165,103, 32, 53, 37,141,207, 99,245,136,140, 60,196,244,237,219,151,171,169,
-237, 38, 43,143, 27,143, 74, 80, 39,176, 37, 60,212,190,104,213,109, 68,157, 27,167,183,255,234,228,221,120, 97, 73,230,157, 47,
- 28,225,112, 86, 7,126,247,230,219, 35, 62,124,115,240, 64, 81,195,250,190, 76,166,190,128,158,191, 20,157,191,116,241,178, 59,
-109, 59,116,108,220,183,103, 23,247,209,239, 13,233, 16, 23,159,218,110,219,206, 61,139,156,188, 26,110, 46,209,199, 77,168,105,
- 61, 80,106, 26,174,127,173,223,136,129, 33,109,186, 34, 62, 62, 30, 15, 98,163,208,177,115, 15,244,232, 61, 8,150, 82,243,208,
-141,235,150, 70, 3,248,177,202,248, 45, 90,136,221, 10,220, 20,127,104,139,181,129, 34,128,130, 82, 10,187,169, 80,162,210, 52,
-243,112,175,215,197, 10, 0, 5,110, 5, 38, 26, 29,109, 19,186, 78, 1, 2, 94,178,192, 98, 88,105,207, 73, 35,123, 73,167,174,
-186,136,228, 43,191,152, 50,175,255,234, 89,241, 55,223, 22,111,197,166, 70,111, 15,250, 99, 71, 90,253, 10, 3, 66, 90,136,221,
-116,248, 84,237,227, 51,250,157,247,199,179,117,124, 53, 76,137,217,110,207, 74, 79,165,145,251,183,125,236, 90,187,217,119,133,
-201, 55,214, 62,141,147,212,239, 41,165,241,135, 45,153,215,247,222, 5,240,166, 58,120,168,250,252,149,219,147,221,221, 92,134,
-216, 57, 59,138,139,141, 59, 10, 10,108, 11,179, 99,182,101, 87,106,148, 72,229, 55,186,167,217,233,238, 36,193,167,235,239,195,
-108,225, 64, 41,133,151,155, 20,243,127, 75,130,136, 37,250,224,130,133,139,191, 26,104, 29,245,235,121,203,142, 25,187,253,218,
- 2, 23,214, 83, 74, 75,158,106, 39, 0,150, 1, 84, 10, 49, 84,114, 17,156, 21, 98,148,205,220,250,151,184,250,225,179,166,253,
- 70,247,171, 55, 99,222,150,184,159,103,174,185,115, 1, 64,124,229,249, 78, 85,217,233,226, 19,242,182,187,151,110, 97,255, 81,
-115,157, 19,243, 25,136,237,128,167,182, 30,249, 98,206, 92, 23,185,148,129, 66, 76, 93,110,197, 61,122,123,236,216, 79,122, 43,
-181,141,122, 27,211,239, 94,127, 86, 30,153, 76, 38,217,176, 97,195,196,102,179,217,250,254,164,249,237, 18, 83,178,186,125,253,
-197,100, 89,109,157, 26, 28, 79,113,251, 94, 74,253, 57, 95, 47,242, 61,248,251,165,200, 33,221,155, 28,245,241,241,113, 51,153,
- 76,124, 77,242,189,176,176,104,235,150,221,199,166, 44, 91,188, 0,137, 89, 6,108,217,182, 19, 28,199,111,124,182, 40,251, 35,
-231,156, 57,115,188, 67, 66, 66, 36, 49, 49, 49, 89,148, 82,211, 19,161, 93,244, 69, 86,216, 56, 30, 4,128,167,155, 12,110, 78,
- 82,176, 12, 1, 67, 72,181,249, 14,194,143,232,223,163, 29,164, 98, 22, 9,137,201,104,213,188, 41,188,106,185, 35,238,193, 35,
-100,102,101,101, 49,132,121,175, 78,183,217,243,109,165,230,153,233,103, 22,172,127,150,157,132, 1, 60,157, 37,248,102,103, 34,
- 20, 82, 17, 20, 82, 22, 10, 89,217,191, 4,196, 65, 65,250,103, 59, 85,222, 13, 63,107, 26,220,108,206, 7, 31,188,207,180, 13,
-111, 67, 89, 86,132,172, 66, 27, 97, 8,240,201,216, 49,152,240,241, 40, 77, 98, 82,234,180,149,171,215, 76,113,210, 52,154, 95,
-146,117,247,107, 71,242,168,150,179, 4,179,183, 36, 64, 33, 43,179, 51,244, 21, 39,135,219,135, 39, 57,181, 77,123, 29, 58,153,
- 45, 14, 44, 62,104,190,242,224,254,245,111,175,222, 74,138,162,148,230,171, 67, 6,192, 98,167, 40, 49,217, 16,147,108, 7,111,
- 22, 99, 64,143, 86,104,234,230, 25,176,108,227,201,117,132, 16, 77, 69,253,124,146, 51, 53,238, 98, 75,247, 22, 67, 92,168, 65,
-121,107,193,238, 68,207, 58, 26, 23,120,187, 59,195, 75, 91, 11,141, 26, 5,194, 93, 37,134,139,130,133, 66,202, 50, 29,122, 12,
- 65,247,238, 61, 77, 28,111,207,174, 73,249, 36,148,140, 28,212,171,253, 70, 2, 72, 24, 86,146,238, 83,167,129, 95,235, 30, 31,
-200, 91,118, 29, 1,155,197,252,153,147,119,208,233,146,204,216, 83,213,113,186,121,105,223, 29,249,254, 40, 73, 61,141, 12, 39,
- 78, 95,180, 79,159, 49,227,118, 97, 73,254,162,146,140, 7,177,199, 79, 28,245,118,117,247,152, 49,125,214,220,176, 78,225,161,
-108,151,222,111, 73, 34, 35,143, 14, 6, 48,161, 58, 59, 9, 33,140, 66,221, 96,100,131, 70, 77, 39,125, 52,235,199, 58,105,185,
- 22,184,107, 3,112,235,122, 20, 34,119,124,127,163,180,164,112,217,209,131,191, 77,250,226,155,229, 77,122,247,127, 19, 7,246,
-108,159, 64, 8, 89, 67,203,240,152,211,163, 65,135, 46, 77,234,132,172,247,110,168,246,168,204,207, 83, 22,115,230, 47,135,185,
- 36, 31,117,181,110,222,206,141,235, 39, 81,134,128,242,128, 94,159,105,241, 12,236, 48, 40,231,222,233, 83, 53,105,231,107, 10,
-129,243,127,147,179, 26,180, 2,224, 5, 64, 15,224,234, 19,215, 40,255,142, 42,174,115,202,187,224, 90, 0, 44,229, 78,139, 10,
- 84, 92, 63,237,126, 69,252, 88, 0,141,203, 57, 57, 0, 87, 0,228, 87, 43,176,202,181, 6,169, 84,121,255,112,253,199, 55, 92,
-155,206, 75,227, 13,142, 38,253,161,107,168,211,122,104,206,196, 81, 67, 20, 62,161,131,245, 25,215,119, 58,252,182,171,240, 13,
-208,186,213,118, 57, 52,238,147,207, 93, 63,126,175,175,211,221, 20, 99,113,108,146,177, 8, 10, 10,119,191, 90,162,144,238, 94,
- 92,246,175, 11,103,184,234,154, 20, 20,166,221,250,173, 42, 14,181,139, 71,172,239,171,239,231, 91,140,134, 47,115, 98,118, 68,
-150,207, 11,250,135,111,216,144,217, 0,144,122,113,199, 99,129,162, 14, 29,248,170, 76,230, 54, 71,219,242,157, 90, 0,154, 87,
-103, 95, 94,137, 21, 28, 87,214, 31, 51, 12,129,193,204, 65, 46, 97,114, 2,115, 23, 60, 22, 87,231,233,135,239,217,232,118, 73,
-101,113, 85,117,163, 8,228, 21,219,160,146,139,224, 36, 23,193, 73, 33, 2, 83,174,176, 8, 33,170,239, 39, 53,237,251,209,192,
-250, 51,230,111,190,183, 97,198,234,216, 11, 0,238, 81, 74, 11,158,197,233,162,105,212, 70,234,234,185,248,131,207,151,168,206,
-221, 51, 64,235, 33, 69, 72, 29, 23,184, 42,165, 72,203, 43,155,211,159,158,107,134,217,234,140, 1, 31,206,113, 57,188, 99,197,
- 25,119,223,166, 27,243, 83,111,142,171,238,217,119, 29, 60,243,202,163,228,204,110,191,254,180, 80,150,103, 4,146,242,120,228,
- 21, 91, 96, 97,221, 49,243,139,175,100, 83,167, 78,233,129,210,220,180, 6,117, 60, 50,106, 92, 49,137,113,209,142,221, 71,255,
- 17,210,162, 61,115,234,228, 73,220,140, 58,187, 67,127,123, 79,141,134, 7,107,215,174,109, 95,190,124,185,235,210,165, 75, 59,
-184,187,187,167,228,231,231,199,150,167,165,175, 87,157,144,220,125,135, 78,186,180,105, 26, 38, 82,200,196,112,119,146,192,223,
- 91,137, 59,215, 78, 89, 24,144,223, 29,176, 80,231,163,174, 5,142, 2,250,156, 60,116,239, 20, 14,169,152, 69, 70, 70, 38, 2,
- 3,234,249,116,239,244,154, 15, 15,130,149,107,215,126, 12, 96,253, 51,243, 29, 12, 88,150, 64, 41, 19,225,198,209, 53,133,165,
-198, 34, 43, 41, 31, 34,228, 41,151,246,220, 77, 13, 79,222,137,220,187,153,201, 40,176,227,126,102, 41, 73,205, 53,128, 1,133,
-151,171, 8, 60, 39, 66, 81, 65, 54,217,186,109, 43,174, 71, 93, 98, 8, 97,222, 3,240,181, 67, 47, 81, 12, 32,151,178,144, 75,
- 89, 40, 36, 44, 74, 74,203,180,179, 58,100,192,102, 10, 20,138, 88, 81, 73,198,141,157,211, 29,170,223, 74,183, 38,155,214, 44,
-192,209,179,209,237, 78,197,111,108,174, 9,110,178,170,118,200,219, 75, 1,192,106,231, 97, 44, 41,132,202,150,132,118,117,115,
- 80, 75,201,225, 94,190, 22, 55, 83, 69,170,234,134,179,242,163,119, 20,105,130,250, 77,184,113,238,208,118, 81,199, 65, 40, 48,
-112, 72,146, 89,160,148,137,202, 63, 44,238,220,188,140,204, 34,254,156,179, 69,217, 47, 41,254,112,141, 92,164, 37, 89,177, 39,
- 1,248,254,203, 67, 92,223, 51, 99,229,103,107,135, 76,252,190, 75,171,238,239,147,251, 87,127,255, 28,192,169,106, 61, 88,110,
- 30,162,135, 89, 28, 18, 18, 31,241,173,219,132,137, 46,157, 59, 17,250,251,201, 11, 27, 55,111,217, 82,218,235,245,247,228,157,
-219, 54, 99, 83,114, 45, 88,190,235, 14,141,201,160, 68,170,170, 37,118,192, 99,197,120,213,111,245,211,134, 13, 91, 7, 7, 5,
-248, 33,171,192,134,244,124, 43,206, 68, 63,192,198, 53, 83, 11, 11,178, 31,142,132,165,196,192,131, 43, 60,126,116,223,222, 49,
-227,167, 34, 40, 36,180, 78, 73,186,193, 25,192, 31,231, 30,242,252,136,175,191,254,206, 67, 84, 73,147,169, 0, 0, 32, 0, 73,
- 68, 65, 84,165, 82,253,233,119,244, 89,233, 48,148, 24, 32, 85,186, 64,233, 82, 11,118, 59, 7, 27, 71, 81, 92, 92, 44,157, 54,
-254,157, 15, 29,121,126, 1, 2,106,224,137,117, 68,135,120, 17, 66, 14, 80, 74,251, 0,232, 2, 64, 90,233, 26,132,144, 3,229,
-194,239, 15,215, 83,167, 78,157, 62,111,222,188,152,138,176, 21,247, 43,194, 62,235,126,165,248,181,166, 77,155, 22, 50,127,254,
-252,111,194,194,194,182, 95,184,112,225,145, 67, 2,171,242,195,144, 74,111,247,127, 26, 54,105,214,183, 37,120, 17,235,235,229,
-132, 87,234,250,193, 77, 57, 92,161,109,254,166, 94, 36, 98,153,159,151, 78,147, 39, 22, 72, 32, 98, 68,198,154,136, 43, 25,235,
-114,116,213,218,141, 78,109,154,188, 34, 91,180, 59, 53, 33, 53,175,212,194,219,109,140,217, 88, 34,201,207,188, 47, 46,202, 78,
-116,118,241,110,200,154,139,244, 51, 1, 84, 41,176,164, 82, 41,179,108,193,151, 65,167, 78,159,223,176,223,201,165,208, 39,244,
-157,197,172,204,186,177, 66, 88, 17,242, 37,163,105,118,111,160, 84,174,156,210,176, 73, 7, 31,109, 64,107,215,203,135, 55,196,
- 59, 32,207,217, 41,211,231, 60, 22, 87, 54, 83, 30,190, 91,179,191,184,179,199,233, 69, 21,226,106,155,126,232,219,221,219, 7,
-104, 14,239,151,228, 85, 91,128, 96, 79, 27,246,193, 39, 18,194, 0, 12, 72,217, 60, 46,202,103, 19, 66,148,203, 63,105,214,103,
-236,235,254, 51,191,221,114,111,227,244,213, 49, 21,226,170,218,204, 43,102, 21,183, 93, 74, 77, 89,137,241,183,235,140,239,213,
- 86, 84,199,219, 21, 10,169, 8, 5, 6, 59, 10,140, 28, 82,245,102, 60,204, 52,224,246, 67, 61, 56, 83, 17,222, 25,251, 79,230,
-231,239,198,119,115, 36,127, 14,158,136,238,250,221, 55,211,101,121, 6, 32,167,132, 67,122,158, 25,105, 57, 38,164,230,152,160,
-144, 0, 97, 93,223,146,157, 59,244,115,247, 6,117, 60,126,170,105,101,202,186,117,212,168, 14, 25,112, 57, 45, 67, 31, 86, 63,
- 32, 8,204,161,189,141,106, 53, 29,162,205,189,185, 35,221, 81,142,195,135, 15,231,248,250,250,170, 87,173, 90,165, 95,188,120,
-113, 72,237,218,181, 27,165,164,164,236,243,244,244, 28,254,253,130, 89,199,190, 88,240,147,167,197, 90,234, 18, 28, 26,206,138,
-196, 4, 49, 87,142,149, 30,217,245, 99, 6, 45, 50,206,172,142, 91, 42,147,213,146,203,197,176,217,120,176, 44, 11, 95, 31, 53,
-108, 28, 69,137,193,128,129,189,187, 33,230,238,125,156,191, 20,101,231,108,246,229,213, 55, 28,128,136, 97,160,148,137, 80,106,
- 44,178, 38, 93,218, 88,247, 37,181, 73,148,167, 20,209, 15,141, 48,150,218, 97,181,241,240,215, 72,145,151,157,140,117,223,111,
-196,205,107, 87,209,174,115, 31, 44, 88,185, 5,227, 63, 28,226,240,170, 79,134,144,114,113, 37,130, 92,202,162,212, 86,214, 36,
- 44,155, 55,149, 13, 14,106,140,142,125,134, 57,236,210,114,118, 82,160,216,100,133,202,205, 7,209,199, 55, 42, 15, 30,191, 50,
-249,187,229, 63,125, 82, 90, 76,145,122,239, 34,194,220,115, 81,223,211,130, 43,201,206, 56,154, 92, 7, 1,254,245,192,136,246,
- 56, 86,134, 98,247,237, 87, 55, 27,184,175,168,113,104, 63,119,255, 64,200, 36, 44,100, 18, 6, 82, 9,131,135,247, 98,240,203,
-230, 13,119,237,114,229,144,248, 91,123, 44, 47,154,208, 37,153,241, 57,114, 77,224,164, 7,215,142,198,182,237,247, 49,220,188,
-235, 52,169, 73,252,121,115,103,148,114,118,155,237,237,225, 99,148,125,123,190, 38, 10,107, 27,174,138,186,151,143,111,127, 62,
-201,157,139,220,156, 33,145,185, 42,116,225,163, 61, 28, 17, 87, 30,117, 66,215,110,218,252,235,224,122,181,189,241,251,149, 4,
- 92,139, 47,128,139,179, 43, 68, 42, 31, 4,118, 24,225,122, 59,114,233, 0, 99, 78,201, 86,177, 88,254, 94,203, 54, 17,160,148,
-226,126,108,108,126, 65,129,211,159,218,102, 70,196,172,157, 53,243, 31,221,213, 94,154,202,111,238,240,175, 31,128, 94,253, 6,
-227,248,169, 29,120, 20,127, 31, 60,165,224, 41, 64, 41, 69,110,142, 62, 15, 12,243,179, 32, 9, 4,252, 85, 34,235, 89, 58,164,
- 66, 56, 61, 41,136,158, 20, 90, 21,223, 43,194,205,155, 55,175,207, 19,222,183, 62, 79,241,202,253, 41, 92, 69,252,249,243,231,
-127, 83,233,239, 14,105, 29, 81, 57, 9,121,214,195,169,155,245, 15,147,138,157,246,253,176,240, 19, 38,187,208, 6,133,148,133,
-170,118, 61, 52, 24,249,137,242,237,118, 94, 72, 47,117,199,254, 3, 63, 21,219,168,253,176,163,226, 74,202, 56, 29, 89,180,226,
- 39, 73,253,186, 90, 50,103, 91, 98,188,217, 86, 54, 77,194, 82,106, 22, 37,221,140, 84,166,198, 30, 55,195,110,219,196, 74,101,
- 45, 64,121,245,179,248,234,120,187, 33,188, 67, 23,101,135, 14, 29,148, 71, 79,158,159,123,240,224,193,143, 81,190, 67,189, 79,
-139,132,227, 45,218,246, 10,210,250, 55, 81, 22, 91, 8,164, 98,198,209,220,230,190,251,102, 14,106,171,229, 48, 89,120,252,115,
-245,161,226, 14, 78,191,127, 83, 89, 92,105,124, 27,248, 74,100,170, 63, 12,245, 61, 13,105, 87,183,118,170,162,160, 40,151,124,
- 18,210,119,220, 16,255,153,223,109,185,183,105,218,170,152,243, 0,226, 28, 17, 87, 0, 64,211,163, 77,174,181, 67, 58,236,219,
-176,112,230,161,109,203, 58, 50,160, 30,141, 2, 3, 68, 93,187,118,147, 53,107, 21, 46,211, 23, 82,220, 73,208,195, 92,146,143,
-206, 97,141, 16,185,123, 51,151,149,153,226,208, 28, 15,125,126,145,119, 29,157, 6, 9, 57, 60,146,245,101,194, 42, 85,111, 68,
- 90,174, 9,249, 37, 22,180,170,167,129,193, 96,241,126,238,202, 68,201,129,139, 23, 47,134,189,218,190, 43, 94,127,123,116,208,
-129, 93,155,175,104,130, 7,125,150, 21,179,235, 87, 71,226,239,216,177,131,211,106,181,241, 89, 89, 89, 17, 11, 22, 44,208, 7,
- 6, 6,250,205,153, 51,103,186, 86,171,245, 24,242,250,235, 41,125,122,247,222,242,209,167,179, 59,172,252,242,167, 87,192,176,
- 89,224,237,135,244, 38,110, 46,213,199,154,170,227,118, 82,202, 60,196, 44, 3,134, 16,184, 57,171, 32,147,138,192,218,121,240,
- 28, 7, 55, 23, 37, 98, 98,239, 34,251,206,249,209, 5,143,142,236, 0, 22, 86, 43, 88, 88, 22, 80,201, 69,143,203,137,186,233,
-235,137,168, 98, 50, 57, 0, 16,150,213,103,221,248,173,174, 3, 9,200,219, 57, 10,179,149, 67,169,149,131,152,165, 40, 46,204,
-198, 23,211, 38,225,181, 30, 3, 49,119,216,120, 20,154, 89, 92, 79,182,192,110,179, 17, 71,243, 37, 45,207,130,158,205, 61,144,
- 83,108, 71,190,129,131, 68, 84, 86, 95, 14, 94,203, 69,188,161,102, 11,222,120,158,194,211,195, 21,202, 92,160,215,167,187,241,
- 90,115, 95,156,220,187, 70,116,254,202, 45,252,243,219,239,161,238,255, 42,214,223,168, 15,153,139, 31,100,174, 50,216,104,205,
-182,229,163, 54,209,167,215, 79,239,238, 84,223,127,138, 74, 42,150,148,121, 25, 83, 30, 97,243,134, 31,211,236, 98,244,205,187,
-188,165,248,101, 53,254, 98,134,213,185,122,120, 65, 38,102, 64,237, 22, 67, 77,227,103,166,103, 53, 89, 48,119,202,240,179,151,
- 6, 78,111,221,115,140,244,212,238,101,165,177, 87, 14,140, 53,100, 56,237,242,143,240,140, 2,224, 81, 77,167, 66, 92,125, 66,
-126, 92,189,126,203,155, 62,222,106,236, 62,126, 19, 27,214,253, 0, 93,112,119,196, 95, 59, 10,191, 22,253,225, 84,175, 19,196,
-206, 59, 70,170, 24,113,240,168,137, 51,250, 55,111, 25,142,139,231, 78, 32, 91,159,186,142,210,184, 63,173, 70,206,185,119,250,
- 20,105,209, 66,237,246, 48,237,241, 28, 44,134,181,250,240, 60,162, 59, 91, 41, 30,197,223,199,205,107,151, 90,240,156,228,177,
-151,186,192,173,192, 68, 31, 8,115,176, 4,188,124, 84,167, 67,170,243, 58,213, 80,204, 29,168, 74,100, 61,121,159, 16,114, 96,
-234,212,169,211, 1,208,169, 83,167, 78,175,184,158, 55,111,158, 9, 64,181, 14, 1, 81,229,135,171, 42,128,186, 89,255, 48,169,
- 72,185,111,195,242, 25,138,109, 87, 56, 44, 56, 28,141,208, 64, 13,196, 98, 22, 42,185, 55,142,199, 20,226,194,153,125, 37,209,
- 81,151,205,172,152,155,237,136,184,146, 16,197,161,249, 75, 87, 21, 4, 5,248, 73, 87, 28,202,188, 97,182,241,132, 82, 34, 38,
-148,176,148,242, 46,105,177, 39, 26, 23,145,156, 48,154,230,200, 10, 56,194, 91,237, 20,137,217, 22, 16, 2,180,141,232, 32, 63,
-122,244,119,197,191, 58, 44,177,123,237,134, 45,148,119,146, 13,144,136, 24,168,221,164,112,116, 57,141,151,155, 20,243,118, 38,
- 66, 44, 98,244, 29,156,126, 95, 92, 89, 92,121,251, 54,240,117,118,113, 1,207, 19, 16, 66,158, 39,131,149,139, 39,132,244,153,
- 56, 36, 96,230,226,109, 15, 54, 79, 93, 25,115,206, 81,207, 85,101, 20, 38,223, 46, 0,240, 89,197,181,107,237, 16,183,171, 81,
-151,187,184,186,171, 23,180,127, 99,102,173,146, 66, 11,186,132,151,137,171,155,103,127,125,203,152,121, 55,210, 81,110,171,157,
- 71, 82,150, 17, 9,153,198,199,222,171,212, 28, 19, 20, 82, 22,102, 11,247, 66,149,201,169,180,244,199,200, 67,123,123,218, 56,
- 68, 52,110,209, 1,175,143,156,226,118,108,239,134,159, 52, 65,253,204, 89,177,251,246, 59,194,145,158,158,110,242,240,240,184,
- 84, 84, 84,212,119,203,150, 45,249,173, 90,181, 98,221,220,220,242, 0,200,174, 95,187, 38, 59,180,243,231,172,162,162,162,241,
- 86,171, 53,186,218,188,246, 10, 82,149,138,109,111, 82, 59, 59, 76, 19,210, 83,148, 95, 80, 54,154,146,152,154, 1,147,193, 8,
- 27,199, 35, 61, 35, 27,165,165,102, 20, 22, 21,161, 93,235,186,223,159,182, 4,207,112,214, 52,156, 94,156, 21,119,224, 89, 30,
- 44, 67, 41, 7,165, 76,244,175,114,194,115, 94,171, 86,175,134,135, 83,217,136, 16,203, 18,228,149,216,144,145,103,197,156,169,
-227, 29, 29, 98,167,118, 59, 69,169,149,131,217,202,161,208,198,193,203,183, 22,190, 91,249, 11, 18,245,102,236,141, 42,196,195,
- 12, 35, 66,235, 59, 3,188, 99, 5,148,101,197,250,129,111,188,247,167,223,151, 43,157,204, 18, 86, 4,149,188, 76, 0,169, 27,
-247, 31, 77, 8, 83,196,138,197,165,233, 55,126,221,251,116, 11, 1,169, 84, 10, 95,111, 15, 88,109, 28,142, 92, 78, 66,239,206,
-173,241,106,235, 22, 32, 34, 9,162,138, 66, 33,115,113, 2,101, 9,236, 60,133,197, 86,179, 50,165,143,221,145,229, 29, 50, 96,
-202,141,139, 71,127,232,214,123, 16,242,115, 50,176,105,237,138, 34, 27,199,245,206,185,177, 43,243,101, 53,252, 78,154, 38, 94,
- 74, 23,215,239, 90,132,119,133,169, 48, 19,250,180,132,189, 53,229, 48,100,221, 40, 0,176,202,110,181, 76,103, 24, 2, 98,183,
-192,144,241, 96, 15, 0, 30, 8,173, 54,190,202, 59,112,212,215, 75, 86, 13,245,243,243, 67,228,185, 59,152, 55, 99,204, 13,165,
-210,185,174,198,195,213,149, 15,108,134,132,219,191,195,163,110, 1, 92, 53, 1,186,222, 93, 70,234,122,244, 26,136,152,155,209,
- 88,190,240,171,203, 6, 70,185,224,169, 89, 84, 54, 97,253,241,208,161,135,127,135,175,194,218,119,133,197,102, 71,235,182, 93,
-112, 35,234,242,152,252, 71,199, 38, 10,221,191,128,127,151,200,114, 48, 92,159, 23,252,157, 62, 40,155,171,229,229,168, 7,107,
-222,188,121, 49,243,230,205,171,210, 35, 86,173,192,122,150,184,250,121,217,116,197,150,203,118,220, 77, 44, 64,183,150, 62,200,
- 72, 79,195,129,109,223,243,160,128, 84, 46,205,178,219,249,163,165, 12,102,228, 95,217, 93, 84,157,184, 18, 83,217,254,185, 11,
-150,222, 9,109, 28,192,174,140,204,190, 96,180,112,148,130,136, 8, 32,230, 41, 17,129,145,171,120,222,214, 16,156,135,163,174,
- 38,106,231,105,121, 98, 0, 86,142,130,130,255, 67, 38,217,236, 60, 56, 30,224, 41, 80, 17,182,122, 1, 84,182,210, 75, 33, 97,
-115, 2,243,202,230, 92,237,172, 16, 87,126, 13,124,157,157, 93, 32,151,176,160,229, 97,107, 40,174, 20,139,199,134,244,249,228,
-205,128, 89, 75,126,185,191,101,242,138,219,231,188, 2,123,169, 69,114, 55, 15,109,232,176,242,222, 14, 0,199,155,210,175,111,
- 61, 94, 19,238,114,193,181, 67,229, 29, 88, 55, 35, 62,106,118,215, 94,111,225,240,238, 77, 21,226,234,144,163, 60,158,238, 46,
-153, 81, 49,137,245,173,212, 13,137,153, 6,164,230,152,144, 85, 80,166,119,189, 92, 37, 72, 77, 73,130, 74, 37,117,184, 19,243,
- 14, 25, 56,150, 18,140, 0,197,214,172,219,187,151,196,199, 31,182,144, 22,163,251, 28, 63,188,107,254,163,135,247,199,180,233,
- 60, 4,161, 29, 95, 71,228,150, 5, 83, 1,236,119,148, 55, 47, 47,175,216,221,221,253,236,103,159,125,214,111,253,250,245,121,
- 0, 68, 69, 69, 69,202,129, 3, 7,250,230,230,230, 78,162,148, 38, 57, 36, 38, 69,248,121,236,152,177, 29, 7,246,239, 75,108,
- 68, 98,217,251,251, 37,145,141,227,200,252,127,188,193, 69, 93,187,194,216, 56,142,124, 48,184, 29,127,229,210,121,102,218,168,
- 62,220,107,175, 6, 35,250,110,162,247,200,161,131,230, 2,120,250, 91, 20,229,211,222, 30, 57,177,172,140,240,252,227, 57, 87,
- 30, 78, 98,140, 93,125, 23,170,199,243,134, 68,232, 18,234, 81,163, 54,194,198,241, 48, 91, 56,152, 45, 28,140, 22, 59, 78,221,
-206, 71,124,122, 9, 10,140, 54,148, 90,203,196,138,213,202, 3,112,172,209,170,188, 21,131,186,201,128, 77, 43,230, 77,103, 15,
- 92,203,133,132,101,225,172,148,240,114,105,153, 32, 92,185,120,166, 40,176, 81, 99,116,234,241,182,236,217, 30, 44, 30,103,174,
-222,199,247, 59,111, 96,233,244, 33, 16, 49, 4,227,230,254,138,119,186, 55, 4,207, 83,100,220,143,130, 79,195, 87, 33,147,202,
-203,188,215, 86,222,145,186,211, 10,229, 43,107, 41,165,209,153,183,247,108,240,109,216,254,219, 71,215, 15,168,204,102, 43,111,
- 21,169,250,233,111,236,143, 47, 15, 27, 4, 64, 2,160,148, 82,122,183,166,141,176,139,111,144, 59,207,217,135,212,246, 15,250,
-252,253,137, 95,169,149,174,158,248,109,227,114, 10, 49,179,173, 70, 25,197, 89, 25,148,205,233, 42,228,203,219, 31,194, 16,148,
-219,230,193,115, 86,182, 58,239,149, 95, 72,167, 73, 13, 27, 5,225, 82, 76, 42,190,157,245,209, 13,115,118,194, 8,139,179,251,
- 72,107, 73,198,132,198, 33,161,208,104, 60,145,149,145,129, 14,125,187,163, 91,247, 30,136,185, 25,141,175,191,248,236, 50, 99,
- 44,237,231,136,215, 22, 0,220, 27,182, 15,110, 18,218,114,100,253, 70, 77,161,207,205, 67,189,192, 38, 8, 12, 9, 29,233,222,
-176,253,186,252,184, 51, 49, 16, 32,224, 63, 7, 7, 1,244,126, 82, 8, 61, 41,146, 42,121,160,170,194,213,202, 28, 21,225,159,
- 38,224, 42,207,201, 2,224,208,246, 71,162, 39, 21, 99,197,181,186, 89,255, 48,137, 88,177,239,167, 37,211, 20,155, 47,219,113,
- 47,169, 16,221, 90,249, 32, 39, 39, 23, 71,118,174, 53, 16,198,222, 59,243,198,254, 40, 71, 83, 67,225, 27,160, 21,113,226,221,
- 51,190,250, 42,178, 93,155,150,182, 85, 71, 50,206, 20,219,192,243, 34,145,152, 45,229, 69,132,165, 34,202, 80,177, 76,161, 20,
-121,189,210,218, 21, 15, 47,237, 85,169,131, 39, 27,245,181,238, 82,122,234,153,155,109,218, 43,189,248,114, 28, 69,101, 23, 21,
- 5, 96,231, 40,104,197,178, 99,187, 99, 2,139, 33,192,166,227, 25,250,224,162,133,143,197,213,150,156, 50,113,229,226,236, 2,
-153,164,108, 34, 48,117,120, 45,216,191,196,213,130,177, 33,125, 63,121, 59, 96,214,178, 29,241, 91, 62, 91,126,251, 44,128,251,
- 34,185,155,199, 79,235, 22,203,180,181,228, 96, 0, 20, 24, 56,188, 53,252,249, 94, 28,157, 52, 1,111,180,104,215,103,102,167,
-222, 67,112,232,183,159,184, 91,231,119,213, 72, 92, 1, 64,159, 78, 45,126,159,247,221, 50,223,207,166,207,150, 73,197, 20,197,
- 38, 27,100, 18, 6,106, 87, 41, 60,148, 12,206, 70,238, 42,109, 23,164, 62,226, 8,151, 71,155,119,156,253,107,215,158, 55,109,
-198, 52,246,167,181,107,255,169,109,210,239,112,250,173,125,247,105,244,143, 54, 0,159,169, 67, 6, 61,208,249, 94, 93, 92, 59,
-184, 61,220, 60,117, 77, 60, 3,251, 57,229,220,219, 87,226,168,173,249,249,249, 41,117,235,214,125,176, 98,197,138, 70,227,198,
-141, 43, 29, 55,110,156,175,201,100,218,225,168,184, 2,128, 86, 45,154,134, 78, 24, 55, 90, 44, 21, 49, 16,139, 25,212,243,237,
-109,183,218,202,246,254,105,211,164,193,227, 18,246, 58,128,219,143,178, 49,245,251,227, 40, 40, 41,133, 72,196, 74,158,197,155,
-124,249, 41,251, 92, 17,252, 65, 92, 57,201, 69, 48,149,214,100,171, 33, 66,173,118, 30, 54, 59,143, 82, 43,135, 82,139, 29, 38,
- 11, 15,147,133,127, 92,252, 89,134,192, 86, 86,222,107,236, 98,165, 20, 69,245, 26, 54, 68,253,146, 66, 40,229, 12, 20, 82, 49,
- 20,210,178,119,158, 35,215,242,144,104, 41,168,150,131,231,121, 88,203,189, 82,165, 86, 14, 42, 89,217,251,156,197, 86,182, 42,
- 55,237,238,169,173, 89,241, 87,222,244, 14,108,205,250, 6,134,163, 84,230,144,153,110,148,210,163,132,144, 46,132,144,206, 0,
-104,237,198,109,249,189,187,119,161, 79,239, 62,198,148,155, 7, 20,132,144,118,229, 85, 31,148,210,115,132,144,106,247,192,114,
-246,105, 28,193, 83,108, 34,128, 2,148,191,163,241,169,173,108,255, 90,223,134, 17,157,122,177,117,253, 3, 97,177,113,216,188,
-110, 41,189,116,114,215,100, 67,198,189,155, 53, 73, 75,109,157,134,200, 72, 73, 26,199, 67,244, 29,202,132, 21,104,217, 41,101,
- 6, 39,239, 6,157, 21,238,126,207,244, 90,186,185, 53,119,110,210,170,163,111, 82,142, 21,135, 15, 31,134,177, 40,251, 43,139,
-165,216,136, 82,186,225,196,158, 31,223,123, 99,244,151,206,173, 91,182,128,155,139, 10,181,220, 92,112, 45,234, 2, 22,204,157,
-126,153, 49,150,246,211,235, 99, 29, 30,206,100, 40,243,207,190, 67, 70, 50,121,185,249, 88,242,205,231, 24, 51,249, 27,116,233,
-247, 46,115,255,238,141,127, 2,232, 47,244,233, 2,254, 93,158,171,167,120,178,244,149, 60, 79,127,186,174, 36,138,170,186, 38,
-229,215,150,167,112, 88,158, 16, 85,150, 39,238, 91,158,224,187,241, 66, 30, 44, 22,226,253,235, 23, 79,149,239,185,205,226, 81,
- 90, 62,186,181,242, 65,182, 94,143,131, 91, 87, 24,108,188,121, 64,118, 13,196, 21, 0,136,108,232, 89,219,215,123,202,199,111,
-246, 35, 59,110,229, 70,167, 51, 74, 78, 38, 23, 49,172,168,132, 21,203,141, 76,137, 73,202,138, 40,203, 80,171,149,109,214,101,
-210,165,107, 54, 67,211,220,228,216, 25, 78,154,156,186, 46, 62,141,182, 21,101,220, 93, 90, 21, 47,199,217,145,149,147, 7, 31,
-119, 37,178, 10,108,176,113,180,138, 48, 20,132, 16, 40,101, 44,140,134, 34,240, 92,245, 83, 8,148,206,154, 3,193, 69, 11, 19,
- 42,196,213,214,156,178, 97,193,202,226, 74, 46, 97,193, 16,226,176, 7,139, 16,162,248,110, 92, 80,159,207,134,150,137,171, 73,
- 75,111,158, 3,112,159, 82,154,171, 13, 29, 6, 79,103, 9,198,126, 31, 11,149, 74, 2,119,165, 4,162,231, 56,200,200, 73, 19,
-240, 70,243,118,125,214,117, 25, 56,134,217,187,225, 59,251,221,155,231,135,214, 68, 92,113, 28, 71,108, 54, 27, 58,181,109,146,
-118, 45, 54,241,204,220, 47,102,181,111,221,229, 77, 89,187,134,222, 48, 90,236, 72, 75, 78,193,217, 35, 59, 74,125,220,197,167,
- 27,212,241,200,176,217,108,213,118,224,249,126, 86, 99,105,129,217, 44, 18, 73, 84,131, 7,246, 34, 81,209,209, 91, 52,193, 3,
-118, 3, 36, 6,132, 15, 2, 65,255,102, 65,254,200, 7,133,165,212,100, 86,139,164, 53,158,152,156,148,148,116, 98,249,242,229,
-193, 98,177, 88, 19, 25, 25,201, 27, 12,134,223,106, 18,223,110,183, 83,134, 16, 18, 29, 95, 98,117,115, 18,147,122, 26,153, 72,
-161, 98, 96,178,208,199, 66,235,246,163,108,108, 59, 28,131,248,212, 2,104, 60,228,140,143, 59, 3,187,157,203,127,158, 6,133,
-101, 24, 40,101, 98,168,228, 44, 84, 50, 17, 20, 50, 17, 44, 54,199, 55, 10, 39,160, 9,103, 47, 94, 11,106,215, 40, 8,209, 15,
- 13,184,147, 98,129,217,202,129,130,130,148,123, 25, 93, 21, 98,100,103, 36,129,167, 92, 82, 77,237, 19,177,162,146,238,253,254,
- 60,161, 93,169,114,178, 73,101, 12, 84, 18, 73,181, 28, 54,142, 67,219, 22, 13,224,174,169,141,169, 11,119, 1, 0, 86,204,124,
- 3,106, 23, 22,219,126,166,200,190,189,119,148, 58,120,192,183, 41,183, 79, 77, 77,189,121,252,141,206,109,188, 89,141, 60,223,
-129,106, 68, 6, 0,224, 1, 28,162,148,218,253, 26,133, 63,236,209,189,135,206,206,115, 25,148,210, 51,229,129,164, 0,218, 19,
- 66,186,162,154,125,228,202, 26, 99,242, 83,244,213, 43, 94, 86, 59,197,241,243, 55, 90, 71,188, 26, 10,139,141,194, 80,106,197,
-181,232, 27,216,251,219,102,227,221,219, 87, 71, 24, 51,239, 57, 92,151,178, 82, 18,143,165, 38,222,239, 61,108,204,116, 89,243,
-176,206, 31,238,219,190,234, 13, 90,238,194, 34, 4,168,251,234,176, 43,222, 77, 6, 52, 20, 57,121, 51,176, 22, 80, 67,118,194,
-197,170,120, 10, 10,156,140,247, 98,175, 23, 60,202,180,184,137,220, 26, 64, 44,113,122,159,184,250,254,192,202,148,211,117,175,
-190,231,124,234,252, 37,196, 94, 63, 7,173,167, 10, 9, 15,239, 27, 99,111, 70,173, 53, 64,242, 13,213,199, 58,188,232,200, 43,
-168,163, 38,160, 97,147, 78,206,110, 94,216,181,109, 45, 10,243,115,151,156,136,220, 53,169,115,223,225,240,243, 15,234,228, 21,
-212, 81,163,143, 61,149, 5, 1, 2,254,255,112,181,154,235,151,193,249, 82, 33,122,122, 71,107,151,123,122,215,193,111, 31, 15,
-199,236,121,223,227, 86, 92, 18, 14,111,255,161, 92, 92,237,189,232,160,160,120,124,218,118,113,214,253,199,123, 89,141, 12,175,
-133,145,143,223, 41, 61,171,142, 60, 99,115, 58,128, 67,207,226, 4,128, 82, 67,209,219,147, 62,255,114,101,219, 87, 91,233,218,
-117,238,238,108,231,228,160, 79, 12,137, 80, 0, 94, 42,138, 71, 55,143, 21,232, 83,239,222,227, 77,249, 99,159,197, 73, 8,145,
-205, 30, 25,120,126,206,192,224, 57, 59,207, 91,118,156,230, 62,120,175,115,120, 3,141, 88,230, 84,222,125,145,178,255, 24, 2,
-169,148,173, 82, 93, 84,197, 57,127,108, 80,239,201, 67, 27,206, 94,190, 51,126,107,185,184,186, 71, 41,205,173, 8, 35, 97, 89,
-184,168, 36,112, 81, 74,224,174, 18, 87,203,249,167,206,207,187, 81,207,150, 21,226,106,163, 99,226,170, 10, 59,163, 6, 14, 28,
- 24,250,209, 71, 31, 73, 63,251,176,207,233,211,151, 98, 31,254, 18,249,107,215,188,220, 34,111,142,227,160, 82, 73, 51,195, 27,
-121,254, 30, 80,199, 35,237,214,173, 91,252,241,227,199, 75, 57,142,187,246, 44, 78,186, 99, 7,231,217,100,192,174,168,235,183,
-134, 55,111, 22,140,149,223, 47,106,116,255, 97, 98,163,248, 71,201,208,233,116,208,233,116, 40,178, 43,241,240,242,109, 24,139,
-115,247, 39,198,238,181,214,244,217,199,142, 29,251, 90, 65, 65,129,100,229,202,149, 61, 59,116,232,176, 71,171,213,190, 54,122,
-244,232,139, 63,254,248,163,201,145,103,143,190, 30,179,243,167,141, 91,198,188,241,122,127,137,217,206,112, 87,239, 23,219,228,
-108, 41,241,247,117, 97, 47, 68, 39,240, 27, 14,222, 70,129,153,133,191,206,133,105,228, 3,114,237,194, 46,254,244,189,155,151,
-121, 17,153, 94, 19, 59, 31,139,206,146,178, 45, 59, 84,229,251, 77,169,100, 34, 88, 57,199,242, 8, 0,196, 86,229,152,137, 99,
- 63,124, 20, 28,210, 98,236, 27,239,141,145,180, 14,168,139,171, 15,138,224,225, 36,134,183,187, 20, 57,250, 92, 68,237, 89,108,
- 47, 72,189,181,150, 17, 99, 94, 77,211,179,242, 86, 12,234,198, 3,199,172, 92, 60,157, 61,114, 45, 15, 82, 25, 3,149, 84,198,
- 43,149,108,181,118,230, 23, 20, 95, 92,184,124,109,216,187,111,245, 71,207,176,186, 56,123, 51, 13, 60, 45, 27,170,231,248, 50,
-111,157, 62,118,175,101,194, 91,245,206,143,238, 23,160, 46, 52,233, 27,204, 78,180, 94, 38,132, 48, 21, 59,135,255,169, 44, 81,
-122,132, 16,194, 2,104, 13,160, 43, 33,228, 44,165, 52,226, 9, 59,252, 0, 4, 3, 72, 40,127,129,225, 29,120,118, 98,181, 83,
- 36,100,153,112,225,194,121,152,141, 69,136,143,127,128,223, 15,239,137, 42, 46,204,221, 32,183,211, 93,198,156,123, 37,142,214,
- 35, 0, 48,241, 37,159, 45,156, 57,138,111,209,190,123,247, 94,131, 70, 74,167,124,189,206, 45, 62,254, 1,199,243,128,202,191,
-167, 84,231,175,106,204, 80, 43,205,189,187,207,146,124,109,255, 49,142, 97, 38, 87,197, 73,233, 41,187,147,119,195,181,231,207,
-159,254, 92,174,109,129, 70,189,167,247, 78,187,177,175,183,119, 80,119,120,214, 15, 71,250,141,189,184,121, 97,219,145,107, 28,
- 55, 75,206, 33,165, 68, 31,103,168,137,157, 0,192,151,114,131,131,155, 71, 48, 38,179, 5, 49,215, 46,166, 20, 60, 58, 59,251,
-142,202,121,208,171,221,134,250,213,111,252, 42,147,114,239,214, 96, 0,223,215,132,243, 69, 32,112,254,111,114,254,221, 32,122,
-250, 27,172,184,244,234,205,123,178, 94,239,127,131,232,152, 4, 28,251,109, 85,141,196,213,191, 11,185,177,187,162, 0,180,212,
-132,188,217,239,210,213,232,121, 77,154,183,241,224,249,127, 45, 71,162, 60,207,222,188,122,206,144,155, 24,157,110, 55, 27, 62,
-203,188,249,107,181,251,183,140, 30, 80,175,195,156,247,203,118,104,159,178, 91, 23, 98,231,182,177,145, 98,137,158,128,160,252,
-127, 16, 66,192, 48,101,223,109,118,155, 35,203,171,188, 63, 25, 28, 56, 98,197,174,248,173,159, 44,185,121,182,194,115,245,135,
- 78,215,104,133,139, 82, 2, 23,149, 24, 42, 23, 9,216, 26,166,133, 84, 44,255,176, 83,223,247, 29, 22, 87, 85, 65,175,215,223,
- 32,132,220, 93,180,104, 81,171, 53,107,214,212,159, 60,121,114,210,218,175, 71,255, 4, 0, 71,142,148,141, 8,222,187,119, 15,
- 43, 86,108, 55,151,150,150, 62, 48, 24, 12,151, 41,165,213,122,156, 56,177,120,218,198,181,171, 27,101,246,121,189,101, 29,255,
-134,112,243,110,136, 48, 93, 67, 20, 24,109,136, 73,201,195,195, 7,215,113,251,226,129, 91, 82, 94, 50,185, 38,246, 14, 25, 50,
-132, 85,171,213,109, 8, 33,225,205,155, 55,111,220,191,127,255,188,180,180,180,144,132,132, 4, 94, 34,145, 20,205,153, 51,231,
-218,156, 57,115,170, 29,123, 43,206,186, 51,205,201, 39, 36,114,201,210, 31,166,126,248,193,123,109,134, 12, 30, 32,182, 51,206,
-252,141, 4,179,125,233,206, 88, 18,226,175,102, 66,164, 70,114,241,212, 94, 62,246,198,229, 75, 28,143,111, 75, 50, 99,207, 62,
-111,185,205,200,183,160, 75, 51, 15,152, 74, 57,148,218, 40,172, 28, 30, 15,161, 57,130,242,243, 20,103, 42,116, 77, 86,199, 76,
-250,112,118, 72,171,136,183,218,245,124,135, 81,212,114,198,233, 3,235,105,194,245,200, 93, 34,194,127,105,200,190,159,240,226,
- 13, 41, 10,235, 7, 52, 70,162,165, 0, 46, 50, 9,148,114, 22, 42,185,184,250,178,228, 81,216,227,196,137, 51,239,252,126,252,
-204, 87, 93, 94,139,240,152, 61,178, 63,118, 28, 60, 15, 39,133, 4,148,231,240,230,107,117, 6,222,217,214,173,151,159,151, 82,
-187,235,116,202,185,113, 75,111, 79, 51, 24,172, 15,170, 59,150,165,124, 7,255,139,132,144, 70, 0,250, 18, 66,236, 0, 20, 0,
- 12, 40,219,155, 70, 1,224, 66,117,251,200,253,241, 25,233,136,176,176,214,155, 9,168, 20, 20,235,142,239,197, 33, 30,226,132,
-146,172, 91,250,231, 77, 55, 99,202,189, 12, 0,111, 59,251, 52,142,184,121,241,196,156,246, 61, 6,135,182,239, 61, 76,156,152,
- 99, 3, 47,114,130,225,225, 57,107, 98,212, 47,183,236, 22,243,156,146,204,184,211,207,226, 50, 48,202, 5,215, 15, 44,104, 23,
-208,105, 66,155, 90,245,195,225, 94,167, 5, 0,160, 48, 53, 6, 41, 87,127, 59, 80,148, 46, 30, 70,233,173,231, 94,221, 39,146,
-203,135, 54,104,220, 28,113,177, 55, 96, 50, 22,255, 66, 41,229, 61,234,183,255,229, 97,220,205,207,181,254,161, 96,164,242,161,
- 79, 19, 88, 2, 4, 8,120, 74,187,242,180, 61,253,212,205,250,135, 49, 84,188,143,231,237, 10,150, 21,153, 56,216,250,213, 84,
- 92,253,187, 85, 51, 25, 50,132,213, 36, 72, 71,137, 68,162, 78,169,151,127,126, 29, 0,188, 91,189,247, 51,203,217,206,164, 95,
-223,182,241,105, 27, 24, 62,201,217, 63, 66,219,185, 67,104,173, 58,147,150,223,190, 3, 32,182,186, 77, 68, 29,244, 12, 73, 1,
- 4, 0,112, 2,240,128, 82,154, 83, 57,188, 54,244,237,206, 44, 43, 86, 84, 12, 11,178, 0,120, 80,211,163, 75, 27,143, 59,154,
-158, 78,222, 13,219,179,172,232, 35,187,141, 91,111,200,190,123,236,133,211,147, 16,165, 84, 42, 13,243,246,246,214,206,156, 57,
- 83,113,245,234, 85,209,225,195,135,205,197,197,197,105,197,197,197,103, 41,165,198,154,112,146,142, 29, 69,234, 92,247, 65, 96,
-105, 87, 15, 47,109, 39, 15, 79,111,207,188,156,140,188, 92,125,230, 9,194,115,199,178, 37,234,157,229,243,178,106, 92,150,198,
-141, 27,215,149, 16, 18, 72, 41,173, 67, 8,121,200, 48,204,131,210,210, 82,135, 61, 88,127, 72, 71,159,144,118, 42,133,116,218,
-187,195,222,110,221,175, 95, 95,230,226,141, 36,156, 62,113,136,187,114,225,212,149, 82,139,125,126, 73,198,237,179, 47, 82,230,
- 53,205, 94, 79,164, 92,213,219, 52,136,196, 98,125,250,181, 63,158,251,231, 8,167,147,119,227,198, 32,152,206, 80,136,237,132,
-255,214,152, 17,119,237,101,213, 77,109,179, 55,250,115, 54,219,159, 38,180, 75,100,226,210,148,232,127,173, 34,124, 86,190,107,
-242, 92,223,225, 40,190, 10,239,216,203,163,206, 43,245, 17,115,108, 57, 14,253,131, 92,252,253, 90,118,244,103, 75,175,237,141,
- 79, 51,223,174,124,106,129,163,118, 18, 66, 52, 0,122, 82, 74,127, 34,132,140, 4,112, 13, 64,204,179, 68,218,255,199,219, 60,
- 33,132,168, 52,254,131, 84, 78,234,111, 35,122,189,227,113,242,192,207,197, 22,115,225, 63, 12, 25, 15,118, 62,205,214, 63,181,
- 33,154, 38, 74, 21,108, 83, 61,234,181, 30,165,240,240, 83, 25,114, 18,243,243,147,162,150, 26,179, 52,203,170,155,167, 90,157,
-157,193,157, 71,166, 13, 31, 55,215,109,247,150,101,136,191,115,173, 89, 78,220,241, 7,158, 13, 59, 55,240,245,111,114,163, 93,
-191,143,112,120,211,215,246,248,115, 27, 92,171,106, 67, 5, 47,142,192, 41,224,233,111,131,127,217, 7, 64,200,127, 35, 39,202,
- 28, 83, 94, 0,156, 94,182,157, 0, 36,255,109,233, 9,192, 77,161, 80,244,112,117,117,237,135,178, 73,198, 47,197, 78,247,214,
-111, 59,255, 39, 63,187,202, 59,184,157,119,189,150,187,213,175, 52,223,173,242, 14,110,247,119, 46,243,255, 14, 78,116,232, 32,
-210, 4,247,127,207, 51,184, 95,226, 27, 3, 59,196, 70,132,168, 59, 85, 87,199, 28, 44,159, 67, 0,140, 4, 48,228, 63, 61, 61,
-129, 14, 34,165,182, 89, 19,248,248, 40,158,187, 13,105,220, 88,162,244, 10, 82, 3, 29, 68, 47,203, 78,247,122,237, 38, 7, 68,
-188,155,233,230,223, 97,126,229,251,110,254,237,167,215,107, 59, 44,213,189, 94,187,201, 66,153, 23, 56,255,106,206,191,219, 71,
- 36, 72,204, 42, 69, 39,197,191, 86, 25,188,108,110,235,127, 97,122, 20, 0,136,124,217,188, 47,115, 35,200,191, 2,229,158,170,
-179, 66,141,120, 73,229,232,212, 41, 59,128, 13, 0, 54, 84,158,103,245, 18,202,231,142,255,158,186,116,202, 14,224,214, 11,113,
-196,198, 90, 1,100,191,212,186,248,240,204, 66, 84,177,107,110,126,252,233,111, 0,124, 35,148, 94, 1, 2,106, 14, 70, 72, 2,
- 1, 2, 4,252, 63,136,118, 94, 72, 5, 1, 2, 4,252,157, 65, 80,126,164, 76, 21, 13,160,195, 99,171,132,144,144,231,104, 96,
-111, 11,156, 2,167,192, 41,112, 10,156, 2,167,192,249,191,197, 89, 29,247,223,101,110, 23,169,230,224,250, 23, 35, 23, 38, 0,
- 10,156, 2,167,192, 41,112, 10,156, 2,167,192,249, 63, 8, 97,136, 80,128,128,234, 27, 18, 53, 33, 68, 45,164,132, 0, 1, 2,
- 4, 8,248,143, 21, 88,142,118, 86, 47,210,169, 9, 29,226, 95,146,111, 34, 66,200,167,238,238,238,151,234,213,171,151,237,234,
-234,122,137, 16,242, 25, 33, 68,252,188,156, 58,157,174,141, 86,171, 93,225,237,237,189, 74,171,213,134,255,133,182,107, 9, 33,
-218,231,140,251, 21, 33,120, 88,246, 33, 95, 9, 37, 65,128, 0, 1, 2, 4, 56,130,167,174, 34,108,215,174,221, 57,145, 72,164,
- 19,137, 68,142,158, 99, 70,109, 54, 91,218,169, 83,167, 34,170,233,172, 38,149,127, 95, 66, 41,157,253, 34,225, 28,136,187,130,
- 82, 58,237,121, 58,100, 0,160,148,166, 3,128,175,175,175, 63,207,243,237,197, 98,113, 67,155,205, 22,199, 48,204,153,212,212,
-212,135,255, 97, 2,136,109,220,184,254, 48,150,144,182, 0,220, 0, 20,216,121,122,193,203, 75,187,249,212, 41,199,246,200,169,
- 16, 82, 0, 38,168, 84,170,193, 74,165,242,149,146,146,146, 71, 38,147,105,143, 84, 42,237,180,124,249,114, 93, 88, 88,152,179,
- 94,175, 39, 12,195,168, 15, 28, 56,240,246,242,229,203,187, 16, 66,122, 83, 74,237, 53,181,153,227,184, 97,251,246,237, 11, 6,
-128, 94,189,122,141, 32,132, 92,162,148,242, 79,166,127, 21, 54, 18, 31, 31,159,112, 0,200,200,200,184, 64, 41,165, 90,173,182,
-173, 76, 38, 27, 1, 0,165,165,165, 63,167,167,167,159,127, 9,101, 73, 77, 8, 38, 85,108, 92,203, 48,228, 83,103,103,231,173,
-197,197,197,247, 43,254, 94,110,103,182,208,148, 8, 16, 32, 64,128, 0,135, 4, 22,195, 48,186,117,235,214,121, 41, 20, 10,144,
-242,195,246, 72,165, 67,247, 8, 33,143,175,109, 54, 27, 76, 38, 19,198,142, 29,107,175, 65,103,245, 89,215,174, 93,187,201,229,
-242, 63,108, 44,105, 54,155,197,132, 32,168,226,212,121,134, 33,147, 8, 33, 63, 56,210,137, 85,252,134,197, 82,202,136,197, 82,
-176, 44, 51,161, 89,179,102,161,122,189,254, 20,128,117,233,233,233,185, 14,112,252, 2,160, 15, 33, 4, 78, 78, 78, 87,253,253,
-253,115, 63,248,224, 3,239,206,157, 59,163,110,221,186,200,200,200,104,115,242,228,201, 17, 45, 91,182,204,204,204,204, 60, 65,
- 41, 61,149,158,158,126,255, 5,197,145,151,135,135, 71, 79,137, 68, 34, 97, 24, 38, 63, 61, 61,253, 2,165, 52,179, 38,226, 42,
- 36, 40, 96,209,168,209, 99, 26, 13, 28, 56,208, 71,161,116,150, 39, 39,199,167,175, 93,179,218,245,220,217,243,205, 8, 33,147,
-202,119,191,118,196, 75,181,255,139, 47,190,208, 70, 68, 68, 56,231,230,230,194,110,183,215,218,179,103,207,168,230,205,155, 59,
-235,116, 58,233,166, 77,155, 80, 82, 82, 2,142,227,220,253,253,253,221,135, 14, 29,106,217,180,105,211, 4, 0,139,107,250,220,
- 60,207,179,229,255, 18,142,227,196, 0, 88, 66,200,156,234, 4,145, 78,167,107,213,191,127,255,249, 50,153, 12,219,182,109,219,
- 1, 96, 57,128, 55,143, 29, 59, 22, 0, 0, 17, 17, 17,111, 2, 56,239,230,230,214,140, 16,124,202,243,101, 71, 39,213,164, 44,
- 85,133,222,189,251,128, 16,178,194,219,219,251,124, 78, 78,142,142, 16,188,249, 60,194, 77,128, 0, 1, 2, 4,252, 15, 11, 44,
- 0, 80, 40, 20,216,191,127, 63, 40,165, 96, 24, 6, 44,203,150, 31, 17,195, 32,170, 36, 4,102,187, 24, 37, 25, 55, 49,168,185,
- 24,205,155, 55,255,131, 0,123, 90, 31, 94, 89,160, 77,156, 56, 17, 26,141,230, 15, 1,178,178,178,112,226,196,241, 42,227, 56,
-170, 55, 42, 95,204,157, 59,215, 53, 47, 47,175,247,250,245,235,187,248,248,248,124,153,145,145,113,182, 26,207, 85,159,138,137,
-255,221,186,117,107,245,227,143, 63,222, 41, 46, 46,182, 94,190,124,217,186,122,245,234,244,215, 94,123, 77, 59,120,240, 96,201,
-132, 9, 19,188, 31, 61,122,244,206,254,253,251,223,113,119,119,223,151,159,159,191,224,121, 50, 64,165, 82,133,244,239,223,191,
-203, 79, 63,253, 36, 85, 42,149,120,248,240, 97,173, 97,195,134,105, 8, 33,191, 60,121,148,206,211,208,184,113,253, 97, 31,142,
- 26, 21, 56,230,163,113, 45,172, 86,139,241,102,244,169, 19, 34, 9,195,142, 29,251,190,107,110,110,150, 7,207,211, 97, 40,219,
-127,168, 58, 76,152, 57,115,166,143,191,191,127,237,173, 91,183,162,164,164, 4, 0,188,234,213,171,135,128,128, 0,238,244,233,
-211, 8, 12, 12,132,179,179, 51, 78,159, 62,141,139, 23, 47,162, 69,139, 22, 78, 18,137,228,245,103, 9, 44,157, 78,215, 68,167,
-211,205,210,128, 73,109, 7, 0, 0, 32, 0, 73, 68, 65, 84,148,103,118, 69,250,134,134,134, 98,226,196,137, 48,155,205,104,208,
-160, 65, 61,133, 66,113,254,244,233, 83,142,136,107,185,167,167, 39,198,140, 25,131,146,146,146, 33, 58,157, 46,129, 82, 42, 42,
-183, 23,148, 82,117, 64, 64,192,230,142, 29, 59, 54,216,183,111, 47,121,222,202, 65, 41,205, 38,132, 44,233,219,183,207,167, 0,
- 65,167, 78,157,242, 38, 78,156,200,221,185,115,167,221,160, 65, 3, 91,223,187,119,255,165, 8, 55, 1, 2, 4, 8, 16,240, 63,
- 36,176, 42, 60, 84,199,142, 29,131,197,242,231,163,230,220, 59, 52,199,228, 65,117, 48, 98,252, 70,108,127, 16,143, 38, 77,154,
-224,201, 21,137, 79, 28,210,154,205,178,236, 58,134, 33, 31, 18, 66, 16, 26,218, 60,123,209,162, 69, 85, 29,139, 98, 11, 13,109,
-158,205,178,140,154, 82, 10, 66,152,181, 60,207,101, 87,197,249,180, 14, 81, 42,149, 77, 2, 0, 31, 31,109,246,193,131, 7,109,
-131, 7, 15,198,194,133, 11,165, 83,166, 76,249, 66,167,211, 13, 79, 75, 75, 75,123,154,157,149,225,231,231,135,184,184, 56,204,
-152, 49, 35, 51, 43, 43,107, 93,102,102,102,220,150, 45, 91,234,212,171, 87,111,196,154, 53,107,234,133,135,135, 51, 61,122,244,
-192,129, 3, 7,154, 85, 97, 75,117, 75, 95,197, 0, 94,233,216,177, 99,231,157, 59,119, 74,139,138,138,144,148,148, 4,165, 82,
-137,217,179,103, 59,127,244,209, 71,237, 1,236,114,132,147, 37,164,109,191,254, 3, 52, 22,139,169,196, 98, 49, 23, 39, 36, 69,
-101,164,167,223, 41,104,224,223, 66,221,173,123,152, 71, 92,220,195,182, 79, 19, 88,149, 57,229,114,249,235,109,219,182,117,222,
-186,117, 43, 90,182,108, 9, 87, 87, 87,156, 60,121, 18,183,110,221, 66, 94, 94, 30, 67, 41,133,147,147, 19,230,207,159, 15, 63,
- 63, 63, 20, 23, 23, 35, 49, 49,177,150, 88, 44,246,124,150,157, 60,207,247,218,184,113,163,198,211,211, 19,118,187, 29,148, 82,
-216,237,118,240, 60,143,140,140, 12,148,148,148, 64,165, 82,193,108, 54,227,204,153,211, 85,138,229,202,156,105,105,105,103,214,
-172, 89,115,166, 97,195,134,237,167, 76,153, 2,137, 68, 50,181,160,160, 0, 11, 23, 46,132, 82,169,196,220,185,115,189, 67, 67,
- 67, 1,192,102,183,219, 43,202, 18,165, 20,223, 87, 22, 65,142,172,128,241,245,245, 61,150,157,173, 15,127,237,181,215,144,159,
-159,111,155, 61,123, 54, 66, 67, 67,209,160, 65, 0,170, 75,207,151, 5,129, 83,224, 20, 56, 5,206,255, 5,206,191,165,192, 34,
-132, 80, 74,203,134, 81,158,248,142,157, 59,119, 86, 25,241,189,197,177, 16,177,101,253,223,170, 85,171,144,151,151, 87,173,183,
-137,227,184, 79, 52, 26,141,105,234,212,169,157, 26, 52,104, 96, 27, 59,118,236,181,196,196,196,137,149,195,212,173, 91,119,217,
- 15, 63,252,128, 7, 15, 30,228,204,159, 63,255, 68, 86, 86,214,244, 26,102,250, 44, 66,200, 10, 0, 72, 79, 79,207, 61,112,224,
- 64,203,211,167, 79,127,182,100,201, 18,239,113,227,198, 73,199,143, 31,255, 33,128, 47,158, 18, 55,157, 16,178, 69,167,211,189,
- 19, 17, 17,129, 1, 3, 6,228,182,109,219,214,122,229,202, 21,239, 75,151, 46,205, 90,177, 98, 5, 63,124,248,112,166, 93,187,
-118,208,235,245,248,237,183,223,248,228,228,100, 70, 38,147,153, 28,118,175, 17,210,137,101,217, 79, 25,134, 9, 13, 10, 10,186,
- 59,122,244,232,219,121,121,121, 57,169,169,169, 48, 26,141,176, 90,173, 16,137, 68,144, 72, 36, 53,216, 63,131,184, 42,149, 10,
-201,197,243,123,142,164,167,198,230,100,100,221, 46,100, 64,153,244,244,168,194,192,192, 78, 30, 40,155,147, 85, 45,156,156,156,
-234,233,245,122,148,148,148,192,205,205, 13, 75,150, 44,129, 90,173,134,201,100, 66, 92, 92, 28,245,245,245, 37, 39, 79,158,132,
- 78,167, 67,126,126, 62, 44, 22, 11,140, 70, 99,150,197, 98,121,230,243,139,197,226,125,195,135, 15,111,175, 86,171,149, 21, 30,
- 44,158,231, 81,191,126,125,140, 27, 55, 14,219,183,111, 71,124,124, 60, 40,165, 54,157,206, 55,155, 97,136, 26, 0,101, 24,118,
-139,221,110,207,174, 34,159,168,175,175,239,220, 89,179,102,249,174, 94,189,250,149,137, 19, 39,130,227, 56,240, 60, 15,142,227,
-144,157,157,141,125,251,246,225,252,249,243,214,184,184,184,237, 46, 46,174, 49, 38,147, 41,170,180,180,244,145,163, 41,234,235,
-235, 43,231,121,254,131,128,128,128,158, 67,135, 14,181, 73, 36, 18,152, 76, 38, 24,141, 70,220,190,125,219,214,179,103,207,188,
-190,125,251,120, 28, 60,120,144, 82,138, 37,130,247, 74,128, 0, 1, 2,158, 15, 79,211, 32,127, 27, 15,214,211, 30,234,231,159,
-127, 6,165, 20, 44,203,130, 97,152,199, 67,132, 37,233, 60,222, 27,191, 25, 18,150, 71,100,100, 36,154, 53,107,230,208, 15,242,
- 60,191, 60, 50, 50, 50, 44, 34, 34, 66,212,165, 75,151,230,117,234,212, 9, 77, 74, 74,186, 14, 0,117,234,212, 9,237,218,181,
-107,115,181, 90,141,101,203,150,153,121,158, 95,254,156,202,186,114,103,119,217,207,207,239,203,221,187,119,175, 30, 61,122, 52,
-124,124,124,154, 86, 19,119,116,247,238,221,155,125,254,249,231,152, 49, 99,134,117,221,186,117,246, 49, 99,198,136, 58,118,236,
-136, 77,155, 54, 49,247,238,221,195,186,117,235,248,221,187,119,103, 18, 66,216,238,221,187,107,106, 80,136, 58,104, 52,154, 95,
-118,236,216,193,183,106,213, 74,126,255,254,253, 70,147, 38, 77,210,100,100,100, 28,109,208,160, 65,174,209,104,132,221,110,135,
-193, 96, 0, 0,139,163,188, 12, 75,178, 82, 83, 31,169, 75,173, 5,230, 30, 29,195, 39,233, 19,115,224, 85,183, 63,126, 63,189,
-115,105, 82, 74, 60, 79, 24, 56, 52,212, 88, 82, 82,242,200,110,183,123, 0, 80, 31, 59,118, 12, 94, 94, 94, 40, 46, 46,134,213,
-106,133,201,100,178,186,187,187,203,114,115,115, 81, 90, 90,138,210,210, 82,184,184,184, 32, 58, 58, 58,207,110,183, 31,122, 22,
-111,114,114,242, 29, 0,221,158, 16,210, 50,134, 97,142,219,108, 54, 60,124,248, 16,119,239,222,237,156,152,152, 88, 90,158, 78,
- 90, 0,176,219,237,233, 79,227, 76, 77, 77, 53,123,121,121,125,254,254,251,239, 79,212,104, 52, 33, 0,224,239,239,239, 50,105,
-210, 36, 44, 88,176, 0, 49, 49, 49,179,196, 98,241,165,180,180,180,210,154,150, 31,141, 70, 19,164, 80, 40, 38, 79,152, 48, 65,
- 19, 20, 20,132,210,210, 50, 10,103,103,103, 24,141, 70,184,184,184, 32, 44, 44, 44,238,203, 47,191,180, 82,138, 81,148,210, 44,
-161,137, 20, 32, 64,128,128,151, 35,178,254, 86, 30,172,114, 97, 65, 8, 33,244,137, 7, 46,235,192, 25,230, 15,226,138,101, 89,
- 12,106,201,162,184,129, 63, 24,166,108, 40,209,110,119,108, 17,153, 94,175,207,242,245,245,221, 19, 29, 29, 61,120,200,144, 33,
- 56,113,226,196,199, 0, 62, 0, 0,150,101, 63, 30, 50,100, 8,162,163,163,113,247,238,221, 61,122,189,254,165,116, 92, 86,171,
-213,104,179,149,141, 70,202,229,114, 73,181,130,133, 97,172, 18, 73, 89,176,251,247,239, 15, 24, 63,126,252,128,238,221,187,143,
-236,221,187, 55,246,237,219,135,141, 27, 55,126, 13,224, 68, 68, 68,196,230,154,216,193,178,236,164,237,219,183,219, 35, 34, 34,
-156, 41,165, 8, 14, 14,118,158, 60,121,178,117,225,194,133,245,134, 15, 31,158,155,154,154,138,162,162, 34,100,102,102, 90,147,
-147,147,227, 29,229,181,115,252,137, 21, 43,126,208,141,250,160,191,102,231,129,245,243,126,219,117,179,233,219,111,102,198,106,
-117, 77,188,150,175, 60, 47,183,219,249,189,142,240,152,205,230,223, 14, 30, 60,248,102,157, 58,117,212,183,110,221,130,217,108,
- 6,207,243,232,217,179, 39, 0,200, 42,194,197,197,197,153,141, 70, 99,118,108,108,108,113, 82, 82,146, 13,101,147,204, 29,169,
- 64,143, 87, 7, 90,173,214,119,122,245,234, 5,142,227,208,163, 71, 15,220,184,113,227, 29, 0,235, 42,254,238,104, 89, 2, 48,
- 13, 0,116, 58,157,135,171,171,235,190, 10,239,152, 70,163, 57, 31, 29, 29,109,243,245,245, 29, 42,145, 72,194, 76, 38,211,206,
-204,204,204, 51,213,113,106,181,218,240, 6, 13, 26,204, 92,184,112, 1,209,104,188,193,113, 54,216,237,118,100,103,231,160,164,
-164, 4, 65, 65, 65,240,243,243,195,252,249,243,193, 48,204,126, 65, 92, 9, 16, 32, 64,192,139,163, 42, 13,242,223, 14,230,201,
- 7,172, 78, 92, 85,124,151,136, 88,120,214,114,135,103, 45, 15,184,187,187,131,227, 56, 56,170, 62, 25,134,217,180,117,235, 86,
-139,171,171, 43,250,246,237, 27,232,227,227, 19,225,227,227, 19,209,183,111,223, 64, 87, 87, 87,108,221,186,213,194, 48,204,166,
-151,164,138, 25,150,101,135, 69, 68, 68, 32, 43, 43, 11,143, 30, 61,186, 92,147,248, 41, 41, 41,197, 25, 25, 25,219, 13, 6, 3,
- 68, 34, 17,204,102, 51, 0,156, 2, 80,227,179,212,120,158,111,213,170, 85, 43, 69,197, 92,181,132,132, 4, 56, 59, 59, 59,167,
-164,164,168,141, 70, 35, 44, 22, 11, 10, 10, 10,112,237,218, 53, 35,128,116, 71,121, 99, 98,238,239,137,186, 18, 21, 29,121,244,
- 44,243,202, 43, 77,189,124,117,202, 34, 79, 47, 95,231, 67,145,183, 20,153, 25,185, 15, 99, 98,226, 29, 61, 12,119,249,238,221,
-187,115,163,163,163,239,250,250,250, 38,187,186,186, 82, 0,200,200,200,248,195,231,234,213,171,178,200,200, 72, 99, 82, 82,210,
- 62,148, 45, 10,176, 59,144, 15, 95, 17,130,123,132,224, 30,203,178,139,154, 53,107,246,118,120,120, 56, 82, 82, 82, 16, 30, 30,
-142,224,224,224,183, 61, 61, 61,189,107,152,183,222,132, 16,109, 80, 80,144, 74,165, 82, 45, 29, 57,114, 36,236,118, 59,186,116,
-233, 2,131,193,176, 94,171,213,254,163,123,247,238, 31,255,248,227,143, 77, 53, 26,205, 39, 14,210, 14,125,235,173,183,136, 82,
-169,130,205,102,131, 84, 42,133, 74,229,132,122,245,234,161, 83,167, 78,160,148,162, 83,167, 78,252,154, 53,107,246, 41, 20,138,
-205, 66,179, 40, 64,128, 0, 1, 47, 79,100,253, 45, 61, 88, 79,233,192,192,113, 28, 8, 33,184, 84, 24, 2,179, 93,132,194,148,
- 40, 12,105, 37,125, 44,180, 88,150, 5,203,178,176,217,108,112,244,216,157,228,228,228, 2, 31, 31,159, 95,207,159, 63,255,238,
-192,129, 3,113,228,200,145,209, 0, 48,112,224, 64,156, 63,127, 30, 15, 31, 62,252, 53, 35, 35,163,160,134,157,173, 39, 0,182,
-178, 71, 65,163,209,188, 82,187,118,237,143, 71,141, 26,213,166, 73,147, 38,216,178,101, 11, 0,156,112,216, 51, 84,230,149, 83,
- 3, 40,121,226,217, 36, 0,156,121,158,175,209, 38,155, 12,195, 92, 61,113,226, 68,171,222,189,123, 59, 39, 37, 37, 33, 61, 61,
- 29, 59,118,236,200,246,240,240,200,230,121, 30, 30, 30, 30,240,244,244,132,205,102, 83,196,197,197,121, 3,112,120,175, 45,142,
- 74,215, 30, 61,114,121,117,235, 22, 61,153, 87,234,168, 10, 1, 11,185, 26,157,166, 18, 73, 68,171,106, 80,184,237,132,144,190,
-231,206,157,155,112,241,226,197, 65, 62, 62, 62,228,221,119,223, 69,207,158, 61, 33,149, 74, 97, 50,153,144,159,159,143,131, 7,
- 15, 18,187,221, 30, 14, 0, 62, 62, 62,181,235,214,173,251, 51, 33, 36, 45, 33, 33,225,221,167,228,205,147, 91,116,140, 30, 48,
- 96,192,157,140,140, 12,219,164, 73,147,176,104,209, 34,140, 24, 49, 66, 28, 27, 27,251, 1,128,127, 58,152,223, 95, 18,130, 79,
- 65, 65, 82, 83, 82,238,253,176,114,101,169,143,143, 15,142, 29, 59,134,176,176, 48,212,175, 95,255,149,107,215,174,189,210,174,
- 93, 59, 92,190,124, 25,185,185,185, 23,171,227,236,216,177,163,136,101,217,122, 90,173, 22,137,137,137,144,203,229,240,246,246,
-134,155,155, 27,188,188,188,176,104,209, 34, 44, 89,178,228,166, 72, 36, 90,151,150,150,246, 80,104, 14, 5, 8, 16, 32, 64,192,
- 51, 5, 86,101,213,248,164, 23,235,240,225,195,160,148,194, 41,188, 37,166, 14,169,139, 97, 31,111,196,182,135,113,144,201,100,
-255, 34, 17,137,240,209, 71, 31,213,232,135,221,221,221,183,109,219,182,109, 96,219,182,109, 85, 93,186,116,169, 15, 0,114,185,
-220,182,109,219, 54,131,187,187,251,182, 26,138,171, 25,132, 96, 10, 40, 24,153, 84,122,204,163, 86,173,227,206,206,206, 45,186,
-119,239, 94,191, 71,143, 30,240,247,247,199,142, 29, 59,176, 99,199,142, 19, 25, 25, 25, 23, 28,229,173, 87,175, 30,238,220,185,
- 51, 12,192,122, 0, 20,255,154,196,111, 7,208,214,207,207, 79, 94, 19, 59, 57,142, 91, 50,124,248,240,157, 51,102,204,200, 9,
- 12, 12, 84,109,223,190, 61,255,216,177, 99,150, 94,189,122, 61,170,232,200, 77, 38, 19, 76, 38,147, 84,167,211, 53,168,137,192,
-138,137,137,201,238,209,189,179,215,202,213,231,235,155, 76,156,117,239,225, 99, 86,155, 69,101,186, 19,247, 48,179, 38, 54, 82,
- 74,237,190,190,190, 99,120,158,247,178,219,237, 86, 47, 47, 47,201, 47,191,252, 2,185, 92, 14,134, 97, 16, 26, 26, 10,185, 92,
-110,209,106,181,133, 0,160, 86,171,109,139, 23, 47, 22,189,255,254,251,146,154,100,153,183,183, 55, 54,111,222, 12,131,193, 48,
-111,251,246,237,211, 62,250,232, 35, 4, 6, 6,118,212,106,181,139,210,211,211, 77,213,228,183,123,101,193, 70, 8,105, 40,145,
- 72,238, 44, 95,190,220,114,238,220,185,221,145,145,145, 61, 71,140, 24, 33,143,136,136,192,133, 11, 23,176,118,237,218,203,174,
-174,174,203,170, 51,234,244,233,211,188,143,143,207,227, 97,112,179,217,140,132,132, 4,132,133,133, 97,221,186,117, 88,190,124,
-249,214,204,204, 76,193,107, 37, 64,128, 0, 1,127,145,231,234,239,228,197, 18, 85, 23, 96,251,246,237, 0,128, 15,190,143,131,
-197, 82, 54,143,105,213,170, 85,143,247,175,170, 24, 74, 60,115,230, 12, 80,131, 61,171, 98, 99, 99, 13,190,190,190,155,198,143,
- 31, 63,247,234,213, 43,106, 0,136,138,138,202,206,204,204,156,153,154,154,106,168,129,184,114, 35, 4, 83,120,158,178,229, 34,
-173,235,164, 73,147,180,109,219,182,181,138,197, 98, 36, 39, 39,227,187,239,190,195,249,243,231,183,103,100,100,172,164, 14,184,
-217, 18, 19, 19, 47,167,164,164,180, 25, 55,110, 28,218,183,111,223,103,237,218,181,221, 42, 63, 91,104,104,232,134, 94,189,122,
-105,100, 50,153,200, 98,177,112,247,239,223,191,238, 96, 33, 58, 77, 8, 25, 58,101,202,148, 9,148,210,102,106,181, 58,185,117,
-235,214,177,109,219,182,205,117,113,113,129, 72, 36, 66,118,118, 54,140, 70, 35, 56,142,115,175, 73, 70,250,249,249, 69, 76,152,
- 48,161,233,152, 49, 99, 96, 48, 24,176,113,227, 70,172, 92,185, 18,126,126,126, 17, 41, 41, 41,231,106,194,197,243,188,215,254,
-253,251, 43, 60,117, 56,126,252, 56,180, 90, 45, 92, 93, 93, 81, 84, 84,132,119,223,125, 87, 58,107,214, 44, 0,192,181,107,215,
-196, 10,133,162,186,231,206, 38,132, 44, 97, 24, 50, 9, 0,105,213,170,181,222,197,197,197,118,233,210,165,248,180,180,180, 67,
-254,254,254,175, 15, 31, 62,188,126,235,214,173, 37,247,239,223,111, 7,224, 72, 77, 11,114, 94, 94, 30,206,156, 57,115, 38, 35,
- 35, 99,137, 90,173,222,246,229,151, 95,126,234,237,237,221, 44, 61, 61,253,146, 70,163,153, 27, 29, 29,109,115, 32,127,120, 31,
- 31,159,148,163, 71,143,250, 13, 30, 60, 24, 82,169, 20,249,249,249,112,113,113,193,226,197,139,169,213,106,221, 35, 52,133, 2,
- 4, 8, 16, 32,224,165, 8,172,221,187,119,131, 97, 24, 88,178, 45,248,104,202,118, 40,229, 44, 78,158, 60, 9, 15, 15,143, 63,
-204,203,170, 24, 50,124, 66,252, 60,243,180,237,188,188,188,115,233,233,105, 94,149, 54,150,244,146,201,228,231,170, 17, 84,207,
-228, 36,132,192,106,181, 34, 50, 50, 18,103,207,158,181, 62,120,240,224, 52, 33,100,127,122,122,250, 77, 71, 57, 11, 11, 11,191,
- 29, 61,122,244,148,158, 61,123,182, 25, 54,108, 24,150, 47, 95, 46,185,115,231, 14, 40,165,104,222,188, 57,154, 52,105,162,179,
-217,108, 52, 38, 38,166,100,223,190,125,145,102,179,121,179,163,118, 82, 74,143, 1, 56, 70, 8,145,100,102,102,190, 82, 88, 88,
-216,153,231,121,231,236,236,108, 36, 38, 38, 34, 47, 47, 15, 69, 69, 69,176,219,237,121, 53,121,246,148,148,148,115,173, 90,181,
- 2,195, 48, 48,153, 76, 72, 77, 77,133,221,110, 71,122,122,122,141,211,147, 97, 24,125,175, 94,189,188, 74, 75, 75,237,111,189,
-245,150, 72,175,215, 35, 48, 48, 16, 0, 80, 92, 92,140,195,135, 15,163, 97,195,134, 21,158, 51, 4, 5, 5, 85,203, 73, 41,157,
- 77, 8,249,209,199,199,231,203,111,190,249, 38,240,210,165, 75,176,217,108,145, 0, 96,179,217, 34,163,162,162,234,183,104,209,
- 2, 91,182,108,233, 94,149,192,170,204, 73, 41,205, 47, 23,108,159,130,130, 4, 53,110,156, 27, 24, 24,104, 21,139,197,181, 0,
- 32, 59, 59, 59, 27,192, 20, 7,196,121, 72, 21,123,118,205,220,181,107,215,251, 23, 47, 94,108,247,233,167,159,146, 78,157, 58,
- 1, 0, 12, 6, 3,167,215,235, 13,207,195,249,162, 16, 56, 5, 78,129, 83,224,252, 95,224,252,159, 18, 88,133,133,133,104,221,
-186, 53,108, 54, 27, 26, 55,182,161,168,168, 30,108, 54,219,227,201,191, 60,207,195,110,183,131,227, 56, 48, 12,227,240, 28,172,
- 10,152,205,102,235,147,155,191,155,205,102,107, 13, 93,139, 5,132,144,239, 24,134, 76, 1, 5, 35,149, 74, 47,175, 92,185,114,
- 35,128, 52, 74,233,229,234,134,155,170, 66,102,102,102, 14,128,201,181,107,215,110,126,242,228,201,113,131, 6, 13,170,223,183,
-111, 95, 36, 39, 39,195,110,183, 35, 62, 62,222,182,111,223,190,152,130,130,130, 31, 41,165,119,158, 39,225, 41,165, 86, 0,247,
-156,157,157,193,243,124,251,176,176, 48, 15,187,221,142,156,156, 28, 92,188,120, 49, 49, 39, 39,231,252,115,120,176, 48,122,244,
-104,148,148,148, 96,251,246,237, 56,114,228,200,115,121,176, 82, 83, 83, 27, 0,128, 86,171,205,114,113,113, 17,141, 28, 57, 18,
- 54,155, 13, 70,163, 17, 69, 69, 69,200,205,205,181,124,242,201, 39, 82, 0,144, 74,165,182, 30, 61,122,136, 28,124,230,244,240,
-240,112, 87,185, 92,142, 51,103,206,240, 60,207, 31, 47, 23, 53,199,207,157, 59, 55,174, 89,179,102,140,167,167,103, 67, 7,185,
-190, 32,132,172,118,113,113,209, 54, 14, 10, 90, 74, 41,133,151,151,151,223,139, 86,136,172,172, 44, 61,128,121, 58,157,110,215,
-231,159,127,254, 97,155, 54,109,130,191,248,226, 11, 80, 90,230, 33, 21, 32, 64,128, 0, 1, 2, 94, 84, 96, 37,140, 25, 51,198,
- 90,217, 51,244,132,151,227, 79,158, 35,158,231,211,106, 40, 50,178, 9, 33,139,203,135,142,240,188, 27, 54, 82, 74,231, 18, 66,
-126, 4,192,154, 75, 75, 95,218,178,249,228,228,228,107,132,144,145,155, 54,109,234,178, 99,199,142,201,111,190,249,166, 98,253,
-250,245,150,236,236,236, 69, 0,142, 80, 74,249, 23,253,141,226,226,226,123,132,144,140,184,184,184, 87,165, 82,169,130,227, 56,
-189, 94,175,143,165,148,150,212,132, 39, 37, 37,229,156, 86,171,197,158, 61,123,224,225,225,129,188,188, 60,135, 60, 88,213,188,
-161, 12,216,186,117,235,110,158,231,229, 79,228,125, 81,122,122,122, 3,160,108,146,251,225,195,135,127, 38,132,164, 57,104,231,
-246,177, 99,199,190,171,215,235,127, 75, 75, 75,203, 47, 23,116,249,190,190,190, 75,102,204,152, 49, 52, 39, 39,231,151, 26,228,
-123, 38, 33, 68,255,232,209,163,226,188,188, 60,103,142,227, 94, 90,197, 72, 75, 75,123, 0,224, 31, 58,157,174, 77,143, 30, 61,
-222,161,148,234,133,230, 66,128, 0, 1, 2, 4,188,176,192, 58,121,242,100,167,127,135, 1,229, 67, 71, 63, 84, 8,174, 23,224,
-201,249,139,236,163, 0,126, 39,132,156, 88,182,108, 89, 35,163,209,152, 72, 41, 53,188,228,223, 40, 6,112,244, 69,121,210,211,
-211,149,132,144, 25, 0,166, 3,248,134, 82,250,245, 11,138,140, 75, 0,158,185,117, 66, 70, 70, 70, 50,128,215, 28,229, 76, 77,
- 77,221,133, 39,142, 0, 42,191,191, 7,192,158,231, 72, 59,206,207,207,111,246,164, 73,147,122, 0,216,255,178,243, 63, 45, 45,
-237, 50,128,203, 66, 83, 33, 64,128, 0, 1,255,239,104, 5,192,171,252,123,197, 75,175,215, 19,223, 45, 0,164,149,226, 84, 92,
-235, 1, 92,173,196, 81,249,126,117,113, 1, 32, 7,192, 77,212,100, 19,240,255,132, 20,163,148,102,255,167, 31, 53, 66, 41,229,
- 12, 6, 67,204,203, 22, 87,127,129,157, 95, 83, 74,149, 47, 42,174,254,155,144,146,146, 18,157,150,150,246,207,180,180,180, 91,
- 66,251, 35, 64,128, 0, 1,127, 95,113, 69, 8, 57, 64, 8, 57, 80, 46,136,188,170,248, 46,173, 8, 83,249,186,146, 48,243,170,
-226,254, 51,227, 18, 66, 14, 76,155, 54,237, 53, 0,225, 53, 49,152, 17,242, 76,128, 0, 1, 2, 4, 8, 16,240, 31, 14, 47, 66,
-200, 1, 74,105, 31, 74,105,159,114, 1,244, 52, 71, 67,159,202,255, 62, 11, 85,241, 84,252, 70,229,235,249,243,231,127, 3, 64,
- 81, 19,131, 69,132,144,144,167, 24,232,240,234,128,167,113, 60,235,111,213,241, 11,156, 2,167,192, 41,112, 10,156, 2,167,192,
-249,247,227,124, 89,241, 95, 6,170, 18,107, 21, 66,174,242,245,212,169, 83,167,163, 6,195,131, 21,228,127,217, 7, 64,136,192,
- 41,112, 10,156, 2,167,192, 41,112, 10,156, 2,231, 11,126,122,151, 73, 22,218,187,242,247,170,238, 61,235,123,117,113, 29, 8,
-235,176,205, 34, 8, 16, 32, 64,128, 0, 1, 2, 4,252,103, 67, 95,217,219, 84,238, 97,226,166, 78,157, 58,189,226, 94,185,151,
-169, 20,128,172, 10,111, 89,229,120,213,121,214, 28, 14,251, 44, 8, 2, 75,128, 67, 32,132,136, 0, 76,112,115,115, 27,226,230,
-230, 86, 55, 47, 47, 47,161,168,168,232, 55, 0,203, 41,165,182,231,225, 12,110, 64,186,112,118, 76,230,121,176,172, 8,139,238,
- 60,164,145, 66, 74, 11, 16, 32, 64,128,128, 42,112, 21, 64,171, 74,162, 71, 15,224,214,188,121,243,242,231,205,155, 87,249,222,
- 13, 0,205,202,195,233,171, 16, 74,150,242,107, 75, 21, 97, 44,142,132,253, 75, 4, 86, 80,109,242, 33,120,204, 0, 1, 5,193,
- 55,177,201,116,109, 77,226, 55, 9, 36,175, 73, 25,209, 74, 10,202,154,109,220, 52,194,161,202, 61,154, 40,139, 8,185,152,157,
- 71, 64,120, 11,111,255,232,214, 61,122,210,225, 78,187, 33,233, 42,162,204,122,158,167, 98,158,167, 91, 24,224,176,210,130, 75,
- 23, 83,169,249,121,115,181,118,109,226, 70,120,244,148,136, 68, 45,173,118,123, 20,101,112, 56, 57,153, 22,252, 39,149,188, 33,
- 65, 68, 34,242, 83, 44, 84,201,108, 93, 88,150,115,231,120, 54,223,104, 22, 31,183,165,152, 62,219, 17, 75, 29,222,188,149, 16,
- 34, 6, 48, 65,165, 82,189,174, 84, 42, 95, 41, 41, 41,121,100, 50,153,118, 75,165,210,206,203,151, 47,247, 13, 11, 11,115,210,
-235,245,228,255,216, 59,239,168, 40,174,191,141, 63,119,182,194,178,244,190,244, 38, 34,162, 8,246,138, 6,107, 80, 99,212, 52,
- 99,138,177,164, 89, 82, 94,211,140, 49, 38,198,196, 88, 98, 18, 19,163, 38,209, 88, 18, 27,198, 18, 59, 26, 75, 44, 96, 71, 84,
- 80, 1, 97,233, 32,236,194,178,101,102,238,251, 7, 66,208, 8, 44,196, 52,127,247,115,206, 28,216,157,217,103,238,220,153,185,
-243,204,247, 54,142,227, 60,126,254,249,231, 49, 95,124,241, 69, 60, 33,228, 65, 74, 41,223,220, 52, 11, 60, 94, 79,219,254,124,
-119, 0, 8,138,255,234, 45, 66,200,238,230,142, 45,214, 62,148,180, 17, 4, 76,108,106, 59,137, 4, 75,207,102,180,108, 80,216,
- 54,193,228, 43, 2,132,129, 34, 81,194, 97,253,185,171,108, 76, 44, 6,131,193,248,135, 76,214,157,156,176,114,187,191,157,102,
- 25, 44, 66, 49,243, 66,250, 13, 39,136,102,180, 13, 15,121, 23, 64,179, 12,150, 66, 34, 89,118,242, 76,190, 39,168, 25,203, 22,
-188,176,210,100, 1,120,222, 12,145,183,128,231, 45,224,121, 51, 4,193, 2,145,175,198,204,133, 7, 0, 94,135,142, 29, 90, 45,
- 3, 16,108,237, 62,100, 34,183,226,212,209,221,206,132, 47,199,143,223,127,244,124,150, 86,255,252,190, 19,218,146,200, 64,242,
-238,197, 44,252, 96,237, 3, 60, 32,128,120, 81,138,161,254, 26,247,145,211, 39, 61,210,101, 96,223,158,156,127, 64, 16,178,179,
-174,143,223,149,116, 88,236,213,205,227,120,182,182,104, 35, 33,216,154,149, 69,243,255,204, 73,112,119, 34,237, 29,236,108,191,
-146,201, 57, 59,153, 68,146, 94, 84, 86,241,113,126, 9,181,250, 2, 25, 29, 73,228,234, 96,249,177,190, 67,158,114,238,213,239,
- 25,193, 86,165,214,229, 92, 75, 49,237,220, 58,191,255, 85,121,218,241,209,145,164,139, 53, 38,139, 16, 34, 37,132,108,155, 57,
-115,166, 87,207,158, 61,237, 75, 74, 74,192,243,188,203,166, 77,155, 38,117,234,212, 73,237,227,227,163, 88,181,106, 21,244,122,
- 61, 4, 65,112, 14, 9, 9,113,126,244,209, 71,249,213,171, 87, 79, 6,176,160, 49,237,192, 64,162,180, 35,112,184,205, 96,137,
-168, 27,192,212,194, 67, 21,162,129,119,219, 32, 98, 1, 0,133, 9,250, 20, 45,109,114, 20,126, 65,192,196,211,201, 73,227,248,
-155, 39, 1,193, 12, 10, 11, 32,154, 1,106, 1, 21,205,128,104, 1,165,102,116,125,232, 59, 0,152,220,146,243, 67, 8, 30,216,
-183,239,164, 87, 65,126, 94,236,194,133,115, 94,139, 12, 34,187, 57, 9,214, 94,184,138,195,247, 98,176, 89, 6,131,241,207,243,
-192, 3, 15,172,208,235,245, 31,159, 56,113, 34,253, 94,105,122,121,121, 69,112, 28,151,213,146, 25, 69,234, 19, 19, 19, 51, 21,
-192,211,183, 62,126,127,234,212,169, 69,127, 54,109, 93,186,116,241,161,148,122,222, 42,251, 11,142, 31, 63,158,203,174,130,127,
-208, 96, 81, 64, 9, 42, 2, 71, 30, 2, 37,176,105,238,206, 40,133, 13,136, 4,176,232, 49, 60, 33, 30,110,174,222,128, 80, 9,
- 8, 6,128,175, 2,132,154,165,184, 40, 11,224, 43,129,162, 95,192, 83,170,108,246, 81, 89,202,129,194,245, 24,208,205, 31, 78,
-246, 54,152,242, 88,164,235, 55,137,151,151, 44, 79,188,212, 23,192, 83, 77,253,220,215,151, 44,122, 99,210,240,231, 6,244, 79,
- 32,129, 33, 81, 40, 45,202,193,137,147,191,221, 92,248,205,134,139,253,251,116,108, 51,114,196, 35, 78, 19, 39,189,214, 45,235,
-234,249,110, 7,246,111, 89,224,175, 33,139,179,181,244,205, 22, 69,199,188,229, 19, 7,196,199,207,254,234,155,239, 85,182,106,
- 87, 84,148,102, 7, 61,249,196,136,104, 47, 23,146,144, 95,106, 93,196, 69,230,103, 59, 63, 62,225, 89,151, 81, 79,127,106,111,
- 49,235,205,218, 43, 59, 47,218,217,242,220,163,143, 77, 41,255,126,217,187, 94, 87,205,165,243, 1,188,108,133,212,228,153, 51,
-103,122,133,132,132,248,175, 89,179, 6,122,189, 30, 0, 60,194,194,194, 16, 22, 22, 38, 28, 60,120, 16,225,225,225,176,183,183,
-199,129, 3, 7,112,236,216, 49,116,232,208, 65, 37,151,203, 71, 54,102,176,218,132,146,209, 15,245,237,248, 69,112,128,143,170,
-166,241,159, 8, 74, 69,232,245, 70,188, 48, 39, 5,101, 21,213, 24,242, 64, 76,171, 64, 31,251, 43, 28, 68, 80, 10,100,106, 11,
-132,136, 96,242, 88,218, 53,186,163,169,200, 84,135, 78,125,187,159, 73,249, 45,220, 92,184, 13,157,135,124,116, 25, 20, 71,127,
-119, 71,232,158,114,240,187,112,224,187, 22,221, 32,132, 16, 18, 25, 4, 33,251,183,143,225, 27, 51, 94,178,244,187,157,110,229,
- 37,185, 79,108, 90,255,213, 67, 75,150,126,253, 99, 75, 77, 27,131,193,248,215, 49,208,201,201, 41,174,115,231,206, 3,239,149,
-201,146,201,100,182,130, 32,180,210,104, 52, 87, 90,106,178,166, 76,153,242, 34, 33,228,195,148,148, 20, 0, 64,108,108,236,135,
-177,177,177,119, 29,231,208,193,193,161, 50, 50, 50,242,253,207, 62,251,236,203,198, 52,167, 79,159,238,109,177, 88, 2, 79,157,
- 58, 85,107,224, 2, 99, 98, 98, 2,239,182,173,157,157,157,208,165, 75,151,172,143, 63,254, 56,143, 93, 34,127,101, 4, 11,184,
-156,127,104,106,180,169,180, 10, 4,184,220,180,161,186,189,171,101,181, 69,248,244,251, 69, 79,205,110, 27,238,140, 10,157, 9,
-123, 14,101,194,194,155, 33,242, 60, 4,193, 2,225,214,223,129,221,220,208,157,159,132,197,235, 46,193,194,139,243, 26,211,252,
- 67, 68, 3,226,211, 29,250, 60,242,131, 64,169,220,206,134,171, 8,241,119,117,127,237,201,104,110,202, 99,109, 97,168,230, 71,
-182, 9, 36, 7, 47,102,210,239, 26,211,108, 27,228,252,236, 11,227,199, 19, 81,213, 22,201,199,118, 96,242,255,189,157, 81, 92,
- 82,246, 81, 86, 14, 78,109,221,247,107,128,191,167,235,204, 69,115,222,238, 16, 30, 61, 8,131, 56, 3,126, 61,124,232,105, 0,
-111, 54, 39,157,158,158, 68, 37, 26, 49,164, 75,231,142,239,175, 92,183, 77,197,233, 79, 3,217,171,225,228,212, 13, 75, 23,127,
-236, 49,108,196,232, 5, 0, 6, 88,163,105,167,180,196,247,122,224,105, 88,204,122,179,197,168, 51, 26,202, 82,205, 66, 85,161,
-153,147,113,210, 78,237,219, 20, 22, 20, 36,245,183,230, 28,217,217,217,141,234,222,189,187,122,245,234,213,136,141,141,133,147,
-147, 19,246,239,223,143,179,103,207,162,164,164,132,163,148, 66,173, 86, 99,238,220,185,240,243,243, 67, 69, 69, 5,178,178,178,
-156,101, 50,153, 75, 99,233, 84, 74,165, 99, 63,253,248, 99, 21,199, 1, 16,121,128,254,190,104,243, 11, 81, 89,105,128,147, 90,
- 14,119, 23,219,186,239,121,139, 73,210,113,240,235,147, 0,236,104,236,216,207,102,208,139,109,131,200, 81, 80, 62,156, 10, 6,
-128,226,232,133,235,180,206,244,180, 15, 37,109, 98,123, 63, 51, 81, 34,193,210,166,174,207,187, 17, 25,132,193,157, 34,212,118,
-182,150,139,200, 73,154,140, 12, 65, 73, 61,219,141,195, 99, 79,188,168, 90,186,108,233, 16, 66,200, 20, 90,111, 18,206,191,162,
-123, 49,211,100,154,247,131,230,232,209,163, 37, 0,176,126,253,122,225,223,152, 78,169, 84,106,254,250,235,175, 61, 38, 77,154,
-180,203, 90,147,213,228,243,168,102,254,174, 43, 0,172, 54, 89,119,106,102,100,100,124,244,209, 71, 31,225,167,159,126, 2, 0,
-172, 89,179, 6,173, 90,181,186,235,111,207,158, 61,107,247,214, 91,111,125, 4,224,203,198, 52,207,159, 63, 31, 52,103,206, 28,
-252,248, 99,205,204,100, 63,252,240, 3, 34, 34, 34,238,170,121,250,244,105,201,219,111,191, 29, 4, 32,239,175, 62, 71,247,173,
-193, 34,132, 80, 74, 41,105, 98,251,107, 94,246,178,104, 88, 44, 0,112,173,185, 59, 75,205,160, 11, 58,132,203,250,239,221,244,
-101, 79, 27, 5,135,247, 22,190,154, 83, 82,162,139,147,112, 16, 1, 64, 16,193, 57,218, 43,146, 62,122, 57,218,175,172,188, 26,
- 91, 15,230, 30, 78,189, 70,155, 21, 10, 61,119,133,238, 7,224, 93,247,128, 13, 38, 97, 99,223,222,187,242,199,143, 7, 70, 77,
- 27,211, 30,137, 7, 50, 95, 70, 19,225, 12,181, 74, 46, 33,249, 27, 81, 38,156, 69,151, 46, 67,113,226,196,245,208, 51,199, 18,
-191, 93,183,110,149,240,212, 99, 35, 37,173, 98, 71,161,170, 36, 13, 89,191,205,129, 46,107, 47, 28, 84, 82,153,181,233,115,119,
- 34,237,109,109,109, 95,244,247, 10, 72,152,254,230,116,105, 66,194,163, 54, 92,229,121,208,188,245, 16,205,122,136,149, 55,224,
-162,238, 12, 66,224,105,245, 91,146, 66,226,164, 86, 59,153,115, 47,172, 73, 51,235,175,153, 97,200, 23,104,149,150, 16,133,140,
-250,122,120, 65,194,241,142,214,232,216,218,218, 6, 21, 22, 22, 66,167,211,193,209,209, 17, 11, 23, 46,132,135,135, 7, 12, 6,
- 3, 46, 93,186, 68,125,125,125, 73, 82, 82, 18,124,124,124, 80, 86, 86, 6,147,201,132,170,170,170, 2,147,201,212,104,161, 81,
-109,230,191,122,229,181, 87,122, 5,248,122, 74,106, 35, 88,162, 40, 34,186,109, 48,250,245,238,138, 61, 23, 78, 34,241,108, 58,
- 68, 42,162,118,125,102, 78,113,165, 89, 20,126,176,186,240, 20,249,154, 72,232, 93, 12, 88, 75,162, 76,237,218, 17,149,160,199,
- 27, 93, 34,237,159,122,243, 73,127,181, 90,201,161,218, 70, 64,181,201, 2, 93,218, 18,184,250,181,135,202,198,134,196,196, 24,
-164, 0, 44,172, 40, 97, 48,254, 72,199,142, 29, 59,169, 84,170,169, 0,250, 24,141, 70,123, 81, 20,209,171, 87, 47, 29,199,113,
- 7,171,170,170, 22, 37, 39, 39,183,180,173, 76,237,179,138,222,203,244, 6, 4, 4,160,185, 38,171, 41,180, 90,173, 65,163,209,
- 52,203,100,213,167,168,168, 72, 18, 30, 30, 14,131,193, 0, 81, 20, 81, 89, 89,137,196,196, 68, 84, 84, 84, 64, 20, 69,216,218,
-218, 98,209, 94, 35, 42, 47,172,198,234,111, 62, 69, 81, 81,145,196, 10, 77, 18, 17, 17,129,234,234,106,240, 60, 15,163,209,136,
-221,187,119,195,104, 52,194, 98,177, 64, 38,147, 97,206,150,155, 48,158, 95,141,239,150,125,130,162,162, 34,242, 87, 95, 43, 86,
-122,144,255,158,193,170, 61,176,191,227, 0, 5,145,159,249,205,247,107,147,222,124,249, 49,188, 52,246, 1,223, 89,159,109,238,
-123,225, 26, 93, 3, 0,109,130,201, 19, 79, 62, 24,230,231,100, 39,195,172,165,201, 0,161, 51,255,236,254,206, 94,163,233,237,
- 90,145,255,219,124, 32,107,215, 91,227, 98, 16,234,235, 16, 26, 26, 74, 20, 25, 25,180,137, 1,195, 40, 94,122,231,115,240,150,
- 69,150,215, 38, 61, 44,235,210,247, 41, 68,119,223, 41, 41,189,190, 19,201,155,198,225,187,205,191, 85,201,164,176, 25,219, 91,
-102,245,104,248,110,142, 36,166,107,215,110,187,150,126,179,220,198, 83, 19, 74,136,165, 8,168, 56, 8, 62,127, 55,140,134, 98,
-152, 12, 58,152, 69,123,148,103,239,135, 82, 65,173,190,177, 45, 38,177,228,102,241, 85, 91,137,120,147, 68,180,113,233,137,178,
-253,128,243,104,100,158, 62,114,242,122,161,214, 94, 16,165,165,214,232,232,245,250,107, 22,139,197, 21,128,251,190,125,251,224,
-238,238, 14,157, 78, 7,179,217, 12,131,193, 96,113,118,118, 86,148,148,148,192,104, 52,194,104, 52,194,193,193, 1,201,201,201,
-122,158,231, 27,157, 67, 48,237, 26,221, 17,171, 33,158,251, 21, 80,215,126, 39,145,192,149, 55,155, 78,246,235,209, 14, 41,103,
- 46, 97,253,182,227,157, 4, 1, 37,181,235, 43, 41, 42, 50, 51,169,209,250,215, 83, 30, 84,248,189, 31, 67,109,227,247,150, 52,
-110,143, 12, 38, 29,149, 74,217,252,185,111, 61, 24,209, 39, 82, 80,146,234, 60, 16, 0, 42, 27, 41,140, 38, 1,142,222,161,160,
- 38, 29, 53, 84, 87,151,159, 63, 15, 30, 12, 6,227, 15,209,170,194,194,194,197,206,206,206, 35,199,142, 29,107,219,167, 79, 31,
-142,227, 56, 44, 92,184, 16,249,249,249, 14, 3, 7, 14, 76, 88,181,106, 85,191,222,189,123,111,244,240,240,152,108, 77, 84,171,
-222, 51, 75, 6,160,214, 68,208,171, 87,175,242,131, 6, 13,194,213,171, 87,185, 91,198, 75, 4, 96,110,105,251,200,127,163,201,
-202,203,203, 67, 81, 81, 17,250, 15, 29,138, 69,115,231,162,119,239,222,136,143,143, 7, 0,236,221,187, 23, 93,212,199,225,146,
-208, 27, 23, 47, 90, 95,212,221,184,113, 3, 37, 37, 37, 24, 50,124, 56,150, 45, 89,130,152,152, 24,180,110,221, 26, 0,144,148,
-148,132,126, 94,233, 80,135,245, 67, 90, 90,218, 95,126,189,252,157, 30,228, 31,137, 96,253, 93,156, 75,167, 39, 34,131,201, 47,
-143, 61,216,121,240,208,126,145, 88,190,110,223,123,145,145,100, 67,141, 1, 81,206, 28,251, 96, 8, 82,175,150, 97,223,113,237,
- 47,169,215,232,137,123,177, 79,158,135,159,167,171, 26,224, 20,168, 52,241,188,131, 3,172,190,241,206,101, 22,135, 61, 50,229,
-235,241, 83, 31,249,237,173, 41, 79, 68, 97,245,186,211, 88,240, 83,218,235,102, 51, 86,142,236,229,146, 13, 88,223, 22,205, 94,
-101,251,252,210,111,150,219,120,185,202, 9,178, 22, 65, 48,228, 64,168, 46,129,217,120, 19, 21,229, 55,145,147, 87,140,178, 42,
- 41,178, 10,136, 33, 55,223,180,218, 90,221,242, 42,233,207, 91, 55,204,123,106,212,200,177,174, 87, 78,124,115,108,203,126,131,
-251, 99,253,127,169, 84,216, 5, 56, 29, 60,177,215,185,220, 32,253,214, 26,157,234,234,234,141,191,252,242,203,163, 1, 1, 1,
-238,231,206,157, 67,117,117, 53, 68, 81,196,224,193,131,129,122, 19, 96,166,165,165, 85, 27, 12,134,194, 11, 23, 46,232,179,179,
-179,171, 0, 44,110, 74,251, 86,131,245,186, 66,165, 77, 16, 25, 29, 25,238, 13, 8, 6,180, 9,243,130, 69, 64,223,139,215,233,
-231, 45, 62,201,212, 82, 19,193, 34,232,222, 54,136, 44, 6, 65,247,228,253, 11,195, 59,246,155,134,230, 68,176, 34, 67,201,128,
-168,112,205,210,133,115,222,116,118,113,247,147, 64, 48,128, 89, 13,222, 77, 0, 0, 32, 0, 73, 68, 65, 84,240, 21, 84, 44, 61,
- 6,105,229, 21, 56,248, 62, 8,193,177, 59,150,126, 57,191, 82, 16,232,250,250,213,131, 12, 6,163,206, 80,188, 19, 30, 30, 62,
-234,243,207, 63, 87,157, 57,115, 6,149,149,149, 56,126,252, 56,230,205,155,135,145, 35, 71,194,215,215,151, 75, 76, 76,180,123,
-249,229,151, 71, 93,190,124,185, 8,192,172, 38, 30,192,110,174,174,174, 78,197,197,197, 90, 0,242, 91, 38,139,100,102,102, 34,
- 41, 41,137,139,142,142,166,133,133,133,252,148, 41, 83,156,244,122,125,251,207, 62,251,236, 48,128,130,251, 37,146,181,113,227,
- 70,156, 62,125, 26, 51,163,163, 49,205,219, 27,174,174,174, 56,120,240, 32, 40,165,176,179,179, 67,105,105, 41,126,252,241, 71,
-196,197,197, 89,157,158,159,127,254, 25, 39, 79,158,196,251, 29, 58,224,101, 27, 27, 56, 58, 58, 34, 41,169,166,195,190, 82,169,
- 68, 78, 78, 14,246,239,223,143,222,189,123,179, 11,186,133, 88, 29,125,137, 35, 68, 74, 8, 60, 45, 22, 3,204, 60, 5, 33,240,
-142,140, 36,242, 22,185, 58, 14,239, 45,254,118, 27, 85, 74,204, 24, 63, 42,214, 27, 6,140,135, 1,227,199, 13, 15,215,168,148,
- 82,124,182, 46,149, 74, 57,188,119, 47, 14,176, 93, 16,105,229,226, 96,243,238,131,113,109,145, 93, 96,192,181, 27, 21,187, 82,
- 82,172, 31,183,233,218, 53,148,229,104,177, 72,111,226, 33,145, 72, 81,110,160,200,201,193,183,133,133, 48, 54, 55, 45, 18, 41,
- 25,224,169, 9, 37,180, 32, 17,198,155,151, 80,121, 51, 7, 37, 37, 57,208,149,151,160,178, 74, 7,157,174, 10,121,185, 90,236,
-252, 77, 91,198, 87, 11,135,173,213,253,105,119,213, 91,167, 78, 29,190,116,226,216,110, 59, 7,247,246,206,145,129, 74,209,206,
- 94, 99,127,240,120,170,163,182,176, 58,237,167,157, 85,214,230,229,226,141, 27, 55,150,157, 58,117, 42,205,215,215, 55,219,209,
-209,145, 18, 66,144,151,151,119,219,146,156,156,172,220,185,115,103, 85,118,118,246, 22, 0, 9,205, 29,162,161,125, 40,105,211,
-175, 91,171,217, 67,226,162, 0,193,128,132,184, 54,232,221, 41,104,118,251, 80,210,166,197,254,138,214, 84, 17, 30, 93,211, 47,
-252,232,234,158,227,142,172,236, 18,110,202,253,161,217, 58, 68,196,203,211, 30, 13,116,112,177, 53,113, 68,208,131,200, 28, 1,
- 85, 40,225,124,159, 32,178,152,149, 36,187, 42, 64, 24,245,196, 99, 69,203,126,216,246,149,155,136, 69,172, 8, 97, 48,238,242,
- 96,225,184,113, 99,198,140, 81,217,218,218,194,198,198, 6,171, 86,173,194,243,207, 63, 15,165,178,166,207,146, 74,165,130,173,
-173, 45,198,140, 25,163, 34,132, 60,107,133,100,105, 69, 69,133,122,196,136, 17,126, 0, 84, 0,236, 76, 38,147,186,184,184,216,
-129,227, 56,199,182,109,219,122,204,156, 57, 51, 92,175,215,183,223,186,117,107, 33,128,226,150,164,187,188,188, 28, 87,175, 94,
-197,142, 29, 59, 48,113,226,196, 74,158,231, 21,106,181,122,250,159,140,206,200, 60, 61, 61, 85, 26,141,198,149, 82,218,154, 82,
-202, 81, 74,253, 91,162, 37, 8, 2, 58,118,236,136,189,191,158,196,210,245, 71, 48,255,203,149,200,206,206, 70, 68, 68, 4, 68,
-177,229, 29,154, 59,117,234,132,253,251, 15, 97,245,150, 19,152,183,240, 43,228,228,228, 52,216, 38,139,209,204, 8, 86, 83,161,
-185,200, 32,210,206, 51, 74,185,252,237, 97, 33, 17,210,182,239,129, 72,109,177,233,187,173,221,222,252,232,235, 83,237,125,201,
-184,179, 57,180, 89,245,232,103, 51,232,197,182,193,100,253,153,212,136, 71,134,245,246,195,178,245,170, 55, 0,224,145,254,193,
- 56,145, 90,132,227,231, 11,215, 95,184,214,178, 49,139,106,137, 8, 38,161, 28,197, 83,109, 66, 60, 39, 44,156, 49, 74,229,238,
-166,194,156,175,146, 33, 2,171,173,191,152, 1, 0,190, 0,202,127,143, 83,144,218,104,142,147, 32,162, 89,161, 76,142,208,221,
-249, 89,103, 30,117,229, 92,136,190,162, 24,249,218, 27,208, 85,232,225,228, 32,131,163, 74, 2,141,183, 7, 84,142,190, 16,165,
- 69, 78,151,174,233, 59, 3,176,122,224,205, 10,139,252,133, 35, 71,246, 28,238, 17, 61,161,186, 77,144,140,151,202, 36, 54, 39,
- 83, 51,149, 58,131,252,101,107, 53, 40,165, 60, 33, 36,225,208,161, 67,147,143, 30, 61, 58,194,219,219,155,140, 29, 59, 22,131,
- 6, 13,130, 82,169,132,193, 96, 64, 89, 89, 25,182,111,223, 78,120,158,239, 14, 0,222,222,222,254,129,129,129,223, 17, 66,114,
-175, 95,191, 62,214,154,253, 40, 20,138,249,239, 78, 30, 34,227,205,122,204, 90,188, 29,239,190, 20,143,153, 47,197,201, 18, 38,
-230,206, 7, 48,176, 69, 39, 92,228, 33, 10,213,232,254,228,175, 53,189, 8, 9,186,159,220,245, 65, 56,112,218,106,137,216, 88,
- 34,147, 72, 73,235, 54, 62, 70,153,144,187, 14,196,198,135, 74, 92,251, 0,234,112, 66,213, 81,248,226,179,119, 43,151, 47, 95,
-190,151,114,152,147,154, 73,211, 88,241,193, 96,220,157,202,202,202, 73,239,191,255,254,202,208,208, 80,219,168,168, 40, 44, 89,
-178, 4, 67,134, 12,169, 51, 87,237,218,181,195,141, 27, 55, 48,107,214,172,234,170,170,170,231,173, 40,155, 68, 66,200,197,164,
-164,164,136,132,132, 4,239,222,189,123,147, 54,109,218,200,148, 74,165,104, 52, 26,237,242,242,242,148,105,105,105, 72, 78, 78,
-190, 90, 93, 93,125,142, 82, 42,180, 36,221,179,102,205,170,116,115,115,179,155, 58,117, 42, 62,249,228,147,220, 95,127,253, 53,
-230,207,230,133,183,183,119, 16,199,113, 98,110,110,238,117, 31, 31, 31,239,156,156,156, 22, 53, 14,175, 13,150,159, 61,123, 22,
-135,210, 69, 40,236,156,145,153, 86,129,189, 63,111,193,152, 9, 19,193,243, 45,111,173,112,250,244,105,172,217,157, 6,175,160,
- 8, 84,167,157,198,198,141, 27,241,252,243,207,255, 41,205,102, 30, 27,185,111,219, 96,213, 30,224,157, 43, 67, 67,137, 66, 97,
-196, 91, 3,187,249, 76, 27,245, 64,168,132,175,202,131, 40,138,144, 0,112,179,231,240,237, 55, 75,131,214,111,254, 37,169,157,
-191,100, 9, 76,226,172,115, 5,180,202,106, 87, 47,197, 7, 11,190, 63,242,240, 15,179,251, 72,159, 31, 29,225, 12, 0,114, 25,
-135,197,107, 47,240, 68,138, 15,154, 25,165,234, 41,149,113,107, 44,148,218, 82,129,102,251,120, 57,219, 61, 60, 32,214,231,161,
- 1, 29,209,190,141, 63, 68,222,140,247,191, 76,196,250, 29,103,191, 76,187,222,120,183,255,219, 76, 90,144, 19, 78,106, 10, 94,
-227,164,248,128,212,179, 87,158,158,144,203,165,152,218,202,207, 70,129,102, 52,193,209, 85, 25,190,122,115,250,212,248,183, 95,
- 26,230, 98,214,169,200,149,204, 50, 64,168,134,157,173, 26,106,175, 94,112,114, 8, 67,117, 69, 30,228,210, 20,149,167, 91,206,
-232,230, 24,172,205, 59,116,233, 47,141,109, 45,121,239,243,147,110,166, 42, 80,222,156,194, 85, 85, 19,186,113, 79, 69, 70, 51,
- 47,116,139,175,175,239, 68, 81, 20,221,121,158, 55,187,187,187,203,127,250,233, 39,216,216,216,128,227, 56, 68, 71, 71,195,198,
-198,198,164,209,104,202, 1,192,195,195,195,178, 96,193, 2,233,184,113,227,172,138,102, 70, 6, 19,191, 17, 3,218,246,112,117,
-144, 96,229,230,163,216,178,247,226,150, 32, 31,187,225,207, 14,111,139,184,206, 62, 61, 34,131,137, 95,234, 53,122,163,249,119,
-168, 5,245,123, 17,182, 15, 37,109, 58, 13,120,231,174,189, 7, 27, 34,232, 20,196,203, 33, 20,132, 72, 64, 65,128,234, 92,240,
- 57,171, 33, 9,126,153,110, 78,252,192,176,236,155,229, 31,165,102, 82, 22,181, 98, 48,154,224,204,153, 51,191,116,238,220,249,
-141,177, 99,199,206, 29, 59,118,172,226,233,167,159,150, 28, 59,118, 12,162, 40,162, 99,199,142, 88,190,124, 57,191,110,221, 58,
-139,209,104,156,126,230,204,153, 95,172, 44,155,140,132,144, 51,219,183,111,119,185,120,241,162,139, 76, 38,115, 19, 69,209,169,
-170,170,170,216,100, 50,149,148,149,149, 21, 2, 40,107,105,181,125,117,117,181,205,197,139, 23,143,155,205,102,205,212,169, 83,
- 91,199,199,199,135,199,198,198,118, 78, 73, 73,105,113, 83, 21,142,227,228,162, 40, 26, 40,165,182,181,187,113,119,119,183, 43,
- 42, 42,170,108,137,158, 68, 34, 65, 89, 89, 25,116,185, 25,168, 42, 46, 70,107, 73, 21, 58,184,184,195,222,222, 30, 22, 75,203,
-251,218,232,245,122, 40,249, 28, 92, 63,121, 29,197,197,153, 8, 11,234, 0, 59, 59, 59, 24,141,198,191,237,154,185,223,204,213,
-109, 6,235, 15, 15, 66,127, 50,222, 89,142, 79,158, 30, 29, 44, 15, 14,244,129,169, 40, 25,167, 51, 42,241,206,138,206,105, 18,
-185,189,241,165,167,250,119,232, 27,239,142, 62,113,157, 72, 96,192, 59, 47,206,157,251,213,196, 72, 63,242, 86,234, 13,250,165,
- 53, 59, 62,127,133, 94,111, 19, 68,190, 79, 58,153,251,156,175,155, 1, 20, 20, 73,201,121, 56,155, 94,246,253,197,235,244,122,
-179, 46, 58, 57,183,234, 84,202, 57, 23,240, 6,228,103,252, 18,238,229, 21, 8, 80, 11, 44, 38, 3,142,157, 58,143,229, 63, 38,
-241, 39,207,102,254,223,197, 76,106,213,195, 54, 61,251,230,222,140,156,242,248,247, 39,117,198,224, 30,254, 79,127,180, 34,229,
-177,186,206, 42,148, 98, 80, 71,167,139, 99,250,218,171,108,165, 38,240, 80, 32,229, 74,249, 30,107,116,243,138,233, 41,111, 55,
-242,240,217,179,103,158,241,241,114,140, 31,220,201,214,205,221, 1,114,123,183, 64, 40,236, 92, 32,242,122, 84,149, 94, 6, 21,
-170, 65, 32, 6, 55, 39, 15,252,252,252,122, 78,157, 58,213,102,226,196,137,208,235,245, 88,185,114, 37,150, 44, 89, 2, 63, 63,
-191,158, 55,110,220, 56,220, 28, 45, 81, 20,221,183,110,221, 10,212,180,117,192,190,125,251,160,209,104,224,232,232, 8,157, 78,
-135,177, 99,199, 42,102,204,152, 1, 0, 56,117,234,148,204,214,214,182, 25, 55, 17, 70, 15,234, 17, 76, 32, 24,176, 97,231,133,
- 18,216,224,153, 77,123, 46,245,120,118,104,176,235,224,174,222,100,251,193,235,163, 1,124,218,252,155, 83, 0, 68,195,109, 81,
- 82, 52,179,247,224,122, 74,133,200, 96,114,117,221,158, 34,187, 81, 67, 98,108,229, 50,142,208,234, 28,136, 68, 78, 22, 45,249,
- 86,111, 39,197,183, 96, 48, 24, 86,113,226,196,137, 21, 93,187,118,253,237,187,239,190,123,149,227,184, 30, 70,163,209, 29,128,
-184,123,247,238,124, 65, 16, 14, 25, 12,134,197,201,201,201, 87,154,249, 16,166, 0, 74,110, 45, 87,238,101,122,165, 82,233,143,
- 21, 21, 21,179, 5, 65, 24,181,107,215,174,249, 35, 70,140,192,207, 63,255,252, 44,238, 62, 82,184,181,101,105, 69, 94, 94,222,
-117, 95, 95, 95,183,128,128, 0,183,202,202,202, 2,165, 82,233, 5, 32,163, 37,122, 74,165, 18,135, 14, 29,194,224,158,189,112,
-102,111, 22, 34, 60,253,208,119,204, 83, 72, 76, 74,130, 68, 34,105,233,113,227,208,161, 67,120,120, 72, 95,108,218,180, 9, 65,
- 49, 81,120,233,165,151,176,123,247,110, 72,165,108, 54,189,191,196, 96, 17, 17, 51,246,252, 56, 71, 14,209,130, 13,107, 62,193,
-222,147, 85,166,180, 28,188,215, 58, 23, 95,110,128, 78, 44, 40,217,248, 92,151,131, 87, 63,124,246,233, 4, 85,191, 62,253,209,
-175,119, 95,105,219,232, 62,111,160,222,248, 27,132,144,168,198,198,202,160, 34,230, 46,219,152, 54,110,221,142,203, 4,188, 14,
-143, 13,235, 68,169,136,185,141, 70,190, 26,210,228, 13, 64,249,113,108,219,123, 20, 26,207, 92, 92,185,150,133, 77, 59,142,223,
- 40,215, 85,253, 64, 8, 86, 95,204,108, 56, 42,114,167,102,137,206,244,226,160,151,183,125,241, 72,255,144,254,211, 30,111,143,
- 45, 11, 30, 84, 92,211,150, 67, 16,120,244,111, 79, 65, 34, 20, 42, 17, 2,142,102, 72,233,178,109,185,137,122,147, 48,205,218,
-116,230, 21,211, 20, 0, 41,193,206,196,225, 66, 58, 6,143,232,229,241, 97,215, 24,193, 67, 95,144,130,188,236,116,220, 52,216,
- 32,167,132, 0, 20, 87,173, 62,118, 0, 55,110,220, 56,220,169, 83, 39, 0,128,193, 96, 64, 78, 78, 14,120,158,135, 86,171, 61,
-220,220,252,228, 56,174,104,200,144, 33,238, 70,163,145,127,252,241,199,165,197,197,197, 8, 15, 15,175,137,194,233,116,248,229,
-151, 95,234,122,155, 92,184,112, 1,145,145,145, 86,167,211,221,201,118, 76,199, 72, 23, 92,184,156,141, 44,109,197,218,212,107,
-212, 28, 25, 76,214,158,189, 84, 48,185,123, 7, 15,184, 56, 40,198,220,205, 96, 53,164,217, 62,148,180, 1, 65,119,136,150,154,
- 94,132, 4,221,219,135,146, 54,214,244, 28,188,155,166, 84,138,103,231,255,152, 57,125,253,193,162,132,255,123,174,151,125,143,
-110,131, 21, 16, 45, 84, 95,101,180, 92,184, 70,117, 45,209,252,179, 48, 77,166,249, 95,213, 60,118,236,216, 37, 0,207,253, 23,
-142,125,255,254,253, 83, 1, 32, 54, 54,118,221,166, 77,155,230,172, 92,185, 82,161, 86,171, 59,253, 25, 77,173, 86,123,249,214,
-118, 69, 26,141,166, 77, 73, 73,201,121, 95, 95, 95, 69,115, 52,101, 50, 89, 81,251,246,237,221, 31,122,232, 33,240, 60,143,244,
-244,116,100,101,101, 97,232,179,207,192,217,217, 25,199, 83, 83,145,158,158,142,119,223,125, 23, 70,163, 17,215,175, 95, 47,106,
- 74, 83, 46,151,155,163,162,162,228,195,134, 13, 3,207,243,200,200,200,192,141, 27, 55,240,242,203, 47,195,209,209, 17,151, 46,
- 93, 66, 70, 70, 6,102,204,152, 1,163,209,136,172,172, 44,243,223,113,142,254,103, 12, 22, 37, 16, 32, 90, 80,126,114, 38,190,
-222, 6,179, 69, 64,204,133, 28,154, 89,111,147,101, 29,252,200,142,179,231,211, 82, 83,142,247, 83,160,226, 28, 40,208,172,122,
-239,180, 44,154,223, 41, 66,170, 7,175,179, 71,209, 47,184,166,213, 85,166,181, 96,218, 25,193, 44,142,237,208,185,235, 90, 17,
- 84, 46, 10,116, 61, 15,236,151, 82, 92,187,112, 29,169, 45, 9, 23,231,228, 80, 45,128,135, 2,125, 73,239,173,135, 50,231,142,
- 27, 26, 17,245,252,168,182,168,170,212, 65, 70,171,113, 62, 95,129, 47,126, 46, 56, 89,162, 51,189,126,227, 6, 77,105, 73,198,
- 95, 43,163, 21, 0,214, 69, 4, 74,169,206,112,225,237,135,251, 6, 4, 17,184,161,160,168, 28, 27,147,242,142,105, 75, 27,239,
- 85,211, 64, 4, 11,147, 38, 77,130, 78,167,195,186,117,235,176,107,215,174, 22, 69,176,114,114,114,194, 0, 64,163,209, 20,216,
-219,219, 75,159,121,230,153,218,161, 26, 80, 81, 81,129,146,146, 18,211,212,169, 83, 21, 0,160, 80, 40, 44,131, 6, 13,178,250,
- 53, 39, 44,192,209, 71, 10, 35, 18,247, 93, 6,164,248,241,214, 85,248,227,150, 3, 89,147,219,183,114, 65,152,191, 67, 72,172,
-134,216, 90, 51, 77, 14, 80, 51, 85,206,201,157,179,194,171,175,204, 0,165, 22, 28, 90,226, 28,222,235,249,178,137,104,225, 8,
-235,103,175, 80, 45,128,201,145, 65,100,197,148, 15,119,190,209, 49, 42,181,251,107,147,134,219, 83,194, 38, 70,103, 48,254, 23,
- 72, 73, 73,169,136,142,142,126,166, 95,191,126,211,244,122,253,130,123,161, 73, 41,229,189,188,188,242,188,188,188,194,205,102,
-115,179,230, 50, 53,155,205, 47,127,241,197, 23,159, 91, 44, 22,247,218,239,140, 70, 35,214,172, 89, 3,179,217, 12,185, 92, 14,
-149, 74,133,140,140, 12, 72, 36,146, 34,158,231,155,108,119, 43,138,226,213, 47,191,252, 50,196,108, 54,215, 53,237,224,121, 30,
-171, 87,175,134,209,104,132, 82,169,132, 90,173, 70,122,122, 58,228,114,185, 89, 20,197,171,236,202,104,129,169,111,200,127, 68,
-250,147,241,160,120, 11, 20, 4, 28, 62,108,104, 98,231,186,237, 0,220, 57, 1,180, 53, 14,183, 93, 56,233,171,144, 72, 86, 2,
- 64,181, 40,140,187,112,137,238,249, 55,189,217, 16, 66, 72,128, 47, 70,123,187,217, 45,126,109, 76,180,221, 39, 63,156,169,204,
- 43,173, 28,151,157, 77,183,223,171,116,250,123,146, 32, 31,103,188,161, 84,192,137,231,145,154, 89,132,213, 55, 10,233,181,230,
-106,106, 52,154,170,128,128, 0,184,184,184,160,180,180, 20, 89, 89, 89,208,106,181,170,150,166,211,199,199,167, 43, 33,100,179,
- 40,138, 54,119, 70,184,106, 77,152,183,183,183,191, 66,161,184,173,145,123, 99,154,109, 67,201,156,168, 80,231, 73, 23,174,150,
-175, 62,159, 46,212,153,160,200, 32,242,126, 76, 27,183, 23,206,165,151, 46, 59,123, 69,120,179, 57, 17,172, 59, 39,123,182,118,
-236, 43,171,174,207, 96,210, 79,164,152, 2,130,188, 11,215,232, 36, 22,201, 96,154, 76,147,105, 50, 77, 22,193,178,214, 89,255,
-101, 11,128,168,251, 69, 19,128, 52, 48, 16,173, 0, 40,254,229,233,124, 27, 64, 21,128,183,255,173,233,140,137,129,236,127,249,
- 90, 98,154, 76,147,105, 50, 77,166,121,255, 47,172,218,163, 25, 33, 94,220,227, 70,149,127, 81, 58, 63, 4,240,225,191, 59, 4,
- 79,217,212, 50, 12, 6,131,193,184,175,225, 88, 22, 48, 24, 12, 6,131,193, 96,220, 91, 8,128,168,187,173,104, 78,221, 42, 33,
- 36,170,185, 59,110, 74,159,105, 50, 77,166,201, 52,153, 38,211,100,154,247,159,102, 83,218,247, 75,219, 46,242, 87, 78,165,198,
- 26, 0, 50, 77,166,201, 52,153, 38,211,100,154, 76,243,127, 17, 86, 69,200, 96, 48, 24, 12, 6,131,193, 12, 22,131,193, 96, 48,
- 24, 12, 6, 51, 88, 12, 6,131,193, 96, 48, 24,204, 96, 49, 24, 12, 6,131,193, 96, 48,152,193, 98, 48, 24, 12, 6,131,193,248,
-215,240,151,246, 34,100, 48, 24, 12, 6,131,193,248, 95,132, 3, 0, 66, 8,189,181,244, 97, 89,194, 96, 48, 24, 12, 6,227,239,
-226,126,245, 32,117, 83,229, 80, 74, 9, 33,132,162,102,240, 81, 6,131,193, 96, 48, 24,140,191,133,251,209,131,112,245, 29, 36,
-128, 56,118,154, 25, 12, 6,131,193, 96,252,157,220,143, 30,228,182, 8, 22, 59,197, 12, 6,131,193, 96, 48,254,110,238, 71, 15,
-194,122, 17, 50, 24, 12, 6,131,193, 96,220, 99, 88, 47, 66, 6,131,193, 96, 48, 24,140,123, 12,139, 96, 49, 24, 12, 6,131,193,
- 96,252,151, 12, 22, 33, 36,138,105, 50, 77,166,201, 52,153, 38,211,100,154, 76,147, 25, 44, 6,131,193, 96, 48, 24, 12, 6, 51,
- 88, 12, 6,131,193, 96, 48, 24,204, 96, 49, 24, 12, 6,131,193, 96, 48,131,197, 96, 48, 24, 12, 6,131,193, 96, 6,139,193, 96,
- 48, 24, 12, 6,227, 31,130, 0,184,107, 79, 0, 74,233,121,171, 69, 90,208,155,160, 41,125,166,201, 52,153, 38,211,100,154, 76,
-147,105,222,127,154, 77,105, 55,199,127,252,171, 13,214, 95, 57,208, 40, 33, 36,234, 94,103, 20,211,100,154, 76,147,105, 50, 77,
-166,201, 52,239, 63,205,251, 13, 86, 69,200, 96, 48,254,215, 8, 99, 89,192, 96, 48,254,106,164,255,212,142, 9, 33, 92, 61,131,
- 39, 2,160,244, 79,134,211,254, 10,205,127, 43, 4,224,218,204,154, 37, 85,230,229, 53,235, 28, 26,189,189,249,139, 51,103,242,
-180, 38,127, 24,140,255, 28,233,229,135,234,254,111,229,212,155,212,220, 14, 0, 0,122,229,230,175, 13,222,239, 97,142,189, 88,
-230, 49, 24, 13,144,156,156, 92, 21, 16, 16,128,118,237,218, 93,201,207,207,255,138, 82,186,140,229,202,191,200, 96,181,241,180,
-237, 28,224,235, 54,104, 71,114,246,123,141,109, 23, 27, 27, 43, 75, 72, 72, 88, 6, 96, 84,253,239,135, 14, 29,122,219,118, 50,
-153,172,164,172,172, 44,248,192,129, 3,124, 83,251,142,141,141,149, 37, 12, 29,250, 71,205, 97,195,254,160,153,237,226, 18,114,
-106,233, 82,190,222,151,132, 0,132, 2, 20, 0,194,195,195, 15,115, 28,231, 67, 8,105,200,200,213,253,207,113, 53,126, 78, 20,
-197,220,212,212,212,158, 77,165, 83,163,209,196, 3,120,213,138,236,156,175,213,106,247, 54,182,129,195,158, 61, 25,148, 82, 39,
-137, 68, 98,213,249, 17, 4, 1,242, 11, 23,110, 98,230,204, 64,118,233, 51,254,235,180,114,234,205, 13, 29, 58,180, 31,128,186,
-235,249,245,167,230,255, 97, 59,137, 68, 98, 76, 76, 76, 92, 77, 41,101, 47, 21, 12, 70, 3,236,217,179, 7, 19, 38, 76,192,185,
-115,231, 90,237,216,177, 99,145, 70,163,153,152,151,151, 55,136, 82, 90,204,114,231, 31, 54, 88,225, 26,251, 86, 30,174,174, 27,
- 63,250,224,125, 0,120,175, 49, 35,228,237,237,189,204,207,207,111,208,130, 5, 11,176,109,219, 54, 4, 5, 5, 65, 46,151, 67,
- 34,145, 64, 34,145,128,227, 56, 72, 36, 18, 76,157, 58,213,233, 86, 26,249,166,204,149,183,183,247, 50, 95, 63,191, 65,243,231,
-207,199,142, 29, 59, 16, 16, 16,112, 87,205,105,211,166, 57, 1,144, 1, 16,234, 4,228,242,218,183, 96,122,203, 52,249,156, 58,
-117,202,221,198,198,166,230,181,152, 82,136,162,120,219, 66, 41,173, 91, 4, 65, 64,175, 94, 86,191, 29,191,154,150,150,214,179,
-178,178,242, 54,141,218,125,212,254,127, 75,175, 81,131,101, 50,153, 92,147, 79, 28, 6, 49, 95, 3,132, 82, 80,206, 5, 80, 4,
- 3,156,242,174,219,151,150,150, 98,224,192,129,174,236,178,103,220, 15,230, 42, 33, 33,225,129,176,176, 48,205,156, 57,115,144,
-145,145,129,240,240,112, 8,130, 0, 81, 20,111,251, 59,118,236, 88,197,168, 81,163, 8,203, 53, 6,227,118,252, 71, 44, 91, 68,
- 5,203,248,154, 79, 78, 0,190,129, 78,167,195,115,207, 61,135, 45, 91,182,180,238,218,181,235,108, 0,147, 88, 78,253,131, 6,
-171,149,175,173, 70,165,176,219,186,244,235, 47,136, 69,151,239,212,208,118,132, 16,110,200,144, 33, 95,249,250,250,246, 95,176,
- 96,129,157, 92, 46,199,165,113,227,112,179,186, 26,166, 79, 62,129,147,155, 27,194, 39, 78,132, 43,207,131, 63,115,198,170,125,
-215,215,156, 63,127,190,157, 92, 46, 71, 78, 78, 14, 76, 38, 19, 60, 60, 60, 96,107,107, 11,133, 66, 81,183, 88,169, 9, 27, 27,
- 27,236,217,179, 7, 82,169,180,110,145, 72, 36,119,253,236,233,233,217,156,236,154,223,186,117,235,118,233,233,233,246,165,165,
-165,232,218,181,171,142, 16,114,174,118, 37,165,180,221,185,115,231,236,173, 21, 35,230,107,168,204,254, 26, 98,217, 70,192,233,
- 97, 8, 14,143,162, 26,193,119,125,208,136, 34,123,129,103,220, 23,230,138, 12, 25, 50,164,111,104,104,168,247,156, 57,115,100,
- 50,153, 12,167, 79,159, 70, 97, 97, 33, 92, 93, 93, 97,107,107, 11,153, 76, 6,137, 68, 2,153, 76,198, 50,140,193,104, 0, 42,
- 88,198, 71,119,236, 94,247,121,229,158,197, 48, 58,198, 32,247,189,247,176,104,209, 34,180,106,213,170, 35,203,165,127,208, 96,
- 69, 7, 58, 57, 42,168,124,235,138, 37, 11, 20, 48,235,157, 46,157, 60,130,182,131, 39,214,154,133,243,245, 76, 11, 1,192,201,
-100,178, 71,230,205,155,199,201,229,114, 0, 64, 71, 65,128,198,108, 70,121,100, 36,108,157,156,224,111, 54, 3,102, 51,140,183,
-214,255,225,130,176, 66, 83, 34,145, 64, 46,151, 67, 42,149, 66, 38,147, 65, 46,151, 55,110,176, 42, 43,239,218, 19,162,214, 68,
-237,217,179, 7, 22,139, 5,163, 70,141,186,171,217,106, 42,157,245,209,106,181,123, 53, 26,205, 57, 81, 20,123,138,162, 8, 66,
-200, 57,173, 86, 59,176,118,189, 70,163,137,111,223,190,253,171, 0,230, 91,165, 41,148, 66, 44, 93, 11,251,110,197,168,248,205,
- 13,196, 46, 30, 2, 2,112,244,108, 22, 14,166,100,161,168,180, 2, 81,193,110,120,100, 96,212, 93, 13,214, 95,209, 11,132,105,
- 50,205,191, 88,147,200,229,242,192, 57,115,230,144, 90, 3, 85, 27,161,174, 53, 86,181,255,215, 86,225,223,161,185,145,229, 39,
-211,100,154, 0,145,200,150,157, 73, 62, 58, 30, 0, 42, 46,110,194,148,199,187, 67,167, 75,199,164, 73, 51,144,155,155,139, 43,
- 87,174,156,254, 59,211,121,223, 26, 44, 66, 8,165,148, 54, 43,140,238,235, 75,108,236,121,213,198, 47, 23,125,228, 96,111,175,
-114, 75,222,157,136,172,172,252, 70,127, 35,138, 34,253,229,151, 95,112,121,252,120,116,224,121,148,205,155, 7,162,209,160,237,
-240,225,144,155,205,168, 56,113, 2,114,181, 26, 10,181, 26, 13,181,129,106, 72, 51, 71,171,133, 84, 42,133, 90,173,134,157,157,
- 29,148, 74,101,157,177,146,203,229,144,203,229, 86,107, 82, 74, 33,149, 74,113,254,252,121,100,101,101,193,201,201, 9, 71,142,
- 28, 65,124,124,252,109,230, 74, 34,145,128, 16, 98,181,110,125,125, 65, 16,238,106,192,208, 68,213,224,237,103,208, 21,112,121,
- 18,186, 99, 26,192,121, 12, 44,212, 9, 34, 21,145,124,169, 0, 95,207,122, 18, 0, 16, 51, 98, 22, 70,245,143,100, 17, 44,198,
-125,131, 32, 8,184,124,249, 50, 46, 94,188, 8,137, 68, 2, 7, 7, 7,216,217,217, 65, 38,147,213, 45, 28,199,177, 8, 22,131,
-209, 8,217,155,199, 79, 37,132,204,245,247,247,223,245,213,156, 57,161,241,241,241, 0,128,189,123,247,226,187, 39,158,192,123,
-192,227,139, 9,201,159, 76,233,187,127,117, 90, 90,226, 65,254, 19, 6,171,246,192,154,115,128,132, 16, 18,234,233,240,195,172,
-183, 95, 12, 12, 8, 14,241, 60,190,253, 39, 92,187,150,139,130,130,178,134, 12, 5, 37,132,136, 0,104, 96, 96, 32,202,170,171,
-161, 49,153, 32,209,104,160,118,117,133,244, 86,228, 74,102,103, 7,185, 90, 13,121, 3, 17,172,198, 52,171, 77, 38, 40, 20, 10,
-168,213,106,168,213,106, 40,149, 74,200,235,153, 43,107, 52,235,153, 54, 72,165, 82,156, 61,123, 22, 61,123,246,132,159,159, 31,
-126,252,241, 71, 12, 28, 56,240, 15, 81,172,230,154,171,187, 25,172,122,141,223,155,108,220,126, 27,138, 80,240,246,143,128, 83,
- 61, 0, 51,117,128,145,122,215, 84, 9,242, 34, 62,221,116, 13,151,179,139, 33, 8, 98, 93, 53, 33,131,113, 31, 64, 9, 33, 52,
- 34, 34,130,148,148,148, 64, 38,147,213,153,171,214,173, 91, 35, 55, 55,183,206, 92,213, 70,180, 24, 12,198,221,145, 72, 36,179,
- 19, 19, 19, 67,109,108,108,240,225,135, 31,194,222,222, 30,199,102,207,198,183,114, 57,108, 1,124,101, 54,191, 10,224, 47, 53,
- 88, 45,241, 32,255,169, 8, 86,115,241,241,241,249,168,107,207,174, 61,131,219,116, 82, 30,223,185, 9,233, 87,178, 80, 92, 92,
- 14, 74, 97,104,172, 96, 4, 0,153, 76,134,170,247,223, 71, 89,187,118,136, 26, 57, 18, 82,179, 25, 21,199,142, 65,174, 86, 67,
- 21, 19, 3, 98, 50, 65, 86, 80, 96,117, 97, 91,171,233,238,238, 14,185, 92, 14,165, 82, 9, 27, 27,155,154, 8, 86, 61,115,213,
- 92,131, 85, 81, 81,129,235,215,175, 99,194,132, 9, 80,169, 84, 32,132,160,176,176, 16,254,254,254,144, 72, 36,200,205,205,197,
-254,253,251, 17, 20, 20, 4,133, 66,209,172,139,162, 94,227,246,118, 26,141,102, 23,165,180,221,169, 83,167,236, 99, 99, 99,209,
-172, 8, 22,145,195,136, 0, 8,240,133, 72,127, 55, 82,150,122,102,138, 82,214, 6,139,113,255,112,229,230,175,244,255,158, 94,
- 0, 0,112,119,119,175, 51, 82, 33, 33, 33,183, 69,174,152,185, 98, 48,154,166, 85,171, 86, 29,124,124,124, 48,117,234, 84, 84,
-175, 93, 11, 61,128, 4, 0,137,102, 51, 0, 64, 13,188,201,114,233,111, 52, 88,126,126,126,147,162,163,163,159, 89,246,253,106,
-187,185, 51, 94,215,149,167,158,231,140,213, 38,187,106,139,197,116, 77, 91,250, 85, 99, 17,167, 97,195,134, 65, 34,145, 64,237,
-236, 12, 91, 71, 71,200,107, 35, 87, 42, 21,228,106, 53,136,201, 4,106, 50, 65,110,101,104,191,190,166,141,141, 13, 20, 10,197,
- 93,141, 85,115, 13,214,205,155, 55,241,211, 79, 63,161,115,231,206, 80,169, 84,144, 72, 36,104,223,190, 61, 82, 83, 83, 17, 28,
- 28, 12, 0, 72, 76, 76,196,195, 15, 63,140,244,244,116,180,105,211,198,174,185, 6, 75, 16, 4,236,217,179,199,158, 82,218,147,
- 82,138,162,162,162, 22,157, 68, 65, 16, 80, 90, 90,138, 45, 91,182,160,160,160, 0,238,238,238,168,208, 57,162,182, 87,186, 40,
-254,222, 11,146,193,184, 95, 16, 69, 17,182,182,182, 72, 73, 73,193,163,143, 62, 10, 0,176, 88, 44,112,115,115, 67,112,112, 48,
- 6, 13, 26,132,129, 3, 7,178,140, 98, 48, 26,123, 97,185,114, 37, 57, 43, 43, 43,124,198,140, 25,248,206,199, 7,246,246,246,
-120,101,230,204,227, 60,207,247, 99,185,115, 15, 12, 86,115, 66,115,126,126,126,195,188,188,188,102,175, 94,189,218, 86,171,213,
-194,167, 85,148,253,182, 13,235,141, 30,106,185, 33,183,236,230,132,179, 57,186,196,166, 52, 56,142, 67,235,105,211, 16,100, 54,
-163,228,232, 81, 40,212,106,168, 59,117, 2, 49,153,160,200,204,132, 92,173,134,196,214,182, 89, 7,194,113, 92, 77,149, 96,173,
-153,170, 87, 53, 88,107,182,238,214,224,245,110,152,205,102,199,248,248,120, 60,240,192, 3, 24, 57,114,100, 93, 85, 96,135, 14,
- 29,176,110,221, 58,140, 24, 49, 2,103,206,156,129, 70,163, 65,235,214,173,209,186,117,107, 36, 37, 37, 53, 43,189,181,195, 50,
- 12, 24, 48, 64, 71, 8, 57, 71, 41,109,119,242,228, 73,251,150,156, 68, 81, 20,177,101,203, 22, 60,246,216, 99,104,213,170, 21,
-142, 29, 59,134,233, 51, 62,132,163, 71, 0,120,206, 29, 0,101, 85,132,140,251, 14, 65, 16, 26,108,200, 94, 91, 38, 48, 24,140,
- 38,239,163, 25,195,135, 15,143,253,240,195, 15, 91,191,242,202, 43, 0, 0,141, 70,211, 69,163,209,164,252, 93,227, 96,221,143,
-213,131,117, 6,203,154, 3,236,211,167,207,151,130, 32, 12, 85,169, 84, 78,207, 61,247,156,185,184,184, 24,155, 55,111,198,183,
-223,126, 91, 85,105,225, 78,151,151, 10,207,101,228,234,114,173, 53, 67, 54, 60, 15,152,205,144,223,106,115, 5,163, 17,212,108,
-134, 76,173,134, 84,165,106,246,129,112, 28,119,215,136,149, 82,161,128,236,214,120, 88,214,162, 80, 40,202, 15, 31, 62,236,158,
-147,147,115, 91,131,246,160,160, 32, 0,192,137, 19, 39,112,236,216, 49, 60,246,216, 99,144, 74,165,144,203,229, 56,123,246,172,
-190,185,166, 72, 16,132,186, 94,132, 26,141, 38,190,115,231,206,119,237, 61,104,141, 86, 78, 78, 14, 90,181,106, 5,163,209, 8,
-123,123,123, 20,231, 93,199,213, 43,233,168, 48,164,194,223, 93,133,194,194, 66, 40,149, 74, 86,154, 48,238, 43, 36, 18, 9,122,
-247,238,141,226,226, 98,184,185,185, 65,169, 84,162,188,188,252, 54,227,181, 98,197, 10,150, 81, 12,198, 93,240, 31,177,108,145,
-239,208, 47,199, 3,192,171,159,237,195,219,179, 23, 98,204,200,129,120,230,153,103,254,246,113,176,238,251, 54, 88, 13, 29, 88,
- 92, 92,220, 24, 23, 23,151,209,207, 62,251,172,237,137, 19, 39,240,193, 7, 31, 72,247,236,217, 99, 62,121,242, 36, 47,138,226,
-155, 57, 57, 90,171, 75, 48, 66, 8, 56,142,131,126,251,118,232,188,188,224,208,177, 35,136,217, 92, 19,185,178,183, 71,165,143,
- 15, 96, 52,194,177,188, 28,205,213,172, 29,146,161,254,176, 12,178, 91,195, 53,180,164,224,190,219,184, 87,147, 38, 77,194,178,
-101,203,208,173, 91, 55,132,133,133, 65, 42,149,130,227,184, 22,245, 34,172, 95,101,215,236,222,131,119,188,201,251,249,249, 33,
- 37, 37, 5, 78, 78, 78,248,246,219,111,225,225,238,142, 73,195,195, 97, 50,153, 96,177, 88, 80, 89, 89, 9, 65, 16,112,159,206,
- 28,196,248, 31, 68, 20,197,219,218, 92, 21, 23, 23,195,215,215,183,209,168, 22,131,193,168,247, 28,170, 63, 14, 86,199,238, 56,
-178,105, 30,214, 93,246, 71,238,236,217,255,200, 56, 88,247, 91, 4,171,201, 82,168, 71,143, 30,234,178,178,178, 79,159,122,234,
- 41,219,202,202, 74, 20, 23, 23,163,184,184, 24,199,143, 31,223,111, 50,153, 58,229,228,228,172,104,196,248, 68, 53,100, 94, 92,
- 60, 60,160,176,183, 7,169,215,123, 80,166, 82,213, 68,178, 76, 38,160, 1, 35,208,152,102,125,115, 85, 91, 69,104,149,185,178,
-179,187, 77,147,227,184,186, 97, 26,238,236, 49,232,231,231,135, 57,115,230, 96,248,240,225,183, 13,211, 96,109, 58, 53, 26, 77,
- 60,165,180, 93,237, 3,226, 86, 35,247,120, 43,141,100, 84, 67, 6,107,240,224,193,216,182,109, 27, 94,123,237, 53,100,102,102,
- 98,196,136, 17, 32,132,192,209,209, 17, 94, 94, 94,112,118,118,134,141,141,205, 31,210,218,144,230,159,129,105, 50,205,191, 75,
-179,126,131,118,181, 90,141,170,170,170, 38,205, 21, 33,100, 36,203, 79,166,201, 52,235,198,193,194,153,228,163, 56,248,253, 43,
-120, 49, 33, 8, 35, 2,211, 49, 99, 70,211,227, 96,253, 21,233,188,223,104,210,125, 84, 84, 84,188,219,186,117,107,249,197,139,
- 23,145,145,145,129,203,151, 47, 67, 16,132,171, 57, 57, 57, 45, 46,164, 56,142,131,163,163, 35, 20, 10, 5,164,185,185, 53,109,
-164,212,106, 0,168,137, 92, 81, 10,210,204,234, 44,142,227, 32,149, 74,127, 31,243,234, 86,161,219, 82, 4, 65,168, 27,161,189,
-118,156,171,218,133,227,184,186,165, 5, 67, 52,188,122,252,248,113,251,172,172, 44, 80, 74,177,121,243,102,251,135, 31,126,248,
-213,150, 70,175, 10, 11, 11, 97, 54,155, 33,147,201, 48,120,240, 96,116,239,222, 29,122,189,190, 46, 90, 69, 8,129, 84, 42,101,
-189, 8, 25,247, 29,181,109,176,234,143,218,206, 34, 87, 12,134,245,100,111, 30, 63, 21,192, 84, 66,200,232,153, 51,103,126,247,
-194, 11, 47, 64, 20, 69, 36, 37, 37, 97,201, 27,111,224, 61, 65,120,124, 49, 33, 85,147, 41,157,202,114,235, 30, 26,172,174, 93,
-187, 6,232,116,186,101, 60,207,183, 23, 4, 65,113,240,224, 65, 84, 87, 87, 35, 53, 53,213, 32,138,226,230, 22,239, 80, 42,205,
-159, 60,121,178,175, 53,219,202,229,242,155,104, 98, 30,194,250,154,212, 10,179, 35,151,203,111, 26,189,189, 27,213, 20, 69, 49,
-183,254,220,130,181, 38,234, 46,209,159,250,133,125,174,149, 89, 48,191,107,215,174,127,248,174, 37,121,169, 80, 40,114, 18, 18,
- 18,188,154,243, 27,185, 92,158,207, 46,123,198,127, 29,185, 92,110, 24, 59,118,172, 85, 61,119, 37, 18,137,105,195,134, 13,172,
-110,156,193,104, 0, 27,185,252,241, 23, 95,124, 17, 63,252,240, 3, 54, 47, 90,132,129, 57, 57, 88, 39,151,195, 86, 46,199, 87,
-102,243,120, 0,204, 96,221, 75,131, 85, 94, 94,254, 94,105,105,105,231,138,138, 10,254,234,213,171, 6, 66,136,192,113,156, 65,
- 20,197,143, 4, 65, 88,222,210, 29,110,220,184, 49,252, 94, 31, 68,173, 38,177,162,202,211, 26, 82, 83, 83,123,254, 85, 25,254,
-103,218, 90,221,201,111, 71,143, 70,176, 75,152,241,191, 70,152, 99, 47,172, 95,223,107, 45,203, 9, 6,227,222,112,250,220,185,
-120, 0, 24, 60,120, 48, 12,175,190, 10, 0, 88,121,107, 28, 44,123, 96,217,191, 36,153,157, 0,184,223,250,191, 24,192, 37, 0,
-177, 0,108, 1, 24, 1,232, 1,184,213,219,190,228,214,186,218,245,191, 2,176,252,157, 9,110,208,144, 92,186,116,233,233,162,
-162, 34,123,147,201,228, 44, 8,130, 27,207,243,158,102,179, 57,136,231,249,101,148,181,148,254,199,161,128,248,103, 22,150,131,
- 12, 6,131,193, 0,128,240,240,112,149,155,155,155, 42, 60, 60, 92,245, 14,165,183, 45,255,162,234, 65,119, 66,200, 54, 66,200,
-182, 55,223,124,179, 47,128,238,111,190,249,102,231, 91,159, 59, 2,112,171, 93, 79, 8,217, 6,192,245,142,245,209,127,119,130,
-239,183, 6, 11,180, 69,139,217, 92,251, 63,131,193, 96, 48, 24,140,127,235, 67,158,210,132,185,115,231,206, 1, 32,153, 59,119,
-238,156,122,159, 65, 41, 77,168,255,247,142,245,238,127,119, 90, 9,128,168, 6, 14,194,234,153,178, 91,210,155,160, 41,125,166,
-201, 52,153, 38,211,188,131,176, 59, 52, 55, 54,161,217, 88, 71,156,116,150,159, 76,147,105,254, 51,154, 77,105, 55,240,251, 7,
- 9, 33,219, 40,165, 9,245,255,214, 55, 94,183, 52,183,213,255,255,142,245,219,255,110, 55,248,151, 45, 0,162,152, 38,211,100,
-154, 76,243, 95,166, 57,146,229, 39,211,100,154,255, 62,205, 38,150, 7,107, 44, 75,195,127, 27,250,191,222,119,127,103,122, 27,
- 25,166, 97,195, 6,201,141,112, 91,123,165,157, 32, 7, 0, 99,165,196,236,119,217,160,195,168, 81,108,190, 21, 6,131,193, 96,
- 48, 24,127, 59,132,144,109,111,188,241,198, 91,255,133,180, 74, 27, 50, 87, 69,177, 10, 87, 27,203,205, 48,158, 71,107, 0,176,
- 81,224, 82, 81,172,125,186,251,134, 13, 37,247,218,100, 13, 27, 54, 76,173, 80, 40,100,235,215,175, 47,251, 55,102, 82,187, 80,
-226, 35, 88, 48, 20, 18, 12, 2, 0, 8,216, 41,145, 97,235,185, 12,154,219,204, 11,195,227, 86,212,176,240, 94,108,119,175,127,
-203,184, 63,208,104, 52,182, 0, 18,164, 82,233, 24,103,103,231,142, 37, 37, 37, 31,230,228,228,124,222,194,194, 76, 10, 96,178,
-147,147,211,104, 39, 39,167,192,210,210,210,235, 21, 21, 21, 27, 1, 44,166,148, 54,171, 71, 78,239, 14,100,186, 66, 46,123,182,
-218,108,249,248,240,105,250,109, 92, 44,113,229, 69,204,181,145, 75,123, 25, 77,252, 39,135,206,208,229,205,216, 83,195, 58, 0,
- 0, 32, 0, 73, 68, 65, 84, 76, 27, 23, 21, 21,101, 35, 8, 2, 81, 42,149,162, 92, 46,167, 10,133,226,206,182,148,252,129, 3,
- 7,238, 28,150, 37,253,159, 56, 47,241,241,241,107, 40,165,195,121,158,135, 68, 34, 57,184,127,255,254, 33,127, 86, 51, 46, 46,
- 78, 9, 0, 7, 14, 28, 48,254,199, 30,146, 92, 80, 80,144,250,250,245,235,122, 90, 59, 43, 61,163, 73,186,117,235,150,105, 54,
-155, 27,109, 75, 36,151,203,139,126,251,237,183,192,251,240,240,139,107,171,254, 0, 20, 2,144,220,250,108,186,245,183,160,222,
-119, 5, 13,172,255,231, 13,214,141,112, 91,123, 27,203,205,176,194,252,212, 81,133,218,211, 35, 1,192, 67,211, 97,163,135, 87,
-228,134, 27,225, 78,230,174,145,163,213, 18, 91,178, 72,202,201,218, 87, 27,141,174, 50,153,172,196,196,243,103,165, 22, 50, 85,
-155,186,254, 70,115, 19, 65, 41,253,137, 16,226, 61,116,232,208, 93,162, 40,174,220,190,125,251,165, 22,221,180,113,113, 82,207,
- 50,215,199, 57,153,116, 8, 64,163, 40, 5, 40,145,158,135,217,188,179,192,165,120, 53,253, 99, 65,219, 32,177,177,196,182,186,
- 2,241, 16, 49,180, 85,144,103,151,169, 19, 71,186,118,238, 62,208,182,178,202,130, 95,247,111,235,180,124,205,214, 23,219, 6,
-147, 19, 2,193, 86, 91, 71,236, 73, 73,161,134, 38, 10,148,247, 9,193,180, 91,255, 47,164,148,190,251,103,182,179,226,183, 95,
- 80, 74,223,188,199,133, 98, 91,103,103,231, 47,148, 74,165,157, 68, 34, 73,207,201,201,249,148, 82,122,170,185, 58,126,126,126,
-145, 60,207, 15,151,201,100,177, 22,139, 37, 69, 42,149,110,185,113,227, 70,234,159, 72,151,164, 77,155,208, 39, 37,132,244, 0,
-224, 4,224,166, 64,233,145,139, 23, 51,126,160,148,182,232,101, 32, 46, 46, 78,106,168,172,124, 92, 42,145, 12,166,148, 70,129,
- 82, 2, 66,206,243, 60,191, 83,101,111,191,250,128,149,215, 82,247,238,221, 47, 91, 44,150,102,141, 85, 38,149, 74,139,124,124,
-124,194,215,175, 95,223,236,180,251,250,250, 62,236,227,227,243, 85,215,174, 93, 85, 29, 58,116,128, 92, 46,199, 39,159,124, 50,
- 25,192,231,214, 24, 41, 59, 59,187, 81, 42,149, 42, 72,175,215, 95, 51, 24, 12,137, 10,133,162,223,226,197,139,125,186,117,235,
-102, 95, 84, 84, 68, 56,142,243,216,186,117,235, 19,159,127,254,121, 60, 33,228, 65, 74,169,117,249,208,129,116,109, 29,228,253,
-238, 75, 79,244,197,107,115,127,124,169,103, 59, 82,108,107, 39,255,106,100,207, 80,167,200, 16, 39,188,191,244,183,201, 0,172,
- 54, 88,145,145,145,242,132,132,132, 85,132,144, 7, 9, 33, 13, 62,160, 57,142,211,199,197,197,249, 55,118,190,130,186, 58, 31,
-150, 74,164, 62, 13,173,231, 5, 62,247,250,177,178, 63, 61,116,139, 32, 8,131,150, 47, 95, 14,169, 84,138, 49, 99,198,244,137,
-141,141,181, 77, 73, 73, 49, 88, 87, 30,197,186, 2,120, 5, 0,167, 80, 40, 22, 28, 61,122,180, 40, 54, 54,118,187, 92, 46,143,
-187,181,254, 64, 74, 74,202,131,119,156, 83,242,103,122,124,199,197,197,189, 35,138,226, 68,133, 66,113,163,172,172,108, 92, 74,
- 74,202,229, 63,155, 7,177,177,177,178,130,130,130,201,237,219,183,127,190, 83,167, 78, 94,169,169,169, 5, 62, 62, 62, 75, 60,
- 61, 61, 23,167,164,164, 52,105,216, 59,116,232,224,205,113,220,147, 0, 30,191,245, 0,221, 64, 8, 89,157,146,146,114,237,127,
-193, 96,153,205,102,247,148, 25, 51, 0,137, 4,134,190,125, 65, 41,133,106,214, 44,160,184, 24,101,243,231,131,231,121, 12, 30,
- 60,216,253, 62, 61,252, 19,255,181, 4,223,213, 96, 41,237, 4, 57,207,163,117,161,246,244,200, 46,131, 22, 59, 0,192,241,157,
-147, 71,186,120, 71,166, 42,237,132,116,133, 90,190,246,225,161,241,237, 71, 37,244, 33,190,222, 30,200,201, 43,244, 88,177,110,
- 87,255,109, 59,147,214, 2,232, 97,101,212,234, 9,139,197, 18,192,113,220, 58,142,227,188, 23, 45, 90, 20,146,145,145, 49,110,
-221,186,117,195,134, 14, 29,122, 68, 20,197,239,182,111,223,254,155,181, 7,226,213, 97,120,132, 23,188,214, 12, 31, 49,196,255,
-193,254,238,138, 0, 47,119,136,162, 18,151,174, 89,252,246, 28, 58,213,127,199, 47,187,167,122, 70, 13,127,178,224,252,150, 11,
- 77,105, 69,132,144, 71, 85, 74,249, 43,111,188,240,160,215,224, 65, 9,246, 46,190, 49, 82,144,154,201,162, 21, 14,192,136, 39,
- 95,181, 27,254,196, 20,187,107, 23, 14,251,108,223,177,181,255,234,196, 3,121, 17, 33,100, 65,218, 85,250, 99, 67, 81, 37, 66,
- 48, 77, 20, 41, 87, 83,232,147, 87,251,247,239, 63,192,198,198,230,182, 2,165,186,186, 90, 70, 8, 34, 69,145,222,122, 56,144,
-105,132,144, 47,173,137, 70,213,238,195,100, 50,114, 50,153, 2, 18, 9, 55, 57, 58, 58,186, 67, 81, 81,209, 1, 0,203,181, 90,
-109,201,159,185, 80, 84, 42,213,179,195,135, 15,159,179,114,229, 74,181,173,173, 45,180, 90,109,248,163,143, 62,218,158, 16,242,
- 16,165,180,201,130, 87,163,209, 68, 3,120,200,205,205,237,225,113,227,198, 5, 60,240,192, 3, 8, 12, 12,132, 86,171,141, 79,
- 74, 74,122, 51, 38, 38, 38,187,160,160, 96, 35,128, 68,173, 86,123,166, 57,230, 42, 42,178,213,252, 9, 19, 39, 69,140, 24, 49,
-194, 91,105, 99, 43,205,201,201, 44,250,230,235, 37,142, 18,194,181, 39,132,188,218, 92,147,213,165, 75,151, 8, 34,138,107,159,
-127,246,217,192,142,221,187, 75, 61,189,189, 81, 93, 94,142,140, 75,151,252, 78,158, 56, 17,191,101,239,222,105,177,177,177, 99,
- 82, 82, 82,154,188,150, 76, 38,147,239,161, 15, 63,132,196,205, 13,212, 98, 1,223,166, 13, 68, 81,172,153, 71,239,240, 97,192,
- 98, 1,181, 88, 96,233,223,191,110,126,202, 97,195,134,121, 20, 23, 23,203, 0, 52, 43,221,126,126,126,222, 97, 97, 97,203,223,
-124,243, 77,185,209,104,196,233,211,167,113,244,232, 81,177,168,168,104,126, 83,230,138, 16,178,117,230,204,153,154,158, 61,123,
-218,151,148,148,128,231,121,215,196,196,196, 9,177,177,177,246, 62, 62, 62,138, 85,171, 86,213,206, 16,224, 28, 18, 18,226,252,
-248,227,143,155, 86,173, 90, 53, 25,192, 2,171, 10, 26,130,217,143, 14,235, 15,131,133,131,197,194,187,123,187,219,255, 48,121,
-108, 31, 25,168, 9, 43,127, 62, 5, 11, 47,126,219, 28,115, 21, 28, 28,188, 50, 56, 56,184,239,220,185,115, 73, 70, 70,134,164,
-205,173,124,229,121, 30,130, 32, 64, 16,106,178,110,204,152, 49,234, 91,229, 92,131, 6, 75, 42,145,250, 28,222,116,193, 93,165,
- 82,213,253,182,118, 50,246,202,202, 74, 12,122,170,107, 75,162, 85,126,148, 82,255, 59, 12, 22, 87,219, 54,195,100, 50,193,198,
-198,166,215, 3, 15, 60, 80,117,203, 84,151,237,218,181,235, 98, 35,146,207, 63,247,220,115, 83,212,106, 53, 22, 45, 90,212, 47,
- 50, 50, 50, 78,169, 84,198,237,219,183, 15, 0,208,171, 87,175,184,206,157, 59,187,240, 60, 63,148, 16, 50,194,193,193,161,103,
- 76, 76,204,225,232,232,232, 39,207,156, 57, 83,222,220,244,119,236,216,241,225,168,168,168,151,231,205,155,103,119,225,194, 5,
-231,247,223,127,127, 45,128, 14,127,166, 12,137,140,140,148, 87, 86, 86,174,121,239,189,247, 6,215, 78, 53, 38,138,162,231,175,
-191,254,250,254,107,175,189,214, 53, 54, 54,246,177,134, 76, 86,167, 78,157,218, 83, 74,103,132,132,132,196, 63,245,212, 83,146,
- 30, 61,122, 64,175,215, 99,247,238,221,255,183,105,211,166,255,139,137,137, 57, 70, 41,125,255,244,233,211,135,238,213,195, 49,
- 54, 54,246, 18, 0,191,218,184, 67, 74, 74, 74,235,127,197, 83,219,222, 30,232,219, 23, 21,121,121, 53,101,243,188,121, 53,101,
-205,156, 57, 44,196,247, 95, 48, 88, 77, 81, 85, 85, 21,253,230,228,177,224,184,154,145,204,195,130,253,241,209, 91, 19,200,150,
-109,187,172, 30,103,162,180,180,116,198,227,143, 63,238,189,101,203,150,231, 56,142,179, 41, 44, 44, 36, 85, 85, 85,182,211,166,
- 77,243,213,233,116, 35, 18, 19, 19,123, 15, 27, 54,236, 28,165,244,147,173, 91,183, 38, 55,166,229, 30, 61, 50,212,195,205, 99,
-247,167,179, 39, 56, 71, 5,135,192,100,177, 32,167, 48, 23, 20, 74,120,121,168, 49,230,161,104,121,143,142,178,208,249, 95,236,
-219,229,213,126,104,255,252,179, 91, 27, 43,200, 32,161,120,253,248,137,212, 86, 28, 95, 66,136,204,161,129, 55, 99, 41, 66,219,
-197, 73,159, 15,142,114, 26, 50, 96,144,195,195, 79, 79,123, 29,192,143,141, 61,199,234, 61,208, 48,101,202,148,186,169,120,106,
- 41, 40, 40,192,254,253,251,238,250, 27,107,253, 70,253, 15, 31,124,240,129, 99,105,105,233,131, 43, 86,172,136,247,246,246,158,
-149,151,151,215,236,194,135, 16, 98, 11, 96, 80,191,126,253,102,111,218,180, 73, 93, 59,122,189,167,167, 39, 22, 44, 88,224,247,
-232,163,143,126, 12, 96, 88, 19,230,234,187,177, 99,199,142,238,223,191, 63,194,195,195, 81, 82, 82,130, 99,199,142,153,150, 44,
- 89,114,253,129, 7, 30, 8, 26, 61,122,180, 98,202,148, 41,254,153,153,153,175, 38, 38, 38,190,234,236,236,252,109, 89, 89,217,
-203,214,164,175, 77,155,208, 39,199,141, 31, 31, 49,233,249,151, 98,205,102, 99,213,217,148,131,251,165,114, 78,242,210,203,227,
- 29, 75,203,138,220, 40, 21,159, 4,240,125, 51,204, 85,168,143,167,231,158,185, 31,127,236,228,226,238,142,252,252,124,220,200,
-201, 65,222,249,243, 32, 0,250,247,239,175,136,110,223, 62,100,225,210,165, 59, 59,117,234, 52,224,228,201,147, 23,155,210,148,
-184,185, 33, 55, 38, 6, 0, 80,158,146, 82, 27, 89,129,253,208,161,191,191,153,166,165,129,227, 56,120,120,120,180,100,250,165,
-218, 72,112,151,158, 61,123,202, 1,224,181,215, 94,211, 85, 86, 86,206, 35,132,252,148,155,155,171,109,226,167,147,223,121,231,
- 29,239,144,144, 16,255, 53,107,214, 64,175,215, 3,128,123,112,112, 48,194,194,194,132,131, 7, 15, 34, 60, 60, 28,246,246,246,
- 56,120,240, 32,142, 29, 59,134,152,152, 24,181, 92, 46, 31,105,141,193,234, 21, 77,134,116,236, 16,213, 53,192,207, 31, 7,142,
-158,128, 92, 33,115,122,225,169, 4,216,171,165,152,183, 98,187,152,157, 83,250,210,161, 51,116,165,149,215, 35,247,224,131, 15,
- 46, 15, 12, 12,140,155, 59,119,174, 74, 46,151,227,220,185,115,200,207,207,135,187,187, 59,108,108,108, 32,147,201, 32,149, 74,
-155, 53, 85,150, 74,165,130, 86,171,133,249,214,224,138,130, 32, 64,167,211,193,203,171, 38,248, 56,107, 22,225,102,206,180,174,
- 42,107,192,128, 1,175,123,120,120,204,240,240,240,144,212,255,222,104, 52,226,141, 55,222,128, 94,175,135,143,143, 15,124,124,
-124, 54,213,206,123, 90, 82, 82,130,254,253,251,207,221,179,103,207,236, 6,100, 29,189,189,189, 49,116,232, 80,152, 76,166,136,
-175,190,250,234,123, 74, 41,170,170,170,234, 54,240,240,240,200,236,213,171,151,164,103,207,158, 8, 9, 9,193,210,165, 75,251,
-110,216,176,161, 55,128,159,155,123, 45, 57, 58, 58, 62, 50,106,212, 40, 59,181, 90,141, 46, 93,186,192,100, 50,105,226,226,226,
-148, 45,169,138, 36,132, 72, 53, 26,141,167, 84, 42,253,108,242,228,201, 3,251,244,233,131,180,180, 52,236,220,185, 19,195,134,
- 13, 67, 92, 92, 28,222,126,251,237, 65,239,190,251,238,100, 52, 48,171,133, 40,138,171, 55,110,220, 24,232,235,235, 11,137,164,
- 38, 91, 29, 28, 28, 48,110,220, 56,140, 29, 59, 22, 59,118,236,232, 58,103,206,156,181,113,113,113, 1, 7,154, 81, 83,209,212,
- 59, 75,202,173,251, 53, 54, 54,214,239,223,242,208, 54,117,235,134,178,188, 60,120,122,123, 3, 0,242,180, 90, 80, 74,235, 62,
-227, 86, 89,195,248,151, 26, 44, 99,165,196,108,163,192, 37, 15, 77,135,141,199,119, 78,174,171, 34,148, 82, 92,170,174,148,152,
- 1, 64,160, 20, 21,122, 30,182, 74, 14,153,121, 58,156,191, 90,116,183, 2,255,182,174,150,253,251,247,223,170,211,233,194, 93,
- 92, 92, 22,240, 60, 47,233,219,183,175,164,107,215,174,238, 89, 89, 89, 56,112,224, 0,100, 50, 25, 76, 38, 19,113,118,118, 86,
-142, 27, 55, 78, 99, 48, 24, 92,223,122,235, 45, 55, 0,125, 26,210, 36,163, 71, 75,188,101,146, 13,243,102, 63,238, 76, 36,151,
-113, 57,251, 38, 66,125,187,192,213,209, 15,185, 69,122,164,164,238,192,229,140,237, 8,245,245,199,132, 49, 97,142, 11,191, 46,
-222, 72, 98, 39, 70,209,148,165,150,134, 52, 1, 72, 36,170, 80, 98, 74,122, 88,148,184,245, 33, 18,239, 4, 66,108, 52,183,109,
- 80, 89,146,137, 75,191,173,164,153,231,126,166,254,209, 79, 18, 0,146,134,142,157, 82, 90, 40,145, 72,150,115, 28, 25, 79, 8,
- 65,135, 14, 49,133,243,231,207,191,219,155,154,165, 67,135,152, 66,137,132,243,168,153, 71,144, 91, 38,138, 66, 97, 35,233,172,
-191,191, 66, 66,200, 66,133, 66, 57, 13, 0,188,189, 53,133,219,183,111,183,140, 26, 53, 10,159,126,250,169, 98,250,244,233, 51,
-125,124,124,158,202,205,205,205,109,236, 28,213, 43, 20,163, 28, 28, 28, 38,182,106,213,106,216,236,217,179, 21,131, 6, 13,178,
-165,148, 66,167,211, 65,167,211,161,170,170, 10,118,118,118,144, 74,165, 94, 77,157,247,192,192,192,135,199,141, 27, 7,119,119,
-119, 28, 63,126, 28,211,167, 79,207, 42, 42, 42,250, 32, 47, 47, 47,101,237,218,181,173, 67, 66, 66,222, 94,186,116,105, 68,207,
-158, 61,185,161, 67,135, 98,235,214,173, 61,154,210,172, 59, 81,132,244,120,232,161, 17,238, 38,147,161,210,104, 52,148, 95,207,
- 74,206,203,201,185,112, 51, 60,172,147,199,128,129,221, 92, 46, 93,186,218,163, 33,131,117,167,230,232,209,163, 37,156, 32,252,
-248,241,188,121, 78,156, 84, 10,139,197,130,128,128, 0,156, 59,119, 14, 21,101,101, 48,232,245,184,150,154, 10, 77, 80, 16, 38,
-143, 25,227,244,193,146, 37,107, 98, 99, 99, 59,214,127,235,190, 91, 58,169,197,114,103,181,213, 31,230,204,187,219,119,214,156,
-247, 59, 30, 66,153, 90,173, 22, 42,149, 10, 17, 17, 17,118,201,201,201, 71,115,114,114,180, 77,105,218,216,216,140,236,209,163,
-135,253,218,181,107, 17, 27, 27, 11, 39, 39, 39,236,223,191, 31,231,206,157,131,217,108,230,116, 58, 29,212,106, 53,230,206,157,
- 11,127,127,127, 84, 84, 84, 32, 51, 51,211, 85, 38,147,185, 89,149, 78,130,103, 70,143,120, 8, 18,185, 29, 46,101,228,160, 79,
-215, 24,120,120,120,224,236,197, 12,100,231,150, 22, 16,130,167, 7,245, 80,206, 53, 24, 76,239,252,122,154,174,104, 72,147,212,
- 56, 79, 78, 42,149, 62, 52,103,206, 28, 78, 46,151,215,229, 93,237,156,132,181,198,170,118,146,246,187,153,213,187,165,147,231,
-121,152,205,102,152,205,102,136,162,136,162,162, 34, 84, 84, 84,192,217,217,185,102,131,153, 0, 1, 33,180,129, 89,232,239,184,
-223,199,126,242,201, 39, 18,239,218, 7, 94, 61,114,114,114, 80, 94, 94, 14,123,123,123, 56, 57, 57,213, 69,220,138,139,139, 49,
-117,234,212,177, 0,102,223, 77, 83, 42,149,126,242,233,167,159, 14,107,221,186,181,215,179,207, 62, 11,169, 84, 58,168,164,164,
- 4, 43, 87,174,132, 74,165,194,138, 21, 43, 16, 24, 24, 40, 17, 4, 1, 6,131,161,214, 8, 87, 42, 20,138,204,150, 92, 75,101,
-101,101, 63,108,219,182,173,123,183,110,221, 28, 1, 96,248,240,225,220,150, 45, 91,178,251,246,237,123, 67,167,211, 61, 89,191,
-186,176, 33,205,216,216, 88, 89,126,126,254, 43, 99,198,140,153, 18, 31, 31,239, 80, 82, 82, 2,165, 82,137,159,126,250, 9,203,
-151, 47,223,109,177, 88,102,109,220,184,241,189,111,190,249,166,255,240,225,195,241,205, 55,223,188,112,171, 89,132,120, 23, 77,
-111, 63, 63, 63,156, 61,123, 22,206,206,206,112,115,115, 67,121,121, 57,142, 29, 59,134, 19, 39, 78, 32, 34, 34, 2,132, 16,167,
-198,162,149,141,164,179,197,145,170,230, 12,103,116,175, 52, 75, 75, 75, 81, 94, 94, 14, 57,106, 6,111,188,121,243, 38, 0,212,
-125,110,105, 58, 9, 33, 82, 31, 31,159, 4, 71, 71,199,137, 0, 36,101,101,101, 43,108,109,109, 19, 51, 50, 50, 76,127,215,177,
-223,151, 6,139, 16, 82,123, 94,226, 40,165, 7,253, 46, 27,116, 69,177,246,233, 30, 94,145, 27, 92,188, 35, 83, 1, 64, 74,113,
-137,202,236,211,253,206, 25,116, 0, 96, 54, 83, 28,189, 84,134, 51, 87, 10,112,238, 74, 62,212, 54, 77,191,117, 27,141,198,126,
- 59,119,238,196,134, 13, 27,230,127,254,249,231, 52, 59, 59, 27, 89, 89, 89,112,118,118, 70,159, 62,125, 80, 84, 84,132,147, 39,
- 79, 34, 52, 52, 20,148, 82,248,249,249, 41, 0, 56, 54,166,233,121, 69, 28,243,212,132, 14, 65,110,142, 4, 91,143,238, 66,215,
-136, 17, 80, 41,165, 40, 42,171, 2, 71, 8, 50,174,239,133, 32,216,225, 76, 90, 54,186, 71,217,161,103, 23, 7,159,202,125,101,
-207, 2, 88,218,244, 19,203, 2,161,112, 47, 21, 10,247, 81,206,185, 35,145,120, 15, 39,101,229,213, 72,251,237, 91,154,119, 41,
-169,174,172, 53,155,116, 77, 74, 9,130, 48,213,211,211,211,240,198, 27,111,244, 11, 11, 11,179,188,248,226,139,167, 50, 51, 51,
-167,220, 97, 68, 62,251,242,203, 47,145,158,158, 94, 60,119,238,220,253, 5, 5, 5,111, 53,243,198,156, 65, 8,249, 2, 0,180,
- 90,109,201,182,109,219, 58, 30, 60,120,240,213,133, 11, 23,122,189,244,210, 75,138,151, 95,126,121,124,205,163,162,201, 27, 45,
- 58, 46, 46,110,231, 15, 63,252, 96,231,229,229, 69, 8, 33, 48,155,205, 40, 42, 42, 66, 81, 81, 17,202,203,203, 81, 89, 89, 9,
-189, 94, 15,142,227,154,108, 47,167, 82,169, 36, 21, 21, 21,184,121,243, 38, 58,119,238,140, 19, 39, 78, 4, 28, 57,114,100,249,
-215, 95,127, 45,142, 29, 59,150,196,197,197,145,226,226, 98,108,218,180, 73,204,207,207,231,108,108,108,244, 86,191, 29,115,112,
- 82,169,108,229,191, 29, 73,220,169,205, 73, 45,206, 43, 56, 95,206,129,114, 90,109,114,121,112, 88, 95, 87,212,180,201,178,138,
-107,215,174, 61, 54,109,210,164, 96, 71,103,103,240, 60, 15, 55, 55, 55,228,228,228,160,170,170, 10, 85, 21, 21, 48,232,245,168,
-174,168, 64,218,190,125,232, 54,100, 8, 6,116,232,224,183,253,212,169,103, 0,124,211,152, 46,223,166, 77, 93,228,202, 49, 54,
-246,247,251, 33, 53,181,206, 88,201,122,244, 0, 81,169, 64,222,106,121,231, 24,173, 86,123, 38, 32, 32, 96,215,160, 65,131, 6,
- 78,152, 48,129,203,207,207,223,226,229,229,213, 47, 63, 63, 63,173,177,223,169,213,234,224,226,226, 98,232,116, 58, 56, 57, 57,
- 97,225,194,133,240,240,240,128,193, 96,192,201,147, 39,169,175,175, 47, 73, 74, 74,130,143,143, 15, 74, 75, 75, 97, 50,153, 80,
- 85, 85, 85, 96, 50,153, 12,214, 93,152,240,241,244,242, 5, 71, 45,208, 22, 20, 99,248,144, 1,144,202,213,200,204, 41, 70,116,
-100,136,247, 19, 67,123,120, 75, 8,143,255,251,120,237, 11, 0, 86, 88, 97, 36,105,122,122, 58, 82,111,229,159,131,131, 3,236,
-236,236,106, 38,121,151,203,235,204,149, 84,106,125,128,190,118,114,244, 90,115, 85, 84, 84,132,140,172,203,216,148,180, 10,102,
-193,226,250, 93, 23,135,235, 33, 50,217,121,119, 61,153, 89,116,150,158,105,226,254, 89, 53,125,250,244,247,220,221,111,111, 10,
-227,231,231,135,137, 19, 39, 98,219,182,109, 72, 79, 79,191,173, 59,119,105,105,169, 8, 96, 85, 67,154,199,143, 31, 47,236,210,
-165,203, 35,175,188,242,202,222, 85,171, 86, 41,198,140, 25, 83, 87,157, 41, 8, 2,244,122, 61,246,237,219,135, 67,135, 14, 33,
- 57, 57,185,204,108, 54,255, 44,145, 72,150, 28, 63,126, 60,173,185,215, 81,183,110,221,156,213,106,245,135, 47,188,240,130, 61,
- 0, 84, 87, 87, 99,204,152, 49,182,143, 60,242, 8, 82, 82, 82, 34, 62,255,252,243,149, 0, 58, 55, 85, 29,200,113,220,250,164,
-164,164,248, 86,173, 90,213,188, 61, 90, 44, 56,114,228, 8, 38, 76,152, 80,170, 82,169,198,166,166,166, 86,250,248,248,188,183,
-109,219,182,254,209,209,209,104,215,174,157,103,113,113,177, 26, 64, 69, 3,231, 29,130, 32,212,157,159, 21, 43,126,191, 84,170,
-171,171,107,162, 59, 38, 19,233,220,185,115,224,137, 19, 39, 50,239, 65,164,234, 70,189,207, 55,254, 45, 15,237,170,213,171, 33,
-155, 62, 29,151,143, 28, 1,165, 20,110,145,145, 0,128,203,135, 14,213, 12,159,240,202, 43,205,210,243,241,241,113,161,148, 62,
- 19, 31, 31,255,210,160, 65,131,220,188,189,189,225,234,234,138,115,231,206,117,219,181,107,215, 2, 31, 31,159,229,148,210,229,
- 90,173,246, 47,203,131, 59, 61,200,125, 23,193,162,148,146, 91, 7, 73, 48,106,148,224,190, 97, 67,201,141,112, 39,179,210, 78,
- 72, 7,128,234, 74,137,217,239,220,173, 97, 26,102,175, 5, 5,133, 32, 80, 80, 81,132, 72, 41, 4, 43,130,231,174, 14, 22,112,
-231,157,241,120,215,225, 24, 59, 54,153,236,219,183, 15, 7, 14, 28, 64,116,116, 52, 44, 22, 11, 28, 28, 28, 48,122,244,104, 36,
- 38, 38, 66,165, 82,161,178,178,178, 73, 77,181, 11, 63,162, 75,187, 48,201,229,236,115,232,216,106, 36, 2,189,123, 34, 35,183,
- 28,101, 58, 35, 74,202, 13, 8, 15,127, 29, 5,165, 6, 84, 84, 26,112,246,210, 26,248,122, 7,115,156,236,106,127,171, 12, 86,
-189, 39,132, 88,118,146,138,101, 39,233,190, 93,127,108,110,196, 27,173,107,226, 32,138,226,226,157, 59,119,118,235,217,179,167,
- 52, 62, 62, 62, 38, 32, 32,160, 67, 86, 86,214,105, 0, 8, 8, 8,232,208,191,127,255, 24, 15, 15, 15,124,246,217,103,213,162,
- 40, 46,110,225,219, 79,253,246, 90,199,253,252,252,102,109,222,188,249,235,137, 19, 39,194,219,219,187,189, 53, 26, 78, 78, 78,
-227, 87,174, 92,105,231,237,237, 77,120,158, 71,117,117, 53,242,243,243,113,243,230, 77,148,149,149, 33, 59, 59, 27,165,165,165,
-200,203,203,171,204,204,204,220,104,109,218,222,121,231, 29,240, 60,111,153, 48, 97,130,172,111,223,190, 88,181,106, 21,119,237,
-218, 53,124,243,205, 55,194,250,245,235,179, 56,142,147,142, 28, 57,210,191,121, 7, 76,138,115,114,174,185, 27,205,101,213,131,
-226,186, 79, 43,202, 44,134,123,224,112,236,253,117,227,103,217,153, 25,148,112,176,186,237,153, 82, 38, 27, 16,219,181,171, 44,
- 63, 63, 31,161,161,161,200,205,205,197,149, 43, 87, 96, 50,153, 80, 89, 94, 14, 75, 69, 5,132,178, 50,208,138, 10,100,254,250,
- 43,218,132,134, 42,118,158, 58,213,191, 41,131, 85, 91, 45,220, 80,212,138,227, 56, 16, 59, 59,192,206, 14,148,107,222,228, 10,
- 26,141, 38,193,193,193,225,149,138,138,138, 93, 90,173,246, 99,179,217,252,202, 71, 31,125, 20,251,254,251,239,187, 78,159, 62,
-221,126,250,244,233,171, 3, 3, 3,187,101,102,102, 54, 88,181,163,215,235,175, 89, 44, 22, 23, 0, 30,123,247,238,133,187,187,
- 59,116, 58, 29,204,102, 51, 12, 6,131,217,217,217, 89, 89, 82, 82, 2,163,209, 8,163,209, 8, 7, 7, 7,164,164,164,148,242,
- 60,191,195,154, 52,218,218,216,184, 42,108, 28, 33,242,213,144,202,100,240,247, 11,132, 40, 24, 81, 86, 81,133,167, 31, 25,138,
- 83,231, 82,177, 35,233, 56,111,177, 52,126,205,211,154, 66, 74, 36,132,208,240,240,112,220,188,121, 19, 18,137, 4,118,118,118,
- 80,171,213,136,136,136,192,141, 27, 55, 90,108,176,234,155,171,125,191,109, 67,145, 62, 15,203,230,173,133,143,151, 31, 7,192,
- 45, 55,255, 70,191,103, 95, 29,221, 41,168,167,203,188,235,135, 75, 27,108,215,182,123,247,238,121, 3, 6, 12,216,150,159,159,
-239, 86,239, 92,119,179, 88, 44,239,242, 60,143,204,204, 76, 92,188,120,241, 19, 74,105,210,239, 33,115, 73,238,158, 61,123, 26,
- 53, 5,199,143, 31, 63, 21, 27, 27,251,236,232,209,163, 23, 4, 6, 6,122, 80, 74, 17, 29, 29,141,199, 31,127, 28,243,230,205,
-195,175,191,254,186, 65, 20,197,239, 28, 28, 28,142, 22, 21, 21, 73, 26,138, 60, 52, 70,231,206,157, 93,148, 74,229,193, 47,191,
-252, 50, 32, 36, 36,132,211,106,181,248,237,183,223,208,173, 91, 55, 16, 66, 16, 22, 22, 6,139,197,226,211,148,185,162,148,254,
-180,121,243,230,248,144,144, 16,164,165,165,225,208,161, 67,112,119,119,135,173,173, 45,134, 14, 29,234,242,211, 79, 63, 77,140,
-140,140,252, 92, 42,149,190, 59,100,200, 16, 8,130,128,228,228,228,252,235,215,175,235, 27, 59, 71,141,188,188,131, 82, 10,139,
-197,242, 9,199,113, 35, 59,117,234, 52,244,228,201,147,201,127,230,225,248,175,105,115, 5,192,223,223,191, 13,199,113, 47,186,
-184,184,160,172,164,228,182,200, 85,109,137, 81,251, 25, 0, 90,181,106,181,169,186,186,122,102, 99,157,135,124,125,125,163,108,
-109,109, 95, 74, 72, 72,120,244,193, 7, 31,148,152,205,102,108,219,182, 13, 95,124,241, 5, 6, 13, 26,132,176,176, 48,188,254,
-250,235, 14, 70,163,241,213, 93,187,118,189, 18, 25, 25,185, 71,167,211,189,251,103, 58, 36, 53,113,127,255,238, 65,238, 55,131,
-117,235,192,226,234,214,140, 26, 37,248, 1, 55,111, 21,226,174, 78, 78, 78, 11, 4, 65,232,131,119,223,133,189,212, 17,153, 25,
- 87,160, 43, 19, 97, 49, 25, 33,138, 20, 84,108, 58, 79,108, 21, 2, 28,122, 83, 84,252, 74, 32, 35, 4, 67,134, 12,193,192,129,
- 3,113,234,212, 41,172, 90,181, 10, 61,123,246, 68,121,121, 57, 42, 42, 42,160,215,235,107,219,130, 52,138,220,166,186,109,128,
-103,171,255,103,239,186,227,162,184,246,239,185, 51, 91,129,165,247,166,193, 94,158, 74, 21,187, 24,172,137, 37, 70, 77,177,198,
- 94, 98, 98, 73, 98, 75, 98,108,209, 20, 77, 49,106,244,197,168,137,229,133,168,137, 37, 22,140,193,130,136, 84, 81, 16, 80, 65,
- 41, 11, 2,210,151, 93,118,119,102,238,239, 15,202, 67,164, 44,198,252,158, 47,111,206,231,195,103,119,150,153, 51,183,204,204,
- 61,115,238,247,222,139, 50,109, 79,152,203,229, 40, 44,173, 68, 81, 89, 37, 10,138,117, 56,242,235,235,168,212, 85,128,171,212,
-131, 55,112, 80, 57,143, 69,123,187, 65, 0,189,221,245,105, 22,162,177,178,204,164,145, 58,249,249,249, 15, 60, 60, 60,126,137,
-137,137, 25, 63, 97,194, 4,156, 63,127,126, 62,128,153,213, 15,216,249, 19, 38, 76, 64, 76, 76, 12,110,221,186,245, 75,126,126,
-254, 83, 25, 82,106, 48, 24, 42,140,213, 93, 84, 74,165, 82,102,202, 49, 12,195, 12,113,116,116, 36, 6,131, 1, 15, 31, 62, 68,
- 65, 65, 1, 30, 62,124, 8,173, 86,139,242,242,114,112, 28, 7,163,209,136,200,200,200, 7, 60,207, 71,182, 36, 61, 73, 73, 73,
-237, 23, 47, 94, 60,115,240,224,193,171, 70,142, 28,137,227,199,143,227,199, 31,127,156, 3,224,112,223,190,125, 99, 90,154, 63,
-158,231,255,216,182,109,187,243,172, 25,163,157,127, 62,177,123,227,225, 35,215,123, 76,124, 53, 55,209,205,189,187,227,254,237,
-225,114,142,163, 39, 76, 38, 19,132,238,246,206,206,184,119,239, 30,162,162,162,160,211,233,106, 69,133,161,168, 8,198,194, 66,
- 16,141, 6, 10,142,131, 46, 35, 3,109,187,119, 7, 1,186,152, 32,172, 27,237, 22,100, 89, 22,132, 16, 16,149,170, 74,100, 53,
-210,173,213,136,184,242,241,241,241,249, 97,215,174, 93,178, 37, 75,150, 4,180,105,211,230,219,156,156,156, 12, 79, 79,207, 23,
- 62,255,252,243,139,235,214,173, 83, 76,154, 52,169,195,174, 93,187, 38, 54,229, 12,233,116,186,195, 39, 79,158,124,181,117,235,
-214, 78, 9, 9, 9,208,233,116, 16, 4, 1, 35, 70,140, 0, 0, 69,205,126,201,201,201,186,138,138,138,188,196,196,196,178,251,
-247,239, 27, 1,152,244, 18, 96, 97, 97,105, 39,145, 89, 64, 96, 36,176,182,182,133, 68,110, 1,129,147,128, 23, 0, 75,107, 7,
- 92,137, 77, 70,210,125,118,206,237, 52,132,152,244,182, 83, 45, 88, 29, 28, 28,106,187, 4,107,186, 11,157,157,157, 81, 82, 82,
-242, 68, 2,171,180,180, 20, 37, 37, 37, 72, 77,191,133,188,178, 28,132, 30,138, 0,207,243,168,172,172,210,166,110,206, 30, 56,
-119,232,154, 42,104,188,255,123, 14, 62,228, 98, 65, 28,141,105, 66,100,165, 0, 72,169,233,218, 12, 14, 14,254,120,240,224,193,
- 48, 24, 12,232,223,191, 63, 18, 18, 18, 70,216,216,216,172,111,233, 72,209,152,152,152, 95,187,118,237,122,170,172,172,172, 53,
-207,243,175,218,217,217, 45,227, 56,174,198,125, 59,193, 48,204,117,141, 70,115,188, 93,187,118,125,252,253,253,143, 68, 71, 71,
- 79,111, 70,248,147,128,128,128,113,230,230,230,211, 52, 26,205, 33,165, 82,185,108,219,182,109,173,219,180,105,195,220,191,127,
- 31, 28,199, 33, 35, 35, 67,136,138,138,170,240,247,247, 87,133,134,134,150, 51, 12,211,168,211,230,231,231, 39, 53, 26,141,255,
- 58,118,236,216,144,182,109,219,226,226,197,139,216,180,105, 19,218,181,107,135, 61,123,246,160, 79,159, 62,240,242,242,130,173,
-173,237,130,210,210,210,192, 79, 62,249,100,152,175,175, 47,142, 30, 61,138,252,252,252, 29, 77, 77,217,192,113,141,135, 86, 85,
- 84, 84,128, 82,138,231,159,127,126,250,146, 37, 75, 48,106,212,168,227,129,129,129,253, 35, 35, 35,239,152, 80,172,207,164, 83,
- 85,219, 55,234,234,186,110,200,144, 33, 75,122,244,232,129,253,251,247, 67, 29, 24, 8,237,143, 63,194,102,228, 72, 80, 0,105,
- 63,252, 0, 74, 41,108, 70, 87,133,194,122,141, 31,143,101,203,150, 13, 27, 59,118,172, 39, 0,255, 70, 56, 55, 78,153, 50,229,
-173,201,147, 39, 35, 54, 54, 22, 59,119,238, 68, 92, 92, 92,205, 4,162, 48, 26,141, 72, 74, 74, 66, 82, 82, 18, 92, 93, 93,241,
-226,139, 47,146,217,179,103, 15, 29, 49, 98,132, 3,128,126,127, 69, 62, 31,211, 32,127, 91, 7,235,209,135,184,189,181,181,117,
-244,182,109,219,236,122,246,236,201,114, 28,135,223,207,159,199, 59, 11,167, 99,248,200, 5,208, 85,202,193,233, 8,120,153,170,
-217,147,105,245, 44, 74, 47, 18, 8,170, 23,160,215,235, 49,251,160, 12, 54,228, 33,190,156,214, 19, 91,183,110,173,234,138,169,
-168, 64, 89, 89, 25,202,203,203, 81, 86,214,124,215, 91,121,177,202, 96, 48, 10,200,206,187,143,172,156, 27,176, 86,181, 2,101,
- 60,241,160,176, 2, 4, 78, 48,106,147, 33, 84,223,152,149,218, 44,104, 42, 77, 20,199,212,244, 56, 73,131,190,212,228,125, 25,
-134,249,225,192,129, 3,163,182,108,217, 34, 31, 53,106, 84, 71, 87, 87,215,126, 0,240,202, 43,175,116,180,182,182,198,129, 3,
- 7,244, 77, 61,192, 90,120,193, 50,174,174,174,147,251,245,235,135, 7, 15, 30, 32, 45, 45, 45,210,196, 52,158,141,143,143,159,
-234,233,233, 73, 50, 50, 50,144,149,149,133,194,194, 66, 88, 91, 91,195,206,206, 14, 46, 46, 46, 16, 4, 1, 90,173,214,249,230,
-205,155, 62, 0,206,154,154,166,188,188,188, 34, 0, 95, 85, 84, 84,172,146, 72, 36, 53,214,254,175,120,194, 5,168,111, 38,221,
- 9,233,214,173,125, 87, 15, 15,219, 14,126,221,186, 57,122,184,223, 41,117,112,244,176,252,237,116,130, 89,222,131,162,228,155,
- 55,111, 31,109, 73,145,105, 11, 11,161,190,126,189, 42,230,170,172, 12,186,242,114,112,197,197,112,237,208, 1,208,104,192,232,
-116,144,232,116,144, 10, 2,204,204,205, 97,202,219,150,228,210, 37,168, 70, 86, 77,223,162, 79, 74,170,114,172, 8,129,116,192,
- 0, 16, 11, 11, 16,115,115, 48, 39, 79, 86, 9, 45, 75, 75, 96,119,179,189,100,112,115,115,179,119,113,113, 9,217,186,117,171,
-172,160,160, 0,137,137,137, 9,105,105,105,165, 14, 14, 14, 42,137, 68, 34, 36, 39, 39,255,145,156,156, 60,194,203,203, 11, 60,
-207,183,109,134,238,235,163, 71,143, 6,247,237,219,151,243,242,242, 50,207,207,207,247, 44, 42, 42, 34, 57,213,163,148,106, 16,
- 21, 21,165,200,204,204,172,224,121,254, 24,170,230,193,106,244, 38,113,116,116,180,144,203,229,175,242, 60, 63,185,171, 23, 47,
- 41, 44,211, 2,156, 30,233,247,210, 81,172, 49,128,114, 70,100,100,229, 64, 83, 41,224, 97, 97, 25,252,122,190,176, 85,207, 93,
- 89,229,230,230,182, 82,173, 86,159,104,202,197, 26, 51,102, 12, 40,165,136,138,138,194,165, 75,151,112,233,210, 37,220,187,247,
-111,243,199,218,218, 26,161,161,161, 24, 52,104,144,233,221, 46, 21, 21,112,118,118,134,181,181, 53,142,134,253,128,239, 62, 63,
- 88, 27,232, 94,231, 5, 9,230,230,230,216,240,206, 23, 22,211,223, 27,247, 33,128, 81,166,112, 7, 7, 7, 79,110,223,190,189,
- 79, 96, 96, 32,238,221,187, 7,111,111,111,180,111,223,190,107,106,106,234, 12, 83,220,207,250, 72, 76, 76, 52,248,250,250, 58,
- 57, 59, 59, 47,158, 58,117, 42, 56,142,195,176, 97,195,144,146,146,242,125,126,126,126,246,140, 25, 51, 90, 15, 28, 56, 16, 31,
-126,248,225, 43, 61,123,246, 92,215, 84,119, 89,191,126,253,222, 29, 63,126,252,123, 47,189,244,146,242,210,165, 75, 61,181, 90,
- 45,235,225,225,193,220,185,115, 7, 60,207, 35, 60, 60,156, 59,123,246,108,182,193, 96,216,124,227,198,141, 94,229,229,229,199,
-226,226,226, 26,117, 46, 31, 60,120,240,214,209,163, 71,135,118,236,216, 17,167, 79,159,198,188,121,243, 78,171, 84,170, 46, 47,
-190,248,162,167,133,133, 5,226,227,227, 97, 48, 24,224,234,234,234,180,124,249,242, 17,195,134, 13,195,185,115,231,176,118,237,
-218, 83,206,206,206, 95, 55, 39,130, 37,213,177,145,117,193,178, 44,226,226,226,240,252,243,207, 99,217,178,101, 0,128,223,127,
-255,221,114,232,208,161, 81, 65, 65, 65, 46,205, 5,230, 55,230, 84, 61, 43,163, 8, 45, 45, 45, 39,239,217,179, 7,183,111,223,
-198,229,203,151, 81, 84, 84, 4,157, 78, 87,187,152,110, 73,113,113,213,116, 13,173, 91,163,235,202,149,248,246,229,151,145,147,
-147, 3,134, 97,236,155,120,198,191,186,114,229, 74,156, 58,117, 10,155, 54,109, 66,105,105,195,109,152,153,153, 25, 2, 2, 2,
-224,227,227,131,180,180, 52, 0,176,255,171,242,249,183,118,176, 26,131,181,181,245,103, 59,118,236,176,235,211,167, 15,171,209,
-104, 32, 8, 2,122,247,234,133,169,211,166,226,204,209,159,225,218,102, 16, 88,157, 25, 56, 75,243,230, 5,150,209, 10,232, 81,
- 2, 77, 89, 25,148,213,193,164,215,179,116,160,148,194, 96, 48, 64,163,209,212,198,246,212, 4, 83, 55,235, 30, 25, 20,113, 73,
-119,121,143,210,242, 56, 68,198,252, 8,163, 94, 15,175,142, 43, 80,105,116,128,133,211, 12,104, 13,199, 97, 40,174,114,226,229,
- 86, 65,120,240,160, 0, 32, 76,179, 22, 39,229, 76, 14, 3,130, 81,103,186,192,202,200,200, 40,118,117,117,253, 41, 60, 60,124,
-202,216,177, 99,113,230,204,153, 57, 0, 48,118,236, 88,132,135,135,227,238,221,187, 63,229,228,228, 20,183, 80, 72, 57,160,106,
- 78,152, 90,215,203,217,217,217,171, 85,171, 86,243,103,207,158, 29,216,189,123,119,236,223,191, 31, 0,206,155,194, 87, 80, 80,
-240,207,165, 75,151, 14, 89,188,120,177, 11,195, 48, 36, 37, 37, 5,132, 16, 56, 57, 57,193,211,211, 19,118,118,118, 40, 46, 46,
-134,175,175,175,133,167,167,231, 40, 83, 5, 86,181,197,239, 1,160,164,230, 77,169,250, 83, 6,192,154, 82,250, 68,163, 90, 5,
- 65,182,253,236,233,200,237, 1,190,195, 25,175,214, 22, 37,128,158, 92,139,202,182, 48,242,210,150, 53, 94,132, 36,220, 77, 77,
-245,162,130,128,242,162, 34, 24,202,202, 96, 44, 42, 2, 87, 88, 8,226,234, 10,137, 78, 7,182,178, 18,172, 94, 7,165,210, 28,
- 37,121,121, 32,140, 9,215, 82,157, 6,161, 70, 92,177, 44, 91,235, 90, 17, 11,139, 90,135,139,101, 89,152, 50,117,145, 66,161,
-216,179,115,231, 78, 23, 87, 87, 87,124,241,197, 23,112,113,113,233, 24, 28, 28, 92,208,191,127,127, 51, 7, 7, 7,116,236,216,
- 17,254,254,254,248,227,143, 63,192,178,236,221,102, 30,108, 28, 33,100,212,229,203,151,223,138,136,136,120,217,213,213,149, 76,
-153, 50, 5,195,135, 15,135, 66,161,128, 86,171, 69, 81, 81, 17, 78,158, 60, 73, 56,142,235, 83,253, 6,220,234,185,231,158,219,
- 67, 8,201, 78, 79, 79,159, 82,159, 83, 46,151,239,153, 53,107, 86,208,168, 81,163, 8, 35,232,244,161,103,246, 73,120,158, 35,
-239,172,252,142, 15,187,116,129,225,121,142,140,123,125,169,240,219,249, 4,102,206, 91,159,241, 62,189, 94, 68, 98, 98,162,203,
-172, 89,179,214, 3, 56, 97,202,181, 36,145, 72,106,203,179, 62, 88,150,109,116,208,192, 99,206, 8,207,101,143,152,214,251,223,
- 47, 76,188,193,222,221,197,147,169,113,174, 0,160,180,180, 20, 25, 25, 25, 48, 26,141,176,183,183,135,209,104, 52,105,125,182,
- 53,107,214, 48,132,144,247, 26,218,211, 84, 0, 0, 32, 0, 73, 68, 65, 84, 39, 79,158,140,220,220, 92,172, 93,187, 22, 43, 87,
-174,196,248,241,227,177, 97,195,134,149,126,126,126,123, 76,153,255,169, 94, 55, 94,123, 27, 27,155,195,235,215,175,151, 89, 89,
- 89, 33, 46, 46, 14, 93,186,116,193,231,159,127, 46, 73, 73, 73,105,221,169, 83, 39,220,186,117, 11,217,217,217,105,205,197, 34,
-201,229,242, 57, 11, 22, 44, 80,102,102,102, 98,220,184,113,202,180,180, 52,220,188,121, 19,148, 82,196,198,198,114, 71,143, 30,
-205,214,106,181, 3, 98, 98, 98, 30, 2,248,190,185, 23,186,254,253,251, 47,104,223,190, 61,126,255,253,119,204,159, 63,255,172,
-133,133,197,235,197,197,197, 51,244,122,253,231, 35, 71,142, 68,159, 62,125,144,156,156,140, 81,163, 70, 33, 32, 32, 0,231,207,
-159,199,178,101,203, 78, 91, 88, 88, 76,108,166, 28,238,132,133,133,117,245,247,247,175,237,221,144, 74,165,176,177,177, 65, 82,
- 82, 18, 58,116,232,128,101,203,150, 97,203,150, 45, 88,178,100,137, 48,116,232, 80, 78,175,215,203,106,156,205, 39,196, 51, 49,
-138,176,188,188,156,230,228,228,192,202,202, 10, 33, 33, 33, 72, 58,117, 10,145,179,102,225,222,154, 53,160,148,194,113,253,122,
- 4,190,255, 62,186,221,189, 11,181, 90,141,125,251,246,129, 97,152,218, 17,177,141,220,243, 40, 41, 41,129,183,183, 55,162,162,
-162,176,111,223, 62,124,241,197, 23,181,177,108, 82,169, 20, 65, 65, 65, 24, 58,116, 40, 82, 82, 82,176,115,231, 78, 88, 89, 89,
- 65,196, 19, 8, 44, 74, 41,169,251, 89,175,123, 99,160,191,191, 63, 91, 94, 94, 14,157, 78,135, 7, 15, 30, 32, 61, 61, 29,102,
-102,102,200,206,203, 64,207,118,229,200, 37,122, 36,198,166,242,144, 72,174, 55,247, 80,212,235,245,136,140,140, 68,100,100, 36,
-132,142,155, 32, 8, 66, 77, 55, 69,173,123,149,155,155, 43,120,122,122,162,180,180,148,105,190,241,170, 60,123, 62, 60,126,216,
-148,177,207,203, 67,195,190,131,177,146, 67,185,206, 6, 26,157, 30,101, 90, 41,244,138,161, 32,228, 34, 24, 86,129, 62, 62,237,
-240,199,229, 84,157, 96, 52,132, 54,221,224, 64, 16, 12, 15, 41,227, 49,137, 8, 57, 71, 40,120, 93,195, 59,178, 44, 36,114, 21,
-180, 21,101, 2,165,166, 59, 48,182,182,182, 7, 15, 30, 60, 56,182,111,223,190, 22,131, 7, 15,110, 87,221,125,103, 60,120,240,
-160,198,214,214,246, 96, 11,197,213, 42, 66,176, 12, 20,140, 66, 46, 63,103,103,111,255,187,165,165,165,223,176, 97,195,218, 13,
- 31, 62, 28,109,219,182, 69, 72, 72, 8, 66, 66, 66,206,231,228,228, 92, 49,241, 77,226, 58, 33,100, 66,122,122,250, 68, 87, 87,
-215,161, 61,122,244,112,105,211,166,141,210,218,218, 26, 44,203, 66,163,209,160,160,160,160,102,196, 85, 27, 83,211,250,220,115,
-207,193,213,213,245, 29,169, 84,186,190,222,155, 10, 7,224, 5, 87, 87, 87,139, 39,185,136, 19, 19, 19, 31, 12, 31, 22,236,180,
-253,219,240,246, 90, 45,111,248,245,212, 57,131, 81,111,161, 77, 74,190,219,162,217,236, 13,130,112, 54, 38, 58,122,120,191, 62,
-125, 20,247, 98, 98, 96, 44, 46, 6, 95, 84, 4,137,193, 0,137, 70, 3,182,178, 18, 68,171, 69, 43, 31,115, 64,112,198,181,180,
-108,206,192,243,231, 76, 22, 88,213,221,129, 53,141,127,141,192, 98,234, 8,172,154,238,175,166,224,236,236,108, 62, 98,196,136,
- 32, 95, 95, 95, 80, 74,241,217,103,159,193, 96, 48,200, 13, 6, 3,140, 70, 35, 12, 6, 3,202,202,202,112,248,240, 97,252,240,
-195, 15, 17, 86, 86, 86, 63,154, 80,231,156,135,135,199, 92, 65, 16, 28, 57,142, 51, 56, 58, 58,202,126,250,233, 39, 40,149, 74,
- 48, 12, 3, 31, 31, 31, 40,149, 74,189,155,155, 91, 9, 0, 56, 57, 57, 25,183,108,217, 34,153, 49, 99,134,172,145,183,127,159,
-183,222,122, 75, 90, 35, 26,221, 90,109,224, 12, 6,131, 0, 0,157,123, 12,248,119,183,216, 48,224,246,237,219,216,188,121, 51,
- 52, 26, 13, 88,150,149,153,120,141, 34, 56, 56, 24, 67,135, 14,173,237, 14,116,114,114,130, 94,175, 7,199,113, 38,139, 43, 0,
-168,153, 68,116,205, 26,194, 96, 53,176, 39,208, 50, 29, 64,109,252, 84, 73, 73, 9, 50, 51, 51,113,255,254,253,218,238, 19,129,
-154,246,150, 29, 30, 30,222,223,203,203,203,205,195,195, 3,187,118,237,130, 86,171,189,251,203, 47,191,180,157, 50,101, 10, 90,
-183,110,237,192,243,124, 48,128,211, 45,185, 78, 57,142,155,178,112,225, 66, 11, 39, 39, 39,236,222,189, 27,199,142, 29,203,235,
-209,163,135,211,244,233,211,209,177, 99, 71, 36, 38, 38,226,171,175,190,122, 40, 8,194,171, 38,112,165, 93,187,118,205,217, 96,
- 48, 32, 59, 59, 27,130, 32, 32, 57, 57, 25,217,217,217,194,133, 11, 23,178,117, 58, 93,141,184,106, 22, 94, 94, 94, 42, 63, 63,
- 63,167,148,148, 20, 28, 58,116, 8, 70,163,113, 77, 98, 98,162,193,198,198,230,208,182,109,219, 86,182,105,211,198,118,192,128,
- 1,232,211,167, 15, 40,165, 56,126,252, 56, 62,250,232,163,211,102,102,102,175, 39, 38, 38, 26,154,113,213, 95, 91,183,110,221,
- 7,246,246,246,227, 38, 77,154,196,248,249,249, 33, 58, 58, 26, 60,207, 35, 56, 56,184, 86, 92,157, 57,115,230,167,211,167, 79,
-191, 4, 64,166, 82,169,236, 76,153, 86,130, 16,242, 2,128, 26,135,160,130, 82,250,219,179,214, 80,235,116, 58,164,164,164,192,
-217,217, 25, 29,251,246, 69,199,244,116,252, 81, 29,212, 62,104,233, 82,148,107, 52,216,179,103, 15, 98, 98, 98,192,178, 44,218,
-182,109,219,252,243,206, 96,192,157, 59,119, 80, 80, 80,128, 49, 99,198, 96,210,164, 73,248,244,211, 79, 97, 48, 24,176,106,213,
- 42, 20, 22, 22, 98,215,174, 93, 72, 77, 77,133, 68, 34,129, 74,165,250,203,242,215,148, 6,249, 91, 59, 88, 53,194, 72, 16, 4,
-168,213,106, 68, 69, 69, 33, 45, 45, 13, 42,149, 10, 90, 78, 16,182, 94,141, 23, 24, 34, 85,115, 20, 17,132,151,174,106,174, 66,
-121,158, 71, 68, 68, 4,110,223,190, 13,235, 14,180, 38, 48, 17, 58,157, 14, 26,141,166,198,185,210, 38, 37, 37,229,150,148,148,
-216, 53,151,182, 7, 29,152,253,161,161,231, 22,249,251,116,109, 63,120,224, 71, 56,113,226, 67, 20,151,150, 66, 83, 41, 65,185,
-214, 0,141,142,194,205,178, 45, 2,123,248, 34,255,161, 30, 41, 55, 99,178,243,101,182, 77,190,137, 81,130,111, 38,140, 13, 94,
-252,193,187,179,157,187,116, 92,174,164,121,191,129,150,196, 82,212,204, 87, 73, 24,200, 85, 14,128, 68, 65,163,147, 10,202,255,
- 72,208, 22, 80,130,111, 90, 32, 8, 52, 30, 30, 30, 63, 44, 92,184,112,125, 84,212, 53, 39, 0,136,142,142,206,203,205,205,125,
- 63, 43, 43, 75, 99, 42, 15, 33,196,134, 16, 44, 19, 4,202, 86,139,180, 33,139, 23, 47,118,235,219,183,175, 65, 42,149, 34, 35,
- 35, 3,159,126,250, 41,194,195,195, 15,229,228,228,108,111,201,172,206,148,210,120, 0,241,132,144,181, 9, 9, 9,131,131,131,
-131, 55,116,232,208,193,131,227, 56,148,148,148,160,168,168, 8,169,169,169,168,168,168,104,118,217,145,140,140,140,115,153,153,
-153,131,231,206,157,139,190,125,251, 78,219,187,119,239,107,117,109,224,238,221,187, 95, 29, 61,122,180,135,181,181,181, 76,171,
-213, 26,147,147,147, 47,182,232, 53,211,211,179,223,162, 69,139,122,204,153, 51, 7,229,229,229,216,183,111, 31,182,111,223, 14,
- 79, 79,207,126,153,153,153,151, 91, 32, 0, 15, 30, 11, 13, 93,220,163, 83,167, 14,173,189,188,144,114,246, 44,100, 6, 3,164,
- 28, 7,182,162, 2, 82, 99, 37,158,243,183,128, 76,233,128,156,123, 90, 28,186,121,243, 62,165,180,217, 9, 50, 13,193,193, 48,
- 38, 39,131,101, 89,200,130,130,170, 98,173,204,205,193,252,250,235,191,133,213,234,213,160, 22, 22, 16,130,154, 15, 65,120,240,
-224, 65, 69,251,246,237, 99,111,221,186,229,215,169, 83, 39,172, 89,179, 6,153,153,153,160,148, 34, 47, 47, 79,151,151,151,167,
- 46, 44, 44,204, 96, 24,230, 88,118,118,246, 30, 83,151, 34, 17, 4,193,241,248,241,227, 53,142, 34,126,255,253,119,184,185,185,
-193,218,218, 26,165,165,165,152, 50,101,138,252,131, 15, 62, 0, 0,196,198,198, 74,205,204,204, 26,119,117,141, 70,202, 48, 12,
-201,204,204, 52,152,155,155, 19, 59, 59, 59,137, 66,161, 64,101,101,101,173,208,186,125,251, 54, 78,156, 56,129,172,172, 44,216,
-217,217, 49,182,182,182,224,121,190,200,196,180,130,101,217,199, 2,218, 91, 42,174,234, 98,245,106, 42, 16, 16,210, 70,194, 94,
-207,206,205, 28,236,230,236,129, 7, 15, 30, 32, 35, 35, 3, 25, 25, 25,200,204,204, 68,251,246,237,145,126,255, 46,228, 50,233,
-117, 19,239,163,215,122,246,236, 9,173, 86,139,216,216, 88, 94, 42,149,190,150,144,144, 16,161,209,104,164, 61,122,244,192,253,
-251,247, 95,105,169,192, 98, 24,198,195,220,220, 28, 90,173, 22,199,143, 31, 47, 84,169, 84,157,227,226,226,198,167,166,166,126,
-234,233,233,105,121,255,254,253, 7, 6,131, 97, 68,116,116,116,170, 9,238,200,204,247,222,123,239,128, 32, 8,109,254,241,143,
-127,176,163, 71,143,182,112,119,119, 71, 84, 84, 84, 69,101,101,229, 39,166,138, 43, 0, 72, 79, 79, 47,191,116,233, 82, 94,215,
-174, 93,157, 92, 93, 93, 33,149, 74,215,185,185,185,125, 98, 97, 97,241,241,200,145, 35,109, 67, 66, 66,240,243,207, 63,195,194,
-194, 2,233,233,233, 57,201,201,201,223, 56, 57, 57,109, 55,197,193,139,138,138, 74, 7,240, 70, 96, 96,224,199, 95,126,249,229,
- 50, 66,200,107,103,207,158,173,141,189,219,188,121, 51,206,156, 57,243,211,115,207, 61, 55, 43, 36, 36,100,122, 11,171,222,156,
- 82,122,179,250,153,250,143, 58,191, 63, 43,177, 89, 70,189, 94, 15,123,123,123,228,231,231, 35, 47, 47, 15,173, 90,181, 66,255,
-254,253, 97, 52, 26,241,203,201,147,184, 84, 45,182, 28, 28, 28, 96,101,101,133,248,248,120, 80, 74,111, 53,217,249, 99, 48,212,
-246, 70,196,199,199,195,201,201, 9, 75,150, 44,129, 94,175,199, 79, 63,253,132,184,184, 56, 48, 12, 3, 71, 71, 71, 88, 90, 90,
-214,196,104,221,130,136,167, 39,176,170,215,204, 26,219,163, 71, 15, 73,106,106, 42, 82, 83,171,238,217,138,138, 10, 78,194,226,
-232,131,235,191,188,209,132, 0,232, 86,111,126,152,136,213,171, 87,247,158, 54,109, 26,220,221,221,177,243,154, 1,247, 51,120,
- 24, 12, 6,228,228,228,224,202,149, 43,124,255,254,253, 89,142,227,202,121,158, 31,149,153,153,249, 58, 33, 36,183, 73,206,144,
- 16,222,209,123,220,132,109, 59,254,249,199,180,105,211,108, 71,143,217,142,216,196, 27, 40,210, 56, 1, 0,220, 28, 44, 16,216,
-233, 61,228, 61,172,196,153, 83, 39,138,169, 80, 49,145,198, 29, 50, 54,197,153,148, 70,191,239,214,138, 92,152, 60,251,253,183,
-125,186,121, 13,125,103,238, 75,246, 29, 60,198, 40, 80, 28, 73, 21, 86,101,144, 91, 56,226, 86, 90,129,246,183, 8,245,195,130,
- 18,238,119,194,227,171,164, 12,154,222, 20,103,125, 20, 22, 22, 94, 86,171,179, 29,235,204,218,238,168, 80, 40, 47, 55, 35,168,
-154,228,172,153, 78,225,244,233,211,184,116,233,146,225,246,237,219, 23, 8, 33,199,213,106,245,245, 39,229,164,148,150, 1, 56,
- 98,105,105, 41,232,116,186, 15, 71,140, 24,209,158, 16,130, 59,119,238,224,252,249,243, 97, 5, 5, 5,159, 52,199, 89, 81, 81,
-177,224,237,183,223,254,102,240,224,193, 67,170, 71, 60,201, 83, 82, 82, 64, 41, 69, 64, 64, 0,250,244,233,211, 70,175,215, 11,
- 87,175, 94, 45, 60,121,242,228, 33,157, 78,183,165, 37,233,204,204,204,188, 28, 16, 16, 80,213, 13,173,213, 34, 43, 43, 11, 28,
-199, 65,173, 86,183,168, 60, 67, 66, 66,248,192,192,192, 87,190,252,254,251, 63,222, 26, 55,206,182,215,232,209,200,142,136,128,
- 94,173,134,156,231, 33,151, 41, 97,212, 56,161, 48, 91,135,239,110,222, 44,213,243,252,235,245, 27,135,134,210, 89, 53,167, 25,
-169, 29, 45, 72, 84,170,170,184,171, 58,163, 8,169, 74, 5, 70,165, 2, 35,147, 61,230, 96, 53,196,169,213,106, 39,206,158, 61,
- 59,242,183,223,126,179,121,253,245,215, 49,122,244,232,248,210,210,210,225, 5, 5, 5, 38,245,109, 55,196,201, 48, 76,254, 11,
- 47,188,224, 88, 89, 89,201,189,246,218,107,146,130,130, 2,116,236,216, 17, 0, 80, 86, 86,134, 83,167, 78,161, 83,167,170, 48,
-148,155, 55,111,162,107,215,174,141,114,198,199,199,255,188,119,239,222,185,227,199,143,151,241, 60,207, 87, 7,197, 19, 23, 23,
- 23, 54, 42, 42, 74, 56,118,236, 24,180, 90, 45, 60, 60, 60,152, 86,173, 90,145,168,168, 40,225,238,221,187,145,132,144,149,166,
-212, 59,165,244, 17,113, 37,145, 72, 80, 81, 81, 97,146,184,106,234, 90,162,160,212, 81, 67,214,188,177,100, 66,224,185, 67,145,
- 42, 11, 11,139,218,152,159,118,237,218, 65, 34,149, 96,247, 47, 91, 53, 37,101, 15,215, 54,199, 25, 20, 20,164,144, 74,165,163,
-125,124,124, 16, 29, 29, 13,189, 94,127,241,220,185,115,183,130,131,131,207,197,199,199,143,232,216,177, 35, 24,134,121, 33, 40,
- 40,200, 34, 44, 44, 76, 99,106, 58, 41,165,105, 89, 89, 89,240,242,242,130,141,141,141,149,209,104,228,226,226,226,126,236,222,
-189,251,209,212,212, 84, 47,133, 66,113, 63, 58, 58,186,220,148,188,199,196,196,100, 2,232, 23, 20, 20, 36,185,113,227,198,253,
-254,253,251, 67, 46,151,163,125,251,246,170, 59,119,238,188,142, 38,166,142,168,207, 73, 41, 21,220,221,221,183, 93,187,118,109,
-173,143,143, 15, 94,123,237,181,231,163,163,163,159,247,246,246, 70,219,182,109, 17, 30, 30,142,176,176,176, 67,130, 32,188,149,
-147,147,163,107,234,133,175,177,188, 87, 7,173,207,244,243,243,123, 89, 34,145,192,210,210,146,205,206,206,102,207,158, 61, 11,
- 74,233,155, 77, 13, 26,104,238, 89, 87, 31,166,196, 92,181,148,243, 73,238, 77,134, 97, 62,154, 58,117,234,215,115,230,204, 81,
-246,236,217, 19, 37, 37, 37,181,162,255,183,223,126,131, 32, 8,176,183,183,135,189,189, 61,110,223,190,141,163, 71,143,234,139,
-139,139,183, 41,149,202,207,155,226,156, 50,101,202, 35,156, 53,226,237,196,137, 19,181,131, 72,236,237,237,145,154,154,138, 35,
- 71,142,232,138,139,139,183,114, 28,183,229,175,204,251,255,156,192, 42, 46, 46,126,119,197,138, 21, 3,103,204,152, 97,167,213,
-106, 89, 7, 7, 7,168,213,106,238,236,217,179, 69,229,229,229,239,182,228,100, 44,203, 14, 87,171,213,147, 22, 45, 90,180,182,
-125,251,246,118,111,188,241, 6, 22, 44,232, 4,189, 94, 15,133, 66, 1,153, 76,246,237,137, 19, 39,198,219,216,216,100, 31, 63,
-126, 60, 19,192, 38, 83,120,243,227, 15,223,113,241, 25, 51,244,235,175,183, 31,240, 13, 8,244,124,206,203, 75,209,207,211, 26,
- 6, 35,143, 7,121, 15,113,225, 74, 82,101, 74, 98, 92, 22, 56,221,228, 7, 55,142, 39,153,194,121,163, 74, 48,189,221,163, 29,
-241,126,109,254,230, 69,253,123,182,237,245,230,107, 1,182,165, 66, 9, 61,122,236,118, 97, 90,102,249, 53, 9,139, 47,111,166,
-211,248, 39, 41,120,157, 78,103,168,223, 19,164,211,233, 12, 45,180, 85,139, 9, 33,159, 50, 12, 89, 6, 10, 70, 46,151, 71,110,
-223,190,125, 31,128,108, 74,105,164, 90,173,214, 62,173, 11,165,172,172,236, 23, 66, 72,236,157, 59,119, 22, 51, 12, 99,195,243,
-124,210,131, 7, 15,126,162,148, 54, 55, 75, 56,170, 39,187,124,201,195,195, 99,192,229,203,151, 55,141, 28, 57,178,219,139, 47,
-190,136,220,220, 92, 72, 36, 18,196,199,199,235, 79,158, 60, 25, 89, 92, 92,252, 17,165, 52,170,165,105,171,118,176, 48,119,238,
- 92,148,149,149,225,208,161, 67, 56,115,230, 76,139, 29,172,154, 7,120, 96, 96,224,208,245,123,246, 28,124,161, 83,167, 86,157,
-218,182,149,181,238,218, 21,102,230,230, 40,121,248, 16,241,247,114,248, 31,147,147,211,181, 28, 55, 57, 38, 38,198,164,107,201,
-104, 52,194,214,214, 22,148, 82, 72,151, 47, 7, 8, 1, 37, 4,149,213,179,120,115, 28, 7,105,239,222,160, 44,139, 82,173, 22,
- 6,131, 1, 74,165,178, 73,206,236,236,236,108, 79, 79,207,215,223,124,243,205,223,246,237,219,199, 4, 5, 5,245, 56,118,236,
- 24,253, 51,117,156,149,149,213, 30, 0,220,220,220, 30, 88, 89, 89, 73,222,120,227, 13, 24,141, 70, 84, 84, 84,160,180,180, 20,
- 15, 31, 62,212, 47, 90,180, 72, 14, 0,114,185,220, 56,124,248,240, 70,159, 31,106,181,122,133,167,167,231,233,175,191,254,122,
-249,140, 25, 51, 2,199,143, 31, 47,101, 89, 86,200,206,206,230, 14, 30, 60, 72, 58,116,232,192, 40, 20, 10, 18, 17, 17, 33,220,
-188,121,243, 42,165,244,147,236,236,108,147, 87, 26,168,113,213, 5, 65,168,157,191,170,169, 81,102, 45, 65,254,117, 26,239,213,
-199,230,179, 65, 19, 2,222, 91,191,244, 11, 11, 7, 71, 7,112, 28,135,180,140,187,248,254,232, 55,154,210,202,226, 79, 11,110,
- 52,191, 6,167, 92, 46, 55,179,179,179, 83, 41,149, 74, 68, 69, 69, 1,192,161,234,134,233, 95,177,177,177, 35, 58,117,234, 4,
- 27, 27, 27,179,252,252,252,246, 0,226, 90,144,196,187,106,181, 26, 70,163, 17,142,142,142,146,148,148,148, 86, 0,210, 18, 18,
- 18, 42, 0,220,124,146, 60,135,133,133,113,253,250,245,187,125,227,198,141,128,231,158,123,142, 68, 70, 70,106,116, 58,221,193,
-150,242, 56, 59, 59,127,125,226,196,137,190,148,210, 33,190,190,190,104,221,186,117,141,107,143,139, 23, 47,134,100,103,103,207,
-126, 74,139, 59, 83, 66, 8,202,202,202,216,234, 50, 53,168, 84,170, 39,229,173,168,227, 92, 85, 60,107,141,116, 86, 86,214, 65,
- 23, 23,151,115,171, 87,175, 94,209,190,125,251,153,179,103,207,102, 59,118,236,136,146,146, 18, 88, 89, 89,193,213,213, 21,217,
-217,217,216,183,111, 31,159,159,159,255, 3,203,178, 31,231,212, 31,161,210, 2, 78, 91, 91, 91,184,186,186, 34, 43, 43, 11,251,
-246,237,227,243,242,242,190,231,121,126, 99, 94, 94, 94, 30, 68,180, 76, 44,155,210,107, 84, 61, 77,195,103, 60,207, 15,172,113,
-181,138,139,139,223,109,110,125,187,198, 20,110, 80, 80,144,196,204,204,108, 82, 65, 65,193, 90, 15, 15, 15,187, 55,222,120, 3,
-171, 86,173, 66, 66, 66,130,249,216,177, 99,237, 36, 18, 9, 23, 18, 18, 82,218,210, 55,134,154,197,158, 33,145,141, 0, 21,186,
- 1, 32, 96,216,102, 23,123, 54, 69,137,119,111, 75, 6,241, 20,179,170, 14,192,174,196,187, 52,236,207,190,217,212, 93,156,153,
- 82, 52,187,176,115, 99,156, 13, 5,185, 63,233,219,210, 95,241, 6, 86,239,127,196,213,213,117,130, 92, 46,255,122,194,132, 9,
- 22,123,247,238,213,229,229,229, 45, 2,112,168,169, 53, 3,155, 75,167,155,155, 91, 69,235,214,173, 97,103,103,135,194,194, 66,
-220,191,127, 31,106,181,218,252, 73,211, 89,119,177,103, 84, 47,246, 76, 77, 88,236,185, 62,103,175, 94,189,238, 25,141,198, 22,
- 45,190, 42,149, 74, 31, 42, 20,138, 54, 53,231,104, 42,157,238,238,238, 19, 60, 60, 60,214,101,103,103,255,154,149,149,181,236,
-105,212,145,187,187,123, 47, 66,200, 81, 65, 16,148,245, 29,174, 26, 17,230,234,234,218, 74, 46,151, 63, 18,228,222, 24,167,167,
-167,103,127,165, 82,185, 98,210,164, 73, 61, 71,143, 30,205, 68, 70, 70,226,226,197,139,124,100,100,228, 53,163,209,184, 41, 51,
- 51,243, 82, 75,210, 57, 97,194,132, 4,131,193,208,218,196,178,204, 39,132, 60,178,112,182,169,215,188,131, 15,241,179, 54,179,
-255, 80,111, 48,118,103, 8,168, 84, 42, 77, 40, 41,123,184,182, 33,113,213, 16,103,245,244, 12,191,216,218,218, 14, 46, 42, 42,
-186,193,113, 92, 80, 88, 88, 88,165,159,159,159,212,198,198,230,128,149,149,213, 11,165,165,165,151,251,246,237, 59, 98,245,234,
-213,130,169,117, 20, 24, 24,216,185, 77,155, 54, 81, 43, 86,172, 32,235,214,173, 67,102,102,166,223,213,171, 87,147,255,108,189,
-247,234,213,171, 53,203,178,123,120,158,111, 67, 8,217,123,245,234,213,143, 76, 17, 67,245, 57,187,118,237, 42, 43, 41, 41,153,
-239,225,225,241,150,179,179,179,211,131, 7, 15, 50, 50, 51, 51, 63,207,201,201,217,107,170,184, 50,165,142,252,252,252,138, 0,
-200, 1,192,148,120,171,255,239,103,221, 95,193,233,233,233,217,134,227,184,213, 62, 62, 62, 99,167, 79,159, 78,146,146,146, 16,
- 26, 26,138,244,244,244, 99, 12,195,172,206,202,202,186,243, 52, 56,207,158, 61, 75,211,211,211,143, 72, 36,146,181,153,153,153,
-105,255, 95,121,255,159, 20, 88,127,213,197, 87, 35,180,138,138,138, 86,169, 84,170,219,161,161,161, 47, 60,107, 23,244, 95,205,
- 73, 8,113,170,118,163,242,254,151,242, 78, 8,145, 40,149, 74,127,157, 78,119,139, 82, 90,250,148, 56, 87, 1, 88, 9,224, 99,
- 74,233,134,255,181,107,233, 89,231,172, 22, 90,139, 40,165,168,172,172,252,178, 41, 97,245,119,202,251,224,193,131, 61,207,157,
- 59,151, 89,255,217,167, 84, 42,109,116, 58, 93,113,216, 19,188,248,249,251,251,127,196,178,236, 4,142,227, 14,197,196,196,172,
-123, 22,243, 78, 8, 33,173, 91,183,150, 55, 53,201,173,120, 31, 61, 25,167,171,171,171, 47,128,229, 64,213, 50, 74,153,153,153,
-209, 79,139,147, 16,194, 3,248, 68,173, 86,199,255,127,231,253,239, 6,201,127,242,228,213, 15,150,189,104,193, 98,188,127, 55,
-152, 34,172,254,166,249,230, 0, 92,125,202,156, 27, 0,108, 16,111,235,103, 19,213,130,234,210,255, 90,190,235,139,171, 58,207,
-190,130, 39,229,140,142,142,254, 8,192, 71,207,248, 61, 78, 1, 84,138, 87,254,211, 71, 78, 78, 78, 44,128,241,207, 58,231,255,
- 58, 24,177, 8, 68,136, 16, 33, 66,132, 8, 17, 34,158, 46, 8,128,110,141,188,125,152,108,253, 17, 66,186,181,244,196, 38,116,
-247,136,156, 34,167,200, 41,114,138,156, 34,167,200,249, 55,227,108,142,251,239,210,245,248, 31,141,193, 18, 57, 69, 78,145, 83,
-228, 20, 57, 69, 78,145, 83,228,252, 59, 66,236, 34, 20, 33, 66,132, 8, 17, 34, 68,136,120,202, 48, 57,200,189,123, 59,226,206,
- 27, 49, 10, 44,134, 3, 0,120,156,102,165, 56,158,112,135,102, 63,233,201, 93, 92, 92, 58, 19, 66, 38, 51, 12, 51, 30,128, 32,
- 8, 66, 8, 33,228, 71,181, 90,157,250,164,156,129,129,129,157, 57,142,123,149, 16,242, 18, 0, 80, 74,127,145, 72, 36,255,138,
-140,140, 52,105, 6, 90, 51, 51,179,123, 58,157,206, 17, 0,148, 74,101,190, 78,167,243, 66,245,172,227,227,199,143, 39, 5, 5,
- 5, 4, 0, 46, 92,184, 80,179,214, 38,109,110,134,116,133, 66,113, 79,175,215, 63, 54, 84, 95, 42,149, 26,108,108,108,138,237,
-237,237,139, 29, 29, 29,139,100, 50,217,205,130,130,130, 11,241,241,241,209,148,210,220,150,228,123,224,192,129, 31, 40, 20,138,
-133,122,189,126,103, 88, 88,216, 7,127,245,133, 67, 8, 9,240,116,115,217,105, 52, 26,132,220,252,194,143, 40,165, 39, 90,114,
-124,187,118,237,228,238,238,238,164,254,208,234, 47,231, 16, 23,202,128, 89,188,163,249,249,181,154, 73,159,175, 84, 42,157,235,
-236,236, 60, 52, 43, 43, 43, 22,192, 42,113, 22, 98, 17, 34, 68,136, 16,241, 76, 8, 44, 63, 63, 98,166, 43,197, 96, 8, 24,213,
-193,203, 57,112,241,220,241,246,254,189,135,153, 87, 84, 24,232,197,243, 39, 2,190, 59,112,124,193, 63,218,144,107, 60,193,113,
- 51,107,132,198,196,208, 70, 39,182,252,234, 29,201, 61,158,231, 29, 1, 64,128, 68,243, 69,136,227,157,128,128, 0,239,165, 75,
-151, 34, 48, 48, 16,130, 32,224,194,133, 11,139,191,248,226,139,197,174,174,174,209, 44,203,238,151,201,100, 63,167,165,165, 53,
- 59,132, 63, 32, 32,192, 67, 16,132,241, 0, 94,233,213,171, 87,215,121,243,230,161,125,251,246,168,172,172, 68,100,100,228,210,
-253,251,247, 47,245,243,243, 75, 4,240, 19,195, 48, 63, 71, 69, 69,101, 53,198,165,211,233, 28,107,244, 18, 33,196,113,246,236,
-217, 26,163,209, 8,189, 94, 15,163,209, 8,149, 74,149,168,211,233,174,247,235,215, 47,218,210,210,242,202,201,147, 39,111, 3,
-224,187, 56,155,245,108,237,225, 48,252,183,232,140,143,234,115,234,245,122, 71, 93,100, 36,192,243,224,238,223,135,110,240, 96,
- 84,175, 27, 39, 99, 71,140,112,226, 24,198,137,148,151,223,213,253,248,227,142, 78,157, 58,213,206, 99,210, 20,103, 61, 49, 65,
-230,206,157,187,116,249,242,229,210,137, 19, 39,190, 17, 20, 20,180,166,177,161,223,166,114, 54,115, 62, 69, 47,255, 30,167,142,
- 31, 62,164, 4, 33, 24, 59,118,252, 30, 66,200, 44, 74,233, 47,245,247,245,241,241, 9,150,201,100, 31,113, 28, 23, 43,145, 72,
- 62,136,140,140, 44,243,247,247, 63,236,224,224, 48, 92,175,215,195,215,215, 55, 34, 54, 54,118, 48, 0,236,152, 73,214,200,129,
-197,224, 65,118,206, 36,219,230,124, 71,151, 63, 97,250,102, 79,155, 54,237,243, 13, 27, 54,176,213,147,240, 13,233,210,165, 75,
-123, 66,136, 63,165, 84, 43,222,246, 34, 68,136, 16, 33,226, 63, 38,176, 58,183, 37,175,154, 43,100, 75,150,207,127,209,101,196,
-240,145,150,118, 30,190, 18, 16,182,202,145,177, 2, 25, 59,121,169,197,152,137,111, 91,164, 39,134,187,159,252,237,196,144, 31,
-143,158,207,233,220,150,108,185,117,151,254,171, 33, 62,158,231, 29,151,204,152, 7, 0,216,178,123,135, 69,114,114,178,183, 74,
-165,122,100, 89,144, 97,195,134, 97,200,144, 33,200,200,200,240, 63,124,248,176,255,158, 61,123, 62,245,240,240, 88,157,149,149,
-181,181,113, 17,232,183,206,221,221,125,241,210,165, 75,137,191,191, 63, 20, 10, 69,237,255, 44, 44, 44, 16, 28, 28,140,224,224,
- 96,228,230,230,118, 13, 11, 11,235,122,224,192,129,181,126,126,126, 95,196,196,196,152,228,242,188,254,250,235,120,248,240, 33,
- 30, 62,124,136,210,210,210, 28,141, 70,147,175,211,233,114,148, 74,101,234,160, 65,131,238, 0,224, 59,186, 89,118,112,116,176,
- 63,188,113,253, 90,160,137,161,211,234, 62,125, 0, 0,218, 27,255,238,182, 54,167,148, 66, 38, 75,145,228,228,252, 90, 87, 92,
-153,202, 89, 45, 48,109,211,210,210, 4,153, 76,134, 78,157, 58, 73, 83, 82, 82,238, 5, 5, 5,125, 23, 22, 22,182,166,238,126,
- 45,225,108, 6,254, 31,189,187, 64, 86,112, 55, 14,183,174,156,197, 24, 63, 15,101,236,205,148,213, 0, 30, 19, 88, 44,203, 46,
-255,237,183,223,188,175, 93,187,230,189,122,245,234,118,126,126,126,163, 1, 12, 58,125,250, 52,164, 82, 41,130,131,131,123, 7,
- 5, 5,217,203,184,252, 81,163,219,147,165,243, 23,207, 37, 0,176,235,155, 93,111,110, 95, 64,182,205,223, 70,179, 90, 32,172,
-100, 44,203,126,177,111,223,190,105, 83,166, 76,193,253,251,247,113,249,242,101,168, 84, 42,172, 91,183,174,245,210,165, 75,215,
- 0,120, 87,188,237, 69,136, 16, 33, 66,196,127, 76, 96,177, 20,239, 70, 94, 75,236,192,112, 15, 9,145, 90, 53,184, 15,195, 72,
-208,182,219, 64,201, 92,175,127,216,140, 24, 50,212,234,229,105,139,223, 5,240, 47, 83, 78,108,105,105,217, 8, 39,131,231,158,
-123, 14,239,188,243, 14,188,189,189,229, 83,167, 78,125, 31,192,214, 38,168, 22,135,132,132, 16,150,101,193,178,108,163, 59,185,
-184,184, 96,200,144, 33,112,113,113, 33,239,190,251,238, 98, 0, 13, 10, 44,165, 82,153, 79, 8,113, 4, 0, 59, 59, 59,236,216,
-177, 3, 70,163, 81,168,168,168,184, 81, 81, 81, 17,111, 48, 24,162, 20, 10,197,213,139, 23, 47,222, 1,128, 14, 30,102,110,230,
-114,243,227,187,118,108,133,177,236,129,109, 99,231,231,179, 30,215, 9,148,210, 18,198,204,236,190, 52, 61,253,176,172,164, 36,
-166,230,119, 83, 57, 1,160, 95,191,126, 54, 22, 22, 22, 23,182,111,223, 46,149,201,100,152, 53,107,150,133, 90,173,198,103,159,
-125, 54, 31,192,154, 39,225,108, 66,192, 88,247,239,227,159,252,245,166, 15, 45,125, 3,251,225,234,207,219, 81, 92,172, 65,121,
- 89, 5,120,129, 42, 26, 58,134, 82, 90,120,231,206, 29,140, 24, 49, 2, 57, 57, 57, 3,118,238,220,185, 83, 16, 4,162,209,104,
-106, 23,106, 85,169, 84,183, 7,246, 9,146, 51,119,215, 62,241,133, 76, 8,113,180,178,178,250,233,204,153, 51, 1, 1, 1, 1,
-184,122,245, 42,238,222,189,139, 5, 11, 22,232, 23, 44, 88, 32,155, 58,117, 42, 89,178,100,201, 60, 66,200, 47,148,210, 8,241,
-214, 23, 33, 66,132, 8, 17,255, 17,129, 5,128,101,205,219, 17,253, 31, 47, 11,172,195, 64,194,186,142, 36, 68,233,246,200, 14,
-154,135,247,144, 28,177,143,222, 75, 56, 70, 91,121, 79, 38, 0,216,122,141,235,191, 23,151,100,217,130, 45,187,119, 56, 0,128,
-220,204, 30, 33, 33, 33, 24, 60,120, 48, 14,127,221, 21,229, 37, 85,203, 38,169,172, 93, 49,238,173, 68, 36, 39, 39, 35, 60, 60,
-188,102,161, 89,105, 99,156, 53,109, 43,162,163,145,223,183, 47,228,133,133, 48, 55, 55,135, 92, 46,127,100,135,148,148, 20, 92,
-188,120, 17,247,239,223, 71,219,182,109,171,142,105,132, 83,171,213, 62, 55,101,202,148,130,201,147, 39,155,237,221,187, 23,105,
-105,105, 46,145,145,145,101, 13, 21,144,247,115, 54,214, 50, 65,118,124,247,142, 47,164, 48,104,108,147,163,194,241,143, 17,115,
- 26, 76,167,110,224,192, 90,231,202, 44, 48, 16,140,151,151,129,200,100,169,133,187,118, 13,245,245,245, 53,182,148,179,127,255,
-254, 43,121,158,127, 83, 16, 4,197,238,221,187,165, 14, 14, 14,204,150, 45, 91,140,103,207,158,229, 41,165,140, 76, 38,219,254,
- 36,233,108, 10, 82,137,228,195,207, 87,191,107,105,206, 24, 17,251,219,143,200,186,159,129,235,183,179,141,255,186,156,196,235,
-141,220,220,134,202, 83, 34,145,188,181, 98,197, 10,159,221,187,119,187,206,156, 57, 19, 50,153,236,149,135, 15, 31,226,208,161,
- 67, 48, 55, 55,199,142, 29, 59,240,220,115,207,201,121,158, 71,220,137,135,216,241,213, 54,128, 82,232,140,178,131, 75,246,113,
- 89, 77,212,123, 93,113,213,181,117,235,214,199,255,248,227, 15, 39,119,119,119,132,133,133, 33, 55, 55, 23,174,174,174, 88,176,
- 96,129,124,211,166, 77, 7, 74, 75, 75,199,110,216,176, 65,153,144,144,176,151, 16,210,129, 86,225,169,143,128, 17, 57, 69, 78,
-145, 83,228, 20, 57,255, 18, 4, 0,112, 4,144, 15, 32,170,222, 54,170,191,163,129,237,130,234, 54,223,190, 14, 87, 1,170, 98,
-168, 29, 1,240, 0,174, 1, 40,250, 75, 4, 22, 33,100, 32,128, 48, 0,107, 40,165, 31, 61,178,135, 96, 4,159,119,142,242,121,
-191, 83,198,214,159,176,174, 99, 72, 81,137, 14,183, 34,190,167, 57,201,127, 80, 84,199, 43, 25,244,101, 77,158,232,171, 35, 30,
- 29,229,114,121,225,173, 91,183,240,251,239,191, 3, 0,142, 28, 57,130,242,146, 28,212,233, 58,196,231,159,127, 14,142,227,192,
- 48, 12, 12, 6,211,214, 62,166,149, 85,113,210,122,189, 30,122,189, 30,164,103, 79, 72, 7, 12,192,157, 5, 11,112,238,220, 57,
-228,231,231, 67, 38,147, 65, 38,147,153,180, 32, 44,199,113, 36, 47, 47, 15, 58,157, 78,224, 26, 57,192,195,131, 40, 45, 57,243,
-195, 91,191,216, 96,105,169, 50,119,138, 62,251, 11,238,223,111, 60, 46,221,104, 52,254,219,165,107,219, 86, 11,137, 36, 86, 26,
- 23,247,175,186,226,170, 37,156, 60,207,191,125,240,224, 65,139,162,162, 34,200,100, 50,124,242,201, 39,198, 75,151, 46,169, 57,
-142, 27, 16, 19, 19,243,240, 73,211,217, 20, 28, 28, 29, 79,191, 60,105,206,156,245, 51,134, 64,171,209,225,232,165, 68,252,158,
-144, 62, 1, 64, 4,165, 84,211,208, 49,145,145,145,121,129,129,129, 47, 47, 90,180,232,252,158, 61,123,204, 38, 77,154, 4,158,
-231,107,255, 42, 42, 42,240,199, 31,127,224,210,165, 75,136,137,185,158, 37,163,157,126,119, 49, 47,251,233,199, 51,166, 45,210,
- 76, 8,113,245,242,242, 58, 25, 25, 25,233, 96,110,110,142,208,208, 80, 20, 23, 23, 99,254,252,249,181,206, 85,113,113,241,248,
- 29, 59,118, 76,188,119,239,222,199,225,225,225,133,213, 47, 2, 28, 68,136, 16, 33, 66,196,127, 28, 77,106,144,127,195,145, 16,
-114,130, 82, 58, 18,192, 96, 0,242, 58,219, 32,132,156,168, 22,126,143,108, 47, 95,190,124,229,198,141, 27,111,214,108,215,236,
-179, 98,197,138,127,108,218,180,233,227,222,189,123, 31,186,114,229, 74,218, 95, 38,176, 0,132, 81, 74, 73, 51, 50, 6, 66, 81,
- 20, 21,138,162,232,239,103, 82, 30, 23, 37,149, 37, 45, 62,185,167,167, 39, 18,147, 30, 19, 55,181,223, 77, 21, 88,232,219, 23,
-200,201, 1, 92, 93,171, 82,154,147, 3, 3,128,111, 87,172,128, 92, 46,175,237,138,170, 22, 38,205,210,233,245,122,146,159,159,
- 79,117, 58, 93, 66,101,101, 37,215,192,197, 64,218, 57, 91,253,184,122,249,130, 86, 94,109,219,187, 70,158,252, 9,105,105,217,
-120,240,160,225,250, 81,169, 84,229, 70,163, 81, 85, 93,177,241,132, 97, 30,154,197,197,253, 12, 32,241, 73, 57, 9, 33,167, 39,
- 77,154, 52, 50, 48, 48,144,116,238,220, 89,126,254,252,121,142,231,249, 71,196, 85, 75, 57,155,130,155,155,219,224, 23, 94,120,
-225,200,236,217,179, 49,102,248, 96, 76,236,223,149,102,229, 21,107, 1,156,111,106,145,230,106,145,117,195,207,207,111,226,248,
-241,227,191,106,211,166,141, 39, 0,120,123,123, 99,226,196,137,248,242,203, 47, 17, 26, 26,186, 23,192,238,152,152,152,184, 22,
-222,148,230,182,182,182,191,158, 63,127,222,193,220,220, 28,103,207,158, 69, 69, 69,197, 99,206,213,199, 31,127,172,188,119,239,
-222,150, 51,103,206,116, 6,192, 84, 47,211, 35, 66,132, 8, 17, 34,158, 13,152,160, 65,106,159,251, 39, 40,165, 35,235, 10,166,
-250, 66,171,230,123,205,126, 27, 55,110, 28, 89, 87,124, 1,192,166, 77,155, 62,174,179, 93,241, 87,100,170, 70, 96, 5, 17, 66,
- 40,128, 32, 74,233,133, 39, 33, 50, 86,150, 61,209,140,165,114, 51,123,108,217,189,163,170,144, 36,143,198,101,153,236, 96,181,
- 96,178, 84, 83, 28, 44,131,193, 32, 20, 21, 21,221,211,104, 52, 49, 73, 73, 73,143,137, 7,119,119,247,141,189,251,245,234,211,
-190, 71, 79,179,200,211, 71,112, 59,245, 62, 10, 10, 74, 0, 74,117, 13,241,217,217,217, 61,100,230,205, 83,153,231,228, 20, 51,
-130,144,221, 58, 33,225,213, 63,203, 25, 30, 30, 62, 45, 48, 48,208,247,202,149, 43,161, 86, 86, 86, 0, 64,235,138,171, 39,225,
-108, 64, 84,245,150, 72, 36,199, 24,134, 49, 27, 54,108, 24,222,122,235, 45,124,249,229,151, 28,149,153,141,219,113, 42,250,229,
-242, 74,253, 71,205,137,171, 26,196,196,196,132, 78,152, 48,161,107,124,124,188, 27,165,116,184,173,173,237, 22,163,209, 8, 65,
- 16, 64, 41, 61,206,113, 92,170,191,191,255, 65, 71, 71,199,224,188,188,188,131, 49, 49, 49,139,154,185,201, 24,153, 76,182,247,
-220,185,115, 93,220,220,220, 16, 26, 26,138,138,138,138, 90,231,106,218,180,105,143, 56, 87, 87,174, 92, 41, 20,197,149, 8, 17,
- 34, 68, 60,147, 48, 89,131,212,136,166,250, 34,171, 37,226, 12,128,118,249,242,229, 43, 9, 33, 39,170, 29, 46, 45, 0,245,211,
-206, 20, 83,157,224, 11,213,234, 49,236,209,156,152,222, 22, 25,244,165, 79,148,128,118, 3, 14,192,119,204, 5,164, 25,230,227,
- 1, 51,183,190,147,100,154,192, 58,114,164,202,189,202,201,249,183,147, 85,237,102, 61,137,192, 42, 47, 47,191, 81, 88, 88,152,
- 80, 82, 82,114, 21,128, 80,207,117,155,219,163, 71,143,105,187,246,238,183, 60,126,250,143,138,152,168,155,154, 7,121,197,168,
- 48, 24, 13, 9, 25, 15,182, 55,196,231,228,228, 84, 68,129, 66,137,209,120, 78,126,227,198,207, 13, 56,121, 45,230,172,118,134,
- 98, 1,156, 56,125,250,244,109,150,101,191,126, 26,156,117,197,149,189,189,253,175,251,247,239, 55, 59,124,248, 48,166, 79,159,
-142, 79, 63,253, 20,167, 79,159, 30,167, 86,171,207,149,233, 42,231, 82, 74, 31,152, 90,207, 95,206, 33, 46, 3, 29,126,118,149,
- 72, 36,214,246,246,246,107, 39, 79,158, 12,142,227, 48,104,208, 32, 56, 58, 58, 30,146,201,100, 23,102,204,152, 49,122,243,230,
-205,230, 94, 94, 94,179,252,252,252, 92,154,161, 92,127,224,192,129, 17,222,222,222, 8, 15, 15, 71, 73, 73, 9, 92, 93, 93,241,
-230,155,111,202, 55,109,218,116,240,235,175,191,214,109,220,184, 81, 54,100,200,144, 45,103,206,156,241,169,168,168, 24, 42,138,
- 43, 17, 34, 68,136,120,246,208,168, 6,105, 66,100, 61,225,121,106,142,147,110,220,184,241, 38,165,116,228,166, 77,155, 62, 6,
- 96,246,151, 57, 88,213,202, 17, 0,130, 30,213, 87,229,166, 59, 88,186,166, 32,213, 53, 92, 0, 0, 32, 0, 73, 68, 65, 84, 5,
-214,219, 47,103,165, 8, 60,143, 47,151,178,144,155,217,163,221,128, 3,205,186, 82, 45,141,193,106, 64,173, 62,182,109,138,192,
-170,168,168,136,201,203,203,187,155,158,158,126,169,238, 36,162,158,158,158,163,156,157,157,215, 29, 56,112,192, 76,173, 86,195,
-163, 67, 55,171, 29, 63,255,171,210,217, 92,161,203, 44, 46,156,125, 61,171,252,104, 67,124, 74,165,242, 22,189,119, 47, 73,158,
-156,124,134, 0, 55,235, 9,161, 39,226,172, 65, 68, 68,196,180, 6, 4,219,159,226,116,115,115,235,237,224,224,240,235, 55,223,
-124, 99,174, 86,171, 33,147,201,160, 82,169,112,254,252,121,168,213,234,115, 45,189,200,182,207, 34,171,228, 2,222, 3, 15,166,
-175,103,118,229,171,239,125, 99,102,103,103,135,184,184, 56,116,233,210, 5,155, 55,111,150,167,164,164,116,238,212,169, 19, 82,
- 83, 83,145,147,147,115, 43, 38, 38, 38,183,137,183,144,209,179,103,207,126,123,220,184,113,184,118,237, 26,114,114,114, 48,111,
-222, 60,253,155,111,190, 41,155, 58,117, 42, 41, 41, 41, 25,191,125,251,246,137,233,233,233,162,115, 37, 66,132, 8, 17,207, 56,
- 26,211, 32, 77,224, 36,128, 23,235,187, 90,245,197, 87,141, 67, 85,119,187,254,254,213,255,215,253, 21,249,146, 84,159,140, 60,
- 46,112, 32, 8,134,135,148,241,152, 68,132,156, 35, 20,124, 35,231,103, 89, 72,228, 42,104, 43,202, 4, 74, 31,117,123,234, 66,
-224,121,135,186,193,236, 44,203, 54, 26, 15,197,178, 44,172,173,173, 81, 86, 86, 6, 0,198,102,242,192, 27,199,141, 99,229, 47,
-189, 4,131,139, 11,168,193, 80,229, 98, 1,192,202,149,143,236, 40,147,201,106, 92,177, 38,187,181, 74, 75, 75,175,197,196,196,
- 92,161,148,230, 1,192,192,129, 3,183,241, 60, 63,202,194,194,194,102,214,172, 89,134,130,130, 2, 28, 61,122, 20,223,127,255,
-189, 86, 99, 96, 99,139,245,220,204, 59,217,229,141,206,104, 95, 80, 80,240,187,231,173, 91,135,235,254,246,103, 57, 27,194,211,
-224,116,115,115,235,237,228,228, 84, 43,174, 20, 10, 5, 84, 42, 21,178,179,179, 33,145, 72, 90, 60, 73,231,193,249,196, 6, 20,
-239,204,121,123, 14,195, 48, 12,179,107,219, 63,205,108,204, 41,126,248,225, 7,132,132,132, 36,119,235,214,173,211,140, 25, 51,
-208,177, 99, 71, 36, 39, 39,227,139, 47,190, 80, 27, 12,134, 87,154,188,104, 37,146,105,235,214,173,163,106,181,154,220,189,123,
-183,214,185,218,184,113, 99,109,204, 85, 90, 90,154, 24,115, 37, 66,132, 8, 17,255, 29, 14,150, 41,241, 87, 5,213,226,233, 65,
- 3,219,108, 29, 97, 85,127, 59,175,222, 54, 0,232,235,253, 63,254, 47, 19, 88, 13,102,152,224,155, 9, 99,131, 23,127,248,238,
- 28,231,206, 29,151, 43,105,222, 41,208,146, 24,138,154,144, 27,194, 64,174,114, 0, 36, 10, 26,157, 84, 80,254, 71,130,182,128,
- 18,124, 99,234,137, 59,119,238,140,220,220, 92, 20, 22, 22,214,254,198, 48, 12,236,236,236,160, 84, 42, 17, 29, 29,141,240,240,
-112, 35,128,117,205, 84,204,166,169, 83,167,174,152, 63,127, 62,211,115,250,116, 24, 46, 93,122,100,120, 24, 33, 4, 74,165, 18,
-102,102,102,200,206,206, 70, 74, 74,138, 64, 41,221,212, 20,231,157, 59,119,194, 41,165,249, 0, 16, 20, 20, 52,201,206,206,110,
-194,244,233,211,205,174, 93,187,134,245,235,215, 75, 66, 67, 67, 13, 81, 81, 81,156, 32, 8, 43,178,178,212,223, 53,151,215,164,
-164,164,168,186,219, 79,131,179, 62,158, 6,167,187,187,123, 47, 55, 55,183, 95,191,250,234, 43,243,220,220, 92, 40, 20, 10, 88,
- 90, 90, 34, 35, 35, 3,235,214,173,211,112, 28,247,210,211,184,232,116, 58, 29, 14, 31, 62,156,211,166, 77,155,158,215,175, 95,
- 31,180,108,217,178,109,173, 91,183,118,203,200,200,184,199,243,252,139, 81, 81, 81,247,155, 58,222,198,198, 38,208,209,209,145,
- 68, 68, 68, 96,222,188,121,250,133, 11, 23,138,206,149, 8, 17, 34, 68,252,189,113,173,153,237,103, 14,141, 46,246,156,148, 70,
-191,191,147,146, 57,122,210,236, 85, 7,103,190,185, 34, 59,181,192,190,146, 56,143, 33, 68,225, 6,133,149, 43,172, 92,187, 33,
- 61, 95,162,221,122, 88,157,117, 34, 82,251,179,182, 28, 99,147,210,232,247,245,108,191,110,117, 92,169,252, 45,187,119, 96,203,
-238, 29,224, 4,169,254,141, 55,222, 64, 65, 65, 1,210, 46, 79, 70,236,175, 3,209, 70,182, 29, 46,116, 39,242,243,243,241,237,
-183,223,210,208,208,208, 35, 70,163,209, 71,173, 86,127,211, 24, 39, 0,196,198,198,126,156,157,157,221,123,229,202,149,161,243,
-203,202,112,107,251,118,200,167, 78, 5,211,189, 59,204,205,205,225,224,224, 0,141, 70,131, 11, 23, 46,224,250,245,235,161,149,
-149,149,189, 99, 99, 99, 63,110,138,179, 70, 92,245,237,219, 87, 85, 92, 92,252,249,212,169, 83,205, 52, 26, 13, 10, 10, 10, 80,
- 80, 80,128,200,200,200,243,122,189, 62, 32, 43, 43,171, 81,209, 82,151,147, 82,154, 89,243,253,105,113,214,197,211,226, 52, 55,
- 55, 95,116,244,232, 81,115,134, 97,160, 80, 40, 96,109,109,141,204,204, 76,172, 93,187, 86,163,213,106, 95, 82,171,213, 38, 77,
-208, 89,151,243,245,237,180, 24, 4,159,239,252,106,167,176,253,139, 29,148,218, 13,132,153,181, 59,172,173,173,237,126,254,249,
-103, 33, 62, 62,254,156,155,155, 91,167,212,212,212,110,149,149,149, 1, 87,175, 94,189,223, 28,103, 65, 65,193,197,123,247,238,
-193,194,194, 2, 11, 23, 46,148,127,252,241,199, 7,191,254,250,107,221,199, 31,127,220,162,152,171,198,202,243,207, 64,228, 20,
- 57, 69, 78,145, 83,228, 20,209,164,131, 5, 0, 55, 50,104, 58,128,183,123,180, 35,222,175,205,223,188,168,127,207,182,189,222,
-124, 45,192,182, 84, 40,161, 71,143,221, 46, 76,203, 44,191, 38, 97,241,229,205, 52,218,172,189,246,246,231,220,115,117,183,183,
-122,120, 4, 76,159, 62,125,253,210, 9,121,125,234,118, 29,238,255,105,255, 37, 66,200,170,156,156, 28,147,135,236,199,196,196,
-220, 4,240,146,175,175,111,191, 37, 75,150,172,123,217,211,211,127, 82, 80, 16,164, 82, 41,162,162,162,240,240,225,195,104, 0,
- 31,196,198,198, 94,110, 73,225,148,150,150,126,216,177, 99, 71, 89, 82, 82, 18,238,220,185,131,148,148, 20,240, 60,127, 55, 43,
- 43,107,220,147, 22,248,179,204,169,211,233, 62, 91,191,126,125,240,154, 53,107, 20,150,150,150,136,139,139,195,154, 53,107, 52,
- 58,157,206,100,113,213, 16,230,255,147,110,248,114, 14,249, 62, 60,173,205,144, 46,238,189,183, 27,141, 70, 56, 57, 57,201,123,
-245,234,229, 10, 64, 29, 18, 18,194, 3, 72,107, 1,229, 7,222,222,222, 29,215,175, 95,223,110,218,180,105, 40, 46, 46, 22,157,
- 43, 17, 34, 68,136, 16,241,223, 35,176,106,112,253, 14,141, 7, 48,181,123, 91, 50,232, 82,212,221, 89, 85,242, 21,187, 18,211,
-105,216,147,158, 56, 43, 43, 43, 10,192,144, 45,139,201, 35,243, 79,228,228,228, 12,127, 82,206,106, 1, 53,208,219,219,123,244,
- 81,150,125, 23,105,105,224,121,254,179,248,248,248, 99, 45,225,233,213,171, 87,235,178,178,178,127, 26,141,198, 30, 60,207,203,
- 47, 92,184, 0,157, 78,135,196,196, 68,173, 32, 8, 71,159, 36,109,255, 13,156,153,153,153, 49,110,110,110, 35, 9, 33, 39,150,
- 45, 91,166, 88,187,118,237,159, 22, 87, 53, 88,180,147,230,238,247,243, 11, 99, 83, 82,120,163,209,200,114, 28, 7,158,231,101,
- 79,194, 69, 41,189, 67, 8,233,185,120,241,226, 15,222,121,231,157, 69,155, 54,109,146,137, 49, 87, 34, 68,136, 16, 33,226,191,
- 78, 96,213, 32,225, 46,253, 3,192, 31, 79, 51, 1,213, 93,135,142, 53,223,159, 6,103,181,160, 58,246,164,199,151,148,148,124,
- 84, 88, 88,216,179,180,180,148, 75, 75, 75,211, 18, 66,120,134, 97,180,130, 32,108,228,121,254,187,191, 51,167, 90,173,142,112,
-117,117, 29,114,229,202,149,133, 21, 21, 21, 59,213,106,245,213,167, 85,215, 49, 49, 49,153,126,126,126,239,207,154, 53,107, 34,
-199,113,255,138,142,142,190,247,164, 92,148, 82, 61,128,247, 9, 33,191, 38, 36, 36,252,112,229,202,149, 92, 81, 92,137, 16, 33,
- 66,132,136,255, 74,129,245, 87,160,126,215,225,179,128,228,228,228,105, 0,166,253, 47,114, 2, 64, 78, 78, 78,236, 95,193, 91,
- 45,178,190, 6,240,245,211,226,163,148,198, 16, 66,186,160,106,148,136, 40,174, 68,136, 16, 33, 66,132, 40,176, 68,136,120, 74,
- 34,139, 66, 92, 91, 80,132, 8, 17, 34, 68, 60, 67, 32, 0,186, 53,210,104,153,188, 82,246,147,140, 38,104,142, 95,228, 20, 57,
- 69, 78,145, 83,228, 20, 57, 69,206,191, 31,103,115,220, 45,209, 31,207,180,192,106,201, 58,126, 45, 38, 39,164,219,211, 46, 40,
-145, 83,228, 20, 57, 69, 78,145, 83,228, 20, 57,255,126,156,127, 55, 48, 98, 17,136, 16, 33, 66,132, 8, 17, 34, 68, 60, 93,180,
- 56, 6, 43, 48, 48,176, 29, 0, 68, 70, 70,222,121, 22, 50,224,227,227,115,161,109,219,182,173,110,223,190,109, 36,132,160,238,
- 31, 0,200,229,242, 43, 87,174, 92,121, 67,172,234,255, 44, 44, 44, 44, 52, 44,203, 18,134, 97,192,178, 44,234,127, 54,244, 27,
- 33,196, 41, 49, 49, 81,211, 24,167,155,223, 4, 79, 35,103, 92, 67,136,240, 29,229,153,153,132,173,249,164,255,164, 60,153,193,
-200, 12, 95, 10, 6,217, 34, 41, 85,124,164,190,121, 40, 75,172,133,134,209,173, 91,183,243, 61,123,246,236, 24, 23, 23,103,160,
-148,214,222, 63, 12,195,128, 16, 2, 65, 16,114,162,163,163,251,252,221,203,193,213,213,181, 31,128,205,213,131, 38,234, 34,133,
- 16,242, 78,118,118,118,152,120,181,136, 16, 33,226,169, 9,172,158, 61,123,182,231,121,190, 63, 33,164, 31,165,180, 95,231,206,
-157,157, 42, 42, 42,224,231,231,151, 71, 8,185, 76, 41,189,204,178,236,165,107,215,174,221,110,142,171, 79,159, 62,209,122,189,
-190,115,139, 18, 40,145,148, 41,149,202,118, 97, 97, 97, 13, 54,180,206,206,206, 94,251,247,239,183, 75, 72, 72,128,133,133,197,
- 35,127, 18,137, 4,189,122,245, 10,120, 86, 11,191,119,239,222, 6,158,231,165, 13,253,143,101, 89, 99, 68, 68,132,172, 25,177,
-123,143,227, 56,199,150,156, 83, 38,147,229, 71, 68, 68,152, 52,114,179,111,223,190, 42,142,227, 22,179, 44, 59, 80, 16,132, 46,
-213,233, 74,226, 56,238,130, 68, 34,249, 34, 60, 60,220,228,213,192, 89,150, 37, 5, 5, 5, 56,116,232, 16,186,249, 6,130, 82,
-192,187,107,251, 90, 33, 28, 25,155, 4,158,231, 17, 30,118, 26, 75,151, 46,133,175,175, 47, 52, 26, 13,219, 20,167,129, 19, 86,
-125,176, 96,114,208,134,173, 7,253,222, 95,248,186,106,195,214,131,190,239, 47,124,221,114,195,214,131, 62,239, 47,156,104,185,
-126,235,126,223, 85, 11, 39, 89,173,255,230,128, 30,192,252, 39,169,163,153, 93,186, 24, 25,142,107,240, 62, 17, 36, 18,238,187,
-164, 36,233,127,251, 67,128, 97, 24,247,157, 59,119, 90,159, 61,123, 22,102,102,102,181,247,143, 74,165,130,133,133, 5, 94,124,
-241, 69,254,105,157,203,207,207,239, 0,128, 49,213,155, 97, 49, 49, 49, 47, 62, 41, 23, 33,196, 66, 34,145, 44,148,203,229,253,
- 57,142,235, 84,125,125, 39,235,116,186, 75, 28,199,109,165,148,106, 90,200,247,233,181,107,215, 58, 91, 90, 90,194, 96, 48,212,
- 46, 12,207,178,108,199,192,192,192, 47, 0,244, 16,155, 12, 17, 34, 68,252,105,129,229,231,231,119, 20, 64,191,206,157, 59,155,
- 13, 25, 50, 4,190,190,190,104,221,186, 53,148, 74, 37, 0,160,176,176,208, 41, 49, 49,113, 92, 92, 92,220,184,136,136, 8,248,
-249,249,105, 9, 33, 17,209,209,209,163, 27,227, 20, 4,193,227,244,233,211,112,112,112, 48, 41,113,130, 32, 96,196,136, 17,210,
-146,146, 18,115, 0, 13, 62, 44,115,115,115,133, 15, 63,252,176, 36, 60, 60,220,192, 48, 12, 40,165,132, 84,181,218, 4, 0, 56,
-142, 43,252, 79, 23,114,191,126,253,146, 0,184,213,228,137, 16,162, 14, 15, 15,239,194,243,188,244,218,181,107,141, 9,219,102,
- 27,110,142,227, 28, 47, 95,190, 92, 91, 39,205,129,231,121,244,236,217,211, 36, 65,230,227,227, 51, 64,161, 80,252, 48,111,222,
- 60,235, 62,125,250, 72, 60, 60, 60, 64, 8, 65,110,110,110,207, 43, 87,174,248,110,223,190,125,134,143,143,207,148,184,184,184,
-139, 38, 10, 44,236,219,183, 15,235,215,175,199,146,247, 63,197,155,211,199,131, 16, 2,133, 66,129,146,146, 18, 4,250,118,193,
-142,125,191,226,208,161, 67,208,106,181, 96, 89, 22, 94, 94, 94, 77,137, 83, 55,149,196, 54, 96,225,204,151,204, 63,219,190,207,
-124,225,204,151,240,249,142, 31,234,124,142,193,103, 59,246, 89,188, 53,115, 12,182,238,220, 19,216,187,119,111,183,136,136, 8,
-181, 41,117, 4, 0,148, 82,117,120,120,120, 23,134,227, 36,187, 82, 83,171,126,252,246, 91,224,193, 3,208,213,171, 1, 0,115,
- 58,118,108,145, 3,220,189,123,247,203, 44,203,186,155, 80, 79,217, 9, 9, 9,253,254,132,240, 24, 12, 96,105,245,230,102, 74,
-233,185,102,238,179,236,185,115,231, 90,196,198,198, 54,230, 96,229,253, 9, 65,101, 79, 8,217, 10,192,140,101,217,119, 0, 12,
- 15, 13, 13, 5,195, 48, 24, 58,116,104,144,159,159, 95, 71, 0, 27,205,205,205,169, 94,175,159, 23, 25, 25,153,103, 98, 30,251,
- 89, 90, 90,254,243,192,129, 3, 54,189,123,247,102, 50, 51, 51,209,173, 91, 55, 20, 20, 20,248,133,133,133,249,204,153, 51,103,
- 42, 33,100, 22,165,180, 37,171, 55,116,176,176,176,160, 83,167, 78, 37,117, 23,162,223,189,123, 55,124,181,218,182, 51, 91,183,
- 46,172, 52, 24,202, 46,178,236, 42, 66,200,133,204,204,204, 28,177, 9, 17, 33, 66,196,147, 56, 88, 67, 47, 92,184, 0,163,209,
- 8, 75, 75, 75,176,236,163,102,130,157,157, 29, 6, 12, 24,128,192,192, 64, 12, 30, 60, 24,201,201,201,102,159,124,242,201,243,
-205,157,208,220,220, 28, 17, 17, 17,224, 56, 14, 49, 49, 49, 40, 43, 43,195,232,209,163, 33,149, 74, 33,149, 74, 33,145, 72,106,
- 63,157,157,157,161, 84, 42, 73, 73, 73, 73,163,124,214,214,214,109, 79,158, 60,201, 40, 20, 10,170, 82,169,232,133, 11, 23, 40,
- 0, 90,213, 70, 62, 89, 4,127, 64, 64,128,179, 68, 34, 89,207,243,252, 88,158,231,229, 77,136, 6,163, 76, 38, 59,174,211,233,
-222,143,137,137,201,108,130,210,237,242,229,203, 86,181, 5, 59,116, 40,233,221,187,119, 73, 77,153,250,249,249, 61,178,115, 76,
- 76,140,201,105, 85, 42,149, 8, 11, 11,131, 68, 34,129,109,255,254, 0, 0, 99,124, 60,164, 82, 41,208,181, 43, 0, 64,149,145,
- 1,169, 84, 10, 23, 23, 23,147, 56,189,189,189, 7,183,106,213,234,224, 87, 95,125,101,198,178, 44, 82, 83, 83, 65, 8, 1,203,
-178,200,203,203, 67,191,126,253, 36,221,186,117,179, 95,177, 98,197, 97,111,111,239,215,227,227,227,207,153,224,146, 96,234,212,
-169,248,236,179,207,176,112,198,120,212,172,119,168,215,235,107,247,153, 55,117, 12,246,110,223,136, 15, 62,248, 0,167, 78,157,
-106,142,111, 67,231, 14,237,220,247,254,116, 6,125,123,245,196,222,159, 78,163, 79,175, 64,236, 13, 57,131,190,189, 2,241, 67,
-200, 25,244,239,221, 11, 63,132,156, 65,183,206, 29, 60, 30,222, 47,217,128,166,231,246,122,164,142,134, 13, 27, 70,122,247,238,
- 93,210,141, 97,106, 4, 23,200,188,170, 37,157, 80, 45,176, 90, 10,150,101,221, 99, 99, 99,155, 21,184,190,190,190,127,246,190,
- 94, 74, 41,237, 87, 45, 68, 0,160,201,250,185,113,227,198,243, 0,240,242,203, 47,159,239,214,173, 91,199, 91,183,110, 25,106,
-142,173,254,115,157, 56,113,226,189, 26,209, 69, 41,205,249,241,199, 31, 77,234, 50, 36,132,108, 62,126,252,248, 40,131,193,128,
-233,211,167,199,180,105,211, 70, 98,109,109,141,221,187,119,195,214,214, 22,122,189,254,218,231,159,127, 46,185,127,255, 62,190,
-249,230,155,157,117,220,173,166, 56, 7,245,239,223,127,223,201,147, 39, 21, 18,137, 4, 37, 37, 37,184,120,241, 34,108,108,108,
- 96,102,102,134,113,227,198, 49, 3, 6, 12,176,123,254,249,231, 15, 16, 66,166, 81, 74, 77,158, 28, 89,171,213,210, 21, 43, 86,
-192,220,220,252, 17, 55, 92, 9,144,117, 87,175, 42, 54, 6, 5, 41, 86, 45, 90,180,244,219,111,191,237,229,225,225,177, 41, 43,
- 43, 75, 45, 54, 35, 34, 68,136,104,169,192,130,133,133, 5,162,162,162, 64, 8,129,165,165, 37,172,172,172, 96,109,109,141,210,
-210, 82, 36, 38, 38,226,214,173, 91, 72, 79, 79, 7,195, 48,104,219,182, 45,106, 92,163, 58, 46,192,141, 6, 30,142, 96, 89, 22,
-247,238,221, 67,110,110, 46, 24,134,193,197,139, 23, 49,124,248,240, 71,196,149, 84,218,176,129, 83,159, 51, 44, 44,140,123,103,
-170,203,121,131, 94,227,192,113,250, 43, 97,148,206,243,245,245,189,224,228,228,228,225,237,237,205,215,116, 65, 53, 21,151, 85,
-159,147,101,217,141,243,231,207, 31, 55, 97,194, 4, 70, 34,145, 60,226, 0,233,245,122,232,245,122, 24,141, 70,104,181, 90,233,
-225,195,135, 95, 58,113,226,132, 57,128,151, 27, 75,167, 32, 8,143,228, 97,253,250,245,150, 28,199,225,171,175,190, 2, 0, 68,
- 71, 71, 63,230,220,153,146,247,218, 74,148, 72, 80, 55,157, 53,101,200,213,219, 54,133, 51, 48, 48,208, 82, 46,151,127,191,101,
-203, 22,179,188,188, 60, 36, 36, 36,160, 71,143, 30, 88,181,106, 21, 52, 26, 13, 54,111,222,140, 59,119,238,192,201,201, 9, 43,
- 87,174, 52,123,231,157,119,190, 15, 12, 12,236, 18, 25, 25, 89,214, 84, 58, 25,134,193,119,223,125, 7,142,227,192, 84,139,150,
-202,202, 74, 40, 20,138,250,233,193,234,213,171,107,247,105,140,211, 96, 48, 12, 91,177,104, 22,190,250,103, 8,186,182,115,198,
-137,208,171,232,217,173, 53, 78,157,191,134, 94,221,219,224,244,133,104,244,246,110,135,243, 87,111,226,237,249,147,240,238, 91,
- 23,135, 53,149,247,250,101,190,118,237, 90, 75,158,231,113,106,217, 50,224,155,111, 64, 22, 46, 4,173,222,135, 48, 12,224,238,
- 14,152,153,153, 92, 71,117,113,235,214, 45, 84, 86, 86, 62,246,187, 66,161, 64,231,206,157, 91,204, 73, 8,233,238,228,228,244,
-109,199,142, 29,187, 1,192,128, 1, 3,154,189,241, 27,185, 55,221,223,127,255,125,235,253,251,247, 67,161, 80,192,204,204, 12,
-230,230,230, 48, 55, 55,127,228,251,170, 85,171,248, 22, 92,159,242,228,228,100, 88, 90, 90, 98,215,174, 93, 18, 59, 59, 59,196,
-196,196, 64, 34,145, 96,242,228,201,232,222,189,187,196,204,204, 12, 23, 46, 92, 64,121,121,121,179,156,132, 16,149,133,133,197,
-183,199,143, 31, 87,240, 60,143,130,130, 2, 0,192,200,145, 35,193,178, 44,110,221,186,133,143, 62,250, 8, 63,255,252, 51,126,
-249,229, 23,165,159,159,223,183,132, 16, 95, 74,105,185, 9,229, 73, 43, 43, 43,169, 82,169,132, 82,169,132, 66,161,128, 66,161,
-128, 76, 38,131,142, 82,124,224,239,175,151,169, 84,124,143, 30, 61,218, 44, 88,176,128, 89,179,102,205, 32, 0, 63,154, 90,239,
- 45,133,200, 41,114,254,175,113, 54,231,125, 0,168,251,130,170, 7, 80, 99,128, 20, 84,235, 15,251,122,191, 3, 64,205, 10, 49,
-142,141,108, 23, 0, 72, 4,208,165,250, 55, 30,192, 53, 0, 69, 79, 69, 96, 17, 66,104,157, 66, 35, 13, 20, 36, 74, 75, 75, 81,
- 90, 90,138,204,204, 76,236,216,177,163,182,209,150, 72, 36, 96, 24,166, 54, 94,193, 20, 72,165, 82,100,102,102,194,219,219, 27,
- 78, 78, 78,216,179,103, 15, 70,142, 28, 89,203, 87,243, 87, 87, 20, 53,133, 62,131, 38,118,126,169, 75,138,229,252, 77,161, 20,
-168,138,203,250,245,215, 95,237, 82, 83, 83,161, 84, 42, 97,102,102, 6, 51, 51, 51, 40,149, 74, 72,165,210,102,227,178, 4, 65,
- 24, 53,126,252,120, 38, 52, 52, 20, 28,199, 65, 34,145, 64, 38,147, 65, 46,151,131,101, 89,200,100,178,218,191, 81,163, 70, 49,
- 71,142, 28,121, 62, 40, 40, 72, 18, 22, 22,198, 53,114, 33, 34, 58, 58, 26,145,145,145,224,121, 30, 28,199,129,227, 56,104,181,
- 90, 0,128,191,191,255, 35,251, 95,189,218,178,213,105,234, 58, 87, 18,137, 4,164,107, 87,112,213,206,149, 68, 34, 65,145,171,
- 43, 0,192,193, 52, 67,111,209,244,233,211, 45, 21, 10, 5,110,220,184, 1,133, 66, 1,141, 70,131, 49, 99,198,160,188,188, 28,
- 28,199, 65,161, 80,160,178,178, 18,206,206,206, 24, 60,120,176, 69,104,104,232, 34, 0,107,155,113,111, 48,115,230, 76,108,219,
-182, 13, 95,253,243, 39,188, 61,235,149,199,246,217,190,183,106,249,196, 53,107,214, 32, 44,172,233,120, 98, 65, 16,216, 62,254,
-157, 81, 90, 16, 0,169, 84,138,190,190,237,193,178, 44,250,248,117,128, 68, 34, 65,191,128,142, 96, 89, 22, 3, 3,187,160, 93,
-187,118, 16, 4,129,109,230, 97,209, 96, 29,233,245,122, 32,167,129,158,160,220, 92,160, 77,155, 39,121, 40, 97,217,178,101, 37,
-106,181,218,240,152,133,230,230, 38, 59,114,228,136,117, 75,140, 87, 66, 72,143,206,157, 59,159, 57,127,254,188,202,217,217, 25,
- 28,199,193,104, 52, 66,163,209,224,149, 87, 94, 1,128,163, 45, 72, 91,246,250,245,235, 45, 26,112,176, 30,233, 54,164,148,154,
-220,101, 40,145, 72,150, 47, 91,182,108,248,152, 49, 99, 36,150,150,150,144, 74,165,144,203,229,144,203,229,144,201,100,184,119,
-239, 30,140, 70, 35, 66, 66, 66, 40,203,178,239,154,192,247,230, 15, 63,252, 96, 37,151,203,145,147,147, 3, 66, 8, 40,165,144,
-201,100, 72, 75, 75,195,151, 95,126,137,233,211,167, 35, 35, 35, 3,174,174,174, 88,178,100,137,106,211,166, 77,111, 2,216,104,
- 74,131,161,215,235,125,205,204,204,160, 80, 40, 80, 35,180, 0, 32,214,220, 60, 49, 45, 45,173,167,139,139, 75,231, 86, 23, 47,
-238, 12, 10, 10,234,102,111,111, 31, 64, 8,217, 79,255,202,185,110, 68,136,248, 31, 64,115, 26,164, 70, 16, 17, 66, 78,212,217,
-111,100,205,246,242,229,203, 87,110,220,184,241, 38, 33,228, 68,221,223,107,246,171, 62,199,137,134,182,171,143,181, 95,177, 98,
- 69,183, 77,155, 54,125,220,187,119,239, 67, 87,174, 92, 73,123,106, 2,171, 58,110,137, 54,145,177,199, 92,168,250, 48, 69, 96,
-213, 60,164, 43, 43, 43, 81, 80, 80,128,161, 67,135,194,204,204, 12, 12,195, 32, 51, 51, 19, 29, 58, 84, 53,142,241,241,241,248,
-240,195, 15,209,181,107, 87, 24, 12,134,102,211,116,230,196, 46,237,149,115,188, 86, 16,170, 30,252, 15, 30, 60,160, 27, 55,110,
- 44, 15, 13, 13,213,255,251,212,181, 52,164,185,184, 44, 74,169, 68, 34,145,192,104, 52, 62, 50,202,141, 16,130, 65,131, 6,225,
-210,165, 75,181,191, 85, 59, 48, 76,117, 89, 54, 90, 8,213,142,215, 35,141,119, 13,106, 28, 44, 74, 41,116, 58, 29,140, 70,227,
-147, 85,102,181,243,199,213,219,110, 9, 24,134, 9,234,223,191,191, 36, 37, 37,165,182, 33, 52, 24, 12, 24, 56,112, 32, 24,134,
- 65, 70, 70, 70,237,239,148, 82,248,248,248,200, 46, 93,186, 20,212,156,192, 98, 24, 6, 59,118,236,168,205,219, 55,223, 31,193,
-155,211, 95,174,117,114,190,249,254, 72,237,126,239,191,255,254, 99, 14, 86, 99,144,201,100,181,117,193,178, 44, 36, 18, 73,237,
-103,205,119, 83,219,191,198,234,136,110,216, 0,108,216, 80,229, 92, 1,168,208,104,170,196,113,223,190, 45, 22, 87,122,189, 30,
-106,181,218, 16, 31, 31,255,216, 64, 3,111,111,239,123,122,189,222,228,244, 18, 66,156,106,196, 21,165, 20, 47,190,248, 34, 22,
- 45, 90,132,128,128, 0,148,149,149, 97,233,210,165, 40, 46, 46,254,162,123,247,238,159,220,184,113, 99, 21,165,116,123, 83,124,
- 71,142, 28,121,172,139,191, 75,151, 46,231,123,245,234,213, 49, 54, 54,182,174,232,114, 13, 8, 8,184, 71, 41,109,114,116, 97,
- 77, 64,123,247,238,221, 49,103,206, 28, 28, 62,124, 24,123,246,236, 65, 77,124,211,216,177, 99,241,210, 75, 47, 33, 63, 63, 31,
-206,206,206, 36, 59, 59,251,186,159,159, 95,147,129,239,114,185,124, 64,159, 62,125,152,178,178,178,218,231,144, 84, 42, 69, 90,
- 90, 26, 54,111,222,140,137, 19, 39,162, 93,187,118,224,121, 30, 26,141, 6,131, 6, 13,146,108,221,186,117,128, 41, 2, 75, 34,
-145,188, 27, 28, 28,252, 49,128,174,117,159,133,132,144, 91,132,144, 85, 85,186, 58,247,214,168, 81,163,238, 5, 7, 7,251,180,
-105,211,198, 33, 33, 33,129,133,184,138,128, 8, 17,127,214, 13, 51, 89,131,212, 8,164,250, 66,107,227,198,141, 35,235,255, 86,
- 87, 76, 53,244,189,238,177,155, 54,109,250,184, 14,119,197,211,200,215, 83, 91, 42,199, 84, 81,160,215,235, 17, 27, 27,139,246,
-237,219,195,204,204, 12, 18,137, 4,190,190,190,136,141,141, 69,151, 46, 93, 32, 8, 2, 86,174, 92,137,213,171, 87, 35, 36, 36,
- 4,137,137,137, 18,103,103,231, 38, 57,119, 30, 46,123,196, 74,176,180,180,108, 19, 18, 18,242,167,226,178, 8, 33,181, 13,244,
-232,209,163,241,219,111,191, 65, 42,149,214,118,113,250,249,249,225,250,245,235, 38, 9, 1, 74,105,109,227, 93, 94, 94, 14,189,
- 94, 15,142,227,224,232,232,136, 55,222,120, 3, 28,199,129,231,249,218,134,157,231,121,176, 44,139,158, 61,123, 82,134, 97,140,
- 87,175, 94,109,114, 52,161, 33, 46,174, 42,109,255,248, 7, 56, 0, 22,247,239, 67, 42,149,162,216,173, 42,102,187, 85,121,121,
-163, 93,132,245,193,243,124, 23,119,119,119,164,164,164, 64,161, 80, 64, 46,151,163, 85,171, 86, 88,184,112, 33, 42, 42, 42,240,
-221,119,223,161,184,184, 24,114,185, 28, 82,169, 20,237,218,181,131, 94,175,239,210, 28, 47,203,178,152, 59,119, 46,190,255,254,
-123,236,216, 92,213, 5,248,237,150,170,207,186,211, 51, 48, 12,131, 13, 27, 54, 96,208,160, 65, 38,187,161, 75,151, 46, 53,107,
-236,255,135, 14, 29,210,154, 82,229,117,235,168,180,180, 20,122,189, 30, 60,207, 67,229,233,137,105,211,166, 85,213,207,171,175,
-130,231,121, 8, 83,167, 86,137, 4,115,115,147,235,168,174,192,106, 44, 61,148,210, 6,187, 14,155,192,208,229,203,151,171, 4,
- 65,192,160, 65,131, 48,125,250,116,248,251,251, 99,235,214,173, 8, 15, 15,199, 63,255,249, 79, 28, 56,112, 0, 28,199,201,134,
- 13, 27,182, 8,192,246,150,222,215, 44,203,186,239,220,185,211,250,151, 95,126,129, 74,165,130,141,141, 13,172,172,172, 96, 99,
- 99,131,113,227,198, 53, 55,186,112,120,104,104, 40,108,109,109, 17, 29, 29, 13,185,188,202,181, 87,169, 84,118, 97, 97, 97,149,
-219,182,109, 43, 53, 51, 51,147,200,229,114,124,248,225,135,144,203,229,152, 57,115,102, 80, 80, 80,144, 34, 44, 44,172,193,130,
-224, 56,174,147,173,173, 45,114,115,115,107, 5,185, 74,165,194,135, 31,124,128, 41, 83,167,214,138, 43,185, 92,142,149, 43, 87,
- 98,200,144, 33,168,172,172,236,100, 74, 94, 51, 51, 51, 99, 0, 12,105,110, 63, 65, 16, 72,117,125, 81, 0,130,216, 60,138, 16,
-241,255,234,118,157,168, 47,178,254, 12,215,242,229,203, 87, 2,160,203,151, 47, 95, 89,179,189,113,227, 70, 45,128, 63, 29, 95,
-249,212, 4,150, 41, 14, 86,255,254,253,149,219,182,109,131,139,139, 11,124,125,125,107, 29, 22, 63, 63, 63,108,221,186, 21,211,
-167, 79,199,169, 83,167,208,165, 75, 23, 12, 31, 62, 28, 3, 6, 12, 64,247,238,221,155,229,125,103,186,251,101,174,178,204,198,
-160,175,140,218,126,196, 48,189,180,180,244, 82,187,118,237, 92, 51, 50, 50,184,178,178,178,218,160, 97, 66, 8, 2, 2, 2, 32,
-145, 72,174, 69, 68, 68, 76, 52,197, 17, 26, 63,126, 60,126,249,229, 23,140, 29, 59, 22,103,207,158, 5, 0, 4, 4, 4, 32, 41,
- 41, 9,230,230,230, 38, 59, 68, 53,141,119, 89, 89, 25,182,110,221,106,210, 49, 6,131, 1,193,193,193,205,158,160,166,187,150,
-175,183, 93, 87,220,152, 42,176,106,202, 73, 38,147,129, 97,152,218,174,156,242,242,114,148,148,148,212,118,149,214,252,153,218,
- 53,204,178, 44,182,110,221, 10,163,209,136,121, 75,215,128,101, 37,152, 55,245, 37,176,108,149, 64,221,177,239, 87,240, 60,143,
-159,246,124,137,229,203,151,155,212, 53, 92,195,187,109,219, 54, 45,195, 48,143,185, 87, 12,195,180,200,193,171, 91, 71,219,182,
-109, 51,233,152,162,162, 34,140, 25, 51,198,228,147,212, 13,234,111,169, 0,107, 0,199,222,123,239,189, 25, 6,131,161,115,207,
-158, 61,205,102,207,158,141,204,204, 76,108,217,178, 69, 87, 84, 84,180,125,200,144, 33, 51, 84, 42,149,181, 70,163,209,164,167,
-167,127,254, 36,247,181, 32, 8,217,115,230,204,177,168,153, 35,171,102,100, 33,203,178, 38,141, 46,228,121, 30,187,118,237,170,
-237, 26,108,168,254,234, 94, 83,166,136,212,164,164, 36, 92,186,116, 9, 35, 70,140, 64, 69, 69, 5,140,122, 61, 22, 93,191,142,
-174,147, 38, 65, 47,147, 65, 16, 4, 40, 20, 10,108,222,188,249, 47,123,198,215, 17, 88, 34, 68,136,248,255,117,187, 70, 62, 77,
-174, 26, 7,107,227,198,141, 55, 55,110,220,248,152, 27,246,151, 10, 44,150,101, 81,119,200,114, 67,141,177,169, 49, 88,151, 47,
- 95,214,157, 63,127, 94,149,149,149, 85,235, 16, 73, 36, 18,180,109,219, 22,132, 16,156, 58,117, 10,251,247,239,199,170, 85,171,
- 32,145, 72, 96,101,101, 5, 31, 31, 31, 99, 78, 78,211,163,161,251, 12,120,181,237,255,177,119,222,225, 81, 84,251,255,127,159,
-153,217,158, 94, 73,150,132, 64, 8, 53,148, 84, 18,144, 18,145,142, 72, 17, 68, 68, 69, 65, 44,148, 43, 32, 2,126,239,189,128,
-138, 1, 1, 17, 68,154,168,168,160, 20,233, 8, 2,210, 33, 9, 73, 32,212,208, 18, 66, 72,239,109,179,117,102,206,239,143,100,
-115, 3,146,100, 3,168,252,116, 94,207,179,207,238,236,206,190,231,204,153,153, 51,239,249,156, 86,221, 6, 75, 0, 0, 47, 47,
-175,166, 91,183,110,173,175, 13, 86,131,227,217,152, 76, 38,200,100, 50,236,221,187, 23,253,250,245,195,177, 99,199,160,174,110,
-212,124,229,202, 21, 4, 5, 5,225,198,141, 27, 54,221,192,107, 71, 71, 12, 6, 3, 0, 32, 37, 37,197,214, 19,160,225,210,190,
- 67, 7, 8,213,145, 43,142,227,238,137, 92,177, 44,139,219,213,233,110,111,131,150, 92, 46, 79,206,201,201, 9,243,244,244, 68,
- 81, 81, 17, 20, 10,197, 61,230,140,227,184,154,200,150, 66,161,176,182,211, 74,110, 72,151, 97, 24, 76,153, 50, 5,155, 55,111,
- 6, 0,188,253,234, 48,104, 52,106,152, 76, 38, 24, 12, 6,188,253,234, 80,172,254,110, 23, 24,134, 65,116,116, 52,250,245,235,
-103,115, 4,107,210,164, 73,117, 70,176,118,237,218,165,183, 53,159,173,199,200,218, 54,238,113, 30, 35, 91, 35, 88,182, 24, 44,
- 66,200,155,237,219,183,159,161, 82,169,238,230,230,230,110,241,242,242,154,178,124,249,114,223, 59,119,238,192,209,209, 17, 7,
- 14, 28, 80, 77,157, 58,245,157,179,103,207,142,161,148, 30,106, 40, 93, 29, 59,118, 60, 18, 17, 17,209,166,246, 48, 13,213,215,
-125,246,149, 43, 87, 30,101,128,209,195, 3, 6, 12, 24,236,232,232,136,215, 95,127, 29,114,185, 28, 35, 70,140,128,147,147, 83,
-209,186,117,235, 16, 22, 22, 86, 99,226,231,206,157,139, 59,119,238,128, 16,114,184,174,232, 85,245,249,121,173, 73,147, 38, 33,
-163, 71,143, 70, 73, 73, 9,178,178,178,224,232,232,136,192, 37, 75,112,241,157,119, 16,180,102, 13,152,222, 85, 53,157,181,206,
-207,107,117,233,249,248,248,132,139,162,248, 49,128,174,248, 95, 39, 29, 10, 32,134, 97,152,127,103,100,100,196, 63,160, 76,100,
-172,230,177,122, 93, 9, 9,137, 63, 49,130, 85,219,104,213,138, 66,213, 69,126,237,118, 89,117, 25,180,218,109,178, 0, 24, 31,
- 71, 90,185, 90,133,251,253, 61, 0,111, 37, 37, 37, 5,116,232,208, 1,233,233,233, 40, 41, 41,121,160,128,157,157, 29,212,106,
- 53,110,222,188, 9, 74,233,173,134,110, 48,181,163, 10,181,123, 12,126,240,193, 7,152, 61,123, 54,250,246,237,139,167, 26,217,
-182,229,215,221,107,202, 78, 29, 18,117,130, 72,179, 0, 32, 55, 55, 87,252,232,163,143,116, 7, 15, 30, 52,213,110, 40,111,173,
-206, 19, 4, 33,167,129, 3,200,151,149,149,113, 10,133, 2,132, 16,156, 62,125,186,102, 24,137, 43, 87,174, 64, 38,147, 33, 45,
- 45, 13,114,185, 28,102,179, 25,168,170, 38,224, 27,115,243,110,132,195,182,253, 96,222,215,230,170,177,145,171,234,168,217,177,
-184,184,184,160, 62,125,250,112, 58,157,238,129, 6,203,106,174,148, 74, 37, 98, 99, 99, 77,122,189,190,193, 17,174, 89,150,197,
-178,101,203, 96, 54,155,107,134,105,176, 86,135, 89,199,194,122,251,213,161,216,177,241, 75,204,156, 57,211,230, 54, 88, 50,153,
- 12, 95,127,253,181, 94, 38,147,213, 84, 51,214,110,127,101,109, 59,247, 48, 6,235,113, 29, 35, 47, 47, 47,119, 15, 15,143,229,
- 46, 46, 46, 42,131,193,240,187,245,107,255, 94, 95,132,203,138,191,191,255,251, 73, 73, 73, 77,138,139,139,181,123,247,238,141,
-244,244,244,132, 82,169,196,176, 97,195, 42, 69, 81,100,150, 47, 95,174, 90,179,102,141,106,214,172, 89,171, 0,180,180,193,252,
- 54, 93,179,102,141,211,137, 19, 39,238, 25,158, 96,204,152, 49,143, 52,192,104, 98, 98,226, 11,145,145,145,126,130, 32, 92,236,
-220,185, 51,119,231,206, 29, 60,251,236,179, 80,171,213, 53,199, 70,167,211, 89,219,165, 81,142,227,130, 26,154, 33,194,104, 52,
-158, 60,122,244,104,208,240,225,195,153, 27, 55,110, 64, 46,151, 87,245,238,237,218, 21, 65,107,214,224,210,244,233,232,149,154,
- 10,131,197, 2,181, 90,141,253,251,247, 91, 42, 43, 43, 79,214, 99,216, 86,198,196,196,180, 87,169, 84, 48,155,205, 16, 69, 17,
- 12,195, 16,150,101,187, 5, 6, 6, 46, 1,208,163,246,250, 90,173,182,245,228,201,147,155,242, 60, 47,100,102,102, 22, 73, 81,
- 44, 9,137,199, 22, 77,106,168,160,206,191,207, 28,153,106, 45,231,163,106,110,229,103,171, 63,163,214,231,120, 0,225,247,173,
-107,253,221,116,223,187,245,247,164, 63, 52,130,197,178,236,240, 55,222,120, 99, 69,223,190,125,163,102,204,152, 1,123,123,123,
-100,103,103,215, 68,170, 20, 10, 5,124,125,125,161,215,235,113,226,196, 9,148,148,148, 28,103, 89,118, 74, 67, 27,180, 88, 44,
- 53, 55,189,218, 61, 6,253,253,253,177,107,215,174,223, 25,130,186,134, 44,168,205,218, 29,186, 54,181,151,207,157, 59,231, 7,
- 0, 31,126,248,225, 67,101,138, 76, 38,219,179,109,219,182,231,251,247,239,207, 88, 35,120,214,116,212, 30, 74,194,104, 52,226,
-251,239,191,167, 42,149,234, 72, 93, 61, 8,107,239,119,237, 8,214,227,186,121, 91, 44, 22,104,210,210,238,233,213,233, 83, 86,
-118,207,114, 59,209,246,102, 34,132,144,101,171, 87,175,158, 16, 18, 18,226,226,237,237,141,202,202, 74, 16, 66,224,225,225, 81,
- 99, 96, 84, 42, 21,228,114, 57,146,147,147,113,232,208,161, 74, 74,233, 50, 91, 34, 88,239,190,251, 46,118,238,220,121,143,121,
-178,154, 43,235,112, 13,148, 82, 44, 94,188, 24,131, 7, 15,174, 55,114, 90,219,240,189,254,250,235,117, 70,176, 14, 31, 62,172,
-183,213,172,253, 17, 6,171,105,211,166,157, 34, 34, 34,246,174, 93,187,214,213,221,221, 29, 89, 89, 89,247,156,211, 77,155, 54,
-237,212,165, 75,151,189,107,215,174,117,245,240,240, 64,122,122,122,131,251,157,154,154,186,122,200,144, 33,243,134, 14, 29, 74,
-250,244,233, 3,181, 90,141,127,255,251,223,184,122,245,234,100, 0, 23,119,239,222,125,126,226,196,137,104,222,188,185,151,141,
-233,175, 25,104,180,118, 84, 90, 16,132,188, 71, 45, 96,120,158, 95,184, 98,197, 10, 78,163,209, 64,175,215, 35, 63, 63,255,158,
- 42,193,202,202, 74,120,121,121, 97,242,228,201,228,243,207, 63, 95,140, 6,198,193,226,121,254,139,241,227,199,143,235,211,167,
-143,179, 86,171, 69,118,118, 54,228,213,213,130,228,233,167,209, 51, 37, 5, 38, 65,128, 70,163, 65,114,114, 50,214,175, 95,175,
- 51,155,205, 15,172,147, 15, 8, 8, 80, 48, 12, 19, 32,151,203, 49,118,236,216,123,126,251,238,187,239, 16, 41, 8, 33,175,251,
-248, 20,136, 12, 99, 42,234,216,241, 4,195, 48,100,202,148, 41, 62, 61,122,244,104,127,249,242,229,212,130,130,130,179,210,109,
- 81, 66,226, 79, 35,254, 47,250,239,227, 55, 88,241,241,241,183, 1, 12, 14, 9, 9,121,225,196,137, 19,139,166, 79,159,238,222,
-189,123,119, 20, 21, 21,193,207,207, 15,222,222,222, 72, 72, 72, 64, 82, 82, 82, 33,165,116,118, 66, 66,194, 79, 15,184, 89,255,
-110,182,109,189, 94,143,245,235,215, 99,234,222,189, 88,218,161, 3,138,238, 27, 7,169, 54,159,127,254,185, 53, 66, 84,175,214,
-238,131,252, 0, 0, 32, 0, 73, 68, 65, 84,230,253,109,176,130,131,131, 99,154, 53,107,230,157,158,158,206,215,142, 96, 89, 63,
-223,223, 6,235,126, 77,163,209,248,193,150, 45, 91,100, 63,252,240,195, 96, 81, 20,101,245,152, 80, 94,165, 82, 29, 50,153, 76,
- 51,235,219,119, 74, 41,241,244,244, 68,243,230,205,161,215,235, 27,213,171,173,246,205,248, 65,251,110, 50,153,176,108,225, 66,
- 44, 61,115, 6,147,186,118,173,215,136, 60,168, 93,209,253,154,113,113,113,229,193,193,193, 19,103,206,156,249,253,135, 31,126,
-168,246,240,240, 0,207,243,248,226,139, 47, 32,138, 34, 68, 81,172, 49, 87, 51,102,204,168,172,172,172,156,120,254,252,249,242,
-134,142, 17,203,178, 88,188,120, 49,120,158,175, 25,166,193, 58,208,168, 74,165,130,193, 96,192, 55,155,247,131, 97, 24,204,152,
- 49,227,119, 85,211, 15,210,180,166,229,199, 31,127,212,223, 31,181,186,127,185, 14, 51,121,207, 49,178,183,183,135,159,159, 31,
-220,220,220, 30,219, 49,114,115,115,123,119,253,250,245,174,122,189, 30,201,201,201, 72, 78, 78, 6,195, 48,215,238,255, 93,167,
-211,225,210,165, 75,184,122,245, 42, 8, 33,215,234,203, 79, 74,233, 18, 66,200,166, 95,127,253,117,168, 82,169, 28,238,233,233,
-233,147,158,158,190,153, 82,186, 21, 0,222,126,251,109, 88, 44,150,134,170,246,107, 52, 47, 94,188, 88,231, 0,193,181,171, 15,
-173,215, 16,165, 52,251,220,185,115,221,108,185,222, 1,152,118,239,222, 13,123,123,123,236,220,185,147,119,113,113,225,230,207,
-159, 15,133, 66,129,121,243,230, 33, 61, 61,157,159, 48, 97, 2, 39,138, 34, 40,165,166,134, 52, 41,165, 21,132,144,201, 61,122,
-244, 88,255,203, 47,191,168, 90,183,110, 13,235, 64,196,115,230,204,193, 23, 95,124, 1,141, 70,131,107,215,174, 97,232,208,161,
-122,157, 78, 55,185,246, 24, 88,181, 53,121,158, 39,114,185,156,138,162,136,127,255,251,223,247, 12, 44,170,209,104,160, 6,176,
- 32, 62, 94, 29, 29, 21,165,158, 50,111,222,208,106,131, 39, 92,190,124, 57,117,245,234,213, 49,148,210,227, 13,236,251,163, 86,
-133, 72,154,146,230, 63, 74,243,239, 70,131,245, 71,231,206,157,219, 18, 20, 20,116,112,225,194,133, 31,237,216,177,227,181,169,
- 83,167, 18, 71, 71, 71,108,221,186,149, 22, 23, 23,255,160, 82,169, 62, 56,117,234, 84,137, 77, 27,227,184,235,135, 15, 31,238,
- 60,125,250,116, 25, 59,115, 38,254,115,223, 36,191,247,147,156,156, 76,117, 58,157, 96, 48, 24,234,157, 83,236,113,183,193, 74,
- 76, 76,204, 1, 48,246, 49,230,243,190, 79, 62,249,100,212,134, 13, 27, 56,181, 90,141,148,148, 20,220,176, 78,191, 82,183,121,
-195,103,159,125,198,155,205,230, 58,123, 50,168, 84,170, 59,167, 79,159,246,249,232,211, 79, 89, 35,195,224,243, 90,195, 21, 60,
- 40,106,115,250,244,105,170, 80, 40, 74, 27, 74,236,249,243,231, 15,132,134,134,190, 52,101,202,148,111,134, 12, 25,162, 9, 11,
- 11,147,251,249,249,129,227, 56,164,167,167,227,228,201,147,166, 3, 7, 14,232,141, 70,227,235,231,207,159, 63,100, 75, 6, 48,
- 12,131,247,222,123, 15, 12,195,160, 77,203,102, 56,120, 34,254,158, 30,115,187, 15,158,130,151,167, 27, 58,116,232,128, 69,139,
- 22, 97,216,176, 97, 13,233, 9,102,179,153,213,104, 52, 53, 99,149, 89,247,221, 90, 93,216,187,119,111,245,233,211,167,245, 38,
-147, 9, 44,203, 54, 20, 14,219,183,100,201,146,145, 63,252,240,131, 76,163,209, 60,182, 99,196,243,124,187,226,226, 98,232,116,
- 58, 36, 36, 36,208, 47,191,252,178,160,180,180,116,110,237,223,139,138,138, 80, 94, 94,142,179,103,207,210,175,190,250,170,160,
-188,188,188,193,161,226, 41,165, 57, 0, 86, 87,191,238, 33, 55, 55,183,210,108, 54,107,178,179,179, 45,143,122,226, 90,171, 15,
- 99, 99, 99,225,224,224, 0, 39, 39,167, 70, 85, 29, 82, 74,103, 28, 60,120, 80,142,234,169,114,242,243,243,207,202,100, 50,133,
- 66,161, 64,102,102, 38, 68, 81,236,178,110,221,186,104, 0,102,142,227,166,218,168,121,136, 16,242, 90, 96, 96,224,154,121,243,
-230,217, 69, 69, 69,113, 90,173, 22,253,250,245,195,245,235,215,241,203, 47,191, 88, 86,173, 90, 85,169,211,233,222,162,148, 30,
-169,167, 60,162,148, 82,194,243,252, 61, 29, 55,172, 61,100,245,162,136, 15,130,131, 13,148,227, 76,243,230,205, 59, 14, 0, 89,
- 89, 89,197,249,249,249,137,162, 40, 30,207,206,206,206,148,110, 33, 18, 18, 18,117,154,208,198, 52, 33,136,136,136,136, 16, 69,
-241,103, 65, 16,100,132,144, 17,137,137,137,167, 27,227,112, 35, 34, 34, 28,228,114,249, 97,189, 94, 31,104,203,246, 20, 10, 69,
-137,197, 98, 25, 28, 31, 31,127,161, 62,215,252,230,112,187,235, 26,149,200, 86, 26, 44,183,214,238,176, 12, 12, 9, 9,185, 51,
-104,208, 32, 85, 93,109,176,204,102,243,205,132,132,132,103,254, 44,119, 79, 8, 97,130,131,131,207,200,100,178,136,234,237,215,
-190, 89,212, 12,150,104, 93,174, 21,157, 74,191,126,253,122, 43, 74,169,185,142,252,244,148,201,100, 71, 13, 6,131,159, 45,105,
- 82, 42,149,217, 70,163,177,127, 98, 98, 98,170, 45,251,222,189,123,119,103,158,231,255,165, 84, 42,159, 54, 26,141,237, 0, 64,
-173, 86, 39,235,245,250,163, 28,199, 45,175,203, 88, 63, 72,179,115,231,206, 58,150,101, 73,237, 33, 25, 30,244, 94,123,184,134,
-138,138, 10, 79,235, 36,223,247,107,246,232,209, 99,195,232,209,163, 7,190,242,202, 43,132,227,184,154,124,179, 30,107,107, 53,
-180,209,104,196,134, 13, 27,232,246,237,219,247, 31, 59,118,108, 92, 67,199,136,227,184, 8, 66, 72,205, 49,122,208,245,209,152,
- 99,228,231,231, 23,100,103,103,183, 14, 85, 35, 11,167,148,150,150, 78,205,204,204,204,172,253,187, 90,173, 94, 7, 64,193, 48,
-204,239,126,127,152,243,147, 16, 50,177,109,219,182, 51,175, 93,187,182,172,174,177,175,108,213,236,212,169,211,145, 46, 93,186,
-180, 57,127,254,188,217,122, 13,213, 53,254,149, 45,154,161,161,161, 91, 0, 12,174, 94,255,112, 66, 66,194,208,135,125, 74, 38,
-132, 56,201,229,242, 73,106,181,186,167,193, 96,104, 91,253,208,113, 77,175,215,159, 48,155,205, 95, 82, 74, 75, 27,210,244,247,
-247, 63,123,242,228,201, 64,107,212,211, 58,122, 59,203,178,104,218,180,233,185,172,172,172, 30, 82,212, 65,210,148, 52,165, 8,
-214, 31,110,176,164, 19,229,159,171,105, 29,169,213,150, 70,189,127, 70, 58,187,118,237,170,229, 56,110,129,209,104,236, 95,223,
- 40,237, 44,203, 10,106,181,250, 87,147,201,244,127,247, 79,246, 44, 29,119,233,252,124,152, 94,132,210, 49,146, 52, 37, 77,201,
- 96,217, 2, 39,101,129,132, 45, 60,105,189,165,170,205,210, 56,233,200, 72, 60,202,249, 89,109,160,250, 74, 57, 40, 33, 33,241,
-184, 97,164, 44,144,144,144,144,144,144,144,144,120,188, 16, 0, 29,235,120, 34,108, 76,155,143,142, 15,241,196,121, 73,210,148,
- 52, 37, 77, 73, 83,210,148, 52, 37,205,127,150,102, 67,218,127,151,170, 71,169, 13,150,164, 41,105, 74,154,146,166,164, 41,105,
- 74,154,127,185,230,223, 13,169,138, 80, 66, 66, 66, 66, 66, 66, 66,226, 49, 35, 53,114,127, 8,180, 90,173, 26,192,179, 28,199,
-141,117,113,113, 9, 43, 44, 44, 92,144,145,145,241,197,223,116, 95, 91, 83, 74,199, 50, 12,243, 2, 0,136,162,184,149, 16,242,
- 67, 86, 86,214,141, 71,213,142, 34,132,243, 2,198,203,128,105, 0, 96, 1,150,229, 0, 95, 31,163,148,255, 59,159, 63, 61,131,
-201, 44,133, 92,246,186,193,108, 89,116,234, 60,253, 38, 42,148,184,241, 34, 22,170,228, 92, 15,163,137,255,244,100, 18, 93,255,
-136, 79,150,246, 30, 30, 30,209, 12,195, 60, 77, 41, 37,148,210, 19,249,249,249,179, 40,165,101,210,213, 43, 33, 33, 33,241, 4,
- 25, 44, 66, 8,219,190,125,192,203, 44, 33, 79, 1,112, 6, 80, 34, 80,122,250,234,213, 91, 63, 80, 74, 31,106,190,178,168,168,
- 40, 78,175,211,141,225, 88,118, 32,165,180, 35, 40, 37, 32,228, 18,207,243, 7, 52, 14, 14, 27, 27,154,122, 6, 0, 70,141, 26,
-197,102,102,102, 94,231,121,222,163, 49,219,150,201,100, 57,103,206,156,105,243, 48,233,246,241,241, 25,209,180,105,211,213,145,
-145,145,154,224,224, 96,200,229,114,124,250,233,167, 83, 1,216,108,176, 72, 84, 20,215,164,216,109, 12, 35,227, 6, 1,180, 35,
-165, 0, 37,220, 37,152,205, 7,114, 93, 11, 54, 82, 27,246, 29, 0, 66, 66, 66,102, 18, 66,198, 86,247,160,218,112,238,220,185,
-207, 31,229,100,248,239, 27,108, 46,165,162,189, 72, 9, 42, 12, 50,243,207,199, 93, 47, 7, 7, 7,135,204,156, 57, 19,145,145,
-145, 16, 69, 17, 39, 78,156,152,182,108,217,178,105,222,222,222, 9, 44,203,110,148,203,229,219, 82, 83, 83, 31,234,198,237, 5,
-140,143,236,222,125,241,107, 51,102,176,149, 39, 78, 96,249, 55,223,124,138,178, 50, 0, 88,219, 72, 67, 65,186,116, 9, 26,238,
-232, 72, 6, 50, 4, 65, 20,148, 16,144, 11, 69,197, 56,144,144,112,254,103, 74,169,248,176,121, 18, 22, 22,182,157, 82,218,191,
-122, 59,191, 38, 36, 36,140,120,148, 60,238, 22, 76, 34,219,182,240,254,239,228,151,158,198,123, 11, 55, 79,238,222,137, 20,168,
-237,228,171,159,239, 30,224, 28,216,210, 25, 31,174,141,153, 10,224,161, 13, 22, 33, 68,227,225,225, 17,183,107,215,174,166, 17,
- 17, 17, 28, 0, 36, 36, 36,140, 25, 60,120,112, 47, 66, 72, 56,165,180,252,175, 40,104,186,118,237,170,226,121,126, 34, 11, 60,
- 67, 41,237, 80,157,214,203, 2,240, 27,199,113,235, 98, 98, 98, 12, 82,113, 44, 33, 33,241,143, 50, 88,132, 16,182, 99, 96,235,
-165, 19,223,124,171,221,240,225,195,189,213, 26, 7, 85,122,250,173,172,117,107, 86, 57,177,132,233, 76, 8,153,209, 88,147, 21,
- 17, 17,209,142,136,226,143,111,191,254,122,243,176,110,221,184, 38,222,222, 48,148,150,226,214,181,107,190,241,103,207,246,217,
-117,248,240,180,208,208,208,177,137,137,137,151,235,211, 41, 40, 40,144,113,130,224,121,228,147, 79, 88,198,197, 5,148,231,193,
-183,107, 7, 81, 20, 65, 5, 1,220,233,211,128,197, 2, 42, 8, 48,247,174,154, 13, 68, 20, 69,244,239,223,223,231, 97, 50,203,
-215,215,215,187, 85,171, 86,235,231,204,153, 35, 55, 26,141, 56,127,254, 60,206,156, 57, 35,230,231,231, 47,181,217, 84, 4, 15,
-109,231, 5,175, 77, 67,135, 15,106, 54,184,175,135,194,207,203, 3,162,168,196,181, 84,139,239,161,147,231,250,254,178,255,224,
-187, 77, 58, 14,125, 57,247,210,174,122,247,189, 75,151, 46,253, 24,134,153,151,144,144, 0, 0, 8, 13, 13, 93, 16, 26, 26,186,
-160,161,237,219,217,217,229,233,116,186,241,137,137,137, 15,152,160, 89,212,204,159,250, 22, 68, 10,124,181,239,154, 60,121,213,
-174, 16, 71, 71,199,123, 38, 75,238,215,175, 31,250,246,237,139,244,244,244,176, 29, 59,118,132,173, 95,191,254, 83, 31, 31,159,
-121, 25, 25, 25, 43, 26,155,159, 50, 96,218,107, 51,102,176,118,105,105,176, 59,127, 30, 99,203,202,184, 69, 85,209, 44,155, 13,
- 86,120,120,120,139,126,125,131, 55, 14, 27, 30,213,214,203, 43, 80, 46,147,185, 87, 79,220, 92,212, 42, 63,255,234, 48, 23, 23,
-188, 23, 17, 17,241, 82, 67,147, 8,215, 58, 55, 61,121,158, 95, 1, 64,206, 48,204, 12, 74,105,255, 3, 7, 14, 64, 16, 4, 12,
- 30, 60,184,127,120,120,120, 11, 81, 20,151,218,217,217, 81,163,209,248,118, 92, 92, 92,163,230,235,227, 8, 62, 26,253, 92, 95,
-232, 45, 12, 44, 22,222,195,219,195,225,135,169,175,244,146,129,154,240,221,238,115,176,240,226, 55,143,114, 65,107,181,218, 5,
-223,127,255,189, 79,100,100,100,205,216, 96,193,193,193,236,146, 37, 75,180,211,166, 77, 91, 12,224,205, 70,152,203, 32,165, 82,
-185,160,164,164,100,212,149, 43, 87,116,157,222,222,233,193, 89,212, 14, 50,181,104,140, 91, 49, 32,179, 17,199, 40,140, 35,100,
-211,146,247,199,123,181,237,212,153, 81,121,184,131,220,201, 67,177,160,127,250,204,165,171, 61, 62, 95,181,113, 82,120,120,248,
- 75,241,241,241, 9, 82,145, 44, 33, 33,241,143, 49, 88,237,219, 7,188, 60,254,141, 55,218,189,245,246,228, 80,179,217, 88,121,
- 33,241,248, 17, 78,206,176,147,167,188,225, 84, 84,156,239, 78,169,248, 50,128, 13,141, 48, 87, 1, 77,155, 52, 57,180,112,209,
- 34,103, 87, 15, 15,228,228,228,224,110, 70, 6,178, 47, 93, 2, 1,208,183,111, 95, 69, 80,231,206, 45,151,173, 93,123, 32, 60,
- 60,188, 95,124,124,252,213,250,244, 88,142, 3,177,179, 67,102, 72, 8, 32,151,163, 52, 38,166,234,123,158,135,253,144, 33, 85,
- 43,201,229, 48, 95,184, 0,134, 97,224,233,233,249,208,153, 69, 41,141,232,222,189,187, 28, 0,222,123,239,189,114,157, 78,183,
-152, 16,178, 37, 51, 51, 51,203,150,255,123, 4, 61, 31,224,233,238,121,112,201, 71, 19, 93, 58,250,183,132,201, 98, 65, 70, 94,
- 38, 40,148,240,242,180,199,216, 97, 65,242,167,194,100, 1, 75, 87,254,246,171, 87,231, 33,125,115, 46,236,169,115,223, 89,150,
- 93, 58,123,246,108,108,217,178, 5, 0,176,105,211, 38,180,110,221,186,193, 52,156, 57,115,198,243,253,247,223, 95, 13,224,129,
- 17, 60,145, 86,205, 91,216,178,101, 0,156,156,156,234, 50,221,240,243,243,195,180,105,211, 16, 18, 18,162,120,249,229,151, 63,
- 2,176,226, 97,242,180,242,196, 9,216,157, 63, 15,156, 56,209,232,255,134,134,134,250,182,111,239,118,116,233,146,255,186,239,
-217,123, 25, 75,150,124,131, 91,183,170,124, 84,203,150, 45,241,210,152, 81,178,141, 63,172,109, 63,107,214,220, 35, 93,186,116,
-121,230,236,217,179, 55, 27,210,228,121,126, 69,116,116,244, 96,123,123,123,204,158, 61, 59,201,223,223, 31,142,142,142, 88,187,
-118, 45, 92, 92, 92,192,243,124,210,162, 69,139,184,172,172, 44, 44, 95,190,124, 53,128,225,182,166,183, 71, 16, 25, 20, 22,220,
- 49,210,207,183, 25,142,157, 57, 11,185, 66,230,252,206,171,207,194,193,158,195,226,175,247,137,233, 25, 69,147, 79, 38,209,239,
-234,125,224, 25,181,141, 13,210, 37,185, 36, 29, 80, 20, 81, 58, 87,180, 70,240, 80, 61, 72,102, 19,111,237,160,158, 61,123,178,
-213,231, 43,210,210,210, 96, 50,153,208,190,125,123,198,108, 54,247,108,196,117, 26,162, 80, 40,246,155,205,102,181,157,157,157,
- 6,128,142,179,168, 29, 68, 57, 55,210, 76,197,171,157,102, 30, 50, 95, 92,220, 55,223, 22,115,213, 46,160,217,190,229, 11,254,
-207,142,205,191, 1, 29, 57,143,226, 92, 51,176,116, 15, 24, 71, 15, 60,253,222,100,174,115,112,144,118,246,255, 69,239,235,210,
-165,203,160,179,103,207, 38, 74,197,178,132,132,196,223,129, 6, 27,185,179,132, 60, 53,108,216,112, 15,147, 73,175, 51, 24,116,
- 37,183,239, 36,100, 31, 57,178,254,210,245,171, 39,111,244,235,223,213,204,176,228,169,122, 12,201, 61, 61, 12, 70,141, 26,197,
- 50,130,176,121,209,226,197,206,172, 92, 14,139,197, 2, 63, 63, 63, 24, 12, 6,148, 21, 23, 35, 39, 61, 29,167,247,238,133,174,
-160, 0, 83,198,142,117,150, 17,178, 41, 52, 52, 84, 86,159, 38, 40, 5,248,123,107,212, 24,134,185, 39,234, 98,253,238, 65,243,
-243, 61, 80,179, 14, 68, 81, 76,203,202,202,130, 70,163, 65,187,118,237,236, 8, 33,103, 50, 50, 50,178,108,209, 36,163, 70,177,
- 50, 25,187,109,241, 71, 99, 92, 8,123, 29,215,211, 19,192,177, 74,184, 57,249,194,100, 6, 78, 37,254,130,111,182,253, 7, 25,
-153,113,152, 56,182,149,147, 90, 77,127, 38,161,111,214,185,239,102,179,185,121, 64, 64, 0, 58,118,236,136, 78,157, 58, 65, 16,
- 4, 92,190,124, 25, 23, 47, 94,196,249,243,231,145,152,152,136,248,248,120,196,198,198,226,204,153, 51, 24, 53,229, 51,188, 53,
-101, 38, 42, 42, 42, 96, 50,153,124, 30,156, 78,166,114,252,127,190,199,225,171,102, 20, 20, 27,176,117,235, 86, 20, 21, 21, 97,
-243, 23,221,177,102,174, 55,214,204,245,198, 15,159,133,160,184,184, 16,177,177,177, 88,188,120, 49,116, 58, 29, 4, 65,224, 30,
- 38, 63, 45,192,178,229,223,126, 43, 38,159, 56,129,100, 0,235, 9, 17, 45,192, 50,155,242,147, 16,226,230, 42,254,180,108,217,
-127,220, 89,230, 10, 92,157, 22,225,236,217,211,200,205,205, 69,110,110, 46,226,226,206,192,197,249, 43,112,220, 85,124,246,217,
- 60, 87,103,103,254, 71, 66, 8, 99, 67, 58,229,201,201,201,208,235,245,248,233,167,159,184,232,232,104,196,197,197, 65,173, 86,
- 99,220,184,113, 88,177, 98, 5,231,234,234,138,219,183,111,163,162,162,130, 52,234, 92, 34,120,109,212,240, 97, 96,229,118,184,
-118, 43, 3,189, 34, 67,224,233,233,137,171,105,197, 72,207, 44,202, 37, 4,227, 6, 60,165,204,233, 25, 76,198,215,165, 73,183,
-142, 20, 94, 26, 57, 32,120,192, 4,199, 9, 77,195, 39,118,174,222,167,234,116,180,231, 8,163,112,178,154,171,155, 55,111, 34,
- 57, 57, 25,119,238,220,193,157, 59,119, 96,177, 88,234, 76,103,175, 94,189,222,137,140,140, 44, 14, 15, 15, 47,239,209,163,199,
- 70,150,101,247, 47, 88,176, 64,163, 82,169, 76,188,139,159, 93,232,155,191,249,202,101, 10,158, 18,198, 72, 5,124, 40, 43,151,
-187, 4, 76, 61,160,168,111,223,187,118,237,170,146, 49,204,166, 21,209,255,182,179, 36,108, 7,188,155,194,211,127, 34,236, 93,
- 34, 65, 75,244,224,147,146, 81,190,100, 37, 56,149,136,127,255,223, 44, 59, 34,138, 63, 4, 4, 4, 40, 30,230, 92,106,228,131,
-146,164, 41,105, 74,154, 79,160,230, 63, 46,130, 69, 24, 56,107, 52,106,121,204,233,157, 7,178, 50,174, 20,100,231, 94, 42,101,
- 64,153,172,172,132, 82,255, 86, 79,187,161,170, 77,150, 77,164,166,166,190, 56,237,173,183,252,157,170, 34, 1,112,119,119, 71,
- 70, 70, 6, 12, 6, 3, 42,203,202,160,175,168,128,177,172, 12, 87,143, 28, 65,183,129, 3,209, 63, 56,216,119,239,185,115,175,
- 1, 88, 87,231, 77,154, 97,192,119,238,140,210,196, 68, 16,179, 25, 78,161,161, 53, 81, 43,227,149, 43, 85,198,202, 98,129,236,
-169,167, 64, 52, 26,144,121,243, 30, 58,179,178,178,178,146,252,252,252, 14, 14, 24, 48,160,223,196,137, 19,153,156,156,156, 93,
- 94, 94, 94,189,115,114,114,146, 27,250,111,147, 27,226,216, 87, 39, 6,183,112,119, 34,216,115,230, 87, 68,182, 27, 14,141,146,
- 67,126,113, 37, 24, 66,112,235,246, 97, 8,130, 29,146,146,211,209,173,163, 29,186, 71, 56, 54,213,253, 86,252, 58,234,169, 46,
- 51, 24, 12,200,203,203,131,197, 98, 1,207,243, 24, 57,106, 20,190,219,176, 1, 58,157, 14, 6,131, 1, 38,147, 9,162, 88,213,
-252, 40, 39,207,128,184,115,251, 17,218,169,238, 40,215,135, 95, 9, 77,180, 90,109,229,119,123,214,226,208,161,170, 57,156,119,
-237,218, 5, 67,110, 10, 38,189, 88,213,244,104,217,119, 63, 97,217,103, 75, 97,182,136, 86,163,247,208,249,121, 19,248, 38, 85,
- 20,103, 13,216,190,221,227,204,206,157, 98,236,158, 61,153,202,242,242,175,109,249,111,151, 46, 65,195, 39, 79,126,182,173, 90,
-165, 70, 70,250,231,104,215, 78,142, 25,211,220, 16,189,168, 0, 0, 48,117,178, 15,194,194,220, 80, 86,178, 13,238,158, 31,224,
-189, 25,195,253, 43, 42, 48, 6,192,198,122,159, 56, 24,102,198,198,141, 27,147,250,245,235,199,157, 59,119, 14, 74,165,178,102,
-162,112,181, 90,141,156,156, 28,152, 76, 38,108,217,178,133,103, 24,102, 70,227, 74, 36, 52,109,226,229, 3,134, 90,144,149, 91,
-128,161,131,250,129,147,219, 35, 45,163, 0, 65,129, 45,189, 95, 26,242,148, 55, 75,120,188,191,232,199,119, 0, 60, 48, 31,162,
-162,230,115,239,252,103,172,229,157, 54,205, 29,247, 30, 60,253,218, 30,134, 20,230,150, 94,253, 28, 55,206, 24,148,173, 58,190,
-216,214, 31,230, 35, 71,142,168,123,246,236, 9,189, 94,111,141,118, 98,227,198,141, 34,207,243,117,134, 9, 5, 65,152,245,253,
-247,223, 43,220,221,221, 49,101,202,148,190,227,199,143, 87,135,134,134, 18, 74, 41,168,162,149,147,192,209, 94, 60,248,179,172,
- 73,216, 11, 57,219, 79,224,204, 99,157, 5,118, 45,128,140,122,162,129, 19, 23,127, 60,181, 9, 85,231, 65,222,123, 32,152,124,
-130,204,183,158,131, 88,110,128,121,193, 36,136, 84, 14,163,137,131,121,216, 36,200,253,219, 96,114, 72,184,247,242,115,241,111,
- 0, 88, 41, 21,205, 18, 18, 18,247, 17, 14,192,218,222,186,160,250,193,210, 13,128, 53,146,238, 1,192,132,170,121, 95,173,220,
-191, 92,123,221,251,151,107,127, 46, 64,213,148, 89, 30, 0, 4, 0,103, 1, 20, 63, 84, 4,139, 16, 66,107, 69, 6,238, 29, 24,
-139,146,130,140,140,212, 34,163,185,216, 48, 32,170,219,180,103, 35,188,230,191,246,226, 59,115,157, 28, 84,234,244,180, 91,148,
- 48, 40,180,117, 99, 74,153,172, 95,104,100,164, 44, 39, 39, 7, 78, 78, 78,200,204,204,196,141, 27, 55, 96, 48, 24,160, 43, 45,
-133,177,184, 24,124, 97, 33, 80, 88,136,180, 19, 39,208, 86,171, 85,176, 54, 76, 99, 33,138, 34, 8, 33, 96, 89,246,129, 81, 43,
-134,101, 65,236,237, 1,123,123,128,105,220,200, 20, 90,173,246,217,118,237,218, 29,211,106,181,179,170, 13,197,180,232,232,232,
- 66, 74, 41,102,205,154,229,224,224,224,176,177,121,243,230,202,134,116,236, 93,249,225, 17,157, 90,177,215,211, 47, 34,172,245,
-243,104,238,221, 19,183, 50, 75,145, 95,106, 64, 78,145, 14,109,218,204,132,135,118, 34,156,188,222,194,133,107,119,161,245,242,
-103, 24,153,188,222,125,207,201,201,185,103,249,199, 77,155, 80, 89, 89,137, 86,173, 90,225,197, 23, 95,196,251,239,191,143,209,
-163, 71, 67,171,213,162,123, 75,224,245,151, 71, 34, 47,175, 81, 77,134,224,227,227, 83, 51, 65,155, 40,138,224,121, 30, 22,203,
-255, 76,149,201,100,178, 89,203,203,203,235, 61, 47, 47,175, 56,111,111,239, 4,111,111,239, 29,185, 90,237, 57,139,191,191,103,
-247,225,195, 73,224, 11, 47,176,119,237,236,200, 29, 63, 63, 59, 91,180, 28, 29,153, 1, 97, 97,221, 21, 37,197,223, 0,168, 50,
-123,175,191,230,129, 83,199, 59,224,244,201, 80, 76,153,220, 18, 12, 81,129, 48,114, 84,234,126, 67,251,192,142,114, 7, 7, 58,
-176, 62,205,176,176,176,237,162, 40, 94,238,208,161, 3,247,246,219,111, 67,169, 84,226,187,239,190,195,234,213,171,241,217,103,
-159,225,250,245,235,240,243,243,131,183,183, 55,154, 52,105,194,137,162,120, 57, 44, 44,108,187,173,251,175, 86,169,220, 20, 42,
- 39,176,114, 59,112, 50, 25,154,249, 54, 7, 43,183, 67,113, 89, 37,198,189, 48, 4,151,110,102,227,227,213,123,120,139, 69,172,
-179,186,245,248,241,185,194,142,125,199, 44, 21, 21, 58,238,185, 65,125,244,111,189,246, 98, 43, 23, 85,203,111,224,211,167,115,
-139,102,222, 47,254, 55,122,133,105,194,219,239,154,191, 90,255, 53, 45, 47, 47, 71, 89, 89, 25,150, 47, 95,206,239,217,179, 39,
- 75, 16,132,153,245, 24, 44, 5,203,178,160,148, 98,194,132, 9,154, 54,109,218, 16,158,231, 65, 41,133,194,172, 51, 51, 34,218,
- 16,194,140, 32, 44,107, 22, 64, 54, 18,202,246, 16,121, 78, 94,111,244, 27,120, 38,176,115,103,182, 82,159, 6,123,199, 80, 20,
-126,250, 95,136, 57,197,160,121,101, 16, 56, 13,244,162, 10,101, 38, 25,138, 58,133, 32, 43, 41, 25,158, 26, 71,142, 35,164,143,
-116, 31,145,144,248,103, 81,175, 7,249, 31, 30,132,144,189,132,144,189,115,230,204,121, 26,128, 27, 33,100,111,181, 9,242,168,
-254,172,176,174, 83,199,178, 71,109,157,251,254, 91,251,179,251,156, 57,115,122, 19, 66,246,118,235,214,237,229,106, 35,247,248,
- 35, 88,130, 32, 28,253,242,203, 85, 77,222, 24,255, 92,147,109,123,191,142,254,121,251,133,206, 47,141,206,185,162,109,218,201,
- 99,227,170,211, 10,158,167,123,109,222,154, 40,118,114,107,210, 4,105,105,105,136,143,143,135,193, 96,128,209,104,132,209,104,
-132,185,184, 24,150,146, 18,144,242,114, 40,120, 30,134,244,116,180,236,212, 9, 4,104,111, 67,168,178,206,106, 65,150,101, 65,
- 68, 17,196,206, 14,196,206,174, 81, 6, 75,171,213, 6, 7, 7, 7,127,191,110,221, 58,249,244,233,211,195,253,253,253,215,100,
-103,103,167,251,250,250, 14, 90,178,100,201,137,143, 62,250, 72, 57,118,236,216,214,235,214,173,123,169,174,136,131, 21,185,202,
-208,193,175, 73,107,148,235,187, 64,163, 80,160,168,204,136,226,114, 35, 10, 74, 12,216,190,107, 12,140,134, 74,240, 70, 19, 4,
- 51, 15,251, 38,195,209,202,245,105,128,222, 12,172, 79, 51, 54, 54, 22,151, 47, 95,174,137, 96, 25, 12, 6, 12, 24, 48, 0,195,
-135, 15, 71, 90, 90, 26,206,157, 59, 7, 39, 39, 39,120,120,120, 96,235,214,173,184,120,241, 34, 66,173, 17,190, 70,192, 42,221,
-240,197,166,205, 48, 24, 12,160,140, 61,104,173,154,229,198, 68,176, 8, 33, 99,179,135, 13, 11,192,241,227, 24,216,172, 89,187,
-182,109,219,194, 96,248, 95,231,177,128,128, 0,223,140,140,140,219, 90,173,118, 51, 33,100, 93,102,102,230,133, 58,181, 32, 6,
-185,184,182, 71,214,221,232,106,109, 14, 4, 74,244,238,155, 4,179, 89,196,245,107, 3,160, 82, 42,193, 16, 37,120,190, 16,142,
- 78, 77, 0,144,192, 6,206,163,254, 7, 14, 28,128,163,163, 99, 77,181, 32, 0, 60,251,236,179, 51,236,237,237,187, 27, 12,134,
-161,123,247,238, 69, 73, 73, 9,252,253,253,225,233,233,137,184,184,184,254,182,238,191,157,157,131, 43, 39,183,131,200,112,112,
-114,114, 1,167,176,131,200,115, 16, 68,192,193,201, 29,103,206, 93,195,213, 59,236,155, 55, 83,177,181,238, 52,130, 6, 12,188,
- 20, 95,169,171,236, 48,244,185,126,174, 33,157, 59, 26,162,231,189,239,176,240,179, 53, 31,255,103,214, 91, 77, 50,203, 84,101,
-125,167,238,207,219,241,235,188,230, 75, 62, 91,174,202,203,203,179,152,141,134,253,162, 40, 78,173,175, 7, 33,165, 20,151, 46,
- 93,130,131,131, 3, 82, 82, 82,224,230,230, 6, 65, 16,170, 30, 94,144, 87, 46,200,185,205,172,133,255,150,149,169, 86, 3,230,
-100,145,210,118,148, 19,229,100,254,124,134,206,157, 43,214,161,217, 65,161, 84, 66,167,163, 40, 63,189, 15, 98, 81, 37,104,137,
- 30,168, 52, 65,167,103, 81, 94, 73, 80, 94, 41, 66,223, 57, 12,194,193, 88,184,148, 26, 64, 41,237, 36,221,110, 36, 36, 36,234,
- 41,171,158, 37,132,236,141,142,142,126,182,190,223, 41,165,207, 2, 48,221,183, 12, 91, 62, 3,192,194,133, 11, 63,169,181, 92,
-249,135, 24,172,203, 87,111,109,237,216,177, 85,160,143,143, 75,235,208,142, 29, 61,124,154,222, 42,115,247,240,113,248,229,192,
- 69,117, 94,110,241,181,203,151,111,238,104,140, 81,213, 23, 21, 33,235,194, 5,148, 21, 21, 65,175,211,193, 80, 94, 14,190,184,
- 24,222,109,219,130, 86, 84,128,213,235,193, 25,141,144,139, 34,212, 26, 13,240,191, 25,238, 31,136, 76, 20,193, 29, 61, 10,251,
-225,195, 1,185, 28,166,171, 87,171,204,150,197, 2, 89,207,158, 32,118,118, 96,156,157, 65,246,237,171,250,222,193, 1,248,188,
-225,209, 12,180, 90,173,155,151,151,215,214, 47,190,248, 66, 94, 80, 80,128, 43, 87,174, 92, 76, 77, 77, 45,115,119,119,183,231,
- 56, 78,188,118,237,218,209,107,215,174, 13,108,209,162, 5, 4, 65,104,217,144, 94, 69,137,189,217,108, 17,145,153,119, 7, 25,
-217,151,224,100,223, 12,148,241, 69,110, 81, 37, 8, 60, 97,209, 95,131, 88,221,150,204,168,207,128,206, 72,108,202, 80,179,217,
- 12,179,217, 12,158,231, 97, 50,153,240,202, 43,175,224, 76, 76, 12, 54,237, 58,129,187,119,239,194,191,137, 26, 47,142, 30,137,
-160,160, 32, 88,123, 28,218, 98, 88,107,211,162,203, 82, 40, 20, 10,108,219,182, 13,154,170, 99,210,104,131,229,237,237, 29,221,
-174, 93,187,128,107, 58, 29,174, 36, 39,163,203,168, 81, 0,128, 83,167, 78,213,172,163,215,235,241,210, 75, 47, 41, 82, 83, 83,
- 95, 77, 78, 78,126,213,219,219,123, 69,118,118,246,156,186, 52,247,237,139,193, 91,111, 93, 65,126,126, 85,100,119,243,166,255,
-249,167,180, 84, 51, 6, 12, 62, 0, 0,112,118,118,198,210,165,182,205,246, 32, 8, 2,214,174, 93, 91, 83, 45, 8, 0, 10,133,
- 34,114,250,244,233, 67, 31,180,126, 96, 96,189,158, 13, 30, 30, 30,118, 10,133, 98,180, 32, 8, 47, 7,182, 16,184,162,114, 61,
-192,155,112, 59,237, 54, 74,116,102, 80,222,130,244,140,108,232,140, 34, 10,139,202, 17,218,101,208, 23, 38,254,204,255,105,181,
-218, 15,178,178,178, 30,248,240,114,107,255, 10,147,107,192,212,141, 57,249,155,103, 77,158,248,178,204,201,197,171, 98,253,202,
- 79,156, 24,194, 96, 79,162,165, 56,176,165,155,203,208,200, 21, 21,111,190,251,239, 36,163,112,123, 58,210,127,185, 81, 29,238,
-174,151,162,162, 34, 24,141, 70,220,190,125, 27,106,181, 26, 50,153,172,218, 96, 89, 79,140,234,143, 22,209, 66, 57,194,112, 22,
-150,153,135,185,117, 95,236, 12, 3,220,206, 1, 86,238, 66,209,184,193,176,124, 52, 9, 2, 47, 71, 69,153, 8,211,224,201, 48,
-153, 69, 88, 88, 5,244,237, 58,160,248,195, 5, 48,218,171,129, 75,167,165, 59,136,132,132, 68,125, 15,234,123,103,207,158,253,
-129,141,171, 31, 6, 48,184, 49,198,205,186, 60,123,246,236, 15,172,219,138,142,142,214, 3,200,106,108, 90,109, 10,231,136,162,
-124,213,193, 3,113, 50, 70,198, 49, 45,252,236, 74, 1, 19,206,198,103,218, 89, 4,217,186, 70,230,204,197,148, 27, 55, 64, 69,
- 17, 21, 37, 37, 48, 20, 21,193,146,151, 7, 75, 94, 30, 72,121, 57, 56,189, 30,156,193, 0,153,201, 0, 21,199,161, 52, 55, 23,
-132, 97,174, 52,152, 49,181, 26,239, 90, 35, 89, 44,203, 2,246,246, 85, 85,131, 26,205,255,170, 11,109,140, 96, 41,149,202,111,
-215,174, 93,235,229,237,237,141,175,191,254, 26, 94, 94, 94,109,158,121,230,153,130, 30, 61,122,228, 62,247,220,115, 9,239,191,
-255,254,192,176,176, 48, 20, 20, 20,128,101,217,148,134,244, 44,102,229,249,171, 41, 2,242, 11,206, 35, 46,241, 91,236,253,117,
- 14,146,111, 95, 65,118,161, 14,118,158,227,193,217,247,168, 89, 87,225, 24,133,220,220, 2,128,212,191,239,247, 27, 33, 74, 41,
- 46, 92,184,128,239,118,158,129, 54,240, 25,200,236, 60,112,233,210, 85, 28, 59,116, 16, 62, 62, 62, 13,154,161,255,190,193,230,
- 62, 19, 82,138, 67, 91, 38, 34,239,230,183, 54, 27, 60, 27, 47,138,209,243,231,207, 71,233, 91,111, 1, 91,183, 66, 46,175,170,
- 93,138,140,140, 68,120,120, 56, 62,252,240, 67, 68, 70, 70,130,101, 89,180,106,213, 10, 67,135, 14, 5, 33,100,116,157,251, 14,
-114, 65, 20, 10,209,178,229,255,188,237,119, 63,228,227, 92, 66, 31, 92,185, 56, 4, 59,119,103,215,124,223,172, 89, 51,228,228,
-164, 2,160, 87, 26, 72,227,175,131, 7, 15,198,222,189,123,161, 82,169,160,209,104, 48,124,248,112, 84, 86, 86, 62, 95,253, 68,
- 3, 66, 8, 8, 33,152, 87,221,150,175,178,178,210, 88,159,166, 66,161,248,246,141, 55,222, 88,184,127,255,254,192, 37, 43,246,
-152, 14,253,122,208,114,224,224,111,252,123, 31,172, 55, 29, 59,121,222,114,228,212, 69,254,249, 49, 51,204,191, 28,185,196,191,
- 57,117,177,105,201,146, 37,248,234,171,175,188,100, 50,217,199,245,233, 22,167,124, 81,145,124,243,242,202, 21,107, 54,176, 10,
- 57, 85,222,201,183, 20,159, 74,214,103,217, 41,137,172,117, 19,106,247,175, 57, 31,221,206,206,185, 62, 7,233,191,220,180,177,
-112, 65, 97, 97, 33, 10, 10, 10,144,145,145,129,252,252,124, 20, 20, 20,128, 82, 10, 10, 79, 7,214,204,143, 6,203,236, 16, 44,
- 70,163,133, 35,173, 1,154, 42,136,102,211,220,185, 16,235, 17,189, 92, 89, 86, 14,198, 64, 33,158, 79,131, 73, 84,161,212,196,
-161,196,200,162,220, 32,160,140,200, 81,206, 40, 81,212, 45, 10, 70,129, 69, 89,105, 25, 8, 33, 23,165, 91,136,132,132, 68,125,
- 70,104,225,194,133,159,252, 81,218,214,207,209,209,209,151,107,109, 75,253, 40, 17,172,168, 90,245,158, 81,247,175,116,229,202,
-149,220, 1,253,159,241, 92,241,229,177,150,102,147,192,239,250,229,144,217, 98,182,215, 95,189,150,210,168, 6, 61,102, 81, 60,
-152,152,144, 48,160,123,183,110,202,180,115,231, 96, 41, 46,134, 80, 92, 12,153,217, 12, 78,167, 3, 99, 52,130,213,235,209, 44,
- 88, 3, 80, 47,156, 77,201,226,205,130,112,184, 65,147, 97, 53, 88, 44, 91, 99,174, 24, 74,193,216,219, 87, 85, 13, 58, 56, 52,
-202, 92, 53,105,210, 68, 51,112,224,192,168,144,144, 16, 80, 74,177,120,241, 98,152,205,102,133,217,108,134,197, 98,129,217,108,
- 70,121,121, 57,126,254,249,103,124,255,253,247, 49,142,142,142, 63, 52,108, 2,141, 7,143,156, 78,234,255,202,240,222,138, 67,
-199,214,195, 98,228, 81, 97,112,134,206, 96, 66,185, 94, 6,147,178, 31, 8, 57, 1,134, 85,162, 91,112, 0,142,158,186, 97, 16,
- 45,230, 67,141,116,246, 48, 26,141,200,203,203, 71, 81,197,111, 64,105, 6,220,205,229,168,184,125, 11,193,175,188,218,160, 25,
- 98, 24,104,190,254,232, 21,112, 28,135,159, 99, 42,192,113, 28,120,254,193, 99,158,178, 44, 11, 39, 39, 39, 84, 84, 84, 0,128,
- 77, 46, 75,175,215, 99,211,166, 77,136,140,140, 68,175, 94,189,144,153,153,137,148,148, 20, 12, 26, 52,168,102,157,164,164, 36,
-156, 59,119, 14, 81, 81, 81,245,106,149,150,138,191, 22, 21,221, 28, 62,116,232, 80,121,108,108, 44, 40,165,104,221,218, 25,142,
- 14,246, 32,140, 18,237,219,123, 0,184, 6, 66, 8,162,162,162, 96, 54,103,241, 58, 29,126,173, 79, 51, 33, 33, 97, 68,120,120,
-120, 11,158,231,147, 58,117,234,196,229,228,228, 96,228,200,145,216,188,121,179,245,137, 6,179,103,207,190, 55, 50, 89, 81, 81,
-175,193, 10, 13, 13, 13,158, 58,117,170,204, 90, 93,173,109,182,128, 55,155,205, 34, 0,180,235,220,243,127,227,199,245, 7,110,
-222,188,137,165, 75,151, 66,167,211,129,101, 89,121, 3,231, 61, 37,132,228,165, 19,187,237, 63,239,220, 59,126,200,179, 67, 57,
-139, 32,240, 29,253, 56,199,159,126,222,155,159,121,247,206, 42,220, 57,124,181,246,250, 13,232,153,178,179,179,237,213,106, 53,
- 46, 94,188,104, 82,171,213,114, 47, 47, 47, 66, 41, 5,207,217,113, 34,131,235,160,244, 44, 17, 4, 57,203,114,163, 65,200, 9,
-194,178,245, 30,119, 1,248,237,230,149,171,189, 90, 53,109,205,148, 31,187,140,210,144, 30, 40,215, 1,186, 10, 2, 65,166,134,
-142, 83,162,162,101,107,148,187,121,129, 3,131,172,187,105, 22,158,210,195,210, 45, 68, 66,226, 31, 71,189, 30,228,254, 8, 86,
-215,174, 93,127,170, 29,101,178,126, 6, 96, 4, 80, 95,155,232,252,218,145,170,218,134,234, 65,219,185, 79,247,225, 12, 22,165,
-244, 56,234,169,138,243,245,245,237,254,238,187,239,118,126,243,205, 55, 81, 81, 81,129,239,190,251, 14,171, 86,173,130,175,175,
-111,247,187,119,239,158,178,117, 99,205,155, 55,255,113,247,161, 67,211, 58,183,109,219,186,121,243,230,184,118,243, 38,228,102,
- 51, 56,158, 7, 91, 89, 9,153,197,136,230, 97,118,144,171,220,145,157, 86,137,159, 46, 95,190, 67, 41,173,119,224, 69, 11,195,
-192,212,191, 63,248,235,215,193,240, 60,228,189,123, 87,181,181,114,116, 4,179,107, 87,149,177, 18, 69, 96,238, 92, 80, 59, 59,
-136,207, 60,211, 96, 58,115,115,115, 43, 91,181,106,117, 46, 57, 57, 57,180,109,219,182,152, 63,127, 62,238,222,189, 11, 74, 41,
-242,242,242, 12,121,121,121, 89, 69, 69, 69,233, 12,195,236,206,204,204,252,214,150,145,194,115, 91, 51, 27, 15, 29, 58,252,110,
- 88,112, 96,171, 62,189,230, 97,239,222,255,162,164,172, 12, 58, 35,135, 10,189, 25, 58, 3,133,214,161, 37, 34, 58,135, 32,191,
-208,132,235,151, 19, 51,243,229, 46,141, 26,116,146, 16,130,164,164, 36, 52,115, 5,174, 92, 75,128,187,177, 16,109,157,237, 17,
-210,189, 7, 82, 83, 83, 31, 24,245,250,157,201, 34, 0,207,243, 40, 43, 43, 67,183,182,109,145,155,155,139,194,194,194,123, 34,
-132,174,174,174,208,104, 52, 72, 72, 72,192,201,147, 39, 45, 12,195,252,215,134,228, 89, 76, 38, 83, 77, 85,229,225,195,135,209,
-187,119,111,244,236,217, 19,199,142, 29, 67, 66, 66, 2,206,157, 59, 7,134, 97,224,239,239,111, 29, 82,192, 82,151, 88,124,252,
-133,237,142,142,228,189,113,227,222, 9, 28, 59,118, 44,126,254,249, 39,188,254, 90, 27, 16, 70, 9, 66,148,120,110, 72, 59,124,
-248, 81, 2, 34, 34,162,224,238, 46,199,225, 95,200,149,199, 0, 0, 32, 0, 73, 68, 65, 84,195,151,211, 56,206,233,199,134,163,
-181,226,210, 69,139, 22,113, 42,149, 10, 38,147, 9, 21, 21, 21, 53,251,191,112,225, 66,204,153, 83, 85, 99, 57,119,238, 92,204,
-155, 55, 15, 6,131,161,222, 14, 14, 22,139,133, 50, 12, 67,238,222,189,107,214,104, 52,196,213,213,149, 83, 42,149, 48, 26,141,
- 53, 70,235,230,205,155,216,187,119, 47, 50, 50, 50,224,234,234,202,184,184,184, 64, 16, 4,155,122,172, 20, 37,127,191,111, 55,
-193,224,238, 93, 35,252, 59,249,121, 43,138, 11,243,176,125,247,254,171,230,148,159,247,163,170, 90,208,166,217,220, 41,165,139,
- 98, 99, 99, 63,166,148,114, 26,141,102,255,197,139, 23,251,232,116, 58, 13,165, 20, 68, 72, 45, 99, 76, 17, 63, 11,132, 99, 40,
-199, 14, 6, 65, 43,176,248,175, 92,161, 41,168,183,112,225,184,117, 31,108,220, 57,233,171, 53, 75,180,101,186, 82,232, 23,172,
-133, 57,241, 10,204, 10,123, 20,126, 20,141, 74,147, 8,125,113, 5, 28,190,250, 18,106, 47, 47, 28, 43, 79,201, 43, 45, 43,251,
- 74,186,215, 72, 72,252,227,162, 82,245,122,144,218,230,200, 90,244, 1, 72,139,142,142, 46,168,213, 22, 43, 31, 64, 18,128,160,
-234,245,242,239,251, 95, 62,128,120, 0,225,181,116,242,107, 25,173,218,159, 77,247,173,147,244, 48,251, 69, 26,186,225, 90, 9,
- 15, 15,175, 28, 61,122, 52,244,122, 61, 50, 50, 50,176,111,223, 62,100,101,101,105, 26,184,225,255,110,182,237,136,136,136, 0,
- 23, 59,187,163, 83, 70,140,112, 81, 26,141,200,136,137,129, 57, 43, 11, 30, 45, 90, 64, 33,147,193,181,185, 55,202, 75, 13,248,
-234,242,229,178,212,178,178, 62,247, 15, 52, 90, 91, 51, 42, 42, 74,105, 54,155,243,119,239,222,205,150,148,148,128,225,121,176,
-195,135, 87, 69,173,156,156,192,110,216, 80, 85,165, 35, 8,192,178,101, 96,236,237,161,121,234, 41,244,154, 51, 7,137,137,137,
-154,250,210,217,180,105,211,166,126,126,126,113,191,252,242,139,115,102,102, 38,158,123,238,185,164,178,178,178, 1, 5, 5, 5,
- 21, 54,154,157,223,105,122, 4, 61, 31,224,226,232,116,116,220,184,113, 46, 26,165,128,115, 87, 46,225, 78,177, 39, 76,102, 30,
-142,118, 10, 68,180, 85, 33,175,208,136, 95,247,239, 45, 49, 86, 22,245,187,127,160,209,218,154,161,161,161,149, 99,198,140,193,
-193,131, 7, 97, 50,153,170,123,247, 85,249,145,127,253,235, 95, 56,115,252, 24,202,211,110,161,107,143, 40, 12,124,101, 28, 94,
-127,253,117,196,198,198, 98,212,168, 81,184,114,229, 74,205,254,215,214,180, 78,149,195, 11, 12,242, 75, 21,194, 93, 93, 55,102,
-250,244,233, 36,251,194, 44,232, 43,114, 96, 52, 26, 33, 87,185, 35, 71, 24,133,253,251,247,211,194,194,194,237, 50,153,108,126,
-122,122,250,237,134,246,221,199,199,103,140,179,179,243,138, 62,125,250,168,170,163,132,184,120,241, 34, 40,165, 56,121,242, 36,
- 0,192,207,207, 15,126,126,126,200,201,201, 65, 90, 90,154,222,108, 54,255, 43, 35, 35,227,199,186, 52,187,116,233,210,188,109,
- 91,215,227,131, 7,143,112, 51,155, 45,232,251, 76, 57,120,190, 0,132,145,131,227, 60,113,242, 20, 65, 94,110, 17,206,196,196,
- 20,223,186, 85,222, 47, 46, 46, 46,185,161,116,134,134,134,110, 25, 50,100,200, 96,149, 74,133,159,127,254,153,111,210,164, 9,
-231,236,236,140, 13, 27, 54,212,105,106, 41,165,117,158, 75, 90,173, 54,122,214,172, 89,111,141, 28, 57,146, 21, 4, 65, 40, 46,
- 46, 22, 0, 16, 47, 47, 47, 54, 38, 38,198,178,123,247,110,232,245,122,248,248,248, 48,132, 16, 18, 31, 31, 47,166,164,164,196,
- 17, 66, 62,200,200,200,184, 84, 87, 58,171,191,175, 26, 96,212,173,159,103,179,182, 1,235, 22,126, 56,215,253, 63, 31, 47, 44,
- 77,185,120,229, 53, 20, 30,204,175,101,174,232,253, 17,172,186, 52,107, 93,167, 33,162, 40,238, 23, 69, 81,205,113, 92,203,184,
-184,184,188,208, 55,143,250, 11, 44, 29, 5,134, 38,243, 28,137,187,252,121,239,188,134, 52,195,195,195,195, 90, 54,111,182,239,
-157, 41, 83,236,202,242,203, 80,244,254,199, 40, 55,139, 40,124,111, 54,140, 60,133,219,143,235,193,169, 29,112, 76, 94,166,203,
-173, 40,253,221, 64,163, 13,165,243,161, 10, 61, 73, 83,210,148, 52,159, 72,205,191, 27, 54,205, 69, 88, 29,193,194, 91,111,189,
-133,242,242,114,252,244,211, 79,248,245,215, 95, 27, 29,193, 2,128,184,184,184, 91, 17, 17, 17,253, 62,222,176,225,199,193,109,
-219, 54,107,219,178,165,220, 53, 48, 16,106,141, 6, 37,133,133, 72, 74,203, 22,190,191,118,237,182,129,231, 95, 78, 76, 76,188,
-106, 67,196, 1, 60,207,195,201,201, 9,148,231, 33,155, 53, 11, 32, 4,148,101, 97,172,186,249, 65,164, 20,178,174, 93, 65, 89,
- 22,165, 21, 54,249, 35,100,102,102,102,250,250,250,142,153, 60,121,242, 47,223,125,247, 29, 19, 21, 21,213,121,247,238,221,244,
- 81, 50, 59, 63,233,231, 91, 94,193, 67,251,173, 88,177,106, 83, 72,120,132,111,243, 22, 45,148,221,125,157, 96,182, 8,200,205,
- 43,196,241, 51, 87,141,215,175,156,207, 0,111,120, 57,247,210,158,122,247, 93, 46,151,167, 57, 59, 59, 55,159, 55,111, 30,120,
-158,135, 40,138,176, 88, 44,200,207,207,199,185,115,231, 16, 26,217, 21,237,198, 79, 64, 81, 81, 17,190,254,250,107,248,248,248,
- 96,208,160, 65, 40, 41, 41,193,181,107,215,210, 30,164,249,225, 87, 66,147,218,203, 90,173, 54,120,252,248,241, 11,166,189, 80,
-222,227,189,241,227, 64, 41, 69,244,218,245,248, 97,231,247,167, 0,242, 65,118,118,246,249,134,246, 57, 32, 32, 64, 97, 52, 26,
- 59, 83, 74,185,146,146,146,149,197,197,197, 99, 63,248,224, 3,175,207, 62,251, 12, 79, 61,245, 20, 50, 50, 50,144,154,154,138,
-182,109,219,162,180,180, 20,241,241,241, 66, 69, 69,197,122, 74,105,116, 78, 78, 78,189, 17,146,179,103,207,166,133,134,134, 62,
-157,155,179,250,199,183,223,234, 23, 96,177,132, 41, 28,157,122,128, 82, 30, 37,197,119, 65,232, 5,243,142,157,191,165,150,151,
-203, 95,180,117,170, 28,142,227,166,238,217,179, 7,168,158, 42, 39, 43, 43,235,178,181,106,249, 65, 17,172,134,200,202,202,154,
-227,235,235,123, 96,197,138, 21,179,199,143, 31, 31, 49,114,228, 72, 25,203,178, 98,102,102, 38,255,227,143, 63,146,214,173, 91,
- 51, 74,165,146,196,196,196,136,151, 47, 95,142,165,148, 46,202,204,204, 60,105,227, 83, 31, 37,132,224,237,145, 45, 34,210,210,
- 82, 10, 62,157,222,183,147,159,171,235,213,222, 35,252,187,148,149,141, 62,178,121,243,230,202, 7,153, 43, 27,175,211,115, 97,
- 97, 97,253, 9, 33, 11,116, 58, 93, 37, 0,136, 10, 83, 57,163,103,182, 17,150, 53, 39,173,236,109, 83,243,128,248,248,248,132,
-240,240,240,193,179,102,206,218, 52,108,216, 11, 77,124, 95,123,137, 37, 23,174,193,172, 82, 64,121,253, 58, 24,123, 7,186,175,
- 52, 53,183, 92,198,190, 24, 31, 31, 47,141,226, 46, 33, 33,241,183,193,230, 8,150, 86,171,173,244,243,243,131,171,171, 43,138,
-138,138,112,231,206,157,135,138, 96, 89,185,127,178,103, 66, 41,161, 54, 76,246,124, 95, 4,139, 51, 26,141,169, 22,139,165, 81,
- 99, 84,200,100,178,252,216,216,216,230,182,164,179,105,211,166,163,124,124,124, 62,202,204,204,220,149,145,145, 49,235,113,184,
-123,235,100,207,224,228, 3, 65,197,142, 0, 8, 24,182,193,201,158,239,139, 96, 69,201,229,242, 47,204,102,115,243,251,215, 51,
-155,205, 40, 44, 44,132,209, 88, 85,109,172, 80, 40,224,230,230, 6,133, 66, 1,150,101,211, 4, 65,152, 98,157,139,208,150,167,
-144, 79,255, 37,171,156,254,250,120, 10, 0,139,191, 90, 71,110, 86, 82,215,111,191,165, 70, 91,246,253,246,237,219,173,236,237,
-237, 71, 18, 66,134, 3,104, 93, 81, 81, 97,252,207,127,254,115,225,216,177, 99,229,173, 90,181,234,219,175, 95, 63,114,245,234,
- 85, 92,186,116,137, 22, 20, 20,236,224, 56,110,254,221,187,119, 83, 27,149,159,132, 48,221,186, 5,143,116,176, 39, 3, 68, 42,
-118,174,254,238,114, 69, 5,126,245,246,246,223,188,117,235, 86,225, 97,159,192,194,194,194,182, 87, 84, 84,244,191,126,253,250,
- 67, 69,176,238,123, 80,233,161, 82,169,230,140, 29, 59,182,203,115,207, 61,199,196,197,197,225,196,137, 19, 66, 92, 92,220, 89,
-139,197,178,240,238,221,187, 39, 27,147,206,121,243,230,177, 37, 37, 37, 61, 69, 81, 28,218,162, 69,139, 32, 47, 47, 47,135,220,
-220,220,226,219,183,111,159,165,148,254,226,234,234, 26, 51,111,222,188,135,222,247,199,249, 68, 91,123,178,103, 78, 20, 59, 90,
- 8,161,182, 76,246, 44, 69, 8, 36, 77, 73, 83,138, 96,253,237, 13, 86,117,134,254, 31,128, 15, 0,124, 66, 41, 93, 32,157, 40,
-255, 12,205, 79, 38,147, 34,150,169,106, 56,200,139, 48,243, 87,225, 62,247, 24,229,109,209,108,222,188,185,210, 98,177, 4, 1,
-104, 69, 8,113,162,148, 22, 91, 44,150, 67,121,121,121,121,222,222,222, 33, 0,172,173,198, 23,102,103,103,159,123, 18,243, 83,
-171,213,158, 49,153, 76, 45,141, 70,163, 92,175,215,203, 40,165, 53,109, 5,212,106,117, 65,101,101,165, 95, 99, 52,171,141,214,
-187,148, 82, 24,141,198,207,235, 50, 86,182,106, 78,158, 60,121,104,245, 58,254,132,144,107, 0,146, 43, 42, 42,142,110,216,176,
- 65, 39,157,243,146,166,164, 41,105, 74, 6,235,175,129,107,204,202,213,166,106,129,148,109,255, 44, 62, 88, 73, 93, 31,246,191,
-105,105,105, 70, 0,177,213,175,123,168, 54, 84, 35,159,244,253,207,202,202,234,246, 56,245,170, 13,213,201,199,165,183,114,229,
-202, 93, 0,118, 73,103,170,132,132,132,196,147, 3, 35,101,129,132,132,132,132,132,132,132,196,227,133, 0,120,224, 16,215,141,
- 9,253, 17, 66, 58, 54,118,195, 13,233, 75,154,146,166,164, 41,105, 74,154,146,166,164,249,247,211,108, 72,251,239, 82,245, 72,
- 30,162,131,145,237,226, 82,253,180,164, 41,105, 74,154,146,166,164, 41,105, 74,154,255, 64,164, 42, 66, 9, 9, 9, 9, 9, 9,
- 9, 9,201, 96, 73, 72, 72, 72, 72, 72, 72, 72, 72, 6, 75, 66, 66, 66, 66, 66, 66, 66, 66, 50, 88, 18, 18, 18, 18, 18, 18, 18,
- 18, 18,146,193,146,144,144,144,144,144,144,144,120, 98,248, 67,123, 17, 74, 72, 72, 72, 72, 72, 72, 72,252, 19,145, 34, 88, 18,
- 18, 18, 18, 18, 18, 18, 18,127,132,193, 34,132,208,218,239, 18, 18, 18, 18, 18, 18, 18, 18,127, 6,127, 87, 15, 34, 69,176, 36,
- 36, 36, 36, 36, 36, 36, 36, 36,131, 37, 33, 33, 33, 33, 33, 33, 33,241,255,135,193,138,170, 14,205, 69, 73, 89, 34, 33, 33, 33,
- 33, 33, 33,241, 39,242,183,244, 32, 53,189, 8, 9, 33,148, 82, 74,164,227, 44, 33, 33, 33, 33, 33, 33,241,167,154,145,191,161,
- 7,145,134,105,144,144,144,144,144,144,144,144,120,204,252,161,109,176, 8, 33, 29, 37, 77, 73, 83,210,148, 52, 37, 77, 73, 83,
-210,148, 52, 37,131, 37, 33, 33, 33, 33, 33, 33, 33, 33, 33, 25, 44, 9, 9, 9, 9, 9, 9, 9, 9,201, 96, 73, 72, 72, 72, 72,
- 72, 72, 72, 72, 6, 75, 66, 66, 66, 66, 66, 66, 66, 66, 66, 50, 88, 18, 18, 18, 18, 18, 18, 18, 18,127, 17, 4,192, 3,123, 2,
- 80, 74, 47,217, 44,242, 16,189, 9, 26,210,151, 52, 37, 77, 73, 83,210,148, 52, 37, 77, 73,243,239,167,217,144,118, 99,252,199,
- 19,109,176,254,200,113,176, 8, 33, 29, 31,119, 70, 73,154,146,166,164, 41,105, 74,154,146,166,164,249,247,211,252,187, 33, 85,
- 17, 74, 72, 72, 72, 72, 72, 72, 72, 72, 6,235,175,135, 16, 50,134, 16,178,139, 16, 18, 79, 8,217, 77, 8, 25,243, 8, 90,106,
- 66,200,140, 90,122, 59, 9, 33,211, 8, 33, 74, 41,167,159,232,115,128,149,114,225, 47,205,127,226,227,227, 19, 16, 26, 26, 42,
-251,163,182, 17, 26, 26, 42,243,245,245,245,255, 35,183,241, 56,209,106,181,109, 2, 3, 3, 19,181, 90,109, 27,233, 12,145,144,
-248,235,225,234,250,161, 75,151, 46,215, 5, 65,240,105,140,152, 66,161,200, 56,115,230, 76,157, 23,119,120,120,248,117, 81, 20,
-127,167, 41,147,201, 68,139,197,242, 64,179, 39,147,201,242, 99, 99, 99,155, 63, 65, 5,251,215, 46, 46, 46,150, 85,171, 86,173,
- 13, 14, 14, 14, 40, 46, 46,214,189,249,230,155,125, 8, 33,189, 41,165,227, 27,169, 21, 72, 8, 89, 31, 30, 30,190,107,234,212,
-169,219,219,180,105,227,160,215,235, 21, 91,182,108,105,178,122,245,234, 67,132,144,183, 40,165,201,210,105,250, 68,221,196,130,
- 40,165,159,181,110,221, 58, 68,171,213, 38, 18, 66,166,101,102,102, 94,148,114,230, 79,203,127, 95, 0, 19,218,183,111,255, 98,
-219,182,109,189, 83, 83, 83, 77,222,222,222,191, 80, 74,167,231,228,228, 20, 60,142,109,248,248,248,184,136,162,248,153,167,167,
-231,144, 46, 93,186, 40, 82, 82, 82, 76, 90,173,118, 15,195, 48,211, 51, 50, 50,138,159, 84,115, 21, 17, 17,113,234,147, 79, 62,
-113,155, 51,103,206, 41,173, 86,219, 61, 43, 43,235,186,116,198, 72, 52, 68,243,230,205,157,202,203,203, 87, 49, 12, 19,164, 82,
-169,154, 56, 56, 56,192,222,222, 62, 87,169, 84, 94,112,114,114,122,123,231,206,157,165, 82, 46, 61,102,131, 69, 41,245,250,237,
-183,223,224,232,232, 8, 65, 16, 32,138, 34, 68, 81, 4,165,180,230,189, 54,102,179, 25,253,251,247,247,170,111, 99,148, 82,239,
-163, 71,143,194,193,193,225,158,255,117,237,218,149, 57,117,234, 20, 84, 42,213, 61,235,155, 76, 38,116,235,214,205,227, 9, 50,
- 87,163,221,220,220, 76,119,238,164, 71, 24, 76,230,136,119,222,155,255,241,232, 33, 79, 59,198,196,196, 48,131, 7, 15,150, 17,
- 66,198, 80, 74,127,180, 81, 75, 77, 8, 89,253,193, 7, 31, 44,149, 43,237, 61,182,238, 59,201,101,173,250, 33,163,115,160, 63,
-121,119,202,219,154, 41, 83,166, 36,180,107,215,110, 13, 33,164, 47,165,212, 40,157,170, 79,196,241,231,124,125,125,183, 68, 71,
- 71,107,115,179,179,177,116,217,178, 46,162, 40,126,142,191,217, 12,240, 79,114,254,251,248,248,108,137,142,142,238,248,194, 11,
- 47,128,101, 89, 24, 12, 6,197,246,237,219,135,127,252,241,199, 79,249,248,248,132, 60,170, 1, 10, 8, 8,112, 80, 42,149,241,
-209,209,209, 94, 35, 70,140, 0, 0, 84, 86, 86, 42,182,110,221, 58,242,147, 79, 62,121, 42, 32, 32, 32,248,214,173, 91,229,143,
-176, 15,140,155,155,219, 84, 0, 79,139,162,168, 4, 16, 87, 92, 92,252, 49,165,212,252, 40,233,118,113,113,217,184,100,201, 18,
- 55,165, 82,137,111,191,253,214,237,133, 23, 94, 56,169,213,106,123, 72, 38, 75,162, 62, 60, 60, 60,198,149,149,149, 45,211,104,
- 52,114,103,103,103,168,213,106,200,229,114, 40, 20, 10, 95, 23, 23, 23, 95,123,123,251,254, 47,189,244,210,180, 77,155, 54,109,
-144,114,235, 49, 26, 44, 0,208,104, 52,248,233,167,159,192,113, 28,228,114, 57,100, 50, 25,100, 50, 25, 20, 10, 5, 56,142,171,
- 89,150,203,229,240,241,177, 61,216,181,123,247,110, 56, 57, 57,193,209,209, 17,237,219,183, 7, 0, 40,149, 74, 28, 62,124, 24,
-114,185,188, 70, 59, 44, 44,236, 79,207,144, 81,125, 72, 37, 0,108,253,188, 93,213,242,187, 85, 1,164,173,159,183,195,224,158,
-118,120,118,204,130,151, 42, 77,150,167,168, 72, 12,217, 69, 98,209,130,101,107,175, 6, 5,182, 37, 91,183,110, 13,118,119,119,
-127, 1,192,143, 54,110,234,157, 46, 93,186,236, 19, 24,149,231, 43,227, 94, 27,251, 26, 67,248,225,227,102,124,114, 58,233,122,
-201,250,192,144,205, 5, 5,153, 19, 86,172, 88,113,115,210,164, 73,111, 3, 88,102,107,250,107, 71, 9, 89,150, 45, 84,171,213,
-254,199,142, 29,227,159,128,155,163, 55,128, 5, 0,120, 0, 75, 41,165,215,107,253,214, 74, 46,151, 47, 48,155,205,197, 0, 62,
-166,148,102, 60,137, 23,139,143,143, 79,155,151, 95,126,217,173, 48, 63, 31, 75,151, 45,179,166, 61,132, 16,194, 82, 74,133, 63,
- 51, 45,225,225,225, 45, 20, 10,197, 2, 0, 65, 70,163, 81, 91,125,189,102,137,162,184, 91,175,215,207, 79, 76, 76,212, 63,228,
-113,242, 1,208, 30, 85, 61,140, 31,248,156, 20, 29, 29,125,115,246,236,217,183,255,108, 77,173, 86,251,175,167,159,126,186,227,
-152, 49, 99,112,232,208, 33, 28, 61,122, 20, 65, 65, 65,232,219,183, 47,238,220,185,227,177,102,205,154, 49, 0, 86, 62, 74,190,
- 26,141,198, 81,211,166, 77,243, 26, 49, 98, 4,246,236,217,131,163, 71,143,162, 91,183,110, 24, 52,104, 16,210,210,210,188, 54,
-108,216, 48, 10,192,250, 70,230,169, 18,192, 84, 0, 79,179, 44,219, 99,220,184,113,252,148, 41, 83,100, 12,195, 88, 62,255,252,
-115,143,245,235,215,143,118,119,119, 15, 41, 40, 40,168,120,216,116, 23, 23, 23,127,252,209, 71, 31,125,183,114,229, 74,135,148,
-148, 20,204,159, 63,223,125,242,228,201,199,181, 90,109, 47,201,100,213, 13,203,178,165,162, 40,202, 0,184, 82, 74,141, 13, 45,
-255,157,246,221,221,221,253,141,162,162,162,207,181, 90, 45, 60, 60, 60, 64, 72,213,229, 41,138, 34,116, 58, 29,244,122, 61,252,
-253,253,229,237,219,183,255,114,210,164, 73,178, 47,191,252,242, 43,233,140,105,100,121, 10,160, 23,165,244,120,173,194,160, 23,
-165,244,120,120,120,120,217,169, 83,167,184,189,123,247,130,101,217, 26, 35, 85,219, 84, 89, 63,203,100, 50,120,121,121,161, 79,
-159, 62,252,217,179,103, 29,235,218, 88,104,104,104,197,238,221,187,153,148,148, 20, 56, 58, 58,194,201,201, 9,222,222,222,232,
-218,181, 43, 98, 98, 98, 16, 27, 27,123,143,113,235,208,161, 3, 34, 34, 34,144,152,152,168,249,211,114,228,106,251, 74,180,191,
-170,169,163,160,188,112,245,234,213,175, 23,172, 59, 92,150, 87, 84,154,223,202, 89, 94, 57,166,123, 27,141,127, 83, 55,165, 87,
-100,247,207, 9, 33,249,148,210,112, 27, 11,221,157,223,127,255,253,142, 45,135,174,217,125,245,217,251, 19, 57,134,240,239,205,
-253,236,227,166,142, 44,223,132,229,117, 97, 3, 7, 58,118,232,208, 97,130,157,157,157, 64, 41, 29,102,107,242,195,194,194,202,
-126,253,245, 87,142,227, 56,244,233,211, 71,208,104, 52, 30,199,142, 29,251,203, 11, 6, 66,200,242,220,220,220, 9, 6,131, 1,
- 97, 97, 97,229,133,133,133, 3, 40,165, 23, 8, 33, 29,134, 14, 29,122,120,235,214,173,246,231,206,157, 67,100,100,228,118, 74,
-233, 43, 79,210, 69,162,213,106,247, 0,232,205,178, 44, 70,143, 26,101,250,105,203, 22,133, 40,138, 85,206,128,210,248,236,236,
-236, 63, 53,130, 21, 26, 26,218, 70,165, 82, 29, 93,186,116,169, 67, 96, 96, 32,145,201,100,224,121, 30, 55,110,220,192,198,141,
- 27, 13,103,207,158,205, 52, 24, 12, 97,137,137,137,150,135, 56, 78,253,143, 31, 63, 94, 25, 16, 16,240, 64,195,168,211,233,216,
- 86,173, 90,249, 3,216,240,103,107, 54,109,218,180,169, 40,138,203,163,162,162,250,159, 56,113,226, 10,128,143, 40,165,239,110,
-220,184, 49,210,206,206, 14,207, 63,255,124,114,122,122,250, 35, 61,149,249,250,250,158,140,141,141, 13, 41, 47, 47, 71,239,222,
-189, 19, 57,142,251, 15,207,243, 31,109,219,182, 45,148, 97, 24,188,240,194, 11,231,238,222,189,219,163, 17,251, 30,168, 84, 42,
- 55,252,248,227,143,246, 45, 91,182,108, 41,151,203,153,150, 45, 91,162,168,168, 8, 6,131, 1,158,158,158, 88,176, 96, 65,210,
-242,229,203,211,202,203,203, 71, 60,228,249,217,166, 75,151, 46,167, 62,252,240, 67,183,171, 87,175,162,117,235,214,200,207,207,
- 71,106,106, 42, 86,172, 88,145, 91, 94, 94, 30,245, 87,153, 44, 66, 72, 14, 0, 7, 0,222,148,210,178,199,164,167,176, 46,203,
-100, 50, 40,149, 74, 40,149, 74,168,213,106,164,166,166,238, 98, 89,246, 77, 0, 54,157,251, 28,199,149, 9,130,192, 1,120, 26,
- 64, 2,203,178, 37,245, 45, 83, 74,197, 39,160, 44,109,202, 48,204,167,148,210, 94, 0, 24, 66,200, 73, 79, 79,207,153,217,217,
-217,233,182,106, 52,109,218,212,181,160,160, 32,213,195,195, 67,230,233,233,105, 53,155, 8, 11, 11,131,193, 96,192,229,203,151,
- 97, 45,227, 66, 67, 67,209,169, 83, 39, 75,105,105,169,255,156, 57,115,138,254,128,253,121,160, 7,249, 59, 24, 44, 6,192, 49,
-235, 78, 85,127,119,204,250,163, 32, 8,247,152,168,218,175,218, 70, 72, 38,147,129, 97,108,106, 47, 79, 76, 38, 83,141,185,114,
-116,116,132, 76, 86,213,126,148,231,249,223,105, 10,194,195, 7, 5, 92, 92, 92,118, 19, 66,158,121,204,249,149,146,159,159,111,
- 30,210,163,181, 82, 86,150, 95,244,202, 83,173,156, 58, 5, 52, 13,244,244,105, 54, 66,167,211, 37, 2,200,105, 76,185,216,190,
-125,123,135,130,188,156,194,151,254,181, 56,122,230, 39,171, 23,134,183,106,234,208,163,109, 11,175,110,157,219, 53,119,183, 88,
- 24,141, 70,211, 30,128,182,177,137,116,114,114,194,145, 35, 71,158,180,115,205, 89,175,215,163,168,168, 8,107,214,172,113,112,
-115,115, 59, 64, 8,121,105,232,208,161,191,109,219,182,205,190,180,180, 20,102,179, 25, 0, 12, 79,224,117,178,208,197,197,197,
- 52,108,216, 48,252,184,121,179, 66, 20, 69, 29, 0, 29,128, 28, 66,200,244, 63, 59, 49, 74,165,242,221,143, 63,254,216, 33, 48,
- 48,144, 20, 20, 20, 32, 43, 43, 11, 5, 5, 5,112,119,119,199,123,239,189,167,106,213,170,149, 86,169, 84,206,124,216,242,174,
- 46, 35, 4, 0,118,118,118, 2, 26,223, 57,230,129,154, 60,207,147,200,200,200,105,157, 59,119,254,202, 22,205,204,204,204,204,
-236,236,236, 17, 39, 78,156, 24, 39, 8,194,107,153,153,153,251, 0, 44,223,189,123, 55,156,157,157,209,190,125,251,118, 62, 62,
- 62, 1,143, 96,164,125,194,194,194, 66,188,189,189,177,117,235, 86, 48, 12,179,242,238,221,187, 39, 25,134, 89,185,103,207, 30,
-120,120,120,160, 93,187,118, 33, 90,173,214,166,112, 61, 33, 68,169, 84, 42, 55,220,188,121,179,237,144, 33, 67, 90,149,149,149,
- 49, 90,173, 22,214, 99,150,158,158,142, 11, 23, 46, 96,252,248,241,158,130, 32,116,179,213, 76,245,234,213,235,238,200,145, 35,
- 11,159,127,254,249,194, 17, 35, 70, 20, 14, 30, 60,248,236,183,223,126,235,102, 45, 71,231,204,153,131,148,148, 20, 56, 59, 59,
-227,181,215, 94,107,162, 86,171, 55, 62, 1,215, 80,182, 76, 38,171,116,113,113,113,124, 68, 29,133,245,197,113,156, 66,161, 80,
- 40, 84, 42,149, 66,165, 82, 41,148, 74,165,226,111, 31, 17, 33, 68, 75, 8, 73,228, 56,110,128,179,179,179,163,171,171,171,189,
-175,175,111,159,150, 45, 91,198,191,246,218,107,126,182,234,232,245,250,245,106,181, 90,230,225, 81,213, 2,167, 95,191,126,216,
-184,113, 35, 70,143, 30, 45,246,235,215, 79, 28, 53,106, 20,154, 52,105, 2, 0, 72, 74, 74,130, 66,161,144,217,219,219,175,255,
-131,118,171, 78, 15,242,255, 59,220,125, 59,121, 79, 8, 95, 20,197,154,232,213,131, 76, 85,237,151,173, 8,130, 0, 47, 47, 47,
-104, 52, 26,104, 52,154,123,182,117,191,230,163,140,209,213,170, 85,171, 94, 26,141,166, 27, 33,100, 20,165,244,168,173,255, 27,
-245,110, 50,182, 30,174,243,231,189,239,190,251,110,255,152,152, 24, 99, 68,199,150,162, 42,235,110,145,198,197,163, 35,227,238,
-209,123,210,196, 55,227, 0,108,105, 76,129,163,215,235, 21, 45,188, 89,125,102,105,133,169,133,157,147,115,115, 7,181,166,133,
-135,147,171,179, 74,201,216, 53,245,244,182, 88, 44,165, 0,178, 27, 18,170, 93, 45,168, 82,169, 76,132, 16,206,217,217, 25, 78,
- 78, 78,230,226,226,226,162,208,208, 80, 40, 20,138, 66,185, 92,110,115,117, 97,151, 46, 93,210, 4, 65,168,183,253,155, 92, 46,
-207,143,137,137,177,181, 3,194,252,160,160,160, 30,171, 86,173,114,111,221,186, 53,214,172, 89,227,176,109,219,182,117, 27, 55,
-110, 68, 73, 73, 9,110,223,190,141,215, 95,127,189, 28,141,168, 14,253,179,112,117,117, 61, 60,114,228, 72,172, 95,191,158, 82,
- 74, 9, 0, 59,134, 97, 34, 28, 29, 29,111, 92,185,114,197,252, 23, 20,178,125,218,182,109, 75, 74, 75, 75, 65, 41, 5,203,178,
-247,188,102,206,156,169, 30, 63,126,252,172,110,221,186,189, 43,147,201,202,121,158,223, 86, 89, 89,185, 40, 41, 41,233,137,106,
-172,218,179,103,207,201,119,239,222, 29,232,231,231,247, 75, 99,254,151,153,153,185,205,250,153, 82,122, 41, 39,167,234,185, 70,
-173, 86, 3,128,234, 17,242, 85,229,228,228, 4, 0,184,123,247, 46, 0, 88, 59, 47, 92,204,202,202, 2, 0,216,219,219,131, 16,
- 98,235, 54,166,110,221,186,213,193,219,219, 91,173,215,235,145,146,146,130,208,208, 80,148,151,151, 67,167,211,161,178,178, 18,
-102,179, 25,165,165,165,206,130, 32,152,108, 60, 23, 55,126,249,229,151, 62,237,218,181, 3,207,243,176, 88, 44,160,148,226,248,
-241,227,208,233,116,176, 88, 44,104,219,182, 45, 22, 46, 92,104,152, 52,105,146,106,203,150, 45,121,122,189,126,236, 95,125,172,
- 89,150,133, 82,169, 4,199,113,217,205,154, 53, 3,195, 48,174,105,105,105, 15, 19, 89,247, 2,144,195,113,156, 66,169, 84, 66,
-165, 82,193,250,126,249,242,229,109,141,137, 94, 85,159, 63,180, 49,203,127,121, 68,132, 97, 62,229, 56, 78,225,230,230, 38,183,
-126,103, 54,155,229, 46, 46, 46,240,245,245,253, 12,192,112, 27,165, 58,187,187,187,131, 16, 2,185, 92,142, 55,222,120, 3,241,
-241,241,187,239,222,189,251, 70, 94, 94, 30, 42, 42, 42,190,114,116,116,124, 46, 47, 47, 15,130, 32, 32, 45, 45, 13, 65, 65, 65,
-157,255,224,221,251,157, 7,249, 91, 24, 44,171,115,172,229, 32,235, 52, 61,181, 77, 86,237,207, 54, 94,100,226,139, 47,190,248,
-192,238,237, 60,207,223,211,254,234, 81, 13,150, 82,169,196,160, 65,131, 84, 26,141,102,115,181,201,122,232,144, 99, 59,111, 85,
- 51, 14,178,239,158,237,221,179,243,196,119,223,147,245,238,221,251,151,157, 59,119, 6,121,244,124,122,192,137,223, 54,123,174,
-157,189,231,151,159,126,250,169,194,214, 6,238,213,196,108,223,190,221,235,189, 41,111,203,163,162,162,118,142, 11,154,193,105,
-149,130,189,179, 66,206,218,177, 44,163,244,105,222,247,183,227, 39,114, 0,156,178,161,144,240, 58,124,248, 48,156,157,157, 1,
- 64, 97, 50,153,224,236,236,140, 53,107,214,168, 28, 29, 29,225,232,232,136,110,221,186, 57,203,229,114, 14, 85,109,160,108, 49,
-194, 30,199,143, 31,135,157,157, 29,116, 58, 29,140, 70, 35,120,158, 7,165, 20, 28,199, 65,165, 82,161, 87,175, 94, 30,141, 40,
-200, 82, 9, 33,125,223,121,231,157, 67,171, 86,173,114, 15, 8, 8,192,252,249,243, 81, 88, 88,136,244,244,116,140, 29, 59,182,
- 60, 53, 53,117, 64,237,182, 89, 79, 2,157, 58,117,170, 60,125,250, 52,246,239,223,143, 33, 67,134,144,221,187,119,155, 5, 65,
-144,103,100,100, 92,254,171,210, 36, 8,130,189, 66,161,128,197, 98, 1,199,113, 96, 89,182,230,157,101, 89, 52,109,218, 20,135,
- 14, 29,226, 42, 43, 43,185,194,194, 66,205,215, 95,127,253, 86, 66, 66, 66, 19, 0,175,253,149,121,185,102,205, 26,223, 9, 19,
- 38,100,112, 28, 71, 7, 14, 28,248,226,157, 59,119,134,120,123,123, 31, 59,114,228,200, 10, 0,173, 26,171,215,173, 91,183, 52,
- 79, 79, 79,143,188,188, 60,252,240,195, 15,200,203,203,131,155,155, 91,108,104,104,232,189,133, 28,199,229,199,197,197, 53,248,
- 32,224,227,227,115, 56, 59, 59, 27, 43, 87,174, 68,118,118, 54, 60, 60, 60,146, 66, 67, 67,225,225,225,129,188,188, 60,108,218,
-180, 9, 69, 69, 69,240,246,246, 62, 12,160,153, 13, 73,140,138,136,136,240, 43, 41, 41,129,147,147, 19, 42, 42, 42,144,144,144,
-128,192,192, 64,100,101,101,129, 97, 24, 56, 59, 59, 99,245,234,213,149,132, 16,155,170, 94,138,138,138,198,190,242,202, 43,199,
-246,236,217,211,196,203,203, 11,249,249,249,208,235,245,240,243,243,195,138, 21, 43,208,172, 89, 51, 28, 62,124,184, 72, 16,132,
- 9,235,215,175,255,183, 94,175, 31,251, 87,183,193, 98, 24,166,166, 26,175,150, 41, 42,138,140,140,196,233,211,167,183, 52,198,
- 20, 81, 74, 77,214,106, 65,149, 74, 85,243, 82, 42,149, 96, 24, 70,124,136,107,201,137, 16,210,217,122, 99,111,104,249,175,134,
- 82,218,195,206,206, 78,126,255,247,197,197,197,242, 54,109,218,116,179, 85, 71,165, 82,185, 86, 63,144,160, 87,175, 94,200,203,
-203, 19,252,253,253, 95, 29, 53,106,148, 5, 0,222,124,243,205, 87,243,242,242,138, 44, 22, 11,203,113, 28,242,243,243,209,178,
-101, 75,215, 63,240,161,241,129, 30,228,255,123,131, 69, 41, 37,132, 16, 90,251,189,214,193,108, 48,114,101,253,205,150, 42, 66,
- 81, 20,105, 29,189, 8,107,204,220,227, 52, 88,206,206,206, 24, 51,102,140, 38, 51, 51,115,157,173, 5,184,181,113,123,109,115,
-165,117,107,114,100,209, 39,243,189,110,237,255, 6, 95, 45, 95,204,199,197,197,237,246,242,242, 26, 6,160,220,203, 13,158, 57,
-133,216, 65, 41,221,220,136,147,137, 1,240,115,108,108,108, 76,255,254,253,227,110,223,190,237,156,122,243,102,140,131,190, 84,
-231,224,215,146,151,123,120, 62,171, 55, 91,184,231,159,127, 94, 9, 96,181, 13,122, 16, 69, 17,251,246,237,131,131,131, 3, 28,
- 29, 29,225,236,236, 12,171,185,122, 88, 82, 82, 82,144,145,145, 1, 59, 59, 59,216,217,217,193,222,222, 30,246,246,246, 80, 40,
- 20,214,104, 65, 99, 11,135,155,132,144,153,219,183,111,223,240,201, 39,159,160,164,164, 4,149,149,149,152, 59,119, 46, 82, 82,
- 82,102, 82, 74, 47, 60, 73, 23, 71,231,206,157, 43, 99, 98, 98,112,234,212, 41,232,116, 58,172, 92,185, 18,222,222,222,131, 0,
-204,254, 43,211, 37, 8,130,156,101, 89, 48, 12, 3,134, 97,126, 23,193,178,154, 45,181, 90, 13,119,119,119,204,153, 51, 71, 62,
-116,232,208,129,127,101,154, 63,253,244,211,150,203,151, 47, 95,189, 97,195,134,131, 47,191,252,242,207,151, 46, 93,122,217,209,
-209,241,242,225,195,135, 23, 41,149,202,135,106,215, 98, 50,153, 60,146,146,146,254, 23, 34,157, 63, 31,130, 32, 64, 16,132,154,
-232, 78,101,101, 37,134, 12, 25, 98,211,131,128,197, 98,113, 59,112,224, 0, 0, 96,202,148, 41, 53, 15,153,181,245, 38, 78,156,
-136,193,131, 7,187,217,152, 68,173,139,139,139, 44, 61, 61, 29, 60,207, 35, 36, 36, 4,171, 87,175,198, 11, 47,188,128, 14, 29,
- 58,160,188,188, 28, 87,174, 92,193,134, 13, 27, 92,228,114,249,243,182, 8,102,101,101, 93,215,106,181, 81,131, 6, 13, 58,185,
- 99,199, 14,247,102,205,154,225,194,133, 11,200,206,206, 70,135, 14, 29,176,112,225, 66, 29,165,244,169,106, 83,181,235, 9,136,
-184,220, 99,132,212,106,245, 61,230,232, 97,224,121,222, 75,169, 84,230, 84, 87, 13, 66,169, 84, 34, 33, 33,161,209,209,171, 90,
-229,210,133,198, 44,255,149, 88,203, 97,139,197,242,187,239, 91,183,110,109,179,142,189,189, 61,177,222, 99, 45, 22, 11,178,179,
-179,133, 75,151, 46, 9, 33, 33, 33, 0, 0,111,111,111, 33, 54, 54, 86, 48, 26,141,172,245,126,237,228,228,244,135,152,204,250,
- 60,200,223, 34,130, 5,224,196,125,239, 53,133,139,213,240,212, 21,185,178, 46,219,216, 6, 11, 28,199, 97,251,246,237, 53,237,
-176, 58,119,238, 92, 99,230,238,215,181,246,106,120, 24, 20, 10, 5,156,156,156,112,240,224, 65, 67, 82, 82,210,164,135,141, 92,
-105,221,154, 28, 89,186, 56,218,171,240,106, 12, 50,178,114,113,243,114,198, 17, 74,233, 38, 0,155, 0, 88, 27,197,219,108,174,
- 2, 61,237, 58, 69,182,246,218,242,116,223, 1,218, 97,175,190,195, 76,154, 52, 41,226,213, 87, 95, 45,126,245,213, 87,223, 86,
-169, 84,129,130, 32, 20,255,118,252,120,250,243,207, 63,239, 90, 86, 86, 54,145, 82,170,183,161, 16,203,233,215,175,159, 15, 0,
- 56, 56, 56,152,190,249,230, 27,133,179,179, 51, 94,122,233, 37, 67, 78, 78,142,170, 58, 63, 74,108,141, 94, 89,159,250, 39, 76,
-152,224,209, 64, 30,231, 55,242, 41,165,243,179,207, 62,187,114,243,230,205, 40, 44, 44, 68,101,101, 37,228,114, 57, 22, 47, 94,
-140,187,119,239, 46, 33,132, 92,121, 82, 10,179,160,160,160,202,184,184, 56, 92,188,120, 17, 70,163, 17,111,188,241, 6, 40,165,
-214, 58,237, 33,127,113,242, 72, 70, 70, 6,126,248,225, 7, 8,130,128,177, 99,199,162,121,243,230, 53, 6, 43, 39, 39, 7,223,
-124,243, 13, 4, 65,192,132, 9, 19,208,172, 89, 51, 88, 44, 22, 85, 84, 84, 20,247, 87,245, 40,157, 62,125,122,234,142, 29, 59,
- 14,102,100,100,244, 91,180,104, 81,119, 66,136, 56,115,230,204,165, 78, 78, 78,143,212,251,178,184,180, 28,215,110,222, 1,207,
-243, 15,124,121,184,187, 54, 90,239, 70, 74, 58,120,190,202, 84,241, 2, 15,129,231,171,151, 45,112,115,109,148, 94,102, 81, 81,
- 81,107,150,253,127,237,157,121, 92, 84, 85,255,199, 63,231,222,185,115,103, 31, 96, 8, 17, 68, 81,220, 23, 52, 89, 21,125,244,
-209, 52, 82,212,204,210, 39, 31, 75,109,251,169, 61, 46,143,230,146,102, 18, 21,104,174,105, 41, 60,105,101, 90,102,155,230,174,
-165, 86,138, 32, 66,106, 41, 34, 18,200, 42,187, 16, 12,179,221,153,243,251,131, 37, 52,209, 25,212, 28,237,190, 95, 47, 94, 51,
-115,239,240,153,115,207, 61,247,220,207,253,158,141,149,166,167,167,195,215,215, 23, 33, 33, 33,136,142,142, 70,113,113, 49, 4,
- 65, 64,139, 22, 45,108, 22,139, 37,197,100, 50,253,104,175,104, 65, 65,129,190,125,251,246,134,231,158,123,142,190,247,222,123,
- 68,171,213,226,210,165, 75,144, 72, 36,208,104, 52,250,212,212, 84,167,137, 2, 55,142, 92,201,100, 50,240, 60, 15,153, 76, 86,
- 31,185, 34, 0,246, 2,112,200, 96, 83, 74, 77,173, 91,183,110,136, 92, 53, 55,122,117,183,184,155, 35, 19,187,116,233,242,147,
- 90,173, 30,118,225,194,133,107,162, 88,227,199,143, 55,119,232,208, 33,222, 94, 29,141, 70,115,149,231,121,157,193, 96,192,137,
- 19, 39,208,181,107, 87,105, 69, 69, 69, 20, 33,100,113,221,195,101, 84, 97, 97,161,180, 85,171, 86,245,191,139,138,138,138,171,
-173, 91,183,190, 91,217,118, 67, 15,242, 64, 24,172,186,209, 8, 13,175,215, 71,176,110,213, 60,104,111, 4,139, 16,130,170,170,
- 42,168,213,106,212, 77,102,134, 70,163,177,254,212, 68,120, 59, 6, 75, 46,151,227,200,145, 35,134,184,184,184, 9,148,210,239,
-236,253,191,198,125,176, 60, 31,242,216,185,242,157, 90,115,117,230,216, 33,124,113,250, 74, 62, 97,108,255,109,110,154,122,180,
- 80,249,123,122,184, 31, 88,181, 98,169, 38, 47,113, 31,182,199,173,162,103, 78,158,236,127,242,228,201,209,211,166, 77,115, 67,
-109,127,171,124, 0,241, 0,214,219, 99,174, 0, 32, 49, 49,177, 97,114,215,144,144,144, 74,173, 86, 11,181, 90,141,226,226, 98,
-169, 90,173,214, 53,103, 20,161, 61, 77, 42, 14,154,171,142, 35, 71,142, 60,248,213, 87, 95,169,174, 94,189,138,172,172, 44,204,
-155, 55, 15,239,191,255, 62,180, 90, 45,118,239,222,173, 30, 49, 98,196, 1, 66,200,160,123, 61,185,106,239,222,189,245, 73, 73,
- 73,200,204,204,132, 32, 8, 24, 61,122,116, 99,115,117,207,177,217,108,116,214,172, 89,248,224,131, 15,192, 48, 12, 38, 78,156,
-136,202,202, 63, 6,104,233,116,186, 27,237, 99,235,174,247,123, 98,176, 36, 18, 9,253,225,135, 31, 86, 13, 28, 56, 16,185,185,
-185,143, 6, 5, 5,109,152, 60,121,114,254,237,234,186,185,104,240,112,247,246, 48, 26,141, 48, 26,141,240,246,246, 70, 85, 85,
- 21,210,211,211, 97, 52, 26,225,217,194,213, 97,189,222, 61, 58,194,100, 50,193,104, 52,162, 69,139, 22,168,174,174, 70,102,102,
- 38,140, 70, 35, 60, 60,220, 28,145,251,225,216,177, 99,190, 67,134, 12,233,114,238,220, 57,252,248,227,143, 48,153, 76,232,221,
-187, 55, 46, 94,188,136,190,125,251,162,178,178, 50, 49, 41, 41,233, 91, 7,174,163,214,225,225,225, 71, 62,253,244, 83,247,173,
- 91,183,154, 38, 77,154,196, 71, 71, 71, 19, 66, 8,170,171,171,225,100, 93,134,254,100,176,146,147,147,191,228, 56,142, 2,104,
- 86,180,169,158,156,156, 28,183,158, 61,123,150,203,100, 50, 62, 62, 62,126,123,115,163, 87,119,229,233,231,143, 27, 87, 79, 66,
-200,169, 58, 35,217,228,103, 71, 70, 38,118,238,220,121,158,151,151,215,224,128,128, 0,156, 63,127, 94, 42,147,201,240,204, 51,
-207,152, 35, 34, 34,204, 44,203,218, 61,224, 70, 46,151,167,106, 52,154,254, 70,163, 17, 38,147, 9,223,127,255, 61,220,220,220,
-254, 59, 98,196,136,105, 5, 5, 5,200,207,207,231,235,140, 43, 24,134,193,160, 65,131, 80,213, 69, 54,191, 0, 0, 29,173, 73,
- 68, 65, 84, 86, 86,118,215,234,229,166, 60,200,131, 18,193,106,234,160,237,106, 30,116,196, 12, 25, 12,134,134,166, 38,141, 70,
-211, 96,204, 8, 33,127,210,180, 55, 42,118, 35, 82, 82, 82, 18, 50, 50, 50,214, 82, 74, 15, 52,231,255, 59,121,186,180, 11,108,
-163,233,152,159,184, 23, 23,206,156,194,231, 41, 87,242,171, 5,243,144,212, 2, 67,118, 83,134,236,166,209, 48, 79,117,119,111,
- 15,247, 3, 43, 87, 44,213,148,158, 63,129,244,179,167,176, 55, 49,239,103, 35,165,151, 0,188,115, 39, 79,106,115,154,239,238,
- 54,114,185,252, 63, 95,126,249,165,234,234,213,171,200,200,200,192,132, 9, 19, 42,178,178,178,102, 61,241,196, 19,171,247,237,
-219,231,170,211,233,112,240,224, 65,117,235,214,173,163, 0, 60,121, 15, 43, 71,189,213,106, 69,105,105, 41, 0,160, 95,191,126,
- 78,101,174, 0,224,212,169, 83, 46, 35, 71,142,220, 11, 96,224,249,243,231, 97,179,217, 18,146,147,147, 27, 70,204,222,108,159,
- 61,254, 77,175,215, 75,148, 74,165,208, 68,217,226, 28,141, 56, 52,214, 60,126,252,248,202,149, 43, 87,126, 59,103,206,156,140,
-219,212,188, 97, 4,107,196,136, 17,168, 49,152,145, 91, 88, 1, 65, 16,160, 55, 21,222, 86, 4,171, 86,207,132,236,130,114, 8,
-130, 5, 85, 6,135, 2,110,107,199,143, 31,255,212,241,227,199,203,186,116,233,162, 75, 74, 74, 66, 81, 81, 17, 44, 22, 11, 6,
- 15, 30, 12,153, 76,118, 57, 38, 38, 70, 10, 96,173,157,101, 83, 57,116,232,208, 3,219,182,109,107, 25, 31, 31, 15,147,201,100,
-203,205,205,205,156, 61,123,182,230, 63,255,249,207, 67, 44,235,124,171, 55,213, 71,172, 82, 83, 83,235,141,213, 75,119,202, 8,
-213, 71,176,254, 78,108,222,188, 57,127,227,198,141,129, 62, 62, 62,239, 60,251,236,179, 3,189,189,189, 25,158,231,127, 98, 89,
-118, 46, 0,187,167,105, 80, 40, 20, 83,220,220,220,126, 97, 89,150,205,203,203,195,197,139, 23,193,178, 44, 40,165,124, 77, 77,
- 13, 60, 61, 61, 81, 95,158,198,143, 31, 15, 31, 31, 31,107,106,106,234, 20,136,220, 57,131, 5, 0,111,190,249, 38,118,253,246,
- 27, 70,250,249,221,244,123, 95,127,253,245,141, 42,132, 63,173,182,109,177, 88, 16, 19, 19,211,240,249,219,111,191,109, 48, 88,
-211,166, 77,187,230,255,119,236,216, 97,151,230,141,184,116,233, 82,184, 3, 55,213, 6,205,250, 62, 88, 23, 11, 43, 50,123,121,
-107,143,127,252,237,247,253, 50,203, 12,153,122,193, 28,113,189,185,178, 87,179,135,151,186,139,183,135,238,224,202,229, 75,181,
-245,209,176,109, 41, 5,149,196, 74,167, 59,120,243,191,229,177,115, 28,119, 37, 44, 44,204,167,174,114,187,101,179,224, 95,181,
-202,186,193, 96, 64, 66, 66, 2, 0,224,249,231,159,175,200,202,202, 26, 74, 41, 61, 79, 8, 73, 29, 62,124,248,193,189,123,247,
-214,135, 26,202,238,101, 58,129,218,145,174, 18,137, 4,157, 59,119,118,216, 92,253, 85,233, 44, 44, 44,156, 62,101,202,148,117,
- 70,163,145, 53, 24, 12,211,237,221,119,171,116,126,254,249,231, 25, 29, 58,116,232,143,166,167, 77,176, 1, 72,188, 29,205,119,
-223,125, 23, 0, 58,221,142,102, 83, 17,172,207, 63,255, 28, 54,155, 13, 62,158, 46, 48, 26,141, 80,169, 84, 14,105, 94, 31,193,
-218,190,125, 59,108, 54, 27,218,120,185,193,104, 52, 94, 51,242,249, 86,154,148, 82, 35, 33,100,114, 88, 88,216, 39,111,189,245,
-214,111, 93,187,118,109, 29, 22, 22,230, 86, 86, 86, 86,244,243,207, 63,103,197,197,197,169, 5, 65,152,220, 84, 51,209,245,154,
-238,238,238,171, 54,111,222,236,115,254,252,121,228,229,229, 97,245,234,213,151,139,139,139,135, 75, 36, 18,217,218,181,107,143,
- 70, 68, 68,120, 10,130, 96,116,134,242, 89, 79, 65, 65,193,158,186,251,140, 67,198,202,158,116, 38, 38, 38,126, 93,167,125,192,
- 30,237,191,234,216,111,119,100,226,173,210,249,194, 11, 47,228, 1, 24,127, 59,233,220,191,127,255,229,167,159,126,122,169,191,
-191,255, 34,181, 90,141,180,180,180,134,105,145,234, 31,208, 9, 33, 24, 59,118, 44,166, 78,157,138, 67,135, 14, 45,253,215,191,
-254,117,249,110,231,231,223,198, 96,113, 28,151,157,145,145,209,118,243,230,205, 76, 5, 33,216, 66, 8, 88,150, 5, 33,164,161,
- 99,109,253, 43, 0, 28, 57,114, 68,224,121, 62,235, 22, 55,255,236,147, 39, 79,182,217,184,113,163, 68,165, 82, 65, 46,151, 35,
- 61, 61, 29, 18,137, 4,151, 47, 95,198,103,159,125,118, 77,167,221, 67,135, 14, 89, 21, 10,197, 61,155,213,251, 76,126,229,163,
-157,124, 20,222,234, 60, 67,113, 42,165, 55,188,128,175,239, 20,127, 35,148, 26,237,155, 43,151, 47,117,105,100,174, 42,140, 38,
-219, 99,231,138,170,239,120,225, 60,126,252,184,179, 46,244,250,214,192,129, 3,109, 0,220, 1,188, 65,107, 35,119,168, 51, 89,
-255,236,220,185,243, 12, 0, 10, 0,111,221,203,232,149,205,102,107,136,156, 58, 91,228,170, 49, 73, 73, 73,153, 0,134, 59,186,
-239, 86,140, 27, 55,238, 55, 0,191,221,201,180,222, 13,205,122,202,174, 86,226, 82,102, 94,221, 82, 94, 86, 88, 47, 95,249,163,
-255,148, 96, 65, 89,101,169,195, 17,172, 75,153,185,176,217,104,173,158, 53,175,182,147,187, 85,128, 96, 17, 80,114,213,177, 9,
-242, 41,165,231, 8, 33,125,231,207,159, 63, 3, 64,127,212,142, 62,204, 70,237,232,224,181,246,246,193,225, 56,174,255,154, 53,
-107,134, 51, 12,195, 36, 36, 36, 24,151, 47, 95,158, 83, 92, 92,252, 56,165, 52, 27, 0,188,189,189,255,185, 99,199,142,173,206,
- 48, 37,195,117,188,120,159,106, 55,155,251,101,100,226,182,109,219,162,167, 77,155, 38, 9, 13, 13,157, 27, 28, 28,204,100,102,
-102,162,184,184, 24, 44,203,162, 83,167, 78, 8, 15, 15,135,175,175,175,109,223,190,125,203, 71,143, 30, 29, 45,218,165, 59,104,
-176,172, 86,235,144, 57,115,230, 28, 54, 26,141,118,245,197, 81, 40, 20,121,213,213,213, 67,110, 81,240,134,196,198,198, 30, 94,
-179,102, 77,219, 70, 21, 71,141,197, 98, 89, 52,109,218,180,183, 5, 65, 80, 92,167,153,107, 54,155, 7,253,149, 25,114,125,147,
-223,197,220,154,219,238, 39,162,226,225,151,147,176, 7,233,103,147,241,121, 74,193, 85,189,153,134,167, 22, 85,159,251, 59, 21,
- 52, 74,105, 49,128, 89, 77,236,187, 4, 96,186, 19,164, 81, 73, 8,209, 59,179,177, 18,249, 3,158,231,139, 31, 29, 50,248,150,
- 35, 4, 37, 18, 73,177,189,122, 67, 31, 25,116, 75, 61,142,227,138, 29, 44, 87, 70,212,118, 3,104,118, 87, 0,150,101,231,132,
-134,134,178,115,230,204, 41,220,183,111,223,247,229,229,229,179, 41,165,250,250,253,117,163, 6, 3,197, 82,225, 52,245,221,125,
- 49, 50,113,253,250,245, 81,179,103,207,222,234,235,235,187,177,127,255,254,157, 59,116,232,160,209,104, 52,168,172,172,172, 42,
- 43, 43, 75,219,181,107,215,243,147, 39, 79,206, 20,207,232, 29, 54, 88,137,137,137, 69, 0,186,223,201, 31,187,133,230,255,156,
- 38, 87,206,119,211,215,155,173,198, 81,170, 38, 63,223,162, 15,214,149,146,223,103,188,245,241,222, 24,163,197,102, 19,108,116,
- 74,106, 97, 85,170, 88,244,156,182, 98, 20,205,213,125, 66,124,124,124, 91,103,214,187,147,152, 76,166,153, 97, 97, 97,239, 90,
-173,214,149, 22,139,229,152,120,246, 69,238, 20,171, 86,173,202, 68,237, 82, 64, 24, 59,118, 44, 11, 0, 95,124,241,133,213, 9,
-147, 26, 12,192, 3, 64,253, 3,142, 7, 0, 19,106,103,246, 47, 6,144,116,223, 24,172,191, 43, 95,124,247,199, 13,246,122,227,
-116,171,207, 77,250,181,130,223,143, 1,232, 39,230,174,136,136, 72, 51,141,127, 54,128,199,197,156, 16,185,171,247, 63,231, 52,
- 86,245,120, 16, 66,118, 83, 74, 71, 0, 64,253,251,198,219,156, 13, 70, 44, 82, 34, 34, 34, 34, 34, 34, 34, 34,119, 22, 2,192,
-191,137, 39, 38,187, 59, 96, 19, 66,252,155,241, 68,246,139,168, 41,106,138,154,162,166,168, 41,106,138,154,127, 47,205, 91,105,
- 55,241,255, 17,183,136, 96,237,113, 58,131,117, 55, 39,166,251,171,135, 4,139,154,162,166,168, 41,106,138,154,162,166,168,121,
-127,106,222,130,251,206, 96,137,125,176, 68, 68, 68, 68, 68, 68, 68,156,157,154, 5, 11, 22, 44, 36,132,236, 6,128, 5, 11, 22,
- 44,116,246, 4,139, 6, 75, 68, 68, 68, 68, 68, 68,196,217,137,143,137,137,209,199,196,196,212,119,104, 47, 70,109, 43,220, 8,
-252, 49,178,240,254, 54, 88, 11,134,248,245,243,110,237,253, 97, 69,105,233,105,155,169,106,234,146, 3,185,229,205,249, 97, 66,
-136,142,231,249,167,148, 74,229, 32, 74,169, 31,203,178, 23, 42, 43, 43,143, 88, 44,150, 47, 40,165,213, 98, 89, 18,185,215, 4,
- 6, 6,246,224, 56,110, 54, 33, 36, 88, 16,132, 86, 28,199, 21, 16, 66,146, 76, 38,211,154, 83,167, 78,157, 22,115,232,193, 37,
- 40, 40,232,107, 74,105,120, 93, 93,117,224,212,169, 83, 99,196, 92, 17, 17,185,167,152, 0,156,188,159, 18,236,176,193, 34,148,
- 62,253,252,139, 19,189,175,230,164,121,127,178,109,127,167, 55,134,183, 13, 95,178, 55,203,161, 5,191, 20, 10,197, 83, 61,122,
-244, 88,177,110,221, 58, 93,187,118,237,136, 66,161, 64, 65, 65, 65,231, 51,103,206,140,138,140,140, 92,200,113,220,255, 89, 44,
-150,195,183,115, 96,132, 16, 23,119,141,100,118, 73,165,229,117,177, 92,138, 56,194,216,177, 99,217,156,156,156, 69, 58,157,110,
-230,252,249,243,101,126,126,126, 80,171,213, 40, 42, 42,106,125,241,226, 69,159,245,235,215, 15, 15, 11, 11,139,149, 74,165,145,
- 71,143, 30, 21,196, 28,187,255, 9, 13, 13,109, 33, 8,194, 90, 66, 8,207,178,236, 92, 74,105,248,254,253,251, 97,181, 90, 17,
- 17, 17, 17, 30, 26, 26,218,193,106,181, 46, 87, 42,149, 54,163,209, 56,181,110, 78, 63,145,251,156,144,144,144, 44,171,213,234,
- 97,239,247,121,158,207,141,143,143,239, 44,230,156,200, 93, 49, 88, 44,197,129, 61, 95,109,159, 56,114, 64, 23, 50,241,241,128,
- 14, 91,191, 77, 62, 50,231,209,246,143,174, 60,152, 97,215,146, 54, 74,165,114,218,148, 41, 83,162,162,162,162,228, 23, 46, 92,
-192,185,115,231, 32, 8, 2, 52, 26, 13,252,253,253,153, 61,123,246,180,156, 62,125,250,167, 60,207, 79, 49,153, 76, 59,155,123,
- 96,158, 58, 54, 90, 35,151,140,147, 73, 36, 73, 70, 65,216,227,164, 23,247, 46,139,197,178,242,231,159,127,254,241,126, 41, 48,
-193,193,193,125, 37, 18,201, 66,158,231, 31,127, 80,205,197,229,203,151, 23,254,227, 31,255,152, 25, 25, 25, 41,203,204,204, 68,
- 90, 90, 26, 10, 10, 10,208,174, 93, 59,180,107,215,142,172, 93,187, 86,190,110,221,186, 41,167, 79,159,102, 0,216,221, 15,128,
- 16,194,120,121,121, 77, 26, 60,120,240,104,119,119,119,109, 65, 65, 65,101,124,124,252,238,188,188,188, 15, 41,165,205,202, 75,
- 66, 8,227,225,225, 49, 33, 34, 34, 98,180,155,155,155, 91, 65, 65, 65,249,225,195,135,119, 23, 21, 21,125, 76, 41,181, 53, 55,
- 15, 8, 33, 45, 81, 59,194, 88, 87,183,233,138,159,159,223,249,140,140,140,226, 59,168, 89,224,231,231,151,218, 28,205,190,125,
-251,122,155,205,230, 61, 0, 58, 54,245, 29, 74,105, 42,199,113, 17,246,152, 33, 65, 16,214,190,243,206, 59, 17, 26,141, 6,243,
-231,207, 63,237,235,235, 11,173, 86,139,184,184, 56,184,185,185,193,106,181,158, 94,177, 98, 5,201,201,201,193,154, 53,107, 54,
- 0,120, 66,188,125,216,117,206,183, 0,112, 5, 48,137, 82, 90,218,104,187, 59,128,207, 1, 20, 83, 74,199,223,171,244, 89,173,
- 86,143, 31,126,248, 1, 50,153,172,110,185, 37, 27, 40,165, 13,175,141, 49,155,205, 8, 15, 15,111, 41,158, 85, 17, 7, 2, 82,
- 77,143, 34,124,117, 72,187,151,252,123, 7,188, 45,229, 37, 10,155,213, 2,155, 96,129,213, 98, 2, 75, 5,116,111,231,138,246,
- 45,120, 84,253, 94,133, 79, 14,166,255, 94, 90,131, 1,209,123, 47,164,223,226, 98,243, 13, 14, 14, 62,113,244,232, 81,237,247,
-223,127,143, 11, 23, 46, 32, 58,186,118,137, 35,149, 74,133,125,251,246,213,175,232,141,199, 30,123,172, 36, 63, 63,191, 55,165,
-180,188, 25, 23,117,155, 1, 65, 62,199,191, 94, 49,192,173,199, 19, 95,102, 95, 41, 51,245,160,148, 58,221, 4,106,129,129,129,
-122,142,227,244, 38,147,233,169,251,193,100, 5, 7, 7,247,101, 89,118,135,197, 98, 81,170,213,106,247,163, 71,143, 26, 31,180,
- 11, 34, 48, 48,176,135,171,171,235,209, 29, 59,118,200, 19, 18, 18, 80, 94, 94,142,162,162, 34,204,156, 57, 19, 27, 54,108, 64,
-143, 30, 61,160, 82,169,192,243, 60, 94,126,249,229, 26,189, 94, 31,158,152,152,152, 98,143, 17, 26, 48, 96,192, 71, 91,183,110,
-109,107,177, 88, 24,160,118,225,243,236,236,108,235,194,133, 11,115,146,147,147, 39, 59,106,178, 8, 33, 76, 88, 88,216,166,173,
- 91,183,250,241, 60,207, 8,130, 0,155,205,134,139, 23, 47, 90, 23, 45, 90,116, 57, 57, 57,249,185,230,148,123, 66, 72, 47,165,
- 82,217,229,229,151, 95, 46,125,252,241,199,205, 0,144,146,146, 66, 82, 82, 82, 92,124,125,125, 47, 47, 89,178,228, 76, 51, 52,
-123, 43,149,202, 78,211,167, 79, 47, 25, 62,124,184,192,243,188, 45, 33, 33,129, 61,123,246,172,139,159,159,223,111, 11, 23, 46,
-116,104, 52, 82, 64, 64,192,153,247,222,123,175,149,143,143,143,149, 16, 66,235,126,131, 18, 66, 40,195, 48, 20, 0, 82, 83, 83,
-185, 87, 94,121, 37, 59, 37, 37, 37,200,142,243,190, 99,252,248,241, 67,123,245,234,133, 46, 93,186,128,101, 89,164,165,165,225,
-210,165, 75,144,203,229,240,247,247,135, 66,161,192,206,157, 59,241,217,103,159, 29, 74, 78, 78, 30, 45,222, 62,236, 58,239, 63,
- 0, 8, 2,112, 30,192, 48, 74,105,105,157,185,218, 15,160, 43,128, 19,148,210, 33,247,178, 14, 78, 72, 72,192,142, 29, 59, 32,
-149, 74,193,113, 28, 74, 75, 75,225,235,235, 11,137, 68, 2,142,227,192,113, 28,164, 82, 41,124,124,124,240,200, 35,143, 8, 73,
- 73, 73, 90,241,204,138,220,118, 4,203,171,229, 67,243,158,124,114,136, 2, 86, 1, 48, 87, 3,102, 61,168,185, 26,212,164, 7,
-225, 21,160, 22, 3, 84,108, 41,254,239,145, 22,154,175,226, 11, 83, 94, 29,220,110, 76,204,225,204, 67, 77,233,105,181,218, 5,
-113,113,113,218,179,103,207, 34, 45, 45, 13,171, 87,175, 70, 84, 84, 20,164, 82, 41,202,203,203, 49,106,212, 40,196,199,199,195,
-100, 50,225,181,215, 94,115, 91,176, 96,193, 20, 0, 14, 47, 50,217, 82, 39,121,119,251, 39,107,221,116,138, 18, 60, 55, 42, 73,
-183,254,139,172,151, 0,108,112,198, 19, 48,111,222, 60,229,242,229,203,191,236,221,187,183, 83,155,172,224,224,224,190, 82,169,
-116,199,226,197,139, 85,139, 23, 47,182,222, 33,205,110, 12,195,124, 98, 50,153, 22,156, 62,125,250, 59,103, 56, 78,169, 84, 58,
-237,149, 87, 94,145,231,228,228,224,234,213,171, 13, 79,182,245,200,100, 50, 48, 12, 3,158,231,241,236,179,207,202, 55,109,218,
- 52, 29,192,164, 91,233,122,121,121, 77,218,178,101, 75, 91,179,217,204, 84, 85, 85,129,231,121, 72,165, 82,244,236,217,147,157,
- 59,119,174,207,172, 89,179, 94, 0, 16,235, 72, 90,117, 58,221,191,183,108,217,226,199,243, 60, 83, 80, 80,128,126,253,250, 33,
- 33, 33, 1,161,161,161,236,188,121,243, 90, 79,159, 62,253, 57, 0, 31, 56, 26,101, 82, 42,149,221,142, 29, 59,150,219,170, 85,
-171,134,237,237,219,183,167,195,135, 15, 47, 59,127,254,124,167, 83,167, 78,149, 5, 5, 5,229, 58,160,233,173, 84, 42, 59, 31,
- 60,120,240, 74, 84, 84,212,160, 13, 27, 54,140, 0,128,144,144,144, 61, 49, 49, 49, 71,138,139,139,187, 38, 36, 36,148,245,233,
-211, 39,223, 1,205, 14, 94, 94, 94, 85,211,166, 77, 83, 55,245,157,143, 62,250,168,140, 16,210,213, 30, 61,150,101,103,111,219,
-182,237, 76,121,121,185, 36, 57, 57, 25,114,185, 28, 10,133,162,225,245,202,149, 43, 48,153, 76,216,190,125,187,192, 48,204, 28,
-241,214, 97, 55,227, 0, 28, 0,208, 13,192, 62, 66,200, 51, 0, 62, 5,208, 5, 64, 58,128,123,190, 56,181,205,102, 3,199,113,
-144, 72, 36,216,179,103, 15, 98, 99, 99,241,205, 55,223,192,219,219,187,193, 96, 73, 36,146,250,114, 39,158, 81, 17,199, 12, 22,
- 33,132, 82, 74, 73,253,107,253,206,130,130,162, 85, 31,199,126, 24,205,115, 12, 55, 36,172, 11,220,100, 2,136, 82, 7,233,192,
- 5, 32,174,190, 0, 0, 90,150, 1,211,129, 5, 24,219,187,132,249,196, 76, 62,127,103, 84,231, 54,243,190, 77,171,106,162, 82,
- 12,105,211,166, 13,126,252,241, 71,180,107,215, 14,139, 23, 47, 70,215,174, 93,161, 84, 42, 81, 88, 88,136,234,234,106,168, 84,
- 42, 88,173, 86, 4, 4, 4,176,106,181,122,128,163, 6,139, 16,242,240,243,227, 66,131, 36,218, 46,232,247,216, 11, 56,184,126,
-160,234,227, 61, 5,175, 16, 66, 62,105,188, 56,170,179, 48,122,244,104, 20, 22, 22, 42,183,110,221,218,108,147, 21, 18, 18,178,
-203,106,181, 14,190,213,247,228,114,249,143,199,142, 29, 27,214, 92,115,181,105,211, 38,149,171,171,235, 29,169,100,234,204,213,
-247, 19, 39, 78,212,108,217,178,101,219,195, 15, 63,252,180, 51,152, 44, 66, 72, 31, 63, 63, 63,100,103,103,163,176,176, 16, 70,
-163, 17,133,133,181, 93, 12,115,115,115,225,227,227, 3, 55, 55, 55,248,248,248,160,115,231,206,132, 97,152, 96,123,116, 7, 14,
- 28, 56, 2, 0,147,145,145,129,226,226, 98,104,181, 90,168,213,106,180,106,213, 10,131, 6, 13,146,180,111,223, 62,220, 81,131,
- 21, 30, 30, 62, 90,169, 84, 50,217,217,217,200,204,204,132,209,104, 68,122,122, 58, 92, 93, 93,241,200, 35,143,112,126,126,126,
-195, 28, 53, 88, 0,186, 79,153, 50,165,184,177,185,170, 71,165, 82,145,110,221,186,149,107, 52,154, 0, 0,185,142,104,206,156,
- 57,179, 40, 38, 38,166,255,161, 67,135,102,215,111, 60,116,232,208,127, 1,224,253,247,223, 63,230,226,226, 18, 0,192,161,133,
-213, 41,165,182, 23, 94,120,225, 18,207,243, 13,134,181,254, 61,207,243, 96, 24,198,197, 30,157,250, 14,237,254,254,254,152, 58,
-117, 42,190,249,230, 27,108,222,188,185, 97,255,147, 79, 62,137, 49, 99,198,160,170,170, 10,158,158,158,146,252,252,252, 95,131,
-130,130,156,162,227, 59, 33, 36, 16,192, 82, 0,102, 0,145,148, 82,167, 90,143,141, 82, 90, 68, 8, 9,111,100,178, 78, 0,144,
-213,153,171,112, 74,233, 61,239,203,102,181, 90,193,113, 28,114,114,114,176,113,227, 70,188,244,210, 75,232,217,179, 39, 42, 42,
- 42, 26, 12, 22,199,113, 96, 24,113,225,147,187, 88,142,111,232, 65, 30,232, 8,150,172,127,118,108,230,113,166,231,216,145, 97,
- 19,116, 90, 5,108,191,231, 67,250, 72, 36,206,150, 41,177, 38,246, 0, 0, 96,214, 83, 1,240, 31,250, 22,140, 31, 62,138,193,
-190, 38,254,195,159,229,255, 5, 16,117, 35, 61, 15, 15, 15,119, 65, 16,192, 48, 12, 84, 42, 21,116, 58, 29, 20, 10, 5, 74, 74,
- 74, 48, 99,198, 12,236,223,191, 31, 38,147, 9, 82,169, 20,126,126,126, 48,155,205,126,142, 30,144,167,155,100,253,154, 21,209,
- 46,165, 25,159, 33,249,194, 85, 40, 93,124,176,232,165, 64,215, 55, 54, 36, 47, 4,176,200, 25, 79, 66,247,238,221, 49, 99,198,
- 12,229,186,117,235,154,101,178, 40,165, 75, 37, 18, 73,159, 57,115,230, 40,158,122,234,169, 63,237, 63,119,238, 28,166, 78,157,
- 90,163,215,235,151, 53,199, 92,113, 28,183, 99,227,198,141, 42, 23, 23, 23,100,103,103,223, 49,115,181,118,237, 90, 77,251,246,
-237,193,113,156,252,163,143, 62,114, 10,147, 37, 8,130,143, 82,169, 68, 73, 73, 9,102,205,154,117, 77, 63,140,250,230,108, 0,
- 72, 75, 75,131,143,143, 15, 12, 6,131,183, 61,186,238,238,238,174,148, 82,188,248,226,139,200,201,201,105,216,238,237,237,141,
-220,220, 92, 8,130,224,230,104, 90,117, 58,157,155,197, 98,193,128, 1, 3, 96, 48, 24,106,195, 5,227,198,129,227, 56, 20, 21,
- 21,193, 98,177,232,154,145, 5,238,195,135, 15, 47,104,106,167, 90,173,182,232,116,186, 54,142, 38, 53, 34, 34, 34,127,253,250,
-245, 17,215,239, 56,121,242,100,132,139,139,203, 97,119,119,247, 78,205, 9, 62,200,100, 50,240, 60, 15,142,227, 80,255,190,254,
-143,101, 89,155,157,215, 79,248,254,253,251,161,213,106,145,152,152, 8,133, 66, 1, 0, 24, 49, 98,196, 28,181, 90,221,223, 96,
- 48, 60,190,123,247,110, 92,189,122, 21,126,126,126,104,209,162, 5, 18, 19, 19,195,157,164,250,120, 27, 64,159,186,247,239, 54,
-122,239,108, 38,107, 2,128, 99,117,230,202, 4, 96,188, 51,152,171,198, 17,172,101,203,150, 65, 16, 4,196,199,199, 99,236,216,
-177, 32,132,128, 16, 2,173, 86,139,119,223,125, 87,116, 65, 34,205, 51, 88, 55,114,142,111,188, 65, 24,227,241,182, 27,198, 70,
-244,153,208,205, 71, 5, 99, 73, 6,120,181, 59,136,107, 91,172,137, 61,128,243, 89,101, 0,128, 53, 95,166,224,227, 87,195, 65,
-148, 58,120,213, 92,128,150,151,141,106,202, 96,149,150,150, 86,153,205,102, 55,133, 66,209,240, 84, 80, 82, 82,130,215, 95,127,
- 29,219,183,111, 71,219,182,109, 33, 8, 2,120,158, 71,113,113, 49, 56,142,115,104,116,162, 68, 66, 30,139,156, 57,172,173,202,
-189, 19, 74, 83,222,168,221,168, 13,192, 75,227, 24,126,229, 39,191,252,155, 16,242, 46,165,212,233,230,203, 80,171,213,232,213,
-171, 23,254,253,239,127, 43,183,110,221,250, 1,110,210,113,247, 70, 36, 37, 37,157, 8, 14, 14, 30,181,106,213,170,111, 11, 10,
- 10, 20,189,123,247,134, 90,173,134, 90,173, 70, 70, 70, 6,162,162,162, 12, 6,131,225,201,230, 68,199, 24,134,137,125,254,249,
-231, 85, 90,173, 22, 25, 25, 25,208,233,116,183,117,172,193,193,193,221, 88,150,253,126,237,218,181,154, 14, 29, 58, 32, 53, 53,
- 21,129,129,129,104,217,178,165, 60, 38, 38,230,158,155, 44,169, 84,154, 87, 92, 92,220,190,117,235,214,216,180,105, 19, 24,134,
- 65,126,126, 62, 22, 45, 90,132,152,152, 24,244,233,211, 7,106,181, 26,173, 91,183, 70,122,122, 58, 20, 10,197, 21,123,116,243,
-242,242,202, 1,120,236,219,183, 15, 37, 37, 37, 13,219,219,180,105,131,178,178, 50,152, 76,166, 50, 71,211,154,159,159, 95, 6,
-160,197,233,211,167,145,153,153,137, 97,195,134, 97,231,206,157, 8, 12, 12,132,213,106,133,197, 98, 41,107, 70, 22, 88, 89,150,
-189,217,242, 14, 4,128,163,102, 80,144, 72, 36,244, 38, 79,175,205,209,132,205,102,163, 77,153, 43,169, 84,138,155,253,230,141,
-162, 24,113,113,113, 13,205,130, 0,192,113, 92,159,217,179,103, 63,222,212, 67,145,147,208, 56, 74,231,148,131, 78, 8, 33, 30,
- 0,182, 0,224,235, 34,109, 60,128,205,132,144, 97,141, 59,190,223, 75,131,197,178,108,195,103,149, 74,133, 94,189,122, 53, 24,
- 44,189, 94, 15,142,227, 68,183,112,119, 77,248, 3, 23,189, 2,234, 22,123,110, 28,158,187,198, 92, 13, 11,154,208,213, 71,142,
-159, 83,126,129,196, 84, 6,106,172,188, 73, 13,101, 1,145,170,160, 85, 73, 90,221,228, 66, 59,157,149,149, 5, 87, 87, 87, 72,
-165, 82,200,100, 50,248,251,251,227,196,137, 19,232,212,169, 19,172, 86,107, 67, 69,249,235,175,191, 66, 16,132, 99, 14, 92,196,
-236, 67, 90,201,138,121, 11,163,212,200,219, 4, 87,141, 12,131,250,116, 0, 84,221,192,114, 50,172,122,109,164,155,231, 67, 46,
-239, 56,227, 73, 80,171,213,200,203,203,195,103,159,125,166, 55, 24, 12, 47, 54, 71, 35, 41, 41,233,132,213,106, 29,245,197, 23,
- 95,212,100,101,101, 65, 46,151,227,226,197,139,245,230,106, 76,115,251,119,217,108,182, 41, 31,124,240, 65,245,238,221,187,161,
- 86,171,161,209,104,110, 59,114, 53, 99,198, 12,117,199,142, 29,145,145,145, 1, 23, 23, 23,184,187,187,163,127,255,254, 88,183,
-110,157, 92,173, 86,111,123,248,225,135,239, 89,167, 87,155,205,150,152,158,158, 78, 93, 92, 92,208,185,115,103,244,232,209, 3,
- 33, 33, 33, 0,128,250, 14,208,237,218,181, 3, 0, 92,186,116, 9,148,210, 83,246,232, 30, 59,118,108,119, 90, 90,154,213,203,
-203, 11, 61,123,246, 68, 64, 64, 0, 66, 67, 67,225,235,235,139,255,253,239,127,230,203,151, 47,239,119, 52,173,135, 15, 31,222,
-245,203, 47,191, 8, 94, 94, 94, 8, 12, 12,132, 76, 38, 67,143, 30, 61,224,229,229,133,184,184, 56,115, 86, 86,214,254,102,100,
- 65,238,153, 51,103,216,166,118, 42, 20, 10, 13, 0, 71, 35, 15,249, 39, 79,158,100,194,194,194,254, 52,154, 55, 36, 36,100,143,
- 66,161,112, 1,112,197,209,132, 18, 66,108, 60,207, 67, 46,151, 95, 99,174,120,158,135, 76, 38,131, 68, 34,177,119, 20,229,158,
-136,136, 8,236,222,189, 27,114,185, 28, 74,165, 18, 79, 60,241, 4, 12, 6,195,147, 0,176,116,233,210,134,155,109,100,100, 36,
- 0, 64,175,215, 59,203, 0,143,185, 0,126, 5,240, 27,128,215,156,208, 92,181, 64,109,243, 96, 39,212, 54, 11,246,175,123,173,
-239,147,229,238, 4, 55,119, 72,165, 82,188,249,230,155,224, 56, 14, 45, 91,182,196,194,133, 11,177,120,241, 98, 68, 70, 70, 98,
-249,242,229,112,115,115, 19,155, 8,239,110, 57,185,198,131, 60, 80, 6,235,122, 76, 9,190, 75,158,122,172,247,132,174,173,100,
- 56,157,242, 43,118,157, 44,184, 88, 82,114, 21,182,194, 95, 96, 43, 78,197,172,167, 2,208,173,173, 14,221,218,234, 48,235,169,
- 0,216,138,126, 5, 45,207, 0,149,235, 80, 92, 69,154,108, 94, 40, 43, 43, 91, 19, 21, 21,117,213,205,205,173,161, 82,204,205,
-205, 69,247,238,221,175,169, 36, 89,150,197,235,175,191, 94, 82, 84, 84,180,201,110,147,162, 96,159, 91,246,218,211, 45,164, 50,
- 13, 80,246, 35,180, 90, 53, 54,197,174, 0,140,249, 0,195, 99,228,144,135, 89,175, 22, 46,255, 36,132,116,116,182,147,144,157,
-157,141,200,200, 72,189, 94,175,191,173,142,238, 73, 73, 73, 39, 44, 22,203,168,184,184,184,154,189,123,247,226,237,183,223,190,
- 45,115,213,200,184,141,222,188,121,115,117,118,118,246,109, 25, 44,142,227, 94, 17, 4, 65,179,122,245,106,219,208,161, 67,173,
- 47,191,252,178,117,242,228,201,214, 49, 99,198, 88,135, 12, 25, 98,157, 50,101,138,213, 96, 48,200,212,106,245,219,247,234, 92,
-152,205,230,216,216,216, 88, 3,195, 48, 80,171,213,224,121, 30, 30, 30, 30, 13, 70,184,190,159,143,217,108,198,250,245,235,107,
-140, 70,227,251,246,232,150,148,148,108,158, 59,119,110,214,193,131, 7, 45, 21, 21, 21, 0,128,130,130, 2, 68, 71, 71,155, 55,
-108,216,144, 95, 94, 94,254,161,163,105,173,168,168,216, 50,127,254,252,203,123,247,238,181,176, 44,139,242,242,114,184,186,186,
- 34, 58, 58,218, 28, 27, 27,155, 95, 89, 89,233,176,102,255,254,253, 51,114,115,115, 53, 70,163,145,222,224,252, 17,133, 66, 17,
- 4,224,168, 35,154, 33, 33, 33, 25,217,217,217,218,183,222,122,235,167,161, 67,135,174,210,106,181,151,180, 90,237,165,161, 67,
-135,174,222,176, 97,195, 15,114,185, 60, 8,192,145,102, 68, 87,109,245,117,134, 92, 46,135, 76, 38,107,120, 64,147,201,100,224,
- 56,206, 46,131,149,156,156, 60,142, 82,218, 83, 16, 4,161,103,207,158, 80, 42,149, 24, 51,102, 12,164, 82, 41, 0, 96,193,130,
- 5,160,148,130, 82,218, 96,176,170,170,170,156,194, 96, 81, 74,127,162,148,134, 82, 74,253, 41,165,206, 56, 72,102,107, 35,115,
- 21, 78, 41, 61, 7, 32,188,145,201,218,238, 12, 6,139,227, 56,116,237,218, 21,179,102,205,194,206,157, 59,145,149,149, 5, 65,
- 16, 96,181, 90,193, 48, 12, 36, 18,137,104,176, 68, 28,166,161,137,176,241,107, 75, 87,213, 51,221,188, 36, 56,125,250, 60,190,
- 61, 85,182,149, 97,216,157, 41,153,198,175,194,253,126,135,121,251,120,248,143,221,130,143, 95,173,237,130, 96, 43,250, 21,230,
- 47,158, 1, 81, 62,132,244, 74, 37,244,230,242,253, 55, 41,200,167,116, 58,221,151,159,124,242,201,196, 73,147, 38,241, 54,155,
- 13, 10,133, 2,179,103,207, 6,165,180,193, 92, 77,157, 58,181,186,168,168,104, 29,165, 52,195, 78,247,171,104,229,193,207,159,
-240,226, 34, 57,114, 98, 1, 70,138, 18,244, 70,175, 1,207,163, 40,235, 4, 80,125, 30, 32, 82,196, 46,123,193,125,212,228, 21,
-239, 1, 24,234, 44, 39, 32, 53, 53, 21, 75,150, 44,185,109,115,213,216, 16, 5, 7, 7,143,218,185,115,231,255, 12, 6,195,203,
-119, 80,115,244,178,101,203,118,180,104,209, 66,213, 92, 29,111,111,239, 23, 74, 74, 74,166,218,241,213,123,214,212,113,234,212,
-169,211,125,251,246,221,184,122,245,234, 23,103,206,156, 41, 87, 40, 20,208,106,181, 72, 75, 75, 67,155, 54,181, 93,143,106,106,
-106,240,234,171,175,214, 8,130,176, 53, 49, 49, 49,209,206, 74,220, 70, 8,121,126,202,148, 41,147, 58,117,234, 20, 65, 41,213,
-153,205,230,178,203,151, 47,239,175,172,172,108,214, 60, 88,117,154,207, 77,157, 58,117, 66,199,142, 29, 71, 91, 44, 22,157, 32,
- 8,101, 57, 57, 57,123, 42, 43, 43, 55, 55, 71,243,167,159,126, 42,217,180,105,211,111,249,249,249, 93, 61, 61, 61, 43,221,221,
-221, 77,122,189,158,213,104, 52, 26,158,231,123, 3, 72, 4,112,193, 17,205,196,196,196,162,184,184,184,203,122,189,190, 83,108,
-108,236, 49, 87, 87,215, 35, 86,171,149,240, 60,239,166, 82,169, 6, 2,248, 9,192,165,230, 24,172,250, 7, 51,169, 84,218, 16,
- 21,175,255, 12,192,230,128,214,138,101,203,150, 73,228,114, 57, 76, 38, 19,244,122, 61, 74, 75,107, 91,175,150, 46, 93,138, 87,
- 95,125, 21, 0,176,100,201, 18, 68, 70, 70,162,166,166, 70, 38,222, 62,236,162, 12,192, 41, 0,227,234,251, 92, 53,234,248,190,
- 21, 64,133,179, 24, 44,142,227, 48,105,210, 36, 12, 31, 62,252, 79,211, 52,136,157,220,239,250, 57,184,198,131, 60, 48,145,185,
- 27,205,131,181, 96,104,219,255,243,113,225, 94,201,175, 20,118,242,125,179,230, 71, 70,130,190,250, 72,219,157,163, 59, 86, 63,
-210,173,165, 13,160, 2,136,182,246,102, 67,171,242, 65, 84, 45, 81,110,115,193,166,195,133,133,148, 97, 66,150,236,186, 88,122,
- 19, 51,196,185,186,186,174,236,216,177,227,152,232,232,104,151, 46, 93,186, 64,169, 84,130, 82,138,179,103,207, 98,234,212,169,
-229,197,197,197,155, 74, 75, 75,223,160, 55,155,164,171, 17, 30,174,220,155, 27, 34,135,253,103,204,164,215,165,184, 48, 7,144,
-184, 0, 15, 13,193, 21, 50, 24, 45, 37,103, 0,211,149,218,109,156, 11,134, 77, 88, 90,190,255,112,210,191, 40,165,241,247, 58,
-243, 3, 3, 3,245,114,185,252,142,153,171,187, 77,112,112,112, 95,158,231,119, 24,141, 70,165, 74,165,122, 32,231,193,170, 59,
- 47,156, 76, 38,139,146, 74,165, 47, 60,243,204, 51,138, 46, 93,186,192,215,215, 23, 69, 69, 69, 72, 75, 75, 67,108,108,172,193,
-102,179,125, 92, 86, 86,182,240,220,185,115,230, 7, 49, 15, 46, 94,188,232,213,190,125,251, 96,150,101,219,163,118,162,200, 43,
- 0, 14, 54,199, 8,213,147,158,158,238,237,235,235, 27, 44,149, 74,253,234, 52,243, 1,124,215, 28,205,128,128,128, 51, 11, 22,
- 44,104, 49, 96,192,128,106,150,101,169, 84, 42,165, 12,195, 64, 42,149, 82,137, 68, 66, 9, 33,244,211, 79, 63,213,174, 90,181,
-170,192,158,121,176,130,130,130,182,141, 24, 49, 98,164, 92, 46,199, 87, 95,125, 37,120,122,122, 74, 92, 93, 93,241,241,199, 31,
- 55, 85,143,129, 82,170, 20,111,141,247,253,181,174,255,238,187,239,144,147,147,115,205,156, 87,141,141, 85,253,103, 66, 8,194,
-194,194,132,147, 39, 79,138,243, 96,137, 52,223, 96,221,136,101, 67,252,180, 21,160,159,247,106, 69,255, 17,228, 43,131,135,171,
- 28, 12, 39, 67,165,129,224, 92,190, 1,199, 82, 43,115,173, 54,242,228,219, 7, 51,206,217, 25,117, 10,105,217,178,229, 92,155,
-205,214,141, 97, 24, 37,165,180,138, 97,152, 51, 5, 5, 5,209,148,210,243,142, 28,132,171,134, 61,235,166,146,184, 72,121,158,
- 10,130, 21, 0, 11, 48, 4, 32, 12, 0,166,238,149, 5, 8,131,154, 26,179, 84,176,146,157, 69, 37, 37,211,238,117,230, 15, 24,
- 48, 96, 87, 85, 85,213,125, 55,147,187, 76, 38, 91,200,178,236,227, 15,250, 50, 49,161,161,161, 1, 60,207,207,165,148, 6, 26,
- 12, 6, 79,133, 66, 81, 68, 8, 73,169,174,174, 94,153,156,156,124, 82,172, 62,238, 29,119,122, 38,247,192,192, 64,119, 66,200,
-106, 74,169,146, 97,152, 87,108, 54,219,175, 62, 62, 62,216,177, 99,199, 13, 35, 88,162,193,122,176, 12,214,196,137, 19,177,235,
-183,223, 48,210,175,233,129,235, 95,127,253, 53,250,245,235, 39, 26, 44,145, 59,111,176,234, 76, 17,153, 59,168,237,147, 18, 66,
-158, 32, 12,237, 78, 0,222, 74,145,206, 16,250,157, 84,102,254, 96,201,174,252,154,235,190,239, 79, 41,253,229,142, 38, 88,212,
- 20, 53,239,129, 38, 33,132,177,103,233, 25, 49, 63, 31, 12,205,192,192,192,237,213,213,213, 17,105,105,105, 77,105, 92, 99,176,
-196,252,188, 63, 53,251,245,235,119,126,213,170, 85,173, 59,118,236,200, 16, 66,192,178, 44, 8, 33, 96, 24, 6, 44,203, 54,188,
- 2,192,145, 35, 71,132, 55,222,120, 35,235,167,159,126,234, 37,230,231,221,209,124,208,112,104, 45,194,186, 38,187, 47,235,254,
- 68, 68,254, 54,220,206,186,126, 34,247, 31,201,201,201,227,188,189,189,227,221,221,221,219, 27,141, 70,105, 77, 77,141,180,241,
-195,168, 66,161, 40, 17,115,233,254, 71, 16,132, 65,115,230,204, 57, 98, 48, 24,124,111,245, 93,133, 66,145, 87, 93, 93, 61, 68,
-204, 53,145,187, 98,176, 68, 68, 68, 68,254, 46,228,231,231,135,137,185,240, 96, 83,215,124,220, 77,204, 9,145,187,129, 56, 44,
- 66, 68, 68, 68, 68, 68, 68, 68, 68, 52, 88, 34, 34, 34, 34, 34, 34, 34, 34,162,193, 18, 17, 17, 17, 17, 17, 17, 17, 17, 13,150,
-136,136,136,136,136,136,136,136, 72,243,249,127, 79, 26,247,226, 57,216,252,127, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130,
+137, 80, 78, 71,
+ 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 2, 88, 0, 0, 2, 0, 8, 6, 0, 0, 0, 94,187, 18, 70, 0, 0, 0,
+ 4,115, 66, 73, 84, 8, 8, 8, 8,124, 8,100,136, 0, 0, 0, 9,112, 72, 89,115, 0, 0, 13,215, 0, 0, 13,215, 1, 66, 40,
+155,120, 0, 0, 0, 25,116, 69, 88,116, 83,111,102,116,119, 97,114,101, 0,119,119,119, 46,105,110,107,115, 99, 97,112,101, 46,
+111,114,103,155,238, 60, 26, 0, 0, 32, 0, 73, 68, 65, 84,120,156,236,157,119,120, 20,213,254,198,223, 51,101,251,166,147, 30,
+ 58, 4,129,208, 3, 74, 2,130,116, 17, 69,184,162,128,160,226,245, 94, 44,168, 88,126,130, 5, 21, 5,162, 94, 21, 69, 17,229,
+ 90, 16, 68,175,168, 32,241, 42, 77, 1, 41, 82, 69, 18,138, 92, 74,164,133,146, 72,250,246,153,243,251, 99,119,134,205,102, 91,
+ 96,163,128,231,243, 60,243,236, 78,123,231,156,169,239,124, 79, 25, 66, 41, 69, 67, 65, 8,233, 64, 41, 45, 96,154, 76,147,105,
+ 50, 77,166,201, 52,153, 38,211,252, 43,193,213,119, 5, 66, 72,196, 29, 25, 33,132,122,134, 62,151,186,102,164,180,188, 53,149,
+ 33,130,154,125, 60,154,207, 69, 80,179, 33,211,217,231, 82,213, 84,242, 27, 73, 93,239,125, 24,169,253,233,149,206,136,157,247,
+ 13,173,121,177, 90,254, 52, 35,117,142,250, 57,238,207, 69, 80,179, 33,211,217,231, 82,211,244, 61,127, 34,161,235,239,156,188,
+216,253,233, 39,157, 23,125,222,255, 81,154, 23,170, 21, 70, 58, 35,189, 79, 35,254,108,186,148, 17,234,179,112, 67, 24, 12, 0,
+160,148, 18, 47,125,114,169,106, 42, 16, 66,168,162, 31, 9, 34,169,229, 97,109,164, 53,125,246,103,164,120,142, 82, 74, 8, 33,
+235, 0,244,137,144,230, 90,143,230, 69, 31,119,159,188, 70, 68,183, 33,205, 21, 16,185,243,190,161, 53,189,167, 93,204,185,234,
+171, 25,137,243,222,223,113,143,164,102,164,174, 37,159,245, 35,114, 45, 53,196, 57,239,231,252,185,104, 93, 95,205, 72, 92, 75,
+190,154,145, 56,239,255, 8, 77,101,250,197, 92, 75,254, 52, 35,113,222, 7, 58,246, 23,171,123,185, 80,175, 8, 86, 67,238, 24,
+207, 1,232, 27,105,205, 72,167,185, 33, 76,102,164,163, 56, 13,169,137,200, 30,163,231, 60,154,207, 69, 80,179,111,164,142,145,
+239,185, 19,137,183, 46,111,205, 72,157,155,126,210,121,209,199,201,159,230,197,166, 55, 64, 58, 47, 10,127,154, 23,123,222,255,
+ 81,154,136,236, 49,138,200,181,228,163, 25,177,107,201, 55,191, 17,140, 8,246, 5, 34,119, 45,249, 73,231, 69, 31, 39,127,154,
+ 23,155,222, 0,233,188, 40,252,105, 70, 48, 34, 26,113,221,203,129,122, 69,176, 26,138,134, 48, 66,128,251,162,139,164,118, 67,
+ 68,113, 26, 42,210, 22,169, 40,142, 31,221,117, 17,148,139, 88,180, 73,193,147,190,136,188,209,250,209,126,142, 16,242,108,164,
+117, 35, 9,187,150,216,181,132, 75,236, 90,242,119,222, 92,236,181,212, 80, 47,207,222,154,145, 50, 66,126,242,126, 81,215,146,
+239,186,145,184,150, 66,104, 94, 84,132, 57, 80,254, 47, 70,247,114,161,222,117,176, 26,138, 72,148,247, 6,208,139,104, 84, 44,
+210, 52, 80, 58,251, 94, 14,121, 71, 3,164,147, 16,242, 92, 3,229,253,114,217,167,236, 90, 98,215, 82, 68,136,228,181,228,115,
+ 78, 70, 36,173,145, 62,207,253,105, 70, 98, 27,222, 26,145, 58, 71, 27, 58,239,145,188,150, 26,226,216, 95, 46,212, 59,130,213,
+ 80,111,199,151,131,102, 67,104, 55, 80,222,215,161, 1,222, 14, 26,160, 94,215, 58, 68, 62, 42,240, 28, 34, 88,228,168,228, 57,
+146,105,109,200, 98,194,134, 56, 55, 27,242,124,143,100, 61,143, 6,202,251, 58, 92, 30,199,125, 29, 34,156,206, 72, 93, 75,126,
+142,249, 58, 92,100, 90,253,237,191, 72, 23, 97, 71,242,220,108, 72,205, 72,104, 55, 68, 58, 3,232,174,195, 95, 32,114,165, 64,
+104, 3,118,211,192, 96, 48, 24, 12, 6,131,241, 87, 36, 96, 4,171,107,215,174,249,122,189,190, 85,160,249, 53, 53, 53,197,187,
+118,237,186,174, 97,146,197, 96, 48,174, 36, 8, 33, 28,206, 87, 73,144, 1, 80,202,222,238, 24, 12,198, 21, 76, 64,131,165,209,
+104, 90,172, 95,191, 62, 83,150,101,184, 92, 46, 72,146, 4, 73,146,224,114,185, 96,183,219,241,183,191,253,173,222,197,139,157,
+ 59,119, 94,207,113, 92,179,250,172, 35, 73,210,209, 95,126,249,165, 87,160,249,201,201,201,155, 0,180, 32,228,124,212,145, 16,
+ 2,101,220,123, 58,199,169, 85,206, 78, 30, 59,118,172,107, 48, 77, 66, 72, 11,111, 61, 95, 45, 63,186, 65, 53,175,186,234,170,
+237,130, 32,100,248, 91, 63,144,182, 44,203,135, 11, 10, 10,114, 2,105, 50, 34, 75,231,206,157,215,243, 60, 95,239,243,115,215,
+174, 93, 1,207,207, 14, 29, 58,252,204,113, 92, 26, 80,247, 24, 7, 56,159,120, 73,146,126,253,229,151, 95,122, 5, 50, 32,169,
+169,169,155, 40,165, 45,194, 60, 47, 21,142, 31, 59,118, 44, 59, 80, 58,149,235, 40, 88, 58,253,104, 7,213,244,210,224,210,211,
+211,243, 18, 19, 19,239,173,169,169,177, 2,160, 28,199,209,118,237,218,213,210,151, 36,233,236,190,125,251, 58,132,210, 99, 48,
+ 24,140,203,129,128, 38, 73,150,101,206,102,179,225,192,129, 3,240,119,159,231, 56, 78,170,239,198, 40,165,153,107, 22, 47, 76,
+ 50, 36, 38, 67,114,216,161,107,148,164,106,151,237, 45,128,228,112, 64,118, 58,208, 40,251, 26, 37, 13,232,219,183, 47, 31, 66,
+ 54, 99,242,228,201, 73, 81, 81, 81,176, 90,173,176, 90,173,176,217,108,176,217,108,176,219,237,176,219,237,112, 56, 28,112, 56,
+ 28,112, 58,157,176,217,108, 40, 40, 40, 8,154,118, 66, 72,198,131, 15, 62,168,106,218,108, 54, 88,173, 86, 85,203,102,179,169,
+154,118,187, 29, 54,155, 13,123,246,236, 9,170, 41, 8, 66,198,206,157, 59,147, 52, 26, 13, 40,165,144,101, 25,148,210, 90,131,
+207,190, 66,110,110,174, 35,212, 62,101, 68,148,204,165, 47,205, 72,210, 37, 52,130,236,116, 34,161,115, 55, 0,238, 99,113, 98,
+205,119,144,157, 78,200, 78, 39,154,222, 56, 82,157,222,167, 79,159, 80,231,103,211, 47,166, 77,141,213, 68, 69,193,101,181,162,
+249,176, 17,234,140,194,119, 94, 7,117, 58, 65, 93, 14,116,124,228,105, 0, 64, 73, 73,137,165,109,219,182, 39,225,174,167, 16,
+ 40,194,147,113,228,200,145, 36, 37, 13,222, 16, 66,192,113, 92,173, 97,195,134, 13, 24, 55,110, 92,168,188,103, 60,245,212, 83,
+ 73,202, 53,226,125,174, 59,157, 78,245,250,113,185, 92,112, 58,157,176,219,237,248,249,231,159, 67,105,130, 16,194,165,166,166,
+190,212,187,119,239, 9,139, 22, 45, 50,125,245,213, 87,166,230,205,155, 67,163,209,128,231,121,240, 60, 15,142,227,192,243, 60,
+134, 15, 31,254,151,169,155,193, 96, 48,174,124, 2, 26, 44,135,195,113,100,208,160, 65, 20, 0,236,118,123,186, 86,171,213,120,
+207,151,101, 57, 45, 55, 55,247, 87,223,245, 66, 21, 29, 26, 18,147,241, 65,243,120, 0,192,168, 67,165, 0,220, 15,133, 37,215,
+118, 81,151, 25,243, 91,185,123, 89,131, 1, 28,199, 5,189,233, 18, 66, 96, 54,155, 49,104,208, 32,104,181, 90,116,235,214, 13,
+ 26,141, 6,162, 40, 6, 28,194,193,100, 50,225,249,231,159, 7, 0, 8,130, 0,147, 94,135,251,122, 95, 3, 61,161,248,224,151,
+253,176, 73, 50, 4, 65,128, 32, 8, 16, 69,177, 78, 68,202, 31, 26,141, 6, 5, 5, 5,224,121, 30,130, 32,212,250,229,121, 30,
+203,151, 47,199, 45,183,220, 2,158,231, 97, 52, 26,129,191, 80,101,192, 75, 5, 93, 66, 35,124,209,199, 29,136,188,253, 88,165,
+ 58,253,187,209, 55,170,255,199,159,168, 6, 33, 4, 26,141, 38,188,227, 30, 21,133,255,222,114, 61, 0, 96,228,129, 51,234, 57,
+179,251,245, 25, 16,181, 90, 8,162, 6, 29, 38, 63,133,146,146, 18,203,200,145, 35, 55,232,245,250, 21,161, 52, 41,165, 56,122,
+244,168,170, 37,138, 98,157,243,158,227, 56,124,248,225,135,248,237,183,223,194,202,187,197, 98,193,204,153, 51,213,188,249,211,
+245,254, 31, 42,239,132, 16, 46, 37, 37,229,197,222,189,123,143, 91,180,104, 81, 28, 33, 4,115,231,206,133, 32, 8,184,225,134,
+ 27,144,144,144,128,149, 43, 87, 66,163,209,224,241,199, 31, 15, 43,141, 12, 6,131,113,185, 16,208, 96,237,218,181,235,122,229,
+255, 53,215, 92,179,111,195,134, 13, 87,121,133,242,225,114,185, 52, 46,151, 43, 83, 41, 54,116,185, 92,176,217,108, 24, 51,102,
+ 76,208, 55,122,201, 97,175, 53, 30,232, 38, 29,206,131, 75,193,110,183, 99,212,168, 81, 0, 16,210, 92,133,249, 96,128,205,102,
+131, 32, 8,104,217, 36, 17, 79,143,202, 70, 46, 79, 97, 41, 5, 80, 82,141, 59, 83, 5,236,202,200,196,156,163,165,248,173,162,
+ 10,130, 16, 94,105,169, 44,203,181, 12,149,239,255,121,243,230, 97,244,232,209,224,121,190, 78, 17, 18,227,143, 65,118, 58,107,
+141,251, 59, 6,245, 61, 54, 46,171, 21, 0,192,123, 25,114, 81, 20,161,213,235,193,139, 34, 4,173, 6, 37, 37, 37,150,129, 3,
+ 7,254,100, 48, 24, 22,164,164,164,156, 56,126,252,120, 64, 61, 66, 8, 40,165, 16, 69, 17,130, 32, 4, 60,231, 63,252,240, 67,
+ 44, 92,184, 16, 61,122,244, 8,235,156,183,219,237,208,104, 52,152, 49, 99, 70,157,249,239,188,243, 78, 29,131, 21, 66,143, 0,
+224,146,147,147,239, 91,188,120,113,180,178,253,132,132, 4,136,162,136,172,172, 44, 68, 69, 69, 97,195,134, 13,144, 36, 41,108,
+179,202, 96, 48,254,178,136, 0, 58, 3, 72, 4, 32, 1,168, 4, 16,235, 53,255,172,231, 55,209,107,124,155, 31,157,238,158,101,
+148,249,202,184, 29,128,214,207,244, 82, 0, 6,207, 96, 3,176, 9, 64,150,215,118,148,245,188,211,177, 13,240, 24, 44,226,238,
+ 85,117, 45,128,190,254, 58,191, 83,138, 11,247,239,223,239,183,184,208,155, 80,205, 59,117,141,146,212,200,213,231, 45, 19,212,
+233,163,139,202,212, 27,236,127,123,180,134,206,108, 66,246,115,175, 4,221,150, 39,237,176,219,237, 56,115,230, 76,157, 55,239,
+ 11, 53, 88, 0,224,116, 58, 97, 48,232,240,195,187,215,162,248,176, 11, 51,242,143, 97,217,214, 35, 16, 4, 1,195,174,106,141,
+191,185,128,188,120, 61,254,233,146,224,144,105, 88, 15, 48, 74,105, 29,115,229,109,178, 8, 33,234, 52,246,176,249,115, 72,232,
+220, 77,141, 92, 45,106, 28,165, 78, 87,162, 86, 0,176,172, 75, 51,232,163,204,200,122,104, 74, 72, 61, 66, 8,154, 15, 27,161,
+ 70,174,190,233,214, 2,130, 70, 3, 81,167,197,223,126, 57, 6,192, 93, 44,216,175, 99,187,117,101,188,246,163, 59,238,184,227,
+240,154, 53,107,140,225,164, 85,163,209,212, 50,108,254,204,149, 32, 8,112,250,152,198, 64,233,180,217,108, 1,141,147,114, 93,
+213, 39,130, 5, 0, 53, 53, 53,246,101,203,150, 97,206,156, 57, 72, 72, 72,192,160, 65,131,144,146,146,130, 37, 75,150,128, 82,
+138, 7, 30,120, 0, 6,131, 1, 6,131,129,157,243, 12,198, 95,156, 16, 94,228,218,169, 83,167,102,231,229,229,205,236,217,179,
+231,167,155, 54,109, 90, 76, 8,201, 87,102, 82, 74,135,121, 52,242,189,198,187,163,182,201, 18, 1, 36, 18, 66,242,149,229,189,
+199,189,166, 15, 0,160, 85,198,167, 78,157,154,149,151,151, 55,115,202,148, 41, 79,206,154, 53, 75, 51,117,234,212,142,121,121,
+121, 51,149,237,248, 75, 7,112, 62,130, 21,180, 23, 96,135,195,113,100,192,128, 1, 97,181,248,177, 88, 44,167,130,205, 87, 12,
+154,191, 74,222,202, 52, 93,148, 25,134,168, 40,144,224,165,131, 42, 78,167, 19,130, 32,128,227, 56,172, 90,181, 10, 6,131, 1,
+ 67,135, 14,189,224, 34, 66,197,180,105,181, 26, 8,177, 28,238,120,109, 59,206,158,171, 81,139, 4, 87, 23, 29,195, 86,131, 1,
+ 79,183,235, 8,115, 85, 17, 42,108,246,144,154, 64,224, 8,214,232,209,163, 97,181, 90,193,113,156, 58,141,227,184, 6,237,203,
+139, 17,156, 64,141, 16, 8, 33,208, 71, 71, 65,111, 54,131, 23, 66, 85,191,114, 67, 41, 61,111,132,180, 90,136, 58, 45, 4,141,
+187,196, 93,137, 92,149,241,218,143, 78,156, 56,241, 19, 0,125,184, 6, 75,137, 96, 5, 51, 87,130, 32,192,225,112,132,101, 94,
+108, 54, 27, 52,154,243, 53, 1,142, 30, 61,170,254,247,103,176, 66,228,153, 18, 66,100, 66,136,220,162, 69, 11,117,157,228,228,
+100,196,198,198, 66,150,101,200,178, 12,189, 94, 15,131,193, 80,107,187, 12, 6,227, 47, 75, 48, 47,162,203,203,203,155,233,109,
+ 96,128,218,134,198,219, 56,249,152, 40,133,107,167, 78,157,154, 21, 44, 1,222,102, 75,153,166,108,151, 16,146, 63,107,214,172,
+ 97, 33,210,161, 68,210,206, 23, 17, 6,235, 21,214,187,184, 48, 18,248, 43, 98,241,126,128, 25, 98,162,161, 53,153,224,169,126,
+ 21,212,216, 17, 66,224,112, 56,212, 58, 39,247,222,123,111,192,183,122,239,186, 41,161,176,219,237,224, 57, 30,208, 53,135,140,
+ 45,234,195, 74, 29, 52, 26, 20, 53,233, 4,114,234, 4, 4, 33,188,250,254, 74, 4, 75, 49, 81, 15, 60,240, 0,230,207,159,175,
+ 86, 76, 6, 0,158,231,209,166, 77, 27, 28, 58,116, 40, 44, 77, 70,100,161, 52,112, 52, 82,153,174,143,142,130,206,108, 6, 31,
+ 70,164, 81,153,175,214, 97,210,235,192,107, 52, 16, 52,238, 98,193,155,110,186,105, 93, 89, 89,217, 71,237,219,183,255, 31,220,
+221, 24,132,116, 66,202,245,227,239, 60,255,232,163,143,106,153,171,250, 68,176,148,235,200, 27,127,197,133, 35, 71,142, 12, 55,
+130, 69, 9, 33, 84, 20, 69, 12, 24, 48, 0, 29, 59,118,196,178,101,203, 32,203, 50,238,191,255,126, 24, 12, 6,204,158, 61, 27,
+ 46,151, 11,121,121,121, 44,130,197, 96, 48,130,121, 17,203,148, 41, 83,158, 36,132,228,123, 34, 73,133,158,229,253, 25, 41,127,
+116, 71,109,147,118,214,223, 66,222,145, 44,111,147,229,253, 95, 97,234,212,169, 89,126,210,161, 70,204, 84,131,229,229, 26, 27,
+148,178,189, 5,106,133,118,165, 88,144, 16,130,239,114,174,130,214,108,130,222,108, 70,175,165, 63, 2,112,191, 53,227,197, 87,
+ 67,106, 58,157, 78,213, 56,149,150,150,134, 44, 34, 12, 7,167,211, 9, 94, 35,226, 39,179, 8, 42,242,181, 30, 88,162, 40,130,
+ 19, 68, 20, 37,102,130, 8, 43, 33, 72,174,176, 30, 14, 74, 36,195,187,245,212, 29,119,220, 1,142,227, 84,147,213,165, 75, 23,
+239, 85,216, 19,231, 15,230,228,247, 43,240,237,109,238,107,213,187, 88, 48,191, 71, 43,232,162,204,208,153, 76,232,179,124,147,
+ 90,156,139,217,239,133,212,220,255,254,219, 40,124, 99, 22, 4, 81,196,136,157, 69, 0,220,145,171,220,171, 90,255,100, 55, 69,
+127,116,244,232,209,159, 0,112,183,221,118, 91,108,215,174, 93,195, 10,139, 17, 66,106, 85, 60, 23, 4,193,175,185, 18, 4, 1,
+ 46,151, 43,172,188, 59, 28,142,176, 34, 73, 74, 20, 43, 20,148, 82,218,182,109, 91,240, 60,143,152,152, 24, 68, 69, 69,169, 45,
+104,149,200,149, 82,127, 51,220,235,146,193, 96, 92,217, 4,241, 34,182, 89,179,102, 21,206,154, 53, 75,141, 36,121,150, 15,101,
+174,110,128,219, 76, 37, 42,230, 12,238,186, 84,254,234,103, 41,105,168,163,233,107,184, 0,119,100,203, 79, 58,212, 98, 73,191,
+181,179, 59,119,238,252,173,209,104,108, 30, 34,209, 42,245,233,116, 84,114,156,239,121, 64, 49, 87,132, 16,232,205,102,104,163,
+204,208,153,205,181,230,133,130, 16,162, 22, 17,242, 60,175, 62,116, 22, 44, 88, 0,179,217,140,187,238,186,235,130, 42,185,187,
+ 13, 22,143,175, 53, 7, 0,141, 80,231,161,197,139, 34,142,198, 52, 6, 39,138, 16,164,240, 34, 4,229,229,229,224,121, 30,207,
+ 62,251, 44,242,242,242,212,102,244,222, 77,235,149,101, 25,127, 14,222,149,220,107, 69, 85,163,162,212,243,211,123,122,168, 58,
+137,132, 16, 64,114,185, 91, 11,234,220,245, 32,149,200,149,221, 20,253,209, 85, 87, 93,165, 68,174, 56,163,209, 24,178,213,172,
+162,233, 93,223,208,215, 92, 41, 81, 82,229,191,211,233, 12,235,156, 87, 12,214,252,249,243,131,190,140, 40,219, 13,247, 60,229,
+ 56, 14,235,215,175,199,206,157, 59,113,239,189,247,194, 96, 48,224,205, 55,223,132,203,229,194,244,233,211, 97, 48, 24,160,213,
+106, 67, 11, 49, 24,140,191, 50,113,138,193,241,152, 36, 0,181,235, 92,121,155,160, 64, 69,133,158,136,211,250, 16,219,250, 6,
+110, 99,230, 23, 37,146,230, 61,205,119,187,128,199, 96,249,126,203, 75,171,213, 54,223,184,113, 99,166, 44,203,144, 36, 9,193,
+126,237,118, 59,110,189,245,214,176, 59, 29,149,157,110,131,197,249,180,148,211, 69, 71, 65,107, 62,255, 0,243,122,136,133,188,
+139, 43, 17, 44,111,131,245,236,179,207, 66, 16, 4,204,159, 63, 31, 0,240,216, 99,143,213, 59,130, 69,101, 96,147,180, 22,105,
+115, 59,129,126,164,199,233,245,251, 32,138, 34, 82,122, 12,132,156,253, 55,148,106,163, 97,242,212,171, 10,167,216,177,180,180,
+ 20,191,253,246, 27, 8, 33,120,228,145, 71,130,154,171, 85,171, 86,177, 58, 88,127, 2,138,193,226,120,119, 32,201,223,249,233,
+ 61, 61,156,243,147,186, 92, 16,117,186, 90,173, 5,203,202,202, 62, 58,122,244,232, 22, 0,100,220,184,113,177, 70,163, 17,239,
+191,255,126, 13, 0,205,210,165, 75, 13,161, 52,189,235,241,249, 70,174,124, 13,150, 36,133, 46,194, 86, 94, 42,194,137,246,214,
+199, 96, 41,231, 55, 33, 4,146, 36,169,145, 43,167,211,169,142,235,116,186,144, 58, 12, 6,227,202, 39,196,119, 69,207,250,212,
+115, 34, 62,145,166,179,158,117,107, 25, 43,239,226, 64,175,255,222, 81, 17, 69,215,238, 83,116,232, 59, 93,249, 45,157, 53,107,
+214, 15, 74,228,202,107,122,173,116, 0, 1, 34, 88, 28,199,193,102,179, 97,239,222,189,193,247,198,249,229,195,238,116, 52,161,
+219,213, 24,243, 91, 57, 8, 33, 88,217,187, 61,244,102, 51, 52,102, 19,114,190, 88,171,222,176,139,242, 30,135,198,100, 70, 66,
+175,129, 33,245,148, 27,183,175,193, 42, 43, 43,131, 40,138,120,241,197, 23,193,113, 28, 94,122,233, 37,164,167,167,163,184,184,
+ 24,125,250,244, 9,169,233,116, 58,193,201, 28,244,119,198, 67,255,207, 40,112,247,182, 66,214,141,255, 68,121,101, 51,236,182,
+155,208,182,250, 0,226,190,127, 14, 14,217, 21, 86, 55, 13,132, 16,184, 92, 46,252,240,195, 15, 16, 69, 17, 46,151, 75,125,248,
+ 80, 74,213, 94,242,149, 78, 29, 95,122,233,165,176,246, 39, 35,178, 52,190,225,102,220,113,178, 6, 0,240,109,206, 85,208,153,
+ 76,208, 70,153,209,235,171,245,234,249,121,120,230,163,208,152,204,136,237,222, 59, 44,205,118,247, 63,134,182,247, 61,138,146,
+146, 18,203,128, 46, 89,235,203,121,221,135, 29, 58,116, 80,235, 92, 25,141, 70,232,245,122,226, 25, 15,233,212,189, 77,121, 40,
+115,165,252, 15, 7,167,211, 89,167, 21,174, 63,194, 45, 34, 84,224, 56, 14,119,221,117, 23, 82, 83, 83, 49,103,206,156, 90,145,
+171, 39,159,124, 18, 78,167, 19,179,103,207, 14, 91,143,193, 96,252, 37, 9, 88,164,231,135,238, 94,102, 41,212,122,129,230,215,
+103,123,126,241,123,231,181,217,108, 69,253,251,247,247,187,130,205,102, 75,215,233,116,181,238,174, 74,167,163,190, 69,133,132,
+144, 14,148,210, 2,239,101,149, 74,196, 74,107, 44,157,217, 12,173, 79,177,139,214, 28, 5,209,100, 6,231,231, 38,238, 79,211,
+ 95, 4, 75, 41, 58, 41, 47, 47,135, 40,138,152, 51,103, 14,162,163,163, 97,179,217,252, 85,176,247,171,201,243, 60,106,126,171,
+193,145,103,118, 67,103, 58,136, 54, 3,163, 16, 37, 30, 66,235, 31,151,194,229,178, 3, 94, 69,134,225,104,182,105,211, 6,207,
+ 62,251,108,157,238, 25, 2,209,173, 91,183,144,154, 23, 11,211,244,175, 73, 8,129, 46,202, 12,125, 84, 84,192,243, 83,240,211,
+119,147,175,166, 50, 95,137, 92, 85,105,140, 31, 30, 61,114,100, 11, 0,110,220,184,113, 49, 70,163, 17,243,230,205,171, 1,192,
+189,240,194, 11,198,166, 77,155,214, 57, 33,252,165,147,227, 56, 44, 88,176,160, 78,157,171, 64, 6, 43,156,116,186, 92,174, 58,
+ 6,107,212,168, 81,117, 58, 26, 13, 20,193,242,151, 78,165,174, 90,163, 70,141, 96, 52, 26,213,207,110,233,245,122,232,245,122,
+181,119,248, 64, 69,173, 87,194,185,196, 52,153, 38,211,252,195,185,104,115, 20, 9,252, 26,172,159,127,254,121, 72,160, 21,114,
+115,115, 15,108,220,184,177,181,247,183, 9, 93, 46,151,198,102,179,101, 14, 31, 62, 60,228,171,178, 44,203,208,233,116,160,148,
+162,243,211,121,238, 87,120,238,124,145, 32,165, 20,177,185, 3, 64,120, 30,146, 36,195,233,116,134,108, 69,104,181, 90,107, 85,
+ 64,247,215,124,189,170,170, 42,104, 63, 63,190,154, 22,139,165, 86,189, 46, 34, 81, 28, 94,189,164,110,107, 66,207,118,194, 69,
+175,215,215, 42, 54, 9,149,148,176,133, 25, 17, 65,233,192,147, 82,138,172, 7,167,184, 35, 69, 60, 87,107,126, 76,247,222, 32,
+130, 8,217, 93,111, 41, 84,195, 16,114,246,236, 89,203, 77, 55,221,180,142, 82,250,193,240,225,195,127,133,187,130, 37, 53,155,
+205, 58, 81, 20,101, 0,191, 3,160,231,206,157,139, 57,113,226,132,108,181, 90,155,132, 74,231,250,245,235,113,240,224, 65,116,
+237,218, 85,141,124, 42,131, 82,124,127, 33, 17, 44,223,174, 24,124,199,195,237,166,193, 27,142,227, 16, 19, 19, 3,173, 86,139,
+ 23, 95,124, 17, 26,141, 6, 6,131,187, 20,116,246,236,217,234, 62,103, 48, 24,140, 43,137,122,127,176, 89,150,101, 62, 80,241,
+ 97,168,162, 66, 73,146,142, 95,125,245,213,245,221,222,233, 96,243, 41,165,199,127,252,241, 71,141,119,132,193,251, 55,192,180,
+144,154,219,182,109, 83,155, 83, 5,211,244,250, 31, 84,211, 55,239,225,212, 95,113,185, 92, 39, 66, 46,196,136, 24, 46,151,235,
+120,143, 30, 61,252,207,124,214,127,145,173, 36, 73, 65,143,187,211,233,252, 95,102,102,230, 73,179,217,252, 77,114,114,114,233,
+198,141, 27, 19,186,119,239,158,224,189, 76,247,238,221, 83,125, 86,179, 35, 72,247, 36,132,144,227,119,220,113,135, 38,196,249,
+232,251, 63,112,215,240, 30,205,194,194, 66,141,247, 58,161,126, 41,165, 65, 53, 61,252,118,253,245,215,115,254,174, 33, 95, 36,
+ 73,242,219,108,154,193, 96, 48, 46, 71,234,109,176,172, 86,235,177,254,253,251,251,109,247, 93, 83, 83,115,212,223,116,133,194,
+194,194,236,250,110, 47, 20,199,143, 31,207,185, 28, 52, 27, 34,239,140,200,210, 16,199,168,176,176, 48,128, 99,187,112,142, 30,
+ 61, 26,241,243,179, 33, 52, 1, 96,207,158, 61, 61, 27, 66,151,193, 96, 48, 46,117,234,109,176,194,237,142,129,193, 96, 48, 24,
+ 12, 6,227,175, 74,232,190, 5, 24, 12, 6,131,193, 96, 48, 24,245,130, 0,232,224,111, 70,125, 90, 7, 16, 66,252,106, 4, 35,
+148, 62,211,100,154, 76,147,105, 50, 77,166,201, 52,175, 60,205, 80,218,151,112,235,196,122, 65, 66,245, 68,125, 81,226,151, 73,
+211, 80,166,201, 52,153, 38,211,100,154, 76,147,105,254,185,154, 87, 26,172,136,144,193, 96, 48, 24, 12, 6, 35,194,212,187,146,
+ 59, 35, 50, 16, 66,120, 74,105,216, 61,224,135, 65, 44,128, 64, 31,116,179, 3, 40,187, 64, 93, 45, 0,209, 51, 0,238, 79, 12,
+ 56, 61,154, 12, 6,227, 10, 34, 59, 59,123, 2,165,116, 6,220, 95,129,122,113,251,246,237,111,253,217,105, 98, 48, 46, 87, 2,
+ 26,172, 86,173, 90,109,231, 56, 46,195,223, 7,136, 3,245,139, 35, 73,210,241,125,251,246,133,213,212,157, 16, 34,164,166,166,
+142, 50,153, 76,215,241, 60,159,235, 89,127, 99,117,117,245, 15,197,197,197,159, 83, 74,253,118, 5, 17,138, 22, 45, 90, 68, 91,
+173,214, 91, 9, 33, 99, 1,128, 82,250,137, 94,175,255,207,225,195,135, 43, 46, 68,143, 16,210, 42, 37, 37,229, 19, 81, 20,249,
+ 99,199,142, 93, 7, 0,141, 27, 55,254,193,110,183, 75,103,206,156, 25, 75, 41, 61, 88, 79, 61, 78,163,209,228,245,238,221,187,
+ 23, 33,228, 99, 74,233, 59, 23,146, 46, 63,232, 56,142,251,205,223, 12, 89,150,155, 94,128,158, 6, 64,204,236,217,179,227, 23,
+ 46, 92,216,165,184,184,184, 35, 0,164,166,166,238, 30, 55,110,220,207, 15, 63,252,240,239, 0,202, 1, 56,130,170, 48, 46,121,
+ 50, 51, 51,183,115, 28,151, 81,159,190,228,136,251, 19, 85,199,247,236,217,227,247,122,207,204,204,220,206,243,124, 70, 48, 13,
+127,255,101, 89, 62, 92, 88, 88,232,183,203,136, 54,109,218,108,230,121,190,121,168,180,249, 75,103,160, 46, 56,218,180,105,179,
+157,231,249,140,250,106,202,178,124,184,160,160, 32, 80, 58, 47, 72,243,143, 78, 39, 0,244,237,219, 87, 87, 93, 93,253,137,217,
+108,238, 84, 93, 93, 61,129, 82, 58,109,237,218,181,201, 28,199, 97,192,128, 1,211,178,179,179,143,232,116,186,185, 86,171,245,
+103,179,217, 60,102,237,218,181,182, 64, 90, 12, 6,163, 54, 1, 13, 22,199,113, 25, 59,119,238, 76, 50,153, 76, 0,160,126, 47,
+ 79,233, 37, 90, 25, 40,165,160,148,194,229,114,161,111,223,190, 97,109, 52, 35, 35,163, 67,155, 54,109,150, 60,240,192, 3, 77,
+110,188,241, 70,109,114,114, 50, 8, 33, 56,117,234, 84,102,126,126,254,237,115,230,204,121, 54, 35, 35,227,150,227,199,143,135,
+ 91, 81,142, 75, 77, 77,237, 15,224,206, 14, 29, 58,140,124,236,177,199, 52,185,185,185,144, 36, 9,223,127,255,125,239,215, 95,
+127,125, 78, 90, 90,218,151, 0, 62, 42, 46, 46, 94, 67, 41,149,195,212,237,210,188,121,243,255,172, 95,191,190,121, 81, 81,145,
+ 52, 98,196,136,143, 1, 96,227,198,141,157, 40,165, 36, 55, 55,247, 91, 66,200,173,148,210,159,195,202,184,155,225,147, 38, 77,
+186,229,254,251,239, 79,156, 48, 97,194, 56, 0,239,120,182,165,124,228,178,190,149,226,212,200, 21,165, 84, 19,100,185,100,132,
+ 31,201, 50, 29, 62,124, 56, 54, 55, 55,247,254, 51,103,206, 76,246,214, 61,125,250, 52,118,237,218,229,120,233,165,151, 94,223,
+184,113,227,219, 45, 90,180, 40, 3, 80, 93,207, 52, 51, 46, 33,120,158, 79,223,190,125,123,146,209,104, 84, 63,228,238,125,157,
+ 43,215,184,247,169, 73, 41,197,181,215, 94, 27, 76, 51, 99,199,142, 29, 73, 6,131, 65,189,119, 4,211,243,210, 12,104,216, 57,
+142,107,186,109,219,182, 36,163,209, 8, 74,105, 72, 61, 66, 8, 40,165, 65,191, 61,170,164, 83,175,215,135,165,169,144,155,155,
+ 27, 48,250, 92, 95, 77, 37,157, 61,123,246, 12,120,237,243, 60,159,177,115,231,206, 36,229, 43, 24,245, 72,103,208, 23,160,234,
+234,234, 79, 62,255,252,243, 17,201,201,201, 24, 62,124,248,202,246,237,219,107,141, 70, 35,190,253,246, 91,100,100,100, 52,138,
+142,142,254,239,172, 89,179,240,234,171,175, 54, 89,181,106,213, 98, 0, 35,130,233, 49, 24,140,243, 4, 51, 88, 48,153, 76,248,
+244,211, 79,253,126,126,198,247,127,211,166, 77,195,218, 96, 74, 74, 74,118,179,102,205,214, 45, 93,186,212,144,148,148,164, 78,
+119, 56, 28,136,142,142,198, 93,119,221,165, 29, 48, 96, 64,235,219,111,191,253,167,148,148,148, 62,167, 78,157,218, 30, 76, 47,
+ 53, 53,117,100, 86, 86,214, 91,147, 39, 79, 78,190,233,166,155, 16, 23, 23, 87,107,254,176, 97,195, 48,116,232, 80,205,225,195,
+135, 71,127,254,249,231,163, 63,254,248,227, 83,169,169,169,147,138,139,139,191, 12,166,107, 50,153, 6,116,238,220,249,253, 53,
+107,214,100,196,198,198, 34, 45, 45,141,123,230,153,103, 58,180,108,217,210,144,154,154,202,157, 60,121, 18, 95,126,249,101,203,
+113,227,198, 45,211,235,245, 19,172, 86,235,154, 80,121, 39,132,104,227,227,227, 31,255,231, 63,255,153, 80, 89, 89,233,218,185,
+115,231, 65,101,186, 78,167,155,118,205, 53,215,116, 37,132,124, 70, 41,253, 40,148,150, 23,106,228,138, 82, 90,129,243, 69,121,
+ 10, 78,101,126,152,145, 44,237,206,157, 59,227,114,115,115,191,178,217,108, 93,255,254,247,191,159,120,229,149, 87,180,209,209,
+209,209, 0, 72, 89, 89,217,185,231,159,127, 94,122,243,205, 55,159,104,223,190,125,255,141, 27, 55,142,232,218,181, 43, 43, 50,
+188,204, 49, 26,141, 88,190,124,185,223,207, 76,249,187,230, 99, 99, 99, 67,126,141,192, 96, 48, 96,213,170, 85,234,122,222,159,
+150,242,247, 63, 54, 54, 22,148,210,160,162,122,189, 30, 27, 54,108, 80, 63, 3, 20,232,190,164,252, 26,141, 70, 16, 66,130,214,
+ 53,213,235,245, 88,183,110, 93, 72, 45,229,215,108, 54, 3, 64,224,143,136,122,165, 51, 84,158,149,255, 38,147, 41,228,254,212,
+233,116,170,166,183, 70,160,113,207,203,113, 80, 81,131,193,208, 41, 57, 57, 25, 91,182,108,193,115,207, 61,167,205,202,202,194,
+129, 3, 7,192,113, 28, 38, 76,152,128,246,237,219,227,212,169, 83,104,223,190, 61, 54,108,216,208, 37,104, 2, 25, 12, 70, 45,
+ 66,214,193, 10,116,131,245,253, 15,212,253, 12,134,111, 11,131,102,205,154,233,204,102,243, 23,203,151, 47, 55, 36, 36,156,255,
+ 90,136,221,110, 71,101,101, 37,170,170,170, 80, 89, 89, 9,147,201,132,185,115,231, 26,198,142, 29,251, 69,179,102,205, 50,139,
+138,138,108,129, 52, 9, 33,175,239,218,181, 43,217,229,114, 65,171,245, 95, 5,137,227, 56,180,106,213, 10,147, 38, 77, 66,175,
+ 94,189, 82, 70,143, 30,253, 58, 0,213, 96,249,107, 9,145,154,154,250,246,198,141, 27, 51,180, 90, 45, 14, 28, 56,128,227,199,
+143, 99,226,196,137, 77,101, 89,198,177, 99,199,112,224,192, 1,156, 60,121, 18,239,189,247, 94,198,216,177, 99,231, 2,104, 29,
+ 44,239, 30,238,121,228,145, 71, 90,199,197,197,113,175,188,242, 74,121, 85, 85,213,123,158,233, 83,103,207,158, 61,166, 79,159,
+ 62,137,127,255,251,223, 41, 33,228, 83, 74,105, 29,195,226,163,233, 47,114, 37, 81, 74,247,249,172,214,214, 39,178,149, 12,247,
+183,240,202,253,104, 18, 0,209, 67,134, 12,121,212,102,179,117,253,241,199, 31, 15,246,234,213,171, 41,128, 98, 74,233, 89, 0,
+136,139,139, 51,189,241,198, 27,201,195,134, 13,251,117,192,128, 1, 93,135, 12, 25,242,232,217,179,103,103, 0, 40,129,231,243,
+ 46, 13,209,178,132,105, 54,156,166,167, 40, 9,130, 32,224,250,235,175, 7, 33,196,239,247, 54, 55,111,222,140,254,253,251, 67,
+ 20, 69,220,125,247,221, 97,107, 14, 30, 60, 24, 46,151,171,142,158,175, 1, 33,158,111,116, 6,203, 59,165,180,214, 55, 66,253,
+153, 11,239,193, 87,207,159,166, 44,203,126,181, 2,153, 44, 66, 72,208,123,157,119,222,195, 53,151,161,210,233,173, 41,138, 34,
+114,114,114,176,115,231,206,160,102, 43, 84, 58, 1,160,186,186,250,206,225,195,135,175,156, 56,113,162, 30, 0, 74, 74, 74,106,
+125,136,126,255,254,253,176,217,108, 88,180,104, 17,108, 54,219,189,117, 18,233, 71, 51, 18, 48,205,191,166,102, 8, 68, 0,157,
+ 1, 36, 2,144, 0, 84,194,253, 28,180,195,253, 44, 44, 5, 96,240, 12, 54, 0, 85, 0, 26,121,214, 45,129,251,249,230,253,153,
+178,179,168,253, 81,232,238, 30,109,229,147, 93,137, 94,243,148,109,248,142,251,254,214,210,230, 0,128, 16, 66, 61, 67, 31,101,
+174, 18,182, 14,199, 92, 41, 55,199, 80, 80, 74, 31,152, 58,117,106,178,183,185,178,217,108,168,168,168, 64,101,101,165,250,123,
+224,192, 1,104,181, 90,140, 26, 53, 42,153, 82,250, 64, 8, 89, 13,207,243,216,185,115, 39,150, 46, 93,138, 35, 71,142,212, 89,
+224,208,161, 67,120,227,141, 55,240,234,171,175,162,162,162, 2,112,215, 47,242, 75,231,206,157,159, 27, 59,118,236, 79,125,251,
+246,213, 9,130,128, 93,187,118, 33, 51, 51, 19,155, 54,109,194,209,163, 71,113,238,220, 57,236,223,191, 31, 29, 58,116,192,193,
+131, 7, 81, 81, 81,129,172,172, 44, 93,183,110,221,126,108,214,172,217,115,129,116, 9, 33,154,244,244,244, 39,255,249,207,127,
+234,138,139,139,229, 5, 11, 22,108,164,148,110, 34,132, 76,124,234,169,167,198, 15, 30, 60, 56,113,223,190,125, 21,219,182,109,
+219,238,207, 92,249, 65,199,113,220, 81,142,227,126,163,148, 86, 80, 74, 45,112, 87, 62, 87,241, 20,221,218, 44, 22, 75,121,105,
+105,105, 9,199,113,191,113, 28,119, 0,128, 46,144,230,184,113,227, 90,150,148,148,220,255,240,195, 15, 31,233,213,171, 87, 83,
+ 74,233,126, 74,105, 41,220, 39,172,205,229,114,149,150,149,149,253,154,155,155,155, 58,102,204,152,131, 37, 37, 37,247,143, 27,
+ 55,174,101, 16, 77,198,165, 15,149, 36, 9,162, 40, 98,237,218,181,216,176, 97, 3, 54,108,216,128,141, 27, 55, 98,211,166, 77,
+216,188,121, 51, 54,111,222, 12, 65, 16,176,105,211, 38,108,218,180, 9,147, 38, 77, 10,121,205, 75,146, 4, 65, 16,176,110,221,
+ 58,108,221,186, 85, 29,182,109,219,134,173, 91,183,194, 96, 48,132, 52, 67,222,120,234, 41, 5, 52, 83,111,191,253,182,106, 14,
+149,123, 19,199,113, 65,163, 98,190,198,197,215,176, 52,109,214,172,206,188, 80,233, 4,160,106,254,251,223,255,198,137, 19, 39,
+ 48,103,206, 28, 28, 58,116, 8, 47,191,252, 50, 10, 11, 11, 49,125,250,116,108,219,182, 13, 83,167, 78,197,143, 63,254,168,124,
+252, 61,104,245, 0,197, 8,230,228,228,192,225,112,168,233,217,191,127, 63,102,206,156,137, 93,187,118, 97,218,180,105,216,188,
+121, 51, 30,127,252,113,240,124,208, 32, 27,178,179,179, 39, 16, 66, 62,111,211,166,141,174, 95,191,126, 16, 4, 1, 51,103,206,
+148,167, 77,155,118,230,169,167,158, 58,147,159,159, 79, 91,182,108, 9,187,221,142,168,168, 40, 80, 74, 63,202,206,206, 14,117,
+ 63,102, 48, 46, 24,127, 94,196,139,107,167, 78,157,218,143, 16,146,159,147,147, 51, 14, 64, 44, 33, 36, 31,128,214,243,155, 48,
+117,234,212, 30,132,144,252,169, 83,167,102, 3,104, 68, 8,201,247,140, 95, 7, 32, 65, 25,247, 44,239,109,160, 68, 0,137, 94,
+211, 19,125,150,213,250, 27,247,253,245,213, 86, 35, 88,148, 82,226,185,192,213,155,145,114,211, 13,215, 96,133,186,225,154,205,
+230,161, 67,134, 12, 81,205,141,205,102,171, 21,185, 82,126, 43, 43, 43,241,235,175,191,162, 67,135, 14, 26,179,217, 60, 20,192,
+191, 66, 29, 24, 65, 16,144,150,150,134,146,146, 18, 20, 20, 20,160,105,211,166,112, 58,157, 88,177, 98, 5,202,202,202,160,209,
+104,160,209,104, 96,183, 7,247, 46,109,219,182,189,126,225,194,133,217, 31,127,252,241, 57, 65, 16,176,127,255,126,124,242,201,
+ 39,160,148,162, 81,163, 70,168,169,169,193,153, 51,103,240,250,235,175,195,225,112,192,108, 54, 35, 61, 61, 93,255,192, 3, 15,
+244,122,254,249,231, 69, 0,207, 5,144,190,122,228,200,145,209, 81, 81, 81,120,232,161,135,100,135,195,241, 42, 33,228,154,145,
+ 35, 71, 62, 57,105,210,164,248,162,162, 34,251, 61,247,220,179,221,225,112,188, 14, 0,132, 16,145, 82,234, 12,160, 5, 32,120,
+228,202,229,114, 41,251,244, 72,101,101, 37,146,146,146,154, 80, 74, 53, 33,142,145,102,211,166, 77, 57, 0,248, 23, 94,120, 65,
+ 79, 41, 61, 13, 47,211,230,112, 56, 20, 77, 87,121,121,249,153,199, 31,127,220,181,120,241, 98,222,179,206, 94, 0,214, 96,226,
+140, 75, 19,197,184,136,162,136,235,175,191,190,150,161, 88,191,126, 61,134, 12, 25,162, 94,239, 26,141, 70, 93, 46,148,166,119,
+ 84, 76,137, 60, 41,186, 63,252,240, 67,157,200, 75,152, 47,105,106,132,197,159,241,241, 53, 93,202,139, 98, 48,252, 69,155,188,
+ 35,243,254, 34, 67,225,164, 83, 20, 69, 76,154, 52, 9,130, 32,224,241,199, 31,135, 40,138,232,220,185, 51, 4, 65, 64,207,158,
+ 61, 33, 8, 2,174,187,238,186,176, 95, 80,149,116,110,222,188, 25,221,186,117, 83,211,211,185,115,103,116,239,222, 29,130, 32,
+160,119,239,222, 16, 4, 1,131, 6, 13, 10,169,169, 84,104, 55,155,205,248,245,215, 95,193,243, 60, 8, 33,165, 59,118,236, 72,
+ 6,128,231,158,123,174,196,106,181, 38, 88,173, 86,244,239,223, 31, 57, 57, 57,137,139, 23, 47,126, 6, 0,107, 89,200,104, 48,
+252,121, 17, 15,186,188,188,188,153,148,210, 97,129,214, 85,230, 19, 66,242,103,205,154, 53,204,163, 87,103,220,179,184,247,199,
+229,175,157, 58,117,106,150,215,248, 89,101, 61,239,237, 5,219,182,207,242,103, 1, 47,131,229,201, 80, 95,175,113,191, 6, 43,
+144,209, 10,231, 6, 97,181, 90, 59, 43,209, 43,171,213, 90,203, 80, 85, 85, 85,213, 50, 90,118,187, 29, 45, 90,180,128,213,106,
+237, 28, 82,216, 11, 66, 8, 82, 83, 83,225,112, 56, 48,127,254,124,213, 88, 41, 56, 28,193, 27,189,237,217,179,231,200, 79, 63,
+253,212,181, 91,183,110,113, 95,125,245,213,217, 1, 3, 6, 36, 14, 30, 60, 24,122,189, 30, 86,171, 21, 46,151, 11, 87, 95,125,
+ 53,218,182,109,139, 51,103,206,224,219,111,191, 45,201,204,204,108,180,101,203, 22,249,212,169, 83,191, 5,145,238,223,191,127,
+127, 16, 66,240,237,183,223,254, 78, 41,221, 97, 48, 24,190,156, 57,115,102,172,205,102,147,199,143, 31,127,236,247,223,127,127,
+ 28,128, 83,167,211,253,107,224,192,129, 87,243, 60,255,153, 36, 73,245,190,153,217,108,182, 90,251,182,178,178, 18, 70,163, 49,
+156, 46, 33,196,178,178,178,142, 0, 96, 52, 26,227, 1,168,249, 47, 19, 36, 0, 0, 32, 0, 73, 68, 65, 84, 45, 36, 45, 22,139,
+122,140, 60,199,199, 26, 31, 31,111, 2, 0,207, 58,190,117,191, 24,151, 17,202,195,123,237,218,181,181,174,111, 37, 2,229,123,
+205,107,181, 90, 44, 95,190, 60, 44, 77,111, 51, 21, 70,113, 94,208,104,147, 98,176, 4, 65,192,123,239,185, 75,216, 31,122,232,
+ 33,117,125,223,109,132,194, 59, 82, 47, 8, 2,218, 62, 43, 3,112,224,248,107,122,136,162,251,148,246, 77, 51,128,176,163, 98,
+115,230,204,193,176, 97,195,144,159,159, 31,244,119,232,208,161, 97,165, 83, 16, 4,232,116,238, 96,177,146,158, 93,187,118,249,
+213,157, 55,111, 94,200, 58,109,178, 44,227,155,111,190, 1,199,113,181, 34, 94,207, 60,243,204, 63,163,163,163,205,235,214,173,
+195,233,211,167, 81, 93, 93,141,170,170, 42,196,197,197,197, 14, 24, 48, 96,215,169, 83,167,138,246,236,217,195, 42,188, 51, 34,
+142,175, 23,241,194, 50,101,202,148, 39, 9, 33,249, 83,166, 76,121,114,214,172, 89,133,158,229,243,125,214,207,247,179,110,173,
+249, 30, 19,164, 20, 15,118, 71,109,243,166, 20, 29,222, 16,100, 93,187,143,161,242, 45, 34,220, 6,132,136, 96,249,214, 77, 8,
+246,223, 19,226, 14,150, 47,200,178, 44, 16, 66,234, 24, 0,127, 17, 44,167,211,137,210,210, 82,200,178, 28,209,190,186, 66, 25,
+172,130,130,130,187, 38, 76,152,112, 50, 38, 38,166, 83,105,105,105,177, 78,167,235,189,126,253,250,198, 78,167, 19,209,209,209,
+136,142,142,198,127,255,251, 95,196,196,196,224,225,135, 31, 62,106,177, 88, 54,153, 76,166,100,139,197,242,203,169, 83,167,158,
+ 14,164, 43,138, 98,255,222,189,123, 99,199,142, 29, 40, 43, 43,251,158, 16,210,233,239,127,255,251,160,198,141, 27,147, 25, 51,
+102, 88, 15, 30, 60,248, 22,128,179, 38,147,233,223, 11, 23, 46,236,211,181,107, 87,243,248,241,227, 65, 8,121,159, 82, 26,118,
+100,168,166,166,166,150,177, 82,246,105, 84, 84, 84, 88,125,110,121,246, 55, 37,132,168, 13, 26,189,141,149,151, 1,166, 60,207,
+203, 0,104,164,143, 17,227,143, 69, 49, 4,162, 40,226,198, 27,111,172, 83,185, 93,163,209, 96,229,202,149,184,249,230,155,213,
+ 23,150,110,221,186,133,212, 85, 12,193, 77, 55,221, 4,192,109, 8, 86,174, 92, 25,208, 96,133, 42,210, 2,106, 71,155, 30,124,
+240, 65,136,162,136,183,222,122, 11,147, 39, 79, 6,207,243,120,237,181,215,192,113, 28,158,121,230,153,176,243,239, 93, 68,120,
+228, 37,247,111,198, 35, 21, 40,125, 39, 25, 0, 16, 21, 29,237,206,143, 28, 86,227,227, 90,121, 15, 21,185,242, 54, 86,161,138,
+ 8,189,163,128, 7, 14, 28, 80,255,247,236,217,179, 86,228, 74, 16,132,144,134,205,179,189,233,253,250,245,155,145,145,145,145,
+ 52,113,226, 68, 34, 8, 2,178,179,179, 27, 77,155, 54,173, 92, 20, 69,253, 99,143, 61,230,175, 42,133, 8,160, 83,187,118,237,
+ 76, 97,239, 12, 6,163, 30, 4,137, 96,217,102,205,154, 85, 56,107,214, 44,191, 17, 42,175,245,135, 5, 51, 89, 94, 81,168,238,
+112, 27,161, 68,197,180,193, 93, 21,102, 91, 24,235,106, 21,115,229, 27,229,242,198, 55,130,245,188,247,204,112, 13, 86, 56,245,
+ 39, 0,192,104, 52,238, 46, 41, 41,233,169,211,233, 80, 81, 81, 81,231,161,237,109, 10,120,158,199,153, 51,103, 96, 52, 26,119,
+135, 20,174, 7,161,138, 8, 61,102,230, 81,101,156, 16,210,125,212,168, 81,139, 63,251,236,179, 22,171, 87,175,198,150, 45, 91,
+208,168, 81, 35,204,156, 57,243,112, 81, 81,209, 24, 74,105,192,131,225, 77,203,150, 45,219,155,205,102,108,220,184, 17, 0,126,
+ 4,112,231,125,247,221, 71, 28, 14, 7,230,206,157, 91, 3, 96,117, 76, 76,204,151, 75,150, 44,233,212,169, 83, 39,221,234,213,
+171, 43,183,108,217,178, 54, 76,115, 37, 81, 74,253, 26,171,202,202, 74, 84, 87, 87,195,108, 54,135, 99,176, 92,209,209,209, 5,
+149,149,149,183, 90, 44,150, 10,157, 78, 23, 85, 81, 81, 97,243,142, 48, 86, 85, 85,161,186,186, 26,130, 32,136, 7, 14, 28, 56,
+ 9,160,101,116,116,116, 1,128, 11,234,183,140,241,231,195,113, 28, 85, 76,198,234,213,171,253, 94,235,162, 40, 98,197,138, 21,
+181,174,247,111,191,253, 54,160,166,119, 20, 71,105, 73, 24, 42,130,165,172, 26, 42,189,162, 40,130,231,121,188,243,206, 59,160,
+148,170,145, 43,142,227, 48,101,202, 20,232,116, 58,188,248,226,139,152, 50,101, 74, 88, 81, 44,239,168, 88,243, 39, 44,234,116,
+101, 93,135,221,238,142,210,115,156,183,201, 10, 43,210, 22,170,130,123,184,248, 70,218,116, 58, 93,192,202,237,190,171, 6,210,
+220,190,125,251, 7, 93,187,118, 61,152,152,152,184, 42, 39, 39, 71,183,125,251,118, 76,154, 52,137,216,108,182,232,213,171, 87,
+171,219,245,133, 82,138,234,234,106,125,216,137,103, 48,234,129, 63, 47,226, 33, 78, 49, 78, 30, 51, 20,174, 94,190,247,242,138,
+134,175, 41,242, 68,196,214,135,210,242,183,110, 32, 4,207,194,117,174, 34,223,155, 68, 40,163, 21,206,219,167,197, 98, 89,179,
+118,237,218,238, 55,223,124,179, 16,172,120,176,170,170, 10,201,201,201, 56,116,232,144,203, 98,177,132,236,254, 64,146,194,239,
+ 16, 61, 84, 4,203, 23, 74,233,182,172,172, 44,151,195,225, 64,235,214,173,145,158,158, 14,139,197,130, 55,222,120,195, 21,174,
+185, 34,132,104,178,179,179,121, 0, 40, 47, 47, 7,220,173, 29, 50, 51, 51, 51,177, 99,199, 14,156, 59,119,110, 25,128,254,207,
+ 63,255,124,151,107,174,185, 70,243,217,103,159,213,220,123,239,189,203,156, 78,231,140,112,244,101, 89,182,187, 92,174,230, 28,
+199, 57,202,202,202, 78,120, 27,171,228,228,228, 56,179,217,204,157, 57,115, 38,104,125, 46, 15,142,142, 29, 59,110, 61,126,252,
+ 56, 94,120,225,133,179, 51,103,206,204,172,172,172, 60, 87, 94, 94,238, 82,140, 85, 69, 69, 5, 44, 22, 11,151,152,152,168,155,
+ 55,111,158, 17, 0, 58,118,236,184, 21,172,195,209,203, 26,223, 6, 45,190,230, 42, 84,139,183, 64,154,130, 32, 96,248,240,225,
+117, 34, 98,202,176,100,201,146, 90,245,154, 66, 21,189, 41,154,111,191,253, 54, 30,122,232, 33,232,116, 58,204,158, 61,187, 86,
+ 29, 44,127,171, 6,211, 4,220,166,173,249, 19, 22,156,122, 51, 30,162, 40, 34,225,222,211,181,138, 8,253,228, 45, 44, 35, 56,
+115,230,204,136, 20, 17, 42, 8,194,249, 46,113,230,207,159,143, 81,163, 70,225,199, 31,127,188,224, 34,194,230,205,155, 47,124,
+227,141, 55,116,123,247,238, 69, 69, 69, 5,206,158, 61, 11,171,213,138, 99,199,142, 41,249,244,187, 94, 77, 77,141, 33,172, 4,
+ 51, 24,245, 32,196,249,122,214,167,254, 20,241, 46,174, 11,242,235,187, 60,188,166,121,235,158, 69,237,134, 98,222,211,125, 77,
+149,239, 54,188,151, 81,235,118, 5,125,133, 82, 34, 88,225, 26,172, 48,138, 8, 95,127,246,217,103,239,239,213,171, 87,124,116,
+116, 52, 78,158, 60,233, 55,130, 21, 29, 29, 13,135,195,129,181,107,215, 86,200,178,252,122, 80, 81,192,233,116, 58,145,148,148,
+132,146,146, 18,200, 1,194,248, 28,199,193, 96, 48,160,170,170, 10,240,105,109, 23, 10, 74, 41,156, 78, 39, 28, 14, 7, 28, 14,
+ 7,156,206,122,173, 14, 0, 6,165,195,214,234,234,106, 0,168, 78, 75, 75,107,169,215,235,149, 86,143, 7, 0,244, 27, 60,120,
+176, 88, 90, 90, 74,239,185,231,158,205,148,210, 73, 52,120,111,246,246,181,107,215, 54, 3, 0,131,193,112, 0, 0,142, 29, 59,
+230, 44, 43, 43, 67, 85, 85,149, 26, 33, 52, 24, 12, 24, 49, 98, 68, 10,165, 20,107,215,174,109,166,209,104, 40, 2,155, 33, 91,
+126,126,254,158,152,152,152,197,121,121,121, 99,110,184,225,134,194,142, 29, 59, 54,175,170,170, 58, 83, 83, 83, 99,177, 88, 44,
+ 84, 16, 4, 77, 66, 66,130,110,213,170, 85, 7, 55,111,222, 60, 48, 58, 58,122,113,126,126,254, 30,184, 67,171,140,203, 16,223,
+186, 77,254, 76,149,119, 69,242,112, 53, 1,183, 33, 88,177, 98, 69,208, 40, 78,184,154, 10,130, 32,224,209, 71, 31,197,155,111,
+190, 89, 39,130, 53, 99,134,251,157,228,169,167,158,170, 87,132, 72, 16, 4,156,122, 51, 30, 41, 15,254, 94,107, 26, 0, 16, 79,
+250,234, 83, 68,168,172, 63,125,250,116,136,162,168, 22,225, 13, 28, 56,176, 86,209, 96,184,198,202, 91,243,204,153, 51, 16, 4,
+ 1,241,241,241, 24, 51,102, 12, 6, 13, 26, 84, 71, 47, 92,221, 99,199,142,253,252,234,171,175, 54, 73, 79, 79,199,103,159,125,
+102, 55,153, 76,218,126,253,250,209,242,242,114, 2, 4,142, 96, 89, 44, 22, 22,193, 98,252,209,132, 21,208,136,160,238, 69,111,
+ 47,224, 29, 40, 18,221, 52, 16,159,175,109, 23, 21, 21,149,167,166,166,142, 29, 61,122,244, 87,239,188,243,142,161,101,203,150,
+216,191,127, 63,206,157, 59, 7,135,195, 1,141, 70,131,180,180, 52, 84, 85, 85,225,139, 47,190,168,169,169,169, 25, 91, 92, 92,
+ 92, 30, 76,147, 16,242,212,245,215, 95, 63,239,233,167,159,214,183,111,223, 30,231,206,157, 67, 85, 85,149,250,230, 69, 8, 65,
+116,116, 52,140, 70, 35, 10, 10, 10,176,121,243,102, 11, 33,228,169, 96,154,190,200,178,172, 26, 43,197,104,133,106,153,228,163,
+105, 50, 26,141, 0,220,117,164, 0,184,154, 52,105,146, 12, 64, 49, 88,191,181,104,209,226,233, 86,173, 90,145,133, 11, 23, 82,
+ 74,233,106,127,230,202, 71,243, 92,159, 62,125,202, 0, 36,219,237,118, 13, 0, 84, 84, 84, 56, 18, 18, 18,146,116, 58,157,172,
+211,233,100,189, 94, 47, 23, 23, 23,187, 92, 46,151, 6, 0,250,244,233, 99, 7,112, 26,158,254,170,252,104,202, 0, 42,231,206,
+157,251,220,157,119,222,217, 51, 55, 55, 55,235,158,123,238,217,123,239,189,247, 34, 61, 61, 61,174,170,170,202,122,224,192,129,
+178,119,222,121,199,186,117,235,214,129,162, 40,254, 54,119,238,220,231,224,238,143, 68, 14,160, 25, 17,152,102,195,105, 42,117,
+127,252, 25, 43,239,241, 48,186, 81,168,149, 78,197,180,221,122,235,173,106,235, 67,223,200, 85,125, 53, 1,168, 45, 8,255,239,
+255,254,175, 86,250,158,126, 58, 96, 21,200, 90, 55, 39,159,188, 67,201,187, 32, 8, 40,159,159, 94,203,252,133,107,170,252,105,
+ 10,130,128,105,211,166,133, 29,193,242,173,131, 21, 44,157,125,250,244, 65,117,117, 53, 68, 81,196,202,149, 43, 3, 70,176, 66,
+237, 79,131,193, 48,102,217,178,101,159,232,116,186,142,118,187,253,238,146,146,146, 5, 53, 53, 53, 77,202,202,220, 31,124, 8,
+116,159,179, 90,173,106,183, 44,151,227, 57,207, 52, 47, 77,205, 43,141,160,175,120, 46,151, 11,141, 27, 55,174,245,109, 43,165,
+ 50, 59,207,243,106,203,147,112, 90, 16, 42, 20, 23, 23,175, 76, 77, 77, 29, 57, 98,196,136, 69,119,222,121,103, 84,219,182,109,
+197,166, 77,155,194, 98,177,160,168,168, 8, 69, 69, 69,174,239,191,255,190,162,166,166,230,246,226,226,226,149,161,244, 78,156,
+ 56,241,113,114,114,242,138,113,227,198, 77,235,210,165,203,196,201,147, 39,243, 45, 90,180, 64,121,121, 57,226,226,226,144,152,
+152,136,162,162, 34,124,241,197, 23, 82, 89, 89,217, 60, 73,146,166,159, 62,125,250,108, 40, 93,159,253,192, 59,157, 78,140, 30,
+ 61, 26,178, 44, 99,246,236,217,112,185, 92,161,203, 68,207,227,112, 56, 28, 20, 0, 41, 41, 41, 1,128, 26,197,112,253,239,127,
+255, 3,128,163,205,154, 53, 51, 3,192,154, 53,107, 8,128, 77, 97,234, 82,120, 69,178,218,182,109, 91, 4,212,190, 41, 42,145,
+ 43,207,168, 29, 94,230, 42, 0,214, 49, 99,198,156,181,217,108,131, 31,121,228,145,105,243,231,207, 31, 51,127,254,252, 58, 11,
+ 69, 71, 71, 47,126,237,181,215,166,143, 25, 51,230, 44, 88,247, 12, 87, 4,190,209,170,250, 86, 1, 8,164,249,245,215, 95,251,
+141, 96,213, 55,114,165,116, 5,227,175, 69, 98,176,123, 80,168,151, 33, 37,157,190,186,245,185,175,249, 75,171, 32, 8,120,229,
+149, 87,212,200,149,119,229,243, 11,137, 96, 41,154,241,241,241, 0, 0,147,201, 4, 89,150, 49,116,232,208, 11,214,245,124, 91,
+112,164, 50,158,157,157, 61,253,211, 79, 63,157, 65, 41, 77, 0, 32,120,239,131,112,246, 35,131,193, 56, 79, 64,131, 37, 73,210,
+113,229,219,130,222, 6,203,251,215,247,191,203,229, 58, 30,206, 70,139,139,139, 87,180,104,209,162,197,252,249,243, 31, 50,153,
+ 76, 3,172, 86,107, 71, 0,208,235,245,187,171,171,171, 87,115, 28,247, 70,113,113,113,216, 31,103,246, 24,166, 7, 50, 50, 50,
+102,143, 27, 55,110, 70, 78, 78,206, 45,247,220,115, 15, 17, 4, 1,159,127,254, 57, 61,113,226,196, 18,142,227,158, 58,121,242,
+228,161,112, 53,189, 49, 26,141,191, 46, 89,178,164,229,215, 95,127, 13,167,211,137,121,243,230, 65,167,211,253, 26,238,250,148,
+210,179,130, 32, 44,202,205,205, 29,179,121,243,230,197,148,210, 2,157, 78,247,201,181,215, 94, 59,118,211,166, 77,255,161,148,
+238, 21, 4,225,147,156,156,156,177, 91,183,110,253,146, 82,250, 75, 61,146,167, 70,178, 92, 46,255, 37,138,254, 34, 87, 33,168,
+152, 48, 97,130, 99,194,132, 9,143,220,114,203, 45,243,119,236,216,113,181,210,125, 67,108,108,236,238,110,221,186,109, 89,178,
+100,201,126,184, 35, 87,204, 92, 93,230, 40, 21,210,227,226,226,192,113,156, 58, 40,189,121,215,215, 8, 41,154,148, 82,196,197,
+197,249,125, 49, 11,162, 25,212,213, 80, 74, 97, 54,155, 85,205, 48, 91, 47,135, 12, 67,153,205,230, 90,105, 12,131,128,215,146,
+146,119,223,116,134, 34, 88, 62, 20, 77,147,201, 4,135,195, 17,182, 38,194,104, 52,224,205,246,237,219, 63, 0,240, 65,235,214,
+173,255, 7,160, 21, 51, 85, 12,198,133, 19,208, 96,237,219,183,207,239, 87,221, 35,197,225,195,135, 43, 0, 76,247, 12, 17,225,
+248,241,227,135, 0,220,154,146,146,242,175, 77,155, 54, 61, 3, 0,178, 44,191, 16,234,123,134,161,248,229,151, 95,110, 22, 69,
+113,238, 71, 31,125,148, 67, 41, 69, 76, 76,204,166,131, 7, 15,222, 87, 31, 13,151,203, 53,145, 16, 50, 89,105, 21,104,179,217,
+ 38, 18, 66, 30,163,148, 86,123,205, 87,199,235, 9,133,187,178, 93,106,128,249,225, 68,174,124,177, 2,176, 47, 89,178,164, 10,
+192, 46,156,239,231,202,233, 25,108,240, 42, 22,100, 92,190,184, 92,174, 19,125,251,246, 21, 66,189, 64,249, 89, 47,224, 11,149,
+ 36, 73,199,123,247,238, 29,242,165,204, 95, 90,130, 36,245,183,156,156, 28, 46, 92, 45, 5,167,211,121, 38,208, 60, 89,150,143,
+247,236,217,211,111, 58,131, 17, 42,239, 61,123,246,172, 87, 26, 61,105, 9,152,247, 11,213, 12,177, 63, 3, 98,177, 88,206, 37,
+ 38, 38, 86, 89,173, 86,209,102,179,137,190, 17,123,131,193, 80,175, 82, 0, 6,227,175,200, 21,217,127,145,199, 80,221, 24, 41,
+ 61, 79,125,168,127, 68, 64,199,234, 51, 94, 29,108,188,158,156,187,136,117, 3, 33, 3,176,132, 92,138,113, 89, 83, 80, 80,112,
+117,164, 53,247,236,217, 19,241, 23,180,130,130,130,158,161,151,170, 31,133,133,133, 17, 79,231,229,162, 25,140, 19, 39, 78, 68,
+252,156, 96, 48,254,106,212, 63,246,207, 96, 48, 24, 12, 6,131,193, 8, 10, 1,208,193,223,140,250,180, 14, 32,132,248,213, 8,
+ 70, 40,125,166,201, 52,153, 38,211,100,154, 76,147,105, 94,121,154,161,180,175,148,214,137,164, 33, 43, 49, 94, 46, 77, 67,153,
+ 38,211,100,154, 76,147,105, 50, 77,166,249,231,106, 94,105,176, 34, 66, 6,131,193, 96, 48, 24,140, 8,195, 12, 22,131,193, 96,
+ 48, 24, 12, 70,132, 97, 6,139,193, 96, 48, 24, 12, 6, 35,194, 48,131,197, 96, 48, 24, 12, 6, 35,162, 16, 66, 72, 70, 70, 70,
+159,180,180,180,136,119,175,114,185,112, 69,246,131,197, 96, 48, 24, 12, 6,227,143,167, 73,147, 38,177,146, 36,221,153,150,150,
+118, 95,203,150, 45, 91, 2, 64,122,122,122, 1,165,244, 13,131,193,240,201,193,131, 7,237,127,118, 26,255, 40, 26,180, 21, 33,
+131,193, 96, 48, 24,140, 43,159,180,180,180, 46, 0,238, 51, 24, 12,183, 95,125,245,213,218,126,253,250, 33, 46, 46, 14, 46,151,
+ 11,197,197,197,248,254,251,239,177,107,215,174,223,157, 78,231, 92,167,211, 57,247,236,217,179,167,255,236, 52, 55, 52,170,193,
+ 34,132,172, 3, 0, 74,105,159, 63, 49, 61, 12, 6,131,193, 96, 48, 46, 35, 82, 83, 83, 95, 29, 50,100,200, 35,113,113,113,104,
+221,186, 53, 82, 82, 82, 96,179,217, 96,177, 88, 64, 41,133, 32, 8,160,148,162,178,178, 18,219,183,111,199,150, 45, 91, 92, 21,
+ 21, 21,139, 9, 33,111,156, 60,121,242,103,111,173, 43,201,139, 16, 74, 41, 8, 33, 20, 64, 95, 0,160,148,174,251,115,147,196,
+ 96, 48, 24, 12, 6,227,114, 33, 45, 45,237,244,154, 53,107,146, 36, 73, 66, 73, 73, 9,108, 54, 27,106,106,106, 84,131,197,243,
+ 60, 40,165,112,185, 92, 0, 0, 89,150,177,119,239, 94,108,222,188, 25,199,142, 29,123,173,184,184,248, 81, 0, 87,156, 23, 81,
+ 43,185, 83, 74,215, 93, 9, 25, 98, 48, 24, 12, 6,131,241,199, 98,179,217,176,112,225, 66,148,148,148,160,113,227,198, 72, 79,
+ 79, 71, 76, 76, 12,244,122, 61, 0,168,230, 10, 0, 56,142, 67, 86, 86, 22,198,142, 29, 11, 66,200, 88,111,157, 43,201,139,176,
+ 74,238, 12, 6,131,193, 96, 48, 46, 6,167,195,225, 64,118,118, 54,142, 28, 57,130, 29, 59,118,160,107,215,174,104,215,174, 29,
+ 74, 74, 74,112,242,228,201, 90, 11,111,221,186, 21, 59,119,238,196,181,215, 94,251, 39, 37,247,143, 65, 41, 34,124, 14, 64, 31,
+224,202, 40,247,100, 48, 24, 12, 6,131,241,199,144,158,158, 62, 62, 49, 49,241,157,113,227,198, 25, 58,119,238,140,227,199,143,
+227,196,137, 19, 56,119,238, 28,186,116,233,130,172,172, 44, 28, 58,116, 8, 43, 86,172,192,206,157, 59,161,211,233,144,145,145,
+ 1,243,226, 79,241, 77, 90,234,137,147, 39, 79,102, 0,184,226,188,136,119, 37,247, 62,192,149, 81,238,201, 96, 48, 24, 12, 6,
+227,143, 35, 45, 45, 45,129, 16,242, 84, 90, 90,218,253,183,223,126,187,216,170, 85, 43, 28, 63,126, 28, 37, 37, 37, 56,119,238,
+ 28,126,250,233, 39, 0, 64,122,122, 58,210,211,211, 81, 84, 84,132,130,130, 2,139,205,102,187,247,196,137, 19, 31, 43, 58, 87,
+146, 23, 97,221, 52, 48, 24, 12, 6,131,193,136, 8,105,105,105,141, 1, 60,223,170, 85,171,241,163, 70,141,226,210,210,210,112,
+226,196, 9,124,255,253,247,104,217,178, 37,206,156, 57,131,237,219,183, 75, 21, 21, 21,243, 36, 73,154,126,250,244,233,179,127,
+118,154, 27,138, 6,237,201,157, 16,210,129,105, 50, 77,166,201, 52,153, 38,211,100,154,127, 13,205,147, 39, 79, 30, 59,121,242,
+228, 93, 7, 14, 28,200,154, 49, 99,198,178,119,222,121, 7, 60,207, 35, 45, 45, 13, 63,252,240, 3, 93,179,102,205,146,170,170,
+170, 54, 39, 79,158,124,224, 74, 54, 87, 0,171,228,206, 96, 48, 24, 12, 6, 35,194,156, 58,117,106, 31,128,155,211,211,211,175,
+ 46, 44, 44,124, 18, 0,100, 89,126,225,212,169, 83,219,255,228,164,253, 97, 48,131,197, 96, 48, 24, 12, 6,163, 65, 56,113,226,
+196, 22, 0, 55,254,217,233,248, 51, 96, 31,123,102, 48, 24, 12, 6,131,193,136, 48,204, 96, 49, 24, 12, 6,131,193, 96, 68, 24,
+102,176, 24, 12, 6,131,193, 96, 48, 34, 12, 1,224,183, 37, 0,165,180, 32,108,145, 11,104,161, 16, 74,159,105, 50, 77,166,201,
+ 52,153, 38,211,100,154, 87,158,102, 40,237,250,248,143, 75,153,176,250,193, 34,132, 16,122, 1, 29,102, 17, 66, 58, 68,122, 71,
+ 49, 77,166,201, 52,153, 38,211,108, 24,205, 11,185,215,251,211, 36,132, 16,229,175,231,151, 2, 64,184,218,127, 84, 58, 27, 66,
+179, 33,242,254, 87,209,188,210, 8,218,138,144, 16,194,193, 93,140, 72, 8, 33, 50, 0, 57, 18, 59,202,115, 16,184, 72,233, 49,
+ 34,143,231, 24,169, 23, 9, 59, 78, 12,198,149, 75, 36,239,245, 94,247, 14, 94,209, 4, 32, 1,144, 8, 33, 23,245,176,109,136,
+103,210,165,158,247,191,178,230,229,142, 95,131,165,236,168,196,196,196,149, 73, 73, 73,215,149,148,148,200,158,233, 72, 79, 79,
+ 7,199,113, 16, 4,193,114,228,200,145,232,250,110, 48, 57, 57,249,253,172,172,172, 59, 75, 75, 75,101,142,227,208,184,113, 99,
+ 16, 66,192,243, 60,120,158,183, 28, 60,120,176,222,154,145,166, 91,183,110,231,236,118,187,217,119,186, 86,171,181,238,216,177,
+ 35,234,207, 72,211, 31, 9, 33, 68,200,204,204,188,205,104, 52, 26,148,105, 93,187,118,245, 94,132,238,220,185,115,126,184,122,
+205,155, 55,223,106, 48, 24, 98, 5, 65, 0,207,243, 16, 4, 1,213,213,213,101,123,247,238,237,225,153,191,209, 96, 48, 36,240,
+ 60,175,156, 91,176, 90,173,165,123,246,236,201,141, 92,174,174, 28,250,246,237, 43,160,254, 93,172,184,214,174, 93,235, 10,189,
+ 88,196,224,236, 59,162, 90, 17,151,165, 19,225,104, 12,149, 73, 57, 21, 12,191,104,187, 85, 30, 12,115,125,185, 65, 83, 23, 2,
+ 66, 72, 19, 0, 46, 74,233,201,144, 11,251, 89,217,119,146, 0, 12,145,128,209,158, 81, 43, 7,148, 18,224, 64, 2,240,197,105,
+192, 82,107,225, 63,240, 65,164,220,235, 51, 50, 50,222, 72, 78, 78,190,171,178,178,178,134,231,121, 16, 66,104, 86, 86,150,178,
+140,247,242,144,101,249,120, 97, 97, 97,118, 48, 61, 0, 98,147, 38, 77, 94, 75, 76, 76,188,163,166,166,166,134, 16, 2, 66, 8,
+ 37,132,160, 99,199,142,170,166,242, 43, 73,210,241,130,130, 2,191,154, 13,145,206, 63, 43,239, 29, 58,116, 80,181, 20,109, 89,
+150, 3,230,221, 91, 51, 35, 35,227,181,228,228,228, 59,170,170,170,106, 56,142, 83, 53,179,178,178, 46, 56,157,151,178,230,149,
+ 64,160,155, 52,151,148,148,180,172, 71,143, 30,125,191,254,250,107,110,223,190,125, 92,219,182,109, 33, 73, 18,100, 89, 6,165,
+ 20,221,186,117, 51,214,119, 99, 41, 41, 41, 11,186,119,239, 62,122,249,242,229,220,178,101,203,184,238,221,187,131, 16, 2, 73,
+146, 32, 73, 18,250,247,239,111, 8,173, 18, 24, 66,136, 89, 16,132,201, 90,173,182,143,203,229,106, 7, 0,162, 40,238,181,217,
+108,235, 92, 46,215,235,148,210,170,112,116,156, 78,167,177,176,176,176,206,190,233,209,163,135,246, 66,211,150,153,153,185,137,
+227,184, 22,158,116, 34,156, 95, 74,233,225,194,194,194,156, 64,154, 87, 93,117, 85, 72, 77,223,105,178, 44, 31, 46, 40, 40, 8,
+168, 73, 8, 17, 90,183,110, 61,186,125,251,246,250,207, 63,255, 28,199,142, 29,131,201,100,130, 44,203,144, 36, 9, 78,167, 19,
+ 55,223,124,115,157, 7, 72, 48, 12, 6, 67,244,247,223,127,223, 42, 41, 41, 9,103,206,156, 65, 73, 73, 9, 38, 78,156,120,192,
+107,126,194, 15, 63,252,144, 25, 31, 31,143,154,154, 26,148,151,151, 99,236,216,177,245,217,196, 37,201,160,107, 91,190, 72,128,
+120,101, 92,146,241,251,234, 13,135,158,190, 88, 93,155,205, 86, 44, 73, 82,156,247, 52, 63,207,244, 90,240, 60,127, 14, 64, 98,
+176,101, 8, 33,205, 0,220,200,243,124,107, 81, 20,175,162,148, 54,115,185, 92,201, 0,160,209,104, 78,243, 60, 95,228,116, 58,
+247,219,237,246,255, 1, 88, 78, 41, 45, 10,164,101,223, 17,213, 74,178,213,220, 82,109,147,135,202, 20, 41, 28,193, 41,147,174,
+230,191,246, 29, 81, 75,234, 97,178,254, 20, 8, 33,205,211,210,210, 94,241,252,127,156, 82,122,228, 98, 53, 37, 96, 52,165, 52,
+ 6, 0,202,203,203, 99,142, 29, 59,150,178,124,249,242,172,153, 51,103,246,211, 90,173, 47,219,129,189,193,214, 31,216,167,213,
+118,129,144, 12,101,220, 69,229,227,171,214, 29,138,196,131,137, 75, 79, 79,127,227,250,235,175, 31, 55,111,222, 60,227,150, 45,
+ 91,140, 29, 59,118,132,251,193, 8,245,126, 79, 41, 85,207,177,107,174,233, 25, 76,143, 0, 16,210,210,210,102, 95,127,253,245,
+ 99,230,206,157,107,220,191,127,191,177,121,243,230,170,166,186, 32, 33,158,105, 4,157, 59,119,249,163,211,217,160,121, 31, 60,
+120,240,152,121,243,230, 25,119,239,222,109,204,204,204, 84, 53,125,189, 51,199,113,200,206,238, 30,150,230,144, 33, 67,198,188,
+251,238,187,198, 29, 59,118, 24,219,181,107,231, 49,105, 80,211,120, 33,233,188,196, 53, 47,123,234,152, 8, 66, 8,151,152,152,
+184, 48, 59, 59,123,240,215, 95,127,205, 3,192,142, 29, 59, 80, 90, 90,138,244,244,116,152,205,102,232,245,122, 88,173,214,122,
+189,101, 37, 39, 39,191,223,163, 71,143,209, 95,127,253,181, 8, 0, 95,222,126, 51, 14,139,192,164, 51,118,104, 52, 26, 28, 60,
+120, 16, 60,207, 95, 76,232,248,218,168,168,168,143,151, 46, 93, 26,215,181,107, 87,174,164,164, 4,205,155, 55,199,239,191,255,
+222, 99,253,250,245,221,238,190,251,238,187, 9, 33,227, 41,165,235,195,213,252,230,155,111, 96, 50,153,212,193,225,112,212,203,
+ 88,120,195,243,124,198,150, 45, 91,146,204,102, 51, 36, 73, 2,165,180,214, 5,236,123,225,201,178,140,222,189,123, 59,130,105,
+ 10,130,144,177,101,203,150, 36,131,193, 80, 71, 75,146, 36,104,181, 90,112,156,187,161,168, 36, 73,112,185, 92,200,201,201, 9,
+168, 73, 8, 33,153,153,153,183, 41,230,138,227, 56,124,246,217,103, 72, 73, 73, 65, 82, 82, 18, 76, 38, 19, 12,134,250,123, 96,
+ 65, 16,144,144,144,128,251,239,191, 31,183,221,118, 27, 22, 45, 90, 4, 81, 20,107,205,143,143,143,199,119,223,125,135,232,232,
+104, 52,109,218,180,214,252,203, 21, 2,196,175, 88,127, 72,141,200,222, 50,172,179, 48,160,119,139,185,202, 56,231, 94,136,202,
+238,101,169, 44, 73,231,214,108,252,109, 90, 40, 93,167,211,217,104,227,198,141,208,233,116, 97,165, 67,146, 36,244,232,209,163,
+ 81,208,180, 18, 50,180, 67,135, 14, 95,222,127,255,253,154, 86,173, 90, 17, 81, 20, 33, 8, 2, 4,193,125,139,144,101,185, 41,
+165,180,169, 44,203,125, 79,159, 62, 77,231,204,153,243, 50, 33,100, 4,165,244,191,126,245, 92,150, 78,213, 54,121, 40,165, 72,
+ 73, 30, 64,155,156, 89, 77, 80,109,147,135,198, 8,150,131, 0, 46, 89,131, 69, 8,137, 54, 24, 12,207,124,254,249,231, 26, 0,
+ 24, 48, 96,192, 51,132,144,135, 41,165, 21,145,218, 70, 76, 76, 12, 98, 98, 98,208,161, 67, 7,140, 28, 57, 50,182, 75,151, 46,
+143, 53,179,217, 38, 22, 1,246, 64,235, 8, 28,151,241,237, 15, 7,146,148,241, 49, 55,119,213, 12,238,219,234,180,187,130,139,
+239,210, 20,178, 68,143,175,222,112, 56,168, 1, 35,132,112, 41, 41, 41,255, 26, 50,100,200,173,243,230,205,139, 2,128,247,223,
+127, 31, 67,135, 14, 69, 74, 74, 10, 12, 6, 3, 52, 26, 13, 52, 26, 13, 68, 81, 84,127,131,232, 17, 0,124, 74, 74,202,203, 55,
+220,112,195, 45,115,231,206,141, 2,128, 5, 11, 22, 96,216,176, 97, 72, 72, 72, 64,116,116, 52,116, 58, 29,180, 90,173, 71,139,
+ 32, 84,188,206, 95, 58,239, 25,212, 15, 45, 12, 58,220, 56,227, 21,196,198,198,226,251, 71,239,131,200,113,184,239,187,117,136,
+142,142, 14,121,255,240,167,185, 99,199, 14,156, 62,125,218,111,222,121,158, 15,122,189,121,231,125,232,208,161,183, 40,154, 11,
+ 22, 44,192,224,193,131,145,144,144, 0,179,217,172,230,253,188,118,224,134,252,222,154,131, 7, 15,190,229,221,119,223, 85, 53,
+251,247,239,143,248,248,120, 68, 69, 69, 65,163,209,168,251,179, 62,199,232, 82,214,188, 82,168,101,176, 60, 59,138, 75, 74, 74,
+186, 53, 63, 63, 95, 61,242,162, 40, 66,167,211,169, 39,135,247,131, 59, 28, 8, 33, 36, 43, 43,235,206,175,191,254, 90, 93,201,
+238,115, 81,233,245,250,122,105,250,232, 15,184,238,186,235, 62,205,207,207,215,107, 52, 26, 88, 44, 22, 20, 22, 22, 34, 38, 38,
+ 6, 90,173, 22,195,135, 15,231,115,114,114, 18,174,187,238,186, 47, 8, 33, 99, 40,165,171, 67,105, 82, 74, 97, 54,155,107, 25,
+172,139,137,220, 19, 66, 96, 48, 24,176,108,217, 50, 8,130, 80,235, 36,243,119, 19, 75, 78, 78, 14, 25,149, 0, 0,157, 78,135,
+ 77,155, 54,129,227, 56,136,162,168, 14,223,124,243, 13, 30,125,244, 81,156, 62,125, 90,157, 23, 21, 21,178,116,147, 24,141, 70,
+131, 98,174, 0,247,177, 55, 24, 12, 16, 69,145, 8,130, 64,120,158, 7, 0, 74, 72,248, 21, 66, 5, 65, 64, 81, 81, 17,110,191,
+253,118,124,244,209, 71,120,225,133, 23, 48,102,204,152, 90,243, 43, 42, 42, 16, 23, 23,135,216,216, 88,232,116,186, 11, 62, 23,
+ 46, 37,100,159,189, 51,253,133,151,141,238, 10, 30, 50, 32, 3, 20, 84,253, 95, 92,124, 16,175,254,235, 77, 62, 92,109,157, 78,
+135,141, 27, 55,194,187,216,149,227, 56,104, 52,154, 90,211, 4, 65, 64,106,106,106, 56,122,207, 47, 93,186, 84,251,217,103,159,
+225,171,175,190,130, 36, 73, 16, 69, 17,122,189, 30,209,209,209,136,143,143, 87,135,166, 77,155,146, 15, 62,248, 64,211,169, 83,
+167,231, 1,248, 55, 88, 28,141,145, 61,230, 10, 0,146, 6,208, 38,135,190,230,227, 98,163,220, 81,156, 75, 17, 66,136, 0, 96,
+234, 91,111,189,149,208,173, 91, 55, 0,192, 91,111,189,149, 48, 97,194,132,169,132,144,167, 41,165, 23, 92,196,202, 3,159, 18,
+ 66, 70, 3,128,193, 96,208, 15, 28, 56, 80,251,246,219,111,227,170,171,174,194,131, 15, 62, 24,255,234,203, 47,223, 8, 96, 73,
+160,245,101,159, 75,109,214, 43,111,198,122,191, 80,157, 31,128,223,207, 22,225,153,103, 94, 12,149, 87, 2,128, 75, 75, 75,187,
+251,189,247,222, 83,171, 67,196,199,199,171,247, 32,223,123,148,242, 27,228,190, 68,224,142, 10, 77,152, 55,111,158,170,153,152,
+152, 88, 75, 67, 20, 69, 20,237,253, 25,223,190,159, 7, 83, 66, 42,198, 62, 58,171,222,233, 76,215,105,145, 97,208,162, 83,167,
+ 78, 48, 24, 12,216, 33,186, 31,101,138,185, 10,150,206, 64,154, 60,207,171,105,164,148,194,106,181,162,178,178, 18,146, 36,193,
+110,183,163, 91,183,110, 97,229,253,221,119,223, 85, 53, 27, 53,106,164,222,223,189,239,243,202,160,188,192, 4,211, 76, 75, 75,
+155,240,239,127,255, 91,213, 76, 72, 72, 80,181, 4, 65,128, 70,163,193,130, 5, 11,124,243,120,209,154,245, 61,238,190,154, 71,
+142, 28,193,204,153, 51,161,209,104,148, 42, 64,106,196, 50, 61, 61, 29,115,230,204, 9,235, 25,119, 57,227,239,232,146,146,146,
+ 18,121,223,190,125,220,246,237,219,161,209,104,144,152,152,136, 30, 61,122, 0, 0, 28, 14, 7, 4, 65,128,193, 96, 32,153,153,
+153,167,149,157,166,252,122,151,165,123,181, 48,224,126,255,253,119,121,229,202,149,220,162,145,131, 97,167, 64,151,103,102, 97,
+240,176, 97, 88,145,174, 5, 15,160,199,190, 18,104,181, 90, 33, 53, 53,213,169, 28, 4, 69,215,187,110,150,159, 86, 11, 81, 38,
+147,233,131,229,203,151,235, 57,142, 67,101,101, 37,100, 89, 70,110,110, 46, 8, 33,216,189,123, 55,158,126,250,105,124,249,229,
+151, 88,186,116,169,161,107,215,174, 31, 16, 66,218, 81, 74, 43, 21, 13, 63,154, 0,220, 23,171,193, 96, 80, 13,150,193, 96, 32,
+ 87, 93,117,213,105,165,252,220,167, 56,238, 68, 97, 97, 97,183, 64,154,128, 59,146, 48, 98,196, 8,181,206,153,242, 0,244,190,
+216,148,255,133,133,133,117, 14,140, 63, 77, 89,150,209,171, 87, 47, 0,128,201,100,130,217,108,198, 15, 63,252,160,206,239,218,
+181, 43,236,118, 59, 26, 53,106,132,189,123,235,150, 66,248,211, 60,117,234, 20, 22, 46, 92, 8, 81, 20,145,144,144, 0, 81, 20,
+ 53,171, 87,175,126,193,100, 50,197,240, 60,143,216,216, 88, 12, 27, 54,108,222,141, 55,222,168,164, 65,250,230,155,111,132, 64,
+154, 60,207, 67,175,215, 99,193,130, 5,152, 57,115, 38,158,124,242, 73,248,206,183, 90,173, 72, 72, 72, 64, 92, 92, 28,226,226,
+106,149,126, 5, 76,231,197,210,208,154, 20, 20,133, 59, 87, 96,207,174,213,144,168, 4, 89,146, 65,101, 10, 73,150,177,115,213,
+214,204,226,195, 39,211, 41,168, 90,219, 72,170,170,118,245,109,164,187, 10,192,178,181, 37,182,217,161,210,201,243, 60, 28, 14,
+ 7, 86,172, 88,129,131, 7, 15, 98,229,202,149,176, 88, 44,104,212,168, 17, 98, 99, 99,145,147,147,131, 9, 19, 38,248, 53, 88,
+190,154,146, 36, 45, 56,113,226, 68,151,156,156, 28, 82, 94, 94,142,146,146, 18, 84, 86, 86,194,225,112,192,225,112,168,199,208,
+100, 50, 33, 37, 37, 5, 22,139,133,218,108,182, 5,129, 52,169, 76,202, 57,130, 83,135,150, 9,141, 90, 14,119, 25, 78,255,144,
+ 96,179,216, 53,174,119,150, 25, 39,124,243, 68,203, 65, 28,229, 40,224,206, 58, 33,160,178, 36,149,172,254,241,240,253,161,210,
+ 25, 9,130,104, 78,156, 60,121,114, 59,239,226,233,177, 99,199,162,176,176,176,221,235,175,191, 62, 17,192, 91,245,213, 52, 0,
+233, 0,224, 2,190,131,123,192,243, 22, 11,121, 97,217,178, 17, 0,238, 88,186,116, 41,198,140, 25,131,127,189,252,114, 7,248,
+ 24,172, 90,251,147, 82, 20, 29, 88,143, 35, 7, 54, 66,150,101,207, 64, 3,254, 15,244,230,227,147, 78, 82, 85, 85,101,221,178,
+101,139,249,195, 15, 63, 68,124,124, 60,154, 53,107,134,168,168, 40,232,116,186, 58,102, 64, 25, 66,229,189,166,166,198,186,111,
+223, 62,243,167,159,126,138,132,132, 4, 52,109,218, 20, 38,147, 9,122,189, 94,125, 65,223,178,114, 41, 38,142, 31,142,210,163,
+251,241,230,195,183,133,157,206,123, 6,246, 67,134, 65,139,225,211,103,161, 93,187,118, 88,114,219, 77,224, 8,112,239,247, 63,
+ 65, 20, 69,124, 56,244, 90,232,116, 90,220,251,253,182,176, 53,183,109,219, 6, 74, 41,154, 54,109, 10,139,197,162, 70,217, 52,
+ 26, 13, 86,175, 94,141,155,110,186, 9,139, 22, 45,194, 53,215, 92, 19, 50,239, 85, 85, 85,214,221,187,119,155, 63,249,228, 19,
+196,199,199,163,113,227,198, 48, 26,141,170,158,183,137,105,209,162, 5,202,202,202,208,178,101,203,160,154,213,213,213,214, 29,
+ 59,118,152, 23, 45, 90,132,248,248,120,100,100,100,192,104, 52,214,138,132, 61,255,252,243,181, 52, 58,117,234,116,209,154,245,
+ 61,238,190,154, 35, 71,142, 68,203,150, 45, 17, 29, 29,173,238, 3, 95,163, 93, 79,186,163,118, 53, 7, 59, 0,173,215,239, 89,
+ 0,219,252, 44,167, 76, 23, 1,116,246,204,147, 0, 84, 2,136,245,163, 23, 72,167, 4,238,120,113,162,207,242,190,219, 81, 17,
+ 0,128, 16,162, 92,143,125, 1,108, 0,128,182,109,219,162,180,180, 20, 58,157, 14, 61,122,244,192,217,179,103,213, 48,159, 44,
+203, 24, 53,106, 20,255,196, 19, 79, 36,113, 28, 7,167,211, 9, 74, 41,120,158,135,242,230,231,131,204,113, 28,114,114,114,176,
+199,179, 79, 7, 15, 27,134,140,140, 12, 40,149, 56,116, 58, 29,198,140, 25, 67, 30,125,244, 81, 65,137, 94, 80, 74, 97,177, 88,
+208,169, 83,167,128,229, 82,130, 32, 60,252,197, 23, 95,196,104,181, 90,213, 92, 41,105,217,183,111, 31, 94,125,245, 85,220,113,
+199, 29, 56,122,244, 40, 82, 83, 83,241,216, 99,143,153,243,242,242, 30, 6, 48, 61,144,166,130,217,108,174,101,176,198,143, 31,
+ 47,228,228,228, 36, 25,141, 70, 53,186,229, 49,149,200,201,201, 9,106,197, 61,245,159,240,221,119,223,249,125, 59,244,125, 99,
+ 32,238, 86, 23, 97,105,110,217,178, 69, 53,103, 74,244, 66,153, 95, 88, 88,168, 70,176, 60, 70, 48,152, 38, 5,160, 62, 68, 61,
+145, 43,205,150, 45, 91,102,164,166,166,154,199,143, 31,143,202,202, 74,164,165,165, 97,208,160, 65,144,101, 25, 14,135, 3,147,
+ 38, 77, 10, 26,121, 17, 69, 17, 91,183,110, 69, 94, 94, 30,158,120,226, 9,204,155, 55, 15, 3, 6, 12, 80,231, 43,111,113,137,
+137,137,136,142,254,211,219, 56, 68, 14, 25,112,184,156,168,169,177,128, 82, 9,146, 76, 33, 75, 50,118,175,221,153,121,120,215,
+193,172,252,197, 11, 69, 0,176,174, 91,234,189, 86,234,200,185,255,105,211, 55, 94,179,101,237,239,142, 45,193,228,121,158,199,
+125,247,221,135,105,211,166,225,214, 91,111,197,170, 85,171,240,212, 83, 79,225,238,187,239, 86,205,187,114, 46,132,194,233,116,
+190, 55,118,236,216,127, 46, 89,178,228,170, 71, 30,121,132, 3,220,215,164,209,104, 4, 33, 4, 86,171, 85, 29,246,237,219, 39,
+255,227, 31,255,248,213,110,183,191, 23, 72,143, 10,134, 95, 76,186,154,255, 22,151,114,173, 79,125, 31,207, 17, 33,218,145,216,
+180,111,249, 13,153, 3,232,128,219,154,197, 81,217, 29,225,163,160,176, 89,171,241,228, 19,143,135, 29,189,107, 8, 8, 33, 67,
+ 7, 14, 28, 56,104,198,140, 25,117,230,205,152, 49, 3,123,247,238, 29, 68, 8, 41, 10, 84, 36,234, 15, 3,144, 17,147,146,242,
+ 58, 0, 24, 78,157,154,108, 1,142, 3,192, 11,192, 96, 9,184,105,213,170, 85, 0,128, 38, 77,154, 64, 6, 67, 43,125,112, 0,
+ 0, 32, 0, 73, 68, 65, 84,218, 19,224, 99, 30,248,212, 5,124,235,171, 69, 41,133,195,233,130,197, 98,133, 76,221,231,145, 76,
+101,200,146, 59, 10,234,107,178, 66,149,187, 81, 74, 41, 33, 68,230,121, 30, 29, 58,116,192,224,193,131,161,213,106, 97, 54,155,
+213,251,188,239, 61, 41,140,135, 34, 5, 32, 19, 66,208,162, 69, 11, 12, 26, 52, 8, 26,141, 6, 38,147, 9,209,209,209,170,193,
+226,121, 30, 29,114,250,225,211, 69,175, 96,220,224, 44,140,191, 54, 25, 95,236, 46, 9, 43,157, 77,141, 90, 52, 53,232,208,182,
+109, 91, 68, 69, 69,129, 16,128,231, 57, 53,157, 38,163, 30, 26,181,248, 49,188,188,159, 58,117, 10, 69, 69, 69, 40, 42, 42, 2,
+199,113,200,205,205,133, 86,171,133, 32, 8, 56,112,224, 0,166, 79,159, 14,187,221, 30, 86,222, 57,142, 67,235,214,173,209,175,
+ 95, 63,104,181, 90, 40,207, 10,239,162, 65, 81, 20, 81, 89, 89,137, 86,173, 90, 97,217,178,101,232,221,187,119, 72,205,118,237,
+218,161,111,223,190,208,104, 52, 48, 24, 12,106, 85, 29,173, 87, 94,171,170,170,212,253,208,165, 75,192, 58,109,126, 53, 87,110,
+ 61,138,249, 43,127,128,205, 46,163,162,198, 89,107,133,212, 70,209,216,240,201, 19, 97,229, 93,209,124,239,189,247, 80, 86, 86,
+166,222,135, 56,142, 83, 7, 66, 8, 50, 50, 50,240,238,187,239,214, 17,242,246, 34,148,210,117, 62,179, 19, 9, 33,249,234, 70,
+ 41, 29, 70, 8,201,247,254, 13,180,156,231,239,181, 83,167, 78,205,206,203,203,155,217,179,103,207, 79, 55,109,218,180, 56,144,
+ 94, 32,157,169, 83,167,102,229,229,229,205,244, 94,222,207,118, 84,188,163, 14,196,147, 57, 78,137,204,164,167,167,171,229,206,
+102,179, 25, 26,141, 70, 93,209,229,114,225,131, 15, 62, 64, 82, 82, 18,146,147,147,213, 95,127, 80, 74,105,147, 38, 77, 64, 41,
+197,131,103,221, 85,128,190, 75,211,160, 8,192, 13,103,169,170, 39, 73, 18,150, 44, 89,130,168,168, 40,245, 66, 55,155,205, 65,
+139,139,180, 90,109,223,238,221,187,115, 54,155, 77, 13,147,115, 28,135,125,251,246, 33, 47, 47, 15, 99,198,140, 65,155, 54,109,
+ 32, 73, 18,170,171,171,113,221,117,215,137,111,190,249,102, 95,132,105,176,140, 70,163, 90,239,200,102,179, 97,205,154, 53,136,
+141,141, 69, 92, 92, 28, 18, 18, 18, 16, 31, 31, 15,157, 78,231,125, 98, 4,132, 82,138, 17, 35, 70,212,138, 92,121, 71,173,188,
+111,104, 74,177, 95, 56,154,215, 92,115,141, 26,189, 50,155,205,248,246,219,243,247,231, 30, 61,122,128, 82,138,196,196, 68,108,
+222,188, 57,148, 22,237,218,181, 43,100, 89, 70, 82, 82, 18, 68, 81, 36,171, 87,175,126,193, 99,174,136, 40,138,248,249,231,159,
+ 81, 88, 88,136,196,196, 68,245,173, 52, 20,213,213,213,197,111,190,249,166,244,246,219,111, 3, 0,250,247,239,143,242,242,242,
+ 51, 94,243, 75,199,141, 27, 87, 43,191,231,206,157, 43, 13, 41,124,137, 35, 3,112, 57, 92,168,177, 88, 81, 85, 89, 13,167, 44,
+193,233,146,112,230,196,217,216, 39, 30,157, 44,254,107,210, 4, 0,192,163,179,223, 66,229,187,231,111, 96, 95, 61, 58, 58,105,
+196,171,159, 77, 1, 48, 60,152,126, 77, 77, 13,172, 86, 43,154, 52,105,130,109,219,182,161,178,178, 18, 3, 6, 12,168, 21,253,
+ 13, 81, 4,161, 66, 41,181, 19, 66,114,135, 13, 27,182,237,181,215, 94,107,217,190,125,123, 82, 93, 93,141,234,234,106,212,212,
+212, 64,249, 95, 80, 80, 64, 23, 47, 94,124,184,166,166, 38,135, 82, 26,176,206,144,182, 91,229, 65,251,142,168, 37, 63,254,162,
+ 25,246,183,145, 55,197, 28, 63,113,204, 85,106,209, 87,149, 91,126,181, 73,116, 47,168, 68, 33, 81, 10, 42,201,144,168, 28, 48,
+226,242, 71, 64, 8,201,200,204,204,252,199,162, 69,139,252, 26, 82,158,231,177,104,209, 34,244,234,213,235, 31,132,144,125,193,
+ 42,247, 43, 52, 3,180, 46, 81,124,226, 63,255,249,143, 6, 0,250,245,235,247, 68, 51,167,243,209, 34,192,222,190, 99,199, 91,
+ 54,109,218, 20, 99, 52,186,219, 9,197,196,196,128, 82,202,215,212,212,196,228,228,228,220, 2,127, 6, 75,166,112, 58, 93,176,
+ 88,109, 40, 43,175,130,211,238,132, 75,118, 65,114,201,112,201,238,232,168, 75,146, 32,187, 36,184,100, 9,188,192, 71,245,189,
+166, 73,149, 59,150, 69,202,214,253,116,180,177,159,100,202,238, 22, 94, 64, 74, 74,138, 90, 36,236, 93, 87, 38, 84, 20,195, 15,
+146,251, 94, 72,213,123,227, 47,107,243,113,102,239, 6,104, 8,133, 44, 57, 33,187, 28,144,156, 14,240,144,177,247,208, 9,180,
+ 79, 11,121, 15, 81,211, 57,228,153, 23,209,163, 71, 15,124, 49,122, 56, 8, 1,238, 93,179, 25, 26,141, 6,139,111, 30, 0,173,
+ 94,139,191,175,252, 41,220,116,214,202,251,142, 29, 59,240,224,131, 15,226,165,151, 94,130,193, 96, 80, 95, 78,246,239,223,143,
+207, 62,251, 12, 3, 7, 14, 12, 59,239,132,184,139, 90,149,125, 56,117,234, 84,156, 60,121, 18,175,191,254, 58,178,179,179, 33,
+138, 34,202,202,202,144,147,147,131,211,167, 79,135,165, 73,169,140,248,248,120,181,186,142,111, 29, 49, 0,245, 62, 70,222,154,
+119,221,156,138,175, 55, 46, 6, 1,193, 79,159, 76,174,245, 60,122,231,179, 31,235,173, 57,109,218,180, 90,233,172, 79,244,202,
+203,139,248, 13, 6,248, 51, 50, 33,150, 83,118,178, 46, 47, 47,111,166,239,250,161,244,188,231,251,172,111,247, 49,101,117, 14,
+102,157,187, 47,165,148,166,167,167, 67,150,101,152,205,102,104,181,238, 8,152,239,131,212,100, 50,213,114,228,161,202,147,121,
+158, 7,165, 84,221,177,190,183, 49,158,231,177,121,243,230, 58, 38,224,223,255,254,119,208,114, 90,151,203,213, 46, 42, 42, 10,
+149,149,149,106, 29, 41,173, 86,139, 41, 83,166, 96,220,184,113,170,185,210,106,181,248,232,163,143,208,173, 91, 55,216,237,246,
+118, 1, 5, 1,104, 52,154,154,142, 29, 59,186,235, 32,187,235, 78,145, 49, 99,198,240, 14,135, 3,122,189,190, 86,212, 73,169,
+155, 22,202, 12, 41,209,166, 21, 43, 86,132, 21,193, 10,183, 14, 18,165, 20, 59,119,238,172,101,212, 60, 77,141, 1, 0,187,118,
+237, 82, 31,180,225,150,119, 75,146, 4,131,193, 64, 52, 26, 13, 49,153, 76, 49,227,199,143, 87,117,149, 99,174,228, 59,156,138,
+214,191,252,242,203,117,193,230,239,222,189,251,138,236,142, 65,150,101, 56,156, 78, 88, 44, 86, 84, 86,215,224,249, 89,158, 18,
+181,231,177, 5,192,150,220,137, 15,226,190,193, 3,251, 33, 68,235,190, 64,196,199,199,227,203, 47,191,132, 40,138, 88,182,108,
+ 25,162,163,163,113,211, 77, 55, 33, 58, 58, 26, 79, 60,241, 4,110,187,237,182,176, 13, 22, 0, 80, 74,203, 9, 33,185,147, 39,
+ 79,222,246,242,203, 47, 55,105,210,164, 9, 28, 14, 7,236,118, 59, 28, 14, 7, 14, 29, 58,132,197,139, 23, 31,171,169,169,201,
+165,148,150,135,210,211,118,171, 60,152,255, 72,203,226, 94, 35,111,182,238, 61,181, 18,167, 79,157,133, 75, 58, 14,151, 36,193,
+229,116,185, 13,129, 44,195,229,112,129,231,185,232,235,122, 54, 93,237,174,240, 79,236,107, 55, 23, 93,127, 33,251,228, 2,161,
+ 7, 14, 28, 40, 77, 76, 76, 84,222, 32,163,237,118, 59, 1, 0,173, 86, 75, 1, 40, 21,220,171, 1, 4,109,120,162,112, 12,152,
+248,175,151, 94,106,172, 20,223,191,244,210, 75,141, 31,123,228,145,137, 0,222,216,187,123,247,194,187,238,186,107,242,231,159,
+127, 94,107,157,187,238,186, 11,123,119,239, 94,232, 55,129, 0,156, 78, 39, 44, 22, 27, 74, 74,126,199, 61,247, 62,163, 78, 7,
+168, 90,209,221,211,171, 35, 0,232, 1,160,228,244,255, 48,233,193,199,252, 94,164,148, 82,218,190,125,123,229,122,135, 40,138,
+117, 42, 33,123,223,223, 67,221, 63, 60,145,161, 90, 85, 44, 52, 26, 13, 14,110,202,199,228,137,183, 0,146, 11,112, 84, 3,142,
+ 26, 80, 71, 13,168,189, 26, 68,107, 0,117, 90, 67,234, 42,233, 84,170,109, 8, 60, 7,157,246,252,125,211,104, 52, 64,171,215,
+134,149, 78,127,121,255,237,183,223,112,255,253,247,195,110,183, 99,228,200,145,176, 90,173,176,217,108,176, 90,173,104,209,162,
+ 5, 44, 22, 75, 72, 61, 37,239,178, 44,171, 81,192,201,147, 39, 35, 59, 59, 27,211,167, 79,199,255,253,223,255,161, 69,139, 22,
+152, 56,113, 34, 62,253,244, 83,100,101,101,161,166,166, 38,164, 38, 0,245,121, 44, 8,130,122, 15,246, 62, 86, 0,234,117,140,
+252,105,186,187, 3, 67,157,227,254,208,248,254,245,214,156, 57,115, 38, 74, 74, 74,234, 68,174,188, 35, 88,115,231,206, 13,170,
+ 27, 8,159, 40, 83, 56,203,237,240, 76,178, 76,153, 50,229, 73, 66, 72,254,148, 41, 83,158,156, 53,107, 86, 97, 56,122, 1,230,
+127,227,249,189,193,107,218, 14,159,101,252,119,211,192,113, 28, 40,165,106, 88, 19,112,239, 56,101, 30, 0, 24,141, 70,228,231,
+231, 99,201,146,243,213, 6,148,101, 2,105,202,178,140,255, 38,186, 15,196, 80, 79,228, 74, 25,191,254,140,140, 97,195,134,225,
+255,217, 59,239,240, 40,170,182,141,223,103,102,251,102,211, 32,148, 52, 18, 66, 4, 66, 66, 9,161,136,210, 85,164, 74,183,243,
+ 89,105, 42,190, 42,205, 6, 1, 21, 80, 4, 4, 17, 17, 16, 81,124, 1, 21,233, 77, 64,186, 1, 36,116,144, 38,144, 78, 72, 32,
+125,235,148,243,253,145,108,220,148,205,238,134, 32,229, 61,191,235,218,107, 51, 51,103,238,121,102, 55,187,115,239,115,158,115,
+ 38, 34, 34,162, 76,246, 74,167,211, 85,105, 54,100, 89, 70, 82, 82, 18, 78,157, 58,133, 14, 29, 58, 32, 47, 47, 15, 10, 0,239,
+156, 60,137,232, 97,195, 96, 41, 49,126,106,181, 26,195,135, 15,119,170,227,200,159,127,254, 89,166, 8, 40, 58, 58, 58,245,161,
+135, 30, 10, 78, 72, 72, 40,205,104,105, 52, 26,104,181,218, 82,147,225,230,135, 26, 67,134, 12, 41, 99,134,202, 27, 44,251,135,
+103,235,214,173,110,117, 17, 82, 74,209,165, 75,151,210,236,149,183,183, 55,214,172, 89, 83,218,166,115,231,206, 32,132,160,110,
+221,186,216,178,101,139, 75, 77,160,248, 53,181,191,247, 60,207,163,168,168, 8,137,137,137, 80,171,213,165,245, 25, 58,157,174,
+244,252, 25, 78,160, 50,172,130, 0,163,201,140,130,130,226, 47,210, 75,167, 86,151,105, 98,179, 84,127,112,154, 61, 19,154,159,
+159,143,157, 59,119,226,215, 95,127, 69,155, 54,109,202,116, 15,186,219, 69, 88, 26, 50,165, 89,132,144,142,227,199,143, 63,248,
+209, 71, 31, 5,213,174, 93, 27, 54,155, 13, 73, 73, 73, 88,186,116,105,186,209,104,236, 72, 41,205,242, 64, 16,162, 32,194,108,
+ 52, 33,175,160, 8,241,159, 44,115,214,146, 3, 0,155,181, 0,125,123,117,169,246,116, 40,213,129, 82,154, 6,224,101,251, 50,
+ 33,100, 57, 0,123, 49,126, 62,165,244,121, 79,244,148, 64,215, 65, 67,134,116,127,235,173,183, 74,215,189,245,214, 91, 56,120,
+240, 96,119,229, 47,191,156, 18,128,221,252, 47,191, 52,159, 51,103, 78,105,155, 57,115,230,224,215, 95,126,249, 93, 2,118, 59,
+ 9,178, 56,131,101, 50,163,176,200, 4, 31,191, 64,164, 93,217,227, 50, 22, 21,111, 1,173,226,123,217,254, 29,226,172,238,198,
+ 93,115,245, 79,152,148,182,104,209, 2, 0, 74,235,142,154,119, 31,130,217,115,151, 64,195, 81, 12,236, 30,141, 58, 58, 25, 68,
+ 95, 11,170, 46, 19, 65,252,194,138,119,140,111, 85,165,174, 61,206, 61,239,191,131,191,189,180, 24,190,253, 0,148, 74, 37,126,
+125,186, 55, 84,106, 21,254,111,211,222,226,193, 61, 47, 13,132, 74,163, 70,143,175, 87,185,140,213,241,220, 47, 93,186,132, 3,
+ 7, 14, 32, 42, 42, 10, 23, 47, 94, 44,173,177,181, 95,183,220,236, 77,160,246,121,174,236,223,227,215,174, 93, 67,223,190,125,
+161, 82,169,176,108,217, 50,236,217,179, 7,227,199,143,199,139, 47,190,136,110,221,186, 85, 90, 23, 91, 94, 51, 38, 38,166,204,
+123,228,172, 62,202,147,247,168, 50, 77, 59,213,125,223, 29, 53,237,197,237,149,153,245, 91, 45,108,119,200, 22, 85,214,101,214,
+167, 92, 59,160,184,150,234, 79, 0,150,233,211,167,159,158, 62,125,122, 95, 66,200,198,233,211,167,247, 45,215,206,149, 78,249,
+237, 46,191, 7, 75, 13, 86, 73, 74,174, 43,240,143,137, 82, 87,209,151,237,229,229,133,151, 95,126, 25, 19, 38, 76, 40, 45,100,
+172, 10,187,115,173,138,141, 27, 55, 86, 88,183,110,221, 58, 87, 93,132,127,249,250,250,182,233,222,189, 59,242,242,242,144,156,
+156, 12,131,193,128,232, 89,179,112,114,244,104,180, 90,184, 16, 92,247,238, 0,138, 63,240, 39, 79,158,132, 70,163,249,171,202,
+ 64, 42,193, 96, 48,192,223,223, 31, 90,173, 22,222,222,222,240,246,246,134,151,151, 87,169,209,114,213, 69,104,255, 48,111,218,
+180,169,202,204,149, 99,202,215, 29, 51, 68, 41, 69, 66, 66, 66,133, 12,150,253,152,246,109,246, 76,134, 59,154, 0,160,213,106,
+169, 70,163, 1,207,243,208,235,245,165,233,126,173, 86, 91,250,112, 55,131,229,106, 34,209,240,240,240, 50, 19,145, 42,149,202,
+ 50, 19,145,222,171,252,211, 69,104, 65, 81, 97, 81,141,235, 91,173, 86, 40, 20, 10,252,250,235,175,104,223,190,125,169,185,178,
+ 27, 43,199,247,221, 19, 40,165,169,132,144,174,243,230,205, 59, 52,123,246,108,255,194,194, 66, 44, 91,182, 44,175,176,176,176,
+ 43,165, 52,213, 35, 45, 0,130, 77,132,209, 98, 65, 97, 65,241,107,240,247,233,213, 46,118,186,183, 39,124,110,214,162,197,243,
+223,125,247, 93,133,245,223,125,247, 29, 46, 94,188,248, 60, 78,158,220, 29, 10, 44,156, 48, 97, 66,100, 92, 92, 92, 40, 0, 76,
+152, 48, 33, 37, 20, 88,232, 76,147,210,127,186, 8, 11, 75,204,186,185,168,242,186, 37, 79,145,101,185,194, 15,190, 91,189, 32,
+ 18, 66, 74, 77,198, 99, 79,190,140,244,203,231, 16,165,207, 70, 93, 63, 47,200, 5,233, 80, 61, 18,143,147, 55,245,248, 98,225,
+ 54,143,226,212,171, 85,208,234,254,233,110,210,234,180,208,148,244, 42, 16, 66,160,213,235,160, 84,187,239,207,237,231,126,238,
+220, 57,232,245,122, 72,146, 84,225,122,227,233,136,102, 74,105,233,181,115,246,236,217, 24, 55,110, 28,150, 45, 91,134,147, 39,
+ 79,162, 85,171, 86,120,244,209, 71,113,253,250,117,156, 56,113, 2, 22,139,197,237, 56, 29,175, 23,103,207,158,197,142, 29, 59,
+112,254,252,121,164,164,164,120, 20,159, 51, 77, 59,246,229, 95,119, 28,195,224,199, 90, 87,161,224, 92, 51, 62, 62, 30,215,175,
+ 95,175,144,185,114, 44, 63,114,150,193,114,244, 34, 85,144,136,178,217, 35,216,235,161,236,134,168,252, 50, 0,127,251,186,137,
+ 19, 39,190,231,238,126,142,203,246, 12, 88, 57, 93,167, 40, 74, 26,150,249, 4,217,187,152,236, 47,186, 99,102,202,254,183, 94,
+175, 47,205, 50,133,133,133, 85,153,189, 42, 9, 18, 60,207,163,211,229, 2,168,213,234,210,238,188, 94,215,255,217,239,197, 23,
+ 95, 68, 68, 68, 68,153, 26, 44,199, 55,165, 50, 44, 22,203,238,221,187,119,199, 62,241,196, 19,252,217,179,103,161, 80, 40, 32,
+203, 50, 44, 15, 62,136, 86, 11, 23,226,212, 91,111,161,243,149, 43,176, 8, 2,180, 90, 45,182,110,221,106, 51, 26,141,149,255,
+ 74,116, 2,199,113,196,110,176, 52, 26, 13,188,189,189,225,227,227, 83,154,205,241,228, 75,200,217, 47, 68,199,135, 39, 31,104,
+123, 65,191,227,133,213,254,254,153, 76,166, 50,134,203, 93, 28,187, 12,236,166,200,215,215,183, 76,183,168, 61,139,231,142,193,
+114, 53,145,168, 70,163,241,217,187,119,111,164,143,143, 15, 40,165,200,206,206,198,211, 79, 63,125,161, 10,201,123, 2, 10, 90,
+ 92,228,110, 50,163,208, 84,117, 55, 72,117,248,239,127,255,139, 75,151, 46,193,102,179, 97,250,244,233, 21,140, 85,117, 50, 88,
+118, 40,165,151, 90,183,110, 45,247,236,217, 19, 9, 9, 9,208,104, 52, 2,165,212,227,249,171,168, 44,195, 38,136, 48,155, 44,
+ 40, 44,170,121,147,121, 55,114,230,228,201, 95,188,188,188,158, 6, 96,200,205,205,229,125,125,125,161,215,235, 97, 50,153,242,
+248,146,145,130, 87, 1,171, 78, 16, 62,125,242,201, 39,231, 0,128, 66, 16, 62,173,106, 30,172, 82,131, 85,195,175,163,253,123,
+203, 89,246,170,186,230,138, 16, 82, 60, 60,159,227,176,108,250, 56, 68,233,179,208,186,161, 23,204,215, 47, 65,227, 19, 0,226,
+ 23,142, 47, 22,110,195,217,171, 55, 61,138,243,153,229,171, 17, 26, 26,138,141,255,215, 31, 26,141, 6, 79,175,222, 81, 92,164,
+ 61,242, 41,168,180, 26, 60, 50,255,191,213, 58,119,163,209,232, 52, 83,229,110, 6,203, 81,211,110, 0, 91,183,110,141, 7, 30,
+120, 0,187,119,239, 70,235,214,173,113,241,226, 69, 92,188,120, 17, 87,175, 94,197,201,147, 39,145,147,147,227, 81,156, 74,165,
+ 18,171, 86,173, 66, 86, 86, 22, 84, 42, 21,242,243,243,113,229,202, 21,167,245,207,238,106, 58, 26,172,166,125,226, 1, 0, 65,
+117,124, 61, 50, 88,142,154, 51,103,206,172, 96,214,221,236,229,169,170, 81,118,185, 90, 39,251,178,181,156,217, 41,191, 92,190,
+ 61, 0, 92, 7,192,187,216,175,252,114,246,244,233,211,119,219, 51, 95, 37,186, 60,117, 82,127, 5, 56,233, 34, 84, 42,149,166,
+166, 77,155,234, 28,251, 79, 57,142,131,183,183, 55, 25, 59,118, 44, 79, 8,129,193, 96,128,175,175, 47, 26, 55,110, 12,155,205,
+117, 89,130, 74,165, 50,181,107,215, 78,231,152,122, 37,132,192,203,203,139, 31, 63,126, 60, 89,178,100, 73,165,251,173, 95,191,
+190,202,127,110, 81, 20,231, 12, 27, 54,236,149,212,212, 84,255,122,245,234, 33, 35, 35, 3, 42,149, 10,148, 82,144,110,221,208,
+233,242,101,216, 74, 12,195,185,115,231,176,120,241,226, 34,155,205, 54,199,101,192,229, 48, 24, 12,168, 93,187, 54, 52, 26, 77,
+153, 81, 49, 14,169, 85,183, 50, 88, 53,105,174,236,154,142, 23, 86,251,223, 35, 71,142, 44, 93,246,228, 75, 82,165, 82,209, 62,
+125,250,216,119,160,126,126,126, 8, 8, 8, 64,102,102,102,233, 7,197,158,185,115,215, 96,185,154, 72, 84,169, 84,194,102,179,
+149,118,103,206,159, 63,191,218,198,224,110,130,138, 50, 49, 24,234, 32, 40,168, 9,234,212, 53, 67,150,165, 26,211, 22, 69, 17,
+163, 70,141, 42, 51,231, 21,240,207,108,201,246,139,130, 32, 8,101,210,255, 30,197, 95, 3,153, 36,153, 2,130, 88,146,197, 51,
+ 58,245, 15,119, 45, 97, 97, 97, 62, 37, 93,134,229, 89, 73, 41,173, 80,140, 14,252, 51, 37, 3, 15,124,156,156,156,220,220,215,
+215, 23, 61,122,244,192,134,181,107,215,127, 8,148,166,108, 76, 64,170,238,218,181,255,148,252,157, 86, 85, 28,148,162,180,139,
+176,200, 88,211,102,157, 84,200, 94,221,106, 87, 14,199, 21,255, 48, 91,243,205,167,136,210,101,162, 85, 3, 13, 14, 28, 60,129,
+246,161, 20,212, 82,189,255, 71,160,248,186,163, 84, 42,161,213,235,161,209,252, 83,115,165,209,235,160, 82, 87,167, 92,225,159,
+ 68,130,253,187,247, 86, 51, 88,132,112,101, 94,199, 87, 94,121, 5, 19, 38, 76, 64,143, 30, 61,112,241,226, 69,236,221,187, 23,
+ 23, 46, 92,192,152, 49, 99, 16, 19, 19,131,199, 31,127,220,237, 56,149, 74, 37,214,172, 89,131,188,188, 60, 80, 74,145,149,149,
+ 5,179,217,140, 73,147, 92,206, 79, 92,165,166,227,119,196,229,237,211, 0, 0,171,183, 31,173,182,230,187,239,190, 91, 58, 7,
+163,253,154, 95, 85,214,202, 77, 14,187, 88,246,116,255,219, 78,165, 6,235,252,249,243,149,142,149,111,214,172, 89,230, 35,143,
+ 60, 82,247,252,249,243, 48, 24, 12,104,220,184, 49, 44, 22,139,211,110, 8,226,112,183,237,211,167, 79, 87,170,217,168, 81, 35,
+219, 99,143, 61,166,172, 95,191,126,153,204,149,125,132, 77,137, 78,165,154, 0, 64, 41, 45, 32,132, 12,127,248,225,135,127,216,
+178,101,139,174,113,227,198,200,203, 43,174,191, 93,182,108, 25, 94,127,253,117,232,116, 58,156, 63,127, 30,253,251,247, 55, 26,
+141,198,225,212, 97, 14,172,202, 52, 43, 57, 15,168, 84,170,210,110, 50,123, 87,153,186,138, 84,116,101,154,132, 16,204,155, 55,
+175,210,185,160,202,179,112,225, 66,160,220, 40, 10,103,113,126,254,249,231, 53,166,121,240,224,193, 50,247, 24,236,215,175,223,
+ 55,143, 63,254, 56, 82, 82, 82,202,116, 11, 86,101,176,202,107,186,154, 72,148,231,121,212,171, 87, 15, 31,125,244, 17, 2, 2,
+ 2, 80,191,126,253, 10, 6,203,213,123, 84, 29,110,183, 38,229,104,226,220,217,241, 29,191,249,118,181, 82,163,230,144,176,119,
+ 53,242,115,174,149,105,111,177,253, 51, 36, 90,221,250, 17, 88,143,238,116, 43, 78,139,197,130,207, 62,251, 12,241,241,241,136,
+143,143,175, 50, 38, 39,195,161, 93,158,187,163,193,114,199,108, 85,166, 41,203, 18,209,234,253,161,247, 10, 66, 76,140, 63,100,
+ 55,230,234,116,204,133,223,161,247,221,152,146,146,226, 27, 26, 26,138, 11, 23, 46, 16,252, 83,143, 85,138, 90,173,126, 26, 14,
+163,253, 42,253,188, 3, 39, 87,172, 88,209,188, 69,139, 22,152, 63,127, 62, 0,252,223,103,191,253,246, 84,188,169, 56,157, 89,
+ 50, 37,195, 86,119,226,148,168, 68,180,122, 63,232, 12, 37,175,163,236,254,156,167,142,239, 92,249, 56,237, 23,191, 91,252,161,
+ 87, 65,211,190,255,223, 9,155,208,167, 87, 8,254, 56,116, 18, 59, 83,189, 16,170, 73, 71,160, 49, 11,114,214, 95,248,207,144,
+214,248,226,151,226,139,248,201, 35,174, 53, 9, 33,216, 63,118, 56, 12, 90, 13, 6,175,216, 12,165, 82,137,221,111,189, 0,149,
+ 74,133, 46,179,139,187,100, 79,125,246, 46, 20, 26, 53,162,198,196,187, 21,103,249,158, 26,123,205,149, 29, 87, 53, 88, 85,157,
+123, 97, 97, 33,114,114,114,240,195, 15, 63,224,165,151, 94,194,245,235,215,113,229,202, 21,156, 63,127, 30, 43, 87,174, 44,115,
+141,115, 55, 78,165, 82,137,137, 19, 39,226,157,119,222, 1,199,113,104,222,188, 57,226,227,227,209,161, 67,213,183,156,113,231,
+125, 47,143,171,236, 85, 85,154,115,231,206,245,120,192,214,253,136, 71, 5, 26,246, 76, 86, 64, 64, 0,188,188,188, 0,160,204,
+ 5,214, 85, 55,161, 51, 77, 81, 20,161,211,233,160,211,233,202, 76,139,240,196, 19, 79,184,204, 96, 1, 0,165,116, 43, 33,228,
+217,232,232,232,165,241,241,241, 94, 93,187,118, 85, 6, 5, 5, 33, 46, 46, 14,231,207,159,199,166, 77,155,108, 11, 22, 44, 48,
+ 26,141,198,151, 40,165,219, 61, 14, 18, 32,246,194,111,199, 25,237, 61, 65,146,164,148, 43, 87,174, 4,126,254,249,231, 60, 33,
+ 4,115,230,204, 41, 51, 65,107,249,115, 60,120,240,160,232,170, 75, 70, 20,197,148, 43, 87,174, 4,206,154, 53,171,140,166,253,
+ 81,222,164,184,163,233, 12,251, 57,151,127, 13,220,249,240,184,154, 72, 84,161, 80,224,220,185,115,152, 60,121, 50, 8, 33,101,
+ 6, 78,220,203, 28, 56,156,190,228,161, 54, 65,254, 79, 15,233,222,130,128,131,181,146, 76, 47,127, 35, 23, 64,177,185, 26, 56,
+107, 21,214,188, 83,113,210,197,242,104, 52,154, 43,123,246,236,105, 48,109,218, 52,158,231,121,204,156, 57,179,204,255, 82,249,
+247,253,247,223,127,151,116, 58, 93,114,117,207,195,102,179,185, 28, 69,229, 20,142, 59, 48,111,230,228, 30,223,124,183, 65, 73,
+136, 21, 9,123, 86, 35, 47,183,242,161,233,106,165, 2,203, 87,172, 23, 21, 60, 87,189,162,146,154,227,155, 71, 31,125,116,210,
+142, 29, 59, 20,161,161,149,205,110,224, 30, 33,192,134,121,243,230,245, 26, 54,108, 88,173,102,205,154,217, 7,159,168, 75, 30,
+ 32,197, 51,187, 59, 53, 88,142, 80, 96,221, 23,159, 79,254,191, 69,223,109, 80,115,196,134,132,189,171,145, 87,206,172,151, 71,
+165, 82,226,199, 21,235,108, 10, 5,127,174,170,118,246,121,242,110,199, 5, 49,182,207, 75,248,106,243, 98,212,109,209, 11, 67,
+251,117,196,254,249,255,135, 39,155,153, 96,251,233, 25, 52, 31,186, 28,203,222, 45,206,222,180,250,249, 93,151, 90, 28,199,193,
+199,240,207,132,149, 28,199, 65,163,213, 65,169,254, 39,251,162,214,235,193,123,144,177,181,159,187,253,111,103,109, 60,129,231,
+121, 68, 68, 68,160, 81,163, 70,120,248,225,135, 17, 27, 27,139,110,221,186,225,196,137, 19, 56,113,226, 4,198,140, 25,227,212,
+ 92,185,138, 83,165, 82,161, 71,143, 30,232,217,179,167, 71,251,187,210,116, 86,107,125,171,154,149,189,118,163, 71,143, 6,128,
+ 91,205,102,221, 19, 84,203, 96,213,169, 83, 7,106,181,186, 90,134,170, 50, 77,171,213, 90,106,172,116, 58, 93,105,198,106,253,
+250,245,165,109, 92, 65, 41,221, 78, 8,137,249,224,131, 15,222,212,233,116,221, 76, 38, 83, 20, 0,232,245,250,191,140, 70,227,
+ 46,155,205, 54,151, 82,154,123, 43,177, 58, 26,140,242,184, 42,114,207,202,202,122,252,249,231,159,223,206,113, 92, 67,251,249,
+149,127,118, 68,150,229,171,153,153,153, 85, 14, 85,207,202,202,122,252,185,231,158,171, 84,179, 50, 93,119, 52, 43, 67,146,164,
+ 50,166,202,113,132,161, 59,184,154, 72, 84,169, 84,194, 96, 48, 96,237,218,181,168, 93,187,182,167,225,221,213,252,113, 36,253,
+179,170,182,119, 13,208,236, 1, 80,103,224,172, 85,201,187,179,173, 97, 93, 3,212, 73,107,222,121,170, 65, 85,251,216,108,182,
+135,102,204,152,177, 95, 16,132, 48,119, 98, 80,171,213, 73, 22,139,165,163,219, 65,151, 64, 41,197,185,115,231,228, 87, 94,121,
+ 37, 59, 43, 43,107,168,167,251, 3,192,222,132,164,217, 29,219, 5, 5, 12,233,223,177, 45, 8,129,213,234,164,168,151,128, 82,
+ 74,169,130,231, 82,246, 28, 76,121,165, 58,199,170, 41, 40,165,199, 9, 33, 83, 35, 35, 35, 71, 0,112,118, 37, 92,233, 74,231,
+ 42, 96, 85, 91, 44,159,183,105,211,102,252,123,239,189,231,215,175, 95, 63,132,134,134,194,215,215,243,187, 5,237, 63,148, 58,
+162, 67,155,192,144,193, 79,116,124,156, 35,132, 90,156,189,142, 37, 16,251,235,169,224,207,237, 57,152,210,210,121,187,127,230,
+ 76,187, 29,217,134, 71,134,188,136, 71,134,188, 8,160,248,255,105,231, 47, 93,145,152,246, 27,226,184, 52, 88, 22,117, 4,241,
+177,255,171,187,158,230,134,227, 56,244,251,110, 45, 84, 42, 85,105,156, 15,205, 40, 59, 46,160,241,107,238,223, 75,221,241,220,
+ 1,231,181, 86,158,214, 96,241, 60,143,236,236,108,156, 63,127, 30,153,153,153, 48, 26,141, 56,123,246, 44,172, 86, 43,114,114,
+114, 96, 31,105, 88,157, 56,107,234, 61,186,147,154,255, 11,198,202,142, 71, 6,139, 82,154,218,190,125,251, 42,219, 72,146,228,
+209, 40, 35,133, 66, 97,238,216,177, 35,169,108,180,129,253,111,157, 78,231,214,207,231, 18, 3, 21, 15, 32,158,148,184, 11,171,
+181,252, 93, 15, 61, 71,146,164,244,118,237,218,241, 85,213, 36,200,178, 92,229,140,113, 89, 89, 89, 69, 0,106,244,214,225,183,
+ 67,179, 60,132, 16,105,196,136, 17, 85, 58, 41, 47, 47,175, 42,139,139, 92, 77, 36,106, 52, 26, 51,158,127,254,121,201,177,171,
+217,113, 34,210,251, 26, 66,147,122, 63,253,114,216,238,108,107, 24, 0,216, 77, 22, 40, 77,114,182,203,159,127,254,153, 9, 32,
+242,118,135,118,249,242,101,107,251,246,237,127, 44, 40, 40, 24, 77, 41,117, 62, 97,143, 11,246, 31, 78,119,157,158,184,203,160,
+148, 30, 7, 48,242, 86,117,172,192,217,122,102,243,168,248, 15, 63, 28, 60,249,195, 15, 27,203, 64,109,148,204, 81,197,187, 97,
+210, 28, 73, 56,146, 81,227,115,131, 73,146,148,250,208, 67, 15,121,188,143,171,237, 85,204, 36,142,255, 34, 20, 40,215, 37,232,
+142,230,237,136,211,174,217,162, 69, 11,180,106,213,170,244,217,142,227,250,216,216, 88,183, 52, 91,183,110,141,102,205,154, 57,
+157,161,189,124,205,213,157, 62,119, 59,246,159,190,177,177,149,143,236,188, 19,113,222,235,144,154, 40,100,117, 42,126, 15,214,
+205, 48, 77,166,201, 52, 75,219,240,148, 82,183, 43,243,239,167,115,103,154, 76,147,105,254,251,154,247, 27,255,187,213,103, 12,
+ 6,163, 74, 60, 49, 87, 12, 6,131,193, 40, 11, 1, 80,105,135,176, 39,206,148, 16,226, 89,167,178, 27,250, 76,147,105, 50, 77,
+166,201, 52,153, 38,211,188,255, 52, 93,105,223, 47,153, 49,214, 69,200, 52,153, 38,211,100,154, 76,147,105, 50,205, 59,174,121,
+191,193,186, 8, 25, 12, 6,131,193, 96, 48,106, 24,207,111, 84,198, 96, 48,238, 43,166, 16,114, 75, 63,180, 38, 83,122,235,243,
+181,184,193,189, 18, 39,131,193, 96, 0, 44,131,197, 96, 48, 24, 12, 6,131, 81,227, 48,131,197, 96, 48, 24, 12, 6,131, 81,195,
+ 48,131,197, 96, 48, 24, 12, 6,131, 81,195,220,214, 81,132, 12, 6,227,238,231, 94,169,109,186, 87,226,100, 48, 24, 12,128,101,
+176, 24, 12, 6,131,193, 96, 48,106, 28, 5, 80,246, 70,197,148, 82,231, 55,220, 99, 48, 24, 12, 6,131,193,184, 13,220,111, 94,
+164,116,154,134,251,225,100, 24, 12, 6,131,193, 96,220,187,220, 79, 94,164,180,139,208,209, 57, 50, 24, 12, 6,131,193, 96,252,
+219,220, 79, 94,164,212, 96,221, 79,174,145,193, 96, 48, 24, 12,198,189,199,253,228, 69,202,100,176,238, 39,231,200, 96, 48, 24,
+ 12, 6,227,222,226,126,242, 34, 10,224,254,114,140, 12, 6,131,193, 96, 48,238, 61,238, 55, 47,114, 91,167,105, 32,132, 52,103,
+154, 76,147,105, 50, 77,166,201, 52,153, 38,211,252, 95,131,205,131,197, 96, 48, 24, 12, 6,131, 81,195, 48,131,197, 96, 48, 24,
+ 12, 6,131, 81,195, 48,131,197, 96, 48, 24, 12, 6,131, 81,195, 40, 92, 55, 97, 48, 24,247, 51,247,202, 61,250,238,149, 56, 25,
+ 12, 6, 3, 96, 25, 44, 6,131,193, 96, 48, 24,140, 26,135, 0,168,116, 36, 0,165,244,148,219, 34,213, 24, 77,224, 74,159,105,
+ 50, 77,166,201, 52,153, 38,211,100,154,247,159,166, 43,109, 79,252,199,221, 12,161,244,246,205,231, 69, 8,105, 94,211, 47, 20,
+211,100,154, 76,147,105, 50, 77,166,201, 52,239, 63,205,251, 13,214, 69,200, 40, 3, 33, 68, 65, 8,113, 90,155,231,106,251,191,
+165,201, 96, 48, 24, 12,198,221, 12,187,168, 49, 74, 33,132,116, 0,208,183,228,239,141,148,210, 4, 79,182,255, 91,154,119,138,
+184,184, 56,157, 86,171,237,241,251,239,191,171,206,157, 59,135,131, 7, 15,210,255,254,247,191,130,217,108,254, 45, 49, 49,209,
+116,167,227, 99,212, 12,173, 91,183,126,156, 16, 50, 1, 0, 40,165,159, 30, 61,122,116, 91,117,181, 8, 33, 36, 50, 50,114,140,
+ 90,173,238,173, 84, 42,131, 36, 73, 34, 22,139, 37,221,100, 50,109, 79, 75, 75,155, 69,171, 81,184, 79, 8,105, 27, 16, 16, 48,
+ 50, 38, 38,166,241,229,203,151, 83,146,147,147,151, 3,216, 6,224,241, 6, 13, 26, 60, 31, 17, 17, 17,122,250,244,233, 11,217,
+217,217, 11, 41,165,127,222,169, 56, 25,140,255,117,220, 50, 88,132, 16,206,223,223,255, 49,157, 78,247,102, 97, 97, 97,107, 31,
+ 31,159,211,162, 40,206,203,200,200,216,200, 62,120,247, 7, 37, 25,164,190,148, 82, 37, 0,240, 60,223,191, 67,135, 14, 97,132,
+ 16,153, 16, 66, 41,165,132,227,184, 88, 73,146,184,146,246,125, 9, 33,127, 82, 74,197,234,106,138,162,232,177,230,237, 34, 38,
+ 38,102, 26,165, 52,168,170, 54, 94, 94, 94,109,118,238,220,217,116,221,186,117,226,242,229,203,115,159,122,234, 41,195, 11, 47,
+188,160, 88,182,108,217, 87, 0,254, 83,190,125,116,116,244,108,142,227, 2,220, 57,190, 44,203,217,103,206,156,121,187,154,225,
+ 51,106, 16, 66,200,132,151,103,236,238, 44, 83, 96,233,196, 46, 28,138,205, 75,181,136,141,141,253,126,192,128, 1, 79, 55,105,
+210, 68, 33,203, 50, 4, 65,128,197, 98,105,122,244,232,209,174,219,182,109,107, 3, 96,168,135,177,245,157, 56,113,226,226,169,
+ 83,167,214, 81, 42,149, 68, 16,132, 7,127,250,233,167,158, 35, 71,142, 60,190,112,225,194, 86, 79, 62,249,164,183,125,253,228,
+201,147,123, 17, 66,222,162,148,174,252,183,227,100, 48, 24, 46, 12,150,183,183,247, 3,117,234,212,121,167,118,237,218,189,218,
+180,105,147, 55,124,248,240,191, 79,156, 56,113, 54, 38, 38,166,240,187,239,190,251, 68, 16,132, 5, 77,154, 52,249, 45, 63, 63,
+127,214,181,107,215,206,122,114, 96, 66,200, 3, 0,134, 3,232, 5, 32, 4, 64, 58,128, 45, 0, 22, 83, 74,207, 85,231,100,130,
+131,131, 91,120,121,121,141, 39,132, 60, 88, 84, 84, 20,226,229,229,149, 78, 41, 61, 84, 80, 80, 48, 51, 35, 35,227,104,117, 52,
+ 67, 66, 66, 26, 1,120, 67,161, 80,116,146, 36,169, 33,207,243, 73,146, 36,237,147, 36,105,126,122,122,250,133,234,104, 62, 28,
+234,221, 79, 54,248,204, 18,120, 93,104,161, 89, 84, 25, 52, 10, 65, 41,155, 83,228,162,220,137,135,146, 11, 87, 87, 71,179,166,
+ 81,171,213,220,242,229,203, 91,169,213,106, 0,128,213,106, 69, 76, 76,204, 45,221, 39, 74,169, 84,114, 51,103,206,108,165, 82,
+169, 0, 0, 54,155, 13,221,187,119,191, 43,238, 61, 69, 8, 9, 73, 76, 76,244,181,199, 86, 30, 73,146,208,191,127,255,112,181,
+ 90,141,133, 11, 23,138,217,217,217,173,151, 46, 93,154,248,213, 87, 95, 5,124,255,253,247, 67, 80,137,193,226, 56, 46,192,153,
+166, 36, 73,176,217,108, 16, 69, 17, 86,171, 21,221,186,117,171,241,115, 98, 84, 15, 74,105, 24, 5,176,229,132, 25, 0,106,223,
+138,150, 78,167,139, 26, 56,112,160, 34, 43, 43, 11, 74,165, 18, 54,155, 13,215,174, 93, 67,163, 70,141,120,171,213,218,196, 83,
+189,166, 77,155,142,156, 62,125,122,221,205,155, 55,219,126,252,241, 71,203,163,143, 62,170,122,233,165,151,124, 58,119,238,220,
+ 41, 36, 36,132, 91,186,116,169,101,199,142, 29,182,231,158,123, 78, 51,109,218,180,186, 91,182,108,121, 26,128, 75,131, 85,211,
+113, 50, 24,140, 42, 12,150,183,183,247, 30,131,193, 16,249,234,171,175,158, 27, 61,122,244,111, 6,131, 65, 2,128,107,215,174,
+105,250,247,239,159, 53,104,208,160,235, 70,163,145, 95,176, 96, 65,131, 47,191,252,114,187,183,183,119, 90, 65, 65, 65, 59, 87,
+ 7, 36,132, 16, 0,111,114, 28,247, 70,143, 30, 61,246, 8,130,144,181,118,237,218,159,135, 12, 25,210, 81,150,101,175,223,127,
+255,125, 19, 33,228, 27, 0,159,187,155, 29, 35,132,240, 17, 17, 17,241, 33, 33, 33, 99,191,254,250,107, 77,195,134, 13,161,215,
+235, 81, 80, 80,208,224,194,133, 11,161,111,190,249,230, 19,141, 26, 53,154,231,235,235,251, 65, 98, 98,162,224,166, 38, 9, 10,
+ 10,250,143,143,143,207,199,159,124,242,137, 54, 58, 58,154,232,245,122, 92,189,122,181,121, 66, 66, 66,204,183,223,126,251, 82,
+ 72, 72,200,148,180,180, 52,183,227,236, 74,136,194, 18, 89,103,155, 95,211,118,221, 22, 46,254,150, 4,120,233,161, 32, 4,130,
+205,166,204, 52,154, 34, 94, 31, 53,226,231, 14,141,235, 31, 40, 80,102, 62,114,230, 12,181,185,163, 89, 83, 80, 74, 69, 66,200,
+ 70,158,231,251,171,213,106,174,127,255,254,216,177, 99, 7, 49,155,205, 10, 0,208,106,181, 98,255,254,253,161,211,233, 96,181,
+ 90,101, 0, 27, 75,246,209,148,236,111,169, 74, 83,169, 84,114,221,186,117, 51, 30, 57,114,228,134,209,104, 84,218, 53,187,117,
+235, 86, 75,163,209,232, 5, 65,112, 75,243,118,162, 86,171,113,233,210,165, 50,235, 36, 73,194,245,235,215,113,227,198, 13, 88,
+ 44, 22,146,147,147, 3, 73,146, 96,177, 88,178, 36, 73, 2,199, 21, 39,223,156,105,170, 84, 42,156, 63,127,190,194,122,155,205,
+ 6,147,201, 4, 65, 16,144,159,159,175,211,106,181,145,157, 58,117, 74, 5,176,174,176,176,112,214,241,227,199,147,106,246,236,
+ 24, 30,144,188,233,152,185, 1, 0, 27,128,203,183, 34, 68, 8,145, 1, 96,223,190,125,200,204,204, 68, 86, 86, 22,178,178,178,
+ 16, 26, 26,138,234,100,255,207,157, 59, 55, 55, 54, 54,150, 28, 63,126,124, 3,128,197,171, 86,173, 26,120,243,230,205,175,199,
+141, 27, 87,107,230,204,153, 55,199,143, 31, 63, 10,192,154, 85,171, 86,189,216,162, 69,139,126, 39, 79,158,252,226, 78,196,201,
+ 96, 48,170, 40,114,167,148, 6, 61,240,192, 3, 55,231,204,153,211,116,226,196,137,181, 11, 11, 11,121, 0, 8, 10, 10, 50, 3,
+128,209,104,228, 39, 76,152, 80,103,198,140, 25, 77, 53, 26, 77,142, 40,138,117, 42,209,168,108,132,193, 27, 62, 62, 62, 79,252,
+253,247,223,171,154, 54,109, 90,107,250,244,233,199,188,188,188,232, 23, 95,124,113,180, 81,163, 70,129, 73, 73, 73, 63,248,248,
+248,116, 7, 48,214, 73, 92, 21, 52,195,195,195, 39, 15, 25, 50,100,236,129, 3, 7, 52, 45, 91,182,132,183,183, 55,120,158,135,
+159,159, 31,218,183,111, 79,246,238,221,171,233,221,187,247,152,188,188,188,153,238,106, 6, 7, 7,143,237,217,179,231, 39, 71,
+142, 28,209, 61,242,200, 35,220, 36, 14,212, 0, 0, 32, 0, 73, 68, 65, 84, 68,173, 86, 35, 55, 55, 23,106,181, 26, 29, 58,116,
+ 32, 95,127, 53, 95,215, 60,186,217,228,144,144,144,169,238,106, 90, 30, 8,216,254,212,232, 9,221, 55,110,217, 70,234,213,171,
+135,191, 63,159,138,125,157, 99,112,241,163,137, 8, 12, 12,196,134,205, 91, 73,223, 97,163, 59,250, 8,245,126,119, 87,243, 86,
+113,212,164,148, 38,196,196,196, 36,158, 61,123, 22,157, 58,117,194,207, 63,255,220,114,220,184,113,163,199,141, 27, 55,250,231,
+159,127,110,217,169, 83, 39,156, 61,123, 22, 49, 49, 49,137,148,210, 4, 66,200,104, 0, 55, 1,220, 44,249,219,169,230,158, 61,
+123,208,189,123,247,156, 85,171, 86, 53,154, 52,105,210,180, 73,147, 38, 77,251,249,231,159, 35,186,119,239,158,179,103,207, 30,
+143, 52,111,199,185,219,145, 36,169,194,131, 82, 10, 89,150, 81,183,110,221,235,155, 55,111,166,125,251,246,229,235,215,175,159,
+222,191,127,127,205,161, 67,135, 40, 33,100,163, 39,113, 82, 74, 97, 50,153, 96, 50,153,112,249,242,101,221,188,121,243, 58,142,
+ 29, 59,246,129,159,126,250, 41,120,204,152, 49,163,124,124,124,142,182,106,213, 42,204, 19, 77, 79, 97,154,206,225, 56,238, 26,
+138,205, 85, 17,199,113,201,213,213, 28, 60,120,112,243,176,176,176,122, 63,157,246, 71,142,170, 41, 36,165, 47,100,149, 31,164,
+218,109,113, 81,213, 19, 65, 65, 65,245,194,194,194, 58,120,162, 73, 41,221,126,236,216,177, 94,148,210,133,148, 82,137, 82,250,
+203,248,241,227, 95, 33,132,172, 30, 63,126,252, 8, 74,233, 47, 37,235,151,156, 56,113,162, 31,165,116,215,157,136,243, 86, 97,
+154,255,155,154, 46,104, 11,160, 79,201,163, 29,128,246,229,150,213,229,218, 61,234,228,185, 79,185,229,182,229,246,179, 47,223,
+ 50,246,218, 23,106,127,216, 55, 16, 66,132,207, 62,251,236,224,183,223,126,187, 35, 35, 35, 35, 48, 34, 34,162,207,192,129, 3,
+195,242,243,243,185, 65,131, 6,133, 7, 6, 6,246,221,181,107, 87,253, 65,131, 6,253, 62,100,200,144, 4, 66,136,203,186, 25,
+ 66, 72, 35,158,231,223, 58,126,252,248,254,240,240,112, 91,122,122,186,119,108,108,108, 1, 0, 52,110,220,216,120,227,198, 13,
+157,183,183, 55, 54,111,222,124,152, 16, 50,156, 16,210,212,149,102, 80, 80, 80,108, 64, 64,192,216,143, 63,254, 88,195,243,124,
+165,109, 52, 26, 13, 62,254,248, 99,141,143,143,207,171,193,193,193, 15,186,210,172, 95,191,126,148,183,183,119,252,188,121,243,
+180, 86,171, 21, 54,155, 13,245,234,213,131,193, 96, 64, 70, 70, 6,210,174, 92,193,245,171, 87, 49,230,229,151,117, 94, 58,221,
+ 91, 65, 65, 65,173, 92,105,118, 10,247,238,111, 8,110,214,245,245, 55,222,196,153, 55, 95,198,142, 96, 53,234,191, 49, 1, 45,
+119,159, 66,200,148, 89,216, 21,225,131,196,161,143,225,173,183,222,129,170,110,196, 67, 15,133, 26,158,114,165,121, 59, 80, 40,
+ 20, 84,163,209,192,108, 54, 43,246,237,219,215, 73, 20, 69,165, 40,138,202,189,123,247,118,253,237,183,223,122, 77,159, 62,253,
+113,157, 78, 55,170, 67,135, 14,223, 19, 66,230, 82, 74,117,148, 82, 29,128,153,246,204, 83,101,154, 74,165, 18, 38,147, 73,121,
+228,200,145, 17,146, 36,169, 37, 73, 82, 31, 57,114,228,181, 93,187,118, 61,191,112,225, 66,143, 53,255, 45,120,158,135, 66,161,
+128, 82,169, 68,171, 86,173,254, 94,177, 98,133, 16, 20, 20,164, 88,180,104,145,127,221,186,117,189,190,255,254,251,220,156,156,
+156,207, 60,209,180, 90,173,176, 88, 44, 48,153, 76,216,183,111, 95,195, 87, 95,125, 85, 97,181, 90,165, 97,195,134,221, 20, 4,
+193,242,218,107,175,249, 24, 12,134,119,110,215, 57, 49,170,134, 82, 42, 1, 40, 2, 80,104,207,162,134,135,135,107,130,131,131,
+ 91,132,135,135,187,253,255, 88, 88, 88,248,205,236,217,179, 67, 56,141, 31,246, 91,123, 99, 21,157,138,237,126, 95, 33, 43,124,
+ 28,234,133, 62,128,158, 61,123,214, 37,132,204,175,129,120,215, 81, 74,135, 80, 74,127,173,206,254,183, 59,206,182,109,219,118,
+106,211,166,205,145,184,184,184,140, 54,109,218, 28,105,219,182,109,167,234,106,217,153, 58,146, 60,250,233, 27,124,234, 71,163,
+ 8,253,244, 13, 62,117,234, 72,242,232,173,106, 50,238, 60,149,121, 17, 7,234, 16, 66, 54, 18, 66, 54,190,251,238,187,221, 0,
+212, 46,183,252,144, 99, 59, 0,234,202,158,237, 15,135,245,117, 80,108,172,234, 56, 44,215, 8,165, 93,132,148,210, 74,187, 57,
+234,212,169, 99,125,239,189,247,142,155,205,230, 83,223,127,255,125,228,232,209,163, 99,195,194,194,206, 15, 26, 52,104,147, 94,
+175, 23,237, 53, 58,110,242,114,239,222,189, 55,215,170, 85,139,100,103,103,171,172, 86,171,226,218,181,107, 42, 73,146, 8,207,
+243,212,104, 52, 42, 46, 94,188,168,180,217,108,242,131, 15, 62,184, 62, 33, 33, 97, 56,128,183,170, 18,212,235,245,175, 45, 90,
+180, 72,235,204, 92, 73,146,132,194,194, 66,136,162,136, 41, 83,166,104,199,142, 29,251, 38,128,131, 85,105, 42,149,202, 49,115,
+230,204,209,218,187,128,100, 89,198,209,163, 71,145,125,253, 58, 44, 5,249,176, 22,228,195,154,151, 3,174, 48, 15,207,247,122,
+ 92,187,240,215,181,111, 3,120,190, 42, 77,171,198, 48,227,251,197,223, 66,146, 36,164,175,173,188, 36,226,230,129,221,144, 68,
+ 1,211, 62,157, 73,222,122,249,201,233, 0, 86, 85,165,249,111,162, 86,171,185,207, 63,255,188,169, 90,173, 6, 33,132, 90,173,
+ 86, 68, 71, 71,223, 82,253,148, 90,173,230,231,206,157, 27,171, 82,169,136, 93,179,121,243,230,119, 69, 77,150, 35, 42,149, 10,
+ 58,157, 14,225,225,225,166,126,253,250, 37,204,157, 59,183, 1,207,243,122,133, 66,177, 53, 47, 47,111,250,233,211,167, 61,234,
+ 70,178, 88, 44, 48,155,205, 48,155,205, 72, 78, 78,174, 31, 25, 25, 73,254,243,159,255, 72, 69, 69, 69, 17, 75,150, 44,185,180,
+106,213, 42,253,252,249,243, 7, 1,120,227, 54,157, 18,195, 9,145,145,145,106, 31, 31, 31,223, 6,181, 21, 69, 74, 30, 69, 25,
+162, 88, 47, 36, 36,100, 2,128, 54,141, 27, 55,246,191,120,241, 98, 78,112,112,240, 65,142,227, 86,166,164,164,100, 84,165, 69,
+ 41, 37,162, 40, 98, 68,187, 92,140,122,144,131, 40,138,200,205,205, 69,114,114, 50, 78,159, 62,141, 67,135, 78, 87, 43,198,134,
+ 13, 27,190,172,213,106,123,168,213,234,112, 73,146, 56,163,209,152,100,177, 88,118,164,167,167,127, 67,171, 49,177,225,237,138,
+211, 65,127,214,192,129, 3,131,124,125,125,113,236,216,177,160, 19, 39, 78,204, 2,208,230, 86, 52,213, 74,110,233,176, 87,230,
+ 7,215,242,243,195,213,179, 27,130,215,109,249,105, 41,138,107,121, 25,247, 56,206,188, 8,128, 44, 74,105,233,136,243,233,211,
+167,247, 45,105,223,215,113,217, 13,253, 10,237, 74, 70,176,187,181,191, 39,148, 26, 44,251, 72, 49,103, 13,181, 90,173, 52,114,
+228,200,243,235,215,175, 15,111,211,166,205, 95,206,138,129, 93,240,112,211,166, 77,147, 14, 31, 62, 76,235,212,169, 99,149,101,
+153,232,245,122, 73,167,211,201,121,121,121, 16, 4,129, 38, 37, 37, 41,146,147,147, 85, 1, 1, 1, 42,184,145,170, 83, 42,149,
+ 29, 26, 54,108, 88,233, 54,171,213,138,194,194, 66, 20, 20, 20,192, 98,177,160, 94,189,122,132,227,184,246,174, 52, 57,142,235,
+216,180,105, 83,146,147,147,131,160,160, 32,236,223,191, 31,133,121,185,176, 20, 20,192,146,151, 11, 91,126, 30,164,252, 92,228,
+ 94,207, 64,120, 96, 8, 41,153,106,160, 74, 68, 94, 23, 86,215,224,133,139, 83, 39,160,237,209, 36, 16,165, 10,135,155, 7,130,
+ 10,197,165, 86,237, 78,166,131,168,212,248,107,204, 11,168,255,236,171, 16, 56, 77,176, 43,205,219,129, 40,138,196, 98,177, 64,
+171,213,138,157, 58,117,218,199,243,124, 87,181, 90,205,141, 26, 53, 10,215,174, 93,179, 55, 35, 0, 48,106,212, 40,232,116, 58,
+ 88, 44, 22, 17,192, 56,103, 53, 83,162, 40, 18, 65, 16,160,211,233,132, 54,109,218,124,195,243,252,107,106,181,154,111,210,164,
+ 73,230,140, 25, 51,210,189,188,188,188,146,147,147,111,170,213,234,212,240,240,240,118, 58,157, 46,204,149,230,191,137, 70,163,
+129, 66,161, 0,199,113,168, 93,187,118,209,141, 27, 55, 14,253,253,247,223,207, 84, 71, 75,146, 36, 88,173, 86, 8,130, 0,179,
+217, 12, 89,150,113,226,196, 9,104, 52, 26,165, 36, 73,167, 37, 73,210, 43,149, 74,240, 60,207,230,168,251,151,137,139,139,235,
+218,178,190,207,172, 81,129, 22,255, 70,125,189, 10,245, 26,190,232,233,181, 66,219, 71, 31, 29,250,248,184,113, 19, 12, 1, 1,
+ 1,234, 43, 87,174,152,191,248,226,139,134,107,214,172, 33, 0, 62,175, 74, 47, 61, 61,125,245,140, 25, 51,106,117,237,218, 53,
+ 66,169, 84,146,220,220, 92,100,101,101,225,250,245,235, 72, 78, 78,166, 87,175, 94,253, 91, 20,197,159, 61,137,177,101,203,150,
+ 75,158,125,246,217, 97,209,209,209, 74, 74, 41, 4, 65,128,209,104,140, 61,116,232,208, 19,251,247,239,239, 4,192,227,255,203,
+140,140,140,159, 63,253,244, 83,175, 46, 93,186, 52, 85, 42,149, 92, 77,196,233, 8,165, 52,200, 96, 48, 96,199,142, 29,240,241,
+241,129,171,209,186,238, 96, 19,229,224, 90,126,181, 97,190, 48, 27, 65, 62, 97,176,137,242, 29,249,190,100,212, 60, 85,120,145,
+ 63, 1,244,185, 85, 51,116,187,204, 84,101,184,204, 96,217,185,118,237,154,166,176,176, 80, 33,203, 50,103,177, 88,148,178, 44,
+ 67,169, 84,186, 85, 48,238, 64,244,192,129, 3, 15,182,109,219,214, 8, 0,106,181, 90,244,245,245, 21,243,242,242, 80, 98,176,
+100,133, 66, 97, 54, 24, 12,230,136,136, 8, 0,112,217, 69,104, 50,153, 26,232,116,186, 10,235,141, 70, 35, 10, 11, 11, 75, 13,
+150,209,104,132,143,143, 15,138,138,138, 92,126,184, 37, 73, 10,215,235,245, 72, 79, 79, 7, 0, 20,230,230,192,156,159, 15, 91,
+ 65, 30,108,185, 57, 16,242,114, 33,228,229,128, 51,153,224, 23, 18, 10, 81, 20, 67, 93,105, 22, 89, 36, 53, 15,138,235, 27, 87,
+163,222,107,227,156,182,187,185,111, 23, 12,145, 77, 96, 50,217,254,245, 57,202, 8, 33, 29, 56,142,139,107,214,172, 25,250,247,
+239,143,161, 67,135,158,208,233,116,117,231,207,159, 31,157,150,150, 86,161,253,128, 1, 3,240,198, 27,111, 96,224,192,129, 63,
+ 28, 59,118,108, 65, 85,154, 93,186,116, 65,183,110,221,106, 13, 29, 58,244,170,193, 96, 72, 92,188,120,113,187, 41, 83,166,100,
+ 26,141,198,180,196,196,196, 22,169,169,169,250,198,141, 27,239,142,137,137,225, 54,111,222, 28, 86,149,230,191,141, 40,138, 16,
+ 4, 1, 54,155, 13, 22,139,197,229,103,197,145,242, 9, 5, 65, 16, 74, 71, 16,154,205,102, 8,130, 64,214,173, 91,139, 13, 27,
+ 54,112,103,207,158, 9,153, 56,241, 93,228,230,230, 66,146,164, 26, 63, 15, 70,229,180,105,211,166,151,130,202,139,158,171, 47,
+106,159,171, 39, 22, 42, 56, 90,120,225,219, 15,138, 78,248, 41, 44,150, 34,226,253,254, 7, 31,248, 95,186,116,201,246,233,167,
+159,102,244,239,223, 95,251,202, 43,175, 52,219,188,121,115,167, 6, 13, 26,124,155,156,156,156, 91,153, 38, 33, 68,245,242,203,
+ 47, 31,244,247,247,111,244,227,143, 63,102,166,167,167,215, 18, 4, 65,111,181, 90,109, 86,171,245,146,205,102,219,111,181, 90,
+119,100,100,100, 36,122, 18,171,193, 96,104,249,212, 83, 79, 41,115,114,114,160, 80, 40, 96,179,217,144,149,149,133,214,173, 91,
+243, 59,119,238,140,174,206,249,159, 57,115,102,118, 80, 80,208,238, 13, 27, 54,244,240,242,242,138, 83,171,213,245, 37, 73,146,
+204,102,115,166,217,108, 62, 94,157, 56, 29, 33,132,164, 31, 61,122, 52,200,219,219, 27,105,105,105, 32,132,164, 87, 87,203,142,
+ 74,201,165, 92,253,107,125,104,144, 79, 67,156, 59,119, 16, 42, 37,151,114,171,154,140,187,131, 42,190, 95,219,150,108,239,235,
+194, 36,153, 38, 78,156,248, 30, 33,100,227,196,137, 19,223,171, 68,223,190,159,228,216,206,161,125,141,253,168,175,242, 34, 94,
+ 80, 80,160,248,243,207, 63,107, 39, 39, 39, 27,234,215,175,111,140,137,137,201, 37,132, 80, 73,146,184,155, 55,111,122,165,166,
+166,106,253,253,253, 45,161,161,161,121,110, 30,239,194,235,175,191,222,101,210,164, 73,137,143, 61,246, 88, 54, 0,228,228,228,
+ 32, 43, 43,203, 62, 74, 11,233,233,233,220,145, 35, 71,106,109,221,186, 53, 22,110,140,224,209,233,116,201, 5, 5, 5, 77,252,
+252,252, 0, 20, 95,208,236,166,202,241,217,102,179,161,160,160, 0, 94, 94, 94, 46, 63,220, 28,199,165,165,165,165, 69,154, 76,
+ 70, 36, 93,188, 8, 75, 65, 30,108,249,121, 16,242,115, 33,228,230, 66,202,189, 9,174,176, 0, 6,157, 14, 5, 55,111,128,231,
+249,107,174, 52,189, 52,188, 85, 16, 37,117,157,158, 79, 0,196,249,245,217,175,125, 71,208,168,150,208,233,126,245,212,188,222,
+ 18,246, 57,171,236,115, 82,233,116, 58,124,242,201, 39, 72, 76, 76,148,171,234, 6, 86,171,213,224, 56,174, 82, 55, 80, 94, 83,
+163,209,232, 38, 77,154,164, 59,126,252,184, 86,173, 86,195, 96, 48,232,143, 31, 63,222,226,143, 63,254,224,140, 70, 35, 31, 25,
+ 25, 57, 48, 56, 56,184,176, 42,205,219,137, 40, 86, 44, 35, 20, 69, 17,133,133,133,165,117, 83, 55,111,222, 84,104,181,218,198,
+157, 59,119, 78,176, 90,173, 63,139,162,248, 93, 98, 98, 98,190, 51, 77,155,173,226, 96, 80, 89,150, 33,138, 34, 68, 81,132, 66,
+161,144,215,173, 91,143, 47, 23,204,197, 47,171,126,165, 93,186,116, 33,155, 55,111,134, 44,203,169, 53,123,118, 12,103,200,178,
+ 60,107,215,132,193, 90, 72, 82,161,101,247,138,162,109, 55, 20, 69,223,158,218,117,228,134, 96,209, 60,240, 64, 68,148,143,183,
+ 47,247,253,242,111,111,102,100,254,125,225,203, 47, 83, 67,167, 77,155,230, 23, 17, 17,225,123,254,252,249, 96, 0,149, 26, 44,
+131,193, 16,254,194, 11, 47,188,116,243,230, 77,229,226,197,139,151,165,165,165,237,165,148,254,237,216,134, 16,210,154, 16, 50,
+ 19,128, 18, 64, 61, 0, 34,128,237,148,210, 31,156,197, 90, 50,135, 28,118,239,222, 93, 97,180,159, 44,203,213, 30,237,151,145,
+145,145,211,190,125,251,150, 23, 46, 92, 88,151,147,147,243, 99,249,237,122,189,254,137,152,152,152,167, 15, 31, 62,252, 33,165,
+244, 82,101, 26,206,160,148,190,117,246,236,217,207,100, 89, 14,227, 56, 46,137, 82, 58,190,186,113,218,177,218,228, 87,214,111,
+ 89,181,216, 42, 72, 13,212, 74, 62,217,106,147, 95,189, 85, 77,198, 93,143,189, 70, 10,142,198,169, 18, 99,244,199,244,233,211,
+117, 51,102,204,192,244,233,211, 43,244,111,219, 53, 40,165,125,167, 79,159,126,218,222,206,161,253,222,154, 10, 88, 81,114,160,
+ 10, 87,124, 81, 20, 13,239,190,251,238,195,177,177,177,233, 93,187,118,205,104,216,176,161,209,190, 77,175,215, 91,253,252,252,
+172, 22,139, 69,147,158,158, 94,231,175,191,254,106, 40,203,114,197, 52, 82, 69,126,247,243,243,171,117,228,200,145,218, 43, 87,
+174,124,224,232,209,163, 97,207, 62,251,108, 23,139,197, 2,171,213,138,203,151, 47,135, 45, 90,180, 72, 86,169, 84,185,132,144,
+ 63, 1,184,188,200, 10,130,144,112,225,194,133,198,237,219,183, 39,130, 32,148, 49, 85,142,127,171,213,106,164,165,165, 81, 89,
+150, 15,185, 17,231,193, 35,135, 15, 71, 54,111,214, 12,150,188, 28, 88,243,115, 97,203,203,133,152,151, 11, 57, 63, 23, 92, 97,
+ 1,106,215, 82, 66,167,243,194,133,244, 12,148,196, 90, 37, 74,209,116, 53, 45, 47,191, 73,100,252,231,216, 21,225, 3, 42,216,
+ 74,187, 5, 1,148,118, 23, 62,244, 87, 22,246,253,145, 0,133,100,169,152, 50,250, 23,177, 90,173,242,160, 65,131, 14,115, 28,
+231,241,141, 62,157, 33, 8,130, 60,122,244,232, 82,205,148,148,148,155, 41, 41, 41, 90,147,201,196, 25, 12,134,194,154, 58,206,
+ 45,196, 87, 97,157,205,102,131,213,106,133,201,100, 66, 70, 70,134,122,251,246,237,157, 18, 18, 18, 84,103,206,156, 65, 66, 66,
+ 66,171,117,235,214,189, 27, 21, 21,213,242,175,191,254,170,212,100,151, 55,109,178, 44,195,126, 29,164,148,130, 82,202, 3,192,
+250, 53, 27,209,179,103, 79, 82, 80, 80,128, 13, 27, 54,212, 72, 55, 10,195,109,138, 32, 74, 58,235,158, 21, 69,239, 92, 84,231,
+159, 54, 42, 62, 78, 76, 76,220,214,187,119,239,125, 65,245, 34,124, 0, 64,163, 50,212,225,169,183,161, 78,157, 58, 26, 0, 8,
+ 10, 10,138, 19, 4, 97, 1,128,142,149, 9, 14, 24, 48,224,161,186,117,235,198,110,217,178,229,120, 90, 90,218,190,242,230, 10,
+ 0,154, 52,105, 50,229,212,169, 83,189,148, 74,101,233,247,111, 73,113,111,165, 6,107,240,224,193, 77, 66, 66, 66,106,111,190,
+224,139,124, 85, 36,100, 46, 23,148,215, 64,242,107,137, 36, 85, 52,234,213,251,171,118,100,100,100,171, 75,151, 46, 29,247,228,
+228, 9, 33, 13,158,124,242,201, 77, 75,150, 44,137,234,217,179,167, 26, 64, 5,131, 21, 21, 21, 53,104,231,206,157, 67, 70,141,
+ 26,213,146, 16,210,143, 82,122,209, 93,253,196,196,196, 3, 0, 92,150, 81,120,194,164,133,116, 7,128,176,154,212,100,220,121,
+ 92,244, 14,100, 57,100,159,178, 80,124, 47,101,199,101,251,255,189,213,161,109, 86,137,110, 95, 0,214,114, 89,175,202,182,101,
+ 1,168,177,228,134,211, 12,150,205,102,219,126,249,242,229,182, 79, 62,249,100,150,163,185,114,124, 1, 12, 6,131,197,199,199,
+167,240,240,225,195, 65,146, 36,237,118,227,120,139,119,238,220,185,107,222,188,121, 43,106,213,170, 37, 60,255,252,243,220,132,
+ 9, 19,246,221,184,113,131,222,184,113, 3,243,231,207,239,220,169, 83,167,125, 73, 73, 73, 82, 98, 98,226,139, 0,122,186, 18,
+ 52, 26,141, 95,189,246,218,107, 79,239,219,183, 79,107,181, 90,145,155,155, 91, 33,123, 37, 8, 2,120,158,199,130, 5, 11, 44,
+ 69, 69, 69,115, 93,105,138,162,248,205, 87, 95,125, 53,100,209,151,243,180, 10,193, 6, 99,110, 14,164,146, 7,111, 46,130, 65,
+203, 33, 50,182, 14,114,211, 53, 88,190,229,128, 73, 20,197,175, 92,105, 42,205,133,227, 70,141, 24,190,113,251,239,187, 80,187,
+ 99,119,100,239,218, 90,161,141,186, 78, 61, 88,109, 54,124, 60, 53,158, 18, 83,238, 4, 87,154, 53,137,125,206, 42, 66,136,253,
+ 31,112,227,177, 99,199, 18, 98, 99, 99,123, 89,173, 86,167,251, 89,173, 86,200,178, 92,233, 8, 3, 87,154, 26,141, 38,181, 73,
+147, 38,191, 55,106,212,104, 32, 0, 52,107,214,108, 13,199,113,221,171,210,188,157, 8,130,128, 73,147, 38, 97,198,140, 25,152,
+ 56,113, 34,128, 98,131,100,255, 1, 96,177, 88, 26,110,221,186, 85,125,224,192, 1,186,124,249,242,236,193,131, 7,251, 61,251,
+236,179,126, 63,254,248,227,127, 0, 84,250,126, 9,130,128,241,227,199, 99,225,194,133, 24, 57,114,100,133,237, 60,207,203,105,
+105,169,176, 88, 45,116,253,250,245,233, 10,133,194,255,139, 47,190,208,141, 29, 59,246,174, 43,246,191, 95,145, 36,233,253,142,
+179,215,189, 9,232, 4, 81, 20,231,158, 56,113,100, 55, 0, 12, 29, 58,180,238,236,217,179,213, 0,240,249,204,207,149,148, 82,
+165,125, 98,216,143, 62,250, 72, 59, 98,196,136,186,206, 52, 87,175, 94,157,243,209, 71, 31,213,126,229,149, 87,122,238,218,181,
+ 75, 75, 8,217,138,226, 26,146,108, 20,255,112, 12, 0,112,160, 78,157, 58,129,171, 86,173,138,236,209,163,135,151,171, 56,139,
+138,138,190,253,250,235,175,195,103,237,245,198,230,162,129, 72,161, 67, 65,107, 81,212, 82, 21,160,153, 33, 25, 93, 2, 83,130,
+126,252,241,199,197, 0,226,220, 61,119, 66, 72,244,224,193,131,215, 46, 89,178,164,225,240,225,195, 83, 15, 28, 56,144, 66, 8,
+153, 82, 73,211, 27, 47,188,240, 66,210,178,101,203, 34,101, 89,222, 70, 8,233, 73, 41,173,214, 68,203, 12, 70, 53,113,235,182,
+ 79,213,104,123,219,112,106,176, 68, 81,124,153, 16, 18, 51,113,226,196,207,130,130,130, 26,196,199,199, 95,105,214,172, 89,145,
+125,251,141, 27, 55, 12,123,246,236,137,200,207,207, 47, 16, 69,113, 24,165,244, 68,121, 13, 82,238,110,219,148,210, 36, 66,200,
+103,173, 90,181,122,250,167,159,126,218,227,237,237,157,127,240,224, 65, 31, 31, 31,159,188, 51,103,206,120,241, 60,111,252,251,
+239,191,177, 99,199,142,206, 0,190,172,236, 87, 82,121,205,244,244,244, 99, 13, 27, 54,252,124,236,216,177, 99, 63,252,240, 67,
+173, 44,203, 48,153, 76, 40, 40, 40,128,217,108, 46, 45, 78, 94,185,114,165,197, 98,177, 44, 74, 75, 75,171, 48,130,176, 18,205,
+132,208,208,208,133,115,191,152, 59,250,213,167,159, 84,211,220, 27,200,203, 48,129,152,139, 96,208,170, 17,221, 61, 24, 69, 55,
+ 8,150,236, 57, 98,189,105,181,173, 74, 75, 75,171, 96, 46,203,107,238, 79, 46,216,244,224, 3,117,119,124, 52, 53,254,209,119,
+191,251, 21,178, 44,227,175,215,158, 71,206,222, 29,208, 55,107,129,135,254,202,130,213,106,197,196,241, 99,193, 27, 51,247, 29,
+ 76, 46,252,197,149,102, 77,224,168, 89, 50, 15,213,159, 37,127,139,132,144,209,132,144, 97, 81, 81, 81, 24, 53,106, 20, 6, 12,
+ 24, 80,102,223,181,107,215,226,235,175,191,134,197, 98, 25, 70, 8, 57, 74, 41, 93,224,137,102,195,134, 13,219, 69, 71, 71,243,
+ 65, 65, 65, 70, 0,224,121,190,251,233,211,167,219, 70, 69, 69, 85,169,121,155,206, 61,231,226,197,139, 62, 51,103,206, 36, 54,
+155, 13, 83,166, 76,129,221, 88,218, 51, 78,239,191,255,126,144,183,183, 55,102,205,154,101,205,206,206,126,228,198,141, 27, 59,
+231,205,155, 23,176,114,229,202,103, 80, 98,176,202,105, 94, 63,123,246,172,247,194,133, 11, 57, 81, 20, 49,123,246,236, 10, 25,
+173,183,222,122, 11, 54,155, 0,165, 66,105,181,152, 45,209, 58,157,238,146,191,191,191, 78,150,101, 90, 89,156,183,227,220,255,
+215, 53, 79,156, 56,177, 29,192,118,103,237,237,117,116, 38,147, 9,217,217,217,200,206,206,134,175,175, 47,224, 48,193,108,121,
+ 77,147,201,116,124,252,248,241,137,223,124,243, 77,207, 63,254,248,227,201,189,123,247,246,222,177, 99,135, 57, 41, 41, 73, 20,
+ 4,129, 6, 6, 6, 42, 58,118,236,168,237,221,187,183,151, 70,163,225,222,127,255,253,236, 79, 62,249, 36, 0,192, 13,103,154,
+148, 82, 94,150,101,188,221, 41, 31,227,187, 41, 96,177, 20,255,160, 76, 79, 79,195,233,211,167,145,144,112, 14,132,144, 42, 7,
+ 71, 84,242,122,206,253,241,199, 31, 35,212,106, 53, 89,177, 98, 69,131, 21, 43, 86,140,113,245,250,253,240,195, 15,225, 43, 86,
+172, 88, 64, 8,121,148, 82, 42,223,171,239, 59,211,188,251, 52,239, 55,170,172,193,162,148,158, 6,208,147, 16,210,113,248,240,
+225,159, 70, 69, 69, 89, 68, 81, 84,110,219,182,173,105,118,118,182, 90, 20,197,241,148, 82,143,250, 43, 41,165, 11, 9, 33,232,
+223,191,255,248, 70,141, 26,237, 60,122,244,104,203, 62,125,250,108, 91,187,118,109, 71, 81, 20,255, 62,117,234,212, 48, 0,115,
+ 1,124,233,174,230,213,171, 87,167,236,216,177,131, 28, 60,120,240,157,137, 19, 39,106,234,212,169, 67,252,252,252, 96, 50,153,
+144,146,146, 66,151, 45, 91,102,177, 88, 44, 95,250,250,250,126,224,174,102,157, 58,117, 38,236, 61,114, 68,125,254,210,197, 23,
+ 95,236,245,152,182, 65,227, 38, 48, 16,160,240,230, 13,236,217,147,129,239, 14, 29, 55,103, 91,109,255,229,121,222,237,161,244,
+ 33,151,178,122,110, 95,181,100,203,238,223,127,127,116,218,140,207, 72,208,115,175,194, 43,172, 33,228,240, 7,176,103,247,110,
+124,242,209, 20,202, 23,102,238, 21, 46,101, 62,230,174,102, 77, 67, 75,238, 3, 88, 50,255,212, 76, 89,150, 21, 64,113, 77,214,
+ 27,111,188, 1,199, 91,231,124,253,245,215, 48,153, 76, 0,160, 32,132,204, 36,132, 44,173,108,212, 95, 21,154,161,155, 54,109,
+ 10,117,212,140,138,138,114, 75,179,166,201,204,204,252,224,229,151, 95,158,161, 84, 42,125,101, 89,174, 80,156, 14, 0, 94, 94,
+ 94,200,207,207,135, 36, 73, 98,173, 90,181,206, 9,130, 0,133, 66, 1, 56,249, 28, 21, 21, 21,125, 48,114,228,200,143, 9, 33,
+ 78, 51, 29, 58,157, 46,105,255,254,253, 15, 60,251,236,179,220,170, 85,171, 46, 63,243,204, 51,154, 63,254,248, 67, 2, 80,173,
+ 57,141, 24,183, 31, 74, 41,138,138,138, 0,192,233,148, 8,148,210,100, 66,200,248,196,196, 68,237,200,145, 35,227,158,123,238,
+ 57,159,110,221,186, 25, 28,219,152, 76, 38,121,195,134, 13, 69, 11, 23, 46,188,177,119,239,222, 63, 95,122,233,165,129, 40,238,
+222,168,148,244,244,244, 77,243,231,207,247,237,210,165, 75, 99, 73,146,144,157,157, 93, 90,131,149,154,154,138,164,164,164, 36,
+ 89,150,215,123,120, 58,175, 61,251,236,179,155,151, 45, 91, 22, 54,124,248,240,212,149, 43, 87,174, 7, 80, 89, 77,173, 97,208,
+160, 65, 79, 44, 91,182, 44,108,196,136, 17,201, 0,198, 80, 54,195, 59,131, 81, 37,110,141, 84,163,148,238, 7,208,129, 16,210,
+159,231,249,113,133,133,133,179, 41,165,235,170,123,208, 18,147,181,237,226,197,139,175, 0,104, 51,119,238,220,119, 1,164,160,
+ 56,173,215,163,178,122, 5, 23,122, 18,128, 15,131,131,131, 87,199,199,199,215,200,189, 8, 75,110,169,243, 90, 80, 80,208,202,
+ 79, 87,174,254,128, 82,218,154,163,114,109,153,112, 57, 28,199, 29,147, 36,233,147,212,212,212, 61,158,104,254, 92, 28,103,143,
+ 7, 27,120,247, 29, 63,226,217,207, 68,165, 46,188,208, 44,170,189, 52, 10,171, 74,178, 36,113,166,156,247, 15, 38, 21,222,149,
+ 23, 86,139,197, 34, 14, 28, 56,240, 91,142,227,100, 0,144, 36, 73, 97,177, 88, 94,132,155,255, 67,255,150,102,117,201,206,206,
+ 46, 4,240, 90, 85,109, 58,117,234,244,195,150, 45, 91,158,237,209,163,135,180,113,227,198,204,190,125,251, 42, 18, 19, 19, 41,
+128, 29,149,181,191,122,245,170, 5, 78,238, 72, 96,167, 85,171, 86, 97, 75,151, 46, 61,250,202, 43,175,248, 44, 88,176,160,214,
+225,195,135,165, 37, 75,150,228, 23, 22, 22,206,170,246,201, 48,106, 20, 82, 50, 40, 69,169, 84, 66,175,215,195,199,199, 7, 89,
+ 89, 89, 46, 71,122, 82, 74, 47, 17, 66,250,140, 27, 55,174,211,184,113,227,250,132,132,132, 68, 55,104,208,160, 1,199,113, 92,
+ 70, 70, 70, 86, 74, 74,202, 85,155,205,182, 19,192, 38, 0,170, 70,141, 26, 29, 3,176,220,153,222,153, 51,103, 62, 14, 10, 10,
+218,181,102,205,154, 62, 26,141,166,153, 90,173,174, 37, 8, 2, 87, 84, 84,116,211,102,179,157,181, 88, 44, 27,211,211,211,255,
+240,228,220, 40,165,231, 9, 33,221, 20, 10,197,166, 37, 75,150, 68,101,100,100,132,239,217,179,167, 95,249,118,113,113,113,203,
+150, 45, 91, 22, 54,106,212,168, 75, 43, 86,172,240,168, 6,139,193,248, 95,197,163, 11, 89,137,169,170,182,177, 42,167,149, 4,
+224,131,146, 71,141,144,150,150,118, 18,192,179, 53,165, 7, 0,233,233,233, 7, 0, 60, 14, 20,207,230,156, 82,124,209,188, 37,
+ 14, 38, 23,108, 4,176,209,101,195, 59, 8,165,212, 66, 8, 25, 87, 50,202, 9, 0,198,149,159, 54,129, 16,114,194,113,187,171,
+ 76,211,237,208,252, 55,201,201,201,249,207,119,223,125,119,248,245,215, 95,215, 12, 29, 58, 20,103,207,158,197,130, 5, 11, 44,
+ 57, 57, 57, 46,111,166,235,140,227,199,143, 39,181,106,213,170,245,226,197,139,223, 89,180,104, 81,127, 66, 8,187, 23,225, 93,
+130,213,106,253,251,169,167,158,178,223, 63,149,218,111,157,100,159,182, 67, 20, 69,151, 63, 4, 75,178,183,187, 74, 30,174,168,
+244, 86, 94,142,164,167,167, 39, 0, 72,112, 67,203,109, 74,178,109,125,174, 94,189, 58,237,252,249,243, 21,139, 67, 1,156, 62,
+125,122,109,143, 30, 61,244, 9, 9, 9,239,121, 58,138,144,193,248, 95,133, 84, 99,226, 95,247,197,239,145,126, 95,166,233, 92,
+147,184,184,241,114,101,219,239,132,102,117, 96,154, 76,147,105, 50, 77,166,121,247,104,222,111,252,235, 93, 49,140,123, 11,119,
+178, 82,119,131, 38,131,193, 96, 48, 24,119, 19, 4, 64,165,243, 28,121,226, 76, 9, 33, 30,207,149,228, 74,159,105, 50, 77,166,
+201, 52,153, 38,211,100,154,247,159,102, 37,218,131,203,109, 42, 51, 15, 36,165,116,145,167, 49,220, 13,176, 46, 66,166,201, 52,
+153, 38,211,100,154, 76,147,105,222,113, 77, 39,199, 25,126,175, 26, 44,118, 67, 89, 6,131,193, 96, 48, 24,140, 26,134, 25, 44,
+ 6,131,193, 96, 48, 24,140, 26,198,173, 34,119,181, 90, 29, 67, 41,125,137, 16, 82,159, 16,114,141, 82,186,212,106,181, 86,184,
+137,226,253,142, 90,173,142, 33,132,188, 68, 41,173, 79, 41,189, 70, 8,185,179,175, 3, 33,100, 74,124,241,108,210,147,227, 65,
+ 43,157, 29,147,193, 96, 48, 24, 12,198,191,142, 83,131, 21, 30, 26,250, 36,199,147,121, 54, 65,242,247,243,243,227,230,207,159,
+207,245,235,215, 15, 27, 54,108,192,152, 55,222, 24, 19, 28, 28, 36,171, 20,138, 28, 42,139, 99,174,166,164,255,228,206,193, 6,
+ 13, 26,148, 41, 8,130,211, 89,173,121,158,191,190,118,237,218,122,213, 57, 17, 71,130,227,158,204, 20,108, 54,167,199, 81, 40,
+148,215,211,143,253,236,214,113, 66, 67,131,158,228, 9, 55, 79,144,100,127,127,127,127,238,203, 47,191, 44,125, 29, 94,127,253,
+245, 49, 33,193,193,178, 74,201,231,200, 18, 29,115, 53, 37,197,173,215,161, 70,112, 48, 87, 0, 48, 37, 30,100, 50, 33, 96, 38,
+139,193, 96, 48, 24,140, 59,143, 83,131, 69, 56, 44, 88,241,205, 76,255, 27, 55,115,176,114,237, 54, 68, 69, 69,225,204,153, 51,
+136,138,138, 66,199,118, 45,185,199, 59,180,226,120, 14,117, 38,125,185,124, 1, 0,183,140,133, 32, 8,117,215,172, 89, 3, 66,
+ 72,233,132,125,246, 73,251, 10, 10, 10,240,230,155,111, 58, 53, 69,158, 32,216,108,117,255,254,243, 87, 40,121, 2, 65,162, 16,
+ 68, 10, 65,148, 97,147, 40,242,141, 34,186,247,121,214,237,227,112,224, 22, 44,157, 55,211, 63, 55, 47, 15,191,110,222, 94,230,
+117,232,254,112, 91,110,104,239,174,156, 94,167,170, 51,124,194,167,110,191, 14, 53,129,163,185,114, 92, 55,185,138,219,119, 48,
+ 24, 12, 6,131,193,248,119,112,106,176,172,130,228, 95,175,150, 47,190, 91,186, 20,227, 39,126,132,166, 77,155,130, 82, 10, 66,
+ 8,222,251,112, 42,230,124, 52, 17, 79,245,234, 12, 65,148,253,157,105, 84, 54,194,128, 16,130, 43, 87,174,192,100, 50,149,121,
+196,196,196,184, 21,176,187,163, 22,148, 60,193,166,163, 5,176, 9, 50,108, 98,201, 67,144,209,173,185,183, 71,154,130, 36,251,
+251,249, 24,176,248,155,175, 49,126,234,204, 50,175,195,132,247, 62,196, 87, 51, 62,192, 91,163,254, 15, 86, 65,242,119, 87,179,
+186, 48, 77,166,201, 52,153, 38,211,100,154,247,171,230,253,134, 2, 0, 8, 33, 93, 0,236, 6, 0, 74,105,105,102, 68,176,154,
+ 17, 29, 90, 27, 95,207,250, 24, 20, 28,100, 74, 1, 10, 80, 89, 64,195, 0, 61, 76, 70,163,199, 7,148,101, 25, 54,155, 13,130,
+ 32, 96,209,162, 69, 40, 44, 44,132, 44,203,136,138,138, 2, 0,196,197,197, 57,102, 96,146, 19, 19, 19,195, 92,105,214,109, 49,
+ 32, 9, 20, 13, 28,215, 77,158,249, 45, 14, 28,253, 27,148, 2, 26,157, 30, 67,158, 27, 1, 73,166,176, 9,158,223,159,212,108,
+ 52, 34,208,160,196,156, 79, 62, 4,167, 84,129, 3, 1,199, 17,112, 68, 70,211, 16,127, 88,138,111, 78,252,175, 50, 57, 30,180,
+124, 22,107,114, 60, 40, 38,255,235,161, 48, 24, 12, 6,131,113,203, 56,243, 34,247, 42,246, 12,214,238,202, 78,198,106, 54, 33,
+196, 95,133,250, 6, 95,136,162,132,211,182, 64, 20, 24,205,176,217, 4, 36,217,108,184,116, 44, 3, 15, 61,244, 16, 6, 12, 24,
+ 32,217,108, 54,168, 84,170,188,181,107,215,214,170,234,128,178, 44, 67, 16, 4,216,108, 54, 20, 21, 21,225,199, 31,127,132, 66,
+161,128, 44, 23, 27, 31,123, 9, 17,165, 20, 15, 63,252,112,131,170,180, 74,161,104,112,233,240,106,120,107,121,136, 50,133, 40,
+ 82, 8, 18, 32,201, 20, 70,171,140, 65, 47,127, 0, 81,150, 33,202, 50,172,110, 24,172, 50,134,173, 86, 91,244,127,119, 37, 0,
+ 67,233,118, 31, 13,197,248,135, 57,168,212, 26,168, 85, 60, 44, 38,207,141,230, 45, 67, 41,157, 76, 8, 88,145, 59,131,193, 96,
+ 48,238, 19, 42,245, 34,247, 42,101,186, 8, 9, 33, 93, 40,165,123,236,203, 86,179, 17,162, 32, 65, 16, 37,136,130,136,188, 66,
+ 19, 62,251,236, 51,104, 52, 26, 16, 66, 74,205,146, 44,203,156, 32, 8,232,221,187,183,211,238, 66, 59,146, 36,193,102,179,193,
+102,179,129, 82, 10,158,231,209,190,125,251, 10,237, 14, 30, 60,232,209,137,120,107,121, 52,124,244,221, 10,235, 15,173,254, 24,
+148, 82, 72, 82,241,195, 29,131,229,202,176,197,118, 25, 10,139, 85, 0,165, 0,104,113,134,235,142, 64, 41, 45,173,185, 98,153,
+ 43, 6,131,193, 96,220, 7,148,247, 34,247, 42,229,107,176,118, 3,255,116, 59, 89, 76, 38, 8,130, 8, 81,148, 32, 8,197,198,
+ 72,167,211,161,115,231,206, 0,202,102,155,182,109,219, 6,155,205,230,242,128,246,162,246, 18, 99, 6, 74, 41, 86,174, 92, 9,
+165, 82, 89,250, 80,169, 84, 30,159,136, 40, 81,188, 59,225,109,168, 20, 28,148, 10,174,244, 89,162, 20,148, 22,155, 35, 73,166,
+176, 8,238, 37,121,170, 50,108, 0, 96,181,216, 0, 74, 65, 65, 97, 42, 42,242, 56, 94, 6,131,193, 96, 48, 24,149, 82,198,139,
+220,171,216, 13, 86, 87, 66, 72, 5,231, 97, 53, 21,149,100,175, 36, 8,162, 88,106,160,102,205,154, 5,133, 66, 1,181, 90, 13,
+133, 66, 81,106,136,220, 49, 88,102,179, 25, 17, 17, 17,176, 90,173,136,138,138, 2,165, 20, 79, 63,253,116,133,118,135, 15, 31,
+246,232, 68, 4,137, 98,250,167,179, 43,172,223,255,243, 71,104,209,172, 33,218, 61,224, 5,179, 77, 70,190, 81,116, 75,175, 42,
+195, 6,160, 56,131, 5,128, 82,192, 84,116,135, 50, 88, 12, 6,131,193, 96,220, 63, 84,234, 69,238, 85, 20, 0, 80,146,138,171,
+224, 22,205, 70, 35, 68, 65, 44, 53, 89, 86,171, 21,178, 44,227,141, 55,222,168, 32,180,115,231, 78, 88,173,214,170, 15,166, 80,
+ 92,127,245,213, 87,203, 76,145, 64, 41,197,234,213,171,161,209,104,202,100,177, 8,241,204,188, 10, 18, 69,252,251, 99,161, 86,
+242,101, 12,145, 44, 3, 27, 54,253,134, 13,155,126, 43,109,203,243,202,235,238,232, 57, 51,108, 0, 96,181,150,100,176, 40, 69,
+ 81, 97,129, 71,177, 50, 24, 12, 6,131,193, 40,139, 51, 47,114,175, 82,229, 76,238,102, 83, 17, 4,135, 26, 44,155,205, 6, 81,
+ 20,177,104,209,162, 50,221,121, 74,165, 18, 28,199,185,204, 96,173, 89,179,166,204,228,158,113,113,113,148, 82,138, 33, 67,134,
+148,118, 55,190,248,226,139, 24, 62,124,184,199, 6, 75,148, 40,166, 76,155, 85,170,211,251,209, 78,232,223,171, 11,228, 18, 47,
+124,253,212, 90,143, 4,171, 50,108, 0, 96,181, 20,215, 96, 81, 0,198, 2,214, 69,200, 96, 48, 24, 12, 6,227, 31,156, 26, 44,
+165,130,203,187,148,116,205, 55,192, 75, 11, 81,182, 64,148,139, 71,254, 73,146,132,225,195,135,151,182,123,230,153,103, 48,108,
+216,176, 74, 13,150, 59,119,219,150,101, 25,251,247,239, 7, 33, 4, 28,199,149, 62,156,225, 76,179,200, 34,227,192, 79, 83, 33,
+ 83, 10,153, 2,114,201, 64, 4,171,232, 58,219, 88,153,166, 43,195,166, 49,248,129,231, 40, 8, 1, 46,165,102, 66,193,115,121,
+158,158,187,167, 48, 77,166,201, 52,153, 38,211,100,154,247,171,230,253,134, 83,131, 69, 37, 58,102,225,198,131,243, 4, 73,246,
+181,175,139,142,142,134,205,102,195,214,173, 91, 75,141, 7,207,243,165, 93,122,238,212, 96,149, 35,185,115,231,206, 85, 77,197,
+144,236,150, 10, 65,114,155,110, 79, 58,215, 33,110,234, 56,224,202,176, 45,217,251,207, 45, 8, 21, 28,151, 7, 74,199,120,122,
+ 12, 6,131,193, 96, 48, 24,247, 39, 78, 13, 86,114, 90,218,114, 0,203, 29,215,245,233,211,167,240,137, 39,158,208,137,162, 8,
+171,213, 10,155,205, 6,171,213, 90,250,208,104, 52, 30,205,184,233,206, 36,162,238,112,253,228,218, 26,209, 41,197, 13,195,150,
+158,158, 94,179,199,100, 48, 24, 12, 6,131,113,223, 80,101, 13, 86,121,140, 70,163, 31, 33, 68,145,158,158, 94, 97,219,181,107,
+215, 0,192,189, 33,122,119, 57, 53,110,216, 24, 12, 6,131,193, 96,252, 79,225,145,193,218,189,123,183,136,251,196, 68, 49, 24,
+ 12, 6,131,193, 96,220, 46,156, 87,147, 51, 24, 12, 6,131,193, 96, 48,170,235,122,100, 60, 0, 0, 32, 0, 73, 68, 65, 84, 5,
+ 1,208,188,178, 13,158,140, 14, 32,132, 84,170, 81, 21,174,244,153, 38,211,100,154, 76,147,105, 50, 77,166,121,255,105,186,210,
+118,220,159, 16, 50,156, 82,186,200,211, 24,238, 6,200,237,188, 63,240,189, 50, 52,148,105, 50, 77,166,201, 52,153, 38,211,100,
+154,119, 86,211,201,113,238, 89,131,197,186, 8, 61,128,196,141, 80,222,233, 24, 24, 12, 6,131,193, 96,220,253,120, 84,228,126,
+ 43, 76,153, 50,229,150,204,220,228,201,147,229,154,138,197, 83, 72,200,224, 72, 94,129,207, 90,199,182,232,197,133, 13,218, 76,
+ 37, 50,129,166,174,190,116,167,226,185,215,137, 53,144, 0,129, 40,251,250, 27,180,253, 27,120, 43, 30,188,152,109,252,195,104,
+147, 55, 80, 34,172, 59,147, 79,115,238,116,124, 12, 6,131,193, 96,220, 42,183,108,176,218,182,109,219, 80,150,229,255, 3,240,
+ 28,165,244,248,209,163, 71, 7, 87, 71,103,231,206,157,193,130, 32,180, 21, 69,177, 53,128,214, 58,189,161,149,197, 98,190, 78,
+ 64, 95,232,213,171,215, 49, 79,245,226,226,226, 54, 1,232, 93,217, 54, 66,200,148, 35, 71,142,196,187,171,197, 43,240,217,111,
+235,150,244,207, 48,234,176, 39, 49,105,192,210,207, 39, 2,192, 64, 79, 99,250, 55, 8, 10, 10,210, 1,120,129,227,184, 71, 52,
+ 26, 77, 99,179,217,124, 21,192, 73, 66,200,130,212,212,212,138,243,107,184, 1, 33,132,139, 49, 40, 95,214,235,244, 61, 3,189,
+213,173,211,114,242,211,204, 54,121,159, 76,108, 51, 61, 53, 68,145,132,168, 27, 53,240,219,243,206,160,142, 81, 45,163, 31,128,
+156,116, 28,230,220,172, 39, 18,211,140, 79,124,115,232,250,219,145,132,180,190, 68,105,213, 55,181, 44, 33, 52, 52, 52, 80,146,
+ 36, 69,122,122,122, 10, 0, 68, 68, 68,248, 88, 44,150, 54, 0,162, 0,252,165,209,104,142, 92,190,124, 57,223,243, 51,254,135,
+123, 69, 51, 36, 36, 36, 72,150,229, 87,234,213,171,215, 39, 51, 51,115, 19,199,113, 75,170,251,126, 51,254,119, 8,127,112,216,
+108,194,145, 0, 79,246,161, 50,205,190,122,240,135,183,111, 87, 76, 12,198,253, 66,181, 12, 86,116,116,180,151, 90,173, 30,194,
+113,220, 11, 45,227, 58,116,124, 98,232, 11, 68, 32,122,124, 50,246, 25,143,167,112, 56,122,244,168, 38, 35, 35,227,163,134, 77,
+227,254,211,181, 71,127,174, 89, 84, 83, 4,212,246,135,204,169,177,108,235,133,218,187,191,121,113, 62,128, 14,213, 8,179,247,
+ 79,155, 15, 33, 35, 87, 2, 33, 0, 33, 0, 71,128, 66,179,140,247, 94,234, 56, 25, 64,188, 59, 34, 36,110,132, 50, 38, 58,170,
+215,133,155, 90,108, 61, 37, 0, 8,130,222,191, 94, 47, 18, 55, 66, 73, 19,191, 17,170, 17,215,109, 35, 48, 48,176,117,237,218,
+181,191,122,241,197, 23,253, 27, 55,110, 28,168, 86,171,245,102,179,249,129,164,164,164,134,115,230,204,121, 44, 48, 48,112, 70,
+ 70, 70,198,175,158,104, 70,249,105, 27,244,106, 26,246,211,132, 81,255,215,174,113, 68, 40, 20,214, 34, 80, 75, 97,104,210,149,
+191, 59, 76, 91,242,235,171, 49,190,202,167, 79,231, 9, 59,220,213,211,122,171,222,127,111,248,211, 81,145,222, 20,214, 51,251,
+161,224, 41,180,222,254,104,215,128, 7, 1,109, 22,255,123,250,123, 0, 38,187,210, 9, 10, 10,154, 10,224, 61, 0, 36, 48, 48,
+240, 39,165, 82,121,248,193, 7, 31,108,250,212, 83, 79,145, 22, 45, 90,224,216,177, 99,205, 54,108,216, 48,184, 65,131, 6,231,
+172, 86,235,161,218,181,107, 31, 63,115,230,140, 91,183, 26,136,142,142, 86,221,184,113,163,149, 90,173,110,127, 55,107, 6, 5,
+ 5,233,172, 86,235,255,133,132,132, 12,127,226,137, 39, 90,244,235,215,143, 52,105,210, 4,231,206,157,139,219,178,101,203,228,
+ 86,173, 90,157, 76, 77, 77, 93,164, 86,171,191, 79, 79, 79,119,107, 18,224,161,143,146,115, 63,239,160, 77,171,187,221, 17, 66,
+136, 31, 0, 45,165, 52,195,141,182,245, 0,232, 41,165,151,255,109,205,219, 65, 72, 72,200, 89, 66, 72,173,146, 56,236,241,148,
+249,219,241, 89,146,164,162,164,164,164, 70, 85,105, 54,104,208,160,153, 44,203,188,227, 58,165,210,121,213,130, 40,138,114, 74,
+ 74,202,153,170, 52, 9, 71, 2, 22,125, 53,219, 87,193, 1, 18, 45,121, 8, 20, 18,165,144,101, 64,146, 1, 73,150, 33, 74, 20,
+ 50,149, 33,136, 20, 83, 38,191,231,226,236, 25, 12, 6,224,129,193, 34,132,144,184,184,184,206,148,210, 23,194, 35, 34,135, 12,
+122,118,132, 46,252,129,230, 40,148,125,112, 37, 91,198,209, 93, 43, 0, 96,149, 39, 7,223,182,109, 91, 27, 74,241,221,168,137,
+179,155,182,140,109,139, 83,105, 34, 14,164, 72, 40,186, 36, 65,193,155, 32,203, 0,165,212,226,233, 73,217, 73,205, 17,177,239,
+156, 21, 60, 7,112, 28,192,115, 4,188,135,247,233,166,137,223, 8, 92,216,160,205,191, 29, 78, 27, 0,109, 61, 24,115,210, 96,
+204,201,220, 66, 83,214,220, 85,230, 42, 56, 56,184,123, 68, 68,196, 23,111,190,249,102,253,140,140,140, 90,135, 14, 29,130, 70,
+163,129,191,191,191, 34, 32, 32,160,233,196,137, 19,243,166, 77,155, 54,174, 94,189,122,199, 50, 51, 51,175,186,163, 25,109, 80,
+ 71,117,105, 29,253,199,164,169,241,190,150,196, 45,200,253,229, 23,240,156, 12,149,151, 1,129, 58, 61,230,246, 9,175, 53,113,
+ 91,202,175, 45,116,186,168,147, 38, 83,154, 59,154,161,117,107,245,136,108,220, 4,185, 27, 23,224, 98,174, 5, 9,153, 22, 60,
+209,165, 13, 34,253,117,136, 21, 37,212,214, 42,186,195,133,193, 10, 9, 9,241, 7, 48,225,234,213,171,156, 74,165, 34, 13, 27,
+ 54,124,122,209,162, 69,180, 89,179,102,165,119,221,238,208,161, 3, 58,116,232, 64, 10, 11, 11,163, 14, 28, 56, 16,181,118,237,
+ 90, 33, 56, 56, 56, 49, 45, 45,109,153, 51,221,136,136, 70,201, 22,139, 57, 84,163,213,153,231,204,153,243,223, 7, 31,124, 80,
+ 86,171,213,184, 21, 77, 0, 8, 12, 12,252, 49, 36, 36, 68, 63,105,210,164,236,182,109,219,210,154,208,108,216,176,225,111,157,
+ 58,117,234,214,163, 71, 15,197,195, 15, 63,140,160,160,160,210,109, 1, 1, 1,232,212,169, 19, 73, 73, 73,105,185,111,223,190,
+ 5,191,253,246,219,188,134, 13, 27,238,186,114,229, 74,143,170, 52, 75,104,114,139,219, 29,225, 1, 76, 39,132, 44,166,148, 30,
+112,214,136, 16,210, 26,192, 51, 0, 62,187, 67,154, 85,162,211,233, 50,205,102,115, 93, 0,208,106,181,215, 77, 38, 83, 61, 87,
+251, 16, 66, 12,115,230,204,169,171, 82,169,192,113, 28, 36, 73,130, 36, 73,144,101, 25,148,210,210,103,251, 32,163,169, 83,167,
+ 74,174, 52,101, 89,230,102,207,158,173,212,233,116, 0, 0, 65, 16,202, 60,219,177, 47, 79,157, 58,213,173,239, 40,157,154,199,
+135, 99,135,183,227, 36,171,182,202,227,243,106,243,203,227,190, 56,236,142, 38,131,193,240,192, 96,197,198,198,110,238, 53,112,
+ 88,207, 7, 59,247,128,168,170,139,115,215, 9, 82,174, 80, 40,120, 17, 28,100, 92,254,115, 29,229, 56,238,123,199,125,170, 26,
+ 97,176,121,243,230,183, 27, 68,182,154,241, 94,252,116,254, 84,166, 26,223,237, 51, 65,178,228,193,148,125, 9, 69,215, 47,160,
+224,218, 89,228,166,157, 58,201,113, 92,188,187,154,229,161, 20,144, 41, 5,161, 4,144, 1,128, 22,167,177, 42,180,171, 90,147,
+ 74,100, 66,226,111,223, 13,136,237,255, 46, 46,236, 91, 14, 80,110,130,235, 99,215,252,232, 10,103,154, 65, 65, 65,143,133,135,
+135,207, 28, 49, 98, 68,200,137, 19, 39,124,140, 70, 99,209,225,195,135,247,100,100,100,212, 11, 8, 8, 72,121,234,169,167, 30,
+170, 91,183,110,221,206,157, 59,235,183,109,219,246, 62,128, 87, 92,105, 54,247, 82,199,116,106,215, 60,225,227,153,179,188,178,
+127,157, 7,235,149, 19, 72,200, 52,227, 68,150,137, 6,251,228,145, 39,155,251,195, 75,173,192,240,246,117, 13,255,217,112,245,
+ 83, 0,207,186,115,238, 13,131,235, 53, 18, 76, 38,152, 77, 54,108,190,144,103, 74,200,201,171,203,121,167,102,141, 27,208, 70,
+203,103,167,163,190,183,242, 1, 79,206, 29, 40,206, 2,232,245,250, 74,183,249,250,250,162, 67,135, 14,104,212,168,145,242,153,
+103,158,121, 16,192, 50,103,154, 54,155, 45, 48, 45, 45, 29,141,155, 52,214, 60,242,200, 35,132,231,121, 88,173, 21,123, 43, 61,
+209, 4, 0, 47, 47,175,126,173, 91,183, 86,252,240,195, 15,185, 87,175, 94, 61, 61,104,208,160, 52,189, 94, 95,230,130,170,215,
+235,209,160, 65, 3,140, 30, 61, 90,249,234,171,175,186,212,172, 87,175,222, 99,203,151, 47, 7, 33,164,244,226, 93,158,176,176,
+ 48,212,175, 95, 31,189,123,247, 86, 12, 30, 60,248, 49,199,109,229, 53,135, 62, 74,206,161,196, 60, 13,125,148, 84, 57,180,184,
+100,251,249,242,153,172,242,154,148,210, 27,132,144,133, 0,214, 16, 66,134, 84,102,136, 8, 33, 15, 3,248, 5, 64, 47, 74,233,
+245,242,219,171,210, 84,171,213, 42,155,205,230, 15,148, 53, 62,158,106, 58,196, 66, 19, 19, 19, 17, 23, 23, 7,199,103,179,217,
+ 92,106,132, 8, 33,117, 43,219,183, 50, 77,158,231,241,245,215, 95,131,227, 56,168, 84, 42, 40,149, 74,168, 84,170, 10,143,216,
+216,216,202, 36, 43,213, 84, 42,149,248,250,235,175, 33, 73, 18,119,245,234,213, 23, 36, 73,234,111, 54,155,235,234,116,186, 44,
+149, 74,181,177, 75,151, 46, 75, 53, 26,141,232,137, 38,199, 3,156,100,213,238,216,182,222,171,210,157, 0, 88, 44, 22,244,237,
+255, 36, 56, 82,177,148,246,223,252,174, 99,154,247,183,166, 11,218, 2,168,227,176,108, 5, 96,255,181,154,141,226,105,167,106,
+151, 91,239,216,206,254,156, 85,178,190, 78,201,126,212, 65, 55, 11,192,159, 53, 21,176, 2, 40,254, 98,161,148, 18,251,179,147,
+182, 62,169, 38, 63, 20, 94, 9,128,130,147,161,224, 9, 20, 60, 0, 16,220, 72, 61, 11,107,209,141,253, 71,142, 28,185,226,206,
+ 65,183,110,221,218, 33,188, 89,187, 79,227, 63,254,156, 91,186,215,132, 60,163, 25,217,103,214, 35,227,240,183, 25,178,104, 91,
+207,113,220, 17,142,227,142,182,110,217,226, 92, 96, 96,160,203, 95,118,206,144,105,113,138,187,212, 88,201, 0,129,231,211, 82,
+208,212,213,151,130,186,124, 80,102,185,186, 49,213, 52, 33, 33, 33,189, 34, 35, 35,167,143, 24, 49, 34,236,232,209,163,222, 5,
+ 5, 5, 89, 59,118,236, 56,103,179,217,142,113, 28, 55, 55, 61, 61,189,203,242,229,203,245,227,199,143,239,209,164, 73,147, 38,
+191,253,246,155,209,149,102,180,151,170,229,176,231,159, 74,232, 63,124,140,246,244,234,249,208,156, 59,138, 69,103,114,164, 35,
+153,166,247,205,133,226, 23, 58,189,226,225, 92,179,184,253,157, 78,129, 92,160,183, 18,161,190,170,174,238,198,171, 86,106, 20,
+ 84,161,133,213, 34,162,200, 42, 91,207,100,209,162,183,187, 54,183, 81,175, 0, 45, 0, 40,120,206,165,233, 79, 77, 77,205, 9,
+ 10, 10,250, 52, 60, 60,252, 3, 66, 8,237,220,185,243,153,184,184,184, 34, 89,150, 97, 50,153, 96,179,217,160, 84, 42, 97, 50,
+153,144,148,148,132, 67,135, 14,193,215,215,215,149,108, 25,114,115,115, 17, 30, 30, 14,189, 94,127,203,154,178, 44,147, 5, 11,
+ 22,104, 79,159, 62,173, 93,179,102, 77,173,183,223,126, 59, 47, 54, 54,246,236,128, 1, 3, 82,106,213,170,101, 59,126,252, 56,
+ 18, 18, 18,144,147,147,131,118,237,218,185,165,105,179,217,160, 80, 40, 96, 50,153,160,209,104,160, 80, 40, 32,138, 34,100, 89,
+ 46, 53, 93,133,133,133,184,121,243, 38,148, 74,165,203, 27,177,219,205,210,208, 71, 9,253,249,151, 63,174, 23,247, 13,229, 11,
+176,229, 9, 16,243, 4, 8,121, 2,132, 92, 97,232,155,179, 90,254,188,195,233,119, 68, 5, 40,165, 7, 9, 33, 67, 0,252, 82,
+222,100, 57, 24,161, 33,148,210,227,158,106,218,108,182,253,118,227,163,213,106,235, 18, 82,108, 12, 53, 26,141, 96,177, 88,186,
+121,162, 9, 0,137,137,137,104,221,186, 53, 95,162, 73,237,207, 37, 15,143, 32,132,128,231,121, 40,149, 74,240, 60,143,214,173,
+ 91,163, 95,191,126,104,210,164, 9, 82, 83, 83,177,123,247,110, 92,184,112, 1, 42,149,170, 76,215,161, 43,148, 74, 37, 56,142,
+227,206,159, 63,191,244,145, 71, 30,137, 28, 51,102,140,186, 65,131, 6, 56,119,238, 92,253, 5, 11, 22, 12,219,185,115,103,151,
+129, 3, 7, 14, 3, 32, 86,213,125,232, 8, 95, 98,154, 44, 22, 11,206,158, 61, 91,117, 91, 79,187, 0, 24, 12, 15,112,225, 69,
+234, 16, 66, 54,218, 23, 40,165,125,237,203, 19, 39, 78,124,111,250,244,233,167, 9, 33, 27, 29,215, 59,182,115,124, 46, 57,214,
+ 70, 74,105,223,119,223,125, 55,102,198,140, 25,211,236,109,107,242,124,220,206, 96,241, 60, 63,232,212,214, 47, 14, 62, 96,163,
+ 97,245, 98,250,160,248, 59,135, 0,160, 72, 58,190, 21,178, 44, 47,115, 71, 39, 33, 33, 65, 43,202, 88, 58,254,189,169,220, 55,
+187, 76,200,188,150,142,244, 61,159,193,116,253,236,119, 58,157,238,157, 71,122,246,189,165, 98, 95, 0,136,139,139,139,241,171,
+ 93, 31, 22, 27, 45, 49, 88,128,163,201,186, 95, 8, 10, 10,234, 23, 25, 25, 57,117,253,250,245, 97, 38,147,201,251,192,129, 3,
+185,219,183,111,191,104,179,217,150,100,100,100,252, 8, 0,132,144,245, 10,133,226, 35, 74, 41, 12, 6,131,130,231,121,157,253,
+191,183, 50,205,230,190,170,214, 47,190,240,220,254,183,231, 46,214, 94, 60,117, 28,243, 86,109,134,134,218,164, 51, 55,172, 3,
+ 78, 21, 8,246,127,218,223,123, 7,235,211, 40, 69,168,146, 35,168,165, 87,214,239, 64,136, 54,129, 82,179,171,152, 3, 66,195,
+ 56, 49, 56, 2,251,140, 22, 24,124, 84,106, 0, 8,110, 28,205, 31,207, 23,113,224,240, 95,208,106,253, 85,238,156,123,122,122,
+250,164,224,224,224,240,237,219,183,115, 70,163,177,232,196,137, 19,168, 93,187, 54,234,214,173, 11, 31, 31, 31,156, 59,119, 14,
+ 59,118,236,192,249,243,231, 65, 41,117,154, 37,112, 70,102,102, 38,242,243,243,107, 68, 83, 20, 69, 2, 0, 49, 49, 49,136,137,
+137, 81,167,165,165,213,221,184,113,163,255,180,105,211,174, 5, 6, 6,110, 51,153,254, 41,143, 42,223,221,227, 12,139,165,184,
+231,220,108, 54,195, 98,177, 64,165, 82, 65,171,213, 66,165, 82, 33, 63, 63, 31,153,153,153, 40, 40, 40, 0, 0,248,249,249,149,
+182,119, 11, 73, 6, 14,118, 60, 82, 97,125,240, 11,149,102,111, 92, 65, 41, 61, 80, 98,178,126, 39,132,216,223,223,204,146,231,
+ 74, 51, 91,110,106,150, 46, 91, 44, 22,199, 44,147,178, 58,154,113,113,113,118,141, 50,223, 18, 90,173,246,186, 61,115,165,213,
+106, 43,100,196, 42,195,222, 45,168, 86,171, 17, 19, 19,131,119,222,121, 7,231,254,159,189,243, 14,107,234,236,255,240,231, 57,
+217, 9,132, 61, 19, 16, 81,134, 32, 14,100, 41,136,162,213,186, 71,219, 87,235,104,107,109, 93,125,171,109,181,173,117,212, 45,
+142,106, 85,180,237,107,171,117,212,209,170,191,214,186, 87, 5, 7, 78,192, 45, 42, 42,136, 97, 35, 35, 64, 32, 36, 57,207,239,
+ 15, 70,145, 50,194,176, 86,123,238,235,202, 5,156,156,220,231, 9,129,228,115,190,207, 56,241,241, 56,115,230, 12,236,236,236,
+208,167, 79, 31,240,249,124, 36, 39, 39,131, 97, 24,163, 2,150, 80, 40,132, 78,167,195,189,123,247,198,244,236,217,179, 85, 68,
+ 68,132, 40, 49, 49, 17,241,241,241, 48, 51, 51,195,194,133, 11,197,211,167, 79,119, 58,114,228,200,184,142, 29, 59,126,103,236,
+243,230,145,178,238,191,129, 67,134,255,229, 62, 11,115, 19,193,214,205, 27, 69, 21,193,139,225, 22,246,225,120,206, 84, 15, 65,
+ 21,193,105,201,146, 37, 3,171,111,171, 41, 48, 85,223,190,116,233,210,240, 42, 63, 55,235, 44,246,202,127,151,138,179,191,218,
+ 96, 89,214,209,194, 86,105, 53, 97, 84, 31,176, 44,160,103, 1,189,129, 66, 83, 84,136,180,248,147, 69, 90,173,118,183, 49, 7,
+204,206,206, 94,248,238,199, 75,221, 46, 63,226, 35, 53, 71,139,199, 39, 22,208,146,172,248, 55, 6, 13, 26,244,254, 43,175,188,
+210, 44,225,202,210, 70, 17,249,229,242,141,184,244, 64, 11,150,254, 89,201, 50,176,101,223,191, 12, 40,149, 74,119, 75, 75,203,
+ 21,123,247,238,109, 41, 18,137,228, 9, 9, 9,134,168,168,168, 20,157, 78,247,109, 69,184, 2, 0,133, 66, 49,186, 93,187,118,
+ 58, 19, 19, 19,104, 52,154, 98,157, 78, 87, 80, 91,184,242,145, 74,157, 58,181,111,119,106,234,154, 31, 36,197, 90, 45,242, 52,
+ 37,176,117,116, 52, 92,203, 46, 26,122, 77, 93, 82,121, 70,208, 86, 46, 8,246,247, 80, 42, 25,169, 28, 0,160,202,215,166, 24,
+ 19,174, 0,192, 68,110,193, 56,249,135,193,255,163,181,208, 48,230, 20, 0, 44,236, 21, 76,143, 15, 22,163,239,234, 40,148,240,
+228, 13,137,192, 26, 15, 15,143,202,113, 87,217,217,217,184,117,235, 22,242,242,242, 16, 17, 17,129,248,248,248,202, 15,221,226,
+ 98,163,154,247, 23,154,195,201,178,236, 83,159,158, 74,165, 18,147, 38, 77, 18,104, 52, 26,147,170,225,170, 33, 78,173, 86, 91,
+217, 14, 74, 41,180, 90, 45,242,242,242,160,213,106,113,239,222,189,202,112, 5, 0, 6,131,161,198,174,206,218, 27,156, 87,115,
+185, 75,151,221,232,113,135,229,129, 71, 88,101,220,145, 61, 26, 25,174, 42, 40, 15, 62, 70, 87,127,234, 35, 38, 38, 6,168,161,
+ 90,165,209,104,236, 41,165, 36, 38, 38, 6,198,140,191,170,128, 82, 10,145, 72,132,193,131, 7,227,246,237,219, 80,169, 84,224,
+241,120, 40, 41, 41, 65, 73, 73, 9, 58,117,234, 84, 89,193,106, 8,148,210,126,147, 39, 79,150, 60,124,248, 16,217,217,217, 96,
+ 24, 6,122,189, 30, 6,131, 1,227,198,141,147,104,181,218,190, 13,241,241,120, 4,189,198, 44,187,216,243,189,213, 81,213,111,
+185,121,133, 58,177, 88,252,231,190, 92,194,226,120,198,212,148, 69, 8, 33,227,171,124,191,191,250,253, 13,161,122,133,171,130,
+ 25, 51,102,248, 0, 16,215,240,144, 70, 83,249,223, 82, 71,215, 32,252,252,252,124, 45,108,148, 39,103,132,255, 96,250,235, 85,
+ 30,158,164,222, 65,114,236, 94,232, 89, 32,245,206, 89, 80,131,238,255,110,222,188, 89, 88,219,227, 43, 56,114,228,136,135,179,
+167,255, 71, 29,253,130,112,228,122, 9,158, 92,219, 9,109,206,195,239, 6, 12, 24,240, 91,115, 60, 25, 63, 63, 63, 31, 75,107,
+199,200,153, 75,127,176,218,119, 67,128, 71, 15,239, 32, 50, 98, 48,142, 46,127, 5,135,151,189,130, 3, 75,122,226,247,197, 61,
+ 1,224, 96, 67,188, 97,132,240, 93, 45, 75,209,219,155, 64, 97, 83, 4, 18, 70,254,182,245,195,106, 67,165, 82,221, 3,176,229,
+135, 31,126, 80,159, 57,115,198, 48,113,226,196,187,121,121,121,139, 82, 82, 82,118, 86,236, 83, 62,240,253,211, 5, 11, 22,120,
+ 26, 12, 6,156, 58,117,234, 30,143,199,171,181,127,249,134, 70,243, 56,238,218,205,111,207,108,223,128,184,203,151,240,211,156,
+169,250,232,235,183, 6,221, 84,235,255, 12, 87,166, 34,175, 46, 62,238,251,255, 59,229,191, 12, 17,155, 32, 62,171, 4,169, 5,
+186, 19, 70,183, 91, 93,164, 19,136,165, 48,117,104,137, 36, 13, 43, 84, 42,149, 23, 30,231,106,132, 12,143, 15,134, 47,196,131,
+156,146, 6,125,136,179,236, 95,243, 88,245,208, 2,160,222, 46,178,250,104,138,179,162,130, 85, 29,157, 78,247,151,237,198, 58,
+171, 6,172,170,212, 52, 22,139,101,217,134, 5,172,210,252,154, 95, 3,109,227, 3, 86, 85, 75,249, 13, 77, 9, 87, 64, 89,240,
+169,168, 40,137,197,226,202,174, 54, 99,171, 76,213,241,243,243,107,210,253, 85, 33,132,128,101, 89, 8, 4, 2,184,187,187, 35,
+ 47, 47, 15,102,102,102,144,203,229, 48, 53, 53,133, 88, 44,134,189,189, 61, 68, 34, 17, 24,134, 1, 99,100,112,209,233,116,208,
+106,181, 14, 78, 78, 78, 40, 40, 40,128, 68, 34,169,188,137, 68, 34,120,122,122,162,160,160,160, 65,149,198,134,132, 38, 30,151,
+175, 56,158, 49, 53,101,145,170, 43,185, 55, 71, 55, 94, 77,142,242,110, 66,105, 83,221, 85,169, 55, 40, 84,132,171,233,139,191,
+ 55,219, 21,203, 32, 55, 53, 30, 73,135,103,170, 13,165, 69, 57, 44,171,115,201,185,127, 6,168, 50, 32,183, 46, 88,150, 13, 8,
+238, 57,132,137,188,173, 69,169, 58, 5,249, 55,126, 78, 20,139,197, 95, 52,241, 57, 84,180,211,199,210,218, 49,242,139, 37, 63,
+ 88,253,122,149,143, 39, 41,119,112,255,224,140, 60, 67,105, 81,207,152,152,152, 6,175,163, 53,129, 16,193,122, 74,117, 67,236,
+236,134, 58, 59,219, 47, 31,251,186, 28,221,122, 73, 97, 38, 52,195,130,175,152,219,246, 33,228,211,244,179,116, 31,241, 35, 2,
+ 26, 67,159,203,140,194, 27, 55,110, 44,118,119,119,103,244,122,253,216,210,210,210,121, 41, 41, 41,149, 85, 68,133, 66,209,219,
+197,197,101,249,194,133, 11,157, 18, 19, 19, 69,231,207,159,127, 18, 23, 23,199, 26, 12,134,165,117, 57,175,229,149,124,222, 78,
+ 46,228,185, 57, 43, 38, 39, 60,126, 60,248,122,190,254,112,197,125,237, 76, 68, 62, 93,125,189,206, 46,156, 63, 67, 94,122,126,
+ 15, 10,211, 30, 99,221,249,180,124,214,160,155, 97, 76,123,149, 74,165, 85, 75, 33, 48, 99,220, 24, 86,173, 86, 67, 38, 18,178,
+143,227,239,243,222,238,213,205,176,108,250, 52, 38, 45, 45, 13, 69,133,133, 60,165, 82,105,165, 82,169,158, 24,227,172, 41, 80,
+212, 84, 5,106, 80,192,168,129,166, 56,171, 87,176, 42,168, 41, 96, 25,235,172,218, 37, 86,149,154,126, 31, 6,131,161, 97, 93,
+132,250, 90, 2, 86,105,102,211, 82, 42,240,136, 16,210,162,226,251, 38,186, 0, 0,197,197,197,118, 85,186, 6,235, 60, 81,172,
+143,242, 10, 86,163,239,175, 78, 69, 5, 43, 33, 33, 1,182,182,182,208,235,245, 48, 49, 49,129, 84, 42,133, 84, 42,133, 70,163,
+129, 72, 36, 2,143,199,171, 95, 86, 5,177, 88,156, 22, 31, 31,239, 98,105,105, 9,131,193,240, 84,200,122,248,240, 33,204,205,
+205, 51,140, 29,127, 5, 0, 60, 30,112,124,243,244, 26,103, 17, 90,152,155, 60, 37,226, 53, 83,181,144,131,163,177, 84, 84,159,
+170,142,165,250,226,139, 47, 26,189,118,200, 23, 95,124, 49,179,169, 85,177,218,224, 3,127, 38,198,234,111, 78,126,126,126,190,
+ 22,214,138,147,159, 46, 92,111,182,253, 50,131,188,212,219, 72, 57, 62, 59,143, 45, 45,234,201, 48, 76,106,114,244,247,187, 1,
+ 20,197,198,198, 70, 25,115, 48,131,193,208,169,141,135, 7,118,221,208,163, 56,237, 42, 24, 66, 55,247,234,213,171,222, 65,215,
+245, 81, 17,174, 62, 15,255,222,106, 87, 28, 31, 57,101, 33, 48,143,109, 68,184, 26, 37, 22,187, 9, 24,102,185, 91,151, 78, 3,
+ 70,216,219, 20,244,119,147, 89,244,119, 19,131,119,254, 55,236, 83,100,224,137,205, 31,152,180, 74,233, 22,189, 55,255,247, 22,
+175,240,159, 12,238,214,209, 76,209,157,127, 64, 71, 13,159,103,158,162,127,251,224,247,123,247,238, 45,116,112,112,248, 53, 45,
+ 45,173,114,116,170,147,147, 83,191,150, 45, 91,134, 47, 88,176,160,101,114,114,178,252,202,149, 43,249,187,119,239,126,200, 48,
+204,130,212,212,212,122,207,238,175,171, 75,167,249,152,138, 54,220, 40,208,199, 87,108,107,107, 34,236, 48,230,237, 17,231,122,
+141,120, 87,242, 32,114, 11,172, 30,223,196,234,139, 25,134,199,121,197, 35,111, 23,209,180,250,156, 74,165,210, 74, 36, 18,237,
+138,216,179,231, 94,187,118,237, 72, 81, 81, 17,116, 58, 29, 50, 51, 51,241,213,182, 93, 55, 88,150,133,165,165, 37, 78,156, 56,
+193,126,244,209, 71,187,148, 74,229, 48, 99, 66, 22,203,178,149, 31, 86, 21, 84,175, 2, 73,165,210,134, 5,140,242,199, 84, 13,
+ 48, 77,113,214, 22,176,170, 87,182, 26,232, 4,128,202,193,237,213,183, 87,192,227,241,192,178,108,141,149,190, 90,209,229,214,
+ 18,176, 50,154,116, 34, 65, 41,117,169,103, 34,205,115,163,124, 41, 6, 0, 96,107, 91,138,161,202, 24,173,122,169,232,246, 19,
+137, 68,136,142,142, 70,223,190,125,193,178, 44,196, 98, 49,164, 82, 41, 36, 18, 9, 46, 94,188, 8,161, 80, 8, 30,143,215,160,
+110, 66,129, 64,112,104,221,186,117, 99,150, 46, 93, 42,101, 89, 22, 34,145, 8, 82,169, 20, 98,177, 24, 95,127,253,181, 70, 36,
+ 18, 29,110, 80,192, 66,253,179, 8, 43,247,109, 88, 22,228,224,104, 16,181,101,145,114, 50,171, 85,158,180, 85,126,206, 68,217,
+181,149, 7,150,127,143, 26,190,215,214,176, 45,123,201,146, 37, 39,171,140,223,202, 68, 51, 82,107, 5,203,215,215,215,203,202,
+214,233,228,212,133,235,205,182, 92,224, 33, 47,245, 22,178, 78,126,153, 71,245,154,170,161,165,107, 3,143,231,107,103,103,141,
+172,232, 98,232,114,238,129, 16, 18,219,248,166,151, 17, 24, 24,232,110, 97,229, 16,249,233,162,239,173,118,196,240,145,155,242,
+103, 8,108, 76,229,138,207, 48, 95,173, 60,242,243, 96,113,218,109,104,174, 70, 90, 8,158, 60,198,141,140, 82,236,138, 78, 83,
+ 71,158,253,225, 12,227, 77, 67,123,142,180, 48,237, 57,210, 10,171, 39, 29,182, 74, 47,190,137, 11,119,247, 15, 9,159,177,159,
+226, 57,173,238, 94, 53, 92, 41, 20,138, 65, 78, 78, 78,243, 15, 28, 56,224,162,215,235,229,167, 78,157, 82,239,222,189,251,190,
+ 94,175,143, 72, 77, 77, 61, 96,172,243, 70,129,182, 50, 92,181, 51, 23,118,122,255,189,119,206,124,180,234,127,146,155, 49,151,
+176,124,203, 1,200, 5, 58, 67, 76, 74,241,176, 27, 5,250, 67,198,248,248,124,254,130, 29, 59,118,152,120,123,123,147,236,236,
+236,202, 15,252,210,210, 82,228,231,231, 87,142, 31,106,215,174, 29, 51,119,238, 92,147, 57,115,230, 44, 0,240,223,186,156,148,
+210,140,249,243,231,219,141, 31, 63, 30,102,102,102,200,206,206,134, 78,167,171,172, 54,137,197, 98, 88, 88, 88, 32, 55, 55, 23,
+199,143, 31, 71, 77, 83,246,171, 34, 20, 10, 83,149, 74,133,179, 84,102,162,149,201,100,212,212,212,180,201, 78, 0, 32,132,164,
+245,239,223,223, 97,254,252,249,162,170,221, 76,165,165,165,164,177, 78, 74,105,209,171,175,190, 42,139,136,136,128,139,139, 11,
+180, 90, 45, 88,150,173,172, 96, 85, 44, 13,240,232,209, 35, 44, 94,188, 24,148, 82,227, 79,100,116, 57, 58, 56,189, 99,139,210,
+108, 29, 74,179,117,208,102,233, 80,154,161,131,190,232, 31, 55, 69,164, 49, 3,208,107,162, 90, 37,172,198, 46,182,134, 84,176,
+202,171,105, 16, 10,133, 72, 78, 78,198,137, 19, 39, 16, 24, 24, 8,185, 92,142,194,194, 66,156, 59,119, 14,105,105,105,141,170,
+ 96,245,236,217,115,243,209,163, 71, 67, 63,252,240, 67,215,137, 19, 39, 74,189,188,188,144,152,152,136, 85,171, 86, 21,223,186,
+117, 75, 53,101,202,148, 31, 26,226, 99,202,151,174, 49,106, 22, 97, 13,203,220,112,112,252, 77, 52,219,242, 9,127, 23,181, 6,
+ 44,134, 97, 62, 9,122, 99,150,217,230,243,124,228,168,110, 32,239,244,220,234,225,170, 94,170, 95,109, 91, 32,145,183,211, 83,
+ 33,128, 98,232,115,239, 67, 36, 18, 53, 56, 0, 85,119,178, 44, 59,173,243, 27,179,172,182, 94,226, 35, 47,229, 22, 50, 35,231,
+ 52, 56, 92, 85, 56, 39, 16, 34,112, 15,246, 31, 32, 78,191,131,226,200,157, 32, 0, 54,196, 21,226,220, 99,237,215,165, 90,237,
+162,155,121, 37,185, 78, 93,136,229,206,240,140, 57,253, 94,107,255,145,231,155,199,113, 33,243, 59, 64, 6, 88,218,242,251, 85,
+237, 46,124, 30, 87, 47, 87, 42,149,238,114,185,252,171, 67,135, 14,217,138, 68, 34,179,155, 55,111, 26,246,236,217,147,108, 48,
+ 24, 86,166,166,166,238,172,233, 49,245, 57,125,164, 82,167,182,109, 92,163,166,172,252, 86,162, 46, 40, 68,161,182, 20,138, 22,
+ 74, 67, 84,204,237, 55,110, 20,104,247, 26,227,180,183,183,239, 49,106,212,168, 14,126,126,126, 76,109,225, 42, 63, 63, 31, 5,
+ 5, 5,120,252,248, 49, 66, 67, 67, 25, 47, 47,175,118,246,246,246, 61,210,211,211, 79,214,214,206,212,212,212,121, 59,119,238,
+ 12,249,229,151, 95, 6,142, 27, 55, 78,254,250,235,175, 67, 42,149,162,176,176, 16,206,206,206, 96, 89, 22,167, 79,159,198,221,
+187,119,213, 0,246,167,166,166,158,173,171,157, 15, 30,220,111, 65, 8, 97,156,156,156, 66,250,246,237,219, 44, 78, 0,200,204,
+204,116,139,138,138,154, 62,100,200,144,143,251,244,233, 35,159, 57,115,166,208,213,213, 21, 6,131,129, 52,214,153,147,147, 99,
+ 30, 27, 27,187,162,107,215,174,255,237,219,183, 47, 63, 60, 60, 28,230,230,230, 48, 24, 12,144, 74,165,200,207,207,199,130, 5,
+ 11,112,230,204, 25, 61,165,244,155,188,188,188, 79,235,114, 62,181, 14,214,148,175, 59,214,244,186, 86,217,183,198,117,176,158,
+199,223,188, 70,163,177,111,104, 85,204,152,118,198,198,198,210,234,235, 97,213, 85,193,170,238,172, 24, 15, 38, 18,137,192,231,
+243,145,153,153,137,163, 71,143, 62,181,254,149, 72, 36,170, 92,198,161,166, 10, 86,109,237,148,203,229,236,127,254,243,159,177,
+135, 14, 29, 26, 51,109,218,180, 33,106,181,218,206,204,204, 44,211,196,196,100,255,148, 41, 83,126,180,176,176,168,117,137,134,
+154,156, 60,134,212, 58,139,176, 42, 44, 79, 84, 92,211,112,173,231,241,186,115,206,151,211,249,178, 81,215, 24, 44,201,217,152,
+187, 96,196, 25, 80, 95,248,170,193,225,170, 38,244, 37,133, 9, 11,127,126,224,107,208,106,160,207, 79,186,211,119, 64,255, 70,
+159,113, 86, 64, 41, 53, 57, 19,155, 0,190, 36, 27,185,231,151,229, 18, 67, 73,207,152,152,152, 6,173,127, 83,193,122, 74,117,
+163, 77, 76, 34,239,159, 57,241,138, 2, 64,210, 19, 45,174,196, 63, 57,250,107, 81,209,180,138,125, 30,159,163, 57, 0, 62,118,
+236,198,180,177,242,200,235,109,174, 0, 50, 30,233,144,147,169, 63,244,188,198, 98, 85,160, 82,169,238,249,248,248,108,217,184,
+113,227,164, 78,157, 58,153, 78,158, 60,185, 98,224,251, 47,141,117,222,208,104, 30,251,200, 69,223, 69,110, 88,245,153,196, 43,
+ 16,123,194,103, 24, 78,197,196, 15,189,174,214, 26,221,103, 45, 22,139,195, 38, 77,154, 36, 44, 42, 42,170, 53, 92,229,231,231,
+ 67,173, 86, 35, 63, 63, 31, 87,174, 92,193,235,175,191, 46,190,125,251,118, 24,128,147,181,121, 41,165, 44,128,211,110,110,110,
+ 23,191,251,238,187, 94, 91,183,110,237,253,222,123,239,137,194,194,194,112,243,230, 77, 92,188,120, 81, 91, 90, 90,122, 76, 34,
+145, 28, 79, 72, 72, 48,106,112,211, 51,114,234, 1, 44,182,177,177,137,216,189,123,247,162, 63,254,248,227,173, 49, 99,198,152,
+232,245,122,210, 68,231,199,182,182,182,179, 15, 30, 60,184,249,232,209,163, 67,223,122,235, 45,102,202,148, 41, 88,187,118, 45,
+246,236,217,195, 26, 12,134,189, 2,129,224,157,204,204,204,122, 39,160, 60,181, 14, 86, 29,235, 92,213,119,191, 17, 60,139,179,
+208, 38, 59,171, 87,194, 58,117,234,100, 95,117,150,102,213,175, 13,161, 67,135, 14, 79,173,115, 85, 49,160,189,226,198,227,241,
+192,231,243, 27,212, 69,232,227,227, 3,129, 64,192,250,250,250,254, 8,224, 71,224,233, 75,230, 8, 4,130,202, 69, 77,141,161,
+ 68,207, 98,195,198, 45, 23,245, 44,133,129,165,160, 44,160,163, 0,107, 96, 97, 96, 41, 12, 44, 91, 54, 11,155, 2,154,226, 70,
+ 47, 75,200,193,241,175,163,174,128, 53,179, 32,102,141, 14,128, 53, 33,100, 70, 76, 76, 76,157,215,180, 50, 6, 30,143,153,145,
+177,239,221, 8, 10,228,240, 8,140, 26, 24, 93, 31, 6,131, 97, 86, 97,108, 4, 75, 41,181, 32,132,124,113,249,242,229, 38,181,
+147,234,245, 31,124,245,195,233,175,109,205, 69,189,179,114, 75, 14,130,144, 26, 87,109,215,131,126,248,211,178, 71,203, 44,109,
+249,253,114, 50,245,135, 88, 6,245,174,238,254,119,112,227,198,141,112,119,119,119,222,255,254,247,191,177, 90,173,246,169,129,
+239,141,118,170,181,159,183,147, 11,121,109, 92,157, 38,199, 39, 62, 26,114, 93,109, 92,183, 96, 21, 68, 74,165,242, 70, 81, 81,
+ 17, 8, 33, 40, 41, 41,121, 42, 80, 85, 13, 88,165,165,165,200,200,200,128,171,171, 43,170,172,153, 84, 39,229,161,228,128,141,
+141,205,169, 53,107,214, 12, 88,187,118,109, 48,203,178,209,165,165,165, 7,178,178,178, 10, 26,254,140,159,141,179,252,113, 31,
+201,100,178,165,107,215,174, 93, 33,145, 72,252, 51, 50, 50,162,154,226, 44, 15, 79,111, 88, 91, 91, 43,182,108,217,178,107,227,
+198,141,157,249,124,254,121, 66,200,176,220,220,220,198, 92,236,249, 78, 19,239,175,143, 61, 77,124,252, 51,113, 54,100,249, 5,
+ 99,208,235,245, 5, 51,102,204,200,168,126,205,193,170,107, 94, 85,253,170,213,106,235, 93,159, 67,175,215,179, 95,126,249,101,
+157, 39,113, 85,131, 86,113,113,113,189, 93,186,148,165, 89,253,135,127, 80,223,110,127,121, 76,131, 30,192,193,241, 47,165,214,
+128, 21, 19, 19,147, 12,224,221,230, 60, 88,223,190,125, 79, 0,240,106, 78,231,149, 43, 87,146, 0,188,213, 92,190,237, 37, 37,
+ 9, 0, 6, 78, 32, 68,240, 19,173,189, 34, 85, 62,160,253,181,231, 57,139,176, 54,106, 26,248,222, 84,106, 26,248,110, 44,122,
+189,254,136, 88, 44, 38,249,249,249, 40, 45, 45,133, 90,173,174, 12, 87, 85, 67,150, 94,175, 7, 33, 4,106,181, 26,166,166,166,
+208,233,116, 13, 42, 25,148,135,148,157, 97, 97, 97,187, 35, 35, 35, 27,124,225,241,191,203, 89, 84, 84,148, 6, 96, 84, 88, 88,
+ 24,191,185,156,217,217,217, 41, 0,130,221,220,220, 68,198, 86,193,106,162,190, 11, 57, 27,123,161,231, 58,248, 95, 19, 31, 95,
+ 19,219,234,223,229,239, 37, 49, 49,209,187,185,157,143, 30, 61,106,182,255,231, 10, 18,207,111,157,218,220, 78, 14, 14,142, 50,
+254,182,245,156,230,206,157,251,143, 27, 32, 91, 23,235,235, 8, 87, 85,249,167,133,171, 10,154, 51, 92, 85, 80,117,224,123, 67,
+ 80,169, 84, 39, 1,192,206,174,108,236,176,179,179,179,177,143,107,204,225,208, 92,161,229, 69,116, 54, 37, 92,253, 29, 80, 74,
+ 27, 85,169,171,199, 89,239, 44, 86, 14, 14, 14,142,191, 27,110,217, 56, 14, 14, 14, 14, 14, 14, 14,142,102,134, 0,104, 87,211,
+ 29, 13,153, 29, 64, 8,169,209, 81, 23,245,249, 57, 39,231,228,156,156,147,115,114, 78,206,249,242, 57,235,115, 87,155,145, 59,
+190,234, 74,238, 47, 18,164, 49, 51, 99,140,150,191, 32, 83, 67, 57, 39,231,228,156,156,147,115,114, 78,206,249,124,157,181, 28,
+231,133, 13, 88, 92, 23, 33, 7, 7, 7, 7, 7, 7, 7, 71, 51,243,220, 47, 90,204,241, 98,224,228,228,180, 36, 40, 40,232,131,
+ 75,151, 46,173,124,244,232,209,130, 70, 58, 20,214,214,214,139, 1, 4, 83, 74,197, 60, 30,239, 86, 86, 86, 86,120,114,114,242,
+233,198,182, 75,161, 80, 56,219,218,218, 46, 6,208,153,101, 89,161, 64, 32,184,145,158,158,190, 72,165, 82,157,111,172,211,214,
+214,214,196,209,209,209,159, 82,106, 71, 41,101, 4, 2, 65,142, 74,165,186,146,145,145,209,228,117,219, 56, 56, 56, 56, 56,254,
+ 29,212, 25,176,230, 79, 38,142, 40, 5,127,238,122,154, 12, 0,132, 16, 51, 0,254, 40, 91,106,225, 54,128,203,148,210,252,166,
+ 52,224, 69,113,254,211, 33,132, 48, 22, 22, 22,175,202,100,178,143, 10, 10, 10,124,205,204,204,110,148, 95, 30,103,127,249,226,
+153,141,198,206,206,206,110,248,240,225, 95,172, 89,179, 6, 99,199,142,157,109, 99, 99,179,170,161,235, 54,121,123,123, 15, 86,
+ 42,149,235, 23, 46, 92,100, 27, 24, 24, 72, 36, 18, 9, 18, 18, 18,148,179,102,205,236,212,169, 83,167, 93,177,177,177,117, 94,
+ 22,167, 38,124,124,124,134,185,184,184, 68,132,135,135,219,250,251,251, 19, 62,159,143,107,215,174, 57,205,159, 63, 63,208,215,
+215,119, 75, 92, 92,220,180,250, 45, 79,211,174, 93, 59, 87, 55, 55,183,224, 69,139, 22, 73, 2, 3, 3, 33, 22,139,113,235,214,
+ 45,147,153, 51,103,218,118,234,212,233, 94,108,108,236,133,134,248,252, 38,196, 10,132,178, 82, 62, 0,148, 22, 9,245, 49,235,
+ 59,233,140,221,214,208,182,115,112,112,112,112,252,115,168, 53, 96, 45,152, 68, 22, 48,192, 76, 48, 32, 31,143, 36,191,172,253,
+133,185,216,171, 87,175, 54,239,189,247, 30, 41,191,116,132,247,206,157, 59,223,224,241,120,241, 44,203, 94, 0,112,133, 82, 90,
+ 90,155,175, 42,229, 11, 72,118,100, 24, 38,232,159,236,124, 17,144,203,229,238,182,182,182,211,172,173,173,251,249,251,251,231,
+ 79,156, 56, 49,241,252,249,243, 15, 2, 2, 2,138, 55,110,220, 24,174,211,233,190,245,240,240, 56,166, 86,171, 87, 52,118,233,
+ 6,129, 64,224, 69, 8,129, 74,165,130, 64, 32, 16,136, 68, 34,111, 0, 70, 7, 13,103,103,103, 71,133, 66,241,191, 95,126,140,
+136, 96, 97, 0, 0, 32, 0, 73, 68, 65, 84, 59, 98,151, 95,194,224, 94, 38, 11,160, 8, 6,198, 6, 11,151,175,181, 94,177,120,
+246, 72, 15, 15,143, 51,119,239,222,253,217, 88,167, 66,161,112,118,113,113,137,248,227,143, 63,236,196, 98, 49, 88,150,133, 90,
+173,134,157,157, 29,150, 44, 89, 98,181,112,225,194,247, 92, 93, 93, 79, 61,124,248,112,159,177, 78, 91, 91, 91, 19, 55, 55,183,
+224,147, 39, 79, 74, 68, 34, 17,209,233,116,164,164,164, 4, 14, 14, 14,244,235,175,191, 22,207,154, 53,203,211,213,213, 53,237,
+225,195,135,143,140,241,249,125, 31, 43,200,207, 58,217,133, 38,107,102, 3, 0,145, 72, 23,133,205,183,186,152,159,117, 50,176,
+190,109,126,223,227, 92,204,120, 46,100,113,252,189, 40, 20,138, 16, 87, 87,215,223, 30, 61,122, 20,205,227,241,222, 76, 76, 76,
+108,216, 85,210,107,128, 16,226, 4,192, 21,128, 37,202, 38, 86, 61, 1,144, 72,105,217,137,123, 99,176,113,235, 49, 8, 98,217,
+187,160,180, 35, 3, 0, 12,115,133, 45, 45,220,148,117,231,164,209,255,239, 53, 58, 37, 38, 99,193,178, 29, 25, 80, 22, 12,239,
+ 42,213, 23,254,144,121,251,100, 67, 23, 86,230,224, 0, 80, 75,192,154,255, 62,177,100, 4,152, 62, 99,226,120,134,207,227,145,
+240,245,223,143,184, 20,189,143, 58,182,232, 88,121,201,141,208,208, 80,132,134,134,146,229,203,151,123,253,241,199, 31, 94,219,
+183,111,215, 17, 66, 98, 40,165,155,107, 59,216,146, 41,178, 71,122,157,198,121,193, 7,210,226,150,157,191,221, 30, 28, 28,202,
+138,197, 98, 52,197, 9, 0,255, 29, 38, 56, 54,118,152, 43, 9, 27, 56, 39,169,185,156, 47, 2,114,185, 60, 74, 46,151,187, 77,
+152, 48,225,222,164, 73,147, 78,153,152,152, 80, 0,200,200,200, 48, 25, 48, 96, 64,206,208,161, 67,179,139,138,138,240,221,119,
+223, 57, 71, 68, 68, 28, 51, 51, 51, 83,229,231,231, 7, 26,235, 39,132,240, 29, 29, 29,151,246,238,221,123,234,168, 81,163, 32,
+151,203, 49,102,204, 24,148,148,148, 68, 43, 20,138,229,169,169,169,179, 41,165,245, 94, 59,195,210,210,114,238,252,249,243,237,
+ 10,180, 60,204,222,154,128, 39, 5,101,185, 65, 38, 98,240,223, 87,196,120,251,237,119,204,227,226,226,150, 3, 48, 58, 96,217,
+218,218, 46, 14, 15, 15,183,173,120,173, 11, 10, 10, 80, 80, 80, 0,181, 90,141,130,130, 2,140, 26, 53,202,236,222,189,123,171,
+ 1, 24,253,134,235,232,232,232,191,104,209, 34,137, 72, 36,194,190,125,251, 58, 20, 23, 23,243,117, 58, 29, 40,165,250, 54,109,
+218, 92,121,231,157,119,132,119,239,222,237, 2,192,168,128,229,152, 6, 65,158, 70,243,205,186,101,159,217, 2,192,135,211,191,
+250, 6,208, 4, 81, 35,182, 57,166, 33, 0, 0, 23,176,234,128, 16,194, 3,240,154, 64, 32,120,221,205,205,205,255,222,189,123,
+113,122,189,254,255, 0,252, 31, 53,114, 29,187, 58,220,175, 40, 20,138,197, 41, 41, 41,235, 40,165, 63, 53, 79,139,255,249,180,
+110,221,250,215,237,219,183, 91, 31, 60,120,112,240,194,133, 11,135, 3,216,210, 88, 23, 33, 68, 0,160, 11,202, 66,213,109,148,
+ 5, 43,160, 44,104,181, 33,132,180, 6,112,182, 33, 39,188, 54,158, 33,166,224,155,237,236,210,179,111,215, 97,111, 12,149,219,
+ 90,153,163,176,196,128,187,137,105, 45,142, 30,252,181,187, 67,187, 1,209,250,210,188, 17, 89,119,206, 26, 93, 97,175,112,246,
+232, 55,184,107,207, 87,122,201,205,205, 45,144,173,214,225,126,226, 99,151,168, 99,123, 67,237,219, 13, 56, 5,162,123, 43,253,
+218, 81,227, 47,152,206,193, 1, 35, 7,185, 19, 66, 96, 98,106, 82,227,125,230,230,230, 8, 11, 11, 67,120,120,184, 0, 64,231,
+170,247, 85,159, 97, 96, 48,104, 29,103,255,119, 50, 68,124, 42, 30,208,175, 15, 49, 51, 51,107,178, 19, 0,236,173,244,189,130,
+ 60, 53,221,211,175, 76, 25,125, 37,106,113, 59,109,113,238, 95,174,116, 42,147,201,224,238,238,142, 89,179,102, 25,229,108, 42,
+127,135,147, 82,170,240,246,246, 86,175, 90,181,202,115,206,156, 57,150,197,197,197, 38, 0,156,188,125, 67, 20, 12,195, 56,107,
+181, 90,249,188,121,243,108,150, 45, 91,230,105,107,107,155, 75, 41,181,109, 72, 59, 29, 29, 29, 87,133,135,135, 79,219,180,105,
+ 19, 9, 8, 8,128, 92, 46, 71,151, 46, 93,176,117,235, 86,102,238,220,185, 95, 56, 58, 58, 46, 53,166,157, 0, 66, 3, 3, 3,
+ 9, 11, 32,167, 64,143,147, 75,252,112,246,171, 0, 20,105, 89,228,169, 11,160,209,104, 32,145, 72,164, 54, 54, 54,166,198, 62,
+119, 0,157,253,253,253, 9,128,202, 80,165, 86,151,221, 10, 10, 10,161,213,150,130, 97, 24,179,150, 45, 91,138,107,208,213,232,
+164,148,218, 5, 6,150,229,207,226,226, 98,254,224,193,131, 49,112,224, 64,168,213,106,126,126,126, 62,180, 90, 45, 24,134, 17,
+150,127,176,215,235,212,202, 4,132,165,172,189,137, 76,106, 99, 34,147,218,176,148,181, 7, 0, 99,182,105,101, 2, 82,147,179,
+185, 48, 98,106,182, 45,143,199,251,209,205,205,237, 22,143,199,219, 66, 8,113,104,138,147, 16, 18, 64, 8, 9,151,201,100,199,
+189,189,189,147, 77, 76, 76,254, 32,132, 44, 37,132,116,105,140,147, 16, 34,146,201,100,127,132,135,135,239,138,139,139, 27,126,
+226,196, 9,215,107,215,174,189,177,124,249,242,157,166,166,166,167, 8, 33,210,198,180,179, 2, 87, 87,215,141, 23, 46, 92, 8,
+ 8, 14, 14,222, 64, 8,169,245,111,168, 33, 78, 66, 8,143, 16,226, 75,140,188,240,224,223,253,186, 59, 57, 57,185,249,250,250,
+218,240,120, 60,132,134,134,130, 82, 26,218, 68,103, 48,128, 52, 74,105, 20,165, 52,147, 82,106, 40,191,101, 81, 74, 79,163,236,
+ 68,165,198, 99,212,234,228,155,237,252,232,147,207,251,126, 58,249,125,121,108,146, 1, 63, 28, 77,197, 47,103, 50,161, 82,139,
+209,123,200, 88,243,238,253, 71,245,225, 11,205,107,188,176,125, 93,206, 47,190,152,217,247,253, 49,163,229,215, 83, 24,236, 58,
+155,133, 51,183,243, 81, 68, 44, 17, 54,100,188,165,119, 96,191, 1, 4,194,205, 13,124,238,141,230,223,236,124,217,168,177,130,
+ 53,119, 3,205, 89, 48,137, 44, 11,255,238,251,217, 12, 33,212,201,163,207, 77, 87,247,206,133, 44,203, 66,163,209,160,180,180,
+ 20, 2,129, 0, 26,141, 6, 73, 73, 73,184,112,225, 2,204,205,205, 27,116,224,220,188, 60, 40,157, 92, 33,147,201,154,197, 57,
+238, 63, 67,249,143, 82, 83,249,209,177, 39,253,126, 94,179,221,207,185,117,239,219, 29,195, 62,191,110,106,222, 66,115,229,202,
+ 21,156, 59,119, 14, 57, 57, 57,168,248, 0,125, 25, 32,132,232, 86,172, 88, 17,155,146,146,130,211,167, 79,251,206, 95,189,173,
+229,245,252,214,252,204, 2, 42,176, 53, 77,119,241,146,222, 49,228, 60,121,242, 96,218,180,105,127, 56, 58, 58,106, 39, 79,158,
+220,221, 24,175,147,147,147,132, 16,226,215,191,127,255,255,190,243,206, 59, 72, 76, 76,196,167,159,126,170,189,114,229, 74,174,
+159,159,159,229,138, 21, 43,132,227,199,143, 71,116,116,244, 52, 39, 39,167,221, 0,110, 60,126,252,184,174,107,169,137, 36, 18,
+ 9,144, 87,118,162, 90,170,167, 0,202,134,133, 21, 20, 20,128,161,185, 16, 10,133, 12,195, 48,182, 0,140, 58,243,100, 89, 86,
+ 40, 18,137, 80, 88, 88,136,130,130, 2,168, 50, 11,144,148, 94, 8,117, 97, 9, 52, 26, 29, 74,138, 41,196,114,123, 70,151,153,
+105, 13,192,168, 37,225, 41,165, 76, 69,119,163, 86,171,133, 70,163,129, 86,171,133, 86,171,173,188,156, 15,143,199,147, 43,149,
+ 74, 51, 0, 57,245,249,120, 34,169,158,199, 8,195,103, 46,250,102, 30, 0,240, 24, 97,184, 41,138, 89, 99,182,241, 68,210,102,
+ 95,229,221, 88, 8, 33, 98, 91, 91,219,147,187,118,237,242,118,119,119,199,195,135, 15,189,134, 13, 27, 22, 68, 8,241,165,148,
+ 54,232, 44,158, 16, 34, 99, 24,102,217,187,239,190,251,193,200,145, 35,137,135,135, 7,248,124, 62,244,122,189, 83, 66, 66, 66,
+143, 95,126,249,101, 58,159,207,255,193, 96, 48, 76, 51,118,149,119, 66, 8, 35, 18,137,126, 94,191,126,125,183,160,160, 32,108,
+217,178, 5, 23, 47, 94,100, 3, 2, 2,152,183,223,126, 27, 46, 46, 46,157,223,126,251,237, 61,132,144,129,198, 84, 88,107,240,
+187,140, 30, 61,218,153,199,227, 33, 56, 56, 88, 24, 29, 29,221, 9, 64,116, 67, 61,213,156,166, 78, 78, 78, 81, 97, 97, 97,190,
+199,143, 31,143, 37,132,132, 53,100, 85,123,133, 66, 49,196,222,222,126,185, 92, 46,183, 52,246, 49, 5, 5, 5, 69,233,233,233,
+159,170, 84, 42,163,174, 71, 74, 41, 13,110,223,190, 61,244,122, 61,204,205,205,225,224,224,208, 85,169, 84, 78, 51, 55, 55,127,
+ 45, 63, 63,127,234,227,199,143, 47, 26,123,108, 66,136, 18, 0, 67, 41,189, 87,254,115, 75, 0, 21,151, 89,186, 67, 41,125, 72,
+ 41,125, 64, 8, 81, 16, 66,156,141,233, 46,180,113,235, 49, 40,184, 87,255,174,161, 65,237,152, 37,187, 19, 97, 96, 89,240, 97,
+ 0,159,199, 34,203, 32, 0, 33, 4, 46,158, 1, 60,251,235,151, 59,219,120,246, 30,148,117,231, 88,189,213,107, 27,183, 30,131,
+250, 14, 30, 26,218,198,211,131, 89,249,219, 35,228,170,174, 27,210,111,255,145, 69, 24, 6,173, 58,246,182,113,241,244,229,185,
+249,190, 34, 72, 79,188,222,195,202,189,123,175, 39,247,162,142, 27,251, 59,224,224,168, 12, 88,132, 16, 74, 41,173, 60,179,154,
+243, 29,157, 99, 99, 73, 90,222,188,126,149, 73, 78,211, 22, 94,189,122, 21,214,214,214,176,179,179,131,153,153, 25,226,227,227,
+113,252,248,113,220,185,115, 7,148, 82,248,250,250, 54,232,192,233,105,105,200,126,162,110, 86,103, 11, 71, 71,180,112,116,228,
+103,229,228,226,220,213,107,222,251,126,232,213, 38,157,153,176, 73,163,209, 84,238,163,211,189,124,189, 46,118,118,118,134, 15,
+ 63,156,156, 61,238,155, 7,173, 71,244, 84,242,134,116,113,192,111,209,169,188,157,145, 60, 58,251,189, 14, 89, 9, 9,119,141,
+126,210, 46, 46, 46,139,123,244,232,241, 25,159,207, 23,140, 31, 63, 30, 0, 48,101,202,148,146,107,215,174,181, 77, 78, 78,126,
+224,232,232,216,102,234,212,169,215,246,236,217, 35,120,255,253,247, 73,113,113,241, 69,129, 64, 64, 21, 10,197,130,148,148,148,
+121, 53, 57,121, 60, 94,220,205,155, 55, 91,234, 37, 10,216,200, 25,244,153, 29, 11, 0, 48, 21, 83,100,165,171,112, 35,225, 18,
+108,109,109,205,109,108,108,110,135,132,132,148,164,167,167,127,116,255,254,253,205,117,181, 83, 32, 16,220,184,118,237,154,147,
+189,189, 61, 10, 10, 10,144,156, 81,136, 31,207, 17, 20,149, 72, 1, 72,193,131, 28,114, 27,103,121, 43, 90,116,165, 93,187,118,
+165, 90,173,246,139,187,119,239,214,217,213, 35, 16, 8,114,110,221,186,101,162, 84, 42,193,227,241, 74,127,249,229, 23,161, 86,
+171, 5,165, 84,127,240,224,193, 55,115,115,115,131, 91,183,110,205,184,184,184,172, 8, 9, 9,209,164,166,166,142,123,248,240,
+ 97,173, 23, 26, 62, 60,197,173,180,251,188,200,111,115, 31, 38,255, 2, 0,202, 32,239, 39,251,231,117,210,118,159, 87, 80,239,
+182,195, 83,220, 74, 49,249,217,173, 81, 87, 15,239,206,156, 57,211,219,202,202, 10, 19, 39, 78,196,252,249,243, 49,103,206, 28,
+247,137, 19, 39,142, 7,176,202, 88, 9, 33, 68,234,224,224,112,105,205,154, 53, 94, 33, 33, 33, 56,120,240, 32,118,236,216,129,
+ 7, 15, 30,232, 93, 93, 93,249, 65, 65, 65,152, 59,119, 46,250,244,233, 51,110,242,228,201,221, 9, 33,157,140, 12, 29, 99,231,
+206,157, 59,164,107,215,174, 24, 51,102, 76, 73,100,100,228,112, 0, 71,143, 29, 59,214, 51, 42, 42,106,247,182,109,219,164,225,
+225,225,125,167, 78,157, 58, 9,192,186, 70, 60,255,161,221,186,117, 3, 0,116,237,218, 21,203,151, 47,239,131, 38, 4, 44, 66,
+136,200,218,218,250,192,150, 45, 91,124, 61, 61, 61,241,214, 91,111,117, 26, 62,124,248, 1, 66, 72,111, 74,169, 81,151, 54,114,
+116,116, 92,182,126,253,122, 55,169,180,214,194,220, 95,208,106,181, 86, 19, 38, 76, 88, 10,192,232,128,213,174, 93, 59, 68, 70,
+ 70,162, 87,175, 94,240,241,241,113,155, 48, 97,194,138, 62,125,250,224,147, 79, 62, 57,227,224,224,160, 72, 75, 75, 51,246, 66,
+207, 46, 0,226, 1,128, 16,210, 2,128, 59,128,179,229,247, 5, 17, 66, 64, 41,125,136,178,139,135,183, 1, 80,255,120, 44,137,
+201,187,131, 7, 14,148,255, 95,116, 6, 12, 44, 11, 47,165, 4,222, 45,204,144,152, 81,140, 68, 85, 54, 4,164, 20,114,169, 24,
+237,131, 7, 88, 62, 73, 79,124, 23,198, 12, 15, 16,203,222, 29, 58,120,160,233,175,231, 50,144,171,186, 65,147, 46,253,242,135,
+174,184,112, 28, 0,220, 60,245,211,255,236, 45, 37,189, 61, 58,250,241,138, 66,135, 88, 70,253,246,221,187, 0,184,128,245,140,
+169,158, 69, 94,100,234,156, 69,152,157, 11,141,181,131, 55,146,211,226,202,126,206,206, 70,118,118, 54, 90,181,106,133,136,136,
+136,167,246, 45, 46,174,247, 98,240, 53, 31,227, 25, 56,109, 44, 45, 48,184, 71,119,222,245,248,239,120, 26, 86,243,212,125,141,
+117,254, 83,161,148, 82, 66, 8, 73,202,210, 89,100,229,235,132,111,246,112,166, 2, 30,131, 17, 61, 90,144,117,251,146,132, 89,
+ 26,153, 5,143,199, 99,140, 57,147,247,243,243, 19,244,232,209,227,179,141, 27, 55, 10, 82, 83, 83, 97, 97, 97, 1,157, 78,135,
+184,184,184,148,148,148,148, 7, 0,144,154,154, 26,239,228,228,148,110, 48, 24,156,188,188,188, 48, 97,194, 4,180,105,211,134,
+ 76,155, 54,109, 58, 33,100, 65, 77, 51, 22,211,211,211,195,103,205,154,213,109,241,242, 8,235,209, 65, 4,133, 69, 90, 20, 20,
+ 20, 32,241,238, 13,208, 2, 45, 86,174,252, 26, 82,169,148, 0, 16,102,102,102, 10,231,205,155,187,193,223,223,127,224,229,203,
+151, 95,175,173,173,233,233,233,139,230,206,157, 27,184,114,229, 74,171,130,130, 2,104,138,139,161,214,136,112,225,235,178, 10,
+101,208,212,139, 88,247,213, 10,166,157,139,137,117, 65, 65, 1, 62,251,236,179, 53,190,190,190,157,227,226,226, 62,168,205,169,
+ 82,169,174,204,156, 57,211,118,237,218,181,226, 54,109,218, 92,203,207,207, 71, 78, 78, 14,179,103,207,158,133, 46, 46, 46, 86,
+107,214, 68, 16,153, 76, 6, 0, 72, 78, 78, 22,206,158, 61,235,231,246,237,219,111,187,118,237,218,152,218, 94, 27, 0, 37,132,
+ 32, 85,161,104,229, 86,116,142,153,167, 80, 20,159,137,156,171,218, 74, 8, 82,203,246, 1,117, 92,239, 56,250,209, 22,113,215,
+146, 18,118,117, 90, 90,210, 29, 74, 65, 49,247,185,133, 43,216,216,216, 76, 30, 50,100, 8,150, 46, 93,138,125,251,246, 77,181,
+178,178,250,122,254,252,249, 80, 40, 20, 31, 18, 66, 86, 83,227, 87, 39,254,106,213,170, 85, 94, 94, 94, 94,120,231,157,119,180,
+199,143, 31,159, 9,224, 55, 0, 73,167, 79,159,110,177,121,243,230, 65, 63,255,252,243,210, 53,107,214, 72,214,174, 93,235,246,
+198, 27,111,172, 6,240, 94,125, 82,123,123,251, 79, 70,142, 28,137, 21, 43, 86, 32, 50, 50,242, 13, 74,233,193,242,187, 14, 17,
+ 66, 6,133,135,135,159,152, 61,123, 54, 86,173, 90,245, 49, 26, 24,176, 8, 33,166,222,222,222, 95,246,237,219, 23,167, 79,159,
+ 70,104,104, 40,186,116,233, 50,149, 16, 18, 65, 41, 53, 54, 92, 84,245, 49,166,166,166, 63,111,218,180, 41,180,101,203,150, 88,
+180,104, 17, 62,251,236, 51,108,220,184, 49,244,173,183,222,250,153, 16,242,186, 49,179,124, 77, 77, 77, 77,165, 82, 41,150, 46,
+ 93, 74, 31, 61,122, 84,111,245,212,209,209,209,242,203, 47,191, 36,230, 70,116, 3, 16, 66,120, 10,133,194,220,193,193,161,155,
+131,131, 3,214,172, 89, 3, 59, 59, 59, 76,157, 58, 21,214,214,214, 40, 44, 44,196,235,175,191, 46, 56,127,254,252, 8, 0, 17,
+245,249,202,177, 6, 80, 81,241,242, 70,217, 88, 43,117,249,241,206, 3,232, 10,224, 33,202,198,101, 89, 25, 35,100, 40,109,103,
+105, 97,134,148,107,233,224, 67, 15,175, 22,114, 92, 78, 40, 68,169,129, 66,102, 98,138, 66,117, 46, 58,186,217, 34,191,200, 9,
+ 0,107,212,234,227, 66, 30,227, 39, 18, 75,145,145,159,135,180, 91, 39,178, 75, 13, 37, 19,114, 31,156, 73, 6, 0,171,214,221,
+ 38,220,184,112,248,242,235,253, 66,237, 50,115, 90,128, 82,246,229,233,254,224,248, 91,168,119, 12, 22,203,254,245,127,191,106,
+ 69,168,130,210,210,166, 77,204,123, 22,206,154,120, 22,206,127, 0, 84,105,201,207, 51,145, 48,250, 99,151, 51, 12, 58,189, 1,
+ 71, 46,167, 25,100, 98,162,183, 20,107,243, 89,150, 53,234, 3, 49, 38, 38, 70,119,250,244,233, 45, 51,102,204,192,170, 85,171,
+112,255,254,125, 8, 4, 2,120,122,122,218, 59, 59, 59, 59, 2,101,179,247,124,124,124,108,120, 60, 30, 18, 18, 18,176, 99,199,
+ 14,204,155, 55,143,198,196,196,108,172,237,131, 34, 37, 37, 37, 46, 61, 61,125,253,146, 5, 51,115, 5, 37, 41,144, 25, 50, 97,
+200,189, 15,129, 33, 15,147,167,206,192,195, 44, 3,226, 30,170, 17,247, 80,141, 52,141, 4, 95, 46, 90,201,115,119,119, 31,228,
+228,228,212,167,182,182,170, 84,170,243,169,169,169, 91,231,204,153,147,151,149,149, 85,249,247, 83,170,103, 81,170,127,186, 25,
+166,166,166, 88,178,100,137,133,163,163,227,155, 74,165, 50,172, 54,103, 70, 70, 70, 70, 74, 74, 74,194,140, 25, 51, 74, 51, 51,
+ 51,145,159,159,143,195,135, 15,191,209,170, 85, 43,171,105, 51, 22,144,135, 89,180,178,157,121,172, 5, 86, 68,252,192,107,221,
+186,245, 40,133, 66, 81,231, 56, 34,133, 66,233,230,237,221,122,215,249,243,231,199,184,185,185,125, 0,148, 5, 43, 74, 65, 1,
+192,213,213,117, 98, 76, 76,204, 88, 95,223,182,187,236,237, 29,218,212,229,122,214, 16, 66,122,188,249,230,155,109, 88,150,197,
+174, 93,187,174, 81, 74, 87,253,250,235,175,151, 74, 74, 74, 48, 98,196, 8, 87, 0,125,141,244, 4,140, 26, 53,234,131,208,208,
+ 80,124,252,241,199,165,199,143, 31,247,163,148,126, 77, 41, 77,164,101, 36, 81, 74, 35,162,162,162, 58, 78,158, 60,185, 36, 48,
+ 48, 16, 99,198,140, 25, 75, 8,169,115,220, 15, 33, 36,120,228,200,145, 94, 44,203, 98,231,206,157, 87,171,132, 43, 0, 0,165,
+244,143,221,187,119,159,215,106,181, 24, 61,122,116, 43, 66, 72,207, 6, 60,119,161, 88, 44,222,181,112,225, 66, 11,149, 74,133,
+183,223,126,187, 36, 62, 62, 30,243,230,205,147,154,155,155, 31, 36,132,212, 58, 70,176, 54,196, 98,241,247,223,125,247,221,144,
+246,237,219, 99,210,164, 73,218,111,191,253,118,202, 7, 31,124,160,245,243,243,195, 55,223,124, 51, 68, 36, 18, 53,104,133,234,
+244,244,244,220,200,200, 72,235,250,110,105,105,105,233,198,248, 90,180,104, 97,225,227,227,115, 45, 32, 32, 32,171, 67,135, 14,
+173, 1,224,198,141, 27,153,187,118,237,162,214,214,214, 56,124,248, 48,190,255,254,123,132,132,132, 64, 46,151,143,104, 64, 83,
+105,249, 13, 85,190, 86,191,191,250,126,117, 67, 8,205, 43,210,131,207, 48, 16,240, 40,146,210,139, 81,106,160, 16, 10, 24, 8,
+120, 0,159,161,176,150, 11, 32, 16,240, 0, 16,163,156, 12, 33,200, 41,212,129,207, 35, 16,136,132,132,209, 27, 42, 75,132, 12,
+223, 32, 21, 75,196,196,206, 92, 8, 33,159,192,184,145,115, 28, 28,127, 82,239, 66,163, 6,195, 95, 11, 31, 53, 85,129,180, 90,
+163, 42,221,181,242, 44,156, 53,241, 44,156,207,147,252,252,124,126, 84, 84,148,185, 64, 32, 48, 25,216, 62, 36,123,217, 47,119,
+109,230,111,191, 3, 17, 15,100, 80, 7, 38, 53,242,228,113,146,147,147, 99,233,238,238, 94,239, 89, 47, 0,220,191,127,127,156,
+163,163,227, 34,134, 97, 2, 13, 6,195, 47,171, 86,173,194,186,117,235,100, 19, 39, 78,140, 87, 40, 20, 42, 15, 15, 15,231,213,
+171, 87,139, 1, 96,235,214,173, 56,114,228,200, 80,129, 64,112, 49, 41, 41, 41,173, 46,239,149, 43, 87,102,187,184,184, 68, 63,
+120,240, 32,130, 16, 98, 33,151,203, 45,127,253,245, 87,146,154,171,197,236,173,247, 43,103, 22,154,136,121,152,241,154, 45,254,
+243,159, 97,252,123,247,238,125, 5,224, 72,109,206,216,216,216,169,174,174,174, 81,119,239,222, 93, 37,180,246,180,150,180, 27,
+ 47,239, 57,163,172,251,209,209, 74, 12,166,252, 13, 49, 47, 47, 15, 89, 89, 89, 24, 59,118,172,197,226,197,139,167, 3,136,172,
+205, 25, 23, 23,119,222,213,213, 53,245,238,221,187,157, 41,165, 34,115,115,243,144, 85,171, 86,145,164, 39, 90,124,177, 57, 1,
+234,226,178,118,202, 37, 2, 44, 24,233,132, 49, 99,198,240, 31, 62,124,184, 12,101,103,228,127, 65,169, 84,186,123,123,123,239,
+218,190,125,187,247,234,213,171,159,220,187,119,175, 80,161, 80,204,175,182, 91,201,146, 37, 75,178,183,110,221,234,249,246,219,
+111,239,114,112,112, 24,222,216, 37, 53,154,138,153,153,217,210, 9, 19, 38,224,231,159,127, 70, 78, 78,206,106, 0,200,207,207,
+ 95,181,125,251,246,157,227,198,141,195,214,173, 91,151, 18, 66, 14, 27, 81,197,234, 55, 98,196, 8, 28, 58,116, 8, 39, 78,156,
+248,146, 82,122,179,166,157, 40,165,119, 9, 33,211,247,238,221,187,102,228,200,145,248,241,199, 31,251, 2,168,107,225,217,222,
+125,250,244,193,193,131, 7,145,157,157,253, 77, 77, 59,228,230,230,126,251,251,239,191,119,238,211,167, 15,150, 44, 89,210, 27,
+192, 31,245, 61,111, 66,136,151,185,185,249,166, 53,107,214, 4,180,111,223, 30,163, 70,141, 42, 46, 45, 45,237,251,217,103,159,
+237,219,177, 99,135,124,203,150, 45,254,227,199,143,191, 64, 8,121,159, 82,106,212, 34,182, 60, 30, 47,124,237,218,181,239,133,
+133,133, 97,234,212,169,250, 35, 71,142, 12,166,148, 30, 37,132, 36,124,254,249,231, 7, 86,174, 92,201, 91,177, 98,197,123, 60,
+ 30, 47,211, 96, 48,204, 52,198,217,220, 16, 66, 86,172, 92,185,210,187,109,219,182, 40, 46, 46,198,253,251,247,145,158,158,190,
+253,240,225,195, 71,175, 95,191,190, 60, 45, 45,109,143,189,189,253,184,169, 83,167, 58, 5, 4, 4, 4, 56, 57, 57, 89, 62,126,
+252,216,152,247,146,138,202, 84, 6,128, 91, 0, 58,151, 87,174, 0, 32, 8,101, 93,131, 64,217,140, 66,163,222,155, 64,200,181,
+187, 15, 85,173, 44, 77,205,144,195,138,240, 80,149, 5,169,137, 9, 24,202, 64,175,201,129,187,139, 29, 88, 10,228,103,169,192,
+ 48,228,154, 49, 74,157,129,141, 73, 76, 78, 87, 90,152, 72,224,238,215,223,250,234, 31, 63,254,100,222,186,235,120, 62,143,240,
+132, 98,179,245,163, 70,190, 99,163, 51, 80, 20,228,164,130,240, 24,163,199,160,113,112, 0, 70, 4, 44,150,101, 33,149, 74,159,
+170, 48, 85,175, 2, 73,165, 82,148,148, 52,108,185, 20,169, 84,138,210, 42,195,120,155,195,105,204, 49,155,219,249, 60,209,233,
+116,242, 15, 62,248,160,107,231,206,157,147,251,245,235,151,224,229,101,155, 56, 32, 88, 98,179,118,227, 94,223,126,221,125,226,
+242,159,164,103, 38,137,197,197, 57, 57, 57,214, 91,183,110,237,164,211,233,100,198,120, 83, 83, 83, 31, 1,120,164, 84, 42, 7,
+244,232,209,227,173,129, 3, 7,226,212,169, 83,242,194,194, 66, 47, 19,147,178,217,164,123,246,236,193,239,191,255,254, 67, 74,
+ 74,202, 94, 99,219,155,148,148,116, 24,128, 91,139, 22, 45, 44, 90,180,104,145,110, 97, 97, 33, 84,169, 11, 43,103, 22, 10,249,
+ 12, 66, 62,187,132,220,124, 53, 44, 44, 44, 32,147,201, 92,235,115,150,175,115,181, 47,240,205,133,237,121, 15,182, 71,173, 93,
+179,218, 28, 40, 59, 51,181,183, 16, 34, 55, 55, 23, 89, 89, 89,200,204,204, 4,165, 20, 6,131,193,219, 8,231, 35, 0,143,108,
+108,108, 28,221,221,221,137,169,169, 41,232,147, 66,228, 20,148, 62,213, 5,169, 46, 40,132, 82,169,132, 92, 46,175,177, 59,194,
+202,202, 74, 46, 22,139, 55,111,216,176,193, 75, 46,151,243,198,141, 27,103, 49,110,220,184,174,168, 37,140,201,100, 50,222,143,
+ 63,254,232,225,235,235,187,169,101,203,150,189, 19, 19, 19,243,234,107,107,115, 81, 62, 51,114,226,167,159,126,234, 47,145, 72,
+176,110,221,186, 7, 0,182,149,223,189,235,219,111,191,157, 51,114,228,200, 54, 83,166, 76,241,153, 61,123,246,212,242,174,194,
+ 90,187,157,133, 66,161,159,183,183, 55,126,253,245, 87, 0,248,181,158,195,239,142,142,142, 94, 51,112,224, 64, 72, 36,146,128,
+122,246,117,117,118,118,198,222,189,123, 1, 32,174,150,125,226,226,227,227,241,250,235,175,131, 16, 82,239,223, 16, 33,100,200,
+171,175,190,186,123,201,146, 37,124,185, 92,142,247,222,123, 79,123,225,194,133,254,148,210, 83,132,144, 30,163, 71,143,142,218,
+182,109,155, 73, 84, 84,148,215,226,197,139,163,121, 60, 94,184,193, 96,152, 93,143,115,236,162, 69,139,102, 12, 29, 58, 20,243,
+231,207,167,191,252,242,203, 40, 74,233, 81, 0,160,148, 30, 33,132,188,109,105,105,185,109,214,172, 89, 36, 47, 47,111, 6, 33,
+228, 49,165,244,187,218,124, 69, 69, 69,121, 6,131,193,161,168,168,200,168, 51, 68, 99,247,111,213,170, 85,191,182,109,219, 98,
+239,222,189, 24, 52,104, 16,142, 29, 59, 6,134, 97, 14,168, 84,170,147, 0,142, 2,128,163,163,163,121, 66, 66,194,212,208,208,
+ 80,230,248,241,227,175, 3,248,193,136, 38, 60, 4,208, 30,192, 49, 74,105,114,249,196,201, 96,148, 45,217,112,139, 82, 90,177,
+212, 73, 59, 0, 9,198, 60, 39, 86, 91,176,229,196,193,221, 61,122,191,241,129, 57,143,199,128, 15, 33,138,212,249,128,193, 0,
+ 55, 23,123, 4,122,219,227,106,162, 6,209,199,119,229, 22, 21, 20, 25,181,188,132,161,180,112,211,137,195,123,187, 7,188,250,
+142,185,216,173, 45,156,237, 63,246,189,113,241,232, 49,177, 72, 72,222,120, 99,152, 69,143, 64,119,156,184,150,143,243, 39,126,
+203, 41, 82,231,111, 50,198,201,193, 81, 65,101,192,170,101, 80, 89,198,212,169, 83,237,166, 77,155, 6, 51, 51, 51,100,103,103,
+ 67,167,211, 85, 86,155,196, 98, 49, 44, 44, 44,144,157,157,141,157, 59,119, 2,101,103, 43,181,194,227,137, 82, 23,125,179,214,
+153,240, 76,180, 98,169,140, 90,201,154,238, 4, 0,173,142,159,241,221,206, 61, 86,253,186,117,225,183,112,116,252,203,253,141,
+113,190, 8,232,116,186, 99,105,105,105,254,109,218,180, 73,115,113,113,209, 20, 23, 23,131,106, 52,234,131, 59, 87,183,118, 54,
+159,116,159, 97, 24, 42,149, 74, 89, 11, 11,139,194,251,247,239, 19,189, 94,127,178, 33,126, 74,233,196,137, 19, 39, 50,167, 79,
+159, 30,245,214, 91,111,161,101,203,150,136,139,139,195,214,173, 91,177,123,247,238,205, 66,161,112, 74, 99,218,157,156,156, 92,
+224,237,237,253, 84, 5,164,250,204, 66, 93, 73, 38, 88,150, 53,122,112,126, 78,236,214, 59, 60, 27, 27,157, 79,139, 63,151, 19,
+201,201,201, 65,102,121,184,170, 18,178,140, 46, 97, 18, 66,212, 90,173,182, 90, 59,255,236,126, 44, 44, 44, 68,105, 73, 6, 12,
+ 6, 67,141,206, 39, 79,158,168, 21, 10,197,218,136,136,136,149, 11, 23, 46,180, 91,181,106,213,147,219,183,111,231, 51, 12,243,
+ 84,185,150,101, 89,137,155,155,155,124,197,138, 21,246, 17, 17, 17, 79, 88,150, 93,251, 55,135,171,161,237,219,183,223,220,175,
+ 95, 63,249, 7, 31,124,128,136,136, 8,164,166,166,126, 65, 41,213, 3, 0,165,148, 37,132,124,254,205, 55,223,236,159, 62,125,
+ 58, 74, 75, 75, 87, 28, 60,120,112, 62, 33,100, 34,165,116, 91, 77, 78, 91, 91, 91, 39, 62,159,143,216,216,216,124, 74,233,253,
+186,142, 79, 41, 77,243,244,244, 76, 39,132,216, 59, 58, 58,182,174,107, 95, 43, 43, 43, 55,185, 92, 14,149, 74, 5,148,125,136,
+215, 68, 98, 74, 74, 10, 21,137, 68, 68,161, 80,184,215,247,252, 45, 45, 45, 63,223,176, 97, 3,255,228,201,147,152, 59,119,238,
+227,164,164,164,209,229,203, 8,128, 82, 26, 75, 8, 9,237,209,163,199,142,233,211,167,123, 46, 91,182,140,196,199,199, 79, 2,
+ 80,103,192,114,113,113,153, 56,118,236, 88,172, 93,187, 22,235,215,175,159, 68, 41,221, 85,237, 57,239, 32,132, 88, 90, 91, 91,
+175,157, 48, 97, 2, 54,109,218, 52, 26, 64,173, 1, 75,165, 82, 77,127,243,205, 55,231, 60,121,242, 36,188,190,231, 99,236,254,
+ 10,133, 98,240, 91,111,189,101, 79, 41, 69, 68, 68, 68,218,218,181,107,139,242,243,243,183,165,164,164, 60,245, 62,193, 48,204,
+158,195,135, 15, 79,253,224,131, 15,112,242,228,201,117, 10,133,130,166,164,164,108,168,235,248,148,210, 84, 66, 72,107, 66,136,
+ 55,165,244, 86,249, 44,193,167, 6,178, 19, 66, 60,203,247,125,108,204,115,202,186,115,114,159,189, 79,255,179, 87, 46, 70,190,
+234,234, 19, 42,176,179,148, 67,233,110, 3, 43, 83, 33, 40,128,235, 73, 26,156, 63,117, 84,151,145,250, 40,218,152, 25,132, 21,
+ 78,135,118, 3,162,101, 54, 46,175,182,106,219,149,239,234,238,129,222, 33, 29, 44,173,205, 4,208,234, 40,142, 93,201,195,185,
+168, 67,186,140,244,228,147,220, 12,194,191,135,151,101,128, 59, 80,127, 5,107,222,250,245,235, 67, 54,110,220, 56,112,234,212,
+169,242,119,222,121, 7, 82,169, 20,133,133,133,112,118,118,134, 94,175,199,193,131, 7, 17, 27, 27,171,102, 89,118, 63,254,156,
+ 37, 2,224,175, 87,219,158, 17, 81,212,130, 16,194, 0,133, 33,243,215,119,104, 22, 39, 0, 68, 63,208, 43, 21,169, 89,243,178,
+115, 14,126,226,162,116, 20,246,233,218,153,111, 99, 89, 54,155,185,177,206,166,242,119, 56,245,122,253, 88, 66,136,207,231,159,
+127,190, 92,169, 84, 42,230,207,159,255,168,109,219,182,154,252,252,124,170,213,106,217,204,204, 76,217,238,221,187, 93,179,179,
+179,213, 58,157,238,109, 74,233,213,134,180, 51, 37, 37, 69, 3, 96,180,131,131,195,222,140,140,140,221, 35, 70,140,192,166, 77,
+155,112,238,220,185, 1, 41, 41, 41, 7,107,122, 76,125, 78, 0,160,148,234,187,116,233,146,123,227,198, 13,123,158,185, 43,236,
+ 45, 4,232,251,101, 89, 49, 66, 46, 6, 52,133,106, 60,184,123, 11,249,249,249,151,141,117, 38, 36, 36,104,125,125,125,115, 51,
+ 51, 51,109,108,109,109,203,194, 85,149, 96,245,228,201, 19,228,229,229, 81,134, 97,206, 26,235,204,204,204, 44, 12, 14, 14, 46,
+ 74, 72, 72, 16,241, 68,142,112,180, 20,163,172, 11,146,194, 86,206,135,166,168, 16,215,226, 46, 35, 63, 63, 63,178, 54,103, 74,
+ 74,202, 78,133, 66, 1, 0, 43,231,204,153, 99,211,183,111,223,123, 23, 47, 94,236, 94,245, 56,126,126,126,191,205,159, 63,127,
+192,226,197,139,179, 54,111,222, 60, 61, 53, 53,245,169,217,142,207,250,111,201,218,218,122,218,129, 3, 7,228,165,165,165,136,
+136,136,192,215, 95,127,189,145, 82,250,212,236, 72, 74,233, 1, 30,143,247, 13,195, 48,255,253,240,195, 15, 49, 97,194, 4,153,
+191,191,255, 84,252, 89,229,122,202,169, 82,169,102,251,249,249,205,201,200,200, 48, 42, 16,220,189,123,119,188,159,159,223,236,
+140,140,140,229,181,181, 19, 0, 76, 76, 76, 76, 12, 6, 3, 30, 62,124,152, 67, 41,173, 49,132, 82, 74,139, 61, 60, 60, 84, 6,
+131,193, 73, 38,147,253,101, 0,117,117,103, 78, 78, 78,184,191,191,255,188,244,244,244,163, 0, 22, 81, 74,139,171,249,174, 16,
+ 66,124, 62,250,232,163,201, 75,151, 46,125, 61, 45, 45,237, 47,235, 44, 85,119, 38, 37, 37,133,247,232,209,227,203, 59,119,238,
+108,166,148,174,175,165,157,235, 8, 33,165, 63,253,244,211,164,135, 15, 31, 46,169,203,153,146,146,178, 31,192,254,154, 60, 53,
+ 81,219,254, 85,157, 86, 86, 86,211, 39, 79,158,140, 67,135, 14, 65,173, 86,175, 73, 73, 73, 89, 86,147, 75,165, 82,157,119,117,
+117,253,189, 75,151, 46,131, 87,172, 88, 33, 28, 48, 96,192, 36, 0, 27,106,114, 86,227, 28,128,144,242,113,112,183, 1,100,151,
+111,183, 66,217,204, 65,130,106,239,197,245, 57, 13,186,252,145,113,167,127,221,145,156,112,173,139, 95,247,161,150,121, 69, 78,
+ 16,242, 25, 20,228,164,226,220,241,255,203, 73,121,124,255,156,182, 56,119,100, 67,156,250,210,188, 17,215,206,252,182, 51, 45,
+241, 86,231,162,144,254,150,185,106, 23, 8, 5, 4,185,153,143,113, 33,114,239,147,212, 71, 15, 79,235,216,146, 49, 13,113, 54,
+133,127,179,243,101,131, 24, 51, 33,136, 16, 34, 2,208, 75, 46,151,247,254,228,147, 79, 68,125,251,246,197,226,197,139,113,236,
+216, 49,173, 86,171, 61, 6,224,120, 77,149,129,186, 94,128,103,225,236, 23, 68,228, 14,246,204,234,150,142,204,232,182,238,110,
+228,198,221,120,254,229,148,129,223, 55,197,217, 88,254,110, 39, 33,164,171, 64, 32, 88,230,229,229, 85,146,152,152,216,214,202,
+202,234,142, 74,165, 18,233,116,186,207, 41,165,167,154,210, 78, 7, 7, 7,155,254,253,251,103,204,154, 53,139,204,159, 63, 31,
+167, 78,157,178,168,171,194, 98,140,179, 69,139, 22, 61,253,253,253,143,172, 90,183,129,159,148, 94,128,124,181, 26,106,181, 26,
+133, 5, 5, 40,206, 79,195,161,223,118,104,175, 95,191,238,153,150,150,150,100,172,211,197,197,165,111,135, 14, 29,118,108,216,
+176,193, 60, 59, 59,187, 50, 96, 61,121,242, 4, 44,203, 98,253,250,245, 79,178,179,179,219, 63,126,252, 56,197, 88,103,203,150,
+ 45,135,132,132,132,236, 94,190,250,127,252,228,244, 2,168, 11, 11, 81, 84, 84,132, 98,141, 6,165, 5,233,216,252,125, 68,201,
+173, 91,183, 90,102,102,102,166,215,229, 84, 40, 20,111,118,237,218,117,193,181,107,215, 78,198,199,199, 79,172,122,159,135,135,
+199, 55, 29, 59,118,236,127,246,236,217, 57, 42,149,106,107, 99,126,159, 13,165,170,147, 16,210, 87,169, 84,126,157,153,153,249,
+160,180,180,116, 23,165,244, 47,109,168,242,184, 17,124, 62,127,132,141,141,141,125, 90, 90,218, 82, 74,233,175, 53, 57,159, 69,
+ 59,203,127, 30,104,103,103, 55, 51, 35, 35, 99, 41,165,244,247, 58, 30, 87,177,223,114, 74,233,111,117, 57,159, 69, 59, 95, 4,
+167, 66,161, 24,104,103,103,183, 32, 61, 61,253,100, 90, 90,218,231,117,117,249, 58, 57, 57, 73, 88,150, 93, 96,111,111, 31,156,
+150,150,182, 50, 53, 53,245,255,140,109, 39, 41,187, 84, 78, 75,148,141,183, 2,202,198, 92, 37,209, 58,214,190,170,207,105,227,
+217,123,144, 88, 38,125,151,178,134,142, 0, 1,195,227, 93, 41, 46, 44,218, 84, 87,229,202, 24,167,196, 68, 54,150,101, 13, 29,
+ 25, 16,150, 97,152,171, 26, 77,209, 15,153,183,143,213,122,169,156, 23,241,117,255, 39, 59,107, 57,206,120, 74,105,131, 38,131,
+252, 83, 48, 42, 96, 85,238, 92, 54,139,102, 0,195, 48,193, 44,203, 70, 3, 56, 64,235, 88,183,198,152, 23,224, 89, 56,251,133,
+ 17,101, 75, 27,222,122,185,140,241, 95,186, 89,247, 81,115, 56, 27,202,243,114, 18, 66,134,240,249,252,207,244,122,253, 87,148,
+210,122,199, 71, 25,219, 78, 15, 15,143, 13, 97, 97, 97,239, 30, 57,114,228,219,164,164,164,201,205,225,108,219,182,237,202, 86,
+173, 90, 77, 30, 48, 96,128,192,206,206, 14, 89, 89, 89,184,123,247, 46, 98, 98, 98,180,105,105,105, 19,227,227,227, 55, 55,212,
+217,161, 67,135,133,214,214,214, 19,223,127,255,125,107, 66, 8,178,179,179,161, 86,171,233,158, 61,123,178, 52, 26,205,251,241,
+241,241,149,103,245,198, 58,219,183,111,255,189,171,171,235,152,161, 67,135, 10,148, 74, 37,178,178,178,112,243,230, 77,156, 61,
+123,182, 36, 45, 45,237,173, 59,119,238, 84, 86,123,234,114,186,185,185,137, 18, 18, 18,106,236, 78,244,243,243, 19,196,196,196,
+212,216, 37,250, 50,253,125,114, 78,206,201, 57, 57,103, 3,143,243,194, 6,172,122, 7,185, 87,165, 60,164,236, 36,132,236,174,
+ 24,159,209, 84,158,133,243, 80, 36, 85, 1,232, 79, 8,225, 55,151,243, 69,161, 60, 84, 25, 61,240,220, 88,238,222,189,251,190,
+ 66,161,152, 82,222,109,216, 44,220,188,121,115,154, 82,169,252, 41, 49, 49,113,133, 76, 38,243,101, 89, 86, 87, 82, 82,114, 38,
+ 59, 59,123,106, 74, 74, 74,163, 46, 4,123,245,234,213, 47, 21, 10,197,111, 43, 86,172,248,130, 82,218,129, 16,162,213,235,245,
+209, 57, 57, 57, 11,146,147,147, 83, 27,227,188,118,237,218,120,165, 82,249, 99, 98, 98,226, 18,177, 88,220,129, 82,170,213,104,
+ 52,145, 25, 25, 25,159, 84, 84,174,140,161,182,112, 5,148, 45,145,209,152,182,113,112,112,112,112,252, 51,105, 80,192,170,224,
+ 89,132,150, 23,197,249,111,166, 57,195, 85, 5, 42,149,234, 42,128, 87,154,211,153,146,146, 18, 7, 96, 88,115, 58, 85, 42,213,
+ 5, 0,181,174,161,197,193,193,193,193,193, 46,169, 84, 2, 0, 0, 32, 0, 73, 68, 65, 84, 81, 21,163, 46,246,204,193,193,193,
+193,193,193,193,193, 97, 60, 4,101,235,144,252,133,134,244,173, 18, 66,140,186, 44, 65, 67,252,156,147,115,114, 78,206,201, 57,
+ 57, 39,231,124,249,156, 53,184,223,168,118,151,170,154,239,133, 28,131,213,160, 65,238, 13,150,191, 32, 3,235, 56, 39,231,228,
+156,156,147,115,114, 78,206,249,124,157, 47, 27, 92, 23, 33, 7, 7, 7, 7, 7, 7, 7, 71, 51,195, 5, 44, 14, 14, 14, 14, 14,
+ 14, 14,142,102,134, 11, 88, 28, 28, 28, 28, 28, 28, 28, 28,205, 12, 23,176, 56, 56, 56, 56, 56, 56, 56, 56,154, 25, 46, 96,113,
+112,112,112,112,112,112,112, 52, 51,207,116, 22, 33, 7, 7, 7, 7, 7, 7, 7,199,191,145,167, 42, 88,132, 16, 46,109,113,112,
+112,112,112,112,112, 60, 55, 94,150, 44,194,117, 17,114,112,112,112,112,112,112,112, 52, 51, 92,192,226,224,224,224,224,224,224,
+224,104,102, 24,224,229, 41,199,113,112,112,112,112,112,112,188,152,188,108, 89,164,162,130, 21, 86,254,196,194,158,103, 99, 56,
+ 56, 56, 56, 56, 56, 56,254,181,188, 84, 89,132,155, 69,200,193,193,193,193,193,193,193,209,204,112, 99,176, 56, 56, 56, 56, 56,
+ 56, 56, 56,154,153,103, 26,176, 8, 33,237, 56, 39,231,228,156,156,147,115,114, 78,206,201, 57,255,109,112, 21, 44, 14, 14, 14,
+ 14, 14, 14, 14,142,102,134, 11, 88, 28, 28, 28, 28, 28, 28, 28, 28,205, 12, 23,176, 56, 56, 56, 56, 56, 56, 56, 56,154, 25, 46,
+ 96,113,112,112,112,112,112,112,112, 52, 51, 92,192,226,224,224,224,224,224,224,224,104,102, 8,128, 26,103, 2, 80, 74,175, 27,
+ 45,105,196,108,130,250,252,156,147,115,114, 78,206,201, 57, 57, 39,231,124,249,156,245,185, 27,146, 63,254,201, 60,211,133, 70,
+ 9, 33,237,154,251, 23,197, 57, 57, 39,231,228,156,156,147,115,114,206,151,207,249,178,193,127,222, 13,224,224,224,104, 34,187,
+ 9, 15,118,109, 92,193, 82, 5,248,162, 84,252,113,237, 62,230, 82,182,201, 78, 69, 91, 23,104,117,246,144, 74, 50,113,228,234,
+131, 38, 59, 57, 56, 56, 56,254, 69,112, 1,139,131,227, 69,199,209,203, 19, 6, 44, 1, 15,142,160,165, 9, 8,105,187, 4, 64,
+211,206, 44,173,189, 60,161, 99, 23,129,207, 56, 65, 91,122, 7,221,218, 44, 5,112,179, 89,218,203,193,193,193,241, 47,224,185,
+ 12,114, 15, 8, 8,136, 9, 8, 8, 88, 24, 22, 22, 38,126, 30,199,231,224,120,105,184,222, 94, 6,189,161,159, 86,199, 42, 15,
+ 71,231,218, 21, 21, 27, 60, 33,212,247, 71,180,167,105,147,156, 2,242,106,177,142,109,241,211,177, 34,251,194, 98,189, 55, 24,
+ 52,205, 89, 78,187,118,237, 44, 2, 3, 3, 15,251,250,250,218, 52,213,197,193,193,193,241, 79,230,185, 4, 44,150,101, 59,217,
+217,217, 77,213,104, 52, 73,254,254,254,131,159, 71, 27,158, 23,157, 59,119,142,238,210,165, 75,122,112,112,112,122,112,112,112,
+108,125,219, 95, 70, 20, 10,133,103,251,246,237,147,124,124,124,238, 84,221,110,215,241,245, 96,239,110,239,204,181,241, 25,218,
+253, 57, 53,237,197,163,144,181, 7,195,235,113, 51,177, 72,150,150,171,179,143,137, 47,146,131,242,194, 80, 10,199, 38, 57, 89,
+218,243, 74,130,198,228,220,125, 91,251,211,215, 75,204, 64,153, 30,160,196,161,169,205, 21,137, 68,147, 40,165,189, 5, 2,193,
+199, 77,117,113,188,216, 16, 66,218, 17, 66, 6, 19, 66, 2,154,209,185,204,203,203, 75, 69, 8,249,168,185,156, 28, 28,141,197,
+232,128, 53,172, 21, 9, 25,213,154, 68,189,217,138,168, 71,180, 38, 5,111,181, 38,103,254,227, 70,186, 55,246,192,123,246,236,
+145,110,221,186,213,174,109,219,182, 59,131,130,130,206,248,251,251,123, 52,198, 19, 16, 16,112, 56, 32, 32, 96, 88,245,109,254,
+254,254,111, 86,221, 22, 24, 24,120, 35, 48, 48, 48, 47, 32, 32,224,190, 49, 94, 63, 63,191,123,126,126,126,133, 1, 1, 1,247,
+170,110,247,247,247,127, 51, 48, 48,240,112,181,227, 13,171,190,173, 54, 24,134,113,218,183,111,159,221,129, 3, 7,236,248,124,
+190,125,245,237,251,247,239,127,106,123, 67, 9, 8, 8, 24, 23, 16, 16, 16, 93,237,185,188, 95,125, 91, 93,248,251,251, 71,251,
+249,249,189, 95,205, 27, 29, 16, 16, 48,174,177,237,170, 64,161, 80,120,118,235,214,237, 76, 92, 92, 92, 11,185, 92,110, 81,245,
+ 62, 7,107,139, 62,209,251,191,153, 58,102,216,171,147,236,218,190,214,190,169,199,122,233,185,221, 86, 8, 61,219,141,101,169,
+237,205,251,197,182,253, 7,252,135,127,229,158,198, 86,167, 55, 88,129,240,194, 16,213,178,225, 21,226,219,109,133,208,233, 66,
+ 89, 74,237, 79, 92, 17,218,134, 13,250,144,119,242, 26,223, 86,103, 48, 88, 67,135,238,141,114,150,227,231,231, 39,224,241,120,
+ 83, 39, 76,152,192, 16, 66, 62,116,115,115, 19, 53,214,245, 34, 18,212,158, 40, 95,241,231, 95,244,107, 75, 66,154,203, 73, 8,
+241, 49, 49, 49,185, 76, 8,241,108, 46,231,223, 1, 33,164, 19, 0, 25,165,244,119, 0,246,132,144, 38, 15, 87, 33,132,172, 90,
+176, 96,193,231,215,175, 95, 87,180,106,213,106, 62, 33,132,215,244,150,114,112, 52, 30,163, 2,214,136, 86,100,158,189,131,242,
+232,172, 85,219,187,109,136,122, 96,250,237,190, 88,147,169,211,195, 67, 28, 44,109, 15,190,229, 70,150,214,246,184,186,102, 24,
+136, 68, 34,220,191,127, 31, 17, 17, 17,146,121,243,230, 5,155,155,155, 95, 13, 10, 10, 90,221,182,109, 91,147,186,218, 82,221,
+ 73, 41, 13, 17, 8, 4, 27,130,130,130, 54, 85,188, 97, 19, 66, 66,196, 98,241,247, 65, 65, 65, 63, 85,116, 67,250,249,249,181,
+186,120,241,162, 25, 33,228, 47,225,165,166,118, 6, 6, 6, 58,198,196,196,200,128,178, 74, 64, 88, 88,152, 56, 48, 48,112,171,
+ 82,169, 92, 15, 32, 4, 0,220,220,220, 68, 65, 65, 65,155,156,157,157,127, 32,228,233, 55,205,218,158, 59,195, 48,176,176,176,
+192,246,237,219,193,227,253,249,255, 79, 8,129,133,133, 5,182,109,219, 6, 66,136, 81,207,189, 42,109,219,182, 53, 9, 8, 8,
+216,227,232,232,184,154,101,217, 46, 0,208,190,125,123, 89, 96, 96,224,110,165, 82,185,166, 98,155, 49, 78, 74,105, 23,161, 80,
+184, 58, 48, 48,112,119,251,246,237,101, 0,192,178,108, 23, 62,159,191, 42, 32, 32, 96, 79, 67, 94,163, 78,157, 58, 77,232,208,
+161, 67, 74,135, 14, 29, 82,218,180,105,179,216,222,222, 62,114,237,218,181,214, 85,159,123, 69,229, 42, 61, 35, 59, 39,250,210,
+141,248,169, 19,254, 19,214,194,217,126,180, 69,199,161,230,198, 60,247,198,242,194, 59,179,137, 29, 8,237, 21,159,164,145,180,
+116,247, 55,177,243,250, 15,108, 45,248,226,115,183, 10,229,224,225, 21, 8,100,182,141,115,242, 95,185,241, 64, 35,181,108,213,
+ 79, 22,208,185, 27,136,137,135, 56, 50,174,208, 12,124,166,113,206, 63,249, 79,151, 46, 93, 68,189,122,245,130, 66,161,224,153,
+155,155,143,174,103,255, 23,255, 53, 42, 39,168, 61, 81,202, 37,162, 11, 43, 23,124,226,175,176,150,237, 53, 38,100, 25, 49,125,
+222,199,206,206,238,228, 55,223,124,227, 39,151,203, 79, 25, 19,178,254, 9,191,207,242,112, 37,164,148,158, 47,223,116, 19, 64,
+104, 19,157,171,230,205,155,247,241,140, 25, 51,160, 86,171, 49,102,204, 24, 51, 0, 43,141,117,202,229,114,247, 14, 29, 58,252,
+228,227,227,243,200,215,215, 87,235,237,237, 93,220,166, 77,155,196,118,237,218,109,150, 72, 36,174,181, 61,238,159,240,251,124,
+153,156,245, 32, 2,208, 3,192, 0, 0,175, 0, 8, 44,255, 62,160,252, 54, 0, 64,175,106, 95, 43,170,163, 21,247, 7,213,226,
+ 24, 80,195,227, 2,170,108,175,250,115,245,239,107,133, 1, 0, 66, 8,173,250,181, 42,195, 91,147, 96,107, 7,229,231,203,126,
+187, 36,101,239, 94, 65,204,123, 61, 17,255,209, 80, 72,239, 93,193, 23,147,191,144,202,229,150,147,135,181, 38, 61, 26,246,123,
+ 42,227,206,157, 59,216,185,115, 39,108,108,108,200,198,141, 27,197,195,134, 13,155,100,102,102,150, 28, 16, 16, 80,239, 27,111,
+ 5, 60, 30,207,176,105,211, 38,211, 33, 67,134,140,176,178,178,186,225,231,231,215,138, 97, 24,195,150, 45, 91, 76,223,124,243,
+205, 97, 90,173,246,150,191,191,191, 71,108,108,172,225,210,165, 75, 96, 24,227,138,118, 49, 49, 49,250, 67,135, 14, 1, 0,252,
+253,253, 61, 40,165,183,150, 46, 93, 58,226,215, 95,127,149,155,155,155,179,126,126,126,173,156,157,157,111, 44, 91,182,108,244,
+238,221,187,229,102,102,102, 70,205,176, 34,132,160,184,184, 24, 18,137,228,169, 32, 69, 8,129, 70,163,129, 88, 44, 54,186,141,
+ 21,248,249,249,249, 88, 91, 91,223, 94,178,100,201,144,223,126,251, 77, 42,151,203, 17, 16, 16,224,109, 97, 97, 17,191,124,249,
+242,161,123,247,238,149,202,229,114,163,125, 66,161, 16,219,182,109,147,141, 26, 53,106,176, 88, 44,190, 29, 16, 16,224, 45, 20,
+ 10,177, 99,199, 14,217,232,209,163, 7,202,100,178, 91,126,126,126, 62,198,184,116, 58,221,156, 75,151, 46, 57, 70, 70, 70, 58,
+186,184,184, 76,249,246,219,111,237, 5, 2, 1, 0,192, 96, 48, 0,248,179,114, 53,250,245,222, 65, 31,207,249,230,164,166,184,
+ 68,187,232,139,177, 97, 2, 3, 58, 55,232, 23,241,111, 98, 55,225,129, 53,116, 2,224, 22,123, 71, 99,211,177,219,104, 62, 50,
+126, 71,160,183, 41, 63, 42,182,192,142, 82,234, 2, 61, 13, 68, 84,152,241,149,129,221,132, 7, 30,237, 8,194,122, 28,141, 35,
+ 54,193,189, 70,243,147,146,146,224,234, 29,198,219,127, 9,246,148, 82, 87,176,240,111,144,179, 10, 2,129, 96,238,240,225,195,
+ 77, 18, 19, 19, 17, 28, 28, 44, 19,137, 68,115, 26,227,121,138,219,109,133,184,208,198, 5,167, 60,195, 16,237,233,216,216,182,
+ 61, 75,130,218, 19,165,153, 68,116,126,199, 79, 63, 43,218,135,142, 35,235, 63,113,177,178,149, 11,140, 10, 89,181, 81, 30,174,
+254,184,112,225,130,245,171,175,190,138,121,243,230,217,154,153,153, 25, 21,178,158, 39, 85,195, 21, 33, 68, 90,222, 61,168, 2,
+224,212, 4,231,154,121,243,230,125, 60,115,230, 76,156, 63,127, 30,203,151, 47, 71,191,126,253, 96,105,105, 89,239,251,199,219,
+111,191, 45, 11, 9, 9,137, 25, 60,120,240,149,143, 63,254,120,244,254,253,251,157, 55,109,218, 36,124,247,221,119,197,195,135,
+ 15,119,249,228,147, 79,222,233,223,191,255,245,160,160,160, 11,195,134, 13,147, 52,182,137,229, 55,142,122,168, 43,139, 0,232,
+ 48, 99,198,140, 64, 66,200,254, 25, 51,102,248, 3,176, 33,132,236, 7, 96, 11,192,182,252,123, 81,181,175,182, 40, 11, 77, 21,
+247, 91,215,228,168,184, 85,123,156,109,149,237, 85,143, 81,253,251, 90,169,252, 36, 39,132,116, 7,112,170,250, 14,124,138, 5,
+ 19,166, 46,148, 60,220,252, 53, 82,127, 90, 5, 38, 75, 5, 94,110, 26, 74, 78,253, 14,221,233,125,120,187, 75, 23,169,148,144,
+ 69, 13,250, 45,150, 35,151,203, 33, 20, 10,113,247,238, 93,220,186,117, 11,253,251,247, 23, 70, 68, 68, 88,248,248,248,124, 31,
+ 18, 18,114, 37, 32, 32,160, 67,125, 14, 66, 8,220,221,221, 49, 98,196, 8,209, 71, 31,125,212, 90, 34,145,196, 82, 74, 5,174,
+174,174,120,243,205, 55,133,211,167, 79,111, 41,145, 72, 46,177, 44, 43,148,201,100,181, 86,135,106,242, 74,165, 82, 0, 16,120,
+120,120, 92,222,185,115,167,107, 72, 72, 8,255,232,209,163,200,207,207,231,123,122,122, 94,217,177, 99,135, 91,112,112, 48,255,
+204,153, 51, 40, 44, 44, 52,106, 65, 49, 66, 8, 10, 11, 11, 33,149, 74,255, 18,176, 10, 11, 11,255, 18,188,234, 35, 32, 32, 96,
+156,155,155,219,165,157, 59,119, 58,133,134,134,242, 78,158, 60, 9,181, 90, 13, 23, 23,151,203, 59,119,238,116, 10, 9, 9,225,
+ 69, 71, 71, 67,173, 86, 27,237, 20,137, 68,112,117,117,197,240,225,195, 5,159,126,250,169,147, 64, 32,184, 36, 18,137,224,226,
+226,130,225,195,135, 11,167, 77,155,230, 36, 18,137, 46, 24,217,101,200, 3, 0,189, 94,143, 97,195,134,153, 72,165, 82, 36, 39,
+ 39,131,101, 89,176,108, 89, 38, 77,205,204,190,118,246,210,245,219, 83, 39, 14,235, 94, 88, 82, 82,114, 36,242,242,173,182, 30,
+ 46, 78,132,208,150, 70, 55,250,223,134,101, 91,107,240,208, 59, 41, 69, 43, 22,153, 56,201, 77,109,218, 0, 79, 78,161,149, 66,
+ 12, 80, 34,185,116,187,200, 4, 12,237, 13,100, 89, 55,200,105, 96,123, 63, 80,105,197,165,210,118,166, 10,101, 11,100,103,103,
+195,217,213, 11, 37,176, 21, 69, 95, 47, 52, 5,109,160,179, 28, 95, 95,223, 80,103,103,103,135,150, 45, 91, 34, 43, 43, 11,238,
+238,238, 48, 53, 53,181,244,243,243,235,221, 80, 87, 37, 81, 45,197,200, 67, 8, 74,201, 74, 16,102, 62, 40,127, 9,248,153,157,
+ 16,235, 39,104,180,179,153,169, 12, 87,219,126, 86, 90, 59,122, 1,215,223,131,189,149, 8, 27,103,116,180,178,149,139, 27, 21,
+178, 8, 33, 62,246,246,246,127, 92,184,112,193, 70, 34,145, 32, 38, 38, 6,109,219,182,197,215, 95,127,109,107,105,105,249,143,
+ 13, 89,213,194,149, 21,165, 84, 3,128, 5, 48, 18,141,152,245, 74,202, 88,183,112,225,194, 41, 51,103,206,196,185,115,231,160,
+ 84, 42,145,145,145,129,208,208,208,164,156,156,156, 58, 63,151,124,124,124,156,238,222,189,171,250,228,147, 79, 58,109,221,186,
+ 85,106, 98, 98,130,220,220, 92,252,240,195, 15,152, 49, 99, 6, 8, 33,160,148,226,199, 31,127,148,141, 29, 59, 54, 48, 33, 33,
+ 65,213,178,101, 75, 99,135,111, 16,148, 85, 92,100, 0, 76,202,191, 74,166, 76,153, 34, 34,132,136,203,195,165,132, 16,242,143,
+249, 91,253,167, 80, 91, 22, 1, 96,179,116,233,210,112, 74,233,192,165, 75,151,134, 87,217,127,127, 29,174,170,161, 9, 0, 80,
+221, 65, 41, 29, 88,245,107,213,199, 82, 74, 7, 82, 74, 7, 86,125,124, 93,199,171, 78,213, 82, 73, 36,165,180,123,245, 29, 40,
+208,193,161, 85, 27,228, 30,219, 5, 41,143, 60,117, 99, 30, 92,131,179,132, 15, 29,165, 70, 85, 51,170, 99,106,106, 90,121, 99,
+ 24, 6,169,169,169,224,241,120,152, 51,103,142,100,242,228,201,237,133, 66,225,185,110,221,186, 45,169,203, 81, 17, 70, 46, 94,
+188, 8,119,119,119, 50,115,230, 76,179,238,221,187,243, 1,224,234,213,171,112,115,115, 35,139, 23, 47,150, 15, 26, 52,136,200,
+100, 50,163,171, 67, 12,195, 64, 42,149, 34, 44, 44,140,108,218,180,201, 84, 44, 22,227,192,129, 3,200,202,202,194,171,175,190,
+202,223,180,105,147,169, 68, 34, 65, 84, 84, 20,242,242,242,140,246, 18, 66, 80, 82, 82, 82, 99,192,170,169,178, 85, 23,193,193,
+193, 27, 29, 28, 28, 86,111,221,186, 85, 44,149, 74,113,242,228, 73,228,229,229, 97,196,136, 17,250,109,219,182, 73,204,204,204,
+ 16, 29, 29,141,188,188, 60,163,124,213,185,120,241, 34,220,220,220,200,172, 89,179,164, 93,186,116,209, 1, 64, 92, 92, 28, 60,
+ 60, 60,200,172, 89,179,164,102,102,102,171,186,118,237,186,177, 46, 7,203,178, 72, 77, 77,197,245,235,215,241,224,193, 3,100,
+101,101, 33, 51, 51, 19,106,181, 26,122,189, 30, 0, 32, 83,231, 31, 88,183,105,223, 21, 19,169, 84, 22,212,222,163,197,133,216,
+155, 25, 38, 82,169,204,195,181,133, 39, 33,243,185,203, 57, 85,135, 16, 2,129,214, 3,148,116, 58,127,179,192, 42,180,207, 72,
+ 33, 50, 15, 1, 84, 7, 16, 62,122, 4, 57,241,247,158, 41,180, 7,139, 14, 16,194, 11, 48,226, 15,138, 16, 2,126,169, 59, 64,
+252,143,198,232,173,187,246,153, 36,124,252,248, 49,132, 66, 33,196, 98, 49,124, 67,222,224,239, 56,169,115, 0,208, 17, 2,180,
+ 49,202, 89, 5,177, 88,252,229,216,177, 99, 77, 84, 42, 85,165,179, 95,191,126, 38, 50,153,108,110,163,126, 7, 81, 45,197, 96,
+100, 93,160,167, 31,223,120,160,113, 89,188, 57,213,235,126,178,198, 11, 20,211,160,211,249, 54, 53,100,185,184,184,132,121,122,
+122, 62,112,117,117,237,218, 88, 71,121,184, 58,183,115,219,207, 74, 43,135,178,112, 5, 67, 17,192,147,194,193,206, 18, 27,231,
+134, 89,217,154, 73, 27, 20,178,202,195,213,137,243,231,207,219, 72, 36, 18, 92,190,124, 25, 34,145, 8, 18,137, 4,237,219,183,
+199,250,245,235,109,173,172,172,254, 17, 33,139, 16, 98, 73, 8,233, 67, 8,249, 15, 33,228, 13,252, 25,174, 92, 1,244, 36,132,
+244, 6,224, 0, 32,138, 82,122,197, 72,103, 87, 62,159,127,160, 99,199,142, 41,124, 62,255,102,120,120,248,127,167, 79,159,142,
+ 53,107,214, 32, 44, 44,236,254, 23, 95,124,129,248,248,120,125, 81, 81,209, 96, 74,105,157, 31,132, 5, 5, 5,191,207,154, 53,
+203,252,181,215, 94,171,248, 25,103,206,156,193,150, 45, 91, 96, 98,242,231, 40, 8, 74, 41, 6, 13, 26,132,113,227,198, 89,106,
+181,218, 61,117, 57,237,237,237, 95,137,140,140,244, 64, 89,184,146,224,207,128,101,114,252,248,113, 11,137, 68, 98, 21, 24, 24,
+104, 86,190, 93,246,218,107,175, 89, 11, 4,130, 70,255,141,189,164,212,152, 69, 42,168, 30,112,170, 7,160,154,238,171, 41, 60,
+ 53,182,113,117, 29,175, 58, 85, 63,188,194, 8, 33, 81, 53,237, 84,250, 36, 29, 98, 24, 32,227, 17, 72,249,164,236, 43,143, 64,
+ 74, 88,240,115,210, 27,248, 86,251, 39,166,166,166,144,203,229,127, 9, 90, 26,141, 6, 5, 5, 5, 70, 5,141,138,177, 60,150,
+150,150,149, 31,218,166,166,101,179,201,173,172,172, 80, 82, 82, 2, 66, 8, 76, 76, 76, 96, 98, 98,210,160, 10,150, 68, 82, 86,
+ 17,142,142,142,198,217,179,103,193,231,243, 97,101,101, 5, 0,184,124,249, 50,174, 93,187, 6,145, 72, 4,107,107,235, 6,121,
+ 75, 75, 75,107,236, 34,212,106,181, 13,234, 34,100, 24, 6,197,197,197,244,242,229,203,184,126,253, 58,196, 98, 49,108,109,109,
+ 33, 18,137,144,156,156,140,219,183,111, 67, 36, 18,193,214,182,206, 42,102,173,152,153,153, 33, 55, 55, 23, 44,203, 86, 84,243,
+ 96,102,102,134,130,130, 2, 48, 12, 99, 84, 59, 89,150,133, 74,165, 66, 86, 86, 22, 30, 61,122,132,204,204,204,202,144, 85,209,
+ 69,200,209, 64,206,248,152,131, 8, 94,205,204,213,137, 51, 11, 68,230,246,110,189,128,172, 67, 0,225, 1, 2, 75,116,238,212,
+ 10, 73,105, 6,147,248, 71, 90, 9,116,232,131, 63, 60, 45,141,114,242, 4,189, 51,242,116,226,196, 92, 91, 51,239,118,126,200,
+200,200,128, 88, 44,134, 88, 44,134,127,231, 87,240, 32,133,149,221,124,168,145,129,226, 85,163,156,229,116,234,212,169,181, 84,
+ 42,237,210,169, 83, 39,146,158,158, 14,177, 88, 12,137, 68,130, 46, 93,186,128, 97,152,246,190,190,190, 94, 13,122,254,247,221,
+ 68, 16,200, 58, 3,244,227,219, 15,139, 20,123,163, 53,158,131,134,190, 97,181,234,151, 12,175,219, 15,139, 93,161,213,127,138,
+194, 82,191,198,134,172,150, 45, 91,118, 55, 53, 53,221,255,229,151, 95,186,138,197,226, 67,174,174,174,161,245, 63,234,175,152,
+138,121,255,251,242,227,145, 74,203,138,112,165, 47, 4,120, 82,128, 39, 43, 11, 89,246, 54, 88,244, 81, 47, 43,153, 80,240,127,
+198, 58,165, 82,233,142,117,235,214,217, 86,132, 43,161, 80, 8,137, 68, 82,121,235,212,169, 19,230,204,153, 99,107,101,101,181,
+189, 49,109,110, 46, 8, 33, 86, 40, 27, 87,117, 21,192, 30, 0, 39,170,132, 43,119, 0,255,135,178,170, 85, 44,165, 52,201, 72,
+103,112,223,190,125, 79,222,191,127,191,255,149, 43, 87, 28,211,210,210,254,159,189,243, 14,143,162,218,223,248,123,102,182,151,
+244,108, 26, 9, 9, 1, 82, 9, 45, 32,132,222,164, 73, 87, 4, 20,165, 11, 40,138,130, 8,162,162,116, 17, 41, 98, 1,165, 35,
+ 40, 32, 77,145, 34, 32, 32,210, 66,135, 16, 18, 66, 72,111,155,182,201,102, 55,219,102,206,239,143, 77, 48, 66,202, 6,184,191,
+123,175,119, 62,207, 51, 79,118,206,206,188,243, 61,179,155,221,119,191,167,133,207,152, 49, 3,171, 86,173,194,123,239,189,183,
+157, 82, 26,186,107,215,174, 86, 23, 47, 94,108,238, 72,255,160,156,156,156,151,102,207,158,157,159,159,159, 15, 0,136,138,138,
+ 66,113,113, 49,102,206,156,137,233,211,237,131, 92, 91,181,106, 5, 0,200,203,203,195,242,229,203,115,115,114,114,198,212,166,
+201,113, 92,250,222,189,123, 99,204,102,115, 67, 0, 18, 0, 50, 0,202,212,212, 84,151,178,178, 50,103,150,101,157, 84, 42,149,
+179, 76, 38, 83,141, 27, 55, 78, 18, 23, 23, 23, 97,179,217, 50, 29,169,255,255, 16, 53,122, 17,224,209, 76, 83, 77,101,143,123,
+188, 35, 56,122,254,131,111, 72, 74,233, 41, 0, 93, 30, 62,128, 37,184,158, 22,123, 10,238,145,173,255,158,193, 18, 17, 40,157,
+156,145,156,153, 14, 9,200,173,199, 8,240,129,169,170,106,178,178,179,179, 49,123,246,108,195,182,109,219,110,152,205,230,152,
+211,167, 79,207,169, 77,167,210,164,120,121,121, 33, 45, 45,141,126,246,217,103, 37,135, 14, 29,178, 85,150,165,167,167,211, 15,
+ 62,248,160,244,199, 31,127,164,245,105, 34,172,204, 96,157, 58,117,138,206,155, 55, 79,151,149,149, 69,221,221,221,225,225,225,
+129, 99,199,142,217,230,204,153,163, 75, 74, 74,162,238,238,238,112,119,119,175,151,193,178,217,108, 80, 40, 20,127, 51, 40,132,
+ 16, 88,173,214, 71, 50, 91,181,113,230,204,153,241, 58,157,238,237,153, 51,103, 26,111,223,190, 77, 53, 26, 13, 52, 26, 13, 54,
+111,222, 44,122,245,213, 87,141,215,175, 95,127, 80,246, 56,120,122,122, 34, 33, 33,129, 46, 94,188,216,120,252,248,113, 49, 0,
+104, 52, 26,220,185,115,135,206,159, 63,223, 88, 92, 92,252,246,153, 51,103,198,215,166,193,113, 28,146,147,147, 81, 82, 82, 2,
+142,227, 96, 50,153,160,213,106,145,145,145,241,192, 96, 25, 85,206,125,223, 24, 59,176,101,153,209,104,184,112, 35, 49,173, 93,
+235, 72,175, 50,163,209,144,120, 63, 45,129,210,121,194,236,225, 15, 67,121, 31, 80,218,233,204, 13,189,235,179,207,141,144,146,
+146,139,128, 85, 15,136,221, 0,177, 43, 68,114, 15,244,235,217,138,221,116,164,196, 7,132,239, 0,185,172,238,254, 45, 60,245,
+ 6,207,119, 62,118,169,220,173, 83,255,105,210,194,194, 66, 48, 12,243,192, 96, 41, 85, 42,244, 28, 48,154,217,120,196,228, 3,
+158,118, 4,203, 58,220,103, 70, 34,145,204, 26, 59,118,172,164,168,168,232,111,154, 10,133, 2, 67,134, 12,145, 57, 57, 57,125,
+224,112,221,227, 35, 37,200,149,181, 7, 79,167,223, 73, 49,250,237,253,211, 24, 58,227,163,141,138,102, 45,218, 97,242, 96, 47,
+197,162,173,121,145,215,146, 12,141,192,112,239,192, 96,110,131,111,235,103,178, 26, 53,106,212, 89,165, 82, 29,220,183,111,159,
+178,123,247,238,152, 49, 99,134, 74, 38,147, 29, 10, 10, 10,122,228,179,177, 46,202, 74,185, 55,230,175,220,154,123,125,103, 31,
+192, 86, 90, 97,174,254,218,242,116, 60, 62,250,242,119,157,149,163,163, 28,213, 52, 26,141,175, 78,152, 48,161,224,167,159,126,
+122,196, 92,201,229,114,220,191,127, 31,139, 22, 45, 42, 44, 44, 44, 28, 83,223,120,159, 50,173, 0, 92, 5, 80, 14,160, 43, 0,
+101,197, 72,193, 24, 0,199, 40,165, 28,165, 52,151, 82,154,237,168, 32,203,178,239,125,253,245,215, 34,163,209,136,137, 19, 39,
+ 34, 61, 61, 29, 89, 89, 89,152, 59,119,238,125,158,231, 95,173,208,188, 70, 41,141,119, 68,207,108, 54,223, 41, 42, 42, 26,208,
+183,111,223,226,162,162, 34,180,104,209, 2, 3, 6, 12,128,143,143, 15,252,252,252, 48,104,208, 32,132,132,132,160,160,160, 0,
+163, 70,141, 42,212,106,181,125, 40,165,181,142, 66, 47, 40, 40, 72,218,185,115,103,210,235,175,191,222, 54, 61, 61, 61, 10,128,
+175,213,106,117, 55, 26,141, 78, 54,155, 77,237,236,236,236, 17, 29, 29,173,153, 60,121,178,107,108,108,108,100, 70, 70,134, 30,
+ 64,170,163,247,224,127,129,154,188,200, 19,112,240, 49,227, 24, 80,217, 7,235,113, 13, 25, 83, 33, 68,170,254,173,138, 5,248,
+104,203,238, 45,229,210,192, 16,184,132,183,132, 82, 46,135, 66, 38,133,194,213, 29,229, 60,143,245,247,115, 12,101,148, 58,254,
+ 1,249, 87,240,127,203, 92,241, 60,143,117,235,214,149, 47, 92,184,176, 56, 39, 39,103,242,233,211,167, 91,198,198,198, 94,175,
+179, 2, 12,131,146,146, 18,236,218,181,203,184,105,211,166,123, 70,163,177,181, 68, 34,177,154,205,102,108,223,190,189,124,213,
+170, 85, 41, 6,131,161,173, 88, 44,182,212,167,249,173,178, 15,150, 88, 44,182,150,151,151,183,254,225,135, 31,146, 14, 30, 60,
+104,116,118,118,134, 88, 44,182, 26, 12,134,230, 91,183,110,189,243,195, 15, 63, 24,157,157,157,235,101,220,120,158,175, 54,131,
+197,113, 28,100, 50, 89,189,250, 96,197,198,198,126,103,177, 88,218,109,223,190, 61, 99,227,198,141,229,206,206,206, 0, 0,171,
+213,218,118,203,150, 45, 25,107,215,174, 53,213,167,131, 59, 0,152,205,102,112, 28,135,173, 91,183,154,118,236,216,145, 97,179,
+217,218, 86,150,109,220,184,177,124,235,214,173, 25, 22,139,165, 93,108,108,236,119,117,105,113, 28,199, 21, 23, 23, 67, 36, 18,
+225,222,189,123, 38,153, 76, 6,150,101,145,152,152,248,192, 96,121,121,186, 71,118,108, 27, 21,190, 98,237,174, 83, 42,153, 76,
+214,167, 91,155,136,184,196,212, 12, 74, 73, 74,189, 2,255, 95,193, 2, 37, 8, 20,137,233, 38, 39,185,216, 74,144,179, 7,144,
+184, 85, 24, 44,251,230,215,192, 31,177,241, 6, 39, 16, 72, 97,182,122,213,169,105,165, 42, 16, 40,111,166,194, 73, 36, 81,144,
+156,156,156, 7,153,166, 74, 67,212,168, 73, 4,174, 36,234,213, 32, 84, 6,192,225,169, 68, 40,165, 3,212,106,181, 40, 59, 59,
+251,129,214, 3,205, 70,141, 88,171,213,218,199,225,186,107, 57, 95,240,252, 27, 9,105,229,126,251,254, 52,134,188,243,209, 70,
+133,130, 45, 2, 82, 86,163, 89,136, 15,102,140,105, 41,157,187, 94,219, 44, 54,206,208, 24,132, 78, 70, 51,189,195,191, 46, 26,
+ 53,106,212, 73,169, 84, 30,218,183,111,159, 82,165, 82,225,222,189,123,104,209,162, 5, 22, 44, 88,160, 84, 42,149,191, 6, 6,
+ 6,118,115, 56, 78, 0,231,239,208, 84,125, 41, 23, 51,107, 93,122,206,245,251,156,221, 88, 49,118,115,165,213, 81, 76,248,240,
+231,226,162,146,242,231,207,221,176,158,112, 84,147, 82,122, 85,167,211,245,254,240,195, 15, 11,242,243,243,255,102,174, 82, 83,
+ 83, 43,141, 64, 55, 74,105,189,127,244, 62,101, 84,176,119, 94, 15, 3,208, 4, 64, 75, 74,169, 13, 64, 41,165,244,177, 82,215,
+145,145,145,173, 3, 3, 3,241,205, 55,223, 96,253,250,245, 69, 43, 86,172, 0,165, 20, 33, 33, 33,206,143,171,153,155,155,123,
+241,206,157, 59,125, 90,182,108,121,123,205,154, 53, 25,190,190,190,252,196,137, 19, 49,126,252,120,104, 52, 26,110,245,234,213,
+105,157, 59,119,190,153,148,148,212,171,172,172,236, 70, 93,122,148, 82,154,159,159,127,118,195,134, 13, 23,123,246,236,233, 52,
+118,236, 88,239,245,235,215,251,196,199,199, 55, 52, 24, 12, 13,242,242,242, 84,167, 79,159,150,109,217,178,197, 39, 46, 46,238,
+190,209,104,188, 72,255,149, 11, 2,255,151, 81,155, 23, 1,160,173, 48, 58,230,135,254,106,235,120,206,209,115,171,125,236,192,
+113, 53, 82,231,136,155,157,247,232,217,209, 77,200,178, 5, 27,215,189, 59,186,121,184, 34,168, 81, 4, 56,125, 49,110,228,228,
+ 96, 75,182,206, 96,165,244,203, 93,247,232,239,117,233, 60, 76,165,193, 98, 89, 22, 71,142, 28,225,182,111,223,110,161,148,126,
+ 91, 82, 82,242, 65, 92, 92, 92,153,163, 58, 60,207,179,227,198,141,211, 23, 21, 21,237,201,206,206,158,156,148,148,100,238,220,
+185, 51,251,210, 75, 47,233, 11, 11, 11, 15, 16, 66, 38, 94,186,116,201,212,169, 83, 39,212,231,125, 76, 8,129, 68, 34, 1, 33,
+ 4,177,177,177,247, 35, 35, 35,155,157, 63,127,254,171,132,132,132, 23, 41,165,236,229,203,151,211,163,163,163, 91,156, 61,123,
+118, 77,124,124,252, 40,158,231, 29,154,115,133, 16,242, 32, 59, 86,213, 72, 49, 12,243,192,212,213,199, 96, 1,192,229,203,151,
+111, 69, 70, 70, 70, 92,188,120,113,243,164, 73,147,250, 0, 80,198,198,198,222,110,222,188,121,248,249,243,231, 55,191,250,234,
+171,125, 97,111,243,119, 8,139,197,130, 33, 67,134, 24,116, 58,221,225,210,210,210, 49, 55,110,220, 48, 68, 71, 71, 87,150, 29,
+ 41, 46, 46, 30, 83,143,215,104,254, 23, 95,124,241, 17, 0,240, 60,191,121,229,202,149, 19,102,206,156,169,201,204,204,124, 96,
+176,242,242, 11, 79,116,120,110, 26, 87, 80,172, 51,111, 92, 57,235, 5,133, 92, 38,253, 96,233,198,147, 86, 22,231,107, 85,254,
+ 95, 69,202,149,128, 50, 89, 47,244,112,147,173,254,114,131,100,236,160,198,242,168,240, 64,187,185,146,184, 33, 54,174, 24, 31,
+125,182,139,255,116,138, 38, 25, 60,210,193,225, 78,157,154,106, 81, 9,202,173,121, 19,250, 72,100, 75,190,157, 30,220,113,192,
+187,178,136,168,103, 30, 24,161,248, 91,151,176,114,209, 52,254,211,201,238,201,224, 73, 22,108,112, 40, 75, 0, 0, 54,155,237,
+133,165, 75,151, 30, 30, 59,118,172,170, 89,179,102, 15, 52,239,223,191,143, 79, 63,253,212,104, 50,153,158,119, 76,137, 16, 48,
+145,173, 56,142,243,250,254,104, 65,211,183,223,156,172, 84, 48,133, 64,242,114,187,121, 17,187,160, 85,148, 39, 62,122,211, 71,
+ 60, 99,201,207,145,103,190, 10,214,195, 42,137, 0,144,229,136,186, 72, 36, 58,184,120,241, 98,165, 66,161, 64, 98, 98, 34, 20,
+ 10, 5,228,114, 57,162,163,163,177,106,213, 42,229,235,175,191,126,168, 91,183,110,234,147, 39, 79,218, 28,173,251,249, 59, 52,
+181,125, 24,137,153,245,117,210,185,101,111,185,250,180, 8,243, 68,126, 41, 48, 97,222, 47, 69,133, 37,198,225,245, 49, 87,149,
+ 80, 74,175, 18, 66,122, 79,159, 62,253,232,166, 77,155, 60, 34, 34, 34,144,158,158,142,145, 35, 71, 22,104,181,218,238,255, 1,
+230, 10, 0,202, 0, 52, 0,144, 0,123, 95,164,187,132, 16, 41,158, 96,121,182,184,184,184, 43,169,169,169,190,227,199,143, 71,
+ 73, 73,137,219,136, 17, 35,112,239,222, 61, 36, 36, 36, 92,125,146, 64,141, 70, 99, 44, 33,164,249,219,111,191, 61,122,214,172,
+ 89, 29,157,156,156, 26, 81, 74,105, 73, 73, 73, 50,199,113,103, 0,108,167,212,241,117, 56, 43, 12,211, 93, 66, 72,114, 82, 82,
+146,247,230,205,155, 93, 97,191, 7, 0, 96, 4,160, 3,144,251,184,166,240,127,152,216,127,211,185,143, 15,165,212,161,237,133,
+ 70,232, 56,182, 49, 57,245, 82, 48, 74, 71, 5, 67, 63,182, 9, 57,243,124, 99,116,173,237, 28, 0, 81,213,149,183,110,221,154,
+218,108, 54,122,244,232, 81,218,175, 95,191,178, 78,157, 58,157,137,142,142, 14,113, 36,142,135, 53,187,117,235,118,184, 77,155,
+ 54,195, 31, 46,123,230,153,103, 70, 84, 45,235,218,181,235,173,174, 93,187,234,186,116,233,114,207,145, 56,187,116,233, 18,223,
+177, 99,199,178, 46, 93,186,196, 87, 45,111,219,182,237,224, 30, 61,122, 28,172, 90,246,204, 51,207, 12,122,184,172,166,186,247,
+234,213, 43, 61, 33, 33,129,166,165,165,209,254,253,251,103, 85,150,247,236,217, 51,253,218,181,107, 52, 33, 33,129,246,237,219,
+ 55,171,186,115,107,210,172,186,181,105,211,102, 98,231,206,157,207, 62, 20,243,132,135,203,106,211,236,220,185,243,217,182,109,
+219, 78,120,184,172, 77,155, 54, 19, 31,231, 53,170,186,249,250,250,134,182,106,213, 42,111,229,202,149, 52, 56, 56, 56,175,234,
+115,205,186,141,251,176,184, 68, 95, 50,115,254, 55, 59, 53, 17, 67,154,215,183,238,245,221,254,107, 53,111, 71, 72,232,159, 17,
+ 29,233,233,136,131,241, 91, 3,111,143,233,173, 50, 93,222,222,151,210,248,119,233,249, 93,227,105, 76,132,148,251,243,171,128,
+ 4,122, 58,252, 16,253, 35,180, 11, 61,212, 88,234,144,230,233, 38,157,233,233,240, 67,113,155, 3,111, 15,233,162, 49,111,223,
+186,142,222,189,123,151, 30,216,187,157,182,143, 80, 86,104, 70, 28,165,167, 35,186, 59,164, 89,101,107,221,186,117,199,152,152,
+ 24,253,206,157, 59,105, 98, 98, 34,253,237,183,223,104,135, 14, 29, 12,173, 90,181,234,238,120,221, 65,232,169,200, 33,182,223,
+195,206,204, 25,169, 46,158,208, 71,110, 26,217, 93,106, 30, 28, 35,177,244,110, 45,177,117,140, 16,113, 45,130, 25, 62, 34, 0,
+180,119,180,194, 68, 79,135,253, 65,207, 68,244,113, 52,206,144,144,144,180,160,160, 32, 90,211, 22, 26, 26,170,237,218,181,171,
+232,113, 94,247,118,161, 8,236,213, 86,150,125,252,219,238,116, 96, 23,167,130,246, 81,162, 30, 79,250, 94, 2,208,202,211,211,
+ 51,127,211,166, 77,212,219,219, 91, 11,160,217,127,196,251,211, 94,230, 14, 96, 48, 0, 77,197,190, 26,246,249,135,130,159, 64,
+179, 67,239,222,189,173, 87,174, 92,161,247,238,221,163,135, 15, 31,166, 29, 59,118,180, 1,232,246,184,154,255,138,186, 11,154,
+194, 86,185,145,138, 27,245, 47,129, 16, 18, 69,171,233,108, 24, 29, 29, 77,251,244,233, 99, 60,117,234,148,222,108, 54,191,118,
+233,210,165, 3, 79,170,249,175,136,243, 95,161,217,163, 71,143,179, 12,195, 4, 87, 12, 1,206, 58,118,236, 88,107, 0,232,222,
+189,251, 89,150,101,131, 1,128, 82,154,117,252,248,241,214,255,206, 56,255,149,154,126,126,126,161, 12,195, 28, 1, 96,202,200,
+200,120, 48,218,201,171,217,224, 24,119, 55,151,238,197,197,186,171, 57, 55,247, 31,250,119,199,249, 31,173,121,184,137, 20, 78,
+210, 54,224, 48,251,230, 61, 67,163, 15, 54,228, 55, 30,208,187,131,120,243,174,211,252,178,169, 94, 73, 29, 34, 85,247, 65,248,
+ 79,193,153, 46,162,107,138,201, 97, 77, 37,121, 6, 16,207,190,150,100, 8,156,249,117, 81,211, 94, 3, 39,176, 63,239, 94,199,
+127, 54,213, 35,169, 67,164, 58, 13,192,167,224, 13,231, 28,214,172, 66,116,116,116, 71,153, 76,118,104,212,168, 81,234, 29, 59,
+118, 24,203,203,203, 7, 92,185,114,165,214,236,247, 35,154,231,194, 27,194, 70, 22, 1, 52,160,182,243,236, 48,119, 97,227, 23,
+160,123,124, 90,125,226,124, 28, 28,209,108, 31, 70, 2, 85, 78,178, 95, 12, 38,219,116, 71, 50, 87,142,104, 18, 66, 90,185,185,
+185,109, 43, 42, 42, 26, 65, 29,200, 92,253,127,214,157, 16,162,129,125, 34, 70, 17,236,211, 22,220,162,117,244, 97,114, 64,179,
+ 19,203,178,239, 53,110,220,184,197,189,123,247,110,114, 28,247, 25,165,244,228,147,104, 62, 9,130,230,255,251,100,163,255, 85,
+252, 91, 12, 86,231,206,157, 47,115, 28,119, 88, 34,145, 44, 58,121,242,228, 35, 31,212,143,163,249, 36, 8,154,130,230,127,165,
+102, 21,147,117, 57,161, 44,120,201,247,133,129,239,140,112, 75,171,203, 92,213,169, 89, 97,178, 46,222, 49, 4,125,186,189, 52,
+112,198, 8,117, 90, 93,230,170, 86,205, 42, 68, 71, 71,119,148,203,229, 91,140, 70,227,196,186,204, 85,181,154,241,145, 18, 20,
+ 89, 27,192,198, 70,129, 65,205, 75,237,240,212, 0, 49,123, 19,217,200,197, 11,113,150,250,198, 89, 95, 4, 77, 65, 83,208, 20,
+120,152,127,203,172,199,127,252,241, 71,244,191,227,186, 2, 2,255, 40,250, 38,153,113,184,201, 37, 56, 73,151, 70,135, 42,166,
+237, 89,164, 48,128, 39, 25, 32,252,170,218,204,149, 3,154, 23,161,180, 46,125, 38, 84, 49,125,239, 34,133, 1, 64, 14, 40, 86,
+214,102,174, 28,229,242,229,203,127, 2, 8,126,108,129,240, 56, 11,128,251, 0, 73,193, 39,181,204,142, 61, 15, 20,248, 23,254,
+122, 20, 16, 16, 16,168,131,255,184,101, 37, 4, 4, 4,234, 65,223, 36, 51,226, 35, 99, 81,192,206, 4,135, 96,200,108,169, 40,
+182,229,160,111,138,249, 9, 53, 47,160,128,188, 5, 30,161,144,218,146, 80,108,126, 50,205,167, 14,165,118, 19, 37, 32, 32, 32,
+240,159,137, 96,176, 4, 4,254,219,177,103,117, 50, 42,182,255, 92, 77, 1, 1, 1,129,255, 33, 8,128,168,234,158,168, 79,219,
+ 42, 33,164, 90,141,218,112,160,243,166,160, 41,104, 10,154,130,166,160, 41,104, 10,154,255, 48,205,186,180,255, 41,125,187,254,
+ 45,157,220, 5, 77, 65, 83,208, 20, 52, 5, 77, 65, 83,208, 20, 52,255,201, 8, 11,233, 10, 8, 8, 8, 8, 8, 8, 8, 60,101,
+254,173,125,176,148,158,161,190, 16, 49, 45, 8, 79,195, 1,128, 50, 36, 30, 54,254,186, 33, 63,193,225,245,169,106,130,120, 55,
+ 87,170,197,236,118,189,149,123,137,230,222, 48, 60,121,180,246, 57, 88, 0, 4, 2, 72,165,148,158,121, 26,154, 2, 2, 2, 2,
+ 2, 2, 2,255, 60,106, 52, 88,161, 29,134,254,161, 82,168,154, 2, 0, 79, 41, 56, 30, 40,183,246,204, 32, 0, 0, 32, 0, 73,
+ 68, 65, 84, 41,202, 59,151,122,253,183,161, 0,224,215,172,231, 94,169,202, 51,134,231, 41,120, 74, 97,227, 41,108, 38,227, 93,
+109,220, 65,135, 86,158, 87,123,133, 13,237,213,187,215,176, 1, 3,158, 11,107, 30,213,188, 9, 0,220,184,121, 35,233,151, 95,
+ 14,222, 81,123,133,237,209,231,221,217,251, 36, 21, 83,139,197, 31,182,125,166, 93,159,216,216, 11,115, 1,188,255, 36, 90, 85,
+144,208, 51,253,183,146, 78,191,246,124, 74,122, 2, 2, 2, 2, 2, 2, 2,255, 64,106, 52, 88, 42,133,170,233,137,253, 27,188,
+246,254,145, 14, 0,232, 21,237,131, 79, 62,223, 52,132, 16,114, 7, 0,158,127,253,243,208, 15,222, 30,131,179,183,180,160,148,
+162, 85, 83,119, 12,121,249,117,135, 46,170,240,137,108, 59,226,197, 23, 95,154, 57,115,198,160,187,119,239,166,236,216,177,227,
+ 15, 0,232,220,165, 75,211,197,139, 23,191,184,220,205, 93,166,240,137,204, 52,230,196, 61,214,250, 65,106,159, 38,158, 17,205,
+218, 76,216,254,221,103,162, 30,253, 71,142, 87,251, 52, 89,169,207, 73,202,127, 28, 45, 89, 64,179, 96, 23,177,228, 19,194, 48,
+ 34, 23,175, 32, 47, 0,112, 11,104,245,139, 95,179,126,156, 92,174,184, 81,102, 52,110,201,187,125,120, 61,253, 87,118,102, 19,
+ 16, 16, 16, 16, 16, 16,248,175,162,214, 38, 66,181, 92,132, 59,247,237,173,117,174, 74, 96,210,171,207, 35, 55, 55, 39,212, 98,
+227, 49,122,196, 80, 92,185,147,141,132,251, 90, 80, 10,132,250, 59,188,150, 48, 88,240,109,198,141, 31,215,245,200,209,163, 23,
+ 63,252,224,195,173,132,224, 28, 0,172,251,246,187,152,143,230,125, 52,113,244,171,163,159,221,189,123,247, 45, 60,230, 2,141,
+140,196,117,229,167,139, 62, 81,103,230,151,151,191, 57,227, 93,118,230,219,111, 45, 7,240,106,125,117,100, 1,205,130, 35, 2,
+252, 23,253,113,116,183, 82,169, 84, 98,253,250,245, 50, 96, 63, 62,158, 57, 78,254,220,128, 1,224,192,118,248,236,171, 29, 45,
+142, 74,165,227, 61, 67,159, 29,154,159,240,219, 19, 55,109, 10, 8, 8, 8, 8, 8, 8,252,247, 83,107, 39,119,142,167,136, 79,
+206, 65,124,114, 14, 46,196,107, 97,230, 68, 88,190,240, 61, 44,253,120, 22, 10, 12,192,190, 63,211,113,231,126, 14,238,220,207,
+ 65, 65,177, 30, 15, 79,251,247,240, 8,131,207,223, 82,182, 94, 53,203,229,179,190,109, 84,221,220,221,220,220, 18, 47,110, 45,
+251,232,229,220,136, 79, 94, 76,151,136,229,222, 25,110,222, 13, 59,236,218,189, 59,210, 91,227,165,114,118,118,153,229, 30,222,
+123,131,107, 80, 55,151,218, 52, 31, 70,237,211,172,235,192,231,250, 63,231,227,227,205,189,182,234, 82,124, 84,120,168, 45, 36,
+ 52,188,155,218, 39,172,107, 77,231, 84,167, 41, 11,104, 22,220,196,215,123,209,169,195,187,149,229,229,229,184,121,243, 38, 10,
+ 10, 10,236, 79, 18, 2,134, 97,209,176,129, 47,214, 44,153,161,252,248,189, 41,209, 50,185,114, 63, 33,132,212,166,249,164, 8,
+154,130,166,160, 41,104, 10,154,130,230, 63, 85,243,159, 6, 3, 0,132,144,106,155,183,146,210, 11,112, 39, 57, 27,173,195, 27,
+160, 73,144, 15, 46, 38, 22, 97,251,137,116,108, 60,154,130, 19,215,181,224,197, 78,200, 41, 37,184,155,154,139,132,148,252, 58,
+167, 85,102,165,226, 17,211,151,233,102, 70, 6,151,180, 63,185,115, 26,252,212,137,145,239,125, 94, 60,141,149,138, 71,120,249,
+184,238,152,249,214,228,151,157,148, 10,169,217,100, 70,163,160, 0,249,148,137,227,198, 74,212,170, 29,142, 86, 70,163,137, 84,
+ 73, 21,170,173,139, 62,154, 33, 95,177, 55, 49,173,204, 76,203,118,159,205,186, 55,115,246, 71, 37,172, 88,241,173, 70, 19,169,
+114, 68, 71, 22,208, 44, 56,208,195, 99,209,153, 35,187,149, 22,139, 9, 89, 89, 89, 48,155,205,176,217,108, 15,142,161, 0, 74,
+141, 54, 36,103, 27,209,181, 75, 71,182,117,171,102,225,154,240,126,175, 57, 26,171,128,128,128,128,128,128,192, 95,212,228, 69,
+254, 91,169, 49,131, 85,102, 44,187,251,202,107, 51,243,154, 58,101,155,135,118,143, 0, 40,160,205, 78, 65,220,197, 35, 72,188,
+124, 20,165,218, 52, 80, 10, 4, 5, 53,132,196,152,108, 94,183,246,235, 60,222, 86,126,183, 38,189,193,189,253,252,239,102,170,
+152,101, 51, 27,158, 75, 76,200,246,156, 58,115, 19, 18, 19,178, 61,151,205,108,120,238,110,166,138, 81, 74,184, 14,175,142, 28,
+ 76, 6, 15,232,139,247,222,155,137,193, 3,250, 98,230,228, 23,137, 92, 42,110,239,104,101,202,165,242,165,179, 63,156,239,148,
+ 83,108, 49, 95, 72, 40, 49,169,149, 74,217,159,241,101, 6, 19, 85, 88, 6,141,152,164, 53, 73, 68,243,235,210,144, 5, 52, 11,
+246,117,118, 94,116,246,216, 79, 74, 74, 41, 50, 50, 50, 96,177, 88, 96,181, 90, 97,181, 90, 31, 28, 87,172,183, 34, 77,107, 68,
+106,158, 1, 55, 83, 74,208,175,111, 95,165, 72, 44,125,217,209, 88, 5, 4, 4, 4, 4, 4, 4,254,185,212,104,176, 18,206,238,
+237,124,249,216, 86,239,252,220, 92,157, 74, 38,130,136, 97,144,151,113, 15, 91, 62,127, 11,187,191,156,129,226,236,187,160, 20,
+ 80, 72, 88,152,244, 5,186,236,171,187,188,243,107, 25, 65, 72, 96,125,246,171,109,247, 27,165,100, 83,151,237,135,245, 98, 0,
+216,126, 88, 47, 78,201,166, 46, 95,109,187,223, 72, 74,181,224, 57, 14, 3, 6, 63,143,173,155,215, 35,166,199, 96,236, 62,157,
+ 6,131,209,226,208,250,103,114,239,208, 32, 47, 31,159,231,167,143,238,233,244, 76,168,155, 58, 36,192,149,101,197, 18,155, 84,
+ 44,227,127,190,164,203,236, 51, 96, 40,163, 84, 57,247,149,123,135, 6,213,166,227, 34,150,124,242,231,209,159,148, 44,203, 34,
+ 45, 45, 13, 22,139, 5,102,179, 25, 38,147,233, 65, 6,171,196, 96, 69,102,129, 17,233, 90, 3,210,180, 6,220, 78, 43,129, 84,
+229, 6,171,213, 90,239, 25,111, 5, 4, 4, 4, 4, 4, 4,254,121, 56, 52,209,104, 86, 94, 33,220,157, 88,104,252, 26,225,165,
+183,150, 3, 0, 56,222, 6, 10,251,244, 12,142,228,244, 40,196,191,189, 49,186, 81,114,144, 47,209,189,220, 79,105, 4,128,151,
+251, 41,141, 65,190, 68,247,198,232, 70,201, 6,206,205,194,113, 28,206,220,202,195,178, 31,111,227,195, 77,215,113,228,146,227,
+125,198, 69, 98,197,244, 79,151, 44, 86,138, 88, 66,110,165,150,234,179, 11,109,122,137, 68,108, 17, 75, 69, 86,189,153, 24, 83,
+180, 92, 65,223,225, 83,239,179,172,120,106,157,177, 82, 30,148, 82,152, 76, 38,152,205,230, 7, 91,101, 6,171, 80,111, 65, 86,
+ 65, 57,210,180, 70,164, 87,108,185, 69, 70, 8, 3, 9, 5, 4, 4, 4, 4, 4, 4,128, 42, 6,139, 16, 66,171,107,255,228, 1,
+ 36,166,104, 33, 19,241,240,111,216,228,175,142,236, 20,160, 20,176,218,120,135, 46,180,255,104, 86, 70,112,131, 50, 58,107,121,
+ 90, 76, 84,184,199,245, 41,163, 2,226,163,194, 61,174,207, 90,158, 22, 19,220,160,140, 90,121, 41, 71, 41, 5,229, 41, 40,165,
+160, 20,224,121,199, 13, 11, 33,108,251, 86,225,129,162, 79,118,220, 77,157,250,117, 66, 60, 17,137,172, 82,169,212,230,237,162,
+ 32,254,158, 10, 81,169, 9,229, 97, 81,173,173, 4,104, 93,155,142,206,106,153,215,177,207,112,131,197, 98, 67, 64, 64, 0,204,
+102,243,131, 38,194,202, 12, 86,177,222,130,204,194,114,164,107,141, 72,211, 26, 97, 44,231,112, 35, 62, 5,132, 97,133, 78,127,
+ 2, 2, 2, 2, 2, 2,143, 73, 77, 94,228,191, 17, 6, 0, 40,165,164,114,171,238,160,192, 0,111, 92,184,153,138,134,222, 50,
+ 56,187, 56, 33, 62, 41, 3, 12, 43, 2,203, 16,216, 56,199,239, 3, 53, 91,127, 92, 49,203,101,121, 90, 54,119,254,235,109,247,
+238,166,101,115,231, 87,204,114, 89, 78,205,214, 31,237,113,216, 39, 53,229,171,252,117, 88,155,242, 94,158, 46, 50, 81,108,146,
+190,144,176, 34,147, 68, 44, 50,249,122,200,136,175,167, 66, 20,224,161,144,170,228, 98,198,215,219,155, 7,165,222,181,233,152,
+210,111, 37,231,148,148,204,237,220,251,121,131, 88, 44, 70,112,112,240,131, 12, 86,165,193,178,103,176,140, 72,211, 26,144, 83,
+ 88, 14,133,140,193,181,115,199, 13, 28,103,221,226,120,196, 2, 2, 2, 2, 2, 2, 2,149,212,229, 69,254,219,168,123,169, 28,
+ 74,161, 82, 42,192, 51,114,156,185,148,132,240,136, 22,216,116,224, 34,154, 68,181, 67,118,169, 13,180, 30,203, 25,206, 88,109,
+184, 2,224,202,224,222,126,254, 67,251, 53,120,150, 66,252,219, 87, 59,116, 25, 0,176, 33,102,104,133,177,178,103,174,120,106,
+159, 38,194, 81, 8,144,149,150, 87,166,110,228,163,194,237,116,179,201, 73, 41,183,185, 42, 37, 34,141,139,148,117, 86,136, 68,
+ 34, 9,195, 20, 23,107, 75, 1,146, 85,151,150, 41,253, 86,178, 44,160,217,220, 46,253, 70, 46,250,227,240, 78,101,227,198,141,
+113,237,218,181, 7, 77,132,134,114, 27, 72,169, 5, 98, 5, 69, 72, 3, 53,226,175,252,193, 21,228,101,198, 21, 37, 28, 94,239,
+112,192, 2, 2, 2, 2, 2, 2, 2,255, 88, 28,114, 71, 60, 79,161,241,116,131, 76,237,130,100,173, 25,122,104,160, 51, 18,240,
+ 28,192,217,106, 54, 65,132,144,106, 59,125,239, 63,154,149,177,239,168,118,195,254,163, 89, 25, 85,203,237, 77,131,246,230, 65,
+ 74,105,181, 77,132, 53,105, 82,202, 29,250,229,183, 51,133, 67,218,123,185, 50, 98,177, 81, 42, 99, 45, 10,185,216,170,148,137,
+224,229, 34,145,250,187, 73,100, 39, 15,254,192, 16,158,158,112, 68,211,148,126, 43,249,126, 94,222,220, 30, 3, 70, 25,188,125,
+124, 48,122,244,104, 52,108,216, 16, 0,224,174, 98, 16,232,198, 64,100,202,193,169, 3, 27,202,226, 47,255,126, 25,156,105,104,
+213,217,220,107,138,243, 73, 16, 52, 5, 77, 65, 83,208, 20, 52, 5,205,127,170,230, 63, 13,135, 22,123,110,236,171, 66,211, 6,
+ 42,148,155,189, 97, 52,115, 40, 51,217, 80,106,176, 66,103,176, 34, 37,199,128,132,147, 79, 30, 8,133,221, 84,129, 18,240,148,
+ 2,196,222, 76,232,104,162,176, 76, 92,178,252,211,197,159,140,220,185,107, 47,125,179,191,175,255,133,187,198,116, 25, 43, 54,
+ 43,101,140,200, 89,193,112,247,147,239,103, 29,253,229,135,102, 6,185, 97,140,163, 49, 85,102,178,194, 90,247,248, 4, 20, 34,
+179, 81,167,154,221, 49, 18, 71, 14, 31, 52, 74,207, 92,182, 18,145,244, 38,207, 89,182, 21, 37, 8, 75,229, 8, 8, 8, 8, 8,
+ 8, 8,252, 69,157, 6,203, 96, 52,220,125,118,216,132,138, 5,159, 41, 56,206,158, 89,226, 42,155,242,120, 10,206, 98,172,113,
+254, 43, 71,225,120,254,226, 55,155,126,236,223,178, 85, 59, 54, 50,208, 9, 37,197,249,184,116,225,156,141,242,252, 57, 71,206,
+167, 41, 41, 38,181,119,248,139,195,159, 31,242,195,248,201,111,234, 59,119,237,174,244,240,112,182,229,231, 21,148,108, 89,191,
+179,104,239,206,239,155, 17,158,127,133,166,164,152,234, 19,151, 41,253, 86, 50,128,151, 1,128, 16,210, 3,136,236, 90,150,117,
+125,160,158, 62,154, 9, 19, 16, 16, 16, 16, 16, 16, 16, 0, 28, 48, 88,137,231,246,214, 56,183,213,211,164,176, 48,119,244,182,
+ 31,246, 44,252,126,231,129,142, 38,139,165, 1, 15, 54,157,179, 90, 79,201, 74, 11, 62,114, 84, 67,159, 27, 31, 71,130,130,218,
+124,247,229,242,183,191,253,106, 69, 79,240, 92, 19, 16,114,159,240,244,132, 94,110, 24, 79, 51,235,103,174,170, 33,159,116,250,
+181, 55,128,199, 90, 56, 90, 64, 64, 64, 64, 64, 64,224,127, 3,135,154, 8,255, 63, 40, 76,186, 80, 10,224,205, 39,213,169,200,
+ 80, 45,169,216,158, 42, 21,107, 47, 9, 83, 49, 8, 8, 8, 8, 8, 8, 8,212,138,227, 67, 0, 5, 4, 4, 4, 4, 4, 4, 4,
+ 4, 28,130, 0,168, 97, 84,158,227, 43,101, 63,206,104,130,186,244, 5, 77, 65, 83,208, 20, 52, 5, 77, 65, 83,208,252,231,105,
+214,165, 93, 31,255,241,159, 12,249, 87, 14,126, 35,132, 68, 61,237, 27, 37,104, 10,154,130,166,160, 41,104, 10,154,130,230, 63,
+ 79,243,159,134,208, 68, 40, 32, 32, 32, 32,240, 63,135,103,232, 32,181,103,232, 32,181,163,199,107, 34,135,123,107, 34,135,215,
+186, 18,136,128, 64, 85,254, 99, 58,185,255, 55, 67, 8,145, 1,224, 41,165,150,127, 87, 12,110,110,193,206, 54, 39,207,189, 12,
+111,250, 84,151,126,253,183,167,169, 77, 8,145, 69, 70, 70,182, 2,128,184,184,184,171,148,210, 39, 29,141, 9,149,119,216, 40,
+ 55,103,215,215, 44,188,153, 51,148, 25,190,209,231, 36,236,126,242, 72,255, 66,163,137, 84,153,101,138,101, 32,180, 31, 40, 24,
+202,144,227,108,137,245,157,226,226,107,186,218,206,107, 56,120, 73,248,248, 23,158,251, 96,195,238,131, 11,211,246,207,137,127,
+248,121,247,126,107,156,222, 28,221,115,214,151, 63,254,242,105,254,129, 89,250,167, 25,243,255, 10, 13, 59,189,228,106, 19,249,
+176, 89, 39,151, 23,212,231, 60,255,176,152, 91, 98,177, 88, 99,177, 88,242, 50, 19,206, 59,212,108, 17, 16,222,225, 10,203, 50,
+126,156,141,207, 72,191,115,182,205,227, 69,252,191,133,210, 47,188, 21,225,184,247, 40,207,137,121,176, 43,203,181,137,103,158,
+ 68,207,207,207, 79,225,226,226,210,197,217,217, 57, 64,169, 84,202,139,138,138,140, 69, 69, 69,105,169,169,169, 39, 40,165,182,
+167, 21,119,125,208, 52, 27, 50, 71, 36,101,230, 85, 60,254, 68,123,107, 95,173,131,162, 52,205, 6, 47, 36, 12,153, 83,241,120,
+137,246,214,254, 15,254, 63,226,172, 11,239,230,195,218,129,242,111, 51, 12,219,129,163,182,197,121, 55,246,127, 93,159,243, 99,
+ 98, 98,134, 88,173, 86, 89,229,190, 88, 44, 54,157, 59,119,110,223,211,143,244,127,147,122, 27, 44,255,200,225,110, 86, 17,253,
+ 88,196, 50,207,243,148, 58,101, 95,221,165,250, 87, 4,246,180, 8,108,247,202, 37,134, 97,252,171,150,241, 60,159,145,122, 97,
+235, 83,249,176, 37,132,248,127, 62, 61,250,189,220, 2, 99, 9, 33,100, 65, 77,230,195,187,213,168,179,132, 33,193,132, 16, 48,
+ 4, 96, 25, 2, 0, 89,105, 23,182, 61,178,248, 52, 33,196,215, 89, 37, 10, 45, 41,179,221,164,148,214,249, 37,164,240, 8,241,
+ 83,121, 52, 56,213,109,232,180, 70,151,142,108,138, 80,123,135,247,212,231,198,199, 61,133,186,105,154, 52,105,210, 54, 52, 52,
+212, 99,218,180,105, 18, 0, 88,185,114,101,211,166, 77,155, 22, 36, 37, 37,197, 82, 74,181,143,163,171,242, 10, 31,189,122,249,
+252,173,253,250,245, 67,150,182, 12,203, 86,126,221, 77,237, 19, 58,252,105,153, 44,226, 23,173,112, 85, 41,111,190,254,246, 71,
+254,253,187,183, 21, 21,235,173,248,245,196,249,209,187, 55, 46,235,225,234,218,178,121,109, 38,139, 55, 20,127,224,237, 68,251,
+242,134, 98, 0, 24,245,240,243, 13,212,214, 94,238, 74,244,243,149,137,174, 1,216, 83, 87, 44,126,109, 95, 61, 34,150, 72, 2,
+ 9, 97,236,175, 59, 75,192, 84,188, 7,108, 86,115,234,221, 63, 54,246,121,162,202, 62, 37,188,163, 71,231, 16, 16, 15,166, 34,
+ 62, 66, 0,134, 97, 32, 34, 0, 40, 45,185,119,118,147,199,147, 94,131, 16,226, 18,213,212,181,217,115, 29, 59,109, 56,149, 92,
+168,110,216,245,237,131,132, 50, 95,167,158,254,252,154, 35,231,203,229,114,183,159,127,254, 89,211,183,111, 95, 23,239,168, 33,
+167, 28, 57, 71, 45,149, 71,254,242,203, 1, 73,223,190,142,223,102,149, 87,216,179, 96,152,109, 4, 16,243, 60, 93,201,242,116,
+167,190, 32, 33,169,190,147, 9,123, 69, 13,153, 15,130, 8,135, 79,160,184,157,119,115,159,195,211,210, 84,133, 16,194, 42,188,
+194,198, 40,228,242,153, 77, 67,195, 67, 83,238,223, 75, 40, 41,209,173, 48,230, 37,108,160,148,242,245,210,178,113,211,143,158,
+ 56,251,130, 72, 44, 38,125,186,183, 85, 17, 66,250,212, 87,163, 42,222,222,222, 67,214,172, 89,211, 56, 38, 38, 6, 0, 96,179,
+217,156,119,237,218,229,179, 96,193, 2, 21, 28,248, 31,170,142, 6, 13, 26, 52,112,113,113,105,168, 80, 40, 26, 0,128,209,104,
+204,212,233,116,105,153,153,153,153,117,157,235,211,106,184, 39,195, 96,254,225, 61,223,138, 0,160,207,176,215, 22, 54,234,246,
+174, 27, 97,197,198,234,142,231,108,102, 21, 67,200,219,199,127,222, 68, 0,160,231,160,177,179, 53,145,195,191,212,198,237,202,
+125,156,216,159, 20, 50,124, 56,235,153,104, 25, 66, 40,121, 39,186, 77,219,246,195, 6,247, 67,100, 19, 63, 12, 25, 57,101, 38,
+128,122, 25, 44,171,213, 42,219,189,123,183, 63,195, 48,172,197, 98, 41, 31, 57,114,100,222,147,196, 22,210,233,213,179, 32, 36,
+192, 98,179,125,151,122,190,201, 66, 74,231,253,237,125, 67,134, 15,103,125,239,139,230,130, 48, 19, 41,207,167,103, 95,217,209,
+225, 73,174,247,159, 78,189, 12,150,103,232, 32, 53, 43,147,220,236,214,185,189,199,156, 41, 67,165,107,119,254, 1,191, 86, 47,
+102,102, 93,221,217,224, 95, 21,224,147,194, 48,140,255,254,237,107,188, 20, 50, 22, 0,160, 55,114, 24, 54,122, 90,157,231, 53,
+104,251,242, 73, 16,132, 85,182,161,114,156, 77, 46, 18,137,203, 9, 0, 16,251,232, 0,133, 66,122,126,195,220, 24,221,216,129,
+193,175,188,247,229,149,205, 0, 92, 1,228, 84,167, 71, 24,198,255,135,141, 43,189, 26,120,200, 33, 98, 9,244, 70, 27,134,190,
+242, 14,247,200,113,132,248,111,152, 27, 51,127,116,191,160, 17, 94,125,127, 26, 6,224, 80,109,113,170,125, 34,195,157, 60,253,
+126, 27, 54,105,190,159, 17,206,248, 96,225, 10,175,179, 71,119,255,209,107,200, 4, 75, 90, 70,134,193,102,177,222, 41, 40,204,
+158, 81,154,149,144, 88,103,165,237,215,103,213,106,117, 99,181, 90,221,178, 95,191,126,242,153, 51,103,138,187,117,235,246,224,
+249, 73,147, 38, 73, 78,158, 60,233,187,124,249,242,254,126,126,126,229,122,189,254,154, 94,175,191, 71, 41,125,164, 46, 53,225,
+227,163,121,227,249, 33, 3,209,227,249,215,193,241, 4, 19,167, 78,199,145, 67,123, 38, 3,120, 42, 6, 75,205, 50,159, 76,156,
+246,190,127,215,152,104,209,210, 93,119,225,162,148,160, 79,187, 54, 34, 25, 59,203,247,135,141,203, 87, 0, 24,247,240, 57, 13,
+ 7, 47, 9,231, 13,197, 31, 68,121, 90, 70, 14,234, 16,140, 3, 63, 88, 70,250,247,154, 5, 70,233,250, 32,147,213,164,223,155,
+ 78,110, 10,249,154, 6,174,172,151,140,203, 91,211,164,223,155,199,146, 14,125, 81, 90, 91, 44, 98,137, 36,112,195,151,139, 66,
+220,213, 18,176, 44,129,136, 97,192,178, 4, 38, 51,135,209, 83,230, 60,141,234, 86,124,185,134,244,103,128,177, 0,192, 3,155,
+140,121,137,191,214,231, 53, 33, 12,235,177,107,227,114,145,151,139, 20, 44, 75,192, 50,246,237,126,142, 17,111,190,251,177,203,
+ 19,198,167,233,215,209,171,237,201, 47,187,246,105, 31,229,222,226,199,115,196,181,125,191, 17, 30,249,229,138, 49, 63,236, 63,
+ 57,178, 97,151,119, 46, 80,202,127,150,254,199,170,163,181,233,152, 76,166,220, 62,125,251, 57, 19,145, 74,121,108,239,230, 46,
+149,139,205, 91, 57,254,175,197,225, 41, 80,249, 35,134,167,192,164, 9,227,209,167,111, 63, 3,111,227, 51,106,211,254, 27, 12,
+179,237,240,177, 51,154,114, 43,197,231,107,214,207, 47,211,229,207, 79,142,247, 72, 81,122,135,190,109,200, 77, 56,224,120,197,
+ 17,145,112,118,215,208,237,191,156, 67, 84,100, 4, 56,222,190,190,106,168,191, 10, 59, 14,158, 71,120, 88,184,125,242,102,158,
+ 34, 44, 64,141,174,207,189,226,176,244,223, 46, 67,186,137, 84,222,225, 59,134,140, 24,251,194,208,231, 71,194,213, 89, 13,179,
+197, 20,122,226,232,161,111,191, 89,179,172, 35, 33,100, 76,125,204, 33,207,115,210,191, 30, 91,229, 0,196, 0,204,143, 21, 28,
+ 0, 63, 63, 63, 77,219,182,109, 31,236,219,108, 54, 52,106,212, 8,153,153,153, 97,245,213,242,246,246, 86,250,249,249, 61,183,
+108,217, 50,175,238,221,187,139, 53, 26, 13, 0, 64,171,213, 54,248,253,247,223, 91,183,110,221, 58, 47, 43, 43,235, 96,110,110,
+174,161, 38, 13, 43, 95, 46, 97,169,136,149,201, 20, 0, 0, 10, 48, 51,167,189,212, 66,163,209, 84,251,227,184,160,160, 80, 58,
+111,222, 71, 68, 36, 18,219,143,167,148,161, 60, 87,227, 26, 35, 29, 58,116, 24,100,177, 88,228,213, 61,151,111,211,244, 47,231,
+165, 35, 96,255, 10,129,136,101,139,178,174,238,214, 56, 86,123,192,171,197,224,222,190,140,248,155,129,131, 7, 7, 13,233,223,
+ 13,190, 26, 23,156, 56,127, 7,111,205,253, 28, 86, 27,183,202, 81,157,170,176, 44, 43,202,203,203, 75,113,115,115,243,121,156,
+243,171,194, 48, 76,240,254,237, 95,120,253,254,199,165,217, 95,202,126,152,210,184,211, 88,107,229,242,119, 28, 79, 17, 38,119,
+ 22,119, 25,252,172,147, 71,131, 80,197,250, 47,151,138,159,244,122,255,233,212,203, 96,177, 82,118, 65,167, 14,109, 61,230, 76,
+ 31, 47, 93,176,254, 20,206, 29, 61,104,204,186,186,235,169,152, 43, 39,175,176, 24,194,138, 94, 35, 44,171, 34, 12,145,242, 28,
+159,110, 51,155, 23, 26,242, 19,178,159, 84,155,227,129,159,254,172,167, 49,167,180,233,183, 95,125,238,229,237, 42,131,209,108,
+195,184, 55, 62,196,186, 85,243,157, 52, 46, 82,152, 44, 28, 54,237,143,205,111, 81,182,130,142,237, 31,252,202,162, 13,183,246,
+124,182, 45,126, 15,236, 43,254, 84, 11, 67, 24,120,185,200,176,112,199, 29, 56, 43,197,112, 87, 75,193, 60,212, 3,174,210, 92,
+141, 29,104,215, 44, 46, 53,219, 8, 33, 82, 74,105,181, 31,110,106,223,168,206, 78, 26,255,221, 67, 39,204,215, 36,106, 9, 40,
+ 53,227,158,139, 12,195, 70, 79,113,109,226,163,128, 74,206, 34, 37, 61,187,209,187,179,102,181,145,251,134,183, 45,207,142, 79,
+171,171,218, 65, 65, 65,195, 6, 12, 24,160,156, 49, 99,134, 56, 32, 32, 0,219,118, 29, 9,124,246,133, 55, 7,102,230, 20, 4,
+240, 20,240,246,114, 79, 31, 63,162,255,207,191,254,250,107,106,122,122,186,120,217,178,101,237,246,238,221, 27,137,122,252, 18,
+229, 40,133,209,204,129,227,120,112, 60,129,182,184,254, 45,142,132, 16,166,230, 95,213,116,112,239,110,207,136, 86,238,187,135,
+ 82,131, 21, 10, 9,139,187,217,101,136,137,105, 43,218,185,137,116,175,238,140,241, 47, 60,247,129,183, 19,237, 59,168, 67, 48,
+188,220,148,216,248,229, 34, 28, 56,155,220, 55,183,148,192,115,208,178,215,124,101,162,103, 53, 74,201,154,110,109,154,250,244,
+140, 14,196,165, 54, 77,125, 78, 95,142, 79,104,254,226,138,105,153,122,241,177,194, 67,211,170, 53, 90, 12, 97,224,174,150, 96,
+253,145, 20,168,100, 98,168,228, 34,251, 38, 19,129, 97,158,108,193,120,133, 95,100, 0,203,115,227,157,253, 34,199,143,124,113,
+184,223,168,145, 47, 80,194,176,216,181,231,231,193,223,127,191, 45, 91,237, 19,182,158, 99,216, 13,198,172,184,244,186,180, 8,
+ 1,188, 92,164,120,247,187,155,112, 82,138,225,172, 20,195, 73, 33, 70,207,150,154,199,142,147, 16,226, 54,121,112,227,254,215,
+183,246,234, 30,214, 80, 29,114, 45, 73, 23, 55,126,225,165, 85, 39,139,187, 79, 95,179, 50,210, 67, 90,100, 18,125, 56,115,130,
+ 40, 51, 43,187,251,174,159, 79,245,240,123,102,252, 29,155,165,236,253,188,107, 59,247, 87,167,151, 30,127,182,181,127,204,112,
+185, 69,111,189,113, 45, 33,163, 73, 97,185, 20,113,169, 37, 21,247, 84, 12,117,229,189,173,184,191,217, 25, 41, 40, 52,176,103,
+ 50, 61,152,238,244,228,217,122, 53, 69, 25, 45, 60,174, 37,235, 17, 20,218, 26, 62,190,126, 48,247,127, 41,232,226,137,159,246,
+171,124, 35,150,148,101,223,126,223, 81,157,237,191,156,195,130, 37,171, 18, 65,112, 27, 0, 64, 17, 49,227,157,105, 33,159,175,
+ 88,243,183,178, 41,175, 79, 13,169, 79,124,149, 16, 66, 88,165,119,216,247,189, 6,141,121,161, 69,187,103,145,152,116, 15,137,
+183, 46,161,103,175, 62,232, 55, 96, 40,204,166,242, 87, 54,124,187, 38, 22,192, 87, 15,159,235,228, 27,209,169,121, 84,196,247,
+126,190,126, 1,148, 86, 44, 77, 70, 41,186,119,239,142, 89,111, 79,132, 65, 95,138,176,176,168,142,174,157,123,155,250,142,120,
+ 3, 60, 79, 81, 80,144, 95,118, 39, 62,174,151, 49, 55,254,130,163, 49, 26, 12, 6,171, 86,171,197,213,171, 87,145,144,144,128,
+ 91,183,110,161,160,160, 0, 46, 46, 46,245,106, 98,119,115,115,115,110,211,166,205, 75, 59,119,238,148,187,184,252,229,249,205,
+102, 51,148, 74, 37,134, 12, 25, 34,238,212,169, 83,131,177, 99,199,190,234,230,230,182,189,168,168,168,164, 58,157,130,235,191,
+100,249, 52, 31,178,182,255, 11,147,166, 0,128, 68,166, 78, 94,253,221,158, 91,181, 93, 91, 34,119, 14,236, 53,100, 92, 19, 80,
+ 10, 66,200,234,252,248, 61,213,254,144, 6, 0,139,197,162,248,241,199, 31, 27, 16, 66,254,246,253, 58,255,139, 31, 59,220, 72,
+204,238,245,205,199,239,137,156, 84, 50,228,235,204,120,109,202, 52, 79, 71,235,239,213,124,240,212,182,173, 91,127,245,225,204,
+137, 80, 41, 21, 56,122,254, 30,222,158,179,196, 86,152,159,183, 21,132,172,212,222,218,251,164,173, 22, 79,101,196, 91, 72, 3,
+ 53,156,250,196,200, 39,190,216, 77,110,182,114, 40,210, 91, 97,178,112,224, 41,133,174,204,138,184,212, 82,120,186, 72,176,254,
+105, 92,236, 63,156,122, 25, 44,145, 88, 58,224,205, 49,253,165,203,183, 95,192,185,163,219,141, 89, 87,118, 41, 43,159, 11,104,
+ 51, 50, 57,253,210, 15,193, 85,143,119,100,132,129,194, 47, 50, 64, 68,216, 21, 29, 58,119,232, 61,233,181, 41,180, 69, 88,160,
+ 4, 96,112, 59,241,190,117,227,134,245, 99, 92, 2,154,175, 42,201,184,249, 65,229,151,105,125, 71, 45,240, 60,159,241,112,198,
+138,231,249,135, 23,153,126, 68,147, 16,192, 85, 37,198,218,131,201,246, 95,198,160,112, 81,138,177,227,247, 12,148, 20,102,230,
+183, 48,174,248,115,124,127,175, 65, 11, 55,196,237,255,250,231,220,203, 0,110, 81, 74,115,107,210, 36, 12, 32, 98, 9, 92, 84,
+ 18,184, 40,197,112, 81,139,193, 16, 82,229,122,127, 55, 87, 31,126,123,125, 51,128, 59, 85,205, 85, 85, 77,149,119, 88, 51,103,
+ 77,208,190,231, 39, 47,118,187,145,102, 1,195, 0,193, 62, 42,184,169,165, 48, 91,129, 20,173,165,162,174,206,152, 58,227, 99,
+205,236,119, 38,255, 74, 72,183, 22,148,158,252,219, 23,205,195,113, 26, 12, 6,233,232,209,163,197, 86,171,213, 50,246,173,133,
+189,179,115,243, 7,175, 90,252,174,204,211,211, 3,101,229, 54, 92,189,157, 18,177,228,179, 47,131, 15,157,188,184,119,246,228,
+193, 7,250,246,237,235,242,227,143, 63,242,181,105, 62,140, 54, 55,255,203, 77,219,118,111, 93,185,124, 9,226, 83, 10,177,241,
+219,175, 65, 57,219,218,218,206,121, 88,115,221,186,117, 94, 49, 49, 49,204,249,243,231, 11, 30, 54,160,132, 64, 85,168, 51,193,
+ 85, 37,129, 82, 38,130,143,171, 12, 30, 78, 18,200, 36, 12, 24,230,175, 15,145,170,154, 27,118, 31, 92,200, 27,138,113,224, 7,
+203,200,141, 95, 46,194,184, 55,230,226,102,190,228, 48,163,116, 93,248,198,136,193,239,185, 43,209,175,129, 43,227,213, 51, 58,
+ 8, 42,185, 4,115,222, 28,141,182,151, 83,188, 50,138,249,185,133, 6,180, 4,240, 65,117,113, 50, 44,129,136,101,224,164, 16,
+227,228,193, 29,121,134, 82,157,142,176,246, 12,139,213,108, 73,173,173,206, 53,213, 29, 0, 84,222, 97,179,163, 91,181, 88, 52,
+101,210,120,166, 99,204, 51,148, 97, 68,200, 47,177, 16, 10,138,233,111, 76,198,212,201, 19,125, 50, 50,115, 63,250,234,235,117,
+ 31,168,189, 34, 22,232,243,110,127, 92,155, 38, 75, 24, 48, 12,129, 74, 33,134, 90,254,215, 86,110,230, 65, 8, 88,255,232,145,
+ 58, 16,128, 16,146,149, 30,187,163,218,102,175,135, 53,253,154,247, 59,126, 42, 79, 18,110,248,181,252,220,221,196, 43, 11, 47,
+ 94, 79,187, 72, 41, 45,108,216,245,157, 87,173, 86, 10,125,185, 13,247,115, 13,176,153, 41, 25,215, 55, 16,141, 94, 32, 97,139,
+ 55, 94,217, 74, 8,113,174,204,184, 60,172,153,113,110, 87,185,103,243, 97, 35, 86,126,177, 46,118,249,162,185,108, 65,137, 25,
+ 28, 5, 20, 82, 22,242,138, 77, 33, 97, 81, 94,166,195, 87,107,191,203,177,129, 12,163, 39,107,127,207, 63, 2, 79, 95, 30,214,
+191,203, 15, 4,144, 18, 70,146,225, 23, 24, 20,216, 99,192, 24,121,207,129,175,128,179, 89,102,171,188,195,127, 47,203,141, 63,
+238,136,102, 84,100, 4, 64,112, 59,239,198,190, 97, 0,224,213,124,200,158,240,176,240,144,135,203,154, 54, 13,125,196, 96,213,
+164, 73, 8, 97, 20,154,144, 73, 77,195,155,207,154,242,225,186,160,172, 2, 19,220, 26, 52,197,213, 43,151,113,100,215, 87, 87,
+140,165, 69,203,143,252,178,119,214,130,165,171, 90, 14, 24,242, 34,246,239,219, 57,131, 16,242, 53,181,243, 64,147,242,252,203,
+155,215,175, 11, 16, 75,100,176,114, 20, 86, 27, 15, 43,199,195,106,163,200,206,206, 66,169, 94, 15,185,194, 9, 42,103,119, 88,
+109,246, 76,161,201,100, 85, 77,126,101,192, 84, 0, 23,170,139,179, 81,187,209,151,192, 16,127,123,185,189, 76,194,184, 25,124,
+125,125,183, 2,128, 76, 38,131, 76, 38,131,205,102,195,141, 44, 76,247,107,251,242, 28,208,138,111,118,158,207,200,190,178,163,
+ 77, 77,117, 15, 8, 8, 24, 88,157,185,210,235,245,248, 51,246,186,203,166, 31,143,246, 77, 73,207,105,204,115, 94, 38,133, 79,
+203, 62, 0, 6,214,116, 63,115,110,236,155,218,176,219,116,102,198,148,209, 77, 87,127,183,251, 98,226,225, 5,181,166,147,131,
+123,205, 54,207,154, 58,170,205,167,171, 55, 38,102,156, 90,245,118, 93,175,145, 68, 34, 17,107,181,218,212,202,253,249,107,126,
+234,151,150, 91,210,235,179, 69,115, 37, 87,239,233,113,253,126, 54,198, 60, 27, 88,237,181,170,211,244,109, 54, 52, 44, 48, 40,
+ 96,213,170, 5,111, 33, 33,203,136, 53, 63, 93,196,169,131, 91, 47, 91,202, 75,159,203,187,117,160,206,236,129,131,223,155,245,
+ 50, 88,213,105, 86,126, 17,252,126, 61, 31,165, 70,187,177,178,114, 60, 74,141, 54,228, 21,155,160, 43,179, 66, 95,110,197,152,
+ 94,129,245,185, 84, 37,109, 1,104, 0,104, 1,196, 62,180,143,138,199,168,102, 63, 31,246,140,161, 7,236,153,216, 7, 25,218,
+ 42,251, 53,149, 87,158, 31, 7, 32,162, 66,147, 3,112, 17, 64, 81, 93, 1,139, 8, 33,148,210,191,150, 84,126,120,191, 42,156,
+205,234,239,231,235, 11,158,102, 84,196,107, 39,168,221, 72,195,219,147,134, 43,252, 90,189, 80,150,117,117,183,195,125,178,156,
+188, 66, 59, 40, 20,202,131, 75,150, 46,163, 35, 6,118,149,230,232,172,198,184,204,114,173,222, 68,109, 62,154, 38,178,165,159,
+126,170, 94,188,116,249,235,123,247,240,197, 0, 62,171, 78,195,175,237,168, 75,132, 48,254, 15,146, 65, 4,160, 60,205,200,136,
+221,222, 6, 0,158,164,175, 85, 89,185, 13, 44, 75, 32,174,232,147, 98, 48,115, 48, 20,231, 20,180, 48,172,250,115,124, 95,187,
+185,186,144,233,115,143,101,181, 22, 74,105,173, 77, 16, 12, 33, 40, 49, 88,225,172, 16,195, 69, 37,129,171, 82,242, 32,131, 85,
+131,185,186, 85,155,166,196, 98, 73,231,172,166,114,202,113,232,223, 86, 3, 47, 23, 41,124,221,100,144, 75, 69,176,114,128,209,
+204,195,104,230,144,154,103, 64,169, 65,134,230, 93, 71, 54,245,244,189, 96,240, 12,106,187, 57, 63, 37,246,181,218, 98,229, 56,
+ 14,223,239, 62,210, 52, 51, 59,111,240,254,109, 43,100,121, 58, 43,174,167,232,145, 87,100, 6, 37, 46,152,243,193, 7,178, 15,
+ 63,156, 55,116,231,190,227,247, 59,180, 9,117,188,233,165,242,190,230,197,111,107,209,241,185, 47,159, 27, 56,196, 41,238,226,
+ 33, 36, 94, 61,254,161, 62,183,126,253,175, 2, 3, 3,185,175,190,250,202,117,237,218,181, 77,189,188,188,210,243,242,242,146,
+ 1,123,115, 84,163,200,152,172,223, 78,156,246,232,218,177,139, 40, 61,191, 28,158, 78, 18, 4,122, 43,113,249,236,239,102,134,
+144,195,213,233, 85, 52, 3,142,242,239, 53, 11, 7,206, 38,247,189, 85, 32, 59, 57, 97,226,184,148,223, 14, 94, 44,248, 98,219,
+241,101, 13,212,214,107,114, 62,111,205,229, 54, 77,125,102, 79, 27,141, 37, 95,108,195,169,203,241,121,101,140,223,162,108,147,
+237,183,121, 35,171,111,237, 96, 25, 64, 44, 34,112, 82,136, 97, 40,211,233,110, 30,251, 58,180,190,247,171, 6, 94, 61,178,111,
+ 27, 83, 88,106, 69, 70,190,145,100, 21,148,194,198,243,112, 85, 73, 97,227,129,226,194,124,242,253,247,219, 16, 27,123,142, 1,
+203, 76, 0,240,113,109, 98,164,162, 95,160, 90, 46,130, 90, 97,207, 2,169, 21, 34, 88,108, 60, 66,130, 3,176,106,254,155,206,
+ 26, 47,111,244, 30, 86,235, 91,231,111, 40, 84,110, 45,183,124,179, 0, 39,207, 93,235,246,251,221, 29,109,189,162, 90,126,225,
+ 31, 57,124, 57,227,238,103, 52, 89, 57,148,232,138, 80,110, 74,199, 51, 13,242,225,174,226,144, 82,226,139,155, 57,137,234,186,
+154,179,242,111,236,185,170,137, 26,250,193,174,159, 79, 44,233,243,108, 55,220,186, 95, 98, 55, 87, 18,187,185, 18, 17, 30, 43,
+214,174,179, 22,233, 74, 7,228,223,220, 87,239,101,173,202,242,226,143,193,254, 97, 12, 0, 80,123, 55,214,124,191,230,131, 45,
+ 19,103, 45,235,211,103,232,171,228,102,236,239,239, 3, 56, 94,179,194, 95,112,213,228, 88, 57,254,209,234, 85, 87, 86, 29,132,
+ 16,198,171, 73,155,237,155, 54,239, 24, 17, 25, 18,128,220, 98, 43,178,138, 44,248,227,242, 93,236, 93,247,126,113,113,238,189,
+151, 97,209,235,121, 98,211, 29, 61,242,243,225,215,223,156,133,102,205, 90, 6,149,100,148, 56, 3,248, 91,223, 67,158, 37,235,
+ 94, 25, 63,121,132,183,151,183, 19, 95,145,193,226, 41, 69, 88, 88, 36,250, 15, 28,134,147,167,207, 34,238,214,117,123, 57, 15,
+ 80, 74, 81, 92, 84,144, 99,179,154, 55,215, 24, 31, 75,252, 55,173, 93,225,197, 16,192, 98,227, 97,182,242,152, 61,231, 67,243,
+ 91, 31,173,233,212,167, 99,139, 91, 44,248,146,180,236, 98,215,216, 59,217,205,137,216,217,247,165, 73,239, 73,140, 22, 14, 37,
+ 6, 43,142,239, 90, 93, 99,189,253, 26,183,140,105, 20,209,105,252,164,185,107,101, 50,150,177, 52, 11, 13, 72,238,218,190, 89,
+122, 67, 63,207,210,197,171,191,127,230,236,229, 59,253,135, 61, 63, 84, 62,162,113, 36,241,243,144, 59, 77,158, 58,173,133, 79,
+ 72,167, 87,114, 18,207,108,173, 73, 83, 36,146, 21, 7,248, 7, 60,104, 74,244,138, 26,114, 29, 64,224, 67,135,165,230,221,220,
+215, 2, 0,188,188,125,202,137, 88, 86,107,151,128,170, 84,190,143, 63,249, 98,119,255, 12,173,254,133,207, 22,205,149, 92, 77,
+ 46,195,213,123, 58, 72, 37, 44, 76, 22,199,187,181,113,132, 78,127,111,218, 56,113, 97,153, 13,191, 95,215,226,230,165, 19,212,
+102, 41, 25, 67,137,104,172, 38,106,200, 43, 4,104, 68,129,251, 12,193,183,102, 6,155,139,175,237,171,117, 48, 79, 77, 33, 3,
+128, 87,228,176, 14,132, 69,127, 86, 36,105, 11,240,225, 54,171,213,139, 97,217,252,156,107,187, 29, 30, 65, 73, 41,133, 33, 47,
+ 17,203, 22,127,132, 85,235,247,226, 98, 66, 33, 92,108,233,216,191,113, 17,102, 44,249, 30, 6,115,245,189, 23,234,240, 35, 26,
+ 66,200, 47,148,210, 1, 0,122, 1,144, 86,217, 7, 33,228,151,138,107,255,109,127,246,236,217,239, 47, 89,178,228, 86,229,177,
+149,229,149,199,214, 86, 94,229,124,143, 57,115,230, 68, 45, 93,186,116,113, 76, 76,204, 15,103,207,158, 77,134, 35, 6,171,106,
+ 37, 8, 33, 53,254,151,123, 55, 31,252, 12,192,176, 62, 30,106, 52, 13, 14,128,106,248, 88,133,127,244,136, 50,150,101,152,205,
+171,222,151, 23, 24, 69, 16,177,108, 89, 93, 23,172, 68,225, 29,222,206,201,201,233,215, 31,119,254, 68, 67,130,124,164, 63,157,
+ 47, 78,187,156,108,120,144,210, 45,209,166, 74,155,186,155,216, 17, 47, 14, 83, 29, 62,250,219,116,212, 96,176, 8, 97,252,191,
+ 88,241,169,151,147, 66, 12,134, 0, 37, 70, 27,166,191,243,158,163, 97,212, 8, 5,101,167,190, 51, 15, 12,177,127,249,232,117,
+133, 88,180,114,147,126,152,255,137, 51,227,251,122, 14, 90,184, 33,110,255,209,219,138,187, 67,135,246,208,165,164,164,212,121,
+163, 9,229, 50, 94,120,245, 45, 9,195,216,155,141, 8, 33, 0,184,220,199, 49, 87, 0, 80, 84,148, 92,162,240,105, 49,116,219,
+138,105,235, 27,250, 55,112,119, 82,202,161, 86,201, 72,120, 88, 19,121,251,118, 49,138,192, 38,205, 36,167,111,235,145,166, 53,
+226, 94,102,255, 91,126,158, 0, 0, 32, 0, 73, 68, 65, 84, 9,100,154, 40,241,136,110,207, 98,219,234,247,250, 59, 82,255, 19,
+231,110, 14,252,122,249, 92, 89,110,145, 5,183,211, 75,145, 83,104, 66, 78, 81, 57,114,138, 76, 80,203, 69,104,223,115,152,236,
+192,241,221, 67, 58,180, 9,253,194,161, 27,250, 16,247,146,146,247,166,102,102,143,105,209,234, 25,124,191,101, 83,123,226,239,
+ 47,167, 25, 25,229,142,158,191,126,253,250,194,214,173, 91,123,126,246,217,103,101, 97, 97, 97, 45,195,194,194,130, 19, 18, 18,
+ 78, 54,110,220,120,224, 55,171, 23,156,124,107,238,242, 64, 17,108, 46,237, 59,118,100,149, 82,130,243,167,143,154, 54,175, 95,
+155,101, 41,214,207,170, 77,151, 81,186, 46,204, 45, 37,208,248, 5,220, 84,137,173,189,197, 74, 75, 66,225,214,105,219, 0,236,
+105,210,239,205, 99,191, 95,186,147, 16,125, 57,197,235,196,229,132,188, 66,131, 53, 52,233,208, 59,181,126,224,178,164, 34,131,
+165,252, 43, 99,233,221,114,248, 93, 74,136, 6,176,191,183, 8,236, 25, 45, 2,128, 0, 89, 25,151,127,116,160, 99, 52,161, 60,
+ 15, 36,100,232, 81,106,180,161,220,106, 67,128,167, 10,218,220, 12,124,243,197,102, 92,185, 20,139,222,253, 6,225,171,239,190,
+199,196, 87,134,215,121, 95, 25,134,128, 97, 72, 69,230,202,110,174,212,114, 17, 64,128,226, 50, 43,246,156, 73, 71,147, 96, 6,
+164, 30,173,133, 78,106, 5,116,165,229, 96,196,106,196,255,177, 85,121,232,196,197, 57, 31, 47,223,240,110,137, 62, 55, 45, 41,
+238, 28,194,220, 10, 16,236,103,198,173, 92, 23, 92, 42, 12, 66, 88,147,198, 96, 36,177, 14,105,231,223,106,190,236, 0,243,211,
+128,182,173, 34, 99, 26,122,185,192,104,230, 42,178, 88, 34,108,222,180, 9, 41,247, 51,198,231,223,218,119,197,241,104,107, 70,
+159,123, 79, 43,247, 14,121,253,198,249,227,201, 67, 94,158, 10,159, 6, 13, 91, 58,122,174,163,102,138,119,192, 96, 17, 66, 24,
+247,160, 86, 91,182,108,219, 53, 34,184,161, 15,126,187,120, 31, 87,146,138,224,236,228, 10, 86,229,139,208,174, 99, 93,111, 28,
+ 94,253,188, 49, 95,191, 69, 44, 81, 78,120,166,125, 71, 80, 74,113, 39,254, 86,161, 78,231,242,200,103,179, 33, 43,254, 42, 0,
+231,170,101, 74, 77, 68, 75, 39, 23,247,171,229, 22, 14,153,153, 25,248,243,236,201,214, 21,199, 57,140, 76,194,224,232,229, 60,
+ 88,108, 60, 44, 86, 30,173,155,135,151,139, 37,138,206,159,174, 63,216, 62, 39, 55,143, 81,170, 93,120, 23,207,198, 18, 87,107,
+142,233, 90,178, 78, 98,177,241,104,236, 91,251,239,114,165,123,227,197,111,191,243, 86,132, 72,170, 64, 73,153,201,156,157,145,
+233,243,237,142,223,245,183,239,196, 53,104, 20,212,208,121,193,130,143, 37, 37,229, 20,121,197, 38,228,151, 90,200,139,163,198,
+251,109,221,248,213,203, 0,106, 52, 88,213,208,252,135,173,107,173,238,106, 9, 41, 53, 88,169,182,164,156,155,250,250,244,230,
+245,169,251,195,252,205, 92,221, 43,195,213,228, 98,200, 36, 44,100, 18, 22, 86,155, 99, 93, 36, 53,145,195, 85, 26,141,235,203,
+237, 90, 53,197,145,203, 90,136, 88, 2, 99, 89,137, 89, 46, 83,223, 12, 15, 15, 97, 90,181,140, 66,183, 78, 29,144,148,156, 18,
+118,228,183, 19, 43, 47,198, 94, 89,164,137, 26, 58, 75,123,115,239, 35,205,194,181,145,154,169, 85,229,218, 2, 70,122,249,120,
+ 70, 13, 26, 52, 80,214,176,129, 55,241,244,112, 5, 7, 9,166, 76,125,195,203, 81, 29,158, 82, 80, 0, 75,231,207,129,201,108,
+134,151,171, 20,148, 2, 27,215,124, 2,179,217, 12, 63, 15, 57,116,101,214, 26,207,175,203,143, 84,103,136, 30, 54, 90,149,143,
+ 43,143, 91,178,100,201,128,170, 26,149,207, 63,204,195,229, 85,207, 95,186,116,233,226, 42,207,215,216,199,175, 42,162, 10, 17,
+ 82, 91,165, 52, 45,134,118, 84,200, 84, 71,191, 90, 50,157, 41, 46,179, 64, 38, 97,208, 56,184, 17,166,189,249,150,178,103, 43,
+ 47, 24,225,140,159,118,108, 46,177,113,214, 95, 30,189,196,163, 40,125, 66,218,168,149, 78,135, 55,110,217,193,251,120,121,146,
+111,143,105,147,181, 37,182, 7, 83, 28, 36, 92, 56,192, 95, 58,242,173, 47, 5, 57,172,148, 43,154,154,204, 38,183,154,180, 24,
+216, 95,208,141, 71, 83,192, 50, 12,216,167, 52,179, 23,195, 48,220,119, 95, 44,128,167,179,189,207,213, 39,171,182,149, 14,212,
+ 28, 62, 81,213, 92,181,106,213, 74,215,178,101,203, 98,230,225,206, 84,213,144,118,241,251, 71, 70, 75, 60,174,185,170,196,152,
+115, 61, 22, 15,205,196, 79, 72,180,216,179,209,174, 25, 35, 95,122,121,142,119,179,129, 78,247,179,117,144, 50, 86,180,141,240,
+197,201, 35,123,248,244,228,219,147, 29,209,206, 43,208, 5,120,122,120,224,202, 61, 61,178, 10,202,145, 93,104, 55, 87, 57,133,
+229, 40, 49,218,208,170,145, 23,138,117,250, 0, 71,180,170,131, 18,186,239,200,225, 35, 99,250, 13, 30,129,105,239,126,220,111,
+253,215,159, 95, 87,120, 71,188, 98,204,189,125,209,145,243,119,237,218,197, 5, 5, 5, 37,231,231,231,183,157, 53,107, 86,105,
+163, 70,141,124, 22, 44, 88, 48,169,113,227,198,126, 61,187,119,215,197,254,222,126,203, 91,239,126,220,253,253,183,214, 7, 51,
+ 12,147, 75,121,122, 32,171,204, 58,143,106,227,170, 29, 41, 84, 73,218,254, 57,241, 36,242,147, 49, 61, 59,123, 28,240, 80, 48,
+145, 98, 98, 26, 69, 34, 63,217, 73,227,230, 89,146, 14,125, 81,218,252,197, 21,211, 50,139,249,185,229,140,207,162,186,204, 21,
+ 96,207, 10,153, 45, 60,156, 21,226,202,145,163, 0,133,239,215,107, 62, 87,106, 92,100, 16,177, 4, 98,150,129,206, 96, 69, 65,
+137, 25,239,206,170,213,255, 85,129,242, 28,207,195, 96,226, 96, 52,219, 64, 64, 80, 90,146,143, 57,239,190,141,126, 3,135, 97,
+252,228,119, 80,108, 4, 46, 37,151,194, 98,181,214,105,139, 88, 2, 24, 76, 54,140,239, 19,136,130, 82, 11,202,202,109, 48, 91,
+120, 40,229, 34,136, 68, 12, 84, 50, 17,156, 20, 98, 16, 66, 37,190,190,190,147, 0, 64, 44, 22,151,167,165,165,109,171, 73,147,
+231, 41,130, 2,188, 97,180, 48,120,102,196,114,244,138, 9,197,213,223, 54,136, 78, 95,184, 17,252,238,199, 43, 49,117, 84, 12,
+118,223,105, 2,119,175, 32,168,149,114, 88, 41, 3,192,177, 41, 64, 40,157,199,251,134, 15, 27,181,246,187,141,119,230,127,248,
+158,188,168,140, 64, 38, 17,225,196,137, 99, 56,119,225,210,106,237,173,125, 53,198,245, 56,136, 41,227,237,236,226, 12,185,148,
+133,197, 98,114,184,195, 55,199, 83,128, 34,194,171,249, 16,123, 31, 69,138, 8,190,154,178,186, 50, 88,132, 16,226,226, 23,181,
+105,237,250,239, 95,246,245,241,194,222,227,215,177,101,253,151,104, 16,213, 15,119, 47,175, 69, 64,244, 16,168,131,123, 64,234,
+180,107, 18,195,138,154, 79,125,107,206,176,232, 54, 49, 56,251,199,239,200,203,201, 94, 75,105,188, 67,125,208, 88, 49,121,179,
+123,175, 1, 48, 89, 56,116,238, 49, 0,135,127,222, 59, 13, 21,131, 39, 30, 23,150,101,248, 55, 38,142, 20,231, 21,155,197,121,
+ 58, 19, 50,243,141, 72,206, 41,195,254, 31, 55, 56,220, 36, 69, 88,166,109,215,150,254,226, 73,203, 78,164, 7,248,251,154,196,
+ 38,163, 34, 33, 41, 41,124,194,152,151,197,141,154,134, 49,218, 98, 19,180, 58, 51,180, 58, 51,202,202,173,104,226,215,144, 49,
+217, 68, 49,245,141,213,203, 69, 46,254,234,151,100, 56, 43, 69,232, 16,225,241,216,157,176,121,158,255,203, 92, 45,180,103,174,
+174, 37,235, 32,151,176,144,138, 89,200, 36, 12,172,156, 99,213,103, 24,219,200,215,198,188,168, 48, 91, 41,242, 75,204, 96, 25,
+ 2, 31, 79, 15, 89,128,111, 40, 54, 46,127, 3, 0, 48,241,189,175, 49, 97,220,104,132,133, 54,133, 78, 87,170,152, 48,229,173,
+ 21,168,166,223, 93,117, 80, 74,233,247,251, 79, 71, 94,186,153, 58,227,213, 49,175,136, 71, 12,234,194, 92,185, 87,130,236, 66,
+ 19,238,221, 53,192,108,173,223,108, 52, 54,206,222,230,187,105,231, 47, 80, 74, 88,104,117,246,127,151,133,107,118, 66,173, 16,
+ 33,167,200, 12,158,175, 57,123, 87,151, 31,169, 41,235, 84, 31,170,154,176,218,202, 9, 33,191,204,158, 61,251,125, 0,116,246,
+236,217,239, 87,238, 47, 89,178,196, 8, 32,171,174,235, 60,232,131, 85, 83,179,160,166,197,208,142, 10,169,252,232,214, 53,239,
+ 43,142, 39, 80,172, 62,122, 25,253,219,251, 66, 34, 34,144,171,125,112, 53,185, 24,199,143,239, 47,253,227,220,133,114,194, 88,
+235, 28, 22,165,244, 13,107,173,148, 59, 29,251,114,221, 22,155,183,143, 15,118,156, 41,202, 42,208,219, 30,216, 89,142,179,146,
+ 75, 71,190, 13,182,241,214,190,198,156,196, 58,127,206,242,148, 74,150,124,115, 0,148, 82,128,231,192,131, 7, 43,145,169, 2,
+219,141,206, 5, 1, 56,142,151,139, 88,166,188,226,110,217,235,202,115, 25,169, 23,182,215,218,116, 72, 0, 56, 43,197,248,241,
+ 84, 6,116,133, 89,249, 3, 53,135,255,172, 52, 87,135,111,201,238, 70, 71,183,210,181,107,215,174, 88, 38,147,129,101,217,186,
+194,124, 84,255, 9,205, 85, 77, 80,122,217, 10, 96,169, 95,120,151, 65,253, 84, 81,237,164, 68,140,232,112, 95,156, 60,186,151,
+ 63,119,104,195, 80, 67,110,194, 65,199,116,236,125,100,178, 10,141,200,204, 55, 34,187,168, 34,131, 85,104, 2, 33, 64,185,249,
+201,166,175, 49,228, 38,252,172,110,208,108,173,201,138,201,157,123, 15,193,140,143,191,108,186,109,237,178, 63, 84, 94, 33,109,
+203,242, 18,111, 56,162,145,146,146, 98,242,246,246,190, 82, 90, 90,250,236,138, 21, 43,244, 17, 17, 17, 82,133, 66, 81, 0, 64,
+158,120,231,142,228,196,175,187,238,107,179,178, 94,179, 88, 44,142,165, 69, 0, 4,117, 27, 43, 11,119, 46,156, 20,168,236,208,
+167,177,143, 18,129,202,178, 62,225,234,107,159,121,245,156,190, 56,239,248,170,188,108,147,237,183, 66, 3, 90,102,234,197,199,
+ 28,209,179, 89,204,169, 47,189, 54, 27, 44, 67, 96, 49,153, 83, 43,203, 53, 46, 50,124,188,237, 54,156, 20, 98,168, 21, 98, 56,
+ 41, 68,232, 24,225,129,122, 36,136,168,213, 70, 97, 52,219, 96, 52,113, 48,154,108,240,108,232,138,239,182,238, 70,154,214,136,
+ 3,177,249,136, 79, 41, 65,104,128, 10,148,214,157,119,226, 41, 87,246,226,164,185, 78, 44,195,128, 37, 96,194,155, 6,161, 80,
+111,134, 68,196, 64, 42,149, 66, 41, 23,193, 89, 41,134, 88, 36,198,197,235,215, 97, 50,153,208,174, 93,187,106, 71, 74,253, 21,
+161, 61,139, 21, 18,236, 7,139,213,134, 95, 79,199, 97,225,244,161,120,182, 75, 27,188,203, 74, 17,111,106, 5, 39,119, 39,240,
+132,133,197,198,195,100,229, 0,144, 26, 13, 48, 33,164, 3,236,253, 34,202, 41,165,231,179,227,247,164,121, 53, 27, 50,233,208,
+209, 19,219, 6,246,239,141, 43,215,110,225,167,189, 7,254,200,247,208,205,172,114, 78,115, 84,140,130,163,148,214,218,145,185,
+150,235, 18,149,119,248,244,152,142,221,160, 47,202, 67,110,250,125,135, 63,212, 35, 27, 58,225,237,233,211, 66,194,194,194, 66,
+ 56,158,130,231, 41, 34, 3,157,240,218,148, 41, 33, 77,154,134,134,240, 21,163, 8,195, 3,156,106,213, 81,121,135, 77, 93,180,
+226,155, 87, 2, 2, 2,112,248,204,109, 44,153, 59,249,138, 82,169,110,212,198,221,201,149, 15,107,137,228,155,191,193, 61,168,
+ 24,206,222, 33,254,131,158, 29,227,223,239,185, 33,184,113,237, 50, 86,125,182,224, 92, 25,171, 88,236, 72,172,106,239,198,154,
+ 86,109,187,188,228,236,238,141, 34,157, 30,106, 55, 47, 68,180,104,243,146,218,187,241,123,250,220,123,143, 53, 37, 11, 96,255,
+ 1,108,178,240, 40,212, 91,144,161, 53,226,126,174, 1,247,115, 12,224,249,191,154,130,235,122,135, 18, 16,162,146,137, 68,238,
+214,187, 13,175, 31, 59, 65, 3, 3,188,201,178, 5,179, 88, 11,149, 33, 79,103,134,182,196, 12,173,206, 4,109,137,221, 96,185,
+169, 69,224, 41, 95,239,209, 25,133,122, 11,156, 20, 34,184,168, 36,224, 28, 52, 64,213,241,241,202, 29, 29, 50,180,250,158,159,
+ 45,156, 43,185,122,191, 12,215,147,117,144, 73, 24,123,246,170,194, 96, 57,218, 44,204,138,152,105,207,245,106,135,116,109, 57,
+ 68, 44, 3, 17,203,160,105,179,214,240, 84,242,232, 57, 98, 54, 0, 96, 96,127,251, 52, 36,201,217,101,248,249,124, 54, 0, 72,
+ 28,141, 53, 47,191, 68,190,247,183, 43,111,237,248,110,153,180,156, 19,227,155,131, 41, 40, 55,115,144, 73, 42,154,221,165,245,
+251,126,179,113,246, 12, 86,186,214,130, 50, 19,135, 18,131, 5,148, 2, 23,239,150,194, 96,226,160, 51, 88,208, 62,204,189, 86,
+141,154,252, 72,149,231,171,205, 64, 57, 74,197,249, 90,252,213, 79,171, 90,221,170, 25,172, 37, 75,150,220, 90,178,100, 73,181,
+ 25,177,154,168,181,147,187,166,197,208,142, 10,137,252,232,150, 47,222, 87, 28,187, 67,113,242,122, 1, 94,232,236,143,130,188,
+ 12,172,255,122, 53, 79, 41, 32,147, 75,115, 56, 27,127,168,156,183,205, 42,190,246,115,173,237,190, 42, 77,100, 11,133, 82,121,
+ 98,201,170,181, 22, 31, 95,127,126,207,249,226, 60,157,129,251, 91,174,144, 51,153, 24,202, 83,137, 35,230, 10, 0, 24,134, 88,
+ 62,158, 54, 20, 60,165,152,183,122, 39,150,204, 24, 9,181, 92,164, 36,132, 40,203,202,109,152,190, 96, 3, 86,124, 48,206, 73,
+ 41, 19, 85, 24, 3, 14,147,167,189,235,136, 52,140, 38, 14,101, 69, 57, 5,205,245, 43, 31, 50, 87,209,186,182,109,219, 22,187,
+185,185, 65,165, 82,213,219, 96, 85,103,174,124,124,124,252,148, 74,165,123, 72,136,189,175, 43,203,178,224, 56,174, 44, 49, 49,
+241,177, 38,125, 43, 41,206,223,151,117,255,102,187,142,221,158,195,169,163,251,248,115,191,174, 31, 90,159, 33,230,174, 46,206,
+233,151,227, 82, 35, 0, 53, 50, 11,202,145, 83, 84,142,236, 66, 19, 44, 54, 30,129,222, 74,100,164,167,193,213, 69, 93,231,232,
+180, 74,148, 62, 33,125, 25,202,190,198, 19,124,103,200,137,255, 21, 0,244,153,183,166, 40,189, 66,111,220,186,117,109,213,128,
+145,211,164,207, 62, 63, 69,178,110,233,235,179, 1,140,116, 84, 55, 55, 55,215,224,229,229,117,206,207,207,111,192,188,121,243,
+ 76, 0,164, 38,147, 73, 57,110,220, 56,101,106,106,234,219,148, 82,135, 98,236, 60,110,147, 39,145,211,190,141,195,162, 71, 5,
+ 42,203,122,247,232, 18,131, 14, 81, 1,200,232, 18, 3, 0,111,166, 26,212,161,157, 38,175,255, 49, 88,227,118,232,155,205,191,
+ 46,153, 56,162,199,219,126, 3, 63, 89,145,245,243,188, 90, 51, 98,119, 78,111,120,116, 2, 38, 2,136, 43, 58,190, 87, 53, 88,
+ 54,142,214,167, 9,142, 90, 57, 30, 6,147, 13, 6,147, 13,250,114, 43,142, 95,205, 67,110,177, 25, 69,101, 22,148,155, 56, 80,
+ 0, 22, 43,173,156, 85,164, 86, 82,206,110,118,173,124,236, 31, 61, 82,183,122,254, 52,231,159,206,100, 64, 37,179,247,199,114,
+ 81, 73,225,172, 20, 3,160, 56,121,242, 36, 42,135,199,215, 6,207,243,248,233,240, 69,172,216,124, 2,135, 55,204,130, 92,202,
+162,229,144,249, 24, 51,164, 29,120,158, 34,233,206,205,220,144,136, 86,222,140, 90, 9,134, 65,101,159,148,218,238,167, 7,165,
+244, 0, 33,100, 0, 33,228, 57,216,251,140, 20,237,227, 10,202, 78, 28,220,161, 42, 51,154,108, 69,169,183,191, 68, 89,126, 87,
+123, 19, 60,120,216,127,160,159, 36,132,116,169, 51,224,106, 32,132, 48, 10,175,208,213, 19,166, 76,127,161, 73,147,198,216,185,
+125, 35, 40, 37, 63, 57,122,254,182,159,207, 97,229,170,191,143, 24,124,109,202,148,144,117,223,124,243,183,178, 87,198, 77,170,
+113, 20, 33, 33,132,248, 71,245,152, 21, 22, 30,137,243,183, 50,176,236,195,169, 87,202,243,146, 71,153,213, 30,175, 89,202,178,
+223,137,140,106, 5, 31,111, 15,228,100,231,162,251,224,103,209,175, 79, 31,220,184,118, 25, 11, 63,122,247, 28, 12,230,222,117,
+101,109, 43,225,169,120,114,183, 62, 67,196, 6,147, 5,107,150,125,132,215,102, 46, 66,251,238, 3,197, 55,175, 94,152, 12, 96,
+190,163,117, 54, 91,121,116,111,161,129,217,202,193, 98,229,113, 32,153,125,228,123,134, 16, 64,196, 50, 76,171,198,246,230,221,
+ 18, 99,205, 77, 70, 0,192,136, 72, 78, 81, 73,105,208,151,139,222, 98,203, 76, 28,180, 58, 19,242,138,205,208,150,152,144,175,
+ 51,217,205,149,206,140,124,157, 9, 34,150, 32, 49, 57, 19, 44, 75,234,221,255,174,184,204,130,103, 66,221, 0, 16, 48,143,217,
+ 28,146,111,211,244,187,150,144,209,115,217,130,185,146,171,201,122, 92,191, 95, 82, 97,172, 24, 72,171, 24,172, 90,146, 56, 15,
+240,138, 28,212,225,149,145,131,155, 57,171,228,200,188, 83, 10, 17, 67, 32, 98, 9,156, 53, 1,112,145,151, 99,218,212,215,224,
+225,238,130,180,252,114,172,222,155,128,235,113,119,193, 27,235, 87,237,175,191, 63, 60,244,149,151, 71,200, 24,177, 28,219,142,
+ 38, 67, 42, 97, 33,130, 25,113, 23, 78,155,114, 51,238, 91, 74, 75,138, 85, 34,145,216, 33, 81, 2, 80, 27,199,131, 82,138,197,
+159,204,193, 15,155,191,198,225, 75,185,160,176, 79,213,240,231,158,207, 49,125,246, 66,104, 75,204, 0,106,238,146,228, 0, 7,
+ 1, 60, 87,185, 83, 53,155, 85, 67, 6,170, 58, 98,171,106, 84, 30,255,176,198,195,207, 85,232, 57,148,105, 23, 61,236, 20, 43,
+247, 53, 45,134,118,148, 75,165, 71, 55,175,158,163, 56,158,128, 7,230,202,168,207,199,214, 13,235,244, 20,124,175,220,155,251,
+ 29,106,206, 1, 0,149, 87,104,148, 76,165, 58, 53,119,225,106,147,159,127,176,237,215,171, 37, 5,165,229,220, 35,105, 16,137,
+ 82,197,169, 92, 52,229,174,129,173, 87,136,141,230,143,180,218,184, 58,250,117, 17,240,148,226,231, 11, 57, 0,111,127, 17,119,
+158,206,180,207,227,195, 18,112,188,189,157,251,183, 43,121, 15,202, 28,129, 16,224,199,163, 87,242,107, 50, 87,174,174,174,112,
+117,117,133, 90,237,240, 74, 11, 21,186,213,103,174,148, 74,165,251,145, 35, 71,228,206,206,206, 96, 89, 22, 38,147, 9,207, 62,
+251,108,189,180, 43, 81,121,135,141,108,223,115,216,146, 78,221,159,195,239, 71,246,240,231,126,221, 52,204,144, 87,143,249,123,
+ 0,244,235,210,226,231,101,159,175, 9,158, 57,123,174, 76, 37, 23,161, 72,111, 1,203, 16, 4,122, 41,224,161,102,113,238,196,
+ 47,229,163,250,182,114,216,252, 5,248, 7,109,253,124,245, 90,143, 21,159,126,210,219,205, 45,216,187,168, 40,185, 4, 0, 12,
+121, 9,107,213, 62, 97,119,252, 27, 30, 61,213,178,203, 80,120, 53,104,234, 80, 31,177,170,228,229,229,229, 69, 69, 69,221,142,
+140,140,108, 51,108,216, 48,186,120,241, 98,183,140,140,140, 93,142,154, 43, 0,232,209,167,195,116,149,216, 26,227,161, 96, 34,
+ 27,251, 40,209, 33,202,222,250, 57,226,185, 78,240, 15,104,136,123, 57,134, 86, 5, 70, 94, 82,102, 21, 55,254,102,237,198,216,
+ 64,119,209, 68,155,222, 24, 7,160,218, 41, 5,106,131,160,226, 67, 82, 89, 97,174,228, 34,168, 21, 98,240,212,254,156,131, 80,
+171,141,135,217,194,195, 96,182,193, 96,226,236,102,203,204,129,231,237,157,149, 9, 33,176, 88, 57,251, 37,235, 23, 32,156,221,
+ 60, 17, 28,100,143,241,193,166, 16,131, 16, 64,163,209,192,195,163,238,121, 71,121,158,135,217, 98,255, 23, 55, 91,185, 7,131,
+ 58,204, 22, 27, 40,165, 72, 72, 72,156,149,146,156, 50,184,105, 72,147, 46,145, 45, 90,185, 43,164, 12, 0,212,214, 95,140, 16,
+ 66, 70, 1,176, 82, 74, 31, 12,138, 8,106,214,169,124,239,158,159, 84, 3, 6, 14, 44, 50,235,181,187,171, 28,204, 2,232, 91,
+ 97,198, 28, 50, 25, 85, 47,164,210,132, 14, 9, 8,239,176,104,244,216,215, 66,187,247,234,131,147,199,127,195,129, 61, 59,182,
+148,229,221,169,117,190,174,170,132,133,133, 61, 50,138,176, 73,211,208, 71, 70, 17, 6, 5,135,212,104,176, 92, 92, 90, 56,183,
+104,219, 45, 32, 53,223,130, 67,135,126, 69,153, 46,231, 67,179, 89,111,128,152,174, 63,182,231,219,241,163, 38,207,115,110,223,
+182, 13, 92,157,148,240,116, 83,227,242,165,115,248,116,254,220,115, 48,152,123,215,253,249, 89, 81,223,200, 72, 73,211,134, 65,
+111, 5, 54,110,134,203, 23,206, 32, 41,225,230,173,171,177,231,154, 53,141,106, 7,141, 95,224, 91, 36, 50,114, 41,141,139,171,
+115,165, 10,202,209,140, 87, 39,189, 99,127, 92,241,245,217,190,101,176, 20,120,248, 77, 72, 96,179, 90,184,109,235, 62,205,171,
+ 58,138,176, 38,221,242,210,226,221,127, 92,184,241,238,160, 62,157, 73,101, 83, 96,165,169,122,120,191,105, 3, 21,146,110,196,
+243,214, 50,157,195, 70,184, 34,250,220, 41, 83,223, 84,216, 99,231, 65,237, 19,171,213,235,125, 3, 0,229,156,228,165,111, 62,
+121,159, 92, 75, 41,195,141,251, 37,246,102,193, 10,131, 37,147,176,144, 86,252,117,104,106, 50,134, 89,246,202,240, 62,200,215,
+153,193, 83, 90, 49,151, 30,129, 72, 36, 70,106, 9,144, 94,162,135,182, 56, 23,201,247, 83,160,203, 73, 6,195,176,240,104,208,
+ 20,134, 58, 39,228,177, 83,202,169, 67,173, 60,154, 12, 31,208,153,221,119, 54, 27, 10,153, 8,165,249,233, 56,115,100,167,145,
+114,220, 90,179,213,252,131, 23,149,222,140,187,177,203,161, 85, 74, 8,160, 45, 41, 51,123,203, 36, 44,118,110,250, 18, 47,142,
+153, 98,127,162,162,170,239,206, 93, 0, 66, 8,138,116,122, 0,228,145,172,104, 77,126,164, 2,109,149,204,211, 35,251, 85, 76,
+ 81,117,251,164, 98,223, 92,131,134,249, 33, 83,101,126,168,220,252,144,158, 67,147, 35,215,152,193, 18, 51,236,111,155, 86,189,
+ 47,191,149, 39,195,197,248, 28,188,208,217, 31,134,146,124,172,251,106,165,190,220,106,233,167,189,225,184,185, 2, 0, 48,255,
+199,222,121,135, 69,113,173,127,252,123,182,179, 75, 47,130, 44, 69, 1, 21, 16, 80, 81,209, 24, 75,176, 36,246, 24, 73,212, 36,
+154,104,138, 37,215,154, 98,139,209, 24, 77, 52,198,154,102, 44,177,183,196, 88, 98,139,133,136, 37, 18, 11, 54, 64, 68,186,192,
+194,210, 97,217,101,219,204,156,223, 31,128, 33,132,178,139,222,252,238,205,157,207,243,240,184, 59,156,249,206, 57,187, 43,243,
+238,123,222, 34, 24, 60,246,141,247, 18, 2,218,119, 52, 70,199,107,210,203,180,230, 70,227, 24,122,190,180, 48,225,230,137,175,
+135,149,155,211,223,177, 83,134,178, 28,195,172,210, 21,220, 95,218,208, 88,142,163,210, 37, 27,126,168, 54,174, 56, 14,243, 62,
+223, 5,202,177, 53, 5,252, 88, 80,150,195,244,143,190, 5, 83,243,152,229, 88, 16, 51,171,104, 72,171, 46,118, 54,146, 51,157,
+ 42,215, 57,214, 55,174,186,118,237, 90,230,228,228, 4, 87, 87, 87, 56, 59, 59,163,214, 32,178,132,166,182, 5, 59,116,232, 0,
+ 59, 59, 59,196,196,196,192,206,206, 14,182,182, 45, 43,144,111,231, 17, 60,182,231,128,209,123,250,143,124, 67,112,238,240, 38,
+246,106,204,241,151,170, 10,146, 44, 54, 2, 88,150, 37,102,179, 25,131, 35,187,101,221,186,255,240,151,101, 75,151, 14,137, 24,
+240,162,236,233, 32,119, 84, 25, 25,228,100,103, 35,246,252,207,250,246,190,110,191, 60,221, 61, 48,199,108, 54,131,101, 27, 47,
+186, 87,139,193, 96, 44, 22,136,109, 92,199,189,252,170,236,250,181,107,123,108, 61,130,246, 9,132,220,109,202, 10, 59, 3,116,
+108,231, 78, 29, 97, 98, 56, 84,233, 42, 74, 90,178,238,132,132,132,235,107,214,172, 9, 18,139,197,222, 7, 15, 30, 44, 42, 45,
+ 45,181,170, 93,208,217, 19,215, 54,136,236,204, 15, 36, 84,255, 74, 27,133,246,185,236,190,189,240,242,136, 62,216,127,226, 50,
+206, 95,140, 69,150,206,238,150,214, 40, 60,146,147,163, 50,132, 56,151, 31,122,161,183,159,240,167, 93, 21, 63,185,247,159, 55,
+134, 82,249,217,194,152, 37, 22, 39,120, 16, 2, 84, 84,153,235,120,176,170,227,155, 4, 2, 98,177, 7,139, 0,233, 23,175,196,
+133,117, 11,236,136, 91,105, 21, 40, 44, 53, 64,103,172,254,220, 83, 80,184, 58, 72, 32,147, 8,145,149,145, 14,142,154, 50,172,
+121, 45, 64, 81, 56,244,165, 41,213, 9, 48,224, 68, 98,177, 8, 20, 53,197,117,109,164,149,238,238,238, 22, 25, 88,102,150, 69,
+212,224,158,120, 42,162, 51, 70, 77, 93, 3, 0,136,222, 57, 15,206,118, 18, 28, 60,120, 16, 15, 47,175,219, 29,240,244,180, 51,
+241,119, 19, 95, 76,184,121,229,213,161,221,228,225,173, 69,121,141,110,109, 80, 74,143, 18, 66,164, 0,250, 19, 66,158, 5, 16,
+ 67, 41, 53,179, 12,247,112,200,144,193, 28,203,114,143, 98, 34, 8, 33,206, 0,122, 1, 40, 1, 16, 71, 41,109,210, 69, 98,235,
+ 30, 60, 8, 2,236, 3, 33, 54,118,114, 69, 86,175, 65, 47, 43, 35,158,234,233,248, 66,212, 24, 72, 37, 82,156, 59,123, 26, 95,
+174, 91,249, 67,101,222,189,191, 20,169,109,138,134,130,215, 27, 58,214,212,118, 81,121,185,163, 54, 57,241, 86,105,186,218,232,
+ 44,114,234, 0,177,204,126, 10,113, 84,110, 16,202,236,150,120, 61, 53,209, 33,250,242, 53, 36,220,186, 2,165,155, 28,233,169,
+ 41,186,248,219, 55,191,213, 17,241, 82, 90,152,104, 81, 32, 46, 0, 40,138,217, 23,159,154, 48,196, 89,111, 98,113,233,215, 19,
+122,142,225,134,252,126,225,100,170, 79, 96,132, 77, 88,196, 64,231,162,163, 91,163, 0,236,111, 78, 39,227,234,238,191,132, 94,
+ 4,244, 28,171, 58,121,246,162,157,210,183,189, 16, 68, 0, 67,149, 22,133, 89,241,140,190, 66,173, 83,223, 61,162,180,100,126,
+ 89, 76,238, 71,139, 87,126,247, 78,183, 46,161,182,148, 74,255,228,177,170,125, 92,172, 49, 86,199,204,106,203,144,118,247,178,
+190, 48,165,188,201,144, 21,150, 53, 43,138,139, 75, 30,165,230,203, 43,157,218,150, 59,150, 87,183,141, 33, 0,132,128, 99,185,
+211, 35, 79, 69,113,113,137,148,101,205,205,222, 59, 0, 16, 39,123, 27,220,205, 80, 61, 10,104,151, 73, 4, 53,177, 87,127,120,
+178, 44,129, 0,221, 68, 82, 91,228, 22,235, 33,160, 20, 28,199,128, 49, 27, 81, 89, 81, 1, 85,110, 62,212,234, 2, 84,106,202,
+ 33,183,115, 66, 88,120,119,216,219,219,227,222,141,243, 0,200, 49, 75,244,245,156,164, 67, 68,247,238,226,132, 76, 13, 76,102,
+ 14, 98,152,112,233,151, 3,122,198,108, 28,169,190,123,228, 87,139, 38, 89, 7,134,163,231,226,239,103,133,250,184,121,146,155,
+105,101,216,181,249,171,234,108, 82,166,218,155,153,240, 80, 11, 85,177, 22,185,217, 89, 20, 28,107, 81,152, 69, 29,234,239,106,
+ 89, 28,250, 97,133,230, 19,165, 81, 3,139, 97, 24, 27,223, 54,109,241,242,148, 9,248,246,219,141, 72, 78,203,194,230,111,214,
+ 87, 27, 87,119, 14,255,102,137,120,221,110,219,218,252,164, 85,111,124,155,145,115,236,118,169,160,202,216,116,255, 41, 69, 43,
+ 63,244,125, 99,237,233, 42, 77,137,148, 53,232, 68,199,118,191,177,175, 33, 77, 0, 16, 10,136,177,102, 91, 16,132, 16,212,110,
+ 11,126,251,201,219, 80,200,132, 32,132, 64,103, 96,240,218,156,181,216,185,182,250,155,213, 91,239,188,247,167, 63, 60,245, 53,
+107, 12, 33, 50,105,136,255,243,203,191, 79, 60,122, 57,211, 53,109,248,240,103,202,195,195,195,203,228,114, 57,108,109,109,225,
+224,224, 0, 7, 7, 7, 56, 57, 57,161, 33, 26,208,244,104, 46,230, 74, 32, 16,192,193,193, 1,114,185,188, 65,195,173,185,238,
+229,118,173, 3,199,244,232, 63,122,223,128,231,223, 20,156, 59,188,153,187, 17,115,108, 76, 85,193,253, 38,189, 76,245, 53, 57,
+142,187, 29, 21, 21,213,105,202,148, 41,146,133,239, 68,157, 62, 29, 19,151,124,232,236, 79, 35, 75,202, 52, 62,148, 82, 56, 57,
+218,101,191,244,108,167, 99,125, 35,130,178,162,163,163,185,125,251,246, 25, 8, 33,119,155,210, 4,128,162,162,130,237,209,209,
+191,126,222,239,153, 72,108,222,177,111,120, 98,226,189,225,169, 41, 15,224,211, 38, 0,126, 1, 29,160, 35, 78,136,190,112, 9,
+154, 18,245,118, 75,230, 89,151, 78,157, 58,121,117,233,210,197,187,172,172, 76,255,209, 71, 31, 5,177, 44,251,115, 88, 88, 88,
+247,208,208,208,188,132,132,132, 70,191, 21,215,213,188,178,107, 66, 33,128, 93,109, 35, 39,253,168, 50,149,205, 2,176,210,199,
+215, 23,231, 47,198,226,247,223,174,110, 44, 82,248, 46,157,244,234,235,111,183,117, 21,191, 61,234,233,182, 66,119,103, 5,246,
+110, 94, 35, 60,122, 37,115, 93,102,177,121, 11,128,229,205,205,179, 46, 37, 26, 19,122,135,184,130, 97, 40, 88, 74, 33, 32, 4,
+246,114, 81,131, 6, 86, 67,154, 34,163,236,141,105, 83,167,164,134,117, 14,159,253,234,196, 41,146,240,118,190,184,246,160, 20,
+ 0,129,171,131, 2, 42, 85, 30, 46,253,188,133, 41,205, 77,218, 40, 20,114,127,217,222,105,106,158, 57,113,251,219,215, 62,246,
+244,244,156,124, 43, 62, 30, 49, 49, 49,112,117,117, 69,173,113,213,208, 22, 97,125,205,210, 82,205,111,203,214,108,233,253,246,
+248, 81, 24, 17, 25,138, 11,215, 83, 97, 52,115, 48, 49,220,163, 32,215,244,216,239,164,179,198, 5, 24,223,137, 10,172,208,153,
+165,153, 75, 50, 43, 46,212, 45, 34, 91, 95,147, 82,106, 36,132,156, 6,208, 19,192, 40, 66,200, 25, 74,105,247, 58,115, 32, 0,
+ 58, 1, 8, 5, 16, 75, 41, 77,183,104,237, 2,236,141,187,126,195,213,196,112,184,116,245,118,199, 1,189,195, 65, 57,138,235,
+215,111, 96,235,182,173,250,187,119,110,173,214,170, 91,127, 66, 27, 41,110,219,216,235,105,105, 22, 97, 67,199,106, 53, 41,141,
+ 97,236, 60,130, 55, 94,185,124,225, 67,153,178, 59,130,135, 45,124, 62,247,246,207,207,183, 14, 25, 12,183,118,189,161,186,125,
+ 4, 55,127,219,123,242, 6,195,204,183,225, 4, 89,218,194,164, 70,141,253,198,230, 41,179, 81,204, 8,237,250, 12,178, 31,102,
+ 34,227, 65,252,206,170,226, 7, 42,187,214,193, 59,115,115,178,166,250,133,244,198,229,211,251,103,162, 17, 3,171,185,207,188,
+155,180,124, 99,204,229, 43, 47,231,254,248,179,135,166,178, 74, 46, 18, 9,116, 50, 33,212, 18, 93,234, 1, 75,231, 73, 19, 19,
+ 77,238,237,158,142,122,117,202,162, 19,235, 62,255, 72,236,238, 36, 67,126,169, 30, 21, 58, 51, 42,170,204, 16, 18,160,189,210,
+ 14, 85,218, 10,252,126,114,151,153,154, 74,162,106,226, 81, 27,212,108, 21, 58,106, 57, 33,152,190,104,209, 2, 8,165, 14, 74,
+255,129, 11, 77, 2,255,214,112, 70,189, 98,230, 46,128,255,192,133, 48,104,212, 35, 23, 45, 90, 16, 68, 41, 29,216, 42,116,148,
+166,182, 23, 97, 99,107, 47,214,152, 48,190,191, 15,140,230,234,250, 97, 44, 91, 29,107,199,213, 84, 53,175,158, 80,243,107,167,
+128,228,135, 19,177,200, 85,151,162,202, 96,134,209,196,192,200,176, 16, 8,132,112,118,118, 70,123,255,174,112,114,116, 64, 65,
+ 81, 49,174,199, 94,198,239,201,183,210, 41,176,188,200,165,124,143, 37,239, 17, 17,217,182,247,112,119, 35,106,141, 17, 54, 50,
+ 33,126,143,185, 96, 6,176,221, 18,227,170, 33,205,114, 93,217,218,249,203, 54,188,242,237,154, 37,173, 59,251, 57, 32,187, 72,
+143,156,194, 42,104,244, 12, 0, 10,134,165, 48,234,203,113,255,250, 47,249, 12,116,107,155,187,198,127, 59,141,123,176,196, 98,
+195,245, 59,201,178,249, 31,127,129,123, 41,233,216,186,241, 43,173,193, 10,227,170, 33,182,189,227,215,236, 55,160, 63, 83, 83,
+183,244,147,204, 38, 71, 53,180, 45,200, 81,138, 99,191,231, 63,106,251, 81,187, 85, 24,151, 82,214,164, 22, 33, 68,252,197,140,
+240,185,181,134,208,151,135,115,127,151,201,138,184,135, 15, 31,150,238,217,179,231,145,209, 35, 20, 10, 81,155, 61,104, 52, 26,
+155,205, 42,114,118,144,134, 78, 24,218,118, 92, 99,198,149, 80, 40, 4,199,113,143,188, 87,214,110, 61,218,186, 7, 61,219, 99,
+192,232,253, 3, 70,189, 37,136, 62,178,133,187, 17,243,243, 75,149, 5,247, 15, 91, 37, 2,160,180,180, 52,129, 16,242, 96,245,
+234,213,225, 91,183,110,245,127,255,253,247,211,182,172,152,250, 37, 0, 20, 23, 87,183, 69,188,121,243, 38,157, 54,109,154, 65,
+175,215,167,151,150,150,198, 81, 11,154, 92,235,212,247, 87,111,255,118, 85, 80,118,110,222,196,118,161, 61,225,230,215, 3,173,
+219,245, 68, 73,165, 9, 87, 83,114,145,150, 24,141,123, 87, 14, 30,168, 42,244,176, 40, 32,183,150,240,240,112, 95,177, 88, 60,
+146, 82, 26,104,107,107,235, 71, 41,149,138, 68,162, 49,132,144, 7, 12,195, 36,134,132,132, 68, 39, 38, 38, 90,220, 51, 44, 51,
+102,187,161,109,228,164, 13, 89, 58,219,200,180,124, 93,215, 44,157,237, 77,157,204,241,221,130,232,245, 6,143,231, 86,175,131,
+185, 56,225,224,206,242, 67,123, 55,175, 17,142,159,252, 30, 27, 95,226, 48, 75,100, 39, 63,187,114,146,197,153,251, 16, 16,146,
+247,254,251, 31,252, 81,166,129, 84,111, 12,214,148,108,104, 54, 51, 5, 0,106,250, 41,206,147, 43, 67,191,142,159, 61,117, 89,
+167,136,222, 19,158, 25, 50, 78, 96, 39,177,197,217,195,223,209,244, 59,231,127, 20, 81,246, 67, 93, 65,234, 95, 12, 12,107, 49,
+ 26,141,127, 50,172, 44,241, 94, 1, 64,161,107,121,228,137, 51, 49, 19,143,255,114, 97,197,208,103,251,184,126,243,209, 88,172,
+218,116, 20,118, 10, 25, 40,199, 98,220, 0,223,151,238,237, 27, 60,210,199,195,198,235,167,243, 57, 23,167,175,139,159,167,211,
+153,146, 27, 51, 98,106,169,169, 47,244, 59, 33,164, 61,128,145,132, 16, 14,128, 45, 0, 45,128, 74, 84,111, 72, 28,161,148, 90,
+236, 85, 4,170,235, 54,101,168,245, 56,122,232, 32,110, 95,141,198,189,123,247, 53,247, 18,239,125, 69, 68,116, 93,101,126,114,
+139, 60,171, 13,101, 17,178, 28, 26,206, 44,108, 2,173, 80,254,217,205,227, 95, 68,118, 24, 48,179,151,107,187,222,112,110, 83,
+109, 83,150,231,196, 35,251,250,193,163, 26,149,100, 12,165,241, 77, 7, 50, 53,129,210,199,191, 3, 39,148,226, 74,204, 73, 80,
+142,219, 8, 0,148,227, 54,222,186,124,114,106,207,161,111,194,197,189, 77,151,218,212, 46,107,181,229, 34,166,252,196,142,207,
+126,204,200,200, 64, 82, 82, 18, 82, 82, 82, 80, 82, 82,130,189,123, 47, 89, 85,171,169, 32,245,202, 89,143,192,126,131, 95,153,
+ 52,251,216,232, 23, 71,219,248,250,181, 19, 4,121, 59,192,213, 94,132,251,169,185, 72,141,127,192,165,220,185,168,167, 85, 5,
+ 47, 20,164,252,214,168,119,164, 85,200, 24, 15,129,144,204,143,254,185,186,183,224,160, 81,111, 4,205,157,254,254, 83, 46,174,
+206, 13,254, 29, 47, 41, 46,149,126,252,241,226,160,218,241,205,245, 34, 20, 8,133,154,201, 83,103,216, 10,136,224,209, 54, 32,
+173,221, 35,171,253,135, 82,128, 0, 18,177,168,217,207,232,196,209,125,192,112, 28, 42,171, 76,168,212,153, 80, 86,169, 71,126,
+ 81, 25, 18, 18, 83,113,237,210, 41,100,164,166,104, 24,134, 57, 15,138, 67,133,174,229, 7,234, 23,214,109, 10, 14, 66, 95, 23,
+103,123,100,148,234, 33,151,136,160,122,152,194,152, 24,125,139,139,172, 23,221,250, 57,207, 35,108,212,115,147,222, 89,248, 75,
+191,126,125, 29, 58,119,237,110,235,230, 96, 15,137,136, 32,245,161, 26,119,111, 94,215,102, 37,223,170, 96,205, 85, 67,138,226,
+127,126,236, 46, 45,255,233, 52,106, 96,153, 88,102,208,123, 11, 87,158, 97, 89, 86, 46, 18, 10,171,204,148, 27,242, 56,198,213,
+191, 11, 74,185,156,119,102, 85, 7,173,215,126, 33, 48,179,156,252,173,119,222,175,170,251, 5,129,152, 89, 69,173,231,170,153,
+ 76, 61, 97, 97,153, 65,179,224,219,219, 59, 63,223,153,120, 16, 64,226,227,102,246, 1, 64,105,133,241,182,235,179, 63,140,210,
+232, 24, 2,224, 94, 3,154,218, 1, 3, 6, 84, 79,160,198,136, 99, 89,214,226, 27,132,212, 70, 49,181,255,200, 55, 4,209, 71,
+183,114,215,207, 31, 29,211, 18,227,170,150, 26,131,233, 42, 33, 36,254,195, 15, 63,140,240,240,240,240, 88,188,120,177, 77, 69,
+ 69,133,248,155,111,190,209, 23, 21, 21,229, 87, 84, 84,196, 82,106,121,124, 66,205, 77,115,146,220,163,227,119,228,224,247,207,
+ 57,187,123, 13,118,114,243, 9, 44, 45,204, 73,173, 40,206,249,133,112, 56,171, 41,184, 31,107,237, 92,111,221,186,245,176, 83,
+167, 78, 71,132, 66,161, 55,203,178,110,132, 16, 59, 74,105, 41,195, 48,165, 28,199,229, 89, 99, 92,213,146, 25,179,221,208,239,
+ 95,219,246, 21, 87,113, 82, 19,177,217,151, 25,179,221, 0, 0,234, 51,239,235, 0,252,236,209,127,222,232,163, 87, 50,190, 74,
+ 40,117,152, 81, 16,243,185, 69,174,248,186,228,222, 60,208,220,165,181, 73, 0, 0, 32, 0, 73, 68, 65, 84,190,249, 81,150, 81,
+165, 74,200, 1, 48,209,214, 35,104, 77,252,205,216, 37,132, 66,204,130, 89,174, 83, 63,184,241, 36,244,197, 98,177,190,123,247,
+238, 13,102, 11,202,100,178, 38,235,107,213,252,161,223, 74, 34, 35,119,252, 18,125,105,226,169,179,151, 87, 60,213,171,143,171,
+141, 76,137, 54,206, 38,236,248,160,219,204,232,155,133,215,158,255,224,226,183,105, 42,253, 29, 74,169,197,117,208, 0,128, 82,
+154, 66, 8, 41, 7, 48,138, 82,186,153, 16, 50, 25,192, 61, 0,241, 86, 27, 2, 28, 94,237,213,171,199, 94, 66,136,136, 50,220,
+170, 88,177,112,159, 62,239, 94, 78, 75, 12,138,186,116,246,115,192,228,169, 83, 59, 4,180,251, 35,139, 48,180,173, 61,198, 79,
+124,187, 67, 27,255, 14,143,142, 5,249, 52,253,133,138,170,226,170,136, 71,167,103,239,159, 89,253,145,107,234,111,239,200, 93,
+188,237,180, 69,153, 37,165,153, 55, 86,235, 10, 60, 86,215,239,208, 96, 45, 25, 41, 9,235,190, 95, 51,239,253,188,220,212,173,
+218,130,228,234, 93,135,130,228,120,133, 71,224, 71, 69,249, 57,239, 23, 23,164,173,110,233,107,161,213,106, 85,123,246,236,113,
+234,221,187,183,192,195,195, 3,133,133,133, 56,127,254, 60,199,113, 92,179,141,153,235,163, 78,190,120,158,180,107,231,178,111,
+ 71,249, 42,145,220,126, 24,195, 66, 73, 41,133, 72, 64,242, 76,134,242, 95, 10,157,170, 62,160,119, 98,155,254, 92,114, 44,161,
+ 2, 42,168,237, 45,200,113, 28,249,226,235, 93,153, 66,177,180,193, 45, 85,214,108, 84,112, 28,103,113, 47, 66,181, 48,203, 53,
+204, 28,220,124, 22, 31, 5,226, 73, 82, 51, 95, 78,233,233,167,135,190, 54,152, 97, 88, 51,170,227, 19,107,127, 10, 40, 37,191,
+130,176,103,138, 92, 52,177,214, 24, 85,117, 49,153, 76, 78, 16, 72, 96,175, 48, 67, 0,130,138,242,114, 89, 43, 86,122,175, 37,
+ 90,181,168,227,143, 38,144,200,200, 54,198,115,191,190,126,225,210,111, 99, 40,199,249,177, 20, 0, 37, 25, 70,147,254,199, 2,
+135,162,157, 45,157,239,127, 27,228, 49,255,126, 52, 45,110,225,118,201,127,154, 38, 33, 68, 2,192, 13, 0, 75,235,180,191,121,
+ 28,205, 58,199, 27,237, 45,216, 82, 77,160,186,175,152,204, 70,241,129, 78,167,217,170, 83, 39, 91,124,211,183,228,245, 36,132,
+ 56,202,100,178,174,118,118,118,226,162,162,162,171,148,210, 38,191,121,254,183,190,239,117,233,251,198,118,183, 1,131,159,158,
+125,246,196,181, 13, 53,219,135,143,240, 30,179,206,102,252,176,126,239,238, 58,116,124, 93,253, 44,194,127,194,218,255, 93,154,
+ 36, 50, 82,228, 94,234, 48,145,101,185,229, 3, 58,104,116,249,233,247,167, 93,186, 91,120,149, 82,218,104, 61, 49, 11, 63,159,
+175,160,198,131, 69, 41,221,215,212, 88, 75, 53,173,165, 33, 77,247,176, 23, 62, 1,129, 5, 69, 99,107,160,184, 87, 16,127,100,
+113, 83,154, 64,117, 64,186,162, 16,206,186, 34,183, 98,107, 13,171,255,151,247,157, 16, 97,167, 78,157,250, 74, 36, 18, 95,150,
+101, 21, 70,163, 81, 87, 85, 85,149,145,153,153,121,133, 54,210,144,252,223, 61, 79,143, 78, 47,172, 19,139,197,179, 0,192,108,
+ 54,111, 80,223, 61, 50,167,169,115, 27, 27,255,183,220,143,198,140, 17,210, 31,127,180,184,113,187, 37,154,181,120,117,125,169,
+204,108,102, 30,245, 30,146,136, 69,229, 57, 55, 15, 54, 28,247, 98,161, 38,207, 31,240, 6, 22,175,201,107,242,154,127,187, 38,
+105,178, 89,119,203, 52, 45,133,215,228, 53, 1, 64, 25, 50,210, 7, 0, 84,137,199, 44,202, 54,110,104,252,127,235,218,255, 83,
+ 53,255,105, 88,213,236,153,135,135,135,231, 73, 96,137,113,197,195,243,239,196, 82,195,170,165,227,121,120, 8,234,181, 90,169,
+197, 26,203,148, 16,210,160, 70, 83, 88,224,246,231, 53,121, 77, 94,147,215,228, 53,121, 77, 94,243, 31,166,217,156,246, 63,197,
+ 51,198,111, 17,242,154,188, 38,175,201,107,242,154,188, 38,175,249,255,174,249, 79,227, 9,181, 70,254,231, 65, 8,241, 32,132,
+120, 60,233,177, 60, 79, 6, 66,136, 23, 33,196,203,202,241,158, 45,188, 22,255,254,242,240,240,240,240, 88,197,223, 30,131, 85,
+123,163,106, 46, 59,207,210,113, 79,250,220,154,243, 87, 16,130,185, 53,143, 87, 81, 74, 27,173, 8,108,225,216,102,235,115, 7,
+ 6, 6,218,202,229,242,151, 88,150, 13,224, 56, 14,132,144, 84, 66,200,143,119,239,222,173,194,163,234, 41, 77,227,235,235,235,
+103, 99, 99, 51,145, 16,210, 17, 0, 40,165,247,244,122,253,142,135, 15, 31, 90, 87,201,187, 1, 8, 33, 4,192,100,153, 76, 54,
+214,201,201,169,125,105,105,105,138,209,104,252, 17,192,166,150,164,111, 43,149,202, 64, 0,175,115, 28, 39, 18, 8, 4,251, 84,
+ 42,149, 69,173, 7,106,230, 98,241,251, 83, 51,102, 45, 1,102,131,128, 90, 50,254,113,174, 85,143,199,253, 2,195,199, 41,241,
+240,240,240,252,151, 98,149,129,229,237,237, 61,148,227,184, 87, 0, 64, 32, 16,236,203,201,201, 57,101,205,249,150,222,172, 30,
+231,166, 86,239,220,117,148,210,247,173,156,163, 7, 33,152,203,113, 84, 0, 0, 2, 1,153,231,225,225,225, 34, 18,137,254, 82,
+243,137, 97, 24, 57, 33,120,139,227,170,251, 37, 9, 4,100, 46, 33,100,131,181,134, 93, 96, 96,160,173,131,131,195,162,141, 27,
+ 55, 58,116,236,216,145, 0, 64, 92, 92,156,211,140, 25, 51, 58,116,234,212,105,217,221,187,119,155,109,121, 17, 16, 16,240, 66,
+120,215,136,153,115, 62,152,231,225,238,234,102,207,176,140, 41, 55, 55, 79,185,126,221,231, 79, 5, 4, 4,124,155,150,150,102,
+ 81,223,192, 90, 67, 74, 36, 18,141,181,177,177,105,167,215,235, 83, 25,134, 57, 40, 20, 10, 7, 47, 95,190, 60,108,248,240,225,
+ 54,229,229,229, 82,134, 97,218,239,217,179,231,221,109,219,182, 13, 37,132,140,106, 42,104,185,214,211, 68, 41,173, 91,247,230,
+149,171, 87,175, 14, 20,137, 68,164, 71,143, 30,114, 66,200, 12,250, 71,245,238,134,198,215,106,253,229,253, 33,132,124, 73, 41,
+205,247,241,241,233,206,178,236,107, 0, 32, 20, 10,119,101,103,103,223, 32,132,180,182,145,201,102, 87,233,245, 4, 0,177,230,
+ 61,106,232, 90,118,118,118,187, 42, 43, 43,239,215,254,190,102,158, 45, 50,228,121,120,120,120,120,254,185, 88,101, 96, 81, 74,
+ 95, 75, 73, 73, 81,112, 28,135,160,160,160, 9, 0, 44, 54,176, 26,186, 89, 13, 28, 56,176,171, 92, 46,255, 83, 77,168,170,170,
+ 42, 41, 33, 24,216, 18,163,165,246, 26, 70,163, 65, 32, 22, 75, 33, 20, 10,222,235,210,165, 75,247,162,162,162,104,150,101,191,
+203,207,207,183,186,187, 58, 33, 4,223,127,255,125, 71, 15, 15,143,191, 20,132, 83,171,213,146,145, 35,255,210,116,219,106,228,
+114,249, 75,223,125,247,157, 67,112,112, 48,209,233,116, 48,155,205,240,245,245, 21, 44, 90,180,200,241,211, 79, 63, 29, 3,160,
+193,246, 49,181,248,248,248,248,119,139,232, 57,115,199,246,237, 61,203, 75, 74,244, 91,215,110,188,105, 16,201,116,109, 58, 6,
+ 74, 62, 90,178,220,241,147,197, 11,166,248,248,248,196,103,103,103, 55, 89,213,155, 16, 34, 0,112,120,246,236,217,161, 35, 70,
+140,144,106, 52, 26, 27,157, 78,215,118,207,158, 61,139, 34, 34, 34,236,186,118,237, 42,221,191,127, 63, 41, 43, 43, 3,165, 84,
+ 17, 28, 28, 76,199,140, 25,163,255,225,135, 31,166, 3,248,178, 17,205, 6,141,101,150,101,197,181,142, 47,134, 97,164,168,254,
+ 44,154, 90,224,157, 34,174,174,174, 19, 1,172, 96, 24,230,173,243,231,207,119, 5,128,254,253,251, 75, 0,220,112,112,112,232,
+109, 50, 26,173,107,118,220, 8,195,135,143, 0,128,205,158,158,158, 23, 11, 11, 11,189, 9,193,120, 75,231,201,195,195,195,195,
+243,191,133,181, 6,150, 4, 0, 46, 94,188, 8, 74,169,180,185,241, 13,240,232, 70, 71, 8,193,172, 89,179,224,233,249,231,176,
+152,188,188, 60,196,196,156,111,129,244, 95,175, 1, 0,159,126,250,169, 99,113,113,241,243,223,127,255,253,224,214,173, 91, 47,
+202,207,207,143,105,234,100, 74,169,154, 16,178,170,198, 51, 2,169, 84,150, 49,101,202,148, 27, 53,191, 11, 56,118,236,152, 98,
+228,200,145, 58, 66, 72, 26, 0, 72,165, 50,119,161, 80,224, 71,171,123, 76,173,106,137, 55,195,100, 50,181, 11, 14, 14, 38,149,
+149,149, 48, 26,141,200,204,204, 68, 97, 97, 33, 90,181,106, 69, 24,134,105,215,220,249, 10,133,226,205,217,115,222,111, 85, 94,
+ 82, 90,101,214,104, 76,118, 28,203, 56,216,136, 73, 69, 97,113, 89, 70,182,131,238,205,105, 51, 69,139,231,191,251, 38,128,133,
+205, 72, 77,159, 51,103, 78,199, 30, 61,122,120, 29, 56,112,128,148,151,151, 67, 36, 18,217,133,135,135,163,123,247,238,108,116,
+116, 52,241,247,247, 71, 88, 88, 24, 46, 95,190,140,223,126,251,141,116,237,218, 85,113,248,240,225, 9,104,192,192,170,111, 84,
+ 11,133,130,249,227,198,141, 27,170, 80, 40,204,145,145,145,120,251,237,183,161,213,106,209,177, 99,199,206,145,145,145,177, 81,
+ 81, 81, 98,129,128,132,177,108,181, 51,172, 33,227,186,222,251, 67, 38, 78,156,164,182,179,179,139, 82, 42,149,247, 9, 33, 34,
+137, 68, 82,123,109,161,135,135, 71,171,206,157, 59, 79,115,113,113, 41, 16, 10, 4,238,180,186,201,138,197,239, 81,237,181, 70,
+142, 28, 49, 15, 32, 24, 48, 96, 64,241,204,153, 51,217,123,247,238, 69, 70, 69,141,126,234,193,131,148,199,242, 92,242,240,240,
+240,240,252,115,177,202,192, 34,132, 20,221,186,117,203, 83,175,215,131, 16,210,172, 55,168,110,134, 1,165, 84, 45, 20, 10,191,
+ 21, 8,200, 59,132, 16,132,133,117, 74, 95,191,126,125, 67, 21,205,141, 97, 97,157,210,133, 66,129, 63,165, 20,132, 8, 54,114,
+ 28,171,110, 72,179,129,235,169, 9, 33,171,164, 82,217, 92, 0,240,244, 84,170,143, 31, 63,110,126,233,165,151,240,197, 23, 95,
+ 72,231,207,159,191, 92,169, 84,142, 83,169, 84, 57,245,206,139,175,247,124,129,135,135,135,203,247,223,127,223,113,202,148, 41,
+ 55,114,115,115,103, 3,128,151,151,215,122, 0,157, 8, 33,105,117,142, 97,211,166, 77,221,223,124,243,205,123,106,181,122, 65,
+ 99,154,141,209,174, 93, 59,191,145, 35, 71,202, 0,192,108, 54, 35, 59, 59, 27,217,217,217, 40, 46, 46,134,217,252,231,214, 98,
+141,105, 18, 66,130,157,157,156,109,183,174,217,120,163,149, 76, 72,220,124,148, 68,226,224, 36, 18,216,217,203,168, 80, 88,213,
+198, 71,105, 79, 8, 9,110,228, 53,123,164, 41,145, 72, 38, 12, 30, 60, 88,177,127,255,126, 18, 22, 22, 6, 39, 39, 39, 92,188,
+120, 17,183,110,221, 66,105,105,169,128, 97, 24, 68, 68, 68, 96,213,170, 85,240,241,241, 65,121,121, 57, 50, 51, 51,221, 36, 18,
+ 73,171,198, 52, 81,207,224,157, 59,119, 46,220,221,221,193,178, 44,242,242,242, 80, 89, 89, 9, 91, 91, 91, 56, 58, 58, 66,165,
+ 82,225,232,209,134,119, 50,235,125,150, 22,200,100,178,239,219,180,105,179,118,230,204,153,158,174,174,174, 48, 24, 12,139,138,
+139,139, 49,119,238, 92, 0, 64,143, 30, 61, 58, 83, 74, 79,189,249,230,155,240,243,243,203, 45, 41, 41,121, 24, 23, 23,247,182,
+ 86,171,141,111, 72,179, 49,188,188,188,206, 20, 20, 20,246,237,223,191, 63,202,202,202, 76, 75,150, 44, 65,120,120, 56, 58,116,
+ 8,108,118,158, 79, 10, 94,147,215,228, 53,121,205,255, 5,205,127, 26, 34, 0, 32,213, 61, 60, 73,253,199,245,161,148,150,122,
+121,121,121,202,229,114, 80, 74, 75,173,189, 24,203,178,211,221,220,220, 10, 22, 44, 88,208, 39, 48, 48,208, 56,125,250,244,248,
+140,140,140, 15,235,142,241,243,243,251,244,235,175,191, 70,114,114,114,230,138, 21, 43, 46, 23, 21, 21, 45,179,230, 26,148,210,
+249,132,144,245, 0,160, 82,169,138,142, 29, 59,214,227,194,133, 11,243,215,175, 95,239, 57,125,250,116,233,204,153, 51,167,161,
+121, 79, 14, 68, 34, 81, 85, 67,219,130, 13,225,225,225, 97,106, 40, 70,171, 41, 34, 35, 35,133, 15, 31, 62,236, 40,151,203, 95,
+126,247,221,119,229, 38,147, 9, 42,149, 10,217,217,217, 40, 43, 43,131, 64, 32, 64,114,114, 50, 71, 8,185,111,129, 92,165,209,
+108, 54,216,250, 40,205, 35, 71, 13,238,116,247,218,173,100,185,139,139,160, 83, 68,120, 72, 82, 74,102, 28, 1,140,168,254,105,
+ 18, 71, 71,199,192,162,162, 34, 84, 84, 84,160, 85,171, 86,216,176, 97, 3, 60, 60, 60,160,211,233,144,144,144, 64,189,189,189,
+201,165, 75,151,160, 84, 42, 81, 88, 88, 8,163,209, 8,157, 78, 87, 96, 52, 26, 27, 92, 59,165, 84, 45, 18,137,182, 10, 4,228,
+109, 66, 8,218,183,239,160,254,242,203, 47,205,148, 82, 4, 7, 7, 99,244,232,209,184,120,241, 34, 18, 18, 18, 64, 41, 5,199,
+113,102, 63, 63,127,181, 64, 64,220,171, 79,111,220,219,100, 48, 24,210, 60, 60, 60,222,122,239,189,247,246,124,247,221,119,206,
+ 11, 23, 46, 4,165, 20, 44,203,130,101, 89,112, 28, 7,142,227, 64, 41,197,225,195,135,145,154,154,250,105, 93,227,170, 57,188,
+189,189,109, 88,150,157, 26, 20, 20, 52,226,149, 87, 94, 49, 73, 36, 18,232,116,186,218,215,194, 52,100,200,144,226,145, 35, 71,
+184,158, 56,113,194, 42,175, 24, 15, 15, 15, 15, 79,195, 88,106,139,252,183,240,200,131,245,119, 45, 70, 40, 20,110, 58,115,230,
+ 76,120,191,126,253, 68, 3, 7, 14, 12,243,246,246, 14,203,201,201,137, 7, 0,111,111,239,176, 33, 67,134,132,185,187,187, 99,
+195,134, 13, 58,161, 80,184,169, 37,215,168,119,179,139,245,242,242,250,232,208,161, 67,223, 79,153, 50, 5, 30, 30, 30,225, 79,
+100, 33, 45, 96,233,210,165,228,171,175,190, 90, 43,151,203,163,164, 82,169, 67,171, 86,173,202,135, 14, 29,154, 98,111,111,159,
+158,145,145, 1, 74, 41, 92, 92, 92, 80, 89, 89,137,228,228,100,238,204,153, 51,101,118,118,118, 63, 53,167,107, 50,153,174, 63,
+204,202, 10,236,221,183,183,231,197, 27,137, 55,163, 94, 24,209, 95, 32, 18, 8, 50,178,242,174,183,114,117,177,253,237,202,229,
+ 10,147,201,116,189, 57, 29,173, 86,155,193, 48,140, 11,165,180, 85, 76, 76, 12,220,220,220, 80, 90, 90, 10,179,217, 12,147,201,
+100,212,233,116, 54, 73, 73, 73, 48, 24, 12, 48, 24, 12,112,112,112,192,221,187,119,213, 12,195,252,218,152, 38,195, 48,147, 9,
+ 33,159, 80, 74,113,255,254,253, 92, 0, 80, 42,149, 29,156,156,156,246, 50, 12, 3,149, 74,133,152,152,152,241, 42,149, 42,185,
+246,156,166,130,220,235,162, 86,171, 11,189,188,188,166, 79,158, 60,249,147,160,160,160, 0, 74, 41,218,183,111,143,193,131, 7,
+227,228,201,147,120,240,224, 1,180, 90, 45,251,251,239,191,239, 83,169, 84,199,154, 91,127, 45,238,238,238, 97,182,182,182, 11,
+102,204,152,225, 17, 26, 26, 10,189,190,186,119,172,157,157, 29,116, 58, 29, 28, 28, 28,240,244,211, 79,223, 91,182,108,153,137,
+ 82, 76,164,148,230, 91,170,205,195,195,195,195,211, 56,255, 4,195,170,150, 71, 6, 22,165,148, 16, 66,254,125, 85, 71,107, 80,
+171,213,133,222,222,222,191,196,197,197,141, 24, 59,118, 44, 98, 98, 98, 38, 2,120, 23, 0,100, 50,217,196,177, 99,199, 34, 46,
+ 46, 14, 73, 73, 73,191,168,213,234,194,166,213, 44,131, 16,162, 51, 26,171, 29, 56, 54, 54, 54,114,107,206,165,148, 6,212,108,
+ 13,130, 82, 26,208,216,177,230, 88,186,116, 41,249,250,235,175, 31,204,158, 61,187,205,140, 25, 51, 68, 14, 14, 14, 40, 43, 43,
+179,219,185,115,167,251,235,175,191,174, 92,182,108,217,165,252,252,124,108,223,190,189, 42, 41, 41, 73, 47, 20, 10,147,164, 82,
+233,225,216,216, 88, 67,115,218,122,189,254,251, 79,151,125,212,127,247,158, 31,130,131,130,219, 59,159, 60,115,254,166,171,171,
+131,220,207, 47, 64, 86, 94, 86,102,248,122,253, 23, 34,173, 86,187,173, 57,157,170,170,170,195,209,209,209, 47,248,248,248,180,
+138,143,143,135,209,104, 4,203,178, 24, 52,104, 16, 40,165, 50, 0,156, 72, 36,194,189,123,247, 96, 50,153, 10, 30, 60,120,144,
+155,154,154, 42, 3,176,178,153,215,240, 79,134,146, 64, 32, 24, 55, 98,196, 8, 48, 12,131,193,131, 7,227,200,145, 35, 99, 1,
+ 44,109,108,124, 83,228,230,230,166, 0, 24, 23, 18, 18, 34, 41, 43, 43,235,254,236,179,207,110,120,246,217,103,113,243,230, 77,
+ 92,190,124,249,101,153, 76, 86, 96, 50,153, 24, 79, 79,207,201,132, 16, 7,147,201,180,183,168,168, 40,175, 49, 61, 79, 79,207,
+ 62,129,129,129, 75, 87,175, 94, 69, 60, 60, 60,193,178, 12,204,102, 19, 10, 11,139,161,209,104, 16, 18, 18, 2, 95, 95, 95,172,
+ 92,185, 18, 0,142,240,198, 21, 15, 15, 15,207,147,227,239,178, 69,254, 14,254, 20,131,213,212,194, 60, 60, 60, 20, 21,101,197,
+179,252,252,252,108, 0, 64, 38, 17, 14,112,115,115,251,172,168,168,168,210,218,139,234,116,186, 31,246,236,217,243,220,218,181,
+107, 37,195,134, 13,107,231,237,237,221, 3, 0,162,162,162,218,217,219,219, 99,207,158, 61, 38,157, 78,247, 67, 75, 22,212, 16,
+ 28,199, 13,142,136,136, 64, 73, 73, 9, 50, 51, 51,111, 88,115,238,177, 99,199, 20, 0, 58, 53,119,172, 57,190,250,234,171, 13,
+179,103,207,110,179, 96,193, 2,145, 94,175, 71, 69, 69, 5,196, 98, 49, 38, 77,154, 36,209,104, 52,126,235,215,175, 87,253,254,
+251,239, 55,140, 70,227,214,212,212, 84,171,234, 86,169, 84,170, 42,165, 82, 57,115,249,167,203,247,174,254,226, 11,247,146,226,
+210,100,137, 84,174, 87,200,101, 46,243,222, 95, 70,213,106,245,123,106,181,186,217, 82, 15, 0, 86,238,221,187,119,200,115,207,
+ 61,119,199,199,199,199,189,168,168,168,117, 69, 69, 5, 45, 41, 41, 33,168,142,165, 34, 0,112,231,206, 29,100,101,101, 49, 44,
+203, 94, 2,240, 9,165,180,217,237,199, 90,188,189,189,157,123,244,232, 49,196,213,213,245,209, 86,100,215,174, 93,135,120,123,
+123,127,149,147,147, 99,245,182,115, 45,229,229,229,163,158,126,250,233,247,166, 77,155, 6,179,217,140, 23, 94,120, 1, 57, 57,
+ 57,107, 50, 50, 50, 14, 40,149,202,241,147, 38, 77,106,229,234,234,138,247,223,127, 95,142, 58,198, 92,125, 8, 33,175,141, 27,
+ 55,142,200,229,182, 96, 24, 6, 50,153, 4, 50,153, 12,118,118, 14,112,113,113, 65, 86, 86, 22, 6, 12, 24,192,165,167,167, 31,
+ 85, 40, 20, 77,102,119,242,240,240,240,240, 88,207, 63,197,200,178, 40,200,221,219,219, 59,194,221,221,125,122, 65, 65,129, 77,
+109,106, 61, 33,196,166, 75,187,118,155,148, 74,229,183, 42,149,234, 55,107, 46, 90, 90, 90, 90,225,233,233,121, 52, 54, 54,118,
+ 76, 84, 84, 20,206,158, 61,251, 58, 0, 68, 69, 69, 33, 54, 54, 22,233,233,233, 71, 75, 75, 75, 43,172, 94, 77, 3,120,121,121,
+189,216,191,127,255,215,123,244,232,129, 99,199,142,129,101,217, 70,183,179, 26,162,110,198, 96, 67, 89,132,181,199,154,211, 17,
+137, 68, 47,205,152, 49, 67,164,215,235, 65, 41,133, 68, 34, 65, 69, 69, 5,242,243,243,209,183,111, 95,201,236,217,179,219,107,
+181,218, 15,178,178,178, 90, 84, 20, 84,165, 82,229, 4, 6, 6,166, 86,233,245, 98,103, 87, 23,157,189,173,148, 86,104, 52,130,
+ 59,119,110,230,169,213,234, 76, 75, 52, 40,165, 70, 66,200, 51,167, 79,159, 94, 44, 20, 10,199,122,121,121, 97,204,152, 49,100,
+224,192,129,144, 74,165,168,170,170, 66, 89, 89, 25,142, 29, 59, 6,134, 97,252, 1,160, 85,171, 86, 30,109,219,182,253, 73, 32,
+ 16,168,211,211,211,223,108,238, 26, 44,203, 70,141, 26, 53, 74,100, 54,155,177,108,217, 50,124,252,241,199, 24, 58,116,168,232,
+250,245,235, 81, 0,182,180,100,237,222,222,222,147, 39, 78,156, 56,121,204,152, 49,208,104, 52,136,141,141, 69,239,222,189,177,
+114,229, 74,207,203,151, 47,191, 27, 17, 17, 1,145, 72,132, 11, 23, 46,128, 97,152, 70, 27,182, 70, 70, 70,138,132, 66, 97,128,
+151,151, 23, 50, 51, 51,161, 80, 40,224,225,225, 1, 39, 39, 39,184,185,185, 97,237,218,181, 88,183,110,221,109,161, 80,184, 81,
+165, 82,165,182,100,174, 60, 60, 60, 60, 60,255, 27,136,128,106,107,177,246, 64,221,199,206,206,206, 14, 54, 54, 54, 83, 70,140,
+ 24,209,231,133, 23, 94,192,224,193,131,255,116,242,134, 13, 27,236, 98, 98, 98,230,121,121,121, 61, 3, 96, 99,110,110,110,137,
+165, 23,230, 56,238,240,222,189,123,135,245,234,213, 75,209,191,127,255, 0, 0,144,201,100,198,189,123,247,234, 56,142, 59,108,
+237, 66,234, 23,125,244,246,246,142, 16, 10,133, 19, 71,142, 28, 25,241,198, 27,111, 32, 33, 33, 1,123,246,236,185, 23, 24, 24,
+120,214, 74,221,180,102,178, 8,215,195, 2,111, 22,195, 48, 78, 14, 14, 14,168,168,168,128, 68, 34, 1,195, 48, 40, 46, 46,198,
+253,251,247,225,234,234,138,242,242,114,135,182,109,219, 38, 88,187,238,186,200, 37, 92,183, 69,115, 39,183,215,235,171, 66,202,
+203,203, 25,145, 72, 36,146,137,217, 38,107, 95,213,135, 82,106,240,245,245, 29,197,178,172,155,209,104, 52,123,120,120,136,207,
+157, 59, 7,169, 84,138,234,236,207, 48, 72,165, 82,163,183,183,183, 6, 0, 92, 93, 93, 5, 43, 86,172, 16,207,153, 51,167,217,
+185,119,235,214, 77,220,182,109,219,113,129,129,129,184,114,229, 10, 18, 19, 19,211,174, 92,185, 18,208,173, 91, 55,248,248,248,
+140,235,214,173,219,142,184,184, 56,115,115, 58,117, 9, 9, 9,145,132,135,135,191, 62,102,204, 24,164,165,165, 97,197,138, 21,
+ 69,121,121,121,231, 79,159, 62,253,226,180,105,211,132,189,123,247, 70, 81, 81, 17,118,236,216,193,220,184,113, 99, 91,126,126,
+254,174,198,180, 46, 92,184,192, 41,149, 74, 16, 66, 32, 20, 10,161,211,233,144,158,158,142,167,159,126, 26,219,182,109,195,250,
+245,235,119,229,229,229,241, 94, 43, 30, 30, 30,158,127, 3,141,217, 34,255,173, 52,234,193,242,242,242, 26,238,226,226,242,214,
+184,113,227,132, 65, 65, 65, 80,171,213,176,183,149, 25, 9, 33, 82, 0,176,183,181, 49,154,205,102, 76,155, 54, 13,225,225,225,
+ 61,230,205,155, 23,209,186,117,235, 93,249,249,249,205, 6,101, 3,128, 90,173,214,121,122,122, 30,124,231,157,119, 86,222,186,
+117,211, 31, 0,174, 93,187,150,174, 82,169,230, 91,184,157,245,136, 58,197, 41,137, 66,161,184,211,190,125,251,226, 33, 67,134,
+ 56,143, 30, 61, 26,110,110,110,184,121,243, 38, 86,172, 88,145,160,215,235,167,199,196,196, 48,214,104, 63, 41, 68, 34, 81, 89,
+ 73, 73,137,187, 84, 42, 69,121,121,249, 35,227, 74,171,213,162,164,164, 4,148,210,138,152,152, 24,182,165,250,222,222,222,207,
+ 12, 27,242, 76,216,234,181, 95,162, 74, 87,137,107,177,199, 81, 90, 82,132, 77, 91, 14,117,242,246,246,126, 38, 39, 39,231,130,
+165, 90, 12,195, 4, 28, 60,120, 16, 0, 32,149, 74,241,201, 39,159, 64,169, 84,194,193,193, 1,149,149,149,152, 60,121,178,116,
+214,172, 89, 0,128,196,196, 68,216,217,217, 89,164,155,151,151,215,127,202,148, 41, 14,102,179, 25,167, 78,157, 50,176, 44, 59,
+243,236,217,179,135,187,116,233, 34,235,215,175,159,195,238,221,187, 7, 0, 56,109,205,186, 25,134,145, 42, 20, 10, 41,203,178,
+ 56,120,240, 32,178,178,178,222, 40, 42, 42,202,247,240,240, 56,244,193, 7, 31,188,223,161, 67, 7,191, 7, 15, 30,100,105, 52,
+154, 85,106,181,186, 73,239, 32,165,148, 83, 42,149, 15,207,156, 57,227, 59,102,204, 24, 72, 36, 18,148,150,150,194,222,222, 30,
+171, 87,175,166, 38,147,201,162,207, 54, 15, 15, 15, 15, 15, 79, 83, 91,132,175,254,242,203, 47, 66,142,227,176,121,243,102,196,
+197,197, 81, 59, 7,151,217,246,142,100,167,131,131, 3, 91, 86, 86,246,234,170, 85,171, 94, 88,188,120, 49,233,219,183, 47, 98,
+ 99, 99,137,191,191,127, 20,128, 71, 55,161,230,186,109,151,151,151, 95, 87,171,243,253,235, 84,109,247,151,201,108,154,204,118,
+171,175,217, 64, 49,203, 46,159,126,250,105,188,187,187,187, 57, 62, 62, 30, 27, 55,110,228,226,226,226, 78, 0, 88,173, 86,171,
+ 27, 44, 39,240,119,116, 26,103, 24,230,224, 23, 95,124, 49,101,254,252,249,226,188,188, 60, 36, 39, 39, 67,171,213,194,108, 54,
+227,228,201,147,140, 78,167,107,214,107,215,212, 60,115,114,114, 46,116,104,231,139, 29, 91,214,194,100, 50, 32, 47, 55, 11, 0,
+ 80, 84, 92,142,166,140,171,134, 52, 5, 2, 65,217,196,137, 19, 21, 70,163,145,140, 27, 55, 78, 92, 80, 80,128,118,237,170,235,
+157, 86, 84, 84,224,196,137, 19, 8, 14,174, 46,171,117,247,238,221, 71,143,155,155,167, 66,161, 24,219,167, 79, 31,100,102,102,
+ 34, 33, 33,225,164, 90,173, 46,244,244,244, 60,153,149,149, 21,213,189,123,119, 28, 62,124,120, 12, 26, 49,176,154, 90,123,109,
+121, 6,142,227,224,226,226,162, 5,128, 26, 99,234,157,198,214,221,152, 38,195, 48,243, 14, 31, 62, 60, 37, 54, 54,246,153,119,
+223,125,151, 12, 28, 56, 16, 0,160,213,106, 89, 75,226, 13,255, 91,186,214,243,154,188, 38,175,201,107,254,167,105,254,211,104,
+202,192, 98, 56,142, 67, 76, 76, 12, 14, 29, 58,196, 26,141,198, 5,121,121,121,117,107, 50,109,247,241,241,185, 20, 21, 21,181,
+ 38, 57, 57, 89,152,152,152, 8, 74,169, 85, 30, 24,189, 94,111, 38,228,175,199,172,209,104,136,109,219,182, 33, 63, 63,223,152,
+149,149,245,179,201,100,218,211, 84,214, 88,115, 60,169, 44,194, 25, 51,102,204,250,250,235,175, 7,107, 52, 26,223,168,168, 40,
+177,139,139, 11, 74, 74, 74,112,234,212, 41,230,230,205,155, 89, 51,102,204,120,183,165,115, 4, 30,121,176, 48,241,173, 57,168,
+170,170,196,239, 87,142,163,172,164, 8,177,215,147, 97,173, 7, 75, 36, 18,249,154,205,102, 25,195, 48,185,148, 82,188,246,218,
+107, 96, 89, 22,122,189, 30, 26,141, 6, 37, 37, 37,250, 25, 51,102, 8, 0, 64,161, 80,224,185,231,158,179,168,170,127, 64, 64,
+128,175, 72, 36,194,233,211,167, 33, 20, 10,127, 2, 0,161, 80,248, 83,116,116,116,212,184,113,227,224,229,229, 21, 72,106,114,
+116,173, 89, 59,199,113, 96, 24, 6, 86,158,214, 32, 5, 5, 5, 5, 0, 62, 81, 42,149, 63,206,157, 59,119, 90,143, 30, 61,194,
+150, 46, 93, 10, 0,194,199, 22,231,225,225,225,225,249,159,161, 81, 3,139, 16,178,191,127,255,254, 47, 83, 74,133, 2,129, 96,
+ 79, 61,227, 10, 0,144,157,157,157,238,237,237,189,217,207,207,239, 81, 3,104,107, 46, 94, 83,121,253,115,129,128,204,173,126,
+110,125,193, 70,250, 71,235,148,185, 0,136, 72, 36,222,115,245,234,213,133, 42,149, 42,223, 90,131,175, 33,158, 84, 22,225,146,
+ 37, 75, 40,128, 14, 95,125,245,213,134,195,135, 15,191, 84, 85, 85,229, 36,151,203,203, 24,134, 57, 56, 99,198,140, 89, 53,191,
+111, 49, 57, 57, 57, 23,218, 5,120,159,121, 41,106,216,115, 1,126, 74, 0, 64, 90,134, 10, 69, 37,229,103,172, 49,174, 0, 32,
+ 51, 51,211, 0,192,224,233,233, 25,245,195, 15, 63, 28,172, 49,122,192,113,143,250, 57, 27, 68, 34, 81, 7, 0,208,104, 52,109,
+ 14, 31, 62,188, 87, 36, 18,229, 52, 42, 88, 67, 98, 98,226,254, 37, 75,150,140, 79, 79, 79,255, 57, 39, 39, 39,181,102,222,169,
+ 74,165,114,163, 74,165, 26,159,149,149,181,219, 90,227,202,104, 52,154, 13, 6, 3,195,178,172,200,100, 50, 81,163,209,248,216,
+ 6, 58, 0,212,212,229,154,165, 84, 42,123, 13, 30, 60,120, 34,165,180,224, 73,232,242,240,240,240,240,252,111, 64,158,196,183,
+254, 70,197, 45,116, 33,214, 15, 80,111,137,166, 53, 26,150,104, 42,149,202,233,132, 16,139,188, 83, 53,215, 77, 83,169, 84, 95,
+ 55,162,249,184,193,122,180,177,121, 54, 68,135, 14, 29,104, 74, 74,138, 69, 65,130,205,105,122,123,123,219,136, 68,162,250, 30,
+ 42, 67,141, 17, 86,171, 65, 0, 8, 41,165,140, 53,243,180,134,166, 52,253,252,252,254, 21, 18, 18, 50,225,214,173, 91, 7,114,
+115,115,215, 63, 9,205,150, 82, 79, 83,240,152,114, 92, 3,154, 79, 4, 94,147,215,228, 53,121,205,255, 52, 77, 11,136, 0, 80,
+219,154,173,182, 78,102,171,122,143,141, 0,234,222,179,106,159, 23, 2,184, 94, 71,163,238,241,230,206, 5,128, 34, 0,119, 96,
+ 65, 87,148, 90,172,234, 69,248,239,226, 73,180, 25,121,210,173, 74,234, 26, 75, 79,128,191,181,158,199,131, 7, 15,158, 88,246,
+ 69, 78, 78,142, 30,128,190,169, 49, 53, 94,167,255,151,228, 1, 0,200,200,200,248, 38, 50, 50,114, 83,110,110,238,255,219, 28,
+ 26,129,107,126, 8, 15, 15, 15, 15,143, 5, 68, 0,104, 69, 8, 57, 14, 0,148,210, 17, 0, 64, 8, 57, 94,255,113,237,152,218,
+113,117,199,212,106,212, 63,222,212,185, 0, 48,127,254,252,133, 43, 86,172, 80, 0, 56,111,233,132, 31,247, 27, 54, 15,207,127,
+ 4,255, 95,217,161, 60, 60, 60, 60, 60,127, 11,143, 12,163,250,134, 80,125,106,141,166, 58, 70, 85,163, 52,164, 83,123,141,186,
+207, 87,174, 92,249, 25, 0,171, 58,193,136, 8, 33, 97,141, 76,208, 98,215, 95, 99, 26, 77,253,174, 57,125, 94,147,215,228, 53,
+121, 77, 94,147,215,228, 53,255,121,154, 79,234,252, 39, 65, 67,198, 90, 61,143, 23, 8, 33,199,231,207,159,191, 16, 86,108, 15,
+214,138,255,219,126, 0,132,241,154,188, 38,175,201,107,242,154,188, 38,175,201,107, 62,230,207,240,106,147,133, 14,175,251,184,
+161, 99, 77, 61,110,238, 92, 11,198, 90, 60,231,255,136, 24, 44, 30, 30, 30, 30, 30, 30, 30,158, 38, 40,164,117,188, 77,180,218,
+195,196,206,159, 63,127, 97,221, 56, 41, 0, 6, 0,178,250, 39,215,143,221,106, 10,107,198, 54, 5,111, 96, 53, 66,120,123,225,
+ 50, 95, 95,247,238, 64,141,151,175,166, 68, 1, 87, 19,175, 78,107, 76,120, 80, 14,148,163, 80,229,149,197,221, 73,163, 31, 53,
+ 34,215,108,172, 91,223,190,173, 93,132, 85,149,235, 88,142,237, 13, 0, 4,130,139, 98,177,211,187,209,215,114,203, 96, 97,176,
+116,199,118,164,163,141, 8, 31,112, 28, 58, 19, 2, 16,130, 59,122, 6, 95,220, 75,165,247, 44, 57,191, 41, 8, 33, 36,212, 31,
+147,165, 50,197, 56, 71, 39,231,246,165,197, 69, 15, 76, 38,195,143,137, 25,216,244,232,181,176,130,224,118, 36, 28, 44,230,177,
+ 28,196, 34, 1,214,221,203,160,151, 31,119,142, 60, 60, 60, 60, 22,242, 68, 50,124,235,241, 68,178,197,121, 26,229, 58,128,136,
+ 58, 70, 79, 33,128,187, 43, 86,172, 40, 93,177, 98, 69,221, 99,183, 1,116,169, 25, 87, 8,252,197, 80, 50,214, 60, 55, 54, 48,
+198,104,201, 88, 75,177,202,192, 10,245, 33,211, 64,241, 49, 8, 40,128,165, 9,217,116,163, 85,231,183, 39,131,108, 68,194,173,
+160, 16,234,205,236,123,148,197,197,134,198, 17, 33,250,217,136,133,107, 64,192,233, 25,246,205,132, 20,122,206,210,107,132,117,
+ 32, 67, 68, 68,176,155,227,168,152,229,232, 78,112, 56,110,103,198,111,177, 57,180,201, 76,184,250,248,250,186,119, 63,114, 46,
+239,185,243,251,103,162,103,120,123, 80,206, 12, 80, 6,138,224, 15, 16,189,235, 53,244,236,228, 91,125,140, 51,195,174,235, 26,
+ 12,237,227,216,226,255, 28,125,251,182,118,145,115,220,157,141,223,239,110,237,219,190, 23,161,156, 1, 41,183, 78,189, 58,107,
+238,135,253, 7,246,240,234, 28,125,173,249, 30,143, 93, 58,144,183,218,181, 13,250, 96,206,135,107, 5, 74,165,183, 29,199, 24,
+153,188,236,196,110, 95,173, 93,242, 83,151, 14,100,205,237, 7,116,171, 37,115, 33,132,144, 16, 63, 76, 17,137,165, 99,228, 10,
+219,246, 58,157, 38,133, 53,155,127, 12,107, 39, 26,242,197,170,245,225,207,244, 31,106,199, 25,242, 5,102,134,132, 28,248, 97,
+ 95,155,175,191,221, 56,140, 16,242, 60,165,212,186,140, 57, 22,179,239, 30,157,252,146, 88, 36, 36,193,195,183,216, 18, 66, 6,
+ 91,173, 1, 32,204,159,132, 82,224, 95,205,174, 11,248, 38, 62,157,182,168,215, 99, 71,127,242, 61, 1, 2, 1, 28, 36, 20,251,
+ 19, 50,248,154, 88, 60, 60,255, 52,188,188,188,206,231,230,230,246,127,194,154, 61,115,115,115,175, 62, 73,205,255,113, 26,234,
+244,114,205,194,113,127, 59,214,122,176,150, 39,164,100, 59,131, 51, 33, 52, 48, 96, 25, 0,171, 12, 44, 27,145,112,231,245, 59,
+234,214,160, 38,108, 89,251,206, 1,163, 25, 96, 24, 19, 88,198, 12,150, 49, 87, 63,102,205,224, 24, 61,150,172,139, 1, 24, 13,
+186,135,119,216, 9,192,211,210,107,136, 33,216, 29,247,219, 25, 23,194,148,227,192,142, 21, 51,178, 84,149, 51,206, 93, 83, 21,
+133,250,145, 5,137,153,216,110,205, 77,252,252,254, 89,216,243,211,201,156, 13, 91,126, 72,226, 64,225,108, 39, 11,154, 16,149,
+224,179,235,167,243,217,235,183,233,147, 40, 71,225,100, 47, 11,122,253,249, 20, 95,107, 94,135,250, 8,171, 42,215,125,187,101,
+123,107,223, 54,109,136, 57, 99, 57, 96, 54,192,199,119,152,240,195, 57,111,121, 46, 93,245,205, 90, 0,175, 55,117,126,112, 0,
+ 9, 9,236,208,241,189,157, 7,174,248,106, 43, 11,140,191,158, 88,152, 74, 40, 53,187,185, 5, 75, 62, 89,190, 90,190,104,193,
+156,119,131, 3,200,213,164, 52,154,216,148, 14, 33, 68,208,209, 15, 71, 63,251,236,139,206, 3,159, 29,105,199, 26, 11,133,250,
+ 74, 77,224,214,237,223,127, 28, 28,218, 67,209,167,171,183,164,240,183,169, 68,167, 41,129,137,202,101, 3,186, 15,116,208, 77,
+ 24,107,254,126,215,190,233, 0,190,180,102,205, 44,243, 71,173, 17, 19, 3, 27, 0, 98, 88, 27, 64, 8,128, 2,255,186, 21,123,
+126, 10, 83,122, 29,224, 76, 53, 70,175, 9,224,204,160,117,254,125,234,149,237, 0, 48,213, 90,125, 0, 16, 16, 60,119,238,220,
+117, 79,181, 58, 47, 98,221,186,207, 22,132,248,147, 83, 32,216,125, 47, 29, 23, 90, 98, 20,242,240,240,252,103,162, 84, 42, 89,
+149, 74,245, 68,187, 54,120,121,121, 13,203,205,205, 61,249, 56, 26, 74,165,242, 3, 0,111,213, 60,221,170, 82,169,190,120,220,
+121, 69, 68, 68,120, 83, 74, 91, 3, 0, 33, 36,255,250,245,235,205, 22,139,230,177, 14,107, 13, 44, 27, 80, 14,248,237, 5,128,
+ 88,151,174, 8, 0, 20,176, 1, 17, 2,230, 74,140, 26, 49, 8,110,174,158, 0,171, 5,216, 42,128,209, 1,108,245, 79, 81, 97,
+ 22,192,104,129,194, 83, 96, 40,253,203, 94,106,179,152,203,129,130, 31,241, 92, 47, 95, 56,217,219, 96,214,203, 33,110,155,143,
+ 36,111,221,122,228,254, 32, 0,227, 44,154, 43,165,232,217,181, 61, 54,108,209, 38,253,124,190, 96, 48, 0, 12,143,116,251,165,
+103,167, 54, 62,235,183,233,147, 78, 92, 40, 25, 2, 0, 67,251, 56,158,234, 17,214,218,151,179,126,151,236, 17, 44,199,246,241,
+109,215,149, 48, 15, 87, 65, 32, 40, 69,101,101, 17,178,211,118,192,205, 99,176,128,225,184,126,205,157, 47, 23, 97,254,172, 15,
+ 86,138,180,149,106, 35,101, 10, 56, 15,187, 34,137, 24, 68,200,105, 47, 25,171,242,203, 42,103,255,107, 2,243,222,252,207,230,
+ 3, 24,223,148, 78,136, 63,166,175, 89,181,190, 83,239, 30, 65,238,249,151,103,145,202,114, 53,204, 84, 46,123,254,153,222,112,
+110, 19,194,169,111,173, 33, 50,207, 65,112,246, 11, 64,206,221, 61,200,186,115,136,244,237, 17, 37,219,185, 87, 50, 1,141, 24,
+ 88, 29, 60, 73,159,193,207,245, 56, 16,208, 70,233, 73, 41, 7,142,227, 64, 41,135,215,199, 13,193,130,175, 83,161,173, 98, 48,
+ 98,208, 83,189, 93, 29,133,134, 21,239, 69,130, 82, 14,217,170, 98,221,175, 87,146, 6,166,230,210,102,191,249, 17,224,155, 46,
+189,250,247,185,115, 45, 54,216,164, 58,142,136,209, 43,146, 8,240,104,187,145, 2,125,110, 70,111, 15, 6,182, 55, 39,213,176,
+ 62, 33,164,163, 31,216,135,191,175,132,119,215,201,194, 77,219,127,105, 85, 94,156,251,250,161, 31,190,125,233,219,205,155,246,
+160,133, 70, 27, 15, 15,207,127, 30, 42,149,234,137, 27, 89, 87,174, 92, 81, 61,142,145, 21, 17, 17,209, 15,192, 42,149, 74, 5,
+ 0, 80, 42,149,171,122,246,236,185, 24, 0, 26,136,206, 40,167,148,142,191,126,253,122,131,187, 67,181,188,251,238,187, 74, 0,
+126, 55,110,220,168,189,134, 95, 68, 68,132, 95, 67, 99, 21, 10, 5,219,165, 75,151,204,181,107,215,170, 90, 50,255,255,101,172,
+ 53,176,146,242, 47,205,238,106, 44,209, 1, 64, 82,115,131,105,189, 84, 75,189,153, 93,185, 99,253,235, 43, 67, 3,157, 81,161,
+ 49,226,236,165,204, 26, 15, 22, 3,150, 53, 63,250,119,112, 47, 55, 60,205, 76,197,151,251,239,131, 97,185, 21, 77,105,214,199,
+196,113,175,132,247, 27,251, 3, 71,169, 84,161, 16,148,183,243,113,117,127,111, 66, 23,193,172,151, 67, 81, 84,101, 50, 10, 0,
+ 0, 32, 0, 73, 68, 65, 84,165,103,198,134,248,145, 95, 19, 51,232, 22,139, 52,185,191,150, 86,170, 41, 86,254,231, 99,220, 95,
+ 59,242, 52, 55,207, 90,186, 4,201,123,142, 30,218,215, 1,230, 18,176,218, 12, 24, 89, 14,121,121, 90,164,171, 36,112,228,254,
+ 92, 59,181, 49, 77,142, 67,231,214,173, 61, 21, 87,206,204,203,112,183, 47,149,184,202, 89,137,132,112, 84, 96,166, 66,163, 49,
+ 73,239,172, 28, 36,230, 56,116,110,232,220,186,154,114,185,253,107,125,251, 15,119,124, 24,253, 22,145,251, 12,133,187,191, 55,
+ 50,226,118,160, 32,254, 56,138, 11,178,136, 35, 45,133,162, 67, 0,134, 70,189,140, 85,211,187,163,162,162, 18,164, 48,205, 81,
+ 42,149, 57, 53,166, 73, 5, 24,191,230,243, 79, 61, 69, 34, 65,245,235, 73, 25,128,154, 1,106,134,166,210, 0,163,209, 8, 27,
+ 9,133,173, 13, 5,106,182, 97, 89,214,168,232, 60,112,254, 59, 0,174, 54,164, 89,151,248,116,154, 16,234, 79, 46,131, 50,193,
+148,173, 2, 1, 46, 39,164,211, 71, 70, 79,152, 63, 9,237, 54,112,210,191, 8,240, 77, 83,107,111,140,176,182, 24,209, 61,216,
+206, 86,206, 36, 33, 39,102, 6, 82, 89, 27,234,209,233, 45,188, 60,126,186, 98,211,214,205, 35, 9, 33,211,234,198,160, 89,250,
+190, 91, 3,175,201,107,254,183,106, 58, 58, 58,250,183,109,219,118,177,217,108,238, 39,145, 72, 60, 76, 38, 19, 56,142,203,151,
+ 74,165,151, 50, 51, 51, 63, 41, 47, 47, 79,255, 79,152,103, 93, 78,157, 58,101,177,145,101,137,166, 88, 44,198,201,147, 39, 83,
+ 44, 53,178,234,107, 10, 4,130,221, 7, 15, 30,196, 15, 63,252, 0, 0, 56,127,254, 60, 58,116,232, 96,219,208,185,217,217,217,
+182, 47,190,248,226,110, 0, 62, 77,105, 62,120,240,192,255,211, 79, 63,197,193,131, 7, 1, 0,187,118,237, 66, 96, 96, 96,131,
+243,185,125,251,182,112,209,162, 69,254, 0,254,100, 96,253, 59,222,163,127, 26,143, 12,172,154, 30,187,205, 5,233,165,181,182,
+ 23,119,133,217, 12, 0,105,214, 94, 44, 49,149,126,222, 37, 80, 60, 36,250,208, 55,253,108,164, 2,124,188,238,189,236,194, 66,
+205, 83, 34, 97,117,192, 32,195, 66,224,236, 36,141, 93, 49,163,139,111,105,185, 30, 63, 95,200,189,152,144, 70,173,114,133, 38,
+164,210,179, 0, 30,221,240,195,218,146,192,215, 63, 60,187,127,255,231, 67, 58,207, 25,223, 25, 71, 99, 50,231, 0,216,210,184,
+ 66, 53,148,227, 64, 41,243, 40,168,189,230, 96,205,150,211, 31,199, 56, 74, 1,106, 6,181, 50, 62,113,233,210, 49,162,163,251,
+ 15, 15,177,149,137,190,154,250,246, 20, 7,115,113, 34,202,203, 88,228, 23,105,145, 85,232, 4, 86,222, 14,201, 9, 87, 89,161,
+ 64,208,108,252, 25, 17,160,130,154,181,246,206,114,185, 32,164,199, 59,158,229,241, 11, 43,100, 66,179,208, 41,252, 83,123,245,
+221, 53, 15, 25, 67, 65, 37, 17,192,212,156,142,131,163, 99, 7,131, 38, 83, 88, 94, 86, 12,167, 78, 33, 24,250,252, 72,124,252,
+102, 71,104, 52, 90, 20, 22, 95,161,237,219, 56, 18,253,205,189,248,240,181, 96, 20, 23,229,193,104, 6, 4, 21,250, 18,189, 81,
+ 95,217,152, 38,165,216, 52,251,189,185,175,180,241,110,101, 91,155, 44, 64, 57, 22, 93,194, 2,240,108,255,158, 56, 27,123, 5,
+215,111, 38,131,163, 92, 77, 50, 1,139,156,130, 50,181,222,196,238,176,230,245,164, 28, 83,237, 9,173, 71, 77,220,149,213, 94,
+166, 78,157,136,130,213,226,163,167, 66,236,223,156,247, 90, 27,123,123, 41,129, 94,206, 66,175, 55, 67,147,244, 53, 92,189, 59,
+ 65, 97, 99, 67,186,118,173, 18, 1,120, 34,253, 15,121,120,254, 41,140, 25, 51,198, 70,173, 86,199, 12, 31, 62, 60,100,208,160,
+ 65,138,126,253,250, 65,171,213,226,244,233,211,208,233,116,109,124,124,124,218,156, 57,115, 38,170,103,207,158,137, 62, 62, 62,
+145, 63,254,248,163, 85, 49,178, 53,212,222,175,158,104,112,184, 84, 42, 69,108,108,236, 19,245,100, 73,165, 82, 92,187,118,205,
+ 98, 35,171, 46, 90,173, 86,210,186,117,107,184,186,186,130,101, 89,104,181, 90, 28, 57,114, 4, 21, 21, 21,224, 56, 14,114,185,
+ 28,107, 78,149, 67,127,255, 32,182,126,245, 41,202,203,203, 37,205,105, 22, 21, 21,145,160,160, 32, 24, 12, 6, 48, 12, 3,189,
+ 94,143,115,231,206, 61,122, 46, 18,137,176,236,160, 26,134,228,253,216,185,105, 13,138,138,138,158, 88,119,144,230,176,208, 22,
+249,175, 64, 4,252,177,160,191, 99, 97, 44,203, 44,216,188, 99,127,236,130, 25,227, 48,253,181,129, 62,159,124,121,120, 80, 98,
+ 26,221, 9, 0, 33, 1,228,245, 9,195,218,251, 58,217,138,177,244,187, 27, 0,232,130,199,189, 94,124, 38, 77, 14,109, 71,230,
+ 28,142,201,138, 89,248,102, 87, 4,248, 56,116,104,215,142, 72, 83, 83,105,243,241, 62,156, 25,206,118,178,160,225,145,110,191,
+128,114,112,178,147, 5,131,178,112,178,151, 5, 13,237,227,120,138,163, 20, 78,182,146, 96,218,128,167,171, 49,122,132,201,222,
+150,139, 5,111,219,218, 59,249,206,158, 58, 65, 62,124,248,139,114, 91, 41, 69,113,226, 73, 84,208, 80, 24,109,109, 65,117,101,
+ 72,127, 16,207,158,186,112, 35, 87,230,234,249,126,179,211,100,113, 81,149,125,111,116,219,246,131,156, 10,111,124, 88,224, 63,
+112,175,159, 0,172, 64, 27, 27, 85, 96,107, 31, 34,185,124, 59,158,225, 88, 92,105, 78, 71, 83, 81,145,105, 54,193, 83,111, 22,
+219,167, 94,219,142,249, 19, 66, 81, 86, 90, 8,189,129, 65,153,150, 49,121,186,153,100,250,210,187, 48, 24, 25, 24, 76, 20, 98,
+133, 18,103, 98,227,139, 56,198,124,170, 49,205, 84, 21,189, 5,192,174,238,177,118, 74,210,101,158,179,252, 22,216, 42,100, 61,
+ 84, 97,231, 79,177, 93,107,198,181, 28,202,128, 50,127,252,141,174, 13,126,111, 73,112,123,199,182,164,135, 92, 46,254,106,233,
+252,225, 33,145,161,172,140,232,243, 64, 0, 40,108, 68, 48,216,176,112,180, 9, 0, 53,105,168, 78,175, 47, 75,136,255,255,107,
+ 17,196,195,243,159, 72,112,112,112,107, 71, 71,199,132,247,222,123,207,101,244,232,209,143,140,129, 29, 59,118, 96,253,250,245,
+248,248,227,143, 97, 54,155,177,121,243,102,197, 79, 63,253,212,227,155,111,190,201,105,211,166, 77,104, 86, 86, 86,190, 5,242,
+ 4,128, 4,213,247, 46, 1,170,141, 43,118,233,210,165,244,227,143, 63, 70,221, 99,148,210,102,191, 84, 54,132, 84, 42,133, 84,
+ 42, 69, 82, 82,210, 19, 49,178,196, 98, 49, 36, 18, 9,164, 82, 41,238,223,191,111,181,145,197, 48,140, 48, 39, 39, 7, 21, 21,
+ 21,120,118,228, 72,172, 95,185, 18,253,250,245,195,160, 65,131, 64, 41, 69,116,116, 52,158,118, 78,134,203,200,103,112,239,222,
+ 61,152,205,102,139,118,166,114,114,114, 80, 92, 92,140, 33, 35, 71, 98,203,183,223,162, 91,183,110, 8, 10, 10, 2, 0,196,196,
+196, 96,160, 87, 38,236,130, 6, 33, 57, 57,185,133, 43,183,158,191,211, 22,249, 59,248,219,203, 52,196,167,210,223, 67,252,201,
+241,151,135, 71,140, 24, 57, 32, 4, 91,246,255,250,105, 72, 8,217, 15, 0,174,142,178,229,175, 13, 15, 64, 98, 90, 41,162,175,
+169,142, 39,166,211,223,159,196, 53, 57, 22,110,174, 78, 10, 64, 32,133,206,200, 50, 14, 14,205,151, 61,224, 64,161,232, 56, 31,
+ 19, 70,223,243,233,217,201,199,135, 82,166, 38, 99,112, 45, 94,127, 62,197, 55, 34,212,195,183,122,203,203, 12,135,167,247, 2,
+ 92,131, 30,219, 63,209, 55,220,230,204,251, 51,103,244, 26, 62,242,101,185, 68,225, 10,174, 42, 27,230,146, 59, 40, 78, 63, 15,
+131, 60, 28,133, 57, 25,216,127,244,231,242,164,116,117,133, 80, 40, 56, 43,114,244,152,123,238, 92,122,163,222,161, 90,244, 66,
+172,248,120,241,130,225,251,247,236,115,148, 43,251,226,193,209, 97,101, 82,161, 89,230,238, 21,136, 42,198,158, 93,189,237,184,
+147, 22, 88,217,156,142, 78, 91,113,232, 92,244, 47,227,218,123,246,177,207,136, 63, 14,157,206, 8,131, 25, 8,235,214, 31, 44,
+ 71,165, 68, 64, 56, 7,161,144,168,213, 37, 32,102, 78,125,233,102, 70,222,229,235,105, 66,131,160,121,237,186,136, 36,194,153,
+ 35, 7,117, 1,216, 42, 60,255,108, 24,214,109,139,158, 1, 96,146, 53, 26,127,129,154, 65,217, 42, 80,160, 79,168, 63,249,142,
+ 2,125,226, 78,173, 11,238, 62,116, 14, 96,133, 7, 43,204,159, 12,237, 20,172,220,190,238,211, 5, 46, 46,238, 62, 66,176, 85,
+ 32, 76, 5,229, 74,126,135, 72,251, 0, 14,222,195,193, 58,246,198,166,111, 87, 87,114, 28,221,223,146, 18, 21, 60, 60,255,100,
+244,122,253,161,149, 43, 87,186,140, 24, 81,157,237, 94, 89, 89,137, 43, 87,174, 96,235,214,173,176,181,253,227,239, 36,165, 20,
+195,134, 13, 3,165,212,101,201,146, 37,135, 0,244,106, 76,179,119,239,222, 35,215,174, 93,251, 48, 34, 34,226, 1,170,107, 28,
+ 73, 0, 8, 1,208,115,231,206, 9, 0,160, 71,143, 30,236,181,107,215, 56, 0,116,252,248,241, 98, 59, 59,187, 14,149,149,149,
+ 23,172,157,127,173,129, 37,149, 74,145,155,155,251,216, 70,150, 88, 44,126,164, 39,145, 72,144,155,155,107,149,145,197, 48,140,
+232,196,137, 19,184,121,243, 38,150,118,237,138, 89,158,158,112,117,117,197,133, 11, 23, 64, 41,133,173,173, 45, 74, 74, 74,176,
+127,255,126,244,239,223, 31, 12,195, 52,235,193, 2,128, 35, 71,142, 32, 46, 46, 14,203,186,119,199, 12, 91, 91, 56, 57, 57, 33,
+ 38, 38, 6, 0, 32,147,201,144,155,155,139,115,231,206, 33, 50, 50,178,165, 75,255,159,199, 98, 3, 43,146, 16, 17,241, 65,107,
+179,169, 10,148,161, 0,129, 50, 36,132, 72, 18, 19,173,255,150, 32, 0, 62,220,176,237,248,240,117, 11,158, 39,147, 95,234,170,
+252,228,155,243,211, 0,224,205,177,129, 94, 10,153, 8, 27,246, 39, 82, 1,240,161,181,186, 13, 17, 18, 66, 36, 2, 1,166, 61,
+219, 59, 8,170, 34, 35,210, 30,150,255,154,152, 78, 45,218,210,137,222, 57, 1,187, 14,197,100,175,223,254,231,140,193,237, 71,
+226, 30,174,217,169, 79,162,160,112,146,139,131, 39, 61,255,116,179, 89,132, 61,194,100,111,207,155, 51,167,215,168, 87,231,202,
+205, 57,135, 97,200, 60, 1,176, 58,232,180, 4, 21, 76,123,228, 61,204,193,210,117,251,178, 13,102,193, 43, 55, 18,245, 86, 25,
+150,201,201,180, 50, 36,128,140, 94,249,249,226,179,159, 45, 93, 98, 39,203,141,174, 16,139,160, 21,184,246, 19, 47, 95,188, 81,
+164, 41, 55,190,152,154, 69, 53,205,233, 24, 4, 88,249,249,154, 47,135,191, 53, 97,116, 82,160, 79,164, 43,155,159,230,170, 43,
+ 47, 47,216,123, 42,174, 53,170,191, 57, 18, 0, 72,205, 40, 70, 97,137,150, 97, 25,243, 5,123, 19, 62, 73,200,177,192, 27, 88,
+ 67,128, 7,105, 53,122,120,231, 87, 91, 57, 73, 81,165, 45,133,187,179, 4,131,251,180,123, 53,192,131,204, 75, 83, 83,171,106,
+140,212,165,118,139, 48,118,235,128, 96,112,166, 96,202,153, 97,204,218,109,189, 14, 48,103,206,184, 54,142, 46,182, 70, 1, 97,
+181,128,216, 25,144,182, 34, 2,185, 31,132,114, 95,100,166,220, 96,230,188, 51,174, 56, 51, 51,255,123, 55,138,199,206,228,225,
+225,249,167,145,149,149,245,218,194,133, 11, 47,247,236,217,211,195,205,205, 13, 97, 97, 97, 56,118,236, 24,222,127,255, 15,103,
+124,120,120, 56, 0,160,184,184, 24,159,127,254,121,190, 74,165,122,173, 41,205,132,132,132,164,221,187,119,247,233,220,185,179,
+ 81, 34,145,148,162,198,200,202,202,202, 18,105,181, 90, 98, 52, 26,169,173,173, 45, 39,147,201,204, 99,198,140, 49, 93,187,118,
+173,131, 86,171,205,106,201,252,107,141,161,238,221,187,223, 45, 43, 43, 43, 39,132, 60,118, 9,135, 90,227, 42, 56, 56,184,149,
+209,104,100, 1,148,180,164,132, 3,195, 48,232,222,189, 59,206, 93,188,129, 83, 23,239,162,178, 48, 13,227, 95, 28,140,224,224,
+ 96,156, 62,125,186,165,211,171,214, 60,119, 25, 49, 55,238, 67,157,149,136, 9, 47,191,128,160,160, 32,156, 59,103,113,133, 36,
+158, 6, 16, 1, 64,115, 46,185,142,109, 72, 23,143, 48,233,174, 15,159,111, 23, 34, 10,251, 24, 68, 36,199,225,237,199,122, 47,
+248,236,187,164, 78, 94,100,252, 93, 11,178,189,234, 82, 19,152,188,239,118, 98,240,171,207,247,243,193,150, 31, 21, 31, 1,192,
+216,103,253,113, 45,177, 16, 87,227, 11,246, 37,180,176,102, 81, 93, 58,121, 16, 5,108,177,239,243,185,163, 34,219,120,183,198,
+214, 31, 46,131, 80, 28,178,228, 92, 74, 41,237,217,217, 23,235,183,215,207, 24,244,244, 93,179, 83,159,116,250,183,138,161, 0,
+240, 92, 47,219, 83, 17, 29, 93,124,155,243,100,216,136, 5,147,135, 62,255,154,156, 81,159, 6, 87,242, 35,196, 82, 9,170,180,
+ 44,242, 10, 12,168, 82,200,241,235,165, 11, 85,149, 58,102,206,157, 20,166, 69, 94,187,196, 52,154, 22, 30, 72, 30,106,171,170,
+ 60,237, 92,218,105, 5, 4,180,210, 40,166,113,137,185,218,132, 44,122,223, 18,141,212, 84,106,236,229, 77,250,110,218,249,227,
+ 98,177, 88, 58, 86, 40, 4,113,119,178,109,245,221,134,101,176,183,183, 3,101, 52,160,134, 34,140,126,243,179,194,187, 15, 76,
+254, 0, 16, 24, 72,236,250,117,145,236, 20, 9, 72,206,175, 55,141,139,154,187, 6, 17, 98,234,248,231,187,136, 57,179, 22, 51,
+151, 28,192,166,229,207, 99,194,200,142,226, 19,191, 38, 79, 5,240, 73, 75,214, 14, 0,224,170,183, 8,123, 77,190,152, 68,128,
+203, 20,232,115,227,248,242, 96,192,242,157,199,110,221,136, 88, 36, 34, 29, 59,122, 25,197,108,206,126, 16, 27, 47, 42,116,139,
+ 4,108, 59, 16,106, 23,134,175, 55, 44,174,220,178,117,235, 25,142, 96,105, 82, 70,211, 37, 47,120,120,254, 87,161,148,166, 57,
+ 57, 57, 13, 25, 54,108, 88,244,233,211,167, 93,194,194,170,219,205,197,197,197, 1,192,163,173, 40,181, 90,141, 87, 94,121,165,
+ 40, 47, 47,111, 8,165,180,201,152, 94,141, 70,147,126,248,240, 97,143,170,170,170,136, 69,139, 22,169,219,182,109,171, 49,155,
+205, 84,163,209,128, 97, 24,218,170, 85, 43,113,183,110,221, 72,104,104,104, 85,116,116,180,107,118,118,182, 6, 64,102, 75,230,
+255,214, 91,111,225,167,159,126, 2, 0, 60,137,186, 88, 18,137, 4,195,134, 13,243,186,114,229, 74,110,141,102,139,235, 98, 81,
+ 74,113,231,206, 29, 92, 74, 97, 33,181,117, 70,102, 82, 5,206,253,124, 20,227, 39, 79, 1,195,180, 60, 90,225,246,237,219,216,
+127,238, 54, 60,188,218,161,220,112, 7, 71,142, 28,193,180,105,211, 30, 75,179, 37,252,147,182, 7,129, 58, 30,172,134, 22,212,
+174, 29,145,202,140, 88, 50,248, 41,175,185, 99, 6,182, 19, 50, 58, 21, 56,142,131, 16,128,155,189, 0,219,182,108,242,255,241,
+240,201,216, 78,190,194, 47, 97,228, 62,188,171,166, 58,139,175, 44,192,146,181, 59,126, 27,187,123,217, 51,162,105, 47, 5,187,
+ 0,128, 68, 44,192,134,125, 9, 12, 4, 88,242, 56,139,234,229, 77,108, 42, 37,152,220,218,207,241,163, 5,239, 12,119,137,236,
+ 25,136, 11,177,241,248,114, 79,236, 69,169, 51,118, 89,170, 67, 57,230, 79, 1,237,213,199, 26,112,126, 53,144, 89, 88, 31,150,
+163,173,165, 10, 55,232, 51, 79, 66, 36,149,129, 97, 76, 40, 84,235,144,145,207,193, 70, 41,198,181, 59, 89, 85, 47,188, 58,250,
+132,165,115,171, 15, 33,132,244, 9,183, 81, 46, 89,190,218,187,170, 74,195, 84,148, 21, 49, 34, 73,172, 72, 33,151, 89, 18,215,
+240,136,216, 28,170,127, 38, 92,210, 13,148, 19,202,132, 84,183, 96,206, 68,219,220,228,211,104,223, 74, 5, 2, 10,185,114, 56,
+236,109,133,146,190, 93, 36, 15, 1,192,207,213, 81,250,249, 39,239, 59,206,158,183,244, 82,115,218, 33, 33, 68,210, 41,176,245,
+236,176,246, 46,184,112,245, 30, 46, 94,207, 74,184,248,123,114,104,255, 30, 74, 4,250, 59,205, 10, 9, 33, 43, 91,226, 17, 5,
+240,104,139,176, 54,139, 48,204,159,132, 70,140, 88,212, 96,246, 96, 99,248,221, 4,151,236, 79, 65,136, 16, 20, 4,208,231,130,
+201,222, 13,161,255, 12,122,232,232,242,170,173, 91,182, 46, 75,204,176, 46,233,130,135,231,127,145,178,178,178, 59, 10,133, 98,
+112,151, 46, 93,118,204,156, 57,211,254,213, 87, 95, 85,190,245,214, 91, 2, 0, 80,171,213,220,250,245,235, 85, 95,125,245, 85,
+121, 81, 81,209, 36,147,201,116,183, 57,189,154,192,156, 43,219,182,109, 43,188,124,249,114,232, 83, 79, 61,165,136,136,136,224,
+220,221,221, 37, 58,157,142,205,206,206,174,138,141,141,101, 83, 82, 82, 28,203,202,202, 82, 0,164,182,100,251, 94,169, 84, 66,
+ 32, 16,124,226,227,227,179, 56, 55, 55,183,211,147,136,193,106,223,190,189, 18, 64,138,151,151, 87,123,107,183, 7,235, 35, 18,
+137, 80, 90, 90, 10, 77, 78, 42,116,197, 69, 8, 18,234, 16,238,226, 6,123,123,251,199, 50,134,202,203,203, 33, 50,168,145,118,
+ 39, 11,101,249,153, 8,105,211, 29,182,182,182, 48, 24, 12, 45,214,108, 41,255, 20,227, 10,104, 98,139, 48,212,135, 76,115,150,
+ 98,253,196, 49,254, 18,255, 54,222, 48, 22,198,225, 86,106, 37, 22,125,223, 35, 81, 40,177, 55, 76,127,253,217,110,253, 7,181,
+194, 51,145, 61, 72,219, 54, 78,179, 86,174,220,248,175, 80, 95,242,126,194, 67,186,193,146, 11, 39,164,210,244,142,254,100,235,
+249,235,185, 83,189, 91, 85,129,130,226,252,141, 60,220, 77, 45,221,122, 47,157, 54,152,186,219,232, 92,219,147, 65, 34, 34, 56,
+ 64, 89,106,227,104,111,171, 9,239, 23,236, 54,168, 79,103,193,144,254, 17,144,136,128,203, 87,111, 99,206,242, 67,191,115, 82,
+ 58, 60, 46,206,178,237, 65, 80,238, 47,134, 83,117,198, 32,243,167,140, 65, 74, 41, 5,199,160,185,122,147, 66, 1,201,215,170,
+111,180,150,218,135,192, 84,252, 43,212,234, 74, 36,164,153, 80, 9, 31,148,230,228,128, 82,246,225,146, 37, 63,182,248,127,136,
+155,155,155,187,127,135,192,118, 95,109, 57, 8,147,161, 28,105,137,219, 81, 89,145,143,229, 43,126,110,231,237,237,253, 76, 78,
+ 78,206, 5, 75,181, 8, 72, 96,244,175,251,220, 65, 1,161, 72,134, 19,155,127, 64,145, 72, 14, 55, 71, 9, 56,125, 1, 38,191,
+ 61,222,113,216,240,241,142, 0,240, 48,245, 54,124, 93, 44,179,171, 77,101,136, 26, 59, 41,200, 9,172, 14,187,142,220,214, 11,
+ 8,134,236,250, 57, 33,181,127, 55, 39,155,177,207,182,113,254,100, 83,217,139, 0,246,181,100,253,148, 99,255,148, 69,216,146,
+236,193, 31, 41,101, 59,250,147,212,125,231, 10,237,198, 12,235, 42,151,136, 8,161,250, 92,112, 68, 66, 54,124,179, 77, 35, 37,
+216,220,146,185,241,240,252, 47,162,211,233,226, 8, 33,157, 62,248,224,131, 87, 22, 46, 92,216,207,214,214,214, 31, 0,180, 90,
+109,186,217,108,190, 8, 96, 31,165,244,175, 53,110, 26,161,198, 96, 74, 33,132,164,167,166,166,122,236,218,181,203, 9,128, 77,
+205,175,245, 0,202, 0,168,173,209,172, 79,173, 49,165, 84, 42, 23,183, 84,163, 62,181,198,148,151,151, 87,251,150,156, 47, 20,
+ 10, 89,129,160,186,179,143, 76, 38,195,165, 75,151, 48,180, 79, 95,220, 62,151,133, 96, 15, 31,244, 31, 63, 17, 71,206,159,135,
+ 80, 40,172, 29,111,213,125, 68, 36, 18,225,242,229,203,120,105, 68, 36,142, 28, 57,130,128,238, 93, 48, 99,198, 12,252,242,203,
+ 47, 16,137,248,110,122,143, 67,227,175, 30,197, 39,103, 15,124, 38, 1,103,198,193,189,171,112,246,186,206,120, 63, 23, 31, 6,
+229, 96,253, 65,104,184,130,162,159,166,158,136, 73,251,226,141, 73, 35, 20, 3,158,121, 22, 3,250,245, 23,133,118,121,230, 35,
+ 0,143, 12, 44, 66, 72, 88, 83,181, 50, 88, 51,150,109,254, 41,105,202,129,147,201, 4,140, 6,227,158,143,160,172, 25,203,154,
+154,112, 67,154,142, 10,187, 3,151, 47,197, 58,131,173, 68,126,198,121,155,214, 30,254, 0, 53,227,193,131,100,124,189,237, 8,
+ 23, 19,123,127,183, 81,136,153,169,137, 84,107,169, 38, 0,128, 99,224,104, 39,253, 75,198,160,147, 92, 28,252, 92, 47,219, 83,
+148, 82,106,175, 16, 7, 55, 84, 27,171,190,166,222,204,109,222,189,115,203,234, 55,223,124,203,182,216,144,139,228,236, 4,232,
+133, 94, 16, 42,218, 33,225,198,233,170, 42, 51,215,108,233,136,166, 94,207,162,162,162,130,184, 27, 37, 56,176, 99, 5,204,102,
+ 3, 10,242,170,109,212, 60,117, 5, 28, 28,188, 98,173,209, 52, 49, 92,121,212,232,201, 18,185, 13,228,227,199, 14,151,166,170,
+ 12,232, 26,100, 15, 0,160,166, 34, 36,197, 92, 66,127,247,234, 96,200,212, 36, 33,124,159, 82, 90, 52, 79,123,123,201,204,161,
+125,189,144,158,149,143, 75,113,185, 59,211,114,169, 42,192,139,236, 76,125, 88, 54,117, 84,127, 95,172,219,157, 56, 3,141, 24,
+ 88,141,105,214,100, 11,246, 1, 53,131, 50,122, 80,160, 79,152, 63, 9,181, 36,115,176, 33, 77,145, 0,175,174, 61,144,185,232,
+ 96, 76,225,168,185,111,245,117,232,221,107,168, 20,156,153,106,116, 6,115, 98, 58,173,104,137,230,227,194,107,242,154,255,173,
+154, 53,198,206,238,154,159, 39,169,169, 66,189,186, 76,143,163, 9,252,121, 59, 80,165, 82, 9,149, 74, 37,219, 92,144,187, 5,
+154, 87,235, 60, 62, 89,227,189,106,210,139,213,128,166,170,103,207,158, 46, 35, 71,142, 4,195, 48, 72, 73, 73, 65, 86, 86, 22,
+ 70,190, 49, 9,206,206,206,184,154,152,136,148,148, 20, 44, 94,188, 24, 12,195,224,218,181,107,127,169,200, 94, 95, 83, 44, 22,
+155,186,116,233, 34,121,225,133, 23,192, 48, 12,210,210,210,144,153,153,137, 25, 51,102,192,209,209, 17,137,137,137, 72, 75, 75,
+195,226,197,139, 97, 48, 24,144,158,158,254,151,157,133,127,199,103,233,159, 70,227, 6, 22, 1, 11,206,140,242,235, 75,240,221,
+113,152, 76, 12,130, 19,178,105, 70,157, 17, 27, 59,123,147, 99,119, 18,146,210,227,174, 14,144,162,226, 46, 0, 88,245,205, 33,
+ 57,155,230, 69, 4,137, 52, 96, 52, 14, 40, 60,133,140, 92, 77,101,114, 54,205,179,118, 17,148, 99, 9, 88, 29, 80,126, 3, 71,
+142,199, 64,102,115, 11,215,111, 38,177, 87,226,146, 15, 8, 40,150, 37,102,208, 7,214,107, 82,216,117, 91,143,137,207,167, 86,
+103, 12, 82, 51, 40,199,192,177,247, 62, 76,122,254,105,223,136, 96, 39, 95,112,102, 80,106,134,243,192,243,192, 34,155, 38,245,
+174,197, 27,182,244, 13,183,121, 81, 83, 81,212,243,217,254,145,182,173, 2,199,162,252, 65, 34, 18,110,158,173,186,113, 55, 57,
+246, 90,188,161, 89, 3,171, 41,188,188,188,250, 13, 28, 24,132,113, 19, 23,192,100, 40, 67, 90,194, 54,104, 42,242,113,233, 55,
+ 59, 36, 61,172,232, 5,224,130,165, 90, 87,226,205,161, 0,208,167,147,228,161,131,212,216,250,181,151, 70, 64, 38,210,131, 51,
+107, 64, 76, 69, 72, 45, 49,149,191,184, 36,135, 5, 0,133, 13, 17,217,138,202, 29, 44,209, 13, 9,112,237,160,144,152,177,235,
+104, 2, 56, 82,221,102,137, 35,216,184,235, 88,234,212,101,211,187, 34, 36,192,185, 75,237, 6,188,165,115,165,192,191,110,252,
+188, 52, 88,159,240, 17, 40,103,198,229, 47,156,131,251,126, 80,250, 47,180,176,194,250,221, 84,154, 11, 96,106,199, 54,100,211,
+172, 79,127,249,168,123, 88, 98,159,247,166,142,114, 0,225, 27,163,243,240,240,252,253,232,116,186, 41,243,230,205,219, 36, 20,
+ 10, 91, 1, 32,148, 82, 24, 12, 6,209,214,173, 91,197, 12,195, 8,132, 66, 33,107, 99, 99,195,196,197,197,153, 57,142, 43, 52,
+153, 76, 83,154,211, 52, 26,141,169, 95,127,253,117, 59,179,217,252, 40,227,208, 96, 48, 96,247,238,221, 48, 24, 12,144,201,100,
+176,179,179, 67, 90, 90, 26, 8, 33, 38,150,101, 83,255,173,139,252,135,210,212, 77, 99,105,239,168, 37, 75, 64, 65, 64,240,113,
+ 61,227, 10, 0,112, 39,135,170, 66,125,200,156,208,240,103,170, 99,166, 8,150, 90, 59, 1, 61,203,190, 20,209, 45,112, 63, 0,
+ 24, 56,118,130,181,231, 3, 64,133,190,106,108,120,143, 94, 7, 56, 74, 69, 12, 75,183, 10, 4,248, 73, 15,220, 75, 77,111, 62,
+115,174, 49, 84,121,101,113, 67,251, 56,210,218, 22, 56,143,182, 5,107,202, 49, 80, 74,255,104, 67,183,200, 6, 69,197,134,102,
+163,169, 47,221,210, 63,215, 35, 76,246,246,233, 11, 55, 39,179, 28,109, 45, 20,144,124,189,153,219,252,184,198, 21, 0,228,228,
+228, 92, 8, 9, 32,103,238,244,241,120,206,173,166,204,106, 81, 25, 80, 84,142, 51, 57, 57,154, 11, 45,209, 44,173, 50,143, 90,
+248,197,209,159,165, 34,161, 8,160,224,184,234,245,234, 77,108, 73,173, 17,214,249,255,216, 59,239,240, 40,170,182,141,223,103,
+182,101,147,108,122,221,146,132, 36, 36, 33,161,134,208, 67, 7, 33,161,136, 32,138,136, 40,136, 40,160,188,190,160,130, 2, 34,
+ 2, 2,162,136, 8, 34,160, 47,160, 72, 47, 74,239, 77, 58,129,132, 18, 66, 11,105,155,205,166,144,190,125,103,206,247, 71,216,
+ 24, 32,101, 3, 40,202, 55,191,235,218,107,179, 83,238,125,102,119, 51,115,207,115,206,115, 78, 56, 81,124,248,163,117,157, 64,
+ 64,210,235,210, 59,115, 73,243,205,144, 15, 15,124,112,229,102,225,143,119,178, 42,238,124,238,100,209,203, 97, 74, 50,237, 86,
+102,233, 7,151,111, 22,126, 85,223,126, 19, 4, 88,210,250,249,233, 15, 45,171,143, 70,117, 36,167,211, 68, 0, 3,155, 4,147,
+231,134,140,249,110, 34, 33,245,187, 91,230,225,225,249,119, 99,203, 98, 49, 12,243,232,197, 55, 15, 96,203, 98, 1,184, 89,143,
+125,206, 0,104,246,164, 98, 0,128,132,132,132, 2, 0, 5, 79, 82,147,231, 97,200, 95, 57,140,207,179,144,226,126, 66,154,204,
+ 99,202,113,213,104,214, 72,120,120, 56,189,121,243,166, 93,157, 5,255,165,159, 39,175,201,107,242,154,188,230,227,104,254, 21,
+231,228,199,237,156, 77,171,209,124, 34,252, 91, 52,159, 53,248,102,143,191,135, 58, 7, 54,125,146,220,184,113,227,153,169,194,
+224,225,225,225,249, 11,248, 43,206,201,252,160,195, 60,247,241,184, 46,158,135,135,135,135,135,135,135,135,231, 1, 8,128,166,
+213,173,168, 79,234,143, 16, 82,173, 70,109,212,165,207,107,242,154,188, 38,175,201,107,242,154,188,230,179,167, 89,151,246,179,
+210,244,200,247,193,226, 53,121, 77, 94,147,215,228, 53,121, 77, 94,243,169,107, 62,107,240, 77,132, 60, 60, 60, 60, 60, 60, 60,
+ 60, 79, 24,222, 96,241,240,240,240,240,240,240,240, 60, 97,120,131,197,195,195,195,195,195,195,195,243,132,225, 13, 22, 15, 15,
+ 15, 15, 15, 15, 15,207, 19,134, 55, 88, 60, 60, 60, 60, 60, 60, 60, 60, 79,152,191,180,138,144,135,135,135,135,135,135,135,231,
+255, 35, 12, 0, 16, 66,232,189, 71,151,167, 28, 15, 15, 15, 15, 15, 15, 15,207,255, 67,158, 53, 47, 82, 57, 85, 14,165,148, 16,
+ 66, 40, 30,127, 62, 37, 30, 30, 30, 30, 30, 30, 30,158,122,243, 44,121,145,202, 62, 88,247, 14,168,235, 83,140,133,135,135,135,
+135,135,135,231,255, 49,207,146, 23,185, 47,131,245, 52, 3,225,225,225,225,225,225,225,249,255,205,179,228, 69,248, 42, 66, 30,
+ 30, 30, 30, 30, 30, 30,158, 39, 12, 95, 69,200,195,195,195,195,195,195,195,243,132,225, 51, 88, 60, 60, 60, 60, 60, 60, 60, 60,
+ 79,152,191,212, 96, 17, 66,154,242,154,188, 38,175,201,107,242,154,188, 38,175,201,107,254,127,131,207, 96,241,240,240,240,240,
+240,240,240, 60, 97,120,131,197,195,195,195,195,195,195,195,243,132,225, 13, 22, 15, 15, 15, 15, 15, 15, 15,207, 19,134, 55, 88,
+ 60, 60, 60, 60, 60, 60, 60, 60, 79, 24,222, 96,241,240,240,240,240,240,240,240, 60, 97, 8,128,106, 43, 1, 40,165,151,237, 22,
+121,132,106,130,186,244,121, 77, 94,147,215,228, 53,121, 77, 94,147,215,124,246, 52,235,210,174,143,255,248, 39,243,151, 14, 52,
+ 74, 8,105,250,164, 63, 40, 94,147,215,228, 53,121, 77, 94,147,215,228, 53,159, 61,205,103, 13,190,137,144,135,135,135,135,135,
+135,135,231, 9,243,212, 12, 22, 33,132, 33,132, 8,239, 61, 24, 66,200, 99, 79,240,248, 87,104,242,240,240,252, 51, 33, 15,240,
+180,227,225,225,249, 55,115,254,252,121,154,159,159, 79,229,114,249, 53, 66,200,152,167, 29,207,179,128,240, 73,138, 53,242,117,
+108,215, 32,192,167,239,238,243,233, 83,106,219,142, 16,194, 40,149,202,185, 62, 62, 62, 99,116, 58,157, 1, 0,101, 24,134, 70,
+ 69, 69,129, 16, 2,219,185,146,101,217,188,107,215,174,217,213,254,251, 36, 53, 35, 34, 34,206, 51, 12,163,170,122,206,174,235,
+111,142,227,178,174, 94,189,218,170,174, 56,229,114,121,111,134, 97, 38,215,181, 29,199,113,115, 53, 26,205,222,218,182,105,214,
+172,217, 5,103,103,103, 63,134, 97,106,188,184, 84,109, 2,182, 90,173, 84,167,211,105,175, 92,185,210,178,174,247,127, 16,165,
+ 82, 57,133, 82,218, 18,192, 42,141, 70,179,139, 82,202,214, 87,227, 1,189, 23, 41,165, 83, 1,128, 16, 50, 75,173, 86,111,174,
+207,254,225,225,225,231,197, 98,177, 74, 32, 16,144,123, 26,247,173,127,240, 53,199,113,212,100, 50,101,165,164,164,212,249, 29,
+241,252,243, 33,132,144,128,128,128,104, 63, 63,191, 96,189, 94,207, 2, 64,147, 38, 77,168, 64, 32,184,111, 59,179,217,108,190,
+118,237,218,174,167, 18, 36, 15,207,191,136,253,251,247, 99,244,232,209,184,116,233, 82,163, 93,187,118,125,175, 80, 40,198,105,
+ 52,154,110,148,210,188,167, 29,219,191,149, 39,102,176,194,228,178, 70,254,222, 94, 59,230,205,158, 1, 0, 53, 26, 44, 66, 8,
+ 35,151,203,231,117,234,212,105,228,154, 53,107,156,183,110,221,234, 28, 28, 28, 12,177, 88, 12,129, 64, 0,129, 64, 0,134, 97,
+ 32, 16, 8, 48, 96,192, 0,187,238, 74, 31,212, 60,120,240,160,115, 68, 68, 68,229, 69,150, 82, 90,105,178,250,244,233, 83,167,
+ 38,195, 48,170, 11, 23, 46,248, 74,165,210,202,253, 57,142,187,239, 65, 41,173,124,176, 44,139, 78,157, 58,217, 19, 42, 24,134,
+153,156,156,156,220,185,188,188,252, 62, 13,219,123,216,254,238,220,185, 51, 0,212,106,176, 24,134, 81,156, 56,126,208,151,152,
+ 83, 1,235, 93, 80,129, 39, 32, 9, 1, 24,135,106,183,191,123,247, 46,186,117,235, 38,168,118,101, 29,248,248,248, 12, 63,114,
+228, 72,216,157, 59,119, 94,248,226,139, 47, 10, 20, 10,197,247, 0,126,202,206,206,206,124, 20, 61, 74,233,172,212,212,212,112,
+ 74, 41, 66, 67, 67,103, 2,168,151,193, 18, 8, 4,170,253,251,247,251, 74, 36,146,202,239,185,166,103,150,101, 97, 54,155, 17,
+ 23, 23,103,125,148, 88,121,254, 89,216,204, 85,124,124,124,208,210,165, 75,133,201,201,201,194,168,168, 40,176, 44, 91,249,224,
+ 56,174, 94,255,151, 60, 60,255, 31, 9, 26,244,227,247,156,213,124, 47, 91,229, 14, 96, 57, 74, 75, 75, 49,106,212, 40,252,246,
+219,111, 81,237,218,181,155, 11, 96,228,211,140,241,223,204, 19, 49, 88, 13,149,142, 74, 23, 7,231,125,203,126,248,142, 88, 74,
+181, 30, 53,109, 71, 8, 97,252,253,253,103,117,234,212,233,181, 53,107,214,120, 16, 66,112,240,189, 55,225,110, 54, 64,241,233,
+151,240,240,246,129,105,242,104,184,176, 86, 52, 59,148,104,215,123, 87,167,153,146,146,130,187,119,239,194,199,199, 7, 78, 78,
+ 78,112,112,112,128, 88, 44,134, 68, 34,177, 87, 19, 82,169, 20,251,247,239,135, 80, 40,172,124, 8, 4,130,106, 95,251,249,249,
+217,247, 65,161, 34, 51, 21, 25, 25,217,252,250,245,235,174,133,133,133,104,223,190,125, 9, 33, 36,201,182,158, 82,218, 60, 41,
+ 41,201,213, 94, 61, 98, 78, 69, 89,198, 15,160,133,155, 1,247, 65, 96, 93,135,192,128,144,251, 46, 50, 54, 83,200,178,143,158,
+116,202,203,203, 51, 31, 59,118, 12,209,209,209, 88,191,126,189, 87, 97, 97,225,167,171, 86,173,154,170, 80, 40,166,100,103,103,
+207,125, 4, 73, 79, 0, 72, 73, 73, 1,128, 26,127, 51,181, 33,145, 72,112,250,244,105, 80, 74, 43, 77, 57,195, 48, 96, 24, 6,
+219,111,122,163,220,196, 64,167,189,140,241,253,131, 16, 28, 28,252, 80, 86,139,231,223, 7, 33,132,200,229,242,230,189,122,245,
+ 10, 88,186,116,169, 24, 0, 46, 95,190, 12,141, 70, 3, 95, 95, 95, 72,165, 82,136, 68, 34, 8, 4, 2,136,197,226,167, 29, 46,
+ 15,207, 63, 26,206,106, 30,211,162, 85,135,202,215,171,247, 47,130,209,173, 37,212,159,125,134,133, 11, 23, 34, 60, 60,188,205,
+ 83, 12,239, 95,207, 99, 27,172,166,129,110,238, 14, 68,180,239,199,165, 11, 36, 48,151,123,164,156, 59,129, 38,241,111, 3,184,
+191,212,242, 94, 31, 9,198,207,207,111,236,218,181,107, 93,109, 23,187, 8,194,194, 29,102, 52,104,220, 24, 78,110,238,208, 90,
+205,160, 22, 51, 36, 98,113,181, 23, 68,123, 52, 25,134,129, 72, 36,186,239, 33,145, 72, 80, 53,219, 81,147,102, 85,108, 38,106,
+255,254,253,176, 88, 44, 24, 60,120,112,181,102,171, 58,106,210,212,104, 52,123,149, 74,101, 18,165,180, 51,199,113, 32,132, 36,
+169,213,234, 46,182,245,114,185,188,119,139, 22, 45, 38,115, 28,247,144,105,121, 80,147, 82, 10, 88, 11, 64,239,174,133, 75,251,
+124,148,156,242, 6,113,238, 9, 22, 65,184,124, 51, 7, 7,207,167, 33,255,110, 25, 98, 34,124,209,171,125, 40, 56,142,179, 59,
+206,170, 40, 20,138,240,198,141, 27, 71, 90, 44, 22, 28, 59,118, 12, 44,203,162, 89,179,102, 24, 49, 98, 4,179,104,209,162, 17,
+ 0,238,139,213,206,202,146,196,132,132,132,158, 57, 57, 57, 0,112,169,174,141,171,211, 36,132,224,231,159,127,134,193, 96,120,
+104,123,143, 46, 95,224,131, 65, 65, 24,241,222,106,124,121,125, 35,150, 44, 89,114, 95,115,105, 61,226,172, 23,188,230, 95,175,
+ 41,151,203, 67,150, 47, 95, 46,170,186, 76, 44, 22, 87,102,193,171,102,195, 31,108, 50,252, 59,227,228, 53,121,205,127,186, 38,
+ 35, 20, 47, 77, 60,127,114, 12, 0,148, 36,111,193,127,134,118, 64,105,233, 77,188,243,206, 52,168,213,106,220,184,113, 35,225,
+239,140,243, 89,163,210, 29, 16, 66, 40,165,180, 94,183,248, 42, 21,145,186,176,142, 59,190,255,102,174,155,139,204,201,231,252,
+190,109, 72, 79,207,169,117, 31,157, 78,103,250,237,183,223,176,111,220, 72,132, 19, 43, 60, 62,157, 15, 95,133, 2,197, 35, 7,
+160,204, 98, 70,195,221,103,225, 32,147, 65,226, 44,179, 59,227,160,211,233, 76,135, 15, 31,198,149, 43, 87, 32, 20, 10, 33,147,
+201,224,236,236, 12, 7, 7,135, 74, 99,101, 59, 1,219,171, 73, 41,133, 80, 40,196,229,203,151,145,158,158, 14,119,119,119,156,
+ 56,113, 2, 61,123,246,188,207, 92, 9, 4,130,251,250,120,217,139,173,105,241, 65,238,245,187,170,181,105,240, 62, 68,222,128,
+231,107, 40, 61,173, 0, 60,134,193, 66,221,192, 81, 14, 23,111, 22,224,237, 97,125, 1, 0, 99,167,254,128,158,109,131, 43,155,
+ 32,235,131, 82,169,124,187,121,243,230, 11,198,140, 25,195, 56, 59, 59,195,104, 52,194,104, 52, 34, 37, 37, 5, 94, 94, 94,112,
+114,114,122,164, 52, 1,165,244,142, 66,161,128, 84, 42, 5,165,244,206,163,104, 16, 66,176, 97,195,134,106,215,189,177,224, 42,
+132, 21,221,179,176,116,233, 82, 88,173, 86,212,247,247,205,243,207, 68,167,211,177,201,201,201,162,196,196, 68, 8, 4, 2,184,
+186,186,194,201,201, 9, 98,177, 24, 14, 14, 14,149,198,138,207, 96,241,240,212, 78,250,150, 81, 99, 9, 33, 51, 3, 3, 3,143,
+254, 48,103, 78, 88,143, 30, 61, 0, 0, 7, 15, 30,196,255,134, 14,197,103,192,240, 69,132,104,198, 83,250,241,223, 21,211,163,
+120,145,127, 42, 66,224,207, 3,170,207,129, 17, 66, 72, 67, 63,151,141, 51, 62,121, 55, 56, 48, 36,212,255,204,206, 13, 72, 77,
+ 85, 67,171, 45,172,118,251,123,111,192, 17, 66,184,144,144, 16,184, 90, 12,112,163, 38,248,202, 21,112,241,244, 66,161,229, 94,
+230,202,217, 25, 18,103,153, 93, 39,199,170,154,141, 27, 55,134, 86,171,133, 88, 44,134, 76, 38,131,139,139, 75,165,193,178,153,
+ 43,123, 79,184,132, 16,112, 28, 7,161, 80,136,164,164, 36,116,236,216, 17, 1, 1, 1, 88,191,126, 61,122,247,238,253, 80, 22,
+235, 81,154,158,108,125,174,108,216, 58,191,219,211,185,253, 62, 36, 13, 97,117,121, 25,140, 83, 15,152,169, 43,140, 84,126,175,
+ 73,144, 98,231, 89, 45,174,167,231,223,215, 92,104, 47, 42,149, 74, 33,149, 74, 87,207,156, 57,179,123,171, 86,173, 96, 54,155,
+ 1, 0, 78, 78, 78, 48, 26,141, 16,137, 68, 48,155,205,208,235,245,106,251,143,250,201, 97,251,204,247,237,219, 7, 66, 72,165,
+209,181, 53, 21,150,107, 50, 49, 98,252, 26, 72,132, 64, 82, 82, 18, 34, 35, 35,159, 70,152, 60,127, 17, 17, 17, 17,200,205,205,
+133, 64, 32,128,139,139, 11,155,116,163, 79, 0, 0, 32, 0, 73, 68, 65, 84,156,157,157,209,168, 81, 35,100,102,102,222,151,197,
+226,225,225,169, 29,129, 64, 48,119,219,182,109, 97, 82,169, 20,179,103,207,134,139,139, 11, 78,207,156,137,255,137,197,112, 4,
+176,212,108,158, 12,224,111, 49, 88,143,226, 69,254,201, 60,114, 19,161, 74,165,250,186, 93,108,219,206, 33,141, 91, 75,207,236,
+217,130,155, 55,210,145,159, 95, 12, 10,232,107,217,141, 18, 66,168, 72, 36,130,239, 71,159, 35,176, 89, 51,232, 70,191,136, 66,
+139, 25,161, 59, 79,195, 65, 38,195,181,231, 90,130,154, 76,232,148,172,181,215,184, 80, 66, 8, 5, 0,111,111,111,136,197, 98,
+ 72,165, 82, 72,165,210,202,190, 87, 85, 31,246,154, 33,142,227, 80, 82, 82,130, 59,119,238, 96,244,232,209,112,114,114, 2, 33,
+ 4, 90,173, 22, 65, 65, 65, 16, 8, 4, 80,171,213, 56,116,232, 16, 66, 66, 66, 32,145, 72,234,245, 99,168,210,169,189,185, 82,
+169, 60, 74, 8,105,126,254,252,121,215, 86,173, 90, 1,245,201, 96, 17, 49,140, 8, 2, 11, 21, 56,250,103, 95, 43,139,245,254,
+254,220, 54,147,101, 15,254,254,254, 81, 77,155, 54, 61,245,221,119,139, 92,124,125,253,192,113, 44, 44, 22, 11,138,139, 75,160,
+211,233, 16, 24, 24, 8,103,103,103, 58,127,254,124,194,178,236,210,122, 28,246, 19,197,102,168,108, 25, 68, 91,255, 43,134, 97,
+ 48,254,249, 64, 20, 22,186, 64, 32,168,120,109,239,177,243,252,179,161,148,210,166, 77,155, 82,129, 64, 0, 95, 95,223, 74, 51,
+ 37, 18, 85,180, 24,250,249,249,161,164,164, 4, 2,129,160,114, 25, 15, 15, 79,205,132,135,135,199, 40,149, 74,188,255,254,251,
+ 48,172, 93,139, 50, 0,253, 0,108,187,119, 83,237, 2, 76,124,170, 1,254,139,121, 36,131,165, 82,169,222,109,209,162,197,168,
+ 21,171,214,200,230, 77,251,168,164, 48,249,146,192,164, 55, 59, 27, 45, 22,211, 45, 77,193,162,154,246,163,148,210,200,200,200,
+138,187, 78,119, 15, 56,185,186,193,248, 64,230,138,154, 76,224,204, 38,136,237, 60, 57,218, 52, 41,165,112,116,116,132, 68, 34,
+169, 54,115, 85,159, 12, 22, 0, 20, 21, 21, 97,195,134, 13,104,211,166, 13,156,156,156, 32, 16, 8,208,188,121,115, 36, 39, 39,
+ 35, 52, 52, 20, 0,176,109,219, 54, 12, 26, 52, 8, 55,111,222, 68, 84, 84,148,204,110,113,252,217, 68,184,111,223, 62, 87, 74,
+105,103, 74, 41,242,242, 30,173, 26,150,101, 89,148,151,151, 99,223,190,125,200,206,206,134,191,191, 63,138,139, 93,224,170,168,
+ 48, 21, 85,171, 31,237,129, 16,242,209,155,111,190,233, 34,147,201,192,178, 86,136, 68,162, 74,227, 42, 18,137,145,146,146,130,
+161, 67,135, 22,167,165,165,125,152,157,157,189,182,190,241, 18, 66,136, 74, 37,247, 43, 46, 46, 68,105, 73, 17, 4, 2, 4, 16,
+ 66, 4,143, 50,244, 3,195, 48,149,207,182, 7, 33, 4, 98,145, 0,254,126, 62,149, 29,223,239,101,239,254,245,119, 68, 60, 21,
+176, 44,139,115,231,206,225,216,177, 99,248,227,143, 63,112,231,206,159,173,204,174,174,174,216,191,127, 63,186,117,235,246, 20,
+ 35,228,225,249,119,112,227,198,141,179,233,233,233,145,211,166, 77,195, 74,165, 18, 46, 46, 46,152, 48,125,250, 41,171,213,218,
+161,238,189,121,106, 67, 8, 0,245, 73,201,169, 84,170,129,114,185,124,222,154, 53,107, 28,179,179,179,161, 8,111,226,186,125,
+211, 6,163,175, 76,172,215,220, 45,124,253,162,186,172,206,114,123,134, 97, 96,157, 57, 1, 5, 86, 19,130,183,159,132,131, 76,
+134,235,189, 91,129,154, 76,232,144,144, 6, 7,153, 12, 66,169, 99,189, 15,166,186,140, 85,213,135,237, 98, 92, 23, 38,147,201,
+189,103,207,158,232,209,163, 7, 94,124,241,197,202,166,192,232,232,104,172, 91,183, 14, 3, 7, 14, 68, 98, 98, 34, 20, 10, 5,
+ 26, 53,106,132, 70,141, 26,225,240,225,195,245,138,213,150,193,234,221,187,119, 9, 33, 36,137, 82,218,252,236,217,179,118, 87,
+ 15,218, 52,128, 10, 3,181,111,223, 62,244,237,219, 23,161,161,161,184,112,225, 2,246,127, 62, 31, 66,153, 55,192,248,130,114,
+180, 50,179,101, 79, 31, 44,177, 88,220, 49, 36, 36, 4, 57, 57, 90, 56, 56, 56,192,195,195, 29,142,142,142,112,112,144, 98,206,
+156, 57,220,242,229,203, 23, 19, 66, 62,207,206,206,190, 91,175,131, 6,160, 82,169, 26,182,104,209,226,231,215,135, 15,107,235,
+229,229, 13, 63, 63, 57, 38, 79,250, 56,110,237,186,245, 87,148, 74,229, 43,106,181,186,206, 14,239, 54, 8, 33, 48,153, 76, 16,
+ 8, 4,216,118,221, 7,229, 38,130,146,172, 4,252,231,249,160, 74,179,101,107,234,181, 13,127,193,243,108,192,178,108,229,119,
+ 92, 29, 53,117,112,231,225,225,185, 31,150,101, 39, 15, 24, 48,160,245,236,217,179,163, 38, 76,152, 0, 0, 80, 40, 20,237, 21,
+ 10,197,213,191,123, 28,172,103,169,121, 16,168,146,193,170,235,192,186,118,237,186,194, 98,177,188,224,236,236,236, 49,106,212,
+ 40,115,126,126, 62,182,110,221,138,255,253,239,127,186,114,139,224,124, 81,129,117,248,237,236,178,172,186,222,208,214,148, 35,
+182, 88, 64,173,127,102,174, 56,163,177, 50,147, 37,114,116,170,215, 65, 16, 66, 64, 41,173,214, 84,217, 50, 89,245, 57,217, 58,
+ 56, 56, 20,253,241,199, 31,190, 89, 89, 89,247,117,104, 15, 14, 14, 6, 0,156, 61,123, 22,167, 79,159,198, 43,175,188, 2,161,
+ 80, 8,177, 88,140,164,164,164,210,250,196,108, 51, 60,182, 42, 66,185, 92,222,187,109,219,182,213, 86, 15,218,163,149,145,145,
+129,208,208, 80, 24,141, 70,184,187,187,163, 64,115, 7, 25,119, 82,161, 51, 94, 71,136,191, 20,185,185,185,112,112,168,126,124,
+172, 7, 97, 89,150,181, 93,184,140, 70, 35, 52,154, 28, 40, 20, 10,252,242,203, 26,172, 88,177,226,149,236,236,236,141,245,141,
+145, 16, 34,148,203,229, 19,251,245,235, 55,235,133, 23, 94, 16,234,202,203, 64,185, 10,195, 35,150,136,241,237,183,223, 54, 58,
+116,232,208, 69,165, 82,249,133, 84, 42,157,117,235,214, 45, 83, 29,122, 0,128,149, 43, 87, 2, 0,156,218, 77,199,228,151, 26,
+224,181,177,171,241,245,215, 91,238, 59, 86,129, 64,128, 25, 51,102,212, 55,100,158,127, 56, 61,123,246, 68,239,222,189, 43,155,
+ 9,189,189,189, 97, 54,155, 97,181, 90,121,115,197,195, 99, 7, 65,131,126,252, 94,213,127,201, 24, 0,152,248,237, 65, 76,153,
+249, 13,134,189,216, 27, 35, 70,140,120,106,227, 96, 61, 75, 38,235,190, 38,194, 90,204,213, 27, 30, 30, 30, 67, 71,142, 28,233,
+120,246,236, 89,204,156, 57, 83,184,127,255,126,243,185,115,231,172, 44,203, 78, 84,171,213,203,234,243,166, 12,195, 32,100,205,
+ 78, 40,252,253,113, 35,174,245,125,153,171,163,205, 85,224,140, 70, 60,151, 90, 92,239,131,177, 53,101,217,140,149,205, 92,213,
+ 52,148, 66,109,216,238,128, 31, 28,247,234,157,119,222,193,138, 21, 43,208,161, 67, 7,132,133,133, 65, 40, 20, 86, 54, 75,213,
+135, 7, 59,185,215,187,122,176, 10, 44,203, 34, 48, 48, 16,151, 46, 93,130,155,155, 27,126,254,249,103, 4,168,148, 24,222, 43,
+ 24, 38,147, 9, 22,139, 5,229,229,229,182, 12, 86,157,129,114, 28,119,101,235,214,173,161, 47,189,244, 18, 21, 10,133,196,104,
+ 52, 2, 0, 22, 45, 90,148,155,157,157, 93,175, 1, 65,129,138, 81,219, 67, 66, 66,126,122,229,149, 87, 92, 26, 53,106, 4,173,
+ 86,139, 51,103, 78,225,227,143, 39,159, 17,137,132,134,184,248, 62, 93,163,162,154, 96,236,216,177, 76,116,116,244,212,143, 63,
+254,120, 98, 64, 64,192,136,204,204,204,234, 75, 4,239, 65, 8,193,186,117,235, 0, 0,111,126,123, 13, 38,147, 5, 64, 69,213,
+160,191,191,255,125,219,222,186,117,139,175, 34,124,134, 96, 89,246,190,106, 65,155,161,226,205, 21, 15,143,253,220, 55, 14, 86,
+171, 14, 56,177,101, 62,214, 93, 15,132,122,230,204,167, 58, 14,214,179,114,174,174,211,121,180,109,219,214,197,104, 52,126,251,
+223,255,254,215,177,188,188, 28,249,249,249, 40, 40, 40,192,153, 51,103,246, 91, 44,150,255,104,181,218, 26, 75,236, 73, 53,179,
+109,219, 42,190, 60,125,124,225, 32,115, 1, 53,153, 42, 51, 87, 98, 39,103,112, 70, 35, 56,179, 9,168,161, 57,167, 38, 77, 66,
+200, 67, 89, 43,123,205,213,131,154,182,140, 88,117,131,138, 6, 4, 4,224,139, 47,190,120,104,152, 6,123,226, 4, 42,170, 5,
+ 9, 33,205, 1, 84,118,114,151,203,229,189,237,169, 28,172, 73,147,227, 56,116,233,210, 5,251,247,239,199,165, 75,151,192, 48,
+ 12,226,227,227, 65, 8,129,155,155, 27,132, 66, 97,165,153,179, 21, 4,212,166,201,178,236,107,255,251,223,255, 62,216,189,123,
+247, 71,239,189,247,158, 99,231,206,157,109,253,188,242, 40,165,117,118,228,122, 80,147,227,184,207,146,146,146, 92,172, 86, 43,
+102,207,158,141,243,231,207,151,223,186,117,235,191, 26,141,230, 39, 74, 41,149,203,229,195,110,223,190,179,228,211, 79, 63,117,
+233,222,189, 59,206,158, 61, 43, 13, 8, 8,248, 20,192,134,154, 52,109,156, 57,115, 6, 2,129, 0,214,187,233, 24, 59,121, 61,
+100, 78, 34,164,164,164,160,160,160,160,242,183, 86, 83, 83, 82, 77,154,143, 3,175,249,247,105, 86, 53, 87, 34,145, 8,122,189,
+222, 46,115,245, 44, 28, 59,175,201,107, 62, 9,205,199, 25, 7,235,175,136,243, 89,163, 78,247,161,211,233,102, 70, 68, 68, 72,
+146,147,147,113,235,214, 45, 92,191,126, 29, 44,203,222,204,202,202,234,247,168,111,202, 48, 12,220,220,220, 32,145, 72,208,254,
+146, 26, 18,177, 24, 18,231,138, 62,226,207,165, 22, 3,148,130,145,216,215,156, 85, 85,243,193, 49,175, 30,167,138,136,101,217,
+202, 17,218,109, 6,174,186,106,181,250,102,174, 24,134,153,124,234,212, 41,215,244,244,116, 80, 74,177,101,203, 22,215, 23, 95,
+124,113, 50, 30, 33,123, 69, 41, 69, 65, 65, 1, 56,142,131, 72, 36, 66,247,238,221,209,178,101, 75,148,149,149,129,101,217,202,
+230, 75,177, 88, 92,175, 42, 66,173, 86,171, 3, 48,195,199,199,103,217,212,169, 83,103, 52,109,218,116,212,251,239,191,207,224,
+ 17,139, 34, 8, 33, 86,171,213,138,141, 27, 55, 98,243,230,205,165,148,210,136,236,236,236,202, 1,211, 52, 26,205, 26, 63, 63,
+191,253, 3, 7, 14,188,121,251,246,109,215,226,226, 98, 0,168,115, 90, 27,157, 78,135,176,176, 48,176, 44,139,121, 99, 85, 40,
+ 45,109, 6,150,101, 97,181, 90,225,228,228,116,223, 20, 68,252, 40,238,207, 30, 85,205, 21,223,231,138,135,167,254,164,111, 25,
+ 53, 22,192, 88, 66,200, 43,211,167, 79, 95, 59,118,236, 88,112, 28,135, 35, 71,142, 96,201,164, 73,248,140,101,135, 47, 34, 68,
+ 55,158,210,177, 79, 59,214,127, 35, 53, 94, 48,219,180,105,211,160,188,188,252,103,139,197, 18,205,113,156,228,232,209,163, 48,
+ 24, 12, 72, 78, 78,214,115, 28,183,233, 49,222, 51, 61, 62, 62,158,121,112,190,184,234, 96, 89,214,222,206,117,233, 61,123,246,
+124, 98,154, 28,199,101, 85,157,195,172, 38,221,170,175,173, 86,107,157,253,207,238,105,207,109,223,190,253, 67,203,236,217,183,
+ 26,173,212, 30, 61,122,152,171, 46,171,218,145,187,186, 78,221, 44,203,218, 21, 39, 0,228,229,229,105, 1,188, 45,151,203, 23,
+142, 24, 49, 98, 58,128,155,143, 18, 39, 33,100, 86, 84, 84,212,212,138, 63,201, 76,181, 90,253,208,104,180, 90,173, 54, 79,169,
+ 84,142, 10, 8, 8,168,156, 0,186, 54, 77,142,227, 82,159,123,238, 57,115,109,223, 9,128,251, 50, 87, 28,199,217,125,236, 60,
+255, 92, 8, 33,101, 15,254, 15,213, 4,165,244,225, 97,254,121,120,120,238,195, 65, 44, 30, 62,110,220, 56,252,242,203, 47,216,
+186,112, 33,122,103,101, 97,157, 88, 12, 71,177, 24, 75,205,230, 49, 0,120,131,245, 8,212,104,176, 74, 75, 75,191,184,123,247,
+110,187,146,146, 18,107,106,106,170,158, 16, 98, 37,132,232, 57,142,251,156,227,184, 31, 30,245, 13,175, 94,189,106,223,153,241,
+ 41,106, 94,189,122,181,213,147,212,171,202,227,244,181,122,144,171, 87,175,254, 45,101,180, 26,141, 38, 5,192,144, 71,221, 95,
+173, 86,111,134, 29,147, 57,219,187, 29, 0, 92,187,118,141, 47, 33,254,127,202,165, 75,151, 14, 61,237, 24,120,120,158, 37, 18,
+ 47, 93,234, 13, 0,241,241,241,208, 79,172, 24,246,106,245,159,227, 96, 61,181,177, 14, 31,160, 53, 0,159,123,127,231, 3, 72,
+ 1, 16, 3,192, 17,128, 17, 64, 25, 0,239, 42,219, 23,220, 91,103, 91,127, 12,128,229,239, 10, 22, 0,106, 28,183, 32, 37, 37,
+229,149,188,188, 60,161,201,100,114, 96, 89,214,201,106,181,186, 90, 44, 22,127,150,101,151, 82,190,222,157,135,135,135,135,135,
+231,153, 32, 34, 34,130,120,123,123,147,136,136, 8, 50,149,210,251, 30,255,160,230, 65, 31, 66,200, 14, 66,200,142,143, 63,254,
+184, 27,128, 14, 31,127,252,113,155,123,175, 91, 1,240,182,173, 39,132,236, 0,224,245,192,250, 22,127,119,192,246, 13, 12,197,
+195,195,195,195,195,195,195,243,148,161,148,246,155, 59,119,238, 23, 0, 4,115,231,206,253,162,202,107, 80, 74,251, 85,125,126,
+ 96,189, 79,205,170,127, 13, 4, 64,211,234, 86,212,167, 58,128, 16, 82,173, 70,109,212,165,207,107,242,154,188, 38,175,201,107,
+242,154,188,230,179,167, 89,151,118, 13,251,247, 37,132,236,160,148,246,171,250, 92,101,159,126,247, 52,119, 84,253,251,129,245,
+ 59,235,115, 28,143,141,173,210,234,175,120, 0,104,202,107,242,154,188, 38,175,201,107,242,154,188, 38,175,249,152,143,190, 21,
+150,165,230,231,154,254,174,178,236,239,140,183,150,178,251, 77,155, 4,234, 40,184, 74, 28,157,196, 0, 96,210,235,204,202,100,
+148, 96,240,224,122,207, 23,199,195,195,195,195,195,195,195,243,184, 16, 66,118, 76,158, 60,249,147,167, 29,135, 61, 84,111,176,
+ 54,109, 18,228,183,114,242, 22, 26, 11, 35, 88,171, 57, 18, 0,132, 12,189,150,223,202,227,186,247,166, 77,249, 79,218,100,197,
+199,199,127, 66, 41,245, 19,137, 68, 59,253,253,253,143, 44, 91,182,236,111,237,233,207, 83, 73,157,125,242, 98, 98, 98, 60,140,
+ 70,227,124,142,227,186,223,155,231,239,136, 88, 44,254,224,226,197,139,119, 1,212, 56,208, 86, 80, 80,208,218,208,208,208, 8,
+ 90, 1, 0,220, 55, 46,151,109,153,109,125, 70, 70,198,141,204,204,204, 87,237, 13, 60, 48, 48, 48, 88, 42,149,190, 65, 8,137,
+186,167,147,108, 48, 24, 86,101,100,100,212, 56, 16,238,179,138, 66,161,112,164,148,190, 32, 18,137, 94,247,244,244,108,147,151,
+151,247,153, 90,173,254,230, 81,180, 8, 33, 66, 0, 19,221,221,221, 95,113,119,119, 15,185,123,247,238,237,146,146,146, 13, 0,
+190,166,148,214,249,127, 58,243, 93,101,187,206,125,186, 76, 59,182,235,232,204,105,139,213,167, 31, 92, 63,227, 3,133, 87,247,
+ 30,177,211,118,239, 60,249,249, 23,139,213,245,154,219,146, 16,194,224,207,223, 44,135,123, 63,159,250,104,252,157, 40, 20,138,
+104, 0,147, 88,150, 21, 49, 12,243,141, 70,163,249,227,105,199, 84, 23,145,145,145, 31, 73, 36,146, 49, 12,195,220,214,106,181,
+ 35,179,179,179,159,200, 80, 39,132, 16, 38, 40, 40,200, 37, 61, 61,189,148,218, 49,120, 49, 79, 5,237,219,183,215,154,205,102,
+223,218,182, 17,139,197,185,167, 78,157,242,251,187, 98,250, 27,201,167,247,154,254, 0,228, 2, 16,220,123,109,186,247,172,173,
+178, 76, 91,195,250,191,149,106, 13,150, 58, 10,174, 66, 99, 97, 68,129,246,234,144, 60,205,197,151, 1,192, 71, 30,189,193,203,
+175,241,122,117,148,196,220, 58,114,144, 76,228, 36,252, 94, 32, 16, 69, 27, 76, 70,111,145, 80,148,111,182, 90, 46, 50, 38, 58,
+ 86,115,109, 75,134, 61,111,220,191,127,255, 8, 0,110, 45, 91,182, 60,103, 50,153,218,124,243,205, 55,242,205,155, 55, 55, 79,
+ 72, 72, 24,250,252,243,207,111,167,148,238,221,190,125,187,190, 62, 7, 67,186,118, 21,250, 22,121, 14, 23, 8,133,253, 1, 52,
+167, 20, 0, 17, 36,113, 22,243,206, 92,143,130, 85,244,200,145, 58, 7,175,172,137,246, 49, 94, 17,132, 51,127, 40, 18,208, 78,
+ 22,150, 28,167,140,120,254,169,132,130,235,246,238, 31, 24,168,232, 41, 17,146, 31, 1,192,100,165,163, 50, 50,178, 15, 60,206,
+118,213,161, 80, 40,158, 3,176,134, 16, 34, 2,176,148,101,217,109, 90,173, 54,145, 82,250,200,199, 93,149,198,141, 27,251, 16,
+ 66,146, 22, 44, 88,224,213,182,109, 91, 1,199,113, 56,116,232,208,171, 83,167, 78,237,221,164, 73,147,166, 87,174, 92,201,173,
+105,223,208,208,208,136,131, 7, 15,182,216,179,103, 15, 58,116,232, 0,142,227,192,113, 28,220,221,221,241,251,239,191,163,109,
+219,182,149,203,252,252,252,208,165, 75, 23,187,227, 10, 13, 13,125, 33,186,101,235,241,255,253,112,146,159,175,151,183,139,149,
+181,154,213,106,141, 98,225, 55,243,218,133,134,134,126,127,251,246,237,109,245, 61, 86, 66, 8, 81,169, 84, 67, 68, 34, 81, 63,
+ 0, 81,247, 22, 39, 91, 44,150, 29, 89, 89, 89,235,237,189,144,183,104,209,226, 24,195, 48, 13,234,243,222, 44,203,102, 36, 37,
+ 37,117,172,111,204, 0,160, 84, 42, 95, 82, 42,149,255,107,215,174,157, 83,116,116, 52,196, 98, 49,190,252,242,203,137, 0,106,
+ 53, 88, 54, 35,229,228,228, 52,196,217,217, 57,180,172,172,236,150, 94,175,223, 44,145, 72,122,126,251,237,183, 1,177,177,177,
+ 46, 90,173,150, 8, 4, 2,191,237,219,183, 15,255,238,187,239,122, 19, 66,122,212,245,219, 42,188,205, 77,115, 16, 69,118, 42,
+188,117,120, 26,128,248, 7,215, 91, 13,210,215, 5,162,128,126, 2,122, 33, 19,192,215,246, 30, 39, 33,132, 81,169, 84,223,250,
+249,249,141,208,235,245, 6, 66, 8, 37,132,208,102,205,154,217,214, 3, 0, 76, 38, 83, 97, 74, 74, 74,163,218,180,130,219,123,
+158, 23, 48, 2, 85, 77,235, 89,142,205,186,115,234,238, 99, 15,221, 66, 41,125, 63, 49, 49,113,176, 80, 40, 36, 45, 90,180,112,
+ 38,132,244,182,215, 92, 40, 20,138, 8, 66,200, 20, 74,233, 57,141, 70,243, 61,165,148, 85, 42,149,221, 40,165, 31, 1, 0, 33,
+228, 75,181, 90,125, 24, 0,148, 74,229,247, 97, 97, 97,207,223,188,121,115,169, 90,173,174,117, 60,185,218, 8, 15, 15, 31,251,
+159,255,252,103,250,152, 49, 99, 28, 11, 10, 10,130,122,245,234,245, 43,128, 78,117,238, 88, 11, 49, 49, 49,162,156,156,156,137,
+205,155, 55,127,175,117,235,214,242,171, 87,175,230, 40, 20,138, 69,254,254,254, 95, 39, 36, 36,212,105,216,155, 55,111,174, 16,
+ 10,133, 35, 0, 12, 71,197, 5,116, 29,128, 85, 23, 46, 92,184,253, 56,113,253, 91, 48,155,205,190, 7,102, 77, 3, 17, 8, 32,
+237,212, 19, 28,199, 33,127,254,116, 88,239,230,195,123,214, 34, 88,173, 86,244,236,217,179, 86, 3,246, 47,230,236,211, 14,160,
+190, 84,107,176, 36,142, 78, 98,214,106,142,204,211, 92,124,185, 77,220, 34, 55, 0, 56,187,103,252,203, 94,202, 38,151, 37, 66,
+167,235, 14,174,210, 45,131,250,247,140, 30,220,175, 11, 81,201,125,145,165,201,245,251,105,221,222,184, 29,123, 15,111, 65,197,
+184, 20,117, 82, 82, 82, 50, 59, 40, 40,200,231,224,193,131,105, 18,137,196, 81, 42,149,146,151, 94,122,201,113,232,208,161,141,
+ 15, 29, 58, 20,186,103,207,158,193, 3, 6, 12,216, 35, 22,139,119,110,220,184,177,176, 46, 61,191,102, 3, 27,251, 11,253, 55,
+ 13,120, 33,190, 65,223,231,124, 37, 65,254, 62,224, 56, 41, 82, 82,205,129,251,143, 95,136,219,181,103,223,135,190,141, 7,190,
+148,123,117,235, 37,123, 63,156,166, 77,221,220, 29, 25, 58,193, 81, 66, 95,137,235,212, 56,184,127,124, 7, 18,210, 48, 4,215,
+147,175,135, 30, 62,122,110, 68,183, 54, 46,119,244, 38,178, 78,207,145, 5,151, 47, 23, 23,213,166, 37, 17,146,149, 73, 87,110,
+ 42, 88,150,197,151,243,190,216, 63,101,202,148,202,209,213,109, 15,150,101,209,183,239, 0,124,245,213, 87, 48, 26,141,104, 29,
+221,100, 37, 0,165,189,241, 2,248,245,234,213,171, 94, 58,157, 14,123,246,236,249, 88,163,209,124,188,119,239, 94,141, 66,161,
+248, 80,163,209,172,123, 2,119,247,139,151, 46, 93,234,213,166, 77, 27,129,249,222, 24, 41,177,177,177,130, 79, 62,249,196,115,
+206,156, 57, 11, 1,188, 82,211,142,148, 82,186,103,207, 30,252,252,243,207,249,243,230,205,203, 2, 0,111,111,111,229,171,175,
+190,234,179,102,205,154,188, 5, 11, 22,100, 81, 74,225,229,229,165, 26, 50,100,136,143,189,161, 6, 4, 4,132,196,180,110, 59,
+126,213,202,149,109,139,239,222, 53,252,184, 96,233, 5,163,208, 65, 23, 20, 21, 33,158, 54,125,150,219,231,159,126,252,118, 64,
+ 64,192,229,204,204,204, 84,123, 15, 82, 46,151, 7, 54,104,208, 96,203, 39,159,124,210,180, 99,199,142, 34, 95, 95, 95,104,181,
+ 90,164,164,164, 52, 61,113,226,196, 11,219,182,109,155, 40,151,203, 7,105, 52,154, 58,111, 38, 40,165,225,191,125,249,133,175,
+131,151, 55, 56,139, 5, 30,205,162, 43,215,101, 31,218, 11,206, 98, 1,103,177, 32,160,239, 11,182,237,209,173, 91,183, 71, 26,
+146, 92,165, 82, 41, 34, 34, 34,126,153, 60,121,178,216,104, 52,226,226,197,139, 56,117,234, 20,151,155,155, 91,235, 64,182,132,
+ 16, 33, 33,100,223,244,233,211, 85, 29, 59,118,116,201,207,207, 7,203,178,222,219,182,109, 27,219,178,101, 75, 87,149, 74, 37,
+ 89,189,122,181,109,134, 0,207,208,208, 80,207,161, 67,135,154,126,254,249,231,137, 0,230, 85,167, 57,243, 93,101,187,162, 91,
+220,180, 28, 97,104, 92,163, 86,111, 32, 71,184, 55,110, 66,111,249,110,247, 80,166, 50,147, 21,223,176,161, 75, 72,164,211, 36,
+153,107, 83,207, 98,245,254, 73,241, 13, 27,174,216,125,235, 86,157,147,166, 19, 66, 24,165, 82,249,109,159, 62,125, 94, 93,186,
+116,169, 83,114,114,178, 83, 84, 84, 20, 56,142,131,213,106, 5,203,178,182,121, 55, 81,117,192,224,154, 16, 48, 2,213,137, 45,
+ 87,124, 29, 29, 29, 43,255, 15,109,207,229,229,229,232,253,122,187, 58, 53,236,129,227, 56,137,237,119,109,181, 90,165, 0, 68,
+ 0,106,157,212,188, 10, 51, 78,158, 60,249,210,238,221,187,135,205,154, 53, 43, 28,192,187, 28,199, 77, 75, 78, 78,238, 2, 0,
+ 81, 81, 81, 18, 0,135, 21, 10,197,200, 49, 99,198,140, 25, 55,110, 28, 94,127,253,245,105,132,144,217,143,250,127, 47,145, 72,
+ 62,125,231,157,119, 28, 45, 22, 11, 28, 29, 29, 97, 54,155, 27, 62,138,142,141,198,141, 27,139,117, 58,221,230, 25, 51,102,244,
+ 27, 48, 96,128,109, 10, 47,255, 99,199,142,205,249,224,131, 15, 58,196,196,196, 12,172,201,100,197,196,196, 68, 3,248, 60, 44,
+ 44,172,247,235,175,191, 46,136,141,141, 69, 89, 89, 25,246,237,219, 55,101,203,150, 45, 83, 98, 98, 98, 78, 2,152,150,144,144,
+112,228,113, 98,124,224, 61,211, 1, 4,222,123,153,145,144,144, 16,244,164,180, 31, 7,129,204, 5, 41,131,186, 33, 52,185, 0,
+ 0,144,243,253,124, 0,128,235,167, 95, 61,205,176,120,170,225,145,166, 62,209,233,116, 45, 63, 30, 63, 28, 12, 83,113,151, 24,
+ 22, 18,136, 57,159,140, 38,191,237,216,219,178,182,253,218,183,111,191,128,101,217,112, 79, 79,207, 15, 13, 6,131,116,225,194,
+133, 82,181, 90, 29,185,121,243,102,154,152,152, 8,177, 88, 12, 55, 55, 55,116,239,222,221, 33, 46, 46,174,225,201,147, 39, 3,
+183,108,217, 50,160,111,223,190,171,118,238,220,185,189, 38, 93,239,102,207,135,251,249,248, 31,253,106,214, 91,158, 77, 67, 66,
+ 97,178, 88,144,149,171, 6,133, 4,254,190,206, 24,246, 66, 11,113,108, 43,113,216,215, 75, 14, 30,241,107, 58,160,179,246,242,
+111, 87,234, 58,198, 78, 49,206,103, 7,118,105, 24,243,124,239, 14, 76, 88, 84, 99,136, 29,156, 42,215, 53,107,217, 18,205, 90,
+182, 36,163, 71,151,134, 36, 94, 72,156,186,231,224,153, 79, 58,197, 56, 39, 28, 79, 40,175,121, 98, 76, 10, 7,219,220,105,131,
+ 94,124, 25, 17, 17, 17,247,157,204,109,127,167,165,165,129, 16,130,252,252,124,112, 20,146,186,226,124, 16,157, 78,135,211,167,
+ 79,163, 69,139, 22,232,213,171, 23, 94,121,229, 21,249,182,109,219,126, 93,188,120,113, 23, 0,163,235,171, 87, 21,150,101, 99,
+ 91,182,108, 41, 48,155,205, 16, 8, 4, 40, 40, 40, 64,106,106, 42, 66, 67, 67, 5, 44,203,118,173,109, 95, 74, 41, 58,116,232,
+128,121,243,230,101, 29, 61,122,180, 37, 0,116,238,220,249, 66,219,182,109,125, 22, 44, 88,144,117,252,248,241, 24, 0,136,141,
+141, 77,104,213,170,149,221,229,180, 78, 78, 78,111,190,255,223, 15,124,138,239, 22,234, 45,165,165,102, 25,199, 90, 93,165, 34,
+ 82,146, 87, 80,116, 39,211, 85,247,230,152,241,194, 79, 39, 79,120, 19,128, 93,109,246,114,185, 60, 48, 50, 50,242,236,138, 21,
+ 43,124,189,188,188, 80, 84, 84,132,130,130, 2,156, 61,123, 22, 28,199, 33, 46, 46,206,161,101,243,230, 45,191, 94,176,224,148,
+ 92, 46,111,111,143,201,114,240,242,198,230, 46, 21,255, 26, 47,221,174, 56, 41, 18, 66,176,231,149,254,149,219, 12, 77,175,152,
+220, 92, 42,149, 62,242,180, 62,148,210,246,177,177,177, 98, 0,152, 56,113, 98, 73,121,121,249, 28, 66,200,175,217,217,217,234,
+ 58,118,157, 56,117,234, 84,101, 72, 72, 72,208,175,191,254,138,178,178, 50, 0,240, 13, 9, 9, 65,120,120, 56,123,244,232, 81,
+ 68, 68, 68,192,197,197, 5, 71,143, 30,197,233,211,167, 17, 29, 29,237, 34, 22,139, 95, 70, 13, 6,171,115,159, 46,211, 28, 68,
+145,157, 26,181,122, 3, 50, 87, 57, 86,172, 93,143,148,243,171, 58, 25, 45,215,166,125,242,174,242, 53, 1,117,120, 67, 25, 46,
+155, 28,220,170,171, 87, 88,147, 1,104, 16,115,209,219,200, 30, 75,157, 54, 46,116,174, 80,106, 88, 61,253,171,236,130,234,116,
+ 9, 33,140,191,191,255,252,248,248,248,151,150, 46, 93,234, 14, 0,151, 46, 93, 66, 78, 78, 14,124,124,124, 32,149, 74, 33, 18,
+137, 32, 20, 10,235, 53, 85,150,163,163, 35, 52, 26, 13,108, 55, 14, 44,203,162,180,180,180,114,210,240, 25, 51, 8, 51,125,186,
+125,217, 38,185, 92,222,177,101,203,150,107, 84, 42, 85, 64,213,229,241,241,241, 24, 61,122, 52,202,203,203, 17, 29, 29, 29,235,
+231,231,103,124,235,173,183,192,113, 28,180, 90,109,217,165, 75,151,158, 83,171,213,103,106, 56,110,125, 78, 78, 14,198,140, 25,
+131,140,140,140,113, 10,133, 34,157, 97, 24,169, 68, 34,177,173,151, 40, 20,138,136,136,136,136,111,223,122,235, 45,164,165,165,
+225,250,245,235,103, 31,231,166,202,193,193,161,156,101, 89, 95,171,213, 10,189, 94,143,184,184, 56,105,100,100,164, 86, 36, 18,
+ 93, 43, 42, 42, 26,150,153,153,169,177, 71,135, 16, 34,148,203,229,254, 34,145,104,233,248,241,227,251,116,233,210, 5,215,174,
+ 93,195,158, 61,123,240,252,243,207,163,107,215,174,152, 50,101, 74,223,105,211,166, 77, 4, 80,211,205,192,166,205,155, 55, 7,
+171, 84,170,202, 41,145, 92, 93, 93,241,230,155,111, 98,248,240,225,216,181,107, 87,135, 47,190,248, 98,115,215,174, 93,125,143,
+ 60, 70, 75,197, 3, 4, 38, 36, 84, 76,197, 23, 19, 19, 19, 88,199,182,127, 27, 14,173, 58, 32, 52,185, 0,183,163,188, 0,160,
+210,104,217, 94, 67, 89,235,101,152,231,111,164, 90,131,101,210,235,204, 66,134, 94,243,145, 71,111, 56,187,103,124,101, 19, 33,
+172,244,154,201,172, 51, 3, 0,203, 81,148,232,172,112,116, 96,144,166, 41,197,229,219,249, 15,233,208, 7, 74, 45,117, 58,221,
+127, 23, 45, 90,132, 47,191,252, 50, 94,175,215,151,165,166,166,106,202,202,202,202,135, 13, 27, 70, 68, 34, 17, 78,156, 56,129,
+ 59,119,238,160, 89,179,102,112,119,119, 71,199,142, 29,197,189,122,245, 10, 24, 57,114,228,107, 0,182, 87,167, 73, 94,122, 73,
+ 32,151, 56,252, 62,127,214, 16, 79, 34,184,142,235, 25, 69,104,168,106, 3, 47,183, 0,168,243,202,144,112,117, 23,174,223,218,
+137,134,170, 64,140,126,181,161,251, 55, 63,228,237, 32, 49,111, 55,164, 9,127,246,243,122, 80, 19, 0,164, 98,182,245,103,139,
+ 18,193,150,223, 2,181,100,128,154, 31,154,221, 5, 78,238, 1,136,108,225, 7, 39,137, 15,115, 41,249,155,214,181, 29,187,209,
+ 74, 63,154, 61,115,198, 79,205,163, 99, 80, 92, 92,140,239,190,251,174,210, 88, 81, 74, 43,239,184,219,181,107, 7,139,197,130,
+159,126,250, 9, 22,174, 34,253, 95, 91,156, 15, 48,180,109,219,182,235, 41,165, 18, 71, 71,199,156, 22, 45, 90, 4,189,251,238,
+187,194, 33, 67,134, 64,175,215,191, 37,151,203,247,106, 52,154,173,245,212, 4, 0, 52,104,208,160, 99,215,174, 93, 29, 5, 2,
+ 1,204,102, 51,138,139,139,145,149,149,133,212,212, 84,120,123,123, 3, 85,250,111,213,164,249,224, 92,136,148, 82,106, 59,254,
+ 42,203, 42, 63, 23,123,226, 36,132, 68,122,184,123, 56,255,248,245,210,243, 62, 14, 2,226, 29,160, 32, 98, 87,119, 33, 35,115,
+113,160, 2,129, 62, 40, 64,225, 66, 8,137,172,110,223,135,126, 75,132,144, 6, 13, 26,108, 89,185,114,165,175, 72, 36, 2,203,
+178,240,241,241, 65,106,106, 42,138,138,138, 80, 90, 90,138,212,107,201, 8, 86,169,240,159,209,163,228, 51,190, 90,176,133, 16,
+210,170,234, 69,172,186, 56, 57,203,253, 55,229, 53, 25,168,154,150,219,251, 29,113, 28,119, 39, 59, 59, 27, 78, 78, 78,136,138,
+138,146,157, 59,119,238,184, 90,173,174,214, 92, 85,213,148, 74,165, 47,199,198,198,186,172, 93,187, 22, 49, 49, 49,112,115,115,
+195,225,195,135,113,233,210, 37,152,205,102,166,180,180, 20, 50,153, 12,115,231,206, 69, 96, 96, 32,138,139,139,145,158,158,238,
+ 37, 18,137,188,107,210, 60,182,235,232,204,194,219,135,167,229, 8,246,198,173, 88,187, 30,111, 13, 29, 2,127,235,237,227, 30,
+ 13,153,153,241,125, 59,124, 42, 16, 5,244,115,118,105,234, 17,222,116, 0,196, 18, 25,222,253,232,115, 92,191,252,187,135,174,
+244,210, 56,214,146, 25, 0,224, 63, 15,106,146,138, 15,136, 81, 40, 20,163,150, 45, 91,230, 98, 91,206, 48, 12, 68, 34,209,125,
+198,202, 54, 25,123,117,159,105,117,159, 39,203,178, 48,155,205, 48,155,205,224, 56, 14,121,121,121, 40, 45, 45,133,135,135, 71,
+197, 6,211, 1, 2, 66, 40,170, 55, 44, 85, 53, 25,134, 25,182,126,253,250, 0, 39, 39,167,135,182,203,204,204, 68,113,113, 49,
+156,157,157,225,238,238, 14,139,197, 2,171,213, 10,163,209, 40,235,218,181,235, 88, 0,103,170,211, 20, 8, 4, 19,198,140, 25,
+ 19,187, 99,199,142,208, 89,179,102,193,108, 54,207,207,203,203,131,205,160,117,236,216,177, 29,165, 52,101,252,248,241, 0,128,
+ 25, 51,102, 88,202,202,202,222,177,231,216,171,195,207,207,175,113,255,254,253, 61, 14, 28, 56,128,142, 29, 59,194,104, 52, 98,
+236,216,177,174,163, 70,141,114, 61,121,242,164,207,194,133, 11, 87, 3,232, 89,155,102, 76, 76,140, 72,171,213, 78, 26, 54,108,
+216,196,158, 61,123,186,229,231,231,195,193,193, 1, 27, 54,108,192,143, 63,254,184,219,108, 54, 79,221,188,121,243,236,229,203,
+151,199, 13, 24, 48, 0,203,151, 47, 31, 79, 8,249,146, 82,202, 85,163,169, 8, 8, 8, 64, 82, 82, 18, 60, 60, 60,224,237,237,
+141,226,226, 98,156, 62,125, 26,103,207,158, 69,100,100, 36, 8, 33, 30,168,184,166, 85,107,176,106,137, 51, 29,143,152,169,178,
+247,243,172, 15,117,105,218, 42,212,108,103, 72,150,173,232, 18,205, 2,168,201, 77,219, 19, 39, 33, 68,168, 80, 40, 6,184,187,
+187,143,163,148, 10, 11, 11, 11,151, 57, 57, 57,109,186,117,235, 86,181, 89,214,191,226,216,159, 53,132, 0, 64, 8,177,125, 47,
+ 93, 41,165, 71,149,201, 40,201,111,229,113,221,203,175,241,122, 47,101,147,138, 15,209, 74,175, 9, 28, 60,174,251,157,215,149,
+ 0,128,217, 66,113,242, 90, 33,146,110,106,145,116, 35, 7, 50,105,221,119,221, 94, 94, 94,232,208,161, 3,126,251,237, 55,100,
+102,102,202,230,206,157, 27,110, 54,155,205,253,251,247,207,110,208,160, 65, 97,199,142, 29, 33, 18,137,112,230,204, 25,148,148,
+148, 64, 32, 16, 64, 34,145,128,227,184, 26, 51,109,190, 55,216, 55, 94, 31,221, 50,212,219,157,193,246, 19,123,209, 46,114, 32,
+156, 28, 68,200, 43,212,131, 33, 4,183,238, 28, 0,203, 58, 35,241, 90, 6,218, 55,117, 70,167,182,110,170,178,131,119, 71, 3,
+ 88, 98,207, 7,100, 86, 31,129,164,193, 32, 64,218, 4,212,116, 11,156, 73, 13, 42,242, 69,185, 78,138,252,180,116, 92, 59,189,
+ 9,212,170,171, 83, 39, 51, 51,251,127, 10,133,162,227,145,225,111,188,193,113, 28,230,205,155,119,228,198,141, 27,221,170,110,
+211,176, 97,195,195, 83,166, 76,233, 90, 88, 88,136,189,123,247,174,202,206,206, 94,105, 79,140, 54,178,179,179, 15, 0,240,180,
+189,150,203,229,129, 23, 46, 92, 88,251,203, 47,191,180,127,237,181,215,176,113,227,198, 15, 1,108,173, 89,225, 97,198,143, 31,
+ 47,250,237,183,223,122, 59, 58, 58,126, 55,109,218, 52,153,201,100,130, 70,163, 65, 78, 78, 78,101,182,237,202,149, 43,172, 80,
+ 40, 60, 89,155, 78,117,166,201,182,252,193,155,236,123,203,236,189,243, 46, 51, 89, 44, 70,231, 0,133,165,255,128,222,205, 46,
+157,189,120,221,209,211,147,105,214, 58,186,241,181,155,105, 9,164,162, 9,198,174,102, 24,149, 74, 53,100,250,244,233,205, 92,
+ 93, 93,193,113, 28,220,220,220,144,151,151, 87,105, 40, 77,165, 37, 48,151, 20, 35, 41, 61, 21, 29,187,118, 71,175,246,237,162,
+118, 90, 44, 67, 0,172,171, 77,215,179,121,203,202,204,213,198, 80,175,202,229,175,164, 21, 85, 26,128, 93,109,194,224, 32,115,
+ 70,211,247, 63,182,243,176, 31, 70,163,209, 92, 8, 10, 10,218, 21, 23, 23,215,103,244,232,209, 76, 78, 78,206, 30, 63, 63,191,
+ 88,173, 86,123,181,182,253,100, 50, 89,195,252,252,124,148,150,150,194,205,205, 13, 11, 23, 46,132,175,175, 47,116, 58, 29,206,
+157, 59, 71, 85, 42, 21, 57,124,248, 48,148, 74, 37, 10, 10, 10, 96, 54,155,161,211,233,114, 76, 38, 83,141,125, 36,239, 53, 3,
+198, 79,232, 37,223,157,114,126, 85, 39, 37, 82,207, 13,254,176,211,141,196,179,215, 51, 15, 29, 60, 49,211,106,144,102, 22,101,
+237,159, 20,210, 58,209,123,220,135, 51,176,120,254,116,164,156, 57,122,215, 47,176,116, 9, 75,140,171, 98,123,215, 28,175, 78,
+167, 51, 36, 39, 39,187, 36, 38, 38,130, 97, 24,184,186,186,194,217,217,185,114, 98,115,155,185, 18, 10,237, 79,208,219,110,112,
+108,230, 42, 47, 47, 15,183,210,175, 99,243,161,213,176, 88, 45,222, 43,219,186,230,132,138,197, 73,222,197,228,147,252,203,244,
+ 66,109, 90,148,210,101,175,188,242,202, 16,165, 82,233, 82,117,121,139, 22, 45,240,234,171,175, 98,207,158, 61, 56,127,254,252,
+125, 55, 88,121,121,121, 26,150,101, 87,213,164,153,145,145, 81,164, 82,169,226, 70,141, 26,149,176,117,235, 86,215,175,190,250,
+170,114, 98,115, 91,179,168,237,121,237,218,181, 72, 72, 72,152,150,147,147,115,205,238, 15,160, 10,254,254,254,145,253,251,247,
+ 63,182,100,201, 18,119,173, 86,139,252,252,124,148,151,151, 67, 36, 18,193,106,181, 34, 44, 44,140,176, 44, 27, 92,155, 70,227,
+198,141,197, 12,195,252,126,232,208,161,222,225,225,225, 0, 0,139,197,130, 19, 39, 78, 96,244,232,209, 5, 78, 78, 78, 47,167,
+165,165,149, 43, 20,138, 41, 59,118,236,136,107,209,162, 5,154, 53,107,230,159,155,155,235, 2,160,184, 58, 77, 91,150,223,246,
+253,252,244,211, 79,149,235, 12,134,138, 41, 39, 77, 38, 19,105,221,186,117,240,185,115,231,234, 83,220, 82, 83,166, 42,163,202,
+107,187,250, 22,255, 29,164,255,178, 2,105,159,188,135,160,227, 41, 0,128,132,198, 21, 93,174,130,142, 38, 87,108, 48,124,120,
+189,244, 20, 10,133, 23,165,244,173,158, 61,123,190, 31, 23, 23,231, 35,151,203,225,229,229,133, 75,151, 46,197,238,221,187,247,
+ 59,149, 74,245, 3,203,178, 63,216,147,173,127, 92, 30,244, 34,127,245,251,253,213, 84,158,129, 40,165,228,222,193, 17, 12, 30,
+204,122,111,218,148,175,142,146,152, 37, 66,167,235, 0, 96, 50,235,204,126,231,117, 21,195, 52,204, 92, 11, 10, 10,150,187,151,
+109,160, 20,172,157,117, 32,134,107, 47,130, 43,250, 29,190, 30, 3,176,124,249, 86,228,230,230,138, 23, 46, 92,216, 96,235,214,
+173,170, 97,195,134,101,132,133,133, 21,119,239,222, 29,171, 87,175,134,191,191, 63, 76, 38, 19, 56,142,171,209,189,185,120,178,
+131,219, 54, 11, 19, 92, 79,191,132, 86,225, 47, 34, 88,222, 17,183,212,197, 3,211, 49,224, 0, 0, 32, 0, 73, 68, 65, 84, 40,
+ 44, 53,162,160, 88,143,136,136, 15,161,189,171, 67, 73,185, 1,151, 82,126,133, 74, 30,194, 8, 68,183,226, 96,167,193, 50,222,
+ 90, 3, 99,234,122,136,229,221, 32, 9, 25, 2,145,119,123,100,166, 28,193,197, 3, 11,144,117,227, 15, 80,142,133, 95, 64,181,
+ 9,146,135,160,148,126,182,104,209,162, 97,115,230,204, 17,190,247,222,123, 93,149, 74,101, 87,181, 90,125, 4, 0,148, 74,101,
+215, 49, 99,198,116,117,113,113,193,236,217,179, 45,148,210,207,236, 18,173, 5,141, 70,147,161, 84, 42,199, 29, 56,112, 32,113,
+228,200,145,136,140,140,108, 73, 8, 97,236,233, 88, 27, 22, 22, 54, 90, 34,145,140,176, 90,173,225, 67,135, 14,101,222,122,235,
+ 45,153,175,175, 47,210,210,210, 96, 52, 26,193, 48, 12,196, 98, 49,174, 92,185,194,253,254,251,239,197, 98,177,120,124, 93,154,
+ 28,199,193,219,219, 91,217,169, 83,167, 4, 0,240,244,244, 84,113, 28, 7, 47, 47, 47, 85,135, 14, 29, 18, 0,192,195,195, 67,
+ 89,157, 17,171, 9,179,217,124, 46, 35, 61, 61, 34,182, 83,172,252,216,249,171, 23, 6,189,208,175, 27, 35,100,152, 59,233,154,
+115, 62, 94,158,206, 39, 78,254, 81, 98, 54,155,207,217,163, 37, 18,137,250,117,236,216, 81, 88, 88, 88, 8,133, 66,129,188,188,
+ 60,168,213,106, 88, 44, 22, 24,138, 11, 97, 46, 41,129,185,184, 8, 84, 87,134,219,231,206, 32, 42, 64,233,176,175,162, 19,124,
+173, 6,203,230, 21,171,155,152,218,182,204,193, 69, 6, 71, 23,151,202,230, 15,123, 81, 40, 20, 3, 92, 93, 93, 39,149,150,150,
+238, 82,171,213,179, 76, 38,211,187,115,230,204,105,253,249,231,159,123, 79,154, 52,201,117,210,164, 73, 27, 27, 52,104, 16,157,
+150,150,102,172, 73,163,172,172,236,150,197, 98,241, 2,224,119,240,224, 65,248,248,248,160,164,164, 4, 22,139, 5,122,189,222,
+228,225,225, 33, 45, 40, 40,128,193, 96,128,201,100,130,171,171, 43, 18, 18, 18,238, 90,173,214, 26,155,237,109,184, 55,100,102,
+ 26, 45,215,166,121, 54,118, 86,179,212,171, 75,169,158, 43,156,254, 85,246, 76, 0, 95,199, 55,108,184,194,196, 29, 77,189,126,
+249, 55,143,212,115,135,239,102,223,208,133,174,216,121,187,198, 62, 88,180,226, 36,197, 17, 66,104,163, 70,141,144,151,151, 7,
+129, 64, 0,103,103,103,200,100, 50, 68, 70, 70, 34, 51, 51,243,145, 13, 86, 85,115,117,224,212, 14,228,151,105,176, 98,254, 90,
+ 40,253, 3, 24, 0, 62,234,156,204,231, 70, 78,124,169,109, 72, 71,143, 57,169,127, 20,214,216,175, 45, 59, 59,251, 34, 0,215,
+170,203,148, 74,101, 55, 15, 15,143, 67,102,179, 25,105,105,105,216,183,111, 95,215,172,172,172,163,118, 7, 8, 32, 43, 43,235,
+182, 82,169,140,123,225,133, 23, 86, 55,107,214,172, 33,165, 20,145,145,145, 24, 48, 96, 0, 54,111,222,140,171, 87,175,162,164,
+164,132, 59,126,252,248, 74,141, 70,243, 72, 29,114,228,114,121,163,190,125,251,254,177,120,241, 98,143,252,252,124, 24, 12, 6,
+148,149,149, 97,211,166, 77,136,141,141,133, 84, 42,197,162, 69,139, 74,172, 86,235,226,154, 52, 26, 55,110, 44,166,148,254,182,
+117,235,214,222,161,161,161,184,118,237, 26,142, 31, 63, 14, 31, 31, 31, 56, 58, 58,162,127,255,254, 94,235,215,175,127,183,113,
+227,198, 11, 68, 34,209,204, 62,125,250,128,101, 89,156, 63,127, 94,147,158,158, 94,227,247,111,203,212, 84,135,193, 96, 0,165,
+ 20, 22,139,101, 33,195, 48, 47,199,196,196,244, 74, 72, 72,120,172, 78,209,255,148, 62, 87, 0,160, 82,169,154,136, 68,162,255,
+120,120,120, 32, 47, 47, 15, 69, 28, 32,187, 91, 81,116, 91,124,239,116,121,247,238,221,202,115, 77,120,120,248, 78,189, 94,255,
+ 73, 86, 86, 86,141, 89, 38,165, 82,217,220,201,201,233,253,254,253,251, 15,235,219,183,175,192,108, 54, 99,199,142, 29, 88,188,
+120, 49,226,226,226, 16, 22, 22,134, 15, 63,252,208,205,104, 52, 78,222,179,103,207,164,168,168,168, 61,165,165,165, 31,215,166,
+249, 36,184,207,139,252,203,169, 60, 3,221, 59,160, 63,251,209, 12, 30,204, 42,129, 66, 0,240,247,247,247,246,244,244, 92,204,
+178,108, 55,124,250, 41, 92,132,110, 72,187,117, 3,165,133, 28, 44, 38, 35, 56,142,130,214,236,129,238,131, 43,250, 29,174,157,
+ 41, 74,142, 17,152,205,102,248,250,250, 98,238,220,185, 40, 46, 46, 22,142, 28, 57, 50,120,198,140, 25, 23, 13, 6, 3,202,203,
+203,161,215,235,161,215,235,107, 53, 88, 98,169,177, 89,144, 95, 56, 74,245,109,224, 36,145,160,160,196,136,194, 82, 35,242,139,
+ 12,216,242,219, 80, 24,245, 58, 88, 77, 38,176,102, 43,100,126, 3, 17,230,217, 13,192, 77,187, 70,166,173, 76,162,112, 86,152,
+213,251, 97, 86,239,135, 83,139, 41,248,109,209,107,247,109,103,181,218,215,228,175,209,104, 50, 20, 10,197,247, 35, 70,140, 24,
+255,194, 11, 47,224,135, 31,126,248, 18, 64, 43, 0,144,201,100, 95, 14, 28, 56, 16, 87,174, 92,193,177, 99,199,150, 62,169,187,
+ 5, 74,169,151,167,167, 39, 24,134,129, 78,167, 51,214,101,174, 54,109,218, 68,102,204,152,177,167,127,255,254,237,223,125,247,
+ 93, 39,127,127,127, 80, 74, 97, 50,153,144,149,149, 5,134, 97, 80, 84, 84,132,159,126,250,169,252,252,249,243, 84, 34,145,156,
+ 20,137, 68,111, 95,185,114, 37,187,174, 88, 60, 60, 60, 48,116,232, 80,159, 54,109,218,248, 84,173, 24,124,249,229,151,125, 90,
+181,106, 85,185, 76,165,170,177,160,235, 33, 12, 6,195, 79,179,103, 78,235,246,203,154, 13,145,141, 34,195, 60,118,237, 59,124,
+193,203,203,213, 49, 56, 56,212,161,184,168,200,184,120,225,124, 97,121,121,249,255,236,148,139,242,246,246, 70, 78, 78, 14,110,
+222,188, 9,163,209, 88,209,132,163, 43,131,169,168, 8,230,226, 66,192,160,135,132,101, 97,204,215, 34, 56, 52, 24,248,179,194,
+176, 86,170,154,169,170,203,108,207,142,110,174,144, 56, 59, 67, 32,170,190, 89,171, 58,228,114,121, 76,203,150, 45, 55, 44, 95,
+190, 92, 60, 97,194,132,182, 13, 26, 52, 88,156,147,147,147,174, 82,169,122,204,159, 63,255,236,172, 89,179, 28,134, 13, 27,214,
+104,217,178,101,175, 3, 88, 86,147,142,193, 96,216,176,107,215,174, 87, 3, 3, 3,253, 46, 95,190, 12,131,193, 0,142,227, 16,
+ 31, 31, 15, 0, 82,219,118, 41, 41, 41,122,189, 94,175,189,114,229, 74,105,122,122,186, 25,118, 84,253, 77, 91,172, 62, 61,225,
+ 37,213, 32,185, 92,113, 74,226, 16, 20,194,232, 18, 6, 78,120, 73,245,213,130,141, 89,134,221,183,110,149, 78, 27, 23, 58, 87,
+ 87,122,121,156,135,170,124,201,146,237, 53,155,171, 42,208,123, 21,131,240,246,246,174,108, 18, 20,139,197, 0, 0, 63, 63, 63,
+ 20, 23, 23,215,218, 68, 88, 29, 44,203,162,184,184, 24,197,197,197,184,113,231, 26,242, 74, 53,216,191,238, 20, 88,150,173,204,
+142, 40,252, 84, 56,176,238,172, 75,215,193,173, 63,241,106, 78, 14, 23, 36, 81,187,140, 59, 0, 48, 12,243,254,139, 47,190, 8,
+179,217,140, 1, 3, 6, 96,237,218,181,239, 3, 56,106,239,254, 54,212,106,245,105, 66, 72,248,205,155, 55, 93, 45, 22,203,243,
+253,251,247, 95,213,167, 79, 31,156, 58,117, 10, 7, 15, 30,236,106, 50,153,174,179, 44,171,151,203,229,115,228,114,185, 47, 33,
+100, 78,118,118,118,173,213,206, 17, 17, 17,195, 92, 92, 92,102, 59, 58, 58,150,246,233,211, 71, 97,203, 92,149,151,151,195,106,
+181, 34, 43, 43, 11,187,119,239,214,236,218,181, 75, 67, 41,117, 42, 43, 43,155,158,145,145,177,169, 58,173,152,152, 24,145,197,
+ 98,217,246,251,239,191,199,133,134,134,226,232,209,163,152, 55,111, 30, 26, 54,108,136,149, 43, 87,162, 67,135, 14, 8, 14, 14,
+134,167,167,231,127, 74, 74, 74,218,207,155, 55,175, 79,203,150, 45,177,117,235, 86,228,230,230,126, 87,219,249,169,182,243,172,
+ 94,175, 7,165, 20,221,187,119, 31, 61, 97,194, 4,244,239,223,127, 95,171, 86,173,218,156, 63,127,254,134, 29, 31,235, 63, 50,
+ 83,101, 67,161, 80,204,237,217,179,231,164,230,205,155, 99,205,154, 53, 48,182,234, 8,231,149,219,113,185, 95, 44, 40, 0,197,
+202,223, 0, 0,151,159,175, 40,232, 8,238, 49, 24,147, 38, 77,234, 51,112,224,192, 64, 0, 77,106,208,252,234,181,215, 94,155,
+248,218,107,175,225,194,133, 11, 88,182,108, 25, 46, 94,188, 88,121,205,179, 88, 44, 72, 78, 78, 70,114,114, 50,228,114, 57,250,
+245,235, 71,222,126,251,237,248,248,248,120, 31,220,187,102,253, 85, 60,228, 69,254,197, 84,159,193,170,130,191,191,191,183,135,
+135,199,149,197,139, 23,123,181,109,219, 86, 96,181, 90,113,240,208, 33,124,240,222, 72,196,245, 27, 7,131, 81, 2,171,129,128,
+ 21,203,236,123, 71,215,126, 40, 57, 70,192,201,250,192,100, 50, 97,244, 90, 49,220,137, 22, 11,223,240, 3, 0,162,215,235, 97,
+ 52, 26,161,215,235, 81, 94, 94,142,242,242,114,176, 44, 91,227, 89,178,180,200,217,108,182,112, 80,231,166, 35, 75,115, 25,110,
+178, 64, 80, 38, 0,218,187, 58, 16,248,194, 98, 72, 1,119,239, 31,211,168,207, 66,185,241,241, 76, 49, 91,250,112, 49, 26,199,
+217,223,167,146,101,217,217,243,231,207, 31,189,120,241, 98,135,113,227,198,197, 40, 20,138,231, 1, 96,226,196,137, 49, 82,169,
+ 20, 75,150, 44, 49,178, 44, 59,251,177,130,188, 7, 33, 68,160, 84, 42,223,239,220,185, 51, 74, 74, 74,112,229,202,149, 29,117,
+237, 51,101,202,148,177, 47,190,248, 98,251, 25, 51,102, 56, 25, 12, 6,232,116, 21,205,159,197,197,197, 40, 47, 47,135, 86,171,
+197,196,137, 19, 11,205,102,243,152, 59,119,238,108,182, 55, 22, 74, 41,126,255,253,119,252,242,203, 47,247, 85, 12,190,252,242,
+203, 62,107,215,174,205, 93,180,104,145,154, 82, 74, 61, 61, 61, 85,131, 7, 15,246,181,183,133, 48, 59, 59, 91,175, 80, 40,198,
+207,154, 61,235,215,175,230,207,247,189, 91, 80,120, 93, 44,113, 52, 56, 57, 58,120, 78,250, 96, 38,213,106,181, 19,181, 90,109,
+221,109,184,247, 40, 44, 44, 68,106,106, 42, 28, 29, 29, 33, 22,139,193,234,202,192,149,151,195, 88, 88, 0,198,100,132, 3,203,
+194,211,201, 1, 1,126,126, 8,244,181,175, 47,190,230,240, 62,236, 30, 82, 49,124,139,173, 89,144, 16,130, 61, 29, 26, 65, 34,
+115,134, 84, 38, 67,199,109,199, 1,160,194, 40, 44, 92, 94,167,166,191,191,191,183, 66,161,248,253,187,239,190, 19,231,231,231,
+227,202,149, 43,137,105,105,105,197,158,158,158, 46, 34,145,136,187,113,227,198,129,148,148,148,126,193,193,193,160,148,214, 85,
+253,245,245,150, 45, 91,158,139,141,141,181, 6, 7, 7, 59,231,229,229, 5, 22, 22, 22, 18,141,230,254, 62,204,231,206,157,147,
+102,100,100,232, 56,142,219,138,138,113,176,234,252,225, 79,120, 73, 37, 61,121, 1,227,187,120, 7, 55,119,243,105,142,124,203,
+197,230,167, 19,115,198, 79,120, 73,181,104,193,198, 44, 3, 75,140,171, 88, 75,102,128, 80,106, 88, 93,231, 65,163, 34,139,213,
+184,113, 99, 80, 74,113,238,220, 57, 28, 63,126, 28,199,143, 31, 71, 90, 90, 90,229, 54,110,110,110,216,191,127, 63,186,117,235,
+ 86,139,210,253,232,116, 58,200,229,114,184,187,187, 99,235,145,159,241,227, 87,107, 43, 59,186,219,200,207,207,135,147,147, 19,
+102,127,176, 64, 54,242,163,193, 51, 1,244,178, 71, 59, 32, 32, 32, 36, 54, 54,182,175,159,159, 31, 10, 11, 11,225,227,227,131,
+214,173, 91,247,247,243,243, 11,214,106,181,143, 52, 78,155,201,100, 26,219,173, 91,183, 89, 19, 39, 78,132,197, 98,193,144, 33,
+ 67,144,154,154,186,225,246,237,219, 11,131,130,130,198,143, 27, 55,206,207,219,219, 27, 99,199,142,117, 6, 48,168, 38,157,200,
+200,200,255, 78,158, 60,249,139,225,195,135, 59, 88, 44, 22, 28, 60,120,176, 50, 75,109,181, 90,145,158,158,142,233,211,167,107,
+ 74, 74, 74,186,100,101,101,221,170, 43,174,156,156,156,137,219,182,109,139,143,136,136,192,158, 61,123, 48,102,204,152,157, 50,
+153,172, 73,223,190,125, 3,157,157,157,145,152,152, 8,179,217, 12,185, 92,238, 55,121,242,228,126,189,123,247,198,129, 3, 7,
+ 48,115,230,204, 29,254,254,254,181, 26,118,150,101, 33, 20, 10, 97,121,160, 79,163, 64, 32,192,197,139, 23,209,189,123,119, 76,
+154, 52, 9, 0,112,224,192, 1,215, 94,189,122, 93,238,218,181,171,235,145, 35, 71,106,204,222, 2, 53,103,170,254, 41, 85,132,
+206,206,206, 35, 86,174, 92,137,155, 55,111,226,143, 63,254, 64, 65, 65, 1, 76, 38, 19,138,185,138, 62, 87, 14,247, 50, 87, 84,
+ 25,132, 14, 19, 63,193, 43,253, 6, 65,163,209,128, 97, 24,239,154, 52, 9, 33,195, 62,249,228, 19,236,222,189, 27,115,231,206,
+ 69, 73, 73, 73,181,219, 57, 58, 58,162,117,235,214,136,142,142, 70,106,106, 42, 0,212,168,249,164,120, 38, 51, 88, 53,225,225,
+225,177,240,251,239,191,247,138,141,141, 21,148,151,151,131,227, 56,180,111,215, 14,175,191,241, 58,246,110,221, 4,121, 72, 55,
+ 8, 12,142,176,186, 60,220,161,179, 58,216,128, 85,184,123,247, 46, 28, 28, 28, 32,189,215,161, 52, 41,171, 50,189, 11,131,193,
+ 80,105,174,108,207,181, 97, 53, 73, 18,146,111,179, 1, 37,101, 23,113, 38,225, 23, 88, 76, 38, 4,135,127, 12,163,213, 27,206,
+190,111, 66,111,254, 29,230,162,138,202, 93,137,107, 87,104,181,249, 0,136, 93, 41,206,234, 46,242,156,254,225,206,238, 28,107,
+191,193,210,106,181,121,114,185,252,235,139, 23, 47, 78,137,143,143,199,143, 63,254, 56,151, 82,138, 62,125,250,224,220,185,115,
+ 72, 76, 76,252, 90,171,213,230,217, 45, 88, 3,132, 16,161,191,191,255, 79, 75,150, 44,233,227,231,231,135, 45, 91,182,128, 82,
+ 90,167, 33,146, 72, 36,111,141, 31, 63,222,201,150,197,144, 72, 36,208,235,245,200,201,201,129,217,108,198,214,173, 91,141, 38,
+147,105, 66, 90, 90,154,221,230, 10,168,184, 48,182,105,211, 6, 11, 22, 44,200,250,227,143, 63, 98, 0,160, 67,135, 14, 9,173,
+ 90,181,242, 89,180,104,145,250,244,233,211, 49, 0,208,182,109,219,243,209,209,209,245, 26,199, 37, 59, 59, 59, 43, 34, 34,226,
+150,222, 96, 16,121,120,121,234, 92,156, 37,180,164,180,148, 73, 74,186,160,209,106,181,105,117, 43, 84,146,124,229,202,149,166,
+106,181, 26,233,233,233, 96,117,101, 96,140, 70, 16,163, 30, 61,218,183,131, 35, 40, 28,192, 65,204, 89, 32, 18, 8, 81, 90, 90,
+ 6, 0,201,117,137, 86,237,228,110, 51, 87,132, 16, 72,101, 50, 72, 92,100,112,144,201, 42,215, 1,213,255,238, 30,196,209,209,
+241,215,101,203,150,201,229,114, 57,190,249,230, 27,200,229,242,200,158, 61,123,234,186,116,233,226,232,237,237,141,136,136, 8,
+180,106,213, 10,135, 15, 31, 6, 33,164,214, 11, 35,165,212, 74, 8,233,245,199, 31,127, 76, 60,121,242,228, 75, 10,133,130, 12,
+ 31, 62, 28,113,113,113,112,112,112,128, 94,175, 71, 97, 97, 33,118,238,220, 73, 88,150,109, 9, 0,254,254,254, 65, 13, 26, 52,
+ 88, 75, 8,201,186,115,231,206,203, 15,106,254, 48,187,185,162, 84,207,141,148,251, 43, 6,117,233, 29,220,172,123,239,158, 8,
+ 9,239,129,238,189, 51, 1, 96,174,183,232,206,144, 47,167, 52,221, 26, 28,224,185,242,228,182, 3,159,118,140,239, 54,117,198,
+120,207,153,211, 23,221,181,103,152,134,202,139, 45,195, 48,213,102,169, 4, 2, 1, 24,198,190,185,236, 89,142,205,138,123,163,
+125,229,107,139,213,236,173,244, 15, 96,108,153, 43, 0, 40, 41, 41, 65, 70, 70, 6, 44, 22, 11,188,188,188, 96,177,152,155,219,
+ 37, 14,128,101,217,241, 67,134, 12, 33, 6,131, 1, 19, 39, 78,196,252,249,243, 49, 96,192, 0,114,230,204,153,241, 0,222,183,
+ 87,199,134, 66,161,152, 63,118,236,216,137, 35, 70,140, 64, 81, 81, 17, 14, 29, 58,132,110,221,186,225,251,239,191,247, 57,116,
+232,208, 23, 29, 58,116,128, 64, 32,192,254,253,251, 97, 54,155, 83,106,211,146, 72, 36,239, 13, 31, 62,220, 33, 51, 51, 19, 98,
+177, 24,173, 90,181, 66, 86, 86, 22,202,203,203,145,155,155,139,207, 63,255, 60,167,184,184,184,171, 90,173,174,211, 92, 17, 66,
+152, 78,157, 58,253, 39, 44, 44, 12, 7, 15, 30,196,216,177, 99,119, 59, 59, 59, 15, 42, 44, 44,124,219,104, 52, 46,234,215,175,
+ 31, 58,116,232,128,148,148, 20,244,239,223, 31,173, 91,183,198,161, 67,135, 48,105,210,164,157, 78, 78, 78, 47,214, 49, 14,214,
+141, 35, 71,142, 52,109,213,170, 21,202,203,203, 81, 90, 90, 10,145, 72, 4,119,119,119, 36, 39, 39, 35, 60, 60, 28,147, 38, 77,
+194,130, 5, 11, 48, 97,194, 4,174, 87,175, 94, 86,179,217, 44,182, 85, 89, 62, 34,255,136, 42,194,242,242,114,170,209,104,224,
+234,234,138,141, 27, 55,226,210,129,189,216,245,222,155,144, 78,157, 15, 74, 41,178,102, 77, 70,247,143,166,162, 93,226,109,104,
+ 52, 26,172, 94,189, 26, 12,195, 84, 86,196, 86, 7,165, 20,197,197,197,136,142,142,198,185,115,231,176,122,245,106,124,243,205,
+ 55,149,217, 90,145, 72,132,174, 93,187,226,185,231,158,195,141, 27, 55,176,108,217, 50,184,186,186,214,168,199, 83, 61, 66,160,
+194, 49, 86,125,174, 10,199,113,221, 91,183,110, 45, 40, 43, 43,131,193, 96,128, 86,171,197,157, 59,119,224,232,232, 8,117,110,
+ 6,218, 52, 44, 67, 14, 49,225,202,197,235, 44, 17,136, 46,214,246,102,182, 74, 29,147,201,132,164,164,164,138,210,247,240, 57,
+149,157,159,239,245,249,128,193, 96,192,145, 35, 71,168,163,163, 35,156,157,157, 73,109,109,239,156,213,184,251,240,137,196, 62,
+175, 13,236, 46,217,127,228, 71, 88,140, 86,148, 25,221, 81,110, 48,161, 84, 47,130,201,161, 55, 8, 57, 14, 70,224,128, 14,209,
+ 13,113,232,143, 27, 6,214, 98,222, 99,215,167, 67, 89, 8, 60,155,131,189,155,244,231,251,233,239,191,171, 23, 59,200,192,218,
+217, 68,104, 67, 42,149,206,255,250,235,175,223,251,233,167,159, 92,222,126,251,237, 8,219,197, 98,201,146, 37,165, 82,169,116,
+126,189,196, 30,224, 94, 73,244,107,177,177,177,159, 79,159, 62, 93, 25, 29, 29,141,132,132, 4,204,153, 51,103,103, 78, 78,206,
+111,117,237,111, 50,153, 84, 94, 94, 94, 40, 43, 43,131, 68, 34, 1,203,178,200,205,205, 69, 70, 70, 6, 28, 28, 28,112,246,236,
+ 89, 83, 80, 80,208,150, 71,137,205,158, 14,237, 85, 43, 42,235,131,163,152,139,153,250,209,232, 48,131, 65,223,184,180,180,212,
+ 42, 20, 10,133, 14, 34,214,238,177,175, 0,192, 98,177,236, 56,126,252,248, 11, 29, 59,118,116,184,158,116, 17,230,226, 98, 88,
+ 74,138, 32,102,173,240,140,137, 6, 99, 50,128,152, 44, 80, 70, 81,232,139,156,113,226,194,109,139,197, 98,169, 51, 43,104, 51,
+ 88,140, 64,112,127,191, 43, 87, 23, 72,100, 21, 6,171,234,114, 82, 71,187,150,159,159,159, 83,124,124,124,143,150, 45, 91,130,
+ 82,138,249,243,231,195,100, 50, 73, 44, 22, 11, 44, 22, 11,204,102, 51, 74, 75, 75,177,121,243,102,252,252,243,207, 39,220,220,
+220,234, 44,150,160,148, 90, 85, 42,213,187, 28,199,249, 90,173, 86,179,143,143,143,120,195,134, 13,144, 74,165, 96, 24, 6,209,
+209,209,144, 74,165, 70,133, 66, 97,190, 23,131,229,235,175,191, 22,142, 26, 53, 74, 92,157, 94,139, 54, 17, 31,176,212,171,139,
+196, 33, 40,216,205,167, 57, 66,194,123, 0, 0,158,235, 55, 18, 33, 97, 1, 40,206, 75, 10, 49, 25,211, 7, 10, 72,129,199, 47,
+167,212,201,157,156,154,142, 40,200, 58,114, 29,192, 79,213,233, 61,244,153,114, 28,122,244,232,129, 94,189,122, 85, 54, 7,250,
+250,250,194,100, 50,193,106,181,218,109,174, 0,192, 54,136,232,140, 25,132,193,116, 96,101, 91,151, 28, 0,149,233,201,226,226,
+ 98,100,102,102, 34, 61, 61, 29, 64,197,121,138,163,246,221, 93, 43, 20, 10,199,144,144,144, 55,154, 52,105,130, 67,135, 14, 33,
+ 41, 41, 73,125,244,232, 81,101,155, 54,109,160, 82,169, 70, 40, 20,138, 79,178,179,179,237, 30, 80,217,199,199,199,185, 83,167,
+ 78,239,141, 24, 49, 2, 41, 41, 41,152, 52,105, 82, 65, 78, 78,206,214, 29, 59,118,140,250,239,127,255,203,116,233,210, 5,185,
+185,185,248,225,135, 31,216,179,103,207,126,229,225,225,241,121,109,122, 28,199,165,102,103,103, 55, 48, 24, 12, 40, 40, 40,128,
+109, 72,134, 61,123,246, 96,239,222,189,218,162,162,162,174,217,217,217, 55,237,137, 45, 40, 40,200, 37, 38, 38,198,239,250,245,
+235, 88,183,110, 29,204,102,243,212,180,180, 52,179,155,155,219,154, 37, 75,150, 76, 15, 13, 13,245,236,220,185, 51, 58,116,232,
+ 0, 74, 41,182,111,223,142,207, 62,251,108,167,163,163,227,160,171, 87,175,214,236, 6, 42, 24, 56,115,230,204,153,222,222,222,
+ 47,191,250,234,171, 76, 76, 76, 12,206,159, 63, 15,150,101,209,163, 71,143, 74,115,181,103,207,158, 95,247,236,217, 51, 24,128,
+ 88, 38,147, 73,235,202, 94, 1, 0, 33,164, 63, 0, 91,134, 64, 71, 41,173,179,111,225,223,141,193, 96,192,245,235,215,225,231,
+231,135,176, 54,237, 49,233,242, 29, 28, 63,121, 10,148, 82,116,188,114, 7,101,101,229, 88,185,114, 37, 18, 18, 18, 32, 16, 8,
+ 16, 26, 26, 90,167,166,217,108,198,205,155, 55,145,151,151,135, 1, 3, 6, 96,216,176, 97,248,242,203, 47, 97, 54,155, 49,101,
+202, 20,220,189,123, 23,203,151, 47,199,205,155, 55, 33, 20, 10, 33,147,217,217, 74,245, 24,212,230, 69,254,141,216,213, 11,212,
+106,181,130,227, 56,100,103,103,227,220,185,115,184,115,231, 14,156,157,157,161,183,114,220,119,167, 19, 57,134,136,212, 44,197,
+ 31,212,138,143,106,211, 41, 47, 47,167, 22,139,133, 8,133, 66,156, 60,121, 18,183,110,221,130,107, 24,173,204, 94, 89, 44, 22,
+ 24,141, 70,232,116, 58,136, 68,162,178, 83,167, 78,165,157, 63,127, 62, 68, 40, 20,214, 88, 5,150, 27, 46, 88,181,255,192,193,
+ 15, 98,162, 27, 71,244,236,242, 25,118,236,248, 20, 69, 37, 37, 40, 55, 10, 81,166, 55,163,220, 64,161,112,105,136,182,205, 91,
+ 34,175,192,132, 27, 87, 18,178,242,197,158,117,182,193, 88, 88,166,248,215,197,111,187, 61, 63,120, 44,164,254,157, 97,186,179,
+ 1,156, 94, 91,105,176,196, 82, 23,184,122, 7,162,164, 76,143, 19,201,169,176,176, 76,181,149, 47,213,145,154,154, 90,162, 80,
+ 40,102,159, 56,113, 98,158,173,242,231,216,177, 99,184,125,251,246,236,236,236,236,234,115,181, 53,160, 80, 40,122, 2, 88, 11,
+ 64,234,235,235,171,125,251,237,183,229,189,122,245,146,118,233,210, 5, 2,129, 0, 23, 46, 92,192,219,111,191,189, 79, 38,147,
+ 13,178,167, 50, 79, 34,145,104,139,139,139,221, 28, 28, 28, 96,177, 88,144,147,147,131,148,148, 20,232,245,122,104,181, 90, 16,
+ 66,178,143, 28, 57, 82,175, 17,246,129, 63,135, 95,168,138,173, 42,232, 65,234, 89, 69, 8,149, 74,213,165, 79, 92,151,166, 95,
+ 45, 88, 4,189,174, 12,103, 79,237, 64,225,221,124, 44, 91,177,165,153, 74,165,234, 98,111,103,226,172,172,172,245, 91,182,108,
+153,216,162, 73,147,150,161, 1, 1,184,148,126, 7, 98,142,133,132,101, 33, 48, 25,192,176, 70,168,154, 82, 48,140, 12,218,156,
+ 82, 44,221,119,232,114, 86, 86,214,250,186,116,149,241,207, 99,104,122, 49, 8, 33,216,215,169, 49,164, 50, 25,196, 50,103,116,
+216,124,164,210, 84,165,205,253, 16, 98,103, 25, 60, 90,215, 61, 48,166, 86,171,213,133,133,133,157,191,118,237, 90,235, 70,141,
+ 26, 97,198,140, 25,200,204,204, 4,165, 20,185,185,185,134,188,188, 60,117, 65, 65, 65, 26, 33,100,107,118,118,246, 10,123,138,
+ 26, 0,128,227, 56,223,237,219,183, 3,128, 24, 0, 14, 30, 60, 8,133, 66, 1, 55, 55, 55,148,148,148, 96,248,240,225, 14,211,
+166, 77, 3, 0, 92,184,112, 65, 36,149, 74,107,212,186,114, 49,229,235,194, 18, 90,200,148, 39, 12,202,183, 94,108,214,189,119,
+ 22,158,235, 55, 2,251,119,172,196,161,189, 7,224, 45,186,147,202, 58,150,237,206, 75,205, 47,213,148,135,255,208,184,213, 40,
+ 65,118,217,222,101,227, 6,120, 8, 85,114,110,227,228,239,107, 31,184,151, 82, 10,129, 64,240, 80,135,246,250,154,171,170, 76,
+159, 78, 57, 2, 66, 66, 68,194,139,234,156,204,222, 10, 63, 85,229,205, 69, 70, 70, 6, 50, 51, 51, 17, 22, 22,134, 59,233,183,
+ 33,145,136,107,189,153,172, 18,231,171,253,250,245,115, 49,153, 76,216,182,109,155,149, 16,210,111,251,246,237,231, 91,180,104,
+ 33,236,214,173,155,203,202,149, 43, 95, 5,176,162, 30, 97, 58,203,100, 50,177,197, 98,193,170, 85,171,160, 86,171,187,228,228,
+228, 36, 43, 20,138, 31,222,121,231,157,239,163,162,162,194,146,147,147,111,232,245,250,177,217,217,217, 73,117,137, 21, 21, 21,
+189, 30, 23, 23,183,145,227,184,160,216,216, 88,231,161, 67,135,186, 82, 74, 17, 21, 21,133, 93,187,118,101,103,103,103,219,211,
+135, 9, 0,144,158,158, 94,122,252,248,113,109,227,198,141,253,228,114, 57,196, 98,241, 92,185, 92, 62, 75, 38,147,125,213,191,
+127,127,207, 13, 27, 54, 96,211,166, 77,112,118,118, 70,106,106,106,246,181,107,215, 22,250,251,251,127,107,207, 8,238, 9, 9,
+ 9,169, 0,134,182,105,211,230,179,111,190,249,102, 42,195, 48,175,237,219,183,175,114,172, 51,155,185, 10, 14, 14,126,125,227,
+198,141,195,236,141,249, 30, 78,182, 33, 7, 8, 33, 85,251,231,254, 83,250,102, 89, 76, 38, 19,188,188,188,144,151,151,135,220,
+220, 92, 4, 6, 6,162,125,251,246,176, 88, 44,248,109,199, 78, 28, 63,126, 28,148, 82,120,123,123,195,213,213, 21,137,137,137,
+ 0, 80, 91,245,176,197,108, 54,195,211,211, 19, 69, 69, 69, 72, 76, 76,132,175,175, 47, 38, 76,152, 0,147,201,132, 13, 27, 54,
+224,226,197,139, 96, 24, 6, 62, 62, 62,112,113,113,193,197,139, 23,235,210,228,121,128, 58, 13,150, 64, 32, 56,124,248,240,225,
+193,205,155, 55, 23,222,184,113, 3, 55,110, 84,252,191,233,245,122,171, 80,128, 77,218,164,109, 67,107,218,151, 16,210,180,234,
+ 88, 25, 18,137,100,233,224,193,131,199,142, 28, 57, 18,227,198,141, 3,195, 48,248,233,130, 17, 25, 25, 28,204,102, 51,180, 90,
+ 45, 46, 93,186, 68, 91,183,110, 77, 56,142, 51,119,237,218,245,173,132,132,132, 54, 2,129,160,164, 38, 77,186,113, 35,235,221,
+236,249, 1, 75,150,174, 56,249,198, 27,111,120, 62, 63, 96, 9, 46, 92,189,130,162,242,138, 86, 38,133,183, 51,218, 54,250, 16,
+185, 5, 70,236,221,189,163,144,179, 26, 94,164,151,215, 89,106,139, 19, 0,242,116,122,223, 31, 86,111,153,191,110,243,214,183,
+ 70,191, 62, 84,218,181,235,235, 16,149, 94, 2, 91,144, 0, 69,120, 44,136,192, 9,103, 18, 47, 32,233,102,166, 65,103, 16,172,
+ 40, 49,235, 63,172, 75,179, 42, 12,195,124,183,124,233,162, 47,246,236, 63, 34, 48,155,205,232, 19,215,131,101, 24,230,187,218,
+190,139,234, 52,157,156,156,214, 37, 38, 38,122, 26,141, 70,100,101,101,133, 68, 68, 68,128, 82,138,244,244,116, 44, 92,184,208,
+186,107,215,174, 37, 82,169,116, 82, 77,119,136, 15,106, 90, 44,150,181,171, 86,173,250,248,221,119,223,149,230,230,230,226,218,
+181,107, 40, 47, 47,135,217,108, 70, 66, 66,130,193, 98,177,212, 90, 49, 87, 83,156, 54,131,229,233,233,169,108,215,174,157,173,
+138, 80,201,113, 28, 60, 60, 60, 84,109,218,180, 57, 15, 0,110,110,110,213, 86, 17,214,246,121,102,101,101, 29, 13,111, 24,136,
+ 85, 43, 22,192,108, 54, 66,163, 78, 7, 0,228, 23, 20,163, 54,115,245,208,111,137, 82, 42,151,203, 7,125,179,112,225,255,177,
+119,230,113, 81, 85,239, 31,255,156,123,103,135, 1, 17,100, 27,192, 61, 77, 16, 69, 64,113, 43,113, 43, 51,115,169,204, 37,151,
+ 44, 45,247,114,203,165,114, 23,210, 50,119, 77,203,180, 82,203, 45,203, 29, 83,220, 21,217, 20, 81,113,151,101, 64, 64,100, 17,
+102,159,123,126,127,192, 16,203,108, 40,125,179,126,247,253,122,241,154,185,219,231,158, 59,119,152,249,204,115,158,243,156, 11,
+ 99, 71, 12,243,122,169, 91,119,164, 93, 78,132, 54, 47, 7,140,209, 0, 33, 21,160, 36, 91,134,135, 15,159, 96,201,193, 99,217,
+ 42,181,186,154,105,181,212,206,242,110, 65,103, 39, 72,228,114,136,203,162, 86,166,109, 98,185, 19,132,142,114,176, 34,145,185,
+100,248,106,154, 37, 37, 37,111,141, 25, 51,230,242,193,131, 7,235, 14, 25, 50, 4,125,251,246,141,207,207,207,239,154,151,103,
+187,139,205,146, 38,195, 48,217,189,123,247,246,208,106,181,134, 65,131, 6, 9,114,115,115, 97, 26, 98, 95, 84, 84,132, 67,135,
+ 14,225,197, 23, 75,103,157,185,122,245, 42, 2, 2, 2, 44,106,126, 48,227, 74, 6,128,133, 83, 6,250,126,117, 33, 49,107, 18,
+128,200,198, 47,248,226,248,145, 99, 56,125,252,220,204,246,129,220,170,215,135,182, 91, 32,237,246,206,244,128,144, 15, 88,185,
+179, 55,182,238,217,205, 38,199,125,183, 88, 93,156,212, 4,192,116, 75,237, 36,132,148,206, 84, 95,193, 92, 9, 4, 2,148,148,
+148,216,101,174,172,189,151, 40, 40,173, 87, 72, 62, 27, 57,101, 96,135, 63,119, 92,116,114,116,116, 44,207,249,105,218,180, 41,
+ 4, 66, 1,190,223,187,186, 56, 63, 63,247,115,123, 52, 29, 29, 29, 39,116,237,218, 21,119,238,220,193,229,203,151,119, 43,149,
+202,203, 10,133, 98,247,221,187,119, 7,181,107,215, 14,191,252,242,203, 4, 88, 48, 88,150, 52, 77, 21,235,203,162,189,121, 0,
+160, 84, 42, 19, 1,216, 44, 57, 95, 85,179,172, 88,104, 39, 0,240,247,247, 79, 27, 48, 96,128,179,193, 96, 64,153,121,118,179,
+ 32, 99, 86,147, 82,202, 41, 20,138,149, 49, 49, 49, 17,109,218,180,193,224,193,131,123,198,198,198,246, 12, 10, 10, 66,147, 38,
+ 77,240,248,241, 99, 68, 71, 71,255,196,113,220, 71,153,153,153,106,107, 63,162, 44, 93,123, 76, 76,204, 45, 0,195, 67, 66, 66,
+222, 17, 8, 4,112,118,118,102, 51, 50, 50,216,163, 71,143, 2,192,152,157, 59,119, 90,236,238,176,245,153, 92, 21,123,114,174,
+106,170,105, 15, 85, 53, 9, 33,115, 70,140, 24,177,225,195, 15, 63,148,182,107,215, 14, 5, 5, 5,229,166,255,224,193,131, 40,
+ 27,137, 13, 55, 55, 55,220,186,117, 11,123,247,238,213, 22, 20, 20,172, 16,137, 68,145,214, 52,135, 15, 31, 94, 73,211,100,222,
+246,239,223, 15,211, 32, 18, 55, 55, 55,220,188,121, 19,123,246,236, 81, 23, 20, 20, 44,215,106,181, 75,255,206,107,255,175, 97,
+211, 96,229,229,229, 77,158, 53,107, 86,215,247,223,127,223, 77,165, 82,177,245,234,213,131, 82,169, 52, 28, 57,114, 36,175,168,
+168,104,114, 77, 78,118,238,220,185,241,125,250,244, 89,177,121,243,230,141, 27, 55,110,236, 50,120,240, 96, 12,239,221, 27,227,
+ 58, 56, 66,163,209,128, 16,130, 35, 71,142,220, 56,113,226, 68, 99,145, 72,164,153, 59,119, 46, 7,160,218, 4,177, 85,201,189,
+242,251, 77,207, 86, 3,186,172, 90,189,110, 87,112,104,251, 6, 13, 27, 53,148,116,242,171, 3,157,222,136,135,217,143,112,242,
+ 92,178,230,102,114, 98, 26,167,211, 14,204, 78,182, 93,197, 29, 0,146,147,169, 14,192,228,128, 0,231,249, 75,215,111, 91,255,
+227,206,221, 3, 70, 15,126, 83, 16,210,170, 43,238,101,237,195,169,216, 19,134,199, 69,116,111,145,150, 29,155,156, 92,104,115,
+ 42,159,170,164,167,167,171, 95,104,228, 83,160, 86,171, 93,239,221,187,135,135,153,202,194,244,244, 12,181,237, 35, 43,195,113,
+ 28, 52, 26, 13,238,220,185,131, 99,199,142, 33, 62, 62, 30,103,207,158,213, 29, 61,122,116, 51,195, 48,139, 45, 21,154,180, 68,
+ 96, 96,224,151,223,125,247,221,219, 70,163,177, 73,120,120,184,212,213,213, 21,185,185,185,136,137,137,209, 38, 36, 36,220, 9,
+ 12, 12, 92,106, 91,197, 60, 94, 94, 94, 24, 56,112,160, 71, 72, 72,136,135,105,196,160,159,159, 31,222,122,235, 45,143,160,160,
+160,242,117,245,235,215, 55, 91, 51,203, 18,101, 17, 44,140,252,224, 19,168, 84, 79,112,225,220,126,228,231,229,226,252,165, 20,
+212, 36,130, 5,148,142,244,244,246,246,110,191,104,197,170, 61,189,194,218,250, 55, 87,120, 73,220, 26, 53,132,163,187, 23,242,
+ 30, 61,194,133,196,219,250, 53, 81, 39,147, 84,106,181, 93, 83,229, 0,165,247,200, 52,202, 45, 96,210, 76, 48, 12, 83, 62, 11,
+130,105,187,115,104,103, 48, 2, 33,140, 20,208,233,116, 54,163,119, 74,165, 50,221,199,199,231,173,137, 19, 39,254,185,101,203,
+ 22, 38, 60, 60,188,205,239,191,255,254, 76,147,230,166,167,167,251, 2,128, 66,161, 40,116,118,118, 22,188,247,222,123,208,235,
+245, 40, 41, 41, 65, 97, 97, 33, 30, 61,122,164,249,248,227,143, 37, 0, 32, 18,137,244,189,122,245,178,249,249,177,124,103,186,
+122,202, 64,223, 85,245,132,247, 6, 21,228, 92,110, 92, 79,120,239,110,251, 64,110,213,242,157,233,234, 47, 63,172,187, 40, 35,
+ 39, 58, 69,249,228,200,183, 91,247,236,102, 71, 12,120,203,232, 45,191, 57,179,158, 31,118,118,237,107,187,189, 85, 13,214,211,
+ 70,174,170,146,155, 68,227, 27,119,168, 19,209,117, 96,187,217,139,166,126, 45,175,231, 94, 15, 6,131, 1,119, 83,239, 96,243,
+158, 53,197, 69,154,199,139, 31, 37,211, 88,123,180, 26, 55,110,220,136,101, 89,236,219,183, 15, 0, 76,165, 13,214, 28, 58,116,
+104,208,208,161, 67, 81,191,126,253,128,134, 13, 27, 74,172,149,209,168,138, 41,226, 95,211,110,116, 91, 16, 66,238, 36, 38, 38,
+250,248,248,248,144, 29, 59,118, 60,209,233,116,243,106,170,225,229,229,245,245,129, 3, 7, 94,162,148,246, 10, 14, 14, 70,131,
+ 6, 13, 0, 0,201,201,201, 56,125,250,244,246,140,140,140,145,246, 70, 84,109, 64, 9, 33, 40, 44, 44, 52,213, 53,209,201,229,
+242,167,213, 45,169, 16,185,178,123, 64,204,255,138,140,140,140, 31, 61, 61, 61,143,204,155, 55,239,139,166, 77,155,126, 52,102,
+204, 24,182,121,243,230, 40, 40, 40,128,179,179, 51,188,189,189,145,145,145,129, 31,127,252,209,152,157,157,189,153, 97,152,249,
+ 74,165,210,234,168,110,107,154,117,235,214,133,183,183, 55,210,211,211, 77,154, 27,245,122,253,130,156,156,156,255,249,100,201,
+255,118,136, 61,255,164,101,101, 26, 86, 26,141,198,174, 64,105, 84, 43, 47, 47,111,114, 86, 86, 86,245,242,237, 21,197,173, 56,
+220, 62,125,250, 52,205,205,205,221,168,211,233,186,244,237,219, 23,131, 7, 15,198, 27,111,188,129,193,131, 7,179,166,168,213,
+190,125,251,170, 21,202,179,166,105,154,236,153, 97, 69,125, 40,165,173, 1, 16,194, 48, 54, 39,123,182,199,137, 7, 7, 56, 55,
+145, 73,184, 77, 50, 49,215, 89,165,101,206,168, 52,204,232,248,228, 66,139, 19,140,218,163, 89, 54,177,243,207, 0,160,209,211,
+ 97,105,105,202, 40,107,251,155,211, 44,235, 34,220, 65, 8, 97, 41,165,171, 41,165, 59,188,189,189,239,216, 19,118, 55,163,201,
+ 0,165,197, 69,143, 29, 59,246, 5, 33,100,152, 70,163,113,151, 72, 36, 57,148,210,159,122,244,232,177, 96,213,170, 85,214,116,
+ 57, 75,237,244,243,243,219,166, 80, 40,154, 1,168,150,115,101,122, 52,173, 47,171, 71,116, 59, 61, 61,125,168,181,107,175, 72,
+211, 38,190, 71,154, 52,242,121,165, 73, 35, 5, 0,224,206, 61, 37,238,220,203, 56,122,251, 78,186,197,146,149, 86,223, 75,228,
+175,201,158, 73, 89, 41, 6,106,199,100,207, 85, 53, 91,182,108, 25,203,178,150, 39, 18, 54, 7,199,113,202,164,164,164,242,249,
+ 46,172,181, 83,161, 80, 12,241,243,243,139, 84, 42,149,123,210,210,210, 62,177,247, 28, 54, 52, 59, 50, 12,115,144,227, 56, 89,
+197,245, 12,195,100,155, 76,152,151,151, 87, 3,137, 68, 82, 41,201,221,154,230,210, 57,129,159,119,234,242,210,128,179, 39, 79,
+239,157,177, 56,105, 97,197,109, 19, 6,184,142, 26, 58,126,242,210,109,107, 87,206, 88,179, 55,175, 82, 73, 13,115,154,173, 91,
+183,142, 6,208,172,108,187,213,235, 52, 26,141,202,164,164,164, 74,195,202,237,253,229,237,214,154,180,117,113,172,183, 80,171,
+211, 5, 49, 4, 84, 40, 18, 37,230,231,231,126,110,206, 92, 89,210,244,245,245,141,124,225,133, 23, 38,223,190,125,123,123, 90,
+ 90,218,251,166,245, 10,133,226,171,134, 13, 27,142, 79, 75, 75, 91,147,150,150, 54,189,234,113,150, 52, 27, 55,110,236, 28, 20,
+ 20,244,120,254,252,249,204,220,185,115, 17, 19, 19,227,154,158,158,110,247, 15, 60,107,215,222,160, 65, 3, 47,169, 84,186,149,
+227,184, 38, 70,163,113,237,157, 59,119,236,154,124,187,170,102, 64, 64,128, 40, 63, 63,127,178,159,159,223, 20, 79, 79, 79, 19,
+ 69,177,168, 0, 0, 32, 0, 73, 68, 65, 84,207,135, 15, 31, 62, 72, 77, 77,141,200,202,202,250,206, 94,115,101,207, 61, 10, 9,
+ 9,209, 0,165,211,137,217,147,111,245,191,136, 54,253,221,154,190,190,190, 77, 56,142, 91, 28, 20, 20,244,246,168, 81,163,200,
+181,107,215, 16, 21, 21,133,251,247,239,239,165,148,206,182,212,165, 91, 83,205, 35, 71,142,208, 7, 15, 30,236,100, 24,230,179,
+244,244,116,179,223,115,124, 4,203, 14,202,190,216,254,150, 63, 0,129,182,246,121,253,245,215,155,182,107,215, 46,186, 85,171,
+ 86, 92,171, 86,173,138,106, 67,243,239,104,167,233,175, 75,151,122,142,181,173,249,119,180,243, 41, 53,153,103,252,251,199,175,
+253,133, 23, 94,160, 40,243,112,207,193,235,201,107,150,253,173, 95,212, 74,113,241,216, 59,223,108,250, 50,208,167,234,182,121,
+ 19,235, 58,253,185,239,205,165,243, 38,214,117,250,167,219,249,119,104, 2, 96, 44,172, 39, 79,163,233,231,231,183,161,127,255,
+254, 70, 63, 63,191,141,207,243,181, 3, 32, 13, 26, 52,144,252, 27,238,209,191, 77,211,211,211, 51,212,219,219,251, 15,111,111,
+239, 63,124,124,124,218,213,178,230,111, 94, 94, 94,193,255,196,181,255,215,254,158,106,178,231,218,100,255,254,253,183, 1,132,
+247,237,219,215,131,101,217,218,154,164,243,111, 35, 58, 58,199,122,221,136,127, 55,181, 17,186,255, 71,185,121,243,230,127, 98,
+244,201,127,141,143,230, 92, 86, 2,248,164, 93,247,234,219,202, 74, 51,204,232,102, 71,183,224,191, 17,106, 33,106, 67,203,190,
+165,106, 74,106,106,234, 71, 10,133, 98, 74, 77, 70, 31,254, 19,148, 93,159,221, 93,159, 60,246,147,149,149, 21, 11,224, 13,155,
+ 59,254,195,154,255,223,249,199, 13,150,137,223,127,255, 61,251,159,110, 3, 15, 15, 15,207,191,129,231,221, 92,241,240,240,148,
+ 86, 74, 53, 59,109, 12,173, 65,223,106,149,161,173,118, 97, 75,159,215,228, 53,121, 77, 94,147,215,228, 53,121,205,255,158,166,
+ 45,237,154,248,143,231, 25,187,146,220,159, 90,252, 63,144, 84,200,107,242,154,188, 38,175,201,107,242,154,188,230,223,175,249,
+ 95,163,118,198, 53,243,240, 88, 97,245,104,226,179,122, 52,241,249,187,246,231,225,225,225,225,225,121,222,120,110,114,176,106,
+139,208,208,208, 0, 74,233, 80, 66,200,219, 0, 64, 41,221, 69, 8,217, 22, 27, 27,107, 87, 5, 90,153, 76,150,165, 86,171, 61,
+ 0, 64, 42,149,102,171,213,106,239, 10,155, 73,133, 63,160,116,174, 77,211,168, 53,139,161,192,198,141, 27,103,105, 52, 26,123,
+230,215, 75, 32,132,196,115, 28, 23, 39,151,203,207,220,188,121, 51,197,158, 54, 3, 64,207,158, 61, 63,114,116,116,252, 92,165,
+ 82, 45, 61,114,228,200, 74,123,143,123, 90, 8, 33, 97,126, 10,175, 31,244, 6, 29,151,149,157, 55,135, 82,106,118, 26,158,117,
+239,147, 8, 1, 41, 45, 26,185,238,125,178,108,220,247,116,150, 53,221,154,238,111,165,125,161, 66,161,112,130,167,167,231,107,
+233,233,233,177, 0,102, 80, 74,249, 42,196, 60, 60, 60, 60, 60,255, 19,106,100,176, 58,132,184, 53, 39,156,110,186,144,165, 47,
+233,141,228, 52,101, 68,203,206,199, 61,178,219, 4,152, 67,161, 80,248, 17, 66,194, 41,165,254, 12,195, 92,225, 56,238,168, 82,
+169,124, 84, 19,141,144,144, 16, 63, 0,131, 1, 12,105,223,190,125,224,216,177, 99,241,194, 11, 47, 64,173, 86, 35, 38, 38,102,
+230,207, 63,255, 60, 51, 36, 36, 36, 9,165, 83,202,236,136,139,139, 75,179,164,165, 86,171, 61, 76, 94,137, 16,226,241,246,219,
+111,199,144,191, 38,225, 37,166,201,101, 41,165, 23, 0,156, 39,132,156,219,177, 99, 71,250,139, 30,178,246, 13,253,220, 95, 63,
+ 20,251, 96, 78, 85, 77,141, 70,227,145,240,199, 94, 80,131, 17, 79, 50, 82,209,244,205,193,229,219,162,222,236, 14, 90, 92, 8,
+161, 68,148,208,245,247,115,241, 0,226, 82, 83, 83,227,235,215,175,159, 98, 77,179, 42,109,218,180, 89, 48,111,222,188,122,125,
+251,246,157, 0,192,162,193,170,137,166, 37, 8, 33,146,246,161,173, 79,252,177,123,135, 20,132, 65,255, 1,111,111, 39,132, 12,
+167, 85, 38,147, 94,247, 30,241, 36, 44,166,143,253,120, 44, 11, 0,235, 86,172,159,177, 98, 24, 89,245,241, 79, 52,203,199,199,
+167, 43,165,116, 70,153,222,210,140,140,140, 19,235,222, 35,158, 96,240,233,216,143,199, 18, 0, 88,191, 98,253,244,117,239,145,
+149,227,126,160, 53, 42,112, 71, 8, 25, 55,114,228,200, 85,139, 23, 47,102,203,138,240,245, 10, 8, 8,104, 78, 8, 9,160,148,
+242,201,193, 60, 60, 60, 60, 60,127, 59, 54, 13, 86, 96, 96, 29, 23, 25, 67,167,200,196,116,112,175,151, 2, 26,189,241, 90, 71,
+210,184,105, 99,164, 92, 75,105,114,226,228,165,247,186,182,115,186,167,210,146, 29, 42,142, 44, 79, 74,178, 62,127,216,231,163,
+137,222, 96, 40, 61,167, 64, 0,227,214,163,190,123,123,244,232,209,104,212,168, 81, 8, 14, 14, 70,108,108,108,215,157, 59,119,
+ 78,246,243,243,187,164,215,235, 15, 74, 36,146,104, 91, 21,142, 67, 66, 66, 34,125,124,124,102, 76,157, 58,149,132,134,134, 66,
+ 34,145,148,111,147,203,229,232,222,189, 59,186,119,239,142,172,172,172,192,232,232,232,192,109,219,182, 69,132,132,132, 44,141,
+139,139,155,105,207, 11,244,249,231,159,135,152, 89,125,132, 16,114,155, 97,152,184, 22, 45, 90,164,191,224, 45,127,209,211,221,
+109,255,151,139,231, 3,128, 69,227,242,219,171, 29, 1,160,146,193,210,229, 62,132,212, 73,158, 32,146,201,226, 1,196, 1,136,
+175, 95,191,126,130,189,154, 0, 16, 30, 30, 46,113,114,114, 34,148, 82,180,107,215,206,245,213, 87, 95, 77, 97, 24,102,229,161,
+ 67,135,214, 87,220,175, 38,154, 54, 8,155, 55,125,188, 40,247, 78, 2,174,159, 59,138,126, 33, 62,210,248,171, 55, 22, 1,216,
+109,237, 32, 66, 24,102, 75,108,189,153, 31, 3,147, 57,142,251,252,218,181,107, 93, 0,192,223,223, 95, 12,224,196,214,152,186,
+189, 71,118, 44,120,234, 50, 11,132, 16, 17,203,178,107,183,110,221,250,193,240,225,195,241,224,193, 3,156, 57,115, 6,114,185,
+ 28, 11, 22, 44,104, 56,117,234,212, 8, 0, 53,154,125,128,135,135,135,135,135,231,105,176,106,176, 94, 10,113,140, 25,208,165,
+105, 72,223, 87, 59, 50, 47,248, 7, 64, 36,113, 40,223,214, 42, 56, 24,173,130,131,201,152, 49, 69,141, 19,227, 19, 63, 59,252,
+231,197,217, 47,133, 56,198,157,142, 43,110,103, 73,207, 96,128, 32, 98,241, 54, 0,192,214, 77, 67,217,148,148,148, 70, 50,217,
+ 95,197,162,187,116,233,130, 46, 93,186, 48, 17, 17, 17, 97, 39, 78,156, 8,219,177, 99,135,206,199,199,103, 69, 70, 70,198, 78,
+ 43,205,156,177,115,231, 78,194,178, 44, 88,150,181,184,147,151,151, 23,122,246,236, 9, 47, 47, 47, 50,125,250,244, 25, 0,204,
+ 26, 44,169, 84,154, 77, 8,241, 0,128,186,117,235, 26,231,205,155,151, 72,203, 0, 0,142,227, 46,176, 44,123,158, 16,114, 97,
+207,158, 61, 25, 77,125,100, 62, 78, 18,135,163, 27, 55,172,134,190,240,161,171,165,243,151, 40,211, 75,159, 84,169, 60, 45,118,
+116, 72, 16, 59, 58,198,139,229,242, 56, 0,241, 0, 18,236,213, 4, 74,205,149, 76, 38, 59,181, 97,195,134,186, 0, 48,113,226,
+ 68,151,146,146, 18,151,209,163, 71,207, 4, 80,110,176,106,162,105, 9, 66,136,203, 75, 29, 66,239,175,138,252,194, 57, 56,172,
+ 51, 46,236, 90,135,252,252, 98, 20, 23,149,128,227,184,106, 51,255,142,251,129, 62, 92,247, 62, 89,182,238,155,245,159, 18,134,
+ 33, 65,175,206,192,171,174,116,146, 66,161,184, 74, 8, 17,138,197, 98,147,174,192,215,215, 87,209,188,121,155,101, 47,116,126,
+ 17,235, 87,174, 5,229, 56, 10, 96,153,189,209, 43, 66,136,135,147,147,211,190,163, 71,143,134,181,109,219, 22, 23, 46, 92,192,
+157, 59,119, 48,126,252,120,237,248,241,227, 69, 35, 70,140, 32, 83,166, 76,153, 72, 8,217, 69, 41, 61,251, 52,215,207,195,195,
+195,195,195, 99, 47, 86, 13,150, 84,100,108, 59,111, 85, 34,140,197,183, 65,245,169,160,186,172,106,251, 56,184,248,161, 69,144,
+ 39, 28,196,238,204,149,107,223,180,173,184,205,214, 8, 3,147,185,218,245,181,162,165,170, 56, 83, 4, 0, 50, 71,111,221, 91,
+ 83, 50,174,182,109,219, 22,238,238,238,162,115,231,206, 77, 1, 80,110,176,204,104, 18,237,229, 88, 92,127,163, 19,154, 94,207,
+131,131,131, 3, 76, 95,220, 38, 82, 82, 82,112,234,212, 41, 60,120,240, 0, 77,154, 52, 1,254,202,161,170,166,169, 82,169,188,
+122,245,234, 21,189,116,233,210,151, 35, 35, 35,175,108,223,190, 61,156, 82,106,118,126,170,192,250,117, 92,196, 84,120,116,211,
+250,111,132,208, 22,187,222,184,116, 22, 45, 95,251,208,108, 59, 27,189,241, 22,198,230,151,118, 61,254, 26,160,128,212, 89, 14,
+137,220, 41,161,231,145, 75,229,145, 43, 0, 9,246,106,118,235,214,237, 61,129, 64, 48, 7, 64,157,111,191,253,214,197,197,197,
+133,217,183,111,159,110,195,134, 13, 69, 34,145, 72, 75, 8, 89,242, 52,237,180,134,144,101, 23,126, 53,111,186,179, 3, 99, 64,
+252,193,159,144,254, 32, 21,151,111,101,232,127, 57,157,108,212,234,141,163,204,189,158,227,190,167,179,166, 14,144,252, 16,155,
+217,228,143, 62,115,199, 55, 91,212,215, 19, 58,157,110, 83, 78, 78, 14, 70,143, 30, 13,142,227,208,185,115,231, 78,148,210,140,
+ 73,147, 38,161, 73,147, 38,216,244,251,205, 18, 65,225,197,240,159,255, 44,140, 53,167, 89, 21, 66, 72, 96,131, 6, 13,142,158,
+ 56,113,194,211,199,199, 7,209,209,209,200,202,202,130,183,183, 55,198,143, 31, 47,142,140,140,220, 90, 88, 88, 56,112,241,226,
+197,210,164,164,164, 29,132, 16,191, 50,207, 92,235, 35, 96,120, 77, 94,147,215,228, 53,121,205,191,133,182, 0,220, 1,228, 0,
+184, 84,101, 25,101,207, 97,102, 57, 23,165,223,249, 21, 39, 47,207, 69,105,254,180, 59, 0, 35,128, 24, 0, 53,158, 83,216, 22,
+ 2, 0, 32,132,116, 1, 16, 13, 96, 62,165,116, 94,213,157,116, 25,209, 16, 55,124, 19,144,182, 4,213,222, 6,167,205, 0, 21,
+122,160,184, 68,138,220,251, 15,112,253,194, 46, 80,131,237, 57, 50, 5, 2, 24, 86,175, 24, 42,112,114, 0, 68, 18,119, 93, 81,
+ 81, 17, 28, 29, 29,161, 42,206, 20,141, 24, 93, 30,217, 18,157, 56,113, 2,113,113,113, 80, 40, 20,229,109,180, 6,213,150,246,
+ 34,106,181, 90,104,181, 90,100,245,110, 7,199,246, 47,227,241,176,241, 56,118,236, 24,114,114,114, 32, 18,137, 32, 18,137, 96,
+ 48,216, 46, 22,207,148,205,196,107, 10, 90,153,219,199,215,151, 72,157,140,178,253,171,151, 47,113,118,150, 59,120,198, 30,253,
+ 13, 15, 30, 84, 55,160,230, 16, 59, 58, 64, 44,115, 72, 16, 59,202, 42,153,171,154,104,178, 44,187, 96,247,238,221, 62, 26,141,
+ 6, 34,145, 8,187,118,237,210,109,217,178,229,106,113,113,241, 75,113,113,113,229,121, 70,207,210,206,170,184,185,187, 31,120,
+243,221, 15,199, 47,122,191, 39, 84,197,106,236, 61,157,140, 63,175,220,235, 11,224, 12,165,212, 98,133,251,175,247,106,110,249,
+248,248,116, 31, 61,122,116,194,158, 61,123,234,125,245,213, 87, 48, 26,141, 48, 24, 12, 48, 24, 12,229,207,141, 70, 35,182,111,
+223,142, 51, 23,147, 39, 41,149,133,118, 77,166, 75, 8, 81, 52,106,212,232,216,197,139, 23,221, 29, 28, 28, 16, 21, 21,133,252,
+252,124,140, 27, 55,174, 60,114,149,159,159, 63,120,253,250,245,111,221,191,127,255,171,211,167, 79, 63, 2,192, 2,120,238,103,
+ 13,224,225,225,225,249,255,132, 13, 47,226, 78, 8,217, 79, 41,237, 3,160, 7, 0,113,133,101, 16, 66,246, 3, 64,213,229,153,
+ 51,103,206,142,136,136,184,106, 90, 54,237, 51,107,214,172,150,145,145,145, 75, 58,116,232,176,227,220,185,115,119,241,119, 25,
+ 44, 0,209,148, 82,139,185, 47,154,219, 63, 67,115,247, 23,136,188,187, 66,220,120, 16,132,245, 58, 32,237, 70, 52, 18,142, 45,
+ 71,250,205, 51,160,156, 17,158,126, 45,108,158,108,225, 38, 42, 84, 40, 20,113, 74,165, 18,241,241,241,184,125,251, 54,164,210,
+106, 61, 75,248,243,207, 63, 1, 0,158,158,158,118, 93,132,184,109, 39,248, 37,102, 34, 45,168,116,192,159, 95, 98, 38, 0, 96,
+201,172, 89, 16,139,197, 16,137, 68,229,251, 26,141, 70,155,122,164, 44,171,189,172, 91,176,218,232, 64, 66, 8,105,234,233,180,
+115,238,204, 9, 13, 26, 53,121, 65,113,241,192,175,184,123, 55, 3, 15, 31,218,119,127, 36,114,199, 4,137,147, 99,188, 88,246,
+ 87,183,224, 83,104,254, 58,112,224,192,247, 6, 12, 24, 32,107,223,190,189,228,251,239,191,207,175,106,174,158,181,157, 21,241,
+246,246,126,245,245,215, 95, 63, 48,102,204, 24,244,235,213, 3, 67, 59,251,211,244,236, 2, 21,128, 40, 74,169,205, 23, 53, 35,
+ 35, 35,195,199,199,167,231,155,111,190,249,115,203,150, 45,253, 41,165,104,209,162, 5,250,245,235,135,221,187,119, 35, 57, 57,
+ 25, 69, 69, 69,186,211,167, 79,175, 80, 42,149,155,109,233,149, 93,159, 67,221,186,117, 15, 31, 63,126,220,221,193,193, 1, 71,
+143, 30, 69, 73, 73, 73,181,200,213,146, 37, 75,164,247,238,221, 91,115,228,200,145,134, 40,157, 23,142, 55, 87, 60, 60, 60, 60,
+207, 31, 86,189, 8, 80,106,156, 40,165,125, 42, 26,166,170, 70,203,244,220,180, 95, 68, 68, 68,249,178,233,152,200,200,200, 37,
+ 21,150,109, 71,136,158, 2,147,193, 10, 39,132, 80, 0,225,148,210,147, 21,119, 40,175, 62,192, 25,160,203,136,130, 46, 35, 10,
+ 14, 65,115,176,111,213,176, 74, 66,246, 68,134,204,161, 86,171, 33, 20,187,233,182,110, 26, 42, 2, 0, 35,117,212, 85, 59,183,
+ 13,106, 82, 44,213,158,118, 18, 66,152, 10,186,213,204,131,175,175,239,215, 29, 58,133,117,126,161, 85, 59,135,139,135,247,224,
+214,205, 7,200,205, 45, 0, 40,212,150, 52,163, 6,189,134,226, 59, 41,144, 57, 59, 39,188,122, 60,177, 82,228,234,105, 52,163,
+162,162,166,117,232,208,225,243, 93,187,118, 41,155, 52,105, 34, 17, 8, 4,186,138,230,234,105,219, 89, 17,133, 66,209, 73, 32,
+ 16, 28,101, 24, 70,214,171, 87, 47, 76,154, 52, 9, 43, 87,174, 52,112, 66,105,159,245,135, 99, 7, 62,209,232,230,216, 99,174,
+ 76,100,100,100, 92, 6, 16,208,176, 97, 67,137,193, 96,232,250,198, 27,111, 28,236,221,187, 55,206,159, 63,143, 99,199,142, 53,
+211,233,116,153,101,231, 93, 0,192,147, 97,152,165, 86,102,114,103, 68, 34,209,142, 99,199,142,181, 84, 40, 20,136,138,138, 66,
+ 73, 73, 73,121,228,106,228,200,145,149, 34, 87,231,206,157,123, 4,222, 92,241,240,240,240, 60,207, 88,244, 34, 38, 76,166,169,
+170,201,178,135, 10,230, 75, 53,115,230,204,217,132,144,253,101, 17, 46, 21, 0,229,179, 55,191, 50,130,178, 6,159, 44, 61, 55,
+161,168,146,159,100, 14, 99,209,221,106,235, 56,238,233,191,183,154,245, 56,114, 85, 38,147, 97,253,250,245,112,112,248, 43,145,
+222, 94,227, 84,124,112, 15,210,198,191, 91, 30,185, 50, 69,178,240,234,136,106,251,218,105,176, 76, 17,172, 11,168,210, 69,232,
+235,235, 59,161,117,235,214,239,111,220,242,179, 83,228,231, 51, 10, 10,175, 95, 21,168, 75, 52,142, 26,189, 65,119,251, 97,174,
+197,242, 8,134,194,124, 72, 28, 29, 19,132, 14, 50,115,230,234,169, 52,207,159, 63,175,238,222,189,251, 15, 75,150, 44,105,207,
+113,220,150,218,104,167, 9,133, 66,209,201,205,205,237,200,154, 53,107,100, 50,153, 12, 26,141, 6, 75,151, 46,197,159,127,254,
+217, 39, 51, 51,243, 8,128, 35,182, 52, 44,161,211,233, 62,232,209,163,199, 55,211,166, 77,131, 94,175,199,160, 65,131,112,255,
+254,253,163,183,110,221, 90,233,235,235, 59,109,220,184,113,138,122,245,234, 97,236,216,177, 34, 0, 35, 45,200,124,185,109,219,
+182, 62, 65, 65, 65, 56,121,242, 36, 10, 10, 10,224,237,237,141, 9, 19, 38,136, 35, 34, 34,182, 22, 21, 21, 13,140,136,136,224,
+ 35, 87, 60, 60, 60, 60,255, 18,236,245, 34, 21, 35, 81, 53,212, 55, 29, 39,140,136,136,184, 26, 17, 17, 81, 41,194, 85,219,152,
+114,176, 76, 78, 38,220, 76,131,170, 29,196,169,170,231,240,112, 70,251,191,187,236, 53, 78,246,116,231, 1,127,229, 96, 85,133,
+ 84, 25,177, 71, 8,169, 73, 14,214, 17, 74,233, 57, 84, 48, 88,190,190,190,253,189,188,188,190,220,182,109,155, 76,169, 84,194,
+183,121, 96,157, 3,187,127,209,120, 58, 74,212,233,121,121, 35, 18, 51,158,236,178,164,201,169,139, 19,164,142,242,120,169,131,
+188,170,185,122,106, 77, 0,248,243,207, 63,167, 86, 93,247,172,154, 10,133,162, 83,189,122,245,142,172, 89,179,198, 65,169, 84,
+ 66, 36, 18, 65, 46,151,227,248,241,227, 40, 51, 87, 79,141,175,175,239,188,137, 19, 39,206, 29, 57,114, 36, 30, 63,126,140, 99,
+199,142,161,107,215,174, 88,179,102, 77,131,227,199,143,127,211,177, 99, 71,176, 44,139,168,168, 40,232,245,250,155,230, 52, 8,
+ 33, 3,198,140, 25, 51,237,173,183,222, 66, 76, 76, 12, 50, 51, 51, 49,118,236, 88,237,132, 9, 19,202,115,174,214,173, 91,247,
+214,189,123,247,248,200, 21, 15, 15, 15,207,191, 4,107, 94,164, 10, 7, 0,188,110, 90,168, 24,205,170,104,190, 76, 17,170,138,
+203, 85,247, 47,219,110, 87,175, 78, 77, 49, 69,176, 44, 71,173,168, 17,172,107,107, 24,243, 46,151,175,226, 84,153,149,118, 17,
+ 73,228, 48,218, 97, 92, 62, 31, 77,244, 51,135, 66,240,227, 2, 6, 66,177,155,174, 89,143, 35, 87, 45,237, 43,151,203,193,113,
+102,243,203,171, 98, 20,245,126,139,109,250,106,127,220,105,229, 5,170,215,149, 71,178, 48,187,252,117, 5, 33, 4, 34,145, 8,
+ 90,173, 22, 48,211,237, 87,133, 24, 66,200,125,150,101,207, 83, 74,105,120,120,248, 38,189, 94,223, 95, 46,151,215, 29, 61,122,
+180, 46, 55, 55, 23,123,247,238,197, 15, 63,252,160,122,162, 19,196, 62,126,164, 31,118, 71,249, 36,221,138, 94,194,235, 39,175,
+ 86,138, 92,213,130,102, 53,106, 67, 83,161, 80,116,242,240,240, 40, 55, 87, 18,137, 4,114,185, 28, 25, 25, 25, 16, 8, 4,207,
+ 84,164,179, 97,195,134,146,176,176,176, 79, 71,140, 24,129,235,215,175, 99,230,204,153,153, 74,165,114,207,190,125,251,198, 78,
+153, 50, 69,208,165, 75, 23,100,103,103, 99,195,134, 13,250,152,152,152, 37, 89, 89, 89,203,204,233, 8, 4,130, 15, 22, 46, 92,
+ 72,149, 74, 37,185,115,231, 78,165,200, 85, 97, 97,225,192,136,136, 8,233,221,187,119,249,200, 21, 15, 15, 15,207,191, 8, 27,
+249, 87,185,101,230,233,161,153,101,182,130,177,170,186,156, 93,101, 25, 0,180, 85,182, 39,214,206, 21, 84,198,234, 8, 61,189,
+145, 41,216,182,230,195, 58,125,223, 30, 7,169,215,203,208,222,251, 21,156,234, 97,185,193, 18, 73,157,224, 92,175, 62, 10,159,
+168,112,246,218, 93,232,141, 76,129, 53, 61,131, 1,130,137, 31,255, 53, 90,208,197,197, 5, 5, 5, 5,149, 34, 90, 14, 14, 14,
+ 80, 40, 20, 40, 44, 44,196,174, 93,187, 96,171,102, 17,165,116,225,136, 17, 35,190, 24, 55,110, 28,211,116,200, 40, 60,185,112,
+186,210,118, 66, 8,164, 82, 41,100, 50, 25, 50, 50, 50,112,227,198, 13,142, 82,186,208,154, 38, 33,228, 34,195, 48, 9, 59,118,
+236, 72, 15, 15, 15, 31, 89,183,110,221, 33,163, 70,141,146,197,196,196, 96,225,194,133,130,168,168, 40,221,165, 75,151, 12, 70,
+163,113,106, 70, 70,198, 6,107, 90,101,122, 85,205,213, 51,107, 86,165, 54, 52, 21, 10, 69, 71,133, 66,113,100,229,202,149, 14,
+ 89, 89, 89,144, 72, 36,112,114,114, 66,106,106, 42, 22, 46, 92, 88,108, 48, 24,122,213,180, 93, 85,144, 56, 58, 58, 74,244,122,
+ 61,182,108,217,130,140,140,140, 14,153,153,153,169, 94, 94, 94, 27, 62,250,232,163, 85,254,254,254, 45,110,220,184,113,243,201,
+147, 39,227,179,178,178,174, 91, 18,113,113,113,233,224,238,238, 78,206,159, 63,143,177, 99,199,106, 39, 78,156, 88,158,115,197,
+ 71,174,120,120,120,120,254,147,196,216, 88,126,238,176,106,176,114, 74, 84, 30, 27,182,238, 89,182, 99,247,222,209, 99, 70, 12,
+145,134,135,143,128,176,232, 10,140,143,226,160,104,214, 9,132,117,192,197,132,120, 92,190,157,166, 46, 81,179,155, 10,117,170,
+233, 21,143,183, 53,219,118, 65, 65, 1, 26, 54,108,136,163,155, 94,108,169, 85,103,139,130, 93, 1,130, 58,186,168,227,189,175,
+158, 58,117,234, 9,128, 77,205,154, 53,171, 84,100,180,170,102,124,124,252,252, 54,109,218,236,155, 53,107, 86, 68,179,102,205,
+122,141, 89,176, 22,162,143, 71, 64,149,124, 25, 14,225, 3,225,226,226,130,188,188, 60,196,198,198,162,168,168,232, 48,165,116,
+ 86, 66, 66,194, 21,107,154,148,210, 11, 45, 90,180, 72, 15, 11, 11,115,210,106,181, 43, 63,249,228, 19, 89,113,113, 49,114,115,
+115,241,232,209, 35, 92,188,120, 49, 74,175,215, 79,126,248,240,225, 61, 75,215, 86, 81,147,227,184,114,115, 85, 91,154, 21,169,
+ 45, 77, 71, 71,199,233,123,247,238,173, 20,185,122,240,224, 1, 22, 44, 88, 80,172, 86,171,123, 41,149, 74,187, 10,116, 90,187,
+239, 28,199,193, 96, 48,128, 82, 10,177, 88, 92, 8, 0,101,102,170,187,189,154,185,185,185,209,247,239,223,239,231,232,232,136,
+137, 19, 39,138,151, 44, 89,178,181,160,160,160,198,145,171,127,203, 12,243,188, 38,175,201,107,242,154,255, 31, 52,255,107, 88,
+ 53, 88,201,201, 84, 7, 96,114, 64,128,243,252,165,235,183,173,255,113,231,238, 1,163, 7,191, 41, 8,105,213, 21,247,178,246,
+225, 84,236, 9,195,227, 34,186,183, 72,203,142, 77, 78, 46,180, 57,246, 95, 32,128, 97,214,156,161, 2, 0, 16, 10, 97,152,221,
+167, 79,116,203,150, 45, 59,247, 13,202, 22,141,157, 88, 26,217, 90,191,122,168, 40, 58, 58,122,167, 68, 34,249,246,238,221,187,
+133,246, 92, 68,153, 97,122,173,109,219,182, 47, 79,155, 54,237,203,222,141,124,219, 13,232, 16, 14,161, 80,136, 75,151, 46, 33,
+ 47, 47, 47,134, 97,152, 79,227,227,227, 79,217,163,183,111,223,190,116, 0, 40, 41, 41, 89,216,172, 89, 51,241,181,107,215,112,
+251,246,109,164,164,164,192,104, 52,222, 74, 79, 79,175, 81, 66,156, 84, 42,189, 8,224,106,109,106, 86,164,182, 52, 85, 42,213,
+146, 69,139, 22,189, 50,127,254,124,137,147,147, 19, 18, 18, 18, 48,127,254,252, 26,153, 43, 91, 80, 74,161,215,235,107, 52,242,
+211, 12,159, 6, 5, 5,189,184,104,209,162,102,101,185, 92,124,228,138,135,135,135,135,231,185,194,174,201,158,203,204,211, 59,
+193, 1,206, 77,150,172,253,121,147, 76,204,117, 86,105,153, 51, 42, 13, 51, 58, 62,185,208,236, 48,122,115, 44,220, 68,133, 21,
+151, 23, 0, 8, 8, 8,112, 76,243,194, 19,211,186,180,135,128, 82,169, 92,106,175,102, 69, 46, 93,186,116, 10, 64, 88,112,112,
+240,128,131,132,204, 6,238,130, 82,186, 36, 62, 62,126,111, 77,116,218,181,107,215,176,184,184,248, 71,157, 78,215,134,227, 56,
+241,201,147, 39,161, 86,171,113,237,218, 53, 21,199,113, 86, 19,196,205,113,247,238,221,171,181,173,249,119,180, 51, 61, 61,253,
+146, 66,161,232, 65, 8, 57,246,233,167,159, 74,106, 26,185,178,133,171,171,107, 73, 86, 86,214, 35,181, 90,237,246,240,225, 67,
+173,171,171,235, 83,213, 30,161,148,222, 34,132,180,250,228,147, 79, 22, 76,155, 54,109,250,151, 95,126, 41,226,115,174,120,120,
+120,120,120,158, 39,236, 50, 88, 38,202,204, 84,120,120,184,187,227,153,115, 57, 22, 43,119,215,132,228,228,228,226,207, 71,147,
+242,200,150, 64,240,236, 21,182,203, 12, 85,141, 76, 85, 69,138,138,138,150,228,229,229,181, 47, 44, 44, 52,220,187,119, 79, 69,
+ 8, 49, 16, 66, 84, 28,199, 45,224, 56,174,198,249, 81,255, 38, 77,165, 82,121,214,203,203,235,165,179,103,207, 78, 41, 46, 46,
+ 94,163, 84, 42,207, 61,141,142, 57,226,226,226,244,222,222,222,239,190,241,198, 27,163, 56,142,219,144,145,145,161,127, 90, 45,
+ 74,169, 22,192,167,132,144, 61, 87,174, 92,249,245,220,185,115,153,224,205, 21, 15, 15, 15, 15,207,115, 66,141, 12,150,137,232,
+232,218, 49, 87, 38,170, 70,182,254,105,110,220,184, 49, 24,192,224,255,143,154, 0,144,149,149, 21,251,119,232, 2, 64,102,102,
+230, 81, 0, 71,107, 75,143, 82,122,137, 16,210, 8,165,163, 68,120,115,197,195,195,195,195,243, 92,240, 84, 6,139,135,231,121,
+162,108, 74, 35,222, 92,241,240,240,240,240, 60, 55, 16, 0,129,230, 54,212,100,116, 0, 33,196,172,134, 53,108,233,243,154,188,
+ 38,175,201,107,242,154,188, 38,175,249,223,211,180,165,253, 95, 25,157, 72,158,113, 52,151,117,241,127,201,208, 80, 94,147,215,
+228, 53,121, 77, 94,147,215,228, 53,255, 89,205,255, 26,204, 63,221, 0, 30, 30, 30, 30, 30, 30, 30,158,255, 26, 53,206,193,106,
+215,174,221, 11, 0, 16, 19, 19,115,171,246,155, 83, 10, 33,100,130,183,183,247,232,214,173, 91,251,139, 68, 34,166,160,160, 96,
+126,116,116,244,124,115,251, 6, 5, 5,197,190,242,202, 43, 77, 78,156, 56,161, 45, 59, 22, 21, 31,141, 70, 99,122,108,108,108,
+232,223,213, 86, 30,235,120,123,123, 31,145, 74,165, 13, 74, 11,140, 82, 24, 56, 35,140, 28,133,209,200, 65,111,164,208,105,213,
+ 15, 52,197, 5,175, 62,149,118,155, 55,235, 27,141, 92, 4, 5, 93, 79, 40, 25, 75, 9, 93, 79, 40,249,136, 50,100, 61,225,232,
+135, 16, 24,190,130, 65, 48, 77,192, 9,231, 40,147,119,166,213,246,181,253, 19,204,159, 63,255,153,126, 20,205,157, 59,215,236,
+252, 83,193,193,193,251,165, 82,105, 83, 75,199,149,148,148,100, 38, 38, 38,118,125,150,115, 63,239,120,121,121,189,204, 48,204,
+106, 0, 45,171,108,186, 14, 96,178, 82,169,252,243, 31,104,150, 85, 60, 60, 60, 78,177, 44,219,172,184,164,164,184,168,176,176,
+137,147,147,211, 29,153,131,163,163,209, 96,188,153,155,155,253,242, 63,221, 62, 30,158,255,207,216, 52, 88, 33, 33, 33,205, 1,
+116, 33,132,116,161,148,190,220,162, 69, 11,207,146,146, 18,132,132,132, 60, 36,132,156, 42,155,253,250,100, 92, 92, 92, 74,109,
+ 52,136,101,217,101, 43, 87,174,156, 58,113,226,196,114,147,148,148,100, 57, 10,201,178,172,111,100,100,100,157,212,212, 84,136,
+ 68, 34,136,197,226,242, 63,150,101,209,190,125,251, 26,157,223,213,213,213,201,195,195, 99, 62, 33,100, 32,195, 48,172,173,253,
+ 57,142, 51, 82, 74,119,102,103,103,207,205,203,203, 43,170,201,185,218,134,182,214, 3,196,194, 57,168,241, 82,236,101,171,163,
+ 43, 95,124,241,197, 88,129, 64,224, 11,152,159,216,218,220,115,163,209,152,126,245,234, 85,187, 12,167,171,171,171,147,212,193,
+ 97, 58, 97, 4, 61, 64,185, 22,165, 98,204,117,202, 25,142,169, 75, 74,150,217,115,189, 18,137,164, 65, 92,124,124,179,228, 27,
+119,209,164,113,125,104,117, 6,104,180,122,236, 59,118, 9, 65,254,141,208,183,119, 79,123,154, 98, 22, 3, 71,230,205,153, 48,
+172,219,146,213,219,219,206,158, 56, 68,190,100,245,246,208,217, 19,135, 56, 45, 89,179, 61,116,206,164,161, 78,139, 86,111, 11,
+157, 51,105,104,157,197,171,183,105, 1,124,240, 52,231,120,191, 85,131, 98,198,104,144,152,219,198,177, 2,205,247, 87, 30, 56,
+ 62,245, 5, 60, 3, 75,150, 44,105,174,211,233,174,141, 28, 20,186,176,197, 11, 30,217,230,246, 41, 40,200,246,184,125, 61,246,
+115, 8, 69,254,254,237,102, 91,253,255, 20,137, 68,141, 79,157, 58,213,204, 84,105,223,104, 52,194,104, 52,194, 96, 48, 64,171,
+213,226,173,183,222,170,149, 1, 49,161,161,161,163, 40,165,139, 1, 16, 66,200,162,216,216,216, 53, 79,171, 69, 8,145, 11, 4,
+130, 79,196, 98,113, 23,131,193,224, 15, 0, 66,161,240,154, 70,163, 57,105, 48, 24,190,161,148, 62,177,165, 81, 17,134, 97, 86,
+196,196,196, 4, 56, 57, 57, 65,167,211,149, 79, 12,207,178,108,139,176,176,176,181, 0,154,217,171,229,235,235, 27, 75, 8,241,
+173,201,249, 41,165,233,233,233,233, 53,250, 49,200,178,108,179,251,169, 74,143,134,245, 21, 0, 0, 7, 7, 71,199, 75, 73,247,
+ 60, 66, 90, 54,172,137, 12, 15, 15,207,223,128,197, 15,205,144,144,144,131, 0,186,180,104,209, 66,214,179,103, 79, 4, 7, 7,
+163, 65,131, 6,144, 74,165, 0,128,188,188, 60,207,228,228,228,119, 18, 18, 18,222, 57,127,254, 60, 66, 66, 66, 84, 0,206,196,
+197,197,153,141, 70,244,120,227,165,137, 82,185,100, 37, 0,228,100, 60,202, 76,191,147,189, 58, 51, 51,115, 25,165,180,252, 23,
+ 53, 33,164,201,200,145, 35,167, 76,154, 52, 9,251,247,239,199,246,237,219,161,209,104, 80, 80, 80,128,232,232,104,179,237, 52,
+ 26,141,233,195,135, 15, 23,164,164,164, 24,202, 52, 80,241,209,104, 52,214,104,194,100, 15, 15,143,249,131, 6, 13,250, 56, 32,
+ 32,160,124, 90, 23,189, 94, 95,254,248,248,241, 99, 76,153, 50, 5, 64,105, 85,114,142,227,112,252,248,241,137, 51,102,204, 0,
+128, 79,204,105,246,236,210, 52, 86, 64,136,175,233, 66, 57,142, 75,143, 58,117, 39, 20, 32,236,165,216,196, 74,206,200,148, 19,
+215,174,109, 27,155,230, 78, 32, 16,248,198,199,199,123,136, 68, 34,187,174,141,227, 56, 4, 7, 7,219,181,175,143,143, 79, 87,
+ 71,185,243,246, 1,131,223,175,219, 38, 56, 88,232,171,240,134,222, 96,192,221,123,169,237, 18, 19,226,218, 28,253,227,151,209,
+ 62, 62, 62, 67, 50, 50, 50, 78, 88,211,209, 27, 57, 36, 94,189,133,168, 51,241,120, 67, 36, 69,137, 90,139,162, 18, 45,126,252,
+253, 44,210,179,173, 78, 93,105,149,176,176, 48, 31, 71, 65,189,176, 73, 31,244,119,252,106,221, 86,199, 73, 31,244,199,215,235,
+127, 44,127,156,248,126, 63, 44, 91,183, 85, 62,233,253,126, 88,189,225,135, 14, 97, 97, 97, 62, 23, 47, 94,204,176,164,103,233,
+ 30, 49, 70,131,100, 83,114, 6, 11, 0, 57, 27, 54, 64,247,240, 33, 20,115,231, 2, 0,198,180,244, 53,107,188, 44, 17, 24, 24,
+ 88,110,136,173, 97, 48, 24,210,147,146,146, 44,126,209,154,204,149,193, 96,160, 2,129,224,243,211,135,230,239,234,216,174,121,
+165, 23, 51,229,102, 74,157,121, 95,204,125,251,215,195, 69,244,157, 94, 78,215,174,197, 44,177,106,178, 56,142, 99, 52, 26, 13,
+110,222,188,105,182,202, 62,195, 48,182, 38, 72, 55, 75,120,120,184,164,184,184,120,155, 92, 46,111, 93, 92, 92, 60,138, 82,250,
+ 69,116,116,180, 39,195, 48,232,209,163,199, 23,161,161,161,247, 36, 18,201, 58,181, 90,157, 32,151,203,135, 68, 71, 71,107,236,
+209, 37,132,188,236,228,228,244,227,111,191,253, 86, 55, 56, 56,152,201,205,205, 69,163, 70,141,144,151,151,215,238,212,169, 83,
+ 33,239,191,255,254,251,132,144,225,148, 82,187,102,111, 40,227, 69, 71, 71, 71, 58, 98,196, 8, 98, 52,254,117,185,223,127,255,
+ 61, 66,154, 62,108, 58,246,109, 89,137, 90, 71, 11, 78, 95,150,126, 68, 25,122,230,254,253,124,139,111, 96, 66,136,239,252, 77,
+147, 61,196, 98, 49,244,122,125,249, 31,229, 0, 80,128,114, 0,229, 40, 40, 5, 64, 9, 56, 35,135,175,103,109,170, 65, 83, 43,
+227,224,232,232,224,229,229,253, 80,230,224,224,240,247,101,213,242,240,240,212, 4,107,191, 74, 95,139,142,142,134,193, 96,128,
+147,147, 19, 88,182,242,247,189,171,171, 43, 94,126,249,101,132,133,133,161, 71,143, 30,184,113,227,134,236,203, 47,191,180, 24,
+142, 24, 58,181, 15,252,154,121, 2, 0, 40,165,222,167,247,199, 71,124, 55,127,119, 61, 0,211, 42,236, 54,106,204,152, 49,228,
+209,163, 71, 24, 56,112,224, 41,141, 70,211,143, 82,106,117,186,156,196,196,196, 90,237,254, 35,132, 12,244,246,246,198,142, 29,
+ 59,160,213,106,171,109,119,118,118,198,213,171, 87,203,151, 89,150, 69,155, 54,109, 88, 66,200, 64, 88, 48, 88, 12, 33,190,135,
+162,111,121,152,150, 7,245,109, 35,122,165, 75,211,135, 2, 70, 76, 1,144, 57,115,230, 0, 40, 53, 87,148, 82, 44, 88,176,192,
+238,246,138, 68, 34, 92,191,126, 29, 44,203,226, 78,231,230, 0,128,192,248, 52,176, 44,139,196,214,165,191,106, 59,220,124, 12,
+129, 64, 0,185, 92,110,151,166,143,143, 79,184,167,183,239,111,179,230, 70, 56,169,245, 20, 7,142,199, 32, 85, 25, 5, 74, 41,
+188, 61, 92,209, 49, 36, 88,232,223,170,181,199,230,181,203,126,243,241,241,233,151,145,145, 97,222,253, 2, 48, 24,140,240,111,
+222, 24, 91,126, 59,133,197,235,118,225, 81,161, 26, 69, 37,165,175,107,143, 14, 1,248,254,107,187, 47,181, 18, 44,203, 46,107,
+209,184,177,223,150, 95,143,160, 99,251,118,216,242,235, 97,116,104,223, 14, 91,118,150, 46,111,221,121, 4, 47,117, 8,195,214,
+157, 71, 16,232,223,172,254,163,251, 5,203, 96,165,182, 87,181,123,212,175,244, 30, 53, 98, 69, 4, 40,189, 55,247,199,142, 5,
+128,114,131, 85, 83, 76,134,216,214,126,214, 76,112, 5,115,133,236,236,108,146,159,159, 79, 93, 92, 92,222,174,104,178, 76,230,
+234,151, 67,133, 80,165,172, 38, 63,255,124,146,123,247,221, 46,215,174,197, 44,241, 7,230,154,157, 68, 91,167,211,221,123,229,
+149, 87, 40, 0,104,181, 90, 31,177, 88, 92,201,181,115, 28,167,232,212,169, 83, 53,131,102,171,235,176,184,184,120,219,206,157,
+ 59, 7,120,122,122,162, 95,191,126, 71, 3, 2, 2,196, 14, 14, 14, 56,116,232, 16,124,125,125,235, 57, 59, 59, 31,140,136,136,
+192,242,229,203,235, 31, 61,122,116, 59,128, 1,182, 94, 31, 66, 72,143,174, 93,187,238,216,191,127,191, 84, 36, 18, 65,165, 82,
+225,234,213,171,168, 83,167, 14,196, 98, 49,250,245,235,199,118,236,216,209,173,107,215,174,187, 9, 33, 67, 40,165,199,108,105,
+154, 80,169, 84,116,214,172, 89,112,112,112,128,163,163, 99,249,159, 76,108, 36,235,231, 53,150,125, 28,153, 37,155, 51,227,221,
+200,141,155,255, 56, 81,191,126,157, 47, 82, 83, 11,242, 45,105,249,178,173, 48,115,218, 76, 0, 0,195, 48, 16,139,197,149,162,
+236,166,231, 34,145, 8,109,218,180,177,217, 54,127,127,255, 13, 44,203,186, 87, 92,199, 48, 12,251,249,103,179, 13, 87,174,222,
+112,212, 27,224,168,214,234,177,104,193, 23, 6,150, 97,217,192,192,192,189,148,210,156,171, 87,175,126,100,239,245,243,240,240,
+212, 30, 86,195,254,114,185, 28,151, 46, 93, 2, 33, 4, 78, 78, 78,112,118,118, 70,157, 58,117, 80, 88, 88,136,228,228,100, 92,
+191,126, 29,247,238,221, 3,195, 48,104,210,164, 9, 80, 90,246,161,156,138, 35, 12,182,125,189, 31, 82,185, 4,132, 0,109,123,
+182, 70,104,183, 32, 36, 93,188, 51, 89,161, 80,108, 82, 42,149, 55, 9, 33,130,192,192,192,247,219,183,111,143,229,203,151, 67,
+163,209,124, 99,206, 92,153, 27,181,240,209, 0,225,105,145,128,241,211, 25,184,180, 13,123,245, 47,181,105,211, 38, 54, 56, 56,
+184,209,149, 43, 87,244, 64,105, 52,171,106, 55, 89,197,188,172,170,154,185,185,185,224, 56,179,169, 42,213,224, 56, 14,249,249,
+213, 63, 99,171, 76, 30, 93,105,219,162,136,229, 46, 69, 5,217, 88,184,244, 39,232,245,122, 76,157, 58, 21, 28,199,129,227, 56,
+ 24,141, 70, 60,126,252, 24, 48,243, 51,180,106, 59, 77,215,196,178,108, 37, 3,108,107,217,154,166,187,187,187,163, 68,234,176,
+125,218,156,133, 78,151, 83,210,177,255,120, 12, 40,165,216,183,241, 11, 0, 64,191, 49, 11,144,145,153,131,142, 33, 45, 48,242,
+195, 79,156, 86, 68,204,217,238,238,238,222, 52, 39,231,175,226,179, 21, 53,245, 6, 14,187, 14,159, 71,230,163, 39, 24, 62,160,
+ 27, 52, 90, 61,178, 31,102,226,135,117, 95, 97,220,123,123, 80, 87, 46,243,106,210,164, 73, 74,197,215,200,201,201,137, 85,171,
+213,167, 82, 82, 82, 62, 48,167, 9, 0,122,189,254,181, 89, 31,143,198,138, 77,187,208,178,137, 39,246, 71, 93, 64,219,192, 6,
+ 56,120, 60, 6, 29, 90, 53,194,225,147,177,232, 24,212, 4, 39,206, 39, 97,242, 71,239, 98,250,228, 83,175, 89,187,246,106,247,
+104,201,114,151,162,194,108, 28, 88,178, 21,217,107,214,224,193,196,137,104, 91,246,158,184,196, 48, 16,249,248, 0,206,182, 95,
+ 79,115, 92,191,126, 29, 26, 77,245, 64,141, 68, 34, 65,139, 22, 45,172,106,154, 34, 87, 15, 31, 62, 36, 15, 31, 62,132,163,163,
+ 35,185,118, 53,201,232,223, 50,240,109, 99,222,175,155, 0,160, 52,114, 85,136,146, 27,171,160,186,185, 26,162,252, 43,204,198,
+ 5, 31,106,199,124,241,237, 53,148,253,143, 86,109,103, 98, 98, 98,249,235,211,190,125,251,235,103,206,156,121,177, 66, 20, 24,
+ 6,131, 65,100, 48, 24,154,153,186, 13, 13, 69,136,103,115, 0, 0, 32, 0, 73, 68, 65, 84, 6, 3, 52, 26, 13,134, 12, 25, 82,
+254,198, 50,119,237, 50,153,172,181,167,167, 39, 46, 94,188,136,121,243,230,137, 91,182,108,137,155, 55,111,130, 97, 24,140, 26,
+ 53, 10, 1, 1, 1,200,201,201, 65,219,182,109,113,250,244,233,106, 46,195,204,123,222,201,209,209,113,243, 31,127,252, 33,101,
+ 24, 6, 69, 69, 69,224, 56, 14,157, 58,117, 2, 33, 4, 87,174, 92,193,103,159,125,134, 61,123,246,224,183,223,126,147,133,132,
+132,108, 38,132,248, 83, 74,139, 44,105, 86, 60,157, 70,163,161, 82,169, 20, 82,169, 20, 18,137, 4, 18,137, 4, 34,145, 8, 42,
+ 45,139, 15,231,222,211, 8, 37,114,174,117,171, 38, 77,199,141, 25,192, 44,140,252,225, 56,128,125,150, 52,149,244, 42, 92, 91,
+ 18, 28,253, 33, 22,253,198,190, 12,145, 80, 12,145, 80, 4,177, 72, 12, 97,217,115,145, 80, 4,177, 80, 2,182,158,186,122, 99,
+170,104, 10,133,194,122,241,241,241, 46, 21,255,151, 13, 6,195,181,137, 19, 39, 54, 25,208,183,143,231,175,123,246,179,195, 6,
+245, 51,122,121,122,228,166,165, 61,184, 5,192, 37, 36, 36,132, 90,211,172, 13,120, 77, 94,243,127, 68, 91, 0, 21,127, 96,104,
+ 1,136,203,158,231,162,244,179,205,173,202,122, 0,200, 41,123,116,183,176,156, 11, 32, 25,128,127,217, 58, 35,128, 24, 0, 54,
+231, 87,182,133, 0, 0, 8, 33,229,255,132,148, 82, 82,117, 39, 74, 41, 10, 11, 11, 81, 88, 88,136,180,180, 52,172, 95,191, 30,
+ 66,161, 16, 2,129, 0, 2,129, 0, 12,195,148,231, 43, 88,226,216, 31,167, 87, 3, 88, 29, 18, 18, 34,252,238,252,174,131,115,
+182, 76,238, 30,214, 51,132,141,141,186,242, 54,128, 69, 0, 94, 27, 49, 98, 68, 61, 0,216,186,117,107, 46,128, 67,246, 94,132,
+ 72,192,248,173, 90,249, 83,253, 73,147,135, 1, 40,205,203,218,180,105, 83,221,244,244,244, 74,191, 18, 69, 34,145,205,188, 44,
+ 74,233,206, 91,183,110,125,236,237,237, 93,254, 69, 82,177,155,208, 96, 48, 64, 42,149,150,155, 33,141, 70,131,109,219,182, 25,
+ 40,165, 59,173,104, 34,229,234,159,184,121,245, 4,140, 70,174,146,153, 82,171,213,152, 55,111, 94,121,244, 10, 0,198,150, 69,
+ 74,236,197, 90,228,138,101, 89,156,105, 82,234, 4,122,231,208,106,185, 90, 85, 17,138,165, 83,123,191,249,174,171,129,178,229,
+230,170,244, 26, 74,205,133, 88, 40,128, 76, 34,196,205, 59,105,104,228, 19,130,238,189,250,215, 61,118,112,247, 84, 0,102, 7,
+ 33,232,141, 28,122,135,135, 96,221,142, 19, 40,124,162, 70, 97,126, 30,114,211,174,227,218,229, 24,136,197, 98, 92,184,112,193,
+169, 78, 29, 23,167,198,141, 27,193,104,228,112,230, 66, 44, 28, 28,100,216,177,253,231, 70, 13, 26, 53,198,131,123,119,205,230,
+ 78,113, 28, 39,232, 24,234,143,194,220, 84, 8, 4, 2,116, 12,110, 10,129, 64,128, 78, 33,205,192,178, 44, 58,183,125, 17, 44,
+203,162, 75, 88, 0,154, 54,109, 10,142,227,172,254,152,160,148, 34, 37,233, 79,164, 36,159, 0,229, 56, 24,185,210,238, 95, 10,
+ 64,151,153, 89,253,186,178,178, 64,157,109, 6,163,204,158,231,211, 79, 63,205, 87, 42,149,186,170,219, 20, 10,133,104,207,158,
+ 61, 46,214, 74,167,136, 68, 34,127,129, 64,112, 45, 47, 47,143,115,112,112, 96,140, 70, 3,231,223, 50,144, 61,125,104,126,249,
+220,147,243, 22,204,223,245, 78, 47,231,183,127,250,225, 15, 42,114,239, 68, 8, 43, 49,140,254,226, 91, 49,132, 34,127,123,218,
+104,234, 46,188,113,227,134,205, 73,185,205,125, 94, 84,164,184,184,120,100,191,126,253,142,126,244,209, 71, 82,160,244,199,139,
+ 64, 32, 40, 55,253,183,111,223, 6,195, 48,216,184,113, 35, 52, 26,141,205, 55,190, 64, 32,248,120,247,238,221,117,196, 98,113,
+185,185,162,148,130,101, 89, 92,191,126, 29, 95,127,253, 53, 70,140, 24,129,212,212, 84,120,123,123, 99,234,212,169,242,200,200,
+200,143, 81, 58,245,169, 45, 46,107,181,218, 80,153, 76, 6,137, 68, 2,147,209, 2,128,184,219,158, 73,119,239,222,109,213,160,
+ 65, 61,175, 70, 1, 87,126, 15,239,220, 58,200,205,205,165, 3,202, 12,150, 57,228, 79,234,163, 40, 69,128, 46, 93,186,224,228,
+201, 83,232,211,167, 15,140, 34, 17, 56,177, 24,156, 88, 12, 42, 18, 1, 98, 49,136, 88, 12,234,224, 96, 71,243, 64, 89,150, 69,
+ 86, 86, 86,165,117, 99,198,140,121,240,238,187,239,122, 0, 20, 74,101, 6,253,228,227, 73, 25,185,185,185,212,211,211,211, 30,
+ 77, 30,158,231, 6, 27, 94,196,157, 16,178,191,194,246, 62,166,229,153, 51,103,206,142,136,136,184, 74, 8,217, 95,113,189,105,
+191, 50,237,253,230,150,203,142,117,155, 53,107, 86, 96,100,100,228,146, 14, 29, 58,236, 56,119,238,220, 93,212,150,193,162,148,
+ 18, 66, 8,181,245, 97,105,194,220,151,180, 45,131,101, 34, 46, 46, 78,239,227,227,243,221,245,216,187,221, 95, 12,109, 6,153,
+163,164, 39, 33,100,181, 68, 34,249,100,248,240,225,184,112,225, 2,146,146,146,190,167, 53,152,246, 68,103,224,210, 38, 77, 30,
+ 6,157,129, 75, 3, 74, 35, 84, 83,167, 78, 21,157, 57,115, 70,103,106,111,213, 8,150, 37,173,236,236,236,185, 49, 49, 49,176,
+150,228,254,206, 59,239,148, 63,175,152,228,110, 73,147,114, 20, 58,157, 30,197,197,170, 82, 99, 85,246,229,109, 52, 26, 81, 92,
+ 92,140, 65,131, 6,149,155, 46,142,227,144,157,109, 54,103,217, 38, 12,195,216, 29,185,178,168,193,178,175,182, 14, 10, 22, 30,
+ 63,119,185,210,151,107,255, 15, 23, 65, 44, 42, 53, 87, 50,169, 8, 50,137, 16,105,202,135,104,225,223, 82,116, 50,106,255,171,
+176,100,176, 12, 70,172,254, 57, 10, 32, 4,187,246, 31, 71,104, 35, 7,204,255,236, 83, 12, 28, 56, 16, 98,177, 20,187,119,239,
+196,178,181, 91, 48,182, 65, 3, 80, 0, 97,161,109,176,116,195, 14, 44, 92,176,128,217,249,235,174,206,182,218, 43, 20, 10,193,
+178,108,249,151,118,213, 71,150,101,109,154, 4,160,236, 30,233,245, 40, 41, 86,193,200,113,224, 56, 10,202,113, 0,165,240, 89,
+188, 24, 62,139, 23,227, 18, 83, 58,128, 47,160,184, 24, 42,149, 10, 8,111,109,231,171, 90,118, 14, 74,161,213,106,161, 84, 42,
+117,137,137,137,213,190,253,130,130,130, 30,106,181, 90,171,237,157, 61,123,118,202,146, 37, 75,252, 93, 93, 93,175, 93,190,156,
+168,111,221, 58, 72, 88, 53, 7,171,121,179,230, 5,243, 22,204,223, 53,236,189, 55,222,222,240,217, 96,195, 71,115,127, 20,216,
+147,232,110, 66,167,211,221,235,209,163,135, 93,169, 60, 42,149, 42,203,210,182,208,208,208, 81,132,144,197,205,155, 55,151,116,
+235,214, 13,167, 78,157,194,226,197,139, 57,131,193,144, 11, 0, 29, 59,118,116, 95,184,112, 33, 73, 78, 78,134,139,139, 11,178,
+179,179,183,132,134,134, 46,180,150,248, 46, 22,139,195,219,182,109,203,104, 52,154,242, 31, 37, 12,195,224,250,245,235,136,140,
+140,196,144, 33, 67,208,188,121,243,242,255,173,174, 93,187, 10, 87,173, 90, 21, 14, 59, 12, 22,195, 48,147,187,119,239,254, 21,
+ 74, 71, 17, 86,252,144,187, 6, 96, 58, 0, 60,120,144,155, 53,228,173,142, 87,187,119, 9, 14,109,218,200,199,219,154,222, 35,
+225,109,120, 7,203, 32, 18,138, 48, 98, 70, 95,236,223,191, 31,227,231,189, 91, 22,201, 42,141, 96, 9,133, 34,136,132, 98,136,
+221,159,110, 34,130,178,207, 17,226,236, 92, 7, 0, 80,167, 78,233,163,209,104, 36, 0, 40,195, 48,124, 74, 22,207,191, 6,123,
+188,136,201, 32, 85, 92, 38,132,236,143,136,136,232, 83,117, 93, 69, 51,101,238,121,197, 99, 35, 35, 35,151, 84,208, 46,169,141,
+235,169,181,169,114,244,122,235,243,246,118,235,214,109,162,147,147,211, 74, 0, 8, 13, 13,197,253,179, 25,184,127, 54, 3,254,
+ 47,182,236, 20, 28, 20,154, 63,100,200, 16,184,185,185, 97,250,244,233, 20,192,230,154,156,123,195, 94,253, 75, 21,151, 19, 18,
+ 18,158, 58, 47,171,108,100,220, 39,176,144, 79,245, 52, 80, 74,161,215,233, 81, 92,162,134, 78,167,131, 94,111,132,193, 96, 68,
+ 72,128, 19,126,252,246, 83,104,181, 58,232,141,165,235, 74, 35,101, 70, 72, 68, 26,116,105,239,167, 7, 97, 84, 39,207, 63, 48,
+211, 25,245, 23, 45,227, 82,193,178, 44, 46, 7,249, 0,168, 30,185,234,169,212,217,109,180, 40,103,124,209,211,211, 3,169,135,
+ 47, 2, 0,228, 14, 82, 28,217,186, 16,142, 14,165,191,228, 95, 27, 49,187,212,100, 73, 68,208,233,180,240,240,108, 8,131, 81,
+255,162, 37, 61,131, 94,167,109,221,204, 7, 46, 78, 50, 36, 94, 58,143, 79, 38,124,128, 81,163,222,135, 72,234,132,147, 39, 79,
+ 32, 85,153,141,219,233,143, 49, 97,238, 58,232,245, 70,232, 12, 70,232, 13, 28, 86,252,176, 31, 58,163,109,103, 36, 18,137, 48,
+117,234, 84,153,165,237, 59,118,236, 80,217,101,176,104,153, 9, 46, 81, 65,163,214, 64,171, 43,189, 23,198,198, 66, 44,250,236,
+ 93,232,245,122,168, 6,119,128, 78,175,135,113,242, 0,232,116, 58,164, 57, 8,152,206,161, 10, 61, 8,163, 58,115, 41,221,234,
+ 61, 50,157,195,154,129,162,148,154,237, 58,172,138,201,100,181,110, 29,116,109,196,160,208,136,179,231, 46,229,156, 61,119,169,
+218,126,141,155,135,222,249,104,209,142, 89, 53, 49, 87, 64,229,238,194,103,193,148,208, 46,151,203,145,146,146, 2,150,101, 65,
+ 8,121, 20, 23, 23,231, 9, 0,243,230,205,203, 21, 10,133,110, 44,203,226,227,143, 63, 6,203,178,238,227,199,143,255, 28,128,
+ 69,131,101, 48, 24,252,157,156,156, 80, 84, 84, 84,254, 58,138,197, 98,204,156, 57, 19,195,134, 13, 43, 55, 87, 98,177, 24, 91,
+182,108, 65, 72, 72, 8,180, 90,173, 93,145,187,244,244,244, 75, 0, 94,178,181, 31,199,113,165,221,172, 28,103,245,141, 37, 47,
+246,131,250,158, 24, 70,145, 8, 59,246,237,195,176, 97,195, 32, 22, 75,202, 35, 87, 16,137, 64,196, 98, 48, 34, 17,140,108,141,
+198, 75,152,218,129,194,194, 66,118,203,150, 45,141, 91,182,108, 73, 40,128, 22, 45, 2,200,254, 3, 7,234,203,229,242,187,174,
+174,174,213,162,164, 60, 60,255,118, 42, 26,164,218,208,154, 57,115,230,108, 0,116,230,204,153,179, 77,203, 17, 17, 17, 42, 0,
+202,103,213,175, 53,131,101, 43,130,181,124,249,114,180,106,213,202,226,118, 74, 41, 86,173, 90,133, 31,127,252,113, 57,165,244,
+ 78, 77,206,253, 97,127,225, 69, 7,153,200,187, 68,165,203,252,246, 55,125, 88, 80, 80, 80,108,135, 14, 29, 26,199,198,198, 90,
+140, 96, 89,170,141,245,119,148,105,160,148, 66,171,211,163,164, 68, 5,181, 86,139, 41,159,174,181,231,178,136, 78, 91, 36,120,
+189,215,203, 22,205, 67, 77,114,176,108,117, 13, 86, 68,175, 55,192,228, 1,158,148,168,209,117,200, 76, 92,250,125, 37, 0,148,
+155, 43,153, 68, 8,169, 88, 8,134, 0, 4,150,181,245,170,194,190, 51, 38,126,112,122,253,247, 63,250,246,127,121, 52, 38, 77,
+154, 4,129,216, 1,117,221,220, 97, 48, 82,212, 87,120,224,118,250, 99,236, 94,243,105, 89,218, 25,197,203, 67,231, 97,249,103,
+163,177,108,158,237, 95,245, 44,203, 98,205,154, 53,170,170, 81,171,138,145, 44,123, 40, 55, 88,197, 42,168, 52, 90, 76,155,181,
+206,158,195, 74,239,209,171, 47, 89,188, 71, 85, 49, 55,112,162, 98, 27,108, 69,176, 76,204,158, 61, 59, 5, 0, 11, 0,150,190,
+ 69, 37,110,128,127,167,222,159,217,219,182,191, 3,142,227,112,224,192,129,106,209,213,138,152,238,153, 61, 63, 2, 56,142,195,
+131, 7, 15,144,148,148,132, 14, 29, 58,160,160,160, 0, 2, 0, 83,175, 92, 65,192,240,225,208,148,165, 46,136,197, 98,140, 25,
+ 51,166,150,175,166,140,178, 55, 60, 37,214,111, 84,177, 67, 58, 60, 3, 37,216, 28,185, 23, 19, 23,140,128,123, 11, 41,190,158,
+181,177,124,251,178,239,230,149,229, 97,137, 33,181,111,252, 73, 37, 10, 11, 11, 5, 95,125,253,117,235,176,118,237,101,195, 70,
+140, 98,180, 6, 14,139,190, 92,201,254,186,125,171,219,214,173, 63,201,164, 82,233,181,154,171,242,240, 60,223,212,150,185, 50,
+105,153, 34, 88, 17, 17, 17, 87, 35, 34, 34,170, 69,195,158, 5,155,223, 62, 44,203,162,226,144,229,170, 16, 66,236,202,193,154,
+ 50,101, 10,156,156,156,204,110,211,233,116,244,242,229,203,201,153,153,153,155, 40,165, 53,174,139, 35, 22, 50,158,203,191,250,
+193,119,210,228, 97, 28, 80, 58, 90,107,237,218,181, 46,166, 28,172,138,121, 88,182,114,176, 60, 60, 60,230, 47, 93,186,116,210,
+107,175,189,198, 48,204, 95, 53, 29, 77,221, 17, 21,187,242, 56,142,131, 94,175,199, 31,127,252, 49, 41, 34, 34, 2,176, 16,245,
+162,180,180,251,169,184, 68, 5,181,166,244, 11,246,118,210, 46,115,187,154, 59,216,230, 46,166,200, 85,251,148, 60,179,145,171,
+195,158,165, 95, 92,189,115,108,107, 17,134, 77,185,247, 32,173,157, 87, 61, 23, 60, 46,120, 2, 73, 89,183,160, 9,147,185,146,
+ 73, 68,168, 91, 71,142,188, 71,217, 16, 10,133, 22,163, 35,148,210, 7,132,144,151, 6, 13,232,125,148, 97, 5,210,138,219,132,
+ 50,103,135,168,179, 87,234, 62,124, 92, 2,174,194,117,114,148, 98,226, 66,251,130,152, 66,161, 16,227,199,143,183,104,112,246,
+237,219,167,178, 71,167,178,193, 42,141, 34,217,125,143,236,196,158, 8,150,189, 6,171, 42,166,209,133, 34,145,200,191,204,124,
+217, 77, 80, 80,208, 33, 7, 7,135, 70,246,238,111,111,209, 81, 66,200,130,110,221,186, 45,246,245,245,245,248,232,163,143,136,
+ 64, 32, 64,104,104,104,189, 47,190,248,162, 0, 0,252,253,253,157,128,210,207,152, 21, 43, 86,224,218,181,107, 57,132,144,133,
+214, 52,197, 98,241,245, 58,117,234,132,118,235,214, 13, 5, 5, 5, 72, 77, 77,133, 92, 46, 71,192,215, 95,227,202,184,113, 8,
+218,176, 1, 76,183,110, 0, 74, 7, 13, 92,185,114, 5, 18,137,196,236,200, 73, 0,240,241,241, 9,163,148, 46, 5,208, 9,127,
+117, 11, 82, 0,103, 9, 33, 51, 50, 50, 50, 46, 86, 59,136, 33, 12, 0, 24,109, 68, 88,197, 5,158,208,164, 73, 48,114,228, 72,
+136, 68, 98, 64, 44,198,180,105,211, 42,124, 30,137,193,150,229, 99,113, 70,177, 53, 41, 0,149,243, 83, 0, 64,171,213, 18,137,
+ 88, 44, 25,241,222,251,204,140,105,159,112,122,131,129, 19, 8,132,204,212, 57, 75,152,155, 55,146, 36,197,197,197, 12,169,201,
+ 47, 43, 30,158,127, 1,230,114,169,202,162, 80,150,200,169,152,151,101,201,160, 85,204,201, 2, 96, 87,185, 24, 91,148, 27, 44,
+ 51,125,158, 55, 19, 19, 19,155,181,108,217, 18,169,169,169,102, 71,202, 1, 40, 29,194, 44,147,225,214,173, 91, 0,112,211,210,
+137,142, 31, 63,190, 26,192,106,211,178, 66,161,232, 16, 62, 48,252,108, 80,183, 96,236,250,230,215,130,204,204,204, 32, 83, 77,
+ 44, 66, 8, 81, 40, 20,195,132, 98,193, 59, 77, 3,235,119, 49,114,220,210,227,191,159, 49,155,227, 3, 84,207,193, 50, 24, 12,
+ 79,157,131, 69, 8, 25,248,218,107,175, 49,201,201,201, 24, 52,104, 16,126,250,233, 39, 75,187, 98,216,176, 97,216,177, 99, 7,
+ 94,125,245, 85, 38, 50, 50,210, 98,153, 6, 74, 1,189,206,128,226, 18, 53,212,234, 90,185,111,102,121,214,200, 21, 0, 80,206,
+112,236, 74, 66, 92,155, 86, 33, 29,132,247,210,178, 32, 21, 11, 43, 25, 44, 7,137, 8, 82, 73,233, 58, 47,247,186,136, 57,119,
+ 82,103, 48,232,173, 14,131,167,148, 62,128,153, 34,141, 18,167,122, 41, 61, 59,181,170,107,238,152,229,179, 70,160,213, 47,203,
+109,182, 87, 40, 20,226,251,239,191, 87, 89,138, 94,217,251, 26, 80,138,242, 46,194, 18, 85,237,222, 35, 79, 79, 79,119, 15, 15,
+143,245, 46, 46, 46, 82, 83,238,144,165,237,214, 34, 92,150,168, 82, 23,235,218,146, 37, 75,106,100,178,196, 98,113,163,179,103,
+207, 54, 51,229, 5, 90,123,212,106,181,120,231,157,119,236, 10, 11,198,198,198,110, 14, 14, 14,190,237,238,238, 30,213,177, 99,
+ 71, 73,114,114, 50, 22, 45, 90, 68,132, 66,161, 51, 80,250,127, 89, 84, 84, 4,129, 64,128,199,143, 31,131, 16, 50, 50, 54, 54,
+246,176, 53, 77,141, 70, 19, 29, 29, 29,221,166,111,223,190,236,181,107,215, 32, 16, 8,192,113, 28, 52,237,219, 35,104,195, 6,
+ 36,125,242, 9, 94,190,119, 15, 26,189, 30, 82,169, 20,135, 15, 31,214,149,148,148, 88, 44, 35, 34, 22,139, 55,158, 63,127,190,
+165, 84, 42,133, 78,167, 3,199,113, 96, 24,134,176, 44,219,185,101,203,150,171, 80, 58,114,169,156, 70,141, 60, 60,198,127,208,
+251, 69, 35,199, 25, 51,148, 57, 57, 22,100, 1, 0, 90,167, 28,184,251, 75,202,243,173, 68, 66, 17, 68,130, 82, 99,101,138, 92,
+137,132, 34,136, 68, 98, 72,196,118,117,225,211,170,239, 29, 83,238,149,163,163, 3,247,194, 11, 47, 36,223,188,117, 59, 0, 0,
+ 83,167,142,139,221,121,177, 60, 60,207, 19, 86,242,175,114,170,152, 35,109,133,229, 28,148,206,173,220,167,236, 57, 42, 60,191,
+ 4,160,109,149,125, 77,219,181, 85, 30, 77,219, 19,107,227, 90,172,125, 80,246,254,224,131, 15, 54,188,242,202, 43,221,167, 78,
+157, 10,185, 92,142,204,204,204,242,127, 90,177, 88, 12, 63, 63, 63,168, 84, 42,156, 58,117, 10,249,249,249,199, 1,124,104,239,
+137, 51, 51, 51, 47,220, 74,184,249,168,115,223, 48, 55,255,176, 23, 93,210, 83,210,219, 3, 56, 71, 8, 33, 62, 62, 62,223, 13,
+254,228,181,247,186,190,217, 14, 34,177, 16,105,183, 44,230,209, 2,168,158,131,245, 44,181,177, 24,134, 97, 9, 33, 24, 52,104,
+144, 93,251, 15, 30, 60, 24, 39, 79,158,132,181,238,196,210, 46, 66, 29, 74,138, 85, 40,169, 69,131, 69, 8,129,209,104, 44,143,
+ 92,153,254,122, 42,117, 96, 24,166,220, 88,188,150,109, 95,201, 9, 0, 80,151,148, 44, 59,125,108,223,152, 23, 3, 90,187,119,
+ 8,110,142,155,119,211,176,108,246, 95, 93, 45,211,198, 14,198,150, 29,127, 64,225,229, 6,141,234, 9,142, 28,252,163,160,176,
+176,112,217,211, 94,195,150,189, 39, 1, 0, 47, 13,173, 60, 70, 96,208,199, 43,236, 58, 94, 32, 16, 96,212,168, 81, 22, 35, 88,
+ 81, 81, 81,170,138,145, 72, 75,152,238, 81,113,177, 26, 37, 42,187,130, 94,118,161, 80, 40,130,218,183,111, 31,245,237,183,223,
+186,213,171, 87, 15, 74,165,178,146,193, 82, 40, 20, 65, 97, 97, 97, 81,223,126,251,173,155,187,187, 59, 82, 83, 83,237, 46, 17,
+ 2, 84,174,139,149,147,147, 67, 30, 63,126,204,213,173, 91,183, 70, 38,139, 97, 24,104, 52, 26, 92,187,102, 95,143, 82, 77,138,
+142, 54,106,212,232,167,149, 43, 87, 74,238,223,191, 15,189, 94,143,228,228,228,106,131, 16, 88,150,197,204,153, 51, 49,103,206,
+156,245, 0, 26, 88,211, 51, 24, 12,223, 12, 31, 62,252,131,140,140,140,186,158,158,158,200,204,204,132, 72, 36, 2,165, 20,164,
+107, 87,188,116,247, 46,116, 70, 35,100, 50, 25,110,220,184,129, 77,155, 54, 21,235,116,186,111,204,105, 53,109,218, 84,204, 48,
+ 76, 51,145, 72,132,119,223,125,183,210,182,173, 91,183,162,131,255,227,208, 15,223, 20, 63, 49, 82,145,230, 9,252, 15, 49, 12,
+ 67, 38,140,238,221,188,115,135, 86,129, 87,147,239,221, 86,102,231,157,181,214, 86, 97,129, 27,116, 74, 9, 32, 18,253,149,111,
+ 85,150,115,197,138,197,229, 35, 10,169, 88, 12, 78,108, 95,177,224,138,166,137, 16, 2, 55, 55, 55,205,138,111,150, 73, 28, 29,
+ 29,141, 0,224, 36,119, 52,254,186,117, 45,220, 92, 93, 53,213,220, 24, 15,207,191,155,234,137,166,255,155, 99,159, 26,139, 6,
+ 43, 46, 46,238, 46,128, 30,193,193,193, 67, 79,157, 58,181,124,202,148, 41,238,157, 59,119, 70, 94, 94, 30, 26, 52,104, 0,111,
+111,111,196,198,198, 34, 49, 49, 49,151, 82, 58, 53, 54, 54,182, 90,168,199,218,108,219,148, 82,170, 80, 40,118,234, 74, 74,198,
+ 5,117,126, 17, 39,119,157,142,240,246,246,254,208,215,215,119,242,136, 89,125,223, 11,239,223, 22, 41,241,247,112,225,232, 21,
+100,166,230, 98,228, 75, 51, 44,106,218,147,131, 85,241,177,106, 14, 86, 69, 77,142,227,140, 90,173, 22,191,252,242,139, 93, 38,
+107,251,246,237, 80,171,213,224, 56,174,210,151, 78, 69, 77, 35,103, 36, 78,206,238,240,169,239, 15,157,182, 24, 28,103,255, 47,
+203,138,159,144,230,174,221, 96, 48, 96,254,252,249,152, 62,125, 58, 22, 46,180,220,187, 34, 16, 8,176,118,109,245,220,175,170,
+154,121,121,121, 69, 10,133, 98,216,142,239, 87,238, 26, 58,122,146,147,111,199, 32,108,254,245, 32,244, 58, 61,164, 18, 1,234,
+ 58,203,241, 66, 35, 31,104,213, 37, 88,183,122,121,161, 90,173, 26, 86, 53,247,172, 38,179,172,143, 28,208, 5, 95,110,250, 29,
+167,183,253, 21,160,124,105,232, 92,252,252,213, 68, 4, 7,255, 96, 85,211,104, 52, 66, 40, 20, 98,219,182,109, 42, 75,163, 9,
+ 89,150,133, 37,131, 85,245, 30, 57, 59,187,195,183, 97, 0,180,234, 39,181,118,143,220,220,220,166,127,247,221,119,110, 42,149,
+ 10,215,175, 95,199,245,235,215, 65, 8,185, 86,117,123,113,113, 49,146,146,146, 76, 38,167,146,211,177,246,122,154, 34, 87, 57,
+ 57, 57, 36, 51, 51, 19, 14, 14, 14,204,229,203,151,213,173, 91,183,190,134,178, 28, 45, 91,215,174,209,104,238,119,239,222,221,
+236,126, 26,141,198, 71, 34,145, 84,154,178,201, 84,116,180,106, 87,161,185,118,166,165,165, 37,172, 92,185,178,126,243,230,205,
+177,113,227, 70,141,147,147,147,120,202,148, 41, 96, 89,150,172, 88,177,130,230,229,229,233,102,206,156, 41, 62,115,230, 12,138,
+139,139, 19,172,181, 19, 0, 40,165, 69,132,144, 49, 29, 59,118,252,241,208,161, 67,178,102,205,154,161,160,160,116, 0,229,150,
+ 45, 91, 48, 97,194, 4,200,100, 50,164,164,164,160, 95,191,126, 37, 37, 37, 37, 99, 42,214,192,170,168,105, 48, 24,136, 80, 40,
+164, 28,199,225,179,207, 62,171, 84, 88,212,193,193, 1, 50,177, 17,223, 46,104,226,248,201,151, 89,142,147,198, 13, 31, 14, 0,
+ 70,142, 51, 94, 77,190,119,251,219,205,191,159, 0,112,202, 82, 59, 1,128,171, 83,128,122,205, 74, 35, 88, 66, 83,205, 43,145,
+164,210,232,193,210, 58, 88,165,117,177,108, 93,123,213, 84, 12, 87, 87, 87, 67, 72, 72,112,178, 74,165, 98, 77, 94,170, 94,189,
+122, 73,101,251, 82, 63, 63, 63, 45,170, 84,212,171,201,255,166,189,240,154,188, 38,143,121,108,134,250,227,227,227,183, 5, 6,
+ 6, 30,138,140,140,140,220,187,119,239,232, 73,147, 38, 17,103,103,103,236,220,185,147,230,229,229,253, 32, 22,139,167,159, 63,
+127,254,169,234, 69, 80, 74,183,156,249,227,194,216, 33,159,188, 65, 38,125, 53,178, 83, 66,116,210,181,214,157,154,161, 85,199,
+102,136, 61,158,140,181,179,119,252,100,208, 27,190,200,204,204, 76,181,166, 99, 79, 14,150,233, 79, 32, 16,216,172,131,181,119,
+239,222, 73,189,123,247,102, 98, 98, 98,170,229, 92, 85,204,195,138,138,138,130, 78,167,195,206,157, 59, 57,107,117,176, 56, 96,
+223, 55, 95,125, 49,226,251,173, 7,196, 12,209,225,252,169,221, 40,120,108, 61, 42, 39, 18, 9,241,243,246,125, 58,129,128,189,
+ 97,165,173, 15,226,226,226,220,190,252,242, 75,150, 97, 24,172, 93,187,182, 82,228,170, 42, 87,174, 92,225,244,122,189,205,123,
+165, 84, 42,163,188,188,188, 6,111,248,102,193,150,174,175,246,117,105,209,162,165,192,195,163, 62, 4, 12,131,252,188, 28, 92,
+186,112,198,112,248,192,111,249, 90,173,118,164, 82,169,140,178,165,103,141,136,111,127, 51,187,254,173, 73,214,187, 7, 25,134,
+ 49,232,245,122,129,163,163, 35, 12, 6,131, 89,115,213,189,123,119,217,217,179,103, 85, 58,157, 14, 44,203, 90,117, 76,165,247,
+104,238,136,239,127,172,221,123,100, 52, 26,253, 31, 63,126,140,226,226, 98,196,198,198,210,181,107,215,230,228,231,231,207,174,
+184, 61, 47, 47, 15, 69, 69, 69,184,116,233, 18,221,184,113, 99, 78, 97, 97,161,181,124,130, 42,109, 40,173,139,245,248,241, 99,
+206,193,193,129,209,235,245,250,214,173, 91, 75, 69, 34,251,106, 94, 1, 64, 66, 66, 66, 47, 75,219, 58,117,234,116,243,236,217,
+179, 47, 84,156,155,208, 96, 48,136, 52, 26, 77,179,126,253,250,217,252,252,144,201,100, 67,118,239,222,189, 77, 42,149,182, 82,
+171,213, 31,100,103,103,111, 1, 80,159,101, 89,220,186,117, 43,215, 96, 48, 12,252,236,179,207,190, 47, 46, 46,190, 34,151,203,
+135,218,211, 94, 74,233, 97, 66,200,208,128,128,128,205,243,230,205,115, 12, 15, 15, 23, 42, 20, 10,132,132,132, 32, 37, 37, 5,
+ 7, 14, 28,208,173, 91,183,174,164,164,164,100, 20,165,212,226,251, 83, 32, 16, 80, 0,196, 96, 48, 84,154,195, 84, 44, 22, 67,
+ 40, 20,162, 68,195, 96,244,103,119, 84, 28,132,170, 37,203,126, 58, 64, 41,136, 50, 51, 55, 55,235, 97,254, 69,129, 94,127,234,
+190,178,200,234, 92, 79,198, 92, 7, 52,116, 14, 4,240, 87,154, 2,195, 49, 32, 58, 2,214,200,130,213,179, 32, 2, 65,105,116,
+203,190,233,174,168,193, 96, 64,159, 62,125,176,127,255,126,244,239,223,159,194, 74,174,200,254,253,251, 45,254,184,224,225,225,
+249,251,177, 43,151, 34, 41, 41, 41, 31,192,135,109,219,182,221, 58,113,226,196,253, 28,199, 9, 57,142,123, 61, 33, 33,225,244,
+179,156, 60, 51, 51, 51, 78,161, 80,204,118,247,113,137,232, 53,180, 19, 90,182,109, 0,163,193,136,179, 7, 19,240,195,146,223,
+118,164,167,165,191, 71, 43,204, 85,104, 9,123,114,176, 42, 62,218,170,131,181,104,209, 34, 44, 94,188,184,198,163, 8, 45,237,
+115,238, 82,198,135, 29, 66,189,125,223,234,219,233, 85,134, 16,170,177,146,103, 67, 8,168, 41,211, 66, 32, 96,111,156,188,144,
+102,177,216, 82, 86, 86, 86,247,113,227,198,253,201, 48, 76,131,191,142,183,156,111,100, 52, 26, 51, 31, 61,122,244,138,173,107,
+ 42,211, 62,228,235,235,219,252,228,225,223,103,157, 57,118, 40,220,104,212, 53, 37, 32, 16,137, 68,183,245, 70, 67,180, 94,171,
+141, 72, 79, 79,127,230, 66,108,179, 62,236,143, 7,202, 92, 8, 4,108,105,237,169,178,219,189,123,213, 20, 4, 7,255,108,241,
+ 56,137, 68,114,104,243,230,205,125,134, 15, 31, 78, 4, 2, 65,121,183,155,233,250, 25,134,193,133, 11, 23, 84, 90,173, 22, 63,
+252,240, 3,149,201,100, 86, 11,215,254, 93,247,232,201,147, 39,163,250,245,235,183, 5,128, 4,192,173,130,130,130,143,148, 74,
+101,122,197,237,253,251,247,223, 2, 64, 66, 8,169,182,221, 22,166,146, 13,117,235,214,189, 86, 22,185,146, 62, 77,162,187, 37,
+ 56,142, 99, 45,117, 31,218,211, 85, 88, 54,183,224,155,166,229,208,208,208, 5, 99,199,142,173, 56,217,243, 41, 0, 77,106,218,
+ 46, 74,105, 20, 33,164,229,103,159,125, 54, 89, 38,147,117, 85,169, 84, 45, 0,192,193,193,225,122, 73, 73,201, 9,157, 78,183,
+146, 82,106,113, 26, 27, 0,184,125,251,182,182,113,227,198, 41, 6,131, 33,208,195,195,163,124,244,161, 88, 92, 26, 77,186,112,
+221, 53, 54, 35, 35,163,173, 53, 13, 43,237, 75,183, 22, 81,182,116,140,181,237, 90,173, 54,231,220,185,115,174,199,142, 29, 99,
+141, 70, 35, 14, 31, 62, 92,254,163,207, 92,111,224,157, 59,119,160,213,106,171,151,136,231,225,225,249,159, 64,254,206,110,122,
+123, 67,136, 10,133, 98,144,212, 81, 50,174, 65,115,239,214,202,187,217,201, 69,249, 37, 63,103,102,102,126, 75, 41,173,246, 1,
+254,111, 9,117,242,154,182, 53,197, 14,206, 71, 8, 43,106, 96,105, 59, 53,234, 30,104, 75, 10, 95, 53,167, 25, 22, 22,230, 35,
+ 18,137,150,105, 52,154,215,172, 85,105,103, 89,214, 32,147,201, 14,169,213,234,233, 85, 39,123,254, 55,190,158,243,231,207, 55,
+ 27,146,176,119, 20,225,220,185,115, 77, 3, 73,236,106,103, 80, 80,208, 9, 7, 7, 7,179, 5, 53, 75, 74, 74, 82, 19, 19, 19,
+203, 13,251, 63,249,122,154, 70,203,217,147,119, 84, 81,243,169, 70, 17, 62, 67, 59,107, 66, 85, 77, 95, 95, 95,169,179,179,243,
+ 50,134, 97,172, 22, 56, 53,193,113,156, 54, 59, 59,123, 74,110,110,110,121, 40,246,223,248,158,231, 53,255,255,104,254,215,168,
+181, 58, 88,207,130, 82,169,252, 5,192, 47,255,116, 59,120,254,183,152,204,211,211, 80,102,150, 44, 78,222,252, 95,197,100,144,
+204,172,191, 14, 88, 41, 72,246,148,216, 83,142,225,121,224,105, 19,186,203, 12,148,205,226,162,207, 3,233,233,233,106, 0, 19,
+254,233,118,240,240,240,216, 7,223, 65,207,195,195,195,195,195,195,195, 83,203, 16, 0,129,230, 54,212, 36,244, 71, 8, 49,171,
+ 97, 13, 91,250,188, 38,175,201,107,242,154,188, 38,175,201,107,254,247, 52,109,105,255, 87,186, 30,159,139, 28, 44, 94,147,215,
+228, 53,121, 77, 94,147,215,228, 53,255,127,107,254,215,224,187, 8,121,120,120,120,120,120,120,120,106, 25,187, 13,150,220,203,
+223,223,189, 97,208, 22, 87,191,214,151, 93,253, 90, 95,118,111, 24,180, 69,238,229,111,119,173,157,255, 18, 10,133, 66,230,237,
+237, 61,180,126,253,250, 81,109,218,180, 41,244,241,241, 49, 59, 69, 14,143,117,194, 9, 17, 12, 38,100,252, 8, 66, 82, 71, 16,
+146, 58,152,144,241,225,132, 60, 23, 3, 47,106,147,133, 19,124,218,159, 62,252,238,161,133, 19,124,204, 22, 96,155, 63, 77,225,
+118,246,200, 59, 43,103, 79,240,113,173,141,243, 17, 66,156, 60, 61, 61, 55,122,121,121,221,247,244,244,124,224,233,233,185,153,
+ 16, 82,167, 54,180,121,120,120,120,120,236,195,174, 47, 51,215, 6,173, 62,240,111,241,226,244, 5,115,103, 17, 31, 47,119, 7,
+189,193,168,187,119, 63, 61, 96,238,162,200, 93,174, 13, 90, 45,207,123,112,229,187,154,158,152, 16, 66,124,125,125, 7, 9,133,
+194, 62, 0, 76, 70,237,154, 94,175,223,159,158,158,254,139,189,163,130, 90,183,110,125,134,101,217,250, 53, 57, 55,199,113,247,
+ 19, 19, 19, 95,174,105,155, 1,192,199,199,103,160,143,143,207,230,246,237,219, 59,180,105,211, 6, 34,145, 8, 75,151, 46,157,
+ 10,192,236,116, 28,230, 32,225,225, 2,143,124,215,225,172, 64,240, 6,128,214,148, 2, 32,236,101, 78,175, 59,144, 93,247,209,
+ 22, 26, 29,109, 87, 25,113,111,111,239,217,132,144,145, 40, 29, 86,254,157, 82,169,124,234, 41,107,172,161, 80, 40,252, 8, 33,
+ 93, 41,165, 45, 24,134,185,194,113,220, 81,165, 82,249,232, 89,117, 61,129, 15, 59,118,238,188,114,196,212,169,172,234,212, 41,
+172,220,188,121, 5, 10, 11, 1,160,122,201,121, 43, 16, 66, 72, 88, 88,155,183,157,156,208,135, 0,193, 32, 32, 12,104, 66, 94,
+ 62,115,240,210,165,248, 95,236,169,165,102,137,144,144,144, 3, 0,122,151, 45, 30,140,139,139,123,189,166, 26,143,239,112,159,
+ 75,132, 45, 94,122,124,251,196,231, 0, 94,171,186,221,160,150,142, 96,133,126,125, 88, 26,159, 6,224,235,167,109, 43, 0, 16,
+ 66, 28,220,221,221, 47,255,246,219,111,190, 97, 97, 97, 2, 0,136,141,141, 29,222,167, 79,159,110,101, 33,253,194,103,209,127,
+ 90, 58,116,232, 80,215, 96, 48,108,101, 9,105,207,113,156, 11, 0, 48, 12,147,111,164,244,130, 64, 32, 24,241,180,197,138,121,
+120,120,120,158, 87,108, 26, 44,185,103,139,128,150, 45,253,167, 30,222,187,213, 47, 63, 47, 95,189,118,217,150,120,149, 64, 92,
+210, 40,160,153,104,213,242, 47, 93, 38,124, 60,237, 99,185,103,139,139, 79, 30, 94, 79,182,247,164,222,222,222,245, 27, 54,108,
+184,103,246,236,217,129,157, 59,119, 22,122,120,120,224,225,195,135,184,113,227, 70,224,217,179,103,251,255,246,219,111, 83,189,
+189,189,223,180, 85,193, 29, 0, 28,197,162,198,191,124,185,196, 75,236, 82, 23,212,104,128, 75,203, 32, 0, 0,229, 56,100, 70,
+ 71,129,211,235, 65, 57, 35,124,123,245, 45, 93, 79, 41,218,181,107,103,223,196, 95, 85,240,245,245, 85, 52,111,222,252,167,153,
+ 51,103,138, 52, 26, 13, 18, 18, 18,112,254,252,121, 46, 59, 59, 59,210, 94, 13,207, 86, 3, 2,188, 4, 94,187,250,245,127,173,
+225,235, 61, 61,196, 13,188,220,193,113, 82,220,184,171,171, 31,117, 58,190,215,193,195, 71,167,123, 4, 12, 24,152,157,188,247,
+138, 53,157,192,192,192,246, 12,195, 44,206,200, 40, 45,237,164, 80, 40,150,134,133,133,125, 81,113,159,170, 30,149,227, 56, 8,
+ 4,130,135, 37, 37, 37,131,146,146,146,226,205,233,126, 62,154,232, 13,134,210,247,133, 64, 0,227,214,163,190,123,123,244,232,
+209,104,212,168, 81, 8, 14, 14, 70,108,108,108,215,157, 59,119, 78,246,243,243,187,164,215,235, 15, 74, 36,146,232,251,247,239,
+ 63,213, 4,139, 34, 96,198,136,169, 83, 89,249,253,251,144, 39, 36,224,221,194, 66,193,151,192, 12,212,192, 96,133,132,132, 52,
+126,165, 71,240,174,254,111,118,241,247,242, 10, 16, 9,133,245, 64, 41,133, 94,159,215, 60, 39,231,218,219,117,234, 96,102,187,
+118,237,222,138,137,137,185,101,143, 94,219,182,109, 61, 57,142,219, 64, 41, 21, 17, 66, 38, 2,232,125,248,240, 97, 24,141, 70,
+188,254,250,235,189, 67, 66, 66, 26, 83, 74, 87,203,229,114,170, 82,169,222,191,116,233,210, 67, 75, 90, 11, 39,248,180,207,191,
+205,125,158, 37,104,210,235,197,208,145,200, 18, 28,233, 53,229, 85,239, 67, 46, 77,152,133,159,175,201,184, 0, 0,175, 53,109,
+234,212,184,133,195,167,114,231, 64,215,130,140,168, 79, 95,107,218,116,211,161,219,183,139, 44,105,218, 66,161, 80, 44,219,186,
+117,171, 95,251,246,237,203,139,228,182,105,211,134, 93,186,116,169,207,148, 41, 83, 86, 0,120,207, 78,157,230,110,110,110, 71,
+ 56,142,211, 92,189,122,181,185,105,189, 71,208,155, 29,221,156, 28,187,231, 60, 46, 58,149,123,245,183,147,246,104,133,134,134,
+142, 18, 49,255,199,222,121,135, 71, 81,117, 97,252,189,179,125,179,155, 77, 79,216, 77,161, 36,132, 18, 2,132,132, 94, 2,138,
+ 72, 9,130, 10, 40, 69,138,130, 72,147, 15, 69,193, 70,149, 32, 72, 71,138,160,128,128, 32, 77,145, 46,189,151, 36,212, 0, 9,
+ 73, 8,164,247,158,205,182,153,251,253,145,108, 12, 49,201,110, 40,130, 58,191,231,217,103,103,118,102,222, 57, 51, 41,243,238,
+185,247,158,203,124,191,248,139, 9,130,166, 45, 90,192,198,217, 21,134,228,100, 20,153,140,142, 23,175,221,234,243,205,146,239,
+ 51,130,130,130,198,132,133,133,253, 88,219,235,229,225,225,225,121, 81,177,104,176,164, 82,201,180, 25,159,127, 74,114,178,114,
+181,134,130,124,131, 13,213,155, 84, 54, 50,146,159,158,145,123, 95,101, 83, 60,101,242, 36,217,167,211, 62,159, 6, 96,168, 37,
+ 45,160,212, 92, 53,105,210,228,242,186,117,235, 92, 29, 29, 29,145,151,151,135,172,172, 44, 92,190,124, 25,148, 82,244,234,213,
+ 75,218,178,121,243, 86,139,151, 44,185,160, 86,171,219, 91, 50, 89, 66,145,144,136, 20, 10,236, 10,110, 5, 70, 44,198,155,119,
+ 82, 0, 0,212,104,192,161,183,251, 2, 0, 4, 18, 9, 6, 69,167, 3, 0,100, 50,153, 53, 97, 86, 9,165,180,125,199,142, 29,
+197, 0,240,209, 71, 31,229, 23, 21, 21,133, 18, 66,182, 38, 39, 39, 39, 89, 58, 22, 0,156,155,191,230,235,230, 82,231,212,183,
+115, 71, 59,250, 55,240,134,222,104, 68, 98,122, 18, 40, 36,168,227,170,192,208,254, 45,197, 29,131,196, 13, 23,125,119,236,164,
+155,127,191, 46,105, 55,127,187, 85,157,150, 66,161,216,180,116,233, 82,252,242,203, 47, 0,128, 19, 39, 78,192,215,215, 87, 97,
+ 41,134,187,119,239,122,143, 24, 49, 98, 27,128,134, 85,109, 55,153, 32, 12,253,122, 43, 0, 96,211,186, 33,130,168,168,168,250,
+114,249,159,115, 41, 7, 7, 7, 35, 56, 56,152, 9, 13, 13,109,123,226,196,137,182,219,182,109, 51,184,187,187, 47, 77, 74, 74,
+170,118,170,160,154,208,158, 62, 13,229,213,171,192,233,211,150,119,174, 68, 64, 64,128, 87,179,102, 46, 23, 22,125,251,149,203,
+239,251,110,225,219,111,127, 68, 76, 76, 12, 0,192,219,219, 27, 67, 6, 15, 20,109,221,178,166,217,180,105, 51,207, 7, 6, 6,
+118, 10, 15, 15,183, 88,221,156,227,184, 53,161,161,161,175, 41,149, 74, 76,155, 54, 45,170, 65,131, 6, 80,169, 84, 88,187,118,
+ 45, 28, 28, 28, 96, 52, 26,163, 22, 44, 88, 32, 76, 78, 78,198,242,229,203,127,192,159,217,173,191,208,165,119,240,151, 82, 81,
+147,206,141,131, 70, 64,169, 82, 99,221,207,219,113, 55,108, 99,103,157,241,206,151,159, 77,112, 31, 38,160,210, 17,238,190,202,
+105,245,131,186, 58, 53,108,214, 15,245, 2,175, 58,235,216,211,113, 95,142,247,158, 47,148,149,108,154,241,237, 95,179,132,100,
+224, 78,129,127,254, 21,199,155,127, 40,178, 40, 45, 47, 26, 74, 80, 86, 3,171,142, 90,211,174,113, 81, 38, 0, 0, 32, 0, 73,
+ 68, 65, 84, 55, 56, 56, 88, 0,148, 26,236,248,248,120,232,245,122,248,249,249, 49,122,189,222,170,154, 86, 26,141,166, 81,151,
+ 46, 93,206,110,222,188,217,169,115,231,206, 25, 21,183,213,113,178,127,245,212,238,165,147,190, 94,182,165,137,171,223,235,185,
+150,190, 8, 4, 5, 5,141,106,222,200,123,253,210, 5, 51,136,160, 40, 17, 66,251, 44,128,203, 66,202,182, 31, 0, 27, 71,244,
+ 25, 59, 5,173,219,182, 21, 76,154,252,217,250,214,173, 91,211, 43, 87,174,108,168, 73,143,135,135,135,231,159,130, 69,131,197,
+ 81,174,133,139,139,163,108,249,194,141, 97,106, 25, 67,234,120,104,136, 68,101, 47,132, 82, 33,101, 4, 34,173,183,183,135,152,
+163, 92,149, 83,133, 84, 30, 97, 64, 8, 33,245,234,213,219,189, 97,195, 6, 87,145, 72, 4,142,227,224,226,226,130,184,184, 56,
+228,228,228,160,176,176, 16, 49,183,111,163,158,167, 7, 38,141, 25,173,158,243,237,162,221,132,144,160,138,205,133,149, 53, 41,
+ 71,193,153, 30,109, 81, 35,132,160,170,246,197,234,166,145,177,118, 36, 4,199,113,247,147,147,147, 97, 99, 99,131,166, 77,155,
+ 42,175, 92,185,114, 38,201,156, 66,178,116,237, 3, 7, 10,212, 18,233,222,133,115,223,114, 36,130, 40, 68, 61,204,133,143, 71,
+ 27, 56,217,121, 34, 41,163, 16,225,145, 7, 16, 21,179, 31, 62, 30, 94, 24, 51,196,199,126,201,154,140,125, 36,240,125, 31, 26,
+190,214, 88,149,102, 65, 65,129,210,203,203, 11,238,238,238,224, 56, 14, 44,203,226,214,173, 91,229,203,230,249, 18,205,203, 75,
+183,158,131,131, 32, 19,111,189,222, 27,217,217,217, 74,107,175,221,108,174,118, 46,210, 52,211, 22,165,136, 1, 64,174, 80, 27,
+222,156,146,116,171,117,235,214,112,113,113, 17,159, 63,127,126, 10,128,114,131,101,237,253, 52, 0, 11,150,109,216,176,124,104,
+ 94, 30, 3, 0,235, 9,225, 12,165, 85,181, 45,223, 79, 66, 72,143, 87, 2,246, 44, 89,242,165, 11,161,145,112,180,251, 6,151,
+ 47, 63,128,193, 80,250,147,207,202, 74,199,196,241,249, 16, 10,109,177,104,209, 12,167, 65,111,125,176,171,172,137,140,171, 78,
+179,236, 51,241,157, 59,119,208,172, 89, 51,108,219,182, 77, 40, 16, 8,112,233,210, 37,200,229,114,140, 24, 49, 2,254,254,254,
+ 66,185, 92,142, 51,103,206, 32, 63, 63,255, 47,191, 80, 21, 53, 79, 31, 56, 53, 39, 39,246,196,151,169,130,195, 61,215,253,188,
+ 29,163, 7,191,133, 58,166,216, 51, 14, 62,204,156, 94,125, 58,124, 37, 16,121,134, 40,108,253, 29,124,253,251, 65, 44, 81, 98,
+194, 39,179, 17,117,115,175, 67,113,193,141,241,172, 49,193, 19,192,135,149, 53,233,142, 1,236,226,141,174,129, 71,189, 34,234,
+106, 2,223,191,148, 18,241,253,245, 63,207,222, 84, 8, 70,107, 95,118, 12,238,221,187,135,152,152, 24, 8, 4, 2,104,181,218,
+ 71, 38, 10,174,168,217,170, 85,171,247, 89,150,253, 10, 0,244,122,253, 70, 55, 55,183, 81, 43, 86,172,112, 18, 8,254,156, 41,
+202,156,185,202,206,205,207, 57,127,229,214,221, 41,239, 15,232,122,250,226,205, 4,251,150,253, 31,230, 94,251, 53,175,170,251,
+217,190,125,123, 7,137, 64,240,253,178,111,103, 17, 54,246, 24,164, 77,187, 66,168,244, 5,107, 76, 66, 73, 78, 33,180,113,169,
+ 48,172, 93, 9,239,177,147,177,112,193,215,100,240,176,119,191,247,241,241,217, 29, 83, 33,131,247, 44, 70, 41,241,154,188, 38,
+175,249, 98,106,254,219,176,104,176, 8, 97,242, 13, 6,163, 72,229,233,110,124,243,141, 46,205, 35, 46,221,140, 82, 58,218, 49,
+ 45,219, 52,247,187, 25,149, 24, 14, 19,107, 32,132,177,170, 95,135,135,135,199, 91, 51,102,204,104,174, 82,169,192,113, 28,236,
+236,236,144,145,145, 1,131,193,128,252,252,124,232, 10, 11, 96, 40,200,199,181,135,241,232,212,181, 43, 94,105,223,190,233, 1,
+163,241, 45, 0,219,170,211,100, 25, 1,117,106,213, 6, 3, 99,179,192, 25,244,216,225,237, 4,160, 52,107,245,118,124, 46, 8,
+ 33, 96,245, 58, 28,104,211, 16, 82,165, 2, 45,166, 86, 59,101,160, 69, 82, 82, 82, 34,234,214,173,123,176,103,207,158,189,198,
+140, 25,195,164,166,166, 30,114,115,115,235,152,150,150,102,177,121,212, 53,154, 29, 49,124, 76, 43,111,103,123, 6,191,159, 59,
+140,118, 77, 94,135,141, 84,132,140, 28, 45, 24, 66, 16,115,255, 40, 88, 86,129,107,119, 30,162,189,191, 2,157,219,218,121, 20,
+ 30,203, 30,131,234,155,203, 72, 78, 78, 14,210,211,211, 97, 52, 26, 97, 50,153, 48, 96,224, 64,108,218,184, 17, 69, 69, 69, 40,
+ 41, 41,129, 94,175, 7,199,149,250,137,212,140, 66, 92,190,118, 8, 65,205, 27, 1, 53, 84,252, 22, 10, 97, 90,177,116,136,208,
+214, 6, 16, 75, 93, 12, 5, 5, 5, 80, 40, 20,208, 22,165,136,135,143, 46,207,108,137, 79,156, 56,129,240,240,112,104, 52, 26,
+224, 49,103, 4,136, 1,190,191,207,178, 95,244,218,179,199,245,220,158, 61,220,197,223,127, 79,148, 22, 20,172,181,230,216,182,
+109, 3, 6, 76,152,208,167,169, 92, 38, 71,226,195,165,104,210, 68,140,143,254,231,132,208,111, 50, 1, 0,147, 38,120, 32, 40,
+200, 9,249,185, 59,225,236,250, 25, 62,154,210,223,167,176,144,190, 3, 96, 99, 77,186,132,144,137, 91,182,108,137,234,209,163,
+135, 48, 34, 34, 2, 82,169, 20,114,185, 28, 50,153, 12,114,185, 28,169,169,169,208,235,245,216,177, 99,135,169,172, 9,177, 90,
+202,154, 1,123, 77,233,161, 62,120, 55,108, 99,103,119, 38,238, 90,255, 41, 29,238, 71, 92,186, 86,120,252,216,185, 57,166, 18,
+ 89, 66,110,226, 31,159, 54,104,125,205,121,252,212, 89, 88,185,112, 6,238, 94, 58,149,237,230, 85,240, 29, 75,116, 27, 59, 86,
+ 81,231,190,107,215, 89,194,113, 95, 12, 54,142, 27,245,166,221, 62,245,249,209,251,132,200, 76,203,190,241, 45, 98, 47,107,165,
+190,205,134, 53,106, 64,244,199,143, 31,151,119,233,210, 5, 90,173, 22, 0, 32, 16, 8,176,101,203, 22,206,100, 50,157,168, 42,
+ 78,163,209,248, 85,120,120,184,186,184,184, 24,131, 7, 15,158, 52,115,230, 76,133, 72, 36, 2, 0,176,108,233,108, 85,230,204,
+213,220, 37, 63, 29,158,252,213,119, 39, 14,111,251, 70, 51,119,218,168,174, 67, 39,124,125, 2,192,161,170,116, 77, 38,211,166,
+ 37,223, 76, 23, 72,237, 13, 32,173,123,192,144,174,197,131,245, 99,160,207,211,162,209,156,217, 0,196,208, 27, 4,216,215,127,
+ 32, 4,142, 26,188,215,165,163,112,237,169,179,155, 0,244,175,233,190,242,240,240,252, 39,105, 13,192,165,108, 57, 19,165,207,
+ 49, 39, 0,230, 44,187, 11, 0, 61, 0, 73,133, 99, 42,175, 87,220,183,242,122,197,229, 76,148,246,109,118, 1,192, 2,184, 12,
+160,214,253, 68, 25, 0, 32,132,148, 39,124, 42, 46, 3, 0,199,113,167, 99, 98,227,181, 93,131,131,212, 39, 46, 71, 71,244,124,
+253,149, 54, 93, 94,106,219, 46, 45, 43, 63,182,142,139, 74,113,254,210, 69, 41,199,113, 86,181,239,136, 68,162,144, 78,157, 58,
+ 9,115,114,114, 96, 99, 99,131,140,140, 12, 36, 37, 37,193, 96, 48, 64,155,151, 11, 93,110, 14,180, 57,217, 48, 22,228, 34,230,
+202, 37, 52,246,114,151,150,117,130,183,138,202, 25, 42,243, 12,246,132, 97, 32, 83,217, 66,174, 82, 65, 32,168, 93,101, 10,141,
+ 70,211,175, 73,147, 38, 23,221,221,221,191, 0, 0,189, 94, 63, 62, 52, 52, 52,147, 82,138, 79, 63,253, 84,165, 82,169,118,212,
+171, 87, 79,106, 73,199,214,145, 29,208,182,121, 67, 65,212,131, 27, 8,242,125, 19,245,213, 93, 16,147,148,135,140,188, 18,164,
+102, 23,161, 81,163,169,112,209,140,134, 93,157,177,184,113, 55, 1,234, 58,245, 25,129, 72,220,179, 38,205,212,212,212, 71,214,
+127,222,186, 21,197,197,197,104,216,176, 33,222,126,251,109,124,242,201, 39,120,235,173,183,160,209,104,208,185,161, 16,163,134,
+ 13, 64,122,122,122,141,113,206, 89, 71, 69,243,183,170, 35,134,207,160, 17, 13, 95, 62,120, 43, 38, 38, 6, 81, 81,127,109, 89,
+ 59,118,236, 24,242,242,242,202, 31,192,214,224,230,230, 54, 93,173, 86, 95, 87,171,213,183,212,106,245,129, 52,141,230,142,209,
+219,219,173, 99,255,254,196,111,208, 32, 65,130, 66, 65,238,123,122, 42, 45, 43, 1, 42, 21,250, 4, 5,117,146,228,230,252, 8,
+160,212, 68,142, 26,233,130,179,167,154,225,220,153, 64, 76,156,224, 13,134,200, 64, 24, 49,138,139,142,193,175,153,191,216,214,
+150,214,248,187, 84,214,161, 61,182, 89,179,102,194, 15, 62,248, 0, 82,169, 20,155, 54,109,194,234,213,171,177,120,241, 98, 68,
+ 69, 69,161,110,221,186, 80,171,213,112,115,115, 19, 2,136, 45, 59,166, 70,236,125,152, 57, 58,227,157, 51, 14,190,138, 88,194,
+184,118,208,153,100,111,206,248, 54, 57,107,206,119,177,139,238,223,213,122,223,185,116, 42, 43,234,230,111, 92,220,149, 19,153,
+201,209,133,222,115,190,139, 93, 52,111,101, 82,118, 85, 90,167, 78,205, 96,127, 61,112,202, 80, 84, 88, 44,236,215,235,101,237,
+216,145,111, 55,114,180,105,188, 5,238, 61, 2,234,121,170,135,205,152,183, 92,255,222, 7,147, 13,235,127,248,145, 22, 20, 20,
+ 32, 63, 63, 31,203,150, 45, 51,253,254,251,239, 73, 44,203, 78,174, 38, 68, 1, 0,152, 76, 38, 12, 28, 56, 80, 33,151,203,145,
+144,144, 80,158, 5, 5,128,148,140,172, 27,231,174,220,188, 51,101,236,192,224, 34,157, 78,119,248,100,216,109, 63,223,186, 30,
+132,208,122,213, 93,183,128,144,118,205, 90,180, 0,165,185, 96,132, 94, 72,252,233, 91,104, 83,179, 81,156,145, 13, 70,164,128,
+ 17, 50, 24,168, 4,178, 22,109,240, 32,252, 42,220,148, 42, 8, 9,233,104,233,126,242,240,240,252, 59,169,201,139, 0,112, 33,
+132,236, 35,132,236,155, 62,125,122, 55, 0, 78,132,144,125, 40, 53, 65, 46,101,203, 18,243, 62,213,172,187, 84,212,169,116,108,
+197,101,231,233,211,167,191, 68, 8,217,215,161, 67,135, 97, 40, 53,114,181,198,162,219, 16,148,232, 67,167,127, 49,131, 81, 41,
+ 37,182,126, 77,235, 59,252,126,228,116,196,185,139, 87,111,219,218,200,164,133, 69, 69,146,197, 43, 86,123,145, 98,173,181,157,
+188,155, 58, 59, 59,195, 96, 48,224,222,189,123, 72, 76, 76,132,193, 96,128,169,184, 8,186,220, 92,148,228,228,128, 43, 46,132,
+152,229,160,205,204,128,131, 76, 2,252, 57,194,176, 90, 40,165,229,102,170, 34,230,117, 66, 8,100, 42, 91, 72,108,149, 96,132,
+130,170, 36,170, 68,173, 86, 7, 6, 4, 4,252,114,252,248,241,182,157, 58,117,154, 83,175, 94, 61,187,212,212,212, 7,105,105,
+105, 47, 47, 92,184, 80,231,226,226,130,161, 67,135, 54, 54, 26,141,195, 45,105,137,101,186,230,117,221,124,225,229,214, 15, 26,
+167,118,200,202,215, 33, 35, 87,139,212,172, 98,108,223,245, 54,254, 56,248, 54,174,158, 25,134,123,151, 70, 33,171, 72, 5,153,
+ 99, 55, 0,180,198, 10,186, 23, 47, 94,196,154, 53,107,202, 95, 43, 87,174, 68,118,118, 54,154, 53,107,134,132,132, 4, 28, 58,
+116, 8,169,169,169,112,113,113,193,213,171, 87,177,118,237, 90, 92,186,100,213,220,181,143, 80, 82, 82, 2,145,196,201,176,105,
+221, 16,108, 90, 55, 4, 44, 85, 24,204,219,106, 83,168,150, 97,152, 17, 41,253,251, 55, 79,177,183,247,107,209,162, 69,175, 65,
+131, 6,121,183,109,219,182,124,187,143,143,143,151, 80, 40, 76,213,104, 52,235, 53, 26, 77, 64,141, 98, 28,109,229,224,216, 20,
+122,221, 29, 0, 0, 33, 66, 16, 34,197, 75,175,220, 70,199,206,225, 48, 24, 37, 32,140, 20, 12,145,193,100,202,130,202,214, 13,
+148, 90,172, 72,220,251,208,161, 67, 88,179,102, 13,226,226,226,202,155, 71, 67, 66, 66, 38, 14, 30, 60,120, 55,203,178,216,183,
+111, 31,126,253,245, 87, 52,104,208, 0, 1, 1, 1, 48, 24, 12,213,246,193, 50,243,229,202,164,139, 91, 23, 31,124, 91,100,178,
+ 15,144, 72,235, 54, 96, 10,108,250,141,239,234,162, 0,128,131, 49, 49, 5,110, 94, 5,243,139, 11,110, 62,116,240, 40,250,198,
+ 82, 7,119, 74, 65,195,162,110, 93,218,182,235, 72, 94, 90,102,150,168, 85, 75,127,237,215,179,166,138,235,213,111,184, 96,198,
+167,227,220,146,242,101,121,175, 76, 58,120,103,247,161,203,133,239,140, 26, 99,122,119,204,132,146,195, 71,142,237,225, 56,174,
+ 69,117, 35, 8, 57,142, 67, 74, 74, 10,110,222,188,137,184,184, 56,100,102,102, 34, 35, 35, 3, 5, 5, 5,229,205,138, 54, 5,
+249,251, 87,110,248,253,154, 66, 46,183,105,219,220,215,235, 82, 68,100,186, 66, 46,183,241,173,239,213,136,144,170, 39,160,230,
+ 56,206,190,244, 30, 18, 20,220, 60,141,146,236, 2,104,115, 11,161,205, 46,132,206, 32, 64,137,142, 65,137,129,129,115,231, 30,
+ 40, 44,210,162, 36, 59, 23, 28,165, 14,150,238, 39, 15, 15,207,127, 23, 74,105,200,252,249,243,231,213,180,189,194,187,190,210,
+ 58, 8, 33,251, 40,165, 33,148,210,144, 50, 51, 5,243,231, 21,117,230,207,159, 63,143, 82, 26,114,254,252,249,159, 1, 20, 63,
+ 78,172, 22,155,118, 50, 51,163, 10, 85, 46,126,111, 76,254,244,171, 3, 91,214, 45,119,205,206,206,137, 18,203,228, 37, 50,153,
+196,241,147, 79,103,217, 23, 21,231,189, 81,152,109,253,168,167,156,156,156,242,135,151, 88, 44, 6, 91, 92, 4, 86, 91,140,146,
+156, 44, 16,131, 14, 98,150,133,163,141, 13,188, 52,110,168,231, 86,199,162,158,128, 99, 73,242, 31, 7,112,120,216,235,143, 52,
+ 11,114, 6, 61, 14,117,104, 12,137, 82, 1,185,189, 3, 58,253,122, 6, 0, 32, 22,139,129, 25,223, 88,212,173, 83,167,142,179,
+ 70,163,217,187, 98,197, 10,113,102,102, 38,110,221,186,117, 45, 62, 62, 62,207,209,209,209, 86, 36, 18,113,209,209,209, 71,239,
+222,189, 27, 82,191,126,125, 80, 74,125, 44,233, 21,228, 42, 12, 6, 35,135,164,244, 7, 72, 76,185, 9, 59,165, 23, 40,227,137,
+180,236, 98, 16,184,194, 88,114,183,188, 47,153, 78,155,136, 34,157,117,243,246, 26, 12, 6, 24,141, 70, 24,141, 70,232,245,122,
+188,243,206, 59, 56,127,225, 2,182,254,122, 18, 9, 9, 9,104, 80,199, 6,111,191, 53, 16, 45, 91,182, 68, 88, 88,152, 85,154,
+ 85,225,219,253,240, 45,185, 92,142,213,171, 87,195,198,198,166,252,115,107, 13,150, 90,173, 94,212,164, 73,147,134,119,139,138,
+ 16,121,231, 14,218, 12, 28, 8, 0, 56,123,246,108,249, 62, 90,173, 22, 67,134, 12,145,196,197,197,189,123,231,206,157,119,213,
+106,245,226,148,148,148,143,170,211,220,191,255, 2,198,142,141, 68, 70, 70,105,102,119,251,207,126,229,219,238,199, 25,208,179,
+ 79,105,203,149,189,189, 61, 22, 45,178,110,182, 7,150,101,177,118,237, 90,200,229,242,114,131, 37, 22,139, 59, 78,153, 50,229,
+141,170,246,247,243,243,171,234,227, 71,152, 50,208, 67,118,245,129,124,188, 93,195,250,254,118, 46, 45,144,105,186,218, 60, 34,
+ 41,117,226,148,129, 30, 75, 23,239, 72, 44, 97,137,110, 35,107, 76,240, 20,202, 74, 54, 89, 19, 99,204,193,229,122,135, 6,239,
+111, 74, 77,207,251,124,194,152,161, 78,246, 14,110,133,235, 87,132,218, 51, 12,131,223,195,245, 57,205,188,157, 28,250,181, 91,
+ 86, 56,246,127, 95, 70,232, 77, 15, 38, 34, 97,223, 93,160,202,110,137, 0, 74, 13, 86, 82, 82, 18, 50, 51, 51,241,240,225, 67,
+100,100,100,128, 16,130,140,140,140, 90,101, 40, 43, 67, 8,129, 62, 49, 9,169,123,126, 64,157, 33, 67,209,104,246,108,112,156,
+ 8,218, 98, 19,118,118,126, 25,249,121, 90,232, 57, 2,251,192, 14,120,101,223, 25, 48,156, 9,184,112,254,177,207,199,195,195,
+243,239,135, 16,178,111,218,180,105,159, 89,185,251, 81, 0, 86,149,214,169,108,184,166, 77,155,246,153,249, 92,161,161,161, 90,
+ 0,201,181,141,213,170,190, 51,249, 25,145,177, 78,117, 91,164, 20, 22,107,101, 14,142, 14,197,182, 74, 9,205,203,205, 19,220,
+185, 23, 85, 82,152,114,239,110, 45,206,119,251,214,173, 91,254, 73, 73, 73,120,248,224, 1,140,197, 69, 32,122, 29, 80,162, 69,
+247,206, 29, 33, 3, 32, 35,128,152, 51, 64, 32,144,160,176, 48, 31, 0,110, 91, 18,229,140,229,253,192, 31,109, 22,180,181,133,
+ 68,169,128, 84,101, 91,190,205, 90,228,114,249,214,181,107,215,170,213,106, 53,150, 44, 89, 2,181, 90,221,164,123,247,238,197,
+193,193,193,114,103,103,103, 52,106,212, 8, 65, 65, 65, 56,113,226, 4, 8, 33, 49,150,244, 76,122, 73,248,237, 88,214, 51,191,
+240, 42, 46,133,111,134, 81,175, 71,125,223,233,208,153,156,161,112,125, 23, 90,195, 94, 24,114, 79, 2, 0, 36,170,174, 72, 75,
+203, 4, 64,106,236, 68, 88,217,220, 80, 74,113,253,250,117,108,220,115, 22, 94, 77,187, 34, 53,251, 16,110,222, 12,131,155,195,
+ 17,248,250, 53,131,177,194,125,178,132,181,198,201,218, 7, 48, 33,100,200,244,233,211,145, 39,151, 3,125,250, 64, 28, 27, 11,
+131,193,128,118,237,218,161,117,235,214, 0,128,118,237,218, 65, 32, 16,160, 97,195,134,112,116,116,196,238,221,187,135, 0,168,
+210, 96, 81, 66,174,114,108, 86, 19,111,111,239,114,131,181,233,167, 12, 68,132,117, 7,129, 4,203, 87,254,249, 35,241,242,242,
+ 66,106,106, 28, 8,177,216, 41,243, 64,159, 62,125,122, 59, 56, 56, 96,228,200,145,144,203,229,120,253,245,215,161,213,106, 7,
+ 1,192,252,249,243, 49,125,250,116, 0,192,140, 25, 51, 48,115,230, 76, 20, 23, 23, 87, 91,162, 98,205,215, 45, 52, 5, 90,110,
+148, 90,173,121,189,155,115,253, 22, 47,189,218, 29, 13,124, 95,198, 75,175, 38, 0,192, 60,103,209,253,129, 11, 62,247,223, 83,
+223,211,113,195,249, 95,143,126,213,169, 87,183, 47,102, 77,114,156, 51, 99,121,182,197, 47, 44,185,247,191, 47,184, 35,234,187,
+116,249, 26,211,146, 25,159, 77,145, 62,200, 52,100, 39,231,112,133, 10,169,208,214,199, 13,202,137,159,204,137, 75, 78,190,247,
+ 49, 18,142, 88, 28, 57,201,178, 44,226,226,226,160,211,233,192,178, 44,116, 58, 29, 10, 11, 11,145,152,152, 88,254,243,213, 42,
+ 84, 61, 39,140,236,219,178, 72,171, 45,190,116, 35,250,225, 23,147,134,182, 47,210,106,139,163,239, 63,140,162,116, 89,149,117,
+198, 8, 33,185,197, 5,133,142,250, 2, 35,114,175, 69,193,249,165,186,208,155, 8,116, 38, 1,178, 51, 11, 96, 96, 1, 35, 35,
+130,199,128,119, 96, 34, 66,228,103,164,130, 33,132,175,135,197,195,195, 83, 45,102, 35, 20, 26, 26,106,117,247,161,218,106, 3,
+ 64,104,104,232,173,208,208,208, 39, 58,151,217, 96,117,173,208,222,217,181,242, 78,132, 16, 18,208,194,203,125,222,103,111,104,
+140, 70,125,147,194,194, 66, 86, 40,148, 8, 61,237,180,169,149,247,173, 9,163,209,184,239,204,153, 51,253, 59,119,238, 44,141,
+190,113, 13,186,188, 60,232,242,114, 33,230, 76,112,148, 5,129, 49,234, 65,244, 58,184, 55,230,160,205,151,225,194,149,187, 70,
+163,209,184,175, 38, 77, 10, 74, 57, 83,169,113, 96, 24,193, 35, 77,133, 82, 91, 37, 36, 74, 37,164, 74,219, 42,155, 16,171,195,
+205,205,205,166, 87,175, 94, 47,183,106,213, 10,148, 82, 44, 92,184, 16,122,189, 94, 98,206, 20, 25, 12, 6, 20, 20, 20, 96,215,
+174, 93,248,233,167,159,206,217,217,217, 89, 28, 90,206,153,116, 7, 79,156,187,214,123,216,235, 47, 73,254, 56,185, 30, 70,157,
+ 9,133, 58,123, 20,149,232, 81,160, 21, 65, 47,125, 21,132,156, 1, 35,144,162, 67,128, 15,142,159,141, 46, 97,141,134, 42, 59,
+ 15,255,229, 30,148,153, 33, 66, 8,116, 58, 29,210,211, 51,144, 93,112, 2, 40, 72,130,179,161, 0,133,247, 99, 16,240,206,112,
+232,245,122,139, 90, 95,142, 38,198,105, 67, 32,252,105, 54, 3,145,196,201,224,219,253,112,181,165, 34,148, 74,101,121, 31, 29,
+107,200,207,207,199,230,205,155,209,174, 93, 59, 4, 7, 7, 35, 41, 41, 9,177,177,177,232,221,251,207, 86,182,107,215,174, 33,
+ 34, 34, 2, 62, 62, 53, 39, 5,243,243,233,129,236,236,123, 3,251,245,235, 39,190,120,241, 34, 40,165,240,245,181,131,202, 86,
+ 9,194, 72,209,180,169, 11,128,187, 32,132,160,107,215,174, 48, 24,146, 77, 69, 69, 56, 80,147,102,120,120,120,159,192,192,192,
+ 6, 70,163, 49,202,223,223, 95,152,154,154,138, 1, 3, 6, 96,251,246,237, 0,128,105,211,166, 97,218,180,105,143, 28, 83, 88,
+ 88, 88, 82,157, 94,203, 54,141, 62,102,169, 83,176, 68, 90,183,129,157, 75, 11, 52,240,125, 25, 0,240, 74,200, 40, 52,104,232,
+137,188,140,235, 13,244,186, 7,175, 11, 72,150,195,150,139, 73,145,157,109,252, 71,102, 38,156,140, 6, 96,177,112, 47,165,148,
+ 18, 66,210, 30,138, 84,191,236,252,109,223,251,125,251,190, 38, 52,178,156,201,223, 75,104,183,125,247,254,244,164, 7, 15,151,
+225,225,145, 91, 21,247,175, 78,139,101, 89, 54, 55, 55, 23, 74,165, 18,177,177,177,186,190,125,251, 74,181, 90, 45,162,163,163,
+203, 13,150,171,179,163, 95,199,214,254, 77,230, 46,249,233,176, 66, 42,149,190,218, 53,168,105,100,244,131, 68, 74, 73,124,181,
+186,148, 94,140,190,125,187,143,139,179, 23, 82, 78,158,135,162, 83, 47,232,116, 4, 37, 6, 14,122, 22, 48, 9,196,176,107,217,
+ 6,114,239,166,224, 40,112,251,198, 53,152, 40, 61,103,233,218,121,120,120,254,181,212,232, 69,128,210, 12, 86,251,246,237,183,
+ 1,127,102,153,204,203, 0,116, 0,106,234, 19,157, 81,209, 68,153,155, 13,171, 59, 79, 37,221, 90, 35, 44, 59,201, 41,212, 48,
+178,204,217,217,217,181,105,227,102,222,235,126, 88, 15,131, 46, 15,177,145, 27, 80, 84,144,134, 47,231, 93,240,241,240,240, 8,
+ 78, 76, 76, 60,101,205,201, 18, 19, 19,183,239,222,189,251,163,150,205,154,181,170,231,225,129,235,241,247, 33,166, 44,196, 44,
+ 11,198,160,131,144,213,195,195,143, 3,195, 40,144,154, 90,128,181,135,142,221, 76, 76, 76,220, 94,147, 38, 75, 4,240,236,251,
+ 38, 6,191,210, 7,212,104,192,145,206,126,144, 41,149,144,218,219,163,195,174,147,165, 37, 27, 76, 70,196,207,159, 10,177, 66,
+ 9,199,118, 85,254,204, 30, 33, 45, 45,173,184, 97,195,134, 97,119,238,220,105,221,184,113, 99,204,154, 53, 11, 9, 9, 9,160,
+148, 34, 61, 61,189, 36, 35, 35, 35, 41, 43, 43, 43,158, 16,178, 39, 57, 57,121,157, 53,149,194,211,125, 5, 27,255, 56,122,236,
+227,192, 0,191, 70,221,131,103, 98,223,190,175,144,155,159,143, 34,157, 16,133, 90, 3,138, 74, 40, 52,182, 62,104,219,162, 21,
+ 50,178,244,136,190, 21,158,152, 41,118,252,222,154,251,106,134, 16,130,107,215,174,161,174, 35, 65,100, 84, 4,156, 75,178,209,
+216, 94,137, 86,157, 58, 35, 46, 46, 14,128,229,204,148,201, 4,225,196,201,127,142, 22,180,183,183, 71, 94, 94,222, 35,199,217,
+216,216, 64,163,209, 32, 63, 63, 31, 59,119,238, 4,181,238,161,104,212,235,245,104,210,164, 9,174, 92,185,130,163, 71,143,226,
+165,151, 94, 66,151, 46, 93,112,242,228, 73,132,133,133, 33, 34, 34, 2,132, 16, 56, 57, 57,153,179,109,213,166,220, 46, 95,190,
+182, 67,169, 36,211, 71,142,252,192,127,232,208,161,216,181,107, 27, 70,141,108, 12,194, 72, 65,136, 20,175,245,109,130,217,115,
+194,208,182,109, 87, 56, 59,139,113,244,232,173, 56,161,208,238, 39, 75, 65, 82, 74, 87, 44, 88,176, 64, 40,147,201,160,215,235,
+ 81, 88, 88,136,172,172,210,114, 84, 85,101,176,180, 90,109,181,133,213,110, 93,189,187, 40, 39,159,230, 48,197,225,175,103, 26,
+175,182,120,233,213, 68,188, 18, 50, 18,127,236,219,128,227,135,143,194, 89,116, 63,142,149, 23, 30,204,136,203, 44, 72, 46,244,
+ 93,235, 23,244,158, 32,165,232,240,154,241,253, 28, 4, 30,106,110,199,180, 85,121,185,150,226,205,142,220,188,119, 47,197,107,
+157,218,181,241,105,238,165,145,100,103,165, 99,247,111, 7,111, 25,238,239,218,135,210,102, 65,107, 82,145,179,151, 47, 95,254,
+ 21, 0,112, 28,183,113,201,146, 37,239,125,252,241,199, 46, 73, 73, 73,229, 6, 43, 61, 51,251,120,135, 62, 19,217,172,220, 60,
+253,143, 75, 62, 25, 32,151, 73, 37, 95,204,255,241,164, 81,128,139,213,137, 10,133,194,225,159,173,218,146,177,115,199, 6,129,
+139, 76,140,179,159,206, 64,236,177, 19, 48, 16, 49, 94, 61,114, 9,122, 3,139,252,244, 44, 28, 31, 57, 14, 14,106, 71, 28,200,
+138,102,243, 10,242, 45,246,103,228,225,225,249,119, 98,193,139,100, 84, 48, 68,217, 0,226, 67, 67, 67, 51, 43,100,151, 50, 0,
+ 92, 3,208,178,108,191,140, 74,199,101, 0,184, 2,160,117, 5,157,140,178,243,134, 84, 90,214, 87,218,231,218,227, 92,143, 85,
+ 77,132,153,153,153,233,151,195,110,226,220, 31,171, 97, 50,234,144,151, 93, 90,251, 51, 57,173, 4, 42,149,234, 66,117,199, 85,
+158,109,155, 82, 74,213,106,245, 27, 75,150, 46,189,248,254,240, 97,117,186,188,252, 50, 30,220,184, 14, 93,118, 38, 4, 44, 11,
+ 1, 17,161, 48, 83,134,180,212,124,132,238, 61,152,174, 45, 41,121,163,242, 55,239,170,102,240, 54,119,114,167,132, 64,102,167,
+130, 84,161,128,212, 78,245,103,198,138, 16, 72,148,182, 16, 41,148, 16,136, 43,142,216,172, 94,179,184,184,248,205, 49, 99,198,
+ 92, 63,112,224,128,195,224,193,131,241,218,107,175, 69,228,230,230,118,203,206,182,220,124, 83,229,181,239,216,193, 58, 55,127,
+173,223,119,171,215,157, 31, 49, 98,132,227,107,253,190, 67, 68,228, 45,228, 22,185, 2, 0, 52,206, 10,180,109, 60, 21,233, 89,
+ 58, 28, 62,184, 47,135, 51,149,188, 73,111,110, 51, 86,167, 73, 41,165,206,206,206,143,100,229, 4, 2, 1, 78,158, 60,137, 15,
+ 63,252, 16,206,182, 39, 81, 16, 31,139,230,157,131,241,202,208,225, 24, 53,106, 20, 4, 2, 1,156,156,156,128, 10, 15, 93, 75,
+ 51,162,231,229,229,161, 94,189,122, 56,178,174,113, 51,125, 73,186,184,149, 35, 64, 96,103,248,227,120,239, 91,167, 79,159, 46,
+ 4,176,206,215,215,247,145, 34,163, 85,105, 18, 66, 62,159, 55,111,222,234,142, 29, 59,202,149, 74, 37,124,125,125,113,238,220,
+ 57,156, 59,119, 14,103,206,148,246,143,115,114,114,130,163,163, 35,114,115,115,145,144,144,160, 37,132,124, 94,237,253,164,148,
+107,221,186,117,255, 63,254,216,115,169,111,223, 55,156,123,246,108,143, 58,117, 10, 96, 50,101,130, 48, 98, 72,101,174, 88,183,
+110, 62,210,211,178,113,254,194,133,236,194, 66,225,155, 97, 97,143, 78, 65, 84, 77,156,134, 67,135, 14, 65, 38,147, 97,215,174,
+ 93, 38, 55, 55, 55,161,189,189, 61,128,170, 51, 88, 37, 37, 37,210, 74,199,151,107,190,247,201,141, 36, 0,115,166, 12,244,248,
+246,252,173,180,254, 0,182, 54,104,232,129,227,135,143,226,204,241,243,211,218,249,115,203,251, 12,105, 51, 91,246,210,160,169,
+126,129,239, 9,148, 42, 53, 54,237,222, 37,136, 12, 95,255,117, 73,209, 77,111, 0, 83, 45,252,140, 40, 0, 20,166,167, 77, 15,
+ 93,188,114, 99,232,172,175,228, 11,151,173, 74,214,102,166,126,134,210,161,149,180,226,126,213,197, 25, 27, 27,187, 22, 64,121,
+121, 12,141, 70,179,121,254,252,249,167,135, 13, 27,230, 98,206, 80,166,223,250,237, 2,128, 11,254,221,222,253,178, 67,235,102,
+141,191, 94,182,229,240,195,132,180, 45,185,145,165, 53,176,170,138,243,194,133, 11, 57, 65, 65, 65, 99,166,126, 58,115,253,172,
+217, 51, 72,147,201,211, 16,117,238, 10,116, 90, 3, 12, 84, 0, 35, 8,194,231, 46,134,173,139, 10,103,105, 54,213, 9,152,209,
+ 49,149, 58,249, 91,250,253,124, 28,120, 77, 94,147,215,124, 49, 53, 45,112,165,138,207,170,154, 73,163,242,126,150,214,159, 25,
+ 86, 25, 44,119,119,247, 46,175,188,220, 14, 29, 95,249, 0, 6, 93, 46, 98,111,253,136,194,130, 52,184,215,145, 34,246, 97,126,
+123, 0,167,172, 61, 97, 74, 74,202, 67,181, 90,221,238,235,165,203,119,191,218,166,117, 83, 95,119,181,212,190, 94, 93, 40, 92,
+221,144,153,145,129, 75,225, 81,198, 85,135,143,223,212,150,148, 88, 53, 85, 14,199,113,148, 82, 10,177, 88, 12, 42, 16,192,111,
+226,167, 96, 24,166,210,104, 65, 2, 85, 80, 39, 48, 66, 17,140, 86,246, 25, 74, 78, 78, 78,116,119,119,127,115,226,196,137,199,
+ 54,110,220,200,116,237,218, 53, 96,239,222,189,143, 61,167, 29, 0,100,222,216, 27,237,214,252,245,224,229, 43, 86,237,108, 21,
+212,174,110,189,250,245,164, 29, 61,237, 96, 48,178, 72, 75,207,194,169,243,145,186,232,200,107, 9,156, 65, 63, 48, 61,178,250,
+ 42,238, 0, 96, 52, 26, 31,106, 52, 26,183,153, 51,103,194,100, 50,129,101, 89,152, 76, 38,100,102,102, 34, 34, 34, 2,129,237,
+218,163,201,187,239, 33, 59, 59, 27, 63,252,240, 3, 60, 60, 60,208,187,119,111, 20, 20, 20,224,244,233,211,213,222, 87,161, 16,
+166,233,159, 15, 17, 2,128, 72, 4,211,103, 33, 33, 39,155, 53,107,214,233,181,150,233,226, 15, 38,150,102,182,190,153, 63, 68,
+124,242,228,201, 29, 82,169,116,109, 92, 92, 92,141, 53,208,124,124,124, 36, 37, 37, 37, 1,148, 82, 97,126,126,254, 82,157, 78,
+ 55, 98,202,148, 41,234, 5, 11, 22,160, 69,139, 22,200,204,204,132,163,163, 35,212,106, 53, 10, 11, 11, 17, 23, 23,199, 26, 12,
+134, 53, 44,203,206, 78, 75, 75,203,168, 73,251,202,149, 43,247, 91,181,106,213, 62, 45,117,245,238, 15,198,246,240, 53, 26,131,
+ 36, 42,187,206,160,212,132,220,156, 4, 16,122,221,176,231,215, 99, 49,185,185,130, 55,194,194,194,162,107,210, 50,195, 48,204,
+216,223,127,255, 29,230,169,114,146,147,147, 99, 25,166,116,144, 92, 85, 25, 44,107, 88,188, 35,177, 4,192,207,223,254,175,253,
+228,188,140,235,141,156, 69,247,227,218,249,115,203, 23,239, 72, 44,249,230,125,135,185, 73, 25, 39,163,146, 11, 15,175,221,180,
+123,151, 96,248,235,111,178,106,101,244, 52,103, 79,236,232,246, 90,205,186,148, 82,218,178,101, 75, 47,134,201,174,159,158,117,
+ 55,108,212,232,247, 7,217,137,181, 7, 90,184,103, 54, 52,185,249,201, 34, 35, 35,227,203,118,179,126,168, 39,128,228,228,228,
+ 40,141, 70,211,101,209,162, 69,135, 81, 41, 53,158,158,153,125,188,125,200, 4,154,155,155,119, 53, 61,242,183, 26,171,184, 3,
+ 64, 88, 88,216,143, 65, 65, 65,120,103,216,168,239, 71,191, 59, 70,224, 63,233, 19, 36,158, 56, 6,152,140, 72, 57,115, 10, 54,
+182, 44,246,101,198,179,197, 2,102, 76, 88, 88, 24, 95,197,157,135,135,231, 95, 3,177,246,127,175,143,183,199, 97,239,250,238,
+ 61,188,235,107, 0, 0,177,247,147, 17,123, 63,233, 72, 76,108, 98, 21,229, 16,203,196,107,112,184, 21, 39,123, 38,101,165, 24,
+168, 21,147, 61, 87,214,244,247,247,143, 96, 24, 70, 99,213, 69,148,193,178,108,226,173, 91,183,130,172,137, 83,163,209, 12,246,
+244,244,156,159,156,156,188, 59, 33, 33,225,127,214,158,163,198,107, 47,155,236,153, 17,136, 67, 40,165, 45, 0, 16,194, 48, 22,
+ 39,123,174,168,233,238,238,222, 92, 46,151,175, 21, 10,133, 94, 40, 75,169,154,111,153,193, 96, 16,228,229,229,201,244,122,189,
+ 0, 0, 17,139,197, 38,165, 82, 89, 34, 18,137, 76, 44,203, 62, 52, 26,141,239, 39, 37, 37,221,176, 20,167, 25, 63, 63, 63, 69,
+ 72,208,237, 66,243, 20, 58,211, 63, 31,130,208, 13,180,218, 38,229,138,154,247,238,221,107,228,224,224,240, 22, 33,100, 0,165,
+180,113, 65, 65,129,238,171,175,190,186,122,234,212,169,124, 47, 47,175,158,157, 59,119, 38,215,175, 95, 71,124,124, 60, 45, 44,
+ 44,220,201, 48,204,231,137,137,137,177,181,186,159,132, 48, 29, 58, 4,188,109,171, 68, 31,142,162, 37, 64, 9, 33,228, 70, 97,
+ 33, 57,160, 86,215,223,178, 99,199,142, 42, 93,181, 53,215, 30, 24, 24,184,191,176,176,176,119,116,116,213,254,140, 16, 2, 74,
+255,188, 23, 53,105,126,251,121,243,207,219, 7,119,122,243,220,169, 51,123, 62,249,250,230,156,138,219, 38,188,238, 56,106,200,
+248, 15, 23,108,253,110,217, 39, 43,247,100, 63, 50, 39, 95,117,154,129,129,129, 13, 0,188, 77, 41,109, 70, 8,241,229, 56,200,
+ 8,161,217,132,144, 72,142,227,174,113, 28,247,251,245,235,215,171, 28,249,242,119,127,163,173, 56,217, 51, 97, 89,123,150, 16,
+171, 38,123,254,167,124,243,230, 53,121, 77, 94,147,167, 50, 86, 87,224, 54, 27, 41, 95, 95, 95,122,239,222,189, 71, 30, 42,143,
+ 67,153,129,218,134, 26,170,180, 91,195,205,155, 55, 91, 61,201,241,150, 72, 78, 78,254, 25,192,207, 79, 83,179,204, 64,253, 88,
+246,122, 44,202, 12, 82, 91,139, 59, 62, 5, 34, 35, 35,139,190, 28, 77,202, 51, 91, 66, 33,170, 52,128, 85,209,163, 71,143, 7,
+ 6,131,225, 40,128, 68, 0,246, 0,178,141, 70,227,161,140,140,140,180, 58,117,234, 4, 61,120,240,224, 75, 0,224, 56,110, 78,
+106,106,234, 99,213,145, 40,235, 3,183,181,236,245, 84, 9, 15, 15,239,163,209,104, 34,156,156,156,124, 74, 74, 74, 36, 37, 37,
+ 37,162,138,191,251,114,185,188,198, 44, 91, 69,236, 84,216, 36, 32, 89, 78, 14, 42,242,151, 76,141,179, 59,118,105,139,110, 54,
+114,118,199,174, 90,196, 22, 23, 16, 16,176,153, 97,152,250, 28,199,185, 1, 80, 81,138, 76, 74,105, 38,203,178,137, 55,110,220,
+168,245,176,226,103, 69,153,129,122,234,163,126,120,120,120,120, 94, 84,106, 61,197, 73,116,116,244, 19, 25, 43,158,127, 38,115,
+214, 81,209,227, 28, 23, 31, 31,175, 3,112,190,236,245, 8,101,134,170,239, 19,134,246,204, 73, 78, 78,126, 42, 38,190,172, 79,
+214,255,218,188,252,215,109,101,165, 25, 62,121,201, 66,179, 96,101,174, 94,189,250, 16,128,197,166,116, 30, 30, 30, 30,158,191,
+151,218,205, 27,195,195,195,195,195,195,195,195,195, 99, 17, 2,160,202, 18,215,181,105, 91, 37,196,226, 20, 36,181,214,231, 53,
+121, 77, 94,147,215,228, 53,121, 77, 94,243,223,167,105, 73,251,223,210,183,203,234, 78,238,143, 37,254, 15,233, 88,199,107,242,
+154,188, 38,175,201,107,242,154,188,230,243,213,252,183,193, 55, 17,242,240,240,240,240,240,240,240, 60,101,120,131,197,195,195,
+195,195,195,195,195,243,148,225, 13, 22, 15, 15, 15, 15, 15, 15, 15,207, 83,134, 55, 88, 60, 60, 60, 60, 60, 60, 60, 60, 79, 25,
+222, 96,241,240,240,240,240,240,240,240, 60,101,158,233, 40, 66, 30, 30, 30, 30, 30, 30, 30,158,255, 34,124, 6,139,135,135,135,
+135,135,135,135,231, 41,195, 0, 0, 33,132, 86,124,231,225,225,225,225,225,225,225,249, 59,249,183,121, 17, 62,131,197,195,195,
+195,195,195,195,195,243,148,225, 13, 22, 15, 15, 15, 15, 15, 15, 15,207, 83,198,108,176,186,150,165,228,186, 62,207, 96,120,120,
+120,120,120,120,120,254,179,252,171,188, 72,249, 40, 66, 66, 8,165,148,146,231, 28, 15, 15, 15, 15, 15, 15, 15,207,127,148,127,
+147, 23,225,203, 52,240,240,240,240,240,240,240,240, 60,101,158,105, 31, 44, 66,136, 63,175,201,107,242,154,188, 38,175,201,107,
+242,154,188,230,127, 13,190,147, 59, 15, 15, 15, 15, 15, 15, 15,207, 83,134, 55, 88, 60, 60, 60, 60, 60, 60, 60, 60, 79, 25,222,
+ 96,241,240,240,240,240,240,240,240, 60,101,120,131,197,195,195,195,195,195,195,195,243,148,225, 13, 22, 15, 15, 15, 15, 15, 15,
+ 15,207, 83,134, 0,168,114, 36, 0,165,244,166,213, 34,143, 49,154,192,146, 62,175,201,107,242,154,188, 38,175,201,107,242,154,
+255, 62, 77, 75,218,181,241, 31, 47, 50,207,180, 14, 22, 33,196,255,105,223, 40, 94,147,215,228, 53,121, 77, 94,147,215,228, 53,
+255,125,154,255, 54,248, 38, 66, 30, 30, 30, 30, 30, 30, 30,158,167, 12,111,176, 30, 3, 66,200, 59,132,144, 67,132,144,155,132,
+144,195,132,144,119,158, 64, 75, 78, 8,153, 86, 65,239, 32, 33,228, 19, 66,136,244,105,198,204,243,116, 33,132, 8,158,119, 12,
+ 60, 60, 21,209,104, 52,141,252,252,252,194, 53, 26, 77,163,231, 29, 11, 15, 15, 15, 32,172,110,131,143,143,207,121,134, 97, 26,
+ 48, 76,169, 7, 35,228,207,169,129,204,203,149,223, 41,165,113,145,145,145, 29,170,211,108,208,160, 65,185, 38,195, 48, 32,132,
+128, 97, 24, 24,141, 70, 91,129, 64, 80, 80,149, 38,203,178,137,119,239,222, 13,122,130,107,124,170, 16, 66, 54, 59, 56, 56, 24,
+ 87,173, 90,245, 93,171, 86,173, 26,102,103,103, 23,141, 25, 51,230, 85, 66, 72,119, 74,233,176, 90,106,249, 19, 66,126,106,221,
+186,245,238, 9, 19, 38,236,240,243,243,179, 45, 42, 42,146,110,223,190,189,206,154, 53,107,206, 16, 66, 70, 81, 74, 35,159,213,
+181,240,212, 30,181, 90,221,138, 16,178,210,215,215, 55, 72,163,209, 92, 1, 48, 62, 57, 57,249,218,243,142,235,191, 4, 33,228,
+ 61,137, 68, 91,165,206,121, 0, 0, 32, 0, 73, 68, 65, 84,210,211,215,215,183,141, 78,167,203,137,139,139,187,204,178,236, 87,
+148,210,212,167,164,111, 7,224, 43,169, 84,218,214,199,199,199, 51, 58, 58, 58,193, 96, 48, 92, 2, 48,155, 82,154,247, 52,206,
+241,180,209,104, 52,141,218,182,109,123,118,222,188,121, 78,211,167, 79, 63,171,209,104, 58, 37, 39, 39, 71, 61,239,184,120, 94,
+124,188,188,188,236,139,138,138,214, 51, 12,211, 74, 38,147,213,177,181,181,133, 82,169, 76,149, 74,165, 87,109,108,108,222,221,
+191,127,127,238,243,142,241,159, 74,181, 6, 75, 32, 16,120, 92,190,124,217,213,214,214, 22, 44,203,130,227, 56,112, 28, 7, 74,
+105,249,187, 25, 74, 41, 88,150, 69,183,110,221, 12, 53,158, 76, 40,244, 12, 15, 15,119, 85, 42,149,229,159, 25, 12, 6,180,104,
+209,130,139,136,136,112,149,201,100,143,236,175,215,235, 17, 24, 24,248,194, 76,150, 72, 8, 25,234,228,228,164,127,240,224, 97,
+251, 18,157,161,195,184,169,115,190,122,235,181, 96,187, 11, 23, 46, 48,125,251,246, 21, 17, 66,222,161,148,254,100,165,150,156,
+ 16,242,195, 23, 95,124, 49, 95, 40,182,113,221,121,224,188,112,197,218,173, 9,254, 77,235,147,201, 19,199,217, 76,154, 52,233,
+114,147, 38, 77,126, 36,132,116,166,148,234,158,245,181,241, 88,134, 16, 34,244,244,244,252, 45, 52, 52,212, 61, 53, 37, 5,139,
+151, 44,105, 7, 96, 21,128,118,207, 59,182,255, 10,132,144,105,179,102,205, 10, 29, 50,100, 8, 76, 38, 19,180, 90,173, 38, 38,
+ 38,166,217, 23, 95,124,241, 58, 33,164, 13,165, 52,246, 9,245, 93,124,125,125,239, 76,158, 60,217,177, 77,155, 54, 96, 24, 6,
+185,185,185,154,179,103,207,182,251,225,135, 31,222, 33,132, 52,161,148,102, 60,129, 62,227,228,228, 52, 9, 64, 55,142,227,164,
+ 0, 46,229,228,228,204,165,148,214,248,191,211, 18, 14, 14, 14, 91,190,253,246, 91, 39,169, 84,138, 13, 27, 54, 56, 13, 26, 52,
+232,140, 70,163,233,204,155, 44,158,154,112,118,118,126,175,160,160,224, 59, 27, 27, 27,177,189,189, 61,228,114, 57,196, 98, 49,
+ 36, 18,137,151,131,131,131,151, 82,169,236, 61,120,240,224,241, 63,255,252,243,250,231, 29,235, 63,145,106, 13, 22,195, 48,144,
+203,229,216,190,125, 59, 4, 2, 1,196, 98, 49, 68, 34, 17, 68, 34,209, 35,203,230,117, 79, 79, 79,139, 39, 51,103,165,246,238,
+221, 11, 59, 59, 59,168, 84, 42, 52,109,218, 20,132, 16, 72,165, 82, 28, 61,122,244, 17,221,160,160,160, 71, 50,103,127, 7, 3,
+187, 19, 10, 0, 59,150, 54, 41, 93,159,124, 7,230,245, 62, 93,148,232, 59,100,222,155,197, 58, 99, 23, 74,137, 54, 53,199,152,
+ 61,123,225,119,145, 1,205,154,146, 95,126,249, 37,208,217,217,121, 48, 0,171, 12, 22,128, 15,219,180,105,179,215, 4,137,219,
+168, 17, 35, 71,140,100,136,233,141,145, 31,205, 58, 27, 17,147,179,222,175,213,214,140,140,196,177, 43, 86,172,136, 26, 55,110,
+220, 36, 0, 11,172,141,191,117,235,214, 15, 57,142,243, 4, 0,129, 64,144, 41,151,203,213, 39, 79,158, 52,213,226, 22, 60, 19,
+ 8, 33, 26, 0, 11, 1, 24, 1,124, 67, 41,189, 83, 97, 91, 35,177, 88,188,192, 96, 48,100, 3,152, 65, 41, 77,120, 94,113,214,
+132,187,187,123,147, 97,195,134, 57,103,101,100, 96,241,146, 37,230,143,131, 8, 33, 2, 74, 41,251,119,198, 18, 24, 24,216, 64,
+ 38,147, 45, 4,208, 74,167,211,185, 3,128, 92, 46, 79,162,148,238,209,106,181,159,135,135,135,107, 31, 71,151, 16,226, 9,160,
+ 25, 74, 71, 24, 87, 5, 93,176, 96, 65,212,212,169, 83,227,254,110, 77, 66, 72, 61, 55, 55,183,121, 3, 7, 14,196,254,253,251,
+113,224,192, 1,163, 76, 38, 19,142, 24, 49,130,140, 31, 63,222, 97,242,228,201,189, 1, 44,179, 54,174,106,232, 61,107,214, 44,
+199,166, 77,155, 98,231,206,157,184,118,237,154,182, 81,163, 70,242,224,224, 96, 8, 4, 2,199,207, 63,255,188, 23,128,141,181,
+ 17, 44,107,238,159, 4,160,155, 64, 32,232, 60, 98,196, 8,211,196,137, 19, 69, 12,195, 24,151, 46, 93,234,178,126,253,250,183,
+156,157,157, 91,101,102,102, 22, 62,110,208, 57, 57, 57,115,231,204,153,179,105,229,202,149,182,177,177,177,152, 53,107,150,243,
+132, 9, 19, 78,105, 52,154, 96,222,100, 85,143, 64, 32, 48,112, 28, 39, 2, 32,163,148,234, 44,173, 63,231,112,159, 42, 78, 78,
+ 78, 31,228,228,228,172,210,104, 52,112,113,113, 41,127,214,114, 28,135,162,162, 34,104,181, 90, 52,104,208, 64,220,180,105,211,
+117, 19, 38, 76, 16,173, 92,185,114,245,115, 14,249, 31,135,144, 16, 18, 76, 41, 61,101,254,192,188, 78, 8, 1,199,113, 16,137,
+ 68, 16, 8, 4, 16, 10,133,229,198,167,226,178,249, 85,149, 17,170, 60,194,128, 97, 24, 82, 80, 80, 80,110,174,236,236,236,202,
+ 51, 97, 70,163,241, 47,154, 44,203,130, 97, 24, 90,147,230,211,160,162,230,142,165, 77,176, 49,108,234,219, 27,195, 74,215,123,
+ 13, 41,125,223, 24, 6, 28,189, 52,118,225,130,213, 29, 61, 63,156,187, 33, 52, 43, 43, 55,221,207,195,197, 52,120, 72,112, 93,
+ 73,102, 90,166, 83,253,250, 33, 0,210,107, 17,103,167,177, 99,199,238,220,121,226,158, 66, 42,149, 72, 4, 12, 4,141,188, 27,
+136,220, 85, 13, 29, 93, 94,109, 35,137,143,141, 61,243,206, 59,239,140, 29, 55,110,156, 19,202, 12,150, 53,215, 78, 41, 85, 31,
+ 57,114, 4, 66,161, 16,221,187,119,119, 64,169,137,174,214, 96, 61,235,251, 89,129, 47,210,210,210,222, 46, 41, 41, 65, 80, 80,
+208,107,132,144,110,148,210,171,132,144,230,253,250,245, 59,179, 99,199, 14,219,136,136, 8,180,107,215, 78, 14, 96,208,115,140,
+243, 47,104, 52,154, 35, 0, 94, 17, 8, 4,208,151,148,232, 23, 46, 90, 84,113,115, 88, 69,115,245,119,196, 25, 16, 16,208,196,
+198,198,230,252,162, 69,139, 84,126,126,126, 68, 36, 18,193,100, 50, 33, 58, 58,218,115,243,230,205,239, 95,185,114,165, 87, 96,
+ 96,160, 95,120,120,184,209, 90,205, 10, 52, 59,115,230, 76,145,183,183,119,149,134,177,184,184, 88,224,237,237,221, 21,192, 95,
+204,208,223,160,153,152,150,150,214,255,149, 87, 94, 25,155,154,154,122,199,100, 50,125, 10,192,223,217,217, 57,226,205, 55,223,
+132, 92, 46,239, 6, 43, 12, 86, 77, 63, 35, 87, 87,215,126, 29, 58,116,192,202,149, 43,241,205, 55,223,116,167,148, 30, 35,132,
+188,156,159,159,127,244,181,215, 94,131,189,189,125,127, 84, 97,176,170,211, 36,132,248, 73,165,210,141, 63,255,252,179,210,219,
+219,219, 91, 44, 22, 51,222,222,222,200,206,206, 70, 73, 73,137,116,238,220,185,205,101, 50,217,181,101,203,150,109, 4,240,134,
+181,113, 86, 68,163,209, 52,106,211,166,205,186, 41, 83,166,216,238,219,183, 15,190,190,190,200,207,207,199,168, 81,163, 92,151,
+ 47, 95,126, 82,163,209,116, 53,155,172,191,251,239,136, 16,146, 7, 64, 5,192,190, 54,205,171, 53,220,207, 60, 0,229,253, 83,
+ 69, 34, 17,164, 82, 41,100, 50, 25,100, 50, 25,226,226,226,118, 9, 4,130,145, 40,253, 34,103, 81,147,252,249,224,106, 73, 8,
+185, 44, 16, 8,106, 92,167,148,114,214,196,249, 36, 88, 81, 54,193,131, 16,178, 20, 64, 55,148,246,163, 62,229,234,234,250, 97,
+106,106,234, 3,107, 53, 53, 26,141, 83, 97, 97,225, 50,141, 70, 3, 87, 87, 87, 0,128, 64, 32, 64, 80, 80, 16, 74, 74, 74,112,
+235,214, 45,112, 28,135,152,152, 24,168, 84, 42, 52,111,222,124,217,172, 89,179,118,206,152, 49, 35,203,218, 56,107, 75,117, 94,
+228,105,158,227,239, 70, 8,224, 36, 74,127,207,204, 23,115, 18,101,223, 52, 89,150, 45, 55, 88,149,205, 79,101,195, 69, 8, 1,
+165,180,198,116, 19, 33,132,209,235,245,229,230, 74,165, 82,149,155, 51,147,201, 84,165,193,122, 92, 28, 28, 28, 14,231,230,230,
+ 46,161,148, 30,121,156,227, 71,140, 24,241,151,254, 28,211,166, 77, 75,200,200,200, 96,251,117,106, 36,253,233,167,253, 89,239,
+132,116,173,227,231,227,209, 88,225,228,218,178,184,184,248, 10, 0, 81, 45, 78,225,238,231,231,103,187,250,231, 83,233, 67, 38,
+ 45,156,237,225,166,100, 91,251,186,169,124, 28, 21, 18, 39,153,208,100, 79, 77,185, 54, 54, 54,205, 0,100, 89, 84,170,132,157,
+157, 29,246,238,221, 91,219,195,158, 53, 14, 90,173, 22, 57, 57, 57, 88,179,102,141,106,236,216,177, 39, 8, 33, 31,246,235,215,
+111,229,206,157, 59, 21,185,185,185, 48, 24, 12, 0,240, 88,153,151,103,204, 28, 7, 7,135, 46,221,186,117,147,108,251,229, 23,
+ 9,165,180, 8, 0, 5, 80, 72, 41,157,240,119, 7, 35,147,201, 62,158, 59,119,174,202,207,207,143,100,102,102,130, 82, 10,134,
+ 97,224,236,236,140,169, 83,167,202, 62,255,252,115,247,168,168,168,207, 0,204,122, 12,121, 82,157, 17, 2, 0, 27, 27, 27, 22,
+181, 31, 28, 83,165,166,201,100, 34, 29, 59,118,156,154,153,153,217, 92,171,213,126,109, 73,132, 82,106, 2,176,183,236, 85, 42,
+ 76,200,181, 59,119,238,104,133, 66,161,188,126,253,250,109,107, 25,215, 95,104,212,168, 81,123,145, 72,132, 75,151, 46,233, 0,
+156, 42,251,248,212,245,235,215,117,111,188,241,134,212,211,211,179,189,181, 90,132, 16,169, 84, 42,221,120,239,222,189,198,106,
+181, 90,126,241,226, 69,180,104,209, 2,153,153,153, 72, 77, 77, 69, 97, 97, 33, 82, 83, 83,241,238,187,239,186, 46, 94,188, 88,
+109,141,166, 70,163,105,228,227,227,243,135,179,179,179,156, 82, 10, 74, 41,250,244,233, 35, 90,176, 96,129,109, 98, 98, 34, 76,
+ 38, 19,166, 79,159,142,144,144, 16, 56, 56, 56, 96,228,200,145,110,235,214,173,219, 2, 32,176,246,119,227,169,146, 43, 18,137,
+160, 80, 40,236,115,115,115,159,164, 31,155, 20,128, 4, 0,132, 66, 97,185,185,146, 74,165,144, 74,255,253,227,130, 8, 33,238,
+132,144, 72,145, 72, 36, 85, 40, 20, 98,134, 97,160, 80, 40, 94,245,240,240,184,245,206, 59,239,248,255,244,211, 79,241,214,232,
+148,148,148,252, 36,151,203, 69, 46, 46, 46, 0,128, 30, 61,122, 96,196,136, 17,200,200,200,224,146,147,147,209,184,113, 99,230,
+212,169, 83, 72, 75, 75,195,181,107,215,208,186,117,107,145,163,163,227, 79, 0,122, 61,195,203,171,214,139,252, 83,169,216, 68,
+248,151,139,225, 56,238, 17,115, 85, 85,230,170, 98, 6,203, 82,115, 30, 33, 4, 44,203,162, 78,157, 58,176,177,177,129,141,141,
+ 77,249, 54,179,153,171,248,162,148, 62,118, 19, 97,195,134, 13, 95,178,177,177,233, 76, 8,121,141, 82,122,212,218,227, 6, 78,
+190, 83,158,181,170, 76,203,150, 45,207, 79,159, 62,189,231,241,227,199,115,218,183,104,192, 73,147, 19,178,108, 28,156, 91, 16,
+ 23,215,238,227, 70,143,185, 0,224,231, 90,132,152, 92, 82, 82, 34,173, 87,135,209, 38,231,229,235, 27,168,236,236, 27,216, 41,
+109,234, 57,219, 57, 57,200, 36,140,194,205, 85, 99, 52, 26,115, 1, 36, 91, 18,170,216, 44, 40,147,201,244,132, 16,161,189,189,
+ 61,236,236,236, 12, 57, 57, 57, 37,129,129,129,144, 72, 36,153, 98,177,216,234,230,194, 54,109,218,164,177, 44,235, 90,211, 62,
+ 98,177, 56,253,194,133, 11,110, 86, 93, 45,240,121,203,150, 45,131, 87,173, 90,229,226,235,235,139, 53,107,214,168,118,238,220,
+185,113,203,150, 45,200,205,205,197,253,251,247, 49,106,212,168,124,148, 54, 35,190, 80, 56, 58, 58,158, 29, 48, 96, 0,214,175,
+ 95, 79,203,190, 68, 40, 8, 33, 45,236,236,236,238, 70, 70, 70, 62, 81,223,153,199,129, 97,152, 87, 27, 55,110, 76,242,242,242,
+ 64, 41,133, 64, 32,120,228, 53,117,234, 84,249,187,239,190,251, 69,251,246,237,167,138, 68,162,124,147,201,180,173,176,176,240,
+235,155, 55,111,190, 80,157, 85, 59,119,238,252,191,132,132,132,144,186,117,235,254,254,184, 26,148, 82,218,186,117,107, 61,165,
+ 84, 46, 16, 8,106,243, 5,167, 74,204,163, 67, 89,150, 45, 41, 51,116,160,148,154, 2, 3, 3, 75, 80,250,112,175,205,232,209,
+ 73, 59,118,236,176, 85,171,213,114,173, 86,139,216,216, 88, 4, 6, 6,162,160,160, 0, 69, 69, 69, 40, 46, 46,134,193, 96, 64,
+ 94, 94,158, 61,203,178,122,107, 4, 29, 29, 29,183,108,222,188,217,195,195,195, 3, 70,163, 17, 70,163, 17, 69, 69, 69, 56,117,
+234, 20,116, 58, 29,140, 70, 35, 26, 55,110,140,249,243,231,151,140, 31, 63, 94,246,203, 47,191,164,107,181,218,161,181,190, 17,
+ 79, 25,129, 64, 0,169, 84, 10,145, 72,148,235,229,229, 5,134, 97,100,241,241,241,143,211,228,166, 2,144, 47, 20, 10, 37, 21,
+141,149, 76, 38,195,205,155, 55,183, 87,151,189,170, 14, 90,169, 16,164,165,245,231, 13, 33,100,169, 72, 36,146, 58, 57, 57,137,
+205,159, 25, 12, 6,177,131,131, 3,234,214,173,187, 18, 64,111, 43,117, 2,156,156,156, 64, 8,129, 88, 44,198,232,209,163,113,
+249,242,229, 61,137,137,137,239,164,167,167,163,176,176,240, 39,149, 74,245,122,122,122, 58, 88,150, 69,124,124, 60, 90,182,108,
+ 25,240,204, 46,236, 81,254,241,198,202,140, 16, 40, 77,197, 85,124, 47, 91, 6,165,212, 98,230,170,166, 38,194,202, 24, 12, 6,
+101, 72, 72, 8,103, 54, 99,230, 81,132, 0, 8,203,178, 16,139,197,143,104,150, 25,172,199,250, 5,151, 74,165,232,221,187,183,
+204,198,198,230,215, 50,147,117,252,113,116, 0, 96,239,206,173,110, 11,102, 76,159,225,168,169,239,243,217,103,159, 9,123,245,
+234,117,116,219,182,109,173,157, 59,189,212,243,244,177,237,110,107, 62,221,251,251,246,237,219, 11,172,237,224, 94,198,185, 61,
+123,246,168, 63,158, 56, 78, 28, 28, 28,188,107,120,243, 41, 66,181,132,179,117,148,138, 5, 54, 2, 33, 35,245,172,215,243,216,
+169,211, 41, 0, 78, 91, 18,162,148,170,143, 30, 61, 10,123,123,123, 0,144,232,245,122,216,219,219, 99,205,154, 53, 50,149, 74,
+ 5,149, 74,133, 14, 29, 58, 56,136,197,226, 26,155, 11, 43,194,178,172,235,201,147, 39,161, 84, 42, 81, 84, 84, 4,157, 78, 7,
+147,201, 4, 74,105,249, 55,199,174, 93,187,214,104,192, 42,197, 24, 75, 8,233, 50,110,220,184,211,171, 86,173,114,241,241,241,
+193,236,217,179,145,149,149,133,135, 15, 31, 98,232,208,161,249,113,113,113,221, 42,246,205,122, 17,104,222,188, 57, 61,119,238,
+ 28, 14, 30, 60,136,190,125,251,146,189,123,247, 26, 88,150, 21, 39, 37, 37,221,120, 94, 49,153, 76, 38, 91,137, 68, 2,163,209,
+ 8,161, 80, 88,222,132,111, 54, 88,238,238,238,248,227,143, 63,132,197,197,197,194,172,172, 44,155, 31,126,248, 97, 98, 88, 88,
+152, 26,192,224,231, 21, 51, 0,172, 94,189,186,238,232,209,163, 31, 10,133, 66,218,179,103,207, 97, 15, 30, 60,232,175, 86,171,
+143,157, 56,113, 98, 17,128, 90,151, 22,240,247,247, 15, 19, 8, 4, 30, 0,196,191,254,250,171,145,101, 89,113,243,230,205,211,
+204,153, 29,243,179,209,100, 50, 37, 70, 69, 69, 89, 28,137,236,239,239, 31, 38,147,201,196,223,127,255,189,177,164,164, 68,220,
+162, 69,139,180, 10, 58,226,223,126,251,205,104, 52, 26,197,141, 27, 55, 14,179,114,100,115,215,182,109,219,214,205,205,205,133,
+157,157, 29, 10, 11, 11, 17, 22, 22, 6, 63, 63, 63, 36, 39, 39,131, 97, 24,216,219,219, 99,245,234,213,197,132,144,108,107,174,
+ 57, 59, 59,123,232,228,201,147,207,108,223,190,221, 89, 32, 16,224,193,131, 7,200,206,206,134,189,189, 61, 54,111,222,140,122,
+245,234,225,232,209,163,217, 44,203,190,183,126,253,250, 47,180, 90,237,208,231,221, 7,139, 97,152,114, 35, 84,193, 16,149,180,
+107,215, 14,231,206,157,219, 90, 27, 83, 68, 41,213,155,155, 5, 43, 54, 13, 74,165, 82, 8, 4,130, 90, 55,121,176, 44, 43, 38,
+132, 4,224,207, 86,155, 26,215, 95, 0,130, 21, 10,133,184,242,135, 57, 57, 57,226,198,141, 27,119,182, 86, 68, 42,149, 58,201,
+229,242, 82,193,224, 96,164,167,167,179,222,222,222,111, 13, 26, 52,200, 8, 0,239,191,255,254, 91, 25, 25, 25, 37, 70,163, 81,
+ 32, 20, 10,145,145,145,129, 6, 13, 26, 56, 61,181,171,168,134,170,188,200, 63, 25, 33,165,148, 16, 66,104,197,119,243, 70,115,
+ 31,172,154, 50, 87,230,109,102,163, 84,211,201, 24,134,201, 13, 15, 15, 87, 40, 20,138,242,207,140, 70, 35, 2, 2, 2, 56,142,
+227, 72,229,115, 61, 73, 6, 75, 42,149,194,222,222, 30,131, 7, 15,182, 73, 74, 74,218, 8,192,195,154,227, 74,251, 96,253,185,
+190,119,231, 86,183,181,223,204, 94,185, 98,193, 92,167,152,131, 27,176,126,249,183,172, 66,161,140,104,217,178,101,151,188,188,
+ 60,157,189, 66,135,212, 44,236,164,148,110,177, 54, 54, 66, 8, 3, 96,251,133, 11, 23,174,246,232,209,227,194,253,251,247, 29,
+ 30,220,187,119, 86,165, 47, 44, 84,122,214, 55,137, 93,221,250,105, 13, 70,225,128, 1, 3,220, 0, 44,183, 66, 15, 28,199, 97,
+255,254,253,176,181,181,133, 74,165,130,189,189, 61,204,230,234,113,137,139,139, 67, 98, 98, 34, 20, 10, 5, 20, 10, 5,148, 74,
+ 37,148, 74, 37, 36, 18,201, 35,217, 71,107,161,148, 70, 17, 66, 62,220,189,123,247,182,208,208, 80,228,228,228,160,168,168, 8,
+ 51,102,204, 64,108,108,236,100, 74,233,213,199, 14,246, 25,208,162, 69, 11,122,225,194, 5,156, 61,123, 22, 69, 69, 69, 88,185,
+114, 37,212,106,245, 75, 0,190,124,158,113,113, 28, 39, 54,151, 58, 97, 24,230, 47, 25, 44,179,217,146,203,229,112,118,118,198,
+244,233,211,197,253,250,245, 11,121,158, 49, 47, 88,176,160,225,210,165, 75,127,216,180,105,211,193,161, 67,135,254,114,243,230,
+205,145,118,118,118, 55,142, 31, 63, 62, 87, 42,149,114,150, 21,254,138, 80, 40,244,184,122,245,106, 69,147, 47, 98, 89,214,134,
+101, 89,152, 76, 38, 24,141, 70, 20, 23, 23,163,123,247,238, 86,235, 93,190,124,217, 6, 0,190,252,242, 75, 17, 0, 27,142,227,
+ 80, 81, 79,171,213,138, 94,126,249,101,171,254,151, 0,208, 56, 56, 56,136, 30, 62,124, 8,147,201,132, 86,173, 90, 97,245,234,
+213, 24, 52,104, 16,154, 53,107,134,130,130, 2, 68, 70, 70, 98,227,198,141, 14, 98,177,248, 77,107, 4,147,147,147,163, 52, 26,
+ 77,231,183,222,122,235,252,182,109,219, 28,234,214,173,139,196,196, 68, 36, 39, 39,195,199,199, 7,203,151, 47, 47,162,148,118,
+ 44, 51, 85,191, 89, 25,231, 51,131, 97,152,114, 19, 84,213,235,113, 48,153, 76, 42,153, 76,150, 47,147,201, 36,102,163,117,229,
+202,149, 90,103,175,204, 84,254,191, 99,105,253,121, 98,254, 31,108, 52, 62,122,153, 10,133, 2,190,190,190, 86,235, 40, 20, 10,
+ 98,126,198, 26,141, 70,164,164,164,176, 55,111,222,100, 91,181,106, 5, 0, 80,171,213,236,197,139, 23, 89,157, 78, 39,176,181,
+181, 5, 0,216,219,219, 63, 83,147, 89,147, 23,249,167, 98,110, 34, 60, 93,233,189, 60,131,101, 54, 60, 53,117,114, 23, 10,133,
+214, 26, 44, 8, 4, 2, 28, 58,116, 8, 74,165, 18,182,182,182,104,210,164,116,180,158, 57, 91, 86, 57, 43,246,184, 6, 75, 34,
+145,192,206,206, 14, 71,142, 28, 41,185,118,237,218,232,199,209, 48,155,171,249, 95,207,114,202,186,125, 1,137,201, 41,200, 74,
+ 51,132,157,187, 25,127, 24,192, 97, 0,192,237,166,167,208,244,182,213,230,170,169,139, 77,203,118,190,117,126,235,246, 74, 79,
+247,254,195,199, 49,227,199,143,111, 63, 98,196,136,236, 97,195,134, 77,146,203,229,205, 76, 38, 83,206,209, 83,167,226, 7, 14,
+ 28,232,148,151,151, 55,130, 82,106,177, 79,146, 64, 32, 72,233,209,163,135, 39, 0,216,218,218,234,127,252,241, 71,137,189,189,
+ 61,134, 12, 25, 82,146,154,154, 42, 43,187, 31, 57,176, 50,123, 5, 0, 66,161, 48,253,189,247,222,171, 49, 67, 37,145, 72,210,
+107,218, 94, 25, 66, 72, 64, 72, 72,200,186,237,219,183, 35, 43, 43, 11, 69, 69, 69, 16,139,197, 88,184,112, 33, 30, 62,124,184,
+140, 16,114,243, 69,249,103,214,178,101, 75,122,233,210, 37,220,184,113, 3, 58,157, 14,163, 71,143,174,216,199,176,199,115, 13,
+ 14, 32, 73, 73, 73,216,188,121, 51, 88,150,197,208,161, 67, 81,175, 94,189,114,131,149,154,154,138, 31,127,252, 17, 44,203,226,
+189,247,222,131,151,151, 23,140, 70,163,172,107,215,174,194,231, 53,162,116,202,148, 41, 49,123,246,236, 57,152,144,144,208,235,
+155,111,190, 9, 38,132,112, 83,167, 78,157,175, 82,169,158,104,244,101, 78, 94, 1,238,222,123, 0,147,201, 84,229,203,197,217,
+177,214,122,209,177, 15, 97, 50,177,229, 26, 44,251,167,158,147, 99,173,244,146,178,179,179,125, 5, 2,129,248,222,189,123,168,
+ 91,183, 46,218,180,105,131,121,243,230, 33, 35, 35, 3, 38,147, 9,174,174,174,156,209,104,140,208,235,245, 22, 51,213,102, 82,
+ 82, 82,138,179,178,178,138,222,123,239, 61,251,117,235,214, 17, 95, 95, 95,220,191,127, 31, 34,145, 8,182,182,182,197,119,238,
+220,121, 97, 70, 13, 86,206, 92,153, 95,101,153, 43, 6,192,239, 0,106,101,176, 41,165,122, 79, 79,207, 71,250, 95, 61, 78,246,
+234, 89,241, 44, 71, 38,250,250,250,158, 82,169, 84, 33,119,238,220,121, 36,139, 53,120,240, 96,131,143,143,207, 25,107,117, 84,
+ 42, 85,142, 68, 34,113, 42, 41, 41,193,133, 11, 23,208,164, 73, 19,113, 94, 94, 94, 40, 33,100, 26, 0,180,104,209, 34, 52, 45,
+ 45, 77,236,238,238, 14, 0,104,220,184, 49,242,242,242,114,172,169, 22,240,132,252,197,139,252,147, 17, 2, 0,165, 52,184,226,
+187,153,202, 77,132, 53,153, 44,115, 65,210,154, 32,132, 64,171,213,150,103, 68, 20, 10, 5, 56,142,123,164, 57,178,178,193,170,
+ 60,138,208, 90,164, 82, 41, 78,156, 56, 81,178,118,237,218, 1,148,210,195,214, 30, 87,177, 15,214,247,139,231, 46, 48,155,171,
+235,103,255,192,111,119,242, 50,167,206, 91,188,244,113,226, 1, 0, 63, 23, 69,139, 58,110,206, 39, 23, 47,156,175, 74,186,116,
+ 16,191,172, 93, 76,175, 95,190,220,250,131,203,151,223,252,224,131, 15, 28, 81,218,223, 42, 9,192, 89, 0,203,172, 49, 87, 0,
+112,241,226, 69, 47,243,114,155, 54,109,140, 42,149, 10, 74,165, 18, 25, 25, 25, 98,165, 82, 41, 59,121,242,100,173,251, 58, 92,
+186,116,201,218,190, 85, 86, 65, 8,105,212,183,111,223,211,187,118,237, 82,228,230,230, 34, 62, 62, 30,159,124,242, 9,190,251,
+238, 59,168, 84, 42,236,223,191,223, 54, 36, 36,228, 36, 33,164, 3,125,206,197, 85, 3, 2, 2,232,149, 43, 87, 16, 31, 31, 15,
+147,201,132,254,253,251, 91, 28,192,241,119,194,113, 28,157, 60,121, 50,214,173, 91, 7,134, 97, 48,124,248,112,228,231,231,151,
+111,119,116,116,172,106,155, 0, 22, 70,148, 62, 75,132, 66, 33, 61,117,234,212, 55,193,193,193, 72, 72, 72,232, 21, 24, 24,184,
+ 98,228,200,145, 73, 79,170,235, 96,103,139,150,126,222,208,233,116,208,233,116,208,104, 52, 40, 40, 40, 64, 76, 76, 12,116, 58,
+ 29,220, 92,237,107,173, 23,208,172, 33,244,122, 61,116, 58, 29, 92, 93, 93, 81, 84, 84,132,251,247,239, 67,167,211,193,197,197,
+161, 54,114,167,206,158, 61, 91,183,123,247,238,141, 35, 35, 35,113,250,244,105,232,245,122, 4, 4, 4, 32, 58, 58, 26,237,219,
+183, 71,126,126,254,165, 43, 87,174, 88, 61, 34,133, 16,226,249,234,171,175,158,216,186,117,171,211,150, 45, 91,244,111,188,241,
+134,100,246,236,217, 68,165, 82, 33, 45, 45,237,145,250,132, 47, 2,149,141, 85, 88, 88,216,118,177, 88, 76, 1, 60, 86,182,201,
+ 76, 66, 66,130,180,121,243,230, 58,169, 84, 42, 57,127,254,124,173,154, 25,159, 53, 79, 58, 50,177, 38, 26, 54,108, 56,217,195,
+195,163,123,171, 86,173, 16, 25, 25, 41,150, 74,165, 24, 54,108,152,161,119,239,222, 6,161, 80,104,245,128, 27,153, 76,118,219,
+214,214,182,139, 78,167,131, 94,175,199,209,163, 71,225,232,232,248, 73, 72, 72,200,135, 41, 41, 41, 72, 78, 78,150, 72,165,210,
+242, 44,121,183,110,221,144,157,157,125,219, 90,253,199,165, 58, 47,242, 79,165,218, 58, 88,149, 51, 88, 53, 53, 15, 90,107,176,
+ 24,134,129, 94,175,135,141,141, 77,185,193,170, 88, 41,254,113, 52,171,227,234,213,171,231, 99, 99, 99, 23, 81, 74, 15, 60,206,
+241, 59,182,108, 82,219,113,197,158,201,151, 14,224,238,245, 48,236,137,204,205,156, 58,111,241,196,215, 6, 12, 73,171,184,223,
+192,201,119,176,195,138, 46,244,141, 92, 21,254,238,110, 78, 39, 23, 47,156,175,202,186,125, 1,247,110,132,225,192,165,196,112,
+ 29,165,209, 0, 44,142,160,170, 13,230,182,245, 23, 9,169, 84, 58,217, 60, 90, 48, 54, 54, 22, 67,135, 14,205,141,143,143, 31,
+215,191,127,255,239, 14, 31, 62,236,224,224,224,128, 35, 71,142,216,122,122,122,134, 2,120,110,205, 89,132, 16,202,178, 44,178,
+178, 74, 7,111,118,236,216,241,133, 50, 87, 0, 16, 22, 22, 38,238,219,183,239, 49, 0, 47,221,190,125, 27, 28,199,157, 15, 15,
+ 15,239,104,222, 94,211, 54, 43,224, 10, 10, 10, 68,182,182,182, 85, 62,172,196, 98,177, 24,181,204, 56, 84,212, 60,119,238,220,
+252, 69,139, 22,237,249,232,163,143,238, 61,161, 38,128,191,102,176, 66, 66, 66, 80,162, 51, 34, 49, 45, 15, 38,147, 9,197,250,
+ 52,203, 34,149,244, 42,102,176, 66, 66, 66,160, 45,209,227, 97, 74, 54, 76, 38, 19, 10, 75,106,149, 40, 89, 62,120,240,224, 1,
+231,206,157,203,110,220,184,177,227,149, 43, 87,144,158,158, 14,163,209,136,151, 94,122, 9, 82,169,244, 65,104,104,168, 24, 86,
+116, 3, 0, 0, 66,136,205, 43,175,188,114,120,219,182,109,117,206,159, 63, 15,189, 94,207,133,133,133,221, 31, 51,102,140,234,
+221,119,223,117, 42,189,141, 47, 22,102, 99,117,251,246,109,179,177, 26,142,167,100,132,204, 25,172,255, 18, 91,182,108, 73,218,
+176, 97,131,159, 90,173, 94, 58,108,216,176,110, 26,141,134,145, 72, 36,167,132, 66,225,135, 0, 30, 88,171, 35,149, 74, 71, 58,
+ 56, 56,196, 8, 4, 2, 65, 82, 82, 18,238,221,187, 7,129, 64, 0, 74,169, 68,171,213,194,205,205, 13, 2, 65,233,120,142,193,
+131, 7,195,195,195,131,141,142,142, 30,249,140, 46,235, 95, 75,181, 6,203,204,156, 57,115,176,118,237, 90,188,255,254,251, 53,
+238, 87, 86, 22,224,145, 7, 17,169, 52,219,182,121, 20,225,204,153, 51, 31, 57,206,220, 20, 56,110,220,184, 71, 52,127,253,245,
+215,191, 52, 17, 86,214,172,142,152,152,152, 96, 75,251, 84,165,105,238,131, 53,112,232,240,148,149,243,103,220,216,184,247, 88,
+243, 20, 45, 77,153, 58,111,241,148,202,230,202, 90,205,166,117,148, 77, 61, 92,157, 78, 45, 90, 56,223,206,156, 13,219, 22,145,
+154, 7, 19,173,249,166,214,160, 89, 29, 34,145, 40,165, 67,135, 14,158,128,117,205,130,214,222,207,218, 80,149,166, 78,167,195,
+197,139, 23, 1, 0,163, 70,141,202,141,143,143,239, 66, 41,189, 69, 8,185,221,179,103,207, 83,135, 14, 29,114, 40,251,246, 93,
+101, 89,138,191, 43, 78,160,116, 68,171, 80, 40,132,175,175,111,173,205,213,223, 21,103, 74, 74,202,251, 99,199,142, 93,171,211,
+233,132, 69, 69, 69,239, 91,187,205, 82,156, 59,118,236,184,231,235,235, 27,140,234, 75, 49,112, 0, 46, 60,137,230,210,165, 75,
+ 1,160,241,147,104,154,169,156,193,218,190,125, 59, 88,150,133,135,155, 29,116, 58, 29, 42,246,247,180, 70,179,114, 6,235,151,
+ 95,126, 1,199,113,240, 82, 59, 66,167,211, 85,219,247,176, 42, 77, 74,169,142, 16, 50,178, 67,135, 14, 63,205,157, 59, 55,174,
+ 73,147, 38,158, 29, 58,116,112,200,206,206, 78,191,122,245,106,252,218,181,107,149, 38,147,105,100,117,205, 68,149, 53,157,156,
+156, 22,111,218,180,201,227,246,237,219, 72, 74, 74,194,146, 37, 75, 30,100,100,100,244, 22, 10,133,210, 21, 43, 86,156,236,211,
+167,143,155,201,100,170, 49, 91,253,119,254, 29, 1, 64,114,114,242, 94,148,150,175,169,149,177,178, 38,206,203,151, 47,255, 82,
+166,125,192, 26,237,191,235,218,159,116,100,162,165, 56, 71,142, 28,153,136, 74, 53,211,106, 27,231,145, 35, 71,226,223,126,251,
+237, 57,254,254,254, 51,149, 74, 37,162,162,162,202,203, 34,153,191,160, 19, 66, 48,112,224, 64,124,240,193, 7, 56,114,228,200,
+156, 1, 3, 6,196,215,164,201,243, 87,170, 53, 88, 44,203, 38,196,199,199,171, 55,109,218, 36, 32,132, 96,243,230,205,168,220,
+177,214,252, 14, 0, 23, 47, 94, 52, 81, 74, 99,106, 58, 25,203,178, 9, 97, 97, 97,110, 27, 54,108, 16,201,229,114, 72,165, 82,
+ 36, 39, 39,131,227, 56, 46, 45, 45,141,217,186,117,235, 35,157,117, 47, 92,184, 96, 50, 24, 12, 15,159,242, 53, 91,205,153,200,
+ 7, 31, 30,218,191,199,185,125,187, 46,185, 42, 71,199, 42,141,138,185,226,123, 77, 40,108, 85,243, 23, 45,156,111,111, 54, 87,
+219, 35, 82,115, 75,116,108,183,219, 25,197,215,159,118,204,231,206,157,243,178,188,215,115, 97, 70,112,112, 48, 7,192, 25,192,
+ 23,180, 52,115,135, 50,147,213,206,215,215,247, 35, 0,114, 0, 51,158, 87,128,132, 16,202,113, 92,121,230,244, 69,203, 92, 85,
+ 36, 60, 60, 60, 14,192,203,181,221,102,137, 1, 3, 6,196, 2,120,162,233,102,254, 14, 77, 51,217,185,249,136,185,159, 84, 54,
+149, 23, 11,246, 65,106,133,254, 83, 70,100,231,215,174,140, 92, 78, 94, 1, 98,238, 39,130,227,104,169, 30,155, 84,222,201,221,
+100, 50, 33, 51,183,118,101,218, 40,165,145,132,144,246,159,126,250,233, 36, 0,157, 0,120, 1,120,136,210,110, 0,203,173,237,
+131, 35, 18,137, 58, 45, 93,186,180, 55,195, 48,204,197,139, 23,117, 11, 23, 46, 76,200,200,200,232, 71, 41,125, 8, 0, 26,141,
+166,235,175,191,254,186,229, 69, 40,201, 80,137,225,255, 80,237,199,230,159, 50, 50,113,219,182,109,179,198,141, 27, 39,108,219,
+182,237,103,173, 91,183,102,238,223,191,143,244,244,244,242, 47,151,175,190,250, 42,234,214,173,203, 29, 56,112, 96,222,235,175,
+191,254, 56, 53,245,254,243, 84,107,176, 50, 51, 51, 95, 29, 62,124,248, 31, 12,195,212, 55,103,145,170,123, 7, 0,142,227,226,
+211,210,210,106, 44, 66,150,153,153,249,234,140, 25, 51,254, 16, 10,133,229,154, 44,203,234,178,178,178,198, 13, 28, 56,112,149,
+ 72, 36, 42,175, 20, 87, 54, 50,238, 65, 74, 74,202,223,218,161,184,114, 29,172,158,125, 94,207,124, 82, 77,133, 4,222, 9, 23,
+247,227,222,141,112,108,143, 72,205, 41,208,179, 93,163, 50,138,254, 83,206,159, 82,154, 14, 96, 92, 53,219,238, 1,168, 85, 54,
+239, 89,240,111, 26,189,242, 95,192,100, 50, 37,118,127,169,107,121, 73, 6,115, 98,160,242, 58,203,178,137,214,234,189,220, 45,
+184, 90, 29,243,178,181,122,102,202, 76,212, 2,212, 98,202,171,202, 8, 4,130,143,218,182,109, 43,248,232,163,143,210, 14, 30,
+ 60,120, 44, 39, 39,103, 10,165,180,216,188,189,108,212,224,243, 46, 38,202, 83,198, 63,101,100,226,170, 85,171,190,252,228,147,
+ 79, 54,106, 52,154,205,157, 58,117,106,236,227,227,163,178,181,181, 69,126,126,126, 65,118,118,246,221,253,251,247, 15, 29, 62,
+124,184,213,211, 98,241, 60, 74,181, 6, 43, 35, 35,163, 8,128,213, 85,139,173,193,130,102,221,167,121,174, 39, 97, 68,208,194,
+109,184,189,240,145,121, 8, 1, 84,191,110,161, 15, 86, 74,102,254, 7,115, 55,238,255, 86,103,162,156,193,196,141,138, 74, 47,
+122,174,157,184,121,170,135, 55, 87,255, 28,110,222,188,105, 77, 45,170,231,166,247, 52,209,235,245, 31,118,232,208, 97, 25,203,
+178,139,140, 70,227,217,231, 29, 15,207,191,135, 5, 11, 22,196,161,236,185, 60,112,224, 64, 1, 0,236,216,177,227,133, 25,149,
+ 89,129,214, 0, 92, 0,152, 39, 91,119, 1,160, 71,105,101,255, 12, 0, 87,158, 83, 92,213, 98,177, 15,214,127,141, 29, 71,255,
+124,192, 86, 54, 78,150,214,171,227,110,106,225, 41,240,223, 46,121,120,120, 30,147,178,166,192,126,207, 59, 14,158,127, 55, 47,
+168,177, 50,227, 66, 8,217, 71, 41, 13, 1, 0,243,114,197,207, 94, 52, 30,127,152, 30, 15, 15, 15, 15, 15, 15, 15, 15, 79,149,
+ 16, 0,254, 85,109,168,205,232, 0, 66, 72,149, 26, 53, 97, 73,159,215,228, 53,121, 77, 94,147,215,228, 53,121,205,127,159,166,
+ 37,237,106,142,239, 99, 33,131,181,191,182,113, 62,107,200,179, 44, 76,247,119, 15, 9,230, 53,121, 77, 94,147,215,228, 53,121,
+ 77, 94,243,159,169,105,129,127,156,193,226,251, 96,241,240,240,240,240,240,240,188,232,104,167, 77,155,246, 25, 33,100, 31, 0,
+ 76,155, 54,237,179,231, 29,144, 37,120,131,197,195,195,195, 83, 1,141, 70,211, 23,192, 44,148,118,161, 8, 77, 78, 78,254,229,
+ 57,135,196,195,243, 84,113,113,113, 81, 56, 57, 57, 29, 99, 24,166, 46,240,104,201,165,202,197,189, 1,128,227,184,148,236,236,
+236, 30,169,169,169,213,150, 45,122, 22,154,149, 56, 31, 26, 26, 90, 28, 26, 26,106,238,208,158,129,210, 86,184, 16,252, 57,178,
+240,133,162,214, 6,107, 90,143,250,157, 53,238,238, 91,115,179,178, 34,116,197, 5,239,206, 59,150,148,253, 56, 39, 38,132, 56,
+ 73, 36,146,183, 20, 10, 69,119, 74,169,183, 64, 32,184,147,151,151,119,212,104, 52,110,163,148, 22, 62,142, 38, 15,207,211, 36,
+ 32, 32,160,185, 68, 34,249,132, 16,210,206,100, 50,121,136, 68,162,100, 0,151,116, 58,221,194,136,136,136,136,231, 29, 31,207,
+211,129, 16,194,168,213,234,101,246,246,246,109,115,115,115,135, 2,248, 44, 42, 42,170, 5,195, 48,240,243,243,251, 76,163,209,
+196,216,218,218,174, 47, 40, 40, 56,159,146,146,242, 33,173,197,220,113, 60, 47, 46, 62, 62, 62, 97, 12,195,120, 84,156,174,205,
+ 76,117, 53, 31, 41,165,113,145,145,145, 29,170,211,244,240,240,240, 86,169, 84,171, 0,180,174,202, 84, 84,164,172,123,206,149,
+252,252,252,113,137,137,137, 85, 22,226,117,116,116,180,117,117,117,157, 69, 8, 25,200, 48,140,192,210, 53,113, 28,199, 82, 74,
+119,164,167,167,207,200,206,206, 46,168,110, 63, 39, 39,167,163,167, 79,159,110,237,236,236,108,177, 44,141,201,100, 66, 98, 98,
+162, 75, 72, 72,200,105, 0,213, 86,214,126, 22,154,149,208, 3,184,108,229,190, 47, 4,181, 54, 88,132,197,176,119, 71, 15,119,
+207, 77,136,114,223,180,237, 80,163,207, 95,173,219,245,235,195, 15, 82,107,163, 33,151,203,223,242,247,247, 95,190,124,249,114,
+167,250,245,235, 19,185, 92,142,148,148,148, 38,215,174, 93,123,125,230,204,153, 51, 68, 34,209, 72,163,209,248, 71,109, 99,123,
+ 36, 78, 66,236, 29,149,194, 79,178, 10,140,211,159, 68,135,231,191,199,192,129, 3, 5, 9, 9, 9, 51,157,157,157, 63,254,244,
+211, 79,165, 13, 26, 52,128, 82,169, 68,122,122,186, 87,116,116,180,231,170, 85,171,250,118,232,208, 97,133, 88, 44,254,252,228,
+201,147,207,101,242,100,158,167,135, 90,173, 94,118,250,244,233, 9, 26,141, 6, 29, 59,118, 60, 31, 16, 16,160,178,177,177,193,
+193,131, 7,225,237,237,221,204,206,206,238,210,154, 53,107, 68,179,102,205,106,185,123,247,110, 0,152,248,188, 99,230,121,114,
+ 24,134,241,136,136,136,112,181,177,177, 1,203,178,101,179, 1,112,160,148,150,191,155, 41, 43, 48,139,110,221,186, 25,106,210,
+148,201,100,223,221,184,113,163,187,121,134, 19,243,177,213,145,156,156,220,189, 91,183,110,223, 1,168,178,160,182,171,171,235,
+172, 65,131, 6, 77,110,214,172, 89,249, 84,115, 28,199,149,191,103,102,102, 98,252,248,241,229,231,224, 56, 14,167, 79,159,158,
+244,191,255,253, 15, 0,254, 87,195,181,215,117,118,118, 38,150,166,192,155, 57,115, 38,102,206,156,137,229,203,151, 19,161, 80,
+ 88,227,204,233,207, 66,243,159, 78,237, 13, 22,232,129, 3, 59,127,121, 55, 36,184, 49, 25,209,175,149,239,150,189, 97, 23,166,
+117,111,208,101,254,209,184, 4,107,142,151,203,229,147,198,142, 29, 59,127,246,236,217,178,187,119,239, 34, 50, 50, 18, 38,147,
+ 9, 74,165, 18,205,155, 55,103, 14, 28, 56,160,158, 52,105,210, 78,137, 68, 50, 74,175,215,239,174,253, 37,149, 82,199, 65,176,
+ 80, 33, 23, 12,145, 8,133,151,244, 38,147,213,179,213,255,157,180,109,219,246,136,209,104,252, 38, 34, 34,226,196,243,142,197,
+ 90, 2, 3, 3, 59,138,197,226, 25, 18,137,164,231,191,213, 92, 60,120,240, 96, 70,231,206,157, 63,158, 57,115,166,244,254,253,
+251,136,138,138, 66, 74, 74, 10,234,215,175,143,250,245,235,147,229,203,151,203, 86,172, 88, 49,241,218,181,107, 12,128,169,214,
+234, 18, 66,152, 58,117,234,188,247,242,203, 47,191,233,236,236,108,151,148,148,148,119,238,220,185,223, 82, 82, 82,190,167,148,
+ 62,214,189, 36,132, 48,206,206,206, 35, 66, 66, 66,222,116, 74,241,242,177, 0, 0, 25, 53, 73, 68, 65, 84,116,116,116, 76, 73,
+ 73,201, 62,118,236,216,111,233,233,233,235,159, 36,211, 66, 8, 81, 3,104, 1,192,169,236,163,148,122,245,234,221,186,127,255,
+126,250, 83,212, 76,174, 87,175, 94,228,227,104,186,184,184, 40,132, 66,225, 47,132, 16, 77,117,251, 80, 74,147, 77, 38,211,160,
+178, 2,199,213,162, 82,169,218,169,213,106, 92,186,116, 9, 95,124,241,133, 99,183,110,221, 16, 29, 29, 13,134, 97,240,241,199,
+ 31, 19, 63, 63, 63, 81,106,106, 42,130,130,130,112,244,232,209,106,179, 23, 60,127,133, 16,178, 3,128, 61,128,193,148,210,204,
+ 10,159, 59, 3,248, 21, 64, 58,165,180, 86,243,234, 61, 77,228,114, 57,126,254,249,103,136, 68, 34,136,197, 98,228,228,228,192,
+221,221, 29, 98,177, 24, 34,145,168,252, 37, 22,139,225,233,233,105, 81,143,227,254,223,222,153, 71, 69,113,166,107,252,249,170,
+170,187,122, 7, 26, 65, 64, 80, 80, 65, 65, 65, 17, 16,140,122, 53, 49,152,184,141, 38,113, 25, 39,137,154,113,137,193, 61,198,
+ 16, 69,130, 43,142,142,163,137,113, 4,163, 68,163,102, 49, 30, 39, 99,226,141, 26,146, 25, 73,226,130,178,196,157,237, 10, 42,
+ 40, 59, 34, 75, 87,111, 85,247, 15,232, 22, 9, 75, 55, 65, 81,211,191,115,234,208,221,213,253,244, 91, 13,116, 61,245,126,239,
+247,126,124, 40, 77,211,168,170,170,130,209,104, 52, 47,179,116,247,238, 93, 8,130, 0,150,101,205,143,155,246,241, 60, 31,218,
+156, 30, 33,100,114,151, 46, 93,240,197, 23, 95, 64,171,213,254,102,191,157,157, 29, 46, 94,188, 95,103, 78,211, 52, 2, 3, 3,
+ 41, 66,200,100,180, 96,176, 8, 33, 2, 0,204,158, 61,251,129,229,233, 26,111,166,181,131, 5, 65, 48, 47, 33,246, 40, 53,159,
+116, 90, 52, 88,203,159,239, 17,225, 31, 20,248,119,150, 21,201,120,163, 30,188, 65, 15,255,128, 94,224,121, 3,254, 47,239, 54,
+122,118,102,241,215,209,222,158,251, 78,100, 94, 92,241, 66,175,176,216, 19,153, 25, 13, 95,223,120,134, 1, 33,196,107,224,192,
+129,171,215,173, 91, 39,253,225,135, 31,112,237,218, 53,196,198,198, 2, 0, 20, 10, 5,190,251,238, 59, 24,141, 70,108,217,178,
+ 69, 53,106,212,168, 29,132,144,147,130, 32,148,181,164,217, 20,132, 16,207, 97, 33, 30, 19, 14,111, 30, 38,241,127,249,208, 7,
+132,144,163,130, 32, 52,219, 64,237, 97,204,132,176, 68,211, 96, 48,140, 20,137, 68,131,131,130,130,254,100,137,201,234,168, 56,
+ 77, 4, 7, 7, 15, 17,137, 68,199,116, 58,157,156,101, 89, 6,205, 44, 36,221,209,113,254, 30,205, 1, 3, 6,244,115,116,116,
+124, 39, 38, 38, 70,114,230,204, 25,148,151,151,163,168,168, 8,139, 22, 45, 66, 92, 92, 28,252,253,253,161, 80, 40,176, 96,193,
+ 2,233,188,121,243, 34, 6, 14, 28,248,213,185,115,231,206,183, 22, 39, 33,132, 26, 62,124,248,231,251,247,239,239,110, 48, 24,
+ 40, 0,208,235,245,234,188,188,188,233,203,151, 47, 31, 78, 8,249, 75,115, 38,171, 37,205,193,131, 7,239, 63,112,224,128, 55,
+203,178, 84,253,151,181,243,180,105,211,102, 70, 69, 69, 61, 71, 8,121,181,185,191,251,150, 62, 79, 66,200, 0,185, 92,222, 39,
+ 34, 34,162,100,194,132, 9,249, 0,144,146,146, 66,210,210,210,134,172, 94,189, 58, 55, 38, 38,166,201,101, 62, 90,209, 12,150,
+203,229,190,243,231,207, 47, 30, 51,102, 76,129, 88, 44,230,207,156, 57, 67, 95,188,120,113,104,108,108,108,206,138, 21, 43,154,
+ 92,151,179, 57, 77,145, 72,244,229,225,195,135,135,187,187,187, 27, 1, 8,245,239, 33, 16, 66, 4,138,162, 4,138,162,144,147,
+147,227, 53,105,210,164,207, 0,140,111, 73,179,162,162, 98,250,208,161, 67,147, 86,174, 92,233, 8, 0, 73, 73, 73, 96, 24,198,
+124, 66,184,118,237, 26, 56,142,195,182,109,219,116,247,238,221,155,101,237,177,183,149,167, 68,179, 43,128, 80, 0, 63, 18, 66,
+ 70, 8,130, 80, 82,111,174,254, 3,160, 47,128, 95, 58, 42, 78,138,162, 96, 52, 26,205, 38,234,251,239,191, 71, 92, 92, 28,190,
+248,226, 11,184,187,187, 63, 96,176, 68, 34, 81,147,117, 68, 77,156,227, 0,212, 13,129, 25,141, 70, 36, 39, 39, 99,247,238,221,
+232,220,185, 51,156, 58,117,130,147,179, 51,194,194,194, 96,202,154, 25,141,198,223,232, 54,214, 44, 41, 41, 1,207, 91,118,173,
+ 36, 8, 2, 42, 43, 43, 91,141,211, 68, 75, 70,168,225,214,204,123,181,187,230,211, 70,139, 6,203,205,213, 41,106,210,196,145,
+ 50, 24, 13,128,174, 26,208,213, 64,208,213, 64,208, 86,131,176, 50, 8,122, 13, 20,116, 41,222,124,222,197,238,208,233,194, 43,
+239,141,240, 28,251,183, 31,243,142, 53,167,103,103,103, 23,189,115,231, 78,251, 11, 23, 46, 32, 35, 35, 3, 91,183,110,197,154,
+ 53,107,204, 87, 14,227,199,143,199,169, 83,167,160,213,106,177,114,229, 74,199,200,200,200,249,168, 43, 54,181, 10,215, 78, 76,
+220,193,125,219, 28, 29,101, 37,248,235,132,115,157,254,121, 48, 55, 2,192, 71,214,234, 60, 10, 34, 35, 35,229,155, 54,109,250,
+198, 82,147,213, 81, 4, 7, 7, 15,145, 72, 36,199,162,163,163, 21,209,209,209,237,210,237, 55, 56, 56,216,159, 97,152, 47,245,
+122,253,210,212,212,212,227,237,161,249,123,145, 72, 36, 11,223,121,231, 29,233,173, 91,183, 80, 81, 81, 1,137, 68,242,192,151,
+155, 68, 34, 1, 69, 81, 96, 89, 22,211,166, 77,147, 38, 36, 36,188, 13, 96,106,107,186,174,174,174,179,246,237,219,215, 93,167,
+211, 81,213,213,213, 16,139,197, 16,139,197,232,215,175, 31,189,108,217,178,174,139, 23, 47,158, 11, 96,187, 53,177,170,213,234,
+233,251,247,239,247,102, 89,150,186,125,251, 54,134, 12, 25,130,179,103,207, 34, 44, 44,140, 94,182,108, 89,183, 5, 11, 22,204,
+ 1, 16,103,141, 38, 33,196, 77, 46,151,251, 39, 37, 37,221,236,210,229,126,114,168,123,247,238,194,232,209,163,203, 50, 50, 50,
+124, 83, 83, 83, 75,131,130,130, 44,202, 88,215,107,186,203,229,114,191,227,199,143,223, 94,179,102,205,243,113,113,113, 19, 0,
+ 32, 52, 52,244, 72,108,108,236, 15,165,165,165,125,147,147,147, 75, 67, 67, 67,243,173, 8,181,147,171,171,171, 33, 34, 34, 66,
+213,120, 71, 76, 76, 12, 86,175, 94,141,189,123,247,150, 2,232,220,146, 72,151, 46, 93,254, 68, 81,212,106,127,127,127,187, 17,
+ 35, 70, 32, 41, 41, 9, 11, 22, 44,224,244,122,125, 38, 0,132,135,135,247, 94,181,106, 21,155,154,154, 10,181, 90, 45,186,125,
+251,246, 39, 93,186,116,177, 21,190, 91,206, 4, 0,255, 5,224,143, 58,147, 53, 5,192, 33, 0,125, 0,100, 0,152,212,129,177,
+153, 13, 86,126,126, 62, 18, 18, 18, 16, 27, 27,139, 94,189,122, 65,167,211,129, 97, 24,179,185, 98, 24, 6,132, 16,139,151,210,
+ 50, 26,141, 56,119,238, 28,246,237,219,135,149, 81, 81, 80,169,234,254, 76,117, 58, 29,202,202,203, 33,149, 74,205, 38,172, 37,
+ 4, 65,248, 42, 43, 43,107,177,187,187,187,121,152,178,225, 16, 33, 0, 40,149, 74,240, 60, 15,131,193, 0,142,227,176,107,215,
+ 46,131, 32, 8, 95,181,164,107, 50,117, 52, 77, 99,201,146, 37,224,184,251,107,142,247,239,223, 31, 0,224,229,229,133,192,192,
+ 64,243,125, 83,134,202, 18,205,221, 67,250,161,182,193,179,125, 87,109, 6, 0,120,120,120,192,215,215, 23,110,110,110, 22,105,
+ 62,233, 48, 64,221, 65, 10, 77, 44,116,123,231, 78,209,198,189,241,159,108,102, 69,148, 40,124,176, 47,212, 18, 3,136,220, 17,
+226,225,239,129, 56,120, 2, 0,132,178, 28,104,143,191,135, 41,129, 37,212, 62,142,254,122,245,104,111,231,152,239,178,155, 44,
+174,163, 40,106, 80,183,110,221,144,148,148,132,238,221,187, 35, 58, 58, 26,126,126,126,144,203,229, 40, 44, 44, 68,117,117, 53,
+ 20, 10, 5,140, 70, 35,130,130,130,104,149, 74,245, 28,172, 52, 88,132,144,160, 89, 83,194, 66, 25, 59, 63, 12, 25,245, 12, 78,
+236, 24,174,216,251,109,193,114, 66,200, 39, 13, 23, 71,125, 92,120,233,165,151, 80, 88, 88, 40,223,191,127,127,155, 77, 86, 88,
+ 88,216, 9,131,193, 48,178,181,231,201,100,178,255,252,244,211, 79, 35,172,213, 55,153,171,132,132, 4,133,131,131, 67,147, 87,
+114,109,208,244,103, 24,230,231,233,211,167,219,237,223,191,255, 95, 65, 65, 65, 47, 63, 14, 38,139, 16, 50,184, 71,143, 30,184,
+113,227, 6, 10, 11, 11,193,113, 28, 10, 11, 11, 1, 0,183,110,221,130,135,135, 7,212,106, 53, 60, 60, 60,208,187,119,111, 66,
+ 81, 84,152, 37,186,207, 61,247,220, 4, 0, 84, 78, 78, 14,138,139,139, 97,111,111, 15,133, 66, 1,119,119,119,140, 24, 49,130,
+241,246,246, 30, 3, 43, 13,214,232,209,163, 39,202,229,114, 42, 47, 47, 15,185,185,185,224, 56, 14,153,153,153,176,183,183, 71,
+120,120,184,200,219,219,123, 28,172, 52, 88, 0, 2,230,204,153, 83,212,208, 92,153, 80, 40, 20,196,215,215,183,204,193,193, 33,
+ 4,128,197, 6, 11, 64,192,130, 5, 11, 10, 55,108,216, 48, 44, 49, 49, 49,210,244, 96, 98, 98,226,187, 0,176,125,251,246, 36,
+ 71, 71,199, 16, 0,214, 24, 44, 8,130,192,207,156, 57, 51,139,101, 89,152, 54,147,113,221,188,121, 51, 40,138,178,183, 64,102,
+ 69, 70, 70, 70,127,165, 82,137,140,140, 12,208, 52, 13, 66, 72, 86, 65, 65, 65,127, 0,136,140,140,204,214,104, 52, 61, 53, 26,
+ 13, 38, 77,154, 68,198,142, 29,219,111,235,214,173, 81, 0, 30, 11,131, 69, 8, 25, 8, 96, 11,234, 10,128,163, 4, 65, 56,219,
+193, 33, 61,128, 32, 8,133,132,144,103,113,223,100,165, 1,144,160,206, 92, 61, 43, 8, 66, 97, 71,197, 70, 8, 1,207,243, 96,
+ 24, 6,155, 55,111,134, 78,167,195,129, 3, 7,112,232,208, 33, 80, 20, 5, 66, 8, 8, 33,176,179,179,195,135, 31,126,104,190,
+111, 9, 6,131, 1,123,246,236,193,123,145,145,102,115, 5, 0, 98,177, 24,174, 46, 46,232,228,228,132,156,156,156, 86, 13, 86,
+ 81, 81, 81, 76,114,114, 50, 90, 42,114,127,229,149,251, 35,172, 13,139,220, 45,137,147,166,105,112, 28,135,145, 35,239,159, 62,
+230,207,159,111,190, 93, 94, 94,110,250,159, 0,177,240,224,105,154, 70,173, 0,188, 36,189,255,216,152,165, 75,205,183, 75, 74,
+ 74,154,213,108,206,139, 60,169,180,152,193, 98,135,230,109,191,126,138, 10,156, 60,238,153, 25,142,118, 50,240,247, 10, 32,126,
+126, 21, 46,148,201,241, 65,124,221,185,112,241,164, 32, 4,140, 92, 7,238,147, 23, 48,194, 75,203,126,146, 42, 91, 6, 32,186,
+ 41, 61, 39, 39, 39, 39,131,193, 0,138,162,160, 80, 40,224,232,232, 8,153, 76,134,146,146, 18, 44, 92,184, 16,199,142, 29,131,
+ 86,171,133, 88, 44, 70,143, 30, 61,160,211,233,122, 90,123, 64,174,106,102,247,214,205,177, 14,165, 57,159, 33,229, 90, 5,228,
+246, 30,136,154, 19,162, 94,181,227,124, 12,128,119,173,213,123, 20,244,237,219, 23,139, 22, 45,146,127,244,209, 71,109, 50, 89,
+ 6,131, 97, 45,195, 48, 67,150, 46, 93, 42,155, 52,233,183, 23,132,151, 47, 95,198,220,185,115,107,107,106,106,214, 91, 27, 91,
+112,112,240, 16,150,101,143,237,222,189, 91, 97,111,111,143, 27, 55,110, 88, 43,209,148,166, 63,195, 48, 63,111,219,182,205,174,
+103,207,158, 16,137, 68,210, 61,123,246, 60, 22, 38,203, 96, 48,116,147,203,229, 40, 41, 41,193,226,197,139, 31, 40, 80, 53, 13,
+103, 3, 64, 70, 70, 6, 60, 60, 60,160,209,104,220, 45,209,117,116,116, 84, 11,130,128,217,179,103,227,230,205,251,222,196,221,
+221, 29, 55,111,222,132,193, 96,112,180, 54, 86,181, 90,237,168,215,235, 49,124,248,112,104, 52, 26, 0,192,148, 41, 83, 32, 18,
+137, 80, 84, 84, 4,157, 78,215,169, 21,137,166,112, 26, 59,118,108, 65,115, 59, 21, 10,133, 94,173, 86,123, 89,169,217,105,220,
+184,113,249, 59,119,238, 28,223,120, 71,114,114,242,120,123,123,251, 68, 71, 71, 71, 95,171, 35, 5,120,137, 68, 2,137, 68, 2,
+145, 72, 4,150,101, 33,145, 72,192,178, 44, 68, 34, 17,104,154,182,104, 92,133,231,121, 28, 61,122, 20, 20, 69, 61, 48,116, 17,
+ 29, 29,253,166,131,131,131,203,201,147, 39,205, 23,128, 85, 85, 85,240,241,241,233, 17, 30, 30,158,126,231,206,157,220,203,151,
+ 47,191,220,134,184,219,147,191, 3, 48,213,133,197, 1, 8,236,192, 88,154,164,222,100, 77, 6,112, 30,117,230, 74, 11, 96, 98,
+ 71,154, 43, 19, 38,131,101,250, 63,151, 74,165, 8, 10, 10, 50,155, 41, 66, 8,106,106,106,204, 67,132,150,158,244,239,222,189,
+ 11, 55, 55, 55,168, 84, 42,248,244,234,133,172,204, 76, 0, 48,223,102, 89, 22, 64,157, 17,107,137,250,153,128, 75,208, 66, 61,
+ 85, 91, 48,101,142, 24,166,229, 50,108, 55, 55, 55,240, 60,111, 50,150,173,101,176, 44,210,116,114,114, 66, 85, 85,149, 69,154,
+ 79, 58, 12, 0, 52,229, 24, 87,175, 38, 20,119,170,123,194,228, 49,161, 51,250,120, 40,192,149,228,128, 85,118, 2,113,240,194,
+ 7,241,199,113, 37,183,174, 52,234,131, 67,169,216,187,252, 69, 16,185, 35,220,106,175, 65, 37,149,188,140,102, 12, 86,105,105,
+105,149, 78,167,115,148,201,100, 96, 24, 6, 98,177, 24, 37, 37, 37,120,255,253,247,113,240,224, 65,120,121,121,193, 96, 48,128,
+101, 89, 20, 23, 23, 67, 44, 22, 91, 53, 59,145, 97,200,216, 85,139, 70,119, 87,116,234,133,210,212, 53,117, 15,218, 5, 97,206,
+ 20,154,253,199,190, 75,211, 9, 33,255, 16, 4,161,205, 69,186, 15, 11,165, 82,137,192,192, 64,188,250,234,171,242, 3, 7, 14,
+124, 10,192,195,154,215,167,164,164,252, 18, 28, 28,252,194,150, 45, 91, 78,220,190,125, 91, 54, 96,192, 0, 40,149, 74, 40,149,
+ 74,228,228,228, 96,205,154, 53, 26,142,227,198,181, 37, 59,198, 48,204,158,153, 51,103, 42,236,236,236,144,147,147, 3, 71, 71,
+171,125,192, 3, 4, 7, 7,251,139, 68,162,159,183,109,219,102,231,237,237,141,171, 87,175, 34, 56, 56, 24,174,174,174,210, 13,
+ 27, 54,116,184,201, 18,139,197,183,138,139,139,189,187,118,237,138,132,132, 4, 80, 20,133,130,130, 2, 68, 69, 69, 97,195,134,
+ 13, 8, 11, 11,131, 74,165, 66,215,174, 93,145,149,149, 5,169, 84,122,219, 18,221,252,252,252, 50, 0,157,143, 29, 59,134,226,
+226,251, 45, 91, 60, 61, 61, 81, 86, 86, 6,142,227, 74,173,141, 53, 63, 63,191, 20,128, 75,122,122, 58,114,115,115, 49,106,212,
+ 40,124,253,245,215, 8, 9, 9,129,209,104,132, 94,175,183, 90, 19,128,145,166,233,102,191,244,234,175, 56,213, 86,106, 26, 90,
+210, 68, 93,191, 41,107, 53, 33, 8,130,208,156,185, 98, 89, 22,173,188,167,137, 88, 63, 63,191,213, 61,122,244,232, 19, 21, 21,
+ 37, 98, 24, 6, 67,135, 14,237,189,108,217,178, 60,153, 76,214,233,189,247,222,147, 55,241, 26, 25,128,254,125,250,244, 81, 88,
+ 27,243, 67,160, 97,150,238,177,156,116, 66, 8,233,140,186,140, 31, 11, 64, 87,255,243, 11, 83, 77, 86, 7,198, 5,158,231, 33,
+ 22,139,177,106,213, 42,188,245,214, 91,112,113,113, 65,100,100, 36, 24,134, 49,111, 64, 93, 86,198,148,213,178, 4, 65, 16,224,
+210,185,197,209,105,115,145,123, 75, 60,172, 54, 13, 38, 51,100, 73, 45, 84,131,108, 83,139,207,107, 15,205,167, 41,123, 5, 52,
+ 51, 68,104, 54, 87,163,130,103,248,121,200,144,150,122, 17, 1,174,122, 8, 34, 81,243, 74, 70, 61,136, 88, 1, 7, 25,211,172,
+ 57, 32,132,164,230,230,230,122, 58, 56, 56, 64,167,211,129,101, 89, 4, 4, 4,224,244,233,211,224, 56, 14, 90,173, 22, 18,137,
+ 4, 98,177, 24,151, 46, 93,130, 78,167, 75,178,244, 64, 8, 33,180,139,154,222,246,238,138, 53, 42,228, 39,192, 65,197,226,185,
+ 65,222,128,162, 15,232,234,107,216,178,114,156,227,155, 81, 95,127, 0, 11,234,101, 30, 53, 74,165, 18,121,121,121,248,252,243,
+207,107, 56,142,155,222, 22, 13,147,201, 58,120,240,224, 9, 7, 7, 7, 89, 88, 88, 24, 50, 51, 51,177,126,253,122, 13,199,113,
+ 99,219, 90,223,101, 48, 24,222,216,181,107,215, 49,131,193,160, 48,153,139,182, 98,202, 92, 45, 92,184, 80,229,227,227,131,236,
+236,108,216,219,219, 67,165, 82,161,123,247,238,112,115,115,147, 46, 92,184,176, 67, 77, 22,207,243,167,178,179,179,123,250,249,
+249,145,222,189,123,131,101, 89,184,187,215, 37,169,250,247,239, 15, 63, 63, 63,136,197, 98, 0, 64,118,118, 54, 96, 97, 95,150,
+159,126,250,233,223, 25, 25, 25,179, 66, 66, 66,104, 87, 87,215, 7,102, 39,109,216,176, 65,151,151,151,103,245, 50, 15, 63,254,
+248,227,215, 23, 47, 94,156, 61,116,232, 80, 70,173, 86, 67, 34,145, 32, 32, 32, 0,110,110,110, 88,191,126,189,238,250,245,235,
+109, 89, 58,226, 70,122,122,186,180, 87,175, 94, 77,142, 93, 40,149, 74, 21, 0,107, 51, 15,183, 82, 82, 82,196,131, 6, 13, 58,
+242,221,119,223,249, 55,220, 17, 26, 26,122, 68,169, 84,218, 3,176,200,168, 54,130,111, 56, 52,216,112,168,144,101, 89, 48, 12,
+211,106, 6,171,160,160,224, 27, 87, 87,215,255,115,113,113,249,101,240,224,193,246,231,207,159, 71,116,116,180,152,227,184,110,
+137,137,137, 0,154,110,146, 40, 8, 2,170,171,171,165,191,217,241,232, 89, 12, 96, 43, 0, 57,128,200, 86,158,251,200, 33,132,
+184,160,174,160,221, 23,117,195,130, 83, 80,103,182, 76, 53, 89, 29,106,178,120,158,135, 72, 36,130,175,175, 47,150, 44, 89,130,
+141, 27, 55, 34, 34, 34, 2, 62, 62, 62,166,248,205, 53, 88,245, 51,222, 44, 58,241,139,197, 98,184,184,186, 66,175,215,155,179,
+ 87, 0,144,149,153, 9,134, 97,192,243, 60, 56,142,107,117,136,176,115,231,206,171, 55,109,218,180,112,244,232,209, 84,195, 25,
+119,130, 32,152,219, 73, 52,220,244,122, 61,190,249,230,155,133, 27, 54,108, 0, 44,200,122,209, 52,141,254,253,251, 63, 48, 44,
+184,125,251,253, 74,133,160,160, 32,132,135,135, 91, 53,219,143,166,105,248,174,218,252,192,176,224,255, 58,223,255,216,186, 78,
+155, 3,159,245,219,154,212,124,218,134, 8,155,252,212,116,167, 61,215, 77,122, 49,112,134,159,187, 4,233,169,151,240,109,242,
+237,107, 37, 37, 21,224, 11, 47,130, 47,190,138,197,147,130,208,199,203, 17,125,188, 28,177,120, 82, 16,248,162, 75, 16,202,115,
+ 32, 72,213, 40,170, 38,205, 14, 47,148,149,149,253,125,237,218,181,229,106,181, 26, 82,169, 20, 44,203,226,214,173, 91,232,219,
+183,175,249,126,253,149, 39,162,163,163,139,139,139,139,227, 45, 61, 16,133,140,154,179, 49,106,170,139, 88,162, 2,202,146, 96,
+103,167, 68, 66,252,102,128, 43, 0, 40, 22,127, 10, 15,164,221, 92, 28, 70, 16, 66,122,183,229,131,122,152,220,184,113, 3,171,
+ 86,173,170,169,173,173,253, 93,133,238, 41, 41, 41,191,232,116,186, 23,226,227,227,107,191,253,246,219,223,109,174, 76,154,122,
+189,126,212,167,159,126, 90,125,227,198, 13, 40,149,202,182, 74, 65, 44, 22,191,103, 48, 24,236,182,110,221,202,143, 28, 57,210,
+ 56,111,222, 60,227, 27,111,188, 97,124,229,149, 87,140,225,225,225,198,185,115,231, 26, 57,142,147,200,229,242, 77,109,126,147,
+223, 9,199,113,219,227,226,226, 52, 20, 69, 65,169, 84,130,101, 89, 56, 59, 59, 3,168, 51,194,166, 19,185, 78,167,195,142, 29,
+ 59,106,107,107,107, 63,176, 68,183,180,180, 52, 97,217,178,101,215, 79,156, 56,161, 55,205,242, 41, 40, 40,192,250,245,235,117,
+241,241,241,249, 21, 21, 21, 31, 91, 27,107,101,101,229,158,119,223,125, 55,247,232,209,163,122,138,162, 80, 94, 94, 14, 7, 7,
+ 7,172, 95,191, 94,247,241,199, 31,231,223,187,119,207,106,205,103,158,121, 38, 59, 63, 63, 95,197,113,220,111,178, 63, 34,145,
+136, 72,165,210, 80, 0, 63, 90,163, 25, 18, 18,146,157,155,155,107,183,110,221,186,147,225,225,225, 27, 85, 42, 85,166, 74,165,
+202, 12, 15, 15,223,180, 99,199,142,255,212,107, 38, 90, 27, 43, 69, 81,102,131,101, 26, 42, 52,101,177,234, 51, 89, 22, 13, 17,
+250,249,249,125,182,111,223, 62,251,204,204, 76, 84, 86, 86, 34, 45, 45, 13,169,169,169,230,161, 92,211,201,172,225, 6, 0, 53,
+ 53, 53, 50,107, 99,110,111, 4, 65,248,175, 32, 8,253, 5, 65,240, 22, 4,225,113,156, 36,115, 8,247,205,213,179,245, 51,207,
+158,173,191,239, 15,224,223, 29, 21, 88,253,144,159,249, 98,103,234,212,169, 72, 76, 76,132,143,143,143,217, 84, 53,156, 69,104,
+141,201, 48, 26,141, 8, 8, 8, 0,167,213, 62, 96,208, 25,134,129,179,179, 51,178,179,179, 97, 48, 24, 90,205, 96, 17, 66, 38,
+143, 30, 61,154,186,124,249, 50,252,252,252,144,154,154,138,212,212, 84,164,165,165, 33, 61, 61, 29, 23, 46, 92,192,165, 75,151,
+112,229,202, 21, 4, 7, 7, 35, 47, 47, 15, 47,190,248,162,169, 77, 67, 75, 88,149,109,178, 48,123,247, 48, 52,159,104,204, 67,
+132, 13,127,186,168, 21,111,244,113, 99,144,158,126, 5, 71, 82,202,246, 18, 66, 29, 78,189,206,125,251, 98,143,123,208, 29,252,
+ 11, 2, 38,239,199,222,229, 47, 2, 0,248,162, 75,208,125,245, 58,136,220, 9, 89,149, 10,212,106, 43,154,189,106, 22, 4, 33,
+ 89,173, 86,127,185,111,223,190,153, 51,102,204, 96,121,158,135, 76, 38,195,219,111,191,109,238, 17, 66,211, 52, 34, 34, 34,170,
+138,138,138,182, 10,130,144,109,201, 65, 16, 66,100,238,206,236,202,215,102, 71, 75,113,115, 39, 64,137, 81,130, 1,232, 63,108,
+ 38,138,114, 79, 3,213, 87, 0, 34, 70,252,223,102, 57,141,127,227, 31, 31, 3,248,159,223,251,193,181, 23, 87,175, 94, 69, 76,
+ 76,204,239, 54, 87, 38, 76,153,172, 35, 71,142,124,202,113,220,236,118,212, 28,181,113,227,198, 99,157, 59,119,110,243,176,136,
+187,187,251,180,146,146,146,153, 22, 60,181,195,134, 58, 82, 83, 83, 83, 7, 13, 26, 20,183,117,235,214,136, 69,139, 22, 73,101,
+ 50, 25,236,236,236,144,145,145,129,110,221,186, 1, 0,106,107,107,177,124,249,242, 90,189, 94,191,247,220,185,115,167, 45,209,
+ 21, 4,129, 39,132,188, 54,119,238,220, 89,189,123,247, 30,207,243,124, 39,173, 86, 91,154,151,151,119,244,222,189,123,109,234,
+131, 85,175,249,234, 91,111,189, 53,163, 87,175, 94, 19,117, 58, 93, 39,131,193, 80,122,243,230,205, 35,149,149,149, 9,109,209,
+ 60,117,234, 84,241,238,221,187,115,238,220,185,211,215,205,205,237,174,189,189,189, 86,171,213,210, 74,165, 82,197,178,108, 48,
+128,211, 0,174, 88,163,121,238,220,185,194,248,248,248, 92,142,227,122,239,218,181, 43, 73,161, 80,252, 64, 8, 33, 98,177, 88,
+173, 80, 40,158, 3,112, 18, 64,150,181,177, 82, 20,197, 55, 52, 84, 13,179, 88, 98,177, 24,132, 16,139, 12, 86,118,118,246, 47,
+107,215,174,237,215,163, 71, 15,196,199,199,151, 41,149, 74,213,196,137, 19,153,187,119,239, 18,160,249, 12, 86,109,109,237,227,
+144,193,122,220, 41, 69, 93,150,119,130,169,230,170, 65,225,251, 33, 0, 21, 29, 25,156, 32, 8, 15, 24,169,110,221,186, 61, 96,
+170, 26,238,179,198, 96, 25, 12, 6,136,197, 98, 48, 12, 3, 87, 55, 55,179,153, 19, 4, 1,153, 89, 89, 40, 47, 47, 55,183,105,
+104, 9,138,162,104, 66, 8,254,252,231, 63, 91,244,190, 83,167, 78,197,201,147, 39,209,218,112, 98,195, 25,127, 94, 94, 45,151,
+ 84,154, 12, 19, 69, 81, 22,207, 34,244,240,104,185,202,165, 57,205,198, 94,228, 73,167,201,106,180,130,178,154,117,187,255,149,
+182,188,160,210,112, 88, 50, 56,111,201,170, 85, 16,150, 63,239,117,194, 67,193,190,208,135,202, 7,247,241, 80, 16,187,186,147,
+141, 80, 85, 0,162,112, 69,185,168, 27,190, 73,189,115,135, 18,209, 45,102, 31, 42, 42, 42, 22,127,248,225,135,244,177, 99,199,
+ 38,199,198,198, 58,248,250,250,226,181,215, 94,131, 86,171,197,133, 11, 23, 48,119,238,220,178,226,226,226,157, 21, 21, 21, 27,
+ 45, 61, 8, 39, 59,230,253, 15, 86,188,208,137,226,171,128,202, 20,128,177,135,147,163, 10,191,158, 79, 2,238,158, 7, 40, 49,
+ 64,177, 8, 25,224,135,254,254,222,126,132,144,161,130, 32,252,108,213, 39,245,144,120,243,205, 55,219,205, 92,153, 72, 73, 73,
+249, 5, 64,143,246,210, 51,105, 6, 7, 7,143, 90,186,116,233, 49,158,231,155,170, 75,105,149,175,190,250,202, 8,160, 93, 90,
+ 60, 60, 76,244,122,253,242,203,151, 47, 99,254,252,249,111,189,254,250,235, 50, 95, 95, 95,120,122,122, 34, 51, 51, 19, 25, 25,
+ 25,136,139,139,211,240, 60,159, 80, 81, 81,241,142, 53,186,245, 61,169,118,214,111,237, 66,125, 51,209, 79,234,183,118, 97,214,
+172, 89, 23,179,178,178,202,220,221,221,195,104,154,238,135,186, 70,145,183,235,223,195,106, 35, 4, 0,115,231,206, 77,207,201,
+201, 41,113,117,117, 13, 19,139,197,222,245,154,249, 0, 18,218,168, 89,250,235,175,191,122,135,134,134,242, 52, 77, 11, 34,145,
+ 72,168, 63, 25, 10, 12,195, 8,132, 16,225,248,241,227, 82, 0,173,214, 92,222,186,117,107,225,222,189,123, 5,165, 82, 25, 86,
+ 85, 85,245, 26,128, 79,107,107,107, 67, 43, 42,234,206,253,205,117,226,214,104, 52,146, 54,196,253,135, 66, 16,132,151,154,121,
+188, 16,192,208, 71, 28, 78,147,172, 93,187, 22, 59,119,238, 68,107, 29,200,143, 28, 57, 2,180, 50, 68,104,250, 91, 49,213, 87,
+105,181, 90, 92,190,124, 25,132, 16,243,253,134, 77, 70,141, 70, 99,139,157,222,121,158, 55,106,181, 90,124,249,229,151, 22,153,
+172,207, 63,255, 28, 26,141, 6, 60,207, 91,244, 61, 91,223,152, 20,229,229,229,230,214, 9, 65, 65, 65,230,253, 58, 93,139,141,
+235,155,213,244,245,245, 69, 73, 73, 9,156,156,156, 0,212, 13, 11,154, 48, 84,183,216,247,247,169,130,180,244,203,109,200,234,
+103,189,236, 53, 12,245,175, 64,119,254,217, 16, 79, 9,156, 28,164,160, 69, 18, 84,106, 8, 46, 23,104,240,243,149,202,155, 70,
+131, 48,110,253, 15,215, 45,106, 16, 71, 8, 25,228,230,230,182,194,104, 52,250, 83, 20, 37, 23, 4,161,138,166,233,180,130,130,
+130,213,130, 32, 92,178,230, 32, 28, 84,116,150, 90, 65,219,139, 88, 86, 48, 26,120, 0, 20, 64, 81, 0,161, 0,208,245, 63,235,
+238,215,214,234,196, 70,158, 28, 46, 44, 46,105,178, 97,224,163,100,216,176, 97, 39,170,171,171,159,184, 78,238, 50,153, 44,134,
+166,233,167,182,147,187,137,129, 3, 7,134,200,100,178, 21, 60,207, 15,212,104, 52,174, 50,153,172,144, 16,114,254,222,189,123,
+127, 75, 75, 75, 59,211,209,241,253,145,105,207, 78,238,141, 49, 45,246,236,228,228,212,235,215, 95,127,149, 54,204, 96, 53,252,
+190,180,102, 86,153,141,199,143, 62,125,250,156,253,236,179,207, 66,186,117,235, 70,153, 10,174, 41,138, 50,111,166, 97, 44, 83,
+182,229,204,153, 51,134,121,243,230,157, 78, 79, 79, 31,214,156,166,143,143,207,137,196,196,196,145, 13, 51, 84, 38, 35,213,248,
+182,209,104, 68, 77, 77, 13, 98, 98, 98,190,207,202,202,106,114,169, 28, 63, 63,191,173, 43, 87,174, 92, 56,102,204, 24,138,162,
+168,223,212, 92, 53,174,195,210,233,116, 56,124,248, 48,191,103,207,158,109, 87,175, 94,109,182, 6,107,192,128, 1, 55,211,210,
+210, 60, 76, 45, 19, 26,111,141,103,212, 2,192,160, 65,131,110,159, 61,123,182,217,255,183,135,161,249,164, 99,177,193, 2,234,
+102, 16, 69,142,240,156, 66, 64, 77,166, 8, 31, 0, 66, 88, 94, 64, 6, 1, 78,176, 82,237,142,152,111, 10,106, 27, 61, 63,160,
+189, 59,242,218, 52,109,154, 29,161, 73, 8,161, 4, 11,150,158,233,232, 56,109,154,237,167,233,227,227,147,149,149,149,229,221,
+130,142,217, 96, 61,109,199,254, 71,208,116,118,118, 86, 56, 59, 59,255, 64, 81,148,167,201, 68, 55,247, 19, 0,120,158,207, 45,
+ 44, 44,124,190,176,176,176,166, 57, 77, 15, 15,143,158, 82,169,244,159, 60,207,135,182, 86, 95, 36,212, 45, 21,147,172,209,104,
+230, 53, 92,236,185,161,102,123,205, 34,108, 28,167,191,191,127,118,114,114,114, 79,153, 76,246, 64, 93, 97,227, 99, 54,113,253,
+250,117, 76,156, 56, 49, 47, 61, 61,221,171,193,243,218, 93,243,105,195,170,181, 8,133,186, 79,236,203,250,205,134,141, 63, 12,
+150,152, 43, 27, 79, 23,181,181,181,229,206,206,206, 85, 26,141, 70,196,113,156,200, 96, 48, 60,112,130,147,201,100,197,205,189,
+214,198,227, 79,125,102,211,162, 70,193,150, 82,111,148,154,204, 70,181,133,135,213, 7,171,188,188,124,220,192,129, 3,143, 51,
+ 12, 35,105,108,126,154, 50, 67, 70,163, 81, 83, 90, 90, 58,234, 81,107, 62,233, 88,189,216,179, 13, 27, 54,108,252, 17,200,207,
+207,111,215,147,175, 13, 27,143, 11, 5, 5, 5, 25, 0, 60, 31,119,205, 39,157,167,123, 41,107, 27, 54,108,216,176, 97,195,134,
+141, 14,192,102,176,108,216,176, 97,195,134, 13, 27, 54,218, 25,155,193,178, 97,195,134, 13, 27, 54,108,216,104,103,108, 6,203,
+134, 13, 27, 54,108,216,176, 97,163,157,249,127,251,242,228,233,243, 39,139,130, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130,
0};
diff --git a/source/blender/editors/datafiles/prvicons.c b/source/blender/editors/datafiles/prvicons.c
index 2a470e056cf..2c606230345 100644
--- a/source/blender/editors/datafiles/prvicons.c
+++ b/source/blender/editors/datafiles/prvicons.c
@@ -1,304 +1,409 @@
/* DataToC output of file <prvicons> */
-int datatoc_prvicons_size= 9534;
+int datatoc_prvicons_size= 12878;
char datatoc_prvicons[]= {
-137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0,192, 0, 0, 0,192, 8, 6, 0, 0, 0, 82,
-220,108, 7, 0, 0, 0, 1,115, 82, 71, 66, 0,174,206, 28,233, 0, 0, 0, 6, 98, 75, 71, 68, 0,255, 0,255, 0,255,160,189,
-167,147, 0, 0, 0, 9,112, 72, 89,115, 0, 0, 11, 19, 0, 0, 11, 19, 1, 0,154,156, 24, 0, 0, 0, 7,116, 73, 77, 69, 7,
-217, 3, 14, 12, 53, 26, 8,211, 40, 12, 0, 0, 0, 29,116, 69, 88,116, 67,111,109,109,101,110,116, 0, 67,114,101, 97,116,101,
-100, 32,119,105,116,104, 32, 84,104,101, 32, 71, 73, 77, 80,239,100, 37,110, 0, 0, 32, 0, 73, 68, 65, 84,120,218,237,125,123,
-120, 20, 85,182,239,175, 30, 93,213,121,116, 58, 47, 72, 32, 64,194, 0,137,134, 16, 68, 6, 6, 66, 8,207,235, 1,230,160,131,
-115,124,220, 17,189,119,230,206,225, 19,207,232,204,248, 64, 16,197,232,213,113, 12,160,163, 40,122, 70, 4, 6,225,115,102,206,
-209, 15,225,158,163, 3,142,142, 56, 38,228, 33, 4, 3, 73, 32, 60, 66, 72, 32,129,188, 31,221,233, 71, 85,221, 63,160,234, 84,
- 63,211,143,170,238,228,176,127,223,215, 95, 63,170,171,123,213,174,223, 90,123,173,181,215,222, 27, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,184, 14,234,102,186,216, 89,179,102,165,139,162,120, 24, 64,158, 94,255,
-193,113, 92, 91, 89, 89, 89,186, 30,191, 61,121,242,100, 62, 41, 41,105,142, 32, 8, 38,189,228, 55, 24, 12,182,242,242,242,195,
- 55, 11, 39,216,155,133, 64, 55,100,255,242,181,215, 94,227,138,138,138, 80, 85, 85,133,140,140, 12, 24,141, 70, 48, 12, 3,138,
-162, 64,211,244,127, 89, 6,138,242,251, 90,253,153,252,222, 98,177, 96,233,210,165,105,122,145, 63, 49, 49,113,238,150, 45, 91,
-232,162,162, 34, 28, 59,118, 12, 25, 25, 25,224, 56, 14, 44,123,253, 54, 50, 12,227,243,124,127,199,100,216,237,118, 44, 92,184,
-144,191,153,140, 34, 27, 44,129,182,110,221,202, 45, 88,176, 64, 33, 16,207,243, 96, 24, 6, 52, 77,123,144, 99, 40,226,184,191,
-214,139, 64,178,236, 91,182,108,225,139,138,138, 38, 2, 64, 85, 85, 21, 6, 7, 7,145,144,144, 0,150,101,149,107,144,175,195,
-215,195,223,241, 11, 23, 46, 64, 79,242,191,250,234,171,116, 81, 81, 81, 44, 0, 84, 84, 84, 32, 47, 47, 15,137,137,137,138,252,
-106,146,203, 74,225, 78,126, 95,159, 51, 12,163,155,252, 35, 94, 1,212, 4, 90,176, 96,193, 68, 0, 40, 47, 47, 71, 94, 94, 30,
-204,102,179, 79, 2,185,147,101,168, 99,231,207,159,215,203,237,249,114,243,230,205,252,194,133, 11, 39,202,159,211, 52, 13, 81,
- 20, 93, 20,208, 31,185, 3, 85, 12, 61,201,191,120,241,226,216, 64, 44,122, 40,228,191, 89,193,134, 74, 32,134, 97, 32, 73,146,
- 79, 2, 5, 75,126,249,181, 30,228, 47, 41, 41, 49, 46, 90,180, 40,203,151, 75, 16, 14,249,245,146,221, 31,249,221,201,172,190,
-158, 80,201,239,254,123, 68, 1,194, 32, 80,168,228,215,146, 68,106,217, 23, 47, 94,156,229,205, 39, 14,150,224,129, 28,139, 4,
-249, 3, 33, 49, 33,127,152, 10, 16, 40,129,100,119, 34, 88,242,251,250, 94, 36,200, 47,223,116, 57,232,213,138,252, 90,201, 63,
- 20,249,229,246,247,229,186,132, 74,254,155,209, 21, 98, 67, 37,144,193, 96, 8,217,210,235,233, 2,169, 93, 54,247, 94, 75, 13,
-158,247, 76,118, 4,235,239,235,161, 0,129,144,223,151,252,196,242,107,160, 0,129, 18,136,227, 56,175,228, 9,135,252,234, 52,
-100,184,217, 30,117,188, 2, 0, 54,155, 13,141,141,141,104,106,106, 66,103,103,167, 75,250, 51, 92,171,175,149,252,254,200,111,
-179,217,112,225,194, 5, 52, 53, 53,161,171,171, 11,177,177,177, 30,100, 15,135,252, 55,107, 32,204, 6, 67, 32,249, 6,116,118,
-118, 34, 38, 38,198, 37,127, 30,109,242, 3,128, 40,138,135,111,228,249, 39,138,162,136,150,150, 22,212,213,213,225,244,233,211,
-104,111,111, 71, 66, 66, 2,146,147,147, 97, 54,155, 97, 50,153, 60, 20, 32,220, 88, 32, 92, 36, 37, 37,205,185,145,231,143, 21,
- 4, 1, 45, 45, 45,168,175,175, 71, 67, 67, 3,218,219,219, 97, 50,153,144,148,148,132,196,196, 68,152, 76, 38,176, 44,235, 65,
-252,112,200,127,211,187, 64,162, 40, 30,190,145,231, 87, 8, 84, 91, 91,171, 16,200,100, 50, 33, 57, 57, 25,137,137,137,136,139,
-139,115,201,255,135, 75,126,141, 92,136,188,220,220, 92,108,223,190, 29, 13, 13, 13, 96, 24, 6,105,105,105, 72, 73, 73,193,216,
-177, 99,149, 65, 35,142,227, 96, 52, 26, 21, 2, 13,149,255, 15,230, 88, 56, 16, 4,193,148,155,155,139,183,223,126, 27,231,207,
-159, 7,195, 48, 24, 53,106, 20, 82, 83, 83,145,159,159, 15,150,101,193,243, 60, 56,142, 83,198, 95,124, 89,125, 66,254,208, 92,
-160,188,169, 83,167,226,173,183,222, 66, 67, 67, 3, 88,150, 69, 90, 90, 26,146,147,147, 49,109,218, 52,133, 64, 60,207,195,104,
- 52,194, 96, 48,128,101, 89,205,200,175,133, 21,237,235,235, 67,124,124, 60,138,138,138,144,152,152,168, 4,233,234, 96,221, 96,
- 48,120,144,200, 23,201, 35,157, 5,234,237,237,133,201,100, 66, 97, 97, 33,146,146,146, 60,200, 45,203,203,243,188, 34,191,183,
- 94,128,144, 63,196, 24,160,183,183, 23,113,113,113, 10,129,220, 51, 61, 52, 77, 43, 74,192,243,188,242, 62,216,108,143,175, 99,
-225, 34, 46, 46, 14,249,249,249, 16, 4, 65,137, 77,212,207, 52, 77,131, 97, 24, 24, 12, 6,229,217, 91, 15, 16,106, 32, 28, 46,
- 18, 18, 18, 48,125,250,116, 69,126, 95,153, 31,119,242, 19,183, 71, 35, 5,144, 9,228, 62, 74,170, 38, 16,203,178, 10,113, 56,
-142,115, 33, 80,184, 46, 81,216, 23,116,195,197,145, 36,201, 43,249,229,255, 83, 91,126,173, 98, 1, 45,228,151,173,187,211,233,
- 28,146,180, 90,146, 95,118, 7,111,122, 5,144,173,187, 40,138, 30, 55, 86, 38,250,147,123,175,225,211,138, 86, 8,162, 20,210,
-159,246,239, 95,161, 91, 26, 84,125, 35,101, 37, 80, 63,220, 7,192,130,177,252,145, 8,132,189,213,245,248,203,238,120, 35,127,
- 32,113,129,191,239,220,244, 10,160,190, 1,238, 55,153,166,105,252,105,195,237,232, 24, 0,254, 87, 73, 37,190,172,190,170,156,
-219,189,255, 71, 48,199, 25, 92,126,175,173,107, 16,223,157,239,193, 75,251,234,112,164,230,154,223,148,169, 22, 80,187, 82, 90,
-167, 56,135, 74,127,106,117, 13,129,100,117, 66, 33, 54, 33,191, 39,104, 95, 4,146,173,139,252,144, 3, 94,134, 97,208,209,209,
- 1,214,217,131, 23, 30,204,113, 57,183,179,163, 3,237,237,237,232,232,232, 64,103,103, 39,186,186,186, 16,195,216, 49,239, 86,
- 19, 62, 47, 41,196,242,217,233,126, 7,156,180,136, 1,180, 28,213, 13,134,252,122, 21,195, 69,138,252, 55,107, 44,224, 83, 1,
-134,242,221, 69, 81, 68, 70,162,251,205,242, 78,104, 65, 16, 96,183,217,240,220, 3,183,250,253, 15,173,160, 21,249, 3, 77,143,
-234, 85, 16, 71,200, 31, 5, 23,200, 87,208,232, 77, 17,226, 88,215, 27,206,120, 33,132,250,253,237,147, 76, 88,124,219,104, 93,
-201,239, 79,126, 45, 21, 67,175, 58, 32,119,191, 62, 28,242, 7, 26, 71,144, 44, 80,144, 46,132,175,238,158,166,135,174,243, 57,
-252,234,124, 8,130,160, 43,249,135,122,232,161, 24,122,129,144, 63, 10, 61,128,123, 16, 25,232,192, 21,195, 12,237, 58,233, 73,
-126, 95,242,235, 29, 11, 16,242,255, 55,139, 1, 66, 29,184,162,189,156,247, 96,201, 49,175,196,209,139,252,122,184, 60,145, 38,
-191, 58, 11, 71,200, 63, 76, 98,128, 64, 6,174, 24,198,245,152,213, 46,226,179,170,171, 17, 35,191,187,252,122,250,251,122, 90,
-126, 45,130, 89, 66,126, 13, 99,128, 64,235,247,153, 27, 89, 19,135, 32,161,165,221,138,205,255,126, 14, 22,155, 16,113,242,171,
- 21, 64,175, 64, 56,146,196, 39,228,143, 98, 12, 16, 76, 9,115,194,221,159,249, 37,165,222,228, 15, 38, 11, 20,205, 73, 47,129,
-248,253,132,252, 81,238, 1, 2, 73,131,186,147, 65, 58,124, 15, 0,192,238, 20,113,233,170, 5,191,249,176, 30, 59, 63,187, 16,
- 81,242, 7,146, 9,138,102,173, 79,168, 10, 65,200, 31,161, 32, 56, 80,203,239,141, 16, 86,171, 21, 54,155, 13, 16,157,200, 28,
-109,196, 27,143, 76, 71, 44,207, 16,242, 19,242,143, 60, 5, 8,165,126,223, 93, 49, 98,121, 6, 63,252,193,152,136, 95, 20, 33,
- 63, 33,127, 84,210,160,222,206,251,243,115,115,163, 78,254,112,102,124, 17,242,223,164,105,208, 80,234,247,189, 29, 83, 47,158,
- 21, 13, 37, 8,135,248,209, 32,127, 48,196, 38, 19,220,117, 10,130, 67,157,194,168,231, 18,129,161, 40, 0, 33, 63, 65,216, 49,
- 64, 80, 35,193,132,252,218, 90, 39, 66,254,232,198, 0, 67,145,191,215,226,116, 57,215,253,125,212, 46,106, 4,147, 95, 38, 53,
- 33,127,148,123,128, 64,252,255, 51, 45, 3, 46,231,213, 94,236,141,250, 5,133, 90,219, 79, 44, 63, 81, 0,175, 22,212, 23,249,
- 47,180, 90,240,236,238, 90,151,243,214,191, 95,131,186,166,225,167, 4,129, 16,127,184,144,223, 23,177, 9,249, 35, 24, 4, 15,
- 69,254, 5, 79,126,141,163,117,157, 30, 63,246,117, 77, 59,166,254,252, 16,242,191,103,198,161,223, 22, 97,116, 34, 31,117, 5,
- 32,228, 39, 8, 74, 1, 2,201, 4,149,189,185,100,200, 31,142, 70,250,147,144,159, 64,147, 30, 96,168,165, 66,228, 37, 83,134,
-173, 95, 23, 0,241, 35, 89,158, 17,174, 34, 16,242, 71, 33, 8,142,196, 58,254,145, 12,130, 9,249, 9, 2, 82,128,145, 76,254,
- 64,148,128,144,159, 32,172, 24, 96,184,195,110,183,227,236,217,179, 94,253,124,189,201,111, 48, 24,194,254, 13,167,211,137,134,
-134, 6,175, 10,160, 55,220,247,124,184, 41, 21,192,225,112,224,220,185,115, 81, 9, 22,195, 37, 16,207,243,109,243,231,207, 79,
-139,102,131,242, 60,223, 22,234,185, 49, 49, 49,182,130,130,130,168,238,211, 27, 19, 19, 99,187,153, 20,192,133,213, 5, 5, 5,
-173, 54,155, 45,234, 4, 42, 45, 45, 77, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,129, 38,
- 8, 42,185,127, 99, 31,225,195, 0,242,244, 18,136,227,184,182,178,178, 50, 93,210,160,179,102,205,202, 23, 69,177, 28,128, 81,
- 71,249,197,178,178, 50, 70, 39,249, 71,122,251, 15, 59,249,217, 32,133,255,242,198, 62,194,168,170,170,194,184,113,227,192,243,
-188,178, 85,170,251,128, 89,176,175,173, 86, 43,150, 44, 89,146,166, 35,249, 43,183,110,221, 74,233, 44, 63,173, 35,121,148,246,
-175,172,172, 68, 70, 70,134,135,252,190,228,243, 54,127,219,253,243,190,190, 62, 44, 95,190, 60, 77, 79,249,111,108,100, 62,108,
-248,195, 6, 35,252,150, 45, 91,248, 5, 11, 22, 76, 4,128,170,170, 42,216,108, 54,152,205,102,101,235, 36,127, 19,105, 2, 41,
- 83, 62,127,254, 60,244, 36,255,230,205,155,233, 5, 11, 22,176, 35, 80,254,116, 81, 20,191,220,188,121,179,210,254,229,229,229,
-152, 58,117, 42, 18, 18, 18,188,202, 31,202,242,143, 23, 46, 92,208, 85,254, 45, 91,182,240, 69, 69, 69,195,138, 63,108, 48,194,
- 47, 92,184,112,162,114, 34,203,186,212,252, 7, 34, 96, 36,118, 89,244, 71,254, 69,139, 22,177, 35, 80,254,116, 81, 20,191,124,
-245,213, 87,249, 69,139, 22, 41,237,207, 48,140,178,149,173, 86,107,159,234, 77,254,225,200, 31, 54, 64,203, 99, 92,184,112, 97,
-150,250,152, 92, 88,230,190, 21,105,184, 59,174,235, 65,254,146,146, 18, 23,242,143, 32,249,101,242, 27,151, 44, 89,226,209,254,
-238,174, 64,160,147,128, 34,181,240,239, 72,224, 15, 29,136,240,139, 22, 45,202,242,208,156, 27,126, 91, 32,141, 31, 76,119,166,
- 7,249, 23, 47, 94,204,142, 64,249,125,146, 95,238, 1, 2,149, 63, 26,171,224,141, 20,254,176,161, 8,175,190, 0, 45,133,215,
-234, 6, 12, 69,254, 17, 32,191, 95,242,123, 35,144, 22,228,215,170, 92, 60, 16,254, 28, 56,112, 0,102,179, 25, 70,163, 17, 44,
-203,186,244,104,238,138,225, 45,104,151,229,125,250,233,167,181, 85, 0, 55,159, 45,203,215,137,114,233,178,183,110, 56, 28, 82,
-233,229,243,123,147,223, 91,214, 97, 24,200,175,248,252,190,200,175,110,127,111,132, 9,101, 85, 12,173, 98,152, 64,249,115,223,
-125,247, 33, 35, 35, 3,102,179, 25, 28,199,193, 96, 48, 40,189, 90, 36,219,159, 13, 36, 96, 1, 0,155,205,134,198,198, 70, 52,
- 53, 53,161,171,171, 75,209,220, 96, 27, 93,207, 46,216, 31,249,189,201,207, 48, 12,174, 94,189,170,108, 6, 62,126,252,248, 33,
-229, 60,119,238,156,226,187,222,122,235,173, 90,203,175,100,123,212, 1,175, 44,255,133, 11, 23,112,241,226, 69,180,183,183, 35,
- 38, 38,198,107,230, 39, 28,242,107, 37,191, 55,254,244,247,247,163,186,186, 26,199,142, 29,195,201,147, 39, 49, 48, 48,128,184,
-184, 56,151, 13,216, 3,181,252,234, 9, 78,235,215,175,215, 78, 1, 68, 81, 60,124, 35, 79, 59, 81, 20, 69,180,180,180,160,190,
-190, 30,167, 79,159, 70, 71, 71, 7,226,227,227,145,146,146, 2,179,217,140,132,132, 4, 69,232, 64,211,111,122,103, 81, 68, 81,
- 44,191,145,231,103, 3,149,191,170,170, 10, 63,254,241,143,113,240,224, 65,165, 87,240,230, 87,202,159,151,150,150,226,167, 63,
-253, 41,118,237,218,133,220,220, 92,173,229, 63,124, 35,207, 63, 81, 20, 69, 52, 55, 55,163,174,174, 14,245,245,245,104,111,111,
- 71,124,124, 60,146,146,146,144,148,148,132,184,184, 56, 15,139, 25, 77,242, 7,195,159,229,203,151, 35, 41, 41, 9, 38,147, 9,
-177,177,177,202, 88,128, 47, 62, 69, 50, 11,148,151,155,155,139,237,219,183,227,236,217,179, 96, 24, 6,163, 71,143, 70,106,106,
- 42,198,142, 29, 11,142,227,192,178, 44,120,158, 87,122, 0,117, 47,160,197, 70,116, 97,194, 56,117,234,212,160,228, 63,118,236,
- 24,142, 31, 63, 14,138,162,144,158,158,238,211,250, 40, 75,194,148,149,161,180,180, 20,146, 36,225,231, 63,255,185,214,242,231,
-229,230,230,226,173,183,222, 66, 67, 67, 3,104,154, 86,228,207,203,203, 83,172, 37,207,243,136,137,137, 81,222, 15,163, 93, 47,
-125,242,231,155,111,190, 1, 69, 81,202, 70,224, 44,203, 42,110,143, 58, 6, 8,196,242,171,123,128, 13, 27, 54,132,213,254, 30,
- 62,114,127,127, 63, 76, 38, 19, 22, 44, 88,128,196,196, 68, 23, 63, 83, 94, 94,208, 96, 48,192, 96, 48,128,231,121,208, 52,173,
-108,235,169,133, 59, 20, 46,130,149,191,178,178, 82,249,206,209,163, 71, 21,247, 70,126,200,239,213,159,203,175,245,144,191,175,
-175, 15,177,177,177, 40, 44, 44,132,217,108,246, 32,128, 76, 24,142,227,192,113,156,210,246,129, 14, 34,233, 29,195,248,106,255,
-181,107,215,122,180,191,209,104, 84, 94,187, 43, 65,164,248,227,161, 0,113,113,113,152, 62,125, 58, 4, 65, 80,114,180,234,220,
-173, 76,120,131,193,160, 92,140, 63, 95, 52,216,207,195, 69,176,242,159, 59,119, 14,205,205,205, 24, 55,110, 92, 80, 36, 53,153,
- 76,186,200, 31, 27, 27,139,105,211,166, 65, 20, 69,143,129, 34,185,205,100,249,213,214, 83, 62, 22,110, 76,160, 87,251,255,254,
-247,191,247,112, 39,101,222,248,202, 0,249,139, 7,228,199,198,141, 27,181, 85, 0,185,107, 82,167,217,188,237, 28,175,182,252,
-222,172,191, 32, 8,104,105,105,193,165, 75,151,208,218,218,138,246,246,118,116,117,117, 97, 96, 96, 0, 91,183,110,213,237, 6,
- 4, 43, 63, 0,133,252,197,197,197,160,105, 26, 5, 5, 5,200,205,205, 69, 74, 74, 10, 58, 58, 58, 80, 91, 91,139,210,210, 82,
-136,162,136,226,226, 98,152, 76, 38,159, 89, 23, 45,228,231, 56,206,101,241, 49, 95,139, 21,171, 13,207,156, 57,115,208,214,118,
-125, 62,126,122,122, 58, 42, 43, 43, 67, 42,141,208,171,253,127,245,171, 95, 5,197,159,168,100,129,228, 1, 22,121, 57, 14,111,
-221,188,250, 61,195, 48,232,237,237, 69, 83, 83, 19,174, 92,185,130,107,215,174,161,171,171, 11,189,189,189,176, 88, 44,232,237,
-237, 69, 79, 79, 15,186,187,187,209,211,211,163,188,126,237,181,215,116, 27,132, 9, 86,126,247,209,201,135, 30,122, 8,153,153,
-153,202,103, 99,198,140,193,152, 49, 99, 48,121,242,100,236,217,179,199,229,251,122,200, 47,251,199,178,187,229,111,165,110,153,
- 72,221,221,221,200,202,202, 66,125,125, 61, 0, 96,249,242,229,232,237,237, 69,114,114,114,196,199, 0,124,181,255,182,109,219,
-188, 38, 22,220,173,251,186,117,235, 34,186,119,179,135, 2,200,141,170, 30,110,247, 39,200,203, 47,191,236, 65,240,158,158, 30,
-244,245,245, 65, 20, 69, 36, 36, 36, 96,202,148, 41,152, 57,115, 38,178,179,179,241,194, 11, 47,232,122, 19,130,149, 31, 0,218,
-218,218,144,150,150,134,130,130, 2, 23,242, 83, 20,165,184, 33,153,153,153, 40, 40, 40, 0,112,189,234, 48, 38, 38, 70, 23,249,
-229,223,241, 70,126, 81, 20,241,248,227,143,227,242,229,203,120,241,197, 23,145,151,151, 7,154,166,209,211,211,131,185,115,231,
-226,210,165, 75, 74,111,208,221,221,141,148,148, 20, 80, 20,133, 83,167, 78, 97,221,186,117,152, 48, 97, 2,222,125,247, 93,151,
- 49, 16,173, 51, 65,190,218,255,241,199, 31,215,101,224, 49,220,246,247,187, 71, 88, 32,130,236,221,187, 23, 52, 77, 99,252,248,
-241,152, 50,101, 10,230,205,155,135, 41, 83,166, 32, 59, 59, 27,217,217,217, 74,102, 69, 62,199,151, 2,104,185,104, 85,176,169,
-191,180,180,235, 21,180,185,185,185, 30,131, 75,106,200,199, 99, 98, 98,188, 22,112,105, 37,187,175,209,221, 39,158,120, 2, 51,
-103,206,196,139, 47,190,136, 13, 27, 54, 32, 61, 61, 29,171, 87,175,198, 31,255,248, 71,204,153, 51, 7,253,253,253,160,105, 26,
-185,185,185,216,181,107, 23, 86,175, 94,141,125,251,246, 65, 16, 4,236,217,179, 7, 31,127,252, 49,214,174, 93,139,247,223,127,
- 95,215, 82, 14,138,162, 80, 83, 83, 3,150,101, 49,109,218, 52, 77,139,221,180, 54,158, 67,238, 20, 31, 72,212,125,233,210, 37,
- 24,141,198,128, 9,167,247,114,133,193,202, 47, 35, 37, 37, 69,121,237, 30, 64,187, 31,119,143, 41,180,132,175,118,148, 45,191,
- 40,138,216,177, 99, 7,254,246,183,191, 97,211,166, 77, 88,179,102, 13, 86,172, 88,129,227,199,143,131,166,105,220,117,215, 93,
- 72, 72, 72,192, 7, 31,124,128,181,107,215, 34, 53, 53, 21, 3, 3, 3,184,243,206, 59,113,224,192, 1,221, 75, 57,104,154, 6,
-207,243,184,229,150, 91,192,178, 44, 4, 65,208, 44, 77,174,181,241,244,187, 83,124,160, 89, 27, 95,228,247,213,192,122,146, 63,
- 20,249, 59, 58, 58,148,128,119,204, 24,223,251, 26,119,116,116, 0,184,190,252, 34,199,113,186,173, 53,234, 75,129, 95,122,233,
- 37,172, 95,191, 30,239,191,255, 62,190,249,230, 27,228,231,231,227,147, 79, 62,193,229,203,151, 81, 89, 89,137,193,193, 65, 24,
-141, 70,212,214,214, 98,234,212,169,152, 61,123, 54,218,218,218, 80, 87, 87,135,156,156, 28, 60,247,220,115, 74, 2, 66,175, 44,
-156,252, 59,185,185,185, 46,228,127,227,141, 55, 92,140, 74,176,163,190,190,142, 61,255,252,243,225,197, 92,129, 16,104,168,192,
- 35,216, 52,167,158,245,243,161,200, 47, 91,246,218,218, 90, 69, 1,212,191, 33,199, 1,181,181,215,119,196,145,215,208,212,131,
-252,254,218, 53, 55, 55, 23,227,198,141,195, 23, 95,124,129, 25, 51,102,160,166,166, 6,181,181,181,168,175,175,199,161, 67,135,
-148,193,167,153, 51,103, 98,245,234,213,200,201,201,193,192,192, 0, 82, 82, 82,112,233,210, 37,196,199,199, 99,250,244,233,186,
-142, 3,168,127, 71,109,249,221, 99,128,112, 75,102,180,226, 15, 27,172, 31,234,205,122, 7, 27,169,235,189,208,110,176,242,203,
- 40, 45, 45,197,228,201,147,145,153,153,233,177,193,199,197,139, 23, 81, 90, 90, 10,189, 49,148,171,120,255,253,247,163,184,184,
- 24,251,247,239, 71,109,109, 45,246,239,223,143, 35, 71,142,224,217,103,159,197,220,185,215, 55, 37,175,168,168,192, 83, 79, 61,
-133, 95,255,250,215, 88,185,114, 37, 56,142,195,198,141, 27,241,232,163,143, 70,164, 28,218, 91,251,191,254,250,235, 30, 61, 64,
- 56,150, 95,126,189,105,211, 38,253, 20, 32, 16,237, 12,212,213,240, 53,103, 85, 79, 5, 8, 84,126,249,198,136,162,136, 61,123,
-246,248, 29, 7,240, 21, 31,232,165,192,114, 15,212,219,219,139,174,174, 46,236,219,183, 15,107,214,172,193,149, 43, 87, 80, 95,
- 95,143, 35, 71,142,224,171,175,190, 66, 98, 98,162,242,253,204,204, 76, 44, 91,182, 12,133,133,133, 40, 42, 42, 66, 90, 90, 26,
-150, 46, 93,138, 15, 62,248, 0,107,214,172, 65,106,106, 42,146,146,146,116,155,203,224,173,253,159,120,226, 9,205,252,125, 45,
-101,101,195,201,160, 4, 59, 33, 35, 18,107,243,135, 42,191, 60, 16, 22,204, 13,142,148, 2, 20, 20, 20, 32, 43, 43, 11,115,230,
-204, 65, 97, 97, 33, 86,172, 88,129,202,202, 74, 28, 62,124, 24,207, 62,251,172, 11,249,229,135,217,108,198,166, 77,155,176,111,
-223, 62,108,220,184, 17, 75,150, 44, 65,107,107, 43, 94,127,253,117, 28, 63,126, 28,237,237,237,184,112,225,130,110, 46,144,251,
-227,181,215, 94,115,153,253, 21,142,229, 87,255,151, 46, 61, 64,176, 89,148,104,104,174, 30, 89,160,225, 0,111,174, 98,107,107,
- 43,234,235,235,209,220,220,140,254,254,126,156, 56,113, 2, 14,135, 3, 13, 13, 13,152, 59,119,174,207, 54, 47, 40, 40,192,219,
-111,191,141,146,146, 18,180,180,180,224,238,187,239, 6,207,243,136,139,139,195,232,209,163,117,115,129,188,181,255,147, 79, 62,
- 57,172, 44,191,166, 89,160,225, 68,254, 80,228,183, 88, 44,136,141,141, 13,184, 20, 66, 20, 69, 93,123, 51, 95,164, 84,143,254,
-202,243, 1,134,234,245,212, 37,198,238, 50,235, 57, 6,227, 46,215,214,173, 91,189,246,112,161, 88,126,221,123,128, 96, 6, 46,
-134,186, 1,209,218, 89, 38, 24,249, 99, 99, 99,131, 42,133,208,155,252,238,237,154,158,158,142,101,203,150, 97,238,220,185,200,
-205,205,197, 93,119,221,133,179,103,207, 98,246,236,217,168,168,168, 64,102,102,166,215,107, 59,122,244, 40, 86,174, 92, 9,171,
-213,138,184,184, 56,236,222,189, 27, 13, 13, 13,168,169,169, 65, 70, 70,134,174,110,169,187, 44,235,214,173,139,234, 76,181,144,
- 71,130,135, 10, 36,253,165, 65,171,171,171,241,209, 71, 31,225,242,229,203,184,120,241, 34,146,147,147,135, 21,249,221, 27, 86,
- 93, 10,161, 14,144,221, 75, 33, 34, 33,191,250, 58, 42, 43, 43,209,219,219,139,238,238,110,252,225, 15,127, 0,199,113,152, 55,
-111, 30, 30,122,232, 33,252,242,151,191,196,178,101,203,148,210,105,249,218,250,250,250, 80, 92, 92,140,242,242,114,216,108, 54,
- 28, 56,112, 0,221,221,221,216,180,105, 19, 82, 82, 82,144,156,156,172, 43,249, 43, 42, 42,192, 48, 12,230,204,153, 3, 0,216,
-188,121,179,207, 94, 34, 88,203,175,107, 15, 16,108,142,214,155, 2,136,162,136,157, 59,119,162,167,167, 7,113,113,113,176, 90,
-173,104,106,106, 82,234,237,135, 11,249,101,249,229,218, 30,117, 41,132, 76,124,245, 56,128,124, 92, 79, 23,200,151,251,150,156,
-156,140,212,212, 84, 60,240,192, 3, 88,191,126, 61, 86,174, 92,137,236,236,108,172, 91,183, 14,133,133,133,216,180,105, 19, 10,
- 10, 10, 64, 81, 20,142, 30, 61,138,226,226, 98,188,247,222,123,136,143,143,135,197, 98,193,238,221,187,177,123,247,110,100,103,
-103, 71,196,242,115, 28,135,156,156, 28,165,174, 73, 61,121, 61,152,146,109,189,225, 51, 8,246, 38, 88, 77, 77, 13, 14, 30, 60,
-136, 43, 87,174,224,226,197,139, 72, 74, 74,242,122,179, 94,121,229, 21, 52, 54, 54, 98,194,132, 9,232,233,233, 65, 71, 71, 7,
-172, 86, 43, 4, 65, 64,122,186,254,187, 31, 5,187,140,134, 92,219,227,173,212, 65, 61, 30, 32, 31,215, 59,155,229, 79,238, 61,
-123,246,224,209, 71, 31, 69,103,103, 39, 58, 59, 59,177,114,229, 74,204,159, 63, 31,251,246,237,195,246,237,219,193, 48, 12, 86,
-174, 92,137,242,242,114,196,199,199, 43, 3, 96,171, 87,175,198,142, 29, 59,240,230,155,111,234, 46, 63, 77,211,152, 53,107,150,
- 75, 81, 95, 73, 73,201,144, 22, 63, 80,203, 31,177, 30, 64, 93,219,255,225,135, 31,194, 98,177, 32, 33, 33, 1,141,141,141,104,
-110,110, 70, 69, 69,133, 11, 33,228,155,244,167, 63,253, 9, 6,131, 1,231,206,157,131,197, 98, 65, 91, 91, 27,186,187,187, 33,
- 8, 2, 30,124,240,193,168,165, 65,135,202, 2,169, 75, 33,220,201, 47, 31,143,180, 11,167,150,251,228,201,147,104,110,110,198,
-146, 37, 75,112,250,244,105,140, 31, 63, 30, 38,147, 9, 70,163, 17,207, 60,243, 12, 94,121,229, 21, 80, 20, 5,139,197, 2,187,
-221, 14,171,213,170,244, 0,247,222,123, 47, 86,173, 90,133, 19, 39, 78, 96,198,140, 25, 17, 73, 66,168,211,158,235,215,175, 31,
- 50, 22,139,164,229, 15, 56, 6,160, 40, 10,191,251,221,239,208,210,210,226,215,162,171,133, 55,153, 76, 74, 53,160, 32, 8,112,
- 56, 28,144, 36, 9,207, 61,247, 28, 54,110,220, 24,149,177, 0,127, 89, 32,185,182, 71, 93, 10,225, 45, 14,144, 75, 33,244,118,
-129,124,201,253,244,211, 79,227,253,247,223, 71,111,111, 47, 38, 79,158,140,207, 62,251, 12,239,188,243, 14,126,246,179,159, 97,
-249,242,229,104,105,105, 81, 50, 68, 7, 14, 28, 80, 42, 66,239,189,247, 94,176, 44,139,226,226, 98, 60,246,216, 99,248,250,235,
-175, 35,222,254, 37, 37, 37, 62,107,129,130,181,252,186,103,129,220,133,255,232,163,143,192,113,156, 87,139,254,192, 3, 15,120,
-104,238,222,189,123,241,212, 83, 79,161,169,169, 9,241,241,241, 72, 78, 78,198,134, 13, 27, 48,107,214,172,168, 90, 80, 95,150,
- 71,174,237, 9,180, 20, 34, 82, 46,144,187,220,227,199,143,199, 39,159,124,130, 21, 43, 86,224,225,135, 31,198,164, 73,147,176,
-109,219, 54,236,217,179, 7, 29, 29, 29,184,239,190,251, 64, 81, 20,118,237,218,133,238,238,110,236,222,189, 27, 59,118,236,192,
-170, 85,171, 80, 92, 92,140, 67,135, 14,185,100,184, 34,217,254, 27, 54,108, 24, 86,150, 63,168, 32, 56, 62, 62, 30,167, 78,157,
-242,176,232, 27, 55,110,116,153,147, 41, 99,210,164, 73,248,248,227,143,163, 58,144, 20,108, 29,144,108,217, 3, 41,133,136,196,
- 53,120,147,253,221,119,223,197, 35,143, 60,130,131, 7, 15, 98,235,214,173,184,237,182,219, 64, 81, 20,214,172, 89,131,173, 91,
-183, 42,138,220,208,208,128, 77,155, 54, 33, 59, 59, 27,219,182,109, 67,117,117, 53, 30,123,236, 49,100,102,102, 98,247,238,221,
- 81,105,255,223,254,246,183, 67, 86,131,134,242, 95,186,245, 0,106,225,119,238,220,137,103,158,121, 70, 9,168,212, 22,125, 56,
-142,168, 6,187, 12,139,236,210, 4, 90, 10,161,183, 11,228, 75,118,131,193,128, 29, 59,118,120, 28, 79, 77, 77, 69,117,117,181,
- 50,158,241,221,119,223, 33, 37, 37, 69,249,222,140, 25, 51,116,119,123,134,186,134,103,158,121,102, 88,142,200, 7,148, 5,154,
- 52,105, 18,254,252,231, 63,143,152,114,130, 96,179, 64,193,146, 57, 26, 89, 32,127,228, 73, 74, 74, 66, 71, 71, 7, 70,141, 26,
- 5, 0,200,200,200, 80,166, 67, 14,151,246,255,205,111,126,227,115, 12, 32,146, 22, 63,164, 44,208, 72,172,165, 9, 69,254, 64,
- 75, 33,134,147,252,242,231,234,194,182,104,141,190,251,147,255,217,103,159, 29,150,252, 9, 40, 8,214,107,246, 80,180,131, 96,
-119,151, 38,208, 82,136, 72,215, 2, 5, 90, 54, 16,109,242,143, 68,254,208, 55, 59,249,213, 46,141,123, 41,132,250,123,234, 82,
-136, 72,186, 64,234,133,163, 8,249, 93,241,194, 11, 47,192,233,116,234,215, 3,140, 52,242,135, 43,127,160,165, 16,195, 33,139,
- 53, 28,201, 31,105,254,132, 59, 31,216,107, 15, 48, 84, 38, 98, 36, 32, 88,249,229,244,102,160,165, 16,122,167, 67, 71, 50,249,
- 71, 26,127, 60,122, 0,135,195,129,115,231,206,249, 92,193, 75, 79,168, 55,125, 8, 21,161,200, 47,187, 52,238,171, 66,200,121,
-107, 89, 9,228, 82, 8,249,251,103,206,156,209, 92,254,129,129, 1,156, 63,127, 62,160,149, 52,180, 38, 86,180,218, 63,154,252,
-113,145,170,160,160,160,213,102,179,165, 69, 83, 35,121,158,111, 43, 45, 45, 13,169, 98,110,238,220,185,130,221,110,167,163, 44,
-191, 88, 90, 90,202,132, 40,127,171,221,110, 31,177,237, 63,210,249, 67, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64,240,223, 21, 20,105, 2,130, 72,225,198, 62,194,135, 1,228,233,245, 31, 28,199,181,149,149,149, 5,156, 6,101,201,109,
- 33,136, 32,249,191,188,177,143, 48,170,170,170,144,145,145,161,108, 88,238, 62, 73,201,125, 65, 48,247,215,222,150, 73,180, 88,
- 44, 88,186,116,105, 80,227, 16, 68, 1, 8, 34, 70,254, 45, 91,182,240, 69, 69, 69, 19, 1,160,170,170, 10,131,131,131, 72, 72,
- 72, 80, 54,201, 14,164,240,207,223,241, 11, 23, 46, 4, 45,155,203,168,169,209,104, 44,166,105,218, 1, 64, 10,228, 65, 81,148,
- 13,192, 6,114,139, 9,134, 34,255,230,205,155,249,133, 11, 23, 78, 84,136, 71,211, 46, 53, 85,129,204,226,211,125,167,120,187,
-221,190,177,166,166,134,157, 56, 81,145,211, 99,114,184, 26,205,205,205,214,156,156,156,231, 1,188, 66,110, 53,129, 47,242,151,
-148,148, 24, 23, 45, 90,148,165, 62,166,222,161, 83,171,237,147, 66,129,139, 2,136,162,200,102,101,101,161,183,183,215,163,226,
-209,155, 34,164,165,165, 93, 3, 48,153,220,106, 2,127,228, 95,188,120,113,150,251,113,245,222,192, 90,238, 29, 22,150, 2,168,
- 20,193,239, 68, 3, 89, 25, 4, 65, 16,201,173, 38, 8,150,252, 0,148, 29,238,229, 30, 64,171,141,243,194,138, 1,124, 89,123,
-121,211,102,249,161,238, 49, 0, 12, 2,200, 32,183,157,192,221,231,247, 69,126, 0,224,121,222,227,179, 96,253,125, 93,118,138,
-111,110,110,198,145, 35, 71, 48, 48, 48,160,144, 93, 77,122,245,103, 44,203,166,254,226, 23,191,232,123,231,157,119, 46,250,136,
- 21, 40, 47, 10, 69,121, 81, 56,151,207,104,154,118,114, 28,247,242,224,224, 96, 49,161,212,200,204,246,168, 3, 94, 0,176,217,
-108,104,108,108, 68, 83, 83, 19, 58, 59, 59, 93,210,159,195,106,163,108,134, 97, 16, 19, 19,227, 98,237,125, 41, 0,128,132,123,
-238,185, 7,143, 60,242,136, 18, 51,200, 19, 72,124,229,113,213, 83, 13,221,143,201,104,106,106, 98,151, 47, 95,190, 17, 0, 81,
-128, 17, 4, 81, 20, 15,223,200,243, 79, 20, 69, 17, 45, 45, 45,168,171,171,195,233,211,167,209,222,222,142,132,132, 4, 36, 39,
- 39,195,108, 54,195,100, 50,121, 40, 64,184,177, 64,216, 65, 48, 0, 56,157, 78,244,247,247,163,191,191,223, 27,225, 61,148,161,
-172,172, 76,209,102,111,110,148,183,158,193,215,111,202,207, 61, 61, 61,178,123, 69, 48,178,144,151,155,155,139,237,219,183,163,
-161,161, 1, 12,195, 32, 45, 45, 13, 41, 41, 41, 24, 59,118, 44, 56,142, 3,203,178,224, 56, 14, 70,163, 17, 44,203, 42,177,128,
- 86,129,176, 38, 61, 64,108,108,172,203,142,136, 67,244, 2,144, 36,201,231,247,135, 58,207,219,177, 72, 45, 65, 72,160, 61,250,
-250,250, 16, 31, 31,143,162,162, 34, 36, 38, 38,202, 46,173,242, 44,175,112,199,113, 28,120,158, 7,195, 48, 16,122,175,161,225,
-173,255,141,254,150,179,136, 73, 29,131, 49,119, 60,140,177,119,252,159,232,100,129,156, 78, 39,250,250,250,208,215,215, 23,176,
- 5,215,138,248,242,179,197, 98, 33, 76, 26,161,136,139,139, 67,126,126, 62, 4, 65,240,234,234,210, 52, 13,134, 97, 96, 48, 24,
-148,231,150,175,246, 34, 65,186,134,249,247, 44,133,197, 98,199,241, 67,111, 97,160,177, 26,217,255,252, 6, 40, 47,113,130,150,
- 89, 32, 15, 5,144,151,215, 22, 69, 81, 83, 82, 7,115, 44,220,181, 94, 8,162, 7,217,197,241,182, 16,174,154,180, 12,195, 40,
-229, 15,163,231,174,194,201,191,238, 68,231,229, 22,140,190,117, 38, 10, 87,164,225,196,223,171,112,226,133,229,152,246,244,191,
-129, 55,167, 6,181, 15,181,102, 49, 64, 36, 20,192, 91,207, 66,122,128,145,173, 0, 44,203, 42,247,211,215,174,149,234,116,103,
-220,184, 91, 48,245,233,127,199,177, 45,247, 35,207, 1,140,187,125, 62,110,191, 99, 9,206,125, 91,137,111,215,207,199,109, 27,
-247, 35,126,194,173,250,151, 66,200, 49,128,209,104,132, 32, 8, 97, 19, 62,212,243,237,118, 59, 97,210, 8,133,175,101, 91, 36,
-135, 13,151,246,174, 71,111,221,223, 33,216,108,144, 36, 17,144, 36, 72,162,120,253, 53, 0,138,166,241,221,183,103, 64,153, 51,
- 48,238,214,169,152, 52,243, 7, 72, 72, 78,194,177,231,151, 97,234,163,239, 97,244,172,229, 67,238, 86,170, 73, 15, 48, 48, 48,
-224, 17, 3,132, 74,106,111,239,135, 58,207,106,181, 18, 38,141, 96, 5,240,182,150, 81,235, 95,222, 69,220, 96, 51,110,255,209,
- 63,128,229, 56, 80, 52, 11,138, 97,111, 60, 51, 0,197, 0, 20,125,253,193,242,144,156, 54,192, 97,193,168,239,229,160, 48,105,
- 20,202,255,245, 23, 24,184,180, 22,147,254,105,157,223, 77, 54, 52,235, 1,100, 63, 92, 38,103, 93, 93, 29,170,171,171, 49, 56,
- 56, 8,187,221, 14,135,195, 1,187,221,238,242,218,225,112,104,150,193,161,105, 90, 20, 69, 81,242,209,200, 86, 73,146, 54, 2,
-120,157, 80,110,120, 42,129, 90, 1,104,154,134,104,183, 34, 54, 54, 6, 28,108,160, 4, 1,144, 88, 64, 50, 0, 52, 11, 9, 70,
- 64, 24, 0,104,246,186, 34, 56, 44,128, 36, 1, 6, 35,224,180, 33, 46,209,140,249,247,172, 66,213,103, 31,160,191,177, 6,183,
- 61,245, 1, 40,138,214, 47, 11,228,173, 7, 56,121,242, 36,246,238,221,139,212,212,212, 72,181,163,207, 97,189,150,150,150,152,
-217,179,103,191,234,116, 58,137, 2, 12, 99, 5, 80, 19, 52,109,209, 67,104,220,245,107,156, 62,118,200,165, 22,128,102, 12,184,
-117,217, 61,152, 48,214, 4, 26, 34, 40,134,189,113,235, 69, 72,130, 19, 0, 5, 8,118, 24, 40, 96,206,157,255,136,227,127,253,
- 18,117,239, 61,137,105,107,223,208,100,217, 69,175, 89, 32,163,209, 8,135,195,225,226,150,112, 28,135,212,212, 84, 52, 53, 53,
-185, 28, 11, 7,254, 74,173,253,161,175,175, 15, 78,167,211, 64,168, 54,124, 93, 32,247, 71, 76, 90, 22,114, 55,236, 87,122, 4,
-123, 71, 11,106,183,254, 79,228,204,153,143,140,172, 81,144,108,189,160, 24, 14, 84,242, 36,208, 19,139, 64, 37,100, 0, 20, 13,
-169,251, 34,196,179,159, 67,188, 82, 13, 88, 59, 49,125,225, 2,124,179,255, 0, 46, 29,154,129,204,101, 63, 11,123,217, 69, 15,
- 5, 16, 4,193,101, 36,216,221, 87,183,219,237,176,217,108, 81,109,100,185,119, 34, 24,158,240, 87,229, 73,211, 52,250,206,126,
-139,134,119, 30,198,237, 63,188, 11, 73,102, 14,210,192, 53,128, 53,130,154,184, 0, 76,246, 10, 80,234,169,145,105,121,160, 71,
- 79,133,112,250, 63,225, 60,177, 15,204, 96, 59,102, 47, 91,130, 35,127,120, 6, 19,254,199,131,160, 13,124,120, 89, 43,111,194,
-199,196,196,192,233,116,186, 88,104,185,122,207,189, 34, 52, 26,136,246,255, 19, 4, 31, 4,203,228,191,250,247,127,195,229,131,
-175, 99,238,170, 31, 35,150,177, 0,150, 94,128,225,129,132,113,160, 38,255, 3, 4, 81,196,153,166, 78,212, 54,118,194, 50,232,
-196,196,177, 9,152,153, 61, 26,252,148,101,144,202,182, 65,104,248, 11,184, 81, 57, 24, 53,126, 2,174, 30,251, 28, 99,126,240,
- 67,109, 21, 64, 16, 4, 12, 12, 12,184,140, 3,184,247, 2,132,128, 4,193, 4,193, 20, 69,129,166, 40, 52,126, 88,140,193,179,
-101,152,183,234, 71,224,108, 87, 33, 57,132,235,214,158, 18, 32,101, 21, 65, 16, 37,156,187,220,141,191, 84, 52,193, 41,136, 56,
-118,230, 42,206,182,116,227,159,255,113, 42, 30,186,227, 22, 72,115, 31, 7, 26,254, 2,169,255, 42,198,140,189, 13,151, 14,239,
-210, 94, 1,228, 24, 64,206,197,203,100,231,121,222,235,156, 0,210, 3, 16,248,235, 1,228, 12, 80,237,155, 63,131,137, 19, 48,
-251,142,133, 96,196, 1, 88,185,116, 56, 41, 30,241,150, 6, 80,160, 32,198,141,129,228,116,162,236, 84, 43, 46,119, 12,160,170,
-190, 21,253,214,235,177,230,159,191,108,192,143, 11,179,192,143,206, 7, 77,209,144,172, 93, 48,103, 36,160,174,186, 50,108,121,
-253,246, 0,106,178,169,139,221,136, 2, 16, 4,154, 5,114,116,181,226, 84,201, 63, 33, 51, 39, 27,147,110,153, 0, 56, 7,208,
-221,231, 64,233,199,251, 48,239,254,135, 0,138,129, 36,216, 33, 56,157,144, 4, 1, 45,215,250,240, 85,245, 37,168,111,177,145,
- 99, 0, 73,132,195,233, 0,127,253, 15,192, 24, 56, 56,172,253,218, 43, 0, 77,211,224,121, 30, 70,163,209,174,244, 93,155, 0,
- 0, 4,137, 73, 68, 65, 84,133,112,242,123,162, 0, 4,129,246, 2,131, 87, 47,226,228,203,119, 34,191,168, 16,233,163,227, 1,
-209,137,182,214, 30,156,248,219, 87,136, 31,151, 3,199, 64, 15, 40, 51, 3,105,112, 0, 98,199, 89, 88, 17,139, 41, 99, 99,225,
-126,123, 23, 79, 31, 3, 65,112, 2, 45,223, 2,146, 8, 24, 98, 97,119, 72,136, 73, 14,127, 43, 2,143, 92,187, 60, 14, 32,247,
- 2,253,253,253,202,236,176,225,244, 32, 24,222,228,167, 40, 10, 13,255,250, 47,200,159, 63, 15,105,137, 20, 36,198,128,198,243,
-173, 56, 89, 86,137, 89,175,124,137,180,194,123,208,121,249, 50,192, 39, 92, 31,248,250,250, 21,216,172, 22,204,201, 78,194,125,
- 69,153, 24,101, 54,194, 28,103,192,178,239,143,197,157,115,198,194,225,112,128,173,120,227, 58,105, 19, 51,209,221,213,135,164,
- 91,230,106,223, 3,200, 35,193,118,187,221, 37,240,245, 54,135, 51, 90, 86,153, 40,192,200, 80, 2,103,239, 53, 36,143,155, 7,
- 73,178,227,244,137,211,104,191,218,141,217,175, 30,129, 33, 62, 17,227, 22,175, 70,217,255,123, 27, 89,121,121,160, 91,190, 5,
-107,237,130,177,244, 37,244,205,122, 26,119, 23,140,197,221, 5, 99,255, 43,150,128, 8, 67,197, 27, 48, 52,253, 13,160, 89,136,
- 99,102,226,204,127,124,133,121,175,188,169,189, 2, 56,157, 78, 88, 44, 22, 12, 12, 12,184,144, 77,174,239, 38, 22,152, 32,208,
- 30, 32,225,150, 2,148,127,250, 57, 28,150,126,152, 38,127, 31,183,255,223, 63,129, 49,240,215, 39,197,196,153, 49,126,249, 26,
-156, 59,245, 53,110,201,248, 62,132,115,159, 35,254,228, 78,112,173, 85,232,207, 95, 3,123,106, 62, 68,138, 1,215, 81,131,248,
- 83,127, 0,127,165,236,186,245, 31, 55, 27,205, 45, 93, 24,117,219, 18,196,103, 76,209, 39, 6,144,103,235,168, 21,128,196, 0,
- 4,193, 42,193, 45, 15,191, 5, 75,115, 61, 56, 83, 50,140, 41, 99, 61,198, 5, 38,174,252, 23,124,245,200,187, 48, 39, 23, 96,
- 76,222, 61, 16, 78,255, 39,184,246,239,144,252,197, 47, 60,127,148,225,192, 76, 94,138, 46,167, 25,167, 43,190,192,226,237,199,
- 53,145,213,107, 22,200,106,181,122,237, 1,252,213,242, 19, 5, 32,112, 87, 0,154,166, 97,202,156,234,187,126,159,143, 65,225,
-230,175, 81,245,210, 42,116,143, 78, 70,206,109, 15,129,106, 61, 6,169,175, 21, 82,223, 21, 64, 20, 64,197,167,129, 50,141, 1,
-149,158,143,198,243, 87,208,120,178, 12,133,175,254, 21,198,228,116,125, 20,192,189, 7,144, 9, 23, 19, 19, 67,122, 0,130,160,
-200, 31,200, 92,222,152,212, 12,204,127,173, 12,167,222,123, 2,127, 63,240, 23,140,157, 50, 5, 73,163, 38,195,148,147, 14,138,
-166,209,223,126, 13, 61,215,218,113,249,175, 21, 48,142,202,194,226,119,190, 3, 27, 19,175,153,188, 94,123, 0,139,197, 2,139,
-197,226, 98,241, 29, 14,135, 50, 97, 93,239, 73,235, 67, 17,156, 76,154, 31,222, 8,122,133, 7,214,128,252, 71,182,161,239, 82,
- 61, 58, 78,254, 29,205,213,135,209,241,197, 62, 72,130, 19, 73,217,223, 71,202,140, 59, 48,253,174, 66, 36, 77,153,169,185,172,
- 62,199, 1,228,145, 95,181, 98, 72,146, 4,167,211,169,217,156,221, 80, 45, 57,153, 51, 60, 50,130,224, 96, 22,181,162, 40, 10,
-230,204, 92,152, 51,115,241,189, 31,174,137,152,188, 94,123, 0,155,205,230,210, 3,200,100, 21, 69, 17, 14,135, 67,119, 2, 14,
-165, 24, 54,155, 13, 20, 69,137,196, 21, 26, 25, 74, 16, 8,249, 35,177,147,252,144, 10,192,178,108,255,213,171, 87,227, 71,143,
- 30,237, 82, 10, 33,138, 34,210,210,210,148, 50,137,104, 90,127, 73,146,112,229,202, 21,240, 60,127,105,112,112,144,176,109,152,
- 43,192,112, 38,191,135, 2, 24,141,198,147,135, 15, 31,158,179,116,233, 82,212,213,213, 65, 16, 4,101,121,148,217,179,103,163,
-171,171, 43,104,235,175,181,149,150, 36, 9, 53, 53, 53,131,162, 40,150, 17,170, 17,242,107,170, 0, 14,135, 99,211,206,157, 59,
-255, 99,213,170, 85,134,159,252,228, 39, 56,115,230, 12, 40,138, 66, 78, 78, 14,210,211,211,113,252,248,241,168,251,255,151, 47,
- 95,198,167,159,126,234,176,219,237,207, 19,186,141,188, 32, 56,156,133,108,117, 87, 0,155,205,118,152,231,249,119, 86,174, 92,
-185,118,237,218,181,134, 69,139, 22, 33, 61, 61, 29, 61, 61, 61, 40, 47, 47, 15,105,185, 18, 45,122, 0, 65, 16,208,214,214,134,
-154,154, 26,235,193,131, 7, 5, 81, 20,127, 13,224, 12,161,218,200, 9,130,135, 35,249,125,107, 5,203, 46,141,141,141, 61,202,
-178,108, 63, 2,220, 47, 76,207, 7, 69, 81, 2,207,243,141, 6,131,225, 67, 0,217,132,102,195, 19, 51,103,206,148,156, 78,167,
-100,177, 88, 36,171,213, 42, 13, 14, 14, 74, 54,155, 77,178,219,237,146,195,225,144,156, 78,167, 36,138,162,110,143,250,250,122,
-105,230,204,153, 65, 89, 92,175, 43, 48, 59,157,206,207,157, 78,231,231,195,165, 97, 37, 73,138,250, 60,100,130,192, 96,183,219,
-113,246,236, 89,175,126,190,222,150,223, 96, 8,126,157, 4,178, 4, 57,129,102,224,121,190,109,254,252,249,105,209,150,129,220,
- 9, 2, 2, 2, 2, 2, 2, 2, 2,191,248,255, 88,111,246,205,191, 63,162, 3, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130,
+137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72,
+ 68, 82, 0, 0, 0,192, 0, 0, 0,192, 8, 6, 0, 0, 0, 82,220,108, 7, 0, 0, 0, 4,115, 66, 73, 84, 8, 8, 8, 8,124,
+ 8,100,136, 0, 0, 0, 9,112, 72, 89,115, 0, 0, 13,215, 0, 0, 13,215, 1, 66, 40,155,120, 0, 0, 0, 25,116, 69, 88,116,
+ 83,111,102,116,119, 97,114,101, 0,119,119,119, 46,105,110,107,115, 99, 97,112,101, 46,111,114,103,155,238, 60, 26, 0, 0, 32,
+ 0, 73, 68, 65, 84,120,156,237,125,121,124, 20, 85,186,246, 83, 85,221,213, 91, 58, 59, 36, 16, 32, 48, 64,192,128, 65, 68, 17,
+ 66, 8,171, 10, 40,174, 51, 46, 31,200,111,116,188, 92,113, 70,199,141, 77, 16,163, 51,138,128,224, 40,138,203,160, 32,202,117,
+197, 65,244,122, 85, 28, 29, 81,194,146, 24, 64, 48, 4, 66, 32, 9, 9, 16,204,218,221,233,164,151,170,250,254,232, 84,165,186,
+187,186,187,122,203, 98,215,195,175, 72,117, 45,167,158,115,234,121,207,121,207,123, 78, 85, 17, 28,199, 65,129,130, 88, 5,217,
+221, 4, 20, 40,232, 78, 40, 6,160, 32,166,161, 24,128,130,152,134, 98, 0, 10, 98, 26,138, 1, 40,136,105, 40, 6,160, 32,166,
+161, 24,128,130,152,134, 98, 0, 10, 98, 26,138, 1, 40,136,105, 40, 6,160, 32,166,161, 24,128,130,152,134, 98, 0, 10, 98, 26,
+138, 1, 40,136,105, 40, 6,160, 32,166,161, 24,128,130,152,134, 98, 0, 10, 98, 26,138, 1, 40,136,105, 40, 6,160, 32,166,161,
+ 24,128,130,152,134, 98, 0, 10, 98, 26,138, 1, 40,136,105, 40, 6,160, 32,166,161, 24,128,130,152,134, 98, 0, 10, 98, 26,138,
+ 1, 40,136,105, 40, 6,160, 32,166,161, 24,128,130,152,134, 98, 0, 10, 98, 26,138, 1, 40,136,105, 40, 6,160, 32,166,161, 24,
+128,130,152,134, 98, 0, 10, 98, 26,138, 1, 40,136,105, 40, 6,160, 32,166,161, 24,128,130,152,134, 98, 0, 10, 98, 26,138, 1,
+ 40,136,105, 40, 6,160, 32,166,161, 24,128,130,152,134, 98, 0, 10, 98, 26,138, 1, 40,136,105, 40, 6,160, 32,166,161, 24,128,
+130,152,134, 98, 0, 10, 98, 26,138, 1, 40,136,105, 40, 6,160, 32,166,161, 24,128,130,152,134, 98, 0, 10, 98, 26,138, 1, 40,
+136,105,168,186,155, 64, 87, 98,252,248,241,233, 44,203,238, 6, 48, 58, 90,215,160,105,186,174,176,176, 48, 61, 26,105, 15, 31,
+ 62, 92,147,148,148, 52,129, 97, 24, 99, 52,210, 7, 0,181, 90,109,219,191,127,255,238,104,165,223,211, 16,148, 1,244,102, 1,
+117,112,255,110,253,250,245,244,148, 41, 83, 80, 92, 92,140,140,140, 12,104,181, 90, 80, 20, 5,130, 32, 64,146,157, 13, 34, 65,
+ 16,126,215,197,219,248,223, 86,171, 21, 51,103,206, 76,139, 52,119,192, 37,254,196,196,196,137,207, 61,247, 28, 57,125,250,116,
+148,148,148, 32, 35, 35, 3, 52, 77, 67,165,114,221, 70,138,162,124,158,239,111, 31, 15,187,221,142,169, 83,167,106, 34, 70,186,
+ 23, 64,182, 1,248, 18,144, 70,163, 1, 69, 81, 32, 73,210, 75, 28,129,132,227,185, 30, 45, 1,241,220,159,127,254,121,205,148,
+ 41, 83,134, 0, 64,113,113, 49,218,219,219, 17, 31, 31, 15,149, 74, 37,228,129,207,135,175,197,223,254, 51,103,206, 68,154, 58,
+128, 78,241,175, 89,179,134,156, 62,125,186, 30, 0, 14, 30, 60,136,209,163, 71, 35, 49, 49, 81,224, 47, 22, 57,111, 20, 0,100,
+109,167, 40, 42,106,252,123, 50,100, 25,128,148,128, 14, 28, 56,128,209,163, 71, 35, 33, 33,193,167,128, 60,197, 18,104,223,233,
+211,167, 35,158, 65,158,251,186,117,235, 52, 83,167, 78, 29,194,111, 39, 73, 18, 44,203, 10,199, 5, 18,183, 92,195,136, 52,164,
+196, 15,248,175,209, 67, 17,127,172, 34,160, 1,248, 18, 16, 69, 81,224, 56, 78, 56, 78,142,192,229,236,139, 36,120,238,107,215,
+174,213, 78,155, 54,109,176,120,159,248,166,135, 35,254,104,113, 7,124,139, 31,112, 23,179, 56, 63,161,138,223, 51,189, 88,129,
+223, 92,135, 42,160, 80,197, 31, 73, 17,137,185, 79,159, 62,125,176,231,126,222,239,143,148,248, 35,205,223,159,248,121,254,158,
+235,138,248,131,135,207,156,203, 21, 16,128,144,196,239,235,184, 72, 32, 16,119,192,117,211,249, 78,111,164,196, 31, 41,254,129,
+196, 15,192,203,231,247,220, 39,206,167,212,246, 64, 70, 19, 43,144, 52, 0, 57, 2, 82,171,213, 33,215,244,209,116,129,196, 46,
+155,103,171, 37,134, 70,163,241,186, 94,176,254,126, 52, 12, 64,142,248,121,254, 82, 80,106,254,224,224, 85, 2,114, 5, 68,211,
+180,219, 13,247, 39,144, 96, 12, 35, 28,136, 59,235,226,254, 10, 0,216,108, 54, 84, 86, 86,162,186,186, 26,141,141,141,208,106,
+181,146, 66, 14,183, 35, 28, 14,252,137,223,102,179,225,204,153, 51,168,174,174, 70, 83, 83, 19,244,122,189,151,216,195, 17,127,
+ 44,214,254,128,135, 1,200, 17, 80, 85, 85, 21, 26, 27, 27,161,211,233, 4, 65, 68,162,230, 15, 87, 60, 0,192,178,236,238, 13,
+ 27, 54,208,249,249,249, 67, 88,150, 69,109,109, 45,142, 31, 63,142, 19, 39, 78,160,190,190, 30,241,241,241, 72, 78, 78, 70, 66,
+ 66, 2,140, 70,163, 91, 63, 32, 18,125,129,112,145,148,148, 52,225,249,231,159, 39,243,243,243,245, 12,195,160,182,182, 22,101,
+101,101, 40, 47, 47, 71,125,125, 61,140, 70, 35,146,146,146,144,152,152, 8,163,209, 8,149, 74,229, 37,124, 32,116,241,199,162,
+ 17,184,149, 4,203,178,187, 59,226,252,130,128, 74, 75, 75, 5, 1, 25,141, 70, 36, 39, 39, 35, 49, 49, 17, 6,131,193, 45,254,
+ 31,174,248, 35,228, 66,140,206,206,206,198,166, 77,155, 80, 94, 94, 14,138,162,144,150,150,134,148,148, 20,244,239,223, 95, 24,
+ 52,162,105, 26, 90,173, 86, 16, 80,160,248,127, 48,251,194, 1,195, 48,198,236,236,108,188,242,202, 43, 56,125,250, 52, 40,138,
+ 66,159, 62,125,144,154,154,138,156,156, 28,168, 84, 42,104, 52, 26,208, 52, 45,140,191,248,170,245, 1, 69,252,114,224,233, 2,
+141, 30, 53,106, 20, 94,126,249,101,148,151,151, 67,165, 82, 33, 45, 45, 13,201,201,201,184,244,210, 75, 5, 1,105, 52, 26,104,
+181, 90,168,213,106,168, 84,170,136,137, 63, 18,181,168,217,108, 70, 92, 92, 28,242,243,243,145,152,152, 8, 0, 66,235,194, 95,
+ 75,173, 86,123,137,200,151,200,187, 58, 10,100, 50,153, 96, 52, 26,145,151,151,135,164,164, 36, 97,187,120,180,151,162, 40,104,
+ 52, 26,129,191, 84, 43,160,136, 95, 30,188,250, 0, 38,147, 9, 6,131, 65, 16, 16,127, 83,197,238, 14,111, 4, 26,141, 70,248,
+ 29,108,180,199,215,190,112, 97, 48, 24,144,147,147, 3,134, 97, 0,120,143, 64,147, 36, 9,138,162,160, 86,171,133,191, 82, 45,
+ 64,168, 29,225,112, 17, 31, 31,143, 49, 99,198, 8,252,197, 16,215,248,158,226, 87,220,158,208,224,101, 0,188,128, 60, 71, 73,
+197, 2, 82,169, 84,130,112,104,154,118, 19, 80,184, 46, 81,216, 25,234,112,113, 56,142,147, 20, 63,127, 61,113,205, 31,169,190,
+ 64, 36,248,243,181,187,211,233, 12, 40,218, 72,138,159,119, 7, 99, 13, 94, 57,230,107,119,150,101,189,110, 44, 47,244,130,215,
+255,141,226, 95,106,193,136,140, 36, 24, 28,221,185,210,167,168,194,133,248, 70,242, 70, 32, 94, 60, 7,192,130,169,249,187,162,
+ 35, 44, 53,175,199, 95,116, 71, 74,252,114,250, 5,254,142,137, 37, 72, 26,128,248, 6,120,222,100,146, 36,241,236, 3,179,209,
+208,210,134,231,222,250, 22, 37,199,107,133,115,119,191,177, 8, 70,131,123,120,177,201,212,134, 83,213,191, 98,243,142,125,248,
+169,180, 90, 50,205, 72,137,159, 79,219,215, 0, 87, 36,230,250,248,218,199, 95, 47, 18,144, 19,213, 9, 69,216,138,248,189,225,
+229,116,243, 55,148,175, 93,248,133,239,240,242,219,211, 83,227,177,240,247, 19,221,206,165, 36,106,212,212,164, 56, 76,188,236,
+119,216,252,183,121,152, 60,110,152,112,141,104,245, 1,194,169,189,195, 17,127,180, 38,195,117,149,248, 99,181, 47,224,211, 0,
+124, 9, 64,188, 62, 36, 35,197,237, 92, 74,229,219,151, 86, 81, 20, 22,221,145,239,247, 26,145, 66,164,196, 47, 55, 60, 26,233,
+ 86,140,135, 34,254,232, 67,178,253,227,111,100, 32, 67, 48, 26,180,110,231, 81, 18,130, 16,255, 30, 51, 98, 0,174,202, 25, 18,
+ 85,241,251,227, 31, 73,195,144,218, 30, 9,120,250,245,252, 54, 32, 60, 97, 43,226,151,134,151, 1,200,185,233,190,106,188, 64,
+157, 74,146, 36,241,246,234, 63, 70, 93,252,129,150,104, 24, 70,180,160,136, 63,186,144,108, 1, 60, 59,145,114, 7,174, 40, 74,
+126,216, 51, 26,226,247,197, 63, 18,181,190, 34,254,223, 38, 36,251, 0,114, 69,236, 41, 96, 74,226,216, 71,215,238,232, 82,241,
+ 71,195,229,233,106,241,139,163,112,138,248,163, 11,217,125, 0, 57, 3, 87, 36,229,222, 7,104,183, 59,177,167,184,188,203,196,
+239,201, 63, 18,226,247,183, 47,218, 80,196, 31,125,200,234, 3,248,243,235,197,224,195,160, 78,134, 69, 93,189, 9,111,124,188,
+ 23,109, 54, 71,151,139, 95,108, 0,209,234, 8, 71, 19, 82,177,121, 69,252,209, 65,192, 62, 64,160, 78,173, 24, 99,110,121, 86,
+242, 34, 93, 37,126,241,245, 0,255, 81,160,112, 12, 35,154,144, 18,169, 34,254,232,193,103, 11, 0, 4, 14,131,122,138,225,216,
+167, 79,128, 32, 8, 48, 44,135,186,122, 19, 94,251,240, 7,236,248,186,164, 75,197, 47,206, 67,164,107,253,174,112,123, 60,161,
+136, 63,186,144, 84,165,156,154, 95, 74, 16,252, 62, 90,173,194,160,254, 41, 88,117,255,245,208,105,212,138,248, 67,132, 34,254,
+232,195,167, 1,200, 17,191,167, 40, 60,247, 25,116, 26, 76,187,106,100,151,100,196, 31,127, 69,252, 10,124, 33, 96, 39, 56,152,
+ 48,168,212,121, 27, 87,222,217,101,153,145,226, 31,174,191,175,136,255,183, 13,159, 97, 80, 57,226,151,114,129,124,237,235, 74,
+ 68,170,214,239,206, 60, 4, 35,126,229, 1,247,208, 33,217, 2,200,245,255,125,245, 1,186, 83, 56, 60, 15, 69,252, 10,228, 32,
+ 96, 31, 32, 24, 23, 72, 17,127,100,161,136, 63,250,240, 59, 21, 34,144,248, 45, 86,155,219,185,158,191,187, 11,189, 89,252,188,
+168, 21,241,119, 13,100,133, 65,125,185, 68,167,107,234,221,206, 43,175,186,216, 37,164,253,193,159,240,123,186,248,121, 40,226,
+239, 58, 72, 26,128, 28,241,215, 92,104,194, 11,111,127,227,118,222,218, 55,191,196,169,234,158,103, 4,114,132,223, 83,196, 47,
+134, 34,254,232,195,111, 24,212,151,248,239,124,108, 51, 14, 29, 63,235,149, 88,209,209, 74, 92,123,239, 63, 48,242,119,233,216,
+246,220, 61, 72, 73,140,235,146, 76,120, 66, 17,191, 2,185,240, 25, 6,245, 23, 9,250, 96,195,194, 30,209,225,149,130, 34,126,
+ 5,193, 32,232, 48,168,248,119, 79,133, 28,225,119,229,244,140, 80,161,136, 63,250, 8, 42, 12,218, 27,196, 47,167,198, 87,196,
+175,128,135,236, 48,104,111, 16, 63, 15, 69,252, 10,228, 34,232, 62, 64, 79,135,221,110,199,169, 83,167, 36,253,252,104,139, 95,
+173, 86,135,157,134,211,233, 68,121,121, 57,128,174,127,105, 21, 77,211, 93,122,189,158, 0,175, 18,118, 56, 28,168,168,168,232,
+150,206, 98,184, 2,210,104, 52,117,147, 39, 79,142,202,119,122,131,225, 16,234,185, 58,157,206,150,155,155,219,173,223,233,213,
+233,116, 61, 99, 52,179,139, 64,136,191,244, 56,105,210,164, 11, 54,155,173,219, 5,180,119,239,222,168,124,105, 93,129, 2, 79,
+184, 25,128, 2, 5,177,134,158,223, 35, 84,160, 32,138, 80, 12, 64, 65, 76, 67, 49, 0, 5, 49, 13,197, 0, 20,196, 52, 20, 3,
+ 80, 16,211, 8,106,164,165,227, 59,194,187, 1,140,142, 18, 31,208, 52, 93, 87, 88, 88, 24,149, 48,168,194, 63, 48, 98,141,191,
+108, 3,224, 63,162,221,241, 29, 97, 20, 23, 23, 99,192,128, 1,208,104, 52,194,167, 82, 61, 7,204,130, 93,111,107,107,195,140,
+ 25, 51,162, 50, 14,193,243,239,248,144,118,175,229,207,151,127, 81, 81, 17, 50, 50, 50,188,248,251,226,231, 57,144, 41,181,221,
+108, 54, 99,246,236,217, 49, 85,254,178, 12, 64,252, 5,249, 41, 83,166, 12, 1,128,226,226, 98,216,108, 54, 36, 36, 36, 8,159,
+ 78, 10,244, 58,244, 64,251, 78,159, 62, 29, 12,119,217, 16,243,207,207,207,239,181,252,215,173, 91, 39,148,255,129, 3, 7, 48,
+106,212, 40,196,199,199, 75,242,151, 51, 29,220,115,255,153, 51,103,162,202,191, 39,150,127, 64, 3, 16,147,159, 58,117,234, 16,
+225, 68,149, 10,226, 65, 52, 57, 4,229,100, 42,210,248,173,240, 95,179,102,141,102,218,180,105, 2,127,138,162,132, 79,217, 6,
+203,213,215,254,104,160,167,151,191, 95, 3, 16,213, 60,218,169, 83,167, 14, 22,239,227, 39,150,121,126,138, 52, 28,242,145,190,
+ 9,191, 21,254,107,214,172,209,206,152, 49,195,139,191,248,122,114,133, 31,232,152,104,240,239,201,229,239, 51, 10, 36, 38, 63,
+109,218,180,193,158,251,121,191, 13, 8, 92,248,193, 52,103,145,194,111,133,191,148,248, 1, 87, 11, 32,151,191,220,188,196, 98,
+249, 75,182, 0,129,200,139, 51, 16, 73,242,145,186, 1,191, 21,254,190,196, 47,230, 15,200,251, 14,130,156, 99, 34, 53, 93, 92,
+ 78,249,239,218,181, 11, 9, 9, 9,208,106,181, 80,169, 84,110, 45,154,167, 97,120,110, 19,231,121,233,210,165,145, 53, 0, 15,
+159, 77,146, 60,224,154,186,236,121, 81,185, 5, 30,205, 38,248,183,194,127,205,154, 53, 26, 95,226, 23,243,231,121, 75,241,151,
+ 43,124,241, 49,145,226, 31,168,252,111,191,253,118, 12, 24, 48, 0,241,241,241,160,105, 26,106,181, 90,104,213,186,178,252,221,
+ 12,192, 87,135, 5, 0,108, 54, 27,170,170,170, 80, 85, 85,133,166,166, 38,104,181, 90, 47,194,225,146, 15,247, 6, 4,226, 95,
+ 89, 89,137,234,234,106, 55,254, 23, 47, 94, 20, 62, 6, 62,112,224,192,128, 60, 43, 42, 42, 0,184,124,215, 75, 46,185, 36, 42,
+252,215,173, 91,231,214,225,229,249,159, 57,115, 6, 85, 85, 85,168,175,175,135, 78,167,147,245,174,163, 96, 91,134, 72,240,151,
+ 42,127,139,197,130,195,135, 15,163,164,164, 4,199,142, 29, 67,107,107, 43, 12, 6,131,219, 7,216,229,214,252,252, 58, 73,146,
+ 88,182,108, 89,228, 12,128,101,217,221, 29,113,218, 33, 44,203,162,182,182, 22,101,101,101, 56,113,226, 4, 26, 26, 26, 16, 23,
+ 23,135,148,148, 20, 36, 36, 36, 32, 62, 62, 94, 32, 45, 55,252, 22,237, 40, 74, 40,252,139,139,139,113,235,173,183,226,179,207,
+ 62, 19,106, 85, 41,191,146,223, 94, 88, 88,136,187,239,190, 27, 91,182,108, 65,118,118,118,196,249,119,196,249,135,176, 44,139,
+154,154, 26, 28, 63,126, 28,101,101,101,168,175,175, 71, 92, 92, 28,146,146,146,144,148,148, 4,131,193,224,183, 2,234,106,241,
+ 7, 83,254,179,103,207, 70, 82, 82, 18,140, 70, 35,244,122,189, 48, 22,224, 75, 79,209,212,143,167, 11, 52, 58, 59, 59, 27,155,
+ 54,109,194,169, 83,167, 64, 81, 20,250,246,237,139,212,212, 84,244,239,223, 31, 52, 77, 67,165, 82, 65,163,209, 8,190,155,216,
+151, 14,245,149,132, 17,188, 9, 65,243, 47, 41, 41,193,161, 67,135, 64, 16, 4,210,211,211,125,214, 62,252,178,111,223, 62, 20,
+ 22, 22,130,227, 56,220,123,239,189, 81,225,255,242,203, 47,163,188,188, 28, 36, 73, 10,252, 71,143, 30, 45,212,150, 26,141, 6,
+ 58,157, 78,248, 29,138,248,125,237,143, 4,127,169,242,223,187,119, 47, 8,130, 16, 62, 4,174, 82,169, 4,183, 71,220, 7,144,
+ 83,243,139, 91,128,229,203,151,135, 85,254, 94,125, 0,139,197, 2,163,209,136, 41, 83,166, 32, 49, 49, 81,216,206, 23, 26, 73,
+146, 80,171,213, 80,171,213,208,104, 52, 32, 73, 82,248,172,103,176,133, 29,141, 78,100,176,252,139,138,138,132, 99,246,239,223,
+ 15,192,229,222,240, 11,255, 91,188,157, 95,143, 6,127,179,217, 12,189, 94,143,188,188, 60, 36, 36, 36,120, 9,128, 23, 12, 77,
+211,160,105, 90, 40,123,185,131, 72,129,246,135, 11, 95,229,191,104,209, 34,175,242,215,106,181,194,186,167, 17,116,149,126,188,
+ 12,192, 96, 48, 96,204,152, 49, 96, 24, 70,136,209,242,224, 51, 64, 81, 20,212,106,181,144, 25,169, 81,200, 80,200, 71,226, 6,
+ 4,203,191,162,162, 2, 53, 53, 53, 24, 48, 96,128,236,107,152,205,102, 24,141,198,168,240,215,235,245,184,244,210, 75,193,178,
+172,215, 64, 17, 95,102, 60,127,113,237,201,239, 11,183, 79, 16, 46,124,149,255, 27,111,188,225,102,204,252,125, 16,115,231,247,
+121,254,245,181,141, 32, 8,172, 88,177, 34,178, 6,192, 55, 77,226, 48, 27, 31, 30, 19, 23,162,184,230,151,170,253, 25,134, 65,
+109,109, 45,206,158, 61,139, 11, 23, 46,160,190,190, 30, 77, 77, 77,104,109,109,197,250,245,235,163,118, 3,130,229, 15, 64, 16,
+127, 65, 65, 1, 72,146, 68,110,110, 46,178,179,179,145,146,146,130,134,134, 6,148,150,150,162,176,176, 16, 44,203,162,160,160,
+ 0, 70,163,209, 45,189, 72,243,167,105, 26, 44,203,122, 9,198, 83,196,226,138,103,194,132, 9,168,171,115, 61,143,159,158,158,
+142,162,162, 34,217,125, 51,241,254, 72,240,151, 42,255,135, 30,122, 40, 40,253,132, 82,121, 70,196, 0,248, 90, 5,144,110,230,
+197,191, 41,138,130,201,100, 66,117,117, 53,206,159, 63,143, 95,127,253, 21, 77, 77, 77, 48,153, 76,176, 90,173, 48,153, 76,104,
+105,105, 65,115,115, 51, 90, 90, 90,132,245, 13, 27, 54, 68, 69, 60,161,240, 23,131, 36, 73, 44, 88,176, 0,153,153,153,194,182,
+126,253,250,161, 95,191,126, 24, 54,108, 24,182,109,219,230,118,124, 52,248,243,254, 49,239,110,249, 18,191, 88, 72,205,205,205,
+ 24, 60,120, 48,202,202,202, 0, 0,179,103,207,134,201,100, 66,114,114,114,151,138, 31,240, 93,254, 27, 55,110,244, 42, 43,169,
+218,125,201,146, 37, 33,247, 37, 67,129,151, 1,240,133,202,175, 7, 34,242,204, 51,207,120, 9,188,165,165, 5,102,179, 25, 44,
+203, 34, 62, 62, 30,195,135, 15,199,184,113,227,144,149,149,133,167,158,122, 42,170, 55, 33, 88,254, 0, 80, 87, 87,135,180,180,
+ 52,228,230,230,186,137,159, 32, 8,193, 13,201,204,204, 68,110,110, 46, 0,215,172, 67,157, 78, 23, 21,254,124, 58, 82,226,103,
+ 89, 22,143, 60,242, 8,206,157, 59,135,167,159,126, 26,163, 71,143, 6, 73,146,104,105,105,193,196,137, 19,113,246,236, 89,161,
+ 53,104,110,110, 70, 74, 74, 10, 8,130,192, 47,191,252,130, 37, 75,150, 96,208,160, 65,120,237,181,215,220,198, 64, 60,175, 17,
+ 46,124,149,255, 35,143, 60, 18,118,237, 30, 13, 35,246,251,141, 48, 57, 68,222,125,247, 93,144, 36,137,129, 3, 7, 98,248,240,
+225,152, 52,105, 18,134, 15, 31,142,172,172, 44,100,101,101, 9,145, 21,254, 28, 95, 6, 16,169, 26, 40, 88,254, 0,144,150,230,
+154, 65,155,157,157,237,150,134, 39,248,253, 58,157,206,235, 58,145,226, 47,174, 17, 61,111,248,163,143, 62,138,113,227,198,225,
+233,167,159,198,242,229,203,145,158,158,142,249,243,231,227,253,247,223,199,132, 9, 19, 96,177, 88, 64,146, 36,178,179,179,177,
+101,203, 22,204,159, 63, 31,219,183,111, 7,195, 48,216,182,109, 27, 62,249,228, 19, 44, 90,180, 8,111,190,249,166, 79, 81, 69,
+ 42, 15, 71,143, 30,133, 74,165,194,165,151, 94, 42,108,235,105,226, 7,100,124, 41, 62, 16, 9, 0, 56,123,246, 44,180, 90,173,
+108,193, 69, 83,252,161,240,231,145,146,146, 34,172,123,118,160, 61,247,139,211,143, 52,127, 95,229,200,215,252, 44,203, 98,243,
+230,205,248,207,127,254,131, 85,171, 86, 97,225,194,133,152, 51,103, 14, 14, 29, 58, 4,146, 36,113,227,141, 55, 34, 62, 62, 30,
+239,188,243, 14, 22, 45, 90,132,212,212, 84,180,182,182,226,134, 27,110,192,174, 93,187,100,151, 71,168, 32, 73, 18, 26,141, 6,
+ 35, 71,142,132, 74,165, 2,195, 48, 97, 9, 60,154,238,155,223, 47,197,203, 33, 1,192,167,248,125, 21,112, 52,197, 31, 10,255,
+134,134, 6,161,195,219,175, 95, 63,159,105, 55, 52, 52, 0,112,189,126,145,166,233,168,240, 7,124, 27,240,223,255,254,119, 44,
+ 91,182, 12,111,190,249, 38,246,238,221,139,156,156, 28,124,250,233,167, 56,119,238, 28,138,138,138,208,222,222, 14,173, 86,139,
+210,210, 82,140, 26, 53, 10,227,199,143, 71, 93, 93, 29,142, 31, 63,142, 17, 35, 70,224,137, 39,158, 16, 2, 16,209,138,194,241,
+233,100,103,103,187,137,255,197, 23, 95,116,171, 84, 60,239,145,231, 54,185,251,158,124,242,201,176,248,202, 50,128, 64, 29,143,
+ 96,172,150, 63, 94,236,131, 71, 18,161,240,231,107,246,210,210, 82,193, 0,196,105,240,253,128,210,210, 82, 0,157,239,208,140,
+134,248,253,149,107,118,118, 54, 6, 12, 24,128,111,191,253, 22, 99,199,142,197,209,163, 71, 81, 90, 90,138,178,178, 50,124,253,
+245,215,194,224,211,184,113,227, 48,127,254,124,140, 24, 49, 2,173,173,173, 72, 73, 73,193,217,179,103, 17, 23, 23,135, 49, 99,
+198, 68,117, 28, 64,156,142,184,230,247,236, 3, 4,186, 55,114,195,185,225,194,103, 31,128,255, 27,168,105, 18,103, 90,174,224,
+162, 37,254, 80,249,243, 40, 44, 44,196,176, 97,195,144,153,153, 9,207, 55,230, 85, 85, 85,161,176,176, 48,106,156,197,220,125,
+ 25, 0, 73,146,184,227,142, 59, 80, 80, 80,128,157, 59,119,162,180,180, 20, 59,119,238,196,158, 61,123,176,114,229, 74, 76,156,
+ 56, 17, 0,112,240,224, 65, 44, 94,188, 24, 15, 63,252, 48,230,206,157, 11,154,166,177, 98,197, 10, 60,240,192, 3, 81, 31, 7,
+224,121,243,127,249,235,189,240,194, 11, 94, 45, 64, 56, 53, 63,191,190,106,213,170,176,184,250, 53, 0, 57,214, 41, 38, 37,199,
+114,197,233, 71, 11,193,242,231,111, 12,203,178,216,182,109,155,223,113, 0,241,241,209,230,207,115,228, 56, 14, 38,147, 9, 77,
+ 77, 77,216,190,125, 59, 22, 46, 92,136,243,231,207,163,172,172, 12,123,246,236,193,247,223,127,143,196,196, 68,225,248,204,204,
+ 76,204,154, 53, 11,121,121,121,200,207,207, 71, 90, 90, 26,102,206,156,137,119,222,121, 7, 11, 23, 46, 68,106,106, 42,146,146,
+146,162,210, 1, 22,243, 23,167,255,232,163,143,202,210, 72, 87,213,252, 60,252,126, 35, 76, 14, 65,241, 57, 93, 21,107,246,135,
+ 80,249, 3,174,129, 48,185,215,136, 38, 60,203, 53, 55, 55, 23,131, 7, 15,198,132, 9, 19,144,151,151,135, 57,115,230,160,168,
+168, 8,187,119,239,198,202,149, 43,221,196,207, 47, 9, 9, 9, 88,181,106, 21,182,111,223,142, 21, 43, 86, 96,198,140, 25,184,
+112,225, 2, 94,120,225, 5, 28, 58,116, 8,245,245,245, 56,115,230, 76,196, 91, 0, 95,229,190, 97,195, 6,183,167,191, 60,243,
+ 41, 62, 55,208, 62,241,181,162,210, 2, 4, 27, 69,233, 14,203,245,135, 80,163, 64, 61, 1, 98, 94, 60,223, 11, 23, 46,160,172,
+172, 12, 53, 53, 53,176, 88, 44, 56,114,228, 8, 28, 14, 7,202,203,203, 49,113,226, 68,159,101,158,155,155,139, 87, 94,121, 5,
+107,215,174, 69,109,109, 45,110,185,229, 22,104, 52, 26, 24, 12, 6,244,237,219, 87,242,156, 72, 64,170,252, 31,123,236,177, 30,
+ 85,243,243,136, 72, 20,168, 39,137, 63, 20,254, 86,171, 21,122,189, 94,246, 84, 8,150,101,163,218,154,249, 18, 37,159, 15,146,
+ 36,161,211,233,132,145,108,127,101, 47,158, 98,236,201, 89, 92, 54,145,230,238,201,107,253,250,245,110,199,120,254, 13,166,230,
+ 23,167, 19,149, 22,192,147,188, 63, 95,218,243,216,238, 20,127,168,252,245,122, 61, 0,249, 83, 33,162, 45,126,207,114, 77, 79,
+ 79,199,172, 89,179, 48,113,226, 68,100,103,103,227,198, 27,111,196,169, 83,167, 48,126,252,120, 28, 60,120, 16,153,153,153,146,
+121,219,191,127, 63,230,206,157,139,182,182, 54, 24, 12, 6,108,221,186, 21,229,229,229, 56,122,244, 40, 50, 50, 50, 34, 46,126,
+207,124,136,185, 44, 89,178, 36,232, 90,191, 43,244, 19,112, 36, 56, 80, 71,210,243,120,241,254,195,135, 15, 99,199,142, 29, 56,
+119,238, 28,170,170,170,144,156,156, 28,181,140,132,195,159,135,120, 42, 4,191, 79,106, 42, 68, 87,240, 23,231,163,168,168, 8,
+ 38,147, 9,205,205,205,120,251,237,183, 65,211, 52, 38, 77,154,132, 5, 11, 22,224,175,127,253, 43,102,205,154, 37, 76,157,230,
+243,102, 54,155, 81, 80, 80,128, 3, 7, 14,192,102,179, 97,215,174, 93,104,110,110,198,170, 85,171,144,146,146,130,228,228,228,
+168,138,255,224,193,131,160, 40, 10, 19, 38, 76, 0, 0,172, 91,183,206,109,191,191, 26,223,243, 24,127,215,137,120, 11, 16,140,
+120,124, 25, 0,203,178,120,235,173,183,208,210,210, 2,131,193,128,182,182, 54, 84, 87, 87, 11,243,237,163,137, 80,248,243,115,
+123,196, 83, 33,120,225, 19, 68,231, 56, 0,191, 63,154, 46,144, 84,153,146, 36,137,228,228,100,164,166,166, 98,222,188,121, 88,
+182,108, 25,230,206,157,139,172,172, 44, 44, 89,178, 4,121,121,121, 88,181,106, 21,114,115,115, 65, 16, 4,246,239,223,143,130,
+130, 2,252,243,159,255, 68, 92, 92, 28,172, 86, 43,182,110,221,138,173, 91,183, 34, 43, 43,171, 75,106,126,154,166, 49, 98,196,
+ 8, 97, 94,147,248,225,117,185, 46,115, 87,120, 14, 62, 59,193, 82,196,142, 30, 61,138,207, 62,251, 12,231,207,159, 71, 85, 85,
+ 21,146,146,146,220, 50,205,147, 95,189,122, 53, 42, 43, 43, 49,104,208, 32,180,180,180,160,161,161, 1,109,109,109, 96, 24, 6,
+233,233,209,255,250, 81, 48,157, 45,160,115,110,143,212, 84, 7,241,120, 0,191, 63,218,209, 44,127,188,183,109,219,134, 7, 30,
+120, 0,141,141,141,104,108,108,196,220,185,115, 49,121,242,100,108,223,190, 29,155, 54,109, 2, 69, 81,152, 59,119, 46, 14, 28,
+ 56,128,184,184, 56, 97, 0,108,254,252,249,216,188,121, 51, 94,122,233,165,168,243, 39, 73, 18, 87, 94,121,165, 32,126,130, 32,
+176,118,237, 90, 33,111,129,254,202, 21,126,212, 91, 0,126, 97, 24, 6,239,189,247, 30,172, 86, 43,226,227,227, 81, 89, 89,137,
+154,154, 26, 28, 60,120, 80,200, 48,255,151, 32, 8,124,240,193, 7, 80,171,213,168,168,168,128,213,106, 69, 93, 93, 29,154,155,
+155,193, 48, 12,238,186,235,174,176, 8, 7,130,220,154, 69,170,160,197, 83, 33, 60,197,207,239,239, 10,248,226,125,236,216, 49,
+212,212,212, 96,198,140, 25, 56,113,226, 4, 6, 14, 28, 8,163,209, 8,173, 86,139,199, 31,127, 28,171, 87,175, 6, 65, 16,176,
+ 90,173,176,219,237,104,107,107, 19, 90,128,219,110,187, 13, 55,223,124, 51,142, 28, 57,130,177, 99,199, 70,157, 59,224,254,210,
+171,101,203,150, 5,236,139,117,101,205,207, 67,214,108,208,127,252,227, 31,168,173,173,245, 91,163,139,201, 27,141, 70, 97, 54,
+ 32,195, 48,112, 56, 28,224, 56, 14, 79, 60,241, 4, 86,172, 88, 17,245, 76,201, 21, 63, 95,208,252,220, 30,241, 84, 8, 62, 29,
+ 0, 94, 83, 33,162,237, 2,249,226,189,116,233, 82,188,249,230,155, 48,153, 76, 24, 54,108, 24,190,252,242, 75,188,250,234,171,
+184,231,158,123, 48,123,246,108,212,214,214, 10, 17,162, 93,187,118, 9, 51, 66,111,187,237, 54,168, 84, 42, 20, 20, 20,224,193,
+ 7, 31,196, 15, 63,252, 16, 21,238,190,242,192,183, 0,190,230, 2,137,207, 9,246, 58, 81, 27, 9, 22, 47, 59,118,236, 0, 77,
+211,146, 53,250,188,121,243,188, 44,247,221,119,223,197,226,197,139, 81, 93, 93,141,184,184, 56, 36, 39, 39, 99,249,242,229,184,
+242,202, 43,195, 34, 43, 23,114,197,207,139,152,159,219, 35,119, 42, 68, 87,185, 64,158,188, 7, 14, 28,136, 79, 63,253, 20,115,
+230,204,193,125,247,221,135,161, 67,135, 98,227,198,141,216,182,109, 27, 26, 26, 26,112,251,237,183,131, 32, 8,108,217,178, 5,
+205,205,205,216,186,117, 43, 54,111,222,140,155,111,190, 25, 5, 5, 5,248,250,235,175,221, 34, 92,209,230, 47,206,199,242,229,
+203,123, 84,205,207, 67, 86, 39, 56, 46, 46, 14,191,252,242,139, 87,141,190, 98,197, 10,183,103, 50,121, 12, 29, 58, 20,159,124,
+242, 73,151,102,196, 31,127,127,226, 23, 67,238, 84,136,174,200,131, 20,247,215, 94,123, 13,247,223,127, 63, 62,251,236, 51,172,
+ 95,191, 30,151, 93,118, 25, 8,130,192,194,133, 11,177,126,253,122,193,144,203,203,203,177,106,213, 42,100,101,101, 97,227,198,
+141, 56,124,248, 48, 30,124,240, 65,100,102,102, 98,235,214,173, 81,231, 46, 85,254,207, 61,247, 92,192,217,160,161, 92, 43,106,
+ 45,128,152,252, 91,111,189,133,199, 31,127, 92,232, 80,137,107,244,238,178, 92,127,144, 35,126, 49,111,222,165,145, 59, 21, 34,
+218, 46,144, 47,238,106,181, 26,155, 55,111,246,218,159,154,154,138,195,135, 15, 11,227, 25, 63,255,252, 51, 82, 82, 82,132,227,
+198,142, 29, 27,117,183, 39, 80, 30, 30,127,252,113,191, 21, 83,119, 65, 86, 20,104,232,208,161,248,240,195, 15,123, 28,121, 95,
+ 8, 54, 10, 20,172,152,187, 35, 10,228, 79, 60, 73, 73, 73,104,104,104, 64,159, 62,125, 0, 0, 25, 25, 25,194,227,144,221, 1,
+ 41,142,207, 62,251,172, 91,222,248,245, 96, 16,137, 26,223, 19, 65, 77,134,235, 13,226, 15,135,191,220,169, 16, 61,137, 63,191,
+ 93, 60,177,173,187, 70,223,253,241, 95,185,114,101,143,212,143,172, 78,176,191, 8, 74, 79, 68,176,252,121,151, 70,238, 84,136,
+174,158, 11,228, 47, 15,190,142,235, 78,244, 38,253,120,221,197,222, 68, 94, 10,161,240,231,197,236, 57, 21, 66,124,156,120, 42,
+ 68, 87,186, 64,188, 97, 42,226,247,198, 83, 79, 61, 5,167,211, 25, 86, 26,126, 91,128,222, 38,126, 30,161,242,151, 59, 21, 34,
+154, 8,165,214,239, 41,226,231,209, 85,250, 9,247,121, 96,192,199, 23, 98,122,179,248,129,224,249,243,225, 77,185, 83, 33,162,
+ 29, 14,237,205,226, 7,122,151,126,188, 90, 0,135,195,129,138,138, 10, 55,194, 93, 69, 94,173, 86,135,157, 70, 40,252,121,151,
+198,243,173, 16,124,220,154, 55, 2,126, 42, 4,127,252,201,147, 39, 35,206,191,181,181, 21,167, 79,159,246, 18,141,167,224, 61,
+183, 69, 2,221, 85,254,145, 66, 40,252, 9,113, 13, 55,105,210,164, 11, 54,155, 45, 42,223,137,149, 11,141, 70, 83,183,119,239,
+222,144,102,204,245,118,254,185,185,185, 23,236,118,123,175,229,223, 27,203,159,240, 28,242, 87,160, 32,150, 16,253,167,212, 21,
+ 40,232,193, 80, 12, 64, 65, 76, 67, 49, 0, 5, 49, 13,197, 0, 20,196, 52, 20, 3, 80, 16,211,240,249, 90, 20, 5, 10, 34,141,
+142,239, 8,239, 6, 48, 58, 90,215,160,105,186,174,176,176, 80,118, 24, 84, 49, 0, 5, 93, 2,254, 35,218, 29,223, 65, 70,113,
+113, 49, 50, 50, 50,220, 62,184, 46,158, 99, 37, 30, 56,147, 90,247, 28, 88, 35, 8,215,179,208, 51,103,206, 12,106, 28, 66, 49,
+ 0, 5, 81,135,248, 11,242, 83,166, 76, 25, 2, 0,197,197,197,104,111,111, 71,124,124,188,240,145,108, 57, 19,255,252,237, 63,
+115,230, 76,208,220, 84, 6,131,174,192,102,179,175, 96, 24, 86,150, 49, 16, 4, 97,231, 56,174,128,227,184,213, 65, 95, 45, 10,
+ 48, 24, 12,227,108, 54,219, 88,134, 97,228,246,103, 88, 0,197, 28,199, 29,142, 38, 47,185,232,237,252, 3,129, 23,255,186,117,
+235, 52, 83,167, 78, 29,194,111, 39, 73,210,109, 78, 85, 32,113,203, 53,140, 96, 65,218,108,246, 21,101,199,143,170, 28,118, 43,
+228, 44,167, 78,158,112, 0, 8,127, 26, 94,132, 96,179,217,198,158, 56,254, 51,105,183,183, 66,206, 82, 94, 94,206, 2, 24,215,
+221,188,121,244,118,254,254,192,139,127,237,218,181,218,105,211,166, 13, 17,239, 19,127,161, 51, 28,241,139, 91,141, 80,160, 98,
+ 24, 86,149, 57,120, 8,218, 90, 27,193, 50, 76,199,230,206,233, 17,158, 19, 37,250,165, 39, 95, 0, 48, 52,164,171, 69, 1, 12,
+195,144,131, 6, 15,134,205,218, 4,198,193, 4, 60, 62, 35, 61,197, 10, 32, 62,250,204,228,161,183,243,247, 5,177,248,167, 79,
+159, 62,216,115,191,248,219,192,225,136, 63,220,217,166,130,219,195, 48, 78,176,172,143,135, 11, 68, 86,192,114,108,224,187,212,
+ 13, 96, 28, 12, 88, 56,164,119,138,102, 47, 51,140,179, 71, 78,126,234,237,252,197, 8, 36,126, 0,194, 23,238, 1,223,143, 81,
+134, 98, 24,193,194,197,128, 47, 82, 78,188,112,194,199,154,221,254,113,172, 10, 64, 59, 65, 16, 25, 65, 95, 45,218, 96,221, 23,
+134, 95,208,185,128, 98, 9, 0, 12, 65, 16,134,238, 35,234, 3,189,157, 63,220,125,126, 95,226, 7, 0,141, 70, 35, 25,201,241,
+116,107,130, 53,140, 96,161, 2, 0, 83,115, 29, 74,246,125,140, 54,107,179,203, 22, 56, 81,165, 47,172,187, 86, 40, 74,213,103,
+241,226,135,219, 55,108,120,169, 74,165,162,132, 99, 68,135, 19,158, 27, 57, 14, 94,204, 56,142,115,219, 70,145,164, 83,163, 85,
+ 61,211,218,106, 43, 8, 54, 19, 45, 77, 23, 81, 82,184,195,229, 70,248, 59,144, 5, 8,138,210, 45, 94,252, 16,179, 97,195,198,
+255,199,127,209, 92, 26,157, 41, 49,140, 55,127, 79, 80, 20,197,106, 52,228,161,214, 86,251, 79,242,153,187,208,219,249,243, 16,
+ 71,123,196, 29, 94, 0,176,217,108,168,172,172, 68,117,117, 53, 26, 27, 27,161,213,106, 37,133, 28,110, 71, 56, 88,168, 92,153,
+ 39, 96, 48,104, 65,145,122,240, 66,119, 25,130, 32,125,215, 95,215,111,227,194, 63,206,197, 99, 15,223, 15,134,115,181,205, 4,
+231, 29,155,237,140,215,138,174,198,111,115,219,228,250, 85, 85, 85,165,186,114,194,140, 21, 0, 10,130,205,132,154, 36, 97, 52,
+106,161,166,244,194, 54, 22, 0, 24,119, 57,117,252, 82,255,247, 31,111,192, 99, 15,255, 5, 12,239, 91,116,252,161, 36, 10,208,
+109, 11,229,181, 91,216, 88, 93,125,134, 28, 63,225,234,177, 0,130, 22, 80,111,231, 47,112,102,217,221, 27, 54,108,160,243,243,
+243,135,176, 44,139,218,218, 90, 28, 63,126, 28, 39, 78,156, 64,125,125, 61,226,227,227,145,156,156,140,132,132, 4, 24,141, 70,
+183,126, 64, 36,250, 2,161, 64, 5, 0, 78, 39,139, 22,147, 21,214, 86,139,203,245,225,247,186,173, 11,255,225,208,193, 47,161,
+209,197,129, 36, 41,247, 22, 2,238,221,103,183, 71, 13,196,173, 4,231,214, 58, 0,224,208,212,220, 2,150,149, 23,138,245,132,
+131,101,209,210, 98,133,213,106, 6, 24,248,169, 69, 93, 74, 41, 41,250, 18, 90,109, 7,127,184,185,216, 34, 48, 96,124, 61,249,
+ 40,113,129,166,150, 22, 4, 17,202,116, 67,111,231, 47,194,232,236,236,108,108,218,180, 9,229,229,229,160, 40, 10,105,105,105,
+ 72, 73, 73, 65,255,254,253, 65,211, 52, 84, 42, 21,104,154,134, 86,171,133, 74,165, 18,250, 2,145,234, 8, 7, 11, 21, 0,144,
+ 20, 1,131, 65, 3,138,208, 74,138, 83,122,221, 9,116,116,218,196, 45, 4, 33, 58,151,112,115,131, 56,209,118,215, 89, 28, 0,
+162, 35, 93,130,179, 7, 77,158, 7, 69, 2,250, 56, 13, 72, 82, 15,136, 98,203,110,247,159, 17,254,235,248,223, 33,240, 39, 37,
+ 78, 96, 1, 80,110,189, 79,183, 63,240, 82, 17,107, 11,145,125,239,231, 47,134,217,108, 70, 92, 92, 28,242,243,243,145,152,152,
+232,226,231,241, 14, 80,181, 90, 13,154,166,161,209,104, 64, 81, 20, 24,211,175, 40,127,249,143,176,212,158,130, 46,181, 31,250,
+ 93,115, 31,250, 95,243,167,174,139, 2, 49, 78, 22, 38, 83, 43,172, 22,139, 80,143,187,215,222,156,100,205, 46, 54, 10,215,111,
+ 79,227,113,107, 56, 60,210,117,191,134,217,210, 22, 52,121, 30,140,131,129,185,197, 2,171,197,210,113,203, 61,110,174,140, 90,
+ 21,112,211,158,248, 84,209,201,190, 83, 49,155,219,229,145,149, 64,111,231, 47,134,193, 96, 64, 78, 78, 14,152, 14,247,173,211,
+ 21,238,124, 11, 31, 69, 81, 80,171,213,194,223,218,239,223, 69, 60,247, 43, 38,255, 97, 38,172, 86, 59, 14,125,253, 50, 90, 43,
+ 15, 35,235,191, 94, 4,225,225, 38, 69, 58, 10,212,209, 2,144, 48,232, 52, 32, 56,109,199,102,119,113,250,111, 21, 60,143,247,
+ 45,114, 78,212,187,246,236, 99,216,237, 97,188,223, 69, 77, 65,175,215, 0,208,116,110,115,171, 13,189,107, 66,247, 85,207,218,
+ 80,114,213,245,203,171, 38,117,193,102,243, 17,194,148,131,222,206, 95, 4,222,197,145,122, 17,174, 88,180, 20, 69, 9,211, 31,
+250, 78,188, 25,199,254,253, 22, 26,207,213,162,239, 37,227,144, 55, 39, 13, 71,126, 44,198,145,167,102,227,210,165, 31, 65,147,
+144, 42,187, 35, 28, 52, 95, 0, 96,156, 12, 90,204,109,104,181, 88, 0,248, 18,185,184, 54,247, 45,108,241, 73, 82, 29,105,222,
+245, 17,210,233, 88,111,181,134,222, 2,176, 14,166,195,135,118,241,247,245,214, 18,198,253, 63, 63, 9,138,255,120, 39, 38,149,
+ 78,123,123,232, 46, 68,111,231, 47, 6,239,215, 3,238, 31,200, 16, 11,223, 51,220,105, 24, 48, 18,163,150,126,140,146,231,239,
+192,104, 7, 48,224,242,201,184,252,154, 25,168,248,169, 8, 63, 45,155,140,203, 86,236, 68,220,160, 75,162,210, 17,118,181, 0,
+ 36, 9,189,222,213, 2,136,197,233,202,132,235, 64, 95,181, 55,159,209,206, 51,208,233, 50,137,211,233,248,143,115, 75,164, 51,
+ 93,135, 35,244, 22,128,164, 40,232,245, 90,184,213,160, 0, 14, 20,151, 99, 79,225, 73,152,173, 54, 56,108,237,176,182, 59, 96,
+179, 57,208,222,110,131,205,214,142,246,246,200,212,122, 60, 58,110,238, 66,169,125,106,181,154,205,201,201, 42, 43, 46, 62,246,
+227,111,141,191, 24, 4, 0, 10, 53, 0, 0, 17,191, 73, 68, 65, 84,226,112,164, 88,160,156,195,134,179,239, 46,131,233,248,143,
+ 96,108, 54,112, 28,235,210, 9,203,186,214, 1, 16, 36,137,159,127, 58, 9, 34, 33, 3, 3, 46, 25,133,161,227,174, 66,124,114,
+ 18, 74,158,156,133, 81, 15,252, 19,125,175,156,237, 55,252, 25,122, 11,192, 48, 48,153,172,104,181,180,186,251,254, 98,209,139,
+ 5,223,241,191,103,132, 72,236,239,187, 27,140,111,215,135, 95, 55,183,134,238,131,178, 12,131, 22,139, 21, 86,179,213,109,251,
+158,194, 50,124,248,225,199, 72, 77,237,214, 55,117, 0, 0,206, 84,158, 33,115, 46,155, 48, 18,128,151,128,122, 59,127, 49,196,
+174,136, 88,164, 23,190,122, 13,134,246, 26, 92,126,211,181, 80,209, 52, 8, 82, 5,130, 82,117,252,165, 0,130, 2, 8,210,181,
+168, 52,224,156, 54,192, 97, 69,159,223,141, 64, 94, 82, 31, 28,120,253, 47,104, 61,187, 8, 67,127,191, 68, 82,252, 97,183, 0,
+ 6, 61, 13,112, 90, 55,113, 30, 58,114, 26, 63,236, 43,131,181,205, 14,155,205, 1,187,221, 1, 91,199,226, 90,119,194,102,115,
+ 8, 29,158,112, 65,146, 36, 75, 16,132,228, 80, 63, 65, 16,109, 28,199,173,224, 56,238, 5,175,243, 0, 24,245, 26,128,209,186,
+109, 87,171, 73,164,166,166,162,241,226, 47,112, 48,145,173, 45,131,133,181,165, 30, 14,135, 67, 50,204, 24,152,127, 25, 88, 38,
+ 50,157,212, 80,225,143,191, 39, 60, 13,128, 36, 73,176,246, 54,232,245, 58,208,176,129, 96, 24,128, 83, 1,156, 26, 32, 85,224,
+160, 5,152, 86,128, 84,185, 12,193, 97,117,233, 80,173, 5,156, 54, 24, 18, 19, 48,249, 15, 55,163,248,203,119, 96,169, 60,138,
+203, 22,191, 3,130,144, 14,157, 6,139,206, 22,192, 98,133,197,212, 10,113,205,190,191,184, 28,239,125,176, 3,169, 41,169, 65,
+ 39, 28, 34,124, 22,112, 77,109,141, 46,123,212, 21,107, 0,120, 25,128,131,101,209, 98,182,194,220, 98,133,187,127, 76,129, 1,
+224,112,216,224,112, 88, 61, 79,235, 82,248,187,190, 63,254,252,185,172,163,123, 13, 32,152,242,147,234,244,166, 77, 91,128,202,
+ 45, 15,227, 68,201,215,110, 35,161, 36,165,198, 37,179,254,128, 65,253,141, 32,193,130,160, 84,112,201,128, 5,199, 56, 1, 16,
+ 0, 99,135,154, 0, 38,220,112, 61, 14,253,251, 59, 28,255,231, 99,184,116,209,139, 97,139, 31, 16,181, 0, 58,157, 6,156,211,
+229,131,242, 46, 11, 77,107, 92,239,200,175, 43, 5,227,236,222, 27, 96, 51, 91,224,112, 58, 37,223,125, 71,145, 36,244,122, 53,
+224,112,241,231, 71, 72, 53, 90,254,240,224, 90,168,214,214,118,234,182,249, 75,238,254,240,221,181, 91, 12, 6,173,159,147,131,
+ 72,215,207,161,254,248,243,145,127, 70,162, 51,235, 15,255,251,229,143,253,223,125,239,139, 73,167, 42,170,178,109,237,118,131,
+205,238,212,165, 36,199,159,203, 28,216,175,226,134, 27,166, 29,188,243, 15,215, 86, 6,149,160,204,172,250,234,164,234,210, 6,
+ 35,123,249, 78,161, 69,176, 55,212,162,116,253,157, 24, 49, 97, 50, 50, 6,247, 1,103, 51,129,160,104, 16,201, 67, 65, 14,201,
+ 7, 17,159, 1, 16, 36,184,230, 42,176,167,190, 1,123,254, 48,208,214,136, 49, 83,167, 96,239,206, 93, 56,251,245, 88,100,206,
+186, 39, 44,241, 3, 66, 11,192,194,108,178,194, 98,110,117,243,203,217,142,206,137,211,209, 6,167,195, 51, 74, 35,233,169, 68,
+ 13, 38, 83,179,207,125, 12,203,194,220, 98,133,197, 98,113, 15,110, 48,162,152, 95, 16,110,218, 29, 11,150, 46, 56, 89, 94, 53,
+238,142, 5, 75,153,207, 62,220,176, 37, 84,206, 98,176,126, 4, 28, 73,254, 53,181, 23,181,127,186,255,111,127,172, 56, 83,227,
+245, 45,212,139,191, 54, 13,190,248,107,211,224,162,146,210,233,255,243,254, 23, 7, 86, 63,185,104,199,232, 81,195, 77,225,242,
+247,132,191, 89,158, 36, 73,194,124,234, 39,148,191,122, 31, 46,159,115, 35,146, 18,105,112,173,191, 2, 42, 45,136, 33, 83, 64,
+101,205, 1, 33,126, 52, 50,109, 52,200,190,163,192,156,248, 2,206, 35,219, 65,181,215, 99,252,172, 25,216,243,246,227, 24,116,
+245, 93, 32,213, 26, 95, 52,228,113,117, 17, 38,160,215,209,208,235, 53, 48,232, 53, 48,232,181,208,235, 53,208,105, 93, 31, 93,
+115,205, 10,101,187,117, 1,231,251, 6,184,106, 80, 23,103, 99,199,162,215,107,160,213,187,124,106,214,115,154,165,159,101,233,
+170,141,147, 79, 85,156, 29,195,113, 28,121,170,226,236,152,165,171, 54, 78,150,123,174,255,197,183,128, 35,201,255,238, 69, 79,
+221, 35, 37,126, 15, 16,199,203,206, 76, 88,176,240,169,197,199,126, 41,143, 15,151,191, 91,194,126, 98,244, 36, 73,226,226,143,
+ 31,161,226,159,127,193,132,155,111, 69,146,222, 14, 88,235, 93,247, 54,126, 0,136, 97,215,130, 97, 89,148, 86,214,227,227,255,
+156,196,182, 47, 75,241,195,207, 53,176,218, 28,192,240, 89,224,172,141,112,254,252, 62,232,243,133,232, 51,112, 16, 46,150,124,
+ 35,139,147, 63,116,182, 0,150, 54,152, 76, 86,239, 57, 59, 28,231, 34,232, 71,128, 82,224, 34,220, 66,112,254,106, 80, 7,139,
+ 22,139, 21,150, 22, 15, 63,149,101,248, 89,101, 96,101,220,192,175,191, 61,144,254,213,238,125,179, 29, 14,167, 14, 0, 28, 14,
+167,238,171,221,251,102, 79,155, 58,182,252,154,233, 87, 93, 8,135,191, 63, 4,230,223,241, 83, 70, 30, 30,252,243,109, 59, 31,
+ 91,246, 82, 54,195,176,234, 97, 67, 7,254,116,253,156,188, 31,114, 39,142, 62,103,212,235,156,187,191, 43, 26,180,235,243, 31,
+243, 78, 85,156,189, 2, 0, 76,230,214,190,119,223,255,183,135,118,127,254,210,179,241, 70, 67,120, 95,154, 16, 65, 42, 10, 68,
+ 18, 4, 42,223, 43, 64, 91,121, 33, 38,221,124, 19,104,219,175,224, 28, 78, 16, 36, 5, 16, 12,184,193,249, 96, 88, 14, 21,231,
+154,241,213,193,106, 56, 25, 22, 37, 39, 47,226, 84,109, 51,254,235,250, 81, 88,112,205, 72,112, 19, 31, 1,202,191, 2,103,185,
+136,126,253, 47,195,217,221, 91,208,239,170,235,194,226,218,209, 7, 32,160,213,209, 96,156,180, 56,242, 9,157,150,239, 19,116,
+198,106, 35,135, 32, 13,196,223,245, 41, 64,175,209,128,213,187,119, 17, 52, 26, 45, 4,217, 4,160,223,216,100, 86, 63,249,244,
+230, 63, 89, 90,219,220, 62, 18, 96,105,109, 75,121,242,233,205,127,186, 98, 76,246,218,228, 36, 99,200,161, 36,198,223, 55, 5,
+252,242, 7, 0, 6,172,204,231,144,174,187, 58,247,220,161,146,147,111, 3,192,202,165,127, 44, 18,239, 27,122,247,128,227,247,
+221,125,243,241,213, 27,222,249,105,235, 59,159,255, 23,199,113,100, 83,147, 57,163,224,239,111, 78,222,176,250,193,239,252, 38,
+ 44,243,155, 8,158, 97, 80, 62, 2, 84,250,210,221, 48,210, 44,174,186,118, 26, 40,214,138, 54, 58, 29, 78, 66,131, 56,107, 57,
+ 8, 16, 96, 13,253,192, 57,157,216,247,203, 5,156,107,104, 69,113,217, 5, 88,218, 92,197,253,225,119,229,184, 53,111, 48, 52,
+125,115, 64, 18, 36,184,182, 38, 36,100,196,227,248,225, 34,127, 84,100,129, 4, 92, 45,128,197,210, 14,147,169, 13, 45,102, 43,
+ 76, 29, 11,195,176,252, 67, 48, 81, 88, 56, 25,139,251,241,190,192, 50, 12, 44, 86, 43,204,102, 27, 90,204, 86, 97, 17, 68,195,
+ 6,110,226,231,221,179,234, 79,109,109,237,241, 6,131,174, 65,156,182,193,160,107,104,107,107,143,159,119,207,170, 63,185,218,
+145,208, 22,191,179,121,252,242,103, 59,140,199,247, 98,179,181,147, 31,124,188,123, 48,255,123,229,210, 5, 69, 43,151, 46, 40,
+242,117,252,242, 71,230,149,204,156,118,197, 78,254,250,223,124,123,112,142,205,214, 78, 30, 63, 81, 97,252,223,175, 10,251, 75,
+157, 19, 76, 24, 65,236,242,216,155,206,227,231, 85, 87, 35, 61, 85,143,156,241,217,160,156,173,104,110,105,199,119, 91, 94, 3,
+107,109, 2, 8, 10, 28, 99, 7,227,116,130, 97, 24,212,254,106,198,247,135,207, 10,226, 7, 0, 45, 77, 1, 28, 11,135,195,193,
+ 95, 0,148,154,134,163,205, 18, 4, 43,105, 8, 45,128, 78,171,134,211, 78, 67, 60, 98,165,211,209, 29,235,209,104, 1,130,131,
+ 63, 3, 32, 41, 10, 26,173, 26, 14,155, 26, 64,103, 45,170,215,119,214,160,129,198, 42, 62,255,120,237,107,252,250, 37,227,230,
+189,206,175, 23,239,217,252,184,112, 80, 56,227, 29,126, 78, 13,151,255,226, 21, 47, 79,255,110,207,161,217,159,127, 85,184,247,
+173, 77,203,254, 69,146,100,192,230,245,169,199,239,253,246,187, 61, 37,215, 57,157,140,166,221,102,143,159,124,237,253,171,218,
+172, 54,227, 93,119,206,122,103,214,204, 43,207,121,243,151,159,119,222, 0,218, 47, 86,225,216, 51, 55, 32, 39, 63, 15,233,125,
+227, 0,214,137,186, 11, 45, 56,242,159,239, 17, 55, 96, 4, 28,173, 45, 32, 18, 40,112,237,173, 96, 27, 78,161, 13,122, 12,239,
+175,135,231,173,158, 62,166, 31, 24,198, 9,212,254,228,242, 4,212,122,216, 29, 28,116,201,225, 15, 16, 10,125, 0,139,165, 13,
+ 38, 97, 36,210, 53,215,135, 97, 59,134,171, 59,106,227,238,132,191,235,179, 12, 3,171,217, 6,179,104, 36,149, 5, 58, 69, 35,
+199, 7,242,157,122,136,231,201, 79, 71, 30,127,105, 56,156, 78,162,168,228,196, 4,155,221, 17, 87,244,211,241, 25, 87,223,240,
+240,224, 87, 95,124,236,141,172,161, 3, 37,171,199,186,186, 70,205,194,191,174,157,223,216,104, 74,227, 56, 78, 8,183, 52, 55,
+ 91,250,245,237,147,120,250,209, 7,239,240,241,186,149,224, 92, 32,130, 32, 80,254,250,159,145, 51,121, 18,210, 18, 9,112,148,
+ 26, 85,167, 47,160,226,200, 49, 92,185,250, 59, 92, 60,248, 57, 26,203,191, 66,106,223, 75, 0,243, 5,224,135,213,176, 93,251,
+ 38, 38,100, 37,225,246,252, 76,124,123,164, 14,118, 39,131,137,151,244,193, 13, 19,250,195,225,112, 64,115,240, 69, 0, 0,153,
+152,137,230, 38, 51,146, 70, 78,148,197,201, 31,132, 22, 64,163, 85, 67,111,231,163, 62, 0,192, 65,175,227,127,247,132, 22,192,
+247,245, 73, 0,106,173, 26,250,142, 56,186,203, 93,101, 93,177,117,184,220, 8,132,250, 44,127,132,222, 1,224,207,135,247,207,
+223,181,238, 75,128, 79, 63,251, 86,110, 83,179,185,159,235, 60, 86,117,238,124,253,136,187,238,253,219,226,249,183, 95,253,241,
+ 3,247,221,122,212,243,248,180,180, 68,219,204,169,227, 14,190,251,193,238,223, 51, 12, 43, 52, 55, 36, 73, 58,243,115,199,252,
+232,235, 58,193, 56, 65,188, 1, 56, 77,191, 34,121,192, 36,112,156, 29, 39,142,156, 64,253,197,102,140, 95,179, 7,234,184, 68,
+ 12,152, 62, 31,251, 62,127, 5,131, 71,143, 6, 89,251, 19, 84,109, 77,208, 22,254, 29,230, 43,151,226,150,220,254,184, 37,183,
+127,103, 95, 2, 44,212, 7, 95,132,186,250, 63, 0,169, 2,219,111, 28, 78,254,239,247,152,180,250, 37,217,156,124,193,245, 68,
+ 24,223, 7,224,107,160, 14, 3,112, 58, 88,215,143, 16,162, 64,129, 16,108,140,200,159, 1, 56, 88,192,106,110, 71,139, 91, 20,
+133, 5,239, 50,178,108,176,195, 72,226, 84, 34,133, 80,249,119, 60, 14,239,195,128,246, 20, 30,201, 19, 63, 73, 71, 81,164,131,
+ 86,171,108,223,252,231,167,241,183,221, 56,229,100, 90, 90,146,215, 52,207, 7, 22,222,116,244,218, 25, 87,156, 89,244,240, 11,
+ 11, 47,212, 53, 13,101, 89, 86,149,152, 24,119,126,229,210,187, 10,125, 26,170,204,130, 16,183, 0,241, 35,115,113,224,255,190,
+129,195,106,129,113,216, 21,184,252,111, 31,128, 82,187, 30,134, 87, 27, 18, 48,112,246, 66, 84,252,242, 3, 70,102, 92, 1,166,
+226, 27,196, 29,123, 11,244,133, 98, 88,114, 22,194,158,154, 3,150,160, 64, 55, 28, 69,220, 47,111, 67,115,126, 31, 0,128, 28,
+ 48, 30, 53,181, 77,232,115,217, 12,196,101, 12,151, 71,202, 15, 68,125, 0, 26, 14, 59,237,166, 76,157,142, 6,135,158,209, 2,
+120, 57,134, 34, 80, 36,160,213,171,225,112,184, 71, 81,244, 90,181,104, 80, 41, 68,254,161,158,231,153,140,223,145, 96, 63,252,
+225,106, 17,164, 6,162, 54,188,252,209,101, 45, 45,173,125, 19,227, 13,231,155, 77,173,253, 0,128, 32, 8,246, 95,239, 61,189,
+142,143, 88,249, 26,192, 26, 54,180,191,229,203,157,107, 94,184,247,254,231,111, 62,114,180, 98,210,149,151,143,216,175, 86,147,
+156,111,165,203, 47, 7,222, 0, 70,222,247, 50,172, 53,101,160,141,201,208,166,244,247, 26, 23, 24, 50,247,207,248,254,254,215,
+144,144,156,139,126,163,255, 0,230,196, 23,160,235,127, 70,242,183,127,145, 40, 36, 26,212,176,153,104,114, 38,224,196,193,111,
+ 49,125,211, 33,217,124,252, 65, 5, 0, 44,195,194, 98,109,135,217,220, 57,218,203,193,213, 55,112,245, 1,196,157,208,174, 29,
+ 1, 22,248,248, 49, 64,134,101, 97,182,218,208, 98,113,143,163, 59,120,241, 50,242, 7,114, 0,128,166, 85,173,118,187,211, 0,
+ 0,159,127, 85, 56,224,250,107,175,170,113,187,158,236,148,228,157,229,151, 63,223,127,145,176,160,236,172,204,139,255,179,121,
+121,193,144,193,233,173,185, 87, 63,180,166,221,102,143,119, 58, 25,205, 83,207,108,157,254,226,154,251,191, 10,196,136, 2,184,
+ 45,175, 60,250,201, 71, 59,247,148,220, 48,103, 98,181, 63, 43, 13,102,194,163, 56, 10,100,204, 28,229,123,254,190, 70,135,188,
+117, 63,160,248,239, 55,163,185,111, 50, 70, 92,182, 0,196,133, 18,112,230, 11,224,204,231, 1,150, 1, 17,151, 6,194,216, 15,
+ 68,122, 14, 42, 79,159, 71,229,177,125,200, 91,243,111,104,147, 67,250,142,159, 23, 72, 0, 32, 72, 2, 90,141, 10, 58, 45, 13,
+157, 86, 13,173, 86, 13,157, 70, 13, 93, 71, 13, 20, 94,248, 50,130,163,193, 62,115, 65, 66,175, 38,161,215,104,161,215,168, 59,
+151, 14,254, 12, 24,183,119,235, 4, 90, 18,226, 13, 23,249,164, 55,109,222,117,227,174,175, 14, 12, 16,239,143, 56, 2,241,103,
+164,121, 94, 61, 99,220,185,225, 89, 3,205, 42, 90,205, 78,155, 50,230, 11, 62,185,127,239, 57,124,211,154,141, 31, 93,238, 43,
+127,207,108,120,255,202,191,173,251,159,171,248,223,183,220,148, 95,169,162,213,172,191, 50,145, 11, 57, 79,110,137,247,233, 82,
+ 51, 48,121,195, 62,112, 41, 35,241,227,174,175, 80,209,148,136,166,164, 60, 48, 87, 60, 0,118,194, 35,104, 73,191, 6, 85,214,
+126, 40,252,247, 65, 52, 90, 40, 76,127,245,103,196,103, 70,238,131,229,157, 45, 64,107,187,240, 92, 46, 63, 25,206,238,100, 59,
+126, 69,218, 5, 10,190, 21,241,123,125, 7, 11,139,213, 6, 75, 71, 13,202,223, 48,135,184,214, 10,226,227,214,151,102,255,238,
+208,183,123, 14, 13, 1,128,170,179, 23,115,150, 63,185, 57,103,249,147,155, 37,143,253,185,240,245,255,150,151,106, 56,252, 25,
+255,231, 3, 88,185,100,222, 15,251, 15, 30,159,220,212,108,201,224, 56,142,220,182,253,235,255,222,187,239, 88,241,245,215,142,
+255,113, 90,126, 78,181,213,106, 87,237, 59, 88,218,255,139,221, 69,147, 43, 78,159, 31, 7,128,163,212, 4,179,244,161,219,139,
+195,230,239,129,160,223,240,160, 82, 35,231,254,141, 48,159, 45, 67,195,177, 31, 81,115,120, 55, 26,190,221, 14,142,113, 34, 41,
+235, 10,164,140,189, 6, 99,110,204, 67,210,240,200,191, 18, 85, 5,116,180, 0,180, 26,118,173,218,109, 50,156, 94,199,191,227,
+170,179, 19,220, 53, 14,144,212, 85,252,143,164,106,212,106,104, 52,158, 62, 52,127, 86,112, 46,208, 51, 79, 44,248,230,250,219,
+ 43,198, 53, 52,154, 50, 3, 31, 45, 51, 93,127,209, 36, 57,252, 3, 68,163,140,122,218,185,105,195, 3,255, 88,248,224,139,139,
+205, 22,107, 95, 0,168, 56,125,238,138, 23, 95,221,121,197,139,175,238,148, 58,133,248,225,199, 99, 19,150, 62,248,123,153, 6,
+ 16,222, 92,160, 64,207,242, 18, 4,129,132,204,108, 36,100,102,227,119,215, 73, 62,148, 22, 21,144, 4, 65,176,237,237, 54,180,
+181,219, 97,182,180,193, 98,105,131,197,226,106, 13, 56,182,195,165, 97,157,238,147,210,162,190,112, 94,139,211,233, 4, 65, 16,
+ 82, 86,192,217,218,219, 97,181, 57, 96,177,182,187, 22, 75, 59, 44, 22,107,135,102, 92, 35,136,193, 44, 52, 77, 50,255,122,119,
+229,154,105,121, 57,159,244, 73, 77, 56, 67,171, 85,173,190, 10, 80,110,154, 86,215, 51,183, 82,150, 29,144,191,220, 80,236,168,
+145, 3, 77,111,188,244,192,186,145,195, 7,236,247,113, 45, 1, 67, 50,211, 15,189,254,210,131,210,205,154,143,124, 6, 74,147,
+ 71, 40,226, 15,103, 74,115, 56, 80, 25,244,154, 95, 79,148,157, 72,235,155,214, 31,214,214, 70, 97, 46, 16,195, 48, 72, 73, 27,
+ 8,198,233,128,169,165, 81, 56, 33,208,135,181,229,124,119, 59,208, 68, 57,207,107,112, 28,135,242,138, 90,104,181,244, 89,207,
+ 99, 13, 6,109,123, 89, 89,185, 46,173,111, 63, 88,173,141, 66, 69,197,178, 14,100,244,205, 0,227,112,160,165,165, 62, 48, 41,
+ 15, 16, 20,152,167,159,152,255, 21, 0,191,157, 73,171,156,135,201, 89, 6,149,213,231,161,211,209, 94,134, 20,144, 63,203,160,
+197,220, 36,155,247,144,193,233,166,173,175, 63,186,101,231,231,251,190,251,191,221,197,227,107,106,235,135, 54,183, 88, 50, 84,
+ 42,170, 77,163, 81, 91,134, 14, 78, 47,253,253, 13,121,123,103, 76,205, 57, 7, 0, 86,171,188, 7, 93, 42, 42,206,195, 32,193,
+ 95, 10,189, 69,252, 0,160,210,106,212, 37, 31,239,216, 49,251,207,247,223,139,227,165,135, 93,115, 50, 88, 14, 14, 7,131,153,
+179,167,163,169,241, 28,204,226,232, 68, 32, 3,144,113,209,192, 70,228,109, 0,133, 7,142,183, 51, 12,187,207,243, 88, 61, 77,
+215,239,248,100,199,192, 69,139,238, 69, 89,217, 97, 48, 14, 7, 28, 44,224,112,176,152, 49,107, 38,154,154,106, 96,181,118,239,
+195, 60, 96, 89, 20, 30, 56,193,112, 28, 91,231,185,203, 47,255,235,102,162,165,177, 86, 38,127,247,198,241,154,233, 99, 42,175,
+153, 62,166,210,215,209,178, 12, 87,148,244,190,226,147, 12, 35,193,223, 19,189, 73,252, 0,160,210,171,201,191,124,188,227,179,
+147,191,191,245, 22,234,206,187, 30,193,201,178, 18, 48, 12,131,172,145, 99,209,167, 79, 95, 28, 41,250, 20,182,246,206, 41, 18,
+129, 16,168, 5, 8, 36,126,169, 99,206,214,214,227,227, 79,247, 58,236,118,231,147,158,199, 38, 16,170,189, 31,237,248,236,246,
+ 91,111,185,137,184,253,174, 71, 81, 94, 86, 2,134,113, 32,107,228,229,232,155,154,134, 35,197,187,130,124,229, 71,228,227, 60,
+181,181,245,248,104,231, 94,214,225,112,122,249,219,126,249,167,245, 67,217,225,207, 96,179,186,119,142,187, 26,213,213,245,120,
+127,199, 30, 73,254, 82,144, 35,252, 80, 94,100, 27, 13, 16, 28,199, 97,208,160,212, 69, 13,245,150,141,119,222,113, 3, 53,247,
+250,235,144, 53,252,119,104, 53,215,227,116,121, 17,236,182,206,218, 95,142,120, 3,217,136, 44, 3, 0, 7,134, 97,113,225, 98,
+ 51,142, 28,171,108,219,249,249, 65,134, 97,157, 15, 57,157,220,155, 82,199,103,102,166,100,215,215, 91, 39,253,191, 59,230, 18,
+ 55,204,189, 14,195,135, 14,133,213, 90,143,202,242, 98,180,183,119,207,179,192, 44,203,224,124, 93, 11, 74,142,156,113,238,216,
+181,143,115, 56, 28,251, 56,142, 43,147, 58,182,147,255, 77,196, 77,115,175, 67, 86,214, 96, 88,173, 77,168,174, 40,129, 35, 66,
+252,131, 53, 30,150,101,112,254,124, 19, 14, 29, 57,229,124,239, 95,254,249,243,184,226,138, 43,184, 3, 7, 14,192,102,179,117,
+139,248, 79,158, 60,137,121,243,230,161,184,184, 88,118,179, 66,240,130, 76, 72, 72, 24,166,166,216,151,219,237,206,203,172, 86,
+ 91, 31,241, 68,169,238, 0, 65,128,165,105,245, 89,150,101,247, 57, 28,204,147, 28,199,157,244,119,124, 74, 74, 74, 60,197, 57,
+243,172,118,123, 74,107,107,187, 22, 8,252, 74,240, 40,131,211,209,116, 43,199,178,117,237, 78,103, 49,199,113, 45,254, 14,238,
+237,252,129, 78, 3,176,219,237,221, 82,243,135, 98, 0,194, 28,146,150,150,150, 83, 0,102, 69,133, 89, 23,160,161,161,193, 4,
+224,139,128, 7,246, 80,244,118,254, 60,236,118, 59, 78,157, 58, 37,233,231, 71,219,237, 81,171, 37,223,153,224, 23,202,103, 82,
+ 21, 68, 12, 26,141,166,110,242,228,201,221,250, 22, 47,141, 70, 19,176,163, 46, 6, 33,203,175, 87,160,224, 55,138,158,209, 21,
+ 87,160,160,155,160, 24,128,130,152,198,255, 7,109, 43,244, 49, 78,182, 48,112, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130,
0};
diff --git a/source/blender/editors/gpencil/Makefile b/source/blender/editors/gpencil/Makefile
index bb76c9c2b23..f4c1cd246f4 100644
--- a/source/blender/editors/gpencil/Makefile
+++ b/source/blender/editors/gpencil/Makefile
@@ -38,7 +38,6 @@ CFLAGS += $(LEVEL_1_C_WARNINGS)
CPPFLAGS += -I$(NAN_GLEW)/include
CPPFLAGS += -I$(OPENGL_HEADERS)
-CPPFLAGS += -I$(NAN_BMFONT)/include
CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include
CPPFLAGS += -I$(NAN_ELBEEM)/include
diff --git a/source/blender/editors/gpencil/SConscript b/source/blender/editors/gpencil/SConscript
index 6c47b2f69ff..af3cbdb901d 100644
--- a/source/blender/editors/gpencil/SConscript
+++ b/source/blender/editors/gpencil/SConscript
@@ -5,7 +5,7 @@ sources = env.Glob('*.c')
incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../imbuf'
incs += ' ../../windowmanager #/intern/guardedalloc #/extern/glew/include'
-incs += ' #/intern/guardedalloc #intern/bmfont ../../gpu'
+incs += ' #/intern/guardedalloc ../../gpu'
incs += ' ../../makesrna ../../render/extern/include #/intern/elbeem/extern'
env.BlenderLib ( 'bf_editors_gpencil', sources, Split(incs), [], libtype=['core'], priority=[45] )
diff --git a/source/blender/editors/gpencil/drawgpencil.c b/source/blender/editors/gpencil/drawgpencil.c
index b467450673d..e5868338f75 100644
--- a/source/blender/editors/gpencil/drawgpencil.c
+++ b/source/blender/editors/gpencil/drawgpencil.c
@@ -37,8 +37,6 @@
#include "IMB_imbuf.h"
#include "IMB_imbuf_types.h"
-#include "BMF_Api.h"
-
#include "BLI_arithb.h"
#include "BLI_blenlib.h"
@@ -53,6 +51,7 @@
#include "BKE_blender.h"
#include "BKE_context.h"
#include "BKE_global.h"
+#include "BKE_gpencil.h"
#include "BKE_sequence.h"
#include "BKE_utildefines.h"
@@ -102,7 +101,7 @@ void gp_ui_renamelayer_cb (void *gpd_arg, void *gpl_arg)
bGPdata *gpd= (bGPdata *)gpd_arg;
bGPDlayer *gpl= (bGPDlayer *)gpl_arg;
- BLI_uniquename(&gpd->layers, gpl, "GP_Layer", offsetof(bGPDlayer, info[0]), 128);
+ BLI_uniquename(&gpd->layers, gpl, "GP_Layer", '.', offsetof(bGPDlayer, info[0]), 128);
gpencil_layer_setactive(gpd, gpl);
scrarea_queue_winredraw(curarea);
@@ -132,8 +131,10 @@ void gp_ui_delstroke_cb (void *gpd, void *gpl)
{
bGPDframe *gpf= gpencil_layer_getframe(gpl, CFRA, 0);
+ if (gpf->framenum != CFRA) return;
+
gpencil_layer_setactive(gpd, gpl);
- gpencil_frame_delete_laststroke(gpf);
+ gpencil_frame_delete_laststroke(gpl, gpf);
scrarea_queue_winredraw(curarea);
}
@@ -871,6 +872,7 @@ static void gp_draw_data (bGPdata *gpd, int offsx, int offsy, int winx, int winy
glDisable(GL_LINE_SMOOTH); // smooth lines
/* show info for debugging the status of gpencil */
+#if 0
if ( ((dflag & GP_DRAWDATA_NOSTATUS)==0) && (gpd->flag & GP_DATA_DISPINFO) ) {
char printable[256];
short xmax;
@@ -904,10 +906,10 @@ static void gp_draw_data (bGPdata *gpd, int offsx, int offsy, int winx, int winy
/* only draw it if view is wide enough (assume padding of 20 is enough for now) */
if (winx > (xmax + 20)) {
- glRasterPos2i(winx-xmax, winy-20);
- BMF_DrawString(G.fonts, printable);
+ BLF_draw_default(winx-xmax, winy-20, 0.0f, printable);
}
}
+#endif
/* restore initial gl conditions */
glLineWidth(1.0);
diff --git a/source/blender/editors/gpencil/editaction_gpencil.c b/source/blender/editors/gpencil/editaction_gpencil.c
index 33ab06c0f67..beb4ed06810 100644
--- a/source/blender/editors/gpencil/editaction_gpencil.c
+++ b/source/blender/editors/gpencil/editaction_gpencil.c
@@ -33,8 +33,6 @@
#include "MEM_guardedalloc.h"
-#include "BMF_Api.h"
-
#include "BLI_arithb.h"
#include "BLI_blenlib.h"
@@ -51,6 +49,7 @@
#include "BKE_utildefines.h"
#include "BKE_blender.h"
#include "BKE_fcurve.h"
+#include "BKE_gpencil.h"
#include "BIF_gl.h"
#include "BIF_glutil.h"
@@ -67,6 +66,8 @@
#include "gpencil_intern.h"
+#if 0 // XXX disabled until grease pencil code stabilises again
+
/* XXX */
static void actdata_filter() {} // is now ANIM_animdata_filter()
static void BIF_undo_push() {}
@@ -506,7 +507,8 @@ void paste_gpdata (Scene *scene)
ScrArea *sa;
/* get area that gp-data comes from */
- sa= gpencil_data_findowner((bGPdata *)ale->owner);
+ //sa= gpencil_data_findowner((bGPdata *)ale->owner);
+ sa = NULL;
/* this should be the right frame... as it may be a pre-existing frame,
* must make sure that only compatible stroke types get copied over
@@ -737,3 +739,4 @@ void mirror_gplayer_frames (bGPDlayer *gpl, Scene *scene, short mode)
}
/* ***************************************** */
+#endif // XXX disabled until Grease Pencil code stabilises again...
diff --git a/source/blender/editors/gpencil/gpencil.c b/source/blender/editors/gpencil/gpencil_edit.c
index 7a251f2c252..bad86c170ab 100644
--- a/source/blender/editors/gpencil/gpencil.c
+++ b/source/blender/editors/gpencil/gpencil_edit.c
@@ -1,5 +1,5 @@
/**
- * $Id$
+ * $Id: gpencil.c 19758 2009-04-16 13:10:08Z aligorith $
*
* ***** BEGIN GPL LICENSE BLOCK *****
*
@@ -33,8 +33,6 @@
#include "MEM_guardedalloc.h"
-#include "BMF_Api.h"
-
#include "IMB_imbuf.h"
#include "IMB_imbuf_types.h"
@@ -58,6 +56,7 @@
#include "BKE_context.h"
#include "BKE_curve.h"
#include "BKE_global.h"
+#include "BKE_gpencil.h"
#include "BKE_image.h"
#include "BKE_library.h"
#include "BKE_utildefines.h"
@@ -88,251 +87,8 @@ static int get_activedevice() {return 0;}
#define L_MOUSE 0
#define R_MOUSE 0
-/* XXX */
-
/* ************************************************** */
-/* GENERAL STUFF */
-
-/* --------- Memory Management ------------ */
-
-/* Free strokes belonging to a gp-frame */
-void free_gpencil_strokes (bGPDframe *gpf)
-{
- bGPDstroke *gps, *gpsn;
-
- /* error checking */
- if (gpf == NULL) return;
-
- /* free strokes */
- for (gps= gpf->strokes.first; gps; gps= gpsn) {
- gpsn= gps->next;
-
- /* free stroke memory arrays, then stroke itself */
- if (gps->points) MEM_freeN(gps->points);
- BLI_freelinkN(&gpf->strokes, gps);
- }
-}
-
-/* Free all of a gp-layer's frames */
-void free_gpencil_frames (bGPDlayer *gpl)
-{
- bGPDframe *gpf, *gpfn;
-
- /* error checking */
- if (gpl == NULL) return;
-
- /* free frames */
- for (gpf= gpl->frames.first; gpf; gpf= gpfn) {
- gpfn= gpf->next;
-
- /* free strokes and their associated memory */
- free_gpencil_strokes(gpf);
- BLI_freelinkN(&gpl->frames, gpf);
- }
-}
-
-/* Free all of the gp-layers for a viewport (list should be &gpd->layers or so) */
-void free_gpencil_layers (ListBase *list)
-{
- bGPDlayer *gpl, *gpln;
-
- /* error checking */
- if (list == NULL) return;
-
- /* delete layers*/
- for (gpl= list->first; gpl; gpl= gpln) {
- gpln= gpl->next;
-
- /* free layers and their data */
- free_gpencil_frames(gpl);
- BLI_freelinkN(list, gpl);
- }
-}
-
-/* Free gp-data and all it's related data */
-void free_gpencil_data (bGPdata *gpd)
-{
- /* free layers then data itself */
- free_gpencil_layers(&gpd->layers);
- MEM_freeN(gpd);
-}
-
-/* -------- Container Creation ---------- */
-
-/* add a new gp-frame to the given layer */
-bGPDframe *gpencil_frame_addnew (bGPDlayer *gpl, int cframe)
-{
- bGPDframe *gpf, *gf;
- short state=0;
-
- /* error checking */
- if ((gpl == NULL) || (cframe <= 0))
- return NULL;
-
- /* allocate memory for this frame */
- gpf= MEM_callocN(sizeof(bGPDframe), "bGPDframe");
- gpf->framenum= cframe;
-
- /* find appropriate place to add frame */
- if (gpl->frames.first) {
- for (gf= gpl->frames.first; gf; gf= gf->next) {
- /* check if frame matches one that is supposed to be added */
- if (gf->framenum == cframe) {
- state= -1;
- break;
- }
-
- /* if current frame has already exceeded the frame to add, add before */
- if (gf->framenum > cframe) {
- BLI_insertlinkbefore(&gpl->frames, gf, gpf);
- state= 1;
- break;
- }
- }
- }
-
- /* check whether frame was added successfully */
- if (state == -1) {
- MEM_freeN(gpf);
- printf("Error: frame (%d) existed already for this layer \n", cframe);
- }
- else if (state == 0) {
- /* add to end then! */
- BLI_addtail(&gpl->frames, gpf);
- }
-
- /* return frame */
- return gpf;
-}
-
-/* add a new gp-layer and make it the active layer */
-bGPDlayer *gpencil_layer_addnew (bGPdata *gpd)
-{
- bGPDlayer *gpl;
-
- /* check that list is ok */
- if (gpd == NULL)
- return NULL;
-
- /* allocate memory for frame and add to end of list */
- gpl= MEM_callocN(sizeof(bGPDlayer), "bGPDlayer");
-
- /* add to datablock */
- BLI_addtail(&gpd->layers, gpl);
-
- /* set basic settings */
- gpl->color[3]= 0.9f;
- gpl->thickness = 3;
-
- /* auto-name */
- sprintf(gpl->info, "GP_Layer");
- BLI_uniquename(&gpd->layers, gpl, "GP_Layer", offsetof(bGPDlayer, info[0]), 128);
-
- /* make this one the active one */
- gpencil_layer_setactive(gpd, gpl);
-
- /* return layer */
- return gpl;
-}
-
-/* add a new gp-datablock */
-bGPdata *gpencil_data_addnew (void)
-{
- bGPdata *gpd;
-
- /* allocate memory for a new block */
- gpd= MEM_callocN(sizeof(bGPdata), "GreasePencilData");
-
- /* initial settings */
- gpd->flag = (GP_DATA_DISPINFO|GP_DATA_EXPAND);
-
- return gpd;
-}
-
-/* -------- Data Duplication ---------- */
-
-/* make a copy of a given gpencil frame */
-bGPDframe *gpencil_frame_duplicate (bGPDframe *src)
-{
- bGPDstroke *gps, *gpsd;
- bGPDframe *dst;
-
- /* error checking */
- if (src == NULL)
- return NULL;
-
- /* make a copy of the source frame */
- dst= MEM_dupallocN(src);
- dst->prev= dst->next= NULL;
-
- /* copy strokes */
- dst->strokes.first = dst->strokes.last= NULL;
- for (gps= src->strokes.first; gps; gps= gps->next) {
- /* make copy of source stroke, then adjust pointer to points too */
- gpsd= MEM_dupallocN(gps);
- gpsd->points= MEM_dupallocN(gps->points);
-
- BLI_addtail(&dst->strokes, gpsd);
- }
-
- /* return new frame */
- return dst;
-}
-
-/* make a copy of a given gpencil layer */
-bGPDlayer *gpencil_layer_duplicate (bGPDlayer *src)
-{
- bGPDframe *gpf, *gpfd;
- bGPDlayer *dst;
-
- /* error checking */
- if (src == NULL)
- return NULL;
-
- /* make a copy of source layer */
- dst= MEM_dupallocN(src);
- dst->prev= dst->next= NULL;
-
- /* copy frames */
- dst->frames.first= dst->frames.last= NULL;
- for (gpf= src->frames.first; gpf; gpf= gpf->next) {
- /* make a copy of source frame */
- gpfd= gpencil_frame_duplicate(gpf);
- BLI_addtail(&dst->frames, gpfd);
-
- /* if source frame was the current layer's 'active' frame, reassign that too */
- if (gpf == dst->actframe)
- dst->actframe= gpfd;
- }
-
- /* return new layer */
- return dst;
-}
-
-/* make a copy of a given gpencil datablock */
-bGPdata *gpencil_data_duplicate (bGPdata *src)
-{
- bGPDlayer *gpl, *gpld;
- bGPdata *dst;
-
- /* error checking */
- if (src == NULL)
- return NULL;
-
- /* make a copy of the base-data */
- dst= MEM_dupallocN(src);
-
- /* copy layers */
- dst->layers.first= dst->layers.last= NULL;
- for (gpl= src->layers.first; gpl; gpl= gpl->next) {
- /* make a copy of source layer and its data */
- gpld= gpencil_layer_duplicate(gpl);
- BLI_addtail(&dst->layers, gpld);
- }
-
- /* return new */
- return dst;
-}
+/* XXX - OLD DEPRECEATED CODE... */
/* ----------- GP-Datablock API ------------- */
@@ -483,210 +239,6 @@ ScrArea *gpencil_data_findowner (bGPdata *gpd)
return NULL;
}
-/* -------- GP-Frame API ---------- */
-
-/* delete the last stroke of the given frame */
-void gpencil_frame_delete_laststroke (bGPDframe *gpf)
-{
- bGPDstroke *gps= (gpf) ? gpf->strokes.last : NULL;
-
- /* error checking */
- if (ELEM(NULL, gpf, gps))
- return;
-
- /* free the stroke and its data */
- MEM_freeN(gps->points);
- BLI_freelinkN(&gpf->strokes, gps);
-}
-
-/* -------- GP-Layer API ---------- */
-
-/* get the appropriate gp-frame from a given layer
- * - this sets the layer's actframe var (if allowed to)
- * - extension beyond range (if first gp-frame is after all frame in interest and cannot add)
- */
-bGPDframe *gpencil_layer_getframe (bGPDlayer *gpl, int cframe, short addnew)
-{
- bGPDframe *gpf = NULL;
- short found = 0;
-
- /* error checking */
- if (gpl == NULL) return NULL;
- if (cframe <= 0) cframe = 1;
-
- /* check if there is already an active frame */
- if (gpl->actframe) {
- gpf= gpl->actframe;
-
- /* do not allow any changes to layer's active frame if layer is locked */
- if (gpl->flag & GP_LAYER_LOCKED)
- return gpf;
- /* do not allow any changes to actframe if frame has painting tag attached to it */
- if (gpf->flag & GP_FRAME_PAINT)
- return gpf;
-
- /* try to find matching frame */
- if (gpf->framenum < cframe) {
- for (; gpf; gpf= gpf->next) {
- if (gpf->framenum == cframe) {
- found= 1;
- break;
- }
- else if ((gpf->next) && (gpf->next->framenum > cframe)) {
- found= 1;
- break;
- }
- }
-
- /* set the appropriate frame */
- if (addnew) {
- if ((found) && (gpf->framenum == cframe))
- gpl->actframe= gpf;
- else
- gpl->actframe= gpencil_frame_addnew(gpl, cframe);
- }
- else if (found)
- gpl->actframe= gpf;
- else
- gpl->actframe= gpl->frames.last;
- }
- else {
- for (; gpf; gpf= gpf->prev) {
- if (gpf->framenum <= cframe) {
- found= 1;
- break;
- }
- }
-
- /* set the appropriate frame */
- if (addnew) {
- if ((found) && (gpf->framenum == cframe))
- gpl->actframe= gpf;
- else
- gpl->actframe= gpencil_frame_addnew(gpl, cframe);
- }
- else if (found)
- gpl->actframe= gpf;
- else
- gpl->actframe= gpl->frames.first;
- }
- }
- else if (gpl->frames.first) {
- /* check which of the ends to start checking from */
- const int first= ((bGPDframe *)(gpl->frames.first))->framenum;
- const int last= ((bGPDframe *)(gpl->frames.last))->framenum;
-
- if (abs(cframe-first) > abs(cframe-last)) {
- /* find gp-frame which is less than or equal to cframe */
- for (gpf= gpl->frames.last; gpf; gpf= gpf->prev) {
- if (gpf->framenum <= cframe) {
- found= 1;
- break;
- }
- }
- }
- else {
- /* find gp-frame which is less than or equal to cframe */
- for (gpf= gpl->frames.first; gpf; gpf= gpf->next) {
- if (gpf->framenum <= cframe) {
- found= 1;
- break;
- }
- }
- }
-
- /* set the appropriate frame */
- if (addnew) {
- if ((found) && (gpf->framenum == cframe))
- gpl->actframe= gpf;
- else
- gpl->actframe= gpencil_frame_addnew(gpl, cframe);
- }
- else if (found)
- gpl->actframe= gpf;
- else {
- /* unresolved errogenous situation! */
- printf("Error: cannot find appropriate gp-frame \n");
- /* gpl->actframe should still be NULL */
- }
- }
- else {
- /* currently no frames (add if allowed to) */
- if (addnew)
- gpl->actframe= gpencil_frame_addnew(gpl, cframe);
- else {
- /* don't do anything... this may be when no frames yet! */
- /* gpl->actframe should still be NULL */
- }
- }
-
- /* return */
- return gpl->actframe;
-}
-
-/* delete the given frame from a layer */
-void gpencil_layer_delframe (bGPDlayer *gpl, bGPDframe *gpf)
-{
- /* error checking */
- if (ELEM(NULL, gpl, gpf))
- return;
-
- /* free the frame and its data */
- free_gpencil_strokes(gpf);
- BLI_freelinkN(&gpl->frames, gpf);
- gpl->actframe = NULL;
-}
-
-/* get the active gp-layer for editing */
-bGPDlayer *gpencil_layer_getactive (bGPdata *gpd)
-{
- bGPDlayer *gpl;
-
- /* error checking */
- if (ELEM(NULL, gpd, gpd->layers.first))
- return NULL;
-
- /* loop over layers until found (assume only one active) */
- for (gpl=gpd->layers.first; gpl; gpl=gpl->next) {
- if (gpl->flag & GP_LAYER_ACTIVE)
- return gpl;
- }
-
- /* no active layer found */
- return NULL;
-}
-
-/* set the active gp-layer */
-void gpencil_layer_setactive (bGPdata *gpd, bGPDlayer *active)
-{
- bGPDlayer *gpl;
-
- /* error checking */
- if (ELEM3(NULL, gpd, gpd->layers.first, active))
- return;
-
- /* loop over layers deactivating all */
- for (gpl=gpd->layers.first; gpl; gpl=gpl->next)
- gpl->flag &= ~GP_LAYER_ACTIVE;
-
- /* set as active one */
- active->flag |= GP_LAYER_ACTIVE;
-}
-
-/* delete the active gp-layer */
-void gpencil_layer_delactive (bGPdata *gpd)
-{
- bGPDlayer *gpl= gpencil_layer_getactive(gpd);
-
- /* error checking */
- if (ELEM(NULL, gpd, gpl))
- return;
-
- /* free layer */
- free_gpencil_frames(gpl);
- BLI_freelinkN(&gpd->layers, gpl);
-}
-
/* ************************************************** */
/* GREASE-PENCIL EDITING - Tools */
@@ -698,7 +250,7 @@ void gpencil_delete_laststroke (bGPdata *gpd, int cfra)
bGPDlayer *gpl= gpencil_layer_getactive(gpd);
bGPDframe *gpf= gpencil_layer_getframe(gpl, cfra, 0);
- gpencil_frame_delete_laststroke(gpf);
+ gpencil_frame_delete_laststroke(gpl, gpf);
}
/* delete the active frame */
@@ -970,6 +522,7 @@ static void gp_stroke_to_bonechain (bGPDlayer *gpl, bGPDstroke *gps, bArmature *
}
/* convert a given grease-pencil layer to a 3d-curve representation (using current view if appropriate) */
+// XXX depreceated... we now have etch-a-ton for this...
static void gp_layer_to_armature (bGPdata *gpd, bGPDlayer *gpl, Scene *scene, View3D *v3d, short mode)
{
bGPDframe *gpf= gpencil_layer_getframe(gpl, scene->r.cfra, 0);
@@ -1068,21 +621,6 @@ void gpencil_convert_operation (short mode)
BIF_undo_push("GPencil Convert");
}
-/* display a menu for converting grease-pencil strokes */
-void gpencil_convert_menu (void)
-{
- bGPdata *gpd= gpencil_data_getactive(NULL);
- short mode;
-
- /* only show menu if it will be relevant */
- if (gpd == NULL) return;
-
- mode= pupmenu("Grease Pencil Convert %t|Active Layer To Path%x1|Active Layer to Bezier%x2|Active Layer to Armature%x3");
- if (mode <= 0) return;
-
- gpencil_convert_operation(mode);
-}
-
/* ************************************************** */
/* GREASE-PENCIL EDITING MODE - Painting */
@@ -1797,7 +1335,7 @@ static void gp_session_initpaint (bContext *C, tGPsdata *p)
if (p->gpd == NULL) {
short ok;
- p->gpd= gpencil_data_addnew();
+ p->gpd= gpencil_data_addnew("GPencil");
ok= gpencil_data_setactive(p->sa, p->gpd);
/* most of the time, the following check isn't needed */
diff --git a/source/blender/editors/gpencil/gpencil_intern.h b/source/blender/editors/gpencil/gpencil_intern.h
index 38cee1e559c..721d8544225 100644
--- a/source/blender/editors/gpencil/gpencil_intern.h
+++ b/source/blender/editors/gpencil/gpencil_intern.h
@@ -32,7 +32,7 @@
/******************************************************* */
/* FILTERED ACTION DATA - TYPES */
-/* XXX */
+/* XXX - TODO: replace this with the modern bAnimListElem... */
/* This struct defines a structure used for quick access */
typedef struct bActListElem {
struct bActListElem *next, *prev;
diff --git a/source/blender/editors/include/BIF_glutil.h b/source/blender/editors/include/BIF_glutil.h
index 63bd451132d..5c611365a7e 100644
--- a/source/blender/editors/include/BIF_glutil.h
+++ b/source/blender/editors/include/BIF_glutil.h
@@ -137,6 +137,8 @@ void glaDrawPixelsSafe_to32(float fx, float fy, int img_w, int img_h, int row_w,
void glaDrawPixelsTex (float x, float y, int img_w, int img_h, int format, void *rect);
+void glaDrawPixelsTexScaled(float x, float y, int img_w, int img_h, int format, void *rect, float scaleX, float scaleY);
+
/* 2D Drawing Assistance */
/** Define a 2D area (viewport, scissor, matrices) for OpenGL rendering.
diff --git a/source/blender/editors/include/BIF_transform.h b/source/blender/editors/include/BIF_transform.h
index d16ac563eb3..e02202eb8e0 100644
--- a/source/blender/editors/include/BIF_transform.h
+++ b/source/blender/editors/include/BIF_transform.h
@@ -37,7 +37,7 @@ struct ListBase;
struct wmEvent;
struct bContext;
struct Object;
-struct uiMenuItem;
+struct uiLayout;
void transform_keymap_for_space(struct wmWindowManager *wm, struct ListBase *keymap, int spaceid);
void transform_operatortypes(void);
@@ -114,7 +114,7 @@ int BIF_menuselectTransformOrientation(void);
void BIF_selectTransformOrientation(struct bContext *C, struct TransformOrientation *ts);
void BIF_selectTransformOrientationValue(struct bContext *C, int orientation);
-void BIF_menuTransformOrientation(struct bContext *C, struct uiMenuItem *head, void *arg);
+void BIF_menuTransformOrientation(struct bContext *C, struct uiLayout *layout, void *arg);
char * BIF_menustringTransformOrientation(const struct bContext *C, char *title); /* the returned value was allocated and needs to be freed after use */
int BIF_countTransformOrientation(const struct bContext *C);
diff --git a/source/blender/editors/include/ED_anim_api.h b/source/blender/editors/include/ED_anim_api.h
index 0210e3d6a85..efc0a0b9a57 100644
--- a/source/blender/editors/include/ED_anim_api.h
+++ b/source/blender/editors/include/ED_anim_api.h
@@ -64,6 +64,7 @@ typedef struct bAnimContext {
struct Scene *scene; /* active scene */
struct Object *obact; /* active object */
+ ListBase *markers; /* active set of markers */
} bAnimContext;
/* Main Data container types */
diff --git a/source/blender/editors/include/ED_fileselect.h b/source/blender/editors/include/ED_fileselect.h
index bb5ced66428..7cbef4984d7 100644
--- a/source/blender/editors/include/ED_fileselect.h
+++ b/source/blender/editors/include/ED_fileselect.h
@@ -62,6 +62,19 @@ typedef struct FileSelectParams {
#define FILE_LAYOUT_HOR 1
#define FILE_LAYOUT_VER 2
+#define MAX_FILE_COLUMN 8
+
+typedef enum FileListColumns {
+ COLUMN_NAME = 0,
+ COLUMN_DATE,
+ COLUMN_TIME,
+ COLUMN_SIZE,
+ COLUMN_MODE1,
+ COLUMN_MODE2,
+ COLUMN_MODE3,
+ COLUMN_OWNER
+} FileListColumns;
+
typedef struct FileLayout
{
/* view settings - XXX - move into own struct */
@@ -78,7 +91,7 @@ typedef struct FileLayout
short width;
short height;
short flag;
-
+ float column_widths[MAX_FILE_COLUMN];
} FileLayout;
FileSelectParams* ED_fileselect_get_params(struct SpaceFile *sfile);
diff --git a/source/blender/editors/include/ED_gpencil.h b/source/blender/editors/include/ED_gpencil.h
index f3f054c2b6f..ad8124c89d7 100644
--- a/source/blender/editors/include/ED_gpencil.h
+++ b/source/blender/editors/include/ED_gpencil.h
@@ -52,32 +52,13 @@ typedef struct tGPspoint {
float pressure; /* pressure of tablet at this point */
} tGPspoint;
-/* ------------ Grease-Pencil API ------------------ */
-
-void free_gpencil_strokes(struct bGPDframe *gpf);
-void free_gpencil_frames(struct bGPDlayer *gpl);
-void free_gpencil_layers(struct ListBase *list);
-void free_gpencil_data(struct bGPdata *gpd);
-
-struct bGPDframe *gpencil_frame_addnew(struct bGPDlayer *gpl, int cframe);
-struct bGPDlayer *gpencil_layer_addnew(struct bGPdata *gpd);
-struct bGPdata *gpencil_data_addnew(void);
-
-struct bGPDframe *gpencil_frame_duplicate(struct bGPDframe *src);
-struct bGPDlayer *gpencil_layer_duplicate(struct bGPDlayer *src);
-struct bGPdata *gpencil_data_duplicate(struct bGPdata *gpd);
+/* ------------ Grease-Pencil Depreceated Stuff ------------------ */
struct bGPdata *gpencil_data_getactive(struct ScrArea *sa);
short gpencil_data_setactive(struct ScrArea *sa, struct bGPdata *gpd);
struct ScrArea *gpencil_data_findowner(struct bGPdata *gpd);
-void gpencil_frame_delete_laststroke(struct bGPDframe *gpf);
-
-struct bGPDframe *gpencil_layer_getframe(struct bGPDlayer *gpl, int cframe, short addnew);
-void gpencil_layer_delframe(struct bGPDlayer *gpl, struct bGPDframe *gpf);
-struct bGPDlayer *gpencil_layer_getactive(struct bGPdata *gpd);
-void gpencil_layer_setactive(struct bGPdata *gpd, struct bGPDlayer *active);
-void gpencil_layer_delactive(struct bGPdata *gpd);
+/* ------------ Grease-Pencil Editing API ------------------ */
void gpencil_delete_actframe(struct bGPdata *gpd, int cfra);
void gpencil_delete_laststroke(struct bGPdata *gpd, int cfra);
@@ -90,6 +71,7 @@ void gpencil_convert_menu(void);
short gpencil_do_paint(struct bContext *C);
+/* ------------ Grease-Pencil Drawing API ------------------ */
/* drawgpencil.c */
void draw_gpencil_2dimage(struct bContext *C, struct ImBuf *ibuf);
diff --git a/source/blender/editors/include/ED_keyframes_edit.h b/source/blender/editors/include/ED_keyframes_edit.h
index 1da1196a462..77e95dc77de 100644
--- a/source/blender/editors/include/ED_keyframes_edit.h
+++ b/source/blender/editors/include/ED_keyframes_edit.h
@@ -30,6 +30,7 @@
#define ED_KEYFRAMES_EDIT_H
struct bAnimContext;
+struct bAnimListElem;
struct FCurve;
struct BezTriple;
struct Scene;
@@ -107,7 +108,16 @@ typedef short (*BeztEditFunc)(BeztEditData *bed, struct BezTriple *bezt);
/* ---------------- Looping API --------------------- */
/* functions for looping over keyframes */
-short ANIM_fcurve_keys_bezier_loop(BeztEditData *bed, struct FCurve *Fcu, BeztEditFunc bezt_ok, BeztEditFunc bezt_cb, FcuEditFunc fcu_cb);
+ /* function for working with F-Curve data only (i.e. when filters have been chosen to explicitly use this) */
+short ANIM_fcurve_keys_bezier_loop(BeztEditData *bed, struct FCurve *fcu, BeztEditFunc bezt_ok, BeztEditFunc bezt_cb, FcuEditFunc fcu_cb);
+ /* function for working with any type (i.e. one of the known types) of animation channel
+ * - filterflag is bDopeSheet->flag (DOPESHEET_FILTERFLAG)
+ */
+short ANIM_animchannel_keys_bezier_loop(BeztEditData *bed, struct bAnimListElem *ale, BeztEditFunc bezt_ok, BeztEditFunc bezt_cb, FcuEditFunc fcu_cb, int filterflag);
+ /* same as above, except bAnimListElem wrapper is not needed...
+ * - keytype is eAnim_KeyType
+ */
+short ANIM_animchanneldata_keys_bezier_loop(BeztEditData *bed, void *data, int keytype, BeztEditFunc bezt_ok, BeztEditFunc bezt_cb, FcuEditFunc fcu_cb, int filterflag);
/* functions for making sure all keyframes are in good order */
void ANIM_editkeyframes_refresh(struct bAnimContext *ac);
@@ -124,6 +134,11 @@ BeztEditFunc ANIM_editkeyframes_select(short mode);
BeztEditFunc ANIM_editkeyframes_handles(short mode);
BeztEditFunc ANIM_editkeyframes_ipo(short mode);
+/* ----------- BezTriple Callback (Assorted Utilities) ---------- */
+
+short bezt_calc_average(BeztEditData *bed, struct BezTriple *bezt);
+short bezt_to_cfraelem(BeztEditData *bed, struct BezTriple *bezt);
+
/* ************************************************ */
/* Destructive Editing API (keyframes_general.c) */
diff --git a/source/blender/editors/include/ED_keyframing.h b/source/blender/editors/include/ED_keyframing.h
index b2846fc0bd9..fbb469f8d43 100644
--- a/source/blender/editors/include/ED_keyframing.h
+++ b/source/blender/editors/include/ED_keyframing.h
@@ -33,13 +33,30 @@ struct ID;
struct KeyingSet;
+struct bAction;
struct FCurve;
struct BezTriple;
+struct bPoseChannel;
+struct bConstraint;
+
+struct bContext;
struct wmOperatorType;
/* ************ Keyframing Management **************** */
+/* Get (or add relevant data to be able to do so) the Active Action for the given
+ * Animation Data block, given an ID block where the Animation Data should reside.
+ */
+struct bAction *verify_adt_action(struct ID *id, short add);
+
+/* Get (or add relevant data to be able to do so) F-Curve from the given Action.
+ * This assumes that all the destinations are valid.
+ */
+struct FCurve *verify_fcurve(struct bAction *act, const char group[], const char rna_path[], const int array_index, short add);
+
+/* -------- */
+
/* Lesser Keyframing API call:
* Use this when validation of necessary animation data isn't necessary as it already
* exists, and there is a beztriple that can be directly copied into the array.
@@ -58,17 +75,74 @@ void insert_vert_fcurve(struct FCurve *fcu, float x, float y, short flag);
* Use this to create any necessary animation data, and then insert a keyframe
* using the current value being keyframed, in the relevant place. Returns success.
*/
-short insertkey(struct ID *id, const char group[], const char rna_path[], int array_index, float cfra, short flag);
+short insert_keyframe(struct ID *id, struct bAction *act, const char group[], const char rna_path[], int array_index, float cfra, short flag);
/* Main Keyframing API call:
* Use this to delete keyframe on current frame for relevant channel. Will perform checks just in case.
*/
-short deletekey(struct ID *id, const char group[], const char rna_path[], int array_index, float cfra, short flag);
+short delete_keyframe(struct ID *id, struct bAction *act, const char group[], const char rna_path[], int array_index, float cfra, short flag);
+/* -------- */
+
+/* Main Keyframe Management operators:
+ * These handle keyframes management from various spaces. They only make use of
+ * Keying Sets.
+ */
+void ANIM_OT_insert_keyframe(struct wmOperatorType *ot);
+void ANIM_OT_delete_keyframe(struct wmOperatorType *ot);
+
+/* Main Keyframe Management operators:
+ * These handle keyframes management from various spaces. They will handle the menus
+ * required for each space.
+ */
+void ANIM_OT_insert_keyframe_menu(struct wmOperatorType *ot);
+void ANIM_OT_delete_keyframe_menu(struct wmOperatorType *ot); // xxx unimplemented yet
+void ANIM_OT_delete_keyframe_old(struct wmOperatorType *ot); // xxx rename and keep?
+
+/* Keyframe managment operators for UI buttons. */
+void ANIM_OT_insert_keyframe_button(struct wmOperatorType *ot);
+void ANIM_OT_delete_keyframe_button(struct wmOperatorType *ot);
+
+/* ************ Keying Sets ********************** */
+
+/* temporary struct to gather data combos to keyframe
+ * (is used by modify_keyframes for 'relative' KeyingSets, provided via the dsources arg)
+ */
+typedef struct bCommonKeySrc {
+ struct bCommonKeySrc *next, *prev;
+
+ /* general data/destination-source settings */
+ struct ID *id; /* id-block this comes from */
+
+ /* specific cases */
+ struct bPoseChannel *pchan;
+ struct bConstraint *con;
+} bCommonKeySrc;
+
+/* -------- */
+
+/* mode for modify_keyframes */
+enum {
+ MODIFYKEY_MODE_INSERT = 0,
+ MODIFYKEY_MODE_DELETE,
+} eModifyKey_Modes;
+
+/* Keyframing Helper Call - use the provided Keying Set to Add/Remove Keyframes */
+int modify_keyframes(struct bContext *C, struct ListBase *dsources, struct bAction *act, struct KeyingSet *ks, short mode, float cfra);
+
+/* -------- */
/* Generate menu of KeyingSets */
char *ANIM_build_keyingsets_menu(struct ListBase *list, short for_edit);
+/* Get the first builtin KeyingSet with the given name, which occurs after the given one (or start of list if none given) */
+struct KeyingSet *ANIM_builtin_keyingset_get_named(struct KeyingSet *prevKS, char name[]);
+
+/* Initialise builtin KeyingSets on startup */
+void init_builtin_keyingsets(void);
+
+/* -------- */
+
/* KeyingSet Editing Operators:
* These can add a new KeyingSet and/or add 'destinations' to the KeyingSets,
* acting as a means by which they can be added outside the Outliner.
@@ -76,19 +150,21 @@ char *ANIM_build_keyingsets_menu(struct ListBase *list, short for_edit);
void ANIM_OT_keyingset_add_new(struct wmOperatorType *ot);
void ANIM_OT_keyingset_add_destination(struct wmOperatorType *ot);
-/* Main Keyframe Management operators:
- * These handle keyframes management from various spaces. They only make use of
- * Keying Sets.
+/* ************ Drivers ********************** */
+
+/* Main Driver Management API calls:
+ * Add a new driver for the specified property on the given ID block
*/
-void ANIM_OT_insert_keyframe(struct wmOperatorType *ot);
-void ANIM_OT_delete_keyframe(struct wmOperatorType *ot);
+short ANIM_add_driver (struct ID *id, const char rna_path[], int array_index, short flag);
-/* Main Keyframe Management operators (legacy style):
- * These handle keyframes management from various spaces. They will handle the menus
- * required for each space.
+/* Main Driver Management API calls:
+ * Remove the driver for the specified property on the given ID block (if available)
*/
-void ANIM_OT_insert_keyframe_old(struct wmOperatorType *ot);
-void ANIM_OT_delete_keyframe_old(struct wmOperatorType *ot);
+short ANIM_remove_driver (struct ID *id, const char rna_path[], int array_index, short flag);
+
+/* Driver management operators for UI buttons */
+void ANIM_OT_add_driver_button(struct wmOperatorType *ot);
+void ANIM_OT_remove_driver_button(struct wmOperatorType *ot);
/* ************ Auto-Keyframing ********************** */
/* Notes:
diff --git a/source/blender/editors/include/ED_markers.h b/source/blender/editors/include/ED_markers.h
index 0e9a82083a6..048bbbd7463 100644
--- a/source/blender/editors/include/ED_markers.h
+++ b/source/blender/editors/include/ED_markers.h
@@ -28,6 +28,11 @@
#ifndef ED_MARKERS_H
#define ED_MARKERS_H
+struct wmWindowManager;
+struct bContext;
+struct TimeMarker;
+
+/* Drawing API ------------------------------ */
/* flags for drawing markers */
enum {
@@ -35,11 +40,18 @@ enum {
DRAW_MARKERS_LOCAL = (1<<1)
};
-struct wmWindowManager;
-struct bContext;
-
void draw_markers_time(const struct bContext *C, int flag);
-int find_nearest_marker_time(ListBase *markers, float dx);
+
+/* Backend API ----------------------------- */
+
+struct TimeMarker *ED_markers_find_nearest_marker(ListBase *markers, float x);
+int ED_markers_find_nearest_marker_time(ListBase *markers, float x);
+
+void ED_markers_get_minmax(ListBase *markers, short sel, float *first, float *last);
+
+void ED_markers_make_cfra_list(ListBase *markers, ListBase *lb, short sel);
+
+/* Operators ------------------------------ */
/* called in screen_ops.c:ED_operatortypes_screen() */
void ED_marker_operatortypes(void);
diff --git a/source/blender/editors/include/ED_mesh.h b/source/blender/editors/include/ED_mesh.h
index fb31d9813c3..e8800f8d029 100644
--- a/source/blender/editors/include/ED_mesh.h
+++ b/source/blender/editors/include/ED_mesh.h
@@ -43,6 +43,7 @@ struct bDeformGroup;
struct MDeformWeight;
struct MDeformVert;
struct Scene;
+struct Mesh;
struct MCol;
struct UvVertMap;
struct UvMapVert;
diff --git a/source/blender/editors/include/ED_screen.h b/source/blender/editors/include/ED_screen.h
index 847120a5804..2484b558b04 100644
--- a/source/blender/editors/include/ED_screen.h
+++ b/source/blender/editors/include/ED_screen.h
@@ -53,6 +53,10 @@ void ED_region_pixelspace(struct ARegion *ar);
void ED_region_init(struct bContext *C, struct ARegion *ar);
void ED_region_tag_redraw(struct ARegion *ar);
void ED_region_tag_redraw_partial(struct ARegion *ar, struct rcti *rct);
+void ED_region_panels_init(struct wmWindowManager *wm, struct ARegion *ar);
+void ED_region_panels(const struct bContext *C, struct ARegion *ar, int vertical, char *context);
+void ED_region_header_init(struct ARegion *ar);
+void ED_region_header(const struct bContext *C, struct ARegion *ar);
/* spaces */
void ED_spacetypes_init(void);
diff --git a/source/blender/editors/include/ED_util.h b/source/blender/editors/include/ED_util.h
index 7002524be7e..7ccbf1ff18d 100644
--- a/source/blender/editors/include/ED_util.h
+++ b/source/blender/editors/include/ED_util.h
@@ -45,6 +45,7 @@ void ED_editors_exit (struct bContext *C);
void ED_undo_push (struct bContext *C, char *str);
void ED_undo_push_op (struct bContext *C, struct wmOperator *op);
void ED_undo_pop (struct bContext *C);
+void ED_undo_redo (struct bContext *C);
void ED_OT_undo (struct wmOperatorType *ot);
void ED_OT_redo (struct wmOperatorType *ot);
diff --git a/source/blender/editors/include/ED_view3d.h b/source/blender/editors/include/ED_view3d.h
index 4170158e3b4..640d16be43f 100644
--- a/source/blender/editors/include/ED_view3d.h
+++ b/source/blender/editors/include/ED_view3d.h
@@ -93,7 +93,7 @@ void viewray(struct ARegion *ar, struct View3D *v3d, short mval[2], float ray_st
int get_view3d_viewplane(struct View3D *v3d, struct RegionView3D *rv3d, int winxi, int winyi, rctf *viewplane, float *clipsta, float *clipend, float *pixsize);
int get_view3d_ortho(struct View3D *v3d, struct RegionView3D *rv3d);
-void view3d_get_object_project_mat(struct RegionView3D *v3d, struct Object *ob, float pmat[4][4], float vmat[4][4]);
+void view3d_get_object_project_mat(struct RegionView3D *v3d, struct Object *ob, float pmat[4][4]);
void view3d_project_float(struct ARegion *a, float *vec, float *adr, float mat[4][4]);
/* drawobject.c itterators */
@@ -124,7 +124,6 @@ short view3d_opengl_select(struct ViewContext *vc, unsigned int *buffer, unsigne
void view3d_set_viewcontext(struct bContext *C, struct ViewContext *vc);
void view3d_operator_needs_opengl(const struct bContext *C);
void view3d_get_view_aligned_coordinate(struct ViewContext *vc, float *fp, short mval[2]);
-void view3d_get_object_project_mat(struct RegionView3D *v3d, struct Object *ob, float pmat[4][4], float vmat[4][4]);;
void view3d_get_transformation(struct ViewContext *vc, struct Object *ob, struct bglMats *mats);
/* XXX should move to arithb.c */
diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h
index f7d21d0374c..61fd6cb0b79 100644
--- a/source/blender/editors/include/UI_interface.h
+++ b/source/blender/editors/include/UI_interface.h
@@ -43,25 +43,28 @@ struct wmOperator;
struct AutoComplete;
struct bContext;
struct Panel;
+struct PanelType;
struct PointerRNA;
struct PropertyRNA;
struct ReportList;
+struct rcti;
+struct rctf;
+struct uiStyle;
+struct uiFontStyle;
+struct ColorBand;
typedef struct uiBut uiBut;
typedef struct uiBlock uiBlock;
typedef struct uiPopupBlockHandle uiPopupBlockHandle;
+typedef struct uiLayout uiLayout;
/* Defines */
/* uiBlock->dt */
-#define UI_EMBOSS 0 /* use one of the themes for drawing */
-#define UI_EMBOSSN 1 /* Nothing */
-#define UI_EMBOSSM 2 /* Minimal builtin emboss, also for logic buttons */
-#define UI_EMBOSSP 3 /* Pulldown */
-#define UI_EMBOSSR 4 /* Rounded */
-#define UI_EMBOSST 5 /* Table */
-
-#define UI_EMBOSSX 0 /* for a python file, which i can't change.... duh! */
+#define UI_EMBOSS 0 /* use widget style for drawing */
+#define UI_EMBOSSN 1 /* Nothing, only icon and/or text */
+#define UI_EMBOSSP 2 /* Pulldown menu style */
+#define UI_EMBOSST 3 /* Table */
/* uiBlock->direction */
#define UI_TOP 1
@@ -87,7 +90,6 @@ typedef struct uiPopupBlockHandle uiPopupBlockHandle;
#define UI_BLOCK_MOVEMOUSE_QUIT 128
#define UI_BLOCK_KEEP_OPEN 256
#define UI_BLOCK_POPUP 512
-#define UI_BLOCK_2_50 1024 /* XXX 2.5 migration flag */
/* uiPopupBlockHandle->menuretval */
#define UI_RETURN_CANCEL 1 /* cancel all menus cascading */
@@ -96,10 +98,6 @@ typedef struct uiPopupBlockHandle uiPopupBlockHandle;
/* block->flag bits 12-15 are identical to but->flag bits */
-/* block->font, for now: bold = medium+1 */
-#define UI_HELV 0
-#define UI_HELVB 1
-
/* panel controls */
#define UI_PNL_TRANSP 1
#define UI_PNL_SOLID 2
@@ -110,25 +108,33 @@ typedef struct uiPopupBlockHandle uiPopupBlockHandle;
#define UI_PNL_UNSTOW 256
#define UI_PNL_SCALE 512
-/* warning the first 4 flags are internal */
+/* warning the first 6 flags are internal */
/* but->flag */
-#define UI_TEXT_LEFT 16
-#define UI_ICON_LEFT 32
-#define UI_ICON_RIGHT 64
+#define UI_TEXT_LEFT 64
+#define UI_ICON_LEFT 128
+#define UI_ICON_SUBMENU 256
/* control for button type block */
-#define UI_MAKE_TOP 128
-#define UI_MAKE_DOWN 256
-#define UI_MAKE_LEFT 512
-#define UI_MAKE_RIGHT 1024
- /* dont draw hilite on mouse over */
-#define UI_NO_HILITE 2048
+#define UI_MAKE_TOP 512
+#define UI_MAKE_DOWN 1024
+#define UI_MAKE_LEFT 2048
+#define UI_MAKE_RIGHT 4096
+
/* button align flag, for drawing groups together */
-#define UI_BUT_ALIGN (15<<12)
-#define UI_BUT_ALIGN_TOP (1<<12)
-#define UI_BUT_ALIGN_LEFT (1<<13)
-#define UI_BUT_ALIGN_RIGHT (1<<14)
-#define UI_BUT_ALIGN_DOWN (1<<15)
-#define UI_BUT_DISABLED (1<<16)
+#define UI_BUT_ALIGN (15<<14)
+#define UI_BUT_ALIGN_TOP (1<<14)
+#define UI_BUT_ALIGN_LEFT (1<<15)
+#define UI_BUT_ALIGN_RIGHT (1<<16)
+#define UI_BUT_ALIGN_DOWN (1<<17)
+
+#define UI_BUT_DISABLED (1<<18)
+ /* dont draw hilite on mouse over */
+#define UI_NO_HILITE (1<<19)
+#define UI_BUT_ANIMATED (1<<20)
+#define UI_BUT_ANIMATED_KEY (1<<21)
+#define UI_BUT_DRIVEN (1<<22)
+
+#define UI_PANEL_WIDTH 340
+#define UI_COMPACT_PANEL_WIDTH 160
/* Button types, bits stored in 1 value... and a short even!
- bits 0-4: bitnr (0-31)
@@ -183,6 +189,7 @@ typedef struct uiPopupBlockHandle uiPopupBlockHandle;
#define FTPREVIEW (35<<9)
#define NUMABS (36<<9)
#define HMENU (37<<9)
+#define TOGBUT (38<<9)
#define BUTTYPE (63<<9)
/* Drawing
@@ -198,51 +205,23 @@ void uiRoundRect(float minx, float miny, float maxx, float maxy, float rad);
void uiDrawMenuBox(float minx, float miny, float maxx, float maxy, short flag, short direction);
void uiDrawBoxShadow(unsigned char alpha, float minx, float miny, float maxx, float maxy);
-/* Menus
- *
- * These functions are used by popup menus, toolbox and header menus. They
- * assume uiMenuItem head is already created, which is done by uiMenuButton
- * for header menus, or can be done with uiPupMenuBegin for popups. These
- * functions do not use uiDefBut functions in order to simplify creating
- * them, and to permit other types of menus (radial, ..) in the future. */
-
-typedef struct uiMenuItem uiMenuItem;
+/* Menu Callbacks */
-typedef void (*uiMenuCreateFunc)(struct bContext *C, uiMenuItem *head, void *arg1);
+typedef void (*uiMenuCreateFunc)(struct bContext *C, struct uiLayout *layout, void *arg1);
typedef void (*uiMenuHandleFunc)(struct bContext *C, void *arg, int event);
-void uiMenuFunc(uiMenuItem *head, uiMenuHandleFunc handlefunc, void *argv);
-void uiMenuContext(uiMenuItem *head, int opcontext);
-
-void uiMenuItemVal(uiMenuItem *head, const char *name, int icon, int argval);
-
-void uiMenuItemEnumO(uiMenuItem *head, const char *name, int icon, char *opname, char *propname, int value);
-void uiMenuItemBooleanO(uiMenuItem *head, const char *name, int icon, char *opname, char *propname, int value);
-void uiMenuItemsEnumO(uiMenuItem *head, char *opname, char *propname);
-void uiMenuItemIntO(uiMenuItem *head, const char *name, int icon, char *opname, char *propname, int value);
-void uiMenuItemFloatO(uiMenuItem *head, const char *name, int icon, char *opname, char *propname, float value);
-void uiMenuItemStringO(uiMenuItem *head, const char *name, int icon, char *opname, char *propname, char *value);
-void uiMenuItemO(uiMenuItem *head, int icon, char *opname);
-
-void uiMenuItemBooleanR(uiMenuItem *head, struct PointerRNA *ptr, char *propname);
-void uiMenuItemEnumR(uiMenuItem *head, struct PointerRNA *ptr, char *propname, int value);
-void uiMenuItemsEnumR(uiMenuItem *head, struct PointerRNA *ptr, char *propname);
-
-void uiMenuLevel(uiMenuItem *head, const char *name, uiMenuCreateFunc newlevel);
-void uiMenuLevelEnumO(uiMenuItem *head, char *opname, char *propname);
-void uiMenuLevelEnumR(uiMenuItem *head, struct PointerRNA *ptr, char *propname);
-
-void uiMenuSeparator(uiMenuItem *head);
-
/* Popup Menus
*
* Functions used to create popup menus. For more extended menus the
* uiPupMenuBegin/End functions can be used to define own items with
- * the uiMenu functions inbetween. If it is a simple confirmation menu
+ * the uiItem functions inbetween. If it is a simple confirmation menu
* or similar, popups can be created with a single function call. */
-uiMenuItem *uiPupMenuBegin(const char *title, int icon);
-void uiPupMenuEnd(struct bContext *C, struct uiMenuItem *head);
+typedef struct uiPopupMenu uiPopupMenu;
+
+uiPopupMenu *uiPupMenuBegin(struct bContext *C, const char *title, int icon);
+void uiPupMenuEnd(struct bContext *C, struct uiPopupMenu *head);
+struct uiLayout *uiPupMenuLayout(uiPopupMenu *head);
void uiPupMenuOkee(struct bContext *C, char *opname, char *str, ...);
void uiPupMenuSaveOver(struct bContext *C, struct wmOperator *op, char *filename);
@@ -273,30 +252,23 @@ void uiPupBlockO(struct bContext *C, uiBlockCreateFunc func, void *arg, char *op
*
* */
-uiBlock *uiBeginBlock(const struct bContext *C, struct ARegion *region, char *name, short dt, short font);
+uiBlock *uiBeginBlock(const struct bContext *C, struct ARegion *region, const char *name, short dt);
void uiEndBlock(const struct bContext *C, uiBlock *block);
void uiDrawBlock(const struct bContext *C, struct uiBlock *block);
uiBlock *uiGetBlock(char *name, struct ARegion *ar);
+void uiBlockSetEmboss(uiBlock *block, short dt);
+
void uiFreeBlock(const struct bContext *C, uiBlock *block);
void uiFreeBlocks(const struct bContext *C, struct ListBase *lb);
void uiFreeInactiveBlocks(const struct bContext *C, struct ListBase *lb);
+void uiBlockSetRegion(uiBlock *block, struct ARegion *region);
+
void uiBlockSetButLock(uiBlock *block, int val, char *lockstr);
void uiBlockClearButLock(uiBlock *block);
-/* Appearance/Cruft
- *
- * These functions should mostly dissappear ideally, or become internal.
- * Font handling could move to blenfont/, and appearance could be dictated
- * better by high level information instead of spread out all over. */
-
-void uiSetCurFont(uiBlock *block, int index);
-void *uiSetCurFont_ext(float aspect);
-void uiDefFont(unsigned int index, void *xl, void *large, void *medium, void *small);
-void *uiBlockGetCurFont (uiBlock *block);
-
/* automatic aligning, horiz or verical */
void uiBlockBeginAlign(uiBlock *block);
void uiBlockEndAlign(uiBlock *block);
@@ -307,10 +279,7 @@ void uiPopupBoundsBlock(uiBlock *block, int addval, int mx, int my);
void uiMenuPopupBoundsBlock(uiBlock *block, int addvall, int mx, int my);
int uiBlocksGetYMin (struct ListBase *lb);
-int uiBlockGetCol (uiBlock *block);
-void uiBlockSetCol (uiBlock *block, int col);
-void uiBlockSetEmboss (uiBlock *block, int emboss);
void uiBlockSetDirection (uiBlock *block, int direction);
void uiBlockFlipOrder (uiBlock *block);
void uiBlockSetFlag (uiBlock *block, int flag);
@@ -322,8 +291,6 @@ int uiButGetRetVal (uiBut *but);
void uiButSetFlag (uiBut *but, int flag);
void uiButClearFlag (uiBut *but, int flag);
-void uiAutoBlock(uiBlock *block, float minx, float miny, float sizex, float sizey, int flag);
-
/* Buttons
*
* Functions to define various types of buttons in a block. Postfixes:
@@ -433,9 +400,10 @@ uiBut *uiDefIconTextBlockBut(uiBlock *block, uiBlockCreateFunc func, void *arg,
void uiDefKeyevtButS(uiBlock *block, int retval, char *str, short x1, short y1, short x2, short y2, short *spoin, char *tip);
void uiBlockPickerButtons(struct uiBlock *block, float *col, float *hsv, float *old, char *hexcol, char mode, short retval);
+void uiBlockColorbandButtons(struct uiBlock *block, struct ColorBand *coba, struct rctf *butr, int event);
uiBut *uiDefAutoButR(uiBlock *block, struct PointerRNA *ptr, struct PropertyRNA *prop, int index, char *name, int icon, int x1, int y1, int x2, int y2);
-int uiDefAutoButsRNA(const struct bContext *C, uiBlock *block, struct PointerRNA *ptr);
+void uiDefAutoButsRNA(const struct bContext *C, uiLayout *layout, struct PointerRNA *ptr);
/* Links
*
@@ -494,22 +462,11 @@ void autocomplete_end(AutoComplete *autocpl, char *autoname);
* could use a good cleanup, though how they will function in 2.5 is
* not clear yet so we postpone that. */
-extern void uiNewPanelTabbed(char *, char *);
-extern int uiNewPanel(const struct bContext *C, struct ARegion *ar, uiBlock *block, char *panelname, char *tabname, int ofsx, int ofsy, int sizex, int sizey);
-extern void uiFreePanels(struct ListBase *lb);
-extern void uiDrawPanels(const struct bContext *C, int re_align);
-
-extern void uiSetPanelsView2d(struct ARegion *ar);
-extern void uiMatchPanelsView2d(struct ARegion *ar);
-
-extern void uiNewPanelHeight(struct uiBlock *block, int sizey);
-extern void uiNewPanelTitle(struct uiBlock *block, char *str);
-extern uiBlock *uiFindOpenPanelBlockName(struct ListBase *lb, char *name);
-extern int uiAlignPanelStep(struct ScrArea *sa, struct ARegion *ar, float fac);
-extern void uiPanelControl(int);
-extern void uiSetPanelHandler(int);
+void uiBeginPanels(const struct bContext *C, struct ARegion *ar);
+void uiEndPanels(const struct bContext *C, struct ARegion *ar);
-struct Panel *uiPanelFromBlock(struct uiBlock *block);
+struct Panel *uiBeginPanel(struct ARegion *ar, uiBlock *block, struct PanelType *pt, int *open);
+void uiEndPanel(uiBlock *block, int width, int height);
/* Handlers
*
@@ -566,67 +523,78 @@ uiBut *uiDefMenuTogR(uiBlock *block, struct PointerRNA *ptr, char *propname, cha
* - Template: predefined layouts for buttons with a number of slots, each
* slot can contain multiple items.
* - Item: item to put in a template slot, being either an RNA property,
- * operator, label or menu currently. */
+ * operator, label or menu. Also regular buttons can be used when setting
+ * uiBlockCurLayout. */
/* layout */
#define UI_LAYOUT_HORIZONTAL 0
#define UI_LAYOUT_VERTICAL 1
-typedef struct uiLayout uiLayout;
+#define UI_LAYOUT_PANEL 0
+#define UI_LAYOUT_HEADER 1
+#define UI_LAYOUT_MENU 2
-uiLayout *uiLayoutBegin(int dir, int x, int y, int w, int h);
-void uiLayoutContext(uiLayout *layout, int opcontext);
-void uiLayoutEnd(const struct bContext *C, uiBlock *block, uiLayout *layout, int *x, int *y);
+#define UI_UNIT_X 20
+#define UI_UNIT_Y 20
-/* vertical button templates */
-#define UI_TSLOT_COLUMN_1 0
-#define UI_TSLOT_COLUMN_2 1
-#define UI_TSLOT_COLUMN_3 2
-#define UI_TSLOT_COLUMN_4 3
-#define UI_TSLOT_COLUMN_5 4
-#define UI_TSLOT_COLUMN_MAX 5
+uiLayout *uiBlockLayout(uiBlock *block, int dir, int type, int x, int y, int size, int em, struct uiStyle *style);
+void uiBlockSetCurLayout(uiBlock *block, uiLayout *layout);
+void uiBlockLayoutResolve(const struct bContext *C, uiBlock *block, int *x, int *y);
+float uiBlockAspect(uiBlock *block); /* temporary */
-#define UI_TSLOT_LR_LEFT 0
-#define UI_TSLOT_LR_RIGHT 1
+void uiLayoutContext(uiLayout *layout, int opcontext);
+void uiLayoutFunc(uiLayout *layout, uiMenuHandleFunc handlefunc, void *argv);
+uiBlock *uiLayoutBlock(uiLayout *layout);
-void uiTemplateLeftRight(uiLayout *layout);
-void uiTemplateColumn(uiLayout *layout);
-uiLayout *uiTemplateStack(uiLayout *layout);
+/* layout specifiers */
+uiLayout *uiLayoutRow(uiLayout *layout, int align);
+uiLayout *uiLayoutColumn(uiLayout *layout, int align);
+uiLayout *uiLayoutColumnFlow(uiLayout *layout, int number, int align);
+uiLayout *uiLayoutBox(uiLayout *layout);
+uiLayout *uiLayoutFree(uiLayout *layout, int align);
+uiLayout *uiLayoutSplit(uiLayout *layout);
-/* horizontal header templates */
-#define UI_TSLOT_HEADER 0
+uiBlock *uiLayoutFreeBlock(uiLayout *layout);
-void uiTemplateHeaderMenus(uiLayout *layout);
-void uiTemplateHeaderButtons(uiLayout *layout);
-void uiTemplateHeaderID(uiLayout *layout, struct PointerRNA *ptr, char *propname, int flag, uiIDPoinFunc func);
-void uiTemplateSetColor(uiLayout *layout, int color);
+/* templates */
+void uiTemplateHeader(uiLayout *layout, struct bContext *C);
+void uiTemplateHeaderID(uiLayout *layout, struct bContext *C, struct PointerRNA *ptr, char *propname,
+ char *newop, char *openop, char *unlinkop);
/* items */
-void uiItemO(uiLayout *layout, int slot, const char *name, int icon, char *opname);
-void uiItemEnumO(uiLayout *layout, int slot, const char *name, int icon, char *opname, char *propname, int value);
-void uiItemsEnumO(uiLayout *layout, int slot, char *opname, char *propname);
-void uiItemBooleanO(uiLayout *layout, int slot, const char *name, int icon, char *opname, char *propname, int value);
-void uiItemIntO(uiLayout *layout, int slot, const char *name, int icon, char *opname, char *propname, int value);
-void uiItemFloatO(uiLayout *layout, int slot, const char *name, int icon, char *opname, char *propname, float value);
-void uiItemStringO(uiLayout *layout, int slot, const char *name, int icon, char *opname, char *propname, char *value);
-void uiItemFullO(uiLayout *layout, int slot, const char *name, int icon, char *idname, IDProperty *properties, int context);
-
-void uiItemR(uiLayout *layout, int slot, const char *name, int icon, struct PointerRNA *ptr, char *propname);
-void uiItemFullR(uiLayout *layout, int slot, const char *name, int icon, struct PointerRNA *ptr, char *propname, int index);
-
-void uiItemLabel(uiLayout *layout, int slot, const char *name, int icon);
-
-void uiItemMenu(uiLayout *layout, int slot, const char *name, int icon, uiMenuCreateFunc func);
-
-/* utilities */
-#define UI_PANEL_WIDTH 340
-#define UI_COMPACT_PANEL_WIDTH 160
-
-typedef void (*uiHeaderCreateFunc)(const struct bContext *C, uiLayout *layout);
-typedef void (*uiPanelCreateFunc)(const struct bContext *C, uiLayout *layout);
-
-void uiRegionPanelLayout(const struct bContext *C, struct ARegion *ar, int vertical, char *context);
-void uiRegionHeaderLayout(const struct bContext *C, struct ARegion *ar);
+void uiItemO(uiLayout *layout, char *name, int icon, char *opname);
+void uiItemEnumO(uiLayout *layout, char *name, int icon, char *opname, char *propname, int value);
+void uiItemsEnumO(uiLayout *layout, char *opname, char *propname);
+void uiItemBooleanO(uiLayout *layout, char *name, int icon, char *opname, char *propname, int value);
+void uiItemIntO(uiLayout *layout, char *name, int icon, char *opname, char *propname, int value);
+void uiItemFloatO(uiLayout *layout, char *name, int icon, char *opname, char *propname, float value);
+void uiItemStringO(uiLayout *layout, char *name, int icon, char *opname, char *propname, char *value);
+void uiItemFullO(uiLayout *layout, char *name, int icon, char *idname, struct IDProperty *properties, int context);
+
+void uiItemR(uiLayout *layout, char *name, int icon, struct PointerRNA *ptr, char *propname, int expand, int slider);
+void uiItemFullR(uiLayout *layout, char *name, int icon, struct PointerRNA *ptr, struct PropertyRNA *prop, int index, int value, int expand, int slider);
+void uiItemEnumR(uiLayout *layout, char *name, int icon, struct PointerRNA *ptr, char *propname, int value);
+void uiItemsEnumR(uiLayout *layout, struct PointerRNA *ptr, char *propname);
+
+void uiItemL(uiLayout *layout, char *name, int icon); /* label */
+void uiItemM(uiLayout *layout, struct bContext *C, char *name, int icon, char *menuname); /* menu */
+void uiItemV(uiLayout *layout, char *name, int icon, int argval); /* value */
+void uiItemS(uiLayout *layout); /* separator */
+
+void uiItemMenuF(uiLayout *layout, char *name, int icon, uiMenuCreateFunc func);
+void uiItemMenuEnumO(uiLayout *layout, char *name, int icon, char *opname, char *propname);
+void uiItemMenuEnumR(uiLayout *layout, char *name, int icon, struct PointerRNA *ptr, char *propname);
+
+/* Animation */
+
+void uiAnimContextProperty(const struct bContext *C, struct PointerRNA *ptr, struct PropertyRNA **prop, int *index);
+
+/* Styled text draw */
+void uiStyleFontSet(struct uiFontStyle *fs);
+void uiStyleFontDraw(struct uiFontStyle *fs, struct rcti *rect, char *str);
+
+int UI_GetStringWidth(char *str); // XXX temp
+void UI_DrawString(float x, float y, char *str); // XXX temp
#endif /* UI_INTERFACE_H */
diff --git a/source/blender/editors/include/UI_resources.h b/source/blender/editors/include/UI_resources.h
index e6c2dfb31e7..09635f3d914 100644
--- a/source/blender/editors/include/UI_resources.h
+++ b/source/blender/editors/include/UI_resources.h
@@ -213,7 +213,7 @@ typedef enum {
ICON_OBJECT_DATA,
ICON_MESH_DATA,
ICON_CURVE_DATA,
- ICON_MBALL_DATA,
+ ICON_META_DATA,
ICON_LATTICE_DATA,
ICON_LAMP_DATA,
ICON_MATERIAL_DATA,
@@ -239,11 +239,11 @@ typedef enum {
ICON_IMAGE_DATA,
ICON_FILE,
ICON_FCURVE,
- ICON_FONT,
+ ICON_FONT_DATA,
ICON_RENDER_RESULT,
- ICON_BLANK080A,
- ICON_BLANK080B,
- ICON_BLANK080C,
+ ICON_SURFACE_DATA,
+ ICON_EMPTY_DATA,
+ ICON_SETTINGS,
ICON_BLANK080D,
ICON_BLANK080E,
ICON_BLANK080F,
@@ -319,7 +319,7 @@ typedef enum {
ICON_BLANK127b,
/* OUTLINER */
- ICON_BLANK128,
+ ICON_OUTLINER_DATA_EMPTY,
ICON_OUTLINER_DATA_MESH,
ICON_OUTLINER_DATA_CURVE,
ICON_OUTLINER_DATA_LATTICE,
@@ -355,7 +355,7 @@ typedef enum {
ICON_MOD_SOFT,
ICON_MOD_SUBSURF,
ICON_HOOK,
- ICON_MOD_PARTICLEINSTANCE,
+ ICON_MOD_PHYSICS,
ICON_MOD_PARTICLES,
ICON_MOD_BOOLEAN,
ICON_MOD_EDGESPLIT,
@@ -366,19 +366,19 @@ typedef enum {
ICON_MOD_LATTICE,
ICON_BLANK143,
ICON_MOD_ARMATURE,
- ICON_BLANK147,
- ICON_BLANK148,
- ICON_BLANK149,
- ICON_BLANK150,
- ICON_BLANK151,
- ICON_BLANK152,
- ICON_BLANK152b,
+ ICON_MOD_SHRINKWRAP,
+ ICON_MOD_CAST,
+ ICON_MOD_MESHDEFORM,
+ ICON_MOD_BEVEL,
+ ICON_MOD_SMOOTH,
+ ICON_MOD_SIMPLEDEFORM,
+ ICON_MOD_MASK,
- /* available */
- ICON_BLANK153,
- ICON_BLANK154,
- ICON_BLANK155,
- ICON_BLANK156,
+ /* MODIFIERS */
+ ICON_MOD_CLOTH,
+ ICON_MOD_EXPLODE,
+ ICON_MOD_FLUIDSIM,
+ ICON_MOD_MULTIRES,
ICON_BLANK157,
ICON_BLANK158,
ICON_BLANK159,
@@ -498,14 +498,14 @@ typedef enum {
ICON_SNAP_VERTEX,
ICON_SNAP_EDGE,
ICON_SNAP_FACE,
- ICON_BLANK218b,
+ ICON_SNAP_VOLUME,
ICON_STICKY_UVS_LOC,
ICON_STICKY_UVS_DISABLE,
ICON_STICKY_UVS_VERT,
ICON_CLIPUV_DEHLT,
ICON_CLIPUV_HLT,
ICON_BLANK219,
- ICON_BLANK220,
+ ICON_SNAP_PEEL_OBJECT,
ICON_BLANK221,
ICON_BLANK222,
ICON_BLANK223,
@@ -612,7 +612,7 @@ typedef enum {
ICON_BOOKMARKS,
ICON_FONTPREVIEW,
ICON_FILTER,
- ICON_BLANK285E,
+ ICON_NEWFOLDER,
ICON_BLANK285F,
ICON_FILE_PARENT,
ICON_FILE_REFRESH,
@@ -652,7 +652,7 @@ typedef enum {
ICON_BLANK314,
ICON_BLANK315,
ICON_BLANK316,
- ICON_BLANK316b,
+ ICON_DISK_DRIVE,
/* SHADING / TEXT */
ICON_MATPLANE,
@@ -794,45 +794,31 @@ typedef enum {
} BIFColorID;
-/* XXX WARNING: this is saved in file, so do not change order! */
enum {
- TH_AUTO, /* for buttons, to signal automatic color assignment */
-
-// uibutton colors
- TH_BUT_OUTLINE,
- TH_BUT_NEUTRAL,
- TH_BUT_ACTION,
- TH_BUT_SETTING,
- TH_BUT_SETTING1,
- TH_BUT_SETTING2,
- TH_BUT_NUM,
- TH_BUT_TEXTFIELD,
- TH_BUT_POPUP,
- TH_BUT_TEXT,
- TH_BUT_TEXT_HI,
- TH_MENU_BACK,
- TH_MENU_ITEM,
- TH_MENU_HILITE,
- TH_MENU_TEXT,
- TH_MENU_TEXT_HI,
-
- TH_BUT_DRAWTYPE,
-
TH_REDALERT,
- TH_CUSTOM,
-
- TH_BUT_TEXTFIELD_HI,
- TH_ICONFILE,
-
+
TH_THEMEUI,
// common colors among spaces
TH_BACK,
TH_TEXT,
TH_TEXT_HI,
+ TH_TITLE,
+
TH_HEADER,
TH_HEADERDESEL,
+ TH_HEADER_TEXT,
+ TH_HEADER_TEXT_HI,
+
+ /* float panels */
TH_PANEL,
+ TH_PANEL_TEXT,
+ TH_PANEL_TEXT_HI,
+
+ TH_BUTBACK,
+ TH_BUTBACK_TEXT,
+ TH_BUTBACK_TEXT_HI,
+
TH_SHADE1,
TH_SHADE2,
TH_HILITE,
@@ -947,16 +933,13 @@ void UI_GetColorPtrBlendShade3ubv(char *cp1, char *cp2, char *col, float fac, in
// get pointer from RNA pointer
int UI_GetIconRNA(struct PointerRNA *ptr);
-struct ScrArea;
-
// internal (blender) usage only, for init and set active
-void UI_SetTheme(struct ScrArea *sa);
-void ui_theme_init_userdef (void);
-void ui_resources_init (void);
-void ui_resources_free (void);
+void UI_SetTheme(int spacetype, int regionid);
/* only for buttons in theme editor! */
char *UI_ThemeGetColorPtr(struct bTheme *btheme, int spacetype, int colorid);
char *UI_ThemeColorsPup(int spacetype);
+void UI_make_axis_color(char *src_col, char *dst_col, char axis);
+
#endif /* UI_ICONS_H */
diff --git a/source/blender/editors/include/UI_view2d.h b/source/blender/editors/include/UI_view2d.h
index 0650a5611dc..7ff312151c5 100644
--- a/source/blender/editors/include/UI_view2d.h
+++ b/source/blender/editors/include/UI_view2d.h
@@ -54,8 +54,6 @@ enum {
V2D_COMMONVIEW_LIST,
/* headers (this is basically the same as listview, but no y-panning) */
V2D_COMMONVIEW_HEADER,
- /* ui listviews, tries to wrap tot inside region width */
- V2D_COMMONVIEW_LIST_UI,
/* ui region containing panels */
V2D_COMMONVIEW_PANELS_UI,
} eView2D_CommonViewTypes;
diff --git a/source/blender/editors/interface/Makefile b/source/blender/editors/interface/Makefile
index fa9550041c5..dfc8187de49 100644
--- a/source/blender/editors/interface/Makefile
+++ b/source/blender/editors/interface/Makefile
@@ -38,7 +38,6 @@ CFLAGS += $(LEVEL_1_C_WARNINGS)
CPPFLAGS += -I$(NAN_GLEW)/include
CPPFLAGS += -I$(OPENGL_HEADERS)
-CPPFLAGS += -I$(NAN_BMFONT)/include
CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include
CPPFLAGS += -I../../windowmanager
@@ -48,7 +47,6 @@ CPPFLAGS += -I../../blenlib
CPPFLAGS += -I../../makesdna
CPPFLAGS += -I../../makesrna
CPPFLAGS += -I../../imbuf
-CPPFLAGS += -I../../ftfont
CPPFLAGS += -I../../blenfont
# own include
diff --git a/source/blender/editors/interface/SConscript b/source/blender/editors/interface/SConscript
index 38cb876beb7..bac3742c12f 100644
--- a/source/blender/editors/interface/SConscript
+++ b/source/blender/editors/interface/SConscript
@@ -3,15 +3,16 @@ Import ('env')
sources = env.Glob('*.c')
+for source in env.Glob('*_api.c'):
+ sources.remove(source)
+
incs = '../include ../../blenlib ../../blenfont ../../blenkernel ../../makesdna ../../imbuf'
-incs += ' ../../makesrna ../../windowmanager #/intern/guardedalloc #intern/bmfont'
+incs += ' ../../makesrna ../../windowmanager #/intern/guardedalloc'
incs += ' #/extern/glew/include'
defs = []
if env['WITH_BF_INTERNATIONAL']:
- incs += ' ../../ftfont'
defs.append('INTERNATIONAL')
- defs.append('FTGL_STATIC_LIBRARY')
env.BlenderLib ( 'bf_editors_interface', sources, Split(incs), Split(defs), libtype=['core'], priority=[110] )
diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c
index 7396edd3025..b4c2969c955 100644
--- a/source/blender/editors/interface/interface.c
+++ b/source/blender/editors/interface/interface.c
@@ -33,6 +33,7 @@
#include "DNA_ID.h"
#include "DNA_listBase.h"
+#include "DNA_scene_types.h"
#include "DNA_screen_types.h"
#include "DNA_texture_types.h"
#include "DNA_userdef_types.h"
@@ -51,13 +52,9 @@
#include "BIF_gl.h"
#include "BIF_glutil.h"
-#include "UI_interface.h"
-#include "UI_text.h"
+#include "BLF_api.h"
-#include "BMF_Api.h"
-#ifdef INTERNATIONAL
-#include "FTF_Api.h"
-#endif
+#include "UI_interface.h"
#include "ED_screen.h"
@@ -83,10 +80,7 @@
*/
static void ui_free_but(const bContext *C, uiBut *but);
-
-/* ************ GLOBALS ************* */
-
-static uiFont UIfont[UI_ARRAY]; // no init needed
+static void ui_rna_ID_autocomplete(bContext *C, char *str, void *arg_but);
/* ************* translation ************** */
@@ -207,7 +201,7 @@ void ui_window_to_region(const ARegion *ar, int *x, int *y)
/* ******************* block calc ************************* */
-static void ui_block_translate(uiBlock *block, int x, int y)
+void ui_block_translate(uiBlock *block, int x, int y)
{
uiBut *bt;
@@ -226,19 +220,21 @@ static void ui_block_translate(uiBlock *block, int x, int y)
static void ui_text_bounds_block(uiBlock *block, float offset)
{
+ uiStyle *style= U.uistyles.first; // XXX pass on as arg
uiBut *bt;
int i = 0, j, x1addval= offset, nextcol;
- bt= block->buttons.first;
- while(bt) {
+ uiStyleFontSet(&style->widget);
+
+ for(bt= block->buttons.first; bt; bt= bt->next) {
if(bt->type!=SEPR) {
- int transopts= ui_translate_buttons();
- if(bt->type==TEX || bt->type==IDPOIN) transopts= 0;
- j= UI_GetStringWidth(bt->font, bt->drawstr, transopts);
+ //int transopts= ui_translate_buttons();
+ //if(bt->type==TEX || bt->type==IDPOIN) transopts= 0;
+
+ j= BLF_width(bt->drawstr);
if(j > i) i = j;
}
- bt= bt->next;
}
/* cope with multi collumns */
@@ -396,68 +392,6 @@ void uiMenuPopupBoundsBlock(uiBlock *block, int addval, int mx, int my)
block->my= my;
}
-void ui_autofill(uiBlock *block)
-{
- uiBut *but;
- float *maxw, *maxh, startx = 0, starty, height = 0;
- float totmaxh;
- int rows=0, /* cols=0, */ i, lasti;
-
- /* first count rows */
- but= block->buttons.last;
- rows= but->x1+1;
-
- /* calculate max width / height for each row */
- maxw= MEM_callocN(sizeof(float)*rows, "maxw");
- maxh= MEM_callocN(sizeof(float)*rows, "maxh");
- but= block->buttons.first;
- while(but) {
- i= but->x1;
- if( maxh[i] < but->y2) maxh[i]= but->y2;
- maxw[i] += but->x2;
- but= but->next;
- }
-
- totmaxh= 0.0;
- for(i=0; i<rows; i++) totmaxh+= maxh[i];
-
- /* apply widths/heights */
- starty= block->maxy;
- but= block->buttons.first;
- lasti= -1;
- while(but) {
- // signal for aligning code
- but->flag |= UI_BUT_ALIGN_DOWN;
-
- i= but->x1;
-
- if(i!=lasti) {
- startx= block->minx;
- height= (maxh[i]*(block->maxy-block->miny))/totmaxh;
- starty-= height;
- lasti= i;
- }
-
- but->y1= starty+but->aspect;
- but->y2= but->y1+height-but->aspect;
-
- but->x2= (but->x2*(block->maxx-block->minx))/maxw[i];
- but->x1= startx+but->aspect;
-
- startx+= but->x2;
- but->x2+= but->x1-but->aspect;
-
- ui_check_but(but);
-
- but= but->next;
- }
-
- uiBlockEndAlign(block);
-
- MEM_freeN(maxw); MEM_freeN(maxh);
- block->autofill= 0;
-}
-
/* ************** LINK LINE DRAWING ************* */
/* link line drawing is not part of buttons or theme.. so we stick with it here */
@@ -473,7 +407,7 @@ static void ui_draw_linkline(uiBut *but, uiLinkLine *line)
vec2[0]= (line->to->x1+line->to->x2)/2.0;
vec2[1]= (line->to->y1+line->to->y2)/2.0;
- if(line->flag & UI_SELECT) UI_ThemeColorShade(but->themecol, 80);
+ if(line->flag & UI_SELECT) glColor3ub(100,100,100);
else glColor3ub(0,0,0);
fdrawline(vec1[0], vec1[1], vec2[0], vec2[1]);
}
@@ -510,7 +444,7 @@ static int ui_but_equals_old(uiBut *but, uiBut *oldbut)
if(but->funcN != oldbut->funcN) return 0;
if(oldbut->func_arg1 != oldbut && but->func_arg1 != oldbut->func_arg1) return 0;
if(oldbut->func_arg2 != oldbut && but->func_arg2 != oldbut->func_arg2) return 0;
- if(!but->funcN && (but->poin != oldbut->poin || but->pointype != oldbut->pointype)) return 0;
+ if(!but->funcN && ((but->poin != oldbut->poin && (uiBut*)oldbut->poin != oldbut) || but->pointype != oldbut->pointype)) return 0;
return 1;
}
@@ -568,10 +502,10 @@ void ui_menu_block_set_keymaps(const bContext *C, uiBlock *block)
return;
for(but=block->buttons.first; but; but=but->next) {
- if(but->opname) {
+ if(but->optype) {
prop= (but->opptr)? but->opptr->data: NULL;
- if(WM_key_event_operator_string(C, but->opname, but->opcontext, prop, buf, sizeof(buf))) {
+ if(WM_key_event_operator_string(C, but->optype->idname, but->opcontext, prop, buf, sizeof(buf))) {
butstr= MEM_mallocN(strlen(but->str)+strlen(buf)+2, "menu_block_set_keymaps");
strcpy(butstr, but->str);
strcat(butstr, "|");
@@ -590,6 +524,7 @@ void ui_menu_block_set_keymaps(const bContext *C, uiBlock *block)
void uiEndBlock(const bContext *C, uiBlock *block)
{
uiBut *but;
+ Scene *scene= CTX_data_scene(C);
/* inherit flags from 'old' buttons that was drawn here previous, based
* on matching buttons, we need this to make button event handling non
@@ -600,8 +535,8 @@ void uiEndBlock(const bContext *C, uiBlock *block)
ui_check_but(but);
/* temp? Proper check for greying out */
- if(but->opname) {
- wmOperatorType *ot= WM_operatortype_find(but->opname);
+ if(but->optype) {
+ wmOperatorType *ot= but->optype;
if(ot==NULL || (ot->poll && ot->poll((bContext *)C)==0)) {
but->flag |= UI_BUT_DISABLED;
but->lock = 1;
@@ -611,6 +546,8 @@ void uiEndBlock(const bContext *C, uiBlock *block)
/* only update soft range while not editing */
if(but->rnaprop && !(but->editval || but->editstr || but->editvec))
ui_set_but_soft_range(but, ui_get_but_val(but));
+
+ ui_but_anim_flag(but, (scene)? scene->r.cfra: 0.0f);
}
if(block->oldblock) {
@@ -622,6 +559,8 @@ void uiEndBlock(const bContext *C, uiBlock *block)
}
/* handle pending stuff */
+ if(block->layouts.first) uiBlockLayoutResolve(C, block, NULL, NULL);
+ ui_block_do_align(block);
if(block->flag & UI_BLOCK_LOOP) ui_menu_block_set_keymaps(C, block);
/* after keymaps! */
@@ -629,7 +568,6 @@ void uiEndBlock(const bContext *C, uiBlock *block)
else if(block->dobounds == 2) ui_text_bounds_block(block, 0.0f);
else if(block->dobounds) ui_popup_bounds_block(C, block, (block->dobounds == 4));
- if(block->autofill) ui_autofill(block);
if(block->minx==0.0 && block->maxx==0.0) uiBoundsBlock(block, 0);
if(block->flag & UI_BUT_ALIGN) uiBlockEndAlign(block);
@@ -638,11 +576,53 @@ void uiEndBlock(const bContext *C, uiBlock *block)
/* ************** BLOCK DRAWING FUNCTION ************* */
+void ui_fontscale(short *points, float aspect)
+{
+ if(aspect < 0.9f || aspect > 1.1f) {
+ float pointsf= *points;
+
+ /* for some reason scaling fonts goes too fast compared to widget size */
+ aspect= sqrt(aspect);
+ pointsf /= aspect;
+
+ if(aspect > 1.0)
+ *points= ceil(pointsf);
+ else
+ *points= floor(pointsf);
+ }
+}
+
+/* project button or block (but==NULL) to pixels in regionspace */
+static void ui_but_to_pixelrect(rcti *rect, const ARegion *ar, uiBlock *block, uiBut *but)
+{
+ float gx, gy;
+ float getsizex, getsizey;
+
+ getsizex= ar->winx;
+ getsizey= ar->winy;
+
+ gx= (but?but->x1:block->minx) + (block->panel?block->panel->ofsx:0.0f);
+ gy= (but?but->y1:block->miny) + (block->panel?block->panel->ofsy:0.0f);
+
+ rect->xmin= floor(getsizex*(0.5+ 0.5*(gx*block->winmat[0][0]+ gy*block->winmat[1][0]+ block->winmat[3][0])));
+ rect->ymin= floor(getsizey*(0.5+ 0.5*(gx*block->winmat[0][1]+ gy*block->winmat[1][1]+ block->winmat[3][1])));
+
+ gx= (but?but->x2:block->maxx) + (block->panel?block->panel->ofsx:0.0f);
+ gy= (but?but->y2:block->maxy) + (block->panel?block->panel->ofsy:0.0f);
+
+ rect->xmax= floor(getsizex*(0.5+ 0.5*(gx*block->winmat[0][0]+ gy*block->winmat[1][0]+ block->winmat[3][0])));
+ rect->ymax= floor(getsizey*(0.5+ 0.5*(gx*block->winmat[0][1]+ gy*block->winmat[1][1]+ block->winmat[3][1])));
+
+}
+
+/* uses local copy of style, to scale things down, and allow widgets to change stuff */
void uiDrawBlock(const bContext *C, uiBlock *block)
{
+ uiStyle style= *((uiStyle *)U.uistyles.first); // XXX pass on as arg
ARegion *ar;
uiBut *but;
-
+ rcti rect;
+
/* get menu region or area region */
ar= CTX_wm_menu(C);
if(!ar)
@@ -654,16 +634,38 @@ void uiDrawBlock(const bContext *C, uiBlock *block)
/* we set this only once */
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ /* scale fonts */
+ ui_fontscale(&style.paneltitle.points, block->aspect);
+ ui_fontscale(&style.grouplabel.points, block->aspect);
+ ui_fontscale(&style.widgetlabel.points, block->aspect);
+ ui_fontscale(&style.widget.points, block->aspect);
+
+ /* scale block min/max to rect */
+ ui_but_to_pixelrect(&rect, ar, block, NULL);
+
+ /* pixel space for AA widgets */
+ wmPushMatrix();
+ wmLoadIdentity();
+
+ wmOrtho2(-0.01f, ar->winx-0.01f, -0.01f, ar->winy-0.01f);
+
+ /* back */
if(block->flag & UI_BLOCK_LOOP)
- uiDrawMenuBox(block->minx, block->miny, block->maxx, block->maxy, block->flag, block->direction);
+ ui_draw_menu_back(&style, block, &rect);
else if(block->panel)
- ui_draw_panel(ar, block);
+ ui_draw_aligned_panel(ar, &style, block, &rect);
if(block->drawextra) block->drawextra(C, block);
- for(but= block->buttons.first; but; but= but->next)
- ui_draw_but(ar, but);
-
+ /* widgets */
+ for(but= block->buttons.first; but; but= but->next) {
+ ui_but_to_pixelrect(&rect, ar, block, but);
+ ui_draw_but(ar, &style, but, &rect);
+ }
+
+ /* restore matrix */
+ wmPopMatrix();
+
ui_draw_links(block);
}
@@ -692,6 +694,7 @@ static void ui_is_but_sel(uiBut *but)
case KEYEVT:
if (value==-1) push= 1;
break;
+ case TOGBUT:
case TOG:
case TOGR:
case TOG3:
@@ -939,65 +942,6 @@ void uiBlockClearButLock(uiBlock *block)
/* *************************************************************** */
-/* XXX 2.50 no button editing */
-
-#if 0
-static void setup_file(uiBlock *block)
-{
- uiBut *but;
- FILE *fp;
-
- fp= fopen("butsetup","w");
- if(fp==NULL);
- else {
- but= block->buttons.first;
- while(but) {
- ui_check_but(but);
- fprintf(fp,"%d,%d,%d,%d %s %s\n", (int)but->x1, (int)but->y1, (int)( but->x2-but->x1), (int)(but->y2-but->y1), but->str, but->tip);
- but= but->next;
- }
- fclose(fp);
- }
-}
-
-
-static void edit_but(uiBlock *block, uiBut *but, uiEvent *uevent)
-{
- short dx, dy, mval[2], mvalo[2], didit=0;
-
- getmouseco_sc(mvalo);
- while(TRUE) {
- if( !(get_mbut() & L_MOUSE) ) break;
-
- getmouseco_sc(mval);
- dx= (mval[0]-mvalo[0]);
- dy= (mval[1]-mvalo[1]);
-
- if(dx!=0 || dy!=0) {
- mvalo[0]= mval[0];
- mvalo[1]= mval[1];
-
- cpack(0xc0c0c0);
- glRectf(but->x1-2, but->y1-2, but->x2+2, but->y2+2);
-
- if((uevent->qual & LR_SHIFTKEY)==0) {
- but->x1 += dx;
- but->y1 += dy;
- }
- but->x2 += dx;
- but->y2 += dy;
-
- ui_draw_but(ar, but);
- ui_block_flush_back(but->block);
- didit= 1;
-
- }
- /* idle for this poor code */
- else PIL_sleep_ms(30);
- }
- if(didit) setup_file(block);
-}
-#endif
/* XXX 2.50 no links supported yet */
#if 0
@@ -1180,8 +1124,8 @@ void ui_get_but_vectorf(uiBut *but, float *vec)
vec[0]= vec[1]= vec[2]= 0.0f;
- if(RNA_property_type(&but->rnapoin, prop) == PROP_FLOAT) {
- tot= RNA_property_array_length(&but->rnapoin, prop);
+ if(RNA_property_type(prop) == PROP_FLOAT) {
+ tot= RNA_property_array_length(prop);
tot= MIN2(tot, 3);
for(a=0; a<tot; a++)
@@ -1214,8 +1158,8 @@ void ui_set_but_vectorf(uiBut *but, float *vec)
if(but->rnaprop) {
prop= but->rnaprop;
- if(RNA_property_type(&but->rnapoin, prop) == PROP_FLOAT) {
- tot= RNA_property_array_length(&but->rnapoin, prop);
+ if(RNA_property_type(prop) == PROP_FLOAT) {
+ tot= RNA_property_array_length(prop);
tot= MIN2(tot, 3);
for(a=0; a<tot; a++)
@@ -1239,7 +1183,7 @@ int ui_is_but_float(uiBut *but)
if(but->pointype==FLO && but->poin)
return 1;
- if(but->rnaprop && RNA_property_type(&but->rnapoin, but->rnaprop) == PROP_FLOAT)
+ if(but->rnaprop && RNA_property_type(but->rnaprop) == PROP_FLOAT)
return 1;
return 0;
@@ -1256,21 +1200,21 @@ double ui_get_but_val(uiBut *but)
if(but->rnaprop) {
prop= but->rnaprop;
- switch(RNA_property_type(&but->rnapoin, prop)) {
+ switch(RNA_property_type(prop)) {
case PROP_BOOLEAN:
- if(RNA_property_array_length(&but->rnapoin, prop))
+ if(RNA_property_array_length(prop))
value= RNA_property_boolean_get_index(&but->rnapoin, prop, but->rnaindex);
else
value= RNA_property_boolean_get(&but->rnapoin, prop);
break;
case PROP_INT:
- if(RNA_property_array_length(&but->rnapoin, prop))
+ if(RNA_property_array_length(prop))
value= RNA_property_int_get_index(&but->rnapoin, prop, but->rnaindex);
else
value= RNA_property_int_get(&but->rnapoin, prop);
break;
case PROP_FLOAT:
- if(RNA_property_array_length(&but->rnapoin, prop))
+ if(RNA_property_array_length(prop))
value= RNA_property_float_get_index(&but->rnapoin, prop, but->rnaindex);
else
value= RNA_property_float_get(&but->rnapoin, prop);
@@ -1320,21 +1264,21 @@ void ui_set_but_val(uiBut *but, double value)
prop= but->rnaprop;
if(RNA_property_editable(&but->rnapoin, prop)) {
- switch(RNA_property_type(&but->rnapoin, prop)) {
+ switch(RNA_property_type(prop)) {
case PROP_BOOLEAN:
- if(RNA_property_array_length(&but->rnapoin, prop))
+ if(RNA_property_array_length(prop))
RNA_property_boolean_set_index(&but->rnapoin, prop, but->rnaindex, value);
else
RNA_property_boolean_set(&but->rnapoin, prop, value);
break;
case PROP_INT:
- if(RNA_property_array_length(&but->rnapoin, prop))
+ if(RNA_property_array_length(prop))
RNA_property_int_set_index(&but->rnapoin, prop, but->rnaindex, value);
else
RNA_property_int_set(&but->rnapoin, prop, value);
break;
case PROP_FLOAT:
- if(RNA_property_array_length(&but->rnapoin, prop))
+ if(RNA_property_array_length(prop))
RNA_property_float_set_index(&but->rnapoin, prop, but->rnaindex, value);
else
RNA_property_float_set(&but->rnapoin, prop, value);
@@ -1401,32 +1345,217 @@ void ui_set_but_val(uiBut *but, double value)
ui_is_but_sel(but);
}
+int ui_get_but_string_max_length(uiBut *but)
+{
+ if(but->type == TEX)
+ return but->hardmax;
+ else if(but->type == IDPOIN)
+ return sizeof(((ID*)NULL)->name)-2;
+ else
+ return UI_MAX_DRAW_STR;
+}
+
void ui_get_but_string(uiBut *but, char *str, int maxlen)
{
- if(but->rnaprop) {
- char *buf;
-
- buf= RNA_property_string_get_alloc(&but->rnapoin, but->rnaprop, str, maxlen);
+ if(but->rnaprop && ELEM(but->type, TEX, IDPOIN)) {
+ PropertyType type;
+ char *buf= NULL;
+
+ type= RNA_property_type(but->rnaprop);
+
+ if(type == PROP_STRING) {
+ /* RNA string */
+ buf= RNA_property_string_get_alloc(&but->rnapoin, but->rnaprop, str, maxlen);
+ }
+ else if(type == PROP_POINTER) {
+ /* RNA pointer */
+ PointerRNA ptr= RNA_property_pointer_get(&but->rnapoin, but->rnaprop);
+ PropertyRNA *nameprop;
- if(buf != str) {
+ if(ptr.data && (nameprop = RNA_struct_name_property(ptr.type)))
+ buf= RNA_property_string_get_alloc(&ptr, nameprop, str, maxlen);
+ else
+ BLI_strncpy(str, "", maxlen);
+ }
+ else
+ BLI_strncpy(str, "", maxlen);
+
+ if(buf && buf != str) {
/* string was too long, we have to truncate */
BLI_strncpy(str, buf, maxlen);
MEM_freeN(buf);
}
}
- else
+ else if(but->type == IDPOIN) {
+ /* ID pointer */
+ ID *id= *(but->idpoin_idpp);
+
+ if(id) BLI_strncpy(str, id->name+2, maxlen);
+ else BLI_strncpy(str, "", maxlen);
+
+ return;
+ }
+ else if(but->type == TEX) {
+ /* string */
BLI_strncpy(str, but->poin, maxlen);
+ return;
+ }
+ else {
+ /* number */
+ double value;
+
+ value= ui_get_but_val(but);
+ if(ui_is_but_float(but)) {
+ if(but->a2) { /* amount of digits defined */
+ if(but->a2==1) BLI_snprintf(str, maxlen, "%.1f", value);
+ else if(but->a2==2) BLI_snprintf(str, maxlen, "%.2f", value);
+ else if(but->a2==3) BLI_snprintf(str, maxlen, "%.3f", value);
+ else BLI_snprintf(str, maxlen, "%.4f", value);
+ }
+ else
+ BLI_snprintf(str, maxlen, "%.3f", value);
+ }
+ else
+ BLI_snprintf(str, maxlen, "%d", (int)value);
+ }
}
-void ui_set_but_string(uiBut *but, const char *str)
+static void ui_rna_ID_collection(bContext *C, uiBut *but, PointerRNA *ptr, PropertyRNA **prop)
{
- if(but->rnaprop) {
- if(RNA_property_editable(&but->rnapoin, but->rnaprop))
- RNA_property_string_set(&but->rnapoin, but->rnaprop, str);
+ CollectionPropertyIterator iter;
+ PropertyRNA *iterprop, *iprop;
+ StructRNA *srna;
+
+ /* look for collection property in Main */
+ RNA_pointer_create(NULL, &RNA_Main, CTX_data_main(C), ptr);
+
+ iterprop= RNA_struct_iterator_property(ptr->type);
+ RNA_property_collection_begin(ptr, iterprop, &iter);
+ *prop= NULL;
+
+ for(; iter.valid; RNA_property_collection_next(&iter)) {
+ iprop= iter.ptr.data;
+
+ /* if it's a collection and has same pointer type, we've got it */
+ if(RNA_property_type(iprop) == PROP_COLLECTION) {
+ srna= RNA_property_pointer_type(iprop);
+
+ if(RNA_property_pointer_type(but->rnaprop) == srna) {
+ *prop= iprop;
+ break;
+ }
+ }
}
- else
+
+ RNA_property_collection_end(&iter);
+}
+
+/* autocomplete callback for RNA pointers */
+static void ui_rna_ID_autocomplete(bContext *C, char *str, void *arg_but)
+{
+ uiBut *but= arg_but;
+ AutoComplete *autocpl;
+ CollectionPropertyIterator iter;
+ PointerRNA ptr;
+ PropertyRNA *prop, *nameprop;
+ char *name;
+
+ if(str[0]==0) return;
+
+ /* get the collection */
+ ui_rna_ID_collection(C, but, &ptr, &prop);
+ if(prop==NULL) return;
+
+ autocpl= autocomplete_begin(str, ui_get_but_string_max_length(but));
+ RNA_property_collection_begin(&ptr, prop, &iter);
+
+ /* loop over items in collection */
+ for(; iter.valid; RNA_property_collection_next(&iter)) {
+ if(iter.ptr.data && (nameprop = RNA_struct_name_property(iter.ptr.type))) {
+ name= RNA_property_string_get_alloc(&iter.ptr, nameprop, NULL, 0);
+
+ if(name) {
+ /* test item name */
+ autocomplete_do_name(autocpl, name);
+ MEM_freeN(name);
+ }
+ }
+ }
+
+ RNA_property_collection_end(&iter);
+ autocomplete_end(autocpl, str);
+}
+
+int ui_set_but_string(bContext *C, uiBut *but, const char *str)
+{
+ if(but->rnaprop && ELEM(but->type, TEX, IDPOIN)) {
+ if(RNA_property_editable(&but->rnapoin, but->rnaprop)) {
+ PropertyType type;
+
+ type= RNA_property_type(but->rnaprop);
+
+ if(type == PROP_STRING) {
+ /* RNA string */
+ RNA_property_string_set(&but->rnapoin, but->rnaprop, str);
+ return 1;
+ }
+ else if(type == PROP_POINTER) {
+ /* RNA pointer */
+ PointerRNA ptr, rptr;
+ PropertyRNA *prop;
+
+ /* XXX only ID pointers at the moment, needs to support
+ * custom collection too for bones, vertex groups, .. */
+ ui_rna_ID_collection(C, but, &ptr, &prop);
+
+ if(prop && RNA_property_collection_lookup_string(&ptr, prop, str, &rptr)) {
+ RNA_property_pointer_set(&but->rnapoin, but->rnaprop, rptr);
+ return 1;
+ }
+ else
+ return 0;
+ }
+ }
+ }
+ else if(but->type == IDPOIN) {
+ /* ID pointer */
+ but->idpoin_func(C, (char*)str, but->idpoin_idpp);
+ return 1;
+ }
+ else if(but->type == TEX) {
+ /* string */
BLI_strncpy(but->poin, str, but->hardmax);
+ return 1;
+ }
+ else {
+ double value;
+
+ /* XXX 2.50 missing python api */
+#if 0
+ if(BPY_button_eval(str, &value)) {
+ BKE_report(CTX_reports(C), RPT_WARNING, "Invalid Python expression, check console");
+ value = 0.0f; /* Zero out value on error */
+
+ if(str[0])
+ return 0;
+ }
+#else
+ value= atof(str);
+#endif
+
+ if(!ui_is_but_float(but)) value= (int)value;
+ if(but->type==NUMABS) value= fabs(value);
+
+ /* not that we use hard limits here */
+ if(value<but->hardmin) value= but->hardmin;
+ if(value>but->hardmax) value= but->hardmax;
+
+ ui_set_but_val(but, value);
+ return 1;
+ }
+
+ return 0;
}
static double soft_range_round_up(double value, double max)
@@ -1461,7 +1590,7 @@ void ui_set_but_soft_range(uiBut *but, double value)
double softmin, softmax, step, precision;
if(but->rnaprop) {
- type= RNA_property_type(&but->rnapoin, but->rnaprop);
+ type= RNA_property_type(but->rnaprop);
if(type == PROP_INT) {
int imin, imax, istep;
@@ -1514,82 +1643,6 @@ void ui_set_but_soft_range(uiBut *but, double value)
}
}
-/* ******************* Font ********************/
-
-static void ui_set_ftf_font(float aspect)
-{
-#ifdef INTERNATIONAL
- if(aspect<1.15) {
- FTF_SetFontSize('l');
- }
- else if(aspect<1.59) {
- FTF_SetFontSize('m');
- }
- else {
- FTF_SetFontSize('s');
- }
-#endif
-}
-
-void uiSetCurFont(uiBlock *block, int index)
-{
- ui_set_ftf_font(block->aspect);
-
- if(block->aspect<0.60) {
- block->curfont= UIfont[index].xl;
- }
- else if(block->aspect<1.15) {
- block->curfont= UIfont[index].large;
- }
- else if(block->aspect<1.59) {
- block->curfont= UIfont[index].medium;
- }
- else {
- block->curfont= UIfont[index].small;
- }
-
- if(block->curfont==NULL) block->curfont= UIfont[index].large;
- if(block->curfont==NULL) block->curfont= UIfont[index].medium;
- if(block->curfont==NULL) printf("error block no font %s\n", block->name);
-
-}
-
-/* called by node editor */
-void *uiSetCurFont_ext(float aspect)
-{
- void *curfont;
-
- ui_set_ftf_font(aspect);
-
- if(aspect<0.60) {
- curfont= UIfont[0].xl;
- }
- else if(aspect<1.15) {
- curfont= UIfont[0].large;
- }
- else if(aspect<1.59) {
- curfont= UIfont[0].medium;
- }
- else {
- curfont= UIfont[0].small;
- }
-
- if(curfont==NULL) curfont= UIfont[0].large;
- if(curfont==NULL) curfont= UIfont[0].medium;
-
- return curfont;
-}
-
-void uiDefFont(unsigned int index, void *xl, void *large, void *medium, void *small)
-{
- if(index>=UI_ARRAY) return;
-
- UIfont[index].xl= xl;
- UIfont[index].large= large;
- UIfont[index].medium= medium;
- UIfont[index].small= small;
-}
-
/* ******************* Free ********************/
static void ui_free_link(uiLink *link)
@@ -1632,9 +1685,6 @@ void uiFreeBlock(const bContext *C, uiBlock *block)
ui_free_but(C, but);
}
- if(block->panel) {
- block->panel->active= 0;
- }
BLI_freelistN(&block->saferct);
MEM_freeN(block);
@@ -1669,21 +1719,18 @@ void uiFreeInactiveBlocks(const bContext *C, ListBase *lb)
}
}
-uiBlock *uiBeginBlock(const bContext *C, ARegion *region, char *name, short dt, short font)
+void uiBlockSetRegion(uiBlock *block, ARegion *region)
{
ListBase *lb;
- uiBlock *block, *oldblock= NULL;
- wmWindow *window;
- int getsizex, getsizey;
+ uiBlock *oldblock= NULL;
- window= CTX_wm_window(C);
lb= &region->uiblocks;
/* each listbase only has one block with this name, free block
* if is already there so it can be rebuilt from scratch */
if(lb) {
for (oldblock= lb->first; oldblock; oldblock= oldblock->next)
- if (BLI_streq(oldblock->name, name))
+ if (BLI_streq(oldblock->name, block->name))
break;
if (oldblock) {
@@ -1691,30 +1738,32 @@ uiBlock *uiBeginBlock(const bContext *C, ARegion *region, char *name, short dt,
oldblock->panel= NULL;
}
}
-
- block= MEM_callocN(sizeof(uiBlock), "uiBlock");
+
block->oldblock= oldblock;
- block->active= 1;
/* at the beginning of the list! for dynamical menus/blocks */
if(lb)
BLI_addhead(lb, block);
+}
- BLI_strncpy(block->name, name, sizeof(block->name));
+uiBlock *uiBeginBlock(const bContext *C, ARegion *region, const char *name, short dt)
+{
+ uiBlock *block;
+ wmWindow *window;
+ int getsizex, getsizey;
-#if 0
- /* draw win */
- block->win= win;
- /* window where queue event should be added, pretty weak this way!
- this is because the 'mainwin' pup menu's */
- block->winq= mywinget();
-#endif
+ window= CTX_wm_window(C);
+ block= MEM_callocN(sizeof(uiBlock), "uiBlock");
+ block->active= 1;
block->dt= dt;
- block->themecol= TH_AUTO;
+ BLI_strncpy(block->name, name, sizeof(block->name));
+
+ if(region)
+ uiBlockSetRegion(block, region);
/* window matrix and aspect */
- if(region->swinid) {
+ if(region && region->swinid) {
wm_subwindow_getmatrix(window, region->swinid, block->winmat);
wm_subwindow_getsize(window, region->swinid, &getsizex, &getsizey);
@@ -1734,8 +1783,6 @@ uiBlock *uiBeginBlock(const bContext *C, ARegion *region, char *name, short dt,
block->flag |= UI_BLOCK_LOOP; /* tag as menu */
}
- uiSetCurFont(block, font);
-
return block;
}
@@ -1751,14 +1798,17 @@ uiBlock *uiGetBlock(char *name, ARegion *ar)
return NULL;
}
+void uiBlockSetEmboss(uiBlock *block, short dt)
+{
+ block->dt= dt;
+}
+
void ui_check_but(uiBut *but)
{
/* if something changed in the button */
- ID *id;
double value;
float okwidth;
int transopts= ui_translate_buttons();
- short pos;
ui_is_but_sel(but);
@@ -1841,7 +1891,7 @@ void ui_check_but(uiBut *but)
}
if(but->rnaprop) {
- PropertySubType pstype = RNA_property_subtype(&but->rnapoin, but->rnaprop);
+ PropertySubType pstype = RNA_property_subtype(but->rnaprop);
if (pstype == PROP_PERCENTAGE)
strcat(but->drawstr, "%");
@@ -1866,11 +1916,6 @@ void ui_check_but(uiBut *but)
break;
case IDPOIN:
- id= *(but->idpoin_idpp);
- strcpy(but->drawstr, but->str);
- if(id) strcat(but->drawstr, id->name+2);
- break;
-
case TEX:
if(!but->editstr) {
char str[UI_MAX_DRAW_STR];
@@ -1908,92 +1953,10 @@ void ui_check_but(uiBut *but)
strcpy(but->drawstr, but->str);
strcat(but->drawstr, but->editstr);
}
-
- if(but->drawstr[0]) {
- but->strwidth= but->aspect*UI_GetStringWidth(but->font, but->drawstr, transopts);
- // here should be check for less space for icon offsets...
- if(but->type==MENU) okwidth -= 15;
- }
- else
- but->strwidth= 0;
-
- /* automatic width */
- if(but->x2==0.0f && but->x1 > 0.0f) {
- but->x2= (but->x1+but->strwidth+6);
- }
-
- if(but->strwidth==0) but->drawstr[0]= 0;
- else if(but->block->flag & UI_BLOCK_LOOP); // no clip string, uiTextBoundsBlock is used (hack!)
- else {
-
- /* calc but->ofs, to draw the string shorter if too long */
- but->ofs= 0;
-
- while(but->strwidth > (int)okwidth ) {
- if ELEM3(but->type, NUM, NUMABS, TEX) { // only these cut off left
- but->ofs++;
- but->strwidth= but->aspect*UI_GetStringWidth(but->font, but->drawstr+but->ofs, transopts);
-
- /* textbut exception */
- if(but->editstr && but->pos != -1) {
- pos= but->pos+strlen(but->str);
- if(pos-1 < but->ofs) {
- pos= but->ofs-pos+1;
- but->ofs -= pos;
- if(but->ofs<0) {
- but->ofs= 0;
- pos--;
- }
- but->drawstr[ strlen(but->drawstr)-pos ]= 0;
- }
- }
- }
- else {
- but->drawstr[ strlen(but->drawstr)-1 ]= 0;
- but->strwidth= but->aspect*UI_GetStringWidth(but->font, but->drawstr, transopts);
- }
-
- if(but->strwidth < 10) break;
- }
- }
+ /* text clipping moved to widget drawing code itself */
}
-static int ui_auto_themecol(uiBut *but)
-{
- if(but->block->flag & UI_BLOCK_LOOP)
- return TH_MENU_ITEM;
-
- switch(but->type) {
- case BUT:
- return TH_BUT_ACTION;
- case ROW:
- case TOG:
- case TOG3:
- case TOGR:
- case TOGN:
- case BUT_TOGDUAL:
- return TH_BUT_SETTING;
- case SLI:
- case NUM:
- case NUMSLI:
- case NUMABS:
- case HSVSLI:
- return TH_BUT_NUM;
- case TEX:
- return TH_BUT_TEXTFIELD;
- case PULLDOWN:
- case HMENU:
- case BLOCK:
- case MENU:
- case BUTM:
- return TH_BUT_POPUP;
- case ROUNDBOX:
- return TH_PANEL;
- default:
- return TH_BUT_NEUTRAL;
- }
-}
void uiBlockBeginAlign(uiBlock *block)
{
@@ -2001,7 +1964,9 @@ void uiBlockBeginAlign(uiBlock *block)
if(block->flag & UI_BUT_ALIGN) uiBlockEndAlign(block);
block->flag |= UI_BUT_ALIGN_DOWN;
- /* buttons declared after this call will this align flag */
+ block->alignnr++;
+
+ /* buttons declared after this call will get this align nr */ // XXX flag?
}
static int buts_are_horiz(uiBut *but1, uiBut *but2)
@@ -2017,42 +1982,38 @@ static int buts_are_horiz(uiBut *but1, uiBut *but2)
void uiBlockEndAlign(uiBlock *block)
{
+ block->flag &= ~UI_BUT_ALIGN; // all 4 flags
+}
+
+int ui_but_can_align(uiBut *but)
+{
+ return !ELEM(but->type, LABEL, ROUNDBOX);
+}
+
+static void ui_block_do_align_but(uiBlock *block, uiBut *first, int nr)
+{
uiBut *prev, *but=NULL, *next;
int flag= 0, cols=0, rows=0;
- int theme= UI_GetThemeValue(TH_BUT_DRAWTYPE);
-
- if ( !(ELEM4(theme, TH_MINIMAL, TH_SHADED, TH_ROUNDED, TH_ROUNDSHADED)) ) {
- block->flag &= ~UI_BUT_ALIGN; // all 4 flags
- return;
- }
- /* auto align:
- - go back to first button of align start (ALIGN_DOWN)
- - compare triples, and define flags
- */
- prev= block->buttons.last;
- while(prev) {
- if( (prev->flag & UI_BUT_ALIGN_DOWN)) but= prev;
- else break;
-
- if(but && but->next) {
+ /* auto align */
+
+ for(but=first; but && but->alignnr == nr; but=but->next) {
+ if(but->next && but->next->alignnr == nr) {
if(buts_are_horiz(but, but->next)) cols++;
else rows++;
}
-
- prev= prev->prev;
}
- if(but==NULL) return;
-
+
/* rows==0: 1 row, cols==0: 1 collumn */
/* note; how it uses 'flag' in loop below (either set it, or OR it) is confusing */
- prev= NULL;
- while(but) {
+ for(but=first, prev=NULL; but && but->alignnr == nr; prev=but, but=but->next) {
next= but->next;
-
+ if(next && next->alignnr != nr)
+ next= NULL;
+
/* clear old flag */
- but->flag &= ~UI_BUT_ALIGN_DOWN;
+ but->flag &= ~UI_BUT_ALIGN;
if(flag==0) { /* first case */
if(next) {
@@ -2081,15 +2042,16 @@ void uiBlockEndAlign(uiBlock *block)
else if(buts_are_horiz(but, next)) {
/* check if this is already second row */
if( prev && buts_are_horiz(prev, but)==0) {
+ flag &= ~UI_BUT_ALIGN_LEFT;
flag |= UI_BUT_ALIGN_TOP;
/* exception case: bottom row */
if(rows>0) {
uiBut *bt= but;
- while(bt) {
- if(bt->next && buts_are_horiz(bt, bt->next)==0 ) break;
+ while(bt && bt->alignnr == nr) {
+ if(bt->next && bt->next->alignnr == nr && buts_are_horiz(bt, bt->next)==0 ) break;
bt= bt->next;
}
- if(bt==0) flag= UI_BUT_ALIGN_TOP|UI_BUT_ALIGN_RIGHT;
+ if(bt==0 || bt->alignnr != nr) flag= UI_BUT_ALIGN_TOP|UI_BUT_ALIGN_RIGHT;
}
}
else flag |= UI_BUT_ALIGN_LEFT;
@@ -2099,6 +2061,10 @@ void uiBlockEndAlign(uiBlock *block)
flag |= UI_BUT_ALIGN_TOP;
}
else { /* next button switches to new row */
+
+ if(prev && buts_are_horiz(prev, but))
+ flag |= UI_BUT_ALIGN_LEFT;
+
if( (flag & UI_BUT_ALIGN_TOP)==0) { /* stil top row */
if(prev)
flag= UI_BUT_ALIGN_DOWN|UI_BUT_ALIGN_LEFT;
@@ -2141,35 +2107,30 @@ void uiBlockEndAlign(uiBlock *block)
}
}
}
-
- prev= but;
- but= next;
}
-
- block->flag &= ~UI_BUT_ALIGN; // all 4 flags
}
-#if 0
-static void uiBlockEndAligno(uiBlock *block)
+void ui_block_do_align(uiBlock *block)
{
uiBut *but;
-
- /* correct last defined button */
- but= block->buttons.last;
- if(but) {
- /* vertical align case */
- if( (block->flag & UI_BUT_ALIGN) == (UI_BUT_ALIGN_TOP|UI_BUT_ALIGN_DOWN) ) {
- but->flag &= ~UI_BUT_ALIGN_DOWN;
- }
- /* horizontal align case */
- if( (block->flag & UI_BUT_ALIGN) == (UI_BUT_ALIGN_LEFT|UI_BUT_ALIGN_RIGHT) ) {
- but->flag &= ~UI_BUT_ALIGN_RIGHT;
+ int nr;
+
+ /* align buttons with same align nr */
+ for(but=block->buttons.first; but;) {
+ if(but->alignnr) {
+ nr= but->alignnr;
+ ui_block_do_align_but(block, but, nr);
+
+ /* skip with same number */
+ for(; but && but->alignnr == nr; but=but->next);
+
+ if(!but)
+ break;
}
- /* else do nothing, manually provided flags */
+ else
+ but= but->next;
}
- block->flag &= ~UI_BUT_ALIGN; // all 4 flags
}
-#endif
/*
ui_def_but is the function that draws many button types
@@ -2186,12 +2147,8 @@ static uiBut *ui_def_but(uiBlock *block, int type, int retval, char *str, short
short slen;
if(type & BUTPOIN) { /* a pointer is required */
- if(poin==NULL) {
- /* if pointer is zero, button is removed and not drawn */
- UI_ThemeColor(block->themecol);
- glRects(x1, y1, x1+x2, y1+y2);
+ if(poin==NULL)
return NULL;
- }
}
but= MEM_callocN(sizeof(uiBut), "uiBut");
@@ -2202,8 +2159,6 @@ static uiBut *ui_def_but(uiBlock *block, int type, int retval, char *str, short
but->bitnr= type & 31;
but->icon = 0;
- BLI_addtail(&block->buttons, but);
-
but->retval= retval;
if( strlen(str)>=UI_MAX_NAME_STR-1 ) {
but->str= MEM_callocN( strlen(str)+2, "uiDefBut");
@@ -2215,14 +2170,9 @@ static uiBut *ui_def_but(uiBlock *block, int type, int retval, char *str, short
}
but->x1= x1;
but->y1= y1;
- if(block->autofill) {
- but->x2= x2;
- but->y2= y2;
- }
- else {
- but->x2= (x1+x2);
- but->y2= (y1+y2);
- }
+ but->x2= (x1+x2);
+ but->y2= (y1+y2);
+
but->poin= poin;
but->hardmin= but->softmin= min;
but->hardmax= but->softmax= max;
@@ -2230,24 +2180,20 @@ static uiBut *ui_def_but(uiBlock *block, int type, int retval, char *str, short
but->a2= a2;
but->tip= tip;
- but->font= block->curfont;
-
but->lock= block->lock;
but->lockstr= block->lockstr;
+ but->dt= block->dt;
- but->aspect= block->aspect;
- but->win= block->win;
+ but->aspect= 1.0f; //XXX block->aspect;
but->block= block; // pointer back, used for frontbuffer status, and picker
- if(block->themecol==TH_AUTO) but->themecol= ui_auto_themecol(but);
- else but->themecol= block->themecol;
+ if((block->flag & UI_BUT_ALIGN) && ui_but_can_align(but))
+ but->alignnr= block->alignnr;
but->func= block->func;
but->func_arg1= block->func_arg1;
but->func_arg2= block->func_arg2;
- ui_set_embossfunc(but, block->dt);
-
but->pos= -1; /* cursor invisible */
if(ELEM(but->type, NUM, NUMABS)) { /* add a space to name */
@@ -2266,7 +2212,7 @@ static uiBut *ui_def_but(uiBlock *block, int type, int retval, char *str, short
rgb_to_hsv(rgb[0], rgb[1], rgb[2], but->hsv, but->hsv+1, but->hsv+2);
}
- if((block->flag & UI_BLOCK_LOOP) || ELEM8(but->type, HSVSLI , NUMSLI, MENU, TEX, LABEL, IDPOIN, BLOCK, BUTM)) {
+ if((block->flag & UI_BLOCK_LOOP) || ELEM6(but->type, MENU, TEX, LABEL, IDPOIN, BLOCK, BUTM)) {
but->flag |= UI_TEXT_LEFT;
}
@@ -2274,9 +2220,6 @@ static uiBut *ui_def_but(uiBlock *block, int type, int retval, char *str, short
but->flag |= UI_ICON_LEFT;
}
- if(but->type==ROUNDBOX)
- but->flag |= UI_NO_HILITE;
-
but->flag |= (block->flag & UI_BUT_ALIGN);
if(block->flag & UI_BLOCK_NO_HILITE)
but->flag |= UI_NO_HILITE;
@@ -2287,6 +2230,16 @@ static uiBut *ui_def_but(uiBlock *block, int type, int retval, char *str, short
}
}
+ if(but->type == ROUNDBOX) {
+ but->flag |= UI_NO_HILITE;
+ BLI_addhead(&block->buttons, but);
+ }
+ else
+ BLI_addtail(&block->buttons, but);
+
+ if(block->curlayout)
+ ui_layout_add_but(block->curlayout, but);
+
return but;
}
@@ -2300,7 +2253,7 @@ uiBut *ui_def_but_rna(uiBlock *block, int type, int retval, char *str, short x1,
prop= RNA_struct_find_property(ptr, propname);
if(prop) {
- proptype= RNA_property_type(ptr, prop);
+ proptype= RNA_property_type(prop);
/* use rna values if parameters are not specified */
if(!str) {
@@ -2312,7 +2265,7 @@ uiBut *ui_def_but_rna(uiBlock *block, int type, int retval, char *str, short x1,
RNA_property_enum_items(ptr, prop, &item, &totitem);
dynstr= BLI_dynstr_new();
- BLI_dynstr_appendf(dynstr, "%s%%t", RNA_property_ui_name(ptr, prop));
+ BLI_dynstr_appendf(dynstr, "%s%%t", RNA_property_ui_name(prop));
for(i=0; i<totitem; i++)
BLI_dynstr_appendf(dynstr, "|%s %%x%d", item[i].name, item[i].value);
str= BLI_dynstr_get_cstring(dynstr);
@@ -2330,10 +2283,10 @@ uiBut *ui_def_but_rna(uiBlock *block, int type, int retval, char *str, short x1,
str= (char*)item[i].name;
if(!str)
- str= (char*)RNA_property_ui_name(ptr, prop);
+ str= (char*)RNA_property_ui_name(prop);
}
else
- str= (char*)RNA_property_ui_name(ptr, prop);
+ str= (char*)RNA_property_ui_name(prop);
}
if(!tip) {
@@ -2354,7 +2307,7 @@ uiBut *ui_def_but_rna(uiBlock *block, int type, int retval, char *str, short x1,
}
if(!tip)
- tip= (char*)RNA_property_ui_description(ptr, prop);
+ tip= (char*)RNA_property_ui_description(prop);
if(min == max || a1 == -1 || a2 == -1) {
if(proptype == PROP_INT) {
@@ -2389,7 +2342,7 @@ uiBut *ui_def_but_rna(uiBlock *block, int type, int retval, char *str, short x1,
}
else if(proptype == PROP_STRING) {
min= 0;
- max= RNA_property_string_maxlength(ptr, prop);
+ max= RNA_property_string_maxlength(prop);
if(max == 0) /* interface code should ideally support unlimited length */
max= UI_MAX_DRAW_STR;
}
@@ -2405,10 +2358,13 @@ uiBut *ui_def_but_rna(uiBlock *block, int type, int retval, char *str, short x1,
but->rnapoin= *ptr;
but->rnaprop= prop;
- if(RNA_property_array_length(&but->rnapoin, but->rnaprop))
+ if(RNA_property_array_length(but->rnaprop))
but->rnaindex= index;
else
but->rnaindex= 0;
+
+ if(type == IDPOIN)
+ uiButSetCompleteFunc(but, ui_rna_ID_autocomplete, but);
}
if (!prop || !RNA_property_editable(&but->rnapoin, prop)) {
@@ -2440,7 +2396,7 @@ uiBut *ui_def_but_operator(uiBlock *block, int type, char *opname, int opcontext
}
but= ui_def_but(block, type, -1, str, x1, y1, x2, y2, NULL, 0, 0, 0, 0, tip);
- but->opname= opname;
+ but->optype= ot;
but->opcontext= opcontext;
if(!ot) {
@@ -2807,7 +2763,7 @@ uiBut *uiDefMenuSep(uiBlock *block)
uiBut *uiDefMenuSub(uiBlock *block, uiBlockCreateFunc func, char *name)
{
int y= ui_menu_y(block) - MENU_ITEM_HEIGHT;
- return uiDefIconTextBlockBut(block, func, NULL, ICON_RIGHTARROW_THIN, name, 0, y, MENU_WIDTH, MENU_ITEM_HEIGHT-1, "");
+ return uiDefIconTextBlockBut(block, func, NULL, ICON_BLANK1, name, 0, y, MENU_WIDTH, MENU_ITEM_HEIGHT-1, "");
}
uiBut *uiDefMenuTogR(uiBlock *block, PointerRNA *ptr, char *propname, char *propvalue, char *name)
@@ -2821,7 +2777,7 @@ uiBut *uiDefMenuTogR(uiBlock *block, PointerRNA *ptr, char *propname, char *prop
prop= RNA_struct_find_property(ptr, propname);
if(prop) {
- type= RNA_property_type(ptr, prop);
+ type= RNA_property_type(prop);
if(type == PROP_BOOLEAN) {
if(RNA_property_boolean_get(ptr, prop))
@@ -2860,17 +2816,6 @@ uiBut *uiDefMenuTogR(uiBlock *block, PointerRNA *ptr, char *propname, char *prop
/* END Button containing both string label and icon */
-void uiAutoBlock(uiBlock *block, float minx, float miny, float sizex, float sizey, int flag)
-{
- block->minx= minx;
- block->maxx= minx+sizex;
- block->miny= miny;
- block->maxy= miny+sizey;
-
- block->autofill= flag; /* also check for if it has to be done */
-
-}
-
void uiSetButLink(uiBut *but, void **poin, void ***ppoin, short *tot, int from, int to)
{
uiLink *link;
@@ -2898,18 +2843,6 @@ int uiBlocksGetYMin(ListBase *lb)
return min;
}
-int uiBlockGetCol(uiBlock *block)
-{
- return block->themecol;
-}
-void uiBlockSetCol(uiBlock *block, int col)
-{
- block->themecol= col;
-}
-void uiBlockSetEmboss(uiBlock *block, int emboss)
-{
- block->dt= emboss;
-}
void uiBlockSetDirection(uiBlock *block, int direction)
{
block->direction= direction;
@@ -2955,23 +2888,22 @@ void uiBlockSetFlag(uiBlock *block, int flag)
{
block->flag|= flag;
}
+
void uiBlockClearFlag(uiBlock *block, int flag)
{
block->flag&= ~flag;
}
+
void uiBlockSetXOfs(uiBlock *block, int xofs)
{
block->xofs= xofs;
}
-void* uiBlockGetCurFont(uiBlock *block)
-{
- return block->curfont;
-}
void uiButSetFlag(uiBut *but, int flag)
{
but->flag|= flag;
}
+
void uiButClearFlag(uiBut *but, int flag)
{
but->flag&= ~flag;
@@ -2984,9 +2916,9 @@ int uiButGetRetVal(uiBut *but)
PointerRNA *uiButGetOperatorPtrRNA(uiBut *but)
{
- if(but->opname && !but->opptr) {
+ if(but->optype && !but->opptr) {
but->opptr= MEM_callocN(sizeof(PointerRNA), "uiButOpPtr");
- WM_operator_properties_create(but->opptr, but->opname);
+ WM_operator_properties_create(but->opptr, but->optype->idname);
}
return but->opptr;
@@ -3081,7 +3013,7 @@ uiBut *uiDefIconTextMenuBut(uiBlock *block, uiMenuCreateFunc func, void *arg, in
but->flag|= UI_HAS_ICON;
but->flag|= UI_ICON_LEFT;
- but->flag|= UI_ICON_RIGHT;
+ but->flag|= UI_ICON_SUBMENU;
but->menu_create_func= func;
ui_check_but(but);
@@ -3094,11 +3026,13 @@ uiBut *uiDefIconTextBlockBut(uiBlock *block, uiBlockCreateFunc func, void *arg,
{
uiBut *but= ui_def_but(block, BLOCK, 0, str, x1, y1, x2, y2, arg, 0.0, 0.0, 0.0, 0.0, tip);
- but->icon= (BIFIconID) icon;
+ /* XXX temp, old menu calls pass on icon arrow, which is now UI_ICON_SUBMENU flag */
+ if(icon!=ICON_RIGHTARROW_THIN) {
+ but->icon= (BIFIconID) icon;
+ but->flag|= UI_ICON_LEFT;
+ }
but->flag|= UI_HAS_ICON;
-
- but->flag|= UI_ICON_LEFT;
- but->flag|= UI_ICON_RIGHT;
+ but->flag|= UI_ICON_SUBMENU;
but->block_create_func= func;
ui_check_but(but);
@@ -3115,7 +3049,7 @@ uiBut *uiDefIconBlockBut(uiBlock *block, uiBlockCreateFunc func, void *arg, int
but->flag|= UI_HAS_ICON;
but->flag|= UI_ICON_LEFT;
- but->flag|= UI_ICON_RIGHT;
+ but->flag|= UI_ICON_SUBMENU;
but->block_create_func= func;
ui_check_but(but);
@@ -3133,24 +3067,18 @@ void uiDefKeyevtButS(uiBlock *block, int retval, char *str, short x1, short y1,
void UI_init(void)
{
- uiDefFont(UI_HELVB,
- BMF_GetFont(BMF_kHelveticaBold14),
- BMF_GetFont(BMF_kHelveticaBold12),
- BMF_GetFont(BMF_kHelveticaBold10),
- BMF_GetFont(BMF_kHelveticaBold8));
- uiDefFont(UI_HELV,
- BMF_GetFont(BMF_kHelvetica12),
- BMF_GetFont(BMF_kHelvetica12),
- BMF_GetFont(BMF_kHelvetica10),
- BMF_GetFont(BMF_kHelveticaBold8));
-
ui_resources_init();
}
-void UI_init_userdef()
+/* after reading userdef file */
+void UI_init_userdef(void)
{
- ui_text_init_userdef();
+ /* fix saved themes */
+ init_userdef_do_versions();
+ /* set default colors in default theme */
ui_theme_init_userdef();
+
+ uiStyleInit();
}
void UI_exit(void)
diff --git a/source/blender/editors/interface/interface_anim.c b/source/blender/editors/interface/interface_anim.c
new file mode 100644
index 00000000000..4a26db29160
--- /dev/null
+++ b/source/blender/editors/interface/interface_anim.c
@@ -0,0 +1,172 @@
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "MEM_guardedalloc.h"
+
+#include "DNA_anim_types.h"
+#include "DNA_scene_types.h"
+#include "DNA_screen_types.h"
+
+#include "BLI_listbase.h"
+
+#include "BKE_animsys.h"
+#include "BKE_context.h"
+#include "BKE_fcurve.h"
+
+#include "RNA_access.h"
+#include "RNA_types.h"
+
+#include "UI_interface.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+
+#include "interface_intern.h"
+
+void ui_but_anim_flag(uiBut *but, float cfra)
+{
+ but->flag &= ~(UI_BUT_ANIMATED|UI_BUT_ANIMATED_KEY|UI_BUT_DRIVEN);
+
+ if(but->rnaprop && but->rnapoin.id.data) {
+ AnimData *adt= BKE_animdata_from_id(but->rnapoin.id.data);
+ FCurve *fcu;
+ char *path;
+
+ if (adt) {
+ if ((adt->action && adt->action->curves.first) || (adt->drivers.first)) {
+ /* XXX this function call can become a performance bottleneck */
+ path= RNA_path_from_ID_to_property(&but->rnapoin, but->rnaprop);
+
+ if (path) {
+ /* animation takes priority over drivers */
+ if (adt->action && adt->action->curves.first) {
+ fcu= list_find_fcurve(&adt->action->curves, path, but->rnaindex);
+
+ if (fcu) {
+ but->flag |= UI_BUT_ANIMATED;
+
+ if (on_keyframe_fcurve(fcu, cfra))
+ but->flag |= UI_BUT_ANIMATED_KEY;
+ }
+ }
+
+ /* if not animated, check if driven */
+ if ((but->flag & UI_BUT_ANIMATED)==0 && (adt->drivers.first)) {
+ fcu= list_find_fcurve(&adt->drivers, path, but->rnaindex);
+
+ if (fcu)
+ but->flag |= UI_BUT_DRIVEN;
+ }
+
+ MEM_freeN(path);
+ }
+ }
+ }
+ }
+}
+
+void uiAnimContextProperty(const bContext *C, struct PointerRNA *ptr, struct PropertyRNA **prop, int *index)
+{
+ ARegion *ar= CTX_wm_region(C);
+ uiBlock *block;
+ uiBut *but;
+
+ if(ar) {
+ for(block=ar->uiblocks.first; block; block=block->next) {
+ for(but=block->buttons.first; but; but= but->next) {
+ if(but->active && but->rnapoin.id.data) {
+ *ptr= but->rnapoin;
+ *prop= but->rnaprop;
+ *index= but->rnaindex;
+ return;
+ }
+ }
+ }
+ }
+}
+
+void ui_but_anim_insert_keyframe(bContext *C)
+{
+ /* this operator calls uiAnimContextProperty above */
+ WM_operator_name_call(C, "ANIM_OT_insert_keyframe_button", WM_OP_INVOKE_DEFAULT, NULL);
+}
+
+void ui_but_anim_delete_keyframe(bContext *C)
+{
+ /* this operator calls uiAnimContextProperty above */
+ WM_operator_name_call(C, "ANIM_OT_delete_keyframe_button", WM_OP_INVOKE_DEFAULT, NULL);
+}
+
+void ui_but_anim_add_driver(bContext *C)
+{
+ /* this operator calls uiAnimContextProperty above */
+ WM_operator_name_call(C, "ANIM_OT_add_driver_button", WM_OP_INVOKE_DEFAULT, NULL);
+}
+
+void ui_but_anim_remove_driver(bContext *C)
+{
+ /* this operator calls uiAnimContextProperty above */
+ WM_operator_name_call(C, "ANIM_OT_remove_driver_button", WM_OP_INVOKE_DEFAULT, NULL);
+}
+
+// TODO: refine the logic for adding/removing drivers...
+void ui_but_anim_menu(bContext *C, uiBut *but)
+{
+ uiPopupMenu *pup;
+ uiLayout *layout;
+ int length;
+
+ if(but->rnapoin.data && but->rnaprop) {
+ pup= uiPupMenuBegin(C, RNA_property_ui_name(but->rnaprop), 0);
+ layout= uiPupMenuLayout(pup);
+
+ length= RNA_property_array_length(but->rnaprop);
+
+ if(but->flag & UI_BUT_ANIMATED_KEY) {
+ if(length) {
+ uiItemBooleanO(layout, "Replace Keyframes", 0, "ANIM_OT_insert_keyframe_button", "all", 1);
+ uiItemBooleanO(layout, "Replace Single Keyframe", 0, "ANIM_OT_insert_keyframe_button", "all", 0);
+ uiItemBooleanO(layout, "Delete Keyframes", 0, "ANIM_OT_delete_keyframe_button", "all", 1);
+ uiItemBooleanO(layout, "Delete Single Keyframe", 0, "ANIM_OT_delete_keyframe_button", "all", 0);
+ }
+ else {
+ uiItemBooleanO(layout, "Replace Keyframe", 0, "ANIM_OT_insert_keyframe_button", "all", 0);
+ uiItemBooleanO(layout, "Delete Keyframe", 0, "ANIM_OT_delete_keyframe_button", "all", 0);
+ }
+ }
+ else if(RNA_property_animateable(&but->rnapoin, but->rnaprop)) {
+ if(length) {
+ uiItemBooleanO(layout, "Insert Keyframes", 0, "ANIM_OT_insert_keyframe_button", "all", 1);
+ uiItemBooleanO(layout, "Insert Single Keyframe", 0, "ANIM_OT_insert_keyframe_button", "all", 0);
+ }
+ else
+ uiItemBooleanO(layout, "Insert Keyframe", 0, "ANIM_OT_insert_keyframe_button", "all", 0);
+ }
+
+ if(but->flag & UI_BUT_DRIVEN) {
+ uiItemS(layout);
+
+ if(length) {
+ uiItemBooleanO(layout, "Remove Driver", 0, "ANIM_OT_remove_driver_button", "all", 1);
+ uiItemBooleanO(layout, "Remove Single Driver", 0, "ANIM_OT_remove_driver_button", "all", 0);
+ }
+ else
+ uiItemBooleanO(layout, "Remove Driver", 0, "ANIM_OT_remove_driver_button", "all", 0);
+ }
+ else if(RNA_property_animateable(&but->rnapoin, but->rnaprop)) {
+ uiItemS(layout);
+
+ if(length) {
+ uiItemBooleanO(layout, "Add Driver", 0, "ANIM_OT_add_driver_button", "all", 1);
+ uiItemBooleanO(layout, "Add Single Driver", 0, "ANIM_OT_add_driver_button", "all", 0);
+ }
+ else
+ uiItemBooleanO(layout, "Add Driver", 0, "ANIM_OT_add_driver_button", "all", 0);
+ }
+
+ uiPupMenuEnd(C, pup);
+ }
+}
+
diff --git a/source/blender/editors/interface/interface_api.c b/source/blender/editors/interface/interface_api.c
new file mode 100644
index 00000000000..b593aef2208
--- /dev/null
+++ b/source/blender/editors/interface/interface_api.c
@@ -0,0 +1,193 @@
+/**
+ * $Id:
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2009 Blender Foundation.
+ * All rights reserved.
+ *
+ *
+ * Contributor(s): Blender Foundation
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "RNA_define.h"
+#include "RNA_types.h"
+
+#include "UI_interface.h"
+
+static void api_ui_item_common(FunctionRNA *func)
+{
+ RNA_def_string(func, "text", "", 0, "", "Override automatic text of the item.");
+ RNA_def_int(func, "icon", 0, 0, INT_MAX, "", "Override automatic icon of the item.", 0, INT_MAX);
+}
+
+static void api_ui_item_op_common(FunctionRNA *func)
+{
+ PropertyRNA *parm;
+
+ api_ui_item_common(func);
+ parm= RNA_def_string(func, "operator", "", 0, "", "Identifier of the operator.");
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+}
+
+void RNA_api_ui_layout(StructRNA *srna)
+{
+ FunctionRNA *func;
+ PropertyRNA *parm;
+
+ /* simple layout specifiers */
+ func= RNA_def_function(srna, "row", "uiLayoutRow");
+ parm= RNA_def_pointer(func, "layout", "UILayout", "", "Sub-layout to put items in.");
+ RNA_def_function_return(func, parm);
+ RNA_def_boolean(func, "align", 0, "", "Align buttons to each other.");
+
+ func= RNA_def_function(srna, "column", "uiLayoutColumn");
+ parm= RNA_def_pointer(func, "layout", "UILayout", "", "Sub-layout to put items in.");
+ RNA_def_function_return(func, parm);
+ RNA_def_boolean(func, "align", 0, "", "Align buttons to each other.");
+
+ func= RNA_def_function(srna, "column_flow", "uiLayoutColumnFlow");
+ parm= RNA_def_int(func, "columns", 0, 0, INT_MAX, "", "Number of columns, 0 is automatic.", 0, INT_MAX);
+ parm= RNA_def_pointer(func, "layout", "UILayout", "", "Sub-layout to put items in.");
+ RNA_def_function_return(func, parm);
+ RNA_def_boolean(func, "align", 0, "", "Align buttons to each other.");
+
+ /* box layout */
+ func= RNA_def_function(srna, "box", "uiLayoutBox");
+ parm= RNA_def_pointer(func, "layout", "UILayout", "", "Sub-layout to put items in.");
+ RNA_def_function_return(func, parm);
+
+ /* split layout */
+ func= RNA_def_function(srna, "split", "uiLayoutSplit");
+ parm= RNA_def_pointer(func, "layout", "UILayout", "", "Sub-layout to put items in.");
+ RNA_def_function_return(func, parm);
+
+ /* items */
+ func= RNA_def_function(srna, "itemR", "uiItemR");
+ api_ui_item_common(func);
+ parm= RNA_def_pointer(func, "data", "AnyType", "", "Data from which to take property.");
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+ parm= RNA_def_string(func, "property", "", 0, "", "Identifier of property in data.");
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+ RNA_def_boolean(func, "expand", 0, "", "Expand button to show more detail.");
+ RNA_def_boolean(func, "slider", 0, "", "Use slider for numeric values.");
+
+ func= RNA_def_function(srna, "items_enumR", "uiItemsEnumR");
+ parm= RNA_def_pointer(func, "data", "AnyType", "", "Data from which to take property.");
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+ parm= RNA_def_string(func, "property", "", 0, "", "Identifier of property in data.");
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+
+ func= RNA_def_function(srna, "item_menu_enumR", "uiItemMenuEnumR");
+ api_ui_item_common(func);
+ parm= RNA_def_pointer(func, "data", "AnyType", "", "Data from which to take property.");
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+ parm= RNA_def_string(func, "property", "", 0, "", "Identifier of property in data.");
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+
+ /*func= RNA_def_function(srna, "item_enumR", "uiItemEnumR");
+ api_ui_item_common(func);
+ parm= RNA_def_pointer(func, "data", "AnyType", "", "Data from which to take property.");
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+ parm= RNA_def_string(func, "property", "", 0, "", "Identifier of property in data.");
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+ parm= RNA_def_string(func, "value", "", 0, "", "Enum property value.");
+ RNA_def_property_flag(parm, PROP_REQUIRED);*/
+
+ func= RNA_def_function(srna, "itemO", "uiItemO");
+ api_ui_item_op_common(func);
+
+ /*func= RNA_def_function(srna, "item_enumO", "uiItemEnumO");
+ api_ui_item_op_common(func);
+ parm= RNA_def_string(func, "property", "", 0, "", "Identifier of property in operator.");
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+ parm= RNA_def_string(func, "value", "", 0, "", "Enum property value.");
+ RNA_def_property_flag(parm, PROP_REQUIRED);*/
+
+ func= RNA_def_function(srna, "items_enumO", "uiItemsEnumO");
+ parm= RNA_def_string(func, "operator", "", 0, "", "Identifier of the operator.");
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+ parm= RNA_def_string(func, "property", "", 0, "", "Identifier of property in operator.");
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+
+ func= RNA_def_function(srna, "item_menu_enumO", "uiItemMenuEnumO");
+ api_ui_item_op_common(func);
+ parm= RNA_def_string(func, "property", "", 0, "", "Identifier of property in operator.");
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+
+ func= RNA_def_function(srna, "item_booleanO", "uiItemBooleanO");
+ api_ui_item_op_common(func);
+ parm= RNA_def_string(func, "property", "", 0, "", "Identifier of property in operator.");
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+ parm= RNA_def_boolean(func, "value", 0, "", "Value of the property to call the operator with.");
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+
+ func= RNA_def_function(srna, "item_intO", "uiItemIntO");
+ api_ui_item_op_common(func);
+ parm= RNA_def_string(func, "property", "", 0, "", "Identifier of property in operator.");
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+ parm= RNA_def_int(func, "value", 0, INT_MIN, INT_MAX, "", "Value of the property to call the operator with.", INT_MIN, INT_MAX);
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+
+ func= RNA_def_function(srna, "item_floatO", "uiItemFloatO");
+ api_ui_item_op_common(func);
+ parm= RNA_def_string(func, "property", "", 0, "", "Identifier of property in operator.");
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+ parm= RNA_def_float(func, "value", 0, -FLT_MAX, FLT_MAX, "", "Value of the property to call the operator with.", -FLT_MAX, FLT_MAX);
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+
+ func= RNA_def_function(srna, "item_stringO", "uiItemStringO");
+ api_ui_item_op_common(func);
+ parm= RNA_def_string(func, "property", "", 0, "", "Identifier of property in operator.");
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+ parm= RNA_def_string(func, "value", "", 0, "", "Value of the property to call the operator with.");
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+
+ func= RNA_def_function(srna, "itemL", "uiItemL");
+ api_ui_item_common(func);
+
+ func= RNA_def_function(srna, "itemM", "uiItemM");
+ parm= RNA_def_pointer(func, "context", "Context", "", "Current context.");
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+ api_ui_item_common(func);
+ parm= RNA_def_string(func, "menu", "", 0, "", "Identifier of the menu.");
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+
+ func= RNA_def_function(srna, "itemS", "uiItemS");
+
+ /* templates */
+ func= RNA_def_function(srna, "template_header", "uiTemplateHeader");
+ parm= RNA_def_pointer(func, "context", "Context", "", "Current context.");
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+
+ func= RNA_def_function(srna, "template_header_ID", "uiTemplateHeaderID");
+ parm= RNA_def_pointer(func, "context", "Context", "", "Current context.");
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+ parm= RNA_def_pointer(func, "data", "AnyType", "", "Data from which to take property.");
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+ parm= RNA_def_string(func, "property", "", 0, "", "Identifier of pointer property in data.");
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+ RNA_def_string(func, "new", "", 0, "", "Operator identifier to create a new ID block.");
+ RNA_def_string(func, "open", "", 0, "", "Operator identifier to open a new ID block.");
+ RNA_def_string(func, "unlink", "", 0, "", "Operator identifier to unlink the ID block.");
+}
+
diff --git a/source/blender/editors/interface/interface_draw.c b/source/blender/editors/interface/interface_draw.c
index fc2f5a15122..955abe1aecd 100644
--- a/source/blender/editors/interface/interface_draw.c
+++ b/source/blender/editors/interface/interface_draw.c
@@ -48,12 +48,6 @@
#include "UI_interface.h"
#include "UI_interface_icons.h"
-#include "UI_text.h"
-
-#include "BMF_Api.h"
-#ifdef INTERNATIONAL
-#include "FTF_Api.h"
-#endif
#include "interface_intern.h"
@@ -67,10 +61,7 @@ void uiSetRoundBox(int type)
/* Not sure the roundbox function is the best place to change this
* if this is undone, its not that big a deal, only makes curves edges
* square for the */
- if (UI_GetThemeValue(TH_BUT_DRAWTYPE) == TH_MINIMAL)
- roundboxtype= 0;
- else
- roundboxtype= type;
+ roundboxtype= type;
/* flags to set which corners will become rounded:
@@ -83,10 +74,7 @@ void uiSetRoundBox(int type)
int uiGetRoundBox(void)
{
- if (ELEM3(UI_GetThemeValue(TH_BUT_DRAWTYPE), TH_MINIMAL, TH_SHADED, TH_OLDSKOOL))
- return 0;
- else
- return roundboxtype;
+ return roundboxtype;
}
void gl_round_box(int mode, float minx, float miny, float maxx, float maxy, float rad)
@@ -156,55 +144,9 @@ static void round_box_shade_col(float *col1, float *col2, float fac)
glColor3fv(col);
}
-/* only for headers */
-static void gl_round_box_topshade(float minx, float miny, float maxx, float maxy, float rad)
-{
- float vec[7][2]= {{0.195, 0.02}, {0.383, 0.067}, {0.55, 0.169}, {0.707, 0.293},
- {0.831, 0.45}, {0.924, 0.617}, {0.98, 0.805}};
- char col[7]= {140, 165, 195, 210, 230, 245, 255};
- int a;
- char alpha=255;
-
- if(roundboxtype & UI_RB_ALPHA) alpha= 128;
-
- /* mult */
- for(a=0; a<7; a++) {
- vec[a][0]*= rad; vec[a][1]*= rad;
- }
-
- /* shades from grey->white->grey */
- glBegin(GL_LINE_STRIP);
-
- if(roundboxtype & 3) {
- /* corner right-top */
- glColor4ub(140, 140, 140, alpha);
- glVertex2f( maxx, maxy-rad);
- for(a=0; a<7; a++) {
- glColor4ub(col[a], col[a], col[a], alpha);
- glVertex2f( maxx-vec[a][1], maxy-rad+vec[a][0]);
- }
- glColor4ub(225, 225, 225, alpha);
- glVertex2f( maxx-rad, maxy);
-
-
- /* corner left-top */
- glVertex2f( minx+rad, maxy);
- for(a=0; a<7; a++) {
- glColor4ub(col[6-a], col[6-a], col[6-a], alpha);
- glVertex2f( minx+rad-vec[a][0], maxy-vec[a][1]);
- }
- glVertex2f( minx, maxy-rad);
- }
- else {
- glColor4ub(225, 225, 225, alpha);
- glVertex2f( minx, maxy);
- glVertex2f( maxx, maxy);
- }
-
- glEnd();
-}
/* linear horizontal shade within button or in outline */
+/* view2d scrollers use it */
void gl_round_box_shade(int mode, float minx, float miny, float maxx, float maxy, float rad, float shadetop, float shadedown)
{
float vec[7][2]= {{0.195, 0.02}, {0.383, 0.067}, {0.55, 0.169}, {0.707, 0.293},
@@ -228,10 +170,8 @@ void gl_round_box_shade(int mode, float minx, float miny, float maxx, float maxy
coldown[1]= color[1]+shadedown; if(coldown[1]<0.0) coldown[1]= 0.0;
coldown[2]= color[2]+shadedown; if(coldown[2]<0.0) coldown[2]= 0.0;
- if (UI_GetThemeValue(TH_BUT_DRAWTYPE) != TH_MINIMAL) {
- glShadeModel(GL_SMOOTH);
- glBegin(mode);
- }
+ glShadeModel(GL_SMOOTH);
+ glBegin(mode);
/* start with corner right-bottom */
if(roundboxtype & 4) {
@@ -313,6 +253,7 @@ void gl_round_box_shade(int mode, float minx, float miny, float maxx, float maxy
}
/* linear vertical shade within button or in outline */
+/* view2d scrollers use it */
void gl_round_box_vertical_shade(int mode, float minx, float miny, float maxx, float maxy, float rad, float shadeLeft, float shadeRight)
{
float vec[7][2]= {{0.195, 0.02}, {0.383, 0.067}, {0.55, 0.169}, {0.707, 0.293},
@@ -336,10 +277,8 @@ void gl_round_box_vertical_shade(int mode, float minx, float miny, float maxx, f
colRight[1]= color[1]+shadeRight; if(colRight[1]<0.0) colRight[1]= 0.0;
colRight[2]= color[2]+shadeRight; if(colRight[2]<0.0) colRight[2]= 0.0;
- if (UI_GetThemeValue(TH_BUT_DRAWTYPE) != TH_MINIMAL) {
- glShadeModel(GL_SMOOTH);
- glBegin(mode);
- }
+ glShadeModel(GL_SMOOTH);
+ glBegin(mode);
/* start with corner right-bottom */
if(roundboxtype & 4) {
@@ -430,10 +369,8 @@ void uiRoundRect(float minx, float miny, float maxx, float maxy, float rad)
}
/* set antialias line */
- if (UI_GetThemeValue(TH_BUT_DRAWTYPE) != TH_MINIMAL) {
- glEnable( GL_LINE_SMOOTH );
- glEnable( GL_BLEND );
- }
+ glEnable( GL_LINE_SMOOTH );
+ glEnable( GL_BLEND );
gl_round_box(GL_LINE_LOOP, minx, miny, maxx, maxy, rad);
@@ -486,124 +423,20 @@ void uiRoundBox(float minx, float miny, float maxx, float maxy, float rad)
gl_round_box(GL_POLYGON, minx, miny, maxx, maxy, rad);
/* set antialias line */
- if (UI_GetThemeValue(TH_BUT_DRAWTYPE) != TH_MINIMAL) {
- glEnable( GL_LINE_SMOOTH );
- glEnable( GL_BLEND );
- }
-
- gl_round_box(GL_LINE_LOOP, minx, miny, maxx, maxy, rad);
-
- glDisable( GL_BLEND );
- glDisable( GL_LINE_SMOOTH );
-}
-
-void uiTriangleFakeAA(float x1, float y1, float x2, float y2, float x3, float y3, float asp)
-{
- float color[4], alpha;
- float jitter;
- int i, passes=4;
-
- /* get the colour and divide up the alpha */
- glGetFloatv(GL_CURRENT_COLOR, color);
- alpha = color[3];
- color[3]= alpha/(float)passes;
- glColor4fv(color);
-
- /* set the 'jitter amount' */
- jitter = 0.65/(float)passes * asp;
-
+ glEnable( GL_LINE_SMOOTH );
glEnable( GL_BLEND );
- /* draw lots of lines on top of each other */
- for (i=passes; i>=(-passes); i--) {
- glBegin(GL_TRIANGLES);
-
- /* 'point' first, then two base vertices */
- glVertex2f(x1, y1+(i*jitter));
- glVertex2f(x2, y2+(i*jitter));
- glVertex2f(x3, y3+(i*jitter));
- glEnd();
- }
+ gl_round_box(GL_LINE_LOOP, minx, miny, maxx, maxy, rad);
glDisable( GL_BLEND );
-
- color[3] = alpha;
- glColor4fv(color);
-}
-
-/* for headers and floating panels */
-void uiRoundBoxEmboss(float minx, float miny, float maxx, float maxy, float rad, int active)
-{
- float color[4];
-
- if(roundboxtype & UI_RB_ALPHA) {
- glGetFloatv(GL_CURRENT_COLOR, color);
- color[3]= 0.5;
- glColor4fv(color);
- glEnable( GL_BLEND );
- }
-
- /* solid part */
- //if(active)
- // gl_round_box_shade(GL_POLYGON, minx, miny, maxx, maxy, rad, 0.10, -0.05);
- // else
- /* shading doesnt work for certain buttons yet (pulldown) need smarter buffer caching (ton) */
- gl_round_box(GL_POLYGON, minx, miny, maxx, maxy, rad);
-
- /* set antialias line */
- if (UI_GetThemeValue(TH_BUT_DRAWTYPE) != TH_MINIMAL) {
- glEnable( GL_LINE_SMOOTH );
- glEnable( GL_BLEND );
- }
-
- /* top shade */
- gl_round_box_topshade(minx+1, miny+1, maxx-1, maxy-1, rad);
-
- /* total outline */
- if(roundboxtype & UI_RB_ALPHA) glColor4ub(0,0,0, 128); else glColor4ub(0,0,0, 200);
- gl_round_box(GL_LINE_LOOP, minx, miny, maxx, maxy, rad);
-
glDisable( GL_LINE_SMOOTH );
-
- /* bottom shade for header down */
- if((roundboxtype & 12)==12) {
- glColor4ub(0,0,0, 80);
- fdrawline(minx+rad-1.0, miny+1.0, maxx-rad+1.0, miny+1.0);
- }
- glDisable( GL_BLEND );
}
-/* ************** safe rasterpos for pixmap alignment with pixels ************* */
-
-void ui_rasterpos_safe(float x, float y, float aspect)
-{
- float vals[4], remainder;
- int doit=0;
-
- glRasterPos2f(x, y);
- glGetFloatv(GL_CURRENT_RASTER_POSITION, vals);
-
- remainder= vals[0] - floor(vals[0]);
- if(remainder > 0.4 && remainder < 0.6) {
- if(remainder < 0.5) x -= 0.1*aspect;
- else x += 0.1*aspect;
- doit= 1;
- }
- remainder= vals[1] - floor(vals[1]);
- if(remainder > 0.4 && remainder < 0.6) {
- if(remainder < 0.5) y -= 0.1*aspect;
- else y += 0.1*aspect;
- doit= 1;
- }
-
- if(doit) glRasterPos2f(x, y);
-
- UI_RasterPos(x, y);
- UI_SetScale(aspect);
-}
/* ************** generic embossed rect, for window sliders etc ************* */
+
+/* text_draw.c uses this */
void uiEmboss(float x1, float y1, float x2, float y2, int sel)
{
@@ -625,1925 +458,14 @@ void uiEmboss(float x1, float y1, float x2, float y2, int sel)
}
-/* ************** GENERIC ICON DRAW, NO THEME HERE ************* */
-
-/* icons have been standardized... and this call draws in untransformed coordinates */
-#define ICON_HEIGHT 16.0f
-
-void ui_draw_icon(uiBut *but, BIFIconID icon, int blend)
-{
- float xs=0, ys=0, aspect, height;
-
- /* this icon doesn't need draw... */
- if(icon==ICON_BLANK1) return;
-
- /* we need aspect from block, for menus... these buttons are scaled in uiPositionBlock() */
- aspect= but->block->aspect;
- if(aspect != but->aspect) {
- /* prevent scaling up icon in pupmenu */
- if (aspect < 1.0f) {
- height= ICON_HEIGHT;
- aspect = 1.0f;
-
- }
- else
- height= ICON_HEIGHT/aspect;
- }
- else
- height= ICON_HEIGHT;
-
- if(but->flag & UI_ICON_LEFT) {
- if (but->type==BUT_TOGDUAL) {
- if (but->drawstr[0]) {
- xs= but->x1-1.0;
- } else {
- xs= (but->x1+but->x2- height)/2.0;
- }
- }
- else if (but->block->flag & UI_BLOCK_LOOP) {
- xs= but->x1+1.0;
- }
- else if ((but->type==ICONROW) || (but->type==ICONTEXTROW)) {
- xs= but->x1+3.0;
- }
- else {
- xs= but->x1+4.0;
- }
- ys= (but->y1+but->y2- height)/2.0;
- }
- if(but->flag & UI_ICON_RIGHT) {
- xs= but->x2-17.0;
- ys= (but->y1+but->y2- height)/2.0;
- }
- if (!((but->flag & UI_ICON_RIGHT) || (but->flag & UI_ICON_LEFT))) {
- xs= (but->x1+but->x2- height)/2.0;
- ys= (but->y1+but->y2- height)/2.0;
- }
-
- glEnable(GL_BLEND);
-
- /* calculate blend color */
- if ELEM3(but->type, TOG, ROW, TOGN) {
- if(but->flag & UI_SELECT);
- else if(but->flag & UI_ACTIVE);
- else blend= -60;
- }
- if (but->flag & UI_BUT_DISABLED) blend = -100;
-
- UI_icon_draw_aspect_blended(xs, ys, icon, aspect, blend);
-
- glDisable(GL_BLEND);
-}
-
-
-/* ************** DEFAULT THEME, SHADED BUTTONS ************* */
-
-
-#define M_WHITE UI_ThemeColorShade(colorid, 80)
-
-#define M_ACT_LIGHT UI_ThemeColorShade(colorid, 55)
-#define M_LIGHT UI_ThemeColorShade(colorid, 45)
-#define M_HILITE UI_ThemeColorShade(colorid, 25)
-#define M_LMEDIUM UI_ThemeColorShade(colorid, 10)
-#define M_MEDIUM UI_ThemeColor(colorid)
-#define M_LGREY UI_ThemeColorShade(colorid, -20)
-#define M_GREY UI_ThemeColorShade(colorid, -45)
-#define M_DARK UI_ThemeColorShade(colorid, -80)
-
-#define M_NUMTEXT UI_ThemeColorShade(colorid, 25)
-#define M_NUMTEXT_ACT_LIGHT UI_ThemeColorShade(colorid, 35)
-
-#define MM_WHITE UI_ThemeColorShade(TH_BUT_NEUTRAL, 120)
-
-/* Used for the subtle sunken effect around buttons.
- * One option is to hardcode to white, with alpha, however it causes a
- * weird 'building up' efect, so it's commented out for now.
- */
-
-#define MM_WHITE_OP UI_ThemeColorShadeAlpha(TH_BACK, 55, -100)
-#define MM_WHITE_TR UI_ThemeColorShadeAlpha(TH_BACK, 55, -255)
-
-#define MM_LIGHT UI_ThemeColorShade(TH_BUT_OUTLINE, 45)
-#define MM_MEDIUM UI_ThemeColor(TH_BUT_OUTLINE)
-#define MM_GREY UI_ThemeColorShade(TH_BUT_OUTLINE, -45)
-#define MM_DARK UI_ThemeColorShade(TH_BUT_OUTLINE, -80)
-
-/* base shaded button */
-static void shaded_button(float x1, float y1, float x2, float y2, float asp, int colorid, int flag, int mid)
-{
- /* 'mid' arg determines whether the button is in the middle of
- * an alignment group or not. 0 = not middle, 1 = is in the middle.
- * Done to allow cleaner drawing
- */
-
- /* *** SHADED BUTTON BASE *** */
- glShadeModel(GL_SMOOTH);
- glBegin(GL_QUADS);
-
- if(flag & UI_SELECT) {
- if(flag & UI_ACTIVE) M_MEDIUM;
- else M_LGREY;
- } else {
- if(flag & UI_ACTIVE) M_LIGHT;
- else M_HILITE;
- }
-
- glVertex2f(x1,y1);
- glVertex2f(x2,y1);
-
- if(flag & UI_SELECT) {
- if(flag & UI_ACTIVE) M_LGREY;
- else M_GREY;
- } else {
- if(flag & UI_ACTIVE) M_ACT_LIGHT;
- else M_LIGHT;
- }
-
- glVertex2f(x2,(y2-(y2-y1)/3));
- glVertex2f(x1,(y2-(y2-y1)/3));
- glEnd();
-
-
- glShadeModel(GL_FLAT);
- glBegin(GL_QUADS);
-
- if(flag & UI_SELECT) {
- if(flag & UI_ACTIVE) M_LGREY;
- else M_GREY;
- } else {
- if(flag & UI_ACTIVE) M_ACT_LIGHT;
- else M_LIGHT;
- }
-
- glVertex2f(x1,(y2-(y2-y1)/3));
- glVertex2f(x2,(y2-(y2-y1)/3));
- glVertex2f(x2,y2);
- glVertex2f(x1,y2);
-
- glEnd();
- /* *** END SHADED BUTTON BASE *** */
-
- /* *** INNER OUTLINE *** */
- /* left */
- if(!(flag & UI_SELECT)) {
- glShadeModel(GL_SMOOTH);
- glBegin(GL_LINES);
- M_MEDIUM;
- glVertex2f(x1+1,y1+2);
- M_WHITE;
- glVertex2f(x1+1,y2);
- glEnd();
- }
-
- /* right */
- if(!(flag & UI_SELECT)) {
- glShadeModel(GL_SMOOTH);
- glBegin(GL_LINES);
- M_MEDIUM;
- glVertex2f(x2-1,y1+2);
- M_WHITE;
- glVertex2f(x2-1,y2);
- glEnd();
- }
-
- glShadeModel(GL_FLAT);
-
- /* top */
- if(flag & UI_SELECT) {
- if(flag & UI_ACTIVE) M_LGREY;
- else M_GREY;
- } else {
- if(flag & UI_ACTIVE) M_WHITE;
- else M_WHITE;
- }
-
- fdrawline(x1, (y2-1), x2, (y2-1));
-
- /* bottom */
- if(flag & UI_SELECT) {
- if(flag & UI_ACTIVE) M_MEDIUM;
- else M_LGREY;
- } else {
- if(flag & UI_ACTIVE) M_LMEDIUM;
- else M_MEDIUM;
- }
- fdrawline(x1, (y1+1), x2, (y1+1));
- /* *** END INNER OUTLINE *** */
-
- /* *** OUTER OUTLINE *** */
- if (mid) {
- // we draw full outline, its not AA, and it works better button mouse-over hilite
- MM_DARK;
-
- // left right
- fdrawline(x1, y1, x1, y2);
- fdrawline(x2, y1, x2, y2);
-
- // top down
- fdrawline(x1, y2, x2, y2);
- fdrawline(x1, y1, x2, y1);
- } else {
- MM_DARK;
- gl_round_box(GL_LINE_LOOP, x1, y1, x2, y2, 1.5);
- }
- /* END OUTER OUTLINE */
-}
-
-/* base flat button */
-static void flat_button(float x1, float y1, float x2, float y2, float asp, int colorid, int flag, int mid)
-{
- /* 'mid' arg determines whether the button is in the middle of
- * an alignment group or not. 0 = not middle, 1 = is in the middle.
- * Done to allow cleaner drawing
- */
-
- /* *** FLAT TEXT/NUM FIELD *** */
- glShadeModel(GL_FLAT);
- if(flag & UI_SELECT) {
- if(flag & UI_ACTIVE) M_LGREY;
- else M_GREY;
- }
- else {
- if(flag & UI_ACTIVE) M_NUMTEXT_ACT_LIGHT;
- else M_NUMTEXT;
- }
-
- glRectf(x1, y1, x2, y2);
- /* *** END FLAT TEXT/NUM FIELD *** */
-
- /* *** OUTER OUTLINE *** */
- if (mid) {
- // we draw full outline, its not AA, and it works better button mouse-over hilite
- MM_DARK;
-
- // left right
- fdrawline(x1, y1, x1, y2);
- fdrawline(x2, y1, x2, y2);
-
- // top down
- fdrawline(x1, y2, x2, y2);
- fdrawline(x1, y1, x2, y1);
- } else {
- MM_DARK;
- gl_round_box(GL_LINE_LOOP, x1, y1, x2, y2, 1.5);
- }
- /* END OUTER OUTLINE */
-}
-
-/* shaded round button */
-static void round_button_shaded(int type, int colorid, float asp, float x1, float y1, float x2, float y2, int flag, int rad)
-{
- int alpha_offs= (flag & UI_BUT_DISABLED)?UI_DISABLED_ALPHA_OFFS:0;
- float shadefac;
-
- /* emboss */
- glColor4f(1.0f, 1.0f, 1.0f, 0.08f);
- uiRoundRectFakeAA(x1+1, y1-1, x2, y2-1, rad, asp);
-
- /* colour shading */
- if (flag & UI_SELECT) {
- shadefac = -0.05;
- if(flag & UI_ACTIVE) UI_ThemeColorShade(colorid, -40);
- else UI_ThemeColorShade(colorid, -30);
- } else {
- shadefac = 0.05;
- if(flag & UI_ACTIVE) UI_ThemeColorShade(colorid, +30);
- else UI_ThemeColorShade(colorid, +20);
- }
- /* end colour shading */
-
-
- /* the shaded base */
- gl_round_box_shade(GL_POLYGON, x1, y1, x2, y2, rad, shadefac, -shadefac);
-
- /* outline */
- UI_ThemeColorBlendShadeAlpha(TH_BUT_OUTLINE, TH_BACK, 0.1, -40, alpha_offs);
-
- uiRoundRectFakeAA(x1, y1, x2, y2, rad, asp);
- /* end outline */
-}
-
-/* base round flat button */
-static void round_button_flat(int colorid, float asp, float x1, float y1, float x2, float y2, int flag, float rad)
-{
- int alpha_offs= (flag & UI_BUT_DISABLED)?UI_DISABLED_ALPHA_OFFS:0;
-
- /* emboss */
- //glColor4f(1.0f, 1.0f, 1.0f, 0.08f);
- //uiRoundRectFakeAA(x1+1, y1-1, x2, y2-1, rad, asp);
-
- /* colour shading */
- if(flag & UI_SELECT) {
- if (flag & UI_ACTIVE) UI_ThemeColorShade(colorid, -30);
- else UI_ThemeColorShade(colorid, -45);
- }
- else {
- if(flag & UI_ACTIVE) UI_ThemeColorShade(colorid, 35);
- else UI_ThemeColorShade(colorid, 25);
- }
-
- /* the solid base */
- gl_round_box(GL_POLYGON, x1, y1, x2, y2, rad);
-
- /* outline */
- UI_ThemeColorBlendShadeAlpha(TH_BUT_OUTLINE, TH_BACK, 0.1, -30, alpha_offs);
- uiRoundRectFakeAA(x1, y1, x2, y2, rad, asp);
-}
-
-static void ui_checkmark_box(int colorid, float x1, float y1, float x2, float y2)
-{
- uiSetRoundBox(15);
- UI_ThemeColorShade(colorid, -5);
- gl_round_box_shade(GL_POLYGON, x1+4, (y1+(y2-y1)/2)-5, x1+14, (y1+(y2-y1)/2)+4, 2, -0.04, 0.03);
-
- UI_ThemeColorShade(colorid, -30);
- gl_round_box(GL_LINE_LOOP, x1+4, (y1+(y2-y1)/2)-5, x1+14, (y1+(y2-y1)/2)+4, 2);
-
-}
-static void ui_checkmark(float x1, float y1, float x2, float y2)
-{
- glEnable( GL_LINE_SMOOTH );
- glEnable( GL_BLEND );
- glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
- glLineWidth(1.5);
-
- glBegin( GL_LINE_STRIP );
- glVertex2f(x1+5, (y1+(y2-y1)/2)-1);
- glVertex2f(x1+8, (y1+(y2-y1)/2)-4);
- glVertex2f(x1+13, (y1+(y2-y1)/2)+5);
- glEnd();
-
- glLineWidth(1.0);
- glDisable( GL_BLEND );
- glDisable( GL_LINE_SMOOTH );
-}
-
-static void ui_draw_toggle_checkbox(int flag, int type, int colorid, float x1, float y1, float x2, float y2)
-{
- if (!(flag & UI_HAS_ICON)) {
- /* check to see that there's room for the check mark
- * draw a check mark, or if it's a TOG3, draw a + or - */
- if (x2 - x1 > 20) {
- ui_checkmark_box(colorid, x1, y1, x2, y2);
-
- /* TOG3 is handled with ui_tog3_invert()
- * remember to update checkmark drawing there too*/
- if((flag & UI_SELECT) && (type != TOG3)) {
- UI_ThemeColorShade(colorid, -140);
-
- ui_checkmark(x1, y1, x2, y2);
- }
- /* draw a dot: alternate, for layers etc. */
- } else if(flag & UI_SELECT) {
- uiSetRoundBox(15);
- UI_ThemeColorShade(colorid, -60);
-
- glPushMatrix();
- glTranslatef((x1+(x2-x1)/2), (y1+(y2-y1)/2), 0.0);
-
- /* circle */
- glutil_draw_filled_arc(0.0, M_PI*2.0, 2, 16);
-
- glEnable( GL_LINE_SMOOTH );
- glEnable( GL_BLEND );
- glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
-
- /* smooth outline */
- glutil_draw_lined_arc(0.0, M_PI*2.0, 2, 16);
-
- glDisable( GL_BLEND );
- glDisable( GL_LINE_SMOOTH );
-
- glPopMatrix();
- }
- }
-}
-
-
-/* small side double arrow for iconrow */
-static void ui_iconrow_arrows(float x1, float y1, float x2, float y2)
-{
- glEnable( GL_POLYGON_SMOOTH );
- glEnable( GL_BLEND );
-
- glShadeModel(GL_FLAT);
- glBegin(GL_TRIANGLES);
- glVertex2f((short)x2-2,(short)(y2-(y2-y1)/2)+1);
- glVertex2f((short)x2-6,(short)(y2-(y2-y1)/2)+1);
- glVertex2f((short)x2-4,(short)(y2-(y2-y1)/2)+4);
- glEnd();
-
- glBegin(GL_TRIANGLES);
- glVertex2f((short)x2-2,(short)(y2-(y2-y1)/2) -1);
- glVertex2f((short)x2-6,(short)(y2-(y2-y1)/2) -1);
- glVertex2f((short)x2-4,(short)(y2-(y2-y1)/2) -4);
- glEnd();
-
- glDisable( GL_BLEND );
- glDisable( GL_POLYGON_SMOOTH );
-}
-
-/* side double arrow for menu */
-static void ui_menu_arrows(float x1, float y1, float x2, float y2, float asp)
-{
- /* 'point' first, then two base vertices */
- uiTriangleFakeAA(x2-9, (y2-(y2-y1)/2)+6,
- x2-6, (y2-(y2-y1)/2)+2,
- x2-12, (y2-(y2-y1)/2)+2, asp);
-
- uiTriangleFakeAA(x2-9, (y2-(y2-y1)/2)-6,
- x2-6, (y2-(y2-y1)/2)-2,
- x2-12, (y2-(y2-y1)/2)-2, asp);
-}
-
-/* left/right arrows for number fields */
-static void ui_num_arrows(float x1, float y1, float x2, float y2, float asp)
-{
- if( x2-x1 > 25) { // 25 is a bit arbitrary, but small buttons cant have arrows
-
- /* 'point' first, then two base vertices */
- uiTriangleFakeAA(x1+4, y2-(y2-y1)/2,
- x1+9, y2-(y2-y1)/2+3,
- x1+9, y2-(y2-y1)/2-3, asp);
-
- uiTriangleFakeAA(x2-4, y2-(y2-y1)/2,
- x2-9, y2-(y2-y1)/2+3,
- x2-9, y2-(y2-y1)/2-3, asp);
- }
-}
-
-
-/* changing black/white for TOG3 buts */
-static void ui_tog3_invert(float x1, float y1, float x2, float y2, int seltype)
-{
-
- if (seltype == 0) {
- UI_ThemeColorShade(TH_BUT_SETTING, -120);
-
- glEnable( GL_LINE_SMOOTH );
- glEnable( GL_BLEND );
- glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
- glLineWidth(1.0);
-
- fdrawline(x1+10, (y1+(y2-y1)/2+4), x1+10, (y1+(y2-y1)/2)-4);
- fdrawline(x1+6, (y1+(y2-y1)/2), x1+14, (y1+(y2-y1)/2));
-
- glLineWidth(1.0);
- glDisable( GL_BLEND );
- glDisable( GL_LINE_SMOOTH );
- } else {
- /* horiz line */
- UI_ThemeColorShade(TH_BUT_SETTING, -120);
-
- glEnable( GL_LINE_SMOOTH );
- glEnable( GL_BLEND );
- glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
- glLineWidth(1.0);
-
- fdrawline(x1+6, (y1+(y2-y1)/2), x1+14, (y1+(y2-y1)/2));
-
- glLineWidth(1.0);
- glDisable( GL_BLEND );
- glDisable( GL_LINE_SMOOTH );
-
- }
-}
-
-/* roundshaded button/popup menu/iconrow drawing code */
-static void ui_roundshaded_button(int type, int colorid, float asp, float x1, float y1, float x2, float y2, int flag)
-{
- float rad, maxrad;
- int align= (flag & UI_BUT_ALIGN);
- int alpha_offs= (flag & UI_BUT_DISABLED)?UI_DISABLED_ALPHA_OFFS:0;
-
- /* rounded corners */
- if (ELEM4(type, MENU, ROW, ICONROW, ICONTEXTROW)) maxrad = 5.0;
- else maxrad= 10.0;
-
- rad= (y2-y1)/2.0;
- if (rad>(x2-x1)/2) rad = (x2-x1)/2;
- if (rad > maxrad) rad = maxrad;
-
- /* end rounded corners */
-
- /* alignment */
- if(align) {
- switch(align) {
- case UI_BUT_ALIGN_TOP:
- uiSetRoundBox(12);
- break;
- case UI_BUT_ALIGN_DOWN:
- uiSetRoundBox(3);
- break;
- case UI_BUT_ALIGN_LEFT:
- uiSetRoundBox(6);
- break;
- case UI_BUT_ALIGN_RIGHT:
- uiSetRoundBox(9);
- break;
-
- case UI_BUT_ALIGN_DOWN|UI_BUT_ALIGN_RIGHT:
- uiSetRoundBox(1);
- break;
- case UI_BUT_ALIGN_DOWN|UI_BUT_ALIGN_LEFT:
- uiSetRoundBox(2);
- break;
- case UI_BUT_ALIGN_TOP|UI_BUT_ALIGN_RIGHT:
- uiSetRoundBox(8);
- break;
- case UI_BUT_ALIGN_TOP|UI_BUT_ALIGN_LEFT:
- uiSetRoundBox(4);
- break;
-
- default:
- uiSetRoundBox(0);
- break;
- }
- }
- else {
- uiSetRoundBox(15);
- }
- /* end alignment */
-
-
- /* draw the base button */
- round_button_shaded(type, colorid, asp, x1, y1, x2, y2, flag, rad);
-
- /* *** EXTRA DRAWING FOR SPECIFIC CONTROL TYPES *** */
- switch(type) {
- case ICONROW:
- case ICONTEXTROW:
- /* iconrow double arrow */
- if(flag & UI_SELECT) {
- UI_ThemeColorShadeAlpha(colorid, -80, alpha_offs);
- } else {
- UI_ThemeColorShadeAlpha(colorid, -45, alpha_offs);
- }
- ui_iconrow_arrows(x1, y1, x2, y2);
- /* end iconrow double arrow */
- break;
- case MENU:
- /* menu double arrow */
- if(flag & UI_SELECT) {
- UI_ThemeColorShadeAlpha(colorid, -110, alpha_offs);
- } else {
- UI_ThemeColorShadeAlpha(colorid, -80, alpha_offs);
- }
- ui_menu_arrows(x1, y1, x2, y2, asp);
- /* end menu double arrow */
- break;
- }
-}
-
-static void ui_roundshaded_flat(int type, int colorid, float asp, float x1, float y1, float x2, float y2, int flag)
-{
- float rad, maxrad;
- int align= (flag & UI_BUT_ALIGN);
- int alpha_offs= (flag & UI_BUT_DISABLED)?UI_DISABLED_ALPHA_OFFS:0;
-
- /* rounded corners */
- if (type == TEX) maxrad = 5.0;
- else maxrad= 10.0;
-
- rad= (y2-y1)/2.0;
- if (rad>(x2-x1)/2) rad = (x2-x1)/2;
- if (maxrad) {
- if (rad > maxrad) rad = maxrad;
- }
- /* end rounded corners */
-
- /* alignment */
- if(align) {
- switch(align) {
- case UI_BUT_ALIGN_TOP:
- uiSetRoundBox(12);
- break;
- case UI_BUT_ALIGN_DOWN:
- uiSetRoundBox(3);
- break;
- case UI_BUT_ALIGN_LEFT:
- uiSetRoundBox(6);
- break;
- case UI_BUT_ALIGN_RIGHT:
- uiSetRoundBox(9);
- break;
-
- case UI_BUT_ALIGN_DOWN|UI_BUT_ALIGN_RIGHT:
- uiSetRoundBox(1);
- break;
- case UI_BUT_ALIGN_DOWN|UI_BUT_ALIGN_LEFT:
- uiSetRoundBox(2);
- break;
- case UI_BUT_ALIGN_TOP|UI_BUT_ALIGN_RIGHT:
- uiSetRoundBox(8);
- break;
- case UI_BUT_ALIGN_TOP|UI_BUT_ALIGN_LEFT:
- uiSetRoundBox(4);
- break;
-
- default:
- uiSetRoundBox(0);
- break;
- }
- }
- else {
- uiSetRoundBox(15);
- }
- /* end alignment */
-
- /* draw the base button */
- round_button_flat(colorid, asp, x1, y1, x2, y2, flag, rad);
-
- /* *** EXTRA DRAWING FOR SPECIFIC CONTROL TYPES *** */
- switch(type) {
- case TOG:
- case TOGN:
- case TOG3:
- ui_draw_toggle_checkbox(flag, type, colorid, x1, y1, x2, y2);
- break;
- case NUM:
- /* side arrows */
- if(flag & UI_SELECT) {
- if(flag & UI_ACTIVE) UI_ThemeColorShadeAlpha(colorid, -70, alpha_offs);
- else UI_ThemeColorShadeAlpha(colorid, -70, alpha_offs);
- } else {
- if(flag & UI_ACTIVE) UI_ThemeColorShadeAlpha(colorid, -40, alpha_offs);
- else UI_ThemeColorShadeAlpha(colorid, -20, alpha_offs);
- }
-
- ui_num_arrows(x1, y1, x2, y2, asp);
- /* end side arrows */
- break;
- }
-}
-
-/* roundshaded theme callback */
-static void ui_draw_roundshaded(int type, int colorid, float aspect, float x1, float y1, float x2, float y2, int flag)
-{
-
- switch(type) {
- case TOG:
- case TOGN:
- case TOG3:
- case SLI:
- case NUMSLI:
- case HSVSLI:
- case TEX:
- case IDPOIN:
- case NUM:
- ui_roundshaded_flat(type, colorid, aspect, x1, y1, x2, y2, flag);
- break;
- case ICONROW:
- case ICONTEXTROW:
- case MENU:
- default:
- ui_roundshaded_button(type, colorid, aspect, x1, y1, x2, y2, flag);
- }
-
-}
-
-/* button/popup menu/iconrow drawing code */
-static void ui_default_button(int type, int colorid, float asp, float x1, float y1, float x2, float y2, int flag)
-{
- int align= (flag & UI_BUT_ALIGN);
- int alpha_offs= (flag & UI_BUT_DISABLED)?UI_DISABLED_ALPHA_OFFS:0;
-
- if(align) {
-
- /* *** BOTTOM OUTER SUNKEN EFFECT *** */
- if (!((align == UI_BUT_ALIGN_DOWN) ||
- (align == (UI_BUT_ALIGN_DOWN|UI_BUT_ALIGN_RIGHT)) ||
- (align == (UI_BUT_ALIGN_DOWN|UI_BUT_ALIGN_LEFT)))) {
- glEnable(GL_BLEND);
- MM_WHITE_OP;
- fdrawline(x1, y1-1, x2, y1-1);
- glDisable(GL_BLEND);
- }
- /* *** END BOTTOM OUTER SUNKEN EFFECT *** */
-
- switch(align) {
- case UI_BUT_ALIGN_TOP:
- uiSetRoundBox(12);
-
- /* last arg in shaded_button() determines whether the button is in the middle of
- * an alignment group or not. 0 = not middle, 1 = is in the middle.
- * Done to allow cleaner drawing
- */
-
- shaded_button(x1, y1, x2, y2, asp, colorid, flag, 0);
- break;
- case UI_BUT_ALIGN_DOWN:
- uiSetRoundBox(3);
- shaded_button(x1, y1, x2, y2, asp, colorid, flag, 0);
- break;
- case UI_BUT_ALIGN_LEFT:
-
- /* RIGHT OUTER SUNKEN EFFECT */
- glEnable(GL_BLEND);
- glShadeModel(GL_SMOOTH);
- glBegin(GL_LINES);
- MM_WHITE_OP;
- glVertex2f(x2+1,y1);
- MM_WHITE_TR;
- glVertex2f(x2+1,y2);
- glEnd();
- glDisable(GL_BLEND);
-
- uiSetRoundBox(6);
- shaded_button(x1, y1, x2, y2, asp, colorid, flag, 0);
- break;
- case UI_BUT_ALIGN_RIGHT:
-
- /* LEFT OUTER SUNKEN EFFECT */
- glEnable(GL_BLEND);
- glShadeModel(GL_SMOOTH);
- glBegin(GL_LINES);
- MM_WHITE_OP;
- glVertex2f(x1-1,y1);
- MM_WHITE_TR;
- glVertex2f(x1-1,y2);
- glEnd();
- glDisable(GL_BLEND);
-
- uiSetRoundBox(9);
- shaded_button(x1, y1, x2, y2, asp, colorid, flag, 0);
- break;
-
- case UI_BUT_ALIGN_DOWN|UI_BUT_ALIGN_RIGHT:
- uiSetRoundBox(1);
- shaded_button(x1, y1, x2, y2, asp, colorid, flag, 0);
- break;
- case UI_BUT_ALIGN_DOWN|UI_BUT_ALIGN_LEFT:
- uiSetRoundBox(2);
- shaded_button(x1, y1, x2, y2, asp, colorid, flag, 0);
- break;
- case UI_BUT_ALIGN_TOP|UI_BUT_ALIGN_RIGHT:
-
- /* LEFT OUTER SUNKEN EFFECT */
- glEnable(GL_BLEND);
- glShadeModel(GL_SMOOTH);
- glBegin(GL_LINES);
- MM_WHITE_OP;
- glVertex2f(x1-1,y1);
- MM_WHITE_TR;
- glVertex2f(x1-1,y2);
- glEnd();
- glDisable(GL_BLEND);
-
- uiSetRoundBox(8);
- shaded_button(x1, y1, x2, y2, asp, colorid, flag, 0);
- break;
- case UI_BUT_ALIGN_TOP|UI_BUT_ALIGN_LEFT:
-
- /* RIGHT OUTER SUNKEN EFFECT */
- glEnable(GL_BLEND);
- glShadeModel(GL_SMOOTH);
- glBegin(GL_LINES);
- MM_WHITE_OP;
- glVertex2f(x2+1,y1);
- MM_WHITE_TR;
- glVertex2f(x2+1,y2);
- glEnd();
- glDisable(GL_BLEND);
-
- uiSetRoundBox(4);
- shaded_button(x1, y1, x2, y2, asp, colorid, flag, 0);
- break;
-
- default:
- shaded_button(x1, y1, x2, y2, asp, colorid, flag, 1);
- break;
- }
- }
- else {
- glEnable(GL_BLEND);
- glShadeModel(GL_SMOOTH);
-
- /* BOTTOM OUTER SUNKEN EFFECT */
- MM_WHITE_OP;
- fdrawline(x1, y1-1, x2, y1-1);
-
- /* LEFT OUTER SUNKEN EFFECT */
- glBegin(GL_LINES);
- MM_WHITE_OP;
- glVertex2f(x1-1,y1);
- MM_WHITE_TR;
- glVertex2f(x1-1,y2);
- glEnd();
-
- /* RIGHT OUTER SUNKEN EFFECT */
- glBegin(GL_LINES);
- MM_WHITE_OP;
- glVertex2f(x2+1,y1);
- MM_WHITE_TR;
- glVertex2f(x2+1,y2);
- glEnd();
-
- glDisable(GL_BLEND);
-
- uiSetRoundBox(15);
- shaded_button(x1, y1, x2, y2, asp, colorid, flag, 0);
- }
-
- /* *** EXTRA DRAWING FOR SPECIFIC CONTROL TYPES *** */
- switch(type) {
- case ICONROW:
- case ICONTEXTROW:
- /* DARKENED AREA */
- glEnable(GL_BLEND);
-
- glColor4ub(0, 0, 0, 30);
- glRectf(x2-9, y1, x2, y2);
-
- glDisable(GL_BLEND);
- /* END DARKENED AREA */
-
- /* ICONROW DOUBLE-ARROW */
- UI_ThemeColorShadeAlpha(colorid, -80, alpha_offs);
- ui_iconrow_arrows(x1, y1, x2, y2);
- /* END ICONROW DOUBLE-ARROW */
- break;
- case MENU:
- /* DARKENED AREA */
- glEnable(GL_BLEND);
-
- glColor4ub(0, 0, 0, 30);
- glRectf(x2-18, y1, x2, y2);
-
- glDisable(GL_BLEND);
- /* END DARKENED AREA */
-
- /* MENU DOUBLE-ARROW */
- UI_ThemeColorShadeAlpha(colorid, -80, alpha_offs);
- ui_menu_arrows(x1, y1, x2, y2, asp);
- /* MENU DOUBLE-ARROW */
- break;
- }
-}
-
-/* number/text field drawing code */
-static void ui_default_flat(int type, int colorid, float asp, float x1, float y1, float x2, float y2, int flag)
-{
- int align= (flag & UI_BUT_ALIGN);
- int alpha_offs= (flag & UI_BUT_DISABLED)?UI_DISABLED_ALPHA_OFFS:0;
-
- if(align) {
-
- /* *** BOTTOM OUTER SUNKEN EFFECT *** */
- if (!((align == UI_BUT_ALIGN_DOWN) ||
- (align == (UI_BUT_ALIGN_DOWN|UI_BUT_ALIGN_RIGHT)) ||
- (align == (UI_BUT_ALIGN_DOWN|UI_BUT_ALIGN_LEFT)))) {
- glEnable(GL_BLEND);
- MM_WHITE_OP;
- fdrawline(x1, y1-1, x2, y1-1);
- glDisable(GL_BLEND);
- }
- /* *** END BOTTOM OUTER SUNKEN EFFECT *** */
-
- switch(align) {
- case UI_BUT_ALIGN_TOP:
- uiSetRoundBox(12);
-
- /* last arg in shaded_button() determines whether the button is in the middle of
- * an alignment group or not. 0 = not middle, 1 = is in the middle.
- * Done to allow cleaner drawing
- */
-
- flat_button(x1, y1, x2, y2, asp, colorid, flag, 0);
- break;
- case UI_BUT_ALIGN_DOWN:
- uiSetRoundBox(3);
- flat_button(x1, y1, x2, y2, asp, colorid, flag, 0);
- break;
- case UI_BUT_ALIGN_LEFT:
-
- /* RIGHT OUTER SUNKEN EFFECT */
- glEnable(GL_BLEND);
- glShadeModel(GL_SMOOTH);
- glBegin(GL_LINES);
- MM_WHITE_OP;
- glVertex2f(x2+1,y1);
- MM_WHITE_TR;
- glVertex2f(x2+1,y2);
- glEnd();
- glDisable(GL_BLEND);
-
- uiSetRoundBox(6);
- flat_button(x1, y1, x2, y2, asp, colorid, flag, 0);
- break;
- case UI_BUT_ALIGN_RIGHT:
-
- /* LEFT OUTER SUNKEN EFFECT */
- glEnable(GL_BLEND);
- glShadeModel(GL_SMOOTH);
- glBegin(GL_LINES);
- MM_WHITE_OP;
- glVertex2f(x1-1,y1);
- MM_WHITE_TR;
- glVertex2f(x1-1,y2);
- glEnd();
- glDisable(GL_BLEND);
-
- uiSetRoundBox(9);
- flat_button(x1, y1, x2, y2, asp, colorid, flag, 0);
- break;
-
- case UI_BUT_ALIGN_DOWN|UI_BUT_ALIGN_RIGHT:
- uiSetRoundBox(1);
- flat_button(x1, y1, x2, y2, asp, colorid, flag, 0);
- break;
- case UI_BUT_ALIGN_DOWN|UI_BUT_ALIGN_LEFT:
- uiSetRoundBox(2);
- flat_button(x1, y1, x2, y2, asp, colorid, flag, 0);
- break;
- case UI_BUT_ALIGN_TOP|UI_BUT_ALIGN_RIGHT:
-
- /* LEFT OUTER SUNKEN EFFECT */
- glEnable(GL_BLEND);
- glShadeModel(GL_SMOOTH);
- glBegin(GL_LINES);
- MM_WHITE_OP;
- glVertex2f(x1-1,y1);
- MM_WHITE_TR;
- glVertex2f(x1-1,y2);
- glEnd();
- glDisable(GL_BLEND);
-
- uiSetRoundBox(8);
- flat_button(x1, y1, x2, y2, asp, colorid, flag, 0);
- break;
- case UI_BUT_ALIGN_TOP|UI_BUT_ALIGN_LEFT:
-
- /* RIGHT OUTER SUNKEN EFFECT */
- glEnable(GL_BLEND);
- glShadeModel(GL_SMOOTH);
- glBegin(GL_LINES);
- MM_WHITE_OP;
- glVertex2f(x2+1,y1);
- MM_WHITE_TR;
- glVertex2f(x2+1,y2);
- glEnd();
- glDisable(GL_BLEND);
-
- uiSetRoundBox(4);
- flat_button(x1, y1, x2, y2, asp, colorid, flag, 0);
- break;
-
- default:
- flat_button(x1, y1, x2, y2, asp, colorid, flag, 1);
- break;
- }
- }
- else {
-
- glEnable(GL_BLEND);
- glShadeModel(GL_SMOOTH);
-
- /* BOTTOM OUTER SUNKEN EFFECT */
- MM_WHITE_OP;
- fdrawline(x1, y1-1, x2, y1-1);
-
- /* LEFT OUTER SUNKEN EFFECT */
- glBegin(GL_LINES);
- MM_WHITE_OP;
- glVertex2f(x1-1,y1);
- MM_WHITE_TR;
- glVertex2f(x1-1,y2);
- glEnd();
-
- /* RIGHT OUTER SUNKEN EFFECT */
- glBegin(GL_LINES);
- MM_WHITE_OP;
- glVertex2f(x2+1,y1);
- MM_WHITE_TR;
- glVertex2f(x2+1,y2);
- glEnd();
-
- glDisable(GL_BLEND);
-
- uiSetRoundBox(15);
- flat_button(x1, y1, x2, y2, asp, colorid, flag, 0);
- }
-
- /* *** EXTRA DRAWING FOR SPECIFIC CONTROL TYPES *** */
- switch(type) {
- case NUM:
- case NUMABS:
- /* SIDE ARROWS */
- /* left */
- if(flag & UI_SELECT) {
- if(flag & UI_ACTIVE) UI_ThemeColorShadeAlpha(colorid, -80, alpha_offs);
- else UI_ThemeColorShadeAlpha(colorid, -80, alpha_offs);
- } else {
- if(flag & UI_ACTIVE) UI_ThemeColorShadeAlpha(colorid, -45, alpha_offs);
- else UI_ThemeColorShadeAlpha(colorid, -20, alpha_offs);
- }
-
- ui_num_arrows(x1, y1, x2, y2, asp);
- /* END SIDE ARROWS */
- }
-}
-
-/* default theme callback */
-static void ui_draw_default(int type, int colorid, float aspect, float x1, float y1, float x2, float y2, int flag)
-{
-
- switch(type) {
- case TEX:
- case IDPOIN:
- case NUM:
- case NUMABS:
- ui_default_flat(type, colorid, aspect, x1, y1, x2, y2, flag);
- break;
- case ICONROW:
- case ICONTEXTROW:
- case MENU:
- default:
- ui_default_button(type, colorid, aspect, x1, y1, x2, y2, flag);
- }
-
-}
-
-
-/* *************** OLDSKOOL THEME ***************** */
-
-static void ui_draw_outlineX(float x1, float y1, float x2, float y2, float asp1)
-{
- float vec[2];
-
- glBegin(GL_LINE_LOOP);
- vec[0]= x1+asp1; vec[1]= y1-asp1;
- glVertex2fv(vec);
- vec[0]= x2-asp1;
- glVertex2fv(vec);
- vec[0]= x2+asp1; vec[1]= y1+asp1;
- glVertex2fv(vec);
- vec[1]= y2-asp1;
- glVertex2fv(vec);
- vec[0]= x2-asp1; vec[1]= y2+asp1;
- glVertex2fv(vec);
- vec[0]= x1+asp1;
- glVertex2fv(vec);
- vec[0]= x1-asp1; vec[1]= y2-asp1;
- glVertex2fv(vec);
- vec[1]= y1+asp1;
- glVertex2fv(vec);
- glEnd();
-
-}
-
-
-static void ui_draw_oldskool(int type, int colorid, float asp, float x1, float y1, float x2, float y2, int flag)
-{
- int alpha_offs= (flag & UI_BUT_DISABLED)?UI_DISABLED_ALPHA_OFFS:0;
- /* paper */
- if(flag & UI_SELECT) {
- if(flag & UI_ACTIVE) UI_ThemeColorShade(colorid, -40);
- else UI_ThemeColorShade(colorid, -30);
- }
- else {
- if(flag & UI_ACTIVE) UI_ThemeColorShade(colorid, +30);
- else UI_ThemeColorShade(colorid, +20);
- }
-
- glRectf(x1+1, y1+1, x2-1, y2-1);
-
- x1+= asp;
- x2-= asp;
- y1+= asp;
- y2-= asp;
-
- /* below */
- if(flag & UI_SELECT) UI_ThemeColorShade(colorid, 0);
- else UI_ThemeColorShade(colorid, -30);
- fdrawline(x1, y1, x2, y1);
-
- /* right */
- fdrawline(x2, y1, x2, y2);
-
- /* top */
- if(flag & UI_SELECT) UI_ThemeColorShade(colorid, -30);
- else UI_ThemeColorShade(colorid, 0);
- fdrawline(x1, y2, x2, y2);
-
- /* left */
- fdrawline(x1, y1, x1, y2);
-
- /* outline */
- glColor3ub(0,0,0);
- ui_draw_outlineX(x1, y1, x2, y2, asp);
-
-
- /* special type decorations */
- switch(type) {
- case NUM:
- case NUMABS:
- if(flag & UI_SELECT) UI_ThemeColorShadeAlpha(colorid, -60, alpha_offs);
- else UI_ThemeColorShadeAlpha(colorid, -30, alpha_offs);
- ui_num_arrows(x1, y1, x2, y2, asp);
- break;
-
- case ICONROW:
- case ICONTEXTROW:
- if(flag & UI_ACTIVE) UI_ThemeColorShadeAlpha(colorid, 0, alpha_offs);
- else UI_ThemeColorShadeAlpha(colorid, -10, alpha_offs);
- glRectf(x2-9, y1+asp, x2-asp, y2-asp);
-
- UI_ThemeColorShadeAlpha(colorid, -50, alpha_offs);
- ui_iconrow_arrows(x1, y1, x2, y2);
- break;
-
- case MENU:
- if(flag & UI_ACTIVE) UI_ThemeColorShadeAlpha(colorid, 0, alpha_offs);
- else UI_ThemeColorShadeAlpha(colorid, -10, alpha_offs);
- glRectf(x2-17, y1+asp, x2-asp, y2-asp);
-
- UI_ThemeColorShadeAlpha(colorid, -50, alpha_offs);
- ui_menu_arrows(x1, y1, x2, y2, asp);
- break;
- }
-
-}
-
-static void ui_draw_round(int type, int colorid, float asp, float x1, float y1, float x2, float y2, int flag)
-{
- float rad, maxrad=7.0;
- int align= (flag & UI_BUT_ALIGN), curshade;
- int alpha_offs= (flag & UI_BUT_DISABLED)?UI_DISABLED_ALPHA_OFFS:0;
-
- /* rounded corners */
- rad= (y2-y1)/2.0;
- if (rad>(x2-x1)/2) rad = (x2-x1)/2;
- if (maxrad) {
- if (rad > maxrad) rad = maxrad;
- }
- /* end rounded corners */
-
- /* paper */
- if(flag & UI_SELECT) {
- if(flag & UI_ACTIVE) curshade= -40;
- else curshade= -30;
- }
- else {
- if(flag & UI_ACTIVE) curshade= 30;
- else curshade= +20;
- }
-
- UI_ThemeColorShade(colorid, curshade);
-
- /* alignment */
- if(align) {
- switch(align) {
- case UI_BUT_ALIGN_TOP:
- uiSetRoundBox(12);
- break;
- case UI_BUT_ALIGN_DOWN:
- uiSetRoundBox(3);
- break;
- case UI_BUT_ALIGN_LEFT:
- uiSetRoundBox(6);
- break;
- case UI_BUT_ALIGN_RIGHT:
- uiSetRoundBox(9);
- break;
-
- case UI_BUT_ALIGN_DOWN|UI_BUT_ALIGN_RIGHT:
- uiSetRoundBox(1);
- break;
- case UI_BUT_ALIGN_DOWN|UI_BUT_ALIGN_LEFT:
- uiSetRoundBox(2);
- break;
- case UI_BUT_ALIGN_TOP|UI_BUT_ALIGN_RIGHT:
- uiSetRoundBox(8);
- break;
- case UI_BUT_ALIGN_TOP|UI_BUT_ALIGN_LEFT:
- uiSetRoundBox(4);
- break;
-
- default:
- uiSetRoundBox(0);
- break;
- }
- }
- else {
- uiSetRoundBox(15);
- }
- /* end alignment */
-
- /* draw the base button */
- round_button_flat(colorid, asp, x1, y1, x2, y2, flag, rad);
-
- /* special type decorations */
- switch(type) {
- case TOG:
- case TOGN:
- case TOG3:
- ui_draw_toggle_checkbox(flag, type, colorid, x1, y1, x2, y2);
- break;
- case NUM:
- case NUMABS:
- UI_ThemeColorShadeAlpha(colorid, curshade-60, alpha_offs);
- ui_num_arrows(x1, y1, x2, y2, asp);
- break;
-
- case ICONROW:
- case ICONTEXTROW:
- UI_ThemeColorShadeAlpha(colorid, curshade-60, alpha_offs);
- ui_iconrow_arrows(x1, y1, x2, y2);
- break;
-
- case MENU:
- case BLOCK:
- UI_ThemeColorShadeAlpha(colorid, curshade-60, alpha_offs);
- ui_menu_arrows(x1, y1, x2, y2, asp);
- break;
- }
-}
-
-/* *************** MINIMAL THEME ***************** */
-
-// theme can define an embosfunc and sliderfunc, text+icon drawing is standard, no theme.
-
-
-
-/* super minimal button as used in logic menu */
-static void ui_draw_minimal(int type, int colorid, float asp, float x1, float y1, float x2, float y2, int flag)
-{
- int alpha_offs= (flag & UI_BUT_DISABLED)?UI_DISABLED_ALPHA_OFFS:0;
-
- /* too much space between buttons */
-
- if (type==TEX || type==IDPOIN) {
- x1+= asp;
- x2-= (asp*2);
- //y1+= asp;
- y2-= asp;
- } else {
- /* Less space between buttons looks nicer */
- y2-= asp;
- x2-= asp;
- }
-
- /* paper */
- if(flag & UI_SELECT) {
- if(flag & UI_ACTIVE) UI_ThemeColorShade(colorid, -40);
- else UI_ThemeColorShade(colorid, -30);
- }
- else {
- if(flag & UI_ACTIVE) UI_ThemeColorShade(colorid, +20);
- else UI_ThemeColorShade(colorid, +10);
- }
-
- glRectf(x1, y1, x2, y2);
-
- if (type==TEX || type==IDPOIN) {
- UI_ThemeColorShade(colorid, -60);
-
- /* top */
- fdrawline(x1, y2, x2, y2);
- /* left */
- fdrawline(x1, y1, x1, y2);
-
-
- /* text underline, some */
- UI_ThemeColorShade(colorid, +50);
- glEnable(GL_LINE_STIPPLE);
- glLineStipple(1, 0x8888);
- fdrawline(x1+(asp*2), y1+(asp*3), x2-(asp*2), y1+(asp*3));
- glDisable(GL_LINE_STIPPLE);
-
-
- UI_ThemeColorShade(colorid, +60);
- /* below */
- fdrawline(x1, y1, x2, y1);
- /* right */
- fdrawline(x2, y1, x2, y2);
-
- } else {
- if(flag & UI_SELECT) {
- UI_ThemeColorShade(colorid, -60);
-
- /* top */
- fdrawline(x1, y2, x2, y2);
- /* left */
- fdrawline(x1, y1, x1, y2);
- UI_ThemeColorShade(colorid, +40);
-
- /* below */
- fdrawline(x1, y1, x2, y1);
- /* right */
- fdrawline(x2, y1, x2, y2);
- }
- else {
- UI_ThemeColorShade(colorid, +40);
-
- /* top */
- fdrawline(x1, y2, x2, y2);
- /* left */
- fdrawline(x1, y1, x1, y2);
-
- UI_ThemeColorShade(colorid, -60);
- /* below */
- fdrawline(x1, y1, x2, y1);
- /* right */
- fdrawline(x2, y1, x2, y2);
- }
- }
-
- /* special type decorations */
- switch(type) {
- case NUM:
- case NUMABS:
- if(flag & UI_SELECT) UI_ThemeColorShadeAlpha(colorid, -60, alpha_offs);
- else UI_ThemeColorShadeAlpha(colorid, -30, alpha_offs);
- ui_num_arrows(x1, y1, x2, y2, asp);
- break;
-
- case ICONROW:
- case ICONTEXTROW:
- if(flag & UI_ACTIVE) UI_ThemeColorShadeAlpha(colorid, 0, alpha_offs);
- else UI_ThemeColorShadeAlpha(colorid, -10, alpha_offs);
- glRectf(x2-9, y1+asp, x2-asp, y2-asp);
-
- UI_ThemeColorShadeAlpha(colorid, -50, alpha_offs);
- ui_iconrow_arrows(x1, y1, x2, y2);
- break;
-
- case MENU:
- case BLOCK:
- if(flag & UI_ACTIVE) UI_ThemeColorShadeAlpha(colorid, 0, alpha_offs);
- else UI_ThemeColorShadeAlpha(colorid, -10, alpha_offs);
- glRectf(x2-17, y1+asp, x2-asp, y2-asp);
-
- UI_ThemeColorShadeAlpha(colorid, -50, alpha_offs);
- ui_menu_arrows(x1, y1, x2, y2, asp);
- break;
- }
-
-
-}
-
-
-/* fac is the slider handle position between x1 and x2 */
-static void ui_draw_slider(int colorid, float fac, float aspect, float x1, float y1, float x2, float y2, int flag)
-{
- int alpha_offs= (flag & UI_BUT_DISABLED)?UI_DISABLED_ALPHA_OFFS:0;
- float maxrad= 10.0;
- float rad;
- int origround, round = uiGetRoundBox();
-
- rad= (y2-y1)/2.0;
- if (rad>(x2-x1)/2) rad = (x2-x1)/2;
- if (rad > maxrad) rad = maxrad;
-
- if(flag & UI_ACTIVE) UI_ThemeColorShade(colorid, -75);
- else UI_ThemeColorShade(colorid, -45);
-
- origround = round;
- round &= ~(2|4);
- uiSetRoundBox(round);
-
- if (fac < rad) {
- /* if slider end is in the left end cap */
- float ofsy;
- float start_rad;
-
- start_rad = fac;
- ofsy = (origround!=0) ? ((rad - fac) * 0.5) : 0.f; /* shrink in Y if rounded but */
-
- gl_round_box(GL_POLYGON, x1, y1+ofsy, x1+fac, y2-ofsy, start_rad);
-
- } else if ( (fac >= rad) && (x1+fac < x2 - rad) ) {
- /* if the slider is in the middle */
-
- gl_round_box(GL_POLYGON, x1, y1, x1+fac, y2, rad);
-
- } else if (x1+fac >= x2-rad) {
- /* if the slider is in the right end cap */
- float extx, ofsy;
- float end_rad;
-
- /* draw the full slider area at 100% */
- uiSetRoundBox(origround);
- gl_round_box(GL_POLYGON, x1, y1, x2, y2, rad);
-
- /* don't draw anything else if the slider is completely full */
- if (x2 - (x1+fac) < 0.05f)
- return;
-
- /* tricky to trim off right end curve by drawing over it */
- extx = ((x1 + fac) - (x2 - rad)) * aspect; /* width of extension bit */
- end_rad = rad - extx - 1.0;
- ofsy = (origround!=0) ? (extx * 0.4) : 0.f; /* shrink in Y if rounded but */
-
- if (end_rad > 1.0) {
-
- if(flag & UI_SELECT) UI_ThemeColorShade(colorid, -20);
- else UI_ThemeColorShade(colorid, -0);
-
- round = origround;
- round &= ~(1|8);
- uiSetRoundBox(round);
- gl_round_box(GL_POLYGON, x1+fac-1.0, y1+ofsy, x2-1.0, y2-ofsy, end_rad);
- }
-
- /* trace over outline again, to cover up inaccuracies */
- UI_ThemeColorBlendShadeAlpha(TH_BUT_OUTLINE, TH_BACK, 0.1, -30, alpha_offs);
- uiSetRoundBox(origround);
- uiRoundRectFakeAA(x1, y1, x2, y2, rad, aspect);
- }
-
-
-
-}
-
-/* ************** STANDARD MENU DRAWING FUNCTION ************* */
-
-
-static void ui_shadowbox(float minx, float miny, float maxx, float maxy, float shadsize, unsigned char alpha)
-{
- glEnable(GL_BLEND);
- glShadeModel(GL_SMOOTH);
-
- /* right quad */
- glBegin(GL_POLYGON);
- glColor4ub(0, 0, 0, alpha);
- glVertex2f(maxx, miny);
- glVertex2f(maxx, maxy-0.3*shadsize);
- glColor4ub(0, 0, 0, 0);
- glVertex2f(maxx+shadsize, maxy-0.75*shadsize);
- glVertex2f(maxx+shadsize, miny);
- glEnd();
-
- /* corner shape */
- glBegin(GL_POLYGON);
- glColor4ub(0, 0, 0, alpha);
- glVertex2f(maxx, miny);
- glColor4ub(0, 0, 0, 0);
- glVertex2f(maxx+shadsize, miny);
- glVertex2f(maxx+0.7*shadsize, miny-0.7*shadsize);
- glVertex2f(maxx, miny-shadsize);
- glEnd();
-
- /* bottom quad */
- glBegin(GL_POLYGON);
- glColor4ub(0, 0, 0, alpha);
- glVertex2f(minx+0.3*shadsize, miny);
- glVertex2f(maxx, miny);
- glColor4ub(0, 0, 0, 0);
- glVertex2f(maxx, miny-shadsize);
- glVertex2f(minx+0.5*shadsize, miny-shadsize);
- glEnd();
-
- glDisable(GL_BLEND);
- glShadeModel(GL_FLAT);
-}
-
-void uiDrawBoxShadow(unsigned char alpha, float minx, float miny, float maxx, float maxy)
-{
- /* accumulated outline boxes to make shade not linear, is more pleasant */
- ui_shadowbox(minx, miny, maxx, maxy, 11.0, (20*alpha)>>8);
- ui_shadowbox(minx, miny, maxx, maxy, 7.0, (40*alpha)>>8);
- ui_shadowbox(minx, miny, maxx, maxy, 5.0, (80*alpha)>>8);
-
-}
-
-// background for pulldowns, pullups, and other drawing temporal menus....
-// has to be made themable still (now only color)
-
-void uiDrawMenuBox(float minx, float miny, float maxx, float maxy, short flag, short direction)
-{
- char col[4];
- int rounded = ELEM(UI_GetThemeValue(TH_BUT_DRAWTYPE), TH_ROUNDED, TH_ROUNDSHADED);
-
- UI_GetThemeColor4ubv(TH_MENU_BACK, col);
-
- if (rounded) {
- if (flag & UI_BLOCK_POPUP) {
- uiSetRoundBox(15);
- miny -= 4.0;
- maxy += 4.0;
- }
- else if (direction == UI_DOWN) {
- uiSetRoundBox(12);
- miny -= 4.0;
- } else if (direction == UI_TOP) {
- uiSetRoundBox(3);
- maxy += 4.0;
- } else {
- uiSetRoundBox(0);
- }
- }
-
- if( (flag & UI_BLOCK_NOSHADOW)==0) {
- /* accumulated outline boxes to make shade not linear, is more pleasant */
- ui_shadowbox(minx, miny, maxx, maxy, 11.0, (20*col[3])>>8);
- ui_shadowbox(minx, miny, maxx, maxy, 7.0, (40*col[3])>>8);
- ui_shadowbox(minx, miny, maxx, maxy, 5.0, (80*col[3])>>8);
- }
- glEnable(GL_BLEND);
- glColor4ubv((GLubyte *)col);
-
- if (rounded) {
- gl_round_box(GL_POLYGON, minx, miny, maxx, maxy, 4.0);
- } else {
- glRectf(minx, miny, maxx, maxy);
- }
- glDisable(GL_BLEND);
-}
-
-
-
-/* pulldown menu item */
-static void ui_draw_pulldown_item(int type, int colorid, float asp, float x1, float y1, float x2, float y2, int flag)
-{
- char col[4];
-
- UI_GetThemeColor4ubv(TH_MENU_BACK, col);
- if(col[3]!=255) {
- glEnable(GL_BLEND);
- }
-
- if((flag & UI_ACTIVE) && type!=LABEL) {
- UI_ThemeColor4(TH_MENU_HILITE);
- glRectf(x1, y1, x2, y2);
-
-
- } else {
- UI_ThemeColor4(colorid); // is set at TH_MENU_ITEM when pulldown opened.
- glRectf(x1, y1, x2, y2);
- }
-
- glDisable(GL_BLEND);
-}
-
-/* pulldown menu calling button */
-static void ui_draw_pulldown_round(int type, int colorid, float asp, float x1, float y1, float x2, float y2, int flag)
-{
-
- if(flag & UI_ACTIVE) {
- UI_ThemeColor(TH_MENU_HILITE);
-
- uiSetRoundBox(15);
- gl_round_box(GL_POLYGON, x1, y1+3, x2, y2-3, 7.0);
-
- glEnable( GL_LINE_SMOOTH );
- glEnable( GL_BLEND );
- gl_round_box(GL_LINE_LOOP, x1, y1+3, x2, y2-3, 7.0);
- glDisable( GL_LINE_SMOOTH );
- glDisable( GL_BLEND );
-
- } else {
- UI_ThemeColor(colorid); // is set at TH_MENU_ITEM when pulldown opened.
- glRectf(x1-1, y1+2, x2+1, y2-2);
- }
-
-}
-
/* ************** TEXT AND ICON DRAWING FUNCTIONS ************* */
-#define BUT_TEXT_NORMAL 0
-#define BUT_TEXT_SUNKEN 1
-
-void ui_draw_text(uiBut *but, float x, float y, int sunken)
-{
- int alpha_offs= (but->flag & UI_BUT_DISABLED)?UI_DISABLED_ALPHA_OFFS:0;
- int transopts;
- int len;
- float ypos = (sunken==BUT_TEXT_SUNKEN) ? (y-1) : y;
- char *cpoin;
-
- if(but->type==LABEL && but->hardmin!=0.0) {
- UI_ThemeColor(TH_BUT_TEXT_HI);
- }
- else if(but->dt==UI_EMBOSSP) {
- if((but->flag & UI_ACTIVE) && but->type!=LABEL) { // LABEL = title in pulldowns
- UI_ThemeColorShadeAlpha(TH_MENU_TEXT_HI, 0, alpha_offs);
- } else {
- UI_ThemeColorShadeAlpha(TH_MENU_TEXT, 0, alpha_offs);
- }
- }
- else {
- if(but->flag & UI_SELECT) {
- UI_ThemeColorShadeAlpha(TH_BUT_TEXT_HI, 0, alpha_offs);
- } else {
- UI_ThemeColorShadeAlpha(TH_BUT_TEXT, 0, alpha_offs);
- }
- }
-
- if (sunken == BUT_TEXT_SUNKEN) {
- float curcol[4];
-
- glGetFloatv(GL_CURRENT_COLOR, curcol); /* returns four components: r,g,b,a */
-
- /* only draw embossed text if the text color is darker than 0.5 mid-grey */
- if ((curcol[0] + curcol[1] + curcol[2]) * 0.3f < 0.5f)
- glColor4f(0.6f, 0.6f, 0.6f, 0.3f);
- else
- return;
- }
-
- ui_rasterpos_safe(x, ypos, but->aspect);
- if(but->type==IDPOIN) transopts= 0; // no translation, of course!
- else transopts= ui_translate_buttons();
-
- /* cut string in 2 parts */
- cpoin= strchr(but->drawstr, '|');
- if(cpoin) *cpoin= 0;
-
-#ifdef INTERNATIONAL
- if (but->type == FTPREVIEW)
- FTF_DrawNewFontString (but->drawstr+but->ofs, FTF_INPUT_UTF8);
- else
- UI_DrawString(but->font, but->drawstr+but->ofs, transopts);
-#else
- UI_DrawString(but->font, but->drawstr+but->ofs, transopts);
-#endif
-
- /* part text right aligned */
- if(cpoin) {
- len= UI_GetStringWidth(but->font, cpoin+1, ui_translate_buttons());
- ui_rasterpos_safe( but->x2 - len*but->aspect-3, ypos, but->aspect);
- UI_DrawString(but->font, cpoin+1, ui_translate_buttons());
- *cpoin= '|';
- }
-}
-
-/* draws text and icons for buttons */
-void ui_draw_text_icon(uiBut *but)
-{
- float x, y;
- short t, pos, ch;
- short selsta_tmp, selend_tmp, selsta_draw, selwidth_draw;
-
- /* check for button text label */
- if (but->type == ICONTEXTROW) {
- ui_draw_icon(but, (BIFIconID) (but->icon+but->iconadd), 0);
- }
- else {
-
- /* text button selection and cursor */
- if(but->editstr && but->pos != -1) {
-
- if ((but->selend - but->selsta) > 0) {
- /* text button selection */
- selsta_tmp = but->selsta + strlen(but->str);
- selend_tmp = but->selend + strlen(but->str);
-
- if(but->drawstr[0]!=0) {
- ch= but->drawstr[selsta_tmp];
- but->drawstr[selsta_tmp]= 0;
-
- selsta_draw = but->aspect*UI_GetStringWidth(but->font, but->drawstr+but->ofs, ui_translate_buttons()) + 3;
-
- but->drawstr[selsta_tmp]= ch;
-
-
- ch= but->drawstr[selend_tmp];
- but->drawstr[selend_tmp]= 0;
-
- selwidth_draw = but->aspect*UI_GetStringWidth(but->font, but->drawstr+but->ofs, ui_translate_buttons()) + 3;
-
- but->drawstr[selend_tmp]= ch;
-
- UI_ThemeColor(TH_BUT_TEXTFIELD_HI);
- glRects(but->x1+selsta_draw+1, but->y1+2, but->x1+selwidth_draw+1, but->y2-2);
- }
- } else {
- /* text cursor */
- pos= but->pos+strlen(but->str);
- if(pos >= but->ofs) {
- if(but->drawstr[0]!=0) {
- ch= but->drawstr[pos];
- but->drawstr[pos]= 0;
-
- t= but->aspect*UI_GetStringWidth(but->font, but->drawstr+but->ofs, ui_translate_buttons()) + 3;
-
- but->drawstr[pos]= ch;
- }
- else t= 3;
-
- glColor3ub(255,0,0);
- glRects(but->x1+t, but->y1+2, but->x1+t+2, but->y2-2);
- }
- }
- }
-
- if(but->type==BUT_TOGDUAL) {
- int dualset= 0;
- if(but->pointype==SHO)
- dualset= BTST( *(((short *)but->poin)+1), but->bitnr);
- else if(but->pointype==INT)
- dualset= BTST( *(((int *)but->poin)+1), but->bitnr);
-
- ui_draw_icon(but, ICON_DOT, dualset?0:-100);
- }
-
- if(but->drawstr[0]!=0) {
- int tog3= 0;
-
- /* If there's an icon too (made with uiDefIconTextBut) then draw the icon
- and offset the text label to accomodate it */
-
- if ( (but->flag & UI_HAS_ICON) && (but->flag & UI_ICON_LEFT) )
- {
- ui_draw_icon(but, but->icon, 0);
-
- if(but->editstr || (but->flag & UI_TEXT_LEFT)) x= but->x1 + but->aspect*UI_icon_get_width(but->icon)+5.0;
- else x= (but->x1+but->x2-but->strwidth+1)/2.0;
- }
- else
- {
- if(but->editstr || (but->flag & UI_TEXT_LEFT))
- x= but->x1+4.0;
- else if ELEM3(but->type, TOG, TOGN, TOG3)
- x= but->x1+18.0; /* offset for checkmark */
- else
- x= (but->x1+but->x2-but->strwidth+1)/2.0;
- }
-
- /* tog3 button exception; draws with glColor! */
- if(but->type==TOG3 && (but->flag & UI_SELECT)) {
-
- if( but->pointype==CHA ) {
- if( BTST( *(but->poin+2), but->bitnr )) tog3= 1;
- }
- else if( but->pointype ==SHO ) {
- short *sp= (short *)but->poin;
- if( BTST( sp[1], but->bitnr )) tog3= 1;
- }
-
- ui_tog3_invert(but->x1,but->y1,but->x2,but->y2, tog3);
- if (tog3) glColor3ub(255, 255, 0);
- }
-
- /* position and draw */
- y = (but->y1+but->y2- 9.0)/2.0;
-
- if (ELEM(but->type, LABEL, PULLDOWN) && !(but->flag & UI_ACTIVE))
- ui_draw_text(but, x, y, BUT_TEXT_SUNKEN);
-
- ui_draw_text(but, x, y, BUT_TEXT_NORMAL);
-
- }
- /* if there's no text label, then check to see if there's an icon only and draw it */
- else if( but->flag & UI_HAS_ICON ) {
- ui_draw_icon(but, (BIFIconID) (but->icon+but->iconadd), 0);
- }
- }
-}
-
-static void ui_draw_but_COL(uiBut *but)
-{
- float col[3];
- char colr, colg, colb;
-
- ui_get_but_vectorf(but, col);
-
- colr= floor(255.0*col[0]+0.5);
- colg= floor(255.0*col[1]+0.5);
- colb= floor(255.0*col[2]+0.5);
-
- /* exception... hrms, but can't simply use the emboss callback for this now. */
- /* this button type needs review, and nice integration with rest of API here */
- /* XXX 2.50 bad U global access */
- if(but->embossfunc == ui_draw_round) {
- char *cp= UI_ThemeGetColorPtr(U.themes.first, 0, TH_CUSTOM);
- cp[0]= colr; cp[1]= colg; cp[2]= colb;
- but->flag &= ~UI_SELECT;
- but->embossfunc(but->type, TH_CUSTOM, but->aspect, but->x1, but->y1, but->x2, but->y2, but->flag);
- }
- else
- {
-
- glColor3ub(colr, colg, colb);
- glRectf((but->x1), (but->y1), (but->x2), (but->y2));
- glColor3ub(0, 0, 0);
- fdrawbox((but->x1), (but->y1), (but->x2), (but->y2));
- }
-}
-
-/* draws in resolution of 20x4 colors */
-static void ui_draw_but_HSVCUBE(uiBut *but)
-{
- int a;
- float h,s,v;
- float dx, dy, sx1, sx2, sy, x, y;
- float col0[4][3]; // left half, rect bottom to top
- float col1[4][3]; // right half, rect bottom to top
-
- h= but->hsv[0];
- s= but->hsv[1];
- v= but->hsv[2];
-
- /* draw series of gouraud rects */
- glShadeModel(GL_SMOOTH);
-
- if(but->a1==0) { // H and V vary
- hsv_to_rgb(0.0, s, 0.0, &col1[0][0], &col1[0][1], &col1[0][2]);
- hsv_to_rgb(0.0, s, 0.333, &col1[1][0], &col1[1][1], &col1[1][2]);
- hsv_to_rgb(0.0, s, 0.666, &col1[2][0], &col1[2][1], &col1[2][2]);
- hsv_to_rgb(0.0, s, 1.0, &col1[3][0], &col1[3][1], &col1[3][2]);
- x= h; y= v;
- }
- else if(but->a1==1) { // H and S vary
- hsv_to_rgb(0.0, 0.0, v, &col1[0][0], &col1[0][1], &col1[0][2]);
- hsv_to_rgb(0.0, 0.333, v, &col1[1][0], &col1[1][1], &col1[1][2]);
- hsv_to_rgb(0.0, 0.666, v, &col1[2][0], &col1[2][1], &col1[2][2]);
- hsv_to_rgb(0.0, 1.0, v, &col1[3][0], &col1[3][1], &col1[3][2]);
- x= h; y= s;
- }
- else if(but->a1==2) { // S and V vary
- hsv_to_rgb(h, 0.0, 0.0, &col1[0][0], &col1[0][1], &col1[0][2]);
- hsv_to_rgb(h, 0.333, 0.0, &col1[1][0], &col1[1][1], &col1[1][2]);
- hsv_to_rgb(h, 0.666, 0.0, &col1[2][0], &col1[2][1], &col1[2][2]);
- hsv_to_rgb(h, 1.0, 0.0, &col1[3][0], &col1[3][1], &col1[3][2]);
- x= v; y= s;
- }
- else { // only hue slider
- hsv_to_rgb(0.0, 1.0, 1.0, &col1[0][0], &col1[0][1], &col1[0][2]);
- VECCOPY(col1[1], col1[0]);
- VECCOPY(col1[2], col1[0]);
- VECCOPY(col1[3], col1[0]);
- x= h; y= 0.5;
- }
-
- for(dx=0.0; dx<1.0; dx+= 0.05) {
- // previous color
- VECCOPY(col0[0], col1[0]);
- VECCOPY(col0[1], col1[1]);
- VECCOPY(col0[2], col1[2]);
- VECCOPY(col0[3], col1[3]);
-
- // new color
- if(but->a1==0) { // H and V vary
- hsv_to_rgb(dx, s, 0.0, &col1[0][0], &col1[0][1], &col1[0][2]);
- hsv_to_rgb(dx, s, 0.333, &col1[1][0], &col1[1][1], &col1[1][2]);
- hsv_to_rgb(dx, s, 0.666, &col1[2][0], &col1[2][1], &col1[2][2]);
- hsv_to_rgb(dx, s, 1.0, &col1[3][0], &col1[3][1], &col1[3][2]);
- }
- else if(but->a1==1) { // H and S vary
- hsv_to_rgb(dx, 0.0, v, &col1[0][0], &col1[0][1], &col1[0][2]);
- hsv_to_rgb(dx, 0.333, v, &col1[1][0], &col1[1][1], &col1[1][2]);
- hsv_to_rgb(dx, 0.666, v, &col1[2][0], &col1[2][1], &col1[2][2]);
- hsv_to_rgb(dx, 1.0, v, &col1[3][0], &col1[3][1], &col1[3][2]);
- }
- else if(but->a1==2) { // S and V vary
- hsv_to_rgb(h, 0.0, dx, &col1[0][0], &col1[0][1], &col1[0][2]);
- hsv_to_rgb(h, 0.333, dx, &col1[1][0], &col1[1][1], &col1[1][2]);
- hsv_to_rgb(h, 0.666, dx, &col1[2][0], &col1[2][1], &col1[2][2]);
- hsv_to_rgb(h, 1.0, dx, &col1[3][0], &col1[3][1], &col1[3][2]);
- }
- else { // only H
- hsv_to_rgb(dx, 1.0, 1.0, &col1[0][0], &col1[0][1], &col1[0][2]);
- VECCOPY(col1[1], col1[0]);
- VECCOPY(col1[2], col1[0]);
- VECCOPY(col1[3], col1[0]);
- }
-
- // rect
- sx1= but->x1 + dx*(but->x2-but->x1);
- sx2= but->x1 + (dx+0.05)*(but->x2-but->x1);
- sy= but->y1;
- dy= (but->y2-but->y1)/3.0;
-
- glBegin(GL_QUADS);
- for(a=0; a<3; a++, sy+=dy) {
- glColor3fv(col0[a]);
- glVertex2f(sx1, sy);
-
- glColor3fv(col1[a]);
- glVertex2f(sx2, sy);
-
- glColor3fv(col1[a+1]);
- glVertex2f(sx2, sy+dy);
-
- glColor3fv(col0[a+1]);
- glVertex2f(sx1, sy+dy);
- }
- glEnd();
- }
-
- glShadeModel(GL_FLAT);
-
- /* cursor */
- x= but->x1 + x*(but->x2-but->x1);
- y= but->y1 + y*(but->y2-but->y1);
- CLAMP(x, but->x1+3.0, but->x2-3.0);
- CLAMP(y, but->y1+3.0, but->y2-3.0);
-
- fdrawXORcirc(x, y, 3.1);
-
- /* outline */
- glColor3ub(0, 0, 0);
- fdrawbox((but->x1), (but->y1), (but->x2), (but->y2));
-}
+#if 0
#ifdef INTERNATIONAL
static void ui_draw_but_CHARTAB(uiBut *but)
{
/* XXX 2.50 bad global access */
-#if 0
/* Some local variables */
float sx, sy, ex, ey;
float width, height;
@@ -2573,17 +495,17 @@ static void ui_draw_but_CHARTAB(uiBut *but)
charmax = G.charmax = 0xffff;
/* Calculate the size of the button */
- width = abs(but->x2 - but->x1);
- height = abs(but->y2 - but->y1);
+ width = abs(rect->xmax - rect->xmin);
+ height = abs(rect->ymax - rect->ymin);
butw = floor(width / 12);
buth = floor(height / 6);
/* Initialize variables */
- sx = but->x1;
- ex = but->x1 + butw;
- sy = but->y1 + height - buth;
- ey = but->y1 + height;
+ sx = rect->xmin;
+ ex = rect->xmin + butw;
+ sy = rect->ymin + height - buth;
+ ey = rect->ymin + height;
cs = G.charstart;
@@ -2619,7 +541,7 @@ static void ui_draw_but_CHARTAB(uiBut *but)
glShadeModel(GL_SMOOTH);
glColor3ub(200, 200, 200);
- glRectf((but->x1), (but->y1), (but->x2), (but->y2));
+ glRectf((rect->xmin), (rect->ymin), (rect->xmax), (rect->ymax));
glColor3ub(0, 0, 0);
for(y = 0; y < 6; y++)
@@ -2697,8 +619,8 @@ static void ui_draw_but_CHARTAB(uiBut *but)
/* Add the y position and reset x position */
sy -= buth;
ey -= buth;
- sx = but->x1;
- ex = but->x1 + butw;
+ sx = rect->xmin;
+ ex = rect->xmin + butw;
}
glShadeModel(GL_FLAT);
@@ -2720,14 +642,14 @@ static void ui_draw_but_CHARTAB(uiBut *but)
/* resets the font size */
if(G.ui_international == TRUE)
{
- uiSetCurFont(but->block, UI_HELV);
+ // uiSetCurFont(but->block, UI_HELV);
}
-#endif
}
#endif // INTERNATIONAL
+#endif
-static void ui_draw_but_COLORBAND(uiBut *but)
+void ui_draw_but_COLORBAND(uiBut *but, uiWidgetColors *wcol, rcti *rect)
{
ColorBand *coba;
CBData *cbd;
@@ -2738,10 +660,10 @@ static void ui_draw_but_COLORBAND(uiBut *but)
coba= (ColorBand *)(but->editcoba? but->editcoba: but->poin);
if(coba==NULL) return;
- x1= but->x1;
- y1= but->y1;
- sizex= but->x2-x1;
- sizey= but->y2-y1;
+ x1= rect->xmin;
+ y1= rect->ymin;
+ sizex= rect->xmax-x1;
+ sizey= rect->ymax-y1;
/* first background, to show tranparency */
dx= sizex/12.0;
@@ -2854,7 +776,7 @@ static void ui_draw_but_COLORBAND(uiBut *but)
glEnd();
}
-static void ui_draw_but_NORMAL(uiBut *but)
+void ui_draw_but_NORMAL(uiBut *but, uiWidgetColors *wcol, rcti *rect)
{
static GLuint displist=0;
int a, old[8];
@@ -2866,9 +788,9 @@ static void ui_draw_but_NORMAL(uiBut *but)
glGetMaterialfv(GL_FRONT, GL_DIFFUSE, diff);
/* backdrop */
- UI_ThemeColor(TH_BUT_NEUTRAL);
+ glColor3ubv(wcol->inner);
uiSetRoundBox(15);
- gl_round_box(GL_POLYGON, but->x1, but->y1, but->x2, but->y2, 5.0f);
+ gl_round_box(GL_POLYGON, rect->xmin, rect->ymin, rect->xmax, rect->ymax, 5.0f);
/* sphere color */
glMaterialfv(GL_FRONT, GL_DIFFUSE, diffn);
@@ -2894,10 +816,10 @@ static void ui_draw_but_NORMAL(uiBut *but)
/* transform to button */
glPushMatrix();
- glTranslatef(but->x1 + 0.5f*(but->x2-but->x1), but->y1+ 0.5f*(but->y2-but->y1), 0.0f);
- size= (but->x2-but->x1)/200.f;
+ glTranslatef(rect->xmin + 0.5f*(rect->xmax-rect->xmin), rect->ymin+ 0.5f*(rect->ymax-rect->ymin), 0.0f);
+ size= (rect->xmax-rect->xmin)/200.f;
glScalef(size, size, size);
-
+
if(displist==0) {
GLUquadricObj *qobj;
@@ -2916,13 +838,22 @@ static void ui_draw_but_NORMAL(uiBut *but)
else glCallList(displist);
/* restore */
- glPopMatrix();
glDisable(GL_LIGHTING);
glDisable(GL_CULL_FACE);
glMaterialfv(GL_FRONT, GL_DIFFUSE, diff);
-
glDisable(GL_LIGHT7);
+ /* AA circle */
+ glEnable(GL_BLEND);
+ glEnable(GL_LINE_SMOOTH );
+ glColor3ubv(wcol->inner);
+ glutil_draw_lined_arc(0.0f, M_PI*2.0, 100.0f, 32);
+ glDisable(GL_BLEND);
+ glDisable(GL_LINE_SMOOTH );
+
+ /* matrix after circle */
+ glPopMatrix();
+
/* enable blender light */
for(a=0; a<8; a++) {
if(old[a])
@@ -2930,38 +861,45 @@ static void ui_draw_but_NORMAL(uiBut *but)
}
}
-static void ui_draw_but_curve_grid(uiBut *but, float zoomx, float zoomy, float offsx, float offsy, float step)
+static void ui_draw_but_curve_grid(rcti *rect, float zoomx, float zoomy, float offsx, float offsy, float step)
{
float dx, dy, fx, fy;
glBegin(GL_LINES);
dx= step*zoomx;
- fx= but->x1 + zoomx*(-offsx);
- if(fx > but->x1) fx -= dx*( floor(fx-but->x1));
- while(fx < but->x2) {
- glVertex2f(fx, but->y1);
- glVertex2f(fx, but->y2);
+ fx= rect->xmin + zoomx*(-offsx);
+ if(fx > rect->xmin) fx -= dx*( floor(fx-rect->xmin));
+ while(fx < rect->xmax) {
+ glVertex2f(fx, rect->ymin);
+ glVertex2f(fx, rect->ymax);
fx+= dx;
}
dy= step*zoomy;
- fy= but->y1 + zoomy*(-offsy);
- if(fy > but->y1) fy -= dy*( floor(fy-but->y1));
- while(fy < but->y2) {
- glVertex2f(but->x1, fy);
- glVertex2f(but->x2, fy);
+ fy= rect->ymin + zoomy*(-offsy);
+ if(fy > rect->ymin) fy -= dy*( floor(fy-rect->ymin));
+ while(fy < rect->ymax) {
+ glVertex2f(rect->xmin, fy);
+ glVertex2f(rect->xmax, fy);
fy+= dy;
}
glEnd();
}
-static void ui_draw_but_CURVE(ARegion *ar, uiBut *but)
+static void glColor3ubvShade(char *col, int shade)
+{
+ glColor3ub(col[0]-shade>0?col[0]-shade:0,
+ col[1]-shade>0?col[1]-shade:0,
+ col[2]-shade>0?col[2]-shade:0);
+}
+
+void ui_draw_but_CURVE(ARegion *ar, uiBut *but, uiWidgetColors *wcol, rcti *rect)
{
CurveMapping *cumap;
CurveMap *cuma;
CurveMapPoint *cmp;
- float fx, fy, dx, dy, fac[2], zoomx, zoomy, offsx, offsy;
+ float fx, fy, fac[2], zoomx, zoomy, offsx, offsy;
GLint scissor[4];
int a;
@@ -2970,46 +908,42 @@ static void ui_draw_but_CURVE(ARegion *ar, uiBut *but)
/* need scissor test, curve can draw outside of boundary */
glGetIntegerv(GL_VIEWPORT, scissor);
- fx= but->x1; fy= but->y1;
- ui_block_to_window_fl(ar, but->block, &fx, &fy);
- dx= but->x2; dy= but->y2;
- ui_block_to_window_fl(ar, but->block, &dx, &dy);
- glScissor((int)floor(fx), (int)floor(fy), (int)ceil(dx-fx), (int)ceil(dy-fy));
+ glScissor(ar->winrct.xmin + rect->xmin, ar->winrct.ymin+rect->ymin, rect->xmax-rect->xmin, rect->ymax-rect->ymin);
/* calculate offset and zoom */
- zoomx= (but->x2-but->x1-2.0*but->aspect)/(cumap->curr.xmax - cumap->curr.xmin);
- zoomy= (but->y2-but->y1-2.0*but->aspect)/(cumap->curr.ymax - cumap->curr.ymin);
+ zoomx= (rect->xmax-rect->xmin-2.0*but->aspect)/(cumap->curr.xmax - cumap->curr.xmin);
+ zoomy= (rect->ymax-rect->ymin-2.0*but->aspect)/(cumap->curr.ymax - cumap->curr.ymin);
offsx= cumap->curr.xmin-but->aspect/zoomx;
offsy= cumap->curr.ymin-but->aspect/zoomy;
/* backdrop */
if(cumap->flag & CUMA_DO_CLIP) {
- UI_ThemeColorShade(TH_BUT_NEUTRAL, -20);
- glRectf(but->x1, but->y1, but->x2, but->y2);
- UI_ThemeColor(TH_BUT_NEUTRAL);
- glRectf(but->x1 + zoomx*(cumap->clipr.xmin-offsx),
- but->y1 + zoomy*(cumap->clipr.ymin-offsy),
- but->x1 + zoomx*(cumap->clipr.xmax-offsx),
- but->y1 + zoomy*(cumap->clipr.ymax-offsy));
+ glColor3ubvShade(wcol->inner, -20);
+ glRectf(rect->xmin, rect->ymin, rect->xmax, rect->ymax);
+ glColor3ubv(wcol->inner);
+ glRectf(rect->xmin + zoomx*(cumap->clipr.xmin-offsx),
+ rect->ymin + zoomy*(cumap->clipr.ymin-offsy),
+ rect->xmin + zoomx*(cumap->clipr.xmax-offsx),
+ rect->ymin + zoomy*(cumap->clipr.ymax-offsy));
}
else {
- UI_ThemeColor(TH_BUT_NEUTRAL);
- glRectf(but->x1, but->y1, but->x2, but->y2);
+ glColor3ubv(wcol->inner);
+ glRectf(rect->xmin, rect->ymin, rect->xmax, rect->ymax);
}
/* grid, every .25 step */
- UI_ThemeColorShade(TH_BUT_NEUTRAL, -16);
- ui_draw_but_curve_grid(but, zoomx, zoomy, offsx, offsy, 0.25f);
+ glColor3ubvShade(wcol->inner, -16);
+ ui_draw_but_curve_grid(rect, zoomx, zoomy, offsx, offsy, 0.25f);
/* grid, every 1.0 step */
- UI_ThemeColorShade(TH_BUT_NEUTRAL, -24);
- ui_draw_but_curve_grid(but, zoomx, zoomy, offsx, offsy, 1.0f);
+ glColor3ubvShade(wcol->inner, -24);
+ ui_draw_but_curve_grid(rect, zoomx, zoomy, offsx, offsy, 1.0f);
/* axes */
- UI_ThemeColorShade(TH_BUT_NEUTRAL, -50);
+ glColor3ubvShade(wcol->inner, -50);
glBegin(GL_LINES);
- glVertex2f(but->x1, but->y1 + zoomy*(-offsy));
- glVertex2f(but->x2, but->y1 + zoomy*(-offsy));
- glVertex2f(but->x1 + zoomx*(-offsx), but->y1);
- glVertex2f(but->x1 + zoomx*(-offsx), but->y2);
+ glVertex2f(rect->xmin, rect->ymin + zoomy*(-offsy));
+ glVertex2f(rect->xmax, rect->ymin + zoomy*(-offsy));
+ glVertex2f(rect->xmin + zoomx*(-offsx), rect->ymin);
+ glVertex2f(rect->xmin + zoomx*(-offsx), rect->ymax);
glEnd();
/* cfra option */
@@ -3017,8 +951,8 @@ static void ui_draw_but_CURVE(ARegion *ar, uiBut *but)
if(cumap->flag & CUMA_DRAW_CFRA) {
glColor3ub(0x60, 0xc0, 0x40);
glBegin(GL_LINES);
- glVertex2f(but->x1 + zoomx*(cumap->sample[0]-offsx), but->y1);
- glVertex2f(but->x1 + zoomx*(cumap->sample[0]-offsx), but->y2);
+ glVertex2f(rect->xmin + zoomx*(cumap->sample[0]-offsx), rect->ymin);
+ glVertex2f(rect->xmin + zoomx*(cumap->sample[0]-offsx), rect->ymax);
glEnd();
}*/
/* sample option */
@@ -3029,8 +963,8 @@ static void ui_draw_but_CURVE(ARegion *ar, uiBut *but)
glColor3ub(240, 240, 240);
glBegin(GL_LINES);
- glVertex2f(but->x1 + zoomx*(lum-offsx), but->y1);
- glVertex2f(but->x1 + zoomx*(lum-offsx), but->y2);
+ glVertex2f(rect->xmin + zoomx*(lum-offsx), rect->ymin);
+ glVertex2f(rect->xmin + zoomx*(lum-offsx), rect->ymax);
glEnd();
}
else {
@@ -3042,14 +976,14 @@ static void ui_draw_but_CURVE(ARegion *ar, uiBut *but)
glColor3ub(100, 100, 240);
glBegin(GL_LINES);
- glVertex2f(but->x1 + zoomx*(cumap->sample[cumap->cur]-offsx), but->y1);
- glVertex2f(but->x1 + zoomx*(cumap->sample[cumap->cur]-offsx), but->y2);
+ glVertex2f(rect->xmin + zoomx*(cumap->sample[cumap->cur]-offsx), rect->ymin);
+ glVertex2f(rect->xmin + zoomx*(cumap->sample[cumap->cur]-offsx), rect->ymax);
glEnd();
}
}*/
/* the curve */
- UI_ThemeColorBlend(TH_TEXT, TH_BUT_NEUTRAL, 0.35);
+ glColor3ubv(wcol->item);
glEnable(GL_LINE_SMOOTH);
glEnable(GL_BLEND);
glBegin(GL_LINE_STRIP);
@@ -3060,23 +994,23 @@ static void ui_draw_but_CURVE(ARegion *ar, uiBut *but)
/* first point */
if((cuma->flag & CUMA_EXTEND_EXTRAPOLATE)==0)
- glVertex2f(but->x1, but->y1 + zoomy*(cmp[0].y-offsy));
+ glVertex2f(rect->xmin, rect->ymin + zoomy*(cmp[0].y-offsy));
else {
- fx= but->x1 + zoomx*(cmp[0].x-offsx + cuma->ext_in[0]);
- fy= but->y1 + zoomy*(cmp[0].y-offsy + cuma->ext_in[1]);
+ fx= rect->xmin + zoomx*(cmp[0].x-offsx + cuma->ext_in[0]);
+ fy= rect->ymin + zoomy*(cmp[0].y-offsy + cuma->ext_in[1]);
glVertex2f(fx, fy);
}
for(a=0; a<=CM_TABLE; a++) {
- fx= but->x1 + zoomx*(cmp[a].x-offsx);
- fy= but->y1 + zoomy*(cmp[a].y-offsy);
+ fx= rect->xmin + zoomx*(cmp[a].x-offsx);
+ fy= rect->ymin + zoomy*(cmp[a].y-offsy);
glVertex2f(fx, fy);
}
/* last point */
if((cuma->flag & CUMA_EXTEND_EXTRAPOLATE)==0)
- glVertex2f(but->x2, but->y1 + zoomy*(cmp[CM_TABLE].y-offsy));
+ glVertex2f(rect->xmax, rect->ymin + zoomy*(cmp[CM_TABLE].y-offsy));
else {
- fx= but->x1 + zoomx*(cmp[CM_TABLE].x-offsx - cuma->ext_out[0]);
- fy= but->y1 + zoomy*(cmp[CM_TABLE].y-offsy - cuma->ext_out[1]);
+ fx= rect->xmin + zoomx*(cmp[CM_TABLE].x-offsx - cuma->ext_out[0]);
+ fy= rect->ymin + zoomy*(cmp[CM_TABLE].y-offsy - cuma->ext_out[1]);
glVertex2f(fx, fy);
}
glEnd();
@@ -3092,8 +1026,8 @@ static void ui_draw_but_CURVE(ARegion *ar, uiBut *but)
UI_ThemeColor(TH_TEXT_HI);
else
UI_ThemeColor(TH_TEXT);
- fac[0]= but->x1 + zoomx*(cmp[a].x-offsx);
- fac[1]= but->y1 + zoomy*(cmp[a].y-offsy);
+ fac[0]= rect->xmin + zoomx*(cmp[a].x-offsx);
+ fac[1]= rect->ymin + zoomy*(cmp[a].y-offsy);
bglVertex2fv(fac);
}
bglEnd();
@@ -3103,218 +1037,63 @@ static void ui_draw_but_CURVE(ARegion *ar, uiBut *but)
glScissor(scissor[0], scissor[1], scissor[2], scissor[3]);
/* outline */
- UI_ThemeColor(TH_BUT_OUTLINE);
- fdrawbox(but->x1, but->y1, but->x2, but->y2);
+ glColor3ubv(wcol->outline);
+ fdrawbox(rect->xmin, rect->ymin, rect->xmax, rect->ymax);
}
-static void ui_draw_sepr(uiBut *but)
-{
- float y = but->y1 + (but->y2 - but->y1)*0.5;
-
- UI_ThemeColorBlend(TH_MENU_TEXT, TH_MENU_BACK, 0.85);
- fdrawline(but->x1, y, but->x2, y);
-}
-static void ui_draw_roundbox(uiBut *but)
-{
- glEnable(GL_BLEND);
-
- UI_ThemeColorShadeAlpha(but->themecol, but->a2, but->a2);
+/* ****************************************************** */
- uiSetRoundBox(but->a1);
- gl_round_box(GL_POLYGON, but->x1, but->y1, but->x2, but->y2, but->hardmin);
- glDisable(GL_BLEND);
-}
-
-
-/* nothing! */
-static void ui_draw_nothing(int type, int colorid, float asp, float x1, float y1, float x2, float y2, int flag)
-{
-}
-
-/* minimal drawing for table items */
-static void ui_draw_table(int type, int colorid, float asp, float x1, float y1, float x2, float y2, int flag)
+static void ui_shadowbox(float minx, float miny, float maxx, float maxy, float shadsize, unsigned char alpha)
{
- int background= 1;
- int alpha_offs= (flag & UI_BUT_DISABLED)?UI_DISABLED_ALPHA_OFFS:0;
-
- /* paper */
- if(flag & UI_SELECT) {
- if(flag & UI_ACTIVE) glColor4f(0, 0, 0, 0.2f);
- else glColor4f(0, 0, 0, 0.1f);
- }
- else {
- if(flag & UI_ACTIVE) glColor4f(1.0f, 1.0f, 1.0f, 0.2f);
- else background= 0;
- }
+ glEnable(GL_BLEND);
+ glShadeModel(GL_SMOOTH);
- if(background) {
- glEnable(GL_BLEND);
- glRectf(x1, y1, x2, y2);
- glDisable(GL_BLEND);
- }
+ /* right quad */
+ glBegin(GL_POLYGON);
+ glColor4ub(0, 0, 0, alpha);
+ glVertex2f(maxx, miny);
+ glVertex2f(maxx, maxy-0.3*shadsize);
+ glColor4ub(0, 0, 0, 0);
+ glVertex2f(maxx+shadsize, maxy-0.75*shadsize);
+ glVertex2f(maxx+shadsize, miny);
+ glEnd();
- /* special type decorations */
- switch(type) {
- case NUM:
- case NUMABS:
- if(flag & UI_SELECT) UI_ThemeColorShadeAlpha(colorid, -120, alpha_offs);
- else UI_ThemeColorShadeAlpha(colorid, -90, alpha_offs);
- ui_num_arrows(x1, y1, x2, y2, asp);
- break;
-
- case TOG:
- ui_checkmark_box(colorid, x1, y1, x2, y2);
-
- if(flag & UI_SELECT) {
- UI_ThemeColorShadeAlpha(colorid, -140, alpha_offs);
- ui_checkmark(x1, y1, x2, y2);
- }
- break;
-
- case ICONROW:
- case ICONTEXTROW:
- UI_ThemeColorShadeAlpha(colorid, -120, alpha_offs);
- ui_iconrow_arrows(x1, y1, x2, y2);
- break;
-
- case MENU:
- case BLOCK:
- UI_ThemeColorShadeAlpha(colorid, -120, alpha_offs);
- ui_menu_arrows(x1, y1, x2, y2, asp);
- break;
- }
-}
-
-/* ************** EXTERN, called from interface.c ************* */
-/* ************** MAIN CALLBACK FUNCTION ************* */
-
-void ui_set_embossfunc(uiBut *but, int drawtype)
-{
- // this aded for evaluating textcolor for example
- but->dt= drawtype;
-
- // not really part of standard minimal themes, just make sure it is set
- but->sliderfunc= ui_draw_slider;
-
- // standard builtin first:
- if(but->type==LABEL || but->type==ROUNDBOX) but->embossfunc= ui_draw_nothing;
- else if(ELEM(but->type, PULLDOWN, HMENU) && !(but->block->flag & UI_BLOCK_LOOP))
- but->embossfunc= ui_draw_pulldown_round;
- else if(drawtype==UI_EMBOSSM) but->embossfunc= ui_draw_minimal;
- else if(drawtype==UI_EMBOSSN) but->embossfunc= ui_draw_nothing;
- else if(drawtype==UI_EMBOSSP) but->embossfunc= ui_draw_pulldown_item;
- else if(drawtype==UI_EMBOSSR) but->embossfunc= ui_draw_round;
- else if(drawtype==UI_EMBOSST) but->embossfunc= ui_draw_table;
- else {
- int theme= UI_GetThemeValue(TH_BUT_DRAWTYPE);
-
- switch(theme) {
-
- case TH_SHADED:
- but->embossfunc= ui_draw_default;
- break;
- case TH_ROUNDED:
- but->embossfunc= ui_draw_round;
- break;
- case TH_OLDSKOOL:
- but->embossfunc= ui_draw_oldskool;
- break;
- case TH_MINIMAL:
- but->embossfunc= ui_draw_minimal;
- break;
- case TH_ROUNDSHADED:
- default:
- but->embossfunc= ui_draw_roundshaded;
- // but->sliderfunc= ui_default_slider;
- break;
- }
- }
+ /* corner shape */
+ glBegin(GL_POLYGON);
+ glColor4ub(0, 0, 0, alpha);
+ glVertex2f(maxx, miny);
+ glColor4ub(0, 0, 0, 0);
+ glVertex2f(maxx+shadsize, miny);
+ glVertex2f(maxx+0.7*shadsize, miny-0.7*shadsize);
+ glVertex2f(maxx, miny-shadsize);
+ glEnd();
- // note: if you want aligning, adapt the call uiBlockEndAlign in interface.c
+ /* bottom quad */
+ glBegin(GL_POLYGON);
+ glColor4ub(0, 0, 0, alpha);
+ glVertex2f(minx+0.3*shadsize, miny);
+ glVertex2f(maxx, miny);
+ glColor4ub(0, 0, 0, 0);
+ glVertex2f(maxx, miny-shadsize);
+ glVertex2f(minx+0.5*shadsize, miny-shadsize);
+ glEnd();
+
+ glDisable(GL_BLEND);
+ glShadeModel(GL_FLAT);
}
-void ui_draw_but(ARegion *ar, uiBut *but)
+void uiDrawBoxShadow(unsigned char alpha, float minx, float miny, float maxx, float maxy)
{
- double value;
- float x1, x2, y1, y2, fac;
- int type;
-
- if(but==NULL) return;
-
- if(but->block->flag & UI_BLOCK_2_50) {
- extern void ui_draw_but_new(ARegion *ar, uiBut *but); // XXX
-
- ui_draw_but_new(ar, but);
- return;
- }
-
- switch (but->type) {
-
- case NUMSLI:
- case HSVSLI:
- type= (but->editstr)? TEX: but->type;
- but->embossfunc(type, but->themecol, but->aspect, but->x1, but->y1, but->x2, but->y2, but->flag);
-
- x1= but->x1;
- x2= but->x2;
- y1= but->y1;
- y2= but->y2;
-
- value= ui_get_but_val(but);
- fac= (value-but->softmin)*(x2-x1)/(but->softmax - but->softmin);
-
- but->sliderfunc(but->themecol, fac, but->aspect, x1, y1, x2, y2, but->flag);
- ui_draw_text_icon(but);
- break;
-
- case SEPR:
- ui_draw_sepr(but);
- break;
-
- case COL:
- ui_draw_but_COL(but); // black box with color
- break;
-
- case HSVCUBE:
- ui_draw_but_HSVCUBE(but); // box for colorpicker, three types
- break;
-
-#ifdef INTERNATIONAL
- case CHARTAB:
- value= ui_get_but_val(but);
- ui_draw_but_CHARTAB(but);
- break;
-#endif
-
- case LINK:
- case INLINK:
- ui_draw_icon(but, but->icon, 0);
- break;
-
- case ROUNDBOX:
- ui_draw_roundbox(but);
- break;
-
- case BUT_COLORBAND:
- ui_draw_but_COLORBAND(but);
- break;
- case BUT_NORMAL:
- ui_draw_but_NORMAL(but);
- break;
- case BUT_CURVE:
- ui_draw_but_CURVE(ar, but);
- break;
-
- default:
- type= (but->editstr)? TEX: but->type;
- but->embossfunc(type, but->themecol, but->aspect, but->x1, but->y1, but->x2, but->y2, but->flag);
- ui_draw_text_icon(but);
+ /* accumulated outline boxes to make shade not linear, is more pleasant */
+ ui_shadowbox(minx, miny, maxx, maxy, 11.0, (20*alpha)>>8);
+ ui_shadowbox(minx, miny, maxx, maxy, 7.0, (40*alpha)>>8);
+ ui_shadowbox(minx, miny, maxx, maxy, 5.0, (80*alpha)>>8);
- }
}
+
void ui_dropshadow(rctf *rct, float radius, float aspect, int select)
{
float rad;
diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c
index 4220d9c2781..ea5eb354b54 100644
--- a/source/blender/editors/interface/interface_handlers.c
+++ b/source/blender/editors/interface/interface_handlers.c
@@ -51,7 +51,9 @@
#include "ED_screen.h"
#include "UI_interface.h"
-#include "UI_text.h"
+
+#include "BLF_api.h"
+
#include "interface_intern.h"
#include "RNA_access.h"
@@ -149,7 +151,7 @@ typedef struct uiAfterFunc {
void *butm_func_arg;
int a2;
- const char *opname;
+ wmOperatorType *optype;
int opcontext;
PointerRNA *opptr;
@@ -220,7 +222,7 @@ static void ui_apply_but_func(bContext *C, uiBut *but)
* handling is done, i.e. menus are closed, in order to avoid conflicts
* with these functions removing the buttons we are working with */
- if(but->func || but->funcN || block->handle_func || (but->type == BUTM && block->butm_func) || but->opname || but->rnaprop) {
+ if(but->func || but->funcN || block->handle_func || (but->type == BUTM && block->butm_func) || but->optype || but->rnaprop) {
after= MEM_callocN(sizeof(uiAfterFunc), "uiAfterFunc");
after->func= but->func;
@@ -240,14 +242,14 @@ static void ui_apply_but_func(bContext *C, uiBut *but)
after->a2= but->a2;
}
- after->opname= but->opname;
+ after->optype= but->optype;
after->opcontext= but->opcontext;
after->opptr= but->opptr;
after->rnapoin= but->rnapoin;
after->rnaprop= but->rnaprop;
- but->opname= NULL;
+ but->optype= NULL;
but->opcontext= 0;
but->opptr= NULL;
@@ -278,8 +280,8 @@ static void ui_apply_but_funcs_after(bContext *C)
if(after.butm_func)
after.butm_func(C, after.butm_func_arg, after.a2);
- if(after.opname)
- WM_operator_name_call(C, after.opname, after.opcontext, after.opptr);
+ if(after.optype)
+ WM_operator_name_call(C, after.optype->idname, after.opcontext, after.opptr);
if(after.opptr) {
WM_operator_properties_free(after.opptr);
MEM_freeN(after.opptr);
@@ -309,8 +311,10 @@ static void ui_apply_but_BUTM(bContext *C, uiBut *but, uiHandleButtonData *data)
static void ui_apply_but_BLOCK(bContext *C, uiBut *but, uiHandleButtonData *data)
{
- if(but->type == COL)
- ui_set_but_vectorf(but, data->vec);
+ if(but->type == COL) {
+ if(but->a1 != -1) // this is not a color picker (weak!)
+ ui_set_but_vectorf(but, data->vec);
+ }
else if(ELEM3(but->type, MENU, ICONROW, ICONTEXTROW))
ui_set_but_val(but, data->value);
@@ -393,7 +397,7 @@ static void ui_apply_but_TEX(bContext *C, uiBut *but, uiHandleButtonData *data)
if(!data->str)
return;
- ui_set_but_string(but, data->str);
+ ui_set_but_string(C, but, data->str);
ui_check_but(but);
/* give butfunc the original text too */
@@ -409,30 +413,17 @@ static void ui_apply_but_TEX(bContext *C, uiBut *but, uiHandleButtonData *data)
static void ui_apply_but_NUM(bContext *C, uiBut *but, uiHandleButtonData *data)
{
if(data->str) {
- /* XXX 2.50 missing python api */
-#if 0
- if(BPY_button_eval(data->str, &data->value)) {
- BKE_report(CTX_reports(C), RPT_WARNING, "Invalid Python expression, check console");
- data->value = 0.0f; /* Zero out value on error */
-
- if(data->str[0]) {
- data->cancel= 1; /* invalidate return value if eval failed, except when string was null */
- return;
- }
+ if(ui_set_but_string(C, but, data->str)) {
+ data->value= ui_get_but_val(but);
+ }
+ else {
+ data->cancel= 1;
+ return;
}
-#else
- data->value= atof(data->str);
-#endif
-
- if(!ui_is_but_float(but)) data->value= (int)data->value;
- if(but->type==NUMABS) data->value= fabs(data->value);
-
- /* not that we use hard limits here */
- if(data->value<but->hardmin) data->value= but->hardmin;
- if(data->value>but->hardmax) data->value= but->hardmax;
}
+ else
+ ui_set_but_val(but, data->value);
- ui_set_but_val(but, data->value);
ui_check_but(but);
ui_apply_but_func(C, but);
@@ -506,7 +497,7 @@ static void ui_apply_but_CURVE(bContext *C, uiBut *but, uiHandleButtonData *data
static void ui_apply_but_IDPOIN(bContext *C, uiBut *but, uiHandleButtonData *data)
{
- but->idpoin_func(C, data->str, but->idpoin_idpp);
+ ui_set_but_string(C, but, data->str);
ui_check_but(but);
ui_apply_but_func(C, but);
data->retval= but->retval;
@@ -575,6 +566,7 @@ static void ui_apply_button(bContext *C, uiBlock *block, uiBut *but, uiHandleBut
case TEX:
ui_apply_but_TEX(C, but, data);
break;
+ case TOGBUT:
case TOG:
case TOGR:
case ICONTOG:
@@ -661,7 +653,8 @@ static void ui_but_copy_paste(bContext *C, uiBut *but, uiHandleButtonData *data,
if(mode=='v') {
/* extract first line from clipboard in case of multi-line copies */
- char *p = WM_clipboard_text_get(0);
+ char *p, *pbuf= WM_clipboard_text_get(0);
+ p= pbuf;
if(p) {
int i = 0;
while (*p && *p!='\r' && *p!='\n' && i<UI_MAX_DRAW_STR) {
@@ -669,7 +662,7 @@ static void ui_but_copy_paste(bContext *C, uiBut *but, uiHandleButtonData *data,
p++;
}
buf[i]= 0;
- MEM_freeN(p);
+ MEM_freeN(pbuf);
}
}
@@ -820,14 +813,17 @@ static int ui_textedit_delete_selection(uiBut *but, uiHandleButtonData *data)
static void ui_textedit_set_cursor_pos(uiBut *but, uiHandleButtonData *data, short x)
{
+ uiStyle *style= U.uistyles.first; // XXX pass on as arg
char *origstr;
-
+
+ uiStyleFontSet(&style->widget);
+
origstr= MEM_callocN(sizeof(char)*(data->maxlen+1), "ui_textedit origstr");
BLI_strncpy(origstr, but->drawstr, data->maxlen+1);
but->pos= strlen(origstr)-but->ofs;
- while((but->aspect*UI_GetStringWidth(but->font, origstr+but->ofs, 0) + but->x1) > x) {
+ while((BLF_width(origstr+but->ofs) + but->x1) > x) {
if (but->pos <= 0) break;
but->pos--;
origstr[but->pos+but->ofs] = 0;
@@ -1139,42 +1135,9 @@ static void ui_textedit_begin(uiBut *but, uiHandleButtonData *data)
}
/* retrieve string */
- if(but->type == TEX) {
- data->maxlen= but->hardmax;
- data->str= MEM_callocN(sizeof(char)*(data->maxlen+1), "textedit str");
-
- ui_get_but_string(but, data->str, data->maxlen+1);
- }
- else if(but->type == IDPOIN) {
- ID *id;
-
- data->maxlen= 22;
- data->str= MEM_callocN(sizeof(char)*(data->maxlen+1), "textedit str");
-
- id= *but->idpoin_idpp;
- if(id) BLI_strncpy(data->str, id->name+2, data->maxlen+1);
- else data->str[0]= 0;
- }
- else {
- double value;
-
- data->maxlen= UI_MAX_DRAW_STR;
- data->str= MEM_callocN(sizeof(char)*(data->maxlen+1), "textedit str");
-
- value= ui_get_but_val(but);
- if(ui_is_but_float(but)) {
- if(but->a2) { /* amount of digits defined */
- if(but->a2==1) sprintf(data->str, "%.1f", value);
- else if(but->a2==2) sprintf(data->str, "%.2f", value);
- else if(but->a2==3) sprintf(data->str, "%.3f", value);
- else sprintf(data->str, "%.4f", value);
- }
- else sprintf(data->str, "%.3f", value);
- }
- else {
- sprintf(data->str, "%d", (int)value);
- }
- }
+ data->maxlen= ui_get_but_string_max_length(but);
+ data->str= MEM_callocN(sizeof(char)*(data->maxlen+1), "textedit str");
+ ui_get_but_string(but, data->str, data->maxlen+1);
data->origstr= BLI_strdup(data->str);
data->selextend= 0;
@@ -2639,12 +2602,39 @@ static int ui_do_button(bContext *C, uiBlock *block, uiBut *but, wmEvent *event)
if(but->flag & UI_BUT_DISABLED)
return WM_UI_HANDLER_BREAK;
- /* handle copy-paste */
if(data->state == BUTTON_STATE_HIGHLIGHT) {
+ /* handle copy-paste */
if(ELEM(event->type, CKEY, VKEY) && event->val==KM_PRESS && (event->ctrl || event->oskey)) {
ui_but_copy_paste(C, but, data, (event->type == CKEY)? 'c': 'v');
return WM_UI_HANDLER_BREAK;
}
+ /* handle keyframeing */
+ else if(event->type == IKEY && event->val == KM_PRESS) {
+ if(event->alt)
+ ui_but_anim_delete_keyframe(C);
+ else
+ ui_but_anim_insert_keyframe(C);
+
+ ED_region_tag_redraw(CTX_wm_region(C));
+
+ return WM_UI_HANDLER_BREAK;
+ }
+ /* handle driver adding */
+ else if(event->type == DKEY && event->val == KM_PRESS) {
+ if(event->alt)
+ ui_but_anim_remove_driver(C);
+ else
+ ui_but_anim_add_driver(C);
+
+ ED_region_tag_redraw(CTX_wm_region(C));
+
+ return WM_UI_HANDLER_BREAK;
+ }
+ /* handle menu */
+ else if(event->type == RIGHTMOUSE && event->val == KM_PRESS) {
+ ui_but_anim_menu(C, but);
+ return WM_UI_HANDLER_BREAK;
+ }
}
/* verify if we can edit this button */
@@ -2672,6 +2662,7 @@ static int ui_do_button(bContext *C, uiBlock *block, uiBut *but, wmEvent *event)
case KEYEVT:
retval= ui_do_but_KEYEVT(C, but, data, event);
break;
+ case TOGBUT:
case TOG:
case TOGR:
case ICONTOG:
@@ -2778,6 +2769,11 @@ static uiBut *ui_but_find_activated(ARegion *ar)
return NULL;
}
+int ui_button_is_active(ARegion *ar)
+{
+ return (ui_but_find_activated(ar) != NULL);
+}
+
static void ui_blocks_set_tooltips(ARegion *ar, int enable)
{
uiBlock *block;
@@ -2845,8 +2841,13 @@ static uiBut *ui_but_find_mouse_over(ARegion *ar, int x, int y)
ui_window_to_block(ar, block, &mx, &my);
for(but=block->buttons.first; but; but= but->next) {
- /* give precedence to already activated buttons */
+ if(but->flag & UI_NO_HILITE)
+ continue;
+ if(but->type==LABEL)
+ continue;
+
if(ui_but_contains_pt(but, mx, my))
+ /* give precedence to already activated buttons */
if(!butover || (!butover->active && but->active))
butover= but;
}
@@ -2983,7 +2984,7 @@ static void button_activate_init(bContext *C, ARegion *ar, uiBut *but, uiButtonA
data= MEM_callocN(sizeof(uiHandleButtonData), "uiHandleButtonData");
data->window= CTX_wm_window(C);
data->region= ar;
- data->interactive= 1;
+ data->interactive= but->type==BUT_CURVE?0:1; // XXX temp
data->state = BUTTON_STATE_INIT;
/* activate button */
@@ -3789,8 +3790,8 @@ static int ui_handler_popup(bContext *C, wmEvent *event, void *userdata)
if(temp.menuretval == UI_RETURN_OK) {
if(temp.popup_func)
temp.popup_func(C, temp.popup_arg, temp.retvalue);
- if(temp.opname)
- WM_operator_name_call(C, temp.opname, temp.opcontext, NULL);
+ if(temp.optype)
+ WM_operator_name_call(C, temp.optype->idname, temp.opcontext, NULL);
}
else if(temp.cancel_func)
temp.cancel_func(temp.popup_arg);
diff --git a/source/blender/editors/interface/interface_icons.c b/source/blender/editors/interface/interface_icons.c
index f2f0582a5e2..1b23967a32d 100644
--- a/source/blender/editors/interface/interface_icons.c
+++ b/source/blender/editors/interface/interface_icons.c
@@ -813,7 +813,7 @@ static void icon_set_image(ID *id, DrawInfo *di, PreviewImage* prv_img, int mipl
}
else if (GS(id->name) == ID_MA) {
Material* mat = (Material*)id;
- if (mat->mode & MA_HALO) {
+ if (mat->material_type == MA_TYPE_HALO) {
set_alpha( (char*) ri.rect, ri.pr_rectx, ri.pr_recty, 255);
}
}
@@ -831,7 +831,9 @@ static void icon_set_image(ID *id, DrawInfo *di, PreviewImage* prv_img, int mipl
static void icon_draw_rect(float x, float y, int w, int h, float aspect, int rw, int rh, unsigned int *rect)
{
- ui_rasterpos_safe(x, y, aspect);
+
+ glRasterPos2f(x, y);
+ // XXX ui_rasterpos_safe(x, y, aspect);
if((w<1 || h<1)) {
// XXX - TODO 2.5 verify whether this case can happen
diff --git a/source/blender/editors/interface/interface_intern.h b/source/blender/editors/interface/interface_intern.h
index 7f26f4fa89e..13c9d09aff1 100644
--- a/source/blender/editors/interface/interface_intern.h
+++ b/source/blender/editors/interface/interface_intern.h
@@ -38,9 +38,49 @@ struct bContext;
struct IDProperty;
struct uiHandleButtonData;
struct wmEvent;
+struct wmOperatorType;
struct wmWindow;
+struct uiStyle;
+struct uiWidgetColors;
+struct uiLayout;
+
+/* ****************** general defines ************** */
+
+/* visual types for drawing */
+/* for time being separated from functional types */
+typedef enum {
+ /* standard set */
+ UI_WTYPE_LABEL,
+ UI_WTYPE_TOGGLE,
+ UI_WTYPE_OPTION,
+ UI_WTYPE_RADIO,
+ UI_WTYPE_NUMBER,
+ UI_WTYPE_SLIDER,
+ UI_WTYPE_EXEC,
+
+ /* strings */
+ UI_WTYPE_NAME,
+ UI_WTYPE_NAME_LINK,
+ UI_WTYPE_POINTER_LINK,
+ UI_WTYPE_FILENAME,
+
+ /* menus */
+ UI_WTYPE_MENU_RADIO,
+ UI_WTYPE_MENU_POINTER_LINK,
+
+ UI_WTYPE_PULLDOWN,
+ UI_WTYPE_MENU_ITEM,
+ UI_WTYPE_MENU_BACK,
+
+ /* specials */
+ UI_WTYPE_ICON,
+ UI_WTYPE_SWATCH,
+ UI_WTYPE_RGB_PICKER,
+ UI_WTYPE_NORMAL
+
+} uiWidgetTypeEnum;
+
-/* general defines */
#define UI_MAX_DRAW_STR 400
#define UI_MAX_NAME_STR 64
@@ -55,12 +95,12 @@ struct wmWindow;
#define UI_MOUSE_OVER 2
#define UI_ACTIVE 4
#define UI_HAS_ICON 8
+#define UI_TEXTINPUT 16
+
/* warn: rest of uiBut->flag in UI_interface.h */
/* internal panel drawing defines */
#define PNL_GRID 4
-#define PNL_DIST 8
-#define PNL_SAFETY 8
#define PNL_HEADER 20
/* panel->flag */
@@ -82,9 +122,6 @@ typedef struct {
short xofs, yofs;
} uiIconImage;
-typedef struct {
- void *xl, *large, *medium, *small;
-} uiFont;
typedef struct uiLinkLine { /* only for draw/edit */
struct uiLinkLine *next, *prev;
@@ -108,6 +145,7 @@ typedef struct {
struct uiBut {
struct uiBut *next, *prev;
short type, pointype, bit, bitnr, retval, strwidth, ofs, pos, selsta, selend;
+ short alignnr;
int flag;
char *str;
@@ -138,9 +176,6 @@ struct uiBut {
char *tip, *lockstr;
- int themecol; /* themecolor id */
- void *font;
-
BIFIconID icon;
short but_align; /* aligning buttons, horiz/vertical */
short lock, win;
@@ -162,7 +197,7 @@ struct uiBut {
int rnaindex;
/* Operator data */
- const char *opname;
+ struct wmOperatorType *optype;
int opcontext;
struct IDProperty *opproperties;
struct PointerRNA *opptr;
@@ -182,10 +217,13 @@ struct uiBut {
struct uiBlock {
uiBlock *next, *prev;
-
+
ListBase buttons;
Panel *panel;
uiBlock *oldblock;
+
+ ListBase layouts;
+ struct uiLayout *curlayout;
char name[UI_MAX_NAME_STR];
@@ -194,6 +232,8 @@ struct uiBlock {
float minx, miny, maxx, maxy;
float aspect;
+ short alignnr;
+
uiButHandleFunc func;
void *func_arg1;
void *func_arg2;
@@ -207,14 +247,10 @@ struct uiBlock {
/* extra draw function for custom blocks */
void (*drawextra)();
- int themecol; /* themecolor id */
-
- short font; /* indices */
int afterval, flag;
- void *curfont;
- short autofill, win, winq, direction, dt;
- short auto_open, in_use, pad;
+ short direction, dt;
+ short auto_open, in_use;
double auto_open_last;
int lock;
@@ -230,7 +266,6 @@ struct uiBlock {
uiPopupBlockHandle *handle; // handle
int tooltipdisabled; // to avoid tooltip after click
- int handler; // for panels in other windows than buttonswin... just event code
int active; // to keep blocks while drawing and free them afterwards
};
@@ -246,6 +281,8 @@ extern int ui_translate_buttons(void);
extern int ui_translate_menus(void);
extern int ui_translate_tooltips(void);
+void ui_fontscale(short *points, float aspect);
+
extern void ui_block_to_window_fl(const struct ARegion *ar, uiBlock *block, float *x, float *y);
extern void ui_block_to_window(const struct ARegion *ar, uiBlock *block, int *x, int *y);
extern void ui_block_to_window_rct(const struct ARegion *ar, uiBlock *block, rctf *graph, rcti *winr);
@@ -258,17 +295,20 @@ extern void ui_set_but_val(uiBut *but, double value);
extern void ui_set_but_hsv(uiBut *but);
extern void ui_get_but_vectorf(uiBut *but, float *vec);
extern void ui_set_but_vectorf(uiBut *but, float *vec);
+
extern void ui_get_but_string(uiBut *but, char *str, int maxlen);
-extern void ui_set_but_string(uiBut *but, const char *str);
+extern int ui_set_but_string(struct bContext *C, uiBut *but, const char *str);
+extern int ui_get_but_string_max_length(uiBut *but);
extern void ui_set_but_soft_range(uiBut *but, double value);
extern void ui_check_but(uiBut *but);
-extern void ui_autofill(uiBlock *block);
extern int ui_is_but_float(uiBut *but);
extern void ui_update_block_buts_hsv(uiBlock *block, float *hsv);
extern void ui_bounds_block(uiBlock *block);
+extern void ui_block_translate(uiBlock *block, int x, int y);
+extern void ui_block_do_align(uiBlock *block);
/* interface_regions.c */
@@ -285,7 +325,7 @@ struct uiPopupBlockHandle {
void *popup_arg;
/* for operator popups */
- const char *opname;
+ struct wmOperatorType *optype;
int opcontext;
ScrArea *ctx_area;
ARegion *ctx_region;
@@ -322,25 +362,52 @@ void autocomplete_end(struct AutoComplete *autocpl, char *autoname);
/* interface_panel.c */
extern int ui_handler_panel_region(struct bContext *C, struct wmEvent *event);
-extern void ui_draw_panel(struct ARegion *ar, uiBlock *block);
+extern void ui_draw_aligned_panel(struct ARegion *ar, struct uiStyle *style, uiBlock *block, rcti *rect);
/* interface_draw.c */
-extern void ui_set_embossfunc(uiBut *but, int drawtype);
-extern void ui_draw_but(ARegion *ar, uiBut *but);
-extern void ui_rasterpos_safe(float x, float y, float aspect);
-extern void ui_draw_tria_icon(float x, float y, float aspect, char dir);
-extern void ui_draw_anti_x(float x1, float y1, float x2, float y2);
extern void ui_dropshadow(rctf *rct, float radius, float aspect, int select);
extern void gl_round_box(int mode, float minx, float miny, float maxx, float maxy, float rad);
extern void gl_round_box_shade(int mode, float minx, float miny, float maxx, float maxy, float rad, float shadetop, float shadedown);
extern void gl_round_box_vertical_shade(int mode, float minx, float miny, float maxx, float maxy, float rad, float shadeLeft, float shadeRight);
-void ui_draw_icon(uiBut *but, BIFIconID icon, int blend);
-void ui_draw_text(uiBut *but, float x, float y, int sunken);
+void ui_draw_but_COLORBAND(uiBut *but, struct uiWidgetColors *wcol, rcti *rect);
+void ui_draw_but_NORMAL(uiBut *but, struct uiWidgetColors *wcol, rcti *rect);
+void ui_draw_but_CURVE(ARegion *ar, uiBut *but, struct uiWidgetColors *wcol, rcti *rect);
+
/* interface_handlers.c */
extern void ui_button_active_cancel(const struct bContext *C, uiBut *but);
+extern int ui_button_is_active(struct ARegion *ar);
+
+/* interface_widgets.c */
+void ui_draw_anti_tria(float x1, float y1, float x2, float y2, float x3, float y3);
+void ui_draw_menu_back(struct uiStyle *style, uiBlock *block, rcti *rect);
+extern void ui_draw_but(ARegion *ar, struct uiStyle *style, uiBut *but, rcti *rect);
+ /* theme color init */
+struct ThemeUI;
+void ui_widget_color_init(struct ThemeUI *tui);
+
+/* interface_style.c */
+void uiStyleInit(void);
+
+/* resources.c */
+void init_userdef_do_versions(void);
+void ui_theme_init_userdef(void);
+void ui_resources_init(void);
+void ui_resources_free(void);
+
+/* interface_layout.c */
+void ui_layout_add_but(struct uiLayout *layout, uiBut *but);
+int ui_but_can_align(uiBut *but);
+
+/* interface_anim.c */
+void ui_but_anim_flag(uiBut *but, float cfra);
+void ui_but_anim_insert_keyframe(struct bContext *C);
+void ui_but_anim_delete_keyframe(struct bContext *C);
+void ui_but_anim_add_driver(struct bContext *C);
+void ui_but_anim_remove_driver(struct bContext *C);
+void ui_but_anim_menu(struct bContext *C, uiBut *but);
#endif
diff --git a/source/blender/editors/interface/interface_layout.c b/source/blender/editors/interface/interface_layout.c
index f6f5bae5fa5..56183bfb314 100644
--- a/source/blender/editors/interface/interface_layout.c
+++ b/source/blender/editors/interface/interface_layout.c
@@ -1,3 +1,26 @@
+/**
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Contributor(s): Blender Foundation 2009.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
#include <limits.h>
#include <math.h>
@@ -9,13 +32,16 @@
#include "DNA_ID.h"
#include "DNA_scene_types.h"
#include "DNA_screen_types.h"
+#include "DNA_userdef_types.h"
#include "DNA_windowmanager_types.h"
#include "BLI_listbase.h"
+#include "BLI_string.h"
#include "BKE_context.h"
#include "BKE_global.h"
#include "BKE_idprop.h"
+#include "BKE_library.h"
#include "BKE_screen.h"
#include "BKE_utildefines.h"
@@ -34,170 +60,300 @@
#include "WM_api.h"
#include "WM_types.h"
-/************************ Structs and Defines *************************/
+#include "interface_intern.h"
-#define COLUMN_SPACE 5
-#define TEMPLATE_SPACE 5
-#define STACK_SPACE 5
-#define BUTTON_SPACE_X 5
-#define BUTTON_SPACE_Y 2
+/************************ Structs and Defines *************************/
#define RNA_NO_INDEX -1
+#define RNA_ENUM_VALUE -2
+
+#define EM_SEPR_X 6
+#define EM_SEPR_Y 6
+
+/* uiLayoutRoot */
+
+typedef struct uiLayoutRoot {
+ struct uiLayoutRoot *next, *prev;
+
+ int type;
+ int opcontext;
+
+ int emw, emh;
+
+ uiMenuHandleFunc handlefunc;
+ void *argv;
+
+ uiStyle *style;
+ uiBlock *block;
+ uiLayout *layout;
+} uiLayoutRoot;
/* Item */
typedef enum uiItemType {
- ITEM_OPERATOR,
- ITEM_RNA_PROPERTY,
- ITEM_MENU,
- ITEM_LABEL
+ ITEM_BUTTON,
+
+ ITEM_LAYOUT_ROW,
+ ITEM_LAYOUT_COLUMN,
+ ITEM_LAYOUT_COLUMN_FLOW,
+ ITEM_LAYOUT_ROW_FLOW,
+ ITEM_LAYOUT_BOX,
+ ITEM_LAYOUT_FREE,
+ ITEM_LAYOUT_SPLIT,
+
+ ITEM_LAYOUT_ROOT
+#if 0
+ TEMPLATE_COLUMN_FLOW,
+ TEMPLATE_SPLIT,
+ TEMPLATE_BOX,
+
+ TEMPLATE_HEADER,
+ TEMPLATE_HEADER_ID
+#endif
} uiItemType;
-enum uiItemFlag {
- ITEM_ICON,
- ITEM_TEXT
-};
-
typedef struct uiItem {
- struct uiItem *next, *prev;
+ void *next, *prev;
uiItemType type;
- int slot;
-
- const char *name;
- int icon;
} uiItem;
-typedef struct uiItemRNA {
+typedef struct uiButtonItem {
uiItem item;
+ uiBut *but;
+} uiButtonItem;
- PointerRNA ptr;
- PropertyRNA *prop;
- int index;
-} uiItemRNA;
-
-typedef struct uiItemOp {
+struct uiLayout {
uiItem item;
- wmOperatorType *ot;
- IDProperty *properties;
- int context;
-} uiItemOp;
+ uiLayoutRoot *root;
+ ListBase items;
-typedef struct uiItemLMenu {
- uiItem item;
+ int x, y, w, h;
+ int space;
+ int align;
+};
- uiMenuCreateFunc func;
-} uiItemLMenu;
+typedef struct uiLayoutItemFlow {
+ uiLayout litem;
+ int number;
+ int totcol;
+} uiLayoutItemFlow;
-/* Template */
+typedef struct uiLayoutItemSplt {
+ uiLayout litem;
+ int number;
+ int lr;
+} uiLayoutItemSplt;
-typedef enum uiTemplateType {
- TEMPLATE_COLUMN,
- TEMPLATE_LR,
- TEMPLATE_STACK,
+typedef struct uiLayoutItemBx {
+ uiLayout litem;
+} uiLayoutItemBx;
- TEMPLATE_HEADER_MENUS,
- TEMPLATE_HEADER_BUTTONS,
- TEMPLATE_HEADER_ID
-} uiTemplateType;
+typedef struct uiLayoutItemRoot {
+ uiLayout litem;
+} uiLayoutItemRoot;
-typedef struct uiTemplate {
- struct uiTemplate *next, *prev;
- uiTemplateType type;
+/************************** Item ***************************/
- ListBase items;
- int color;
-} uiTemplate;
+static char *ui_item_name_add_colon(char *name, char namestr[UI_MAX_NAME_STR])
+{
+ int len= strlen(name);
-typedef struct uiTemplateStck {
- uiTemplate template;
- uiLayout *sublayout;
-} uiTemplateStck;
+ if(len != 0 && len+1 < UI_MAX_NAME_STR) {
+ BLI_strncpy(namestr, name, UI_MAX_NAME_STR);
+ namestr[len]= ':';
+ namestr[len+1]= '\0';
+ return namestr;
+ }
-typedef struct uiTemplateHeadID {
- uiTemplate template;
+ return name;
+}
- PointerRNA ptr;
- char *propname;
- int flag;
- uiIDPoinFunc func;
-} uiTemplateHeadID;
+#define UI_FIT_EXPAND 1
-/* Layout */
+static int ui_item_fit(int item, int pos, int all, int available, int spacing, int last, int flag)
+{
+ /* available == 0 is unlimited */
-struct uiLayout {
- ListBase templates;
- int opcontext;
- int dir;
- int x, y, w, h;
-};
+ if(available != 0 && all > available-spacing) {
+ /* contents is bigger than available space */
+ if(last)
+ return available-pos;
+ else
+ return (item*(available-spacing))/all;
+ }
+ else {
+ /* contents is smaller or equal to available space */
+ if(available != 0 && (flag & UI_FIT_EXPAND)) {
+ if(last)
+ return available-pos;
+ else
+ return (item*(available-spacing))/all;
+ }
+ else
+ return item;
+ }
+}
-void ui_layout_free(uiLayout *layout);
-void ui_layout_end(const bContext *C, uiBlock *block, uiLayout *layout, int *x, int *y);
+/* variable button size in which direction? */
+#define UI_ITEM_VARY_X 1
+#define UI_ITEM_VARY_Y 2
-/************************** Item ***************************/
+static int ui_layout_vary_direction(uiLayout *layout)
+{
+ return (layout->root->type == UI_LAYOUT_HEADER)? UI_ITEM_VARY_X: UI_ITEM_VARY_Y;
+}
+
+/* estimated size of text + icon */
+static int ui_text_icon_width(uiLayout *layout, char *name, int icon)
+{
+ int variable = ui_layout_vary_direction(layout) == UI_ITEM_VARY_X;
-static int ui_item_fit(int item, int all, int available)
+ if(icon && strcmp(name, "") == 0)
+ return UI_UNIT_X; /* icon only */
+ else if(icon)
+ return (variable)? UI_GetStringWidth(name) + UI_UNIT_X: 10*UI_UNIT_X; /* icon + text */
+ else
+ return (variable)? UI_GetStringWidth(name) + UI_UNIT_X: 10*UI_UNIT_X; /* text only */
+}
+
+static void ui_item_size(uiItem *item, int *r_w, int *r_h)
{
- if(all > available)
- return (item*available)/all;
+ if(item->type == ITEM_BUTTON) {
+ uiButtonItem *bitem= (uiButtonItem*)item;
+
+ if(r_w) *r_w= bitem->but->x2 - bitem->but->x1;
+ if(r_h) *r_h= bitem->but->y2 - bitem->but->y1;
+ }
+ else {
+ uiLayout *litem= (uiLayout*)item;
+
+ if(r_w) *r_w= litem->w;
+ if(r_h) *r_h= litem->h;
+ }
+}
+
+static void ui_item_offset(uiItem *item, int *r_x, int *r_y)
+{
+ if(item->type == ITEM_BUTTON) {
+ uiButtonItem *bitem= (uiButtonItem*)item;
+
+ if(r_x) *r_x= bitem->but->x1;
+ if(r_y) *r_y= bitem->but->y1;
+ }
+ else {
+ if(r_x) *r_x= 0;
+ if(r_y) *r_y= 0;
+ }
+}
+
+static void ui_item_position(uiItem *item, int x, int y, int w, int h)
+{
+ if(item->type == ITEM_BUTTON) {
+ uiButtonItem *bitem= (uiButtonItem*)item;
+
+ bitem->but->x1= x;
+ bitem->but->y1= y;
+ bitem->but->x2= x+w;
+ bitem->but->y2= y+h;
+
+ ui_check_but(bitem->but); /* for strlen */
+ }
+ else {
+ uiLayout *litem= (uiLayout*)item;
+
+ litem->x= x;
+ litem->y= y+h;
+ litem->w= w;
+ litem->h= h;
+ }
+}
+
+/******************** Special RNA Items *********************/
+
+static int ui_layout_local_dir(uiLayout *layout)
+{
+ switch(layout->item.type) {
+ case ITEM_LAYOUT_ROW:
+ case ITEM_LAYOUT_ROOT:
+ return UI_LAYOUT_HORIZONTAL;
+ case ITEM_LAYOUT_COLUMN:
+ case ITEM_LAYOUT_COLUMN_FLOW:
+ case ITEM_LAYOUT_SPLIT:
+ case ITEM_LAYOUT_FREE:
+ case ITEM_LAYOUT_BOX:
+ default:
+ return UI_LAYOUT_VERTICAL;
+ }
+}
+
+static uiLayout *ui_item_local_sublayout(uiLayout *test, uiLayout *layout, int align)
+{
+ uiLayout *sub;
+
+ if(ui_layout_local_dir(test) == UI_LAYOUT_HORIZONTAL)
+ sub= uiLayoutRow(layout, align);
+ else
+ sub= uiLayoutColumn(layout, align);
- return all;
+ sub->space= 0;
+ return sub;
}
/* create buttons for an item with an RNA array */
-static void ui_item_array(uiBlock *block, uiItemRNA *rnaitem, int len, int x, int y, int w, int h)
+static void ui_item_array(uiLayout *layout, uiBlock *block, char *name, int icon, PointerRNA *ptr, PropertyRNA *prop, int len, int x, int y, int w, int h, int expand, int slider)
{
+ uiStyle *style= layout->root->style;
+ uiBut *but;
PropertyType type;
PropertySubType subtype;
- char *name;
+ uiLayout *sub;
int a;
/* retrieve type and subtype */
- type= RNA_property_type(&rnaitem->ptr, rnaitem->prop);
- subtype= RNA_property_subtype(&rnaitem->ptr, rnaitem->prop);
+ type= RNA_property_type(prop);
+ subtype= RNA_property_subtype(prop);
- /* create label */
- if(rnaitem->item.name)
- name= (char*)rnaitem->item.name;
- else
- name= (char*)RNA_property_ui_name(&rnaitem->ptr, rnaitem->prop);
+ sub= ui_item_local_sublayout(layout, layout, 1);
+ uiBlockSetCurLayout(block, sub);
+ /* create label */
if(strcmp(name, "") != 0)
- uiDefBut(block, LABEL, 0, name, x, y + h - YIC, w, YIC, NULL, 0.0, 0.0, 0, 0, "");
+ uiDefBut(block, LABEL, 0, name, 0, 0, w, UI_UNIT_Y, NULL, 0.0, 0.0, 0, 0, "");
/* create buttons */
- uiBlockBeginAlign(block);
-
if(type == PROP_BOOLEAN && len == 20) {
/* special check for layer layout */
- int butw, buth;
+ int butw, buth, unit;
- butw= ui_item_fit(XIC, XIC*10 + BUTTON_SPACE_X, w);
- buth= MIN2(YIC, butw);
+ uiBlockSetCurLayout(block, uiLayoutFree(layout, 0));
- y += 2*(YIC - buth);
+ unit= UI_UNIT_X*0.75;
+ butw= unit;
+ buth= unit;
uiBlockBeginAlign(block);
for(a=0; a<5; a++)
- uiDefAutoButR(block, &rnaitem->ptr, rnaitem->prop, a, "", ICON_BLANK1, x + butw*a, y+buth, butw, buth);
+ uiDefAutoButR(block, ptr, prop, a, "", ICON_BLANK1, x + butw*a, y+buth, butw, buth);
for(a=0; a<5; a++)
- uiDefAutoButR(block, &rnaitem->ptr, rnaitem->prop, a+10, "", ICON_BLANK1, x + butw*a, y, butw, buth);
+ uiDefAutoButR(block, ptr, prop, a+10, "", ICON_BLANK1, x + butw*a, y, butw, buth);
uiBlockEndAlign(block);
- x += 5*butw + BUTTON_SPACE_X;
+ x += 5*butw + style->buttonspacex;
uiBlockBeginAlign(block);
for(a=0; a<5; a++)
- uiDefAutoButR(block, &rnaitem->ptr, rnaitem->prop, a+5, "", ICON_BLANK1, x + butw*a, y+buth, butw, buth);
+ uiDefAutoButR(block, ptr, prop, a+5, "", ICON_BLANK1, x + butw*a, y+buth, butw, buth);
for(a=0; a<5; a++)
- uiDefAutoButR(block, &rnaitem->ptr, rnaitem->prop, a+15, "", ICON_BLANK1, x + butw*a, y, butw, buth);
+ uiDefAutoButR(block, ptr, prop, a+15, "", ICON_BLANK1, x + butw*a, y, butw, buth);
uiBlockEndAlign(block);
}
else if(subtype == PROP_MATRIX) {
/* matrix layout */
int row, col;
+ uiBlockSetCurLayout(block, uiLayoutFree(layout, 1));
+
len= ceil(sqrt(len));
h /= len;
@@ -208,797 +364,1391 @@ static void ui_item_array(uiBlock *block, uiItemRNA *rnaitem, int len, int x, in
col= a%len;
row= a/len;
- uiDefAutoButR(block, &rnaitem->ptr, rnaitem->prop, a, "", 0, x + w*col, y+(row-a-1)*YIC, w, YIC);
+ but= uiDefAutoButR(block, ptr, prop, a, "", 0, x + w*col, y+(row-a-1)*UI_UNIT_Y, w, UI_UNIT_Y);
+ if(slider && but->type==NUM)
+ but->type= NUMSLI;
}
}
else if(len <= 4 && ELEM3(subtype, PROP_ROTATION, PROP_VECTOR, PROP_COLOR)) {
- /* layout for known array subtypes */
- static char vectoritem[4]= {'X', 'Y', 'Z', 'W'};
- static char quatitem[4]= {'W', 'X', 'Y', 'Z'};
- static char coloritem[4]= {'R', 'G', 'B', 'A'};
- char str[3];
-
- for(a=0; a<len; a++) {
- if(len == 4 && subtype == PROP_ROTATION)
- str[0]= quatitem[a];
- else if(subtype == PROP_VECTOR || subtype == PROP_ROTATION)
- str[0]= vectoritem[a];
- else
- str[0]= coloritem[a];
-
- if(type == PROP_BOOLEAN) {
- str[1]= '\0';
+ if(subtype == PROP_COLOR)
+ uiDefAutoButR(block, ptr, prop, -1, "", 0, 0, 0, w, UI_UNIT_Y);
+
+ if(subtype != PROP_COLOR || expand) {
+ /* layout for known array subtypes */
+ static char vectoritem[4]= {'X', 'Y', 'Z', 'W'};
+ static char quatitem[4]= {'W', 'X', 'Y', 'Z'};
+ static char coloritem[4]= {'R', 'G', 'B', 'A'};
+ char str[3];
+
+ for(a=0; a<len; a++) {
+ if(len == 4 && subtype == PROP_ROTATION)
+ str[0]= quatitem[a];
+ else if(subtype == PROP_VECTOR || subtype == PROP_ROTATION)
+ str[0]= vectoritem[a];
+ else
+ str[0]= coloritem[a];
+
+ if(type == PROP_BOOLEAN) {
+ str[1]= '\0';
+ }
+ else {
+ str[1]= ':';
+ str[2]= '\0';
+ }
+
+ but= uiDefAutoButR(block, ptr, prop, a, str, 0, 0, 0, w, UI_UNIT_Y);
+ if(slider && but->type==NUM)
+ but->type= NUMSLI;
}
- else {
- str[1]= ':';
- str[2]= '\0';
- }
-
- uiDefAutoButR(block, &rnaitem->ptr, rnaitem->prop, a, str, 0, x, y+(len-a-1)*YIC, w, YIC);
+ }
+ else if(subtype == PROP_COLOR && len == 4) {
+ but= uiDefAutoButR(block, ptr, prop, 3, "A:", 0, 0, 0, w, UI_UNIT_Y);
+ if(slider && but->type==NUM)
+ but->type= NUMSLI;
}
}
else {
- /* default array layout */
- for(a=0; a<len; a++)
- uiDefAutoButR(block, &rnaitem->ptr, rnaitem->prop, a, "", 0, x, y+(len-a-1)*YIC, w, YIC);
+ for(a=0; a<len; a++) {
+ but= uiDefAutoButR(block, ptr, prop, a, "", 0, 0, 0, w, UI_UNIT_Y);
+ if(slider && but->type==NUM)
+ but->type= NUMSLI;
+ }
}
- uiBlockEndAlign(block);
+ uiBlockSetCurLayout(block, layout);
}
-/* create lable + button for RNA property */
-static void ui_item_with_label(uiBlock *block, uiItemRNA *rnaitem, int x, int y, int w, int h)
+static void ui_item_enum_row(uiLayout *layout, uiBlock *block, PointerRNA *ptr, PropertyRNA *prop, int x, int y, int w, int h)
{
- char *name;
- int butw;
+ const EnumPropertyItem *item;
+ int a, totitem, itemw;
+ const char *propname;
- if(rnaitem->item.name)
- name= (char*)rnaitem->item.name;
- else
- name= (char*)RNA_property_ui_name(&rnaitem->ptr, rnaitem->prop);
-
- if(strcmp(name, "") != 0) {
- butw= GetButStringLength(name);
- uiDefBut(block, LABEL, 0, name, x, y, butw, h, NULL, 0.0, 0.0, 0, 0, "");
+ propname= RNA_property_identifier(prop);
+ RNA_property_enum_items(ptr, prop, &item, &totitem);
- x += butw;
- w -= butw;
+ uiBlockSetCurLayout(block, ui_item_local_sublayout(layout, layout, 1));
+ for(a=0; a<totitem; a++) {
+ itemw= ui_text_icon_width(block->curlayout, (char*)item[a].name, 0);
+ uiDefButR(block, ROW, 0, NULL, 0, 0, itemw, h, ptr, propname, -1, 0, item[a].value, -1, -1, NULL);
}
-
- uiDefAutoButR(block, &rnaitem->ptr, rnaitem->prop, rnaitem->index, "", rnaitem->item.icon, x, y, w, h);
+ uiBlockSetCurLayout(block, layout);
}
-/* create buttons for an arbitrary item */
-static void ui_item_buts(uiBlock *block, uiItem *item, int x, int y, int w, int h)
+/* create label + button for RNA property */
+static void ui_item_with_label(uiLayout *layout, uiBlock *block, char *name, int icon, PointerRNA *ptr, PropertyRNA *prop, int index, int x, int y, int w, int h)
{
- if(item->type == ITEM_RNA_PROPERTY) {
- /* RNA property */
- uiItemRNA *rnaitem= (uiItemRNA*)item;
- PropertyType type;
- int len;
-
- /* retrieve info */
- type= RNA_property_type(&rnaitem->ptr, rnaitem->prop);
- len= RNA_property_array_length(&rnaitem->ptr, rnaitem->prop);
-
- /* array property */
- if(rnaitem->index == RNA_NO_INDEX && len > 0)
- ui_item_array(block, rnaitem, len, x, y, w, h);
- /* property with separate label */
- else if(type == PROP_ENUM || type == PROP_STRING || type == PROP_POINTER)
- ui_item_with_label(block, rnaitem, x, y, w, h);
- /* single button */
- else
- uiDefAutoButR(block, &rnaitem->ptr, rnaitem->prop, rnaitem->index, (char*)item->name, item->icon, x, y, w, h);
- }
- else if(item->type == ITEM_OPERATOR) {
- /* operator */
- uiItemOp *opitem= (uiItemOp*)item;
+ uiLayout *sub;
+ PropertySubType subtype;
- if(item->icon && item->name)
- uiDefIconTextButO(block, BUT, opitem->ot->idname, opitem->context, item->icon, (char*)item->name, x, y, w, h, NULL);
- else if(item->icon)
- uiDefIconButO(block, BUT, opitem->ot->idname, opitem->context, item->icon, x, y, w, h, NULL);
- /* text only */
- else
- uiDefButO(block, BUT, opitem->ot->idname, opitem->context, (char*)item->name, x, y, w, h, NULL);
- }
- else if(item->type == ITEM_MENU) {
- /* menu */
- uiItemLMenu *menuitem= (uiItemLMenu*)item;
+ sub= uiLayoutRow(layout, 0);
+ uiBlockSetCurLayout(block, sub);
- uiDefMenuBut(block, menuitem->func, NULL, (char*)item->name, x, y-2, w-3, h+4, "");
+ if(strcmp(name, "") != 0) {
+ w= w/2;
+ uiDefBut(block, LABEL, 0, name, x, y, w, h, NULL, 0.0, 0.0, 0, 0, "");
}
- else if(item->type == ITEM_LABEL) {
- /* label */
- if(item->icon && item->name)
- uiDefIconTextBut(block, LABEL, 0, item->icon, (char*)item->name, x, y, w, h, NULL, 0.0, 0.0, 0, 0, "");
- else if(item->icon)
- uiDefIconBut(block, LABEL, 0, item->icon, x, y, w, h, NULL, 0.0, 0.0, 0, 0, "");
- else if((char*)item->name)
- uiDefBut(block, LABEL, 0, (char*)item->name, x, y, w, h, NULL, 0.0, 0.0, 0, 0, "");
- }
- else {
- /* separator */
- uiDefBut(block, SEPR, 0, "", x, y, w, h, NULL, 0.0, 0.0, 0, 0, "");
- }
-}
+ subtype= RNA_property_subtype(prop);
-/* estimated size of text + icon */
-static int ui_text_icon_width(const char *name, int icon)
-{
- if(icon && name && strcmp(name, "") == 0)
- return XIC; /* icon only */
- else if(icon && name)
- return XIC + GetButStringLength((char*)name); /* icon + text */
- else if(name)
- return GetButStringLength((char*)name); /* text only */
+ if(subtype == PROP_FILEPATH || subtype == PROP_DIRPATH) {
+ uiBlockSetCurLayout(block, uiLayoutRow(sub, 1));
+ uiDefAutoButR(block, ptr, prop, index, "", icon, x, y, w-UI_UNIT_X, h);
+ uiDefIconBut(block, BUT, 0, ICON_FILESEL, x, y, UI_UNIT_X, h, NULL, 0.0f, 0.0f, 0.0f, 0.0f, "DUMMY file select button"); /* XXX */
+ }
else
- return 0;
+ uiDefAutoButR(block, ptr, prop, index, "", icon, x, y, w, h);
+
+ uiBlockSetCurLayout(block, layout);
}
-/* estimated size of an item */
-static void ui_item_size(uiItem *item, int *r_w, int *r_h)
+/********************* Button Items *************************/
+
+/* disabled item */
+static void ui_item_disabled(uiLayout *layout, char *name)
{
- const char *name;
- int w, h;
+ uiBlock *block= layout->root->block;
+ uiBut *but;
+ int w;
- if(item->type == ITEM_RNA_PROPERTY) {
- /* RNA property */
- uiItemRNA *rnaitem= (uiItemRNA*)item;
- PropertyType type;
- PropertySubType subtype;
- int len;
-
- name= item->name;
- if(!name)
- name= RNA_property_ui_name(&rnaitem->ptr, rnaitem->prop);
-
- w= ui_text_icon_width(name, item->icon);
- h= YIC;
-
- /* arbitrary extended width by type */
- type= RNA_property_type(&rnaitem->ptr, rnaitem->prop);
- subtype= RNA_property_subtype(&rnaitem->ptr, rnaitem->prop);
- len= RNA_property_array_length(&rnaitem->ptr, rnaitem->prop);
-
- if(type == PROP_BOOLEAN && !item->icon)
- w += XIC;
- else if(type == PROP_INT || type == PROP_FLOAT)
- w += 2*XIC;
- else if(type == PROP_STRING)
- w += 8*XIC;
-
- /* increase height for arrays */
- if(rnaitem->index == RNA_NO_INDEX && len > 0) {
- if(name && strcmp(name, "") == 0 && item->icon == 0)
- h= 0;
-
- if(type == PROP_BOOLEAN && len == 20)
- h += 2*YIC;
- else if(subtype == PROP_MATRIX)
- h += ceil(sqrt(len))*YIC;
- else
- h += len*YIC;
- }
- }
- else if(item->type == ITEM_OPERATOR) {
- /* operator */
- uiItemOp *opitem= (uiItemOp*)item;
+ uiBlockSetCurLayout(block, layout);
- name= item->name;
- if(!name)
- name= opitem->ot->name;
+ if(!name)
+ name= "";
- w= ui_text_icon_width(name, item->icon);
- h= YIC;
- }
- else {
- /* other */
- w= ui_text_icon_width(item->name, item->icon);
- h= YIC;
- }
+ w= ui_text_icon_width(layout, name, 0);
- if(r_w) *r_w= w;
- if(r_h) *r_h= h;
+ but= uiDefBut(block, LABEL, 0, (char*)name, 0, 0, w, UI_UNIT_Y, NULL, 0.0, 0.0, 0, 0, "");
+ but->flag |= UI_BUT_DISABLED;
+ but->lock = 1;
+ but->lockstr = "";
}
-static void ui_item_free(uiItem *item)
+/* operator items */
+void uiItemFullO(uiLayout *layout, char *name, int icon, char *idname, IDProperty *properties, int context)
{
- if(item->type == ITEM_OPERATOR) {
- uiItemOp *opitem= (uiItemOp*)item;
+ uiBlock *block= layout->root->block;
+ wmOperatorType *ot= WM_operatortype_find(idname);
+ uiBut *but;
+ int w;
- if(opitem->properties) {
- IDP_FreeProperty(opitem->properties);
- MEM_freeN(opitem->properties);
- }
+ if(!ot) {
+ ui_item_disabled(layout, idname);
+ return;
+ }
+
+ if(!name)
+ name= ot->name;
+ if(layout->root->type == UI_LAYOUT_MENU && !icon)
+ icon= ICON_BLANK1;
+
+ /* create button */
+ uiBlockSetCurLayout(block, layout);
+
+ w= ui_text_icon_width(layout, name, icon);
+
+ if(icon && strcmp(name, "") != 0)
+ but= uiDefIconTextButO(block, BUT, ot->idname, context, icon, (char*)name, 0, 0, w, UI_UNIT_Y, NULL);
+ else if(icon)
+ but= uiDefIconButO(block, BUT, ot->idname, context, icon, 0, 0, w, UI_UNIT_Y, NULL);
+ else
+ but= uiDefButO(block, BUT, ot->idname, context, (char*)name, 0, 0, w, UI_UNIT_Y, NULL);
+
+ /* assign properties */
+ if(properties) {
+ PointerRNA *opptr= uiButGetOperatorPtrRNA(but);
+ opptr->data= properties;
}
}
-/* operator items */
-void uiItemFullO(uiLayout *layout, int slot, const char *name, int icon, char *idname, IDProperty *properties, int context)
+static char *ui_menu_enumpropname(char *opname, char *propname, int retval)
{
- uiTemplate *template= layout->templates.last;
- wmOperatorType *ot= WM_operatortype_find(idname);
- uiItemOp *opitem;
+ wmOperatorType *ot= WM_operatortype_find(opname);
+ PointerRNA ptr;
+ PropertyRNA *prop;
- if(!ot)
- return;
+ if(!ot || !ot->srna)
+ return "";
- opitem= MEM_callocN(sizeof(uiItemOp), "uiItemOp");
+ RNA_pointer_create(NULL, ot->srna, NULL, &ptr);
+ prop= RNA_struct_find_property(&ptr, propname);
- opitem->item.name= name;
- opitem->item.icon= icon;
- opitem->item.type= ITEM_OPERATOR;
- opitem->item.slot= slot;
+ if(prop) {
+ const EnumPropertyItem *item;
+ int totitem, i;
- opitem->ot= ot;
- opitem->properties= properties;
- opitem->context= context;
+ RNA_property_enum_items(&ptr, prop, &item, &totitem);
- BLI_addtail(&template->items, opitem);
+ for (i=0; i<totitem; i++) {
+ if(item[i].value==retval)
+ return (char*)item[i].name;
+ }
+ }
+
+ return "";
}
-void uiItemEnumO(uiLayout *layout, int slot, const char *name, int icon, char *opname, char *propname, int value)
+void uiItemEnumO(uiLayout *layout, char *name, int icon, char *opname, char *propname, int value)
{
PointerRNA ptr;
WM_operator_properties_create(&ptr, opname);
RNA_enum_set(&ptr, propname, value);
- uiItemFullO(layout, slot, name, icon, opname, ptr.data, layout->opcontext);
+ if(!name)
+ name= ui_menu_enumpropname(opname, propname, value);
+
+ uiItemFullO(layout, name, icon, opname, ptr.data, layout->root->opcontext);
}
-void uiItemsEnumO(uiLayout *layout, int slot, char *opname, char *propname)
+void uiItemsEnumO(uiLayout *layout, char *opname, char *propname)
{
wmOperatorType *ot= WM_operatortype_find(opname);
PointerRNA ptr;
PropertyRNA *prop;
- if(!ot || !ot->srna)
+ if(!ot || !ot->srna) {
+ ui_item_disabled(layout, opname);
return;
+ }
RNA_pointer_create(NULL, ot->srna, NULL, &ptr);
prop= RNA_struct_find_property(&ptr, propname);
- if(prop && RNA_property_type(&ptr, prop) == PROP_ENUM) {
+ if(prop && RNA_property_type(prop) == PROP_ENUM) {
const EnumPropertyItem *item;
int totitem, i;
RNA_property_enum_items(&ptr, prop, &item, &totitem);
for(i=0; i<totitem; i++)
- uiItemEnumO(layout, slot, "", 0, opname, propname, item[i].value);
+ uiItemEnumO(layout, NULL, 0, opname, propname, item[i].value);
}
}
-void uiItemBooleanO(uiLayout *layout, int slot, const char *name, int icon, char *opname, char *propname, int value)
+void uiItemBooleanO(uiLayout *layout, char *name, int icon, char *opname, char *propname, int value)
{
PointerRNA ptr;
WM_operator_properties_create(&ptr, opname);
RNA_boolean_set(&ptr, propname, value);
- uiItemFullO(layout, slot, name, icon, opname, ptr.data, layout->opcontext);
+ uiItemFullO(layout, name, icon, opname, ptr.data, layout->root->opcontext);
}
-void uiItemIntO(uiLayout *layout, int slot, const char *name, int icon, char *opname, char *propname, int value)
+void uiItemIntO(uiLayout *layout, char *name, int icon, char *opname, char *propname, int value)
{
PointerRNA ptr;
WM_operator_properties_create(&ptr, opname);
RNA_int_set(&ptr, propname, value);
- uiItemFullO(layout, slot, name, icon, opname, ptr.data, layout->opcontext);
+ uiItemFullO(layout, name, icon, opname, ptr.data, layout->root->opcontext);
}
-void uiItemFloatO(uiLayout *layout, int slot, const char *name, int icon, char *opname, char *propname, float value)
+void uiItemFloatO(uiLayout *layout, char *name, int icon, char *opname, char *propname, float value)
{
PointerRNA ptr;
WM_operator_properties_create(&ptr, opname);
RNA_float_set(&ptr, propname, value);
- uiItemFullO(layout, slot, name, icon, opname, ptr.data, layout->opcontext);
+ uiItemFullO(layout, name, icon, opname, ptr.data, layout->root->opcontext);
}
-void uiItemStringO(uiLayout *layout, int slot, const char *name, int icon, char *opname, char *propname, char *value)
+void uiItemStringO(uiLayout *layout, char *name, int icon, char *opname, char *propname, char *value)
{
PointerRNA ptr;
WM_operator_properties_create(&ptr, opname);
RNA_string_set(&ptr, propname, value);
- uiItemFullO(layout, slot, name, icon, opname, ptr.data, layout->opcontext);
+ uiItemFullO(layout, name, icon, opname, ptr.data, layout->root->opcontext);
}
-void uiItemO(uiLayout *layout, int slot, const char *name, int icon, char *opname)
+void uiItemO(uiLayout *layout, char *name, int icon, char *opname)
{
- uiItemFullO(layout, slot, name, icon, opname, NULL, layout->opcontext);
+ uiItemFullO(layout, name, icon, opname, NULL, layout->root->opcontext);
}
/* RNA property items */
-void uiItemFullR(uiLayout *layout, int slot, const char *name, int icon, PointerRNA *ptr, char *propname, int index)
+
+static void ui_item_rna_size(uiLayout *layout, char *name, int icon, PropertyRNA *prop, int index, int *r_w, int *r_h)
+{
+ PropertyType type;
+ PropertySubType subtype;
+ int len, w, h;
+
+ w= ui_text_icon_width(layout, name, icon);
+ h= UI_UNIT_Y;
+
+ /* arbitrary extended width by type */
+ type= RNA_property_type(prop);
+ subtype= RNA_property_subtype(prop);
+ len= RNA_property_array_length(prop);
+
+ if(type == PROP_STRING)
+ w += 10*UI_UNIT_X;
+
+ /* increase height for arrays */
+ if(index == RNA_NO_INDEX && len > 0) {
+ if(strcmp(name, "") == 0 && icon == 0)
+ h= 0;
+
+ if(type == PROP_BOOLEAN && len == 20)
+ h += 2*UI_UNIT_Y;
+ else if(subtype == PROP_MATRIX)
+ h += ceil(sqrt(len))*UI_UNIT_Y;
+ else
+ h += len*UI_UNIT_Y;
+ }
+ else if(ui_layout_vary_direction(layout) == UI_ITEM_VARY_X) {
+ if(type == PROP_BOOLEAN && strcmp(name, "") != 0)
+ w += UI_UNIT_X;
+ }
+
+ *r_w= w;
+ *r_h= h;
+}
+
+void uiItemFullR(uiLayout *layout, char *name, int icon, PointerRNA *ptr, PropertyRNA *prop, int index, int value, int expand, int slider)
+{
+ uiBlock *block= layout->root->block;
+ uiBut *but;
+ PropertyType type;
+ char namestr[UI_MAX_NAME_STR];
+ int len, w, h;
+
+ if(!ptr->data || !prop)
+ return;
+
+ uiBlockSetCurLayout(block, layout);
+
+ /* retrieve info */
+ type= RNA_property_type(prop);
+ len= RNA_property_array_length(prop);
+
+ /* set name and icon */
+ if(!name)
+ name= (char*)RNA_property_ui_name(prop);
+
+ if(ELEM5(type, PROP_INT, PROP_FLOAT, PROP_STRING, PROP_ENUM, PROP_POINTER))
+ name= ui_item_name_add_colon(name, namestr);
+ if(type == PROP_BOOLEAN && len)
+ name= ui_item_name_add_colon(name, namestr);
+
+ if(layout->root->type == UI_LAYOUT_MENU) {
+ if(type == PROP_BOOLEAN)
+ icon= (RNA_property_boolean_get(ptr, prop))? ICON_CHECKBOX_HLT: ICON_CHECKBOX_DEHLT;
+ else if(type == PROP_ENUM && index == RNA_ENUM_VALUE)
+ icon= (RNA_property_enum_get(ptr, prop) == value)? ICON_CHECKBOX_HLT: ICON_CHECKBOX_DEHLT;
+ }
+
+ /* get size */
+ ui_item_rna_size(layout, name, icon, prop, index, &w, &h);
+
+ /* array property */
+ if(index == RNA_NO_INDEX && len > 0)
+ ui_item_array(layout, block, name, icon, ptr, prop, len, 0, 0, w, h, expand, slider);
+ /* enum item */
+ else if(type == PROP_ENUM && index == RNA_ENUM_VALUE) {
+ char *identifier= (char*)RNA_property_identifier(prop);
+
+ if(icon && strcmp(name, "") != 0)
+ uiDefIconTextButR(block, ROW, 0, icon, name, 0, 0, w, h, ptr, identifier, -1, 0, value, -1, -1, NULL);
+ else if(icon)
+ uiDefIconButR(block, ROW, 0, icon, 0, 0, w, h, ptr, identifier, -1, 0, value, -1, -1, NULL);
+ else
+ uiDefButR(block, ROW, 0, name, 0, 0, w, h, ptr, identifier, -1, 0, value, -1, -1, NULL);
+ }
+ /* expanded enum */
+ else if(type == PROP_ENUM && expand)
+ ui_item_enum_row(layout, block, ptr, prop, 0, 0, w, h);
+ /* property with separate label */
+ else if(type == PROP_ENUM || type == PROP_STRING || type == PROP_POINTER)
+ ui_item_with_label(layout, block, name, icon, ptr, prop, index, 0, 0, w, h);
+ /* single button */
+ else {
+ but= uiDefAutoButR(block, ptr, prop, index, (char*)name, icon, 0, 0, w, h);
+
+ if(slider && but->type==NUM)
+ but->type= NUMSLI;
+ }
+}
+
+void uiItemR(uiLayout *layout, char *name, int icon, PointerRNA *ptr, char *propname, int expand, int slider)
{
- uiTemplate *template= layout->templates.last;
PropertyRNA *prop;
- uiItemRNA *rnaitem;
-
+
+ if(!ptr->data || !propname)
+ return;
+
prop= RNA_struct_find_property(ptr, propname);
- if(!prop)
+
+ if(!prop) {
+ ui_item_disabled(layout, propname);
+ printf("uiItemR: property not found: %s\n", propname);
return;
-
- rnaitem= MEM_callocN(sizeof(uiItemRNA), "uiItemRNA");
+ }
- rnaitem->item.name= name;
- rnaitem->item.icon= icon;
- rnaitem->item.type= ITEM_RNA_PROPERTY;
- rnaitem->item.slot= slot;
+ uiItemFullR(layout, name, icon, ptr, prop, RNA_NO_INDEX, 0, expand, slider);
+}
- rnaitem->ptr= *ptr;
- rnaitem->prop= prop;
- rnaitem->index= index;
+void uiItemEnumR(uiLayout *layout, char *name, int icon, struct PointerRNA *ptr, char *propname, int value)
+{
+ PropertyRNA *prop;
+
+ if(!ptr->data || !propname)
+ return;
+
+ prop= RNA_struct_find_property(ptr, propname);
+
+ if(!prop) {
+ ui_item_disabled(layout, propname);
+ printf("uiItemEnumR: property not found: %s\n", propname);
+ return;
+ }
- BLI_addtail(&template->items, rnaitem);
+ uiItemFullR(layout, name, icon, ptr, prop, RNA_ENUM_VALUE, value, 0, 0);
}
-void uiItemR(uiLayout *layout, int slot, const char *name, int icon, PointerRNA *ptr, char *propname)
+void uiItemsEnumR(uiLayout *layout, struct PointerRNA *ptr, char *propname)
{
- uiItemFullR(layout, slot, name, icon, ptr, propname, RNA_NO_INDEX);
+ PropertyRNA *prop;
+
+ prop= RNA_struct_find_property(ptr, propname);
+
+ if(!prop) {
+ ui_item_disabled(layout, propname);
+ return;
+ }
+
+ if(RNA_property_type(prop) == PROP_ENUM) {
+ const EnumPropertyItem *item;
+ int totitem, i;
+
+ RNA_property_enum_items(ptr, prop, &item, &totitem);
+
+ for(i=0; i<totitem; i++)
+ uiItemEnumR(layout, (char*)item[i].name, 0, ptr, propname, item[i].value);
+ }
}
/* menu item */
-void uiItemMenu(uiLayout *layout, int slot, const char *name, int icon, uiMenuCreateFunc func)
+static void ui_item_menutype_func(bContext *C, uiLayout *layout, void *arg_mt)
{
- uiTemplate *template= layout->templates.last;
- uiItemLMenu *menuitem= MEM_callocN(sizeof(uiItemLMenu), "uiItemLMenu");
+ MenuType *mt= (MenuType*)arg_mt;
+ Menu menu = {0};
+
+ menu.type= mt;
+ menu.layout= layout;
+ mt->draw(C, &menu);
+}
+
+static void ui_item_menu(uiLayout *layout, char *name, int icon, uiMenuCreateFunc func, void *arg, void *argN)
+{
+ uiBlock *block= layout->root->block;
+ uiBut *but;
+ int w, h;
+
+ uiBlockSetCurLayout(block, layout);
+
+ if(layout->root->type == UI_LAYOUT_HEADER)
+ uiBlockSetEmboss(block, UI_EMBOSSP);
+
+ if(!name)
+ name= "";
+ if(layout->root->type == UI_LAYOUT_MENU && !icon)
+ icon= ICON_BLANK1;
- menuitem->item.name= name;
- menuitem->item.icon= icon;
- menuitem->item.type= ITEM_MENU;
- menuitem->item.slot= slot;
+ w= ui_text_icon_width(layout, name, icon);
+ h= UI_UNIT_Y;
- menuitem->func= func;
+ if(layout->root->type == UI_LAYOUT_HEADER) /* ugly .. */
+ w -= 3;
- BLI_addtail(&template->items, menuitem);
+ if(icon)
+ but= uiDefIconTextMenuBut(block, func, arg, icon, (char*)name, 0, 0, w, h, "");
+ else
+ but= uiDefMenuBut(block, func, arg, (char*)name, 0, 0, w, h, "");
+
+ if(argN) { /* ugly .. */
+ but->poin= (char*)but;
+ but->func_argN= argN;
+ }
+
+ if(layout->root->type == UI_LAYOUT_HEADER)
+ uiBlockSetEmboss(block, UI_EMBOSS);
+}
+
+void uiItemM(uiLayout *layout, bContext *C, char *name, int icon, char *menuname)
+{
+ ARegion *ar= CTX_wm_region(C);
+ MenuType *mt;
+
+ if(!menuname)
+ return;
+
+ for(mt=ar->type->menutypes.first; mt; mt=mt->next) {
+ if(strcmp(menuname, mt->idname) == 0) {
+ if(!name)
+ name= mt->label;
+ if(layout->root->type == UI_LAYOUT_MENU && !icon)
+ icon= ICON_BLANK1;
+ ui_item_menu(layout, name, icon, ui_item_menutype_func, mt, NULL);
+ break;
+ }
+ }
}
/* label item */
-void uiItemLabel(uiLayout *layout, int slot, const char *name, int icon)
+void uiItemL(uiLayout *layout, char *name, int icon)
{
- uiTemplate *template= layout->templates.last;
- uiItem *item= MEM_callocN(sizeof(uiItem), "uiItem");
+ uiBlock *block= layout->root->block;
+ uiBut *but;
+ int w;
- item->name= name;
- item->icon= icon;
- item->type= ITEM_LABEL;
- item->slot= slot;
+ uiBlockSetCurLayout(block, layout);
- BLI_addtail(&template->items, item);
+ if(!name)
+ name= "";
+ if(layout->root->type == UI_LAYOUT_MENU && !icon)
+ icon= ICON_BLANK1;
+
+ w= ui_text_icon_width(layout, name, icon);
+
+ if(icon && strcmp(name, "") != 0)
+ but= uiDefIconTextBut(block, LABEL, 0, icon, (char*)name, 0, 0, w, UI_UNIT_Y, NULL, 0.0, 0.0, 0, 0, "");
+ else if(icon)
+ but= uiDefIconBut(block, LABEL, 0, icon, 0, 0, w, UI_UNIT_Y, NULL, 0.0, 0.0, 0, 0, "");
+ else
+ but= uiDefBut(block, LABEL, 0, (char*)name, 0, 0, w, UI_UNIT_Y, NULL, 0.0, 0.0, 0, 0, "");
}
-/**************************** Template ***************************/
+/* value item */
+void uiItemV(uiLayout *layout, char *name, int icon, int argval)
+{
+ /* label */
+ uiBlock *block= layout->root->block;
+ float *retvalue= (block->handle)? &block->handle->retvalue: NULL;
+ int w;
+
+ uiBlockSetCurLayout(block, layout);
+
+ if(!name)
+ name= "";
+ if(layout->root->type == UI_LAYOUT_MENU && !icon)
+ icon= ICON_BLANK1;
+
+ w= ui_text_icon_width(layout, name, icon);
-/* multi-column layout */
-static void ui_layout_column(uiLayout *layout, uiBlock *block, uiTemplate *template, int *x, int *y, int w, int h)
+ if(icon && strcmp(name, "") != 0)
+ uiDefIconTextButF(block, BUTM, 0, icon, (char*)name, 0, 0, w, UI_UNIT_Y, retvalue, 0.0, 0.0, 0, argval, "");
+ else if(icon)
+ uiDefIconButF(block, BUTM, 0, icon, 0, 0, w, UI_UNIT_Y, retvalue, 0.0, 0.0, 0, argval, "");
+ else
+ uiDefButF(block, BUTM, 0, (char*)name, 0, 0, w, UI_UNIT_Y, retvalue, 0.0, 0.0, 0, argval, "");
+}
+
+/* separator item */
+void uiItemS(uiLayout *layout)
{
- uiItem *item;
- int col, totcol= 0, colx, coly, colw, miny, itemw, itemh;
+ uiBlock *block= layout->root->block;
- /* compute number of columns */
- for(item=template->items.first; item; item=item->next)
- totcol= MAX2(item->slot+1, totcol);
-
- if(totcol == 0)
+ uiBlockSetCurLayout(block, layout);
+ uiDefBut(block, SEPR, 0, "", 0, 0, EM_SEPR_X, EM_SEPR_Y, NULL, 0.0, 0.0, 0, 0, "");
+}
+
+/* level items */
+void uiItemMenuF(uiLayout *layout, char *name, int icon, uiMenuCreateFunc func)
+{
+ if(!func)
return;
-
- colx= *x;
- colw= (w - (totcol-1)*COLUMN_SPACE)/totcol;
- miny= *y;
- /* create column per column */
- for(col=0; col<totcol; col++) {
- coly= *y;
+ ui_item_menu(layout, name, icon, func, NULL, NULL);
+}
- for(item=template->items.first; item; item=item->next) {
- if(item->slot != col)
- continue;
+typedef struct MenuItemLevel {
+ int opcontext;
+ char *opname;
+ char *propname;
+ PointerRNA rnapoin;
+} MenuItemLevel;
- ui_item_size(item, &itemw, &itemh);
+static void menu_item_enum_opname_menu(bContext *C, uiLayout *layout, void *arg)
+{
+ MenuItemLevel *lvl= (MenuItemLevel*)(((uiBut*)arg)->func_argN);
- coly -= itemh + BUTTON_SPACE_Y;
- ui_item_buts(block, item, colx, coly, colw, itemh);
- }
+ uiLayoutContext(layout, WM_OP_EXEC_REGION_WIN);
+ uiItemsEnumO(layout, lvl->opname, lvl->propname);
+}
- colx += colw + COLUMN_SPACE;
- miny= MIN2(miny, coly);
+void uiItemMenuEnumO(uiLayout *layout, char *name, int icon, char *opname, char *propname)
+{
+ wmOperatorType *ot= WM_operatortype_find(opname);
+ MenuItemLevel *lvl;
+
+ if(!ot || !ot->srna) {
+ ui_item_disabled(layout, opname);
+ return;
}
- *y= miny;
+ if(!name)
+ name= ot->name;
+ if(layout->root->type == UI_LAYOUT_MENU && !icon)
+ icon= ICON_BLANK1;
+
+ lvl= MEM_callocN(sizeof(MenuItemLevel), "MenuItemLevel");
+ lvl->opname= opname;
+ lvl->propname= propname;
+ lvl->opcontext= layout->root->opcontext;
+
+ ui_item_menu(layout, name, icon, menu_item_enum_opname_menu, NULL, lvl);
}
-/* left-right layout, with buttons aligned on both sides */
-static void ui_layout_lr(uiLayout *layout, uiBlock *block, uiTemplate *template, int *x, int *y, int w, int h)
+static void menu_item_enum_rna_menu(bContext *C, uiLayout *layout, void *arg)
+{
+ MenuItemLevel *lvl= (MenuItemLevel*)(((uiBut*)arg)->func_argN);
+
+ uiLayoutContext(layout, lvl->opcontext);
+ uiItemsEnumR(layout, &lvl->rnapoin, lvl->propname);
+}
+
+void uiItemMenuEnumR(uiLayout *layout, char *name, int icon, struct PointerRNA *ptr, char *propname)
+{
+ MenuItemLevel *lvl;
+ PropertyRNA *prop;
+
+ prop= RNA_struct_find_property(ptr, propname);
+ if(!prop) {
+ ui_item_disabled(layout, propname);
+ return;
+ }
+
+ if(!name)
+ name= (char*)RNA_property_ui_name(prop);
+ if(layout->root->type == UI_LAYOUT_MENU && !icon)
+ icon= ICON_BLANK1;
+
+ lvl= MEM_callocN(sizeof(MenuItemLevel), "MenuItemLevel");
+ lvl->rnapoin= *ptr;
+ lvl->propname= propname;
+ lvl->opcontext= layout->root->opcontext;
+
+ ui_item_menu(layout, name, icon, menu_item_enum_rna_menu, NULL, lvl);
+}
+
+/**************************** Layout Items ***************************/
+
+/* single-row layout */
+static void ui_litem_estimate_row(uiLayout *litem)
+{
+ uiItem *item;
+ int itemw, itemh;
+
+ litem->w= 0;
+ litem->h= 0;
+
+ for(item=litem->items.first; item; item=item->next) {
+ ui_item_size(item, &itemw, &itemh);
+
+ litem->w += itemw;
+ litem->h= MAX2(itemh, litem->h);
+
+ if(item->next)
+ litem->w += litem->space;
+ }
+}
+
+static void ui_litem_layout_row(uiLayout *litem)
{
uiItem *item;
- int totw= 0, maxh= 0, itemw, itemh, leftx, rightx;
+ int neww, itemw, itemh, x, y, w, tot= 0, totw= 0, extra=0, available=0;
+
+ x= litem->x;
+ y= litem->y;
+ w= litem->w;
- /* estimate total width of buttons */
- for(item=template->items.first; item; item=item->next) {
+ for(item=litem->items.first; item; item=item->next) {
ui_item_size(item, &itemw, &itemh);
totw += itemw;
- maxh= MAX2(maxh, itemh);
+ tot++;
}
if(totw == 0)
return;
- /* create buttons starting from left and right */
- leftx= *x;
- rightx= *x + w;
+ /* two step to enforce minimum button with .. could be better */
+ for(item=litem->items.first; item; item=item->next) {
+ ui_item_size(item, &itemw, &itemh);
+
+ itemw= ui_item_fit(itemw, x-litem->x, totw, w, (tot-1)*litem->space, !item->next, UI_FIT_EXPAND);
+ x += itemw;
+
+ if(itemw < UI_UNIT_X)
+ extra += UI_UNIT_X - itemw;
+ else
+ available += itemw - UI_UNIT_X;
+
+ if(item->next)
+ x += litem->space;
+ }
+
+ x= litem->x;
- for(item=template->items.first; item; item=item->next) {
+ for(item=litem->items.first; item; item=item->next) {
ui_item_size(item, &itemw, &itemh);
- itemw= ui_item_fit(itemw, totw+BUTTON_SPACE_X, w);
- if(item->slot == UI_TSLOT_LR_LEFT) {
- ui_item_buts(block, item, leftx, *y-itemh, itemw, itemh);
- leftx += itemw;
- }
- else {
- rightx -= itemw;
- ui_item_buts(block, item, rightx, *y-itemh, itemw, itemh);
+ neww= ui_item_fit(itemw, x-litem->x, totw, w, (tot-1)*litem->space, !item->next, UI_FIT_EXPAND);
+ if(neww < UI_UNIT_X) {
+ if(item->next)
+ itemw= UI_UNIT_X;
+ else
+ itemw= litem->w - (x-litem->x);
}
+ else
+ itemw= ui_item_fit(itemw, x-litem->x, totw, w-extra, (tot-1)*litem->space, !item->next, UI_FIT_EXPAND);
+
+ ui_item_position(item, x, y-itemh, itemw, itemh);
+ x += itemw;
+
+ if(item->next)
+ x += litem->space;
}
- *y -= maxh;
+ litem->w= x - litem->x;
+ litem->h= litem->y - y;
+ litem->x= x;
+ litem->y= y;
}
-/* element in a stack layout */
-static void ui_layout_stack(const bContext *C, uiLayout *layout, uiBlock *block, uiTemplate *template, int *x, int *y, int w, int h)
+/* single-column layout */
+static void ui_litem_estimate_column(uiLayout *litem)
{
- uiTemplateStck *stack= (uiTemplateStck*)template;
- int starty, startx;
+ uiItem *item;
+ int itemw, itemh;
+
+ litem->w= 0;
+ litem->h= 0;
- startx= *x;
- starty= *y;
+ for(item=litem->items.first; item; item=item->next) {
+ ui_item_size(item, &itemw, &itemh);
+
+ litem->w= MAX2(litem->w, itemw);
+ litem->h += itemh;
+
+ if(item->next)
+ litem->h += litem->space;
+ }
+}
+
+static void ui_litem_layout_column(uiLayout *litem)
+{
+ uiItem *item;
+ int itemh, x, y;
- /* some extra padding */
- stack->sublayout->x= *x + STACK_SPACE;
- stack->sublayout->w= w - 2*STACK_SPACE;
- stack->sublayout->y= *y - STACK_SPACE;
- stack->sublayout->h= h;
+ x= litem->x;
+ y= litem->y;
- /* do layout for elements in sublayout */
- ui_layout_end(C, block, stack->sublayout, NULL, y);
+ for(item=litem->items.first; item; item=item->next) {
+ ui_item_size(item, NULL, &itemh);
+
+ y -= itemh;
+ ui_item_position(item, x, y, litem->w, itemh);
+
+ if(item->next)
+ y -= litem->space;
+ }
+
+ litem->h= litem->y - y;
+ litem->x= x;
+ litem->y= y;
+}
+
+/* root layout */
+static void ui_litem_estimate_root(uiLayout *litem)
+{
+ /* nothing to do */
+}
+
+static void ui_litem_layout_root(uiLayout *litem)
+{
+ if(litem->root->type == UI_LAYOUT_HEADER)
+ ui_litem_layout_row(litem);
+ else
+ ui_litem_layout_column(litem);
+}
+
+/* box layout */
+static void ui_litem_estimate_box(uiLayout *litem)
+{
+ uiStyle *style= litem->root->style;
+
+ ui_litem_estimate_column(litem);
+ litem->w += 2*style->boxspace;
+ litem->h += 2*style->boxspace;
+}
+
+static void ui_litem_layout_box(uiLayout *litem)
+{
+ uiStyle *style= litem->root->style;
+ int w, h;
+
+ w= litem->w;
+ h= litem->h;
+
+ litem->x += style->boxspace;
+ litem->y -= style->boxspace;
+
+ if(w != 0) litem->w -= 2*style->boxspace;
+ if(h != 0) litem->h -= 2*style->boxspace;
+
+ ui_litem_layout_column(litem);
+
+ litem->x -= style->boxspace;
+ litem->y -= style->boxspace;
+
+ if(w != 0) litem->w += 2*style->boxspace;
+ if(h != 0) litem->h += 2*style->boxspace;
/* roundbox around the sublayout */
- uiDefBut(block, ROUNDBOX, 0, "", startx, *y, w, starty - *y, NULL, 7.0, 0.0, 3, 20, "");
+ uiDefBut(litem->root->block, ROUNDBOX, 0, "", litem->x, litem->y, litem->w, litem->h, NULL, 7.0, 0.0, 3, 20, "");
}
-static void ui_layout_header_buttons(uiLayout *layout, uiBlock *block, uiTemplate *template, int *x, int *y, int w, int h)
+/* multi-column layout, automatically flowing to the next */
+static void ui_litem_estimate_column_flow(uiLayout *litem)
{
+ uiStyle *style= litem->root->style;
+ uiLayoutItemFlow *flow= (uiLayoutItemFlow*)litem;
uiItem *item;
- int itemw, itemh;
-
- uiBlockBeginAlign(block);
+ int col, x, y, emh, emy, miny, itemw, itemh, maxw=0;
+ int toth, totitem;
+
+ /* compute max needed width and total height */
+ toth= 0;
+ totitem= 0;
+ for(item=litem->items.first; item; item=item->next) {
+ ui_item_size(item, &itemw, &itemh);
+ maxw= MAX2(maxw, itemw);
+ toth += itemh;
+ totitem++;
+ }
- for(item=template->items.first; item; item=item->next) {
+ if(flow->number <= 0) {
+ /* auto compute number of columns, not very good */
+ if(maxw == 0) {
+ flow->totcol= 1;
+ return;
+ }
+
+ flow->totcol= MAX2(litem->root->emw/maxw, 1);
+ flow->totcol= MIN2(flow->totcol, totitem);
+ }
+ else
+ flow->totcol= flow->number;
+
+ /* compute sizes */
+ x= 0;
+ y= 0;
+ emy= 0;
+ miny= 0;
+
+ maxw= 0;
+ emh= toth/flow->totcol;
+
+ /* create column per column */
+ col= 0;
+ for(item=litem->items.first; item; item=item->next) {
ui_item_size(item, &itemw, &itemh);
- ui_item_buts(block, item, *x, *y, itemw, itemh);
- *x += itemw;
+
+ y -= itemh + style->buttonspacey;
+ miny= MIN2(miny, y);
+ emy -= itemh;
+ maxw= MAX2(itemw, maxw);
+
+ /* decide to go to next one */
+ if(col < flow->totcol-1 && emy <= -emh) {
+ x += maxw + litem->space;
+ maxw= 0;
+ y= 0;
+ col++;
+ }
}
- uiBlockEndAlign(block);
+ litem->h= litem->y - miny;
}
-static void ui_layout_header_menus(const bContext *C, uiLayout *layout, uiBlock *block, uiTemplate *template, int *x, int *y, int w, int h)
+static void ui_litem_layout_column_flow(uiLayout *litem)
{
- ScrArea *sa= CTX_wm_area(C);
+ uiStyle *style= litem->root->style;
+ uiLayoutItemFlow *flow= (uiLayoutItemFlow*)litem;
+ uiItem *item;
+ int col, x, y, w, emh, emy, miny, itemw, itemh;
+ int toth, totitem;
- *x= ED_area_header_standardbuttons(C, block, *y);
+ /* compute max needed width and total height */
+ toth= 0;
+ totitem= 0;
+ for(item=litem->items.first; item; item=item->next) {
+ ui_item_size(item, &itemw, &itemh);
+ toth += itemh;
+ totitem++;
+ }
- if((sa->flag & HEADER_NO_PULLDOWN)==0) {
- uiBlockSetEmboss(block, UI_EMBOSSP);
- ui_layout_header_buttons(layout, block, template, x, y, w, h);
+ /* compute sizes */
+ x= litem->x;
+ y= litem->y;
+ emy= 0;
+ miny= 0;
+
+ w= litem->w;
+ emh= toth/flow->totcol;
+
+ /* create column per column */
+ col= 0;
+ for(item=litem->items.first; item; item=item->next) {
+ ui_item_size(item, NULL, &itemh);
+ itemw= ui_item_fit(1, x-litem->x, flow->totcol, w, (flow->totcol-1)*style->columnspace, col == flow->totcol-1, UI_FIT_EXPAND);
+
+ y -= itemh;
+ emy -= itemh;
+ ui_item_position(item, x, y, itemw, itemh);
+ y -= style->buttonspacey;
+ miny= MIN2(miny, y);
+
+ /* decide to go to next one */
+ if(col < flow->totcol-1 && emy <= -emh) {
+ x += itemw + style->columnspace;
+ y= litem->y;
+ col++;
+ }
}
- uiBlockSetEmboss(block, UI_EMBOSS);
+ litem->h= litem->y - miny;
+ litem->x= x;
+ litem->y= miny;
}
-static void ui_layout_header_id(const bContext *C, uiLayout *layout, uiBlock *block, uiTemplate *template, int *x, int *y, int w, int h)
+/* free layout */
+static void ui_litem_estimate_free(uiLayout *litem)
{
- uiTemplateHeadID *idtemplate= (uiTemplateHeadID*)template;
- PointerRNA idptr;
+ uiItem *item;
+ int itemx, itemy, itemw, itemh, minx, miny;
+
+ minx= 1e6;
+ miny= 1e6;
+ litem->w= 0;
+ litem->h= 0;
+
+ for(item=litem->items.first; item; item=item->next) {
+ ui_item_offset(item, &itemx, &itemy);
+ ui_item_size(item, &itemw, &itemh);
- idptr= RNA_pointer_get(&idtemplate->ptr, idtemplate->propname);
+ minx= MIN2(minx, itemx);
+ miny= MIN2(miny, itemy);
- *x= uiDefIDPoinButs(block, CTX_data_main(C), NULL, (ID*)idptr.data, ID_TXT, NULL, *x, *y,
- idtemplate->func, UI_ID_BROWSE|UI_ID_RENAME|UI_ID_ADD_NEW|UI_ID_OPEN|UI_ID_DELETE);
+ litem->w= MAX2(litem->w, itemx+itemw);
+ litem->h= MAX2(litem->h, itemy+itemh);
+ }
+
+ litem->w -= minx;
+ litem->h -= miny;
}
-void ui_template_free(uiTemplate *template)
+static void ui_litem_layout_free(uiLayout *litem)
{
uiItem *item;
+ float scalex=1.0f, scaley=1.0f;
+ int x, y, newx, newy, itemx, itemy, itemh, itemw, minx, miny, totw, toth;
+
+ minx= 1e6;
+ miny= 1e6;
+ totw= 0;
+ toth= 0;
+
+ for(item=litem->items.first; item; item=item->next) {
+ ui_item_offset(item, &itemx, &itemy);
+ ui_item_size(item, &itemw, &itemh);
+
+ minx= MIN2(minx, itemx);
+ miny= MIN2(miny, itemy);
- if(template->type == TEMPLATE_STACK) {
- uiTemplateStck *stack= (uiTemplateStck*)template;
- ui_layout_free(stack->sublayout);
+ totw= MAX2(totw, itemx+itemw);
+ toth= MAX2(toth, itemy+itemh);
}
- for(item=template->items.first; item; item=item->next)
- ui_item_free(item);
+ totw -= minx;
+ toth -= miny;
+
+ if(litem->w && totw > litem->w)
+ scalex= (float)litem->w/(float)totw;
+ if(litem->h && toth > litem->h)
+ scaley= (float)litem->h/(float)toth;
+
+ x= litem->x;
+ y= litem->y - scaley*toth;
- BLI_freelistN(&template->items);
+ for(item=litem->items.first; item; item=item->next) {
+ ui_item_offset(item, &itemx, &itemy);
+ ui_item_size(item, &itemw, &itemh);
+
+ if(scalex != 1.0f) {
+ newx= itemx*scalex;
+ itemw= (itemx + itemw)*scalex - newx;
+ itemx= newx;
+ }
+
+ if(scaley != 1.0f) {
+ newy= itemy*scaley;
+ itemh= (itemy + itemh)*scaley - newy;
+ itemy= newy;
+ }
+
+ ui_item_position(item, x+itemx-minx, y+itemy-miny, itemw, itemh);
+ }
+
+ litem->w= scalex*totw;
+ litem->h= litem->y - y;
+ litem->x= x + litem->w;
+ litem->y= y;
}
-/* template create functions */
-void uiTemplateColumn(uiLayout *layout)
+/* split layout */
+static void ui_litem_estimate_split(uiLayout *litem)
{
- uiTemplate *template;
+ ui_litem_estimate_row(litem);
+}
+
+static void ui_litem_layout_split(uiLayout *litem)
+{
+ uiItem *item;
+ int itemh, x, y, w, tot=0, colw=0;
- template= MEM_callocN(sizeof(uiTemplate), "uiTemplate");
- template->type= TEMPLATE_COLUMN;
+ x= litem->x;
+ y= litem->y;
+ w= litem->w;
- BLI_addtail(&layout->templates, template);
+ for(item=litem->items.first; item; item=item->next)
+ tot++;
+
+ if(tot == 0)
+ return;
+
+ colw= (litem->w - (tot-1)*litem->space)/tot;
+ colw= MAX2(colw, 0);
+
+ for(item=litem->items.first; item; item=item->next) {
+ ui_item_size(item, NULL, &itemh);
+
+ ui_item_position(item, x, y-itemh, colw, itemh);
+ x += colw;
+
+ if(item->next)
+ x += litem->space;
+ }
+
+ litem->w= x - litem->x;
+ litem->h= litem->y - y;
+ litem->x= x;
+ litem->y= y;
}
+/* layout create functions */
+uiLayout *uiLayoutRow(uiLayout *layout, int align)
+{
+ uiLayout *litem;
+
+ litem= MEM_callocN(sizeof(uiLayout), "uiLayoutRow");
+ litem->item.type= ITEM_LAYOUT_ROW;
+ litem->root= layout->root;
+ litem->align= align;
+ litem->space= (align)? 0: layout->root->style->buttonspacex;
+ BLI_addtail(&layout->items, litem);
+
+ uiBlockSetCurLayout(layout->root->block, litem);
-void uiTemplateLeftRight(uiLayout *layout)
+ return litem;
+}
+
+uiLayout *uiLayoutColumn(uiLayout *layout, int align)
{
- uiTemplate *template;
+ uiLayout *litem;
- template= MEM_callocN(sizeof(uiTemplate), "uiTemplate");
- template->type= TEMPLATE_LR;
+ litem= MEM_callocN(sizeof(uiLayout), "uiLayoutColumn");
+ litem->item.type= ITEM_LAYOUT_COLUMN;
+ litem->root= layout->root;
+ litem->align= align;
+ litem->space= (litem->align)? 0: layout->root->style->buttonspacey;
+ BLI_addtail(&layout->items, litem);
- BLI_addtail(&layout->templates, template);
+ uiBlockSetCurLayout(layout->root->block, litem);
+
+ return litem;
}
-uiLayout *uiTemplateStack(uiLayout *layout)
+uiLayout *uiLayoutColumnFlow(uiLayout *layout, int number, int align)
{
- uiTemplateStck *stack;
+ uiLayoutItemFlow *flow;
+
+ flow= MEM_callocN(sizeof(uiLayoutItemFlow), "uiLayoutItemFlow");
+ flow->litem.item.type= ITEM_LAYOUT_COLUMN_FLOW;
+ flow->litem.root= layout->root;
+ flow->litem.align= align;
+ flow->litem.space= (flow->litem.align)? 0: layout->root->style->columnspace;
+ flow->number= number;
+ BLI_addtail(&layout->items, flow);
- stack= MEM_callocN(sizeof(uiTemplateStck), "uiTemplateStck");
- stack->template.type= TEMPLATE_STACK;
- stack->sublayout= uiLayoutBegin(layout->dir, 0, 0, 0, 0);
- BLI_addtail(&layout->templates, stack);
+ uiBlockSetCurLayout(layout->root->block, &flow->litem);
- return stack->sublayout;
+ return &flow->litem;
}
-void uiTemplateHeaderMenus(uiLayout *layout)
+uiLayout *uiLayoutBox(uiLayout *layout)
{
- uiTemplate *template;
+ uiLayoutItemBx *box;
- template= MEM_callocN(sizeof(uiTemplate), "uiTemplate");
- template->type= TEMPLATE_HEADER_MENUS;
+ box= MEM_callocN(sizeof(uiLayoutItemBx), "uiLayoutItemBx");
+ box->litem.item.type= ITEM_LAYOUT_BOX;
+ box->litem.root= layout->root;
+ box->litem.space= layout->root->style->columnspace;
+ BLI_addtail(&layout->items, box);
- BLI_addtail(&layout->templates, template);
+ uiBlockSetCurLayout(layout->root->block, &box->litem);
+
+ return &box->litem;
}
-void uiTemplateHeaderButtons(uiLayout *layout)
+uiLayout *uiLayoutFree(uiLayout *layout, int align)
{
- uiTemplate *template;
+ uiLayout *litem;
+
+ litem= MEM_callocN(sizeof(uiLayout), "uiLayoutFree");
+ litem->item.type= ITEM_LAYOUT_FREE;
+ litem->root= layout->root;
+ litem->align= align;
+ BLI_addtail(&layout->items, litem);
- template= MEM_callocN(sizeof(uiTemplate), "uiTemplate");
- template->type= TEMPLATE_HEADER_BUTTONS;
+ uiBlockSetCurLayout(layout->root->block, litem);
- BLI_addtail(&layout->templates, template);
+ return litem;
}
-void uiTemplateHeaderID(uiLayout *layout, PointerRNA *ptr, char *propname, int flag, uiIDPoinFunc func)
+uiBlock *uiLayoutFreeBlock(uiLayout *layout)
{
- uiTemplateHeadID *idtemplate;
+ uiBlock *block;
- idtemplate= MEM_callocN(sizeof(uiTemplateHeadID), "uiTemplateHeadID");
- idtemplate->template.type= TEMPLATE_HEADER_ID;
- idtemplate->ptr= *ptr;
- idtemplate->propname= propname;
- idtemplate->flag= flag;
- idtemplate->func= func;
+ block= uiLayoutBlock(layout);
+ uiLayoutFree(layout, 0);
- BLI_addtail(&layout->templates, idtemplate);
+ return block;
}
-void uiTemplateSetColor(uiLayout *layout, int color)
+uiLayout *uiLayoutSplit(uiLayout *layout)
{
- uiTemplate *template= layout->templates.last;
+ uiLayout *litem;
- template->color= color;
+ litem= uiLayoutRow(layout, 0);
+ litem->item.type = ITEM_LAYOUT_SPLIT;
+ litem->root= layout->root;
+ litem->space= layout->root->style->columnspace;
+
+ uiBlockSetCurLayout(layout->root->block, litem);
+
+ return litem;
}
/********************** Layout *******************/
-static void ui_layout_templates(const bContext *C, uiBlock *block, uiLayout *layout)
+static void ui_item_estimate(uiItem *item)
{
- uiTemplate *template;
- int oldcolor= 0;
+ uiItem *subitem;
- for(template=layout->templates.first; template; template=template->next) {
- if(template->color) {
- oldcolor= uiBlockGetCol(block);
- uiBlockSetCol(block, template->color);
- }
+ if(item->type != ITEM_BUTTON) {
+ uiLayout *litem= (uiLayout*)item;
+
+ for(subitem=litem->items.first; subitem; subitem=subitem->next)
+ ui_item_estimate(subitem);
- switch(template->type) {
- case TEMPLATE_COLUMN:
- ui_layout_column(layout, block, template, &layout->x, &layout->y, layout->w, layout->h);
+ if(litem->items.first == NULL)
+ return;
+
+ switch(litem->item.type) {
+ case ITEM_LAYOUT_COLUMN:
+ ui_litem_estimate_column(litem);
+ break;
+ case ITEM_LAYOUT_COLUMN_FLOW:
+ ui_litem_estimate_column_flow(litem);
break;
- case TEMPLATE_LR:
- ui_layout_lr(layout, block, template, &layout->x, &layout->y, layout->w, layout->h);
+ case ITEM_LAYOUT_ROW:
+ ui_litem_estimate_row(litem);
break;
- case TEMPLATE_STACK:
- ui_layout_stack(C, layout, block, template, &layout->x, &layout->y, layout->w, layout->h);
+ case ITEM_LAYOUT_BOX:
+ ui_litem_estimate_box(litem);
break;
- case TEMPLATE_HEADER_MENUS:
- ui_layout_header_menus(C, layout, block, template, &layout->x, &layout->y, layout->w, layout->h);
+ case ITEM_LAYOUT_ROOT:
+ ui_litem_estimate_root(litem);
break;
- case TEMPLATE_HEADER_BUTTONS:
- ui_layout_header_buttons(layout, block, template, &layout->x, &layout->y, layout->w, layout->h);
+ case ITEM_LAYOUT_FREE:
+ ui_litem_estimate_free(litem);
break;
- case TEMPLATE_HEADER_ID:
- ui_layout_header_id(C, layout, block, template, &layout->x, &layout->y, layout->w, layout->h);
+ case ITEM_LAYOUT_SPLIT:
+ ui_litem_estimate_split(litem);
+ break;
+ default:
break;
}
+ }
+}
- if(template->color)
- uiBlockSetCol(block, oldcolor);
+static void ui_item_align(uiLayout *litem, int nr)
+{
+ uiItem *item;
+ uiButtonItem *bitem;
- if(layout->dir == UI_LAYOUT_HORIZONTAL)
- layout->x += TEMPLATE_SPACE;
+ for(item=litem->items.first; item; item=item->next) {
+ if(item->type == ITEM_BUTTON) {
+ bitem= (uiButtonItem*)item;
+ if(ui_but_can_align(bitem->but))
+ bitem->but->alignnr= nr;
+ }
else
- layout->y -= TEMPLATE_SPACE;
+ ui_item_align((uiLayout*)item, nr);
+ }
+}
+
+static void ui_item_layout(uiItem *item, int align)
+{
+ uiItem *subitem;
+
+ if(item->type != ITEM_BUTTON) {
+ uiLayout *litem= (uiLayout*)item;
+
+ if(litem->items.first == NULL)
+ return;
+
+ if(litem->align && !align)
+ ui_item_align(litem, ++litem->root->block->alignnr);
+
+ switch(litem->item.type) {
+ case ITEM_LAYOUT_COLUMN:
+ ui_litem_layout_column(litem);
+ break;
+ case ITEM_LAYOUT_COLUMN_FLOW:
+ ui_litem_layout_column_flow(litem);
+ break;
+ case ITEM_LAYOUT_ROW:
+ ui_litem_layout_row(litem);
+ break;
+ case ITEM_LAYOUT_BOX:
+ ui_litem_layout_box(litem);
+ break;
+ case ITEM_LAYOUT_ROOT:
+ ui_litem_layout_root(litem);
+ break;
+ case ITEM_LAYOUT_FREE:
+ ui_litem_layout_free(litem);
+ break;
+ case ITEM_LAYOUT_SPLIT:
+ ui_litem_layout_split(litem);
+ break;
+ default:
+ break;
+ }
+
+ for(subitem=litem->items.first; subitem; subitem=subitem->next)
+ ui_item_layout(subitem, litem->align || align);
}
}
-void ui_layout_end(const bContext *C, uiBlock *block, uiLayout *layout, int *x, int *y)
+static void ui_layout_items(const bContext *C, uiBlock *block, uiLayout *layout)
{
- ui_layout_templates(C, block, layout);
+ ui_item_estimate(&layout->item);
+ ui_item_layout(&layout->item, 0);
+}
+
+static void ui_layout_end(const bContext *C, uiBlock *block, uiLayout *layout, int *x, int *y)
+{
+ if(layout->root->handlefunc)
+ uiBlockSetButmFunc(block, layout->root->handlefunc, layout->root->argv);
+
+ ui_layout_items(C, block, layout);
if(x) *x= layout->x;
if(y) *y= layout->y;
-
- /* XXX temp, migration flag for drawing code */
- uiBlockSetFlag(block, UI_BLOCK_2_50);
}
-void ui_layout_free(uiLayout *layout)
+static void ui_layout_free(uiLayout *layout)
{
- uiTemplate *template;
+ uiItem *item, *next;
- for(template=layout->templates.first; template; template=template->next)
- ui_template_free(template);
+ for(item=layout->items.first; item; item=next) {
+ next= item->next;
+
+ if(item->type == ITEM_BUTTON)
+ MEM_freeN(item);
+ else
+ ui_layout_free((uiLayout*)item);
+ }
- BLI_freelistN(&layout->templates);
MEM_freeN(layout);
}
-uiLayout *uiLayoutBegin(int dir, int x, int y, int w, int h)
+uiLayout *uiBlockLayout(uiBlock *block, int dir, int type, int x, int y, int size, int em, uiStyle *style)
{
uiLayout *layout;
+ uiLayoutRoot *root;
+
+ root= MEM_callocN(sizeof(uiLayoutRoot), "uiLayoutRoot");
+ root->type= type;
+ root->style= style;
+ root->block= block;
+ root->opcontext= WM_OP_INVOKE_REGION_WIN;
layout= MEM_callocN(sizeof(uiLayout), "uiLayout");
- layout->opcontext= WM_OP_INVOKE_REGION_WIN;
- layout->dir= dir;
+ layout->item.type= ITEM_LAYOUT_ROOT;
+
layout->x= x;
layout->y= y;
- layout->w= w;
- layout->h= h;
+ layout->root= root;
+ layout->space= style->templatespace;
+
+ if(type == UI_LAYOUT_MENU)
+ layout->space= 0;
+ if(dir == UI_LAYOUT_HORIZONTAL) {
+ layout->h= size;
+ layout->root->emh= em*UI_UNIT_Y;
+ }
+ else {
+ layout->w= size;
+ layout->root->emw= em*UI_UNIT_X;
+ }
+
+ block->curlayout= layout;
+ root->layout= layout;
+ BLI_addtail(&block->layouts, root);
+
return layout;
}
-void uiLayoutContext(uiLayout *layout, int opcontext)
+uiBlock *uiLayoutBlock(uiLayout *layout)
{
- layout->opcontext= opcontext;
+ return layout->root->block;
}
-void uiLayoutEnd(const bContext *C, uiBlock *block, uiLayout *layout, int *x, int *y)
+void uiBlockSetCurLayout(uiBlock *block, uiLayout *layout)
{
- ui_layout_end(C, block, layout, x, y);
- ui_layout_free(layout);
+ block->curlayout= layout;
}
-/* Utilities */
-
-void uiRegionPanelLayout(const bContext *C, ARegion *ar, int vertical, char *context)
+void ui_layout_add_but(uiLayout *layout, uiBut *but)
{
- uiBlock *block;
- PanelType *pt;
- Panel *panel;
- float col[3];
- int xco, yco, x=0, y=0, w;
-
- // XXX this only hides cruft
-
- /* clear */
- UI_GetThemeColor3fv(TH_HEADER, col);
- glClearColor(col[0], col[1], col[2], 0.0);
- glClear(GL_COLOR_BUFFER_BIT);
-
- /* set view2d view matrix for scrolling (without scrollers) */
- UI_view2d_view_ortho(C, &ar->v2d);
+ uiButtonItem *bitem;
- for(pt= ar->type->paneltypes.first; pt; pt= pt->next) {
- if(context)
- if(!pt->context || strcmp(context, pt->context) != 0)
- continue;
-
- if(pt->draw && (!pt->poll || pt->poll(C))) {
- w= (ar->type->minsizex)? ar->type->minsizex-22: UI_PANEL_WIDTH-22;
-
- block= uiBeginBlock(C, ar, pt->idname, UI_EMBOSS, UI_HELV);
- if(uiNewPanel(C, ar, block, pt->name, pt->name, x, y, w, 0)==0) return;
-
- panel= uiPanelFromBlock(block);
- panel->type= pt;
- panel->layout= uiLayoutBegin(UI_LAYOUT_VERTICAL, x, y, w, 0);
-
- pt->draw(C, panel);
-
- uiLayoutEnd(C, block, panel->layout, &xco, &yco);
- uiEndBlock(C, block);
-
- panel->layout= NULL;
- uiNewPanelHeight(block, y - yco + 6);
+ bitem= MEM_callocN(sizeof(uiButtonItem), "uiButtonItem");
+ bitem->item.type= ITEM_BUTTON;
+ bitem->but= but;
+ BLI_addtail(&layout->items, bitem);
+}
- if(vertical)
- y += yco;
- else
- x += xco;
- }
- }
+void uiLayoutContext(uiLayout *layout, int opcontext)
+{
+ layout->root->opcontext= opcontext;
+}
- uiDrawPanels(C, 1);
- uiMatchPanelsView2d(ar);
-
- /* restore view matrix? */
- UI_view2d_view_restore(C);
+void uiLayoutFunc(uiLayout *layout, uiMenuHandleFunc handlefunc, void *argv)
+{
+ layout->root->handlefunc= handlefunc;
+ layout->root->argv= argv;
}
-void uiRegionHeaderLayout(const bContext *C, ARegion *ar)
+void uiBlockLayoutResolve(const bContext *C, uiBlock *block, int *x, int *y)
{
- uiBlock *block;
- uiLayout *layout;
- HeaderType *ht;
- float col[3];
- int xco, yco;
+ uiLayoutRoot *root;
- // XXX this only hides cruft
-
- /* clear */
- if(ED_screen_area_active(C))
- UI_GetThemeColor3fv(TH_HEADER, col);
- else
- UI_GetThemeColor3fv(TH_HEADERDESEL, col);
-
- glClearColor(col[0], col[1], col[2], 0.0);
- glClear(GL_COLOR_BUFFER_BIT);
-
- /* set view2d view matrix for scrolling (without scrollers) */
- UI_view2d_view_ortho(C, &ar->v2d);
+ if(x) *x= 0;
+ if(y) *y= 0;
- xco= 8;
- yco= 3;
+ block->curlayout= NULL;
- /* draw all headers types */
- for(ht= ar->type->headertypes.first; ht; ht= ht->next) {
- block= uiBeginBlock(C, ar, "header buttons", UI_EMBOSS, UI_HELV);
- layout= uiLayoutBegin(UI_LAYOUT_HORIZONTAL, xco, yco, 0, 24);
+ for(root=block->layouts.first; root; root=root->next) {
+ /* NULL in advance so we don't interfere when adding button */
+ ui_layout_end(C, block, root->layout, x, y);
+ ui_layout_free(root->layout);
+ }
- if(ht->draw)
- ht->draw(C, layout);
+ BLI_freelistN(&block->layouts);
- uiLayoutEnd(C, block, layout, &xco, &yco);
- uiEndBlock(C, block);
- uiDrawBlock(C, block);
+ /* XXX silly trick, interface_templates.c doesn't get linked
+ * because it's not used by other files in this module? */
+ {
+ void ui_template_fix_linking();
+ ui_template_fix_linking();
}
+}
- /* always as last */
- UI_view2d_totRect_set(&ar->v2d, xco+XIC+80, ar->v2d.tot.ymax-ar->v2d.tot.ymin);
-
- /* restore view matrix? */
- UI_view2d_view_restore(C);
+float uiBlockAspect(uiBlock *block)
+{
+ return block->aspect; /* temporary */
}
diff --git a/source/blender/editors/interface/interface_panel.c b/source/blender/editors/interface/interface_panel.c
index 17a58f8b616..539f18c2cd8 100644
--- a/source/blender/editors/interface/interface_panel.c
+++ b/source/blender/editors/interface/interface_panel.c
@@ -20,17 +20,12 @@
* The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
* All rights reserved.
*
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
+ * Contributor(s): Blender Foundation, 2003-2009 full recode.
*
* ***** END GPL LICENSE BLOCK *****
*/
-/*
- a full doc with API notes can be found in bf-blender/blender/doc/interface_API.txt
-
- */
+/* a full doc with API notes can be found in bf-blender/blender/doc/interface_API.txt */
#include <math.h>
#include <stdlib.h>
@@ -61,16 +56,20 @@
#include "ED_screen.h"
#include "UI_interface.h"
-#include "UI_text.h"
#include "UI_view2d.h"
#include "interface_intern.h"
-/* Defines */
+/*********************** defines and structs ************************/
#define ANIMATION_TIME 0.30
#define ANIMATION_INTERVAL 0.02
+#define PNL_LAST_ADDED 1
+#define PNL_ACTIVE 2
+#define PNL_WAS_ACTIVE 4
+#define PNL_ANIM_ALIGN 8
+
typedef enum uiHandlePanelState {
PANEL_STATE_DRAG,
PANEL_STATE_DRAG_SCALE,
@@ -92,15 +91,14 @@ typedef struct uiHandlePanelData {
int startsizex, startsizey;
} uiHandlePanelData;
-static void panel_activate_state(bContext *C, Panel *pa, uiHandlePanelState state);
-
-/* ******************************** */
+static void panel_activate_state(const bContext *C, Panel *pa, uiHandlePanelState state);
-/* temporary code to remove all sbuts stuff from panel code */
+/*********************** space specific code ************************/
+/* temporary code to remove all sbuts stuff from panel code */
static int panel_aligned(ScrArea *sa, ARegion *ar)
{
- if(sa->spacetype==SPACE_BUTS) {
+ if(sa->spacetype==SPACE_BUTS && ar->regiontype == RGN_TYPE_WINDOW) {
SpaceButs *sbuts= sa->spacedata.first;
return sbuts->align;
}
@@ -110,46 +108,63 @@ static int panel_aligned(ScrArea *sa, ARegion *ar)
return 0;
}
-/* ************** panels ************* */
-
-static void copy_panel_offset(Panel *pa, Panel *papar)
+static int panels_re_align(ScrArea *sa, ARegion *ar, Panel **r_pa)
{
- /* with respect to sizes... papar is parent */
+ Panel *pa;
+ int active= 0;
- pa->ofsx= papar->ofsx;
- pa->ofsy= papar->ofsy + papar->sizey-pa->sizey;
-}
+ *r_pa= NULL;
-/* global... but will be NULLed after each 'newPanel' call */
-static char *panel_tabbed=NULL, *group_tabbed=NULL;
+ if(sa->spacetype==SPACE_BUTS && ar->regiontype == RGN_TYPE_WINDOW) {
+ SpaceButs *sbuts= sa->spacedata.first;
-void uiNewPanelTabbed(char *panelname, char *groupname)
-{
- panel_tabbed= panelname;
- group_tabbed= groupname;
-}
+ if(sbuts->align)
+ if(sbuts->re_align || sbuts->mainbo!=sbuts->mainb || sbuts->tabo!=sbuts->tab[sbuts->mainb])
+ return 1;
+ }
+ else if(ar->regiontype==RGN_TYPE_UI)
+ return 1;
-/* another global... */
-static int pnl_control= UI_PNL_TRANSP;
+ /* in case panel is added or disappears */
+ for(pa=ar->panels.first; pa; pa=pa->next) {
+ if((pa->runtime_flag & PNL_WAS_ACTIVE) && !(pa->runtime_flag & PNL_ACTIVE))
+ return 1;
+ if(!(pa->runtime_flag & PNL_WAS_ACTIVE) && (pa->runtime_flag & PNL_ACTIVE))
+ return 1;
+ if(pa->activedata)
+ active= 1;
+ }
-void uiPanelControl(int control)
-{
- pnl_control= control;
+ /* in case we need to do an animation (size changes) */
+ for(pa=ar->panels.first; pa; pa=pa->next) {
+ if(pa->runtime_flag & PNL_ANIM_ALIGN) {
+ if(!active)
+ *r_pa= pa;
+ return 1;
+ }
+ }
+
+ return 0;
}
-/* another global... */
-static int pnl_handler= 0;
+/****************************** panels ******************************/
-void uiSetPanelHandler(int handler)
+static void ui_panel_copy_offset(Panel *pa, Panel *papar)
{
- pnl_handler= handler;
+ /* with respect to sizes... papar is parent */
+
+ pa->ofsx= papar->ofsx;
+ pa->ofsy= papar->ofsy + papar->sizey-pa->sizey;
}
-/* ofsx/ofsy only used for new panel definitions */
-/* return 1 if visible (create buttons!) */
-int uiNewPanel(const bContext *C, ARegion *ar, uiBlock *block, char *panelname, char *tabname, int ofsx, int ofsy, int sizex, int sizey)
+Panel *uiBeginPanel(ARegion *ar, uiBlock *block, PanelType *pt, int *open)
{
- Panel *pa;
+ uiStyle *style= U.uistyles.first;
+ Panel *pa, *patab, *palast, *panext;
+ char *panelname= pt->label;
+ char *tabname= pt->label;
+ char *hookname= NULL;
+ int newpanel;
/* check if Panel exists, then use that one */
for(pa=ar->panels.first; pa; pa=pa->next)
@@ -157,38 +172,33 @@ int uiNewPanel(const bContext *C, ARegion *ar, uiBlock *block, char *panelname,
if(strncmp(pa->tabname, tabname, UI_MAX_NAME_STR)==0)
break;
- if(pa) {
- /* scale correction */
- if(pa->control & UI_PNL_SCALE);
- else {
- pa->sizex= sizex;
- if(pa->sizey != sizey) {
- pa->ofsy+= (pa->sizey - sizey); // check uiNewPanelHeight()
- pa->sizey= sizey;
- }
- }
+ newpanel= (pa == NULL);
+
+ if(!newpanel) {
+ pa->type= pt;
}
else {
/* new panel */
pa= MEM_callocN(sizeof(Panel), "new panel");
- BLI_addtail(&ar->panels, pa);
- strncpy(pa->panelname, panelname, UI_MAX_NAME_STR);
- strncpy(pa->tabname, tabname, UI_MAX_NAME_STR);
+ pa->type= pt;
+ BLI_strncpy(pa->panelname, panelname, UI_MAX_NAME_STR);
+ BLI_strncpy(pa->tabname, tabname, UI_MAX_NAME_STR);
- pa->ofsx= ofsx & ~(PNL_GRID-1);
- pa->ofsy= ofsy & ~(PNL_GRID-1);
- pa->sizex= sizex;
- pa->sizey= sizey;
+ pa->ofsx= 0;
+ pa->ofsy= style->panelouter;
+ pa->sizex= 0;
+ pa->sizey= 0;
+
+ BLI_addtail(&ar->panels, pa);
/* make new Panel tabbed? */
- if(panel_tabbed && group_tabbed) {
- Panel *papar;
- for(papar= ar->panels.first; papar; papar= papar->next) {
- if(papar->active && papar->paneltab==NULL) {
- if( strncmp(panel_tabbed, papar->panelname, UI_MAX_NAME_STR)==0) {
- if( strncmp(group_tabbed, papar->tabname, UI_MAX_NAME_STR)==0) {
- pa->paneltab= papar;
- copy_panel_offset(pa, papar);
+ if(hookname) {
+ for(patab= ar->panels.first; patab; patab= patab->next) {
+ if((patab->runtime_flag & PNL_ACTIVE) && patab->paneltab==NULL) {
+ if(strncmp(hookname, patab->panelname, UI_MAX_NAME_STR)==0) {
+ if(strncmp(tabname, patab->tabname, UI_MAX_NAME_STR)==0) {
+ pa->paneltab= patab;
+ ui_panel_copy_offset(pa, patab);
break;
}
}
@@ -197,14 +207,58 @@ int uiNewPanel(const bContext *C, ARegion *ar, uiBlock *block, char *panelname,
}
}
+ /* if a new panel is added, we insert it right after the panel
+ * that was last added. this way new panels are inserted in the
+ * right place between versions */
+ for(palast=ar->panels.first; palast; palast=palast->next)
+ if(palast->runtime_flag & PNL_LAST_ADDED)
+ break;
+
+ if(newpanel) {
+ pa->sortorder= (palast)? palast->sortorder+1: 0;
+
+ for(panext=ar->panels.first; panext; panext=panext->next)
+ if(panext != pa && panext->sortorder >= pa->sortorder)
+ panext->sortorder++;
+ }
+
+ if(palast)
+ palast->runtime_flag &= ~PNL_LAST_ADDED;
+
+ /* assign to block */
block->panel= pa;
- block->handler= pnl_handler;
- pa->active= 1;
- pa->control= pnl_control;
+ pa->runtime_flag |= PNL_ACTIVE|PNL_LAST_ADDED;
+
+ *open= 0;
+
+ if(pa->paneltab) return pa;
+ if(pa->flag & PNL_CLOSED) return pa;
+
+ *open= 1;
+ pa->drawname[0]= 0; /* otherwise closes panels show wrong title */
+ return pa;
+}
+
+void uiEndPanel(uiBlock *block, int width, int height)
+{
+ Panel *pa= block->panel;
+
+ if(pa->sizex != width || pa->sizey != height) {
+ pa->runtime_flag |= PNL_ANIM_ALIGN;
+ pa->ofsy += pa->sizey-height;
+ }
+
+ pa->sizex= width;
+ pa->sizey= height;
+}
+
+#if 0
+void uiPanelToMouse(const bContext *C, Panel *pa)
+{
/* global control over this feature; UI_PNL_TO_MOUSE only called for hotkey panels */
if(U.uiflag & USER_PANELPINNED);
- else if(pnl_control & UI_PNL_TO_MOUSE) {
+ else if(pa->control & UI_PNL_TO_MOUSE) {
int mx, my;
mx= CTX_wm_window(C)->eventstate->x;
@@ -216,51 +270,13 @@ int uiNewPanel(const bContext *C, ARegion *ar, uiBlock *block, char *panelname,
if(pa->flag & PNL_CLOSED) pa->flag &= ~PNL_CLOSED;
}
- if(pnl_control & UI_PNL_UNSTOW) {
+ if(pa->control & UI_PNL_UNSTOW) {
if(pa->flag & PNL_CLOSEDY) {
pa->flag &= ~PNL_CLOSED;
}
}
-
- /* clear ugly globals */
- panel_tabbed= group_tabbed= NULL;
- pnl_handler= 0;
- pnl_control= UI_PNL_TRANSP; // back to default
-
- if(pa->paneltab) return 0;
- if(pa->flag & PNL_CLOSED) return 0;
-
- /* the 'return 0' above makes this to be in end. otherwise closes panels show wrong title */
- pa->drawname[0]= 0;
-
- return 1;
-}
-
-Panel *uiPanelFromBlock(uiBlock *block)
-{
- return block->panel;
-}
-
-void uiFreePanels(ListBase *lb)
-{
- BLI_freelistN(lb);
-}
-
-void uiNewPanelHeight(uiBlock *block, int sizey)
-{
- if(sizey<0) sizey= 0;
-
- if(block->panel) {
- block->panel->ofsy+= (block->panel->sizey - sizey);
- block->panel->sizey= sizey;
- }
-}
-
-void uiNewPanelTitle(uiBlock *block, char *str)
-{
- if(block->panel)
- BLI_strncpy(block->panel->drawname, str, UI_MAX_NAME_STR);
}
+#endif
static int panel_has_tabs(ARegion *ar, Panel *panel)
{
@@ -269,7 +285,7 @@ static int panel_has_tabs(ARegion *ar, Panel *panel)
if(panel==NULL) return 0;
while(pa) {
- if(pa->active && pa->paneltab==panel) {
+ if((pa->runtime_flag & PNL_ACTIVE) && pa->paneltab==panel) {
return 1;
}
pa= pa->next;
@@ -277,124 +293,28 @@ static int panel_has_tabs(ARegion *ar, Panel *panel)
return 0;
}
-static void ui_scale_panel_block(uiBlock *block)
+static void ui_offset_panel_block(uiBlock *block)
{
+ uiStyle *style= U.uistyles.first;
uiBut *but;
- float facx= 1.0, facy= 1.0;
- int centerx= 0, topy=0, tabsy=0;
-
- if(block->panel==NULL) return;
+ int ofsy;
- if(block->autofill) ui_autofill(block);
- /* buttons min/max centered, offset calculated */
+ /* compute bounds and offset */
ui_bounds_block(block);
- if( block->maxx-block->minx > block->panel->sizex - 2*PNL_SAFETY ) {
- facx= (block->panel->sizex - (2*PNL_SAFETY))/( block->maxx-block->minx );
- }
- else centerx= (block->panel->sizex-( block->maxx-block->minx ) - 2*PNL_SAFETY)/2;
-
- // tabsy= PNL_HEADER*panel_has_tabs(block->panel);
- if( (block->maxy-block->miny) > block->panel->sizey - 2*PNL_SAFETY - tabsy) {
- facy= (block->panel->sizey - (2*PNL_SAFETY) - tabsy)/( block->maxy-block->miny );
- }
- else topy= (block->panel->sizey- 2*PNL_SAFETY - tabsy) - ( block->maxy-block->miny ) ;
-
- but= block->buttons.first;
- while(but) {
- but->x1= PNL_SAFETY+centerx+ facx*(but->x1-block->minx);
- but->y1= PNL_SAFETY+topy + facy*(but->y1-block->miny);
- but->x2= PNL_SAFETY+centerx+ facx*(but->x2-block->minx);
- but->y2= PNL_SAFETY+topy + facy*(but->y2-block->miny);
- if(facx!=1.0) ui_check_but(but); /* for strlen */
- but= but->next;
+ ofsy= block->panel->sizey - style->panelspace;
+
+ for(but= block->buttons.first; but; but=but->next) {
+ but->y1 += ofsy;
+ but->y2 += ofsy;
}
block->maxx= block->panel->sizex;
block->maxy= block->panel->sizey;
block->minx= block->miny= 0.0;
-
-}
-
-// for 'home' key
-void uiSetPanelsView2d(ARegion *ar)
-{
- Panel *pa;
- uiBlock *block;
- View2D *v2d;
- float minx=10000, maxx= -10000, miny=10000, maxy= -10000;
- int done=0;
-
- v2d= &ar->v2d;
-
- for(pa= ar->panels.first; pa; pa=pa->next) {
- if(pa->active && pa->paneltab==NULL) {
- done= 1;
- if(pa->ofsx < minx) minx= pa->ofsx;
- if(pa->ofsx+pa->sizex > maxx) maxx= pa->ofsx+pa->sizex;
- if(pa->ofsy < miny) miny= pa->ofsy;
- if(pa->ofsy+pa->sizey+PNL_HEADER > maxy) maxy= pa->ofsy+pa->sizey+PNL_HEADER;
- }
- }
-
- if(done) {
- v2d->tot.xmin= minx-PNL_DIST;
- v2d->tot.xmax= maxx+PNL_DIST;
- v2d->tot.ymin= miny-PNL_DIST;
- v2d->tot.ymax= maxy+PNL_DIST;
- }
- else {
- v2d->tot.xmin= 0;
- v2d->tot.xmax= 1280;
- v2d->tot.ymin= 0;
- v2d->tot.ymax= 228;
-
- /* no panels, but old 'loose' buttons, as in old logic editor */
- for(block= ar->uiblocks.first; block; block= block->next) {
- //XXX 2.50 if(block->win==sa->win) {
- if(block->minx < v2d->tot.xmin) v2d->tot.xmin= block->minx;
- if(block->maxx > v2d->tot.xmax) v2d->tot.xmax= block->maxx;
- if(block->miny < v2d->tot.ymin) v2d->tot.ymin= block->miny;
- if(block->maxy > v2d->tot.ymax) v2d->tot.ymax= block->maxy;
- //XXX }
- }
- }
}
-// make sure the panels are not outside 'tot' area
-void uiMatchPanelsView2d(ARegion *ar)
-{
- Panel *pa;
- uiBlock *block;
- View2D *v2d;
- int done=0;
-
- v2d= &ar->v2d;
-
- for(pa= ar->panels.first; pa; pa=pa->next) {
- if(pa->active && pa->paneltab==NULL) {
- done= 1;
- if(pa->ofsx < v2d->tot.xmin) v2d->tot.xmin= pa->ofsx;
- if(pa->ofsx+pa->sizex > v2d->tot.xmax)
- v2d->tot.xmax= pa->ofsx+pa->sizex;
- if(pa->ofsy < v2d->tot.ymin) v2d->tot.ymin= pa->ofsy;
- if(pa->ofsy+pa->sizey+PNL_HEADER > v2d->tot.ymax)
- v2d->tot.ymax= pa->ofsy+pa->sizey+PNL_HEADER;
- }
- }
-
- if(done==0) {
- /* no panels, but old 'loose' buttons, as in old logic editor */
- for(block= ar->uiblocks.first; block; block= block->next) {
- //XXX 2.50 if(block->win==sa->win) {
- if(block->minx < v2d->tot.xmin) v2d->tot.xmin= block->minx;
- if(block->maxx > v2d->tot.xmax) v2d->tot.xmax= block->maxx;
- if(block->miny < v2d->tot.ymin) v2d->tot.ymin= block->miny;
- if(block->maxy > v2d->tot.ymax) v2d->tot.ymax= block->maxy;
- //XXX }
- }
- }
-}
+/**************************** drawing *******************************/
/* extern used by previewrender */
void uiPanelPush(uiBlock *block)
@@ -410,50 +330,27 @@ void uiPanelPop(uiBlock *block)
glPopMatrix();
}
-uiBlock *uiFindOpenPanelBlockName(ListBase *lb, char *name)
+/* triangle 'icon' for panel header */
+void ui_draw_tria_icon(float x, float y, char dir)
{
- uiBlock *block;
-
- for(block= lb->first; block; block= block->next) {
- if(block->panel && block->panel->active && block->panel->paneltab==NULL) {
- if(block->panel->flag & PNL_CLOSED);
- else if(strncmp(name, block->panel->panelname, UI_MAX_NAME_STR)==0) break;
- }
+ if(dir=='h') {
+ ui_draw_anti_tria(x-1, y, x-1, y+11.0, x+9, y+6.25);
+ }
+ else {
+ ui_draw_anti_tria(x-3, y+10, x+8-1, y+10, x+4.25-2, y);
}
- return block;
-}
-
-static void ui_draw_anti_tria(float x1, float y1, float x2, float y2, float x3, float y3)
-{
- // we draw twice, anti polygons not widely supported...
- glBegin(GL_POLYGON);
- glVertex2f(x1, y1);
- glVertex2f(x2, y2);
- glVertex2f(x3, y3);
- glEnd();
-
- /* set antialias line */
- glEnable( GL_LINE_SMOOTH );
- glEnable( GL_BLEND );
-
- glBegin(GL_LINE_LOOP);
- glVertex2f(x1, y1);
- glVertex2f(x2, y2);
- glVertex2f(x3, y3);
- glEnd();
-
- glDisable( GL_LINE_SMOOTH );
- glDisable( GL_BLEND );
}
-/* triangle 'icon' for panel header */
-void ui_draw_tria_icon(float x, float y, float aspect, char dir)
+/* triangle 'icon' inside rect */
+void ui_draw_tria_rect(rctf *rect, char dir)
{
if(dir=='h') {
- ui_draw_anti_tria( x, y+1, x, y+10.0, x+8, y+6.25);
+ float half= 0.5f*(rect->ymax - rect->ymin);
+ ui_draw_anti_tria(rect->xmin, rect->ymin, rect->xmin, rect->ymax, rect->xmax, rect->ymin+half);
}
else {
- ui_draw_anti_tria( x-2, y+9, x+8-2, y+9, x+4.25-2, y+1);
+ float half= 0.5f*(rect->xmax - rect->xmin);
+ ui_draw_anti_tria(rect->xmin, rect->ymax, rect->xmax, rect->ymax, rect->xmin+half, rect->ymin);
}
}
@@ -461,8 +358,8 @@ void ui_draw_anti_x(float x1, float y1, float x2, float y2)
{
/* set antialias line */
- glEnable( GL_LINE_SMOOTH );
- glEnable( GL_BLEND );
+ glEnable(GL_LINE_SMOOTH);
+ glEnable(GL_BLEND);
glLineWidth(2.0);
@@ -471,367 +368,264 @@ void ui_draw_anti_x(float x1, float y1, float x2, float y2)
glLineWidth(1.0);
- glDisable( GL_LINE_SMOOTH );
- glDisable( GL_BLEND );
+ glDisable(GL_LINE_SMOOTH);
+ glDisable(GL_BLEND);
}
/* x 'icon' for panel header */
static void ui_draw_x_icon(float x, float y)
{
- UI_ThemeColor(TH_TEXT_HI);
- ui_draw_anti_x( x, y, x+9.375, y+9.375);
+ ui_draw_anti_x(x, y, x+9.375, y+9.375);
}
-#if 0
-static void ui_set_panel_pattern(char dir)
+#define PNL_ICON 20
+
+static void ui_draw_panel_scalewidget(rcti *rect)
{
- static int firsttime= 1;
- static GLubyte path[4*32], patv[4*32];
- int a,b,i=0;
-
- if(firsttime) {
- firsttime= 0;
- for(a=0; a<128; a++) patv[a]= 0x33;
- for(a=0; a<8; a++) {
- for(b=0; b<4; b++) path[i++]= 0xff; /* 1 scanlines */
- for(b=0; b<12; b++) path[i++]= 0x0; /* 3 lines */
- }
- }
- glEnable(GL_POLYGON_STIPPLE);
- if(dir=='h') glPolygonStipple(path);
- else glPolygonStipple(patv);
+ float xmin, xmax, dx;
+ float ymin, ymax, dy;
+
+ xmin= rect->xmax-PNL_HEADER+2;
+ xmax= rect->xmax-3;
+ ymin= rect->ymin+3;
+ ymax= rect->ymin+PNL_HEADER-2;
+
+ dx= 0.5f*(xmax-xmin);
+ dy= 0.5f*(ymax-ymin);
+
+ glEnable(GL_BLEND);
+ glColor4ub(255, 255, 255, 50);
+ fdrawline(xmin, ymin, xmax, ymax);
+ fdrawline(xmin+dx, ymin, xmax, ymax-dy);
+
+ glColor4ub(0, 0, 0, 50);
+ fdrawline(xmin, ymin+1, xmax, ymax+1);
+ fdrawline(xmin+dx, ymin+1, xmax, ymax-dy+1);
+ glDisable(GL_BLEND);
}
-#endif
-static char *ui_block_cut_str(uiBlock *block, char *str, short okwidth)
+static void ui_draw_panel_dragwidget(rctf *rect)
{
- short width, ofs=strlen(str);
- static char str1[128];
+ float xmin, xmax, dx;
+ float ymin, ymax, dy;
- if(ofs>127) return str;
+ xmin= rect->xmin;
+ xmax= rect->xmax;
+ ymin= rect->ymin;
+ ymax= rect->ymax;
- width= block->aspect*UI_GetStringWidth(block->curfont, str, ui_translate_buttons());
-
- if(width <= okwidth) return str;
- strcpy(str1, str);
+ dx= 0.333f*(xmax-xmin);
+ dy= 0.333f*(ymax-ymin);
- while(width > okwidth && ofs>0) {
- ofs--;
- str1[ofs]= 0;
-
- width= block->aspect*UI_GetStringWidth(block->curfont, str1, 0);
-
- if(width < 10) break;
- }
- return str1;
+ glEnable(GL_BLEND);
+ glColor4ub(255, 255, 255, 50);
+ fdrawline(xmin, ymax, xmax, ymin);
+ fdrawline(xmin+dx, ymax, xmax, ymin+dy);
+ fdrawline(xmin+2*dx, ymax, xmax, ymin+2*dy);
+
+ glColor4ub(0, 0, 0, 50);
+ fdrawline(xmin, ymax+1, xmax, ymin+1);
+ fdrawline(xmin+dx, ymax+1, xmax, ymin+dy+1);
+ fdrawline(xmin+2*dx, ymax+1, xmax, ymin+2*dy+1);
+ glDisable(GL_BLEND);
}
-#define PNL_ICON 20
-#define PNL_DRAGGER 20
-
-
-static void ui_draw_panel_header(ARegion *ar, uiBlock *block)
+static void ui_draw_aligned_panel_header(ARegion *ar, uiStyle *style, uiBlock *block, rcti *rect)
{
- Panel *pa, *panel= block->panel;
+ Panel *panel= block->panel;
+ Panel *pa;
+ rcti hrect;
float width;
int a, nr= 1, pnl_icons;
char *activename= panel->drawname[0]?panel->drawname:panel->panelname;
- char *panelname, *str;
+ char *panelname;
/* count */
for(pa= ar->panels.first; pa; pa=pa->next)
- if(pa->active)
+ if(pa->runtime_flag & PNL_ACTIVE)
if(pa->paneltab==panel)
nr++;
-
- pnl_icons= PNL_ICON+8;
- if(panel->control & UI_PNL_CLOSE) pnl_icons+= PNL_ICON;
-
+
+ /* + 0.001f to avoid flirting with float inaccuracy */
+ if(panel->control & UI_PNL_CLOSE) pnl_icons=(panel->labelofs+2*PNL_ICON+5)/block->aspect + 0.001f;
+ else pnl_icons= (panel->labelofs+PNL_ICON+5)/block->aspect + 0.001f;
+
if(nr==1) {
- // full header
- UI_ThemeColorShade(TH_HEADER, -30);
- uiSetRoundBox(3);
- uiRoundBox(block->minx, block->maxy, block->maxx, block->maxy+PNL_HEADER, 8);
-
+
/* active tab */
/* draw text label */
- UI_ThemeColor(TH_TEXT_HI);
- ui_rasterpos_safe(4.0f+block->minx+pnl_icons, block->maxy+5.0f, block->aspect);
- UI_DrawString(block->curfont, activename, ui_translate_buttons());
+ UI_ThemeColor(TH_TITLE);
+
+ hrect= *rect;
+ hrect.xmin= rect->xmin+pnl_icons;
+ uiStyleFontDraw(&style->paneltitle, &hrect, activename);
+
return;
}
- // tabbed, full header brighter
- //UI_ThemeColorShade(TH_HEADER, 0);
- //uiSetRoundBox(3);
- //uiRoundBox(block->minx, block->maxy, block->maxx, block->maxy+PNL_HEADER, 8);
-
a= 0;
- width= (panel->sizex - 3 - pnl_icons - PNL_ICON)/nr;
+ width= (rect->xmax-rect->xmin - 3 - pnl_icons - PNL_ICON)/nr;
for(pa= ar->panels.first; pa; pa=pa->next) {
panelname= pa->drawname[0]?pa->drawname:pa->panelname;
- if(a == 0)
- activename= panelname;
- if(pa->active==0);
- else if(pa==panel) {
+ if((pa->runtime_flag & PNL_ACTIVE) && (pa==panel || pa->paneltab==panel)) {
+ float col[3];
+
+ UI_GetThemeColor3fv(TH_TITLE, col);
+
/* active tab */
-
- /* draw the active tab */
- uiSetRoundBox(3);
- UI_ThemeColorShade(TH_HEADER, -3);
- uiRoundBox(2+pnl_icons+a*width, panel->sizey-1, pnl_icons+(a+1)*width, panel->sizey+PNL_HEADER-3, 8);
-
- /* draw the active text label */
- UI_ThemeColor(TH_TEXT);
- ui_rasterpos_safe(16+pnl_icons+a*width, panel->sizey+4, block->aspect);
- if(panelname != activename && strstr(panelname, activename) == panelname)
- str= ui_block_cut_str(block, panelname+strlen(activename), (short)(width-10));
+ if(pa==panel)
+ glColor4f(col[0], col[1], col[2], 1.0f);
else
- str= ui_block_cut_str(block, panelname, (short)(width-10));
- UI_DrawString(block->curfont, str, ui_translate_buttons());
-
- a++;
- }
- else if(pa->paneltab==panel) {
- /* draw an inactive tab */
- uiSetRoundBox(3);
- UI_ThemeColorShade(TH_HEADER, -60);
- uiRoundBox(2+pnl_icons+a*width, panel->sizey, pnl_icons+(a+1)*width, panel->sizey+PNL_HEADER-3, 8);
+ glColor4f(col[0], col[1], col[2], 0.5f);
+
+ hrect= *rect;
+ hrect.xmin= rect->xmin+pnl_icons + a*width;
+ hrect.xmax= hrect.xmin + width;
+ uiStyleFontDraw(&style->paneltitle, &hrect, panelname);
- /* draw an inactive tab label */
- UI_ThemeColorShade(TH_TEXT_HI, -40);
- ui_rasterpos_safe(16+pnl_icons+a*width, panel->sizey+4, block->aspect);
- if(panelname != activename && strstr(panelname, activename) == panelname)
- str= ui_block_cut_str(block, panelname+strlen(activename), (short)(width-10));
- else
- str= ui_block_cut_str(block, panelname, (short)(width-10));
- UI_DrawString(block->curfont, str, ui_translate_buttons());
-
a++;
}
}
-
- // dragger
- /*
- uiSetRoundBox(15);
- UI_ThemeColorShade(TH_HEADER, -70);
- uiRoundBox(panel->sizex-PNL_ICON+5, panel->sizey+5, panel->sizex-5, panel->sizey+PNL_HEADER-5, 5);
- */
-
}
-static void ui_draw_panel_scalewidget(uiBlock *block)
+static void rectf_scale(rctf *rect, float scale)
{
- float xmin, xmax, dx;
- float ymin, ymax, dy;
-
- xmin= block->maxx-PNL_HEADER+2;
- xmax= block->maxx-3;
- ymin= block->miny+3;
- ymax= block->miny+PNL_HEADER-2;
-
- dx= 0.5f*(xmax-xmin);
- dy= 0.5f*(ymax-ymin);
-
- glEnable(GL_BLEND);
- glColor4ub(255, 255, 255, 50);
- fdrawline(xmin, ymin, xmax, ymax);
- fdrawline(xmin+dx, ymin, xmax, ymax-dy);
-
- glColor4ub(0, 0, 0, 50);
- fdrawline(xmin, ymin+block->aspect, xmax, ymax+block->aspect);
- fdrawline(xmin+dx, ymin+block->aspect, xmax, ymax-dy+block->aspect);
- glDisable(GL_BLEND);
+ float centx= 0.5f*(rect->xmin+rect->xmax);
+ float centy= 0.5f*(rect->ymin+rect->ymax);
+ float sizex= 0.5f*scale*(rect->xmax - rect->xmin);
+ float sizey= 0.5f*scale*(rect->ymax - rect->ymin);
+
+ rect->xmin= centx - sizex;
+ rect->xmax= centx + sizex;
+ rect->ymin= centy - sizey;
+ rect->ymax= centy + sizey;
}
-void ui_draw_panel(ARegion *ar, uiBlock *block)
+/* panel integrated in buttonswindow, tool/property lists etc */
+void ui_draw_aligned_panel(ARegion *ar, uiStyle *style, uiBlock *block, rcti *rect)
{
- Panel *panel= block->panel;
+ Panel *panel= block->panel, *prev;
+ rcti headrect;
+ rctf itemrect;
int ofsx;
- char *panelname= panel->drawname[0]?panel->drawname:panel->panelname;
if(panel->paneltab) return;
+ /* calculate header rect */
+ /* + 0.001f to prevent flicker due to float inaccuracy */
+ headrect= *rect;
+ headrect.ymin= headrect.ymax;
+ headrect.ymax= headrect.ymin + floor(PNL_HEADER/block->aspect + 0.001f);
+
+ /* divider only when there's a previous panel */
+ prev= panel->prev;
+ while(prev) {
+ if(prev->runtime_flag & PNL_ACTIVE) break;
+ prev= prev->prev;
+ }
+
+ if(panel->sortorder != 0) {
+ float minx= rect->xmin+5.0f/block->aspect;
+ float maxx= rect->xmax-5.0f/block->aspect;
+ float y= headrect.ymax;
+
+ glEnable(GL_BLEND);
+ glColor4f(0.0f, 0.0f, 0.0f, 0.5f);
+ fdrawline(minx, y+1, maxx, y+1);
+ glColor4f(1.0f, 1.0f, 1.0f, 0.25f);
+ fdrawline(minx, y, maxx, y);
+ glDisable(GL_BLEND);
+ }
+
+ /* title */
+ if(!(panel->flag & PNL_CLOSEDX)) {
+ ui_draw_aligned_panel_header(ar, style, block, &headrect);
+
+ /* itemrect smaller */
+ itemrect.xmax= headrect.xmax - 5.0f/block->aspect;
+ itemrect.xmin= itemrect.xmax - (headrect.ymax-headrect.ymin);
+ itemrect.ymin= headrect.ymin;
+ itemrect.ymax= headrect.ymax;
+ rectf_scale(&itemrect, 0.8f);
+ ui_draw_panel_dragwidget(&itemrect);
+ }
+
/* if the panel is minimized vertically:
- * (------)
- */
+ * (------)
+ */
if(panel->flag & PNL_CLOSEDY) {
- /* draw a little rounded box, the size of the header */
- uiSetRoundBox(15);
- UI_ThemeColorShade(TH_HEADER, -30);
- uiRoundBox(block->minx, block->maxy, block->maxx, block->maxy+PNL_HEADER, 8);
- /* title */
- ofsx= PNL_ICON+8;
- if(panel->control & UI_PNL_CLOSE) ofsx+= PNL_ICON;
- UI_ThemeColor(TH_TEXT_HI);
- ui_rasterpos_safe(4+block->minx+ofsx, block->maxy+5, block->aspect);
- UI_DrawString(block->curfont, panelname, ui_translate_buttons());
-
- /* border */
- if(panel->flag & PNL_SELECT) {
- UI_ThemeColorShade(TH_HEADER, -120);
- uiRoundRect(block->minx, block->maxy, block->maxx, block->maxy+PNL_HEADER, 8);
- }
+
/* if it's being overlapped by a panel being dragged */
if(panel->flag & PNL_OVERLAP) {
UI_ThemeColor(TH_TEXT_HI);
- uiRoundRect(block->minx, block->maxy, block->maxx, block->maxy+PNL_HEADER, 8);
+ uiRoundRect(rect->xmin, rect->ymax, rect->xmax, rect->ymax+PNL_HEADER, 8);
}
-
+
}
- /* if the panel is minimized horizontally:
- * /-\
- * |
- * |
- * |
- * \_/
- */
else if(panel->flag & PNL_CLOSEDX) {
- char str[4];
- int a, end, ofs;
- /* draw a little rounded box, the size of the header, rotated 90 deg */
- uiSetRoundBox(15);
- UI_ThemeColorShade(TH_HEADER, -30);
- uiRoundBox(block->minx, block->miny, block->minx+PNL_HEADER, block->maxy+PNL_HEADER, 8);
-
- /* title, only the initial character for now */
- UI_ThemeColor(TH_TEXT_HI);
- str[1]= 0;
- end= strlen(panelname);
- ofs= 20;
- for(a=0; a<end; a++) {
- str[0]= panelname[a];
- if( isupper(str[0]) ) {
- ui_rasterpos_safe(block->minx+5, block->maxy-ofs, block->aspect);
- UI_DrawString(block->curfont, str, 0);
- ofs+= 15;
- }
- }
-
- /* border */
- if(panel->flag & PNL_SELECT) {
- UI_ThemeColorShade(TH_HEADER, -120);
- uiRoundRect(block->minx, block->miny, block->minx+PNL_HEADER, block->maxy+PNL_HEADER, 8);
- }
- if(panel->flag & PNL_OVERLAP) {
- UI_ThemeColor(TH_TEXT_HI);
- uiRoundRect(block->minx, block->miny, block->minx+PNL_HEADER, block->maxy+PNL_HEADER, 8);
- }
-
}
/* an open panel */
else {
- /* all panels now... */
- if(panel->control & UI_PNL_SOLID) {
- UI_ThemeColorShade(TH_HEADER, -30);
-
- uiSetRoundBox(3);
- uiRoundBox(block->minx, block->maxy, block->maxx, block->maxy+PNL_HEADER, 8);
-
- glEnable(GL_BLEND);
- UI_ThemeColor4(TH_PANEL);
-
- uiSetRoundBox(12);
- /* bad code... but its late :) */
- if(strcmp(block->name, "image_panel_preview")==0)
- uiRoundRect(block->minx, block->miny, block->maxx, block->maxy, 8);
- else
- uiRoundBox(block->minx, block->miny, block->maxx, block->maxy, 8);
-
- // glRectf(block->minx, block->miny, block->maxx, block->maxy);
-
- /* shadow */
- /*
- glColor4ub(0, 0, 0, 40);
-
- fdrawline(block->minx+2, block->miny-1, block->maxx+1, block->miny-1);
- fdrawline(block->maxx+1, block->miny-1, block->maxx+1, block->maxy+7);
-
- glColor4ub(0, 0, 0, 10);
-
- fdrawline(block->minx+3, block->miny-2, block->maxx+2, block->miny-2);
- fdrawline(block->maxx+2, block->miny-2, block->maxx+2, block->maxy+6);
-
- */
-
- glDisable(GL_BLEND);
- }
- /* floating panel */
- else if(panel->control & UI_PNL_TRANSP) {
- UI_ThemeColorShade(TH_HEADER, -30);
- uiSetRoundBox(3);
- uiRoundBox(block->minx, block->maxy, block->maxx, block->maxy+PNL_HEADER, 8);
-
- glEnable(GL_BLEND);
- UI_ThemeColor4(TH_PANEL);
- glRectf(block->minx, block->miny, block->maxx, block->maxy);
-
- glDisable(GL_BLEND);
- }
- /* draw the title, tabs, etc in the header */
- ui_draw_panel_header(ar, block);
-
/* in some occasions, draw a border */
if(panel->flag & PNL_SELECT) {
if(panel->control & UI_PNL_SOLID) uiSetRoundBox(15);
else uiSetRoundBox(3);
- UI_ThemeColorShade(TH_HEADER, -120);
- uiRoundRect(block->minx, block->miny, block->maxx, block->maxy+PNL_HEADER, 8);
+ UI_ThemeColorShade(TH_BACK, -120);
+ uiRoundRect(rect->xmin, rect->ymin, rect->xmax, headrect.ymax+1, 8);
}
if(panel->flag & PNL_OVERLAP) {
if(panel->control & UI_PNL_SOLID) uiSetRoundBox(15);
else uiSetRoundBox(3);
UI_ThemeColor(TH_TEXT_HI);
- uiRoundRect(block->minx, block->miny, block->maxx, block->maxy+PNL_HEADER, 8);
+ uiRoundRect(rect->xmin, rect->ymin, rect->xmax, headrect.ymax+1, 8);
}
if(panel->control & UI_PNL_SCALE)
- ui_draw_panel_scalewidget(block);
-
- /* and a soft shadow-line for now */
- /*
- glEnable( GL_BLEND );
- glColor4ub(0, 0, 0, 50);
- fdrawline(block->maxx, block->miny, block->maxx, block->maxy+PNL_HEADER/2);
- fdrawline(block->minx, block->miny, block->maxx, block->miny);
- glDisable(GL_BLEND);
- */
-
+ ui_draw_panel_scalewidget(rect);
}
/* draw optional close icon */
ofsx= 6;
if(panel->control & UI_PNL_CLOSE) {
-
- ui_draw_x_icon(block->minx+2+ofsx, block->maxy+5);
+
+ UI_ThemeColor(TH_TEXT);
+ ui_draw_x_icon(rect->xmin+2+ofsx, rect->ymax+2);
ofsx= 22;
}
-
+
/* draw collapse icon */
+ UI_ThemeColor(TH_TEXT);
+
+ /* itemrect smaller */
+ itemrect.xmin= headrect.xmin + 5.0f/block->aspect;
+ itemrect.xmax= itemrect.xmin + (headrect.ymax-headrect.ymin);
+ itemrect.ymin= headrect.ymin;
+ itemrect.ymax= headrect.ymax;
- UI_ThemeColor(TH_TEXT_HI);
+ rectf_scale(&itemrect, 0.5f);
if(panel->flag & PNL_CLOSEDY)
- ui_draw_tria_icon(block->minx+6+ofsx, block->maxy+5, block->aspect, 'h');
+ ui_draw_tria_rect(&itemrect, 'h');
else if(panel->flag & PNL_CLOSEDX)
- ui_draw_tria_icon(block->minx+7, block->maxy+2, block->aspect, 'h');
+ ui_draw_tria_rect(&itemrect, 'h');
else
- ui_draw_tria_icon(block->minx+6+ofsx, block->maxy+5, block->aspect, 'v');
+ ui_draw_tria_rect(&itemrect, 'v');
+
+
}
-/* ------------ panel alignment ---------------- */
-
+/************************** panel alignment *************************/
/* this function is needed because uiBlock and Panel itself dont
change sizey or location when closed */
@@ -839,6 +633,7 @@ static int get_panel_real_ofsy(Panel *pa)
{
if(pa->flag & PNL_CLOSEDY) return pa->ofsy+pa->sizey;
else if(pa->paneltab && (pa->paneltab->flag & PNL_CLOSEDY)) return pa->ofsy+pa->sizey;
+ else if(pa->paneltab) return pa->paneltab->ofsy;
else return pa->ofsy;
}
@@ -849,13 +644,12 @@ static int get_panel_real_ofsx(Panel *pa)
else return pa->ofsx+pa->sizex;
}
-
typedef struct PanelSort {
Panel *pa, *orig;
} PanelSort;
/* note about sorting;
- the sortcounter has a lower value for new panels being added.
+ the sortorder has a lower value for new panels being added.
however, that only works to insert a single panel, when more new panels get
added the coordinates of existing panels and the previously stored to-be-insterted
panels do not match for sorting */
@@ -864,10 +658,10 @@ static int find_leftmost_panel(const void *a1, const void *a2)
{
const PanelSort *ps1=a1, *ps2=a2;
- if( ps1->pa->ofsx > ps2->pa->ofsx) return 1;
- else if( ps1->pa->ofsx < ps2->pa->ofsx) return -1;
- else if( ps1->pa->sortcounter > ps2->pa->sortcounter) return 1;
- else if( ps1->pa->sortcounter < ps2->pa->sortcounter) return -1;
+ if(ps1->pa->ofsx > ps2->pa->ofsx) return 1;
+ else if(ps1->pa->ofsx < ps2->pa->ofsx) return -1;
+ else if(ps1->pa->sortorder > ps2->pa->sortorder) return 1;
+ else if(ps1->pa->sortorder < ps2->pa->sortorder) return -1;
return 0;
}
@@ -877,78 +671,92 @@ static int find_highest_panel(const void *a1, const void *a2)
{
const PanelSort *ps1=a1, *ps2=a2;
- if( ps1->pa->ofsy < ps2->pa->ofsy) return 1;
- else if( ps1->pa->ofsy > ps2->pa->ofsy) return -1;
- else if( ps1->pa->sortcounter > ps2->pa->sortcounter) return 1;
- else if( ps1->pa->sortcounter < ps2->pa->sortcounter) return -1;
+ if(ps1->pa->ofsy+ps1->pa->sizey < ps2->pa->ofsy+ps2->pa->sizey) return 1;
+ else if(ps1->pa->ofsy+ps1->pa->sizey > ps2->pa->ofsy+ps2->pa->sizey) return -1;
+ else if(ps1->pa->sortorder > ps2->pa->sortorder) return 1;
+ else if(ps1->pa->sortorder < ps2->pa->sortorder) return -1;
+
+ return 0;
+}
+
+static int compare_panel(const void *a1, const void *a2)
+{
+ const PanelSort *ps1=a1, *ps2=a2;
+
+ if(ps1->pa->sortorder > ps2->pa->sortorder) return 1;
+ else if(ps1->pa->sortorder < ps2->pa->sortorder) return -1;
return 0;
}
/* this doesnt draw */
/* returns 1 when it did something */
-int uiAlignPanelStep(ScrArea *sa, ARegion *ar, float fac)
+int uiAlignPanelStep(ScrArea *sa, ARegion *ar, float fac, int drag)
{
+ uiStyle *style= U.uistyles.first;
Panel *pa;
PanelSort *ps, *panelsort, *psnext;
- static int sortcounter= 0;
int a, tot=0, done;
int align= panel_aligned(sa, ar);
- /* count active, not tabbed Panels */
- for(pa= ar->panels.first; pa; pa= pa->next) {
- if(pa->active && pa->paneltab==NULL) tot++;
- }
+ /* count active, not tabbed panels */
+ for(pa= ar->panels.first; pa; pa= pa->next)
+ if((pa->runtime_flag & PNL_ACTIVE) && pa->paneltab==NULL)
+ tot++;
if(tot==0) return 0;
/* extra; change close direction? */
for(pa= ar->panels.first; pa; pa= pa->next) {
- if(pa->active && pa->paneltab==NULL) {
- if( (pa->flag & PNL_CLOSEDX) && (align==BUT_VERTICAL) )
+ if((pa->runtime_flag & PNL_ACTIVE) && pa->paneltab==NULL) {
+ if((pa->flag & PNL_CLOSEDX) && (align==BUT_VERTICAL))
pa->flag ^= PNL_CLOSED;
-
- else if( (pa->flag & PNL_CLOSEDY) && (align==BUT_HORIZONTAL) )
+ else if((pa->flag & PNL_CLOSEDY) && (align==BUT_HORIZONTAL))
pa->flag ^= PNL_CLOSED;
-
}
}
- panelsort= MEM_callocN( tot*sizeof(PanelSort), "panelsort");
+ /* sort panels */
+ panelsort= MEM_callocN(tot*sizeof(PanelSort), "panelsort");
- /* fill panelsort array */
ps= panelsort;
for(pa= ar->panels.first; pa; pa= pa->next) {
- if(pa->active && pa->paneltab==NULL) {
+ if((pa->runtime_flag & PNL_ACTIVE) && pa->paneltab==NULL) {
ps->pa= MEM_dupallocN(pa);
ps->orig= pa;
ps++;
}
}
- if(align==BUT_VERTICAL)
- qsort(panelsort, tot, sizeof(PanelSort), find_highest_panel);
+ if(drag) {
+ /* while we are dragging, we sort on location and update sortorder */
+ if(align==BUT_VERTICAL)
+ qsort(panelsort, tot, sizeof(PanelSort), find_highest_panel);
+ else
+ qsort(panelsort, tot, sizeof(PanelSort), find_leftmost_panel);
+
+ for(ps=panelsort, a=0; a<tot; a++, ps++)
+ ps->orig->sortorder= a;
+ }
else
- qsort(panelsort, tot, sizeof(PanelSort), find_leftmost_panel);
+ /* otherwise use sortorder */
+ qsort(panelsort, tot, sizeof(PanelSort), compare_panel);
/* no smart other default start loc! this keeps switching f5/f6/etc compatible */
ps= panelsort;
- ps->pa->ofsx= PNL_DIST;
- if(align==BUT_VERTICAL)
- ps->pa->ofsy= -ps->pa->sizey-PNL_HEADER-PNL_DIST;
- else
- ps->pa->ofsy= -ps->pa->sizey-PNL_HEADER-PNL_DIST; // XXX was 0;
-
- for(a=0 ; a<tot-1; a++, ps++) {
+ ps->pa->ofsx= 0;
+ ps->pa->ofsy= -ps->pa->sizey-PNL_HEADER-style->panelouter;
+
+ for(a=0; a<tot-1; a++, ps++) {
psnext= ps+1;
if(align==BUT_VERTICAL) {
- psnext->pa->ofsx = ps->pa->ofsx;
- psnext->pa->ofsy = get_panel_real_ofsy(ps->pa) - psnext->pa->sizey-PNL_HEADER-PNL_DIST;
+ psnext->pa->ofsx= ps->pa->ofsx;
+ psnext->pa->ofsy= get_panel_real_ofsy(ps->pa) - psnext->pa->sizey-PNL_HEADER-style->panelouter;
}
else {
- psnext->pa->ofsx = get_panel_real_ofsx(ps->pa)+PNL_DIST;
- psnext->pa->ofsy = ps->pa->ofsy + ps->pa->sizey - psnext->pa->sizey;
+ psnext->pa->ofsx= get_panel_real_ofsx(ps->pa);
+ psnext->pa->ofsy= ps->pa->ofsy + ps->pa->sizey - psnext->pa->sizey;
}
}
@@ -966,17 +774,9 @@ int uiAlignPanelStep(ScrArea *sa, ARegion *ar, float fac)
}
/* copy locations to tabs */
- for(pa= ar->panels.first; pa; pa= pa->next) {
- if(pa->paneltab && pa->active) {
- copy_panel_offset(pa, pa->paneltab);
- }
- }
-
- /* set counter, used for sorting with newly added panels */
- sortcounter++;
for(pa= ar->panels.first; pa; pa= pa->next)
- if(pa->active)
- pa->sortcounter= sortcounter;
+ if(pa->paneltab && (pa->runtime_flag & PNL_ACTIVE))
+ ui_panel_copy_offset(pa, pa->paneltab);
/* free panelsort array */
for(ps= panelsort, a=0; a<tot; a++, ps++)
@@ -987,7 +787,7 @@ int uiAlignPanelStep(ScrArea *sa, ARegion *ar, float fac)
}
-static void ui_do_animate(bContext *C, Panel *panel)
+static void ui_do_animate(const bContext *C, Panel *panel)
{
uiHandlePanelData *data= panel->activedata;
ScrArea *sa= CTX_wm_area(C);
@@ -999,36 +799,49 @@ static void ui_do_animate(bContext *C, Panel *panel)
fac= MIN2(fac, 1.0f);
/* for max 1 second, interpolate positions */
- if(uiAlignPanelStep(sa, ar, fac))
+ if(uiAlignPanelStep(sa, ar, fac, 0))
ED_region_tag_redraw(ar);
else
fac= 1.0f;
- if(fac == 1.0f) {
+ if(fac >= 1.0f) {
panel_activate_state(C, panel, PANEL_STATE_EXIT);
return;
}
}
+void uiBeginPanels(const bContext *C, ARegion *ar)
+{
+ Panel *pa;
+
+ /* set all panels as inactive, so that at the end we know
+ * which ones were used */
+ for(pa=ar->panels.first; pa; pa=pa->next) {
+ if(pa->runtime_flag & PNL_ACTIVE)
+ pa->runtime_flag= PNL_WAS_ACTIVE;
+ else
+ pa->runtime_flag= 0;
+ }
+}
+
/* only draws blocks with panels */
-void uiDrawPanels(const bContext *C, int re_align)
+void uiEndPanels(const bContext *C, ARegion *ar)
{
ScrArea *sa= CTX_wm_area(C);
- ARegion *ar= CTX_wm_region(C);
uiBlock *block;
- Panel *panot, *panew, *patest;
+ Panel *panot, *panew, *patest, *pa;
- /* scaling contents */
+ /* offset contents */
for(block= ar->uiblocks.first; block; block= block->next)
if(block->active && block->panel)
- ui_scale_panel_block(block);
+ ui_offset_panel_block(block);
/* consistancy; are panels not made, whilst they have tabs */
for(panot= ar->panels.first; panot; panot= panot->next) {
- if(panot->active==0) { // not made
+ if((panot->runtime_flag & PNL_ACTIVE)==0) { // not made
for(panew= ar->panels.first; panew; panew= panew->next) {
- if(panew->active) {
+ if((panew->runtime_flag & PNL_ACTIVE)) {
if(panew->paneltab==panot) { // panew is tab in notmade pa
break;
}
@@ -1048,105 +861,24 @@ void uiDrawPanels(const bContext *C, int re_align)
}
}
- /* re-align */
- if(re_align) uiAlignPanelStep(sa, ar, 1.0);
-
- if(sa->spacetype!=SPACE_BUTS) {
-#if 0 // XXX make float panel exception
- SpaceLink *sl= sa->spacedata.first;
- for(block= ar->uiblocks.first; block; block= block->next) {
- if(block->active && block->panel && block->panel->active && block->panel->paneltab == NULL) {
- float dx=0.0, dy=0.0, minx, miny, maxx, maxy, miny_panel;
-
- minx= sl->blockscale*block->panel->ofsx;
- maxx= sl->blockscale*(block->panel->ofsx+block->panel->sizex);
- miny= sl->blockscale*(block->panel->ofsy+block->panel->sizey);
- maxy= sl->blockscale*(block->panel->ofsy+block->panel->sizey+PNL_HEADER);
- miny_panel= sl->blockscale*(block->panel->ofsy);
-
- /* check to see if snapped panels have been left out in the open by resizing a window
- * and if so, offset them back to where they belong */
- if (block->panel->snap) {
- if (((block->panel->snap) & PNL_SNAP_RIGHT) &&
- (maxx < (float)sa->winx)) {
-
- dx = sa->winx-maxx;
- block->panel->ofsx+= dx/sl->blockscale;
- }
- if (((block->panel->snap) & PNL_SNAP_TOP) &&
- (maxy < (float)sa->winy)) {
-
- dy = sa->winy-maxy;
- block->panel->ofsy+= dy/sl->blockscale;
- }
-
- /* reset these vars with updated panel offset distances */
- minx= sl->blockscale*block->panel->ofsx;
- maxx= sl->blockscale*(block->panel->ofsx+block->panel->sizex);
- miny= sl->blockscale*(block->panel->ofsy+block->panel->sizey);
- maxy= sl->blockscale*(block->panel->ofsy+block->panel->sizey+PNL_HEADER);
- miny_panel= sl->blockscale*(block->panel->ofsy);
- } else
- /* reset to no snapping */
- block->panel->snap = PNL_SNAP_NONE;
-
-
- /* clip panels (headers) for non-butspace situations (maybe make optimized event later) */
-
- /* check left and right edges */
- if (minx < PNL_SNAP_DIST) {
- dx = -minx;
- block->panel->snap |= PNL_SNAP_LEFT;
- }
- else if (maxx > ((float)sa->winx - PNL_SNAP_DIST)) {
- dx= sa->winx-maxx;
- block->panel->snap |= PNL_SNAP_RIGHT;
- }
- if( minx + dx < 0.0) dx= -minx; // when panel cant fit, put it fixed here
-
- /* check top and bottom edges */
- if ((miny_panel < PNL_SNAP_DIST) && (miny_panel > -PNL_SNAP_DIST)) {
- dy= -miny_panel;
- block->panel->snap |= PNL_SNAP_BOTTOM;
- }
- if(miny < PNL_SNAP_DIST) {
- dy= -miny;
- block->panel->snap |= PNL_SNAP_BOTTOM;
- }
- else if(maxy > ((float)sa->winy - PNL_SNAP_DIST)) {
- dy= sa->winy-maxy;
- block->panel->snap |= PNL_SNAP_TOP;
- }
- if( miny + dy < 0.0) dy= -miny; // when panel cant fit, put it fixed here
-
-
- block->panel->ofsx+= dx/sl->blockscale;
- block->panel->ofsy+= dy/sl->blockscale;
-
- /* copy locations */
- for(patest= ar->panels.first; patest; patest= patest->next) {
- if(patest->paneltab==block->panel) copy_panel_offset(patest, block->panel);
- }
-
- }
- }
-#endif
+ /* re-align, possibly with animation */
+ if(panels_re_align(sa, ar, &pa)) {
+ if(pa)
+ panel_activate_state(C, pa, PANEL_STATE_ANIMATION);
+ else
+ uiAlignPanelStep(sa, ar, 1.0, 0);
}
/* draw panels, selected on top */
for(block= ar->uiblocks.first; block; block=block->next) {
if(block->active && block->panel && !(block->panel->flag & PNL_SELECT)) {
- uiPanelPush(block);
uiDrawBlock(C, block);
- uiPanelPop(block);
}
}
for(block= ar->uiblocks.first; block; block=block->next) {
if(block->active && block->panel && (block->panel->flag & PNL_SELECT)) {
- uiPanelPush(block);
uiDrawBlock(C, block);
- uiPanelPop(block);
}
}
}
@@ -1162,18 +894,18 @@ static void check_panel_overlap(ARegion *ar, Panel *panel)
for(pa=ar->panels.first; pa; pa=pa->next) {
pa->flag &= ~PNL_OVERLAP;
if(panel && (pa != panel)) {
- if(pa->paneltab==NULL && pa->active) {
+ if(pa->paneltab==NULL && (pa->runtime_flag & PNL_ACTIVE)) {
float safex= 0.2, safey= 0.2;
- if( pa->flag & PNL_CLOSEDX) safex= 0.05;
+ if(pa->flag & PNL_CLOSEDX) safex= 0.05;
else if(pa->flag & PNL_CLOSEDY) safey= 0.05;
- else if( panel->flag & PNL_CLOSEDX) safex= 0.05;
+ else if(panel->flag & PNL_CLOSEDX) safex= 0.05;
else if(panel->flag & PNL_CLOSEDY) safey= 0.05;
- if( pa->ofsx > panel->ofsx- safex*panel->sizex)
- if( pa->ofsx+pa->sizex < panel->ofsx+ (1.0+safex)*panel->sizex)
- if( pa->ofsy > panel->ofsy- safey*panel->sizey)
- if( pa->ofsy+pa->sizey < panel->ofsy+ (1.0+safey)*panel->sizey)
+ if(pa->ofsx > panel->ofsx- safex*panel->sizex)
+ if(pa->ofsx+pa->sizex < panel->ofsx+ (1.0+safex)*panel->sizex)
+ if(pa->ofsy > panel->ofsy- safey*panel->sizey)
+ if(pa->ofsy+pa->sizey < panel->ofsy+ (1.0+safey)*panel->sizey)
pa->flag |= PNL_OVERLAP;
}
}
@@ -1187,7 +919,7 @@ static void test_add_new_tabs(ARegion *ar)
pa= ar->panels.first;
while(pa) {
- if(pa->active) {
+ if(pa->runtime_flag & PNL_ACTIVE) {
if(pa->flag & PNL_SELECT) pasel= pa;
if(pa->flag & PNL_OVERLAP) palap= pa;
}
@@ -1200,7 +932,7 @@ static void test_add_new_tabs(ARegion *ar)
pa= ar->panels.first;
while(pa) {
if(pa->paneltab==pasel) {
- copy_panel_offset(pa, pasel);
+ ui_panel_copy_offset(pa, pasel);
}
pa= pa->next;
}
@@ -1212,13 +944,13 @@ static void test_add_new_tabs(ARegion *ar)
palap->paneltab= pasel;
/* the selected panel gets coords of overlapped one */
- copy_panel_offset(pasel, palap);
+ ui_panel_copy_offset(pasel, palap);
/* and its tabs */
pa= ar->panels.first;
while(pa) {
if(pa->paneltab == pasel) {
- copy_panel_offset(pa, palap);
+ ui_panel_copy_offset(pa, palap);
}
pa= pa->next;
}
@@ -1233,9 +965,9 @@ static void test_add_new_tabs(ARegion *ar)
}
}
-/* ------------ panel drag ---------------- */
+/************************ panel dragging ****************************/
-static void ui_do_drag(bContext *C, wmEvent *event, Panel *panel)
+static void ui_do_drag(const bContext *C, wmEvent *event, Panel *panel)
{
uiHandlePanelData *data= panel->activedata;
ScrArea *sa= CTX_wm_area(C);
@@ -1252,13 +984,11 @@ static void ui_do_drag(bContext *C, wmEvent *event, Panel *panel)
if(data->state == PANEL_STATE_DRAG_SCALE) {
panel->sizex = MAX2(data->startsizex+dx, UI_PANEL_MINX);
- if(data->startsizey-dy < UI_PANEL_MINY) {
+ if(data->startsizey-dy < UI_PANEL_MINY)
dy= -UI_PANEL_MINY+data->startsizey;
- }
- panel->sizey = data->startsizey-dy;
-
- panel->ofsy= data->startofsy+dy;
+ panel->sizey= data->startsizey-dy;
+ panel->ofsy= data->startofsy+dy;
}
else {
/* reset the panel snapping, to allow dragging away from snapped edges */
@@ -1268,13 +998,13 @@ static void ui_do_drag(bContext *C, wmEvent *event, Panel *panel)
panel->ofsy = data->startofsy+dy;
check_panel_overlap(ar, panel);
- if(align) uiAlignPanelStep(sa, ar, 0.2);
+ if(align) uiAlignPanelStep(sa, ar, 0.2, 1);
}
ED_region_tag_redraw(ar);
}
-static void ui_do_untab(bContext *C, wmEvent *event, Panel *panel)
+static void ui_do_untab(const bContext *C, wmEvent *event, Panel *panel)
{
uiHandlePanelData *data= panel->activedata;
ARegion *ar= CTX_wm_region(C);
@@ -1303,20 +1033,20 @@ static void ui_do_untab(bContext *C, wmEvent *event, Panel *panel)
}
}
-/* region level panel interaction */
+/******************* region level panel interaction *****************/
-static void panel_clicked_tabs(bContext *C, ScrArea *sa, ARegion *ar, uiBlock *block, int mousex)
+static void panel_clicked_tabs(const bContext *C, ScrArea *sa, ARegion *ar, uiBlock *block, int mousex)
{
Panel *pa, *tabsel=NULL, *panel= block->panel;
int nr= 1, a, width, ofsx;
ofsx= PNL_ICON;
- if(block->panel->control & UI_PNL_CLOSE) ofsx+= PNL_ICON;
+ if(block->panel->type && (block->panel->control & UI_PNL_CLOSE)) ofsx+= PNL_ICON;
/* count */
for(pa= ar->panels.first; pa; pa=pa->next)
if(pa!=panel)
- if(pa->active && pa->paneltab==panel)
+ if((pa->runtime_flag & PNL_ACTIVE) && pa->paneltab==panel)
nr++;
if(nr==1) return;
@@ -1326,8 +1056,8 @@ static void panel_clicked_tabs(bContext *C, ScrArea *sa, ARegion *ar, uiBlock *b
width= (int)((float)(panel->sizex - ofsx-10)/nr);
pa= ar->panels.first;
while(pa) {
- if(pa==panel || (pa->active && pa->paneltab==panel)) {
- if( (mousex > ofsx+a*width) && (mousex < ofsx+(a+1)*width) ) {
+ if(pa==panel || ((pa->runtime_flag & PNL_ACTIVE) && pa->paneltab==panel)) {
+ if((mousex > ofsx+a*width) && (mousex < ofsx+(a+1)*width)) {
tabsel= pa;
break;
}
@@ -1351,9 +1081,16 @@ static void panel_clicked_tabs(bContext *C, ScrArea *sa, ARegion *ar, uiBlock *b
pa= pa->next;
}
+ /* copy locations to tabs */
+ for(pa= ar->panels.first; pa; pa= pa->next) {
+ if(pa->paneltab && pa->runtime_flag & PNL_ACTIVE) {
+ ui_panel_copy_offset(pa, pa->paneltab);
+ }
+ }
+
/* panels now differ size.. */
if(panel_aligned(sa, ar))
- uiAlignPanelStep(sa, ar, 1.0);
+ panel_activate_state(C, tabsel, PANEL_STATE_ANIMATION);
ED_region_tag_redraw(ar);
}
@@ -1363,7 +1100,7 @@ static void panel_clicked_tabs(bContext *C, ScrArea *sa, ARegion *ar, uiBlock *b
/* this function is supposed to call general window drawing too */
/* also it supposes a block has panel, and isnt a menu */
-static void ui_handle_panel_header(bContext *C, uiBlock *block, int mx, int my)
+static void ui_handle_panel_header(const bContext *C, uiBlock *block, int mx, int my)
{
ScrArea *sa= CTX_wm_area(C);
ARegion *ar= CTX_wm_region(C);
@@ -1372,21 +1109,22 @@ static void ui_handle_panel_header(bContext *C, uiBlock *block, int mx, int my)
/* mouse coordinates in panel space! */
+ /* XXX weak code, currently it assumes layout style for location of widgets */
+
/* check open/collapsed button */
if(block->panel->flag & PNL_CLOSEDX) {
if(my >= block->maxy) button= 1;
}
else if(block->panel->control & UI_PNL_CLOSE) {
- if(mx <= block->minx+PNL_ICON-2) button= 2;
- else if(mx <= block->minx+2*PNL_ICON+2) button= 1;
+ if(mx <= block->minx+10+PNL_ICON-2) button= 2;
+ else if(mx <= block->minx+10+2*PNL_ICON+2) button= 1;
}
- else if(mx <= block->minx+PNL_ICON+2) {
+ else if(mx <= block->minx+10+PNL_ICON+2) {
button= 1;
}
if(button) {
if(button==2) { // close
- //XXX 2.50 rem_blockhandler(sa, block->handler);
ED_region_tag_redraw(ar);
}
else { // collapse
@@ -1435,88 +1173,97 @@ int ui_handler_panel_region(bContext *C, wmEvent *event)
{
ARegion *ar= CTX_wm_region(C);
uiBlock *block;
- int retval, mx, my, inside_header= 0, inside_scale= 0;
+ int retval, mx, my, inside_header= 0, inside_scale= 0, inside;
retval= WM_UI_HANDLER_CONTINUE;
+ /* buttons get priority */
+ if(ui_button_is_active(ar))
+ return retval;
+
for(block=ar->uiblocks.last; block; block=block->prev) {
mx= event->x;
my= event->y;
ui_window_to_block(ar, block, &mx, &my);
/* check if inside boundbox */
+ inside= 0;
+
if(block->panel && block->panel->paneltab==NULL)
if(block->minx <= mx && block->maxx >= mx)
if(block->miny <= my && block->maxy+PNL_HEADER >= my)
- break;
- }
-
- if(!block)
- return retval;
+ inside= 1;
- /* clicked at panel header? */
- if(block->panel->flag & PNL_CLOSEDX) {
- if(block->minx <= mx && block->minx+PNL_HEADER >= mx)
- inside_header= 1;
- }
- else if((block->maxy <= my) && (block->maxy+PNL_HEADER >= my)) {
- inside_header= 1;
- }
- else if(block->panel->control & UI_PNL_SCALE) {
- if(block->maxx-PNL_HEADER <= mx)
- if(block->miny+PNL_HEADER >= my)
- inside_scale= 1;
- }
+ if(inside) {
+ /* clicked at panel header? */
+ if(block->panel->flag & PNL_CLOSEDX) {
+ if(block->minx <= mx && block->minx+PNL_HEADER >= mx)
+ inside_header= 1;
+ }
+ else if((block->maxy <= my) && (block->maxy+PNL_HEADER >= my)) {
+ inside_header= 1;
+ }
+ else if(block->panel->control & UI_PNL_SCALE) {
+ if(block->maxx-PNL_HEADER <= mx)
+ if(block->miny+PNL_HEADER >= my)
+ inside_scale= 1;
+ }
- if(event->val!=KM_PRESS)
- return retval;
+ if(event->val==KM_PRESS) {
+ if(event->type == LEFTMOUSE) {
+ if(inside_header) {
+ ui_handle_panel_header(C, block, mx, my);
+ break;
+ }
+ else if(inside_scale && !(block->panel->flag & PNL_CLOSED)) {
+ panel_activate_state(C, block->panel, PANEL_STATE_DRAG_SCALE);
+ break;
+ }
+ }
+ else if(event->type == ESCKEY) {
+ /*XXX 2.50 if(block->handler) {
+ rem_blockhandler(sa, block->handler);
+ ED_region_tag_redraw(ar);
+ retval= WM_UI_HANDLER_BREAK;
+ }*/
+ }
+ else if(event->type==PADPLUSKEY || event->type==PADMINUS) {
+ int zoom=0;
+
+ /* if panel is closed, only zoom if mouse is over the header */
+ if (block->panel->flag & (PNL_CLOSEDX|PNL_CLOSEDY)) {
+ if (inside_header)
+ zoom=1;
+ }
+ else
+ zoom=1;
- if(event->type == LEFTMOUSE) {
- if(inside_header)
- ui_handle_panel_header(C, block, mx, my);
- else if(inside_scale && !(block->panel->flag & PNL_CLOSED))
- panel_activate_state(C, block->panel, PANEL_STATE_DRAG_SCALE);
- }
- else if(event->type == ESCKEY) {
- /*XXX 2.50 if(block->handler) {
- rem_blockhandler(sa, block->handler);
- ED_region_tag_redraw(ar);
- retval= WM_UI_HANDLER_BREAK;
- }*/
- }
- else if(event->type==PADPLUSKEY || event->type==PADMINUS) {
- int zoom=0;
-
- /* if panel is closed, only zoom if mouse is over the header */
- if (block->panel->flag & (PNL_CLOSEDX|PNL_CLOSEDY)) {
- if (inside_header)
- zoom=1;
- }
- else
- zoom=1;
#if 0 // XXX make float panel exception?
- if(zoom) {
- ScrArea *sa= CTX_wm_area(C);
- SpaceLink *sl= sa->spacedata.first;
-
- if(sa->spacetype!=SPACE_BUTS) {
- if(!(block->panel->control & UI_PNL_SCALE)) {
- if(event->type==PADPLUSKEY) sl->blockscale+= 0.1;
- else sl->blockscale-= 0.1;
- CLAMP(sl->blockscale, 0.6, 1.0);
-
- ED_region_tag_redraw(ar);
- retval= WM_UI_HANDLER_BREAK;
- }
+ if(zoom) {
+ ScrArea *sa= CTX_wm_area(C);
+ SpaceLink *sl= sa->spacedata.first;
+
+ if(sa->spacetype!=SPACE_BUTS) {
+ if(!(block->panel->control & UI_PNL_SCALE)) {
+ if(event->type==PADPLUSKEY) sl->blockscale+= 0.1;
+ else sl->blockscale-= 0.1;
+ CLAMP(sl->blockscale, 0.6, 1.0);
+
+ ED_region_tag_redraw(ar);
+ retval= WM_UI_HANDLER_BREAK;
+ }
+ }
+ }
+#endif
+ }
}
}
-#endif
}
return retval;
}
-/* window level modal panel interaction */
+/**************** window level modal panel interaction **************/
static int ui_handler_panel(bContext *C, wmEvent *event, void *userdata)
{
@@ -1525,7 +1272,15 @@ static int ui_handler_panel(bContext *C, wmEvent *event, void *userdata)
/* verify if we can stop */
if(event->type == LEFTMOUSE && event->val!=KM_PRESS) {
- panel_activate_state(C, panel, PANEL_STATE_ANIMATION);
+ ScrArea *sa= CTX_wm_area(C);
+ ARegion *ar= CTX_wm_region(C);
+ int align= panel_aligned(sa, ar);
+
+ if(align)
+ panel_activate_state(C, panel, PANEL_STATE_ANIMATION);
+ else
+ panel_activate_state(C, panel, PANEL_STATE_EXIT);
+
return WM_UI_HANDLER_BREAK;
}
else if(event->type == MOUSEMOVE) {
@@ -1541,7 +1296,9 @@ static int ui_handler_panel(bContext *C, wmEvent *event, void *userdata)
ui_do_drag(C, event, panel);
}
- if(data->state == PANEL_STATE_ANIMATION)
+ data= panel->activedata;
+
+ if(data && data->state == PANEL_STATE_ANIMATION)
return WM_UI_HANDLER_CONTINUE;
else
return WM_UI_HANDLER_BREAK;
@@ -1554,12 +1311,12 @@ static void ui_handler_remove_panel(bContext *C, void *userdata)
panel_activate_state(C, pa, PANEL_STATE_EXIT);
}
-static void panel_activate_state(bContext *C, Panel *pa, uiHandlePanelState state)
+static void panel_activate_state(const bContext *C, Panel *pa, uiHandlePanelState state)
{
uiHandlePanelData *data= pa->activedata;
wmWindow *win= CTX_wm_window(C);
ARegion *ar= CTX_wm_region(C);
-
+
if(data && data->state == state)
return;
diff --git a/source/blender/editors/interface/interface_regions.c b/source/blender/editors/interface/interface_regions.c
index d64ad75a48a..847c0a02ee4 100644
--- a/source/blender/editors/interface/interface_regions.c
+++ b/source/blender/editors/interface/interface_regions.c
@@ -32,6 +32,7 @@
#include "DNA_screen_types.h"
#include "DNA_view2d_types.h"
+#include "DNA_userdef_types.h"
#include "DNA_windowmanager_types.h"
#include "BLI_arithb.h"
@@ -41,6 +42,7 @@
#include "BKE_context.h"
#include "BKE_report.h"
#include "BKE_screen.h"
+#include "BKE_texture.h"
#include "BKE_utildefines.h"
#include "WM_api.h"
@@ -54,9 +56,10 @@
#include "BIF_gl.h"
#include "UI_interface.h"
-#include "UI_text.h"
#include "UI_view2d.h"
+#include "BLF_api.h"
+
#include "ED_screen.h"
#include "interface_intern.h"
@@ -64,11 +67,9 @@
#define MENU_BUTTON_HEIGHT 20
#define MENU_SEPR_HEIGHT 6
#define B_NOP -1
-#define MENU_SHADOW_LEFT -1
-#define MENU_SHADOW_BOTTOM -10
-#define MENU_SHADOW_RIGHT 10
-#define MENU_SHADOW_TOP 1
-#define MENU_ROUNDED_TOP 5
+#define MENU_SHADOW_SIDE 8
+#define MENU_SHADOW_BOTTOM 10
+#define MENU_TOP 8
/*********************** Menu Data Parsing ********************* */
@@ -251,42 +252,21 @@ void ui_remove_temporary_region(bContext *C, bScreen *sc, ARegion *ar)
/************************* Creating Tooltips **********************/
typedef struct uiTooltipData {
- rctf bbox;
- struct BMF_Font *font;
+ rcti bbox;
+ uiFontStyle fstyle;
char *tip;
- float aspect;
} uiTooltipData;
static void ui_tooltip_region_draw(const bContext *C, ARegion *ar)
{
- uiTooltipData *data;
- int x1, y1, x2, y2;
+ uiTooltipData *data= ar->regiondata;
- data= ar->regiondata;
-
- x1= ar->winrct.xmin;
- y1= ar->winrct.ymin;
- x2= ar->winrct.xmax;
- y2= ar->winrct.ymax;
-
- /* draw background */
- glEnable(GL_BLEND);
- glColor4f(0.15f, 0.15f, 0.15f, 0.85f);
-
- uiSetRoundBox(15);
- uiRoundBox(data->bbox.xmin, 2, data->bbox.xmax+10, y2-y1-2, 5.0f);
+ ui_draw_menu_back(U.uistyles.first, NULL, &data->bbox);
/* draw text */
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
-
- /* set the position for drawing text +6 in from the left edge, and leaving
- * an equal gap between the top of the background box and the top of the
- * string's bbox, and the bottom of the background box, and the bottom of
- * the string's bbox */
- ui_rasterpos_safe(5, ((y2-data->bbox.ymax)+(y1+data->bbox.ymin))/2 - data->bbox.ymin - y1, data->aspect);
- UI_SetScale(1.0);
-
- UI_DrawString(data->font, data->tip, ui_translate_tooltips());
+ uiStyleFontSet(&data->fstyle);
+ uiStyleFontDraw(&data->fstyle, &data->bbox, data->tip);
}
static void ui_tooltip_region_free(ARegion *ar)
@@ -301,9 +281,12 @@ static void ui_tooltip_region_free(ARegion *ar)
ARegion *ui_tooltip_create(bContext *C, ARegion *butregion, uiBut *but)
{
+ uiStyle *style= U.uistyles.first; // XXX pass on as arg
static ARegionType type;
ARegion *ar;
uiTooltipData *data;
+ float fonth, fontw, aspect= but->block->aspect;
+ float x1f, x2f, y1f, y2f;
int x1, x2, y1, y2, winx, winy, ofsx, ofsy;
if(!but->tip || strlen(but->tip)==0)
@@ -320,9 +303,14 @@ ARegion *ui_tooltip_create(bContext *C, ARegion *butregion, uiBut *but)
/* create tooltip data */
data= MEM_callocN(sizeof(uiTooltipData), "uiTooltipData");
data->tip= BLI_strdup(but->tip);
- data->font= but->font;
- data->aspect= but->aspect;
- UI_GetBoundingBox(data->font, data->tip, ui_translate_tooltips(), &data->bbox);
+
+ /* set font, get bb */
+ data->fstyle= style->widget; /* copy struct */
+ data->fstyle.align= UI_STYLE_TEXT_CENTER;
+ ui_fontscale(&data->fstyle.points, aspect);
+ uiStyleFontSet(&data->fstyle);
+ fontw= aspect * BLF_width(data->tip);
+ fonth= aspect * BLF_height(data->tip);
ar->regiondata= data;
@@ -330,19 +318,19 @@ ARegion *ui_tooltip_create(bContext *C, ARegion *butregion, uiBut *but)
ofsx= (but->block->panel)? but->block->panel->ofsx: 0;
ofsy= (but->block->panel)? but->block->panel->ofsy: 0;
- x1= (but->x1+but->x2)/2 + ofsx;
- x2= x1+but->aspect*((data->bbox.xmax-data->bbox.xmin) + 8);
- y2= but->y1-10 + ofsy;
- y1= y2-but->aspect*((data->bbox.ymax+(data->bbox.ymax-data->bbox.ymin)));
-
- y2 += 8;
- x2 += 4;
-
+ x1f= (but->x1+but->x2)/2.0f + ofsx - 16.0f*aspect;
+ x2f= x1f + fontw + 16.0f*aspect;
+ y2f= but->y1 + ofsy - 15.0f*aspect;
+ y1f= y2f - fonth - 10.0f*aspect;
+
+ /* copy to int, gets projected if possible too */
+ x1= x1f; y1= y1f; x2= x2f; y2= y2f;
+
if(butregion) {
/* XXX temp, region v2ds can be empty still */
if(butregion->v2d.cur.xmin != butregion->v2d.cur.xmax) {
- UI_view2d_to_region_no_clip(&butregion->v2d, x1, y1, &x1, &y1);
- UI_view2d_to_region_no_clip(&butregion->v2d, x2, y2, &x2, &y2);
+ UI_view2d_to_region_no_clip(&butregion->v2d, x1f, y1f, &x1, &y1);
+ UI_view2d_to_region_no_clip(&butregion->v2d, x2f, y2f, &x2, &y2);
}
x1 += butregion->winrct.xmin;
@@ -368,11 +356,18 @@ ARegion *ui_tooltip_create(bContext *C, ARegion *butregion, uiBut *but)
y1 += 36;
y2 += 36;
}
+
+ /* widget rect, in region coords */
+ data->bbox.xmin= MENU_SHADOW_SIDE;
+ data->bbox.xmax= x2-x1 + MENU_SHADOW_SIDE;
+ data->bbox.ymin= MENU_SHADOW_BOTTOM;
+ data->bbox.ymax= y2-y1 + MENU_SHADOW_BOTTOM;
- ar->winrct.xmin= x1;
- ar->winrct.ymin= y1;
- ar->winrct.xmax= x2;
- ar->winrct.ymax= y2;
+ /* region bigger for shadow */
+ ar->winrct.xmin= x1 - MENU_SHADOW_SIDE;
+ ar->winrct.xmax= x2 + MENU_SHADOW_SIDE;
+ ar->winrct.ymin= y1 - MENU_SHADOW_BOTTOM;
+ ar->winrct.ymax= y2 + MENU_TOP;
/* adds subwindow */
ED_region_init(C, ar);
@@ -630,6 +625,7 @@ uiPopupBlockHandle *ui_popup_block_create(bContext *C, ARegion *butregion, uiBut
/* create area region */
ar= ui_add_temporary_region(CTX_wm_screen(C));
+ handle->region= ar;
memset(&type, 0, sizeof(ARegionType));
type.draw= ui_block_region_draw;
@@ -637,15 +633,21 @@ uiPopupBlockHandle *ui_popup_block_create(bContext *C, ARegion *butregion, uiBut
UI_add_region_handlers(&ar->handlers);
- handle->region= ar;
- ar->regiondata= handle;
-
/* create ui block */
if(create_func)
block= create_func(C, handle->region, arg);
else
block= handle_create_func(C, handle, arg);
- block->handle= handle;
+
+ if(block->handle) {
+ memcpy(block->handle, handle, sizeof(uiPopupBlockHandle));
+ MEM_freeN(handle);
+ handle= block->handle;
+ }
+ else
+ block->handle= handle;
+
+ ar->regiondata= handle;
if(!block->endblock)
uiEndBlock(C, block);
@@ -677,10 +679,10 @@ uiPopupBlockHandle *ui_popup_block_create(bContext *C, ARegion *butregion, uiBut
/* the block and buttons were positioned in window space as in 2.4x, now
* these menu blocks are regions so we bring it back to region space.
* additionally we add some padding for the menu shadow or rounded menus */
- ar->winrct.xmin= block->minx + MENU_SHADOW_LEFT;
- ar->winrct.xmax= block->maxx + MENU_SHADOW_RIGHT;
- ar->winrct.ymin= block->miny + MENU_SHADOW_BOTTOM;
- ar->winrct.ymax= block->maxy + MENU_SHADOW_TOP + MENU_ROUNDED_TOP;
+ ar->winrct.xmin= block->minx - MENU_SHADOW_SIDE;
+ ar->winrct.xmax= block->maxx + MENU_SHADOW_SIDE;
+ ar->winrct.ymin= block->miny - MENU_SHADOW_BOTTOM;
+ ar->winrct.ymax= block->maxy + MENU_TOP;
block->minx -= ar->winrct.xmin;
block->maxx -= ar->winrct.xmin;
@@ -701,6 +703,9 @@ uiPopupBlockHandle *ui_popup_block_create(bContext *C, ARegion *butregion, uiBut
/* get winmat now that we actually have the subwindow */
wmSubWindowSet(window, ar->swinid);
+ // XXX ton, AA pixel space...
+ wmOrtho2(0.0, (float)ar->winrct.xmax-ar->winrct.xmin+1, 0.0, (float)ar->winrct.ymax-ar->winrct.ymin+1);
+
wm_subwindow_getmatrix(window, ar->swinid, block->winmat);
/* notify change and redraw */
@@ -728,10 +733,8 @@ uiBlock *ui_block_func_MENU(bContext *C, uiPopupBlockHandle *handle, void *arg_b
int width, height, boxh, columns, rows, startx, starty, x1, y1, xmax, a;
/* create the block */
- block= uiBeginBlock(C, handle->region, "menu", UI_EMBOSSP, UI_HELV);
- block->dt= UI_EMBOSSP;
+ block= uiBeginBlock(C, handle->region, "menu", UI_EMBOSSP);
block->flag= UI_BLOCK_LOOP|UI_BLOCK_REDRAW|UI_BLOCK_NUMSELECT;
- block->themecol= TH_MENU_ITEM;
/* compute menu data */
md= decompose_menu_string(but->str);
@@ -756,12 +759,12 @@ uiBlock *ui_block_func_MENU(bContext *C, uiPopupBlockHandle *handle, void *arg_b
/* size and location */
if(md->title)
- width= 1.5*aspect*strlen(md->title)+UI_GetStringWidth(block->curfont, md->title, ui_translate_menus());
+ width= 1.5*aspect*strlen(md->title)+UI_GetStringWidth(md->title);
else
width= 0;
for(a=0; a<md->nitems; a++) {
- xmax= aspect*UI_GetStringWidth(block->curfont, md->items[a].str, ui_translate_menus());
+ xmax= aspect*UI_GetStringWidth(md->items[a].str);
if(md->items[a].icon)
xmax += 20*aspect;
if(xmax>width)
@@ -786,14 +789,13 @@ uiBlock *ui_block_func_MENU(bContext *C, uiPopupBlockHandle *handle, void *arg_b
if(md->title) {
uiBut *bt;
- uiSetCurFont(block, block->font+1);
+
if (md->titleicon) {
bt= uiDefIconTextBut(block, LABEL, 0, md->titleicon, md->title, startx, (short)(starty+rows*boxh), (short)width, (short)boxh, NULL, 0.0, 0.0, 0, 0, "");
} else {
bt= uiDefBut(block, LABEL, 0, md->title, startx, (short)(starty+rows*boxh), (short)width, (short)boxh, NULL, 0.0, 0.0, 0, 0, "");
bt->flag= UI_TEXT_LEFT;
}
- uiSetCurFont(block, block->font);
}
for(a=0; a<md->nitems; a++) {
@@ -839,9 +841,8 @@ uiBlock *ui_block_func_ICONROW(bContext *C, uiPopupBlockHandle *handle, void *ar
uiBlock *block;
int a;
- block= uiBeginBlock(C, handle->region, "menu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, handle->region, "menu", UI_EMBOSSP);
block->flag= UI_BLOCK_LOOP|UI_BLOCK_REDRAW|UI_BLOCK_NUMSELECT;
- block->themecol= TH_MENU_ITEM;
for(a=(int)but->hardmin; a<=(int)but->hardmax; a++) {
uiDefIconButF(block, BUTM|FLO, B_NOP, but->icon+(a-but->hardmin), 0, (short)(18*a), (short)(but->x2-but->x1-4), 18, &handle->retvalue, (float)a, 0.0, 0, 0, "");
@@ -861,21 +862,20 @@ uiBlock *ui_block_func_ICONTEXTROW(bContext *C, uiPopupBlockHandle *handle, void
MenuData *md;
int width, xmax, ypos, a;
- block= uiBeginBlock(C, handle->region, "menu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, handle->region, "menu", UI_EMBOSSP);
block->flag= UI_BLOCK_LOOP|UI_BLOCK_REDRAW|UI_BLOCK_NUMSELECT;
- block->themecol= TH_MENU_ITEM;
md= decompose_menu_string(but->str);
/* size and location */
/* expand menu width to fit labels */
if(md->title)
- width= 2*strlen(md->title)+UI_GetStringWidth(block->curfont, md->title, ui_translate_menus());
+ width= 2*strlen(md->title)+UI_GetStringWidth(md->title);
else
width= 0;
for(a=0; a<md->nitems; a++) {
- xmax= UI_GetStringWidth(block->curfont, md->items[a].str, ui_translate_menus());
+ xmax= UI_GetStringWidth(md->items[a].str);
if(xmax>width) width= xmax;
}
@@ -899,9 +899,8 @@ uiBlock *ui_block_func_ICONTEXTROW(bContext *C, uiPopupBlockHandle *handle, void
if(md->title) {
uiBut *bt;
- uiSetCurFont(block, block->font+1);
+
bt= uiDefBut(block, LABEL, 0, md->title, 0, ypos, (short)width, 19, NULL, 0.0, 0.0, 0, 0, "");
- uiSetCurFont(block, block->font);
bt->flag= UI_TEXT_LEFT;
}
@@ -1056,18 +1055,17 @@ static void ui_update_block_buts_hex(uiBlock *block, char *hexcol)
/* callback to copy from/to palette */
static void do_palette_cb(bContext *C, void *bt1, void *col1)
{
+ wmWindow *win= CTX_wm_window(C);
uiBut *but1= (uiBut *)bt1;
float *col= (float *)col1;
float *fp, hsv[3];
fp= (float *)but1->poin;
- /* XXX 2.50 bad access, how to solve?
- *
- if( (get_qual() & LR_CTRLKEY) ) {
+ if(win->eventstate->ctrl) {
VECCOPY(fp, col);
}
- else*/ {
+ else {
VECCOPY(col, fp);
}
@@ -1202,15 +1200,11 @@ void uiBlockPickerButtons(uiBlock *block, float *col, float *hsv, float *old, ch
// the cube intersection
bt= uiDefButF(block, HSVCUBE, retval, "", 0,DPICK+BPICK,FPICK,FPICK, col, 0.0, 0.0, 2, 0, "");
- uiButSetFlag(bt, UI_NO_HILITE);
bt= uiDefButF(block, HSVCUBE, retval, "", 0,0,FPICK,BPICK, col, 0.0, 0.0, 3, 0, "");
- uiButSetFlag(bt, UI_NO_HILITE);
// palette
- uiBlockSetEmboss(block, UI_EMBOSSP);
-
bt=uiDefButF(block, COL, retval, "", FPICK+DPICK, 0, BPICK,BPICK, old, 0.0, 0.0, -1, 0, "Old color, click to restore");
uiButSetFunc(bt, do_palette_cb, bt, col);
uiDefButF(block, COL, retval, "", FPICK+DPICK, BPICK+DPICK, BPICK,60-BPICK-DPICK, col, 0.0, 0.0, -1, 0, "Active color");
@@ -1225,8 +1219,6 @@ void uiBlockPickerButtons(uiBlock *block, float *col, float *hsv, float *old, ch
}
uiBlockEndAlign(block);
- uiBlockSetEmboss(block, UI_EMBOSS);
-
// buttons
rgb_to_hsv(col[0], col[1], col[2], hsv, hsv+1, hsv+2);
sprintf(hexcol, "%02X%02X%02X", (unsigned int)(col[0]*255.0), (unsigned int)(col[1]*255.0), (unsigned int)(col[2]*255.0));
@@ -1266,9 +1258,8 @@ uiBlock *ui_block_func_COL(bContext *C, uiPopupBlockHandle *handle, void *arg_bu
static float hsvcol[3], oldcol[3];
static char hexcol[128];
- block= uiBeginBlock(C, handle->region, "colorpicker", UI_EMBOSS, UI_HELV);
+ block= uiBeginBlock(C, handle->region, "colorpicker", UI_EMBOSS);
block->flag= UI_BLOCK_LOOP|UI_BLOCK_REDRAW|UI_BLOCK_KEEP_OPEN;
- block->themecol= TH_BUT_NUM;
VECCOPY(handle->retvec, but->editvec);
uiBlockPickerButtons(block, handle->retvec, hsvcol, oldcol, hexcol, 'p', 0);
@@ -1280,6 +1271,90 @@ uiBlock *ui_block_func_COL(bContext *C, uiPopupBlockHandle *handle, void *arg_bu
return block;
}
+/* ******************** Color band *************** */
+
+static int vergcband(const void *a1, const void *a2)
+{
+ const CBData *x1=a1, *x2=a2;
+
+ if( x1->pos > x2->pos ) return 1;
+ else if( x1->pos < x2->pos) return -1;
+ return 0;
+}
+
+static void colorband_pos_cb(bContext *C, void *coba_v, void *unused_v)
+{
+ ColorBand *coba= coba_v;
+ int a;
+
+ if(coba->tot<2) return;
+
+ for(a=0; a<coba->tot; a++) coba->data[a].cur= a;
+ qsort(coba->data, coba->tot, sizeof(CBData), vergcband);
+ for(a=0; a<coba->tot; a++) {
+ if(coba->data[a].cur==coba->cur) {
+ /* if(coba->cur!=a) addqueue(curarea->win, REDRAW, 0); */ /* button cur */
+ coba->cur= a;
+ break;
+ }
+ }
+}
+
+static void colorband_add_cb(bContext *C, void *coba_v, void *unused_v)
+{
+ ColorBand *coba= coba_v;
+
+ if(coba->tot < MAXCOLORBAND-1) coba->tot++;
+ coba->cur= coba->tot-1;
+
+ colorband_pos_cb(C, coba, NULL);
+// BIF_undo_push("Add colorband");
+
+}
+
+static void colorband_del_cb(bContext *C, void *coba_v, void *unused_v)
+{
+ ColorBand *coba= coba_v;
+ int a;
+
+ if(coba->tot<2) return;
+
+ for(a=coba->cur; a<coba->tot; a++) {
+ coba->data[a]= coba->data[a+1];
+ }
+ if(coba->cur) coba->cur--;
+ coba->tot--;
+
+// BIF_undo_push("Delete colorband");
+// BIF_preview_changed(ID_TE);
+}
+
+void uiBlockColorbandButtons(uiBlock *block, ColorBand *coba, rctf *butr, int event)
+{
+ CBData *cbd;
+ uiBut *bt;
+ float unit= (butr->xmax-butr->xmin)/14.0f;
+ float xs= butr->xmin;
+
+ cbd= coba->data + coba->cur;
+
+ uiBlockBeginAlign(block);
+ uiDefButF(block, COL, event, "", xs,butr->ymin+20.0f,2.0f*unit,20, &(cbd->r), 0, 0, 0, 0, "");
+ uiDefButF(block, NUM, event, "A:", xs+2.0f*unit,butr->ymin+20.0f,4.0f*unit,20, &(cbd->a), 0.0f, 1.0f, 10, 2, "");
+ bt= uiDefBut(block, BUT, event, "Add", xs+6.0f*unit,butr->ymin+20.0f,2.0f*unit,20, NULL, 0, 0, 0, 0, "Adds a new color position to the colorband");
+ uiButSetFunc(bt, colorband_add_cb, coba, NULL);
+ bt= uiDefBut(block, BUT, event, "Del", xs+8.0f*unit, butr->ymin+20.0f, 2.0f*unit, 20, NULL, 0, 0, 0, 0, "Deletes the active position");
+ uiButSetFunc(bt, colorband_del_cb, coba, NULL);
+
+ uiDefButS(block, MENU, event, "Interpolation %t|Ease %x1|Cardinal %x3|Linear %x0|B-Spline %x2|Constant %x4",
+ xs + 10.0f*unit, butr->ymin+20.0f, unit*4.0f, 20, &coba->ipotype, 0.0, 0.0, 0, 0, "Sets interpolation type");
+
+ uiDefBut(block, BUT_COLORBAND, event, "", xs, butr->ymin, butr->xmax-butr->xmin, 20.0f, coba, 0, 0, 0, 0, "");
+ uiBlockEndAlign(block);
+
+}
+
+
/* ******************** PUPmenu ****************** */
static int pupmenu_set= 0;
@@ -1334,9 +1409,8 @@ uiBlock *ui_block_func_PUPMENU(bContext *C, uiPopupBlockHandle *handle, void *ar
height= 0;
/* block stuff first, need to know the font */
- block= uiBeginBlock(C, handle->region, "menu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, handle->region, "menu", UI_EMBOSSP);
uiBlockSetFlag(block, UI_BLOCK_LOOP|UI_BLOCK_REDRAW|UI_BLOCK_RET_1|UI_BLOCK_NUMSELECT);
- block->themecol= TH_MENU_ITEM;
block->direction= UI_DOWN;
md= decompose_menu_string(info->instr);
@@ -1346,13 +1420,13 @@ uiBlock *ui_block_func_PUPMENU(bContext *C, uiPopupBlockHandle *handle, void *ar
/* size and location, title slightly bigger for bold */
if(md->title) {
- width= 2*strlen(md->title)+UI_GetStringWidth(uiBlockGetCurFont(block), md->title, ui_translate_buttons());
+ width= 2*strlen(md->title)+UI_GetStringWidth(md->title);
width /= columns;
}
else width= 0;
for(a=0; a<md->nitems; a++) {
- xmax= UI_GetStringWidth(uiBlockGetCurFont(block), md->items[a].str, ui_translate_buttons());
+ xmax= UI_GetStringWidth(md->items[a].str);
if(xmax>width) width= xmax;
if(strcmp(md->items[a].str, "%l")==0) height+= PUP_LABELH;
@@ -1418,7 +1492,6 @@ uiBlock *ui_block_func_PUPMENU(bContext *C, uiPopupBlockHandle *handle, void *ar
if(md->title) {
uiBut *bt;
char titlestr[256];
- uiSetCurFont(block, UI_HELVB);
if(md->titleicon) {
width+= 20;
@@ -1429,7 +1502,6 @@ uiBlock *ui_block_func_PUPMENU(bContext *C, uiPopupBlockHandle *handle, void *ar
bt= uiDefBut(block, LABEL, 0, md->title, startx, (short)(starty+height), columns*width, MENU_BUTTON_HEIGHT, NULL, 0.0, 0.0, 0, 0, "");
bt->flag= UI_TEXT_LEFT;
}
- uiSetCurFont(block, UI_HELV);
//uiDefBut(block, SEPR, 0, "", startx, (short)(starty+height)-MENU_SEPR_HEIGHT, width, MENU_SEPR_HEIGHT, NULL, 0.0, 0.0, 0, 0, "");
}
@@ -1498,9 +1570,8 @@ uiBlock *ui_block_func_PUPMENUCOL(bContext *C, uiPopupBlockHandle *handle, void
height= 0;
/* block stuff first, need to know the font */
- block= uiBeginBlock(C, handle->region, "menu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, handle->region, "menu", UI_EMBOSSP);
uiBlockSetFlag(block, UI_BLOCK_LOOP|UI_BLOCK_REDRAW|UI_BLOCK_RET_1|UI_BLOCK_NUMSELECT);
- block->themecol= TH_MENU_ITEM;
block->direction= UI_DOWN;
md= decompose_menu_string(info->instr);
@@ -1521,13 +1592,13 @@ uiBlock *ui_block_func_PUPMENUCOL(bContext *C, uiPopupBlockHandle *handle, void
/* size and location, title slightly bigger for bold */
if(md->title) {
- width= 2*strlen(md->title)+UI_GetStringWidth(uiBlockGetCurFont(block), md->title, ui_translate_buttons());
+ width= 2*strlen(md->title)+UI_GetStringWidth(md->title);
width /= columns;
}
else width= 0;
for(a=0; a<md->nitems; a++) {
- xmax= UI_GetStringWidth(uiBlockGetCurFont(block), md->items[a].str, ui_translate_buttons());
+ xmax= UI_GetStringWidth(md->items[a].str);
if(xmax>width) width= xmax;
}
@@ -1592,7 +1663,6 @@ uiBlock *ui_block_func_PUPMENUCOL(bContext *C, uiPopupBlockHandle *handle, void
/* here we go! */
if(md->title) {
uiBut *bt;
- uiSetCurFont(block, UI_HELVB);
if(md->titleicon) {
}
@@ -1600,7 +1670,6 @@ uiBlock *ui_block_func_PUPMENUCOL(bContext *C, uiPopupBlockHandle *handle, void
bt= uiDefBut(block, LABEL, 0, md->title, startx, (short)(starty+rows*MENU_BUTTON_HEIGHT), columns*width, MENU_BUTTON_HEIGHT, NULL, 0.0, 0.0, 0, 0, "");
bt->flag= UI_TEXT_LEFT;
}
- uiSetCurFont(block, UI_HELV);
}
for(a=0; a<md->nitems; a++) {
@@ -1643,48 +1712,13 @@ uiBlock *ui_block_func_PUPMENUCOL(bContext *C, uiPopupBlockHandle *handle, void
/* prototype */
static uiBlock *ui_block_func_MENU_ITEM(bContext *C, uiPopupBlockHandle *handle, void *arg_info);
-#define MAX_MENU_STR 64
-
-/* type, internal */
-#define MENU_ITEM_TITLE 0
-#define MENU_ITEM_ITEM 1
-#define MENU_ITEM_SEPARATOR 2
-#define MENU_ITEM_OPNAME 10
-#define MENU_ITEM_OPNAME_BOOL 11
-#define MENU_ITEM_OPNAME_ENUM 12
-#define MENU_ITEM_OPNAME_INT 13
-#define MENU_ITEM_OPNAME_FLOAT 14
-#define MENU_ITEM_OPNAME_STRING 15
-#define MENU_ITEM_RNA_BOOL 20
-#define MENU_ITEM_RNA_ENUM 21
-#define MENU_ITEM_LEVEL 30
-#define MENU_ITEM_LEVEL_OPNAME_ENUM 31
-#define MENU_ITEM_LEVEL_RNA_ENUM 32
-
-struct uiMenuItem {
- struct uiMenuItem *next, *prev;
-
- int type;
- int icon;
- char name[MAX_MENU_STR];
-
- char *opname; /* static string */
- char *propname; /* static string */
-
- int retval, enumval, boolval, intval;
- float fltval;
- char *strval;
- int opcontext;
- uiMenuHandleFunc eventfunc;
- void *argv;
- uiMenuCreateFunc newlevel;
- PointerRNA rnapoin;
-
- ListBase items;
+struct uiPopupMenu {
+ uiBlock *block;
+ uiLayout *layout;
};
typedef struct uiMenuInfo {
- uiMenuItem *head;
+ uiPopupMenu *pup;
int mx, my, popup, slideout;
int startx, starty;
} uiMenuInfo;
@@ -1725,204 +1759,29 @@ typedef struct MenuItemLevel {
PointerRNA rnapoin;
} MenuItemLevel;
-/* make a menu level from enum properties */
-static void menu_item_enum_opname_menu(bContext *C, uiMenuItem *head, void *arg)
-{
- MenuItemLevel *lvl= (MenuItemLevel*)(((uiBut*)arg)->func_argN);
-
- head->opcontext= lvl->opcontext;
- uiMenuItemsEnumO(head, lvl->opname, lvl->propname);
-}
-
-static void menu_item_enum_rna_menu(bContext *C, uiMenuItem *head, void *arg)
-{
- MenuItemLevel *lvl= (MenuItemLevel*)(((uiBut*)arg)->func_argN);
-
- head->opcontext= lvl->opcontext;
- uiMenuItemsEnumR(head, &lvl->rnapoin, lvl->propname);
-}
-
static uiBlock *ui_block_func_MENU_ITEM(bContext *C, uiPopupBlockHandle *handle, void *arg_info)
{
uiBlock *block;
- uiBut *but;
uiMenuInfo *info= arg_info;
- uiMenuItem *head, *item;
- MenuItemLevel *lvl;
+ uiPopupMenu *pup;
ScrArea *sa;
ARegion *ar;
- static int counter= 0;
- int width, height, icon;
- int startx, starty, x1, y1;
- char str[16];
- head= info->head;
- height= 0;
+ pup= info->pup;
+ block= pup->block;
/* block stuff first, need to know the font */
- sprintf(str, "tb %d", counter++);
- block= uiBeginBlock(C, handle->region, str, UI_EMBOSSP, UI_HELV);
- uiBlockSetButmFunc(block, head->eventfunc, head->argv);
- block->themecol= TH_MENU_ITEM;
+ uiBlockSetRegion(block, handle->region);
block->direction= UI_DOWN;
- width= 50; // fixed with, uiMenuPopupBoundsBlock will compute actual width
-
- for(item= head->items.first; item; item= item->next) {
- if(0) height+= PUP_LABELH; // XXX sepr line
- else height+= MENU_BUTTON_HEIGHT;
- }
-
- startx= 0;
- starty= 0;
-
- /* here we go! */
- if(head->name[0]) {
- char titlestr[256];
- uiSetCurFont(block, UI_HELVB);
-
- if(head->icon) {
- width+= 20;
- sprintf(titlestr, " %s", head->name);
- uiDefIconTextBut(block, LABEL, 0, head->icon, titlestr, startx, (short)(starty+height), width, MENU_BUTTON_HEIGHT, NULL, 0.0, 0.0, 0, 0, "");
- }
- else {
- but= uiDefBut(block, LABEL, 0, head->name, startx, (short)(starty+height), width, MENU_BUTTON_HEIGHT, NULL, 0.0, 0.0, 0, 0, "");
- but->flag= UI_TEXT_LEFT;
- }
- uiSetCurFont(block, UI_HELV);
-
- //uiDefBut(block, SEPR, 0, "", startx, (short)(starty+height)-MENU_SEPR_HEIGHT, width, MENU_SEPR_HEIGHT, NULL, 0.0, 0.0, 0, 0, "");
- }
-
- x1= startx;
- y1= starty + height - MENU_BUTTON_HEIGHT; // - MENU_SEPR_HEIGHT;
-
- for(item= head->items.first; item; item= item->next) {
-
- if(item->type==MENU_ITEM_LEVEL) {
- uiDefIconTextMenuBut(block, item->newlevel, NULL, ICON_RIGHTARROW_THIN, item->name, x1, y1, width+16, MENU_BUTTON_HEIGHT-1, NULL);
- y1 -= MENU_BUTTON_HEIGHT;
- }
- else if(item->type==MENU_ITEM_LEVEL_OPNAME_ENUM) {
- but= uiDefIconTextMenuBut(block, menu_item_enum_opname_menu, NULL, ICON_RIGHTARROW_THIN, item->name, x1, y1, width+16, MENU_BUTTON_HEIGHT-1, NULL);
-
- /* XXX warning, abuse of func_arg! */
- lvl= MEM_callocN(sizeof(MenuItemLevel), "MenuItemLevel");
- lvl->opname= item->opname;
- lvl->propname= item->propname;
- lvl->opcontext= item->opcontext;
-
- but->poin= (char*)but;
- but->func_argN= lvl;
-
- y1 -= MENU_BUTTON_HEIGHT;
- }
- else if(item->type==MENU_ITEM_LEVEL_RNA_ENUM) {
- but= uiDefIconTextMenuBut(block, menu_item_enum_rna_menu, NULL, ICON_RIGHTARROW_THIN, item->name, x1, y1, width+16, MENU_BUTTON_HEIGHT-1, NULL);
-
- /* XXX warning, abuse of func_arg! */
- lvl= MEM_callocN(sizeof(MenuItemLevel), "MenuItemLevel");
- lvl->rnapoin= item->rnapoin;
- lvl->propname= item->propname;
- lvl->opcontext= item->opcontext;
-
- but->poin= (char*)but;
- but->func_argN= lvl;
-
- y1 -= MENU_BUTTON_HEIGHT;
- }
- else if(item->type==MENU_ITEM_OPNAME_BOOL) {
- but= uiDefIconTextButO(block, BUTM, item->opname, item->opcontext, item->icon, item->name, x1, y1, width+16, MENU_BUTTON_HEIGHT-1, "");
- RNA_boolean_set(uiButGetOperatorPtrRNA(but), item->propname, item->boolval);
-
- y1 -= MENU_BUTTON_HEIGHT;
- }
- else if(item->type==MENU_ITEM_OPNAME_ENUM) {
- const char *name;
- char bname[64];
-
- /* If no name is given, use the enum name */
- if (item->name[0] == '\0')
- name= ui_menu_enumpropname(item->opname, item->propname, item->enumval);
- else
- name= item->name;
-
- BLI_strncpy(bname, name, sizeof(bname));
-
- but= uiDefIconTextButO(block, BUTM, item->opname, item->opcontext, item->icon, bname, x1, y1, width+16, MENU_BUTTON_HEIGHT-1, "");
- RNA_enum_set(uiButGetOperatorPtrRNA(but), item->propname, item->enumval);
-
- y1 -= MENU_BUTTON_HEIGHT;
- }
- else if(item->type==MENU_ITEM_OPNAME_INT) {
- but= uiDefIconTextButO(block, BUTM, item->opname, head->opcontext, item->icon, item->name, x1, y1, width+16, MENU_BUTTON_HEIGHT-1, "");
- RNA_int_set(uiButGetOperatorPtrRNA(but), item->propname, item->intval);
-
- y1 -= MENU_BUTTON_HEIGHT;
- }
- else if(item->type==MENU_ITEM_OPNAME_FLOAT) {
- but= uiDefIconTextButO(block, BUTM, item->opname, item->opcontext, item->icon, item->name, x1, y1, width+16, MENU_BUTTON_HEIGHT-1, "");
- RNA_float_set(uiButGetOperatorPtrRNA(but), item->propname, item->fltval);
-
- y1 -= MENU_BUTTON_HEIGHT;
- }
- else if(item->type==MENU_ITEM_OPNAME_STRING) {
- but= uiDefIconTextButO(block, BUTM, item->opname, item->opcontext, item->icon, item->name, x1, y1, width+16, MENU_BUTTON_HEIGHT-1, "");
- RNA_string_set(uiButGetOperatorPtrRNA(but), item->propname, item->strval);
-
- y1 -= MENU_BUTTON_HEIGHT;
- }
- else if(item->type==MENU_ITEM_OPNAME) {
- uiDefIconTextButO(block, BUTM, item->opname, item->opcontext, item->icon, NULL, x1, y1, width+16, MENU_BUTTON_HEIGHT-1, NULL);
- y1 -= MENU_BUTTON_HEIGHT;
- }
- else if(item->type==MENU_ITEM_RNA_BOOL) {
- PropertyRNA *prop= RNA_struct_find_property(&item->rnapoin, item->propname);
-
- if(prop && RNA_property_type(&item->rnapoin, prop) == PROP_BOOLEAN) {
- icon= (RNA_property_boolean_get(&item->rnapoin, prop))? ICON_CHECKBOX_HLT: ICON_CHECKBOX_DEHLT;
- uiDefIconTextButR(block, TOG, 0, icon, NULL, x1, y1, width+16, MENU_BUTTON_HEIGHT-1, &item->rnapoin, item->propname, 0, 0, 0, 0, 0, NULL);
- }
- else {
- uiBlockSetButLock(block, 1, "");
- uiDefIconTextBut(block, BUT, 0, ICON_BLANK1, item->propname, x1, y1, width+16, MENU_BUTTON_HEIGHT-1, NULL, 0.0, 0.0, 0, 0, "");
- uiBlockClearButLock(block);
- }
-
- y1 -= MENU_BUTTON_HEIGHT;
- }
- else if(item->type==MENU_ITEM_RNA_ENUM) {
- PropertyRNA *prop= RNA_struct_find_property(&item->rnapoin, item->propname);
-
- if(prop && RNA_property_type(&item->rnapoin, prop) == PROP_ENUM) {
- icon= (RNA_property_enum_get(&item->rnapoin, prop) == item->enumval)? ICON_CHECKBOX_HLT: ICON_CHECKBOX_DEHLT;
- uiDefIconTextButR(block, ROW, 0, icon, NULL, x1, y1, width+16, MENU_BUTTON_HEIGHT-1, &item->rnapoin, item->propname, 0, 0, item->enumval, 0, 0, NULL);
- }
- else {
- uiBlockSetButLock(block, 1, "");
- uiDefIconTextBut(block, BUT, 0, ICON_BLANK1, item->propname, x1, y1, width+16, MENU_BUTTON_HEIGHT-1, NULL, 0.0, 0.0, 0, 0, "");
- uiBlockClearButLock(block);
- }
-
- y1 -= MENU_BUTTON_HEIGHT;
- }
- else if(item->type == MENU_ITEM_ITEM) {
- uiDefIconTextButF(block, BUTM, B_NOP, item->icon, item->name, x1, y1, width+16, MENU_BUTTON_HEIGHT-1, &handle->retvalue, 0.0, 0.0, 0, item->retval, "");
- y1 -= MENU_BUTTON_HEIGHT;
- }
- else {
- uiDefBut(block, SEPR, 0, "", x1, y1, width+16, MENU_SEPR_HEIGHT-1, NULL, 0.0, 0.0, 0, 0, "");
- y1 -= MENU_SEPR_HEIGHT;
- }
- }
+ uiBlockLayoutResolve(C, block, NULL, NULL);
if(info->popup) {
uiBlockSetFlag(block, UI_BLOCK_LOOP|UI_BLOCK_REDRAW|UI_BLOCK_NUMSELECT|UI_BLOCK_RET_1);
uiBlockSetDirection(block, UI_DOWN);
/* here we set an offset for the mouse position */
- uiMenuPopupBoundsBlock(block, 1, 0, -height+MENU_BUTTON_HEIGHT/2);
+ uiMenuPopupBoundsBlock(block, 1, 0, 1.5*MENU_BUTTON_HEIGHT);
}
else {
/* for a header menu we set the direction automatic */
@@ -1952,263 +1811,72 @@ static uiBlock *ui_block_func_MENU_ITEM(bContext *C, uiPopupBlockHandle *handle,
uiPopupBlockHandle *ui_popup_menu_create(bContext *C, ARegion *butregion, uiBut *but, uiMenuCreateFunc menu_func, void *arg)
{
+ uiStyle *style= U.uistyles.first;
uiPopupBlockHandle *handle;
- uiMenuItem *head;
+ uiPopupMenu *pup;
uiMenuInfo info;
- head= MEM_callocN(sizeof(uiMenuItem), "menu dummy");
- head->opcontext= WM_OP_INVOKE_REGION_WIN;
+ pup= MEM_callocN(sizeof(uiPopupMenu), "menu dummy");
+ pup->block= uiBeginBlock(C, NULL, "ui_popup_menu_create", UI_EMBOSSP);
+ pup->layout= uiBlockLayout(pup->block, UI_LAYOUT_VERTICAL, UI_LAYOUT_MENU, 0, 0, 200, 0, style);
+ uiLayoutContext(pup->layout, WM_OP_INVOKE_REGION_WIN);
+
+ /* create in advance so we can let buttons point to retval already */
+ pup->block->handle= MEM_callocN(sizeof(uiPopupBlockHandle), "uiPopupBlockHandle");
- menu_func(C, head, arg);
+ menu_func(C, pup->layout, arg);
memset(&info, 0, sizeof(info));
- info.head= head;
+ info.pup= pup;
info.slideout= (but && (but->block->flag & UI_BLOCK_LOOP));
handle= ui_popup_block_create(C, butregion, but, NULL, ui_block_func_MENU_ITEM, &info);
- BLI_freelistN(&head->items);
- MEM_freeN(head);
+ MEM_freeN(pup);
return handle;
}
/*************************** Menu Creating API **************************/
-/* internal add func */
-static uiMenuItem *ui_menu_add_item(uiMenuItem *head, const char *name, int icon, int argval)
-{
- uiMenuItem *item= MEM_callocN(sizeof(uiMenuItem), "menu item");
-
- BLI_strncpy(item->name, name, MAX_MENU_STR);
- if(icon)
- item->icon= icon;
- else
- item->icon= ICON_BLANK1;
- item->retval= argval;
-
- item->opcontext= head->opcontext;
-
- BLI_addtail(&head->items, item);
-
- return item;
-}
-
-/* set callback for regular items */
-void uiMenuFunc(uiMenuItem *head, void (*eventfunc)(bContext *, void *, int), void *argv)
-{
- head->eventfunc= eventfunc;
- head->argv= argv;
-}
-/* optionally set different context for all items in one level */
-void uiMenuContext(uiMenuItem *head, int opcontext)
-{
- head->opcontext= opcontext;
-}
-
-
-/* regular item, with retval */
-void uiMenuItemVal(uiMenuItem *head, const char *name, int icon, int argval)
-{
- uiMenuItem *item= ui_menu_add_item(head, name, icon, argval);
-
- item->type = MENU_ITEM_ITEM;
-}
-
-/* regular operator item */
-void uiMenuItemO(uiMenuItem *head, int icon, char *opname)
-{
- uiMenuItem *item= ui_menu_add_item(head, "", icon, 0);
-
- item->opname= opname; // static!
- item->type = MENU_ITEM_OPNAME;
-}
-
-/* single operator item with property */
-void uiMenuItemEnumO(uiMenuItem *head, const char *name, int icon, char *opname, char *propname, int value)
-{
- uiMenuItem *item= ui_menu_add_item(head, name, icon, 0);
-
- item->opname= opname; // static!
- item->propname= propname; // static!
- item->enumval= value;
- item->type = MENU_ITEM_OPNAME_ENUM;
-}
-
-/* single operator item with property */
-void uiMenuItemIntO(uiMenuItem *head, const char *name, int icon, char *opname, char *propname, int value)
-{
- uiMenuItem *item= ui_menu_add_item(head, name, icon, 0);
-
- item->opname= opname; // static!
- item->propname= propname; // static!
- item->intval= value;
- item->type = MENU_ITEM_OPNAME_INT;
-}
-
-/* single operator item with property */
-void uiMenuItemFloatO(uiMenuItem *head, const char *name, int icon, char *opname, char *propname, float value)
-{
- uiMenuItem *item= ui_menu_add_item(head, name, icon, 0);
-
- item->opname= opname; // static!
- item->propname= propname; // static!
- item->fltval= value;
- item->type = MENU_ITEM_OPNAME_FLOAT;
-}
-
-/* single operator item with property */
-void uiMenuItemBooleanO(uiMenuItem *head, const char *name, int icon, char *opname, char *propname, int value)
-{
- uiMenuItem *item= ui_menu_add_item(head, name, icon, 0);
-
- item->opname= opname; // static!
- item->propname= propname; // static!
- item->boolval= value;
- item->type = MENU_ITEM_OPNAME_BOOL;
-}
-
-/* single operator item with property */
-void uiMenuItemStringO(uiMenuItem *head, const char *name, int icon, char *opname, char *propname, char *value)
-{
- uiMenuItem *item= ui_menu_add_item(head, name, icon, 0);
-
- item->opname= opname; // static!
- item->propname= propname; // static!
- item->strval= value;
- item->type = MENU_ITEM_OPNAME_STRING;
-}
-
-/* add all operator items with property */
-void uiMenuItemsEnumO(uiMenuItem *head, char *opname, char *propname)
-{
- wmOperatorType *ot= WM_operatortype_find(opname);
- PointerRNA ptr;
- PropertyRNA *prop;
-
- if(!ot || !ot->srna)
- return;
-
- RNA_pointer_create(NULL, ot->srna, NULL, &ptr);
- prop= RNA_struct_find_property(&ptr, propname);
-
- if(prop && RNA_property_type(&ptr, prop) == PROP_ENUM) {
- const EnumPropertyItem *item;
- int totitem, i;
-
- RNA_property_enum_items(&ptr, prop, &item, &totitem);
-
- for (i=0; i<totitem; i++)
- uiMenuItemEnumO(head, "", 0, opname, propname, item[i].value);
- }
-}
-
-/* rna property toggle */
-void uiMenuItemBooleanR(uiMenuItem *head, PointerRNA *ptr, char *propname)
-{
- uiMenuItem *item= ui_menu_add_item(head, "", 0, 0);
-
- item->propname= propname; // static!
- item->rnapoin= *ptr;
- item->type = MENU_ITEM_RNA_BOOL;
-}
+/*************************** Popup Menu API **************************/
-void uiMenuItemEnumR(uiMenuItem *head, PointerRNA *ptr, char *propname, int value)
+/* only return handler, and set optional title */
+uiPopupMenu *uiPupMenuBegin(bContext *C, const char *title, int icon)
{
- uiMenuItem *item= ui_menu_add_item(head, "", 0, 0);
+ uiStyle *style= U.uistyles.first;
+ uiPopupMenu *pup= MEM_callocN(sizeof(uiPopupMenu), "menu start");
+ uiBut *but;
- item->propname= propname; // static!
- item->rnapoin= *ptr;
- item->enumval= value;
- item->type = MENU_ITEM_RNA_ENUM;
-}
+ pup->block= uiBeginBlock(C, NULL, "uiPupMenuBegin", UI_EMBOSSP);
+ pup->layout= uiBlockLayout(pup->block, UI_LAYOUT_VERTICAL, UI_LAYOUT_MENU, 0, 0, 200, 0, style);
+ uiLayoutContext(pup->layout, WM_OP_EXEC_REGION_WIN);
-/* add all rna items with property */
-void uiMenuItemsEnumR(uiMenuItem *head, PointerRNA *ptr, char *propname)
-{
- PropertyRNA *prop;
-
- prop= RNA_struct_find_property(ptr, propname);
+ /* create in advance so we can let buttons point to retval already */
+ pup->block->handle= MEM_callocN(sizeof(uiPopupBlockHandle), "uiPopupBlockHandle");
- if(prop && RNA_property_type(ptr, prop) == PROP_ENUM) {
- const EnumPropertyItem *item;
- int totitem, i;
+ /* create title button */
+ if(title && title[0]) {
+ char titlestr[256];
- RNA_property_enum_items(ptr, prop, &item, &totitem);
+ if(icon) {
+ sprintf(titlestr, " %s", title);
+ uiDefIconTextBut(pup->block, LABEL, 0, icon, titlestr, 0, 0, 200, MENU_BUTTON_HEIGHT, NULL, 0.0, 0.0, 0, 0, "");
+ }
+ else {
+ but= uiDefBut(pup->block, LABEL, 0, (char*)title, 0, 0, 200, MENU_BUTTON_HEIGHT, NULL, 0.0, 0.0, 0, 0, "");
+ but->flag= UI_TEXT_LEFT;
+ }
- for (i=0; i<totitem; i++)
- uiMenuItemEnumR(head, ptr, propname, item[i].value);
+ //uiDefBut(block, SEPR, 0, "", startx, (short)(starty+height)-MENU_SEPR_HEIGHT, width, MENU_SEPR_HEIGHT, NULL, 0.0, 0.0, 0, 0, "");
}
-}
-
-/* generic new menu level */
-void uiMenuLevel(uiMenuItem *head, const char *name, uiMenuCreateFunc newlevel)
-{
- uiMenuItem *item= ui_menu_add_item(head, name, 0, 0);
-
- item->type = MENU_ITEM_LEVEL;
- item->newlevel= newlevel;
-}
-
-/* make a new level from enum properties */
-void uiMenuLevelEnumO(uiMenuItem *head, char *opname, char *propname)
-{
- uiMenuItem *item= ui_menu_add_item(head, "", 0, 0);
- wmOperatorType *ot;
-
- item->type = MENU_ITEM_LEVEL_OPNAME_ENUM;
- ot= WM_operatortype_find(opname);
- if(ot)
- BLI_strncpy(item->name, ot->name, MAX_MENU_STR);
-
- item->opname= opname; // static!
- item->propname= propname; // static!
-}
-
-/* make a new level from enum properties */
-void uiMenuLevelEnumR(uiMenuItem *head, PointerRNA *ptr, char *propname)
-{
- uiMenuItem *item= ui_menu_add_item(head, "", 0, 0);
- PropertyRNA *prop;
-
- item->type = MENU_ITEM_LEVEL_RNA_ENUM;
- prop= RNA_struct_find_property(ptr, propname);
- if(prop)
- BLI_strncpy(item->name, RNA_property_ui_name(ptr, prop), MAX_MENU_STR);
- item->rnapoin= *ptr;
- item->propname= propname; // static!
-}
-
-/* separator */
-void uiMenuSeparator(uiMenuItem *head)
-{
- uiMenuItem *item= ui_menu_add_item(head, "", 0, 0);
-
- item->type = MENU_ITEM_SEPARATOR;
-}
-
-/*************************** Popup Menu API **************************/
-
-/* only return handler, and set optional title */
-uiMenuItem *uiPupMenuBegin(const char *title, int icon)
-{
- uiMenuItem *item= MEM_callocN(sizeof(uiMenuItem), "menu start");
-
- item->type = MENU_ITEM_TITLE;
- item->opcontext= WM_OP_EXEC_REGION_WIN;
- item->icon= icon;
-
- /* NULL is no title */
- if(title)
- BLI_strncpy(item->name, title, MAX_MENU_STR);
-
- return item;
+ return pup;
}
/* set the whole structure to work */
-void uiPupMenuEnd(bContext *C, uiMenuItem *head)
+void uiPupMenuEnd(bContext *C, uiPopupMenu *pup)
{
wmWindow *window= CTX_wm_window(C);
uiMenuInfo info;
@@ -2218,7 +1886,7 @@ void uiPupMenuEnd(bContext *C, uiMenuItem *head)
info.popup= 1;
info.mx= window->eventstate->x;
info.my= window->eventstate->y;
- info.head= head;
+ info.pup= pup;
menu= ui_popup_block_create(C, NULL, NULL, NULL, ui_block_func_MENU_ITEM, &info);
menu->popup= 1;
@@ -2226,8 +1894,12 @@ void uiPupMenuEnd(bContext *C, uiMenuItem *head)
UI_add_popup_handlers(C, &window->handlers, menu);
WM_event_add_mousemove(C);
- BLI_freelistN(&head->items);
- MEM_freeN(head);
+ MEM_freeN(pup);
+}
+
+uiLayout *uiPupMenuLayout(uiPopupMenu *pup)
+{
+ return pup->layout;
}
/* ************** standard pupmenus *************** */
@@ -2396,7 +2068,7 @@ void uiPupBlockO(bContext *C, uiBlockCreateFunc func, void *arg, char *opname, i
handle= ui_popup_block_create(C, NULL, NULL, func, NULL, arg);
handle->popup= 1;
- handle->opname= opname;
+ handle->optype= (opname)? WM_operatortype_find(opname): NULL;
handle->opcontext= opcontext;
UI_add_popup_handlers(C, &window->handlers, handle);
diff --git a/source/blender/editors/interface/interface_style.c b/source/blender/editors/interface/interface_style.c
new file mode 100644
index 00000000000..34f4d7294ee
--- /dev/null
+++ b/source/blender/editors/interface/interface_style.c
@@ -0,0 +1,267 @@
+/**
+* ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2009 Blender Foundation.
+ * All rights reserved.
+ *
+ * Contributor(s): Blender Foundation
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include <limits.h>
+#include <math.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "MEM_guardedalloc.h"
+
+#include "DNA_ID.h"
+#include "DNA_screen_types.h"
+#include "DNA_userdef_types.h"
+#include "DNA_windowmanager_types.h"
+
+#include "BLI_arithb.h"
+#include "BLI_listbase.h"
+#include "BLI_rect.h"
+#include "BLI_string.h"
+
+#include "BKE_context.h"
+#include "BKE_global.h"
+#include "BKE_utildefines.h"
+
+#include "BIF_gl.h"
+#include "BIF_glutil.h"
+
+#include "BLF_api.h"
+
+#include "UI_interface.h"
+#include "UI_interface_icons.h"
+#include "UI_resources.h"
+#include "UI_view2d.h"
+
+#include "ED_datafiles.h"
+#include "ED_util.h"
+#include "ED_types.h"
+
+#include "interface_intern.h"
+
+
+/* style + theme + layout-engine = UI */
+
+/*
+ This is a complete set of layout rules, the 'state' of the Layout
+ Engine. Multiple styles are possible, defined via C or Python. Styles
+ get a name, and will typically get activated per region type, like
+ "Header", or "Listview" or "Toolbar". Properties of Style definitions
+ are:
+
+ - default collumn properties, internal spacing, aligning, min/max width
+ - button alignment rules (for groups)
+ - label placement rules
+ - internal labeling or external labeling default
+ - default minimum widths for buttons/labels (in amount of characters)
+ - font types, styles and relative sizes for Panel titles, labels, etc.
+
+*/
+
+
+/* ********************************************** */
+
+static uiStyle *ui_style_new(ListBase *styles, const char *name)
+{
+ uiStyle *style= MEM_callocN(sizeof(uiStyle), "new style");
+
+ BLI_addtail(styles, style);
+ BLI_strncpy(style->name, name, MAX_STYLE_NAME);
+
+ style->paneltitle.uifont_id= UIFONT_DEFAULT;
+ style->paneltitle.points= 13;
+ style->paneltitle.shadow= 5;
+ style->paneltitle.shadx= 2;
+ style->paneltitle.shady= -2;
+ style->paneltitle.shadowalpha= 0.25f;
+ style->paneltitle.shadowcolor= 0.0f;
+
+ style->grouplabel.uifont_id= UIFONT_DEFAULT;
+ style->grouplabel.points= 12;
+ style->grouplabel.shadow= 3;
+ style->grouplabel.shadx= 1;
+ style->grouplabel.shady= -1;
+ style->grouplabel.shadowalpha= 0.25f;
+
+ style->widgetlabel.uifont_id= UIFONT_DEFAULT;
+ style->widgetlabel.points= 11;
+ style->widgetlabel.shadow= 3;
+ style->widgetlabel.shadx= 1;
+ style->widgetlabel.shady= -1;
+ style->widgetlabel.shadowalpha= 0.3f;
+ style->widgetlabel.shadowcolor= 1.0f;
+
+ style->widget.uifont_id= UIFONT_DEFAULT;
+ style->widget.points= 11;
+ style->widget.shadowalpha= 0.25f;
+
+ style->columnspace= 5;
+ style->templatespace= 5;
+ style->boxspace= 5;
+ style->buttonspacex= 5;
+ style->buttonspacey= 2;
+ style->panelspace= 8;
+ style->panelouter= 4;
+
+ return style;
+}
+
+static uiFont *uifont_to_blfont(int id)
+{
+ uiFont *font= U.uifonts.first;
+
+ for(; font; font= font->next) {
+ if(font->uifont_id==id) {
+ return font;
+ }
+ }
+ return U.uifonts.first;
+}
+
+/* *************** draw ************************ */
+
+static void ui_font_shadow_draw(uiFontStyle *fs, int x, int y, char *str)
+{
+ float color[4];
+
+ glGetFloatv(GL_CURRENT_COLOR, color);
+
+ glColor4f(fs->shadowcolor, fs->shadowcolor, fs->shadowcolor, fs->shadowalpha);
+
+ BLF_blur(fs->shadow);
+ BLF_position(x+fs->shadx, y+fs->shady, 0.0f);
+ BLF_draw(str);
+ BLF_blur(0);
+
+ glColor4fv(color);
+}
+
+void uiStyleFontDraw(uiFontStyle *fs, rcti *rect, char *str)
+{
+ float height;
+ int xofs=0, yofs;
+
+ uiStyleFontSet(fs);
+
+ height= BLF_height("A");
+ yofs= floor( 0.5f*(rect->ymax - rect->ymin - height));
+
+ if(fs->align==UI_STYLE_TEXT_CENTER)
+ xofs= floor( 0.5f*(rect->xmax - rect->xmin - BLF_width(str)));
+ else if(fs->align==UI_STYLE_TEXT_RIGHT)
+ xofs= rect->xmax - rect->xmin - BLF_width(str);
+
+ /* clip is very strict, so we give it some space */
+ BLF_clipping(rect->xmin-4, rect->ymin-4, rect->xmax+4, rect->ymax+4);
+ BLF_enable(BLF_CLIPPING);
+
+ if(fs->shadow)
+ ui_font_shadow_draw(fs, rect->xmin+xofs, rect->ymin+yofs, str);
+
+ BLF_position(rect->xmin+xofs, rect->ymin+yofs, 0.0f);
+ BLF_draw(str);
+
+ BLF_disable(BLF_CLIPPING);
+}
+
+/* ************** helpers ************************ */
+
+/* temporarily, does widget font */
+int UI_GetStringWidth(char *str)
+{
+ uiStyle *style= U.uistyles.first;
+
+ uiStyleFontSet(&style->widget);
+ return BLF_width(str);
+}
+
+/* temporarily, does widget font */
+void UI_DrawString(float x, float y, char *str)
+{
+ uiStyle *style= U.uistyles.first;
+
+ uiStyleFontSet(&style->widget);
+ BLF_position(x, y, 0.0f);
+ BLF_draw(str);
+}
+
+/* ************** init exit ************************ */
+
+/* called on each .B.blend read */
+/* reading without uifont will create one */
+void uiStyleInit(void)
+{
+ uiFont *font= U.uifonts.first;
+ uiStyle *style= U.uistyles.first;
+
+ /* recover from uninitialized dpi */
+ CLAMP(U.dpi, 72, 240);
+
+ /* default builtin */
+ if(font==NULL) {
+ font= MEM_callocN(sizeof(uiFont), "ui font");
+ BLI_addtail(&U.uifonts, font);
+
+ strcpy(font->filename, "default");
+ font->uifont_id= UIFONT_DEFAULT;
+ }
+
+ for(font= U.uifonts.first; font; font= font->next) {
+
+ if(font->uifont_id==UIFONT_DEFAULT) {
+ font->blf_id= BLF_load_mem("default", (unsigned char*)datatoc_bfont_ttf, datatoc_bfont_ttf_size);
+ }
+ else {
+ font->blf_id= BLF_load(font->filename);
+ if(font->blf_id == -1)
+ font->blf_id= BLF_load_mem("default", (unsigned char*)datatoc_bfont_ttf, datatoc_bfont_ttf_size);
+ }
+
+ if (font->blf_id == -1)
+ printf("uiStyleInit error, no fonts available\n");
+ else {
+ BLF_set(font->blf_id);
+ /* ? just for speed to initialize?
+ * Yes, this build the glyph cache and create
+ * the texture.
+ */
+ BLF_size(11, U.dpi);
+ BLF_size(12, U.dpi);
+ BLF_size(14, U.dpi);
+ }
+ }
+
+ if(style==NULL) {
+ ui_style_new(&U.uistyles, "Default Style");
+ }
+}
+
+void uiStyleFontSet(uiFontStyle *fs)
+{
+ uiFont *font= uifont_to_blfont(fs->uifont_id);
+
+ BLF_set(font->blf_id);
+ BLF_size(fs->points, U.dpi);
+}
+
diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c
new file mode 100644
index 00000000000..8969e2b69ae
--- /dev/null
+++ b/source/blender/editors/interface/interface_templates.c
@@ -0,0 +1,238 @@
+/**
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Contributor(s): Blender Foundation 2009.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include <stdlib.h>
+
+#include "MEM_guardedalloc.h"
+
+#include "BLI_string.h"
+
+#include "BKE_context.h"
+#include "BKE_library.h"
+#include "BKE_utildefines.h"
+
+#include "ED_screen.h"
+
+#include "RNA_access.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+
+#include "UI_interface.h"
+#include "UI_resources.h"
+
+void ui_template_fix_linking()
+{
+}
+
+/********************** Header Template *************************/
+
+void uiTemplateHeader(uiLayout *layout, bContext *C)
+{
+ uiBlock *block;
+
+ block= uiLayoutFreeBlock(layout);
+ ED_area_header_standardbuttons(C, block, 0);
+}
+
+/******************* Header ID Template ************************/
+
+typedef struct TemplateHeaderID {
+ PointerRNA ptr;
+ PropertyRNA *prop;
+
+ int flag;
+ short browse;
+
+ char newop[256];
+ char openop[256];
+ char unlinkop[256];
+} TemplateHeaderID;
+
+static void template_header_id_cb(bContext *C, void *arg_litem, void *arg_event)
+{
+ TemplateHeaderID *template= (TemplateHeaderID*)arg_litem;
+ PointerRNA idptr= RNA_property_pointer_get(&template->ptr, template->prop);
+ ID *idtest, *id= idptr.data;
+ ListBase *lb= wich_libbase(CTX_data_main(C), ID_TXT);
+ int nr, event= GET_INT_FROM_POINTER(arg_event);
+
+ if(event == UI_ID_BROWSE && template->browse == 32767)
+ event= UI_ID_ADD_NEW;
+ else if(event == UI_ID_BROWSE && template->browse == 32766)
+ event= UI_ID_OPEN;
+
+ switch(event) {
+ case UI_ID_BROWSE: {
+ if(template->browse== -2) {
+ /* XXX implement or find a replacement
+ * activate_databrowse((ID *)G.buts->lockpoin, GS(id->name), 0, B_MESHBROWSE, &template->browse, do_global_buttons); */
+ return;
+ }
+ if(template->browse < 0)
+ return;
+
+ for(idtest=lb->first, nr=1; idtest; idtest=idtest->next, nr++) {
+ if(nr==template->browse) {
+ if(id == idtest)
+ return;
+
+ id= idtest;
+ RNA_id_pointer_create(id, &idptr);
+ RNA_property_pointer_set(&template->ptr, template->prop, idptr);
+ RNA_property_update(C, &template->ptr, template->prop);
+ /* XXX */
+
+ break;
+ }
+ }
+ break;
+ }
+#if 0
+ case UI_ID_DELETE:
+ id= NULL;
+ break;
+ case UI_ID_FAKE_USER:
+ if(id) {
+ if(id->flag & LIB_FAKEUSER) id->us++;
+ else id->us--;
+ }
+ else return;
+ break;
+#endif
+ case UI_ID_PIN:
+ break;
+ case UI_ID_ADD_NEW:
+ WM_operator_name_call(C, template->newop, WM_OP_INVOKE_REGION_WIN, NULL);
+ break;
+ case UI_ID_OPEN:
+ WM_operator_name_call(C, template->openop, WM_OP_INVOKE_REGION_WIN, NULL);
+ break;
+#if 0
+ case UI_ID_ALONE:
+ if(!id || id->us < 1)
+ return;
+ break;
+ case UI_ID_LOCAL:
+ if(!id || id->us < 1)
+ return;
+ break;
+ case UI_ID_AUTO_NAME:
+ break;
+#endif
+ }
+}
+
+static void template_header_ID(bContext *C, uiBlock *block, TemplateHeaderID *template)
+{
+ uiBut *but;
+ TemplateHeaderID *duptemplate;
+ PointerRNA idptr;
+ ListBase *lb;
+ int x= 0, y= 0;
+
+ idptr= RNA_property_pointer_get(&template->ptr, template->prop);
+ lb= wich_libbase(CTX_data_main(C), ID_TXT);
+
+ uiBlockBeginAlign(block);
+ if(template->flag & UI_ID_BROWSE) {
+ char *extrastr, *str;
+
+ if((template->flag & UI_ID_ADD_NEW) && (template->flag && UI_ID_OPEN))
+ extrastr= "OPEN NEW %x 32766 |ADD NEW %x 32767";
+ else if(template->flag & UI_ID_ADD_NEW)
+ extrastr= "ADD NEW %x 32767";
+ else if(template->flag & UI_ID_OPEN)
+ extrastr= "OPEN NEW %x 32766";
+ else
+ extrastr= NULL;
+
+ duptemplate= MEM_dupallocN(template);
+ IDnames_to_pupstring(&str, NULL, extrastr, lb, idptr.data, &duptemplate->browse);
+
+ but= uiDefButS(block, MENU, 0, str, x, y, UI_UNIT_X, UI_UNIT_Y, &duptemplate->browse, 0, 0, 0, 0, "Browse existing choices, or add new");
+ uiButSetNFunc(but, template_header_id_cb, duptemplate, SET_INT_IN_POINTER(UI_ID_BROWSE));
+ x+= UI_UNIT_X;
+
+ MEM_freeN(str);
+ }
+
+ /* text button with name */
+ if(idptr.data) {
+ char name[64];
+
+ text_idbutton(idptr.data, name);
+ but= uiDefButR(block, TEX, 0, name, x, y, UI_UNIT_X*6, UI_UNIT_Y, &idptr, "name", -1, 0, 0, -1, -1, NULL);
+ uiButSetNFunc(but, template_header_id_cb, MEM_dupallocN(template), SET_INT_IN_POINTER(UI_ID_RENAME));
+ x += UI_UNIT_X*6;
+
+ /* delete button */
+ if(template->flag & UI_ID_DELETE) {
+ but= uiDefIconButO(block, BUT, template->unlinkop, WM_OP_EXEC_REGION_WIN, ICON_X, x, y, UI_UNIT_X, UI_UNIT_Y, NULL);
+ x += UI_UNIT_X;
+ }
+ }
+ uiBlockEndAlign(block);
+}
+
+void uiTemplateHeaderID(uiLayout *layout, bContext *C, PointerRNA *ptr, char *propname, char *newop, char *openop, char *unlinkop)
+{
+ TemplateHeaderID *template;
+ uiBlock *block;
+ PropertyRNA *prop;
+
+ if(!ptr->data)
+ return;
+
+ prop= RNA_struct_find_property(ptr, propname);
+
+ if(!prop) {
+ printf("uiTemplateHeaderID: property not found: %s\n", propname);
+ return;
+ }
+
+ template= MEM_callocN(sizeof(TemplateHeaderID), "TemplateHeaderID");
+ template->ptr= *ptr;
+ template->prop= prop;
+ template->flag= UI_ID_BROWSE|UI_ID_RENAME;
+
+ if(newop) {
+ template->flag |= UI_ID_ADD_NEW;
+ BLI_strncpy(template->newop, newop, sizeof(template->newop));
+ }
+ if(openop) {
+ template->flag |= UI_ID_OPEN;
+ BLI_strncpy(template->openop, openop, sizeof(template->openop));
+ }
+ if(unlinkop) {
+ template->flag |= UI_ID_DELETE;
+ BLI_strncpy(template->unlinkop, unlinkop, sizeof(template->unlinkop));
+ }
+
+ block= uiLayoutFreeBlock(layout);
+ template_header_ID(C, block, template);
+
+ MEM_freeN(template);
+}
+
diff --git a/source/blender/editors/interface/interface_utils.c b/source/blender/editors/interface/interface_utils.c
index 429b2de0227..4521bd57a3a 100644
--- a/source/blender/editors/interface/interface_utils.c
+++ b/source/blender/editors/interface/interface_utils.c
@@ -55,6 +55,8 @@
#include "WM_api.h"
#include "WM_types.h"
+#include "interface_intern.h"
+
#define DEF_BUT_WIDTH 150
#define DEF_ICON_BUT_WIDTH 20
#define DEF_BUT_HEIGHT 20
@@ -88,7 +90,7 @@ int UI_GetIconRNA(PointerRNA *ptr)
else if(rnatype == &RNA_Curve)
return ICON_CURVE_DATA;
else if(rnatype == &RNA_MetaBall)
- return ICON_MBALL_DATA;
+ return ICON_META_DATA;
else if(rnatype == &RNA_MetaElement)
return ICON_OUTLINER_DATA_META;
else if(rnatype == &RNA_Lattice)
@@ -140,7 +142,7 @@ int UI_GetIconRNA(PointerRNA *ptr)
else if(rnatype == &RNA_Brush)
return ICON_BRUSH_DATA;
else if(rnatype == &RNA_VectorFont)
- return ICON_FONT;
+ return ICON_FONT_DATA;
else if(rnatype == &RNA_Library)
return ICON_LIBRARY_DATA_DIRECT;
else if(rnatype == &RNA_Action)
@@ -202,7 +204,7 @@ int UI_GetIconRNA(PointerRNA *ptr)
else if(rnatype == &RNA_BooleanModifier)
return ICON_MOD_BOOLEAN;
else if(rnatype == &RNA_ParticleInstanceModifier)
- return ICON_MOD_PARTICLEINSTANCE;
+ return ICON_MOD_PARTICLES;
else if(rnatype == &RNA_ParticleSystemModifier)
return ICON_MOD_PARTICLES;
else if(rnatype == &RNA_EdgeSplitModifier)
@@ -213,6 +215,30 @@ int UI_GetIconRNA(PointerRNA *ptr)
return ICON_MOD_UVPROJECT;
else if(rnatype == &RNA_DisplaceModifier)
return ICON_MOD_DISPLACE;
+ else if(rnatype == &RNA_ShrinkwrapModifier)
+ return ICON_MOD_SHRINKWRAP;
+ else if(rnatype == &RNA_CastModifier)
+ return ICON_MOD_CAST;
+ else if(rnatype == &RNA_MeshDeformModifier)
+ return ICON_MOD_MESHDEFORM;
+ else if(rnatype == &RNA_BevelModifier)
+ return ICON_MOD_BEVEL;
+ else if(rnatype == &RNA_SmoothModifier)
+ return ICON_MOD_SMOOTH;
+ else if(rnatype == &RNA_SimpleDeformModifier)
+ return ICON_MOD_SIMPLEDEFORM;
+ else if(rnatype == &RNA_MaskModifier)
+ return ICON_MOD_MASK;
+ else if(rnatype == &RNA_ClothModifier)
+ return ICON_MOD_CLOTH;
+ else if(rnatype == &RNA_ExplodeModifier)
+ return ICON_MOD_EXPLODE;
+ else if(rnatype == &RNA_CollisionModifier)
+ return ICON_MOD_PHYSICS;
+ else if(rnatype == &RNA_FluidSimulationModifier)
+ return ICON_MOD_FLUIDSIM;
+ else if(rnatype == &RNA_MultiresModifier)
+ return ICON_MOD_MULTIRES;
else
return ICON_DOT;
}
@@ -220,17 +246,17 @@ int UI_GetIconRNA(PointerRNA *ptr)
uiBut *uiDefAutoButR(uiBlock *block, PointerRNA *ptr, PropertyRNA *prop, int index, char *name, int icon, int x1, int y1, int x2, int y2)
{
uiBut *but=NULL;
- const char *propname= RNA_property_identifier(ptr, prop);
- int arraylen= RNA_property_array_length(ptr, prop);
+ const char *propname= RNA_property_identifier(prop);
+ int arraylen= RNA_property_array_length(prop);
- switch(RNA_property_type(ptr, prop)) {
+ switch(RNA_property_type(prop)) {
case PROP_BOOLEAN: {
int value, length;
if(arraylen && index == -1)
return NULL;
- length= RNA_property_array_length(ptr, prop);
+ length= RNA_property_array_length(prop);
if(length)
value= RNA_property_boolean_get_index(ptr, prop, index);
@@ -248,10 +274,10 @@ uiBut *uiDefAutoButR(uiBlock *block, PointerRNA *ptr, PropertyRNA *prop, int ind
case PROP_INT:
case PROP_FLOAT:
if(arraylen && index == -1) {
- if(RNA_property_subtype(ptr, prop) == PROP_COLOR)
+ if(RNA_property_subtype(prop) == PROP_COLOR)
but= uiDefButR(block, COL, 0, name, x1, y1, x2, y2, ptr, propname, 0, 0, 0, -1, -1, NULL);
}
- else if(RNA_property_subtype(ptr, prop) == PROP_PERCENTAGE)
+ else if(RNA_property_subtype(prop) == PROP_PERCENTAGE)
but= uiDefButR(block, NUMSLI, 0, name, x1, y1, x2, y2, ptr, propname, index, 0, 0, -1, -1, NULL);
else
but= uiDefButR(block, NUM, 0, name, x1, y1, x2, y2, ptr, propname, index, 0, 0, -1, -1, NULL);
@@ -264,35 +290,14 @@ uiBut *uiDefAutoButR(uiBlock *block, PointerRNA *ptr, PropertyRNA *prop, int ind
break;
case PROP_POINTER: {
PointerRNA pptr;
- PropertyRNA *nameprop;
- char *text, *descr, textbuf[256];
int icon;
pptr= RNA_property_pointer_get(ptr, prop);
- descr= (char*)RNA_property_ui_description(ptr, prop);
-
if(!pptr.type)
- pptr.type= RNA_property_pointer_type(ptr, prop);
-
+ pptr.type= RNA_property_pointer_type(prop);
icon= UI_GetIconRNA(&pptr);
- if(pptr.data == NULL) {
- but= uiDefIconTextBut(block, LABEL, 0, icon, "", x1, y1, x2, y2, NULL, 0, 0, 0, 0, "");
- }
- else {
- nameprop= RNA_struct_name_property(&pptr);
-
- if(nameprop) {
- text= RNA_property_string_get_alloc(&pptr, nameprop, textbuf, sizeof(textbuf));
- but= uiDefIconTextBut(block, LABEL, 0, icon, text, x1, y1, x2, y2, NULL, 0, 0, 0, 0, descr);
- if(text != textbuf)
- MEM_freeN(text);
- }
- else {
- text= (char*)RNA_struct_ui_name(&pptr);
- but= uiDefIconTextBut(block, LABEL, 0, icon, text, x1, y1, x2, y2, NULL, 0, 0, 0, 0, descr);
- }
- }
+ but= uiDefIconTextButR(block, IDPOIN, 0, icon, name, x1, y1, x2, y2, ptr, propname, index, 0, 0, -1, -1, NULL);
break;
}
case PROP_COLLECTION: {
@@ -310,39 +315,61 @@ uiBut *uiDefAutoButR(uiBlock *block, PointerRNA *ptr, PropertyRNA *prop, int ind
return but;
}
-int uiDefAutoButsRNA(const bContext *C, uiBlock *block, PointerRNA *ptr)
+void uiDefAutoButsRNA(const bContext *C, uiLayout *layout, PointerRNA *ptr)
{
CollectionPropertyIterator iter;
PropertyRNA *iterprop, *prop;
- uiLayout *layout;
+ uiLayout *split;
char *name;
- int x= 0, y= 0;
-
- layout= uiLayoutBegin(UI_LAYOUT_VERTICAL, x, y, DEF_BUT_WIDTH*2, 0);
- uiTemplateColumn(layout);
- uiItemLabel(layout, UI_TSLOT_COLUMN_1, (char*)RNA_struct_ui_name(ptr), 0);
+ uiItemL(layout, (char*)RNA_struct_ui_name(ptr->type), 0);
- iterprop= RNA_struct_iterator_property(ptr);
+ iterprop= RNA_struct_iterator_property(ptr->type);
RNA_property_collection_begin(ptr, iterprop, &iter);
for(; iter.valid; RNA_property_collection_next(&iter)) {
prop= iter.ptr.data;
- if(strcmp(RNA_property_identifier(ptr, prop), "rna_type") == 0)
+ if(strcmp(RNA_property_identifier(prop), "rna_type") == 0)
continue;
- uiTemplateColumn(layout);
+ split = uiLayoutSplit(layout);
+
+ name= (char*)RNA_property_ui_name(prop);
- name= (char*)RNA_property_ui_name(ptr, prop);
- uiItemLabel(layout, UI_TSLOT_COLUMN_1, name, 0);
- uiItemR(layout, UI_TSLOT_COLUMN_2, "", 0, ptr, (char*)RNA_property_identifier(ptr, prop));
+ uiItemL(uiLayoutColumn(split, 0), name, 0);
+ uiItemFullR(uiLayoutColumn(split, 0), "", 0, ptr, prop, -1, 0, 0, 0);
}
RNA_property_collection_end(&iter);
- uiLayoutEnd(C, block, layout, &x, &y);
+}
- return -y;
+/* temp call, single collumn, test for toolbar only */
+void uiDefAutoButsRNA_single(const bContext *C, uiLayout *layout, PointerRNA *ptr)
+{
+ CollectionPropertyIterator iter;
+ PropertyRNA *iterprop, *prop;
+ uiLayout *col;
+ char *name;
+
+ uiItemL(layout, (char*)RNA_struct_ui_name(ptr->type), 0);
+
+ iterprop= RNA_struct_iterator_property(ptr->type);
+ RNA_property_collection_begin(ptr, iterprop, &iter);
+
+ for(; iter.valid; RNA_property_collection_next(&iter)) {
+ prop= iter.ptr.data;
+
+ if(strcmp(RNA_property_identifier(prop), "rna_type") == 0)
+ continue;
+
+ name= (char*)RNA_property_ui_name(prop);
+ col= uiLayoutColumn(layout, 1);
+ uiItemL(col, name, 0);
+ uiItemFullR(col, "", 0, ptr, prop, -1, 0, 0, 0);
+ }
+
+ RNA_property_collection_end(&iter);
}
/***************************** ID Utilities *******************************/
@@ -377,11 +404,11 @@ static void idpoin_cb(bContext *C, void *arg_params, void *arg_event)
else return;
break;
case UI_ID_BROWSE: {
- if(id==0) id= lb->first;
- if(id==0) return;
+ /* ID can be NULL, if nothing was assigned yet */
+ if(lb->first==NULL) return;
if(params->browsenr== -2) {
- /* XXX implement or find a replacement
+ /* XXX implement or find a replacement (ID can be NULL!)
* activate_databrowse((ID *)G.buts->lockpoin, GS(id->name), 0, B_MESHBROWSE, &params->browsenr, do_global_buttons); */
return;
}
@@ -438,7 +465,7 @@ int uiDefIDPoinButs(uiBlock *block, Main *bmain, ID *parid, ID *id, int id_code,
uiBut *but;
uiIDPoinParams *params, *dup_params;
char *str=NULL, str1[10];
- int len, oldcol, add_addbutton=0;
+ int len, add_addbutton=0;
/* setup struct that we will pass on with the buttons */
params= MEM_callocN(sizeof(uiIDPoinParams), "uiIDPoinParams");
@@ -450,14 +477,15 @@ int uiDefIDPoinButs(uiBlock *block, Main *bmain, ID *parid, ID *id, int id_code,
/* create buttons */
uiBlockBeginAlign(block);
- oldcol= uiBlockGetCol(block);
+ /* XXX solve?
if(id && id->us>1)
uiBlockSetCol(block, TH_BUT_SETTING1);
if((events & UI_ID_PIN) && *pin_p)
uiBlockSetCol(block, TH_BUT_SETTING2);
-
+ */
+
/* pin button */
if(id && (events & UI_ID_PIN)) {
but= uiDefIconButS(block, ICONTOG, (events & UI_ID_PIN), ICON_KEY_DEHLT, x, y ,DEF_ICON_BUT_WIDTH,DEF_BUT_HEIGHT, pin_p, 0, 0, 0, 0, "Keeps this view displaying the current data regardless of what object is selected");
@@ -507,37 +535,24 @@ int uiDefIDPoinButs(uiBlock *block, Main *bmain, ID *parid, ID *id, int id_code,
MEM_freeN(str);
}
- uiBlockSetCol(block, oldcol);
-
/* text button with name */
if(id) {
- /* name */
+ /* XXX solve?
if(id->us > 1)
uiBlockSetCol(block, TH_BUT_SETTING1);
-
- /* pinned data? */
+ */
+ /* pinned data?
if((events & UI_ID_PIN) && *pin_p)
uiBlockSetCol(block, TH_BUT_SETTING2);
-
- /* redalert overrides pin color */
+ */
+ /* redalert overrides pin color
if(id->us<=0)
uiBlockSetCol(block, TH_REDALERT);
-
+ */
uiBlockSetButLock(block, id->lib!=0, "Can't edit external libdata");
/* name button */
- if(GS(id->name)==ID_SCE)
- strcpy(str1, "SCE:");
- else if(GS(id->name)==ID_SCE)
- strcpy(str1, "SCR:");
- else if(GS(id->name)==ID_MA && ((Material*)id)->use_nodes)
- strcpy(str1, "NT:");
- else {
- str1[0]= id->name[0];
- str1[1]= id->name[1];
- str1[2]= ':';
- str1[3]= 0;
- }
+ text_idbutton(id, str1);
if(GS(id->name)==ID_IP) len= 110;
else if((y) && (GS(id->name)==ID_AC)) len= 100; // comes from button panel (poselib)
@@ -611,7 +626,6 @@ int uiDefIDPoinButs(uiBlock *block, Main *bmain, ID *parid, ID *id, int id_code,
}
/* add new button */
else if(add_addbutton) {
- uiBlockSetCol(block, oldcol);
if(parid) uiBlockSetButLock(block, parid->lib!=0, "Can't edit external libdata");
dup_params= MEM_dupallocN(params);
but= uiDefButS(block, TOG, 0, "Add New", x, y, 110, DEF_BUT_HEIGHT, &dup_params->browsenr, params->browsenr, 32767.0, 0, 0, "Add new data block");
@@ -619,7 +633,6 @@ int uiDefIDPoinButs(uiBlock *block, Main *bmain, ID *parid, ID *id, int id_code,
x+= 110;
}
- uiBlockSetCol(block, oldcol);
uiBlockEndAlign(block);
MEM_freeN(params);
@@ -934,7 +947,7 @@ static uiBlock *curvemap_clipping_func(struct bContext *C, struct ARegion *ar, v
uiBlock *block;
uiBut *bt;
- block= uiBeginBlock(C, ar, "curvemap_clipping_func", UI_EMBOSS, UI_HELV);
+ block= uiBeginBlock(C, ar, "curvemap_clipping_func", UI_EMBOSS);
/* use this for a fake extra empy space around the buttons */
uiDefBut(block, LABEL, 0, "", -4, 16, 128, 106, NULL, 0, 0, 0, 0, "");
@@ -994,7 +1007,7 @@ static uiBlock *curvemap_tools_func(struct bContext *C, struct ARegion *ar, void
uiBlock *block;
short yco= 0, menuwidth=120;
- block= uiBeginBlock(C, ar, "curvemap_tools_func", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "curvemap_tools_func", UI_EMBOSS);
uiBlockSetButmFunc(block, curvemap_tools_dofunc, cumap_v);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Reset View", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c
index be7bb5c09d8..18b39518ee6 100644
--- a/source/blender/editors/interface/interface_widgets.c
+++ b/source/blender/editors/interface/interface_widgets.c
@@ -31,8 +31,8 @@
#include "MEM_guardedalloc.h"
#include "DNA_ID.h"
-#include "DNA_scene_types.h"
#include "DNA_screen_types.h"
+#include "DNA_userdef_types.h"
#include "DNA_windowmanager_types.h"
#include "BLI_arithb.h"
@@ -41,30 +41,20 @@
#include "BKE_context.h"
#include "BKE_global.h"
-#include "BKE_idprop.h"
#include "BKE_utildefines.h"
-#include "RNA_access.h"
-
#include "BIF_gl.h"
+#include "BIF_glutil.h"
+
+#include "BLF_api.h"
#include "UI_interface.h"
#include "UI_interface_icons.h"
#include "UI_resources.h"
-#include "UI_text.h"
#include "UI_view2d.h"
#include "ED_util.h"
#include "ED_types.h"
-#include "ED_screen.h"
-
-#include "WM_api.h"
-#include "WM_types.h"
-
-#include "BMF_Api.h"
-#ifdef INTERNATIONAL
-#include "FTF_Api.h"
-#endif
#include "interface_intern.h"
@@ -94,17 +84,14 @@ typedef struct uiWidgetTrias {
} uiWidgetTrias;
-typedef struct uiWidgetColors {
- float outline[3];
- float inner[3];
- float inner_sel[3];
- float item[3];
- float text[3];
- float text_sel[3];
- short shaded;
- float shadetop, shadedown;
-
-} uiWidgetColors;
+typedef struct uiWidgetStateColors {
+ char inner_anim[4];
+ char inner_anim_sel[4];
+ char inner_key[4];
+ char inner_key_sel[4];
+ char inner_driven[4];
+ char inner_driven_sel[4];
+} uiWidgetStateColors;
typedef struct uiWidgetBase {
@@ -113,11 +100,33 @@ typedef struct uiWidgetBase {
float inner_v[64][2];
float inner_uv[64][2];
+ short inner, outline, emboss; /* set on/off */
+
uiWidgetTrias tria1;
uiWidgetTrias tria2;
} uiWidgetBase;
+/* uiWidgetType: for time being only for visual appearance,
+ later, a handling callback can be added too
+*/
+typedef struct uiWidgetType {
+
+ /* pointer to theme color definition */
+ uiWidgetColors *wcol_theme;
+
+ /* converted colors for state */
+ uiWidgetColors wcol;
+
+ void (*state)(struct uiWidgetType *, int state);
+ void (*draw)(uiWidgetColors *, rcti *, int state, int roundboxalign);
+ void (*custom)(uiBut *, uiWidgetColors *, rcti *, int state, int roundboxalign);
+ void (*text)(uiFontStyle *, uiWidgetColors *, uiBut *, rcti *);
+
+} uiWidgetType;
+
+
+/* *********************** draw data ************************** */
static float cornervec[9][2]= {{0.0, 0.0}, {0.195, 0.02}, {0.383, 0.067}, {0.55, 0.169},
{0.707, 0.293}, {0.831, 0.45}, {0.924, 0.617}, {0.98, 0.805}, {1.0, 1.0}};
@@ -151,21 +160,132 @@ static float check_tria_vert[6][2]= {
static int check_tria_face[4][3]= {
{3, 2, 4}, {3, 4, 5}, {1, 0, 3}, {0, 2, 3}};
+/* ************************************************* */
+
+void ui_draw_anti_tria(float x1, float y1, float x2, float y2, float x3, float y3)
+{
+ float color[4];
+ int j;
+
+ glEnable(GL_BLEND);
+ glGetFloatv(GL_CURRENT_COLOR, color);
+ color[3]= 0.125;
+ glColor4fv(color);
+
+ /* for each AA step */
+ for(j=0; j<8; j++) {
+ glTranslatef(1.0*jit[j][0], 1.0*jit[j][1], 0.0f);
+
+ glBegin(GL_POLYGON);
+ glVertex2f(x1, y1);
+ glVertex2f(x2, y2);
+ glVertex2f(x3, y3);
+ glEnd();
+
+ glTranslatef(-1.0*jit[j][0], -1.0*jit[j][1], 0.0f);
+ }
+ glDisable(GL_BLEND);
+
+}
-static void widget_init(uiWidgetBase *wt)
+static void widget_init(uiWidgetBase *wtb)
{
- wt->totvert= wt->halfwayvert= 0;
- wt->tria1.tot= 0;
- wt->tria2.tot= 0;
+ wtb->totvert= wtb->halfwayvert= 0;
+ wtb->tria1.tot= 0;
+ wtb->tria2.tot= 0;
+
+ wtb->inner= 1;
+ wtb->outline= 1;
+ wtb->emboss= 1;
+}
+
+/* helper call, makes shadow rect, with 'sun' above menu, so only shadow to left/right/bottom */
+/* return tot */
+static int round_box_shadow_edges(float (*vert)[2], rcti *rect, float rad, int roundboxalign, float step)
+{
+ float vec[9][2];
+ float minx, miny, maxx, maxy;
+ int a, tot= 0;
+
+ rad+= step;
+
+ if(2.0f*rad > rect->ymax-rect->ymin)
+ rad= 0.5f*(rect->ymax-rect->ymin);
+
+ minx= rect->xmin-step;
+ miny= rect->ymin-step;
+ maxx= rect->xmax+step;
+ maxy= rect->ymax+step;
+
+ /* mult */
+ for(a=0; a<9; a++) {
+ vec[a][0]= rad*cornervec[a][0];
+ vec[a][1]= rad*cornervec[a][1];
+ }
+
+ /* start with left-top, anti clockwise */
+ if(roundboxalign & 1) {
+ for(a=0; a<9; a++, tot++) {
+ vert[tot][0]= minx+rad-vec[a][0];
+ vert[tot][1]= maxy-vec[a][1];
+ }
+ }
+ else {
+ for(a=0; a<9; a++, tot++) {
+ vert[tot][0]= minx;
+ vert[tot][1]= maxy;
+ }
+ }
+
+ if(roundboxalign & 8) {
+ for(a=0; a<9; a++, tot++) {
+ vert[tot][0]= minx+vec[a][1];
+ vert[tot][1]= miny+rad-vec[a][0];
+ }
+ }
+ else {
+ for(a=0; a<9; a++, tot++) {
+ vert[tot][0]= minx;
+ vert[tot][1]= miny;
+ }
+ }
+
+ if(roundboxalign & 4) {
+ for(a=0; a<9; a++, tot++) {
+ vert[tot][0]= maxx-rad+vec[a][0];
+ vert[tot][1]= miny+vec[a][1];
+ }
+ }
+ else {
+ for(a=0; a<9; a++, tot++) {
+ vert[tot][0]= maxx;
+ vert[tot][1]= miny;
+ }
+ }
+
+ if(roundboxalign & 2) {
+ for(a=0; a<9; a++, tot++) {
+ vert[tot][0]= maxx-vec[a][1];
+ vert[tot][1]= maxy-rad+vec[a][0];
+ }
+ }
+ else {
+ for(a=0; a<9; a++, tot++) {
+ vert[tot][0]= maxx;
+ vert[tot][1]= maxy;
+ }
+ }
+ return tot;
}
-static void round_box_edges(uiWidgetBase *wt, int roundboxtype, rcti *rect, float rad)
+
+static void round_box_edges(uiWidgetBase *wt, int roundboxalign, rcti *rect, float rad)
{
float vec[9][2], veci[9][2];
float minx= rect->xmin, miny= rect->ymin, maxx= rect->xmax, maxy= rect->ymax;
- float radi= rad - 1.0f; /* rad inner */
+ float radi; /* rad inner */
float minxi= minx + 1.0f; /* boundbox inner */
float maxxi= maxx - 1.0f;
float minyi= miny + 1.0f;
@@ -174,6 +294,11 @@ static void round_box_edges(uiWidgetBase *wt, int roundboxtype, rcti *rect, floa
float facyi= 1.0f/(maxyi-minyi);
int a, tot= 0;
+ if(2.0f*rad > rect->ymax-rect->ymin)
+ rad= 0.5f*(rect->ymax-rect->ymin);
+
+ radi= rad - 1.0f;
+
/* mult */
for(a=0; a<9; a++) {
veci[a][0]= radi*cornervec[a][0];
@@ -183,7 +308,7 @@ static void round_box_edges(uiWidgetBase *wt, int roundboxtype, rcti *rect, floa
}
/* corner left-bottom */
- if(roundboxtype & 8) {
+ if(roundboxalign & 8) {
for(a=0; a<9; a++, tot++) {
wt->inner_v[tot][0]= minxi+veci[a][1];
@@ -210,7 +335,7 @@ static void round_box_edges(uiWidgetBase *wt, int roundboxtype, rcti *rect, floa
}
/* corner right-bottom */
- if(roundboxtype & 4) {
+ if(roundboxalign & 4) {
for(a=0; a<9; a++, tot++) {
wt->inner_v[tot][0]= maxxi-radi+veci[a][0];
@@ -239,7 +364,7 @@ static void round_box_edges(uiWidgetBase *wt, int roundboxtype, rcti *rect, floa
wt->halfwayvert= tot;
/* corner right-top */
- if(roundboxtype & 2) {
+ if(roundboxalign & 2) {
for(a=0; a<9; a++, tot++) {
wt->inner_v[tot][0]= maxxi-veci[a][1];
@@ -266,7 +391,7 @@ static void round_box_edges(uiWidgetBase *wt, int roundboxtype, rcti *rect, floa
}
/* corner left-top */
- if(roundboxtype & 1) {
+ if(roundboxalign & 1) {
for(a=0; a<9; a++, tot++) {
wt->inner_v[tot][0]= minxi+radi-veci[a][0];
@@ -338,7 +463,7 @@ static void widget_trias_draw(uiWidgetTrias *tria)
static void widget_menu_trias(uiWidgetTrias *tria, rcti *rect)
{
- float centx, centy, size;
+ float centx, centy, size, asp;
int a;
/* center position and size */
@@ -346,6 +471,11 @@ static void widget_menu_trias(uiWidgetTrias *tria, rcti *rect)
centy= rect->ymin + 0.5f*(rect->ymax-rect->ymin);
size= 0.4f*(rect->ymax-rect->ymin);
+ /* XXX exception */
+ asp= ((float)rect->xmax-rect->xmin)/((float)rect->ymax-rect->ymin);
+ if(asp > 1.2f && asp < 2.6f)
+ centx= rect->xmax - 0.3f*(rect->ymax-rect->ymin);
+
for(a=0; a<6; a++) {
tria->vec[a][0]= size*menu_tria_vert[a][0] + centx;
tria->vec[a][1]= size*menu_tria_vert[a][1] + centy;
@@ -376,105 +506,112 @@ static void widget_check_trias(uiWidgetTrias *tria, rcti *rect)
/* prepares shade colors */
-static void shadecolors(float *coltop, float *coldown, float *color, float shadetop, float shadedown)
+static void shadecolors4(char *coltop, char *coldown, char *color, short shadetop, short shadedown)
{
- float hue, sat, val, valshade;
-
- rgb_to_hsv(color[0], color[1], color[2], &hue, &sat, &val);
- valshade= CLAMPIS(val+shadetop, 0.0f, 1.0f);
- hsv_to_rgb(hue, sat, valshade, coltop, coltop+1, coltop+2);
+ coltop[0]= CLAMPIS(color[0]+shadetop, 0, 255);
+ coltop[1]= CLAMPIS(color[1]+shadetop, 0, 255);
+ coltop[2]= CLAMPIS(color[2]+shadetop, 0, 255);
+ coltop[3]= color[3];
- valshade= CLAMPIS(val+shadedown, 0.0f, 1.0f);
- hsv_to_rgb(hue, sat, valshade, coldown, coldown+1, coldown+2);
+ coldown[0]= CLAMPIS(color[0]+shadedown, 0, 255);
+ coldown[1]= CLAMPIS(color[1]+shadedown, 0, 255);
+ coldown[2]= CLAMPIS(color[2]+shadedown, 0, 255);
+ coldown[3]= color[3];
}
-static void round_box_shade_col(float *col1, float *col2, float fac)
+static void round_box_shade_col4(char *col1, char *col2, float fac)
{
- float col[4];
+ int faci, facm;
+ char col[4];
+
+ faci= floor(255.1f*fac);
+ facm= 255-faci;
- col[0]= (fac*col1[0] + (1.0-fac)*col2[0]);
- col[1]= (fac*col1[1] + (1.0-fac)*col2[1]);
- col[2]= (fac*col1[2] + (1.0-fac)*col2[2]);
- col[3]= 1;
+ col[0]= (faci*col1[0] + facm*col2[0])>>8;
+ col[1]= (faci*col1[1] + facm*col2[1])>>8;
+ col[2]= (faci*col1[2] + facm*col2[2])>>8;
+ col[3]= (faci*col1[3] + facm*col2[3])>>8;
- glColor4fv(col);
+ glColor4ubv(col);
}
-static void widget_draw(uiWidgetBase *wt, uiWidgetColors *wcol, int state)
+static void widgetbase_draw(uiWidgetBase *wtb, uiWidgetColors *wcol)
{
- float *inner= wcol->inner;
int j, a;
- if(state & UI_SELECT)
- inner= wcol->inner_sel;
-
glEnable(GL_BLEND);
/* backdrop non AA */
- if(wcol->shaded==0) {
- /* filled center, solid */
- glColor3fv(inner);
- glBegin(GL_POLYGON);
- for(a=0; a<wt->totvert; a++)
- glVertex2fv(wt->inner_v[a]);
- glEnd();
- }
- else {
- float col1[3], col2[3];
-
- shadecolors(col1, col2, inner, wcol->shadetop, wcol->shadedown);
-
- glShadeModel(GL_SMOOTH);
- glBegin(GL_POLYGON);
- for(a=0; a<wt->totvert; a++) {
- round_box_shade_col(col1, col2, wt->inner_uv[a][1]);
- glVertex2fv(wt->inner_v[a]);
+ if(wtb->inner) {
+ if(wcol->shaded==0) {
+ /* filled center, solid */
+ glColor4ubv(wcol->inner);
+ glBegin(GL_POLYGON);
+ for(a=0; a<wtb->totvert; a++)
+ glVertex2fv(wtb->inner_v[a]);
+ glEnd();
+ }
+ else {
+ char col1[4], col2[4];
+
+ shadecolors4(col1, col2, wcol->inner, wcol->shadetop, wcol->shadedown);
+
+ glShadeModel(GL_SMOOTH);
+ glBegin(GL_POLYGON);
+ for(a=0; a<wtb->totvert; a++) {
+ round_box_shade_col4(col1, col2, wtb->inner_uv[a][1]);
+ glVertex2fv(wtb->inner_v[a]);
+ }
+ glEnd();
+ glShadeModel(GL_FLAT);
}
- glEnd();
- glShadeModel(GL_FLAT);
}
/* for each AA step */
- for(j=0; j<8; j++) {
- glTranslatef(1.0*jit[j][0], 1.0*jit[j][1], 0.0f);
+ if(wtb->outline) {
+ for(j=0; j<8; j++) {
+ glTranslatef(1.0*jit[j][0], 1.0*jit[j][1], 0.0f);
+
+ /* outline */
+ glColor4ub(wcol->outline[0], wcol->outline[1], wcol->outline[2], 32);
+ glBegin(GL_QUAD_STRIP);
+ for(a=0; a<wtb->totvert; a++) {
+ glVertex2fv(wtb->outer_v[a]);
+ glVertex2fv(wtb->inner_v[a]);
+ }
+ glVertex2fv(wtb->outer_v[0]);
+ glVertex2fv(wtb->inner_v[0]);
+ glEnd();
- /* outline */
- glColor4f(wcol->outline[0], wcol->outline[1], wcol->outline[0], 0.125);
- glBegin(GL_QUAD_STRIP);
- for(a=0; a<wt->totvert; a++) {
- glVertex2fv(wt->outer_v[a]);
- glVertex2fv(wt->inner_v[a]);
- }
- glVertex2fv(wt->outer_v[0]);
- glVertex2fv(wt->inner_v[0]);
- glEnd();
-
- /* emboss bottom shadow */
- glColor4f(1.0f, 1.0f, 1.0f, 0.02f);
- glBegin(GL_QUAD_STRIP);
- for(a=0; a<wt->halfwayvert; a++) {
- glVertex2fv(wt->outer_v[a]);
- glVertex2f(wt->outer_v[a][0], wt->outer_v[a][1]-1.0f);
+ /* emboss bottom shadow */
+ if(wtb->emboss) {
+ glColor4f(1.0f, 1.0f, 1.0f, 0.02f);
+ glBegin(GL_QUAD_STRIP);
+ for(a=0; a<wtb->halfwayvert; a++) {
+ glVertex2fv(wtb->outer_v[a]);
+ glVertex2f(wtb->outer_v[a][0], wtb->outer_v[a][1]-1.0f);
+ }
+ glEnd();
+ }
+
+ glTranslatef(-1.0*jit[j][0], -1.0*jit[j][1], 0.0f);
}
- glEnd();
-
- glTranslatef(-1.0*jit[j][0], -1.0*jit[j][1], 0.0f);
}
/* decoration */
- if(wt->tria1.tot || wt->tria2.tot) {
+ if(wtb->tria1.tot || wtb->tria2.tot) {
/* for each AA step */
for(j=0; j<8; j++) {
glTranslatef(1.0*jit[j][0], 1.0*jit[j][1], 0.0f);
- if(wt->tria1.tot) {
- glColor4f(wcol->item[0], wcol->item[1], wcol->item[2], 0.125);
- widget_trias_draw(&wt->tria1);
+ if(wtb->tria1.tot) {
+ glColor4ub(wcol->item[0], wcol->item[1], wcol->item[2], 32);
+ widget_trias_draw(&wtb->tria1);
}
- if(wt->tria2.tot) {
- glColor4f(wcol->item[0], wcol->item[1], wcol->item[2], 0.125);
- widget_trias_draw(&wt->tria2);
+ if(wtb->tria2.tot) {
+ glColor4ub(wcol->item[0], wcol->item[1], wcol->item[2], 32);
+ widget_trias_draw(&wtb->tria2);
}
glTranslatef(-1.0*jit[j][0], -1.0*jit[j][1], 0.0f);
@@ -487,50 +624,162 @@ static void widget_draw(uiWidgetBase *wt, uiWidgetColors *wcol, int state)
/* *********************** text/icon ************************************** */
-static void widget_draw_text(uiBut *but, float x, float y)
+
+/* icons have been standardized... and this call draws in untransformed coordinates */
+#define ICON_HEIGHT 16.0f
+
+static void widget_draw_icon(uiBut *but, BIFIconID icon, int blend, rcti *rect)
{
- int transopts;
- int len;
- char *cpoin;
+ float xs=0, ys=0, aspect, height;
+
+ /* this icon doesn't need draw... */
+ if(icon==ICON_BLANK1 && (but->flag & UI_ICON_SUBMENU)==0) return;
+
+ /* we need aspect from block, for menus... these buttons are scaled in uiPositionBlock() */
+ aspect= but->block->aspect;
+ if(aspect != but->aspect) {
+ /* prevent scaling up icon in pupmenu */
+ if (aspect < 1.0f) {
+ height= ICON_HEIGHT;
+ aspect = 1.0f;
+
+ }
+ else
+ height= ICON_HEIGHT/aspect;
+ }
+ else
+ height= ICON_HEIGHT;
+
+ /* calculate blend color */
+ if ELEM3(but->type, TOG, ROW, TOGN) {
+ if(but->flag & UI_SELECT);
+ else if(but->flag & UI_ACTIVE);
+ else blend= -60;
+ }
+
+ glEnable(GL_BLEND);
+
+ if(icon && icon!=ICON_BLANK1) {
+ if(but->flag & UI_ICON_LEFT) {
+ if (but->type==BUT_TOGDUAL) {
+ if (but->drawstr[0]) {
+ xs= rect->xmin-1.0;
+ } else {
+ xs= (rect->xmin+rect->xmax- height)/2.0;
+ }
+ }
+ else if (but->block->flag & UI_BLOCK_LOOP) {
+ xs= rect->xmin+1.0;
+ }
+ else if ((but->type==ICONROW) || (but->type==ICONTEXTROW)) {
+ xs= rect->xmin+3.0;
+ }
+ else {
+ xs= rect->xmin+4.0;
+ }
+ ys= (rect->ymin+rect->ymax- height)/2.0;
+ }
+ else {
+ xs= (rect->xmin+rect->xmax- height)/2.0;
+ ys= (rect->ymin+rect->ymax- height)/2.0;
+ }
- ui_rasterpos_safe(x, y, but->aspect);
- if(but->type==IDPOIN) transopts= 0; // no translation, of course!
- else transopts= ui_translate_buttons();
+ UI_icon_draw_aspect_blended(xs, ys, icon, aspect, blend);
+ }
- /* cut string in 2 parts */
- cpoin= strchr(but->drawstr, '|');
- if(cpoin) *cpoin= 0;
+ if(but->flag & UI_ICON_SUBMENU) {
+ xs= rect->xmax-17.0;
+ ys= (rect->ymin+rect->ymax- height)/2.0;
+
+ UI_icon_draw_aspect_blended(xs, ys, ICON_RIGHTARROW_THIN, aspect, blend);
+ }
-#ifdef INTERNATIONAL
- if (but->type == FTPREVIEW)
- FTF_DrawNewFontString (but->drawstr+but->ofs, FTF_INPUT_UTF8);
+ glDisable(GL_BLEND);
+}
+
+/* sets but->ofs to make sure text is correctly visible */
+static void ui_text_leftclip(uiFontStyle *fstyle, uiBut *but, rcti *rect)
+{
+ int okwidth= rect->xmax-rect->xmin;
+
+ /* need to set this first */
+ uiStyleFontSet(fstyle);
+
+ but->strwidth= BLF_width(but->drawstr);
+ but->ofs= 0;
+
+ while(but->strwidth > okwidth ) {
+
+ but->ofs++;
+ but->strwidth= BLF_width(but->drawstr+but->ofs);
+
+ /* textbut exception */
+ if(but->editstr && but->pos != -1) {
+ int pos= but->pos+strlen(but->str);
+
+ if(pos-1 < but->ofs) {
+ pos= but->ofs-pos+1;
+ but->ofs -= pos;
+ if(but->ofs<0) {
+ but->ofs= 0;
+ pos--;
+ }
+ but->drawstr[ strlen(but->drawstr)-pos ]= 0;
+ }
+ }
+
+ if(but->strwidth < 10) break;
+ }
+}
+
+static void widget_draw_text(uiFontStyle *fstyle, uiBut *but, rcti *rect)
+{
+// int transopts;
+ char *cpoin = NULL;
+
+// ui_rasterpos_safe(x, y, but->aspect);
+// if(but->type==IDPOIN) transopts= 0; // no translation, of course!
+// else transopts= ui_translate_buttons();
+
+ /* cut string in 2 parts - only for menu entries */
+ if(ELEM5(but->type, SLI, NUM, TEX, NUMSLI, NUMABS)==0) {
+ cpoin= strchr(but->drawstr, '|');
+ if(cpoin) *cpoin= 0;
+ }
+
+ if(but->editstr || (but->flag & UI_TEXT_LEFT))
+ fstyle->align= UI_STYLE_TEXT_LEFT;
else
- UI_DrawString(but->font, but->drawstr+but->ofs, transopts);
-#else
- UI_DrawString(but->font, but->drawstr+but->ofs, transopts);
-#endif
+ fstyle->align= UI_STYLE_TEXT_CENTER;
+ uiStyleFontDraw(fstyle, rect, but->drawstr+but->ofs);
+
/* part text right aligned */
if(cpoin) {
- len= UI_GetStringWidth(but->font, cpoin+1, ui_translate_buttons());
- ui_rasterpos_safe( but->x2 - len*but->aspect-3, y, but->aspect);
- UI_DrawString(but->font, cpoin+1, ui_translate_buttons());
+ fstyle->align= UI_STYLE_TEXT_RIGHT;
+ rect->xmax-=5;
+ uiStyleFontDraw(fstyle, rect, cpoin+1);
*cpoin= '|';
}
}
/* draws text and icons for buttons */
-static void widget_draw_text_icon(uiBut *but, rcti *rect, float *col)
+static void widget_draw_text_icon(uiFontStyle *fstyle, uiWidgetColors *wcol, uiBut *but, rcti *rect)
{
- float x, y;
short t, pos, ch;
short selsta_tmp, selend_tmp, selsta_draw, selwidth_draw;
if(but==NULL) return;
+ /* cutting off from left part */
+ if ELEM3(but->type, NUM, NUMABS, TEX) {
+ ui_text_leftclip(fstyle, but, rect);
+ }
+ else but->ofs= 0;
+
/* check for button text label */
if (but->type == ICONTEXTROW) {
- ui_draw_icon(but, (BIFIconID) (but->icon+but->iconadd), 0);
+ widget_draw_icon(but, (BIFIconID) (but->icon+but->iconadd), 0, rect);
}
else {
@@ -546,7 +795,9 @@ static void widget_draw_text_icon(uiBut *but, rcti *rect, float *col)
ch= but->drawstr[selsta_tmp];
but->drawstr[selsta_tmp]= 0;
- selsta_draw = but->aspect*UI_GetStringWidth(but->font, but->drawstr+but->ofs, ui_translate_buttons()) + 3;
+ uiStyleFontSet(fstyle);
+
+ selsta_draw = BLF_width(but->drawstr+but->ofs) + 3;
but->drawstr[selsta_tmp]= ch;
@@ -554,11 +805,11 @@ static void widget_draw_text_icon(uiBut *but, rcti *rect, float *col)
ch= but->drawstr[selend_tmp];
but->drawstr[selend_tmp]= 0;
- selwidth_draw = but->aspect*UI_GetStringWidth(but->font, but->drawstr+but->ofs, ui_translate_buttons()) + 3;
+ selwidth_draw = BLF_width(but->drawstr+but->ofs) + 3;
but->drawstr[selend_tmp]= ch;
- UI_ThemeColor(TH_BUT_TEXTFIELD_HI);
+ glColor3ubv(wcol->item);
glRects(rect->xmin+selsta_draw+1, rect->ymin+2, rect->xmin+selwidth_draw+1, rect->ymax-2);
}
} else {
@@ -569,7 +820,9 @@ static void widget_draw_text_icon(uiBut *but, rcti *rect, float *col)
ch= but->drawstr[pos];
but->drawstr[pos]= 0;
- t= but->aspect*UI_GetStringWidth(but->font, but->drawstr+but->ofs, ui_translate_buttons()) + 3;
+ uiStyleFontSet(fstyle);
+
+ t= BLF_width(but->drawstr+but->ofs) + 3;
but->drawstr[pos]= ch;
}
@@ -588,7 +841,7 @@ static void widget_draw_text_icon(uiBut *but, rcti *rect, float *col)
else if(but->pointype==INT)
dualset= BTST( *(((int *)but->poin)+1), but->bitnr);
- ui_draw_icon(but, ICON_DOT, dualset?0:-100);
+ widget_draw_icon(but, ICON_DOT, dualset?0:-100, rect);
}
if(but->drawstr[0]!=0) {
@@ -596,33 +849,24 @@ static void widget_draw_text_icon(uiBut *but, rcti *rect, float *col)
/* If there's an icon too (made with uiDefIconTextBut) then draw the icon
and offset the text label to accomodate it */
- if ( (but->flag & UI_HAS_ICON) && (but->flag & UI_ICON_LEFT) )
- {
- ui_draw_icon(but, but->icon, 0);
+ if (but->flag & UI_HAS_ICON) {
+ widget_draw_icon(but, but->icon, 0, rect);
- if(but->editstr || (but->flag & UI_TEXT_LEFT)) x= rect->xmin + but->aspect*UI_icon_get_width(but->icon)+5.0;
- else x= (rect->xmin+rect->xmax-but->strwidth+1)/2.0;
- }
- else
- {
- if(but->editstr || (but->flag & UI_TEXT_LEFT))
- x= rect->xmin+4.0;
- else if ELEM3(but->type, TOG, TOGN, TOG3)
- x= rect->xmin+28.0; /* offset for checkmark */
- else
- x= (rect->xmin+rect->xmax-but->strwidth+1)/2.0;
+ rect->xmin += UI_icon_get_width(but->icon);
+
+ if(but->editstr || (but->flag & UI_TEXT_LEFT))
+ rect->xmin += 5;
}
+ else if(but->flag & UI_TEXT_LEFT)
+ rect->xmin += 5;
- /* position and draw */
- y = (rect->ymin+rect->ymax- 9.0)/2.0;
-
- glColor3fv(col);
- widget_draw_text(but, x, y);
+ glColor3ubv(wcol->text);
+ widget_draw_text(fstyle, but, rect);
}
/* if there's no text label, then check to see if there's an icon only and draw it */
else if( but->flag & UI_HAS_ICON ) {
- ui_draw_icon(but, (BIFIconID) (but->icon+but->iconadd), 0);
+ widget_draw_icon(but, (BIFIconID) (but->icon+but->iconadd), 0, rect);
}
}
}
@@ -631,157 +875,638 @@ static void widget_draw_text_icon(uiBut *but, rcti *rect, float *col)
/* *********************** widget types ************************************* */
-/*
+
+/* uiWidgetStateColors
+ char inner_anim[4];
+ char inner_anim_sel[4];
+ char inner_key[4];
+ char inner_key_sel[4];
+ char inner_driven[4];
+ char inner_driven_sel[4];
+
+*/
+
+static struct uiWidgetStateColors wcol_state= {
+ {115, 190, 76, 255},
+ {90, 166, 51, 255},
+ {240, 235, 100, 255},
+ {148, 204, 76, 255},
+ {180, 0, 255, 255},
+ {153, 0, 230, 255}
+};
+
+/* uiWidgetColors
float outline[3];
- float inner[3];
- float select[3];
+ float inner[4];
+ float inner_sel[4];
float item[3];
+ float text[3];
+ float text_sel[3];
+
short shaded;
float shadetop, shadedown;
*/
static struct uiWidgetColors wcol_num= {
- {0.1f, 0.1f, 0.1f},
- {0.7f, 0.7f, 0.7f},
- {0.6f, 0.6f, 0.6f},
- {0.35f, 0.35f, 0.35f},
+ {25, 25, 25, 255},
+ {180, 180, 180, 255},
+ {153, 153, 153, 255},
+ {90, 90, 90, 255},
+
+ {0, 0, 0, 255},
+ {255, 255, 255, 255},
- {0.0f, 0.0f, 0.0f},
- {1.0f, 1.0f, 1.0f},
+ 1,
+ -20, 0
+};
+
+static struct uiWidgetColors wcol_numslider= {
+ {25, 25, 25, 255},
+ {180, 180, 180, 255},
+ {153, 153, 153, 255},
+ {128, 128, 128, 255},
+
+ {0, 0, 0, 255},
+ {255, 255, 255, 255},
1,
- -0.08f, 0.0f
+ -20, 0
};
static struct uiWidgetColors wcol_text= {
- {0.1f, 0.1f, 0.1f},
- {0.6f, 0.6f, 0.6f},
- {0.6f, 0.6f, 0.6f},
- {0.35f, 0.35f, 0.35f},
+ {25, 25, 25, 255},
+ {153, 153, 153, 255},
+ {153, 153, 153, 255},
+ {90, 90, 90, 255},
- {0.0f, 0.0f, 0.0f},
- {1.0f, 1.0f, 1.0f},
+ {0, 0, 0, 255},
+ {255, 255, 255, 255},
1,
- 0.0f, 0.1f
+ 0, 25
};
+static struct uiWidgetColors wcol_option= {
+ {0, 0, 0, 255},
+ {70, 70, 70, 255},
+ {70, 70, 70, 255},
+ {255, 255, 255, 255},
+
+ {0, 0, 0, 255},
+ {255, 255, 255, 255},
+
+ 1,
+ 15, -15
+};
+
+/* button that shows popup */
static struct uiWidgetColors wcol_menu= {
- {0.0f, 0.0f, 0.0f},
- {0.25f, 0.25f, 0.25f},
- {0.25f, 0.25f, 0.25f},
- {1.0f, 1.0f, 1.0f},
+ {0, 0, 0, 255},
+ {70, 70, 70, 255},
+ {70, 70, 70, 255},
+ {255, 255, 255, 255},
- {1.0f, 1.0f, 1.0f},
- {0.0f, 0.0f, 0.0f},
+ {255, 255, 255, 255},
+ {204, 204, 204, 255},
1,
- 0.1f, -0.08f
+ 15, -15
+};
+
+/* button that starts pulldown */
+static struct uiWidgetColors wcol_pulldown= {
+ {0, 0, 0, 255},
+ {63, 63, 63, 255},
+ {86, 128, 194, 255},
+ {255, 255, 255, 255},
+
+ {0, 0, 0, 255},
+ {0, 0, 0, 255},
+
+ 0,
+ 25, -20
+};
+
+/* button inside menu */
+static struct uiWidgetColors wcol_menu_item= {
+ {0, 0, 0, 255},
+ {0, 0, 0, 0},
+ {86, 128, 194, 255},
+ {255, 255, 255, 255},
+
+ {255, 255, 255, 255},
+ {0, 0, 0, 255},
+
+ 0,
+ 38, 0
};
-static struct uiWidgetColors wcol_row= {
- {0.0f, 0.0f, 0.0f},
- {0.25f, 0.25f, 0.25f},
- {0.34f, 0.5f, 0.76f},
- {1.0f, 1.0f, 1.0f},
+/* backdrop menu + title text color */
+static struct uiWidgetColors wcol_menu_back= {
+ {0, 0, 0, 255},
+ {25, 25, 25, 230},
+ {46, 124, 217, 204},
+ {255, 255, 255, 255},
- {1.0f, 1.0f, 1.0f},
- {0.0f, 0.0f, 0.0f},
+ {255, 255, 255, 255},
+ {0, 0, 0, 255},
+
+ 0,
+ 25, -20
+};
+
+
+static struct uiWidgetColors wcol_radio= {
+ {0, 0, 0, 255},
+ {70, 70, 70, 255},
+ {86, 128, 194, 255},
+ {255, 255, 255, 255},
+
+ {255, 255, 255, 255},
+ {0, 0, 0, 255},
1,
- 0.1f, -0.1f
+ 15, -15
};
static struct uiWidgetColors wcol_regular= {
- {0.1f, 0.1f, 0.1f},
- {0.6f, 0.6f, 0.6f},
- {0.4f, 0.4f, 0.4f},
- {0.1f, 0.1f, 0.1f},
+ {25, 25, 25, 255},
+ {153, 153, 153, 255},
+ {100, 100, 100, 255},
+ {25, 25, 25, 255},
- {0.0f, 0.0f, 0.0f},
- {1.0f, 1.0f, 1.0f},
+ {0, 0, 0, 255},
+ {255, 255, 255, 255},
0,
- 0.0f, 0.0f
+ 0, 0
};
-static struct uiWidgetColors wcol_regular2= {
- {0.1f, 0.1f, 0.1f},
- {0.6f, 0.6f, 0.6f},
- {0.4f, 0.4f, 0.4f},
- {0.1f, 0.1f, 0.1f},
+static struct uiWidgetColors wcol_tool= {
+ {25, 25, 25, 255},
+ {153, 153, 153, 255},
+ {100, 100, 100, 255},
+ {25, 25, 25, 255},
- {0.0f, 0.0f, 0.0f},
- {1.0f, 1.0f, 1.0f},
+ {0, 0, 0, 255},
+ {255, 255, 255, 255},
1,
- 0.1f, -0.1f
+ 25, -25
};
+/* called for theme init (new theme) and versions */
+void ui_widget_color_init(ThemeUI *tui)
+{
+
+ tui->wcol_regular= wcol_regular;
+ tui->wcol_tool= wcol_tool;
+ tui->wcol_radio= wcol_radio;
+ tui->wcol_text= wcol_text;
+ tui->wcol_option= wcol_option;
+ tui->wcol_num= wcol_num;
+ tui->wcol_numslider= wcol_numslider;
+ tui->wcol_menu= wcol_menu;
+ tui->wcol_pulldown= wcol_pulldown;
+ tui->wcol_menu_back= wcol_menu_back;
+ tui->wcol_menu_item= wcol_menu_item;
+
+ tui->iconfile[0]= 0;
+}
+
+/* ************ button callbacks, state ***************** */
+
+/* copy colors from theme, and set changes in it based on state */
+static void widget_state(uiWidgetType *wt, int state)
+{
+ wt->wcol= *(wt->wcol_theme);
+
+ if(state & UI_SELECT) {
+ if(state & UI_BUT_ANIMATED_KEY)
+ QUATCOPY(wt->wcol.inner, wcol_state.inner_key_sel)
+ else if(state & UI_BUT_ANIMATED)
+ QUATCOPY(wt->wcol.inner, wcol_state.inner_anim_sel)
+ else if(state & UI_BUT_DRIVEN)
+ QUATCOPY(wt->wcol.inner, wcol_state.inner_driven_sel)
+ else
+ QUATCOPY(wt->wcol.inner, wt->wcol.inner_sel)
+
+ VECCOPY(wt->wcol.text, wt->wcol.text_sel);
+
+ /* only flip shade if it's not "pushed in" already */
+ if(wt->wcol.shaded && wt->wcol.shadetop>wt->wcol.shadedown) {
+ SWAP(short, wt->wcol.shadetop, wt->wcol.shadedown);
+ }
+ }
+ else {
+ if(state & UI_BUT_ANIMATED_KEY)
+ QUATCOPY(wt->wcol.inner, wcol_state.inner_key)
+ else if(state & UI_BUT_ANIMATED)
+ QUATCOPY(wt->wcol.inner, wcol_state.inner_anim)
+ else if(state & UI_BUT_DRIVEN)
+ QUATCOPY(wt->wcol.inner, wcol_state.inner_driven)
+
+ if(state & UI_ACTIVE) { /* mouse over? */
+ wt->wcol.inner[0]= wt->wcol.inner[0]>=240? 255 : wt->wcol.inner[0]+15;
+ wt->wcol.inner[1]= wt->wcol.inner[1]>=240? 255 : wt->wcol.inner[1]+15;
+ wt->wcol.inner[2]= wt->wcol.inner[2]>=240? 255 : wt->wcol.inner[2]+15;
+ }
+ }
+}
+
+/* labels use theme colors for text */
+static void widget_state_label(uiWidgetType *wt, int state)
+{
+ /* call this for option button */
+ widget_state(wt, state);
+
+ if(state & UI_SELECT)
+ UI_GetThemeColor4ubv(TH_TEXT_HI, wt->wcol.text);
+ else
+ UI_GetThemeColor4ubv(TH_TEXT, wt->wcol.text);
+
+}
+
+
+/* special case, button that calls pulldown */
+static void widget_state_pulldown(uiWidgetType *wt, int state)
+{
+ wt->wcol= *(wt->wcol_theme);
+
+ QUATCOPY(wt->wcol.inner, wt->wcol.inner_sel);
+ VECCOPY(wt->wcol.outline, wt->wcol.inner);
+
+ if(state & UI_ACTIVE)
+ VECCOPY(wt->wcol.text, wt->wcol.text_sel);
+}
+
+/* special case, menu items */
+static void widget_state_menu_item(uiWidgetType *wt, int state)
+{
+ wt->wcol= *(wt->wcol_theme);
+
+ if(state & UI_BUT_DISABLED) {
+ wt->wcol.text[0]= 0.5f*(wt->wcol.text[0]+wt->wcol.text_sel[0]);
+ wt->wcol.text[1]= 0.5f*(wt->wcol.text[1]+wt->wcol.text_sel[1]);
+ wt->wcol.text[2]= 0.5f*(wt->wcol.text[2]+wt->wcol.text_sel[2]);
+ }
+ else if(state & UI_ACTIVE) {
+ QUATCOPY(wt->wcol.inner, wt->wcol.inner_sel);
+ VECCOPY(wt->wcol.text, wt->wcol.text_sel);
+
+ wt->wcol.shaded= 1;
+ }
+}
+
+
+/* ************ menu backdrop ************************* */
+
+/* outside of rect, rad to left/bottom/right */
+static void widget_softshadow(rcti *rect, int roundboxalign, float radin, float radout)
+{
+ uiWidgetBase wtb;
+ rcti rect1= *rect;
+ float alpha, alphastep;
+ int step, tot, a;
+
+ /* prevent tooltips to not show round shadow */
+ if( 2.0f*radout > 0.2f*(rect1.ymax-rect1.ymin) )
+ rect1.ymax -= 0.2f*(rect1.ymax-rect1.ymin);
+ else
+ rect1.ymax -= 2.0f*radout;
+
+ /* inner part */
+ tot= round_box_shadow_edges(wtb.inner_v, &rect1, radin, roundboxalign & 12, 0.0f);
+
+ /* inverse linear shadow alpha */
+ alpha= 0.15;
+ alphastep= 0.67;
+
+ for(step= 1; step<=radout; step++, alpha*=alphastep) {
+ round_box_shadow_edges(wtb.outer_v, &rect1, radin, 15, (float)step);
+
+ glColor4f(0.0f, 0.0f, 0.0f, alpha);
+
+ glBegin(GL_QUAD_STRIP);
+ for(a=0; a<tot; a++) {
+ glVertex2fv(wtb.outer_v[a]);
+ glVertex2fv(wtb.inner_v[a]);
+ }
+ glEnd();
+ }
+
+}
+
+static void widget_menu_back(uiWidgetColors *wcol, rcti *rect, int flag, int direction)
+{
+ uiWidgetBase wtb;
+ int roundboxalign= 15;
+
+ widget_init(&wtb);
+
+ /* menu is 2nd level or deeper */
+ if (flag & UI_BLOCK_POPUP) {
+ rect->ymin -= 4.0;
+ rect->ymax += 4.0;
+ }
+ else if (direction == UI_DOWN) {
+ roundboxalign= 12;
+ rect->ymin -= 4.0;
+ }
+ else if (direction == UI_TOP) {
+ roundboxalign= 3;
+ rect->ymax += 4.0;
+ }
+
+ glEnable(GL_BLEND);
+ widget_softshadow(rect, roundboxalign, 5.0f, 8.0f);
+
+ round_box_edges(&wtb, roundboxalign, rect, 5.0f);
+ wtb.emboss= 0;
+ widgetbase_draw(&wtb, wcol);
+
+ glDisable(GL_BLEND);
+}
+
+/* ************ custom buttons, old stuff ************** */
+
+/* draws in resolution of 20x4 colors */
+static void ui_draw_but_HSVCUBE(uiBut *but, rcti *rect)
+{
+ int a;
+ float h,s,v;
+ float dx, dy, sx1, sx2, sy, x, y;
+ float col0[4][3]; // left half, rect bottom to top
+ float col1[4][3]; // right half, rect bottom to top
+
+ h= but->hsv[0];
+ s= but->hsv[1];
+ v= but->hsv[2];
+
+ /* draw series of gouraud rects */
+ glShadeModel(GL_SMOOTH);
+
+ if(but->a1==0) { // H and V vary
+ hsv_to_rgb(0.0, s, 0.0, &col1[0][0], &col1[0][1], &col1[0][2]);
+ hsv_to_rgb(0.0, s, 0.333, &col1[1][0], &col1[1][1], &col1[1][2]);
+ hsv_to_rgb(0.0, s, 0.666, &col1[2][0], &col1[2][1], &col1[2][2]);
+ hsv_to_rgb(0.0, s, 1.0, &col1[3][0], &col1[3][1], &col1[3][2]);
+ x= h; y= v;
+ }
+ else if(but->a1==1) { // H and S vary
+ hsv_to_rgb(0.0, 0.0, v, &col1[0][0], &col1[0][1], &col1[0][2]);
+ hsv_to_rgb(0.0, 0.333, v, &col1[1][0], &col1[1][1], &col1[1][2]);
+ hsv_to_rgb(0.0, 0.666, v, &col1[2][0], &col1[2][1], &col1[2][2]);
+ hsv_to_rgb(0.0, 1.0, v, &col1[3][0], &col1[3][1], &col1[3][2]);
+ x= h; y= s;
+ }
+ else if(but->a1==2) { // S and V vary
+ hsv_to_rgb(h, 0.0, 0.0, &col1[0][0], &col1[0][1], &col1[0][2]);
+ hsv_to_rgb(h, 0.333, 0.0, &col1[1][0], &col1[1][1], &col1[1][2]);
+ hsv_to_rgb(h, 0.666, 0.0, &col1[2][0], &col1[2][1], &col1[2][2]);
+ hsv_to_rgb(h, 1.0, 0.0, &col1[3][0], &col1[3][1], &col1[3][2]);
+ x= v; y= s;
+ }
+ else { // only hue slider
+ hsv_to_rgb(0.0, 1.0, 1.0, &col1[0][0], &col1[0][1], &col1[0][2]);
+ VECCOPY(col1[1], col1[0]);
+ VECCOPY(col1[2], col1[0]);
+ VECCOPY(col1[3], col1[0]);
+ x= h; y= 0.5;
+ }
+
+ for(dx=0.0; dx<1.0; dx+= 0.05) {
+ // previous color
+ VECCOPY(col0[0], col1[0]);
+ VECCOPY(col0[1], col1[1]);
+ VECCOPY(col0[2], col1[2]);
+ VECCOPY(col0[3], col1[3]);
+
+ // new color
+ if(but->a1==0) { // H and V vary
+ hsv_to_rgb(dx, s, 0.0, &col1[0][0], &col1[0][1], &col1[0][2]);
+ hsv_to_rgb(dx, s, 0.333, &col1[1][0], &col1[1][1], &col1[1][2]);
+ hsv_to_rgb(dx, s, 0.666, &col1[2][0], &col1[2][1], &col1[2][2]);
+ hsv_to_rgb(dx, s, 1.0, &col1[3][0], &col1[3][1], &col1[3][2]);
+ }
+ else if(but->a1==1) { // H and S vary
+ hsv_to_rgb(dx, 0.0, v, &col1[0][0], &col1[0][1], &col1[0][2]);
+ hsv_to_rgb(dx, 0.333, v, &col1[1][0], &col1[1][1], &col1[1][2]);
+ hsv_to_rgb(dx, 0.666, v, &col1[2][0], &col1[2][1], &col1[2][2]);
+ hsv_to_rgb(dx, 1.0, v, &col1[3][0], &col1[3][1], &col1[3][2]);
+ }
+ else if(but->a1==2) { // S and V vary
+ hsv_to_rgb(h, 0.0, dx, &col1[0][0], &col1[0][1], &col1[0][2]);
+ hsv_to_rgb(h, 0.333, dx, &col1[1][0], &col1[1][1], &col1[1][2]);
+ hsv_to_rgb(h, 0.666, dx, &col1[2][0], &col1[2][1], &col1[2][2]);
+ hsv_to_rgb(h, 1.0, dx, &col1[3][0], &col1[3][1], &col1[3][2]);
+ }
+ else { // only H
+ hsv_to_rgb(dx, 1.0, 1.0, &col1[0][0], &col1[0][1], &col1[0][2]);
+ VECCOPY(col1[1], col1[0]);
+ VECCOPY(col1[2], col1[0]);
+ VECCOPY(col1[3], col1[0]);
+ }
+
+ // rect
+ sx1= rect->xmin + dx*(rect->xmax-rect->xmin);
+ sx2= rect->xmin + (dx+0.05)*(rect->xmax-rect->xmin);
+ sy= rect->ymin;
+ dy= (rect->ymax-rect->ymin)/3.0;
+
+ glBegin(GL_QUADS);
+ for(a=0; a<3; a++, sy+=dy) {
+ glColor3fv(col0[a]);
+ glVertex2f(sx1, sy);
+
+ glColor3fv(col1[a]);
+ glVertex2f(sx2, sy);
+
+ glColor3fv(col1[a+1]);
+ glVertex2f(sx2, sy+dy);
+
+ glColor3fv(col0[a+1]);
+ glVertex2f(sx1, sy+dy);
+ }
+ glEnd();
+ }
+
+ glShadeModel(GL_FLAT);
+
+ /* cursor */
+ x= rect->xmin + x*(rect->xmax-rect->xmin);
+ y= rect->ymin + y*(rect->ymax-rect->ymin);
+ CLAMP(x, rect->xmin+3.0, rect->xmax-3.0);
+ CLAMP(y, rect->ymin+3.0, rect->ymax-3.0);
+
+ fdrawXORcirc(x, y, 3.1);
+
+ /* outline */
+ glColor3ub(0, 0, 0);
+ fdrawbox((rect->xmin), (rect->ymin), (rect->xmax), (rect->ymax));
+}
+
+
+/* ************ button callbacks, draw ***************** */
-static void widget_numbut(uiBut *but, rcti *rect, int state, int roundboxtype)
+static void widget_numbut(uiWidgetColors *wcol, rcti *rect, int state, int roundboxalign)
{
- uiWidgetBase wt;
+ uiWidgetBase wtb;
- widget_init(&wt);
+ widget_init(&wtb);
/* fully rounded */
- round_box_edges(&wt, roundboxtype, rect, 0.5f*(rect->ymax - rect->ymin));
+ round_box_edges(&wtb, roundboxalign, rect, 0.5f*(rect->ymax - rect->ymin));
/* decoration */
- widget_num_tria(&wt.tria1, rect, 0.6f, 0);
- widget_num_tria(&wt.tria2, rect, 0.6f, 'r');
+ if(!(state & UI_TEXTINPUT)) {
+ widget_num_tria(&wtb.tria1, rect, 0.6f, 0);
+ widget_num_tria(&wtb.tria2, rect, 0.6f, 'r');
+ }
+ widgetbase_draw(&wtb, wcol);
- widget_draw(&wt, &wcol_num, state);
+ /* text space */
+ rect->xmin += (rect->ymax-rect->ymin);
+ rect->xmax -= (rect->ymax-rect->ymin);
- if(state & UI_SELECT)
- widget_draw_text_icon(but, rect, wcol_num.text_sel);
- else
- widget_draw_text_icon(but, rect, wcol_num.text);
}
-static void widget_textbut(uiBut *but, rcti *rect, int state, int roundboxtype)
+static void widget_numslider(uiBut *but, uiWidgetColors *wcol, rcti *rect, int state, int roundboxalign)
{
- uiWidgetBase wt;
+ uiWidgetBase wtb, wtb1;
+ rcti rect1;
+ double value;
+ float offs, fac;
+ char outline[3];
+ int slideralign;
- widget_init(&wt);
+ widget_init(&wtb);
+ widget_init(&wtb1);
- /* half rounded */
- round_box_edges(&wt, roundboxtype, rect, 4.0f);
+ /* backdrop first */
- /* XXX button state */
- widget_draw(&wt, &wcol_text, state);
+ /* fully rounded */
+ offs= 0.5f*(rect->ymax - rect->ymin);
+ round_box_edges(&wtb, roundboxalign, rect, offs);
- widget_draw_text_icon(but, rect, wcol_text.text);
+ wtb.outline= 0;
+ widgetbase_draw(&wtb, wcol);
+
+ /* slider part */
+ rect1= *rect;
+
+ value= ui_get_but_val(but);
+ fac= (value-but->softmin)*(rect1.xmax - rect1.xmin - offs)/(but->softmax - but->softmin);
+
+ rect1.xmax= rect1.xmin + fac + offs;
+ slideralign = roundboxalign;
+ slideralign &= ~(2|4);
+ round_box_edges(&wtb1, slideralign, &rect1, offs);
+
+ VECCOPY(outline, wcol->outline);
+ VECCOPY(wcol->outline, wcol->item);
+ VECCOPY(wcol->inner, wcol->item);
+ SWAP(short, wcol->shadetop, wcol->shadedown);
+
+ widgetbase_draw(&wtb1, wcol);
+ VECCOPY(wcol->outline, outline);
+ SWAP(short, wcol->shadetop, wcol->shadedown);
+
+ /* outline */
+ wtb.outline= 1;
+ wtb.inner= 0;
+ widgetbase_draw(&wtb, wcol);
+
+}
+
+static void widget_swatch(uiBut *but, uiWidgetColors *wcol, rcti *rect, int state, int roundboxalign)
+{
+ uiWidgetBase wtb;
+ float col[4];
+
+ widget_init(&wtb);
+
+ /* half rounded */
+ round_box_edges(&wtb, roundboxalign, rect, 4.0f);
+
+ ui_get_but_vectorf(but, col);
+ wcol->inner[0]= FTOCHAR(col[0]);
+ wcol->inner[1]= FTOCHAR(col[1]);
+ wcol->inner[2]= FTOCHAR(col[2]);
+
+ widgetbase_draw(&wtb, wcol);
+
}
-static void widget_menubut(uiBut *but, rcti *rect, int state, int roundboxtype)
+static void widget_textbut(uiWidgetColors *wcol, rcti *rect, int state, int roundboxalign)
{
- uiWidgetBase wt;
+ uiWidgetBase wtb;
- widget_init(&wt);
+ widget_init(&wtb);
/* half rounded */
- round_box_edges(&wt, roundboxtype, rect, 4.0f);
+ round_box_edges(&wtb, roundboxalign, rect, 4.0f);
- /* XXX button state */
+ widgetbase_draw(&wtb, wcol);
+
+}
+
+
+static void widget_menubut(uiWidgetColors *wcol, rcti *rect, int state, int roundboxalign)
+{
+ uiWidgetBase wtb;
+
+ widget_init(&wtb);
+
+ /* half rounded */
+ round_box_edges(&wtb, roundboxalign, rect, 4.0f);
/* decoration */
- widget_menu_trias(&wt.tria1, rect);
+ widget_menu_trias(&wtb.tria1, rect);
- widget_draw(&wt, &wcol_menu, state);
+ widgetbase_draw(&wtb, wcol);
+
+ /* text space */
+ rect->xmax -= (rect->ymax-rect->ymin);
+
+}
- widget_draw_text_icon(but, rect, wcol_menu.text);
+static void widget_pulldownbut(uiWidgetColors *wcol, rcti *rect, int state, int roundboxalign)
+{
+ if(state & UI_ACTIVE) {
+ uiWidgetBase wtb;
+
+ widget_init(&wtb);
+
+ /* fully rounded */
+ round_box_edges(&wtb, roundboxalign, rect, 0.5f*(rect->ymax - rect->ymin));
+
+ widgetbase_draw(&wtb, wcol);
+ }
}
-static void widget_togbut(uiBut *but, rcti *rect, int state, int roundboxtype)
+static void widget_menu_itembut(uiWidgetColors *wcol, rcti *rect, int state, int roundboxalign)
+{
+ uiWidgetBase wtb;
+
+ widget_init(&wtb);
+
+ /* not rounded, no outline */
+ wtb.outline= 0;
+ round_box_edges(&wtb, 0, rect, 0.0f);
+
+ widgetbase_draw(&wtb, wcol);
+}
+
+
+static void widget_optionbut(uiWidgetColors *wcol, rcti *rect, int state, int roundboxalign)
{
- uiWidgetBase wt;
+ uiWidgetBase wtb;
rcti recttemp= *rect;
int delta;
- widget_init(&wt);
+ widget_init(&wtb);
/* square */
recttemp.xmax= recttemp.xmin + (recttemp.ymax-recttemp.ymin);
@@ -794,131 +1519,185 @@ static void widget_togbut(uiBut *but, rcti *rect, int state, int roundboxtype)
recttemp.ymax-= delta;
/* half rounded */
- round_box_edges(&wt, roundboxtype, &recttemp, 4.0f);
-
- /* button state */
+ round_box_edges(&wtb, 15, &recttemp, 4.0f);
/* decoration */
if(state & UI_SELECT) {
- widget_check_trias(&wt.tria1, &recttemp);
+ widget_check_trias(&wtb.tria1, &recttemp);
}
- widget_draw(&wt, &wcol_menu, state);
-
- if(state & UI_SELECT)
- widget_draw_text_icon(but, rect, wcol_menu.text);
- else
- widget_draw_text_icon(but, rect, wcol_menu.text_sel);
+ widgetbase_draw(&wtb, wcol);
+
+ /* text space */
+ rect->xmin += (rect->ymax-rect->ymin)*0.7 + delta;
}
-static void widget_rowbut(uiBut *but, rcti *rect, int state, int roundboxtype)
+static void widget_radiobut(uiWidgetColors *wcol, rcti *rect, int state, int roundboxalign)
{
- uiWidgetBase wt;
+ uiWidgetBase wtb;
- widget_init(&wt);
+ widget_init(&wtb);
/* half rounded */
- round_box_edges(&wt, roundboxtype, rect, 4.0f);
+ round_box_edges(&wtb, roundboxalign, rect, 4.0f);
- widget_draw(&wt, &wcol_row, state);
+ widgetbase_draw(&wtb, wcol);
- widget_draw_text_icon(but, rect, wcol_row.text);
}
-static void widget_but(uiBut *but, rcti *rect, int state, int roundboxtype)
+static void widget_but(uiWidgetColors *wcol, rcti *rect, int state, int roundboxalign)
{
- uiWidgetBase wt;
+ uiWidgetBase wtb;
- widget_init(&wt);
+ widget_init(&wtb);
/* half rounded */
- round_box_edges(&wt, roundboxtype, rect, 4.0f);
+ round_box_edges(&wtb, roundboxalign, rect, 4.0f);
- widget_draw(&wt, &wcol_regular, state);
+ widgetbase_draw(&wtb, wcol);
- widget_draw_text_icon(but, rect, wcol_regular.text);
}
-static void widget_roundbut(uiBut *but, rcti *rect, int state, int roundboxtype)
+static void widget_roundbut(uiWidgetColors *wcol, rcti *rect, int state, int roundboxalign)
{
- uiWidgetBase wt;
+ uiWidgetBase wtb;
- widget_init(&wt);
+ widget_init(&wtb);
/* fully rounded */
- round_box_edges(&wt, roundboxtype, rect, 0.5f*(rect->ymax - rect->ymin));
-
- widget_num_tria(&wt.tria1, rect, 0.6f, 0);
-
- widget_draw(&wt, &wcol_regular2, state);
-
- widget_draw_text_icon(but, rect, wcol_regular2.text);
+ round_box_edges(&wtb, roundboxalign, rect, 0.5f*(rect->ymax - rect->ymin));
+ widgetbase_draw(&wtb, wcol);
}
-/* test function only */
-void drawnewstuff()
+static void widget_disabled(rcti *rect)
{
- rcti rect;
-
- rect.xmin= 10; rect.xmax= 10+100;
- rect.ymin= -30; rect.ymax= -30+18;
- widget_numbut(NULL, &rect, 0, 15);
+ float col[4];
- rect.xmin= 120; rect.xmax= 120+100;
- rect.ymin= -30; rect.ymax= -30+20;
- widget_numbut(NULL, &rect, 0, 15);
+ glEnable(GL_BLEND);
- rect.xmin= 10; rect.xmax= 10+100;
- rect.ymin= -60; rect.ymax= -60+20;
- widget_menubut(NULL, &rect, 0, 15);
+ /* can't use theme TH_BACK or TH_PANEL... undefined */
+ glGetFloatv(GL_COLOR_CLEAR_VALUE, col);
+ glColor4f(col[0], col[1], col[2], 0.5f);
+ glRectf(rect->xmin, rect->ymin, rect->xmax, rect->ymax);
- rect.xmin= 120; rect.xmax= 120+100;
- widget_but(NULL, &rect, 0, 15);
-
- rect.xmin= 10; rect.xmax= 10+100;
- rect.ymin= -90; rect.ymax= -90+20;
- widget_rowbut(NULL, &rect, 1, 9);
-
- rect.xmin= 109; rect.xmax= 110+100;
- rect.ymin= -90; rect.ymax= -90+20;
- widget_rowbut(NULL, &rect, 0, 6);
-
- rect.xmin= 240; rect.xmax= 240+30;
- rect.ymin= -90; rect.ymax= -90+30;
- widget_roundbut(NULL, &rect, 0, 15);
+ glDisable(GL_BLEND);
}
-/* ************ new color and style definition ********************* */
-/*
-
-- minimum width definition?
-
-- Types
- * Icon toggle button
- * Row button (exclusive "enum" values)
- * Option button (also "bit flags")
- * Tool/Operator button
- * Number button
- * Number slider
-
- * Text string button (to rename data)
- * File name button (separate design?)
- * Linkage "Library" button (Object, Material, Parent, etc)
- * Linkage data name button (Bone, Vgroup)
-
- * Popup settings button, with optional text, icon or both.
- * Popup linkage button (Materials, Bones, etc)
- * Pulldown menu button (to invoke pulldown)
- * Pulldown menu item (and menu backdrop + title)
-
- * Button-less icons (open-close triangle, delete cross, ...)
- * Color picker Swatch
- * Color picker fields
- * Normal button (rotatable sphere)
+static uiWidgetType *widget_type(uiWidgetTypeEnum type)
+{
+ bTheme *btheme= U.themes.first;
+ static uiWidgetType wt;
+
+ /* defaults */
+ wt.wcol_theme= &btheme->tui.wcol_regular;
+ wt.state= widget_state;
+ wt.draw= widget_but;
+ wt.custom= NULL;
+ wt.text= widget_draw_text_icon;
+
+ switch(type) {
+ case UI_WTYPE_LABEL:
+ wt.draw= NULL;
+ wt.state= widget_state_label;
+ break;
+
+ case UI_WTYPE_TOGGLE:
+ break;
+
+ case UI_WTYPE_OPTION:
+ wt.wcol_theme= &btheme->tui.wcol_option;
+ wt.draw= widget_optionbut;
+ wt.state= widget_state_label;
+ break;
+
+ case UI_WTYPE_RADIO:
+ wt.wcol_theme= &btheme->tui.wcol_radio;
+ wt.draw= widget_radiobut;
+ break;
+
+ case UI_WTYPE_NUMBER:
+ wt.wcol_theme= &btheme->tui.wcol_num;
+ wt.draw= widget_numbut;
+ break;
+
+ case UI_WTYPE_SLIDER:
+ wt.wcol_theme= &btheme->tui.wcol_numslider;
+ wt.custom= widget_numslider;
+ break;
+
+ case UI_WTYPE_EXEC:
+ wt.wcol_theme= &btheme->tui.wcol_tool;
+ wt.draw= widget_roundbut;
+ break;
+
+
+ /* strings */
+ case UI_WTYPE_NAME:
+ wt.wcol_theme= &btheme->tui.wcol_text;
+ wt.draw= widget_textbut;
+ break;
+
+ case UI_WTYPE_NAME_LINK:
+ break;
+
+ case UI_WTYPE_POINTER_LINK:
+ break;
+
+ case UI_WTYPE_FILENAME:
+ break;
+
+
+ /* start menus */
+ case UI_WTYPE_MENU_RADIO:
+ wt.wcol_theme= &btheme->tui.wcol_menu;
+ wt.draw= widget_menubut;
+ break;
+
+ case UI_WTYPE_MENU_POINTER_LINK:
+ wt.wcol_theme= &btheme->tui.wcol_menu;
+ wt.draw= widget_menubut;
+ break;
+
+
+ case UI_WTYPE_PULLDOWN:
+ wt.wcol_theme= &btheme->tui.wcol_pulldown;
+ wt.draw= widget_pulldownbut;
+ wt.state= widget_state_pulldown;
+ break;
+
+ /* in menus */
+ case UI_WTYPE_MENU_ITEM:
+ wt.wcol_theme= &btheme->tui.wcol_menu_item;
+ wt.draw= widget_menu_itembut;
+ wt.state= widget_state_menu_item;
+ break;
+
+ case UI_WTYPE_MENU_BACK:
+ wt.wcol_theme= &btheme->tui.wcol_menu_back;
+ wt.draw= widget_menu_back;
+ break;
+
+ /* specials */
+ case UI_WTYPE_ICON:
+ wt.draw= NULL;
+ break;
+
+ case UI_WTYPE_SWATCH:
+ wt.custom= widget_swatch;
+ break;
+
+ case UI_WTYPE_RGB_PICKER:
+ break;
+
+ case UI_WTYPE_NORMAL:
+ break;
+ }
+
+ return &wt;
+}
-*/
static int widget_roundbox_set(uiBut *but, rcti *rect)
{
@@ -965,82 +1744,142 @@ static int widget_roundbox_set(uiBut *but, rcti *rect)
return 15;
}
-
-/* widget classification
-
-- state:
- UI_MOUSE_OVER: on mouse over
- UI_ACTIVE: while using it
- UI_SELECT: internal state (toggle, row)
-
-- drawtype
- CUSTOM: no widget class, entirely free within rect
- WIDGET: part of the standard widget set
-
-- text placement, split?
-
-- widget color style hint
- - outline
- - interior col
- - interior slider color?
- - shade factors
- - decoration color
- - text colors
-
-- callbacks
- - widget_draw()
- - widget_text_icon()
- -
-
-*/
-
-
-void ui_draw_but_new(ARegion *ar, uiBut *but)
+/* conversion from old to new buttons, so still messy */
+void ui_draw_but(ARegion *ar, uiStyle *style, uiBut *but, rcti *rect)
{
- rcti rect;
- int roundboxtype, state;
-
- /* XXX project later */
- rect.xmin= but->x1;
- rect.xmax= but->x2;
- rect.ymin= but->y1;
- rect.ymax= but->y2;
-
- roundboxtype= widget_roundbox_set(but, &rect);
- state= but->flag;
-
- switch (but->type) {
- case LABEL:
- widget_draw_text_icon(but, &rect, wcol_regular2.text);
- break;
- case NUM:
- widget_numbut(but, &rect, state, roundboxtype);
- break;
- case ROW:
- widget_rowbut(but, &rect, state, roundboxtype);
- break;
- case TEX:
- widget_textbut(but, &rect, state, roundboxtype);
- break;
- case TOG:
- case TOGN:
- case TOG3:
- if (!(state & UI_HAS_ICON))
- widget_togbut(but, &rect, state, roundboxtype);
- else
- widget_but(but, &rect, state, roundboxtype);
- break;
- case MENU:
- case BLOCK:
- widget_menubut(but, &rect, state, roundboxtype);
- break;
+ bTheme *btheme= U.themes.first;
+ ThemeUI *tui= &btheme->tui;
+ uiFontStyle *fstyle= &style->widget;
+ uiWidgetType *wt= NULL;
+
+ /* handle menus seperately */
+ if(but->dt==UI_EMBOSSP) {
+ switch (but->type) {
+ case LABEL:
+ widget_draw_text_icon(&style->widgetlabel, &tui->wcol_menu_back, but, rect);
+ break;
+ case SEPR:
+ break;
+
+ default:
+ wt= widget_type(UI_WTYPE_MENU_ITEM);
+ }
+ }
+ else if(but->dt==UI_EMBOSSN) {
+ /* "nothing" */
+ wt= widget_type(UI_WTYPE_ICON);
+ }
+ else {
+
+ switch (but->type) {
+ case LABEL:
+ if(but->block->flag & UI_BLOCK_LOOP)
+ widget_draw_text_icon(&style->widgetlabel, &tui->wcol_menu_back, but, rect);
+ else {
+ wt= widget_type(UI_WTYPE_LABEL);
+ fstyle= &style->widgetlabel;
+ }
+ break;
+ case SEPR:
+ break;
+ case BUT:
+ wt= widget_type(UI_WTYPE_EXEC);
+ break;
+ case NUM:
+ wt= widget_type(UI_WTYPE_NUMBER);
+ break;
+ case NUMSLI:
+ case HSVSLI:
+ wt= widget_type(UI_WTYPE_SLIDER);
+ break;
+ case ROW:
+ wt= widget_type(UI_WTYPE_RADIO);
+ break;
+ case TEX:
+ wt= widget_type(UI_WTYPE_NAME);
+ break;
+ case TOGBUT:
+ wt= widget_type(UI_WTYPE_TOGGLE);
+ break;
+ case TOG:
+ case TOGN:
+ case TOG3:
+ if (!(but->flag & UI_HAS_ICON)) {
+ wt= widget_type(UI_WTYPE_OPTION);
+ but->flag |= UI_TEXT_LEFT;
+ }
+ else
+ wt= widget_type(UI_WTYPE_TOGGLE);
+ break;
+ case MENU:
+ case BLOCK:
+ case ICONTEXTROW:
+ wt= widget_type(UI_WTYPE_MENU_RADIO);
+ break;
+
+ case PULLDOWN:
+ case HMENU:
+ wt= widget_type(UI_WTYPE_PULLDOWN);
+ break;
- default:
- widget_but(but, &rect, state, roundboxtype);
+ case BUTM:
+ wt= widget_type(UI_WTYPE_MENU_ITEM);
+ break;
+
+ case COL:
+ wt= widget_type(UI_WTYPE_SWATCH);
+ break;
+
+ // XXX four old button types
+ case HSVCUBE:
+ ui_draw_but_HSVCUBE(but, rect);
+ break;
+ case BUT_COLORBAND:
+ ui_draw_but_COLORBAND(but, &tui->wcol_regular, rect);
+ break;
+ case BUT_NORMAL:
+ ui_draw_but_NORMAL(but, &tui->wcol_regular, rect);
+ break;
+ case BUT_CURVE:
+ ui_draw_but_CURVE(ar, but, &tui->wcol_regular, rect);
+ break;
+
+ default:
+ wt= widget_type(UI_WTYPE_TOGGLE);
+ }
}
+ if(wt) {
+ rcti disablerect= *rect; /* rect gets clipped smaller for text */
+ int roundboxalign, state;
+
+ roundboxalign= widget_roundbox_set(but, rect);
+ state= but->flag;
+ if(but->editstr) state |= UI_TEXTINPUT;
+
+ wt->state(wt, state);
+ if(wt->custom)
+ wt->custom(but, &wt->wcol, rect, state, roundboxalign);
+ else if(wt->draw)
+ wt->draw(&wt->wcol, rect, state, roundboxalign);
+ wt->text(fstyle, &wt->wcol, but, rect);
+
+ if(state & UI_BUT_DISABLED)
+ if(but->dt!=UI_EMBOSSP)
+ widget_disabled(&disablerect);
+ }
}
-
+void ui_draw_menu_back(uiStyle *style, uiBlock *block, rcti *rect)
+{
+ uiWidgetType *wt= widget_type(UI_WTYPE_MENU_BACK);
+
+ wt->state(wt, 0);
+ if(block)
+ wt->draw(&wt->wcol, rect, block->flag, block->direction);
+ else
+ wt->draw(&wt->wcol, rect, 0, 0);
+
+}
diff --git a/source/blender/editors/interface/resources.c b/source/blender/editors/interface/resources.c
index 039ebcc91f9..1cb58c986d0 100644
--- a/source/blender/editors/interface/resources.c
+++ b/source/blender/editors/interface/resources.c
@@ -40,30 +40,38 @@
#include "MEM_guardedalloc.h"
+
+#include "DNA_curve_types.h"
#include "DNA_listBase.h"
#include "DNA_userdef_types.h"
#include "DNA_screen_types.h"
#include "DNA_space_types.h"
+#include "BLI_blenlib.h"
+
#include "IMB_imbuf.h"
#include "IMB_imbuf_types.h"
+#include "BKE_DerivedMesh.h"
+#include "BKE_global.h"
+#include "BKE_main.h"
+#include "BKE_texture.h"
#include "BKE_utildefines.h"
#include "BIF_gl.h"
+#include "UI_interface.h"
#include "UI_resources.h"
#include "UI_interface_icons.h"
-//#include "UI_icons.h"
-#include "BLI_blenlib.h"
+#include "interface_intern.h"
/* global for themes */
typedef void (*VectorDrawFunc)(int x, int y, int w, int h, float alpha);
static bTheme *theme_active=NULL;
static int theme_spacetype= SPACE_VIEW3D;
-
+static int theme_regionid= RGN_TYPE_WINDOW;
void ui_resources_init(void)
{
@@ -86,7 +94,6 @@ char *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid)
static char error[4]={240, 0, 240, 255};
static char alert[4]={240, 60, 60, 255};
static char headerdesel[4]={0,0,0,255};
- static char custom[4]={0,0,0,255};
char *cp= error;
@@ -96,51 +103,9 @@ char *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid)
if(colorid < TH_THEMEUI) {
switch(colorid) {
- case TH_BUT_OUTLINE:
- cp= btheme->tui.outline; break;
- case TH_BUT_NEUTRAL:
- cp= btheme->tui.neutral; break;
- case TH_BUT_ACTION:
- cp= btheme->tui.action; break;
- case TH_BUT_SETTING:
- cp= btheme->tui.setting; break;
- case TH_BUT_SETTING1:
- cp= btheme->tui.setting1; break;
- case TH_BUT_SETTING2:
- cp= btheme->tui.setting2; break;
- case TH_BUT_NUM:
- cp= btheme->tui.num; break;
- case TH_BUT_TEXTFIELD:
- cp= btheme->tui.textfield; break;
- case TH_BUT_TEXTFIELD_HI:
- cp= btheme->tui.textfield_hi; break;
- case TH_BUT_POPUP:
- cp= btheme->tui.popup; break;
- case TH_BUT_TEXT:
- cp= btheme->tui.text; break;
- case TH_BUT_TEXT_HI:
- cp= btheme->tui.text_hi; break;
- case TH_MENU_BACK:
- cp= btheme->tui.menu_back; break;
- case TH_MENU_ITEM:
- cp= btheme->tui.menu_item; break;
- case TH_MENU_HILITE:
- cp= btheme->tui.menu_hilite; break;
- case TH_MENU_TEXT:
- cp= btheme->tui.menu_text; break;
- case TH_MENU_TEXT_HI:
- cp= btheme->tui.menu_text_hi; break;
-
- case TH_BUT_DRAWTYPE:
- cp= &btheme->tui.but_drawtype; break;
- case TH_ICONFILE:
- cp= btheme->tui.iconfile; break;
-
case TH_REDALERT:
cp= alert; break;
- case TH_CUSTOM:
- cp= custom; break;
}
}
else {
@@ -198,11 +163,46 @@ char *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid)
switch(colorid) {
case TH_BACK:
- cp= ts->back; break;
+ if(theme_regionid==RGN_TYPE_WINDOW)
+ cp= ts->back;
+ else if(theme_regionid==RGN_TYPE_CHANNELS)
+ cp= ts->list;
+ else if(theme_regionid==RGN_TYPE_HEADER)
+ cp= ts->header;
+ else
+ cp= ts->button;
+ break;
case TH_TEXT:
- cp= ts->text; break;
+ if(theme_regionid==RGN_TYPE_WINDOW)
+ cp= ts->text;
+ else if(theme_regionid==RGN_TYPE_CHANNELS)
+ cp= ts->list_text;
+ else if(theme_regionid==RGN_TYPE_HEADER)
+ cp= ts->header_text;
+ else
+ cp= ts->button_text;
+ break;
case TH_TEXT_HI:
- cp= ts->text_hi; break;
+ if(theme_regionid==RGN_TYPE_WINDOW)
+ cp= ts->text_hi;
+ else if(theme_regionid==RGN_TYPE_CHANNELS)
+ cp= ts->list_text_hi;
+ else if(theme_regionid==RGN_TYPE_HEADER)
+ cp= ts->header_text_hi;
+ else
+ cp= ts->button_text_hi;
+ break;
+ case TH_TITLE:
+ if(theme_regionid==RGN_TYPE_WINDOW)
+ cp= ts->title;
+ else if(theme_regionid==RGN_TYPE_CHANNELS)
+ cp= ts->list_title;
+ else if(theme_regionid==RGN_TYPE_HEADER)
+ cp= ts->header_title;
+ else
+ cp= ts->button_title;
+ break;
+
case TH_HEADER:
cp= ts->header; break;
case TH_HEADERDESEL:
@@ -213,8 +213,25 @@ char *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid)
headerdesel[2]= cp[2]>10?cp[2]-10:0;
cp= headerdesel;
break;
+ case TH_HEADER_TEXT:
+ cp= ts->header_text; break;
+ case TH_HEADER_TEXT_HI:
+ cp= ts->header_text_hi; break;
+
case TH_PANEL:
cp= ts->panel; break;
+ case TH_PANEL_TEXT:
+ cp= ts->panel_text; break;
+ case TH_PANEL_TEXT_HI:
+ cp= ts->panel_text_hi; break;
+
+ case TH_BUTBACK:
+ cp= ts->button; break;
+ case TH_BUTBACK_TEXT:
+ cp= ts->button_text; break;
+ case TH_BUTBACK_TEXT_HI:
+ cp= ts->button_text_hi; break;
+
case TH_SHADE1:
cp= ts->shade1; break;
case TH_SHADE2:
@@ -340,11 +357,56 @@ char *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid)
return cp;
}
+#define SETCOLTEST(col, r, g, b, a) if(col[3]==0) {col[0]=r; col[1]=g; col[2]= b; col[3]= a;}
+
+/* use this call to init new variables in themespace, if they're same for all */
+static void ui_theme_init_new_do(ThemeSpace *ts)
+{
+ SETCOLTEST(ts->header_text, 0, 0, 0, 255);
+ SETCOLTEST(ts->header_title, 0, 0, 0, 255);
+ SETCOLTEST(ts->header_text_hi, 255, 255, 255, 255);
+
+ SETCOLTEST(ts->panel_text, 0, 0, 0, 255);
+ SETCOLTEST(ts->panel_title, 0, 0, 0, 255);
+ SETCOLTEST(ts->panel_text_hi, 255, 255, 255, 255);
+
+ SETCOLTEST(ts->button, 145, 145, 145, 245);
+ SETCOLTEST(ts->button_title, 0, 0, 0, 255);
+ SETCOLTEST(ts->button_text, 0, 0, 0, 255);
+ SETCOLTEST(ts->button_text_hi, 255, 255, 255, 255);
+
+ SETCOLTEST(ts->list, 165, 165, 165, 255);
+ SETCOLTEST(ts->list_title, 0, 0, 0, 255);
+ SETCOLTEST(ts->list_text, 0, 0, 0, 255);
+ SETCOLTEST(ts->list_text_hi, 255, 255, 255, 255);
+}
+
+static void ui_theme_init_new(bTheme *btheme)
+{
+ ui_theme_init_new_do(&btheme->tbuts);
+ ui_theme_init_new_do(&btheme->tv3d);
+ ui_theme_init_new_do(&btheme->tfile);
+ ui_theme_init_new_do(&btheme->tipo);
+ ui_theme_init_new_do(&btheme->tinfo);
+ ui_theme_init_new_do(&btheme->tsnd);
+ ui_theme_init_new_do(&btheme->tact);
+ ui_theme_init_new_do(&btheme->tnla);
+ ui_theme_init_new_do(&btheme->tseq);
+ ui_theme_init_new_do(&btheme->tima);
+ ui_theme_init_new_do(&btheme->timasel);
+ ui_theme_init_new_do(&btheme->text);
+ ui_theme_init_new_do(&btheme->toops);
+ ui_theme_init_new_do(&btheme->ttime);
+ ui_theme_init_new_do(&btheme->tnode);
+
+}
+
#define SETCOL(col, r, g, b, a) col[0]=r; col[1]=g; col[2]= b; col[3]= a;
+#define SETCOLF(col, r, g, b, a) col[0]=r*255; col[1]=g*255; col[2]= b*255; col[3]= a*255;
-/* initialize
+/* initialize default theme, can't be edited
Note: when you add new colors, created & saved themes need initialized
- in usiblender.c, search for "versionfile"
+ use function below, init_userdef_do_versions()
*/
void ui_theme_init_userdef(void)
{
@@ -361,43 +423,26 @@ void ui_theme_init_userdef(void)
strcpy(btheme->name, "Default");
}
- UI_SetTheme(NULL); // make sure the global used in this file is set
+ UI_SetTheme(0, 0); // make sure the global used in this file is set
/* UI buttons */
- SETCOL(btheme->tui.outline, 130, 130, 130, 255);
- SETCOL(btheme->tui.neutral, 165, 165, 165, 255);
- SETCOL(btheme->tui.action, 165, 165, 165, 255);
- SETCOL(btheme->tui.setting, 165, 165, 165, 255);
- SETCOL(btheme->tui.setting1, 165, 165, 165, 255);
- SETCOL(btheme->tui.setting2, 165, 165, 165, 255);
- SETCOL(btheme->tui.num, 165, 165, 165, 255);
- SETCOL(btheme->tui.textfield, 143, 142, 143, 255);
- SETCOL(btheme->tui.textfield_hi,255, 151, 26, 255);
- SETCOL(btheme->tui.popup, 174, 174, 174, 255);
-
- SETCOL(btheme->tui.text, 0,0,0, 255);
- SETCOL(btheme->tui.text_hi, 255, 255, 255, 255);
-
- SETCOL(btheme->tui.menu_back, 220, 220, 220, 235);
- SETCOL(btheme->tui.menu_item, 255, 255, 255, 20);
- SETCOL(btheme->tui.menu_hilite, 110, 110, 110, 255);
- SETCOL(btheme->tui.menu_text, 0, 0, 0, 255);
- SETCOL(btheme->tui.menu_text_hi, 255, 255, 255, 255);
-
- btheme->tui.but_drawtype= TH_ROUNDSHADED;
- BLI_strncpy(btheme->tui.iconfile, "", sizeof(btheme->tui.iconfile));
+ ui_widget_color_init(&btheme->tui);
+ /* common (new) variables */
+ ui_theme_init_new(btheme);
+
/* space view3d */
- SETCOL(btheme->tv3d.back, 90, 90, 90, 255);
+ SETCOLF(btheme->tv3d.back, 0.225, 0.225, 0.225, 1.0);
SETCOL(btheme->tv3d.text, 0, 0, 0, 255);
SETCOL(btheme->tv3d.text_hi, 255, 255, 255, 255);
- SETCOL(btheme->tv3d.header, 185, 185, 185, 255);
+
+ SETCOLF(btheme->tv3d.header, 0.45, 0.45, 0.45, 1.0);
SETCOL(btheme->tv3d.panel, 165, 165, 165, 127);
-
+
SETCOL(btheme->tv3d.shade1, 160, 160, 160, 100);
SETCOL(btheme->tv3d.shade2, 0x7f, 0x70, 0x70, 100);
- SETCOL(btheme->tv3d.grid, 74, 74, 74 , 255);
+ SETCOLF(btheme->tv3d.grid, 0.251, 0.251, 0.251, 1.0);
SETCOL(btheme->tv3d.wire, 0x0, 0x0, 0x0, 255);
SETCOL(btheme->tv3d.lamp, 0, 0, 0, 40);
SETCOL(btheme->tv3d.select, 241, 88, 0, 255);
@@ -427,19 +472,16 @@ void ui_theme_init_userdef(void)
/* to have something initialized */
btheme->tbuts= btheme->tv3d;
- SETCOL(btheme->tbuts.back, 0x82, 0x82, 0x82, 255);
- SETCOL(btheme->tbuts.header, 185, 185, 185, 255);
+ SETCOLF(btheme->tbuts.back, 0.45, 0.45, 0.45, 1.0);
SETCOL(btheme->tbuts.panel, 0x82, 0x82, 0x82, 255);
- /* space ipo */
- /* to have something initialized */
+ /* graph editor */
btheme->tipo= btheme->tv3d;
-
+ SETCOLF(btheme->tipo.back, 0.42, 0.42, 0.42, 1.0);
+ SETCOLF(btheme->tipo.list, 0.4, 0.4, 0.4, 1.0);
SETCOL(btheme->tipo.grid, 94, 94, 94, 255);
- SETCOL(btheme->tipo.back, 120, 120, 120, 255);
- SETCOL(btheme->tipo.header, 185, 185, 185, 255);
SETCOL(btheme->tipo.panel, 255, 255, 255, 150);
- SETCOL(btheme->tipo.shade1, 172, 172, 172, 100);
+ SETCOL(btheme->tipo.shade1, 150, 150, 150, 100); /* scrollbars */
SETCOL(btheme->tipo.shade2, 0x70, 0x70, 0x70, 100);
SETCOL(btheme->tipo.vertex, 0, 0, 0, 255);
SETCOL(btheme->tipo.vertex_select, 255, 133, 0, 255);
@@ -455,13 +497,17 @@ void ui_theme_init_userdef(void)
SETCOL(btheme->tipo.group, 79, 101, 73, 255);
SETCOL(btheme->tipo.group_active, 135, 177, 125, 255);
+ /* dopesheet */
+ btheme->tact= btheme->tipo;
+ SETCOL(btheme->tact.strip, 12, 10, 10, 128);
+ SETCOL(btheme->tact.strip_select, 255, 140, 0, 255);
+
/* space file */
/* to have something initialized */
btheme->tfile= btheme->tv3d;
SETCOL(btheme->tfile.back, 90, 90, 90, 255);
SETCOL(btheme->tfile.text, 250, 250, 250, 255);
SETCOL(btheme->tfile.text_hi, 15, 15, 15, 255);
- SETCOL(btheme->tfile.header, 185, 185, 185, 255);
SETCOL(btheme->tfile.panel, 180, 180, 180, 255); // bookmark/ui regions
SETCOL(btheme->tfile.active, 130, 130, 130, 255); // selected files
SETCOL(btheme->tfile.hilite, 255, 140, 25, 255); // selected files
@@ -472,31 +518,13 @@ void ui_theme_init_userdef(void)
SETCOL(btheme->tfile.scene, 250, 250, 250, 255);
- /* space action */
- btheme->tact= btheme->tv3d;
- SETCOL(btheme->tact.back, 116, 116, 116, 255);
- SETCOL(btheme->tact.text, 0, 0, 0, 255);
- SETCOL(btheme->tact.text_hi, 255, 255, 255, 255);
- SETCOL(btheme->tact.header, 185, 185, 185, 255);
- SETCOL(btheme->tact.grid, 94, 94, 94, 255);
- SETCOL(btheme->tact.face, 166, 166, 166, 255); // RVK
- SETCOL(btheme->tact.shade1, 172, 172, 172, 255); // sliders
- SETCOL(btheme->tact.shade2, 74, 74, 74, 100); // bar
- SETCOL(btheme->tact.hilite, 255, 160, 0, 100); // bar
- SETCOL(btheme->tact.strip_select, 255, 160, 0, 255);
- SETCOL(btheme->tact.strip, 78, 78, 78, 255);
- SETCOL(btheme->tact.group, 79, 101, 73, 255);
- SETCOL(btheme->tact.group_active, 135, 177, 125, 255)
- SETCOL(btheme->tact.ds_channel, 82, 96, 110, 255);
- SETCOL(btheme->tact.ds_subchannel, 124, 137, 150, 255);
-
+
/* space nla */
btheme->tnla= btheme->tv3d;
SETCOL(btheme->tnla.back, 116, 116, 116, 255);
SETCOL(btheme->tnla.text, 0, 0, 0, 255);
SETCOL(btheme->tnla.text_hi, 255, 255, 255, 255);
- SETCOL(btheme->tnla.header, 185, 185, 185, 255);
SETCOL(btheme->tnla.grid, 94, 94, 94, 255);
SETCOL(btheme->tnla.shade1, 172, 172, 172, 255); // sliders
SETCOL(btheme->tnla.shade2, 84, 44, 31, 100); // bar
@@ -533,7 +561,6 @@ void ui_theme_init_userdef(void)
SETCOL(btheme->timasel.active, 195, 195, 195, 255); /* active tile */
SETCOL(btheme->timasel.grid, 94, 94, 94, 255); /* active file text */
SETCOL(btheme->timasel.back, 110, 110, 110, 255);
- SETCOL(btheme->timasel.header, 185, 185, 185, 255);
SETCOL(btheme->timasel.shade1, 94, 94, 94, 255); /* bar */
SETCOL(btheme->timasel.shade2, 172, 172, 172, 255); /* sliders */
SETCOL(btheme->timasel.hilite, 17, 27, 60, 100); /* selected tile */
@@ -557,17 +584,17 @@ void ui_theme_init_userdef(void)
/* space oops */
btheme->toops= btheme->tv3d;
- SETCOL(btheme->toops.back, 153, 153, 153, 255);
-
+ SETCOLF(btheme->toops.back, 0.45, 0.45, 0.45, 1.0);
+
/* space info */
btheme->tinfo= btheme->tv3d;
SETCOL(btheme->tinfo.back, 153, 153, 153, 255);
/* space sound */
btheme->tsnd= btheme->tv3d;
- SETCOL(btheme->tsnd.back, 153, 153, 153, 255);
+ SETCOLF(btheme->tsnd.back, 0.45, 0.45, 0.45, 1.0);
+ SETCOLF(btheme->tsnd.grid, 0.36, 0.36, 0.36, 1.0);
SETCOL(btheme->tsnd.shade1, 173, 173, 173, 255); // sliders
- SETCOL(btheme->tsnd.grid, 140, 140, 140, 255);
/* space time */
btheme->ttime= btheme->tsnd; // same as sound space
@@ -583,188 +610,19 @@ void ui_theme_init_userdef(void)
}
-char *UI_ThemeColorsPup(int spacetype)
-{
- char *cp= MEM_callocN(32*32, "theme pup");
- char *str = cp;
-
- if(spacetype==0) {
- str += sprintf(str, "Outline %%x%d|", TH_BUT_OUTLINE);
- str += sprintf(str, "Neutral %%x%d|", TH_BUT_NEUTRAL);
- str += sprintf(str, "Action %%x%d|", TH_BUT_ACTION);
- str += sprintf(str, "Setting %%x%d|", TH_BUT_SETTING);
- str += sprintf(str, "Special Setting 1%%x%d|", TH_BUT_SETTING1);
- str += sprintf(str, "Special Setting 2 %%x%d|", TH_BUT_SETTING2);
- str += sprintf(str, "Number Input %%x%d|", TH_BUT_NUM);
- str += sprintf(str, "Text Input %%x%d|", TH_BUT_TEXTFIELD);
- str += sprintf(str, "Text Input Highlight %%x%d|", TH_BUT_TEXTFIELD_HI);
- str += sprintf(str, "Popup %%x%d|", TH_BUT_POPUP);
- str += sprintf(str, "Text %%x%d|", TH_BUT_TEXT);
- str += sprintf(str, "Text Highlight %%x%d|", TH_BUT_TEXT_HI);
- str += sprintf(str, "%%l|");
- str += sprintf(str, "Menu Background %%x%d|", TH_MENU_BACK);
- str += sprintf(str, "Menu Item %%x%d|", TH_MENU_ITEM);
- str += sprintf(str, "Menu Item Highlight %%x%d|", TH_MENU_HILITE);
- str += sprintf(str, "Menu Text %%x%d|", TH_MENU_TEXT);
- str += sprintf(str, "Menu Text Highlight %%x%d|", TH_MENU_TEXT_HI);
- str += sprintf(str, "%%l|");
- str += sprintf(str, "Drawtype %%x%d|", TH_BUT_DRAWTYPE);
- str += sprintf(str, "%%l|");
- str += sprintf(str, "Icon File %%x%d|", TH_ICONFILE);
- }
- else {
- // first defaults for each space
- str += sprintf(str, "Background %%x%d|", TH_BACK);
- str += sprintf(str, "Text %%x%d|", TH_TEXT);
- str += sprintf(str, "Text Highlight %%x%d|", TH_TEXT_HI);
- str += sprintf(str, "Header %%x%d|", TH_HEADER);
-
- switch(spacetype) {
- case SPACE_VIEW3D:
- str += sprintf(str, "Panel %%x%d|", TH_PANEL);
- str += sprintf(str, "%%l|");
- str += sprintf(str, "Grid %%x%d|", TH_GRID);
- str += sprintf(str, "Wire %%x%d|", TH_WIRE);
- str += sprintf(str, "Lamp %%x%d|", TH_LAMP);
- str += sprintf(str, "Object Selected %%x%d|", TH_SELECT);
- str += sprintf(str, "Object Active %%x%d|", TH_ACTIVE);
- str += sprintf(str, "Object Grouped %%x%d|", TH_GROUP);
- str += sprintf(str, "Object Grouped Active %%x%d|", TH_GROUP_ACTIVE);
- str += sprintf(str, "Transform %%x%d|", TH_TRANSFORM);
- str += sprintf(str, "%%l|");
- str += sprintf(str, "Vertex %%x%d|", TH_VERTEX);
- str += sprintf(str, "Vertex Selected %%x%d|", TH_VERTEX_SELECT);
- str += sprintf(str, "Vertex Size %%x%d|", TH_VERTEX_SIZE);
- str += sprintf(str, "Edge Selected %%x%d|", TH_EDGE_SELECT);
- str += sprintf(str, "Edge Seam %%x%d|", TH_EDGE_SEAM);
- str += sprintf(str, "Edge Sharp %%x%d|", TH_EDGE_SHARP);
- str += sprintf(str, "Edge UV Face Select %%x%d|", TH_EDGE_FACESEL);
- str += sprintf(str, "Face (transp) %%x%d|", TH_FACE);
- str += sprintf(str, "Face Selected (transp) %%x%d|", TH_FACE_SELECT);
- str += sprintf(str, "Face Dot Selected %%x%d|", TH_FACE_DOT);
- str += sprintf(str, "Face Dot Size %%x%d|", TH_FACEDOT_SIZE);
- str += sprintf(str, "Active Vert/Edge/Face %%x%d|", TH_EDITMESH_ACTIVE);
- str += sprintf(str, "Normal %%x%d|", TH_NORMAL);
- str += sprintf(str, "Bone Solid %%x%d|", TH_BONE_SOLID);
- str += sprintf(str, "Bone Pose %%x%d", TH_BONE_POSE);
- str += sprintf(str, "Current Frame %%x%d", TH_CFRAME);
- break;
- case SPACE_IPO:
- str += sprintf(str, "Panel %%x%d|", TH_PANEL);
- str += sprintf(str, "%%l|");
- str += sprintf(str, "Grid %%x%d|", TH_GRID);
- str += sprintf(str, "Window Sliders %%x%d|", TH_SHADE1);
- str += sprintf(str, "Ipo Channels %%x%d|", TH_SHADE2);
- str += sprintf(str, "Vertex %%x%d|", TH_VERTEX);
- str += sprintf(str, "Vertex Selected %%x%d|", TH_VERTEX_SELECT);
- str += sprintf(str, "Vertex Size %%x%d|", TH_VERTEX_SIZE);
- str += sprintf(str, "Current Frame %%x%d", TH_CFRAME);
- break;
- case SPACE_FILE:
- str += sprintf(str, "Selected file %%x%d", TH_HILITE);
- break;
- case SPACE_NLA:
- //str += sprintf(str, "Panel %%x%d|", TH_PANEL);
- str += sprintf(str, "%%l|");
- str += sprintf(str, "Grid %%x%d|", TH_GRID);
- str += sprintf(str, "View Sliders %%x%d|", TH_SHADE1);
- str += sprintf(str, "Bars %%x%d|", TH_SHADE2);
- str += sprintf(str, "Bars selected %%x%d|", TH_HILITE);
- str += sprintf(str, "Strips %%x%d|", TH_STRIP);
- str += sprintf(str, "Strips selected %%x%d|", TH_STRIP_SELECT);
- str += sprintf(str, "Current Frame %%x%d", TH_CFRAME);
- break;
- case SPACE_ACTION:
- //str += sprintf(str, "Panel %%x%d|", TH_PANEL);
- str += sprintf(str, "%%l|");
- str += sprintf(str, "Grid %%x%d|", TH_GRID);
- str += sprintf(str, "RVK Sliders %%x%d|", TH_FACE);
- str += sprintf(str, "View Sliders %%x%d|", TH_SHADE1);
- str += sprintf(str, "Channels %%x%d|", TH_SHADE2);
- str += sprintf(str, "Channels Selected %%x%d|", TH_HILITE);
- str += sprintf(str, "Long Key %%x%d|", TH_STRIP);
- str += sprintf(str, "Long Key selected %%x%d|", TH_STRIP_SELECT);
- str += sprintf(str, "Current Frame %%x%d", TH_CFRAME);
- break;
- case SPACE_IMAGE:
- str += sprintf(str, "%%l|");
- str += sprintf(str, "Vertex %%x%d|", TH_VERTEX);
- str += sprintf(str, "Vertex Selected %%x%d|", TH_VERTEX_SELECT);
- str += sprintf(str, "Vertex Size %%x%d|", TH_VERTEX_SIZE);
- str += sprintf(str, "Face %%x%d|", TH_FACE);
- str += sprintf(str, "Face Selected %%x%d", TH_FACE_SELECT);
- break;
- case SPACE_SEQ:
- str += sprintf(str, "Grid %%x%d|", TH_GRID);
- str += sprintf(str, "Window Sliders %%x%d|", TH_SHADE1);
- str += sprintf(str, "%%l|");
- str += sprintf(str, "Movie Strip %%x%d|", TH_SEQ_MOVIE);
- str += sprintf(str, "Image Strip %%x%d|", TH_SEQ_IMAGE);
- str += sprintf(str, "Scene Strip %%x%d|", TH_SEQ_SCENE);
- str += sprintf(str, "Audio Strip %%x%d|", TH_SEQ_AUDIO);
- str += sprintf(str, "Effect Strip %%x%d|", TH_SEQ_EFFECT);
- str += sprintf(str, "Plugin Strip %%x%d|", TH_SEQ_PLUGIN);
- str += sprintf(str, "Transition Strip %%x%d|", TH_SEQ_TRANSITION);
- str += sprintf(str, "Meta Strip %%x%d|", TH_SEQ_META);
- str += sprintf(str, "Current Frame %%x%d", TH_CFRAME);
- break;
- case SPACE_SOUND:
- str += sprintf(str, "Grid %%x%d|", TH_GRID);
- str += sprintf(str, "Window Slider %%x%d|", TH_SHADE1);
- str += sprintf(str, "Current Frame %%x%d", TH_CFRAME);
- break;
- case SPACE_BUTS:
- str += sprintf(str, "Panel %%x%d|", TH_PANEL);
- break;
- case SPACE_IMASEL:
- str += sprintf(str, "Tiles %%x%d|", TH_PANEL);
- str += sprintf(str, "Scrollbar %%x%d|", TH_SHADE1);
- str += sprintf(str, "Scroll Handle %%x%d|", TH_SHADE2);
- str += sprintf(str, "Selected File %%x%d|", TH_HILITE);
- str += sprintf(str, "Active File %%x%d|", TH_ACTIVE);
- str += sprintf(str, "Active File Text%%x%d|", TH_GRID);
- break;
- case SPACE_TEXT:
- str += sprintf(str, "Scroll Bar %%x%d|", TH_SHADE1);
- str += sprintf(str, "Selected Text %%x%d|", TH_SHADE2);
- str += sprintf(str, "Cursor %%x%d|", TH_HILITE);
- str += sprintf(str, "%%l|");
- str += sprintf(str, "Syntax Builtin %%x%d|", TH_SYNTAX_B);
- str += sprintf(str, "Syntax Special %%x%d|", TH_SYNTAX_V);
- str += sprintf(str, "Syntax Comment %%x%d|", TH_SYNTAX_C);
- str += sprintf(str, "Syntax Strings %%x%d|", TH_SYNTAX_L);
- str += sprintf(str, "Syntax Numbers %%x%d|", TH_SYNTAX_N);
- break;
- case SPACE_TIME:
- str += sprintf(str, "Grid %%x%d|", TH_GRID);
- str += sprintf(str, "Current Frame %%x%d", TH_CFRAME);
- break;
- case SPACE_NODE:
- str += sprintf(str, "Wires %%x%d|", TH_WIRE);
- str += sprintf(str, "Wires Select %%x%d|", TH_EDGE_SELECT);
- str += sprintf(str, "%%l|");
- str += sprintf(str, "Node Backdrop %%x%d|", TH_NODE);
- str += sprintf(str, "In/Out Node %%x%d|", TH_NODE_IN_OUT);
- str += sprintf(str, "Convertor Node %%x%d|", TH_NODE_CONVERTOR);
- str += sprintf(str, "Operator Node %%x%d|", TH_NODE_OPERATOR);
- str += sprintf(str, "Group Node %%x%d|", TH_NODE_GROUP);
- break;
- }
- }
- return cp;
-}
-void UI_SetTheme(ScrArea *sa)
+void UI_SetTheme(int spacetype, int regionid)
{
- if(sa==NULL) { // called for safety, when delete themes
+ if(spacetype==0) { // called for safety, when delete themes
theme_active= U.themes.first;
theme_spacetype= SPACE_VIEW3D;
+ theme_regionid= RGN_TYPE_WINDOW;
}
else {
// later on, a local theme can be found too
theme_active= U.themes.first;
- theme_spacetype= sa->spacetype;
-
+ theme_spacetype= spacetype;
+ theme_regionid= regionid;
}
}
@@ -985,3 +843,417 @@ void UI_GetColorPtrBlendShade3ubv(char *cp1, char *cp2, char *col, float fac, in
col[2] = b;
}
+void UI_make_axis_color(char *src_col, char *dst_col, char axis)
+{
+ switch(axis)
+ {
+ case 'x':
+ case 'X':
+ dst_col[0]= src_col[0]>219?255:src_col[0]+36;
+ dst_col[1]= src_col[1]<26?0:src_col[1]-26;
+ dst_col[2]= src_col[2]<26?0:src_col[2]-26;
+ break;
+ case 'y':
+ case 'Y':
+ dst_col[0]= src_col[0]<46?0:src_col[0]-36;
+ dst_col[1]= src_col[1]>189?255:src_col[1]+66;
+ dst_col[2]= src_col[2]<46?0:src_col[2]-36;
+ break;
+ default:
+ dst_col[0]= src_col[0]<26?0:src_col[0]-26;
+ dst_col[1]= src_col[1]<26?0:src_col[1]-26;
+ dst_col[2]= src_col[2]>209?255:src_col[2]+46;
+ }
+}
+
+/* ************************************************************* */
+
+/* patching UserDef struct and Themes */
+void init_userdef_do_versions(void)
+{
+// countall();
+
+ /* the UserDef struct is not corrected with do_versions() .... ugh! */
+ if(U.wheellinescroll == 0) U.wheellinescroll = 3;
+ if(U.menuthreshold1==0) {
+ U.menuthreshold1= 5;
+ U.menuthreshold2= 2;
+ }
+ if(U.tb_leftmouse==0) {
+ U.tb_leftmouse= 5;
+ U.tb_rightmouse= 5;
+ }
+ if(U.mixbufsize==0) U.mixbufsize= 2048;
+ if (BLI_streq(U.tempdir, "/")) {
+ char *tmp= getenv("TEMP");
+
+ strcpy(U.tempdir, tmp?tmp:"/tmp/");
+ }
+ if (U.savetime <= 0) {
+ U.savetime = 1;
+// XXX error(".B.blend is buggy, please consider removing it.\n");
+ }
+ /* transform widget settings */
+ if(U.tw_hotspot==0) {
+ U.tw_hotspot= 14;
+ U.tw_size= 20; // percentage of window size
+ U.tw_handlesize= 16; // percentage of widget radius
+ }
+ if(U.pad_rot_angle==0)
+ U.pad_rot_angle= 15;
+
+ if(U.flag & USER_CUSTOM_RANGE)
+ vDM_ColorBand_store(&U.coba_weight); /* signal for derivedmesh to use colorband */
+
+ if (G.main->versionfile <= 191) {
+ strcpy(U.plugtexdir, U.textudir);
+ strcpy(U.sounddir, "/");
+ }
+
+ /* patch to set Dupli Armature */
+ if (G.main->versionfile < 220) {
+ U.dupflag |= USER_DUP_ARM;
+ }
+
+ /* added seam, normal color, undo */
+ if (G.main->versionfile <= 234) {
+ bTheme *btheme;
+
+ U.uiflag |= USER_GLOBALUNDO;
+ if (U.undosteps==0) U.undosteps=32;
+
+ for(btheme= U.themes.first; btheme; btheme= btheme->next) {
+ /* check for alpha==0 is safe, then color was never set */
+ if(btheme->tv3d.edge_seam[3]==0) {
+ SETCOL(btheme->tv3d.edge_seam, 230, 150, 50, 255);
+ }
+ if(btheme->tv3d.normal[3]==0) {
+ SETCOL(btheme->tv3d.normal, 0x22, 0xDD, 0xDD, 255);
+ }
+ if(btheme->tv3d.face_dot[3]==0) {
+ SETCOL(btheme->tv3d.face_dot, 255, 138, 48, 255);
+ btheme->tv3d.facedot_size= 4;
+ }
+ }
+ }
+ if (G.main->versionfile <= 235) {
+ /* illegal combo... */
+ if (U.flag & USER_LMOUSESELECT)
+ U.flag &= ~USER_TWOBUTTONMOUSE;
+ }
+ if (G.main->versionfile <= 236) {
+ bTheme *btheme;
+ /* new space type */
+ for(btheme= U.themes.first; btheme; btheme= btheme->next) {
+ /* check for alpha==0 is safe, then color was never set */
+ if(btheme->ttime.back[3]==0) {
+ btheme->ttime = btheme->tsnd; // copy from sound
+ }
+ if(btheme->text.syntaxn[3]==0) {
+ SETCOL(btheme->text.syntaxn, 0, 0, 200, 255); /* Numbers Blue*/
+ SETCOL(btheme->text.syntaxl, 100, 0, 0, 255); /* Strings red */
+ SETCOL(btheme->text.syntaxc, 0, 100, 50, 255); /* Comments greenish */
+ SETCOL(btheme->text.syntaxv, 95, 95, 0, 255); /* Special */
+ SETCOL(btheme->text.syntaxb, 128, 0, 80, 255); /* Builtin, red-purple */
+ }
+ }
+ }
+ if (G.main->versionfile <= 237) {
+ bTheme *btheme;
+ /* bone colors */
+ for(btheme= U.themes.first; btheme; btheme= btheme->next) {
+ /* check for alpha==0 is safe, then color was never set */
+ if(btheme->tv3d.bone_solid[3]==0) {
+ SETCOL(btheme->tv3d.bone_solid, 200, 200, 200, 255);
+ SETCOL(btheme->tv3d.bone_pose, 80, 200, 255, 80);
+ }
+ }
+ }
+ if (G.main->versionfile <= 238) {
+ bTheme *btheme;
+ /* bone colors */
+ for(btheme= U.themes.first; btheme; btheme= btheme->next) {
+ /* check for alpha==0 is safe, then color was never set */
+ if(btheme->tnla.strip[3]==0) {
+ SETCOL(btheme->tnla.strip_select, 0xff, 0xff, 0xaa, 255);
+ SETCOL(btheme->tnla.strip, 0xe4, 0x9c, 0xc6, 255);
+ }
+ }
+ }
+ if (G.main->versionfile <= 239) {
+ bTheme *btheme;
+
+ for(btheme= U.themes.first; btheme; btheme= btheme->next) {
+ /* Lamp theme, check for alpha==0 is safe, then color was never set */
+ if(btheme->tv3d.lamp[3]==0) {
+ SETCOL(btheme->tv3d.lamp, 0, 0, 0, 40);
+/* TEMPORAL, remove me! (ton) */
+ U.uiflag |= USER_PLAINMENUS;
+ }
+
+ }
+ if(U.obcenter_dia==0) U.obcenter_dia= 6;
+ }
+ if (G.main->versionfile <= 241) {
+ bTheme *btheme;
+ for(btheme= U.themes.first; btheme; btheme= btheme->next) {
+ /* Node editor theme, check for alpha==0 is safe, then color was never set */
+ if(btheme->tnode.syntaxn[3]==0) {
+ /* re-uses syntax color storage */
+ btheme->tnode= btheme->tv3d;
+ SETCOL(btheme->tnode.edge_select, 255, 255, 255, 255);
+ SETCOL(btheme->tnode.syntaxl, 150, 150, 150, 255); /* TH_NODE, backdrop */
+ SETCOL(btheme->tnode.syntaxn, 129, 131, 144, 255); /* in/output */
+ SETCOL(btheme->tnode.syntaxb, 127,127,127, 255); /* operator */
+ SETCOL(btheme->tnode.syntaxv, 142, 138, 145, 255); /* generator */
+ SETCOL(btheme->tnode.syntaxc, 120, 145, 120, 255); /* group */
+ }
+ /* Group theme colors */
+ if(btheme->tv3d.group[3]==0) {
+ SETCOL(btheme->tv3d.group, 0x10, 0x40, 0x10, 255);
+ SETCOL(btheme->tv3d.group_active, 0x66, 0xFF, 0x66, 255);
+ }
+ /* Sequence editor theme*/
+ if(btheme->tseq.movie[3]==0) {
+ SETCOL(btheme->tseq.movie, 81, 105, 135, 255);
+ SETCOL(btheme->tseq.image, 109, 88, 129, 255);
+ SETCOL(btheme->tseq.scene, 78, 152, 62, 255);
+ SETCOL(btheme->tseq.audio, 46, 143, 143, 255);
+ SETCOL(btheme->tseq.effect, 169, 84, 124, 255);
+ SETCOL(btheme->tseq.plugin, 126, 126, 80, 255);
+ SETCOL(btheme->tseq.transition, 162, 95, 111, 255);
+ SETCOL(btheme->tseq.meta, 109, 145, 131, 255);
+ }
+ }
+
+ /* set defaults for 3D View rotating axis indicator */
+ /* since size can't be set to 0, this indicates it's not saved in .B.blend */
+ if (U.rvisize == 0) {
+ U.rvisize = 15;
+ U.rvibright = 8;
+ U.uiflag |= USER_SHOW_ROTVIEWICON;
+ }
+
+ }
+ if (G.main->versionfile <= 242) {
+ bTheme *btheme;
+
+ for(btheme= U.themes.first; btheme; btheme= btheme->next) {
+ /* long keyframe color */
+ /* check for alpha==0 is safe, then color was never set */
+ if(btheme->tact.strip[3]==0) {
+ SETCOL(btheme->tv3d.edge_sharp, 255, 32, 32, 255);
+ SETCOL(btheme->tact.strip_select, 0xff, 0xff, 0xaa, 204);
+ SETCOL(btheme->tact.strip, 0xe4, 0x9c, 0xc6, 204);
+ }
+
+ /* IPO-Editor - Vertex Size*/
+ if(btheme->tipo.vertex_size == 0) {
+ btheme->tipo.vertex_size= 3;
+ }
+ }
+ }
+ if (G.main->versionfile <= 243) {
+ /* set default number of recently-used files (if not set) */
+ if (U.recent_files == 0) U.recent_files = 10;
+ }
+ if (G.main->versionfile < 245 || (G.main->versionfile == 245 && G.main->subversionfile < 3)) {
+ bTheme *btheme;
+ for(btheme= U.themes.first; btheme; btheme= btheme->next) {
+ SETCOL(btheme->tv3d.editmesh_active, 255, 255, 255, 128);
+ }
+ if(U.coba_weight.tot==0)
+ init_colorband(&U.coba_weight, 1);
+ }
+ if ((G.main->versionfile < 245) || (G.main->versionfile == 245 && G.main->subversionfile < 11)) {
+ bTheme *btheme;
+ for (btheme= U.themes.first; btheme; btheme= btheme->next) {
+ /* these should all use the same colour */
+ SETCOL(btheme->tv3d.cframe, 0x60, 0xc0, 0x40, 255);
+ SETCOL(btheme->tipo.cframe, 0x60, 0xc0, 0x40, 255);
+ SETCOL(btheme->tact.cframe, 0x60, 0xc0, 0x40, 255);
+ SETCOL(btheme->tnla.cframe, 0x60, 0xc0, 0x40, 255);
+ SETCOL(btheme->tseq.cframe, 0x60, 0xc0, 0x40, 255);
+ SETCOL(btheme->tsnd.cframe, 0x60, 0xc0, 0x40, 255);
+ SETCOL(btheme->ttime.cframe, 0x60, 0xc0, 0x40, 255);
+ }
+ }
+ if ((G.main->versionfile < 245) || (G.main->versionfile == 245 && G.main->subversionfile < 11)) {
+ bTheme *btheme;
+ for (btheme= U.themes.first; btheme; btheme= btheme->next) {
+ /* these should all use the same color */
+ SETCOL(btheme->tv3d.cframe, 0x60, 0xc0, 0x40, 255);
+ SETCOL(btheme->tipo.cframe, 0x60, 0xc0, 0x40, 255);
+ SETCOL(btheme->tact.cframe, 0x60, 0xc0, 0x40, 255);
+ SETCOL(btheme->tnla.cframe, 0x60, 0xc0, 0x40, 255);
+ SETCOL(btheme->tseq.cframe, 0x60, 0xc0, 0x40, 255);
+ SETCOL(btheme->tsnd.cframe, 0x60, 0xc0, 0x40, 255);
+ SETCOL(btheme->ttime.cframe, 0x60, 0xc0, 0x40, 255);
+ }
+ }
+ if ((G.main->versionfile < 245) || (G.main->versionfile == 245 && G.main->subversionfile < 13)) {
+ bTheme *btheme;
+ for (btheme= U.themes.first; btheme; btheme= btheme->next) {
+ /* action channel groups (recolor anyway) */
+ SETCOL(btheme->tact.group, 0x39, 0x7d, 0x1b, 255);
+ SETCOL(btheme->tact.group_active, 0x7d, 0xe9, 0x60, 255);
+
+ /* bone custom-color sets */
+ // FIXME: this check for initialised colors is bad
+ if (btheme->tarm[0].solid[3] == 0) {
+ /* set 1 */
+ SETCOL(btheme->tarm[0].solid, 0x9a, 0x00, 0x00, 255);
+ SETCOL(btheme->tarm[0].select, 0xbd, 0x11, 0x11, 255);
+ SETCOL(btheme->tarm[0].active, 0xf7, 0x0a, 0x0a, 255);
+ /* set 2 */
+ SETCOL(btheme->tarm[1].solid, 0xf7, 0x40, 0x18, 255);
+ SETCOL(btheme->tarm[1].select, 0xf6, 0x69, 0x13, 255);
+ SETCOL(btheme->tarm[1].active, 0xfa, 0x99, 0x00, 255);
+ /* set 3 */
+ SETCOL(btheme->tarm[2].solid, 0x1e, 0x91, 0x09, 255);
+ SETCOL(btheme->tarm[2].select, 0x59, 0xb7, 0x0b, 255);
+ SETCOL(btheme->tarm[2].active, 0x83, 0xef, 0x1d, 255);
+ /* set 4 */
+ SETCOL(btheme->tarm[3].solid, 0x0a, 0x36, 0x94, 255);
+ SETCOL(btheme->tarm[3].select, 0x36, 0x67, 0xdf, 255);
+ SETCOL(btheme->tarm[3].active, 0x5e, 0xc1, 0xef, 255);
+ /* set 5 */
+ SETCOL(btheme->tarm[4].solid, 0xa9, 0x29, 0x4e, 255);
+ SETCOL(btheme->tarm[4].select, 0xc1, 0x41, 0x6a, 255);
+ SETCOL(btheme->tarm[4].active, 0xf0, 0x5d, 0x91, 255);
+ /* set 6 */
+ SETCOL(btheme->tarm[5].solid, 0x43, 0x0c, 0x78, 255);
+ SETCOL(btheme->tarm[5].select, 0x54, 0x3a, 0xa3, 255);
+ SETCOL(btheme->tarm[5].active, 0x87, 0x64, 0xd5, 255);
+ /* set 7 */
+ SETCOL(btheme->tarm[6].solid, 0x24, 0x78, 0x5a, 255);
+ SETCOL(btheme->tarm[6].select, 0x3c, 0x95, 0x79, 255);
+ SETCOL(btheme->tarm[6].active, 0x6f, 0xb6, 0xab, 255);
+ /* set 8 */
+ SETCOL(btheme->tarm[7].solid, 0x4b, 0x70, 0x7c, 255);
+ SETCOL(btheme->tarm[7].select, 0x6a, 0x86, 0x91, 255);
+ SETCOL(btheme->tarm[7].active, 0x9b, 0xc2, 0xcd, 255);
+ /* set 9 */
+ SETCOL(btheme->tarm[8].solid, 0xf4, 0xc9, 0x0c, 255);
+ SETCOL(btheme->tarm[8].select, 0xee, 0xc2, 0x36, 255);
+ SETCOL(btheme->tarm[8].active, 0xf3, 0xff, 0x00, 255);
+ /* set 10 */
+ SETCOL(btheme->tarm[9].solid, 0x1e, 0x20, 0x24, 255);
+ SETCOL(btheme->tarm[9].select, 0x48, 0x4c, 0x56, 255);
+ SETCOL(btheme->tarm[9].active, 0xff, 0xff, 0xff, 255);
+ /* set 11 */
+ SETCOL(btheme->tarm[10].solid, 0x6f, 0x2f, 0x6a, 255);
+ SETCOL(btheme->tarm[10].select, 0x98, 0x45, 0xbe, 255);
+ SETCOL(btheme->tarm[10].active, 0xd3, 0x30, 0xd6, 255);
+ /* set 12 */
+ SETCOL(btheme->tarm[11].solid, 0x6c, 0x8e, 0x22, 255);
+ SETCOL(btheme->tarm[11].select, 0x7f, 0xb0, 0x22, 255);
+ SETCOL(btheme->tarm[11].active, 0xbb, 0xef, 0x5b, 255);
+ /* set 13 */
+ SETCOL(btheme->tarm[12].solid, 0x8d, 0x8d, 0x8d, 255);
+ SETCOL(btheme->tarm[12].select, 0xb0, 0xb0, 0xb0, 255);
+ SETCOL(btheme->tarm[12].active, 0xde, 0xde, 0xde, 255);
+ /* set 14 */
+ SETCOL(btheme->tarm[13].solid, 0x83, 0x43, 0x26, 255);
+ SETCOL(btheme->tarm[13].select, 0x8b, 0x58, 0x11, 255);
+ SETCOL(btheme->tarm[13].active, 0xbd, 0x6a, 0x11, 255);
+ /* set 15 */
+ SETCOL(btheme->tarm[14].solid, 0x08, 0x31, 0x0e, 255);
+ SETCOL(btheme->tarm[14].select, 0x1c, 0x43, 0x0b, 255);
+ SETCOL(btheme->tarm[14].active, 0x34, 0x62, 0x2b, 255);
+ }
+ }
+ }
+ if ((G.main->versionfile < 245) || (G.main->versionfile == 245 && G.main->subversionfile < 16)) {
+ U.flag |= USER_ADD_VIEWALIGNED|USER_ADD_EDITMODE;
+ }
+ if ((G.main->versionfile < 247) || (G.main->versionfile == 247 && G.main->subversionfile <= 2)) {
+ bTheme *btheme;
+
+ /* adjust themes */
+ for (btheme= U.themes.first; btheme; btheme= btheme->next) {
+ char *col;
+
+ /* IPO Editor: Handles/Vertices */
+ col = btheme->tipo.vertex;
+ SETCOL(btheme->tipo.handle_vertex, col[0], col[1], col[2], 255);
+ col = btheme->tipo.vertex_select;
+ SETCOL(btheme->tipo.handle_vertex_select, col[0], col[1], col[2], 255);
+ btheme->tipo.handle_vertex_size= btheme->tipo.vertex_size;
+
+ /* Sequence/Image Editor: colors for GPencil text */
+ col = btheme->tv3d.bone_pose;
+ SETCOL(btheme->tseq.bone_pose, col[0], col[1], col[2], 255);
+ SETCOL(btheme->tima.bone_pose, col[0], col[1], col[2], 255);
+ col = btheme->tv3d.vertex_select;
+ SETCOL(btheme->tseq.vertex_select, col[0], col[1], col[2], 255);
+ }
+ }
+ if (G.main->versionfile < 250) {
+ bTheme *btheme;
+
+ for(btheme= U.themes.first; btheme; btheme= btheme->next) {
+ /* this was not properly initialized in 2.45 */
+ if(btheme->tima.face_dot[3]==0) {
+ SETCOL(btheme->tima.editmesh_active, 255, 255, 255, 128);
+ SETCOL(btheme->tima.face_dot, 255, 133, 0, 255);
+ btheme->tima.facedot_size= 2;
+ }
+
+ /* DopeSheet - (Object) Channel color */
+ SETCOL(btheme->tact.ds_channel, 82, 96, 110, 255);
+ SETCOL(btheme->tact.ds_subchannel, 124, 137, 150, 255);
+ /* DopeSheet - Group Channel color (saner version) */
+ SETCOL(btheme->tact.group, 79, 101, 73, 255);
+ SETCOL(btheme->tact.group_active, 135, 177, 125, 255);
+
+ /* Graph Editor - (Object) Channel color */
+ SETCOL(btheme->tipo.ds_channel, 82, 96, 110, 255);
+ SETCOL(btheme->tipo.ds_subchannel, 124, 137, 150, 255);
+ /* Graph Editor - Group Channel color */
+ SETCOL(btheme->tipo.group, 79, 101, 73, 255);
+ SETCOL(btheme->tipo.group_active, 135, 177, 125, 255);
+ }
+
+ /* adjust grease-pencil distances */
+ U.gp_manhattendist= 1;
+ U.gp_euclideandist= 2;
+
+ /* adjust default interpolation for new IPO-curves */
+ U.ipo_new= BEZT_IPO_BEZ;
+ }
+
+ if (G.main->versionfile < 250 || (G.main->versionfile == 250 && G.main->subversionfile < 1)) {
+ bTheme *btheme;
+
+ for(btheme= U.themes.first; btheme; btheme= btheme->next) {
+
+ /* common (new) variables, it checks for alpha==0 */
+ ui_theme_init_new(btheme);
+
+ if(btheme->tui.wcol_num.outline[3]==0)
+ ui_widget_color_init(&btheme->tui);
+ }
+ }
+
+ /* GL Texture Garbage Collection (variable abused above!) */
+ if (U.textimeout == 0) {
+ U.texcollectrate = 60;
+ U.textimeout = 120;
+ }
+ if (U.memcachelimit <= 0) {
+ U.memcachelimit = 32;
+ }
+ if (U.frameserverport == 0) {
+ U.frameserverport = 8080;
+ }
+
+ /* funny name, but it is GE stuff, moves userdef stuff to engine */
+// XXX space_set_commmandline_options();
+ /* this timer uses U */
+// XXX reset_autosave();
+
+}
+
+
+
diff --git a/source/blender/editors/interface/text.c b/source/blender/editors/interface/text.c
deleted file mode 100644
index c3dc40e59ef..00000000000
--- a/source/blender/editors/interface/text.c
+++ /dev/null
@@ -1,276 +0,0 @@
-/**
- * $Id$
- *
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * The Original Code is written by Rob Haarsma (phase)
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/* XXX 2.50 this file must be cleanup still, using globals etc. */
-
-#include <string.h>
-#include <stdlib.h>
-
-#include "MEM_guardedalloc.h"
-
-#include "DNA_listBase.h"
-#include "DNA_userdef_types.h"
-#include "DNA_vec_types.h"
-
-#include "BKE_global.h" /* G */
-#include "BKE_utildefines.h"
-
-#include "BLI_blenlib.h"
-#include "BLI_linklist.h" /* linknode */
-
-#include "BIF_gl.h"
-#include "UI_text.h"
-#include "BLF_api.h"
-
-#include "ED_datafiles.h"
-
-#include "BMF_Api.h"
-
-#ifdef WITH_ICONV
-#include "iconv.h"
-
-void string_to_utf8(char *original, char *utf_8, char *code)
-{
- size_t inbytesleft=strlen(original);
- size_t outbytesleft=512;
- size_t rv=0;
- iconv_t cd;
-
- cd=iconv_open("UTF-8", code);
-
- if (cd == (iconv_t)(-1)) {
- printf("iconv_open Error");
- *utf_8='\0';
- return ;
- }
- rv=iconv(cd, &original, &inbytesleft, &utf_8, &outbytesleft);
- if (rv == (size_t) -1) {
- printf("iconv Error\n");
- return ;
- }
- *utf_8 = '\0';
- iconv_close(cd);
-}
-#endif // WITH_ICONV
-
-#ifdef INTERNATIONAL
-#include "FTF_Api.h"
-#endif
-
-void UI_RasterPos(float x, float y)
-{
-#ifdef INTERNATIONAL
- FTF_SetPosition(x, y);
-#endif // INTERNATIONAL
-}
-
-void UI_SetScale(float aspect)
-{
-#ifdef INTERNATIONAL
- FTF_SetScale(aspect);
-#endif // INTERNATIONAL
-}
-
-void ui_text_init_userdef(void)
-{
- int id;
-
- id= BLF_load_mem("default", (unsigned char*)datatoc_bfont_ttf, datatoc_bfont_ttf_size);
- if (id == -1)
- printf("Warning can't load built-in font ??\n");
- else {
- BLF_set(id);
- BLF_size(12, 72);
- BLF_size(11, 96);
- BLF_size(14, 96);
- }
-
-#ifdef INTERNATIONAL
- if(U.transopts & USER_DOTRANSLATE)
- start_interface_font();
- else
- G.ui_international= FALSE;
-#else // INTERNATIONAL
- G.ui_international= FALSE;
-#endif
-}
-
-int UI_DrawString(BMF_Font* font, char *str, int translate)
-{
-#ifdef INTERNATIONAL
- if(G.ui_international == TRUE) {
- if(translate)
- {
-#ifdef WITH_ICONV
- if(translate & CONVERT_TO_UTF8) {
- char utf_8[512];
- char *code;
-
- code= BLF_lang_find_code(U.language);
- if (lme) {
- if (!strcmp(code, "ja_JP"))
- string_to_utf8(str, utf_8, "Shift_JIS"); /* Japanese */
- else if (!strcmp(code, "zh_CN"))
- string_to_utf8(str, utf_8, "GB2312"); /* Chinese */
- }
- return FTF_DrawString(utf_8, FTF_INPUT_UTF8);
- }
- else
-#endif // WITH_ICONV
- return FTF_DrawString(str, FTF_USE_GETTEXT | FTF_INPUT_UTF8);
- }
- else
- return FTF_DrawString(str, FTF_NO_TRANSCONV | FTF_INPUT_UTF8);
- } else {
- return BMF_DrawString(font, str);
- }
-#else // INTERNATIONAL
- return BMF_DrawString(font, str);
-#endif
-}
-
-float UI_GetStringWidth(BMF_Font* font, char *str, int translate)
-{
- float rt;
-
-#ifdef INTERNATIONAL
- if(G.ui_international == TRUE)
- if(translate && (U.transopts & USER_TR_BUTTONS))
- rt= FTF_GetStringWidth(str, FTF_USE_GETTEXT | FTF_INPUT_UTF8);
- else
- rt= FTF_GetStringWidth(str, FTF_NO_TRANSCONV | FTF_INPUT_UTF8);
- else
- rt= BMF_GetStringWidth(font, str);
-#else
- rt= BMF_GetStringWidth(font, str);
-#endif
-
- return rt;
-}
-
-void UI_GetBoundingBox(struct BMF_Font* font, char* str, int translate, rctf *bbox)
-{
-#ifdef INTERNATIONAL
- float dummy;
- if(G.ui_international == TRUE)
- if(translate && (U.transopts & USER_TR_BUTTONS))
- FTF_GetBoundingBox(str, &bbox->xmin, &bbox->ymin, &dummy, &bbox->xmax, &bbox->ymax, &dummy, FTF_USE_GETTEXT | FTF_INPUT_UTF8);
- else
- FTF_GetBoundingBox(str, &bbox->xmin, &bbox->ymin, &dummy, &bbox->xmax, &bbox->ymax, &dummy, FTF_NO_TRANSCONV | FTF_INPUT_UTF8);
- else
- BMF_GetStringBoundingBox(font, str, &bbox->xmin, &bbox->ymin, &bbox->xmax, &bbox->ymax);
-#else
- BMF_GetStringBoundingBox(font, str, &bbox->xmin, &bbox->ymin, &bbox->xmax, &bbox->ymax);
-#endif
-}
-
-#ifdef INTERNATIONAL
-
-char *fontsize_pup(void)
-{
- static char string[1024];
- char formatstring[1024];
-
- strcpy(formatstring, "Choose Font Size: %%t|%s %%x%d|%s %%x%d|%s %%x%d|%s %%x%d|%s %%x%d|%s %%x%d|%s %%x%d|%s %%x%d|%s %%x%d");
-
- sprintf(string, formatstring,
- "Font Size: 8", 8,
- "Font Size: 9", 9,
- "Font Size: 10", 10,
- "Font Size: 11", 11,
- "Font Size: 12", 12,
- "Font Size: 13", 13,
- "Font Size: 14", 14,
- "Font Size: 15", 15,
- "Font Size: 16", 16
- );
-
- return (string);
-}
-
-/* called from fileselector */
-void set_interface_font(char *str)
-{
-
- /* this test needed because fileselect callback can happen after disable AA fonts */
- if(U.transopts & USER_DOTRANSLATE) {
- if(FTF_SetFont((unsigned char*)str, 0, U.fontsize)) {
- BLF_lang_set(U.language);
- if(strlen(str) < FILE_MAXDIR) strcpy(U.fontname, str);
- G.ui_international = TRUE;
- }
- else {
- U.fontname[0]= 0;
- FTF_SetFont((unsigned char*)datatoc_bfont_ttf, datatoc_bfont_ttf_size, U.fontsize);
- G.ui_international = TRUE; // this case will switch to standard font
- /* XXX 2.50 bad call okee("Invalid font selection - reverting to built-in font."); */
- }
- /* XXX 2.50 bad call allqueue(REDRAWALL, 0); */
- }
-}
-
-void start_interface_font(void)
-{
- int result = 0;
-
- if(U.transopts & USER_USETEXTUREFONT)
- FTF_SetMode(FTF_TEXTUREFONT);
- else
- FTF_SetMode(FTF_PIXMAPFONT);
-
- if(U.fontsize && U.fontname[0] ) { // we have saved user settings + fontpath
-
- // try loading font from U.fontname = full path to font in usersettings
- result = FTF_SetFont((unsigned char*)U.fontname, 0, U.fontsize);
- }
- else if(U.fontsize) { // user settings, default
- result = FTF_SetFont((unsigned char*)datatoc_bfont_ttf, datatoc_bfont_ttf_size, U.fontsize);
- }
-
- if(result==0) { // use default
- U.language= 0;
- U.fontsize= 11;
- U.encoding= 0;
- U.fontname[0]= 0;
- result = FTF_SetFont((unsigned char*)datatoc_bfont_ttf, datatoc_bfont_ttf_size, U.fontsize);
- }
-
- if(result) {
- BLF_lang_set(U.language);
- G.ui_international = TRUE;
- }
- else {
- printf("no font found for international support\n");
- G.ui_international = FALSE;
- U.transopts &= ~USER_DOTRANSLATE;
- U.fontsize = 0;
- }
-
- /* XXX 2.50 bad call allqueue(REDRAWALL, 0); */
-}
-
-#endif /* INTERNATIONAL */
-
diff --git a/source/blender/editors/interface/view2d.c b/source/blender/editors/interface/view2d.c
index d81d9eb79ca..f2fc2deefbb 100644
--- a/source/blender/editors/interface/view2d.c
+++ b/source/blender/editors/interface/view2d.c
@@ -47,13 +47,14 @@
#include "BIF_gl.h"
#include "BIF_glutil.h"
+#include "BLF_api.h"
+
#include "ED_screen.h"
+#include "UI_interface.h"
#include "UI_resources.h"
-#include "UI_text.h"
#include "UI_view2d.h"
-#include "UI_interface.h"
#include "interface_intern.h"
/* *********************************************************************** */
@@ -231,32 +232,11 @@ void UI_view2d_region_reinit(View2D *v2d, short type, int winx, int winy)
}
break;
- /* ui listviews, tries to wrap 'tot' inside region width */
- case V2D_COMMONVIEW_LIST_UI:
- {
- /* for now, aspect ratio should be maintained, and zoom is clamped within sane default limits */
- v2d->keepzoom= (V2D_KEEPASPECT|V2D_KEEPZOOM);
- v2d->minzoom= 0.5f;
- v2d->maxzoom= 2.0f;
-
- v2d->align= (V2D_ALIGN_NO_NEG_X|V2D_ALIGN_NO_POS_Y);
- v2d->keeptot= V2D_KEEPTOT_BOUNDS;
-
- v2d->tot.xmin= 0.0f;
- v2d->tot.xmax= 336.f; // XXX 320 width + 2 x PNL_DIST
-
- v2d->tot.ymax= 0.0f;
- v2d->tot.ymin= -336.0f*((float)winy)/(float)winx;
-
- v2d->cur= v2d->tot;
- }
- break;
-
- /* panels view, with free/horizontal/vertical align */
+ /* panels view, with horizontal/vertical align */
case V2D_COMMONVIEW_PANELS_UI:
{
/* for now, aspect ratio should be maintained, and zoom is clamped within sane default limits */
- v2d->keepzoom= (V2D_LOCKZOOM_X|V2D_LOCKZOOM_Y|V2D_KEEPASPECT|V2D_KEEPZOOM);
+ v2d->keepzoom= (V2D_KEEPASPECT|V2D_KEEPZOOM);
v2d->minzoom= 0.5f;
v2d->maxzoom= 2.0f;
@@ -421,6 +401,14 @@ void UI_view2d_curRect_validate(View2D *v2d)
/* special exception for Outliner (and later channel-lists):
* - Currently, no actions need to be taken here...
*/
+
+ if (winy < v2d->oldwiny) {
+ float temp = v2d->oldwiny - winy;
+
+ cur->ymin += temp;
+ cur->ymax += temp;
+ }
+
}
else {
/* landscape window: correct for y */
@@ -439,18 +427,28 @@ void UI_view2d_curRect_validate(View2D *v2d)
/* resize from centerpoint */
if (width != curwidth) {
- temp= (cur->xmax + cur->xmin) * 0.5f;
- dh= width * 0.5f;
-
- cur->xmin = temp - dh;
- cur->xmax = temp + dh;
+ if (v2d->keepofs & V2D_LOCKOFS_X) {
+ cur->xmax += width - (cur->xmax - cur->xmin);
+ }
+ else {
+ temp= (cur->xmax + cur->xmin) * 0.5f;
+ dh= width * 0.5f;
+
+ cur->xmin = temp - dh;
+ cur->xmax = temp + dh;
+ }
}
if (height != curheight) {
- temp= (cur->ymax + cur->ymin) * 0.5f;
- dh= height * 0.5f;
-
- cur->ymin = temp - dh;
- cur->ymax = temp + dh;
+ if (v2d->keepofs & V2D_LOCKOFS_Y) {
+ cur->ymax += height - (cur->ymax - cur->ymin);
+ }
+ else {
+ temp= (cur->ymax + cur->ymin) * 0.5f;
+ dh= height * 0.5f;
+
+ cur->ymin = temp - dh;
+ cur->ymax = temp + dh;
+ }
}
}
@@ -845,8 +843,14 @@ void UI_view2d_view_ortho(const bContext *C, View2D *v2d)
/* pixel offsets (-0.375f) are needed to get 1:1 correspondance with pixels for smooth UI drawing,
* but only applied where requsted
*/
- xofs= (v2d->flag & V2D_PIXELOFS_X) ? 0.375f : 0.0f;
- yofs= (v2d->flag & V2D_PIXELOFS_Y) ? 0.375f : 0.0f;
+ /* XXX ton: fix this! */
+ xofs= 0.0; // (v2d->flag & V2D_PIXELOFS_X) ? 0.375f : 0.0f;
+ yofs= 0.0; // (v2d->flag & V2D_PIXELOFS_Y) ? 0.375f : 0.0f;
+
+ /* XXX brecht: instead of zero at least use a tiny offset, otherwise
+ * pixel rounding is effectively random due to float inaccuracy */
+ xofs= 0.001f;
+ yofs= 0.001f;
/* apply mask-based adjustments to cur rect (due to scrollers), to eliminate scaling artifacts */
view2d_map_cur_using_mask(v2d, &curmasked);
@@ -870,8 +874,9 @@ void UI_view2d_view_orthoSpecial(const bContext *C, View2D *v2d, short xaxis)
/* pixel offsets (-0.375f) are needed to get 1:1 correspondance with pixels for smooth UI drawing,
* but only applied where requsted
*/
- xofs= (v2d->flag & V2D_PIXELOFS_X) ? 0.375f : 0.0f;
- yofs= (v2d->flag & V2D_PIXELOFS_Y) ? 0.375f : 0.0f;
+ /* XXX temp (ton) */
+ xofs= 0.0f; // (v2d->flag & V2D_PIXELOFS_X) ? 0.375f : 0.0f;
+ yofs= 0.0f; // (v2d->flag & V2D_PIXELOFS_Y) ? 0.375f : 0.0f;
/* apply mask-based adjustments to cur rect (due to scrollers), to eliminate scaling artifacts */
view2d_map_cur_using_mask(v2d, &curmasked);
@@ -1363,8 +1368,7 @@ static void scroll_printstr(View2DScrollers *scrollers, Scene *scene, float x, f
}
/* draw it */
- ui_rasterpos_safe(x, y, 1.0);
- UI_DrawString(G.fonts, str, 0); // XXX check this again when new text-drawing api is done
+ BLF_draw_default(x, y, 0.0f, str);
}
/* local defines for scrollers drawing */
diff --git a/source/blender/editors/interface/view2d_ops.c b/source/blender/editors/interface/view2d_ops.c
index 6da9512f9e0..bd1c734b870 100644
--- a/source/blender/editors/interface/view2d_ops.c
+++ b/source/blender/editors/interface/view2d_ops.c
@@ -54,6 +54,12 @@
#include "UI_resources.h"
#include "UI_view2d.h"
+static int view2d_poll(bContext *C)
+{
+ ARegion *ar= CTX_wm_region(C);
+
+ return (ar != NULL) && (ar->v2d.flag & V2D_IS_INITIALISED);
+}
/* ********************************************************* */
/* VIEW PANNING OPERATOR */
@@ -110,8 +116,8 @@ static int view_pan_init(bContext *C, wmOperator *op)
vpd->v2d= v2d;
/* calculate translation factor - based on size of view */
- winx= (float)(ar->winrct.xmax - ar->winrct.xmin);
- winy= (float)(ar->winrct.ymax - ar->winrct.ymin);
+ winx= (float)(ar->winrct.xmax - ar->winrct.xmin + 1);
+ winy= (float)(ar->winrct.ymax - ar->winrct.ymin + 1);
vpd->facx= (v2d->cur.xmax - v2d->cur.xmin) / winx;
vpd->facy= (v2d->cur.ymax - v2d->cur.ymin) / winy;
@@ -489,12 +495,22 @@ static void view_zoomstep_apply(bContext *C, wmOperator *op)
/* only resize view on an axis if change is allowed */
if ((v2d->keepzoom & V2D_LOCKZOOM_X)==0) {
- v2d->cur.xmin += dx;
- v2d->cur.xmax -= dx;
+ if (v2d->keepofs & V2D_LOCKOFS_X) {
+ v2d->cur.xmax -= 2*dx;
+ }
+ else {
+ v2d->cur.xmin += dx;
+ v2d->cur.xmax -= dx;
+ }
}
if ((v2d->keepzoom & V2D_LOCKZOOM_Y)==0) {
- v2d->cur.ymin += dy;
- v2d->cur.ymax -= dy;
+ if (v2d->keepofs & V2D_LOCKOFS_Y) {
+ v2d->cur.ymax -= 2*dy;
+ }
+ else {
+ v2d->cur.ymin += dy;
+ v2d->cur.ymax -= dy;
+ }
}
/* validate that view is in valid configuration after this operation */
@@ -635,12 +651,22 @@ static void view_zoomdrag_apply(bContext *C, wmOperator *op)
/* only move view on an axis if change is allowed */
if ((v2d->keepzoom & V2D_LOCKZOOM_X)==0) {
- v2d->cur.xmin += dx;
- v2d->cur.xmax -= dx;
+ if (v2d->keepofs & V2D_LOCKOFS_X) {
+ v2d->cur.xmax -= 2*dx;
+ }
+ else {
+ v2d->cur.xmin += dx;
+ v2d->cur.xmax -= dx;
+ }
}
if ((v2d->keepzoom & V2D_LOCKZOOM_Y)==0) {
- v2d->cur.ymin += dy;
- v2d->cur.ymax -= dy;
+ if (v2d->keepofs & V2D_LOCKOFS_Y) {
+ v2d->cur.ymax -= 2*dy;
+ }
+ else {
+ v2d->cur.ymin += dy;
+ v2d->cur.ymax -= dy;
+ }
}
/* validate that view is in valid configuration after this operation */
@@ -1187,15 +1213,8 @@ static int scroller_activate_modal(bContext *C, wmOperator *op, wmEvent *event)
static int scroller_activate_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
ARegion *ar= CTX_wm_region(C);
- View2D *v2d= NULL;
+ View2D *v2d= &ar->v2d;
short in_scroller= 0;
-
- /* firstly, check context to see if mouse is actually in region */
- // XXX isn't this the job of poll() callbacks which can't check events, but only context?
- if (ar == NULL)
- return OPERATOR_PASS_THROUGH;//OPERATOR_CANCELLED;
- else
- v2d= &ar->v2d;
/* check if mouse in scrollbars, if they're enabled */
in_scroller= UI_view2d_mouse_in_scrollers(C, v2d, event->x, event->y);
@@ -1241,6 +1260,70 @@ void VIEW2D_OT_scroller_activate(wmOperatorType *ot)
/* api callbacks */
ot->invoke= scroller_activate_invoke;
ot->modal= scroller_activate_modal;
+ ot->poll= view2d_poll;
+}
+
+/* ********************************************************* */
+/* RESET */
+
+static int reset_exec(bContext *C, wmOperator *op)
+{
+ ARegion *ar= CTX_wm_region(C);
+ View2D *v2d= &ar->v2d;
+ int winx, winy;
+
+ /* zoom 1.0 */
+ winx= (float)(v2d->mask.xmax - v2d->mask.xmin + 1);
+ winy= (float)(v2d->mask.ymax - v2d->mask.ymin + 1);
+
+ v2d->cur.xmax= v2d->cur.xmin + winx;
+ v2d->cur.ymax= v2d->cur.ymin + winy;
+
+ /* align */
+ if(v2d->align) {
+ /* posx and negx flags are mutually exclusive, so watch out */
+ if ((v2d->align & V2D_ALIGN_NO_POS_X) && !(v2d->align & V2D_ALIGN_NO_NEG_X)) {
+ v2d->cur.xmax= 0.0f;
+ v2d->cur.xmin= v2d->winx;
+ }
+ else if ((v2d->align & V2D_ALIGN_NO_NEG_X) && !(v2d->align & V2D_ALIGN_NO_POS_X)) {
+ v2d->cur.xmax= v2d->cur.xmax - v2d->cur.xmin;
+ v2d->cur.xmin= 0.0f;
+ }
+
+ /* - posx and negx flags are mutually exclusive, so watch out */
+ if ((v2d->align & V2D_ALIGN_NO_POS_Y) && !(v2d->align & V2D_ALIGN_NO_NEG_Y)) {
+ v2d->cur.ymax= 0.0f;
+ v2d->cur.ymin= -v2d->winy;
+ }
+ else if ((v2d->align & V2D_ALIGN_NO_NEG_Y) && !(v2d->align & V2D_ALIGN_NO_POS_Y)) {
+ v2d->cur.ymax= v2d->cur.ymax - v2d->cur.ymin;
+ v2d->cur.ymin= 0.0f;
+ }
+ }
+
+ /* validate that view is in valid configuration after this operation */
+ UI_view2d_curRect_validate(v2d);
+
+ /* request updates to be done... */
+ ED_area_tag_redraw(CTX_wm_area(C));
+ UI_view2d_sync(CTX_wm_screen(C), CTX_wm_area(C), v2d, V2D_LOCK_COPY);
+
+ return OPERATOR_FINISHED;
+}
+
+void VIEW2D_OT_reset(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "Reset View";
+ ot->idname= "VIEW2D_OT_reset";
+
+ /* api callbacks */
+ ot->exec= reset_exec;
+ ot->poll= view2d_poll;
+
+ /* flags */
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
}
/* ********************************************************* */
@@ -1262,6 +1345,8 @@ void ui_view2d_operatortypes(void)
WM_operatortype_append(VIEW2D_OT_zoom_border);
WM_operatortype_append(VIEW2D_OT_scroller_activate);
+
+ WM_operatortype_append(VIEW2D_OT_reset);
}
void UI_view2d_keymap(wmWindowManager *wm)
@@ -1300,12 +1385,15 @@ void UI_view2d_keymap(wmWindowManager *wm)
/* scrollers */
WM_keymap_add_item(keymap, "VIEW2D_OT_scroller_activate", LEFTMOUSE, KM_PRESS, 0, 0);
-
+
/* Alternative keymap for buttons listview */
keymap= WM_keymap_listbase(wm, "View2D Buttons List", 0, 0);
WM_keymap_add_item(keymap, "VIEW2D_OT_pan", MIDDLEMOUSE, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "VIEW2D_OT_scroll_down", WHEELDOWNMOUSE, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "VIEW2D_OT_scroll_up", WHEELUPMOUSE, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "VIEW2D_OT_zoom", MIDDLEMOUSE, KM_PRESS, KM_CTRL, 0);
+ WM_keymap_add_item(keymap, "VIEW2D_OT_zoom_out", PADMINUS, KM_PRESS, 0, 0);
+ WM_keymap_add_item(keymap, "VIEW2D_OT_zoom_in", PADPLUSKEY, KM_PRESS, 0, 0);
+ WM_keymap_add_item(keymap, "VIEW2D_OT_reset", HOMEKEY, KM_PRESS, 0, 0);
}
diff --git a/source/blender/editors/mesh/Makefile b/source/blender/editors/mesh/Makefile
index 60b1fa1c329..650771519cd 100644
--- a/source/blender/editors/mesh/Makefile
+++ b/source/blender/editors/mesh/Makefile
@@ -38,7 +38,6 @@ CFLAGS += $(LEVEL_1_C_WARNINGS)
CPPFLAGS += -I$(NAN_GLEW)/include
CPPFLAGS += -I$(OPENGL_HEADERS)
-CPPFLAGS += -I$(NAN_BMFONT)/include
CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include
CPPFLAGS += -I$(NAN_ELBEEM)/include
diff --git a/source/blender/editors/mesh/SConscript b/source/blender/editors/mesh/SConscript
index bd6d355d84c..80536b5e431 100644
--- a/source/blender/editors/mesh/SConscript
+++ b/source/blender/editors/mesh/SConscript
@@ -5,7 +5,7 @@ sources = env.Glob('*.c')
incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../imbuf'
incs += ' ../../windowmanager #/intern/guardedalloc #/extern/glew/include'
-incs += ' #/intern/guardedalloc #intern/bmfont ../../gpu'
+incs += ' #/intern/guardedalloc ../../gpu'
incs += ' ../../makesrna ../../render/extern/include #/intern/elbeem/extern'
incs += ' ../../bmesh '
diff --git a/source/blender/editors/mesh/bmesh_tools.c b/source/blender/editors/mesh/bmesh_tools.c
index ec655862c28..dfcb4b06eb4 100644
--- a/source/blender/editors/mesh/bmesh_tools.c
+++ b/source/blender/editors/mesh/bmesh_tools.c
@@ -77,8 +77,6 @@
#include "WM_api.h"
#include "WM_types.h"
-#include "BMF_Api.h"
-
#include "ED_mesh.h"
#include "ED_view3d.h"
#include "ED_util.h"
@@ -102,9 +100,9 @@ static int subdivide_exec(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
Scene *scene = CTX_data_scene(C);
+ BMEditMesh *em= ((Mesh *)obedit->data)->edit_btmesh;
- BM_esubdivideflag(obedit, ((Mesh *)obedit->data)->edit_btmesh->bm,
- 1, 0.0, scene->toolsettings->editbutflag, 1, 0);
+ BM_esubdivideflag(obedit, em->bm, 1, 0.0, scene->toolsettings->editbutflag, 1, 0);
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
@@ -218,11 +216,13 @@ void MESH_OT_subdivide_smooth(wmOperatorType *ot)
static int subdivs_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
- uiMenuItem *head;
+ uiPopupMenu *pup;
+ uiLayout *layout;
- head= uiPupMenuBegin("Subdivision Type", 0);
- uiMenuItemsEnumO(head, "MESH_OT_subdivs", "type");
- uiPupMenuEnd(C, head);
+ pup= uiPupMenuBegin(C, "Subdivision Type", 0);
+ layout= uiPupMenuLayout(pup);
+ uiItemsEnumO(layout, "MESH_OT_subdivs", "type");
+ uiPupMenuEnd(C, pup);
return OPERATOR_CANCELLED;
}
@@ -276,11 +276,9 @@ void MESH_OT_subdivs(wmOperatorType *ot)
/* this is temp, the ops are different, but they are called from subdivs, so all the possible props should be here as well*/
RNA_def_int(ot->srna, "number_cuts", 4, 1, 10, "Number of Cuts", "", 1, INT_MAX);
RNA_def_float(ot->srna, "random_factor", 5.0, 0.0f, FLT_MAX, "Random Factor", "", 0.0f, 1000.0f);
- RNA_def_float(ot->srna, "smoothness", 1.0f, 0.0f, 1000.0f, "Smoothness", "", 0.0f, FLT_MAX);
-
+ RNA_def_float(ot->srna, "smoothness", 1.0f, 0.0f, 1000.0f, "Smoothness", "", 0.0f, FLT_MAX);
}
-
/* individual face extrude */
/* will use vertex normals for extrusion directions, so *nor is unaffected */
short EDBM_Extrude_face_indiv(BMEditMesh *em, short flag, float *nor)
diff --git a/source/blender/editors/mesh/bmeshutils.c b/source/blender/editors/mesh/bmeshutils.c
index 2d15644cbde..1a5ea2e2b75 100644
--- a/source/blender/editors/mesh/bmeshutils.c
+++ b/source/blender/editors/mesh/bmeshutils.c
@@ -77,8 +77,6 @@
#include "WM_api.h"
#include "WM_types.h"
-#include "BMF_Api.h"
-
#include "ED_mesh.h"
#include "ED_view3d.h"
#include "ED_util.h"
diff --git a/source/blender/editors/mesh/bmeshutils_mods.c b/source/blender/editors/mesh/bmeshutils_mods.c
index e3dbfe7fbe0..5c0a25348c5 100644
--- a/source/blender/editors/mesh/bmeshutils_mods.c
+++ b/source/blender/editors/mesh/bmeshutils_mods.c
@@ -1030,7 +1030,7 @@ static int loop_multiselect(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
-void MESH_OT_select_loop_multi(wmOperatorType *ot)
+void MESH_OT_loop_multi_select(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Multi Select Loops";
@@ -1110,7 +1110,7 @@ static int mesh_select_loop_invoke(bContext *C, wmOperator *op, wmEvent *event)
return OPERATOR_FINISHED;
}
-void MESH_OT_select_loop(wmOperatorType *ot)
+void MESH_OT_loop_select(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Loop Select";
@@ -1211,7 +1211,7 @@ static int mesh_shortest_path_select_invoke(bContext *C, wmOperator *op, wmEvent
return OPERATOR_FINISHED;
}
-void MESH_OT_select_path_shortest(wmOperatorType *ot)
+void MESH_OT_select_shortest_path(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Shortest Path Select";
diff --git a/source/blender/editors/mesh/editdeform.c b/source/blender/editors/mesh/editdeform.c
index d6dd9522a6f..3019aabf371 100644
--- a/source/blender/editors/mesh/editdeform.c
+++ b/source/blender/editors/mesh/editdeform.c
@@ -94,7 +94,7 @@ void sel_verts_defgroup (Object *obedit, int select)
case OB_MESH:
{
Mesh *me= ob->data;
- EditMesh *em = EM_GetEditMesh(me);
+ EditMesh *em = BKE_mesh_get_editmesh(me);
for (eve=em->verts.first; eve; eve=eve->next){
dvert= CustomData_em_get(&em->vdata, eve->data, CD_MDEFORMVERT);
@@ -114,7 +114,7 @@ void sel_verts_defgroup (Object *obedit, int select)
if(select) EM_select_flush(em); // vertices to edges/faces
else EM_deselect_flush(em);
- EM_EndEditMesh(me, em);
+ BKE_mesh_end_editmesh(me, em);
}
break;
case OB_LATTICE:
@@ -398,7 +398,7 @@ void del_defgroup (Object *ob)
/* Make sure that any verts with higher indices are adjusted accordingly */
if(ob->type==OB_MESH) {
Mesh *me= ob->data;
- EditMesh *em = EM_GetEditMesh(me);
+ EditMesh *em = BKE_mesh_get_editmesh(me);
EditVert *eve;
MDeformVert *dvert;
@@ -410,7 +410,7 @@ void del_defgroup (Object *ob)
if (dvert->dw[i].def_nr > (ob->actdef-1))
dvert->dw[i].def_nr--;
}
- EM_EndEditMesh(me, em);
+ BKE_mesh_end_editmesh(me, em);
}
else if(ob->type==OB_LATTICE) {
Lattice *lt= def_get_lattice(ob);
@@ -724,7 +724,7 @@ void assign_verts_defgroup (Object *obedit, float weight)
case OB_MESH:
{
Mesh *me= ob->data;
- EditMesh *em = EM_GetEditMesh(me);
+ EditMesh *em = BKE_mesh_get_editmesh(me);
if (!CustomData_has_layer(&em->vdata, CD_MDEFORMVERT))
EM_add_data_layer(em, &em->vdata, CD_MDEFORMVERT);
@@ -764,7 +764,7 @@ void assign_verts_defgroup (Object *obedit, float weight)
}
}
}
- EM_EndEditMesh(me, em);
+ BKE_mesh_end_editmesh(me, em);
}
break;
case OB_LATTICE:
@@ -888,7 +888,7 @@ void remove_verts_defgroup (Object *obedit, int allverts)
case OB_MESH:
{
Mesh *me= ob->data;
- EditMesh *em = EM_GetEditMesh(me);
+ EditMesh *em = BKE_mesh_get_editmesh(me);
for (eve=em->verts.first; eve; eve=eve->next){
dvert= CustomData_em_get(&em->vdata, eve->data, CD_MDEFORMVERT);
@@ -918,7 +918,7 @@ void remove_verts_defgroup (Object *obedit, int allverts)
}
}
}
- EM_EndEditMesh(me, em);
+ BKE_mesh_end_editmesh(me, em);
}
break;
case OB_LATTICE:
diff --git a/source/blender/editors/mesh/editmesh.c b/source/blender/editors/mesh/editmesh.c
index ac4a8ecbb62..5cf0a0b1de6 100644
--- a/source/blender/editors/mesh/editmesh.c
+++ b/source/blender/editors/mesh/editmesh.c
@@ -1401,22 +1401,22 @@ static int mesh_separate_selected(Scene *scene, Base *editbase)
obedit= editbase->object;
me= obedit->data;
- em= EM_GetEditMesh(me);
+ em= BKE_mesh_get_editmesh(me);
if(me->key) {
error("Can't separate with vertex keys");
- EM_EndEditMesh(me, em);
+ BKE_mesh_end_editmesh(me, em);
return 0;
}
if(em->selected.first)
BLI_freelistN(&(em->selected)); /* clear the selection order */
- EM_selectmode_set(em); // enforce full consistant selection flags
+ EM_selectmode_set(em); // enforce full consistent selection flags
EM_stats_update(em);
if(em->totvertsel==0) {
- EM_EndEditMesh(me, em);
+ BKE_mesh_end_editmesh(me, em);
return 0;
}
@@ -1486,7 +1486,7 @@ static int mesh_separate_selected(Scene *scene, Base *editbase)
DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
DAG_object_flush_update(scene, basenew->object, OB_RECALC_DATA);
- EM_EndEditMesh(me, em);
+ BKE_mesh_end_editmesh(me, em);
return 1;
}
@@ -1495,7 +1495,7 @@ static int mesh_separate_selected(Scene *scene, Base *editbase)
static int mesh_separate_material(Scene *scene, Base *editbase)
{
Mesh *me= editbase->object->data;
- EditMesh *em= EM_GetEditMesh(me);
+ EditMesh *em= BKE_mesh_get_editmesh(me);
unsigned char curr_mat;
for (curr_mat = 1; curr_mat < editbase->object->totcol; ++curr_mat) {
@@ -1505,12 +1505,12 @@ static int mesh_separate_material(Scene *scene, Base *editbase)
editmesh_select_by_material(em, curr_mat);
/* and now separate */
if(0==mesh_separate_selected(scene, editbase)) {
- EM_EndEditMesh(me, em);
+ BKE_mesh_end_editmesh(me, em);
return 0;
}
}
- EM_EndEditMesh(me, em);
+ BKE_mesh_end_editmesh(me, em);
return 1;
}
@@ -1522,11 +1522,11 @@ static int mesh_separate_loose(Scene *scene, Base *editbase)
int doit= 1;
me= editbase->object->data;
- em= EM_GetEditMesh(me);
+ em= BKE_mesh_get_editmesh(me);
if(me->key) {
error("Can't separate with vertex keys");
- EM_EndEditMesh(me, em);
+ BKE_mesh_end_editmesh(me, em);
return 0;
}
@@ -1543,7 +1543,7 @@ static int mesh_separate_loose(Scene *scene, Base *editbase)
doit= mesh_separate_selected(scene, editbase);
}
- EM_EndEditMesh(me, em);
+ BKE_mesh_end_editmesh(me, em);
return 1;
}
@@ -1733,15 +1733,3 @@ void em_setup_viewcontext(bContext *C, ViewContext *vc)
vc->em= me->edit_btmesh;
}
}
-
-EditMesh *EM_GetEditMesh(Mesh *me)
-{
- return bmesh_to_editmesh(me->edit_btmesh->bm);
-}
-
-void EM_EndEditMesh(Mesh *me, EditMesh *em)
-{
- BM_Free_Mesh(me->edit_btmesh->bm);
- me->edit_btmesh->bm = editmesh_to_bmesh(em);
- TM_RecalcTesselation(me->edit_btmesh);
-}
diff --git a/source/blender/editors/mesh/editmesh_add.c b/source/blender/editors/mesh/editmesh_add.c
index 588771071fa..a1ea37dfea3 100644
--- a/source/blender/editors/mesh/editmesh_add.c
+++ b/source/blender/editors/mesh/editmesh_add.c
@@ -343,18 +343,18 @@ int make_fgon(EditMesh *em, wmOperator *op, int make)
static int make_fgon_exec(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
- EditMesh *em= EM_GetEditMesh(((Mesh *)obedit->data));
+ EditMesh *em= BKE_mesh_get_editmesh(((Mesh *)obedit->data));
if( make_fgon(em, op, 1) ) {
DAG_object_flush_update(CTX_data_scene(C), obedit, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_CANCELLED;
}
@@ -375,18 +375,18 @@ void MESH_OT_fgon_make(struct wmOperatorType *ot)
static int clear_fgon_exec(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
- EditMesh *em= EM_GetEditMesh(((Mesh *)obedit->data));
+ EditMesh *em= BKE_mesh_get_editmesh(((Mesh *)obedit->data));
if( make_fgon(em, op, 0) ) {
DAG_object_flush_update(CTX_data_scene(C), obedit, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_CANCELLED;
}
@@ -827,7 +827,7 @@ static void addedgeface_mesh(EditMesh *em, wmOperator *op)
static int addedgeface_mesh_exec(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
- EditMesh *em= EM_GetEditMesh(((Mesh *)obedit->data));
+ EditMesh *em= BKE_mesh_get_editmesh(((Mesh *)obedit->data));
addedgeface_mesh(em, op);
@@ -835,15 +835,15 @@ static int addedgeface_mesh_exec(bContext *C, wmOperator *op)
DAG_object_flush_update(CTX_data_scene(C), obedit, OB_RECALC_DATA);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
-void MESH_OT_add_edge_face(wmOperatorType *ot)
+void MESH_OT_edge_face_add(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Make Edge/Face";
- ot->idname= "MESH_OT_add_edge_face";
+ ot->idname= "MESH_OT_edge_face_add";
/* api callbacks */
ot->exec= addedgeface_mesh_exec;
@@ -1025,7 +1025,7 @@ static void make_prim(Object *obedit, int type, float mat[4][4], int tot, int se
* fill - end capping, and option to fill in circle
* cent[3] - center of the data.
* */
- EditMesh *em= EM_GetEditMesh(((Mesh *)obedit->data));
+ EditMesh *em= BKE_mesh_get_editmesh(((Mesh *)obedit->data));
EditVert *eve, *v1=NULL, *v2, *v3, *v4=NULL, *vtop, *vdown;
float phi, phid, vec[3];
float q[4], cmat[3][3], nor[3]= {0.0, 0.0, 0.0};
@@ -1307,7 +1307,7 @@ static void make_prim(Object *obedit, int type, float mat[4][4], int tot, int se
if(type!=0 && type!=13)
righthandfaces(em, 1); /* otherwise monkey has eyes in wrong direction */
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
}
@@ -1363,11 +1363,11 @@ static int add_primitive_plane_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
-void MESH_OT_add_primitive_plane(wmOperatorType *ot)
+void MESH_OT_primitive_plane_add(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Add Plane";
- ot->idname= "MESH_OT_add_primitive_plane";
+ ot->idname= "MESH_OT_primitive_plane_add";
/* api callbacks */
ot->exec= add_primitive_plane_exec;
@@ -1393,11 +1393,11 @@ static int add_primitive_cube_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
-void MESH_OT_add_primitive_cube(wmOperatorType *ot)
+void MESH_OT_primitive_cube_add(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Add Cube";
- ot->idname= "MESH_OT_add_primitive_cube";
+ ot->idname= "MESH_OT_primitive_cube_add";
/* api callbacks */
ot->exec= add_primitive_cube_exec;
@@ -1423,11 +1423,11 @@ static int add_primitive_circle_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
-void MESH_OT_add_primitive_circle(wmOperatorType *ot)
+void MESH_OT_primitive_circle_add(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Add Circle";
- ot->idname= "MESH_OT_add_primitive_circle";
+ ot->idname= "MESH_OT_primitive_circle_add";
/* api callbacks */
ot->exec= add_primitive_circle_exec;
@@ -1458,11 +1458,11 @@ static int add_primitive_cylinder_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
-void MESH_OT_add_primitive_cylinder(wmOperatorType *ot)
+void MESH_OT_primitive_cylinder_add(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Add Cylinder";
- ot->idname= "MESH_OT_add_primitive_cylinder";
+ ot->idname= "MESH_OT_primitive_cylinder_add";
/* api callbacks */
ot->exec= add_primitive_cylinder_exec;
@@ -1493,11 +1493,11 @@ static int add_primitive_tube_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
-void MESH_OT_add_primitive_tube(wmOperatorType *ot)
+void MESH_OT_primitive_tube_add(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Add Tube";
- ot->idname= "MESH_OT_add_primitive_tube";
+ ot->idname= "MESH_OT_primitive_tube_add";
/* api callbacks */
ot->exec= add_primitive_tube_exec;
@@ -1528,11 +1528,11 @@ static int add_primitive_cone_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
-void MESH_OT_add_primitive_cone(wmOperatorType *ot)
+void MESH_OT_primitive_cone_add(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Add Cone";
- ot->idname= "MESH_OT_add_primitive_cone";
+ ot->idname= "MESH_OT_primitive_cone_add";
/* api callbacks */
ot->exec= add_primitive_cone_exec;
@@ -1565,11 +1565,11 @@ static int add_primitive_grid_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
-void MESH_OT_add_primitive_grid(wmOperatorType *ot)
+void MESH_OT_primitive_grid_add(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Add Grid";
- ot->idname= "MESH_OT_add_primitive_grid";
+ ot->idname= "MESH_OT_primitive_grid_add";
/* api callbacks */
ot->exec= add_primitive_grid_exec;
@@ -1598,11 +1598,11 @@ static int add_primitive_monkey_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
-void MESH_OT_add_primitive_monkey(wmOperatorType *ot)
+void MESH_OT_primitive_monkey_add(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Add Monkey";
- ot->idname= "MESH_OT_add_primitive_monkey";
+ ot->idname= "MESH_OT_primitive_monkey_add";
/* api callbacks */
ot->exec= add_primitive_monkey_exec;
@@ -1628,11 +1628,11 @@ static int add_primitive_uvsphere_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
-void MESH_OT_add_primitive_uv_sphere(wmOperatorType *ot)
+void MESH_OT_primitive_uv_sphere_add(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Add UV Sphere";
- ot->idname= "MESH_OT_add_primitive_uv_sphere";
+ ot->idname= "MESH_OT_primitive_uv_sphere_add";
/* api callbacks */
ot->exec= add_primitive_uvsphere_exec;
@@ -1663,11 +1663,11 @@ static int add_primitive_icosphere_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
-void MESH_OT_add_primitive_ico_sphere(wmOperatorType *ot)
+void MESH_OT_primitive_ico_sphere_add(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Add Ico Sphere";
- ot->idname= "MESH_OT_add_primitive_ico_sphere";
+ ot->idname= "MESH_OT_primitive_ico_sphere_add";
/* api callbacks */
ot->exec= add_primitive_icosphere_exec;
diff --git a/source/blender/editors/mesh/editmesh_lib.c b/source/blender/editors/mesh/editmesh_lib.c
index ea6a5442072..98d69419fdb 100644
--- a/source/blender/editors/mesh/editmesh_lib.c
+++ b/source/blender/editors/mesh/editmesh_lib.c
@@ -550,7 +550,7 @@ void EM_select_flush(EditMesh *em)
EM_nfaces_selected(em);
}
-/* when vertices or edges can be selected, also make fgon consistant */
+/* when vertices or edges can be selected, also make fgon consistent */
static void check_fgons_selection(EditMesh *em)
{
EditFace *efa, *efan;
@@ -741,7 +741,7 @@ void EM_convertsel(EditMesh *em, short oldmode, short selectmode)
EM_nfaces_selected(em);
}
-/* when switching select mode, makes sure selection is consistant for editing */
+/* when switching select mode, makes sure selection is consistent for editing */
/* also for paranoia checks to make sure edge or face mode works */
void EM_selectmode_set(EditMesh *em)
{
@@ -1883,7 +1883,7 @@ void adduplicateflag(EditMesh *em, int flag)
EditFace *efa, *newfa, *act_efa = EM_get_actFace(em, 0);
EM_clear_flag_all(em, 128);
- EM_selectmode_set(em); // paranoia check, selection now is consistant
+ EM_selectmode_set(em); // paranoia check, selection now is consistent
/* vertices first */
for(eve= em->verts.last; eve; eve= eve->prev) {
diff --git a/source/blender/editors/mesh/editmesh_loop.c b/source/blender/editors/mesh/editmesh_loop.c
index 51c19261de8..7f1d56aee73 100644
--- a/source/blender/editors/mesh/editmesh_loop.c
+++ b/source/blender/editors/mesh/editmesh_loop.c
@@ -61,6 +61,7 @@ editmesh_loop: tools with own drawing subloops, select, knife, subdiv
#include "BKE_mesh.h"
#include "BKE_object.h"
#include "BKE_utildefines.h"
+#include "BKE_tessmesh.h"
#include "PIL_time.h"
@@ -784,8 +785,8 @@ static float bm_seg_intersect(BMEdge *e, CutCurve *c, int len, char mode,
static int knife_cut_exec(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
- BMesh *bm;
- EditMesh *em= EM_GetEditMesh(((Mesh *)obedit->data)), *em2;
+ BMEditMesh *em= (((Mesh *)obedit->data))->edit_btmesh;
+ BMesh *bm = em->bm;
ARegion *ar= CTX_wm_region(C);
BMVert *bv;
BMIter iter;
@@ -798,9 +799,8 @@ static int knife_cut_exec(bContext *C, wmOperator *op)
int len=0, isected, flag, i;
short numcuts=1, mode= RNA_int_get(op->ptr, "type");
- if (EM_nvertices_selected(em) < 2) {
+ if (bm->totvertsel < 2) {
error("No edges are selected to operate on");
- EM_EndEditMesh(obedit->data, em);
return OPERATOR_CANCELLED;;
}
@@ -814,12 +814,9 @@ static int knife_cut_exec(bContext *C, wmOperator *op)
RNA_END;
if(len<2) {
- EM_EndEditMesh(obedit->data, em);
return OPERATOR_CANCELLED;
}
- bm = editmesh_to_bmesh(em);
-
/*the floating point coordinates of verts in screen space will be stored in a hash table according to the vertices pointer*/
gh = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp);
for(bv=BMIter_New(&iter, bm, BM_VERTS_OF_MESH, NULL);bv;bv=BMIter_Step(&iter)){
@@ -869,17 +866,8 @@ static int knife_cut_exec(bContext *C, wmOperator *op)
//else if (mode==KNIFE_MULTICUT) esubdivideflag(obedit, em, SELECT, 0, B_KNIFE, numcuts, SUBDIV_SELECT_ORIG);
//else esubdivideflag(obedit, em, SELECT, 0, B_KNIFE|B_PERCENTSUBD, 1, SUBDIV_SELECT_ORIG);
- BLI_ghash_free(gh, NULL, (GHashValFreeFP)MEM_freeN);
-
- free_editMesh(em);
-
- em2 = bmesh_to_editmesh(bm);
- *em = *em2;
-
- MEM_freeN(em2);
- BM_Free_Mesh(bm);
+ BLI_ghash_free(gh, NULL, (GHashValFreeFP)WMEM_freeN);
- EM_EndEditMesh(obedit->data, em);
return OPERATOR_FINISHED;
}
diff --git a/source/blender/editors/mesh/editmesh_mods.c b/source/blender/editors/mesh/editmesh_mods.c
index d7f1d4b479d..8758eb9d914 100644
--- a/source/blender/editors/mesh/editmesh_mods.c
+++ b/source/blender/editors/mesh/editmesh_mods.c
@@ -490,7 +490,7 @@ static int similar_face_select_exec(bContext *C, wmOperator *op)
Scene *scene= CTX_data_scene(C);
Object *obedit= CTX_data_edit_object(C);
Mesh *me= obedit->data;
- EditMesh *em= EM_GetEditMesh(me);
+ EditMesh *em= BKE_mesh_get_editmesh(me);
int selcount = similar_face_select__internal(scene, em, RNA_int_get(op->ptr, "type"));
@@ -498,19 +498,19 @@ static int similar_face_select_exec(bContext *C, wmOperator *op)
/* here was an edge-mode only select flush case, has to be generalized */
EM_selectmode_flush(em);
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
- EM_EndEditMesh(me, em);
+ BKE_mesh_end_editmesh(me, em);
return OPERATOR_FINISHED;
}
- EM_EndEditMesh(me, em);
+ BKE_mesh_end_editmesh(me, em);
return OPERATOR_CANCELLED;
}
-void MESH_OT_select_face_similar(wmOperatorType *ot)
+void MESH_OT_faces_select_similar(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Similar Face Select";
- ot->idname= "MESH_OT_select_face_similar";
+ ot->idname= "MESH_OT_faces_select_similar";
/* api callbacks */
ot->invoke= WM_menu_invoke;
@@ -751,7 +751,7 @@ static int similar_edge_select_exec(bContext *C, wmOperator *op)
Scene *scene= CTX_data_scene(C);
Object *obedit= CTX_data_edit_object(C);
Mesh *me= obedit->data;
- EditMesh *em= EM_GetEditMesh(me);
+ EditMesh *em= BKE_mesh_get_editmesh(me);
int selcount = similar_edge_select__internal(scene, em, RNA_int_get(op->ptr, "type"));
@@ -759,19 +759,19 @@ static int similar_edge_select_exec(bContext *C, wmOperator *op)
/* here was an edge-mode only select flush case, has to be generalized */
EM_selectmode_flush(em);
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
- EM_EndEditMesh(me, em);
+ BKE_mesh_end_editmesh(me, em);
return OPERATOR_FINISHED;
}
- EM_EndEditMesh(me, em);
+ BKE_mesh_end_editmesh(me, em);
return OPERATOR_CANCELLED;
}
-void MESH_OT_select_edge_similar(wmOperatorType *ot)
+void MESH_OT_edges_select_similar(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Similar Edge Select";
- ot->idname= "MESH_OT_select_edge_similar";
+ ot->idname= "MESH_OT_edges_select_similar";
/* api callbacks */
ot->invoke= WM_menu_invoke;
@@ -806,7 +806,7 @@ static int similar_vert_select_exec(bContext *C, wmOperator *op)
Scene *scene= CTX_data_scene(C);
Object *obedit= CTX_data_edit_object(C);
Mesh *me= obedit->data;
- EditMesh *em= EM_GetEditMesh(me);
+ EditMesh *em= BKE_mesh_get_editmesh(me);
EditVert *eve, *base_eve=NULL;
unsigned int selcount=0; /* count how many new edges we select*/
@@ -833,7 +833,7 @@ static int similar_vert_select_exec(bContext *C, wmOperator *op)
}
if (!ok || !deselcount) { /* no data selected OR no more data to select*/
- EM_EndEditMesh(me, em);
+ BKE_mesh_end_editmesh(me, em);
return 0;
}
@@ -864,7 +864,7 @@ static int similar_vert_select_exec(bContext *C, wmOperator *op)
selcount++;
deselcount--;
if (!deselcount) {/*have we selected all posible faces?, if so return*/
- EM_EndEditMesh(me, em);
+ BKE_mesh_end_editmesh(me, em);
return selcount;
}
}
@@ -882,7 +882,7 @@ static int similar_vert_select_exec(bContext *C, wmOperator *op)
selcount++;
deselcount--;
if (!deselcount) {/*have we selected all posible faces?, if so return*/
- EM_EndEditMesh(me, em);
+ BKE_mesh_end_editmesh(me, em);
return selcount;
}
}
@@ -896,7 +896,7 @@ static int similar_vert_select_exec(bContext *C, wmOperator *op)
CD_MDEFORMVERT);
if (!base_dvert || base_dvert->totweight == 0) {
- EM_EndEditMesh(me, em);
+ BKE_mesh_end_editmesh(me, em);
return selcount;
}
@@ -914,7 +914,7 @@ static int similar_vert_select_exec(bContext *C, wmOperator *op)
selcount++;
deselcount--;
if (!deselcount) { /*have we selected all posible faces?, if so return*/
- EM_EndEditMesh(me, em);
+ BKE_mesh_end_editmesh(me, em);
return selcount;
}
break;
@@ -929,19 +929,19 @@ static int similar_vert_select_exec(bContext *C, wmOperator *op)
if(selcount) {
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
- EM_EndEditMesh(me, em);
+ BKE_mesh_end_editmesh(me, em);
return OPERATOR_FINISHED;
}
- EM_EndEditMesh(me, em);
+ BKE_mesh_end_editmesh(me, em);
return OPERATOR_CANCELLED;
}
-void MESH_OT_select_vertex_similar(wmOperatorType *ot)
+void MESH_OT_vertices_select_similar(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Similar Vertex Select";
- ot->idname= "MESH_OT_select_vertex_similar";
+ ot->idname= "MESH_OT_vertices_select_similar";
/* api callbacks */
ot->invoke= WM_menu_invoke;
@@ -1650,7 +1650,7 @@ static void edgering_select(EditMesh *em, EditEdge *startedge, int select)
static int loop_multiselect(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
- EditMesh *em= EM_GetEditMesh(((Mesh *)obedit->data));
+ EditMesh *em= BKE_mesh_get_editmesh(((Mesh *)obedit->data));
EditEdge *eed;
EditEdge **edarray;
int edindex, edfirstcount;
@@ -1689,16 +1689,16 @@ static int loop_multiselect(bContext *C, wmOperator *op)
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
#if 0 //moved to bmeshutils_mods.c
-void MESH_OT_select_loop_multi(wmOperatorType *ot)
+void MESH_OT_loop_multi_select(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Multi Select Loops";
- ot->idname= "MESH_OT_select_loop_multi";
+ ot->idname= "MESH_OT_loop_multi_select";
/* api callbacks */
ot->exec= loop_multiselect;
@@ -1991,7 +1991,7 @@ void selectconnected_mesh_all(EditMesh *em)
static int select_linked_exec(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
- EditMesh *em= EM_GetEditMesh(obedit->data);
+ EditMesh *em= BKE_mesh_get_editmesh(obedit->data);
if( RNA_boolean_get(op->ptr, "limit") ) {
ViewContext vc;
@@ -2003,7 +2003,7 @@ static int select_linked_exec(bContext *C, wmOperator *op)
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
@@ -2132,13 +2132,13 @@ void EM_hide_mesh(EditMesh *em, int swap)
static int hide_mesh_exec(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
- EditMesh *em= EM_GetEditMesh(((Mesh *)obedit->data));
+ EditMesh *em= BKE_mesh_get_editmesh(((Mesh *)obedit->data));
EM_hide_mesh(em, RNA_boolean_get(op->ptr, "unselected"));
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
@@ -2198,13 +2198,13 @@ void EM_reveal_mesh(EditMesh *em)
static int reveal_mesh_exec(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
- EditMesh *em= EM_GetEditMesh(((Mesh *)obedit->data));
+ EditMesh *em= BKE_mesh_get_editmesh(((Mesh *)obedit->data));
EM_reveal_mesh(em);
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
@@ -2258,7 +2258,7 @@ static int select_sharp_edges_exec(bContext *C, wmOperator *op)
* small enough, select the edge
*/
Object *obedit= CTX_data_edit_object(C);
- EditMesh *em= EM_GetEditMesh(((Mesh *)obedit->data));
+ EditMesh *em= BKE_mesh_get_editmesh(((Mesh *)obedit->data));
EditEdge *eed;
EditFace *efa;
EditFace **efa1;
@@ -2270,7 +2270,7 @@ static int select_sharp_edges_exec(bContext *C, wmOperator *op)
if(em->selectmode==SCE_SELECT_FACE) {
BKE_report(op->reports, RPT_ERROR, "Doesn't work in face selection mode");
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_CANCELLED;
}
@@ -2350,15 +2350,15 @@ static int select_sharp_edges_exec(bContext *C, wmOperator *op)
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit); //TODO is this needed ?
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
-void MESH_OT_select_sharp_edges(wmOperatorType *ot)
+void MESH_OT_edges_select_sharp(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Select Sharp Edges";
- ot->idname= "MESH_OT_select_sharp_edges";
+ ot->idname= "MESH_OT_edges_select_sharp";
/* api callbacks */
ot->exec= select_sharp_edges_exec;
@@ -2511,21 +2511,21 @@ static void select_linked_flat_faces(EditMesh *em, wmOperator *op, float sharpne
static int select_linked_flat_faces_exec(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
- EditMesh *em= EM_GetEditMesh(((Mesh *)obedit->data));
+ EditMesh *em= BKE_mesh_get_editmesh(((Mesh *)obedit->data));
select_linked_flat_faces(em, op, RNA_float_get(op->ptr, "sharpness"));
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
-void MESH_OT_select_linked_flat_faces(wmOperatorType *ot)
+void MESH_OT_faces_select_linked_flat(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Select Linked Flat Faces";
- ot->idname= "MESH_OT_select_linked_flat_faces";
+ ot->idname= "MESH_OT_faces_select_linked_flat";
/* api callbacks */
ot->exec= select_linked_flat_faces_exec;
@@ -2611,13 +2611,13 @@ void select_non_manifold(EditMesh *em, wmOperator *op )
static int select_non_manifold_exec(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
- EditMesh *em= EM_GetEditMesh(((Mesh *)obedit->data));
+ EditMesh *em= BKE_mesh_get_editmesh(((Mesh *)obedit->data));
select_non_manifold(em, op);
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
@@ -2674,13 +2674,13 @@ void EM_select_swap(EditMesh *em) /* exported for UV */
static int select_invert_mesh_exec(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
- EditMesh *em= EM_GetEditMesh(((Mesh *)obedit->data));
+ EditMesh *em= BKE_mesh_get_editmesh(((Mesh *)obedit->data));
EM_select_swap(em);
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
@@ -2711,12 +2711,12 @@ void EM_toggle_select_all(EditMesh *em) /* exported for UV */
static int toggle_select_all_exec(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
- EditMesh *em= EM_GetEditMesh(((Mesh *)obedit->data));
+ EditMesh *em= BKE_mesh_get_editmesh(((Mesh *)obedit->data));
EM_toggle_select_all(em);
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
@@ -2797,7 +2797,7 @@ void EM_select_more(EditMesh *em)
static int select_more(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
- EditMesh *em= EM_GetEditMesh(((Mesh *)obedit->data)) ;
+ EditMesh *em= BKE_mesh_get_editmesh(((Mesh *)obedit->data)) ;
EM_select_more(em);
@@ -2805,7 +2805,7 @@ static int select_more(bContext *C, wmOperator *op)
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
@@ -2887,14 +2887,14 @@ void EM_select_less(EditMesh *em)
static int select_less(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
- EditMesh *em= EM_GetEditMesh(((Mesh *)obedit->data));
+ EditMesh *em= BKE_mesh_get_editmesh(((Mesh *)obedit->data));
EM_select_less(em);
// if (EM_texFaceCheck(em))
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
@@ -2957,13 +2957,13 @@ static void selectrandom_mesh(EditMesh *em, float perc) /* randomly selects a us
static int mesh_select_random_exec(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
- EditMesh *em= EM_GetEditMesh(((Mesh *)obedit->data));
+ EditMesh *em= BKE_mesh_get_editmesh(((Mesh *)obedit->data));
selectrandom_mesh(em, RNA_float_get(op->ptr,"percent"));
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
@@ -3047,13 +3047,13 @@ static int mesh_selection_type_exec(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
- EditMesh *em= EM_GetEditMesh(((Mesh *)obedit->data));
+ EditMesh *em= BKE_mesh_get_editmesh(((Mesh *)obedit->data));
mesh_selection_type(CTX_data_scene(C), em, RNA_enum_get(op->ptr,"type"));
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
@@ -3081,7 +3081,8 @@ void MESH_OT_selection_type(wmOperatorType *ot)
static int editmesh_mark_seam(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
- EditMesh *em= EM_GetEditMesh(((Mesh *)obedit->data));
+
+ EditMesh *em= BKE_mesh_get_editmesh(((Mesh *)obedit->data));
Mesh *me= ((Mesh *)obedit->data);
EditEdge *eed;
int clear = RNA_boolean_get(op->ptr, "clear");
@@ -3112,7 +3113,8 @@ static int editmesh_mark_seam(bContext *C, wmOperator *op)
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
- EM_EndEditMesh(obedit->data, em);
+
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
@@ -3135,7 +3137,8 @@ void MESH_OT_mark_seam(wmOperatorType *ot)
static int editmesh_mark_sharp(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
- EditMesh *em= EM_GetEditMesh(((Mesh *)obedit->data));
+
+ EditMesh *em= BKE_mesh_get_editmesh(((Mesh *)obedit->data));
Mesh *me= ((Mesh *)obedit->data);
int set = RNA_boolean_get(op->ptr, "set");
EditEdge *eed;
@@ -3161,7 +3164,8 @@ static int editmesh_mark_sharp(bContext *C, wmOperator *op)
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
- EM_EndEditMesh(obedit->data, em);
+
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
@@ -3556,7 +3560,8 @@ void righthandfaces(EditMesh *em, int select) /* makes faces righthand turning *
static int righthandfaces_exec(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
- EditMesh *em= EM_GetEditMesh(((Mesh *)obedit->data));
+
+ EditMesh *em= BKE_mesh_get_editmesh(((Mesh *)obedit->data));
/* 'standard' behaviour - check if selected, then apply relevant selection */
@@ -3565,15 +3570,15 @@ static int righthandfaces_exec(bContext *C, wmOperator *op)
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit); //TODO is this needed ?
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
-void MESH_OT_consistant_normals(wmOperatorType *ot)
+void MESH_OT_normals_make_consistent(wmOperatorType *ot)
{
/* identifiers */
- ot->name= "Make Normals Consistant";
- ot->idname= "MESH_OT_consistant_normals";
+ ot->name= "Make Normals Consistent";
+ ot->idname= "MESH_OT_normals_make_consistent";
/* api callbacks */
ot->exec= righthandfaces_exec;
@@ -3767,7 +3772,7 @@ static int smooth_vertex(bContext *C, wmOperator *op)
Scene *scene= CTX_data_scene(C);
Object *obedit= CTX_data_edit_object(C);
Mesh *me= obedit->data;
- EditMesh *em= EM_GetEditMesh(me);
+ EditMesh *em= (EditMesh *)me;
EditVert *eve, *eve_mir = NULL;
EditEdge *eed;
@@ -3776,8 +3781,9 @@ static int smooth_vertex(bContext *C, wmOperator *op)
int teller=0;
ModifierData *md= obedit->modifiers.first;
+
if(em==NULL) {
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_CANCELLED;
}
@@ -3787,8 +3793,9 @@ static int smooth_vertex(bContext *C, wmOperator *op)
if(eve->f & SELECT) teller++;
eve= eve->next;
}
+
if(teller==0) {
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_CANCELLED;
}
@@ -3903,16 +3910,16 @@ static int smooth_vertex(bContext *C, wmOperator *op)
// DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
#endif
return OPERATOR_FINISHED;
}
-void MESH_OT_smooth_vertex(wmOperatorType *ot)
+void MESH_OT_vertices_smooth(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Smooth Vertex";
- ot->idname= "MESH_OT_smooth_vertex";
+ ot->idname= "MESH_OT_vertices_smooth";
/* api callbacks */
ot->exec= smooth_vertex;
@@ -4029,21 +4036,21 @@ static int vertices_to_sphere_exec(bContext *C, wmOperator *op)
Object *obedit= CTX_data_edit_object(C);
View3D *v3d = CTX_wm_view3d(C);
Scene *scene = CTX_data_scene(C);
- EditMesh *em= EM_GetEditMesh(((Mesh *)obedit->data));
+ EditMesh *em= BKE_mesh_get_editmesh(((Mesh *)obedit->data));
vertices_to_sphere(scene, v3d, obedit, em, RNA_float_get(op->ptr,"percent"));
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
-void MESH_OT_vertices_to_sphere(wmOperatorType *ot)
+void MESH_OT_vertices_transform_to_sphere(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Vertices to Sphere";
- ot->idname= "MESH_OT_vertices_to_sphere";
+ ot->idname= "MESH_OT_vertices_transform_to_sphere";
/* api callbacks */
ot->exec= vertices_to_sphere_exec;
@@ -4079,7 +4086,7 @@ void flipface(EditMesh *em, EditFace *efa)
static int flip_editnormals(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
- EditMesh *em= EM_GetEditMesh(((Mesh *)obedit->data));
+ EditMesh *em= BKE_mesh_get_editmesh(((Mesh *)obedit->data));
EditFace *efa;
efa= em->faces.first;
@@ -4093,7 +4100,7 @@ static int flip_editnormals(bContext *C, wmOperator *op)
/* update vertex normals too */
recalc_editnormals(em);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c
index 139fa29ddf9..766615f0c7c 100644
--- a/source/blender/editors/mesh/editmesh_tools.c
+++ b/source/blender/editors/mesh/editmesh_tools.c
@@ -84,8 +84,6 @@ editmesh_tool.c: UI called tools for editmesh, geometry changes here, otherwise
#include "WM_api.h"
#include "WM_types.h"
-#include "BMF_Api.h"
-
#include "ED_mesh.h"
#include "ED_view3d.h"
#include "ED_util.h"
@@ -490,7 +488,7 @@ static int removedoublesflag_exec(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
Scene *scene = CTX_data_scene(C);
- EditMesh *em= EM_GetEditMesh(((Mesh *)obedit->data));
+ EditMesh *em= BKE_mesh_get_editmesh(((Mesh *)obedit->data));
char msg[100];
int cnt = removedoublesflag(em,1,0,scene->toolsettings->doublimit);
@@ -503,7 +501,7 @@ static int removedoublesflag_exec(bContext *C, wmOperator *op)
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
@@ -704,10 +702,65 @@ void extrude_mesh(Object *obedit, EditMesh *em, wmOperator *op)
}
+#if 0
+//need to see if this really had new stuff I should merge over
+<<<<<<< .working
+=======
+// XXX should be a menu item
+static int mesh_extrude_invoke(bContext *C, wmOperator *op, wmEvent *event)
+{
+ Object *obedit= CTX_data_edit_object(C);
+ EditMesh *em= BKE_mesh_get_editmesh((Mesh *)obedit->data);
+
+ extrude_mesh(obedit,em, op);
+
+ RNA_int_set(op->ptr, "mode", TFM_TRANSLATION);
+ WM_operator_name_call(C, "TFM_OT_transform", WM_OP_INVOKE_REGION_WIN, op->ptr);
+
+ WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
+
+ BKE_mesh_end_editmesh(obedit->data, em);
+ return OPERATOR_FINISHED;
+}
+
+/* extrude without transform */
+static int mesh_extrude_exec(bContext *C, wmOperator *op)
+{
+ Object *obedit= CTX_data_edit_object(C);
+ EditMesh *em= BKE_mesh_get_editmesh(obedit->data);
+
+ extrude_mesh(obedit,em, op);
+
+ WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
+
+ BKE_mesh_end_editmesh(obedit->data, em);
+ return OPERATOR_FINISHED;
+}
+
+
+void MESH_OT_extrude(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "Extrude Mesh";
+ ot->idname= "MESH_OT_extrude";
+
+ /* api callbacks */
+ ot->invoke= mesh_extrude_invoke;
+ ot->exec= mesh_extrude_exec;
+ ot->poll= ED_operator_editmesh;
+
+ /* flags */
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+
+ /* to give to transform */
+ RNA_def_int(ot->srna, "mode", TFM_TRANSLATION, 0, INT_MAX, "Mode", "", 0, INT_MAX);
+}
+#endif
+
static int split_mesh(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
- EditMesh *em= EM_GetEditMesh((Mesh *)obedit->data);
+ EditMesh *em= BKE_mesh_get_editmesh((Mesh *)obedit->data);
WM_cursor_wait(1);
@@ -722,7 +775,7 @@ static int split_mesh(bContext *C, wmOperator *op)
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
// DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
@@ -740,6 +793,71 @@ void MESH_OT_split(wmOperatorType *ot)
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
}
+#if 0
+//this also showed up in a merge, need to check if it
+//needs changes ported over to new extrude code too
+static int extrude_repeat_mesh(bContext *C, wmOperator *op)
+{
+ Object *obedit= CTX_data_edit_object(C);
+ EditMesh *em= BKE_mesh_get_editmesh((Mesh *)obedit->data);
+
+ RegionView3D *rv3d = CTX_wm_region_view3d(C);
+
+ int steps = RNA_int_get(op->ptr,"steps");
+
+ float offs = RNA_float_get(op->ptr,"offset");
+
+ float dvec[3], tmat[3][3], bmat[3][3], nor[3]= {0.0, 0.0, 0.0};
+ short a;
+
+ /* dvec */
+ dvec[0]= rv3d->persinv[2][0];
+ dvec[1]= rv3d->persinv[2][1];
+ dvec[2]= rv3d->persinv[2][2];
+ Normalize(dvec);
+ dvec[0]*= offs;
+ dvec[1]*= offs;
+ dvec[2]*= offs;
+
+ /* base correction */
+ Mat3CpyMat4(bmat, obedit->obmat);
+ Mat3Inv(tmat, bmat);
+ Mat3MulVecfl(tmat, dvec);
+
+ for(a=0; a<steps; a++) {
+ extrudeflag(obedit, em, SELECT, nor);
+ translateflag(em, SELECT, dvec);
+ }
+
+ recalc_editnormals(em);
+
+ EM_fgon_flags(em);
+
+ WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
+
+// DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
+ BKE_mesh_end_editmesh(obedit->data, em);
+ return OPERATOR_FINISHED;
+}
+
+void MESH_OT_extrude_repeat(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "Extrude Repeat Mesh";
+ ot->idname= "MESH_OT_extrude_repeat";
+
+ /* api callbacks */
+ ot->exec= extrude_repeat_mesh;
+ ot->poll= ED_operator_editmesh;
+
+ /* flags */
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+
+ /* props */
+ RNA_def_float(ot->srna, "offset", 2.0f, 0.0f, 100.0f, "Offset", "", 0.0f, FLT_MAX);
+ RNA_def_int(ot->srna, "steps", 10, 0, 180, "Steps", "", 0, INT_MAX);
+}
+#endif
/* ************************** spin operator ******************** */
static int spin_mesh(bContext *C, float *dvec, int steps, float degr, int dupli )
@@ -747,7 +865,7 @@ static int spin_mesh(bContext *C, float *dvec, int steps, float degr, int dupli
Object *obedit= CTX_data_edit_object(C);
View3D *v3d = CTX_wm_view3d(C);
Scene *scene = CTX_data_scene(C);
- EditMesh *em= EM_GetEditMesh((Mesh *)obedit->data);
+ EditMesh *em= BKE_mesh_get_editmesh((Mesh *)obedit->data);
RegionView3D *rv3d= CTX_wm_region_view3d(C);
EditVert *eve,*nextve;
float nor[3]= {0.0f, 0.0f, 0.0f};
@@ -830,7 +948,7 @@ static int spin_mesh(bContext *C, float *dvec, int steps, float degr, int dupli
DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
}
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return ok;
}
@@ -871,7 +989,7 @@ void MESH_OT_spin(wmOperatorType *ot)
static int screw_mesh_exec(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
- EditMesh *em= EM_GetEditMesh((Mesh *)obedit->data);
+ EditMesh *em= BKE_mesh_get_editmesh((Mesh *)obedit->data);
EditVert *eve,*v1=0,*v2=0;
EditEdge *eed;
float dvec[3], nor[3];
@@ -907,7 +1025,7 @@ static int screw_mesh_exec(bContext *C, wmOperator *op)
}
if(v1==NULL || v2==NULL) {
BKE_report(op->reports, RPT_ERROR, "You have to select a string of connected vertices too");
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_CANCELLED;
}
@@ -926,16 +1044,16 @@ static int screw_mesh_exec(bContext *C, wmOperator *op)
if(spin_mesh(C, dvec, turns*steps, 360.0f*turns, 0)) {
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
else {
BKE_report(op->reports, RPT_ERROR, "No valid vertices are selected");
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_CANCELLED;
}
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
}
void MESH_OT_screw(wmOperatorType *ot)
@@ -1012,10 +1130,10 @@ static int delete_mesh(Object *obedit, wmOperator *op, int event)
int count;
char *str="Erase";
- if(event<1) return;
+ if(event<1) return OPERATOR_CANCELLED;
if (event != 7 && event != 5)
- em= EM_GetEditMesh((Mesh *)obedit->data);
+ em= BKE_mesh_get_editmesh((Mesh *)obedit->data);
if(event==10 ) {
str= "Erase Vertices";
@@ -1024,7 +1142,7 @@ static int delete_mesh(Object *obedit, wmOperator *op, int event)
erase_vertices(em, &em->verts);
EM_fgon_flags(em); // redo flags and indices for fgons
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
}
else if(event==7) {
if (!EDBM_CallOpf(bem, op, "dissolveverts verts=%hv",BM_SELECT))
@@ -1032,14 +1150,14 @@ static int delete_mesh(Object *obedit, wmOperator *op, int event)
}
else if(event==6) {
if(!EdgeLoopDelete(em, op)) {
- EM_EndEditMesh(obedit->data, em);
- return;
+ BKE_mesh_end_editmesh(obedit->data, em);
+ return OPERATOR_CANCELLED;
}
str= "Erase Edge Loop";
EM_fgon_flags(em); // redo flags and indices for fgons
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
}
else if(event==4) {
str= "Erase Edges & Faces";
@@ -1084,7 +1202,7 @@ static int delete_mesh(Object *obedit, wmOperator *op, int event)
}
EM_fgon_flags(em); // redo flags and indices for fgons
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
}
else if(event==1) {
str= "Erase Edges";
@@ -1131,14 +1249,14 @@ static int delete_mesh(Object *obedit, wmOperator *op, int event)
}
EM_fgon_flags(em); // redo flags and indices for fgons
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
}
else if(event==2) {
str="Erase Faces";
delfaceflag(em, SELECT);
EM_fgon_flags(em); // redo flags and indices for fgons
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
}
else if(event==3) {
str= "Erase All";
@@ -1148,7 +1266,7 @@ static int delete_mesh(Object *obedit, wmOperator *op, int event)
if(em->selected.first) BLI_freelistN(&(em->selected));
EM_fgon_flags(em); // redo flags and indices for fgons
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
}
else if(event==5) {
if (!EDBM_CallOpf(bem, op, "del geom=%hf context=%d",
@@ -1156,7 +1274,8 @@ static int delete_mesh(Object *obedit, wmOperator *op, int event)
return OPERATOR_CANCELLED;
str= "Erase Only Faces";
}
-
+
+ return OPERATOR_FINISHED;
// DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
}
@@ -2515,11 +2634,13 @@ void esubdivideflag(Object *obedit, EditMesh *em, int flag, float rad, int beaut
}
}
}
- sort[hold]->f &= ~SELECT;
- sort[hold]->f2 |= EDGENEW;
- length[hold] = -1;
- }
- }
+ if (hold > -1) {
+ sort[hold]->f &= ~SELECT;
+ sort[hold]->f2 |= EDGENEW;
+ length[hold] = -1;
+ }
+ }
+ }
// Beauty Long Edges
else {
@@ -2536,13 +2657,15 @@ void esubdivideflag(Object *obedit, EditMesh *em, int flag, float rad, int beaut
}
}
}
- sort[hold]->f &= ~SELECT;
- sort[hold]->f2 |= EDGENEW;
- length[hold] = -1;
- }
- }
+ if (hold > -1) {
+ sort[hold]->f &= ~SELECT;
+ sort[hold]->f2 |= EDGENEW;
+ length[hold] = -1;
+ }
+ }
+ }
}
- }
+ }
}
gh = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp);
@@ -3167,11 +3290,9 @@ void join_triangles(EditMesh *em)
if(v1 && v2 && v3 && v4){
/*test if simple island first. This mimics 2.42 behaviour and the tests are less restrictive.*/
if(efaa[0]->tmp.l == 1 && efaa[1]->tmp.l == 1){
- if( convex(v1->co, v2->co, v3->co, v4->co) ){
- eed->f1 |= T2QJOIN;
- efaa[0]->f1 = 1; //mark for join
- efaa[1]->f1 = 1; //mark for join
- }
+ eed->f1 |= T2QJOIN;
+ efaa[0]->f1 = 1; //mark for join
+ efaa[1]->f1 = 1; //mark for join
}
else{
@@ -3415,10 +3536,6 @@ static void edge_rotate(EditMesh *em, wmOperator *op, EditEdge *eed,int dir)
if(numshared > 1)
return;
- /* coplaner faces only please */
- if(Inpf(face[0]->n,face[1]->n) <= 0.000001)
- return;
-
/* we want to construct an array of vertex indicis in both faces, starting at
the last vertex of the edge being rotated.
- first we find the two vertices that lie on the rotating edge
@@ -3549,7 +3666,7 @@ static void edge_rotate(EditMesh *em, wmOperator *op, EditEdge *eed,int dir)
static int edge_rotate_selected(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
- EditMesh *em= EM_GetEditMesh((Mesh *)obedit->data);
+ EditMesh *em= BKE_mesh_get_editmesh((Mesh *)obedit->data);
int dir = RNA_int_get(op->ptr,"dir"); // dir == 2 when clockwise and ==1 for counter CW.
EditEdge *eed;
@@ -3588,7 +3705,7 @@ static int edge_rotate_selected(bContext *C, wmOperator *op)
else
{
BKE_report(op->reports, RPT_ERROR, "Select one edge or two adjacent faces");
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_CANCELLED;
}
}
@@ -3604,7 +3721,7 @@ static int edge_rotate_selected(bContext *C, wmOperator *op)
else
{
BKE_report(op->reports, RPT_ERROR, "Select one edge or two adjacent faces");
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_CANCELLED;
}
@@ -3616,7 +3733,7 @@ static int edge_rotate_selected(bContext *C, wmOperator *op)
// DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
@@ -3745,7 +3862,7 @@ useless:
GHash *vertgh;
SlideVert *tempsv;
- float perc = 0, percp = 0,vertdist; // XXX, projectMat[4][4], viewMat[4][4];
+ float perc = 0, percp = 0,vertdist; // XXX, projectMat[4][4];
float shiftlabda= 0.0f,len = 0.0f;
int i = 0,j, numsel, numadded=0, timesthrough = 0, vertsel=0, prop=1, cancel = 0,flip=0;
int wasshift = 0;
@@ -3765,7 +3882,7 @@ useless:
// initNumInput(&num);
-// view3d_get_object_project_mat(curarea, obedit, projectMat, viewMat);
+// view3d_get_object_project_mat(curarea, obedit, projectMat);
mvalo[0] = -1; mvalo[1] = -1;
numsel =0;
@@ -4672,11 +4789,11 @@ static int mesh_rip_invoke(bContext *C, wmOperator *op, wmEvent *event)
ARegion *ar= CTX_wm_region(C);
RegionView3D *rv3d= ar->regiondata;
Object *obedit= CTX_data_edit_object(C);
- EditMesh *em= EM_GetEditMesh((Mesh *)obedit->data);
+ EditMesh *em= BKE_mesh_get_editmesh((Mesh *)obedit->data);
EditVert *eve, *nextve;
EditEdge *eed, *seed= NULL;
EditFace *efa, *sefa= NULL;
- float projectMat[4][4], vec[3], dist, mindist, viewMat[4][4];
+ float projectMat[4][4], vec[3], dist, mindist;
short doit= 1, *mval= event->mval; // XXX ,propmode,prop;
@@ -4688,7 +4805,7 @@ static int mesh_rip_invoke(bContext *C, wmOperator *op, wmEvent *event)
/* select flush... vertices are important */
EM_selectmode_set(em);
- view3d_get_object_project_mat(rv3d, obedit, projectMat, viewMat);
+ view3d_get_object_project_mat(rv3d, obedit, projectMat);
/* find best face, exclude triangles and break on face select or faces with 2 edges select */
mindist= 1000000.0f;
@@ -4716,12 +4833,12 @@ static int mesh_rip_invoke(bContext *C, wmOperator *op, wmEvent *event)
if(efa) {
BKE_report(op->reports, RPT_ERROR, "Can't perform ripping with faces selected this way");
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_CANCELLED;
}
if(sefa==NULL) {
BKE_report(op->reports, RPT_ERROR, "No proper selection or faces included");
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_CANCELLED;
}
@@ -4786,7 +4903,7 @@ static int mesh_rip_invoke(bContext *C, wmOperator *op, wmEvent *event)
if(seed==NULL) { // never happens?
BKE_report(op->reports, RPT_ERROR, "No proper edge found to start");
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_CANCELLED;
}
@@ -4876,7 +4993,7 @@ static int mesh_rip_invoke(bContext *C, wmOperator *op, wmEvent *event)
// scene->prop_mode = propmode;
// XXX scene->proportional = prop;
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
#endif
return OPERATOR_FINISHED;
}
@@ -5818,7 +5935,7 @@ void pathselect(EditMesh *em, wmOperator *op)
static int region_to_loop(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
- EditMesh *em= EM_GetEditMesh((Mesh *)obedit->data);
+ EditMesh *em= BKE_mesh_get_editmesh((Mesh *)obedit->data);
EditEdge *eed;
EditFace *efa;
@@ -5851,7 +5968,7 @@ static int region_to_loop(bContext *C, wmOperator *op)
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
@@ -5996,7 +6113,7 @@ static int loop_bisect(EditMesh *em, Collection *edgecollection){
static int loop_to_region(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
- EditMesh *em= EM_GetEditMesh((Mesh *)obedit->data);
+ EditMesh *em= BKE_mesh_get_editmesh((Mesh *)obedit->data);
EditFace *efa;
@@ -6028,7 +6145,7 @@ static int loop_to_region(bContext *C, wmOperator *op)
// if (EM_texFaceCheck())
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
@@ -6053,7 +6170,7 @@ void MESH_OT_loop_to_region(wmOperatorType *ot)
static int mesh_rotate_uvs(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
- EditMesh *em= EM_GetEditMesh((Mesh *)obedit->data);
+ EditMesh *em= BKE_mesh_get_editmesh((Mesh *)obedit->data);
EditFace *efa;
short change = 0, ccw;
@@ -6063,7 +6180,7 @@ static int mesh_rotate_uvs(bContext *C, wmOperator *op)
if (!EM_texFaceCheck(em)) {
BKE_report(op->reports, RPT_ERROR, "mesh has no uv/image layers");
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_CANCELLED;
}
@@ -6120,14 +6237,14 @@ static int mesh_rotate_uvs(bContext *C, wmOperator *op)
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
}
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
static int mesh_mirror_uvs(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
- EditMesh *em= EM_GetEditMesh((Mesh *)obedit->data);
+ EditMesh *em= BKE_mesh_get_editmesh((Mesh *)obedit->data);
EditFace *efa;
short change = 0, altaxis;
@@ -6137,7 +6254,7 @@ static int mesh_mirror_uvs(bContext *C, wmOperator *op)
if (!EM_texFaceCheck(em)) {
BKE_report(op->reports, RPT_ERROR, "mesh has no uv/image layers");
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_CANCELLED;
}
@@ -6209,14 +6326,14 @@ static int mesh_mirror_uvs(bContext *C, wmOperator *op)
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
}
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
static int mesh_rotate_colors(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
- EditMesh *em= EM_GetEditMesh((Mesh *)obedit->data);
+ EditMesh *em= BKE_mesh_get_editmesh((Mesh *)obedit->data);
EditFace *efa;
short change = 0, ccw;
@@ -6225,7 +6342,7 @@ static int mesh_rotate_colors(bContext *C, wmOperator *op)
if (!EM_vertColorCheck(em)) {
BKE_report(op->reports, RPT_ERROR, "mesh has no color layers");
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_CANCELLED;
}
@@ -6265,7 +6382,7 @@ static int mesh_rotate_colors(bContext *C, wmOperator *op)
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
}
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
@@ -6273,7 +6390,7 @@ static int mesh_rotate_colors(bContext *C, wmOperator *op)
static int mesh_mirror_colors(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
- EditMesh *em= EM_GetEditMesh((Mesh *)obedit->data);
+ EditMesh *em= BKE_mesh_get_editmesh((Mesh *)obedit->data);
EditFace *efa;
short change = 0, altaxis;
@@ -6282,7 +6399,7 @@ static int mesh_mirror_colors(bContext *C, wmOperator *op)
if (!EM_vertColorCheck(em)) {
BKE_report(op->reports, RPT_ERROR, "Mesh has no color layers");
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_CANCELLED;
}
@@ -6321,15 +6438,15 @@ static int mesh_mirror_colors(bContext *C, wmOperator *op)
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
}
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
-void MESH_OT_rotate_uvs(wmOperatorType *ot)
+void MESH_OT_uvs_rotate(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Rotate UVs";
- ot->idname= "MESH_OT_rotate_uvs";
+ ot->idname= "MESH_OT_uvs_rotate";
/* api callbacks */
ot->exec= mesh_rotate_uvs;
@@ -6339,11 +6456,11 @@ void MESH_OT_rotate_uvs(wmOperatorType *ot)
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
}
-void MESH_OT_mirror_uvs(wmOperatorType *ot)
+void MESH_OT_uvs_mirror(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Mirror UVs";
- ot->idname= "MESH_OT_mirror_uvs";
+ ot->idname= "MESH_OT_uvs_mirror";
/* api callbacks */
ot->exec= mesh_mirror_uvs;
@@ -6353,11 +6470,11 @@ void MESH_OT_mirror_uvs(wmOperatorType *ot)
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
}
-void MESH_OT_rotate_colors(wmOperatorType *ot)
+void MESH_OT_colors_rotate(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Rotate Colors";
- ot->idname= "MESH_OT_rotate_colors";
+ ot->idname= "MESH_OT_colors_rotate";
/* api callbacks */
ot->exec= mesh_rotate_colors;
@@ -6367,11 +6484,11 @@ void MESH_OT_rotate_colors(wmOperatorType *ot)
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
}
-void MESH_OT_mirror_colors(wmOperatorType *ot)
+void MESH_OT_colors_mirror(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Mirror Colors";
- ot->idname= "MESH_OT_mirror_colors";
+ ot->idname= "MESH_OT_colors_mirror";
/* api callbacks */
ot->exec= mesh_mirror_colors;
@@ -6380,6 +6497,7 @@ void MESH_OT_mirror_colors(wmOperatorType *ot)
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
}
+
/* ************************************* */
/* note; the EM_selectmode_set() calls here illustrate how badly constructed it all is... from before the
@@ -6630,14 +6748,14 @@ static void fill_mesh(EditMesh *em)
static int fill_mesh_exec(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
- EditMesh *em= EM_GetEditMesh((Mesh *)obedit->data);
+ EditMesh *em= BKE_mesh_get_editmesh((Mesh *)obedit->data);
fill_mesh(em);
DAG_object_flush_update(CTX_data_scene(C), obedit, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
@@ -6659,13 +6777,13 @@ void MESH_OT_fill(wmOperatorType *ot)
static int beauty_fill_exec(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
- EditMesh *em= EM_GetEditMesh((Mesh *)obedit->data);
+ EditMesh *em= BKE_mesh_get_editmesh((Mesh *)obedit->data);
beauty_fill(em);
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
@@ -6683,7 +6801,7 @@ void MESH_OT_beauty_fill(wmOperatorType *ot)
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
}
-static int convert_quads_to_tris_exec(bContext *C, wmOperator *op)
+static int quads_convert_to_tris_exec(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
BMEditMesh *em= ((Mesh *)obedit->data)->edit_btmesh;
@@ -6697,41 +6815,41 @@ static int convert_quads_to_tris_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
-void MESH_OT_convert_quads_to_tris(wmOperatorType *ot)
+void MESH_OT_quads_convert_to_tris(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Quads to Tris";
- ot->idname= "MESH_OT_convert_quads_to_tris";
+ ot->idname= "MESH_OT_quads_convert_to_tris";
/* api callbacks */
- ot->exec= convert_quads_to_tris_exec;
+ ot->exec= quads_convert_to_tris_exec;
ot->poll= ED_operator_editmesh;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
}
-static int convert_tris_to_quads_exec(bContext *C, wmOperator *op)
+static int tris_convert_to_quads_exec(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
- EditMesh *em= EM_GetEditMesh((Mesh *)obedit->data);
+ EditMesh *em= BKE_mesh_get_editmesh((Mesh *)obedit->data);
join_triangles(em);
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
-void MESH_OT_convert_tris_to_quads(wmOperatorType *ot)
+void MESH_OT_tris_convert_to_quads(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Tris to Quads";
- ot->idname= "MESH_OT_convert_tris_to_quads";
+ ot->idname= "MESH_OT_tris_convert_to_quads";
/* api callbacks */
- ot->exec= convert_tris_to_quads_exec;
+ ot->exec= tris_convert_to_quads_exec;
ot->poll= ED_operator_editmesh;
/* flags */
@@ -6741,13 +6859,13 @@ void MESH_OT_convert_tris_to_quads(wmOperatorType *ot)
static int edge_flip_exec(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
- EditMesh *em= EM_GetEditMesh((Mesh *)obedit->data);
+ EditMesh *em= BKE_mesh_get_editmesh((Mesh *)obedit->data);
edge_flip(em);
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
@@ -6768,13 +6886,13 @@ void MESH_OT_edge_flip(wmOperatorType *ot)
static int mesh_faces_shade_smooth_exec(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
- EditMesh *em= EM_GetEditMesh((Mesh *)obedit->data);
+ EditMesh *em= BKE_mesh_get_editmesh((Mesh *)obedit->data);
mesh_set_smooth_faces(em,1);
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
@@ -6795,13 +6913,13 @@ void MESH_OT_faces_shade_smooth(wmOperatorType *ot)
static int mesh_faces_shade_solid_exec(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
- EditMesh *em= EM_GetEditMesh((Mesh *)obedit->data);
+ EditMesh *em= BKE_mesh_get_editmesh((Mesh *)obedit->data);
mesh_set_smooth_faces(em,0);
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
diff --git a/source/blender/editors/mesh/mesh_intern.h b/source/blender/editors/mesh/mesh_intern.h
index 4f58ee5fea0..7e4d2fd6f06 100644
--- a/source/blender/editors/mesh/mesh_intern.h
+++ b/source/blender/editors/mesh/mesh_intern.h
@@ -111,18 +111,18 @@ void em_setup_viewcontext(struct bContext *C, struct ViewContext *vc);
void MESH_OT_separate(struct wmOperatorType *ot);
/* ******************* editmesh_add.c */
-void MESH_OT_add_primitive_plane(struct wmOperatorType *ot);
-void MESH_OT_add_primitive_cube(struct wmOperatorType *ot);
-void MESH_OT_add_primitive_circle(struct wmOperatorType *ot);
-void MESH_OT_add_primitive_cylinder(struct wmOperatorType *ot);
-void MESH_OT_add_primitive_tube(struct wmOperatorType *ot);
-void MESH_OT_add_primitive_cone(struct wmOperatorType *ot);
-void MESH_OT_add_primitive_grid(struct wmOperatorType *ot);
-void MESH_OT_add_primitive_monkey(struct wmOperatorType *ot);
-void MESH_OT_add_primitive_uv_sphere(struct wmOperatorType *ot);
-void MESH_OT_add_primitive_ico_sphere(struct wmOperatorType *ot);
+void MESH_OT_primitive_plane_add(struct wmOperatorType *ot);
+void MESH_OT_primitive_cube_add(struct wmOperatorType *ot);
+void MESH_OT_primitive_circle_add(struct wmOperatorType *ot);
+void MESH_OT_primitive_cylinder_add(struct wmOperatorType *ot);
+void MESH_OT_primitive_tube_add(struct wmOperatorType *ot);
+void MESH_OT_primitive_cone_add(struct wmOperatorType *ot);
+void MESH_OT_primitive_grid_add(struct wmOperatorType *ot);
+void MESH_OT_primitive_monkey_add(struct wmOperatorType *ot);
+void MESH_OT_primitive_uv_sphere_add(struct wmOperatorType *ot);
+void MESH_OT_primitive_ico_sphere_add(struct wmOperatorType *ot);
void MESH_OT_dupli_extrude_cursor(struct wmOperatorType *ot);
-void MESH_OT_add_edge_face(struct wmOperatorType *ot);
+void MESH_OT_edge_face_add(struct wmOperatorType *ot);
void MESH_OT_fgon_make(struct wmOperatorType *ot);
void MESH_OT_fgon_clear(struct wmOperatorType *ot);
@@ -183,7 +183,7 @@ extern struct EditFace *EM_face_from_faces(EditMesh *em, struct EditFace *efa1,
void MESH_OT_knife_cut(struct wmOperatorType *ot);
/* ******************* editmesh_mods.c */
-void MESH_OT_select_loop(struct wmOperatorType *ot);
+void MESH_OT_loop_select(struct wmOperatorType *ot);
void MESH_OT_select_all_toggle(struct wmOperatorType *ot);
void MESH_OT_bmesh_test(struct wmOperatorType *ot);
void MESH_OT_select_more(struct wmOperatorType *ot);
@@ -194,20 +194,20 @@ void MESH_OT_select_linked(struct wmOperatorType *ot);
void MESH_OT_select_linked_pick(struct wmOperatorType *ot);
void MESH_OT_hide(struct wmOperatorType *ot);
void MESH_OT_reveal(struct wmOperatorType *ot);
-void MESH_OT_consistant_normals(struct wmOperatorType *ot);
-void MESH_OT_select_linked_flat_faces(struct wmOperatorType *ot);
-void MESH_OT_select_sharp_edges(struct wmOperatorType *ot);
-void MESH_OT_select_path_shortest(struct wmOperatorType *ot);
-void MESH_OT_select_vertex_similar(struct wmOperatorType *ot);
-void MESH_OT_select_edge_similar(struct wmOperatorType *ot);
-void MESH_OT_select_face_similar(struct wmOperatorType *ot);
+void MESH_OT_normals_make_consistent(struct wmOperatorType *ot);
+void MESH_OT_faces_select_linked_flat(struct wmOperatorType *ot);
+void MESH_OT_edges_select_sharp(struct wmOperatorType *ot);
+void MESH_OT_select_shortest_path(struct wmOperatorType *ot);
+void MESH_OT_vertices_select_similar(struct wmOperatorType *ot);
+void MESH_OT_edges_select_similar(struct wmOperatorType *ot);
+void MESH_OT_faces_select_similar(struct wmOperatorType *ot);
void MESH_OT_select_random(struct wmOperatorType *ot);
-void MESH_OT_vertices_to_sphere(struct wmOperatorType *ot);
+void MESH_OT_vertices_transform_to_sphere(struct wmOperatorType *ot);
void MESH_OT_selection_type(struct wmOperatorType *ot);
-void MESH_OT_select_loop_multi(struct wmOperatorType *ot);
+void MESH_OT_loop_multi_select(struct wmOperatorType *ot);
void MESH_OT_mark_seam(struct wmOperatorType *ot);
void MESH_OT_mark_sharp(struct wmOperatorType *ot);
-void MESH_OT_smooth_vertex(struct wmOperatorType *ot);
+void MESH_OT_vertices_smooth(struct wmOperatorType *ot);
void MESH_OT_flip_editnormals(struct wmOperatorType *ot);
extern EditEdge *findnearestedge(struct ViewContext *vc, int *dist);
@@ -254,8 +254,8 @@ void MESH_OT_screw(struct wmOperatorType *ot);
void MESH_OT_fill(struct wmOperatorType *ot);
void MESH_OT_beauty_fill(struct wmOperatorType *ot);
-void MESH_OT_convert_quads_to_tris(struct wmOperatorType *ot);
-void MESH_OT_convert_tris_to_quads(struct wmOperatorType *ot);
+void MESH_OT_quads_convert_to_tris(struct wmOperatorType *ot);
+void MESH_OT_tris_convert_to_quads(struct wmOperatorType *ot);
void MESH_OT_edge_flip(struct wmOperatorType *ot);
void MESH_OT_faces_shade_smooth(struct wmOperatorType *ot);
void MESH_OT_faces_shade_solid(struct wmOperatorType *ot);
@@ -265,10 +265,10 @@ void MESH_OT_edge_rotate(struct wmOperatorType *ot);
void MESH_OT_loop_to_region(struct wmOperatorType *ot);
void MESH_OT_region_to_loop(struct wmOperatorType *ot);
-void MESH_OT_rotate_uvs(struct wmOperatorType *ot);
-void MESH_OT_mirror_uvs(struct wmOperatorType *ot);
-void MESH_OT_rotate_colors(struct wmOperatorType *ot);
-void MESH_OT_mirror_colors(struct wmOperatorType *ot);
+void MESH_OT_uvs_rotate(struct wmOperatorType *ot);
+void MESH_OT_uvs_mirror(struct wmOperatorType *ot);
+void MESH_OT_colors_rotate(struct wmOperatorType *ot);
+void MESH_OT_colors_mirror(struct wmOperatorType *ot);
void MESH_OT_delete(struct wmOperatorType *ot);
void MESH_OT_rip(struct wmOperatorType *ot);
diff --git a/source/blender/editors/mesh/mesh_ops.c b/source/blender/editors/mesh/mesh_ops.c
index f5e3f12bc6d..e61deb1d554 100644
--- a/source/blender/editors/mesh/mesh_ops.c
+++ b/source/blender/editors/mesh/mesh_ops.c
@@ -45,6 +45,7 @@
#include "BKE_context.h"
#include "BKE_global.h"
+#include "BKE_mesh.h"
#include "BKE_utildefines.h"
#include "BKE_mesh.h"
@@ -66,11 +67,11 @@
static int mesh_add_duplicate_exec(bContext *C, wmOperator *op)
{
Object *ob= CTX_data_edit_object(C);
- EditMesh *em= EM_GetEditMesh(ob->data);
+ EditMesh *em= BKE_mesh_get_editmesh(ob->data);
adduplicateflag(em, SELECT);
- EM_EndEditMesh(ob->data, em);
+ BKE_mesh_end_editmesh(ob->data, em);
return OPERATOR_FINISHED;
}
@@ -119,24 +120,24 @@ void ED_operatortypes_mesh(void)
WM_operatortype_append(MESH_OT_selection_type);
WM_operatortype_append(MESH_OT_hide);
WM_operatortype_append(MESH_OT_reveal);
- WM_operatortype_append(MESH_OT_consistant_normals);
+ WM_operatortype_append(MESH_OT_normals_make_consistent);
WM_operatortype_append(MESH_OT_subdivide);
WM_operatortype_append(MESH_OT_subdivide_multi);
WM_operatortype_append(MESH_OT_subdivide_multi_fractal);
WM_operatortype_append(MESH_OT_subdivide_smooth);
WM_operatortype_append(MESH_OT_subdivs);
- WM_operatortype_append(MESH_OT_select_linked_flat_faces);
- WM_operatortype_append(MESH_OT_select_sharp_edges);
- WM_operatortype_append(MESH_OT_add_primitive_plane);
- WM_operatortype_append(MESH_OT_add_primitive_cube);
- WM_operatortype_append(MESH_OT_add_primitive_circle);
- WM_operatortype_append(MESH_OT_add_primitive_cylinder);
- WM_operatortype_append(MESH_OT_add_primitive_tube);
- WM_operatortype_append(MESH_OT_add_primitive_cone);
- WM_operatortype_append(MESH_OT_add_primitive_grid);
- WM_operatortype_append(MESH_OT_add_primitive_monkey);
- WM_operatortype_append(MESH_OT_add_primitive_uv_sphere);
- WM_operatortype_append(MESH_OT_add_primitive_ico_sphere);
+ WM_operatortype_append(MESH_OT_faces_select_linked_flat);
+ WM_operatortype_append(MESH_OT_edges_select_sharp);
+ WM_operatortype_append(MESH_OT_primitive_plane_add);
+ WM_operatortype_append(MESH_OT_primitive_cube_add);
+ WM_operatortype_append(MESH_OT_primitive_circle_add);
+ WM_operatortype_append(MESH_OT_primitive_cylinder_add);
+ WM_operatortype_append(MESH_OT_primitive_tube_add);
+ WM_operatortype_append(MESH_OT_primitive_cone_add);
+ WM_operatortype_append(MESH_OT_primitive_grid_add);
+ WM_operatortype_append(MESH_OT_primitive_monkey_add);
+ WM_operatortype_append(MESH_OT_primitive_uv_sphere_add);
+ WM_operatortype_append(MESH_OT_primitive_ico_sphere_add);
WM_operatortype_append(MESH_OT_fgon_clear);
WM_operatortype_append(MESH_OT_fgon_make);
WM_operatortype_append(MESH_OT_duplicate_add);
@@ -145,22 +146,22 @@ void ED_operatortypes_mesh(void)
WM_operatortype_append(MESH_OT_spin);
WM_operatortype_append(MESH_OT_screw);
- WM_operatortype_append(MESH_OT_vertices_to_sphere);
+ WM_operatortype_append(MESH_OT_vertices_transform_to_sphere);
WM_operatortype_append(MESH_OT_split);
WM_operatortype_append(MESH_OT_extrude_repeat);
WM_operatortype_append(MESH_OT_edge_rotate);
WM_operatortype_append(MESH_OT_loop_to_region);
WM_operatortype_append(MESH_OT_region_to_loop);
- WM_operatortype_append(MESH_OT_rotate_uvs);
- WM_operatortype_append(MESH_OT_mirror_uvs);
- WM_operatortype_append(MESH_OT_rotate_colors);
- WM_operatortype_append(MESH_OT_mirror_colors);
+ WM_operatortype_append(MESH_OT_uvs_rotate);
+ WM_operatortype_append(MESH_OT_uvs_mirror);
+ WM_operatortype_append(MESH_OT_colors_rotate);
+ WM_operatortype_append(MESH_OT_colors_mirror);
WM_operatortype_append(MESH_OT_fill);
WM_operatortype_append(MESH_OT_beauty_fill);
- WM_operatortype_append(MESH_OT_convert_quads_to_tris);
- WM_operatortype_append(MESH_OT_convert_tris_to_quads);
+ WM_operatortype_append(MESH_OT_quads_convert_to_tris);
+ WM_operatortype_append(MESH_OT_tris_convert_to_quads);
WM_operatortype_append(MESH_OT_edge_flip);
WM_operatortype_append(MESH_OT_faces_shade_smooth);
WM_operatortype_append(MESH_OT_faces_shade_solid);
@@ -169,16 +170,16 @@ void ED_operatortypes_mesh(void)
WM_operatortype_append(MESH_OT_separate);
WM_operatortype_append(MESH_OT_dupli_extrude_cursor);
- WM_operatortype_append(MESH_OT_select_loop);
- WM_operatortype_append(MESH_OT_add_edge_face);
- WM_operatortype_append(MESH_OT_select_path_shortest);
- WM_operatortype_append(MESH_OT_select_vertex_similar);
- WM_operatortype_append(MESH_OT_select_edge_similar);
- WM_operatortype_append(MESH_OT_select_face_similar);
- WM_operatortype_append(MESH_OT_select_loop_multi);
+ WM_operatortype_append(MESH_OT_loop_select);
+ WM_operatortype_append(MESH_OT_edge_face_add);
+ WM_operatortype_append(MESH_OT_select_shortest_path);
+ WM_operatortype_append(MESH_OT_vertices_select_similar);
+ WM_operatortype_append(MESH_OT_edges_select_similar);
+ WM_operatortype_append(MESH_OT_faces_select_similar);
+ WM_operatortype_append(MESH_OT_loop_multi_select);
WM_operatortype_append(MESH_OT_mark_seam);
WM_operatortype_append(MESH_OT_mark_sharp);
- WM_operatortype_append(MESH_OT_smooth_vertex);
+ WM_operatortype_append(MESH_OT_vertices_smooth);
WM_operatortype_append(MESH_OT_flip_editnormals);
WM_operatortype_append(MESH_OT_knife_cut);
@@ -195,16 +196,16 @@ void ED_keymap_mesh(wmWindowManager *wm)
/* selecting */
/* standard mouse selection goes via space_view3d */
- WM_keymap_add_item(keymap, "MESH_OT_select_loop", SELECTMOUSE, KM_PRESS, KM_ALT, 0);
- kmi= WM_keymap_add_item(keymap, "MESH_OT_select_loop", SELECTMOUSE, KM_PRESS, KM_SHIFT|KM_ALT, 0);
+ WM_keymap_add_item(keymap, "MESH_OT_loop_select", SELECTMOUSE, KM_PRESS, KM_ALT, 0);
+ kmi= WM_keymap_add_item(keymap, "MESH_OT_loop_select", SELECTMOUSE, KM_PRESS, KM_SHIFT|KM_ALT, 0);
RNA_boolean_set(kmi->ptr, "extend", 1);
- kmi= WM_keymap_add_item(keymap, "MESH_OT_select_loop", SELECTMOUSE, KM_PRESS, KM_ALT|KM_CTRL, 0);
+ kmi= WM_keymap_add_item(keymap, "MESH_OT_loop_select", SELECTMOUSE, KM_PRESS, KM_ALT|KM_CTRL, 0);
RNA_boolean_set(kmi->ptr, "ring", 1);
- kmi= WM_keymap_add_item(keymap, "MESH_OT_select_loop", SELECTMOUSE, KM_PRESS, KM_SHIFT|KM_ALT|KM_CTRL, 0);
+ kmi= WM_keymap_add_item(keymap, "MESH_OT_loop_select", SELECTMOUSE, KM_PRESS, KM_SHIFT|KM_ALT|KM_CTRL, 0);
RNA_boolean_set(kmi->ptr, "extend", 1);
RNA_boolean_set(kmi->ptr, "ring", 1);
- WM_keymap_add_item(keymap, "MESH_OT_select_path_shortest", SELECTMOUSE, KM_PRESS, KM_CTRL, 0);
+ WM_keymap_add_item(keymap, "MESH_OT_select_shortest_path", SELECTMOUSE, KM_PRESS, KM_CTRL, 0);
WM_keymap_add_item(keymap, "MESH_OT_select_all_toggle", AKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "MESH_OT_select_more", PADPLUSKEY, KM_PRESS, KM_CTRL, 0);
@@ -216,11 +217,11 @@ void ED_keymap_mesh(wmWindowManager *wm)
WM_keymap_add_item(keymap, "MESH_OT_select_linked_pick", LKEY, KM_PRESS, 0, 0);
RNA_boolean_set(WM_keymap_add_item(keymap, "MESH_OT_select_linked_pick", LKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "deselect", 1);
- RNA_float_set(WM_keymap_add_item(keymap, "MESH_OT_select_linked_flat_faces", FKEY, KM_PRESS, (KM_CTRL|KM_SHIFT|KM_ALT), 0)->ptr,"sharpness",135.0);
- RNA_float_set(WM_keymap_add_item(keymap, "MESH_OT_select_sharp_edges", SKEY, KM_PRESS, (KM_CTRL|KM_SHIFT|KM_ALT), 0)->ptr,"sharpness",135.0);
+ RNA_float_set(WM_keymap_add_item(keymap, "MESH_OT_faces_select_linked_flat", FKEY, KM_PRESS, (KM_CTRL|KM_SHIFT|KM_ALT), 0)->ptr,"sharpness",135.0);
+ RNA_float_set(WM_keymap_add_item(keymap, "MESH_OT_edges_select_sharp", SKEY, KM_PRESS, (KM_CTRL|KM_SHIFT|KM_ALT), 0)->ptr,"sharpness",135.0);
WM_keymap_add_item(keymap, "MESH_OT_select_random", SPACEKEY, KM_PRESS, 0, 0);
- WM_keymap_add_item(keymap, "MESH_OT_vertices_to_sphere", SKEY, KM_PRESS, KM_CTRL|KM_SHIFT , 0);
+ WM_keymap_add_item(keymap, "MESH_OT_vertices_transform_to_sphere", SKEY, KM_PRESS, KM_CTRL|KM_SHIFT , 0);
WM_keymap_add_item(keymap, "MESH_OT_mark_seam", ONEKEY, KM_PRESS, KM_CTRL , 0);
RNA_boolean_set(WM_keymap_add_item(keymap, "MESH_OT_mark_seam", ONEKEY, KM_PRESS, KM_ALT , 0)->ptr,"clear",1);
@@ -229,9 +230,9 @@ void ED_keymap_mesh(wmWindowManager *wm)
RNA_boolean_set(WM_keymap_add_item(keymap, "MESH_OT_mark_sharp", TWOKEY, KM_PRESS, KM_ALT , 0)->ptr,"set",1);
/* temp hotkeys! */
- WM_keymap_add_item(keymap, "MESH_OT_select_vertex_similar", GKEY, KM_PRESS, KM_SHIFT, 0);
- WM_keymap_add_item(keymap, "MESH_OT_select_edge_similar", GKEY, KM_PRESS, KM_SHIFT2|KM_CTRL, 0);
- WM_keymap_add_item(keymap, "MESH_OT_select_face_similar", GKEY, KM_PRESS, KM_SHIFT|KM_CTRL2, 0);
+ WM_keymap_add_item(keymap, "MESH_OT_vertices_select_similar", GKEY, KM_PRESS, KM_SHIFT, 0);
+ WM_keymap_add_item(keymap, "MESH_OT_edges_select_similar", GKEY, KM_PRESS, KM_SHIFT2|KM_CTRL, 0);
+ WM_keymap_add_item(keymap, "MESH_OT_faces_select_similar", GKEY, KM_PRESS, KM_SHIFT|KM_CTRL2, 0);
/* selection mode */
WM_keymap_add_item(keymap, "MESH_OT_selection_type", TABKEY, KM_PRESS, KM_CTRL, 0);
@@ -242,9 +243,9 @@ void ED_keymap_mesh(wmWindowManager *wm)
WM_keymap_add_item(keymap, "MESH_OT_reveal", HKEY, KM_PRESS, KM_ALT, 0);
/* tools */
- WM_keymap_add_item(keymap, "MESH_OT_consistant_normals", NKEY, KM_PRESS, KM_CTRL, 0);
- RNA_boolean_set(WM_keymap_add_item(keymap, "MESH_OT_consistant_normals", NKEY, KM_PRESS, KM_SHIFT|KM_CTRL, 0)->ptr, "inside", 1);
- WM_keymap_add_item(keymap, "MESH_OT_smooth_vertex", THREEKEY, KM_PRESS, KM_CTRL , 0);
+ WM_keymap_add_item(keymap, "MESH_OT_normals_make_consistent", NKEY, KM_PRESS, KM_CTRL, 0);
+ RNA_boolean_set(WM_keymap_add_item(keymap, "MESH_OT_normals_make_consistent", NKEY, KM_PRESS, KM_SHIFT|KM_CTRL, 0)->ptr, "inside", 1);
+ WM_keymap_add_item(keymap, "MESH_OT_vertices_smooth", THREEKEY, KM_PRESS, KM_CTRL , 0);
WM_keymap_add_item(keymap, "MESH_OT_flip_editnormals", THREEKEY, KM_PRESS, KM_ALT , 0);
WM_keymap_add_item(keymap, "MESH_OT_subdivs", WKEY, KM_PRESS, 0, 0); // this is the menu
@@ -260,8 +261,8 @@ void ED_keymap_mesh(wmWindowManager *wm)
WM_keymap_add_item(keymap, "VIEW3D_OT_editmesh_face_toolbox", FKEY, KM_PRESS, KM_CTRL, 0); /* operators below are in this toolbox */
WM_keymap_add_item(keymap, "MESH_OT_fill", FKEY, KM_PRESS, KM_SHIFT, 0);
WM_keymap_add_item(keymap, "MESH_OT_beauty_fill", FKEY, KM_PRESS, KM_ALT, 0);
- WM_keymap_add_item(keymap, "MESH_OT_convert_quads_to_tris", TKEY, KM_PRESS, KM_CTRL, 0);
- WM_keymap_add_item(keymap, "MESH_OT_convert_tris_to_quads", JKEY, KM_PRESS, KM_ALT, 0);
+ WM_keymap_add_item(keymap, "MESH_OT_quads_convert_to_tris", TKEY, KM_PRESS, KM_CTRL, 0);
+ WM_keymap_add_item(keymap, "MESH_OT_tris_convert_to_quads", JKEY, KM_PRESS, KM_ALT, 0);
WM_keymap_add_item(keymap, "MESH_OT_split", FOURKEY, KM_PRESS, KM_CTRL, 0);
WM_keymap_add_item(keymap, "MESH_OT_extrude_repeat", FOURKEY, KM_PRESS, KM_ALT, 0);
@@ -270,15 +271,15 @@ void ED_keymap_mesh(wmWindowManager *wm)
WM_keymap_add_item(keymap, "MESH_OT_loop_to_region",SIXKEY, KM_PRESS, KM_CTRL, 0);
WM_keymap_add_item(keymap, "MESH_OT_region_to_loop",SIXKEY, KM_PRESS, KM_ALT, 0);
- WM_keymap_add_item(keymap, "MESH_OT_rotate_uvs",SEVENKEY, KM_PRESS, KM_CTRL, 0);
- WM_keymap_add_item(keymap, "MESH_OT_mirror_uvs",SEVENKEY, KM_PRESS, KM_ALT, 0);
- WM_keymap_add_item(keymap, "MESH_OT_rotate_colors",EIGHTKEY, KM_PRESS, KM_CTRL, 0);
- WM_keymap_add_item(keymap, "MESH_OT_mirror_colors",EIGHTKEY, KM_PRESS, KM_ALT, 0);
+ WM_keymap_add_item(keymap, "MESH_OT_uvs_rotate",SEVENKEY, KM_PRESS, KM_CTRL, 0);
+ WM_keymap_add_item(keymap, "MESH_OT_uvs_mirror",SEVENKEY, KM_PRESS, KM_ALT, 0);
+ WM_keymap_add_item(keymap, "MESH_OT_colors_rotate",EIGHTKEY, KM_PRESS, KM_CTRL, 0);
+ WM_keymap_add_item(keymap, "MESH_OT_colors_mirror",EIGHTKEY, KM_PRESS, KM_ALT, 0);
WM_keymap_add_item(keymap, "MESH_OT_rip",VKEY, KM_PRESS, 0, 0);
/* add/remove */
- WM_keymap_add_item(keymap, "MESH_OT_add_edge_face", FKEY, KM_PRESS, 0, 0);
+ WM_keymap_add_item(keymap, "MESH_OT_edge_face_add", FKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "MESH_OT_duplicate_add", DKEY, KM_PRESS, KM_SHIFT, 0);
WM_keymap_add_item(keymap, "OBJECT_OT_mesh_add", AKEY, KM_PRESS, KM_SHIFT, 0);
WM_keymap_add_item(keymap, "MESH_OT_separate", PKEY, KM_PRESS, KM_SHIFT, 0);
diff --git a/source/blender/editors/object/Makefile b/source/blender/editors/object/Makefile
index 9011f566bc6..c0312023bfd 100644
--- a/source/blender/editors/object/Makefile
+++ b/source/blender/editors/object/Makefile
@@ -37,7 +37,6 @@ CFLAGS += $(LEVEL_1_C_WARNINGS)
CPPFLAGS += -I$(OPENGL_HEADERS)
-CPPFLAGS += -I$(NAN_BMFONT)/include
CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include
CPPFLAGS += -I../../windowmanager
diff --git a/source/blender/editors/object/SConscript b/source/blender/editors/object/SConscript
index 6af1713348b..0b7a4e41192 100644
--- a/source/blender/editors/object/SConscript
+++ b/source/blender/editors/object/SConscript
@@ -5,7 +5,7 @@ sources = env.Glob('*.c')
incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../imbuf'
incs += ' ../../windowmanager #/intern/guardedalloc'
-incs += ' #/intern/guardedalloc #intern/bmfont'
+incs += ' #/intern/guardedalloc'
incs += ' ../../makesrna ../../python ../../bmesh'
defs = []
diff --git a/source/blender/editors/object/editconstraint.c b/source/blender/editors/object/editconstraint.c
index c8d8ece30dc..d0e487f98c7 100644
--- a/source/blender/editors/object/editconstraint.c
+++ b/source/blender/editors/object/editconstraint.c
@@ -379,6 +379,8 @@ void add_constraint (Scene *scene, View3D *v3d, short only_IK)
nr= pupmenu("Add Constraint to Active Bone%t|Child Of%x19|Transformation%x20|%l|Copy Location%x1|Copy Rotation%x2|Copy Scale%x8|%l|Limit Location%x13|Limit Rotation%x14|Limit Scale%x15|Limit Distance%x21|%l|Track To%x3|Floor%x4|Locked Track%x5|Stretch To%x7|%l|Action%x16|Script%x18");
else if ((obsel) && (obsel->type==OB_CURVE))
nr= pupmenu("Add Constraint to Active Object%t|Child Of%x19|Transformation%x20|%l|Copy Location%x1|Copy Rotation%x2|Copy Scale%x8|%l|Limit Location%x13|Limit Rotation%x14|Limit Scale%x15|Limit Distance%x21|%l|Track To%x3|Floor%x4|Locked Track%x5|Follow Path%x6|Clamp To%x17|Stretch To%x7|%l|Action%x16|Script%x18");
+ else if ((obsel) && (obsel->type==OB_MESH))
+ nr= pupmenu("Add Constraint to Active Object%t|Child Of%x19|Transformation%x20|%l|Copy Location%x1|Copy Rotation%x2|Copy Scale%x8|%l|Limit Location%x13|Limit Rotation%x14|Limit Scale%x15|Limit Distance%x21|%l|Track To%x3|Floor%x4|Locked Track%x5|Shrinkwrap%x22|Stretch To%x7|%l|Action%x16|Script%x18");
else if (obsel)
nr= pupmenu("Add Constraint to Active Object%t|Child Of%x19|Transformation%x20|%l|Copy Location%x1|Copy Rotation%x2|Copy Scale%x8|%l|Limit Location%x13|Limit Rotation%x14|Limit Scale%x15|Limit Distance%x21|%l|Track To%x3|Floor%x4|Locked Track%x5|Stretch To%x7|%l|Action%x16|Script%x18");
else
@@ -387,6 +389,8 @@ void add_constraint (Scene *scene, View3D *v3d, short only_IK)
else {
if ((obsel) && (obsel->type==OB_CURVE))
nr= pupmenu("Add Constraint to Active Object%t|Child Of%x19|Transformation%x20|%l|Copy Location%x1|Copy Rotation%x2|Copy Scale%x8|%l|Limit Location%x13|Limit Rotation%x14|Limit Scale%x15|Limit Distance%x21|%l|Track To%x3|Floor%x4|Locked Track%x5|Follow Path%x6|Clamp To%x17|%l|Action%x16|Script%x18");
+ else if ((obsel) && (obsel->type==OB_MESH))
+ nr= pupmenu("Add Constraint to Active Object%t|Child Of%x19|Transformation%x20|%l|Copy Location%x1|Copy Rotation%x2|Copy Scale%x8|%l|Limit Location%x13|Limit Rotation%x14|Limit Scale%x15|Limit Distance%x21|%l|Track To%x3|Floor%x4|Locked Track%x5|Shrinkwrap%x22|%l|Action%x16|Script%x18");
else if (obsel)
nr= pupmenu("Add Constraint to Active Object%t|Child Of%x19|Transformation%x20|%l|Copy Location%x1|Copy Rotation%x2|Copy Scale%x8|%l|Limit Location%x13|Limit Rotation%x14|Limit Scale%x15|Limit Distance%x21|%l|Track To%x3|Floor%x4|Locked Track%x5|%l|Action%x16|Script%x18");
else
@@ -489,6 +493,7 @@ void add_constraint (Scene *scene, View3D *v3d, short only_IK)
}
else if (nr==20) con = add_new_constraint(CONSTRAINT_TYPE_TRANSFORM);
else if (nr==21) con = add_new_constraint(CONSTRAINT_TYPE_DISTLIMIT);
+ else if (nr==22) con = add_new_constraint(CONSTRAINT_TYPE_SHRINKWRAP);
if (con==NULL) return; /* paranoia */
diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c
index 48bc3750f61..99314cf55b2 100644
--- a/source/blender/editors/object/object_edit.c
+++ b/source/blender/editors/object/object_edit.c
@@ -121,8 +121,6 @@
#include "ED_util.h"
#include "ED_view3d.h"
-#include "BMF_Api.h"
-
#include "BIF_transform.h"
#include "UI_interface.h"
@@ -365,31 +363,31 @@ static int object_add_mesh_exec(bContext *C, wmOperator *op)
switch(RNA_enum_get(op->ptr, "type")) {
case 0:
- WM_operator_name_call(C, "MESH_OT_add_primitive_plane", WM_OP_INVOKE_REGION_WIN, NULL);
+ WM_operator_name_call(C, "MESH_OT_primitive_plane_add", WM_OP_INVOKE_REGION_WIN, NULL);
break;
case 1:
- WM_operator_name_call(C, "MESH_OT_add_primitive_cube", WM_OP_INVOKE_REGION_WIN, NULL);
+ WM_operator_name_call(C, "MESH_OT_primitive_cube_add", WM_OP_INVOKE_REGION_WIN, NULL);
break;
case 2:
- WM_operator_name_call(C, "MESH_OT_add_primitive_circle", WM_OP_INVOKE_REGION_WIN, NULL);
+ WM_operator_name_call(C, "MESH_OT_primitive_circle_add", WM_OP_INVOKE_REGION_WIN, NULL);
break;
case 3:
- WM_operator_name_call(C, "MESH_OT_add_primitive_uv_sphere", WM_OP_INVOKE_REGION_WIN, NULL);
+ WM_operator_name_call(C, "MESH_OT_primitive_uv_sphere_add", WM_OP_INVOKE_REGION_WIN, NULL);
break;
case 4:
- WM_operator_name_call(C, "MESH_OT_add_primitive_ico_sphere", WM_OP_INVOKE_REGION_WIN, NULL);
+ WM_operator_name_call(C, "MESH_OT_primitive_ico_sphere_add", WM_OP_INVOKE_REGION_WIN, NULL);
break;
case 5:
- WM_operator_name_call(C, "MESH_OT_add_primitive_cylinder", WM_OP_INVOKE_REGION_WIN, NULL);
+ WM_operator_name_call(C, "MESH_OT_primitive_cylinder_add", WM_OP_INVOKE_REGION_WIN, NULL);
break;
case 6:
- WM_operator_name_call(C, "MESH_OT_add_primitive_cone", WM_OP_INVOKE_REGION_WIN, NULL);
+ WM_operator_name_call(C, "MESH_OT_primitive_cone_add", WM_OP_INVOKE_REGION_WIN, NULL);
break;
case 7:
- WM_operator_name_call(C, "MESH_OT_add_primitive_grid", WM_OP_INVOKE_REGION_WIN, NULL);
+ WM_operator_name_call(C, "MESH_OT_primitive_grid_add", WM_OP_INVOKE_REGION_WIN, NULL);
break;
case 8:
- WM_operator_name_call(C, "MESH_OT_add_primitive_monkey", WM_OP_INVOKE_REGION_WIN, NULL);
+ WM_operator_name_call(C, "MESH_OT_primitive_monkey_add", WM_OP_INVOKE_REGION_WIN, NULL);
break;
}
/* userdef */
@@ -406,7 +404,7 @@ static int object_add_mesh_exec(bContext *C, wmOperator *op)
void OBJECT_OT_mesh_add(wmOperatorType *ot)
{
/* identifiers */
- ot->name= "Add Mesh";
+ ot->name= "Mesh";
ot->description = "Add a mesh object to the scene.";
ot->idname= "OBJECT_OT_mesh_add";
@@ -463,14 +461,16 @@ static int object_add_curve_exec(bContext *C, wmOperator *op)
static int object_add_curve_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
Object *obedit= CTX_data_edit_object(C);
- uiMenuItem *head;
+ uiPopupMenu *pup;
+ uiLayout *layout;
- head= uiPupMenuBegin(op->type->name, 0);
+ pup= uiPupMenuBegin(C, op->type->name, 0);
+ layout= uiPupMenuLayout(pup);
if(!obedit || obedit->type == OB_CURVE)
- uiMenuItemsEnumO(head, op->type->idname, "type");
+ uiItemsEnumO(layout, op->type->idname, "type");
else
- uiMenuItemsEnumO(head, "OBJECT_OT_surface_add", "type");
- uiPupMenuEnd(C, head);
+ uiItemsEnumO(layout, "OBJECT_OT_surface_add", "type");
+ uiPupMenuEnd(C, pup);
return OPERATOR_CANCELLED;
}
@@ -478,7 +478,7 @@ static int object_add_curve_invoke(bContext *C, wmOperator *op, wmEvent *event)
void OBJECT_OT_curve_add(wmOperatorType *ot)
{
/* identifiers */
- ot->name= "Add Curve";
+ ot->name= "Curve";
ot->description = "Add a curve object to the scene.";
ot->idname= "OBJECT_OT_curve_add";
@@ -536,7 +536,7 @@ static int object_add_surface_exec(bContext *C, wmOperator *op)
void OBJECT_OT_surface_add(wmOperatorType *ot)
{
/* identifiers */
- ot->name= "Add Surface";
+ ot->name= "Surface";
ot->description = "Add a surface object to the scene.";
ot->idname= "OBJECT_OT_surface_add";
@@ -573,7 +573,7 @@ static int object_add_text_exec(bContext *C, wmOperator *op)
void OBJECT_OT_text_add(wmOperatorType *ot)
{
/* identifiers */
- ot->name= "Add Text";
+ ot->name= "Text";
ot->description = "Add a text object to the scene";
ot->idname= "OBJECT_OT_text_add";
@@ -618,7 +618,7 @@ static int object_armature_add_exec(bContext *C, wmOperator *op)
void OBJECT_OT_armature_add(wmOperatorType *ot)
{
/* identifiers */
- ot->name= "Add Armature";
+ ot->name= "Armature";
ot->description = "Add an armature object to the scene.";
ot->idname= "OBJECT_OT_armature_add";
@@ -633,20 +633,21 @@ void OBJECT_OT_armature_add(wmOperatorType *ot)
static int object_primitive_add_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
- uiMenuItem *head= uiPupMenuBegin("Add Object", 0);
+ uiPopupMenu *pup= uiPupMenuBegin(C, "Add Object", 0);
+ uiLayout *layout= uiPupMenuLayout(pup);
- uiMenuLevelEnumO(head, "OBJECT_OT_mesh_add", "type");
- uiMenuLevelEnumO(head, "OBJECT_OT_curve_add", "type");
- uiMenuLevelEnumO(head, "OBJECT_OT_surface_add", "type");
- uiMenuItemO(head, 0, "OBJECT_OT_text_add");
- uiMenuItemEnumO(head, "", 0, "OBJECT_OT_object_add", "type", OB_MBALL);
- uiMenuItemEnumO(head, "", 0, "OBJECT_OT_object_add", "type", OB_CAMERA);
- uiMenuItemEnumO(head, "", 0, "OBJECT_OT_object_add", "type", OB_LAMP);
- uiMenuItemEnumO(head, "", 0, "OBJECT_OT_object_add", "type", OB_EMPTY);
- uiMenuItemO(head, 0, "OBJECT_OT_armature_add");
- uiMenuItemEnumO(head, "", 0, "OBJECT_OT_object_add", "type", OB_LATTICE);
+ uiItemMenuEnumO(layout, NULL, ICON_OUTLINER_OB_MESH, "OBJECT_OT_mesh_add", "type");
+ uiItemMenuEnumO(layout, NULL, ICON_OUTLINER_OB_CURVE, "OBJECT_OT_curve_add", "type");
+ uiItemMenuEnumO(layout, NULL, ICON_OUTLINER_OB_SURFACE, "OBJECT_OT_surface_add", "type");
+ uiItemO(layout, NULL, ICON_OUTLINER_OB_FONT, "OBJECT_OT_text_add");
+ uiItemEnumO(layout, NULL, ICON_OUTLINER_OB_META, "OBJECT_OT_object_add", "type", OB_MBALL);
+ uiItemEnumO(layout, NULL, ICON_OUTLINER_OB_CAMERA, "OBJECT_OT_object_add", "type", OB_CAMERA);
+ uiItemEnumO(layout, NULL, ICON_OUTLINER_OB_LAMP, "OBJECT_OT_object_add", "type", OB_LAMP);
+ uiItemEnumO(layout, NULL, ICON_OUTLINER_OB_EMPTY, "OBJECT_OT_object_add", "type", OB_EMPTY);
+ uiItemO(layout, NULL, ICON_OUTLINER_OB_ARMATURE, "OBJECT_OT_armature_add");
+ uiItemEnumO(layout, NULL, ICON_OUTLINER_OB_LATTICE, "OBJECT_OT_object_add", "type", OB_LATTICE);
- uiPupMenuEnd(C, head);
+ uiPupMenuEnd(C, pup);
/* this operator is only for a menu, not used further */
return OPERATOR_CANCELLED;
@@ -921,7 +922,7 @@ static int return_editmesh_vgroup(Object *obedit, EditMesh *em, char *name, floa
static void select_editmesh_hook(Object *ob, HookModifierData *hmd)
{
Mesh *me= ob->data;
- EditMesh *em= EM_GetEditMesh(me);
+ EditMesh *em= BKE_mesh_get_editmesh(me);
EditVert *eve;
int index=0, nr=0;
@@ -933,7 +934,7 @@ static void select_editmesh_hook(Object *ob, HookModifierData *hmd)
}
EM_select_flush(em);
- EM_EndEditMesh(me, em);
+ BKE_mesh_end_editmesh(me, em);
}
static int return_editlattice_indexar(Lattice *editlatt, int *tot, int **indexar, float *cent)
@@ -1106,15 +1107,16 @@ int hook_getIndexArray(Object *obedit, int *tot, int **indexar, char *name, floa
case OB_MESH:
{
Mesh *me= obedit->data;
- EditMesh *em = EM_GetEditMesh(me);
+ EditMesh *em = BKE_mesh_get_editmesh(me);
/* check selected vertices first */
if( return_editmesh_indexar(em, tot, indexar, cent_r)) {
- EM_EndEditMesh(me, em);
+ BKE_mesh_end_editmesh(me, em);
return 1;
} else {
int ret = return_editmesh_vgroup(obedit, em, name, cent_r);
- EM_EndEditMesh(me, em);
+ BKE_mesh_end_editmesh(me, em);
+ return ret;
}
}
case OB_CURVE:
@@ -1483,16 +1485,29 @@ void OBJECT_OT_track_clear(wmOperatorType *ot)
RNA_def_enum(ot->srna, "type", prop_clear_track_types, 0, "Type", "");
}
+/* *****************Selection Operators******************* */
+static EnumPropertyItem prop_select_types[] = {
+ {0, "EXCLUSIVE", "Exclusive", ""},
+ {1, "EXTEND", "Extend", ""},
+ {0, NULL, NULL, NULL}
+};
-/* ***************************** */
/* ****** Select by Type ****** */
static int object_select_by_type_exec(bContext *C, wmOperator *op)
{
- short obtype;
+ short obtype, seltype;
obtype = RNA_enum_get(op->ptr, "type");
+ seltype = RNA_enum_get(op->ptr, "seltype");
+ if (seltype == 0) {
+ CTX_DATA_BEGIN(C, Base*, base, visible_bases) {
+ ED_base_object_select(base, BA_DESELECT);
+ }
+ CTX_DATA_END;
+ }
+
CTX_DATA_BEGIN(C, Base*, base, visible_bases) {
if(base->object->type==obtype) {
ED_base_object_select(base, BA_SELECT);
@@ -1520,7 +1535,8 @@ void OBJECT_OT_select_by_type(wmOperatorType *ot)
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
- RNA_def_enum(ot->srna, "type", prop_object_types, 0, "Type", "");
+ RNA_def_enum(ot->srna, "seltype", prop_select_types, 0, "Selection", "Extend selection or clear selection then select");
+ RNA_def_enum(ot->srna, "type", prop_object_types, 1, "Type", "");
}
/* ****** selection by links *******/
@@ -1544,7 +1560,7 @@ static int object_select_linked_exec(bContext *C, wmOperator *op)
Tex *tex=0;
int a, b;
int nr = RNA_enum_get(op->ptr, "type");
- short changed = 0;
+ short changed = 0, seltype;
/* events (nr):
* Object Ipo: 1
* ObData: 2
@@ -1553,7 +1569,15 @@ static int object_select_linked_exec(bContext *C, wmOperator *op)
* DupliGroup: 5
* PSys: 6
*/
+
+ seltype = RNA_enum_get(op->ptr, "seltype");
+ if (seltype == 0) {
+ CTX_DATA_BEGIN(C, Base*, base, visible_bases) {
+ ED_base_object_select(base, BA_DESELECT);
+ }
+ CTX_DATA_END;
+ }
ob= OBACT;
if(ob==0){
@@ -1588,65 +1612,63 @@ static int object_select_linked_exec(bContext *C, wmOperator *op)
else return OPERATOR_CANCELLED;
CTX_DATA_BEGIN(C, Base*, base, visible_bases) {
- if (!(base->flag & SELECT)) {
- if(nr==1) {
- // XXX old animation system
- //if(base->object->ipo==ipo) base->flag |= SELECT;
- //changed = 1;
- }
- else if(nr==2) {
- if(base->object->data==obdata) base->flag |= SELECT;
- changed = 1;
- }
- else if(nr==3 || nr==4) {
- ob= base->object;
-
- for(a=1; a<=ob->totcol; a++) {
- mat1= give_current_material(ob, a);
- if(nr==3) {
- if(mat1==mat) base->flag |= SELECT;
- changed = 1;
- }
- else if(mat1 && nr==4) {
- for(b=0; b<MAX_MTEX; b++) {
- if(mat1->mtex[b]) {
- if(tex==mat1->mtex[b]->tex) {
- base->flag |= SELECT;
- changed = 1;
- break;
- }
+ if(nr==1) {
+ // XXX old animation system
+ //if(base->object->ipo==ipo) base->flag |= SELECT;
+ //changed = 1;
+ }
+ else if(nr==2) {
+ if(base->object->data==obdata) base->flag |= SELECT;
+ changed = 1;
+ }
+ else if(nr==3 || nr==4) {
+ ob= base->object;
+
+ for(a=1; a<=ob->totcol; a++) {
+ mat1= give_current_material(ob, a);
+ if(nr==3) {
+ if(mat1==mat) base->flag |= SELECT;
+ changed = 1;
+ }
+ else if(mat1 && nr==4) {
+ for(b=0; b<MAX_MTEX; b++) {
+ if(mat1->mtex[b]) {
+ if(tex==mat1->mtex[b]->tex) {
+ base->flag |= SELECT;
+ changed = 1;
+ break;
}
}
}
}
}
- else if(nr==5) {
- if(base->object->dup_group==ob->dup_group) {
- base->flag |= SELECT;
- changed = 1;
- }
+ }
+ else if(nr==5) {
+ if(base->object->dup_group==ob->dup_group) {
+ base->flag |= SELECT;
+ changed = 1;
}
- else if(nr==6) {
- /* loop through other, then actives particles*/
- ParticleSystem *psys;
- ParticleSystem *psys_act;
-
- for(psys=base->object->particlesystem.first; psys; psys=psys->next) {
- for(psys_act=ob->particlesystem.first; psys_act; psys_act=psys_act->next) {
- if (psys->part == psys_act->part) {
- base->flag |= SELECT;
- changed = 1;
- break;
- }
- }
-
- if (base->flag & SELECT) {
+ }
+ else if(nr==6) {
+ /* loop through other, then actives particles*/
+ ParticleSystem *psys;
+ ParticleSystem *psys_act;
+
+ for(psys=base->object->particlesystem.first; psys; psys=psys->next) {
+ for(psys_act=ob->particlesystem.first; psys_act; psys_act=psys_act->next) {
+ if (psys->part == psys_act->part) {
+ base->flag |= SELECT;
+ changed = 1;
break;
}
}
+
+ if (base->flag & SELECT) {
+ break;
+ }
}
- base->object->flag= base->flag;
}
+ base->object->flag= base->flag;
}
CTX_DATA_END;
@@ -1674,6 +1696,7 @@ void OBJECT_OT_select_linked(wmOperatorType *ot)
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
RNA_def_enum(ot->srna, "type", prop_select_linked_types, 0, "Type", "");
+ RNA_def_enum(ot->srna, "seltype", prop_select_types, 1, "Selection", "Extend selection or clear selection then select");
}
/* ****** selection by layer *******/
@@ -1681,8 +1704,17 @@ void OBJECT_OT_select_linked(wmOperatorType *ot)
static int object_select_by_layer_exec(bContext *C, wmOperator *op)
{
unsigned int layernum;
+ short seltype;
+ seltype = RNA_enum_get(op->ptr, "seltype");
layernum = RNA_int_get(op->ptr, "layer");
+
+ if (seltype == 0) {
+ CTX_DATA_BEGIN(C, Base*, base, visible_bases) {
+ ED_base_object_select(base, BA_DESELECT);
+ }
+ CTX_DATA_END;
+ }
CTX_DATA_BEGIN(C, Base*, base, visible_bases) {
if(base->lay == (1<< (layernum -1)))
@@ -1712,6 +1744,7 @@ void OBJECT_OT_select_by_layer(wmOperatorType *ot)
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
RNA_def_int(ot->srna, "layer", 1, 1, 20, "Layer", "", 1, 20);
+ RNA_def_enum(ot->srna, "seltype", prop_select_types, 1, "Selection", "Extend selection or clear selection then select");
}
/* ****** invert selection *******/
@@ -1798,11 +1831,20 @@ void OBJECT_OT_select_all_toggle(wmOperatorType *ot)
static int object_select_random_exec(bContext *C, wmOperator *op)
{
float percent;
+ short seltype;
+
+ seltype = RNA_enum_get(op->ptr, "seltype");
+ if (seltype == 0) {
+ CTX_DATA_BEGIN(C, Base*, base, visible_bases) {
+ ED_base_object_select(base, BA_DESELECT);
+ }
+ CTX_DATA_END;
+ }
percent = RNA_float_get(op->ptr, "percent");
CTX_DATA_BEGIN(C, Base*, base, visible_bases) {
- if ((!base->flag & SELECT && BLI_frand() < percent)) {
+ if (BLI_frand() < percent) {
ED_base_object_select(base, BA_SELECT);
}
}
@@ -1829,6 +1871,7 @@ void OBJECT_OT_select_random(wmOperatorType *ot)
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
RNA_def_float_percentage(ot->srna, "percent", 0.5f, 0.0f, 1.0f, "Percent", "percentage of objects to randomly select", 0.0001f, 1.0f);
+ RNA_def_enum(ot->srna, "seltype", prop_select_types, 1, "Selection", "Extend selection or clear selection then select");
}
/* ******** Clear object Translation *********** */
@@ -2212,7 +2255,7 @@ void make_vertex_parent(Scene *scene, Object *obedit, View3D *v3d)
if(obedit->type==OB_MESH) {
Mesh *me= obedit->data;
- EditMesh *em = EM_GetEditMesh(me);
+ EditMesh *em = BKE_mesh_get_editmesh(me);
eve= em->verts.first;
while(eve) {
@@ -2227,7 +2270,7 @@ void make_vertex_parent(Scene *scene, Object *obedit, View3D *v3d)
eve= eve->next;
}
- EM_EndEditMesh(me, em);
+ BKE_mesh_end_editmesh(me, em);
}
else if(ELEM(obedit->type, OB_SURF, OB_CURVE)) {
ListBase *editnurb= curve_get_editcurve(obedit);
@@ -2581,26 +2624,27 @@ static int parent_set_exec(bContext *C, wmOperator *op)
static int parent_set_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
Object *ob= CTX_data_active_object(C);
- uiMenuItem *head= uiPupMenuBegin("Set Parent To", 0);
+ uiPopupMenu *pup= uiPupMenuBegin(C, "Set Parent To", 0);
+ uiLayout *layout= uiPupMenuLayout(pup);
- uiMenuContext(head, WM_OP_EXEC_DEFAULT);
- uiMenuItemEnumO(head, "", 0, "OBJECT_OT_parent_set", "type", PAR_OBJECT);
+ uiLayoutContext(layout, WM_OP_EXEC_DEFAULT);
+ uiItemEnumO(layout, NULL, 0, "OBJECT_OT_parent_set", "type", PAR_OBJECT);
/* ob becomes parent, make the associated menus */
if(ob->type==OB_ARMATURE) {
- uiMenuItemEnumO(head, "", 0, "OBJECT_OT_parent_set", "type", PAR_ARMATURE);
- uiMenuItemEnumO(head, "", 0, "OBJECT_OT_parent_set", "type", PAR_BONE);
+ uiItemEnumO(layout, NULL, 0, "OBJECT_OT_parent_set", "type", PAR_ARMATURE);
+ uiItemEnumO(layout, NULL, 0, "OBJECT_OT_parent_set", "type", PAR_BONE);
}
else if(ob->type==OB_CURVE) {
- uiMenuItemEnumO(head, "", 0, "OBJECT_OT_parent_set", "type", PAR_CURVE);
- uiMenuItemEnumO(head, "", 0, "OBJECT_OT_parent_set", "type", PAR_FOLLOW);
- uiMenuItemEnumO(head, "", 0, "OBJECT_OT_parent_set", "type", PAR_PATH_CONST);
+ uiItemEnumO(layout, NULL, 0, "OBJECT_OT_parent_set", "type", PAR_CURVE);
+ uiItemEnumO(layout, NULL, 0, "OBJECT_OT_parent_set", "type", PAR_FOLLOW);
+ uiItemEnumO(layout, NULL, 0, "OBJECT_OT_parent_set", "type", PAR_PATH_CONST);
}
else if(ob->type == OB_LATTICE) {
- uiMenuItemEnumO(head, "", 0, "OBJECT_OT_parent_set", "type", PAR_LATTICE);
+ uiItemEnumO(layout, NULL, 0, "OBJECT_OT_parent_set", "type", PAR_LATTICE);
}
- uiPupMenuEnd(C, head);
+ uiPupMenuEnd(C, pup);
return OPERATOR_CANCELLED;
}
@@ -2847,7 +2891,7 @@ static int object_center_set_exec(bContext *C, wmOperator *op)
if(obedit->type==OB_MESH) {
Mesh *me= obedit->data;
- EditMesh *em = EM_GetEditMesh(me);
+ EditMesh *em = BKE_mesh_get_editmesh(me);
for(eve= em->verts.first; eve; eve= eve->next) {
if(v3d->around==V3D_CENTROID) {
@@ -2875,7 +2919,7 @@ static int object_center_set_exec(bContext *C, wmOperator *op)
recalc_editnormals(em);
tot_change++;
DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
- EM_EndEditMesh(me, em);
+ BKE_mesh_end_editmesh(me, em);
}
}
@@ -3035,7 +3079,7 @@ static int object_center_set_exec(bContext *C, wmOperator *op)
nu= nu1;
while(nu) {
- if( (nu->type & 7)==1) {
+ if( (nu->type & 7)==CU_BEZIER) {
a= nu->pntsu;
while (a--) {
VecSubf(nu->bezt[a].vec[0], nu->bezt[a].vec[0], cent);
@@ -3159,7 +3203,6 @@ void ED_object_exit_editmode(bContext *C, int flag)
{
Scene *scene= CTX_data_scene(C);
Object *obedit= CTX_data_edit_object(C);
- Object *ob;
int freedata = flag & EM_FREEDATA;
if(obedit==NULL) return;
@@ -3208,22 +3251,20 @@ void ED_object_exit_editmode(bContext *C, int flag)
// if(freedata) BLI_freelistN(&editelems);
}
- ob= obedit;
-
- /* for example; displist make is different in editmode */
- if(freedata) obedit= NULL;
- scene->obedit= obedit; // XXX for context
-
- /* also flush ob recalc, doesn't take much overhead, but used for particles */
- DAG_object_flush_update(scene, ob, OB_RECALC_OB|OB_RECALC_DATA);
+ /* freedata only 0 now on file saves */
+ if(freedata) {
+ /* for example; displist make is different in editmode */
+ scene->obedit= NULL; // XXX for context
+
+ /* also flush ob recalc, doesn't take much overhead, but used for particles */
+ DAG_object_flush_update(scene, obedit, OB_RECALC_OB|OB_RECALC_DATA);
- if(obedit==NULL) // XXX && (flag & EM_FREEUNDO))
ED_undo_push(C, "Editmode");
- if(flag & EM_WAITCURSOR) waitcursor(0);
+ if(flag & EM_WAITCURSOR) waitcursor(0);
- WM_event_add_notifier(C, NC_SCENE|ND_MODE|NS_MODE_OBJECT, scene);
-
+ WM_event_add_notifier(C, NC_SCENE|ND_MODE|NS_MODE_OBJECT, scene);
+ }
}
@@ -4298,14 +4339,12 @@ static void copymenu_properties(Scene *scene, View3D *v3d, Object *ob)
prop= prop->next;
}
- if(tot==0) {
- error("No properties in the active object to copy");
- return;
- }
-
str= MEM_callocN(50 + 33*tot, "copymenu prop");
- strcpy(str, "Copy Property %t|Replace All|Merge All|%l");
+ if (tot)
+ strcpy(str, "Copy Property %t|Replace All|Merge All|%l");
+ else
+ strcpy(str, "Copy Property %t|Clear All (no properties on active)");
tot= 0;
prop= ob->prop.first;
@@ -4608,7 +4647,8 @@ void copy_attr(Scene *scene, View3D *v3d, short event)
base->object->formfactor = ob->formfactor;
base->object->damping= ob->damping;
base->object->rdamping= ob->rdamping;
- base->object->mass= ob->mass;
+ base->object->min_vel= ob->min_vel;
+ base->object->max_vel= ob->max_vel;
if (ob->gameflag & OB_BOUNDS) {
base->object->boundtype = ob->boundtype;
}
@@ -5152,7 +5192,7 @@ static void apply_objects_internal(Scene *scene, View3D *v3d, int apply_scale, i
nu= cu->nurb.first;
while(nu) {
- if( (nu->type & 7)==1) {
+ if( (nu->type & 7)==CU_BEZIER) {
a= nu->pntsu;
bezt= nu->bezt;
while(a--) {
diff --git a/source/blender/editors/object/object_intern.h b/source/blender/editors/object/object_intern.h
index 1c56b0c7115..7203f56b40f 100644
--- a/source/blender/editors/object/object_intern.h
+++ b/source/blender/editors/object/object_intern.h
@@ -84,5 +84,8 @@ void GROUP_OT_objects_remove(struct wmOperatorType *ot);
void GROUP_OT_objects_add_active(struct wmOperatorType *ot);
void GROUP_OT_objects_remove_active(struct wmOperatorType *ot);
+/* object_modifier.c */
+void OBJECT_OT_modifier_add(struct wmOperatorType *ot);
+
#endif /* ED_OBJECT_INTERN_H */
diff --git a/source/blender/editors/object/object_modifier.c b/source/blender/editors/object/object_modifier.c
new file mode 100644
index 00000000000..b430cdd67bc
--- /dev/null
+++ b/source/blender/editors/object/object_modifier.c
@@ -0,0 +1,98 @@
+/**
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * Contributor(s): Blender Foundation, 2009
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "DNA_modifier_types.h"
+#include "DNA_object_types.h"
+#include "DNA_scene_types.h"
+
+#include "BLI_listbase.h"
+
+#include "BKE_context.h"
+#include "BKE_depsgraph.h"
+#include "BKE_modifier.h"
+
+#include "RNA_access.h"
+#include "RNA_define.h"
+#include "RNA_enum_types.h"
+
+#include "ED_screen.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+
+#include "object_intern.h"
+
+/********************* add modifier operator ********************/
+
+static int modifier_add_exec(bContext *C, wmOperator *op)
+{
+ Scene *scene= CTX_data_scene(C);
+ Object *ob = CTX_data_active_object(C);
+ ModifierData *md;
+ int type= RNA_enum_get(op->ptr, "type");
+ ModifierTypeInfo *mti = modifierType_getInfo(type);
+
+ if(mti->flags&eModifierTypeFlag_RequiresOriginalData) {
+ md = ob->modifiers.first;
+
+ while(md && modifierType_getInfo(md->type)->type==eModifierTypeType_OnlyDeform)
+ md = md->next;
+
+ BLI_insertlinkbefore(&ob->modifiers, md, modifier_new(type));
+ }
+ else
+ BLI_addtail(&ob->modifiers, modifier_new(type));
+
+ DAG_object_flush_update(scene, ob, OB_RECALC_DATA);
+ WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob);
+
+ return OPERATOR_FINISHED;
+}
+
+void OBJECT_OT_modifier_add(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "Add Modifier";
+ ot->description = "Add a modifier to the active object.";
+ ot->idname= "OBJECT_OT_modifier_add";
+
+ /* api callbacks */
+ ot->invoke= WM_menu_invoke;
+ ot->exec= modifier_add_exec;
+
+ ot->poll= ED_operator_object_active;
+
+ /* flags */
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+
+ /* XXX only some types should be here */
+ RNA_def_enum(ot->srna, "type", modifier_type_items, 0, "Type", "");
+}
+
diff --git a/source/blender/editors/object/object_ops.c b/source/blender/editors/object/object_ops.c
index 8cbf9bf5287..e668c494fba 100644
--- a/source/blender/editors/object/object_ops.c
+++ b/source/blender/editors/object/object_ops.c
@@ -98,6 +98,8 @@ void ED_operatortypes_object(void)
WM_operatortype_append(OBJECT_OT_armature_add);
WM_operatortype_append(OBJECT_OT_object_add);
WM_operatortype_append(OBJECT_OT_primitive_add);
+
+ WM_operatortype_append(OBJECT_OT_modifier_add);
}
void ED_keymap_object(wmWindowManager *wm)
@@ -136,7 +138,7 @@ void ED_keymap_object(wmWindowManager *wm)
WM_keymap_verify_item(keymap, "OBJECT_OT_duplicate_add", DKEY, KM_PRESS, KM_SHIFT, 0);
// XXX this should probably be in screen instead... here for testing purposes in the meantime... - Aligorith
- WM_keymap_verify_item(keymap, "ANIM_OT_insert_keyframe_old", IKEY, KM_PRESS, 0, 0);
+ WM_keymap_verify_item(keymap, "ANIM_OT_insert_keyframe_menu", IKEY, KM_PRESS, 0, 0);
WM_keymap_verify_item(keymap, "ANIM_OT_delete_keyframe_old", IKEY, KM_PRESS, KM_ALT, 0);
WM_keymap_verify_item(keymap, "GROUP_OT_group_create", GKEY, KM_PRESS, KM_CTRL, 0);
diff --git a/source/blender/editors/physics/Makefile b/source/blender/editors/physics/Makefile
index bd2dbc65f91..a71ea9e2083 100644
--- a/source/blender/editors/physics/Makefile
+++ b/source/blender/editors/physics/Makefile
@@ -38,7 +38,6 @@ CFLAGS += $(LEVEL_1_C_WARNINGS)
CPPFLAGS += -I$(NAN_GLEW)/include
CPPFLAGS += -I$(OPENGL_HEADERS)
-CPPFLAGS += -I$(NAN_BMFONT)/include
CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include
CPPFLAGS += -I$(NAN_ELBEEM)/include
diff --git a/source/blender/editors/physics/SConscript b/source/blender/editors/physics/SConscript
index 241962442d4..5718ae0c217 100644
--- a/source/blender/editors/physics/SConscript
+++ b/source/blender/editors/physics/SConscript
@@ -5,7 +5,7 @@ sources = env.Glob('*.c')
incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../imbuf'
incs += ' ../../windowmanager #/intern/guardedalloc #/extern/glew/include'
-incs += ' #/intern/guardedalloc #intern/bmfont ../../gpu'
+incs += ' #/intern/guardedalloc ../../gpu'
incs += ' ../../makesrna ../../render/extern/include #/intern/elbeem/extern'
env.BlenderLib ( 'bf_editors_physics', sources, Split(incs), [], libtype=['core'], priority=[45] )
diff --git a/source/blender/editors/physics/editparticle.c b/source/blender/editors/physics/editparticle.c
index 33d1bd66676..1c2b3c6b309 100644
--- a/source/blender/editors/physics/editparticle.c
+++ b/source/blender/editors/physics/editparticle.c
@@ -1,5 +1,5 @@
/*
- * $Id: editparticle.c $
+ * $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
*
@@ -1821,7 +1821,7 @@ void PARTICLE_OT_rekey(wmOperatorType *ot)
/* api callbacks */
ot->exec= rekey_exec;
- // XXX show buttons ot->invoke= rekey_invoke;
+ ot->invoke= WM_operator_redo;
ot->poll= PE_poll;
/* flags */
@@ -3839,19 +3839,21 @@ void PE_change_act_psys(Scene *scene, Object *ob, ParticleSystem *psys)
static int specials_menu_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
Scene *scene= CTX_data_scene(C);
- uiMenuItem *head;
+ uiPopupMenu *pup;
+ uiLayout *layout;
- head= uiPupMenuBegin("Specials", 0);
+ pup= uiPupMenuBegin(C, "Specials", 0);
+ layout= uiPupMenuLayout(pup);
- uiMenuItemO(head, 0, "PARTICLE_OT_rekey");
+ uiItemO(layout, NULL, 0, "PARTICLE_OT_rekey");
if(scene->selectmode & SCE_SELECT_POINT) {
- uiMenuItemO(head, 0, "PARTICLE_OT_subdivide");
- uiMenuItemO(head, 0, "PARTICLE_OT_select_first");
- uiMenuItemO(head, 0, "PARTICLE_OT_select_last");
+ uiItemO(layout, NULL, 0, "PARTICLE_OT_subdivide");
+ uiItemO(layout, NULL, 0, "PARTICLE_OT_select_first");
+ uiItemO(layout, NULL, 0, "PARTICLE_OT_select_last");
}
- uiMenuItemO(head, 0, "PARTICLE_OT_remove_doubles");
+ uiItemO(layout, NULL, 0, "PARTICLE_OT_remove_doubles");
- uiPupMenuEnd(C, head);
+ uiPupMenuEnd(C, pup);
return OPERATOR_CANCELLED;
}
diff --git a/source/blender/editors/physics/physics_intern.h b/source/blender/editors/physics/physics_intern.h
index 9ca4f864e48..e03649575cb 100644
--- a/source/blender/editors/physics/physics_intern.h
+++ b/source/blender/editors/physics/physics_intern.h
@@ -1,7 +1,5 @@
-/* BIF_editparticle.h
- *
- *
- * $Id: BIF_editparticle.h $
+/*
+ * $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
*
diff --git a/source/blender/editors/preview/Makefile b/source/blender/editors/preview/Makefile
index 84514d73570..c44da6753f3 100644
--- a/source/blender/editors/preview/Makefile
+++ b/source/blender/editors/preview/Makefile
@@ -38,7 +38,6 @@ CFLAGS += $(LEVEL_1_C_WARNINGS)
CPPFLAGS += -I$(NAN_GLEW)/include
CPPFLAGS += -I$(OPENGL_HEADERS)
-CPPFLAGS += -I$(NAN_BMFONT)/include
CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include
CPPFLAGS += -I$(NAN_ELBEEM)/include
diff --git a/source/blender/editors/preview/SConscript b/source/blender/editors/preview/SConscript
index dcc80e8c626..922232822ff 100644
--- a/source/blender/editors/preview/SConscript
+++ b/source/blender/editors/preview/SConscript
@@ -5,7 +5,7 @@ sources = env.Glob('*.c')
incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../imbuf'
incs += ' ../../windowmanager #/intern/guardedalloc #/extern/glew/include'
-incs += ' #/intern/guardedalloc #intern/bmfont ../../gpu'
+incs += ' #/intern/guardedalloc ../../gpu'
incs += ' ../../makesrna ../../render/extern/include #/intern/elbeem/extern'
incs += ' ../../blenloader'
diff --git a/source/blender/editors/preview/previewrender.c b/source/blender/editors/preview/previewrender.c
index 407674163a6..1d5d809a9ee 100644
--- a/source/blender/editors/preview/previewrender.c
+++ b/source/blender/editors/preview/previewrender.c
@@ -349,7 +349,7 @@ static Scene *preview_prepare_scene(Scene *scene, int id_type, ShaderPreview *sp
if(sp->pr_method==PR_ICON_RENDER) {
- if (mat->mode & MA_HALO) {
+ if (mat->material_type == MA_TYPE_HALO) {
sce->lay= 1<<MA_FLAT;
}
else {
diff --git a/source/blender/editors/screen/CMakeLists.txt b/source/blender/editors/screen/CMakeLists.txt
index 42480f65268..4ed1e59a87f 100644
--- a/source/blender/editors/screen/CMakeLists.txt
+++ b/source/blender/editors/screen/CMakeLists.txt
@@ -33,7 +33,7 @@ SET(INC ../../windowmanager
../../editors/include
../../../../intern/guardedalloc ../../../../intern/memutil
../../blenlib ../../makesdna ../../makesrna ../../blenkernel
- ../../include ../../../../intern/bmfont ../../imbuf
+ ../../include ../../imbuf
../../render/extern/include ../../../../intern/bsp/extern
../../radiosity/extern/include
../../../intern/decimation/extern ../../blenloader
@@ -45,9 +45,7 @@ SET(INC ../../windowmanager
)
IF(WITH_INTERNATIONAL)
- SET(INC ${INC} ../../ftfont)
ADD_DEFINITIONS(-DINTERNATIONAL)
- ADD_DEFINITIONS(-DFTGL_STATIC_LIBRARY)
ENDIF(WITH_INTERNATIONAL)
IF(WITH_OPENEXR)
diff --git a/source/blender/editors/screen/Makefile b/source/blender/editors/screen/Makefile
index d18d15d00d9..cf6e692c304 100644
--- a/source/blender/editors/screen/Makefile
+++ b/source/blender/editors/screen/Makefile
@@ -37,7 +37,6 @@ CFLAGS += $(LEVEL_1_C_WARNINGS)
CPPFLAGS += -I$(NAN_GLEW)/include
CPPFLAGS += -I$(OPENGL_HEADERS)
-CPPFLAGS += -I$(NAN_BMFONT)/include
# not very neat....
CPPFLAGS += -I../../windowmanager
@@ -49,6 +48,7 @@ CPPFLAGS += -I../../makesrna
CPPFLAGS += -I../../imbuf
CPPFLAGS += -I../../python
CPPFLAGS += -I../../render/extern/include
+CPPFLAGS += -I../../blenfont
CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include
# own include
diff --git a/source/blender/editors/screen/SConscript b/source/blender/editors/screen/SConscript
index c291533790a..3972efd8eed 100644
--- a/source/blender/editors/screen/SConscript
+++ b/source/blender/editors/screen/SConscript
@@ -3,10 +3,10 @@ Import ('env')
sources = env.Glob('*.c')
-incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../imbuf'
+incs = '../include ../../blenlib ../../blenkernel ../../blenfont ../../makesdna ../../imbuf'
incs += ' ../../blenloader ../../windowmanager ../../python ../../makesrna'
incs += ' ../../render/extern/include'
-incs += ' #/intern/guardedalloc #/extern/glew/include #intern/bmfont'
+incs += ' #/intern/guardedalloc #/extern/glew/include'
defs = ''
diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c
index 5c481652db1..cf72eaf2cdd 100644
--- a/source/blender/editors/screen/area.c
+++ b/source/blender/editors/screen/area.c
@@ -31,6 +31,9 @@
#include "MEM_guardedalloc.h"
+#include "DNA_screen_types.h"
+#include "DNA_userdef_types.h"
+
#include "BLI_blenlib.h"
#include "BLI_arithb.h"
#include "BLI_rand.h"
@@ -50,13 +53,12 @@
#include "BIF_gl.h"
#include "BIF_glutil.h"
+#include "BLF_api.h"
#include "UI_interface.h"
#include "UI_resources.h"
#include "UI_view2d.h"
-#include "BMF_Api.h"
-
#ifndef DISABLE_PYTHON
#include "BPY_extern.h"
#endif
@@ -65,12 +67,15 @@
/* general area and region code */
-static void region_draw_emboss(ARegion *ar)
+static void region_draw_emboss(ARegion *ar, rcti *scirct)
{
- short winx, winy;
+ rcti rect;
- winx= ar->winrct.xmax-ar->winrct.xmin;
- winy= ar->winrct.ymax-ar->winrct.ymin;
+ /* translate scissor rect to region space */
+ rect.xmin= scirct->xmin - ar->winrct.xmin;
+ rect.ymin= scirct->ymin - ar->winrct.ymin;
+ rect.xmax= scirct->xmax - ar->winrct.xmin;
+ rect.ymax= scirct->ymax - ar->winrct.ymin;
/* set transp line */
glEnable( GL_BLEND );
@@ -78,19 +83,19 @@ static void region_draw_emboss(ARegion *ar)
/* right */
glColor4ub(0,0,0, 50);
- sdrawline(winx, 0, winx, winy);
+ sdrawline(rect.xmax, rect.ymin, rect.xmax, rect.ymax);
/* bottom */
glColor4ub(0,0,0, 80);
- sdrawline(0, 0, winx, 0);
+ sdrawline(rect.xmin, rect.ymin, rect.xmax, rect.ymin);
/* top */
glColor4ub(255,255,255, 60);
- sdrawline(0, winy, winx, winy);
+ sdrawline(rect.xmin, rect.ymax, rect.xmax, rect.ymax);
/* left */
glColor4ub(255,255,255, 50);
- sdrawline(0, 0, 0, winy);
+ sdrawline(rect.xmin, rect.ymin, rect.xmin, rect.ymax);
glDisable( GL_BLEND );
}
@@ -161,6 +166,27 @@ void ED_area_overdraw_flush(bContext *C, ScrArea *sa, ARegion *ar)
}
}
+static void area_draw_azone(short x1, short y1, short x2, short y2)
+{
+ float xmin = x1;
+ float xmax = x2-2;
+ float ymin = y1-1;
+ float ymax = y2-3;
+
+ float dx= 0.3f*(xmax-xmin);
+ float dy= 0.3f*(ymax-ymin);
+
+ glColor4ub(255, 255, 255, 80);
+ fdrawline(xmin, ymax, xmax, ymin);
+ fdrawline(xmin, ymax-dy, xmax-dx, ymin);
+ fdrawline(xmin, ymax-2*dy, xmax-2*dx, ymin);
+
+ glColor4ub(0, 0, 0, 150);
+ fdrawline(xmin, ymax+1, xmax+1, ymin);
+ fdrawline(xmin, ymax-dy+1, xmax-dx+1, ymin);
+ fdrawline(xmin, ymax-2*dy+1, xmax-2*dx+1, ymin);
+}
+
/* only exported for WM */
void ED_area_overdraw(bContext *C)
{
@@ -179,8 +205,7 @@ void ED_area_overdraw(bContext *C)
for(az= sa->actionzones.first; az; az= az->next) {
if(az->do_draw) {
if(az->type==AZONE_TRI) {
- glColor4ub(0, 0, 0, 70);
- sdrawtrifill(az->x1, az->y1, az->x2, az->y2);
+ area_draw_azone(az->x1, az->y1, az->x2, az->y2);
}
az->do_draw= 0;
}
@@ -190,49 +215,74 @@ void ED_area_overdraw(bContext *C)
}
+/* get scissor rect, checking overlapping regions */
+static void region_scissor_winrct(ARegion *ar, rcti *winrct)
+{
+ *winrct= ar->winrct;
+
+ if(ELEM(ar->alignment, RGN_OVERLAP_LEFT, RGN_OVERLAP_RIGHT))
+ return;
+
+ while(ar->prev) {
+ ar= ar->prev;
+
+ if(ar->flag & RGN_FLAG_HIDDEN);
+ else if(ar->alignment==RGN_OVERLAP_LEFT) {
+ winrct->xmin= ar->winrct.xmax + 1;
+ }
+ else if(ar->alignment==RGN_OVERLAP_RIGHT) {
+ winrct->xmax= ar->winrct.xmin - 1;
+ }
+ else break;
+ }
+}
+
/* only exported for WM */
void ED_region_do_draw(bContext *C, ARegion *ar)
{
wmWindow *win= CTX_wm_window(C);
ScrArea *sa= CTX_wm_area(C);
ARegionType *at= ar->type;
-
+ rcti winrct;
+
+ /* checks other overlapping regions */
+ region_scissor_winrct(ar, &winrct);
+
/* if no partial draw rect set, full rect */
if(ar->drawrct.xmin == ar->drawrct.xmax)
- ar->drawrct= ar->winrct;
-
- /* extra clip for safety */
- ar->drawrct.xmin= MAX2(ar->winrct.xmin, ar->drawrct.xmin);
- ar->drawrct.ymin= MAX2(ar->winrct.ymin, ar->drawrct.ymin);
- ar->drawrct.xmax= MIN2(ar->winrct.xmax, ar->drawrct.xmax);
- ar->drawrct.ymax= MIN2(ar->winrct.ymax, ar->drawrct.ymax);
+ ar->drawrct= winrct;
+ else {
+ /* extra clip for safety */
+ ar->drawrct.xmin= MAX2(winrct.xmin, ar->drawrct.xmin);
+ ar->drawrct.ymin= MAX2(winrct.ymin, ar->drawrct.ymin);
+ ar->drawrct.xmax= MIN2(winrct.xmax, ar->drawrct.xmax);
+ ar->drawrct.ymax= MIN2(winrct.ymax, ar->drawrct.ymax);
+ }
/* note; this sets state, so we can use wmOrtho and friends */
wmSubWindowScissorSet(win, ar->swinid, &ar->drawrct);
+ UI_SetTheme(sa?sa->spacetype:0, ar->type?ar->type->regionid:0);
+
/* optional header info instead? */
if(ar->headerstr) {
float col[3];
- UI_SetTheme(sa);
UI_GetThemeColor3fv(TH_HEADER, col);
glClearColor(col[0], col[1], col[2], 0.0);
glClear(GL_COLOR_BUFFER_BIT);
- UI_ThemeColor(TH_MENU_TEXT);
- glRasterPos2i(20, 6);
- BMF_DrawString(G.font, ar->headerstr);
+ UI_ThemeColor(TH_TEXT);
+ BLF_draw_default(20, 6, 0.0f, ar->headerstr);
}
else if(at->draw) {
- UI_SetTheme(sa);
at->draw(C, ar);
- UI_SetTheme(NULL);
}
- if(sa)
- region_draw_emboss(ar);
-
uiFreeInactiveBlocks(C, &ar->uiblocks);
+ if(sa)
+ region_draw_emboss(ar, &winrct);
+
/* XXX test: add convention to end regions always in pixel space, for drawing of borders/gestures etc */
ED_region_pixelspace(ar);
@@ -646,6 +696,8 @@ void ED_region_init(bContext *C, ARegion *ar)
/* refresh can be called before window opened */
region_subwindow(CTX_wm_manager(C), CTX_wm_window(C), ar);
+ ar->winx= ar->winrct.xmax - ar->winrct.xmin + 1;
+ ar->winy= ar->winrct.ymax - ar->winrct.ymin + 1;
}
@@ -875,9 +927,6 @@ int ED_area_header_standardbuttons(const bContext *C, uiBlock *block, int yco)
uiBut *but;
int xco= 8;
- if(ED_screen_area_active(C)) uiBlockSetCol(block, TH_HEADER);
- else uiBlockSetCol(block, TH_HEADERDESEL);
-
but= uiDefIconTextButC(block, ICONTEXTROW, 0, ICON_VIEW3D,
windowtype_pup(), xco, yco, XIC+10, YIC,
&(sa->butspacetype), 1.0, SPACEICONMAX, 0, 0,
@@ -904,6 +953,195 @@ int ED_area_header_standardbuttons(const bContext *C, uiBlock *block, int yco)
}
xco+=XIC;
+ uiBlockSetEmboss(block, UI_EMBOSS);
+
return xco;
}
+/************************ standard UI regions ************************/
+
+void ED_region_panels(const bContext *C, ARegion *ar, int vertical, char *context)
+{
+ uiStyle *style= U.uistyles.first;
+ uiBlock *block;
+ PanelType *pt;
+ Panel *panel;
+ View2D *v2d= &ar->v2d;
+ float col[3];
+ int xco, yco, x, y, miny=0, w, em, header, triangle, open;
+
+ if(vertical) {
+ w= v2d->cur.xmax - v2d->cur.xmin;
+ em= (ar->type->minsizex)? 10: 20;
+ }
+ else {
+ w= UI_PANEL_WIDTH;
+ em= (ar->type->minsizex)? 10: 20;
+ }
+
+ header= 20; // XXX
+ triangle= 22;
+ x= 0;
+ y= -style->panelouter;
+
+ /* create panels */
+ uiBeginPanels(C, ar);
+
+ /* set view2d view matrix for scrolling (without scrollers) */
+ UI_view2d_view_ortho(C, v2d);
+
+ for(pt= ar->type->paneltypes.first; pt; pt= pt->next) {
+ /* verify context */
+ if(context)
+ if(!pt->context || strcmp(context, pt->context) != 0)
+ continue;
+
+ /* draw panel */
+ if(pt->draw && (!pt->poll || pt->poll(C, pt))) {
+ block= uiBeginBlock(C, ar, pt->idname, UI_EMBOSS);
+ panel= uiBeginPanel(ar, block, pt, &open);
+
+ if(vertical)
+ y -= header;
+
+ if(pt->draw_header && (open || vertical)) {
+ /* for enabled buttons */
+ panel->layout= uiBlockLayout(block, UI_LAYOUT_HORIZONTAL, UI_LAYOUT_HEADER,
+ triangle, header+style->panelspace, header, 1, style);
+
+ pt->draw_header(C, panel);
+
+ uiBlockLayoutResolve(C, block, &xco, &yco);
+ panel->labelofs= xco - triangle;
+ panel->layout= NULL;
+ }
+
+ if(open) {
+ panel->type= pt;
+ panel->layout= uiBlockLayout(block, UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL,
+ style->panelspace, 0, w-2*style->panelspace, em, style);
+
+ pt->draw(C, panel);
+
+ uiBlockLayoutResolve(C, block, &xco, &yco);
+ panel->layout= NULL;
+
+ yco -= 2*style->panelspace;
+ uiEndPanel(block, w, -yco);
+ }
+ else
+ yco= 0;
+
+ uiEndBlock(C, block);
+
+ if(vertical) {
+ y += yco-style->panelouter;
+ }
+ else {
+ x += w;
+ miny= MIN2(y, yco-style->panelouter-header);
+ }
+ }
+ }
+
+ if(vertical)
+ x += w;
+ else
+ y= miny;
+
+ /* in case there are no panels */
+ if(x == 0 || y == 0) {
+ x= UI_PANEL_WIDTH;
+ y= UI_PANEL_WIDTH;
+ }
+
+ /* clear */
+ UI_GetThemeColor3fv(TH_BACK, col);
+ glClearColor(col[0], col[1], col[2], 0.0);
+ glClear(GL_COLOR_BUFFER_BIT);
+
+ /* before setting the view */
+ if(vertical) {
+ v2d->keepofs |= V2D_LOCKOFS_X;
+ v2d->keepofs &= ~V2D_LOCKOFS_Y;
+ }
+ else {
+ v2d->keepofs &= ~V2D_LOCKOFS_X;
+ v2d->keepofs |= V2D_LOCKOFS_Y;
+ }
+
+ UI_view2d_totRect_set(v2d, x, -y);
+
+ /* set the view */
+ UI_view2d_view_ortho(C, v2d);
+
+ /* this does the actual drawing! */
+ uiEndPanels(C, ar);
+
+ /* restore view matrix */
+ UI_view2d_view_restore(C);
+}
+
+void ED_region_panels_init(wmWindowManager *wm, ARegion *ar)
+{
+ ListBase *keymap;
+
+ UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_PANELS_UI, ar->winx, ar->winy);
+
+ keymap= WM_keymap_listbase(wm, "View2D Buttons List", 0, 0);
+ WM_event_add_keymap_handler(&ar->handlers, keymap);
+}
+
+void ED_region_header(const bContext *C, ARegion *ar)
+{
+ uiStyle *style= U.uistyles.first;
+ uiBlock *block;
+ uiLayout *layout;
+ HeaderType *ht;
+ Header header = {0};
+ float col[3];
+ int xco, yco;
+
+ /* clear */
+ if(ED_screen_area_active(C))
+ UI_GetThemeColor3fv(TH_HEADER, col);
+ else
+ UI_GetThemeColor3fv(TH_HEADERDESEL, col);
+
+ glClearColor(col[0], col[1], col[2], 0.0);
+ glClear(GL_COLOR_BUFFER_BIT);
+
+ /* set view2d view matrix for scrolling (without scrollers) */
+ UI_view2d_view_ortho(C, &ar->v2d);
+
+ xco= 8;
+ yco= HEADERY-3;
+
+ /* draw all headers types */
+ for(ht= ar->type->headertypes.first; ht; ht= ht->next) {
+ block= uiBeginBlock(C, ar, "header buttons", UI_EMBOSS);
+ layout= uiBlockLayout(block, UI_LAYOUT_HORIZONTAL, UI_LAYOUT_HEADER, xco, yco, HEADERY-6, 1, style);
+
+ if(ht->draw) {
+ header.type= ht;
+ header.layout= layout;
+ ht->draw(C, &header);
+ }
+
+ uiBlockLayoutResolve(C, block, &xco, &yco);
+ uiEndBlock(C, block);
+ uiDrawBlock(C, block);
+ }
+
+ /* always as last */
+ UI_view2d_totRect_set(&ar->v2d, xco+XIC+80, ar->v2d.tot.ymax-ar->v2d.tot.ymin);
+
+ /* restore view matrix? */
+ UI_view2d_view_restore(C);
+}
+
+void ED_region_header_init(ARegion *ar)
+{
+ UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_HEADER, ar->winx, ar->winy);
+}
+
diff --git a/source/blender/editors/screen/glutil.c b/source/blender/editors/screen/glutil.c
index 74e0bc3852e..a81a52fd544 100644
--- a/source/blender/editors/screen/glutil.c
+++ b/source/blender/editors/screen/glutil.c
@@ -419,7 +419,7 @@ static int get_cached_work_texture(int *w_r, int *h_r)
return texid;
}
-void glaDrawPixelsTex(float x, float y, int img_w, int img_h, int format, void *rect)
+void glaDrawPixelsTexScaled(float x, float y, int img_w, int img_h, int format, void *rect, float scaleX, float scaleY)
{
unsigned char *uc_rect= (unsigned char*) rect;
float *f_rect= (float *)rect;
@@ -460,13 +460,13 @@ void glaDrawPixelsTex(float x, float y, int img_w, int img_h, int format, void *
glVertex2f(rast_x, rast_y);
glTexCoord2f((float) (subpart_w-1)/tex_w, 0);
- glVertex2f(rast_x+subpart_w*xzoom, rast_y);
+ glVertex2f(rast_x+subpart_w*xzoom*scaleX, rast_y);
glTexCoord2f((float) (subpart_w-1)/tex_w, (float) (subpart_h-1)/tex_h);
- glVertex2f(rast_x+subpart_w*xzoom, rast_y+subpart_h*yzoom);
+ glVertex2f(rast_x+subpart_w*xzoom*scaleX, rast_y+subpart_h*yzoom*scaleY);
glTexCoord2f(0, (float) (subpart_h-1)/tex_h);
- glVertex2f(rast_x, rast_y+subpart_h*yzoom);
+ glVertex2f(rast_x, rast_y+subpart_h*yzoom*scaleY);
glEnd();
glDisable(GL_TEXTURE_2D);
}
@@ -477,6 +477,11 @@ void glaDrawPixelsTex(float x, float y, int img_w, int img_h, int format, void *
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
}
+void glaDrawPixelsTex(float x, float y, int img_w, int img_h, int format, void *rect)
+{
+ glaDrawPixelsTexScaled(x, y, img_w, img_h, format, rect, 1.0f, 1.0f);
+}
+
void glaDrawPixelsSafe_to32(float fx, float fy, int img_w, int img_h, int row_w, float *rectf)
{
float *rf;
@@ -586,8 +591,8 @@ void glaDrawPixelsSafe(float x, float y, int img_w, int img_h, int row_w, int fo
void glaDefine2DArea(rcti *screen_rect)
{
- int sc_w= screen_rect->xmax - screen_rect->xmin;
- int sc_h= screen_rect->ymax - screen_rect->ymin;
+ int sc_w= screen_rect->xmax - screen_rect->xmin + 1;
+ int sc_h= screen_rect->ymax - screen_rect->ymin + 1;
glViewport(screen_rect->xmin, screen_rect->ymin, sc_w, sc_h);
glScissor(screen_rect->xmin, screen_rect->ymin, sc_w, sc_h);
diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c
index 4df50d01fb1..e7b2b01ebfc 100644
--- a/source/blender/editors/screen/screen_ops.c
+++ b/source/blender/editors/screen/screen_ops.c
@@ -47,6 +47,7 @@
#include "BKE_idprop.h"
#include "BKE_library.h"
#include "BKE_main.h"
+#include "BKE_mesh.h"
#include "BKE_multires.h"
#include "BKE_report.h"
#include "BKE_screen.h"
@@ -218,14 +219,14 @@ int ED_operator_uvedit(bContext *C)
EditMesh *em= NULL;
if(obedit && obedit->type==OB_MESH)
- em= EM_GetEditMesh((Mesh *)obedit->data);
+ em= BKE_mesh_get_editmesh((Mesh *)obedit->data);
if(em && (em->faces.first) && (CustomData_has_layer(&em->fdata, CD_MTFACE))) {
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return 1;
}
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return 0;
}
@@ -235,14 +236,14 @@ int ED_operator_uvmap(bContext *C)
EditMesh *em= NULL;
if(obedit && obedit->type==OB_MESH)
- em= EM_GetEditMesh((Mesh *)obedit->data);
+ em= BKE_mesh_get_editmesh((Mesh *)obedit->data);
if(em && (em->faces.first)) {
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return 1;
}
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return 0;
}
@@ -1573,19 +1574,21 @@ static int repeat_history_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
wmWindowManager *wm= CTX_wm_manager(C);
wmOperator *lastop;
- uiMenuItem *head;
+ uiPopupMenu *pup;
+ uiLayout *layout;
int items, i;
items= BLI_countlist(&wm->operators);
if(items==0)
return OPERATOR_CANCELLED;
- head= uiPupMenuBegin(op->type->name, 0);
+ pup= uiPupMenuBegin(C, op->type->name, 0);
+ layout= uiPupMenuLayout(pup);
for (i=items-1, lastop= wm->operators.last; lastop; lastop= lastop->prev, i--)
- uiMenuItemIntO(head, lastop->type->name, 0, op->type->idname, "index", i);
+ uiItemIntO(layout, lastop->type->name, 0, op->type->idname, "index", i);
- uiPupMenuEnd(C, head);
+ uiPupMenuEnd(C, pup);
return OPERATOR_CANCELLED;
}
@@ -1623,44 +1626,6 @@ void SCREEN_OT_repeat_history(wmOperatorType *ot)
/* ********************** redo operator ***************************** */
-static void redo_last_cb(bContext *C, void *arg_op, void *arg2)
-{
- wmOperator *lastop= arg_op;
-
- if(lastop) {
- ED_undo_pop(C);
- WM_operator_repeat(C, lastop);
- }
-
-}
-
-static uiBlock *ui_block_create_redo_last(bContext *C, ARegion *ar, void *arg_op)
-{
- wmWindowManager *wm= CTX_wm_manager(C);
- wmOperator *op= arg_op;
- PointerRNA ptr;
- uiBlock *block;
- int height;
-
- block= uiBeginBlock(C, ar, "redo_last_popup", UI_EMBOSS, UI_HELV);
- uiBlockClearFlag(block, UI_BLOCK_LOOP);
- uiBlockSetFlag(block, UI_BLOCK_KEEP_OPEN|UI_BLOCK_RET_1);
- uiBlockSetFunc(block, redo_last_cb, arg_op, NULL);
-
- if(!op->properties) {
- IDPropertyTemplate val = {0};
- op->properties= IDP_New(IDP_GROUP, val, "wmOperatorProperties");
- }
-
- RNA_pointer_create(&wm->id, op->type->srna, op->properties, &ptr);
- height= uiDefAutoButsRNA(C, block, &ptr);
-
- uiPopupBoundsBlock(block, 4.0f, 0, 0);
- uiEndBlock(C, block);
-
- return block;
-}
-
static int redo_last_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
wmWindowManager *wm= CTX_wm_manager(C);
@@ -1671,10 +1636,8 @@ static int redo_last_invoke(bContext *C, wmOperator *op, wmEvent *event)
if((lastop->type->flag & OPTYPE_REGISTER) && (lastop->type->flag & OPTYPE_UNDO))
break;
- if(!lastop)
- return OPERATOR_CANCELLED;
-
- uiPupBlock(C, ui_block_create_redo_last, lastop);
+ if(lastop)
+ WM_operator_redo_popup(C, lastop);
return OPERATOR_CANCELLED;
}
@@ -1853,27 +1816,28 @@ static void testfunc(bContext *C, void *argv, int arg)
printf("arg %d\n", arg);
}
-static void newlevel1(bContext *C, uiMenuItem *head, void *arg)
+static void newlevel1(bContext *C, uiLayout *layout, void *arg)
{
- uiMenuFunc(head, testfunc, NULL);
+ uiLayoutFunc(layout, testfunc, NULL);
- uiMenuItemVal(head, "First", ICON_PROP_ON, 1);
- uiMenuItemVal(head, "Second", ICON_PROP_CON, 2);
- uiMenuItemVal(head, "Third", ICON_SMOOTHCURVE, 3);
- uiMenuItemVal(head, "Fourth", ICON_SHARPCURVE, 4);
+ uiItemV(layout, "First", ICON_PROP_ON, 1);
+ uiItemV(layout, "Second", ICON_PROP_CON, 2);
+ uiItemV(layout, "Third", ICON_SMOOTHCURVE, 3);
+ uiItemV(layout, "Fourth", ICON_SHARPCURVE, 4);
}
static int testing123(bContext *C, wmOperator *op, wmEvent *event)
{
- uiMenuItem *head= uiPupMenuBegin("Hello world", 0);
+ uiPopupMenu *pup= uiPupMenuBegin(C, "Hello world", 0);
+ uiLayout *layout= uiPupMenuLayout(pup);
- uiMenuContext(head, WM_OP_EXEC_DEFAULT);
- uiMenuItemO(head, ICON_PROP_ON, "SCREEN_OT_region_flip");
- uiMenuItemO(head, ICON_PROP_CON, "SCREEN_OT_screen_full_area");
- uiMenuItemO(head, ICON_SMOOTHCURVE, "SCREEN_OT_region_foursplit");
- uiMenuLevel(head, "Submenu", newlevel1);
+ uiLayoutContext(layout, WM_OP_EXEC_DEFAULT);
+ uiItemO(layout, NULL, ICON_PROP_ON, "SCREEN_OT_region_flip");
+ uiItemO(layout, NULL, ICON_PROP_CON, "SCREEN_OT_screen_full_area");
+ uiItemO(layout, NULL, ICON_SMOOTHCURVE, "SCREEN_OT_region_foursplit");
+ uiItemMenuF(layout, "Submenu", 0, newlevel1);
- uiPupMenuEnd(C, head);
+ uiPupMenuEnd(C, pup);
/* this operator is only for a menu, not used further */
return OPERATOR_CANCELLED;
@@ -2016,7 +1980,7 @@ static ScrArea *biggest_non_image_area(bContext *C)
short foundwin= 0;
for(sa= sc->areabase.first; sa; sa= sa->next) {
- if(sa->winx > 10 && sa->winy > 10) {
+ if(sa->winx > 30 && sa->winy > 30) {
size= sa->winx*sa->winy;
if(sa->spacetype == SPACE_BUTS) {
if(foundwin == 0 && size > bwmaxsize) {
@@ -2483,6 +2447,9 @@ void ED_keymap_screen(wmWindowManager *wm)
WM_keymap_verify_item(keymap, "SCREEN_OT_repeat_last", F4KEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "SCREEN_OT_region_flip", F5KEY, KM_PRESS, 0, 0);
WM_keymap_verify_item(keymap, "SCREEN_OT_redo_last", F6KEY, KM_PRESS, 0, 0);
+
+ RNA_string_set(WM_keymap_add_item(keymap, "SCRIPT_OT_python_file_run", F7KEY, KM_PRESS, 0, 0)->ptr, "filename", "test.py");
+ WM_keymap_verify_item(keymap, "SCRIPT_OT_python_run_ui_scripts", F8KEY, KM_PRESS, 0, 0);
/* files */
WM_keymap_add_item(keymap, "FILE_OT_exec", RETKEY, KM_PRESS, 0, 0);
diff --git a/source/blender/editors/sculpt_paint/Makefile b/source/blender/editors/sculpt_paint/Makefile
index e810f7efbe4..9353116a4bc 100644
--- a/source/blender/editors/sculpt_paint/Makefile
+++ b/source/blender/editors/sculpt_paint/Makefile
@@ -38,7 +38,6 @@ CFLAGS += $(LEVEL_1_C_WARNINGS)
CPPFLAGS += -I$(NAN_GLEW)/include
CPPFLAGS += -I$(OPENGL_HEADERS)
-CPPFLAGS += -I$(NAN_BMFONT)/include
CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include
CPPFLAGS += -I$(NAN_ELBEEM)/include
diff --git a/source/blender/editors/sculpt_paint/SConscript b/source/blender/editors/sculpt_paint/SConscript
index 3e00453e049..01e1d80c24c 100644
--- a/source/blender/editors/sculpt_paint/SConscript
+++ b/source/blender/editors/sculpt_paint/SConscript
@@ -5,7 +5,7 @@ sources = env.Glob('*.c')
incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../imbuf'
incs += ' ../../windowmanager #/intern/guardedalloc #/extern/glew/include'
-incs += ' ../../render/extern/include #/intern/guardedalloc #intern/bmfont'
+incs += ' ../../render/extern/include #/intern/guardedalloc'
incs += ' ../../gpu ../../makesrna'
env.BlenderLib ( 'bf_editors_sculpt_paint', sources, Split(incs), [], libtype=['core'], priority=[40] )
diff --git a/source/blender/editors/sculpt_paint/paint_image.c b/source/blender/editors/sculpt_paint/paint_image.c
index 1ce5f3a348b..77cd06581fd 100644
--- a/source/blender/editors/sculpt_paint/paint_image.c
+++ b/source/blender/editors/sculpt_paint/paint_image.c
@@ -276,7 +276,6 @@ typedef struct ProjPaintState {
float cloneOffset[2];
float projectMat[4][4]; /* Projection matrix, use for getting screen coords */
- float viewMat[4][4];
float viewDir[3]; /* View vector, use for do_backfacecull and for ray casting with an ortho viewport */
float viewPos[3]; /* View location in object relative 3D space, so can compare to verts */
float clipsta, clipend;
@@ -753,8 +752,7 @@ static int project_paint_PickColor(const ProjPaintState *ps, float pt[2], float
}
ibuf = BKE_image_get_ibuf((Image *)tf->tpage, NULL); /* TODO - this may be slow, the only way around it is to have an ibuf index per face */
-
-
+ if (!ibuf) return 0;
if (interp) {
float x, y;
@@ -2972,7 +2970,7 @@ static void project_paint_begin(ProjPaintState *ps)
ps->viewDir[1] = 0.0f;
ps->viewDir[2] = 1.0f;
- view3d_get_object_project_mat(ps->rv3d, ps->ob, ps->projectMat, ps->viewMat);
+ view3d_get_object_project_mat(ps->rv3d, ps->ob, ps->projectMat);
/* viewDir - object relative */
Mat4Invert(ps->ob->imat, ps->ob->obmat);
diff --git a/source/blender/editors/space_action/action_draw.c b/source/blender/editors/space_action/action_draw.c
index b87fdf65904..6eae581aa40 100644
--- a/source/blender/editors/space_action/action_draw.c
+++ b/source/blender/editors/space_action/action_draw.c
@@ -82,7 +82,6 @@
#include "UI_interface.h"
#include "UI_interface_icons.h"
#include "UI_resources.h"
-#include "UI_text.h"
#include "UI_view2d.h"
#include "ED_anim_api.h"
@@ -114,7 +113,6 @@
#endif // XXX old defines for reference only
/* XXX */
-extern void ui_rasterpos_safe(float x, float y, float aspect);
extern void gl_round_box(int mode, float minx, float miny, float maxx, float maxy, float rad);
/********************************** Slider Stuff **************************** */
@@ -138,7 +136,7 @@ static void meshactionbuts(SpaceAction *saction, Object *ob, Key *key)
myortho2(-0.375f, curarea->winx-0.375f, G.v2d->cur.ymin, G.v2d->cur.ymax);
sprintf(str, "actionbuttonswin %d", curarea->win);
- block= uiNewBlock (&curarea->uiblocks, str, UI_EMBOSS, UI_HELV, curarea->win);
+ block= uiNewBlock (&curarea->uiblocks, str, UI_EMBOSS);
x = ACHANNEL_NAMEWIDTH + 1;
y = 0.0f;
@@ -301,8 +299,7 @@ static void action_icu_buts(SpaceAction *saction)
myortho2(-0.375f, curarea->winx-0.375f, G.v2d->cur.ymin, G.v2d->cur.ymax);
sprintf(str, "actionbuttonswin %d", curarea->win);
- block= uiNewBlock (&curarea->uiblocks, str,
- UI_EMBOSS, UI_HELV, curarea->win);
+ block= uiNewBlock (&curarea->uiblocks, str, UI_EMBOSS);
x = (float)ACHANNEL_NAMEWIDTH + 1;
y = 0.0f;
@@ -501,7 +498,7 @@ void draw_channel_names(bAnimContext *ac, SpaceAction *saction, ARegion *ar)
expand= ICON_TRIA_RIGHT;
sel = SEL_ACTC(act);
- strcpy(name, "Action");
+ strcpy(name, act->id.name+2);
}
break;
case ANIMTYPE_FILLMATD: /* object materials (dopesheet) expand widget */
@@ -683,10 +680,14 @@ void draw_channel_names(bAnimContext *ac, SpaceAction *saction, ARegion *ar)
else
mute = ICON_MUTE_IPO_OFF;
- if (EDITABLE_FCU(fcu))
- protect = ICON_UNLOCKED;
+ if (fcu->bezt) {
+ if (EDITABLE_FCU(fcu))
+ protect = ICON_UNLOCKED;
+ else
+ protect = ICON_LOCKED;
+ }
else
- protect = ICON_LOCKED;
+ protect = ICON_ZOOMOUT; // XXX editability is irrelevant here, but this icon is temp...
sel = SEL_FCU(fcu);
@@ -920,8 +921,7 @@ void draw_channel_names(bAnimContext *ac, SpaceAction *saction, ARegion *ar)
else
UI_ThemeColor(TH_TEXT);
offset += 3;
- ui_rasterpos_safe(x+offset, y-4, 1.0f);
- UI_DrawString(G.font, name, 0);
+ UI_DrawString(x+offset, y-4, name);
/* reset offset - for RHS of panel */
offset = 0;
@@ -999,7 +999,7 @@ void draw_channel_strips(bAnimContext *ac, SpaceAction *saction, ARegion *ar)
/* get theme colors */
- UI_GetThemeColor3ubv(TH_SHADE2, col2);
+ UI_GetThemeColor3ubv(TH_BACK, col2);
UI_GetThemeColor3ubv(TH_HILITE, col1);
UI_GetThemeColor3ubv(TH_GROUP, col2a);
UI_GetThemeColor3ubv(TH_GROUP_ACTIVE, col1a);
diff --git a/source/blender/editors/space_action/action_edit.c b/source/blender/editors/space_action/action_edit.c
index adb5d749f71..af074ca348d 100644
--- a/source/blender/editors/space_action/action_edit.c
+++ b/source/blender/editors/space_action/action_edit.c
@@ -60,6 +60,7 @@
#include "RNA_access.h"
#include "RNA_define.h"
+#include "RNA_enum_types.h"
#include "BKE_action.h"
#include "BKE_depsgraph.h"
@@ -300,7 +301,7 @@ static int actkeys_copy_exec(bContext *C, wmOperator *op)
}
}
- /* set notifier tha things have changed */
+ /* set notifier that things have changed */
ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES);
return OPERATOR_FINISHED;
@@ -344,7 +345,7 @@ static int actkeys_paste_exec(bContext *C, wmOperator *op)
/* validate keyframes after editing */
ANIM_editkeyframes_refresh(&ac);
- /* set notifier tha things have changed */
+ /* set notifier that things have changed */
ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES);
return OPERATOR_FINISHED;
@@ -410,7 +411,7 @@ static void insert_action_keys(bAnimContext *ac, short mode)
/* if there's an id */
if (ale->id)
- insertkey(ale->id, ((fcu->grp)?(fcu->grp->name):(NULL)), fcu->rna_path, fcu->array_index, cfra, flag);
+ insert_keyframe(ale->id, NULL, ((fcu->grp)?(fcu->grp->name):(NULL)), fcu->rna_path, fcu->array_index, cfra, flag);
else
insert_vert_fcurve(fcu, cfra, fcu->curval, 0);
}
@@ -440,7 +441,7 @@ static int actkeys_insertkey_exec(bContext *C, wmOperator *op)
/* validate keyframes after editing */
ANIM_editkeyframes_refresh(&ac);
- /* set notifier tha things have changed */
+ /* set notifier that things have changed */
ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES);
return OPERATOR_FINISHED;
@@ -507,7 +508,7 @@ static int actkeys_duplicate_exec(bContext *C, wmOperator *op)
/* validate keyframes after editing */
ANIM_editkeyframes_refresh(&ac);
- /* set notifier tha things have changed */
+ /* set notifier that things have changed */
ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES);
return OPERATOR_FINISHED; // xxx - start transform
@@ -584,7 +585,7 @@ static int actkeys_delete_exec(bContext *C, wmOperator *op)
/* validate keyframes after editing */
ANIM_editkeyframes_refresh(&ac);
- /* set notifier tha things have changed */
+ /* set notifier that things have changed */
ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES);
return OPERATOR_FINISHED;
@@ -647,7 +648,7 @@ static int actkeys_clean_exec(bContext *C, wmOperator *op)
/* validate keyframes after editing */
ANIM_editkeyframes_refresh(&ac);
- /* set notifier tha things have changed */
+ /* set notifier that things have changed */
ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES);
return OPERATOR_FINISHED;
@@ -771,7 +772,7 @@ static int actkeys_sample_exec(bContext *C, wmOperator *op)
/* validate keyframes after editing */
ANIM_editkeyframes_refresh(&ac);
- /* set notifier tha things have changed */
+ /* set notifier that things have changed */
ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES);
return OPERATOR_FINISHED;
@@ -846,7 +847,7 @@ static int actkeys_expo_exec(bContext *C, wmOperator *op)
/* validate keyframes after editing */
ANIM_editkeyframes_refresh(&ac);
- /* set notifier tha things have changed */
+ /* set notifier that things have changed */
ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES);
return OPERATOR_FINISHED;
@@ -872,14 +873,6 @@ void ACT_OT_keyframes_extrapolation_type_set (wmOperatorType *ot)
/* ******************** Set Interpolation-Type Operator *********************** */
-/* defines for set ipo-type for selected keyframes tool */
-EnumPropertyItem prop_actkeys_ipo_types[] = {
- {BEZT_IPO_CONST, "CONSTANT", "Constant Interpolation", ""},
- {BEZT_IPO_LIN, "LINEAR", "Linear Interpolation", ""},
- {BEZT_IPO_BEZ, "BEZIER", "Bezier Interpolation", ""},
- {0, NULL, NULL, NULL}
-};
-
/* this function is responsible for setting interpolation mode for keyframes */
static void setipo_action_keys(bAnimContext *ac, short mode)
{
@@ -924,7 +917,7 @@ static int actkeys_ipo_exec(bContext *C, wmOperator *op)
/* validate keyframes after editing */
ANIM_editkeyframes_refresh(&ac);
- /* set notifier tha things have changed */
+ /* set notifier that things have changed */
ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES);
return OPERATOR_FINISHED;
@@ -945,21 +938,11 @@ void ACT_OT_keyframes_interpolation_type (wmOperatorType *ot)
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
/* id-props */
- RNA_def_enum(ot->srna, "type", prop_actkeys_ipo_types, 0, "Type", "");
+ RNA_def_enum(ot->srna, "type", beztriple_interpolation_mode_items, 0, "Type", "");
}
/* ******************** Set Handle-Type Operator *********************** */
-/* defines for set handle-type for selected keyframes tool */
-EnumPropertyItem prop_actkeys_handletype_types[] = {
- {HD_AUTO, "AUTO", "Auto Handles", ""},
- {HD_VECT, "VECTOR", "Vector Handles", ""},
- {HD_FREE, "FREE", "Free Handles", ""},
- {HD_ALIGN, "ALIGN", "Aligned Handles", ""},
-// {-1, "TOGGLE", "Toggle between Free and Aligned Handles", ""},
- {0, NULL, NULL, NULL}
-};
-
/* this function is responsible for setting handle-type of selected keyframes */
static void sethandles_action_keys(bAnimContext *ac, short mode)
{
@@ -1022,7 +1005,7 @@ static int actkeys_handletype_exec(bContext *C, wmOperator *op)
/* validate keyframes after editing */
ANIM_editkeyframes_refresh(&ac);
- /* set notifier tha things have changed */
+ /* set notifier that things have changed */
ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES);
return OPERATOR_FINISHED;
@@ -1043,7 +1026,7 @@ void ACT_OT_keyframes_handle_type_set (wmOperatorType *ot)
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
/* id-props */
- RNA_def_enum(ot->srna, "type", prop_actkeys_handletype_types, 0, "Type", "");
+ RNA_def_enum(ot->srna, "type", beztriple_handle_type_items, 0, "Type", "");
}
/* ************************************************************************** */
@@ -1051,22 +1034,6 @@ void ACT_OT_keyframes_handle_type_set (wmOperatorType *ot)
/* ***************** Snap Current Frame Operator *********************** */
-/* helper callback for actkeys_cfrasnap_exec() -> used to help get the average time of all selected beztriples */
-// TODO: if some other code somewhere needs this, it'll be time to port this over to keyframes_edit.c!!!
-static short bezt_calc_average(BeztEditData *bed, BezTriple *bezt)
-{
- /* only if selected */
- if (bezt->f2 & SELECT) {
- /* store average time in float (only do rounding at last step */
- bed->f1 += bezt->vec[1][0];
-
- /* increment number of items */
- bed->i1++;
- }
-
- return 0;
-}
-
/* snap current-frame indicator to 'average time' of selected keyframe */
static int actkeys_cfrasnap_exec(bContext *C, wmOperator *op)
{
@@ -1098,7 +1065,7 @@ static int actkeys_cfrasnap_exec(bContext *C, wmOperator *op)
CFRA= (int)floor((bed.f1 / bed.i1) + 0.5f);
}
- /* set notifier tha things have changed */
+ /* set notifier that things have changed */
WM_event_add_notifier(C, NC_SCENE|ND_FRAME, ac.scene);
return OPERATOR_FINISHED;
@@ -1151,6 +1118,10 @@ static void snap_action_keys(bAnimContext *ac, short mode)
memset(&bed, 0, sizeof(BeztEditData));
bed.scene= ac->scene;
+ if (mode == ACTKEYS_SNAP_NEAREST_MARKER) {
+ bed.list.first= (ac->markers) ? ac->markers->first : NULL;
+ bed.list.last= (ac->markers) ? ac->markers->last : NULL;
+ }
/* snap keyframes */
for (ale= anim_data.first; ale; ale= ale->next) {
@@ -1189,7 +1160,7 @@ static int actkeys_snap_exec(bContext *C, wmOperator *op)
/* validate keyframes after editing */
ANIM_editkeyframes_refresh(&ac);
- /* set notifier tha things have changed */
+ /* set notifier that things have changed */
ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES);
return OPERATOR_FINISHED;
@@ -1243,13 +1214,14 @@ static void mirror_action_keys(bAnimContext *ac, short mode)
/* for 'first selected marker' mode, need to find first selected marker first! */
// XXX should this be made into a helper func in the API?
if (mode == ACTKEYS_MIRROR_MARKER) {
- Scene *scene= ac->scene;
TimeMarker *marker= NULL;
/* find first selected marker */
- for (marker= scene->markers.first; marker; marker=marker->next) {
- if (marker->flag & SELECT) {
- break;
+ if (ac->markers) {
+ for (marker= ac->markers->first; marker; marker=marker->next) {
+ if (marker->flag & SELECT) {
+ break;
+ }
}
}
@@ -1304,7 +1276,7 @@ static int actkeys_mirror_exec(bContext *C, wmOperator *op)
/* validate keyframes after editing */
ANIM_editkeyframes_refresh(&ac);
- /* set notifier tha things have changed */
+ /* set notifier that things have changed */
ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES);
return OPERATOR_FINISHED;
diff --git a/source/blender/editors/space_action/action_header.c b/source/blender/editors/space_action/action_header.c
index c7fafece4ba..fa96e1ea81f 100644
--- a/source/blender/editors/space_action/action_header.c
+++ b/source/blender/editors/space_action/action_header.c
@@ -255,7 +255,7 @@ static uiBlock *action_keymenu_transformmenu(bContext *C, ARegion *ar, void *arg
uiBlock *block;
short yco= 0, menuwidth=120;
- block= uiBeginBlock(C, ar, "action_keymenu_transformmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "action_keymenu_transformmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_keymenu_transformmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
@@ -303,7 +303,7 @@ static uiBlock *action_keymenu_snapmenu(bContext *C, ARegion *ar, void *arg_unus
short yco= 0, menuwidth=120;
- block= uiBeginBlock(C, ar, "action_keymenu_snapmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "action_keymenu_snapmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_keymenu_snapmenu, NULL);
if (saction->flag & SACTION_DRAWTIME) {
@@ -365,7 +365,7 @@ static uiBlock *action_keymenu_mirrormenu(bContext *C, ARegion *ar, void *arg_un
uiBlock *block;
short yco= 0, menuwidth=120;
- block= uiBeginBlock(C, ar, "action_keymenu_mirrormenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "action_keymenu_mirrormenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_keymenu_mirrormenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
@@ -419,7 +419,7 @@ static uiBlock *action_keymenu_handlemenu(bContext *C, ARegion *ar, void *arg_un
uiBlock *block;
short yco= 0, menuwidth=120;
- block= uiBeginBlock(C, ar, "action_keymenu_handlemenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "action_keymenu_handlemenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_keymenu_handlemenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
@@ -471,7 +471,7 @@ static uiBlock *action_keymenu_extendmenu(bContext *C, ARegion *ar, void *arg_un
uiBlock *block;
short yco= 0, menuwidth=120;
- block= uiBeginBlock(C, ar, "action_keymenu_extendmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "action_keymenu_extendmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_keymenu_extendmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
@@ -520,7 +520,7 @@ static uiBlock *action_keymenu_intpolmenu(bContext *C, ARegion *ar, void *arg_un
uiBlock *block;
short yco= 0, menuwidth=120;
- block= uiBeginBlock(C, ar, "action_keymenu_intpolmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "action_keymenu_intpolmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_keymenu_intpolmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
@@ -581,7 +581,7 @@ static uiBlock *action_keymenu(bContext *C, ARegion *ar, void *arg_unused)
uiBlock *block;
short yco= 0, menuwidth=120;
- block= uiBeginBlock(C, ar, "action_keymenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "action_keymenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_action_keymenu, NULL);
@@ -670,7 +670,7 @@ static uiBlock *action_framemenu(bContext *C, ARegion *ar, void *arg_unused)
uiBlock *block;
short yco= 0, menuwidth=120;
- block= uiBeginBlock(C, ar, "action_framemenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "action_framemenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_action_keymenu, NULL);
uiDefIconTextBlockBut(block, action_keymenu_transformmenu,
@@ -754,7 +754,7 @@ static uiBlock *action_markermenu(bContext *C, ARegion *ar, void *arg_unused)
uiBlock *block;
short yco= 0, menuwidth=120;
- block= uiBeginBlock(C, ar, "action_markermenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "action_markermenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_markermenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add Marker|M", 0, yco-=20,
@@ -825,7 +825,7 @@ static uiBlock *action_channelmenu_posmenu(bContext *C, ARegion *ar, void *arg_u
uiBlock *block;
short yco= 0, menuwidth=120;
- block= uiBeginBlock(C, ar, "action_channelmenu_posmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "action_channelmenu_posmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_channelmenu_posmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
@@ -879,7 +879,7 @@ static uiBlock *action_channelmenu_groupmenu(bContext *C, ARegion *ar, void *arg
uiBlock *block;
short yco= 0, menuwidth=120;
- block= uiBeginBlock(C, ar, "action_channelmenu_groupmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "action_channelmenu_groupmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_channelmenu_groupmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
@@ -923,7 +923,7 @@ static uiBlock *action_channelmenu_settingsmenu(bContext *C, ARegion *ar, void *
uiBlock *block;
short yco= 0, menuwidth=120;
- block= uiBeginBlock(C, ar, "action_channelmenu_settingsmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "action_channelmenu_settingsmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_channelmenu_settingsmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
@@ -979,7 +979,7 @@ static uiBlock *action_channelmenu(bContext *C, ARegion *ar, void *arg_unused)
uiBlock *block;
short yco= 0, menuwidth=120;
- block= uiBeginBlock(C, ar, "action_channelmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "action_channelmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_channelmenu, NULL);
uiDefIconTextBlockBut(block, action_channelmenu_groupmenu,
@@ -1043,7 +1043,7 @@ static uiBlock *action_gplayermenu(bContext *C, ARegion *ar, void *arg_unused)
uiBlock *block;
short yco= 0, menuwidth=120;
- block= uiBeginBlock(C, ar, "action_gplayermenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "action_gplayermenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_channelmenu, NULL);
uiDefIconTextBlockBut(block, action_channelmenu_settingsmenu,
@@ -1097,7 +1097,7 @@ static uiBlock *action_selectmenu_columnmenu(bContext *C, ARegion *ar, void *arg
uiBlock *block;
short yco= 0, menuwidth=120;
- block= uiBeginBlock(C, ar, "action_selectmenu_columnmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "action_selectmenu_columnmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_selectmenu_columnmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
@@ -1208,7 +1208,7 @@ static uiBlock *action_selectmenu(bContext *C, ARegion *ar, void *arg_unused)
uiBlock *block;
short yco= 0, menuwidth=120;
- block= uiBeginBlock(C, ar, "action_selectmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "action_selectmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_selectmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
@@ -1382,7 +1382,7 @@ static uiBlock *action_viewmenu(bContext *C, ARegion *ar, void *arg_unused)
uiBlock *block;
short yco= 0, menuwidth=120;
- block= uiBeginBlock(C, ar, "viewmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "viewmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_viewmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
@@ -1558,31 +1558,45 @@ static void saction_idpoin_handle(bContext *C, ID *id, int event)
{
SpaceAction *saction= (SpaceAction*)CTX_wm_space_data(C);
Object *obact= CTX_data_active_object(C);
- // AnimData *adt= BKE_id_add_animdata((ID *)obact);
-
+
+ printf("actedit do id: \n");
+
switch (event) {
case UI_ID_BROWSE:
+ printf("browse \n");
case UI_ID_DELETE:
+ printf("browse or delete \n");
saction->action= (bAction*)id;
+
/* we must set this action to be the one used by active object (if not pinned) */
- if (saction->pin == 0)
- obact->adt->action= saction->action;
+ if (saction->pin == 0) {
+ AnimData *adt= BKE_id_add_animdata(&obact->id); /* this only adds if non-existant */
+
+ /* set action */
+ printf("\tset action \n");
+ adt->action= saction->action;
+ }
ED_area_tag_redraw(CTX_wm_area(C));
ED_undo_push(C, "Assign Action");
break;
case UI_ID_RENAME:
+ printf("actedit rename \n");
break;
case UI_ID_ADD_NEW:
+ printf("actedit addnew \n");
/* XXX not implemented */
break;
case UI_ID_OPEN:
+ printf("actedit open \n");
/* XXX not implemented */
break;
case UI_ID_ALONE:
+ printf("actedit alone \n");
/* XXX not implemented */
break;
case UI_ID_PIN:
+ printf("actedit pin \n");
break;
}
}
@@ -1595,7 +1609,7 @@ void action_header_buttons(const bContext *C, ARegion *ar)
uiBlock *block;
int xco, yco= 3, xmax;
- block= uiBeginBlock(C, ar, "header buttons", UI_EMBOSS, UI_HELV);
+ block= uiBeginBlock(C, ar, "header buttons", UI_EMBOSS);
uiBlockSetHandleFunc(block, do_action_buttons, NULL);
xco= ED_area_header_standardbuttons(C, block, yco);
@@ -1606,8 +1620,6 @@ void action_header_buttons(const bContext *C, ARegion *ar)
ANIM_animdata_get_context(C, &ac);
if ((sa->flag & HEADER_NO_PULLDOWN)==0) {
- /* pull down menus */
- uiBlockSetEmboss(block, UI_EMBOSSP);
xmax= GetButStringLength("View");
uiDefPulldownBut(block, action_viewmenu, CTX_wm_area(C),
@@ -1691,7 +1703,7 @@ void action_header_buttons(const bContext *C, ARegion *ar)
/* NAME ETC */
//uiClearButLock();
- /* NAME ETC (it is assumed that */
+ /* NAME ETC */
xco= uiDefIDPoinButs(block, CTX_data_main(C), NULL, (ID*)saction->action, ID_AC, &saction->pin, xco, yco,
saction_idpoin_handle, UI_ID_BROWSE|UI_ID_RENAME|UI_ID_ADD_NEW|UI_ID_DELETE|UI_ID_FAKE_USER|UI_ID_ALONE|UI_ID_PIN);
diff --git a/source/blender/editors/space_action/action_ops.c b/source/blender/editors/space_action/action_ops.c
index eedf4868391..49a0befdbe2 100644
--- a/source/blender/editors/space_action/action_ops.c
+++ b/source/blender/editors/space_action/action_ops.c
@@ -91,13 +91,20 @@ void action_operatortypes(void)
static void action_keymap_keyframes (wmWindowManager *wm, ListBase *keymap)
{
+ wmKeymapItem *kmi;
+
/* action_select.c - selection tools */
/* click-select */
- // TODO: column to alt, left-right to ctrl (for select-linked consistency)
WM_keymap_add_item(keymap, "ACT_OT_keyframes_clickselect", SELECTMOUSE, KM_PRESS, 0, 0);
- RNA_boolean_set(WM_keymap_add_item(keymap, "ACT_OT_keyframes_clickselect", SELECTMOUSE, KM_PRESS, KM_CTRL, 0)->ptr, "column", 1);
- RNA_boolean_set(WM_keymap_add_item(keymap, "ACT_OT_keyframes_clickselect", SELECTMOUSE, KM_PRESS, KM_SHIFT, 0)->ptr, "extend", 1);
- RNA_enum_set(WM_keymap_add_item(keymap, "ACT_OT_keyframes_clickselect", SELECTMOUSE, KM_PRESS, KM_ALT, 0)->ptr, "left_right", ACTKEYS_LRSEL_TEST);
+ kmi= WM_keymap_add_item(keymap, "ACT_OT_keyframes_clickselect", SELECTMOUSE, KM_PRESS, KM_ALT, 0);
+ RNA_boolean_set(kmi->ptr, "column", 1);
+ kmi= WM_keymap_add_item(keymap, "ACT_OT_keyframes_clickselect", SELECTMOUSE, KM_PRESS, KM_SHIFT, 0);
+ RNA_boolean_set(kmi->ptr, "extend", 1);
+ kmi= WM_keymap_add_item(keymap, "ACT_OT_keyframes_clickselect", SELECTMOUSE, KM_PRESS, KM_ALT|KM_SHIFT, 0);
+ RNA_boolean_set(kmi->ptr, "extend", 1);
+ RNA_boolean_set(kmi->ptr, "column", 1);
+ kmi= WM_keymap_add_item(keymap, "ACT_OT_keyframes_clickselect", SELECTMOUSE, KM_PRESS, KM_CTRL, 0);
+ RNA_enum_set(kmi->ptr, "left_right", ACTKEYS_LRSEL_TEST);
/* deselect all */
WM_keymap_add_item(keymap, "ACT_OT_keyframes_select_all_toggle", AKEY, KM_PRESS, 0, 0);
diff --git a/source/blender/editors/space_action/action_select.c b/source/blender/editors/space_action/action_select.c
index 5fb39376fd0..d4782418be7 100644
--- a/source/blender/editors/space_action/action_select.c
+++ b/source/blender/editors/space_action/action_select.c
@@ -74,6 +74,7 @@
#include "ED_keyframing.h"
#include "ED_keyframes_draw.h"
#include "ED_keyframes_edit.h"
+#include "ED_markers.h"
#include "ED_screen.h"
#include "ED_space_api.h"
@@ -83,156 +84,6 @@
#include "action_intern.h"
/* ************************************************************************** */
-/* GENERAL STUFF */
-
-/* used only by mouse_action. It is used to find the location of the nearest
- * keyframe to where the mouse clicked,
- */
-// XXX port this to new listview code...
-// XXX just merge this into the existing code!
-static void *get_nearest_action_key (bAnimContext *ac, int mval[2], float *selx, short *sel, short *ret_type, bActionGroup **par)
-{
- ListBase anim_data = {NULL, NULL};
- ListBase anim_keys = {NULL, NULL};
- bAnimListElem *ale;
- ActKeyColumn *ak;
- View2D *v2d= &ac->ar->v2d;
- int filter;
-
- rctf rectf;
- void *data = NULL;
- float xmin, xmax, x, y;
- int channel_index;
- short found = 0;
-
- /* action-group */
- *par= NULL;
-
-
- UI_view2d_region_to_view(v2d, mval[0], mval[1], &x, &y);
- UI_view2d_listview_view_to_cell(v2d, 0, ACHANNEL_STEP, 0, (float)ACHANNEL_HEIGHT_HALF, x, y, NULL, &channel_index);
-
- /* x-range to check is +/- 7 on either side of mouse click (size of keyframe icon) */
- UI_view2d_region_to_view(v2d, mval[0]-7, mval[1], &rectf.xmin, &rectf.ymin);
- UI_view2d_region_to_view(v2d, mval[0]+7, mval[1], &rectf.xmax, &rectf.ymax);
-
- /* filter data */
- filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CHANNELS);
- ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);
-
- /* get channel */
- ale= BLI_findlink(&anim_data, channel_index);
- if (ale == NULL) {
- /* channel not found */
- printf("Error: animation channel (index = %d) not found in mouse_action_keys() \n", channel_index);
-
- BLI_freelistN(&anim_data);
- return NULL;
- }
-
- {
- /* found match - must return here... */
- Object *nob= ANIM_nla_mapping_get(ac, ale);
- ActKeysInc *aki= init_aki_data(ac, ale);
-
- /* apply NLA-scaling correction? */
- if (nob) {
- xmin= get_action_frame(nob, rectf.xmin);
- xmax= get_action_frame(nob, rectf.xmax);
- }
- else {
- xmin= rectf.xmin;
- xmax= rectf.xmax;
- }
-
- /* make list of keyframes */
- if (ale->key_data) {
- switch (ale->datatype) {
- case ALE_OB:
- {
- Object *ob= (Object *)ale->key_data;
- ob_to_keylist(ob, &anim_keys, NULL, aki);
- }
- break;
- case ALE_ACT:
- {
- bAction *act= (bAction *)ale->key_data;
- action_to_keylist(act, &anim_keys, NULL, aki);
- }
- break;
- case ALE_FCURVE:
- {
- FCurve *fcu= (FCurve *)ale->key_data;
- fcurve_to_keylist(fcu, &anim_keys, NULL, aki);
- }
- break;
- }
- }
- else if (ale->type == ANIMTYPE_GROUP) {
- bActionGroup *agrp= (bActionGroup *)ale->data;
- agroup_to_keylist(agrp, &anim_keys, NULL, aki);
- }
- else if (ale->type == ANIMTYPE_GPDATABLOCK) {
- /* cleanup */
- BLI_freelistN(&anim_data);
-
- /* this channel currently doens't have any keyframes... must ignore! */
- *ret_type= ANIMTYPE_NONE;
- return NULL;
- }
- else if (ale->type == ANIMTYPE_GPLAYER) {
- bGPDlayer *gpl= (bGPDlayer *)ale->data;
- gpl_to_keylist(gpl, &anim_keys, NULL, aki);
- }
-
- /* loop through keyframes, finding one that was clicked on */
- for (ak= anim_keys.first; ak; ak= ak->next) {
- if (IN_RANGE(ak->cfra, xmin, xmax)) {
- *selx= ak->cfra;
- found= 1;
- break;
- }
- }
- /* no matching keyframe found - set to mean frame value so it doesn't actually select anything */
- if (found == 0)
- *selx= ((xmax+xmin) / 2);
-
- /* figure out what to return */
- if (ac->datatype == ANIMCONT_ACTION) {
- *par= ale->owner; /* assume that this is an action group */
- *ret_type= ale->type;
- data = ale->data;
- }
- else if (ac->datatype == ANIMCONT_SHAPEKEY) {
- data = ale->key_data;
- *ret_type= ANIMTYPE_FCURVE;
- }
- else if (ac->datatype == ANIMCONT_DOPESHEET) {
- data = ale->data;
- *ret_type= ale->type;
- }
- else if (ac->datatype == ANIMCONT_GPENCIL) {
- data = ale->data;
- *ret_type= ANIMTYPE_GPLAYER;
- }
-
- /* cleanup tempolary lists */
- BLI_freelistN(&anim_keys);
- anim_keys.first = anim_keys.last = NULL;
-
- BLI_freelistN(&anim_data);
-
- return data;
- }
-
- /* cleanup */
- BLI_freelistN(&anim_data);
-
- *ret_type= ANIMTYPE_NONE;
- return NULL;
-}
-
-/* ************************************************************************** */
/* KEYFRAMES STUFF */
/* ******************** Deselect All Operator ***************************** */
@@ -322,7 +173,7 @@ static int actkeys_deselectall_exec(bContext *C, wmOperator *op)
else
deselect_action_keys(&ac, 1, SELECT_ADD);
- /* set notifier tha things have changed */
+ /* set notifier that things have changed */
ED_area_tag_redraw(CTX_wm_area(C)); // FIXME... should be updating 'keyframes' data context or so instead!
return OPERATOR_FINISHED;
@@ -539,21 +390,19 @@ static void markers_selectkeys_between (bAnimContext *ac)
bAnimListElem *ale;
int filter;
- BeztEditFunc select_cb;
+ BeztEditFunc ok_cb, select_cb;
BeztEditData bed;
float min, max;
/* get extreme markers */
- //get_minmax_markers(1, &min, &max); // FIXME... add back markers api!
- min= (float)ac->scene->r.sfra; // xxx temp code
- max= (float)ac->scene->r.efra; // xxx temp code
-
- if (min==max) return;
+ ED_markers_get_minmax(ac->markers, 1, &min, &max);
min -= 0.5f;
max += 0.5f;
/* get editing funcs + data */
+ ok_cb= ANIM_editkeyframes_ok(BEZT_OK_FRAMERANGE);
select_cb= ANIM_editkeyframes_select(SELECT_ADD);
+
memset(&bed, 0, sizeof(BeztEditData));
bed.f1= min;
bed.f2= max;
@@ -568,11 +417,11 @@ static void markers_selectkeys_between (bAnimContext *ac)
if (nob) {
ANIM_nla_mapping_apply_fcurve(nob, ale->key_data, 0, 1);
- ANIM_fcurve_keys_bezier_loop(&bed, ale->key_data, NULL, select_cb, NULL);
+ ANIM_fcurve_keys_bezier_loop(&bed, ale->key_data, ok_cb, select_cb, NULL);
ANIM_nla_mapping_apply_fcurve(nob, ale->key_data, 1, 1);
}
else {
- ANIM_fcurve_keys_bezier_loop(&bed, ale->key_data, NULL, select_cb, NULL);
+ ANIM_fcurve_keys_bezier_loop(&bed, ale->key_data, ok_cb, select_cb, NULL);
}
}
@@ -581,21 +430,6 @@ static void markers_selectkeys_between (bAnimContext *ac)
}
-/* helper callback for columnselect_action_keys() -> populate list CfraElems with frame numbers from selected beztriples */
-// TODO: if some other code somewhere needs this, it'll be time to port this over to keyframes_edit.c!!!
-static short bezt_to_cfraelem(BeztEditData *bed, BezTriple *bezt)
-{
- /* only if selected */
- if (bezt->f2 & SELECT) {
- CfraElem *ce= MEM_callocN(sizeof(CfraElem), "cfraElem");
- BLI_addtail(&bed->list, ce);
-
- ce->cfra= bezt->vec[1][0];
- }
-
- return 0;
-}
-
/* Selects all visible keyframes in the same frames as the specified elements */
static void columnselect_action_keys (bAnimContext *ac, short mode)
{
@@ -640,9 +474,7 @@ static void columnselect_action_keys (bAnimContext *ac, short mode)
break;
case ACTKEYS_COLUMNSEL_MARKERS_COLUMN: /* list of selected markers */
- // FIXME: markers api needs to be improved for this first!
- //make_marker_cfra_list(&elems, 1);
- return; // XXX currently, this does nothing!
+ ED_markers_make_cfra_list(ac->markers, &bed.list, 1);
break;
default: /* invalid option */
@@ -659,7 +491,7 @@ static void columnselect_action_keys (bAnimContext *ac, short mode)
if (ac->datatype == ANIMCONT_GPENCIL)
filter= (ANIMFILTER_VISIBLE);
else
- filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CURVESONLY);
+ filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CURVESONLY);
ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);
for (ale= anim_data.first; ale; ale= ale->next) {
@@ -717,7 +549,7 @@ static int actkeys_columnselect_exec(bContext *C, wmOperator *op)
else
columnselect_action_keys(&ac, mode);
- /* set notifier tha things have changed */
+ /* set notifier that things have changed */
ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_SELECT);
return OPERATOR_FINISHED;
@@ -751,7 +583,7 @@ void ACT_OT_keyframes_select_column (wmOperatorType *ot)
*/
/* defines for left-right select tool */
-static EnumPropertyItem prop_leftright_select_types[] = {
+static EnumPropertyItem prop_actkeys_leftright_select_types[] = {
{ACTKEYS_LRSEL_TEST, "CHECK", "Check if Select Left or Right", ""},
{ACTKEYS_LRSEL_NONE, "OFF", "Don't select", ""},
{ACTKEYS_LRSEL_LEFT, "LEFT", "Before current frame", ""},
@@ -759,174 +591,32 @@ static EnumPropertyItem prop_leftright_select_types[] = {
{0, NULL, NULL, NULL}
};
+/* sensitivity factor for frame-selections */
+#define FRAME_CLICK_THRESH 0.1f
+
/* ------------------- */
/* option 1) select keyframe directly under mouse */
-static void mouse_action_keys (bAnimContext *ac, int mval[2], short selectmode)
+static void actkeys_mselect_single (bAnimContext *ac, bAnimListElem *ale, short select_mode, float selx)
{
- Scene *sce= NULL;
- Object *ob= NULL;
- bDopeSheet *ads= NULL;
- bAction *act= NULL;
- bActionGroup *agrp= NULL;
- FCurve *fcu= NULL;
- bGPdata *gpd = NULL;
- bGPDlayer *gpl = NULL;
+ bDopeSheet *ads= (ac->datatype == ANIMCONT_DOPESHEET) ? ac->data : NULL;
+ int ds_filter = ((ads) ? (ads->filterflag) : (0));
BeztEditData bed;
BeztEditFunc select_cb, ok_cb;
- void *anim_channel;
- short sel, chan_type = 0;
- float selx = 0.0f, selxa;
-
- /* determine what type of data we are operating on */
- if (ac->datatype == ANIMCONT_ACTION)
- act= (bAction *)ac->data;
- else if (ac->datatype == ANIMCONT_DOPESHEET)
- ads= (bDopeSheet *)ac->data;
- else if (ac->datatype == ANIMCONT_GPENCIL)
- gpd= (bGPdata *)ac->data;
-
- /* get channel and selection info */
- anim_channel= get_nearest_action_key(ac, mval, &selx, &sel, &chan_type, &agrp); // xxx...
- if (anim_channel == NULL)
- return;
-
- switch (chan_type) {
- case ANIMTYPE_FCURVE:
- fcu= (FCurve *)anim_channel;
- break;
- case ANIMTYPE_GROUP:
- agrp= (bActionGroup *)anim_channel;
- break;
-#if 0 // XXX fixme
- case ANIMTYPE_DSMAT:
- ipo= ((Material *)anim_channel)->ipo;
- break;
- case ANIMTYPE_DSLAM:
- ipo= ((Lamp *)anim_channel)->ipo;
- break;
- case ANIMTYPE_DSCAM:
- ipo= ((Camera *)anim_channel)->ipo;
- break;
- case ANIMTYPE_DSCUR:
- ipo= ((Curve *)anim_channel)->ipo;
- break;
- case ANIMTYPE_DSSKEY:
- ipo= ((Key *)anim_channel)->ipo;
- break;
-#endif // XXX fixme
- case ANIMTYPE_FILLACTD:
- act= (bAction *)anim_channel;
- break;
- case ANIMTYPE_OBJECT:
- ob= ((Base *)anim_channel)->object;
- break;
- case ANIMTYPE_SCENE:
- sce= (Scene *)anim_channel;
- break;
- case ANIMTYPE_GPLAYER:
- gpl= (bGPDlayer *)anim_channel;
- break;
- default:
- return;
- }
-
- /* for replacing selection, firstly need to clear existing selection */
- if (selectmode == SELECT_REPLACE) {
- selectmode = SELECT_ADD;
-
- deselect_action_keys(ac, 0, SELECT_SUBTRACT);
-
- if (ELEM(ac->datatype, ANIMCONT_ACTION, ANIMCONT_DOPESHEET)) {
- int filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CHANNELS); /* this should suffice for now */
-
- /* deselect all other channels first */
- ANIM_deselect_anim_channels(ac->data, ac->datatype, 0, ACHANNEL_SETFLAG_CLEAR);
-
- /* Highlight Action-Group or F-Curve? */
- if (agrp) {
- agrp->flag |= AGRP_SELECTED;
- ANIM_set_active_channel(ac->data, ac->datatype, filter, agrp, ANIMTYPE_GROUP);
- }
- else if (fcu) {
- fcu->flag |= FCURVE_SELECTED;
- ANIM_set_active_channel(ac->data, ac->datatype, filter, fcu, ANIMTYPE_FCURVE);
- }
- }
- else if (ac->datatype == ANIMCONT_GPENCIL) {
- ANIM_deselect_anim_channels(ac->data, ac->datatype, 0, ACHANNEL_SETFLAG_CLEAR);
-
- /* Highlight gpencil layer */
- gpl->flag |= GP_LAYER_SELECT;
- //gpencil_layer_setactive(gpd, gpl);
- }
- }
/* get functions for selecting keyframes */
- select_cb= ANIM_editkeyframes_select(selectmode);
+ select_cb= ANIM_editkeyframes_select(select_mode);
ok_cb= ANIM_editkeyframes_ok(BEZT_OK_FRAME);
memset(&bed, 0, sizeof(BeztEditData));
bed.f1= selx;
- /* apply selection to keyframes */
- // XXX use more generic code looper for this stuff...
- if (fcu)
- ANIM_fcurve_keys_bezier_loop(&bed, fcu, ok_cb, select_cb, NULL);
- else if (agrp) {
- for (fcu= agrp->channels.first; fcu && fcu->grp==agrp; fcu= fcu->next)
- ANIM_fcurve_keys_bezier_loop(&bed, fcu, ok_cb, select_cb, NULL);
- }
- else if (act) {
- for (fcu= act->curves.first; fcu; fcu= fcu->next)
- ANIM_fcurve_keys_bezier_loop(&bed, fcu, ok_cb, select_cb, NULL);
- }
- else if (ob) {
- AnimData *adt;
-
- /* Object's own animation */
- if (ob->adt && ob->adt->action) {
- adt= ob->adt;
- act= adt->action;
-
- selxa= get_action_frame(ob, selx); // xxx
- bed.f1= selxa;
-
- for (fcu= act->curves.first; fcu; fcu= fcu->next)
- ANIM_fcurve_keys_bezier_loop(&bed, fcu, ok_cb, select_cb, NULL);
- }
-
- /* 'Sub-Object' animation data */
- // TODO...
- }
- else if (sce) {
- World *wo= sce->world;
- AnimData *adt;
-
- /* Scene's own animation */
- if (sce->adt && sce->adt->action) {
- adt= sce->adt;
- act= adt->action;
-
- for (fcu= act->curves.first; fcu; fcu= fcu->next)
- ANIM_fcurve_keys_bezier_loop(&bed, fcu, ok_cb, select_cb, NULL);
- }
-
- /* World */
- if (wo && wo->adt && wo->adt->action) {
- adt= wo->adt;
- act= adt->action;
-
- for (fcu= act->curves.first; fcu; fcu= fcu->next)
- ANIM_fcurve_keys_bezier_loop(&bed, fcu, ok_cb, select_cb, NULL);
- }
- }
- //else if (gpl)
- // select_gpencil_frame(gpl, (int)selx, selectmode);
+ /* select the nominated keyframe on the given frame */
+ ANIM_animchannel_keys_bezier_loop(&bed, ale, ok_cb, select_cb, NULL, ds_filter);
}
/* Option 2) Selects all the keyframes on either side of the current frame (depends on which side the mouse is on) */
-static void selectkeys_leftright (bAnimContext *ac, short leftright, short select_mode)
+static void actkeys_mselect_leftright (bAnimContext *ac, short leftright, short select_mode)
{
ListBase anim_data = {NULL, NULL};
bAnimListElem *ale;
@@ -936,9 +626,12 @@ static void selectkeys_leftright (bAnimContext *ac, short leftright, short selec
BeztEditData bed;
Scene *scene= ac->scene;
- /* if select mode is replace, deselect all keyframes first */
+ /* if select mode is replace, deselect all keyframes (and channels) first */
if (select_mode==SELECT_REPLACE) {
- select_mode=SELECT_ADD;
+ select_mode= SELECT_ADD;
+
+ /* deselect all other channels and keyframes */
+ ANIM_deselect_anim_channels(ac->data, ac->datatype, 0, ACHANNEL_SETFLAG_CLEAR);
deselect_action_keys(ac, 0, SELECT_SUBTRACT);
}
@@ -949,10 +642,10 @@ static void selectkeys_leftright (bAnimContext *ac, short leftright, short selec
memset(&bed, 0, sizeof(BeztEditFunc));
if (leftright == ACTKEYS_LRSEL_LEFT) {
bed.f1 = -MAXFRAMEF;
- bed.f2 = (float)(CFRA + 0.1f);
+ bed.f2 = (float)(CFRA + FRAME_CLICK_THRESH);
}
else {
- bed.f1 = (float)(CFRA - 0.1f);
+ bed.f1 = (float)(CFRA - FRAME_CLICK_THRESH);
bed.f2 = MAXFRAMEF;
}
@@ -983,7 +676,7 @@ static void selectkeys_leftright (bAnimContext *ac, short leftright, short selec
}
/* Option 3) Selects all visible keyframes in the same frame as the mouse click */
-static void mouse_columnselect_action_keys (bAnimContext *ac, float selx)
+static void actkeys_mselect_column(bAnimContext *ac, short select_mode, float selx)
{
ListBase anim_data= {NULL, NULL};
bAnimListElem *ale;
@@ -996,7 +689,7 @@ static void mouse_columnselect_action_keys (bAnimContext *ac, float selx)
memset(&bed, 0, sizeof(BeztEditData));
/* set up BezTriple edit callbacks */
- select_cb= ANIM_editkeyframes_select(SELECT_ADD);
+ select_cb= ANIM_editkeyframes_select(select_mode);
ok_cb= ANIM_editkeyframes_ok(BEZT_OK_FRAME);
/* loop through all of the keys and select additional keyframes
@@ -1012,7 +705,6 @@ static void mouse_columnselect_action_keys (bAnimContext *ac, float selx)
Object *nob= ANIM_nla_mapping_get(ac, ale);
/* set frame for validation callback to refer to */
- // XXX have a more sensitive range?
if (nob)
bed.f1= get_action_frame(nob, selx);
else
@@ -1042,6 +734,172 @@ static void mouse_columnselect_action_keys (bAnimContext *ac, float selx)
/* ------------------- */
+static void mouse_action_keys (bAnimContext *ac, int mval[2], short select_mode, short column)
+{
+ ListBase anim_data = {NULL, NULL};
+ ListBase anim_keys = {NULL, NULL};
+ bAnimListElem *ale;
+ int filter;
+
+ View2D *v2d= &ac->ar->v2d;
+ int channel_index;
+ short found = 0;
+ float selx = 0.0f;
+ float x, y;
+ rctf rectf;
+
+
+ /* use View2D to determine the index of the channel (i.e a row in the list) where keyframe was */
+ UI_view2d_region_to_view(v2d, mval[0], mval[1], &x, &y);
+ UI_view2d_listview_view_to_cell(v2d, 0, ACHANNEL_STEP, 0, (float)ACHANNEL_HEIGHT_HALF, x, y, NULL, &channel_index);
+
+ /* x-range to check is +/- 7 (in screen/region-space) on either side of mouse click (size of keyframe icon) */
+ UI_view2d_region_to_view(v2d, mval[0]-7, mval[1], &rectf.xmin, &rectf.ymin);
+ UI_view2d_region_to_view(v2d, mval[0]+7, mval[1], &rectf.xmax, &rectf.ymax);
+
+ /* filter data */
+ filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CHANNELS);
+ ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);
+
+ /* try to get channel */
+ ale= BLI_findlink(&anim_data, channel_index);
+ if (ale == NULL) {
+ /* channel not found */
+ printf("Error: animation channel (index = %d) not found in mouse_action_keys() \n", channel_index);
+ return;
+ }
+ else {
+ /* found match - must return here... */
+ Object *nob= ANIM_nla_mapping_get(ac, ale);
+ ActKeysInc *aki= init_aki_data(ac, ale);
+ ActKeyColumn *ak;
+ float xmin, xmax;
+
+ /* apply NLA-scaling correction? */
+ if (nob) {
+ xmin= get_action_frame(nob, rectf.xmin);
+ xmax= get_action_frame(nob, rectf.xmax);
+ }
+ else {
+ xmin= rectf.xmin;
+ xmax= rectf.xmax;
+ }
+
+ /* make list of keyframes */
+ if (ale->key_data) {
+ switch (ale->datatype) {
+ case ALE_OB:
+ {
+ Object *ob= (Object *)ale->key_data;
+ ob_to_keylist(ob, &anim_keys, NULL, aki);
+ }
+ break;
+ case ALE_ACT:
+ {
+ bAction *act= (bAction *)ale->key_data;
+ action_to_keylist(act, &anim_keys, NULL, aki);
+ }
+ break;
+ case ALE_FCURVE:
+ {
+ FCurve *fcu= (FCurve *)ale->key_data;
+ fcurve_to_keylist(fcu, &anim_keys, NULL, aki);
+ }
+ break;
+ }
+ }
+ else if (ale->type == ANIMTYPE_GROUP) {
+ bActionGroup *agrp= (bActionGroup *)ale->data;
+ agroup_to_keylist(agrp, &anim_keys, NULL, aki);
+ }
+ else if (ale->type == ANIMTYPE_GPDATABLOCK) {
+ /* cleanup */
+ // FIXME:...
+ BLI_freelistN(&anim_data);
+ return;
+ }
+ else if (ale->type == ANIMTYPE_GPLAYER) {
+ bGPDlayer *gpl= (bGPDlayer *)ale->data;
+ gpl_to_keylist(gpl, &anim_keys, NULL, aki);
+ }
+
+ /* loop through keyframes, finding one that was clicked on */
+ for (ak= anim_keys.first; ak; ak= ak->next) {
+ if (IN_RANGE(ak->cfra, xmin, xmax)) {
+ selx= ak->cfra;
+ found= 1;
+ break;
+ }
+ }
+
+ /* remove active channel from list of channels for separate treatment (since it's needed later on) */
+ BLI_remlink(&anim_data, ale);
+
+ /* cleanup temporary lists */
+ BLI_freelistN(&anim_keys);
+ anim_keys.first = anim_keys.last = NULL;
+
+ /* free list of channels, since it's not used anymore */
+ BLI_freelistN(&anim_data);
+ }
+
+ /* for replacing selection, firstly need to clear existing selection */
+ if (select_mode == SELECT_REPLACE) {
+ /* reset selection mode for next steps */
+ select_mode = SELECT_ADD;
+
+ /* deselect all keyframes */
+ deselect_action_keys(ac, 0, SELECT_SUBTRACT);
+
+ /* highlight channel clicked on */
+ if (ELEM(ac->datatype, ANIMCONT_ACTION, ANIMCONT_DOPESHEET)) {
+ /* deselect all other channels first */
+ ANIM_deselect_anim_channels(ac->data, ac->datatype, 0, ACHANNEL_SETFLAG_CLEAR);
+
+ /* Highlight Action-Group or F-Curve? */
+ if (ale->type == ANIMTYPE_GROUP) {
+ bActionGroup *agrp= ale->data;
+
+ agrp->flag |= AGRP_SELECTED;
+ ANIM_set_active_channel(ac->data, ac->datatype, filter, agrp, ANIMTYPE_GROUP);
+ }
+ else if (ale->type == ANIMTYPE_FCURVE) {
+ FCurve *fcu= ale->data;
+
+ fcu->flag |= FCURVE_SELECTED;
+ ANIM_set_active_channel(ac->data, ac->datatype, filter, fcu, ANIMTYPE_FCURVE);
+ }
+ }
+ else if (ac->datatype == ANIMCONT_GPENCIL) {
+ ANIM_deselect_anim_channels(ac->data, ac->datatype, 0, ACHANNEL_SETFLAG_CLEAR);
+
+ /* Highlight gpencil layer */
+ //gpl->flag |= GP_LAYER_SELECT;
+ //gpencil_layer_setactive(gpd, gpl);
+ }
+ }
+
+ /* only select keyframes if we clicked on a valid channel and hit something */
+ if (ale) {
+ /* apply selection to keyframes */
+ if (/*gpl*/0) {
+ /* grease pencil */
+ //select_gpencil_frame(gpl, (int)selx, selectmode);
+ }
+ else if (column) {
+ /* select all keyframes in the same frame as the one we hit on the active channel */
+ actkeys_mselect_column(ac, select_mode, selx);
+ }
+ else {
+ /* select the nominated keyframe on the given frame */
+ actkeys_mselect_single(ac, ale, select_mode, selx);
+ }
+
+ /* free this channel */
+ MEM_freeN(ale);
+ }
+}
+
/* handle clicking */
static int actkeys_clickselect_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
@@ -1049,7 +907,7 @@ static int actkeys_clickselect_invoke(bContext *C, wmOperator *op, wmEvent *even
Scene *scene;
ARegion *ar;
View2D *v2d;
- short selectmode;
+ short selectmode, column;
int mval[2];
/* get editor data */
@@ -1066,11 +924,13 @@ static int actkeys_clickselect_invoke(bContext *C, wmOperator *op, wmEvent *even
mval[1]= (event->y - ar->winrct.ymin);
/* select mode is either replace (deselect all, then add) or add/extend */
- // XXX this is currently only available for normal select only
if (RNA_boolean_get(op->ptr, "extend"))
selectmode= SELECT_INVERT;
else
selectmode= SELECT_REPLACE;
+
+ /* column selection */
+ column= RNA_boolean_get(op->ptr, "column");
/* figure out action to take */
if (RNA_enum_get(op->ptr, "left_right")) {
@@ -1083,23 +943,14 @@ static int actkeys_clickselect_invoke(bContext *C, wmOperator *op, wmEvent *even
else
RNA_int_set(op->ptr, "left_right", ACTKEYS_LRSEL_RIGHT);
- selectkeys_leftright(&ac, RNA_enum_get(op->ptr, "left_right"), selectmode);
- }
- else if (RNA_boolean_get(op->ptr, "column")) {
- /* select all the keyframes that occur on the same frame as where the mouse clicked */
- float x;
-
- /* figure out where (the frame) the mouse clicked, and set all keyframes in that frame */
- UI_view2d_region_to_view(v2d, mval[0], mval[1], &x, NULL);
- mouse_columnselect_action_keys(&ac, x);
+ actkeys_mselect_leftright(&ac, RNA_enum_get(op->ptr, "left_right"), selectmode);
}
else {
- /* select keyframe under mouse */
- mouse_action_keys(&ac, mval, selectmode);
- // XXX activate transform...
+ /* select keyframe(s) based upon mouse position*/
+ mouse_action_keys(&ac, mval, selectmode, column);
}
- /* set notifier tha things have changed */
+ /* set notifier that things have changed */
ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_BOTH);
/* for tweak grab to work */
@@ -1112,7 +963,7 @@ void ACT_OT_keyframes_clickselect (wmOperatorType *ot)
ot->name= "Mouse Select Keys";
ot->idname= "ACT_OT_keyframes_clickselect";
- /* api callbacks */
+ /* api callbacks - absolutely no exec() this yet... */
ot->invoke= actkeys_clickselect_invoke;
ot->poll= ED_operator_areaactive;
@@ -1121,9 +972,9 @@ void ACT_OT_keyframes_clickselect (wmOperatorType *ot)
/* id-props */
// XXX should we make this into separate operators?
- RNA_def_enum(ot->srna, "left_right", NULL /* XXX prop_actkeys_clickselect_items */, 0, "Left Right", ""); // ALTKEY
+ RNA_def_enum(ot->srna, "left_right", prop_actkeys_leftright_select_types, 0, "Left Right", ""); // CTRLKEY
RNA_def_boolean(ot->srna, "extend", 0, "Extend Select", ""); // SHIFTKEY
- RNA_def_boolean(ot->srna, "column", 0, "Column Select", ""); // CTRLKEY
+ RNA_def_boolean(ot->srna, "column", 0, "Column Select", ""); // ALTKEY
}
/* ************************************************************************** */
diff --git a/source/blender/editors/space_buttons/buttons_header.c b/source/blender/editors/space_buttons/buttons_header.c
index 40e3564e69b..03b2ce9d11c 100644
--- a/source/blender/editors/space_buttons/buttons_header.c
+++ b/source/blender/editors/space_buttons/buttons_header.c
@@ -29,6 +29,7 @@
#include <string.h>
#include <stdio.h>
+#include "DNA_object_types.h"
#include "DNA_space_types.h"
#include "DNA_scene_types.h"
#include "DNA_screen_types.h"
@@ -40,6 +41,7 @@
#include "BKE_context.h"
#include "BKE_screen.h"
+#include "BKE_utildefines.h"
#include "ED_screen.h"
#include "ED_types.h"
@@ -66,14 +68,10 @@ static void do_viewmenu(bContext *C, void *arg, int event)
ScrArea *sa= CTX_wm_area(C);
switch(event) {
- case 0: /* panel alignment */
case 1:
case 2:
sbuts->align= event;
- if(event) {
- sbuts->re_align= 1;
- // uiAlignPanelStep(sa, 1.0);
- }
+ sbuts->re_align= 1;
break;
}
@@ -87,7 +85,7 @@ static uiBlock *dummy_viewmenu(bContext *C, ARegion *ar, void *arg_unused)
uiBlock *block;
short yco= 0, menuwidth=120;
- block= uiBeginBlock(C, ar, "dummy_viewmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "dummy_viewmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_viewmenu, NULL);
if (sbuts->align == 1) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Horizontal", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
@@ -96,9 +94,6 @@ static uiBlock *dummy_viewmenu(bContext *C, ARegion *ar, void *arg_unused)
if (sbuts->align == 2) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Vertical", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Vertical", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
- if (sbuts->align == 0) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Free", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
- else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Free", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
-
if(sa->headertype==HEADERTOP) {
uiBlockSetDirection(block, UI_DOWN);
}
@@ -124,6 +119,7 @@ static void do_buttons_buttons(bContext *C, void *arg, int event)
WM_event_add_notifier(C, NC_SCENE|ND_FRAME, NULL);
break;
case B_CONTEXT_SWITCH:
+ case B_BUTSPREVIEW:
ED_area_tag_redraw(CTX_wm_area(C));
break;
}
@@ -134,10 +130,11 @@ void buttons_header_buttons(const bContext *C, ARegion *ar)
{
ScrArea *sa= CTX_wm_area(C);
SpaceButs *sbuts= (SpaceButs*)CTX_wm_space_data(C);
+ Object *ob= CTX_data_active_object(C);
uiBlock *block;
- int xco, yco= 3;
+ int xco, yco= 3, dataicon= ICON_OBJECT_DATA;
- block= uiBeginBlock(C, ar, "header buttons", UI_EMBOSS, UI_HELV);
+ block= uiBeginBlock(C, ar, "header buttons", UI_EMBOSS);
uiBlockSetHandleFunc(block, do_buttons_buttons, NULL);
xco= ED_area_header_standardbuttons(C, block, yco);
@@ -145,65 +142,75 @@ void buttons_header_buttons(const bContext *C, ARegion *ar)
if((sa->flag & HEADER_NO_PULLDOWN)==0) {
int xmax;
- /* pull down menus */
- uiBlockSetEmboss(block, UI_EMBOSSP);
-
xmax= GetButStringLength("View");
uiDefPulldownBut(block, dummy_viewmenu, CTX_wm_area(C),
- "View", xco, yco-2, xmax-3, 24, "");
+ "View", xco, yco, xmax-3, 20, "");
- xco+=XIC+xmax;
+ xco+=xmax;
+ }
+ // DATA Icons
+ if(ob) {
+ switch(ob->type) {
+ case OB_EMPTY: dataicon= ICON_EMPTY_DATA; break;
+ case OB_MESH: dataicon= ICON_MESH_DATA; break;
+ case OB_CURVE: dataicon= ICON_CURVE_DATA; break;
+ case OB_SURF: dataicon= ICON_SURFACE_DATA; break;
+ case OB_FONT: dataicon= ICON_FONT_DATA; break;
+ case OB_MBALL: dataicon= ICON_META_DATA; break;
+ case OB_LAMP: dataicon= ICON_LAMP_DATA; break;
+ case OB_CAMERA: dataicon= ICON_CAMERA_DATA; break;
+ case OB_LATTICE: dataicon= ICON_LATTICE_DATA; break;
+ case OB_ARMATURE: dataicon= ICON_ARMATURE_DATA; break;
+ default: break;
+ }
}
uiBlockSetEmboss(block, UI_EMBOSS);
- uiBlockBeginAlign(block);
- uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, ICON_GAME, xco, yco, XIC, YIC, &(sbuts->mainb), 0.0, (float)CONTEXT_LOGIC, 0, 0, "Logic (F4) ");
- uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, ICON_SCRIPT, xco+=XIC, yco, XIC, YIC, &(sbuts->mainb), 0.0, (float)CONTEXT_SCRIPT, 0, 0, "Script ");
- uiDefIconButS(block, ROW, B_BUTSPREVIEW, ICON_MATERIAL_DATA,xco+=XIC, yco, XIC, YIC, &(sbuts->mainb), 0.0, (float)CONTEXT_SHADING, 0, 0, "Shading (F5) ");
- uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, ICON_OBJECT_DATA, xco+=XIC, yco, XIC, YIC, &(sbuts->mainb), 0.0, (float)CONTEXT_OBJECT, 0, 0, "Object (F7) ");
- uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, ICON_EDIT, xco+=XIC, yco, XIC, YIC, &(sbuts->mainb), 0.0, (float)CONTEXT_EDITING, 0, 0, "Editing (F9) ");
- uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, ICON_SCENE_DATA, xco+=XIC, yco, XIC, YIC, &(sbuts->mainb), 0.0, (float)CONTEXT_SCENE, 0, 0, "Scene (F10) ");
+ // if object selection changed, validate button selection
+ if(ob && (ob->type == OB_LAMP) && ELEM3(sbuts->mainb, (float)BCONTEXT_MATERIAL, (float)BCONTEXT_PARTICLE, (float)BCONTEXT_PHYSICS))
+ sbuts->mainb = (float)BCONTEXT_DATA;
+
+ if(ob && (ob->type == OB_EMPTY) && ELEM3(sbuts->mainb, (float)BCONTEXT_MATERIAL, (float)BCONTEXT_TEXTURE, (float)BCONTEXT_PARTICLE))
+ sbuts->mainb = (float)BCONTEXT_DATA;
+
+ if((ob && ELEM(ob->type, OB_CAMERA, OB_ARMATURE)) && ELEM4(sbuts->mainb, (float)BCONTEXT_MATERIAL, (float)BCONTEXT_TEXTURE, (float)BCONTEXT_PARTICLE, (float)BCONTEXT_PHYSICS))
+ sbuts->mainb = (float)BCONTEXT_DATA;
+
+ if((ob && (ob->type != OB_ARMATURE)) && (sbuts->mainb == (float)BCONTEXT_BONE))
+ sbuts->mainb = (float)BCONTEXT_DATA;
- xco+= XIC;
+ if(!ob && !ELEM(sbuts->mainb, (float)BCONTEXT_SCENE, (float)BCONTEXT_WORLD))
+ sbuts->mainb = (float)BCONTEXT_WORLD;
+
+ if((ob && ELEM5(ob->type, OB_EMPTY, OB_MBALL, OB_LAMP, OB_CAMERA, OB_ARMATURE)) && (sbuts->mainb == (float) BCONTEXT_MODIFIER))
+ sbuts->mainb = (float)BCONTEXT_DATA;
- /* select the context to be drawn, per contex/tab the actual context is tested */
- uiBlockSetEmboss(block, UI_EMBOSS); // normal
- switch(sbuts->mainb) {
- case CONTEXT_SCENE:
- uiBlockBeginAlign(block);
- uiDefIconButC(block, ROW, B_CONTEXT_SWITCH, ICON_SCENE, xco+=XIC, yco, XIC, YIC, &(sbuts->tab[CONTEXT_SCENE]), 1.0, (float)TAB_SCENE_RENDER, 0, 0, "Render buttons ");
- uiDefIconButC(block, ROW, B_CONTEXT_SWITCH, ICON_SEQUENCE, xco+=XIC, yco, XIC, YIC, &(sbuts->tab[CONTEXT_SCENE]), 1.0, (float)TAB_SCENE_SEQUENCER, 0, 0, "Sequencer buttons ");
- uiDefIconButC(block, ROW, B_CONTEXT_SWITCH, ICON_ANIM, xco+=XIC, yco, XIC, YIC, &(sbuts->tab[CONTEXT_SCENE]), 1.0, (float)TAB_SCENE_ANIM, 0, 0, "Anim/playback buttons");
- uiDefIconButC(block, ROW, B_CONTEXT_SWITCH, ICON_SOUND, xco+=XIC, yco, XIC, YIC, &(sbuts->tab[CONTEXT_SCENE]), 1.0, (float)TAB_SCENE_SOUND, 0, 0, "Sound block buttons");
-
- break;
- case CONTEXT_OBJECT:
- uiBlockBeginAlign(block);
- uiDefIconButC(block, ROW, B_CONTEXT_SWITCH, ICON_OBJECT_DATA, xco+=XIC, yco, XIC, YIC, &(sbuts->tab[CONTEXT_OBJECT]), 1.0, (float)TAB_OBJECT_OBJECT, 0, 0, "Object buttons ");
- uiDefIconButC(block, ROW, B_CONTEXT_SWITCH, ICON_PHYSICS, xco+=XIC, yco, XIC, YIC, &(sbuts->tab[CONTEXT_OBJECT]), 1.0, (float)TAB_OBJECT_PHYSICS, 0, 0, "Physics buttons");
- uiDefIconButC(block, ROW, B_CONTEXT_SWITCH, ICON_PARTICLES, xco+=XIC, yco, XIC, YIC, &(sbuts->tab[CONTEXT_OBJECT]), 1.0, (float)TAB_OBJECT_PARTICLE, 0, 0, "Particle buttons");
-
- break;
- case CONTEXT_SHADING:
- uiBlockBeginAlign(block);
- uiDefIconButC(block, ROW, B_BUTSPREVIEW, ICON_LAMP, xco+=XIC, yco, XIC, YIC, &(sbuts->tab[CONTEXT_SHADING]), 1.0, (float)TAB_SHADING_LAMP, 0, 0, "Lamp buttons");
- uiDefIconButC(block, ROW, B_BUTSPREVIEW, ICON_MATERIAL, xco+=XIC, yco, XIC, YIC, &(sbuts->tab[CONTEXT_SHADING]), 1.0, (float)TAB_SHADING_MAT, 0, 0, "Material buttons");
- uiDefIconButC(block, ROW, B_BUTSPREVIEW, ICON_TEXTURE, xco+=XIC, yco, XIC, YIC, &(sbuts->tab[CONTEXT_SHADING]), 1.0, (float)TAB_SHADING_TEX, 0, 0, "Texture buttons(F6)");
- uiDefIconButC(block, ROW, B_CONTEXT_SWITCH, ICON_RADIO,xco+=XIC, yco, XIC, YIC, &(sbuts->tab[CONTEXT_SHADING]), 1.0, (float)TAB_SHADING_RAD, 0, 0, "Radiosity buttons");
- uiDefIconButC(block, ROW, B_BUTSPREVIEW, ICON_WORLD, xco+=XIC, yco, XIC, YIC, &(sbuts->tab[CONTEXT_SHADING]), 1.0, (float)TAB_SHADING_WORLD, 0, 0, "World buttons");
-
- break;
- case CONTEXT_EDITING:
-
- break;
- case CONTEXT_SCRIPT:
-
- break;
- case CONTEXT_LOGIC:
-
- break;
+ // Default panels
+ uiBlockBeginAlign(block);
+ uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, ICON_SCENE, xco, yco, XIC, YIC, &(sbuts->mainb), 0.0, (float)BCONTEXT_SCENE, 0, 0, "Scene");
+ uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, ICON_WORLD, xco+=XIC, yco, XIC, YIC, &(sbuts->mainb), 0.0, (float)BCONTEXT_WORLD, 0, 0, "World");
+
+ // Specific panels, check on active object seletion
+ if(ob) {
+ uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, ICON_OBJECT_DATA, xco+=XIC, yco, XIC, YIC, &(sbuts->mainb), 0.0, (float)BCONTEXT_OBJECT, 0, 0, "Object");
+
+ if(ELEM5(ob->type, OB_MESH, OB_CURVE, OB_SURF, OB_FONT, OB_LATTICE))
+ uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, ICON_MODIFIER, xco+=XIC, yco, XIC, YIC, &(sbuts->mainb), 0.0, (float)BCONTEXT_MODIFIER, 0, 0, "Modifier");
+
+ uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, dataicon, xco+=XIC, yco, XIC, YIC, &(sbuts->mainb), 0.0, (float)BCONTEXT_DATA, 0, 0, "Object Data");
+ if((ob->type == OB_ARMATURE))
+ uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, ICON_BONE_DATA, xco+=XIC, yco, XIC, YIC, &(sbuts->mainb), 0.0, (float)BCONTEXT_BONE, 0, 0, "Bone");
+ if(ELEM5(ob->type, OB_MESH, OB_SURF, OB_MBALL, OB_CURVE, OB_FONT))
+ uiDefIconButS(block, ROW, B_BUTSPREVIEW, ICON_MATERIAL, xco+=XIC, yco, XIC, YIC, &(sbuts->mainb), 0.0, (float)BCONTEXT_MATERIAL, 0, 0, "Material");
+ if(ELEM6(ob->type, OB_MESH, OB_SURF, OB_MBALL, OB_CURVE, OB_FONT, OB_LAMP))
+ uiDefIconButS(block, ROW, B_BUTSPREVIEW, ICON_TEXTURE, xco+=XIC, yco, XIC, YIC, &(sbuts->mainb), 0.0, (float)BCONTEXT_TEXTURE, 0, 0, "Texture");
+ if(ELEM5(ob->type, OB_MESH, OB_SURF, OB_MBALL, OB_CURVE, OB_FONT))
+ uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, ICON_PARTICLES, xco+=XIC, yco, XIC, YIC, &(sbuts->mainb), 0.0, (float)BCONTEXT_PARTICLE, 0, 0, "Particles");
+ if(ELEM6(ob->type, OB_MESH, OB_SURF, OB_MBALL, OB_CURVE, OB_FONT, OB_EMPTY))
+ uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, ICON_PHYSICS, xco+=XIC, yco, XIC, YIC, &(sbuts->mainb), 0.0, (float)BCONTEXT_PHYSICS, 0, 0, "Physics");
}
+ xco+= XIC;
uiBlockEndAlign(block);
diff --git a/source/blender/editors/space_buttons/buttons_intern.h b/source/blender/editors/space_buttons/buttons_intern.h
index e979e815e18..6050b4f0562 100644
--- a/source/blender/editors/space_buttons/buttons_intern.h
+++ b/source/blender/editors/space_buttons/buttons_intern.h
@@ -32,33 +32,19 @@ struct ARegion;
struct ARegionType;
struct bContext;
-/* warning: the values of these defines are used in sbuts->tabs[7] */
+/* warning: the values of these defines are used in sbuts->tabs[8] */
/* buts->mainb new */
-#define CONTEXT_SCENE 0
-#define CONTEXT_OBJECT 1
-#define CONTEXT_TYPES 2
-#define CONTEXT_SHADING 3
-#define CONTEXT_EDITING 4
-#define CONTEXT_SCRIPT 5
-#define CONTEXT_LOGIC 6
-
-/* buts->tab new */
-#define TAB_SHADING_MAT 0
-#define TAB_SHADING_TEX 1
-#define TAB_SHADING_RAD 2
-#define TAB_SHADING_WORLD 3
-#define TAB_SHADING_LAMP 4
-
-#define TAB_OBJECT_OBJECT 0
-#define TAB_OBJECT_PHYSICS 1
-#define TAB_OBJECT_PARTICLE 2
-
-#define TAB_SCENE_RENDER 0
-#define TAB_SCENE_WORLD 1
-#define TAB_SCENE_ANIM 2
-#define TAB_SCENE_SOUND 3
-#define TAB_SCENE_SEQUENCER 4
-
+#define BCONTEXT_SCENE 0
+#define BCONTEXT_WORLD 1
+#define BCONTEXT_OBJECT 2
+#define BCONTEXT_DATA 3
+#define BCONTEXT_MATERIAL 4
+#define BCONTEXT_TEXTURE 5
+#define BCONTEXT_PARTICLE 6
+#define BCONTEXT_PHYSICS 7
+#define BCONTEXT_GAME 8
+#define BCONTEXT_BONE 9
+#define BCONTEXT_MODIFIER 10
/* buts->scaflag */
#define BUTS_SENS_SEL 1
@@ -73,13 +59,10 @@ struct bContext;
#define BUTS_SENS_STATE 512
#define BUTS_ACT_STATE 1024
-
/* internal exports only */
/* image_header.c */
void buttons_header_buttons(const struct bContext *C, struct ARegion *ar);
-void buttons_scene(const struct bContext *C, struct ARegion *ar);
-void buttons_object_register(struct ARegionType *art);
#endif /* ED_BUTTONS_INTERN_H */
diff --git a/source/blender/editors/space_buttons/buttons_object.c b/source/blender/editors/space_buttons/buttons_object.c
deleted file mode 100644
index 965376b731a..00000000000
--- a/source/blender/editors/space_buttons/buttons_object.c
+++ /dev/null
@@ -1,216 +0,0 @@
-/**
- * $Id$
- *
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "MEM_guardedalloc.h"
-
-#include "DNA_group_types.h"
-#include "DNA_object_types.h"
-#include "DNA_screen_types.h"
-#include "DNA_space_types.h"
-
-#include "BLI_listbase.h"
-
-#include "BKE_context.h"
-#include "BKE_group.h"
-#include "BKE_main.h"
-#include "BKE_screen.h"
-
-#include "UI_interface.h"
-#include "UI_resources.h"
-
-#include "RNA_access.h"
-
-#include "WM_types.h"
-
-static void object_panel_transform(const bContext *C, Panel *pnl)
-{
- uiLayout *layout= pnl->layout;
- Object *ob= CTX_data_active_object(C);
- PointerRNA obptr;
-
- RNA_id_pointer_create(&ob->id, &obptr);
-
- uiTemplateColumn(layout);
- uiItemR(layout, UI_TSLOT_COLUMN_1, NULL, 0, &obptr, "location");
- uiItemR(layout, UI_TSLOT_COLUMN_2, NULL, 0, &obptr, "rotation");
- uiItemR(layout, UI_TSLOT_COLUMN_3, NULL, 0, &obptr, "scale");
-}
-
-static void object_panel_groups(const bContext *C, Panel *pnl)
-{
- uiLayout *layout= pnl->layout;
- Main *bmain= CTX_data_main(C);
- Object *ob= CTX_data_active_object(C);
- Group *group;
- PointerRNA obptr, groupptr;
- uiLayout *sublayout;
-
- RNA_id_pointer_create(&ob->id, &obptr);
-
- uiTemplateColumn(layout);
- uiItemR(layout, UI_TSLOT_COLUMN_1, NULL, 0, &obptr, "pass_index");
- uiItemR(layout, UI_TSLOT_COLUMN_2, NULL, 0, &obptr, "parent");
-
- /* uiTemplateLeftRight(layout);
- uiItemO(layout, UI_TSLOT_LR_LEFT, NULL, 0, "OBJECT_OT_add_group"); */
-
- for(group=bmain->group.first; group; group=group->id.next) {
- if(object_in_group(ob, group)) {
- RNA_id_pointer_create(&group->id, &groupptr);
-
- sublayout= uiTemplateStack(layout);
-
- uiTemplateLeftRight(sublayout);
- uiItemR(sublayout, UI_TSLOT_LR_LEFT, NULL, 0, &groupptr, "name");
- // uiItemO(sublayout, UI_TSLOT_LR_RIGHT, "", ICON_X, "OBJECT_OT_remove_group");
-
- uiTemplateColumn(sublayout);
- uiItemR(sublayout, UI_TSLOT_COLUMN_1, NULL, 0, &groupptr, "layer");
- uiItemR(sublayout, UI_TSLOT_COLUMN_2, NULL, 0, &groupptr, "dupli_offset");
- }
- }
-}
-
-static void object_panel_display(const bContext *C, Panel *pnl)
-{
- uiLayout *layout= pnl->layout;
- Object *ob= CTX_data_active_object(C);
- PointerRNA obptr;
-
- RNA_id_pointer_create(&ob->id, &obptr);
-
- uiTemplateColumn(layout);
- uiItemR(layout, UI_TSLOT_COLUMN_1, "Type", 0, &obptr, "max_draw_type");
- uiItemR(layout, UI_TSLOT_COLUMN_2, "Bounds", 0, &obptr, "draw_bounds_type");
-
- uiTemplateColumn(layout);
- uiItemLabel(layout, UI_TSLOT_COLUMN_1, "Extra", 0);
- uiItemR(layout, UI_TSLOT_COLUMN_1, "Name", 0, &obptr, "draw_name");
- uiItemR(layout, UI_TSLOT_COLUMN_1, "Axis", 0, &obptr, "draw_axis");
- uiItemR(layout, UI_TSLOT_COLUMN_1, "Wire", 0, &obptr, "draw_wire");
- uiItemLabel(layout, UI_TSLOT_COLUMN_2, "", 0);
- uiItemR(layout, UI_TSLOT_COLUMN_2, "Texture Space", 0, &obptr, "draw_texture_space");
- uiItemR(layout, UI_TSLOT_COLUMN_2, "X-Ray", 0, &obptr, "x_ray");
- uiItemR(layout, UI_TSLOT_COLUMN_2, "Transparency", 0, &obptr, "draw_transparent");
-}
-
-static void object_panel_duplication(const bContext *C, Panel *pnl)
-{
- uiLayout *layout= pnl->layout;
- Object *ob= CTX_data_active_object(C);
- PointerRNA obptr;
-
- RNA_id_pointer_create(&ob->id, &obptr);
-
- uiTemplateColumn(layout);
- uiItemR(layout, UI_TSLOT_COLUMN_1, "Frames", 0, &obptr, "dupli_frames");
- uiItemR(layout, UI_TSLOT_COLUMN_2, "Verts", 0, &obptr, "dupli_verts");
- uiItemR(layout, UI_TSLOT_COLUMN_3, "Faces", 0, &obptr, "dupli_faces");
- uiItemR(layout, UI_TSLOT_COLUMN_4, "Group", 0, &obptr, "use_dupli_group");
-
- if(RNA_boolean_get(&obptr, "dupli_frames")) {
- uiTemplateColumn(layout);
- uiItemR(layout, UI_TSLOT_COLUMN_1, "Start:", 0, &obptr, "dupli_frames_start");
- uiItemR(layout, UI_TSLOT_COLUMN_1, "End:", 0, &obptr, "dupli_frames_end");
-
- uiItemR(layout, UI_TSLOT_COLUMN_2, "On:", 0, &obptr, "dupli_frames_on");
- uiItemR(layout, UI_TSLOT_COLUMN_2, "Off:", 0, &obptr, "dupli_frames_off");
- }
-}
-
-static void object_panel_animation(const bContext *C, Panel *pnl)
-{
- uiLayout *layout= pnl->layout;
- Object *ob= CTX_data_active_object(C);
- PointerRNA obptr;
-
- RNA_id_pointer_create(&ob->id, &obptr);
-
- uiTemplateColumn(layout);
- uiItemLabel(layout, UI_TSLOT_COLUMN_1, "Time Offset:", 0);
- uiItemR(layout, UI_TSLOT_COLUMN_1, "Edit", 0, &obptr, "time_offset_edit");
- uiItemR(layout, UI_TSLOT_COLUMN_1, "Particle", 0, &obptr, "time_offset_particle");
- uiItemR(layout, UI_TSLOT_COLUMN_1, "Parent", 0, &obptr, "time_offset_parent");
- uiItemR(layout, UI_TSLOT_COLUMN_1, NULL, 0, &obptr, "slow_parent");
- uiItemR(layout, UI_TSLOT_COLUMN_1, "Offset: ", 0, &obptr, "time_offset");
-
- uiItemLabel(layout, UI_TSLOT_COLUMN_2, "Tracking:", 0);
- uiItemR(layout, UI_TSLOT_COLUMN_2, "Axis: ", 0, &obptr, "track_axis");
- uiItemR(layout, UI_TSLOT_COLUMN_2, "Up Axis: ", 0, &obptr, "up_axis");
- uiItemR(layout, UI_TSLOT_COLUMN_2, "Rotation", 0, &obptr, "track_rotation");
-}
-
-void buttons_object_register(ARegionType *art)
-{
- PanelType *pt;
-
- /* panels: transform */
- pt= MEM_callocN(sizeof(PanelType), "spacetype buttons panel");
- pt->idname= "OBJECT_PT_transform";
- pt->name= "Transform";
- pt->context= "object";
- pt->draw= object_panel_transform;
- BLI_addtail(&art->paneltypes, pt);
-
- /* panels: groups */
- pt= MEM_callocN(sizeof(PanelType), "spacetype buttons panel");
- pt->idname= "OBJECT_PT_groups";
- pt->name= "Groups";
- pt->context= "object";
- pt->draw= object_panel_groups;
- BLI_addtail(&art->paneltypes, pt);
-
- /* panels: display */
- pt= MEM_callocN(sizeof(PanelType), "spacetype buttons panel");
- pt->idname= "OBJECT_PT_display";
- pt->name= "Display";
- pt->context= "object";
- pt->draw= object_panel_display;
- BLI_addtail(&art->paneltypes, pt);
-
- /* panels: duplication */
- pt= MEM_callocN(sizeof(PanelType), "spacetype buttons panel");
- pt->idname= "OBJECT_PT_duplication";
- pt->name= "Duplication";
- pt->context= "object";
- pt->draw= object_panel_duplication;
- BLI_addtail(&art->paneltypes, pt);
-
- /* panels: animation */
- pt= MEM_callocN(sizeof(PanelType), "spacetype buttons panel");
- pt->idname= "OBJECT_PT_animation";
- pt->name= "Animation";
- pt->context= "object";
- pt->draw= object_panel_animation;
- BLI_addtail(&art->paneltypes, pt);
-}
-
diff --git a/source/blender/editors/space_buttons/buttons_scene.c b/source/blender/editors/space_buttons/buttons_scene.c
deleted file mode 100644
index ca645ab1845..00000000000
--- a/source/blender/editors/space_buttons/buttons_scene.c
+++ /dev/null
@@ -1,333 +0,0 @@
-/**
- * $Id:
- *
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * The Original Code is Copyright (C) 2008 Blender Foundation.
- * All rights reserved.
- *
- *
- * Contributor(s): Blender Foundation
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "DNA_space_types.h"
-#include "DNA_scene_types.h"
-#include "DNA_screen_types.h"
-
-#include "BLI_threads.h"
-
-#include "BKE_context.h"
-#include "BKE_global.h"
-
-#include "RE_pipeline.h"
-
-#include "RNA_access.h"
-#include "RNA_define.h"
-
-#include "UI_interface.h"
-#include "UI_resources.h"
-
-#include "WM_types.h"
-
-#include "buttons_intern.h"
-
-#define R_DISPLAYIMAGE 0
-#define R_DISPLAYWIN 1
-#define R_DISPLAYSCREEN 2
-
-static void render_panel_output(const bContext *C, ARegion *ar)
-{
- uiBlock *block;
- Scene *scene= CTX_data_scene(C);
- //ID *id;
- int a,b;
- //char *strp;
-
- block= uiBeginBlock(C, ar, "render_panel_output", UI_EMBOSS, UI_HELV);
- if(uiNewPanel(C, ar, block, "Output", "Render", 0, 0, 318, 204)==0) return;
-
- uiBlockBeginAlign(block);
- uiDefIconBut(block, BUT, 0, ICON_FILESEL, 10, 190, 20, 20, 0, 0, 0, 0, 0, "Select the directory/name for saving animations");
- uiDefBut(block, TEX,0,"", 31, 190, 279, 20,scene->r.pic, 0.0,79.0, 0, 0, "Directory/name to save animations, # characters defines the position and length of frame numbers");
- uiDefIconBut(block, BUT,0, ICON_FILESEL, 10, 168, 20, 20, 0, 0, 0, 0, 0, "Select the directory/name for a Backbuf image");
- uiDefBut(block, TEX,0,"", 31, 168, 259, 20,scene->r.backbuf, 0.0,79.0, 0, 0, "Image to use as background for rendering");
- uiDefIconButBitS(block, ICONTOG, R_BACKBUF, 0, ICON_CHECKBOX_HLT-1, 290, 168, 20, 20, &scene->r.bufflag, 0.0, 0.0, 0, 0, "Enable/Disable use of Backbuf image");
- uiBlockEndAlign(block);
-
- uiDefButBitI(block, TOG, R_EXTENSION, 0, "Extensions", 10, 142, 100, 20, &scene->r.scemode, 0.0, 0.0, 0, 0, "Adds filetype extensions to the filename when rendering animations");
-
- uiBlockBeginAlign(block);
- uiDefButBitI(block, TOG, R_TOUCH, 0, "Touch", 170, 142, 50, 20, &scene->r.mode, 0.0, 0.0, 0, 0, "Create an empty file before rendering each frame, remove if cancelled (and empty)");
- uiDefButBitI(block, TOG, R_NO_OVERWRITE, 0, "No Overwrite", 220, 142, 90, 20, &scene->r.mode, 0.0, 0.0, 0, 0, "Skip rendering frames when the file exists (image output only)");
- uiBlockEndAlign(block);
-
- /* SET BUTTON */
- uiBlockBeginAlign(block);
- /*XXX id= (ID *)scene->set;
- IDnames_to_pupstring(&strp, NULL, NULL, &(G.main->scene), id, &(G.buts->menunr));
- if(strp[0])
- uiDefButS(block, MENU, 0, strp, 10, 114, 20, 20, &(G.buts->menunr), 0, 0, 0, 0, "Scene to link as a Set");
- MEM_freeN(strp);*/
-
- if(scene->set) {
- uiBlockSetButLock(block, 1, NULL);
- //XXX uiDefIDPoinBut(block, test_scenepoin_but, ID_SCE, 0, "", 31, 114, 100, 20, &(scene->set), "Name of the Set");
- uiBlockClearButLock(block);
- uiDefIconBut(block, BUT, 0, ICON_X, 132, 114, 20, 20, 0, 0, 0, 0, 0, "Remove Set link");
- } else {
- uiDefBut(block, LABEL, 0, "No Set Scene", 31, 114, 200, 20, 0, 0, 0, 0, 0, "");
- }
- uiBlockEndAlign(block);
-
- uiBlockBeginAlign(block);
- uiDefIconButBitI(block, TOGN, R_FIXED_THREADS, 0, ICON_AUTO, 10, 63, 20, 20, &scene->r.mode, 0.0, 0.0, 0, 0, "Automatically set the threads to the number of processors on the system");
- if ((scene->r.mode & R_FIXED_THREADS)==0) {
- char thread_str[16];
- sprintf(thread_str, " Threads: %d", BLI_system_thread_count());
- uiDefBut(block, LABEL, 0, thread_str, 30, 63,80,20, 0, 0, 0, 0, 0, "");
- } else {
- uiDefButS(block, NUM, 0, "Threads:", 30, 63, 80, 20, &scene->r.threads, 1, BLENDER_MAX_THREADS, 0, 0, "Amount of threads for render (takes advantage of multi-core and multi-processor computers)");
- }
- uiBlockEndAlign(block);
-
- uiBlockSetCol(block, TH_AUTO);
-
- uiBlockBeginAlign(block);
- for(b=2; b>=0; b--)
- for(a=0; a<3; a++)
- uiDefButBitS(block, TOG, 1<<(3*b+a), 800,"", (short)(10+18*a),(short)(10+14*b),16,12, &G.winpos, 0, 0, 0, 0, "Render window placement on screen");
- uiBlockEndAlign(block);
-
-#ifdef WITH_OPENEXR
- uiBlockBeginAlign(block);
- uiDefButBitI(block, TOG, R_EXR_TILE_FILE, 0, "Save Buffers", 72, 31, 120, 19, &scene->r.scemode, 0.0, 0.0, 0, 0, "Save tiles for all RenderLayers and used SceneNodes to files in the temp directory (saves memory, allows Full Sampling)");
- if(scene->r.scemode & R_EXR_TILE_FILE)
- uiDefButBitI(block, TOG, R_FULL_SAMPLE, 0, "FullSample", 192, 31, 118, 19, &scene->r.scemode, 0.0, 0.0, 0, 0, "Saves for every OSA sample the entire RenderLayer results (Higher quality sampling but slower)");
- uiBlockEndAlign(block);
-#endif
-
- uiDefButS(block, MENU, 0, "Render Display %t|Render Window %x1|Image Editor %x0|Full Screen %x2",
- 72, 10, 120, 19, &G.displaymode, 0.0, (float)R_DISPLAYWIN, 0, 0, "Sets render output display");
-
- /* Dither control */
- uiDefButF(block, NUM,0, "Dither:", 10,89,100,19, &scene->r.dither_intensity, 0.0, 2.0, 0, 0, "The amount of dithering noise present in the output image (0.0 = no dithering)");
-
- /* Toon shading buttons */
- uiBlockBeginAlign(block);
- uiDefButBitI(block, TOG, R_EDGE, 0,"Edge", 115, 89, 60, 20, &scene->r.mode, 0, 0, 0, 0, "Enable Toon Edge-enhance");
- //XXX uiDefBlockBut(block, edge_render_menu, NULL, "Edge Settings", 175, 89, 135, 20, "Display Edge settings");
- uiBlockEndAlign(block);
-
- uiBlockBeginAlign(block);
- uiDefButBitI(block, TOG, R_NO_TEX, 0, "Disable Tex", 115, 63, 75, 20, &scene->r.scemode, 0.0, 0.0, 0, 0, "Disables Textures for render");
- uiDefButBitI(block, TOG, R_FREE_IMAGE, 0, "Free Tex Images", 210, 63, 100, 20, &scene->r.scemode, 0.0, 0.0, 0, 0, "Frees all Images used by Textures after each render");
- uiBlockEndAlign(block);
-
- uiEndBlock(C, block);
-}
-
-static void do_bake_func(bContext *C, void *unused_v, void *unused_p)
-{
- //XXX objects_bake_render_ui(0);
-}
-
-static void render_panel_bake(const bContext *C, ARegion *ar)
-{
- uiBlock *block;
- Scene *scene= CTX_data_scene(C);
- uiBut *but;
-
- block= uiBeginBlock(C, ar, "render_panel_bake", UI_EMBOSS, UI_HELV);
- uiNewPanelTabbed("Anim", "Render");
- if(uiNewPanel(C, ar, block, "Bake", "Render", 320, 0, 318, 204)==0) return;
-
- but= uiDefBut(block, BUT, 0, "BAKE", 10, 150, 190,40, 0, 0, 0, 0, 0, "Start the bake render for selected Objects");
- uiButSetFunc(but, do_bake_func, NULL, NULL);
-
- uiBlockBeginAlign(block);
- uiDefButBitS(block, TOG, R_BAKE_TO_ACTIVE, 0, "Selected to Active", 10,120,190,20,&scene->r.bake_flag, 0.0, 0, 0, 0, "Bake shading on the surface of selected objects to the active object");
- uiDefButF(block, NUM, 0, "Dist:", 10,100,95,20,&scene->r.bake_maxdist, 0.0, 1000.0, 1, 0, "Maximum distance from active object to other object (in blender units)");
- uiDefButF(block, NUM, 0, "Bias:", 105,100,95,20,&scene->r.bake_biasdist, 0.0, 1000.0, 1, 0, "Bias towards faces further away from the object (in blender units)");
- uiBlockEndAlign(block);
-
- if(scene->r.bake_mode == RE_BAKE_NORMALS)
- uiDefButS(block, MENU, 0, "Normal Space %t|Camera %x0|World %x1|Object %x2|Tangent %x3",
- 10,70,190,20, &scene->r.bake_normal_space, 0, 0, 0, 0, "Choose normal space for baking");
- else if(scene->r.bake_mode == RE_BAKE_AO || scene->r.bake_mode == RE_BAKE_DISPLACEMENT) {
- uiDefButBitS(block, TOG, R_BAKE_NORMALIZE, 0, "Normalized", 10,70,190,20, &scene->r.bake_flag, 0.0, 0, 0, 0,
- scene->r.bake_mode == RE_BAKE_AO ?
- "Bake ambient occlusion normalized, without taking into acount material settings":
- "Normalized displacement value to fit the 'Dist' range"
- );
- }
-
- uiDefButS(block, MENU, 0, "Quad Split Order%t|Quad Split Auto%x0|Quad Split A (0,1,2) (0,2,3)%x1|Quad Split B (1,2,3) (1,3,0)%x2",
- 10,10,190,20, &scene->r.bake_quad_split, 0, 0, 0, 0, "Method to divide quads (use A or B for external applications that use a fixed order)");
-
-#if 0
- uiBlockBeginAlign(block);
- uiDefButBitS(block, TOG, R_BAKE_OSA, 0, "OSA", 10,120,190,20, &scene->r.bake_flag, 0, 0, 0, 0, "Enables Oversampling (Anti-aliasing)");
- uiDefButS(block, ROW,0,"5", 10,100,50,20,&scene->r.bake_osa,2.0,5.0, 0, 0, "Sets oversample level to 5");
- uiDefButS(block, ROW,0,"8", 60,100,45,20,&scene->r.bake_osa,2.0,8.0, 0, 0, "Sets oversample level to 8");
- uiDefButS(block, ROW,0,"11", 105,100,45,20,&scene->r.bake_osa,2.0,11.0, 0, 0, "Sets oversample level to 11");
- uiDefButS(block, ROW,0,"16", 150,100,50,20,&scene->r.bake_osa,2.0,16.0, 0, 0, "Sets oversample level to 16");
-#endif
- uiBlockBeginAlign(block);
- uiDefButS(block, ROW,0,"Full Render", 210,170,120,20,&scene->r.bake_mode, 1.0, RE_BAKE_ALL, 0, 0, "");
- uiDefButS(block, ROW,0,"Ambient Occlusion",210,150,120,20,&scene->r.bake_mode, 1.0, RE_BAKE_AO, 0, 0, "");
- uiDefButS(block, ROW,0,"Shadow", 210,130,120,20,&scene->r.bake_mode, 1.0, RE_BAKE_SHADOW, 0, 0, "");
- uiDefButS(block, ROW,0,"Normals", 210,110,120,20,&scene->r.bake_mode, 1.0, RE_BAKE_NORMALS, 0, 0, "");
- uiDefButS(block, ROW,0,"Textures", 210,90,120,20,&scene->r.bake_mode, 1.0, RE_BAKE_TEXTURE, 0, 0, "");
- uiDefButS(block, ROW,0,"Displacement", 210,70,120,20,&scene->r.bake_mode, 1.0, RE_BAKE_DISPLACEMENT, 0, 0, "");
- uiBlockEndAlign(block);
-
- uiDefButBitS(block, TOG, R_BAKE_CLEAR, 0, "Clear", 210,40,120,20,&scene->r.bake_flag, 0.0, 0, 0, 0, "Clear Images before baking");
-
- uiDefButS(block, NUM, 0,"Margin:", 210,10,120,20,&scene->r.bake_filter, 0.0, 32.0, 0, 0, "Amount of pixels to extend the baked result with, as post process filter");
-
- uiEndBlock(C, block);
-}
-
-static void render_panel_render(const bContext *C, ARegion *ar)
-{
- uiBlock *block;
- Scene *scene= CTX_data_scene(C);
- char str[256];
-
- block= uiBeginBlock(C, ar, "render_panel_render", UI_EMBOSS, UI_HELV);
- if(uiNewPanel(C, ar, block, "Render", "Render", 320, 0, 318, 204)==0) return;
-
- uiBlockBeginAlign(block);
- uiDefButO(block, BUT, "SCREEN_OT_render", WM_OP_INVOKE_DEFAULT, "RENDER", 369, 164, 191,37, "Render the current frame (F12)");
-
-#ifndef DISABLE_YAFRAY
- /* yafray: on request, render engine menu is back again, and moved to Render panel */
- uiDefButS(block, MENU, 0, "Rendering Engine %t|Blender Internal %x0|YafRay %x1",
- 369, 142, 191, 20, &scene->r.renderer, 0, 0, 0, 0, "Choose rendering engine");
-#else
- uiDefButS(block, MENU, 0, "Rendering Engine %t|Blender Internal %x0",
- 369, 142, 191, 20, &scene->r.renderer, 0, 0, 0, 0, "Choose rendering engine");
-#endif /* disable yafray */
-
- uiBlockBeginAlign(block);
- if((scene->r.scemode & R_FULL_SAMPLE) && (scene->r.scemode & R_EXR_TILE_FILE))
- uiDefButBitI(block, TOG, R_OSA, 0, "FSA", 369,109,122,20,&scene->r.mode, 0, 0, 0, 0, "Saves all samples, then composites, and then merges (for best Anti-aliasing)");
- else
- uiDefButBitI(block, TOG, R_OSA, 0, "OSA", 369,109,122,20,&scene->r.mode, 0, 0, 0, 0, "Enables Oversampling (Anti-aliasing)");
- uiDefButS(block, ROW,0,"5", 369,88,29,20,&scene->r.osa,2.0,5.0, 0, 0, "Render 5 samples per pixel for smooth edges (Fast)");
- uiDefButS(block, ROW,0,"8", 400,88,29,20,&scene->r.osa,2.0,8.0, 0, 0, "Render 8 samples per pixel for smooth edges (Recommended)");
- uiDefButS(block, ROW,0,"11", 431,88,29,20,&scene->r.osa,2.0,11.0, 0, 0, "Render 11 samples per pixel for smooth edges (High Quality)");
- uiDefButS(block, ROW,0,"16", 462,88,29,20,&scene->r.osa,2.0,16.0, 0, 0, "Render 16 samples per pixel for smooth edges (Highest Quality)");
- uiBlockEndAlign(block);
-
- uiBlockBeginAlign(block);
- uiDefButBitI(block, TOG, R_MBLUR, 0, "MBLUR", 496,109,64,20,&scene->r.mode, 0, 0, 0, 0, "Enables Motion Blur calculation");
- uiDefButF(block, NUM,0,"Bf:", 496,88,64,20,&scene->r.blurfac, 0.01, 5.0, 10, 2, "Sets motion blur factor");
- uiBlockEndAlign(block);
-
- uiBlockBeginAlign(block);
- uiDefButS(block, NUM,0,"Xparts:", 369,46,95,29,&scene->r.xparts,1.0, 512.0, 0, 0, "Sets the number of horizontal parts to render image in (For panorama sets number of camera slices)");
- uiDefButS(block, NUM,0,"Yparts:", 465,46,95,29,&scene->r.yparts,1.0, 64.0, 0, 0, "Sets the number of vertical parts to render image in");
- uiBlockEndAlign(block);
-
- uiBlockBeginAlign(block);
- uiDefButS(block, ROW,800,"Sky", 369,13,35,20,&scene->r.alphamode,3.0,0.0, 0, 0, "Fill background with sky");
- uiDefButS(block, ROW,800,"Premul", 405,13,50,20,&scene->r.alphamode,3.0,1.0, 0, 0, "Multiply alpha in advance");
- uiDefButS(block, ROW,800,"Key", 456,13,35,20,&scene->r.alphamode,3.0,2.0, 0, 0, "Alpha and color values remain unchanged");
- uiBlockEndAlign(block);
-
- uiDefButS(block, MENU, 0,"Octree resolution %t|64 %x64|128 %x128|256 %x256|512 %x512", 496,13,64,20,&scene->r.ocres,0.0,0.0, 0, 0, "Octree resolution for ray tracing and baking, Use higher values for complex scenes");
-
- uiBlockBeginAlign(block);
- uiDefButBitI(block, TOG, R_SHADOW, 0,"Shadow", 565,172,52,29, &scene->r.mode, 0, 0, 0, 0, "Enable shadow calculation");
- uiDefButBitI(block, TOG, R_SSS, 0,"SSS", 617,172,32,29, &scene->r.mode, 0, 0, 0, 0, "Enable subsurface scattering map rendering");
- uiDefButBitI(block, TOG, R_PANORAMA, 0,"Pano", 649,172,38,29, &scene->r.mode, 0, 0, 0, 0, "Enable panorama rendering (output width is multiplied by Xparts)");
- uiDefButBitI(block, TOG, R_ENVMAP, 0,"EnvMap", 565,142,52,29, &scene->r.mode, 0, 0, 0, 0, "Enable environment map rendering");
- uiDefButBitI(block, TOG, R_RAYTRACE, 0,"Ray",617,142,32,29, &scene->r.mode, 0, 0, 0, 0, "Enable ray tracing");
- uiDefButBitI(block, TOG, R_RADIO, 0,"Radio", 649,142,38,29, &scene->r.mode, 0, 0, 0, 0, "Enable radiosity rendering");
- uiBlockEndAlign(block);
-
- uiDefButS(block, NUMSLI, 0, "Size %: ",
- 565,109,122,20,
- &(scene->r.size), 1.0, 100.0, 0, 0,
- "Render at percentage of frame size");
-
- uiBlockBeginAlign(block);
- uiDefButBitI(block, TOG, R_FIELDS, 0,"Fields", 565,55,60,20,&scene->r.mode, 0, 0, 0, 0, "Enables field rendering");
- uiDefButBitI(block, TOG, R_ODDFIELD, 0,"Odd", 627,55,39,20,&scene->r.mode, 0, 0, 0, 0, "Enables Odd field first rendering (Default: Even field)");
- uiDefButBitI(block, TOG, R_FIELDSTILL, 0,"X", 668,55,19,20,&scene->r.mode, 0, 0, 0, 0, "Disables time difference in field calculations");
-
- sprintf(str, "Filter%%t|Box %%x%d|Tent %%x%d|Quad %%x%d|Cubic %%x%d|Gauss %%x%d|CatRom %%x%d|Mitch %%x%d", R_FILTER_BOX, R_FILTER_TENT, R_FILTER_QUAD, R_FILTER_CUBIC, R_FILTER_GAUSS, R_FILTER_CATROM, R_FILTER_MITCH);
- uiDefButS(block, MENU, 0,str, 565,34,60,20, &scene->r.filtertype, 0, 0, 0, 0, "Set sampling filter for antialiasing");
- uiDefButF(block, NUM,0,"", 627,34,60,20,&scene->r.gauss,0.5, 1.5, 10, 2, "Sets the filter size");
-
- uiDefButBitI(block, TOG, R_BORDER, 0, "Border", 565,13,122,20, &scene->r.mode, 0, 0, 0, 0, "Render a small cut-out of the image (Shift+B to set in the camera view)");
- uiBlockEndAlign(block);
-
- uiEndBlock(C, block);
-}
-
-
-void render_panel_anim(const bContext *C, ARegion *ar)
-{
- Scene *scene= CTX_data_scene(C);
- uiBlock *block;
- uiBut *but;
-
- block= uiBeginBlock(C, ar, "render_panel_anim", UI_EMBOSS, UI_HELV);
- if(uiNewPanel(C, ar, block, "Anim", "Render", 640, 0, 318, 204) == 0) return;
-
- but= uiDefButO(block, BUT, "SCREEN_OT_render", WM_OP_INVOKE_DEFAULT, "ANIM", 692,142,192,47, "Render the animation to disk from start to end frame, (Ctrl+F12)");
- RNA_boolean_set(uiButGetOperatorPtrRNA(but), "anim", 1);
-
- uiBlockSetCol(block, TH_BUT_SETTING1);
- uiBlockBeginAlign(block);
- uiDefButBitI(block, TOG, R_DOSEQ, 0, "Do Sequence",692,114,192,20, &scene->r.scemode, 0, 0, 0, 0, "Enables sequence output rendering (Default: 3D rendering)");
- uiDefButBitI(block, TOG, R_DOCOMP, 0, "Do Composite",692,90,192,20, &scene->r.scemode, 0, 0, 0, 0, "Uses compositing nodes for output rendering");
- uiBlockEndAlign(block);
-
- uiBlockSetCol(block, TH_AUTO);
- uiDefBut(block, BUT, 0, "PLAY",692,50,94,33, 0, 0, 0, 0, 0, "Play rendered images/avi animation (Ctrl+F11), (Play Hotkeys: A-Noskip, P-PingPong)");
- uiDefButS(block, NUM, 0, "rt:",789,50,95,33, &G.rt, -1000.0, 1000.0, 0, 0, "General testing/debug button");
-
- uiBlockBeginAlign(block);
- uiDefButI(block, NUM,0,"Sta:",692,20,94,24, &scene->r.sfra,1.0,MAXFRAMEF, 0, 0, "The start frame of the animation (inclusive)");
- uiDefButI(block, NUM,0,"End:",789,20,95,24, &scene->r.efra,SFRA,MAXFRAMEF, 0, 0, "The end frame of the animation (inclusive)");
- uiDefButI(block, NUM,0,"Step:",692,0,192,18, &scene->frame_step, 1.0, MAXFRAMEF, 0, 0, "Frame Step");
- uiBlockEndAlign(block);
-
- uiEndBlock(C, block);
-}
-
-void buttons_scene(const bContext *C, ARegion *ar)
-{
- SpaceButs *sbuts= (SpaceButs*)CTX_wm_space_data(C);
- int tab= sbuts->tab[CONTEXT_SCENE];
-
- if(tab == TAB_SCENE_RENDER) {
- render_panel_output(C, ar);
- render_panel_render(C, ar);
- render_panel_anim(C, ar);
- render_panel_bake(C, ar);
- }
-}
-
diff --git a/source/blender/editors/space_buttons/space_buttons.c b/source/blender/editors/space_buttons/space_buttons.c
index bae318ff454..9f5e0f5974a 100644
--- a/source/blender/editors/space_buttons/space_buttons.c
+++ b/source/blender/editors/space_buttons/space_buttons.c
@@ -70,6 +70,7 @@ static SpaceLink *buttons_new(const bContext *C)
sbuts= MEM_callocN(sizeof(SpaceButs), "initbuts");
sbuts->spacetype= SPACE_BUTS;
sbuts->scaflag= BUTS_SENS_LINK|BUTS_SENS_ACT|BUTS_CONT_ACT|BUTS_ACT_ACT|BUTS_ACT_LINK;
+ sbuts->align= BUT_AUTO;
/* header */
ar= MEM_callocN(sizeof(ARegion), "header for buts");
@@ -128,7 +129,15 @@ static void buttons_free(SpaceLink *sl)
/* spacetype; init callback */
static void buttons_init(struct wmWindowManager *wm, ScrArea *sa)
{
+ SpaceButs *sbuts= sa->spacedata.first;
+ /* auto-align based on size */
+ if(sbuts->align == BUT_AUTO || !sbuts->align) {
+ if(sa->winx > sa->winy)
+ sbuts->align= BUT_HORIZONTAL;
+ else
+ sbuts->align= BUT_VERTICAL;
+ }
}
static SpaceLink *buttons_duplicate(SpaceLink *sl)
@@ -146,8 +155,7 @@ static void buttons_main_area_init(wmWindowManager *wm, ARegion *ar)
{
ListBase *keymap;
-// ar->v2d.minzoom= ar->v2d.maxzoom= 1.0f;
- UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_PANELS_UI, ar->winx, ar->winy);
+ ED_region_panels_init(wm, ar);
/* own keymap */
keymap= WM_keymap_listbase(wm, "Buttons", SPACE_BUTS, 0); /* XXX weak? */
@@ -158,51 +166,32 @@ static void buttons_main_area_draw(const bContext *C, ARegion *ar)
{
/* draw entirely, view changes should be handled here */
SpaceButs *sbuts= (SpaceButs*)CTX_wm_space_data(C);
-
- if(sbuts->mainb == CONTEXT_OBJECT) {
- int tab= sbuts->tab[CONTEXT_OBJECT];
- int vertical= (sbuts->align == 2);
-
- if(tab == TAB_OBJECT_OBJECT)
- uiRegionPanelLayout(C, ar, vertical, "object");
- }
- else {
- View2D *v2d= &ar->v2d;
- float col[3], fac;
- //int align= 0;
-
- /* clear and setup matrix */
- UI_GetThemeColor3fv(TH_BACK, col);
- glClearColor(col[0], col[1], col[2], 0.0);
- glClear(GL_COLOR_BUFFER_BIT);
-
- UI_view2d_view_ortho(C, v2d);
-
- /* swapbuffers indicator */
- fac= BLI_frand();
- glColor3f(fac, fac, fac);
- glRecti(20, v2d->cur.ymin+2, 30, v2d->cur.ymin+12);
-
- /* panels */
- if(sbuts->mainb == CONTEXT_SCENE)
- buttons_scene(C, ar);
- else
- drawnewstuff();
-
-#if 0
- if(sbuts->align)
- if(sbuts->re_align || sbuts->mainbo!=sbuts->mainb || sbuts->tabo!=sbuts->tab[sbuts->mainb])
- align= 1;
-#endif
-
- uiDrawPanels(C, 1); // XXX align);
- uiMatchPanelsView2d(ar);
-
- /* reset view matrix */
- UI_view2d_view_restore(C);
-
- /* scrollers? */
- }
+ int vertical= (sbuts->align == BUT_VERTICAL);
+
+ if(sbuts->mainb == BCONTEXT_SCENE)
+ ED_region_panels(C, ar, vertical, "scene");
+ else if(sbuts->mainb == BCONTEXT_WORLD)
+ ED_region_panels(C, ar, vertical, "world");
+ else if(sbuts->mainb == BCONTEXT_OBJECT)
+ ED_region_panels(C, ar, vertical, "object");
+ else if(sbuts->mainb == BCONTEXT_DATA)
+ ED_region_panels(C, ar, vertical, "data");
+ else if(sbuts->mainb == BCONTEXT_MATERIAL)
+ ED_region_panels(C, ar, vertical, "material");
+ else if(sbuts->mainb == BCONTEXT_TEXTURE)
+ ED_region_panels(C, ar, vertical, "texture");
+ else if(sbuts->mainb == BCONTEXT_PARTICLE)
+ ED_region_panels(C, ar, vertical, "particle");
+ else if(sbuts->mainb == BCONTEXT_PHYSICS)
+ ED_region_panels(C, ar, vertical, "physics");
+ else if(sbuts->mainb == BCONTEXT_BONE)
+ ED_region_panels(C, ar, vertical, "bone");
+ else if(sbuts->mainb == BCONTEXT_MODIFIER)
+ ED_region_panels(C, ar, vertical, "modifier");
+
+ sbuts->re_align= 0;
+ sbuts->mainbo= sbuts->mainb;
+ sbuts->tabo= sbuts->tab[sbuts->mainb];
}
void buttons_operatortypes(void)
@@ -251,6 +240,17 @@ static void buttons_area_listener(ARegion *ar, wmNotifier *wmn)
case NC_SCENE:
switch(wmn->data) {
case ND_FRAME:
+ case ND_OB_ACTIVE:
+ ED_region_tag_redraw(ar);
+ break;
+ }
+ break;
+ case NC_OBJECT:
+ switch(wmn->data) {
+ case ND_TRANSFORM:
+ case ND_BONE_ACTIVE:
+ case ND_BONE_SELECT:
+ case ND_GEOM_SELECT:
ED_region_tag_redraw(ar);
break;
}
@@ -279,10 +279,7 @@ void ED_spacetype_buttons(void)
art->init= buttons_main_area_init;
art->draw= buttons_main_area_draw;
art->listener= buttons_area_listener;
- art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_VIEW2D|ED_KEYMAP_FRAMES;
-
- buttons_object_register(art);
-
+ art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_FRAMES;
BLI_addhead(&st->regiontypes, art);
/* regions: header */
diff --git a/source/blender/editors/space_file/Makefile b/source/blender/editors/space_file/Makefile
index 480a4ee3889..8f48217473c 100644
--- a/source/blender/editors/space_file/Makefile
+++ b/source/blender/editors/space_file/Makefile
@@ -37,7 +37,6 @@ CFLAGS += $(LEVEL_1_C_WARNINGS)
CPPFLAGS += -I$(NAN_GLEW)/include
CPPFLAGS += -I$(OPENGL_HEADERS)
-CPPFLAGS += -I$(NAN_BMFONT)/include
# not very neat....
CPPFLAGS += -I../../windowmanager
@@ -49,6 +48,7 @@ CPPFLAGS += -I../../makesrna
CPPFLAGS += -I../../imbuf
CPPFLAGS += -I../../render/extern/include
CPPFLAGS += -I../../python
+CPPFLAGS += -I../../blenfont
CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include
# own include
diff --git a/source/blender/editors/space_file/SConscript b/source/blender/editors/space_file/SConscript
index 8302d6eecef..36e042bdaa6 100644
--- a/source/blender/editors/space_file/SConscript
+++ b/source/blender/editors/space_file/SConscript
@@ -4,8 +4,8 @@ Import ('env')
sources = env.Glob('*.c')
incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../imbuf'
-incs += ' ../../blenloader #intern/bmfont ../../makesrna'
-incs += ' ../../render/extern/include '
+incs += ' ../../blenloader ../../makesrna ../../blenfont'
+incs += ' ../../render/extern/include'
incs += ' ../../windowmanager #/intern/guardedalloc #/extern/glew/include'
defs = []
diff --git a/source/blender/editors/space_file/file_draw.c b/source/blender/editors/space_file/file_draw.c
index c65c486d4bb..55b2910f769 100644
--- a/source/blender/editors/space_file/file_draw.c
+++ b/source/blender/editors/space_file/file_draw.c
@@ -37,7 +37,6 @@
#include "BIF_gl.h"
#include "BIF_glutil.h"
-#include "BMF_Api.h"
#include "BKE_colortools.h"
#include "BKE_context.h"
@@ -45,12 +44,16 @@
#include "BKE_global.h"
#include "BKE_utildefines.h"
+#include "BLF_api.h"
+
#include "DNA_space_types.h"
#include "DNA_scene_types.h"
#include "DNA_screen_types.h"
#include "DNA_userdef_types.h"
#include "DNA_windowmanager_types.h"
+#include "ED_datafiles.h"
+
#include "IMB_imbuf_types.h"
#include "IMB_imbuf.h"
@@ -66,7 +69,6 @@
#include "UI_interface.h"
#include "UI_interface_icons.h"
#include "UI_resources.h"
-#include "UI_text.h"
#include "UI_view2d.h"
#include "WM_api.h"
@@ -90,8 +92,6 @@ enum {
B_FS_PARENT,
} eFile_ButEvents;
-/* XXX very bad, need to check font code */
-static int gFontsize=12;
static void do_file_buttons(bContext *C, void *arg, int event)
{
@@ -127,7 +127,7 @@ void file_draw_buttons(const bContext *C, ARegion *ar)
/* HEADER */
sprintf(name, "win %p", ar);
- block = uiBeginBlock(C, ar, name, UI_EMBOSS, UI_HELV);
+ block = uiBeginBlock(C, ar, name, UI_EMBOSS);
uiBlockSetHandleFunc(block, do_file_buttons, NULL);
/* XXXX
@@ -135,8 +135,8 @@ void file_draw_buttons(const bContext *C, ARegion *ar)
*/
/* space available for load/save buttons? */
- slen = UI_GetStringWidth(G.font, sfile->params->title, 0);
- loadbutton= slen > 60 ? slen + 20 : MAX2(80, 20+UI_GetStringWidth(G.font, params->title, 0));
+ slen = UI_GetStringWidth(sfile->params->title);
+ loadbutton= slen > 60 ? slen + 20 : MAX2(80, 20+UI_GetStringWidth(params->title));
if(ar->winx > loadbutton+20) {
if(params->title[0]==0) {
loadbutton= 0;
@@ -150,24 +150,10 @@ void file_draw_buttons(const bContext *C, ARegion *ar)
uiDefBut(block, TEX, 0 /* XXX B_FS_DIRNAME */,"", xmin+2, filebuty2, xmax-xmin-loadbutton-4, 21, params->dir, 0.0, (float)FILE_MAXFILE-1, 0, 0, "");
if(loadbutton) {
- uiSetCurFont(block, UI_HELV);
uiDefBut(block, BUT, B_FS_EXEC, params->title, xmax-loadbutton, filebuty2, loadbutton, 21, params->dir, 0.0, (float)FILE_MAXFILE-1, 0, 0, "");
uiDefBut(block, BUT, B_FS_CANCEL, "Cancel", xmax-loadbutton, filebuty1, loadbutton, 21, params->file, 0.0, (float)FILE_MAXFILE-1, 0, 0, "");
}
-#if 0
- /* menu[0] = NULL happens when no .Bfs is there, and first time browse
- disallow external directory browsing for databrowse */
-
- if(menu[0] && (params->type != FILE_MAIN)) {
- uiDefButS(block, MENU, 0 /* B_FS_DIR_MENU */, menu, xmin, filebuty2, fsmenubut_width, 21, &params->menu, 0, 0, 0, 0, "");
- uiDefBut(block, BUT, 0 /* B_FS_BOOKMARK */, "B", xmin, filebuty1, bookmarkbut_width, 21, 0, 0, 0, 0, 0, "Bookmark current directory");
- }
-
- MEM_freeN(menu);
-#endif
-
-
uiEndBlock(C, block);
uiDrawBlock(C, block);
}
@@ -183,8 +169,6 @@ static void draw_tile(short sx, short sy, short width, short height, int colorid
UI_ThemeColorShade(colorid, shade);
uiSetRoundBox(15);
- // glRecti(sx, sy - height, sx + width, sy);
-
uiRoundBox(sx, sy - height, sx + width, sy, 6);
}
@@ -198,14 +182,14 @@ static float shorten_string(char* string, float w, int flag)
float sw = 0;
float pad = 0;
- sw = UI_GetStringWidth(G.font, string,0);
+ sw = file_string_width(string);
if (flag == FILE_SHORTEN_FRONT) {
char *s = string;
BLI_strncpy(temp, "...", 4);
- pad = UI_GetStringWidth(G.font, temp,0);
+ pad = file_string_width(temp);
while (s && (sw+pad>w)) {
s++;
- sw = UI_GetStringWidth(G.font, s,0);
+ sw = file_string_width(s);
shortened = 1;
}
if (shortened) {
@@ -219,7 +203,7 @@ static float shorten_string(char* string, float w, int flag)
while (sw>w) {
int slen = strlen(string);
string[slen-1] = '\0';
- sw = UI_GetStringWidth(G.font, s,0);
+ sw = file_string_width(s);
shortened = 1;
}
if (shortened) {
@@ -270,7 +254,8 @@ static void file_draw_icon(short sx, short sy, int icon, short width, short heig
UI_icon_draw_aspect_blended(x, y, icon, 1.f, blend);
}
-static void file_draw_string(short sx, short sy, const char* string, short width, short height, int flag)
+
+static void file_draw_string(short sx, short sy, const char* string, float width, short height, int flag)
{
short soffs;
char fname[FILE_MAXFILE];
@@ -284,16 +269,8 @@ static void file_draw_string(short sx, short sy, const char* string, short width
x = (float)(sx);
y = (float)(sy-height);
- // XXX was using ui_rasterpos_safe
- glRasterPos2f(x, y);
- UI_RasterPos(x, y);
-
- /* XXX TODO: handling of international fonts.
- TODO: proper support for utf8 in languages different from ja_JP abd zh_CH
- needs update of iconv in lib/windows to support getting the system language string
- */
- UI_DrawString(G.font, fname, 0);
-
+ BLF_position(x, y, 0);
+ BLF_draw(fname);
}
void file_calc_previews(const bContext *C, ARegion *ar)
@@ -336,7 +313,7 @@ void file_draw_previews(const bContext *C, ARegion *ar)
ED_fileselect_layout_tilepos(layout, i, &sx, &sy);
sx += v2d->tot.xmin+2;
sy = v2d->tot.ymax - sy;
- file = filelist_file(files, i);
+ file = filelist_file(files, i);
if (file->flags & ACTIVE) {
colorid = TH_HILITE;
@@ -358,29 +335,54 @@ void file_draw_previews(const bContext *C, ARegion *ar)
}
if (imb) {
- float fx = ((float)layout->prv_w - (float)imb->x)/2.0f;
- float fy = ((float)layout->prv_h - (float)imb->y)/2.0f;
- float dx = (fx + 0.5f + sfile->layout->prv_border_x);
- float dy = (fy + 0.5f - sfile->layout->prv_border_y);
- short xco = (float)sx + dx;
- short yco = (float)sy - sfile->layout->prv_h + dy;
-
+ float fx, fy;
+ float dx, dy;
+ short xco, yco;
+ float scaledx, scaledy;
+ float scale;
+ short ex, ey;
+
+ if ( (imb->x > layout->prv_w) || (imb->y > layout->prv_h) ) {
+ if (imb->x > imb->y) {
+ scaledx = (float)layout->prv_w;
+ scaledy = ( (float)imb->y/(float)imb->x )*layout->prv_w;
+ scale = scaledx/imb->x;
+ }
+ else {
+ scaledy = (float)layout->prv_h;
+ scaledx = ( (float)imb->x/(float)imb->y )*layout->prv_h;
+ scale = scaledy/imb->y;
+ }
+ } else {
+ scaledx = (float)imb->x;
+ scaledy = (float)imb->y;
+ scale = 1.0;
+ }
+ ex = (short)scaledx;
+ ey = (short)scaledy;
+ fx = ((float)layout->prv_w - (float)ex)/2.0f;
+ fy = ((float)layout->prv_h - (float)ey)/2.0f;
+ dx = (fx + 0.5f + sfile->layout->prv_border_x);
+ dy = (fy + 0.5f - sfile->layout->prv_border_y);
+ xco = (float)sx + dx;
+ yco = (float)sy - sfile->layout->prv_h + dy;
+
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
/* shadow */
if (!is_icon && (file->flags & IMAGEFILE))
- uiDrawBoxShadow(220, xco, yco, xco + imb->x, yco + imb->y);
+ uiDrawBoxShadow(220, xco, yco, xco + ex, yco + ey);
glEnable(GL_BLEND);
/* the image */
glColor4f(1.0, 1.0, 1.0, 1.0);
- glaDrawPixelsTex(xco, yco, imb->x, imb->y, GL_UNSIGNED_BYTE, imb->rect);
+ glaDrawPixelsTexScaled(xco, yco, imb->x, imb->y, GL_UNSIGNED_BYTE, imb->rect, scale, scale);
/* border */
if (!is_icon && (file->flags & IMAGEFILE)) {
glColor4f(0.0f, 0.0f, 0.0f, 0.4f);
- fdrawbox(xco, yco, xco + imb->x, yco + imb->y);
+ fdrawbox(xco, yco, xco + ex, yco + ey);
}
glDisable(GL_BLEND);
@@ -450,17 +452,14 @@ void file_draw_list(const bContext *C, ARegion *ar)
if (offset<0) offset=0;
/* alternating flat shade background */
- for (i=0; (i <= layout->rows); ++i)
+ for (i=0; (i <= layout->rows); i+=2)
{
sx = v2d->cur.xmin;
sy = v2d->cur.ymax - i*(layout->tile_h+2*layout->tile_border_y) - layout->tile_border_y;
-
- if (i % 2) {
- UI_ThemeColor(TH_BACK);
- } else {
- UI_ThemeColorShade(TH_BACK, -7);
- }
+
+ UI_ThemeColorShade(TH_BACK, -7);
glRectf(v2d->cur.xmin, sy, v2d->cur.xmax, sy+layout->tile_h+2*layout->tile_border_y);
+
}
/* vertical column dividers */
@@ -500,48 +499,47 @@ void file_draw_list(const bContext *C, ARegion *ar)
UI_ThemeColor4(TH_TEXT);
-
- sw = UI_GetStringWidth(G.font, file->relname, 0);
+ sw = file_string_width(file->relname);
file_draw_string(spos, sy, file->relname, sw, layout->tile_h, FILE_SHORTEN_END);
- spos += filelist_column_len(sfile->files, COLUMN_NAME) + 10;
+ spos += layout->column_widths[COLUMN_NAME] + 12;
if (params->display == FILE_SHOWSHORT) {
if (!(file->type & S_IFDIR)) {
- sw = UI_GetStringWidth(G.font, file->size, 0);
- spos += filelist_column_len(sfile->files, COLUMN_SIZE) + 10 - sw;
- file_draw_string(spos, sy, file->size, sw, layout->tile_h, FILE_SHORTEN_END);
+ sw = file_string_width(file->size);
+ spos += layout->column_widths[COLUMN_SIZE] + 12 - sw;
+ file_draw_string(spos, sy, file->size, sw+1, layout->tile_h, FILE_SHORTEN_END);
}
} else {
#if 0 // XXX TODO: add this for non-windows systems
/* rwx rwx rwx */
spos += 20;
- sw = UI_GetStringWidth(G.font, file->mode1, 0);
+ sw = UI_GetStringWidth(file->mode1);
file_draw_string(spos, sy, file->mode1, sw, layout->tile_h);
spos += 30;
- sw = UI_GetStringWidth(G.font, file->mode2, 0);
+ sw = UI_GetStringWidth(file->mode2);
file_draw_string(spos, sy, file->mode2, sw, layout->tile_h);
spos += 30;
- sw = UI_GetStringWidth(G.font, file->mode3, 0);
+ sw = UI_GetStringWidth(file->mode3);
file_draw_string(spos, sy, file->mode3, sw, layout->tile_h);
spos += 30;
- sw = UI_GetStringWidth(G.font, file->owner, 0);
+ sw = UI_GetStringWidth(file->owner);
file_draw_string(spos, sy, file->owner, sw, layout->tile_h);
#endif
- sw = UI_GetStringWidth(G.font, file->date, 0);
+ sw = file_string_width(file->date);
file_draw_string(spos, sy, file->date, sw, layout->tile_h, FILE_SHORTEN_END);
- spos += filelist_column_len(sfile->files, COLUMN_DATE) + 10;
+ spos += layout->column_widths[COLUMN_DATE] + 12;
- sw = UI_GetStringWidth(G.font, file->time, 0);
+ sw = file_string_width(file->time);
file_draw_string(spos, sy, file->time, sw, layout->tile_h, FILE_SHORTEN_END);
- spos += filelist_column_len(sfile->files, COLUMN_TIME) + 10;
+ spos += layout->column_widths[COLUMN_TIME] + 12;
if (!(file->type & S_IFDIR)) {
- sw = UI_GetStringWidth(G.font, file->size, 0);
- spos += filelist_column_len(sfile->files, COLUMN_SIZE) + 10 - sw;
+ sw = file_string_width(file->size);
+ spos += layout->column_widths[COLUMN_SIZE] + 12 - sw;
file_draw_string(spos, sy, file->size, sw, layout->tile_h, FILE_SHORTEN_END);
}
}
@@ -553,20 +551,29 @@ static void file_draw_fsmenu_category(const bContext *C, ARegion *ar, FSMenuCate
struct FSMenu* fsmenu = fsmenu_get();
char bookmark[FILE_MAX];
int nentries = fsmenu_get_nentries(fsmenu, category);
- int linestep = gFontsize*2.0f;
+
short sx, sy, xpos, ypos;
int bmwidth = ar->v2d.cur.xmax - ar->v2d.cur.xmin - 2*TILE_BORDER_X - ICON_DEFAULT_WIDTH - 4;
- int fontsize = gFontsize;
+ int fontsize = file_font_pointsize();
+ int cat_icon;
int i;
-
sx = ar->v2d.cur.xmin + TILE_BORDER_X;
sy = *starty;
UI_ThemeColor(TH_TEXT_HI);
file_draw_string(sx, sy, category_name, bmwidth, fontsize, FILE_SHORTEN_END);
- sy -= linestep;
+ sy -= fontsize*2.0f;
+
+ switch(category) {
+ case FS_CATEGORY_SYSTEM:
+ cat_icon = ICON_DISK_DRIVE; break;
+ case FS_CATEGORY_BOOKMARKS:
+ cat_icon = ICON_BOOKMARKS; break;
+ case FS_CATEGORY_RECENT:
+ cat_icon = ICON_FILE_FOLDER; break;
+ }
for (i=0; i< nentries && (sy > ar->v2d.cur.ymin) ;++i) {
char *fname = fsmenu_get_entry(fsmenu, category, i);
@@ -576,15 +583,16 @@ static void file_draw_fsmenu_category(const bContext *C, ARegion *ar, FSMenuCate
BLI_strncpy(bookmark, fname, FILE_MAX);
sl = strlen(bookmark)-1;
+ if (sl > 1) {
while (bookmark[sl] == '\\' || bookmark[sl] == '/') {
bookmark[sl] = '\0';
sl--;
}
+ }
+
if (fsmenu_is_selected(fsmenu, category, i) ) {
UI_ThemeColor(TH_HILITE);
- //uiSetRoundBox(15);
- uiRoundBox(sx, sy - linestep, ar->v2d.cur.xmax - TILE_BORDER_X, sy, 4.0f);
- // glRectf(ar->v2d.cur.xmin, sy-linestep, ar->v2d.cur.xmax + 2*TILE_BORDER_X, sy);
+ uiRoundBox(sx, sy - fontsize*2.0f, ar->v2d.cur.xmax - TILE_BORDER_X, sy, 4.0f);
UI_ThemeColor(TH_TEXT);
} else {
UI_ThemeColor(TH_TEXT_HI);
@@ -593,10 +601,10 @@ static void file_draw_fsmenu_category(const bContext *C, ARegion *ar, FSMenuCate
xpos = sx;
ypos = sy - (TILE_BORDER_Y * 0.5);
- file_draw_icon(xpos, ypos, ICON_FILE_FOLDER, ICON_DEFAULT_WIDTH, ICON_DEFAULT_WIDTH);
+ file_draw_icon(xpos, ypos, cat_icon, ICON_DEFAULT_WIDTH, ICON_DEFAULT_WIDTH);
xpos += ICON_DEFAULT_WIDTH + 4;
file_draw_string(xpos, ypos, bookmark, bmwidth, fontsize, FILE_SHORTEN_FRONT);
- sy -= linestep;
+ sy -= fontsize*2.0;
fsmenu_set_pos(fsmenu, category, i, xpos, ypos);
}
}
@@ -606,9 +614,9 @@ static void file_draw_fsmenu_category(const bContext *C, ARegion *ar, FSMenuCate
void file_draw_fsmenu(const bContext *C, ARegion *ar)
{
- int linestep = gFontsize*2.0f;
+ int linestep = file_font_pointsize()*2.0f;
short sy= ar->v2d.cur.ymax-2*TILE_BORDER_Y;
-
+
file_draw_fsmenu_category(C, ar, FS_CATEGORY_SYSTEM, "SYSTEM", &sy);
sy -= linestep;
file_draw_fsmenu_category(C, ar, FS_CATEGORY_BOOKMARKS, "BOOKMARKS", &sy);
diff --git a/source/blender/editors/space_file/file_header.c b/source/blender/editors/space_file/file_header.c
index 54dd7ff15ba..bfa0a553334 100644
--- a/source/blender/editors/space_file/file_header.c
+++ b/source/blender/editors/space_file/file_header.c
@@ -56,7 +56,6 @@
#include "UI_interface.h"
#include "UI_resources.h"
#include "UI_view2d.h"
-#include "UI_text.h"
#include "file_intern.h"
#include "filelist.h"
@@ -102,7 +101,7 @@ void file_header_buttons(const bContext *C, ARegion *ar)
int xco, yco= 3;
int xcotitle;
- block= uiBeginBlock(C, ar, "header buttons", UI_EMBOSS, UI_HELV);
+ block= uiBeginBlock(C, ar, "header buttons", UI_EMBOSS);
uiBlockSetHandleFunc(block, do_file_header_buttons, NULL);
xco= ED_area_header_standardbuttons(C, block, yco);
@@ -111,8 +110,6 @@ void file_header_buttons(const bContext *C, ARegion *ar)
if((sa->flag & HEADER_NO_PULLDOWN)==0) {
int xmax;
- uiBlockSetEmboss(block, UI_EMBOSSP);
-
xmax= GetButStringLength("View");
uiDefPulldownBut(block, dummy_viewmenu, CTX_wm_area(C),
"View", xco, yco-2, xmax-3, 24, "");
@@ -120,9 +117,6 @@ void file_header_buttons(const bContext *C, ARegion *ar)
}
*/
- /* SORT TYPE */
- uiBlockSetEmboss(block, UI_EMBOSSX);
-
xco += 5;
uiBlockBeginAlign(block);
@@ -160,25 +154,26 @@ void file_header_buttons(const bContext *C, ARegion *ar)
xco+=XIC;
}
*/
+
+ uiDefIconButBitS(block, TOG, FILE_FILTER, B_FILTERIMASELDIR, ICON_FILTER,xco+=XIC,yco,XIC,YIC, &params->flag, 0, 0, 0, 0, "Filter files");
- uiDefIconButBitS(block, TOG, FILE_FILTER, B_FILTERIMASELDIR, ICON_FILTER,xco+=XIC,0,XIC,YIC, &params->flag, 0, 0, 0, 0, "Filter files");
if (params->flag & FILE_FILTER) {
xco+=4;
uiBlockBeginAlign(block);
- uiDefIconButBitS(block, TOG, IMAGEFILE, B_FILTERIMASELDIR, ICON_FILE_IMAGE,xco+=XIC,0,XIC,YIC, &params->filter, 0, 0, 0, 0, "Show images");
- uiDefIconButBitS(block, TOG, BLENDERFILE, B_FILTERIMASELDIR, ICON_FILE_BLEND,xco+=XIC,0,XIC,YIC, &params->filter, 0, 0, 0, 0, "Show .blend files");
- uiDefIconButBitS(block, TOG, MOVIEFILE, B_FILTERIMASELDIR, ICON_FILE_MOVIE,xco+=XIC,0,XIC,YIC, &params->filter, 0, 0, 0, 0, "Show movies");
- uiDefIconButBitS(block, TOG, PYSCRIPTFILE, B_FILTERIMASELDIR, ICON_FILE_SCRIPT,xco+=XIC,0,XIC,YIC, &params->filter, 0, 0, 0, 0, "Show python scripts");
- uiDefIconButBitS(block, TOG, FTFONTFILE, B_FILTERIMASELDIR, ICON_FILE_FONT,xco+=XIC,0,XIC,YIC, &params->filter, 0, 0, 0, 0, "Show fonts");
- uiDefIconButBitS(block, TOG, SOUNDFILE, B_FILTERIMASELDIR, ICON_FILE_SOUND,xco+=XIC,0,XIC,YIC, &params->filter, 0, 0, 0, 0, "Show sound files");
- uiDefIconButBitS(block, TOG, TEXTFILE, B_FILTERIMASELDIR, ICON_FILE_BLANK,xco+=XIC,0,XIC,YIC, &params->filter, 0, 0, 0, 0, "Show text files");
- uiDefIconButBitS(block, TOG, FOLDERFILE, B_FILTERIMASELDIR, ICON_FILE_FOLDER,xco+=XIC,0,XIC,YIC, &params->filter, 0, 0, 0, 0, "Show folders");
+ uiDefIconButBitS(block, TOG, IMAGEFILE, B_FILTERIMASELDIR, ICON_FILE_IMAGE,xco+=XIC,yco,XIC,YIC, &params->filter, 0, 0, 0, 0, "Show images");
+ uiDefIconButBitS(block, TOG, BLENDERFILE, B_FILTERIMASELDIR, ICON_FILE_BLEND,xco+=XIC,yco,XIC,YIC, &params->filter, 0, 0, 0, 0, "Show .blend files");
+ uiDefIconButBitS(block, TOG, MOVIEFILE, B_FILTERIMASELDIR, ICON_FILE_MOVIE,xco+=XIC,yco,XIC,YIC, &params->filter, 0, 0, 0, 0, "Show movies");
+ uiDefIconButBitS(block, TOG, PYSCRIPTFILE, B_FILTERIMASELDIR, ICON_FILE_SCRIPT,xco+=XIC,yco,XIC,YIC, &params->filter, 0, 0, 0, 0, "Show python scripts");
+ uiDefIconButBitS(block, TOG, FTFONTFILE, B_FILTERIMASELDIR, ICON_FILE_FONT,xco+=XIC,yco,XIC,YIC, &params->filter, 0, 0, 0, 0, "Show fonts");
+ uiDefIconButBitS(block, TOG, SOUNDFILE, B_FILTERIMASELDIR, ICON_FILE_SOUND,xco+=XIC,yco,XIC,YIC, &params->filter, 0, 0, 0, 0, "Show sound files");
+ uiDefIconButBitS(block, TOG, TEXTFILE, B_FILTERIMASELDIR, ICON_FILE_BLANK,xco+=XIC,yco,XIC,YIC, &params->filter, 0, 0, 0, 0, "Show text files");
+ uiDefIconButBitS(block, TOG, FOLDERFILE, B_FILTERIMASELDIR, ICON_FILE_FOLDER,xco+=XIC,yco,XIC,YIC, &params->filter, 0, 0, 0, 0, "Show folders");
uiBlockEndAlign(block);
xco+=XIC;
}
xcotitle= xco;
- xco+= UI_GetStringWidth(G.font, params->title, 0);
+ xco+= UI_GetStringWidth(params->title);
uiBlockSetEmboss(block, UI_EMBOSS);
diff --git a/source/blender/editors/space_file/file_intern.h b/source/blender/editors/space_file/file_intern.h
index 80b7eb21818..642189ad3fd 100644
--- a/source/blender/editors/space_file/file_intern.h
+++ b/source/blender/editors/space_file/file_intern.h
@@ -68,5 +68,9 @@ int file_cancel_exec(bContext *C, struct wmOperator *unused);
int file_parent_exec(bContext *C, struct wmOperator *unused);
int file_hilight_set(SpaceFile *sfile, ARegion *ar, int mx, int my);
+/* filesel.c */
+float file_string_width(const char* str);
+float file_font_pointsize();
+
#endif /* ED_FILE_INTERN_H */
diff --git a/source/blender/editors/space_file/file_ops.c b/source/blender/editors/space_file/file_ops.c
index 3d845ac4be6..94c023207f5 100644
--- a/source/blender/editors/space_file/file_ops.c
+++ b/source/blender/editors/space_file/file_ops.c
@@ -66,7 +66,7 @@
/* ---------- FILE SELECTION ------------ */
-static int find_file_mouse_hor(SpaceFile *sfile, struct ARegion* ar, short x, short y)
+static int find_file_mouse(SpaceFile *sfile, struct ARegion* ar, short x, short y)
{
float fx,fy;
int active_file = -1;
@@ -77,7 +77,6 @@ static int find_file_mouse_hor(SpaceFile *sfile, struct ARegion* ar, short x, sh
active_file = ED_fileselect_layout_offset(sfile->layout, v2d->tot.xmin + fx, v2d->tot.ymax - fy);
- printf("FINDFILE %d\n", active_file);
if ( (active_file < 0) || (active_file >= numfiles) )
{
active_file = -1;
@@ -86,24 +85,6 @@ static int find_file_mouse_hor(SpaceFile *sfile, struct ARegion* ar, short x, sh
}
-static int find_file_mouse_vert(SpaceFile *sfile, struct ARegion* ar, short x, short y)
-{
- float fx,fy;
- int active_file = -1;
- int numfiles = filelist_numfiles(sfile->files);
- View2D* v2d = &ar->v2d;
-
- UI_view2d_region_to_view(v2d, x, y, &fx, &fy);
-
- active_file = ED_fileselect_layout_offset(sfile->layout, v2d->tot.xmin + fx, v2d->tot.ymax - fy);
-
- if ( (active_file < 0) || (active_file >= numfiles) )
- {
- active_file = -1;
- }
- return active_file;
-}
-
static void file_deselect_all(SpaceFile* sfile)
{
int numfiles = filelist_numfiles(sfile->files);
@@ -129,13 +110,8 @@ static void file_select(SpaceFile* sfile, ARegion* ar, const rcti* rect, short v
int numfiles = filelist_numfiles(sfile->files);
params->selstate = NOTACTIVE;
- if ( (layout->flag == FILE_LAYOUT_HOR) ) {
- first_file = find_file_mouse_hor(sfile, ar, rect->xmin, rect->ymax);
- last_file = find_file_mouse_hor(sfile, ar, rect->xmax, rect->ymin);
- } else {
- first_file = find_file_mouse_vert(sfile, ar, rect->xmin, rect->ymax);
- last_file = find_file_mouse_vert(sfile, ar, rect->xmax, rect->ymin);
- }
+ first_file = find_file_mouse(sfile, ar, rect->xmin, rect->ymax);
+ last_file = find_file_mouse(sfile, ar, rect->xmax, rect->ymin);
/* select all valid files between first and last indicated */
if ( (first_file >= 0) && (first_file < numfiles) && (last_file >= 0) && (last_file < numfiles) ) {
@@ -147,8 +123,6 @@ static void file_select(SpaceFile* sfile, ARegion* ar, const rcti* rect, short v
file->flags &= ~ACTIVE;
}
}
-
- printf("Selecting %d %d\n", first_file, last_file);
/* make the last file active */
if (last_file >= 0 && last_file < numfiles) {
@@ -318,28 +292,11 @@ void FILE_OT_select_all_toggle(wmOperatorType *ot)
/* ---------- BOOKMARKS ----------- */
-static void set_active_bookmark(FileSelectParams* params, struct ARegion* ar, short x, short y)
-{
- int nentries = fsmenu_get_nentries(fsmenu_get(), FS_CATEGORY_BOOKMARKS);
- float fx, fy;
- short posy;
-
- UI_view2d_region_to_view(&ar->v2d, x, y, &fx, &fy);
-
- posy = ar->v2d.cur.ymax - 2*TILE_BORDER_Y - fy;
- posy -= U.fontsize*2.0f; /* header */
-
- params->active_bookmark = ((float)posy / (U.fontsize*2.0f));
- if (params->active_bookmark < 0 || params->active_bookmark > nentries) {
- params->active_bookmark = -1;
- }
-}
-
static int file_select_bookmark_category(SpaceFile* sfile, ARegion* ar, short x, short y, FSMenuCategory category)
{
struct FSMenu* fsmenu = fsmenu_get();
int nentries = fsmenu_get_nentries(fsmenu, category);
- int linestep = U.fontsize*2.0f;
+ int linestep = file_font_pointsize()*2.0f;
short xs, ys;
int i;
int selected = -1;
@@ -448,25 +405,20 @@ void FILE_OT_loadimages(wmOperatorType *ot)
int file_hilight_set(SpaceFile *sfile, ARegion *ar, int mx, int my)
{
FileSelectParams* params;
- FileLayout* layout;
int numfiles, actfile;
if(sfile==NULL || sfile->files==NULL) return 0;
numfiles = filelist_numfiles(sfile->files);
params = ED_fileselect_get_params(sfile);
- layout = ED_fileselect_get_layout(sfile, ar);
- if ( (layout->flag == FILE_LAYOUT_HOR)) {
- actfile = find_file_mouse_hor(sfile, ar, mx , my);
- } else {
- actfile = find_file_mouse_vert(sfile, ar, mx, my);
- }
+ actfile = find_file_mouse(sfile, ar, mx , my);
if (params && (actfile >= 0) && (actfile < numfiles) ) {
params->active_file=actfile;
return 1;
- }
+ }
+ params->active_file= -1;
return 0;
}
diff --git a/source/blender/editors/space_file/filelist.c b/source/blender/editors/space_file/filelist.c
index 1ba84566940..01cdf559c58 100644
--- a/source/blender/editors/space_file/filelist.c
+++ b/source/blender/editors/space_file/filelist.c
@@ -82,7 +82,7 @@
#include "PIL_time.h"
-#include "UI_text.h"
+#include "UI_interface.h"
#include "filelist.h"
@@ -120,7 +120,6 @@ typedef struct FileList
short hide_dot;
unsigned int filter;
short changed;
- int columns[MAX_FILE_COLUMN];
ListBase loadimages;
ListBase threads;
} FileList;
@@ -531,7 +530,7 @@ void filelist_loadimage(struct FileList* filelist, int index)
dx = imgwidth - ex;
dy = imgheight - ey;
- IMB_scaleImBuf(imb, ex, ey);
+ // IMB_scaleImBuf(imb, ex, ey);
filelist->filelist[fidx].image = imb;
} else {
/* prevent loading image twice */
@@ -622,6 +621,7 @@ struct direntry * filelist_file(struct FileList* filelist, int index)
return &filelist->filelist[fidx];
}
+
int filelist_find(struct FileList* filelist, char *file)
{
int index = -1;
@@ -658,15 +658,9 @@ void filelist_setfilter(struct FileList* filelist, unsigned int filter)
filelist->filter = filter;
}
-int filelist_column_len(struct FileList* filelist, FileListColumns column)
-{
- return filelist->columns[column];
-}
-
void filelist_readdir(struct FileList* filelist)
{
char wdir[FILE_MAX];
- int i;
if (!filelist) return;
filelist->fidx = 0;
@@ -685,34 +679,6 @@ void filelist_readdir(struct FileList* filelist)
if (!filelist->threads.first) {
BLI_init_threads(&filelist->threads, exec_loadimages, 2);
}
-
- for (i=0; i<MAX_FILE_COLUMN; ++i) {
- filelist->columns[i] = 0;
- }
-
- for (i=0; (i < filelist->numfiles); ++i)
- {
- struct direntry* file = filelist_file(filelist, i);
- if (file) {
- int len;
- len = UI_GetStringWidth(G.font, file->relname,0);
- if (len > filelist->columns[COLUMN_NAME]) filelist->columns[COLUMN_NAME] = len;
- len = UI_GetStringWidth(G.font, file->date,0);
- if (len > filelist->columns[COLUMN_DATE]) filelist->columns[COLUMN_DATE] = len;
- len = UI_GetStringWidth(G.font, file->time,0);
- if (len > filelist->columns[COLUMN_TIME]) filelist->columns[COLUMN_TIME] = len;
- len = UI_GetStringWidth(G.font, file->size,0);
- if (len > filelist->columns[COLUMN_SIZE]) filelist->columns[COLUMN_SIZE] = len;
- len = UI_GetStringWidth(G.font, file->mode1,0);
- if (len > filelist->columns[COLUMN_MODE1]) filelist->columns[COLUMN_MODE1] = len;
- len = UI_GetStringWidth(G.font, file->mode2,0);
- if (len > filelist->columns[COLUMN_MODE2]) filelist->columns[COLUMN_MODE2] = len;
- len = UI_GetStringWidth(G.font, file->mode3,0);
- if (len > filelist->columns[COLUMN_MODE3]) filelist->columns[COLUMN_MODE3] = len;
- len = UI_GetStringWidth(G.font, file->owner,0);
- if (len > filelist->columns[COLUMN_OWNER]) filelist->columns[COLUMN_OWNER] = len;
- }
- }
}
int filelist_empty(struct FileList* filelist)
diff --git a/source/blender/editors/space_file/filelist.h b/source/blender/editors/space_file/filelist.h
index 26a2d46f5a7..4aa8359b068 100644
--- a/source/blender/editors/space_file/filelist.h
+++ b/source/blender/editors/space_file/filelist.h
@@ -41,19 +41,7 @@ struct FileList;
struct direntry;
struct BlendHandle;
struct Scene;
-
-#define MAX_FILE_COLUMN 8
-
-typedef enum FileListColumns {
- COLUMN_NAME = 0,
- COLUMN_DATE,
- COLUMN_TIME,
- COLUMN_SIZE,
- COLUMN_MODE1,
- COLUMN_MODE2,
- COLUMN_MODE3,
- COLUMN_OWNER
-} FileListColumns;
+struct rcti;
struct FileList * filelist_new();
void filelist_init_icons();
@@ -78,7 +66,6 @@ struct ImBuf * filelist_getimage(struct FileList* filelist, int index);
struct ImBuf * filelist_geticon(struct FileList* filelist, int index);
short filelist_changed(struct FileList* filelist);
void filelist_readdir(struct FileList* filelist);
-int filelist_column_len(struct FileList* filelist, FileListColumns column);
int filelist_empty(struct FileList* filelist);
void filelist_parent(struct FileList* filelist);
diff --git a/source/blender/editors/space_file/filesel.c b/source/blender/editors/space_file/filesel.c
index a422bda9503..cbd1457e562 100644
--- a/source/blender/editors/space_file/filesel.c
+++ b/source/blender/editors/space_file/filesel.c
@@ -45,6 +45,7 @@
#include "DNA_space_types.h"
#include "DNA_scene_types.h"
#include "DNA_screen_types.h"
+#include "DNA_userdef_types.h"
#include "DNA_windowmanager_types.h"
#include "MEM_guardedalloc.h"
@@ -58,6 +59,8 @@
#include "BKE_screen.h"
#include "BKE_global.h"
+#include "BLF_api.h"
+
#include "DNA_userdef_types.h"
#include "ED_screen.h"
@@ -144,14 +147,13 @@ int ED_fileselect_layout_offset(FileLayout* layout, int x, int y)
offsetx = (x)/(layout->tile_w + 2*layout->tile_border_x);
offsety = (y)/(layout->tile_h + 2*layout->tile_border_y);
- if (offsetx > layout->columns-1) offsetx = layout->columns-1 ;
- if (offsety > layout->rows-1) offsety = layout->rows-1 ;
+ if (offsetx > layout->columns-1) offsetx = -1 ;
+ if (offsety > layout->rows-1) offsety = -1 ;
if (layout->flag & FILE_LAYOUT_HOR)
active_file = layout->rows*offsetx + offsety;
else
active_file = offsetx + layout->columns*offsety;
- printf("OFFSET %d %d %d %d %d\n", x,y, offsetx, offsety, active_file);
return active_file;
}
@@ -166,6 +168,56 @@ void ED_fileselect_layout_tilepos(FileLayout* layout, int tile, short *x, short
}
}
+float file_string_width(const char* str)
+{
+ uiStyle *style= U.uistyles.first;
+ uiStyleFontSet(&style->widget);
+ return BLF_width(str);
+}
+
+float file_font_pointsize()
+{
+ float s;
+ char tmp[2] = "X";
+ uiStyle *style= U.uistyles.first;
+ uiStyleFontSet(&style->widget);
+ s = BLF_height(tmp);
+ return style->widget.points;
+}
+
+static void column_widths(struct FileList* files, struct FileLayout* layout)
+{
+ int i;
+ int numfiles = filelist_numfiles(files);
+
+ for (i=0; i<MAX_FILE_COLUMN; ++i) {
+ layout->column_widths[i] = 0;
+ }
+
+ for (i=0; (i < numfiles); ++i)
+ {
+ struct direntry* file = filelist_file(files, i);
+ if (file) {
+ int len;
+ len = file_string_width(file->relname);
+ if (len > layout->column_widths[COLUMN_NAME]) layout->column_widths[COLUMN_NAME] = len;
+ len = file_string_width(file->date);
+ if (len > layout->column_widths[COLUMN_DATE]) layout->column_widths[COLUMN_DATE] = len;
+ len = file_string_width(file->time);
+ if (len > layout->column_widths[COLUMN_TIME]) layout->column_widths[COLUMN_TIME] = len;
+ len = file_string_width(file->size);
+ if (len > layout->column_widths[COLUMN_SIZE]) layout->column_widths[COLUMN_SIZE] = len;
+ len = file_string_width(file->mode1);
+ if (len > layout->column_widths[COLUMN_MODE1]) layout->column_widths[COLUMN_MODE1] = len;
+ len = file_string_width(file->mode2);
+ if (len > layout->column_widths[COLUMN_MODE2]) layout->column_widths[COLUMN_MODE2] = len;
+ len = file_string_width(file->mode3);
+ if (len > layout->column_widths[COLUMN_MODE3]) layout->column_widths[COLUMN_MODE3] = len;
+ len = file_string_width(file->owner);
+ if (len > layout->column_widths[COLUMN_OWNER]) layout->column_widths[COLUMN_OWNER] = len;
+ }
+ }
+}
void ED_fileselect_init_layout(struct SpaceFile *sfile, struct ARegion *ar)
{
@@ -173,11 +225,10 @@ void ED_fileselect_init_layout(struct SpaceFile *sfile, struct ARegion *ar)
View2D *v2d= &ar->v2d;
int maxlen = 0;
int numfiles = filelist_numfiles(sfile->files);
-
+ int textheight = file_font_pointsize();
if (sfile->layout == 0) {
sfile->layout = MEM_callocN(sizeof(struct FileLayout), "file_layout");
}
-
if (params->display == FILE_IMGDISPLAY) {
sfile->layout->prv_w = 96;
sfile->layout->prv_h = 96;
@@ -186,7 +237,7 @@ void ED_fileselect_init_layout(struct SpaceFile *sfile, struct ARegion *ar)
sfile->layout->prv_border_x = 6;
sfile->layout->prv_border_y = 6;
sfile->layout->tile_w = sfile->layout->prv_w + 2*sfile->layout->prv_border_x;
- sfile->layout->tile_h = sfile->layout->prv_h + 2*sfile->layout->prv_border_y + U.fontsize;
+ sfile->layout->tile_h = sfile->layout->prv_h + 2*sfile->layout->prv_border_y + textheight;
sfile->layout->width= (v2d->cur.xmax - v2d->cur.xmin - 2*sfile->layout->tile_border_x);
sfile->layout->columns= sfile->layout->width / (sfile->layout->tile_w + 2*sfile->layout->tile_border_x);
if(sfile->layout->columns > 0)
@@ -204,23 +255,22 @@ void ED_fileselect_init_layout(struct SpaceFile *sfile, struct ARegion *ar)
sfile->layout->tile_border_y = 2;
sfile->layout->prv_border_x = 0;
sfile->layout->prv_border_y = 0;
- sfile->layout->tile_h = U.fontsize*3/2;
+ sfile->layout->tile_h = textheight*3/2;
sfile->layout->height= v2d->cur.ymax - v2d->cur.ymin;
sfile->layout->rows = sfile->layout->height / (sfile->layout->tile_h + 2*sfile->layout->tile_border_y);;
+ column_widths(sfile->files, sfile->layout);
+
if (params->display == FILE_SHORTDISPLAY) {
- maxlen = filelist_column_len(sfile->files, COLUMN_NAME) +
- filelist_column_len(sfile->files, COLUMN_SIZE);
+ maxlen = sfile->layout->column_widths[COLUMN_NAME] +
+ sfile->layout->column_widths[COLUMN_SIZE];
maxlen += 20+2*10; // for icon and space between columns
} else {
- maxlen = filelist_column_len(sfile->files, COLUMN_NAME) +
- filelist_column_len(sfile->files, COLUMN_DATE) +
- filelist_column_len(sfile->files, COLUMN_TIME) +
- filelist_column_len(sfile->files, COLUMN_SIZE) /* +
- filelist_column_len(sfile->files, COLUMN_MODE1) +
- filelist_column_len(sfile->files, COLUMN_MODE2) +
- filelist_column_len(sfile->files, COLUMN_MODE3) +
- filelist_column_len(sfile->files, COLUMN_OWNER) */ ;
+ maxlen = sfile->layout->column_widths[COLUMN_NAME] +
+ sfile->layout->column_widths[COLUMN_DATE] +
+ sfile->layout->column_widths[COLUMN_TIME] +
+ sfile->layout->column_widths[COLUMN_SIZE];
+ /* XXX add mode1, mode2, mode3, owner columns for non-windows platforms */
maxlen += 20+4*10; // for icon and space between columns
}
sfile->layout->tile_w = maxlen + 40;
diff --git a/source/blender/editors/space_file/fsmenu.c b/source/blender/editors/space_file/fsmenu.c
index 6ef946c9697..59e8dcf82e6 100644
--- a/source/blender/editors/space_file/fsmenu.c
+++ b/source/blender/editors/space_file/fsmenu.c
@@ -47,6 +47,12 @@
#include "BLI_winstuff.h"
#endif
+#ifdef __APPLE__
+#include <CoreServices/CoreServices.h>
+
+#include "BKE_utildefines.h"
+#endif
+
#include "fsmenu.h" /* include ourselves */
@@ -303,6 +309,27 @@ void fsmenu_read_file(struct FSMenu* fsmenu, const char *filename)
}
#endif
+#ifdef __APPLE__
+ {
+ OSErr err=noErr;
+ int i;
+
+ /* loop through all the OS X Volumes, and add them to the SYSTEM section */
+ for (i=1; err!=nsvErr; i++)
+ {
+ FSRef dir;
+ unsigned char path[FILE_MAXDIR+FILE_MAXFILE];
+
+ err = FSGetVolumeInfo(kFSInvalidVolumeRefNum, i, NULL, kFSVolInfoNone, NULL, NULL, &dir);
+ if (err != noErr)
+ continue;
+
+ FSRefMakePath(&dir, path, FILE_MAXDIR+FILE_MAXFILE);
+ fsmenu_insert_entry(fsmenu, FS_CATEGORY_SYSTEM, (char *)path, 1, 0);
+ }
+ }
+#endif
+
fp = fopen(filename, "r");
if (!fp) return;
diff --git a/source/blender/editors/space_graph/graph_buttons.c b/source/blender/editors/space_graph/graph_buttons.c
index 5207d4843f7..a4babaad74c 100644
--- a/source/blender/editors/space_graph/graph_buttons.c
+++ b/source/blender/editors/space_graph/graph_buttons.c
@@ -79,6 +79,11 @@
#include "graph_intern.h" // own include
+/* XXX */
+
+/* temporary definition for limits of float number buttons (FLT_MAX tends to infinity with old system) */
+#define UI_FLT_MAX 10000.0f
+
/* ******************* graph editor space & buttons ************** */
@@ -99,18 +104,49 @@ static void do_graph_region_buttons(bContext *C, void *arg, int event)
//WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, ob);
}
-static void graph_panel_properties(const bContext *C, ARegion *ar, short cntrl, bAnimListElem *ale)
+static int graph_panel_context(const bContext *C, bAnimListElem **ale, FCurve **fcu)
+{
+ bAnimContext ac;
+ bAnimListElem *elem= NULL;
+
+ /* for now, only draw if we could init the anim-context info (necessary for all animation-related tools)
+ * to work correctly is able to be correctly retrieved. There's no point showing empty panels?
+ */
+ if (ANIM_animdata_get_context(C, &ac) == 0)
+ return 0;
+
+ /* try to find 'active' F-Curve */
+ elem= get_active_fcurve_channel(&ac);
+ if(elem == NULL)
+ return 0;
+
+ if(fcu)
+ *fcu= (FCurve*)elem->data;
+ if(ale)
+ *ale= elem;
+ else
+ MEM_freeN(elem);
+
+ return 1;
+}
+
+static int graph_panel_poll(const bContext *C, PanelType *pt)
{
- FCurve *fcu= (FCurve *)ale->data;
+ return graph_panel_context(C, NULL, NULL);
+}
+
+static void graph_panel_properties(const bContext *C, Panel *pa)
+{
+ bAnimListElem *ale;
+ FCurve *fcu;
uiBlock *block;
char name[128];
- block= uiBeginBlock(C, ar, "graph_panel_properties", UI_EMBOSS, UI_HELV);
- if (uiNewPanel(C, ar, block, "Properties", "Graph", 340, 30, 318, 254)==0) return;
- uiBlockSetHandleFunc(block, do_graph_region_buttons, NULL);
+ if(!graph_panel_context(C, &ale, &fcu))
+ return;
- /* to force height */
- uiNewPanelHeight(block, 204);
+ block= uiLayoutFreeBlock(pa->layout);
+ uiBlockSetHandleFunc(block, do_graph_region_buttons, NULL);
/* Info - Active F-Curve */
uiDefBut(block, LABEL, 1, "Active F-Curve:", 10, 200, 150, 19, NULL, 0.0, 0.0, 0, 0, "");
@@ -131,6 +167,8 @@ static void graph_panel_properties(const bContext *C, ARegion *ar, short cntrl,
* - Access details (ID-block + RNA-Path + Array Index)
* - ...
*/
+
+ MEM_freeN(ale);
}
/* ******************* drivers ******************************** */
@@ -141,80 +179,171 @@ static void do_graph_region_driver_buttons(bContext *C, void *arg, int event)
{
Scene *scene= CTX_data_scene(C);
- switch(event) {
+ switch (event) {
case B_IPO_DEPCHANGE:
{
/* rebuild depsgraph for the new deps */
DAG_scene_sort(scene);
- /* TODO: which one? we need some way of sending these updates since curves from non-active ob could be being edited */
- //DAG_object_flush_update(G.scene, ob, OB_RECALC_DATA);
- //DAG_object_flush_update(scene, ob, OB_RECALC_OB);
+ /* force an update of depsgraph */
+ ED_anim_dag_flush_update(C);
}
break;
}
/* default for now */
- //WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, ob);
+ WM_event_add_notifier(C, NC_SCENE, scene);
+}
+
+/* callback to remove the active driver */
+static void driver_remove_cb (bContext *C, void *ale_v, void *dummy_v)
+{
+ bAnimListElem *ale= (bAnimListElem *)ale_v;
+ ID *id= ale->id;
+ FCurve *fcu= ale->data;
+
+ /* try to get F-Curve that driver lives on, and ID block which has this AnimData */
+ if (ELEM(NULL, id, fcu))
+ return;
+
+ /* call API method to remove this driver */
+ ANIM_remove_driver(id, fcu->rna_path, fcu->array_index, 0);
+}
+
+/* callback to add a target variable to the active driver */
+static void driver_add_var_cb (bContext *C, void *driver_v, void *dummy_v)
+{
+ ChannelDriver *driver= (ChannelDriver *)driver_v;
+
+ /* add a new var */
+ driver_add_new_target(driver);
}
-static void graph_panel_drivers(const bContext *C, ARegion *ar, short cntrl, bAnimListElem *ale)
+/* callback to remove target variable from active driver */
+static void driver_delete_var_cb (bContext *C, void *driver_v, void *dtar_v)
{
- FCurve *fcu= (FCurve *)ale->data;
+ ChannelDriver *driver= (ChannelDriver *)driver_v;
+ DriverTarget *dtar= (DriverTarget *)dtar_v;
+
+ /* add a new var */
+ driver_free_target(driver, dtar);
+}
+
+/* callback to reset the driver's flags */
+static void driver_update_flags_cb (bContext *C, void *fcu_v, void *dummy_v)
+{
+ FCurve *fcu= (FCurve *)fcu_v;
ChannelDriver *driver= fcu->driver;
+
+ /* clear invalid flags */
+ driver->flag &= ~DRIVER_FLAG_INVALID;
+}
+
+/* drivers panel poll */
+static int graph_panel_drivers_poll(const bContext *C, PanelType *pt)
+{
+ SpaceIpo *sipo= (SpaceIpo *)CTX_wm_space_data(C);
+
+ if(sipo->mode != SIPO_MODE_DRIVERS)
+ return 0;
+
+ return graph_panel_context(C, NULL, NULL);
+}
+
+/* driver settings for active F-Curve (only for 'Drivers' mode) */
+static void graph_panel_drivers(const bContext *C, Panel *pa)
+{
+ bAnimListElem *ale;
+ FCurve *fcu;
+ ChannelDriver *driver;
+ DriverTarget *dtar;
+
+ PointerRNA rna_ptr;
uiBlock *block;
uiBut *but;
- int len;
+ int yco=85, i=0;
- block= uiBeginBlock(C, ar, "graph_panel_drivers", UI_EMBOSS, UI_HELV);
- if (uiNewPanel(C, ar, block, "Drivers", "Graph", 340, 30, 318, 254)==0) return;
- uiBlockSetHandleFunc(block, do_graph_region_driver_buttons, NULL);
+ if(!graph_panel_context(C, &ale, &fcu))
+ return;
- /* to force height */
- uiNewPanelHeight(block, 204);
+ driver= fcu->driver;
+
+ block= uiLayoutFreeBlock(pa->layout);
+ uiBlockSetHandleFunc(block, do_graph_region_driver_buttons, NULL);
+
+ /* general actions */
+ but= uiDefBut(block, BUT, B_IPO_DEPCHANGE, "Update Dependencies", 10, 200, 180, 22, NULL, 0.0, 0.0, 0, 0, "Force updates of dependencies");
+ uiButSetFunc(but, driver_update_flags_cb, fcu, NULL);
+
+ but= uiDefBut(block, BUT, B_IPO_DEPCHANGE, "Remove Driver", 200, 200, 110, 18, NULL, 0.0, 0.0, 0, 0, "Remove this driver");
+ uiButSetFunc(but, driver_remove_cb, ale, NULL);
/* type */
- uiDefBut(block, LABEL, 1, "Type:", 10, 200, 120, 20, NULL, 0.0, 0.0, 0, 0, "");
+ uiDefBut(block, LABEL, 1, "Type:", 10, 170, 60, 20, NULL, 0.0, 0.0, 0, 0, "");
uiDefButI(block, MENU, B_IPO_DEPCHANGE,
- "Driver Type%t|Transform Channel%x0|Scripted Expression%x1|Rotational Difference%x2",
- 130,200,180,20, &driver->type, 0, 0, 0, 0, "Driver type");
-
- /* buttons to draw depends on type of driver */
- if (driver->type == DRIVER_TYPE_PYTHON) { /* PyDriver */
- uiDefBut(block, TEX, B_REDR, "Expr: ", 10,160,300,20, driver->expression, 0, 255, 0, 0, "One-liner Python Expression to use as Scripted Expression");
+ "Driver Type%t|Normal%x0|Scripted Expression%x1|Rotational Difference%x2",
+ 70,170,240,20, &driver->type, 0, 0, 0, 0, "Driver type");
+
+ /* show expression box if doing scripted drivers */
+ if (driver->type == DRIVER_TYPE_PYTHON) {
+ uiDefBut(block, TEX, B_REDR, "Expr: ", 10,150,300,20, driver->expression, 0, 255, 0, 0, "One-liner Python Expression to use as Scripted Expression");
+ /* errors */
if (driver->flag & DRIVER_FLAG_INVALID) {
- uiDefIconBut(block, LABEL, 1, ICON_ERROR, 10, 140, 20, 19, NULL, 0, 0, 0, 0, "");
+ uiDefIconBut(block, LABEL, 1, ICON_ERROR, 10, 130, 48, 48, NULL, 0, 0, 0, 0, ""); // a bit larger
uiDefBut(block, LABEL, 0, "Error: invalid Python expression",
- 30,140,230,19, NULL, 0, 0, 0, 0, "");
+ 50,110,230,19, NULL, 0, 0, 0, 0, "");
+ }
+ }
+ else {
+ /* errors */
+ if (driver->flag & DRIVER_FLAG_INVALID) {
+ uiDefIconBut(block, LABEL, 1, ICON_ERROR, 10, 130, 48, 48, NULL, 0, 0, 0, 0, ""); // a bit larger
+ uiDefBut(block, LABEL, 0, "Error: invalid target channel(s)",
+ 50,130,230,19, NULL, 0, 0, 0, 0, "");
}
}
- else { /* Channel or RotDiff - RotDiff just has extra settings */
- /* Driver Object */
- but= uiDefBut(block, TEX, B_IPO_DEPCHANGE, "OB: ", 10,160,150,20, driver->id->name+2, 0.0, 21.0, 0, 0, "Object that controls this Driver.");
- uiButSetFunc(but, test_idbutton_cb, driver->id->name, NULL);
+
+ but= uiDefBut(block, BUT, B_IPO_DEPCHANGE, "Add Variable", 10, 110, 300, 20, NULL, 0.0, 0.0, 0, 0, "Add a new target variable for this Driver");
+ uiButSetFunc(but, driver_add_var_cb, driver, NULL);
+
+ /* loop over targets, drawing them */
+ for (dtar= driver->targets.first; dtar; dtar= dtar->next) {
+ short height = (dtar->id) ? 80 : 60;
+
+ /* panel behind buttons */
+ uiDefBut(block, ROUNDBOX, B_REDR, "", 5, yco-height+25, 310, height, NULL, 5.0, 0.0, 12.0, 0, "");
+
+ /* variable name */
+ uiDefButC(block, TEX, B_REDR, "Name: ", 10,yco,280,20, dtar->name, 0, 63, 0, 0, "Name of target variable (No spaces or dots are allowed. Also, must not start with a symbol or digit).");
+
+ /* remove button */
+ but= uiDefIconBut(block, BUT, B_REDR, ICON_X, 290, yco, 20, 20, NULL, 0.0, 0.0, 0.0, 0.0, "Delete target variable.");
+ uiButSetFunc(but, driver_delete_var_cb, driver, dtar);
+
+
+ /* Target Object */
+ uiDefBut(block, LABEL, 1, "Value:", 10, yco-30, 60, 20, NULL, 0.0, 0.0, 0, 0, "");
+ uiDefIDPoinBut(block, test_obpoin_but, ID_OB, B_REDR, "Ob: ", 70, yco-30, 240, 20, &dtar->id, "Object to use as Driver target");
// XXX should we hide these technical details?
- if (driver->id) {
- /* Array Index */
- // XXX ideally this is grouped with the path, but that can get quite long...
- uiDefButI(block, NUM, B_IPO_DEPCHANGE, "Index: ", 170,160,140,20, &driver->array_index, 0, INT_MAX, 0, 0, "Index to the specific property used as Driver if applicable.");
-
- /* RNA-Path - allocate if non-existant */
- if (driver->rna_path == NULL) {
- driver->rna_path= MEM_callocN(256, "Driver RNA-Path");
- len= 255;
- }
- else
- len= strlen(driver->rna_path);
- uiDefBut(block, TEX, B_IPO_DEPCHANGE, "Path: ", 10,130,300,20, driver->rna_path, 0, len, 0, 0, "RNA Path (from Driver Object) to property used as Driver.");
+ if (dtar->id) {
+ uiBlockBeginAlign(block);
+ /* RNA Path */
+ RNA_pointer_create(ale->id, &RNA_DriverTarget, dtar, &rna_ptr);
+ uiDefButR(block, TEX, 0, "Path: ", 10, yco-50, 250, 20, &rna_ptr, "rna_path", 0, 0, 0, -1, -1, "RNA Path (from Driver Object) to property used as Driver.");
+
+ /* Array Index */
+ uiDefButI(block, NUM, B_REDR, "", 260,yco-50,50,20, &dtar->array_index, 0, INT_MAX, 0, 0, "Index to the specific property used as Driver if applicable.");
+ uiBlockEndAlign(block);
}
- /* for rotational difference, show second target... */
- if (driver->type == DRIVER_TYPE_ROTDIFF) {
- // TODO...
- }
+ /* adjust y-coordinate for next target */
+ yco -= height;
+ i++;
}
+
+ MEM_freeN(ale);
}
/* ******************* f-modifiers ******************************** */
@@ -235,10 +364,7 @@ static void do_graph_region_modifier_buttons(bContext *C, void *arg, int event)
// XXX for now, roundbox has it's callback func set to NULL to not intercept events
#define DRAW_BACKDROP(height) \
{ \
- if (active) uiBlockSetCol(block, TH_BUT_ACTION); \
- but= uiDefBut(block, ROUNDBOX, B_REDR, "", 10-8, *yco-height, width, height-1, NULL, 5.0, 0.0, 12.0, (float)rb_col, ""); \
- uiButSetFunc(but, NULL, NULL, NULL); \
- if (active) uiBlockSetCol(block, TH_AUTO); \
+ uiDefBut(block, ROUNDBOX, B_REDR, "", -3, *yco-height, width+3, height-1, NULL, 5.0, 0.0, 12.0, (float)rb_col, ""); \
}
/* callback to verify modifier data */
@@ -287,13 +413,13 @@ static void draw_modifier__generator(uiBlock *block, FCurve *fcu, FModifier *fcm
(*height) = 90;
switch (data->mode) {
case FCM_GENERATOR_POLYNOMIAL: /* polynomial expression */
- (*height) += 20*(data->poly_order+1) + 35;
+ (*height) += 20*(data->poly_order+1) + 20;
break;
case FCM_GENERATOR_POLYNOMIAL_FACTORISED: /* factorised polynomial */
- (*height) += 20 * data->poly_order;
+ (*height) += 20 * data->poly_order + 15;
break;
case FCM_GENERATOR_FUNCTION: /* builtin function */
- (*height) += 50; // xxx
+ (*height) += 55; // xxx
break;
case FCM_GENERATOR_EXPRESSION: /* py-expression */
// xxx nothing to draw
@@ -301,7 +427,7 @@ static void draw_modifier__generator(uiBlock *block, FCurve *fcu, FModifier *fcm
}
/* basic settings (backdrop + mode selector + some padding) */
- //DRAW_BACKDROP((*height)); // XXX buggy...
+ DRAW_BACKDROP((*height));
uiBlockBeginAlign(block);
but= uiDefButS(block, MENU, B_FMODIFIER_REDRAW, gen_mode, 10,cy,width-30,19, &data->mode, 0, 0, 0, 0, "Selects type of generator algorithm.");
uiButSetFunc(but, validate_fmodifier_cb, fcu, fcm);
@@ -330,7 +456,7 @@ static void draw_modifier__generator(uiBlock *block, FCurve *fcu, FModifier *fcm
cp= data->coefficients;
for (i=0; (i < data->arraysize) && (cp); i++, cp++) {
/* coefficient */
- uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "", 50, cy, 150, 20, cp, -FLT_MAX, FLT_MAX, 10, 3, "Coefficient for polynomial");
+ uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "", 50, cy, 150, 20, cp, -UI_FLT_MAX, UI_FLT_MAX, 10, 3, "Coefficient for polynomial");
/* 'x' param (and '+' if necessary) */
if (i == 0)
@@ -368,15 +494,15 @@ static void draw_modifier__generator(uiBlock *block, FCurve *fcu, FModifier *fcm
uiDefBut(block, LABEL, 1, "(", 40, cy, 50, 20, NULL, 0.0, 0.0, 0, 0, "");
/* coefficients */
- uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "", 50, cy, 100, 20, cp, -FLT_MAX, FLT_MAX, 10, 3, "Coefficient of x");
+ uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "", 50, cy, 100, 20, cp, -UI_FLT_MAX, UI_FLT_MAX, 10, 3, "Coefficient of x");
uiDefBut(block, LABEL, 1, "x + ", 150, cy, 30, 20, NULL, 0.0, 0.0, 0, 0, "");
- uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "", 180, cy, 100, 20, cp+1, -FLT_MAX, FLT_MAX, 10, 3, "Second coefficient");
+ uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "", 180, cy, 100, 20, cp+1, -UI_FLT_MAX, UI_FLT_MAX, 10, 3, "Second coefficient");
/* closing bracket and '+' sign */
if ( (i != (data->poly_order - 1)) || ((i==0) && data->poly_order==2) )
- uiDefBut(block, LABEL, 1, ") ×", 280, cy, 30, 20, NULL, 0.0, 0.0, 0, 0, "");
+ uiDefBut(block, LABEL, 1, ") â—Š", 280, cy, 30, 20, NULL, 0.0, 0.0, 0, 0, "");
else
uiDefBut(block, LABEL, 1, ")", 280, cy, 30, 20, NULL, 0.0, 0.0, 0, 0, "");
@@ -399,7 +525,7 @@ static void draw_modifier__generator(uiBlock *block, FCurve *fcu, FModifier *fcm
{
uiDefBut(block, LABEL, 1, "y = ", 0, cy, 50, 20, NULL, 0.0, 0.0, 0, 0, "");
- uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "", 50, cy, 150, 20, cp+3, -FLT_MAX, FLT_MAX, 10, 3, "Coefficient (D) for function");
+ uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "", 50, cy, 150, 20, cp+3, -UI_FLT_MAX, UI_FLT_MAX, 10, 3, "Coefficient (D) for function");
uiDefBut(block, LABEL, 1, "+", 200, cy, 30, 20, NULL, 0.0, 0.0, 0, 0, "");
cy -= 20;
}
@@ -409,7 +535,7 @@ static void draw_modifier__generator(uiBlock *block, FCurve *fcu, FModifier *fcm
char func_name[32];
/* coefficient outside bracket */
- uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "", 0, cy, 80, 20, cp, -FLT_MAX, FLT_MAX, 10, 3, "Coefficient (A) for function");
+ uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "", 5, cy, 80, 20, cp, -UI_FLT_MAX, UI_FLT_MAX, 10, 3, "Coefficient (A) for function");
/* opening bracket */
switch (data->func_type)
@@ -433,14 +559,14 @@ static void draw_modifier__generator(uiBlock *block, FCurve *fcu, FModifier *fcm
sprintf(func_name, "<fn?>(");
break;
}
- uiDefBut(block, LABEL, 1, func_name, 80, cy, 40, 20, NULL, 0.0, 0.0, 0, 0, "");
+ uiDefBut(block, LABEL, 1, func_name, 85, cy, 40, 20, NULL, 0.0, 0.0, 0, 0, "");
/* coefficients inside bracket */
- uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "", 115, cy, 75, 20, cp+1, -FLT_MAX, FLT_MAX, 10, 3, "Coefficient (B) of x");
+ uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "", 120, cy, 75, 20, cp+1, -UI_FLT_MAX, UI_FLT_MAX, 10, 3, "Coefficient (B) of x");
- uiDefBut(block, LABEL, 1, "x+", 190, cy, 30, 20, NULL, 0.0, 0.0, 0, 0, "");
+ uiDefBut(block, LABEL, 1, "x+", 195, cy, 30, 20, NULL, 0.0, 0.0, 0, 0, "");
- uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "", 220, cy, 80, 20, cp+2, -FLT_MAX, FLT_MAX, 10, 3, "Coefficient (C) of function");
+ uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "", 225, cy, 80, 20, cp+2, -UI_FLT_MAX, UI_FLT_MAX, 10, 3, "Coefficient (C) of function");
/* closing bracket */
uiDefBut(block, LABEL, 1, ")", 300, cy, 30, 20, NULL, 0.0, 0.0, 0, 0, "");
@@ -461,32 +587,62 @@ static void draw_modifier__generator(uiBlock *block, FCurve *fcu, FModifier *fcm
static void draw_modifier__cycles(uiBlock *block, FCurve *fcu, FModifier *fcm, int *yco, short *height, short width, short active, int rb_col)
{
FMod_Cycles *data= (FMod_Cycles *)fcm->data;
- char cyc_mode[]="Cycling Mode%t|No Cycles%x0|Repeat Motion%x1|Repeat with Offset%x2";
+ char cyc_mode[]="Cycling Mode%t|No Cycles%x0|Repeat Motion%x1|Repeat with Offset%x2|Repeat Mirrored%x3";
int cy= (*yco - 30), cy1= (*yco - 50), cy2= (*yco - 70);
/* set the height */
- (*height) = 90;
+ (*height) = 80;
/* basic settings (backdrop + some padding) */
- //DRAW_BACKDROP((*height)); // XXX buggy...
+ DRAW_BACKDROP((*height));
/* 'before' range */
- uiDefBut(block, LABEL, 1, "Before:", 10, cy, 80, 20, NULL, 0.0, 0.0, 0, 0, "Settings for cycling before first keyframe");
+ uiDefBut(block, LABEL, 1, "Before:", 4, cy, 80, 20, NULL, 0.0, 0.0, 0, 0, "Settings for cycling before first keyframe");
uiBlockBeginAlign(block);
- uiDefButS(block, MENU, B_FMODIFIER_REDRAW, cyc_mode, 10,cy1,150,20, &data->before_mode, 0, 0, 0, 0, "Cycling mode to use before first keyframe");
- uiDefButS(block, NUM, B_FMODIFIER_REDRAW, "Max Cycles:", 10, cy2, 150, 20, &data->before_cycles, 0, 10000, 10, 3, "Maximum number of cycles to allow (0 = infinite)");
+ uiDefButS(block, MENU, B_FMODIFIER_REDRAW, cyc_mode, 3,cy1,150,20, &data->before_mode, 0, 0, 0, 0, "Cycling mode to use before first keyframe");
+ uiDefButS(block, NUM, B_FMODIFIER_REDRAW, "Max Cycles:", 3, cy2, 150, 20, &data->before_cycles, 0, 10000, 10, 3, "Maximum number of cycles to allow (0 = infinite)");
uiBlockEndAlign(block);
/* 'after' range */
- uiDefBut(block, LABEL, 1, "After:", 160, cy, 80, 20, NULL, 0.0, 0.0, 0, 0, "Settings for cycling after last keyframe");
+ uiDefBut(block, LABEL, 1, "After:", 155, cy, 80, 20, NULL, 0.0, 0.0, 0, 0, "Settings for cycling after last keyframe");
uiBlockBeginAlign(block);
- uiDefButS(block, MENU, B_FMODIFIER_REDRAW, cyc_mode, 170,cy1,150,20, &data->after_mode, 0, 0, 0, 0, "Cycling mode to use after first keyframe");
- uiDefButS(block, NUM, B_FMODIFIER_REDRAW, "Max Cycles:", 170, cy2, 150, 20, &data->after_cycles, 0, 10000, 10, 3, "Maximum number of cycles to allow (0 = infinite)");
+ uiDefButS(block, MENU, B_FMODIFIER_REDRAW, cyc_mode, 157,cy1,150,20, &data->after_mode, 0, 0, 0, 0, "Cycling mode to use after first keyframe");
+ uiDefButS(block, NUM, B_FMODIFIER_REDRAW, "Max Cycles:", 157, cy2, 150, 20, &data->after_cycles, 0, 10000, 10, 3, "Maximum number of cycles to allow (0 = infinite)");
uiBlockEndAlign(block);
}
/* --------------- */
+/* draw settings for noise modifier */
+static void draw_modifier__noise(uiBlock *block, FCurve *fcu, FModifier *fcm, int *yco, short *height, short width, short active, int rb_col)
+{
+ FMod_Noise *data= (FMod_Noise *)fcm->data;
+ int cy= (*yco - 30), cy1= (*yco - 50), cy2= (*yco - 70);
+ char cyc_mode[]="Modification %t|Replace %x0|Add %x1|Subtract %x2|Multiply %x3";
+
+ /* set the height */
+ (*height) = 80;
+
+ /* basic settings (backdrop + some padding) */
+ DRAW_BACKDROP((*height));
+
+ uiDefButS(block, MENU, B_FMODIFIER_REDRAW, cyc_mode,
+ 3, cy, 150, 20, &data->modification, 0, 0, 0, 0, "Method of modifying the existing F-Curve use before first keyframe");
+
+ uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Size:",
+ 3, cy1, 150, 20, &data->size, 0.000001, 10000.0, 0.01, 3, "");
+ uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Strength:",
+ 3, cy2, 150, 20, &data->strength, 0.0, 10000.0, 0.01, 3, "");
+
+ uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Phase:",
+ 155, cy1, 150, 20, &data->phase, 0.0, 100000.0, 0.1, 3, "");
+ uiDefButS(block, NUM, B_FMODIFIER_REDRAW, "Depth:",
+ 155, cy2, 150, 20, &data->depth, 0, 128, 1, 3, "");
+
+}
+
+/* --------------- */
+
#define BINARYSEARCH_FRAMEEQ_THRESH 0.0001
/* Binary search algorithm for finding where to insert Envelope Data Point.
@@ -652,27 +808,27 @@ static void draw_modifier__envelope(uiBlock *block, FCurve *fcu, FModifier *fcm,
FMod_Envelope *env= (FMod_Envelope *)fcm->data;
FCM_EnvelopeData *fed;
uiBut *but;
- int cy= (*yco - 30);
+ int cy= (*yco - 28);
int i;
/* set the height:
* - basic settings + variable height from envelope controls
*/
- (*height) = 96 + (25 * env->totvert);
+ (*height) = 115 + (35 * env->totvert);
/* basic settings (backdrop + general settings + some padding) */
- //DRAW_BACKDROP((*height)); // XXX buggy...
+ DRAW_BACKDROP((*height));
/* General Settings */
uiDefBut(block, LABEL, 1, "Envelope:", 10, cy, 100, 20, NULL, 0.0, 0.0, 0, 0, "Settings for cycling before first keyframe");
cy -= 20;
uiBlockBeginAlign(block);
- uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Reference Val:", 10, cy, 300, 20, &env->midval, -FLT_MAX, FLT_MAX, 10, 3, "");
+ uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Reference Val:", 10, cy, 300, 20, &env->midval, -UI_FLT_MAX, UI_FLT_MAX, 10, 3, "");
cy -= 20;
- uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Min:", 10, cy, 150, 20, &env->min, -FLT_MAX, env->max, 10, 3, "Minimum value (relative to Reference Value) that is used as the 'normal' minimum value");
- uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Max:", 160, cy, 150, 20, &env->max, env->min, FLT_MAX, 10, 3, "Maximum value (relative to Reference Value) that is used as the 'normal' maximum value");
+ uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Min:", 10, cy, 150, 20, &env->min, -UI_FLT_MAX, env->max, 10, 3, "Minimum value (relative to Reference Value) that is used as the 'normal' minimum value");
+ uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Max:", 160, cy, 150, 20, &env->max, env->min, UI_FLT_MAX, 10, 3, "Maximum value (relative to Reference Value) that is used as the 'normal' maximum value");
cy -= 35;
uiBlockEndAlign(block);
@@ -687,13 +843,13 @@ static void draw_modifier__envelope(uiBlock *block, FCurve *fcu, FModifier *fcm,
/* Points List */
for (i=0, fed=env->data; i < env->totvert; i++, fed++) {
uiBlockBeginAlign(block);
- but=uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Fra:", 5, cy, 100, 20, &fed->time, -FLT_MAX, FLT_MAX, 10, 3, "Frame that envelope point occurs");
+ but=uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Fra:", 2, cy, 90, 20, &fed->time, -UI_FLT_MAX, UI_FLT_MAX, 10, 1, "Frame that envelope point occurs");
uiButSetFunc(but, validate_fmodifier_cb, fcu, fcm);
- uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Min:", 105, cy, 100, 20, &fed->min, -FLT_MAX, FLT_MAX, 10, 3, "Minimum bound of envelope at this point");
- uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Max:", 205, cy, 100, 20, &fed->max, -FLT_MAX, FLT_MAX, 10, 3, "Maximum bound of envelope at this point");
+ uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Min:", 92, cy, 100, 20, &fed->min, -UI_FLT_MAX, UI_FLT_MAX, 10, 2, "Minimum bound of envelope at this point");
+ uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Max:", 192, cy, 100, 20, &fed->max, -UI_FLT_MAX, UI_FLT_MAX, 10, 2, "Maximum bound of envelope at this point");
- but= uiDefIconBut(block, BUT, B_FMODIFIER_REDRAW, ICON_X, 305, cy, 20, 20, NULL, 0.0, 0.0, 0.0, 0.0, "Delete envelope control point");
+ but= uiDefIconBut(block, BUT, B_FMODIFIER_REDRAW, ICON_X, 292, cy, 18, 20, NULL, 0.0, 0.0, 0.0, 0.0, "Delete envelope control point");
uiButSetFunc(but, fmod_envelope_deletepoint_cb, env, SET_INT_IN_POINTER(i));
uiBlockBeginAlign(block);
cy -= 25;
@@ -702,6 +858,43 @@ static void draw_modifier__envelope(uiBlock *block, FCurve *fcu, FModifier *fcm,
/* --------------- */
+/* draw settings for limits modifier */
+static void draw_modifier__limits(uiBlock *block, FCurve *fcu, FModifier *fcm, int *yco, short *height, short width, short active, int rb_col)
+{
+ FMod_Limits *data= (FMod_Limits *)fcm->data;
+ const int togButWidth = 50;
+ const int textButWidth = ((width/2)-togButWidth);
+
+ /* set the height */
+ (*height) = 60;
+
+ /* basic settings (backdrop + some padding) */
+ DRAW_BACKDROP((*height));
+
+ /* Draw Pairs of LimitToggle+LimitValue */
+ uiBlockBeginAlign(block);
+ uiDefButBitI(block, TOGBUT, FCM_LIMIT_XMIN, B_FMODIFIER_REDRAW, "xMin", 5, *yco-30, togButWidth, 18, &data->flag, 0, 24, 0, 0, "Use minimum x value");
+ uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "", 5+togButWidth, *yco-30, (textButWidth-5), 18, &data->rect.xmin, -UI_FLT_MAX, UI_FLT_MAX, 0.1,0.5,"Lowest x value to allow");
+ uiBlockEndAlign(block);
+
+ uiBlockBeginAlign(block);
+ uiDefButBitI(block, TOGBUT, FCM_LIMIT_XMAX, B_FMODIFIER_REDRAW, "XMax", 5+(width-(textButWidth-5)-togButWidth), *yco-30, 50, 18, &data->flag, 0, 24, 0, 0, "Use maximum x value");
+ uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "", 5+(width-textButWidth-5), *yco-30, (textButWidth-5), 18, &data->rect.xmax, -UI_FLT_MAX, UI_FLT_MAX, 0.1,0.5,"Highest x value to allow");
+ uiBlockEndAlign(block);
+
+ uiBlockBeginAlign(block);
+ uiDefButBitI(block, TOGBUT, FCM_LIMIT_YMIN, B_FMODIFIER_REDRAW, "yMin", 5, *yco-52, togButWidth, 18, &data->flag, 0, 24, 0, 0, "Use minimum y value");
+ uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "", 5+togButWidth, *yco-52, (textButWidth-5), 18, &data->rect.ymin, -UI_FLT_MAX, UI_FLT_MAX, 0.1,0.5,"Lowest y value to allow");
+ uiBlockEndAlign(block);
+
+ uiBlockBeginAlign(block);
+ uiDefButBitI(block, TOGBUT, FCM_LIMIT_YMAX, B_FMODIFIER_REDRAW, "YMax", 5+(width-(textButWidth-5)-togButWidth), *yco-52, 50, 18, &data->flag, 0, 24, 0, 0, "Use maximum y value");
+ uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "", 5+(width-textButWidth-5), *yco-52, (textButWidth-5), 18, &data->rect.ymax, -UI_FLT_MAX, UI_FLT_MAX, 0.1,0.5,"Highest y value to allow");
+ uiBlockEndAlign(block);
+}
+
+/* --------------- */
+
static void graph_panel_modifier_draw(uiBlock *block, FCurve *fcu, FModifier *fcm, int *yco)
{
FModifierTypeInfo *fmi= fmodifier_get_typeinfo(fcm);
@@ -716,25 +909,24 @@ static void graph_panel_modifier_draw(uiBlock *block, FCurve *fcu, FModifier *fc
uiBlockSetEmboss(block, UI_EMBOSSN);
/* rounded header */
-#if 0 // XXX buggy...
- if (active) uiBlockSetCol(block, TH_BUT_ACTION);
- rb_col= (active)?-20:20;
- but= uiDefBut(block, ROUNDBOX, B_REDR, "", 10-8, *yco-2, width, 24, NULL, 5.0, 0.0, 15.0, (float)(rb_col-20), "");
- if (active) uiBlockSetCol(block, TH_AUTO);
-#endif // XXX buggy
+ rb_col= (active)?-20:20;
+ but= uiDefBut(block, ROUNDBOX, B_REDR, "", 0, *yco-2, width, 24, NULL, 5.0, 0.0, 15.0, (float)(rb_col-20), "");
/* expand */
- uiDefIconButBitS(block, ICONTOG, FMODIFIER_FLAG_EXPANDED, B_REDR, ICON_TRIA_RIGHT, 5, *yco-1, 20, 20, &fcm->flag, 0.0, 0.0, 0, 0, "Modifier is expanded");
+ uiDefIconButBitS(block, ICONTOG, FMODIFIER_FLAG_EXPANDED, B_REDR, ICON_TRIA_RIGHT, 5, *yco-1, 20, 20, &fcm->flag, 0.0, 0.0, 0, 0, "Modifier is expanded.");
/* checkbox for 'active' status (for now) */
- but= uiDefIconButBitS(block, ICONTOG, FMODIFIER_FLAG_ACTIVE, B_REDR, ICON_RADIOBUT_OFF, 25, *yco-1, 20, 20, &fcm->flag, 0.0, 0.0, 0, 0, "Modifier is active one");
+ but= uiDefIconButBitS(block, ICONTOG, FMODIFIER_FLAG_ACTIVE, B_REDR, ICON_RADIOBUT_OFF, 25, *yco-1, 20, 20, &fcm->flag, 0.0, 0.0, 0, 0, "Modifier is active one.");
uiButSetFunc(but, activate_fmodifier_cb, fcu, fcm);
/* name */
if (fmi)
- but= uiDefBut(block, LABEL, 1, fmi->name, 10+40, *yco, 240, 20, NULL, 0.0, 0.0, 0, 0, "F-Curve Modifier Type. Click to make modifier active one.");
+ uiDefBut(block, LABEL, 1, fmi->name, 10+40, *yco, 150, 20, NULL, 0.0, 0.0, 0, 0, "F-Curve Modifier Type. Click to make modifier active one.");
else
- but= uiDefBut(block, LABEL, 1, "<Unknown Modifier>", 10+40, *yco, 240, 20, NULL, 0.0, 0.0, 0, 0, "F-Curve Modifier Type. Click to make modifier active one.");
+ uiDefBut(block, LABEL, 1, "<Unknown Modifier>", 10+40, *yco, 150, 20, NULL, 0.0, 0.0, 0, 0, "F-Curve Modifier Type. Click to make modifier active one.");
+
+ /* 'mute' button */
+ uiDefIconButBitS(block, ICONTOG, FMODIFIER_FLAG_MUTED, B_REDR, ICON_MUTE_IPO_OFF, 10+(width-60), *yco-1, 20, 20, &fcm->flag, 0.0, 0.0, 0, 0, "Modifier is temporarily muted (not evaluated).");
/* delete button */
but= uiDefIconBut(block, BUT, B_REDR, ICON_X, 10+(width-30), *yco, 19, 19, NULL, 0.0, 0.0, 0.0, 0.0, "Delete F-Curve Modifier.");
@@ -758,6 +950,14 @@ static void graph_panel_modifier_draw(uiBlock *block, FCurve *fcu, FModifier *fc
case FMODIFIER_TYPE_ENVELOPE: /* Envelope */
draw_modifier__envelope(block, fcu, fcm, yco, &height, width, active, rb_col);
break;
+
+ case FMODIFIER_TYPE_LIMITS: /* Limits */
+ draw_modifier__limits(block, fcu, fcm, yco, &height, width, active, rb_col);
+ break;
+
+ case FMODIFIER_TYPE_NOISE: /* Noise */
+ draw_modifier__noise(block, fcu, fcm, yco, &height, width, active, rb_col);
+ break;
default: /* unknown type */
height= 96;
@@ -770,18 +970,19 @@ static void graph_panel_modifier_draw(uiBlock *block, FCurve *fcu, FModifier *fc
(*yco) -= (height + 27);
}
-static void graph_panel_modifiers(const bContext *C, ARegion *ar, short cntrl, bAnimListElem *ale)
+static void graph_panel_modifiers(const bContext *C, Panel *pa)
{
- FCurve *fcu= (FCurve *)ale->data;
+ bAnimListElem *ale;
+ FCurve *fcu;
FModifier *fcm;
uiBlock *block;
int yco= 190;
- block= uiBeginBlock(C, ar, "graph_panel_modifiers", UI_EMBOSS, UI_HELV);
- if (uiNewPanel(C, ar, block, "Modifiers", "Graph", 340, 30, 318, 254)==0) return;
- uiBlockSetHandleFunc(block, do_graph_region_modifier_buttons, NULL);
+ if(!graph_panel_context(C, &ale, &fcu))
+ return;
- uiNewPanelHeight(block, 204);
+ block= uiLayoutFreeBlock(pa->layout);
+ uiBlockSetHandleFunc(block, do_graph_region_modifier_buttons, NULL);
/* 'add modifier' button at top of panel */
// XXX for now, this will be a operator button which calls a temporary 'add modifier' operator
@@ -790,12 +991,8 @@ static void graph_panel_modifiers(const bContext *C, ARegion *ar, short cntrl, b
/* draw each modifier */
for (fcm= fcu->modifiers.first; fcm; fcm= fcm->next)
graph_panel_modifier_draw(block, fcu, fcm, &yco);
-
- /* since these buttons can have variable height */
- if (yco < 0)
- uiNewPanelHeight(block, (204 - yco));
- else
- uiNewPanelHeight(block, 204);
+
+ MEM_freeN(ale);
}
/* ******************* general ******************************** */
@@ -828,42 +1025,31 @@ bAnimListElem *get_active_fcurve_channel (bAnimContext *ac)
return NULL;
}
-void graph_region_buttons(const bContext *C, ARegion *ar)
+void graph_buttons_register(ARegionType *art)
{
- SpaceIpo *sipo= (SpaceIpo *)CTX_wm_space_data(C);
- bAnimContext ac;
- bAnimListElem *ale= NULL;
-
- /* for now, only draw if we could init the anim-context info (necessary for all animation-related tools)
- * to work correctly is able to be correctly retrieved. There's no point showing empty panels?
- */
- if (ANIM_animdata_get_context(C, &ac) == 0)
- return;
-
-
- /* try to find 'active' F-Curve */
- ale= get_active_fcurve_channel(&ac);
- if (ale == NULL)
- return;
-
- /* for now, the properties panel displays info about the selected channels */
- graph_panel_properties(C, ar, 0, ale);
-
- /* driver settings for active F-Curve (only for 'Drivers' mode) */
- if (sipo->mode == SIPO_MODE_DRIVERS)
- graph_panel_drivers(C, ar, 0, ale);
-
- /* modifiers */
- graph_panel_modifiers(C, ar, 0, ale);
-
+ PanelType *pt;
- uiDrawPanels(C, 1); /* 1 = align */
- uiMatchPanelsView2d(ar); /* sets v2d->totrct */
-
- /* free temp data */
- MEM_freeN(ale);
-}
+ pt= MEM_callocN(sizeof(PanelType), "spacetype graph panel properties");
+ strcpy(pt->idname, "GRAPH_PT_properties");
+ strcpy(pt->label, "Properties");
+ pt->draw= graph_panel_properties;
+ pt->poll= graph_panel_poll;
+ BLI_addtail(&art->paneltypes, pt);
+ pt= MEM_callocN(sizeof(PanelType), "spacetype graph panel drivers");
+ strcpy(pt->idname, "GRAPH_PT_drivers");
+ strcpy(pt->label, "Drivers");
+ pt->draw= graph_panel_drivers;
+ pt->poll= graph_panel_drivers_poll;
+ BLI_addtail(&art->paneltypes, pt);
+
+ pt= MEM_callocN(sizeof(PanelType), "spacetype graph panel modifiers");
+ strcpy(pt->idname, "GRAPH_PT_modifiers");
+ strcpy(pt->label, "Modifiers");
+ pt->draw= graph_panel_modifiers;
+ pt->poll= graph_panel_poll;
+ BLI_addtail(&art->paneltypes, pt);
+}
static int graph_properties(bContext *C, wmOperator *op)
{
diff --git a/source/blender/editors/space_graph/graph_draw.c b/source/blender/editors/space_graph/graph_draw.c
index 46d3f102b89..f6d9406e7da 100644
--- a/source/blender/editors/space_graph/graph_draw.c
+++ b/source/blender/editors/space_graph/graph_draw.c
@@ -84,10 +84,8 @@
#include "UI_interface_icons.h"
#include "UI_resources.h"
#include "UI_view2d.h"
-#include "UI_text.h"
/* XXX */
-extern void ui_rasterpos_safe(float x, float y, float aspect);
extern void gl_round_box(int mode, float minx, float miny, float maxx, float maxy, float rad);
/* *************************** */
@@ -744,7 +742,83 @@ static void draw_ipokey(SpaceIpo *sipo, ARegion *ar)
/* Public Curve-Drawing API ---------------- */
-void graph_draw_curves (bAnimContext *ac, SpaceIpo *sipo, ARegion *ar, View2DGrid *grid)
+/* Draw the 'ghost' F-Curves (i.e. snapshots of the curve) */
+void graph_draw_ghost_curves (bAnimContext *ac, SpaceIpo *sipo, ARegion *ar, View2DGrid *grid)
+{
+ FCurve *fcu;
+
+ /* draw with thick dotted lines */
+ setlinestyle(1);
+ glLineWidth(3.0f);
+
+ /* anti-aliased lines for less jagged appearance */
+ glEnable(GL_LINE_SMOOTH);
+ glEnable(GL_BLEND);
+
+ /* the ghost curves are simply sampled F-Curves stored in sipo->ghostCurves */
+ for (fcu= sipo->ghostCurves.first; fcu; fcu= fcu->next) {
+ /* set whatever color the curve has set
+ * - this is set by the function which creates these
+ * - draw with a fixed opacity of 2
+ */
+ glColor4f(fcu->color[0], fcu->color[1], fcu->color[2], 0.5f);
+
+ /* simply draw the stored samples */
+ draw_fcurve_curve_samples(fcu, &ar->v2d);
+ }
+
+ /* restore settings */
+ setlinestyle(0);
+ glLineWidth(1.0f);
+
+ glDisable(GL_LINE_SMOOTH);
+ glDisable(GL_BLEND);
+}
+
+/* check if any FModifiers to draw controls for - fcm is 'active' modifier */
+static short fcurve_needs_draw_fmodifier_controls (FCurve *fcu, FModifier *fcm)
+{
+ /* don't draw if there aren't any modifiers at all */
+ if (fcu->modifiers.first == NULL)
+ return 0;
+
+ /* if there's an active modifier - don't draw if it doesn't drastically
+ * alter the curve...
+ */
+ if (fcm) {
+ switch (fcm->type) {
+ /* clearly harmless */
+ case FMODIFIER_TYPE_CYCLES:
+ return 0;
+
+ /* borderline... */
+ case FMODIFIER_TYPE_NOISE:
+ return 0;
+ }
+ }
+
+ /* if only one modifier - don't draw if it is muted or disabled */
+ if (fcu->modifiers.first == fcu->modifiers.last) {
+ fcm= fcu->modifiers.first;
+ if (fcm->flag & (FMODIFIER_FLAG_DISABLED|FMODIFIER_FLAG_MUTED))
+ return 0;
+ }
+
+ /* if only active modifier - don't draw if it is muted or disabled */
+ if (fcm) {
+ if (fcm->flag & (FMODIFIER_FLAG_DISABLED|FMODIFIER_FLAG_MUTED))
+ return 0;
+ }
+
+ /* if we're still here, this means that there are modifiers with controls to be drawn */
+ // FIXME: what happens if all the modifiers were muted/disabled
+ return 1;
+}
+
+/* This is called twice from space_graph.c -> graph_main_area_draw()
+ * Unselected then selected F-Curves are drawn so that they do not occlude each other.
+ */
+void graph_draw_curves (bAnimContext *ac, SpaceIpo *sipo, ARegion *ar, View2DGrid *grid, short sel)
{
ListBase anim_data = {NULL, NULL};
bAnimListElem *ale;
@@ -752,6 +826,7 @@ void graph_draw_curves (bAnimContext *ac, SpaceIpo *sipo, ARegion *ar, View2DGri
/* build list of curves to draw */
filter= (ANIMFILTER_VISIBLE|ANIMFILTER_CURVESONLY|ANIMFILTER_CURVEVISIBLE);
+ filter |= ((sel) ? (ANIMFILTER_SEL) : (ANIMFILTER_UNSEL));
ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);
/* for each curve:
@@ -787,8 +862,10 @@ void graph_draw_curves (bAnimContext *ac, SpaceIpo *sipo, ARegion *ar, View2DGri
UI_ThemeColorShade(TH_HEADER, 50);
}
else {
- /* set whatever color the curve has set */
- glColor3fv(fcu->color);
+ /* set whatever color the curve has set
+ * - unselected curves draw less opaque to help distinguish the selected ones
+ */
+ glColor4f(fcu->color[0], fcu->color[1], fcu->color[2], ((sel) ? 1.0f : 0.5f));
}
/* anti-aliased lines for less jagged appearance */
@@ -818,14 +895,8 @@ void graph_draw_curves (bAnimContext *ac, SpaceIpo *sipo, ARegion *ar, View2DGri
}
/* 2) draw handles and vertices as appropriate based on active */
- if ( ((fcm) && (fcm->type != FMODIFIER_TYPE_CYCLES)) || (fcu->modifiers.first && !fcm) ) {
- /* draw controls for the 'active' modifier
- * - there may not be an 'active' modifier on this curve to draw
- * - this curve may not be active, so modifier controls shouldn't get drawn either
- *
- * NOTE: cycles modifier is currently an exception where the original points can still be edited, so
- * this branch is skipped... (TODO: set up the generic system for this so that we don't need special hacks like this)
- */
+ if (fcurve_needs_draw_fmodifier_controls(fcu, fcm)) {
+ /* only draw controls if this is the active modifier */
if ((fcu->flag & FCURVE_ACTIVE) && (fcm)) {
switch (fcm->type) {
case FMODIFIER_TYPE_ENVELOPE: /* envelope */
@@ -972,7 +1043,7 @@ void graph_draw_channel_names(bAnimContext *ac, SpaceIpo *sipo, ARegion *ar)
expand= ICON_TRIA_RIGHT;
sel = SEL_ACTC(act);
- strcpy(name, "Action");
+ strcpy(name, act->id.name+2);
}
break;
case ANIMTYPE_FILLDRIVERS: /* drivers widget */
@@ -1176,10 +1247,14 @@ void graph_draw_channel_names(bAnimContext *ac, SpaceIpo *sipo, ARegion *ar)
else
mute = ICON_MUTE_IPO_OFF;
- if (EDITABLE_FCU(fcu))
- protect = ICON_UNLOCKED;
+ if (fcu->bezt) {
+ if (EDITABLE_FCU(fcu))
+ protect = ICON_UNLOCKED;
+ else
+ protect = ICON_LOCKED;
+ }
else
- protect = ICON_LOCKED;
+ protect = ICON_ZOOMOUT; // XXX editability is irrelevant here, but this icon is temp...
sel = SEL_FCU(fcu);
@@ -1326,8 +1401,7 @@ void graph_draw_channel_names(bAnimContext *ac, SpaceIpo *sipo, ARegion *ar)
else
UI_ThemeColor(TH_TEXT);
offset += 3;
- ui_rasterpos_safe(x+offset, y-4, 1.0f);
- UI_DrawString(G.font, name, 0);
+ UI_DrawString(x+offset, y-4, name);
/* reset offset - for RHS of panel */
offset = 0;
diff --git a/source/blender/editors/space_graph/graph_edit.c b/source/blender/editors/space_graph/graph_edit.c
index de020e8ce70..a3d0b50b9a6 100644
--- a/source/blender/editors/space_graph/graph_edit.c
+++ b/source/blender/editors/space_graph/graph_edit.c
@@ -60,6 +60,7 @@
#include "RNA_access.h"
#include "RNA_define.h"
+#include "RNA_enum_types.h"
#include "BKE_action.h"
#include "BKE_depsgraph.h"
@@ -115,19 +116,21 @@ static void get_graph_keyframe_extents (bAnimContext *ac, float *xmin, float *xm
for (ale= anim_data.first; ale; ale= ale->next) {
Object *nob= NULL; //ANIM_nla_mapping_get(ac, ale);
FCurve *fcu= (FCurve *)ale->key_data;
- float tmin, tmax;
+ float txmin, txmax, tymin, tymax;
/* get range and apply necessary scaling before */
- calc_fcurve_bounds(fcu, &tmin, &tmax, ymin, ymax);
+ calc_fcurve_bounds(fcu, &txmin, &txmax, &tymin, &tymax);
if (nob) {
- tmin= get_action_frame_inv(nob, tmin);
- tmax= get_action_frame_inv(nob, tmax);
+ txmin= get_action_frame_inv(nob, txmin);
+ txmax= get_action_frame_inv(nob, txmax);
}
/* try to set cur using these values, if they're more extreme than previously set values */
- if (xmin) *xmin= MIN2(*xmin, tmin);
- if (xmax) *xmax= MAX2(*xmax, tmax);
+ if ((xmin) && (txmin < *xmin)) *xmin= txmin;
+ if ((xmax) && (txmax > *xmax)) *xmax= txmax;
+ if ((ymin) && (tymin < *ymin)) *ymin= tymin;
+ if ((ymax) && (tymax > *ymax)) *ymax= tymax;
}
/* free memory */
@@ -238,12 +241,245 @@ void GRAPHEDIT_OT_view_all (wmOperatorType *ot)
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
}
+/* ******************** Create Ghost-Curves Operator *********************** */
+/* This operator samples the data of the selected F-Curves to F-Points, storing them
+ * as 'ghost curves' in the active Graph Editor
+ */
+
+/* Bake each F-Curve into a set of samples, and store as a ghost curve */
+static void create_ghost_curves (bAnimContext *ac, int start, int end)
+{
+ SpaceIpo *sipo= (SpaceIpo *)ac->sa->spacedata.first;
+ ListBase anim_data = {NULL, NULL};
+ bAnimListElem *ale;
+ int filter;
+
+ /* free existing ghost curves */
+ free_fcurves(&sipo->ghostCurves);
+
+ /* sanity check */
+ if (start >= end) {
+ printf("Error: Frame range for Ghost F-Curve creation is inappropriate \n");
+ return;
+ }
+
+ /* filter data */
+ filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CURVEVISIBLE | ANIMFILTER_SEL | ANIMFILTER_CURVESONLY);
+ ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);
+
+ /* loop through filtered data and add keys between selected keyframes on every frame */
+ for (ale= anim_data.first; ale; ale= ale->next) {
+ FCurve *fcu= (FCurve *)ale->key_data;
+ FCurve *gcu= MEM_callocN(sizeof(FCurve), "Ghost FCurve");
+ ChannelDriver *driver= fcu->driver;
+ FPoint *fpt;
+ int cfra;
+
+ /* disable driver so that it don't muck up the sampling process */
+ fcu->driver= NULL;
+
+ /* create samples, but store them in a new curve
+ * - we cannot use fcurve_store_samples() as that will only overwrite the original curve
+ */
+ gcu->fpt= fpt= MEM_callocN(sizeof(FPoint)*(end-start+1), "Ghost FPoint Samples");
+ gcu->totvert= end - start + 1;
+
+ /* use the sampling callback at 1-frame intervals from start to end frames */
+ for (cfra= start; cfra <= end; cfra++, fpt++) {
+ fpt->vec[0]= (float)cfra;
+ fpt->vec[1]= fcurve_samplingcb_evalcurve(fcu, NULL, (float)cfra);
+ }
+
+ /* set color of ghost curve
+ * - make the color slightly darker
+ */
+ gcu->color[0]= fcu->color[0] - 0.07f;
+ gcu->color[1]= fcu->color[1] - 0.07f;
+ gcu->color[2]= fcu->color[2] - 0.07f;
+
+ /* store new ghost curve */
+ BLI_addtail(&sipo->ghostCurves, gcu);
+
+ /* restore driver */
+ fcu->driver= driver;
+ }
+
+ /* admin and redraws */
+ BLI_freelistN(&anim_data);
+}
+
+/* ------------------- */
+
+static int graphkeys_create_ghostcurves_exec(bContext *C, wmOperator *op)
+{
+ bAnimContext ac;
+ View2D *v2d;
+ int start, end;
+
+ /* get editor data */
+ if (ANIM_animdata_get_context(C, &ac) == 0)
+ return OPERATOR_CANCELLED;
+
+ /* ghost curves are snapshots of the visible portions of the curves, so set range to be the visible range */
+ v2d= &ac.ar->v2d;
+ start= (int)v2d->cur.xmin;
+ end= (int)v2d->cur.xmax;
+
+ /* bake selected curves into a ghost curve */
+ create_ghost_curves(&ac, start, end);
+
+ /* update this editor only */
+ ED_area_tag_redraw(CTX_wm_area(C));
+
+ return OPERATOR_FINISHED;
+}
+
+void GRAPHEDIT_OT_ghost_curves_create (wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "Create Ghost Curves";
+ ot->idname= "GRAPHEDIT_OT_ghost_curves_create";
+ ot->description= "Create snapshot (Ghosts) of selected F-Curves as background aid for active Graph Editor.";
+
+ /* api callbacks */
+ ot->exec= graphkeys_create_ghostcurves_exec;
+ ot->poll= ED_operator_areaactive;
+
+ /* flags */
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+
+ // todo: add props for start/end frames
+}
+
+/* ******************** Clear Ghost-Curves Operator *********************** */
+/* This operator clears the 'ghost curves' for the active Graph Editor */
+
+static int graphkeys_clear_ghostcurves_exec(bContext *C, wmOperator *op)
+{
+ bAnimContext ac;
+ SpaceIpo *sipo;
+
+ /* get editor data */
+ if (ANIM_animdata_get_context(C, &ac) == 0)
+ return OPERATOR_CANCELLED;
+ sipo= (SpaceIpo *)ac.sa->spacedata.first;
+
+ /* if no ghost curves, don't do anything */
+ if (sipo->ghostCurves.first == NULL)
+ return OPERATOR_CANCELLED;
+
+ /* free ghost curves */
+ free_fcurves(&sipo->ghostCurves);
+
+ /* update this editor only */
+ ED_area_tag_redraw(CTX_wm_area(C));
+
+ return OPERATOR_FINISHED;
+}
+
+void GRAPHEDIT_OT_ghost_curves_clear (wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "Create Ghost Curves";
+ ot->idname= "GRAPHEDIT_OT_ghost_curves_clear";
+ ot->description= "Clear F-Curve snapshots (Ghosts) for active Graph Editor.";
+
+ /* api callbacks */
+ ot->exec= graphkeys_clear_ghostcurves_exec;
+ ot->poll= ED_operator_areaactive;
+
+ /* flags */
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+}
/* ************************************************************************** */
/* GENERAL STUFF */
// TODO: insertkey
+/* ******************** Click-Insert Keyframes Operator ************************* */
+
+static int graphkeys_click_insert_exec (bContext *C, wmOperator *op)
+{
+ bAnimContext ac;
+ bAnimListElem *ale;
+ float frame, val;
+
+ /* get animation context */
+ if (ANIM_animdata_get_context(C, &ac) == 0)
+ return OPERATOR_CANCELLED;
+
+ /* get active F-Curve 'anim-list-element' */
+ ale= get_active_fcurve_channel(&ac);
+ if (ELEM(NULL, ale, ale->data)) {
+ if (ale) MEM_freeN(ale);
+ return OPERATOR_CANCELLED;
+ }
+
+ /* get frame and value from props */
+ frame= RNA_float_get(op->ptr, "frame");
+ val= RNA_float_get(op->ptr, "value");
+
+ /* insert keyframe on the specified frame + value */
+ insert_vert_fcurve((FCurve *)ale->data, frame, val, 0);
+
+ /* free temp data */
+ MEM_freeN(ale);
+
+ /* set notifier that things have changed */
+ ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES);
+
+ /* done */
+ return OPERATOR_FINISHED;
+}
+
+static int graphkeys_click_insert_invoke (bContext *C, wmOperator *op, wmEvent *evt)
+{
+ bAnimContext ac;
+ ARegion *ar;
+ View2D *v2d;
+ int mval[2];
+ float x, y;
+
+ /* get animation context */
+ if (ANIM_animdata_get_context(C, &ac) == 0)
+ return OPERATOR_CANCELLED;
+
+ /* store mouse coordinates in View2D space, into the operator's properties */
+ ar= ac.ar;
+ v2d= &ar->v2d;
+
+ mval[0]= (evt->x - ar->winrct.xmin);
+ mval[1]= (evt->y - ar->winrct.ymin);
+
+ UI_view2d_region_to_view(v2d, mval[0], mval[1], &x, &y);
+
+ RNA_float_set(op->ptr, "frame", x);
+ RNA_float_set(op->ptr, "value", y);
+
+ /* run exec now */
+ return graphkeys_click_insert_exec(C, op);
+}
+
+void GRAPHEDIT_OT_keyframes_click_insert (wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "Click-Insert Keyframes";
+ ot->idname= "GRAPHEDIT_OT_keyframes_click_insert";
+
+ /* api callbacks */
+ ot->invoke= graphkeys_click_insert_invoke;
+ ot->exec= graphkeys_click_insert_exec;
+ ot->poll= ED_operator_areaactive; // XXX active + editable poll
+
+ /* flags */
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+
+ /* properties */
+ RNA_def_float(ot->srna, "frame", 1.0f, -FLT_MAX, FLT_MAX, "Frame Number", "Frame to insert keyframe on", 0, 100);
+ RNA_def_float(ot->srna, "value", 1.0f, -FLT_MAX, FLT_MAX, "Value", "Value for keyframe on", 0, 100);
+}
+
/* ******************** Copy/Paste Keyframes Operator ************************* */
/* NOTE: the backend code for this is shared with the dopesheet editor */
@@ -302,7 +538,7 @@ static int graphkeys_copy_exec(bContext *C, wmOperator *op)
return OPERATOR_CANCELLED;
}
- /* set notifier tha things have changed */
+ /* set notifier that things have changed */
ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES);
return OPERATOR_FINISHED;
@@ -341,7 +577,7 @@ static int graphkeys_paste_exec(bContext *C, wmOperator *op)
/* validate keyframes after editing */
ANIM_editkeyframes_refresh(&ac);
- /* set notifier tha things have changed */
+ /* set notifier that things have changed */
ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES);
return OPERATOR_FINISHED;
@@ -398,7 +634,7 @@ static int graphkeys_duplicate_exec(bContext *C, wmOperator *op)
/* validate keyframes after editing */
ANIM_editkeyframes_refresh(&ac);
- /* set notifier tha things have changed */
+ /* set notifier that things have changed */
ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES);
return OPERATOR_FINISHED;
@@ -469,7 +705,7 @@ static int graphkeys_delete_exec(bContext *C, wmOperator *op)
/* validate keyframes after editing */
ANIM_editkeyframes_refresh(&ac);
- /* set notifier tha things have changed */
+ /* set notifier that things have changed */
ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES);
return OPERATOR_FINISHED;
@@ -530,7 +766,7 @@ static int graphkeys_clean_exec(bContext *C, wmOperator *op)
/* validate keyframes after editing */
ANIM_editkeyframes_refresh(&ac);
- /* set notifier tha things have changed */
+ /* set notifier that things have changed */
ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES);
return OPERATOR_FINISHED;
@@ -611,7 +847,7 @@ static int graphkeys_bake_exec(bContext *C, wmOperator *op)
/* validate keyframes after editing */
ANIM_editkeyframes_refresh(&ac);
- /* set notifier tha things have changed */
+ /* set notifier that things have changed */
ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES);
return OPERATOR_FINISHED;
@@ -737,7 +973,7 @@ static int graphkeys_sample_exec(bContext *C, wmOperator *op)
/* validate keyframes after editing */
ANIM_editkeyframes_refresh(&ac);
- /* set notifier tha things have changed */
+ /* set notifier that things have changed */
ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES);
return OPERATOR_FINISHED;
@@ -811,7 +1047,7 @@ static int graphkeys_expo_exec(bContext *C, wmOperator *op)
/* validate keyframes after editing */
ANIM_editkeyframes_refresh(&ac);
- /* set notifier tha things have changed */
+ /* set notifier that things have changed */
ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES);
return OPERATOR_FINISHED;
@@ -837,14 +1073,6 @@ void GRAPHEDIT_OT_keyframes_extrapolation_type (wmOperatorType *ot)
/* ******************** Set Interpolation-Type Operator *********************** */
-/* defines for set ipo-type for selected keyframes tool */
-EnumPropertyItem prop_graphkeys_ipo_types[] = {
- {BEZT_IPO_CONST, "CONSTANT", "Constant Interpolation", ""},
- {BEZT_IPO_LIN, "LINEAR", "Linear Interpolation", ""},
- {BEZT_IPO_BEZ, "BEZIER", "Bezier Interpolation", ""},
- {0, NULL, NULL, NULL}
-};
-
/* this function is responsible for setting interpolation mode for keyframes */
static void setipo_graph_keys(bAnimContext *ac, short mode)
{
@@ -887,7 +1115,7 @@ static int graphkeys_ipo_exec(bContext *C, wmOperator *op)
/* validate keyframes after editing */
ANIM_editkeyframes_refresh(&ac);
- /* set notifier tha things have changed */
+ /* set notifier that things have changed */
ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES);
return OPERATOR_FINISHED;
@@ -908,21 +1136,11 @@ void GRAPHEDIT_OT_keyframes_interpolation_type (wmOperatorType *ot)
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
/* id-props */
- RNA_def_enum(ot->srna, "type", prop_graphkeys_ipo_types, 0, "Type", "");
+ RNA_def_enum(ot->srna, "type", beztriple_interpolation_mode_items, 0, "Type", "");
}
/* ******************** Set Handle-Type Operator *********************** */
-/* defines for set handle-type for selected keyframes tool */
-EnumPropertyItem prop_graphkeys_handletype_types[] = {
- {HD_AUTO, "AUTO", "Auto Handles", ""},
- {HD_VECT, "VECTOR", "Vector Handles", ""},
- {HD_FREE, "FREE", "Free Handles", ""},
- {HD_ALIGN, "ALIGN", "Aligned Handles", ""},
-// {-1, "TOGGLE", "Toggle between Free and Aligned Handles", ""},
- {0, NULL, NULL, NULL}
-};
-
/* this function is responsible for setting handle-type of selected keyframes */
static void sethandles_graph_keys(bAnimContext *ac, short mode)
{
@@ -984,7 +1202,7 @@ static int graphkeys_handletype_exec(bContext *C, wmOperator *op)
/* validate keyframes after editing */
ANIM_editkeyframes_refresh(&ac);
- /* set notifier tha things have changed */
+ /* set notifier that things have changed */
ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES);
return OPERATOR_FINISHED;
@@ -1005,7 +1223,7 @@ void GRAPHEDIT_OT_keyframes_handletype (wmOperatorType *ot)
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
/* id-props */
- RNA_def_enum(ot->srna, "type", prop_graphkeys_handletype_types, 0, "Type", "");
+ RNA_def_enum(ot->srna, "type", beztriple_handle_type_items, 0, "Type", "");
}
/* ************************************************************************** */
@@ -1098,22 +1316,6 @@ void GRAPHEDIT_OT_keyframes_euler_filter (wmOperatorType *ot)
/* ***************** Snap Current Frame Operator *********************** */
-/* helper callback for graphkeys_cfrasnap_exec() -> used to help get the average time of all selected beztriples */
-// TODO: if some other code somewhere needs this, it'll be time to port this over to keyframes_edit.c!!!
-static short bezt_calc_average(BeztEditData *bed, BezTriple *bezt)
-{
- /* only if selected */
- if (bezt->f2 & SELECT) {
- /* store average time in float (only do rounding at last step */
- bed->f1 += bezt->vec[1][0];
-
- /* increment number of items */
- bed->i1++;
- }
-
- return 0;
-}
-
/* snap current-frame indicator to 'average time' of selected keyframe */
static int graphkeys_cfrasnap_exec(bContext *C, wmOperator *op)
{
@@ -1145,7 +1347,7 @@ static int graphkeys_cfrasnap_exec(bContext *C, wmOperator *op)
CFRA= (int)floor((bed.f1 / bed.i1) + 0.5f);
}
- /* set notifier tha things have changed */
+ /* set notifier that things have changed */
WM_event_add_notifier(C, NC_SCENE|ND_FRAME, ac.scene);
return OPERATOR_FINISHED;
@@ -1188,7 +1390,7 @@ static void snap_graph_keys(bAnimContext *ac, short mode)
BeztEditFunc edit_cb;
/* filter data */
- filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CURVEVISIBLE| ANIMFILTER_FOREDIT | ANIMFILTER_CURVESONLY);
+ filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CURVEVISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_CURVESONLY);
ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);
/* get beztriple editing callbacks */
@@ -1196,6 +1398,10 @@ static void snap_graph_keys(bAnimContext *ac, short mode)
memset(&bed, 0, sizeof(BeztEditData));
bed.scene= ac->scene;
+ if (mode == GRAPHKEYS_SNAP_NEAREST_MARKER) {
+ bed.list.first= (ac->markers) ? ac->markers->first : NULL;
+ bed.list.last= (ac->markers) ? ac->markers->last : NULL;
+ }
/* snap keyframes */
for (ale= anim_data.first; ale; ale= ale->next) {
@@ -1232,7 +1438,7 @@ static int graphkeys_snap_exec(bContext *C, wmOperator *op)
/* validate keyframes after editing */
ANIM_editkeyframes_refresh(&ac);
- /* set notifier tha things have changed */
+ /* set notifier that things have changed */
ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES);
return OPERATOR_FINISHED;
@@ -1286,13 +1492,14 @@ static void mirror_graph_keys(bAnimContext *ac, short mode)
/* for 'first selected marker' mode, need to find first selected marker first! */
// XXX should this be made into a helper func in the API?
if (mode == GRAPHKEYS_MIRROR_MARKER) {
- Scene *scene= ac->scene;
TimeMarker *marker= NULL;
/* find first selected marker */
- for (marker= scene->markers.first; marker; marker=marker->next) {
- if (marker->flag & SELECT) {
- break;
+ if (ac->markers) {
+ for (marker= ac->markers->first; marker; marker=marker->next) {
+ if (marker->flag & SELECT) {
+ break;
+ }
}
}
@@ -1342,7 +1549,7 @@ static int graphkeys_mirror_exec(bContext *C, wmOperator *op)
/* validate keyframes after editing */
ANIM_editkeyframes_refresh(&ac);
- /* set notifier tha things have changed */
+ /* set notifier that things have changed */
ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES);
return OPERATOR_FINISHED;
@@ -1396,7 +1603,7 @@ static int graphkeys_smooth_exec(bContext *C, wmOperator *op)
/* validate keyframes after editing */
ANIM_editkeyframes_refresh(&ac);
- /* set notifier tha things have changed */
+ /* set notifier that things have changed */
ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_VALUES);
return OPERATOR_FINISHED;
@@ -1421,18 +1628,6 @@ void GRAPHEDIT_OT_keyframes_smooth (wmOperatorType *ot)
/* ******************** Add F-Curve Modifier Operator *********************** */
-/* F-Modifier types - duplicate of existing codes... */
- // XXX how can we have this list from the RNA definitions instead?
-EnumPropertyItem prop_fmodifier_types[] = {
- {FMODIFIER_TYPE_GENERATOR, "GENERATOR", "Generator", ""},
- {FMODIFIER_TYPE_ENVELOPE, "ENVELOPE", "Envelope", ""},
- {FMODIFIER_TYPE_CYCLES, "CYCLES", "Cycles", ""},
- {FMODIFIER_TYPE_NOISE, "NOISE", "Noise", ""},
- {FMODIFIER_TYPE_FILTER, "FILTER", "Filter", ""},
- {FMODIFIER_TYPE_PYTHON, "PYTHON", "Python", ""},
- {0, NULL, NULL, NULL}
-};
-
static int graph_fmodifier_add_exec(bContext *C, wmOperator *op)
{
bAnimContext ac;
@@ -1491,7 +1686,7 @@ void GRAPHEDIT_OT_fmodifier_add (wmOperatorType *ot)
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
/* id-props */
- RNA_def_enum(ot->srna, "type", prop_fmodifier_types, 0, "Type", "");
+ RNA_def_enum(ot->srna, "type", fmodifier_type_items, 0, "Type", "");
}
/* ************************************************************************** */
diff --git a/source/blender/editors/space_graph/graph_header.c b/source/blender/editors/space_graph/graph_header.c
index e223696c3bf..178b4b4562f 100644
--- a/source/blender/editors/space_graph/graph_header.c
+++ b/source/blender/editors/space_graph/graph_header.c
@@ -66,8 +66,6 @@
enum {
B_REDR = 0,
B_MODECHANGE,
- B_GRAPHCOPYKEYS,
- B_GRAPHPASTEKEYS,
} eActHeader_ButEvents;
/* ************************ header area region *********************** */
@@ -99,7 +97,7 @@ static uiBlock *graph_viewmenu(bContext *C, ARegion *ar, void *arg_unused)
uiBlock *block;
short yco= 0, menuwidth=120;
- block= uiBeginBlock(C, ar, "graph_viewmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "graph_viewmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_viewmenu, NULL);
// XXX these options should use new menu-options
@@ -156,7 +154,7 @@ void graph_header_buttons(const bContext *C, ARegion *ar)
uiBlock *block;
int xco, yco= 3;
- block= uiBeginBlock(C, ar, "header buttons", UI_EMBOSS, UI_HELV);
+ block= uiBeginBlock(C, ar, "header buttons", UI_EMBOSS);
uiBlockSetHandleFunc(block, do_graph_buttons, NULL);
xco= ED_area_header_standardbuttons(C, block, yco);
@@ -164,9 +162,6 @@ void graph_header_buttons(const bContext *C, ARegion *ar)
if ((sa->flag & HEADER_NO_PULLDOWN)==0) {
int xmax;
- /* pull down menus */
- uiBlockSetEmboss(block, UI_EMBOSSP);
-
xmax= GetButStringLength("View");
uiDefPulldownBut(block, graph_viewmenu, CTX_wm_area(C),
"View", xco, yco-2, xmax-3, 24, "");
@@ -198,17 +193,17 @@ void graph_header_buttons(const bContext *C, ARegion *ar)
uiDefIconButBitI(block, TOGN, ADS_FILTER_NOCAM, B_REDR, ICON_CAMERA_DATA, (short)(xco+=XIC),yco,XIC,YIC, &(sipo->ads->filterflag), 0, 0, 0, 0, "Display Cameras");
uiDefIconButBitI(block, TOGN, ADS_FILTER_NOCUR, B_REDR, ICON_CURVE_DATA, (short)(xco+=XIC),yco,XIC,YIC, &(sipo->ads->filterflag), 0, 0, 0, 0, "Display Curves");
uiBlockEndAlign(block);
- xco += 30;
+ xco += 15;
}
else {
// XXX this case shouldn't happen at all... for now, just pad out same amount of space
- xco += 6*XIC + 35;
+ xco += 6*XIC + 15;
}
/* copy + paste */
uiBlockBeginAlign(block);
- uiDefIconBut(block, BUT, B_GRAPHCOPYKEYS, ICON_COPYDOWN, xco,yco,XIC,YIC, 0, 0, 0, 0, 0, "Copies the selected keyframes from the selected channel(s) to the buffer");
- uiDefIconBut(block, BUT, B_GRAPHPASTEKEYS, ICON_PASTEDOWN, xco+=XIC,yco,XIC,YIC, 0, 0, 0, 0, 0, "Pastes the keyframes from the buffer");
+ uiDefIconButO(block, BUT, "GRAPHEDIT_OT_keyframes_copy", WM_OP_INVOKE_REGION_WIN, ICON_COPYDOWN, xco+=XIC,yco,XIC,YIC, "Copies the selected keyframes from the selected channel(s) to the buffer");
+ uiDefIconButO(block, BUT, "GRAPHEDIT_OT_keyframes_paste", WM_OP_INVOKE_REGION_WIN, ICON_PASTEDOWN, xco+=XIC,yco,XIC,YIC, "Pastes the keyframes from the buffer");
uiBlockEndAlign(block);
xco += (XIC + 8);
@@ -225,6 +220,16 @@ void graph_header_buttons(const bContext *C, ARegion *ar)
xco,yco,90,YIC, &sipo->autosnap, 0, 1, 0, 0,
"Auto-snapping mode for keyframe times when transforming");
}
+ xco += 98;
+
+ /* ghost curves */
+ // XXX these icons need to be changed
+ if (sipo->ghostCurves.first)
+ uiDefIconButO(block, BUT, "GRAPHEDIT_OT_ghost_curves_clear", WM_OP_INVOKE_REGION_WIN, ICON_OUTLINER_DATA_CURVE, xco,yco,XIC,YIC, "Clear F-Curve snapshots (Ghosts) for this Graph Editor instance");
+ else
+ uiDefIconButO(block, BUT, "GRAPHEDIT_OT_ghost_curves_create", WM_OP_INVOKE_REGION_WIN, ICON_OUTLINER_OB_CURVE, xco,yco,XIC,YIC, "Create snapshot (Ghosts) of selected F-Curves as background aid for this Graph Editor instance");
+ xco+= XIC;
+
/* always as last */
UI_view2d_totRect_set(&ar->v2d, xco+XIC+80, (int)(ar->v2d.tot.ymax - ar->v2d.tot.ymin));
diff --git a/source/blender/editors/space_graph/graph_intern.h b/source/blender/editors/space_graph/graph_intern.h
index 06fda53fc67..7ba636302a5 100644
--- a/source/blender/editors/space_graph/graph_intern.h
+++ b/source/blender/editors/space_graph/graph_intern.h
@@ -35,6 +35,7 @@ struct bAnimListElem;
struct SpaceIpo;
struct ScrArea;
struct ARegion;
+struct ARegionType;
struct View2DGrid;
/* internal exports only */
@@ -46,7 +47,9 @@ struct ARegion *graph_has_buttons_region(struct ScrArea *sa);
/* ***************************************** */
/* graph_draw.c */
void graph_draw_channel_names(struct bAnimContext *ac, struct SpaceIpo *sipo, struct ARegion *ar);
-void graph_draw_curves(struct bAnimContext *ac, struct SpaceIpo *sipo, struct ARegion *ar, struct View2DGrid *grid);
+
+void graph_draw_curves(struct bAnimContext *ac, struct SpaceIpo *sipo, struct ARegion *ar, struct View2DGrid *grid, short sel);
+void graph_draw_ghost_curves(struct bAnimContext *ac, struct SpaceIpo *sipo, struct ARegion *ar, struct View2DGrid *grid);
/* ***************************************** */
/* graph_header.c */
@@ -82,6 +85,8 @@ enum {
void GRAPHEDIT_OT_previewrange_set(struct wmOperatorType *ot);
void GRAPHEDIT_OT_view_all(struct wmOperatorType *ot);
+void GRAPHEDIT_OT_keyframes_click_insert(struct wmOperatorType *ot);
+
void GRAPHEDIT_OT_keyframes_copy(struct wmOperatorType *ot);
void GRAPHEDIT_OT_keyframes_paste(struct wmOperatorType *ot);
@@ -125,10 +130,15 @@ enum {
void GRAPHEDIT_OT_fmodifier_add(struct wmOperatorType *ot);
+/* ----------- */
+
+void GRAPHEDIT_OT_ghost_curves_create(struct wmOperatorType *ot);
+void GRAPHEDIT_OT_ghost_curves_clear(struct wmOperatorType *ot);
+
/* ***************************************** */
/* graph_buttons.c */
void GRAPHEDIT_OT_properties(struct wmOperatorType *ot);
-void graph_region_buttons(const struct bContext *C, struct ARegion *ar);
+void graph_buttons_register(struct ARegionType *art);
struct bAnimListElem *get_active_fcurve_channel(struct bAnimContext *ac);
diff --git a/source/blender/editors/space_graph/graph_ops.c b/source/blender/editors/space_graph/graph_ops.c
index 4ff566489ae..a23f0081c04 100644
--- a/source/blender/editors/space_graph/graph_ops.c
+++ b/source/blender/editors/space_graph/graph_ops.c
@@ -101,6 +101,9 @@ void graphedit_operatortypes(void)
WM_operatortype_append(GRAPHEDIT_OT_view_all);
WM_operatortype_append(GRAPHEDIT_OT_properties);
+ WM_operatortype_append(GRAPHEDIT_OT_ghost_curves_create);
+ WM_operatortype_append(GRAPHEDIT_OT_ghost_curves_clear);
+
/* keyframes */
/* selection */
WM_operatortype_append(GRAPHEDIT_OT_keyframes_clickselect);
@@ -125,6 +128,8 @@ void graphedit_operatortypes(void)
WM_operatortype_append(GRAPHEDIT_OT_keyframes_copy);
WM_operatortype_append(GRAPHEDIT_OT_keyframes_paste);
+ WM_operatortype_append(GRAPHEDIT_OT_keyframes_click_insert);
+
//TODO: insertkey...
/* F-Curve Modifiers */
@@ -136,16 +141,28 @@ void graphedit_operatortypes(void)
static void graphedit_keymap_keyframes (wmWindowManager *wm, ListBase *keymap)
{
+ wmKeymapItem *kmi;
+
/* view */
WM_keymap_add_item(keymap, "GRAPHEDIT_OT_handles_view_toggle", HKEY, KM_PRESS, KM_CTRL, 0);
/* graph_select.c - selection tools */
/* click-select */
- // TODO: column to alt, left-right to ctrl (for select-linked consistency)
WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_clickselect", SELECTMOUSE, KM_PRESS, 0, 0);
- RNA_boolean_set(WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_clickselect", SELECTMOUSE, KM_PRESS, KM_CTRL, 0)->ptr, "column", 1);
- RNA_boolean_set(WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_clickselect", SELECTMOUSE, KM_PRESS, KM_SHIFT, 0)->ptr, "extend", 1);
- RNA_enum_set(WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_clickselect", SELECTMOUSE, KM_PRESS, KM_ALT, 0)->ptr, "left_right", GRAPHKEYS_LRSEL_TEST);
+ kmi= WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_clickselect", SELECTMOUSE, KM_PRESS, KM_ALT, 0);
+ RNA_boolean_set(kmi->ptr, "column", 1);
+ kmi= WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_clickselect", SELECTMOUSE, KM_PRESS, KM_SHIFT, 0);
+ RNA_boolean_set(kmi->ptr, "extend", 1);
+ kmi= WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_clickselect", SELECTMOUSE, KM_PRESS, KM_ALT|KM_SHIFT, 0);
+ RNA_boolean_set(kmi->ptr, "extend", 1);
+ RNA_boolean_set(kmi->ptr, "column", 1);
+ kmi= WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_clickselect", SELECTMOUSE, KM_PRESS, KM_CTRL, 0);
+ RNA_enum_set(kmi->ptr, "left_right", GRAPHKEYS_LRSEL_TEST);
+ kmi= WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_clickselect", SELECTMOUSE, KM_PRESS, KM_CTRL|KM_ALT, 0);
+ RNA_boolean_set(kmi->ptr, "curves", 1);
+ kmi= WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_clickselect", SELECTMOUSE, KM_PRESS, KM_CTRL|KM_ALT|KM_SHIFT, 0);
+ RNA_boolean_set(kmi->ptr, "curves", 1);
+ RNA_boolean_set(kmi->ptr, "extend", 1);
/* deselect all */
WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_select_all_toggle", AKEY, KM_PRESS, 0, 0);
@@ -189,7 +206,7 @@ static void graphedit_keymap_keyframes (wmWindowManager *wm, ListBase *keymap)
WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_duplicate", DKEY, KM_PRESS, KM_SHIFT, 0);
/* insertkey */
- // TODO..
+ WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_click_insert", LEFTMOUSE, KM_PRESS, KM_CTRL, 0);
/* copy/paste */
WM_keymap_add_item(keymap, "GRAPHEDIT_OT_keyframes_copy", CKEY, KM_PRESS, KM_CTRL, 0);
diff --git a/source/blender/editors/space_graph/graph_select.c b/source/blender/editors/space_graph/graph_select.c
index d6f738b5285..bb923ca6f95 100644
--- a/source/blender/editors/space_graph/graph_select.c
+++ b/source/blender/editors/space_graph/graph_select.c
@@ -73,6 +73,7 @@
#include "ED_keyframing.h"
#include "ED_keyframes_draw.h"
#include "ED_keyframes_edit.h"
+#include "ED_markers.h"
#include "ED_screen.h"
#include "ED_space_api.h"
@@ -92,7 +93,7 @@
* 3) (de)select all - no testing is done; only for use internal tools as normal function...
*/
-/* Deselects keyframes in the action editor
+/* Deselects keyframes in the Graph Editor
* - This is called by the deselect all operator, as well as other ones!
*
* - test: check if select or deselect all
@@ -140,13 +141,9 @@ static void deselect_graph_keys (bAnimContext *ac, short test, short sel)
/* Keyframes First */
ANIM_fcurve_keys_bezier_loop(&bed, ale->key_data, NULL, sel_cb, NULL);
- /* Curve Selection too */
- if (sel == SELECT_ADD)
- fcu->flag |= FCURVE_SELECTED;
- else if (sel == SELECT_SUBTRACT)
+ /* deactivate the F-Curve, and deselect if deselecting keyframes */
+ if (sel == SELECT_SUBTRACT)
fcu->flag &= ~FCURVE_SELECTED;
- else
- fcu->flag ^= FCURVE_SELECTED;
fcu->flag &= ~FCURVE_ACTIVE;
}
@@ -170,7 +167,7 @@ static int graphkeys_deselectall_exec(bContext *C, wmOperator *op)
else
deselect_graph_keys(&ac, 1, SELECT_ADD);
- /* set notifier tha things have changed */
+ /* set notifier that things have changed */
ED_area_tag_redraw(CTX_wm_area(C)); // FIXME... should be updating 'keyframes' data context or so instead!
return OPERATOR_FINISHED;
@@ -359,21 +356,19 @@ static void markers_selectkeys_between (bAnimContext *ac)
bAnimListElem *ale;
int filter;
- BeztEditFunc select_cb;
+ BeztEditFunc ok_cb, select_cb;
BeztEditData bed;
float min, max;
/* get extreme markers */
- //get_minmax_markers(1, &min, &max); // FIXME... add back markers api!
- min= (float)ac->scene->r.sfra; // xxx temp code
- max= (float)ac->scene->r.efra; // xxx temp code
-
- if (min==max) return;
+ ED_markers_get_minmax(ac->markers, 1, &min, &max);
min -= 0.5f;
max += 0.5f;
/* get editing funcs + data */
+ ok_cb= ANIM_editkeyframes_ok(BEZT_OK_FRAMERANGE);
select_cb= ANIM_editkeyframes_select(SELECT_ADD);
+
memset(&bed, 0, sizeof(BeztEditData));
bed.f1= min;
bed.f2= max;
@@ -388,11 +383,11 @@ static void markers_selectkeys_between (bAnimContext *ac)
if (nob) {
ANIM_nla_mapping_apply_fcurve(nob, ale->key_data, 0, 1);
- ANIM_fcurve_keys_bezier_loop(&bed, ale->key_data, NULL, select_cb, NULL);
+ ANIM_fcurve_keys_bezier_loop(&bed, ale->key_data, ok_cb, select_cb, NULL);
ANIM_nla_mapping_apply_fcurve(nob, ale->key_data, 1, 1);
}
else {
- ANIM_fcurve_keys_bezier_loop(&bed, ale->key_data, NULL, select_cb, NULL);
+ ANIM_fcurve_keys_bezier_loop(&bed, ale->key_data, ok_cb, select_cb, NULL);
}
}
@@ -401,21 +396,6 @@ static void markers_selectkeys_between (bAnimContext *ac)
}
-/* helper callback for columnselect_graph_keys() -> populate list CfraElems with frame numbers from selected beztriples */
-// TODO: if some other code somewhere needs this, it'll be time to port this over to keyframes_edit.c!!!
-static short bezt_to_cfraelem(BeztEditData *bed, BezTriple *bezt)
-{
- /* only if selected */
- if (bezt->f2 & SELECT) {
- CfraElem *ce= MEM_callocN(sizeof(CfraElem), "cfraElem");
- BLI_addtail(&bed->list, ce);
-
- ce->cfra= bezt->vec[1][0];
- }
-
- return 0;
-}
-
/* Selects all visible keyframes in the same frames as the specified elements */
static void columnselect_graph_keys (bAnimContext *ac, short mode)
{
@@ -452,9 +432,7 @@ static void columnselect_graph_keys (bAnimContext *ac, short mode)
break;
case GRAPHKEYS_COLUMNSEL_MARKERS_COLUMN: /* list of selected markers */
- // FIXME: markers api needs to be improved for this first!
- //make_marker_cfra_list(&elems, 1);
- return; // XXX currently, this does nothing!
+ ED_markers_make_cfra_list(ac->markers, &bed.list, 1);
break;
default: /* invalid option */
@@ -513,7 +491,7 @@ static int graphkeys_columnselect_exec(bContext *C, wmOperator *op)
else
columnselect_graph_keys(&ac, mode);
- /* set notifier tha things have changed */
+ /* set notifier that things have changed */
ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_KEYFRAMES_SELECT);
return OPERATOR_FINISHED;
@@ -547,7 +525,7 @@ void GRAPHEDIT_OT_keyframes_columnselect (wmOperatorType *ot)
*/
/* defines for left-right select tool */
-static EnumPropertyItem prop_leftright_select_types[] = {
+static EnumPropertyItem prop_graphkeys_leftright_select_types[] = {
{GRAPHKEYS_LRSEL_TEST, "CHECK", "Check if Select Left or Right", ""},
{GRAPHKEYS_LRSEL_NONE, "OFF", "Don't select", ""},
{GRAPHKEYS_LRSEL_LEFT, "LEFT", "Before current frame", ""},
@@ -657,7 +635,7 @@ static short findnearest_fcurve_vert (bAnimContext *ac, int mval[2], FCurve **fc
}
/* option 1) select keyframe directly under mouse */
-static void mouse_graph_keys (bAnimContext *ac, int mval[], short selectmode)
+static void mouse_graph_keys (bAnimContext *ac, int mval[], short select_mode, short curves_only)
{
FCurve *fcu;
BezTriple *bezt;
@@ -672,17 +650,22 @@ static void mouse_graph_keys (bAnimContext *ac, int mval[], short selectmode)
return;
/* deselect all other curves? */
- if (selectmode == SELECT_REPLACE) {
- deselect_graph_keys(ac, 0, SELECT_SUBTRACT); // XXX this should be curves, not keys
- selectmode= SELECT_ADD;
+ if (select_mode == SELECT_REPLACE) {
+ /* reset selection mode */
+ select_mode= SELECT_ADD;
+
+ /* deselect all other channels and keyframes */
+ //ANIM_deselect_anim_channels(ac->data, ac->datatype, 0, ACHANNEL_SETFLAG_CLEAR);
+ deselect_graph_keys(ac, 0, SELECT_SUBTRACT);
}
- /* if we're selecting points too */
- if ( ((fcu->flag & FCURVE_PROTECTED)==0) /*|| (curvesonly == 0) */) {
+ /* if points can be selected on this F-Curve */
+ // TODO: what about those with no keyframes?
+ if ((curves_only == 0) && ((fcu->flag & FCURVE_PROTECTED)==0)) {
/* only if there's keyframe */
if (bezt) {
/* depends on selection mode */
- if (selectmode == SELECT_INVERT) {
+ if (select_mode == SELECT_INVERT) {
/* keyframe - invert select of all */
if (handle == NEAREST_HANDLE_KEY) {
if (BEZSELECTED(bezt)) {
@@ -704,9 +687,6 @@ static void mouse_graph_keys (bAnimContext *ac, int mval[], short selectmode)
}
}
else {
- /* deselect all other keyframes? */
- deselect_graph_keys(ac, 0, SELECT_SUBTRACT);
-
/* if the keyframe was clicked on, select all verts of given beztriple */
if (handle == NEAREST_HANDLE_KEY) {
BEZ_SEL(bezt);
@@ -719,11 +699,24 @@ static void mouse_graph_keys (bAnimContext *ac, int mval[], short selectmode)
}
}
}
+ else {
+ BeztEditFunc select_cb;
+ BeztEditData bed;
+
+ /* initialise keyframe editing data */
+ memset(&bed, 0, sizeof(BeztEditData));
+
+ /* set up BezTriple edit callbacks */
+ select_cb= ANIM_editkeyframes_select(select_mode);
+
+ /* select all keyframes */
+ ANIM_fcurve_keys_bezier_loop(&bed, fcu, NULL, select_cb, NULL);
+ }
/* select or deselect curve? */
- if (selectmode == SELECT_INVERT)
+ if (select_mode == SELECT_INVERT)
fcu->flag ^= FCURVE_SELECTED;
- else if (selectmode == SELECT_ADD)
+ else if (select_mode == SELECT_ADD)
fcu->flag |= FCURVE_SELECTED;
/* set active F-Curve (NOTE: sync the filter flags with findnearest_fcurve_vert) */
@@ -734,7 +727,7 @@ static void mouse_graph_keys (bAnimContext *ac, int mval[], short selectmode)
}
/* Option 2) Selects all the keyframes on either side of the current frame (depends on which side the mouse is on) */
-static void graphkeys_select_leftright (bAnimContext *ac, short leftright, short select_mode)
+static void graphkeys_mselect_leftright (bAnimContext *ac, short leftright, short select_mode)
{
ListBase anim_data = {NULL, NULL};
bAnimListElem *ale;
@@ -744,9 +737,13 @@ static void graphkeys_select_leftright (bAnimContext *ac, short leftright, short
BeztEditData bed;
Scene *scene= ac->scene;
- /* if select mode is replace, deselect all keyframes first */
+ /* if select mode is replace, deselect all keyframes (and channels) first */
if (select_mode==SELECT_REPLACE) {
- select_mode=SELECT_ADD;
+ /* reset selection mode to add to selection */
+ select_mode= SELECT_ADD;
+
+ /* deselect all other channels and keyframes */
+ ANIM_deselect_anim_channels(ac->data, ac->datatype, 0, ACHANNEL_SETFLAG_CLEAR);
deselect_graph_keys(ac, 0, SELECT_SUBTRACT);
}
@@ -786,7 +783,7 @@ static void graphkeys_select_leftright (bAnimContext *ac, short leftright, short
}
/* Option 3) Selects all visible keyframes in the same frame as the mouse click */
-static void mouse_columnselect_graph_keys (bAnimContext *ac, float selx)
+static void graphkeys_mselect_column (bAnimContext *ac, int mval[2], short select_mode)
{
ListBase anim_data= {NULL, NULL};
bAnimListElem *ale;
@@ -794,12 +791,33 @@ static void mouse_columnselect_graph_keys (bAnimContext *ac, float selx)
BeztEditFunc select_cb, ok_cb;
BeztEditData bed;
+ FCurve *fcu;
+ BezTriple *bezt;
+ float selx = (float)ac->scene->r.cfra;
+
+ /* find the beztriple that occurs on this frame, and use his as the frame number we're using */
+ findnearest_fcurve_vert(ac, mval, &fcu, &bezt);
+
+ /* check if anything to select */
+ if (ELEM(NULL, fcu, bezt))
+ return;
+ selx= bezt->vec[1][0];
+
+ /* if select mode is replace, deselect all keyframes (and channels) first */
+ if (select_mode==SELECT_REPLACE) {
+ /* reset selection mode to add to selection */
+ select_mode= SELECT_ADD;
+
+ /* deselect all other channels and keyframes */
+ ANIM_deselect_anim_channels(ac->data, ac->datatype, 0, ACHANNEL_SETFLAG_CLEAR);
+ deselect_graph_keys(ac, 0, SELECT_SUBTRACT);
+ }
/* initialise keyframe editing data */
memset(&bed, 0, sizeof(BeztEditData));
/* set up BezTriple edit callbacks */
- select_cb= ANIM_editkeyframes_select(SELECT_ADD);
+ select_cb= ANIM_editkeyframes_select(select_mode);
ok_cb= ANIM_editkeyframes_ok(BEZT_OK_FRAME);
/* loop through all of the keys and select additional keyframes
@@ -812,7 +830,6 @@ static void mouse_columnselect_graph_keys (bAnimContext *ac, float selx)
Object *nob= ANIM_nla_mapping_get(ac, ale);
/* set frame for validation callback to refer to */
- // XXX have a more sensitive range?
if (nob)
bed.f1= get_action_frame(nob, selx);
else
@@ -853,7 +870,6 @@ static int graphkeys_clickselect_invoke(bContext *C, wmOperator *op, wmEvent *ev
mval[1]= (event->y - ar->winrct.ymin);
/* select mode is either replace (deselect all, then add) or add/extend */
- // XXX this is currently only available for normal select only
if (RNA_boolean_get(op->ptr, "extend"))
selectmode= SELECT_INVERT;
else
@@ -870,22 +886,22 @@ static int graphkeys_clickselect_invoke(bContext *C, wmOperator *op, wmEvent *ev
else
RNA_int_set(op->ptr, "left_right", GRAPHKEYS_LRSEL_RIGHT);
- graphkeys_select_leftright(&ac, RNA_enum_get(op->ptr, "left_right"), selectmode);
+ graphkeys_mselect_leftright(&ac, RNA_enum_get(op->ptr, "left_right"), selectmode);
}
else if (RNA_boolean_get(op->ptr, "column")) {
- /* select all the keyframes that occur on the same frame as where the mouse clicked */
- float x;
-
- /* figure out where (the frame) the mouse clicked, and set all keyframes in that frame */
- UI_view2d_region_to_view(v2d, mval[0], mval[1], &x, NULL);
- mouse_columnselect_graph_keys(&ac, x);
+ /* select all keyframes in the same frame as the one that was under the mouse */
+ graphkeys_mselect_column(&ac, mval, selectmode);
+ }
+ else if (RNA_boolean_get(op->ptr, "curves")) {
+ /* select all keyframes in F-Curve under mouse */
+ mouse_graph_keys(&ac, mval, selectmode, 1);
}
else {
/* select keyframe under mouse */
- mouse_graph_keys(&ac, mval, selectmode); // xxx curves only should become an arg
+ mouse_graph_keys(&ac, mval, selectmode, 0);
}
- /* set notifier tha things have changed */
+ /* set notifier that things have changed */
ANIM_animdata_send_notifiers(C, &ac, ANIM_CHANGED_BOTH);
/* for tweak grab to work */
@@ -904,9 +920,10 @@ void GRAPHEDIT_OT_keyframes_clickselect (wmOperatorType *ot)
/* id-props */
// XXX should we make this into separate operators?
- RNA_def_enum(ot->srna, "left_right", NULL /* XXX prop_graphkeys_clickselect_items */, 0, "Left Right", ""); // ALTKEY
+ RNA_def_enum(ot->srna, "left_right", prop_graphkeys_leftright_select_types, 0, "Left Right", ""); // CTRLKEY
RNA_def_boolean(ot->srna, "extend", 0, "Extend Select", ""); // SHIFTKEY
- RNA_def_boolean(ot->srna, "column", 0, "Column Select", ""); // CTRLKEY
+ RNA_def_boolean(ot->srna, "column", 0, "Column Select", "Select all keyframes that occur on the same frame as the one under the mouse"); // ALTKEY
+ RNA_def_boolean(ot->srna, "curves", 0, "Only Curves", "Select all the keyframes in the curve"); // CTRLKEY + ALTKEY
}
/* ************************************************************************** */
diff --git a/source/blender/editors/space_graph/space_graph.c b/source/blender/editors/space_graph/space_graph.c
index 72e52f15a65..74002f64187 100644
--- a/source/blender/editors/space_graph/space_graph.c
+++ b/source/blender/editors/space_graph/space_graph.c
@@ -42,6 +42,7 @@
#include "BLI_rand.h"
#include "BKE_context.h"
+#include "BKE_fcurve.h"
#include "BKE_screen.h"
#include "BKE_utildefines.h"
@@ -168,6 +169,9 @@ static void graph_free(SpaceLink *sl)
BLI_freelistN(&si->ads->chanbase);
MEM_freeN(si->ads);
}
+
+ if (si->ghostCurves.first)
+ free_fcurves(&si->ghostCurves);
}
@@ -232,8 +236,14 @@ static void graph_main_area_draw(const bContext *C, ARegion *ar)
UI_view2d_grid_draw(C, v2d, grid, V2D_GRIDLINES_ALL);
/* draw data */
- if (ANIM_animdata_get_context(C, &ac))
- graph_draw_curves(&ac, sipo, ar, grid);
+ if (ANIM_animdata_get_context(C, &ac)) {
+ /* draw ghost curves */
+ graph_draw_ghost_curves(&ac, sipo, ar, grid);
+
+ /* draw curves twice - unselected, then selected, so that the are fewer occlusion problems */
+ graph_draw_curves(&ac, sipo, ar, grid, 0);
+ graph_draw_curves(&ac, sipo, ar, grid, 1);
+ }
/* only free grid after drawing data, as we need to use it to determine sampling rate */
UI_view2d_grid_free(grid);
@@ -283,7 +293,7 @@ static void graph_channel_area_draw(const bContext *C, ARegion *ar)
float col[3];
/* clear and setup matrix */
- UI_GetThemeColor3fv(TH_SHADE2, col);
+ UI_GetThemeColor3fv(TH_BACK, col);
glClearColor(col[0], col[1], col[2], 0.0);
glClear(GL_COLOR_BUFFER_BIT);
@@ -336,34 +346,17 @@ static void graph_buttons_area_init(wmWindowManager *wm, ARegion *ar)
{
ListBase *keymap;
- UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_LIST_UI, ar->winx, ar->winy);
+ ED_region_panels_init(wm, ar);
- keymap= WM_keymap_listbase(wm, "View2D Buttons List", 0, 0);
- WM_event_add_keymap_handler(&ar->handlers, keymap);
keymap= WM_keymap_listbase(wm, "GraphEdit Generic", SPACE_IPO, 0);
WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct);
}
static void graph_buttons_area_draw(const bContext *C, ARegion *ar)
{
- float col[3];
-
- /* clear */
- UI_GetThemeColor3fv(TH_HEADER, col);
-
- glClearColor(col[0], col[1], col[2], 0.0);
- glClear(GL_COLOR_BUFFER_BIT);
-
- /* set view2d view matrix for scrolling (without scrollers) */
- UI_view2d_view_ortho(C, &ar->v2d);
-
- graph_region_buttons(C, ar);
-
- /* restore view matrix? */
- UI_view2d_view_restore(C);
+ ED_region_panels(C, ar, 1, NULL);
}
-
static void graph_region_listener(ARegion *ar, wmNotifier *wmn)
{
/* context changes */
@@ -576,6 +569,8 @@ void ED_spacetype_ipo(void)
art->draw= graph_buttons_area_draw;
BLI_addhead(&st->regiontypes, art);
+
+ graph_buttons_register(art);
BKE_spacetype_register(st);
}
diff --git a/source/blender/editors/space_image/SConscript b/source/blender/editors/space_image/SConscript
index 3ae638d344d..e7041ef0458 100644
--- a/source/blender/editors/space_image/SConscript
+++ b/source/blender/editors/space_image/SConscript
@@ -7,4 +7,9 @@ incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../imbuf'
incs += ' ../../windowmanager #/intern/guardedalloc #/extern/glew/include'
incs += ' ../../render/extern/include ../../makesrna'
-env.BlenderLib ( 'bf_editors_space_image', sources, Split(incs), [], libtype=['core'], priority=[40] )
+defs = []
+
+if env['WITH_BF_LCMS']:
+ defs.append('WITH_LCMS')
+
+env.BlenderLib ( 'bf_editors_space_image', sources, Split(incs), defs, libtype=['core'], priority=[40] )
diff --git a/source/blender/editors/space_image/image_panels.c b/source/blender/editors/space_image/image_buttons.c
index 29ddbd569e4..35004a4bdef 100644
--- a/source/blender/editors/space_image/image_panels.c
+++ b/source/blender/editors/space_image/image_buttons.c
@@ -55,11 +55,11 @@
#include "BKE_global.h"
#include "BKE_library.h"
#include "BKE_main.h"
+#include "BKE_mesh.h"
#include "BKE_node.h"
#include "BKE_packedFile.h"
#include "BKE_screen.h"
#include "BKE_utildefines.h"
-#include "BKE_mesh.h"
#include "RE_pipeline.h"
@@ -250,7 +250,7 @@ static void image_editvertex_buts(const bContext *C, uiBlock *block)
image_transform_but_attr(sima, &imx, &imy, &step, &digits);
- em= EM_GetEditMesh((Mesh *)obedit->data);
+ em= BKE_mesh_get_editmesh((Mesh *)obedit->data);
for (efa= em->faces.first; efa; efa= efa->next) {
tf= CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
if (simaFaceDraw_Check(efa, tf)) {
@@ -340,7 +340,7 @@ static void image_editvertex_buts(const bContext *C, uiBlock *block)
WM_event_add_notifier(C, NC_IMAGE, sima->image);
}
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
}
@@ -383,15 +383,13 @@ static void image_editcursor_buts(const bContext *C, View2D *v2d, uiBlock *block
}
}
-static void image_panel_game_properties(const bContext *C, ARegion *ar)
+static void image_panel_game_properties(const bContext *C, Panel *pa)
{
SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C);
ImBuf *ibuf= BKE_image_get_ibuf(sima->image, &sima->iuser);
uiBlock *block;
- block= uiBeginBlock(C, ar, "image_panel_game_properties", UI_EMBOSS, UI_HELV);
- if(uiNewPanel(C, ar, block, "Real-time Properties", "Image", 10, 10, 318, 204)==0)
- return;
+ block= uiLayoutFreeBlock(pa->layout);
uiBlockSetHandleFunc(block, do_image_panel_events, NULL);
if (ibuf) {
@@ -420,15 +418,14 @@ static void image_panel_game_properties(const bContext *C, ARegion *ar)
}
}
-static void image_panel_view_properties(const bContext *C, ARegion *ar)
+static void image_panel_view_properties(const bContext *C, Panel *pa)
{
SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C);
+ ARegion *ar= CTX_wm_region(C);
Object *obedit= CTX_data_edit_object(C);
uiBlock *block;
- block= uiBeginBlock(C, ar, "image_view_properties", UI_EMBOSS, UI_HELV);
- if(uiNewPanel(C, ar, block, "View Properties", "Image", 10, 30, 318, 204)==0)
- return;
+ block= uiLayoutFreeBlock(pa->layout);
uiBlockSetHandleFunc(block, do_image_panel_events, NULL);
uiDefButBitI(block, TOG, SI_DRAW_TILE, B_REDR, "Repeat Image", 10,160,140,19, &sima->flag, 0, 0, 0, 0, "Repeat/Tile the image display");
@@ -444,7 +441,7 @@ static void image_panel_view_properties(const bContext *C, ARegion *ar)
if (obedit && obedit->type==OB_MESH) {
Mesh *me= obedit->data;
- EditMesh *em= EM_GetEditMesh(me);
+ EditMesh *em= BKE_mesh_get_editmesh(me);
if(EM_texFaceCheck(em)) {
uiDefBut(block, LABEL, B_NOP, "Draw Type:", 10, 80,120,19, 0, 0, 0, 0, 0, "");
@@ -473,7 +470,7 @@ static void image_panel_view_properties(const bContext *C, ARegion *ar)
}
}
- EM_EndEditMesh(me, em);
+ BKE_mesh_end_editmesh(me, em);
}
image_editcursor_buts(C, &ar->v2d, block);
}
@@ -508,10 +505,8 @@ void brush_buttons(const bContext *C, uiBlock *block, short fromsima,
uiBlockEndAlign(block);
yco -= 30;
- uiBlockSetCol(block, TH_BUT_SETTING2);
id= (ID*)settings->imapaint.brush;
xco= 200; // std_libbuttons(block, 0, yco, 0, NULL, evt_browse, ID_BR, 0, id, NULL, menupoin, 0, evt_local, evt_del, 0, evt_keepdata);
- uiBlockSetCol(block, TH_AUTO);
if(brush && !brush->id.lib) {
@@ -570,9 +565,7 @@ void brush_buttons(const bContext *C, uiBlock *block, short fromsima,
if(fromsima && settings->imapaint.tool == PAINT_TOOL_CLONE) {
id= (ID*)brush->clone.image;
- uiBlockSetCol(block, TH_BUT_SETTING2);
xco= 200; // std_libbuttons(block, 0, yco, 0, NULL, B_SIMACLONEBROWSE, ID_IM, 0, id, 0, menupoin, 0, 0, B_SIMACLONEDELETE, 0, 0);
- uiBlockSetCol(block, TH_AUTO);
if(id) {
butw= 320-(xco+5);
uiDefButF(block, NUMSLI, evt_change, "B ",xco+5,yco,butw,19, &brush->clone.alpha , 0.0, 1.0, 0, 0, "Opacity of clone image display");
@@ -590,11 +583,9 @@ void brush_buttons(const bContext *C, uiBlock *block, short fromsima,
else {
MTex *mtex= brush->mtex[brush->texact];
- uiBlockSetCol(block, TH_BUT_SETTING2);
id= (mtex)? (ID*)mtex->tex: NULL;
xco= 200; // std_libbuttons(block, 0, yco, 0, NULL, evt_texbrowse, ID_TE, 0, id, NULL, menupoin, 0, 0, evt_texdel, 0, 0);
/*uiDefButBitS(block, TOG|BIT, BRUSH_FIXED_TEX, evt_change, "Fixed", xco+5,yco,butw,19, &brush->flag, 0, 0, 0, 0, "Keep texture origin in fixed position");*/
- uiBlockSetCol(block, TH_AUTO);
}
}
}
@@ -605,7 +596,14 @@ void brush_buttons(const bContext *C, uiBlock *block, short fromsima,
#endif
}
-static void image_panel_paintcolor(const bContext *C, ARegion *ar)
+static int image_panel_paint_poll(const bContext *C, PanelType *pt)
+{
+ SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C);
+
+ return (sima->image && (sima->flag & SI_DRAWTOOL));
+}
+
+static void image_panel_paintcolor(const bContext *C, Panel *pa)
{
SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C);
ToolSettings *settings= CTX_data_tool_settings(C);
@@ -614,37 +612,26 @@ static void image_panel_paintcolor(const bContext *C, ARegion *ar)
static float hsv[3], old[3]; // used as temp mem for picker
static char hexcol[128];
- block= uiBeginBlock(C, ar, "image_panel_paintcolor", UI_EMBOSS, UI_HELV);
- uiBlockSetHandleFunc(block, do_image_panel_events, NULL);
- if(uiNewPanel(C, ar, block, "Paint Color", "Image", 10, 22, 318, 204)==0)
- return;
-
- if ( (brush && sima->image && (sima->flag & SI_DRAWTOOL))==0) {
- uiNewPanelHeight(block, 0);
+ if(!sima->image || (sima->flag & SI_DRAWTOOL)==0)
return;
- }
- uiNewPanelHeight(block, 204);
- uiBlockPickerButtons(block, brush->rgb, hsv, old, hexcol, 'f', B_REDR);
-}
-
+ block= uiLayoutFreeBlock(pa->layout);
+ uiBlockSetHandleFunc(block, do_image_panel_events, NULL);
+ if(brush)
+ uiBlockPickerButtons(block, brush->rgb, hsv, old, hexcol, 'f', B_REDR);
+}
-static void image_panel_paint(const bContext *C, ARegion *ar)
+static void image_panel_paint(const bContext *C, Panel *pa)
{
SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C);
uiBlock *block;
- block= uiBeginBlock(C, ar, "image_panel_paint", UI_EMBOSS, UI_HELV);
- uiBlockSetHandleFunc(block, do_image_panel_events, NULL);
- if(uiNewPanel(C, ar, block, "Image Paint", "Image", 10, 20, 318, 204)==0)
+ if(!sima->image || (sima->flag & SI_DRAWTOOL)==0)
return;
- if ((sima->image && (sima->flag & SI_DRAWTOOL))==0) {
- uiNewPanelHeight(block, 0);
- return;
- }
- uiNewPanelHeight(block, 204);
+ block= uiLayoutFreeBlock(pa->layout);
+ uiBlockSetHandleFunc(block, do_image_panel_events, NULL);
brush_buttons(C, block, 1, B_SIMANOTHING, B_SIMABRUSHCHANGE, B_SIMABRUSHBROWSE, B_SIMABRUSHLOCAL, B_SIMABRUSHDELETE, B_KEEPDATA, B_SIMABTEXBROWSE, B_SIMABTEXDELETE);
}
@@ -669,7 +656,7 @@ static void image_panel_curves_reset(bContext *C, void *cumap_v, void *ibuf_v)
}
-static void image_panel_curves(const bContext *C, ARegion *ar)
+static void image_panel_curves(const bContext *C, Panel *pa)
{
SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C);
ImBuf *ibuf;
@@ -679,9 +666,7 @@ static void image_panel_curves(const bContext *C, ARegion *ar)
/* and we check for spare */
ibuf= ED_space_image_buffer(sima);
- block= uiBeginBlock(C, ar, "image_panel_curves", UI_EMBOSS, UI_HELV);
- if(uiNewPanel(C, ar, block, "Curves", "Image", 10, 40, 318, 204)==0)
- return;
+ block= uiLayoutFreeBlock(pa->layout);
uiBlockSetHandleFunc(block, do_image_panel_events, NULL);
if (ibuf) {
@@ -834,7 +819,7 @@ static void image_panel_preview(ScrArea *sa, short cntrl) // IMAGE_HANDLER_PREVI
return;
}
- block= uiBeginBlock(C, ar, "image_panel_preview", UI_EMBOSS, UI_HELV);
+ block= uiBeginBlock(C, ar, "image_panel_preview", UI_EMBOSS);
uiPanelControl(UI_PNL_SOLID | UI_PNL_CLOSE | UI_PNL_SCALE | cntrl);
uiSetPanelHandler(IMAGE_HANDLER_PREVIEW); // for close and esc
@@ -853,7 +838,7 @@ static void image_panel_gpencil(short cntrl) // IMAGE_HANDLER_GREASEPENCIL
sima= curarea->spacedata.first;
- block= uiBeginBlock(C, ar, "image_panel_gpencil", UI_EMBOSS, UI_HELV);
+ block= uiBeginBlock(C, ar, "image_panel_gpencil", UI_EMBOSS);
uiPanelControl(UI_PNL_SOLID | UI_PNL_CLOSE | cntrl);
uiSetPanelHandler(IMAGE_HANDLER_GREASEPENCIL); // for close and esc
if (uiNewPanel(C, ar, block, "Grease Pencil", "SpaceImage", 100, 30, 318, 204)==0) return;
@@ -1358,13 +1343,13 @@ void ED_image_uiblock_panel(const bContext *C, uiBlock *block, Image **ima_pp, I
/* fields */
uiBlockBeginAlign(block);
- but= uiDefButBitS(block, TOG, IMA_FIELDS, imagechanged, "Fields", 10, 70, 65, 20, &ima->flag, 0, 0, 0, 0, "Click to enable use of fields in Image");
+ but= uiDefButBitS(block, TOGBUT, IMA_FIELDS, imagechanged, "Fields", 10, 70, 65, 20, &ima->flag, 0, 0, 0, 0, "Click to enable use of fields in Image");
uiButSetFunc(but, image_field_test, ima, iuser);
- uiDefButBitS(block, TOG, IMA_STD_FIELD, B_NOP, "Odd", 75, 70, 45, 20, &ima->flag, 0, 0, 0, 0, "Standard Field Toggle");
+ uiDefButBitS(block, TOGBUT, IMA_STD_FIELD, B_NOP, "Odd", 75, 70, 45, 20, &ima->flag, 0, 0, 0, 0, "Standard Field Toggle");
uiBlockSetFunc(block, image_reload_cb, ima, iuser);
- uiDefButBitS(block, TOG, IMA_ANTIALI, B_NOP, "Anti", 10, 50, 45, 20, &ima->flag, 0, 0, 0, 0, "Toggles Image anti-aliasing, only works with solid colors");
- uiDefButBitS(block, TOG, IMA_DO_PREMUL, imagechanged, "Premul", 55, 50, 65, 20, &ima->flag, 0, 0, 0, 0, "Toggles premultiplying alpha");
+ uiDefButBitS(block, TOGBUT, IMA_ANTIALI, B_NOP, "Anti", 10, 50, 45, 20, &ima->flag, 0, 0, 0, 0, "Toggles Image anti-aliasing, only works with solid colors");
+ uiDefButBitS(block, TOGBUT, IMA_DO_PREMUL, imagechanged, "Premul", 55, 50, 65, 20, &ima->flag, 0, 0, 0, 0, "Toggles premultiplying alpha");
uiBlockEndAlign(block);
if( ELEM(ima->source, IMA_SRC_MOVIE, IMA_SRC_SEQUENCE)) {
@@ -1396,7 +1381,7 @@ void ED_image_uiblock_panel(const bContext *C, uiBlock *block, Image **ima_pp, I
uiBlockSetFunc(block, image_generated_change_cb, ima, iuser);
uiDefButS(block, NUM, imagechanged, "SizeX:", 120,70,100,20, &ima->gen_x, 1.0, 5000.0, 0, 0, "Image size x");
uiDefButS(block, NUM, imagechanged, "SizeY:", 220,70,90,20, &ima->gen_y, 1.0, 5000.0, 0, 0, "Image size y");
- uiDefButS(block, TOG, imagechanged, "UV Test grid",120,50,190,20, &ima->gen_type, 0.0, 1.0, 0, 0, "");
+ uiDefButS(block, TOGBUT, imagechanged, "UV Test grid",120,50,190,20, &ima->gen_type, 0.0, 1.0, 0, 0, "");
uiBlockSetFunc(block, NULL, NULL, NULL);
}
}
@@ -1404,41 +1389,62 @@ void ED_image_uiblock_panel(const bContext *C, uiBlock *block, Image **ima_pp, I
}
-static void image_panel_properties(const bContext *C, ARegion *ar)
+static void image_panel_properties(const bContext *C, Panel *pa)
{
SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C);
uiBlock *block;
- block= uiBeginBlock(C, ar, "image_panel_properties", UI_EMBOSS, UI_HELV);
- if(uiNewPanel(C, ar, block, "Image Properties", "Image", 10, 50, 318, 204)==0)
- return;
+ block= uiLayoutFreeBlock(pa->layout);
uiBlockSetHandleFunc(block, do_image_panel_events, NULL);
/* note, it draws no bottom half in facemode, for vertex buttons */
ED_image_uiblock_panel(C, block, &sima->image, &sima->iuser, B_REDR, B_REDR);
image_editvertex_buts(C, block);
-
- uiEndBlock(C, block);
}
-
-
-void image_buttons_area_defbuts(const bContext *C, ARegion *ar)
+void image_buttons_register(ARegionType *art)
{
-
- image_panel_properties(C, ar);
- image_panel_game_properties(C, ar);
- image_panel_view_properties(C, ar);
- image_panel_paint(C, ar);
- image_panel_paintcolor(C, ar);
- image_panel_curves(C, ar);
-
- uiDrawPanels(C, 1); /* 1 = align */
- uiMatchPanelsView2d(ar); /* sets v2d->totrct */
-
+ PanelType *pt;
+
+ pt= MEM_callocN(sizeof(PanelType), "spacetype image panel properties");
+ strcpy(pt->idname, "IMAGE_PT_properties");
+ strcpy(pt->label, "Image Properties");
+ pt->draw= image_panel_properties;
+ BLI_addtail(&art->paneltypes, pt);
+
+ pt= MEM_callocN(sizeof(PanelType), "spacetype image panel game properties");
+ strcpy(pt->idname, "IMAGE_PT_game_properties");
+ strcpy(pt->label, "Game Properties");
+ pt->draw= image_panel_game_properties;
+ BLI_addtail(&art->paneltypes, pt);
+
+ pt= MEM_callocN(sizeof(PanelType), "spacetype image view properties");
+ strcpy(pt->idname, "IMAGE_PT_view_properties");
+ strcpy(pt->label, "View Properties");
+ pt->draw= image_panel_view_properties;
+ BLI_addtail(&art->paneltypes, pt);
+
+ pt= MEM_callocN(sizeof(PanelType), "spacetype image panel paint");
+ strcpy(pt->idname, "IMAGE_PT_paint");
+ strcpy(pt->label, "Paint");
+ pt->draw= image_panel_paint;
+ pt->poll= image_panel_paint_poll;
+ BLI_addtail(&art->paneltypes, pt);
+
+ pt= MEM_callocN(sizeof(PanelType), "spacetype image panel paint color");
+ strcpy(pt->idname, "IMAGE_PT_paint_color");
+ strcpy(pt->label, "Paint Color");
+ pt->draw= image_panel_paintcolor;
+ pt->poll= image_panel_paint_poll;
+ BLI_addtail(&art->paneltypes, pt);
+
+ pt= MEM_callocN(sizeof(PanelType), "spacetype image panel curves");
+ strcpy(pt->idname, "IMAGE_PT_curves");
+ strcpy(pt->label, "Curves");
+ pt->draw= image_panel_curves;
+ BLI_addtail(&art->paneltypes, pt);
}
-
static int image_properties(bContext *C, wmOperator *op)
{
ScrArea *sa= CTX_wm_area(C);
diff --git a/source/blender/editors/space_image/image_draw.c b/source/blender/editors/space_image/image_draw.c
index ab042fce41f..122e298baaa 100644
--- a/source/blender/editors/space_image/image_draw.c
+++ b/source/blender/editors/space_image/image_draw.c
@@ -55,8 +55,8 @@
#include "ED_image.h"
#include "ED_screen.h"
+#include "UI_interface.h"
#include "UI_resources.h"
-#include "UI_text.h"
#include "UI_view2d.h"
#include "WM_api.h"
@@ -117,10 +117,12 @@ static void image_verify_buffer_float(SpaceImage *sima, ImBuf *ibuf)
if(ibuf->rect_float) {
if(ibuf->rect==NULL) {
- if(image_curves_active(sima))
+ if(image_curves_active(sima)) {
curvemapping_do_ibuf(sima->cumap, ibuf);
- else
+ }
+ else {
IMB_rect_from_float(ibuf);
+ }
}
}
}
@@ -147,16 +149,13 @@ static void draw_render_info(SpaceImage *sima, ARegion *ar)
glRecti(rect.xmin, rect.ymin, rect.xmax, rect.ymax+1);
UI_ThemeColor(TH_TEXT_HI);
- glRasterPos2i(12, rect.ymin + 5);
- UI_RasterPos(12, rect.ymin + 5);
if(showspare) {
- UI_DrawString(G.fonts, "(Previous)", 0);
- glRasterPos2i(72, rect.ymin + 5);
- UI_RasterPos(72, rect.ymin + 5);
+ UI_DrawString(12, rect.ymin + 5, "(Previous)");
+ UI_DrawString(72, rect.ymin + 5, str);
}
-
- UI_DrawString(G.fonts, str, 0);
+ else
+ UI_DrawString(12, rect.ymin + 5, str);
}
void draw_image_info(ARegion *ar, int channels, int x, int y, char *cp, float *fp, int *zp, float *zpf)
@@ -192,10 +191,8 @@ void draw_image_info(ARegion *ar, int channels, int x, int y, char *cp, float *f
glDisable(GL_BLEND);
glColor3ub(255, 255, 255);
- glRasterPos2i(10, 10);
- UI_RasterPos(10, 10);
- UI_DrawString(G.fonts, str, 0);
+ UI_DrawString(10, 10, str);
}
/* image drawing */
@@ -314,6 +311,13 @@ static void sima_draw_alpha_pixelsf(float x1, float y1, int rectx, int recty, fl
// glColorMask(1, 1, 1, 1);
}
+static void sima_draw_colorcorrected_pixels(float x1, float y1, ImBuf *ibuf)
+{
+ colorcorrection_do_ibuf(ibuf, "MONOSCNR.ICM"); /* path is hardcoded here, find some place better */
+
+ glaDrawPixelsSafe(x1, y1, ibuf->x, ibuf->y, ibuf->x, GL_RGBA, GL_UNSIGNED_BYTE, ibuf->crect);
+}
+
static void sima_draw_zbuf_pixels(float x1, float y1, int rectx, int recty, int *recti)
{
/* zbuffer values are signed, so we need to shift color range */
@@ -391,6 +395,14 @@ static void draw_image_buffer(SpaceImage *sima, ARegion *ar, Scene *scene, ImBuf
else if(ibuf->channels==1)
sima_draw_zbuffloat_pixels(scene, x, y, ibuf->x, ibuf->y, ibuf->rect_float);
}
+#ifdef WITH_LCMS
+ else if(sima->flag & SI_COLOR_CORRECTION) {
+ image_verify_buffer_float(sima, ibuf);
+
+ sima_draw_colorcorrected_pixels(x, y, ibuf);
+
+ }
+#endif
else {
if(sima->flag & SI_USE_ALPHA) {
sima_draw_alpha_backdrop(x, y, ibuf->x, ibuf->y, zoomx, zoomy);
diff --git a/source/blender/editors/space_image/image_header.c b/source/blender/editors/space_image/image_header.c
index c7b2f1bd360..9c887edc50d 100644
--- a/source/blender/editors/space_image/image_header.c
+++ b/source/blender/editors/space_image/image_header.c
@@ -45,6 +45,7 @@
#include "BKE_context.h"
#include "BKE_customdata.h"
#include "BKE_image.h"
+#include "BKE_mesh.h"
#include "BKE_screen.h"
#include "BKE_utildefines.h"
#include "BKE_mesh.h"
@@ -86,21 +87,21 @@
#define B_SIMA_RECORD 8
#define B_SIMA_PLAY 9
-static void image_view_viewnavmenu(bContext *C, uiMenuItem *head, void *arg_unused)
+static void image_view_viewnavmenu(bContext *C, uiLayout *layout, void *arg_unused)
{
int a;
- uiMenuItemO(head, 0, "IMAGE_OT_view_zoom_in");
- uiMenuItemO(head, 0, "IMAGE_OT_view_zoom_out");
+ uiItemO(layout, NULL, 0, "IMAGE_OT_view_zoom_in");
+ uiItemO(layout, NULL, 0, "IMAGE_OT_view_zoom_out");
- uiMenuSeparator(head);
+ uiItemS(layout);
for(a=0; a<7; a++) {
const int ratios[7][2] = {{1, 8}, {1, 4}, {1, 2}, {1, 1}, {2, 1}, {4, 1}, {8, 1}};
char namestr[128];
sprintf(namestr, "Zoom %d:%d", ratios[a][0], ratios[a][1]);
- uiMenuItemFloatO(head, namestr, 0, "IMAGE_OT_view_zoom_ratio", "ratio", (float)ratios[a][0]/(float)ratios[a][1]);
+ uiItemFloatO(layout, namestr, 0, "IMAGE_OT_view_zoom_ratio", "ratio", (float)ratios[a][0]/(float)ratios[a][1]);
}
}
@@ -123,7 +124,7 @@ static void do_viewmenu(bContext *C, void *arg, int event)
}
#endif
-static void image_viewmenu(bContext *C, uiMenuItem *head, void *arg_unused)
+static void image_viewmenu(bContext *C, uiLayout *layout, void *arg_unused)
{
bScreen *sc= CTX_wm_screen(C);
ScrArea *sa= CTX_wm_area(C);
@@ -140,44 +141,44 @@ static void image_viewmenu(bContext *C, uiMenuItem *head, void *arg_unused)
show_uvedit= ED_space_image_show_uvedit(sima, CTX_data_edit_object(C));
/* create menu */
- uiMenuItemO(head, ICON_MENU_PANEL, "IMAGE_OT_toggle_view_properties_panel"); // View Properties...
- uiMenuItemO(head, ICON_MENU_PANEL, "IMAGE_OT_toggle_image_properties_panel"); // Image Properties...|N
- uiMenuItemO(head, ICON_MENU_PANEL, "IMAGE_OT_toggle_realtime_properties_panel"); // Real-time properties...
- if(show_paint) uiMenuItemO(head, ICON_MENU_PANEL, "IMAGE_OT_toggle_paint_panel"); // Paint Tool...|C
- uiMenuItemO(head, ICON_MENU_PANEL, "IMAGE_OT_toggle_curves_panel"); // Curves Tool...
- if(show_render) uiMenuItemO(head, ICON_MENU_PANEL, "IMAGE_OT_toggle_compositing_preview_panel"); // Compositing Preview...|Shift P
- uiMenuItemO(head, ICON_MENU_PANEL, "IMAGE_OT_toggle_grease_pencil_panel"); // Grease Pencil...
+ uiItemO(layout, NULL, ICON_MENU_PANEL, "IMAGE_OT_toggle_view_properties_panel"); // View Properties...
+ uiItemO(layout, NULL, ICON_MENU_PANEL, "IMAGE_OT_toggle_image_properties_panel"); // Image Properties...|N
+ uiItemO(layout, NULL, ICON_MENU_PANEL, "IMAGE_OT_toggle_realtime_properties_panel"); // Real-time properties...
+ if(show_paint) uiItemO(layout, NULL, ICON_MENU_PANEL, "IMAGE_OT_toggle_paint_panel"); // Paint Tool...|C
+ uiItemO(layout, NULL, ICON_MENU_PANEL, "IMAGE_OT_toggle_curves_panel"); // Curves Tool...
+ if(show_render) uiItemO(layout, NULL, ICON_MENU_PANEL, "IMAGE_OT_toggle_compositing_preview_panel"); // Compositing Preview...|Shift P
+ uiItemO(layout, NULL, ICON_MENU_PANEL, "IMAGE_OT_toggle_grease_pencil_panel"); // Grease Pencil...
- uiMenuSeparator(head);
+ uiItemS(layout);
- uiMenuItemBooleanR(head, &spaceptr, "update_automatically");
- // XXX if(show_uvedit) uiMenuItemBooleanR(head, &uvptr, "local_view"); // "UV Local View", Numpad /
+ uiItemR(layout, NULL, 0, &spaceptr, "update_automatically", 0, 0);
+ // XXX if(show_uvedit) uiItemR(layout, NULL, 0, &uvptr, "local_view", 0, 0); // "UV Local View", Numpad /
- uiMenuSeparator(head);
+ uiItemS(layout);
- uiMenuLevel(head, "View Navigation", image_view_viewnavmenu);
- if(show_uvedit) uiMenuItemO(head, 0, "IMAGE_OT_view_selected");
- uiMenuItemO(head, 0, "IMAGE_OT_view_all");
+ uiItemMenuF(layout, "View Navigation", 0, image_view_viewnavmenu);
+ if(show_uvedit) uiItemO(layout, NULL, 0, "IMAGE_OT_view_selected");
+ uiItemO(layout, NULL, 0, "IMAGE_OT_view_all");
- if(sa->full) uiMenuItemO(head, 0, "SCREEN_OT_screen_full_area"); // "Tile Window", Ctrl UpArrow
- else uiMenuItemO(head, 0, "SCREEN_OT_screen_full_area"); // "Maximize Window", Ctr DownArrow
+ if(sa->full) uiItemO(layout, NULL, 0, "SCREEN_OT_screen_full_area"); // "Tile Window", Ctrl UpArrow
+ else uiItemO(layout, NULL, 0, "SCREEN_OT_screen_full_area"); // "Maximize Window", Ctr DownArrow
}
-static void image_selectmenu(bContext *C, uiMenuItem *head, void *arg_unused)
+static void image_selectmenu(bContext *C, uiLayout *layout, void *arg_unused)
{
- uiMenuItemO(head, 0, "UV_OT_select_border");
- uiMenuItemBooleanO(head, "Border Select Pinned", 0, "UV_OT_select_border", "pinned", 1); // Border Select Pinned|Shift B
+ uiItemO(layout, NULL, 0, "UV_OT_select_border");
+ uiItemBooleanO(layout, "Border Select Pinned", 0, "UV_OT_select_border", "pinned", 1); // Border Select Pinned|Shift B
- uiMenuSeparator(head);
+ uiItemS(layout);
- uiMenuItemO(head, 0, "UV_OT_select_all_toggle");
- uiMenuItemO(head, 0, "UV_OT_select_invert");
- uiMenuItemO(head, 0, "UV_OT_unlink_selection");
+ uiItemO(layout, NULL, 0, "UV_OT_select_all_toggle");
+ uiItemO(layout, NULL, 0, "UV_OT_select_invert");
+ uiItemO(layout, NULL, 0, "UV_OT_unlink_selection");
- uiMenuSeparator(head);
+ uiItemS(layout);
- uiMenuItemO(head, 0, "UV_OT_select_pinned");
- uiMenuItemO(head, 0, "UV_OT_select_linked");
+ uiItemO(layout, NULL, 0, "UV_OT_select_pinned");
+ uiItemO(layout, NULL, 0, "UV_OT_select_linked");
}
#if 0
@@ -190,7 +191,7 @@ static void do_image_imagemenu(void *arg, int event)
}
#endif
-static void image_imagemenu(bContext *C, uiMenuItem *head, void *arg_unused)
+static void image_imagemenu(bContext *C, uiLayout *layout, void *arg_unused)
{
bScreen *sc= CTX_wm_screen(C);
SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C);
@@ -208,37 +209,37 @@ static void image_imagemenu(bContext *C, uiMenuItem *head, void *arg_unused)
RNA_pointer_create(&sc->id, &RNA_SpaceImageEditor, sima, &spaceptr);
/* create menu */
- uiMenuItemO(head, 0, "IMAGE_OT_new"); // New...
- uiMenuItemO(head, 0, "IMAGE_OT_open"); // Open...
+ uiItemO(layout, NULL, 0, "IMAGE_OT_new"); // New...
+ uiItemO(layout, NULL, 0, "IMAGE_OT_open"); // Open...
if(ima) {
if(!show_render) {
- uiMenuItemO(head, 0, "IMAGE_OT_replace"); // Replace...
- uiMenuItemO(head, 0, "IMAGE_OT_reload"); // Reload...
+ uiItemO(layout, NULL, 0, "IMAGE_OT_replace"); // Replace...
+ uiItemO(layout, NULL, 0, "IMAGE_OT_reload"); // Reload...
}
- uiMenuItemO(head, 0, "IMAGE_OT_save"); // Save
- uiMenuItemO(head, 0, "IMAGE_OT_save_as"); // Save As...
+ uiItemO(layout, NULL, 0, "IMAGE_OT_save"); // Save
+ uiItemO(layout, NULL, 0, "IMAGE_OT_save_as"); // Save As...
if(ima->source == IMA_SRC_SEQUENCE)
- uiMenuItemO(head, 0, "IMAGE_OT_save_sequence"); // Save Changed Sequence Images
+ uiItemO(layout, NULL, 0, "IMAGE_OT_save_sequence"); // Save Changed Sequence Images
if(!show_render) {
- uiMenuSeparator(head);
+ uiItemS(layout);
- if(ima->packedfile) uiMenuItemO(head, 0, "IMAGE_OT_unpack"); // Unpack Image...
- else uiMenuItemO(head, 0, "IMAGE_OT_pack"); // Pack Image
+ if(ima->packedfile) uiItemO(layout, NULL, 0, "IMAGE_OT_unpack"); // Unpack Image...
+ else uiItemO(layout, NULL, 0, "IMAGE_OT_pack"); // Pack Image
/* only for dirty && specific image types : XXX poll? */
if(ibuf && (ibuf->userflags & IB_BITMAPDIRTY))
if(ELEM(ima->source, IMA_SRC_FILE, IMA_SRC_GENERATED) && ima->type != IMA_TYPE_MULTILAYER)
- uiMenuItemBooleanO(head, "Pack As PNG", 0, "IMAGE_OT_pack", "as_png", 1); // Pack Image As PNG
+ uiItemBooleanO(layout, "Pack As PNG", 0, "IMAGE_OT_pack", "as_png", 1); // Pack Image As PNG
- uiMenuSeparator(head);
+ uiItemS(layout);
- uiMenuItemBooleanR(head, &spaceptr, "image_painting");
+ uiItemR(layout, NULL, 0, &spaceptr, "image_painting", 0, 0);
/* move to realtime properties panel */
RNA_id_pointer_create(&ima->id, &imaptr);
- uiMenuLevelEnumR(head, &imaptr, "mapping");
+ uiItemMenuEnumR(layout, NULL, 0, &imaptr, "mapping");
}
}
@@ -260,30 +261,30 @@ static void image_imagemenu(bContext *C, uiMenuItem *head, void *arg_unused)
#endif
}
-static void image_uvs_showhidemenu(bContext *C, uiMenuItem *head, void *arg_unused)
+static void image_uvs_showhidemenu(bContext *C, uiLayout *layout, void *arg_unused)
{
- uiMenuItemO(head, 0, "UV_OT_reveal");
- uiMenuItemO(head, 0, "UV_OT_hide");
- uiMenuItemBooleanO(head, "Hide Unselected", 0, "UV_OT_hide", "unselected", 1);
+ uiItemO(layout, NULL, 0, "UV_OT_reveal");
+ uiItemO(layout, NULL, 0, "UV_OT_hide");
+ uiItemBooleanO(layout, "Hide Unselected", 0, "UV_OT_hide", "unselected", 1);
}
-static void image_uvs_transformmenu(bContext *C, uiMenuItem *head, void *arg_unused)
+static void image_uvs_transformmenu(bContext *C, uiLayout *layout, void *arg_unused)
{
- uiMenuItemEnumO(head, "", 0, "TFM_OT_transform", "mode", TFM_TRANSLATION);
- uiMenuItemEnumO(head, "", 0, "TFM_OT_transform", "mode", TFM_ROTATION);
- uiMenuItemEnumO(head, "", 0, "TFM_OT_transform", "mode", TFM_RESIZE);
+ uiItemEnumO(layout, NULL, 0, "TFM_OT_transform", "mode", TFM_TRANSLATION);
+ uiItemEnumO(layout, NULL, 0, "TFM_OT_transform", "mode", TFM_ROTATION);
+ uiItemEnumO(layout, NULL, 0, "TFM_OT_transform", "mode", TFM_RESIZE);
}
-static void image_uvs_mirrormenu(bContext *C, uiMenuItem *head, void *arg_unused)
+static void image_uvs_mirrormenu(bContext *C, uiLayout *layout, void *arg_unused)
{
- uiMenuItemEnumO(head, "", 0, "UV_OT_mirror", "axis", 'x'); // "X Axis", M, 1
- uiMenuItemEnumO(head, "", 0, "UV_OT_mirror", "axis", 'y'); // "Y Axis", M, 2
+ uiItemEnumO(layout, NULL, 0, "UV_OT_mirror", "axis", 'x'); // "X Axis", M, 1
+ uiItemEnumO(layout, NULL, 0, "UV_OT_mirror", "axis", 'y'); // "Y Axis", M, 2
}
-static void image_uvs_weldalignmenu(bContext *C, uiMenuItem *head, void *arg_unused)
+static void image_uvs_weldalignmenu(bContext *C, uiLayout *layout, void *arg_unused)
{
- uiMenuItemO(head, 0, "UV_OT_weld"); // W, 1
- uiMenuItemsEnumO(head, "UV_OT_align", "axis"); // W, 2/3/4
+ uiItemO(layout, NULL, 0, "UV_OT_weld"); // W, 1
+ uiItemsEnumO(layout, "UV_OT_align", "axis"); // W, 2/3/4
}
#if 0
@@ -302,7 +303,7 @@ static void image_uvs_scriptsmenu (void *args_unused)
int i= 0;
short yco = 20, menuwidth = 120;
- block= uiNewBlock(&curarea->uiblocks, "image_uvs_scriptsmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
+ block= uiNewBlock(&curarea->uiblocks, "image_uvs_scriptsmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_image_uvs_scriptsmenu, NULL);
/* note that we acount for the N previous entries with i+20: */
@@ -321,7 +322,7 @@ static void image_uvs_scriptsmenu (void *args_unused)
#endif /* DISABLE_PYTHON */
#endif
-static void image_uvsmenu(bContext *C, uiMenuItem *head, void *arg_unused)
+static void image_uvsmenu(bContext *C, uiLayout *layout, void *arg_unused)
{
bScreen *sc= CTX_wm_screen(C);
Scene *scene= CTX_data_scene(C);
@@ -338,43 +339,43 @@ static void image_uvsmenu(bContext *C, uiMenuItem *head, void *arg_unused)
RNA_id_pointer_create(&scene->id, &sceneptr);
/* create menu */
- uiMenuItemBooleanR(head, &uvptr, "snap_to_pixels");
- uiMenuItemBooleanR(head, &uvptr, "constrain_to_image_bounds");
+ uiItemR(layout, NULL, 0, &uvptr, "snap_to_pixels", 0, 0);
+ uiItemR(layout, NULL, 0, &uvptr, "constrain_to_image_bounds", 0, 0);
- uiMenuSeparator(head);
+ uiItemS(layout);
- uiMenuItemBooleanR(head, &uvptr, "live_unwrap");
- uiMenuItemO(head, 0, "UV_OT_unwrap");
- uiMenuItemBooleanO(head, "Unpin", 0, "UV_OT_pin", "clear", 1);
- uiMenuItemO(head, 0, "UV_OT_pin");
+ uiItemR(layout, NULL, 0, &uvptr, "live_unwrap", 0, 0);
+ uiItemO(layout, NULL, 0, "UV_OT_unwrap");
+ uiItemBooleanO(layout, "Unpin", 0, "UV_OT_pin", "clear", 1);
+ uiItemO(layout, NULL, 0, "UV_OT_pin");
- uiMenuSeparator(head);
+ uiItemS(layout);
- uiMenuItemO(head, 0, "UV_OT_pack_islands");
- uiMenuItemO(head, 0, "UV_OT_average_islands_scale");
- uiMenuItemO(head, 0, "UV_OT_minimize_stretch");
- uiMenuItemO(head, 0, "UV_OT_stitch");
+ uiItemO(layout, NULL, 0, "UV_OT_pack_islands");
+ uiItemO(layout, NULL, 0, "UV_OT_average_islands_scale");
+ uiItemO(layout, NULL, 0, "UV_OT_minimize_stretch");
+ uiItemO(layout, NULL, 0, "UV_OT_stitch");
- uiMenuSeparator(head);
+ uiItemS(layout);
- uiMenuLevel(head, "Transform", image_uvs_transformmenu);
- uiMenuLevel(head, "Mirror", image_uvs_mirrormenu);
- uiMenuLevel(head, "Weld/Align", image_uvs_weldalignmenu);
+ uiItemMenuF(layout, "Transform", 0, image_uvs_transformmenu);
+ uiItemMenuF(layout, "Mirror", 0, image_uvs_mirrormenu);
+ uiItemMenuF(layout, "Weld/Align", 0, image_uvs_weldalignmenu);
- uiMenuSeparator(head);
+ uiItemS(layout);
- uiMenuItemBooleanR(head, &sceneptr, "proportional_editing");
- uiMenuLevelEnumR(head, &sceneptr, "proportional_editing_falloff");
+ uiItemR(layout, NULL, 0, &sceneptr, "proportional_editing", 0, 0);
+ uiItemMenuEnumR(layout, NULL, 0, &sceneptr, "proportional_editing_falloff");
- uiMenuSeparator(head);
+ uiItemS(layout);
- uiMenuLevel(head, "Show/Hide Faces", image_uvs_showhidemenu);
+ uiItemMenuF(layout, "Show/Hide Faces", 0, image_uvs_showhidemenu);
#if 0
#ifndef DISABLE_PYTHON
- uiMenuSeparator(head);
+ uiItemS(layout);
- uiMenuLevel(head, "Scripts", image_uvs_scriptsmenu);
+ uiItemMenuF(layout, "Scripts", image_uvs_scriptsmenu);
#endif
#endif
}
@@ -382,7 +383,7 @@ static void image_uvsmenu(bContext *C, uiMenuItem *head, void *arg_unused)
static void image_menu_uvlayers(Object *obedit, char *menustr, int *active)
{
Mesh *me= (Mesh*)obedit->data;
- EditMesh *em= EM_GetEditMesh(me);
+ EditMesh *em= BKE_mesh_get_editmesh(me);
CustomDataLayer *layer;
int i, count = 0;
@@ -399,7 +400,7 @@ static void image_menu_uvlayers(Object *obedit, char *menustr, int *active)
*active= CustomData_get_active_layer(&em->fdata, CD_MTFACE);
- EM_EndEditMesh(me, em);
+ BKE_mesh_end_editmesh(me, em);
}
static void do_image_buttons(bContext *C, void *arg, int event)
@@ -732,7 +733,7 @@ void image_header_buttons(const bContext *C, ARegion *ar)
RNA_id_pointer_create(&scene->id, &sceneptr);
/* create block */
- block= uiBeginBlock(C, ar, "header buttons", UI_EMBOSS, UI_HELV);
+ block= uiBeginBlock(C, ar, "header buttons", UI_EMBOSS);
uiBlockSetHandleFunc(block, do_image_buttons, NULL);
xco= ED_area_header_standardbuttons(C, block, yco);
@@ -742,26 +743,24 @@ void image_header_buttons(const bContext *C, ARegion *ar)
char *menuname;
int xmax;
- uiBlockSetEmboss(block, UI_EMBOSSP);
-
xmax= GetButStringLength("View");
- uiDefMenuBut(block, image_viewmenu, NULL, "View", xco, yco-2, xmax-3, 24, "");
+ uiDefMenuBut(block, image_viewmenu, NULL, "View", xco, yco, xmax-3, 20, "");
xco+= xmax;
if(show_uvedit) {
xmax= GetButStringLength("Select");
- uiDefMenuBut(block, image_selectmenu, NULL, "Select", xco, yco-2, xmax-3, 24, "");
+ uiDefMenuBut(block, image_selectmenu, NULL, "Select", xco, yco, xmax-3, 20, "");
xco+= xmax;
}
menuname= (ibuf && (ibuf->userflags & IB_BITMAPDIRTY))? "Image*": "Image";
xmax= GetButStringLength(menuname);
- uiDefMenuBut(block, image_imagemenu, NULL, menuname, xco, yco-2, xmax-3, 24, "");
+ uiDefMenuBut(block, image_imagemenu, NULL, menuname, xco, yco, xmax-3, 20, "");
xco+= xmax;
if(show_uvedit) {
xmax= GetButStringLength("UVs");
- uiDefMenuBut(block, image_uvsmenu, NULL, "UVs", xco, yco-2, xmax-3, 24, "");
+ uiDefMenuBut(block, image_uvsmenu, NULL, "UVs", xco, yco, xmax-3, 20, "");
xco+= xmax;
}
}
@@ -909,8 +908,12 @@ void image_header_buttons(const bContext *C, ARegion *ar)
xco+= XIC;
}
}
+#ifdef WITH_LCMS
+ uiDefIconButR(block, ROW, B_REDR, ICON_IMAGE_ALPHA, xco,yco,XIC,YIC, &spaceptr, "draw_channels", 0, 0, SI_COLOR_CORRECTION, 0, 0, NULL);
+ xco+= XIC;
+#endif
xco+= 8;
-
+
/* record & play */
uiBlockBeginAlign(block);
if(ima->type==IMA_TYPE_COMPOSITE) {
@@ -923,6 +926,7 @@ void image_header_buttons(const bContext *C, ARegion *ar)
}
uiBlockEndAlign(block);
xco+= 8;
+
}
/* draw lock */
@@ -941,19 +945,21 @@ static int toolbox_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C);
Object *obedit= CTX_data_edit_object(C);
- uiMenuItem *head;
+ uiPopupMenu *pup;
+ uiLayout *layout;
int show_uvedit;
show_uvedit= ED_space_image_show_uvedit(sima, obedit);
- head= uiPupMenuBegin("Toolbox", 0);
+ pup= uiPupMenuBegin(C, "Toolbox", 0);
+ layout= uiPupMenuLayout(pup);
- uiMenuLevel(head, "View", image_viewmenu);
- if(show_uvedit) uiMenuLevel(head, "Select", image_selectmenu);
- uiMenuLevel(head, "Image", image_imagemenu);
- if(show_uvedit) uiMenuLevel(head, "UVs", image_uvsmenu);
+ uiItemMenuF(layout, "View", 0, image_viewmenu);
+ if(show_uvedit) uiItemMenuF(layout, "Select", 0, image_selectmenu);
+ uiItemMenuF(layout, "Image", 0, image_imagemenu);
+ if(show_uvedit) uiItemMenuF(layout, "UVs", 0, image_uvsmenu);
- uiPupMenuEnd(C, head);
+ uiPupMenuEnd(C, pup);
return OPERATOR_CANCELLED;
}
diff --git a/source/blender/editors/space_image/image_intern.h b/source/blender/editors/space_image/image_intern.h
index c592e2cb004..aa97e339c68 100644
--- a/source/blender/editors/space_image/image_intern.h
+++ b/source/blender/editors/space_image/image_intern.h
@@ -32,6 +32,7 @@
/* internal exports only */
struct bContext;
struct ARegion;
+struct ARegionType;
struct ScrArea;
struct SpaceImage;
struct Object;
@@ -84,7 +85,7 @@ void draw_uvedit_main(struct SpaceImage *sima, struct ARegion *ar, struct Scene
/* image_panels.c */
struct ImageUser *ntree_get_active_iuser(struct bNodeTree *ntree);
-void image_buttons_area_defbuts(const struct bContext *C, struct ARegion *ar);
+void image_buttons_register(struct ARegionType *art);
void IMAGE_OT_properties(struct wmOperatorType *ot);
#endif /* ED_IMAGE_INTERN_H */
diff --git a/source/blender/editors/space_image/image_ops.c b/source/blender/editors/space_image/image_ops.c
index 934d58926e2..6efd508c335 100644
--- a/source/blender/editors/space_image/image_ops.c
+++ b/source/blender/editors/space_image/image_ops.c
@@ -1062,6 +1062,7 @@ void IMAGE_OT_new(wmOperatorType *ot)
/* api callbacks */
ot->exec= new_exec;
+ ot->invoke= WM_operator_redo;
ot->poll= ED_operator_image_active;
/* flags */
@@ -1124,16 +1125,18 @@ static int pack_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C);
ImBuf *ibuf= ED_space_image_buffer(sima);
- uiMenuItem *head;
+ uiPopupMenu *pup;
+ uiLayout *layout;
int as_png= RNA_boolean_get(op->ptr, "as_png");
if(!pack_test(C, op))
return OPERATOR_CANCELLED;
if(!as_png && (ibuf && (ibuf->userflags & IB_BITMAPDIRTY))) {
- head= uiPupMenuBegin("OK", ICON_HELP);
- uiMenuItemBooleanO(head, "Can't pack edited image from disk. Pack as internal PNG?", 0, op->idname, "as_png", 1);
- uiPupMenuEnd(C, head);
+ pup= uiPupMenuBegin(C, "OK", ICON_HELP);
+ layout= uiPupMenuLayout(pup);
+ uiItemBooleanO(layout, "Can't pack edited image from disk. Pack as internal PNG?", 0, op->idname, "as_png", 1);
+ uiPupMenuEnd(C, pup);
return OPERATOR_CANCELLED;
}
diff --git a/source/blender/editors/space_image/space_image.c b/source/blender/editors/space_image/space_image.c
index 1530a97d5a7..73472a70a0d 100644
--- a/source/blender/editors/space_image/space_image.c
+++ b/source/blender/editors/space_image/space_image.c
@@ -47,6 +47,7 @@
#include "BKE_colortools.h"
#include "BKE_context.h"
#include "BKE_image.h"
+#include "BKE_mesh.h"
#include "BKE_screen.h"
#include "BKE_utildefines.h"
#include "BKE_mesh.h"
@@ -256,7 +257,7 @@ static void image_refresh(const bContext *C, ScrArea *sa)
if(ima && (ima->source==IMA_SRC_VIEWER || sima->pin));
else if(obedit && obedit->type == OB_MESH) {
Mesh *me= (Mesh*)obedit->data;
- EditMesh *em= EM_GetEditMesh(me);
+ EditMesh *em= BKE_mesh_get_editmesh(me);
MTFace *tf;
if(em && EM_texFaceCheck(em)) {
@@ -280,7 +281,7 @@ static void image_refresh(const bContext *C, ScrArea *sa)
}
}
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
}
}
@@ -483,32 +484,16 @@ static void image_main_area_listener(ARegion *ar, wmNotifier *wmn)
static void image_buttons_area_init(wmWindowManager *wm, ARegion *ar)
{
ListBase *keymap;
+
+ ED_region_panels_init(wm, ar);
- keymap= WM_keymap_listbase(wm, "View2D Buttons List", 0, 0);
- WM_event_add_keymap_handler(&ar->handlers, keymap);
keymap= WM_keymap_listbase(wm, "Image Generic", SPACE_IMAGE, 0);
WM_event_add_keymap_handler(&ar->handlers, keymap);
-
- UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_LIST_UI, ar->winx, ar->winy);
}
static void image_buttons_area_draw(const bContext *C, ARegion *ar)
{
- float col[3];
-
- /* clear */
- UI_GetThemeColor3fv(TH_BACK, col);
-
- glClearColor(col[0], col[1], col[2], 0.0);
- glClear(GL_COLOR_BUFFER_BIT);
-
- /* set view2d view matrix for scrolling (without scrollers) */
- UI_view2d_view_ortho(C, &ar->v2d);
-
- image_buttons_area_defbuts(C, ar);
-
- /* restore view matrix? */
- UI_view2d_view_restore(C);
+ ED_region_panels(C, ar, 1, NULL);
}
static void image_buttons_area_listener(ARegion *ar, wmNotifier *wmn)
@@ -590,6 +575,8 @@ void ED_spacetype_image(void)
art->draw= image_buttons_area_draw;
BLI_addhead(&st->regiontypes, art);
+ image_buttons_register(art);
+
/* regions: header */
art= MEM_callocN(sizeof(ARegionType), "spacetype image region");
art->regionid = RGN_TYPE_HEADER;
@@ -759,12 +746,11 @@ int ED_space_image_show_uvedit(SpaceImage *sima, Object *obedit)
return 0;
if(obedit && obedit->type == OB_MESH) {
- EditMesh *em = EM_GetEditMesh(obedit->data);
+ EditMesh *em = BKE_mesh_get_editmesh(obedit->data);
int ret;
ret = EM_texFaceCheck(em);
-
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return ret;
}
@@ -778,12 +764,11 @@ int ED_space_image_show_uvshadow(SpaceImage *sima, Object *obedit)
if(ED_space_image_show_paint(sima))
if(obedit && obedit->type == OB_MESH) {
- EditMesh *em = EM_GetEditMesh(obedit->data);
+ EditMesh *em = BKE_mesh_get_editmesh(obedit->data);
int ret;
-
ret = EM_texFaceCheck(em);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return ret;
}
diff --git a/source/blender/editors/space_info/info_header.c b/source/blender/editors/space_info/info_header.c
index 69f33df3005..af792d0b22c 100644
--- a/source/blender/editors/space_info/info_header.c
+++ b/source/blender/editors/space_info/info_header.c
@@ -85,7 +85,7 @@ static uiBlock *dummy_viewmenu(bContext *C, ARegion *ar, void *arg_unused)
uiBlock *block;
short yco= 0, menuwidth=120;
- block= uiBeginBlock(C, ar, "dummy_viewmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "dummy_viewmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_viewmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Nothing yet", 0, yco-=20,
@@ -238,7 +238,7 @@ uiBlock *info_externalfiles(bContext *C, ARegion *ar, void *arg_unused)
uiBlock *block;
short yco = 20, menuwidth = 120;
- block= uiBeginBlock(C, ar, "info_externalfiles", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "info_externalfiles", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_info_externalfiles, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Pack into .blend file", 0, yco-=20, 160, 19, NULL, 0.0, 0.0, 1, 1, "");
@@ -258,22 +258,22 @@ uiBlock *info_externalfiles(bContext *C, ARegion *ar, void *arg_unused)
-static void info_filemenu(bContext *C, uiMenuItem *head, void *arg_unused)
+static void info_filemenu(bContext *C, uiLayout *layout, void *arg_unused)
{
- uiMenuContext(head, WM_OP_EXEC_AREA);
- uiMenuItemO(head, 0, "WM_OT_read_homefile");
- uiMenuContext(head, WM_OP_INVOKE_AREA);
- uiMenuItemO(head, 0, "WM_OT_open_mainfile");
+ uiLayoutContext(layout, WM_OP_EXEC_AREA);
+ uiItemO(layout, NULL, 0, "WM_OT_read_homefile");
+ uiLayoutContext(layout, WM_OP_INVOKE_AREA);
+ uiItemO(layout, NULL, 0, "WM_OT_open_mainfile");
// uiDefIconTextBlockBut(block, info_openrecentmenu, NULL, ICON_RIGHTARROW_THIN, "Open Recent",0, yco-=20, 120, 19, "");
// uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Recover Last Session", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
- uiMenuSeparator(head);
+ uiItemS(layout);
- uiMenuContext(head, WM_OP_EXEC_AREA);
- uiMenuItemO(head, 0, "WM_OT_save_mainfile");
- uiMenuContext(head, WM_OP_INVOKE_AREA);
- uiMenuItemO(head, 0, "WM_OT_save_as_mainfile");
+ uiLayoutContext(layout, WM_OP_EXEC_AREA);
+ uiItemO(layout, NULL, 0, "WM_OT_save_mainfile");
+ uiLayoutContext(layout, WM_OP_INVOKE_AREA);
+ uiItemO(layout, NULL, 0, "WM_OT_save_as_mainfile");
#if 0
if(U.flag & USER_FILECOMPRESS) {
@@ -392,7 +392,7 @@ void info_header_buttons(const bContext *C, ARegion *ar)
uiBlock *block;
int xco, yco= 3;
- block= uiBeginBlock(C, ar, "header buttons", UI_EMBOSS, UI_HELV);
+ block= uiBeginBlock(C, ar, "header buttons", UI_EMBOSS);
uiBlockSetHandleFunc(block, do_info_buttons, NULL);
xco= ED_area_header_standardbuttons(C, block, yco);
@@ -400,31 +400,28 @@ void info_header_buttons(const bContext *C, ARegion *ar)
if((sa->flag & HEADER_NO_PULLDOWN)==0) {
int xmax;
- /* pull down menus */
- uiBlockSetEmboss(block, UI_EMBOSSP);
-
xmax= GetButStringLength("File");
- uiDefMenuBut(block, info_filemenu, NULL, "File", xco, yco, xmax-3, 22, "");
+ uiDefMenuBut(block, info_filemenu, NULL, "File", xco, yco, xmax-3, 20, "");
xco+= xmax;
xmax= GetButStringLength("Add");
- uiDefPulldownBut(block, dummy_viewmenu, sa, "Add", xco, yco, xmax-3, 22, "");
+ uiDefPulldownBut(block, dummy_viewmenu, sa, "Add", xco, yco, xmax-3, 20, "");
xco+= xmax;
xmax= GetButStringLength("Timeline");
- uiDefPulldownBut(block, dummy_viewmenu, sa, "Timeline", xco, yco, xmax-3, 22, "");
+ uiDefPulldownBut(block, dummy_viewmenu, sa, "Timeline", xco, yco, xmax-3, 20, "");
xco+= xmax;
xmax= GetButStringLength("Game");
- uiDefPulldownBut(block, dummy_viewmenu, sa, "Game", xco, yco, xmax-3, 22, "");
+ uiDefPulldownBut(block, dummy_viewmenu, sa, "Game", xco, yco, xmax-3, 20, "");
xco+= xmax;
xmax= GetButStringLength("Render");
- uiDefPulldownBut(block, dummy_viewmenu, sa, "Render", xco, yco, xmax-3, 22, "");
+ uiDefPulldownBut(block, dummy_viewmenu, sa, "Render", xco, yco, xmax-3, 20, "");
xco+= xmax;
xmax= GetButStringLength("Help");
- uiDefPulldownBut(block, dummy_viewmenu, NULL, "Help", xco, yco, xmax-3, 22, "");
+ uiDefPulldownBut(block, dummy_viewmenu, NULL, "Help", xco, yco, xmax-3, 20, "");
xco+= xmax;
}
diff --git a/source/blender/editors/space_info/space_info.c b/source/blender/editors/space_info/space_info.c
index 66d807eb69c..12f23f03e66 100644
--- a/source/blender/editors/space_info/space_info.c
+++ b/source/blender/editors/space_info/space_info.c
@@ -48,7 +48,6 @@
#include "ED_screen.h"
#include "BIF_gl.h"
-#include "BLF_api.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -133,7 +132,6 @@ static void info_main_area_draw(const bContext *C, ARegion *ar)
// SpaceInfo *sinfo= (SpaceInfo*)CTX_wm_space_data(C);
View2D *v2d= &ar->v2d;
float col[3];
- float width, height;
/* clear and setup matrix */
UI_GetThemeColor3fv(TH_BACK, col);
@@ -143,38 +141,6 @@ static void info_main_area_draw(const bContext *C, ARegion *ar)
UI_view2d_view_ortho(C, v2d);
/* data... */
- // XXX 2.50 Testing new font library - Diego
- glColor3f(1.0, 0.0, 0.0);
- BLF_aspect(1.0);
-
- BLF_size(14, 96);
- BLF_position(5.0, 5.0, 0.0);
-
- width= BLF_width("Hello Blender, size 14, dpi 96");
- height= BLF_height("Hello Blender, size 14, dpi 96");
-
- glRectf(7.0, 20.0, 7.0+width, 20.0+height);
- glRectf(5.0+width+10.0, 3.0, 5.0+width+10.0+width, 3.0+height);
- BLF_draw("Hello Blender, size 14, dpi 96");
-
- glColor3f(0.0, 0.0, 1.0);
- BLF_size(11, 96);
- BLF_position(200.0, 50.0, 0.0);
- BLF_enable(BLF_ROTATION);
- BLF_rotation(45.0f);
- BLF_draw("Another Hello Blender, size 11 and dpi 96!!");
-
- glColor3f(0.8, 0.0, 0.7);
- BLF_size(12, 72);
- BLF_position(200.0, 100.0, 0.0);
- BLF_rotation(180.0f);
- BLF_draw("Hello World, size 12, dpi 72");
-
- glColor3f(0.8, 0.7, 0.5);
- BLF_size(12, 96);
- BLF_position(5.0, 200.0, 0.0);
- BLF_disable(BLF_ROTATION);
- BLF_draw("And this make a new glyph cache!!");
/* reset view matrix */
UI_view2d_view_restore(C);
diff --git a/source/blender/editors/space_nla/nla_header.c b/source/blender/editors/space_nla/nla_header.c
index cee940ca428..0f6b77da6f5 100644
--- a/source/blender/editors/space_nla/nla_header.c
+++ b/source/blender/editors/space_nla/nla_header.c
@@ -71,7 +71,7 @@ static uiBlock *dummy_viewmenu(bContext *C, ARegion *ar, void *arg_unused)
uiBlock *block;
short yco= 0, menuwidth=120;
- block= uiBeginBlock(C, ar, "dummy_viewmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "dummy_viewmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_viewmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Nothing yet", 0, yco-=20,
@@ -104,7 +104,7 @@ void nla_header_buttons(const bContext *C, ARegion *ar)
uiBlock *block;
int xco, yco= 3;
- block= uiBeginBlock(C, ar, "header buttons", UI_EMBOSS, UI_HELV);
+ block= uiBeginBlock(C, ar, "header buttons", UI_EMBOSS);
uiBlockSetHandleFunc(block, do_nla_buttons, NULL);
xco= ED_area_header_standardbuttons(C, block, yco);
@@ -112,9 +112,6 @@ void nla_header_buttons(const bContext *C, ARegion *ar)
if((sa->flag & HEADER_NO_PULLDOWN)==0) {
int xmax;
- /* pull down menus */
- uiBlockSetEmboss(block, UI_EMBOSSP);
-
xmax= GetButStringLength("View");
uiDefPulldownBut(block, dummy_viewmenu, CTX_wm_area(C),
"View", xco, yco-2, xmax-3, 24, "");
diff --git a/source/blender/editors/space_node/Makefile b/source/blender/editors/space_node/Makefile
index 233572dbfb1..60f81255a74 100644
--- a/source/blender/editors/space_node/Makefile
+++ b/source/blender/editors/space_node/Makefile
@@ -37,7 +37,6 @@ CFLAGS += $(LEVEL_1_C_WARNINGS)
CPPFLAGS += -I$(NAN_GLEW)/include
CPPFLAGS += -I$(OPENGL_HEADERS)
-CPPFLAGS += -I$(NAN_BMFONT)/include
# not very neat....
CPPFLAGS += -I../../windowmanager
diff --git a/source/blender/editors/space_node/SConscript b/source/blender/editors/space_node/SConscript
index babd8dc9080..ad57970950d 100644
--- a/source/blender/editors/space_node/SConscript
+++ b/source/blender/editors/space_node/SConscript
@@ -4,7 +4,7 @@ Import ('env')
sources = env.Glob('*.c')
incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../makesrna ../../imbuf'
-incs += ' ../../nodes #intern/bmfont ../../render/extern/include'
+incs += ' ../../nodes ../../render/extern/include'
incs += ' ../../windowmanager #intern/guardedalloc #extern/glew/include'
defs = []
cf = []
diff --git a/source/blender/editors/space_node/drawnode.c b/source/blender/editors/space_node/drawnode.c
index bf96d1c38aa..50cf193f37b 100644
--- a/source/blender/editors/space_node/drawnode.c
+++ b/source/blender/editors/space_node/drawnode.c
@@ -71,8 +71,6 @@
#include "BIF_gl.h"
#include "BIF_glutil.h"
-#include "BMF_Api.h"
-
#include "MEM_guardedalloc.h"
#include "ED_node.h"
@@ -87,7 +85,6 @@
#include "WM_types.h"
#include "UI_view2d.h"
-#include "UI_text.h"
#include "UI_interface.h"
#include "UI_resources.h"
@@ -96,8 +93,6 @@
#include "node_intern.h"
-extern void autocomplete_uv(char *str, void *arg_v);
-// XXX extern int verify_valid_uv_name(char *str);
/* autocomplete callback for buttons */
static void autocomplete_vcol(bContext *C, char *str, void *arg_v)
@@ -296,7 +291,7 @@ static int node_buts_valtorgb(uiBlock *block, bNodeTree *ntree, bNode *node, rct
{
if(block) {
if(node->storage) {
- ; // XXX draw_colorband_buts_small(block, node->storage, butr, B_NODE_EXEC);
+ uiBlockColorbandButtons(block, node->storage, butr, B_NODE_EXEC);
}
}
return 40;
@@ -573,9 +568,11 @@ static int node_shader_buts_material(uiBlock *block, bNodeTree *ntree, bNode *no
if(butr->ymax-butr->ymin > 21.0f) dy+= 19;
uiBlockBeginAlign(block);
+ /* XXX
if(node->id==NULL) uiBlockSetCol(block, TH_REDALERT);
else if(has_us) uiBlockSetCol(block, TH_BUT_SETTING1);
else uiBlockSetCol(block, TH_BUT_SETTING2);
+ */
/* browse button */
IDnames_to_pupstring(&strp, NULL, "ADD NEW %x32767", &(G.main->mat), NULL, NULL);
@@ -592,7 +589,6 @@ static int node_shader_buts_material(uiBlock *block, bNodeTree *ntree, bNode *no
butr->xmin+19, dy, (short)(butr->xmax-butr->xmin-19.0f), 19,
NULL, 0.0, 0.0, 0, 0, "Add new Material");
uiButSetFunc(bt, node_new_mat_cb, ntree, node);
- uiBlockSetCol(block, TH_AUTO);
}
else {
/* name button */
@@ -615,7 +611,6 @@ static int node_shader_buts_material(uiBlock *block, bNodeTree *ntree, bNode *no
/* WATCH IT: we use this callback in material buttons, but then only want first row */
if(butr->ymax-butr->ymin > 21.0f) {
/* node options */
- uiBlockSetCol(block, TH_AUTO);
uiDefButBitS(block, TOG, SH_NODE_MAT_DIFF, B_NODE_EXEC, "Diff",
butr->xmin, butr->ymin, dx, 19,
&node->custom1, 0, 0, 0, 0, "Material Node outputs Diffuse");
@@ -701,14 +696,12 @@ static int node_shader_buts_geometry(uiBlock *block, bNodeTree *ntree, bNode *no
// XXX if(!verify_valid_uv_name(ngeo->uvname))
// XXX uiBlockSetCol(block, TH_REDALERT);
but= uiDefBut(block, TEX, B_NODE_EXEC, "UV:", butr->xmin, butr->ymin+20, butr->xmax-butr->xmin, 20, ngeo->uvname, 0, 31, 0, 0, "Set name of UV layer to use, default is active UV layer");
- // uiButSetCompleteFunc(but, autocomplete_uv, NULL);
- uiBlockSetCol(block, TH_AUTO);
+ // XXX uiButSetCompleteFunc(but, autocomplete_uv, NULL);
- if(!verify_valid_vcol_name(ngeo->colname))
- uiBlockSetCol(block, TH_REDALERT);
+ if(!verify_valid_vcol_name(ngeo->colname));
+// uiBlockSetCol(block, TH_REDALERT);
but= uiDefBut(block, TEX, B_NODE_EXEC, "Col:", butr->xmin, butr->ymin, butr->xmax-butr->xmin, 20, ngeo->colname, 0, 31, 0, 0, "Set name of vertex color layer to use, default is active vertex color layer");
uiButSetCompleteFunc(but, autocomplete_vcol, NULL);
- uiBlockSetCol(block, TH_AUTO);
}
return 40;
@@ -896,7 +889,6 @@ static int node_composit_buts_image(uiBlock *block, bNodeTree *ntree, bNode *nod
char *strp;
uiBlockBeginAlign(block);
- uiBlockSetCol(block, TH_BUT_SETTING2);
/* browse button */
IMAnames_to_pupstring(&strp, NULL, "LOAD NEW %x32767", &(G.main->image), NULL, NULL);
@@ -913,7 +905,6 @@ static int node_composit_buts_image(uiBlock *block, bNodeTree *ntree, bNode *nod
butr->xmin+19, dy, (short)(butr->xmax-butr->xmin-19.0f), 19,
NULL, 0.0, 0.0, 0, 0, "Add new Image");
uiButSetFunc(bt, node_active_cb, ntree, node);
- uiBlockSetCol(block, TH_AUTO);
}
else {
/* name button + type */
@@ -2267,7 +2258,6 @@ static int node_texture_buts_image(uiBlock *block, bNodeTree *ntree, bNode *node
if( block ) {
uiBlockBeginAlign(block);
- uiBlockSetCol(block, TH_BUT_SETTING2);
/* browse button */
IMAnames_to_pupstring(&strp, NULL, "LOAD NEW %x32767", &(G.main->image), NULL, NULL);
@@ -2284,7 +2274,6 @@ static int node_texture_buts_image(uiBlock *block, bNodeTree *ntree, bNode *node
butr->xmin+19, butr->ymin, (short)(butr->xmax-butr->xmin-19.0f), 19,
NULL, 0.0, 0.0, 0, 0, "Add new Image");
uiButSetFunc(bt, node_active_cb, ntree, node);
- uiBlockSetCol(block, TH_AUTO);
}
else {
/* name button */
@@ -2451,6 +2440,9 @@ void draw_nodespace_back_pix(ARegion *ar, SpaceNode *snode)
ImBuf *ibuf= BKE_image_get_ibuf(ima, NULL);
if(ibuf) {
float x, y;
+
+ wmPushMatrix();
+
/* somehow the offset has to be calculated inverse */
glaDefine2DArea(&ar->winrct);
@@ -2465,9 +2457,7 @@ void draw_nodespace_back_pix(ARegion *ar, SpaceNode *snode)
else if(ibuf->channels==4)
glaDrawPixelsSafe(x, y, ibuf->x, ibuf->y, ibuf->x, GL_RGBA, GL_FLOAT, ibuf->rect_float);
- /* sort this out, this should not be needed */
- wmOrtho2(ar->v2d.cur.xmin, ar->v2d.cur.xmax, ar->v2d.cur.ymin, ar->v2d.cur.ymax);
- glLoadIdentity();
+ wmPopMatrix();
}
}
}
diff --git a/source/blender/editors/space_node/node_draw.c b/source/blender/editors/space_node/node_draw.c
index 28deb705b7b..0670dd9e01f 100644
--- a/source/blender/editors/space_node/node_draw.c
+++ b/source/blender/editors/space_node/node_draw.c
@@ -68,7 +68,6 @@
#include "BIF_gl.h"
#include "BIF_glutil.h"
-#include "BMF_Api.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -77,7 +76,6 @@
#include "ED_util.h"
#include "ED_types.h"
-#include "UI_text.h"
#include "UI_interface.h"
#include "UI_interface_icons.h"
#include "UI_resources.h"
@@ -90,36 +88,10 @@
// XXX interface.h
extern void ui_dropshadow(rctf *rct, float radius, float aspect, int select);
-extern void ui_rasterpos_safe(float x, float y, float aspect);
extern void gl_round_box(int mode, float minx, float miny, float maxx, float maxy, float rad);
extern void ui_draw_tria_icon(float x, float y, float aspect, char dir);
-static void snode_drawstring(void *curfont, SpaceNode *snode, char *str, int okwidth)
-{
- char drawstr[NODE_MAXSTR];
- int width;
-
- if(str[0]==0 || okwidth<4) return;
-
- BLI_strncpy(drawstr, str, NODE_MAXSTR);
- width= snode->aspect*UI_GetStringWidth(curfont, drawstr, 0);
-
- if(width > okwidth) {
- int len= strlen(drawstr)-1;
-
- while(width > okwidth && len>=0) {
- drawstr[len]= 0;
-
- width= snode->aspect*UI_GetStringWidth(curfont, drawstr, 0);
- len--;
- }
- if(len==0) return;
- }
- UI_DrawString(curfont, drawstr, 0);
-}
-
-
static void node_scaling_widget(int color_id, float aspect, float xmin, float ymin, float xmax, float ymax)
{
float dx;
@@ -519,7 +491,7 @@ static uiBlock *socket_vector_menu(bContext *C, ARegion *ar, void *socket_v)
break;
}
- block= uiBeginBlock(C, ar, "socket menu", UI_EMBOSS, UI_HELV);
+ block= uiBeginBlock(C, ar, "socket menu", UI_EMBOSS);
/* use this for a fake extra empy space around the buttons */
uiDefBut(block, LABEL, 0, "", -4, -4, 188, 68, NULL, 0, 0, 0, 0, "");
@@ -645,13 +617,19 @@ static void do_node_internal_buttons(bContext *C, void *node_v, int event)
static void node_draw_basis(const bContext *C, ARegion *ar, SpaceNode *snode, bNode *node)
{
bNodeSocket *sock;
- uiBlock *block= NULL;
+ uiBlock *block;
uiBut *bt;
rctf *rct= &node->totr;
float /*slen,*/ iconofs;
int /*ofs,*/ color_id= node_get_colorid(node);
char showname[128]; /* 128 used below */
View2D *v2d = &ar->v2d;
+ char str[32];
+
+ /* make unique block name, also used for handling blocks in editnode.c */
+ sprintf(str, "node buttons %p", node);
+ block= uiBeginBlock(C, ar, str, UI_EMBOSS);
+ uiBlockSetHandleFunc(block, do_node_internal_buttons, node);
uiSetRoundBox(15-4);
ui_dropshadow(rct, BASIS_RAD, snode->aspect, node->flag & SELECT);
@@ -730,8 +708,6 @@ static void node_draw_basis(const bContext *C, ARegion *ar, SpaceNode *snode, bN
else
UI_ThemeColor(TH_TEXT);
- ui_rasterpos_safe(rct->xmin+19.0f, rct->ymax-NODE_DY+5.0f, snode->aspect);
-
if(node->flag & NODE_MUTED)
sprintf(showname, "[%s]", node->name);
else if(node->username[0])
@@ -739,7 +715,8 @@ static void node_draw_basis(const bContext *C, ARegion *ar, SpaceNode *snode, bN
else
BLI_strncpy(showname, node->name, 128);
- snode_drawstring(snode->curfont, snode, showname, (int)(iconofs - rct->xmin-18.0f));
+ uiDefBut(block, LABEL, 0, showname, (short)(rct->xmin+15), (short)(rct->ymax-NODE_DY),
+ (int)(iconofs - rct->xmin-18.0f), NODE_DY, NULL, 0, 0, 0, 0, "");
/* body */
UI_ThemeColor4(TH_NODE);
@@ -764,21 +741,6 @@ static void node_draw_basis(const bContext *C, ARegion *ar, SpaceNode *snode, bN
if(node->flag & NODE_MUTED)
node_draw_mute_line(v2d, snode, node);
- /* we make buttons for input sockets, if... */
- if(node->flag & NODE_OPTIONS) {
- if(node->inputs.first || node->typeinfo->butfunc) {
- char str[32];
-
- /* make unique block name, also used for handling blocks in editnode.c */
- sprintf(str, "node buttons %p", node);
-
- //block= uiNewBlock(&sa->uiblocks, str, UI_EMBOSS, UI_HELV, sa->win);
- block= uiBeginBlock(C, ar, str, UI_EMBOSS, UI_HELV);
- uiBlockSetHandleFunc(block, do_node_internal_buttons, node);
- // XXX if(snode->id)
- // XXX uiSetButLock(snode->id->lib!=NULL, ERROR_LIBDATA_MESSAGE);
- }
- }
/* hurmf... another candidate for callback, have to see how this works first */
if(node->id && block && snode->treetype==NTREE_SHADER)
@@ -819,9 +781,9 @@ static void node_draw_basis(const bContext *C, ARegion *ar, SpaceNode *snode, bN
}
}
else {
- UI_ThemeColor(TH_TEXT);
- ui_rasterpos_safe(sock->locx+8.0f, sock->locy-5.0f, snode->aspect);
- UI_DrawString(snode->curfont, sock->name, 0);
+
+ uiDefBut(block, LABEL, 0, sock->name, (short)(sock->locx+3.0f), (short)(sock->locy-9.0f),
+ (short)(node->width-NODE_DY), NODE_DY, NULL, 0, 0, 0, 0, "");
}
}
}
@@ -835,13 +797,14 @@ static void node_draw_basis(const bContext *C, ARegion *ar, SpaceNode *snode, bN
socket_circle_draw(sock, NODE_SOCKSIZE);
UI_ThemeColor(TH_TEXT);
- slen= snode->aspect*UI_GetStringWidth(snode->curfont, sock->name, 0);
+ slen= snode->aspect*UI_GetStringWidth(sock->name);
while(slen > node->width) {
ofs++;
- slen= snode->aspect*UI_GetStringWidth(snode->curfont, sock->name+ofs, 0);
+ slen= snode->aspect*UI_GetStringWidth(sock->name+ofs);
}
- ui_rasterpos_safe(sock->locx-8.0f-slen, sock->locy-5.0f, snode->aspect);
- UI_DrawString(snode->curfont, sock->name+ofs, 0);
+
+ uiDefBut(block, LABEL, 0, sock->name+ofs, (short)(sock->locx-15.0f-slen), (short)(sock->locy-9.0f),
+ (short)(node->width-NODE_DY), NODE_DY, NULL, 0, 0, 0, 0, "");
}
}
@@ -859,20 +822,24 @@ static void node_draw_basis(const bContext *C, ARegion *ar, SpaceNode *snode, bN
}
}
- if(block) {
- uiEndBlock(C, block);
- uiDrawBlock(C, block);
- }
+ uiEndBlock(C, block);
+ uiDrawBlock(C, block);
}
-static void node_draw_hidden(View2D *v2d, SpaceNode *snode, bNode *node)
+static void node_draw_hidden(const bContext *C, ARegion *ar, SpaceNode *snode, bNode *node)
{
+ uiBlock *block;
bNodeSocket *sock;
rctf *rct= &node->totr;
float dx, centy= 0.5f*(rct->ymax+rct->ymin);
float hiddenrad= 0.5f*(rct->ymax-rct->ymin);
int color_id= node_get_colorid(node);
- char showname[128]; /* 128 is used below */
+ char str[32], showname[128]; /* 128 is used below */
+
+ /* make unique block name, also used for handling blocks in editnode.c */
+ sprintf(str, "node buttons %p", node);
+ block= uiBeginBlock(C, ar, str, UI_EMBOSS);
+ uiBlockSetHandleFunc(block, do_node_internal_buttons, node);
/* shadow */
uiSetRoundBox(15);
@@ -901,7 +868,7 @@ static void node_draw_hidden(View2D *v2d, SpaceNode *snode, bNode *node)
/* disable lines */
if(node->flag & NODE_MUTED)
- node_draw_mute_line(v2d, snode, node);
+ node_draw_mute_line(&ar->v2d, snode, node);
if(node->flag & SELECT)
UI_ThemeColor(TH_TEXT_HI);
@@ -909,7 +876,6 @@ static void node_draw_hidden(View2D *v2d, SpaceNode *snode, bNode *node)
UI_ThemeColor(TH_TEXT);
if(node->miniwidth>0.0f) {
- ui_rasterpos_safe(rct->xmin+21.0f, centy-4.0f, snode->aspect);
if(node->flag & NODE_MUTED)
sprintf(showname, "[%s]", node->name);
@@ -918,7 +884,8 @@ static void node_draw_hidden(View2D *v2d, SpaceNode *snode, bNode *node)
else
BLI_strncpy(showname, node->name, 128);
- snode_drawstring(snode->curfont, snode, showname, (int)(rct->xmax - rct->xmin-18.0f -12.0f));
+ uiDefBut(block, LABEL, 0, showname, (short)(rct->xmin+15), (short)(centy-10),
+ (int)(rct->xmax - rct->xmin-18.0f -12.0f), NODE_DY, NULL, 0, 0, 0, 0, "");
}
/* scale widget thing */
@@ -942,6 +909,10 @@ static void node_draw_hidden(View2D *v2d, SpaceNode *snode, bNode *node)
if(!(sock->flag & (SOCK_HIDDEN|SOCK_UNAVAIL)))
socket_circle_draw(sock, NODE_SOCKSIZE);
}
+
+ uiEndBlock(C, block);
+ uiDrawBlock(C, block);
+
}
static void node_draw_nodetree(const bContext *C, ARegion *ar, SpaceNode *snode, bNodeTree *ntree)
@@ -966,7 +937,7 @@ static void node_draw_nodetree(const bContext *C, ARegion *ar, SpaceNode *snode,
if(!(node->flag & SELECT)) {
if(node->flag & NODE_GROUP_EDIT);
else if(node->flag & NODE_HIDDEN)
- node_draw_hidden(&ar->v2d, snode, node);
+ node_draw_hidden(C, ar, snode, node);
else
node_draw_basis(C, ar, snode, node);
}
@@ -977,7 +948,7 @@ static void node_draw_nodetree(const bContext *C, ARegion *ar, SpaceNode *snode,
if(node->flag & SELECT) {
if(node->flag & NODE_GROUP_EDIT);
else if(node->flag & NODE_HIDDEN)
- node_draw_hidden(&ar->v2d, snode, node);
+ node_draw_hidden(C, ar, snode, node);
else
node_draw_basis(C, ar, snode, node);
}
@@ -1048,7 +1019,6 @@ static void node_draw_group(const bContext *C, ARegion *ar, SpaceNode *snode, bN
/* backdrop title */
UI_ThemeColor(TH_TEXT_HI);
- ui_rasterpos_safe(rect.xmin+8.0f, rect.ymax+5.0f, snode->aspect);
if(gnode->username[0]) {
strcpy(showname,"(");
@@ -1059,7 +1029,7 @@ static void node_draw_group(const bContext *C, ARegion *ar, SpaceNode *snode, bN
else
strcpy(showname, ngroup->id.name+2);
- UI_DrawString(snode->curfont, showname, 0);
+ UI_DrawString(rect.xmin+8.0f, rect.ymax+5.0f, showname);
/* links from groupsockets to the internal nodes */
node_draw_group_links(&ar->v2d, snode, gnode);
@@ -1096,7 +1066,7 @@ void drawnodespace(const bContext *C, ARegion *ar, View2D *v2d)
/* aspect+font, set each time */
snode->aspect= (v2d->cur.xmax - v2d->cur.xmin)/((float)ar->winx);
- snode->curfont= uiSetCurFont_ext(snode->aspect);
+ // XXX snode->curfont= uiSetCurFont_ext(snode->aspect);
UI_view2d_constant_grid_draw(C, v2d);
/* backdrop */
diff --git a/source/blender/editors/space_node/node_edit.c b/source/blender/editors/space_node/node_edit.c
index d77d2aa09cb..56d7a649eb1 100644
--- a/source/blender/editors/space_node/node_edit.c
+++ b/source/blender/editors/space_node/node_edit.c
@@ -1056,7 +1056,7 @@ typedef struct NodeSizeWidget {
float oldwidth;
} NodeSizeWidget;
-static int node_size_widget_modal(bContext *C, wmOperator *op, wmEvent *event)
+static int node_resize_modal(bContext *C, wmOperator *op, wmEvent *event)
{
SpaceNode *snode= (SpaceNode*)CTX_wm_space_data(C);
ARegion *ar= CTX_wm_region(C);
@@ -1099,7 +1099,7 @@ static int node_size_widget_modal(bContext *C, wmOperator *op, wmEvent *event)
return OPERATOR_RUNNING_MODAL;
}
-static int node_size_widget_invoke(bContext *C, wmOperator *op, wmEvent *event)
+static int node_resize_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
SpaceNode *snode= (SpaceNode*)CTX_wm_space_data(C);
ARegion *ar= CTX_wm_region(C);
@@ -1135,15 +1135,15 @@ static int node_size_widget_invoke(bContext *C, wmOperator *op, wmEvent *event)
return OPERATOR_PASS_THROUGH;
}
-void NODE_OT_size_widget(wmOperatorType *ot)
+void NODE_OT_resize(wmOperatorType *ot)
{
/* identifiers */
- ot->name= "Scale Node";
- ot->idname= "NODE_OT_size_widget";
+ ot->name= "Resize Node";
+ ot->idname= "NODE_OT_resize";
/* api callbacks */
- ot->invoke= node_size_widget_invoke;
- ot->modal= node_size_widget_modal;
+ ot->invoke= node_resize_invoke;
+ ot->modal= node_resize_modal;
ot->poll= ED_operator_node_active;
/* flags */
@@ -2118,7 +2118,7 @@ static int cut_links_exec(bContext *C, wmOperator *op)
if(i>1) {
bNodeLink *link, *next;
- for(link= snode->edittree->links.first; link; link= link->next) {
+ for(link= snode->edittree->links.first; link; link= next) {
next= link->next;
if(cut_links_intersect(link, mcoords, i)) {
diff --git a/source/blender/editors/space_node/node_header.c b/source/blender/editors/space_node/node_header.c
index 14545b87cd4..8c48d4b54e1 100644
--- a/source/blender/editors/space_node/node_header.c
+++ b/source/blender/editors/space_node/node_header.c
@@ -97,8 +97,7 @@ static uiBlock *node_selectmenu(bContext *C, ARegion *ar, void *arg_unused)
uiBlock *block;
short yco= 0, menuwidth=120;
- block= uiBeginBlock(C, ar, "node_selectmenu",
- UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "node_selectmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_node_selectmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
@@ -213,7 +212,7 @@ static uiBlock *node_add_inputmenu(bContext *C, ARegion *ar, void *arg_unused)
{
uiBlock *block;
- block= uiBeginBlock(C, ar, "node_add_inputmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "node_add_inputmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_node_addmenu, NULL);
node_make_addmenu(C, NODE_CLASS_INPUT, block);
@@ -228,7 +227,7 @@ static uiBlock *node_add_outputmenu(bContext *C, ARegion *ar, void *arg_unused)
{
uiBlock *block;
- block= uiBeginBlock(C, ar, "node_add_outputmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "node_add_outputmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_node_addmenu, NULL);
node_make_addmenu(C, NODE_CLASS_OUTPUT, block);
@@ -243,7 +242,7 @@ static uiBlock *node_add_colormenu(bContext *C, ARegion *ar, void *arg_unused)
{
uiBlock *block;
- block= uiBeginBlock(C, ar, "node_add_colormenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "node_add_colormenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_node_addmenu, NULL);
node_make_addmenu(C, NODE_CLASS_OP_COLOR, block);
@@ -258,7 +257,7 @@ static uiBlock *node_add_vectormenu(bContext *C, ARegion *ar, void *arg_unused)
{
uiBlock *block;
- block= uiBeginBlock(C, ar, "node_add_vectormenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "node_add_vectormenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_node_addmenu, NULL);
node_make_addmenu(C, NODE_CLASS_OP_VECTOR, block);
@@ -273,7 +272,7 @@ static uiBlock *node_add_filtermenu(bContext *C, ARegion *ar, void *arg_unused)
{
uiBlock *block;
- block= uiBeginBlock(C, ar, "node_add_filtermenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "node_add_filtermenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_node_addmenu, NULL);
node_make_addmenu(C, NODE_CLASS_OP_FILTER, block);
@@ -288,7 +287,7 @@ static uiBlock *node_add_convertermenu(bContext *C, ARegion *ar, void *arg_unuse
{
uiBlock *block;
- block= uiBeginBlock(C, ar, "node_add_convertermenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "node_add_convertermenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_node_addmenu, NULL);
node_make_addmenu(C, NODE_CLASS_CONVERTOR, block);
@@ -303,7 +302,7 @@ static uiBlock *node_add_mattemenu(bContext *C, ARegion *ar, void *arg_unused)
{
uiBlock *block;
- block= uiBeginBlock(C, ar, "node_add_mattemenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "node_add_mattemenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_node_addmenu, NULL);
node_make_addmenu(C, NODE_CLASS_MATTE, block);
@@ -318,7 +317,7 @@ static uiBlock *node_add_distortmenu(bContext *C, ARegion *ar, void *arg_unused)
{
uiBlock *block;
- block= uiBeginBlock(C, ar, "node_add_distortmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "node_add_distortmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_node_addmenu, NULL);
node_make_addmenu(C, NODE_CLASS_DISTORT, block);
@@ -333,7 +332,7 @@ static uiBlock *node_add_patternmenu(bContext *C, ARegion *ar, void *arg_unused
{
uiBlock *block;
- block= uiBeginBlock(C, ar, "node_add_patternmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "node_add_patternmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_node_addmenu, NULL);
node_make_addmenu(C, NODE_CLASS_PATTERN, block);
@@ -348,7 +347,7 @@ static uiBlock *node_add_texturemenu(bContext *C, ARegion *ar, void *arg_unused)
{
uiBlock *block;
- block= uiBeginBlock(C, ar, "node_add_texturemenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "node_add_texturemenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_node_addmenu, NULL);
node_make_addmenu(C, NODE_CLASS_TEXTURE, block);
@@ -363,7 +362,7 @@ static uiBlock *node_add_groupmenu(bContext *C, ARegion *ar, void *arg_unused)
{
uiBlock *block;
- block= uiBeginBlock(C, ar, "node_add_groupmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "node_add_groupmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_node_addmenu, NULL);
node_make_addmenu(C, NODE_CLASS_GROUP, block);
@@ -379,7 +378,7 @@ static uiBlock *node_add_dynamicmenu(bContext *C, ARegion *ar, void *arg_unused)
{
uiBlock *block;
- block= uiBeginBlock(C, ar, "node_add_dynamicmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "node_add_dynamicmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_node_addmenu, NULL);
node_make_addmenu(C, NODE_CLASS_OP_DYNAMIC, block);
@@ -398,7 +397,7 @@ static uiBlock *node_addmenu(bContext *C, ARegion *ar, void *arg_unused)
uiBlock *block;
short yco= 0, menuwidth=120;
- block= uiBeginBlock(C, ar, "node_addmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "node_addmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_node_addmenu, NULL);
if(snode->treetype==NTREE_SHADER) {
@@ -519,8 +518,7 @@ static uiBlock *node_nodemenu(bContext *C, ARegion *ar, void *arg_unused)
uiBlock *block;
short yco= 0, menuwidth=120;
- block= uiBeginBlock(C, ar, "node_nodemenu",
- UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "node_nodemenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_node_nodemenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Grab/Move|G", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
@@ -604,7 +602,7 @@ static uiBlock *node_viewmenu(bContext *C, ARegion *ar, void *arg_unused)
uiBlock *block;
short yco= 0, menuwidth=120;
- block= uiBeginBlock(C, ar, "node_viewmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "node_viewmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_node_viewmenu, NULL);
if (snode->nodetree) {
@@ -694,35 +692,32 @@ void node_header_buttons(const bContext *C, ARegion *ar)
uiBlock *block;
short xco, yco= 3;
- block= uiBeginBlock(C, ar, "header node", UI_EMBOSS, UI_HELV);
+ block= uiBeginBlock(C, ar, "header node", UI_EMBOSS);
uiBlockSetHandleFunc(block, do_node_buttons, NULL);
xco= ED_area_header_standardbuttons(C, block, yco);
if((sa->flag & HEADER_NO_PULLDOWN)==0) {
int xmax;
-
- /* pull down menus */
- uiBlockSetEmboss(block, UI_EMBOSSP);
xmax= GetButStringLength("View");
uiDefPulldownBut(block, node_viewmenu, NULL,
- "View", xco, yco-2, xmax-3, 24, "");
+ "View", xco, yco, xmax-3, 20, "");
xco+= xmax;
xmax= GetButStringLength("Select");
uiDefPulldownBut(block, node_selectmenu, NULL,
- "Select", xco, yco-2, xmax-3, 24, "");
+ "Select", xco, yco, xmax-3, 20, "");
xco+= xmax;
xmax= GetButStringLength("Add");
uiDefPulldownBut(block, node_addmenu, NULL,
- "Add", xco, yco-2, xmax-3, 24, "");
+ "Add", xco, yco, xmax-3, 20, "");
xco+= xmax;
xmax= GetButStringLength("Node");
uiDefPulldownBut(block, node_nodemenu, NULL,
- "Node", xco, yco-2, xmax-3, 24, "");
+ "Node", xco, yco, xmax-3, 20, "");
xco+= xmax;
}
diff --git a/source/blender/editors/space_node/node_intern.h b/source/blender/editors/space_node/node_intern.h
index 4796db98e95..b73f57f935f 100644
--- a/source/blender/editors/space_node/node_intern.h
+++ b/source/blender/editors/space_node/node_intern.h
@@ -84,7 +84,7 @@ void snode_autoconnect(SpaceNode *snode, bNode *node_to, int flag);
void NODE_OT_link(struct wmOperatorType *ot);
void NODE_OT_delete(struct wmOperatorType *ot);
-void NODE_OT_size_widget(struct wmOperatorType *ot);
+void NODE_OT_resize(struct wmOperatorType *ot);
void NODE_OT_links_cut(struct wmOperatorType *ot);
// XXXXXX
diff --git a/source/blender/editors/space_node/node_ops.c b/source/blender/editors/space_node/node_ops.c
index cef867faa1f..7a1cc24fa58 100644
--- a/source/blender/editors/space_node/node_ops.c
+++ b/source/blender/editors/space_node/node_ops.c
@@ -57,7 +57,7 @@ void node_operatortypes(void)
WM_operatortype_append(NODE_OT_select_border);
WM_operatortype_append(NODE_OT_delete);
WM_operatortype_append(NODE_OT_link);
- WM_operatortype_append(NODE_OT_size_widget);
+ WM_operatortype_append(NODE_OT_resize);
WM_operatortype_append(NODE_OT_links_cut);
}
@@ -72,7 +72,7 @@ void node_keymap(struct wmWindowManager *wm)
RNA_enum_set(WM_keymap_add_item(keymap, "NODE_OT_select_extend", SELECTMOUSE, KM_PRESS, KM_SHIFT, 0)->ptr, "select_type", NODE_SELECT_MOUSE);
WM_keymap_add_item(keymap, "NODE_OT_link", LEFTMOUSE, KM_PRESS, 0, 0);
- WM_keymap_add_item(keymap, "NODE_OT_size_widget", LEFTMOUSE, KM_PRESS, 0, 0);
+ WM_keymap_add_item(keymap, "NODE_OT_resize", LEFTMOUSE, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "NODE_OT_visibility_toggle", LEFTMOUSE, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "NODE_OT_links_cut", LEFTMOUSE, KM_PRESS, KM_ALT, 0);
diff --git a/source/blender/editors/space_node/space_node.c b/source/blender/editors/space_node/space_node.c
index 493ef6954b5..775f46b8e04 100644
--- a/source/blender/editors/space_node/space_node.c
+++ b/source/blender/editors/space_node/space_node.c
@@ -201,7 +201,7 @@ static void node_channel_area_draw(const bContext *C, ARegion *ar)
float col[3];
/* clear and setup matrix */
- UI_GetThemeColor3fv(TH_SHADE2, col);
+ UI_GetThemeColor3fv(TH_BACK, col);
glClearColor(col[0], col[1], col[2], 0.0);
glClear(GL_COLOR_BUFFER_BIT);
diff --git a/source/blender/editors/space_outliner/outliner.c b/source/blender/editors/space_outliner/outliner.c
index 54652587c53..7104fad1767 100644
--- a/source/blender/editors/space_outliner/outliner.c
+++ b/source/blender/editors/space_outliner/outliner.c
@@ -96,20 +96,16 @@
#include "UI_interface_icons.h"
#include "UI_resources.h"
#include "UI_view2d.h"
-#include "UI_text.h"
#include "RNA_access.h"
#include "ED_armature.h"
+#include "ED_keyframing.h"
#include "ED_object.h"
#include "ED_screen.h"
#include "outliner_intern.h"
-#ifdef INTERNATIONAL
-#include "FTF_Api.h"
-#endif
-
#include "PIL_time.h"
@@ -617,6 +613,7 @@ static TreeElement *outliner_add_element(SpaceOops *soops, ListBase *lb, void *i
Object *ob= (Object *)id;
outliner_add_element(soops, &te->subtree, ob->adt, te, TSE_ANIM_DATA, 0);
+ outliner_add_element(soops, &te->subtree, ob->poselib, te, 0, 0); // XXX FIXME.. add a special type for this
if(ob->proxy && ob->id.lib==NULL)
outliner_add_element(soops, &te->subtree, ob->proxy, te, TSE_PROXY, 0);
@@ -933,14 +930,18 @@ static TreeElement *outliner_add_element(SpaceOops *soops, ListBase *lb, void *i
TreeElement *ted= outliner_add_element(soops, &te->subtree, adt, te, TSE_DRIVER_BASE, 0);
ID *lastadded= NULL;
FCurve *fcu;
+ DriverTarget *dtar;
ted->name= "Drivers";
for (fcu= adt->drivers.first; fcu; fcu= fcu->next) {
- if (fcu->driver && fcu->driver->id) {
- if (lastadded != fcu->driver->id) {
- outliner_add_element(soops, &ted->subtree, fcu->driver->id, ted, TSE_LINKED_OB, 0);
- lastadded= fcu->driver->id;
+ if (fcu->driver && fcu->driver->targets.first) {
+ for (dtar= fcu->driver->targets.first; dtar; dtar= dtar->next) {
+ if (lastadded != dtar->id) {
+ // XXX this lastadded check is rather lame, and also fails quite badly...
+ outliner_add_element(soops, &ted->subtree, dtar->id, ted, TSE_LINKED_OB, 0);
+ lastadded= dtar->id;
+ }
}
}
}
@@ -1042,20 +1043,20 @@ static TreeElement *outliner_add_element(SpaceOops *soops, ListBase *lb, void *i
}
else if(type == TSE_RNA_STRUCT) {
/* struct */
- nameprop= RNA_struct_name_property(ptr);
+ nameprop= RNA_struct_name_property(ptr->type);
if(nameprop) {
te->name= RNA_property_string_get_alloc(ptr, nameprop, NULL, 0);
te->flag |= TE_FREE_NAME;
}
else
- te->name= (char*)RNA_struct_ui_name(ptr);
+ te->name= (char*)RNA_struct_ui_name(ptr->type);
- iterprop= RNA_struct_iterator_property(ptr);
+ iterprop= RNA_struct_iterator_property(ptr->type);
tot= RNA_property_collection_length(ptr, iterprop);
/* auto open these cases */
- if(!parent || (RNA_property_type(&parent->rnaptr, parent->directdata)) == PROP_POINTER)
+ if(!parent || (RNA_property_type(parent->directdata)) == PROP_POINTER)
if(!tselem->used)
tselem->flag &= ~TSE_CLOSED;
@@ -1070,13 +1071,13 @@ static TreeElement *outliner_add_element(SpaceOops *soops, ListBase *lb, void *i
}
else if(type == TSE_RNA_PROPERTY) {
/* property */
- iterprop= RNA_struct_iterator_property(ptr);
+ iterprop= RNA_struct_iterator_property(ptr->type);
RNA_property_collection_lookup_int(ptr, iterprop, index, &propptr);
prop= propptr.data;
- proptype= RNA_property_type(ptr, prop);
+ proptype= RNA_property_type(prop);
- te->name= (char*)RNA_property_ui_name(ptr, prop);
+ te->name= (char*)RNA_property_ui_name(prop);
te->directdata= prop;
te->rnaptr= *ptr;
@@ -1103,7 +1104,7 @@ static TreeElement *outliner_add_element(SpaceOops *soops, ListBase *lb, void *i
te->flag |= TE_LAZY_CLOSED;
}
else if(ELEM3(proptype, PROP_BOOLEAN, PROP_INT, PROP_FLOAT)) {
- tot= RNA_property_array_length(ptr, prop);
+ tot= RNA_property_array_length(prop);
if(!(tselem->flag & TSE_CLOSED)) {
for(a=0; a<tot; a++)
@@ -1120,9 +1121,9 @@ static TreeElement *outliner_add_element(SpaceOops *soops, ListBase *lb, void *i
static char *coloritem[4]= {" r", " g", " b", " a"};
prop= parent->directdata;
- proptype= RNA_property_type(ptr, prop);
- propsubtype= RNA_property_subtype(ptr, prop);
- tot= RNA_property_array_length(ptr, prop);
+ proptype= RNA_property_type(prop);
+ propsubtype= RNA_property_subtype(prop);
+ tot= RNA_property_array_length(prop);
te->directdata= prop;
te->rnaptr= *ptr;
@@ -3047,18 +3048,9 @@ void outliner_operation_menu(Scene *scene, ARegion *ar, SpaceOops *soops)
}
}
-/* ***************** KEYINGSET OPERATIONS *************** */
-
-/* These operators are only available in databrowser mode for now, as
- * they depend on having RNA paths and/or hierarchies available.
- */
-enum {
- KEYINGSET_EDITMODE_ADD = 0,
- KEYINGSET_EDITMODE_REMOVE,
-} eKeyingSet_EditModes;
+/* ***************** ANIMATO OPERATIONS ********************************** */
+/* KeyingSet and Driver Creation - Helper functions */
-/* Utilities ---------------------------------- */
-
/* specialised poll callback for these operators to work in Datablocks view only */
static int ed_operator_outliner_datablocks_active(bContext *C)
{
@@ -3069,33 +3061,9 @@ static int ed_operator_outliner_datablocks_active(bContext *C)
}
return 0;
}
-
-
-/* find the 'active' KeyingSet, and add if not found (if adding is allowed) */
-// TODO: should this be an API func?
-static KeyingSet *verify_active_keyingset(Scene *scene, short add)
-{
- KeyingSet *ks= NULL;
-
- /* sanity check */
- if (scene == NULL)
- return NULL;
-
- /* try to find one from scene */
- if (scene->active_keyingset > 0)
- ks= BLI_findlink(&scene->keyingsets, scene->active_keyingset-1);
-
- /* add if none found */
- // XXX the default settings have yet to evolve
- if ((add) && (ks==NULL)) {
- ks= BKE_keyingset_add(&scene->keyingsets, "KeyingSet", KEYINGSET_ABSOLUTE, 0);
- scene->active_keyingset= BLI_countlist(&scene->keyingsets);
- }
-
- return ks;
-}
-/* Helper func to extract an RNA path from seleted tree element
+
+/* Helper func to extract an RNA path from selected tree element
* NOTE: the caller must zero-out all values of the pointers that it passes here first, as
* this function does not do that yet
*/
@@ -3146,16 +3114,16 @@ static void tree_element_to_path(SpaceOops *soops, TreeElement *te, TreeStoreEle
* - to prevent memory leaks, we must write to newpath not path, then free old path + swap them
*/
if(tse->type == TSE_RNA_PROPERTY) {
- if(RNA_property_type(ptr, prop) == PROP_POINTER) {
+ if(RNA_property_type(prop) == PROP_POINTER) {
/* for pointer we just append property name */
newpath= RNA_path_append(*path, ptr, prop, 0, NULL);
}
- else if(RNA_property_type(ptr, prop) == PROP_COLLECTION) {
+ else if(RNA_property_type(prop) == PROP_COLLECTION) {
temnext= (TreeElement*)(ld->next->data);
tsenext= TREESTORE(temnext);
nextptr= &temnext->rnaptr;
- nameprop= RNA_struct_name_property(nextptr);
+ nameprop= RNA_struct_name_property(nextptr->type);
if(nameprop) {
/* if possible, use name as a key in the path */
@@ -3192,7 +3160,7 @@ static void tree_element_to_path(SpaceOops *soops, TreeElement *te, TreeStoreEle
/* no ID, so check if entry is RNA-struct, and if that RNA-struct is an ID datablock to extract info from */
if (tse->type == TSE_RNA_STRUCT) {
/* ptr->data not ptr->id.data seems to be the one we want, since ptr->data is sometimes the owner of this ID? */
- if(RNA_struct_is_ID(ptr)) {
+ if(RNA_struct_is_ID(ptr->type)) {
*id= (ID *)ptr->data;
/* clear path */
@@ -3216,7 +3184,7 @@ static void tree_element_to_path(SpaceOops *soops, TreeElement *te, TreeStoreEle
/* item is part of an array, so must set the array_index */
*array_index= te->index;
}
- else if (RNA_property_array_length(ptr, prop)) {
+ else if (RNA_property_array_length(prop)) {
/* entire array was selected, so keyframe all */
*flag |= KSP_FLAG_WHOLE_ARRAY;
}
@@ -3231,6 +3199,178 @@ static void tree_element_to_path(SpaceOops *soops, TreeElement *te, TreeStoreEle
BLI_freelistN(&hierarchy);
}
+/* ***************** KEYINGSET OPERATIONS *************** */
+
+/* These operators are only available in databrowser mode for now, as
+ * they depend on having RNA paths and/or hierarchies available.
+ */
+enum {
+ DRIVERS_EDITMODE_ADD = 0,
+ DRIVERS_EDITMODE_REMOVE,
+} eDrivers_EditModes;
+
+/* Utilities ---------------------------------- */
+
+/* Recursively iterate over tree, finding and working on selected items */
+static void do_outliner_drivers_editop(SpaceOops *soops, ListBase *tree, short mode)
+{
+ TreeElement *te;
+ TreeStoreElem *tselem;
+
+ for (te= tree->first; te; te=te->next) {
+ tselem= TREESTORE(te);
+
+ /* if item is selected, perform operation */
+ if (tselem->flag & TSE_SELECTED) {
+ ID *id= NULL;
+ char *path= NULL;
+ int array_index= 0;
+ short flag= 0;
+ short groupmode= KSP_GROUP_KSNAME;
+
+ /* check if RNA-property described by this selected element is an animateable prop */
+ if ((tselem->type == TSE_RNA_PROPERTY) && RNA_property_animateable(&te->rnaptr, te->directdata)) {
+ /* get id + path + index info from the selected element */
+ tree_element_to_path(soops, te, tselem,
+ &id, &path, &array_index, &flag, &groupmode);
+ }
+
+ /* only if ID and path were set, should we perform any actions */
+ if (id && path) {
+ /* action depends on mode */
+ switch (mode) {
+ case DRIVERS_EDITMODE_ADD:
+ {
+ /* add a new driver with the information obtained (only if valid) */
+ ANIM_add_driver(id, path, array_index, flag);
+ }
+ break;
+ case DRIVERS_EDITMODE_REMOVE:
+ {
+ /* remove driver matching the information obtained (only if valid) */
+ ANIM_remove_driver(id, path, array_index, flag);
+ }
+ break;
+ }
+
+ /* free path, since it had to be generated */
+ MEM_freeN(path);
+ }
+
+
+ }
+
+ /* go over sub-tree */
+ if ((tselem->flag & TSE_CLOSED)==0)
+ do_outliner_drivers_editop(soops, &te->subtree, mode);
+ }
+}
+
+/* Add Operator ---------------------------------- */
+
+static int outliner_drivers_addsel_exec(bContext *C, wmOperator *op)
+{
+ SpaceOops *soutliner= (SpaceOops*)CTX_wm_space_data(C);
+
+ /* check for invalid states */
+ if (soutliner == NULL)
+ return OPERATOR_CANCELLED;
+
+ /* recursively go into tree, adding selected items */
+ do_outliner_drivers_editop(soutliner, &soutliner->tree, DRIVERS_EDITMODE_ADD);
+
+ /* send notifiers */
+ WM_event_add_notifier(C, NC_SCENE|ND_KEYINGSET, NULL);
+
+ return OPERATOR_FINISHED;
+}
+
+void OUTLINER_OT_drivers_add(wmOperatorType *ot)
+{
+ /* api callbacks */
+ ot->idname= "OUTLINER_OT_drivers_add";
+ ot->name= "Add Drivers";
+ ot->description= "Add drivers to selected items.";
+
+ /* api callbacks */
+ ot->exec= outliner_drivers_addsel_exec;
+ ot->poll= ed_operator_outliner_datablocks_active;
+
+ /* flags */
+ ot->flag = OPTYPE_UNDO;
+}
+
+
+/* Remove Operator ---------------------------------- */
+
+static int outliner_drivers_deletesel_exec(bContext *C, wmOperator *op)
+{
+ SpaceOops *soutliner= (SpaceOops*)CTX_wm_space_data(C);
+
+ /* check for invalid states */
+ if (soutliner == NULL)
+ return OPERATOR_CANCELLED;
+
+ /* recursively go into tree, adding selected items */
+ do_outliner_drivers_editop(soutliner, &soutliner->tree, DRIVERS_EDITMODE_REMOVE);
+
+ /* send notifiers */
+ WM_event_add_notifier(C, NC_SCENE|ND_KEYINGSET, NULL);
+
+ return OPERATOR_FINISHED;
+}
+
+void OUTLINER_OT_drivers_delete(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->idname= "OUTLINER_OT_drivers_delete";
+ ot->name= "Delete Drivers";
+ ot->description= "Delete drivers assigned to selected items.";
+
+ /* api callbacks */
+ ot->exec= outliner_drivers_deletesel_exec;
+ ot->poll= ed_operator_outliner_datablocks_active;
+
+ /* flags */
+ ot->flag = OPTYPE_UNDO;
+}
+
+/* ***************** KEYINGSET OPERATIONS *************** */
+
+/* These operators are only available in databrowser mode for now, as
+ * they depend on having RNA paths and/or hierarchies available.
+ */
+enum {
+ KEYINGSET_EDITMODE_ADD = 0,
+ KEYINGSET_EDITMODE_REMOVE,
+} eKeyingSet_EditModes;
+
+/* Utilities ---------------------------------- */
+
+/* find the 'active' KeyingSet, and add if not found (if adding is allowed) */
+// TODO: should this be an API func?
+static KeyingSet *verify_active_keyingset(Scene *scene, short add)
+{
+ KeyingSet *ks= NULL;
+
+ /* sanity check */
+ if (scene == NULL)
+ return NULL;
+
+ /* try to find one from scene */
+ if (scene->active_keyingset > 0)
+ ks= BLI_findlink(&scene->keyingsets, scene->active_keyingset-1);
+
+ /* add if none found */
+ // XXX the default settings have yet to evolve
+ if ((add) && (ks==NULL)) {
+ ks= BKE_keyingset_add(&scene->keyingsets, "Keying Set", KEYINGSET_ABSOLUTE, 0);
+ scene->active_keyingset= BLI_countlist(&scene->keyingsets);
+ }
+
+ return ks;
+}
+
/* Recursively iterate over tree, finding and working on selected items */
static void do_outliner_keyingset_editop(SpaceOops *soops, KeyingSet *ks, ListBase *tree, short mode)
{
@@ -3424,7 +3564,7 @@ static void tselem_draw_icon(float x, float y, TreeStoreElem *tselem, TreeElemen
case eModifierType_Boolean:
UI_icon_draw(x, y, ICON_MOD_BOOLEAN); break;
case eModifierType_ParticleSystem:
- UI_icon_draw(x, y, ICON_MOD_PARTICLEINSTANCE); break;
+ UI_icon_draw(x, y, ICON_MOD_PARTICLES); break;
case eModifierType_ParticleInstance:
UI_icon_draw(x, y, ICON_MOD_PARTICLES); break;
case eModifierType_EdgeSplit:
@@ -3435,6 +3575,30 @@ static void tselem_draw_icon(float x, float y, TreeStoreElem *tselem, TreeElemen
UI_icon_draw(x, y, ICON_MOD_UVPROJECT); break;
case eModifierType_Displace:
UI_icon_draw(x, y, ICON_MOD_DISPLACE); break;
+ case eModifierType_Shrinkwrap:
+ UI_icon_draw(x, y, ICON_MOD_SHRINKWRAP); break;
+ case eModifierType_Cast:
+ UI_icon_draw(x, y, ICON_MOD_CAST); break;
+ case eModifierType_MeshDeform:
+ UI_icon_draw(x, y, ICON_MOD_MESHDEFORM); break;
+ case eModifierType_Bevel:
+ UI_icon_draw(x, y, ICON_MOD_BEVEL); break;
+ case eModifierType_Smooth:
+ UI_icon_draw(x, y, ICON_MOD_SMOOTH); break;
+ case eModifierType_SimpleDeform:
+ UI_icon_draw(x, y, ICON_MOD_SIMPLEDEFORM); break;
+ case eModifierType_Mask:
+ UI_icon_draw(x, y, ICON_MOD_MASK); break;
+ case eModifierType_Cloth:
+ UI_icon_draw(x, y, ICON_MOD_CLOTH); break;
+ case eModifierType_Explode:
+ UI_icon_draw(x, y, ICON_MOD_EXPLODE); break;
+ case eModifierType_Collision:
+ UI_icon_draw(x, y, ICON_MOD_PHYSICS); break;
+ case eModifierType_Fluidsim:
+ UI_icon_draw(x, y, ICON_MOD_FLUIDSIM); break;
+ case eModifierType_Multires:
+ UI_icon_draw(x, y, ICON_MOD_MULTIRES); break;
default:
UI_icon_draw(x, y, ICON_DOT); break;
}
@@ -3703,10 +3867,10 @@ static void outliner_draw_tree_element(Scene *scene, ARegion *ar, SpaceOops *soo
if(active==1) UI_ThemeColor(TH_TEXT_HI);
else if(ELEM(tselem->type, TSE_RNA_PROPERTY, TSE_RNA_ARRAY_ELEM)) UI_ThemeColorBlend(TH_BACK, TH_TEXT, 0.75f);
else UI_ThemeColor(TH_TEXT);
- glRasterPos2i(startx+offsx, *starty+5);
- UI_RasterPos((float)startx+offsx, (float)*starty+5);
- UI_DrawString(G.font, te->name, 0);
- offsx+= (int)(OL_X + UI_GetStringWidth(G.font, te->name, 0));
+
+ UI_DrawString(startx+offsx, *starty+5, te->name);
+
+ offsx+= (int)(OL_X + UI_GetStringWidth(te->name));
/* closed item, we draw the icons, not when it's a scene, or master-server list though */
if(tselem->flag & TSE_CLOSED) {
@@ -3824,6 +3988,9 @@ static void outliner_draw_tree(Scene *scene, ARegion *ar, SpaceOops *soops)
float col[4];
#if 0 // XXX was #ifdef INTERNATIONAL
+ /* Maybe the INTERNATIONAL was really for check about freetype2 ?
+ * anyway I think that we can remove this now - Diego
+ */
FTF_SetFontSize('l');
BIF_SetScale(1.0);
#endif
@@ -4060,7 +4227,7 @@ static void namebutton_cb(bContext *C, void *tep, void *oldnamep)
Object *ob= (Object *)tselem->id; // id = object
bActionGroup *grp= te->directdata;
- BLI_uniquename(&ob->pose->agroups, grp, "Group", offsetof(bActionGroup, name), 32);
+ BLI_uniquename(&ob->pose->agroups, grp, "Group", '.', offsetof(bActionGroup, name), 32);
}
break;
case TSE_R_LAYER:
@@ -4088,17 +4255,14 @@ static void outliner_draw_restrictbuts(uiBlock *block, Scene *scene, ARegion *ar
bt= uiDefIconButBitS(block, ICONTOG, OB_RESTRICT_VIEW, 0, ICON_RESTRICT_VIEW_OFF,
(int)ar->v2d.cur.xmax-OL_TOG_RESTRICT_VIEWX, (short)te->ys, 17, OL_H-1, &(ob->restrictflag), 0, 0, 0, 0, "Restrict/Allow visibility in the 3D View");
uiButSetFunc(bt, restrictbutton_view_cb, scene, ob);
- uiButSetFlag(bt, UI_NO_HILITE);
bt= uiDefIconButBitS(block, ICONTOG, OB_RESTRICT_SELECT, 0, ICON_RESTRICT_SELECT_OFF,
(int)ar->v2d.cur.xmax-OL_TOG_RESTRICT_SELECTX, (short)te->ys, 17, OL_H-1, &(ob->restrictflag), 0, 0, 0, 0, "Restrict/Allow selection in the 3D View");
uiButSetFunc(bt, restrictbutton_sel_cb, scene, ob);
- uiButSetFlag(bt, UI_NO_HILITE);
bt= uiDefIconButBitS(block, ICONTOG, OB_RESTRICT_RENDER, 0, ICON_RESTRICT_RENDER_OFF,
(int)ar->v2d.cur.xmax-OL_TOG_RESTRICT_RENDERX, (short)te->ys, 17, OL_H-1, &(ob->restrictflag), 0, 0, 0, 0, "Restrict/Allow renderability");
uiButSetFunc(bt, restrictbutton_rend_cb, NULL, NULL);
- uiButSetFlag(bt, UI_NO_HILITE);
uiBlockSetEmboss(block, UI_EMBOSS);
}
@@ -4137,12 +4301,10 @@ static void outliner_draw_restrictbuts(uiBlock *block, Scene *scene, ARegion *ar
bt= uiDefIconButBitI(block, ICONTOGN, eModifierMode_Realtime, 0, ICON_RESTRICT_VIEW_OFF,
(int)ar->v2d.cur.xmax-OL_TOG_RESTRICT_VIEWX, (short)te->ys, 17, OL_H-1, &(md->mode), 0, 0, 0, 0, "Restrict/Allow visibility in the 3D View");
uiButSetFunc(bt, restrictbutton_modifier_cb, scene, ob);
- uiButSetFlag(bt, UI_NO_HILITE);
bt= uiDefIconButBitI(block, ICONTOGN, eModifierMode_Render, 0, ICON_RESTRICT_RENDER_OFF,
(int)ar->v2d.cur.xmax-OL_TOG_RESTRICT_RENDERX, (short)te->ys, 17, OL_H-1, &(md->mode), 0, 0, 0, 0, "Restrict/Allow renderability");
uiButSetFunc(bt, restrictbutton_modifier_cb, scene, ob);
- uiButSetFlag(bt, UI_NO_HILITE);
}
else if(tselem->type==TSE_POSE_CHANNEL) {
bPoseChannel *pchan= (bPoseChannel *)te->directdata;
@@ -4152,7 +4314,6 @@ static void outliner_draw_restrictbuts(uiBlock *block, Scene *scene, ARegion *ar
bt= uiDefIconButBitI(block, ICONTOG, BONE_HIDDEN_P, 0, ICON_RESTRICT_VIEW_OFF,
(int)ar->v2d.cur.xmax-OL_TOG_RESTRICT_VIEWX, (short)te->ys, 17, OL_H-1, &(bone->flag), 0, 0, 0, 0, "Restrict/Allow visibility in the 3D View");
uiButSetFunc(bt, restrictbutton_bone_cb, NULL, NULL);
- uiButSetFlag(bt, UI_NO_HILITE);
}
else if(tselem->type==TSE_EBONE) {
EditBone *ebone= (EditBone *)te->directdata;
@@ -4161,7 +4322,6 @@ static void outliner_draw_restrictbuts(uiBlock *block, Scene *scene, ARegion *ar
bt= uiDefIconButBitI(block, ICONTOG, BONE_HIDDEN_A, 0, ICON_RESTRICT_VIEW_OFF,
(int)ar->v2d.cur.xmax-OL_TOG_RESTRICT_VIEWX, (short)te->ys, 17, OL_H-1, &(ebone->flag), 0, 0, 0, 0, "Restrict/Allow visibility in the 3D View");
uiButSetFunc(bt, restrictbutton_bone_cb, NULL, NULL);
- uiButSetFlag(bt, UI_NO_HILITE);
}
}
@@ -4203,7 +4363,7 @@ static void outliner_draw_rnabuts(uiBlock *block, Scene *scene, ARegion *ar, Spa
ptr= &te->rnaptr;
prop= te->directdata;
- if(!(RNA_property_type(ptr, prop) == PROP_POINTER && (tselem->flag & TSE_CLOSED)==0))
+ if(!(RNA_property_type(prop) == PROP_POINTER && (tselem->flag & TSE_CLOSED)==0))
uiDefAutoButR(block, ptr, prop, -1, "", 0, sizex, (int)te->ys, OL_RNA_COL_SIZEX, OL_H-1);
}
else if(tselem->type == TSE_RNA_ARRAY_ELEM) {
@@ -4240,7 +4400,7 @@ static void outliner_buttons(uiBlock *block, ARegion *ar, SpaceOops *soops, List
else if(tselem->id && GS(tselem->id->name)==ID_LI) len = sizeof(((Library*) 0)->name);
else len= sizeof(((ID*) 0)->name)-2;
- dx= (int)UI_GetStringWidth(G.font, te->name, 0);
+ dx= (int)UI_GetStringWidth(te->name);
if(dx<50) dx= 50;
bt= uiDefBut(block, TEX, OL_NAMEBUTTON, "", (short)te->xs+2*OL_X-4, (short)te->ys, dx+10, OL_H-1, te->name, 1.0, (float)len-1, 0, 0, "");
@@ -4311,7 +4471,7 @@ void draw_outliner(const bContext *C)
outliner_draw_tree(scene, ar, soops);
/* draw icons and names */
- block= uiBeginBlock(C, ar, "outliner buttons", UI_EMBOSS, UI_HELV);
+ block= uiBeginBlock(C, ar, "outliner buttons", UI_EMBOSS);
outliner_buttons(block, ar, soops, &soops->tree);
if(ELEM(soops->outlinevis, SO_DATABLOCKS, SO_USERDEF)) {
diff --git a/source/blender/editors/space_outliner/outliner_header.c b/source/blender/editors/space_outliner/outliner_header.c
index ecff2d8a417..fe2f054899c 100644
--- a/source/blender/editors/space_outliner/outliner_header.c
+++ b/source/blender/editors/space_outliner/outliner_header.c
@@ -118,7 +118,7 @@ static uiBlock *outliner_viewmenu(bContext *C, ARegion *ar, void *arg_unused)
uiBlock *block;
short yco= 0, menuwidth=120;
- block= uiBeginBlock(C, ar, "outliner_viewmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "outliner_viewmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_viewmenu, NULL);
if (soops->flag & SO_HIDE_RESTRICTCOLS)
@@ -213,16 +213,13 @@ void outliner_header_buttons(const bContext *C, ARegion *ar)
uiBlock *block;
int xco, yco= 3, xmax;
- block= uiBeginBlock(C, ar, "header buttons", UI_EMBOSS, UI_HELV);
+ block= uiBeginBlock(C, ar, "header buttons", UI_EMBOSS);
uiBlockSetHandleFunc(block, do_outliner_buttons, NULL);
xco= ED_area_header_standardbuttons(C, block, yco);
if((sa->flag & HEADER_NO_PULLDOWN)==0) {
- /* pull down menus */
- uiBlockSetEmboss(block, UI_EMBOSSP);
-
xmax= GetButStringLength("View");
uiDefPulldownBut(block, outliner_viewmenu, CTX_wm_area(C),
"View", xco, yco-2, xmax-3, 24, "");
diff --git a/source/blender/editors/space_outliner/outliner_intern.h b/source/blender/editors/space_outliner/outliner_intern.h
index 067c14dc257..48c904121a5 100644
--- a/source/blender/editors/space_outliner/outliner_intern.h
+++ b/source/blender/editors/space_outliner/outliner_intern.h
@@ -119,9 +119,13 @@ void outliner_select(struct SpaceOops *soops, struct ListBase *lb, int *index, s
void draw_outliner(const struct bContext *C);
void OUTLINER_OT_activate_click(struct wmOperatorType *ot);
+
void OUTLINER_OT_keyingset_add_selected(struct wmOperatorType *ot);
void OUTLINER_OT_keyingset_remove_selected(struct wmOperatorType *ot);
+void OUTLINER_OT_drivers_add(struct wmOperatorType *ot);
+void OUTLINER_OT_drivers_delete(struct wmOperatorType *ot);
+
#if 0
extern void outliner_mouse_event(Scene *scene, ARegion *ar, SpaceOops *soops, short event);
extern void outliner_toggle_visible(SpaceOops *soops);
diff --git a/source/blender/editors/space_outliner/outliner_ops.c b/source/blender/editors/space_outliner/outliner_ops.c
index 920ccb62a7a..0efbdb06cd2 100644
--- a/source/blender/editors/space_outliner/outliner_ops.c
+++ b/source/blender/editors/space_outliner/outliner_ops.c
@@ -47,6 +47,9 @@ void outliner_operatortypes(void)
WM_operatortype_append(OUTLINER_OT_keyingset_add_selected);
WM_operatortype_append(OUTLINER_OT_keyingset_remove_selected);
+
+ WM_operatortype_append(OUTLINER_OT_drivers_add);
+ WM_operatortype_append(OUTLINER_OT_drivers_delete);
}
void outliner_keymap(wmWindowManager *wm)
@@ -61,5 +64,8 @@ void outliner_keymap(wmWindowManager *wm)
WM_keymap_verify_item(keymap, "ANIM_OT_insert_keyframe", IKEY, KM_PRESS, 0, 0);
WM_keymap_verify_item(keymap, "ANIM_OT_delete_keyframe", IKEY, KM_PRESS, KM_ALT, 0);
+
+ WM_keymap_verify_item(keymap, "OUTLINER_OT_drivers_add", DKEY, KM_PRESS, 0, 0);
+ WM_keymap_verify_item(keymap, "OUTLINER_OT_drivers_delete", DKEY, KM_PRESS, KM_ALT, 0);
}
diff --git a/source/blender/editors/space_outliner/space_outliner.c b/source/blender/editors/space_outliner/space_outliner.c
index 4add1e88986..8e30db584af 100644
--- a/source/blender/editors/space_outliner/space_outliner.c
+++ b/source/blender/editors/space_outliner/space_outliner.c
@@ -62,7 +62,6 @@
#include "BIF_glutil.h"
#include "UI_interface.h"
-#include "UI_text.h"
#include "UI_resources.h"
#include "UI_view2d.h"
@@ -120,6 +119,7 @@ static void outliner_main_area_listener(ARegion *ar, wmNotifier *wmn)
case ND_OB_SELECT:
case ND_MODE:
case ND_KEYINGSET:
+ case ND_FRAME:
ED_region_tag_redraw(ar);
break;
}
diff --git a/source/blender/editors/space_script/script_edit.c b/source/blender/editors/space_script/script_edit.c
index da53057c5eb..797302a8652 100644
--- a/source/blender/editors/space_script/script_edit.c
+++ b/source/blender/editors/space_script/script_edit.c
@@ -73,11 +73,11 @@ static int run_pyfile_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
-void SCRIPT_OT_run_pyfile(wmOperatorType *ot)
+void SCRIPT_OT_python_file_run(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Run python file";
- ot->idname= "SCRIPT_OT_run_pyfile";
+ ot->idname= "SCRIPT_OT_python_file_run";
/* api callbacks */
ot->exec= run_pyfile_exec;
@@ -86,3 +86,33 @@ void SCRIPT_OT_run_pyfile(wmOperatorType *ot)
RNA_def_string_file_path(ot->srna, "filename", "", 512, "Filename", "");
}
+static int run_ui_scripts_exec(bContext *C, wmOperator *op)
+{
+#ifndef DISABLE_PYTHON
+ BPY_run_ui_scripts(C, 1); /* reload */
+#endif
+ return OPERATOR_FINISHED;
+}
+
+static int run_ui_scripts_invoke(bContext *C, wmOperator *op, wmEvent *event)
+{
+ int ret= run_ui_scripts_exec(C, op);
+
+ if(ret==OPERATOR_FINISHED)
+ WM_event_add_notifier(C, NC_WINDOW, NULL);
+
+ return ret;
+}
+
+
+void SCRIPT_OT_python_run_ui_scripts(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "Reload Python Interface";
+ ot->idname= "SCRIPT_OT_python_run_ui_scripts";
+
+ /* api callbacks */
+ ot->exec= run_ui_scripts_exec;
+ ot->invoke= run_ui_scripts_invoke;
+ ot->poll= ED_operator_areaactive;
+}
diff --git a/source/blender/editors/space_script/script_header.c b/source/blender/editors/space_script/script_header.c
index 2a7006348b3..d9851df4185 100644
--- a/source/blender/editors/space_script/script_header.c
+++ b/source/blender/editors/space_script/script_header.c
@@ -71,7 +71,7 @@ static uiBlock *dummy_viewmenu(bContext *C, ARegion *ar, void *arg_unused)
uiBlock *block;
short yco= 0, menuwidth=120;
- block= uiBeginBlock(C, ar, "dummy_viewmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "dummy_viewmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_viewmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Nothing yet", 0, yco-=20,
@@ -104,7 +104,7 @@ void script_header_buttons(const bContext *C, ARegion *ar)
uiBlock *block;
int xco, yco= 3;
- block= uiBeginBlock(C, ar, "header buttons", UI_EMBOSS, UI_HELV);
+ block= uiBeginBlock(C, ar, "header buttons", UI_EMBOSS);
uiBlockSetHandleFunc(block, do_script_buttons, NULL);
xco= ED_area_header_standardbuttons(C, block, yco);
@@ -112,9 +112,6 @@ void script_header_buttons(const bContext *C, ARegion *ar)
if((sa->flag & HEADER_NO_PULLDOWN)==0) {
int xmax;
- /* pull down menus */
- uiBlockSetEmboss(block, UI_EMBOSSP);
-
xmax= GetButStringLength("View");
uiDefPulldownBut(block, dummy_viewmenu, CTX_wm_area(C),
"View", xco, yco-2, xmax-3, 24, "");
diff --git a/source/blender/editors/space_script/script_intern.h b/source/blender/editors/space_script/script_intern.h
index e9dd88e893c..59858ee6289 100644
--- a/source/blender/editors/space_script/script_intern.h
+++ b/source/blender/editors/space_script/script_intern.h
@@ -39,7 +39,8 @@ void script_operatortypes(void);
void script_keymap(struct wmWindowManager *wm);
/* script_edit.c */
-void SCRIPT_OT_run_pyfile(struct wmOperatorType *ot);
+void SCRIPT_OT_python_file_run(struct wmOperatorType *ot);
+void SCRIPT_OT_python_run_ui_scripts(struct wmOperatorType *ot);
#endif /* ED_SCRIPT_INTERN_H */
diff --git a/source/blender/editors/space_script/script_ops.c b/source/blender/editors/space_script/script_ops.c
index 45cbf9f8a2d..aa35ba54b7f 100644
--- a/source/blender/editors/space_script/script_ops.c
+++ b/source/blender/editors/space_script/script_ops.c
@@ -59,7 +59,8 @@
void script_operatortypes(void)
{
- WM_operatortype_append(SCRIPT_OT_run_pyfile);
+ WM_operatortype_append(SCRIPT_OT_python_file_run);
+ WM_operatortype_append(SCRIPT_OT_python_run_ui_scripts);
}
void script_keymap(wmWindowManager *wm)
@@ -67,6 +68,7 @@ void script_keymap(wmWindowManager *wm)
ListBase *keymap= WM_keymap_listbase(wm, "Script", SPACE_SCRIPT, 0);
/* TODO - this is just while we have no way to load a text datablock */
- RNA_string_set(WM_keymap_add_item(keymap, "SCRIPT_OT_run_pyfile", PKEY, KM_PRESS, 0, 0)->ptr, "filename", "test.py");
+ RNA_string_set(WM_keymap_add_item(keymap, "SCRIPT_OT_python_file_run", PKEY, KM_PRESS, KM_CTRL|KM_SHIFT|KM_ALT, 0)->ptr, "filename", "test.py");
+ WM_keymap_add_item(keymap, "SCRIPT_OT_python_run_ui_scripts", PKEY, KM_PRESS, KM_SHIFT, 0);
}
diff --git a/source/blender/editors/space_script/space_script.c b/source/blender/editors/space_script/space_script.c
index c7f280f439e..4c17ed16475 100644
--- a/source/blender/editors/space_script/space_script.c
+++ b/source/blender/editors/space_script/space_script.c
@@ -58,6 +58,8 @@
#include "ED_markers.h"
+#include "BPY_extern.h"
+
#include "script_intern.h" // own include
diff --git a/source/blender/editors/space_sequencer/Makefile b/source/blender/editors/space_sequencer/Makefile
index c04202cba73..80699db4baa 100644
--- a/source/blender/editors/space_sequencer/Makefile
+++ b/source/blender/editors/space_sequencer/Makefile
@@ -38,7 +38,6 @@ CFLAGS += $(LEVEL_1_C_WARNINGS)
CPPFLAGS += -I$(NAN_GLEW)/include
CPPFLAGS += -I$(OPENGL_HEADERS)
-CPPFLAGS += -I$(NAN_BMFONT)/include
# not very neat....
CPPFLAGS += -I../../windowmanager
@@ -49,6 +48,7 @@ CPPFLAGS += -I../../makesdna
CPPFLAGS += -I../../makesrna
CPPFLAGS += -I../../imbuf
CPPFLAGS += -I../../python
+CPPFLAGS += -I../../blenfont
CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include
# own include
diff --git a/source/blender/editors/space_sequencer/SConscript b/source/blender/editors/space_sequencer/SConscript
index 1794ef29257..ab51068a529 100644
--- a/source/blender/editors/space_sequencer/SConscript
+++ b/source/blender/editors/space_sequencer/SConscript
@@ -3,8 +3,8 @@ Import ('env')
sources = env.Glob('*.c')
-incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../imbuf'
+incs = '../include ../../blenlib ../../blenkernel ../../blenfont ../../makesdna ../../imbuf'
incs += ' ../../windowmanager #/intern/guardedalloc #/extern/glew/include'
-incs += ' #intern/bmfont ../../makesrna'
+incs += ' ../../makesrna'
env.BlenderLib ( 'bf_editors_space_sequencer', sources, Split(incs), [], libtype=['core'], priority=[100] )
diff --git a/source/blender/editors/space_sequencer/sequencer_add.c b/source/blender/editors/space_sequencer/sequencer_add.c
index c91972ec4f3..6e38ff053be 100644
--- a/source/blender/editors/space_sequencer/sequencer_add.c
+++ b/source/blender/editors/space_sequencer/sequencer_add.c
@@ -207,12 +207,12 @@ static int sequencer_add_scene_strip_invoke(bContext *C, wmOperator *op, wmEvent
}
-void SEQUENCER_OT_add_scene_strip(struct wmOperatorType *ot)
+void SEQUENCER_OT_scene_strip_add(struct wmOperatorType *ot)
{
/* identifiers */
ot->name= "Add Scene Strip";
- ot->idname= "SEQUENCER_OT_add_scene_strip";
+ ot->idname= "SEQUENCER_OT_scene_strip_add";
ot->description= "Add a strip to the sequencer using a blender scene as a source";
/* api callbacks */
@@ -295,12 +295,12 @@ static int sequencer_add_movie_strip_invoke(bContext *C, wmOperator *op, wmEvent
}
-void SEQUENCER_OT_add_movie_strip(struct wmOperatorType *ot)
+void SEQUENCER_OT_movie_strip_add(struct wmOperatorType *ot)
{
/* identifiers */
ot->name= "Add Movie Strip";
- ot->idname= "SEQUENCER_OT_add_movie_strip";
+ ot->idname= "SEQUENCER_OT_movie_strip_add";
ot->description= "Add a movie strip to the sequencer";
/* api callbacks */
@@ -396,12 +396,12 @@ static int sequencer_add_sound_strip_invoke(bContext *C, wmOperator *op, wmEvent
}
-void SEQUENCER_OT_add_sound_strip(struct wmOperatorType *ot)
+void SEQUENCER_OT_sound_strip_add(struct wmOperatorType *ot)
{
/* identifiers */
ot->name= "Add Sound Strip";
- ot->idname= "SEQUENCER_OT_add_sound_strip";
+ ot->idname= "SEQUENCER_OT_sound_strip_add";
ot->description= "Add a sound strip to the sequencer";
/* api callbacks */
@@ -489,12 +489,12 @@ static int sequencer_add_image_strip_invoke(bContext *C, wmOperator *op, wmEvent
}
-void SEQUENCER_OT_add_image_strip(struct wmOperatorType *ot)
+void SEQUENCER_OT_image_strip_add(struct wmOperatorType *ot)
{
/* identifiers */
ot->name= "Add Image Strip";
- ot->idname= "SEQUENCER_OT_add_image_strip";
+ ot->idname= "SEQUENCER_OT_image_strip_add";
ot->description= "Add an image or image sequence to the sequencer";
/* api callbacks */
@@ -622,11 +622,11 @@ static int sequencer_add_effect_strip_invoke(bContext *C, wmOperator *op, wmEven
}
}
-void SEQUENCER_OT_add_effect_strip(struct wmOperatorType *ot)
+void SEQUENCER_OT_effect_strip_add(struct wmOperatorType *ot)
{
/* identifiers */
ot->name= "Add Effect Strip";
- ot->idname= "SEQUENCER_OT_add_effect_strip";
+ ot->idname= "SEQUENCER_OT_effect_strip_add";
ot->description= "Add an effect to the sequencer, most are applied ontop of existing strips";
/* api callbacks */
diff --git a/source/blender/editors/space_sequencer/sequencer_draw.c b/source/blender/editors/space_sequencer/sequencer_draw.c
index e71abec8e4b..5e07689f536 100644
--- a/source/blender/editors/space_sequencer/sequencer_draw.c
+++ b/source/blender/editors/space_sequencer/sequencer_draw.c
@@ -30,8 +30,6 @@
#include "MEM_guardedalloc.h"
-#include "BMF_Api.h"
-
#include "BLI_blenlib.h"
#include "BLI_arithb.h"
@@ -57,6 +55,7 @@
#include "BIF_gl.h"
#include "BIF_glutil.h"
+#include "BLF_api.h"
#include "ED_anim_api.h"
#include "ED_space_api.h"
@@ -404,12 +403,14 @@ static void draw_seq_handle(SpaceSeq *sseq, Sequence *seq, float pixelx, short d
cpack(0xFFFFFF);
if (direction == SEQ_LEFTHANDLE) {
sprintf(str, "%d", seq->startdisp);
- glRasterPos3f(rx1, y1-0.15, 0.0);
+ x1= rx1;
+ y1 -= 0.15;
} else {
sprintf(str, "%d", seq->enddisp - 1);
- glRasterPos3f((x2-BMF_GetStringWidth(G.fonts, str)*pixelx), y2+0.05, 0.0);
+ x1= x2 - BLF_width_default(str) * pixelx;
+ y1= y2 + 0.05;
}
- BMF_DrawString(G.fonts, str);
+ BLF_draw_default(x1, y1, 0.0f, str);
}
}
@@ -572,8 +573,9 @@ static void draw_seq_text(View2D *v2d, Sequence *seq, float x1, float x2, float
}
strp= str;
-
- while( (len= BMF_GetStringWidth(G.font, strp)) > size) {
+ // XXX
+ /* The correct thing is used a Styla and set the clipping region. */
+ while( (len= BLF_width_default(strp)) > size) {
if(len < 10) break;
if(strp[1]==0) break;
strp++;
@@ -590,8 +592,7 @@ static void draw_seq_text(View2D *v2d, Sequence *seq, float x1, float x2, float
}else{
cpack(0);
}
- glRasterPos3f(x1, y1+SEQ_STRIP_OFSBOTTOM, 0.0);
- BMF_DrawString(G.font, strp);
+ BLF_draw_default(x1, y1+SEQ_STRIP_OFSBOTTOM, 0.0, strp);
}
/* draws a shaded strip, made from gradient + flat color + gradient */
diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c
index 1ae9d19a10e..f6391666cd8 100644
--- a/source/blender/editors/space_sequencer/sequencer_edit.c
+++ b/source/blender/editors/space_sequencer/sequencer_edit.c
@@ -1981,11 +1981,11 @@ static int sequencer_separate_images_exec(bContext *C, wmOperator *op)
}
-void SEQUENCER_OT_separate_images(wmOperatorType *ot)
+void SEQUENCER_OT_images_separate(wmOperatorType *ot)
{
/* identifiers */
ot->name= "Separate Images";
- ot->idname= "SEQUENCER_OT_separate_images";
+ ot->idname= "SEQUENCER_OT_images_separate";
/* api callbacks */
ot->invoke= WM_operator_confirm;
diff --git a/source/blender/editors/space_sequencer/sequencer_header.c b/source/blender/editors/space_sequencer/sequencer_header.c
index a701a9dd55b..0e9a9d7130b 100644
--- a/source/blender/editors/space_sequencer/sequencer_header.c
+++ b/source/blender/editors/space_sequencer/sequencer_header.c
@@ -78,7 +78,7 @@ static uiBlock *seq_viewmenu(bContext *C, ARegion *ar, void *arg_unused)
SpaceSeq *sseq= sa->spacedata.first;
View2D *v2d= UI_view2d_fromcontext(C);
- uiBlock *block= uiBeginBlock(C, ar, "seq_viewmenu", UI_EMBOSSP, UI_HELV);
+ uiBlock *block= uiBeginBlock(C, ar, "seq_viewmenu", UI_EMBOSSP);
short yco= 0, menuwidth=120;
if (sseq->mainb == SEQ_DRAW_SEQUENCE) {
@@ -144,22 +144,22 @@ static uiBlock *seq_viewmenu(bContext *C, ARegion *ar, void *arg_unused)
}
//static uiBlock *seq_selectmenu(bContext *C, ARegion *ar, void *arg_unused)
-static void seq_selectmenu(bContext *C, uiMenuItem *head, void *arg_unused)
+static void seq_selectmenu(bContext *C, uiLayout *layout, void *arg_unused)
{
- uiMenuContext(head, WM_OP_INVOKE_REGION_WIN);
-
- uiMenuItemEnumO(head, "Strips to the Left", 0, "SEQUENCER_OT_select_active_side", "side", SEQ_SIDE_LEFT);
- uiMenuItemEnumO(head, "Strips to the Right", 0, "SEQUENCER_OT_select_active_side", "side", SEQ_SIDE_RIGHT);
- uiMenuSeparator(head);
- uiMenuItemEnumO(head, "Surrounding Handles", 0, "SEQUENCER_OT_select_handles", "side", SEQ_SIDE_BOTH);
- uiMenuItemEnumO(head, "Left Handles", 0, "SEQUENCER_OT_select_handles", "side", SEQ_SIDE_LEFT);
- uiMenuItemEnumO(head, "Right Handles", 0, "SEQUENCER_OT_select_handles", "side", SEQ_SIDE_RIGHT);
- uiMenuSeparator(head);
- uiMenuItemO(head, 0, "SEQUENCER_OT_select_linked");
- uiMenuSeparator(head);
- uiMenuItemO(head, 0, "SEQUENCER_OT_select_linked");
- uiMenuItemO(head, 0, "SEQUENCER_OT_select_all_toggle");
- uiMenuItemO(head, 0, "SEQUENCER_OT_select_invert");
+ uiLayoutContext(layout, WM_OP_INVOKE_REGION_WIN);
+
+ uiItemEnumO(layout, "Strips to the Left", 0, "SEQUENCER_OT_select_active_side", "side", SEQ_SIDE_LEFT);
+ uiItemEnumO(layout, "Strips to the Right", 0, "SEQUENCER_OT_select_active_side", "side", SEQ_SIDE_RIGHT);
+ uiItemS(layout);
+ uiItemEnumO(layout, "Surrounding Handles", 0, "SEQUENCER_OT_select_handles", "side", SEQ_SIDE_BOTH);
+ uiItemEnumO(layout, "Left Handles", 0, "SEQUENCER_OT_select_handles", "side", SEQ_SIDE_LEFT);
+ uiItemEnumO(layout, "Right Handles", 0, "SEQUENCER_OT_select_handles", "side", SEQ_SIDE_RIGHT);
+ uiItemS(layout);
+ uiItemO(layout, NULL, 0, "SEQUENCER_OT_select_linked");
+ uiItemS(layout);
+ uiItemO(layout, NULL, 0, "SEQUENCER_OT_select_linked");
+ uiItemO(layout, NULL, 0, "SEQUENCER_OT_select_all_toggle");
+ uiItemO(layout, NULL, 0, "SEQUENCER_OT_select_invert");
}
static uiBlock *seq_markermenu(bContext *C, ARegion *ar, void *arg_unused)
@@ -168,7 +168,7 @@ static uiBlock *seq_markermenu(bContext *C, ARegion *ar, void *arg_unused)
SpaceSeq *sseq= sa->spacedata.first;
- uiBlock *block= uiBeginBlock(C, ar, "seq_markermenu", UI_EMBOSSP, UI_HELV);
+ uiBlock *block= uiBeginBlock(C, ar, "seq_markermenu", UI_EMBOSSP);
short yco= 0, menuwidth=120;
@@ -210,114 +210,113 @@ static uiBlock *seq_markermenu(bContext *C, ARegion *ar, void *arg_unused)
}
//static uiBlock *seq_addmenu_effectmenu(bContext *C, ARegion *ar, void *arg_unused)
-static void seq_addmenu_effectmenu(bContext *C, uiMenuItem *head, void *arg_unused)
+static void seq_addmenu_effectmenu(bContext *C, uiLayout *layout, void *arg_unused)
{
- uiMenuContext(head, WM_OP_INVOKE_REGION_WIN);
+ uiLayoutContext(layout, WM_OP_INVOKE_REGION_WIN);
- uiMenuItemEnumO(head, "", 0, "SEQUENCER_OT_add_effect_strip", "type", SEQ_ADD);
- uiMenuItemEnumO(head, "", 0, "SEQUENCER_OT_add_effect_strip", "type", SEQ_SUB);
- uiMenuItemEnumO(head, "", 0, "SEQUENCER_OT_add_effect_strip", "type", SEQ_MUL);
- uiMenuItemEnumO(head, "", 0, "SEQUENCER_OT_add_effect_strip", "type", SEQ_CROSS);
- uiMenuItemEnumO(head, "", 0, "SEQUENCER_OT_add_effect_strip", "type", SEQ_GAMCROSS);
- uiMenuItemEnumO(head, "", 0, "SEQUENCER_OT_add_effect_strip", "type", SEQ_ALPHAOVER);
- uiMenuItemEnumO(head, "", 0, "SEQUENCER_OT_add_effect_strip", "type", SEQ_ALPHAUNDER);
- uiMenuItemEnumO(head, "", 0, "SEQUENCER_OT_add_effect_strip", "type", SEQ_OVERDROP);
- uiMenuItemEnumO(head, "", 0, "SEQUENCER_OT_add_effect_strip", "type", SEQ_WIPE);
- uiMenuItemEnumO(head, "", 0, "SEQUENCER_OT_add_effect_strip", "type", SEQ_GLOW);
- uiMenuItemEnumO(head, "", 0, "SEQUENCER_OT_add_effect_strip", "type", SEQ_TRANSFORM);
+ uiItemEnumO(layout, NULL, 0, "SEQUENCER_OT_effect_strip_add", "type", SEQ_ADD);
+ uiItemEnumO(layout, NULL, 0, "SEQUENCER_OT_effect_strip_add", "type", SEQ_SUB);
+ uiItemEnumO(layout, NULL, 0, "SEQUENCER_OT_effect_strip_add", "type", SEQ_MUL);
+ uiItemEnumO(layout, NULL, 0, "SEQUENCER_OT_effect_strip_add", "type", SEQ_CROSS);
+ uiItemEnumO(layout, NULL, 0, "SEQUENCER_OT_effect_strip_add", "type", SEQ_GAMCROSS);
+ uiItemEnumO(layout, NULL, 0, "SEQUENCER_OT_effect_strip_add", "type", SEQ_ALPHAOVER);
+ uiItemEnumO(layout, NULL, 0, "SEQUENCER_OT_effect_strip_add", "type", SEQ_ALPHAUNDER);
+ uiItemEnumO(layout, NULL, 0, "SEQUENCER_OT_effect_strip_add", "type", SEQ_OVERDROP);
+ uiItemEnumO(layout, NULL, 0, "SEQUENCER_OT_effect_strip_add", "type", SEQ_WIPE);
+ uiItemEnumO(layout, NULL, 0, "SEQUENCER_OT_effect_strip_add", "type", SEQ_GLOW);
+ uiItemEnumO(layout, NULL, 0, "SEQUENCER_OT_effect_strip_add", "type", SEQ_TRANSFORM);
/* Color is an effect but moved to the other menu since its not that exciting */
- uiMenuItemEnumO(head, "", 0, "SEQUENCER_OT_add_effect_strip", "type", SEQ_SPEED);
- uiMenuSeparator(head);
- uiMenuItemEnumO(head, "", 0, "SEQUENCER_OT_add_effect_strip", "type", SEQ_PLUGIN);
+ uiItemEnumO(layout, NULL, 0, "SEQUENCER_OT_effect_strip_add", "type", SEQ_SPEED);
+ uiItemS(layout);
+ uiItemEnumO(layout, NULL, 0, "SEQUENCER_OT_effect_strip_add", "type", SEQ_PLUGIN);
}
//static uiBlock *seq_addmenu(bContext *C, ARegion *ar, void *arg_unused)
-static void seq_addmenu(bContext *C, uiMenuItem *head, void *arg_unused)
+static void seq_addmenu(bContext *C, uiLayout *layout, void *arg_unused)
{
- uiMenuLevel(head, "Effects...", seq_addmenu_effectmenu);
- uiMenuSeparator(head);
+ uiItemMenuF(layout, "Effects...", 0, seq_addmenu_effectmenu);
+ uiItemS(layout);
- uiMenuContext(head, WM_OP_INVOKE_REGION_WIN);
+ uiLayoutContext(layout, WM_OP_INVOKE_REGION_WIN);
#ifdef WITH_FFMPEG
- uiMenuItemBooleanO(head, "Audio (RAM)", 0, "SEQUENCER_OT_add_sound_strip", "hd", FALSE);
- uiMenuItemBooleanO(head, "Audio (HD)", 0, "SEQUENCER_OT_add_sound_strip", "hd", TRUE);
+ uiItemBooleanO(layout, "Audio (RAM)", 0, "SEQUENCER_OT_sound_strip_add", "hd", FALSE);
+ uiItemBooleanO(layout, "Audio (HD)", 0, "SEQUENCER_OT_sound_strip_add", "hd", TRUE);
#else
- uiMenuItemO(head, 0, "SEQUENCER_OT_add_sound_strip");
+ uiItemO(layout, NULL, 0, "SEQUENCER_OT_sound_strip_add");
#endif
- uiMenuItemEnumO(head, "Add Color Strip", 0, "SEQUENCER_OT_add_effect_strip", "type", SEQ_COLOR);
+ uiItemEnumO(layout, "Add Color Strip", 0, "SEQUENCER_OT_effect_strip_add", "type", SEQ_COLOR);
- uiMenuItemO(head, 0, "SEQUENCER_OT_add_image_strip");
- uiMenuItemO(head, 0, "SEQUENCER_OT_add_movie_strip");
- uiMenuItemO(head, 0, "SEQUENCER_OT_add_scene_strip");
+ uiItemO(layout, NULL, 0, "SEQUENCER_OT_image_strip_add");
+ uiItemO(layout, NULL, 0, "SEQUENCER_OT_movie_strip_add");
+ uiItemO(layout, NULL, 0, "SEQUENCER_OT_scene_strip_add");
#ifdef WITH_FFMPEG
- uiMenuItemBooleanO(head, "Movie and Sound", 0, "SEQUENCER_OT_add_movie_strip", "sound", TRUE);
+ uiItemBooleanO(layout, "Movie and Sound", 0, "SEQUENCER_OT_movie_strip_add", "sound", TRUE);
#endif
}
//static uiBlock *seq_editmenu(bContext *C, ARegion *ar, void *arg_unused)
-static void seq_editmenu(bContext *C, uiMenuItem *head, void *arg_unused)
+static void seq_editmenu(bContext *C, uiLayout *layout, void *arg_unused)
{
-
Scene *scene= CTX_data_scene(C);
Editing *ed= seq_give_editing(scene, FALSE);
- uiMenuContext(head, WM_OP_INVOKE_REGION_WIN);
+ uiLayoutContext(layout, WM_OP_INVOKE_REGION_WIN);
- uiMenuItemEnumO(head, "", 0, "TFM_OT_transform", "mode", TFM_TRANSLATION);
- uiMenuItemEnumO(head, "", 0, "TFM_OT_transform", "mode", TFM_TIME_EXTEND);
+ uiItemEnumO(layout, NULL, 0, "TFM_OT_transform", "mode", TFM_TRANSLATION);
+ uiItemEnumO(layout, NULL, 0, "TFM_OT_transform", "mode", TFM_TIME_EXTEND);
- // uiMenuItemO(head, 0, "SEQUENCER_OT_strip_snap"); // TODO - add this operator
+ // uiItemO(layout, NULL, 0, "SEQUENCER_OT_strip_snap"); // TODO - add this operator
- uiMenuItemEnumO(head, "Cut Hard", 0, "SEQUENCER_OT_cut", "type", SEQ_CUT_HARD);
- uiMenuItemEnumO(head, "Cut Soft", 0, "SEQUENCER_OT_cut", "type", SEQ_CUT_SOFT);
+ uiItemEnumO(layout, "Cut Hard", 0, "SEQUENCER_OT_cut", "type", SEQ_CUT_HARD);
+ uiItemEnumO(layout, "Cut Soft", 0, "SEQUENCER_OT_cut", "type", SEQ_CUT_SOFT);
- uiMenuItemO(head, 0, "SEQUENCER_OT_separate_images");
- uiMenuSeparator(head);
- uiMenuItemO(head, 0, "SEQUENCER_OT_duplicate_add");
- uiMenuItemO(head, 0, "SEQUENCER_OT_delete");
+ uiItemO(layout, NULL, 0, "SEQUENCER_OT_images_separate");
+ uiItemS(layout);
+ uiItemO(layout, NULL, 0, "SEQUENCER_OT_duplicate_add");
+ uiItemO(layout, NULL, 0, "SEQUENCER_OT_delete");
if (ed && ed->act_seq) {
switch(ed->act_seq->type) {
case SEQ_EFFECT:
- uiMenuSeparator(head);
- uiMenuItemO(head, 0, "SEQUENCER_OT_effect_change");
- uiMenuItemO(head, 0, "SEQUENCER_OT_effect_reassign_inputs");
+ uiItemS(layout);
+ uiItemO(layout, NULL, 0, "SEQUENCER_OT_effect_change");
+ uiItemO(layout, NULL, 0, "SEQUENCER_OT_effect_reassign_inputs");
break;
case SEQ_IMAGE:
- uiMenuSeparator(head);
- uiMenuItemO(head, 0, "SEQUENCER_OT_image_change"); // Change Scene...
+ uiItemS(layout);
+ uiItemO(layout, NULL, 0, "SEQUENCER_OT_image_change"); // Change Scene...
break;
case SEQ_SCENE:
- uiMenuSeparator(head);
- uiMenuItemO(head, 0, "SEQUENCER_OT_scene_change"); // Remap Paths...
+ uiItemS(layout);
+ uiItemO(layout, NULL, 0, "SEQUENCER_OT_scene_change"); // Remap Paths...
break;
case SEQ_MOVIE:
- uiMenuSeparator(head);
- uiMenuItemO(head, 0, "SEQUENCER_OT_movie_change"); // Remap Paths...
+ uiItemS(layout);
+ uiItemO(layout, NULL, 0, "SEQUENCER_OT_movie_change"); // Remap Paths...
break;
}
}
- uiMenuSeparator(head);
+ uiItemS(layout);
- uiMenuItemO(head, 0, "SEQUENCER_OT_meta_make");
- uiMenuItemO(head, 0, "SEQUENCER_OT_meta_separate");
+ uiItemO(layout, NULL, 0, "SEQUENCER_OT_meta_make");
+ uiItemO(layout, NULL, 0, "SEQUENCER_OT_meta_separate");
if (ed && (ed->metastack.first || (ed->act_seq && ed->act_seq->type == SEQ_META))) {
- uiMenuSeparator(head);
- uiMenuItemO(head, 0, "SEQUENCER_OT_meta_toggle");
+ uiItemS(layout);
+ uiItemO(layout, NULL, 0, "SEQUENCER_OT_meta_toggle");
}
- uiMenuSeparator(head);
- uiMenuItemO(head, 0, "SEQUENCER_OT_reload");
- uiMenuSeparator(head);
- uiMenuItemO(head, 0, "SEQUENCER_OT_lock");
- uiMenuItemO(head, 0, "SEQUENCER_OT_unlock");
- uiMenuItemO(head, 0, "SEQUENCER_OT_mute");
- uiMenuItemO(head, 0, "SEQUENCER_OT_unmute");
-
- uiMenuItemEnumO(head, "Mute Deselected Strips", 0, "SEQUENCER_OT_mute", "type", SEQ_UNSELECTED);
+ uiItemS(layout);
+ uiItemO(layout, NULL, 0, "SEQUENCER_OT_reload");
+ uiItemS(layout);
+ uiItemO(layout, NULL, 0, "SEQUENCER_OT_lock");
+ uiItemO(layout, NULL, 0, "SEQUENCER_OT_unlock");
+ uiItemO(layout, NULL, 0, "SEQUENCER_OT_mute");
+ uiItemO(layout, NULL, 0, "SEQUENCER_OT_unmute");
+
+ uiItemEnumO(layout, "Mute Deselected Strips", 0, "SEQUENCER_OT_mute", "type", SEQ_UNSELECTED);
}
void sequencer_header_buttons(const bContext *C, ARegion *ar)
@@ -327,7 +326,7 @@ void sequencer_header_buttons(const bContext *C, ARegion *ar)
Scene *scene= CTX_data_scene(C);
Editing *ed= seq_give_editing(scene, FALSE);
- uiBlock *block= uiBeginBlock(C, ar, "header buttons", UI_EMBOSS, UI_HELV);
+ uiBlock *block= uiBeginBlock(C, ar, "header buttons", UI_EMBOSS);
int xco=3, yco= 3;
xco= ED_area_header_standardbuttons(C, block, yco);
@@ -335,9 +334,6 @@ void sequencer_header_buttons(const bContext *C, ARegion *ar)
if((sa->flag & HEADER_NO_PULLDOWN)==0) {
int xmax;
- /* pull down menus */
- uiBlockSetEmboss(block, UI_EMBOSSP);
-
xmax= GetButStringLength("View");
//uiDefMenuBut(block, seq_viewmenu, NULL, "View", xco, 0, xmax-3, 24, ""); // TODO
diff --git a/source/blender/editors/space_sequencer/sequencer_intern.h b/source/blender/editors/space_sequencer/sequencer_intern.h
index 8a56d15e1da..df6a848696f 100644
--- a/source/blender/editors/space_sequencer/sequencer_intern.h
+++ b/source/blender/editors/space_sequencer/sequencer_intern.h
@@ -80,7 +80,7 @@ void SEQUENCER_OT_reload(struct wmOperatorType *ot);
void SEQUENCER_OT_refresh_all(struct wmOperatorType *ot);
void SEQUENCER_OT_duplicate_add(struct wmOperatorType *ot);
void SEQUENCER_OT_delete(struct wmOperatorType *ot);
-void SEQUENCER_OT_separate_images(struct wmOperatorType *ot);
+void SEQUENCER_OT_images_separate(struct wmOperatorType *ot);
void SEQUENCER_OT_meta_toggle(struct wmOperatorType *ot);
void SEQUENCER_OT_meta_make(struct wmOperatorType *ot);
void SEQUENCER_OT_meta_separate(struct wmOperatorType *ot);
@@ -102,11 +102,11 @@ void SEQUENCER_OT_select_invert(struct wmOperatorType *ot);
/* sequencer_select.c */
-void SEQUENCER_OT_add_scene_strip(struct wmOperatorType *ot);
-void SEQUENCER_OT_add_movie_strip(struct wmOperatorType *ot);
-void SEQUENCER_OT_add_sound_strip(struct wmOperatorType *ot);
-void SEQUENCER_OT_add_image_strip(struct wmOperatorType *ot);
-void SEQUENCER_OT_add_effect_strip(struct wmOperatorType *ot);
+void SEQUENCER_OT_scene_strip_add(struct wmOperatorType *ot);
+void SEQUENCER_OT_movie_strip_add(struct wmOperatorType *ot);
+void SEQUENCER_OT_sound_strip_add(struct wmOperatorType *ot);
+void SEQUENCER_OT_image_strip_add(struct wmOperatorType *ot);
+void SEQUENCER_OT_effect_strip_add(struct wmOperatorType *ot);
/* RNA enums, just to be more readable */
enum {
diff --git a/source/blender/editors/space_sequencer/sequencer_ops.c b/source/blender/editors/space_sequencer/sequencer_ops.c
index a159a4828da..b131061782a 100644
--- a/source/blender/editors/space_sequencer/sequencer_ops.c
+++ b/source/blender/editors/space_sequencer/sequencer_ops.c
@@ -73,7 +73,7 @@ void sequencer_operatortypes(void)
WM_operatortype_append(SEQUENCER_OT_refresh_all);
WM_operatortype_append(SEQUENCER_OT_duplicate_add);
WM_operatortype_append(SEQUENCER_OT_delete);
- WM_operatortype_append(SEQUENCER_OT_separate_images);
+ WM_operatortype_append(SEQUENCER_OT_images_separate);
WM_operatortype_append(SEQUENCER_OT_meta_toggle);
WM_operatortype_append(SEQUENCER_OT_meta_make);
WM_operatortype_append(SEQUENCER_OT_meta_separate);
@@ -94,11 +94,11 @@ void sequencer_operatortypes(void)
WM_operatortype_append(SEQUENCER_OT_select_border);
/* sequencer_add.c */
- WM_operatortype_append(SEQUENCER_OT_add_scene_strip);
- WM_operatortype_append(SEQUENCER_OT_add_movie_strip);
- WM_operatortype_append(SEQUENCER_OT_add_sound_strip);
- WM_operatortype_append(SEQUENCER_OT_add_image_strip);
- WM_operatortype_append(SEQUENCER_OT_add_effect_strip);
+ WM_operatortype_append(SEQUENCER_OT_scene_strip_add);
+ WM_operatortype_append(SEQUENCER_OT_movie_strip_add);
+ WM_operatortype_append(SEQUENCER_OT_sound_strip_add);
+ WM_operatortype_append(SEQUENCER_OT_image_strip_add);
+ WM_operatortype_append(SEQUENCER_OT_effect_strip_add);
}
@@ -129,7 +129,7 @@ void sequencer_keymap(wmWindowManager *wm)
WM_keymap_add_item(keymap, "SEQUENCER_OT_delete", XKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "SEQUENCER_OT_delete", DELKEY, KM_PRESS, 0, 0);
- WM_keymap_add_item(keymap, "SEQUENCER_OT_separate_images", YKEY, KM_PRESS, 0, 0);
+ WM_keymap_add_item(keymap, "SEQUENCER_OT_images_separate", YKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "SEQUENCER_OT_meta_toggle", TABKEY, KM_PRESS, 0, 0);
diff --git a/source/blender/editors/space_sound/sound_header.c b/source/blender/editors/space_sound/sound_header.c
index 3eed96d14d7..ae3410663c2 100644
--- a/source/blender/editors/space_sound/sound_header.c
+++ b/source/blender/editors/space_sound/sound_header.c
@@ -71,7 +71,7 @@ static uiBlock *dummy_viewmenu(bContext *C, ARegion *ar, void *arg_unused)
uiBlock *block;
short yco= 0, menuwidth=120;
- block= uiBeginBlock(C, ar, "dummy_viewmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "dummy_viewmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_viewmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Nothing yet", 0, yco-=20,
@@ -104,7 +104,7 @@ void sound_header_buttons(const bContext *C, ARegion *ar)
uiBlock *block;
int xco, yco= 3;
- block= uiBeginBlock(C, ar, "header buttons", UI_EMBOSS, UI_HELV);
+ block= uiBeginBlock(C, ar, "header buttons", UI_EMBOSS);
uiBlockSetHandleFunc(block, do_sound_buttons, NULL);
xco= ED_area_header_standardbuttons(C, block, yco);
@@ -112,9 +112,6 @@ void sound_header_buttons(const bContext *C, ARegion *ar)
if((sa->flag & HEADER_NO_PULLDOWN)==0) {
int xmax;
- /* pull down menus */
- uiBlockSetEmboss(block, UI_EMBOSSP);
-
xmax= GetButStringLength("View");
uiDefPulldownBut(block, dummy_viewmenu, CTX_wm_area(C),
"View", xco, yco-2, xmax-3, 24, "");
diff --git a/source/blender/editors/space_text/SConscript b/source/blender/editors/space_text/SConscript
index 3d5ccc318e1..09ba961bfce 100644
--- a/source/blender/editors/space_text/SConscript
+++ b/source/blender/editors/space_text/SConscript
@@ -5,7 +5,7 @@ sources = env.Glob('*.c')
defs = []
incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../imbuf'
incs += ' ../../windowmanager #/intern/guardedalloc #/extern/glew/include'
-incs += ' #/intern/bmfont ../../python ../../makesrna ../../blenfont'
+incs += ' ../../python ../../makesrna ../../blenfont'
if not env['WITH_BF_PYTHON']:
defs.append('DISABLE_PYTHON')
diff --git a/source/blender/editors/space_text/space_text.c b/source/blender/editors/space_text/space_text.c
index 89852955ca3..384ad3e919c 100644
--- a/source/blender/editors/space_text/space_text.c
+++ b/source/blender/editors/space_text/space_text.c
@@ -127,13 +127,17 @@ static void text_listener(ScrArea *sa, wmNotifier *wmn)
if(!wmn->reference || wmn->reference == st->text) {
ED_area_tag_redraw(sa);
- if(wmn->data == ND_CURSOR) {
+ if(wmn->data == ND_CURSOR || wmn->action == NA_EDITED) {
ARegion *ar;
for(ar=sa->regionbase.first; ar; ar= ar->next)
if(ar->regiontype==RGN_TYPE_WINDOW)
text_update_cursor_moved(st, ar);
}
+
+ if(wmn->action == NA_EDITED)
+ if(st->text)
+ text_update_edited(st->text);
}
else if(wmn->data == ND_DISPLAY)
ED_area_tag_redraw(sa);
@@ -147,6 +151,7 @@ static void text_operatortypes(void)
WM_operatortype_append(TEXT_OT_new);
WM_operatortype_append(TEXT_OT_open);
WM_operatortype_append(TEXT_OT_reload);
+ WM_operatortype_append(TEXT_OT_unlink);
WM_operatortype_append(TEXT_OT_save);
WM_operatortype_append(TEXT_OT_save_as);
WM_operatortype_append(TEXT_OT_make_internal);
@@ -343,13 +348,12 @@ static void text_cursor(wmWindow *win, ScrArea *sa, ARegion *ar)
/* add handlers, stuff you only do once or on area/region changes */
static void text_header_area_init(wmWindowManager *wm, ARegion *ar)
{
- UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_HEADER, ar->winx, ar->winy);
- ar->v2d.flag &= ~(V2D_PIXELOFS_X|V2D_PIXELOFS_Y); // XXX temporary
+ ED_region_header_init(ar);
}
static void text_header_area_draw(const bContext *C, ARegion *ar)
{
- uiRegionHeaderLayout(C, ar);
+ ED_region_header(C, ar);
}
/****************** properties region ******************/
@@ -357,12 +361,12 @@ static void text_header_area_draw(const bContext *C, ARegion *ar)
/* add handlers, stuff you only do once or on area/region changes */
static void text_properties_area_init(wmWindowManager *wm, ARegion *ar)
{
- UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_PANELS_UI, ar->winx, ar->winy);
+ ED_region_panels_init(wm, ar);
}
static void text_properties_area_draw(const bContext *C, ARegion *ar)
{
- uiRegionPanelLayout(C, ar, 1, NULL);
+ ED_region_panels(C, ar, 1, NULL);
}
/********************* registration ********************/
@@ -401,9 +405,6 @@ void ED_spacetype_text(void)
art->init= text_properties_area_init;
art->draw= text_properties_area_draw;
-
- text_properties_register(art);
-
BLI_addhead(&st->regiontypes, art);
/* regions: header */
diff --git a/source/blender/editors/space_text/text_header.c b/source/blender/editors/space_text/text_header.c
index 63e3bca1ad0..fe00b86e19f 100644
--- a/source/blender/editors/space_text/text_header.c
+++ b/source/blender/editors/space_text/text_header.c
@@ -56,6 +56,7 @@
#include "BKE_global.h"
#include "BKE_library.h"
#include "BKE_main.h"
+#include "BKE_scene.h"
#include "BKE_screen.h"
#include "BKE_text.h"
@@ -71,7 +72,6 @@
#include "UI_interface.h"
#include "UI_resources.h"
-#include "UI_text.h"
#include "UI_view2d.h"
#include "RNA_access.h"
@@ -101,7 +101,7 @@ static uiBlock *text_template_scriptsmenu(bContext *C, void *args_unused)
// int i= 0;
// short yco = 20, menuwidth = 120;
- block= uiBeginBlock(C, ar, "text_template_scriptsmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "text_template_scriptsmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_text_template_scriptsmenu, NULL);
/* note that we acount for the N previous entries with i+20: */
@@ -134,7 +134,7 @@ static uiBlock *text_plugin_scriptsmenu(bContext *C, void *args_unused)
// int i= 0;
// short yco = 20, menuwidth = 120;
- block= uiBeginBlock(C, ar, "text_plugin_scriptsmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "text_plugin_scriptsmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_text_plugin_scriptsmenu, NULL);
/* note that we acount for the N previous entries with i+20: */
@@ -155,44 +155,46 @@ static uiBlock *text_plugin_scriptsmenu(bContext *C, void *args_unused)
}
#endif
-static void text_editmenu_viewmenu(bContext *C, uiMenuItem *head, void *arg_unused)
+static void text_editmenu_viewmenu(bContext *C, uiLayout *layout, void *arg_unused)
{
- uiMenuItemEnumO(head, "Top of File", 0, "TEXT_OT_move", "type", FILE_TOP);
- uiMenuItemEnumO(head, "Bottom of File", 0, "TEXT_OT_move", "type", FILE_BOTTOM);
+ uiItemEnumO(layout, "Top of File", 0, "TEXT_OT_move", "type", FILE_TOP);
+ uiItemEnumO(layout, "Bottom of File", 0, "TEXT_OT_move", "type", FILE_BOTTOM);
}
-static void text_editmenu_selectmenu(bContext *C, uiMenuItem *head, void *arg_unused)
+static void text_editmenu_selectmenu(bContext *C, uiLayout *layout, void *arg_unused)
{
- uiMenuItemO(head, 0, "TEXT_OT_select_all");
- uiMenuItemO(head, 0, "TEXT_OT_select_line");
+ uiItemO(layout, NULL, 0, "TEXT_OT_select_all");
+ uiItemO(layout, NULL, 0, "TEXT_OT_select_line");
}
-static void text_editmenu_markermenu(bContext *C, uiMenuItem *head, void *arg_unused)
+static void text_editmenu_markermenu(bContext *C, uiLayout *layout, void *arg_unused)
{
- uiMenuItemO(head, 0, "TEXT_OT_markers_clear");
- uiMenuItemO(head, 0, "TEXT_OT_next_marker");
- uiMenuItemO(head, 0, "TEXT_OT_previous_marker");
+ uiItemO(layout, NULL, 0, "TEXT_OT_markers_clear");
+ uiItemO(layout, NULL, 0, "TEXT_OT_next_marker");
+ uiItemO(layout, NULL, 0, "TEXT_OT_previous_marker");
}
-static void text_formatmenu(bContext *C, uiMenuItem *head, void *arg_unused)
+static void text_formatmenu(const bContext *C, Menu *menu)
{
- uiMenuItemO(head, 0, "TEXT_OT_indent");
- uiMenuItemO(head, 0, "TEXT_OT_unindent");
+ uiLayout *layout= menu->layout;
- uiMenuSeparator(head);
+ uiItemO(layout, NULL, 0, "TEXT_OT_indent");
+ uiItemO(layout, NULL, 0, "TEXT_OT_unindent");
- uiMenuItemO(head, 0, "TEXT_OT_comment");
- uiMenuItemO(head, 0, "TEXT_OT_uncomment");
+ uiItemS(layout);
- uiMenuSeparator(head);
+ uiItemO(layout, NULL, 0, "TEXT_OT_comment");
+ uiItemO(layout, NULL, 0, "TEXT_OT_uncomment");
- uiMenuLevelEnumO(head, "TEXT_OT_convert_whitespace", "type");
+ uiItemS(layout);
+
+ uiItemMenuEnumO(layout, NULL, 0, "TEXT_OT_convert_whitespace", "type");
}
-static void text_editmenu_to3dmenu(bContext *C, uiMenuItem *head, void *arg_unused)
+static void text_editmenu_to3dmenu(bContext *C, uiLayout *layout, void *arg_unused)
{
- uiMenuItemBooleanO(head, "One Object", 0, "TEXT_OT_to_3d_object", "split_lines", 0);
- uiMenuItemBooleanO(head, "One Object Per Line", 0, "TEXT_OT_to_3d_object", "split_lines", 1);
+ uiItemBooleanO(layout, "One Object", 0, "TEXT_OT_to_3d_object", "split_lines", 0);
+ uiItemBooleanO(layout, "One Object Per Line", 0, "TEXT_OT_to_3d_object", "split_lines", 1);
}
static int text_menu_edit_poll(bContext *C)
@@ -200,307 +202,56 @@ static int text_menu_edit_poll(bContext *C)
return (CTX_data_edit_text(C) != NULL);
}
-static void text_editmenu(bContext *C, uiMenuItem *head, void *arg_unused)
+static void text_editmenu(const bContext *C, Menu *menu)
{
- uiMenuItemO(head, 0, "ED_OT_undo");
- uiMenuItemO(head, 0, "ED_OT_redo");
-
- uiMenuSeparator(head);
-
- uiMenuItemO(head, 0, "TEXT_OT_cut");
- uiMenuItemO(head, 0, "TEXT_OT_copy");
- uiMenuItemO(head, 0, "TEXT_OT_paste");
-
- uiMenuSeparator(head);
-
- uiMenuLevel(head, "View", text_editmenu_viewmenu);
- uiMenuLevel(head, "Select", text_editmenu_selectmenu);
- uiMenuLevel(head, "Markers", text_editmenu_markermenu);
+ uiLayout *layout= menu->layout;
- uiMenuSeparator(head);
+ uiItemO(layout, NULL, 0, "ED_OT_undo");
+ uiItemO(layout, NULL, 0, "ED_OT_redo");
- uiMenuItemO(head, 0, "TEXT_OT_jump");
- uiMenuItemO(head, 0, "TEXT_OT_properties");
+ uiItemS(layout);
- uiMenuSeparator(head);
+ uiItemO(layout, NULL, 0, "TEXT_OT_cut");
+ uiItemO(layout, NULL, 0, "TEXT_OT_copy");
+ uiItemO(layout, NULL, 0, "TEXT_OT_paste");
- uiMenuLevel(head, "Text to 3D Object", text_editmenu_to3dmenu);
-}
-
-static void text_filemenu(bContext *C, uiMenuItem *head, void *arg_unused)
-{
- SpaceText *st= (SpaceText*)CTX_wm_space_data(C);
- Text *text= st->text;
+ uiItemS(layout);
- uiMenuItemO(head, 0, "TEXT_OT_new");
- uiMenuItemO(head, 0, "TEXT_OT_open");
-
- if(text) {
- uiMenuItemO(head, 0, "TEXT_OT_reload");
-
- uiMenuSeparator(head);
-
- uiMenuItemO(head, 0, "TEXT_OT_save");
- uiMenuItemO(head, 0, "TEXT_OT_save_as");
-
- if(text->name)
- uiMenuItemO(head, 0, "TEXT_OT_make_internal");
-
- uiMenuSeparator(head);
-
- uiMenuItemO(head, 0, "TEXT_OT_run_script");
-
-#ifndef DISABLE_PYTHON
- if(BPY_is_pyconstraint(text))
- uiMenuItemO(head, 0, "TEXT_OT_refresh_pyconstraints");
-#endif
- }
+ uiItemMenuF(layout, "View", 0, text_editmenu_viewmenu);
+ uiItemMenuF(layout, "Select", 0, text_editmenu_selectmenu);
+ uiItemMenuF(layout, "Markers", 0, text_editmenu_markermenu);
-#ifndef DISABLE_PYTHON
- // XXX uiMenuSeparator(head);
-
- // XXX uiDefIconTextBlockBut(block, text_template_scriptsmenu, NULL, ICON_RIGHTARROW_THIN, "Script Templates", 0, yco-=20, 120, 19, "");
- // XXX uiDefIconTextBlockBut(block, text_plugin_scriptsmenu, NULL, ICON_RIGHTARROW_THIN, "Text Plugins", 0, yco-=20, 120, 19, "");
-#endif
-}
-
-/*********************** datablock browse *************************/
-
-static void text_unlink(Main *bmain, Text *text)
-{
- bScreen *scr;
- ScrArea *area;
- SpaceLink *sl;
-
- /* XXX this ifdef is in fact dangerous, if python is
- * disabled it will leave invalid pointers in files! */
-
-#ifndef DISABLE_PYTHON
- // XXX BPY_clear_bad_scriptlinks(text);
- // XXX BPY_free_pyconstraint_links(text);
- // XXX free_text_controllers(text);
-
- /* check if this text was used as script link:
- * this check function unsets the pointers and returns how many
- * script links used this Text */
- if(0) // XXX BPY_text_check_all_scriptlinks (text))
- ; // XXX notifier: allqueue(REDRAWBUTSSCRIPT, 0);
-
- /* equivalently for pynodes: */
- if(0) // XXX nodeDynamicUnlinkText ((ID*)text))
- ; // XXX notifier: allqueue(REDRAWNODE, 0);
-#endif
-
- for(scr= bmain->screen.first; scr; scr= scr->id.next) {
- for(area= scr->areabase.first; area; area= area->next) {
- for(sl= area->spacedata.first; sl; sl= sl->next) {
- if(sl->spacetype==SPACE_TEXT) {
- SpaceText *st= (SpaceText*) sl;
-
- if(st->text==text) {
- st->text= NULL;
- st->top= 0;
-
- if(st==area->spacedata.first)
- ED_area_tag_redraw(area);
- }
- }
- }
- }
- }
-
- free_libblock(&bmain->text, text);
-}
-
-static void text_idpoin_handle(bContext *C, ID *id, int event)
-{
- SpaceText *st= (SpaceText*)CTX_wm_space_data(C);
- Text *text;
+ uiItemS(layout);
- switch(event) {
- case UI_ID_BROWSE:
- st->text= (Text*)id;
- st->top= 0;
+ uiItemO(layout, NULL, 0, "TEXT_OT_jump");
+ uiItemO(layout, NULL, 0, "TEXT_OT_properties");
- text_update_edited(st->text);
- WM_event_add_notifier(C, NC_TEXT|ND_CURSOR, st->text);
+ uiItemS(layout);
- ED_undo_push(C, "Browse Text");
- break;
- case UI_ID_DELETE:
- text= st->text;
-
- /* make the previous text active, if its not there make the next text active */
- if(text->id.prev) {
- st->text = text->id.prev;
- WM_event_add_notifier(C, NC_TEXT|ND_CURSOR, st->text);
- }
- else if(text->id.next) {
- st->text = text->id.next;
- WM_event_add_notifier(C, NC_TEXT|ND_CURSOR, st->text);
- }
-
- text_unlink(CTX_data_main(C), text);
- WM_event_add_notifier(C, NC_TEXT|NA_REMOVED, text);
-
- ED_undo_push(C, "Delete Text");
- break;
- case UI_ID_RENAME:
- break;
- case UI_ID_ADD_NEW:
- WM_operator_name_call(C, "TEXT_OT_new", WM_OP_INVOKE_REGION_WIN, NULL);
- break;
- case UI_ID_OPEN:
- WM_operator_name_call(C, "TEXT_OT_open", WM_OP_INVOKE_REGION_WIN, NULL);
- break;
- }
+ uiItemMenuF(layout, "Text to 3D Object", 0, text_editmenu_to3dmenu);
}
/********************** header buttons ***********************/
-static void text_header_draw(const bContext *C, uiLayout *layout)
-{
- bScreen *sc= CTX_wm_screen(C);
- SpaceText *st= (SpaceText*)CTX_wm_space_data(C);
- PointerRNA spaceptr;
- Text *text= st->text;
-
- RNA_pointer_create(&sc->id, &RNA_SpaceTextEditor, st, &spaceptr);
-
- uiTemplateHeaderMenus(layout);
- uiItemMenu(layout, UI_TSLOT_HEADER, "Text", 0, text_filemenu);
- if(text) {
- uiItemMenu(layout, UI_TSLOT_HEADER, "Edit", 0, text_editmenu);
- uiItemMenu(layout, UI_TSLOT_HEADER, "Format", 0, text_formatmenu);
- }
-
- /* warning button if text is out of date */
- if(text && text_file_modified(text)) {
- uiTemplateHeaderButtons(layout);
- uiTemplateSetColor(layout, TH_REDALERT);
- uiItemO(layout, UI_TSLOT_HEADER, "", ICON_HELP, "TEXT_OT_resolve_conflict");
- }
-
- uiTemplateHeaderButtons(layout);
- uiItemR(layout, UI_TSLOT_HEADER, "", ICON_LINENUMBERS_OFF, &spaceptr, "line_numbers");
- uiItemR(layout, UI_TSLOT_HEADER, "", ICON_WORDWRAP_OFF, &spaceptr, "word_wrap");
- uiItemR(layout, UI_TSLOT_HEADER, "", ICON_SYNTAX_OFF, &spaceptr, "syntax_highlight");
- // XXX uiItemR(layout, "", ICON_SCRIPTPLUGINS, &spaceptr, "do_python_plugins");
-
- uiTemplateHeaderID(layout, &spaceptr, "text",
- UI_ID_BROWSE|UI_ID_RENAME|UI_ID_ADD_NEW|UI_ID_OPEN|UI_ID_DELETE,
- text_idpoin_handle);
-
- /* file info */
- if(text) {
- char fname[HEADER_PATH_MAX];
- static char headtxt[HEADER_PATH_MAX+17];
- int len;
-
- if(text->name) {
- len = strlen(text->name);
- if(len > HEADER_PATH_MAX-1)
- len = HEADER_PATH_MAX-1;
- strncpy(fname, text->name, len);
- fname[len]='\0';
- if(text->flags & TXT_ISDIRTY)
- sprintf(headtxt, "File: *%s (unsaved)", fname);
- else
- sprintf(headtxt, "File: %s", fname);
- }
- else
- sprintf(headtxt, text->id.lib? "Text: External": "Text: Internal");
-
- uiTemplateHeaderButtons(layout);
- uiItemLabel(layout, UI_TSLOT_HEADER, headtxt, 0);
- }
-}
-
void text_header_register(ARegionType *art)
{
- HeaderType *ht;
-
- /* header */
- ht= MEM_callocN(sizeof(HeaderType), "spacetype text header");
- ht->idname= "TEXT_HT_header";
- ht->name= "Header";
- ht->draw= text_header_draw;
- BLI_addhead(&art->headertypes, ht);
+ MenuType *mt;
+
+ mt= MEM_callocN(sizeof(MenuType), "spacetype text menu edit");
+ strcpy(mt->idname, "TEXT_MT_edit");
+ strcpy(mt->label, "Edit");
+ mt->draw= text_editmenu;
+ BLI_addhead(&art->menutypes, mt);
+
+ mt= MEM_callocN(sizeof(MenuType), "spacetype text menu format");
+ strcpy(mt->idname, "TEXT_MT_format");
+ strcpy(mt->label, "Format");
+ mt->draw= text_formatmenu;
+ BLI_addhead(&art->menutypes, mt);
}
/************************** properties ******************************/
-static void text_properties_panel_draw(const bContext *C, Panel *panel)
-{
- bScreen *sc= CTX_wm_screen(C);
- SpaceText *st= CTX_wm_space_text(C);
- uiLayout *layout= panel->layout;
- PointerRNA spaceptr;
-
- RNA_pointer_create(&sc->id, &RNA_SpaceTextEditor, st, &spaceptr);
-
- uiTemplateColumn(layout);
- uiItemR(layout, UI_TSLOT_COLUMN_1, NULL, ICON_LINENUMBERS_OFF, &spaceptr, "line_numbers");
- uiItemR(layout, UI_TSLOT_COLUMN_1, NULL, ICON_WORDWRAP_OFF, &spaceptr, "word_wrap");
- uiItemR(layout, UI_TSLOT_COLUMN_1, NULL, ICON_SYNTAX_OFF, &spaceptr, "syntax_highlight");
-
- uiTemplateColumn(layout);
- uiItemR(layout, UI_TSLOT_COLUMN_1, NULL, 0, &spaceptr, "font_size");
- uiItemR(layout, UI_TSLOT_COLUMN_1, NULL, 0, &spaceptr, "tab_width");
-}
-
-static void text_find_panel_draw(const bContext *C, Panel *panel)
-{
- bScreen *sc= CTX_wm_screen(C);
- SpaceText *st= CTX_wm_space_text(C);
- uiLayout *layout= panel->layout;
- PointerRNA spaceptr;
-
- RNA_pointer_create(&sc->id, &RNA_SpaceTextEditor, st, &spaceptr);
-
- /* find */
- uiTemplateLeftRight(layout);
- uiItemR(layout, UI_TSLOT_LR_LEFT, "", 0, &spaceptr, "find_text");
- uiItemO(layout, UI_TSLOT_LR_RIGHT, "", ICON_TEXT, "TEXT_OT_find_set_selected");
- uiTemplateColumn(layout);
- uiItemO(layout, UI_TSLOT_COLUMN_1, NULL, 0, "TEXT_OT_find");
-
- /* replace */
- uiTemplateLeftRight(layout);
- uiItemR(layout, UI_TSLOT_LR_LEFT, "", 0, &spaceptr, "replace_text");
- uiItemO(layout, UI_TSLOT_LR_RIGHT, "", ICON_TEXT, "TEXT_OT_replace_set_selected");
- uiTemplateColumn(layout);
- uiItemO(layout, UI_TSLOT_COLUMN_1, NULL, 0, "TEXT_OT_replace");
-
- /* mark */
- uiTemplateColumn(layout);
- uiItemO(layout, UI_TSLOT_COLUMN_1, NULL, 0, "TEXT_OT_mark_all");
-
- /* settings */
- uiTemplateColumn(layout);
- uiItemR(layout, UI_TSLOT_COLUMN_1, "Wrap", 0, &spaceptr, "find_wrap");
- uiItemR(layout, UI_TSLOT_COLUMN_2, "All", 0, &spaceptr, "find_all");
-}
-
-void text_properties_register(ARegionType *art)
-{
- PanelType *pt;
-
- /* panels: properties */
- pt= MEM_callocN(sizeof(PanelType), "spacetype text panel");
- pt->idname= "TEXT_PT_properties";
- pt->name= "Properties";
- pt->draw= text_properties_panel_draw;
- BLI_addtail(&art->paneltypes, pt);
-
- /* panels: find */
- pt= MEM_callocN(sizeof(PanelType), "spacetype text panel");
- pt->idname= "TEXT_PT_find";
- pt->name= "Find";
- pt->draw= text_find_panel_draw;
- BLI_addtail(&art->paneltypes, pt);
-}
-
ARegion *text_has_properties_region(ScrArea *sa)
{
ARegion *ar, *arnew;
@@ -569,75 +320,75 @@ void TEXT_OT_properties(wmOperatorType *ot)
{
// RMB
- uiMenuItem *head;
+ uiPopupMenu *pup;
if(text) {
- head= uiPupMenuBegin("Text", 0);
+ pup= uiPupMenuBegin(C, "Text", 0);
if(txt_has_sel(text)) {
- uiMenuItemO(head, 0, "TEXT_OT_cut");
- uiMenuItemO(head, 0, "TEXT_OT_copy");
+ uiItemO(layout, NULL, 0, "TEXT_OT_cut");
+ uiItemO(layout, NULL, 0, "TEXT_OT_copy");
}
- uiMenuItemO(head, 0, "TEXT_OT_paste");
- uiMenuItemO(head, 0, "TEXT_OT_new");
- uiMenuItemO(head, 0, "TEXT_OT_open");
- uiMenuItemO(head, 0, "TEXT_OT_save");
- uiMenuItemO(head, 0, "TEXT_OT_save_as");
- uiMenuItemO(head, 0, "TEXT_OT_run_script");
- uiPupMenuEnd(C, head);
+ uiItemO(layout, NULL, 0, "TEXT_OT_paste");
+ uiItemO(layout, NULL, 0, "TEXT_OT_new");
+ uiItemO(layout, NULL, 0, "TEXT_OT_open");
+ uiItemO(layout, NULL, 0, "TEXT_OT_save");
+ uiItemO(layout, NULL, 0, "TEXT_OT_save_as");
+ uiItemO(layout, NULL, 0, "TEXT_OT_run_script");
+ uiPupMenuEnd(C, pup);
}
else {
- head= uiPupMenuBegin("File", 0);
- uiMenuItemO(head, 0, "TEXT_OT_new");
- uiMenuItemO(head, 0, "TEXT_OT_open");
- uiPupMenuEnd(C, head);
+ pup= uiPupMenuBegin(C, "File", 0);
+ uiItemO(layout, NULL, 0, "TEXT_OT_new");
+ uiItemO(layout, NULL, 0, "TEXT_OT_open");
+ uiPupMenuEnd(C, pup);
}
}
{
// Alt+Shift+E
- uiMenuItem *head;
+ uiPopupMenu *pup;
- head= uiPupMenuBegin("Edit", 0);
- uiMenuItemO(head, 0, "TEXT_OT_cut");
- uiMenuItemO(head, 0, "TEXT_OT_copy");
- uiMenuItemO(head, 0, "TEXT_OT_paste");
- uiPupMenuEnd(C, head);
+ pup= uiPupMenuBegin(C, "Edit", 0);
+ uiItemO(layout, NULL, 0, "TEXT_OT_cut");
+ uiItemO(layout, NULL, 0, "TEXT_OT_copy");
+ uiItemO(layout, NULL, 0, "TEXT_OT_paste");
+ uiPupMenuEnd(C, pup);
}
{
// Alt+Shift+F
- uiMenuItem *head;
+ uiPopupMenu *pup;
if(text) {
- head= uiPupMenuBegin("Text", 0);
- uiMenuItemO(head, 0, "TEXT_OT_new");
- uiMenuItemO(head, 0, "TEXT_OT_open");
- uiMenuItemO(head, 0, "TEXT_OT_save");
- uiMenuItemO(head, 0, "TEXT_OT_save_as");
- uiMenuItemO(head, 0, "TEXT_OT_run_script");
- uiPupMenuEnd(C, head);
+ pup= uiPupMenuBegin(C, "Text", 0);
+ uiItemO(layout, NULL, 0, "TEXT_OT_new");
+ uiItemO(layout, NULL, 0, "TEXT_OT_open");
+ uiItemO(layout, NULL, 0, "TEXT_OT_save");
+ uiItemO(layout, NULL, 0, "TEXT_OT_save_as");
+ uiItemO(layout, NULL, 0, "TEXT_OT_run_script");
+ uiPupMenuEnd(C, pup);
}
else {
- head= uiPupMenuBegin("File", 0);
- uiMenuItemO(head, 0, "TEXT_OT_new");
- uiMenuItemO(head, 0, "TEXT_OT_open");
- uiPupMenuEnd(C, head);
+ pup= uiPupMenuBegin(C, "File", 0);
+ uiItemO(layout, NULL, 0, "TEXT_OT_new");
+ uiItemO(layout, NULL, 0, "TEXT_OT_open");
+ uiPupMenuEnd(C, pup);
}
}
{
// Alt+Shift+V
- uiMenuItem *head;
+ uiPopupMenu *pup;
- head= uiPupMenuBegin("Text", 0);
- uiMenuItemEnumO(head, "Top of File", 0, "TEXT_OT_move", "type", FILE_TOP);
- uiMenuItemEnumO(head, "Bottom of File", 0, "TEXT_OT_move", "type", FILE_BOTTOM);
- uiMenuItemEnumO(head, "Page Up", 0, "TEXT_OT_move", "type", PREV_PAGE);
- uiMenuItemEnumO(head, "Page Down", 0, "TEXT_OT_move", "type", NEXT_PAGE);
- uiPupMenuEnd(C, head);
+ pup= uiPupMenuBegin(C, "Text", 0);
+ uiItemEnumO(layout, "Top of File", 0, "TEXT_OT_move", "type", FILE_TOP);
+ uiItemEnumO(layout, "Bottom of File", 0, "TEXT_OT_move", "type", FILE_BOTTOM);
+ uiItemEnumO(layout, "Page Up", 0, "TEXT_OT_move", "type", PREV_PAGE);
+ uiItemEnumO(layout, "Page Down", 0, "TEXT_OT_move", "type", NEXT_PAGE);
+ uiPupMenuEnd(C, pup);
}
#endif
diff --git a/source/blender/editors/space_text/text_intern.h b/source/blender/editors/space_text/text_intern.h
index 7ec75e292ce..259811aee0f 100644
--- a/source/blender/editors/space_text/text_intern.h
+++ b/source/blender/editors/space_text/text_intern.h
@@ -33,7 +33,6 @@
struct ARegion;
struct ARegionType;
struct bContext;
-struct BMF_Font;
struct ReportList;
struct ScrArea;
struct SpaceText;
@@ -43,7 +42,6 @@ struct wmOperatorType;
struct wmWindowManager;
/* text_header.c */
-void text_properties_register(struct ARegionType *art);
void text_header_register(struct ARegionType *art);
/* text_draw.c */
@@ -106,6 +104,7 @@ enum { DEL_NEXT_CHAR, DEL_PREV_CHAR, DEL_NEXT_WORD, DEL_PREV_WORD };
void TEXT_OT_new(struct wmOperatorType *ot);
void TEXT_OT_open(struct wmOperatorType *ot);
void TEXT_OT_reload(struct wmOperatorType *ot);
+void TEXT_OT_unlink(struct wmOperatorType *ot);
void TEXT_OT_save(struct wmOperatorType *ot);
void TEXT_OT_save_as(struct wmOperatorType *ot);
void TEXT_OT_make_internal(struct wmOperatorType *ot);
diff --git a/source/blender/editors/space_text/text_ops.c b/source/blender/editors/space_text/text_ops.c
index c7fe02975ef..5f974e7bcbb 100644
--- a/source/blender/editors/space_text/text_ops.c
+++ b/source/blender/editors/space_text/text_ops.c
@@ -49,6 +49,7 @@
#include "BKE_context.h"
#include "BKE_depsgraph.h"
#include "BKE_global.h"
+#include "BKE_library.h"
#include "BKE_main.h"
#include "BKE_report.h"
#include "BKE_suggestions.h"
@@ -269,6 +270,90 @@ void TEXT_OT_reload(wmOperatorType *ot)
ot->poll= text_edit_poll;
}
+/******************* delete operator *********************/
+
+static void text_unlink(Main *bmain, Text *text)
+{
+ bScreen *scr;
+ ScrArea *area;
+ SpaceLink *sl;
+
+ /* XXX this ifdef is in fact dangerous, if python is
+ * disabled it will leave invalid pointers in files! */
+
+#ifndef DISABLE_PYTHON
+ // XXX BPY_clear_bad_scriptlinks(text);
+ // XXX BPY_free_pyconstraint_links(text);
+ // XXX free_text_controllers(text);
+ // XXX free_dome_warp_text(text);
+
+ /* check if this text was used as script link:
+ * this check function unsets the pointers and returns how many
+ * script links used this Text */
+ if(0) // XXX BPY_text_check_all_scriptlinks (text))
+ ; // XXX notifier: allqueue(REDRAWBUTSSCRIPT, 0);
+
+ /* equivalently for pynodes: */
+ if(0) // XXX nodeDynamicUnlinkText ((ID*)text))
+ ; // XXX notifier: allqueue(REDRAWNODE, 0);
+#endif
+
+ for(scr= bmain->screen.first; scr; scr= scr->id.next) {
+ for(area= scr->areabase.first; area; area= area->next) {
+ for(sl= area->spacedata.first; sl; sl= sl->next) {
+ if(sl->spacetype==SPACE_TEXT) {
+ SpaceText *st= (SpaceText*) sl;
+
+ if(st->text==text) {
+ st->text= NULL;
+ st->top= 0;
+
+ if(st==area->spacedata.first)
+ ED_area_tag_redraw(area);
+ }
+ }
+ }
+ }
+ }
+
+ free_libblock(&bmain->text, text);
+}
+
+static int unlink_exec(bContext *C, wmOperator *op)
+{
+ SpaceText *st= CTX_wm_space_text(C);
+ Text *text= CTX_data_edit_text(C);
+
+ /* make the previous text active, if its not there make the next text active */
+ if(st) {
+ if(text->id.prev) {
+ st->text = text->id.prev;
+ WM_event_add_notifier(C, NC_TEXT|ND_CURSOR, st->text);
+ }
+ else if(text->id.next) {
+ st->text = text->id.next;
+ WM_event_add_notifier(C, NC_TEXT|ND_CURSOR, st->text);
+ }
+ }
+
+ text_unlink(CTX_data_main(C), text);
+ WM_event_add_notifier(C, NC_TEXT|NA_REMOVED, text);
+
+ return OPERATOR_FINISHED;
+}
+
+void TEXT_OT_unlink(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "Unlink";
+ ot->idname= "TEXT_OT_unlink";
+
+ /* api callbacks */
+ ot->exec= unlink_exec;
+ ot->invoke= WM_operator_confirm;
+ ot->poll= text_edit_poll;
+}
+
/******************* make internal operator *********************/
static int make_internal_exec(bContext *C, wmOperator *op)
@@ -2448,31 +2533,35 @@ static int resolve_conflict_exec(bContext *C, wmOperator *op)
static int resolve_conflict_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
Text *text= CTX_data_edit_text(C);
- uiMenuItem *head;
+ uiPopupMenu *pup;
+ uiLayout *layout;
switch(text_file_modified(text)) {
case 1:
if(text->flags & TXT_ISDIRTY) {
/* modified locally and externally, ahhh. offer more possibilites. */
- head= uiPupMenuBegin("File Modified Outside and Inside Blender", 0);
- uiMenuItemEnumO(head, "Reload from disk (ignore local changes)", 0, op->type->idname, "resolution", RESOLVE_RELOAD);
- uiMenuItemEnumO(head, "Save to disk (ignore outside changes)", 0, op->type->idname, "resolution", RESOLVE_SAVE);
- uiMenuItemEnumO(head, "Make text internal (separate copy)", 0, op->type->idname, "resolution", RESOLVE_MAKE_INTERNAL);
- uiPupMenuEnd(C, head);
+ pup= uiPupMenuBegin(C, "File Modified Outside and Inside Blender", 0);
+ layout= uiPupMenuLayout(pup);
+ uiItemEnumO(layout, "Reload from disk (ignore local changes)", 0, op->type->idname, "resolution", RESOLVE_RELOAD);
+ uiItemEnumO(layout, "Save to disk (ignore outside changes)", 0, op->type->idname, "resolution", RESOLVE_SAVE);
+ uiItemEnumO(layout, "Make text internal (separate copy)", 0, op->type->idname, "resolution", RESOLVE_MAKE_INTERNAL);
+ uiPupMenuEnd(C, pup);
}
else {
- head= uiPupMenuBegin("File Modified Outside Blender", 0);
- uiMenuItemEnumO(head, "Reload from disk", 0, op->type->idname, "resolution", RESOLVE_RELOAD);
- uiMenuItemEnumO(head, "Make text internal (separate copy)", 0, op->type->idname, "resolution", RESOLVE_MAKE_INTERNAL);
- uiMenuItemEnumO(head, "Ignore", 0, op->type->idname, "resolution", RESOLVE_IGNORE);
- uiPupMenuEnd(C, head);
+ pup= uiPupMenuBegin(C, "File Modified Outside Blender", 0);
+ layout= uiPupMenuLayout(pup);
+ uiItemEnumO(layout, "Reload from disk", 0, op->type->idname, "resolution", RESOLVE_RELOAD);
+ uiItemEnumO(layout, "Make text internal (separate copy)", 0, op->type->idname, "resolution", RESOLVE_MAKE_INTERNAL);
+ uiItemEnumO(layout, "Ignore", 0, op->type->idname, "resolution", RESOLVE_IGNORE);
+ uiPupMenuEnd(C, pup);
}
break;
case 2:
- head= uiPupMenuBegin("File Deleted Outside Blender", 0);
- uiMenuItemEnumO(head, "Make text internal", 0, op->type->idname, "resolution", RESOLVE_MAKE_INTERNAL);
- uiMenuItemEnumO(head, "Recreate file", 0, op->type->idname, "resolution", RESOLVE_SAVE);
- uiPupMenuEnd(C, head);
+ pup= uiPupMenuBegin(C, "File Deleted Outside Blender", 0);
+ layout= uiPupMenuLayout(pup);
+ uiItemEnumO(layout, "Make text internal", 0, op->type->idname, "resolution", RESOLVE_MAKE_INTERNAL);
+ uiItemEnumO(layout, "Recreate file", 0, op->type->idname, "resolution", RESOLVE_SAVE);
+ uiPupMenuEnd(C, pup);
break;
}
diff --git a/source/blender/editors/space_time/time_header.c b/source/blender/editors/space_time/time_header.c
index 7c5c25a78a9..f26e632eb87 100644
--- a/source/blender/editors/space_time/time_header.c
+++ b/source/blender/editors/space_time/time_header.c
@@ -95,7 +95,7 @@ static uiBlock *time_redrawmenu(bContext *C, ARegion *ar, void *arg_unused)
short yco= 0, menuwidth=120, icon;
char str[32];
- block= uiBeginBlock(C, ar, "header time_redrawmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "header time_redrawmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_time_redrawmenu, NULL);
if(stime->redraws & TIME_LEFTMOST_3D_WIN) icon= ICON_CHECKBOX_HLT;
@@ -215,7 +215,7 @@ static uiBlock *time_viewmenu(bContext *C, ARegion *ar, void *arg_unused)
uiBlock *block;
short yco= 0, menuwidth=120;
- block= uiBeginBlock(C, ar, "time_viewmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "time_viewmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_time_viewmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Play Back Animation", 0, yco-=20,
@@ -301,7 +301,7 @@ static uiBlock *time_framemenu(bContext *C, ARegion *ar, void *arg_unused)
uiBlock *block;
short yco= 0, menuwidth=120;
- block= uiBeginBlock(C, ar, "time_framemenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "time_framemenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_time_framemenu, NULL);
uiDefIconTextButO(block, BUTM, "MARKER_OT_add", WM_OP_EXEC_REGION_WIN, ICON_BLANK1, "Add Marker",
@@ -432,7 +432,7 @@ void time_header_buttons(const bContext *C, ARegion *ar)
int xco, yco= 3;
char *menustr= NULL;
- block= uiBeginBlock(C, ar, "header buttons", UI_EMBOSS, UI_HELV);
+ block= uiBeginBlock(C, ar, "header buttons", UI_EMBOSS);
uiBlockSetHandleFunc(block, do_time_buttons, NULL);
xco= ED_area_header_standardbuttons(C, block, yco);
@@ -440,21 +440,18 @@ void time_header_buttons(const bContext *C, ARegion *ar)
if((sa->flag & HEADER_NO_PULLDOWN)==0) {
int xmax;
- /* pull down menus */
- uiBlockSetEmboss(block, UI_EMBOSSP);
-
xmax= GetButStringLength("View");
uiDefPulldownBut(block, time_viewmenu, sa,
- "View", xco, yco-2, xmax-3, 24, "");
+ "View", xco, yco, xmax-3, 20, "");
xco+= xmax;
xmax= GetButStringLength("Frame");
uiDefPulldownBut(block, time_framemenu, sa,
- "Frame", xco, yco-2, xmax-3, 24, "");
+ "Frame", xco, yco, xmax-3, 20, "");
xco+= xmax;
xmax= GetButStringLength("Playback");
uiDefPulldownBut(block, time_redrawmenu, sa,
- "Playback", xco, yco-2, xmax-3, 24, "");
+ "Playback", xco, yco, xmax-3, 20, "");
xco+= xmax;
}
diff --git a/source/blender/editors/space_view3d/Makefile b/source/blender/editors/space_view3d/Makefile
index 442ab502e65..dd4eab89411 100644
--- a/source/blender/editors/space_view3d/Makefile
+++ b/source/blender/editors/space_view3d/Makefile
@@ -38,7 +38,6 @@ CFLAGS += $(LEVEL_1_C_WARNINGS)
CPPFLAGS += -I$(NAN_GLEW)/include
CPPFLAGS += -I$(OPENGL_HEADERS)
-CPPFLAGS += -I$(NAN_BMFONT)/include
# not very neat....
CPPFLAGS += -I../../windowmanager
@@ -51,6 +50,7 @@ CPPFLAGS += -I../../python
CPPFLAGS += -I../../gpu
CPPFLAGS += -I../../makesrna
CPPFLAGS += -I../../render/extern/include
+CPPFLAGS += -I../../blenfont
CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include
# own include
diff --git a/source/blender/editors/space_view3d/SConscript b/source/blender/editors/space_view3d/SConscript
index 83d0d136566..c4ca73cffbd 100644
--- a/source/blender/editors/space_view3d/SConscript
+++ b/source/blender/editors/space_view3d/SConscript
@@ -5,7 +5,7 @@ sources = env.Glob('*.c')
incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../imbuf'
incs += ' ../../windowmanager #/intern/guardedalloc #/extern/glew/include'
-incs += ' ../../render/extern/include #/intern/guardedalloc #intern/bmfont'
-incs += ' ../../gpu ../../makesrna ../../bmesh'
+incs += ' ../../render/extern/include #/intern/guardedalloc'
+incs += ' ../../gpu ../../makesrna ../../blenfont ../../bmesh '
env.BlenderLib ( 'bf_editors_space_view3d', sources, Split(incs), [], libtype=['core'], priority=[40] )
diff --git a/source/blender/editors/space_view3d/drawarmature.c b/source/blender/editors/space_view3d/drawarmature.c
index 5d130cee48d..68a9bf3f555 100644
--- a/source/blender/editors/space_view3d/drawarmature.c
+++ b/source/blender/editors/space_view3d/drawarmature.c
@@ -37,8 +37,6 @@
#include "MEM_guardedalloc.h"
-#include "BMF_Api.h"
-
#include "DNA_action_types.h"
#include "DNA_armature_types.h"
#include "DNA_constraint_types.h"
@@ -74,6 +72,7 @@
#include "WM_api.h"
#include "WM_types.h"
+#include "BLF_api.h"
#include "UI_resources.h"
@@ -1806,9 +1805,7 @@ static void draw_pose_channels(Scene *scene, View3D *v3d, RegionView3D *rv3d, Ba
/* Draw names of bone */
if (arm->flag & ARM_DRAWNAMES) {
VecMidf(vec, pchan->pose_head, pchan->pose_tail);
- glRasterPos3fv(vec);
- BMF_DrawString(G.font, " ");
- BMF_DrawString(G.font, pchan->name);
+ view3d_object_text_draw_add(vec[0], vec[1], vec[2], pchan->name, 10);
}
/* Draw additional axes on the bone tail */
@@ -1993,8 +1990,7 @@ static void draw_ebones(View3D *v3d, RegionView3D *rv3d, Object *ob, int dt)
if (arm->flag & ARM_DRAWNAMES) {
VecMidf(vec, eBone->head, eBone->tail);
glRasterPos3fv(vec);
- BMF_DrawString(G.font, " ");
- BMF_DrawString(G.font, eBone->name);
+ view3d_object_text_draw_add(vec[0], vec[1], vec[2], eBone->name, 10);
}
/* Draw additional axes */
if (arm->flag & ARM_DRAWAXES) {
@@ -2155,15 +2151,13 @@ static void draw_pose_paths(Scene *scene, View3D *v3d, RegionView3D *rv3d, Objec
/* only draw framenum if several consecutive highlighted points don't occur on same point */
if (a == 0) {
- glRasterPos3fv(fp);
sprintf(str, " %d\n", (a+sfra));
- BMF_DrawString(G.font, str);
+ view3d_object_text_draw_add(fp[0], fp[1], fp[2], str, 0);
}
else if ((a > stepsize) && (a < len-stepsize)) {
if ((VecEqual(fp, fp-(stepsize*3))==0) || (VecEqual(fp, fp+(stepsize*3))==0)) {
- glRasterPos3fv(fp);
sprintf(str, " %d\n", (a+sfra));
- BMF_DrawString(G.font, str);
+ view3d_object_text_draw_add(fp[0], fp[1], fp[2], str, 0);
}
}
}
@@ -2205,9 +2199,8 @@ static void draw_pose_paths(Scene *scene, View3D *v3d, RegionView3D *rv3d, Objec
if (ak->cfra == (a+sfra)) {
char str[32];
- glRasterPos3fv(fp);
sprintf(str, " %d\n", (a+sfra));
- BMF_DrawString(G.font, str);
+ view3d_object_text_draw_add(fp[0], fp[1], fp[2], str, 0);
}
}
}
diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c
index c22d159b405..12e20728c62 100644
--- a/source/blender/editors/space_view3d/drawobject.c
+++ b/source/blender/editors/space_view3d/drawobject.c
@@ -34,8 +34,6 @@
#include "MEM_guardedalloc.h"
-#include "BMF_Api.h"
-
#include "IMB_imbuf.h"
@@ -99,8 +97,9 @@
#include "GPU_material.h"
#include "GPU_extensions.h"
-#include "ED_particle.h"
#include "ED_mesh.h"
+#include "ED_particle.h"
+#include "ED_screen.h"
#include "ED_types.h"
#include "ED_util.h"
@@ -108,6 +107,7 @@
#include "UI_interface_icons.h"
#include "WM_api.h"
+#include "BLF_api.h"
#include "view3d_intern.h" // own include
@@ -135,6 +135,74 @@ static void drawcircle_size(float size);
static void draw_empty_sphere(float size);
static void draw_empty_cone(float size);
+
+/* ************* only use while object drawing ************** */
+static void view3d_project_short_clip(ARegion *ar, float *vec, short *adr)
+{
+ RegionView3D *rv3d= ar->regiondata;
+ float fx, fy, vec4[4];
+
+ adr[0]= IS_CLIPPED;
+
+ /* clipplanes in eye space */
+ if(rv3d->rflag & RV3D_CLIPPING) {
+ VECCOPY(vec4, vec);
+ Mat4MulVecfl(rv3d->viewmatob, vec4);
+ if(view3d_test_clipping(rv3d, vec4))
+ return;
+ }
+
+ VECCOPY(vec4, vec);
+ vec4[3]= 1.0;
+
+ Mat4MulVec4fl(rv3d->persmatob, vec4);
+
+ /* clipplanes in window space */
+ if( vec4[3]>BL_NEAR_CLIP ) { /* is the NEAR clipping cutoff for picking */
+ fx= (ar->winx/2)*(1 + vec4[0]/vec4[3]);
+
+ if( fx>0 && fx<ar->winx) {
+
+ fy= (ar->winy/2)*(1 + vec4[1]/vec4[3]);
+
+ if(fy>0.0 && fy< (float)ar->winy) {
+ adr[0]= (short)floor(fx);
+ adr[1]= (short)floor(fy);
+ }
+ }
+ }
+}
+
+/* only use while object drawing */
+static void view3d_project_short_noclip(ARegion *ar, float *vec, short *adr)
+{
+ RegionView3D *rv3d= ar->regiondata;
+ float fx, fy, vec4[4];
+
+ adr[0]= IS_CLIPPED;
+
+ VECCOPY(vec4, vec);
+ vec4[3]= 1.0;
+
+ Mat4MulVec4fl(rv3d->persmatob, vec4);
+
+ if( vec4[3]>BL_NEAR_CLIP ) { /* is the NEAR clipping cutoff for picking */
+ fx= (ar->winx/2)*(1 + vec4[0]/vec4[3]);
+
+ if( fx>-32700 && fx<32700) {
+
+ fy= (ar->winy/2)*(1 + vec4[1]/vec4[3]);
+
+ if(fy>-32700.0 && fy<32700.0) {
+ adr[0]= (short)floor(fx);
+ adr[1]= (short)floor(fy);
+ }
+ }
+ }
+}
+
+/* ************************ */
+
/* check for glsl drawing */
int draw_glsl_material(Scene *scene, Object *ob, View3D *v3d, int dt)
@@ -362,16 +430,15 @@ void drawaxes(float size, int flag, char drawtype)
glEnd();
v2[axis]+= size*0.125;
- glRasterPos3fv(v2);
// patch for 3d cards crashing on glSelect for text drawing (IBM)
if((flag & DRAW_PICKING) == 0) {
if (axis==0)
- BMF_DrawString(G.font, "x");
+ view3d_object_text_draw_add(v2[0], v2[1], v2[2], "x", 0);
else if (axis==1)
- BMF_DrawString(G.font, "y");
+ view3d_object_text_draw_add(v2[0], v2[1], v2[2], "y", 0);
else
- BMF_DrawString(G.font, "z");
+ view3d_object_text_draw_add(v2[0], v2[1], v2[2], "z", 0);
}
}
break;
@@ -429,6 +496,75 @@ static void drawcentercircle(View3D *v3d, RegionView3D *rv3d, float *vec, int se
if(v3d->zbuf) glDepthFunc(GL_LEQUAL);
}
+/* *********** text drawing for object ************* */
+static ListBase strings= {NULL, NULL};
+
+typedef struct ViewObjectString {
+ struct ViewObjectString *next, *prev;
+ float vec[3], col[4];
+ char str[128];
+ short mval[2];
+ short xoffs;
+} ViewObjectString;
+
+
+void view3d_object_text_draw_add(float x, float y, float z, char *str, short xoffs)
+{
+ ViewObjectString *vos= MEM_callocN(sizeof(ViewObjectString), "ViewObjectString");
+
+ BLI_addtail(&strings, vos);
+ BLI_strncpy(vos->str, str, 128);
+ vos->vec[0]= x;
+ vos->vec[1]= y;
+ vos->vec[2]= z;
+ glGetFloatv(GL_CURRENT_COLOR, vos->col);
+ vos->xoffs= xoffs;
+}
+
+static void view3d_object_text_draw(View3D *v3d, ARegion *ar)
+{
+ ViewObjectString *vos;
+ int tot= 0;
+
+ /* project first and test */
+ for(vos= strings.first; vos; vos= vos->next) {
+ view3d_project_short_clip(ar, vos->vec, vos->mval);
+ if(vos->mval[0]!=IS_CLIPPED)
+ tot++;
+ }
+
+ if(tot) {
+ RegionView3D *rv3d= ar->regiondata;
+ int a;
+
+ if(rv3d->rflag & RV3D_CLIPPING)
+ for(a=0; a<6; a++)
+ glDisable(GL_CLIP_PLANE0+a);
+
+ wmPushMatrix();
+ ED_region_pixelspace(ar);
+
+ if(v3d->zbuf) glDisable(GL_DEPTH_TEST);
+
+ for(vos= strings.first; vos; vos= vos->next) {
+ if(vos->mval[0]!=IS_CLIPPED) {
+ glColor3fv(vos->col);
+ BLF_draw_default((float)vos->mval[0]+vos->xoffs, (float)vos->mval[1], 0.0, vos->str);
+ }
+ }
+
+ if(v3d->zbuf) glEnable(GL_DEPTH_TEST);
+
+ wmPopMatrix();
+
+ if(rv3d->rflag & RV3D_CLIPPING)
+ for(a=0; a<6; a++)
+ glEnable(GL_CLIP_PLANE0+a);
+ }
+
+ if(strings.first)
+ BLI_freelistN(&strings);
+}
void drawsolidcube(float size)
{
@@ -1096,15 +1232,12 @@ void lattice_foreachScreenVert(ViewContext *vc, void (*func)(void *userData, BPo
BPoint *bp = lt->editlatt->def;
DispList *dl = find_displist(&obedit->disp, DL_VERTS);
float *co = dl?dl->verts:NULL;
- float pmat[4][4], vmat[4][4];
int i, N = lt->editlatt->pntsu*lt->editlatt->pntsv*lt->editlatt->pntsw;
short s[2] = {IS_CLIPPED, 0};
- view3d_get_object_project_mat(vc->rv3d, vc->obedit, pmat, vmat);
-
for (i=0; i<N; i++, bp++, co+=3) {
if (bp->hide==0) {
- view3d_project_short_clip(vc->ar, dl?co:bp->vec, s, pmat, vmat);
+ view3d_project_short_clip(vc->ar, dl?co:bp->vec, s);
if (s[0] != IS_CLIPPED)
func(userData, bp, s[0], s[1]);
}
@@ -1205,9 +1338,9 @@ static void mesh_foreachScreenVert__mapFunc(void *userData, int index, float *co
short s[2]= {IS_CLIPPED, 0};
if (data->clipVerts) {
- view3d_project_short_clip(data->vc.ar, co, s, data->pmat, data->vmat);
+ view3d_project_short_clip(data->vc.ar, co, s);
} else {
- view3d_project_short_noclip(data->vc.ar, co, s, data->pmat);
+ view3d_project_short_noclip(data->vc.ar, co, s);
}
if (s[0]!=IS_CLIPPED)
@@ -1225,8 +1358,6 @@ void mesh_foreachScreenVert(ViewContext *vc, void (*func)(void *userData, BMVert
data.userData = userData;
data.clipVerts = clipVerts;
- view3d_get_object_project_mat(vc->rv3d, vc->obedit, data.pmat, data.vmat);
-
EDBM_init_index_arrays(vc->em, 1, 0, 0);
dm->foreachMappedVert(dm, mesh_foreachScreenVert__mapFunc, &data);
EDBM_free_index_arrays(vc->em);
@@ -1242,11 +1373,11 @@ static void mesh_foreachScreenEdge__mapFunc(void *userData, int index, float *v0
if (!BM_TestHFlag(eed, BM_HIDDEN)) {
if (data->clipVerts==1) {
- view3d_project_short_clip(data->vc.ar, v0co, s[0], data->pmat, data->vmat);
- view3d_project_short_clip(data->vc.ar, v1co, s[1], data->pmat, data->vmat);
+ view3d_project_short_clip(data->vc.ar, v0co, s[0]);
+ view3d_project_short_clip(data->vc.ar, v1co, s[1]);
} else {
- view3d_project_short_noclip(data->vc.ar, v0co, s[0], data->pmat);
- view3d_project_short_noclip(data->vc.ar, v1co, s[1], data->pmat);
+ view3d_project_short_noclip(data->vc.ar, v0co, s[0]);
+ view3d_project_short_noclip(data->vc.ar, v1co, s[1]);
if (data->clipVerts==2) {
if (!(s[0][0]>=0 && s[0][1]>= 0 && s[0][0]<data->vc.ar->winx && s[0][1]<data->vc.ar->winy))
@@ -1269,8 +1400,6 @@ void mesh_foreachScreenEdge(ViewContext *vc, void (*func)(void *userData, BMEdge
data.userData = userData;
data.clipVerts = clipVerts;
- view3d_get_object_project_mat(vc->rv3d, vc->obedit, data.pmat, data.vmat);
-
EDBM_init_index_arrays(vc->em, 0, 1, 0);
dm->foreachMappedEdge(dm, mesh_foreachScreenEdge__mapFunc, &data);
EDBM_free_index_arrays(vc->em);
@@ -1285,7 +1414,7 @@ static void mesh_foreachScreenFace__mapFunc(void *userData, int index, float *ce
short s[2];
if (efa && !BM_TestHFlag(efa, BM_HIDDEN)) {
- view3d_project_short_clip(data->vc.ar, cent, s, data->pmat, data->vmat);
+ view3d_project_short_clip(data->vc.ar, cent, s);
data->func(data->userData, efa, s[0], s[1], index);
}
@@ -1300,8 +1429,6 @@ void mesh_foreachScreenFace(ViewContext *vc, void (*func)(void *userData, BMFace
data.func = func;
data.userData = userData;
- view3d_get_object_project_mat(vc->rv3d, vc->obedit, data.pmat, data.vmat);
-
EDBM_init_index_arrays(vc->em, 0, 0, 1);
dm->foreachMappedFaceCenter(dm, mesh_foreachScreenFace__mapFunc, &data);
EDBM_free_index_arrays(vc->em);
@@ -1312,13 +1439,10 @@ void mesh_foreachScreenFace(ViewContext *vc, void (*func)(void *userData, BMFace
void nurbs_foreachScreenVert(ViewContext *vc, void (*func)(void *userData, Nurb *nu, BPoint *bp, BezTriple *bezt, int beztindex, int x, int y), void *userData)
{
Curve *cu= vc->obedit->data;
- float pmat[4][4], vmat[4][4];
short s[2] = {IS_CLIPPED, 0};
Nurb *nu;
int i;
- view3d_get_object_project_mat(vc->rv3d, vc->obedit, pmat, vmat);
-
for (nu= cu->editnurb->first; nu; nu=nu->next) {
if((nu->type & 7)==CU_BEZIER) {
for (i=0; i<nu->pntsu; i++) {
@@ -1326,17 +1450,17 @@ void nurbs_foreachScreenVert(ViewContext *vc, void (*func)(void *userData, Nurb
if(bezt->hide==0) {
if (G.f & G_HIDDENHANDLES) {
- view3d_project_short_clip(vc->ar, bezt->vec[1], s, pmat, vmat);
+ view3d_project_short_clip(vc->ar, bezt->vec[1], s);
if (s[0] != IS_CLIPPED)
func(userData, nu, NULL, bezt, 1, s[0], s[1]);
} else {
- view3d_project_short_clip(vc->ar, bezt->vec[0], s, pmat, vmat);
+ view3d_project_short_clip(vc->ar, bezt->vec[0], s);
if (s[0] != IS_CLIPPED)
func(userData, nu, NULL, bezt, 0, s[0], s[1]);
- view3d_project_short_clip(vc->ar, bezt->vec[1], s, pmat, vmat);
+ view3d_project_short_clip(vc->ar, bezt->vec[1], s);
if (s[0] != IS_CLIPPED)
func(userData, nu, NULL, bezt, 1, s[0], s[1]);
- view3d_project_short_clip(vc->ar, bezt->vec[2], s, pmat, vmat);
+ view3d_project_short_clip(vc->ar, bezt->vec[2], s);
if (s[0] != IS_CLIPPED)
func(userData, nu, NULL, bezt, 2, s[0], s[1]);
}
@@ -1348,7 +1472,7 @@ void nurbs_foreachScreenVert(ViewContext *vc, void (*func)(void *userData, Nurb
BPoint *bp = &nu->bp[i];
if(bp->hide==0) {
- view3d_project_short_clip(vc->ar, bp->vec, s, pmat, vmat);
+ view3d_project_short_clip(vc->ar, bp->vec, s);
if (s[0] != IS_CLIPPED)
func(userData, nu, bp, NULL, -1, s[0], s[1]);
}
@@ -1806,7 +1930,7 @@ static void draw_em_measure_stats(View3D *v3d, RegionView3D *rv3d,
Mesh *me= ob->data;
EditEdge *eed;
EditFace *efa;
- float v1[3], v2[3], v3[3], v4[3];
+ float v1[3], v2[3], v3[3], v4[3], x, y, z;
float fvec[3];
char val[32]; /* Stores the measurement display text here */
char conv_float[5]; /* Use a float conversion matching the grid size */
@@ -1846,7 +1970,9 @@ static void draw_em_measure_stats(View3D *v3d, RegionView3D *rv3d,
VECCOPY(v1, eed->v1->co);
VECCOPY(v2, eed->v2->co);
- glRasterPos3f( 0.5*(v1[0]+v2[0]), 0.5*(v1[1]+v2[1]), 0.5*(v1[2]+v2[2]));
+ x= 0.5*(v1[0]+v2[0]);
+ y= 0.5*(v1[1]+v2[1]);
+ z= 0.5*(v1[2]+v2[2]);
if(v3d->flag & V3D_GLOBAL_STATS) {
Mat4MulVecfl(ob->obmat, v1);
@@ -1854,7 +1980,7 @@ static void draw_em_measure_stats(View3D *v3d, RegionView3D *rv3d,
}
sprintf(val, conv_float, VecLenf(v1, v2));
- BMF_DrawString( G.fonts, val);
+ view3d_object_text_draw_add(x, y, z, val, 0);
}
}
}
@@ -1889,8 +2015,7 @@ static void draw_em_measure_stats(View3D *v3d, RegionView3D *rv3d,
area = AreaT3Dfl(v1, v2, v3);
sprintf(val, conv_float, area);
- glRasterPos3fv(efa->cent);
- BMF_DrawString( G.fonts, val);
+ view3d_object_text_draw_add(efa->cent[0], efa->cent[1], efa->cent[2], val, 0);
}
}
}
@@ -1932,15 +2057,13 @@ static void draw_em_measure_stats(View3D *v3d, RegionView3D *rv3d,
/* Vec 1 */
sprintf(val,"%.3f", VecAngle3(v4, v1, v2));
VecLerpf(fvec, efa->cent, efa->v1->co, 0.8);
- glRasterPos3fv(fvec);
- BMF_DrawString( G.fonts, val);
+ view3d_object_text_draw_add(efa->cent[0], efa->cent[1], efa->cent[2], val, 0);
}
if( (e1->f & e2->f & SELECT) || (G.moving && (efa->v2->f & SELECT)) ) {
/* Vec 2 */
sprintf(val,"%.3f", VecAngle3(v1, v2, v3));
VecLerpf(fvec, efa->cent, efa->v2->co, 0.8);
- glRasterPos3fv(fvec);
- BMF_DrawString( G.fonts, val);
+ view3d_object_text_draw_add(fvec[0], fvec[1], fvec[2], val, 0);
}
if( (e2->f & e3->f & SELECT) || (G.moving && (efa->v3->f & SELECT)) ) {
/* Vec 3 */
@@ -1949,16 +2072,14 @@ static void draw_em_measure_stats(View3D *v3d, RegionView3D *rv3d,
else
sprintf(val,"%.3f", VecAngle3(v2, v3, v1));
VecLerpf(fvec, efa->cent, efa->v3->co, 0.8);
- glRasterPos3fv(fvec);
- BMF_DrawString( G.fonts, val);
+ view3d_object_text_draw_add(fvec[0], fvec[1], fvec[2], val, 0);
}
/* Vec 4 */
if(efa->v4) {
if( (e3->f & e4->f & SELECT) || (G.moving && (efa->v4->f & SELECT)) ) {
sprintf(val,"%.3f", VecAngle3(v3, v4, v1));
VecLerpf(fvec, efa->cent, efa->v4->co, 0.8);
- glRasterPos3fv(fvec);
- BMF_DrawString( G.fonts, val);
+ view3d_object_text_draw_add(fvec[0], fvec[1], fvec[2], val, 0);
}
}
}
@@ -2191,7 +2312,7 @@ static void draw_mesh_fancy(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base
Object *ob= base->object;
Mesh *me = ob->data;
Material *ma= give_current_material(ob, 1);
- int hasHaloMat = (ma && (ma->mode&MA_HALO));
+ int hasHaloMat = (ma && (ma->material_type == MA_TYPE_HALO));
int draw_wire = 0;
int totvert, totedge, totface;
DispList *dl;
@@ -2863,16 +2984,14 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
ParticleSettings *part;
ParticleData *pars, *pa;
ParticleKey state, *states=0;
- ParticleCacheKey *cache=0;
+ ParticleBillboardData bb;
Material *ma;
- Object *bb_ob=0;
- float vel[3], vec[3], vec2[3], imat[4][4], onevec[3]={0.0f,0.0f,0.0f}, bb_center[3];
+ float vel[3], vec[3], vec2[3], imat[4][4], bb_center[3];
float timestep, pixsize=1.0, pa_size, pa_time, r_tilt;
float cfra= bsystem_time(scene, ob,(float)CFRA,0.0);
float *vdata=0, *vedata=0, *cdata=0, *ndata=0, *vd=0, *ved=0, *cd=0, *nd=0, xvec[3], yvec[3], zvec[3];
float ma_r=0.0f, ma_g=0.0f, ma_b=0.0f;
- int a, k, k_max=0, totpart, totpoint=0, draw_as, path_nbr=0;
- int path_possible=0, keys_possible=0, draw_keys=0, totchild=0;
+ int a, totpart, totpoint=0, draw_as, totchild=0;
int select=ob->flag&SELECT, create_cdata=0;
GLint polygonmode[2];
char val[32];
@@ -2959,18 +3078,9 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
if(part->flag&PART_GLOB_TIME)
cfra=bsystem_time(scene, 0, (float)CFRA, 0.0f);
- if(psys->pathcache){
- path_possible=1;
- keys_possible=1;
- }
- if(draw_as==PART_DRAW_PATH && path_possible==0)
+ if(draw_as==PART_DRAW_PATH && psys->pathcache==NULL)
draw_as=PART_DRAW_DOT;
- if(draw_as!=PART_DRAW_PATH && keys_possible && part->draw&PART_DRAW_KEYS){
- path_nbr=part->keys_step;
- draw_keys=1;
- }
-
/* 3. */
switch(draw_as){
case PART_DRAW_DOT:
@@ -3019,12 +3129,15 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
glPointSize(2.0); /* default dot size */
}
else if(part->bb_ob)
- bb_ob=part->bb_ob;
+ bb.ob=part->bb_ob;
else
- bb_ob=v3d->camera;
+ bb.ob=v3d->camera;
- if(part->bb_align<PART_BB_VIEW)
- onevec[part->bb_align]=1.0f;
+ bb.align = part->bb_align;
+ bb.anim = part->bb_anim;
+ bb.lock = part->draw & PART_DRAW_BB_LOCK;
+ bb.offset[0] = part->bb_offset[0];
+ bb.offset[1] = part->bb_offset[1];
break;
case PART_DRAW_PATH:
break;
@@ -3036,35 +3149,37 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
}
/* 4. */
- if(draw_as && draw_as!=PART_DRAW_PATH){
- if(draw_as!=PART_DRAW_CIRC){
- switch(draw_as){
+ if(draw_as && draw_as!=PART_DRAW_PATH) {
+ int tot_vec_size = (totpart + totchild) * 3 * sizeof(float);
+
+ if(draw_as!=PART_DRAW_CIRC) {
+ switch(draw_as) {
case PART_DRAW_AXIS:
case PART_DRAW_CROSS:
- if(draw_as!=PART_DRAW_CROSS || create_cdata)
- cdata=MEM_callocN((totpart+totchild)*(path_nbr+1)*6*3*sizeof(float), "particle_cdata");
- vdata=MEM_callocN((totpart+totchild)*(path_nbr+1)*6*3*sizeof(float), "particle_vdata");
+ if(draw_as != PART_DRAW_CROSS || create_cdata)
+ cdata = MEM_callocN(tot_vec_size * 6, "particle_cdata");
+ vdata = MEM_callocN(tot_vec_size * 6, "particle_vdata");
break;
case PART_DRAW_LINE:
if(create_cdata)
- cdata=MEM_callocN((totpart+totchild)*(path_nbr+1)*2*3*sizeof(float), "particle_cdata");
- vdata=MEM_callocN((totpart+totchild)*(path_nbr+1)*2*3*sizeof(float), "particle_vdata");
+ cdata = MEM_callocN(tot_vec_size * 2, "particle_cdata");
+ vdata = MEM_callocN(tot_vec_size * 2, "particle_vdata");
break;
case PART_DRAW_BB:
if(create_cdata)
- cdata=MEM_callocN((totpart+totchild)*(path_nbr+1)*4*3*sizeof(float), "particle_cdata");
- vdata=MEM_callocN((totpart+totchild)*(path_nbr+1)*4*3*sizeof(float), "particle_vdata");
- ndata=MEM_callocN((totpart+totchild)*(path_nbr+1)*4*3*sizeof(float), "particle_vdata");
+ cdata = MEM_callocN(tot_vec_size * 4, "particle_cdata");
+ vdata = MEM_callocN(tot_vec_size * 4, "particle_vdata");
+ ndata = MEM_callocN(tot_vec_size * 4, "particle_vdata");
break;
default:
if(create_cdata)
- cdata=MEM_callocN((totpart+totchild)*(path_nbr+1)*3*sizeof(float), "particle_cdata");
- vdata=MEM_callocN((totpart+totchild)*(path_nbr+1)*3*sizeof(float), "particle_vdata");
+ cdata=MEM_callocN(tot_vec_size, "particle_cdata");
+ vdata=MEM_callocN(tot_vec_size, "particle_vdata");
}
}
- if(part->draw&PART_DRAW_VEL && draw_as!=PART_DRAW_LINE)
- vedata=MEM_callocN((totpart+totchild)*2*3*(path_nbr+1)*sizeof(float), "particle_vedata");
+ if(part->draw & PART_DRAW_VEL && draw_as != PART_DRAW_LINE)
+ vedata = MEM_callocN(tot_vec_size * 2, "particle_vedata");
vd=vdata;
ved=vedata;
@@ -3077,6 +3192,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
if(draw_as){
/* 5. */
for(a=0,pa=pars; a<totpart+totchild; a++, pa++){
+ /* setup per particle individual stuff */
if(a<totpart){
if(totchild && (part->draw&PART_DRAW_PARENT)==0) continue;
if(pa->flag & PARS_NO_DISP || pa->flag & PARS_UNEXIST) continue;
@@ -3116,11 +3232,6 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
}
r_tilt=1.0f+pa->r_ave[0];
-
- if(path_nbr){
- cache=psys->pathcache[a];
- k_max=(int)(cache->steps);
- }
}
else{
ChildParticle *cpa= &psys->child[a-totpart];
@@ -3150,47 +3261,23 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
pa_size=psys_get_child_size(psys,cpa,cfra,0);
r_tilt=2.0f*cpa->rand[2];
- if(path_nbr){
- cache=psys->childcache[a-totpart];
- k_max=(int)(cache->steps);
- }
}
if(draw_as!=PART_DRAW_PATH){
- int next_pa=0;
- for(k=0; k<=path_nbr; k++){
- if(draw_keys){
- state.time=(float)k/(float)path_nbr;
- psys_get_particle_on_path(scene, ob, psys, a, &state,1);
- }
- else if(path_nbr){
- if(k<=k_max){
- VECCOPY(state.co,(cache+k)->co);
- VECCOPY(state.vel,(cache+k)->vel);
- QUATCOPY(state.rot,(cache+k)->rot);
- }
- else
- continue;
- }
- else{
- state.time=cfra;
- if(psys_get_particle_state(scene, ob, psys, a, &state,0)==0){
- next_pa=1;
- break;
- }
- }
-
+ state.time=cfra;
+ if(psys_get_particle_state(scene,ob,psys,a,&state,0)){
+ /* create actiual particle data */
switch(draw_as){
case PART_DRAW_DOT:
+ if(vd){
+ VECCOPY(vd,state.co) vd+=3;
+ }
if(cd) {
cd[0]=ma_r;
cd[1]=ma_g;
cd[2]=ma_b;
cd+=3;
}
- if(vd){
- VECCOPY(vd,state.co) vd+=3;
- }
break;
case PART_DRAW_CROSS:
case PART_DRAW_AXIS:
@@ -3273,59 +3360,15 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
cd[2]=cd[5]=cd[8]=cd[11]=ma_b;
cd+=12;
}
- if(part->draw&PART_DRAW_BB_LOCK && part->bb_align==PART_BB_VIEW){
- VECCOPY(xvec,bb_ob->obmat[0]);
- Normalize(xvec);
- VECCOPY(yvec,bb_ob->obmat[1]);
- Normalize(yvec);
- VECCOPY(zvec,bb_ob->obmat[2]);
- Normalize(zvec);
- }
- else if(part->bb_align==PART_BB_VEL){
- float temp[3];
- VECCOPY(temp,state.vel);
- Normalize(temp);
- VECSUB(zvec,bb_ob->obmat[3],state.co);
- if(part->draw&PART_DRAW_BB_LOCK){
- float fac=-Inpf(zvec,temp);
- VECADDFAC(zvec,zvec,temp,fac);
- }
- Normalize(zvec);
- Crossf(xvec,temp,zvec);
- Normalize(xvec);
- Crossf(yvec,zvec,xvec);
- }
- else{
- VECSUB(zvec,bb_ob->obmat[3],state.co);
- if(part->draw&PART_DRAW_BB_LOCK)
- zvec[part->bb_align]=0.0f;
- Normalize(zvec);
-
- if(part->bb_align<PART_BB_VIEW)
- Crossf(xvec,onevec,zvec);
- else
- Crossf(xvec,bb_ob->obmat[1],zvec);
- Normalize(xvec);
- Crossf(yvec,zvec,xvec);
- }
- VECCOPY(vec,xvec);
- VECCOPY(vec2,yvec);
-
- VecMulf(xvec,cos(part->bb_tilt*(1.0f-part->bb_rand_tilt*r_tilt)*(float)M_PI));
- VecMulf(vec2,sin(part->bb_tilt*(1.0f-part->bb_rand_tilt*r_tilt)*(float)M_PI));
- VECADD(xvec,xvec,vec2);
-
- VecMulf(yvec,cos(part->bb_tilt*(1.0f-part->bb_rand_tilt*r_tilt)*(float)M_PI));
- VecMulf(vec,-sin(part->bb_tilt*(1.0f-part->bb_rand_tilt*r_tilt)*(float)M_PI));
- VECADD(yvec,yvec,vec);
-
- VecMulf(xvec,pa_size);
- VecMulf(yvec,pa_size);
-
- VECADDFAC(bb_center,state.co,xvec,part->bb_offset[0]);
- VECADDFAC(bb_center,bb_center,yvec,part->bb_offset[1]);
+ bb.size = pa_size;
+ bb.tilt = part->bb_tilt * (1.0f - part->bb_rand_tilt * r_tilt);
+ bb.time = pa_time;
+ VECCOPY(bb.vec, state.co);
+ VECCOPY(bb.vel, state.vel);
+ psys_make_billboard(&bb, xvec, yvec, zvec, bb_center);
+
VECADD(vd,bb_center,xvec);
VECADD(vd,vd,yvec); vd+=3;
@@ -3345,6 +3388,10 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
break;
}
+ totpoint++;
+
+ /* additional things to draw for each particle */
+ /* (velocity, size and number) */
if(vedata){
VECCOPY(ved,state.co);
ved+=3;
@@ -3360,15 +3407,11 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
setlinestyle(0);
}
- totpoint++;
- }
- if(next_pa)
- continue;
- if(part->draw&PART_DRAW_NUM && !(G.f & G_RENDER_SHADOW)){
- /* in path drawing state.co is the end point */
- glRasterPos3f(state.co[0], state.co[1], state.co[2]);
- sprintf(val," %i",a);
- BMF_DrawString(G.font, val);
+ if(part->draw&PART_DRAW_NUM && !(G.f & G_RENDER_SHADOW)){
+ /* in path drawing state.co is the end point */
+ sprintf(val," %i",a);
+ view3d_object_text_draw_add(state.co[0], state.co[1], state.co[2], val, 0);
+ }
}
}
}
@@ -3377,51 +3420,39 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
glGetIntegerv(GL_POLYGON_MODE, polygonmode);
glDisableClientState(GL_NORMAL_ARRAY);
- if(draw_as != PART_DRAW_CIRC){
- if(draw_as==PART_DRAW_PATH){
- ParticleCacheKey **cache, *path;
- float *cd2=0,*cdata2=0;
+ if(draw_as==PART_DRAW_PATH){
+ ParticleCacheKey **cache, *path;
+ float *cd2=0,*cdata2=0;
- glEnableClientState(GL_VERTEX_ARRAY);
-
- if(dt > OB_WIRE) {
- glEnableClientState(GL_NORMAL_ARRAY);
-
- if(part->draw&PART_DRAW_MAT_COL)
- glEnableClientState(GL_COLOR_ARRAY);
+ glEnableClientState(GL_VERTEX_ARRAY);
- glEnable(GL_LIGHTING);
- glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE);
- glEnable(GL_COLOR_MATERIAL);
- }
- else {
- glDisableClientState(GL_NORMAL_ARRAY);
+ /* setup gl flags */
+ if(dt > OB_WIRE) {
+ glEnableClientState(GL_NORMAL_ARRAY);
- glDisable(GL_COLOR_MATERIAL);
- glDisable(GL_LIGHTING);
- UI_ThemeColor(TH_WIRE);
- }
+ if(part->draw&PART_DRAW_MAT_COL)
+ glEnableClientState(GL_COLOR_ARRAY);
- if(totchild && (part->draw&PART_DRAW_PARENT)==0)
- totpart=0;
+ glEnable(GL_LIGHTING);
+ glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE);
+ glEnable(GL_COLOR_MATERIAL);
+ }
+ else {
+ glDisableClientState(GL_NORMAL_ARRAY);
- cache=psys->pathcache;
- for(a=0, pa=psys->particles; a<totpart; a++, pa++){
- path=cache[a];
- glVertexPointer(3, GL_FLOAT, sizeof(ParticleCacheKey), path->co);
+ glDisable(GL_COLOR_MATERIAL);
+ glDisable(GL_LIGHTING);
+ UI_ThemeColor(TH_WIRE);
+ }
- if(dt > OB_WIRE) {
- glNormalPointer(GL_FLOAT, sizeof(ParticleCacheKey), path->vel);
- if(part->draw&PART_DRAW_MAT_COL)
- glColorPointer(3, GL_FLOAT, sizeof(ParticleCacheKey), path->col);
- }
+ if(totchild && (part->draw&PART_DRAW_PARENT)==0)
+ totpart=0;
- glDrawArrays(GL_LINE_STRIP, 0, path->steps + 1);
- }
-
- cache=psys->childcache;
- for(a=0; a<totchild; a++){
- path=cache[a];
+ /* draw actual/parent particles */
+ cache=psys->pathcache;
+ for(a=0, pa=psys->particles; a<totpart; a++, pa++){
+ path=cache[a];
+ if(path->steps > 0) {
glVertexPointer(3, GL_FLOAT, sizeof(ParticleCacheKey), path->co);
if(dt > OB_WIRE) {
@@ -3432,68 +3463,85 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
glDrawArrays(GL_LINE_STRIP, 0, path->steps + 1);
}
+ }
+
+ /* draw child particles */
+ cache=psys->childcache;
+ for(a=0; a<totchild; a++){
+ path=cache[a];
+ glVertexPointer(3, GL_FLOAT, sizeof(ParticleCacheKey), path->co);
if(dt > OB_WIRE) {
+ glNormalPointer(GL_FLOAT, sizeof(ParticleCacheKey), path->vel);
if(part->draw&PART_DRAW_MAT_COL)
- glDisable(GL_COLOR_ARRAY);
- glDisable(GL_COLOR_MATERIAL);
+ glColorPointer(3, GL_FLOAT, sizeof(ParticleCacheKey), path->col);
}
- if(cdata2)
- MEM_freeN(cdata2);
- cd2=cdata2=0;
+ glDrawArrays(GL_LINE_STRIP, 0, path->steps + 1);
+ }
- glLineWidth(1.0f);
- /* draw particle edit mode key points*/
+ /* restore & clean up */
+ if(dt > OB_WIRE) {
+ if(part->draw&PART_DRAW_MAT_COL)
+ glDisable(GL_COLOR_ARRAY);
+ glDisable(GL_COLOR_MATERIAL);
}
- if(draw_as!=PART_DRAW_PATH){
- glDisableClientState(GL_COLOR_ARRAY);
+ if(cdata2)
+ MEM_freeN(cdata2);
+ cd2=cdata2=0;
- if(vdata){
- glEnableClientState(GL_VERTEX_ARRAY);
- glVertexPointer(3, GL_FLOAT, 0, vdata);
- }
- else
- glDisableClientState(GL_VERTEX_ARRAY);
+ glLineWidth(1.0f);
+ }
+ else if(draw_as!=PART_DRAW_CIRC){
+ glDisableClientState(GL_COLOR_ARRAY);
- if(ndata && dt>OB_WIRE){
- glEnableClientState(GL_NORMAL_ARRAY);
- glNormalPointer(GL_FLOAT, 0, ndata);
- glEnable(GL_LIGHTING);
- }
- else{
- glDisableClientState(GL_NORMAL_ARRAY);
- glDisable(GL_LIGHTING);
- }
+ /* setup created data arrays */
+ if(vdata){
+ glEnableClientState(GL_VERTEX_ARRAY);
+ glVertexPointer(3, GL_FLOAT, 0, vdata);
+ }
+ else
+ glDisableClientState(GL_VERTEX_ARRAY);
- if(cdata){
- glEnableClientState(GL_COLOR_ARRAY);
- glColorPointer(3, GL_FLOAT, 0, cdata);
- }
+ if(ndata && dt>OB_WIRE){
+ glEnableClientState(GL_NORMAL_ARRAY);
+ glNormalPointer(GL_FLOAT, 0, ndata);
+ glEnable(GL_LIGHTING);
+ }
+ else{
+ glDisableClientState(GL_NORMAL_ARRAY);
+ glDisable(GL_LIGHTING);
+ }
- switch(draw_as){
- case PART_DRAW_AXIS:
- case PART_DRAW_CROSS:
- glDrawArrays(GL_LINES, 0, 6*totpoint);
- break;
- case PART_DRAW_LINE:
- glDrawArrays(GL_LINES, 0, 2*totpoint);
- break;
- case PART_DRAW_BB:
- if(dt<=OB_WIRE)
- glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);
-
- glDrawArrays(GL_QUADS, 0, 4*totpoint);
- break;
- default:
- glDrawArrays(GL_POINTS, 0, totpoint);
- break;
- }
+ if(cdata){
+ glEnableClientState(GL_COLOR_ARRAY);
+ glColorPointer(3, GL_FLOAT, 0, cdata);
}
+
+ /* draw created data arrays */
+ switch(draw_as){
+ case PART_DRAW_AXIS:
+ case PART_DRAW_CROSS:
+ glDrawArrays(GL_LINES, 0, 6*totpoint);
+ break;
+ case PART_DRAW_LINE:
+ glDrawArrays(GL_LINES, 0, 2*totpoint);
+ break;
+ case PART_DRAW_BB:
+ if(dt<=OB_WIRE)
+ glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);
+
+ glDrawArrays(GL_QUADS, 0, 4*totpoint);
+ break;
+ default:
+ glDrawArrays(GL_POINTS, 0, totpoint);
+ break;
+ }
}
+
if(vedata){
glDisableClientState(GL_COLOR_ARRAY);
cpack(0xC0C0C0);
@@ -3677,9 +3725,8 @@ static void draw_particle_edit(Scene *scene, View3D *v3d, RegionView3D *rv3d, Ob
for(k=0, key=edit->keys[i]+k; k<pa->totkey; k++, key++){
if(key->flag & PEK_HIDE) continue;
- glRasterPos3fv(key->world_co);
sprintf(val," %.1f",*key->time);
- BMF_DrawString(G.font, val);
+ view3d_object_text_draw_add(key->world_co[0], key->world_co[1], key->world_co[2], val, 0);
}
}
}
@@ -3701,9 +3748,8 @@ static void draw_particle_edit(Scene *scene, View3D *v3d, RegionView3D *rv3d, Ob
glEnd();
if((pset->flag & PE_SHOW_TIME) && !(G.f & G_RENDER_SHADOW)){
- glRasterPos3fv(key->world_co);
sprintf(val," %.1f",*key->time);
- BMF_DrawString(G.font, val);
+ view3d_object_text_draw_add(key->world_co[0], key->world_co[1], key->world_co[2], val, 0);
}
}
}
@@ -3736,7 +3782,7 @@ static void tekenhandlesN(Nurb *nu, short sel)
glBegin(GL_LINES);
- if( (nu->type & 7)==1) {
+ if( (nu->type & 7)==CU_BEZIER) {
if(sel) col= nurbcol+4;
else col= nurbcol;
@@ -3793,7 +3839,7 @@ static void tekenvertsN(Nurb *nu, short sel)
bglBegin(GL_POINTS);
- if((nu->type & 7)==1) {
+ if((nu->type & 7)==CU_BEZIER) {
bezt= nu->bezt;
a= nu->pntsu;
@@ -4716,25 +4762,24 @@ void drawRBpivot(bRigidBodyJointConstraint *data)
glLineWidth (4.0f);
setlinestyle(2);
for (axis=0; axis<3; axis++) {
- float dir[3] = {0,0,0};
- float v[3]= {data->pivX, data->pivY, data->pivZ};
+ float dir[3] = {0,0,0};
+ float v[3]= {data->pivX, data->pivY, data->pivZ};
- dir[axis] = 1.f;
- glBegin(GL_LINES);
- Mat4MulVecfl(mat,dir);
- v[0] += dir[0];
- v[1] += dir[1];
- v[2] += dir[2];
- glVertex3fv(v1);
- glVertex3fv(v);
- glEnd();
- glRasterPos3fv(v);
- if (axis==0)
- BMF_DrawString(G.font, "px");
- else if (axis==1)
- BMF_DrawString(G.font, "py");
- else
- BMF_DrawString(G.font, "pz");
+ dir[axis] = 1.f;
+ glBegin(GL_LINES);
+ Mat4MulVecfl(mat,dir);
+ v[0] += dir[0];
+ v[1] += dir[1];
+ v[2] += dir[2];
+ glVertex3fv(v1);
+ glVertex3fv(v);
+ glEnd();
+ if (axis==0)
+ view3d_object_text_draw_add(v[0], v[1], v[2], "px", 0);
+ else if (axis==1)
+ view3d_object_text_draw_add(v[0], v[1], v[2], "py", 0);
+ else
+ view3d_object_text_draw_add(v[0], v[1], v[2], "pz", 0);
}
glLineWidth (1.0f);
setlinestyle(0);
@@ -4769,7 +4814,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
/* don't do xray in particle mode, need the z-buffer */
if(!(G.f & G_PARTICLEEDIT)) {
/* xray and transp are set when it is drawing the 2nd/3rd pass */
- if(!v3d->xray && !v3d->transp && (ob->dtx & OB_DRAWXRAY)) {
+ if(!v3d->xray && !v3d->transp && (ob->dtx & OB_DRAWXRAY) && !(ob->dtx & OB_DRAWTRANSP)) {
add_view3d_after(v3d, base, V3D_XRAY, flag);
return;
}
@@ -4855,7 +4900,11 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
/* patch? children objects with a timeoffs change the parents. How to solve! */
/* if( ((int)ob->ctime) != F_(scene->r.cfra)) where_is_object(scene, ob); */
+ /* multiply view with object matrix */
wmMultMatrix(ob->obmat);
+ /* local viewmat and persmat, to calculate projections */
+ wmGetMatrix(rv3d->viewmatob);
+ wmGetSingleMatrix(rv3d->persmatob);
/* which wire color */
if((flag & DRAW_CONSTCOLOR) == 0) {
@@ -5153,12 +5202,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
/* patch for several 3d cards (IBM mostly) that crash on glSelect with text drawing */
/* but, we also dont draw names for sets or duplicators */
if(flag == 0) {
- if(v3d->zbuf) glDisable(GL_DEPTH_TEST);
- glRasterPos3f(0.0, 0.0, 0.0);
-
- BMF_DrawString(G.font, " ");
- BMF_DrawString(G.font, ob->id.name+2);
- if(v3d->zbuf) glEnable(GL_DEPTH_TEST);
+ view3d_object_text_draw_add(0.0f, 0.0f, 0.0f, ob->id.name+2, 10);
}
}
/*if(dtx & OB_DRAWIMAGE) drawDispListwire(&ob->disp);*/
@@ -5179,6 +5223,9 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
setlinestyle(0);
}
}
+
+ /* return warning, this is cached text draw */
+ view3d_object_text_draw(v3d, ar);
wmLoadMatrix(rv3d->viewmat);
@@ -5238,7 +5285,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
char col[4], col2[4];
UI_GetThemeColor3ubv(TH_GRID, col);
- make_axis_color(col, col2, 'z');
+ UI_make_axis_color(col, col2, 'z');
glColor3ubv((GLubyte *)col2);
cob= constraints_make_evalob(scene, ob, NULL, CONSTRAINT_OBTYPE_OBJECT);
diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c
index b7682225fe3..3b3fd5109cf 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -88,7 +88,34 @@ ARegion *view3d_has_buttons_region(ScrArea *sa)
BLI_insertlinkafter(&sa->regionbase, ar, arnew);
arnew->regiontype= RGN_TYPE_UI;
- arnew->alignment= RGN_ALIGN_LEFT;
+ arnew->alignment= RGN_ALIGN_RIGHT;
+
+ arnew->flag = RGN_FLAG_HIDDEN;
+
+ return arnew;
+}
+
+ARegion *view3d_has_tools_region(ScrArea *sa)
+{
+ ARegion *ar, *arnew;
+
+ for(ar= sa->regionbase.first; ar; ar= ar->next)
+ if(ar->regiontype==RGN_TYPE_TOOLS)
+ return ar;
+
+ /* add subdiv level; after header */
+ for(ar= sa->regionbase.first; ar; ar= ar->next)
+ if(ar->regiontype==RGN_TYPE_HEADER)
+ break;
+
+ /* is error! */
+ if(ar==NULL) return NULL;
+
+ arnew= MEM_callocN(sizeof(ARegion), "tools for view3d");
+
+ BLI_insertlinkafter(&sa->regionbase, ar, arnew);
+ arnew->regiontype= RGN_TYPE_TOOLS;
+ arnew->alignment= RGN_OVERLAP_LEFT;
arnew->flag = RGN_FLAG_HIDDEN;
@@ -96,6 +123,7 @@ ARegion *view3d_has_buttons_region(ScrArea *sa)
}
+
/* ******************** default callbacks for view3d space ***************** */
static SpaceLink *view3d_new(const bContext *C)
@@ -155,7 +183,6 @@ static SpaceLink *view3d_new(const bContext *C)
rv3d->persp= 1;
rv3d->view= 7;
rv3d->dist= 10.0;
- Mat4One(rv3d->twmat);
return (SpaceLink *)v3d;
}
@@ -460,32 +487,16 @@ static void view3d_header_area_listener(ARegion *ar, wmNotifier *wmn)
static void view3d_buttons_area_init(wmWindowManager *wm, ARegion *ar)
{
ListBase *keymap;
+
+ ED_region_panels_init(wm, ar);
- keymap= WM_keymap_listbase(wm, "View2D Buttons List", 0, 0);
- WM_event_add_keymap_handler(&ar->handlers, keymap);
keymap= WM_keymap_listbase(wm, "View3D Generic", SPACE_VIEW3D, 0);
WM_event_add_keymap_handler(&ar->handlers, keymap);
-
- UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_LIST_UI, ar->winx, ar->winy);
}
static void view3d_buttons_area_draw(const bContext *C, ARegion *ar)
{
- float col[3];
-
- /* clear */
- UI_GetThemeColor3fv(TH_HEADER, col);
-
- glClearColor(col[0], col[1], col[2], 0.0);
- glClear(GL_COLOR_BUFFER_BIT);
-
- /* set view2d view matrix for scrolling (without scrollers) */
- UI_view2d_view_ortho(C, &ar->v2d);
-
- view3d_buttons_area_defbuts(C, ar);
-
- /* restore view matrix? */
- UI_view2d_view_restore(C);
+ ED_region_panels(C, ar, 1, NULL);
}
static void view3d_buttons_area_listener(ARegion *ar, wmNotifier *wmn)
@@ -517,6 +528,22 @@ static void view3d_buttons_area_listener(ARegion *ar, wmNotifier *wmn)
}
}
+/* add handlers, stuff you only do once or on area/region changes */
+static void view3d_tools_area_init(wmWindowManager *wm, ARegion *ar)
+{
+ ListBase *keymap;
+
+ ED_region_panels_init(wm, ar);
+
+ keymap= WM_keymap_listbase(wm, "View3D Generic", SPACE_VIEW3D, 0);
+ WM_event_add_keymap_handler(&ar->handlers, keymap);
+}
+
+static void view3d_tools_area_draw(const bContext *C, ARegion *ar)
+{
+ ED_region_panels(C, ar, 1, NULL);
+}
+
/*
* Returns true if the Object is a from an external blend file (libdata)
*/
@@ -788,6 +815,21 @@ void ED_spacetype_view3d(void)
art->init= view3d_buttons_area_init;
art->draw= view3d_buttons_area_draw;
BLI_addhead(&st->regiontypes, art);
+
+ view3d_buttons_register(art);
+
+ /* regions: tool(bar) */
+ art= MEM_callocN(sizeof(ARegionType), "spacetype view3d region");
+ art->regionid = RGN_TYPE_TOOLS;
+ art->minsizex= 120; // XXX
+ art->minsizey= 50; // XXX
+ art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_FRAMES;
+ art->listener= view3d_buttons_area_listener;
+ art->init= view3d_tools_area_init;
+ art->draw= view3d_tools_area_draw;
+ BLI_addhead(&st->regiontypes, art);
+
+ view3d_toolbar_register(art);
/* regions: header */
art= MEM_callocN(sizeof(ARegionType), "spacetype view3d region");
diff --git a/source/blender/editors/space_view3d/view3d_buttons.c b/source/blender/editors/space_view3d/view3d_buttons.c
index 322dc61ecf5..4f3207f5cda 100644
--- a/source/blender/editors/space_view3d/view3d_buttons.c
+++ b/source/blender/editors/space_view3d/view3d_buttons.c
@@ -31,6 +31,7 @@
#include <math.h>
#include <float.h>
+#include "DNA_ID.h"
#include "DNA_action_types.h"
#include "DNA_armature_types.h"
#include "DNA_curve_types.h"
@@ -61,6 +62,9 @@
#include "BKE_curve.h"
#include "BKE_customdata.h"
#include "BKE_depsgraph.h"
+#include "BKE_idprop.h"
+#include "BKE_mesh.h"
+#include "BKE_tessmesh.h"
#include "BKE_object.h"
#include "BKE_global.h"
#include "BKE_scene.h"
@@ -162,31 +166,31 @@ static void v3d_editvertex_buts(const bContext *C, uiBlock *block, View3D *v3d,
if(ob->type==OB_MESH) {
Mesh *me= ob->data;
- EditMesh *em = EM_GetEditMesh(me);
- EditVert *eve, *evedef=NULL;
- EditEdge *eed;
+ BMEditMesh *em = me->edit_btmesh;
+ BMVert *eve, *evedef=NULL;
+ BMEdge *eed;
+ BMIter iter;
- eve= em->verts.first;
- while(eve) {
- if(eve->f & SELECT) {
+ eve = BMIter_New(&iter, em->bm, BM_VERTS_OF_MESH, NULL);
+ for ( ; eve; eve=BMIter_Step(&iter)) {
+ if(BM_TestHFlag(eve, BM_SELECT)) {
evedef= eve;
tot++;
VecAddf(median, median, eve->co);
}
- eve= eve->next;
}
- eed= em->edges.first;
- while(eed) {
- if((eed->f & SELECT)) {
+
+ eed = BMIter_New(&iter, em->bm, BM_EDGES_OF_MESH, NULL);
+ for ( ; eed; eed=BMIter_Step(&iter)) {
+ if(BM_TestHFlag(eed, BM_SELECT)) {
totedge++;
median[3]+= eed->crease;
}
- eed= eed->next;
}
/* check for defgroups */
if(evedef)
- dvert= CustomData_em_get(&em->vdata, evedef->data, CD_MDEFORMVERT);
+ dvert= CustomData_bmesh_get(&em->bm->vdata, evedef->data, CD_MDEFORMVERT);
if(tot==1 && dvert && dvert->totweight) {
bDeformGroup *dg;
int i, max=1, init=1;
@@ -210,8 +214,6 @@ static void v3d_editvertex_buts(const bContext *C, uiBlock *block, View3D *v3d,
tfp->defweightp= &dvert->dw[0].weight;
}
}
-
- EM_EndEditMesh(me, em);
}
else if(ob->type==OB_CURVE || ob->type==OB_SURF) {
Curve *cu= ob->data;
@@ -366,7 +368,7 @@ static void v3d_editvertex_buts(const bContext *C, uiBlock *block, View3D *v3d,
if(ob->type==OB_MESH) {
Mesh *me= ob->data;
- EditMesh *em = EM_GetEditMesh(me);
+ EditMesh *em = BKE_mesh_get_editmesh(me);
EditVert *eve;
EditEdge *eed;
@@ -392,7 +394,7 @@ static void v3d_editvertex_buts(const bContext *C, uiBlock *block, View3D *v3d,
recalc_editnormals(em);
- EM_EndEditMesh(me, em);
+ BKE_mesh_end_editmesh(me, em);
}
else if(ob->type==OB_CURVE || ob->type==OB_SURF) {
Curve *cu= ob->data;
@@ -403,7 +405,7 @@ static void v3d_editvertex_buts(const bContext *C, uiBlock *block, View3D *v3d,
nu= cu->editnurb->first;
while(nu) {
- if((nu->type & 7)==1) {
+ if((nu->type & 7)==CU_BEZIER) {
bezt= nu->bezt;
a= nu->pntsu;
while(a--) {
@@ -945,7 +947,7 @@ void selectTransformOrientation_func(bContext *C, void *target, void *unused)
BIF_selectTransformOrientation(C, (TransformOrientation *) target);
}
-static void view3d_panel_transform_spaces(const bContext *C, ARegion *ar, short cntrl)
+static void view3d_panel_transform_spaces(const bContext *C, Panel *pa)
{
Scene *scene= CTX_data_scene(C);
Object *obedit= CTX_data_edit_object(C);
@@ -954,13 +956,10 @@ static void view3d_panel_transform_spaces(const bContext *C, ARegion *ar, short
TransformOrientation *ts = transform_spaces->first;
uiBlock *block;
uiBut *but;
- int xco = 20, yco = 70, height = 140;
+ int xco = 20, yco = 70;
int index;
- block= uiBeginBlock(C, ar, "view3d_panel_transform", UI_EMBOSS, UI_HELV);
- if(uiNewPanel(C, ar, block, "Transform Orientations", "View3d", 1000, 0, 318, height)==0) return;
-
- uiNewPanelHeight(block, height);
+ block= uiLayoutFreeBlock(pa->layout);
uiBlockBeginAlign(block);
@@ -982,7 +981,6 @@ static void view3d_panel_transform_spaces(const bContext *C, ARegion *ar, short
for (index = V3D_MANIP_CUSTOM, ts = transform_spaces->first ; ts ; ts = ts->next, index++) {
- UI_ThemeColor(TH_BUT_ACTION);
if (v3d->twmode == index) {
but = uiDefIconButS(block,ROW, B_REDR, ICON_CHECKBOX_HLT, xco,yco,XIC,YIC, &v3d->twmode, 5.0, (float)index, 0, 0, "Use this Custom Transform Orientation");
}
@@ -998,9 +996,6 @@ static void view3d_panel_transform_spaces(const bContext *C, ARegion *ar, short
yco -= 25;
}
uiBlockEndAlign(block);
-
- if(yco < 0) uiNewPanelHeight(block, height-yco);
- uiEndBlock(C, block);
}
static void weight_paint_buttons(Scene *scene, uiBlock *block)
@@ -1102,19 +1097,23 @@ static void brush_idpoin_handle(bContext *C, ID *id, int event)
}
}
-static void view3d_panel_brush(const bContext *C, ARegion *ar, short cntrl)
+static int view3d_panel_brush_poll(const bContext *C, PanelType *pt)
+{
+ Brush **brp = current_brush_source(CTX_data_scene(C));
+
+ return ((G.f & (G_SCULPTMODE|G_TEXTUREPAINT|G_VERTEXPAINT|G_WEIGHTPAINT)) && brp);
+}
+
+static void view3d_panel_brush(const bContext *C, Panel *pa)
{
uiBlock *block;
Brush **brp = current_brush_source(CTX_data_scene(C)), *br;
short w = 268, h = 400, cx = 10, cy = h;
rctf rect;
- if(!brp)
- return;
br = *brp;
- block= uiBeginBlock(C, ar, "view3d_panel_brush", UI_EMBOSS, UI_HELV);
- if(uiNewPanel(C, ar, block, "Brush", "View3d", 340, 10, 318, h)==0) return;
+ block= uiLayoutFreeBlock(pa->layout);
uiBlockSetHandleFunc(block, do_view3d_region_buttons, NULL);
uiBlockBeginAlign(block);
@@ -1150,8 +1149,8 @@ static void view3d_panel_brush(const bContext *C, ARegion *ar, short cntrl)
uiBlockBeginAlign(block);
uiDefButBitS(block, TOG, BRUSH_AIRBRUSH, B_NOP, "Airbrush", cx,cy,w/3,19, &br->flag,0,0,0,0, "Brush makes changes without waiting for the mouse to move");
- uiDefButBitS(block, TOG, BRUSH_ANCHORED, B_NOP, "Rake", cx+w/3,cy,w/3,19, &br->flag,0,0,0,0, "");
- uiDefButBitS(block, TOG, BRUSH_RAKE, B_NOP, "Anchored", cx+w*2.0/3,cy,w/3,19, &br->flag,0,0,0,0, "");
+ uiDefButBitS(block, TOG, BRUSH_RAKE, B_NOP, "Rake", cx+w/3,cy,w/3,19, &br->flag,0,0,0,0, "");
+ uiDefButBitS(block, TOG, BRUSH_ANCHORED, B_NOP, "Anchored", cx+w*2.0/3,cy,w/3,19, &br->flag,0,0,0,0, "");
cy-= 20;
uiDefButBitS(block, TOG, BRUSH_SPACE, B_NOP, "Space", cx,cy,w/3,19, &br->flag,0,0,0,0, "");
uiDefButF(block,NUMSLI,B_NOP,"Spacing: ",cx+w/3,cy,w*2.0/3,19,&br->spacing,1.0,500,0,0,"");
@@ -1163,8 +1162,6 @@ static void view3d_panel_brush(const bContext *C, ARegion *ar, short cntrl)
uiBlockBeginAlign(block);
curvemap_buttons(block, br->curve, (char)0, B_NOP, 0, &rect);
uiBlockEndAlign(block);
-
- uiEndBlock(C, block);
}
static void sculptmode_draw_interface_tools(Scene *scene, uiBlock *block, unsigned short cx, unsigned short cy)
@@ -1202,12 +1199,12 @@ static void sculptmode_draw_interface_tools(Scene *scene, uiBlock *block, unsign
}
-static void view3d_panel_object(const bContext *C, ARegion *ar, short cntrl) // VIEW3D_HANDLER_OBJECT
+static void view3d_panel_object(const bContext *C, Panel *pa)
{
+ uiBlock *block;
Scene *scene= CTX_data_scene(C);
Object *obedit= CTX_data_edit_object(C);
View3D *v3d= CTX_wm_view3d(C);
- uiBlock *block;
uiBut *bt;
Object *ob= OBACT;
TransformProperties *tfp;
@@ -1221,19 +1218,8 @@ static void view3d_panel_object(const bContext *C, ARegion *ar, short cntrl) //
v3d->properties_storage= MEM_callocN(sizeof(TransformProperties), "TransformProperties");
tfp= v3d->properties_storage;
- block= uiBeginBlock(C, ar, "view3d_panel_object", UI_EMBOSS, UI_HELV);
+ block= uiLayoutFreeBlock(pa->layout);
uiBlockSetHandleFunc(block, do_view3d_region_buttons, NULL);
-
- if((G.f & G_SCULPTMODE) && !obedit) {
- if(!uiNewPanel(C, ar, block, "Transform Properties", "View3d", 10, 230, 318, 234))
- return;
- } else if(G.f & G_PARTICLEEDIT && !obedit){
- if(!uiNewPanel(C, ar, block, "Transform Properties", "View3d", 10, 230, 318, 234))
- return;
- } else {
- if(!uiNewPanel(C, ar, block, "Transform Properties", "View3d", 10, 230, 318, 204))
- return;
- }
// XXX uiSetButLock(object_is_libdata(ob), ERROR_LIBDATA_MESSAGE);
@@ -1268,24 +1254,24 @@ static void view3d_panel_object(const bContext *C, ARegion *ar, short cntrl) //
v3d_posearmature_buts(block, v3d, ob, lim);
}
else if(G.f & G_WEIGHTPAINT) {
- uiNewPanelTitle(block, "Weight Paint Properties");
+ BLI_strncpy(pa->drawname, "Weight Paint Properties", sizeof(pa->drawname));
weight_paint_buttons(scene, block);
}
else if(G.f & (G_VERTEXPAINT|G_TEXTUREPAINT)) {
static float hsv[3], old[3]; // used as temp mem for picker
Brush **br = current_brush_source(scene);
- uiNewPanelTitle(block, "Paint Properties");
+ BLI_strncpy(pa->drawname, "Paint Properties", sizeof(pa->drawname));
if(br && *br)
/* 'f' is for floating panel */
uiBlockPickerButtons(block, (*br)->rgb, hsv, old, hexcol, 'f', B_REDR);
}
else if(G.f & G_SCULPTMODE) {
- uiNewPanelTitle(block, "Sculpt Properties");
+ BLI_strncpy(pa->drawname, "Sculpt Properties", sizeof(pa->drawname));
sculptmode_draw_interface_tools(scene, block, 10, 150);
}
else if(G.f & G_PARTICLEEDIT){
- uiNewPanelTitle(block, "Particle Edit Properties");
+ BLI_strncpy(pa->drawname, "Particle Edit Properties", sizeof(pa->drawname));
// XXX particle_edit_buttons(block);
}
else {
@@ -1363,17 +1349,14 @@ static void view3d_panel_object(const bContext *C, ARegion *ar, short cntrl) //
uiBlockEndAlign(block);
}
}
-// XXX uiClearButLock();
- uiEndBlock(C, block);
}
-static void view3d_panel_background(const bContext *C, ARegion *ar, short cntrl) // VIEW3D_HANDLER_BACKGROUND
+static void view3d_panel_background(const bContext *C, Panel *pa)
{
View3D *v3d= CTX_wm_view3d(C);
uiBlock *block;
- block= uiBeginBlock(C, ar, "view3d_panel_background", UI_EMBOSS, UI_HELV);
- if(uiNewPanel(C, ar, block, "Background Image", "View3d", 340, 10, 318, 204)==0) return;
+ block= uiLayoutFreeBlock(pa->layout);
uiBlockSetHandleFunc(block, do_view3d_region_buttons, NULL);
if(v3d->flag & V3D_DISPBGPIC) {
@@ -1402,11 +1385,10 @@ static void view3d_panel_background(const bContext *C, ARegion *ar, short cntrl)
ED_image_uiblock_panel(C, block, &v3d->bgpic->ima, &v3d->bgpic->iuser, B_REDR, B_REDR);
uiBlockEndAlign(block);
}
- uiEndBlock(C, block);
}
-static void view3d_panel_properties(const bContext *C, ARegion *ar, short cntrl) // VIEW3D_HANDLER_SETTINGS
+static void view3d_panel_properties(const bContext *C, Panel *pa)
{
ScrArea *sa= CTX_wm_area(C);
ARegion *arlast;
@@ -1416,13 +1398,9 @@ static void view3d_panel_properties(const bContext *C, ARegion *ar, short cntrl)
uiBlock *block;
float *curs;
- block= uiBeginBlock(C, ar, "view3d_panel_properties", UI_EMBOSS, UI_HELV);
- if(uiNewPanel(C, ar, block, "View Properties", "View3d", 340, 30, 318, 254)==0) return;
+ block= uiLayoutFreeBlock(pa->layout);
uiBlockSetHandleFunc(block, do_view3d_region_buttons, NULL);
- /* to force height */
- uiNewPanelHeight(block, 264);
-
uiDefBut(block, LABEL, 1, "Grid:", 10, 220, 150, 19, NULL, 0.0, 0.0, 0, 0, "");
uiBlockBeginAlign(block);
uiDefButF(block, NUM, B_REDR, "Spacing:", 10, 200, 140, 19, &v3d->grid, 0.001, 100.0, 10, 0, "Set the distance between grid lines");
@@ -1496,8 +1474,6 @@ static void view3d_panel_properties(const bContext *C, ARegion *ar, short cntrl)
// uiDefButBitS(block, TOGN, ANIMFILTER_NOSKEY, B_REDR, "ShapeKey",235, -42, 75, 19, &v3d->keyflags, 0, 0, 0, 0, "Show keyframes for any available Shape Keys");
// }
uiBlockEndAlign(block);
-
- uiEndBlock(C, block);
}
#if 0
@@ -1507,7 +1483,7 @@ static void view3d_panel_preview(bContext *C, ARegion *ar, short cntrl) // VIEW3
View3D *v3d= sa->spacedata.first;
int ofsx, ofsy;
- block= uiBeginBlock(C, ar, "view3d_panel_preview", UI_EMBOSS, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_panel_preview", UI_EMBOSS);
uiPanelControl(UI_PNL_SOLID | UI_PNL_CLOSE | UI_PNL_SCALE | cntrl);
uiSetPanelHandler(VIEW3D_HANDLER_PREVIEW); // for close and esc
@@ -1526,13 +1502,12 @@ static void view3d_panel_preview(bContext *C, ARegion *ar, short cntrl) // VIEW3
}
#endif
-static void view3d_panel_gpencil(const bContext *C, ARegion *ar, short cntrl) // VIEW3D_HANDLER_GREASEPENCIL
+static void view3d_panel_gpencil(const bContext *C, Panel *pa)
{
View3D *v3d= CTX_wm_view3d(C);
uiBlock *block;
- block= uiBeginBlock(C, ar, "view3d_panel_gpencil", UI_EMBOSS, UI_HELV);
- if (uiNewPanel(C, ar, block, "Grease Pencil", "View3d", 100, 30, 318, 204)==0) return;
+ block= uiLayoutFreeBlock(pa->layout);
/* allocate memory for gpd if drawing enabled (this must be done first or else we crash) */
if (v3d->flag2 & V3D_DISPGP) {
@@ -1542,24 +1517,14 @@ static void view3d_panel_gpencil(const bContext *C, ARegion *ar, short cntrl) //
if (v3d->flag2 & V3D_DISPGP) {
// XXX bGPdata *gpd= v3d->gpd;
- short newheight;
-
- /* this is a variable height panel, newpanel doesnt force new size on existing panels */
- /* so first we make it default height */
- uiNewPanelHeight(block, 204);
/* draw button for showing gpencil settings and drawings */
uiDefButBitS(block, TOG, V3D_DISPGP, B_REDR, "Use Grease Pencil", 10, 225, 150, 20, &v3d->flag2, 0, 0, 0, 0, "Display freehand annotations overlay over this 3D View (draw using Shift-LMB)");
-
- /* extend the panel if the contents won't fit */
-// newheight= draw_gpencil_panel(block, gpd, ar);
- uiNewPanelHeight(block, newheight);
}
else {
uiDefButBitS(block, TOG, V3D_DISPGP, B_REDR, "Use Grease Pencil", 10, 225, 150, 20, &v3d->flag2, 0, 0, 0, 0, "Display freehand annotations overlay over this 3D View");
uiDefBut(block, LABEL, 1, " ", 160, 180, 150, 20, NULL, 0.0, 0.0, 0, 0, "");
}
- uiEndBlock(C, block);
}
static void delete_sketch_armature(bContext *C, void *arg1, void *arg2)
@@ -1577,148 +1542,228 @@ static void assign_template_sketch_armature(bContext *C, void *arg1, void *arg2)
int index = *(int*)arg1;
BIF_setTemplate(C, index);
}
-static void view3d_panel_bonesketch_spaces(const bContext *C, ARegion *ar, short cntrl)
+
+static int view3d_panel_bonesketch_spaces_poll(const bContext *C, PanelType *pt)
{
Object *obedit = CTX_data_edit_object(C);
+
+ /* replace with check call to sketching lib */
+ return (obedit && obedit->type == OB_ARMATURE);
+}
+static void view3d_panel_bonesketch_spaces(const bContext *C, Panel *pa)
+{
Scene *scene = CTX_data_scene(C);
static int template_index;
static char joint_label[128];
uiBlock *block;
uiBut *but;
char *bone_name;
- int yco = 130, height = 140;
+ int yco = 130;
int nb_joints;
+ static char subdiv_tooltip[4][64] = {
+ "Subdivide arcs based on a fixed number of bones",
+ "Subdivide arcs in bones of equal length",
+ "Subdivide arcs based on correlation",
+ "Retarget template to stroke"
+ };
- /* replace with check call to sketching lib */
- if (obedit && obedit->type == OB_ARMATURE)
- {
- static char subdiv_tooltip[4][64] = {
- "Subdivide arcs based on a fixed number of bones",
- "Subdivide arcs in bones of equal length",
- "Subdivide arcs based on correlation",
- "Retarget template to stroke"
- };
+
+ block= uiLayoutFreeBlock(pa->layout);
+ uiBlockSetHandleFunc(block, do_view3d_region_buttons, NULL);
-
- block= uiBeginBlock(C, ar, "view3d_panel_bonesketch_spaces", UI_EMBOSS, UI_HELV);
- if(uiNewPanel(C, ar, block, "Bone Sketching", "View3d", 340, 10, 318, height)==0) return;
- uiBlockSetHandleFunc(block, do_view3d_region_buttons, NULL);
+ uiBlockBeginAlign(block);
+
+ /* use real flag instead of 1 */
+ uiDefButBitC(block, TOG, BONE_SKETCHING, B_REDR, "Use Bone Sketching", 10, yco, 160, 20, &scene->toolsettings->bone_sketching, 0, 0, 0, 0, "Use sketching to create and edit bones");
+ uiDefButBitC(block, TOG, BONE_SKETCHING_ADJUST, B_REDR, "A", 170, yco, 20, 20, &scene->toolsettings->bone_sketching, 0, 0, 0, 0, "Adjust strokes by drawing near them");
+ uiDefButBitC(block, TOG, BONE_SKETCHING_QUICK, B_REDR, "Q", 190, yco, 20, 20, &scene->toolsettings->bone_sketching, 0, 0, 0, 0, "Automatically convert and delete on stroke end");
+ yco -= 20;
- uiNewPanelHeight(block, height);
+ but = uiDefBut(block, BUT, B_REDR, "Convert", 10,yco,100,20, 0, 0, 0, 0, 0, "Convert sketch to armature");
+ uiButSetFunc(but, convert_sketch_armature, NULL, NULL);
+
+ but = uiDefBut(block, BUT, B_REDR, "Delete", 110,yco,100,20, 0, 0, 0, 0, 0, "Delete sketch");
+ uiButSetFunc(but, delete_sketch_armature, NULL, NULL);
+ yco -= 20;
+
+ uiBlockEndAlign(block);
+
+ uiBlockBeginAlign(block);
+ uiDefButC(block, MENU, B_REDR, "Subdivision Method%t|Length%x1|Adaptative%x2|Fixed%x0|Template%x3", 10,yco,60,19, &scene->toolsettings->bone_sketching_convert, 0, 0, 0, 0, subdiv_tooltip[(unsigned char)scene->toolsettings->bone_sketching_convert]);
+
+ switch(scene->toolsettings->bone_sketching_convert)
+ {
+ case SK_CONVERT_CUT_LENGTH:
+ uiDefButF(block, NUM, B_REDR, "Lim:", 70, yco, 140, 19, &scene->toolsettings->skgen_length_limit,0.1,50.0, 10, 0, "Maximum length of the subdivided bones");
+ yco -= 20;
+ break;
+ case SK_CONVERT_CUT_ADAPTATIVE:
+ uiDefButF(block, NUM, B_REDR, "Thres:", 70, yco, 140, 19, &scene->toolsettings->skgen_correlation_limit,0.0, 1.0, 0.01, 0, "Correlation threshold for subdivision");
+ yco -= 20;
+ break;
+ default:
+ case SK_CONVERT_CUT_FIXED:
+ uiDefButC(block, NUM, B_REDR, "Num:", 70, yco, 140, 19, &scene->toolsettings->skgen_subdivision_number,1, 100, 1, 5, "Number of subdivided bones");
+ yco -= 20;
+ break;
+ case SK_CONVERT_RETARGET:
+ uiDefButC(block, ROW, B_NOP, "No", 70, yco, 40,19, &scene->toolsettings->skgen_retarget_roll, 0, 0, 0, 0, "No special roll treatment");
+ uiDefButC(block, ROW, B_NOP, "View", 110, yco, 50,19, &scene->toolsettings->skgen_retarget_roll, 0, SK_RETARGET_ROLL_VIEW, 0, 0, "Roll bones perpendicular to view");
+ uiDefButC(block, ROW, B_NOP, "Joint", 160, yco, 50,19, &scene->toolsettings->skgen_retarget_roll, 0, SK_RETARGET_ROLL_JOINT, 0, 0, "Roll bones relative to joint bend");
+ yco -= 30;
+
+ uiBlockEndAlign(block);
+
uiBlockBeginAlign(block);
+ /* button here to select what to do (copy or not), template, ...*/
+
+ BIF_makeListTemplates(C);
+ template_index = BIF_currentTemplate(C);
+
+ but = uiDefButI(block, MENU, B_REDR, BIF_listTemplates(C), 10,yco,200,19, &template_index, 0, 0, 0, 0, "Template");
+ uiButSetFunc(but, assign_template_sketch_armature, &template_index, NULL);
- /* use real flag instead of 1 */
- uiDefButBitC(block, TOG, BONE_SKETCHING, B_REDR, "Use Bone Sketching", 10, yco, 160, 20, &scene->toolsettings->bone_sketching, 0, 0, 0, 0, "Use sketching to create and edit bones");
- uiDefButBitC(block, TOG, BONE_SKETCHING_ADJUST, B_REDR, "A", 170, yco, 20, 20, &scene->toolsettings->bone_sketching, 0, 0, 0, 0, "Adjust strokes by drawing near them");
- uiDefButBitC(block, TOG, BONE_SKETCHING_QUICK, B_REDR, "Q", 190, yco, 20, 20, &scene->toolsettings->bone_sketching, 0, 0, 0, 0, "Automatically convert and delete on stroke end");
yco -= 20;
- but = uiDefBut(block, BUT, B_REDR, "Convert", 10,yco,100,20, 0, 0, 0, 0, 0, "Convert sketch to armature");
- uiButSetFunc(but, convert_sketch_armature, NULL, NULL);
-
- but = uiDefBut(block, BUT, B_REDR, "Delete", 110,yco,100,20, 0, 0, 0, 0, 0, "Delete sketch");
- uiButSetFunc(but, delete_sketch_armature, NULL, NULL);
+ uiDefButF(block, NUM, B_NOP, "A:", 10, yco, 66,19, &scene->toolsettings->skgen_retarget_angle_weight, 0, 10, 1, 0, "Angle Weight");
+ uiDefButF(block, NUM, B_NOP, "L:", 76, yco, 67,19, &scene->toolsettings->skgen_retarget_length_weight, 0, 10, 1, 0, "Length Weight");
+ uiDefButF(block, NUM, B_NOP, "D:", 143,yco, 67,19, &scene->toolsettings->skgen_retarget_distance_weight, 0, 10, 1, 0, "Distance Weight");
yco -= 20;
- uiBlockEndAlign(block);
+ uiDefBut(block, TEX,B_REDR,"S:", 10, yco, 90, 20, scene->toolsettings->skgen_side_string, 0.0, 8.0, 0, 0, "Text to replace &S with");
+ uiDefBut(block, TEX,B_REDR,"N:", 100, yco, 90, 20, scene->toolsettings->skgen_num_string, 0.0, 8.0, 0, 0, "Text to replace &N with");
+ uiDefIconButBitC(block, TOG, SK_RETARGET_AUTONAME, B_NOP, ICON_AUTO,190,yco,20,20, &scene->toolsettings->skgen_retarget_options, 0, 0, 0, 0, "Use Auto Naming");
+ yco -= 20;
- uiBlockBeginAlign(block);
+ /* auto renaming magic */
+ uiBlockEndAlign(block);
- uiDefButC(block, MENU, B_REDR, "Subdivision Method%t|Length%x1|Adaptative%x2|Fixed%x0|Template%x3", 10,yco,60,19, &scene->toolsettings->bone_sketching_convert, 0, 0, 0, 0, subdiv_tooltip[(unsigned char)scene->toolsettings->bone_sketching_convert]);
+ nb_joints = BIF_nbJointsTemplate(C);
- switch(scene->toolsettings->bone_sketching_convert)
+ if (nb_joints == -1)
{
- case SK_CONVERT_CUT_LENGTH:
- uiDefButF(block, NUM, B_REDR, "Lim:", 70, yco, 140, 19, &scene->toolsettings->skgen_length_limit,0.1,50.0, 10, 0, "Maximum length of the subdivided bones");
- yco -= 20;
- break;
- case SK_CONVERT_CUT_ADAPTATIVE:
- uiDefButF(block, NUM, B_REDR, "Thres:", 70, yco, 140, 19, &scene->toolsettings->skgen_correlation_limit,0.0, 1.0, 0.01, 0, "Correlation threshold for subdivision");
- yco -= 20;
- break;
- default:
- case SK_CONVERT_CUT_FIXED:
- uiDefButC(block, NUM, B_REDR, "Num:", 70, yco, 140, 19, &scene->toolsettings->skgen_subdivision_number,1, 100, 1, 5, "Number of subdivided bones");
- yco -= 20;
- break;
- case SK_CONVERT_RETARGET:
- uiDefButC(block, ROW, B_NOP, "No", 70, yco, 40,19, &scene->toolsettings->skgen_retarget_roll, 0, 0, 0, 0, "No special roll treatment");
- uiDefButC(block, ROW, B_NOP, "View", 110, yco, 50,19, &scene->toolsettings->skgen_retarget_roll, 0, SK_RETARGET_ROLL_VIEW, 0, 0, "Roll bones perpendicular to view");
- uiDefButC(block, ROW, B_NOP, "Joint", 160, yco, 50,19, &scene->toolsettings->skgen_retarget_roll, 0, SK_RETARGET_ROLL_JOINT, 0, 0, "Roll bones relative to joint bend");
- yco -= 30;
+ //XXX
+ //nb_joints = G.totvertsel;
+ }
+
+ bone_name = BIF_nameBoneTemplate(C);
+
+ BLI_snprintf(joint_label, 32, "%i joints: %s", nb_joints, bone_name);
+
+ uiDefBut(block, LABEL, 1, joint_label, 10, yco, 200, 20, NULL, 0.0, 0.0, 0, 0, "");
+ yco -= 20;
+ break;
+ }
- uiBlockEndAlign(block);
+ uiBlockEndAlign(block);
+
+ uiDefButBitS(block, TOG, SCE_SNAP_PEEL_OBJECT, B_NOP, "Peel Objects", 10, yco, 200, 20, &scene->snap_flag, 0, 0, 0, 0, "Peel whole objects as one");
+}
- uiBlockBeginAlign(block);
- /* button here to select what to do (copy or not), template, ...*/
- BIF_makeListTemplates(C);
- template_index = BIF_currentTemplate(C);
-
- but = uiDefButI(block, MENU, B_REDR, BIF_listTemplates(C), 10,yco,200,19, &template_index, 0, 0, 0, 0, "Template");
- uiButSetFunc(but, assign_template_sketch_armature, &template_index, NULL);
-
- yco -= 20;
-
- uiDefButF(block, NUM, B_NOP, "A:", 10, yco, 66,19, &scene->toolsettings->skgen_retarget_angle_weight, 0, 10, 1, 0, "Angle Weight");
- uiDefButF(block, NUM, B_NOP, "L:", 76, yco, 67,19, &scene->toolsettings->skgen_retarget_length_weight, 0, 10, 1, 0, "Length Weight");
- uiDefButF(block, NUM, B_NOP, "D:", 143,yco, 67,19, &scene->toolsettings->skgen_retarget_distance_weight, 0, 10, 1, 0, "Distance Weight");
- yco -= 20;
-
- uiDefBut(block, TEX,B_REDR,"S:", 10, yco, 90, 20, scene->toolsettings->skgen_side_string, 0.0, 8.0, 0, 0, "Text to replace &S with");
- uiDefBut(block, TEX,B_REDR,"N:", 100, yco, 90, 20, scene->toolsettings->skgen_num_string, 0.0, 8.0, 0, 0, "Text to replace &N with");
- uiDefIconButBitC(block, TOG, SK_RETARGET_AUTONAME, B_NOP, ICON_AUTO,190,yco,20,20, &scene->toolsettings->skgen_retarget_options, 0, 0, 0, 0, "Use Auto Naming");
- yco -= 20;
-
- /* auto renaming magic */
- uiBlockEndAlign(block);
-
- nb_joints = BIF_nbJointsTemplate(C);
+/* op->invoke */
+static void redo_cb(bContext *C, void *arg_op, void *arg2)
+{
+ wmOperator *lastop= arg_op;
- if (nb_joints == -1)
- {
- //XXX
- //nb_joints = G.totvertsel;
- }
-
- bone_name = BIF_nameBoneTemplate(C);
-
- BLI_snprintf(joint_label, 32, "%i joints: %s", nb_joints, bone_name);
-
- uiDefBut(block, LABEL, 1, joint_label, 10, yco, 200, 20, NULL, 0.0, 0.0, 0, 0, "");
- yco -= 20;
- break;
- }
-
- uiBlockEndAlign(block);
+ if(lastop) {
+ int retval;
- uiDefButBitS(block, TOG, SCE_SNAP_PEEL_OBJECT, B_NOP, "Peel Objects", 10, yco, 200, 20, &scene->snap_flag, 0, 0, 0, 0, "Peel whole objects as one");
-
- if(yco < 0) uiNewPanelHeight(block, height-yco);
+ printf("operator redo %s\n", lastop->type->name);
+ ED_undo_pop(C);
+ retval= WM_operator_repeat(C, lastop);
+ if((retval & OPERATOR_FINISHED)==0) {
+ printf("operator redo failed %s\n", lastop->type->name);
+ ED_undo_redo(C);
+ }
}
}
-void view3d_buttons_area_defbuts(const bContext *C, ARegion *ar)
+static void view3d_panel_operator_redo(const bContext *C, Panel *pa)
{
+ wmWindowManager *wm= CTX_wm_manager(C);
+ wmOperator *op;
+ PointerRNA ptr;
+ uiBlock *block;
- view3d_panel_object(C, ar, 0);
- view3d_panel_properties(C, ar, 0);
- view3d_panel_background(C, ar, 0);
- if(G.f & (G_SCULPTMODE|G_TEXTUREPAINT|G_VERTEXPAINT|G_WEIGHTPAINT))
- view3d_panel_brush(C, ar, 0);
- // XXX view3d_panel_preview(C, ar, 0);
- view3d_panel_transform_spaces(C, ar, 0);
- if(0)
- view3d_panel_gpencil(C, ar, 0);
+ block= uiLayoutBlock(pa->layout);
+
+ /* only for operators that are registered and did an undo push */
+ for(op= wm->operators.last; op; op= op->prev)
+ if((op->type->flag & OPTYPE_REGISTER) && (op->type->flag & OPTYPE_UNDO))
+ break;
+
+ if(op==NULL)
+ return;
- view3d_panel_bonesketch_spaces(C, ar, 0);
+ uiBlockSetFunc(block, redo_cb, op, NULL);
- uiDrawPanels(C, 1); /* 1 = align */
- uiMatchPanelsView2d(ar); /* sets v2d->totrct */
+ if(!op->properties) {
+ IDPropertyTemplate val = {0};
+ op->properties= IDP_New(IDP_GROUP, val, "wmOperatorProperties");
+ }
+ RNA_pointer_create(&wm->id, op->type->srna, op->properties, &ptr);
+ uiDefAutoButsRNA(C, pa->layout, &ptr);
}
+void view3d_buttons_register(ARegionType *art)
+{
+ PanelType *pt;
+
+ pt= MEM_callocN(sizeof(PanelType), "spacetype view3d panel object");
+ strcpy(pt->idname, "VIEW3D_PT_object");
+ strcpy(pt->label, "Transform Properties");
+ pt->draw= view3d_panel_object;
+ BLI_addtail(&art->paneltypes, pt);
+
+ pt= MEM_callocN(sizeof(PanelType), "spacetype view3d panel properties");
+ strcpy(pt->idname, "VIEW3D_PT_properties");
+ strcpy(pt->label, "View Properties");
+ pt->draw= view3d_panel_properties;
+ BLI_addtail(&art->paneltypes, pt);
+
+ pt= MEM_callocN(sizeof(PanelType), "spacetype view3d panel background");
+ strcpy(pt->idname, "VIEW3D_PT_background");
+ strcpy(pt->label, "Background Image");
+ pt->draw= view3d_panel_background;
+ BLI_addtail(&art->paneltypes, pt);
+
+ pt= MEM_callocN(sizeof(PanelType), "spacetype view3d panel brush");
+ strcpy(pt->idname, "VIEW3D_PT_brush");
+ strcpy(pt->label, "Brush");
+ pt->draw= view3d_panel_brush;
+ pt->poll= view3d_panel_brush_poll;
+ BLI_addtail(&art->paneltypes, pt);
+
+ pt= MEM_callocN(sizeof(PanelType), "spacetype view3d panel transform spaces");
+ strcpy(pt->idname, "VIEW3D_PT_transform spaces");
+ strcpy(pt->label, "Transform Orientations");
+ pt->draw= view3d_panel_transform_spaces;
+ BLI_addtail(&art->paneltypes, pt);
+
+ /*pt= MEM_callocN(sizeof(PanelType), "spacetype view3d panel gpencil");
+ strcpy(pt->idname, "VIEW3D_PT_gpencil");
+ strcpy(pt->label, "Greas Pencil");
+ pt->draw= view3d_panel_gpencil;
+ BLI_addtail(&art->paneltypes, pt);*/
+
+ pt= MEM_callocN(sizeof(PanelType), "spacetype view3d panel bonesketch spaces");
+ strcpy(pt->idname, "VIEW3D_PT_bonesketch_spaces");
+ strcpy(pt->label, "Bone Sketching");
+ pt->draw= view3d_panel_bonesketch_spaces;
+ pt->poll= view3d_panel_bonesketch_spaces_poll;
+ BLI_addtail(&art->paneltypes, pt);
+
+ pt= MEM_callocN(sizeof(PanelType), "spacetype view3d panel redo");
+ strcpy(pt->idname, "VIEW3D_PT_redo");
+ strcpy(pt->label, "Last Operator");
+ pt->draw= view3d_panel_operator_redo;
+ BLI_addtail(&art->paneltypes, pt);
+
+ // XXX view3d_panel_preview(C, ar, 0);
+}
static int view3d_properties(bContext *C, wmOperator *op)
{
diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c
index 00843a58ba7..bbf0279692a 100644
--- a/source/blender/editors/space_view3d/view3d_draw.c
+++ b/source/blender/editors/space_view3d/view3d_draw.c
@@ -69,9 +69,9 @@
#include "BIF_gl.h"
#include "BIF_glutil.h"
-#include "BMF_Api.h"
#include "WM_api.h"
+#include "BLF_api.h"
#include "ED_armature.h"
#include "ED_keyframing.h"
@@ -232,27 +232,6 @@ static void drawgrid_draw(ARegion *ar, float wx, float wy, float x, float y, flo
}
-// not intern, called in editobject for constraint axis too
-void make_axis_color(char *col, char *col2, char axis)
-{
- if(axis=='x') {
- col2[0]= col[0]>219?255:col[0]+36;
- col2[1]= col[1]<26?0:col[1]-26;
- col2[2]= col[2]<26?0:col[2]-26;
- }
- else if(axis=='y') {
- col2[0]= col[0]<46?0:col[0]-36;
- col2[1]= col[1]>189?255:col[1]+66;
- col2[2]= col[2]<46?0:col[2]-36;
- }
- else {
- col2[0]= col[0]<26?0:col[0]-26;
- col2[1]= col[1]<26?0:col[1]-26;
- col2[2]= col[2]>209?255:col[2]+46;
- }
-
-}
-
static void drawgrid(ARegion *ar, View3D *v3d)
{
/* extern short bgpicmode; */
@@ -365,15 +344,15 @@ static void drawgrid(ARegion *ar, View3D *v3d)
/* center cross */
if( ELEM(rv3d->view, V3D_VIEW_RIGHT, V3D_VIEW_LEFT))
- make_axis_color(col, col2, 'y');
- else make_axis_color(col, col2, 'x');
+ UI_make_axis_color(col, col2, 'y');
+ else UI_make_axis_color(col, col2, 'x');
glColor3ubv((GLubyte *)col2);
fdrawline(0.0, y, (float)ar->winx, y);
if( ELEM(rv3d->view, V3D_VIEW_TOP, V3D_VIEW_BOTTOM))
- make_axis_color(col, col2, 'y');
- else make_axis_color(col, col2, 'z');
+ UI_make_axis_color(col, col2, 'y');
+ else UI_make_axis_color(col, col2, 'z');
glColor3ubv((GLubyte *)col2);
fdrawline(x, 0.0, x, (float)ar->winy);
@@ -412,7 +391,7 @@ static void drawfloor(Scene *scene, View3D *v3d)
if(a==0) {
/* check for the 'show Y axis' preference */
if (v3d->gridflag & V3D_SHOW_Y) {
- make_axis_color(col, col2, 'y');
+ UI_make_axis_color(col, col2, 'y');
glColor3ubv((GLubyte *)col2);
draw_line = 1;
@@ -451,7 +430,7 @@ static void drawfloor(Scene *scene, View3D *v3d)
if(a==0) {
/* check for the 'show X axis' preference */
if (v3d->gridflag & V3D_SHOW_X) {
- make_axis_color(col, col2, 'x');
+ UI_make_axis_color(col, col2, 'x');
glColor3ubv((GLubyte *)col2);
draw_line = 1;
@@ -488,7 +467,7 @@ static void drawfloor(Scene *scene, View3D *v3d)
/* draw the Z axis line */
/* check for the 'show Z axis' preference */
if (v3d->gridflag & V3D_SHOW_Z) {
- make_axis_color(col, col2, 'z');
+ UI_make_axis_color(col, col2, 'z');
glColor3ubv((GLubyte *)col2);
glBegin(GL_LINE_STRIP);
@@ -567,7 +546,7 @@ static void draw_view_axis(RegionView3D *rv3d)
vec[1] = vec[2] = 0;
QuatMulVecf(rv3d->viewquat, vec);
- make_axis_color((char *)gridcol, (char *)col, 'x');
+ UI_make_axis_color((char *)gridcol, (char *)col, 'x');
rgb_to_hsv(col[0]/255.0f, col[1]/255.0f, col[2]/255.0f, &h, &s, &v);
s = s<0.5 ? s+0.5 : 1.0;
v = 0.3;
@@ -579,8 +558,7 @@ static void draw_view_axis(RegionView3D *rv3d)
dy = vec[1] * k;
fdrawline(start, start + ydisp, start + dx, start + dy + ydisp);
if (fabs(dx) > toll || fabs(dy) > toll) {
- glRasterPos2i(start + dx + 2, start + dy + ydisp + 2);
- BMF_DrawString(G.fonts, "x");
+ BLF_draw_default(start + dx + 2, start + dy + ydisp + 2, 0.0f, "x");
}
/* Y */
@@ -588,7 +566,7 @@ static void draw_view_axis(RegionView3D *rv3d)
vec[0] = vec[2] = 0;
QuatMulVecf(rv3d->viewquat, vec);
- make_axis_color((char *)gridcol, (char *)col, 'y');
+ UI_make_axis_color((char *)gridcol, (char *)col, 'y');
rgb_to_hsv(col[0]/255.0f, col[1]/255.0f, col[2]/255.0f, &h, &s, &v);
s = s<0.5 ? s+0.5 : 1.0;
v = 0.3;
@@ -600,8 +578,7 @@ static void draw_view_axis(RegionView3D *rv3d)
dy = vec[1] * k;
fdrawline(start, start + ydisp, start + dx, start + dy + ydisp);
if (fabs(dx) > toll || fabs(dy) > toll) {
- glRasterPos2i(start + dx + 2, start + dy + ydisp + 2);
- BMF_DrawString(G.fonts, "y");
+ BLF_draw_default(start + dx + 2, start + dy + ydisp + 2, 0.0f, "y");
}
/* Z */
@@ -609,7 +586,7 @@ static void draw_view_axis(RegionView3D *rv3d)
vec[1] = vec[0] = 0;
QuatMulVecf(rv3d->viewquat, vec);
- make_axis_color((char *)gridcol, (char *)col, 'z');
+ UI_make_axis_color((char *)gridcol, (char *)col, 'z');
rgb_to_hsv(col[0]/255.0f, col[1]/255.0f, col[2]/255.0f, &h, &s, &v);
s = s<0.5 ? s+0.5 : 1.0;
v = 0.5;
@@ -621,8 +598,7 @@ static void draw_view_axis(RegionView3D *rv3d)
dy = vec[1] * k;
fdrawline(start, start + ydisp, start + dx, start + dy + ydisp);
if (fabs(dx) > toll || fabs(dy) > toll) {
- glRasterPos2i(start + dx + 2, start + dy + ydisp + 2);
- BMF_DrawString(G.fonts, "z");
+ BLF_draw_default(start + dx + 2, start + dy + ydisp + 2, 0.0f, "z");
}
/* restore line-width */
@@ -714,8 +690,7 @@ static void draw_viewport_name(ARegion *ar, View3D *v3d)
if (printable) {
UI_ThemeColor(TH_TEXT_HI);
- glRasterPos2i(10, ar->winy-20);
- BMF_DrawString(G.fonts, printable);
+ BLF_draw_default(10, ar->winy-20, 0.0f, printable);
}
if (v3d->localview) {
@@ -820,7 +795,7 @@ static void draw_selected_name(Scene *scene, Object *ob, View3D *v3d)
}
/* colour depends on whether there is a keyframe */
- if (id_frame_has_keyframe((ID *)ob, /*frame_to_float(scene, CFRA)*/(float)(CFRA), v3d->keyflags))
+ if (id_frame_has_keyframe((ID *)ob, /*frame_to_float(scene, CFRA)*/(float)(CFRA), v3d->keyflags))
UI_ThemeColor(TH_VERTEX_SELECT);
else
UI_ThemeColor(TH_TEXT_HI);
@@ -838,9 +813,8 @@ static void draw_selected_name(Scene *scene, Object *ob, View3D *v3d)
if (U.uiflag & USER_SHOW_ROTVIEWICON)
offset = 14 + (U.rvisize * 2);
-
- glRasterPos2i(offset, 10);
- BMF_DrawString(G.fonts, info);
+
+ BLF_draw_default(offset, 10, 0.0f, info);
}
static void view3d_get_viewborder_size(Scene *scene, ARegion *ar, float size_r[2])
@@ -1020,9 +994,7 @@ static void drawviewborder(Scene *scene, ARegion *ar, View3D *v3d)
/* camera name - draw in highlighted text color */
if (ca && (ca->flag & CAM_SHOWNAME)) {
UI_ThemeColor(TH_TEXT_HI);
- glRasterPos2f(x1, y1-15);
-
- BMF_DrawString(G.font, v3d->camera->id.name+2);
+ BLF_draw_default(x1, y1-15, 0.0f, v3d->camera->id.name+2);
UI_ThemeColor(TH_WIRE);
}
@@ -1858,8 +1830,10 @@ static CustomDataMask get_viewedit_datamask(bScreen *screen)
}
/* check if we need mcols due to vertex paint or weightpaint */
- if(G.f & G_VERTEXPAINT || G.f & G_WEIGHTPAINT)
+ if(G.f & G_VERTEXPAINT)
mask |= CD_MASK_MCOL;
+ if(G.f & G_WEIGHTPAINT)
+ mask |= CD_MASK_WEIGHT_MCOL;
if(G.f & G_SCULPTMODE)
mask |= CD_MASK_MDISPS;
diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c
index 20f24ba3958..63e8ae61124 100644
--- a/source/blender/editors/space_view3d/view3d_header.c
+++ b/source/blender/editors/space_view3d/view3d_header.c
@@ -93,8 +93,6 @@
#include "UI_resources.h"
#include "UI_view2d.h"
-#include "BMF_Api.h"
-
#include "view3d_intern.h"
@@ -357,7 +355,7 @@ static uiBlock *view3d_view_camerasmenu(bContext *C, ARegion *ar, void *arg_unus
int i=1;
char camname[48];
- block= uiBeginBlock(C, ar, "view3d_view_camerasmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_view_camerasmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_view_camerasmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Set Active Object as Active Camera|Ctrl NumPad 0", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
@@ -443,7 +441,7 @@ static uiBlock *view3d_view_cameracontrolsmenu(bContext *C, ARegion *ar, void *a
uiBlock *block;
short yco= 0, menuwidth=120;
- block= uiBeginBlock(C, ar, "view3d_view_cameracontrolsmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_view_cameracontrolsmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_view_cameracontrolsmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Camera Fly Mode|Shift F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 11, "");
@@ -534,7 +532,7 @@ static uiBlock *view3d_view_alignviewmenu(bContext *C, ARegion *ar, void *arg_un
Object *obedit = CTX_data_edit_object(C);
short yco= 0, menuwidth=120;
- block= uiBeginBlock(C, ar, "view3d_view_alignviewmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_view_alignviewmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_view_alignviewmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Center View to Cursor|C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, "");
@@ -621,82 +619,82 @@ static void do_view3d_viewmenu(bContext *C, void *arg, int event)
}
#endif
-static void view3d_view_viewnavmenu(bContext *C, uiMenuItem *head, void *arg_unused)
+static void view3d_view_viewnavmenu(bContext *C, uiLayout *layout, void *arg_unused)
{
-// uiMenuItemO(head, 0, "VIEW3D_OT_view_fly_mode");
+// uiItemO(layout, NULL, 0, "VIEW3D_OT_view_fly_mode");
-// uiMenuSeparator(head);
+// uiItemS(layout);
- uiMenuItemsEnumO(head, "VIEW3D_OT_view_orbit", "type");
+ uiItemsEnumO(layout, "VIEW3D_OT_view_orbit", "type");
- uiMenuSeparator(head);
+ uiItemS(layout);
- uiMenuItemsEnumO(head, "VIEW3D_OT_view_pan", "type");
+ uiItemsEnumO(layout, "VIEW3D_OT_view_pan", "type");
- uiMenuSeparator(head);
+ uiItemS(layout);
- uiMenuItemFloatO(head, "Zoom in", 0, "VIEW3D_OT_zoom", "delta", 1.0f);
- uiMenuItemFloatO(head, "Zoom out", 0, "VIEW3D_OT_zoom", "delta", -1.0f);
+ uiItemFloatO(layout, "Zoom in", 0, "VIEW3D_OT_zoom", "delta", 1.0f);
+ uiItemFloatO(layout, "Zoom out", 0, "VIEW3D_OT_zoom", "delta", -1.0f);
}
-static void view3d_view_alignviewmenu(bContext *C, uiMenuItem *head, void *arg_unused)
+static void view3d_view_alignviewmenu(bContext *C, uiLayout *layout, void *arg_unused)
{
}
-static void view3d_viewmenu(bContext *C, uiMenuItem *head, void *arg_unused)
+static void view3d_viewmenu(bContext *C, uiLayout *layout, void *arg_unused)
{
ScrArea *sa= CTX_wm_area(C);
-// uiMenuItemO(head, ICON_MENU_PANEL, "VIEW3D_OT_toggle_transform_orientations_panel"); // Transform Orientations...
-// uiMenuItemO(head, ICON_MENU_PANEL, "VIEW3D_OT_toggle_render_preview_panel"); // render preview...
-// uiMenuItemO(head, ICON_MENU_PANEL, "VIEW3D_OT_toggle_view_properties_panel"); // View Properties....
-// uiMenuItemO(head, ICON_MENU_PANEL, "VIEW3D_OT_toggle_background_image_panel"); // Background Image....
-// uiMenuItemO(head, ICON_MENU_PANEL, "VIEW3D_OT_toggle_grease_pencil_panel"); // Grease Pencil....
+// uiItemO(layout, ICON_MENU_PANEL, "VIEW3D_OT_toggle_transform_orientations_panel"); // Transform Orientations...
+// uiItemO(layout, ICON_MENU_PANEL, "VIEW3D_OT_toggle_render_preview_panel"); // render preview...
+// uiItemO(layout, ICON_MENU_PANEL, "VIEW3D_OT_toggle_view_properties_panel"); // View Properties....
+// uiItemO(layout, ICON_MENU_PANEL, "VIEW3D_OT_toggle_background_image_panel"); // Background Image....
+// uiItemO(layout, ICON_MENU_PANEL, "VIEW3D_OT_toggle_grease_pencil_panel"); // Grease Pencil....
-// uiMenuSeparator(head);
+// uiItemS(layout);
- uiMenuItemEnumO(head, "", 0, "VIEW3D_OT_viewnumpad", "type", V3D_VIEW_CAMERA);
- uiMenuItemEnumO(head, "", 0, "VIEW3D_OT_viewnumpad", "type", V3D_VIEW_TOP);
- uiMenuItemEnumO(head, "", 0, "VIEW3D_OT_viewnumpad", "type", V3D_VIEW_FRONT);
- uiMenuItemEnumO(head, "", 0, "VIEW3D_OT_viewnumpad", "type", V3D_VIEW_RIGHT);
+ uiItemEnumO(layout, NULL, 0, "VIEW3D_OT_viewnumpad", "type", V3D_VIEW_CAMERA);
+ uiItemEnumO(layout, NULL, 0, "VIEW3D_OT_viewnumpad", "type", V3D_VIEW_TOP);
+ uiItemEnumO(layout, NULL, 0, "VIEW3D_OT_viewnumpad", "type", V3D_VIEW_FRONT);
+ uiItemEnumO(layout, NULL, 0, "VIEW3D_OT_viewnumpad", "type", V3D_VIEW_RIGHT);
- //uiMenuLevel(head, "Cameras", view3d_view_camerasmenu);
+ //uiItemMenuF(layout, "Cameras", view3d_view_camerasmenu);
- uiMenuSeparator(head);
+ uiItemS(layout);
- uiMenuItemO(head, 0, "VIEW3D_OT_view_persportho");
+ uiItemO(layout, NULL, 0, "VIEW3D_OT_view_persportho");
- uiMenuSeparator(head);
+ uiItemS(layout);
-// uiMenuItemO(head, 0, "VIEW3D_OT_view_show_all_layers");
+// uiItemO(layout, NULL, 0, "VIEW3D_OT_view_show_all_layers");
-// uiMenuSeparator(head);
+// uiItemS(layout);
-// uiMenuItemO(head, 0, "VIEW3D_OT_view_local_view");
-// uiMenuItemO(head, 0, "VIEW3D_OT_view_global_view");
+// uiItemO(layout, NULL, 0, "VIEW3D_OT_view_local_view");
+// uiItemO(layout, NULL, 0, "VIEW3D_OT_view_global_view");
-// uiMenuSeparator(head);
+// uiItemS(layout);
- uiMenuLevel(head, "View Navigation", view3d_view_viewnavmenu);
- uiMenuLevel(head, "Align View", view3d_view_alignviewmenu);
+ uiItemMenuF(layout, "View Navigation", 0, view3d_view_viewnavmenu);
+ uiItemMenuF(layout, "Align View", 0, view3d_view_alignviewmenu);
- uiMenuSeparator(head);
+ uiItemS(layout);
- uiMenuContext(head, WM_OP_INVOKE_REGION_WIN);
+ uiLayoutContext(layout, WM_OP_INVOKE_REGION_WIN);
- uiMenuItemO(head, 0, "VIEW3D_OT_clipping");
- uiMenuItemO(head, 0, "VIEW3D_OT_zoom_border");
+ uiItemO(layout, NULL, 0, "VIEW3D_OT_clipping");
+ uiItemO(layout, NULL, 0, "VIEW3D_OT_zoom_border");
- uiMenuSeparator(head);
+ uiItemS(layout);
- uiMenuItemO(head, 0, "VIEW3D_OT_viewcenter");
- uiMenuItemO(head, 0, "VIEW3D_OT_viewhome");
+ uiItemO(layout, NULL, 0, "VIEW3D_OT_viewcenter");
+ uiItemO(layout, NULL, 0, "VIEW3D_OT_viewhome");
- uiMenuSeparator(head);
+ uiItemS(layout);
- if(sa->full) uiMenuItemO(head, 0, "SCREEN_OT_screen_full_area"); // "Tile Window", Ctrl UpArrow
- else uiMenuItemO(head, 0, "SCREEN_OT_screen_full_area"); // "Maximize Window", Ctr DownArrow
+ if(sa->full) uiItemO(layout, NULL, 0, "SCREEN_OT_screen_full_area"); // "Tile Window", Ctrl UpArrow
+ else uiItemO(layout, NULL, 0, "SCREEN_OT_screen_full_area"); // "Maximize Window", Ctr DownArrow
}
#if 0
static uiBlock *view3d_viewmenu(bContext *C, ARegion *ar, void *arg_unused)
@@ -707,7 +705,7 @@ static uiBlock *view3d_viewmenu(bContext *C, ARegion *ar, void *arg_unused)
uiBlock *block;
short yco= 0, menuwidth=120;
- block= uiBeginBlock(C, ar, "view3d_viewmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_viewmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_viewmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Transform Orientations...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 20, "");
@@ -838,7 +836,7 @@ static uiBlock *view3d_select_object_typemenu(bContext *C, ARegion *ar, void *ar
uiBlock *block;
short yco = 20, menuwidth = 120;
- block= uiBeginBlock(C, ar, "view3d_select_object_typemenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_select_object_typemenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_select_object_typemenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mesh", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
@@ -900,7 +898,7 @@ static uiBlock *view3d_select_object_layermenu(bContext *C, ARegion *ar, void *a
uiBlock *block;
short xco= 0, yco = 20, menuwidth = 22;
- block= uiBeginBlock(C, ar, "view3d_select_object_layermenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_select_object_layermenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_select_object_layermenu, NULL);
uiDefBut(block, BUTM, 1, "1", xco, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
@@ -950,7 +948,7 @@ static uiBlock *view3d_select_object_linkedmenu(bContext *C, ARegion *ar, void *
uiBlock *block;
short yco = 20, menuwidth = 120;
- block= uiBeginBlock(C, ar, "view3d_select_object_linkedmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_select_object_linkedmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_select_object_linkedmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Ipo|Shift L, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
@@ -988,7 +986,7 @@ static uiBlock *view3d_select_object_groupedmenu(bContext *C, ARegion *ar, void
uiBlock *block;
short yco = 20, menuwidth = 120;
- block= uiBeginBlock(C, ar, "view3d_select_object_groupedmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_select_object_groupedmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_select_object_groupedmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Children|Shift G, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
@@ -1015,7 +1013,7 @@ static uiBlock *view3d_select_objectmenu(bContext *C, ARegion *ar, void *arg_unu
uiBlock *block;
// short yco= 0, menuwidth=120;
- block= uiBeginBlock(C, ar, "view3d_select_objectmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_select_objectmenu", UI_EMBOSSP);
#if 0
uiBlockSetButmFunc(block, do_view3d_select_objectmenu, NULL);
@@ -1135,7 +1133,7 @@ static uiBlock *view3d_select_meshmenu(bContext *C, ARegion *ar, void *arg_unuse
uiBlock *block;
short yco= 0, menuwidth=120;
- block= uiBeginBlock(C, ar, "view3d_select_meshmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_select_meshmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_select_meshmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
@@ -1209,39 +1207,39 @@ static uiBlock *view3d_select_meshmenu(bContext *C, ARegion *ar, void *arg_unuse
return block;
}
-static void view3d_select_curvemenu(bContext *C, uiMenuItem *head, void *arg_unused)
+static void view3d_select_curvemenu(bContext *C, uiLayout *layout, void *arg_unused)
{
Object *obedit= CTX_data_edit_object(C);
- uiMenuItemO(head, 0, "VIEW3D_OT_select_border");
- uiMenuItemO(head, 0, "VIEW3D_OT_select_circle");
+ uiItemO(layout, NULL, 0, "VIEW3D_OT_select_border");
+ uiItemO(layout, NULL, 0, "VIEW3D_OT_select_circle");
- uiMenuSeparator(head);
+ uiItemS(layout);
- uiMenuItemO(head, 0, "CURVE_OT_select_all_toggle");
- uiMenuItemO(head, 0, "CURVE_OT_select_invert");
- uiMenuItemO(head, 0, "CURVE_OT_select_random"); // Random...
- uiMenuItemO(head, 0, "CURVE_OT_select_every_nth"); // Every Nth..
+ uiItemO(layout, NULL, 0, "CURVE_OT_select_all_toggle");
+ uiItemO(layout, NULL, 0, "CURVE_OT_select_invert");
+ uiItemO(layout, NULL, 0, "CURVE_OT_select_random"); // Random...
+ uiItemO(layout, NULL, 0, "CURVE_OT_select_every_nth"); // Every Nth..
- uiMenuSeparator(head);
+ uiItemS(layout);
if(obedit->type == OB_SURF) {
- uiMenuItemO(head, 0, "CURVE_OT_select_row");
+ uiItemO(layout, NULL, 0, "CURVE_OT_select_row");
}
else {
- uiMenuItemO(head, 0, "CURVE_OT_de_select_first");
- uiMenuItemO(head, 0, "CURVE_OT_de_select_last");
- uiMenuItemO(head, 0, "CURVE_OT_select_next");
- uiMenuItemO(head, 0, "CURVE_OT_select_previous");
+ uiItemO(layout, NULL, 0, "CURVE_OT_de_select_first");
+ uiItemO(layout, NULL, 0, "CURVE_OT_de_select_last");
+ uiItemO(layout, NULL, 0, "CURVE_OT_select_next");
+ uiItemO(layout, NULL, 0, "CURVE_OT_select_previous");
}
- uiMenuSeparator(head);
+ uiItemS(layout);
- uiMenuItemO(head, 0, "CURVE_OT_select_more");
- uiMenuItemO(head, 0, "CURVE_OT_select_less");
+ uiItemO(layout, NULL, 0, "CURVE_OT_select_more");
+ uiItemO(layout, NULL, 0, "CURVE_OT_select_less");
/* commented out because it seems to only like the LKEY method - based on mouse pointer position :( */
- /* uiMenuItemO(head, 0, "CURVE_OT_select_linked"); */
+ /* uiItemO(layout, NULL, 0, "CURVE_OT_select_linked"); */
#if 0
G.qual |= LR_CTRLKEY;
@@ -1278,7 +1276,7 @@ static uiBlock *view3d_select_metaballmenu(bContext *C, ARegion *ar, void *arg_u
uiBlock *block;
short yco= 0, menuwidth=120;
- block= uiBeginBlock(C, ar, "view3d_select_metaballmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_select_metaballmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_select_metaballmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
@@ -1326,7 +1324,7 @@ static uiBlock *view3d_select_latticemenu(bContext *C, ARegion *ar, void *arg_un
uiBlock *block;
short yco= 0, menuwidth=120;
- block= uiBeginBlock(C, ar, "view3d_select_latticemenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_select_latticemenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_select_latticemenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
@@ -1383,7 +1381,7 @@ static uiBlock *view3d_select_armaturemenu(bContext *C, ARegion *ar, void *arg_u
uiBlock *block;
short yco= 0, menuwidth=120;
- block= uiBeginBlock(C, ar, "view3d_select_armaturemenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_select_armaturemenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_select_armaturemenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
@@ -1454,7 +1452,7 @@ static uiBlock *view3d_select_pose_armaturemenu(bContext *C, ARegion *ar, void *
uiBlock *block;
short yco= 0, menuwidth=120;
- block= uiBeginBlock(C, ar, "view3d_select_pose_armaturemenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_select_pose_armaturemenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_select_pose_armaturemenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
@@ -1521,7 +1519,7 @@ static uiBlock *view3d_select_faceselmenu(bContext *C, ARegion *ar, void *arg_un
// int i = 0;
#endif
- block= uiBeginBlock(C, ar, "view3d_select_faceselmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_select_faceselmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_select_faceselmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
@@ -1592,7 +1590,7 @@ static uiBlock *view3d_edit_snapmenu(bContext *C, ARegion *ar, void *arg_unused)
uiBlock *block;
short yco = 20, menuwidth = 120;
- block= uiBeginBlock(C, ar, "view3d_edit_snapmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_edit_snapmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_edit_snapmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Selection -> Grid|Shift S, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
@@ -1658,7 +1656,7 @@ static uiBlock *view3d_transform_moveaxismenu(bContext *C, ARegion *ar, void *ar
uiBlock *block;
short yco = 20, menuwidth = 120;
- block= uiBeginBlock(C, ar, "view3d_transform_moveaxismenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_transform_moveaxismenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_transform_moveaxismenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Global|G, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
@@ -1725,7 +1723,7 @@ static uiBlock *view3d_transform_rotateaxismenu(bContext *C, ARegion *ar, void *
uiBlock *block;
short yco = 20, menuwidth = 120;
- block= uiBeginBlock(C, ar, "view3d_transform_rotateaxismenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_transform_rotateaxismenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_transform_rotateaxismenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Global|R, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
@@ -1792,7 +1790,7 @@ static uiBlock *view3d_transform_scaleaxismenu(bContext *C, ARegion *ar, void *a
uiBlock *block;
short yco = 20, menuwidth = 120;
- block= uiBeginBlock(C, ar, "view3d_transform_scaleaxismenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_transform_scaleaxismenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_transform_scaleaxismenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Global|S, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
@@ -1904,7 +1902,7 @@ static uiBlock *view3d_transformmenu(bContext *C, ARegion *ar, void *arg_unused)
uiBlock *block;
short yco = 20, menuwidth = 120;
- block= uiBeginBlock(C, ar, "view3d_transformmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_transformmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_transformmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Grab/Move|G", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
@@ -2030,7 +2028,7 @@ static uiBlock *view3d_object_mirrormenu(bContext *C, ARegion *ar, void *arg_unu
uiBlock *block;
short yco = 20, menuwidth = 120;
- block= uiBeginBlock(C, ar, "view3d_object_mirrormenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_object_mirrormenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_object_mirrormenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Interactive Mirror|Ctrl M", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
@@ -2081,7 +2079,7 @@ static uiBlock *view3d_edit_object_transformmenu(bContext *C, ARegion *ar, void
uiBlock *block;
short yco = 20, menuwidth = 120;
- block= uiBeginBlock(C, ar, "view3d_edit_object_transformmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_edit_object_transformmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_edit_object_transformmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Apply Scale/Rotation to ObData|Ctrl A, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
@@ -2119,7 +2117,7 @@ static uiBlock *view3d_edit_object_makelocalmenu(bContext *C, ARegion *ar, void
uiBlock *block;
short yco = 20, menuwidth = 120;
- block= uiBeginBlock(C, ar, "view3d_edit_object_makelocalmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_edit_object_makelocalmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_edit_object_makelocalmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Selected Objects|L, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
@@ -2153,7 +2151,7 @@ static uiBlock *view3d_edit_object_makelinksmenu(bContext *C, ARegion *ar, void
uiBlock *block;
short yco = 20, menuwidth = 120;
- block= uiBeginBlock(C, ar, "view3d_edit_object_makelinksmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_edit_object_makelinksmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_edit_object_makelinksmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "To Scene...|Ctrl L, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
@@ -2230,7 +2228,7 @@ static uiBlock *view3d_edit_object_singleusermenu(bContext *C, ARegion *ar, void
uiBlock *block;
short yco = 20, menuwidth = 120;
- block= uiBeginBlock(C, ar, "view3d_edit_object_singleusermenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_edit_object_singleusermenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_edit_object_singleusermenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object|U, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
@@ -2283,7 +2281,7 @@ static uiBlock *view3d_edit_object_copyattrmenu(bContext *C, ARegion *ar, void *
uiBlock *block;
short yco = 20, menuwidth = 120;
- block= uiBeginBlock(C, ar, "view3d_edit_object_copyattrmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_edit_object_copyattrmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_edit_object_copyattrmenu, NULL);
ob= OBACT;
@@ -2358,7 +2356,7 @@ static uiBlock *view3d_edit_object_parentmenu(bContext *C, ARegion *ar, void *ar
uiBlock *block;
short yco = 20, menuwidth = 120;
- block= uiBeginBlock(C, ar, "view3d_edit_object_parentmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_edit_object_parentmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_edit_object_parentmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Parent...|Ctrl P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
@@ -2387,7 +2385,7 @@ static uiBlock *view3d_edit_object_groupmenu(bContext *C, ARegion *ar, void *arg
uiBlock *block;
short yco = 20, menuwidth = 120;
- block= uiBeginBlock(C, ar, "view3d_edit_object_groupmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_edit_object_groupmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_edit_object_groupmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add to Existing Group|Ctrl G, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
@@ -2418,7 +2416,7 @@ static uiBlock *view3d_edit_object_trackmenu(bContext *C, ARegion *ar, void *arg
uiBlock *block;
short yco = 20, menuwidth = 120;
- block= uiBeginBlock(C, ar, "view3d_edit_object_trackmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_edit_object_trackmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_edit_object_trackmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Track...|Ctrl T", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
@@ -2448,7 +2446,7 @@ static uiBlock *view3d_edit_object_constraintsmenu(bContext *C, ARegion *ar, voi
uiBlock *block;
short yco = 20, menuwidth = 120;
- block= uiBeginBlock(C, ar, "view3d_edit_object_constraintsmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_edit_object_constraintsmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_edit_object_constraintsmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add Constraint...|Ctrl Alt C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
@@ -2483,7 +2481,7 @@ static uiBlock *view3d_edit_object_showhidemenu(bContext *C, ARegion *ar, void *
uiBlock *block;
short yco = 20, menuwidth = 120;
- block= uiBeginBlock(C, ar, "view3d_edit_object_showhidemenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_edit_object_showhidemenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_edit_object_showhidemenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Show Hidden|Alt H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
@@ -2511,7 +2509,7 @@ static uiBlock *view3d_edit_object_scriptsmenu(bContext *C, ARegion *ar, void *a
// XXX BPyMenu *pym;
// int i = 0;
- block= uiBeginBlock(C, ar, "v3d_eobject_pymenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "v3d_eobject_pymenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_edit_object_scriptsmenu, NULL);
// for (pym = BPyMenuTable[PYMENU_OBJECT]; pym; pym = pym->next, i++) {
@@ -2584,7 +2582,7 @@ static uiBlock *view3d_edit_objectmenu(bContext *C, ARegion *ar, void *arg_unuse
uiBlock *block;
short yco= 0, menuwidth=120;
- block= uiBeginBlock(C, ar, "view3d_edit_objectmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_edit_objectmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_edit_objectmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Transform Properties|N", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 15, "");
@@ -2665,7 +2663,7 @@ static uiBlock *view3d_edit_propfalloffmenu(bContext *C, ARegion *ar, void *arg_
uiBlock *block;
short yco = 20, menuwidth = 120;
- block= uiBeginBlock(C, ar, "view3d_edit_propfalloffmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_edit_propfalloffmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_edit_propfalloffmenu, NULL);
if (scene->prop_mode==PROP_SMOOTH) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Smooth|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_SMOOTH, "");
@@ -2736,7 +2734,7 @@ static uiBlock *view3d_edit_mesh_verticesmenu(bContext *C, ARegion *ar, void *ar
uiBlock *block;
short yco = 20, menuwidth = 120;
- block= uiBeginBlock(C, ar, "view3d_edit_mesh_verticesmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_edit_mesh_verticesmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_edit_mesh_verticesmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Merge...|Alt M", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
@@ -2854,7 +2852,7 @@ static uiBlock *view3d_edit_mesh_edgesmenu(bContext *C, ARegion *ar, void *arg_u
uiBlock *block;
short yco = 20, menuwidth = 120;
- block= uiBeginBlock(C, ar, "view3d_edit_mesh_edgesmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_edit_mesh_edgesmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_edit_mesh_edgesmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Edge/Face|F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
@@ -2942,7 +2940,7 @@ static uiBlock *view3d_edit_mesh_facesmenu(bContext *C, ARegion *ar, void *arg_u
uiBlock *block;
short yco = 20, menuwidth = 120;
- block= uiBeginBlock(C, ar, "view3d_edit_mesh_facesmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_edit_mesh_facesmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_edit_mesh_facesmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Edge/Face|F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
@@ -2988,7 +2986,7 @@ static uiBlock *view3d_edit_mesh_normalsmenu(bContext *C, ARegion *ar, void *arg
uiBlock *block;
short yco = 20, menuwidth = 120;
- block= uiBeginBlock(C, ar, "view3d_edit_mesh_normalsmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_edit_mesh_normalsmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_edit_mesh_normalsmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Recalculate Outside|Ctrl N", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
@@ -3054,7 +3052,7 @@ static uiBlock *view3d_edit_mirrormenu(bContext *C, ARegion *ar, void *arg_unuse
uiBlock *block;
short yco = 20, menuwidth = 120;
- block= uiBeginBlock(C, ar, "view3d_edit_mirrormenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_edit_mirrormenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_edit_mirrormenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Interactive Mirror|Ctrl M", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
@@ -3100,7 +3098,7 @@ static uiBlock *view3d_edit_mesh_showhidemenu(bContext *C, ARegion *ar, void *ar
uiBlock *block;
short yco = 20, menuwidth = 120;
- block= uiBeginBlock(C, ar, "view3d_edit_mesh_showhidemenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_edit_mesh_showhidemenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_edit_mesh_showhidemenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Show Hidden|Alt H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
@@ -3128,7 +3126,7 @@ static uiBlock *view3d_edit_mesh_scriptsmenu(bContext *C, ARegion *ar, void *arg
// XXX BPyMenu *pym;
// int i = 0;
- block= uiBeginBlock(C, ar, "v3d_emesh_pymenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "v3d_emesh_pymenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_edit_mesh_scriptsmenu, NULL);
// for (pym = BPyMenuTable[PYMENU_MESH]; pym; pym = pym->next, i++) {
@@ -3212,7 +3210,7 @@ static uiBlock *view3d_edit_meshmenu(bContext *C, ARegion *ar, void *arg_unused)
uiBlock *block;
short yco= 0, menuwidth=120;
- block= uiBeginBlock(C, ar, "view3d_edit_meshmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_edit_meshmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_edit_meshmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Undo Editing|Ctrl Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
@@ -3289,44 +3287,44 @@ static uiBlock *view3d_edit_meshmenu(bContext *C, ARegion *ar, void *arg_unused)
return block;
}
-static void view3d_edit_curve_controlpointsmenu(bContext *C, uiMenuItem *head, void *arg_unused)
+static void view3d_edit_curve_controlpointsmenu(bContext *C, uiLayout *layout, void *arg_unused)
{
Object *obedit= CTX_data_edit_object(C);
if(obedit->type == OB_CURVE) {
- uiMenuItemEnumO(head, "", 0, "TFM_OT_transform", "mode", TFM_TILT);
- uiMenuItemO(head, 0, "CURVE_OT_tilt_clear");
- uiMenuItemO(head, 0, "CURVE_OT_separate");
+ uiItemEnumO(layout, NULL, 0, "TFM_OT_transform", "mode", TFM_TILT);
+ uiItemO(layout, NULL, 0, "CURVE_OT_tilt_clear");
+ uiItemO(layout, NULL, 0, "CURVE_OT_separate");
- uiMenuSeparator(head);
+ uiItemS(layout);
- uiMenuItemEnumO(head, "", 0, "CURVE_OT_handle_type_set", "type", 1);
- uiMenuItemEnumO(head, "", 0, "CURVE_OT_handle_type_set", "type", 3);
- uiMenuItemEnumO(head, "", 0, "CURVE_OT_handle_type_set", "type", 2);
+ uiItemEnumO(layout, NULL, 0, "CURVE_OT_handle_type_set", "type", 1);
+ uiItemEnumO(layout, NULL, 0, "CURVE_OT_handle_type_set", "type", 3);
+ uiItemEnumO(layout, NULL, 0, "CURVE_OT_handle_type_set", "type", 2);
- uiMenuSeparator(head);
+ uiItemS(layout);
}
- // XXX uiMenuItemO(head, 0, "OBJECT_OT_make_vertex_parent"); Make VertexParent|Ctrl P
+ // XXX uiItemO(layout, NULL, 0, "OBJECT_OT_make_vertex_parent"); Make VertexParent|Ctrl P
// make_parent()
- // XXX uiMenuItemO(head, 0, "OBJECT_OT_add_hook"); Add Hook| Ctrl H
+ // XXX uiItemO(layout, NULL, 0, "OBJECT_OT_add_hook"); Add Hook| Ctrl H
// add_hook_menu()
}
-static void view3d_edit_curve_segmentsmenu(bContext *C, uiMenuItem *head, void *arg_unused)
+static void view3d_edit_curve_segmentsmenu(bContext *C, uiLayout *layout, void *arg_unused)
{
- uiMenuItemO(head, 0, "CURVE_OT_subdivide");
- uiMenuItemO(head, 0, "CURVE_OT_switch_direction");
+ uiItemO(layout, NULL, 0, "CURVE_OT_subdivide");
+ uiItemO(layout, NULL, 0, "CURVE_OT_switch_direction");
}
-static void view3d_edit_curve_showhidemenu(bContext *C, uiMenuItem *head, void *arg_unused)
+static void view3d_edit_curve_showhidemenu(bContext *C, uiLayout *layout, void *arg_unused)
{
- uiMenuItemO(head, 0, "CURVE_OT_reveal");
- uiMenuItemO(head, 0, "CURVE_OT_hide");
- uiMenuItemBooleanO(head, "Hide Unselected", 0, "CURVE_OT_hide", "unselected", 1);
+ uiItemO(layout, NULL, 0, "CURVE_OT_reveal");
+ uiItemO(layout, NULL, 0, "CURVE_OT_hide");
+ uiItemBooleanO(layout, "Hide Unselected", 0, "CURVE_OT_hide", "unselected", 1);
}
-static void view3d_edit_curvemenu(bContext *C, uiMenuItem *head, void *arg_unused)
+static void view3d_edit_curvemenu(bContext *C, uiLayout *layout, void *arg_unused)
{
PointerRNA sceneptr;
Scene *scene= CTX_data_scene(C);
@@ -3339,7 +3337,7 @@ static void view3d_edit_curvemenu(bContext *C, uiMenuItem *head, void *arg_unuse
uiDefIconTextBlockBut(block, view3d_edit_mirrormenu, NULL, ICON_RIGHTARROW_THIN, "Mirror", 0, yco-=20, menuwidth, 19, "");
uiDefIconTextBlockBut(block, view3d_edit_snapmenu, NULL, ICON_RIGHTARROW_THIN, "Snap", 0, yco-=20, 120, 19, "");
- uiMenuSeparator(head);
+ uiItemS(layout);
#endif
// XXX uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Insert Keyframe|I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
@@ -3348,26 +3346,26 @@ static void view3d_edit_curvemenu(bContext *C, uiMenuItem *head, void *arg_unuse
// common_deletekey();
- uiMenuItemO(head, 0, "CURVE_OT_extrude");
- uiMenuItemO(head, 0, "CURVE_OT_duplicate");
- uiMenuItemO(head, 0, "CURVE_OT_separate");
- uiMenuItemO(head, 0, "CURVE_OT_make_segment");
- uiMenuItemO(head, 0, "CURVE_OT_cyclic_toggle");
- uiMenuItemO(head, 0, "CURVE_OT_delete"); // Delete...
+ uiItemO(layout, NULL, 0, "CURVE_OT_extrude");
+ uiItemO(layout, NULL, 0, "CURVE_OT_duplicate");
+ uiItemO(layout, NULL, 0, "CURVE_OT_separate");
+ uiItemO(layout, NULL, 0, "CURVE_OT_make_segment");
+ uiItemO(layout, NULL, 0, "CURVE_OT_cyclic_toggle");
+ uiItemO(layout, NULL, 0, "CURVE_OT_delete"); // Delete...
- uiMenuSeparator(head);
+ uiItemS(layout);
- uiMenuLevel(head, "Control Points", view3d_edit_curve_controlpointsmenu);
- uiMenuLevel(head, "Segments", view3d_edit_curve_segmentsmenu);
+ uiItemMenuF(layout, "Control Points", 0, view3d_edit_curve_controlpointsmenu);
+ uiItemMenuF(layout, "Segments", 0, view3d_edit_curve_segmentsmenu);
- uiMenuSeparator(head);
+ uiItemS(layout);
- uiMenuItemBooleanR(head, &sceneptr, "proportional_editing"); // |O
- uiMenuLevelEnumR(head, &sceneptr, "proportional_editing_falloff");
+ uiItemR(layout, NULL, 0, &sceneptr, "proportional_editing", 0, 0); // |O
+ uiItemMenuEnumR(layout, NULL, 0, &sceneptr, "proportional_editing_falloff");
- uiMenuSeparator(head);
+ uiItemS(layout);
- uiMenuLevel(head, "Show/Hide Control Points", view3d_edit_curve_showhidemenu);
+ uiItemMenuF(layout, "Show/Hide Control Points", 0, view3d_edit_curve_showhidemenu);
}
static void do_view3d_edit_mball_showhidemenu(bContext *C, void *arg, int event)
@@ -3392,7 +3390,7 @@ static uiBlock *view3d_edit_mball_showhidemenu(bContext *C, ARegion *ar, void *a
uiBlock *block;
short yco = 20, menuwidth = 120;
- block= uiBeginBlock(C, ar, "view3d_edit_mball_showhidemenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_edit_mball_showhidemenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_edit_mball_showhidemenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Show Hidden|Alt H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
@@ -3443,7 +3441,7 @@ static uiBlock *view3d_edit_metaballmenu(bContext *C, ARegion *ar, void *arg_unu
uiBlock *block;
short yco= 0, menuwidth=120;
- block= uiBeginBlock(C, ar, "view3d_edit_metaballmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_edit_metaballmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_edit_metaballmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Undo Editing|Ctrl Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
@@ -3478,43 +3476,43 @@ static uiBlock *view3d_edit_metaballmenu(bContext *C, ARegion *ar, void *arg_unu
return block;
}
-static void view3d_edit_text_charsmenu(bContext *C, uiMenuItem *head, void *arg_unused)
+static void view3d_edit_text_charsmenu(bContext *C, uiLayout *layout, void *arg_unused)
{
/* the character codes are specified in UTF-8 */
- uiMenuItemStringO(head, "Copyright|Alt C", 0, "FONT_OT_insert_text", "text", "\xC2\xA9");
- uiMenuItemStringO(head, "Registered Trademark|Alt R", 0, "FONT_OT_insert_text", "text", "\xC2\xAE");
+ uiItemStringO(layout, "Copyright|Alt C", 0, "FONT_OT_text_insert", "text", "\xC2\xA9");
+ uiItemStringO(layout, "Registered Trademark|Alt R", 0, "FONT_OT_text_insert", "text", "\xC2\xAE");
- uiMenuSeparator(head);
+ uiItemS(layout);
- uiMenuItemStringO(head, "Degree Sign|Alt G", 0, "FONT_OT_insert_text", "text", "\xC2\xB0");
- uiMenuItemStringO(head, "Multiplication Sign|Alt x", 0, "FONT_OT_insert_text", "text", "\xC3\x97");
- uiMenuItemStringO(head, "Circle|Alt .", 0, "FONT_OT_insert_text", "text", "\xC2\x8A");
- uiMenuItemStringO(head, "Superscript 1|Alt 1", 0, "FONT_OT_insert_text", "text", "\xC2\xB9");
- uiMenuItemStringO(head, "Superscript 2|Alt 2", 0, "FONT_OT_insert_text", "text", "\xC2\xB2");
- uiMenuItemStringO(head, "Superscript 3|Alt 3", 0, "FONT_OT_insert_text", "text", "\xC2\xB3");
- uiMenuItemStringO(head, "Double >>|Alt >", 0, "FONT_OT_insert_text", "text", "\xC2\xBB");
- uiMenuItemStringO(head, "Double <<|Alt <", 0, "FONT_OT_insert_text", "text", "\xC2\xAB");
- uiMenuItemStringO(head, "Promillage|Alt %", 0, "FONT_OT_insert_text", "text", "\xE2\x80\xB0");
+ uiItemStringO(layout, "Degree Sign|Alt G", 0, "FONT_OT_text_insert", "text", "\xC2\xB0");
+ uiItemStringO(layout, "Multiplication Sign|Alt x", 0, "FONT_OT_text_insert", "text", "\xC3\x97");
+ uiItemStringO(layout, "Circle|Alt .", 0, "FONT_OT_text_insert", "text", "\xC2\x8A");
+ uiItemStringO(layout, "Superscript 1|Alt 1", 0, "FONT_OT_text_insert", "text", "\xC2\xB9");
+ uiItemStringO(layout, "Superscript 2|Alt 2", 0, "FONT_OT_text_insert", "text", "\xC2\xB2");
+ uiItemStringO(layout, "Superscript 3|Alt 3", 0, "FONT_OT_text_insert", "text", "\xC2\xB3");
+ uiItemStringO(layout, "Double >>|Alt >", 0, "FONT_OT_text_insert", "text", "\xC2\xBB");
+ uiItemStringO(layout, "Double <<|Alt <", 0, "FONT_OT_text_insert", "text", "\xC2\xAB");
+ uiItemStringO(layout, "Promillage|Alt %", 0, "FONT_OT_text_insert", "text", "\xE2\x80\xB0");
- uiMenuSeparator(head);
+ uiItemS(layout);
- uiMenuItemStringO(head, "Dutch Florin|Alt F", 0, "FONT_OT_insert_text", "text", "\xC2\xA4");
- uiMenuItemStringO(head, "British Pound|Alt L", 0, "FONT_OT_insert_text", "text", "\xC2\xA3");
- uiMenuItemStringO(head, "Japanese Yen|Alt Y", 0, "FONT_OT_insert_text", "text", "\xC2\xA5");
+ uiItemStringO(layout, "Dutch Florin|Alt F", 0, "FONT_OT_text_insert", "text", "\xC2\xA4");
+ uiItemStringO(layout, "British Pound|Alt L", 0, "FONT_OT_text_insert", "text", "\xC2\xA3");
+ uiItemStringO(layout, "Japanese Yen|Alt Y", 0, "FONT_OT_text_insert", "text", "\xC2\xA5");
- uiMenuSeparator(head);
+ uiItemS(layout);
- uiMenuItemStringO(head, "German S|Alt S", 0, "FONT_OT_insert_text", "text", "\xC3\x9F");
- uiMenuItemStringO(head, "Spanish Question Mark|Alt ?", 0, "FONT_OT_insert_text", "text", "\xC2\xBF");
- uiMenuItemStringO(head, "Spanish Exclamation Mark|Alt !", 0, "FONT_OT_insert_text", "text", "\xC2\xA1");
+ uiItemStringO(layout, "German S|Alt S", 0, "FONT_OT_text_insert", "text", "\xC3\x9F");
+ uiItemStringO(layout, "Spanish Question Mark|Alt ?", 0, "FONT_OT_text_insert", "text", "\xC2\xBF");
+ uiItemStringO(layout, "Spanish Exclamation Mark|Alt !", 0, "FONT_OT_text_insert", "text", "\xC2\xA1");
}
-static void view3d_edit_textmenu(bContext *C, uiMenuItem *head, void *arg_unused)
+static void view3d_edit_textmenu(bContext *C, uiLayout *layout, void *arg_unused)
{
- uiMenuItemO(head, 0, "FONT_OT_paste_file");
- uiMenuSeparator(head);
- uiMenuLevel(head, "Special Characters", view3d_edit_text_charsmenu);
+ uiItemO(layout, NULL, 0, "FONT_OT_file_paste");
+ uiItemS(layout);
+ uiItemMenuF(layout, "Special Characters", 0, view3d_edit_text_charsmenu);
}
static void do_view3d_edit_latticemenu(bContext *C, void *arg, int event)
@@ -3555,7 +3553,7 @@ static uiBlock *view3d_edit_latticemenu(bContext *C, ARegion *ar, void *arg_unus
uiBlock *block;
short yco= 0, menuwidth=120;
- block= uiBeginBlock(C, ar, "view3d_edit_latticemenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_edit_latticemenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_edit_latticemenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Undo Editing|U", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
@@ -3615,7 +3613,7 @@ static uiBlock *view3d_edit_armature_parentmenu(bContext *C, ARegion *ar, void *
uiBlock *block;
short yco = 20, menuwidth = 120;
- block= uiBeginBlock(C, ar, "view3d_edit_armature_parentmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_edit_armature_parentmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_edit_armature_parentmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Parent...|Ctrl P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
@@ -3645,7 +3643,7 @@ static uiBlock *view3d_edit_armature_rollmenu(bContext *C, ARegion *ar, void *ar
uiBlock *block;
short yco = 20, menuwidth = 120;
- block= uiBeginBlock(C, ar, "view3d_edit_armature_rollmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_edit_armature_rollmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_edit_armature_rollmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Roll (Z-Axis Up)|Ctrl N, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
@@ -3745,7 +3743,7 @@ static uiBlock *view3d_scripts_armaturemenu(bContext *C, ARegion *ar, void *arg_
// int i= 0;
// short yco = 20, menuwidth = 120;
- block= uiBeginBlock(C, ar, "view3d_scripts_armaturemenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_scripts_armaturemenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_scripts_armaturemenu, NULL);
/* note that we acount for the N previous entries with i+20: */
@@ -3773,7 +3771,7 @@ static uiBlock *view3d_armature_settingsmenu(bContext *C, ARegion *ar, void *arg
uiBlock *block;
short yco= 0, menuwidth=120;
- block= uiBeginBlock(C, ar, "view3d_armature_settingsmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_armature_settingsmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_armature_settingsmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Toggle a Setting|Shift W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, "");
@@ -3793,7 +3791,7 @@ static uiBlock *view3d_edit_armaturemenu(bContext *C, ARegion *ar, void *arg_unu
uiBlock *block;
short yco= 0, menuwidth=120;
- block= uiBeginBlock(C, ar, "view3d_edit_armaturemenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_edit_armaturemenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_edit_armaturemenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Undo Editing|U", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
@@ -3866,7 +3864,7 @@ static void do_view3d_pose_armature_transformmenu(bContext *C, void *arg, int ev
{
#if 0
Scene *scene= CTX_data_scene(C);
- Object *ob= OBACT;
+ Object *ob= CTX_data_active_object(C);
switch(event) {
case 0: /* clear origin */
@@ -3882,9 +3880,7 @@ static void do_view3d_pose_armature_transformmenu(bContext *C, void *arg, int ev
clear_object('g');
break;
case 4: /* clear user transform */
- rest_pose(ob->pose);
- DAG_object_flush_update(scene, ob, OB_RECALC_DATA);
- ED_undo_push(C, "Pose, Clear User Transform");
+ clear_user_transform(scene, ob);
break;
}
#endif
@@ -3895,7 +3891,7 @@ static uiBlock *view3d_pose_armature_transformmenu(bContext *C, ARegion *ar, voi
uiBlock *block;
short yco = 20, menuwidth = 120;
- block= uiBeginBlock(C, ar, "view3d_pose_armature_transformmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_pose_armature_transformmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_pose_armature_transformmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear User Transform|W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
@@ -3934,7 +3930,7 @@ static uiBlock *view3d_pose_armature_showhidemenu(bContext *C, ARegion *ar, void
uiBlock *block;
short yco = 20, menuwidth = 120;
- block= uiBeginBlock(C, ar, "view3d_pose_armature_showhidemenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_pose_armature_showhidemenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_pose_armature_showhidemenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Show Hidden|Alt H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
@@ -3967,7 +3963,7 @@ static uiBlock *view3d_pose_armature_ikmenu(bContext *C, ARegion *ar, void *arg_
uiBlock *block;
short yco = 20, menuwidth = 120;
- block= uiBeginBlock(C, ar, "view3d_pose_armature_ikmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_pose_armature_ikmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_pose_armature_ikmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add IK to Bone...|Shift I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
@@ -3999,7 +3995,7 @@ static uiBlock *view3d_pose_armature_constraintsmenu(bContext *C, ARegion *ar, v
uiBlock *block;
short yco = 20, menuwidth = 120;
- block= uiBeginBlock(C, ar, "view3d_pose_armature_constraintsmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_pose_armature_constraintsmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_pose_armature_constraintsmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add Constraint to Bone...|Ctrl Alt C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
@@ -4038,7 +4034,7 @@ static uiBlock *view3d_pose_armature_groupmenu(bContext *C, ARegion *ar, void *a
uiBlock *block;
short yco = 20, menuwidth = 120;
- block= uiBeginBlock(C, ar, "view3d_pose_armature_groupmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_pose_armature_groupmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_pose_armature_groupmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add Selected to Active Group|Ctrl G", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
@@ -4073,7 +4069,7 @@ static uiBlock *view3d_pose_armature_motionpathsmenu(bContext *C, ARegion *ar, v
uiBlock *block;
short yco = 20, menuwidth = 120;
- block= uiBeginBlock(C, ar, "view3d_pose_armature_motionpathsmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_pose_armature_motionpathsmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_pose_armature_motionpathsmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Calculate Paths|W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
@@ -4112,7 +4108,7 @@ static uiBlock *view3d_pose_armature_poselibmenu(bContext *C, ARegion *ar, void
uiBlock *block;
short yco = 20, menuwidth = 120;
- block= uiBeginBlock(C, ar, "view3d_pose_armature_poselibmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_pose_armature_poselibmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_pose_armature_poselibmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Browse Poses|Ctrl L", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
@@ -4193,7 +4189,7 @@ static uiBlock *view3d_pose_armaturemenu(bContext *C, ARegion *ar, void *arg_unu
uiBlock *block;
short yco= 0, menuwidth=120;
- block= uiBeginBlock(C, ar, "view3d_pose_armaturemenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_pose_armaturemenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_pose_armaturemenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Transform Properties|N", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
@@ -4294,7 +4290,7 @@ static uiBlock *view3d_vpaintmenu(bContext *C, ARegion *ar, void *arg_unused)
// int i=0;
#endif
- block= uiBeginBlock(C, ar, "view3d_paintmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_paintmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_vpaintmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Undo Vertex Painting|U", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
@@ -4342,7 +4338,7 @@ static uiBlock *view3d_tpaintmenu(bContext *C, ARegion *ar, void *arg_unused)
uiBlock *block;
short yco= 0, menuwidth=120;
- block= uiBeginBlock(C, ar, "view3d_paintmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_paintmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_tpaintmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Undo Texture Painting|U", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
@@ -4396,7 +4392,7 @@ static uiBlock *view3d_wpaintmenu(bContext *C, ARegion *ar, void *arg_unused)
// int i=0;
#endif
- block= uiBeginBlock(C, ar, "view3d_paintmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_paintmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_wpaintmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Undo Weight Painting|U", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
@@ -4518,7 +4514,7 @@ uiBlock *view3d_sculpt_inputmenu(bContext *C, ARegion *ar, void *arg_unused)
short yco= 0, menuwidth= 120;
Sculpt *sd= CTX_data_tool_settings(C)->sculpt;
- block= uiBeginBlock(C, ar, "view3d_sculpt_inputmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_sculpt_inputmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_sculpt_inputmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ((sd->flags & SCULPT_INPUT_SMOOTH) ? ICON_CHECKBOX_HLT : ICON_CHECKBOX_DEHLT), "Smooth Stroke|Shift S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
@@ -4530,7 +4526,7 @@ uiBlock *view3d_sculpt_inputmenu(bContext *C, ARegion *ar, void *arg_unused)
return block;
}
-static void view3d_sculpt_menu(bContext *C, uiMenuItem *head, void *arg_unused)
+static void view3d_sculpt_menu(bContext *C, uiLayout *layout, void *arg_unused)
{
bScreen *sc= CTX_wm_screen(C);
Sculpt *s = CTX_data_tool_settings(C)->sculpt;
@@ -4538,30 +4534,30 @@ static void view3d_sculpt_menu(bContext *C, uiMenuItem *head, void *arg_unused)
RNA_pointer_create(&sc->id, &RNA_Sculpt, s, &rna);
- uiMenuItemBooleanR(head, &rna, "symmetry_x");
- uiMenuItemBooleanR(head, &rna, "symmetry_y");
- uiMenuItemBooleanR(head, &rna, "symmetry_z");
- uiMenuItemBooleanR(head, &rna, "lock_x");
- uiMenuItemBooleanR(head, &rna, "lock_y");
- uiMenuItemBooleanR(head, &rna, "lock_z");
+ uiItemR(layout, NULL, 0, &rna, "symmetry_x", 0, 0);
+ uiItemR(layout, NULL, 0, &rna, "symmetry_y", 0, 0);
+ uiItemR(layout, NULL, 0, &rna, "symmetry_z", 0, 0);
+ uiItemR(layout, NULL, 0, &rna, "lock_x", 0, 0);
+ uiItemR(layout, NULL, 0, &rna, "lock_y", 0, 0);
+ uiItemR(layout, NULL, 0, &rna, "lock_z", 0, 0);
/* Brush settings */
RNA_pointer_create(&sc->id, &RNA_Brush, s->brush, &rna);
/* Curve */
- uiMenuSeparator(head);
- uiMenuItemEnumO(head, "", 0, "SCULPT_OT_brush_curve_preset", "mode", BRUSH_PRESET_SHARP);
- uiMenuItemEnumO(head, "", 0, "SCULPT_OT_brush_curve_preset", "mode", BRUSH_PRESET_SMOOTH);
- uiMenuItemEnumO(head, "", 0, "SCULPT_OT_brush_curve_preset", "mode", BRUSH_PRESET_MAX);
+ uiItemS(layout);
+ uiItemEnumO(layout, NULL, 0, "SCULPT_OT_brush_curve_preset", "mode", BRUSH_PRESET_SHARP);
+ uiItemEnumO(layout, NULL, 0, "SCULPT_OT_brush_curve_preset", "mode", BRUSH_PRESET_SMOOTH);
+ uiItemEnumO(layout, NULL, 0, "SCULPT_OT_brush_curve_preset", "mode", BRUSH_PRESET_MAX);
- uiMenuSeparator(head);
+ uiItemS(layout);
- uiMenuItemBooleanR(head, &rna, "airbrush");
- uiMenuItemBooleanR(head, &rna, "rake");
- uiMenuItemBooleanR(head, &rna, "anchored");
- uiMenuItemBooleanR(head, &rna, "space");
+ uiItemR(layout, NULL, 0, &rna, "airbrush", 0, 0);
+ uiItemR(layout, NULL, 0, &rna, "rake", 0, 0);
+ uiItemR(layout, NULL, 0, &rna, "anchored", 0, 0);
+ uiItemR(layout, NULL, 0, &rna, "space", 0, 0);
- uiMenuItemBooleanR(head, &rna, "flip_direction");
+ uiItemR(layout, NULL, 0, &rna, "flip_direction", 0, 0);
}
uiBlock *view3d_sculptmenu(bContext *C, ARegion *ar, void *arg_unused)
@@ -4573,7 +4569,7 @@ uiBlock *view3d_sculptmenu(bContext *C, ARegion *ar, void *arg_unused)
// XXX const BrushData *br= sculptmode_brush();
short yco= 0, menuwidth= 120;
- block= uiBeginBlock(C, ar, "view3d_sculptmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_sculptmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_sculptmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Sculpt Properties|N", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 14, "");
@@ -4638,7 +4634,7 @@ static uiBlock *view3d_facesel_showhidemenu(bContext *C, ARegion *ar, void *arg_
uiBlock *block;
short yco = 20, menuwidth = 120;
- block= uiBeginBlock(C, ar, "view3d_facesel_showhidemenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_facesel_showhidemenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_facesel_showhidemenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Show Hidden Faces|Alt H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
@@ -4672,7 +4668,7 @@ static uiBlock *view3d_faceselmenu(bContext *C, ARegion *ar, void *arg_unused)
uiBlock *block;
short yco= 0, menuwidth=120;
- block= uiBeginBlock(C, ar, "view3d_faceselmenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_faceselmenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_view3d_faceselmenu, NULL);
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Set Vertex Colors|Shift K", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
@@ -4698,59 +4694,59 @@ static uiBlock *view3d_faceselmenu(bContext *C, ARegion *ar, void *arg_unused)
return block;
}
-static void view3d_select_particlemenu(bContext *C, uiMenuItem *head, void *arg_unused)
+static void view3d_select_particlemenu(bContext *C, uiLayout *layout, void *arg_unused)
{
Scene *scene= CTX_data_scene(C);
- uiMenuItemO(head, 0, "VIEW3D_OT_select_border");
+ uiItemO(layout, NULL, 0, "VIEW3D_OT_select_border");
- uiMenuSeparator(head);
+ uiItemS(layout);
- uiMenuItemO(head, 0, "PARTICLE_OT_select_all_toggle");
- uiMenuItemO(head, 0, "PARTICLE_OT_select_linked");
+ uiItemO(layout, NULL, 0, "PARTICLE_OT_select_all_toggle");
+ uiItemO(layout, NULL, 0, "PARTICLE_OT_select_linked");
if(scene->selectmode & SCE_SELECT_POINT) {
- uiMenuItemO(head, 0, "PARTICLE_OT_select_last"); // |W, 4
- uiMenuItemO(head, 0, "PARTICLE_OT_select_first"); // |W, 3
+ uiItemO(layout, NULL, 0, "PARTICLE_OT_select_last"); // |W, 4
+ uiItemO(layout, NULL, 0, "PARTICLE_OT_select_first"); // |W, 3
}
- uiMenuSeparator(head);
+ uiItemS(layout);
- uiMenuItemO(head, 0, "PARTICLE_OT_select_more");
- uiMenuItemO(head, 0, "PARTICLE_OT_select_less");
+ uiItemO(layout, NULL, 0, "PARTICLE_OT_select_more");
+ uiItemO(layout, NULL, 0, "PARTICLE_OT_select_less");
}
-static void view3d_particle_showhidemenu(bContext *C, uiMenuItem *head, void *arg_unused)
+static void view3d_particle_showhidemenu(bContext *C, uiLayout *layout, void *arg_unused)
{
- uiMenuItemO(head, 0, "PARTICLE_OT_reveal");
- uiMenuItemO(head, 0, "PARTICLE_OT_hide");
- uiMenuItemBooleanO(head, "Hide Unselected", 0, "PARTICLE_OT_hide", "unselected", 1);
+ uiItemO(layout, NULL, 0, "PARTICLE_OT_reveal");
+ uiItemO(layout, NULL, 0, "PARTICLE_OT_hide");
+ uiItemBooleanO(layout, "Hide Unselected", 0, "PARTICLE_OT_hide", "unselected", 1);
}
-static void view3d_particlemenu(bContext *C, uiMenuItem *head, void *arg_unused)
+static void view3d_particlemenu(bContext *C, uiLayout *layout, void *arg_unused)
{
Scene *scene= CTX_data_scene(C);
// XXX uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Particle Edit Properties|N", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
// add_blockhandler(sa, VIEW3D_HANDLER_OBJECT, UI_PNL_UNSTOW);
- // XXX uiMenuSeparator(head);
+ // XXX uiItemS(layout);
//
// XXX uiDefIconTextBut(block, BUTM, 1, (pset->flag & PE_X_MIRROR)? ICON_CHECKBOX_HLT: ICON_CHECKBOX_DEHLT, "X-Axis Mirror Editing", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
// pset->flag ^= PE_X_MIRROR;
- uiMenuItemO(head, 0, "PARTICLE_OT_mirror"); // |Ctrl M
+ uiItemO(layout, NULL, 0, "PARTICLE_OT_mirror"); // |Ctrl M
- uiMenuSeparator(head);
+ uiItemS(layout);
- uiMenuItemO(head, 0, "PARTICLE_OT_remove_doubles"); // |W, 5
- uiMenuItemO(head, 0, "PARTICLE_OT_delete");
+ uiItemO(layout, NULL, 0, "PARTICLE_OT_remove_doubles"); // |W, 5
+ uiItemO(layout, NULL, 0, "PARTICLE_OT_delete");
if(scene->selectmode & SCE_SELECT_POINT)
- uiMenuItemO(head, 0, "PARTICLE_OT_subdivide"); // |W, 2
- uiMenuItemO(head, 0, "PARTICLE_OT_rekey"); // |W, 1
+ uiItemO(layout, NULL, 0, "PARTICLE_OT_subdivide"); // |W, 2
+ uiItemO(layout, NULL, 0, "PARTICLE_OT_rekey"); // |W, 1
- uiMenuSeparator(head);
+ uiItemS(layout);
- uiMenuLevel(head, "Show/Hide Particles", view3d_particle_showhidemenu);
+ uiItemMenuF(layout, "Show/Hide Particles", 0, view3d_particle_showhidemenu);
}
static char *view3d_modeselect_pup(Scene *scene)
@@ -4765,7 +4761,7 @@ static char *view3d_modeselect_pup(Scene *scene)
if(ob)
str += sprintf(str, formatstr, "Object Mode", V3D_OBJECTMODE_SEL, ICON_OBJECT_DATA);
else
- str += sprintf(str, formatstr, " ", V3D_OBJECTMODE_SEL, ICON_OBJECT_DATA);
+ str += sprintf(str, formatstr, "Object Mode", V3D_OBJECTMODE_SEL, ICON_OBJECT_DATA);
if(ob==NULL) return string;
@@ -5119,6 +5115,7 @@ static void do_view3d_header_buttons(bContext *C, void *arg, int event)
}
break;
}
+
}
static void view3d_header_pulldowns(const bContext *C, uiBlock *block, Object *ob, int *xcoord, int yco)
@@ -5128,9 +5125,6 @@ static void view3d_header_pulldowns(const bContext *C, uiBlock *block, Object *o
short xmax, xco= *xcoord;
- /* pull down menus */
- uiBlockSetEmboss(block, UI_EMBOSSP);
-
/* compensate for local mode when setting up the viewing menu/iconrow values */
if(rv3d->view==7) rv3d->viewbut= 1;
else if(rv3d->view==1) rv3d->viewbut= 2;
@@ -5142,115 +5136,115 @@ static void view3d_header_pulldowns(const bContext *C, uiBlock *block, Object *o
* height of the header */
xmax= GetButStringLength("View");
- uiDefMenuBut(block, view3d_viewmenu, NULL, "View", xco, yco-2, xmax-3, 24, "");
- //uiDefPulldownBut(block, view3d_viewmenu, NULL, "View", xco, yco-2, xmax-3, 24, "");
+ uiDefMenuBut(block, view3d_viewmenu, NULL, "View", xco, yco, xmax-3, 20, "");
+ //uiDefPulldownBut(block, view3d_viewmenu, NULL, "View", xco, yco, xmax-3, 20, "");
xco+= xmax;
xmax= GetButStringLength("Select");
if (obedit) {
if (ob && ob->type == OB_MESH) {
- uiDefPulldownBut(block, view3d_select_meshmenu, NULL, "Select", xco,yco-2, xmax-3, 24, "");
+ uiDefPulldownBut(block, view3d_select_meshmenu, NULL, "Select", xco,yco, xmax-3, 24, "");
} else if (ob && (ob->type == OB_CURVE || ob->type == OB_SURF)) {
- uiDefMenuBut(block, view3d_select_curvemenu, NULL, "Select", xco, yco-2, xmax-3, 24, "");
+ uiDefMenuBut(block, view3d_select_curvemenu, NULL, "Select", xco, yco, xmax-3, 24, "");
} else if (ob && ob->type == OB_FONT) {
xmax= 0;
} else if (ob && ob->type == OB_MBALL) {
- uiDefPulldownBut(block, view3d_select_metaballmenu, NULL, "Select", xco,yco-2, xmax-3, 24, "");
+ uiDefPulldownBut(block, view3d_select_metaballmenu, NULL, "Select", xco,yco, xmax-3, 24, "");
} else if (ob && ob->type == OB_LATTICE) {
- uiDefPulldownBut(block, view3d_select_latticemenu, NULL, "Select", xco,yco-2, xmax-3, 24, "");
+ uiDefPulldownBut(block, view3d_select_latticemenu, NULL, "Select", xco,yco, xmax-3, 20, "");
} else if (ob && ob->type == OB_ARMATURE) {
- uiDefPulldownBut(block, view3d_select_armaturemenu, NULL, "Select", xco,yco-2, xmax-3, 24, "");
+ uiDefPulldownBut(block, view3d_select_armaturemenu, NULL, "Select", xco,yco, xmax-3, 20, "");
}
} else if (FACESEL_PAINT_TEST) {
if (ob && ob->type == OB_MESH) {
- uiDefPulldownBut(block, view3d_select_faceselmenu, NULL, "Select", xco,yco-2, xmax-3, 24, "");
+ uiDefPulldownBut(block, view3d_select_faceselmenu, NULL, "Select", xco,yco, xmax-3, 20, "");
}
} else if ((G.f & G_VERTEXPAINT) || (G.f & G_TEXTUREPAINT) || (G.f & G_WEIGHTPAINT)) {
uiDefBut(block, LABEL,0,"", xco, 0, xmax, 20, 0, 0, 0, 0, 0, "");
} else if (G.f & G_PARTICLEEDIT) {
- uiDefMenuBut(block, view3d_select_particlemenu, NULL, "Select", xco,yco-2, xmax-3, 24, "");
+ uiDefMenuBut(block, view3d_select_particlemenu, NULL, "Select", xco,yco, xmax-3, 20, "");
} else {
if (ob && (ob->flag & OB_POSEMODE))
- uiDefPulldownBut(block, view3d_select_pose_armaturemenu, NULL, "Select", xco,yco-2, xmax-3, 24, "");
+ uiDefPulldownBut(block, view3d_select_pose_armaturemenu, NULL, "Select", xco,yco, xmax-3, 20, "");
else
- uiDefPulldownBut(block, view3d_select_objectmenu, NULL, "Select", xco,yco-2, xmax-3, 24, "");
+ uiDefPulldownBut(block, view3d_select_objectmenu, NULL, "Select", xco,yco, xmax-3, 20, "");
}
xco+= xmax;
if (obedit) {
if (ob && ob->type == OB_MESH) {
xmax= GetButStringLength("Mesh");
- uiDefPulldownBut(block, view3d_edit_meshmenu, NULL, "Mesh", xco,yco-2, xmax-3, 24, "");
+ uiDefPulldownBut(block, view3d_edit_meshmenu, NULL, "Mesh", xco,yco, xmax-3, 20, "");
xco+= xmax;
} else if (ob && ob->type == OB_CURVE) {
xmax= GetButStringLength("Curve");
- uiDefMenuBut(block, view3d_edit_curvemenu, NULL, "Curve", xco, yco-2, xmax-3, 24, "");
+ uiDefMenuBut(block, view3d_edit_curvemenu, NULL, "Curve", xco, yco, xmax-3, 20, "");
xco+= xmax;
} else if (ob && ob->type == OB_SURF) {
xmax= GetButStringLength("Surface");
- uiDefMenuBut(block, view3d_edit_curvemenu, NULL, "Surface", xco, yco-2, xmax-3, 24, "");
+ uiDefMenuBut(block, view3d_edit_curvemenu, NULL, "Surface", xco, yco, xmax-3, 20, "");
xco+= xmax;
} else if (ob && ob->type == OB_FONT) {
xmax= GetButStringLength("Text");
- uiDefMenuBut(block, view3d_edit_textmenu, NULL, "Text", xco, yco-2, xmax-3, 24, "");
+ uiDefMenuBut(block, view3d_edit_textmenu, NULL, "Text", xco, yco, xmax-3, 20, "");
xco+= xmax;
} else if (ob && ob->type == OB_MBALL) {
xmax= GetButStringLength("Metaball");
- uiDefPulldownBut(block, view3d_edit_metaballmenu, NULL, "Metaball", xco,yco-2, xmax-3, 24, "");
+ uiDefPulldownBut(block, view3d_edit_metaballmenu, NULL, "Metaball", xco,yco, xmax-3, 20, "");
xco+= xmax;
} else if (ob && ob->type == OB_LATTICE) {
xmax= GetButStringLength("Lattice");
- uiDefPulldownBut(block, view3d_edit_latticemenu, NULL, "Lattice", xco,yco-2, xmax-3, 24, "");
+ uiDefPulldownBut(block, view3d_edit_latticemenu, NULL, "Lattice", xco,yco, xmax-3, 20, "");
xco+= xmax;
} else if (ob && ob->type == OB_ARMATURE) {
xmax= GetButStringLength("Armature");
- uiDefPulldownBut(block, view3d_edit_armaturemenu, NULL, "Armature", xco,yco-2, xmax-3, 24, "");
+ uiDefPulldownBut(block, view3d_edit_armaturemenu, NULL, "Armature", xco,yco, xmax-3, 20, "");
xco+= xmax;
}
}
else if (G.f & G_WEIGHTPAINT) {
xmax= GetButStringLength("Paint");
- uiDefPulldownBut(block, view3d_wpaintmenu, NULL, "Paint", xco,yco-2, xmax-3, 24, "");
+ uiDefPulldownBut(block, view3d_wpaintmenu, NULL, "Paint", xco,yco, xmax-3, 20, "");
xco+= xmax;
}
else if (G.f & G_VERTEXPAINT) {
xmax= GetButStringLength("Paint");
- uiDefPulldownBut(block, view3d_vpaintmenu, NULL, "Paint", xco,yco-2, xmax-3, 24, "");
+ uiDefPulldownBut(block, view3d_vpaintmenu, NULL, "Paint", xco,yco, xmax-3, 20, "");
xco+= xmax;
}
else if (G.f & G_TEXTUREPAINT) {
xmax= GetButStringLength("Paint");
- uiDefPulldownBut(block, view3d_tpaintmenu, NULL, "Paint", xco,yco-2, xmax-3, 24, "");
+ uiDefPulldownBut(block, view3d_tpaintmenu, NULL, "Paint", xco,yco, xmax-3, 20, "");
xco+= xmax;
}
else if( G.f & G_SCULPTMODE) {
xmax= GetButStringLength("Sculpt");
- uiDefMenuBut(block, view3d_sculpt_menu, NULL, "Sculpt", xco, yco-2, xmax-3, 24, "");
+ uiDefMenuBut(block, view3d_sculpt_menu, NULL, "Sculpt", xco, yco, xmax-3, 20, "");
xco+= xmax;
}
else if (FACESEL_PAINT_TEST) {
if (ob && ob->type == OB_MESH) {
xmax= GetButStringLength("Face");
- uiDefPulldownBut(block, view3d_faceselmenu, NULL, "Face", xco,yco-2, xmax-3, 24, "");
+ uiDefPulldownBut(block, view3d_faceselmenu, NULL, "Face", xco,yco, xmax-3, 20, "");
xco+= xmax;
}
}
else if(G.f & G_PARTICLEEDIT) {
xmax= GetButStringLength("Particle");
- uiDefMenuBut(block, view3d_particlemenu, NULL, "Particle", xco,yco-2, xmax-3, 24, "");
+ uiDefMenuBut(block, view3d_particlemenu, NULL, "Particle", xco,yco, xmax-3, 20, "");
xco+= xmax;
}
else {
if (ob && (ob->flag & OB_POSEMODE)) {
xmax= GetButStringLength("Pose");
- uiDefPulldownBut(block, view3d_pose_armaturemenu, NULL, "Pose", xco,yco-2, xmax-3, 24, "");
+ uiDefPulldownBut(block, view3d_pose_armaturemenu, NULL, "Pose", xco,yco, xmax-3, 20, "");
xco+= xmax;
}
else {
xmax= GetButStringLength("Object");
- uiDefPulldownBut(block, view3d_edit_objectmenu, NULL, "Object", xco,yco-2, xmax-3, 24, "");
+ uiDefPulldownBut(block, view3d_edit_objectmenu, NULL, "Object", xco,yco, xmax-3, 20, "");
xco+= xmax;
}
}
@@ -5278,7 +5272,7 @@ void view3d_header_buttons(const bContext *C, ARegion *ar)
uiBlock *block;
int a, xco, yco= 3;
- block= uiBeginBlock(C, ar, "header buttons", UI_EMBOSS, UI_HELV);
+ block= uiBeginBlock(C, ar, "header buttons", UI_EMBOSS);
uiBlockSetHandleFunc(block, do_view3d_header_buttons, NULL);
xco= ED_area_header_standardbuttons(C, block, yco);
@@ -5468,6 +5462,10 @@ void view3d_header_buttons(const bContext *C, ARegion *ar)
xco+= XIC;
uiDefIconButBitS(block, TOG, SCE_SNAP_ROTATE, B_REDR, ICON_SNAP_NORMAL,xco,yco,XIC,YIC, &scene->snap_flag, 0, 0, 0, 0, "Align rotation with the snapping target");
xco+= XIC;
+ if (scene->snap_mode == SCE_SNAP_MODE_VOLUME) {
+ uiDefIconButBitS(block, TOG, SCE_SNAP_PEEL_OBJECT, B_REDR, ICON_SNAP_PEEL_OBJECT,xco,yco,XIC,YIC, &scene->snap_flag, 0, 0, 0, 0, "Consider objects as whole when finding volume center");
+ xco+= XIC;
+ }
uiDefIconTextButS(block, ICONTEXTROW,B_REDR, ICON_SNAP_VERTEX, snapmode_pup(), xco,yco,XIC+10,YIC, &(scene->snap_mode), 0.0, 0.0, 0, 0, "Snapping mode");
xco+= XIC;
uiDefButS(block, MENU, B_NOP, "Snap Mode%t|Closest%x0|Center%x1|Median%x2|Active%x3",xco,yco,70,YIC, &scene->snap_target, 0, 0, 0, 0, "Snap Target Mode");
@@ -5551,18 +5549,20 @@ void view3d_header_buttons(const bContext *C, ARegion *ar)
/* edit face toolbox */
static int editmesh_face_toolbox_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
- uiMenuItem *head;
+ uiPopupMenu *pup;
+ uiLayout *layout;
- head= uiPupMenuBegin("Edit Faces", 0);
+ pup= uiPupMenuBegin(C, "Edit Faces", 0);
+ layout= uiPupMenuLayout(pup);
- uiMenuItemO(head, 0, "MESH_OT_fill");
- uiMenuItemO(head, 0, "MESH_OT_beauty_fill");
- uiMenuItemO(head, 0, "MESH_OT_convert_quads_to_tris");
- uiMenuItemO(head, 0, "MESH_OT_convert_tris_to_quads");
- uiMenuItemO(head, 0, "MESH_OT_edge_flip");
- uiMenuItemO(head, 0, "MESH_OT_faces_shade_smooth");
- uiMenuItemO(head, 0, "MESH_OT_faces_shade_solid");
- uiPupMenuEnd(C, head);
+ uiItemO(layout, NULL, 0, "MESH_OT_fill");
+ uiItemO(layout, NULL, 0, "MESH_OT_beauty_fill");
+ uiItemO(layout, NULL, 0, "MESH_OT_quads_convert_to_tris");
+ uiItemO(layout, NULL, 0, "MESH_OT_tris_convert_to_quads");
+ uiItemO(layout, NULL, 0, "MESH_OT_edge_flip");
+ uiItemO(layout, NULL, 0, "MESH_OT_faces_shade_smooth");
+ uiItemO(layout, NULL, 0, "MESH_OT_faces_shade_solid");
+ uiPupMenuEnd(C, pup);
return OPERATOR_CANCELLED;
}
diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h
index ae77b4293bf..ab705cb32fb 100644
--- a/source/blender/editors/space_view3d/view3d_intern.h
+++ b/source/blender/editors/space_view3d/view3d_intern.h
@@ -42,6 +42,9 @@ struct bContext;
struct wmWindowManager;
struct EditMesh;
struct ViewContext;
+struct ARegionType;
+
+#define BL_NEAR_CLIP 0.001
/* drawing flags: */
#define DRAW_PICKING 1
@@ -86,6 +89,7 @@ int draw_glsl_material(Scene *scene, Object *ob, View3D *v3d, int dt);
void draw_object_instance(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob, int dt, int outline);
void draw_object_backbufsel(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob);
void drawaxes(float size, int flag, char drawtype);
+void view3d_object_text_draw_add(float x, float y, float z, char *str, short xoffs);
/* drawarmature.c */
int draw_armature(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, int dt, int flag);
@@ -99,7 +103,6 @@ void draw_depth(Scene *scene, struct ARegion *ar, View3D *v3d, int (* func)(void
void view3d_clr_clipping(void);
void view3d_set_clipping(RegionView3D *rv3d);
void add_view3d_after(View3D *v3d, Base *base, int type, int flag);
-void make_axis_color(char *col, char *col2, char axis);
void calc_viewborder(Scene *scene, struct ARegion *ar, View3D *v3d, rctf *viewborder_r);
void circf(float x, float y, float rad);
@@ -120,11 +123,6 @@ void VIEW3D_OT_localview(struct wmOperatorType *ot);
int boundbox_clip(RegionView3D *rv3d, float obmat[][4], struct BoundBox *bb);
-void view3d_project_short_clip(struct ARegion *ar, float *vec, short *adr, float projmat[4][4], float wmat[4][4]);
-void view3d_project_short_noclip(struct ARegion *ar, float *vec, short *adr, float mat[4][4]);
-
-void view3d_project_float(struct ARegion *a, float *vec, float *adr, float mat[4][4]);
-
void centerview(struct ARegion *ar, View3D *v3d);
void smooth_view(struct bContext *C, Object *, Object *, float *ofs, float *quat, float *dist, float *lens);
@@ -134,8 +132,11 @@ void setviewmatrixview3d(Scene *scene, View3D *v3d, RegionView3D *rv3d);
/* view3d_buttons.c */
void VIEW3D_OT_properties(struct wmOperatorType *ot);
+void view3d_buttons_register(struct ARegionType *art);
-void view3d_buttons_area_defbuts(const struct bContext *C, ARegion *ar);
+/* view3d_buttons.c */
+void VIEW3D_OT_toolbar(struct wmOperatorType *ot);
+void view3d_toolbar_register(struct ARegionType *art);
/* view3d_snap.c */
int minmax_verts(Object *obedit, float *min, float *max);
@@ -150,6 +151,7 @@ void VIEW3D_OT_snap_menu(struct wmOperatorType *ot);
/* space_view3d.c */
ARegion *view3d_has_buttons_region(ScrArea *sa);
+ARegion *view3d_has_tools_region(ScrArea *sa);
#endif /* ED_VIEW3D_INTERN_H */
diff --git a/source/blender/editors/space_view3d/view3d_ops.c b/source/blender/editors/space_view3d/view3d_ops.c
index 1cda1b9e4c8..0ed43bead17 100644
--- a/source/blender/editors/space_view3d/view3d_ops.c
+++ b/source/blender/editors/space_view3d/view3d_ops.c
@@ -84,10 +84,12 @@ void view3d_operatortypes(void)
WM_operatortype_append(VIEW3D_OT_setcameratoview);
WM_operatortype_append(VIEW3D_OT_drawtype);
WM_operatortype_append(VIEW3D_OT_editmesh_face_toolbox);
- WM_operatortype_append(VIEW3D_OT_properties);
WM_operatortype_append(VIEW3D_OT_localview);
WM_operatortype_append(VIEW3D_OT_layers);
+ WM_operatortype_append(VIEW3D_OT_properties);
+ WM_operatortype_append(VIEW3D_OT_toolbar);
+
WM_operatortype_append(VIEW3D_OT_snap_selected_to_grid);
WM_operatortype_append(VIEW3D_OT_snap_selected_to_cursor);
WM_operatortype_append(VIEW3D_OT_snap_selected_to_center);
@@ -108,6 +110,7 @@ void view3d_keymap(wmWindowManager *wm)
WM_keymap_add_item(keymap, "PAINT_OT_weight_paint_toggle", TABKEY, KM_PRESS, KM_CTRL, 0);
WM_keymap_add_item(keymap, "VIEW3D_OT_properties", NKEY, KM_PRESS, 0, 0);
+ WM_keymap_add_item(keymap, "VIEW3D_OT_toolbar", TKEY, KM_PRESS, 0, 0);
/* only for region 3D window */
keymap= WM_keymap_listbase(wm, "View3D", SPACE_VIEW3D, 0);
@@ -223,9 +226,6 @@ void view3d_keymap(wmWindowManager *wm)
RNA_enum_set(WM_keymap_add_item(keymap, "PAINT_OT_weight_paint_radial_control", FKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "mode", WM_RADIALCONTROL_STRENGTH);
RNA_enum_set(WM_keymap_add_item(keymap, "PAINT_OT_texture_paint_radial_control", FKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "mode", WM_RADIALCONTROL_STRENGTH);
- /* TODO - this is just while we have no way to load a text datablock */
- RNA_string_set(WM_keymap_add_item(keymap, "SCRIPT_OT_run_pyfile", PKEY, KM_PRESS, 0, 0)->ptr, "filename", "test.py");
-
transform_keymap_for_space(wm, keymap, SPACE_VIEW3D);
}
diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c
index d822015d6e0..45e1a663441 100644
--- a/source/blender/editors/space_view3d/view3d_select.c
+++ b/source/blender/editors/space_view3d/view3d_select.c
@@ -772,7 +772,7 @@ void VIEW3D_OT_select_lasso(wmOperatorType *ot)
ot->poll= WM_operator_winactive;
/* flags */
- ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+ ot->flag= OPTYPE_UNDO;
RNA_def_collection_runtime(ot->srna, "path", &RNA_OperatorMousePath, "Path", "");
RNA_def_enum(ot->srna, "type", lasso_select_types, 0, "Type", "");
@@ -1558,7 +1558,7 @@ void VIEW3D_OT_select_border(wmOperatorType *ot)
ot->poll= ED_operator_view3d_active;
/* flags */
- ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+ ot->flag= OPTYPE_UNDO;
/* rna */
RNA_def_int(ot->srna, "event_type", 0, INT_MIN, INT_MAX, "Event Type", "", INT_MIN, INT_MAX);
@@ -1611,7 +1611,7 @@ void VIEW3D_OT_select(wmOperatorType *ot)
ot->poll= ED_operator_view3d_active;
/* flags */
- ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+ ot->flag= OPTYPE_UNDO;
/* properties */
RNA_def_enum(ot->srna, "type", prop_select_types, 0, "Type", "");
@@ -1846,7 +1846,7 @@ void VIEW3D_OT_select_circle(wmOperatorType *ot)
ot->poll= ED_operator_view3d_active;
/* flags */
- ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+ ot->flag= OPTYPE_UNDO;
RNA_def_int(ot->srna, "x", 0, INT_MIN, INT_MAX, "X", "", INT_MIN, INT_MAX);
RNA_def_int(ot->srna, "y", 0, INT_MIN, INT_MAX, "Y", "", INT_MIN, INT_MAX);
diff --git a/source/blender/editors/space_view3d/view3d_snap.c b/source/blender/editors/space_view3d/view3d_snap.c
index 52b23f7e00e..98980548b86 100644
--- a/source/blender/editors/space_view3d/view3d_snap.c
+++ b/source/blender/editors/space_view3d/view3d_snap.c
@@ -1141,17 +1141,18 @@ int minmax_verts(Object *obedit, float *min, float *max)
static int snap_menu_invoke(bContext *C, wmOperator *unused, wmEvent *event)
{
- uiMenuItem *head= uiPupMenuBegin("Snap", 0);
+ uiPopupMenu *pup= uiPupMenuBegin(C, "Snap", 0);
+ uiLayout *layout= uiPupMenuLayout(pup);
- uiMenuItemO(head, 0, "VIEW3D_OT_snap_selected_to_grid");
- uiMenuItemO(head, 0, "VIEW3D_OT_snap_selected_to_cursor");
- uiMenuItemO(head, 0, "VIEW3D_OT_snap_selected_to_center");
- uiMenuSeparator(head);
- uiMenuItemO(head, 0, "VIEW3D_OT_snap_cursor_to_selected");
- uiMenuItemO(head, 0, "VIEW3D_OT_snap_cursor_to_grid");
- uiMenuItemO(head, 0, "VIEW3D_OT_snap_cursor_to_active");
+ uiItemO(layout, NULL, 0, "VIEW3D_OT_snap_selected_to_grid");
+ uiItemO(layout, NULL, 0, "VIEW3D_OT_snap_selected_to_cursor");
+ uiItemO(layout, NULL, 0, "VIEW3D_OT_snap_selected_to_center");
+ uiItemS(layout);
+ uiItemO(layout, NULL, 0, "VIEW3D_OT_snap_cursor_to_selected");
+ uiItemO(layout, NULL, 0, "VIEW3D_OT_snap_cursor_to_grid");
+ uiItemO(layout, NULL, 0, "VIEW3D_OT_snap_cursor_to_active");
- uiPupMenuEnd(C, head);
+ uiPupMenuEnd(C, pup);
/* this operator is only for a menu, not used further */
return OPERATOR_CANCELLED;
diff --git a/source/blender/editors/space_view3d/view3d_toolbar.c b/source/blender/editors/space_view3d/view3d_toolbar.c
new file mode 100644
index 00000000000..c7cd5a92ebf
--- /dev/null
+++ b/source/blender/editors/space_view3d/view3d_toolbar.c
@@ -0,0 +1,189 @@
+/**
+ * $Id:
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2009 Blender Foundation.
+ * All rights reserved.
+ *
+ *
+ * Contributor(s): Blender Foundation
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include <string.h>
+#include <stdio.h>
+#include <math.h>
+#include <float.h>
+
+#include "DNA_ID.h"
+#include "DNA_action_types.h"
+#include "DNA_armature_types.h"
+#include "DNA_curve_types.h"
+#include "DNA_camera_types.h"
+#include "DNA_lamp_types.h"
+#include "DNA_lattice_types.h"
+#include "DNA_meta_types.h"
+#include "DNA_mesh_types.h"
+#include "DNA_meshdata_types.h"
+#include "DNA_object_types.h"
+#include "DNA_space_types.h"
+#include "DNA_scene_types.h"
+#include "DNA_screen_types.h"
+#include "DNA_userdef_types.h"
+#include "DNA_view3d_types.h"
+#include "DNA_world_types.h"
+
+#include "MEM_guardedalloc.h"
+
+#include "BLI_arithb.h"
+#include "BLI_blenlib.h"
+#include "BLI_editVert.h"
+#include "BLI_rand.h"
+
+#include "BKE_action.h"
+#include "BKE_brush.h"
+#include "BKE_context.h"
+#include "BKE_curve.h"
+#include "BKE_customdata.h"
+#include "BKE_depsgraph.h"
+#include "BKE_idprop.h"
+#include "BKE_mesh.h"
+#include "BKE_object.h"
+#include "BKE_global.h"
+#include "BKE_scene.h"
+#include "BKE_screen.h"
+#include "BKE_utildefines.h"
+
+#include "BIF_gl.h"
+#include "BIF_transform.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+
+#include "RNA_access.h"
+#include "RNA_define.h"
+
+#include "ED_armature.h"
+#include "ED_curve.h"
+#include "ED_image.h"
+#include "ED_keyframing.h"
+#include "ED_mesh.h"
+#include "ED_object.h"
+#include "ED_particle.h"
+#include "ED_screen.h"
+#include "ED_types.h"
+#include "ED_util.h"
+
+#include "UI_interface.h"
+#include "UI_resources.h"
+#include "UI_view2d.h"
+
+#include "view3d_intern.h" // own include
+
+
+/* ******************* view3d space & buttons ************** */
+
+
+/* op->invoke */
+static void redo_cb(bContext *C, void *arg_op, void *arg2)
+{
+ wmOperator *lastop= arg_op;
+
+ if(lastop) {
+ int retval;
+
+ printf("operator redo %s\n", lastop->type->name);
+ ED_undo_pop(C);
+ retval= WM_operator_repeat(C, lastop);
+ if((retval & OPERATOR_FINISHED)==0) {
+ printf("operator redo failed %s\n", lastop->type->name);
+ ED_undo_redo(C);
+ }
+ }
+}
+
+static void view3d_panel_operator_redo(const bContext *C, Panel *pa)
+{
+ /* XXX temp */
+ extern void uiDefAutoButsRNA_single(const bContext *C, uiLayout *layout, PointerRNA *ptr);
+ wmWindowManager *wm= CTX_wm_manager(C);
+ wmOperator *op;
+ PointerRNA ptr;
+ uiBlock *block;
+
+ block= uiLayoutBlock(pa->layout);
+
+ /* only for operators that are registered and did an undo push */
+ for(op= wm->operators.last; op; op= op->prev)
+ if((op->type->flag & OPTYPE_REGISTER) && (op->type->flag & OPTYPE_UNDO))
+ break;
+
+ if(op==NULL)
+ return;
+ if(op->type->poll && op->type->poll(C)==0)
+ return;
+
+ uiBlockSetFunc(block, redo_cb, op, NULL);
+
+ if(!op->properties) {
+ IDPropertyTemplate val = {0};
+ op->properties= IDP_New(IDP_GROUP, val, "wmOperatorProperties");
+ }
+
+ RNA_pointer_create(&wm->id, op->type->srna, op->properties, &ptr);
+ uiDefAutoButsRNA_single(C, pa->layout, &ptr);
+}
+
+void view3d_toolbar_register(ARegionType *art)
+{
+ PanelType *pt;
+
+ pt= MEM_callocN(sizeof(PanelType), "spacetype view3d panel last operator");
+ strcpy(pt->idname, "VIEW3D_PT_last_operator");
+ strcpy(pt->label, "Last Operator");
+ pt->draw= view3d_panel_operator_redo;
+ BLI_addtail(&art->paneltypes, pt);
+}
+
+static int view3d_toolbar(bContext *C, wmOperator *op)
+{
+ ScrArea *sa= CTX_wm_area(C);
+ ARegion *ar= view3d_has_tools_region(sa);
+
+ if(ar) {
+ ar->flag ^= RGN_FLAG_HIDDEN;
+ ar->v2d.flag &= ~V2D_IS_INITIALISED; /* XXX should become hide/unhide api? */
+
+ ED_area_initialize(CTX_wm_manager(C), CTX_wm_window(C), sa);
+ ED_area_tag_redraw(sa);
+ }
+ return OPERATOR_FINISHED;
+}
+
+void VIEW3D_OT_toolbar(wmOperatorType *ot)
+{
+ ot->name= "Toolbar";
+ ot->idname= "VIEW3D_OT_toolbar";
+
+ ot->exec= view3d_toolbar;
+ ot->poll= ED_operator_view3d_active;
+
+ /* flags */
+ ot->flag= 0;
+}
diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c
index 2aade74dcca..06e5f69bbdf 100644
--- a/source/blender/editors/space_view3d/view3d_view.c
+++ b/source/blender/editors/space_view3d/view3d_view.c
@@ -80,9 +80,6 @@
#include "view3d_intern.h" // own include
-#define BL_NEAR_CLIP 0.001
-
-
/* use this call when executing an operator,
event system doesn't set for each event the
@@ -536,76 +533,16 @@ void request_depth_update(RegionView3D *rv3d)
rv3d->depths->damaged= 1;
}
-void view3d_get_object_project_mat(RegionView3D *rv3d, Object *ob, float pmat[4][4], float vmat[4][4])
+void view3d_get_object_project_mat(RegionView3D *rv3d, Object *ob, float pmat[4][4])
{
+ float vmat[4][4];
+
Mat4MulMat4(vmat, ob->obmat, rv3d->viewmat);
Mat4MulMat4(pmat, vmat, rv3d->winmat);
- Mat4CpyMat4(vmat, ob->obmat);
-}
-
-/* projectmat brings it to window coords, wmat to rotated world space */
-void view3d_project_short_clip(ARegion *ar, float *vec, short *adr, float projmat[4][4], float wmat[4][4])
-{
- RegionView3D *rv3d= ar->regiondata;
- float fx, fy, vec4[4];
-
- adr[0]= IS_CLIPPED;
-
- /* clipplanes in eye space */
- if(rv3d->rflag & RV3D_CLIPPING) {
- VECCOPY(vec4, vec);
- Mat4MulVecfl(wmat, vec4);
- if(view3d_test_clipping(rv3d, vec4))
- return;
- }
-
- VECCOPY(vec4, vec);
- vec4[3]= 1.0;
-
- Mat4MulVec4fl(projmat, vec4);
-
- /* clipplanes in window space */
- if( vec4[3]>BL_NEAR_CLIP ) { /* 0.001 is the NEAR clipping cutoff for picking */
- fx= (ar->winx/2)*(1 + vec4[0]/vec4[3]);
-
- if( fx>0 && fx<ar->winx) {
-
- fy= (ar->winy/2)*(1 + vec4[1]/vec4[3]);
-
- if(fy>0.0 && fy< (float)ar->winy) {
- adr[0]= (short)floor(fx);
- adr[1]= (short)floor(fy);
- }
- }
- }
}
-void view3d_project_short_noclip(ARegion *ar, float *vec, short *adr, float mat[4][4])
-{
- float fx, fy, vec4[4];
-
- adr[0]= IS_CLIPPED;
-
- VECCOPY(vec4, vec);
- vec4[3]= 1.0;
-
- Mat4MulVec4fl(mat, vec4);
-
- if( vec4[3]>BL_NEAR_CLIP ) { /* 0.001 is the NEAR clipping cutoff for picking */
- fx= (ar->winx/2)*(1 + vec4[0]/vec4[3]);
-
- if( fx>-32700 && fx<32700) {
-
- fy= (ar->winy/2)*(1 + vec4[1]/vec4[3]);
-
- if(fy>-32700.0 && fy<32700.0) {
- adr[0]= (short)floor(fx);
- adr[1]= (short)floor(fy);
- }
- }
- }
-}
+/* use above call to get projecting mat */
void view3d_project_float(ARegion *ar, float *vec, float *adr, float mat[4][4])
{
float vec4[4];
diff --git a/source/blender/editors/transform/Makefile b/source/blender/editors/transform/Makefile
index 36758190b52..bc3e08a2ae8 100644
--- a/source/blender/editors/transform/Makefile
+++ b/source/blender/editors/transform/Makefile
@@ -38,7 +38,6 @@ CFLAGS += $(LEVEL_1_C_WARNINGS)
CPPFLAGS += -I$(NAN_GLEW)/include
CPPFLAGS += -I$(OPENGL_HEADERS)
-CPPFLAGS += -I$(NAN_BMFONT)/include
CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include
CPPFLAGS += -I../../windowmanager
diff --git a/source/blender/editors/transform/SConscript b/source/blender/editors/transform/SConscript
index 6e98c3bf43c..8501a95b981 100644
--- a/source/blender/editors/transform/SConscript
+++ b/source/blender/editors/transform/SConscript
@@ -5,7 +5,7 @@ sources = env.Glob('*.c')
incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../imbuf'
incs += ' ../../windowmanager #/intern/guardedalloc #/extern/glew/include'
-incs += ' ../../render/extern/include #/intern/guardedalloc #intern/bmfont'
+incs += ' ../../render/extern/include #/intern/guardedalloc'
incs += ' ../../gpu ../../makesrna ../../bmesh'
env.BlenderLib ( 'bf_editors_transform', sources, Split(incs), [], libtype=['core'], priority=[40] ) \ No newline at end of file
diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c
index 091b35c7361..674de81a9f5 100644
--- a/source/blender/editors/transform/transform.c
+++ b/source/blender/editors/transform/transform.c
@@ -89,15 +89,13 @@
#include "BKE_utildefines.h"
#include "BKE_context.h"
-//#include "BSE_drawipo.h"
-//#include "BSE_editnla_types.h" /* for NLAWIDTH */
//#include "BSE_editaction_types.h"
-//#include "BSE_time.h"
//#include "BSE_view.h"
#include "ED_image.h"
#include "ED_screen.h"
#include "ED_space_api.h"
+#include "ED_markers.h"
#include "ED_util.h"
#include "ED_view3d.h"
@@ -111,54 +109,14 @@
#include "PIL_time.h" /* sleep */
+#include "UI_resources.h"
+
//#include "blendef.h"
//
//#include "mydevice.h"
#include "transform.h"
-/* ************************** Dashed help line **************************** */
-
-
-/* bad frontbuffer call... because it is used in transform after force_draw() */
-static void helpline(TransInfo *t, float *vec)
-{
-#if 0 // TRANSFORM_FIX_ME
- float vecrot[3], cent[2];
- short mval[2];
-
- VECCOPY(vecrot, vec);
- if(t->flag & T_EDIT) {
- Object *ob= t->obedit;
- if(ob) Mat4MulVecfl(ob->obmat, vecrot);
- }
- else if(t->flag & T_POSE) {
- Object *ob=t->poseobj;
- if(ob) Mat4MulVecfl(ob->obmat, vecrot);
- }
-
- getmouseco_areawin(mval);
- projectFloatView(t, vecrot, cent); // no overflow in extreme cases
-
- persp(PERSP_WIN);
-
- glDrawBuffer(GL_FRONT);
-
- BIF_ThemeColor(TH_WIRE);
-
- setlinestyle(3);
- glBegin(GL_LINE_STRIP);
- glVertex2sv(mval);
- glVertex2fv(cent);
- glEnd();
- setlinestyle(0);
-
- persp(PERSP_VIEW);
- bglFlush(); // flush display for frontbuffer
- glDrawBuffer(GL_BACK);
-#endif
-}
-
/* ************************** SPACE DEPENDANT CODE **************************** */
void setTransformViewMatrices(TransInfo *t)
@@ -242,7 +200,8 @@ void convertViewVec(TransInfo *t, float *vec, short dx, short dy)
void projectIntView(TransInfo *t, float *vec, int *adr)
{
if (t->spacetype==SPACE_VIEW3D) {
- project_int_noclip(t->ar, vec, adr);
+ if(t->ar->regiontype == RGN_TYPE_WINDOW)
+ project_int_noclip(t->ar, vec, adr);
}
else if(t->spacetype==SPACE_IMAGE) {
float aspx, aspy, v[2];
@@ -272,7 +231,8 @@ void projectIntView(TransInfo *t, float *vec, int *adr)
void projectFloatView(TransInfo *t, float *vec, float *adr)
{
if (t->spacetype==SPACE_VIEW3D) {
- project_float_noclip(t->ar, vec, adr);
+ if(t->ar->regiontype == RGN_TYPE_WINDOW)
+ project_float_noclip(t->ar, vec, adr);
}
else if(t->spacetype==SPACE_IMAGE) {
int a[2];
@@ -639,6 +599,7 @@ void transformEvent(TransInfo *t, wmEvent *event)
resetTransRestrictions(t);
restoreTransObjects(t);
initTranslation(t);
+ initSnapping(t, NULL); // need to reinit after mode change
t->redraw = 1;
}
break;
@@ -648,6 +609,7 @@ void transformEvent(TransInfo *t, wmEvent *event)
resetTransRestrictions(t);
restoreTransObjects(t);
initResize(t);
+ initSnapping(t, NULL); // need to reinit after mode change
t->redraw = 1;
}
break;
@@ -665,6 +627,7 @@ void transformEvent(TransInfo *t, wmEvent *event)
restoreTransObjects(t);
initRotation(t);
}
+ initSnapping(t, NULL); // need to reinit after mode change
t->redraw = 1;
}
break;
@@ -934,6 +897,231 @@ int calculateTransformCenter(bContext *C, wmEvent *event, int centerMode, float
return success;
}
+typedef enum {
+ UP,
+ DOWN,
+ LEFT,
+ RIGHT
+} ArrowDirection;
+static void drawArrow(ArrowDirection d, short offset, short length, short size)
+{
+ switch(d)
+ {
+ case LEFT:
+ offset = -offset;
+ length = -length;
+ size = -size;
+ case RIGHT:
+ glBegin(GL_LINES);
+ glVertex2s( offset, 0);
+ glVertex2s( offset + length, 0);
+ glVertex2s( offset + length, 0);
+ glVertex2s( offset + length - size, -size);
+ glVertex2s( offset + length, 0);
+ glVertex2s( offset + length - size, size);
+ glEnd();
+ break;
+ case DOWN:
+ offset = -offset;
+ length = -length;
+ size = -size;
+ case UP:
+ glBegin(GL_LINES);
+ glVertex2s( 0, offset);
+ glVertex2s( 0, offset + length);
+ glVertex2s( 0, offset + length);
+ glVertex2s(-size, offset + length - size);
+ glVertex2s( 0, offset + length);
+ glVertex2s( size, offset + length - size);
+ glEnd();
+ break;
+ }
+}
+
+static void drawArrowHead(ArrowDirection d, short size)
+{
+ switch(d)
+ {
+ case LEFT:
+ size = -size;
+ case RIGHT:
+ glBegin(GL_LINES);
+ glVertex2s( 0, 0);
+ glVertex2s( -size, -size);
+ glVertex2s( 0, 0);
+ glVertex2s( -size, size);
+ glEnd();
+ break;
+ case DOWN:
+ size = -size;
+ case UP:
+ glBegin(GL_LINES);
+ glVertex2s( 0, 0);
+ glVertex2s(-size, -size);
+ glVertex2s( 0, 0);
+ glVertex2s( size, -size);
+ glEnd();
+ break;
+ }
+}
+
+static void drawArc(float size, float angle_start, float angle_end, int segments)
+{
+ float delta = (angle_end - angle_start) / segments;
+ float angle;
+
+ glBegin(GL_LINE_STRIP);
+
+ for( angle = angle_start; angle < angle_end; angle += delta)
+ {
+ glVertex2f( cosf(angle) * size, sinf(angle) * size);
+ }
+ glVertex2f( cosf(angle_end) * size, sinf(angle_end) * size);
+
+ glEnd();
+}
+
+void drawHelpline(const struct bContext *C, TransInfo *t)
+{
+ if (t->helpline != HLP_NONE && !(t->flag & T_USES_MANIPULATOR))
+ {
+ float vecrot[3], cent[2];
+
+ VECCOPY(vecrot, t->center);
+ if(t->flag & T_EDIT) {
+ Object *ob= t->obedit;
+ if(ob) Mat4MulVecfl(ob->obmat, vecrot);
+ }
+ else if(t->flag & T_POSE) {
+ Object *ob=t->poseobj;
+ if(ob) Mat4MulVecfl(ob->obmat, vecrot);
+ }
+
+ projectFloatView(t, vecrot, cent); // no overflow in extreme cases
+
+ glDisable(GL_DEPTH_TEST);
+
+ glMatrixMode(GL_PROJECTION);
+ glPushMatrix();
+ glMatrixMode(GL_MODELVIEW);
+ glPushMatrix();
+
+ ED_region_pixelspace(t->ar);
+
+ switch(t->helpline)
+ {
+ case HLP_SPRING:
+ UI_ThemeColor(TH_WIRE);
+
+ setlinestyle(3);
+ glBegin(GL_LINE_STRIP);
+ glVertex2sv(t->mval);
+ glVertex2fv(cent);
+ glEnd();
+
+ glTranslatef(t->mval[0], t->mval[1], 0);
+ glRotatef(-180 / M_PI * atan2f(cent[0] - t->mval[0], cent[1] - t->mval[1]), 0, 0, 1);
+
+ setlinestyle(0);
+ glLineWidth(3.0);
+ drawArrow(UP, 5, 10, 5);
+ drawArrow(DOWN, 5, 10, 5);
+ glLineWidth(1.0);
+ break;
+ case HLP_HARROW:
+ UI_ThemeColor(TH_WIRE);
+
+ glTranslatef(t->mval[0], t->mval[1], 0);
+
+ glLineWidth(3.0);
+ drawArrow(RIGHT, 5, 10, 5);
+ drawArrow(LEFT, 5, 10, 5);
+ glLineWidth(1.0);
+ break;
+ case HLP_VARROW:
+ UI_ThemeColor(TH_WIRE);
+
+ glTranslatef(t->mval[0], t->mval[1], 0);
+
+ glLineWidth(3.0);
+ glBegin(GL_LINES);
+ drawArrow(UP, 5, 10, 5);
+ drawArrow(DOWN, 5, 10, 5);
+ glLineWidth(1.0);
+ break;
+ case HLP_ANGLE:
+ {
+ float dx = t->mval[0] - cent[0], dy = t->mval[1] - cent[1];
+ float angle = atan2f(dy, dx);
+ float dist = sqrtf(dx*dx + dy*dy);
+ float delta_angle = MIN2(15 / dist, M_PI/4);
+ float spacing_angle = MIN2(5 / dist, M_PI/12);
+ UI_ThemeColor(TH_WIRE);
+
+ setlinestyle(3);
+ glBegin(GL_LINE_STRIP);
+ glVertex2sv(t->mval);
+ glVertex2fv(cent);
+ glEnd();
+
+ glTranslatef(cent[0], cent[1], 0);
+
+ setlinestyle(0);
+ glLineWidth(3.0);
+ drawArc(dist, angle - delta_angle, angle - spacing_angle, 10);
+ drawArc(dist, angle + spacing_angle, angle + delta_angle, 10);
+
+ glPushMatrix();
+
+ glTranslatef(cosf(angle - delta_angle) * dist, sinf(angle - delta_angle) * dist, 0);
+ glRotatef(180 / M_PI * (angle - delta_angle), 0, 0, 1);
+
+ drawArrowHead(DOWN, 5);
+
+ glPopMatrix();
+
+ glTranslatef(cosf(angle + delta_angle) * dist, sinf(angle + delta_angle) * dist, 0);
+ glRotatef(180 / M_PI * (angle + delta_angle), 0, 0, 1);
+
+ drawArrowHead(UP, 5);
+
+ glLineWidth(1.0);
+ break;
+ }
+ case HLP_TRACKBALL:
+ {
+ char col[3], col2[3];
+ UI_GetThemeColor3ubv(TH_GRID, col);
+
+ glTranslatef(t->mval[0], t->mval[1], 0);
+
+ glLineWidth(3.0);
+
+ UI_make_axis_color(col, col2, 'x');
+ glColor3ubv((GLubyte *)col2);
+
+ drawArrow(RIGHT, 5, 10, 5);
+ drawArrow(LEFT, 5, 10, 5);
+
+ UI_make_axis_color(col, col2, 'y');
+ glColor3ubv((GLubyte *)col2);
+
+ drawArrow(UP, 5, 10, 5);
+ drawArrow(DOWN, 5, 10, 5);
+ glLineWidth(1.0);
+ break;
+ }
+ }
+
+ glMatrixMode(GL_PROJECTION);
+ glPopMatrix();
+ glMatrixMode(GL_MODELVIEW);
+ glPopMatrix();
+
+ glEnable(GL_DEPTH_TEST);
+ }
+}
+
void drawTransform(const struct bContext *C, struct ARegion *ar, void *arg)
{
TransInfo *t = arg;
@@ -941,6 +1129,7 @@ void drawTransform(const struct bContext *C, struct ARegion *ar, void *arg)
drawConstraint(C, t);
drawPropCircle(C, t);
drawSnapping(C, t);
+ drawHelpline(C, t);
}
void saveTransform(bContext *C, TransInfo *t, wmOperator *op)
@@ -983,9 +1172,8 @@ void saveTransform(bContext *C, TransInfo *t, wmOperator *op)
RNA_boolean_set(op->ptr, "mirror", t->flag & T_MIRROR);
}
- if (RNA_struct_find_property(op->ptr, "constraint_mode"))
+ if (RNA_struct_find_property(op->ptr, "constraint_axis"))
{
- RNA_int_set(op->ptr, "constraint_mode", t->con.mode);
RNA_int_set(op->ptr, "constraint_orientation", t->current_orientation);
if (t->con.mode & CON_APPLY)
@@ -1036,18 +1224,11 @@ int initTransform(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event, int
return 0;
}
- initTransformOrientation(C, t);
-
if(t->spacetype == SPACE_VIEW3D)
{
//calc_manipulator_stats(curarea);
- if (t->ar->regiontype == RGN_TYPE_WINDOW)
- {
- RegionView3D *rv3d = t->ar->regiondata;
- Mat3CpyMat4(t->spacemtx, rv3d->twmat);
- }
- Mat3Ortho(t->spacemtx);
-
+ initTransformOrientation(C, t);
+
t->draw_handle = ED_region_draw_cb_activate(t->ar->type, drawTransform, t, REGION_DRAW_POST);
}
else if(t->spacetype == SPACE_IMAGE) {
@@ -1819,7 +2000,7 @@ void initWarp(TransInfo *t)
t->snap[2] = 1.0f;
t->flag |= T_NO_CONSTRAINT;
-
+
/* we need min/max in view space */
for(i = 0; i < t->total; i++) {
float center[3];
@@ -1955,8 +2136,6 @@ int Warp(TransInfo *t, short mval[2])
ED_area_headerprint(t->sa, str);
- helpline(t, gcursor);
-
return 1;
}
@@ -2077,8 +2256,6 @@ int Shear(TransInfo *t, short mval[2])
ED_area_headerprint(t->sa, str);
- helpline (t, t->center);
-
return 1;
}
@@ -2355,8 +2532,6 @@ int Resize(TransInfo *t, short mval[2])
ED_area_headerprint(t->sa, str);
- if(!(t->flag & T_USES_MANIPULATOR)) helpline (t, t->center);
-
return 1;
}
@@ -2380,7 +2555,7 @@ void initToSphere(TransInfo *t)
t->num.flag |= NUM_NULL_ONE | NUM_NO_NEGATIVE;
t->flag |= T_NO_CONSTRAINT;
-
+
// Calculate average radius
for(i = 0 ; i < t->total; i++, td++) {
t->val += VecLenf(t->center, td->iloc);
@@ -2782,8 +2957,6 @@ int Rotation(TransInfo *t, short mval[2])
ED_area_headerprint(t->sa, str);
- if(!(t->flag & T_USES_MANIPULATOR)) helpline (t, t->center);
-
return 1;
}
@@ -2889,8 +3062,6 @@ int Trackball(TransInfo *t, short mval[2])
ED_area_headerprint(t->sa, str);
- if(!(t->flag & T_USES_MANIPULATOR)) helpline (t, t->center);
-
return 1;
}
@@ -3236,8 +3407,6 @@ int Tilt(TransInfo *t, short mval[2])
ED_area_headerprint(t->sa, str);
- helpline (t, t->center);
-
return 1;
}
@@ -3302,8 +3471,6 @@ int CurveShrinkFatten(TransInfo *t, short mval[2])
ED_area_headerprint(t->sa, str);
- if(!(t->flag & T_USES_MANIPULATOR)) helpline (t, t->center);
-
return 1;
}
@@ -3575,8 +3742,6 @@ int BevelWeight(TransInfo *t, short mval[2])
ED_area_headerprint(t->sa, str);
- helpline (t, t->center);
-
return 1;
}
@@ -3651,8 +3816,6 @@ int Crease(TransInfo *t, short mval[2])
ED_area_headerprint(t->sa, str);
- helpline (t, t->center);
-
return 1;
}
@@ -3768,8 +3931,6 @@ int BoneSize(TransInfo *t, short mval[2])
ED_area_headerprint(t->sa, str);
- if(!(t->flag & T_USES_MANIPULATOR)) helpline (t, t->center);
-
return 1;
}
@@ -3836,8 +3997,6 @@ int BoneEnvelope(TransInfo *t, short mval[2])
ED_area_headerprint(t->sa, str);
- if(!(t->flag & T_USES_MANIPULATOR)) helpline (t, t->center);
-
return 1;
}
@@ -3902,8 +4061,6 @@ int BoneRoll(TransInfo *t, short mval[2])
ED_area_headerprint(t->sa, str);
- if(!(t->flag & T_USES_MANIPULATOR)) helpline (t, t->center);
-
return 1;
}
@@ -3980,8 +4137,6 @@ int BakeTime(TransInfo *t, short mval[2])
ED_area_headerprint(t->sa, str);
- helpline (t, t->center);
-
return 1;
}
@@ -4234,8 +4389,8 @@ static void doAnimEdit_SnapFrame(TransInfo *t, TransData *td, Object *ob, short
val= *(td->val);
/* snap to nearest marker */
- // XXX missing function!
- //val= (float)find_nearest_marker_time(val);
+ // TODO: need some more careful checks for where data comes from
+ val= (float)ED_markers_find_nearest_marker_time(&t->scene->markers, val);
/* convert frame out of nla-action time */
if (ob)
@@ -4512,6 +4667,7 @@ void initTimeScale(TransInfo *t)
t->transform = TimeScale;
initMouseInputMode(t, &t->mouse, INPUT_NONE);
+ t->helpline = HLP_SPRING; /* set manually because we don't use a predefined input */
t->flag |= T_NULL_ONE;
t->num.flag |= NUM_NULL_ONE;
diff --git a/source/blender/editors/transform/transform.h b/source/blender/editors/transform/transform.h
index dfbc22b1e14..ee767fada58 100644
--- a/source/blender/editors/transform/transform.h
+++ b/source/blender/editors/transform/transform.h
@@ -83,8 +83,8 @@ typedef struct TransSnap {
short mode;
short align;
short status;
- float snapPoint[3];
- float snapTarget[3];
+ float snapPoint[3]; /* snapping from this point */
+ float snapTarget[3]; /* to this point */
float snapNormal[3];
float snapTangent[3];
float dist; // Distance from snapPoint to snapTarget
@@ -232,6 +232,7 @@ typedef struct TransInfo {
short persp;
short around;
char spacetype; /* spacetype where transforming is */
+ char helpline; /* helpline modes (not to be confused with hotline) */
float vec[3]; /* translation, to show for widget */
float mat[3][3]; /* rot/rescale, to show for widget */
@@ -325,6 +326,14 @@ typedef struct TransInfo {
/* ******************************************************************************** */
+/* transinfo->helpline */
+#define HLP_NONE 0
+#define HLP_SPRING 1
+#define HLP_ANGLE 2
+#define HLP_HARROW 3
+#define HLP_VARROW 4
+#define HLP_TRACKBALL 5
+
/* transinfo->con->mode */
#define CON_APPLY 1
#define CON_AXIS0 2
diff --git a/source/blender/editors/transform/transform_constraints.c b/source/blender/editors/transform/transform_constraints.c
index 0064317b57a..7f47bfd25af 100644
--- a/source/blender/editors/transform/transform_constraints.c
+++ b/source/blender/editors/transform/transform_constraints.c
@@ -63,12 +63,10 @@
#include "DNA_space_types.h"
#include "DNA_view3d_types.h"
-//#include "BIF_screen.h"
-//#include "BIF_resources.h"
-//#include "BIF_mywindow.h"
#include "BIF_gl.h"
#include "BIF_glutil.h"
+#include "BKE_context.h"
#include "BKE_global.h"
#include "BKE_utildefines.h"
diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c
index 85657f96fd1..c90c7bfeef4 100644
--- a/source/blender/editors/transform/transform_conversions.c
+++ b/source/blender/editors/transform/transform_conversions.c
@@ -3543,14 +3543,6 @@ void flushTransGraphData(TransInfo *t)
/* **************** IpoKey stuff, for Object TransData ********** */
-/* storage of bezier triple. thats why -3 and +3! */
-static void set_tdi_old(float *old, float *poin)
-{
- old[0]= *(poin);
- old[3]= *(poin-3);
- old[6]= *(poin+3);
-}
-
/* while transforming */
void add_tdi_poin(float *poin, float *old, float delta)
{
@@ -3561,8 +3553,16 @@ void add_tdi_poin(float *poin, float *old, float delta)
}
}
-/* fill ipokey transdata with old vals and pointers */
#if 0 // TRANSFORM_FIX_ME
+/* storage of bezier triple. thats why -3 and +3! */
+static void set_tdi_old(float *old, float *poin)
+{
+ old[0]= *(poin);
+ old[3]= *(poin-3);
+ old[6]= *(poin+3);
+}
+
+/* fill ipokey transdata with old vals and pointers */
static void ipokey_to_transdata(IpoKey *ik, TransData *td)
{
extern int ob_ar[]; // blenkernel ipo.c
@@ -4176,7 +4176,7 @@ void autokeyframe_ob_cb_func(Scene *scene, View3D *v3d, Object *ob, int tmode)
if (adt && adt->action) {
for (fcu= adt->action->curves.first; fcu; fcu= fcu->next) {
fcu->flag &= ~FCURVE_SELECTED;
- insertkey(id, ((fcu->grp)?(fcu->grp->name):(NULL)), fcu->rna_path, fcu->array_index, cfra, flag);
+ insert_keyframe(id, adt->action, ((fcu->grp)?(fcu->grp->name):(NULL)), fcu->rna_path, fcu->array_index, cfra, flag);
}
}
}
@@ -4213,35 +4213,35 @@ void autokeyframe_ob_cb_func(Scene *scene, View3D *v3d, Object *ob, int tmode)
// TODO: the group names here are temporary...
// TODO: should this be made to use the builtin KeyingSets instead?
if (doLoc) {
- insertkey(id, "Object Transform", "location", 0, cfra, flag);
- insertkey(id, "Object Transform", "location", 1, cfra, flag);
- insertkey(id, "Object Transform", "location", 2, cfra, flag);
+ insert_keyframe(id, NULL, "Object Transform", "location", 0, cfra, flag);
+ insert_keyframe(id, NULL, "Object Transform", "location", 1, cfra, flag);
+ insert_keyframe(id, NULL, "Object Transform", "location", 2, cfra, flag);
}
if (doRot) {
- insertkey(id, "Object Transform", "rotation", 0, cfra, flag);
- insertkey(id, "Object Transform", "rotation", 1, cfra, flag);
- insertkey(id, "Object Transform", "rotation", 2, cfra, flag);
+ insert_keyframe(id, NULL, "Object Transform", "rotation", 0, cfra, flag);
+ insert_keyframe(id, NULL, "Object Transform", "rotation", 1, cfra, flag);
+ insert_keyframe(id, NULL, "Object Transform", "rotation", 2, cfra, flag);
}
if (doScale) {
- insertkey(id, "Object Transform", "scale", 0, cfra, flag);
- insertkey(id, "Object Transform", "scale", 1, cfra, flag);
- insertkey(id, "Object Transform", "scale", 2, cfra, flag);
+ insert_keyframe(id, NULL, "Object Transform", "scale", 0, cfra, flag);
+ insert_keyframe(id, NULL, "Object Transform", "scale", 1, cfra, flag);
+ insert_keyframe(id, NULL, "Object Transform", "scale", 2, cfra, flag);
}
}
else {
// TODO: the group names here are temporary...
// TODO: should this be made to use the builtin KeyingSets instead?
- insertkey(id, "Object Transform", "location", 0, cfra, flag);
- insertkey(id, "Object Transform", "location", 1, cfra, flag);
- insertkey(id, "Object Transform", "location", 2, cfra, flag);
+ insert_keyframe(id, NULL, "Object Transform", "location", 0, cfra, flag);
+ insert_keyframe(id, NULL, "Object Transform", "location", 1, cfra, flag);
+ insert_keyframe(id, NULL, "Object Transform", "location", 2, cfra, flag);
- insertkey(id, "Object Transform", "rotation", 0, cfra, flag);
- insertkey(id, "Object Transform", "rotation", 1, cfra, flag);
- insertkey(id, "Object Transform", "rotation", 2, cfra, flag);
+ insert_keyframe(id, NULL, "Object Transform", "rotation", 0, cfra, flag);
+ insert_keyframe(id, NULL, "Object Transform", "rotation", 1, cfra, flag);
+ insert_keyframe(id, NULL, "Object Transform", "rotation", 2, cfra, flag);
- insertkey(id, "Object Transform", "scale", 0, cfra, flag);
- insertkey(id, "Object Transform", "scale", 1, cfra, flag);
- insertkey(id, "Object Transform", "scale", 2, cfra, flag);
+ insert_keyframe(id, NULL, "Object Transform", "scale", 0, cfra, flag);
+ insert_keyframe(id, NULL, "Object Transform", "scale", 1, cfra, flag);
+ insert_keyframe(id, NULL, "Object Transform", "scale", 2, cfra, flag);
}
// XXX todo... find a way to send notifiers from here...
@@ -4286,7 +4286,7 @@ void autokeyframe_pose_cb_func(Scene *scene, View3D *v3d, Object *ob, int tmode,
if (IS_AUTOKEY_FLAG(INSERTAVAIL)) {
if (act) {
for (fcu= act->curves.first; fcu; fcu= fcu->next)
- insertkey(id, ((fcu->grp)?(fcu->grp->name):(NULL)), fcu->rna_path, fcu->array_index, cfra, flag);
+ insert_keyframe(id, act, ((fcu->grp)?(fcu->grp->name):(NULL)), fcu->rna_path, fcu->array_index, cfra, flag);
}
}
/* only insert keyframe if needed? */
@@ -4317,57 +4317,57 @@ void autokeyframe_pose_cb_func(Scene *scene, View3D *v3d, Object *ob, int tmode,
if (doLoc) {
sprintf(buf, "pose.pose_channels[\"%s\"].location", pchan->name);
- insertkey(id, pchan->name, buf, 0, cfra, flag);
- insertkey(id, pchan->name, buf, 1, cfra, flag);
- insertkey(id, pchan->name, buf, 2, cfra, flag);
+ insert_keyframe(id, NULL, pchan->name, buf, 0, cfra, flag);
+ insert_keyframe(id, NULL, pchan->name, buf, 1, cfra, flag);
+ insert_keyframe(id, NULL, pchan->name, buf, 2, cfra, flag);
}
if (doRot) {
if (pchan->rotmode == PCHAN_ROT_QUAT) {
sprintf(buf, "pose.pose_channels[\"%s\"].rotation", pchan->name);
- insertkey(id, pchan->name, buf, 0, cfra, flag);
- insertkey(id, pchan->name, buf, 1, cfra, flag);
- insertkey(id, pchan->name, buf, 2, cfra, flag);
- insertkey(id, pchan->name, buf, 3, cfra, flag);
+ insert_keyframe(id, NULL, pchan->name, buf, 0, cfra, flag);
+ insert_keyframe(id, NULL, pchan->name, buf, 1, cfra, flag);
+ insert_keyframe(id, NULL, pchan->name, buf, 2, cfra, flag);
+ insert_keyframe(id, NULL, pchan->name, buf, 3, cfra, flag);
}
else {
sprintf(buf, "pose.pose_channels[\"%s\"].euler_rotation", pchan->name);
- insertkey(id, pchan->name, buf, 0, cfra, flag);
- insertkey(id, pchan->name, buf, 1, cfra, flag);
- insertkey(id, pchan->name, buf, 2, cfra, flag);
+ insert_keyframe(id, NULL, pchan->name, buf, 0, cfra, flag);
+ insert_keyframe(id, NULL, pchan->name, buf, 1, cfra, flag);
+ insert_keyframe(id, NULL, pchan->name, buf, 2, cfra, flag);
}
}
if (doScale) {
sprintf(buf, "pose.pose_channels[\"%s\"].scale", pchan->name);
- insertkey(id, pchan->name, buf, 0, cfra, flag);
- insertkey(id, pchan->name, buf, 1, cfra, flag);
- insertkey(id, pchan->name, buf, 2, cfra, flag);
+ insert_keyframe(id, NULL, pchan->name, buf, 0, cfra, flag);
+ insert_keyframe(id, NULL, pchan->name, buf, 1, cfra, flag);
+ insert_keyframe(id, NULL, pchan->name, buf, 2, cfra, flag);
}
}
/* insert keyframe in any channel that's appropriate */
else {
sprintf(buf, "pose.pose_channels[\"%s\"].location", pchan->name);
- insertkey(id, pchan->name, buf, 0, cfra, flag);
- insertkey(id, pchan->name, buf, 1, cfra, flag);
- insertkey(id, pchan->name, buf, 2, cfra, flag);
+ insert_keyframe(id, NULL, pchan->name, buf, 0, cfra, flag);
+ insert_keyframe(id, NULL, pchan->name, buf, 1, cfra, flag);
+ insert_keyframe(id, NULL, pchan->name, buf, 2, cfra, flag);
if (pchan->rotmode == PCHAN_ROT_QUAT) {
sprintf(buf, "pose.pose_channels[\"%s\"].rotation", pchan->name);
- insertkey(id, pchan->name, buf, 0, cfra, flag);
- insertkey(id, pchan->name, buf, 1, cfra, flag);
- insertkey(id, pchan->name, buf, 2, cfra, flag);
- insertkey(id, pchan->name, buf, 3, cfra, flag);
+ insert_keyframe(id, NULL, pchan->name, buf, 0, cfra, flag);
+ insert_keyframe(id, NULL, pchan->name, buf, 1, cfra, flag);
+ insert_keyframe(id, NULL, pchan->name, buf, 2, cfra, flag);
+ insert_keyframe(id, NULL, pchan->name, buf, 3, cfra, flag);
}
else {
sprintf(buf, "pose.pose_channels[\"%s\"].euler_rotation", pchan->name);
- insertkey(id, pchan->name, buf, 0, cfra, flag);
- insertkey(id, pchan->name, buf, 1, cfra, flag);
- insertkey(id, pchan->name, buf, 2, cfra, flag);
+ insert_keyframe(id, NULL, pchan->name, buf, 0, cfra, flag);
+ insert_keyframe(id, NULL, pchan->name, buf, 1, cfra, flag);
+ insert_keyframe(id, NULL, pchan->name, buf, 2, cfra, flag);
}
sprintf(buf, "pose.pose_channels[\"%s\"].scale", pchan->name);
- insertkey(id, pchan->name, buf, 0, cfra, flag);
- insertkey(id, pchan->name, buf, 1, cfra, flag);
- insertkey(id, pchan->name, buf, 2, cfra, flag);
+ insert_keyframe(id, NULL, pchan->name, buf, 0, cfra, flag);
+ insert_keyframe(id, NULL, pchan->name, buf, 1, cfra, flag);
+ insert_keyframe(id, NULL, pchan->name, buf, 2, cfra, flag);
}
}
}
diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c
index 21e18f09882..ba4d3089fdf 100644
--- a/source/blender/editors/transform/transform_generics.c
+++ b/source/blender/editors/transform/transform_generics.c
@@ -622,7 +622,6 @@ void recalcData(TransInfo *t)
void drawLine(TransInfo *t, float *center, float *dir, char axis, short options)
{
- extern void make_axis_color(char *col, char *col2, char axis); // view3d_draw.c
float v1[3], v2[3], v3[3];
char col[3], col2[3];
@@ -647,7 +646,7 @@ void drawLine(TransInfo *t, float *center, float *dir, char axis, short options)
else {
UI_GetThemeColor3ubv(TH_GRID, col);
}
- make_axis_color(col, col2, axis);
+ UI_make_axis_color(col, col2, axis);
glColor3ubv((GLubyte *)col2);
setlinestyle(0);
@@ -686,6 +685,8 @@ int initTransInfo (bContext *C, TransInfo *t, wmOperator *op, wmEvent *event)
t->data = NULL;
t->ext = NULL;
+ t->helpline = HLP_NONE;
+
t->flag = 0;
t->redraw = 1; /* redraw first time */
diff --git a/source/blender/editors/transform/transform_input.c b/source/blender/editors/transform/transform_input.c
index 3272c35f5fa..4d721a83c78 100644
--- a/source/blender/editors/transform/transform_input.c
+++ b/source/blender/editors/transform/transform_input.c
@@ -251,35 +251,44 @@ void initMouseInputMode(TransInfo *t, MouseInput *mi, MouseInputMode mode)
{
case INPUT_VECTOR:
mi->apply = InputVector;
+ t->helpline = HLP_NONE;
break;
case INPUT_SPRING:
calcSpringFactor(mi);
mi->apply = InputSpring;
+ t->helpline = HLP_SPRING;
break;
case INPUT_SPRING_FLIP:
calcSpringFactor(mi);
mi->apply = InputSpringFlip;
+ t->helpline = HLP_SPRING;
break;
case INPUT_ANGLE:
mi->apply = InputAngle;
+ t->helpline = HLP_ANGLE;
break;
case INPUT_TRACKBALL:
/* factor has to become setting or so */
mi->factor = 0.1f;
mi->apply = InputTrackBall;
+ t->helpline = HLP_TRACKBALL;
break;
case INPUT_HORIZONTAL_RATIO:
mi->factor = (float)(mi->center[0] - mi->imval[0]);
mi->apply = InputHorizontalRatio;
+ t->helpline = HLP_HARROW;
break;
case INPUT_HORIZONTAL_ABSOLUTE:
mi->apply = InputHorizontalAbsolute;
+ t->helpline = HLP_HARROW;
break;
case INPUT_VERTICAL_RATIO:
mi->apply = InputVerticalRatio;
+ t->helpline = HLP_VARROW;
break;
case INPUT_VERTICAL_ABSOLUTE:
mi->apply = InputVerticalAbsolute;
+ t->helpline = HLP_VARROW;
break;
case INPUT_NONE:
default:
diff --git a/source/blender/editors/transform/transform_ops.c b/source/blender/editors/transform/transform_ops.c
index a45af971d01..769001b30a8 100644
--- a/source/blender/editors/transform/transform_ops.c
+++ b/source/blender/editors/transform/transform_ops.c
@@ -119,11 +119,13 @@ static int select_orientation_exec(bContext *C, wmOperator *op)
static int select_orientation_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
- uiMenuItem *head;
+ uiPopupMenu *pup;
+ uiLayout *layout;
- head= uiPupMenuBegin("Orientation", 0);
- BIF_menuTransformOrientation(C, head, NULL);
- uiPupMenuEnd(C, head);
+ pup= uiPupMenuBegin(C, "Orientation", 0);
+ layout= uiPupMenuLayout(pup);
+ BIF_menuTransformOrientation(C, layout, NULL);
+ uiPupMenuEnd(C, pup);
return OPERATOR_CANCELLED;
}
@@ -267,7 +269,7 @@ static int transform_invoke(bContext *C, wmOperator *op, wmEvent *event)
void Properties_Proportional(struct wmOperatorType *ot)
{
- RNA_def_enum(ot->srna, "proportional", proportional_mode_types, 0, "Proportional Edition", "");
+ RNA_def_enum(ot->srna, "proportional", proportional_mode_types, 0, "Proportional Editing", "");
RNA_def_enum(ot->srna, "proportional_editing_falloff", prop_mode_items, 0, "Proportional Editing Falloff", "Falloff type for proportional editing mode.");
RNA_def_float(ot->srna, "proportional_size", 1, 0, FLT_MAX, "Proportional Size", "", 0, 100);
}
@@ -309,7 +311,7 @@ void TFM_OT_translation(struct wmOperatorType *ot)
Properties_Proportional(ot);
- RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Edition", "");
+ RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Editing", "");
Properties_Constraints(ot);
@@ -334,7 +336,7 @@ void TFM_OT_resize(struct wmOperatorType *ot)
Properties_Proportional(ot);
- RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Edition", "");
+ RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Editing", "");
Properties_Constraints(ot);
@@ -359,7 +361,7 @@ void TFM_OT_rotation(struct wmOperatorType *ot)
Properties_Proportional(ot);
- RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Edition", "");
+ RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Editing", "");
Properties_Constraints(ot);
@@ -384,7 +386,7 @@ void TFM_OT_tilt(struct wmOperatorType *ot)
Properties_Proportional(ot);
- RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Edition", "");
+ RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Editing", "");
Properties_Constraints(ot);
}
@@ -407,7 +409,7 @@ void TFM_OT_warp(struct wmOperatorType *ot)
Properties_Proportional(ot);
- RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Edition", "");
+ RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Editing", "");
// XXX Shear axis?
// Properties_Constraints(ot);
@@ -431,7 +433,7 @@ void TFM_OT_shear(struct wmOperatorType *ot)
Properties_Proportional(ot);
- RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Edition", "");
+ RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Editing", "");
// XXX Shear axis?
// Properties_Constraints(ot);
@@ -455,7 +457,7 @@ void TFM_OT_shrink_fatten(struct wmOperatorType *ot)
Properties_Proportional(ot);
- RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Edition", "");
+ RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Editing", "");
}
void TFM_OT_tosphere(struct wmOperatorType *ot)
@@ -476,7 +478,7 @@ void TFM_OT_tosphere(struct wmOperatorType *ot)
Properties_Proportional(ot);
- RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Edition", "");
+ RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Editing", "");
}
void TFM_OT_transform(struct wmOperatorType *ot)
@@ -528,7 +530,7 @@ void TFM_OT_transform(struct wmOperatorType *ot)
RNA_def_float_vector(ot->srna, "value", 4, NULL, -FLT_MAX, FLT_MAX, "Values", "", -FLT_MAX, FLT_MAX);
Properties_Proportional(ot);
- RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Edition", "");
+ RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Editing", "");
RNA_def_boolean_vector(ot->srna, "constraint_axis", 3, NULL, "Constraint Axis", "");
RNA_def_int(ot->srna, "constraint_orientation", 0, 0, INT_MAX, "Constraint Orientation", "", 0, INT_MAX);
diff --git a/source/blender/editors/transform/transform_orientations.c b/source/blender/editors/transform/transform_orientations.c
index c2f10e6798d..332a1e5a324 100644
--- a/source/blender/editors/transform/transform_orientations.c
+++ b/source/blender/editors/transform/transform_orientations.c
@@ -355,19 +355,19 @@ void BIF_selectTransformOrientationValue(bContext *C, int orientation) {
v3d->twmode = orientation;
}
-void BIF_menuTransformOrientation(bContext *C, uiMenuItem *head, void *arg)
+void BIF_menuTransformOrientation(bContext *C, uiLayout *layout, void *arg)
{
ListBase *transform_spaces = &CTX_data_scene(C)->transform_spaces;
TransformOrientation *ts;
int i= V3D_MANIP_CUSTOM;
- uiMenuItemEnumO(head, "", 0, "TFM_OT_select_orientation", "orientation", V3D_MANIP_GLOBAL);
- uiMenuItemEnumO(head, "", 0, "TFM_OT_select_orientation", "orientation", V3D_MANIP_LOCAL);
- uiMenuItemEnumO(head, "", 0, "TFM_OT_select_orientation", "orientation", V3D_MANIP_NORMAL);
- uiMenuItemEnumO(head, "", 0, "TFM_OT_select_orientation", "orientation", V3D_MANIP_VIEW);
+ uiItemEnumO(layout, NULL, 0, "TFM_OT_select_orientation", "orientation", V3D_MANIP_GLOBAL);
+ uiItemEnumO(layout, NULL, 0, "TFM_OT_select_orientation", "orientation", V3D_MANIP_LOCAL);
+ uiItemEnumO(layout, NULL, 0, "TFM_OT_select_orientation", "orientation", V3D_MANIP_NORMAL);
+ uiItemEnumO(layout, NULL, 0, "TFM_OT_select_orientation", "orientation", V3D_MANIP_VIEW);
for(ts = transform_spaces->first; ts; ts = ts->next)
- uiMenuItemIntO(head, ts->name, 0, "TFM_OT_select_orientation", "custom_index", i++);
+ uiItemIntO(layout, ts->name, 0, "TFM_OT_select_orientation", "custom_index", i++);
}
char * BIF_menustringTransformOrientation(const bContext *C, char *title) {
@@ -406,7 +406,6 @@ int BIF_countTransformOrientation(const bContext *C) {
void applyTransformOrientation(bContext *C, TransInfo *t) {
TransformOrientation *ts;
View3D *v3d = CTX_wm_view3d(C);
- RegionView3D *rv3d= CTX_wm_region_view3d(C);
int selected_index = (v3d->twmode - V3D_MANIP_CUSTOM);
int i;
@@ -415,7 +414,6 @@ void applyTransformOrientation(bContext *C, TransInfo *t) {
if (selected_index == i) {
strcpy(t->spacename, ts->name);
Mat3CpyMat3(t->spacemtx, ts->mat);
- Mat4CpyMat3(rv3d->twmat, ts->mat);
break;
}
}
@@ -449,14 +447,11 @@ static int count_bone_select(bArmature *arm, ListBase *lb, int do_it)
void initTransformOrientation(bContext *C, TransInfo *t)
{
View3D *v3d = CTX_wm_view3d(C);
- RegionView3D *rv3d = CTX_wm_region_view3d(C);
Object *ob = CTX_data_active_object(C);
Object *obedit = CTX_data_active_object(C);
float normal[3]={0.0, 0.0, 0.0};
float plane[3]={0.0, 0.0, 0.0};
- if(t->spacetype != SPACE_VIEW3D) return;
-
switch(t->current_orientation) {
case V3D_MANIP_GLOBAL:
strcpy(t->spacename, "global");
@@ -501,28 +496,35 @@ void initTransformOrientation(bContext *C, TransInfo *t)
if (type == ORIENTATION_NONE)
{
- Mat4One(rv3d->twmat);
+ Mat3One(t->spacemtx);
}
else
{
- Mat4CpyMat3(rv3d->twmat, mat);
+ Mat3CpyMat3(t->spacemtx, mat);
}
break;
}
/* no break we define 'normal' as 'local' in Object mode */
case V3D_MANIP_LOCAL:
strcpy(t->spacename, "local");
- Mat4CpyMat4(rv3d->twmat, ob->obmat);
- Mat4Ortho(rv3d->twmat);
+ Mat3CpyMat4(t->spacemtx, ob->obmat);
+ Mat3Ortho(t->spacemtx);
break;
case V3D_MANIP_VIEW:
+ if (t->ar->regiontype == RGN_TYPE_WINDOW)
{
+ RegionView3D *rv3d = t->ar->regiondata;
float mat[3][3];
+
strcpy(t->spacename, "view");
Mat3CpyMat4(mat, rv3d->viewinv);
Mat3Ortho(mat);
- Mat4CpyMat3(rv3d->twmat, mat);
+ Mat3CpyMat3(t->spacemtx, mat);
+ }
+ else
+ {
+ Mat3One(t->spacemtx);
}
break;
default: /* V3D_MANIP_CUSTOM */
diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.c
index 0ce29075b61..8dd203d95ce 100644
--- a/source/blender/editors/transform/transform_snap.c
+++ b/source/blender/editors/transform/transform_snap.c
@@ -556,13 +556,13 @@ void CalcSnapGeometry(TransInfo *t, float *vec)
peelObjectsTransForm(t, &depth_peels, t->mval);
-// if (stk->nb_points > 0 && stk->points[stk->nb_points - 1].type == PT_CONTINUOUS)
+// if (LAST_SNAP_POINT_VALID)
// {
-// last_p = stk->points[stk->nb_points - 1].p;
+// last_p = LAST_SNAP_POINT;
// }
-// else if (LAST_SNAP_POINT_VALID)
+// else
// {
-// last_p = LAST_SNAP_POINT;
+ last_p = t->tsnap.snapPoint;
// }
@@ -1633,13 +1633,26 @@ int peelObjects(Scene *scene, View3D *v3d, ARegion *ar, Object *obedit, ListBase
if (ob->type == OB_MESH) {
#if 0 //BMESH_TODO
- DerivedMesh *dm;
+ EditMesh *em;
+ DerivedMesh *dm = NULL;
int val;
-
- val = peelDerivedMesh(ob, dm, dupli_ob->mat, ray_start, ray_normal, mval, depth_peels);
-
+
+ if (ob != obedit)
+ {
+ dm = mesh_get_derived_final(scene, ob, CD_MASK_BAREMESH);
+
+ val = peelDerivedMesh(ob, dm, ob->obmat, ray_start, ray_normal, mval, depth_peels);
+ }
+ else
+ {
+ em = ((Mesh *)ob->data)->edit_mesh;
+ dm = editmesh_get_derived_cage(scene, obedit, em, CD_MASK_BAREMESH);
+
+ val = peelDerivedMesh(ob, dm, ob->obmat, ray_start, ray_normal, mval, depth_peels);
+ }
+
retval = retval || val;
-
+
dm->release(dm);
#endif
}
diff --git a/source/blender/editors/util/ed_util.c b/source/blender/editors/util/ed_util.c
index 4824d90f5bd..93760ab77e3 100644
--- a/source/blender/editors/util/ed_util.c
+++ b/source/blender/editors/util/ed_util.c
@@ -42,49 +42,56 @@
#include "BKE_context.h"
#include "BKE_global.h"
+#include "BKE_main.h"
#include "ED_armature.h"
#include "ED_mesh.h"
#include "ED_sculpt.h"
#include "ED_util.h"
-#include "UI_text.h"
+#include "UI_interface.h"
/* ********* general editor util funcs, not BKE stuff please! ********* */
+/* frees all editmode stuff */
void ED_editors_exit(bContext *C)
{
- Object *ob= CTX_data_edit_object(C);
+ Scene *sce;
/* frees all editmode undos */
undo_editmode_clear();
undo_imagepaint_clear();
- /* global in meshtools... */
- mesh_octree_table(ob, NULL, NULL, 'e');
-
- if(ob) {
- if(ob->type==OB_MESH) {
- Mesh *me= ob->data;
- if(me->edit_btmesh) {
- EDBM_FreeEditBMesh(me->edit_btmesh);
- MEM_freeN(me->edit_btmesh);
- me->edit_btmesh= NULL;
+ for(sce=G.main->scene.first; sce; sce= sce->id.next) {
+ if(sce->obedit) {
+ Object *ob= sce->obedit;
+
+ /* global in meshtools... */
+ mesh_octree_table(ob, NULL, NULL, 'e');
+
+ if(ob) {
+ if(ob->type==OB_MESH) {
+ Mesh *me= ob->data;
+ if(me->edit_btmesh) {
+ EDBM_FreeEditBMesh(me->edit_btmesh);
+ MEM_freeN(me->edit_btmesh);
+ me->edit_btmesh= NULL;
+ }
+ }
+ else if(ob->type==OB_ARMATURE) {
+ ED_armature_edit_free(ob);
+ }
+ else if(ob->type==OB_FONT) {
+ // free_editText();
+ }
+ // else if(ob->type==OB_MBALL)
+ // BLI_freelistN(&editelems);
+ // free_editLatt();
+ // free_posebuf();
}
}
- else if(ob->type==OB_ARMATURE) {
- ED_armature_edit_free(ob);
- }
- else if(ob->type==OB_FONT) {
- // free_editText();
- }
- // else if(ob->type==OB_MBALL)
- // BLI_freelistN(&editelems);
}
- // free_editLatt();
- // free_posebuf();
-
}
@@ -115,7 +122,7 @@ int GetButStringLength(char *str)
{
int rt;
- rt= UI_GetStringWidth(G.font, str, (U.transopts & USER_TR_BUTTONS));
+ rt= UI_GetStringWidth(str);
return rt + 15;
}
diff --git a/source/blender/editors/util/editmode_undo.c b/source/blender/editors/util/editmode_undo.c
index d813069a4a8..8484ad78bc4 100644
--- a/source/blender/editors/util/editmode_undo.c
+++ b/source/blender/editors/util/editmode_undo.c
@@ -343,7 +343,7 @@ uiBlock *editmode_undohistorymenu(bContext *C, ARegion *ar, void *arg_unused)
undo_clean_stack(C); // removes other objects from it
- block= uiBeginBlock(C, ar, "view3d_edit_mesh_undohistorymenu", UI_EMBOSSP, UI_HELV);
+ block= uiBeginBlock(C, ar, "view3d_edit_mesh_undohistorymenu", UI_EMBOSSP);
uiBlockSetButmFunc(block, do_editmode_undohistorymenu, NULL);
for(uel= undobase.first; uel; uel= uel->next, item++) {
diff --git a/source/blender/editors/util/undo.c b/source/blender/editors/util/undo.c
index 0b0919ff981..62ce76a7614 100644
--- a/source/blender/editors/util/undo.c
+++ b/source/blender/editors/util/undo.c
@@ -176,6 +176,10 @@ void ED_undo_pop(bContext *C)
{
ed_undo_step(C, 1);
}
+void ED_undo_redo(bContext *C)
+{
+ ed_undo_step(C, -1);
+}
static int ed_undo_exec(bContext *C, wmOperator *op)
{
diff --git a/source/blender/editors/uvedit/uvedit_draw.c b/source/blender/editors/uvedit/uvedit_draw.c
index 74ffc0b0725..372caa5564e 100644
--- a/source/blender/editors/uvedit/uvedit_draw.c
+++ b/source/blender/editors/uvedit/uvedit_draw.c
@@ -38,6 +38,7 @@
#include "BKE_customdata.h"
#include "BKE_DerivedMesh.h"
+#include "BKE_mesh.h"
#include "BKE_object.h"
#include "BKE_utildefines.h"
#include "BKE_mesh.h"
@@ -121,7 +122,7 @@ static void draw_uvs_shadow(SpaceImage *sima, Object *obedit)
EditFace *efa;
TFace *tf;
- em= EM_GetEditMesh((Mesh*)obedit->data);
+ em= BKE_mesh_get_editmesh((Mesh*)obedit->data);
/* draws the grey mesh when painting */
glColor3ub(112, 112, 112);
@@ -137,7 +138,7 @@ static void draw_uvs_shadow(SpaceImage *sima, Object *obedit)
glEnd();
}
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
}
static int draw_uvs_dm_shadow(DerivedMesh *dm)
@@ -429,7 +430,7 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit)
int drawfaces, interpedges, lastsel, sel;
Image *ima= sima->image;
- em= EM_GetEditMesh(me);
+ em= BKE_mesh_get_editmesh(me);
activetf= EM_get_active_mtface(em, &efa_act, NULL, 0); /* will be set to NULL if hidden */
settings= scene->toolsettings;
@@ -450,7 +451,7 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit)
/* first try existing derivedmesh */
if(!draw_uvs_dm_shadow(em->derivedFinal)) {
/* create one if it does not exist */
- cagedm = editbmesh_get_derived_cage_and_final(scene, obedit, em, &finaldm, CD_MASK_BAREMESH|CD_MASK_MTFACE);
+ cagedm = editbmesh_get_derived_cage_and_final(scene, obedit, me->edit_btmesh, &finaldm, CD_MASK_BAREMESH|CD_MASK_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 this */
@@ -827,7 +828,7 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit)
}
glPointSize(1.0);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
}
void draw_uvedit_main(SpaceImage *sima, ARegion *ar, Scene *scene, Object *obedit)
diff --git a/source/blender/editors/uvedit/uvedit_ops.c b/source/blender/editors/uvedit/uvedit_ops.c
index 17b2aff1b21..517d204ac8e 100644
--- a/source/blender/editors/uvedit/uvedit_ops.c
+++ b/source/blender/editors/uvedit/uvedit_ops.c
@@ -81,9 +81,9 @@ int ED_uvedit_test(Object *obedit)
if(obedit->type != OB_MESH)
return 0;
- em = EM_GetEditMesh(obedit->data);
+ em = BKE_mesh_get_editmesh(obedit->data);
ret = EM_texFaceCheck(em);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return ret;
}
@@ -105,9 +105,9 @@ void ED_uvedit_assign_image(Scene *scene, Object *obedit, Image *ima, Image *pre
if(!obedit || (obedit->type != OB_MESH))
return;
- em= EM_GetEditMesh(((Mesh*)obedit->data));
+ em= BKE_mesh_get_editmesh(((Mesh*)obedit->data));
if(!em || !em->faces.first) {
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return;
}
@@ -145,7 +145,7 @@ void ED_uvedit_assign_image(Scene *scene, Object *obedit, Image *ima, Image *pre
if(update)
DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
}
/* dotile - 1, set the tile flag (from the space image)
@@ -164,7 +164,7 @@ void ED_uvedit_set_tile(bContext *C, Scene *scene, Object *obedit, Image *ima, i
if(ima->type==IMA_TYPE_R_RESULT || ima->type==IMA_TYPE_COMPOSITE)
return;
- em= EM_GetEditMesh((Mesh*)obedit->data);
+ em= BKE_mesh_get_editmesh((Mesh*)obedit->data);
for(efa= em->faces.first; efa; efa= efa->next) {
tf = CustomData_em_get(&em->fdata, efa->data, CD_MTFACE);
@@ -184,7 +184,7 @@ void ED_uvedit_set_tile(bContext *C, Scene *scene, Object *obedit, Image *ima, i
DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, obedit);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
}
/*********************** space conversion *********************/
@@ -368,7 +368,7 @@ void uv_copy_aspect(float uv_orig[][2], float uv[][2], float aspx, float aspy)
int ED_uvedit_minmax(Scene *scene, Image *ima, Object *obedit, float *min, float *max)
{
- EditMesh *em= EM_GetEditMesh((Mesh*)obedit->data);
+ EditMesh *em= BKE_mesh_get_editmesh((Mesh*)obedit->data);
EditFace *efa;
MTFace *tf;
int sel;
@@ -386,13 +386,13 @@ int ED_uvedit_minmax(Scene *scene, Image *ima, Object *obedit, float *min, float
}
}
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return sel;
}
int uvedit_center(Scene *scene, Image *ima, Object *obedit, float *cent, int mode)
{
- EditMesh *em= EM_GetEditMesh((Mesh*)obedit->data);
+ EditMesh *em= BKE_mesh_get_editmesh((Mesh*)obedit->data);
EditFace *efa;
MTFace *tf;
float min[2], max[2];
@@ -421,11 +421,11 @@ int uvedit_center(Scene *scene, Image *ima, Object *obedit, float *cent, int mod
cent[0]= (min[0]+max[0])/2.0;
cent[1]= (min[1]+max[1])/2.0;
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return 1;
}
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return 0;
}
@@ -584,7 +584,7 @@ static void find_nearest_uv_vert(Scene *scene, Image *ima, EditMesh *em, float c
int ED_uvedit_nearest_uv(Scene *scene, Object *obedit, Image *ima, float co[2], float uv[2])
{
- EditMesh *em= EM_GetEditMesh((Mesh*)obedit->data);
+ EditMesh *em= BKE_mesh_get_editmesh((Mesh*)obedit->data);
EditFace *efa;
MTFace *tf;
float mindist, dist;
@@ -614,7 +614,7 @@ int ED_uvedit_nearest_uv(Scene *scene, Object *obedit, Image *ima, float co[2],
}
}
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return found;
}
@@ -994,7 +994,7 @@ static void weld_align_uv(bContext *C, int tool)
scene= CTX_data_scene(C);
obedit= CTX_data_edit_object(C);
- em= EM_GetEditMesh((Mesh*)obedit->data);
+ em= BKE_mesh_get_editmesh((Mesh*)obedit->data);
ima= CTX_data_edit_image(C);
INIT_MINMAX2(min, max);
@@ -1055,7 +1055,7 @@ static void weld_align_uv(bContext *C, int tool)
DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, obedit);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
}
static int align_exec(bContext *C, wmOperator *op)
@@ -1129,7 +1129,7 @@ static int stitch_exec(bContext *C, wmOperator *op)
sima= (SpaceImage*)CTX_wm_space_data(C);
scene= CTX_data_scene(C);
obedit= CTX_data_edit_object(C);
- em= EM_GetEditMesh((Mesh*)obedit->data);
+ em= BKE_mesh_get_editmesh((Mesh*)obedit->data);
ima= CTX_data_edit_image(C);
if(RNA_boolean_get(op->ptr, "use_limit")) {
@@ -1145,7 +1145,7 @@ static int stitch_exec(bContext *C, wmOperator *op)
vmap= EM_make_uv_vert_map(em, 1, 0, limit);
if(vmap == NULL) {
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_CANCELLED;
}
@@ -1276,7 +1276,7 @@ static int stitch_exec(bContext *C, wmOperator *op)
DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, obedit);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
@@ -1309,7 +1309,7 @@ static int select_inverse_exec(bContext *C, wmOperator *op)
scene= CTX_data_scene(C);
obedit= CTX_data_edit_object(C);
- em= EM_GetEditMesh((Mesh*)obedit->data);
+ em= BKE_mesh_get_editmesh((Mesh*)obedit->data);
ima= CTX_data_edit_image(C);
if(scene->toolsettings->uv_flag & UV_SYNC_SELECTION) {
@@ -1330,7 +1330,7 @@ static int select_inverse_exec(bContext *C, wmOperator *op)
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
@@ -1360,7 +1360,7 @@ static int de_select_all_exec(bContext *C, wmOperator *op)
scene= CTX_data_scene(C);
obedit= CTX_data_edit_object(C);
- em= EM_GetEditMesh((Mesh*)obedit->data);
+ em= BKE_mesh_get_editmesh((Mesh*)obedit->data);
ima= CTX_data_edit_image(C);
if(scene->toolsettings->uv_flag & UV_SYNC_SELECTION) {
@@ -1398,7 +1398,7 @@ static int de_select_all_exec(bContext *C, wmOperator *op)
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
@@ -1445,7 +1445,7 @@ static int mouse_select(bContext *C, float co[2], int extend, int loop)
Scene *scene= CTX_data_scene(C);
Object *obedit= CTX_data_edit_object(C);
Image *ima= CTX_data_edit_image(C);
- EditMesh *em= EM_GetEditMesh((Mesh*)obedit->data);
+ EditMesh *em= BKE_mesh_get_editmesh((Mesh*)obedit->data);
EditFace *efa;
MTFace *tf;
NearestHit hit;
@@ -1480,7 +1480,7 @@ static int mouse_select(bContext *C, float co[2], int extend, int loop)
/* find edge */
find_nearest_uv_edge(scene, ima, em, co, &hit);
if(hit.efa == NULL) {
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_CANCELLED;
}
}
@@ -1488,7 +1488,7 @@ static int mouse_select(bContext *C, float co[2], int extend, int loop)
/* find vertex */
find_nearest_uv_vert(scene, ima, em, co, penalty, &hit);
if(hit.efa == NULL) {
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_CANCELLED;
}
@@ -1503,7 +1503,7 @@ static int mouse_select(bContext *C, float co[2], int extend, int loop)
/* find edge */
find_nearest_uv_edge(scene, ima, em, co, &hit);
if(hit.efa == NULL) {
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_CANCELLED;
}
@@ -1522,7 +1522,7 @@ static int mouse_select(bContext *C, float co[2], int extend, int loop)
/* find face */
find_nearest_uv_face(scene, ima, em, co, &hit);
if(hit.efa == NULL) {
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_CANCELLED;
}
@@ -1544,12 +1544,12 @@ static int mouse_select(bContext *C, float co[2], int extend, int loop)
find_nearest_uv_vert(scene, ima, em, co, NULL, &hit);
if(hit.efa==NULL) {
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_CANCELLED;
}
}
else {
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_CANCELLED;
}
@@ -1702,7 +1702,7 @@ static int mouse_select(bContext *C, float co[2], int extend, int loop)
DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_PASS_THROUGH|OPERATOR_FINISHED;
}
@@ -1808,13 +1808,13 @@ static int select_linked_exec(bContext *C, wmOperator *op)
Scene *scene= CTX_data_scene(C);
Object *obedit= CTX_data_edit_object(C);
Image *ima= CTX_data_edit_image(C);
- EditMesh *em= EM_GetEditMesh((Mesh*)obedit->data);
+ EditMesh *em= BKE_mesh_get_editmesh((Mesh*)obedit->data);
float limit[2];
int extend;
if(scene->toolsettings->uv_flag & UV_SYNC_SELECTION) {
BKE_report(op->reports, RPT_ERROR, "Can't select linked when sync selection is enabled.");
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_CANCELLED;
}
@@ -1825,7 +1825,7 @@ static int select_linked_exec(bContext *C, wmOperator *op)
DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
@@ -1852,13 +1852,13 @@ static int unlink_selection_exec(bContext *C, wmOperator *op)
Scene *scene= CTX_data_scene(C);
Object *obedit= CTX_data_edit_object(C);
Image *ima= CTX_data_edit_image(C);
- EditMesh *em= EM_GetEditMesh((Mesh*)obedit->data);
+ EditMesh *em= BKE_mesh_get_editmesh((Mesh*)obedit->data);
EditFace *efa;
MTFace *tf;
if(scene->toolsettings->uv_flag & UV_SYNC_SELECTION) {
BKE_report(op->reports, RPT_ERROR, "Can't unlink selection when sync selection is enabled.");
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_CANCELLED;
}
@@ -1880,7 +1880,7 @@ static int unlink_selection_exec(bContext *C, wmOperator *op)
DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
@@ -1913,7 +1913,7 @@ static void uv_faces_do_sticky(bContext *C, SpaceImage *sima, Scene *scene, Obje
* This only needs to be done when the Mesh is not used for
* selection (so for sticky modes, vertex or location based). */
- EditMesh *em= EM_GetEditMesh((Mesh*)obedit->data);
+ EditMesh *em= BKE_mesh_get_editmesh((Mesh*)obedit->data);
EditFace *efa;
MTFace *tf;
int nverts, i;
@@ -1969,7 +1969,7 @@ static void uv_faces_do_sticky(bContext *C, SpaceImage *sima, Scene *scene, Obje
eve->tmp.l = a; */
if(vmap == NULL) {
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return;
}
@@ -2031,7 +2031,7 @@ static void uv_faces_do_sticky(bContext *C, SpaceImage *sima, Scene *scene, Obje
}
}
}
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
}
static int border_select_exec(bContext *C, wmOperator *op)
@@ -2041,7 +2041,7 @@ static int border_select_exec(bContext *C, wmOperator *op)
Object *obedit= CTX_data_edit_object(C);
Image *ima= CTX_data_edit_image(C);
ARegion *ar= CTX_wm_region(C);
- EditMesh *em= EM_GetEditMesh((Mesh*)obedit->data);
+ EditMesh *em= BKE_mesh_get_editmesh((Mesh*)obedit->data);
EditFace *efa;
MTFace *tface;
rcti rect;
@@ -2154,11 +2154,11 @@ static int border_select_exec(bContext *C, wmOperator *op)
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
-
- EM_EndEditMesh(obedit->data, em);
+
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_CANCELLED;
}
@@ -2211,7 +2211,7 @@ int circle_select_exec(bContext *C, wmOperator *op)
SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C);
Scene *scene= CTX_data_scene(C);
Object *obedit= CTX_data_edit_object(C);
- EditMesh *em= EM_GetEditMesh((Mesh*)obedit->data);
+ EditMesh *em= BKE_mesh_get_editmesh((Mesh*)obedit->data);
ARegion *ar= CTX_wm_region(C);
EditFace *efa;
MTFace *tface;
@@ -2249,7 +2249,7 @@ int circle_select_exec(bContext *C, wmOperator *op)
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
@@ -2347,7 +2347,7 @@ void UV_OT_snap_cursor(wmOperatorType *ot)
static int snap_uvs_to_cursor(Scene *scene, Image *ima, Object *obedit, View2D *v2d)
{
- EditMesh *em= EM_GetEditMesh((Mesh*)obedit->data);
+ EditMesh *em= BKE_mesh_get_editmesh((Mesh*)obedit->data);
EditFace *efa;
MTFace *tface;
short change= 0;
@@ -2365,13 +2365,13 @@ static int snap_uvs_to_cursor(Scene *scene, Image *ima, Object *obedit, View2D *
}
}
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return change;
}
static int snap_uvs_to_adjacent_unselected(Scene *scene, Image *ima, Object *obedit)
{
- EditMesh *em= EM_GetEditMesh((Mesh*)obedit->data);
+ EditMesh *em= BKE_mesh_get_editmesh((Mesh*)obedit->data);
EditFace *efa;
EditVert *eve;
MTFace *tface;
@@ -2446,7 +2446,7 @@ static int snap_uvs_to_adjacent_unselected(Scene *scene, Image *ima, Object *obe
if(!change) {
MEM_freeN(coords);
MEM_freeN(usercount);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return change;
}
@@ -2493,13 +2493,13 @@ static int snap_uvs_to_adjacent_unselected(Scene *scene, Image *ima, Object *obe
MEM_freeN(coords);
MEM_freeN(usercount);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return change;
}
static int snap_uvs_to_pixels(SpaceImage *sima, Scene *scene, Object *obedit)
{
- EditMesh *em= EM_GetEditMesh((Mesh*)obedit->data);
+ EditMesh *em= BKE_mesh_get_editmesh((Mesh*)obedit->data);
Image *ima= sima->image;
EditFace *efa;
MTFace *tface;
@@ -2524,7 +2524,7 @@ static int snap_uvs_to_pixels(SpaceImage *sima, Scene *scene, Object *obedit)
}
}
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return change;
}
@@ -2586,7 +2586,7 @@ static int pin_exec(bContext *C, wmOperator *op)
Scene *scene= CTX_data_scene(C);
Object *obedit= CTX_data_edit_object(C);
Image *ima= CTX_data_edit_image(C);
- EditMesh *em= EM_GetEditMesh((Mesh*)obedit->data);
+ EditMesh *em= BKE_mesh_get_editmesh((Mesh*)obedit->data);
EditFace *efa;
MTFace *tface;
int clear= RNA_boolean_get(op->ptr, "clear");
@@ -2614,7 +2614,7 @@ static int pin_exec(bContext *C, wmOperator *op)
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, obedit);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
@@ -2640,7 +2640,7 @@ static int select_pinned_exec(bContext *C, wmOperator *op)
Scene *scene= CTX_data_scene(C);
Object *obedit= CTX_data_edit_object(C);
Image *ima= CTX_data_edit_image(C);
- EditMesh *em= EM_GetEditMesh((Mesh*)obedit->data);
+ EditMesh *em= BKE_mesh_get_editmesh((Mesh*)obedit->data);
EditFace *efa;
MTFace *tface;
@@ -2659,7 +2659,7 @@ static int select_pinned_exec(bContext *C, wmOperator *op)
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
@@ -2682,7 +2682,7 @@ static int hide_exec(bContext *C, wmOperator *op)
SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C);
Scene *scene= CTX_data_scene(C);
Object *obedit= CTX_data_edit_object(C);
- EditMesh *em= EM_GetEditMesh((Mesh*)obedit->data);
+ EditMesh *em= BKE_mesh_get_editmesh((Mesh*)obedit->data);
EditFace *efa;
MTFace *tf;
int swap= RNA_boolean_get(op->ptr, "unselected");
@@ -2691,7 +2691,8 @@ static int hide_exec(bContext *C, wmOperator *op)
EM_hide_mesh(em, swap);
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
- EM_EndEditMesh(obedit->data, em);
+
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
@@ -2799,7 +2800,7 @@ static int hide_exec(bContext *C, wmOperator *op)
EM_validate_selections(em);
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
@@ -2825,7 +2826,7 @@ static int reveal_exec(bContext *C, wmOperator *op)
SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C);
Scene *scene= CTX_data_scene(C);
Object *obedit= CTX_data_edit_object(C);
- EditMesh *em= EM_GetEditMesh((Mesh*)obedit->data);
+ EditMesh *em= BKE_mesh_get_editmesh((Mesh*)obedit->data);
EditFace *efa;
MTFace *tf;
@@ -2834,7 +2835,7 @@ static int reveal_exec(bContext *C, wmOperator *op)
EM_reveal_mesh(em);
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
@@ -2930,7 +2931,7 @@ static int reveal_exec(bContext *C, wmOperator *op)
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
diff --git a/source/blender/editors/uvedit/uvedit_parametrizer.c b/source/blender/editors/uvedit/uvedit_parametrizer.c
index 0fcd0062044..5cc471ebc22 100644
--- a/source/blender/editors/uvedit/uvedit_parametrizer.c
+++ b/source/blender/editors/uvedit/uvedit_parametrizer.c
@@ -4311,8 +4311,8 @@ void param_smooth_area(ParamHandle *handle)
}
}
-void param_pack(ParamHandle *handle)
-{
+void param_pack(ParamHandle *handle, float margin)
+{
/* box packing variables */
boxPack *boxarray, *box;
float tot_width, tot_height, scale;
@@ -4320,6 +4320,7 @@ void param_pack(ParamHandle *handle)
PChart *chart;
int i, unpacked=0;
float trans[2];
+ double area= 0.0;
PHandle *phandle = (PHandle*)handle;
@@ -4332,6 +4333,7 @@ void param_pack(ParamHandle *handle)
/* we may not use all these boxes */
boxarray = MEM_mallocN( phandle->ncharts*sizeof(boxPack), "boxPack box");
+
for (i = 0; i < phandle->ncharts; i++) {
chart = phandle->charts[i];
@@ -4352,6 +4354,32 @@ void param_pack(ParamHandle *handle)
box->w = chart->u.pack.size[0] + trans[0];
box->h = chart->u.pack.size[1] + trans[1];
box->index = i; /* warning this index skips PCHART_NOPACK boxes */
+
+ if(margin>0.0f)
+ area += sqrt(box->w*box->h);
+ }
+
+ if(margin>0.0f) {
+ /* multiply the margin by the area to give pradictable results not dependant on UV scale,
+ * ...Without using the area running pack multiple times also gives a bad feedback loop.
+ * multiply by 0.1 so the margin value from the UI can be from 0.0 to 1.0 but not give a massive margin */
+ margin = (margin*(float)area) * 0.1;
+ unpacked= 0;
+ for (i = 0; i < phandle->ncharts; i++) {
+ chart = phandle->charts[i];
+
+ if (chart->flag & PCHART_NOPACK) {
+ unpacked++;
+ continue;
+ }
+
+ box = boxarray+(i-unpacked);
+ trans[0] = margin * area;
+ trans[1] = margin * area;
+ p_chart_uv_translate(chart, trans);
+ box->w += (margin * area) *2;
+ box->h += (margin * area) *2;
+ }
}
boxPack2D(boxarray, phandle->ncharts-unpacked, &tot_width, &tot_height);
diff --git a/source/blender/editors/uvedit/uvedit_parametrizer.h b/source/blender/editors/uvedit/uvedit_parametrizer.h
index c468b8d62c5..f1454ee3865 100644
--- a/source/blender/editors/uvedit/uvedit_parametrizer.h
+++ b/source/blender/editors/uvedit/uvedit_parametrizer.h
@@ -73,7 +73,7 @@ void param_smooth_area(ParamHandle *handle);
/* Packing */
-void param_pack(ParamHandle *handle);
+void param_pack(ParamHandle *handle, float margin);
/* Average area for all charts */
diff --git a/source/blender/editors/uvedit/uvedit_unwrap_ops.c b/source/blender/editors/uvedit/uvedit_unwrap_ops.c
index e8a0de28658..27d0c68ec36 100644
--- a/source/blender/editors/uvedit/uvedit_unwrap_ops.c
+++ b/source/blender/editors/uvedit/uvedit_unwrap_ops.c
@@ -72,12 +72,12 @@
static int ED_uvedit_ensure_uvs(bContext *C, Scene *scene, Object *obedit)
{
- EditMesh *em= EM_GetEditMesh((Mesh*)obedit->data);
+ EditMesh *em= BKE_mesh_get_editmesh((Mesh*)obedit->data);
EditFace *efa;
MTFace *tf;
if(ED_uvedit_test(obedit)) {
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return 1;
}
@@ -85,7 +85,7 @@ static int ED_uvedit_ensure_uvs(bContext *C, Scene *scene, Object *obedit)
EM_add_data_layer(em, &em->fdata, CD_MTFACE);
if(!ED_uvedit_test(obedit)) {
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return 0;
}
@@ -99,7 +99,7 @@ static int ED_uvedit_ensure_uvs(bContext *C, Scene *scene, Object *obedit)
uvedit_face_select(scene, efa, tf);
}
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return 1;
}
@@ -223,7 +223,7 @@ static void minimize_stretch_init(bContext *C, wmOperator *op)
{
Scene *scene= CTX_data_scene(C);
Object *obedit= CTX_data_edit_object(C);
- EditMesh *em= EM_GetEditMesh((Mesh*)obedit->data);
+ EditMesh *em= BKE_mesh_get_editmesh((Mesh*)obedit->data);
MinStretch *ms;
int fill_holes= RNA_boolean_get(op->ptr, "fill_holes");
@@ -405,18 +405,18 @@ static int pack_islands_exec(bContext *C, wmOperator *op)
{
Scene *scene= CTX_data_scene(C);
Object *obedit= CTX_data_edit_object(C);
- EditMesh *em= EM_GetEditMesh((Mesh*)obedit->data);
+ EditMesh *em= BKE_mesh_get_editmesh((Mesh*)obedit->data);
ParamHandle *handle;
handle = construct_param_handle(scene, em, 1, 0, 1, 1);
- param_pack(handle);
+ param_pack(handle, scene->toolsettings->uvcalc_margin);
param_flush(handle);
param_delete(handle);
DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, obedit);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
@@ -438,7 +438,7 @@ static int average_islands_scale_exec(bContext *C, wmOperator *op)
{
Scene *scene= CTX_data_scene(C);
Object *obedit= CTX_data_edit_object(C);
- EditMesh *em= EM_GetEditMesh((Mesh*)obedit->data);
+ EditMesh *em= BKE_mesh_get_editmesh((Mesh*)obedit->data);
ParamHandle *handle;
handle= construct_param_handle(scene, em, 1, 0, 1, 1);
@@ -449,7 +449,7 @@ static int average_islands_scale_exec(bContext *C, wmOperator *op)
DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, obedit);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
@@ -471,19 +471,19 @@ static ParamHandle *liveHandle = NULL;
void ED_uvedit_live_unwrap_begin(Scene *scene, Object *obedit)
{
- EditMesh *em= EM_GetEditMesh((Mesh*)obedit->data);
+ EditMesh *em= BKE_mesh_get_editmesh((Mesh*)obedit->data);
short abf = scene->toolsettings->unwrapper == 1;
short fillholes = scene->toolsettings->uvcalc_flag & UVCALC_FILLHOLES;
if(!ED_uvedit_test(obedit)) {
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return;
}
liveHandle = construct_param_handle(scene, em, 0, fillholes, 1, 1);
param_lscm_begin(liveHandle, PARAM_TRUE, abf);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
}
void ED_uvedit_live_unwrap_re_solve(void)
@@ -606,7 +606,7 @@ static void uv_map_transform(bContext *C, wmOperator *op, float center[3], float
/* context checks are messy here, making it work in both 3d view and uv editor */
Scene *scene= CTX_data_scene(C);
Object *obedit= CTX_data_edit_object(C);
- EditMesh *em= EM_GetEditMesh((Mesh*)obedit->data);
+ EditMesh *em= BKE_mesh_get_editmesh((Mesh*)obedit->data);
View3D *v3d= CTX_wm_view3d(C);
RegionView3D *rv3d= CTX_wm_region_view3d(C);
/* common operator properties */
@@ -633,7 +633,7 @@ static void uv_map_transform(bContext *C, wmOperator *op, float center[3], float
else
uv_map_rotation_matrix(rotmat, rv3d, obedit, upangledeg, sideangledeg, radius);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
}
static void uv_transform_properties(wmOperatorType *ot, int radius)
@@ -786,7 +786,7 @@ static int unwrap_exec(bContext *C, wmOperator *op)
{
Scene *scene= CTX_data_scene(C);
Object *obedit= CTX_data_edit_object(C);
- EditMesh *em= EM_GetEditMesh((Mesh*)obedit->data);
+ EditMesh *em= BKE_mesh_get_editmesh((Mesh*)obedit->data);
ParamHandle *handle;
int method = RNA_enum_get(op->ptr, "method");
int fill_holes = RNA_boolean_get(op->ptr, "fill_holes");
@@ -794,7 +794,7 @@ static int unwrap_exec(bContext *C, wmOperator *op)
/* add uvs if they don't exist yet */
if(!ED_uvedit_ensure_uvs(C, scene, obedit)) {
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_CANCELLED;
}
@@ -804,7 +804,7 @@ static int unwrap_exec(bContext *C, wmOperator *op)
param_lscm_solve(handle);
param_lscm_end(handle);
- param_pack(handle);
+ param_pack(handle, scene->toolsettings->uvcalc_margin);
param_flush(handle);
@@ -813,7 +813,7 @@ static int unwrap_exec(bContext *C, wmOperator *op)
DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, obedit);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
@@ -898,7 +898,7 @@ static int from_view_exec(bContext *C, wmOperator *op)
{
Scene *scene= CTX_data_scene(C);
Object *obedit= CTX_data_edit_object(C);
- EditMesh *em= EM_GetEditMesh((Mesh*)obedit->data);
+ EditMesh *em= BKE_mesh_get_editmesh((Mesh*)obedit->data);
ARegion *ar= CTX_wm_region(C);
EditFace *efa;
MTFace *tf;
@@ -906,7 +906,7 @@ static int from_view_exec(bContext *C, wmOperator *op)
/* add uvs if they don't exist yet */
if(!ED_uvedit_ensure_uvs(C, scene, obedit)) {
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_CANCELLED;
}
@@ -946,7 +946,7 @@ static int from_view_exec(bContext *C, wmOperator *op)
DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, obedit);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
@@ -982,13 +982,13 @@ static int reset_exec(bContext *C, wmOperator *op)
{
Scene *scene= CTX_data_scene(C);
Object *obedit= CTX_data_edit_object(C);
- EditMesh *em= EM_GetEditMesh((Mesh*)obedit->data);
+ EditMesh *em= BKE_mesh_get_editmesh((Mesh*)obedit->data);
EditFace *efa;
MTFace *tf;
/* add uvs if they don't exist yet */
if(!ED_uvedit_ensure_uvs(C, scene, obedit)) {
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_CANCELLED;
}
@@ -1013,7 +1013,7 @@ static int reset_exec(bContext *C, wmOperator *op)
DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, obedit);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
@@ -1069,14 +1069,14 @@ static int sphere_project_exec(bContext *C, wmOperator *op)
{
Scene *scene= CTX_data_scene(C);
Object *obedit= CTX_data_edit_object(C);
- EditMesh *em= EM_GetEditMesh((Mesh*)obedit->data);
+ EditMesh *em= BKE_mesh_get_editmesh((Mesh*)obedit->data);
EditFace *efa;
MTFace *tf;
float center[3], rotmat[4][4];
/* add uvs if they don't exist yet */
if(!ED_uvedit_ensure_uvs(C, scene, obedit)) {
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_CANCELLED;
}
@@ -1101,7 +1101,7 @@ static int sphere_project_exec(bContext *C, wmOperator *op)
DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, obedit);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
@@ -1141,14 +1141,14 @@ static int cylinder_project_exec(bContext *C, wmOperator *op)
{
Scene *scene= CTX_data_scene(C);
Object *obedit= CTX_data_edit_object(C);
- EditMesh *em= EM_GetEditMesh((Mesh*)obedit->data);
+ EditMesh *em= BKE_mesh_get_editmesh((Mesh*)obedit->data);
EditFace *efa;
MTFace *tf;
float center[3], rotmat[4][4];
/* add uvs if they don't exist yet */
if(!ED_uvedit_ensure_uvs(C, scene, obedit)) {
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_CANCELLED;
}
@@ -1173,7 +1173,7 @@ static int cylinder_project_exec(bContext *C, wmOperator *op)
DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, obedit);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
@@ -1199,7 +1199,7 @@ static int cube_project_exec(bContext *C, wmOperator *op)
{
Scene *scene= CTX_data_scene(C);
Object *obedit= CTX_data_edit_object(C);
- EditMesh *em= EM_GetEditMesh((Mesh*)obedit->data);
+ EditMesh *em= BKE_mesh_get_editmesh((Mesh*)obedit->data);
EditFace *efa;
MTFace *tf;
float no[3], cube_size, *loc, dx, dy;
@@ -1207,7 +1207,7 @@ static int cube_project_exec(bContext *C, wmOperator *op)
/* add uvs if they don't exist yet */
if(!ED_uvedit_ensure_uvs(C, scene, obedit)) {
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_CANCELLED;
}
@@ -1260,7 +1260,7 @@ static int cube_project_exec(bContext *C, wmOperator *op)
DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_DATA, obedit);
- EM_EndEditMesh(obedit->data, em);
+ BKE_mesh_end_editmesh(obedit->data, em);
return OPERATOR_FINISHED;
}
@@ -1284,18 +1284,22 @@ void UV_OT_cube_project(wmOperatorType *ot)
static int mapping_menu_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
- uiMenuItem *head;
-
- head= uiPupMenuBegin("UV Mapping", 0);
- uiMenuItemO(head, 0, "UV_OT_unwrap");
- uiMenuSeparator(head);
- uiMenuItemO(head, 0, "UV_OT_cube_project");
- uiMenuItemO(head, 0, "UV_OT_cylinder_project");
- uiMenuItemO(head, 0, "UV_OT_sphere_project");
- uiMenuItemO(head, 0, "UV_OT_project_from_view");
- uiMenuSeparator(head);
- uiMenuItemO(head, 0, "UV_OT_reset");
- uiPupMenuEnd(C, head);
+ uiPopupMenu *pup;
+ uiLayout *layout;
+
+ pup= uiPupMenuBegin(C, "UV Mapping", 0);
+ layout= uiPupMenuLayout(pup);
+
+ uiItemO(layout, NULL, 0, "UV_OT_unwrap");
+ uiItemS(layout);
+ uiItemO(layout, NULL, 0, "UV_OT_cube_project");
+ uiItemO(layout, NULL, 0, "UV_OT_cylinder_project");
+ uiItemO(layout, NULL, 0, "UV_OT_sphere_project");
+ uiItemO(layout, NULL, 0, "UV_OT_project_from_view");
+ uiItemS(layout);
+ uiItemO(layout, NULL, 0, "UV_OT_reset");
+
+ uiPupMenuEnd(C, pup);
/* XXX python */
#ifndef DISABLE_PYTHON
diff --git a/source/blender/ftfont/CMakeLists.txt b/source/blender/ftfont/CMakeLists.txt
deleted file mode 100644
index 134796d0799..00000000000
--- a/source/blender/ftfont/CMakeLists.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-# $Id$
-# ***** BEGIN GPL LICENSE BLOCK *****
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# The Original Code is Copyright (C) 2006, Blender Foundation
-# All rights reserved.
-#
-# The Original Code is: all of this file.
-#
-# Contributor(s): Jacques Beaurain.
-#
-# ***** END GPL LICENSE BLOCK *****
-
-FILE(GLOB SRC intern/*.cpp)
-
-SET(INC
- . intern ../blenkernel ../blenlib ../makesdna ../include
- ${FTGL_INC}
- ${FREETYPE_INC}
- ${GETTEXT_INC}
-)
-
-ADD_DEFINITIONS(-DFTGL_LIBRARY_STATIC)
-
-IF(WIN32)
- ADD_DEFINITIONS(-D_WIN32 -DUSE_GETTEXT_DLL)
-ENDIF(WIN32)
-
-BLENDERLIB(bf_ftfont "${SRC}" "${INC}")
-#env.BlenderLib ( 'bf_ftfont', sources, Split(incs), Split(defs), libtype=['international','player'], priority=[0, 205] )
diff --git a/source/blender/ftfont/FTF_Api.h b/source/blender/ftfont/FTF_Api.h
deleted file mode 100644
index 8b04f5c09c1..00000000000
--- a/source/blender/ftfont/FTF_Api.h
+++ /dev/null
@@ -1,163 +0,0 @@
-/**
- * $Id$
- *
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-#ifndef _FTF_API_H
-#define _FTF_API_H
-
-#define FTF_EXPORT
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <stdio.h>
-#include "FTF_Settings.h"
-
-/**
- * Set Font Size
- * @param int size
- */
-FTF_EXPORT void FTF_SetSize(int size);
-
-/**
- * Get Font Size
- * @return Font size
- */
-FTF_EXPORT int FTF_GetSize(void);
-
-/**
- * Ascender
- * @return Ascend size
- */
-FTF_EXPORT int FTF_Ascender(void);
-
-/**
- * Descender
- * @return Descend size
- */
-FTF_EXPORT int FTF_Descender(void);
-
-/**
- * String Translation and Code Conversion
- * @param str source string
- * @param ustr distnation string
- * @param flag mode flag
- */
-FTF_EXPORT void FTF_TransConvString(char* str, char* ustr, unsigned int flag);
-
-/**
- * Draw a character at the current raster position.
- * @param c the character to draw
- * @param mode flag to forward to FTF_TransConvString()
- * @return Width drawing
- */
-//FTF_EXPORT float FTF_DrawCharacter(char c, unsigned int flag);
-
-/**
- * Draws a string at the current raster postion.
- * @param str The string to draw
- * @param mode flag to forward to FTF_TransConvString()
- * @return Width drawing
- */
-FTF_EXPORT float FTF_DrawString(char* str, unsigned int flag);
-
-
-/**
- * Get a character width
- * @param mode flag to forward to FTF_TransConvString()
- */
-FTF_EXPORT float FTF_GetCharacterWidth(char c, unsigned int flag);
-
-
-/**
- * Get a string width
- * @param mode flag to forward to FTF_TransConvString()
- */
-FTF_EXPORT float FTF_GetStringWidth(char* str, unsigned int flag);
-
-/**
- * Get Bounding Box
- * @param llx Lower left near x coord
- * @param lly Lower left near y coord
- * @param llz Lower left near z coord
- * @param urx Upper right far x coord
- * @param ury Upper right far y coord
- * @param urz Upper right far z coord
- * @param mode flag to forward to FTF_TransConvString()
- * not test yet.
- */
-FTF_EXPORT void FTF_GetBoundingBox(char* str, float*llx, float *lly, float *llz, float *urx, float *ury, float *urz, unsigned int flag);
-
-/**
- * Following stuff added by phase, ton
- */
-
-/**
- * SetFontSize
- * @param size
- */
-FTF_EXPORT void FTF_SetFontSize(char size);
-
-/**
- * SetFont
- * @param str
- * @param size
- */
-FTF_EXPORT int FTF_SetFont(const unsigned char* str, int datasize, int fontsize);
-
-/**
- * SetLanguage
- * @param str
- * not test yet.
- */
-FTF_EXPORT void FTF_SetLanguage(char* str);
-
-/**
- * SetLanguage
- * @param str
- * not tested yet.
- */
-FTF_EXPORT void FTF_SetEncoding(char* str);
-
-FTF_EXPORT void FTF_SetPosition(float x, float y);
-FTF_EXPORT void FTF_SetMode(int mode);
-FTF_EXPORT void FTF_SetScale(float fsize);
-
-FTF_EXPORT void FTF_End(void);
-
-/* Font preview functions */
-FTF_EXPORT int FTF_GetNewFont (const unsigned char *str, int datasize, int fontsize);
-FTF_EXPORT float FTF_DrawNewFontString(char* str, unsigned int flag);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __FTF_API_H */
-
diff --git a/source/blender/ftfont/Makefile b/source/blender/ftfont/Makefile
deleted file mode 100644
index 73f75e77e73..00000000000
--- a/source/blender/ftfont/Makefile
+++ /dev/null
@@ -1,34 +0,0 @@
-#
-# $Id$
-#
-# ***** BEGIN GPL LICENSE BLOCK *****
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
-# All rights reserved.
-#
-# The Original Code is: all of this file.
-#
-# Contributor(s): none yet.
-#
-# ***** END GPL LICENSE BLOCK *****
-#
-# Bounces make to subdirectories.
-
-SOURCEDIR = source/blender/ftfont
-DIRS = intern
-
-include nan_subdirs.mk
diff --git a/source/blender/ftfont/SConscript b/source/blender/ftfont/SConscript
deleted file mode 100644
index 9d475152194..00000000000
--- a/source/blender/ftfont/SConscript
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/usr/bin/python
-import sys
-Import ('env')
-
-sources = env.Glob('intern/*.cpp')
-
-incs = '. intern ../blenkernel ../blenlib ../makesdna ../editors/include'
-incs += ' ' + env['BF_FTGL_INC']
-incs += ' ' + env['BF_FREETYPE_INC']
-incs += ' ' + env['BF_GETTEXT_INC']
-
-defs = 'FTGL_STATIC_LIBRARY'
-if sys.platform == 'win32':
- defs += ' _WIN32 USE_GETTEXT_DLL'
-
-env.BlenderLib ( 'bf_ftfont', sources, Split(incs), Split(defs), libtype=['core'], priority=[210] )
diff --git a/source/blender/ftfont/intern/FTF_Api.cpp b/source/blender/ftfont/intern/FTF_Api.cpp
deleted file mode 100644
index 702d054e71c..00000000000
--- a/source/blender/ftfont/intern/FTF_Api.cpp
+++ /dev/null
@@ -1,205 +0,0 @@
-/**
- * $Id$
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (C) 2002 Blender Foundation. All Rights Reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/**
-
- * $Id$
- * Copyright (C) 2001 NaN Technologies B.V.
- *
- * Implementation of the API of FTGL library.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "../FTF_Api.h"
-#include "FTF_TTFont.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-//XXX #include "datatoc.h"
-#ifdef __cplusplus
-}
-#endif
-
-#define FTF_EXPORT
-
-FTF_TTFont *newfont= 0; // preview font
-
-static FTF_TTFont *_FTF_GetFont(void) {
- static FTF_TTFont *theFont = NULL;
-
- if (!theFont) {
- theFont = new FTF_TTFont();
- }
-
- return theFont;
-}
-
-FTF_EXPORT int FTF_GetNewFont (const unsigned char *str, int datasize, int fontsize) {
-
- if (newfont) delete newfont;
- newfont= new FTF_TTFont();
-
- if (!(newfont->SetFont((unsigned char*)str, datasize, fontsize))) {
- //XXX newfont->SetFont((unsigned char*)datatoc_bfont_ttf, datatoc_bfont_ttf_size, fontsize);
- return 0;
- }
- return 1;
-}
-
-FTF_EXPORT float FTF_DrawNewFontString(char* str, unsigned int flag)
-{
- if (newfont)
- return newfont->DrawString(str, flag);
- return 0.0f;
-}
-
-FTF_EXPORT void FTF_End(void) {
- delete _FTF_GetFont();
- delete newfont;
-}
-
-FTF_EXPORT void FTF_SetSize(int size)
-{
- _FTF_GetFont()->SetSize(size);
-}
-
-FTF_EXPORT int FTF_GetSize(void)
-{
- return _FTF_GetFont()->GetSize();
-}
-
-/*
-FTF_EXPORT int FTF_Ascender(void)
-{
- return _FTF_GetFont()->Ascender();
-}
-
-FTF_EXPORT int FTF_Descender(void)
-{
- return _FTF_GetFont()->Descender();
-}
-*/
-
-FTF_EXPORT void FTF_TransConvString(char* str, char* ustr, unsigned int flag)
-{
- _FTF_GetFont()->TransConvString(str, ustr, flag);
-}
-
-/*
-FTF_EXPORT float FTF_DrawCharacter(char c, unsigned int flag)
-{
- char str[2] = {c, '\0'};
- return FTF_DrawString(str, flag);
-}
-*/
-
-
-/* does color too, using glGet */
-FTF_EXPORT float FTF_DrawString(char* str, unsigned int flag)
-{
- return _FTF_GetFont()->DrawString(str, flag);
-}
-
-
-/**
- * not implemente yet.
- */
-FTF_EXPORT float FTF_GetCharacterWidth(char c, unsigned int flag)
-{
- char str[2] = {c, '\0'};
- return FTF_GetStringWidth(str, flag);
-}
-
-
-/**
- * not implemente yet.
- */
-FTF_EXPORT float FTF_GetStringWidth(char* str, unsigned int flag)
-{
- return _FTF_GetFont()->GetStringWidth(str, flag);
-}
-
-
-/**
- * not implemente yet.
- * ## This return string box!! ##
- */
-FTF_EXPORT void FTF_GetBoundingBox(char* str, float *llx, float *lly, float *llz, float *urx, float *ury, float *urz, unsigned int flag)
-{
- _FTF_GetFont()->GetBoundingBox(str, llx, lly, llz, urx, ury, urz, flag);
-}
-
-/**
- * added by phase
- * changed by ton; to allow both file load as memory load (datasize!=0)
- */
-FTF_EXPORT int FTF_SetFont(const unsigned char* str, int datasize, int fontsize)
-{
- return _FTF_GetFont()->SetFont(str, datasize, fontsize);
-}
-
-/* added by ton */
-
-FTF_EXPORT void FTF_SetFontSize(char size)
-{
- _FTF_GetFont()->SetFontSize( size);
-}
-
-/**
- * added by phase
- *
- */
-FTF_EXPORT void FTF_SetLanguage(char* str)
-{
- _FTF_GetFont()->SetLanguage(str);
-}
-
-FTF_EXPORT void FTF_SetEncoding(char* str)
-{
- _FTF_GetFont()->SetEncoding(str);
-}
-
-FTF_EXPORT void FTF_SetPosition(float x, float y)
-{
- _FTF_GetFont()->SetPosition(x, y);
-}
-
-FTF_EXPORT void FTF_SetMode(int mode)
-{
- _FTF_GetFont()->SetMode(mode);
-}
-
-FTF_EXPORT void FTF_SetScale(float fsize)
-{
- _FTF_GetFont()->SetScale(fsize);
-}
-
-
diff --git a/source/blender/ftfont/intern/FTF_TTFont.cpp b/source/blender/ftfont/intern/FTF_TTFont.cpp
deleted file mode 100644
index e8f2b82f970..00000000000
--- a/source/blender/ftfont/intern/FTF_TTFont.cpp
+++ /dev/null
@@ -1,403 +0,0 @@
-/**
- * $Id$
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (C) 2002 Blender Foundation. All Rights Reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <locale.h>
-#include "libintl.h"
-#include "BLI_blenlib.h"
-#include "BKE_font.h"
-
-#include "../FTF_Settings.h"
-
-#include "FTF_TTFont.h"
-
-#ifdef __APPLE__
-#include "BKE_utildefines.h"
-#endif
-
-#define DOMAIN_NAME "blender"
-
-#define SYSTEM_ENCODING_DEFAULT "UTF-8"
-#define FONT_SIZE_DEFAULT 12
-//#define FONT_PATH_DEFAULT ".bfont.ttf"
-
-#define FTF_MAX_STR_SIZE 512
-
-FTF_TTFont::FTF_TTFont(void)
-{
-#ifdef __APPLE__
- char *bundlepath;
-#endif
-
- font=NULL;
- fontm= fonts= fontl= NULL;
- font_size=FONT_SIZE_DEFAULT;
- mode = FTF_PIXMAPFONT;
- fsize = 1.0;
- strcpy(encoding_name, SYSTEM_ENCODING_DEFAULT);
-
- //set messagepath directory
-
-#ifndef LOCALEDIR
-#define LOCALEDIR "/usr/share/locale"
-#endif
-
- strcpy(messagepath, ".blender/locale");
-
- if ( !BLI_exist(messagepath) ) { // locale not in current dir
- BLI_make_file_string("/", messagepath, BLI_gethome(), ".blender/locale");
-
- if( !BLI_exist(messagepath) ) { // locale not in home dir
-
-#ifdef WIN32
- BLI_make_file_string("/", messagepath, BLI_gethome(), "/locale");
- if( !BLI_exist(messagepath) ) {
-#endif
-#ifdef __APPLE__
- /* message catalogs are stored inside the application bundle */
- bundlepath = BLI_getbundle();
- strcpy(messagepath, bundlepath);
- strcat(messagepath, "/Contents/Resources/locale");
- if( !BLI_exist(messagepath) ) { // locale not in bundle (now that's odd..)
-#endif
- strcpy(messagepath, LOCALEDIR);
-
- if( !BLI_exist(messagepath) ) { // locale not in LOCALEDIR
- strcpy(messagepath, "message"); // old compatibility as last
- }
-#ifdef WIN32
- }
-#endif
-#ifdef __APPLE__
- }
-#endif
- }
- }
-}
-
-
-FTF_TTFont::~FTF_TTFont(void)
-{
- if (fonts) delete fonts;
- if (fontm) delete fontm;
- if (fontl) delete fontl;
-}
-
-void FTF_TTFont::SetFontSize(char size)
-{
- if(size=='s') font=fonts;
- else if(size=='l') font=fontl;
- else font=fontm;
-}
-
-int FTF_TTFont::SetFont(const unsigned char* str, int datasize, int fontsize)
-{
- int err = 0;
- bool success = 0;
-
- if (fonts) delete fonts;
- if (fontm) delete fontm;
- if (fontl) delete fontl;
- fonts= NULL;
- fontm= NULL;
- fontl= NULL;
-
- if(mode == FTF_PIXMAPFONT) {
-
- if(datasize) font = new FTGLPixmapFont(str, datasize);
- else font = new FTGLPixmapFont( (char *)str);
-
- err = font->Error();
-
- if(err) {
- printf("Failed to open font %s\n", str);
- return 0;
- } else {
-
- fontm= font;
-
- if(datasize) fonts = new FTGLPixmapFont(str, datasize);
- else fonts = new FTGLPixmapFont((char *)str);
- if(datasize) fontl = new FTGLPixmapFont(str, datasize);
- else fontl = new FTGLPixmapFont((char *)str);
-
- success = fonts->FaceSize(fontsize-2<8?8:fontsize-2);
- success = fontm->FaceSize(fontsize-1<8?8:fontsize-1);
- success = fontl->FaceSize(fontsize);
- if(!success) return 0;
-
- success = fonts->CharMap(ft_encoding_unicode);
- success = fontm->CharMap(ft_encoding_unicode);
- success = fontl->CharMap(ft_encoding_unicode);
- if(!success) return 0;
-
- return 1;
- }
-
- } else if(mode == FTF_TEXTUREFONT) {
-
- if(datasize) font = new FTGLTextureFont(str, datasize);
- else font = new FTGLTextureFont( (char *)str);
-
- err = font->Error();
-
- if(err) {
- printf("Failed to open font %s\n", str);
- return 0;
- } else {
-
- fontm= font;
-
- if(datasize) fonts = new FTGLTextureFont(str, datasize);
- else fonts = new FTGLTextureFont((char *)str);
- if(datasize) fontl = new FTGLTextureFont(str, datasize);
- else fontl = new FTGLTextureFont((char *)str);
-
- success = fonts->FaceSize(fontsize-2<8?8:fontsize-2);
- success = fontm->FaceSize(fontsize-1<8?8:fontsize-1);
- success = fontl->FaceSize(fontsize);
-// success = fonts->FaceSize(fontsize/2);
-// success = fontm->FaceSize(fontsize);
-// success = fontl->FaceSize(fontsize*2);
- if(!success) return 0;
-
- success = fonts->CharMap(ft_encoding_unicode);
- success = fontm->CharMap(ft_encoding_unicode);
- success = fontl->CharMap(ft_encoding_unicode);
- if(!success) return 0;
-
- return 1;
- }
- }
- return 0;
-}
-
-void FTF_TTFont::SetLanguage(char* str)
-{
-
-#if defined (_WIN32) || defined(__APPLE__)
- char envstr[12];
-
- sprintf(envstr, "LANG=%s", str);
- envstr[strlen(envstr)]='\0';
-#ifdef _WIN32
- gettext_putenv(envstr);
-#else
- putenv(envstr);
-#endif
-#else
- char *locreturn = setlocale(LC_ALL, str);
- if (locreturn == NULL) {
- char *lang;
-
- lang = (char*)malloc(sizeof(char)*(strlen(str)+7));
-
- lang[0] = '\0';
- strcat(lang, str);
- strcat(lang, ".UTF-8");
-
- locreturn = setlocale(LC_ALL, lang);
- if (locreturn == NULL) {
- printf("could not change language to %s nor %s\n", str, lang);
- }
-
- free(lang);
- }
-
- setlocale(LC_NUMERIC, "C");
-#endif
-
-
- bindtextdomain(DOMAIN_NAME, messagepath);
-// bind_textdomain_codeset(DOMAIN_NAME, encoding_name);
- textdomain(DOMAIN_NAME);
-
- strcpy(language, str);
-}
-
-
-void FTF_TTFont::SetEncoding(char* str)
-{
- strcpy(encoding_name, str);
-// bind_textdomain_codeset(DOMAIN_NAME, encoding_name);
-}
-
-
-void FTF_TTFont::SetSize(int size)
-{
- fonts->FaceSize(size-2<8?8:size-2);
- fontm->FaceSize(size-1<8?8:size-1);
- fontl->FaceSize(size);
-
- font_size = size;
-}
-
-int FTF_TTFont::GetSize(void)
-{
- return font_size;
-}
-
-/*
-int FTF_TTFont::Ascender(void)
-{
- return (int)font->Ascender();
-}
-
-int FTF_TTFont::Descender(void)
-{
- return (int)font->Descender();
-}
-
-*/
-int FTF_TTFont::TransConvString(char* str, char* ustr, unsigned int flag)
-{
- return 0;
-}
-
-
-float FTF_TTFont::DrawString(char* str, unsigned int flag)
-{
- float color[4];
- wchar_t wstr[FTF_MAX_STR_SIZE-1]={'\0'};
-
- /* note; this utf8towchar() function I totally don't understand... without using translations it
- removes special characters completely. So, for now we just skip that then. (ton) */
- if (FTF_USE_GETTEXT & flag)
- utf8towchar(wstr, gettext(str));
- else if (FTF_INPUT_UTF8 & flag)
- utf8towchar(wstr, str);
-
- glGetFloatv(GL_CURRENT_COLOR, color);
-
- if(mode == FTF_PIXMAPFONT) {
-
- glPixelTransferf(GL_RED_SCALE, color[0]);
- glPixelTransferf(GL_GREEN_SCALE, color[1]);
- glPixelTransferf(GL_BLUE_SCALE, color[2]);
-
- if ((FTF_USE_GETTEXT | FTF_INPUT_UTF8) & flag)
- font->Render(wstr);
- else
- font->Render(str);
-
- glPixelTransferf(GL_RED_SCALE, 1.0);
- glPixelTransferf(GL_GREEN_SCALE, 1.0);
- glPixelTransferf(GL_BLUE_SCALE, 1.0);
-
- } else if(mode == FTF_TEXTUREFONT) {
-
- glEnable(GL_BLEND);
- glEnable(GL_TEXTURE_2D);
-
- glPushMatrix();
- glTranslatef(pen_x, pen_y, 0.0);
- glScalef(fsize, fsize, 1.0);
-
- if ((FTF_USE_GETTEXT | FTF_INPUT_UTF8) & flag)
- font->Render(wstr);
- else
- font->Render(str);
-
- glPopMatrix();
-
- glDisable(GL_BLEND);
- glDisable(GL_TEXTURE_2D);
- }
-
- if ((FTF_USE_GETTEXT | FTF_INPUT_UTF8) & flag)
- return font->Advance(wstr);
- else
- return font->Advance(str);
-}
-
-
-float FTF_TTFont::GetStringWidth(char* str, unsigned int flag)
-{
- wchar_t wstr[FTF_MAX_STR_SIZE-1]={'\0'};
- int len=0;
-
- if (strlen(str)==0) return 0.0;
-
- /* note; this utf8towchar() function I totally don't understand... without using translations it
- removes special characters completely. So, for now we just skip that then. (ton) */
-
- if (FTF_USE_GETTEXT & flag) {
- len=utf8towchar(wstr, gettext(str));
-
- if(mode == FTF_PIXMAPFONT) {
- return font->Advance(wstr);
- } else if(mode == FTF_TEXTUREFONT) {
- return font->Advance(wstr);// * fsize;
- }
- }
- else {
- if(mode == FTF_PIXMAPFONT) {
- return font->Advance(str);
- } else if(mode == FTF_TEXTUREFONT) {
- return font->Advance(str);// * fsize;
- }
- }
-
- return 0.0;
-}
-
-
-void FTF_TTFont::GetBoundingBox(char* str, float *llx, float *lly, float *llz, float *urx, float *ury, float *urz, unsigned int flag)
-{
- wchar_t wstr[FTF_MAX_STR_SIZE-1]={'\0'};
- int len=0;
-
- if (FTF_USE_GETTEXT & flag)
- len=utf8towchar(wstr,gettext(str));
- else
- len=utf8towchar(wstr,str);
-
- font->BBox(wstr, *llx, *lly, *llz, *urx, *ury, *urz);
-}
-
-
-void FTF_TTFont::SetPosition(float x, float y)
-{
- pen_x = x;
- pen_y = y;
-}
-
-
-void FTF_TTFont::SetMode(int m)
-{
- mode = m;
-}
-
-
-void FTF_TTFont::SetScale(float size)
-{
- fsize = size;
-}
-
-
diff --git a/source/blender/ftfont/intern/FTF_TTFont.h b/source/blender/ftfont/intern/FTF_TTFont.h
deleted file mode 100644
index 51247a2d2a1..00000000000
--- a/source/blender/ftfont/intern/FTF_TTFont.h
+++ /dev/null
@@ -1,136 +0,0 @@
-/**
- * $Id$
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * Copyright (C) 2002 Blender Foundation. All Rights Reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-/**
-
- * $Id$
- * Copyright (C) 2001 NaN Technologies B.V.
- */
-
-#ifndef __FTF_TRUETYPE_FONT_H
-#define __FTF_TRUETYPE_FONT_H
-
-#include "FTGLPixmapFont.h"
-#include "FTGLTextureFont.h"
-
-#include <stdio.h>
-//#include <iconv.h>
-
-
-/**
- * Base class for Using FTGL, iconv and gettext Library.
- */
-class FTF_TTFont
-{
-public:
- /**
- * Default constructor.
- */
- FTF_TTFont(void);
-
- /**
- * Destructor.
- */
- virtual ~FTF_TTFont(void);
-
-
- void SetSize(int size);
- int GetSize(void);
-
-// int Ascender(void);
-// int Descender(void);
-
- int TransConvString(char* str, char* ustr, unsigned int flag);
-
- /**
- * Draws a string at the current raster position in current opengl color.
- * @param str The string to draw.
- * @param flag Whether use gettext and UTF8 or system encoding.
- */
- float DrawString(char* str, unsigned int flag);
-
- float GetStringWidth(char* str, unsigned int flag);
-
- /**
- * Get the bounding box for a string.
- *
- * @param str The string
- * @param llx Lower left near x coord
- * @param lly Lower left near y coord
- * @param llz Lower left near z coord
- * @param urx Upper right far x coord
- * @param ury Upper right far y coord
- * @param urz Upper right far z coord
- */
- void GetBoundingBox(char* str, float *llx, float *lly, float *llz, float *urx, float *ury, float *urz, unsigned int flag);
-
- /**
- * added by phase, ton
- * functions to communicate with the preference menu
- */
- void SetFontSize(char size);
-
- int SetFont(const unsigned char* str, int datasize, int fontsize);
-
- void SetLanguage(char* str);
-
- void SetEncoding(char* str);
-
- /**
- * functions to communicate with blender ui rasterpos
- */
- void SetPosition(float x, float y);
- void SetMode(int mode);
- void SetScale(float fsize);
-
-protected:
- char messagepath[1024];
-
- char language[32];
- char encoding_name[32];
- char font_name[128];
- int font_size;
-
- int mode; // 0 = pixmap, 1 = texture
- float pen_x, pen_y; //rasterpos
- float fsize;
-
- /** FTGL's */
- FTFont* font; /* active */
-
- FTFont* fonts; /* opened, small medium and large */
- FTFont* fontm;
- FTFont* fontl;
-
- /** from system encoding in .locale to UNICODE */
-// iconv_t cd;
-
- /** from UTF-8 to UNICODE */
-// iconv_t ucd;
-};
-
-#endif // __FTF_TRUETYPE_FONT_H
diff --git a/source/blender/ftfont/intern/Makefile b/source/blender/ftfont/intern/Makefile
deleted file mode 100644
index 6e145ee442e..00000000000
--- a/source/blender/ftfont/intern/Makefile
+++ /dev/null
@@ -1,56 +0,0 @@
-#
-# $Id$
-#
-# ***** BEGIN GPL LICENSE BLOCK *****
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
-# All rights reserved.
-#
-# The Original Code is: all of this file.
-#
-# Contributor(s): none yet.
-#
-# ***** END GPL LICENSE BLOCK *****
-#
-#
-
-LIBNAME = ftfont
-DIR = $(OCGDIR)/blender/ftfont
-
-include nan_compile.mk
-
-CFLAGS += $(LEVEL_1_C_WARNINGS)
-
-#CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include
-CPPFLAGS += -I../../makesdna
-CPPFLAGS += -I../../blenkernel
-CPPFLAGS += -I../../blenlib
-CPPFLAGS += -I../../editors/include
-CPPFLAGS += -I$(NAN_FTGL)/include
-CPPFLAGS += -I$(NAN_FTGL)/include/FTGL
-CPPFLAGS += -I$(NAN_GETTEXT)/include
-CPPFLAGS += -I$(NAN_FREETYPE)/include
-ifeq ($(OS), windows)
- CPPFLAGS += -I$(NAN_ICONV)/include
- ifeq ($(FREE_WINDOWS), true)
- CPPFLAGS += -I$(NAN_FREETYPE)/include/freetype2
- CPPFLAGS += -DUSE_GETTEXT_DLL
- endif
-else
- CPPFLAGS += -I$(NAN_FREETYPE)/include/freetype2
-endif
-CPPFLAGS += -I..
diff --git a/source/blender/gpu/intern/gpu_draw.c b/source/blender/gpu/intern/gpu_draw.c
index 7f5f85e23a6..0e123d872fe 100644
--- a/source/blender/gpu/intern/gpu_draw.c
+++ b/source/blender/gpu/intern/gpu_draw.c
@@ -83,7 +83,18 @@ void GPU_render_text(MTFace *tface, int mode,
Image* ima;
int characters, index, character;
float centerx, centery, sizex, sizey, transx, transy, movex, movey, advance;
-
+ float advance_tab;
+
+
+ /* multiline */
+ float line_start= 0.0f, line_height;
+ if (v4)
+ line_height= MAX4(v1[1], v2[1], v3[1], v4[2]) - MIN4(v1[1], v2[1], v3[1], v4[2]);
+ else
+ line_height= MAX3(v1[1], v2[1], v3[1]) - MIN3(v1[1], v2[1], v3[1]);
+ line_height *= 1.2; /* could be an option? */
+ /* end multiline */
+
characters = textlen;
ima = (Image*)tface->tpage;
@@ -97,12 +108,32 @@ void GPU_render_text(MTFace *tface, int mode,
glColor3f(1.0f, 1.0f, 1.0f);
glPushMatrix();
+
+ /* get the tab width */
+ matrixGlyph((ImBuf *)ima->ibufs.first, ' ', & centerx, &centery,
+ &sizex, &sizey, &transx, &transy, &movex, &movey, &advance);
+
+ advance_tab= advance * 4; /* tab width could also be an option */
+
+
for (index = 0; index < characters; index++) {
float uv[4][2];
// lets calculate offset stuff
character = textstr[index];
+ if (character=='\n') {
+ glTranslatef(line_start, -line_height, 0.0);
+ line_start = 0.0f;
+ continue;
+ }
+ else if (character=='\t') {
+ glTranslatef(advance_tab, 0.0, 0.0);
+ line_start -= advance_tab; /* so we can go back to the start of the line */
+ continue;
+
+ }
+
// space starts at offset 1
// character = character - ' ' + 1;
matrixGlyph((ImBuf *)ima->ibufs.first, character, & centerx, &centery,
@@ -143,6 +174,7 @@ void GPU_render_text(MTFace *tface, int mode,
glEnd();
glTranslatef(advance, 0.0, 0.0);
+ line_start -= advance; /* so we can go back to the start of the line */
}
glPopMatrix();
}
diff --git a/source/blender/imbuf/IMB_imbuf_types.h b/source/blender/imbuf/IMB_imbuf_types.h
index 3cc155af1ad..79da0cb1c41 100644
--- a/source/blender/imbuf/IMB_imbuf_types.h
+++ b/source/blender/imbuf/IMB_imbuf_types.h
@@ -83,6 +83,7 @@ typedef struct ImBuf {
int ftype; /**< File type we are going to save as */
unsigned int *cmap; /**< Color map data. */
unsigned int *rect; /**< pixel values stored here */
+ unsigned int *crect; /**< color corrected pixel values stored here */
unsigned int **planes; /**< bitplanes */
int flags; /**< Controls which components should exist. */
int mall; /**< what is malloced internal, and can be freed */
diff --git a/source/blender/imbuf/intern/IMB_anim.h b/source/blender/imbuf/intern/IMB_anim.h
index 745248d3218..7e99df8237a 100644
--- a/source/blender/imbuf/intern/IMB_anim.h
+++ b/source/blender/imbuf/intern/IMB_anim.h
@@ -76,9 +76,9 @@
#endif /* WITH_QUICKTIME */
#ifdef WITH_FFMPEG
-#include <ffmpeg/avformat.h>
-#include <ffmpeg/avcodec.h>
-#include <ffmpeg/swscale.h>
+#include <libavformat/avformat.h>
+#include <libavcodec/avcodec.h>
+#include <libswscale/swscale.h>
#endif
#ifdef WITH_REDCODE
diff --git a/source/blender/imbuf/intern/IMB_jp2.h b/source/blender/imbuf/intern/IMB_jp2.h
index fcdd4589fca..abc6b78357c 100644
--- a/source/blender/imbuf/intern/IMB_jp2.h
+++ b/source/blender/imbuf/intern/IMB_jp2.h
@@ -1,7 +1,7 @@
/*
* IMB_jp2.h
*
- * $Id: IMB_bmp.h 14444 2008-04-16 22:40:48Z hos $
+ * $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
*
diff --git a/source/blender/imbuf/intern/allocimbuf.c b/source/blender/imbuf/intern/allocimbuf.c
index ad7b1dce2e0..b561f0a583d 100644
--- a/source/blender/imbuf/intern/allocimbuf.c
+++ b/source/blender/imbuf/intern/allocimbuf.c
@@ -93,6 +93,10 @@ void imb_freerectImBuf(struct ImBuf * ibuf)
{
if (ibuf==NULL) return;
+ if (ibuf->crect && ibuf->crect != ibuf->rect) {
+ MEM_freeN(ibuf->crect);
+ }
+
if (ibuf->rect) {
if (ibuf->mall & IB_rect) {
MEM_freeN(ibuf->rect);
@@ -102,6 +106,7 @@ void imb_freerectImBuf(struct ImBuf * ibuf)
imb_freemipmapImBuf(ibuf);
ibuf->rect= NULL;
+ ibuf->crect= NULL;
ibuf->mall &= ~IB_rect;
}
diff --git a/source/blender/imbuf/intern/anim.c b/source/blender/imbuf/intern/anim.c
index 9d70dd3fc60..30f24d9bbf3 100644
--- a/source/blender/imbuf/intern/anim.c
+++ b/source/blender/imbuf/intern/anim.c
@@ -83,10 +83,10 @@
#include "IMB_anim5.h"
#ifdef WITH_FFMPEG
-#include <ffmpeg/avformat.h>
-#include <ffmpeg/avcodec.h>
-#include <ffmpeg/rational.h>
-#include <ffmpeg/swscale.h>
+#include <libavformat/avformat.h>
+#include <libavcodec/avcodec.h>
+#include <libavutil/rational.h>
+#include <libswscale/swscale.h>
#if LIBAVFORMAT_VERSION_INT < (49 << 16)
#define FFMPEG_OLD_FRAME_RATE 1
diff --git a/source/blender/imbuf/intern/anim5.c b/source/blender/imbuf/intern/anim5.c
index ab203fe80de..b6f29b6a145 100644
--- a/source/blender/imbuf/intern/anim5.c
+++ b/source/blender/imbuf/intern/anim5.c
@@ -425,7 +425,7 @@ int startanim5(struct anim * anim) {
/* de hele file wordt in het geheugen gemapped */
totlen = BLI_filesize(file);
- if (totlen && file>=0) {
+ if (totlen>0 && file>=0) {
lseek(file, 0L, SEEK_SET);
mem= MEM_mallocN(totlen, "mmap");
diff --git a/source/blender/imbuf/intern/dds/Makefile b/source/blender/imbuf/intern/dds/Makefile
index 28f9e24c947..e14f9320d19 100644
--- a/source/blender/imbuf/intern/dds/Makefile
+++ b/source/blender/imbuf/intern/dds/Makefile
@@ -1,5 +1,5 @@
#
-# $Id: Makefile 7037 2006-03-12 14:11:23Z ton $
+# $Id$
#
# ***** BEGIN GPL LICENSE BLOCK *****
#
diff --git a/source/blender/imbuf/intern/scaling.c b/source/blender/imbuf/intern/scaling.c
index 8257eb4643e..807b0c84e90 100644
--- a/source/blender/imbuf/intern/scaling.c
+++ b/source/blender/imbuf/intern/scaling.c
@@ -299,7 +299,6 @@ struct ImBuf *IMB_onehalf(struct ImBuf *ibuf1)
if (ibuf1->rect==NULL && ibuf1->rect_float==NULL) return (0);
do_rect= (ibuf1->rect != NULL);
- do_float= (ibuf1->rect_float != NULL);
if (ibuf1->x <= 1) return(IMB_half_y(ibuf1));
if (ibuf1->y <= 1) return(IMB_half_x(ibuf1));
@@ -312,6 +311,8 @@ struct ImBuf *IMB_onehalf(struct ImBuf *ibuf1)
p1 = (uchar *) ibuf1->rect;
dest=(uchar *) ibuf2->rect;
+ do_float= (ibuf1->rect_float != NULL && ibuf2->rect_float != NULL);
+
for(y=ibuf2->y;y>0;y--){
if (do_rect) p2 = p1 + (ibuf1->x << 2);
if (do_float) p2f = p1f + (ibuf1->x << 2);
diff --git a/source/blender/imbuf/intern/util.c b/source/blender/imbuf/intern/util.c
index 15d1d031dbd..ffd5d3431af 100644
--- a/source/blender/imbuf/intern/util.c
+++ b/source/blender/imbuf/intern/util.c
@@ -73,10 +73,10 @@
#endif
#ifdef WITH_FFMPEG
-#include <ffmpeg/avcodec.h>
-#include <ffmpeg/avformat.h>
-#include <ffmpeg/avdevice.h>
-#include <ffmpeg/log.h>
+#include <libavcodec/avcodec.h>
+#include <libavformat/avformat.h>
+#include <libavdevice/avdevice.h>
+#include <libavutil/log.h>
#if LIBAVFORMAT_VERSION_INT < (49 << 16)
#define FFMPEG_OLD_FRAME_RATE 1
diff --git a/source/blender/makesdna/DNA_ID.h b/source/blender/makesdna/DNA_ID.h
index 71c57b3df71..9e5212e159f 100644
--- a/source/blender/makesdna/DNA_ID.h
+++ b/source/blender/makesdna/DNA_ID.h
@@ -187,6 +187,7 @@ typedef struct PreviewImage {
#define ID_NT MAKE_ID2('N', 'T')
#define ID_BR MAKE_ID2('B', 'R')
#define ID_PA MAKE_ID2('P', 'A')
+#define ID_GD MAKE_ID2('G', 'D')
#define ID_WM MAKE_ID2('W', 'M')
/* NOTE! Fake IDs, needed for g.sipo->blocktype or outliner */
diff --git a/source/blender/makesdna/DNA_action_types.h b/source/blender/makesdna/DNA_action_types.h
index cf54d69bb8b..7e54045b5e4 100644
--- a/source/blender/makesdna/DNA_action_types.h
+++ b/source/blender/makesdna/DNA_action_types.h
@@ -52,6 +52,9 @@ struct Object;
*/
typedef struct bPoseChannel {
struct bPoseChannel *next, *prev;
+
+ IDProperty *prop; /* User-Defined Properties on this PoseChannel */
+
ListBase constraints;/* Constraints that act on this PoseChannel */
char name[32]; /* Channels need longer names than normal blender objects */
@@ -419,3 +422,4 @@ typedef enum ACHAN_FLAG {
#endif
+
diff --git a/source/blender/makesdna/DNA_actuator_types.h b/source/blender/makesdna/DNA_actuator_types.h
index 48432b8c6e2..aeabae42adf 100644
--- a/source/blender/makesdna/DNA_actuator_types.h
+++ b/source/blender/makesdna/DNA_actuator_types.h
@@ -195,7 +195,8 @@ typedef struct bGameActuator {
typedef struct bVisibilityActuator {
/** bit 0: Is this object visible?
- ** bit 1: Apply recursively */
+ ** bit 1: Apply recursively
+ ** bit 2: Is this object an occluder? */
int flag;
} bVisibilityActuator;
@@ -357,6 +358,7 @@ typedef struct FreeCamera {
#define ACT_PROP_ASSIGN 0
#define ACT_PROP_ADD 1
#define ACT_PROP_COPY 2
+#define ACT_PROP_TOGGLE 3
/* constraint flag */
#define ACT_CONST_LOCX 1
@@ -457,6 +459,7 @@ typedef struct FreeCamera {
/* Set means the object will become invisible */
#define ACT_VISIBILITY_INVISIBLE (1 << 0)
#define ACT_VISIBILITY_RECURSIVE (1 << 1)
+#define ACT_VISIBILITY_OCCLUSION (1 << 2)
/* twodfilter->type */
#define ACT_2DFILTER_ENABLED -2
diff --git a/source/blender/makesdna/DNA_anim_types.h b/source/blender/makesdna/DNA_anim_types.h
index 9112a714857..f30cd63242a 100644
--- a/source/blender/makesdna/DNA_anim_types.h
+++ b/source/blender/makesdna/DNA_anim_types.h
@@ -28,6 +28,7 @@ typedef struct FModifier {
struct FModifier *next, *prev;
void *data; /* pointer to modifier data */
+ void *edata; /* pointer to temporary data used during evaluation */
char name[64]; /* user-defined description for the modifier */
short type; /* type of f-curve modifier */
@@ -46,7 +47,8 @@ enum {
FMODIFIER_TYPE_CYCLES,
FMODIFIER_TYPE_NOISE, /* unimplemented - generate variations using some basic noise generator... */
FMODIFIER_TYPE_FILTER, /* unimplemented - for applying: fft, high/low pass filters, etc. */
- FMODIFIER_TYPE_PYTHON,
+ FMODIFIER_TYPE_PYTHON,
+ FMODIFIER_TYPE_LIMITS,
/* NOTE: all new modifiers must be added above this line */
FMODIFIER_NUM_TYPES
@@ -60,6 +62,8 @@ enum {
FMODIFIER_FLAG_EXPANDED = (1<<1),
/* modifier is active one (in UI) for editing purposes */
FMODIFIER_FLAG_ACTIVE = (1<<2),
+ /* user wants modifier to be skipped */
+ FMODIFIER_FLAG_MUTED = (1<<3),
} eFModifier_Flags;
/* --- */
@@ -73,7 +77,7 @@ typedef struct FMod_Generator {
float *coefficients; /* coefficients array */
unsigned int arraysize; /* size of the coefficients array */
- unsigned short poly_order; /* order of polynomial generated (i.e. 1 for linear, 2 for quadratic) */
+ short poly_order; /* order of polynomial generated (i.e. 1 for linear, 2 for quadratic) */
short func_type; /* builtin math function eFMod_Generator_Functions */
int pad;
@@ -140,6 +144,7 @@ enum {
FCM_EXTRAPOLATE_NONE = 0, /* don't do anything */
FCM_EXTRAPOLATE_CYCLIC, /* repeat keyframe range as-is */
FCM_EXTRAPOLATE_CYCLIC_OFFSET, /* repeat keyframe range, but with offset based on gradient between values */
+ FCM_EXTRAPOLATE_MIRROR, /* alternate between forward and reverse playback of keyframe range */
} eFMod_Cycling_Modes;
@@ -149,8 +154,63 @@ typedef struct FMod_Python {
IDProperty *prop; /* ID-properties to provide 'custom' settings */
} FMod_Python;
+
+/* limits modifier data */
+typedef struct FMod_Limits {
+ rctf rect; /* rect defining the min/max values */
+ int flag; /* settings for limiting */
+ int pad;
+} FMod_Limits;
+
+/* limiting flags */
+enum {
+ FCM_LIMIT_XMIN = (1<<0),
+ FCM_LIMIT_XMAX = (1<<1),
+ FCM_LIMIT_YMIN = (1<<2),
+ FCM_LIMIT_YMAX = (1<<3),
+} eFMod_Limit_Flags;
+
+/* noise modifier data */
+typedef struct FMod_Noise {
+ float size;
+ float strength;
+ float phase;
+ float pad;
+
+ short depth;
+ short modification;
+
+} FMod_Noise;
+
+/* modification modes */
+enum {
+ FCM_NOISE_MODIF_REPLACE = 0, /* Modify existing curve, matching it's shape */
+ FCM_NOISE_MODIF_ADD, /* Add noise to the curve */
+ FCM_NOISE_MODIF_SUBTRACT, /* Subtract noise from the curve */
+ FCM_NOISE_MODIF_MULTIPLY, /* Multiply the curve by noise */
+} eFMod_Noise_Modifications;
+
/* Drivers -------------------------------------- */
+/* Driver Target
+ *
+ * A 'variable' for use as a target of the driver/expression.
+ * Defines a way of accessing some channel to use, that can be
+ * referred to in the expression as a variable, thus simplifying
+ * expressions and also Depsgraph building.
+ */
+typedef struct DriverTarget {
+ struct DriverTarget *next, *prev;
+
+ ID *id; /* ID-block which owns the target */
+ char *rna_path; /* target channel to use as driver value */
+ int array_index; /* if applicable, the index of the RNA-array item to use as driver */
+
+ int flags; /* flags for the validity of the target */
+
+ char name[64]; /* name of the variable */
+} DriverTarget;
+
/* Channel Driver (i.e. Drivers / Expressions) (driver)
*
* Channel Drivers are part of the dependency system, and are executed in addition to
@@ -163,34 +223,26 @@ typedef struct FMod_Python {
* evaluated in. This order is set by the Depsgraph's sorting stuff.
*/
typedef struct ChannelDriver {
- /* primary target */
- ID *id; /* ID-block which owns the target */
- char *rna_path; /* target channel to use as driver value */
- int array_index; /* if applicable, the index of the RNA-array item to use as driver */
+ ListBase targets; /* targets for this driver (i.e. list of DriverTarget) */
+
+ /* python expression to execute (may call functions defined in an accessory file)
+ * which relates the target 'variables' in some way to yield a single usable value
+ */
+ char expression[256];
- /* value cache (placed here for alignment reasons) */
float curval; /* result of previous evaluation, for subtraction from result under certain circumstances */
+ float influence; /* influence of driver on result */ // XXX to be implemented... this is like the constraint influence setting
- /* secondary target (for rotational difference) */
- ID *id2; /* ID-block which owns the second target */
- char *rna_path2; /* second target channel to use as driver value */
- int array_index2; /* if applicable, the index of the RNA-array item to use as driver */
-
- /* general settings (placed here for alignment reasons) */
+ /* general settings */
int type; /* type of driver */
int flag; /* settings of driver */
-
- float influence; /* influence of driver on result */ // XXX to be implemented... this is like the constraint influence setting
-
- /* settings for Python Drivers (PyDrivers) */
- char expression[256]; /* python expression to execute (may call functions defined in an accessory file) */
} ChannelDriver;
/* driver type */
enum {
- /* channel drives channel */
- DRIVER_TYPE_CHANNEL = 0,
- /* py-expression used as driver */
+ /* target values are averaged together */
+ DRIVER_TYPE_AVERAGE = 0,
+ /* python expression/function relates targets */
DRIVER_TYPE_PYTHON,
/* rotational difference (must use rotation channels only) */
DRIVER_TYPE_ROTDIFF,
@@ -200,13 +252,11 @@ enum {
enum {
/* driver has invalid settings (internal flag) */
DRIVER_FLAG_INVALID = (1<<0),
- /* driver was disabled temporarily, so shouldn't be evaluated (set by user) */
- DRIVER_FLAG_DISABLED = (1<<1),
/* driver needs recalculation (set by depsgraph) */
- DRIVER_FLAG_RECALC = (1<<2),
+ DRIVER_FLAG_RECALC = (1<<1),
/* driver does replace value, but overrides (for layering of animation over driver) */
- // TODO: is this necessary?
- DRIVER_FLAG_LAYERING = (1<<3),
+ // TODO: this needs to be implemented at some stage or left out...
+ DRIVER_FLAG_LAYERING = (1<<2),
} eDriver_Flags;
/* F-Curves -------------------------------------- */
@@ -493,12 +543,16 @@ enum {
/* KS_Path->groupmode */
enum {
- /* path should be grouped using its own group-name */
+ /* path should be grouped using group name stored in path */
KSP_GROUP_NAMED = 0,
/* path should not be grouped at all */
KSP_GROUP_NONE,
- /* path should be grouped under an ActionGroup KeyingSet's name */
+ /* path should be grouped using KeyingSet's name */
KSP_GROUP_KSNAME,
+ /* path should be grouped using name of inner-most context item from templates
+ * - this is most useful for relative KeyingSets only
+ */
+ KSP_GROUP_TEMPLATE_ITEM,
} eKSP_Grouping;
/* KS_Path->templates (Template Flags)
diff --git a/source/blender/makesdna/DNA_cloth_types.h b/source/blender/makesdna/DNA_cloth_types.h
index d091ab3d335..33984582d7f 100644
--- a/source/blender/makesdna/DNA_cloth_types.h
+++ b/source/blender/makesdna/DNA_cloth_types.h
@@ -1,5 +1,5 @@
/**
-* $Id: DNA_cloth_types.h,v 1.1 2007/08/01 02:28:34 daniel Exp $
+* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
*
diff --git a/source/blender/makesdna/DNA_constraint_types.h b/source/blender/makesdna/DNA_constraint_types.h
index fe19cf60f12..79f032d0d21 100644
--- a/source/blender/makesdna/DNA_constraint_types.h
+++ b/source/blender/makesdna/DNA_constraint_types.h
@@ -317,6 +317,15 @@ typedef struct bDistLimitConstraint {
int pad;
} bDistLimitConstraint;
+typedef struct bShrinkwrapConstraint {
+ Object *target;
+ float dist; /* distance to kept from target */
+ short shrinkType; /* shrink type (look on MOD shrinkwrap for values) */
+ char projAxis; /* axis to project over UP_X, UP_Y, UP_Z */
+ char pad[9];
+} bShrinkwrapConstraint;
+
+
/* ------------------------------------------ */
/* bConstraint->type
@@ -344,10 +353,11 @@ typedef enum B_CONSTAINT_TYPES {
CONSTRAINT_TYPE_RIGIDBODYJOINT, /* rigidbody constraint */
CONSTRAINT_TYPE_CLAMPTO, /* clampto constraint */
CONSTRAINT_TYPE_TRANSFORM, /* transformation (loc/rot/size -> loc/rot/size) constraint */
+ CONSTRAINT_TYPE_SHRINKWRAP, /* shrinkwrap (loc/rot) constraint */
/* NOTE: everytime a new constraint is added, update this */
- NUM_CONSTRAINT_TYPES= CONSTRAINT_TYPE_TRANSFORM
+ NUM_CONSTRAINT_TYPES= CONSTRAINT_TYPE_SHRINKWRAP
} B_CONSTRAINT_TYPES;
/* bConstraint->flag */
diff --git a/source/blender/makesdna/DNA_customdata_types.h b/source/blender/makesdna/DNA_customdata_types.h
index 510ccfb67fc..18c18d9e9dd 100644
--- a/source/blender/makesdna/DNA_customdata_types.h
+++ b/source/blender/makesdna/DNA_customdata_types.h
@@ -75,9 +75,8 @@ typedef struct CustomData {
#define CD_MLOOPCOL 17
#define CD_TANGENT 18
#define CD_MDISPS 19
-#define CD_NUMTYPES 20
- /* fake type, derivedmesh wants CustomDataMask for weightpaint too, is not stored */
-#define CD_WEIGHTPAINT 30
+#define CD_WEIGHT_MCOL 20 /* for displaying weightpaint colors */
+#define CD_NUMTYPES 21
/* Bits for CustomDataMask */
#define CD_MASK_MVERT (1 << CD_MVERT)
@@ -100,6 +99,7 @@ typedef struct CustomData {
#define CD_MASK_MLOOPCOL (1 << CD_MLOOPCOL)
#define CD_MASK_TANGENT (1 << CD_TANGENT)
#define CD_MASK_MDISPS (1 << CD_MDISPS)
+#define CD_MASK_WEIGHT_MCOL (1 << CD_WEIGHT_MCOL)
/* derivedmesh wants CustomDataMask for weightpaint too, is not customdata though */
#define CD_MASK_WEIGHTPAINT (1 << CD_WEIGHTPAINT)
diff --git a/source/blender/makesdna/DNA_gpencil_types.h b/source/blender/makesdna/DNA_gpencil_types.h
index 70f469b2bb8..ed209a127c7 100644
--- a/source/blender/makesdna/DNA_gpencil_types.h
+++ b/source/blender/makesdna/DNA_gpencil_types.h
@@ -117,6 +117,8 @@ typedef struct bGPDlayer {
/* Grease-Pencil Annotations - 'DataBlock' */
typedef struct bGPdata {
+ ID id; /* Grease Pencil data is */
+
/* saved Grease-Pencil data */
ListBase layers; /* bGPDlayers */
int flag; /* settings for this datablock */
@@ -131,6 +133,7 @@ typedef struct bGPdata {
} bGPdata;
/* bGPdata->flag */
+// XXX many of these flags should be depreceated for more general ideas in 2.5
/* don't allow painting to occur at all */
#define GP_DATA_LMBPLOCK (1<<0)
/* show debugging info in viewport (i.e. status print) */
diff --git a/source/blender/makesdna/DNA_material_types.h b/source/blender/makesdna/DNA_material_types.h
index 4ffd2060568..cd0b73c8f70 100644
--- a/source/blender/makesdna/DNA_material_types.h
+++ b/source/blender/makesdna/DNA_material_types.h
@@ -52,7 +52,7 @@ typedef struct Material {
ID id;
struct AnimData *adt; /* animation data (must be immediately after id for utilities to use it) */
- short colormodel, flag;
+ short material_type, flag;
/* note, keep this below synced with render_types.h */
float r, g, b;
float specr, specg, specb;
@@ -147,11 +147,10 @@ typedef struct Material {
*/
#define MAXMAT 16
-/* colormodel */
-#define MA_RGB 0
-#define MA_CMYK 1
-#define MA_YUV 2
-#define MA_HSV 3
+/* material_type */
+#define MA_TYPE_SURFACE 0
+#define MA_TYPE_HALO 1
+#define MA_TYPE_VOLUME 2
/* flag */
/* for render */
@@ -166,7 +165,7 @@ typedef struct Material {
#define MA_WIRE 8
#define MA_VERTEXCOL 16
#define MA_HALO_SOFT 16
-#define MA_HALO 32
+#define MA_HALO 32 /* deprecated */
#define MA_ZTRA 64
#define MA_VERTEXCOLP 128
#define MA_ZINV 256
diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h
index 68d68d79db9..76f6b980aa2 100644
--- a/source/blender/makesdna/DNA_modifier_types.h
+++ b/source/blender/makesdna/DNA_modifier_types.h
@@ -40,6 +40,7 @@ typedef enum ModifierType {
eModifierType_Mask,
eModifierType_SimpleDeform,
eModifierType_Multires,
+ eModifierType_Surface,
NUM_MODIFIER_TYPES
} ModifierType;
@@ -423,6 +424,14 @@ typedef struct CollisionModifierData {
struct BVHTree *bvhtree; /* bounding volume hierarchy for this cloth object */
} CollisionModifierData;
+typedef struct SurfaceModifierData {
+ ModifierData modifier;
+
+ struct DerivedMesh *dm;
+
+ struct BVHTreeFromMesh *bvhtree; /* bounding volume hierarchy of the mesh faces */
+} SurfaceModifierData;
+
typedef enum {
eBooleanModifierOp_Intersect,
eBooleanModifierOp_Union,
diff --git a/source/blender/makesdna/DNA_object_fluidsim.h b/source/blender/makesdna/DNA_object_fluidsim.h
index 13984120d90..66c5baab84b 100644
--- a/source/blender/makesdna/DNA_object_fluidsim.h
+++ b/source/blender/makesdna/DNA_object_fluidsim.h
@@ -1,6 +1,6 @@
/**
*
- * $Id:
+ * $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
*
diff --git a/source/blender/makesdna/DNA_object_force.h b/source/blender/makesdna/DNA_object_force.h
index 21c5242a703..49435000820 100644
--- a/source/blender/makesdna/DNA_object_force.h
+++ b/source/blender/makesdna/DNA_object_force.h
@@ -225,6 +225,7 @@ typedef struct SoftBody {
#define PFIELD_USEMAXR 512
#define PFIELD_USEMINR 1024
#define PFIELD_TEX_ROOTCO 2048
+#define PFIELD_SURFACE 4096
/* pd->falloff */
#define PFIELD_FALL_SPHERE 0
diff --git a/source/blender/makesdna/DNA_object_types.h b/source/blender/makesdna/DNA_object_types.h
index 64e335fb3ad..60ca659c19c 100644
--- a/source/blender/makesdna/DNA_object_types.h
+++ b/source/blender/makesdna/DNA_object_types.h
@@ -159,7 +159,9 @@ typedef struct Object {
float formfactor;
float rdamping, sizefac;
float margin;
- int pad3;
+ float max_vel; /* clamp the maximum velocity 0.0 is disabled */
+ float min_vel; /* clamp the maximum velocity 0.0 is disabled */
+ float pad3; /* clamp the maximum velocity 0.0 is disabled */
char dt, dtx;
char totcol; /* copy of mesh or curve or meta */
@@ -424,6 +426,7 @@ extern Object workob;
#define OB_COLLISION 65536
#define OB_SOFT_BODY 0x20000
+#define OB_OCCLUDER 0x40000
/* ob->gameflag2 */
#define OB_NEVER_DO_ACTIVITY_CULLING 1
@@ -442,6 +445,7 @@ extern Object workob;
#define OB_BODY_TYPE_DYNAMIC 2
#define OB_BODY_TYPE_RIGID 3
#define OB_BODY_TYPE_SOFT 4
+#define OB_BODY_TYPE_OCCLUDER 5
/* ob->scavisflag */
#define OB_VIS_SENS 1
diff --git a/source/blender/makesdna/DNA_particle_types.h b/source/blender/makesdna/DNA_particle_types.h
index 2e232c2e1d4..575fcfd8ac7 100644
--- a/source/blender/makesdna/DNA_particle_types.h
+++ b/source/blender/makesdna/DNA_particle_types.h
@@ -1,7 +1,7 @@
/* DNA_particle_types.h
*
*
- * $Id: DNA_particle_types.h $
+ * $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
*
@@ -305,7 +305,7 @@ typedef struct ParticleSystem{ /* note, make sure all (runtime) are NULL's in
#define PART_DRAW_ANG 2
#define PART_DRAW_SIZE 4
#define PART_DRAW_EMITTER 8 /* render emitter also */
-#define PART_DRAW_KEYS 16
+//#define PART_DRAW_KEYS 16 /* not used anywhere */
#define PART_DRAW_ADAPT 32
#define PART_DRAW_COS 64
#define PART_DRAW_BB_LOCK 128
diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h
index d5828f7e3a3..6f88a98fee8 100644
--- a/source/blender/makesdna/DNA_scene_types.h
+++ b/source/blender/makesdna/DNA_scene_types.h
@@ -45,6 +45,7 @@ struct World;
struct Scene;
struct Image;
struct Group;
+struct Text;
struct bNodeTree;
struct AnimData;
@@ -316,6 +317,14 @@ typedef struct RenderData {
/* jpeg2000 */
short jp2_preset, jp2_depth;
int rpad3;
+
+ /* Dome variables */
+ short domeres, domemode;
+ short domeangle, pad9;
+ float domesize;
+ float domeresbuf;
+ struct Text *dometext;
+
} RenderData;
/* control render convert and shading engine */
@@ -453,6 +462,8 @@ typedef struct ToolSettings {
short unwrapper;
float uvcalc_radius;
float uvcalc_cubesize;
+ float uvcalc_margin;
+ float pad;
short uvcalc_mapdir;
short uvcalc_mapalign;
short uvcalc_flag;
@@ -588,7 +599,7 @@ typedef struct Scene {
int frame_step;
/* User-Defined KeyingSets */
- int active_keyingset; /* index of the active KeyingSet. first KeyingSet has index 1 */
+ int active_keyingset; /* index of the active KeyingSet. first KeyingSet has index 1, 'none' active is 0, 'add new' is -1 */
ListBase keyingsets; /* KeyingSets for the given frame */
} Scene;
diff --git a/source/blender/makesdna/DNA_screen_types.h b/source/blender/makesdna/DNA_screen_types.h
index 4ab9aa55b42..418cc84205a 100644
--- a/source/blender/makesdna/DNA_screen_types.h
+++ b/source/blender/makesdna/DNA_screen_types.h
@@ -39,6 +39,7 @@ struct SpaceLink;
struct ARegion;
struct ARegionType;
struct PanelType;
+struct HeaderType;
struct Scene;
struct uiLayout;
struct wmTimer;
@@ -90,20 +91,31 @@ typedef struct ScrEdge {
typedef struct Panel { /* the part from uiBlock that needs saved in file */
struct Panel *next, *prev;
- struct PanelType *type; /* runtime */
- struct uiLayout *layout; /* runtime for drawing */
+ struct PanelType *type; /* runtime */
+ struct uiLayout *layout; /* runtime for drawing */
char panelname[64], tabname[64]; /* defined as UI_MAX_NAME_STR */
char drawname[64]; /* panelname is identifier for restoring location */
short ofsx, ofsy, sizex, sizey;
- short flag, active; /* active= used currently by a uiBlock */
+ short labelofs, pad;
+ short flag, runtime_flag;
short control;
short snap;
- int sortcounter, pad; /* when sorting panels, it uses this to put new ones in right place */
+ int sortorder; /* panels are aligned according to increasing sortorder */
struct Panel *paneltab; /* this panel is tabbed in *paneltab */
void *activedata; /* runtime for panel manipulation */
} Panel;
+typedef struct Header {
+ struct HeaderType *type; /* runtime */
+ struct uiLayout *layout; /* runtime for drawing */
+} Header;
+
+typedef struct Menu {
+ struct MenuType *type; /* runtime */
+ struct uiLayout *layout; /* runtime for drawing */
+} Menu;
+
typedef struct ScrArea {
struct ScrArea *next, *prev;
@@ -206,6 +218,7 @@ typedef struct ARegion {
#define RGN_TYPE_CHANNELS 2
#define RGN_TYPE_TEMPORARY 3
#define RGN_TYPE_UI 4
+#define RGN_TYPE_TOOLS 5
/* region alignment */
#define RGN_ALIGN_NONE 0
diff --git a/source/blender/makesdna/DNA_sensor_types.h b/source/blender/makesdna/DNA_sensor_types.h
index 2cae2cc8ccb..7a358ad0694 100644
--- a/source/blender/makesdna/DNA_sensor_types.h
+++ b/source/blender/makesdna/DNA_sensor_types.h
@@ -166,7 +166,8 @@ typedef struct bJoystickSensor {
char type;
char joyindex;
short flag;
- int axis;
+ short axis;
+ short axis_single;
int axisf;
int button;
int hat;
@@ -255,20 +256,22 @@ typedef struct bJoystickSensor {
#define SENS_JOY_ANY_EVENT 1
-#define SENS_JOY_BUTTON 0
+#define SENS_JOY_BUTTON 0 /* axis type */
#define SENS_JOY_BUTTON_PRESSED 0
#define SENS_JOY_BUTTON_RELEASED 1
-#define SENS_JOY_AXIS 1
+#define SENS_JOY_AXIS 1 /* axis type */
#define SENS_JOY_X_AXIS 0
#define SENS_JOY_Y_AXIS 1
#define SENS_JOY_NEG_X_AXIS 2
#define SENS_JOY_NEG_Y_AXIS 3
#define SENS_JOY_PRECISION 4
-#define SENS_JOY_HAT 2
+#define SENS_JOY_HAT 2 /* axis type */
#define SENS_JOY_HAT_DIR 0
+#define SENS_JOY_AXIS_SINGLE 3 /* axis type */
+
#define SENS_DELAY_REPEAT 1
// should match JOYINDEX_MAX in SCA_JoystickDefines.h */
diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h
index 8a26a216e79..0d88e3eb6e8 100644
--- a/source/blender/makesdna/DNA_space_types.h
+++ b/source/blender/makesdna/DNA_space_types.h
@@ -96,12 +96,14 @@ typedef struct SpaceIpo {
short blockhandler[8];
View2D v2d; /* depricated, copied to region */
- // 'IPO keys' - vertical lines for
+ // 'IPO keys' - vertical lines for editing multiple keyframes at once - use Dopesheet instead for this?
//ListBase ipokey; // XXX it's not clear how these will come back yet
//short showkey; // XXX this doesn't need to be restored until ipokeys come back
struct bDopeSheet *ads; /* settings for filtering animation data (NOTE: we use a pointer due to code-linking issues) */
+ ListBase ghostCurves; /* sampled snapshots of F-Curves used as in-session guides */
+
short mode; /* mode for the Graph editor (eGraphEdit_Mode) */
short flag; /* settings for Graph editor */
short autosnap; /* time-transform autosnapping settings for Graph editor (eAnimEdit_AutoSnap in DNA_action_types.h) */
@@ -135,9 +137,9 @@ typedef struct SpaceButs {
short re_align;
short oldkeypress; /* for keeping track of the sub tab key cycling */
- char pad, flag;
+ char flag, texact;
- char texact, tab[7]; /* storing tabs for each context */
+ char tab[8]; /* storing tabs for each context */
} SpaceButs;
@@ -416,8 +418,8 @@ typedef struct SpaceImaSel {
/* **************** SPACE DEFINES ********************* */
-/* button defines */
-/* warning: the values of these defines are used in sbuts->tabs[7] */
+/* button defines (deprecated) */
+/* warning: the values of these defines are used in sbuts->tabs[8] */
/* sbuts->mainb new */
#define CONTEXT_SCENE 0
#define CONTEXT_OBJECT 1
@@ -427,7 +429,7 @@ typedef struct SpaceImaSel {
#define CONTEXT_SCRIPT 5
#define CONTEXT_LOGIC 6
-/* sbuts->mainb old */
+/* sbuts->mainb old (deprecated) */
#define BUTS_VIEW 0
#define BUTS_LAMP 1
#define BUTS_MAT 2
@@ -444,7 +446,7 @@ typedef struct SpaceImaSel {
#define BUTS_CONSTRAINT 13
#define BUTS_EFFECTS 14
-/* sbuts->tab new */
+/* sbuts->tab new (deprecated) */
#define TAB_SHADING_MAT 0
#define TAB_SHADING_TEX 1
#define TAB_SHADING_RAD 2
@@ -465,8 +467,10 @@ typedef struct SpaceImaSel {
#define SB_PRV_OSA 1
/* sbuts->align */
+#define BUT_FREE 0
#define BUT_HORIZONTAL 1
#define BUT_VERTICAL 2
+#define BUT_AUTO 3
/* sbuts->scaflag */
#define BUTS_SENS_SEL 1
@@ -573,6 +577,8 @@ typedef struct SpaceImaSel {
#define SI_DISPGP 1<<22
#define SI_DRAW_OTHER 1<<23
+#define SI_COLOR_CORRECTION 1<<24
+
/* SpaceIpo->flag (Graph Editor Settings) */
#define SIPO_LOCK_VIEW (1<<0)
#define SIPO_NOTRANSKEYCULL (1<<1)
diff --git a/source/blender/makesdna/DNA_userdef_types.h b/source/blender/makesdna/DNA_userdef_types.h
index 7b8c50806ca..c7a74fe5358 100644
--- a/source/blender/makesdna/DNA_userdef_types.h
+++ b/source/blender/makesdna/DNA_userdef_types.h
@@ -38,40 +38,130 @@
/* themes; defines in BIF_resource.h */
struct ColorBand;
-/* global, button colors */
-typedef struct ThemeUI {
+/* ************************ style definitions ******************** */
+
+#define MAX_STYLE_NAME 64
+#define MAX_FONT_NAME 256
+
+/* default uifont_id offered by Blender */
+#define UIFONT_DEFAULT 0
+#define UIFONT_BITMAP 1
+/* free slots */
+#define UIFONT_CUSTOM1 2
+#define UIFONT_CUSTOM2 3
+
+/* default fonts to load/initalize */
+/* first font is the default (index 0), others optional */
+typedef struct uiFont {
+ struct uiFont *next, *prev;
+ char filename[256];
+ short blf_id; /* from blfont lib */
+ short uifont_id; /* own id */
+ short r_to_l; /* fonts that read from left to right */
+ short pad;
+
+} uiFont;
+
+/* this state defines appearance of text */
+typedef struct uiFontStyle {
+ short uifont_id; /* saved in file, 0 is default */
+ short points; /* actual size depends on 'global' dpi */
+ short italic, bold; /* style hint */
+ short shadow; /* value is amount of pixels blur */
+ short shadx, shady; /* shadow offset in pixels */
+ short align; /* text align hint */
+ float shadowalpha; /* total alpha */
+ float shadowcolor; /* 1 value, typically white or black anyway */
+
+} uiFontStyle;
+
+/* uiFontStyle->align */
+#define UI_STYLE_TEXT_LEFT 0
+#define UI_STYLE_TEXT_CENTER 1
+#define UI_STYLE_TEXT_RIGHT 2
+
+
+/* this is fed to the layout engine and widget code */
+typedef struct uiStyle {
+ struct uiStyle *next, *prev;
+
+ char name[64]; /* MAX_STYLE_NAME */
+
+ uiFontStyle paneltitle;
+ uiFontStyle grouplabel;
+ uiFontStyle widgetlabel;
+ uiFontStyle widget;
+
+ short minlabelchars; /* in characters */
+ short minwidgetchars; /* in characters */
+
+ short columnspace;
+ short templatespace;
+ short boxspace;
+ short buttonspacex;
+ short buttonspacey;
+ short panelspace;
+ short panelouter;
+
+ short pad[3];
+} uiStyle;
+
+typedef struct uiWidgetColors {
char outline[4];
- char neutral[4];
- char action[4];
- char setting[4];
- char setting1[4];
- char setting2[4];
- char num[4];
- char textfield[4];
- char textfield_hi[4];
- char popup[4];
+ char inner[4];
+ char inner_sel[4];
+ char item[4];
char text[4];
- char text_hi[4];
- char menu_back[4];
- char menu_item[4];
- char menu_hilite[4];
- char menu_text[4];
- char menu_text_hi[4];
+ char text_sel[4];
+ short shaded;
+ short shadetop, shadedown;
+ short pad;
+} uiWidgetColors;
+
+typedef struct ThemeUI {
+
+ /* Interface Elements (buttons, menus, icons) */
+ uiWidgetColors wcol_regular, wcol_tool, wcol_radio, wcol_text, wcol_option;
+ uiWidgetColors wcol_num, wcol_numslider;
+ uiWidgetColors wcol_menu, wcol_pulldown, wcol_menu_back, wcol_menu_item;
- char but_drawtype;
- char pad[3];
char iconfile[80]; // FILE_MAXFILE length
+
} ThemeUI;
/* try to put them all in one, if needed a special struct can be created as well
* for example later on, when we introduce wire colors for ob types or so...
*/
typedef struct ThemeSpace {
+ /* main window colors */
char back[4];
+ char title[4];
char text[4];
char text_hi[4];
+
+ /* header colors */
char header[4];
+ char header_title[4];
+ char header_text[4];
+ char header_text_hi[4];
+
+ /* button/tool regions */
+ char button[4];
+ char button_title[4];
+ char button_text[4];
+ char button_text_hi[4];
+
+ /* listview regions */
+ char list[4];
+ char list_title[4];
+ char list_text[4];
+ char list_text_hi[4];
+
+ /* float panel */
char panel[4];
+ char panel_title[4];
+ char panel_text[4];
+ char panel_text_hi[4];
char shade1[4];
char shade2[4];
@@ -105,8 +195,12 @@ typedef struct ThemeSpace {
char handle_vertex[4];
char handle_vertex_select[4];
+
char handle_vertex_size;
char hpad[3];
+
+ char pad[4];
+
} ThemeSpace;
@@ -129,7 +223,6 @@ typedef struct bTheme {
struct bTheme *next, *prev;
char name[32];
- /* Interface Elements (buttons, menus, icons) */
ThemeUI tui;
/* Individual Spacetypes */
@@ -152,8 +245,7 @@ typedef struct bTheme {
/* 20 sets of bone colors for this theme */
ThemeWireColor tarm[20];
/*ThemeWireColor tobj[20];*/
-
- unsigned char bpad[4], bpad1[4];
+
} bTheme;
typedef struct SolidLight {
@@ -174,20 +266,24 @@ typedef struct UserDef {
char sounddir[160];
/* yafray: temporary xml export directory */
char yfexportdir[160];
- short versions, vrmlflag; // tmp for export, will be replaced by strubi
+ short versions, pad;
+
int gameflags;
int wheellinescroll;
int uiflag, language;
short userpref, viewzoom;
- short console_buffer; //console vars here for tuhopuu compat, --phase
- short console_out;
+
int mixbufsize;
- int fontsize;
+ int pad1;
+ int dpi; /* range 48-128? */
short encoding;
short transopts;
short menuthreshold1, menuthreshold2;
- char fontname[256]; // FILE_MAXDIR+FILE length
+
struct ListBase themes;
+ struct ListBase uifonts;
+ struct ListBase uistyles;
+
short undosteps;
short undomemory;
short gp_manhattendist, gp_euclideandist, gp_eraser;
@@ -209,7 +305,7 @@ typedef struct UserDef {
short glreslimit;
short ndof_pan, ndof_rotate;
short curssize, ipo_new;
-// char pad[8];
+
char versemaster[160];
char verseuser[160];
float glalphaclip;
@@ -321,11 +417,6 @@ extern UserDef U; /* from blenkernel blender.c */
#define USER_DISABLE_SOUND 2
#define USER_DISABLE_MIPMAP 4
-/* vrml flag */
-#define USER_VRML_LAYERS 1
-#define USER_VRML_AUTOSCALE 2
-#define USER_VRML_TWOSIDED 4
-
/* wm draw method */
#define USER_DRAW_TRIPLE 0
#define USER_DRAW_OVERLAP 1
diff --git a/source/blender/makesdna/DNA_view3d_types.h b/source/blender/makesdna/DNA_view3d_types.h
index 3b56fd96493..e546038902f 100644
--- a/source/blender/makesdna/DNA_view3d_types.h
+++ b/source/blender/makesdna/DNA_view3d_types.h
@@ -78,7 +78,10 @@ typedef struct RegionView3D {
float viewinv[4][4];
float persmat[4][4];
float persinv[4][4];
- float twmat[4][4]; /* transform widget */
+
+ /* local viewmat/persmat, multiplied with object matrix, while drawing */
+ float viewmatob[4][4];
+ float persmatob[4][4];
float viewquat[4], dist, zfac; /* zfac is initgrabz() result */
float camdx, camdy; /* camera view offsets, 1.0 = viewplane moves entire width/height */
diff --git a/source/blender/makesdna/DNA_world_types.h b/source/blender/makesdna/DNA_world_types.h
index 3fd6642df8a..8216a0fb800 100644
--- a/source/blender/makesdna/DNA_world_types.h
+++ b/source/blender/makesdna/DNA_world_types.h
@@ -86,9 +86,12 @@ typedef struct World {
* bit 1: Do stars
* bit 2: (reserved) depth of field
* bit 3: (gameengine): Activity culling is enabled.
+ * bit 4: ambient occlusion
+ * bit 5: (gameengine) : enable Bullet DBVT tree for view frustrum culling
*/
short mode;
- int physicsEngine; /* here it's aligned */
+ short occlusionRes; /* resolution of occlusion Z buffer in pixel */
+ short physicsEngine; /* here it's aligned */
float misi, miststa, mistdist, misthi;
@@ -139,6 +142,7 @@ typedef struct World {
#define WO_DOF 4
#define WO_ACTIVITY_CULLING 8
#define WO_AMB_OCC 16
+#define WO_DBVT_CULLING 32
/* aomix */
#define WO_AOADD 0
diff --git a/source/blender/makesdna/intern/SConscript b/source/blender/makesdna/intern/SConscript
index eae75a1658b..29d57f095e7 100644
--- a/source/blender/makesdna/intern/SConscript
+++ b/source/blender/makesdna/intern/SConscript
@@ -60,7 +60,10 @@ if env['OURPLATFORM'] != 'linuxcross':
if USE_WINE:
dna.Command ('dna.c', '', 'wine ' + ap(root_build_dir+os.sep+"makesdna $TARGET"))
else:
- dna.Command ('dna.c', '', ap(root_build_dir+os.sep+"makesdna $TARGET"))
+ if env['OURPLATFORM'] in ('win32-vc', 'win64-vc', 'win32-mingw'):
+ dna.Command ('dna.c', '', "\"" + root_build_dir+os.sep+"makesdna\" $TARGET")
+ else:
+ dna.Command ('dna.c', '', root_build_dir+os.sep+"makesdna $TARGET")
else:
dna.Command ('dna.c', '', ap(root_build_dir+os.sep+"makesdna.exe $TARGET"))
obj = ['intern/dna.c', 'intern/dna_genfile.c']
diff --git a/source/blender/makesdna/intern/dna_genfile.c b/source/blender/makesdna/intern/dna_genfile.c
index 0ffc170a5aa..b4b029a19e5 100644
--- a/source/blender/makesdna/intern/dna_genfile.c
+++ b/source/blender/makesdna/intern/dna_genfile.c
@@ -298,7 +298,7 @@ static void init_structDNA(SDNA *sdna, int do_endian_swap)
/* in sdna->data the data, now we convert that to something understandable */
{
int *data, *verg;
- long nr; /* intptr_t 2.48 XXX */
+ intptr_t nr;
short *sp;
char str[8], *cp;
@@ -334,7 +334,7 @@ static void init_structDNA(SDNA *sdna, int do_endian_swap)
cp++;
nr++;
}
- nr= (long)cp; /* prevent BUS error */ /* intptr_t 2.48 XXX */
+ nr= (intptr_t)cp; /* prevent BUS error */
nr= (nr+3) & ~3;
cp= (char *)nr;
@@ -372,7 +372,7 @@ static void init_structDNA(SDNA *sdna, int do_endian_swap)
cp++;
nr++;
}
- nr= (long)cp; /* prevent BUS error */ /* intptr_t 2.48 XXX */
+ nr= (intptr_t)cp; /* prevent BUS error */
nr= (nr+3) & ~3;
cp= (char *)nr;
@@ -1081,6 +1081,6 @@ int DNA_elem_offset(SDNA *sdna, char *stype, char *vartype, char *name)
int SDNAnr= DNA_struct_find_nr(sdna, stype);
short *spo= sdna->structs[SDNAnr];
char *cp= find_elem(sdna, vartype, name, spo, NULL, NULL);
- return (int)((long)cp); /* intptr_t 2.48 XXX */
+ return (int)((intptr_t)cp);
}
diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h
index e2d3f85f550..36026cbf28c 100644
--- a/source/blender/makesrna/RNA_access.h
+++ b/source/blender/makesrna/RNA_access.h
@@ -25,6 +25,8 @@
#ifndef RNA_ACCESS
#define RNA_ACCESS
+#include <stdarg.h>
+
#include "DNA_listBase.h"
#include "RNA_types.h"
@@ -47,6 +49,7 @@ extern StructRNA RNA_ActuatorSensor;
extern StructRNA RNA_AlwaysSensor;
extern StructRNA RNA_AndController;
extern StructRNA RNA_AnimData;
+extern StructRNA RNA_AnyType;
extern StructRNA RNA_Area;
extern StructRNA RNA_AreaLamp;
extern StructRNA RNA_Armature;
@@ -55,6 +58,7 @@ extern StructRNA RNA_ArrayModifier;
extern StructRNA RNA_BevelModifier;
extern StructRNA RNA_BezierCurvePoint;
extern StructRNA RNA_BlenderRNA;
+extern StructRNA RNA_BlendTexture;
extern StructRNA RNA_Bone;
extern StructRNA RNA_BooleanModifier;
extern StructRNA RNA_BooleanProperty;
@@ -65,6 +69,7 @@ extern StructRNA RNA_CastModifier;
extern StructRNA RNA_ClothCollisionSettings;
extern StructRNA RNA_ClothModifier;
extern StructRNA RNA_ClothSettings;
+extern StructRNA RNA_CloudsTexture;
extern StructRNA RNA_CollectionProperty;
extern StructRNA RNA_CollisionModifier;
extern StructRNA RNA_CollisionSensor;
@@ -85,21 +90,26 @@ extern StructRNA RNA_CurvePoint;
extern StructRNA RNA_DecimateModifier;
extern StructRNA RNA_DelaySensor;
extern StructRNA RNA_DisplaceModifier;
+extern StructRNA RNA_DistortedNoiseTexture;
extern StructRNA RNA_DomainFluidSettings;
extern StructRNA RNA_Driver;
+extern StructRNA RNA_DriverTarget;
extern StructRNA RNA_EdgeSplitModifier;
extern StructRNA RNA_EffectSequence;
extern StructRNA RNA_EnumProperty;
extern StructRNA RNA_EnumPropertyItem;
extern StructRNA RNA_EnvironmentMap;
+extern StructRNA RNA_EnvironmentMapTexture;
extern StructRNA RNA_ExplodeModifier;
extern StructRNA RNA_ExpressionController;
extern StructRNA RNA_FCurve;
+extern StructRNA RNA_FModifier;
extern StructRNA RNA_FieldSettings;
extern StructRNA RNA_FloatProperty;
extern StructRNA RNA_FluidFluidSettings;
extern StructRNA RNA_FluidSettings;
extern StructRNA RNA_FluidSimulationModifier;
+extern StructRNA RNA_Function;
extern StructRNA RNA_GameBooleanProperty;
extern StructRNA RNA_GameFloatProperty;
extern StructRNA RNA_GameIntProperty;
@@ -117,6 +127,7 @@ extern StructRNA RNA_IDProperty;
extern StructRNA RNA_IDPropertyGroup;
extern StructRNA RNA_Image;
extern StructRNA RNA_ImageSequence;
+extern StructRNA RNA_ImageTexture;
extern StructRNA RNA_ImageUser;
extern StructRNA RNA_InflowFluidSettings;
extern StructRNA RNA_IntProperty;
@@ -133,7 +144,9 @@ extern StructRNA RNA_LatticeModifier;
extern StructRNA RNA_LatticePoint;
extern StructRNA RNA_Library;
extern StructRNA RNA_LocalLamp;
+extern StructRNA RNA_MagicTexture;
extern StructRNA RNA_Main;
+extern StructRNA RNA_MarbleTexture;
extern StructRNA RNA_MaskModifier;
extern StructRNA RNA_Material;
extern StructRNA RNA_MaterialHalo;
@@ -168,10 +181,12 @@ extern StructRNA RNA_Modifier;
extern StructRNA RNA_MouseSensor;
extern StructRNA RNA_MovieSequence;
extern StructRNA RNA_MultiresModifier;
+extern StructRNA RNA_MusgraveTexture;
extern StructRNA RNA_NandController;
extern StructRNA RNA_NearSensor;
extern StructRNA RNA_Node;
extern StructRNA RNA_NodeTree;
+extern StructRNA RNA_NoiseTexture;
extern StructRNA RNA_NorController;
extern StructRNA RNA_Object;
extern StructRNA RNA_ObstacleFluidSettings;
@@ -189,6 +204,7 @@ extern StructRNA RNA_ParticleSettings;
extern StructRNA RNA_ParticleSystem;
extern StructRNA RNA_ParticleSystemModifier;
extern StructRNA RNA_PluginSequence;
+extern StructRNA RNA_PluginTexture;
extern StructRNA RNA_PointCache;
extern StructRNA RNA_PointerProperty;
extern StructRNA RNA_Pose;
@@ -202,6 +218,7 @@ extern StructRNA RNA_RandomSensor;
extern StructRNA RNA_RaySensor;
extern StructRNA RNA_Region;
extern StructRNA RNA_Scene;
+extern StructRNA RNA_SceneRenderData;
extern StructRNA RNA_SceneSequence;
extern StructRNA RNA_Screen;
extern StructRNA RNA_ScriptLink;
@@ -233,6 +250,7 @@ extern StructRNA RNA_SpeedControlSequence;
extern StructRNA RNA_SpotLamp;
extern StructRNA RNA_StringProperty;
extern StructRNA RNA_Struct;
+extern StructRNA RNA_StucciTexture;
extern StructRNA RNA_SubsurfModifier;
extern StructRNA RNA_SunLamp;
extern StructRNA RNA_Text;
@@ -269,11 +287,13 @@ extern StructRNA RNA_UserPreferences;
extern StructRNA RNA_UserSolidLight;
extern StructRNA RNA_VectorFont;
extern StructRNA RNA_VertexGroup;
+extern StructRNA RNA_VoronoiTexture;
extern StructRNA RNA_VPaint;
extern StructRNA RNA_VertexGroupElement;
extern StructRNA RNA_WaveModifier;
extern StructRNA RNA_WindowManager;
extern StructRNA RNA_WipeSequence;
+extern StructRNA RNA_WoodTexture;
extern StructRNA RNA_World;
extern StructRNA RNA_WorldAmbientOcclusion;
extern StructRNA RNA_WorldMistSettings;
@@ -301,19 +321,33 @@ void RNA_blender_rna_pointer_create(PointerRNA *r_ptr);
/* Structs */
-const char *RNA_struct_identifier(PointerRNA *ptr);
-const char *RNA_struct_ui_name(PointerRNA *ptr);
-const char *RNA_struct_ui_description(PointerRNA *ptr);
+const char *RNA_struct_identifier(StructRNA *type);
+const char *RNA_struct_ui_name(StructRNA *type);
+const char *RNA_struct_ui_description(StructRNA *type);
+
+PropertyRNA *RNA_struct_name_property(StructRNA *type);
+PropertyRNA *RNA_struct_iterator_property(StructRNA *type);
+
+int RNA_struct_is_ID(StructRNA *type);
+int RNA_struct_is_a(StructRNA *type, StructRNA *srna);
-PropertyRNA *RNA_struct_name_property(PointerRNA *ptr);
-PropertyRNA *RNA_struct_iterator_property(PointerRNA *ptr);
+StructRegisterFunc RNA_struct_register(StructRNA *type);
+StructUnregisterFunc RNA_struct_unregister(StructRNA *type);
-int RNA_struct_is_ID(PointerRNA *ptr);
-int RNA_struct_is_a(PointerRNA *ptr, StructRNA *srna);
+void *RNA_struct_py_type_get(StructRNA *srna);
+void RNA_struct_py_type_set(StructRNA *srna, void *py_type);
+
+void *RNA_struct_blender_type_get(StructRNA *srna);
+void RNA_struct_blender_type_set(StructRNA *srna, void *blender_type);
+
+struct IDProperty *RNA_struct_idproperties(PointerRNA *ptr, int create);
PropertyRNA *RNA_struct_find_property(PointerRNA *ptr, const char *identifier);
const struct ListBase *RNA_struct_defined_properties(StructRNA *srna);
+FunctionRNA *RNA_struct_find_function(PointerRNA *ptr, const char *identifier);
+const struct ListBase *RNA_struct_defined_functions(StructRNA *srna);
+
/* Properties
*
* Access to struct properties. All this works with RNA pointers rather than
@@ -321,11 +355,20 @@ const struct ListBase *RNA_struct_defined_properties(StructRNA *srna);
/* Property Information */
-const char *RNA_property_identifier(PointerRNA *ptr, PropertyRNA *prop);
-PropertyType RNA_property_type(PointerRNA *ptr, PropertyRNA *prop);
-PropertySubType RNA_property_subtype(PointerRNA *ptr, PropertyRNA *prop);
+const char *RNA_property_identifier(PropertyRNA *prop);
+PropertyType RNA_property_type(PropertyRNA *prop);
+PropertySubType RNA_property_subtype(PropertyRNA *prop);
+int RNA_property_flag(PropertyRNA *prop);
-int RNA_property_array_length(PointerRNA *ptr, PropertyRNA *prop);
+int RNA_property_array_length(PropertyRNA *prop);
+
+StructRNA *RNA_property_pointer_type(PropertyRNA *prop);
+int RNA_property_string_maxlength(PropertyRNA *prop);
+
+const char *RNA_property_ui_name(PropertyRNA *prop);
+const char *RNA_property_ui_description(PropertyRNA *prop);
+
+/* Dynamic Property Information */
void RNA_property_int_range(PointerRNA *ptr, PropertyRNA *prop, int *hardmin, int *hardmax);
void RNA_property_int_ui_range(PointerRNA *ptr, PropertyRNA *prop, int *softmin, int *softmax, int *step);
@@ -333,16 +376,10 @@ void RNA_property_int_ui_range(PointerRNA *ptr, PropertyRNA *prop, int *softmin,
void RNA_property_float_range(PointerRNA *ptr, PropertyRNA *prop, float *hardmin, float *hardmax);
void RNA_property_float_ui_range(PointerRNA *ptr, PropertyRNA *prop, float *softmin, float *softmax, float *step, float *precision);
-int RNA_property_string_maxlength(PointerRNA *ptr, PropertyRNA *prop);
-StructRNA *RNA_property_pointer_type(PointerRNA *ptr, PropertyRNA *prop);
-
void RNA_property_enum_items(PointerRNA *ptr, PropertyRNA *prop, const EnumPropertyItem **item, int *totitem);
int RNA_property_enum_value(PointerRNA *ptr, PropertyRNA *prop, const char *identifier, int *value);
int RNA_property_enum_identifier(PointerRNA *ptr, PropertyRNA *prop, const int value, const char **identifier);
-const char *RNA_property_ui_name(PointerRNA *ptr, PropertyRNA *prop);
-const char *RNA_property_ui_description(PointerRNA *ptr, PropertyRNA *prop);
-
int RNA_property_editable(PointerRNA *ptr, PropertyRNA *prop);
int RNA_property_animateable(PointerRNA *ptr, PropertyRNA *prop);
int RNA_property_animated(PointerRNA *ptr, PropertyRNA *prop);
@@ -455,6 +492,10 @@ int RNA_enum_get(PointerRNA *ptr, const char *name);
void RNA_enum_set(PointerRNA *ptr, const char *name, int value);
int RNA_enum_is_equal(PointerRNA *ptr, const char *name, const char *enumname);
+/* lower level functions that donr use a PointerRNA */
+int RNA_enum_value_from_id(EnumPropertyItem *item, const char *identifier, int *value);
+int RNA_enum_id_from_value(EnumPropertyItem *item, int value, const char **identifier);
+
void RNA_string_get(PointerRNA *ptr, const char *name, char *value);
char *RNA_string_get_alloc(PointerRNA *ptr, const char *name, char *fixedbuf, int fixedlen);
int RNA_string_length(PointerRNA *ptr, const char *name);
@@ -485,6 +526,39 @@ int RNA_property_is_set(PointerRNA *ptr, const char *name);
/* python compatible string representation of this property, (must be freed!) */
char *RNA_property_as_string(PointerRNA *ptr, PropertyRNA *prop);
+/* Function */
+
+const char *RNA_function_identifier(FunctionRNA *func);
+PropertyRNA *RNA_function_return(FunctionRNA *func);
+const char *RNA_function_ui_description(FunctionRNA *func);
+int RNA_function_flag(FunctionRNA *func);
+
+PropertyRNA *RNA_function_get_parameter(PointerRNA *ptr, FunctionRNA *func, int index);
+PropertyRNA *RNA_function_find_parameter(PointerRNA *ptr, FunctionRNA *func, const char *identifier);
+const struct ListBase *RNA_function_defined_parameters(FunctionRNA *func);
+
+/* Utility */
+
+ParameterList *RNA_parameter_list_create(PointerRNA *ptr, FunctionRNA *func);
+void RNA_parameter_list_free(ParameterList *parms);
+
+void RNA_parameter_list_begin(ParameterList *parms, ParameterIterator *iter);
+void RNA_parameter_list_next(ParameterIterator *iter);
+void RNA_parameter_list_end(ParameterIterator *iter);
+
+void RNA_parameter_get(ParameterList *parms, PropertyRNA *parm, void **value);
+void RNA_parameter_get_lookup(ParameterList *parms, const char *identifier, void **value);
+void RNA_parameter_set(ParameterList *parms, PropertyRNA *parm, void *value);
+void RNA_parameter_set_lookup(ParameterList *parms, const char *identifier, void *value);
+
+int RNA_function_call(PointerRNA *ptr, FunctionRNA *func, ParameterList *parms);
+int RNA_function_call_lookup(PointerRNA *ptr, const char *identifier, ParameterList *parms);
+
+int RNA_function_call_direct(PointerRNA *ptr, FunctionRNA *func, const char *format, ...);
+int RNA_function_call_direct_lookup(PointerRNA *ptr, const char *identifier, const char *format, ...);
+int RNA_function_call_direct_va(PointerRNA *ptr, FunctionRNA *func, const char *format, va_list args);
+int RNA_function_call_direct_va_lookup(PointerRNA *ptr, const char *identifier, const char *format, va_list args);
+
#ifdef __cplusplus
}
#endif
diff --git a/source/blender/makesrna/RNA_define.h b/source/blender/makesrna/RNA_define.h
index 94a2c51c660..5777553ed58 100644
--- a/source/blender/makesrna/RNA_define.h
+++ b/source/blender/makesrna/RNA_define.h
@@ -53,6 +53,8 @@ void RNA_def_struct_name_property(StructRNA *srna, PropertyRNA *prop);
void RNA_def_struct_nested(BlenderRNA *brna, StructRNA *srna, const char *structname);
void RNA_def_struct_flag(StructRNA *srna, int flag);
void RNA_def_struct_refine_func(StructRNA *srna, const char *refine);
+void RNA_def_struct_idproperties_func(StructRNA *srna, const char *refine);
+void RNA_def_struct_register_funcs(StructRNA *srna, const char *reg, const char *unreg);
void RNA_def_struct_path_func(StructRNA *srna, const char *path);
void RNA_def_struct_identifier(StructRNA *srna, const char *identifier);
void RNA_def_struct_ui_text(StructRNA *srna, const char *name, const char *description);
@@ -60,54 +62,46 @@ void RNA_struct_free(BlenderRNA *brna, StructRNA *srna);
/* Compact Property Definitions */
-PropertyRNA *RNA_def_boolean(StructRNA *srna, const char *identifier, int default_value,
- const char *ui_name, const char *ui_description);
-PropertyRNA *RNA_def_boolean_array(StructRNA *srna, const char *identifier, int len, int *default_value,
- const char *ui_name, const char *ui_description);
-PropertyRNA *RNA_def_boolean_vector(StructRNA *srna, const char *identifier, int len, int *default_value,
- const char *ui_name, const char *ui_description);
+typedef void StructOrFunctionRNA;
-PropertyRNA *RNA_def_int(StructRNA *srna, const char *identifier, int default_value, int hardmin, int hardmax,
- const char *ui_name, const char *ui_description, int softmin, int softmax);
-PropertyRNA *RNA_def_int_vector(StructRNA *srna, const char *identifier, int len, const int *default_value, int hardmin, int hardmax,
- const char *ui_name, const char *ui_description, int softmin, int softmax);
-PropertyRNA *RNA_def_int_array(StructRNA *srna, const char *identifier, int len, const int *default_value, int hardmin, int hardmax,
- const char *ui_name, const char *ui_description, int softmin, int softmax);
+PropertyRNA *RNA_def_boolean(StructOrFunctionRNA *cont, const char *identifier, int default_value, const char *ui_name, const char *ui_description);
+PropertyRNA *RNA_def_boolean_array(StructOrFunctionRNA *cont, const char *identifier, int len, int *default_value, const char *ui_name, const char *ui_description);
+PropertyRNA *RNA_def_boolean_vector(StructOrFunctionRNA *cont, const char *identifier, int len, int *default_value, const char *ui_name, const char *ui_description);
-PropertyRNA *RNA_def_string(StructRNA *srna, const char *identifier, const char *default_value, int maxlen,
- const char *ui_name, const char *ui_description);
-PropertyRNA *RNA_def_string_file_path(StructRNA *srna, const char *identifier, const char *default_value, int maxlen,
- const char *ui_name, const char *ui_description);
-PropertyRNA *RNA_def_string_dir_path(StructRNA *srna, const char *identifier, const char *default_value, int maxlen,
- const char *ui_name, const char *ui_description);
+PropertyRNA *RNA_def_int(StructOrFunctionRNA *cont, const char *identifier, int default_value, int hardmin, int hardmax, const char *ui_name, const char *ui_description, int softmin, int softmax);
+PropertyRNA *RNA_def_int_vector(StructOrFunctionRNA *cont, const char *identifier, int len, const int *default_value, int hardmin, int hardmax, const char *ui_name, const char *ui_description, int softmin, int softmax);
+PropertyRNA *RNA_def_int_array(StructOrFunctionRNA *cont, const char *identifier, int len, const int *default_value, int hardmin, int hardmax, const char *ui_name, const char *ui_description, int softmin, int softmax);
-PropertyRNA *RNA_def_enum(StructRNA *srna, const char *identifier, EnumPropertyItem *items, int default_value,
- const char *ui_name, const char *ui_description);
+PropertyRNA *RNA_def_string(StructOrFunctionRNA *cont, const char *identifier, const char *default_value, int maxlen, const char *ui_name, const char *ui_description);
+PropertyRNA *RNA_def_string_file_path(StructOrFunctionRNA *cont, const char *identifier, const char *default_value, int maxlen, const char *ui_name, const char *ui_description);
+PropertyRNA *RNA_def_string_dir_path(StructOrFunctionRNA *cont, const char *identifier, const char *default_value, int maxlen, const char *ui_name, const char *ui_description);
-PropertyRNA *RNA_def_float(StructRNA *srna, const char *identifier, float default_value, float hardmin, float hardmax,
- const char *ui_name, const char *ui_description, float softmin, float softmax);
-PropertyRNA *RNA_def_float_vector(StructRNA *srna, const char *identifier, int len, const float *default_value,
- float hardmin, float hardmax, const char *ui_name, const char *ui_description, float softmin, float softmax);
-PropertyRNA *RNA_def_float_color(StructRNA *srna, const char *identifier, int len, const float *default_value,
- float hardmin, float hardmax, const char *ui_name, const char *ui_description, float softmin, float softmax);
-PropertyRNA *RNA_def_float_matrix(StructRNA *srna, const char *identifier, int len, const float *default_value,
- float hardmin, float hardmax, const char *ui_name, const char *ui_description, float softmin, float softmax);
-PropertyRNA *RNA_def_float_rotation(StructRNA *srna, const char *identifier, int len, const float *default_value,
+PropertyRNA *RNA_def_enum(StructOrFunctionRNA *cont, const char *identifier, EnumPropertyItem *items, int default_value, const char *ui_name, const char *ui_description);
+
+PropertyRNA *RNA_def_float(StructOrFunctionRNA *cont, const char *identifier, float default_value, float hardmin, float hardmax, const char *ui_name, const char *ui_description, float softmin, float softmax);
+PropertyRNA *RNA_def_float_vector(StructOrFunctionRNA *cont, const char *identifier, int len, const float *default_value, float hardmin, float hardmax, const char *ui_name, const char *ui_description, float softmin, float softmax);
+PropertyRNA *RNA_def_float_color(StructOrFunctionRNA *cont, const char *identifier, int len, const float *default_value, float hardmin, float hardmax, const char *ui_name, const char *ui_description, float softmin, float softmax);
+PropertyRNA *RNA_def_float_matrix(StructOrFunctionRNA *cont, const char *identifier, int len, const float *default_value, float hardmin, float hardmax, const char *ui_name, const char *ui_description, float softmin, float softmax);
+PropertyRNA *RNA_def_float_rotation(StructOrFunctionRNA *cont, const char *identifier, int len, const float *default_value,
float hardmin, float hardmax, const char *ui_name, const char *ui_description, float softmin, float softmax);
-PropertyRNA *RNA_def_float_array(StructRNA *srna, const char *identifier, int len, const float *default_value,
+PropertyRNA *RNA_def_float_array(StructOrFunctionRNA *cont, const char *identifier, int len, const float *default_value,
float hardmin, float hardmax, const char *ui_name, const char *ui_description, float softmin, float softmax);
-PropertyRNA *RNA_def_float_percentage(StructRNA *srna, const char *identifier, float default_value, float hardmin, float hardmax,
+PropertyRNA *RNA_def_float_percentage(StructOrFunctionRNA *cont, const char *identifier, float default_value, float hardmin, float hardmax,
const char *ui_name, const char *ui_description, float softmin, float softmax);
-PropertyRNA *RNA_def_pointer_runtime(StructRNA *srna, const char *identifier, StructRNA *type,
+PropertyRNA *RNA_def_pointer(StructOrFunctionRNA *cont, const char *identifier, const char *type,
+ const char *ui_name, const char *ui_description);
+PropertyRNA *RNA_def_pointer_runtime(StructOrFunctionRNA *cont, const char *identifier, StructRNA *type,
const char *ui_name, const char *ui_description);
-PropertyRNA *RNA_def_collection_runtime(StructRNA *srna, const char *identifier, StructRNA *type,
+PropertyRNA *RNA_def_collection(StructOrFunctionRNA *cont, const char *identifier, const char *type,
+ const char *ui_name, const char *ui_description);
+PropertyRNA *RNA_def_collection_runtime(StructOrFunctionRNA *cont, const char *identifier, StructRNA *type,
const char *ui_name, const char *ui_description);
/* Extended Property Definitions */
-PropertyRNA *RNA_def_property(StructRNA *srna, const char *identifier, int type, int subtype);
+PropertyRNA *RNA_def_property(StructOrFunctionRNA *cont, const char *identifier, int type, int subtype);
void RNA_def_property_boolean_sdna(PropertyRNA *prop, const char *structname, const char *propname, int bit);
void RNA_def_property_boolean_negative_sdna(PropertyRNA *prop, const char *structname, const char *propname, int bit);
@@ -152,6 +146,14 @@ void RNA_def_property_string_funcs(PropertyRNA *prop, const char *get, const cha
void RNA_def_property_pointer_funcs(PropertyRNA *prop, const char *get, const char *set);
void RNA_def_property_collection_funcs(PropertyRNA *prop, const char *begin, const char *next, const char *end, const char *get, const char *length, const char *lookupint, const char *lookupstring);
+/* Function */
+
+FunctionRNA *RNA_def_function(StructRNA *srna, const char *identifier, const char *call);
+FunctionRNA *RNA_def_function_runtime(StructRNA *srna, const char *identifier, CallFunc call);
+void RNA_def_function_return(FunctionRNA *func, PropertyRNA *ret);
+void RNA_def_function_flag(FunctionRNA *func, int flag);
+void RNA_def_function_ui_description(FunctionRNA *func, const char *description);
+
#ifdef __cplusplus
}
#endif
diff --git a/source/blender/makesrna/RNA_enum_types.h b/source/blender/makesrna/RNA_enum_types.h
index 9cb49fcaf60..2262c73a9af 100644
--- a/source/blender/makesrna/RNA_enum_types.h
+++ b/source/blender/makesrna/RNA_enum_types.h
@@ -30,6 +30,14 @@
/* Types */
extern EnumPropertyItem prop_mode_items[];
+extern EnumPropertyItem space_type_items[];
+extern EnumPropertyItem region_type_items[];
+extern EnumPropertyItem modifier_type_items[];
+
+extern EnumPropertyItem beztriple_handle_type_items[];
+extern EnumPropertyItem beztriple_interpolation_mode_items[];
+
+extern EnumPropertyItem fmodifier_type_items[];
#endif /* RNA_ENUM_TYPES */
diff --git a/source/blender/makesrna/RNA_types.h b/source/blender/makesrna/RNA_types.h
index c3dcf4040ea..0a8836327c3 100644
--- a/source/blender/makesrna/RNA_types.h
+++ b/source/blender/makesrna/RNA_types.h
@@ -29,10 +29,14 @@
extern "C" {
#endif
+struct ParameterList;
+struct FunctionRNA;
struct PropertyRNA;
struct StructRNA;
struct BlenderRNA;
struct IDProperty;
+struct bContext;
+struct ReportList;
/* Pointer
*
@@ -87,6 +91,14 @@ typedef enum PropertyFlag {
* and collections */
PROP_ANIMATEABLE = 2,
+ /* function paramater flags */
+ PROP_REQUIRED = 4,
+ PROP_RETURN = 8,
+
+ /* registering */
+ PROP_REGISTER = 16,
+ PROP_REGISTER_OPTIONAL = 16|32,
+
/* internal flags */
PROP_BUILTIN = 128,
PROP_EXPORT = 256,
@@ -97,6 +109,7 @@ typedef enum PropertyFlag {
typedef struct CollectionPropertyIterator {
/* internal */
PointerRNA parent;
+ PointerRNA builtin_parent;
struct PropertyRNA *prop;
void *internal;
int idprop;
@@ -123,6 +136,39 @@ typedef struct EnumPropertyItem {
typedef struct PropertyRNA PropertyRNA;
+/* Parameter List */
+
+typedef struct ParameterList ParameterList;
+
+typedef struct ParameterIterator {
+ ParameterList *parms;
+ PointerRNA funcptr;
+ void *data;
+ int size, offset;
+
+ PropertyRNA *parm;
+ int valid;
+} ParameterIterator;
+
+/* Function */
+
+typedef enum FunctionFlag {
+ FUNC_TYPESTATIC = 1, /* for static functions, FUNC_ STATIC is taken by some windows header it seems */
+
+ /* registering */
+ FUNC_REGISTER = 2,
+ FUNC_REGISTER_OPTIONAL = 2|4,
+
+ /* internal flags */
+ FUNC_BUILTIN = 128,
+ FUNC_EXPORT = 256,
+ FUNC_RUNTIME = 512
+} FunctionFlag;
+
+typedef void (*CallFunc)(PointerRNA *ptr, ParameterList *parms);
+
+typedef struct FunctionRNA FunctionRNA;
+
/* Struct */
typedef enum StructFlag {
@@ -134,6 +180,13 @@ typedef enum StructFlag {
STRUCT_GENERATED = 4
} StructFlag;
+typedef int (*StructValidateFunc)(struct PointerRNA *ptr, void *data, int *have_function);
+typedef int (*StructCallbackFunc)(struct PointerRNA *ptr, struct FunctionRNA *func, struct ParameterList *list);
+typedef void (*StructFreeFunc)(void *data);
+typedef struct StructRNA *(*StructRegisterFunc)(const struct bContext *C, struct ReportList *reports, void *data,
+ StructValidateFunc validate, StructCallbackFunc call, StructFreeFunc free);
+typedef void (*StructUnregisterFunc)(const struct bContext *C, struct StructRNA *type);
+
typedef struct StructRNA StructRNA;
/* Blender RNA
diff --git a/source/blender/makesrna/SConscript b/source/blender/makesrna/SConscript
index ace5b80a63c..7bf968a0979 100644
--- a/source/blender/makesrna/SConscript
+++ b/source/blender/makesrna/SConscript
@@ -7,6 +7,6 @@ o = SConscript('intern/SConscript')
objs += o
incs = '#/intern/guardedalloc ../blenkernel ../blenlib ../makesdna intern .'
-incs += ' ../windowmanager'
+incs += ' ../windowmanager ../editors/include'
env.BlenderLib ( 'bf_rna', objs, Split(incs), [], libtype=['core'], priority = [195] )
diff --git a/source/blender/makesrna/intern/CMakeLists.txt b/source/blender/makesrna/intern/CMakeLists.txt
index 934e009eebc..0971727cbf6 100644
--- a/source/blender/makesrna/intern/CMakeLists.txt
+++ b/source/blender/makesrna/intern/CMakeLists.txt
@@ -24,66 +24,21 @@
#
# ***** END GPL LICENSE BLOCK *****
-SET(DEFSRC
- rna_action.c
- rna_actuator.c
- rna_animation.c
- rna_armature.c
- rna_brush.c
- rna_camera.c
- rna_cloth.c
- rna_color.c
- rna_constraint.c
- rna_context.c
- rna_controller.c
- rna_curve.c
- rna_fluidsim.c
- rna_group.c
- rna_ID.c
- rna_image.c
- rna_key.c
- rna_lamp.c
- rna_lattice.c
- rna_main.c
- rna_material.c
- rna_mesh.c
- rna_meta.c
- rna_modifier.c
- rna_nodetree.c
- rna_object.c
- rna_object_force.c
- rna_packedfile.c
- rna_particle.c
- rna_pose.c
- rna_property.c
- rna_radio.c
- rna_rna.c
- rna_scene.c
- rna_screen.c
- rna_scriptlink.c
- rna_sensor.c
- rna_sequence.c
- rna_sound.c
- rna_space.c
- rna_text.c
- rna_texture.c
- rna_timeline.c
- rna_userdef.c
- rna_vfont.c
- rna_vpaint.c
- rna_wm.c
- rna_world.c)
-
+FILE(GLOB DEFSRC RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*.c")
+LIST(REMOVE_ITEM DEFSRC rna_access.c rna_define.c makesrna.c)
+FILE(GLOB_RECURSE APISRC "../../editors/*/*_api.c")
+
STRING(REGEX REPLACE "rna_([a-zA-Z0-9_-]*).c" "${CMAKE_CURRENT_BINARY_DIR}/rna_\\1_gen.c" GENSRC "${DEFSRC}")
SET(SRC
makesrna.c
rna_define.c
${DEFSRC}
+ ${APISRC}
../../../../intern/guardedalloc/intern/mallocn.c
../../../../intern/guardedalloc/intern/mmap_win.c)
-INCLUDE_DIRECTORIES(../../../../intern/guardedalloc .. ../../makesdna ../../blenkernel ../../blenlib ../../windowmanager .)
+INCLUDE_DIRECTORIES(../../../../intern/guardedalloc .. ../../makesdna ../../blenkernel ../../blenlib ../../windowmanager ../../editors/include .)
FILE(GLOB INC_FILES ../*.h ../../makesdna/*.h)
# Build makesrna executable
diff --git a/source/blender/makesrna/intern/Makefile b/source/blender/makesrna/intern/Makefile
index 070f6f264bd..241067692ff 100644
--- a/source/blender/makesrna/intern/Makefile
+++ b/source/blender/makesrna/intern/Makefile
@@ -31,8 +31,8 @@ DEFRNA = $(filter-out %rna_define.c, $(filter-out %rna_access.c, $(ALLRNA)))
GENSRCS = $(patsubst rna_%.c, rna_%_gen.c, $(DEFRNA))
GENTARGET = $(patsubst %.c, $(DIR)/$(DEBUG_DIR)%.c, $(GENSRCS))
-MAKESRCS = $(DEFRNA) makesrna.c rna_define.c
-MAKEOBJS = $(patsubst %.c, $(DIR)/$(DEBUG_DIR)%.o, $(MAKESRCS))
+MAKESRCS = $(DEFRNA) makesrna.c rna_define.c $(wildcard ../../editors/*/*_api.c)
+MAKEOBJS = $(patsubst %.c, $(DIR)/$(DEBUG_DIR)%.o, $(notdir $(MAKESRCS)))
CSRCS = $(GENSRCS) rna_access.c
@@ -49,6 +49,7 @@ CPPFLAGS += -I../../blenlib
CPPFLAGS += -I../../blenkernel
CPPFLAGS += -I../../makesdna
CPPFLAGS += -I../../windowmanager
+CPPFLAGS += -I../../editors/include
CPPFLAGS += -I..
CPPFLAGS += -I.
@@ -72,6 +73,24 @@ clean::
# TODO include right .mk for ldflags
+# XXX this is an ugly hack, copying code from nan_compile.mk
+# we want the .o's to be in the makesrna/ directory, but the
+# .c's are in the editors/*/ directories
+
+$(DIR)/$(DEBUG_DIR)%_api.o: ../../editors/interface/%_api.c
+ ifdef NAN_DEPEND
+ @set -e; $(CC) -M $(CPPFLAGS) $< 2>/dev/null \
+ | sed 's@\($*\)\.o[ :]*@$(DIR)/$(DEBUG_DIR)\1.o : @g' \
+ > $(DIR)/$(DEBUG_DIR)$*.d; \
+ [ -s $(DIR)/$(DEBUG_DIR)$*.d ] || $(RM) $(DIR)/$*.d
+ endif
+ ifdef NAN_QUIET
+ @echo " -- $< -- "
+ @$(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
+ else
+ $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
+ endif
+
# A small note: we do not use the debug version of the alloc lib. That
# is done quite intentionally. If there is a bug in that lib, it needs
# to be fixed by the module maintainer.
diff --git a/source/blender/makesrna/intern/SConscript b/source/blender/makesrna/intern/SConscript
index 7bd52114792..83f14b9ef14 100644
--- a/source/blender/makesrna/intern/SConscript
+++ b/source/blender/makesrna/intern/SConscript
@@ -11,27 +11,26 @@ defines = []
root_build_dir=normpath(env['BF_BUILDDIR'])
source_files = env.Glob('*.c')
-
-# making rna_access.c part of both makesrna and blender seems to
-# give conflict, how to solve?
source_files.remove('rna_access.c')
generated_files = source_files[:]
generated_files.remove('rna_define.c')
generated_files.remove('makesrna.c')
-
generated_files = [filename[:-2] + '_gen.c' for filename in generated_files]
+source_files.extend(env.Glob('../../editors/*/*_api.c'))
+
makesrna_tool = env.Clone()
rna = env.Clone()
makesrna_tool.Append(CCFLAGS = '-DBASE_HEADER="\\"source/blender/makesrna/\\"" ')
makesrna_tool.Append (CPPPATH = ['#/intern/guardedalloc',
- '../../blenlib',
- '../../blenkernel',
- '../../makesdna',
- '../../makesrna',
- '../../windowmanager'])
+ '../../blenlib',
+ '../../blenkernel',
+ '../../makesdna',
+ '../../makesrna',
+ '../../windowmanager',
+ '../../editors/include'])
if env['OURPLATFORM'] == 'linuxcross':
USE_WINE = True # when cross compiling on linux 64bit this is useful
@@ -45,7 +44,7 @@ if not USE_WINE:
makesdna_tool.Replace(LINK='gcc')
if sys.platform != 'cygwin':
- makesrna_tool.Append (CCFLAGS = cflags)
+ makesrna_tool.Append (CCFLAGS = cflags)
makesrna_tool.Append (CPPDEFINES = defines)
libdir = root_build_dir+'/lib'
@@ -68,25 +67,28 @@ if not (root_build_dir[0]==os.sep or root_build_dir[1]==':'):
targetpath = '#' + targetpath
if env['OURPLATFORM'] == 'linux2' and root_build_dir[0]==os.sep:
- makesrna = makesrna_tool.Program (target = targetpath, source = source_files, LIBS=['bf_guardedalloc', 'bf_dna'])
+ makesrna = makesrna_tool.Program (target = targetpath, source = source_files, LIBS=['bf_guardedalloc', 'bf_dna'])
else:
- makesrna = makesrna_tool.Program (target = targetpath, source = source_files, LIBS=['bf_guardedalloc', 'bf_dna'])
+ makesrna = makesrna_tool.Program (target = targetpath, source = source_files, LIBS=['bf_guardedalloc', 'bf_dna'])
rna_dict = rna.Dictionary()
rna.Depends (generated_files, makesrna)
# this seems bad, how to retrieve it from scons?
-build_dir = root_build_dir + '/source/blender/makesrna/intern/'
+build_dir = root_build_dir + os.sep +'source' + os.sep + 'blender' + os.sep + 'makesrna' + os.sep + 'intern' + os.sep
if env['OURPLATFORM'] != 'linuxcross':
- rna.Command (generated_files, '', root_build_dir+os.sep+"makesrna " + build_dir)
+ if env['OURPLATFORM'] in ('win32-vc', 'win64-vc', 'win32-mingw'):
+ rna.Command (generated_files, '', "\"" + root_build_dir+os.sep+"makesrna.exe\" \"" + build_dir )
+ else:
+ rna.Command (generated_files, '', root_build_dir+os.sep+"makesrna " + build_dir)
else:
- rna.Command (generated_files, '', root_build_dir+os.sep+"makesrna.exe " + build_dir)
+ rna.Command (generated_files, '', root_build_dir+os.sep+"makesrna.exe " + build_dir)
- if USE_WINE:
- rna.Command (generated_files, '', 'wine ' + root_build_dir+os.sep+"makesrna.exe " + build_dir)
- else:
- rna.Command (generated_files, '', root_build_dir+os.sep+"makesrna.exe " + build_dir)
+ if USE_WINE:
+ rna.Command (generated_files, '', 'wine ' + root_build_dir+os.sep+"makesrna.exe " + build_dir)
+ else:
+ rna.Command (generated_files, '', root_build_dir+os.sep+"makesrna.exe " + build_dir)
obj = ['intern/rna_access.c']
diff --git a/source/blender/makesrna/intern/makesrna.c b/source/blender/makesrna/intern/makesrna.c
index 0d124a121d5..84218cdd874 100644
--- a/source/blender/makesrna/intern/makesrna.c
+++ b/source/blender/makesrna/intern/makesrna.c
@@ -156,7 +156,29 @@ static char *rna_alloc_function_name(const char *structname, const char *propnam
return result;
}
-static const char *rna_type_type(PropertyRNA *prop)
+static const char *rna_find_type(const char *type)
+{
+ StructDefRNA *ds;
+
+ for(ds=DefRNA.structs.first; ds; ds=ds->cont.next)
+ if(ds->dnaname && strcmp(ds->dnaname, type)==0)
+ return ds->srna->identifier;
+
+ return NULL;
+}
+
+static const char *rna_find_dna_type(const char *type)
+{
+ StructDefRNA *ds;
+
+ for(ds=DefRNA.structs.first; ds; ds=ds->cont.next)
+ if(strcmp(ds->srna->identifier, type)==0)
+ return ds->dnaname;
+
+ return NULL;
+}
+
+static const char *rna_type_type_name(PropertyRNA *prop)
{
switch(prop->type) {
case PROP_BOOLEAN:
@@ -168,7 +190,58 @@ static const char *rna_type_type(PropertyRNA *prop)
case PROP_STRING:
return "char*";
default:
- return "PointerRNA";
+ return NULL;
+ }
+}
+
+static const char *rna_type_type(PropertyRNA *prop)
+{
+ const char *type;
+
+ type= rna_type_type_name(prop);
+
+ if(type)
+ return type;
+
+ return "PointerRNA";
+}
+
+static const char *rna_type_struct(PropertyRNA *prop)
+{
+ const char *type;
+
+ type= rna_type_type_name(prop);
+
+ if(type)
+ return "";
+
+ return "struct ";
+}
+
+static const char *rna_parameter_type_name(PropertyRNA *parm)
+{
+ const char *type;
+
+ type= rna_type_type_name(parm);
+
+ if(type)
+ return type;
+
+ switch(parm->type) {
+ case PROP_POINTER: {
+ PointerPropertyRNA *pparm= (PointerPropertyRNA*)parm;
+
+ if(strcmp((char*)pparm->type, "AnyType") == 0)
+ return "PointerRNA";
+ else
+ return rna_find_dna_type((const char *)pparm->type);
+ }
+ case PROP_COLLECTION: {
+ CollectionPropertyRNA *cparm= (CollectionPropertyRNA*)parm;
+ return rna_find_dna_type((const char *)cparm->type);
+ }
+ default:
+ return "<error, no type specified>";
}
}
@@ -226,12 +299,6 @@ static char *rna_def_property_get_func(FILE *f, StructRNA *srna, PropertyRNA *pr
DefRNA.error= 1;
return NULL;
}
-
- if(prop->type == PROP_STRING && ((StringPropertyRNA*)prop)->maxlength == 0) {
- fprintf(stderr, "rna_def_property_get_func: string %s.%s has max length 0.\n", srna->identifier, prop->identifier);
- DefRNA.error= 1;
- return NULL;
- }
}
func= rna_alloc_function_name(srna->identifier, prop->identifier, "get");
@@ -246,7 +313,10 @@ static char *rna_def_property_get_func(FILE *f, StructRNA *srna, PropertyRNA *pr
}
else {
rna_print_data_get(f, dp);
- fprintf(f, " BLI_strncpy(value, data->%s, %d);\n", dp->dnaname, sprop->maxlength);
+ if(sprop->maxlength)
+ fprintf(f, " BLI_strncpy(value, data->%s, %d);\n", dp->dnaname, sprop->maxlength);
+ else
+ fprintf(f, " BLI_strncpy(value, data->%s, sizeof(data->%s));\n", dp->dnaname, dp->dnaname);
}
fprintf(f, "}\n\n");
break;
@@ -411,7 +481,10 @@ static char *rna_def_property_set_func(FILE *f, StructRNA *srna, PropertyRNA *pr
}
else {
rna_print_data_get(f, dp);
- fprintf(f, " BLI_strncpy(data->%s, value, %d);\n", dp->dnaname, sprop->maxlength);
+ if(sprop->maxlength)
+ fprintf(f, " BLI_strncpy(data->%s, value, %d);\n", dp->dnaname, sprop->maxlength);
+ else
+ fprintf(f, " BLI_strncpy(data->%s, value, sizeof(data->%s));\n", dp->dnaname, dp->dnaname);
}
fprintf(f, "}\n\n");
break;
@@ -666,12 +739,10 @@ static char *rna_def_property_end_func(FILE *f, StructRNA *srna, PropertyRNA *pr
return func;
}
-static void rna_def_property_funcs(FILE *f, PropertyDefRNA *dp)
+static void rna_def_property_funcs(FILE *f, StructRNA *srna, PropertyDefRNA *dp)
{
PropertyRNA *prop;
- StructRNA *srna;
- srna= dp->srna;
prop= dp->prop;
switch(prop->type) {
@@ -775,13 +846,11 @@ static void rna_def_property_funcs(FILE *f, PropertyDefRNA *dp)
}
}
-static void rna_def_property_funcs_header(FILE *f, PropertyDefRNA *dp)
+static void rna_def_property_funcs_header(FILE *f, StructRNA *srna, PropertyDefRNA *dp)
{
PropertyRNA *prop;
- StructRNA *srna;
char *func;
- srna= dp->srna;
prop= dp->prop;
if(prop->flag & (PROP_IDPROPERTY|PROP_BUILTIN))
@@ -863,12 +932,10 @@ static void rna_def_property_funcs_header(FILE *f, PropertyDefRNA *dp)
fprintf(f, "\n");
}
-static void rna_def_property_funcs_header_cpp(FILE *f, PropertyDefRNA *dp)
+static void rna_def_property_funcs_header_cpp(FILE *f, StructRNA *srna, PropertyDefRNA *dp)
{
PropertyRNA *prop;
- StructRNA *srna;
- srna= dp->srna;
prop= dp->prop;
if(prop->flag & (PROP_IDPROPERTY|PROP_BUILTIN))
@@ -946,12 +1013,10 @@ static void rna_def_property_funcs_header_cpp(FILE *f, PropertyDefRNA *dp)
fprintf(f, "\n");
}
-static void rna_def_property_funcs_impl_cpp(FILE *f, PropertyDefRNA *dp)
+static void rna_def_property_funcs_impl_cpp(FILE *f, StructRNA *srna, PropertyDefRNA *dp)
{
PropertyRNA *prop;
- StructRNA *srna;
- srna= dp->srna;
prop= dp->prop;
if(prop->flag & (PROP_IDPROPERTY|PROP_BUILTIN))
@@ -1011,15 +1076,99 @@ static void rna_def_property_funcs_impl_cpp(FILE *f, PropertyDefRNA *dp)
fprintf(f, "\n");
}
-static const char *rna_find_type(const char *type)
+static void rna_def_function_funcs(FILE *f, StructDefRNA *dsrna, FunctionDefRNA *dfunc)
{
- StructDefRNA *ds;
+ StructRNA *srna;
+ FunctionRNA *func;
+ PropertyDefRNA *dparm;
+ char *funcname, *ptrstr;
- for(ds=DefRNA.structs.first; ds; ds=ds->next)
- if(ds->dnaname && strcmp(ds->dnaname, type)==0)
- return ds->srna->identifier;
-
- return NULL;
+ srna= dsrna->srna;
+ func= dfunc->func;
+
+ if(func->flag & FUNC_REGISTER)
+ return;
+
+ funcname= rna_alloc_function_name(srna->identifier, func->identifier, "call");
+
+ fprintf(f, "void %s(PointerRNA *_ptr, ParameterList *_parms)", funcname);
+ fprintf(f, "\n{\n");
+
+ if((func->flag & FUNC_TYPESTATIC)==0) {
+ if(dsrna->dnaname) fprintf(f, "\tstruct %s *_self;\n", dsrna->dnaname);
+ else fprintf(f, "\tstruct %s *_self;\n", srna->identifier);
+ }
+
+ dparm= dfunc->cont.properties.first;
+ for(; dparm; dparm= dparm->next) {
+ ptrstr= (dparm->prop->type == PROP_POINTER || dparm->prop->arraylength > 0)? "*" : "";
+ fprintf(f, "\t%s%s %s%s;\n", rna_type_struct(dparm->prop), rna_parameter_type_name(dparm->prop), ptrstr, dparm->prop->identifier);
+ }
+
+ fprintf(f, "\tchar *_data");
+ if(func->ret) fprintf(f, ", *_retdata");
+ fprintf(f, ";\n");
+ fprintf(f, "\t\n");
+
+ if((func->flag & FUNC_TYPESTATIC)==0) {
+ if(dsrna->dnaname) fprintf(f, "\t_self= (struct %s *)_ptr->data;\n", dsrna->dnaname);
+ else fprintf(f, "\t_self= (struct %s *)_ptr->data;\n", srna->identifier);
+ }
+
+ fprintf(f, "\t_data= (char *)_parms->data;\n");
+
+ dparm= dfunc->cont.properties.first;
+ for(; dparm; dparm= dparm->next) {
+ if(dparm->prop==func->ret)
+ fprintf(f, "\t_retdata= _data;\n");
+ else if(dparm->prop->arraylength)
+ fprintf(f, "\t%s= ((%s%s*)_data);\n", dparm->prop->identifier, rna_type_struct(dparm->prop), rna_parameter_type_name(dparm->prop));
+ else if(dparm->prop->type == PROP_POINTER) {
+ PointerPropertyRNA *pprop= (PointerPropertyRNA*)dparm->prop;
+
+ if(strcmp((char*)pprop->type, "AnyType") == 0)
+ fprintf(f, "\t%s= ((%s%s*)_data);\n", dparm->prop->identifier, rna_type_struct(dparm->prop), rna_parameter_type_name(dparm->prop));
+ else
+ fprintf(f, "\t%s= *((%s%s**)_data);\n", dparm->prop->identifier, rna_type_struct(dparm->prop), rna_parameter_type_name(dparm->prop));
+ }
+ else
+ fprintf(f, "\t%s= *((%s%s*)_data);\n", dparm->prop->identifier, rna_type_struct(dparm->prop), rna_parameter_type_name(dparm->prop));
+
+ if(dparm->next)
+ fprintf(f, "\t_data+= %d;\n", rna_parameter_size(dparm->prop));
+ }
+
+ if(dfunc->call) {
+ fprintf(f, "\t\n");
+ fprintf(f, "\t");
+ if(func->ret) fprintf(f, "%s= ", func->ret->identifier);
+ fprintf(f, "%s(", dfunc->call);
+
+ if((func->flag & FUNC_TYPESTATIC)==0)
+ fprintf(f, "_self");
+
+ dparm= dfunc->cont.properties.first;
+ for(; dparm; dparm= dparm->next) {
+ if(dparm->prop==func->ret)
+ continue;
+
+ if((func->flag & FUNC_TYPESTATIC)==0 || dparm!=dfunc->cont.properties.first)
+ fprintf(f, ", ");
+ fprintf(f, "%s", dparm->prop->identifier);
+ }
+
+ fprintf(f, ");\n");
+
+ if(func->ret) {
+ dparm= rna_find_parameter_def(func->ret);
+ ptrstr= dparm->prop->type == PROP_POINTER || dparm->prop->arraylength > 0 ? "*" : "";
+ fprintf(f, "\t*((%s%s%s*)_retdata)= %s;\n", rna_type_struct(dparm->prop), rna_parameter_type_name(dparm->prop), ptrstr, func->ret->identifier);
+ }
+ }
+
+ fprintf(f, "}\n\n");
+
+ dfunc->gencall= funcname;
}
static void rna_auto_types()
@@ -1027,12 +1176,12 @@ static void rna_auto_types()
StructDefRNA *ds;
PropertyDefRNA *dp;
- for(ds=DefRNA.structs.first; ds; ds=ds->next) {
+ for(ds=DefRNA.structs.first; ds; ds=ds->cont.next) {
/* DNA name for Screen is patched in 2.5, we do the reverse here .. */
if(ds->dnaname && strcmp(ds->dnaname, "Screen") == 0)
ds->dnaname= "bScreen";
- for(dp=ds->properties.first; dp; dp=dp->next) {
+ for(dp=ds->cont.properties.first; dp; dp=dp->next) {
if(dp->dnastructname && strcmp(dp->dnastructname, "Screen") == 0)
dp->dnastructname= "bScreen";
@@ -1062,11 +1211,11 @@ static void rna_sort(BlenderRNA *brna)
rna_sortlist(&brna->structs, cmp_struct);
rna_sortlist(&DefRNA.structs, cmp_def_struct);
- for(srna=brna->structs.first; srna; srna=srna->next)
- rna_sortlist(&srna->properties, cmp_property);
+ for(srna=brna->structs.first; srna; srna=srna->cont.next)
+ rna_sortlist(&srna->cont.properties, cmp_property);
- for(ds=DefRNA.structs.first; ds; ds=ds->next)
- rna_sortlist(&ds->properties, cmp_def_property);
+ for(ds=DefRNA.structs.first; ds; ds=ds->cont.next)
+ rna_sortlist(&ds->cont.properties, cmp_def_property);
}
static const char *rna_property_structname(PropertyType type)
@@ -1118,7 +1267,7 @@ static void rna_generate_prototypes(BlenderRNA *brna, FILE *f)
{
StructRNA *srna;
- for(srna=brna->structs.first; srna; srna=srna->next)
+ for(srna=brna->structs.first; srna; srna=srna->cont.next)
fprintf(f, "extern StructRNA RNA_%s;\n", srna->identifier);
fprintf(f, "\n");
}
@@ -1148,34 +1297,143 @@ static void rna_generate_property_prototypes(BlenderRNA *brna, StructRNA *srna,
base= srna->base;
while (base) {
fprintf(f, "\n");
- for(prop=base->properties.first; prop; prop=prop->next)
+ for(prop=base->cont.properties.first; prop; prop=prop->next)
fprintf(f, "%s%s rna_%s_%s;\n", "extern ", rna_property_structname(prop->type), base->identifier, prop->identifier);
base= base->base;
}
- if(srna->properties.first)
+ if(srna->cont.properties.first)
fprintf(f, "\n");
- for(prop=srna->properties.first; prop; prop=prop->next)
+ for(prop=srna->cont.properties.first; prop; prop=prop->next)
fprintf(f, "%s%s rna_%s_%s;\n", (prop->flag & PROP_EXPORT)? "": "", rna_property_structname(prop->type), srna->identifier, prop->identifier);
fprintf(f, "\n");
}
-static void rna_generate_struct(BlenderRNA *brna, StructRNA *srna, FILE *f)
+static void rna_generate_parameter_prototypes(BlenderRNA *brna, StructRNA *srna, FunctionRNA *func, FILE *f)
{
- PropertyRNA *prop;
+ PropertyRNA *parm;
+
+ for(parm= func->cont.properties.first; parm; parm= parm->next)
+ fprintf(f, "%s%s rna_%s_%s_%s;\n", "extern ", rna_property_structname(parm->type), srna->identifier, func->identifier, parm->identifier);
+
+ if(func->cont.properties.first)
+ fprintf(f, "\n");
+}
+
+static void rna_generate_function_prototypes(BlenderRNA *brna, StructRNA *srna, FILE *f)
+{
+ FunctionRNA *func;
StructRNA *base;
- fprintf(f, "/* %s */\n", srna->name);
+ base= srna->base;
+ while (base) {
+ for(func= base->functions.first; func; func= func->cont.next) {
+ fprintf(f, "%s%s rna_%s_%s;\n", "extern ", "FunctionRNA", base->identifier, func->identifier);
+ rna_generate_parameter_prototypes(brna, base, func, f);
+ }
+
+ if(base->functions.first)
+ fprintf(f, "\n");
- for(prop=srna->properties.first; prop; prop=prop->next) {
- switch(prop->type) {
+ base= base->base;
+ }
+
+ for(func= srna->functions.first; func; func= func->cont.next) {
+ fprintf(f, "%s%s rna_%s_%s;\n", "extern ", "FunctionRNA", srna->identifier, func->identifier);
+ rna_generate_parameter_prototypes(brna, srna, func, f);
+ }
+
+ if(srna->functions.first)
+ fprintf(f, "\n");
+}
+
+static void rna_generate_static_parameter_prototypes(BlenderRNA *brna, StructRNA *srna, FunctionDefRNA *dfunc, FILE *f)
+{
+ FunctionRNA *func;
+ PropertyDefRNA *dparm;
+ StructDefRNA *dsrna;
+
+ dsrna= rna_find_struct_def(srna);
+ func= dfunc->func;
+
+ for(dparm= dfunc->cont.properties.first; dparm; dparm= dparm->next) {
+ if(dparm->prop==func->ret) {
+ if(dparm->prop->arraylength)
+ fprintf(f, "XXX no array return types yet"); /* XXX not supported */
+ else if(dparm->prop->type == PROP_POINTER)
+ fprintf(f, "%s%s *", rna_type_struct(dparm->prop), rna_parameter_type_name(dparm->prop));
+ else
+ fprintf(f, "%s%s ", rna_type_struct(dparm->prop), rna_parameter_type_name(dparm->prop));
+
+ break;
+ }
+ }
+
+ if(!dparm)
+ fprintf(f, "void ");
+
+ fprintf(f, "%s(", dfunc->call);
+
+ if(dsrna->dnaname) fprintf(f, "struct %s *_self", dsrna->dnaname);
+ else fprintf(f, "struct %s *_self", srna->identifier);
+
+ for(dparm= dfunc->cont.properties.first; dparm; dparm= dparm->next) {
+ if(dparm->prop==func->ret) ;
+ else if(dparm->prop->arraylength)
+ fprintf(f, ", %s%s %s[%d]", rna_type_struct(dparm->prop), rna_parameter_type_name(dparm->prop), dparm->prop->identifier, dparm->prop->arraylength);
+ else if(dparm->prop->type == PROP_POINTER)
+ fprintf(f, ", %s%s *%s", rna_type_struct(dparm->prop), rna_parameter_type_name(dparm->prop), dparm->prop->identifier);
+ else
+ fprintf(f, ", %s%s %s", rna_type_struct(dparm->prop), rna_parameter_type_name(dparm->prop), dparm->prop->identifier);
+ }
+
+ fprintf(f, ");\n");
+}
+
+static void rna_generate_static_function_prototypes(BlenderRNA *brna, StructRNA *srna, FILE *f)
+{
+ FunctionRNA *func;
+ FunctionDefRNA *dfunc;
+
+ fprintf(f, "/* Repeated prototypes to detect errors */\n\n");
+
+ for(func= srna->functions.first; func; func= func->cont.next) {
+ if(func->flag & FUNC_REGISTER)
+ continue;
+
+ dfunc= rna_find_function_def(func);
+ if(dfunc->call)
+ rna_generate_static_parameter_prototypes(brna, srna, dfunc, f);
+ }
+
+ fprintf(f, "\n");
+}
+
+static void rna_generate_property(FILE *f, StructRNA *srna, const char *nest, PropertyRNA *prop)
+{
+ char *strnest= "", *errnest= "";
+ int len, freenest= 0;
+
+ if(nest != NULL) {
+ len= strlen(nest);
+
+ strnest= MEM_mallocN(sizeof(char)*(len+2), "rna_generate_property -> strnest");
+ errnest= MEM_mallocN(sizeof(char)*(len+2), "rna_generate_property -> errnest");
+
+ strcpy(strnest, "_"); strcat(strnest, nest);
+ strcpy(errnest, "."); strcat(errnest, nest);
+
+ freenest= 1;
+ }
+
+ switch(prop->type) {
case PROP_ENUM: {
EnumPropertyRNA *eprop= (EnumPropertyRNA*)prop;
int i, defaultfound= 0;
if(eprop->item) {
- fprintf(f, "static EnumPropertyItem rna_%s_%s_items[%d] = {", srna->identifier, prop->identifier, eprop->totitem);
+ fprintf(f, "static EnumPropertyItem rna_%s%s_%s_items[%d] = {", srna->identifier, strnest, prop->identifier, eprop->totitem);
for(i=0; i<eprop->totitem; i++) {
fprintf(f, "{%d, ", eprop->item[i].value);
@@ -1192,22 +1450,22 @@ static void rna_generate_struct(BlenderRNA *brna, StructRNA *srna, FILE *f)
fprintf(f, "};\n\n");
if(!defaultfound) {
- fprintf(stderr, "rna_generate_structs: %s.%s, enum default is not in items.\n", srna->identifier, prop->identifier);
+ fprintf(stderr, "rna_generate_structs: %s%s.%s, enum default is not in items.\n", srna->identifier, errnest, prop->identifier);
DefRNA.error= 1;
}
}
else {
- fprintf(stderr, "rna_generate_structs: %s.%s, enum must have items defined.\n", srna->identifier, prop->identifier);
+ fprintf(stderr, "rna_generate_structs: %s%s.%s, enum must have items defined.\n", srna->identifier, errnest, prop->identifier);
DefRNA.error= 1;
}
break;
- }
+ }
case PROP_BOOLEAN: {
BooleanPropertyRNA *bprop= (BooleanPropertyRNA*)prop;
unsigned int i;
if(prop->arraylength) {
- fprintf(f, "static int rna_%s_%s_default[%d] = {", srna->identifier, prop->identifier, prop->arraylength);
+ fprintf(f, "static int rna_%s%s_%s_default[%d] = {", srna->identifier, strnest, prop->identifier, prop->arraylength);
for(i=0; i<prop->arraylength; i++) {
if(bprop->defaultarray)
@@ -1221,13 +1479,13 @@ static void rna_generate_struct(BlenderRNA *brna, StructRNA *srna, FILE *f)
fprintf(f, "};\n\n");
}
break;
- }
+ }
case PROP_INT: {
IntPropertyRNA *iprop= (IntPropertyRNA*)prop;
unsigned int i;
if(prop->arraylength) {
- fprintf(f, "static int rna_%s_%s_default[%d] = {", srna->identifier, prop->identifier, prop->arraylength);
+ fprintf(f, "static int rna_%s%s_%s_default[%d] = {", srna->identifier, strnest, prop->identifier, prop->arraylength);
for(i=0; i<prop->arraylength; i++) {
if(iprop->defaultarray)
@@ -1241,13 +1499,13 @@ static void rna_generate_struct(BlenderRNA *brna, StructRNA *srna, FILE *f)
fprintf(f, "};\n\n");
}
break;
- }
+ }
case PROP_FLOAT: {
FloatPropertyRNA *fprop= (FloatPropertyRNA*)prop;
unsigned int i;
if(prop->arraylength) {
- fprintf(f, "static float rna_%s_%s_default[%d] = {", srna->identifier, prop->identifier, prop->arraylength);
+ fprintf(f, "static float rna_%s%s_%s_default[%d] = {", srna->identifier, strnest, prop->identifier, prop->arraylength);
for(i=0; i<prop->arraylength; i++) {
if(fprop->defaultarray)
@@ -1261,33 +1519,33 @@ static void rna_generate_struct(BlenderRNA *brna, StructRNA *srna, FILE *f)
fprintf(f, "};\n\n");
}
break;
- }
+ }
default:
break;
- }
+ }
- fprintf(f, "%s%s rna_%s_%s = {\n", (prop->flag & PROP_EXPORT)? "": "", rna_property_structname(prop->type), srna->identifier, prop->identifier);
+ fprintf(f, "%s%s rna_%s%s_%s = {\n", (prop->flag & PROP_EXPORT)? "": "", rna_property_structname(prop->type), srna->identifier, strnest, prop->identifier);
- if(prop->next) fprintf(f, "\t{(PropertyRNA*)&rna_%s_%s, ", srna->identifier, prop->next->identifier);
- else fprintf(f, "\t{NULL, ");
- if(prop->prev) fprintf(f, "(PropertyRNA*)&rna_%s_%s,\n", srna->identifier, prop->prev->identifier);
- else fprintf(f, "NULL,\n");
- fprintf(f, "\t%d, ", prop->magic);
- rna_print_c_string(f, prop->identifier);
- fprintf(f, ", %d, ", prop->flag);
- rna_print_c_string(f, prop->name); fprintf(f, ",\n\t");
- rna_print_c_string(f, prop->description); fprintf(f, ",\n");
- fprintf(f, "\t%s, %s, %d,\n", rna_property_typename(prop->type), rna_property_subtypename(prop->subtype), prop->arraylength);
- fprintf(f, "\t%s, %d, %s},\n", rna_function_string(prop->update), prop->noteflag, rna_function_string(prop->editable));
-
- switch(prop->type) {
+ if(prop->next) fprintf(f, "\t{(PropertyRNA*)&rna_%s%s_%s, ", srna->identifier, strnest, prop->next->identifier);
+ else fprintf(f, "\t{NULL, ");
+ if(prop->prev) fprintf(f, "(PropertyRNA*)&rna_%s%s_%s,\n", srna->identifier, strnest, prop->prev->identifier);
+ else fprintf(f, "NULL,\n");
+ fprintf(f, "\t%d, ", prop->magic);
+ rna_print_c_string(f, prop->identifier);
+ fprintf(f, ", %d, ", prop->flag);
+ rna_print_c_string(f, prop->name); fprintf(f, ",\n\t");
+ rna_print_c_string(f, prop->description); fprintf(f, ",\n");
+ fprintf(f, "\t%s, %s, %d,\n", rna_property_typename(prop->type), rna_property_subtypename(prop->subtype), prop->arraylength);
+ fprintf(f, "\t%s, %d, %s},\n", rna_function_string(prop->update), prop->noteflag, rna_function_string(prop->editable));
+
+ switch(prop->type) {
case PROP_BOOLEAN: {
BooleanPropertyRNA *bprop= (BooleanPropertyRNA*)prop;
fprintf(f, "\t%s, %s, %s, %s, %d, ", rna_function_string(bprop->get), rna_function_string(bprop->set), rna_function_string(bprop->getarray), rna_function_string(bprop->setarray), bprop->defaultvalue);
- if(prop->arraylength) fprintf(f, "rna_%s_%s_default\n", srna->identifier, prop->identifier);
+ if(prop->arraylength) fprintf(f, "rna_%s%s_%s_default\n", srna->identifier, strnest, prop->identifier);
else fprintf(f, "NULL\n");
break;
- }
+ }
case PROP_INT: {
IntPropertyRNA *iprop= (IntPropertyRNA*)prop;
fprintf(f, "\t%s, %s, %s, %s, %s,\n\t", rna_function_string(iprop->get), rna_function_string(iprop->set), rna_function_string(iprop->getarray), rna_function_string(iprop->setarray), rna_function_string(iprop->range));
@@ -1297,10 +1555,10 @@ static void rna_generate_struct(BlenderRNA *brna, StructRNA *srna, FILE *f)
rna_int_print(f, iprop->hardmax); fprintf(f, ", ");
rna_int_print(f, iprop->step); fprintf(f, ", ");
rna_int_print(f, iprop->defaultvalue); fprintf(f, ", ");
- if(prop->arraylength) fprintf(f, "rna_%s_%s_default\n", srna->identifier, prop->identifier);
+ if(prop->arraylength) fprintf(f, "rna_%s%s_%s_default\n", srna->identifier, strnest, prop->identifier);
else fprintf(f, "NULL\n");
break;
- }
+ }
case PROP_FLOAT: {
FloatPropertyRNA *fprop= (FloatPropertyRNA*)prop;
fprintf(f, "\t%s, %s, %s, %s, %s, ", rna_function_string(fprop->get), rna_function_string(fprop->set), rna_function_string(fprop->getarray), rna_function_string(fprop->setarray), rna_function_string(fprop->range));
@@ -1311,48 +1569,108 @@ static void rna_generate_struct(BlenderRNA *brna, StructRNA *srna, FILE *f)
rna_float_print(f, fprop->step); fprintf(f, ", ");
rna_int_print(f, (int)fprop->precision); fprintf(f, ", ");
rna_float_print(f, fprop->defaultvalue); fprintf(f, ", ");
- if(prop->arraylength) fprintf(f, "rna_%s_%s_default\n", srna->identifier, prop->identifier);
+ if(prop->arraylength) fprintf(f, "rna_%s%s_%s_default\n", srna->identifier, strnest, prop->identifier);
else fprintf(f, "NULL\n");
break;
- }
+ }
case PROP_STRING: {
StringPropertyRNA *sprop= (StringPropertyRNA*)prop;
fprintf(f, "\t%s, %s, %s, %d, ", rna_function_string(sprop->get), rna_function_string(sprop->length), rna_function_string(sprop->set), sprop->maxlength);
rna_print_c_string(f, sprop->defaultvalue); fprintf(f, "\n");
break;
- }
+ }
case PROP_ENUM: {
EnumPropertyRNA *eprop= (EnumPropertyRNA*)prop;
- fprintf(f, "\t%s, %s, rna_%s_%s_items, %d, %d\n", rna_function_string(eprop->get), rna_function_string(eprop->set), srna->identifier, prop->identifier, eprop->totitem, eprop->defaultvalue);
+ fprintf(f, "\t%s, %s, rna_%s%s_%s_items, %d, %d\n", rna_function_string(eprop->get), rna_function_string(eprop->set), srna->identifier, strnest, prop->identifier, eprop->totitem, eprop->defaultvalue);
break;
- }
+ }
case PROP_POINTER: {
PointerPropertyRNA *pprop= (PointerPropertyRNA*)prop;
fprintf(f, "\t%s, %s, ", rna_function_string(pprop->get), rna_function_string(pprop->set));
if(pprop->type) fprintf(f, "&RNA_%s\n", (char*)pprop->type);
else fprintf(f, "NULL\n");
break;
- }
+ }
case PROP_COLLECTION: {
CollectionPropertyRNA *cprop= (CollectionPropertyRNA*)prop;
fprintf(f, "\t%s, %s, %s, %s, %s, %s, %s, ", rna_function_string(cprop->begin), rna_function_string(cprop->next), rna_function_string(cprop->end), rna_function_string(cprop->get), rna_function_string(cprop->length), rna_function_string(cprop->lookupint), rna_function_string(cprop->lookupstring));
if(cprop->type) fprintf(f, "&RNA_%s\n", (char*)cprop->type);
else fprintf(f, "NULL\n");
break;
- }
- }
+ }
+ }
- fprintf(f, "};\n\n");
+ fprintf(f, "};\n\n");
+
+ if(freenest) {
+ MEM_freeN(strnest);
+ MEM_freeN(errnest);
+ }
+}
+
+static void rna_generate_struct(BlenderRNA *brna, StructRNA *srna, FILE *f)
+{
+ FunctionRNA *func;
+ FunctionDefRNA *dfunc;
+ PropertyRNA *prop, *parm;
+ StructRNA *base;
+
+ fprintf(f, "/* %s */\n", srna->name);
+
+ for(prop= srna->cont.properties.first; prop; prop= prop->next)
+ rna_generate_property(f, srna, NULL, prop);
+
+ for(func= srna->functions.first; func; func= func->cont.next) {
+ for(parm= func->cont.properties.first; parm; parm= parm->next)
+ rna_generate_property(f, srna, func->identifier, parm);
+
+ fprintf(f, "%s%s rna_%s_%s = {\n", "", "FunctionRNA", srna->identifier, func->identifier);
+
+ if(func->cont.next) fprintf(f, "\t{(FunctionRNA*)&rna_%s_%s, ", srna->identifier, ((FunctionRNA*)func->cont.next)->identifier);
+ else fprintf(f, "\t{NULL, ");
+ if(func->cont.prev) fprintf(f, "(FunctionRNA*)&rna_%s_%s,\n", srna->identifier, ((FunctionRNA*)func->cont.prev)->identifier);
+ else fprintf(f, "NULL,\n");
+
+ parm= func->cont.properties.first;
+ if(parm) fprintf(f, "\t{(PropertyRNA*)&rna_%s_%s_%s, ", srna->identifier, func->identifier, parm->identifier);
+ else fprintf(f, "\t{NULL, ");
+
+ parm= func->cont.properties.last;
+ if(parm) fprintf(f, "(PropertyRNA*)&rna_%s_%s_%s}},\n", srna->identifier, func->identifier, parm->identifier);
+ else fprintf(f, "NULL}},\n");
+
+ fprintf(f, "\t");
+ rna_print_c_string(f, func->identifier);
+ fprintf(f, ", %d, ", func->flag);
+ rna_print_c_string(f, func->description); fprintf(f, ",\n");
+
+ dfunc= rna_find_function_def(func);
+ if(dfunc->gencall) fprintf(f, "\t%s,\n", dfunc->gencall);
+ else fprintf(f, "\tNULL,\n");
+
+ if(func->ret) fprintf(f, "\t(PropertyRNA*)&rna_%s_%s_%s\n", srna->identifier, func->identifier, func->ret->identifier);
+ else fprintf(f, "\tNULL\n");
+
+ fprintf(f, "};\n");
+ fprintf(f, "\n");
}
fprintf(f, "StructRNA RNA_%s = {\n", srna->identifier);
- if(srna->next) fprintf(f, "\t&RNA_%s, ", srna->next->identifier);
- else fprintf(f, "\tNULL, ");
- if(srna->prev) fprintf(f, "&RNA_%s,\n", srna->prev->identifier);
+ if(srna->cont.next) fprintf(f, "\t{(ContainerRNA *)&RNA_%s, ", ((StructRNA*)srna->cont.next)->identifier);
+ else fprintf(f, "\t{NULL, ");
+ if(srna->cont.prev) fprintf(f, "(ContainerRNA *)&RNA_%s,\n", ((StructRNA*)srna->cont.prev)->identifier);
else fprintf(f, "NULL,\n");
-
- fprintf(f, "\tNULL,\n"); /* PyType - Cant initialize here */
+
+ prop= srna->cont.properties.first;
+ if(prop) fprintf(f, "\t{(PropertyRNA*)&rna_%s_%s, ", srna->identifier, prop->identifier);
+ else fprintf(f, "\t{NULL, ");
+
+ prop= srna->cont.properties.last;
+ if(prop) fprintf(f, "(PropertyRNA*)&rna_%s_%s}},\n", srna->identifier, prop->identifier);
+ else fprintf(f, "NULL}},\n");
+
+ fprintf(f, "\tNULL,NULL,\n"); /* PyType - Cant initialize here */
fprintf(f, "\t");
rna_print_c_string(f, srna->identifier);
@@ -1386,13 +1704,21 @@ static void rna_generate_struct(BlenderRNA *brna, StructRNA *srna, FILE *f)
fprintf(f, "\t%s,\n", rna_function_string(srna->refine));
fprintf(f, "\t%s,\n", rna_function_string(srna->path));
+ fprintf(f, "\t%s,\n", rna_function_string(srna->reg));
+ fprintf(f, "\t%s,\n", rna_function_string(srna->unreg));
+ fprintf(f, "\t%s,\n", rna_function_string(srna->idproperties));
- prop= srna->properties.first;
- if(prop) fprintf(f, "\t{(PropertyRNA*)&rna_%s_%s, ", srna->identifier, prop->identifier);
+ if(srna->reg && !srna->refine) {
+ fprintf(stderr, "rna_generate_struct: %s has a register function, must also have refine function.\n", srna->identifier);
+ DefRNA.error= 1;
+ }
+
+ func= srna->functions.first;
+ if(func) fprintf(f, "\t{(FunctionRNA*)&rna_%s_%s, ", srna->identifier, func->identifier);
else fprintf(f, "\t{NULL, ");
- prop= srna->properties.last;
- if(prop) fprintf(f, "(PropertyRNA*)&rna_%s_%s}\n", srna->identifier, prop->identifier);
+ func= srna->functions.last;
+ if(func) fprintf(f, "(FunctionRNA*)&rna_%s_%s}\n", srna->identifier, func->identifier);
else fprintf(f, "NULL}\n");
fprintf(f, "};\n");
@@ -1421,6 +1747,7 @@ RNAProcessItem PROCESS_ITEMS[]= {
{"rna_context.c", RNA_def_context},
{"rna_controller.c", RNA_def_controller},
{"rna_curve.c", RNA_def_curve},
+ {"rna_fcurve.c", RNA_def_fcurve},
{"rna_fluidsim.c", RNA_def_fluidsim},
{"rna_group.c", RNA_def_group},
{"rna_image.c", RNA_def_image},
@@ -1449,6 +1776,7 @@ RNAProcessItem PROCESS_ITEMS[]= {
{"rna_text.c", RNA_def_text},
{"rna_timeline.c", RNA_def_timeline_marker},
{"rna_sound.c", RNA_def_sound},
+ {"rna_ui.c", RNA_def_ui},
{"rna_userdef.c", RNA_def_userdef},
{"rna_vfont.c", RNA_def_vfont},
{"rna_vpaint.c", RNA_def_vpaint},
@@ -1460,6 +1788,7 @@ static void rna_generate(BlenderRNA *brna, FILE *f, char *filename)
{
StructDefRNA *ds;
PropertyDefRNA *dp;
+ FunctionDefRNA *dfunc;
fprintf(f, "\n/* Automatically generated struct definitions for the Data API.\n"
" Do not edit manually, changes will be overwritten. */\n\n"
@@ -1483,16 +1812,28 @@ static void rna_generate(BlenderRNA *brna, FILE *f, char *filename)
fprintf(f, "/* Autogenerated Functions */\n\n");
- for(ds=DefRNA.structs.first; ds; ds=ds->next)
- if(!filename || ds->filename == filename)
+ for(ds=DefRNA.structs.first; ds; ds=ds->cont.next) {
+ if(!filename || ds->filename == filename) {
rna_generate_property_prototypes(brna, ds->srna, f);
+ rna_generate_function_prototypes(brna, ds->srna, f);
+ }
+ }
- for(ds=DefRNA.structs.first; ds; ds=ds->next)
+ for(ds=DefRNA.structs.first; ds; ds=ds->cont.next)
if(!filename || ds->filename == filename)
- for(dp=ds->properties.first; dp; dp=dp->next)
- rna_def_property_funcs(f, dp);
+ for(dp=ds->cont.properties.first; dp; dp=dp->next)
+ rna_def_property_funcs(f, ds->srna, dp);
+
+ for(ds=DefRNA.structs.first; ds; ds=ds->cont.next) {
+ if(!filename || ds->filename == filename) {
+ for(dfunc=ds->functions.first; dfunc; dfunc= dfunc->cont.next)
+ rna_def_function_funcs(f, ds, dfunc);
- for(ds=DefRNA.structs.first; ds; ds=ds->next)
+ rna_generate_static_function_prototypes(brna, ds->srna, f);
+ }
+ }
+
+ for(ds=DefRNA.structs.first; ds; ds=ds->cont.next)
if(!filename || ds->filename == filename)
rna_generate_struct(brna, ds->srna, f);
@@ -1532,7 +1873,7 @@ static void rna_generate_header(BlenderRNA *brna, FILE *f)
fprintf(f, " property##_end(&rna_macro_iter); \\\n");
fprintf(f, " }\n\n");
- for(ds=DefRNA.structs.first; ds; ds=ds->next) {
+ for(ds=DefRNA.structs.first; ds; ds=ds->cont.next) {
srna= ds->srna;
fprintf(f, "/**************** %s ****************/\n\n", srna->name);
@@ -1543,8 +1884,8 @@ static void rna_generate_header(BlenderRNA *brna, FILE *f)
}
fprintf(f, "\n");
- for(dp=ds->properties.first; dp; dp=dp->next)
- rna_def_property_funcs_header(f, dp);
+ for(dp=ds->cont.properties.first; dp; dp=dp->next)
+ rna_def_property_funcs_header(f, ds->srna, dp);
}
fprintf(f, "#ifdef __cplusplus\n}\n#endif\n\n");
@@ -1679,11 +2020,11 @@ static void rna_generate_header_cpp(BlenderRNA *brna, FILE *f)
fprintf(f, "/**************** Declarations ****************/\n\n");
- for(ds=DefRNA.structs.first; ds; ds=ds->next)
+ for(ds=DefRNA.structs.first; ds; ds=ds->cont.next)
fprintf(f, "class %s;\n", ds->srna->identifier);
fprintf(f, "\n");
- for(ds=DefRNA.structs.first; ds; ds=ds->next) {
+ for(ds=DefRNA.structs.first; ds; ds=ds->cont.next) {
srna= ds->srna;
fprintf(f, "/**************** %s ****************/\n\n", srna->name);
@@ -1691,23 +2032,23 @@ static void rna_generate_header_cpp(BlenderRNA *brna, FILE *f)
fprintf(f, "class %s : public %s {\n", srna->identifier, (srna->base)? srna->base->identifier: "Pointer");
fprintf(f, "public:\n");
fprintf(f, "\t%s(const PointerRNA& ptr) :\n\t\t%s(ptr)", srna->identifier, (srna->base)? srna->base->identifier: "Pointer");
- for(dp=ds->properties.first; dp; dp=dp->next)
+ for(dp=ds->cont.properties.first; dp; dp=dp->next)
if(!(dp->prop->flag & (PROP_IDPROPERTY|PROP_BUILTIN)))
if(dp->prop->type == PROP_COLLECTION)
fprintf(f, ",\n\t\t%s(ptr)", dp->prop->identifier);
fprintf(f, "\n\t\t{}\n\n");
- for(dp=ds->properties.first; dp; dp=dp->next)
- rna_def_property_funcs_header_cpp(f, dp);
+ for(dp=ds->cont.properties.first; dp; dp=dp->next)
+ rna_def_property_funcs_header_cpp(f, ds->srna, dp);
fprintf(f, "};\n\n");
}
fprintf(f, "/**************** Implementation ****************/\n");
- for(ds=DefRNA.structs.first; ds; ds=ds->next) {
- for(dp=ds->properties.first; dp; dp=dp->next)
- rna_def_property_funcs_impl_cpp(f, dp);
+ for(ds=DefRNA.structs.first; ds; ds=ds->cont.next) {
+ for(dp=ds->cont.properties.first; dp; dp=dp->next)
+ rna_def_property_funcs_impl_cpp(f, ds->srna, dp);
fprintf(f, "\n");
}
@@ -1737,7 +2078,7 @@ static int rna_preprocess(char *outfile)
if(PROCESS_ITEMS[i].define) {
PROCESS_ITEMS[i].define(brna);
- for(ds=DefRNA.structs.first; ds; ds=ds->next)
+ for(ds=DefRNA.structs.first; ds; ds=ds->cont.next)
if(!ds->filename)
ds->filename= PROCESS_ITEMS[i].filename;
}
@@ -1827,11 +2168,17 @@ static int rna_preprocess(char *outfile)
return status;
}
+static void mem_error_cb(char *errorStr)
+{
+ fprintf(stderr, "%s", errorStr);
+ fflush(stderr);
+}
+
int main(int argc, char **argv)
{
int totblock, return_status = 0;
- if (argc<2) {
+ if(argc<2) {
printf("Usage: %s outdirectory/\n", argv[0]);
return_status = 1;
}
@@ -1843,6 +2190,7 @@ int main(int argc, char **argv)
totblock= MEM_get_memory_blocks_in_use();
if(totblock!=0) {
printf("Error Totblock: %d\n",totblock);
+ MEM_set_error_callback(mem_error_cb);
MEM_printmemlist();
}
diff --git a/source/blender/makesrna/intern/rna_ID.c b/source/blender/makesrna/intern/rna_ID.c
index 5955f16f916..ee1a1fedf2c 100644
--- a/source/blender/makesrna/intern/rna_ID.c
+++ b/source/blender/makesrna/intern/rna_ID.c
@@ -90,6 +90,11 @@ StructRNA *rna_ID_refine(PointerRNA *ptr)
}
}
+IDProperty *rna_ID_idproperties(PointerRNA *ptr, int create)
+{
+ return IDP_GetProperties(ptr->data, create);
+}
+
void rna_ID_fake_user_set(PointerRNA *ptr, int value)
{
ID *id= (ID*)ptr->data;
@@ -104,6 +109,11 @@ void rna_ID_fake_user_set(PointerRNA *ptr, int value)
}
}
+IDProperty *rna_IDPropertyGroup_idproperties(PointerRNA *ptr, int create)
+{
+ return ptr->data;
+}
+
#else
static void rna_def_ID_properties(BlenderRNA *brna)
@@ -161,17 +171,20 @@ static void rna_def_ID_properties(BlenderRNA *brna)
* care of the properties here */
srna= RNA_def_struct(brna, "IDPropertyGroup", NULL);
RNA_def_struct_ui_text(srna, "ID Property Group", "Group of ID properties.");
+ RNA_def_struct_idproperties_func(srna, "rna_IDPropertyGroup_idproperties");
}
static void rna_def_ID(BlenderRNA *brna)
{
StructRNA *srna;
PropertyRNA *prop;
+ FunctionRNA *func;
srna= RNA_def_struct(brna, "ID", NULL);
RNA_def_struct_ui_text(srna, "ID", "Base type for datablocks, defining a unique name, linking from other libraries and garbage collection.");
RNA_def_struct_flag(srna, STRUCT_ID);
RNA_def_struct_refine_func(srna, "rna_ID_refine");
+ RNA_def_struct_idproperties_func(srna, "rna_ID_idproperties");
prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
RNA_def_property_ui_text(prop, "Name", "Unique datablock ID name.");
@@ -193,6 +206,12 @@ static void rna_def_ID(BlenderRNA *brna)
RNA_def_property_pointer_sdna(prop, NULL, "lib");
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Library", "Library file the datablock is linked from.");
+
+ /* XXX temporary for testing */
+ func= RNA_def_function(srna, "rename", "rename_id");
+ RNA_def_function_ui_description(func, "Rename this ID datablock.");
+ prop= RNA_def_string(func, "name", "", 0, "", "New name for the datablock.");
+ RNA_def_property_flag(prop, PROP_REQUIRED);
}
static void rna_def_library(BlenderRNA *brna)
@@ -212,10 +231,14 @@ void RNA_def_ID(BlenderRNA *brna)
{
StructRNA *srna;
- /* simple built-in unknown type */
+ /* built-in unknown type */
srna= RNA_def_struct(brna, "UnknownType", NULL);
RNA_def_struct_ui_text(srna, "Unknown Type", "Stub RNA type used for pointers to unknown or internal data.");
+ /* built-in any type */
+ srna= RNA_def_struct(brna, "AnyType", NULL);
+ RNA_def_struct_ui_text(srna, "Any Type", "RNA type used for pointers to any possible data.");
+
rna_def_ID(brna);
rna_def_ID_properties(brna);
rna_def_library(brna);
diff --git a/source/blender/makesrna/intern/rna_access.c b/source/blender/makesrna/intern/rna_access.c
index 3fcc2d18487..fb284aab99f 100644
--- a/source/blender/makesrna/intern/rna_access.c
+++ b/source/blender/makesrna/intern/rna_access.c
@@ -63,14 +63,23 @@ void RNA_main_pointer_create(struct Main *main, PointerRNA *r_ptr)
void RNA_id_pointer_create(ID *id, PointerRNA *r_ptr)
{
PointerRNA tmp;
- StructRNA *idtype= NULL;
+ StructRNA *type, *idtype= NULL;
if(id) {
memset(&tmp, 0, sizeof(tmp));
tmp.data= id;
idtype= rna_ID_refine(&tmp);
- }
+
+ while(idtype->refine) {
+ type= idtype->refine(&tmp);
+ if(type == idtype)
+ break;
+ else
+ idtype= type;
+ }
+ }
+
r_ptr->id.data= id;
r_ptr->type= idtype;
r_ptr->data= id;
@@ -118,8 +127,14 @@ PointerRNA rna_pointer_inherit_refine(PointerRNA *ptr, StructRNA *type, void *da
result.type= type;
rna_pointer_inherit_id(type, ptr, &result);
- if(type->refine)
- result.type= type->refine(&result);
+ while(result.type->refine) {
+ type= result.type->refine(&result);
+
+ if(type == result.type)
+ break;
+ else
+ result.type= type;
+ }
}
else
memset(&result, 0, sizeof(result));
@@ -129,28 +144,19 @@ PointerRNA rna_pointer_inherit_refine(PointerRNA *ptr, StructRNA *type, void *da
/* ID Properties */
-IDProperty *rna_idproperties_get(PointerRNA *ptr, int create)
-{
- if(ptr->type->flag & STRUCT_ID)
- return IDP_GetProperties(ptr->data, create);
- else if(ptr->type == &RNA_IDPropertyGroup || ptr->type->base == &RNA_IDPropertyGroup)
- return ptr->data;
- else if(ptr->type->base == &RNA_OperatorProperties) {
- if(create && !ptr->data) {
- IDPropertyTemplate val;
- val.i = 0; /* silence MSVC warning about uninitialized var when debugging */
- ptr->data= IDP_New(IDP_GROUP, val, "RNA_OperatorProperties group");
- }
+IDProperty *RNA_struct_idproperties(PointerRNA *ptr, int create)
+{
+ StructRNA *type= ptr->type;
- return ptr->data;
- }
- else
- return NULL;
+ if(type && type->idproperties)
+ return type->idproperties(ptr, create);
+
+ return NULL;
}
static IDProperty *rna_idproperty_find(PointerRNA *ptr, const char *name)
{
- IDProperty *group= rna_idproperties_get(ptr, 0);
+ IDProperty *group= RNA_struct_idproperties(ptr, 0);
IDProperty *idprop;
if(group) {
@@ -208,6 +214,21 @@ static int rna_idproperty_verify_valid(PropertyRNA *prop, IDProperty *idprop)
return 1;
}
+static PropertyRNA *typemap[IDP_NUMTYPES] =
+ {(PropertyRNA*)&rna_IDProperty_string,
+ (PropertyRNA*)&rna_IDProperty_int,
+ (PropertyRNA*)&rna_IDProperty_float,
+ NULL, NULL, NULL,
+ (PropertyRNA*)&rna_IDProperty_group, NULL,
+ (PropertyRNA*)&rna_IDProperty_double};
+
+static PropertyRNA *arraytypemap[IDP_NUMTYPES] =
+ {NULL, (PropertyRNA*)&rna_IDProperty_int_array,
+ (PropertyRNA*)&rna_IDProperty_float_array,
+ NULL, NULL, NULL,
+ (PropertyRNA*)&rna_IDProperty_collection, NULL,
+ (PropertyRNA*)&rna_IDProperty_double_array};
+
IDProperty *rna_idproperty_check(PropertyRNA **prop, PointerRNA *ptr)
{
/* This is quite a hack, but avoids some complexity in the API. we
@@ -222,7 +243,7 @@ IDProperty *rna_idproperty_check(PropertyRNA **prop, PointerRNA *ptr)
IDProperty *idprop= rna_idproperty_find(ptr, (*prop)->identifier);
if(idprop && !rna_idproperty_verify_valid(*prop, idprop)) {
- IDProperty *group= rna_idproperties_get(ptr, 0);
+ IDProperty *group= RNA_struct_idproperties(ptr, 0);
IDP_RemFromGroup(group, idprop);
IDP_FreeProperty(idprop);
@@ -237,21 +258,6 @@ IDProperty *rna_idproperty_check(PropertyRNA **prop, PointerRNA *ptr)
}
{
- static PropertyRNA *typemap[IDP_NUMTYPES] =
- {(PropertyRNA*)&rna_IDProperty_string,
- (PropertyRNA*)&rna_IDProperty_int,
- (PropertyRNA*)&rna_IDProperty_float,
- NULL, NULL, NULL,
- (PropertyRNA*)&rna_IDProperty_group, NULL,
- (PropertyRNA*)&rna_IDProperty_double};
-
- static PropertyRNA *arraytypemap[IDP_NUMTYPES] =
- {NULL, (PropertyRNA*)&rna_IDProperty_int_array,
- (PropertyRNA*)&rna_IDProperty_float_array,
- NULL, NULL, NULL,
- (PropertyRNA*)&rna_IDProperty_collection, NULL,
- (PropertyRNA*)&rna_IDProperty_double_array};
-
IDProperty *idprop= (IDProperty*)(*prop);
if(idprop->type == IDP_ARRAY)
@@ -263,45 +269,95 @@ IDProperty *rna_idproperty_check(PropertyRNA **prop, PointerRNA *ptr)
}
}
+PropertyRNA *rna_ensure_property(PropertyRNA *prop)
+{
+ /* the quick version if we don't need the idproperty */
+
+ if(prop->magic == RNA_MAGIC)
+ return prop;
+
+ {
+ IDProperty *idprop= (IDProperty*)prop;
+
+ if(idprop->type == IDP_ARRAY)
+ return arraytypemap[(int)(idprop->subtype)];
+ else
+ return typemap[(int)(idprop->type)];
+ }
+}
+
+const char *rna_ensure_property_identifier(PropertyRNA *prop)
+{
+ if(prop->magic == RNA_MAGIC)
+ return prop->identifier;
+ else
+ return ((IDProperty*)prop)->name;
+}
+
+const char *rna_ensure_property_name(PropertyRNA *prop)
+{
+ if(prop->magic == RNA_MAGIC)
+ return prop->name;
+ else
+ return ((IDProperty*)prop)->name;
+}
+
+int rna_ensure_property_array_length(PropertyRNA *prop)
+{
+ if(prop->magic == RNA_MAGIC)
+ return prop->arraylength;
+ else {
+ IDProperty *idprop= (IDProperty*)prop;
+
+ if(idprop->type == IDP_ARRAY)
+ return idprop->len;
+ else
+ return 0;
+ }
+}
+
/* Structs */
-const char *RNA_struct_identifier(PointerRNA *ptr)
+const char *RNA_struct_identifier(StructRNA *type)
{
- return ptr->type->identifier;
+ return type->identifier;
}
-const char *RNA_struct_ui_name(PointerRNA *ptr)
+const char *RNA_struct_ui_name(StructRNA *type)
{
- return ptr->type->name;
+ return type->name;
}
-const char *RNA_struct_ui_description(PointerRNA *ptr)
+const char *RNA_struct_ui_description(StructRNA *type)
{
- return ptr->type->description;
+ return type->description;
}
-PropertyRNA *RNA_struct_name_property(PointerRNA *ptr)
+PropertyRNA *RNA_struct_name_property(StructRNA *type)
{
- return ptr->type->nameproperty;
+ return type->nameproperty;
}
-PropertyRNA *RNA_struct_iterator_property(PointerRNA *ptr)
+PropertyRNA *RNA_struct_iterator_property(StructRNA *type)
{
- return ptr->type->iteratorproperty;
+ return type->iteratorproperty;
}
-int RNA_struct_is_ID(PointerRNA *ptr)
+int RNA_struct_is_ID(StructRNA *type)
{
- return (ptr->type->flag & STRUCT_ID) != 0;
+ return (type->flag & STRUCT_ID) != 0;
}
-int RNA_struct_is_a(PointerRNA *ptr, StructRNA *srna)
+int RNA_struct_is_a(StructRNA *type, StructRNA *srna)
{
- StructRNA *type;
+ StructRNA *base;
+
+ if(!type)
+ return 0;
/* ptr->type is always maximally refined */
- for(type=ptr->type; type; type=type->base)
- if(type == srna)
+ for(base=type; base; base=base->base)
+ if(base == srna)
return 1;
return 0;
@@ -313,12 +369,36 @@ PropertyRNA *RNA_struct_find_property(PointerRNA *ptr, const char *identifier)
PropertyRNA *iterprop, *prop;
int i = 0;
- iterprop= RNA_struct_iterator_property(ptr);
+ iterprop= RNA_struct_iterator_property(ptr->type);
+ RNA_property_collection_begin(ptr, iterprop, &iter);
+ prop= NULL;
+
+ for(; iter.valid; RNA_property_collection_next(&iter), i++) {
+ if(strcmp(identifier, RNA_property_identifier(iter.ptr.data)) == 0) {
+ prop= iter.ptr.data;
+ break;
+ }
+ }
+
+ RNA_property_collection_end(&iter);
+
+ return prop;
+}
+
+/* Find the property which uses the given nested struct */
+PropertyRNA *RNA_struct_find_nested(PointerRNA *ptr, StructRNA *srna)
+{
+ CollectionPropertyIterator iter;
+ PropertyRNA *iterprop, *prop;
+ int i = 0;
+
+ iterprop= RNA_struct_iterator_property(ptr->type);
RNA_property_collection_begin(ptr, iterprop, &iter);
prop= NULL;
for(; iter.valid; RNA_property_collection_next(&iter), i++) {
- if(strcmp(identifier, RNA_property_identifier(ptr, iter.ptr.data)) == 0) {
+ /* This assumes that there can only be one user of this nested struct */
+ if (RNA_property_pointer_type(iter.ptr.data) == srna) {
prop= iter.ptr.data;
break;
}
@@ -331,51 +411,105 @@ PropertyRNA *RNA_struct_find_property(PointerRNA *ptr, const char *identifier)
const struct ListBase *RNA_struct_defined_properties(StructRNA *srna)
{
- return &srna->properties;
+ return &srna->cont.properties;
}
-/* Property Information */
+FunctionRNA *RNA_struct_find_function(PointerRNA *ptr, const char *identifier)
+{
+ PointerRNA tptr;
+ CollectionPropertyIterator iter;
+ PropertyRNA *iterprop;
+ FunctionRNA *func;
+ int i = 0;
+
+ RNA_pointer_create(NULL, &RNA_Struct, ptr->type, &tptr);
+ iterprop= RNA_struct_find_property(&tptr, "functions");
-const char *RNA_property_identifier(PointerRNA *ptr, PropertyRNA *prop)
+ RNA_property_collection_begin(&tptr, iterprop, &iter);
+ func= NULL;
+
+ for(; iter.valid; RNA_property_collection_next(&iter), i++) {
+ if(strcmp(identifier, RNA_function_identifier(iter.ptr.data)) == 0) {
+ func= iter.ptr.data;
+ break;
+ }
+ }
+
+ RNA_property_collection_end(&iter);
+
+ return func;
+}
+
+const struct ListBase *RNA_struct_defined_functions(StructRNA *srna)
{
- IDProperty *idprop;
+ return &srna->functions;
+}
- if((idprop=rna_idproperty_check(&prop, ptr)))
- return idprop->name;
- else
- return prop->identifier;
+StructRegisterFunc RNA_struct_register(StructRNA *type)
+{
+ return type->reg;
}
-PropertyType RNA_property_type(PointerRNA *ptr, PropertyRNA *prop)
+StructUnregisterFunc RNA_struct_unregister(StructRNA *type)
{
- rna_idproperty_check(&prop, ptr);
+ do {
+ if(type->unreg)
+ return type->unreg;
+ } while((type=type->base));
- return prop->type;
+ return NULL;
}
-PropertySubType RNA_property_subtype(PointerRNA *ptr, PropertyRNA *prop)
+void *RNA_struct_py_type_get(StructRNA *srna)
{
- rna_idproperty_check(&prop, ptr);
+ return srna->py_type;
+}
- return prop->subtype;
+void RNA_struct_py_type_set(StructRNA *srna, void *py_type)
+{
+ srna->py_type= py_type;
}
-int RNA_property_array_length(PointerRNA *ptr, PropertyRNA *prop)
+void *RNA_struct_blender_type_get(StructRNA *srna)
{
- IDProperty *idprop;
+ return srna->blender_type;
+}
- if((idprop=rna_idproperty_check(&prop, ptr)) && idprop->type==IDP_ARRAY)
- return idprop->len;
- else
- return prop->arraylength;
+void RNA_struct_blender_type_set(StructRNA *srna, void *blender_type)
+{
+ srna->blender_type= blender_type;
+}
+
+/* Property Information */
+
+const char *RNA_property_identifier(PropertyRNA *prop)
+{
+ return rna_ensure_property_identifier(prop);
+}
+
+PropertyType RNA_property_type(PropertyRNA *prop)
+{
+ return rna_ensure_property(prop)->type;
+}
+
+PropertySubType RNA_property_subtype(PropertyRNA *prop)
+{
+ return rna_ensure_property(prop)->subtype;
+}
+
+int RNA_property_flag(PropertyRNA *prop)
+{
+ return rna_ensure_property(prop)->flag;
+}
+
+int RNA_property_array_length(PropertyRNA *prop)
+{
+ return rna_ensure_property_array_length(prop);
}
void RNA_property_int_range(PointerRNA *ptr, PropertyRNA *prop, int *hardmin, int *hardmax)
{
- IntPropertyRNA *iprop;
-
- rna_idproperty_check(&prop, ptr);
- iprop= (IntPropertyRNA*)prop;
+ IntPropertyRNA *iprop= (IntPropertyRNA*)rna_ensure_property(prop);
if(iprop->range) {
iprop->range(ptr, hardmin, hardmax);
@@ -388,12 +522,9 @@ void RNA_property_int_range(PointerRNA *ptr, PropertyRNA *prop, int *hardmin, in
void RNA_property_int_ui_range(PointerRNA *ptr, PropertyRNA *prop, int *softmin, int *softmax, int *step)
{
- IntPropertyRNA *iprop;
+ IntPropertyRNA *iprop= (IntPropertyRNA*)rna_ensure_property(prop);
int hardmin, hardmax;
- rna_idproperty_check(&prop, ptr);
- iprop= (IntPropertyRNA*)prop;
-
if(iprop->range) {
iprop->range(ptr, &hardmin, &hardmax);
*softmin= MAX2(iprop->softmin, hardmin);
@@ -409,10 +540,7 @@ void RNA_property_int_ui_range(PointerRNA *ptr, PropertyRNA *prop, int *softmin,
void RNA_property_float_range(PointerRNA *ptr, PropertyRNA *prop, float *hardmin, float *hardmax)
{
- FloatPropertyRNA *fprop;
-
- rna_idproperty_check(&prop, ptr);
- fprop= (FloatPropertyRNA*)prop;
+ FloatPropertyRNA *fprop= (FloatPropertyRNA*)rna_ensure_property(prop);
if(fprop->range) {
fprop->range(ptr, hardmin, hardmax);
@@ -425,12 +553,9 @@ void RNA_property_float_range(PointerRNA *ptr, PropertyRNA *prop, float *hardmin
void RNA_property_float_ui_range(PointerRNA *ptr, PropertyRNA *prop, float *softmin, float *softmax, float *step, float *precision)
{
- FloatPropertyRNA *fprop;
+ FloatPropertyRNA *fprop= (FloatPropertyRNA*)rna_ensure_property(prop);
float hardmin, hardmax;
- rna_idproperty_check(&prop, ptr);
- fprop= (FloatPropertyRNA*)prop;
-
if(fprop->range) {
fprop->range(ptr, &hardmin, &hardmax);
*softmin= MAX2(fprop->softmin, hardmin);
@@ -445,35 +570,35 @@ void RNA_property_float_ui_range(PointerRNA *ptr, PropertyRNA *prop, float *soft
*precision= (float)fprop->precision;
}
-int RNA_property_string_maxlength(PointerRNA *ptr, PropertyRNA *prop)
+int RNA_property_string_maxlength(PropertyRNA *prop)
{
- StringPropertyRNA *sprop;
-
- rna_idproperty_check(&prop, ptr);
- sprop= (StringPropertyRNA*)prop;
-
+ StringPropertyRNA *sprop= (StringPropertyRNA*)rna_ensure_property(prop);
return sprop->maxlength;
}
-StructRNA *RNA_property_pointer_type(PointerRNA *ptr, PropertyRNA *prop)
+StructRNA *RNA_property_pointer_type(PropertyRNA *prop)
{
- PointerPropertyRNA *pprop;
-
- rna_idproperty_check(&prop, ptr);
- pprop= (PointerPropertyRNA*)prop;
+ prop= rna_ensure_property(prop);
- if(pprop->type)
- return pprop->type;
+ if(prop->type == PROP_POINTER) {
+ PointerPropertyRNA *pprop= (PointerPropertyRNA*)prop;
+
+ if(pprop->type)
+ return pprop->type;
+ }
+ else if(prop->type == PROP_COLLECTION) {
+ CollectionPropertyRNA *cprop= (CollectionPropertyRNA*)prop;
+
+ if(cprop->type)
+ return cprop->type;
+ }
return &RNA_UnknownType;
}
void RNA_property_enum_items(PointerRNA *ptr, PropertyRNA *prop, const EnumPropertyItem **item, int *totitem)
{
- EnumPropertyRNA *eprop;
-
- rna_idproperty_check(&prop, ptr);
- eprop= (EnumPropertyRNA*)prop;
+ EnumPropertyRNA *eprop= (EnumPropertyRNA*)rna_ensure_property(prop);
*item= eprop->item;
*totitem= eprop->totitem;
@@ -486,8 +611,8 @@ int RNA_property_enum_value(PointerRNA *ptr, PropertyRNA *prop, const char *iden
RNA_property_enum_items(ptr, prop, &item, &totitem);
- for (i=0; i<totitem; i++) {
- if (strcmp(item[i].identifier, identifier)==0) {
+ for(i=0; i<totitem; i++) {
+ if(strcmp(item[i].identifier, identifier)==0) {
*value = item[i].value;
return 1;
}
@@ -503,8 +628,8 @@ int RNA_property_enum_identifier(PointerRNA *ptr, PropertyRNA *prop, const int v
RNA_property_enum_items(ptr, prop, &item, &totitem);
- for (i=0; i<totitem; i++) {
- if (item[i].value==value) {
+ for(i=0; i<totitem; i++) {
+ if(item[i].value==value) {
*identifier = item[i].identifier;
return 1;
}
@@ -513,32 +638,21 @@ int RNA_property_enum_identifier(PointerRNA *ptr, PropertyRNA *prop, const int v
return 0;
}
-const char *RNA_property_ui_name(PointerRNA *ptr, PropertyRNA *prop)
+const char *RNA_property_ui_name(PropertyRNA *prop)
{
- PropertyRNA *oldprop= prop;
- IDProperty *idprop;
-
- if((idprop=rna_idproperty_check(&prop, ptr)) && oldprop!=prop)
- return idprop->name;
- else
- return prop->name;
+ return rna_ensure_property_name(prop);
}
-const char *RNA_property_ui_description(PointerRNA *ptr, PropertyRNA *prop)
+const char *RNA_property_ui_description(PropertyRNA *prop)
{
- PropertyRNA *oldprop= prop;
-
- if(rna_idproperty_check(&prop, ptr) && oldprop!=prop)
- return "";
- else
- return prop->description;
+ return rna_ensure_property(prop)->description;
}
int RNA_property_editable(PointerRNA *ptr, PropertyRNA *prop)
{
int flag;
- rna_idproperty_check(&prop, ptr);
+ prop= rna_ensure_property(prop);
if(prop->editable)
flag= prop->editable(ptr);
@@ -552,7 +666,7 @@ int RNA_property_animateable(PointerRNA *ptr, PropertyRNA *prop)
{
int flag;
- rna_idproperty_check(&prop, ptr);
+ prop= rna_ensure_property(prop);
if(!(prop->flag & PROP_ANIMATEABLE))
return 0;
@@ -574,7 +688,7 @@ int RNA_property_animated(PointerRNA *ptr, PropertyRNA *prop)
void RNA_property_update(struct bContext *C, PointerRNA *ptr, PropertyRNA *prop)
{
- rna_idproperty_check(&prop, ptr);
+ prop= rna_ensure_property(prop);
if(prop->update)
prop->update(C, ptr);
@@ -607,12 +721,12 @@ void RNA_property_boolean_set(PointerRNA *ptr, PropertyRNA *prop, int value)
else if(bprop->set)
bprop->set(ptr, value);
else if(prop->flag & PROP_EDITABLE) {
- IDPropertyTemplate val;
+ IDPropertyTemplate val = {0};
IDProperty *group;
val.i= value;
- group= rna_idproperties_get(ptr, 1);
+ group= RNA_struct_idproperties(ptr, 1);
if(group)
IDP_AddToGroup(group, IDP_New(IDP_INT, val, (char*)prop->identifier));
}
@@ -663,13 +777,13 @@ void RNA_property_boolean_set_array(PointerRNA *ptr, PropertyRNA *prop, const in
else if(bprop->setarray)
bprop->setarray(ptr, values);
else if(prop->flag & PROP_EDITABLE) {
- IDPropertyTemplate val;
+ IDPropertyTemplate val = {0};
IDProperty *group;
val.array.len= prop->arraylength;
val.array.type= IDP_INT;
- group= rna_idproperties_get(ptr, 1);
+ group= RNA_struct_idproperties(ptr, 1);
if(group) {
idprop= IDP_New(IDP_ARRAY, val, (char*)prop->identifier);
IDP_AddToGroup(group, idprop);
@@ -710,12 +824,12 @@ void RNA_property_int_set(PointerRNA *ptr, PropertyRNA *prop, int value)
else if(iprop->set)
iprop->set(ptr, value);
else if(prop->flag & PROP_EDITABLE) {
- IDPropertyTemplate val;
+ IDPropertyTemplate val = {0};
IDProperty *group;
val.i= value;
- group= rna_idproperties_get(ptr, 1);
+ group= RNA_struct_idproperties(ptr, 1);
if(group)
IDP_AddToGroup(group, IDP_New(IDP_INT, val, (char*)prop->identifier));
}
@@ -766,13 +880,13 @@ void RNA_property_int_set_array(PointerRNA *ptr, PropertyRNA *prop, const int *v
else if(iprop->setarray)
iprop->setarray(ptr, values);
else if(prop->flag & PROP_EDITABLE) {
- IDPropertyTemplate val;
+ IDPropertyTemplate val = {0};
IDProperty *group;
val.array.len= prop->arraylength;
val.array.type= IDP_INT;
- group= rna_idproperties_get(ptr, 1);
+ group= RNA_struct_idproperties(ptr, 1);
if(group) {
idprop= IDP_New(IDP_ARRAY, val, (char*)prop->identifier);
IDP_AddToGroup(group, idprop);
@@ -822,12 +936,12 @@ void RNA_property_float_set(PointerRNA *ptr, PropertyRNA *prop, float value)
fprop->set(ptr, value);
}
else if(prop->flag & PROP_EDITABLE) {
- IDPropertyTemplate val;
+ IDPropertyTemplate val = {0};
IDProperty *group;
val.f= value;
- group= rna_idproperties_get(ptr, 1);
+ group= RNA_struct_idproperties(ptr, 1);
if(group)
IDP_AddToGroup(group, IDP_New(IDP_FLOAT, val, (char*)prop->identifier));
}
@@ -891,13 +1005,13 @@ void RNA_property_float_set_array(PointerRNA *ptr, PropertyRNA *prop, const floa
fprop->setarray(ptr, values);
}
else if(prop->flag & PROP_EDITABLE) {
- IDPropertyTemplate val;
+ IDPropertyTemplate val = {0};
IDProperty *group;
val.array.len= prop->arraylength;
val.array.type= IDP_FLOAT;
- group= rna_idproperties_get(ptr, 1);
+ group= RNA_struct_idproperties(ptr, 1);
if(group) {
idprop= IDP_New(IDP_ARRAY, val, (char*)prop->identifier);
IDP_AddToGroup(group, idprop);
@@ -968,12 +1082,12 @@ void RNA_property_string_set(PointerRNA *ptr, PropertyRNA *prop, const char *val
else if(sprop->set)
sprop->set(ptr, value);
else if(prop->flag & PROP_EDITABLE) {
- IDPropertyTemplate val;
+ IDPropertyTemplate val = {0};
IDProperty *group;
val.str= (char*)value;
- group= rna_idproperties_get(ptr, 1);
+ group= RNA_struct_idproperties(ptr, 1);
if(group)
IDP_AddToGroup(group, IDP_New(IDP_STRING, val, (char*)prop->identifier));
}
@@ -1004,12 +1118,12 @@ void RNA_property_enum_set(PointerRNA *ptr, PropertyRNA *prop, int value)
eprop->set(ptr, value);
}
else if(prop->flag & PROP_EDITABLE) {
- IDPropertyTemplate val;
+ IDPropertyTemplate val = {0};
IDProperty *group;
val.i= value;
- group= rna_idproperties_get(ptr, 1);
+ group= RNA_struct_idproperties(ptr, 1);
if(group)
IDP_AddToGroup(group, IDP_New(IDP_INT, val, (char*)prop->identifier));
}
@@ -1052,12 +1166,12 @@ void RNA_property_pointer_add(PointerRNA *ptr, PropertyRNA *prop)
/* already exists */
}
else if(prop->flag & PROP_IDPROPERTY) {
- IDPropertyTemplate val;
+ IDPropertyTemplate val = {0};
IDProperty *group;
val.i= 0;
- group= rna_idproperties_get(ptr, 1);
+ group= RNA_struct_idproperties(ptr, 1);
if(group)
IDP_AddToGroup(group, IDP_New(IDP_GROUP, val, (char*)prop->identifier));
}
@@ -1153,9 +1267,8 @@ void RNA_property_collection_add(PointerRNA *ptr, PropertyRNA *prop, PointerRNA
IDProperty *idprop;
if((idprop=rna_idproperty_check(&prop, ptr))) {
- IDPropertyTemplate val;
+ IDPropertyTemplate val = {0};
IDProperty *item;
- val.i= 0;
item= IDP_New(IDP_GROUP, val, "");
IDP_AppendArray(idprop, item);
@@ -1164,10 +1277,9 @@ void RNA_property_collection_add(PointerRNA *ptr, PropertyRNA *prop, PointerRNA
}
else if(prop->flag & PROP_IDPROPERTY) {
IDProperty *group, *item;
- IDPropertyTemplate val;
- val.i= 0;
+ IDPropertyTemplate val = {0};
- group= rna_idproperties_get(ptr, 1);
+ group= RNA_struct_idproperties(ptr, 1);
if(group) {
idprop= IDP_NewIDPArray(prop->identifier);
IDP_AddToGroup(group, idprop);
@@ -1260,7 +1372,7 @@ int RNA_property_collection_lookup_string(PointerRNA *ptr, PropertyRNA *prop, co
found= 1;
}
- if ((char *)&name != nameptr)
+ if((char *)&name != nameptr)
MEM_freeN(nameptr);
if(found)
@@ -1457,12 +1569,12 @@ int RNA_path_resolve(PointerRNA *ptr, const char *path, PointerRNA *r_ptr, Prope
if(!token)
return 0;
- iterprop= RNA_struct_iterator_property(&curptr);
+ iterprop= RNA_struct_iterator_property(curptr.type);
RNA_property_collection_begin(&curptr, iterprop, &iter);
prop= NULL;
for(; iter.valid; RNA_property_collection_next(&iter)) {
- if(strcmp(token, RNA_property_identifier(&curptr, iter.ptr.data)) == 0) {
+ if(strcmp(token, RNA_property_identifier(iter.ptr.data)) == 0) {
prop= iter.ptr.data;
break;
}
@@ -1479,7 +1591,7 @@ int RNA_path_resolve(PointerRNA *ptr, const char *path, PointerRNA *r_ptr, Prope
/* now look up the value of this property if it is a pointer or
* collection, otherwise return the property rna so that the
* caller can read the value of the property itself */
- if(RNA_property_type(&curptr, prop) == PROP_POINTER) {
+ if(RNA_property_type(prop) == PROP_POINTER) {
nextptr= RNA_property_pointer_get(&curptr, prop);
if(nextptr.data)
@@ -1487,7 +1599,7 @@ int RNA_path_resolve(PointerRNA *ptr, const char *path, PointerRNA *r_ptr, Prope
else
return 0;
}
- else if(RNA_property_type(&curptr, prop) == PROP_COLLECTION && *path) {
+ else if(RNA_property_type(prop) == PROP_COLLECTION && *path) {
/* resolve the lookup with [] brackets */
token= rna_path_token(&path, fixedbuf, sizeof(fixedbuf), 1);
@@ -1539,9 +1651,9 @@ char *RNA_path_append(const char *path, PointerRNA *ptr, PropertyRNA *prop, int
BLI_dynstr_append(dynstr, ".");
}
- BLI_dynstr_append(dynstr, (char*)RNA_property_identifier(ptr, prop));
+ BLI_dynstr_append(dynstr, (char*)RNA_property_identifier(prop));
- if(RNA_property_type(ptr, prop) == PROP_COLLECTION) {
+ if(RNA_property_type(prop) == PROP_COLLECTION) {
/* add ["strkey"] or [intkey] */
BLI_dynstr_append(dynstr, "[");
@@ -1630,14 +1742,31 @@ char *RNA_path_from_ID_to_property(PointerRNA *ptr, PropertyRNA *prop)
if(!ptr->id.data || !ptr->data || !prop)
return NULL;
- if(!RNA_struct_is_ID(ptr)) {
- if(ptr->type->path)
+ if(!RNA_struct_is_ID(ptr->type)) {
+ if(ptr->type->path) {
+ /* if type has a path to some ID, use it */
ptrpath= ptr->type->path(ptr);
+ }
+ else if(ptr->type->nested) {
+ PointerRNA parentptr;
+ PropertyRNA *userprop;
+
+ /* find the property in the struct we're nested in that references this struct, and
+ * use its identifier as the first part of the path used...
+ */
+ RNA_pointer_create(ptr->id.data, ptr->type->nested, ptr->data, &parentptr);
+ userprop= RNA_struct_find_nested(&parentptr, ptr->type);
+
+ if(userprop)
+ ptrpath= BLI_strdup(RNA_property_identifier(userprop));
+ else
+ return NULL; // can't do anything about this case yet...
+ }
else
return NULL;
}
- propname= RNA_property_identifier(ptr, prop);
+ propname= RNA_property_identifier(prop);
if(ptrpath) {
path= BLI_sprintfN("%s.%s", ptrpath, propname);
@@ -1825,6 +1954,32 @@ int RNA_enum_is_equal(PointerRNA *ptr, const char *name, const char *enumname)
}
}
+int RNA_enum_value_from_id(EnumPropertyItem *item, const char *identifier, int *value)
+{
+ for( ; item->identifier; item++) {
+ if(strcmp(item->identifier, identifier)==0) {
+ *value= item->value;
+ return 1;
+ }
+ }
+
+ return 0;
+}
+
+int RNA_enum_id_from_value(EnumPropertyItem *item, int value, const char **identifier)
+{
+ for( ; item->identifier; item++) {
+ if(item->value==value) {
+ *identifier= item->identifier;
+ return 1;
+ }
+ }
+
+ return 0;
+}
+
+
+
void RNA_string_get(PointerRNA *ptr, const char *name, char *value)
{
PropertyRNA *prop= RNA_struct_find_property(ptr, name);
@@ -1958,8 +2113,8 @@ int RNA_property_is_set(PointerRNA *ptr, const char *name)
* compatible but can be used for display too*/
char *RNA_property_as_string(PointerRNA *ptr, PropertyRNA *prop)
{
- int type = RNA_property_type(ptr, prop);
- int len = RNA_property_array_length(ptr, prop);
+ int type = RNA_property_type(prop);
+ int len = RNA_property_array_length(prop);
int i;
DynStr *dynstr= BLI_dynstr_new();
@@ -1969,7 +2124,7 @@ char *RNA_property_as_string(PointerRNA *ptr, PropertyRNA *prop)
/* see if we can coorce into a python type - PropertyType */
switch (type) {
case PROP_BOOLEAN:
- if (len==0) {
+ if(len==0) {
BLI_dynstr_append(dynstr, RNA_property_boolean_get(ptr, prop) ? "True" : "False");
}
else {
@@ -1981,7 +2136,7 @@ char *RNA_property_as_string(PointerRNA *ptr, PropertyRNA *prop)
}
break;
case PROP_INT:
- if (len==0) {
+ if(len==0) {
BLI_dynstr_appendf(dynstr, "%d", RNA_property_int_get(ptr, prop));
}
else {
@@ -1993,7 +2148,7 @@ char *RNA_property_as_string(PointerRNA *ptr, PropertyRNA *prop)
}
break;
case PROP_FLOAT:
- if (len==0) {
+ if(len==0) {
BLI_dynstr_appendf(dynstr, "%g", RNA_property_float_get(ptr, prop));
}
else {
@@ -2019,7 +2174,7 @@ char *RNA_property_as_string(PointerRNA *ptr, PropertyRNA *prop)
const char *identifier;
int val = RNA_property_enum_get(ptr, prop);
- if (RNA_property_enum_identifier(ptr, prop, val, &identifier)) {
+ if(RNA_property_enum_identifier(ptr, prop, val, &identifier)) {
BLI_dynstr_appendf(dynstr, "'%s'", identifier);
}
else {
@@ -2045,3 +2200,540 @@ char *RNA_property_as_string(PointerRNA *ptr, PropertyRNA *prop)
return cstring;
}
+/* Function */
+
+const char *RNA_function_identifier(FunctionRNA *func)
+{
+ return func->identifier;
+}
+
+PropertyRNA *RNA_function_return(FunctionRNA *func)
+{
+ return func->ret;
+}
+
+const char *RNA_function_ui_description(FunctionRNA *func)
+{
+ return func->description;
+}
+
+int RNA_function_flag(FunctionRNA *func)
+{
+ return func->flag;
+}
+
+PropertyRNA *RNA_function_get_parameter(PointerRNA *ptr, FunctionRNA *func, int index)
+{
+ PropertyRNA *parm;
+ int i;
+
+ parm= func->cont.properties.first;
+ for(i= 0; parm; parm= parm->next, i++)
+ if(i==index)
+ return parm;
+
+ return NULL;
+}
+
+PropertyRNA *RNA_function_find_parameter(PointerRNA *ptr, FunctionRNA *func, const char *identifier)
+{
+ PropertyRNA *parm;
+
+ parm= func->cont.properties.first;
+ for(; parm; parm= parm->next)
+ if(strcmp(parm->identifier, identifier)==0)
+ return parm;
+
+ return NULL;
+}
+
+const struct ListBase *RNA_function_defined_parameters(FunctionRNA *func)
+{
+ return &func->cont.properties;
+}
+
+/* Utility */
+
+ParameterList *RNA_parameter_list_create(PointerRNA *ptr, FunctionRNA *func)
+{
+ ParameterList *parms;
+ PropertyRNA *parm;
+ int tot;
+
+ parms= MEM_callocN(sizeof(ParameterList), "ParameterList");
+
+ parm= func->cont.properties.first;
+ for(tot= 0; parm; parm= parm->next)
+ tot+= rna_parameter_size(parm);
+
+ parms->data= MEM_callocN(tot, "RNA_parameter_list_create");
+ parms->func= func;
+
+ return parms;
+}
+
+void RNA_parameter_list_free(ParameterList *parms)
+{
+ MEM_freeN(parms->data);
+
+ parms->func= NULL;
+
+ MEM_freeN(parms);
+}
+
+void RNA_parameter_list_begin(ParameterList *parms, ParameterIterator *iter)
+{
+ PropertyType ptype;
+
+ RNA_pointer_create(NULL, &RNA_Function, parms->func, &iter->funcptr);
+
+ iter->parms= parms;
+ iter->parm= parms->func->cont.properties.first;
+ iter->valid= iter->parm != NULL;
+ iter->offset= 0;
+
+ if(iter->valid) {
+ iter->size= rna_parameter_size(iter->parm);
+ iter->data= (((char*)iter->parms->data)+iter->offset);
+ ptype= RNA_property_type(iter->parm);
+ }
+}
+
+void RNA_parameter_list_next(ParameterIterator *iter)
+{
+ PropertyType ptype;
+
+ iter->offset+= iter->size;
+ iter->parm= iter->parm->next;
+ iter->valid= iter->parm != NULL;
+
+ if(iter->valid) {
+ iter->size= rna_parameter_size(iter->parm);
+ iter->data= (((char*)iter->parms->data)+iter->offset);
+ ptype= RNA_property_type(iter->parm);
+ }
+}
+
+void RNA_parameter_list_end(ParameterIterator *iter)
+{
+ /* nothing to do */
+}
+
+void RNA_parameter_get(ParameterList *parms, PropertyRNA *parm, void **value)
+{
+ ParameterIterator iter;
+
+ RNA_parameter_list_begin(parms, &iter);
+
+ for(; iter.valid; RNA_parameter_list_next(&iter))
+ if(iter.parm==parm)
+ break;
+
+ if(iter.valid)
+ *value= iter.data;
+ else
+ *value= NULL;
+
+ RNA_parameter_list_end(&iter);
+}
+
+void RNA_parameter_get_lookup(ParameterList *parms, const char *identifier, void **value)
+{
+ PropertyRNA *parm;
+
+ parm= parms->func->cont.properties.first;
+ for(; parm; parm= parm->next)
+ if(strcmp(RNA_property_identifier(parm), identifier)==0)
+ break;
+
+ if(parm)
+ RNA_parameter_get(parms, parm, value);
+}
+
+void RNA_parameter_set(ParameterList *parms, PropertyRNA *parm, void *value)
+{
+ ParameterIterator iter;
+
+ RNA_parameter_list_begin(parms, &iter);
+
+ for(; iter.valid; RNA_parameter_list_next(&iter))
+ if(iter.parm==parm)
+ break;
+
+ if(iter.valid)
+ memcpy(iter.data, value, iter.size);
+
+ RNA_parameter_list_end(&iter);
+}
+
+void RNA_parameter_set_lookup(ParameterList *parms, const char *identifier, void *value)
+{
+ PropertyRNA *parm;
+
+ parm= parms->func->cont.properties.first;
+ for(; parm; parm= parm->next)
+ if(strcmp(RNA_property_identifier(parm), identifier)==0)
+ break;
+
+ if(parm)
+ RNA_parameter_set(parms, parm, value);
+}
+
+int RNA_function_call(PointerRNA *ptr, FunctionRNA *func, ParameterList *parms)
+{
+ if(func->call) {
+ func->call(ptr, parms);
+
+ return 0;
+ }
+
+ return -1;
+}
+
+int RNA_function_call_lookup(PointerRNA *ptr, const char *identifier, ParameterList *parms)
+{
+ FunctionRNA *func;
+
+ func= RNA_struct_find_function(ptr, identifier);
+
+ if(func)
+ return RNA_function_call(ptr, func, parms);
+
+ return -1;
+}
+
+int RNA_function_call_direct(PointerRNA *ptr, FunctionRNA *func, const char *format, ...)
+{
+ va_list args;
+ int ret;
+
+ va_start(args, format);
+
+ ret= RNA_function_call_direct_va(ptr, func, format, args);
+
+ va_end(args);
+
+ return ret;
+}
+
+int RNA_function_call_direct_lookup(PointerRNA *ptr, const char *identifier, const char *format, ...)
+{
+ FunctionRNA *func;
+
+ func= RNA_struct_find_function(ptr, identifier);
+
+ if(func) {
+ va_list args;
+ int ret;
+
+ va_start(args, format);
+
+ ret= RNA_function_call_direct_va(ptr, func, format, args);
+
+ va_end(args);
+
+ return ret;
+ }
+
+ return -1;
+}
+
+static int rna_function_format_array_length(const char *format, int ofs, int flen)
+{
+ char lenbuf[16];
+ int idx= 0;
+
+ if (format[ofs++]=='[')
+ for (; ofs<flen && format[ofs]!=']' && idx<sizeof(*lenbuf)-1; idx++, ofs++)
+ lenbuf[idx]= format[ofs];
+
+ if (ofs<flen && format[ofs++]==']') {
+ /* XXX put better error reporting for ofs>=flen or idx over lenbuf capacity */
+ lenbuf[idx]= '\0';
+ return atoi(lenbuf);
+ }
+
+ return 0;
+}
+
+static int rna_function_parameter_parse(PointerRNA *ptr, PropertyRNA *prop, PropertyType type, char ftype, int len, void *dest, void *src, StructRNA *srna, const char *tid, const char *fid, const char *pid)
+{
+ /* ptr is always a function pointer, prop always a parameter */
+
+ switch (type) {
+ case PROP_BOOLEAN:
+ {
+ if (ftype!='b') {
+ fprintf(stderr, "%s.%s: wrong type for parameter %s, a boolean was expected\n", tid, fid, pid);
+ return -1;
+ }
+
+ if (len==0)
+ *((int*)dest)= *((int*)src);
+ else
+ memcpy(dest, src, len*sizeof(int));
+
+ break;
+ }
+ case PROP_INT:
+ {
+ if (ftype!='i') {
+ fprintf(stderr, "%s.%s: wrong type for parameter %s, an integer was expected\n", tid, fid, pid);
+ return -1;
+ }
+
+ if (len==0)
+ *((int*)dest)= *((int*)src);
+ else
+ memcpy(dest, src, len*sizeof(int));
+
+ break;
+ }
+ case PROP_FLOAT:
+ {
+ if (ftype!='f') {
+ fprintf(stderr, "%s.%s: wrong type for parameter %s, a float was expected\n", tid, fid, pid);
+ return -1;
+ }
+
+ if (len==0)
+ *((float*)dest)= *((float*)src);
+ else
+ memcpy(dest, src, len*sizeof(float));
+
+ break;
+ }
+ case PROP_STRING:
+ {
+ if (ftype!='s') {
+ fprintf(stderr, "%s.%s: wrong type for parameter %s, a string was expected\n", tid, fid, pid);
+ return -1;
+ }
+
+ *((char**)dest)= *((char**)src);
+
+ break;
+ }
+ case PROP_ENUM:
+ {
+ if (ftype!='e') {
+ fprintf(stderr, "%s.%s: wrong type for parameter %s, an enum was expected\n", tid, fid, pid);
+ return -1;
+ }
+
+ *((int*)dest)= *((int*)src);
+
+ break;
+ }
+ case PROP_POINTER:
+ {
+ StructRNA *ptype;
+
+ if (ftype!='O') {
+ fprintf(stderr, "%s.%s: wrong type for parameter %s, an object was expected\n", tid, fid, pid);
+ return -1;
+ }
+
+ ptype= RNA_property_pointer_type(prop);
+
+ if(ptype == &RNA_AnyType) {
+ *((PointerRNA*)dest)= *((PointerRNA*)src);
+ }
+ else if (ptype!=srna) {
+ if (!RNA_struct_is_a(srna, ptype)) {
+ fprintf(stderr, "%s.%s: wrong type for parameter %s, an object of type %s was expected, passed an object of type %s\n", tid, fid, pid, RNA_struct_identifier(ptype), RNA_struct_identifier(ptype));
+ return -1;
+ }
+
+ *((void**)dest)= *((void**)src);
+ }
+
+ break;
+ }
+ case PROP_COLLECTION:
+ {
+ /* XXX collections are not supported yet */
+ fprintf(stderr, "%s.%s: for parameter %s, collections are not supported yet\n", tid, fid, pid);
+ return -1;
+ }
+ default:
+ {
+ if (len==0)
+ fprintf(stderr, "%s.%s: unknown type for parameter %s\n", tid, fid, pid);
+ else
+ fprintf(stderr, "%s.%s: unknown array type for parameter %s\n", tid, fid, pid);
+
+ return -1;
+ }
+ }
+
+ return 0;
+}
+
+int RNA_function_call_direct_va(PointerRNA *ptr, FunctionRNA *func, const char *format, va_list args)
+{
+ PointerRNA funcptr;
+ ParameterList *parms;
+ ParameterIterator iter;
+ PropertyRNA *pret, *parm;
+ PropertyType type;
+ int i, ofs, flen, flag, len, alen, err= 0;
+ const char *tid, *fid, *pid=NULL;
+ char ftype;
+ void **retdata=NULL;
+
+ RNA_pointer_create(NULL, &RNA_Function, func, &funcptr);
+
+ tid= RNA_struct_identifier(ptr->type);
+ fid= RNA_function_identifier(func);
+ pret= RNA_function_return(func);
+ flen= strlen(format);
+
+ parms= RNA_parameter_list_create(ptr, func);
+ RNA_parameter_list_begin(parms, &iter);
+
+ for(i= 0, ofs= 0; iter.valid; RNA_parameter_list_next(&iter), i++) {
+ parm= iter.parm;
+
+ if(parm==pret) {
+ retdata= iter.data;
+ continue;
+ }
+
+ pid= RNA_property_identifier(parm);
+ flag= RNA_property_flag(parm);
+
+ if (ofs>=flen || format[ofs]=='N') {
+ if (flag & PROP_REQUIRED) {
+ err= -1;
+ fprintf(stderr, "%s.%s: missing required parameter %s\n", tid, fid, pid);
+ break;
+ }
+ ofs++;
+ continue;
+ }
+
+ type= RNA_property_type(parm);
+ ftype= format[ofs++];
+ len= RNA_property_array_length(parm);
+ alen= rna_function_format_array_length(format, ofs, flen);
+
+ if (len!=alen) {
+ err= -1;
+ fprintf(stderr, "%s.%s: for parameter %s, was expecting an array of %i elements, passed %i elements instead\n", tid, fid, pid, len, alen);
+ break;
+ }
+
+ switch (type) {
+ case PROP_BOOLEAN:
+ case PROP_INT:
+ case PROP_ENUM:
+ {
+ int arg= va_arg(args, int);
+ err= rna_function_parameter_parse(&funcptr, parm, type, ftype, len, iter.data, &arg, NULL, tid, fid, pid);
+ break;
+ }
+ case PROP_FLOAT:
+ {
+ double arg= va_arg(args, double);
+ err= rna_function_parameter_parse(&funcptr, parm, type, ftype, len, iter.data, &arg, NULL, tid, fid, pid);
+ break;
+ }
+ case PROP_STRING:
+ {
+ char *arg= va_arg(args, char*);
+ err= rna_function_parameter_parse(&funcptr, parm, type, ftype, len, iter.data, &arg, NULL, tid, fid, pid);
+ break;
+ }
+ case PROP_POINTER:
+ {
+ StructRNA *srna= va_arg(args, StructRNA*);
+ void *arg= va_arg(args, void*);
+ err= rna_function_parameter_parse(&funcptr, parm, type, ftype, len, iter.data, &arg, srna, tid, fid, pid);
+ break;
+ }
+ default:
+ {
+ /* handle errors */
+ err= rna_function_parameter_parse(&funcptr, parm, type, ftype, len, iter.data, NULL, NULL, tid, fid, pid);
+ break;
+ }
+ }
+
+ if (err!=0)
+ break;
+ }
+
+ if (err==0)
+ err= RNA_function_call(ptr, func, parms);
+
+ /* XXX throw error when more parameters than those needed are passed or leave silent? */
+ if (err==0 && pret && ofs<flen && format[ofs++]=='R') {
+ parm= pret;
+
+ type= RNA_property_type(parm);
+ ftype= format[ofs++];
+ len= RNA_property_array_length(parm);
+ alen= rna_function_format_array_length(format, ofs, flen);
+
+ if (len!=alen) {
+ err= -1;
+ fprintf(stderr, "%s.%s: for return parameter %s, was expecting an array of %i elements, passed %i elements instead\n", tid, fid, pid, len, alen);
+ }
+ else {
+ switch (type) {
+ case PROP_BOOLEAN:
+ case PROP_INT:
+ case PROP_ENUM:
+ {
+ int *arg= va_arg(args, int*);
+ err= rna_function_parameter_parse(&funcptr, parm, type, ftype, len, arg, retdata, NULL, tid, fid, pid);
+ break;
+ }
+ case PROP_FLOAT:
+ {
+ float *arg= va_arg(args, float*);
+ err= rna_function_parameter_parse(&funcptr, parm, type, ftype, len, arg, retdata, NULL, tid, fid, pid);
+ break;
+ }
+ case PROP_STRING:
+ {
+ char **arg= va_arg(args, char**);
+ err= rna_function_parameter_parse(&funcptr, parm, type, ftype, len, arg, retdata, NULL, tid, fid, pid);
+ break;
+ }
+ case PROP_POINTER:
+ {
+ StructRNA *srna= va_arg(args, StructRNA*);
+ void **arg= va_arg(args, void**);
+ err= rna_function_parameter_parse(&funcptr, parm, type, ftype, len, arg, retdata, srna, tid, fid, pid);
+ break;
+ }
+ default:
+ {
+ /* handle errors */
+ err= rna_function_parameter_parse(&funcptr, parm, type, ftype, len, NULL, NULL, NULL, tid, fid, pid);
+ break;
+ }
+ }
+ }
+ }
+
+ RNA_parameter_list_end(&iter);
+ RNA_parameter_list_free(parms);
+
+ return err;
+}
+
+int RNA_function_call_direct_va_lookup(PointerRNA *ptr, const char *identifier, const char *format, va_list args)
+{
+ FunctionRNA *func;
+
+ func= RNA_struct_find_function(ptr, identifier);
+
+ if(func)
+ return RNA_function_call_direct_va(ptr, func, format, args);
+
+ return 0;
+}
+
diff --git a/source/blender/makesrna/intern/rna_action.c b/source/blender/makesrna/intern/rna_action.c
index 6cb38ed9cdc..0a09462988b 100644
--- a/source/blender/makesrna/intern/rna_action.c
+++ b/source/blender/makesrna/intern/rna_action.c
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
- * Contributor(s): Blender Foundation (2008), Roland Hess
+ * Contributor(s): Blender Foundation (2008), Roland Hess, Joshua Leung
*
* ***** END GPL LICENSE BLOCK *****
*/
@@ -29,7 +29,6 @@
#include "rna_internal.h"
-#include "DNA_anim_types.h"
#include "DNA_action_types.h"
#include "DNA_scene_types.h"
@@ -37,180 +36,8 @@
#ifdef RNA_RUNTIME
-static void rna_Driver_RnaPath_get(PointerRNA *ptr, char *value)
-{
- ChannelDriver *driver= (ChannelDriver *)ptr->data;
-
- if (driver->rna_path)
- strcpy(value, driver->rna_path);
- else
- strcpy(value, "");
-}
-
-static int rna_Driver_RnaPath_length(PointerRNA *ptr)
-{
- ChannelDriver *driver= (ChannelDriver *)ptr->data;
-
- if (driver->rna_path)
- return strlen(driver->rna_path);
- else
- return 0;
-}
-
-#if 0
-static void rna_Driver_RnaPath_set(PointerRNA *ptr, const char *value)
-{
- ChannelDriver *driver= (ChannelDriver *)ptr->data;
-
- if (driver->rna_path)
- MEM_freeN(driver->rna_path);
-
- if (strlen(value))
- driver->rna_path= BLI_strdup(value);
- else
- driver->rna_path= NULL;
-}
-#endif
-
-static void rna_FCurve_RnaPath_get(PointerRNA *ptr, char *value)
-{
- FCurve *fcu= (FCurve *)ptr->data;
-
- if (fcu->rna_path)
- strcpy(value, fcu->rna_path);
- else
- strcpy(value, "");
-}
-
-static int rna_FCurve_RnaPath_length(PointerRNA *ptr)
-{
- FCurve *fcu= (FCurve *)ptr->data;
-
- if (fcu->rna_path)
- return strlen(fcu->rna_path);
- else
- return 0;
-}
-
-#if 0
-static void rna_FCurve_RnaPath_set(PointerRNA *ptr, const char *value)
-{
- FCurve *fcu= (FCurve *)ptr->data;
-
- if (fcu->rna_path)
- MEM_freeN(fcu->rna_path);
-
- if (strlen(value))
- fcu->rna_path= BLI_strdup(value);
- else
- fcu->rna_path= NULL;
-}
-#endif
-
#else
-// XXX maybe this should be in a separate file?
-void rna_def_channeldriver(BlenderRNA *brna)
-{
- StructRNA *srna;
- PropertyRNA *prop;
-
- static EnumPropertyItem prop_type_items[] = {
- {DRIVER_TYPE_CHANNEL, "NORMAL", "Normal", ""},
- {DRIVER_TYPE_PYTHON, "SCRIPTED", "Scripted Expression", ""},
- {DRIVER_TYPE_ROTDIFF, "ROTDIFF", "Rotational Difference", ""},
- {0, NULL, NULL, NULL}};
-
- srna= RNA_def_struct(brna, "ChannelDriver", NULL);
- RNA_def_struct_ui_text(srna, "Driver", "Driver for the value of a setting based on an external value.");
-
- /* Enums */
- prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
- RNA_def_property_enum_items(prop, prop_type_items);
- RNA_def_property_ui_text(prop, "Type", "Driver types.");
-
- /* String values */
- prop= RNA_def_property(srna, "expression", PROP_STRING, PROP_NONE);
- RNA_def_property_ui_text(prop, "Expression", "Expression to use for Scripted Expression.");
-
- /* Pointers */
- prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
- RNA_def_property_pointer_sdna(prop, NULL, "id");
- RNA_def_property_ui_text(prop, "Driver Object", "Object that controls this Driver.");
-
- prop= RNA_def_property(srna, "rna_path", PROP_STRING, PROP_NONE);
- RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- RNA_def_property_string_funcs(prop, "rna_Driver_RnaPath_get", "rna_Driver_RnaPath_length", "rna_Driver_RnaPath_set");
- RNA_def_property_ui_text(prop, "Driver RNA Path", "RNA Path (from Driver Object) to property used as Driver.");
-
- prop= RNA_def_property(srna, "array_index", PROP_INT, PROP_NONE);
- RNA_def_property_ui_text(prop, "Driver RNA Array Index", "Index to the specific property used as Driver if applicable.");
-}
-
-// XXX maybe this should be in a separate file?
-void rna_def_fcurve(BlenderRNA *brna)
-{
- StructRNA *srna;
- PropertyRNA *prop;
-
- static EnumPropertyItem prop_mode_extend_items[] = {
- {FCURVE_EXTRAPOLATE_CONSTANT, "CONSTANT", "Constant", ""},
- {FCURVE_EXTRAPOLATE_LINEAR, "LINEAR", "Linear", ""},
- {0, NULL, NULL, NULL}};
- static EnumPropertyItem prop_mode_color_items[] = {
- {FCURVE_COLOR_AUTO_RAINBOW, "AUTO_RAINBOW", "Automatic Rainbow", ""},
- {FCURVE_COLOR_AUTO_RGB, "AUTO_RGB", "Automatic XYZ to RGB", ""},
- {FCURVE_COLOR_CUSTOM, "CUSTOM", "User Defined", ""},
- {0, NULL, NULL, NULL}};
-
- srna= RNA_def_struct(brna, "FCurve", NULL);
- RNA_def_struct_ui_text(srna, "F-Curve", "F-Curve defining values of a period of time.");
-
- /* Enums */
- prop= RNA_def_property(srna, "extrapolation", PROP_ENUM, PROP_NONE);
- RNA_def_property_enum_sdna(prop, NULL, "extend");
- RNA_def_property_enum_items(prop, prop_mode_extend_items);
- RNA_def_property_ui_text(prop, "Extrapolation", "");
-
- /* Pointers */
- prop= RNA_def_property(srna, "driver", PROP_POINTER, PROP_NONE);
- RNA_def_property_clear_flag(prop, PROP_EDITABLE); // xxx?
- RNA_def_property_ui_text(prop, "Driver", "Channel Driver (only set for Driver F-Curves)");
-
- /* Path + Array Index */
- prop= RNA_def_property(srna, "rna_path", PROP_STRING, PROP_NONE);
- RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- RNA_def_property_string_funcs(prop, "rna_FCurve_RnaPath_get", "rna_FCurve_RnaPath_length", "rna_FCurve_RnaPath_set");
- RNA_def_property_ui_text(prop, "RNA Path", "RNA Path to property affected by F-Curve.");
-
- prop= RNA_def_property(srna, "array_index", PROP_INT, PROP_NONE);
- RNA_def_property_ui_text(prop, "RNA Array Index", "Index to the specific property affected by F-Curve if applicable.");
-
- /* Color */
- prop= RNA_def_property(srna, "color_mode", PROP_ENUM, PROP_NONE);
- RNA_def_property_enum_items(prop, prop_mode_color_items);
- RNA_def_property_ui_text(prop, "Color Mode", "Method used to determine color of F-Curve in Graph Editor.");
-
- prop= RNA_def_property(srna, "color", PROP_FLOAT, PROP_COLOR);
- RNA_def_property_array(prop, 3);
- RNA_def_property_ui_text(prop, "Color", "Color of the F-Curve in the Graph Editor.");
-
- /* Collections */
- prop= RNA_def_property(srna, "sampled_points", PROP_COLLECTION, PROP_NONE);
- RNA_def_property_collection_sdna(prop, NULL, "fpt", "totvert");
- RNA_def_property_struct_type(prop, "CurvePoint");
- RNA_def_property_ui_text(prop, "Sampled Points", "Sampled animation data");
-
- prop= RNA_def_property(srna, "keyframe_points", PROP_COLLECTION, PROP_NONE);
- RNA_def_property_collection_sdna(prop, NULL, "bezt", "totvert");
- RNA_def_property_struct_type(prop, "BezierCurvePoint");
- RNA_def_property_ui_text(prop, "Keyframes", "User-editable keyframes");
-
- // XXX to add modifiers...
-}
-
-/* --- */
-
void rna_def_action_group(BlenderRNA *brna)
{
StructRNA *srna;
@@ -280,10 +107,6 @@ void RNA_def_action(BlenderRNA *brna)
{
rna_def_action(brna);
rna_def_action_group(brna);
-
- // should these be in their own file, or is that overkill?
- rna_def_fcurve(brna);
- rna_def_channeldriver(brna);
}
diff --git a/source/blender/makesrna/intern/rna_animation.c b/source/blender/makesrna/intern/rna_animation.c
index 160c0294f7f..702dc9fa65d 100644
--- a/source/blender/makesrna/intern/rna_animation.c
+++ b/source/blender/makesrna/intern/rna_animation.c
@@ -57,20 +57,18 @@ static int rna_ksPath_RnaPath_length(PointerRNA *ptr)
return 0;
}
-#if 0
static void rna_ksPath_RnaPath_set(PointerRNA *ptr, const char *value)
{
KS_Path *ksp= (KS_Path *)ptr->data;
if (ksp->rna_path)
- MEM_freeN(ksp->ksp_path);
+ MEM_freeN(ksp->rna_path);
if (strlen(value))
ksp->rna_path= BLI_strdup(value);
else
ksp->rna_path= NULL;
}
-#endif
#else
@@ -84,6 +82,7 @@ void rna_def_keyingset_path(BlenderRNA *brna)
{KSP_GROUP_NAMED, "NAMED", "Named Group", ""},
{KSP_GROUP_NONE, "NONE", "None", ""},
{KSP_GROUP_KSNAME, "KEYINGSET", "Keying Set Name", ""},
+ {KSP_GROUP_TEMPLATE_ITEM, "TEMPLATE", "Innermost Context-Item Name", ""},
{0, NULL, NULL, NULL}};
srna= RNA_def_struct(brna, "KeyingSetPath", NULL);
@@ -106,11 +105,12 @@ void rna_def_keyingset_path(BlenderRNA *brna)
/* Path + Array Index */
prop= RNA_def_property(srna, "rna_path", PROP_STRING, PROP_NONE);
- RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ //RNA_def_property_clear_flag(prop, PROP_EDITABLE); // XXX for now editable
RNA_def_property_string_funcs(prop, "rna_ksPath_RnaPath_get", "rna_ksPath_RnaPath_length", "rna_ksPath_RnaPath_set");
RNA_def_property_ui_text(prop, "RNA Path", "RNA Path to property setting.");
prop= RNA_def_property(srna, "array_index", PROP_INT, PROP_NONE);
+ //RNA_def_property_clear_flag(prop, PROP_EDITABLE); // XXX for now editable
RNA_def_property_ui_text(prop, "RNA Array Index", "Index to the specific setting if applicable.");
/* Flags */
diff --git a/source/blender/makesrna/intern/rna_armature.c b/source/blender/makesrna/intern/rna_armature.c
index a76dc2f0972..c7f7b8cfebc 100644
--- a/source/blender/makesrna/intern/rna_armature.c
+++ b/source/blender/makesrna/intern/rna_armature.c
@@ -165,8 +165,8 @@ static void rna_def_bone(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Active", "Bone was the last bone clicked on (most operations are applied to only this bone)");
prop= RNA_def_property(srna, "hinge", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_HINGE);
- RNA_def_property_ui_text(prop, "Hinge", "Bone doesn't inherit rotation or scale from parent bone.");
+ RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", BONE_HINGE);
+ RNA_def_property_ui_text(prop, "Inherit Rotation", "Bone doesn't inherit rotation or scale from parent bone.");
prop= RNA_def_property(srna, "editmode_hidden", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_HIDDEN_A);
@@ -182,7 +182,7 @@ static void rna_def_bone(BlenderRNA *brna)
prop= RNA_def_property(srna, "inherit_scale", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", BONE_NO_SCALE);
- RNA_def_property_ui_text(prop, "Inherit scale", "Bone inherits scaling from parent bone.");
+ RNA_def_property_ui_text(prop, "Inherit Scale", "Bone inherits scaling from parent bone.");
prop= RNA_def_property(srna, "draw_wire", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_DRAWWIRE);
@@ -403,7 +403,7 @@ void rna_def_armature(BlenderRNA *brna)
/* bone path settings */
prop= RNA_def_property(srna, "path_size", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "pathsize");
- RNA_def_property_range(prop, 0, 100);
+ RNA_def_property_range(prop, 1, 100);
RNA_def_property_ui_text(prop, "Bone Paths Frame Step", "Number of frames between 'dots' on Bone Paths (when drawing).");
prop= RNA_def_property(srna, "path_start_frame", PROP_INT, PROP_NONE);
diff --git a/source/blender/makesrna/intern/rna_camera.c b/source/blender/makesrna/intern/rna_camera.c
index c884bad3353..3b1bb3b0785 100644
--- a/source/blender/makesrna/intern/rna_camera.c
+++ b/source/blender/makesrna/intern/rna_camera.c
@@ -57,7 +57,8 @@ void RNA_def_camera(BlenderRNA *brna)
prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_items(prop, prop_type_items);
RNA_def_property_ui_text(prop, "Type", "Camera types.");
-
+ RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
+
/* Number values */
prop= RNA_def_property(srna, "passepartout_alpha", PROP_FLOAT, PROP_NONE);
diff --git a/source/blender/makesrna/intern/rna_cloth.c b/source/blender/makesrna/intern/rna_cloth.c
index 94537eecba9..919ae210801 100644
--- a/source/blender/makesrna/intern/rna_cloth.c
+++ b/source/blender/makesrna/intern/rna_cloth.c
@@ -196,7 +196,7 @@ static void rna_def_cloth_sim_settings(BlenderRNA *brna)
prop= RNA_def_property(srna, "pin_stiffness", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "goalspring");
- RNA_def_property_range(prop, 0.0f, 0.50);
+ RNA_def_property_range(prop, 0.0f, 50.0);
RNA_def_property_ui_text(prop, "Pin Stiffness", "Pin (vertex target position) spring stiffness.");
prop= RNA_def_property(srna, "quality", PROP_INT, PROP_NONE);
diff --git a/source/blender/makesrna/intern/rna_context.c b/source/blender/makesrna/intern/rna_context.c
index d3089917649..e45319a42a6 100644
--- a/source/blender/makesrna/intern/rna_context.c
+++ b/source/blender/makesrna/intern/rna_context.c
@@ -37,31 +37,31 @@
static PointerRNA rna_Context_manager_get(PointerRNA *ptr)
{
bContext *C= (bContext*)ptr->data;
- return rna_pointer_inherit_refine(ptr, &RNA_Region, CTX_wm_manager(C));
+ return rna_pointer_inherit_refine(ptr, &RNA_WindowManager, CTX_wm_manager(C));
}
/*static PointerRNA rna_Context_window_get(PointerRNA *ptr)
{
bContext *C= (bContext*)ptr->data;
- return rna_pointer_inherit_refine(ptr, &RNA_Region, CTX_wm_window(C));
+ return rna_pointer_inherit_refine(ptr, &RNA_Window, CTX_wm_window(C));
}*/
static PointerRNA rna_Context_screen_get(PointerRNA *ptr)
{
bContext *C= (bContext*)ptr->data;
- return rna_pointer_inherit_refine(ptr, &RNA_Region, CTX_wm_screen(C));
+ return rna_pointer_inherit_refine(ptr, &RNA_Screen, CTX_wm_screen(C));
}
static PointerRNA rna_Context_area_get(PointerRNA *ptr)
{
bContext *C= (bContext*)ptr->data;
- return rna_pointer_inherit_refine(ptr, &RNA_Region, CTX_wm_area(C));
+ return rna_pointer_inherit_refine(ptr, &RNA_Area, CTX_wm_area(C));
}
static PointerRNA rna_Context_space_data_get(PointerRNA *ptr)
{
bContext *C= (bContext*)ptr->data;
- return rna_pointer_inherit_refine(ptr, &RNA_Region, CTX_wm_space_data(C));
+ return rna_pointer_inherit_refine(ptr, &RNA_Space, CTX_wm_space_data(C));
}
static PointerRNA rna_Context_region_get(PointerRNA *ptr)
@@ -73,7 +73,7 @@ static PointerRNA rna_Context_region_get(PointerRNA *ptr)
/*static PointerRNA rna_Context_region_data_get(PointerRNA *ptr)
{
bContext *C= (bContext*)ptr->data;
- return rna_pointer_inherit_refine(ptr, &RNA_Region, CTX_wm_region_data(C));
+ return rna_pointer_inherit_refine(ptr, &RNA_RegionData, CTX_wm_region_data(C));
}*/
static PointerRNA rna_Context_main_get(PointerRNA *ptr)
@@ -97,6 +97,7 @@ void RNA_def_context(BlenderRNA *brna)
srna= RNA_def_struct(brna, "Context", NULL);
RNA_def_struct_ui_text(srna, "Context", "Current windowmanager and data context.");
+ RNA_def_struct_sdna(srna, "bContext");
/* WM */
prop= RNA_def_property(srna, "manager", PROP_POINTER, PROP_NONE);
diff --git a/source/blender/makesrna/intern/rna_curve.c b/source/blender/makesrna/intern/rna_curve.c
index dd1c620fe45..718f7d935f9 100644
--- a/source/blender/makesrna/intern/rna_curve.c
+++ b/source/blender/makesrna/intern/rna_curve.c
@@ -32,6 +32,19 @@
#include "DNA_curve_types.h"
#include "DNA_material_types.h"
+EnumPropertyItem beztriple_handle_type_items[] = {
+ {HD_FREE, "FREE", "Free", ""},
+ {HD_AUTO, "AUTO", "Auto", ""},
+ {HD_VECT, "VECTOR", "Vector", ""},
+ {HD_ALIGN, "ALIGNED", "Aligned", ""},
+ {HD_AUTO_ANIM, "AUTO_CLAMPED", "Auto Clamped", ""},
+ {0, NULL, NULL, NULL}};
+EnumPropertyItem beztriple_interpolation_mode_items[] = {
+ {BEZT_IPO_CONST, "CONSTANT", "Constant", ""},
+ {BEZT_IPO_LIN, "LINEAR", "Linear", ""},
+ {BEZT_IPO_BEZ, "BEZIER", "Bezier", ""},
+ {0, NULL, NULL, NULL}};
+
#ifdef RNA_RUNTIME
static void rna_BezTriple_handle1_get(PointerRNA *ptr, float *values)
@@ -160,18 +173,6 @@ static void rna_def_beztriple(BlenderRNA *brna)
{
StructRNA *srna;
PropertyRNA *prop;
- static EnumPropertyItem prop_handle_type_items[] = {
- {HD_FREE, "FREE", "Free", ""},
- {HD_AUTO, "AUTO", "Auto", ""},
- {HD_VECT, "VECTOR", "Vector", ""},
- {HD_ALIGN, "ALIGNED", "Aligned", ""},
- {HD_AUTO_ANIM, "AUTO_CLAMPED", "Auto Clamped", ""},
- {0, NULL, NULL, NULL}};
- static EnumPropertyItem prop_mode_interpolation_items[] = {
- {BEZT_IPO_CONST, "CONSTANT", "Constant", ""},
- {BEZT_IPO_LIN, "LINEAR", "Linear", ""},
- {BEZT_IPO_BEZ, "BEZIER", "Bezier", ""},
- {0, NULL, NULL, NULL}};
srna= RNA_def_struct(brna, "BezierCurvePoint", NULL);
RNA_def_struct_sdna(srna, "BezTriple");
@@ -197,18 +198,18 @@ static void rna_def_beztriple(BlenderRNA *brna)
/* Enums */
prop= RNA_def_property(srna, "handle1_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "h1");
- RNA_def_property_enum_items(prop, prop_handle_type_items);
+ RNA_def_property_enum_items(prop, beztriple_handle_type_items);
RNA_def_property_ui_text(prop, "Handle 1 Type", "Handle types");
prop= RNA_def_property(srna, "handle2_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "h2");
- RNA_def_property_enum_items(prop, prop_handle_type_items);
+ RNA_def_property_enum_items(prop, beztriple_handle_type_items);
RNA_def_property_ui_text(prop, "Handle 2 Type", "Handle types");
prop= RNA_def_property(srna, "interpolation", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "ipo");
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- RNA_def_property_enum_items(prop, prop_mode_interpolation_items);
+ RNA_def_property_enum_items(prop, beztriple_interpolation_mode_items);
RNA_def_property_ui_text(prop, "Interpolation", "(For F-Curves Only) Interpolation to use for segment of curve starting from current BezTriple.");
/* Vector values */
@@ -290,6 +291,19 @@ static void rna_def_font(BlenderRNA *brna, StructRNA *srna)
{
PropertyRNA *prop;
+ static EnumPropertyItem prop_align_items[] = {
+ {CU_LEFT, "LEFT", "Left", "Align text to the left"},
+ {CU_MIDDLE, "CENTRAL", "Center", "Center text"},
+ {CU_RIGHT, "RIGHT", "Right", "Align text to the right"},
+ {CU_JUSTIFY, "JUSTIFY", "Justify", "Align to the left and the right"},
+ {CU_FLUSH, "FLUSH", "Flush", "Align to the left and the right, with equal character spacing"},
+ {0, NULL, NULL, NULL}};
+
+ /* Enums */
+ prop= RNA_def_property(srna, "spacemode", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_items(prop, prop_align_items);
+ RNA_def_property_ui_text(prop, "Text Align", "Text align from the object center.");
+
/* number values */
prop= RNA_def_property(srna, "text_size", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "fsize");
@@ -374,26 +388,6 @@ static void rna_def_font(BlenderRNA *brna, StructRNA *srna)
prop= RNA_def_property(srna, "fast", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CU_FAST);
RNA_def_property_ui_text(prop, "Fast", "Don't fill polygons while editing.");
-
- prop= RNA_def_property(srna, "left_align", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "spacemode", CU_LEFT);
- RNA_def_property_ui_text(prop, "Left Align", "Left align the text from the object center.");
-
- prop= RNA_def_property(srna, "middle_align", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "spacemode", CU_MIDDLE);
- RNA_def_property_ui_text(prop, "Middle Align", "Middle align the text from the object center.");
-
- prop= RNA_def_property(srna, "right_align", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "spacemode", CU_RIGHT);
- RNA_def_property_ui_text(prop, "Right Align", "Right align the text from the object center.");
-
- prop= RNA_def_property(srna, "justify", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "spacemode", CU_JUSTIFY);
- RNA_def_property_ui_text(prop, "Justify", "Fill complete lines to maximum textframe width.");
-
- prop= RNA_def_property(srna, "flush", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "spacemode", CU_FLUSH);
- RNA_def_property_ui_text(prop, "Left Align", "Fill every line to maximum textframe width distributing space among all characters.");
}
void rna_def_textbox(BlenderRNA *brna)
diff --git a/source/blender/makesrna/intern/rna_define.c b/source/blender/makesrna/intern/rna_define.c
index 15486efc9d0..a29f6c06b17 100644
--- a/source/blender/makesrna/intern/rna_define.c
+++ b/source/blender/makesrna/intern/rna_define.c
@@ -92,6 +92,158 @@ void rna_freelistN(ListBase *listbase)
listbase->first= listbase->last= NULL;
}
+StructDefRNA *rna_find_struct_def(StructRNA *srna)
+{
+ StructDefRNA *dsrna;
+
+ if(!DefRNA.preprocess) {
+ /* we should never get here */
+ fprintf(stderr, "rna_find_struct_def: only at preprocess time.\n");
+ return NULL;
+ }
+
+ dsrna= DefRNA.structs.last;
+ for (; dsrna; dsrna= dsrna->cont.prev)
+ if (dsrna->srna==srna)
+ return dsrna;
+
+ return NULL;
+}
+
+PropertyDefRNA *rna_find_struct_property_def(PropertyRNA *prop)
+{
+ StructDefRNA *dsrna;
+ PropertyDefRNA *dprop;
+
+ if(!DefRNA.preprocess) {
+ /* we should never get here */
+ fprintf(stderr, "rna_find_property_def: only at preprocess time.\n");
+ return NULL;
+ }
+
+ dsrna= rna_find_struct_def(DefRNA.laststruct);
+ dprop= dsrna->cont.properties.last;
+ for (; dprop; dprop= dprop->prev)
+ if (dprop->prop==prop)
+ return dprop;
+
+ dsrna= DefRNA.structs.last;
+ for (; dsrna; dsrna= dsrna->cont.prev) {
+ dprop= dsrna->cont.properties.last;
+ for (; dprop; dprop= dprop->prev)
+ if (dprop->prop==prop)
+ return dprop;
+ }
+
+ return NULL;
+}
+
+PropertyDefRNA *rna_find_property_def(PropertyRNA *prop)
+{
+ PropertyDefRNA *dprop;
+
+ if(!DefRNA.preprocess) {
+ /* we should never get here */
+ fprintf(stderr, "rna_find_property_def: only at preprocess time.\n");
+ return NULL;
+ }
+
+ dprop= rna_find_struct_property_def(prop);
+ if (dprop)
+ return dprop;
+
+ dprop= rna_find_parameter_def(prop);
+ if (dprop)
+ return dprop;
+
+ return NULL;
+}
+
+FunctionDefRNA *rna_find_function_def(FunctionRNA *func)
+{
+ StructDefRNA *dsrna;
+ FunctionDefRNA *dfunc;
+
+ if(!DefRNA.preprocess) {
+ /* we should never get here */
+ fprintf(stderr, "rna_find_function_def: only at preprocess time.\n");
+ return NULL;
+ }
+
+ dsrna= rna_find_struct_def(DefRNA.laststruct);
+ dfunc= dsrna->functions.last;
+ for (; dfunc; dfunc= dfunc->cont.prev)
+ if (dfunc->func==func)
+ return dfunc;
+
+ dsrna= DefRNA.structs.last;
+ for (; dsrna; dsrna= dsrna->cont.prev) {
+ dfunc= dsrna->functions.last;
+ for (; dfunc; dfunc= dfunc->cont.prev)
+ if (dfunc->func==func)
+ return dfunc;
+ }
+
+ return NULL;
+}
+
+PropertyDefRNA *rna_find_parameter_def(PropertyRNA *parm)
+{
+ StructDefRNA *dsrna;
+ FunctionDefRNA *dfunc;
+ PropertyDefRNA *dparm;
+
+ if(!DefRNA.preprocess) {
+ /* we should never get here */
+ fprintf(stderr, "rna_find_parameter_def: only at preprocess time.\n");
+ return NULL;
+ }
+
+ dsrna= rna_find_struct_def(DefRNA.laststruct);
+ dfunc= dsrna->functions.last;
+ for (; dfunc; dfunc= dfunc->cont.prev) {
+ dparm= dfunc->cont.properties.last;
+ for (; dparm; dparm= dparm->prev)
+ if (dparm->prop==parm)
+ return dparm;
+ }
+
+ dsrna= DefRNA.structs.last;
+ for (; dsrna; dsrna= dsrna->cont.prev) {
+ dfunc= dsrna->functions.last;
+ for (; dfunc; dfunc= dfunc->cont.prev) {
+ dparm= dfunc->cont.properties.last;
+ for (; dparm; dparm= dparm->prev)
+ if (dparm->prop==parm)
+ return dparm;
+ }
+ }
+
+ return NULL;
+}
+
+ContainerDefRNA *rna_find_container_def(ContainerRNA *cont)
+{
+ StructDefRNA *ds;
+ FunctionDefRNA *dfunc;
+
+ if(!DefRNA.preprocess) {
+ /* we should never get here */
+ fprintf(stderr, "rna_find_container_def: only at preprocess time.\n");
+ return NULL;
+ }
+
+ ds= rna_find_struct_def((StructRNA*)cont);
+ if(ds)
+ return &ds->cont;
+
+ dfunc= rna_find_function_def((FunctionRNA*)cont);
+ if(dfunc)
+ return &dfunc->cont;
+
+ return NULL;
+}
+
/* DNA utility function for looking up members */
typedef struct DNAStructMember {
@@ -159,12 +311,26 @@ static int rna_find_sdna_member(SDNA *sdna, const char *structname, const char *
return 1;
}
else if(cmp == 2) {
+ smember->type= "";
+ smember->name= dnaname;
+ smember->pointerlevel= 0;
+ smember->arraylength= 0;
+
membername= strstr(membername, ".") + strlen(".");
- return rna_find_sdna_member(sdna, sdna->types[sp[0]], membername, smember);
+ rna_find_sdna_member(sdna, sdna->types[sp[0]], membername, smember);
+
+ return 1;
}
else if(cmp == 3) {
+ smember->type= "";
+ smember->name= dnaname;
+ smember->pointerlevel= 0;
+ smember->arraylength= 0;
+
membername= strstr(membername, "->") + strlen("->");
- return rna_find_sdna_member(sdna, sdna->types[sp[0]], membername, smember);
+ rna_find_sdna_member(sdna, sdna->types[sp[0]], membername, smember);
+
+ return 1;
}
}
@@ -244,15 +410,21 @@ BlenderRNA *RNA_create()
void RNA_define_free(BlenderRNA *brna)
{
- StructDefRNA *srna;
+ StructDefRNA *ds;
+ FunctionDefRNA *dfunc;
AllocDefRNA *alloc;
for(alloc=DefRNA.allocs.first; alloc; alloc=alloc->next)
MEM_freeN(alloc->mem);
rna_freelistN(&DefRNA.allocs);
- for(srna=DefRNA.structs.first; srna; srna=srna->next)
- rna_freelistN(&srna->properties);
+ for(ds=DefRNA.structs.first; ds; ds=ds->cont.next) {
+ for (dfunc= ds->functions.first; dfunc; dfunc= dfunc->cont.next)
+ rna_freelistN(&dfunc->cont.properties);
+
+ rna_freelistN(&ds->cont.properties);
+ rna_freelistN(&ds->functions);
+ }
rna_freelistN(&DefRNA.structs);
@@ -264,16 +436,53 @@ void RNA_define_free(BlenderRNA *brna)
DefRNA.error= 0;
}
+void RNA_struct_free(BlenderRNA *brna, StructRNA *srna)
+{
+ FunctionRNA *func, *nextfunc;
+ PropertyRNA *prop, *nextprop;
+ PropertyRNA *parm, *nextparm;
+
+ for(prop=srna->cont.properties.first; prop; prop=nextprop) {
+ nextprop= prop->next;
+
+ if(prop->flag & PROP_RUNTIME)
+ rna_freelinkN(&srna->cont.properties, prop);
+ }
+
+ for(func=srna->functions.first; func; func=nextfunc) {
+ nextfunc= func->cont.next;
+
+ for(parm=func->cont.properties.first; parm; parm=nextparm) {
+ nextparm= parm->next;
+
+ if(parm->flag & PROP_RUNTIME)
+ rna_freelinkN(&func->cont.properties, parm);
+ }
+
+ if(func->flag & FUNC_RUNTIME) {
+ rna_freelinkN(&srna->functions, func);
+ }
+ }
+
+ if(srna->flag & STRUCT_RUNTIME)
+ rna_freelinkN(&brna->structs, srna);
+}
+
void RNA_free(BlenderRNA *brna)
{
StructRNA *srna, *nextsrna;
- PropertyRNA *prop, *nextprop;
+ FunctionRNA *func;
if(DefRNA.preprocess) {
RNA_define_free(brna);
- for(srna=brna->structs.first; srna; srna=srna->next)
- rna_freelistN(&srna->properties);
+ for(srna=brna->structs.first; srna; srna=srna->cont.next) {
+ for (func= srna->functions.first; func; func= func->cont.next)
+ rna_freelistN(&func->cont.properties);
+
+ rna_freelistN(&srna->cont.properties);
+ rna_freelistN(&srna->functions);
+ }
rna_freelistN(&brna->structs);
@@ -281,17 +490,8 @@ void RNA_free(BlenderRNA *brna)
}
else {
for(srna=brna->structs.first; srna; srna=nextsrna) {
- nextsrna= srna->next;
-
- for(prop=srna->properties.first; prop; prop=nextprop) {
- nextprop= prop->next;
-
- if(prop->flag & PROP_RUNTIME)
- rna_freelinkN(&srna->properties, prop);
- }
-
- if(srna->flag & STRUCT_RUNTIME)
- rna_freelinkN(&brna->structs, srna);
+ nextsrna= srna->cont.next;
+ RNA_struct_free(brna, srna);
}
}
}
@@ -314,7 +514,7 @@ static StructDefRNA *rna_find_def_struct(StructRNA *srna)
{
StructDefRNA *ds;
- for(ds=DefRNA.structs.first; ds; ds=ds->next)
+ for(ds=DefRNA.structs.first; ds; ds=ds->cont.next)
if(ds->srna == srna)
return ds;
@@ -340,7 +540,7 @@ StructRNA *RNA_def_struct(BlenderRNA *brna, const char *identifier, const char *
if(from) {
/* find struct to derive from */
- for(srnafrom= brna->structs.first; srnafrom; srnafrom=srnafrom->next)
+ for(srnafrom= brna->structs.first; srnafrom; srnafrom=srnafrom->cont.next)
if(strcmp(srnafrom->identifier, from) == 0)
break;
@@ -357,7 +557,8 @@ StructRNA *RNA_def_struct(BlenderRNA *brna, const char *identifier, const char *
/* copy from struct to derive stuff, a bit clumsy since we can't
* use MEM_dupallocN, data structs may not be alloced but builtin */
memcpy(srna, srnafrom, sizeof(StructRNA));
- srna->properties.first= srna->properties.last= NULL;
+ srna->cont.properties.first= srna->cont.properties.last= NULL;
+ srna->functions.first= srna->functions.last= NULL;
if(DefRNA.preprocess) {
srna->base= srnafrom;
@@ -394,7 +595,7 @@ StructRNA *RNA_def_struct(BlenderRNA *brna, const char *identifier, const char *
}
else {
/* define some builtin properties */
- prop= RNA_def_property(srna, "rna_properties", PROP_COLLECTION, PROP_NONE);
+ prop= RNA_def_property(&srna->cont, "rna_properties", PROP_COLLECTION, PROP_NONE);
RNA_def_property_flag(prop, PROP_BUILTIN);
RNA_def_property_ui_text(prop, "Properties", "RNA property collection.");
@@ -412,7 +613,7 @@ StructRNA *RNA_def_struct(BlenderRNA *brna, const char *identifier, const char *
#endif
}
- prop= RNA_def_property(srna, "rna_type", PROP_POINTER, PROP_NONE);
+ prop= RNA_def_property(&srna->cont, "rna_type", PROP_POINTER, PROP_NONE);
RNA_def_property_ui_text(prop, "RNA", "RNA type definition.");
if(DefRNA.preprocess) {
@@ -433,13 +634,15 @@ StructRNA *RNA_def_struct(BlenderRNA *brna, const char *identifier, const char *
void RNA_def_struct_sdna(StructRNA *srna, const char *structname)
{
- StructDefRNA *ds= DefRNA.structs.last;
+ StructDefRNA *ds;
if(!DefRNA.preprocess) {
fprintf(stderr, "RNA_def_struct_sdna: only during preprocessing.\n");
return;
}
+ ds= rna_find_def_struct(srna);
+
if(!DNA_struct_find_nr(DefRNA.sdna, structname)) {
if(!DefRNA.silent) {
fprintf(stderr, "RNA_def_struct_sdna: %s not found.\n", structname);
@@ -453,13 +656,15 @@ void RNA_def_struct_sdna(StructRNA *srna, const char *structname)
void RNA_def_struct_sdna_from(StructRNA *srna, const char *structname, const char *propname)
{
- StructDefRNA *ds= DefRNA.structs.last;
+ StructDefRNA *ds;
if(!DefRNA.preprocess) {
fprintf(stderr, "RNA_def_struct_sdna_from: only during preprocessing.\n");
return;
}
+ ds= rna_find_def_struct(srna);
+
if(!ds->dnaname) {
fprintf(stderr, "RNA_def_struct_sdna_from: %s base struct must know DNA already.\n", structname);
return;
@@ -492,7 +697,7 @@ void RNA_def_struct_nested(BlenderRNA *brna, StructRNA *srna, const char *struct
StructRNA *srnafrom;
/* find struct to derive from */
- for(srnafrom= brna->structs.first; srnafrom; srnafrom=srnafrom->next)
+ for(srnafrom= brna->structs.first; srnafrom; srnafrom=srnafrom->cont.next)
if(strcmp(srnafrom->identifier, structname) == 0)
break;
@@ -519,6 +724,27 @@ void RNA_def_struct_refine_func(StructRNA *srna, const char *refine)
if(refine) srna->refine= (StructRefineFunc)refine;
}
+void RNA_def_struct_idproperties_func(StructRNA *srna, const char *idproperties)
+{
+ if(!DefRNA.preprocess) {
+ fprintf(stderr, "RNA_def_struct_idproperties_func: only during preprocessing.\n");
+ return;
+ }
+
+ if(idproperties) srna->idproperties= (IDPropertiesFunc)idproperties;
+}
+
+void RNA_def_struct_register_funcs(StructRNA *srna, const char *reg, const char *unreg)
+{
+ if(!DefRNA.preprocess) {
+ fprintf(stderr, "RNA_def_struct_register_funcs: only during preprocessing.\n");
+ return;
+ }
+
+ if(reg) srna->reg= (StructRegisterFunc)reg;
+ if(unreg) srna->unreg= (StructUnregisterFunc)unreg;
+}
+
void RNA_def_struct_path_func(StructRNA *srna, const char *path)
{
if(!DefRNA.preprocess) {
@@ -545,18 +771,14 @@ void RNA_def_struct_ui_text(StructRNA *srna, const char *name, const char *descr
srna->description= description;
}
-void RNA_struct_free(BlenderRNA *brna, StructRNA *srna)
-{
- rna_freelistN(&srna->properties);
- rna_freelinkN(&brna->structs, srna);
-}
-
/* Property Definition */
-PropertyRNA *RNA_def_property(StructRNA *srna, const char *identifier, int type, int subtype)
+PropertyRNA *RNA_def_property(StructOrFunctionRNA *cont_, const char *identifier, int type, int subtype)
{
- StructDefRNA *ds;
- PropertyDefRNA *dp= NULL;
+ StructRNA *srna= DefRNA.laststruct;
+ ContainerRNA *cont= cont_;
+ ContainerDefRNA *dcont;
+ PropertyDefRNA *dprop= NULL;
PropertyRNA *prop;
if(DefRNA.preprocess) {
@@ -567,9 +789,9 @@ PropertyRNA *RNA_def_property(StructRNA *srna, const char *identifier, int type,
DefRNA.error= 1;
}
- ds= DefRNA.structs.last;
- dp= MEM_callocN(sizeof(PropertyDefRNA), "PropertyDefRNA");
- rna_addtail(&ds->properties, dp);
+ dcont= rna_find_container_def(cont);
+ dprop= MEM_callocN(sizeof(PropertyDefRNA), "PropertyDefRNA");
+ rna_addtail(&dcont->properties, dprop);
}
prop= MEM_callocN(rna_property_type_sizeof(type), "PropertyRNA");
@@ -628,8 +850,8 @@ PropertyRNA *RNA_def_property(StructRNA *srna, const char *identifier, int type,
}
if(DefRNA.preprocess) {
- dp->srna= srna;
- dp->prop= prop;
+ dprop->cont= cont;
+ dprop->prop= prop;
}
prop->magic= RNA_MAGIC;
@@ -639,8 +861,12 @@ PropertyRNA *RNA_def_property(StructRNA *srna, const char *identifier, int type,
prop->name= identifier;
prop->description= "";
- if(type != PROP_COLLECTION && type != PROP_POINTER)
- prop->flag= PROP_EDITABLE|PROP_ANIMATEABLE;
+ if(type != PROP_COLLECTION && type != PROP_POINTER) {
+ prop->flag= PROP_EDITABLE;
+
+ if(type != PROP_STRING)
+ prop->flag |= PROP_ANIMATEABLE;
+ }
if(DefRNA.preprocess) {
switch(type) {
@@ -687,7 +913,7 @@ PropertyRNA *RNA_def_property(StructRNA *srna, const char *identifier, int type,
else
prop->flag |= PROP_IDPROPERTY|PROP_RUNTIME;
- rna_addtail(&srna->properties, prop);
+ rna_addtail(&cont->properties, prop);
return prop;
}
@@ -1050,8 +1276,13 @@ void RNA_def_property_enum_default(PropertyRNA *prop, int value)
static PropertyDefRNA *rna_def_property_sdna(PropertyRNA *prop, const char *structname, const char *propname)
{
DNAStructMember smember;
- StructDefRNA *ds= DefRNA.structs.last;
- PropertyDefRNA *dp= ds->properties.last;
+ StructDefRNA *ds;
+ PropertyDefRNA *dp;
+
+ dp= rna_find_struct_property_def(prop);
+ if (dp==NULL) return NULL;
+
+ ds= rna_find_struct_def((StructRNA*)dp->cont);
if(!structname)
structname= ds->dnaname;
@@ -1104,12 +1335,13 @@ void RNA_def_property_boolean_sdna(PropertyRNA *prop, const char *structname, co
void RNA_def_property_boolean_negative_sdna(PropertyRNA *prop, const char *structname, const char *propname, int booleanbit)
{
- StructDefRNA *ds;
PropertyDefRNA *dp;
RNA_def_property_boolean_sdna(prop, structname, propname, booleanbit);
- if((ds=DefRNA.structs.last) && (dp=ds->properties.last))
+ dp= rna_find_struct_property_def(prop);
+
+ if(dp)
dp->booleannegative= 1;
}
@@ -1200,12 +1432,13 @@ void RNA_def_property_enum_sdna(PropertyRNA *prop, const char *structname, const
void RNA_def_property_enum_bitflag_sdna(PropertyRNA *prop, const char *structname, const char *propname)
{
- StructDefRNA *ds;
PropertyDefRNA *dp;
RNA_def_property_enum_sdna(prop, structname, propname);
- if((ds=DefRNA.structs.last) && (dp=ds->properties.last))
+ dp= rna_find_struct_property_def(prop);
+
+ if(dp)
dp->enumbitflags= 1;
}
@@ -1297,7 +1530,7 @@ void RNA_def_property_collection_sdna(PropertyRNA *prop, const char *structname,
if(dp && lengthpropname) {
DNAStructMember smember;
- StructDefRNA *ds= DefRNA.structs.last;
+ StructDefRNA *ds= rna_find_struct_def((StructRNA*)dp->cont);
if(!structname)
structname= ds->dnaname;
@@ -1548,23 +1781,25 @@ void RNA_def_property_collection_funcs(PropertyRNA *prop, const char *begin, con
/* Compact definitions */
-PropertyRNA *RNA_def_boolean(StructRNA *srna, const char *identifier, int default_value,
- const char *ui_name, const char *ui_description)
+PropertyRNA *RNA_def_boolean(StructOrFunctionRNA *cont_, const char *identifier, int default_value, const char *ui_name, const char *ui_description)
{
+ ContainerRNA *cont= cont_;
PropertyRNA *prop;
- prop= RNA_def_property(srna, identifier, PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(cont, identifier, PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_default(prop, default_value);
RNA_def_property_ui_text(prop, ui_name, ui_description);
return prop;
}
-PropertyRNA *RNA_def_boolean_array(StructRNA *srna, const char *identifier, int len, int *default_value, const char *ui_name, const char *ui_description)
+PropertyRNA *RNA_def_boolean_array(StructOrFunctionRNA *cont_, const char *identifier, int len, int *default_value,
+ const char *ui_name, const char *ui_description)
{
+ ContainerRNA *cont= cont_;
PropertyRNA *prop;
- prop= RNA_def_property(srna, identifier, PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(cont, identifier, PROP_BOOLEAN, PROP_NONE);
if(len != 0) RNA_def_property_array(prop, len);
if(default_value) RNA_def_property_boolean_array_default(prop, default_value);
RNA_def_property_ui_text(prop, ui_name, ui_description);
@@ -1572,11 +1807,13 @@ PropertyRNA *RNA_def_boolean_array(StructRNA *srna, const char *identifier, int
return prop;
}
-PropertyRNA *RNA_def_boolean_vector(StructRNA *srna, const char *identifier, int len, int *default_value, const char *ui_name, const char *ui_description)
+PropertyRNA *RNA_def_boolean_vector(StructOrFunctionRNA *cont_, const char *identifier, int len, int *default_value,
+ const char *ui_name, const char *ui_description)
{
+ ContainerRNA *cont= cont_;
PropertyRNA *prop;
- prop= RNA_def_property(srna, identifier, PROP_BOOLEAN, PROP_VECTOR);
+ prop= RNA_def_property(cont, identifier, PROP_BOOLEAN, PROP_VECTOR);
if(len != 0) RNA_def_property_array(prop, len);
if(default_value) RNA_def_property_boolean_array_default(prop, default_value);
RNA_def_property_ui_text(prop, ui_name, ui_description);
@@ -1584,12 +1821,13 @@ PropertyRNA *RNA_def_boolean_vector(StructRNA *srna, const char *identifier, int
return prop;
}
-PropertyRNA *RNA_def_int(StructRNA *srna, const char *identifier, int default_value, int hardmin, int hardmax,
+PropertyRNA *RNA_def_int(StructOrFunctionRNA *cont_, const char *identifier, int default_value, int hardmin, int hardmax,
const char *ui_name, const char *ui_description, int softmin, int softmax)
{
+ ContainerRNA *cont= cont_;
PropertyRNA *prop;
- prop= RNA_def_property(srna, identifier, PROP_INT, PROP_NONE);
+ prop= RNA_def_property(cont, identifier, PROP_INT, PROP_NONE);
RNA_def_property_int_default(prop, default_value);
if(hardmin != hardmax) RNA_def_property_range(prop, hardmin, hardmax);
RNA_def_property_ui_text(prop, ui_name, ui_description);
@@ -1598,12 +1836,13 @@ PropertyRNA *RNA_def_int(StructRNA *srna, const char *identifier, int default_va
return prop;
}
-PropertyRNA *RNA_def_int_vector(StructRNA *srna, const char *identifier, int len, const int *default_value,
+PropertyRNA *RNA_def_int_vector(StructOrFunctionRNA *cont_, const char *identifier, int len, const int *default_value,
int hardmin, int hardmax, const char *ui_name, const char *ui_description, int softmin, int softmax)
{
+ ContainerRNA *cont= cont_;
PropertyRNA *prop;
- prop= RNA_def_property(srna, identifier, PROP_INT, PROP_VECTOR);
+ prop= RNA_def_property(cont, identifier, PROP_INT, PROP_VECTOR);
if(len != 0) RNA_def_property_array(prop, len);
if(default_value) RNA_def_property_int_array_default(prop, default_value);
if(hardmin != hardmax) RNA_def_property_range(prop, hardmin, hardmax);
@@ -1613,12 +1852,13 @@ PropertyRNA *RNA_def_int_vector(StructRNA *srna, const char *identifier, int len
return prop;
}
-PropertyRNA *RNA_def_int_array(StructRNA *srna, const char *identifier, int len, const int *default_value,
+PropertyRNA *RNA_def_int_array(StructOrFunctionRNA *cont_, const char *identifier, int len, const int *default_value,
int hardmin, int hardmax, const char *ui_name, const char *ui_description, int softmin, int softmax)
{
+ ContainerRNA *cont= cont_;
PropertyRNA *prop;
- prop= RNA_def_property(srna, identifier, PROP_INT, PROP_NONE);
+ prop= RNA_def_property(cont, identifier, PROP_INT, PROP_NONE);
if(len != 0) RNA_def_property_array(prop, len);
if(default_value) RNA_def_property_int_array_default(prop, default_value);
if(hardmin != hardmax) RNA_def_property_range(prop, hardmin, hardmax);
@@ -1628,12 +1868,13 @@ PropertyRNA *RNA_def_int_array(StructRNA *srna, const char *identifier, int len,
return prop;
}
-PropertyRNA *RNA_def_string(StructRNA *srna, const char *identifier, const char *default_value, int maxlen,
+PropertyRNA *RNA_def_string(StructOrFunctionRNA *cont_, const char *identifier, const char *default_value, int maxlen,
const char *ui_name, const char *ui_description)
{
+ ContainerRNA *cont= cont_;
PropertyRNA *prop;
- prop= RNA_def_property(srna, identifier, PROP_STRING, PROP_NONE);
+ prop= RNA_def_property(cont, identifier, PROP_STRING, PROP_NONE);
if(maxlen != 0) RNA_def_property_string_maxlength(prop, maxlen);
if(default_value) RNA_def_property_string_default(prop, default_value);
RNA_def_property_ui_text(prop, ui_name, ui_description);
@@ -1641,12 +1882,13 @@ PropertyRNA *RNA_def_string(StructRNA *srna, const char *identifier, const char
return prop;
}
-PropertyRNA *RNA_def_string_file_path(StructRNA *srna, const char *identifier, const char *default_value, int maxlen,
+PropertyRNA *RNA_def_string_file_path(StructOrFunctionRNA *cont_, const char *identifier, const char *default_value, int maxlen,
const char *ui_name, const char *ui_description)
{
+ ContainerRNA *cont= cont_;
PropertyRNA *prop;
- prop= RNA_def_property(srna, identifier, PROP_STRING, PROP_FILEPATH);
+ prop= RNA_def_property(cont, identifier, PROP_STRING, PROP_FILEPATH);
if(maxlen != 0) RNA_def_property_string_maxlength(prop, maxlen);
if(default_value) RNA_def_property_string_default(prop, default_value);
RNA_def_property_ui_text(prop, ui_name, ui_description);
@@ -1654,12 +1896,13 @@ PropertyRNA *RNA_def_string_file_path(StructRNA *srna, const char *identifier, c
return prop;
}
-PropertyRNA *RNA_def_string_dir_path(StructRNA *srna, const char *identifier, const char *default_value, int maxlen,
+PropertyRNA *RNA_def_string_dir_path(StructOrFunctionRNA *cont_, const char *identifier, const char *default_value, int maxlen,
const char *ui_name, const char *ui_description)
{
+ ContainerRNA *cont= cont_;
PropertyRNA *prop;
- prop= RNA_def_property(srna, identifier, PROP_STRING, PROP_DIRPATH);
+ prop= RNA_def_property(cont, identifier, PROP_STRING, PROP_DIRPATH);
if(maxlen != 0) RNA_def_property_string_maxlength(prop, maxlen);
if(default_value) RNA_def_property_string_default(prop, default_value);
RNA_def_property_ui_text(prop, ui_name, ui_description);
@@ -1667,12 +1910,13 @@ PropertyRNA *RNA_def_string_dir_path(StructRNA *srna, const char *identifier, co
return prop;
}
-PropertyRNA *RNA_def_enum(StructRNA *srna, const char *identifier, EnumPropertyItem *items, int default_value,
+PropertyRNA *RNA_def_enum(StructOrFunctionRNA *cont_, const char *identifier, EnumPropertyItem *items, int default_value,
const char *ui_name, const char *ui_description)
{
+ ContainerRNA *cont= cont_;
PropertyRNA *prop;
- prop= RNA_def_property(srna, identifier, PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(cont, identifier, PROP_ENUM, PROP_NONE);
if(items) RNA_def_property_enum_items(prop, items);
RNA_def_property_enum_default(prop, default_value);
RNA_def_property_ui_text(prop, ui_name, ui_description);
@@ -1680,12 +1924,13 @@ PropertyRNA *RNA_def_enum(StructRNA *srna, const char *identifier, EnumPropertyI
return prop;
}
-PropertyRNA *RNA_def_float(StructRNA *srna, const char *identifier, float default_value,
+PropertyRNA *RNA_def_float(StructOrFunctionRNA *cont_, const char *identifier, float default_value,
float hardmin, float hardmax, const char *ui_name, const char *ui_description, float softmin, float softmax)
{
+ ContainerRNA *cont= cont_;
PropertyRNA *prop;
- prop= RNA_def_property(srna, identifier, PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(cont, identifier, PROP_FLOAT, PROP_NONE);
RNA_def_property_float_default(prop, default_value);
if(hardmin != hardmax) RNA_def_property_range(prop, hardmin, hardmax);
RNA_def_property_ui_text(prop, ui_name, ui_description);
@@ -1694,12 +1939,13 @@ PropertyRNA *RNA_def_float(StructRNA *srna, const char *identifier, float defaul
return prop;
}
-PropertyRNA *RNA_def_float_vector(StructRNA *srna, const char *identifier, int len, const float *default_value,
+PropertyRNA *RNA_def_float_vector(StructOrFunctionRNA *cont_, const char *identifier, int len, const float *default_value,
float hardmin, float hardmax, const char *ui_name, const char *ui_description, float softmin, float softmax)
{
+ ContainerRNA *cont= cont_;
PropertyRNA *prop;
- prop= RNA_def_property(srna, identifier, PROP_FLOAT, PROP_VECTOR);
+ prop= RNA_def_property(cont, identifier, PROP_FLOAT, PROP_VECTOR);
if(len != 0) RNA_def_property_array(prop, len);
if(default_value) RNA_def_property_float_array_default(prop, default_value);
if(hardmin != hardmax) RNA_def_property_range(prop, hardmin, hardmax);
@@ -1709,12 +1955,13 @@ PropertyRNA *RNA_def_float_vector(StructRNA *srna, const char *identifier, int l
return prop;
}
-PropertyRNA *RNA_def_float_color(StructRNA *srna, const char *identifier, int len, const float *default_value,
+PropertyRNA *RNA_def_float_color(StructOrFunctionRNA *cont_, const char *identifier, int len, const float *default_value,
float hardmin, float hardmax, const char *ui_name, const char *ui_description, float softmin, float softmax)
{
+ ContainerRNA *cont= cont_;
PropertyRNA *prop;
- prop= RNA_def_property(srna, identifier, PROP_FLOAT, PROP_COLOR);
+ prop= RNA_def_property(cont, identifier, PROP_FLOAT, PROP_COLOR);
if(len != 0) RNA_def_property_array(prop, len);
if(default_value) RNA_def_property_float_array_default(prop, default_value);
if(hardmin != hardmax) RNA_def_property_range(prop, hardmin, hardmax);
@@ -1725,12 +1972,13 @@ PropertyRNA *RNA_def_float_color(StructRNA *srna, const char *identifier, int le
}
-PropertyRNA *RNA_def_float_matrix(StructRNA *srna, const char *identifier, int len, const float *default_value,
+PropertyRNA *RNA_def_float_matrix(StructOrFunctionRNA *cont_, const char *identifier, int len, const float *default_value,
float hardmin, float hardmax, const char *ui_name, const char *ui_description, float softmin, float softmax)
{
+ ContainerRNA *cont= cont_;
PropertyRNA *prop;
- prop= RNA_def_property(srna, identifier, PROP_FLOAT, PROP_MATRIX);
+ prop= RNA_def_property(cont, identifier, PROP_FLOAT, PROP_MATRIX);
if(len != 0) RNA_def_property_array(prop, len);
if(default_value) RNA_def_property_float_array_default(prop, default_value);
if(hardmin != hardmax) RNA_def_property_range(prop, hardmin, hardmax);
@@ -1740,12 +1988,13 @@ PropertyRNA *RNA_def_float_matrix(StructRNA *srna, const char *identifier, int l
return prop;
}
-PropertyRNA *RNA_def_float_rotation(StructRNA *srna, const char *identifier, int len, const float *default_value,
+PropertyRNA *RNA_def_float_rotation(StructOrFunctionRNA *cont_, const char *identifier, int len, const float *default_value,
float hardmin, float hardmax, const char *ui_name, const char *ui_description, float softmin, float softmax)
{
+ ContainerRNA *cont= cont_;
PropertyRNA *prop;
- prop= RNA_def_property(srna, identifier, PROP_FLOAT, PROP_ROTATION);
+ prop= RNA_def_property(cont, identifier, PROP_FLOAT, PROP_ROTATION);
if(len != 0) RNA_def_property_array(prop, len);
if(default_value) RNA_def_property_float_array_default(prop, default_value);
if(hardmin != hardmax) RNA_def_property_range(prop, hardmin, hardmax);
@@ -1755,12 +2004,13 @@ PropertyRNA *RNA_def_float_rotation(StructRNA *srna, const char *identifier, int
return prop;
}
-PropertyRNA *RNA_def_float_array(StructRNA *srna, const char *identifier, int len, const float *default_value,
+PropertyRNA *RNA_def_float_array(StructOrFunctionRNA *cont_, const char *identifier, int len, const float *default_value,
float hardmin, float hardmax, const char *ui_name, const char *ui_description, float softmin, float softmax)
{
+ ContainerRNA *cont= cont_;
PropertyRNA *prop;
- prop= RNA_def_property(srna, identifier, PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(cont, identifier, PROP_FLOAT, PROP_NONE);
if(len != 0) RNA_def_property_array(prop, len);
if(default_value) RNA_def_property_float_array_default(prop, default_value);
if(hardmin != hardmax) RNA_def_property_range(prop, hardmin, hardmax);
@@ -1770,12 +2020,13 @@ PropertyRNA *RNA_def_float_array(StructRNA *srna, const char *identifier, int le
return prop;
}
-PropertyRNA *RNA_def_float_percentage(StructRNA *srna, const char *identifier, float default_value,
+PropertyRNA *RNA_def_float_percentage(StructOrFunctionRNA *cont_, const char *identifier, float default_value,
float hardmin, float hardmax, const char *ui_name, const char *ui_description, float softmin, float softmax)
{
+ ContainerRNA *cont= cont_;
PropertyRNA *prop;
- prop= RNA_def_property(srna, identifier, PROP_FLOAT, PROP_PERCENTAGE);
+ prop= RNA_def_property(cont, identifier, PROP_FLOAT, PROP_PERCENTAGE);
RNA_def_property_float_default(prop, default_value);
if(hardmin != hardmax) RNA_def_property_range(prop, hardmin, hardmax);
RNA_def_property_ui_text(prop, ui_name, ui_description);
@@ -1784,27 +2035,191 @@ PropertyRNA *RNA_def_float_percentage(StructRNA *srna, const char *identifier, f
return prop;
}
-PropertyRNA *RNA_def_pointer_runtime(StructRNA *srna, const char *identifier, StructRNA *type,
+PropertyRNA *RNA_def_pointer(StructOrFunctionRNA *cont_, const char *identifier, const char *type,
+ const char *ui_name, const char *ui_description)
+{
+ ContainerRNA *cont= cont_;
+ PropertyRNA *prop;
+
+ prop= RNA_def_property(cont, identifier, PROP_POINTER, PROP_NONE);
+ RNA_def_property_struct_type(prop, type);
+ RNA_def_property_ui_text(prop, ui_name, ui_description);
+
+ return prop;
+}
+
+PropertyRNA *RNA_def_pointer_runtime(StructOrFunctionRNA *cont_, const char *identifier, StructRNA *type,
const char *ui_name, const char *ui_description)
{
+ ContainerRNA *cont= cont_;
PropertyRNA *prop;
- prop= RNA_def_property(srna, identifier, PROP_POINTER, PROP_NONE);
+ prop= RNA_def_property(cont, identifier, PROP_POINTER, PROP_NONE);
RNA_def_property_struct_runtime(prop, type);
RNA_def_property_ui_text(prop, ui_name, ui_description);
return prop;
}
-PropertyRNA *RNA_def_collection_runtime(StructRNA *srna, const char *identifier, StructRNA *type,
+PropertyRNA *RNA_def_collection(StructOrFunctionRNA *cont_, const char *identifier, const char *type,
+ const char *ui_name, const char *ui_description)
+{
+ ContainerRNA *cont= cont_;
+ PropertyRNA *prop;
+
+ prop= RNA_def_property(cont, identifier, PROP_COLLECTION, PROP_NONE);
+ RNA_def_property_struct_type(prop, type);
+ RNA_def_property_ui_text(prop, ui_name, ui_description);
+
+ return prop;
+}
+
+PropertyRNA *RNA_def_collection_runtime(StructOrFunctionRNA *cont_, const char *identifier, StructRNA *type,
const char *ui_name, const char *ui_description)
{
+ ContainerRNA *cont= cont_;
PropertyRNA *prop;
- prop= RNA_def_property(srna, identifier, PROP_COLLECTION, PROP_NONE);
+ prop= RNA_def_property(cont, identifier, PROP_COLLECTION, PROP_NONE);
RNA_def_property_struct_runtime(prop, type);
RNA_def_property_ui_text(prop, ui_name, ui_description);
return prop;
}
+/* Function */
+
+static FunctionRNA *rna_def_function(StructRNA *srna, const char *identifier)
+{
+ FunctionRNA *func;
+ StructDefRNA *dsrna;
+ FunctionDefRNA *dfunc;
+
+ if(DefRNA.preprocess) {
+ char error[512];
+
+ if (rna_validate_identifier(identifier, error, 0) == 0) {
+ fprintf(stderr, "RNA_def_function: function identifier \"%s\" - %s\n", identifier, error);
+ DefRNA.error= 1;
+ }
+ }
+
+ func= MEM_callocN(sizeof(FunctionRNA), "FunctionRNA");
+ func->identifier= identifier;
+ func->description= identifier;
+
+ rna_addtail(&srna->functions, func);
+
+ if(DefRNA.preprocess) {
+ dsrna= rna_find_struct_def(srna);
+ dfunc= MEM_callocN(sizeof(FunctionDefRNA), "FunctionDefRNA");
+ rna_addtail(&dsrna->functions, dfunc);
+ dfunc->func= func;
+ }
+ else
+ func->flag|= FUNC_RUNTIME;
+
+ return func;
+}
+
+FunctionRNA *RNA_def_function(StructRNA *srna, const char *identifier, const char *call)
+{
+ FunctionRNA *func;
+ FunctionDefRNA *dfunc;
+
+ func= rna_def_function(srna, identifier);
+
+ if(!DefRNA.preprocess) {
+ fprintf(stderr, "RNA_def_function: only at preprocess time.\n");
+ return func;
+ }
+
+ dfunc= rna_find_function_def(func);
+ dfunc->call= call;
+
+ return func;
+}
+
+FunctionRNA *RNA_def_function_runtime(StructRNA *srna, const char *identifier, CallFunc call)
+{
+ FunctionRNA *func;
+
+ func= rna_def_function(srna, identifier);
+
+ if(DefRNA.preprocess) {
+ fprintf(stderr, "RNA_def_function_call_runtime: only at runtime.\n");
+ return func;
+ }
+
+ func->call= call;
+
+
+ return func;
+}
+
+void RNA_def_function_return(FunctionRNA *func, PropertyRNA *ret)
+{
+ func->ret= ret;
+ ret->flag|=PROP_RETURN;
+}
+
+void RNA_def_function_flag(FunctionRNA *func, int flag)
+{
+ func->flag|= flag;
+}
+
+void RNA_def_function_ui_description(FunctionRNA *func, const char *description)
+{
+ func->description= description;
+}
+
+int rna_parameter_size(PropertyRNA *parm)
+{
+ PropertyType ptype= parm->type;
+ int len= parm->arraylength;
+
+ if(len > 0) {
+ switch (ptype) {
+ case PROP_BOOLEAN:
+ case PROP_INT:
+ return sizeof(int)*len;
+ case PROP_FLOAT:
+ return sizeof(float)*len;
+ default:
+ break;
+ }
+ }
+ else {
+ switch (ptype) {
+ case PROP_BOOLEAN:
+ case PROP_INT:
+ case PROP_ENUM:
+ return sizeof(int);
+ case PROP_FLOAT:
+ return sizeof(float);
+ case PROP_STRING:
+ return sizeof(char *);
+ case PROP_POINTER: {
+ PointerPropertyRNA *pprop= (PointerPropertyRNA*)parm;
+
+#ifdef RNA_RUNTIME
+ if(pprop->type == &RNA_AnyType)
+ return sizeof(PointerRNA);
+ else
+ return sizeof(void *);
+#else
+ if(strcmp((char*)pprop->type, "AnyType") == 0)
+ return sizeof(PointerRNA);
+ else
+ return sizeof(void *);
+#endif
+ }
+ case PROP_COLLECTION:
+ /* XXX does not work yet */
+ return sizeof(ListBase);
+ }
+ }
+
+ return sizeof(void *);
+}
+
diff --git a/source/blender/makesrna/intern/rna_fcurve.c b/source/blender/makesrna/intern/rna_fcurve.c
new file mode 100644
index 00000000000..d57e302263e
--- /dev/null
+++ b/source/blender/makesrna/intern/rna_fcurve.c
@@ -0,0 +1,656 @@
+/**
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Contributor(s): Blender Foundation (2009), Joshua Leung
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include <stdlib.h>
+
+#include "RNA_define.h"
+#include "RNA_types.h"
+
+#include "rna_internal.h"
+
+#include "DNA_anim_types.h"
+#include "DNA_scene_types.h"
+
+#include "MEM_guardedalloc.h"
+
+EnumPropertyItem fmodifier_type_items[] = {
+ {FMODIFIER_TYPE_NULL, "NULL", "Invalid", ""},
+ {FMODIFIER_TYPE_GENERATOR, "GENERATOR", "Generator", ""},
+ {FMODIFIER_TYPE_ENVELOPE, "ENVELOPE", "Envelope", ""},
+ {FMODIFIER_TYPE_CYCLES, "CYCLES", "Cycles", ""},
+ {FMODIFIER_TYPE_NOISE, "NOISE", "Noise", ""},
+ {FMODIFIER_TYPE_FILTER, "FILTER", "Filter", ""},
+ {FMODIFIER_TYPE_PYTHON, "PYTHON", "Python", ""},
+ {FMODIFIER_TYPE_LIMITS, "LIMITS", "Limits", ""},
+ {0, NULL, NULL, NULL}};
+
+#ifdef RNA_RUNTIME
+
+float FModGenFunc_amplitude_get(PointerRNA *ptr)
+{
+ FModifier *fcm = (FModifier *)(ptr->data);
+ FMod_Generator *data= (FMod_Generator*)(fcm->data);
+ return (data->coefficients) ? (float)data->coefficients[0] : 1.0f;
+}
+
+void FModGenFunc_amplitude_set(PointerRNA *ptr, float value)
+{
+ FModifier *fcm = (FModifier *)(ptr->data);
+ FMod_Generator *data= (FMod_Generator*)(fcm->data);
+ if (data->coefficients) data->coefficients[0]= value;
+}
+
+float FModGenFunc_pre_multiplier_get(PointerRNA *ptr)
+{
+ FModifier *fcm = (FModifier *)(ptr->data);
+ FMod_Generator *data= (FMod_Generator*)(fcm->data);
+ return (data->coefficients) ? (float)data->coefficients[1] : 1.0f;
+}
+
+void FModGenFunc_pre_multiplier_set(PointerRNA *ptr, float value)
+{
+ FModifier *fcm = (FModifier *)(ptr->data);
+ FMod_Generator *data= (FMod_Generator*)(fcm->data);
+ if (data->coefficients) data->coefficients[1]= value;
+}
+
+float FModGenFunc_x_offset_get(PointerRNA *ptr)
+{
+ FModifier *fcm = (FModifier *)(ptr->data);
+ FMod_Generator *data= (FMod_Generator*)(fcm->data);
+ return (data->coefficients) ? (float)data->coefficients[2] : 0.0f;
+}
+
+void FModGenFunc_x_offset_set(PointerRNA *ptr, float value)
+{
+ FModifier *fcm = (FModifier *)(ptr->data);
+ FMod_Generator *data= (FMod_Generator*)(fcm->data);
+ if (data->coefficients) data->coefficients[2]= value;
+}
+
+float FModGenFunc_y_offset_get(PointerRNA *ptr)
+{
+ FModifier *fcm = (FModifier *)(ptr->data);
+ FMod_Generator *data= (FMod_Generator*)(fcm->data);
+ return (data->coefficients) ? (float)data->coefficients[3] : 0.0f;
+}
+
+void FModGenFunc_y_offset_set(PointerRNA *ptr, float value)
+{
+ FModifier *fcm = (FModifier *)(ptr->data);
+ FMod_Generator *data= (FMod_Generator*)(fcm->data);
+ if (data->coefficients) data->coefficients[3]= value;
+}
+
+/* --------- */
+
+StructRNA *rna_FModifierType_refine(struct PointerRNA *ptr)
+{
+ FModifier *fcm= (FModifier *)ptr->data;
+
+ switch (fcm->type) {
+ case FMODIFIER_TYPE_GENERATOR:
+ {
+ FMod_Generator *gen= (FMod_Generator *)fcm->data;
+
+ switch (gen->mode) {
+ case FCM_GENERATOR_POLYNOMIAL:
+ return &RNA_FModifierGenerator_PolyExpanded;
+ //case FCM_GENERATOR_POLYNOMIAL_FACTORISED:
+ case FCM_GENERATOR_FUNCTION:
+ return &RNA_FModifierGenerator_Function;
+ //case FCM_GENERATOR_EXPRESSION:
+ default:
+ return &RNA_FModifierGenerator;
+ }
+ }
+ case FMODIFIER_TYPE_ENVELOPE:
+ return &RNA_FModifierEnvelope;
+ case FMODIFIER_TYPE_CYCLES:
+ return &RNA_FModifierCycles;
+ case FMODIFIER_TYPE_NOISE:
+ return &RNA_FModifierNoise;
+ //case FMODIFIER_TYPE_FILTER:
+ // return &RNA_FModifierFilter;
+ case FMODIFIER_TYPE_PYTHON:
+ return &RNA_FModifierPython;
+ case FMODIFIER_TYPE_LIMITS:
+ return &RNA_FModifierLimits;
+ default:
+ return &RNA_UnknownType;
+ }
+}
+
+/* ****************************** */
+
+static void rna_DriverTarget_RnaPath_get(PointerRNA *ptr, char *value)
+{
+ DriverTarget *dtar= (DriverTarget *)ptr->data;
+
+ if (dtar->rna_path)
+ strcpy(value, dtar->rna_path);
+ else
+ strcpy(value, "");
+}
+
+static int rna_DriverTarget_RnaPath_length(PointerRNA *ptr)
+{
+ DriverTarget *dtar= (DriverTarget *)ptr->data;
+
+ if (dtar->rna_path)
+ return strlen(dtar->rna_path);
+ else
+ return 0;
+}
+
+static void rna_DriverTarget_RnaPath_set(PointerRNA *ptr, const char *value)
+{
+ DriverTarget *dtar= (DriverTarget *)ptr->data;
+
+ // XXX in this case we need to be very careful, as this will require some new dependencies to be added!
+ if (dtar->rna_path)
+ MEM_freeN(dtar->rna_path);
+
+ if (strlen(value))
+ dtar->rna_path= BLI_strdup(value);
+ else
+ dtar->rna_path= NULL;
+}
+
+/* ****************************** */
+
+static void rna_FCurve_RnaPath_get(PointerRNA *ptr, char *value)
+{
+ FCurve *fcu= (FCurve *)ptr->data;
+
+ if (fcu->rna_path)
+ strcpy(value, fcu->rna_path);
+ else
+ strcpy(value, "");
+}
+
+static int rna_FCurve_RnaPath_length(PointerRNA *ptr)
+{
+ FCurve *fcu= (FCurve *)ptr->data;
+
+ if (fcu->rna_path)
+ return strlen(fcu->rna_path);
+ else
+ return 0;
+}
+
+static void rna_FCurve_RnaPath_set(PointerRNA *ptr, const char *value)
+{
+ FCurve *fcu= (FCurve *)ptr->data;
+
+ if (fcu->rna_path)
+ MEM_freeN(fcu->rna_path);
+
+ if (strlen(value))
+ fcu->rna_path= BLI_strdup(value);
+ else
+ fcu->rna_path= NULL;
+}
+
+#else
+
+static void rna_def_fmodifier_generator_common(StructRNA *srna)
+{
+ PropertyRNA *prop;
+
+ static EnumPropertyItem prop_mode_items[] = {
+ {FCM_GENERATOR_POLYNOMIAL, "POLYNOMIAL", "Expanded Polynomial", ""},
+ {FCM_GENERATOR_POLYNOMIAL_FACTORISED, "POLYNOMIAL_FACTORISED", "Factorised Polynomial", ""},
+ {FCM_GENERATOR_FUNCTION, "FUNCTION", "Built-In Function", ""},
+ {FCM_GENERATOR_EXPRESSION, "EXPRESSION", "Expression", ""},
+ {0, NULL, NULL, NULL}};
+
+ /* struct wrapping settings */
+ RNA_def_struct_sdna_from(srna, "FMod_Generator", "data");
+
+ /* settings */
+ prop= RNA_def_property(srna, "additive", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", FCM_GENERATOR_ADDITIVE);
+ RNA_def_property_ui_text(prop, "Additive", "Values generated by this modifier are applied on top of the existing values instead of overwriting them.");
+
+ // XXX this has a special validation func
+ prop= RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_items(prop, prop_mode_items);
+ RNA_def_property_ui_text(prop, "Mode", "Type of generator to use.");
+}
+
+/* this is a temporary dummy generator-modifier wrapping (to be discarded) */
+static void rna_def_fmodifier_generator(BlenderRNA *brna)
+{
+ StructRNA *srna;
+
+ srna= RNA_def_struct(brna, "FModifierGenerator", "FModifier");
+ RNA_def_struct_ui_text(srna, "Generator F-Curve Modifier", "Deterministically generates values for the modified F-Curve.");
+
+ /* define common props */
+ rna_def_fmodifier_generator_common(srna);
+}
+
+static void rna_def_fmodifier_generator_polyexpanded(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ srna= RNA_def_struct(brna, "FModifierGenerator_PolyExpanded", "FModifier");
+ RNA_def_struct_ui_text(srna, "Expanded Polynomial Generator", "Generates values for the modified F-Curve using expanded polynomial expresion.");
+
+ /* define common props */
+ rna_def_fmodifier_generator_common(srna);
+
+ /* order of the polynomial */
+ // XXX this has a special validation func
+ prop= RNA_def_property(srna, "poly_order", PROP_INT, PROP_NONE);
+ RNA_def_property_ui_text(prop, "Polynomial Order", "The highest power of 'x' for this polynomial. (i.e. the number of coefficients - 1)");
+
+ /* coefficients array */
+ //prop= RNA_def_property(srna, "coefficients", PROP_FLOAT, PROP_NONE);
+ //RNA_def_property_ui_text(prop, "Coefficients", "Coefficients for 'x' (starting from lowest power).");
+}
+
+static void rna_def_fmodifier_generator_function(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ static EnumPropertyItem prop_type_items[] = {
+ {0, "SIN", "Sine", ""},
+ {1, "COS", "Cosine", ""},
+ {2, "TAN", "Tangent", ""},
+ {3, "SQRT", "Square Root", ""},
+ {4, "LN", "Natural Logarithm", ""},
+ {0, NULL, NULL, NULL}};
+
+
+ srna= RNA_def_struct(brna, "FModifierGenerator_Function", "FModifier");
+ RNA_def_struct_ui_text(srna, "Built-In Function Generator", "Generates values for modified F-Curve using Built-In Function.");
+
+ /* common settings */
+ rna_def_fmodifier_generator_common(srna);
+
+ /* type */
+ prop= RNA_def_property(srna, "func_type", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_items(prop, prop_type_items);
+ RNA_def_property_ui_text(prop, "Type", "Type of Built-In function to use as generator.");
+
+ /* coefficients */
+ prop= RNA_def_property(srna, "amplitude", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_funcs(prop, "FModGenFunc_amplitude_get", "FModGenFunc_amplitude_set", NULL);
+ RNA_def_property_ui_text(prop, "Amplitude", "Scale factor for y-values generated by the function.");
+
+ prop= RNA_def_property(srna, "pre_multiplier", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_funcs(prop, "FModGenFunc_pre_multiplier_get", "FModGenFunc_pre_multiplier_set", NULL);
+ RNA_def_property_ui_text(prop, "PreMultiplier", "Scale factor for x-value inputs to function.");
+
+ prop= RNA_def_property(srna, "x_offset", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_funcs(prop, "FModGenFunc_x_offset_get", "FModGenFunc_x_offset_set", NULL);
+ RNA_def_property_ui_text(prop, "X Offset", "Offset for x-value inputs to function.");
+
+ prop= RNA_def_property(srna, "y_offset", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_funcs(prop, "FModGenFunc_y_offset_get", "FModGenFunc_y_offset_set", NULL);
+ RNA_def_property_ui_text(prop, "Y Offset", "Offset for y-values generated by the function.");
+}
+
+/* --------- */
+
+static void rna_def_fmodifier_envelope(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ //PropertyRNA *prop;
+
+ srna= RNA_def_struct(brna, "FModifierEnvelope", "FModifier");
+ RNA_def_struct_ui_text(srna, "Envelope F-Curve Modifier", "Scales the values of the modified F-Curve.");
+ RNA_def_struct_sdna_from(srna, "FMod_Envelope", "data");
+}
+
+/* --------- */
+
+static void rna_def_fmodifier_cycles(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ static EnumPropertyItem prop_type_items[] = {
+ {FCM_EXTRAPOLATE_NONE, "NONE", "No Cycles", "Don't do anything."},
+ {FCM_EXTRAPOLATE_CYCLIC, "REPEAT", "Repeat Motion", "Repeat keyframe range as-is."},
+ {FCM_EXTRAPOLATE_CYCLIC_OFFSET, "REPEAT_OFFSET", "Repeat with Offset", "Repeat keyframe range, but with offset based on gradient between values"},
+ {FCM_EXTRAPOLATE_MIRROR, "MIRROR", "Repeat Mirrored", "Alternate between forward and reverse playback of keyframe range"},
+ {0, NULL, NULL, NULL}};
+
+ srna= RNA_def_struct(brna, "FModifierCycles", "FModifier");
+ RNA_def_struct_ui_text(srna, "Cycles F-Curve Modifier", "Repeats the values of the modified F-Curve.");
+ RNA_def_struct_sdna_from(srna, "FMod_Cycles", "data");
+
+ /* before */
+ prop= RNA_def_property(srna, "before_mode", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_items(prop, prop_type_items);
+ RNA_def_property_ui_text(prop, "Before Mode", "Cycling mode to use before first keyframe.");
+
+ prop= RNA_def_property(srna, "before_cycles", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_ui_text(prop, "Before Cycles", "Maximum number of cycles to allow before first keyframe. (0 = infinite)");
+
+
+ /* after */
+ prop= RNA_def_property(srna, "after_mode", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_items(prop, prop_type_items);
+ RNA_def_property_ui_text(prop, "After Mode", "Cycling mode to use after last keyframe.");
+
+ prop= RNA_def_property(srna, "after_cycles", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_ui_text(prop, "After Cycles", "Maximum number of cycles to allow after last keyframe. (0 = infinite)");
+}
+
+/* --------- */
+
+static void rna_def_fmodifier_python(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ //PropertyRNA *prop;
+
+ srna= RNA_def_struct(brna, "FModifierPython", "FModifier");
+ RNA_def_struct_ui_text(srna, "Python F-Curve Modifier", "Performs user-defined operation on the modified F-Curve.");
+ RNA_def_struct_sdna_from(srna, "FMod_Python", "data");
+}
+
+/* --------- */
+
+static void rna_def_fmodifier_limits(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ srna= RNA_def_struct(brna, "FModifierLimits", "FModifier");
+ RNA_def_struct_ui_text(srna, "Limits F-Curve Modifier", "Limits the time/value ranges of the modified F-Curve.");
+ RNA_def_struct_sdna_from(srna, "FMod_Limits", "data");
+
+ prop= RNA_def_property(srna, "use_minimum_x", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", FCM_LIMIT_XMIN);
+ RNA_def_property_ui_text(prop, "Minimum X", "Use the minimum X value.");
+
+ prop= RNA_def_property(srna, "use_minimum_y", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", FCM_LIMIT_YMIN);
+ RNA_def_property_ui_text(prop, "Minimum Y", "Use the minimum Y value.");
+
+ prop= RNA_def_property(srna, "use_maximum_x", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", FCM_LIMIT_XMAX);
+ RNA_def_property_ui_text(prop, "Maximum X", "Use the maximum X value.");
+
+ prop= RNA_def_property(srna, "use_maximum_y", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", FCM_LIMIT_YMAX);
+ RNA_def_property_ui_text(prop, "Maximum Y", "Use the maximum Y value.");
+
+ prop= RNA_def_property(srna, "minimum_x", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "rect.xmin");
+ RNA_def_property_ui_text(prop, "Minimum X", "Lowest X value to allow.");
+
+ prop= RNA_def_property(srna, "minimum_y", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "rect.ymin");
+ RNA_def_property_ui_text(prop, "Minimum Y", "Lowest Y value to allow.");
+
+ prop= RNA_def_property(srna, "maximum_x", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "rect.xmax");
+ RNA_def_property_ui_text(prop, "Maximum X", "Highest X value to allow.");
+
+ prop= RNA_def_property(srna, "maximum_y", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "rect.ymax");
+ RNA_def_property_ui_text(prop, "Maximum Y", "Highest Y value to allow.");
+}
+
+/* --------- */
+
+static void rna_def_fmodifier_noise(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ static EnumPropertyItem prop_modification_items[] = {
+ {FCM_NOISE_MODIF_REPLACE, "REPLACE", "Replace", ""},
+ {FCM_NOISE_MODIF_ADD, "ADD", "Add", ""},
+ {FCM_NOISE_MODIF_SUBTRACT, "SUBTRACT", "Subtract", ""},
+ {FCM_NOISE_MODIF_MULTIPLY, "MULTIPLY", "Multiply", ""},
+ {0, NULL, NULL, NULL}};
+
+ srna= RNA_def_struct(brna, "FModifierNoise", "FModifier");
+ RNA_def_struct_ui_text(srna, "Noise F-Curve Modifier", "Gives randomness to the modified F-Curve.");
+ RNA_def_struct_sdna_from(srna, "FMod_Noise", "data");
+
+ prop= RNA_def_property(srna, "modification", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_items(prop, prop_modification_items);
+ RNA_def_property_ui_text(prop, "Modification", "Method of modifying the existing F-Curve.");
+
+ prop= RNA_def_property(srna, "size", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "size");
+ RNA_def_property_ui_text(prop, "Size", "Scaling (in time) of the noise");
+
+ prop= RNA_def_property(srna, "strength", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "strength");
+ RNA_def_property_ui_text(prop, "Strength", "Amplitude of the noise - the amount that it modifies the underlying curve");
+
+ prop= RNA_def_property(srna, "phase", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "phase");
+ RNA_def_property_ui_text(prop, "Phase", "A random seed for the noise effect");
+
+ prop= RNA_def_property(srna, "depth", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(prop, NULL, "depth");
+ RNA_def_property_ui_text(prop, "Depth", "Amount of fine level detail present in the noise");
+
+}
+
+
+/* --------- */
+
+void rna_def_fmodifier(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ /* base struct definition */
+ srna= RNA_def_struct(brna, "FModifier", NULL);
+ RNA_def_struct_refine_func(srna, "rna_FModifierType_refine");
+ RNA_def_struct_ui_text(srna, "FCurve Modifier", "Modifier for values of F-Curve.");
+
+#if 0 // XXX not used yet
+ /* name */
+ prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
+ RNA_def_struct_name_property(srna, prop);
+ RNA_def_property_ui_text(prop, "Name", "Short description of F-Curve Modifier.");
+#endif // XXX not used yet
+
+ /* type */
+ prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_enum_items(prop, fmodifier_type_items);
+ RNA_def_property_ui_text(prop, "Type", "F-Curve Modifier Type");
+
+ /* settings */
+ prop= RNA_def_property(srna, "expanded", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", FMODIFIER_FLAG_EXPANDED);
+ RNA_def_property_ui_text(prop, "Expanded", "F-Curve Modifier's panel is expanded in UI.");
+
+ prop= RNA_def_property(srna, "muted", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", FMODIFIER_FLAG_MUTED);
+ RNA_def_property_ui_text(prop, "Muted", "F-Curve Modifier will not be evaluated.");
+
+ // XXX this is really an internal flag, but it may be useful for some tools to be able to access this...
+ prop= RNA_def_property(srna, "disabled", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", FMODIFIER_FLAG_DISABLED);
+ RNA_def_property_ui_text(prop, "Disabled", "F-Curve Modifier has invalid settings and will not be evaluated.");
+
+ // TODO: setting this to true must ensure that all others in stack are turned off too...
+ prop= RNA_def_property(srna, "active", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", FMODIFIER_FLAG_ACTIVE);
+ RNA_def_property_ui_text(prop, "Active", "F-Curve Modifier is the one being edited ");
+}
+
+/* *********************** */
+
+void rna_def_drivertarget(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ srna= RNA_def_struct(brna, "DriverTarget", NULL);
+ RNA_def_struct_ui_text(srna, "Driver Target", "Variable from some source/target for driver relationship.");
+
+ /* Variable Name */
+ prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
+ RNA_def_struct_name_property(srna, prop);
+ RNA_def_property_ui_text(prop, "Name", "Name to use in scripted expressions/functions.");
+
+ /* Target Properties */
+ prop= RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
+ RNA_def_property_pointer_sdna(prop, NULL, "id");
+ RNA_def_property_ui_text(prop, "Object", "Object the specific property used can be found from");
+
+ prop= RNA_def_property(srna, "rna_path", PROP_STRING, PROP_NONE);
+ RNA_def_property_string_funcs(prop, "rna_DriverTarget_RnaPath_get", "rna_DriverTarget_RnaPath_length", "rna_DriverTarget_RnaPath_set");
+ RNA_def_property_ui_text(prop, "RNA Path", "RNA Path (from Object) to property used");
+
+ prop= RNA_def_property(srna, "array_index", PROP_INT, PROP_NONE);
+ RNA_def_property_ui_text(prop, "RNA Array Index", "Index to the specific property used (if applicable)");
+}
+
+void rna_def_channeldriver(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ static EnumPropertyItem prop_type_items[] = {
+ {DRIVER_TYPE_AVERAGE, "AVERAGE", "Averaged Value", ""},
+ {DRIVER_TYPE_PYTHON, "SCRIPTED", "Scripted Expression", ""},
+ {DRIVER_TYPE_ROTDIFF, "ROTDIFF", "Rotational Difference", ""},
+ {0, NULL, NULL, NULL}};
+
+ srna= RNA_def_struct(brna, "Driver", NULL);
+ RNA_def_struct_sdna(srna, "ChannelDriver");
+ RNA_def_struct_ui_text(srna, "Driver", "Driver for the value of a setting based on an external value.");
+
+ /* Enums */
+ prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_items(prop, prop_type_items);
+ RNA_def_property_ui_text(prop, "Type", "Driver types.");
+
+ /* String values */
+ prop= RNA_def_property(srna, "expression", PROP_STRING, PROP_NONE);
+ RNA_def_property_ui_text(prop, "Expression", "Expression to use for Scripted Expression.");
+
+ /* Collections */
+ prop= RNA_def_property(srna, "targets", PROP_COLLECTION, PROP_NONE);
+ RNA_def_property_collection_sdna(prop, NULL, "targets", NULL);
+ RNA_def_property_struct_type(prop, "DriverTarget");
+ RNA_def_property_ui_text(prop, "Target Variables", "Properties acting as targets for this driver.");
+}
+
+/* *********************** */
+
+void rna_def_fcurve(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ static EnumPropertyItem prop_mode_extend_items[] = {
+ {FCURVE_EXTRAPOLATE_CONSTANT, "CONSTANT", "Constant", ""},
+ {FCURVE_EXTRAPOLATE_LINEAR, "LINEAR", "Linear", ""},
+ {0, NULL, NULL, NULL}};
+ static EnumPropertyItem prop_mode_color_items[] = {
+ {FCURVE_COLOR_AUTO_RAINBOW, "AUTO_RAINBOW", "Automatic Rainbow", ""},
+ {FCURVE_COLOR_AUTO_RGB, "AUTO_RGB", "Automatic XYZ to RGB", ""},
+ {FCURVE_COLOR_CUSTOM, "CUSTOM", "User Defined", ""},
+ {0, NULL, NULL, NULL}};
+
+ srna= RNA_def_struct(brna, "FCurve", NULL);
+ RNA_def_struct_ui_text(srna, "F-Curve", "F-Curve defining values of a period of time.");
+
+ /* Enums */
+ prop= RNA_def_property(srna, "extrapolation", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "extend");
+ RNA_def_property_enum_items(prop, prop_mode_extend_items);
+ RNA_def_property_ui_text(prop, "Extrapolation", "");
+
+ /* Pointers */
+ prop= RNA_def_property(srna, "driver", PROP_POINTER, PROP_NONE);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_ui_text(prop, "Driver", "Channel Driver (only set for Driver F-Curves)");
+
+ /* Path + Array Index */
+ prop= RNA_def_property(srna, "rna_path", PROP_STRING, PROP_NONE);
+ RNA_def_property_string_funcs(prop, "rna_FCurve_RnaPath_get", "rna_FCurve_RnaPath_length", "rna_FCurve_RnaPath_set");
+ RNA_def_property_ui_text(prop, "RNA Path", "RNA Path to property affected by F-Curve.");
+
+ prop= RNA_def_property(srna, "array_index", PROP_INT, PROP_NONE);
+ RNA_def_property_ui_text(prop, "RNA Array Index", "Index to the specific property affected by F-Curve if applicable.");
+
+ /* Color */
+ prop= RNA_def_property(srna, "color_mode", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_items(prop, prop_mode_color_items);
+ RNA_def_property_ui_text(prop, "Color Mode", "Method used to determine color of F-Curve in Graph Editor.");
+
+ prop= RNA_def_property(srna, "color", PROP_FLOAT, PROP_COLOR);
+ RNA_def_property_array(prop, 3);
+ RNA_def_property_ui_text(prop, "Color", "Color of the F-Curve in the Graph Editor.");
+
+ /* Collections */
+ prop= RNA_def_property(srna, "sampled_points", PROP_COLLECTION, PROP_NONE);
+ RNA_def_property_collection_sdna(prop, NULL, "fpt", "totvert");
+ RNA_def_property_struct_type(prop, "CurvePoint"); // XXX FPoints not BPoints here! FPoints are much smaller!
+ RNA_def_property_ui_text(prop, "Sampled Points", "Sampled animation data");
+
+ prop= RNA_def_property(srna, "keyframe_points", PROP_COLLECTION, PROP_NONE);
+ RNA_def_property_collection_sdna(prop, NULL, "bezt", "totvert");
+ RNA_def_property_struct_type(prop, "BezierCurvePoint");
+ RNA_def_property_ui_text(prop, "Keyframes", "User-editable keyframes");
+
+ prop= RNA_def_property(srna, "modifiers", PROP_COLLECTION, PROP_NONE);
+ RNA_def_property_struct_type(prop, "FModifier");
+ RNA_def_property_ui_text(prop, "Modifiers", "Modifiers affecting the shape of the F-Curve.");
+}
+
+/* *********************** */
+
+void RNA_def_fcurve(BlenderRNA *brna)
+{
+ rna_def_fcurve(brna);
+
+ rna_def_drivertarget(brna);
+ rna_def_channeldriver(brna);
+
+ rna_def_fmodifier(brna);
+
+ rna_def_fmodifier_generator(brna);
+ rna_def_fmodifier_generator_polyexpanded(brna);
+ rna_def_fmodifier_generator_function(brna);
+ rna_def_fmodifier_envelope(brna);
+ rna_def_fmodifier_cycles(brna);
+ rna_def_fmodifier_python(brna);
+ rna_def_fmodifier_limits(brna);
+ rna_def_fmodifier_noise(brna);
+}
+
+
+#endif
diff --git a/source/blender/makesrna/intern/rna_fluidsim.c b/source/blender/makesrna/intern/rna_fluidsim.c
index a8a471062f8..210024f0859 100644
--- a/source/blender/makesrna/intern/rna_fluidsim.c
+++ b/source/blender/makesrna/intern/rna_fluidsim.c
@@ -148,7 +148,7 @@ static void rna_def_fluidsim_domain(BlenderRNA *brna)
prop= RNA_def_property(srna, "gravity", PROP_FLOAT, PROP_VECTOR);
RNA_def_property_float_sdna(prop, NULL, "gravx");
RNA_def_property_array(prop, 3);
- RNA_def_property_range(prop, -1000.0, 1000.0);
+ RNA_def_property_range(prop, -1000.1, 1000.1);
RNA_def_property_ui_text(prop, "Gravity", "Gravity in X, Y and Z direction.");
prop= RNA_def_property(srna, "viscosity_preset", PROP_ENUM, PROP_NONE);
@@ -246,7 +246,7 @@ static void rna_def_fluidsim_fluid(BlenderRNA *brna)
prop= RNA_def_property(srna, "initial_velocity", PROP_FLOAT, PROP_VECTOR);
RNA_def_property_float_sdna(prop, NULL, "iniVelx");
RNA_def_property_array(prop, 3);
- RNA_def_property_range(prop, -1000.0, 1000.0);
+ RNA_def_property_range(prop, -1000.1, 1000.1);
RNA_def_property_ui_text(prop, "Initial Velocity", "Initial velocity of fluid.");
}
@@ -282,7 +282,7 @@ static void rna_def_fluidsim_inflow(BlenderRNA *brna)
prop= RNA_def_property(srna, "inflow_velocity", PROP_FLOAT, PROP_VECTOR);
RNA_def_property_float_sdna(prop, NULL, "iniVelx");
RNA_def_property_array(prop, 3);
- RNA_def_property_range(prop, -1000.0, 1000.0);
+ RNA_def_property_range(prop, -1000.1, 1000.1);
RNA_def_property_ui_text(prop, "Inflow Velocity", "Initial velocity of fluid.");
prop= RNA_def_property(srna, "local_coordinates", PROP_BOOLEAN, PROP_NONE);
@@ -359,22 +359,22 @@ static void rna_def_fluidsim_control(BlenderRNA *brna)
prop= RNA_def_property(srna, "attraction_strength", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "attractforceStrength");
- RNA_def_property_range(prop, 0.0, 2.0);
+ RNA_def_property_range(prop, -10.0, 10.0);
RNA_def_property_ui_text(prop, "Attraction Strength", "Force strength for directional attraction towards the control object.");
prop= RNA_def_property(srna, "attraction_radius", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "attractforceRadius");
- RNA_def_property_range(prop, 0.0, 5.0);
+ RNA_def_property_range(prop, 0.0, 10.0);
RNA_def_property_ui_text(prop, "Attraction Radius", "Specifies the force field radius around the control object.");
prop= RNA_def_property(srna, "velocity_strength", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "velocityforceStrength");
- RNA_def_property_range(prop, 0.0, 2.0);
+ RNA_def_property_range(prop, 0.0, 10.0);
RNA_def_property_ui_text(prop, "Velocity Strength", "Force strength of how much of the control object's velocity is influencing the fluid velocity.");
prop= RNA_def_property(srna, "velocity_radius", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "velocityforceRadius");
- RNA_def_property_range(prop, 0.0, 2.0);
+ RNA_def_property_range(prop, 0.0, 10.0);
RNA_def_property_ui_text(prop, "Velocity Radius", "Specifies the force field radius around the control object.");
prop= RNA_def_property(srna, "quality", PROP_FLOAT, PROP_NONE);
diff --git a/source/blender/makesrna/intern/rna_image.c b/source/blender/makesrna/intern/rna_image.c
index 2e8659fd881..a4a1636d212 100644
--- a/source/blender/makesrna/intern/rna_image.c
+++ b/source/blender/makesrna/intern/rna_image.c
@@ -158,12 +158,12 @@ static void rna_def_image(BlenderRNA *brna)
prop= RNA_def_property(srna, "generated_width", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "gen_x");
- RNA_def_property_range(prop, 1, 5000);
+ RNA_def_property_range(prop, 1, 16384);
RNA_def_property_ui_text(prop, "Generated Width", "Generated image width.");
prop= RNA_def_property(srna, "generated_height", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "gen_y");
- RNA_def_property_range(prop, 1, 5000);
+ RNA_def_property_range(prop, 1, 16384);
RNA_def_property_ui_text(prop, "Generated Height", "Generated image height.");
/* realtime properties */
diff --git a/source/blender/makesrna/intern/rna_internal.h b/source/blender/makesrna/intern/rna_internal.h
index 4101291e825..04779c035d0 100644
--- a/source/blender/makesrna/intern/rna_internal.h
+++ b/source/blender/makesrna/intern/rna_internal.h
@@ -34,10 +34,26 @@ struct SDNA;
/* Data structures used during define */
+typedef struct ContainerDefRNA {
+ void *next, *prev;
+
+ ContainerRNA *cont;
+ ListBase properties;
+} ContainerDefRNA;
+
+typedef struct FunctionDefRNA {
+ ContainerDefRNA cont;
+
+ FunctionRNA *func;
+ const char *srna;
+ const char *call;
+ const char *gencall;
+} FunctionDefRNA;
+
typedef struct PropertyDefRNA {
struct PropertyDefRNA *next, *prev;
- struct StructRNA *srna;
+ struct ContainerRNA *cont;
struct PropertyRNA *prop;
/* struct */
@@ -61,7 +77,7 @@ typedef struct PropertyDefRNA {
} PropertyDefRNA;
typedef struct StructDefRNA {
- struct StructDefRNA *next, *prev;
+ ContainerDefRNA cont;
struct StructRNA *srna;
const char *filename;
@@ -72,7 +88,7 @@ typedef struct StructDefRNA {
const char *dnafromname;
const char *dnafromprop;
- ListBase properties;
+ ListBase functions;
} StructDefRNA;
typedef struct AllocDefRNA {
@@ -109,6 +125,7 @@ void RNA_def_context(struct BlenderRNA *brna);
void RNA_def_controller(struct BlenderRNA *brna);
void RNA_def_curve(struct BlenderRNA *brna);
void RNA_def_fluidsim(struct BlenderRNA *brna);
+void RNA_def_fcurve(struct BlenderRNA *brna);
void RNA_def_gameproperty(struct BlenderRNA *brna);
void RNA_def_group(struct BlenderRNA *brna);
void RNA_def_image(struct BlenderRNA *brna);
@@ -138,12 +155,15 @@ void RNA_def_text(struct BlenderRNA *brna);
void RNA_def_texture(struct BlenderRNA *brna);
void RNA_def_timeline_marker(struct BlenderRNA *brna);
void RNA_def_sound(struct BlenderRNA *brna);
+void RNA_def_ui(struct BlenderRNA *brna);
void RNA_def_userdef(struct BlenderRNA *brna);
void RNA_def_vfont(struct BlenderRNA *brna);
void RNA_def_vpaint(struct BlenderRNA *brna);
void RNA_def_wm(struct BlenderRNA *brna);
void RNA_def_world(struct BlenderRNA *brna);
+/* Common Define functions */
+
void rna_def_animdata_common(struct StructRNA *srna);
void rna_def_texmat_common(struct StructRNA *srna, const char *texspace_editable);
@@ -153,7 +173,9 @@ void rna_ID_name_get(struct PointerRNA *ptr, char *value);
int rna_ID_name_length(struct PointerRNA *ptr);
void rna_ID_name_set(struct PointerRNA *ptr, const char *value);
struct StructRNA *rna_ID_refine(struct PointerRNA *ptr);
+struct IDProperty *rna_ID_idproperties(struct PointerRNA *ptr, int create);
void rna_ID_fake_user_set(struct PointerRNA *ptr, int value);
+struct IDProperty *rna_IDPropertyGroup_idproperties(struct PointerRNA *ptr, int create);
void rna_object_vgroup_name_index_get(struct PointerRNA *ptr, char *value, int index);
int rna_object_vgroup_name_index_length(struct PointerRNA *ptr, int index);
@@ -162,6 +184,10 @@ void rna_object_vgroup_name_set(struct PointerRNA *ptr, const char *value, char
void rna_object_uvlayer_name_set(struct PointerRNA *ptr, const char *value, char *result, int maxlen);
void rna_object_vcollayer_name_set(struct PointerRNA *ptr, const char *value, char *result, int maxlen);
+/* API functions */
+
+void RNA_api_ui_layout(struct StructRNA *srna);
+
/* ID Properties */
extern StringPropertyRNA rna_IDProperty_string;
@@ -177,7 +203,6 @@ extern FloatPropertyRNA rna_IDProperty_double_array;
extern StructRNA RNA_IDProperty;
extern StructRNA RNA_IDPropertyGroup;
-struct IDProperty *rna_idproperties_get(struct PointerRNA *ptr, int create);
struct IDProperty *rna_idproperty_check(struct PropertyRNA **prop, struct PointerRNA *ptr);
/* Builtin Property Callbacks */
@@ -221,10 +246,18 @@ void rna_addtail(struct ListBase *listbase, void *vlink);
void rna_freelinkN(struct ListBase *listbase, void *vlink);
void rna_freelistN(struct ListBase *listbase);
+StructDefRNA *rna_find_struct_def(StructRNA *srna);
+FunctionDefRNA *rna_find_function_def(FunctionRNA *func);
+PropertyDefRNA *rna_find_parameter_def(PropertyRNA *parm);
+
/* Pointer Handling */
PointerRNA rna_pointer_inherit_refine(struct PointerRNA *ptr, struct StructRNA *type, void *data);
+/* Functions */
+
+int rna_parameter_size(struct PropertyRNA *parm);
+
#endif /* RNA_INTERNAL_H */
diff --git a/source/blender/makesrna/intern/rna_internal_types.h b/source/blender/makesrna/intern/rna_internal_types.h
index bc0c2a07b35..f7292bdce48 100644
--- a/source/blender/makesrna/intern/rna_internal_types.h
+++ b/source/blender/makesrna/intern/rna_internal_types.h
@@ -28,11 +28,15 @@
#include "DNA_listBase.h"
struct BlenderRNA;
+struct ContainerRNA;
struct StructRNA;
struct PropertyRNA;
struct PointerRNA;
+struct FunctionRNA;
+struct ReportList;
struct CollectionPropertyIterator;
struct bContext;
+struct IDProperty;
#define RNA_MAX_ARRAY 32
@@ -40,6 +44,7 @@ struct bContext;
typedef void (*UpdateFunc)(struct bContext *C, struct PointerRNA *ptr);
typedef int (*EditableFunc)(struct PointerRNA *ptr);
+typedef struct IDProperty* (*IDPropertiesFunc)(struct PointerRNA *ptr, int create);
typedef struct StructRNA *(*StructRefineFunc)(struct PointerRNA *ptr);
typedef char *(*StructPathFunc)(struct PointerRNA *ptr);
@@ -72,6 +77,40 @@ typedef int (*PropCollectionLengthFunc)(struct PointerRNA *ptr);
typedef PointerRNA (*PropCollectionLookupIntFunc)(struct PointerRNA *ptr, int key);
typedef PointerRNA (*PropCollectionLookupStringFunc)(struct PointerRNA *ptr, const char *key);
+/* Container - generic abstracted container of RNA properties */
+typedef struct ContainerRNA {
+ void *next, *prev;
+
+ ListBase properties;
+} ContainerRNA;
+
+struct ParameterList {
+ /* storage for parameters */
+ void *data;
+
+ /* function passed at creation time */
+ FunctionRNA *func;
+};
+
+struct FunctionRNA {
+ /* structs are containers of properties */
+ ContainerRNA cont;
+
+ /* unique identifier */
+ const char *identifier;
+ /* various options */
+ int flag;
+
+ /* single line description, displayed in the tooltip for example */
+ const char *description;
+
+ /* callback to execute the function */
+ CallFunc call;
+
+ /* parameter for the return value */
+ PropertyRNA *ret;
+};
+
struct PropertyRNA {
struct PropertyRNA *next, *prev;
@@ -207,11 +246,13 @@ typedef struct CollectionPropertyRNA {
/* changes to this struct require updating rna_generate_struct in makesrna.c */
struct StructRNA {
- struct StructRNA *next, *prev;
+ /* structs are containers of properties */
+ ContainerRNA cont;
/* python type, this is a subtype of pyrna_struct_Type but used so each struct can have its own type
* which is useful for subclassing RNA */
void *py_type;
+ void *blender_type;
/* unique identifier */
const char *identifier;
@@ -244,8 +285,15 @@ struct StructRNA {
/* function to find path to this struct in an ID */
StructPathFunc path;
- /* properties of this struct */
- ListBase properties;
+ /* function to register/unregister subclasses */
+ StructRegisterFunc reg;
+ StructUnregisterFunc unreg;
+
+ /* callback to get id properties */
+ IDPropertiesFunc idproperties;
+
+ /* functions of this struct */
+ ListBase functions;
};
/* Blender RNA
diff --git a/source/blender/makesrna/intern/rna_lamp.c b/source/blender/makesrna/intern/rna_lamp.c
index 202d1af9154..b3baac88702 100644
--- a/source/blender/makesrna/intern/rna_lamp.c
+++ b/source/blender/makesrna/intern/rna_lamp.c
@@ -189,7 +189,7 @@ static void rna_def_lamp_sky_settings(BlenderRNA *brna)
RNA_def_property_update(prop, NC_LAMP|ND_SKY, NULL);
prop= RNA_def_property(srna, "backscattered_light", PROP_FLOAT, PROP_NONE);
- RNA_def_property_range(prop, 0.0f, 1.0f);
+ RNA_def_property_range(prop, -1.0f, 1.0f);
RNA_def_property_ui_text(prop, "Backscattered Light", "Backscattered light.");
RNA_def_property_update(prop, NC_LAMP|ND_SKY, NULL);
@@ -200,7 +200,7 @@ static void rna_def_lamp_sky_settings(BlenderRNA *brna)
prop= RNA_def_property(srna, "atmosphere_turbidity", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "atm_turbidity");
- RNA_def_property_range(prop, 0.0f, 30.0f);
+ RNA_def_property_range(prop, 1.0f, 30.0f);
RNA_def_property_ui_text(prop, "Atmosphere Turbidity", "Sky turbidity.");
RNA_def_property_update(prop, NC_LAMP|ND_SKY, NULL);
@@ -252,7 +252,7 @@ static void rna_def_lamp(BlenderRNA *brna)
PropertyRNA *prop;
static EnumPropertyItem prop_type_items[] = {
- {LA_LOCAL, "LOCAL", "Local", "Omnidirectional point light source."},
+ {LA_LOCAL, "POINT", "Point", "Omnidirectional point light source."},
{LA_SUN, "SUN", "Sun", "Constant direction parallel ray light source."},
{LA_SPOT, "SPOT", "Spot", "Directional cone light source."},
{LA_HEMI, "HEMI", "Hemi", "180 degree constant light source."},
@@ -270,7 +270,7 @@ static void rna_def_lamp(BlenderRNA *brna)
prop= RNA_def_property(srna, "distance", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "dist");
- RNA_def_property_range(prop, 0.0f, 9999.0f);
+ RNA_def_property_range(prop, 0.01f, 5000.0f);
RNA_def_property_ui_text(prop, "Distance", "Falloff distance - the light is at half the original intensity at this point.");
RNA_def_property_update(prop, NC_LAMP|ND_LIGHTING_DRAW, NULL);
@@ -372,10 +372,15 @@ static void rna_def_lamp_shadow(StructRNA *srna, int spot, int area)
{0, NULL, NULL, NULL}};
static EnumPropertyItem prop_ray_sampling_method_items[] = {
- {LA_SAMP_CONSTANT, "CONSTANT_JITTERED", "Constant Jittered", ""},
{LA_SAMP_HALTON, "ADAPTIVE_QMC", "Adaptive QMC", ""},
{LA_SAMP_HAMMERSLEY, "CONSTANT_QMC", "Constant QMC", ""},
{0, NULL, NULL, NULL}};
+
+ static EnumPropertyItem prop_spot_ray_sampling_method_items[] = {
+ {LA_SAMP_HALTON, "ADAPTIVE_QMC", "Adaptive QMC", ""},
+ {LA_SAMP_HAMMERSLEY, "CONSTANT_QMC", "Constant QMC", ""},
+ {LA_SAMP_CONSTANT, "CONSTANT_JITTERED", "Constant Jittered", ""},
+ {0, NULL, NULL, NULL}};
prop= RNA_def_property(srna, "shadow_method", PROP_ENUM, PROP_NONE);
@@ -397,7 +402,7 @@ static void rna_def_lamp_shadow(StructRNA *srna, int spot, int area)
prop= RNA_def_property(srna, "shadow_ray_sampling_method", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "ray_samp_method");
- RNA_def_property_enum_items(prop, prop_ray_sampling_method_items);
+ RNA_def_property_enum_items(prop, (area)? prop_spot_ray_sampling_method_items: prop_ray_sampling_method_items);
RNA_def_property_ui_text(prop, "Shadow Ray Sampling Method", "Method for generating shadow samples: Adaptive QMC is fastest, Constant QMC is less noisy but slower.");
RNA_def_property_update(prop, NC_LAMP|ND_LIGHTING, NULL);
@@ -508,8 +513,8 @@ static void rna_def_spot_lamp(BlenderRNA *brna)
static EnumPropertyItem prop_shadbuftype_items[] = {
{LA_SHADBUF_REGULAR , "REGULAR", "Classical", "Classic shadow buffer."},
- {LA_SHADBUF_IRREGULAR, "IRREGULAR", "Irregular", "Irregular buffer produces sharp shadow always, but it doesn't show up for raytracing."},
{LA_SHADBUF_HALFWAY, "HALFWAY", "Classic-Halfway", "Regular buffer, averaging the closest and 2nd closest Z value to reducing bias artifaces."},
+ {LA_SHADBUF_IRREGULAR, "IRREGULAR", "Irregular", "Irregular buffer produces sharp shadow always, but it doesn't show up for raytracing."},
{0, NULL, NULL, NULL}};
static EnumPropertyItem prop_shadbuffiltertype_items[] = {
diff --git a/source/blender/makesrna/intern/rna_material.c b/source/blender/makesrna/intern/rna_material.c
index 34a7ea7d1e9..101cd2a801f 100644
--- a/source/blender/makesrna/intern/rna_material.c
+++ b/source/blender/makesrna/intern/rna_material.c
@@ -62,14 +62,14 @@ static PointerRNA rna_Material_strand_get(PointerRNA *ptr)
return rna_pointer_inherit_refine(ptr, &RNA_MaterialStrand, ptr->id.data);
}
-static void rna_Material_mode_halo_set(PointerRNA *ptr, int value)
+static void rna_Material_type_set(PointerRNA *ptr, int value)
{
Material *ma= (Material*)ptr->data;
-
- if(value)
- ma->mode |= MA_HALO;
- else
- ma->mode &= ~(MA_HALO|MA_STAR|MA_HALO_XALPHA|MA_ZINV|MA_ENV);
+
+ if(ma->material_type == MA_TYPE_HALO && value != MA_TYPE_HALO)
+ ma->mode &= ~(MA_STAR|MA_HALO_XALPHA|MA_ZINV|MA_ENV);
+
+ ma->material_type= value;
}
static void rna_Material_mtex_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
@@ -178,7 +178,7 @@ static void rna_def_material_mtex(BlenderRNA *brna)
RNA_def_property_enum_items(prop, prop_mapping_items);
RNA_def_property_ui_text(prop, "Mapping", "");
- /* XXX: MTex.colormodel, pmapto, pmaptoneg */
+ /* XXX: pmapto, pmaptoneg */
prop= RNA_def_property(srna, "normal_map_space", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "normapspace");
@@ -204,18 +204,6 @@ static void rna_def_material_colors(StructRNA *srna)
{
PropertyRNA *prop;
- static EnumPropertyItem prop_type_items[] = {
- {MA_RGB, "RGB", "RGB", ""},
- // {MA_CMYK, "CMYK", "CMYK", ""},
- // {MA_YUV, "YUV", "YUV", ""},
- {MA_HSV, "HSV", "HSV", ""},
- {0, NULL, NULL, NULL}};
-
- prop= RNA_def_property(srna, "color_model", PROP_ENUM, PROP_NONE);
- RNA_def_property_enum_sdna(prop, NULL, "colormodel");
- RNA_def_property_enum_items(prop, prop_type_items);
- RNA_def_property_ui_text(prop, "Color Model", "Color model to display color values with in the user interface.");
-
prop= RNA_def_property(srna, "diffuse_color", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "r");
RNA_def_property_array(prop, 3);
@@ -466,12 +454,6 @@ static void rna_def_material_halo(BlenderRNA *brna)
RNA_def_struct_nested(brna, srna, "Material");
RNA_def_struct_ui_text(srna, "Material Halo", "Halo particle effect settings for a Material datablock.");
- prop= RNA_def_property(srna, "enabled", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_HALO); /* use bitflags */
- RNA_def_property_ui_text(prop, "Enabled", "Enables halo rendering of material.");
- RNA_def_property_boolean_funcs(prop, NULL, "rna_Material_mode_halo_set");
- RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING_DRAW, NULL);
-
prop= RNA_def_property(srna, "size", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "hasize");
RNA_def_property_range(prop, 0.0f, 100.0f);
@@ -600,7 +582,7 @@ static void rna_def_material_sss(BlenderRNA *brna)
RNA_def_struct_nested(brna, srna, "Material");
RNA_def_struct_ui_text(srna, "Material Subsurface Scattering", "Diffuse subsurface scattering settings for a Material datablock.");
- prop= RNA_def_property(srna, "radius", PROP_FLOAT, PROP_COLOR);
+ prop= RNA_def_property(srna, "radius", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "sss_radius");
RNA_def_property_range(prop, 0.001, FLT_MAX);
RNA_def_property_ui_range(prop, 0.001, 10000, 1, 3);
@@ -737,12 +719,25 @@ void rna_def_material_strand(BlenderRNA *brna)
void RNA_def_material(BlenderRNA *brna)
{
- StructRNA *srna= NULL;
- PropertyRNA *prop= NULL;
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ static EnumPropertyItem prop_type_items[] = {
+ {MA_TYPE_SURFACE, "SURFACE", "Surface", "Render object as a surface."},
+ {MA_TYPE_VOLUME, "VOLUME", "Volume", "Render object as a volume."},
+ {MA_TYPE_HALO, "HALO", "Halo", "Render object as halo particles."},
+ {0, NULL, NULL, NULL}};
srna= RNA_def_struct(brna, "Material", "ID");
RNA_def_struct_ui_text(srna, "Material", "Material datablock to defined the appearance of geometric objects for rendering.");
-
+
+ prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "material_type");
+ RNA_def_property_enum_items(prop, prop_type_items);
+ RNA_def_property_ui_text(prop, "Type", "Material type defining how the object is rendered.");
+ RNA_def_property_enum_funcs(prop, NULL, "rna_Material_type_set");
+ RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING_DRAW, NULL);
+
prop= RNA_def_property(srna, "ambient", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "amb");
RNA_def_property_range(prop, 0, 1);
diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c
index 5c609550d3f..3263c6d4bfc 100644
--- a/source/blender/makesrna/intern/rna_modifier.c
+++ b/source/blender/makesrna/intern/rna_modifier.c
@@ -40,6 +40,39 @@
#include "WM_types.h"
+EnumPropertyItem modifier_type_items[] ={
+ {eModifierType_Subsurf, "SUBSURF", "Subsurf", ""},
+ {eModifierType_Lattice, "LATTICE", "Lattice", ""},
+ {eModifierType_Curve, "CURVE", "Curve", ""},
+ {eModifierType_Build, "BUILD", "Build", ""},
+ {eModifierType_Mirror, "MIRROR", "Mirror", ""},
+ {eModifierType_Decimate, "DECIMATE", "Decimate", ""},
+ {eModifierType_Wave, "WAVE", "Wave", ""},
+ {eModifierType_Armature, "ARMATURE", "Armature", ""},
+ {eModifierType_Hook, "HOOK", "Hook", ""},
+ {eModifierType_Softbody, "SOFTBODY", "Softbody", ""},
+ {eModifierType_Boolean, "BOOLEAN", "Boolean", ""},
+ {eModifierType_Array, "ARRAY", "Array", ""},
+ {eModifierType_EdgeSplit, "EDGE_SPLIT", "Edge Split", ""},
+ {eModifierType_Displace, "DISPLACE", "Displace", ""},
+ {eModifierType_UVProject, "UV_PROJECT", "UV Project", ""},
+ {eModifierType_Smooth, "SMOOTH", "Smooth", ""},
+ {eModifierType_Cast, "CAST", "Cast", ""},
+ {eModifierType_MeshDeform, "MESH_DEFORM", "Mesh Deform", ""},
+ {eModifierType_ParticleSystem, "PARTICLE_SYSTEM", "Particle System", ""},
+ {eModifierType_ParticleInstance, "PARTICLE_INSTANCE", "Particle Instance", ""},
+ {eModifierType_Explode, "EXPLODE", "Explode", ""},
+ {eModifierType_Cloth, "CLOTH", "Cloth", ""},
+ {eModifierType_Collision, "COLLISION", "Collision", ""},
+ {eModifierType_Bevel, "BEVEL", "Bevel", ""},
+ {eModifierType_Shrinkwrap, "SHRINKWRAP", "Shrinkwrap", ""},
+ {eModifierType_Fluidsim, "FLUID_SIMULATION", "Fluid Simulation", ""},
+ {eModifierType_Mask, "MASK", "Mask", ""},
+ {eModifierType_SimpleDeform, "SIMPLE_DEFORM", "Simple Deform", ""},
+ {eModifierType_Multires, "MULTIRES", "Multires", ""},
+ {0, NULL, NULL, NULL}};
+
+
#ifdef RNA_RUNTIME
#include "BKE_context.h"
@@ -634,10 +667,10 @@ static void rna_def_modifier_armature(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Armature Modifier", "Armature deformation modifier.");
RNA_def_struct_sdna(srna, "ArmatureModifierData");
- prop= RNA_def_property(srna, "armature", PROP_POINTER, PROP_NONE);
+ prop= RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "object");
RNA_def_property_struct_type(prop, "Object");
- RNA_def_property_ui_text(prop, "Armature", "Armature object to deform with.");
+ RNA_def_property_ui_text(prop, "Object", "Armature object to deform with.");
RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Modifier_update");
prop= RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
@@ -668,7 +701,12 @@ static void rna_def_modifier_armature(BlenderRNA *brna)
prop= RNA_def_property(srna, "b_bone_rest", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "deformflag", ARM_DEF_B_BONE_REST);
- RNA_def_property_ui_text(prop, "Quaternion", "Make B-Bones deform already in rest position");
+ RNA_def_property_ui_text(prop, "B-Bone Rest", "Make B-Bones deform already in rest position");
+ RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Modifier_update");
+
+ prop= RNA_def_property(srna, "multi_modifier", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "multi", 0);
+ RNA_def_property_ui_text(prop, "Multi Modifier", "Use same input as previous modifier, and mix results using overall vgroup");
RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Modifier_update");
}
@@ -1524,38 +1562,6 @@ void RNA_def_modifier(BlenderRNA *brna)
StructRNA *srna;
PropertyRNA *prop;
- static EnumPropertyItem type_items[] ={
- {eModifierType_Subsurf, "SUBSURF", "Subsurf", ""},
- {eModifierType_Lattice, "LATTICE", "Lattice", ""},
- {eModifierType_Curve, "CURVE", "Curve", ""},
- {eModifierType_Build, "BUILD", "Build", ""},
- {eModifierType_Mirror, "MIRROR", "Mirror", ""},
- {eModifierType_Decimate, "DECIMATE", "Decimate", ""},
- {eModifierType_Wave, "WAVE", "Wave", ""},
- {eModifierType_Armature, "ARMATURE", "Armature", ""},
- {eModifierType_Hook, "HOOK", "Hook", ""},
- {eModifierType_Softbody, "SOFTBODY", "Softbody", ""},
- {eModifierType_Boolean, "BOOLEAN", "Boolean", ""},
- {eModifierType_Array, "ARRAY", "Array", ""},
- {eModifierType_EdgeSplit, "EDGE_SPLIT", "Edge Split", ""},
- {eModifierType_Displace, "DISPLACE", "Displace", ""},
- {eModifierType_UVProject, "UV_PROJECT", "UV Project", ""},
- {eModifierType_Smooth, "SMOOTH", "Smooth", ""},
- {eModifierType_Cast, "CAST", "Cast", ""},
- {eModifierType_MeshDeform, "MESH_DEFORM", "Mesh Deform", ""},
- {eModifierType_ParticleSystem, "PARTICLE_SYSTEM", "Particle System", ""},
- {eModifierType_ParticleInstance, "PARTICLE_INSTANCE", "Particle Instance", ""},
- {eModifierType_Explode, "EXPLODE", "Explode", ""},
- {eModifierType_Cloth, "CLOTH", "Cloth", ""},
- {eModifierType_Collision, "COLLISION", "Collision", ""},
- {eModifierType_Bevel, "BEVEL", "Bevel", ""},
- {eModifierType_Shrinkwrap, "SHRINKWRAP", "Shrinkwrap", ""},
- {eModifierType_Fluidsim, "FLUID_SIMULATION", "Fluid Simulation", ""},
- {eModifierType_Mask, "MASK", "Mask", ""},
- {eModifierType_SimpleDeform, "SIMPLE_DEFORM", "Simple Deform", ""},
- {eModifierType_SimpleDeform, "MULTIRES", "Multires", ""},
- {0, NULL, NULL, NULL}};
-
/* data */
srna= RNA_def_struct(brna, "Modifier", NULL);
RNA_def_struct_ui_text(srna , "Modifier", "Modifier affecting the geometry data of an object.");
@@ -1571,7 +1577,7 @@ void RNA_def_modifier(BlenderRNA *brna)
prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_enum_sdna(prop, NULL, "type");
- RNA_def_property_enum_items(prop, type_items);
+ RNA_def_property_enum_items(prop, modifier_type_items);
RNA_def_property_ui_text(prop, "Type", "");
/* flags */
diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c
index 6fb6a67650f..be3e429c1a2 100644
--- a/source/blender/makesrna/intern/rna_nodetree.c
+++ b/source/blender/makesrna/intern/rna_nodetree.c
@@ -252,7 +252,7 @@ static void def_vector_curve(BlenderRNA *brna, int id)
static void def_val_to_rgb(BlenderRNA *brna, int id)
{
StructRNA *srna;
- PropertyRNA *prop;
+// PropertyRNA *prop;
srna= def_node(brna, id);
@@ -512,7 +512,7 @@ void RNA_def_nodetree(BlenderRNA *brna)
rna_def_texture_node(brna);
#define DefNode(Category, ID, DefFunc, EnumName, StructName, UIName, UIDesc) \
- define_specific_node(brna, ID, DefFunc ? DefFunc : define_simple_node);
+ define_specific_node(brna, ID, DefFunc != 0 ? DefFunc : define_simple_node);
#include "rna_nodetree_types.h"
diff --git a/source/blender/makesrna/intern/rna_object.c b/source/blender/makesrna/intern/rna_object.c
index 534f1ea0e98..cbc80e68b4a 100644
--- a/source/blender/makesrna/intern/rna_object.c
+++ b/source/blender/makesrna/intern/rna_object.c
@@ -48,6 +48,12 @@ static void rna_Object_update(bContext *C, PointerRNA *ptr)
DAG_object_flush_update(CTX_data_scene(C), ptr->id.data, OB_RECALC_OB);
}
+static void rna_Object_scene_update(bContext *C, PointerRNA *ptr)
+{
+ DAG_object_flush_update(CTX_data_scene(C), ptr->id.data, OB_RECALC_OB);
+ DAG_scene_sort(CTX_data_scene(C));
+}
+
static int rna_VertexGroup_index_get(PointerRNA *ptr)
{
Object *ob= (Object*)ptr->id.data;
@@ -436,6 +442,20 @@ static StructRNA *rna_def_object(BlenderRNA *brna)
{PARVERT3, "VERTEX_3", "3 Vertices", ""},
{PARBONE, "BONE", "Bone", ""},
{0, NULL, NULL, NULL}};
+
+ static EnumPropertyItem object_type_items[] = {
+ {OB_EMPTY, "EMPTY", "Empty", ""},
+ {OB_MESH, "MESH", "Mesh", ""},
+ {OB_CURVE, "CURVE", "Curve", ""},
+ {OB_SURF, "SURFACE", "Surface", ""},
+ {OB_FONT, "TEXT", "Text", ""},
+ {OB_MBALL, "META", "Meta", ""},
+ {OB_LAMP, "LAMP", "Lamp", ""},
+ {OB_CAMERA, "CAMERA", "Camera", ""},
+ {OB_WAVE, "WAVE", "Wave", ""},
+ {OB_LATTICE, "LATTICE", "Lattice", ""},
+ {OB_ARMATURE, "ARMATURE", "Armature", ""},
+ {0, NULL, NULL, NULL}};
static EnumPropertyItem empty_drawtype_items[] = {
{OB_ARROWS, "ARROWS", "Arrows", ""},
@@ -483,6 +503,14 @@ static StructRNA *rna_def_object(BlenderRNA *brna)
{1, "OBJECT", "Object", ""},
{0, NULL, NULL, NULL}};
+ static EnumPropertyItem dupli_items[] = {
+ {0, "NONE", "None", ""},
+ {OB_DUPLIFRAMES, "FRAMES", "Frames", "Make copy of object for every frame."},
+ {OB_DUPLIVERTS, "VERTS", "Verts", "Duplicate child objects on all vertices."},
+ {OB_DUPLIFACES, "FACES", "Faces", "Duplicate child objects on all faces."},
+ {OB_DUPLIGROUP, "GROUP", "Group", "Enable group instancing."},
+ {0, NULL, NULL, NULL}};
+
srna= RNA_def_struct(brna, "Object", "ID");
RNA_def_struct_ui_text(srna, "Object", "Object datablock defining an object in a scene..");
@@ -505,8 +533,14 @@ static StructRNA *rna_def_object(BlenderRNA *brna)
prop= RNA_def_property(srna, "parent", PROP_POINTER, PROP_NONE);
RNA_def_property_ui_text(prop, "Parent", "Parent Object");
+ prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "type");
+ RNA_def_property_enum_items(prop, object_type_items);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_ui_text(prop, "Type", "Type of Object.");
+
prop= RNA_def_property(srna, "parent_type", PROP_ENUM, PROP_NONE);
- RNA_def_property_enum_bitflag_sdna(prop, NULL, "partype");
+ RNA_def_property_enum_sdna(prop, NULL, "partype");
RNA_def_property_enum_items(prop, parent_type_items);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Parent Type", "Type of parent relation.");
@@ -646,11 +680,13 @@ static StructRNA *rna_def_object(BlenderRNA *brna)
RNA_def_property_enum_sdna(prop, NULL, "empty_drawtype");
RNA_def_property_enum_items(prop, empty_drawtype_items);
RNA_def_property_ui_text(prop, "Empty Draw Type", "Viewport display style for empties.");
+ RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
prop= RNA_def_property(srna, "empty_draw_size", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "empty_drawsize");
RNA_def_property_range(prop, 0.01, 10.0);
RNA_def_property_ui_text(prop, "Empty Draw Size", "Size of of display for empties in the viewport.");
+ RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
/* render */
@@ -720,25 +756,11 @@ static StructRNA *rna_def_object(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "partype", PARSLOW);
RNA_def_property_ui_text(prop, "Slow Parent", "Create a delay in the parent relationship.");
- prop= RNA_def_property(srna, "dupli_frames", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "transflag", OB_DUPLIFRAMES);
- RNA_def_property_clear_flag(prop, PROP_EDITABLE); // clear other flags
- RNA_def_property_ui_text(prop, "Dupli Frames", "Make copy of object for every frame.");
-
- prop= RNA_def_property(srna, "dupli_verts", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "transflag", OB_DUPLIVERTS);
- RNA_def_property_clear_flag(prop, PROP_EDITABLE); // clear other flags
- RNA_def_property_ui_text(prop, "Dupli Verts", "Duplicate child objects on all vertices.");
-
- prop= RNA_def_property(srna, "dupli_faces", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "transflag", OB_DUPLIFACES);
- RNA_def_property_clear_flag(prop, PROP_EDITABLE); // clear other flags
- RNA_def_property_ui_text(prop, "Dupli Faces", "Duplicate child objects on all faces.");
-
- prop= RNA_def_property(srna, "use_dupli_group", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "transflag", OB_DUPLIGROUP);
- RNA_def_property_clear_flag(prop, PROP_EDITABLE); // clear other flags
- RNA_def_property_ui_text(prop, "Use Dupli Group", "Enable group instancing.");
+ prop= RNA_def_property(srna, "dupli_type", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_bitflag_sdna(prop, NULL, "transflag");
+ RNA_def_property_enum_items(prop, dupli_items);
+ RNA_def_property_ui_text(prop, "Dupli Type", "If not None, object duplication method to use.");
+ RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Object_scene_update");
prop= RNA_def_property(srna, "dupli_frames_no_speed", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "transflag", OB_DUPLINOSPEED);
diff --git a/source/blender/makesrna/intern/rna_particle.c b/source/blender/makesrna/intern/rna_particle.c
index 7de0b4e3400..2b65f890bd2 100644
--- a/source/blender/makesrna/intern/rna_particle.c
+++ b/source/blender/makesrna/intern/rna_particle.c
@@ -599,11 +599,6 @@ static void rna_def_particle_settings(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "draw", PART_DRAW_EMITTER);
RNA_def_property_ui_text(prop, "Emitter", "Render emitter Object also.");
- //could not find this one in the UI - should this be read only?
- prop= RNA_def_property(srna, "keys", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "draw", PART_DRAW_KEYS);
- RNA_def_property_ui_text(prop, "Keys", "");
-
/* used?
prop= RNA_def_property(srna, "adapt", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "draw", PART_DRAW_ADAPT);
diff --git a/source/blender/makesrna/intern/rna_pose.c b/source/blender/makesrna/intern/rna_pose.c
index f7964ba52ef..5aad710c712 100644
--- a/source/blender/makesrna/intern/rna_pose.c
+++ b/source/blender/makesrna/intern/rna_pose.c
@@ -41,12 +41,25 @@
#include "BKE_context.h"
#include "BKE_depsgraph.h"
+#include "BKE_idprop.h"
static void rna_Pose_update(bContext *C, PointerRNA *ptr)
{
DAG_object_flush_update(CTX_data_scene(C), ptr->id.data, OB_RECALC_DATA);
}
+IDProperty *rna_PoseChannel_idproperties(PointerRNA *ptr, int create)
+{
+ bPoseChannel *pchan= ptr->data;
+
+ if(create && !pchan->prop) {
+ IDPropertyTemplate val = {0};
+ pchan->prop= IDP_New(IDP_GROUP, val, "RNA_PoseChannel group");
+ }
+
+ return pchan->prop;
+}
+
#else
/* users shouldn't be editing pose channel data directly -- better to set ipos and let blender calc pose_channel stuff */
@@ -66,6 +79,7 @@ static void rna_def_pose_channel(BlenderRNA *brna)
srna= RNA_def_struct(brna, "PoseChannel", NULL);
RNA_def_struct_sdna(srna, "bPoseChannel");
RNA_def_struct_ui_text(srna, "Pose Channel", "Channel defining pose data for a bone in a Pose.");
+ RNA_def_struct_idproperties_func(srna, "rna_PoseChannel_idproperties");
prop= RNA_def_property(srna, "constraints", PROP_COLLECTION, PROP_NONE);
RNA_def_property_collection_sdna(prop, NULL, "constraints", NULL);
diff --git a/source/blender/makesrna/intern/rna_rna.c b/source/blender/makesrna/intern/rna_rna.c
index f2e3f27edad..55a0f67390e 100644
--- a/source/blender/makesrna/intern/rna_rna.c
+++ b/source/blender/makesrna/intern/rna_rna.c
@@ -87,11 +87,12 @@ static int rna_idproperty_known(CollectionPropertyIterator *iter, void *data)
{
IDProperty *idprop= (IDProperty*)data;
PropertyRNA *prop;
+ StructRNA *ptype= iter->builtin_parent.type;
/* function to skip any id properties that are already known by RNA,
* for the second loop where we go over unknown id properties */
- for(prop= iter->parent.type->properties.first; prop; prop=prop->next)
+ for(prop= ptype->cont.properties.first; prop; prop=prop->next)
if(strcmp(prop->identifier, idprop->name) == 0)
return 1;
@@ -107,7 +108,16 @@ static int rna_property_builtin(CollectionPropertyIterator *iter, void *data)
return (prop->flag & PROP_BUILTIN);
}
-static void rna_inheritance_next_level_restart(CollectionPropertyIterator *iter, IteratorSkipFunc skip)
+static int rna_function_builtin(CollectionPropertyIterator *iter, void *data)
+{
+ FunctionRNA *func= (FunctionRNA*)data;
+
+ /* function to skip builtin rna functions */
+
+ return (func->flag & FUNC_BUILTIN);
+}
+
+static void rna_inheritance_next_level_restart(CollectionPropertyIterator *iter, IteratorSkipFunc skip, int funcs)
{
/* RNA struct inheritance */
while(!iter->valid && iter->level > 0) {
@@ -120,20 +130,36 @@ static void rna_inheritance_next_level_restart(CollectionPropertyIterator *iter,
srna= srna->base;
rna_iterator_listbase_end(iter);
- rna_iterator_listbase_begin(iter, &srna->properties, skip);
+
+ if (funcs)
+ rna_iterator_listbase_begin(iter, &srna->functions, skip);
+ else
+ rna_iterator_listbase_begin(iter, &srna->cont.properties, skip);
}
}
-static void rna_inheritance_listbase_begin(CollectionPropertyIterator *iter, ListBase *lb, IteratorSkipFunc skip)
+static void rna_inheritance_properties_listbase_begin(CollectionPropertyIterator *iter, ListBase *lb, IteratorSkipFunc skip)
+{
+ rna_iterator_listbase_begin(iter, lb, skip);
+ rna_inheritance_next_level_restart(iter, skip, 0);
+}
+
+static void rna_inheritance_properties_listbase_next(CollectionPropertyIterator *iter, IteratorSkipFunc skip)
+{
+ rna_iterator_listbase_next(iter);
+ rna_inheritance_next_level_restart(iter, skip, 0);
+}
+
+static void rna_inheritance_functions_listbase_begin(CollectionPropertyIterator *iter, ListBase *lb, IteratorSkipFunc skip)
{
rna_iterator_listbase_begin(iter, lb, skip);
- rna_inheritance_next_level_restart(iter, skip);
+ rna_inheritance_next_level_restart(iter, skip, 1);
}
-static void rna_inheritance_listbase_next(CollectionPropertyIterator *iter, IteratorSkipFunc skip)
+static void rna_inheritance_functions_listbase_next(CollectionPropertyIterator *iter, IteratorSkipFunc skip)
{
rna_iterator_listbase_next(iter);
- rna_inheritance_next_level_restart(iter, skip);
+ rna_inheritance_next_level_restart(iter, skip, 1);
}
static void rna_Struct_properties_next(CollectionPropertyIterator *iter)
@@ -147,11 +173,11 @@ static void rna_Struct_properties_next(CollectionPropertyIterator *iter)
}
else {
/* regular properties */
- rna_inheritance_listbase_next(iter, rna_property_builtin);
+ rna_inheritance_properties_listbase_next(iter, rna_property_builtin);
/* try id properties */
if(!iter->valid) {
- group= rna_idproperties_get(&iter->parent, 0);
+ group= RNA_struct_idproperties(&iter->builtin_parent, 0);
if(group) {
rna_iterator_listbase_end(iter);
@@ -175,7 +201,7 @@ static void rna_Struct_properties_begin(CollectionPropertyIterator *iter, Pointe
srna= srna->base;
}
- rna_inheritance_listbase_begin(iter, &srna->properties, rna_property_builtin);
+ rna_inheritance_properties_listbase_begin(iter, &srna->cont.properties, rna_property_builtin);
}
static PointerRNA rna_Struct_properties_get(CollectionPropertyIterator *iter)
@@ -187,8 +213,37 @@ static PointerRNA rna_Struct_properties_get(CollectionPropertyIterator *iter)
return rna_pointer_inherit_refine(&iter->parent, &RNA_Property, internal->link);
}
+static void rna_Struct_functions_next(CollectionPropertyIterator *iter)
+{
+ rna_inheritance_functions_listbase_next(iter, rna_function_builtin);
+}
+
+static void rna_Struct_functions_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
+{
+ StructRNA *srna;
+
+ /* here ptr->data should always be the same as iter->parent.type */
+ srna= (StructRNA *)ptr->data;
+
+ while(srna->base) {
+ iter->level++;
+ srna= srna->base;
+ }
+
+ rna_inheritance_functions_listbase_begin(iter, &srna->functions, rna_function_builtin);
+}
+
+static PointerRNA rna_Struct_functions_get(CollectionPropertyIterator *iter)
+{
+ ListBaseIterator *internal= iter->internal;
+
+ /* we return either PropertyRNA* or IDProperty*, the rna_access.c
+ * functions can handle both as PropertyRNA* with some tricks */
+ return rna_pointer_inherit_refine(&iter->parent, &RNA_Function, internal->link);
+}
+
/* Builtin properties iterator re-uses the Struct properties iterator, only
- * difference is that we need to see the ptr data to the type of the struct
+ * difference is that we need to set the ptr data to the type of the struct
* whose properties we want to iterate over. */
void rna_builtin_properties_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
@@ -205,6 +260,7 @@ void rna_builtin_properties_begin(CollectionPropertyIterator *iter, PointerRNA *
newptr.id.data= NULL;
iter->parent= newptr;
+ iter->builtin_parent = *ptr;
rna_Struct_properties_begin(iter, &newptr);
}
@@ -313,6 +369,18 @@ static int rna_Property_array_length_get(PointerRNA *ptr)
return prop->arraylength;
}
+static int rna_Property_registered_get(PointerRNA *ptr)
+{
+ PropertyRNA *prop= (PropertyRNA*)ptr->data;
+ return prop->flag & PROP_REGISTER;
+}
+
+static int rna_Property_registered_optional_get(PointerRNA *ptr)
+{
+ PropertyRNA *prop= (PropertyRNA*)ptr->data;
+ return prop->flag & PROP_REGISTER_OPTIONAL;
+}
+
static int rna_IntProperty_hard_min_get(PointerRNA *ptr)
{
PropertyRNA *prop= (PropertyRNA*)ptr->data;
@@ -447,6 +515,45 @@ static PointerRNA rna_CollectionProperty_fixed_type_get(PointerRNA *ptr)
return rna_pointer_inherit_refine(ptr, &RNA_Struct, ((CollectionPropertyRNA*)prop)->type);
}
+/* Function */
+
+static void rna_Function_identifier_get(PointerRNA *ptr, char *value)
+{
+ strcpy(value, ((FunctionRNA*)ptr->data)->identifier);
+}
+
+static int rna_Function_identifier_length(PointerRNA *ptr)
+{
+ return strlen(((FunctionRNA*)ptr->data)->identifier);
+}
+
+static void rna_Function_description_get(PointerRNA *ptr, char *value)
+{
+ strcpy(value, ((FunctionRNA*)ptr->data)->description);
+}
+
+static int rna_Function_description_length(PointerRNA *ptr)
+{
+ return strlen(((FunctionRNA*)ptr->data)->description);
+}
+
+static void rna_Function_parameters_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
+{
+ rna_iterator_listbase_begin(iter, &((FunctionRNA*)ptr->data)->cont.properties, rna_property_builtin);
+}
+
+static int rna_Function_registered_get(PointerRNA *ptr)
+{
+ FunctionRNA *func= (FunctionRNA*)ptr->data;
+ return func->flag & FUNC_REGISTER;
+}
+
+static int rna_Function_registered_optional_get(PointerRNA *ptr)
+{
+ FunctionRNA *func= (FunctionRNA*)ptr->data;
+ return func->flag & FUNC_REGISTER_OPTIONAL;
+}
+
/* Blender RNA */
static void rna_BlenderRNA_structs_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
@@ -503,6 +610,12 @@ static void rna_def_struct(BlenderRNA *brna)
RNA_def_property_struct_type(prop, "Property");
RNA_def_property_collection_funcs(prop, "rna_Struct_properties_begin", "rna_Struct_properties_next", "rna_iterator_listbase_end", "rna_Struct_properties_get", 0, 0, 0);
RNA_def_property_ui_text(prop, "Properties", "Properties in the struct.");
+
+ prop= RNA_def_property(srna, "functions", PROP_COLLECTION, PROP_NONE);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_struct_type(prop, "Function");
+ RNA_def_property_collection_funcs(prop, "rna_Struct_functions_begin", "rna_Struct_functions_next", "rna_iterator_listbase_end", "rna_Struct_functions_get", 0, 0, 0);
+ RNA_def_property_ui_text(prop, "Functions", "");
}
static void rna_def_property(BlenderRNA *brna)
@@ -567,6 +680,52 @@ static void rna_def_property(BlenderRNA *brna)
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_boolean_funcs(prop, "rna_Property_editable_get", NULL);
RNA_def_property_ui_text(prop, "Editable", "Property is editable through RNA.");
+
+ prop= RNA_def_property(srna, "registered", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_boolean_funcs(prop, "rna_Property_registered_get", NULL);
+ RNA_def_property_ui_text(prop, "Registered", "Property is registerd as part of type registration.");
+
+ prop= RNA_def_property(srna, "registered_optional", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_boolean_funcs(prop, "rna_Property_registered_optional_get", NULL);
+ RNA_def_property_ui_text(prop, "Registered Optionally", "Property is optionally registerd as part of type registration.");
+}
+
+static void rna_def_function(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ srna= RNA_def_struct(brna, "Function", NULL);
+ RNA_def_struct_ui_text(srna, "Function Definition", "RNA function definition");
+
+ prop= RNA_def_property(srna, "identifier", PROP_STRING, PROP_NONE);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_string_funcs(prop, "rna_Function_identifier_get", "rna_Function_identifier_length", NULL);
+ RNA_def_property_ui_text(prop, "Identifier", "Unique name used in the code and scripting.");
+ RNA_def_struct_name_property(srna, prop);
+
+ prop= RNA_def_property(srna, "description", PROP_STRING, PROP_NONE);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_string_funcs(prop, "rna_Function_description_get", "rna_Function_description_length", NULL);
+ RNA_def_property_ui_text(prop, "Description", "Description of the Function's purpose.");
+
+ prop= RNA_def_property(srna, "parameters", PROP_COLLECTION, PROP_NONE);
+ /*RNA_def_property_clear_flag(prop, PROP_EDITABLE);*/
+ RNA_def_property_struct_type(prop, "Property");
+ RNA_def_property_collection_funcs(prop, "rna_Function_parameters_begin", "rna_iterator_listbase_next", "rna_iterator_listbase_end", "rna_iterator_listbase_get", 0, 0, 0);
+ RNA_def_property_ui_text(prop, "Parameters", "Parameters for the function.");
+
+ prop= RNA_def_property(srna, "registered", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_boolean_funcs(prop, "rna_Function_registered_get", NULL);
+ RNA_def_property_ui_text(prop, "Registered", "Function is registerd as callback as part of type registration.");
+
+ prop= RNA_def_property(srna, "registered_optional", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_boolean_funcs(prop, "rna_Function_registered_optional_get", NULL);
+ RNA_def_property_ui_text(prop, "Registered Optionally", "Function is optionally registerd as callback part of type registration.");
}
static void rna_def_number_property(StructRNA *srna, PropertyType type)
@@ -718,6 +877,9 @@ void RNA_def_rna(BlenderRNA *brna)
srna= RNA_def_struct(brna, "CollectionProperty", "Property");
RNA_def_struct_ui_text(srna, "Collection Definition", "RNA collection property to define lists, arrays and mappings.");
rna_def_pointer_property(srna, PROP_COLLECTION);
+
+ /* Function */
+ rna_def_function(brna);
/* Blender RNA */
srna= RNA_def_struct(brna, "BlenderRNA", NULL);
diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c
index 6e4fd39d039..3ba73aef52d 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -181,6 +181,12 @@ void rna_def_scene_render_data(BlenderRNA *brna)
{R_ALPHAKEY, "STRAIGHT", "Straight Alpha", "Transparent RGB and alpha pixels are unmodified"},
{0, NULL, NULL, NULL}};
+ static EnumPropertyItem color_mode_items[] ={
+ {R_PLANESBW, "BW", "BW", "Images are saved with BW (grayscale) data"},
+ {R_PLANES24, "RGB", "RGB", "Images are saved with RGB (color) data"},
+ {R_PLANES32, "RGBA", "RGBA", "Images are saved with RGB and Alpha data (if supported)"},
+ {0, NULL, NULL, NULL}};
+
static EnumPropertyItem octree_resolution_items[] = {
{64, "OCTREE_RES_64", "64", ""},
{128, "OCTREE_RES_128", "128", ""},
@@ -194,33 +200,75 @@ void rna_def_scene_render_data(BlenderRNA *brna)
{11, "OVERSAMPLE_11", "11", ""},
{16, "OVERSAMPLE_16", "16", ""},
{0, NULL, NULL, NULL}};
-
+
static EnumPropertyItem field_order_items[] = {
- {0, "FIELDS_EVENFIRST", "Even Fields First", ""},
- {R_ODDFIELD, "FIELDS_ODDFIRST", "Odd Fields First", ""},
+ {0, "FIELDS_EVENFIRST", "Even", "Even Fields First"},
+ {R_ODDFIELD, "FIELDS_ODDFIRST", "Odd", "Odd Fields First"},
{0, NULL, NULL, NULL}};
static EnumPropertyItem threads_mode_items[] = {
{0, "THREADS_AUTO", "Auto-detect", ""},
{R_FIXED_THREADS, "THREADS_FIXED", "Fixed Number", ""},
{0, NULL, NULL, NULL}};
+
+ static EnumPropertyItem image_type_items[] = {
+ {R_FRAMESERVER, "FRAMESERVER", "Frame Server", ""},
+#ifdef WITH_FFMPEG
+ {R_FFMPEG, "FFMPEG", "FFMpeg", ""},
+#endif
+ {R_AVIRAW, "AVIRAW", "AVI Raw", ""},
+ {R_AVIJPEG, "AVIJPEG", "AVI JPEG", ""},
+#ifdef _WIN32
+ {R_AVICODEC, "AVICODEC", "AVI Codec", ""},
+#endif
+#ifdef WITH_QUICKTIME
+ {R_QUICKTIME, "QUICKTIME", "QuickTime", ""},
+#endif
+ {R_TARGA, "TARGA", "Targa", ""},
+ {R_RAWTGA, "RAWTARGA", "Targa Raw", ""},
+ {R_PNG, "PNG", "PNG", ""},
+ //{R_DDS, "DDS", "DDS", ""}, // XXX not yet implemented
+#ifdef WITH_OPENJPEG
+ {R_JP2, "JPEG2000", "JPEG 2000", ""},
+#endif
+ {R_BMP, "BMP", "BMP", ""},
+ {R_JPEG90, "JPEG", "JPEG", ""},
+ {R_HAMX, "HAMX", "HamX", ""},
+ {R_IRIS, "IRIS", "Iris", ""},
+ {R_RADHDR, "RADHDR", "Radiance HDR", ""},
+ {R_CINEON, "CINEON", "Cineon", ""},
+ {R_DPX, "DPX", "DPX", ""},
+#ifdef __sgi
+ {R_MOVIE, "MOVIE", "Movie", ""},
+#endif
+#ifdef WITH_OPENEXR
+ {R_OPENEXR, "OPENEXR", "OpenEXR", ""},
+ {R_MULTILAYER, "MULTILAYER", "MultiLayer", ""},
+#endif
+ {R_TIFF, "TIFF", "TIFF", ""}, // XXX only with G.have_libtiff
+ {0, NULL, NULL, NULL}};
srna= RNA_def_struct(brna, "SceneRenderData", NULL);
RNA_def_struct_sdna(srna, "RenderData");
RNA_def_struct_nested(brna, srna, "Scene");
RNA_def_struct_ui_text(srna, "Render Data", "Rendering settings for a Scene datablock.");
+ prop= RNA_def_property(srna, "color_mode", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_bitflag_sdna(prop, NULL, "planes");
+ RNA_def_property_enum_items(prop, color_mode_items);
+ RNA_def_property_ui_text(prop, "Color Mode", "What Color Mode images are saved in (BW, RGB, RGBA)");
+
prop= RNA_def_property(srna, "resolution_x", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "xsch");
- RNA_def_property_range(prop, 0, 10000);
+ RNA_def_property_range(prop, 4, 10000);
RNA_def_property_ui_text(prop, "Resolution X", "Number of horizontal pixels in the rendered image.");
- RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
+ RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS|NC_OBJECT, NULL);
prop= RNA_def_property(srna, "resolution_y", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "ysch");
- RNA_def_property_range(prop, 0, 10000);
+ RNA_def_property_range(prop, 4, 10000);
RNA_def_property_ui_text(prop, "Resolution Y", "Number of vertical pixels in the rendered image.");
- RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
+ RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS|NC_OBJECT, NULL);
prop= RNA_def_property(srna, "resolution_percentage", PROP_INT, PROP_PERCENTAGE);
RNA_def_property_int_sdna(prop, NULL, "size");
@@ -229,13 +277,13 @@ void rna_def_scene_render_data(BlenderRNA *brna)
prop= RNA_def_property(srna, "parts_x", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "xparts");
- RNA_def_property_range(prop, 0, 512);
+ RNA_def_property_range(prop, 1, 512);
RNA_def_property_ui_text(prop, "Parts X", "Number of horizontal tiles to use while rendering.");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
prop= RNA_def_property(srna, "parts_y", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "yparts");
- RNA_def_property_range(prop, 0, 512);
+ RNA_def_property_range(prop, 1, 512);
RNA_def_property_ui_text(prop, "Parts Y", "Number of vertical tiles to use while rendering.");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
@@ -243,12 +291,30 @@ void rna_def_scene_render_data(BlenderRNA *brna)
RNA_def_property_float_sdna(prop, NULL, "xasp");
RNA_def_property_range(prop, 1.0f, 200.0f);
RNA_def_property_ui_text(prop, "Pixel Aspect X", "Horizontal aspect ratio - for anamorphic or non-square pixel output");
- RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
-
+ RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS|NC_OBJECT, NULL);
+
prop= RNA_def_property(srna, "pixel_aspect_y", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "yasp");
RNA_def_property_range(prop, 1.0f, 200.0f);
RNA_def_property_ui_text(prop, "Pixel Aspect Y", "Vertical aspect ratio - for anamorphic or non-square pixel output");
+ RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS|NC_OBJECT, NULL);
+
+ prop= RNA_def_property(srna, "quality", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(prop, NULL, "quality");
+ RNA_def_property_range(prop, 1, 100);
+ RNA_def_property_ui_text(prop, "Quality", "Quality setting for JPEG images, AVI Jpeg and SGI movies.");
+ RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
+
+ prop= RNA_def_property(srna, "fps", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(prop, NULL, "frs_sec");
+ RNA_def_property_range(prop, 1, 120);
+ RNA_def_property_ui_text(prop, "FPS", "Frames per second.");
+ RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
+
+ prop= RNA_def_property(srna, "fps_base", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "frs_sec_base");
+ RNA_def_property_range(prop, 0.1f, 120.0f);
+ RNA_def_property_ui_text(prop, "FPS Base", "Frames per second base");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
prop= RNA_def_property(srna, "dither_intensity", PROP_FLOAT, PROP_NONE);
@@ -361,7 +427,7 @@ void rna_def_scene_render_data(BlenderRNA *brna)
prop= RNA_def_property(srna, "threads", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "threads");
- RNA_def_property_range(prop, 0, 8);
+ RNA_def_property_range(prop, 1, 8);
RNA_def_property_ui_text(prop, "Threads", "Number of CPU threads to use simultaneously while rendering (for multi-core/CPU systems)");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
@@ -410,11 +476,36 @@ void rna_def_scene_render_data(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "File Extensions", "Add the file format extensions to the rendered file name (eg: filename + .jpg)");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
+ prop= RNA_def_property(srna, "image_type", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "imtype");
+ RNA_def_property_enum_items(prop, image_type_items);
+ RNA_def_property_ui_text(prop, "Image Type", "File format to save the rendered images as.");
+ RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
+
prop= RNA_def_property(srna, "free_image_textures", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "scemode", R_FREE_IMAGE);
RNA_def_property_ui_text(prop, "Free Image Textures", "Free all image texture from memory after render, to save memory before compositing.");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
+
+ prop= RNA_def_property(srna, "save_buffers", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "scemode", R_EXR_TILE_FILE);
+ RNA_def_property_ui_text(prop, "Save Buffers","Save tiles for all RenderLayers and used SceneNodes to files in the temp directory (saves memory, allows Full Sampling).");
+ RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
+
+ prop= RNA_def_property(srna, "full_sample", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "scemode", R_FULL_SAMPLE);
+ RNA_def_property_ui_text(prop, "Full Sample","Saves for every OSA sample the entire RenderLayer results (Higher quality sampling but slower).");
+ RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
+
+ prop= RNA_def_property(srna, "backbuf", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "bufflag", R_BACKBUF);
+ RNA_def_property_ui_text(prop, "Back Buffer", "Render backbuffer image");
+ RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
+ prop= RNA_def_property(srna, "output_path", PROP_STRING, PROP_DIRPATH);
+ RNA_def_property_string_sdna(prop, NULL, "pic");
+ RNA_def_property_ui_text(prop, "Output Path", "Directory/name to save animations, # characters defines the position and length of frame numbers.");
+ RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
}
void RNA_def_scene(BlenderRNA *brna)
@@ -430,7 +521,12 @@ void RNA_def_scene(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Scene", "Scene consisting objects and defining time and render related settings.");
prop= RNA_def_property(srna, "camera", PROP_POINTER, PROP_NONE);
- RNA_def_property_ui_text(prop, "Active Camera", "Active camera used for rendering the scene.");
+ RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_ui_text(prop, "Camera", "Active camera used for rendering the scene.");
+
+ prop= RNA_def_property(srna, "world", PROP_POINTER, PROP_NONE);
+ RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_ui_text(prop, "World", "World used for rendering the scene.");
prop= RNA_def_property(srna, "cursor_location", PROP_FLOAT, PROP_VECTOR);
RNA_def_property_float_sdna(prop, NULL, "cursor");
diff --git a/source/blender/makesrna/intern/rna_screen.c b/source/blender/makesrna/intern/rna_screen.c
index 9508357233c..e8b766ff2ea 100644
--- a/source/blender/makesrna/intern/rna_screen.c
+++ b/source/blender/makesrna/intern/rna_screen.c
@@ -32,6 +32,14 @@
#include "DNA_screen_types.h"
#include "DNA_scene_types.h"
+EnumPropertyItem region_type_items[] = {
+ {RGN_TYPE_WINDOW, "WINDOW", "Window", ""},
+ {RGN_TYPE_HEADER, "HEADER", "Header", ""},
+ {RGN_TYPE_CHANNELS, "CHANNELS", "Channels", ""},
+ {RGN_TYPE_TEMPORARY, "TEMPORARY", "Temporary", ""},
+ {RGN_TYPE_UI, "UI", "UI", ""},
+ {0, NULL, NULL, NULL}};
+
#ifdef RNA_RUNTIME
#else
@@ -59,15 +67,10 @@ static void rna_def_scrarea(BlenderRNA *brna)
RNA_def_property_collection_sdna(prop, NULL, "regionbase", NULL);
RNA_def_property_struct_type(prop, "Region");
RNA_def_property_ui_text(prop, "Regions", "Regions this area is subdivided in.");
-}
-static void rna_def_panel(BlenderRNA *brna)
-{
- StructRNA *srna;
-
- srna= RNA_def_struct(brna, "Panel", NULL);
- RNA_def_struct_ui_text(srna, "Panel", "Buttons panel.");
- RNA_def_struct_sdna(srna, "Panel");
+ prop= RNA_def_property(srna, "show_menus", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", HEADER_NO_PULLDOWN);
+ RNA_def_property_ui_text(prop, "Show Menus", "Show menus in the header.");
}
static void rna_def_region(BlenderRNA *brna)
@@ -101,7 +104,6 @@ void RNA_def_screen(BlenderRNA *brna)
{
rna_def_bscreen(brna);
rna_def_scrarea(brna);
- rna_def_panel(brna);
rna_def_region(brna);
}
diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c
index 5184e904927..2b5c3a621b4 100644
--- a/source/blender/makesrna/intern/rna_space.c
+++ b/source/blender/makesrna/intern/rna_space.c
@@ -33,6 +33,26 @@
#include "WM_types.h"
+EnumPropertyItem space_type_items[] = {
+ {SPACE_EMPTY, "EMPTY", "Empty", ""},
+ {SPACE_VIEW3D, "VIEW_3D", "3D View", ""},
+ {SPACE_IPO, "GRAPH_EDITOR", "Graph Editor", ""},
+ {SPACE_OUTLINER, "OUTLINER", "Outliner", ""},
+ {SPACE_BUTS, "BUTTONS_WINDOW", "Buttons Window", ""},
+ {SPACE_FILE, "FILE_BROWSER", "File Browser", ""},
+ {SPACE_IMAGE, "IMAGE_EDITOR", "Image Editor", ""},
+ {SPACE_INFO, "USER_PREFERENCES", "User Preferences", ""},
+ {SPACE_SEQ, "SEQUENCE_EDITOR", "Sequence Editor", ""},
+ {SPACE_TEXT, "TEXT_EDITOR", "Text Editor", ""},
+ //{SPACE_IMASEL, "IMAGE_BROWSER", "Image Browser", ""},
+ {SPACE_SOUND, "AUDIO_WINDOW", "Audio Window", ""},
+ {SPACE_ACTION, "DOPESHEET_EDITOR", "DopeSheet Editor", ""},
+ {SPACE_NLA, "NLA_EDITOR", "NLA Editor", ""},
+ {SPACE_SCRIPT, "SCRIPTS_WINDOW", "Scripts Window", ""},
+ {SPACE_TIME, "TIMELINE", "Timeline", ""},
+ {SPACE_NODE, "NODE_EDITOR", "Node Editor", ""},
+ {0, NULL, NULL, NULL}};
+
#ifdef RNA_RUNTIME
#include "DNA_scene_types.h"
@@ -117,26 +137,6 @@ static void rna_def_space(BlenderRNA *brna)
{
StructRNA *srna;
PropertyRNA *prop;
-
- static EnumPropertyItem type_items[] = {
- {SPACE_EMPTY, "EMPTY", "Empty", ""},
- {SPACE_VIEW3D, "VIEW_3D", "3D View", ""},
- {SPACE_IPO, "GRAPH_EDITOR", "Graph Editor", ""},
- {SPACE_OUTLINER, "OUTLINER", "Outliner", ""},
- {SPACE_BUTS, "BUTTONS_WINDOW", "Buttons Window", ""},
- {SPACE_FILE, "FILE_BROWSER", "File Browser", ""},
- {SPACE_IMAGE, "IMAGE_EDITOR", "Image Editor", ""},
- {SPACE_INFO, "USER_PREFERENCES", "User Preferences", ""},
- {SPACE_SEQ, "SEQUENCE_EDITOR", "Sequence Editor", ""},
- {SPACE_TEXT, "TEXT_EDITOR", "Text Editor", ""},
- //{SPACE_IMASEL, "IMAGE_BROWSER", "Image Browser", ""},
- {SPACE_SOUND, "AUDIO_WINDOW", "Audio Window", ""},
- {SPACE_ACTION, "DOPESHEET_EDITOR", "DopeSheet Editor", ""},
- {SPACE_NLA, "NLA_EDITOR", "NLA Editor", ""},
- {SPACE_SCRIPT, "SCRIPTS_WINDOW", "Scripts Window", ""},
- {SPACE_TIME, "TIMELINE", "Timeline", ""},
- {SPACE_NODE, "NODE_EDITOR", "Node Editor", ""},
- {0, NULL, NULL, NULL}};
srna= RNA_def_struct(brna, "Space", NULL);
RNA_def_struct_sdna(srna, "SpaceLink");
@@ -145,7 +145,7 @@ static void rna_def_space(BlenderRNA *brna)
prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "spacetype");
- RNA_def_property_enum_items(prop, type_items);
+ RNA_def_property_enum_items(prop, space_type_items);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Type", "Space data type.");
}
@@ -260,6 +260,7 @@ static void rna_def_space_image(BlenderRNA *brna)
{SI_USE_ALPHA, "COLOR_ALPHA", "Color and Alpha", "Draw image with RGB colors and alpha transparency."},
{SI_SHOW_ALPHA, "ALPHA", "Alpha", "Draw alpha transparency channel."},
{SI_SHOW_ZBUF, "Z_BUFFER", "Z-Buffer", "Draw Z-buffer associated with image (mapped from camera clip start to end)."},
+ {SI_COLOR_CORRECTION, "COLOR_CORRECTED", "Color Corrected", "Display color corrected image."},
{0, NULL, NULL, NULL}};
srna= RNA_def_struct(brna, "SpaceImageEditor", "Space");
@@ -341,7 +342,7 @@ static void rna_def_space_text(BlenderRNA *brna)
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Text", "Text displayed and edited in this space.");
RNA_def_property_pointer_funcs(prop, NULL, "rna_SpaceTextEditor_text_set");
- RNA_def_property_update(prop, NC_TEXT|ND_CURSOR, NULL);
+ RNA_def_property_update(prop, NC_TEXT|NA_EDITED, NULL);
/* display */
prop= RNA_def_property(srna, "syntax_highlight", PROP_BOOLEAN, PROP_NONE);
diff --git a/source/blender/makesrna/intern/rna_text.c b/source/blender/makesrna/intern/rna_text.c
index 838822119e8..3dacd4c0898 100644
--- a/source/blender/makesrna/intern/rna_text.c
+++ b/source/blender/makesrna/intern/rna_text.c
@@ -40,6 +40,8 @@
#ifdef RNA_RUNTIME
+int text_file_modified(Text *text);
+
static void rna_Text_filename_get(PointerRNA *ptr, char *value)
{
Text *text= (Text*)ptr->data;
@@ -69,6 +71,12 @@ static void rna_Text_filename_set(PointerRNA *ptr, const char *value)
text->name= NULL;
}
+static int rna_Text_modified_get(PointerRNA *ptr)
+{
+ Text *text= (Text*)ptr->data;
+ return text_file_modified(text);
+}
+
static void rna_TextLine_line_get(PointerRNA *ptr, char *value)
{
TextLine *line= (TextLine*)ptr->data;
@@ -174,6 +182,11 @@ static void rna_def_text(BlenderRNA *brna)
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Dirty", "Text file has been edited since last save.");
+ prop= RNA_def_property(srna, "modified", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_boolean_funcs(prop, "rna_Text_modified_get", NULL);
+ RNA_def_property_ui_text(prop, "Modified", "Text file on disk is different than the one in memory.");
+
prop= RNA_def_property(srna, "memory", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", TXT_ISMEM);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
diff --git a/source/blender/makesrna/intern/rna_texture.c b/source/blender/makesrna/intern/rna_texture.c
index e8fd753d16a..ef3205836c1 100644
--- a/source/blender/makesrna/intern/rna_texture.c
+++ b/source/blender/makesrna/intern/rna_texture.c
@@ -48,11 +48,11 @@ StructRNA *rna_Texture_refine(struct PointerRNA *ptr)
return &RNA_MarbleTexture;
case TEX_MAGIC:
return &RNA_MagicTexture;
- /*case TEX_BLEND:
- return &RNA_BlendTexture; */
+ case TEX_BLEND:
+ return &RNA_BlendTexture;
case TEX_STUCCI:
return &RNA_StucciTexture;
- /*case TEX_NOISE:
+ case TEX_NOISE:
return &RNA_NoiseTexture;
case TEX_IMAGE:
return &RNA_ImageTexture;
@@ -65,7 +65,7 @@ StructRNA *rna_Texture_refine(struct PointerRNA *ptr)
case TEX_VORONOI:
return &RNA_VoronoiTexture;
case TEX_DISTNOISE:
- return &RNA_DistortedNoiseTexture; */
+ return &RNA_DistortedNoiseTexture;
default:
return &RNA_Texture;
}
@@ -242,16 +242,49 @@ static void rna_def_mtex(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Normal Factor", "Amount texture affects normal values.");
}
-static void rna_def_environment_map(BlenderRNA *brna)
+static void rna_def_filter_size_common(StructRNA *srna)
+{
+ PropertyRNA *prop;
+
+ /* XXX: not sure about the name of this, "Min" seems a bit off */
+ prop= RNA_def_property(srna, "use_filter", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "imaflag", TEX_FILTER_MIN);
+ RNA_def_property_ui_text(prop, "Use Filter", "Use Filter Size as a minimal filter value in pixels");
+
+ prop= RNA_def_property(srna, "filter_size", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "filtersize");
+ RNA_def_property_range(prop, 0.1, 50.0);
+ RNA_def_property_ui_range(prop, 0.1, 50.0, 1, 0.2);
+ RNA_def_property_ui_text(prop, "Filter Size", "Multiplies the filter size used by MIP Map and Interpolation");
+}
+
+static void rna_def_environment_map_common(StructRNA *srna)
{
- StructRNA *srna;
PropertyRNA *prop;
static EnumPropertyItem prop_source_items[] = {
- {ENV_STATIC, "STATIC", "Static", ""},
- {ENV_ANIM, "ANIMATED", "Animated", ""},
- {ENV_LOAD, "LOAD", "Load", ""},
- {0, NULL, NULL, NULL}};
+ {ENV_STATIC, "STATIC", "Static", "Calculates environment map only once"},
+ {ENV_ANIM, "ANIMATED", "Animated", "Calculates environment map at each rendering"},
+ {ENV_LOAD, "LOADED", "Loaded", "Loads saved environment map from disk"},
+ {0, NULL, NULL, NULL}
+ };
+
+ prop= RNA_def_property(srna, "source", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "stype");
+ RNA_def_property_enum_items(prop, prop_source_items);
+ RNA_def_property_ui_text(prop, "Source", "");
+
+ /* XXX: move this to specific types if needed */
+ prop= RNA_def_property(srna, "image", PROP_POINTER, PROP_NONE);
+ RNA_def_property_pointer_sdna(prop, NULL, "ima");
+ RNA_def_property_struct_type(prop, "Image");
+ RNA_def_property_ui_text(prop, "Image", "");
+}
+
+static void rna_def_environment_map(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
static EnumPropertyItem prop_type_items[] = {
{ENV_CUBE, "CUBE", "Cube", "Use environment map with six cube sides."},
@@ -261,22 +294,14 @@ static void rna_def_environment_map(BlenderRNA *brna)
srna= RNA_def_struct(brna, "EnvironmentMap", NULL);
RNA_def_struct_sdna(srna, "EnvMap");
RNA_def_struct_ui_text(srna, "EnvironmentMap", "Environment map created by the renderer and cached for subsequent renders.");
-
- prop= RNA_def_property(srna, "image", PROP_POINTER, PROP_NONE);
- RNA_def_property_pointer_sdna(prop, NULL, "ima");
- RNA_def_property_struct_type(prop, "Image");
- RNA_def_property_ui_text(prop, "Image", "");
+
+ rna_def_environment_map_common(srna);
prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "type");
RNA_def_property_enum_items(prop, prop_type_items);
RNA_def_property_ui_text(prop, "Type", "");
- prop= RNA_def_property(srna, "source", PROP_ENUM, PROP_NONE);
- RNA_def_property_enum_sdna(prop, NULL, "stype");
- RNA_def_property_enum_items(prop, prop_source_items);
- RNA_def_property_ui_text(prop, "Source", "");
-
prop= RNA_def_property(srna, "clip_start", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "clipsta");
RNA_def_property_range(prop, 0.01, FLT_MAX);
@@ -286,8 +311,8 @@ static void rna_def_environment_map(BlenderRNA *brna)
prop= RNA_def_property(srna, "clip_end", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "clipend");
RNA_def_property_range(prop, 0.01, FLT_MAX);
- RNA_def_property_ui_range(prop, 0.01, 50, 100, 2);
- RNA_def_property_ui_text(prop, "Clip Start", "Objects further than this are not visible to map.");
+ RNA_def_property_ui_range(prop, 0.10, 20000, 100, 2);
+ RNA_def_property_ui_text(prop, "Clip End", "Objects further than this are not visible to map.");
prop= RNA_def_property(srna, "zoom", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "viewscale");
@@ -373,8 +398,7 @@ static void rna_def_texture_clouds(BlenderRNA *brna)
prop= RNA_def_property(srna, "nabla", PROP_FLOAT, PROP_NONE);
RNA_def_property_range(prop, 0.001, 0.1);
RNA_def_property_ui_range(prop, 0.001, 0.1, 1, 2);
- RNA_def_property_ui_text(prop, "Nabla", "Size of derivative offset used for calculating normal.");
-
+ RNA_def_property_ui_text(prop, "Nabla", "Size of derivative offset used for calculating normal");
}
static void rna_def_texture_wood(BlenderRNA *brna)
@@ -525,6 +549,36 @@ static void rna_def_texture_magic(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Noise Depth", "Sets the depth of the cloud calculation");
}
+static void rna_def_texture_blend(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ static EnumPropertyItem prop_blend_progression[] = {
+ {TEX_LIN, "LINEAR", "Linear", "Creates a linear progression"},
+ {TEX_QUAD, "QUADRATIC", "Quadratic", "Creates a quadratic progression"},
+ {TEX_EASE, "EASING", "Easing", "Creates a progression easing from one step to the next"},
+ {TEX_DIAG, "DIAGONAL", "Diagonal", "Creates a diagonal progression"},
+ {TEX_SPHERE, "SPHERICAL", "Spherical", "Creates a spherical progression"},
+ {TEX_HALO, "QUADRATIC_SPHERE", "Quadratic sphere", "Creates a quadratic progression in the shape of a sphere"},
+ {TEX_RAD, "RADIAL", "Radial", "Creates a radial progression"},
+ {0, NULL, NULL, NULL}
+ };
+
+ srna= RNA_def_struct(brna, "BlendTexture", "Texture");
+ RNA_def_struct_ui_text(srna, "Blend Texture", "Procedural color blending texture.");
+ RNA_def_struct_sdna(srna, "Tex");
+
+ prop= RNA_def_property(srna, "progression", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "stype");
+ RNA_def_property_enum_items(prop, prop_blend_progression);
+ RNA_def_property_ui_text(prop, "Progression", "Sets the style of the color blending");
+
+ prop= RNA_def_property(srna, "flip_axis", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", TEX_FLIPBLEND);
+ RNA_def_property_ui_text(prop, "Flip Axis", "Flips the texture's X and Y axis");
+}
+
static void rna_def_texture_stucci(BlenderRNA *brna)
{
StructRNA *srna;
@@ -564,138 +618,278 @@ static void rna_def_texture_stucci(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Pattern", "");
}
-static void rna_def_texture(BlenderRNA *brna)
+static void rna_def_texture_noise(BlenderRNA *brna)
+{
+ StructRNA *srna;
+
+ srna= RNA_def_struct(brna, "NoiseTexture", "Texture");
+ RNA_def_struct_ui_text(srna, "Noise Texture", "Procedural noise texture.");
+ RNA_def_struct_sdna(srna, "Tex");
+}
+
+static void rna_def_texture_image(BlenderRNA *brna)
{
StructRNA *srna;
PropertyRNA *prop;
- static EnumPropertyItem prop_type_items[] = {
- {0, "NONE", "None", ""},
- {TEX_CLOUDS, "CLOUDS", "Clouds", ""},
- {TEX_WOOD, "WOOD", "Wood", ""},
- {TEX_MARBLE, "MARBLE", "Marble", ""},
- {TEX_MAGIC, "MAGIC", "Magic", ""},
- {TEX_BLEND, "BLEND", "Blend", ""},
- {TEX_STUCCI, "STUCCI", "Stucci", ""},
- {TEX_NOISE, "NOISE", "Noise", ""},
- {TEX_IMAGE, "IMAGE", "Image", ""},
- {TEX_PLUGIN, "PLUGIN", "Plugin", ""},
- {TEX_ENVMAP, "ENVIRONMENT_MAP", "Environment Map", ""},
- {TEX_MUSGRAVE, "MUSGRAVE", "Musgrave", ""},
- {TEX_VORONOI, "VORONOI", "Voronoi", ""},
- {TEX_DISTNOISE, "DISTORTED_NOISE", "Distorted Noise", ""},
- {0, NULL, NULL, NULL}};
+ static EnumPropertyItem prop_image_extension[] = {
+ {1, "EXTEND", "Extend", "Extends by repeating edge pixels of the image"},
+ {2, "CLIP", "Clip", "Clips to image size and sets exterior pixels as transparent"},
+ {4, "CLIP_CUBE", "Clip Cube", "Clips to cubic-shaped area around the image and sets exterior pixels as transparent"},
+ {3, "REPEAT", "Repeat", "Causes the image to repeat horizontally and vertically"},
+ {5, "CHECKER", "Checker", "Causes the image to repeat in checker board pattern"},
+ {0, NULL, NULL, NULL}
+ };
- srna= RNA_def_struct(brna, "Texture", "ID");
+ srna= RNA_def_struct(brna, "ImageTexture", "Texture");
+ RNA_def_struct_ui_text(srna, "Image Texture", "");
RNA_def_struct_sdna(srna, "Tex");
- RNA_def_struct_ui_text(srna, "Texture", "Texture datablock used by materials, lamps, worlds and brushes.");
- RNA_def_struct_refine_func(srna, "rna_Texture_refine");
- prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
- RNA_def_property_enum_items(prop, prop_type_items);
- RNA_def_property_ui_text(prop, "Type", "");
+ prop= RNA_def_property(srna, "mipmap", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "imaflag", TEX_MIPMAP);
+ RNA_def_property_ui_text(prop, "MIP Map", "Uses auto-generated MIP maps for the image");
- prop= RNA_def_property(srna, "color_ramp", PROP_POINTER, PROP_NEVER_NULL);
- RNA_def_property_pointer_sdna(prop, NULL, "coba");
- RNA_def_property_struct_type(prop, "ColorRamp");
- RNA_def_property_ui_text(prop, "Color Ramp", "");
+ prop= RNA_def_property(srna, "mipmap_gauss", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "imaflag", TEX_GAUSS_MIP);
+ RNA_def_property_ui_text(prop, "MIP Map Gauss", "Uses Gauss filter to sample down MIP maps");
- prop= RNA_def_property(srna, "brightness", PROP_FLOAT, PROP_NONE);
- RNA_def_property_float_sdna(prop, NULL, "bright");
- RNA_def_property_range(prop, 0, 2);
- RNA_def_property_ui_text(prop, "Brightness", "");
+ prop= RNA_def_property(srna, "interpolation", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "imaflag", TEX_INTERPOL);
+ RNA_def_property_ui_text(prop, "Interpolation", "Interpolates pixels using Area filter");
- prop= RNA_def_property(srna, "contrast", PROP_FLOAT, PROP_NONE);
- RNA_def_property_range(prop, 0.01, 5);
- RNA_def_property_ui_text(prop, "Contrast", "");
+ /* XXX: I think flip_axis should be a generic Texture property, enabled for all the texture types */
+ prop= RNA_def_property(srna, "flip_axis", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "imaflag", TEX_IMAROT);
+ RNA_def_property_ui_text(prop, "Flip Axis", "Flips the texture's X and Y axis");
- /* XXX: would be nicer to have this as a color selector?
- but the values can go past [0,1]. */
- prop= RNA_def_property(srna, "rgb_factor", PROP_FLOAT, PROP_NONE);
- RNA_def_property_float_sdna(prop, NULL, "rfac");
- RNA_def_property_array(prop, 3);
- RNA_def_property_range(prop, 0, 2);
- RNA_def_property_ui_text(prop, "RGB Factor", "");
+ prop= RNA_def_property(srna, "use_alpha", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "imaflag", TEX_USEALPHA);
+ RNA_def_property_ui_text(prop, "Use Alpha", "Uses the alpha channel information in the image");
- rna_def_animdata_common(srna);
+ prop= RNA_def_property(srna, "calculate_alpha", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "imaflag", TEX_CALCALPHA);
+ RNA_def_property_ui_text(prop, "Calculate Alpha", "Calculates an alpha channel based on RGB values in the image");
- /* specific types */
- rna_def_texture_clouds(brna);
- rna_def_texture_wood(brna);
- rna_def_texture_marble(brna);
- rna_def_texture_magic(brna);
- rna_def_texture_stucci(brna);
- /* XXX add more types here .. */
+ prop= RNA_def_property(srna, "invert_alpha", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "imaflag", TEX_NEGALPHA);
+ RNA_def_property_ui_text(prop, "Invert Alpha", "Inverts all the alpha values in the image");
+
+ rna_def_filter_size_common(srna);
+
+ prop= RNA_def_property(srna, "normal_map", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "imaflag", TEX_NORMALMAP);
+ RNA_def_property_ui_text(prop, "Normal Map", "Uses image RGB values for normal mapping");
- /* ********** XXX these should be moved to the specific types *****************/
+ /* XXX: mtex->normapspace "Sets space of normal map image" "Normal Space %t|Camera %x0|World %x1|Object %x2|Tangent %x3"
+ * not sure why this goes in mtex instead of texture directly? */
+
+ prop= RNA_def_property(srna, "extension", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "extend");
+ RNA_def_property_enum_items(prop, prop_image_extension);
+ RNA_def_property_ui_text(prop, "Extension", "Sets how the image is stretched in the texture");
+
+ prop= RNA_def_property(srna, "repeat_x", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(prop, NULL, "xrepeat");
+ RNA_def_property_range(prop, 1, 512);
+ RNA_def_property_ui_text(prop, "Repeat X", "Sets a repetition multiplier in the X direction");
+
+ prop= RNA_def_property(srna, "repeat_y", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(prop, NULL, "yrepeat");
+ RNA_def_property_range(prop, 1, 512);
+ RNA_def_property_ui_text(prop, "Repeat Y", "Sets a repetition multiplier in the Y direction");
+
+ prop= RNA_def_property(srna, "mirror_x", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", TEX_REPEAT_XMIR);
+ RNA_def_property_ui_text(prop, "Mirror X", "Mirrors the image repetition on the X direction");
+
+ prop= RNA_def_property(srna, "mirror_y", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", TEX_REPEAT_YMIR);
+ RNA_def_property_ui_text(prop, "Mirror Y", "Mirrors the image repetition on the Y direction");
+
+ prop= RNA_def_property(srna, "checker_odd", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", TEX_CHECKER_ODD);
+ RNA_def_property_ui_text(prop, "Checker Odd", "Sets odd checker tiles");
+
+ prop= RNA_def_property(srna, "checker_even", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", TEX_CHECKER_EVEN);
+ RNA_def_property_ui_text(prop, "Checker Even", "Sets even checker tiles");
+
+ prop= RNA_def_property(srna, "checker_distance", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "checkerdist");
+ RNA_def_property_range(prop, 0.0, 0.99);
+ RNA_def_property_ui_range(prop, 0.0, 0.99, 0.1, 0.01);
+ RNA_def_property_ui_text(prop, "Checker Distance", "Sets distance between checker tiles");
#if 0
- static EnumPropertyItem prop_distance_metric_items[] = {
- {TEX_DISTANCE, "DISTANCE", "Actual Distance", ""},
- {TEX_DISTANCE_SQUARED, "DISTANCE_SQUARED", "Distance Squared", ""},
- {TEX_MANHATTAN, "MANHATTAN", "Manhattan", ""},
- {TEX_CHEBYCHEV, "CHEBYCHEV", "Chebychev", ""},
- {TEX_MINKOVSKY_HALF, "MINKOVSKY_HALF", "Minkovsky 1/2", ""},
- {TEX_MINKOVSKY_FOUR, "MINKOVSKY_FOUR", "Minkovsky 4", ""},
- {TEX_MINKOVSKY, "MINKOVSKY", "Minkovsky", ""},
- {0, NULL, NULL, NULL}};
- static EnumPropertyItem prop_color_type_items[] = {
- /* XXX: OK names / descriptions? */
- {TEX_INTENSITY, "INTENSITY", "Intensity", "Only calculate intensity."},
- {TEX_COL1, "POSITION", "Position", "Color cells by position."},
- {TEX_COL2, "POSITION_OUTLINE", "Position and Outline", "Use position plus an outline based on F2-F.1"},
- {TEX_COL3, "POSITION_OUTLINE_INTENSITY", "Position, Outline, and Intensity", "Multiply position and outline by intensity."},
- {0, NULL, NULL, NULL}};
+ /* XXX: did this as an array, but needs better descriptions than "1 2 3 4"
+ perhaps a new subtype could be added?
+ --I actually used single values for this, maybe change later with a RNA_Rect thing? */
+ prop= RNA_def_property(srna, "crop_rectangle", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "cropxmin");
+ RNA_def_property_array(prop, 4);
+ RNA_def_property_range(prop, -10, 10);
+ RNA_def_property_ui_text(prop, "Crop Rectangle", "");
+#endif
- prop= RNA_def_property(srna, "turbulence", PROP_FLOAT, PROP_NONE);
- RNA_def_property_float_sdna(prop, NULL, "turbul");
- RNA_def_property_range(prop, 0, FLT_MAX);
- RNA_def_property_ui_range(prop, 0, 200, 10, 2);
- RNA_def_property_ui_text(prop, "Turbulence", "");
+ prop= RNA_def_property(srna, "crop_min_x", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "cropxmin");
+ RNA_def_property_range(prop, -10.0, 10.0);
+ RNA_def_property_ui_range(prop, -10.0, 10.0, 1, 0.2);
+ RNA_def_property_ui_text(prop, "Crop Minimum X", "Sets minimum X value to crop the image");
+
+ prop= RNA_def_property(srna, "crop_min_y", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "cropymin");
+ RNA_def_property_range(prop, -10.0, 10.0);
+ RNA_def_property_ui_range(prop, -10.0, 10.0, 1, 0.2);
+ RNA_def_property_ui_text(prop, "Crop Minimum Y", "Sets minimum Y value to crop the image");
+
+ prop= RNA_def_property(srna, "crop_max_x", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "cropxmax");
+ RNA_def_property_range(prop, -10.0, 10.0);
+ RNA_def_property_ui_range(prop, -10.0, 10.0, 1, 0.2);
+ RNA_def_property_ui_text(prop, "Crop Maximum X", "Sets maximum X value to crop the image");
+
+ prop= RNA_def_property(srna, "crop_max_y", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "cropymax");
+ RNA_def_property_range(prop, -10.0, 10.0);
+ RNA_def_property_ui_range(prop, -10.0, 10.0, 1, 0.2);
+ RNA_def_property_ui_text(prop, "Crop Maximum Y", "Sets maximum Y value to crop the image");
+
+ prop= RNA_def_property(srna, "image", PROP_POINTER, PROP_NONE);
+ RNA_def_property_pointer_sdna(prop, NULL, "ima");
+ RNA_def_property_struct_type(prop, "Image");
+ RNA_def_property_ui_text(prop, "Image", "");
+}
+
+static void rna_def_texture_plugin(BlenderRNA *brna)
+{
+ StructRNA *srna;
+
+ srna= RNA_def_struct(brna, "PluginTexture", "Texture");
+ RNA_def_struct_ui_text(srna, "Plugin", "External plugin texture.");
+ RNA_def_struct_sdna(srna, "Tex");
+
+ /* XXX: todo */
+}
+
+static void rna_def_texture_environment_map(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ srna= RNA_def_struct(brna, "EnvironmentMapTexture", "Texture");
+ RNA_def_struct_ui_text(srna, "Environment Map", "Environment map texture.");
+ RNA_def_struct_sdna(srna, "Tex");
+
+ rna_def_environment_map_common(srna);
+
+ prop= RNA_def_property(srna, "environment_map", PROP_POINTER, PROP_NONE);
+ RNA_def_property_pointer_sdna(prop, NULL, "env");
+ RNA_def_property_struct_type(prop, "EnvironmentMap");
+ RNA_def_property_ui_text(prop, "Environment Map", "Gets the environment map associated with this texture");
+
+ rna_def_filter_size_common(srna);
+}
+
+static void rna_def_texture_musgrave(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
- /* XXX: tex->filtersize */
+ static EnumPropertyItem prop_musgrave_type[] = {
+ {TEX_MFRACTAL, "MULTIFRACTAL", "Multifractal", ""},
+ {TEX_RIDGEDMF, "RIDGED_MULTIFRACTAL", "Ridged Multifractal", ""},
+ {TEX_HYBRIDMF, "HYBRID_MULTIFRACTAL", "Hybrid Multifractal", ""},
+ {TEX_FBM, "FBM", "fBM", ""},
+ {TEX_HTERRAIN, "HETERO_TERRAIN", "Hetero Terrain", ""},
+ {0, NULL, NULL, NULL}
+ };
+
+ srna= RNA_def_struct(brna, "MusgraveTexture", "Texture");
+ RNA_def_struct_ui_text(srna, "Musgrave", "Procedural musgrave texture.");
+ RNA_def_struct_sdna(srna, "Tex");
+
+ prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "stype");
+ RNA_def_property_enum_items(prop, prop_musgrave_type);
+ RNA_def_property_ui_text(prop, "Type", "");
- /* Musgrave */
prop= RNA_def_property(srna, "highest_dimension", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "mg_H");
RNA_def_property_range(prop, 0.0001, 2);
- RNA_def_property_ui_text(prop, "Highest Dimension", "Highest fractal dimension for musgrave.");
+ RNA_def_property_ui_text(prop, "Highest Dimension", "Highest fractal dimension");
prop= RNA_def_property(srna, "lacunarity", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "mg_lacunarity");
RNA_def_property_range(prop, 0, 6);
- RNA_def_property_ui_text(prop, "Lacunarity", "Gap between succesive frequencies for musgrave.");
+ RNA_def_property_ui_text(prop, "Lacunarity", "Gap between succesive frequencies");
prop= RNA_def_property(srna, "octaves", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "mg_octaves");
RNA_def_property_range(prop, 0, 8);
- RNA_def_property_ui_text(prop, "Octaves", "Number of frequencies used for musgrave.");
+ RNA_def_property_ui_text(prop, "Octaves", "Number of frequencies used");
prop= RNA_def_property(srna, "offset", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "mg_offset");
RNA_def_property_range(prop, 0, 6);
- RNA_def_property_ui_text(prop, "Offset", "The fractal offset for musgrave.");
+ RNA_def_property_ui_text(prop, "Offset", "The fractal offset");
prop= RNA_def_property(srna, "gain", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "mg_gain");
RNA_def_property_range(prop, 0, 6);
- RNA_def_property_ui_text(prop, "Gain", "The gain multiplier for musgrave.");
-
- /* Distorted Noise */
- prop= RNA_def_property(srna, "distortion_amount", PROP_FLOAT, PROP_NONE);
- RNA_def_property_float_sdna(prop, NULL, "dist_amount");
- RNA_def_property_range(prop, 0, 10);
- RNA_def_property_ui_text(prop, "Distortion Amount", "");
+ RNA_def_property_ui_text(prop, "Gain", "The gain multiplier");
- /* Musgrave / Voronoi */
prop= RNA_def_property(srna, "noise_intensity", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "ns_outscale");
RNA_def_property_range(prop, 0, 10);
RNA_def_property_ui_text(prop, "Noise Intensity", "");
- /* Voronoi */
+ prop= RNA_def_property(srna, "noise_size", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "noisesize");
+ RNA_def_property_range(prop, 0.0001, FLT_MAX);
+ RNA_def_property_ui_range(prop, 0.0001, 2, 10, 2);
+ RNA_def_property_ui_text(prop, "Noise Size", "Sets scaling for noise input");
+
+ prop= RNA_def_property(srna, "noise_basis", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "noisebasis");
+ RNA_def_property_enum_items(prop, prop_noise_basis_items);
+ RNA_def_property_ui_text(prop, "Noise Basis", "Sets the noise basis used for turbulence");
+
+ prop= RNA_def_property(srna, "nabla", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_range(prop, 0.001, 0.1);
+ RNA_def_property_ui_range(prop, 0.001, 0.1, 1, 2);
+ RNA_def_property_ui_text(prop, "Nabla", "Size of derivative offset used for calculating normal");
+}
+
+static void rna_def_texture_voronoi(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ static EnumPropertyItem prop_distance_metric_items[] = {
+ {TEX_DISTANCE, "DISTANCE", "Actual Distance", ""},
+ {TEX_DISTANCE_SQUARED, "DISTANCE_SQUARED", "Distance Squared", ""},
+ {TEX_MANHATTAN, "MANHATTAN", "Manhattan", ""},
+ {TEX_CHEBYCHEV, "CHEBYCHEV", "Chebychev", ""},
+ {TEX_MINKOVSKY_HALF, "MINKOVSKY_HALF", "Minkovsky 1/2", ""},
+ {TEX_MINKOVSKY_FOUR, "MINKOVSKY_FOUR", "Minkovsky 4", ""},
+ {TEX_MINKOVSKY, "MINKOVSKY", "Minkovsky", ""},
+ {0, NULL, NULL, NULL}};
+
+ static EnumPropertyItem prop_color_type_items[] = {
+ /* XXX: OK names / descriptions? */
+ {TEX_INTENSITY, "INTENSITY", "Intensity", "Only calculate intensity."},
+ {TEX_COL1, "POSITION", "Position", "Color cells by position."},
+ {TEX_COL2, "POSITION_OUTLINE", "Position and Outline", "Use position plus an outline based on F2-F.1"},
+ {TEX_COL3, "POSITION_OUTLINE_INTENSITY", "Position, Outline, and Intensity", "Multiply position and outline by intensity."},
+ {0, NULL, NULL, NULL}};
+
+ srna= RNA_def_struct(brna, "VoronoiTexture", "Texture");
+ RNA_def_struct_ui_text(srna, "Voronoi", "Procedural voronoi texture.");
+ RNA_def_struct_sdna(srna, "Tex");
+
prop= RNA_def_property(srna, "feature_weights", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "vn_w1");
RNA_def_property_array(prop, 4);
@@ -717,43 +911,129 @@ static void rna_def_texture(BlenderRNA *brna)
RNA_def_property_enum_items(prop, prop_color_type_items);
RNA_def_property_ui_text(prop, "Color Type", "");
+ prop= RNA_def_property(srna, "noise_intensity", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "ns_outscale");
+ RNA_def_property_range(prop, 0.01, 10);
+ RNA_def_property_ui_text(prop, "Noise Intensity", "");
- /* XXX: noisebasis2 */
- /* XXX: imaflag */
- /* XXX: flag */
- /* XXX: stype */
+ prop= RNA_def_property(srna, "noise_size", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "noisesize");
+ RNA_def_property_range(prop, 0.0001, FLT_MAX);
+ RNA_def_property_ui_range(prop, 0.0001, 2, 10, 2);
+ RNA_def_property_ui_text(prop, "Noise Size", "Sets scaling for noise input");
- /* XXX: did this as an array, but needs better descriptions than "1 2 3 4"
- perhaps a new subtype could be added? */
- prop= RNA_def_property(srna, "crop_rectangle", PROP_FLOAT, PROP_NONE);
- RNA_def_property_float_sdna(prop, NULL, "cropxmin");
- RNA_def_property_array(prop, 4);
- RNA_def_property_range(prop, -10, 10);
- RNA_def_property_ui_text(prop, "Crop Rectangle", "");
-
- prop= RNA_def_property(srna, "checker_separation", PROP_FLOAT, PROP_NONE);
- RNA_def_property_float_sdna(prop, NULL, "checkerdist");
- RNA_def_property_range(prop, 0, 1);
- RNA_def_property_ui_text(prop, "Checker Separation", "");
-
+ prop= RNA_def_property(srna, "nabla", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_range(prop, 0.001, 0.1);
+ RNA_def_property_ui_range(prop, 0.001, 0.1, 1, 2);
+ RNA_def_property_ui_text(prop, "Nabla", "Size of derivative offset used for calculating normal");
+}
- prop= RNA_def_property(srna, "normal_factor", PROP_FLOAT, PROP_NONE);
- RNA_def_property_float_sdna(prop, NULL, "norfac");
- RNA_def_property_range(prop, 0, 25);
- RNA_def_property_ui_text(prop, "Normal Factor", "Amount the texture affects normal values.");
-
- prop= RNA_def_property(srna, "image", PROP_POINTER, PROP_NONE);
- RNA_def_property_pointer_sdna(prop, NULL, "ima");
- RNA_def_property_struct_type(prop, "Image");
- RNA_def_property_ui_text(prop, "Image", "");
+static void rna_def_texture_distorted_noise(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
- /* XXX: plugin */
+ srna= RNA_def_struct(brna, "DistortedNoiseTexture", "Texture");
+ RNA_def_struct_ui_text(srna, "Distorted Noise", "Procedural distorted noise texture.");
+ RNA_def_struct_sdna(srna, "Tex");
- prop= RNA_def_property(srna, "environment_map", PROP_POINTER, PROP_NONE);
- RNA_def_property_pointer_sdna(prop, NULL, "env");
- RNA_def_property_struct_type(prop, "EnvironmentMap");
- RNA_def_property_ui_text(prop, "Environment Map", "");
-#endif
+ prop= RNA_def_property(srna, "distortion_amount", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "dist_amount");
+ RNA_def_property_range(prop, 0, 10);
+ RNA_def_property_ui_text(prop, "Distortion Amount", "");
+
+ prop= RNA_def_property(srna, "noise_size", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "noisesize");
+ RNA_def_property_range(prop, 0.0001, FLT_MAX);
+ RNA_def_property_ui_range(prop, 0.0001, 2, 10, 2);
+ RNA_def_property_ui_text(prop, "Noise Size", "Sets scaling for noise input");
+
+ prop= RNA_def_property(srna, "noise_basis", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "noisebasis");
+ RNA_def_property_enum_items(prop, prop_noise_basis_items);
+ RNA_def_property_ui_text(prop, "Noise Basis", "Sets the noise basis used for turbulence");
+
+ prop= RNA_def_property(srna, "noise_distortion", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "noisebasis2");
+ RNA_def_property_enum_items(prop, prop_noise_basis_items);
+ RNA_def_property_ui_text(prop, "Noise Distortion", "Sets the noise basis for the distortion");
+
+ prop= RNA_def_property(srna, "nabla", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_range(prop, 0.001, 0.1);
+ RNA_def_property_ui_range(prop, 0.001, 0.1, 1, 2);
+ RNA_def_property_ui_text(prop, "Nabla", "Size of derivative offset used for calculating normal");
+}
+
+static void rna_def_texture(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ static EnumPropertyItem prop_type_items[] = {
+ {0, "NONE", "None", ""},
+ {TEX_CLOUDS, "CLOUDS", "Clouds", ""},
+ {TEX_WOOD, "WOOD", "Wood", ""},
+ {TEX_MARBLE, "MARBLE", "Marble", ""},
+ {TEX_MAGIC, "MAGIC", "Magic", ""},
+ {TEX_BLEND, "BLEND", "Blend", ""},
+ {TEX_STUCCI, "STUCCI", "Stucci", ""},
+ {TEX_NOISE, "NOISE", "Noise", ""},
+ {TEX_IMAGE, "IMAGE", "Image", ""},
+ {TEX_PLUGIN, "PLUGIN", "Plugin", ""},
+ {TEX_ENVMAP, "ENVIRONMENT_MAP", "Environment Map", ""},
+ {TEX_MUSGRAVE, "MUSGRAVE", "Musgrave", ""},
+ {TEX_VORONOI, "VORONOI", "Voronoi", ""},
+ {TEX_DISTNOISE, "DISTORTED_NOISE", "Distorted Noise", ""},
+ {0, NULL, NULL, NULL}};
+
+ srna= RNA_def_struct(brna, "Texture", "ID");
+ RNA_def_struct_sdna(srna, "Tex");
+ RNA_def_struct_ui_text(srna, "Texture", "Texture datablock used by materials, lamps, worlds and brushes.");
+ RNA_def_struct_refine_func(srna, "rna_Texture_refine");
+
+ prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_items(prop, prop_type_items);
+ RNA_def_property_ui_text(prop, "Type", "");
+
+ prop= RNA_def_property(srna, "color_ramp", PROP_POINTER, PROP_NEVER_NULL);
+ RNA_def_property_pointer_sdna(prop, NULL, "coba");
+ RNA_def_property_struct_type(prop, "ColorRamp");
+ RNA_def_property_ui_text(prop, "Color Ramp", "");
+
+ prop= RNA_def_property(srna, "brightness", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "bright");
+ RNA_def_property_range(prop, 0, 2);
+ RNA_def_property_ui_text(prop, "Brightness", "");
+
+ prop= RNA_def_property(srna, "contrast", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_range(prop, 0.01, 5);
+ RNA_def_property_ui_text(prop, "Contrast", "");
+
+ /* XXX: would be nicer to have this as a color selector?
+ but the values can go past [0,1]. */
+ prop= RNA_def_property(srna, "rgb_factor", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "rfac");
+ RNA_def_property_array(prop, 3);
+ RNA_def_property_range(prop, 0, 2);
+ RNA_def_property_ui_text(prop, "RGB Factor", "");
+
+ rna_def_animdata_common(srna);
+
+ /* specific types */
+ rna_def_texture_clouds(brna);
+ rna_def_texture_wood(brna);
+ rna_def_texture_marble(brna);
+ rna_def_texture_magic(brna);
+ rna_def_texture_blend(brna);
+ rna_def_texture_stucci(brna);
+ rna_def_texture_noise(brna);
+ rna_def_texture_image(brna);
+ rna_def_texture_plugin(brna);
+ rna_def_texture_environment_map(brna);
+ rna_def_texture_musgrave(brna);
+ rna_def_texture_voronoi(brna);
+ rna_def_texture_distorted_noise(brna);
+ /* XXX add more types here .. */
}
void RNA_def_texture(BlenderRNA *brna)
diff --git a/source/blender/makesrna/intern/rna_ui.c b/source/blender/makesrna/intern/rna_ui.c
new file mode 100644
index 00000000000..a3e48f629cb
--- /dev/null
+++ b/source/blender/makesrna/intern/rna_ui.c
@@ -0,0 +1,565 @@
+/**
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Contributor(s): Blender Foundation (2009)
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include <stdlib.h>
+
+#include "RNA_define.h"
+#include "RNA_types.h"
+
+#include "rna_internal.h"
+#include "RNA_enum_types.h"
+
+#ifdef RNA_RUNTIME
+
+#include "MEM_guardedalloc.h"
+
+#include "RNA_access.h"
+
+#include "DNA_screen_types.h"
+
+#include "BLI_dynstr.h"
+
+#include "BKE_context.h"
+#include "BKE_report.h"
+#include "BKE_screen.h"
+
+#include "UI_interface.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+
+static ARegionType *region_type_find(ReportList *reports, int space_type, int region_type)
+{
+ SpaceType *st;
+ ARegionType *art;
+
+ st= BKE_spacetype_from_id(space_type);
+
+ for(art= (st)? st->regiontypes.first: NULL; art; art= art->next) {
+ if (art->regionid==region_type)
+ break;
+ }
+
+ /* region type not found? abort */
+ if (art==NULL) {
+ BKE_report(reports, RPT_ERROR, "Region not found in spacetype.");
+ return NULL;
+ }
+
+ return art;
+}
+
+/* Panel */
+
+static int panel_poll(const bContext *C, PanelType *pt)
+{
+ PointerRNA ptr;
+ ParameterList *list;
+ FunctionRNA *func;
+ void *ret;
+ int visible;
+
+ RNA_pointer_create(NULL, pt->py_srna, NULL, &ptr); /* dummy */
+ func= RNA_struct_find_function(&ptr, "poll");
+
+ list= RNA_parameter_list_create(&ptr, func);
+ RNA_parameter_set_lookup(list, "context", &C);
+ pt->py_call(&ptr, func, list);
+
+ RNA_parameter_get_lookup(list, "visible", &ret);
+ visible= *(int*)ret;
+
+ RNA_parameter_list_free(list);
+
+ return visible;
+}
+
+static void panel_draw(const bContext *C, Panel *pnl)
+{
+ PointerRNA ptr;
+ ParameterList *list;
+ FunctionRNA *func;
+
+ RNA_pointer_create(&CTX_wm_screen(C)->id, pnl->type->py_srna, pnl, &ptr);
+ func= RNA_struct_find_function(&ptr, "draw");
+
+ list= RNA_parameter_list_create(&ptr, func);
+ RNA_parameter_set_lookup(list, "context", &C);
+ pnl->type->py_call(&ptr, func, list);
+
+ RNA_parameter_list_free(list);
+}
+
+static void panel_draw_header(const bContext *C, Panel *pnl)
+{
+ PointerRNA ptr;
+ ParameterList *list;
+ FunctionRNA *func;
+
+ RNA_pointer_create(&CTX_wm_screen(C)->id, pnl->type->py_srna, pnl, &ptr);
+ func= RNA_struct_find_function(&ptr, "draw_header");
+
+ list= RNA_parameter_list_create(&ptr, func);
+ RNA_parameter_set_lookup(list, "context", &C);
+ pnl->type->py_call(&ptr, func, list);
+
+ RNA_parameter_list_free(list);
+}
+
+static void rna_Panel_unregister(const bContext *C, StructRNA *type)
+{
+ ARegionType *art;
+ PanelType *pt= RNA_struct_blender_type_get(type);
+
+ if(!pt)
+ return;
+ if(!(art=region_type_find(NULL, pt->space_type, pt->region_type)))
+ return;
+
+ BLI_freelinkN(&art->paneltypes, pt);
+ RNA_struct_free(&BLENDER_RNA, type);
+
+ /* update while blender is running */
+ if(C)
+ WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL);
+}
+
+static StructRNA *rna_Panel_register(const bContext *C, ReportList *reports, void *data, StructValidateFunc validate, StructCallbackFunc call, StructFreeFunc free)
+{
+ ARegionType *art;
+ PanelType *pt, dummypt = {0};
+ Panel dummypanel= {0};
+ PointerRNA dummyptr;
+ int have_function[2];
+
+ /* setup dummy panel & panel type to store static properties in */
+ dummypanel.type= &dummypt;
+ RNA_pointer_create(NULL, &RNA_Panel, &dummypanel, &dummyptr);
+
+ /* validate the python class */
+ if(validate(&dummyptr, data, have_function) != 0)
+ return NULL;
+
+ if(!(art=region_type_find(reports, dummypt.space_type, dummypt.region_type)))
+ return NULL;
+
+ /* check if we have registered this panel type before, and remove it */
+ for(pt=art->paneltypes.first; pt; pt=pt->next) {
+ if(strcmp(pt->idname, dummypt.idname) == 0) {
+ if(pt->py_srna)
+ rna_Panel_unregister(C, pt->py_srna);
+ break;
+ }
+ }
+
+ /* create a new panel type */
+ pt= MEM_callocN(sizeof(PanelType), "python buttons panel");
+ memcpy(pt, &dummypt, sizeof(dummypt));
+
+ pt->py_srna= RNA_def_struct(&BLENDER_RNA, pt->idname, "Panel");
+ pt->py_data= data;
+ pt->py_call= call;
+ pt->py_free= free;
+ RNA_struct_blender_type_set(pt->py_srna, pt);
+
+ pt->poll= (have_function[0])? panel_poll: NULL;
+ pt->draw= (have_function[1])? panel_draw: NULL;
+ pt->draw_header= (have_function[2])? panel_draw_header: NULL;
+
+ BLI_addtail(&art->paneltypes, pt);
+
+ /* update while blender is running */
+ if(C)
+ WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL);
+
+ return pt->py_srna;
+}
+
+static StructRNA* rna_Panel_refine(struct PointerRNA *ptr)
+{
+ Panel *hdr= (Panel*)ptr->data;
+ return (hdr->type)? hdr->type->py_srna: &RNA_Panel;
+}
+
+/* Header */
+
+static void header_draw(const bContext *C, Header *hdr)
+{
+ PointerRNA htr;
+ ParameterList *list;
+ FunctionRNA *func;
+
+ RNA_pointer_create(&CTX_wm_screen(C)->id, hdr->type->py_srna, hdr, &htr);
+ func= RNA_struct_find_function(&htr, "draw");
+
+ list= RNA_parameter_list_create(&htr, func);
+ RNA_parameter_set_lookup(list, "context", &C);
+ hdr->type->py_call(&htr, func, list);
+
+ RNA_parameter_list_free(list);
+}
+
+static void rna_Header_unregister(const bContext *C, StructRNA *type)
+{
+ ARegionType *art;
+ HeaderType *ht= RNA_struct_blender_type_get(type);
+
+ if(!ht)
+ return;
+ if(!(art=region_type_find(NULL, ht->space_type, RGN_TYPE_HEADER)))
+ return;
+
+ BLI_freelinkN(&art->headertypes, ht);
+ RNA_struct_free(&BLENDER_RNA, type);
+
+ /* update while blender is running */
+ if(C)
+ WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL);
+}
+
+static StructRNA *rna_Header_register(const bContext *C, ReportList *reports, void *data, StructValidateFunc validate, StructCallbackFunc call, StructFreeFunc free)
+{
+ ARegionType *art;
+ HeaderType *ht, dummyht = {0};
+ Header dummyheader= {0};
+ PointerRNA dummyhtr;
+ int have_function[1];
+
+ /* setup dummy header & header type to store static properties in */
+ dummyheader.type= &dummyht;
+ RNA_pointer_create(NULL, &RNA_Header, &dummyheader, &dummyhtr);
+
+ /* validate the python class */
+ if(validate(&dummyhtr, data, have_function) != 0)
+ return NULL;
+
+ if(!(art=region_type_find(reports, dummyht.space_type, RGN_TYPE_HEADER)))
+ return NULL;
+
+ /* check if we have registered this header type before, and remove it */
+ for(ht=art->headertypes.first; ht; ht=ht->next) {
+ if(strcmp(ht->idname, dummyht.idname) == 0) {
+ if(ht->py_srna)
+ rna_Header_unregister(C, ht->py_srna);
+ break;
+ }
+ }
+
+ /* create a new header type */
+ ht= MEM_callocN(sizeof(HeaderType), "python buttons header");
+ memcpy(ht, &dummyht, sizeof(dummyht));
+
+ ht->py_srna= RNA_def_struct(&BLENDER_RNA, ht->idname, "Header");
+ ht->py_data= data;
+ ht->py_call= call;
+ ht->py_free= free;
+ RNA_struct_blender_type_set(ht->py_srna, ht);
+
+ ht->draw= (have_function[0])? header_draw: NULL;
+
+ BLI_addtail(&art->headertypes, ht);
+
+ /* update while blender is running */
+ if(C)
+ WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL);
+
+ return ht->py_srna;
+}
+
+static StructRNA* rna_Header_refine(struct PointerRNA *htr)
+{
+ Header *hdr= (Header*)htr->data;
+ return (hdr->type)? hdr->type->py_srna: &RNA_Header;
+}
+
+/* Menu */
+
+static int menu_poll(const bContext *C, MenuType *pt)
+{
+ PointerRNA ptr;
+ ParameterList *list;
+ FunctionRNA *func;
+ void *ret;
+ int visible;
+
+ RNA_pointer_create(NULL, pt->py_srna, NULL, &ptr); /* dummy */
+ func= RNA_struct_find_function(&ptr, "poll");
+
+ list= RNA_parameter_list_create(&ptr, func);
+ RNA_parameter_set_lookup(list, "context", &C);
+ pt->py_call(&ptr, func, list);
+
+ RNA_parameter_get_lookup(list, "visible", &ret);
+ visible= *(int*)ret;
+
+ RNA_parameter_list_free(list);
+
+ return visible;
+}
+
+static void menu_draw(const bContext *C, Menu *hdr)
+{
+ PointerRNA mtr;
+ ParameterList *list;
+ FunctionRNA *func;
+
+ RNA_pointer_create(&CTX_wm_screen(C)->id, hdr->type->py_srna, hdr, &mtr);
+ func= RNA_struct_find_function(&mtr, "draw");
+
+ list= RNA_parameter_list_create(&mtr, func);
+ RNA_parameter_set_lookup(list, "context", &C);
+ hdr->type->py_call(&mtr, func, list);
+
+ RNA_parameter_list_free(list);
+}
+
+static void rna_Menu_unregister(const bContext *C, StructRNA *type)
+{
+ ARegionType *art;
+ MenuType *mt= RNA_struct_blender_type_get(type);
+
+ if(!mt)
+ return;
+ if(!(art=region_type_find(NULL, mt->space_type, RGN_TYPE_HEADER)))
+ return;
+
+ BLI_freelinkN(&art->menutypes, mt);
+ RNA_struct_free(&BLENDER_RNA, type);
+
+ /* update while blender is running */
+ if(C)
+ WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL);
+}
+
+static StructRNA *rna_Menu_register(const bContext *C, ReportList *reports, void *data, StructValidateFunc validate, StructCallbackFunc call, StructFreeFunc free)
+{
+ ARegionType *art;
+ MenuType *mt, dummymt = {0};
+ Menu dummymenu= {0};
+ PointerRNA dummymtr;
+ int have_function[2];
+
+ /* setup dummy menu & menu type to store static properties in */
+ dummymenu.type= &dummymt;
+ RNA_pointer_create(NULL, &RNA_Menu, &dummymenu, &dummymtr);
+
+ /* validate the python class */
+ if(validate(&dummymtr, data, have_function) != 0)
+ return NULL;
+
+ if(!(art=region_type_find(reports, dummymt.space_type, RGN_TYPE_HEADER)))
+ return NULL;
+
+ /* check if we have registered this menu type before, and remove it */
+ for(mt=art->menutypes.first; mt; mt=mt->next) {
+ if(strcmp(mt->idname, dummymt.idname) == 0) {
+ if(mt->py_srna)
+ rna_Menu_unregister(C, mt->py_srna);
+ break;
+ }
+ }
+
+ /* create a new menu type */
+ mt= MEM_callocN(sizeof(MenuType), "python buttons menu");
+ memcpy(mt, &dummymt, sizeof(dummymt));
+
+ mt->py_srna= RNA_def_struct(&BLENDER_RNA, mt->idname, "Menu");
+ mt->py_data= data;
+ mt->py_call= call;
+ mt->py_free= free;
+ RNA_struct_blender_type_set(mt->py_srna, mt);
+
+ mt->poll= (have_function[0])? menu_poll: NULL;
+ mt->draw= (have_function[1])? menu_draw: NULL;
+
+ BLI_addtail(&art->menutypes, mt);
+
+ /* update while blender is running */
+ if(C)
+ WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL);
+
+ return mt->py_srna;
+}
+
+static StructRNA* rna_Menu_refine(struct PointerRNA *mtr)
+{
+ Menu *hdr= (Menu*)mtr->data;
+ return (hdr->type)? hdr->type->py_srna: &RNA_Menu;
+}
+
+#else
+
+static void rna_def_ui_layout(BlenderRNA *brna)
+{
+ StructRNA *srna;
+
+ srna= RNA_def_struct(brna, "UILayout", NULL);
+ RNA_def_struct_sdna(srna, "uiLayout");
+ RNA_def_struct_ui_text(srna, "UI Layout", "User interface layout in a panel or header.");
+
+ RNA_api_ui_layout(srna);
+}
+
+static void rna_def_panel(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+ FunctionRNA *func;
+
+ srna= RNA_def_struct(brna, "Panel", NULL);
+ RNA_def_struct_ui_text(srna, "Panel", "Panel containing buttons.");
+ RNA_def_struct_sdna(srna, "Panel");
+ RNA_def_struct_refine_func(srna, "rna_Panel_refine");
+ RNA_def_struct_register_funcs(srna, "rna_Panel_register", "rna_Panel_unregister");
+
+ /* poll */
+ func= RNA_def_function(srna, "poll", NULL);
+ RNA_def_function_ui_description(func, "Test if the panel is visible or not.");
+ RNA_def_function_flag(func, FUNC_REGISTER|FUNC_REGISTER_OPTIONAL);
+ RNA_def_function_return(func, RNA_def_boolean(func, "visible", 1, "", ""));
+ RNA_def_pointer(func, "context", "Context", "", "");
+
+ /* draw */
+ func= RNA_def_function(srna, "draw", NULL);
+ RNA_def_function_ui_description(func, "Draw buttons into the panel UI layout.");
+ RNA_def_function_flag(func, FUNC_REGISTER);
+ RNA_def_pointer(func, "context", "Context", "", "");
+
+ func= RNA_def_function(srna, "draw_header", NULL);
+ RNA_def_function_ui_description(func, "Draw buttons into the panel header UI layout.");
+ RNA_def_function_flag(func, FUNC_REGISTER);
+ RNA_def_pointer(func, "context", "Context", "", "");
+
+ prop= RNA_def_property(srna, "layout", PROP_POINTER, PROP_NONE);
+ RNA_def_property_struct_type(prop, "UILayout");
+
+ /* registration */
+ prop= RNA_def_property(srna, "idname", PROP_STRING, PROP_NONE);
+ RNA_def_property_string_sdna(prop, NULL, "type->idname");
+ RNA_def_property_flag(prop, PROP_REGISTER);
+
+ prop= RNA_def_property(srna, "label", PROP_STRING, PROP_NONE);
+ RNA_def_property_string_sdna(prop, NULL, "type->label");
+ RNA_def_property_flag(prop, PROP_REGISTER);
+
+ prop= RNA_def_property(srna, "space_type", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "type->space_type");
+ RNA_def_property_enum_items(prop, space_type_items);
+ RNA_def_property_flag(prop, PROP_REGISTER);
+
+ prop= RNA_def_property(srna, "region_type", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "type->region_type");
+ RNA_def_property_enum_items(prop, region_type_items);
+ RNA_def_property_flag(prop, PROP_REGISTER);
+
+ prop= RNA_def_property(srna, "context", PROP_STRING, PROP_NONE);
+ RNA_def_property_string_sdna(prop, NULL, "type->context");
+ RNA_def_property_flag(prop, PROP_REGISTER);
+}
+
+static void rna_def_header(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+ FunctionRNA *func;
+
+ srna= RNA_def_struct(brna, "Header", NULL);
+ RNA_def_struct_ui_text(srna, "Header", "Editor header containing buttons.");
+ RNA_def_struct_sdna(srna, "Header");
+ RNA_def_struct_refine_func(srna, "rna_Header_refine");
+ RNA_def_struct_register_funcs(srna, "rna_Header_register", "rna_Header_unregister");
+
+ /* draw */
+ func= RNA_def_function(srna, "draw", NULL);
+ RNA_def_function_ui_description(func, "Draw buttons into the header UI layout.");
+ RNA_def_function_flag(func, FUNC_REGISTER);
+ RNA_def_pointer(func, "context", "Context", "", "");
+
+ prop= RNA_def_property(srna, "layout", PROP_POINTER, PROP_NONE);
+ RNA_def_property_struct_type(prop, "UILayout");
+
+ /* registration */
+ prop= RNA_def_property(srna, "idname", PROP_STRING, PROP_NONE);
+ RNA_def_property_string_sdna(prop, NULL, "type->idname");
+ RNA_def_property_flag(prop, PROP_REGISTER);
+
+ prop= RNA_def_property(srna, "space_type", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "type->space_type");
+ RNA_def_property_enum_items(prop, space_type_items);
+ RNA_def_property_flag(prop, PROP_REGISTER);
+}
+
+static void rna_def_menu(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+ FunctionRNA *func;
+
+ srna= RNA_def_struct(brna, "Menu", NULL);
+ RNA_def_struct_ui_text(srna, "Menu", "Editor menu containing buttons.");
+ RNA_def_struct_sdna(srna, "Menu");
+ RNA_def_struct_refine_func(srna, "rna_Menu_refine");
+ RNA_def_struct_register_funcs(srna, "rna_Menu_register", "rna_Menu_unregister");
+
+ /* poll */
+ func= RNA_def_function(srna, "poll", NULL);
+ RNA_def_function_ui_description(func, "Test if the menu is visible or not.");
+ RNA_def_function_flag(func, FUNC_REGISTER|FUNC_REGISTER_OPTIONAL);
+ RNA_def_function_return(func, RNA_def_boolean(func, "visible", 1, "", ""));
+ RNA_def_pointer(func, "context", "Context", "", "");
+
+ /* draw */
+ func= RNA_def_function(srna, "draw", NULL);
+ RNA_def_function_ui_description(func, "Draw buttons into the menu UI layout.");
+ RNA_def_function_flag(func, FUNC_REGISTER);
+ RNA_def_pointer(func, "context", "Context", "", "");
+
+ prop= RNA_def_property(srna, "layout", PROP_POINTER, PROP_NONE);
+ RNA_def_property_struct_type(prop, "UILayout");
+
+ /* registration */
+ prop= RNA_def_property(srna, "idname", PROP_STRING, PROP_NONE);
+ RNA_def_property_string_sdna(prop, NULL, "type->idname");
+ RNA_def_property_flag(prop, PROP_REGISTER);
+
+ prop= RNA_def_property(srna, "label", PROP_STRING, PROP_NONE);
+ RNA_def_property_string_sdna(prop, NULL, "type->label");
+ RNA_def_property_flag(prop, PROP_REGISTER);
+
+ prop= RNA_def_property(srna, "space_type", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "type->space_type");
+ RNA_def_property_enum_items(prop, space_type_items);
+ RNA_def_property_flag(prop, PROP_REGISTER);
+}
+
+void RNA_def_ui(BlenderRNA *brna)
+{
+ rna_def_ui_layout(brna);
+ rna_def_panel(brna);
+ rna_def_header(brna);
+ rna_def_menu(brna);
+}
+
+#endif
+
diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c
index b6767eac989..43e67fdfa57 100644
--- a/source/blender/makesrna/intern/rna_userdef.c
+++ b/source/blender/makesrna/intern/rna_userdef.c
@@ -30,8 +30,13 @@
#include "rna_internal.h"
#include "DNA_curve_types.h"
+#include "DNA_space_types.h"
#include "DNA_userdef_types.h"
+#include "WM_types.h"
+
+#include "BKE_utildefines.h"
+
#ifdef RNA_RUNTIME
static void rna_userdef_lmb_select_set(struct PointerRNA *ptr,int value)
@@ -118,130 +123,291 @@ static PointerRNA rna_UserDef_system_get(PointerRNA *ptr)
#else
-static void rna_def_userdef_theme_ui(BlenderRNA *brna)
+static void rna_def_userdef_theme_ui_font_style(BlenderRNA *brna)
{
StructRNA *srna;
PropertyRNA *prop;
+
+ srna= RNA_def_struct(brna, "ThemeFontStyle", NULL);
+ RNA_def_struct_sdna(srna, "uiFontStyle");
+ RNA_def_struct_ui_text(srna, "Font Style", "Theme settings for Font.");
+
+ prop= RNA_def_property(srna, "points", PROP_INT, PROP_NONE);
+ RNA_def_property_range(prop, 6, 48);
+ RNA_def_property_ui_text(prop, "Points", "");
+
+ prop= RNA_def_property(srna, "shadow", PROP_INT, PROP_NONE);
+ RNA_def_property_range(prop, 0, 5);
+ RNA_def_property_ui_text(prop, "Shadow Size", "Shadow size in pixels (0, 3 and 5 supported)");
+
+ prop= RNA_def_property(srna, "shadx", PROP_INT, PROP_NONE);
+ RNA_def_property_range(prop, -10, 10);
+ RNA_def_property_ui_text(prop, "Shadow X Offset", "Shadow offset in pixels");
+
+ prop= RNA_def_property(srna, "shady", PROP_INT, PROP_NONE);
+ RNA_def_property_range(prop, -10, 10);
+ RNA_def_property_ui_text(prop, "Shadow Y Offset", "Shadow offset in pixels");
- static EnumPropertyItem button_theme_styles[] = {
- {TH_MINIMAL, "MINIMAL", "Minimal", ""},
- {TH_SHADED, "SHADED", "Shaded", ""},
- {TH_ROUNDED, "ROUNDED", "Rounded", ""},
- {TH_ROUNDSHADED, "ROUNDSHADED", "Round Shaded", ""},
- {TH_OLDSKOOL, "OLDSKOOL", "Old Skool", ""},
- {0, NULL, NULL, NULL}};
-
- srna= RNA_def_struct(brna, "ThemeUserInterface", NULL);
- RNA_def_struct_sdna(srna, "ThemeUI");
- RNA_def_struct_ui_text(srna, "Theme User Interface", "Theme settings for user interface elements.");
-
- prop= RNA_def_property(srna, "outline", PROP_FLOAT, PROP_COLOR);
- RNA_def_property_array(prop, 3);
- RNA_def_property_ui_text(prop, "Outline", "");
-
- prop= RNA_def_property(srna, "neutral", PROP_FLOAT, PROP_COLOR);
- RNA_def_property_array(prop, 3);
- RNA_def_property_ui_text(prop, "Neutral", "");
-
- prop= RNA_def_property(srna, "action", PROP_FLOAT, PROP_COLOR);
- RNA_def_property_array(prop, 3);
- RNA_def_property_ui_text(prop, "Action", "");
-
- prop= RNA_def_property(srna, "setting", PROP_FLOAT, PROP_COLOR);
- RNA_def_property_array(prop, 3);
- RNA_def_property_ui_text(prop, "Setting", "");
-
- prop= RNA_def_property(srna, "special_setting_1", PROP_FLOAT, PROP_COLOR);
- RNA_def_property_float_sdna(prop, NULL, "setting1");
- RNA_def_property_array(prop, 3);
- RNA_def_property_ui_text(prop, "Special Setting 1", "");
+ prop= RNA_def_property(srna, "shadowalpha", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_range(prop, 0.0f, 1.0f);
+ RNA_def_property_ui_text(prop, "Shadow Alpha", "");
- prop= RNA_def_property(srna, "special_setting_2", PROP_FLOAT, PROP_COLOR);
- RNA_def_property_float_sdna(prop, NULL, "setting2");
- RNA_def_property_array(prop, 3);
- RNA_def_property_ui_text(prop, "Special Setting 2", "");
+ prop= RNA_def_property(srna, "shadowcolor", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_range(prop, 0.0f, 1.0f);
+ RNA_def_property_ui_text(prop, "Shadow Brightness", "Shadow color in grey value");
+}
- prop= RNA_def_property(srna, "number_input", PROP_FLOAT, PROP_COLOR);
- RNA_def_property_float_sdna(prop, NULL, "num");
- RNA_def_property_array(prop, 3);
- RNA_def_property_ui_text(prop, "Number Input", "");
- prop= RNA_def_property(srna, "text_field", PROP_FLOAT, PROP_COLOR);
- RNA_def_property_float_sdna(prop, NULL, "textfield");
- RNA_def_property_array(prop, 3);
- RNA_def_property_ui_text(prop, "Text Field", "");
-
- prop= RNA_def_property(srna, "textfield_highlight", PROP_FLOAT, PROP_COLOR);
- RNA_def_property_float_sdna(prop, NULL, "textfield_hi");
- RNA_def_property_array(prop, 3);
- RNA_def_property_ui_text(prop, "Text Field Highlight", "");
+static void rna_def_userdef_theme_ui_style(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ rna_def_userdef_theme_ui_font_style(brna);
+
+ srna= RNA_def_struct(brna, "ThemeStyle", NULL);
+ RNA_def_struct_sdna(srna, "uiStyle");
+ RNA_def_struct_ui_text(srna, "Style", "Theme settings for style sets.");
+
+ prop= RNA_def_property(srna, "paneltitle", PROP_POINTER, PROP_NEVER_NULL);
+ RNA_def_property_pointer_sdna(prop, NULL, "paneltitle");
+ RNA_def_property_struct_type(prop, "ThemeFontStyle");
+ RNA_def_property_ui_text(prop, "Panel Font", "");
+
+ prop= RNA_def_property(srna, "grouplabel", PROP_POINTER, PROP_NEVER_NULL);
+ RNA_def_property_pointer_sdna(prop, NULL, "grouplabel");
+ RNA_def_property_struct_type(prop, "ThemeFontStyle");
+ RNA_def_property_ui_text(prop, "Group Label Font", "");
+
+ prop= RNA_def_property(srna, "widgetlabel", PROP_POINTER, PROP_NEVER_NULL);
+ RNA_def_property_pointer_sdna(prop, NULL, "widgetlabel");
+ RNA_def_property_struct_type(prop, "ThemeFontStyle");
+ RNA_def_property_ui_text(prop, "Widget Label Font", "");
+
+ prop= RNA_def_property(srna, "widget", PROP_POINTER, PROP_NEVER_NULL);
+ RNA_def_property_pointer_sdna(prop, NULL, "widget");
+ RNA_def_property_struct_type(prop, "ThemeFontStyle");
+ RNA_def_property_ui_text(prop, "Widget Font", "");
+
+}
- prop= RNA_def_property(srna, "popup", PROP_FLOAT, PROP_COLOR);
+static void rna_def_userdef_theme_ui_wcol(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ srna= RNA_def_struct(brna, "ThemeWidgetColors", NULL);
+ RNA_def_struct_sdna(srna, "uiWidgetColors");
+ RNA_def_struct_ui_text(srna, "Theme Widget Color Set", "Theme settings for widget color sets.");
+
+ prop= RNA_def_property(srna, "outline", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
- RNA_def_property_ui_text(prop, "Popup", "");
-
+ RNA_def_property_ui_text(prop, "Outline", "");
+
+ prop= RNA_def_property(srna, "inner", PROP_FLOAT, PROP_COLOR);
+ RNA_def_property_array(prop, 4);
+ RNA_def_property_ui_text(prop, "Inner", "");
+
+ prop= RNA_def_property(srna, "inner_sel", PROP_FLOAT, PROP_COLOR);
+ RNA_def_property_array(prop, 4);
+ RNA_def_property_ui_text(prop, "Inner Selected", "");
+
+ prop= RNA_def_property(srna, "item", PROP_FLOAT, PROP_COLOR);
+ RNA_def_property_array(prop, 4);
+ RNA_def_property_ui_text(prop, "Item", "");
+
prop= RNA_def_property(srna, "text", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Text", "");
-
- prop= RNA_def_property(srna, "text_highlight", PROP_FLOAT, PROP_COLOR);
- RNA_def_property_float_sdna(prop, NULL, "text_hi");
- RNA_def_property_array(prop, 3);
- RNA_def_property_ui_text(prop, "Text highlight", "");
-
- prop= RNA_def_property(srna, "menu_background", PROP_FLOAT, PROP_COLOR);
- RNA_def_property_float_sdna(prop, NULL, "menu_back");
- RNA_def_property_array(prop, 4);
- RNA_def_property_ui_text(prop, "Menu Background", "");
-
- prop= RNA_def_property(srna, "menu_item", PROP_FLOAT, PROP_COLOR);
- RNA_def_property_array(prop, 3);
- RNA_def_property_ui_text(prop, "Menu Item", "");
-
- prop= RNA_def_property(srna, "menu_highlight", PROP_FLOAT, PROP_COLOR);
- RNA_def_property_float_sdna(prop, NULL, "menu_hilite");
- RNA_def_property_array(prop, 4);
- RNA_def_property_ui_text(prop, "Menu Highlight", "");
-
- prop= RNA_def_property(srna, "menu_text", PROP_FLOAT, PROP_COLOR);
+
+ prop= RNA_def_property(srna, "text_sel", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
- RNA_def_property_ui_text(prop, "Menu Text", "");
+ RNA_def_property_ui_text(prop, "Text Selected", "");
+
+ prop= RNA_def_property(srna, "shaded", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "shaded", 1);
+ RNA_def_property_ui_text(prop, "Shaded", "");
+
+ prop= RNA_def_property(srna, "shadetop", PROP_INT, PROP_NONE);
+ RNA_def_property_range(prop, -100, 100);
+ RNA_def_property_ui_text(prop, "Shade Top", "");
+
+ prop= RNA_def_property(srna, "shadedown", PROP_INT, PROP_NONE);
+ RNA_def_property_range(prop, -100, 100);
+ RNA_def_property_ui_text(prop, "Shade Down", "");
+
+}
- prop= RNA_def_property(srna, "menu_text_highlight", PROP_FLOAT, PROP_COLOR);
- RNA_def_property_float_sdna(prop, NULL, "menu_text_hi");
- RNA_def_property_array(prop, 3);
- RNA_def_property_ui_text(prop, "Menu Text Highlight", "");
+static void rna_def_userdef_theme_ui(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
- prop= RNA_def_property(srna, "button_draw_type", PROP_ENUM, PROP_NONE);
- RNA_def_property_enum_sdna(prop, NULL, "but_drawtype");
- RNA_def_property_enum_items(prop, button_theme_styles);
- RNA_def_property_ui_text(prop, "Button Draw Type", "");
+ rna_def_userdef_theme_ui_wcol(brna);
+
+ srna= RNA_def_struct(brna, "ThemeUserInterface", NULL);
+ RNA_def_struct_sdna(srna, "ThemeUI");
+ RNA_def_struct_ui_text(srna, "Theme User Interface", "Theme settings for user interface elements.");
+ prop= RNA_def_property(srna, "wcol_regular", PROP_POINTER, PROP_NEVER_NULL);
+ RNA_def_property_pointer_sdna(prop, NULL, "wcol_regular");
+ RNA_def_property_struct_type(prop, "ThemeWidgetColors");
+ RNA_def_property_ui_text(prop, "Regular Widget Colors", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
+
+ prop= RNA_def_property(srna, "wcol_tool", PROP_POINTER, PROP_NEVER_NULL);
+ RNA_def_property_pointer_sdna(prop, NULL, "wcol_tool");
+ RNA_def_property_struct_type(prop, "ThemeWidgetColors");
+ RNA_def_property_ui_text(prop, "Tool Widget Colors", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
+
+ prop= RNA_def_property(srna, "wcol_radio", PROP_POINTER, PROP_NEVER_NULL);
+ RNA_def_property_pointer_sdna(prop, NULL, "wcol_radio");
+ RNA_def_property_struct_type(prop, "ThemeWidgetColors");
+ RNA_def_property_ui_text(prop, "Radio Widget Colors", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
+
+ prop= RNA_def_property(srna, "wcol_text", PROP_POINTER, PROP_NEVER_NULL);
+ RNA_def_property_pointer_sdna(prop, NULL, "wcol_text");
+ RNA_def_property_struct_type(prop, "ThemeWidgetColors");
+ RNA_def_property_ui_text(prop, "Text Widget Colors", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
+
+ prop= RNA_def_property(srna, "wcol_option", PROP_POINTER, PROP_NEVER_NULL);
+ RNA_def_property_pointer_sdna(prop, NULL, "wcol_option");
+ RNA_def_property_struct_type(prop, "ThemeWidgetColors");
+ RNA_def_property_ui_text(prop, "Option Widget Colors", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
+
+ prop= RNA_def_property(srna, "wcol_num", PROP_POINTER, PROP_NEVER_NULL);
+ RNA_def_property_pointer_sdna(prop, NULL, "wcol_num");
+ RNA_def_property_struct_type(prop, "ThemeWidgetColors");
+ RNA_def_property_ui_text(prop, "Number Widget Colors", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
+
+ prop= RNA_def_property(srna, "wcol_numslider", PROP_POINTER, PROP_NEVER_NULL);
+ RNA_def_property_pointer_sdna(prop, NULL, "wcol_numslider");
+ RNA_def_property_struct_type(prop, "ThemeWidgetColors");
+ RNA_def_property_ui_text(prop, "Slider Widget Colors", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
+
+ prop= RNA_def_property(srna, "wcol_menu", PROP_POINTER, PROP_NEVER_NULL);
+ RNA_def_property_pointer_sdna(prop, NULL, "wcol_menu");
+ RNA_def_property_struct_type(prop, "ThemeWidgetColors");
+ RNA_def_property_ui_text(prop, "Menu Widget Colors", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
+
+ prop= RNA_def_property(srna, "wcol_pulldown", PROP_POINTER, PROP_NEVER_NULL);
+ RNA_def_property_pointer_sdna(prop, NULL, "wcol_pulldown");
+ RNA_def_property_struct_type(prop, "ThemeWidgetColors");
+ RNA_def_property_ui_text(prop, "Pulldown Widget Colors", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
+
+ prop= RNA_def_property(srna, "wcol_menu_back", PROP_POINTER, PROP_NEVER_NULL);
+ RNA_def_property_pointer_sdna(prop, NULL, "wcol_menu_back");
+ RNA_def_property_struct_type(prop, "ThemeWidgetColors");
+ RNA_def_property_ui_text(prop, "Menu Backdrop Colors", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
+
+ prop= RNA_def_property(srna, "wcol_menu_item", PROP_POINTER, PROP_NEVER_NULL);
+ RNA_def_property_pointer_sdna(prop, NULL, "wcol_menu_item");
+ RNA_def_property_struct_type(prop, "ThemeWidgetColors");
+ RNA_def_property_ui_text(prop, "Menu Item Colors", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
+
+
prop= RNA_def_property(srna, "icon_file", PROP_STRING, PROP_FILEPATH);
RNA_def_property_string_sdna(prop, NULL, "iconfile");
RNA_def_property_ui_text(prop, "Icon File", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
}
-static void rna_def_userdef_theme_spaces_main(StructRNA *srna)
+static void rna_def_userdef_theme_spaces_main(StructRNA *srna, int spacetype)
{
PropertyRNA *prop;
+ /* window */
prop= RNA_def_property(srna, "back", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
- RNA_def_property_ui_text(prop, "Back", "");
+ RNA_def_property_ui_text(prop, "Window Back", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
+ prop= RNA_def_property(srna, "title", PROP_FLOAT, PROP_COLOR);
+ RNA_def_property_array(prop, 3);
+ RNA_def_property_ui_text(prop, "Window Title", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
+
prop= RNA_def_property(srna, "text", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
- RNA_def_property_ui_text(prop, "Text", "");
+ RNA_def_property_ui_text(prop, "Window Text", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
- prop= RNA_def_property(srna, "text_highlight", PROP_FLOAT, PROP_COLOR);
- RNA_def_property_float_sdna(prop, NULL, "text_hi");
+ prop= RNA_def_property(srna, "text_hi", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
- RNA_def_property_ui_text(prop, "Text Highlight", "");
+ RNA_def_property_ui_text(prop, "Window Text Highlight", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
+ /* header */
prop= RNA_def_property(srna, "header", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Header", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
+
+ prop= RNA_def_property(srna, "header_text", PROP_FLOAT, PROP_COLOR);
+ RNA_def_property_array(prop, 3);
+ RNA_def_property_ui_text(prop, "Header Text", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
+
+ prop= RNA_def_property(srna, "header_text_hi", PROP_FLOAT, PROP_COLOR);
+ RNA_def_property_array(prop, 3);
+ RNA_def_property_ui_text(prop, "Header Text Highlight", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
+
+ /* buttons */
+ if(! ELEM(spacetype, SPACE_BUTS, SPACE_OUTLINER)) {
+ prop= RNA_def_property(srna, "button", PROP_FLOAT, PROP_COLOR);
+ RNA_def_property_array(prop, 3);
+ RNA_def_property_ui_text(prop, "Button Back", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
+
+ prop= RNA_def_property(srna, "button_title", PROP_FLOAT, PROP_COLOR);
+ RNA_def_property_array(prop, 3);
+ RNA_def_property_ui_text(prop, "Button Title", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
+
+ prop= RNA_def_property(srna, "button_text", PROP_FLOAT, PROP_COLOR);
+ RNA_def_property_array(prop, 3);
+ RNA_def_property_ui_text(prop, "Button Text", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
+
+ prop= RNA_def_property(srna, "button_text_hi", PROP_FLOAT, PROP_COLOR);
+ RNA_def_property_array(prop, 3);
+ RNA_def_property_ui_text(prop, "Button Text Highlight", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
+ }
+
+ /* list/channels */
+ if(ELEM4(spacetype, SPACE_IPO, SPACE_ACTION, SPACE_NLA, SPACE_NODE)) {
+ prop= RNA_def_property(srna, "list", PROP_FLOAT, PROP_COLOR);
+ RNA_def_property_array(prop, 3);
+ RNA_def_property_ui_text(prop, "List Back", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
+
+ prop= RNA_def_property(srna, "list_title", PROP_FLOAT, PROP_COLOR);
+ RNA_def_property_array(prop, 3);
+ RNA_def_property_ui_text(prop, "List Title", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
+
+ prop= RNA_def_property(srna, "list_text", PROP_FLOAT, PROP_COLOR);
+ RNA_def_property_array(prop, 3);
+ RNA_def_property_ui_text(prop, "List Text", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
+
+ prop= RNA_def_property(srna, "list_text_hi", PROP_FLOAT, PROP_COLOR);
+ RNA_def_property_array(prop, 3);
+ RNA_def_property_ui_text(prop, "List Text Highlight", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
+ }
}
static void rna_def_userdef_theme_spaces_vertex(StructRNA *srna)
@@ -251,14 +417,17 @@ static void rna_def_userdef_theme_spaces_vertex(StructRNA *srna)
prop= RNA_def_property(srna, "vertex", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Vertex", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "vertex_select", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Vertex Select", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "vertex_size", PROP_INT, PROP_NONE);
- RNA_def_property_range(prop, 0, 255);
+ RNA_def_property_range(prop, 1, 10);
RNA_def_property_ui_text(prop, "Vertex Size", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
}
static void rna_def_userdef_theme_spaces_edge(StructRNA *srna)
@@ -268,18 +437,22 @@ static void rna_def_userdef_theme_spaces_edge(StructRNA *srna)
prop= RNA_def_property(srna, "edge_select", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "edge Select", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "edge_seam", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Edge Seam", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "edge_sharp", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Edge Sharp", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "edge_facesel", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Edge UV Face Select", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
}
static void rna_def_userdef_theme_spaces_face(StructRNA *srna)
@@ -289,18 +462,22 @@ static void rna_def_userdef_theme_spaces_face(StructRNA *srna)
prop= RNA_def_property(srna, "face", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 4);
RNA_def_property_ui_text(prop, "Face", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "face_select", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 4);
RNA_def_property_ui_text(prop, "Face Selected", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "face_dot", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Face Dot Selected", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "facedot_size", PROP_INT, PROP_NONE);
- RNA_def_property_range(prop, 0, 255);
+ RNA_def_property_range(prop, 1, 10);
RNA_def_property_ui_text(prop, "Face Dot Size", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
}
static void rna_def_userdef_theme_space_view3d(BlenderRNA *brna)
@@ -314,47 +491,56 @@ static void rna_def_userdef_theme_space_view3d(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "ThemeSpace");
RNA_def_struct_ui_text(srna, "Theme 3D View", "Theme settings for the 3D View.");
- rna_def_userdef_theme_spaces_main(srna);
+ rna_def_userdef_theme_spaces_main(srna, SPACE_VIEW3D);
prop= RNA_def_property(srna, "grid", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Grid", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "panel", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 4);
RNA_def_property_ui_text(prop, "Panel", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "wire", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Wire", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "lamp", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 4);
RNA_def_property_ui_text(prop, "Lamp", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "object_selected", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "select");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Object Selected", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "object_active", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "active");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Active Object", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "object_grouped", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "group");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Object Grouped", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "object_grouped_active", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "group_active");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Object Grouped Active", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "transform", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Transform", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
rna_def_userdef_theme_spaces_vertex(srna);
rna_def_userdef_theme_spaces_edge(srna);
@@ -363,55 +549,64 @@ static void rna_def_userdef_theme_space_view3d(BlenderRNA *brna)
prop= RNA_def_property(srna, "editmesh_active", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 4);
RNA_def_property_ui_text(prop, "Active Vert/Edge/Face", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "normal", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Normal", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "bone_solid", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Bone Solid", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "bone_pose", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Bone Pose", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "current_frame", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "cframe");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Current Frame", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
}
-static void rna_def_userdef_theme_space_ipo(BlenderRNA *brna)
+static void rna_def_userdef_theme_space_graph(BlenderRNA *brna)
{
StructRNA *srna;
PropertyRNA *prop;
- /* space_ipo */
+ /* space_graph */
srna= RNA_def_struct(brna, "ThemeGraphEditor", NULL);
RNA_def_struct_sdna(srna, "ThemeSpace");
RNA_def_struct_ui_text(srna, "Theme Graph Editor", "Theme settings for the Ipo Editor.");
- rna_def_userdef_theme_spaces_main(srna);
+ rna_def_userdef_theme_spaces_main(srna, SPACE_IPO);
prop= RNA_def_property(srna, "grid", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Grid", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "panel", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Panel", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "window_sliders", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "shade1");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Window Sliders", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "channels_region", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "shade2");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Channels Region", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
rna_def_userdef_theme_spaces_vertex(srna);
@@ -419,38 +614,46 @@ static void rna_def_userdef_theme_space_ipo(BlenderRNA *brna)
RNA_def_property_float_sdna(prop, NULL, "cframe");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Current Frame", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "handle_vertex", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Handle Vertex", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "handle_vertex_select", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Handle Vertex Select", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "handle_vertex_size", PROP_INT, PROP_NONE);
RNA_def_property_range(prop, 0, 255);
RNA_def_property_ui_text(prop, "Handle Vertex Size", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "channel_group", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "group");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Channel Group", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "active_channels_group", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "group_active");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Active Channel Group", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "dopesheet_channel", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "ds_channel");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "DopeSheet Channel", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "dopesheet_subchannel", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "ds_subchannel");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "DopeSheet Sub-Channel", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
}
static void rna_def_userdef_theme_space_file(BlenderRNA *brna)
@@ -464,50 +667,56 @@ static void rna_def_userdef_theme_space_file(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "ThemeSpace");
RNA_def_struct_ui_text(srna, "Theme File Browser", "Theme settings for the File Browser.");
- rna_def_userdef_theme_spaces_main(srna);
+ rna_def_userdef_theme_spaces_main(srna, SPACE_FILE);
prop= RNA_def_property(srna, "selected_file", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "hilite");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Selected File", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "tiles", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "panel");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Tiles", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "scrollbar", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "shade1");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Scrollbar", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "scroll_handle", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "shade2");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Scroll Handle", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "active_file", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "active");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Active File", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "active_file_text", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "grid");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Active File Text", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
}
-static void rna_def_userdef_theme_space_oops(BlenderRNA *brna)
+static void rna_def_userdef_theme_space_outliner(BlenderRNA *brna)
{
StructRNA *srna;
- /* space_oops */
+ /* space_outliner */
srna= RNA_def_struct(brna, "ThemeOutliner", NULL);
RNA_def_struct_sdna(srna, "ThemeSpace");
RNA_def_struct_ui_text(srna, "Theme Outliner", "Theme settings for the Outliner.");
- rna_def_userdef_theme_spaces_main(srna);
+ rna_def_userdef_theme_spaces_main(srna, SPACE_OUTLINER);
}
static void rna_def_userdef_theme_space_info(BlenderRNA *brna)
@@ -520,7 +729,7 @@ static void rna_def_userdef_theme_space_info(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "ThemeSpace");
RNA_def_struct_ui_text(srna, "Theme User Preferences", "Theme settings for the User Preferences.");
- rna_def_userdef_theme_spaces_main(srna);
+ rna_def_userdef_theme_spaces_main(srna, SPACE_INFO);
}
static void rna_def_userdef_theme_space_text(BlenderRNA *brna)
@@ -534,52 +743,61 @@ static void rna_def_userdef_theme_space_text(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "ThemeSpace");
RNA_def_struct_ui_text(srna, "Theme Text Editor", "Theme settings for the Text Editor.");
- rna_def_userdef_theme_spaces_main(srna);
+ rna_def_userdef_theme_spaces_main(srna, SPACE_TEXT);
prop= RNA_def_property(srna, "line_numbers_background", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "grid");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Line Numbers Background", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "scroll_bar", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "shade1");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Scroll Bar", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "selected_text", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "shade2");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Selected Text", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "cursor", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "hilite");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Cursor", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "syntax_builtin", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "syntaxb");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Syntax Builtin", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "syntax_special", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "syntaxv");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Syntax Special", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "syntax_comment", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "syntaxc");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Syntax Comment", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "syntax_string", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "syntaxl");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Syntax String", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "syntax_numbers", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "syntaxn");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Syntax Numbers", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
}
static void rna_def_userdef_theme_space_node(BlenderRNA *brna)
@@ -593,47 +811,55 @@ static void rna_def_userdef_theme_space_node(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "ThemeSpace");
RNA_def_struct_ui_text(srna, "Theme Node Editor", "Theme settings for the Node Editor.");
- rna_def_userdef_theme_spaces_main(srna);
+ rna_def_userdef_theme_spaces_main(srna, SPACE_NODE);
prop= RNA_def_property(srna, "wires", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "wire");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Wires", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "wire_select", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "edge_select");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Wire Select", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "selected_text", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "shade2");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Selected Text", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "node_backdrop", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "syntaxl");
RNA_def_property_array(prop, 4);
RNA_def_property_ui_text(prop, "Node Backdrop", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "in_out_node", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "syntaxn");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "In/Out Node", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "converter_node", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "syntaxv");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Converter Node", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "operator_node", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "syntaxb");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Operator Node", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "group_node", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "syntaxc");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Group Node", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
}
static void rna_def_userdef_theme_space_buts(BlenderRNA *brna)
@@ -647,11 +873,12 @@ static void rna_def_userdef_theme_space_buts(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "ThemeSpace");
RNA_def_struct_ui_text(srna, "Theme Buttons Window", "Theme settings for the Buttons Window.");
- rna_def_userdef_theme_spaces_main(srna);
+ rna_def_userdef_theme_spaces_main(srna, SPACE_BUTS);
prop= RNA_def_property(srna, "panel", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Panel", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
}
static void rna_def_userdef_theme_space_time(BlenderRNA *brna)
@@ -665,16 +892,18 @@ static void rna_def_userdef_theme_space_time(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "ThemeSpace");
RNA_def_struct_ui_text(srna, "Theme Timeline", "Theme settings for the Timeline.");
- rna_def_userdef_theme_spaces_main(srna);
+ rna_def_userdef_theme_spaces_main(srna, SPACE_TIME);
prop= RNA_def_property(srna, "grid", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Grid", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "current_frame", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "cframe");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Current Frame", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
}
static void rna_def_userdef_theme_space_sound(BlenderRNA *brna)
@@ -688,21 +917,24 @@ static void rna_def_userdef_theme_space_sound(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "ThemeSpace");
RNA_def_struct_ui_text(srna, "Theme Audio Window", "Theme settings for the Audio Window.");
- rna_def_userdef_theme_spaces_main(srna);
+ rna_def_userdef_theme_spaces_main(srna, SPACE_SOUND);
prop= RNA_def_property(srna, "grid", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Grid", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "window_sliders", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "shade1");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Window Sliders", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "current_frame", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "cframe");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Current Frame", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
}
static void rna_def_userdef_theme_space_image(BlenderRNA *brna)
@@ -716,13 +948,14 @@ static void rna_def_userdef_theme_space_image(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "ThemeSpace");
RNA_def_struct_ui_text(srna, "Theme Image Editor", "Theme settings for the Image Editor.");
- rna_def_userdef_theme_spaces_main(srna);
+ rna_def_userdef_theme_spaces_main(srna, SPACE_IMAGE);
rna_def_userdef_theme_spaces_vertex(srna);
rna_def_userdef_theme_spaces_face(srna);
prop= RNA_def_property(srna, "editmesh_active", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 4);
RNA_def_property_ui_text(prop, "Active Vert/Edge/Face", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
}
static void rna_def_userdef_theme_space_seq(BlenderRNA *brna)
@@ -739,66 +972,79 @@ static void rna_def_userdef_theme_space_seq(BlenderRNA *brna)
prop= RNA_def_property(srna, "grid", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Grid", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "window_sliders", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "shade1");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Window Sliders", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "movie_strip", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "movie");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Movie Strip", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "image_strip", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "image");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Image Strip", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "scene_strip", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "scene");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Scene Strip", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "audio_strip", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "audio");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Audio Strip", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "effect_strip", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "effect");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Effect Strip", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "plugin_strip", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "plugin");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Plugin Strip", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "transition_strip", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "transition");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Transition Strip", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "meta_strip", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "meta");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Meta Strip", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "current_frame", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "cframe");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Current Frame", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "keyframe", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "vertex_select");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Keyframe", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "draw_action", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "bone_pose");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Draw Action", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
}
static void rna_def_userdef_theme_space_action(BlenderRNA *brna)
@@ -812,66 +1058,78 @@ static void rna_def_userdef_theme_space_action(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "ThemeSpace");
RNA_def_struct_ui_text(srna, "Theme DopeSheet", "Theme settings for the DopeSheet.");
- rna_def_userdef_theme_spaces_main(srna);
+ rna_def_userdef_theme_spaces_main(srna, SPACE_ACTION);
prop= RNA_def_property(srna, "grid", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Grid", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "value_sliders", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "face");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Value Sliders", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "view_sliders", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "shade1");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "View Sliders", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "channels", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "shade2");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Channels", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "channels_selected", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "hilite");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Channels Selected", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "channel_group", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "group");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Channel Group", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "active_channels_group", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "group_active");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Active Channel Group", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "long_key", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "strip");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Long Key", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "long_key_selected", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "strip_select");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Long Key Selected", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "current_frame", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "cframe");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Current Frame", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "dopesheet_channel", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "ds_channel");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "DopeSheet Channel", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "dopesheet_subchannel", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "ds_subchannel");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "DopeSheet Sub-Channel", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
}
static void rna_def_userdef_theme_space_nla(BlenderRNA *brna)
@@ -885,41 +1143,48 @@ static void rna_def_userdef_theme_space_nla(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "ThemeSpace");
RNA_def_struct_ui_text(srna, "Theme NLA Editor", "Theme settings for the NLA Editor.");
- rna_def_userdef_theme_spaces_main(srna);
+ rna_def_userdef_theme_spaces_main(srna, SPACE_NLA);
prop= RNA_def_property(srna, "grid", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Grid", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "view_sliders", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "shade1");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "View Sliders", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "bars", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "shade2");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Bars", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "bars_selected", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "hilite");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Bars Selected", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "strips", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "strip");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "strips", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "strips_selected", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "strip_select");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Strips Selected", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "current_frame", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "cframe");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Current Frame", "");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
}
static void rna_def_userdef_theme_colorset(BlenderRNA *brna)
@@ -935,19 +1200,23 @@ static void rna_def_userdef_theme_colorset(BlenderRNA *brna)
RNA_def_property_float_sdna(prop, NULL, "solid");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Normal", "Color used for the surface of bones.");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "selected", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "select");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Selected", "Color used for selected bones.");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "active", PROP_FLOAT, PROP_COLOR);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Active", "Color used for active bones.");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
prop= RNA_def_property(srna, "colored_constraints", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", TH_WIRECOLOR_CONSTCOLS);
RNA_def_property_ui_text(prop, "Colored Constraints", "Allow the use of colors indicating constraints/keyed status.");
+ RNA_def_property_update(prop, NC_WINDOW, NULL);
}
static void rna_def_userdef_themes(BlenderRNA *brna)
@@ -1041,9 +1310,12 @@ static void rna_def_userdef_themes(BlenderRNA *brna)
static void rna_def_userdef_dothemes(BlenderRNA *brna)
{
+
+ rna_def_userdef_theme_ui_style(brna);
rna_def_userdef_theme_ui(brna);
+
rna_def_userdef_theme_space_view3d(brna);
- rna_def_userdef_theme_space_ipo(brna);
+ rna_def_userdef_theme_space_graph(brna);
rna_def_userdef_theme_space_file(brna);
rna_def_userdef_theme_space_nla(brna);
rna_def_userdef_theme_space_action(brna);
@@ -1053,7 +1325,7 @@ static void rna_def_userdef_dothemes(BlenderRNA *brna)
rna_def_userdef_theme_space_text(brna);
rna_def_userdef_theme_space_time(brna);
rna_def_userdef_theme_space_node(brna);
- rna_def_userdef_theme_space_oops(brna);
+ rna_def_userdef_theme_space_outliner(brna);
rna_def_userdef_theme_space_info(brna);
rna_def_userdef_theme_space_sound(brna);
rna_def_userdef_theme_colorset(brna);
@@ -1306,12 +1578,12 @@ static void rna_def_userdef_view(BlenderRNA *brna)
prop= RNA_def_property(srna, "ndof_pan_speed", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "ndof_pan");
- RNA_def_property_range(prop, 4, 10);
+ RNA_def_property_range(prop, 0, 200);
RNA_def_property_ui_text(prop, "NDof Pan Speed", "The overall panning speed of an NDOF device, as percent of standard.");
prop= RNA_def_property(srna, "ndof_rotate_speed", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "ndof_rotate");
- RNA_def_property_range(prop, 4, 10);
+ RNA_def_property_range(prop, 0, 200);
RNA_def_property_ui_text(prop, "NDof Rotation Speed", "The overall rotation speed of an NDOF device, as percent of standard.");
}
@@ -1508,14 +1780,10 @@ static void rna_def_userdef_language(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "transopts", USER_DOTRANSLATE);
RNA_def_property_ui_text(prop, "International Fonts", "Use international fonts.");
- prop= RNA_def_property(srna, "font_size", PROP_INT, PROP_NONE);
- RNA_def_property_int_sdna(prop, NULL, "fontsize");
- RNA_def_property_range(prop, 8, 16);
- RNA_def_property_ui_text(prop, "Font Size", "International font size (points).");
-
- prop= RNA_def_property(srna, "font_filename", PROP_STRING, PROP_FILEPATH);
- RNA_def_property_string_sdna(prop, NULL, "fontname");
- RNA_def_property_ui_text(prop, "Font Filename", "International font filename.");
+ prop= RNA_def_property(srna, "dpi", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(prop, NULL, "dpi");
+ RNA_def_property_range(prop, 48, 128);
+ RNA_def_property_ui_text(prop, "DPI", "Font size and resolution for display.");
/* Language Selection */
@@ -1563,7 +1831,7 @@ static void rna_def_userdef_autosave(BlenderRNA *brna)
prop= RNA_def_property(srna, "auto_save_time", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "savetime");
- RNA_def_property_range(prop, 0, 32);
+ RNA_def_property_range(prop, 1, 60);
RNA_def_property_ui_text(prop, "Auto Save Time", "The time (in minutes) to wait between automatic temporary saves.");
prop= RNA_def_property(srna, "recent_files", PROP_INT, PROP_NONE);
@@ -1795,6 +2063,11 @@ void RNA_def_userdef(BlenderRNA *brna)
RNA_def_property_collection_sdna(prop, NULL, "themes", NULL);
RNA_def_property_struct_type(prop, "Theme");
RNA_def_property_ui_text(prop, "Themes", "");
+
+ prop= RNA_def_property(srna, "uistyles", PROP_COLLECTION, PROP_NONE);
+ RNA_def_property_collection_sdna(prop, NULL, "uistyles", NULL);
+ RNA_def_property_struct_type(prop, "ThemeStyle");
+ RNA_def_property_ui_text(prop, "Styles", "");
/* nested structs */
prop= RNA_def_property(srna, "view", PROP_POINTER, PROP_NEVER_NULL);
diff --git a/source/blender/makesrna/intern/rna_wm.c b/source/blender/makesrna/intern/rna_wm.c
index cabecaaf832..c1bccad4ffa 100644
--- a/source/blender/makesrna/intern/rna_wm.c
+++ b/source/blender/makesrna/intern/rna_wm.c
@@ -33,6 +33,8 @@
#ifdef RNA_RUNTIME
+#include "BKE_idprop.h"
+
static wmOperator *rna_OperatorProperties_find_operator(PointerRNA *ptr)
{
wmWindowManager *wm= ptr->id.data;
@@ -57,6 +59,16 @@ static StructRNA *rna_OperatorProperties_refine(PointerRNA *ptr)
return &RNA_OperatorProperties;
}
+IDProperty *rna_OperatorProperties_idproperties(PointerRNA *ptr, int create)
+{
+ if(create && !ptr->data) {
+ IDPropertyTemplate val = {0};
+ ptr->data= IDP_New(IDP_GROUP, val, "RNA_OperatorProperties group");
+ }
+
+ return ptr->data;
+}
+
static void rna_Operator_name_get(PointerRNA *ptr, char *value)
{
wmOperator *op= (wmOperator*)ptr->data;
@@ -100,6 +112,7 @@ static void rna_def_operator(BlenderRNA *brna)
srna= RNA_def_struct(brna, "OperatorProperties", NULL);
RNA_def_struct_ui_text(srna, "Operator Properties", "Input properties of an Operator.");
RNA_def_struct_refine_func(srna, "rna_OperatorProperties_refine");
+ RNA_def_struct_idproperties_func(srna, "rna_OperatorProperties_idproperties");
}
static void rna_def_operator_utils(BlenderRNA *brna)
diff --git a/source/blender/makesrna/intern/rna_world.c b/source/blender/makesrna/intern/rna_world.c
index 0e3e68d1def..eb764e4bc2d 100644
--- a/source/blender/makesrna/intern/rna_world.c
+++ b/source/blender/makesrna/intern/rna_world.c
@@ -156,17 +156,15 @@ static void rna_def_ambient_occlusion(BlenderRNA *brna)
prop= RNA_def_property(srna, "distance", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "aodist");
- RNA_def_property_range(prop, 0.001, 5000);
RNA_def_property_ui_text(prop, "Distance", "Length of rays, defines how far away other faces give occlusion effect.");
prop= RNA_def_property(srna, "strength", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "aodistfac");
- RNA_def_property_range(prop, 0.00001, 10);
RNA_def_property_ui_text(prop, "Strength", "Distance attenuation factor, the higher, the 'shorter' the shadows.");
prop= RNA_def_property(srna, "energy", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "aoenergy");
- RNA_def_property_range(prop, 0.01, 3);
+ RNA_def_property_ui_range(prop, 0, 10, 0.1, 3);
RNA_def_property_ui_text(prop, "Energy", "Global energy scale for ambient occlusion.");
prop= RNA_def_property(srna, "bias", PROP_FLOAT, PROP_NONE);
@@ -186,12 +184,13 @@ static void rna_def_ambient_occlusion(BlenderRNA *brna)
prop= RNA_def_property(srna, "error_tolerance", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "ao_approx_error");
- RNA_def_property_range(prop, 0.0001, 1);
+ RNA_def_property_range(prop, 0.0001, 10);
RNA_def_property_ui_text(prop, "Error Tolerance", "Low values are slower and higher quality (for Approximate).");
prop= RNA_def_property(srna, "correction", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "ao_approx_correction");
RNA_def_property_range(prop, 0, 1);
+ RNA_def_property_ui_range(prop, 0, 1, 0.1, 2);
RNA_def_property_ui_text(prop, "Correction", "Ad-hoc correction for over-occlusion due to the approximation (for Approximate).");
prop= RNA_def_property(srna, "falloff", PROP_BOOLEAN, PROP_NONE);
@@ -204,7 +203,7 @@ static void rna_def_ambient_occlusion(BlenderRNA *brna)
prop= RNA_def_property(srna, "samples", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "aosamp");
- RNA_def_property_range(prop, 0, 1);
+ RNA_def_property_range(prop, 1, 32);
RNA_def_property_ui_text(prop, "Samples", "");
prop= RNA_def_property(srna, "blend_mode", PROP_ENUM, PROP_NONE);
@@ -237,6 +236,12 @@ static void rna_def_world_mist(BlenderRNA *brna)
{
StructRNA *srna;
PropertyRNA *prop;
+
+ static EnumPropertyItem falloff_items[] = {
+ {0, "QUADRATIC", "Quadratic", "Mist uses quadratic progression."},
+ {1, "LINEAR", "Linear", "Mist uses linear progression."},
+ {2, "INVERSE_QUADRATIC", "Inverse Quadratic", "Mist uses inverse quadratic progression."},
+ {0, NULL, NULL, NULL}};
srna= RNA_def_struct(brna, "WorldMistSettings", NULL);
RNA_def_struct_sdna(srna, "World");
@@ -268,6 +273,11 @@ static void rna_def_world_mist(BlenderRNA *brna)
RNA_def_property_float_sdna(prop, NULL, "misthi");
RNA_def_property_range(prop, 0, 100);
RNA_def_property_ui_text(prop, "Height", "Factor for a less dense mist with increasing height.");
+
+ prop= RNA_def_property(srna, "falloff", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "mistype");
+ RNA_def_property_enum_items(prop, falloff_items);
+ RNA_def_property_ui_text(prop, "Falloff", "Falloff method for mist.");
}
static void rna_def_world_stars(BlenderRNA *brna)
@@ -275,12 +285,6 @@ static void rna_def_world_stars(BlenderRNA *brna)
StructRNA *srna;
PropertyRNA *prop;
- static EnumPropertyItem falloff_items[] = {
- {0, "QUADRATIC", "Quadratic", "Mist uses quadratic progression."},
- {1, "LINEAR", "Linear", "Mist uses linear progression."},
- {2, "INVERSE_QUADRATIC", "Inverse Quadratic", "Mist uses inverse quadratic progression."},
- {0, NULL, NULL, NULL}};
-
srna= RNA_def_struct(brna, "WorldStarsSettings", NULL);
RNA_def_struct_sdna(srna, "World");
RNA_def_struct_nested(brna, srna, "World");
@@ -309,12 +313,7 @@ static void rna_def_world_stars(BlenderRNA *brna)
RNA_def_property_float_sdna(prop, NULL, "starcolnoise");
RNA_def_property_range(prop, 0, 1);
RNA_def_property_ui_text(prop, "Color Randomization", "Randomizes star color.");
-
- prop= RNA_def_property(srna, "falloff", PROP_ENUM, PROP_NONE);
- RNA_def_property_enum_sdna(prop, NULL, "mistype");
- RNA_def_property_enum_items(prop, falloff_items);
- RNA_def_property_ui_text(prop, "Falloff", "Falloff method for mist.");
-
+
/* unused
prop= RNA_def_property(srna, "color", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "starr");
@@ -390,7 +389,7 @@ void RNA_def_world(BlenderRNA *brna)
prop= RNA_def_property(srna, "physics_gravity", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "gravity");
- RNA_def_property_range(prop, 0.0, 20.0);
+ RNA_def_property_range(prop, 0.0, 25.0);
RNA_def_property_ui_text(prop, "Physics Gravity", "Gravitational constant used for physics simulation in the game engine.");
/* nested structs */
diff --git a/source/blender/nodes/CMakeLists.txt b/source/blender/nodes/CMakeLists.txt
index 1f76cd0b424..a4d5b0f0ed2 100644
--- a/source/blender/nodes/CMakeLists.txt
+++ b/source/blender/nodes/CMakeLists.txt
@@ -55,9 +55,5 @@ ELSE(WITH_PYTHON)
ADD_DEFINITIONS(-DDISABLE_PYTHON)
ENDIF(WITH_PYTHON)
-IF(WITH_INTERNATIONAL)
- ADD_DEFINITIONS(-DWITH_FREETYPE2)
-ENDIF(WITH_INTERNATIONAL)
-
BLENDERLIB(bf_nodes "${SRC}" "${INC}")
diff --git a/source/blender/nodes/SConscript b/source/blender/nodes/SConscript
index 4859bbb550f..164e30c7d05 100644
--- a/source/blender/nodes/SConscript
+++ b/source/blender/nodes/SConscript
@@ -17,29 +17,28 @@ incs += ' ../gpu #/extern/glew/include '
incs += ' ' + env['BF_OPENGL_INC']
incs += ' ' + env['BF_ZLIB_INC']
-defs = ''
+defs = []
if env['WITH_BF_PYTHON']:
- incs += ' ' + env['BF_PYTHON_INC']
- incs += ' ../python'
+ incs += ' ' + env['BF_PYTHON_INC']
+ incs += ' ../python'
+ if env['BF_DEBUG']:
+ defs.append('_DEBUG')
else:
- defs += 'DISABLE_PYTHON'
-
-if env['WITH_BF_INTERNATIONAL']:
- defs += ' WITH_FREETYPE2'
+ defs.append('DISABLE_PYTHON')
if env['WITH_BF_OPENEXR']:
- defs += ' WITH_OPENEXR'
+ defs.append('WITH_OPENEXR')
if env['WITH_BF_FFMPEG']:
- defs += ' WITH_FFMPEG'
- incs += ' ' + env['BF_FFMPEG_INC']
+ defs.append('WITH_FFMPEG')
+ incs += ' ' + env['BF_FFMPEG_INC']
if env['WITH_BF_QUICKTIME']:
- defs += ' WITH_QUICKTIME'
- incs += ' ' + env['BF_QUICKTIME_INC']
+ defs.append('WITH_QUICKTIME')
+ incs += ' ' + env['BF_QUICKTIME_INC']
-env.BlenderLib ( libname = 'bf_nodes', sources = sources, includes = Split(incs), defines = Split(defs), libtype=['core'], priority = [190] )
-env.BlenderLib ( libname = 'bf_cmpnodes', sources = cmpsources, includes = Split(incs), defines = Split(defs), libtype=['core'], priority = [175] )
-env.BlenderLib ( libname = 'bf_shdnodes', sources = shdsources, includes = Split(incs), defines = Split(defs), libtype=['core'], priority = [175] )
-env.BlenderLib ( libname = 'bf_texnodes', sources = texsources, includes = Split(incs), defines = Split(defs), libtype=['core'], priority = [175] )
+env.BlenderLib ( libname = 'bf_nodes', sources = sources, includes = Split(incs), defines = defs, libtype=['core'], priority = [190] )
+env.BlenderLib ( libname = 'bf_cmpnodes', sources = cmpsources, includes = Split(incs), defines = defs, libtype=['core'], priority = [175] )
+env.BlenderLib ( libname = 'bf_shdnodes', sources = shdsources, includes = Split(incs), defines = defs, libtype=['core'], priority = [175] )
+env.BlenderLib ( libname = 'bf_texnodes', sources = texsources, includes = Split(incs), defines = defs, libtype=['core'], priority = [175] )
diff --git a/source/blender/nodes/TEX_node.h b/source/blender/nodes/TEX_node.h
index c52fc757507..d298f062143 100644
--- a/source/blender/nodes/TEX_node.h
+++ b/source/blender/nodes/TEX_node.h
@@ -1,5 +1,5 @@
/**
- * $Id: CMP_node.h 12429 2007-10-29 14:37:19Z bebraw $
+ * $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
*
diff --git a/source/blender/nodes/intern/CMP_nodes/CMP_normalize.c b/source/blender/nodes/intern/CMP_nodes/CMP_normalize.c
index a62e4be4015..846aec490c2 100644
--- a/source/blender/nodes/intern/CMP_nodes/CMP_normalize.c
+++ b/source/blender/nodes/intern/CMP_nodes/CMP_normalize.c
@@ -1,5 +1,5 @@
/**
- * $Id: CMP_normalize.c,v 1.0 2007/03/24 06:57:29 scourage Exp $
+ * $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
*
diff --git a/source/blender/nodes/intern/SHD_nodes/SHD_dynamic.c b/source/blender/nodes/intern/SHD_nodes/SHD_dynamic.c
index 4fcfe3a789a..fedca8f9086 100644
--- a/source/blender/nodes/intern/SHD_nodes/SHD_dynamic.c
+++ b/source/blender/nodes/intern/SHD_nodes/SHD_dynamic.c
@@ -345,7 +345,11 @@ static void node_dynamic_pyerror_print(bNode *node)
PyGILState_STATE gilstate = PyGILState_Ensure();
fprintf(stderr, "\nError in dynamic node script \"%s\":\n", node->name);
- if (PyErr_Occurred()) { PyErr_Print(); }
+ if (PyErr_Occurred()) {
+ PyErr_Print();
+ PyErr_Clear();
+ PySys_SetObject("last_traceback", NULL);
+ }
else { fprintf(stderr, "Not a valid dynamic node Python script.\n"); }
PyGILState_Release(gilstate);
diff --git a/source/blender/nodes/intern/SHD_nodes/SHD_invert.c b/source/blender/nodes/intern/SHD_nodes/SHD_invert.c
index 72ee1483ecf..fbab7f64cb3 100644
--- a/source/blender/nodes/intern/SHD_nodes/SHD_invert.c
+++ b/source/blender/nodes/intern/SHD_nodes/SHD_invert.c
@@ -1,5 +1,5 @@
/**
- * $Id: SHD_math.c,v 1.4 2007/04/04 13:58:12 jesterking Exp $
+ * $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
*
diff --git a/source/blender/nodes/intern/TEX_nodes/Makefile b/source/blender/nodes/intern/TEX_nodes/Makefile
index 7fad19a772c..ac741280478 100644
--- a/source/blender/nodes/intern/TEX_nodes/Makefile
+++ b/source/blender/nodes/intern/TEX_nodes/Makefile
@@ -1,5 +1,5 @@
#
-# $Id: Makefile 12796 2007-12-05 16:58:52Z sirdude $
+# $Id$
#
# ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
#
diff --git a/source/blender/nodes/intern/TEX_nodes/TEX_image.c b/source/blender/nodes/intern/TEX_nodes/TEX_image.c
index f9477fef12b..b84088da154 100644
--- a/source/blender/nodes/intern/TEX_nodes/TEX_image.c
+++ b/source/blender/nodes/intern/TEX_nodes/TEX_image.c
@@ -1,5 +1,5 @@
/**
- * $Id: TEX_image.c 10456 2007-04-04 13:58:12Z jesterking $
+ * $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
*
diff --git a/source/blender/nodes/intern/TEX_nodes/TEX_texture.c b/source/blender/nodes/intern/TEX_nodes/TEX_texture.c
index 884d2cd0eb6..30492b84764 100644
--- a/source/blender/nodes/intern/TEX_nodes/TEX_texture.c
+++ b/source/blender/nodes/intern/TEX_nodes/TEX_texture.c
@@ -47,7 +47,7 @@ static void colorfn(float *out, float *coord, bNode *node, bNodeStack **in, shor
Tex *nodetex = (Tex *)node->id;
- if(node->custom2) {
+ if(node->custom2 || node->need_exec==0) {
/* this node refers to its own texture tree! */
QUATCOPY(
out,
diff --git a/source/blender/nodes/intern/TEX_nodes/TEX_valToNor.c b/source/blender/nodes/intern/TEX_nodes/TEX_valToNor.c
index f63f5682030..0d24652a8f6 100644
--- a/source/blender/nodes/intern/TEX_nodes/TEX_valToNor.c
+++ b/source/blender/nodes/intern/TEX_nodes/TEX_valToNor.c
@@ -45,7 +45,7 @@ static void normalfn(float *out, float *coord, bNode *node, bNodeStack **in, sho
float nabla = tex_input_value(in[1], coord, thread);
float val;
- float nor[2];
+ float nor[3];
val = tex_input_value(in[0], coord, thread);
diff --git a/source/blender/nodes/intern/TEX_nodes/TEX_valToRgb.c b/source/blender/nodes/intern/TEX_nodes/TEX_valToRgb.c
index ec59769fdfd..71d9cb07e18 100644
--- a/source/blender/nodes/intern/TEX_nodes/TEX_valToRgb.c
+++ b/source/blender/nodes/intern/TEX_nodes/TEX_valToRgb.c
@@ -1,5 +1,5 @@
/**
- * $Id: SHD_valToRgb.c 10456 2007-04-04 13:58:12Z jesterking $
+ * $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
*
diff --git a/source/blender/nodes/intern/TEX_util.c b/source/blender/nodes/intern/TEX_util.c
index 2ff9717afa6..867e754f960 100644
--- a/source/blender/nodes/intern/TEX_util.c
+++ b/source/blender/nodes/intern/TEX_util.c
@@ -34,6 +34,12 @@
obtain a colour value from this, a node further up the chain reads
the TexDelegate* from its input stack, and uses tex_call_delegate to
retrieve the colour from the delegate.
+
+ comments: (ton)
+
+ This system needs recode, a node system should rely on the stack, and
+ callbacks for nodes only should evaluate own node, not recursively go
+ over other previous ones.
*/
#include <assert.h>
@@ -43,7 +49,8 @@
void tex_call_delegate(TexDelegate *dg, float *out, float *coord, short thread)
{
- dg->fn(out, coord, dg->node, dg->in, thread);
+ if(dg->node->need_exec)
+ dg->fn(out, coord, dg->node, dg->in, thread);
}
void tex_input(float *out, int sz, bNodeStack *in, float *coord, short thread)
diff --git a/source/blender/python/BPY_extern.h b/source/blender/python/BPY_extern.h
index 4b7238a2f7c..ff3e89a6e25 100644
--- a/source/blender/python/BPY_extern.h
+++ b/source/blender/python/BPY_extern.h
@@ -99,7 +99,9 @@ extern "C" {
/* 2.5 UI Scripts */
int BPY_run_python_script( struct bContext *C, const char *filename, struct Text *text ); // 2.5 working
int BPY_run_script_space_draw(struct bContext *C, struct SpaceScript * sc); // 2.5 working
+ void BPY_run_ui_scripts(struct bContext *C, int reload);
// int BPY_run_script_space_listener(struct bContext *C, struct SpaceScript * sc, struct ARegion *ar, struct wmNotifier *wmn); // 2.5 working
+ void BPY_update_modules( void ); // XXX - annoying, need this for pointers that get out of date
@@ -124,7 +126,6 @@ extern "C" {
void BPY_pydriver_update(void);
float BPY_pydriver_eval(struct ChannelDriver *driver);
- struct Object **BPY_pydriver_get_objects(struct ChannelDriver *driver);
int BPY_button_eval(char *expr, double *value);
@@ -139,7 +140,8 @@ extern "C" {
void BPY_scripts_clear_pyobjects( void );
void error_pyscript( void );
-
+ void BPY_DECREF(void *pyob_ptr); /* Py_DECREF() */
+
/* void BPY_Err_Handle(struct Text *text); */
/* void BPY_clear_bad_scriptlink(struct ID *id, struct Text *byebye); */
/* void BPY_clear_bad_scriptlist(struct ListBase *, struct Text *byebye); */
diff --git a/source/blender/python/CMakeLists.txt b/source/blender/python/CMakeLists.txt
index b94ae8749df..d15970e1df4 100644
--- a/source/blender/python/CMakeLists.txt
+++ b/source/blender/python/CMakeLists.txt
@@ -47,8 +47,3 @@ ENDIF(WITH_FFMPEG)
ADD_DEFINITIONS(-DWITH_CCGSUBSURF)
BLENDERLIB(bf_python "${SRC}" "${INC}")
-
-IF(WITH_INTERNATIONAL)
- ADD_DEFINITIONS(-DWITH_FREETYPE2)
-ENDIF(WITH_INTERNATIONAL)
-
diff --git a/source/blender/python/SConscript b/source/blender/python/SConscript
index 5fcf4a4eb34..9d7fcf6a9cf 100644
--- a/source/blender/python/SConscript
+++ b/source/blender/python/SConscript
@@ -14,3 +14,4 @@ if env['OURPLATFORM'] in ('win32-mingw', 'win32-vc') and env['BF_DEBUG']:
defs.append('Py_TRACE_REFS')
env.BlenderLib( libname = 'bf_python', sources = Split(sources), includes = Split(incs), defines = defs, libtype = ['core'], priority = [140])
+
diff --git a/source/blender/python/epy_doc_gen.py b/source/blender/python/epy_doc_gen.py
index a108929febc..9f3efc916bf 100644
--- a/source/blender/python/epy_doc_gen.py
+++ b/source/blender/python/epy_doc_gen.py
@@ -18,13 +18,23 @@
#
# #**** END GPL LICENSE BLOCK #****
-# Usage,
-# run this script from blenders root path once you have compiled blender
-# ./blender.bin -b -P source/blender/python/epy_doc_gen.py
-#
-# This will generate rna.py, generate html docs by running...
-# epydoc source/blender/python/doc/rna.py -o source/blender/python/doc/html -v --no-sourcecode --name="RNA API" --url="http://brechtvanlommelfanclub.com" --graph=classtree
-#
+script_help_msg = '''
+Usage,
+run this script from blenders root path once you have compiled blender
+ ./blender.bin -P source/blender/python/epy_doc_gen.py
+
+This will generate rna.py and bpyoperator.py in "./source/blender/python/doc/"
+Generate html docs by running...
+
+ epydoc source/blender/python/doc/*.py -v \\
+ -o source/blender/python/doc/html \\
+ --inheritance=included \\
+ --no-sourcecode \\
+ --graph=classtree \\
+ --graph-font-size=8
+
+'''
+
# if you dont have graphvis installed ommit the --graph arg.
def range_str(val):
@@ -49,6 +59,125 @@ def full_rna_struct_path(rna_struct):
else:
return rna_struct.identifier
+def write_func(rna, ident, out, func_type):
+ # Keyword attributes
+ kw_args = [] # "foo = 1", "bar=0.5", "spam='ENUM'"
+ kw_arg_attrs = [] # "@type mode: int"
+
+ rna_struct= rna.rna_type
+
+ # Operators and functions work differently
+ if func_type=='OPERATOR':
+ rna_func_name = rna_struct.identifier
+ rna_func_desc = rna_struct.description
+ items = rna_struct.properties.items()
+ else:
+ rna_func_name = rna.identifier
+ rna_func_desc = rna.description
+ items = rna.parameters.items()
+
+ for rna_prop_identifier, rna_prop in items:
+ if rna_prop_identifier=='rna_type':
+ continue
+
+ # clear vars
+ val = val_error = val_str = rna_prop_type = None
+
+ # ['rna_type', 'name', 'array_length', 'description', 'hard_max', 'hard_min', 'identifier', 'precision', 'readonly', 'soft_max', 'soft_min', 'step', 'subtype', 'type']
+ #rna_prop= op_rna.rna_type.properties[attr]
+ rna_prop_type = rna_prop.type.lower() # enum, float, int, boolean
+
+
+ try: length = rna_prop.array_length
+ except: length = 0
+
+ array_str = get_array_str(length)
+
+ kw_type_str= "@type %s: %s%s" % (rna_prop_identifier, rna_prop_type, array_str)
+ kw_param_str= "@param %s: %s" % (rna_prop_identifier, rna_prop.description)
+ kw_param_set = False
+
+ if func_type=='OPERATOR':
+ try:
+ val = getattr(rna, rna_prop_identifier)
+ val_error = False
+ except:
+ val = "'<UNDEFINED>'"
+ val_error = True
+
+
+ if val_error:
+ val_str = val
+ elif rna_prop_type=='float':
+ if length==0:
+ val_str= '%g' % val
+ if '.' not in val_str:
+ val_str += '.0'
+ else:
+ # array
+ val_str = str(tuple(val))
+
+ kw_param_str += (' in (%s, %s)' % (range_str(rna_prop.hard_min), range_str(rna_prop.hard_max)))
+ kw_param_set= True
+
+ elif rna_prop_type=='int':
+ if length==0:
+ val_str='%d' % val
+ else:
+ val_str = str(tuple(val))
+
+ # print(dir(rna_prop))
+ kw_param_str += (' in (%s, %s)' % (range_str(rna_prop.hard_min), range_str(rna_prop.hard_max)))
+ # These strings dont have a max length???
+ #kw_param_str += ' (maximum length of %s)' % (rna_prop.max_length)
+ kw_param_set= True
+
+ elif rna_prop_type=='boolean':
+ if length==0:
+ if val: val_str='True'
+ else: val_str='False'
+ else:
+ val_str = str(tuple(val))
+
+ elif rna_prop_type=='enum':
+ # no array here?
+ val_str="'%s'" % val
+ # Too cramped
+ kw_param_str += (' in (%s)' % ', '.join(rna_prop.items.keys()))
+
+ kw_param_set= True
+
+ elif rna_prop_type=='string':
+ # no array here?
+ val_str='"%s"' % val
+
+ # todo - collection - array
+ # print (rna_prop.type)
+
+ kw_args.append('%s = %s' % (rna_prop_identifier, val_str))
+
+ # stora
+ else:
+ # currently functions dont have a default value
+ kw_args.append('%s' % (rna_prop_identifier))
+
+
+ # Same for operators and functions
+ kw_arg_attrs.append(kw_type_str)
+ if kw_param_set:
+ kw_arg_attrs.append(kw_param_str)
+
+
+
+ out.write(ident+'def %s(%s):\n' % (rna_func_name, ', '.join(kw_args)))
+ out.write(ident+'\t"""\n')
+ out.write(ident+'\t%s\n' % rna_func_desc)
+ for desc in kw_arg_attrs:
+ out.write(ident+'\t%s\n' % desc)
+ out.write(ident+'\t@rtype: None\n')
+ out.write(ident+'\t"""\n')
+
+
def rna2epy(target_path):
@@ -57,8 +186,12 @@ def rna2epy(target_path):
rna_full_path_dict = {} # store the result of full_rna_struct_path(rna_struct)
rna_children_dict = {} # store all rna_structs nested from here
rna_references_dict = {} # store a list of rna path strings that reference this type
+ rna_functions_dict = {} # store all functions directly in this type (not inherited)
rna_words = set()
+ # def write_func(rna_func, ident):
+
+
def write_struct(rna_struct, ident):
identifier = rna_struct.identifier
@@ -132,7 +265,13 @@ def rna2epy(target_path):
out.write(ident+ '\t@type %s: %sL{%s}%s%s\n' % (rna_prop_identifier, collection_str, rna_prop_ptr.identifier, array_str, readonly_str))
else:
if rna_prop_type == 'enum':
- out.write(ident+ '\t@ivar %s: %s in (%s)\n' % (rna_prop_identifier, rna_desc, ', '.join(rna_prop.items.keys())))
+ if 0:
+ out.write(ident+ '\t@ivar %s: %s in (%s)\n' % (rna_prop_identifier, rna_desc, ', '.join(rna_prop.items.keys())))
+ else:
+ out.write(ident+ '\t@ivar %s: %s in...\n' % (rna_prop_identifier, rna_desc))
+ for e in rna_prop.items.keys():
+ out.write(ident+ '\t\t- %s\n' % e)
+
out.write(ident+ '\t@type %s: %s%s%s\n' % (rna_prop_identifier, rna_prop_type, array_str, readonly_str))
elif rna_prop_type == 'int' or rna_prop_type == 'float':
out.write(ident+ '\t@ivar %s: %s\n' % (rna_prop_identifier, rna_desc))
@@ -147,6 +286,14 @@ def rna2epy(target_path):
out.write(ident+ '\t"""\n\n')
+
+ # Write functions
+ # for rna_func in rna_struct.functions: # Better ignore inherited (line below)
+ for rna_func in rna_functions_dict[identifier]:
+ write_func(rna_func, ident+'\t', out, 'FUNCTION')
+
+ out.write('\n')
+
# Now write children recursively
for child in rna_children_dict[identifier]:
write_struct(child, ident + '\t')
@@ -177,14 +324,24 @@ def rna2epy(target_path):
# Store full rna path 'GameObjectSettings' -> 'Object.GameObjectSettings'
rna_full_path_dict[identifier] = full_rna_struct_path(rna_struct)
+ # Store a list of functions, remove inherited later
+ rna_functions_dict[identifier]= list(rna_struct.functions)
+
+
# fill in these later
rna_children_dict[identifier]= []
rna_references_dict[identifier]= []
+
else:
print("Ignoring", rna_type_name)
+ # Sucks but we need to copy this so we can check original parent functions
+ rna_functions_dict__copy = {}
+ for key, val in rna_functions_dict.items():
+ rna_functions_dict__copy[key] = val[:]
+
structs.sort() # not needed but speeds up sort below, setting items without an inheritance first
@@ -244,6 +401,17 @@ def rna2epy(target_path):
nested = rna_struct.nested
if nested:
rna_children_dict[nested.identifier].append(rna_struct)
+
+
+ if rna_base:
+ rna_funcs = rna_functions_dict[identifier]
+ if rna_funcs:
+ # Remove inherited functions if we have any
+ rna_base_funcs = rna_functions_dict__copy[rna_base]
+ rna_funcs[:] = [f for f in rna_funcs if f not in rna_base_funcs]
+
+ rna_functions_dict__copy.clear()
+ del rna_functions_dict__copy
# Sort the refs, just reads nicer
for rna_refs in rna_references_dict.values():
@@ -316,8 +484,7 @@ def rna2epy(target_path):
ref = rna_ref_string.split('.')[-2]
out.write('\t"%s" -> "%s" [label="%s" weight=0.01];\n' % (ref, identifier, rna_ref_string))
-
-
+
out.write('}\n')
out.close()
@@ -332,9 +499,6 @@ def rna2epy(target_path):
for w in rna_words:
out.write('%s\n' % w)
-
-
-
def op2epy(target_path):
out = open(target_path, 'w')
@@ -349,108 +513,22 @@ def op2epy(target_path):
if op.startswith('__'):
continue
- # Keyword attributes
- kw_args = [] # "foo = 1", "bar=0.5", "spam='ENUM'"
- kw_arg_attrs = [] # "@type mode: int"
-
# rna = getattr(bpy.types, op).__rna__
rna = bpy.ops.__rna__(op)
- rna_struct = rna.rna_type
- # print (dir(rna))
- # print (dir(rna_struct))
- for rna_prop_identifier, rna_prop in rna_struct.properties.items():
- if rna_prop_identifier=='rna_type':
- continue
- # ['rna_type', 'name', 'array_length', 'description', 'hard_max', 'hard_min', 'identifier', 'precision', 'readonly', 'soft_max', 'soft_min', 'step', 'subtype', 'type']
- #rna_prop= op_rna.rna_type.properties[attr]
- rna_prop_type = rna_prop.type.lower() # enum, float, int, boolean
-
- try: length = rna_prop.array_length
- except: length = 0
-
- array_str = get_array_str(length)
-
- try:
- val = getattr(rna, rna_prop_identifier)
- val_error = False
- except:
- val = "'<UNDEFINED>'"
- val_error = True
-
- kw_type_str= "@type %s: %s%s" % (rna_prop_identifier, rna_prop_type, array_str)
- kw_param_str= "@param %s: %s" % (rna_prop_identifier, rna_prop.description)
- kw_param_set = False
-
- if val_error:
- val_str = val
- elif rna_prop_type=='float':
- if length==0:
- val_str= '%g' % val
- if '.' not in val_str:
- val_str += '.0'
- else:
- # array
- val_str = str(tuple(val))
-
- kw_param_str += (' in (%s, %s)' % (range_str(rna_prop.hard_min), range_str(rna_prop.hard_max)))
- kw_param_set= True
-
- elif rna_prop_type=='int':
- if length==0:
- val_str='%d' % val
- else:
- val_str = str(tuple(val))
-
- # print(dir(rna_prop))
- kw_param_str += (' in (%s, %s)' % (range_str(rna_prop.hard_min), range_str(rna_prop.hard_max)))
- # These strings dont have a max length???
- #kw_param_str += ' (maximum length of %s)' % (rna_prop.max_length)
- kw_param_set= True
-
- elif rna_prop_type=='boolean':
- if length==0:
- if val: val_str='True'
- else: val_str='False'
- else:
- val_str = str(tuple(val))
-
- elif rna_prop_type=='enum':
- # no array here?
- val_str="'%s'" % val
- kw_param_str += (' in (%s)' % ', '.join(rna_prop.items.keys()))
- kw_param_set= True
-
- elif rna_prop_type=='string':
- # no array here?
- val_str='"%s"' % val
-
- # todo - collection - array
- # print (rna_prop.type)
-
- kw_args.append('%s = %s' % (rna_prop_identifier, val_str))
-
- # stora
-
- kw_arg_attrs.append(kw_type_str)
- if kw_param_set:
- kw_arg_attrs.append(kw_param_str)
-
-
-
- out.write('def %s(%s):\n' % (op, ', '.join(kw_args)))
- out.write('\t"""\n')
- out.write('\t%s\n' % rna_struct.description)
- for desc in kw_arg_attrs:
- out.write('\t%s\n' % desc)
- out.write('\t@rtype: None\n')
- out.write('\t"""\n')
-
+ write_func(rna, '', out, 'OPERATOR')
out.write('\n')
out.close()
if __name__ == '__main__':
- rna2epy('source/blender/python/doc/rna.py')
- op2epy('source/blender/python/doc/bpyoperator.py')
-
+ if 'bpy' not in dir():
+ print("\nError, this script must run from inside blender2.5")
+ print(script_help_msg)
+
+ else:
+ rna2epy('source/blender/python/doc/rna.py')
+ op2epy('source/blender/python/doc/bpyoperator.py')
+
+ import sys
+ sys.exit()
diff --git a/source/blender/python/intern/Makefile b/source/blender/python/intern/Makefile
index ea08ecac945..3e28f5aac31 100644
--- a/source/blender/python/intern/Makefile
+++ b/source/blender/python/intern/Makefile
@@ -42,7 +42,6 @@ CPPFLAGS += -I$(NAN_PYTHON)/include/python$(NAN_PYTHON_VERSION)
# PreProcessor stuff
CPPFLAGS += -I$(NAN_GHOST)/include
-CPPFLAGS += -I$(NAN_BMFONT)/include
CPPFLAGS += -I$(NAN_SOUNDSYSTEM)/include $(NAN_SDLCFLAGS)
# modules
diff --git a/source/blender/python/intern/bpy_compat.h b/source/blender/python/intern/bpy_compat.h
index 4f64c916ca2..ad6b7a5e85c 100644
--- a/source/blender/python/intern/bpy_compat.h
+++ b/source/blender/python/intern/bpy_compat.h
@@ -75,6 +75,7 @@
/* older then python 2.5 - define these */
#if (PY_VERSION_HEX < 0x02050000)
#define Py_ssize_t ssize_t
+typedef Py_ssize_t (*lenfunc)(PyObject *);
#ifndef Py_RETURN_NONE
#define Py_RETURN_NONE return Py_BuildValue("O", Py_None)
#endif
diff --git a/source/blender/python/intern/bpy_interface.c b/source/blender/python/intern/bpy_interface.c
index 94ec8deebe4..140c7ef947d 100644
--- a/source/blender/python/intern/bpy_interface.c
+++ b/source/blender/python/intern/bpy_interface.c
@@ -1,25 +1,40 @@
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+
+#ifndef WIN32
+#include <dirent.h>
+#else
+#include "BLI_winstuff.h"
+#endif
#include <Python.h>
#include "compile.h" /* for the PyCodeObject */
#include "eval.h" /* for PyEval_EvalCode */
-#include "BKE_context.h"
-
#include "bpy_compat.h"
#include "bpy_rna.h"
#include "bpy_operator.h"
#include "bpy_ui.h"
+#include "DNA_anim_types.h"
#include "DNA_space_types.h"
-
-#include "BKE_text.h"
#include "DNA_text_types.h"
+
#include "MEM_guardedalloc.h"
+#include "BLI_util.h"
+#include "BLI_string.h"
+
+#include "BKE_context.h"
+#include "BKE_fcurve.h"
+#include "BKE_text.h"
+
+#include "BPY_extern.h"
+
void BPY_free_compiled_text( struct Text *text )
{
if( text->compiled ) {
@@ -29,35 +44,56 @@ void BPY_free_compiled_text( struct Text *text )
}
/*****************************************************************************
-* Description: This function creates a new Python dictionary object.
+* Description: Creates the bpy module and adds it to sys.modules for importing
*****************************************************************************/
-
-static PyObject *CreateGlobalDictionary( bContext *C )
+static void bpy_init_modules( void )
{
PyObject *mod;
- PyObject *dict = PyDict_New( );
- PyObject *item = PyUnicode_FromString( "__main__" );
- PyDict_SetItemString( dict, "__builtins__", PyEval_GetBuiltins( ) );
- PyDict_SetItemString( dict, "__name__", item );
- Py_DECREF(item);
- /* add bpy to global namespace */
mod = PyModule_New("bpy");
- PyDict_SetItemString( dict, "bpy", mod );
- Py_DECREF(mod);
PyModule_AddObject( mod, "data", BPY_rna_module() );
/* PyModule_AddObject( mod, "doc", BPY_rna_doc() ); */
PyModule_AddObject( mod, "types", BPY_rna_types() );
- PyModule_AddObject( mod, "ops", BPY_operator_module(C) );
+ PyModule_AddObject( mod, "ops", BPY_operator_module() );
PyModule_AddObject( mod, "ui", BPY_ui_module() ); // XXX very experemental, consider this a test, especially PyCObject is not meant to be perminant
+ /* add the module so we can import it */
+ PyDict_SetItemString(PySys_GetObject("modules"), "bpy", mod);
+ Py_DECREF(mod);
+}
+
+#if (PY_VERSION_HEX < 0x02050000)
+PyObject *PyImport_ImportModuleLevel(char *name, void *a, void *b, void *c, int d)
+{
+ return PyImport_ImportModule(name);
+}
+#endif
+
+void BPY_update_modules( void )
+{
+ PyObject *mod= PyImport_ImportModuleLevel("bpy", NULL, NULL, NULL, 0);
+ PyModule_AddObject( mod, "data", BPY_rna_module() );
+ PyModule_AddObject( mod, "types", BPY_rna_types() );
+}
+
+/*****************************************************************************
+* Description: This function creates a new Python dictionary object.
+*****************************************************************************/
+static PyObject *CreateGlobalDictionary( bContext *C )
+{
+ PyObject *mod;
+ PyObject *dict = PyDict_New( );
+ PyObject *item = PyUnicode_FromString( "__main__" );
+ PyDict_SetItemString( dict, "__builtins__", PyEval_GetBuiltins( ) );
+ PyDict_SetItemString( dict, "__name__", item );
+ Py_DECREF(item);
+
// XXX - evil, need to access context
item = PyCObject_FromVoidPtr( C, NULL );
PyDict_SetItemString( dict, "__bpy_context__", item );
Py_DECREF(item);
-
// XXX - put somewhere more logical
{
PyMethodDef *ml;
@@ -73,13 +109,18 @@ static PyObject *CreateGlobalDictionary( bContext *C )
}
}
+ /* add bpy to global namespace */
+ mod= PyImport_ImportModuleLevel("bpy", NULL, NULL, NULL, 0);
+ PyDict_SetItemString( dict, "bpy", mod );
+ Py_DECREF(mod);
+
return dict;
}
-void BPY_start_python( void )
+void BPY_start_python( int argc, char **argv )
{
PyThreadState *py_tstate = NULL;
-
+
Py_Initialize( );
//PySys_SetArgv( argc_copy, argv_copy );
@@ -87,7 +128,10 @@ void BPY_start_python( void )
/* Initialize thread support (also acquires lock) */
PyEval_InitThreads();
- // todo - sys paths - our own imports
+
+ /* bpy.* and lets us import it */
+ bpy_init_modules();
+
py_tstate = PyGILState_GetThisThreadState();
PyEval_ReleaseThread(py_tstate);
@@ -120,6 +164,8 @@ int BPY_run_python_script( bContext *C, const char *fn, struct Text *text )
gilstate = PyGILState_Ensure();
+ BPY_update_modules(); /* can give really bad results if this isnt here */
+
py_dict = CreateGlobalDictionary(C);
if (text) {
@@ -133,7 +179,7 @@ int BPY_run_python_script( bContext *C, const char *fn, struct Text *text )
MEM_freeN( buf );
if( PyErr_Occurred( ) ) {
- PyErr_Print();
+ PyErr_Print(); PyErr_Clear();
BPY_free_compiled_text( text );
PyGILState_Release(gilstate);
return 0;
@@ -149,10 +195,12 @@ int BPY_run_python_script( bContext *C, const char *fn, struct Text *text )
}
if (!py_result) {
- PyErr_Print();
+ PyErr_Print(); PyErr_Clear();
} else {
Py_DECREF( py_result );
}
+
+ Py_DECREF(py_dict);
PyGILState_Release(gilstate);
//BPY_end_python();
@@ -174,7 +222,7 @@ static void exit_pydraw( SpaceScript * sc, short err )
script = sc->script;
if( err ) {
- PyErr_Print( );
+ PyErr_Print(); PyErr_Clear();
script->flags = 0; /* mark script struct for deletion */
SCRIPT_SET_NULL(script);
script->scriptname[0] = '\0';
@@ -211,7 +259,7 @@ static int bpy_run_script_init(bContext *C, SpaceScript * sc)
return 1;
}
-int BPY_run_script_space_draw(bContext *C, SpaceScript * sc)
+int BPY_run_script_space_draw(struct bContext *C, SpaceScript * sc)
{
if (bpy_run_script_init(C, sc)) {
PyGILState_STATE gilstate = PyGILState_Ensure();
@@ -241,6 +289,11 @@ int BPY_run_script_space_listener(bContext *C, SpaceScript * sc)
return 1;
}
+void BPY_DECREF(void *pyob_ptr)
+{
+ Py_DECREF((PyObject *)pyob_ptr);
+}
+
#if 0
/* called from the the scripts window, assume context is ok */
int BPY_run_python_script_space(const char *modulename, const char *func)
@@ -276,15 +329,295 @@ int BPY_run_python_script_space(const char *modulename, const char *func)
}
}
- if (!py_result)
- PyErr_Print();
- else
+ if (!py_result) {
+ PyErr_Print(); PyErr_Clear();
+ } else
Py_DECREF( py_result );
Py_XDECREF(module);
+ Py_DECREF(py_dict);
PyGILState_Release(gilstate);
return 1;
}
#endif
+
+// #define TIME_REGISTRATION
+
+#ifdef TIME_REGISTRATION
+#include "PIL_time.h"
+#endif
+
+/* XXX this is temporary, need a proper script registration system for 2.5 */
+void BPY_run_ui_scripts(bContext *C, int reload)
+{
+#ifdef TIME_REGISTRATION
+ double time = PIL_check_seconds_timer();
+#endif
+ DIR *dir;
+ struct dirent *de;
+ char *file_extension;
+ char path[FILE_MAX];
+ char *dirname= BLI_gethome_folder("ui");
+ int filelen; /* filename length */
+
+ PyGILState_STATE gilstate;
+ PyObject *mod;
+ PyObject *sys_path_orig;
+ PyObject *sys_path_new;
+
+ if(!dirname)
+ return;
+
+ dir = opendir(dirname);
+
+ if(!dir)
+ return;
+
+ gilstate = PyGILState_Ensure();
+
+ /* backup sys.path */
+ sys_path_orig= PySys_GetObject("path");
+ Py_INCREF(sys_path_orig); /* dont free it */
+
+ sys_path_new= PyList_New(1);
+ PyList_SET_ITEM(sys_path_new, 0, PyUnicode_FromString(dirname));
+ PySys_SetObject("path", sys_path_new);
+ Py_DECREF(sys_path_new);
+
+
+ while((de = readdir(dir)) != NULL) {
+ /* We could stat the file but easier just to let python
+ * import it and complain if theres a problem */
+
+ file_extension = strstr(de->d_name, ".py");
+
+ if(file_extension && *(file_extension + 3) == '\0') {
+ filelen = strlen(de->d_name);
+ BLI_strncpy(path, de->d_name, filelen-2); /* cut off the .py on copy */
+
+ mod= PyImport_ImportModuleLevel(path, NULL, NULL, NULL, 0);
+ if (mod) {
+ if (reload) {
+ PyObject *mod_orig= mod;
+ mod= PyImport_ReloadModule(mod);
+ Py_DECREF(mod_orig);
+ }
+ }
+
+ if(mod) {
+ Py_DECREF(mod); /* could be NULL from reloading */
+ } else {
+ PyErr_Print(); PyErr_Clear();
+ fprintf(stderr, "unable to import \"%s\" %s/%s\n", path, dirname, de->d_name);
+ }
+ }
+ }
+
+ closedir(dir);
+
+ PySys_SetObject("path", sys_path_orig);
+ Py_DECREF(sys_path_orig);
+
+ PyGILState_Release(gilstate);
+#ifdef TIME_REGISTRATION
+ printf("script time %f\n", (PIL_check_seconds_timer()-time));
+#endif
+}
+
+/* ****************************************** */
+/* Drivers - PyExpression Evaluation */
+
+/* for pydrivers (drivers using one-line Python expressions to express relationships between targets) */
+PyObject *bpy_pydriver_Dict = NULL;
+
+/* For faster execution we keep a special dictionary for pydrivers, with
+ * the needed modules and aliases.
+ */
+static int bpy_pydriver_create_dict(void)
+{
+ PyObject *d, *mod;
+
+ /* validate namespace for driver evaluation */
+ if (bpy_pydriver_Dict) return -1;
+
+ d = PyDict_New();
+ if (d == NULL)
+ return -1;
+ else
+ bpy_pydriver_Dict = d;
+
+ /* import some modules: builtins, bpy, math, (Blender.noise )*/
+ PyDict_SetItemString(d, "__builtins__", PyEval_GetBuiltins());
+
+ mod = PyImport_ImportModule("math");
+ if (mod) {
+ PyDict_Merge(d, PyModule_GetDict(mod), 0); /* 0 - dont overwrite existing values */
+
+ /* Only keep for backwards compat! - just import all math into root, they are standard */
+ PyDict_SetItemString(d, "math", mod);
+ PyDict_SetItemString(d, "m", mod);
+ Py_DECREF(mod);
+ }
+
+ /* add bpy to global namespace */
+ mod= PyImport_ImportModuleLevel("bpy", NULL, NULL, NULL, 0);
+ if (mod) {
+ PyDict_SetItemString(bpy_pydriver_Dict, "bpy", mod);
+ Py_DECREF(mod);
+ }
+
+
+#if 0 // non existant yet
+ mod = PyImport_ImportModule("Blender.Noise");
+ if (mod) {
+ PyDict_SetItemString(d, "noise", mod);
+ PyDict_SetItemString(d, "n", mod);
+ Py_DECREF(mod);
+ } else {
+ PyErr_Clear();
+ }
+
+ /* If there's a Blender text called pydrivers.py, import it.
+ * Users can add their own functions to this module.
+ */
+ if (G.f & G_DOSCRIPTLINKS) {
+ mod = importText("pydrivers"); /* can also use PyImport_Import() */
+ if (mod) {
+ PyDict_SetItemString(d, "pydrivers", mod);
+ PyDict_SetItemString(d, "p", mod);
+ Py_DECREF(mod);
+ } else {
+ PyErr_Clear();
+ }
+ }
+#endif // non existant yet
+
+ return 0;
+}
+
+/* Update function, it gets rid of pydrivers global dictionary, forcing
+ * BPY_pydriver_eval to recreate it. This function is used to force
+ * reloading the Blender text module "pydrivers.py", if available, so
+ * updates in it reach pydriver evaluation.
+ */
+void BPY_pydriver_update(void)
+{
+ PyGILState_STATE gilstate = PyGILState_Ensure();
+
+ if (bpy_pydriver_Dict) { /* free the global dict used by pydrivers */
+ PyDict_Clear(bpy_pydriver_Dict);
+ Py_DECREF(bpy_pydriver_Dict);
+ bpy_pydriver_Dict = NULL;
+ }
+
+ PyGILState_Release(gilstate);
+
+ return;
+}
+
+/* error return function for BPY_eval_pydriver */
+static float pydriver_error(ChannelDriver *driver)
+{
+ if (bpy_pydriver_Dict) { /* free the global dict used by pydrivers */
+ PyDict_Clear(bpy_pydriver_Dict);
+ Py_DECREF(bpy_pydriver_Dict);
+ bpy_pydriver_Dict = NULL;
+ }
+
+ driver->flag |= DRIVER_FLAG_INVALID; /* py expression failed */
+ fprintf(stderr, "\nError in Driver: The following Python expression failed:\n\t'%s'\n\n", driver->expression);
+
+ PyErr_Print(); PyErr_Clear();
+
+ return 0.0f;
+}
+
+/* This evals py driver expressions, 'expr' is a Python expression that
+ * should evaluate to a float number, which is returned.
+ */
+float BPY_pydriver_eval (ChannelDriver *driver)
+{
+ PyObject *driver_vars=NULL;
+ PyObject *retval;
+ PyGILState_STATE gilstate;
+
+ DriverTarget *dtar;
+ float result = 0.0f; /* default return */
+ char *expr = NULL;
+ short targets_ok= 1;
+
+ /* sanity checks - should driver be executed? */
+ if ((driver == NULL) /*|| (G.f & G_DOSCRIPTLINKS)==0*/)
+ return result;
+
+ /* get the py expression to be evaluated */
+ expr = driver->expression;
+ if ((expr == NULL) || (expr[0]=='\0'))
+ return result;
+
+ gilstate = PyGILState_Ensure();
+
+ /* init global dictionary for py-driver evaluation settings */
+ if (!bpy_pydriver_Dict) {
+ if (bpy_pydriver_create_dict() != 0) {
+ fprintf(stderr, "Pydriver error: couldn't create Python dictionary");
+ PyGILState_Release(gilstate);
+ return result;
+ }
+ }
+
+ /* add target values to a dict that will be used as '__locals__' dict */
+ driver_vars = PyDict_New(); // XXX do we need to decref this?
+ for (dtar= driver->targets.first; dtar; dtar= dtar->next) {
+ PyObject *driver_arg = NULL;
+ float tval = 0.0f;
+
+ /* try to get variable value */
+ tval= driver_get_target_value(driver, dtar);
+ driver_arg= PyFloat_FromDouble((double)tval);
+
+ /* try to add to dictionary */
+ if (PyDict_SetItemString(driver_vars, dtar->name, driver_arg)) {
+ /* this target failed - bad name */
+ if (targets_ok) {
+ /* first one - print some extra info for easier identification */
+ fprintf(stderr, "\nBPY_pydriver_eval() - Error while evaluating PyDriver:\n");
+ targets_ok= 0;
+ }
+
+ fprintf(stderr, "\tBPY_pydriver_eval() - couldn't add variable '%s' to namespace \n", dtar->name);
+ PyErr_Print(); PyErr_Clear();
+ }
+ }
+
+ /* execute expression to get a value */
+ retval = PyRun_String(expr, Py_eval_input, bpy_pydriver_Dict, driver_vars);
+
+ /* decref the driver vars first... */
+ Py_DECREF(driver_vars);
+
+ /* process the result */
+ if (retval == NULL) {
+ result = pydriver_error(driver);
+ PyGILState_Release(gilstate);
+ return result;
+ }
+
+ result = (float)PyFloat_AsDouble(retval);
+ Py_DECREF(retval);
+
+ if ((result == -1) && PyErr_Occurred()) {
+ result = pydriver_error(driver);
+ PyGILState_Release(gilstate);
+ return result;
+ }
+
+ /* all fine, make sure the "invalid expression" flag is cleared */
+ driver->flag &= ~DRIVER_FLAG_INVALID;
+
+ PyGILState_Release(gilstate);
+
+ return result;
+}
diff --git a/source/blender/python/intern/bpy_operator.c b/source/blender/python/intern/bpy_operator.c
index 02f4723c037..f8dcb1f43a1 100644
--- a/source/blender/python/intern/bpy_operator.c
+++ b/source/blender/python/intern/bpy_operator.c
@@ -24,9 +24,10 @@
*/
#include "bpy_operator.h"
-#include "bpy_opwrapper.h"
+#include "bpy_operator_wrap.h"
#include "bpy_rna.h" /* for setting arg props only - pyrna_py_to_prop() */
#include "bpy_compat.h"
+#include "bpy_util.h"
//#include "blendef.h"
#include "BLI_dynstr.h"
@@ -54,7 +55,7 @@ int PYOP_props_from_dict(PointerRNA *ptr, PyObject *kw)
PropertyRNA *prop, *iterprop;
CollectionPropertyIterator iter;
- iterprop= RNA_struct_iterator_property(ptr);
+ iterprop= RNA_struct_iterator_property(ptr->type);
RNA_property_collection_begin(ptr, iterprop, &iter);
totkw = kw ? PyDict_Size(kw):0;
@@ -62,7 +63,7 @@ int PYOP_props_from_dict(PointerRNA *ptr, PyObject *kw)
for(; iter.valid; RNA_property_collection_next(&iter)) {
prop= iter.ptr.data;
- arg_name= RNA_property_identifier(&iter.ptr, prop);
+ arg_name= RNA_property_identifier(prop);
if (strcmp(arg_name, "rna_type")==0) continue;
@@ -80,7 +81,7 @@ int PYOP_props_from_dict(PointerRNA *ptr, PyObject *kw)
break;
}
- if (pyrna_py_to_prop(ptr, prop, item)) {
+ if (pyrna_py_to_prop(ptr, prop, NULL, item)) {
error_val= -1;
break;
}
@@ -128,7 +129,6 @@ static PyObject *pyop_base_call( PyObject * self, PyObject * args, PyObject * k
bContext *C = (bContext *)PyCObject_AsVoidPtr(PyDict_GetItemString(PyEval_GetGlobals(), "__bpy_context__"));
char *opname = _PyUnicode_AsString(self);
- char *report_str= NULL;
if (PyTuple_Size(args)) {
PyErr_SetString( PyExc_AttributeError, "All operator args must be keywords");
@@ -157,16 +157,10 @@ static PyObject *pyop_base_call( PyObject * self, PyObject * args, PyObject * k
WM_operator_call_py(C, ot, &ptr, &reports);
- report_str= BKE_reports_string(&reports, RPT_ERROR);
-
- if (report_str) {
- PyErr_SetString(PyExc_SystemError, report_str);
- MEM_freeN(report_str);
+ if(BPy_reports_to_error(&reports))
error_val = -1;
- }
- if (reports.list.first)
- BKE_reports_clear(&reports);
+ BKE_reports_clear(&reports);
}
WM_operator_properties_free(&ptr);
@@ -262,7 +256,7 @@ static PyObject *pyop_base_rna(PyObject *self, PyObject *pyname)
PyTypeObject pyop_base_Type = {NULL};
-PyObject *BPY_operator_module( bContext *C )
+PyObject *BPY_operator_module( void )
{
pyop_base_Type.tp_name = "OperatorBase";
pyop_base_Type.tp_basicsize = sizeof( BPy_OperatorBase );
diff --git a/source/blender/python/intern/bpy_operator.h b/source/blender/python/intern/bpy_operator.h
index 8eb0b887baa..c4741f936bf 100644
--- a/source/blender/python/intern/bpy_operator.h
+++ b/source/blender/python/intern/bpy_operator.h
@@ -40,7 +40,7 @@ typedef struct {
PyObject_HEAD /* required python macro */
} BPy_OperatorBase;
-PyObject *BPY_operator_module(bContext *C );
+PyObject *BPY_operator_module(void);
/* fill in properties from a python dict */
int PYOP_props_from_dict(PointerRNA *ptr, PyObject *kw);
diff --git a/source/blender/python/intern/bpy_opwrapper.c b/source/blender/python/intern/bpy_operator_wrap.c
index b7d4c82588e..43d62b3005f 100644
--- a/source/blender/python/intern/bpy_opwrapper.c
+++ b/source/blender/python/intern/bpy_operator_wrap.c
@@ -24,7 +24,7 @@
*/
-#include "bpy_opwrapper.h"
+#include "bpy_operator_wrap.h"
#include "BLI_listbase.h"
#include "BKE_context.h"
#include "BKE_report.h"
@@ -45,14 +45,6 @@
#define PYOP_ATTR_IDNAME "__name__" /* use pythons class name */
#define PYOP_ATTR_DESCRIPTION "__doc__" /* use pythons docstring */
-typedef struct PyOperatorType {
- void *next, *prev;
- char idname[OP_MAX_TYPENAME];
- char name[OP_MAX_TYPENAME];
- char description[OP_MAX_TYPENAME]; // XXX should be longer?
- PyObject *py_class;
-} PyOperatorType;
-
static PyObject *pyop_dict_from_event(wmEvent *event)
{
PyObject *dict= PyDict_New();
@@ -189,16 +181,22 @@ static struct BPY_flag_def pyop_ret_flags[] = {
#define PYOP_INVOKE 2
#define PYOP_POLL 3
+extern void BPY_update_modules( void ); //XXX temp solution
+
static int PYTHON_OT_generic(int mode, bContext *C, wmOperator *op, wmEvent *event)
{
- PyOperatorType *pyot = op->type->pyop_data;
+ PyObject *py_class = op->type->pyop_data;
PyObject *args;
- PyObject *ret= NULL, *py_class_instance, *item;
+ PyObject *ret= NULL, *py_class_instance, *item= NULL;
int ret_flag= (mode==PYOP_POLL ? 0:OPERATOR_CANCELLED);
+
+ PyGILState_STATE gilstate = PyGILState_Ensure();
+ BPY_update_modules(); // XXX - the RNA pointers can change so update before running, would like a nicer solutuon for this.
+
args = PyTuple_New(1);
- PyTuple_SET_ITEM(args, 0, PyObject_GetAttrString(pyot->py_class, "__rna__")); // need to use an rna instance as the first arg
- py_class_instance = PyObject_Call(pyot->py_class, args, NULL);
+ PyTuple_SET_ITEM(args, 0, PyObject_GetAttrString(py_class, "__rna__")); // need to use an rna instance as the first arg
+ py_class_instance = PyObject_Call(py_class, args, NULL);
Py_DECREF(args);
if (py_class_instance) { /* Initializing the class worked, now run its invoke function */
@@ -210,12 +208,12 @@ static int PYTHON_OT_generic(int mode, bContext *C, wmOperator *op, wmEvent *eve
CollectionPropertyIterator iter;
const char *arg_name;
- iterprop= RNA_struct_iterator_property(op->ptr);
+ iterprop= RNA_struct_iterator_property(op->ptr->type);
RNA_property_collection_begin(op->ptr, iterprop, &iter);
for(; iter.valid; RNA_property_collection_next(&iter)) {
prop= iter.ptr.data;
- arg_name= RNA_property_identifier(&iter.ptr, prop);
+ arg_name= RNA_property_identifier(prop);
if (strcmp(arg_name, "rna_type")==0) continue;
@@ -229,16 +227,16 @@ static int PYTHON_OT_generic(int mode, bContext *C, wmOperator *op, wmEvent *eve
if (mode==PYOP_INVOKE) {
- item= PyObject_GetAttrString(pyot->py_class, "invoke");
+ item= PyObject_GetAttrString(py_class, "invoke");
args = PyTuple_New(2);
PyTuple_SET_ITEM(args, 1, pyop_dict_from_event(event));
}
else if (mode==PYOP_EXEC) {
- item= PyObject_GetAttrString(pyot->py_class, "exec");
+ item= PyObject_GetAttrString(py_class, "exec");
args = PyTuple_New(1);
}
else if (mode==PYOP_POLL) {
- item= PyObject_GetAttrString(pyot->py_class, "poll");
+ item= PyObject_GetAttrString(py_class, "poll");
args = PyTuple_New(2);
//XXX Todo - wrap context in a useful way, None for now.
PyTuple_SET_ITEM(args, 1, Py_None);
@@ -251,7 +249,7 @@ static int PYTHON_OT_generic(int mode, bContext *C, wmOperator *op, wmEvent *eve
Py_DECREF(item);
}
- if (ret == NULL) {
+ if (ret == NULL) { /* covers py_class_instance failing too */
pyop_error_report(op->reports);
}
else {
@@ -280,6 +278,8 @@ static int PYTHON_OT_generic(int mode, bContext *C, wmOperator *op, wmEvent *eve
Py_DECREF(ret);
}
+ PyGILState_Release(gilstate);
+
return ret_flag;
}
@@ -302,15 +302,29 @@ static int PYTHON_OT_poll(bContext *C)
void PYTHON_OT_wrapper(wmOperatorType *ot, void *userdata)
{
- PyOperatorType *pyot = (PyOperatorType *)userdata;
- PyObject *py_class = pyot->py_class;
+ PyObject *py_class = (PyObject *)userdata;
PyObject *props, *item;
/* identifiers */
- ot->name= pyot->name;
- ot->idname= pyot->idname;
- ot->description= pyot->description;
+ item= PyObject_GetAttrString(py_class, PYOP_ATTR_IDNAME);
+ Py_DECREF(item);
+ ot->idname= _PyUnicode_AsString(item);
+
+ item= PyObject_GetAttrString(py_class, PYOP_ATTR_UINAME);
+ if (item) {
+ Py_DECREF(item);
+ ot->name= _PyUnicode_AsString(item);
+ }
+ else {
+ ot->name= ot->idname;
+ PyErr_Clear();
+ }
+
+ item= PyObject_GetAttrString(py_class, PYOP_ATTR_DESCRIPTION);
+ Py_DECREF(item);
+ ot->description= (item && PyUnicode_Check(item)) ? _PyUnicode_AsString(item):"";
+
/* api callbacks, detailed checks dont on adding */
if (PyObject_HasAttrString(py_class, "invoke"))
ot->invoke= PYTHON_OT_invoke;
@@ -364,105 +378,48 @@ void PYTHON_OT_wrapper(wmOperatorType *ot, void *userdata)
/* pyOperators - Operators defined IN Python */
-PyObject *PYOP_wrap_add(PyObject *self, PyObject *value)
+PyObject *PYOP_wrap_add(PyObject *self, PyObject *py_class)
{
- PyObject *optype, *item;
+ PyObject *base_class, *item;
- PyOperatorType *pyot;
- char *idname= NULL;
- char *name= NULL;
- char *description= NULL;
- static char *pyop_func_names[] = {"exec", "invoke", "poll", NULL};
- static int pyop_func_nargs[] = {1, 2, 2, 0};
-
- PyObject *pyargcount;
- int i, argcount;
-
+ char *idname= NULL;
+ int i;
+
+ static struct BPY_class_attr_check pyop_class_attr_values[]= {
+ {PYOP_ATTR_IDNAME, 's', 0, 0},
+ {PYOP_ATTR_UINAME, 's', 0, BPY_CLASS_ATTR_OPTIONAL},
+ {PYOP_ATTR_PROP, 'l', 0, BPY_CLASS_ATTR_OPTIONAL},
+ {PYOP_ATTR_DESCRIPTION, 's', 0, BPY_CLASS_ATTR_NONE_OK},
+ {"exec", 'f', 1, BPY_CLASS_ATTR_OPTIONAL},
+ {"invoke", 'f', 2, BPY_CLASS_ATTR_OPTIONAL},
+ {"poll", 'f', 2, BPY_CLASS_ATTR_OPTIONAL},
+ {NULL, 0, 0, 0}
+ };
// in python would be...
//PyObject *optype = PyObject_GetAttrString(PyObject_GetAttrString(PyDict_GetItemString(PyEval_GetGlobals(), "bpy"), "types"), "Operator");
- optype = PyObject_GetAttrStringArgs(PyDict_GetItemString(PyEval_GetGlobals(), "bpy"), 2, "types", "Operator");
- Py_DECREF(optype);
+ base_class = PyObject_GetAttrStringArgs(PyDict_GetItemString(PyEval_GetGlobals(), "bpy"), 2, "types", "Operator");
+ Py_DECREF(base_class);
-
- if (!PyObject_IsSubclass(value, optype)) {
- PyErr_SetString( PyExc_AttributeError, "expected Operator subclass of bpy.types.Operator");
- return NULL;
+ if(BPY_class_validate("Operator", py_class, base_class, pyop_class_attr_values, NULL) < 0) {
+ return NULL; /* BPY_class_validate sets the error */
}
-
+
/* class name is used for operator ID - this can be changed later if we want */
- item = PyObject_GetAttrString(value, PYOP_ATTR_IDNAME);
+ item= PyObject_GetAttrString(py_class, PYOP_ATTR_IDNAME);
Py_DECREF(item);
idname = _PyUnicode_AsString(item);
-
if (WM_operatortype_find(idname)) {
PyErr_Format( PyExc_AttributeError, "Operator alredy exists with this name \"%s\"", idname);
return NULL;
}
- /* Operator user readible name */
- item = PyObject_GetAttrString(value, PYOP_ATTR_UINAME);
- if (item) {
- Py_DECREF(item);
- name = _PyUnicode_AsString(item);
- }
- if (name == NULL) {
- name = idname;
- PyErr_Clear();
- }
-
- /* use py docstring for description, should always be None or a string */
- item = PyObject_GetAttrString(value, PYOP_ATTR_DESCRIPTION);
- Py_DECREF(item);
-
- if (PyUnicode_Check(item)) {
- description = _PyUnicode_AsString(item);
- }
- else {
- description = "";
- }
-
- /* Check known functions and argument lengths */
- for (i=0; pyop_func_names[i]; i++) {
-
- item=PyObject_GetAttrString(value, pyop_func_names[i]);
- if (item) {
- Py_DECREF(item);
-
- /* check its callable */
- if (!PyFunction_Check(item)) {
- PyErr_Format(PyExc_ValueError, "Cant register operator class - %s.%s() is not a function", idname, pyop_func_names[i]);
- return NULL;
- }
- /* check the number of args is correct */
- /* MyClass.exec.func_code.co_argcount */
-
- pyargcount = PyObject_GetAttrString(PyFunction_GET_CODE(item), "co_argcount");
- Py_DECREF(pyargcount);
- argcount = PyLong_AsSsize_t(pyargcount);
-
- if (argcount != pyop_func_nargs[i]) {
- PyErr_Format(PyExc_ValueError, "Cant register operator class - %s.%s() takes %d args, should be %d", idname, pyop_func_names[i], argcount, pyop_func_nargs[i]);
- return NULL;
- }
-
- } else {
- PyErr_Clear();
- }
- }
-
/* If we have properties set, check its a list of dicts */
- item = PyObject_GetAttrString(value, PYOP_ATTR_PROP);
+ item= PyObject_GetAttrString(py_class, PYOP_ATTR_PROP);
if (item) {
Py_DECREF(item);
-
- if (!PyList_Check(item)) {
- PyErr_Format(PyExc_ValueError, "Cant register operator class - %s.properties must be a list", idname);
- return NULL;
- }
-
for(i=0; i<PyList_Size(item); i++) {
PyObject *py_args = PyList_GET_ITEM(item, i);
PyObject *py_func_ptr, *py_kw; /* place holders */
@@ -477,24 +434,18 @@ PyObject *PYOP_wrap_add(PyObject *self, PyObject *value)
PyErr_Clear();
}
- pyot= MEM_callocN(sizeof(PyOperatorType), "PyOperatorType");
-
- strncpy(pyot->idname, idname, sizeof(pyot->idname));
- strncpy(pyot->name, name, sizeof(pyot->name));
- strncpy(pyot->description, description, sizeof(pyot->description));
- pyot->py_class= value;
- Py_INCREF(value);
-
- WM_operatortype_append_ptr(PYTHON_OT_wrapper, pyot);
+ Py_INCREF(py_class);
+ WM_operatortype_append_ptr(PYTHON_OT_wrapper, py_class);
Py_RETURN_NONE;
}
PyObject *PYOP_wrap_remove(PyObject *self, PyObject *value)
{
+ PyObject *py_class;
char *idname= NULL;
wmOperatorType *ot;
- PyOperatorType *pyot;
+
if (PyUnicode_Check(value))
idname = _PyUnicode_AsString(value);
@@ -514,13 +465,12 @@ PyObject *PYOP_wrap_remove(PyObject *self, PyObject *value)
return NULL;
}
- if (!(pyot= (PyOperatorType *)ot->pyop_data)) {
+ if (!(py_class= (PyObject *)ot->pyop_data)) {
PyErr_Format( PyExc_AttributeError, "Operator \"%s\" was not created by python", idname);
return NULL;
}
- Py_XDECREF(pyot->py_class);
- MEM_freeN(pyot);
+ Py_XDECREF(py_class);
WM_operatortype_remove(idname);
diff --git a/source/blender/python/intern/bpy_opwrapper.h b/source/blender/python/intern/bpy_operator_wrap.h
index 04120a81517..2929d57ab82 100644
--- a/source/blender/python/intern/bpy_opwrapper.h
+++ b/source/blender/python/intern/bpy_operator_wrap.h
@@ -22,8 +22,8 @@
*
* ***** END GPL LICENSE BLOCK *****
*/
-#ifndef BPY_OPWRAPPER_H
-#define BPY_OPWRAPPER_H
+#ifndef BPY_OPERATOR_WRAP_H
+#define BPY_OPERATOR_WRAP_H
#include <Python.h>
diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c
index 23eed552a2a..4f7287ea9d3 100644
--- a/source/blender/python/intern/bpy_rna.c
+++ b/source/blender/python/intern/bpy_rna.c
@@ -24,16 +24,28 @@
#include "bpy_rna.h"
#include "bpy_compat.h"
+#include "bpy_util.h"
//#include "blendef.h"
#include "BLI_dynstr.h"
#include "BLI_listbase.h"
+#include "BLI_string.h"
#include "float.h" /* FLT_MIN/MAX */
+#include "RNA_access.h"
#include "RNA_define.h" /* for defining our own rna */
#include "MEM_guardedalloc.h"
#include "BKE_context.h"
#include "BKE_global.h" /* evil G.* */
+#include "BKE_report.h"
+
+#if 0
+#define bpy_PyObject_New(type, typeobj) \
+( (type *) PyObject_Init( \
+ (PyObject *) MEM_callocN( _PyObject_SIZE(typeobj), "python memory from bpy_rna.c" ), (typeobj)) )
+#else
+#define bpy_PyObject_New(type, typeobj) PyObject_New(type, typeobj)
+#endif
static int pyrna_struct_compare( BPy_StructRNA * a, BPy_StructRNA * b )
{
@@ -45,7 +57,6 @@ static int pyrna_prop_compare( BPy_PropertyRNA * a, BPy_PropertyRNA * b )
return (a->prop==b->prop && a->ptr.data==b->ptr.data ) ? 0 : -1;
}
-
/* For some reason python3 needs these :/ */
static PyObject *pyrna_struct_richcmp(BPy_StructRNA * a, BPy_StructRNA * b, int op)
{
@@ -74,13 +85,13 @@ static PyObject *pyrna_struct_repr( BPy_StructRNA * self )
char str[512];
/* print name if available */
- prop= RNA_struct_name_property(&self->ptr);
+ prop= RNA_struct_name_property(self->ptr.type);
if(prop) {
RNA_property_string_get(&self->ptr, prop, str);
- return PyUnicode_FromFormat( "[BPy_StructRNA \"%s\" -> \"%s\"]", RNA_struct_identifier(&self->ptr), str);
+ return PyUnicode_FromFormat( "[BPy_StructRNA \"%s\" -> \"%s\"]", RNA_struct_identifier(self->ptr.type), str);
}
- return PyUnicode_FromFormat( "[BPy_StructRNA \"%s\"]", RNA_struct_identifier(&self->ptr));
+ return PyUnicode_FromFormat( "[BPy_StructRNA \"%s\"]", RNA_struct_identifier(self->ptr.type));
}
static PyObject *pyrna_prop_repr( BPy_PropertyRNA * self )
@@ -90,19 +101,19 @@ static PyObject *pyrna_prop_repr( BPy_PropertyRNA * self )
char str[512];
/* if a pointer, try to print name of pointer target too */
- if(RNA_property_type(&self->ptr, self->prop) == PROP_POINTER) {
+ if(RNA_property_type(self->prop) == PROP_POINTER) {
ptr= RNA_property_pointer_get(&self->ptr, self->prop);
if(ptr.data) {
- prop= RNA_struct_name_property(&ptr);
+ prop= RNA_struct_name_property(ptr.type);
if(prop) {
RNA_property_string_get(&ptr, prop, str);
- return PyUnicode_FromFormat( "[BPy_PropertyRNA \"%s\" -> \"%s\" -> \"%s\" ]", RNA_struct_identifier(&self->ptr), RNA_property_identifier(&self->ptr, self->prop), str);
+ return PyUnicode_FromFormat( "[BPy_PropertyRNA \"%s\" -> \"%s\" -> \"%s\" ]", RNA_struct_identifier(self->ptr.type), RNA_property_identifier(self->prop), str);
}
}
}
- return PyUnicode_FromFormat( "[BPy_PropertyRNA \"%s\" -> \"%s\"]", RNA_struct_identifier(&self->ptr), RNA_property_identifier(&self->ptr, self->prop));
+ return PyUnicode_FromFormat( "[BPy_PropertyRNA \"%s\" -> \"%s\"]", RNA_struct_identifier(self->ptr.type), RNA_property_identifier(self->prop));
}
static long pyrna_struct_hash( BPy_StructRNA * self )
@@ -127,28 +138,17 @@ static void pyrna_struct_dealloc( BPy_StructRNA * self )
static char *pyrna_enum_as_string(PointerRNA *ptr, PropertyRNA *prop)
{
const EnumPropertyItem *item;
- int totitem, i;
-
- DynStr *dynstr= BLI_dynstr_new();
- char *cstring;
-
- RNA_property_enum_items(ptr, prop, &item, &totitem);
-
- for (i=0; i<totitem; i++) {
-
- BLI_dynstr_appendf(dynstr, i?", '%s'":"'%s'", item[i].identifier);
- }
+ int totitem;
- cstring = BLI_dynstr_get_cstring(dynstr);
- BLI_dynstr_free(dynstr);
- return cstring;
+ RNA_property_enum_items(ptr, prop, &item, &totitem);
+ return (char*)BPy_enum_as_string((EnumPropertyItem*)item);
}
PyObject * pyrna_prop_to_py(PointerRNA *ptr, PropertyRNA *prop)
{
PyObject *ret;
- int type = RNA_property_type(ptr, prop);
- int len = RNA_property_array_length(ptr, prop);
+ int type = RNA_property_type(prop);
+ int len = RNA_property_array_length(prop);
if (len > 0) {
/* resolve the array from a new pytype */
@@ -212,11 +212,28 @@ PyObject * pyrna_prop_to_py(PointerRNA *ptr, PropertyRNA *prop)
return ret;
}
+static PyObject * pyrna_func_call(PyObject * self, PyObject *args, PyObject *kw);
+
+PyObject *pyrna_func_to_py(PointerRNA *ptr, FunctionRNA *func)
+{
+ static PyMethodDef func_meth = {"<generic rna function>", (PyCFunction)pyrna_func_call, METH_VARARGS|METH_KEYWORDS, "python rna function"};
+ PyObject *self= PyTuple_New(2);
+ PyObject *ret;
+ PyTuple_SET_ITEM(self, 0, pyrna_struct_CreatePyObject(ptr));
+ PyTuple_SET_ITEM(self, 1, PyCObject_FromVoidPtr((void *)func, NULL));
+
+ ret= PyCFunction_New(&func_meth, self);
+ Py_DECREF(self);
+
+ return ret;
+}
+
-int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, PyObject *value)
+int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, void *data, PyObject *value)
{
- int type = RNA_property_type(ptr, prop);
- int len = RNA_property_array_length(ptr, prop);
+ /* XXX hard limits should be checked here */
+ int type = RNA_property_type(prop);
+ int len = RNA_property_array_length(prop);
if (len > 0) {
PyObject *item;
@@ -236,7 +253,10 @@ int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, PyObject *value)
switch (type) {
case PROP_BOOLEAN:
{
- int *param_arr = MEM_mallocN(sizeof(char) * len, "pyrna bool array");
+ int *param_arr;
+ if(data) param_arr= (int*)data;
+ else param_arr= MEM_mallocN(sizeof(char) * len, "pyrna bool array");
+
/* collect the variables before assigning, incase one of them is incorrect */
for (i=0; i<len; i++) {
@@ -245,22 +265,27 @@ int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, PyObject *value)
Py_DECREF(item);
if (param_arr[i] < 0) {
- MEM_freeN(param_arr);
+ if(data==NULL)
+ MEM_freeN(param_arr);
PyErr_SetString(PyExc_AttributeError, "one or more of the values in the sequence is not a boolean");
return -1;
}
}
-
- RNA_property_boolean_set_array(ptr, prop, param_arr);
-
- MEM_freeN(param_arr);
+ if(data==NULL) {
+ RNA_property_boolean_set_array(ptr, prop, param_arr);
+ MEM_freeN(param_arr);
+ }
+
break;
}
case PROP_INT:
{
- int *param_arr = MEM_mallocN(sizeof(int) * len, "pyrna int array");
+ int *param_arr;
+ if(data) param_arr= (int*)data;
+ else param_arr= MEM_mallocN(sizeof(int) * len, "pyrna int array");
+
- /* collect the variables before assigning, incase one of them is incorrect */
+ /* collect the variables */
for (i=0; i<len; i++) {
item = PySequence_GetItem(value, i);
param_arr[i] = (int)PyLong_AsSsize_t(item); /* deal with any errors later */
@@ -268,21 +293,26 @@ int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, PyObject *value)
}
if (PyErr_Occurred()) {
- MEM_freeN(param_arr);
+ if(data==NULL)
+ MEM_freeN(param_arr);
PyErr_SetString(PyExc_AttributeError, "one or more of the values in the sequence could not be used as an int");
return -1;
}
-
- RNA_property_int_set_array(ptr, prop, param_arr);
-
- MEM_freeN(param_arr);
+ if(data==NULL) {
+ RNA_property_int_set_array(ptr, prop, param_arr);
+ MEM_freeN(param_arr);
+ }
break;
}
case PROP_FLOAT:
{
- float *param_arr = MEM_mallocN(sizeof(float) * len, "pyrna float array");
+ float *param_arr;
+ if(data) param_arr = (float*)data;
+ else param_arr = MEM_mallocN(sizeof(float) * len, "pyrna float array");
+
+
- /* collect the variables before assigning, incase one of them is incorrect */
+ /* collect the variables */
for (i=0; i<len; i++) {
item = PySequence_GetItem(value, i);
param_arr[i] = (float)PyFloat_AsDouble(item); /* deal with any errors later */
@@ -290,14 +320,15 @@ int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, PyObject *value)
}
if (PyErr_Occurred()) {
- MEM_freeN(param_arr);
+ if(data==NULL)
+ MEM_freeN(param_arr);
PyErr_SetString(PyExc_AttributeError, "one or more of the values in the sequence could not be used as a float");
return -1;
}
-
- RNA_property_float_set_array(ptr, prop, param_arr);
-
- MEM_freeN(param_arr);
+ if(data==NULL) {
+ RNA_property_float_set_array(ptr, prop, param_arr);
+ MEM_freeN(param_arr);
+ }
break;
}
}
@@ -314,7 +345,8 @@ int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, PyObject *value)
PyErr_SetString(PyExc_TypeError, "expected True/False or 0/1");
return -1;
} else {
- RNA_property_boolean_set(ptr, prop, param);
+ if(data) *((int*)data)= param;
+ else RNA_property_boolean_set(ptr, prop, param);
}
break;
}
@@ -325,7 +357,8 @@ int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, PyObject *value)
PyErr_SetString(PyExc_TypeError, "expected an int type");
return -1;
} else {
- RNA_property_int_set(ptr, prop, param);
+ if(data) *((int*)data)= param;
+ else RNA_property_int_set(ptr, prop, param);
}
break;
}
@@ -336,7 +369,8 @@ int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, PyObject *value)
PyErr_SetString(PyExc_TypeError, "expected a float type");
return -1;
} else {
- RNA_property_float_set(ptr, prop, param);
+ if(data) *((float*)data)= param;
+ else RNA_property_float_set(ptr, prop, param);
}
break;
}
@@ -348,7 +382,8 @@ int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, PyObject *value)
PyErr_SetString(PyExc_TypeError, "expected a string type");
return -1;
} else {
- RNA_property_string_set(ptr, prop, param);
+ if(data) *((char**)data)= param;
+ else RNA_property_string_set(ptr, prop, param);
}
break;
}
@@ -364,7 +399,8 @@ int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, PyObject *value)
} else {
int val;
if (RNA_property_enum_value(ptr, prop, param, &val)) {
- RNA_property_enum_set(ptr, prop, val);
+ if(data) *((int*)data)= val;
+ else RNA_property_enum_set(ptr, prop, val);
} else {
char *enum_str= pyrna_enum_as_string(ptr, prop);
PyErr_Format(PyExc_AttributeError, "enum \"%s\" not found in (%s)", param, enum_str);
@@ -377,29 +413,49 @@ int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, PyObject *value)
}
case PROP_POINTER:
{
- StructRNA *ptype= RNA_property_pointer_type(ptr, prop);
+ StructRNA *ptype= RNA_property_pointer_type(prop);
if(!BPy_StructRNA_Check(value)) {
PointerRNA tmp;
RNA_pointer_create(NULL, ptype, NULL, &tmp);
- PyErr_Format(PyExc_TypeError, "expected a %s type", RNA_struct_identifier(&tmp));
+ PyErr_Format(PyExc_TypeError, "expected a %s type", RNA_struct_identifier(tmp.type));
return -1;
} else {
BPy_StructRNA *param= (BPy_StructRNA*)value;
-
- if(RNA_struct_is_a(&param->ptr, ptype)) {
- RNA_property_pointer_set(ptr, prop, param->ptr);
- } else {
+ int raise_error= 0;
+ if(data) {
+ if(ptype == &RNA_AnyType) {
+ *((PointerRNA*)data)= param->ptr;
+ }
+ else if(RNA_struct_is_a(param->ptr.type, ptype)) {
+ *((void**)data)= param->ptr.data;
+ } else {
+ raise_error= 1;
+ }
+ }
+ else {
+ /* data==NULL, assign to RNA */
+ if(RNA_struct_is_a(param->ptr.type, ptype)) {
+ RNA_property_pointer_set(ptr, prop, param->ptr);
+ } else {
+ PointerRNA tmp;
+ RNA_pointer_create(NULL, ptype, NULL, &tmp);
+ PyErr_Format(PyExc_TypeError, "expected a %s type", RNA_struct_identifier(tmp.type));
+ return -1;
+ }
+ }
+
+ if(raise_error) {
PointerRNA tmp;
RNA_pointer_create(NULL, ptype, NULL, &tmp);
- PyErr_Format(PyExc_TypeError, "expected a %s type", RNA_struct_identifier(&tmp));
+ PyErr_Format(PyExc_TypeError, "expected a %s type", RNA_struct_identifier(tmp.type));
return -1;
}
}
break;
}
case PROP_COLLECTION:
- PyErr_SetString(PyExc_AttributeError, "cant assign to collections");
+ PyErr_SetString(PyExc_AttributeError, "cant convert collections yet");
return -1;
break;
default:
@@ -412,11 +468,10 @@ int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, PyObject *value)
return 0;
}
-
static PyObject * pyrna_prop_to_py_index(PointerRNA *ptr, PropertyRNA *prop, int index)
{
PyObject *ret;
- int type = RNA_property_type(ptr, prop);
+ int type = RNA_property_type(prop);
/* see if we can coorce into a python type - PropertyType */
switch (type) {
@@ -441,7 +496,7 @@ static PyObject * pyrna_prop_to_py_index(PointerRNA *ptr, PropertyRNA *prop, int
static int pyrna_py_to_prop_index(PointerRNA *ptr, PropertyRNA *prop, int index, PyObject *value)
{
int ret = 0;
- int type = RNA_property_type(ptr, prop);
+ int type = RNA_property_type(prop);
/* see if we can coorce into a python type - PropertyType */
switch (type) {
@@ -493,10 +548,10 @@ static Py_ssize_t pyrna_prop_len( BPy_PropertyRNA * self )
{
Py_ssize_t len;
- if (RNA_property_type(&self->ptr, self->prop) == PROP_COLLECTION) {
+ if (RNA_property_type(self->prop) == PROP_COLLECTION) {
len = RNA_property_collection_length(&self->ptr, self->prop);
} else {
- len = RNA_property_array_length(&self->ptr, self->prop);
+ len = RNA_property_array_length(self->prop);
if (len==0) { /* not an array*/
PyErr_SetString(PyExc_AttributeError, "len() only available for collection RNA types");
@@ -523,7 +578,7 @@ static PyObject *pyrna_prop_subscript( BPy_PropertyRNA * self, PyObject *key )
return NULL;
}
- if (RNA_property_type(&self->ptr, self->prop) == PROP_COLLECTION) {
+ if (RNA_property_type(self->prop) == PROP_COLLECTION) {
int ok;
if (keyname) ok = RNA_property_collection_lookup_string(&self->ptr, self->prop, keyname, &newptr);
else ok = RNA_property_collection_lookup_int(&self->ptr, self->prop, keynum, &newptr);
@@ -539,7 +594,7 @@ static PyObject *pyrna_prop_subscript( BPy_PropertyRNA * self, PyObject *key )
PyErr_SetString(PyExc_AttributeError, "string keys are only supported for collections");
ret = NULL;
} else {
- int len = RNA_property_array_length(&self->ptr, self->prop);
+ int len = RNA_property_array_length(self->prop);
if (len==0) { /* not an array*/
PyErr_Format(PyExc_AttributeError, "not an array or collection %d", keynum);
@@ -565,7 +620,7 @@ static int pyrna_prop_assign_subscript( BPy_PropertyRNA * self, PyObject *key, P
char *keyname = NULL;
if (!RNA_property_editable(&self->ptr, self->prop)) {
- PyErr_Format( PyExc_AttributeError, "PropertyRNA - attribute \"%s\" from \"%s\" is read-only", RNA_property_identifier(&self->ptr, self->prop), RNA_struct_identifier(&self->ptr) );
+ PyErr_Format( PyExc_AttributeError, "PropertyRNA - attribute \"%s\" from \"%s\" is read-only", RNA_property_identifier(self->prop), RNA_struct_identifier(self->ptr.type) );
return -1;
}
@@ -578,14 +633,14 @@ static int pyrna_prop_assign_subscript( BPy_PropertyRNA * self, PyObject *key, P
return -1;
}
- if (RNA_property_type(&self->ptr, self->prop) == PROP_COLLECTION) {
+ if (RNA_property_type(self->prop) == PROP_COLLECTION) {
PyErr_SetString(PyExc_AttributeError, "PropertyRNA - assignment is not supported for collections (yet)");
ret = -1;
} else if (keyname) {
PyErr_SetString(PyExc_AttributeError, "PropertyRNA - string keys are only supported for collections");
ret = -1;
} else {
- int len = RNA_property_array_length(&self->ptr, self->prop);
+ int len = RNA_property_array_length(self->prop);
if (len==0) { /* not an array*/
PyErr_Format(PyExc_AttributeError, "PropertyRNA - not an array or collection %d", keynum);
@@ -606,7 +661,7 @@ static int pyrna_prop_assign_subscript( BPy_PropertyRNA * self, PyObject *key, P
static PyMappingMethods pyrna_prop_as_mapping = {
- ( inquiry ) pyrna_prop_len, /* mp_length */
+ ( lenfunc ) pyrna_prop_len, /* mp_length */
( binaryfunc ) pyrna_prop_subscript, /* mp_subscript */
( objobjargproc ) pyrna_prop_assign_subscript, /* mp_ass_subscript */
};
@@ -616,6 +671,10 @@ static PyObject *pyrna_struct_dir(BPy_StructRNA * self)
PyObject *ret, *dict;
PyObject *pystring;
+ /* for looping over attrs and funcs */
+ CollectionPropertyIterator iter;
+ PropertyRNA *iterprop;
+
/* Include this incase this instance is a subtype of a python class
* In these instances we may want to return a function or variable provided by the subtype
* */
@@ -639,15 +698,17 @@ static PyObject *pyrna_struct_dir(BPy_StructRNA * self)
/* Collect RNA items*/
{
- PropertyRNA *iterprop, *nameprop;
- CollectionPropertyIterator iter;
+ /*
+ * Collect RNA attributes
+ */
+ PropertyRNA *nameprop;
char name[256], *nameptr;
- iterprop= RNA_struct_iterator_property(&self->ptr);
+ iterprop= RNA_struct_iterator_property(self->ptr.type);
RNA_property_collection_begin(&self->ptr, iterprop, &iter);
for(; iter.valid; RNA_property_collection_next(&iter)) {
- if(iter.ptr.data && (nameprop = RNA_struct_name_property(&iter.ptr))) {
+ if(iter.ptr.data && (nameprop = RNA_struct_name_property(iter.ptr.type))) {
nameptr= RNA_property_string_get_alloc(&iter.ptr, nameprop, name, sizeof(name));
pystring = PyUnicode_FromString(nameptr);
@@ -658,7 +719,28 @@ static PyObject *pyrna_struct_dir(BPy_StructRNA * self)
MEM_freeN(nameptr);
}
}
-
+ RNA_property_collection_end(&iter);
+
+ }
+
+
+ {
+ /*
+ * Collect RNA function items
+ */
+ PointerRNA tptr;
+
+ RNA_pointer_create(NULL, &RNA_Struct, self->ptr.type, &tptr);
+ iterprop= RNA_struct_find_property(&tptr, "functions");
+
+ RNA_property_collection_begin(&tptr, iterprop, &iter);
+
+ for(; iter.valid; RNA_property_collection_next(&iter)) {
+ pystring = PyUnicode_FromString(RNA_function_identifier(iter.ptr.data));
+ PyList_Append(ret, pystring);
+ Py_DECREF(pystring);
+ }
+
RNA_property_collection_end(&iter);
}
@@ -672,6 +754,7 @@ static PyObject *pyrna_struct_getattro( BPy_StructRNA * self, PyObject *pyname )
char *name = _PyUnicode_AsString(pyname);
PyObject *ret;
PropertyRNA *prop;
+ FunctionRNA *func;
/* Include this incase this instance is a subtype of a python class
* In these instances we may want to return a function or variable provided by the subtype
@@ -682,13 +765,14 @@ static PyObject *pyrna_struct_getattro( BPy_StructRNA * self, PyObject *pyname )
if (ret) return ret;
else PyErr_Clear();
/* done with subtypes */
-
- prop = RNA_struct_find_property(&self->ptr, name);
- if (prop) {
- ret = pyrna_prop_to_py(&self->ptr, prop);
+ if ((prop = RNA_struct_find_property(&self->ptr, name))) {
+ ret = pyrna_prop_to_py(&self->ptr, prop);
+ }
+ else if ((func = RNA_struct_find_function(&self->ptr, name))) {
+ ret = pyrna_func_to_py(&self->ptr, func);
}
- else if (/*self->ptr.type == &RNA_Context*/0) {
+ else if (self->ptr.type == &RNA_Context) {
PointerRNA newptr;
ListBase newlb;
@@ -741,18 +825,18 @@ static int pyrna_struct_setattro( BPy_StructRNA * self, PyObject *pyname, PyObje
}
if (!RNA_property_editable(&self->ptr, prop)) {
- PyErr_Format( PyExc_AttributeError, "StructRNA - Attribute \"%s\" from \"%s\" is read-only", RNA_property_identifier(&self->ptr, prop), RNA_struct_identifier(&self->ptr) );
+ PyErr_Format( PyExc_AttributeError, "StructRNA - Attribute \"%s\" from \"%s\" is read-only", RNA_property_identifier(prop), RNA_struct_identifier(self->ptr.type) );
return -1;
}
/* pyrna_py_to_prop sets its own exceptions */
- return pyrna_py_to_prop(&self->ptr, prop, value);
+ return pyrna_py_to_prop(&self->ptr, prop, NULL, value);
}
PyObject *pyrna_prop_keys(BPy_PropertyRNA *self)
{
PyObject *ret;
- if (RNA_property_type(&self->ptr, self->prop) != PROP_COLLECTION) {
+ if (RNA_property_type(self->prop) != PROP_COLLECTION) {
PyErr_SetString( PyExc_TypeError, "keys() is only valid for collection types" );
ret = NULL;
} else {
@@ -765,7 +849,7 @@ PyObject *pyrna_prop_keys(BPy_PropertyRNA *self)
RNA_property_collection_begin(&self->ptr, self->prop, &iter);
for(; iter.valid; RNA_property_collection_next(&iter)) {
- if(iter.ptr.data && (nameprop = RNA_struct_name_property(&iter.ptr))) {
+ if(iter.ptr.data && (nameprop = RNA_struct_name_property(iter.ptr.type))) {
nameptr= RNA_property_string_get_alloc(&iter.ptr, nameprop, name, sizeof(name));
/* add to python list */
@@ -787,7 +871,7 @@ PyObject *pyrna_prop_keys(BPy_PropertyRNA *self)
PyObject *pyrna_prop_items(BPy_PropertyRNA *self)
{
PyObject *ret;
- if (RNA_property_type(&self->ptr, self->prop) != PROP_COLLECTION) {
+ if (RNA_property_type(self->prop) != PROP_COLLECTION) {
PyErr_SetString( PyExc_TypeError, "items() is only valid for collection types" );
ret = NULL;
} else {
@@ -800,7 +884,7 @@ PyObject *pyrna_prop_items(BPy_PropertyRNA *self)
RNA_property_collection_begin(&self->ptr, self->prop, &iter);
for(; iter.valid; RNA_property_collection_next(&iter)) {
- if(iter.ptr.data && (nameprop = RNA_struct_name_property(&iter.ptr))) {
+ if(iter.ptr.data && (nameprop = RNA_struct_name_property(iter.ptr.type))) {
nameptr= RNA_property_string_get_alloc(&iter.ptr, nameprop, name, sizeof(name));
/* add to python list */
@@ -823,7 +907,7 @@ PyObject *pyrna_prop_items(BPy_PropertyRNA *self)
PyObject *pyrna_prop_values(BPy_PropertyRNA *self)
{
PyObject *ret;
- if (RNA_property_type(&self->ptr, self->prop) != PROP_COLLECTION) {
+ if (RNA_property_type(self->prop) != PROP_COLLECTION) {
PyErr_SetString( PyExc_TypeError, "values() is only valid for collection types" );
ret = NULL;
} else {
@@ -835,7 +919,7 @@ PyObject *pyrna_prop_values(BPy_PropertyRNA *self)
RNA_property_collection_begin(&self->ptr, self->prop, &iter);
for(; iter.valid; RNA_property_collection_next(&iter)) {
- if(iter.ptr.data && (nameprop = RNA_struct_name_property(&iter.ptr))) {
+ if(iter.ptr.data && (nameprop = RNA_struct_name_property(iter.ptr.type))) {
item = pyrna_struct_CreatePyObject(&iter.ptr);
PyList_Append(ret, item);
Py_DECREF(item);
@@ -856,7 +940,7 @@ PyObject *pyrna_prop_iter(BPy_PropertyRNA *self)
if (ret==NULL) {
/* collection did not work, try array */
- int len = RNA_property_array_length(&self->ptr, self->prop);
+ int len = RNA_property_array_length(self->prop);
if (len) {
int i;
@@ -929,6 +1013,190 @@ static PyObject * pyrna_prop_new(PyTypeObject *type, PyObject *args, PyObject *k
}
}
+PyObject *pyrna_param_to_py(PointerRNA *ptr, PropertyRNA *prop, void *data)
+{
+ PyObject *ret;
+ int type = RNA_property_type(prop);
+ int len = RNA_property_array_length(prop);
+
+ int a;
+
+ if(len > 0) {
+ /* resolve the array from a new pytype */
+ ret = PyTuple_New(len);
+
+ switch (type) {
+ case PROP_BOOLEAN:
+ for(a=0; a<len; a++)
+ PyTuple_SET_ITEM(ret, a, PyBool_FromLong( ((int*)data)[a] ));
+ break;
+ case PROP_INT:
+ for(a=0; a<len; a++)
+ PyTuple_SET_ITEM(ret, a, PyLong_FromSsize_t( (Py_ssize_t)((int*)data)[a] ));
+ break;
+ case PROP_FLOAT:
+ for(a=0; a<len; a++)
+ PyTuple_SET_ITEM(ret, a, PyFloat_FromDouble( ((float*)data)[a] ));
+ break;
+ default:
+ PyErr_Format(PyExc_AttributeError, "RNA Error: unknown array type \"%d\" (pyrna_param_to_py)", type);
+ ret = NULL;
+ break;
+ }
+ }
+ else {
+ /* see if we can coorce into a python type - PropertyType */
+ switch (type) {
+ case PROP_BOOLEAN:
+ ret = PyBool_FromLong( *(int*)data );
+ break;
+ case PROP_INT:
+ ret = PyLong_FromSsize_t( (Py_ssize_t)*(int*)data );
+ break;
+ case PROP_FLOAT:
+ ret = PyFloat_FromDouble( *(float*)data );
+ break;
+ case PROP_STRING:
+ {
+ ret = PyUnicode_FromString( *(char**)data );
+ break;
+ }
+ case PROP_ENUM:
+ {
+ const char *identifier;
+ int val = *(int*)data;
+
+ if (RNA_property_enum_identifier(ptr, prop, val, &identifier)) {
+ ret = PyUnicode_FromString( identifier );
+ } else {
+ PyErr_Format(PyExc_AttributeError, "RNA Error: Current value \"%d\" matches no enum", val);
+ ret = NULL;
+ }
+
+ break;
+ }
+ case PROP_POINTER:
+ {
+ PointerRNA newptr;
+ StructRNA *type= RNA_property_pointer_type(prop);
+
+ if(type == &RNA_AnyType) {
+ /* in this case we get the full ptr */
+ newptr= *(PointerRNA*)data;
+ }
+ else {
+ /* XXX this is missing the ID part! */
+ RNA_pointer_create(NULL, type, *(void**)data, &newptr);
+ }
+
+ if (newptr.data) {
+ ret = pyrna_struct_CreatePyObject(&newptr);
+ } else {
+ ret = Py_None;
+ Py_INCREF(ret);
+ }
+ break;
+ }
+ case PROP_COLLECTION:
+ /* XXX not supported yet
+ * ret = pyrna_prop_CreatePyObject(ptr, prop); */
+ ret = NULL;
+ break;
+ default:
+ PyErr_Format(PyExc_AttributeError, "RNA Error: unknown type \"%d\" (pyrna_param_to_py)", type);
+ ret = NULL;
+ break;
+ }
+ }
+
+ return ret;
+}
+
+static PyObject * pyrna_func_call(PyObject * self, PyObject *args, PyObject *kw)
+{
+ PointerRNA *self_ptr= &(((BPy_StructRNA *)PyTuple_GET_ITEM(self, 0))->ptr);
+ FunctionRNA *self_func= PyCObject_AsVoidPtr(PyTuple_GET_ITEM(self, 1));
+
+ PointerRNA funcptr;
+ ParameterList *parms;
+ ParameterIterator iter;
+ PropertyRNA *pret, *parm;
+ PyObject *ret, *item;
+ int i, tlen, flag, err= 0;
+ const char *tid, *fid, *pid;
+ void *retdata= NULL;
+
+ /* setup */
+ RNA_pointer_create(NULL, &RNA_Function, self_func, &funcptr);
+
+ pret= RNA_function_return(self_func);
+ tlen= PyTuple_GET_SIZE(args);
+
+ parms= RNA_parameter_list_create(self_ptr, self_func);
+ RNA_parameter_list_begin(parms, &iter);
+
+ /* parse function parameters */
+ for (i= 0; iter.valid; RNA_parameter_list_next(&iter)) {
+ parm= iter.parm;
+
+ if (parm==pret) {
+ retdata= iter.data;
+ continue;
+ }
+
+ pid= RNA_property_identifier(parm);
+ flag= RNA_property_flag(parm);
+ item= NULL;
+
+ if ((i < tlen) && (flag & PROP_REQUIRED)) {
+ item= PyTuple_GET_ITEM(args, i);
+ i++;
+ }
+ else if (kw != NULL)
+ item= PyDict_GetItemString(kw, pid); /* borrow ref */
+
+ if (item==NULL) {
+ if(flag & PROP_REQUIRED) {
+ tid= RNA_struct_identifier(self_ptr->type);
+ fid= RNA_function_identifier(self_func);
+
+ PyErr_Format(PyExc_AttributeError, "%s.%s(): required parameter \"%s\" not specified", tid, fid, pid);
+ err= -1;
+ break;
+ }
+ else
+ continue;
+ }
+
+ err= pyrna_py_to_prop(&funcptr, parm, iter.data, item);
+
+ if(err!=0)
+ break;
+ }
+
+ ret= NULL;
+ if (err==0) {
+ /* call function */
+ RNA_function_call(self_ptr, self_func, parms);
+
+ /* return value */
+ if(pret)
+ ret= pyrna_param_to_py(&funcptr, pret, retdata);
+ }
+
+ /* cleanup */
+ RNA_parameter_list_end(&iter);
+ RNA_parameter_list_free(parms);
+
+ if (ret)
+ return ret;
+
+ if (err==-1)
+ return NULL;
+
+ Py_RETURN_NONE;
+}
+
/*-----------------------BPy_StructRNA method def------------------------------*/
PyTypeObject pyrna_struct_Type = {
#if (PY_VERSION_HEX >= 0x02060000)
@@ -1002,7 +1270,7 @@ PyTypeObject pyrna_struct_Type = {
NULL, /* allocfunc tp_alloc; */
pyrna_struct_new, /* newfunc tp_new; */
/* Low-level free-memory routine */
- NULL, /* freefunc tp_free; */
+ NULL, //MEM_freeN, /* freefunc tp_free; */
/* For PyObject_IS_GC */
NULL, /* inquiry tp_is_gc; */
NULL, /* PyObject *tp_bases; */
@@ -1028,7 +1296,7 @@ PyTypeObject pyrna_prop_Type = {
sizeof( BPy_PropertyRNA ), /* tp_basicsize */
0, /* tp_itemsize */
/* methods */
- NULL, /* tp_dealloc */
+ NULL, /* tp_dealloc */
NULL, /* printfunc tp_print; */
NULL, /* getattrfunc tp_getattr; */
NULL, /* setattrfunc tp_setattr; */
@@ -1088,7 +1356,7 @@ PyTypeObject pyrna_prop_Type = {
NULL, /* allocfunc tp_alloc; */
pyrna_prop_new, /* newfunc tp_new; */
/* Low-level free-memory routine */
- NULL, /* freefunc tp_free; */
+ NULL, //MEM_freeN, /* freefunc tp_free; */
/* For PyObject_IS_GC */
NULL, /* inquiry tp_is_gc; */
NULL, /* PyObject *tp_bases; */
@@ -1100,6 +1368,22 @@ PyTypeObject pyrna_prop_Type = {
NULL
};
+static void pyrna_subtype_set_rna(PyObject *newclass, StructRNA *srna)
+{
+ PointerRNA ptr;
+ PyObject *item;
+
+ RNA_struct_py_type_set(srna, (void *)newclass); /* Store for later use */
+
+ /* Not 100% needed but useful,
+ * having an instance within a type looks wrong however this instance IS an rna type */
+ RNA_pointer_create(NULL, &RNA_Struct, srna, &ptr);
+ item = pyrna_struct_CreatePyObject(&ptr);
+ PyDict_SetItemString(((PyTypeObject *)newclass)->tp_dict, "__rna__", item);
+ Py_DECREF(item);
+ /* done with rna instance */
+}
+
PyObject* pyrna_struct_Subtype(PointerRNA *ptr)
{
PyObject *newclass = NULL;
@@ -1107,12 +1391,12 @@ PyObject* pyrna_struct_Subtype(PointerRNA *ptr)
if (ptr->type==NULL) {
newclass= NULL; /* Nothing to do */
- } else if ((newclass= (PyObject *)BPy_RNA_PYTYPE(ptr->data))) {
+ } else if ((newclass= RNA_struct_py_type_get(ptr->data))) {
Py_INCREF(newclass);
- } else if ((nameprop = RNA_struct_name_property(ptr))) {
+ } else if ((nameprop = RNA_struct_name_property(ptr->type))) {
/* for now, return the base RNA type rather then a real module */
- /* Assume BPy_RNA_PYTYPE(ptr->data) was alredy checked */
+ /* Assume RNA_struct_py_type_get(ptr->data) was alredy checked */
/* subclass equivelents
- class myClass(myBase):
@@ -1120,10 +1404,13 @@ PyObject* pyrna_struct_Subtype(PointerRNA *ptr)
- myClass = type(name='myClass', bases=(myBase,), dict={'some':'value'})
*/
char name[256], *nameptr;
+ const char *descr= RNA_struct_ui_description(ptr->type);
PyObject *args = PyTuple_New(3);
PyObject *bases = PyTuple_New(1);
PyObject *dict = PyDict_New();
+ PyObject *item;
+
nameptr= RNA_property_string_get_alloc(ptr, nameprop, name, sizeof(name));
@@ -1138,6 +1425,12 @@ PyObject* pyrna_struct_Subtype(PointerRNA *ptr)
PyTuple_SET_ITEM(args, 1, bases);
// arg 3 - add an instance of the rna
+ if(descr) {
+ item= PyUnicode_FromString(descr);
+ PyDict_SetItemString(dict, "__doc__", item);
+ Py_DECREF(item);
+ }
+
PyTuple_SET_ITEM(args, 2, dict); // fill with useful subclass things!
if (PyErr_Occurred()) {
@@ -1146,26 +1439,13 @@ PyObject* pyrna_struct_Subtype(PointerRNA *ptr)
}
newclass = PyObject_CallObject((PyObject *)&PyType_Type, args);
- // Set this later
-
-
- if (newclass) {
- PyObject *rna;
- BPy_RNA_PYTYPE(ptr->data) = (void *)newclass; /* Store for later use */
-
- /* Not 100% needed but useful,
- * having an instance within a type looks wrong however this instance IS an rna type */
- rna = pyrna_struct_CreatePyObject(ptr);
- PyDict_SetItemString(((PyTypeObject *)newclass)->tp_dict, "__rna__", rna);
- Py_DECREF(rna);
- /* done with rna instance */
- }
-
Py_DECREF(args);
+
+ if (newclass)
+ pyrna_subtype_set_rna(newclass, ptr->data);
- if ((char *)&name != nameptr)
+ if (name != nameptr)
MEM_freeN(nameptr);
-
}
return newclass;
@@ -1188,11 +1468,11 @@ PyObject *pyrna_struct_CreatePyObject( PointerRNA *ptr )
}
else {
fprintf(stderr, "Could not make type\n");
- pyrna = ( BPy_StructRNA * ) PyObject_NEW( BPy_StructRNA, &pyrna_struct_Type );
+ pyrna = ( BPy_StructRNA * ) bpy_PyObject_New( BPy_StructRNA, &pyrna_struct_Type );
}
}
else {
- pyrna = ( BPy_StructRNA * ) PyObject_NEW( BPy_StructRNA, &pyrna_struct_Type );
+ pyrna = ( BPy_StructRNA * ) bpy_PyObject_New( BPy_StructRNA, &pyrna_struct_Type );
}
if( !pyrna ) {
@@ -1209,7 +1489,7 @@ PyObject *pyrna_prop_CreatePyObject( PointerRNA *ptr, PropertyRNA *prop )
{
BPy_PropertyRNA *pyrna;
- pyrna = ( BPy_PropertyRNA * ) PyObject_NEW( BPy_PropertyRNA, &pyrna_prop_Type );
+ pyrna = ( BPy_PropertyRNA * ) bpy_PyObject_New( BPy_PropertyRNA, &pyrna_prop_Type );
if( !pyrna ) {
PyErr_SetString( PyExc_MemoryError, "couldn't create BPy_rna object" );
@@ -1222,7 +1502,6 @@ PyObject *pyrna_prop_CreatePyObject( PointerRNA *ptr, PropertyRNA *prop )
return ( PyObject * ) pyrna;
}
-
PyObject *BPY_rna_module( void )
{
PointerRNA ptr;
@@ -1237,7 +1516,6 @@ PyObject *BPY_rna_module( void )
if( PyType_Ready( &pyrna_prop_Type ) < 0 )
return NULL;
-
/* for now, return the base RNA type rather then a real module */
RNA_main_pointer_create(G.main, &ptr);
@@ -1272,7 +1550,11 @@ static PyObject *pyrna_basetype_getattro( BPy_BaseTypeRNA * self, PyObject *pyna
else PyErr_Clear();
if (RNA_property_collection_lookup_string(&self->ptr, self->prop, _PyUnicode_AsString(pyname), &newptr)) {
- return pyrna_struct_Subtype(&newptr);
+ ret= pyrna_struct_Subtype(&newptr);
+ if (ret==NULL) {
+ PyErr_Format(PyExc_SystemError, "bpy.types.%s subtype could not be generated, this is a bug!", _PyUnicode_AsString(pyname));
+ }
+ return ret;
}
else { /* Override the error */
PyErr_Format(PyExc_AttributeError, "bpy.types.%s not a valid RNA_Struct", _PyUnicode_AsString(pyname));
@@ -1283,6 +1565,8 @@ static PyObject *pyrna_basetype_getattro( BPy_BaseTypeRNA * self, PyObject *pyna
static PyObject *pyrna_basetype_dir(BPy_BaseTypeRNA *self);
static struct PyMethodDef pyrna_basetype_methods[] = {
{"__dir__", (PyCFunction)pyrna_basetype_dir, METH_NOARGS, ""},
+ {"register", (PyCFunction)pyrna_basetype_register, METH_VARARGS, ""},
+ {"unregister", (PyCFunction)pyrna_basetype_unregister, METH_VARARGS, ""},
{NULL, NULL, 0, NULL}
};
@@ -1302,21 +1586,25 @@ static PyObject *pyrna_basetype_dir(BPy_BaseTypeRNA *self)
return list;
}
-PyTypeObject pyrna_basetype_Type = {NULL};
+PyTypeObject pyrna_basetype_Type = BLANK_PYTHON_TYPE;
PyObject *BPY_rna_types(void)
{
BPy_BaseTypeRNA *self;
- pyrna_basetype_Type.tp_name = "RNA_Types";
- pyrna_basetype_Type.tp_basicsize = sizeof( BPy_BaseTypeRNA );
- pyrna_basetype_Type.tp_getattro = ( getattrofunc )pyrna_basetype_getattro;
- pyrna_basetype_Type.tp_flags = Py_TPFLAGS_DEFAULT;
- pyrna_basetype_Type.tp_methods = pyrna_basetype_methods;
-
- if( PyType_Ready( &pyrna_basetype_Type ) < 0 )
- return NULL;
+
+ if ((pyrna_basetype_Type.tp_flags & Py_TPFLAGS_READY)==0) {
+ pyrna_basetype_Type.tp_name = "RNA_Types";
+ pyrna_basetype_Type.tp_basicsize = sizeof( BPy_BaseTypeRNA );
+ pyrna_basetype_Type.tp_getattro = ( getattrofunc )pyrna_basetype_getattro;
+ pyrna_basetype_Type.tp_flags = Py_TPFLAGS_DEFAULT;
+ pyrna_basetype_Type.tp_methods = pyrna_basetype_methods;
+ //pyrna_basetype_Type.tp_free = MEM_freeN;
+
+ if( PyType_Ready( &pyrna_basetype_Type ) < 0 )
+ return NULL;
+ }
- self= (BPy_BaseTypeRNA *)PyObject_NEW( BPy_BaseTypeRNA, &pyrna_basetype_Type );
+ self= (BPy_BaseTypeRNA *)bpy_PyObject_New( BPy_BaseTypeRNA, &pyrna_basetype_Type );
/* avoid doing this lookup for every getattr */
RNA_blender_rna_pointer_create(&self->ptr);
@@ -1411,3 +1699,358 @@ PyObject *BPy_BoolProperty(PyObject *self, PyObject *args, PyObject *kw)
return ret;
}
}
+
+/*-------------------- Type Registration ------------------------*/
+
+static int rna_function_arg_count(FunctionRNA *func)
+{
+ const ListBase *lb= RNA_function_defined_parameters(func);
+ PropertyRNA *parm;
+ Link *link;
+ int count= 1;
+
+ for(link=lb->first; link; link=link->next) {
+ parm= (PropertyRNA*)link;
+ if(!(RNA_property_flag(parm) & PROP_RETURN))
+ count++;
+ }
+
+ return count;
+}
+
+static int bpy_class_validate(PointerRNA *dummyptr, void *py_data, int *have_function)
+{
+ const ListBase *lb;
+ Link *link;
+ FunctionRNA *func;
+ PropertyRNA *prop;
+ StructRNA *srna= dummyptr->type;
+ const char *class_type= RNA_struct_identifier(srna);
+ PyObject *py_class= (PyObject*)py_data;
+ PyObject *base_class= RNA_struct_py_type_get(srna);
+ PyObject *item, *fitem;
+ PyObject *py_arg_count;
+ int i, flag, arg_count, func_arg_count;
+ char identifier[128];
+
+ if (base_class) {
+ if (!PyObject_IsSubclass(py_class, base_class)) {
+ PyObject *name= PyObject_GetAttrString(base_class, "__name__");
+ PyErr_Format( PyExc_AttributeError, "expected %s subclass of class \"%s\"", class_type, name ? _PyUnicode_AsString(name):"<UNKNOWN>");
+ Py_XDECREF(name);
+ return -1;
+ }
+ }
+
+ /* verify callback functions */
+ lb= RNA_struct_defined_functions(srna);
+ i= 0;
+ for(link=lb->first; link; link=link->next) {
+ func= (FunctionRNA*)link;
+ flag= RNA_function_flag(func);
+
+ if(!(flag & FUNC_REGISTER))
+ continue;
+
+ item = PyObject_GetAttrString(py_class, RNA_function_identifier(func));
+
+ have_function[i]= (item != NULL);
+ i++;
+
+ if (item==NULL) {
+ if ((flag & FUNC_REGISTER_OPTIONAL)==0) {
+ PyErr_Format( PyExc_AttributeError, "expected %s class to have an \"%s\" attribute", class_type, RNA_function_identifier(func));
+ return -1;
+ }
+
+ PyErr_Clear();
+ }
+ else {
+ Py_DECREF(item); /* no need to keep a ref, the class owns it */
+
+ if (PyMethod_Check(item))
+ fitem= PyMethod_Function(item); /* py 2.x */
+ else
+ fitem= item; /* py 3.x */
+
+ if (PyFunction_Check(fitem)==0) {
+ PyErr_Format( PyExc_AttributeError, "expected %s class \"%s\" attribute to be a function", class_type, RNA_function_identifier(func));
+ return -1;
+ }
+
+ func_arg_count= rna_function_arg_count(func);
+
+ if (func_arg_count >= 0) { /* -1 if we dont care*/
+ py_arg_count = PyObject_GetAttrString(PyFunction_GET_CODE(fitem), "co_argcount");
+ arg_count = PyLong_AsSsize_t(py_arg_count);
+ Py_DECREF(py_arg_count);
+
+ if (arg_count != func_arg_count) {
+ PyErr_Format( PyExc_AttributeError, "expected %s class \"%s\" function to have %d args", class_type, RNA_function_identifier(func), func_arg_count);
+ return -1;
+ }
+ }
+ }
+ }
+
+ /* verify properties */
+ lb= RNA_struct_defined_properties(srna);
+ for(link=lb->first; link; link=link->next) {
+ prop= (PropertyRNA*)link;
+ flag= RNA_property_flag(prop);
+
+ if(!(flag & PROP_REGISTER))
+ continue;
+
+ BLI_snprintf(identifier, sizeof(identifier), "__%s__", RNA_property_identifier(prop));
+ item = PyObject_GetAttrString(py_class, identifier);
+
+ if (item==NULL) {
+ if(strcmp(identifier, "__idname__") == 0) {
+ item= PyObject_GetAttrString(py_class, "__name__");
+
+ if(item) {
+ Py_DECREF(item); /* no need to keep a ref, the class owns it */
+
+ if(pyrna_py_to_prop(dummyptr, prop, NULL, item) != 0)
+ return -1;
+ }
+ }
+
+ if (item==NULL && (flag & PROP_REGISTER_OPTIONAL)==0) {
+ PyErr_Format( PyExc_AttributeError, "expected %s class to have an \"%s\" attribute", class_type, identifier);
+ return -1;
+ }
+
+ PyErr_Clear();
+ }
+ else {
+ Py_DECREF(item); /* no need to keep a ref, the class owns it */
+
+ if(pyrna_py_to_prop(dummyptr, prop, NULL, item) != 0)
+ return -1;
+ }
+ }
+
+ return 0;
+}
+
+extern void BPY_update_modules( void ); //XXX temp solution
+
+static int bpy_class_call(PointerRNA *ptr, FunctionRNA *func, ParameterList *parms)
+{
+ PyObject *args;
+ PyObject *ret= NULL, *py_class, *py_class_instance, *item, *parmitem;
+ PropertyRNA *pret= NULL, *parm;
+ ParameterIterator iter;
+ PointerRNA funcptr;
+ void *retdata= NULL;
+ int err= 0, i, flag;
+
+ PyGILState_STATE gilstate = PyGILState_Ensure();
+
+ BPY_update_modules(); // XXX - the RNA pointers can change so update before running, would like a nicer solution for this.
+
+ py_class= RNA_struct_py_type_get(ptr->type);
+
+ item = pyrna_struct_CreatePyObject(ptr);
+ if(item == NULL) {
+ py_class_instance = NULL;
+ }
+ else if(item == Py_None) { /* probably wont ever happen but possible */
+ Py_DECREF(item);
+ py_class_instance = NULL;
+ }
+ else {
+ args = PyTuple_New(1);
+ PyTuple_SET_ITEM(args, 0, item);
+ py_class_instance = PyObject_Call(py_class, args, NULL);
+ Py_DECREF(args);
+ }
+
+ if (py_class_instance) { /* Initializing the class worked, now run its invoke function */
+ item= PyObject_GetAttrString(py_class, RNA_function_identifier(func));
+ flag= RNA_function_flag(func);
+
+ if(item) {
+ pret= RNA_function_return(func);
+ RNA_pointer_create(NULL, &RNA_Function, func, &funcptr);
+
+ args = PyTuple_New(rna_function_arg_count(func));
+ PyTuple_SET_ITEM(args, 0, py_class_instance);
+
+ RNA_parameter_list_begin(parms, &iter);
+
+ /* parse function parameters */
+ for (i= 1; iter.valid; RNA_parameter_list_next(&iter)) {
+ parm= iter.parm;
+
+ if (parm==pret) {
+ retdata= iter.data;
+ continue;
+ }
+
+ parmitem= pyrna_param_to_py(&funcptr, parm, iter.data);
+ PyTuple_SET_ITEM(args, i, parmitem);
+ i++;
+ }
+
+ ret = PyObject_Call(item, args, NULL);
+
+ Py_DECREF(item);
+ Py_DECREF(args);
+ }
+ else {
+ Py_DECREF(py_class_instance);
+ PyErr_Format(PyExc_AttributeError, "could not find function %s in %s to execute callback.", RNA_function_identifier(func), RNA_struct_identifier(ptr->type));
+ err= -1;
+ }
+ }
+ else {
+ PyErr_Format(PyExc_AttributeError, "could not create instance of %s to call callback function %s.", RNA_struct_identifier(ptr->type), RNA_function_identifier(func));
+ err= -1;
+ }
+
+ if (ret == NULL) { /* covers py_class_instance failing too */
+ PyErr_Print(); /* XXX use reporting api? */
+ err= -1;
+ }
+ else {
+ if(retdata)
+ err= pyrna_py_to_prop(&funcptr, pret, retdata, ret);
+ Py_DECREF(ret);
+ }
+
+ PyGILState_Release(gilstate);
+
+ return err;
+}
+
+static void bpy_class_free(void *pyob_ptr)
+{
+ Py_DECREF((PyObject *)pyob_ptr);
+}
+
+PyObject *pyrna_basetype_register(PyObject *self, PyObject *args)
+{
+ bContext *C= NULL;
+ PyObject *py_class, *item;
+ ReportList reports;
+ StructRegisterFunc reg;
+ BPy_StructRNA *py_srna;
+ StructRNA *srna;
+
+ if(!PyArg_ParseTuple(args, "O:register", &py_class))
+ return NULL;
+
+ if(!PyType_Check(py_class)) {
+ PyErr_SetString(PyExc_AttributeError, "expected a Type subclassed from a registerable rna type (no a Type object).");
+ return NULL;
+ }
+
+ /* check we got an __rna__ attribute */
+ item= PyObject_GetAttrString(py_class, "__rna__");
+
+ if(!item || !BPy_StructRNA_Check(item)) {
+ if(item) {
+ Py_DECREF(item);
+ }
+ PyErr_SetString(PyExc_AttributeError, "expected a Type subclassed from a registerable rna type (no __rna__ property).");
+ return NULL;
+ }
+
+ /* check the __rna__ attribute has the right type */
+ Py_DECREF(item);
+ py_srna= (BPy_StructRNA*)item;
+
+ if(py_srna->ptr.type != &RNA_Struct) {
+ PyErr_SetString(PyExc_AttributeError, "expected a Type subclassed from a registerable rna type (not a Struct).");
+ return NULL;
+ }
+
+ /* check that we have a register callback for this type */
+ reg= RNA_struct_register(py_srna->ptr.data);
+
+ if(!reg) {
+ PyErr_SetString(PyExc_AttributeError, "expected a Type subclassed from a registerable rna type (no register supported).");
+ return NULL;
+ }
+
+ /* get the context, so register callback can do necessary refreshes */
+ item= PyDict_GetItemString(PyEval_GetGlobals(), "__bpy_context__"); /* borrow ref */
+
+ if(item)
+ C= (bContext*)PyCObject_AsVoidPtr(item);
+
+ /* call the register callback */
+ BKE_reports_init(&reports, RPT_PRINT);
+ srna= reg(C, &reports, py_class, bpy_class_validate, bpy_class_call, bpy_class_free);
+
+ if(!srna) {
+ BPy_reports_to_error(&reports);
+ BKE_reports_clear(&reports);
+ return NULL;
+ }
+
+ BKE_reports_clear(&reports);
+
+ pyrna_subtype_set_rna(py_class, srna);
+ Py_INCREF(py_class);
+
+ Py_RETURN_NONE;
+}
+
+PyObject *pyrna_basetype_unregister(PyObject *self, PyObject *args)
+{
+ bContext *C= NULL;
+ PyObject *py_class, *item;
+ BPy_StructRNA *py_srna;
+ StructUnregisterFunc unreg;
+
+ if(!PyArg_ParseTuple(args, "O:unregister", &py_class))
+ return NULL;
+
+ if(!PyType_Check(py_class)) {
+ PyErr_SetString(PyExc_AttributeError, "expected a Type subclassed from a registerable rna type (no a Type object).");
+ return NULL;
+ }
+
+ /* check we got an __rna__ attribute */
+ item= PyDict_GetItemString(((PyTypeObject*)py_class)->tp_dict, "__rna__"); /* borrow ref */
+
+ if(!item || !BPy_StructRNA_Check(item)) {
+ PyErr_SetString(PyExc_AttributeError, "expected a Type subclassed from a registerable rna type (no __rna__ property).");
+ return NULL;
+ }
+
+ /* check the __rna__ attribute has the right type */
+ py_srna= (BPy_StructRNA*)item;
+
+ if(py_srna->ptr.type != &RNA_Struct) {
+ PyErr_SetString(PyExc_AttributeError, "expected a Type subclassed from a registerable rna type (not a Struct).");
+ return NULL;
+ }
+
+ /* check that we have a unregister callback for this type */
+ unreg= RNA_struct_unregister(py_srna->ptr.data);
+
+ if(!unreg) {
+ PyErr_SetString(PyExc_AttributeError, "expected a Type subclassed from a registerable rna type (no unregister supported).");
+ return NULL;
+ }
+
+ /* get the context, so register callback can do necessary refreshes */
+ item= PyDict_GetItemString(PyEval_GetGlobals(), "__bpy_context__"); /* borrow ref */
+
+ if(item)
+ C= (bContext*)PyCObject_AsVoidPtr(item);
+
+ /* call unregister */
+ unreg(C, py_srna->ptr.data);
+
+ /* remove reference to old type */
+ Py_DECREF(py_class);
+
+ Py_RETURN_NONE;
+}
+
diff --git a/source/blender/python/intern/bpy_rna.h b/source/blender/python/intern/bpy_rna.h
index 878b2a7d17a..a97d450fb2f 100644
--- a/source/blender/python/intern/bpy_rna.h
+++ b/source/blender/python/intern/bpy_rna.h
@@ -38,10 +38,6 @@ extern PyTypeObject pyrna_prop_Type;
#define BPy_PropertyRNA_Check(v) (PyObject_TypeCheck(v, &pyrna_prop_Type))
#define BPy_PropertyRNA_CheckExact(v) (Py_TYPE(v) == &pyrna_prop_Type)
- //XXX add propper accessor function, we know this is just after next/prev pointers
-
- #define BPy_RNA_PYTYPE( _data ) (((BPy_StructFakeType *)(_data))->py_type)
-
typedef struct {
void * _a;
void * _b;
@@ -72,7 +68,7 @@ PyObject *pyrna_struct_CreatePyObject( PointerRNA *ptr );
PyObject *pyrna_prop_CreatePyObject( PointerRNA *ptr, PropertyRNA *prop );
/* operators also need this to set args */
-int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, PyObject *value);
+int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, void *data, PyObject *value);
PyObject * pyrna_prop_to_py(PointerRNA *ptr, PropertyRNA *prop);
/* functions for setting up new props - experemental */
@@ -80,5 +76,8 @@ PyObject *BPy_FloatProperty(PyObject *self, PyObject *args, PyObject *kw);
PyObject *BPy_IntProperty(PyObject *self, PyObject *args, PyObject *kw);
PyObject *BPy_BoolProperty(PyObject *self, PyObject *args, PyObject *kw);
+/* function for registering types */
+PyObject *pyrna_basetype_register(PyObject *self, PyObject *args);
+PyObject *pyrna_basetype_unregister(PyObject *self, PyObject *args);
#endif
diff --git a/source/blender/python/intern/bpy_ui.c b/source/blender/python/intern/bpy_ui.c
index 7b3b4c01c55..0f2142f4b62 100644
--- a/source/blender/python/intern/bpy_ui.c
+++ b/source/blender/python/intern/bpy_ui.c
@@ -27,6 +27,7 @@
#include "bpy_rna.h" /* for rna buttons */
#include "bpy_operator.h" /* for setting button operator properties */
#include "bpy_compat.h"
+
#include "WM_types.h" /* for WM_OP_INVOKE_DEFAULT & friends */
#include "BLI_dynstr.h"
@@ -42,12 +43,13 @@
static PyObject *Method_pupMenuBegin( PyObject * self, PyObject * args )
{
+ PyObject *py_context;
char *title; int icon;
- if( !PyArg_ParseTuple( args, "si:pupMenuBegin", &title, &icon))
+ if( !PyArg_ParseTuple( args, "O!si:pupMenuBegin", &PyCObject_Type, &py_context, &title, &icon))
return NULL;
- return PyCObject_FromVoidPtr( uiPupMenuBegin(title, icon), NULL );
+ return PyCObject_FromVoidPtr( uiPupMenuBegin(PyCObject_AsVoidPtr(py_context), title, icon), NULL );
}
static PyObject *Method_pupMenuEnd( PyObject * self, PyObject * args )
@@ -62,20 +64,6 @@ static PyObject *Method_pupMenuEnd( PyObject * self, PyObject * args )
Py_RETURN_NONE;
}
-static PyObject *Method_menuItemO( PyObject * self, PyObject * args )
-{
- PyObject *py_head;
- char *opname;
- int icon;
-
- if( !PyArg_ParseTuple( args, "O!is:menuItemO", &PyCObject_Type, &py_head, &icon, &opname))
- return NULL;
-
- uiMenuItemO(PyCObject_AsVoidPtr(py_head), icon, opname);
-
- Py_RETURN_NONE;
-}
-
static PyObject *Method_defButO( PyObject * self, PyObject * args )
{
uiBut *but;
@@ -156,7 +144,9 @@ static PyObject *Method_pupBlock( PyObject * self, PyObject * args )
Py_RETURN_NONE;
}
-static PyObject *Method_beginBlock( PyObject * self, PyObject * args ) // XXX missing 2 args - UI_EMBOSS, UI_HELV, do we care?
+// XXX missing arg - UI_EMBOSS, do we care?
+// XXX well, right now this only is to distinguish whether we have regular buttons or for pulldowns (ton)
+static PyObject *Method_beginBlock( PyObject * self, PyObject * args )
{
PyObject *py_context, *py_ar;
char *name;
@@ -164,7 +154,7 @@ static PyObject *Method_beginBlock( PyObject * self, PyObject * args ) // XXX mi
if( !PyArg_ParseTuple( args, "O!O!s:beginBlock", &PyCObject_Type, &py_context, &PyCObject_Type, &py_ar, &name) )
return NULL;
- return PyCObject_FromVoidPtr(uiBeginBlock(PyCObject_AsVoidPtr(py_context), PyCObject_AsVoidPtr(py_ar), name, UI_EMBOSS, UI_HELV), NULL);
+ return PyCObject_FromVoidPtr(uiBeginBlock(PyCObject_AsVoidPtr(py_context), PyCObject_AsVoidPtr(py_ar), name, UI_EMBOSS), NULL);
}
static PyObject *Method_endBlock( PyObject * self, PyObject * args )
@@ -189,29 +179,6 @@ static PyObject *Method_drawBlock( PyObject * self, PyObject * args )
Py_RETURN_NONE;
}
-static PyObject *Method_drawPanels( PyObject * self, PyObject * args )
-{
- PyObject *py_context;
- int align;
-
- if( !PyArg_ParseTuple( args, "O!i:drawPanels", &PyCObject_Type, &py_context, &align) )
- return NULL;
-
- uiDrawPanels(PyCObject_AsVoidPtr(py_context), align);
- Py_RETURN_NONE;
-}
-
-static PyObject *Method_matchPanelsView2d( PyObject * self, PyObject * args )
-{
- PyObject *py_ar;
-
- if( !PyArg_ParseTuple( args, "O!:matchPanelsView2d", &PyCObject_Type, &py_ar) )
- return NULL;
-
- uiMatchPanelsView2d(PyCObject_AsVoidPtr(py_ar));
- Py_RETURN_NONE;
-}
-
static PyObject *Method_popupBoundsBlock( PyObject * self, PyObject * args )
{
PyObject *py_block;
@@ -258,18 +225,6 @@ static PyObject *Method_blockSetFlag( PyObject * self, PyObject * args )
Py_RETURN_NONE;
}
-static PyObject *Method_newPanel( PyObject * self, PyObject * args )
-{
- PyObject *py_context, *py_area, *py_block;
- char *panelname, *tabname;
- int ofsx, ofsy, sizex, sizey;
-
- if( !PyArg_ParseTuple( args, "O!O!O!ssiiii:newPanel", &PyCObject_Type, &py_context, &PyCObject_Type, &py_area, &PyCObject_Type, &py_block, &panelname, &tabname, &ofsx, &ofsy, &sizex, &sizey))
- return NULL;
-
- return PyLong_FromSsize_t(uiNewPanel(PyCObject_AsVoidPtr(py_context), PyCObject_AsVoidPtr(py_area), PyCObject_AsVoidPtr(py_block), panelname, tabname, ofsx, ofsy, sizex, sizey));
-}
-
/* similar to Draw.c */
static PyObject *Method_register( PyObject * self, PyObject * args )
{
@@ -352,7 +307,7 @@ static PyObject *Method_registerKey( PyObject * self, PyObject * args )
static bContext *get_py_context__internal(void)
{
PyObject *globals = PyEval_GetGlobals();
- PyObject *val= PyDict_GetItemString(globals, "__bpy_context__");
+ PyObject *val= PyDict_GetItemString(globals, "__bpy_context__"); /* borrow ref */
return PyCObject_AsVoidPtr(val);
}
@@ -399,7 +354,6 @@ static PyObject *Method_getWindowPtr( PyObject * self )
static struct PyMethodDef ui_methods[] = {
{"pupMenuBegin", (PyCFunction)Method_pupMenuBegin, METH_VARARGS, ""},
{"pupMenuEnd", (PyCFunction)Method_pupMenuEnd, METH_VARARGS, ""},
- {"menuItemO", (PyCFunction)Method_menuItemO, METH_VARARGS, ""},
{"defButO", (PyCFunction)Method_defButO, METH_VARARGS, ""},
{"defAutoButR", (PyCFunction)Method_defAutoButR, METH_VARARGS, ""},
{"pupBlock", (PyCFunction)Method_pupBlock, METH_VARARGS, ""},
@@ -410,9 +364,6 @@ static struct PyMethodDef ui_methods[] = {
{"blockBeginAlign", (PyCFunction)Method_blockBeginAlign, METH_VARARGS, ""},
{"blockEndAlign", (PyCFunction)Method_blockEndAlign, METH_VARARGS, ""},
{"blockSetFlag", (PyCFunction)Method_blockSetFlag, METH_VARARGS, ""},
- {"newPanel", (PyCFunction)Method_newPanel, METH_VARARGS, ""},
- {"drawPanels", (PyCFunction)Method_drawPanels, METH_VARARGS, ""},
- {"matchPanelsView2d", (PyCFunction)Method_matchPanelsView2d, METH_VARARGS, ""},
{"register", (PyCFunction)Method_register, METH_VARARGS, ""}, // XXX not sure about this - registers current script with the ScriptSpace, like Draw.Register()
{"registerKey", (PyCFunction)Method_registerKey, METH_VARARGS, ""}, // XXX could have this in another place too
@@ -423,6 +374,7 @@ static struct PyMethodDef ui_methods[] = {
{"getScreenPtr", (PyCFunction)Method_getScreenPtr, METH_NOARGS, ""},
{"getSpacePtr", (PyCFunction)Method_getSpacePtr, METH_NOARGS, ""},
{"getWindowPtr", (PyCFunction)Method_getWindowPtr, METH_NOARGS, ""},
+
{NULL, NULL, 0, NULL}
};
diff --git a/source/blender/python/intern/bpy_util.c b/source/blender/python/intern/bpy_util.c
index 7979ca9cd37..66cf244e3bd 100644
--- a/source/blender/python/intern/bpy_util.c
+++ b/source/blender/python/intern/bpy_util.c
@@ -22,11 +22,12 @@
* ***** END GPL LICENSE BLOCK *****
*/
-
+#include "DNA_listBase.h"
+#include "RNA_access.h"
#include "bpy_util.h"
#include "BLI_dynstr.h"
#include "MEM_guardedalloc.h"
-#include "bpy_compat.h"
+#include "BKE_report.h"
PyObject *BPY_flag_to_list(struct BPY_flag_def *flagdef, int flag)
{
@@ -241,3 +242,110 @@ PyObject *PyObject_GetAttrStringArgs(PyObject *o, Py_ssize_t n, ...)
Py_XINCREF(item); /* final value has is increfed, to match PyObject_GetAttrString */
return item;
}
+
+int BPY_class_validate(const char *class_type, PyObject *class, PyObject *base_class, BPY_class_attr_check* class_attrs, PyObject **py_class_attrs)
+{
+ PyObject *item, *fitem;
+ PyObject *py_arg_count;
+ int i, arg_count;
+
+ if (base_class) {
+ if (!PyObject_IsSubclass(class, base_class)) {
+ PyObject *name= PyObject_GetAttrString(base_class, "__name__");
+ PyErr_Format( PyExc_AttributeError, "expected %s subclass of class \"%s\"", class_type, name ? _PyUnicode_AsString(name):"<UNKNOWN>");
+ Py_XDECREF(name);
+ return -1;
+ }
+ }
+
+ for(i= 0;class_attrs->name; class_attrs++, i++) {
+ item = PyObject_GetAttrString(class, class_attrs->name);
+
+ if (py_class_attrs)
+ py_class_attrs[i]= item;
+
+ if (item==NULL) {
+ if ((class_attrs->flag & BPY_CLASS_ATTR_OPTIONAL)==0) {
+ PyErr_Format( PyExc_AttributeError, "expected %s class to have an \"%s\" attribute", class_type, class_attrs->name);
+ return -1;
+ }
+
+ PyErr_Clear();
+ }
+ else {
+ Py_DECREF(item); /* no need to keep a ref, the class owns it */
+
+ if((item==Py_None) && (class_attrs->flag & BPY_CLASS_ATTR_NONE_OK)) {
+ /* dont do anything, this is ok, dont bother checking other types */
+ }
+ else {
+ switch(class_attrs->type) {
+ case 's':
+ if (PyUnicode_Check(item)==0) {
+ PyErr_Format( PyExc_AttributeError, "expected %s class \"%s\" attribute to be a string", class_type, class_attrs->name);
+ return -1;
+ }
+ break;
+ case 'l':
+ if (PyList_Check(item)==0) {
+ PyErr_Format( PyExc_AttributeError, "expected %s class \"%s\" attribute to be a list", class_type, class_attrs->name);
+ return -1;
+ }
+ break;
+ case 'f':
+ if (PyMethod_Check(item))
+ fitem= PyMethod_Function(item); /* py 2.x */
+ else
+ fitem= item; /* py 3.x */
+
+ if (PyFunction_Check(fitem)==0) {
+ PyErr_Format( PyExc_AttributeError, "expected %s class \"%s\" attribute to be a function", class_type, class_attrs->name);
+ return -1;
+ }
+ if (class_attrs->arg_count >= 0) { /* -1 if we dont care*/
+ py_arg_count = PyObject_GetAttrString(PyFunction_GET_CODE(fitem), "co_argcount");
+ arg_count = PyLong_AsSsize_t(py_arg_count);
+ Py_DECREF(py_arg_count);
+
+ if (arg_count != class_attrs->arg_count) {
+ PyErr_Format( PyExc_AttributeError, "expected %s class \"%s\" function to have %d args", class_type, class_attrs->name, class_attrs->arg_count);
+ return -1;
+ }
+ }
+ break;
+ }
+ }
+ }
+ }
+ return 0;
+}
+
+char *BPy_enum_as_string(EnumPropertyItem *item)
+{
+ DynStr *dynstr= BLI_dynstr_new();
+ EnumPropertyItem *e;
+ char *cstring;
+
+ for (e= item; item->identifier; item++) {
+ BLI_dynstr_appendf(dynstr, (e==item)?"'%s'":", '%s'", item->identifier);
+ }
+
+ cstring = BLI_dynstr_get_cstring(dynstr);
+ BLI_dynstr_free(dynstr);
+ return cstring;
+}
+
+int BPy_reports_to_error(ReportList *reports)
+{
+ char *report_str;
+
+ report_str= BKE_reports_string(reports, RPT_ERROR);
+
+ if(report_str) {
+ PyErr_SetString(PyExc_SystemError, report_str);
+ MEM_freeN(report_str);
+ }
+
+ return (report_str != NULL);
+}
+
diff --git a/source/blender/python/intern/bpy_util.h b/source/blender/python/intern/bpy_util.h
index 51e13f98a35..db31f403714 100644
--- a/source/blender/python/intern/bpy_util.h
+++ b/source/blender/python/intern/bpy_util.h
@@ -28,6 +28,10 @@
#define BPY_UTIL_H
#include "bpy_compat.h"
+#include "RNA_types.h" /* for EnumPropertyItem only */
+
+struct EnumPropertyItem;
+struct ReportList;
/* for internal use only, so python can interchange a sequence of strings with flags */
typedef struct BPY_flag_def {
@@ -46,4 +50,28 @@ void BPY_getFileAndNum(char **filename, int *lineno);
/* own python like utility function */
PyObject *PyObject_GetAttrStringArgs(PyObject *o, Py_ssize_t n, ...);
+
+
+/* Class type checking, use for checking classes can be added as operators, panels etc */
+typedef struct BPY_class_attr_check {
+ const char *name; /* name of the class attribute */
+ char type; /* 's' = string, 'f' = function, 'l' = list, (add as needed) */
+ int arg_count; /* only for function types, -1 for undefined, includes self arg */
+ int flag; /* other options */
+} BPY_class_attr_check;
+
+/* BPY_class_attr_check, flag */
+#define BPY_CLASS_ATTR_OPTIONAL 1
+#define BPY_CLASS_ATTR_NONE_OK 2
+
+int BPY_class_validate(const char *class_type, PyObject *class, PyObject *base_class, BPY_class_attr_check* class_attrs, PyObject **py_class_attrs);
+
+char *BPy_enum_as_string(struct EnumPropertyItem *item);
+
+
+#define BLANK_PYTHON_TYPE {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
+
+/* error reporting */
+int BPy_reports_to_error(struct ReportList *reports);
+
#endif
diff --git a/source/blender/python/intern/stubs.c b/source/blender/python/intern/stubs.c
index e438966f324..8d6b5ad9f19 100644
--- a/source/blender/python/intern/stubs.c
+++ b/source/blender/python/intern/stubs.c
@@ -33,8 +33,6 @@ void BPY_post_start_python() {}
void BPY_do_all_scripts() {}
void BPY_call_importloader() {}
void BPY_do_pyscript() {}
-void BPY_pydriver_eval() {}
-void BPY_pydriver_get_objects() {}
void BPY_clear_script() {}
//void BPY_free_compiled_text() {}
void BPY_pyconstraint_eval() {}
diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c
index a77570ec1a5..4ca7244e976 100644
--- a/source/blender/render/intern/source/convertblender.c
+++ b/source/blender/render/intern/source/convertblender.c
@@ -945,11 +945,17 @@ static Material *give_render_material(Render *re, Object *ob, int nr)
/* ------------------------------------------------------------------------- */
/* Particles */
/* ------------------------------------------------------------------------- */
-
+typedef struct ParticleStrandData
+{
+ struct MCol *mcol;
+ float *orco, *uvco, *surfnor;
+ float time, adapt_angle, adapt_pix, size;
+ int totuv, totcol;
+ int first, line, adapt, override_uv;
+}
+ParticleStrandData;
/* future thread problem... */
-static void static_particle_strand(Render *re, ObjectRen *obr, Material *ma, float *orco, float *surfnor,
- float *uvco, int totuv, MCol *mcol, int totcol, float *vec, float *vec1, float ctime,
- int first, int line, int adapt, float adapt_angle, float adapt_pix, int override_uv)
+static void static_particle_strand(Render *re, ObjectRen *obr, Material *ma, ParticleStrandData *sd, float *vec, float *vec1)
{
static VertRen *v1= NULL, *v2= NULL;
VlakRen *vlr= NULL;
@@ -972,11 +978,11 @@ static void static_particle_strand(Render *re, ObjectRen *obr, Material *ma, flo
float fac;
if(ma->strand_ease!=0.0f) {
if(ma->strand_ease<0.0f)
- fac= pow(ctime, 1.0+ma->strand_ease);
+ fac= pow(sd->time, 1.0+ma->strand_ease);
else
- fac= pow(ctime, 1.0/(1.0f-ma->strand_ease));
+ fac= pow(sd->time, 1.0/(1.0f-ma->strand_ease));
}
- else fac= ctime;
+ else fac= sd->time;
width= ((1.0f-fac)*ma->strand_sta + (fac)*ma->strand_end);
@@ -1008,7 +1014,7 @@ static void static_particle_strand(Render *re, ObjectRen *obr, Material *ma, flo
flag |= R_STRAND;
/* single face line */
- if(line) {
+ if(sd->line) {
vlr= RE_findOrAddVlak(obr, obr->totvlak++);
vlr->flag= flag;
vlr->v1= RE_findOrAddVert(obr, obr->totvert++);
@@ -1019,25 +1025,25 @@ static void static_particle_strand(Render *re, ObjectRen *obr, Material *ma, flo
VECCOPY(vlr->v1->co, vec);
VecAddf(vlr->v1->co, vlr->v1->co, cross);
VECCOPY(vlr->v1->n, nor);
- vlr->v1->orco= orco;
+ vlr->v1->orco= sd->orco;
vlr->v1->accum= -1.0f; // accum abuse for strand texco
VECCOPY(vlr->v2->co, vec);
VecSubf(vlr->v2->co, vlr->v2->co, cross);
VECCOPY(vlr->v2->n, nor);
- vlr->v2->orco= orco;
+ vlr->v2->orco= sd->orco;
vlr->v2->accum= vlr->v1->accum;
VECCOPY(vlr->v4->co, vec1);
VecAddf(vlr->v4->co, vlr->v4->co, cross);
VECCOPY(vlr->v4->n, nor);
- vlr->v4->orco= orco;
+ vlr->v4->orco= sd->orco;
vlr->v4->accum= 1.0f; // accum abuse for strand texco
VECCOPY(vlr->v3->co, vec1);
VecSubf(vlr->v3->co, vlr->v3->co, cross);
VECCOPY(vlr->v3->n, nor);
- vlr->v3->orco= orco;
+ vlr->v3->orco= sd->orco;
vlr->v3->accum= vlr->v4->accum;
CalcNormFloat4(vlr->v4->co, vlr->v3->co, vlr->v2->co, vlr->v1->co, vlr->n);
@@ -1045,23 +1051,23 @@ static void static_particle_strand(Render *re, ObjectRen *obr, Material *ma, flo
vlr->mat= ma;
vlr->ec= ME_V2V3;
- if(surfnor) {
+ if(sd->surfnor) {
float *snor= RE_vlakren_get_surfnor(obr, vlr, 1);
- VECCOPY(snor, surfnor);
+ VECCOPY(snor, sd->surfnor);
}
- if(uvco){
- for(i=0; i<totuv; i++){
+ if(sd->uvco){
+ for(i=0; i<sd->totuv; i++){
MTFace *mtf;
mtf=RE_vlakren_get_tface(obr,vlr,i,NULL,1);
mtf->uv[0][0]=mtf->uv[1][0]=
- mtf->uv[2][0]=mtf->uv[3][0]=(uvco+2*i)[0];
+ mtf->uv[2][0]=mtf->uv[3][0]=(sd->uvco+2*i)[0];
mtf->uv[0][1]=mtf->uv[1][1]=
- mtf->uv[2][1]=mtf->uv[3][1]=(uvco+2*i)[1];
+ mtf->uv[2][1]=mtf->uv[3][1]=(sd->uvco+2*i)[1];
}
- if(override_uv>=0){
+ if(sd->override_uv>=0){
MTFace *mtf;
- mtf=RE_vlakren_get_tface(obr,vlr,override_uv,NULL,0);
+ mtf=RE_vlakren_get_tface(obr,vlr,sd->override_uv,NULL,0);
mtf->uv[0][0]=mtf->uv[3][0]=0.0f;
mtf->uv[1][0]=mtf->uv[2][0]=1.0f;
@@ -1070,18 +1076,18 @@ static void static_particle_strand(Render *re, ObjectRen *obr, Material *ma, flo
mtf->uv[2][1]=mtf->uv[3][1]=1.0f;
}
}
- if(mcol){
- for(i=0; i<totcol; i++){
+ if(sd->mcol){
+ for(i=0; i<sd->totcol; i++){
MCol *mc;
mc=RE_vlakren_get_mcol(obr,vlr,i,NULL,1);
- mc[0]=mc[1]=mc[2]=mc[3]=mcol[i];
- mc[0]=mc[1]=mc[2]=mc[3]=mcol[i];
+ mc[0]=mc[1]=mc[2]=mc[3]=sd->mcol[i];
+ mc[0]=mc[1]=mc[2]=mc[3]=sd->mcol[i];
}
}
}
/* first two vertices of a strand */
- else if(first) {
- if(adapt){
+ else if(sd->first) {
+ if(sd->adapt){
VECCOPY(anor, nor);
VECCOPY(avec, vec);
second=1;
@@ -1093,18 +1099,18 @@ static void static_particle_strand(Render *re, ObjectRen *obr, Material *ma, flo
VECCOPY(v1->co, vec);
VecAddf(v1->co, v1->co, cross);
VECCOPY(v1->n, nor);
- v1->orco= orco;
+ v1->orco= sd->orco;
v1->accum= -1.0f; // accum abuse for strand texco
VECCOPY(v2->co, vec);
VecSubf(v2->co, v2->co, cross);
VECCOPY(v2->n, nor);
- v2->orco= orco;
+ v2->orco= sd->orco;
v2->accum= v1->accum;
}
/* more vertices & faces to strand */
else {
- if(adapt==0 || second){
+ if(sd->adapt==0 || second){
vlr= RE_findOrAddVlak(obr, obr->totvlak++);
vlr->flag= flag;
vlr->v1= v1;
@@ -1116,14 +1122,14 @@ static void static_particle_strand(Render *re, ObjectRen *obr, Material *ma, flo
v2= vlr->v3; // cycle
- if(adapt){
+ if(sd->adapt){
second=0;
VECCOPY(anor,nor);
VECCOPY(avec,vec);
}
}
- else if(adapt){
+ else if(sd->adapt){
float dvec[3],pvec[3];
VecSubf(dvec,avec,vec);
Projf(pvec,dvec,vec);
@@ -1133,7 +1139,7 @@ static void static_particle_strand(Render *re, ObjectRen *obr, Material *ma, flo
dx= re->winx*dvec[0]*re->winmat[0][0]/w;
dy= re->winy*dvec[1]*re->winmat[1][1]/w;
w= sqrt(dx*dx + dy*dy);
- if(Inpf(anor,nor)<adapt_angle && w>adapt_pix){
+ if(Inpf(anor,nor)<sd->adapt_angle && w>sd->adapt_pix){
vlr= RE_findOrAddVlak(obr, obr->totvlak++);
vlr->flag= flag;
vlr->v1= v1;
@@ -1155,13 +1161,13 @@ static void static_particle_strand(Render *re, ObjectRen *obr, Material *ma, flo
VECCOPY(vlr->v4->co, vec);
VecAddf(vlr->v4->co, vlr->v4->co, cross);
VECCOPY(vlr->v4->n, nor);
- vlr->v4->orco= orco;
- vlr->v4->accum= -1.0f + 2.0f*ctime; // accum abuse for strand texco
+ vlr->v4->orco= sd->orco;
+ vlr->v4->accum= -1.0f + 2.0f*sd->time; // accum abuse for strand texco
VECCOPY(vlr->v3->co, vec);
VecSubf(vlr->v3->co, vlr->v3->co, cross);
VECCOPY(vlr->v3->n, nor);
- vlr->v3->orco= orco;
+ vlr->v3->orco= sd->orco;
vlr->v3->accum= vlr->v4->accum;
CalcNormFloat4(vlr->v4->co, vlr->v3->co, vlr->v2->co, vlr->v1->co, vlr->n);
@@ -1169,23 +1175,23 @@ static void static_particle_strand(Render *re, ObjectRen *obr, Material *ma, flo
vlr->mat= ma;
vlr->ec= ME_V2V3;
- if(surfnor) {
+ if(sd->surfnor) {
float *snor= RE_vlakren_get_surfnor(obr, vlr, 1);
- VECCOPY(snor, surfnor);
+ VECCOPY(snor, sd->surfnor);
}
- if(uvco){
- for(i=0; i<totuv; i++){
+ if(sd->uvco){
+ for(i=0; i<sd->totuv; i++){
MTFace *mtf;
mtf=RE_vlakren_get_tface(obr,vlr,i,NULL,1);
mtf->uv[0][0]=mtf->uv[1][0]=
- mtf->uv[2][0]=mtf->uv[3][0]=(uvco+2*i)[0];
+ mtf->uv[2][0]=mtf->uv[3][0]=(sd->uvco+2*i)[0];
mtf->uv[0][1]=mtf->uv[1][1]=
- mtf->uv[2][1]=mtf->uv[3][1]=(uvco+2*i)[1];
+ mtf->uv[2][1]=mtf->uv[3][1]=(sd->uvco+2*i)[1];
}
- if(override_uv>=0){
+ if(sd->override_uv>=0){
MTFace *mtf;
- mtf=RE_vlakren_get_tface(obr,vlr,override_uv,NULL,0);
+ mtf=RE_vlakren_get_tface(obr,vlr,sd->override_uv,NULL,0);
mtf->uv[0][0]=mtf->uv[3][0]=0.0f;
mtf->uv[1][0]=mtf->uv[2][0]=1.0f;
@@ -1194,12 +1200,12 @@ static void static_particle_strand(Render *re, ObjectRen *obr, Material *ma, flo
mtf->uv[2][1]=mtf->uv[3][1]=(vlr->v3->accum+1.0f)/2.0f;
}
}
- if(mcol){
- for(i=0; i<totcol; i++){
+ if(sd->mcol){
+ for(i=0; i<sd->totcol; i++){
MCol *mc;
mc=RE_vlakren_get_mcol(obr,vlr,i,NULL,1);
- mc[0]=mc[1]=mc[2]=mc[3]=mcol[i];
- mc[0]=mc[1]=mc[2]=mc[3]=mcol[i];
+ mc[0]=mc[1]=mc[2]=mc[3]=sd->mcol[i];
+ mc[0]=mc[1]=mc[2]=mc[3]=sd->mcol[i];
}
}
}
@@ -1252,17 +1258,13 @@ static void static_particle_wire(ObjectRen *obr, Material *ma, float *vec, float
}
}
-static void particle_billboard(Render *re, ObjectRen *obr, Material *ma, Object *bb_ob, float *vec, float *vel, float size, float tilt, short align,
- int lock, int p, int totpart, short uv_split, short anim, short split_offset, float random, float pa_time, float offset[2], int uv[3])
+
+static void particle_billboard(Render *re, ObjectRen *obr, Material *ma, ParticleBillboardData *bb)
{
VlakRen *vlr;
MTFace *mtf;
- float xvec[3]={1.0f,0.0f,0.0f}, yvec[3]={0.0f,1.0f,0.0f}, zvec[3];
- float onevec[3]={0.0f,0.0f,0.0f}, tvec[3],tvec2[3], bb_center[3];
- float uvx=0.0f, uvy=0.0f, uvdx=1.0f, uvdy=1.0f, time=0.0f;
-
- if(align<PART_BB_VIEW)
- onevec[align]=1.0f;
+ float xvec[3], yvec[3], zvec[3], bb_center[3];
+ float uvx = 0.0f, uvy = 0.0f, uvdx = 1.0f, uvdy = 1.0f, time = 0.0f;
vlr= RE_findOrAddVlak(obr, obr->totvlak++);
vlr->v1= RE_findOrAddVert(obr, obr->totvert++);
@@ -1270,74 +1272,23 @@ static void particle_billboard(Render *re, ObjectRen *obr, Material *ma, Object
vlr->v3= RE_findOrAddVert(obr, obr->totvert++);
vlr->v4= RE_findOrAddVert(obr, obr->totvert++);
- if(lock && align==PART_BB_VIEW){
- VECCOPY(xvec,bb_ob->obmat[0]);
- Normalize(xvec);
- VECCOPY(yvec,bb_ob->obmat[1]);
- Normalize(yvec);
- VECCOPY(zvec,bb_ob->obmat[2]);
- Normalize(zvec);
- }
- else if(align==PART_BB_VEL){
- float temp[3];
- VECCOPY(temp,vel);
- Normalize(temp);
- VECSUB(zvec,bb_ob->obmat[3],vec);
- if(lock){
- float fac=-Inpf(zvec,temp);
- VECADDFAC(zvec,zvec,temp,fac);
- }
- Normalize(zvec);
- Crossf(xvec,temp,zvec);
- Normalize(xvec);
- Crossf(yvec,zvec,xvec);
- }
- else{
- VECSUB(zvec,bb_ob->obmat[3],vec);
- if(lock)
- zvec[align]=0.0f;
- Normalize(zvec);
-
- if(align<PART_BB_VIEW)
- Crossf(xvec,onevec,zvec);
- else
- Crossf(xvec,bb_ob->obmat[1],zvec);
- Normalize(xvec);
- Crossf(yvec,zvec,xvec);
- }
+ psys_make_billboard(bb, xvec, yvec, zvec, bb_center);
- VECCOPY(tvec,xvec);
- VECCOPY(tvec2,yvec);
+ VECADD(vlr->v1->co, bb_center, xvec);
+ VECADD(vlr->v1->co, vlr->v1->co, yvec);
+ MTC_Mat4MulVecfl(re->viewmat, vlr->v1->co);
- VecMulf(xvec,cos(tilt*(float)M_PI));
- VecMulf(tvec2,sin(tilt*(float)M_PI));
- VECADD(xvec,xvec,tvec2);
+ VECSUB(vlr->v2->co, bb_center, xvec);
+ VECADD(vlr->v2->co, vlr->v2->co, yvec);
+ MTC_Mat4MulVecfl(re->viewmat, vlr->v2->co);
- VecMulf(yvec,cos(tilt*(float)M_PI));
- VecMulf(tvec,-sin(tilt*(float)M_PI));
- VECADD(yvec,yvec,tvec);
+ VECSUB(vlr->v3->co, bb_center, xvec);
+ VECSUB(vlr->v3->co, vlr->v3->co, yvec);
+ MTC_Mat4MulVecfl(re->viewmat, vlr->v3->co);
- VecMulf(xvec,size);
- VecMulf(yvec,size);
-
- VECADDFAC(bb_center,vec,xvec,offset[0]);
- VECADDFAC(bb_center,bb_center,yvec,offset[1]);
-
- VECADD(vlr->v1->co,bb_center,xvec);
- VECADD(vlr->v1->co,vlr->v1->co,yvec);
- MTC_Mat4MulVecfl(re->viewmat,vlr->v1->co);
-
- VECSUB(vlr->v2->co,bb_center,xvec);
- VECADD(vlr->v2->co,vlr->v2->co,yvec);
- MTC_Mat4MulVecfl(re->viewmat,vlr->v2->co);
-
- VECSUB(vlr->v3->co,bb_center,xvec);
- VECSUB(vlr->v3->co,vlr->v3->co,yvec);
- MTC_Mat4MulVecfl(re->viewmat,vlr->v3->co);
-
- VECADD(vlr->v4->co,bb_center,xvec);
- VECSUB(vlr->v4->co,vlr->v4->co,yvec);
- MTC_Mat4MulVecfl(re->viewmat,vlr->v4->co);
+ VECADD(vlr->v4->co, bb_center, xvec);
+ VECSUB(vlr->v4->co, vlr->v4->co, yvec);
+ MTC_Mat4MulVecfl(re->viewmat, vlr->v4->co);
CalcNormFloat4(vlr->v4->co, vlr->v3->co, vlr->v2->co, vlr->v1->co, vlr->n);
VECCOPY(vlr->v1->n,vlr->n);
@@ -1348,115 +1299,142 @@ static void particle_billboard(Render *re, ObjectRen *obr, Material *ma, Object
vlr->mat= ma;
vlr->ec= ME_V2V3;
- if(uv_split>1){
- uvdx=uvdy=1.0f/(float)uv_split;
- if(anim==PART_BB_ANIM_TIME){
- if(split_offset==PART_BB_OFF_NONE)
- time=pa_time;
- else if(split_offset==PART_BB_OFF_LINEAR)
- time=(float)fmod(pa_time+(float)p/(float)(uv_split*uv_split),1.0f);
+ if(bb->uv_split > 1){
+ uvdx = uvdy = 1.0f / (float)bb->uv_split;
+ if(bb->anim == PART_BB_ANIM_TIME) {
+ if(bb->split_offset == PART_BB_OFF_NONE)
+ time = bb->time;
+ else if(bb->split_offset == PART_BB_OFF_LINEAR)
+ time = (float)fmod(bb->time + (float)bb->num / (float)(bb->uv_split * bb->uv_split), 1.0f);
else /* split_offset==PART_BB_OFF_RANDOM */
- time=(float)fmod(pa_time+random,1.0f);
+ time = (float)fmod(bb->time + bb->random, 1.0f);
}
- else if(anim==PART_BB_ANIM_ANGLE){
- if(align==PART_BB_VIEW){
- time=(float)fmod((tilt+1.0f)/2.0f,1.0);
+ else if(bb->anim == PART_BB_ANIM_ANGLE) {
+ if(bb->align == PART_BB_VIEW) {
+ time = (float)fmod((bb->tilt + 1.0f) / 2.0f, 1.0);
}
else{
- float axis1[3]={0.0f,0.0f,0.0f};
- float axis2[3]={0.0f,0.0f,0.0f};
- axis1[(align+1)%3]=1.0f;
- axis2[(align+2)%3]=1.0f;
- if(lock==0){
- zvec[align]=0.0f;
+ float axis1[3] = {0.0f,0.0f,0.0f};
+ float axis2[3] = {0.0f,0.0f,0.0f};
+ axis1[(bb->align + 1) % 3] = 1.0f;
+ axis2[(bb->align + 2) % 3] = 1.0f;
+ if(bb->lock == 0) {
+ zvec[bb->align] = 0.0f;
Normalize(zvec);
}
- time=saacos(Inpf(zvec,axis1))/(float)M_PI;
- if(Inpf(zvec,axis2)<0.0f)
- time=1.0f-time/2.0f;
+ time = saacos(Inpf(zvec, axis1)) / (float)M_PI;
+ if(Inpf(zvec, axis2) < 0.0f)
+ time = 1.0f - time / 2.0f;
else
- time=time/2.0f;
+ time = time / 2.0f;
}
- if(split_offset==PART_BB_OFF_LINEAR)
- time=(float)fmod(pa_time+(float)p/(float)(uv_split*uv_split),1.0f);
- else if(split_offset==PART_BB_OFF_RANDOM)
- time=(float)fmod(pa_time+random,1.0f);
+ if(bb->split_offset == PART_BB_OFF_LINEAR)
+ time = (float)fmod(bb->time + (float)bb->num / (float)(bb->uv_split * bb->uv_split), 1.0f);
+ else if(bb->split_offset == PART_BB_OFF_RANDOM)
+ time = (float)fmod(bb->time + bb->random, 1.0f);
}
else{
- if(split_offset==PART_BB_OFF_NONE)
- time=0.0f;
- else if(split_offset==PART_BB_OFF_LINEAR)
- time=(float)fmod((float)p/(float)(uv_split*uv_split),1.0f);
+ if(bb->split_offset == PART_BB_OFF_NONE)
+ time = 0.0f;
+ else if(bb->split_offset == PART_BB_OFF_LINEAR)
+ time = (float)fmod((float)bb->num /(float)(bb->uv_split * bb->uv_split) , 1.0f);
else /* split_offset==PART_BB_OFF_RANDOM */
- time=random;
+ time = bb->random;
}
- uvx=uvdx*floor((float)(uv_split*uv_split)*(float)fmod((double)time,(double)uvdx));
- uvy=uvdy*floor((1.0f-time)*(float)uv_split);
- if(fmod(time,1.0f/uv_split)==0.0f)
- uvy-=uvdy;
+ uvx = uvdx * floor((float)(bb->uv_split * bb->uv_split) * (float)fmod((double)time, (double)uvdx));
+ uvy = uvdy * floor((1.0f - time) * (float)bb->uv_split);
+ if(fmod(time, 1.0f / bb->uv_split) == 0.0f)
+ uvy -= uvdy;
}
/* normal UVs */
- if(uv[0]>=0){
- mtf=RE_vlakren_get_tface(obr,vlr,uv[0],NULL,1);
- mtf->uv[0][0]=1.0f;
- mtf->uv[0][1]=1.0f;
- mtf->uv[1][0]=0.0f;
- mtf->uv[1][1]=1.0f;
- mtf->uv[2][0]=0.0f;
- mtf->uv[2][1]=0.0f;
- mtf->uv[3][0]=1.0f;
- mtf->uv[3][1]=0.0f;
+ if(bb->uv[0] >= 0){
+ mtf = RE_vlakren_get_tface(obr, vlr, bb->uv[0], NULL, 1);
+ mtf->uv[0][0] = 1.0f;
+ mtf->uv[0][1] = 1.0f;
+ mtf->uv[1][0] = 0.0f;
+ mtf->uv[1][1] = 1.0f;
+ mtf->uv[2][0] = 0.0f;
+ mtf->uv[2][1] = 0.0f;
+ mtf->uv[3][0] = 1.0f;
+ mtf->uv[3][1] = 0.0f;
}
/* time-index UVs */
- if(uv[1]>=0){
- mtf=RE_vlakren_get_tface(obr,vlr,uv[1],NULL,1);
- mtf->uv[0][0]=mtf->uv[1][0]=mtf->uv[2][0]=mtf->uv[3][0]=pa_time;
- mtf->uv[0][1]=mtf->uv[1][1]=mtf->uv[2][1]=mtf->uv[3][1]=(float)p/(float)totpart;
+ if(bb->uv[1] >= 0){
+ mtf = RE_vlakren_get_tface(obr, vlr, bb->uv[1], NULL, 1);
+ mtf->uv[0][0] = mtf->uv[1][0] = mtf->uv[2][0] = mtf->uv[3][0] = bb->time;
+ mtf->uv[0][1] = mtf->uv[1][1] = mtf->uv[2][1] = mtf->uv[3][1] = (float)bb->num/(float)bb->totnum;
}
/* split UVs */
- if(uv_split>1 && uv[2]>=0){
- mtf=RE_vlakren_get_tface(obr,vlr,uv[2],NULL,1);
- mtf->uv[0][0]=uvx+uvdx;
- mtf->uv[0][1]=uvy+uvdy;
- mtf->uv[1][0]=uvx;
- mtf->uv[1][1]=uvy+uvdy;
- mtf->uv[2][0]=uvx;
- mtf->uv[2][1]=uvy;
- mtf->uv[3][0]=uvx+uvdx;
- mtf->uv[3][1]=uvy;
+ if(bb->uv_split > 1 && bb->uv[2] >= 0){
+ mtf = RE_vlakren_get_tface(obr, vlr, bb->uv[2], NULL, 1);
+ mtf->uv[0][0] = uvx + uvdx;
+ mtf->uv[0][1] = uvy + uvdy;
+ mtf->uv[1][0] = uvx;
+ mtf->uv[1][1] = uvy + uvdy;
+ mtf->uv[2][0] = uvx;
+ mtf->uv[2][1] = uvy;
+ mtf->uv[3][0] = uvx + uvdx;
+ mtf->uv[3][1] = uvy;
}
}
-static void render_new_particle(Render *re, ObjectRen *obr, DerivedMesh *dm, Material *ma, int path, int first, int line,
- float time, float *loc, float *loc1, float *orco, float *surfnor, int totuv, float *uvco,
- int totcol, MCol *mcol, float size, int seed, int override_uv,
- int adapt, float adapt_angle, float adapt_pix)
+static void render_new_particle(Render *re, ObjectRen *obr, DerivedMesh *dm, Material *ma, ParticleStrandData *sd, float *loc, float *loc1, int seed)
{
HaloRen *har=0;
- if(path){
- if(ma->mode&MA_WIRE)
- static_particle_wire(obr, ma, loc, loc1, first, line);
- else if(ma->mode & MA_HALO){
- har= RE_inithalo_particle(re, obr, dm, ma, loc, loc1, orco, uvco, size, 1.0, seed);
- if(har) har->lay= obr->ob->lay;
+
+ if(ma->mode&MA_WIRE)
+ static_particle_wire(obr, ma, loc, loc1, sd->first, sd->line);
+ else if(ma->material_type == MA_TYPE_HALO) {
+ har= RE_inithalo_particle(re, obr, dm, ma, loc, loc1, sd->orco, sd->uvco, sd->size, 1.0, seed);
+ if(har) har->lay= obr->ob->lay;
+ }
+ else
+ static_particle_strand(re, obr, ma, sd, loc, loc1);
+}
+static void get_particle_uvco_mcol(short from, DerivedMesh *dm, float *fuv, int num, ParticleStrandData *sd)
+{
+ int i;
+
+ /* get uvco */
+ if(sd->uvco && ELEM(from,PART_FROM_FACE,PART_FROM_VOLUME)) {
+ for(i=0; i<sd->totuv; i++) {
+ if(num != DMCACHE_NOTFOUND) {
+ MFace *mface = dm->getFaceData(dm, num, CD_MFACE);
+ MTFace *mtface = (MTFace*)CustomData_get_layer_n(&dm->faceData, CD_MTFACE, i);
+ mtface += num;
+
+ psys_interpolate_uvs(mtface, mface->v4, fuv, sd->uvco + 2 * i);
+ }
+ else {
+ sd->uvco[2*i] = 0.0f;
+ sd->uvco[2*i + 1] = 0.0f;
+ }
}
- else
- static_particle_strand(re, obr, ma, orco, surfnor, uvco, totuv, mcol, totcol, loc, loc1, time, first, line, adapt, adapt_angle, adapt_pix, override_uv);
}
- else{
- har= RE_inithalo_particle(re, obr, dm, ma, loc, NULL, orco, uvco, size, 0.0, seed);
- if(har) har->lay= obr->ob->lay;
+
+ /* get mcol */
+ if(sd->mcol && ELEM(from,PART_FROM_FACE,PART_FROM_VOLUME)) {
+ for(i=0; i<sd->totcol; i++) {
+ if(num != DMCACHE_NOTFOUND) {
+ MFace *mface = dm->getFaceData(dm, num, CD_MFACE);
+ MCol *mc = (MCol*)CustomData_get_layer_n(&dm->faceData, CD_MCOL, i);
+ mc += num * 4;
+
+ psys_interpolate_mcol(mc, mface->v4, fuv, sd->mcol + i);
+ }
+ else
+ memset(&sd->mcol[i], 0, sizeof(MCol));
+ }
}
}
static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem *psys, int timeoffset)
{
Object *ob= obr->ob;
- Object *tob=0, *bb_ob=re->scene->camera;
+ Object *tob=0;
Material *ma=0;
- MTFace *mtface;
ParticleSystemModifierData *psmd;
ParticleSystem *tpsys=0;
ParticleSettings *part, *tpart=0;
@@ -1464,19 +1442,20 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem
ParticleKey *states=0;
ParticleKey state;
ParticleCacheKey *cache=0;
+ ParticleBillboardData bb;
+ ParticleStrandData sd;
StrandBuffer *strandbuf=0;
StrandVert *svert=0;
StrandBound *sbound= 0;
StrandRen *strand=0;
RNG *rng= 0;
- MCol *mcol= 0;
float loc[3],loc1[3],loc0[3],vel[3],mat[4][4],nmat[3][3],co[3],nor[3],time;
- float *orco=0,*surfnor=0,*uvco=0, strandlen=0.0f, curlen=0.0f;
+ float strandlen=0.0f, curlen=0.0f;
float hasize, pa_size, pa_time, r_tilt, cfra=bsystem_time(re->scene, ob, (float)re->scene->r.cfra, 0.0);
- float adapt_angle=0.0, adapt_pix=0.0, random, simplify[2];
- int i, a, k, max_k=0, totpart, totuv=0, totcol=0, override_uv=-1, dosimplify = 0, dosurfacecache = 0;
- int path_possible=0, keys_possible=0, baked_keys=0, totchild=0;
- int seed, path_nbr=0, path=0, orco1=0, adapt=0, uv[3]={0,0,0}, num;
+ float random, simplify[2];
+ int i, a, k, max_k=0, totpart, dosimplify = 0, dosurfacecache = 0;
+ int totchild=0;
+ int seed, path_nbr=0, orco1=0, num;
int totface, *origindex = 0;
char **uv_name=0;
@@ -1503,6 +1482,7 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem
return 1;
}
+ /* last possibility to bail out! */
psmd= psys_get_modifier(ob,psys);
if(!(psmd->modifier.mode & eModifierMode_Render))
return 0;
@@ -1511,14 +1491,17 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem
totchild = (int)((float)totchild * (float)part->disp / 100.0f);
}
- psys->flag|=PSYS_DRAWING;
+ psys->flag |= PSYS_DRAWING;
rng= rng_new(psys->seed);
-
- ma= give_render_material(re, ob, part->omat);
- if(part->bb_ob)
- bb_ob=part->bb_ob;
+ totpart=psys->totpart;
+
+ memset(&sd, 0, sizeof(ParticleStrandData));
+ sd.override_uv = -1;
+
+/* 2.1 setup material stff */
+ ma= give_render_material(re, ob, part->omat);
#if 0 // XXX old animation system
if(ma->ipo){
@@ -1527,171 +1510,168 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem
}
#endif // XXX old animation system
+ hasize = ma->hasize;
+ seed = ma->seed1;
+
+ re->flag |= R_HALO;
+
RE_set_customdata_names(obr, &psmd->dm->faceData);
- totuv=CustomData_number_of_layers(&psmd->dm->faceData,CD_MTFACE);
- totcol=CustomData_number_of_layers(&psmd->dm->faceData,CD_MCOL);
+ sd.totuv = CustomData_number_of_layers(&psmd->dm->faceData, CD_MTFACE);
+ sd.totcol = CustomData_number_of_layers(&psmd->dm->faceData, CD_MCOL);
- if(ma->texco & TEXCO_UV && totuv) {
- uvco = MEM_callocN(totuv*2*sizeof(float),"particle_uvs");
+ if(ma->texco & TEXCO_UV && sd.totuv) {
+ sd.uvco = MEM_callocN(sd.totuv * 2 * sizeof(float), "particle_uvs");
if(ma->strand_uvname[0]) {
- override_uv= CustomData_get_named_layer_index(&psmd->dm->faceData,CD_MTFACE,ma->strand_uvname);
- override_uv-= CustomData_get_layer_index(&psmd->dm->faceData,CD_MTFACE);
+ sd.override_uv = CustomData_get_named_layer_index(&psmd->dm->faceData, CD_MTFACE, ma->strand_uvname);
+ sd.override_uv -= CustomData_get_layer_index(&psmd->dm->faceData, CD_MTFACE);
}
}
+ else
+ sd.uvco = NULL;
- if(totcol)
- mcol = MEM_callocN(totcol*sizeof(MCol),"particle_mcols");
+ if(sd.totcol)
+ sd.mcol = MEM_callocN(sd.totcol * sizeof(MCol), "particle_mcols");
- if(part->draw_as==PART_DRAW_BB){
- int first_uv=CustomData_get_layer_index(&psmd->dm->faceData,CD_MTFACE);
+/* 2.2 setup billboards */
+ if(part->draw_as == PART_DRAW_BB) {
+ int first_uv = CustomData_get_layer_index(&psmd->dm->faceData, CD_MTFACE);
- uv[0]=CustomData_get_named_layer_index(&psmd->dm->faceData,CD_MTFACE,psys->bb_uvname[0]);
- if(uv[0]<0)
- uv[0]=CustomData_get_active_layer_index(&psmd->dm->faceData,CD_MTFACE);
+ bb.uv[0] = CustomData_get_named_layer_index(&psmd->dm->faceData, CD_MTFACE, psys->bb_uvname[0]);
+ if(bb.uv[0] < 0)
+ bb.uv[0] = CustomData_get_active_layer_index(&psmd->dm->faceData, CD_MTFACE);
- uv[1]=CustomData_get_named_layer_index(&psmd->dm->faceData,CD_MTFACE,psys->bb_uvname[1]);
- //if(uv[1]<0)
- // uv[1]=CustomData_get_active_layer_index(&psmd->dm->faceData,CD_MTFACE);
+ bb.uv[1] = CustomData_get_named_layer_index(&psmd->dm->faceData, CD_MTFACE, psys->bb_uvname[1]);
- uv[2]=CustomData_get_named_layer_index(&psmd->dm->faceData,CD_MTFACE,psys->bb_uvname[2]);
- //if(uv[2]<0)
- // uv[2]=CustomData_get_active_layer_index(&psmd->dm->faceData,CD_MTFACE);
+ bb.uv[2] = CustomData_get_named_layer_index(&psmd->dm->faceData, CD_MTFACE, psys->bb_uvname[2]);
- if(first_uv>=0){
- uv[0]-=first_uv;
- uv[1]-=first_uv;
- uv[2]-=first_uv;
+ if(first_uv >= 0) {
+ bb.uv[0] -= first_uv;
+ bb.uv[1] -= first_uv;
+ bb.uv[2] -= first_uv;
}
+
+ bb.align = part->bb_align;
+ bb.anim = part->bb_anim;
+ bb.lock = part->draw & PART_DRAW_BB_LOCK;
+ bb.ob = (part->bb_ob ? part->bb_ob : re->scene->camera);
+ bb.offset[0] = part->bb_offset[0];
+ bb.offset[1] = part->bb_offset[1];
+ bb.split_offset = part->bb_split_offset;
+ bb.totnum = totpart+totchild;
+ bb.uv_split = part->bb_uv_split;
}
#if 0 // XXX old animation system
- if(part->flag&PART_ABS_TIME && part->ipo){
+/* 2.3 setup time */
+ if(part->flag&PART_ABS_TIME && part->ipo) {
calc_ipo(part->ipo, cfra);
execute_ipo((ID *)part, part->ipo);
}
#endif // XXX old animation system
- if(part->flag&PART_GLOB_TIME)
- cfra=bsystem_time(re->scene, 0, (float)re->scene->r.cfra, 0.0);
+ if(part->flag & PART_GLOB_TIME)
+ cfra = bsystem_time(re->scene, 0, (float)re->scene->r.cfra, 0.0);
- if(part->type==PART_REACTOR){
+/* 2.4 setup reactors */
+ if(part->type == PART_REACTOR){
psys_get_reactor_target(ob, psys, &tob, &tpsys);
if(tpsys && (part->from==PART_FROM_PARTICLE || part->phystype==PART_PHYS_NO)){
- psmd=psys_get_modifier(tob,tpsys);
- tpart=tpsys->part;
+ psmd = psys_get_modifier(tob,tpsys);
+ tpart = tpsys->part;
}
}
-
- hasize = ma->hasize;
- seed = ma->seed1;
-
- re->flag |= R_HALO;
+/* 2.5 setup matrices */
MTC_Mat4MulMat4(mat, ob->obmat, re->viewmat);
MTC_Mat4Invert(ob->imat, mat); /* need to be that way, for imat texture */
Mat3CpyMat4(nmat, ob->imat);
Mat3Transp(nmat);
- totpart=psys->totpart;
+/* 2.6 setup strand rendering */
+ if(part->draw_as == PART_DRAW_PATH && psys->pathcache){
+ path_nbr=(int)pow(2.0,(double) part->ren_step);
- if(psys->pathcache){
- path_possible=1;
- keys_possible=1;
- }
- if(part->draw_as==PART_DRAW_PATH){
- if(path_possible){
- path_nbr=(int)pow(2.0,(double) part->ren_step);
- //if(part->phystype==PART_PHYS_KEYED && (psys->flag&PSYS_BAKED)==0)
- // path_nbr*=psys->totkeyed;
-
- if(path_nbr) {
- if((ma->mode & (MA_HALO|MA_WIRE))==0) {
- orco= MEM_mallocN(3*sizeof(float)*(totpart+totchild), "particle orcos");
- set_object_orco(re, psys, orco);
- }
- path=1;
+ if(path_nbr) {
+ if((ma->material_type != MA_TYPE_HALO) && (ma->mode & MA_WIRE)==0) {
+ sd.orco = MEM_mallocN(3*sizeof(float)*(totpart+totchild), "particle orcos");
+ set_object_orco(re, psys, sd.orco);
}
+ }
- if(part->draw&PART_DRAW_REN_ADAPT) {
- adapt=1;
- adapt_pix=(float)part->adapt_pix;
- adapt_angle=cos((float)part->adapt_angle*(float)(M_PI/180.0));
- }
+ if(part->draw & PART_DRAW_REN_ADAPT) {
+ sd.adapt = 1;
+ sd.adapt_pix = (float)part->adapt_pix;
+ sd.adapt_angle = cos((float)part->adapt_angle * (float)(M_PI / 180.0));
+ }
- if(re->r.renderer==R_INTERN && part->draw&PART_DRAW_REN_STRAND) {
- strandbuf= RE_addStrandBuffer(obr, (totpart+totchild)*(path_nbr+1));
- strandbuf->ma= ma;
- strandbuf->lay= ob->lay;
- Mat4CpyMat4(strandbuf->winmat, re->winmat);
- strandbuf->winx= re->winx;
- strandbuf->winy= re->winy;
- strandbuf->maxdepth= 2;
- strandbuf->adaptcos= cos((float)part->adapt_angle*(float)(M_PI/180.0));
- strandbuf->overrideuv= override_uv;
- strandbuf->minwidth= ma->strand_min;
-
- if(ma->strand_widthfade == 0.0f)
- strandbuf->widthfade= 0.0f;
- else if(ma->strand_widthfade >= 1.0f)
- strandbuf->widthfade= 2.0f - ma->strand_widthfade;
- else
- strandbuf->widthfade= 1.0f/MAX2(ma->strand_widthfade, 1e-5f);
+ if(re->r.renderer==R_INTERN && part->draw&PART_DRAW_REN_STRAND) {
+ strandbuf= RE_addStrandBuffer(obr, (totpart+totchild)*(path_nbr+1));
+ strandbuf->ma= ma;
+ strandbuf->lay= ob->lay;
+ Mat4CpyMat4(strandbuf->winmat, re->winmat);
+ strandbuf->winx= re->winx;
+ strandbuf->winy= re->winy;
+ strandbuf->maxdepth= 2;
+ strandbuf->adaptcos= cos((float)part->adapt_angle*(float)(M_PI/180.0));
+ strandbuf->overrideuv= sd.override_uv;
+ strandbuf->minwidth= ma->strand_min;
+
+ if(ma->strand_widthfade == 0.0f)
+ strandbuf->widthfade= 0.0f;
+ else if(ma->strand_widthfade >= 1.0f)
+ strandbuf->widthfade= 2.0f - ma->strand_widthfade;
+ else
+ strandbuf->widthfade= 1.0f/MAX2(ma->strand_widthfade, 1e-5f);
- if(part->flag & PART_HAIR_BSPLINE)
- strandbuf->flag |= R_STRAND_BSPLINE;
- if(ma->mode & MA_STR_B_UNITS)
- strandbuf->flag |= R_STRAND_B_UNITS;
+ if(part->flag & PART_HAIR_BSPLINE)
+ strandbuf->flag |= R_STRAND_BSPLINE;
+ if(ma->mode & MA_STR_B_UNITS)
+ strandbuf->flag |= R_STRAND_B_UNITS;
- svert= strandbuf->vert;
+ svert= strandbuf->vert;
- if(re->r.mode & R_SPEED)
+ if(re->r.mode & R_SPEED)
+ dosurfacecache= 1;
+ else if((re->wrld.mode & WO_AMB_OCC) && (re->wrld.ao_gather_method == WO_AOGATHER_APPROX))
+ if(ma->amb != 0.0f)
dosurfacecache= 1;
- else if((re->wrld.mode & WO_AMB_OCC) && (re->wrld.ao_gather_method == WO_AOGATHER_APPROX))
- if(ma->amb != 0.0f)
- dosurfacecache= 1;
-
- totface= psmd->dm->getNumFaces(psmd->dm);
- origindex= psmd->dm->getFaceDataArray(psmd->dm, CD_ORIGINDEX);
- if(origindex) {
- for(a=0; a<totface; a++)
- strandbuf->totbound= MAX2(strandbuf->totbound, origindex[a]);
- strandbuf->totbound++;
- }
+
+ totface= psmd->dm->getNumFaces(psmd->dm);
+ origindex= psmd->dm->getFaceDataArray(psmd->dm, CD_ORIGINDEX);
+ if(origindex) {
+ for(a=0; a<totface; a++)
+ strandbuf->totbound= MAX2(strandbuf->totbound, origindex[a]);
strandbuf->totbound++;
- strandbuf->bound= MEM_callocN(sizeof(StrandBound)*strandbuf->totbound, "StrandBound");
- sbound= strandbuf->bound;
- sbound->start= sbound->end= 0;
}
+ strandbuf->totbound++;
+ strandbuf->bound= MEM_callocN(sizeof(StrandBound)*strandbuf->totbound, "StrandBound");
+ sbound= strandbuf->bound;
+ sbound->start= sbound->end= 0;
}
}
- else if(keys_possible && part->draw&PART_DRAW_KEYS){
- path_nbr=part->keys_step;
- if(path_nbr==0)
- baked_keys=1;
- }
- if(orco==0){
- orco=MEM_mallocN(3*sizeof(float),"particle orco");
- orco1=1;
+ if(sd.orco == 0) {
+ sd.orco = MEM_mallocN(3 * sizeof(float), "particle orco");
+ orco1 = 1;
}
- if(path_nbr==0)
- psys->lattice= psys_get_lattice(re->scene, ob, psys);
+ if(path_nbr == 0)
+ psys->lattice = psys_get_lattice(re->scene, ob, psys);
/* 3. start creating renderable things */
for(a=0,pa=pars; a<totpart+totchild; a++, pa++, seed++) {
random = rng_getFloat(rng);
-
+ /* setup per particle individual stuff */
if(a<totpart){
if(pa->flag & PARS_UNEXIST) continue;
pa_time=(cfra-pa->time)/pa->lifetime;
- if((part->flag&PART_ABS_TIME)==0){
+ if((part->flag&PART_ABS_TIME) == 0){
#if 0 // XXX old animation system
- if(ma->ipo){
+ if(ma->ipo) {
/* correction for lifetime */
- calc_ipo(ma->ipo, 100.0f*pa_time);
+ calc_ipo(ma->ipo, 100.0f * pa_time);
execute_ipo((ID *)ma, ma->ipo);
}
if(part->ipo){
@@ -1707,51 +1687,25 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem
/* get orco */
if(tpsys && (part->from==PART_FROM_PARTICLE || part->phystype==PART_PHYS_NO)){
tpa=tpsys->particles+pa->num;
- psys_particle_on_emitter(psmd,tpart->from,tpa->num,pa->num_dmcache,tpa->fuv,tpa->foffset,co,nor,0,0,orco,0);
+ psys_particle_on_emitter(psmd,tpart->from,tpa->num,pa->num_dmcache,tpa->fuv,tpa->foffset,co,nor,0,0,sd.orco,0);
}
else
- psys_particle_on_emitter(psmd,part->from,pa->num,pa->num_dmcache,pa->fuv,pa->foffset,co,nor,0,0,orco,0);
+ psys_particle_on_emitter(psmd,part->from,pa->num,pa->num_dmcache,pa->fuv,pa->foffset,co,nor,0,0,sd.orco,0);
+ /* get uvco & mcol */
num= pa->num_dmcache;
if(num == DMCACHE_NOTFOUND)
if(pa->num < psmd->dm->getNumFaces(psmd->dm))
num= pa->num;
- if(uvco && ELEM(part->from,PART_FROM_FACE,PART_FROM_VOLUME)){
- for(i=0; i<totuv; i++){
- if(num != DMCACHE_NOTFOUND) {
- MFace *mface=psmd->dm->getFaceData(psmd->dm,num,CD_MFACE);
- mtface=(MTFace*)CustomData_get_layer_n(&psmd->dm->faceData,CD_MTFACE,i);
- mtface+=num;
-
- psys_interpolate_uvs(mtface,mface->v4,pa->fuv,uvco+2*i);
- }
- else {
- uvco[2*i]= 0.0f;
- uvco[2*i + 1]= 0.0f;
- }
- }
- }
- if(mcol && ELEM(part->from,PART_FROM_FACE,PART_FROM_VOLUME)){
- for(i=0; i<totcol; i++){
- if(num != DMCACHE_NOTFOUND) {
- MFace *mface=psmd->dm->getFaceData(psmd->dm,num,CD_MFACE);
- MCol *mc=(MCol*)CustomData_get_layer_n(&psmd->dm->faceData,CD_MCOL,i);
- mc+=num*4;
-
- psys_interpolate_mcol(mc,mface->v4,pa->fuv,mcol+i);
- }
- else
- memset(&mcol[i], 0, sizeof(MCol));
- }
- }
+ get_particle_uvco_mcol(part->from, psmd->dm, pa->fuv, num, &sd);
- pa_size=pa->size;
+ pa_size = pa->size;
- r_tilt=1.0f+pa->r_ave[0];
+ r_tilt = 1.0f + pa->r_ave[0];
- if(path_nbr){
+ if(path_nbr) {
cache = psys->pathcache[a];
max_k = (int)cache->steps;
}
@@ -1760,125 +1714,69 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem
}
else {
ChildParticle *cpa= psys->child+a-totpart;
+
+ if(path_nbr) {
+ cache = psys->childcache[a-totpart];
+
+ if(cache->steps < 0)
+ continue;
+
+ max_k = (int)cache->steps;
+ }
- pa_time=psys_get_child_time(psys, cpa, cfra);
+ pa_time = psys_get_child_time(psys, cpa, cfra);
- if((part->flag&PART_ABS_TIME)==0){
+ if((part->flag & PART_ABS_TIME) == 0) {
#if 0 // XXX old animation system
if(ma->ipo){
/* correction for lifetime */
- calc_ipo(ma->ipo, 100.0f*pa_time);
+ calc_ipo(ma->ipo, 100.0f * pa_time);
execute_ipo((ID *)ma, ma->ipo);
}
- if(part->ipo){
+ if(part->ipo) {
/* correction for lifetime */
- calc_ipo(part->ipo, 100.0f*pa_time);
+ calc_ipo(part->ipo, 100.0f * pa_time);
execute_ipo((ID *)part, part->ipo);
}
#endif // XXX old animation system
}
- pa_size=psys_get_child_size(psys, cpa, cfra, &pa_time);
+ pa_size = psys_get_child_size(psys, cpa, cfra, &pa_time);
- r_tilt=2.0f*cpa->rand[2];
+ r_tilt = 2.0f * cpa->rand[2];
- num= cpa->num;
+ num = cpa->num;
/* get orco */
if(part->childtype == PART_CHILD_FACES) {
psys_particle_on_emitter(psmd,
PART_FROM_FACE, cpa->num,DMCACHE_ISCHILD,
- cpa->fuv,cpa->foffset,co,nor,0,0,orco,0);
+ cpa->fuv,cpa->foffset,co,nor,0,0,sd.orco,0);
}
else {
ParticleData *par = psys->particles + cpa->parent;
psys_particle_on_emitter(psmd, part->from,
par->num,DMCACHE_ISCHILD,par->fuv,
- par->foffset,co,nor,0,0,orco,0);
- }
-
- if(uvco){
- if(part->from!=PART_FROM_PARTICLE && part->childtype==PART_CHILD_FACES){
- for(i=0; i<totuv; i++){
- if(part->childtype==PART_CHILD_FACES){
- MFace *mface=psmd->dm->getFaceData(psmd->dm,cpa->num,CD_MFACE);
-
- mtface=(MTFace*)CustomData_get_layer_n(&psmd->dm->faceData,CD_MTFACE,i);
- mtface+=cpa->num;
-
- psys_interpolate_uvs(mtface,mface->v4,cpa->fuv,uvco+2*i);
- }
- else{
- uvco[2*i]=uvco[2*i+1]=0.0f;
- }
- }
- }
- else if(ELEM(part->from,PART_FROM_FACE,PART_FROM_VOLUME)){
- ParticleData *parent = psys->particles + cpa->parent;
- num= parent->num_dmcache;
-
- if(num == DMCACHE_NOTFOUND)
- if(parent->num < psmd->dm->getNumFaces(psmd->dm))
- num= parent->num;
-
- for(i=0; i<totuv; i++) {
- if(num != DMCACHE_NOTFOUND) {
- MFace *mface=psmd->dm->getFaceData(psmd->dm,num,CD_MFACE);
- mtface=(MTFace*)CustomData_get_layer_n(&psmd->dm->faceData,CD_MTFACE,i);
- mtface+=num;
- psys_interpolate_uvs(mtface,mface->v4,parent->fuv,uvco+2*i);
- }
- else {
- uvco[2*i]= 0.0f;
- uvco[2*i + 1]= 0.0f;
- }
- }
- }
+ par->foffset,co,nor,0,0,sd.orco,0);
}
- if(mcol){
- if(part->from!=PART_FROM_PARTICLE && part->childtype==PART_CHILD_FACES){
- for(i=0; i<totcol; i++){
- if(part->childtype==PART_CHILD_FACES){
- MFace *mface=psmd->dm->getFaceData(psmd->dm,cpa->num,CD_MFACE);
- MCol *mc=(MCol*)CustomData_get_layer_n(&psmd->dm->faceData,CD_MCOL,i);
- mc+=cpa->num*4;
-
- psys_interpolate_mcol(mc,mface->v4,cpa->fuv,mcol+i);
- }
- else
- memset(&mcol[i], 0, sizeof(MCol));
- }
- }
- else if(ELEM(part->from,PART_FROM_FACE,PART_FROM_VOLUME)){
- ParticleData *parent = psys->particles + cpa->parent;
- num= parent->num_dmcache;
-
- if(num == DMCACHE_NOTFOUND)
- if(parent->num < psmd->dm->getNumFaces(psmd->dm))
- num= parent->num;
-
- for(i=0; i<totcol; i++){
- if(num != DMCACHE_NOTFOUND) {
- MFace *mface=psmd->dm->getFaceData(psmd->dm,num,CD_MFACE);
- MCol *mc=(MCol*)CustomData_get_layer_n(&psmd->dm->faceData,CD_MCOL,i);
- mc+=num*4;
-
- psys_interpolate_mcol(mc,mface->v4,parent->fuv,mcol+i);
- }
- else
- memset(&mcol[i], 0, sizeof(MCol));
- }
- }
+ /* get uvco & mcol */
+ if(part->from!=PART_FROM_PARTICLE && part->childtype==PART_CHILD_FACES) {
+ get_particle_uvco_mcol(PART_FROM_FACE, psmd->dm, cpa->fuv, cpa->num, &sd);
}
+ else {
+ ParticleData *parent = psys->particles + cpa->parent;
+ num = parent->num_dmcache;
- dosimplify= psys_render_simplify_params(psys, cpa, simplify);
+ if(num == DMCACHE_NOTFOUND)
+ if(parent->num < psmd->dm->getNumFaces(psmd->dm))
+ num = parent->num;
- if(path_nbr && psys->childcache) {
- cache = psys->childcache[a-totpart];
- max_k = (int)cache->steps;
+ get_particle_uvco_mcol(part->from, psmd->dm, pa->fuv, num, &sd);
}
+ dosimplify = psys_render_simplify_params(psys, cpa, simplify);
+
if(strandbuf) {
if(origindex[cpa->num]+1 > sbound - strandbuf->bound) {
sbound= strandbuf->bound + origindex[cpa->num]+1;
@@ -1890,17 +1788,17 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem
/* surface normal shading setup */
if(ma->mode_l & MA_STR_SURFDIFF) {
Mat3MulVecfl(nmat, nor);
- surfnor= nor;
+ sd.surfnor= nor;
}
else
- surfnor= NULL;
+ sd.surfnor= NULL;
/* strand render setup */
if(strandbuf) {
strand= RE_findOrAddStrand(obr, obr->totstrand++);
strand->buffer= strandbuf;
strand->vert= svert;
- VECCOPY(strand->orco, orco);
+ VECCOPY(strand->orco, sd.orco);
if(dosimplify) {
float *ssimplify= RE_strandren_get_simplify(obr, strand, 1);
@@ -1908,9 +1806,9 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem
ssimplify[1]= simplify[1];
}
- if(surfnor) {
+ if(sd.surfnor) {
float *snor= RE_strandren_get_surfnor(obr, strand, 1);
- VECCOPY(snor, surfnor);
+ VECCOPY(snor, sd.surfnor);
}
if(dosurfacecache && num >= 0) {
@@ -1918,20 +1816,20 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem
*facenum= num;
}
- if(uvco) {
- for(i=0; i<totuv; i++) {
- if(i != override_uv) {
+ if(sd.uvco) {
+ for(i=0; i<sd.totuv; i++) {
+ if(i != sd.override_uv) {
float *uv= RE_strandren_get_uv(obr, strand, i, NULL, 1);
- uv[0]= uvco[2*i];
- uv[1]= uvco[2*i+1];
+ uv[0]= sd.uvco[2*i];
+ uv[1]= sd.uvco[2*i+1];
}
}
}
- if(mcol) {
- for(i=0; i<totcol; i++) {
+ if(sd.mcol) {
+ for(i=0; i<sd.totcol; i++) {
MCol *mc= RE_strandren_get_mcol(obr, strand, i, NULL, 1);
- *mc = mcol[i];
+ *mc = sd.mcol[i];
}
}
@@ -1947,11 +1845,10 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem
strandlen += VecLenf((cache+k-1)->co, (cache+k)->co);
}
- for(k=0; k<=path_nbr; k++){
- if(path_nbr){
+ if(path_nbr) {
+ /* render strands */
+ for(k=0; k<=path_nbr; k++){
if(k<=max_k){
- //bti->convert_bake_key(bsys,cache+k,0,(void*)&state);
- //copy_particle_key(&state,cache+k,0);
VECCOPY(state.co,(cache+k)->co);
VECCOPY(state.vel,(cache+k)->vel);
}
@@ -1961,65 +1858,95 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem
if(k > 0)
curlen += VecLenf((cache+k-1)->co, (cache+k)->co);
time= curlen/strandlen;
- }
- else{
- time=0.0f;
- state.time=cfra;
- if(psys_get_particle_state(re->scene, ob, psys, a, &state, 0)==0)
- continue;
+
+ VECCOPY(loc,state.co);
+ MTC_Mat4MulVecfl(re->viewmat,loc);
+
+ if(strandbuf) {
+ VECCOPY(svert->co, loc);
+ svert->strandco= -1.0f + 2.0f*time;
+ svert++;
+ strand->totvert++;
+ }
+ else{
+ sd.first = 0;
+ sd.time = time;
+ sd.size = hasize;
+
+ if(k==1){
+ sd.first = 1;
+ sd.time = 0.0f;
+ VECSUB(loc0,loc1,loc);
+ VECADD(loc0,loc1,loc0);
+ }
+
+ if(k)
+ render_new_particle(re, obr, psmd->dm, ma, &sd, loc, loc1, seed);
+
+ VECCOPY(loc1,loc);
+ }
}
+ }
+ else {
+ /* render normal particles */
+ time=0.0f;
+ state.time=cfra;
+ if(psys_get_particle_state(re->scene,ob,psys,a,&state,0)==0)
+ continue;
+
VECCOPY(loc,state.co);
if(part->draw_as!=PART_DRAW_BB)
MTC_Mat4MulVecfl(re->viewmat,loc);
- if(part->draw_as==PART_DRAW_LINE) {
- VECCOPY(vel,state.vel);
- //VECADD(vel,vel,state.co);
- MTC_Mat4Mul3Vecfl(re->viewmat,vel);
- //VECSUB(vel,vel,loc);
- Normalize(vel);
- if(part->draw & PART_DRAW_VEL_LENGTH)
- VecMulf(vel,VecLength(state.vel));
- VECADDFAC(loc0,loc,vel,-part->draw_line[0]);
- VECADDFAC(loc1,loc,vel,part->draw_line[1]);
-
- render_new_particle(re,obr,psmd->dm,ma,1,0,1,0.0f,loc0,loc1,
- orco,surfnor,totuv,uvco,totcol,mcol,hasize,seed,override_uv,0,0,0);
- }
- else if(part->draw_as==PART_DRAW_BB) {
- VECCOPY(vel,state.vel);
- //MTC_Mat4Mul3Vecfl(re->viewmat,vel);
- particle_billboard(re,obr,ma,bb_ob,loc,vel,pa_size,part->bb_tilt*(1.0f-part->bb_rand_tilt*r_tilt),
- part->bb_align,part->draw&PART_DRAW_BB_LOCK,
- a,totpart+totchild,part->bb_uv_split,part->bb_anim,part->bb_split_offset,random,pa_time,part->bb_offset,uv);
- }
- else if(strandbuf) {
- VECCOPY(svert->co, loc);
- svert->strandco= -1.0f + 2.0f*time;
- svert++;
- strand->totvert++;
- }
- else{
- if(k==1){
- VECSUB(loc0,loc1,loc);
- VECADD(loc0,loc1,loc0);
- render_new_particle(re,obr,psmd->dm,ma,path,1,0,0.0f,loc1,loc0,
- orco,surfnor,totuv,uvco,totcol,mcol,hasize,seed,override_uv,
- adapt,adapt_angle,adapt_pix);
- }
+ switch(part->draw_as) {
+ case PART_DRAW_LINE:
+ sd.line = 1;
+ sd.time = 0.0f;
+ sd.size = hasize;
+
+ VECCOPY(vel,state.vel);
+ MTC_Mat4Mul3Vecfl(re->viewmat,vel);
+ Normalize(vel);
- if(path_nbr==0 || k)
- render_new_particle(re,obr,psmd->dm,ma,path,0,0,time,loc,loc1,
- orco,surfnor,totuv,uvco,totcol,mcol,hasize,seed,override_uv,
- adapt,adapt_angle,adapt_pix);
+ if(part->draw & PART_DRAW_VEL_LENGTH)
+ VecMulf(vel,VecLength(state.vel));
- VECCOPY(loc1,loc);
+ VECADDFAC(loc0,loc,vel,-part->draw_line[0]);
+ VECADDFAC(loc1,loc,vel,part->draw_line[1]);
+
+ render_new_particle(re,obr,psmd->dm,ma,&sd,loc0,loc1,seed);
+
+ break;
+
+ case PART_DRAW_BB:
+ bb.random = random;
+ bb.size = pa_size;
+ bb.tilt = part->bb_tilt * (1.0f - part->bb_rand_tilt * r_tilt);
+ bb.time = pa_time;
+ bb.num = a;
+ VECCOPY(bb.vec, loc);
+ VECCOPY(bb.vel, state.vel);
+
+ particle_billboard(re, obr, ma, &bb);
+
+ break;
+
+ default:
+ {
+ HaloRen *har=0;
+
+ har = RE_inithalo_particle(re, obr, psmd->dm, ma, loc, NULL, sd.orco, sd.uvco, hasize, 0.0, seed);
+
+ if(har) har->lay= obr->ob->lay;
+
+ break;
+ }
}
}
if(orco1==0)
- orco+=3;
+ sd.orco+=3;
if(re->test_break(re->tbh))
break;
@@ -2034,13 +1961,13 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem
#endif // XXX old animation system
if(orco1)
- MEM_freeN(orco);
+ MEM_freeN(sd.orco);
- if(uvco)
- MEM_freeN(uvco);
+ if(sd.uvco)
+ MEM_freeN(sd.uvco);
- if(mcol)
- MEM_freeN(mcol);
+ if(sd.mcol)
+ MEM_freeN(sd.mcol);
if(uv_name)
MEM_freeN(uv_name);
@@ -2057,7 +1984,7 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem
psys->lattice= NULL;
}
- if(path && (ma->mode_l & MA_TANGENT_STR)==0)
+ if(path_nbr && (ma->mode_l & MA_TANGENT_STR)==0)
calc_vertexnormals(re, obr, 0, 0);
return 1;
@@ -3108,7 +3035,7 @@ static void init_render_mesh(Render *re, ObjectRen *obr, int timeoffset)
ma= give_render_material(re, ob, 1);
- if(ma->mode & MA_HALO) {
+ if(ma->material_type == MA_TYPE_HALO) {
make_render_halos(re, obr, me, totvert, mvert, ma, orco);
}
else {
@@ -4447,24 +4374,8 @@ void RE_Database_Free(Render *re)
static int allow_render_object(Object *ob, int nolamps, int onlyselected, Object *actob)
{
/* override not showing object when duplis are used with particles */
- if(ob->transflag & OB_DUPLIPARTS){
- int allow= 0;
-
- if(ob->particlesystem.first) {
- ParticleSystem *psys;
- ParticleSettings *part;
-
- for(psys=ob->particlesystem.first; psys; psys=psys->next){
- part=psys->part;
-
- if(part->draw & PART_DRAW_EMITTER)
- allow= 1;
- }
- }
-
- if(!allow)
- return 0;
- }
+ if(ob->transflag & OB_DUPLIPARTS)
+ ; /* let particle system(s) handle showing vs. not showing */
else if((ob->transflag & OB_DUPLI) && !(ob->transflag & OB_DUPLIFRAMES))
return 0;
@@ -4490,7 +4401,7 @@ static int allow_render_dupli_instance(Render *re, DupliObject *dob, Object *obd
if(totmaterial) {
for(a= 0; a<*totmaterial; a++) {
ma= give_current_material(obd, a);
- if(ma && (ma->mode & MA_HALO))
+ if(ma && (ma->material_type == MA_TYPE_HALO))
return 0;
}
}
diff --git a/source/blender/render/intern/source/raytrace.c b/source/blender/render/intern/source/raytrace.c
index ec47df74d04..09d3711885a 100644
--- a/source/blender/render/intern/source/raytrace.c
+++ b/source/blender/render/intern/source/raytrace.c
@@ -1,5 +1,5 @@
/**
- * $Id: $
+ * $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
*
diff --git a/source/blender/render/intern/source/rendercore.c b/source/blender/render/intern/source/rendercore.c
index deb6f0db743..27dd43a4ef9 100644
--- a/source/blender/render/intern/source/rendercore.c
+++ b/source/blender/render/intern/source/rendercore.c
@@ -703,7 +703,7 @@ static void atm_tile(RenderPart *pa, RenderLayer *rl)
for(sample=0; sample<totsample; sample++) {
float *zrect= RE_RenderLayerGetPass(rlpp[sample], SCE_PASS_Z) + od;
float *rgbrect = rlpp[sample]->rectf + 4*od;
- float rgb[3];
+ float rgb[3] = {0};
int done= 0;
for(go=R.lights.first; go; go= go->next) {
diff --git a/source/blender/render/intern/source/renderdatabase.c b/source/blender/render/intern/source/renderdatabase.c
index d44b49cc706..621831fb341 100644
--- a/source/blender/render/intern/source/renderdatabase.c
+++ b/source/blender/render/intern/source/renderdatabase.c
@@ -1032,9 +1032,11 @@ HaloRen *RE_inithalo(Render *re, ObjectRen *obr, Material *ma, float *vec, f
har->g= (yn*tg+ zn*ma->g);
har->b= (yn*tb+ zn*ma->b);
}
- if(mtex->texco & 16) {
+ if(mtex->texco & TEXCO_UV) {
har->alfa= tin;
}
+ if(mtex->mapto & MAP_ALPHA)
+ har->alfa= tin;
}
}
diff --git a/source/blender/windowmanager/CMakeLists.txt b/source/blender/windowmanager/CMakeLists.txt
index f9dd6a19fb7..088bdc99687 100644
--- a/source/blender/windowmanager/CMakeLists.txt
+++ b/source/blender/windowmanager/CMakeLists.txt
@@ -30,7 +30,7 @@ SET(INC .
../editors/include
../../../intern/guardedalloc ../../../intern/memutil
../blenlib ../makesdna ../makesrna ../blenkernel
- ../include ../../../intern/bmfont ../imbuf ../render/extern/include
+ ../include ../imbuf ../render/extern/include
../../../intern/bsp/extern ../radiosity/extern/include
../../../intern/decimation/extern ../blenloader
../../kernel/gen_system ../../../intern/SoundSystem ../readstreamglue
@@ -43,9 +43,7 @@ SET(INC .
)
IF(WITH_INTERNATIONAL)
- SET(INC ${INC} ../ftfont)
ADD_DEFINITIONS(-DINTERNATIONAL)
- ADD_DEFINITIONS(-DFTGL_STATIC_LIBRARY)
ENDIF(WITH_INTERNATIONAL)
IF(WITH_OPENEXR)
diff --git a/source/blender/windowmanager/SConscript b/source/blender/windowmanager/SConscript
index 862235d7b4b..91635904524 100644
--- a/source/blender/windowmanager/SConscript
+++ b/source/blender/windowmanager/SConscript
@@ -8,10 +8,10 @@ sources = env.Glob('intern/*.c')
incs = '. ../editors/include ../python ../makesdna ../blenlib ../blenkernel'
incs += ' ../nodes ../imbuf ../blenloader ../render/extern/include'
-incs += ' ../ftfont ../radiosity/extern/include ../../kernel/gen_system'
+incs += ' ../radiosity/extern/include ../../kernel/gen_system'
incs += ' ../makesrna ../gpu ../blenfont'
-incs += ' #/intern/guardedalloc #/intern/memutil #/intern/ghost #/intern/bmfont'
+incs += ' #/intern/guardedalloc #/intern/memutil #/intern/ghost'
incs += ' #/intern/elbeem #/extern/glew/include'
defs = []
diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h
index 5a059b72e27..1b5b2e0acbc 100644
--- a/source/blender/windowmanager/WM_api.h
+++ b/source/blender/windowmanager/WM_api.h
@@ -92,7 +92,7 @@ struct wmEventHandler *WM_event_add_keymap_handler_priority(ListBase *handlers,
void WM_event_remove_keymap_handler(ListBase *handlers, ListBase *keymap);
-struct wmEventHandler *WM_event_add_ui_handler(struct bContext *C, ListBase *handlers,
+struct wmEventHandler *WM_event_add_ui_handler(const struct bContext *C, ListBase *handlers,
int (*func)(struct bContext *C, struct wmEvent *event, void *userdata),
void (*remove)(struct bContext *C, void *userdata), void *userdata);
void WM_event_remove_ui_handler(ListBase *handlers,
@@ -123,6 +123,9 @@ int WM_operator_confirm (struct bContext *C, struct wmOperator *op, struct wm
int WM_operator_filesel (struct bContext *C, struct wmOperator *op, struct wmEvent *event);
/* poll callback, context checks */
int WM_operator_winactive (struct bContext *C);
+ /* invoke callback, exec + redo popup */
+int WM_operator_redo (struct bContext *C, struct wmOperator *op, struct wmEvent *event);
+int WM_operator_redo_popup (struct bContext *C, struct wmOperator *op);
/* operator api */
void WM_operator_free (struct wmOperator *op);
@@ -180,6 +183,8 @@ void wmMultMatrix (float mat[][4]);
void wmGetSingleMatrix (float mat[][4]);
void wmScale (float x, float y, float z);
void wmLoadIdentity (void); /* note: old name clear_view_mat */
+void wmPushMatrix (void); /* one level only */
+void wmPopMatrix (void); /* one level only */
void wmFrustum (float x1, float x2, float y1, float y2, float n, float f);
void wmOrtho (float x1, float x2, float y1, float y2, float n, float f);
diff --git a/source/blender/windowmanager/intern/Makefile b/source/blender/windowmanager/intern/Makefile
index 0bf161e3250..80ae58f9398 100644
--- a/source/blender/windowmanager/intern/Makefile
+++ b/source/blender/windowmanager/intern/Makefile
@@ -43,7 +43,6 @@ CPPFLAGS += -I$(NAN_PYTHON)/include/python$(NAN_PYTHON_VERSION)
# PreProcessor stuff
CPPFLAGS += -I$(NAN_GHOST)/include
-CPPFLAGS += -I$(NAN_BMFONT)/include
CPPFLAGS += -I$(NAN_ELBEEM)/include
CPPFLAGS += -I$(NAN_SOUNDSYSTEM)/include $(NAN_SDLCFLAGS)
@@ -59,7 +58,6 @@ CPPFLAGS += -I../../imbuf
CPPFLAGS += -I../../blenloader
CPPFLAGS += -I../../gpu
CPPFLAGS += -I../../render/extern/include
-CPPFLAGS += -I../../ftfont
CPPFLAGS += -I../../radiosity/extern/include
CPPFLAGS += -I../../../kernel/gen_system
CPPFLAGS += -I../../blenfont
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c
index 283f0819996..e142a5f9640 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -1196,7 +1196,7 @@ void WM_event_remove_keymap_handler(ListBase *handlers, ListBase *keymap)
}
}
-wmEventHandler *WM_event_add_ui_handler(bContext *C, ListBase *handlers, wmUIHandlerFunc func, wmUIHandlerRemoveFunc remove, void *userdata)
+wmEventHandler *WM_event_add_ui_handler(const bContext *C, ListBase *handlers, wmUIHandlerFunc func, wmUIHandlerRemoveFunc remove, void *userdata)
{
wmEventHandler *handler= MEM_callocN(sizeof(wmEventHandler), "event ui handler");
handler->ui_handle= func;
diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c
index 1f9c335485d..6bd5b9e0c6c 100644
--- a/source/blender/windowmanager/intern/wm_files.c
+++ b/source/blender/windowmanager/intern/wm_files.c
@@ -78,6 +78,7 @@
#include "RNA_define.h"
#include "ED_datafiles.h"
+#include "ED_object.h"
#include "ED_screen.h"
#include "ED_util.h"
@@ -94,405 +95,6 @@
#include "wm.h"
#include "wm_window.h"
-/***/
-
-/* define for setting colors in theme below */
-#define SETCOL(col, r, g, b, a) {col[0]=r; col[1]=g; col[2]= b; col[3]= a;}
-
-/* patching UserDef struct and Themes */
-static void init_userdef_themes(void)
-{
-// countall();
-
- /* the UserDef struct is not corrected with do_versions() .... ugh! */
- if(U.wheellinescroll == 0) U.wheellinescroll = 3;
- if(U.menuthreshold1==0) {
- U.menuthreshold1= 5;
- U.menuthreshold2= 2;
- }
- if(U.tb_leftmouse==0) {
- U.tb_leftmouse= 5;
- U.tb_rightmouse= 5;
- }
- if(U.mixbufsize==0) U.mixbufsize= 2048;
- if (BLI_streq(U.tempdir, "/")) {
- char *tmp= getenv("TEMP");
-
- strcpy(U.tempdir, tmp?tmp:"/tmp/");
- }
- if (U.savetime <= 0) {
- U.savetime = 1;
-// XXX error(".B.blend is buggy, please consider removing it.\n");
- }
- /* transform widget settings */
- if(U.tw_hotspot==0) {
- U.tw_hotspot= 14;
- U.tw_size= 20; // percentage of window size
- U.tw_handlesize= 16; // percentage of widget radius
- }
- if(U.pad_rot_angle==0)
- U.pad_rot_angle= 15;
-
- if(U.flag & USER_CUSTOM_RANGE)
- vDM_ColorBand_store(&U.coba_weight); /* signal for derivedmesh to use colorband */
-
- if (G.main->versionfile <= 191) {
- strcpy(U.plugtexdir, U.textudir);
- strcpy(U.sounddir, "/");
- }
-
- /* patch to set Dupli Armature */
- if (G.main->versionfile < 220) {
- U.dupflag |= USER_DUP_ARM;
- }
-
- /* userdef new option */
- if (G.main->versionfile <= 222) {
- U.vrmlflag= USER_VRML_LAYERS;
- }
-
- /* added seam, normal color, undo */
- if (G.main->versionfile <= 234) {
- bTheme *btheme;
-
- U.uiflag |= USER_GLOBALUNDO;
- if (U.undosteps==0) U.undosteps=32;
-
- for(btheme= U.themes.first; btheme; btheme= btheme->next) {
- /* check for alpha==0 is safe, then color was never set */
- if(btheme->tv3d.edge_seam[3]==0) {
- SETCOL(btheme->tv3d.edge_seam, 230, 150, 50, 255);
- }
- if(btheme->tv3d.normal[3]==0) {
- SETCOL(btheme->tv3d.normal, 0x22, 0xDD, 0xDD, 255);
- }
- if(btheme->tv3d.face_dot[3]==0) {
- SETCOL(btheme->tv3d.face_dot, 255, 138, 48, 255);
- btheme->tv3d.facedot_size= 4;
- }
- }
- }
- if (G.main->versionfile <= 235) {
- /* illegal combo... */
- if (U.flag & USER_LMOUSESELECT)
- U.flag &= ~USER_TWOBUTTONMOUSE;
- }
- if (G.main->versionfile <= 236) {
- bTheme *btheme;
- /* new space type */
- for(btheme= U.themes.first; btheme; btheme= btheme->next) {
- /* check for alpha==0 is safe, then color was never set */
- if(btheme->ttime.back[3]==0) {
- btheme->ttime = btheme->tsnd; // copy from sound
- }
- if(btheme->text.syntaxn[3]==0) {
- SETCOL(btheme->text.syntaxn, 0, 0, 200, 255); /* Numbers Blue*/
- SETCOL(btheme->text.syntaxl, 100, 0, 0, 255); /* Strings red */
- SETCOL(btheme->text.syntaxc, 0, 100, 50, 255); /* Comments greenish */
- SETCOL(btheme->text.syntaxv, 95, 95, 0, 255); /* Special */
- SETCOL(btheme->text.syntaxb, 128, 0, 80, 255); /* Builtin, red-purple */
- }
- }
- }
- if (G.main->versionfile <= 237) {
- bTheme *btheme;
- /* bone colors */
- for(btheme= U.themes.first; btheme; btheme= btheme->next) {
- /* check for alpha==0 is safe, then color was never set */
- if(btheme->tv3d.bone_solid[3]==0) {
- SETCOL(btheme->tv3d.bone_solid, 200, 200, 200, 255);
- SETCOL(btheme->tv3d.bone_pose, 80, 200, 255, 80);
- }
- }
- }
- if (G.main->versionfile <= 238) {
- bTheme *btheme;
- /* bone colors */
- for(btheme= U.themes.first; btheme; btheme= btheme->next) {
- /* check for alpha==0 is safe, then color was never set */
- if(btheme->tnla.strip[3]==0) {
- SETCOL(btheme->tnla.strip_select, 0xff, 0xff, 0xaa, 255);
- SETCOL(btheme->tnla.strip, 0xe4, 0x9c, 0xc6, 255);
- }
- }
- }
- if (G.main->versionfile <= 239) {
- bTheme *btheme;
-
- for(btheme= U.themes.first; btheme; btheme= btheme->next) {
- /* Lamp theme, check for alpha==0 is safe, then color was never set */
- if(btheme->tv3d.lamp[3]==0) {
- SETCOL(btheme->tv3d.lamp, 0, 0, 0, 40);
-/* TEMPORAL, remove me! (ton) */
- U.uiflag |= USER_PLAINMENUS;
- }
-
- /* check for text field selection highlight, set it to text editor highlight by default */
- if(btheme->tui.textfield_hi[3]==0) {
- SETCOL(btheme->tui.textfield_hi,
- btheme->text.shade2[0],
- btheme->text.shade2[1],
- btheme->text.shade2[2],
- 255);
- }
- }
- if(U.obcenter_dia==0) U.obcenter_dia= 6;
- }
- if (G.main->versionfile <= 241) {
- bTheme *btheme;
- for(btheme= U.themes.first; btheme; btheme= btheme->next) {
- /* Node editor theme, check for alpha==0 is safe, then color was never set */
- if(btheme->tnode.syntaxn[3]==0) {
- /* re-uses syntax color storage */
- btheme->tnode= btheme->tv3d;
- SETCOL(btheme->tnode.edge_select, 255, 255, 255, 255);
- SETCOL(btheme->tnode.syntaxl, 150, 150, 150, 255); /* TH_NODE, backdrop */
- SETCOL(btheme->tnode.syntaxn, 129, 131, 144, 255); /* in/output */
- SETCOL(btheme->tnode.syntaxb, 127,127,127, 255); /* operator */
- SETCOL(btheme->tnode.syntaxv, 142, 138, 145, 255); /* generator */
- SETCOL(btheme->tnode.syntaxc, 120, 145, 120, 255); /* group */
- }
- /* Group theme colors */
- if(btheme->tv3d.group[3]==0) {
- SETCOL(btheme->tv3d.group, 0x10, 0x40, 0x10, 255);
- SETCOL(btheme->tv3d.group_active, 0x66, 0xFF, 0x66, 255);
- }
- /* Sequence editor theme*/
- if(btheme->tseq.movie[3]==0) {
- SETCOL(btheme->tseq.movie, 81, 105, 135, 255);
- SETCOL(btheme->tseq.image, 109, 88, 129, 255);
- SETCOL(btheme->tseq.scene, 78, 152, 62, 255);
- SETCOL(btheme->tseq.audio, 46, 143, 143, 255);
- SETCOL(btheme->tseq.effect, 169, 84, 124, 255);
- SETCOL(btheme->tseq.plugin, 126, 126, 80, 255);
- SETCOL(btheme->tseq.transition, 162, 95, 111, 255);
- SETCOL(btheme->tseq.meta, 109, 145, 131, 255);
- }
- if(!(btheme->tui.iconfile)) {
- BLI_strncpy(btheme->tui.iconfile, "", sizeof(btheme->tui.iconfile));
- }
- }
-
- /* set defaults for 3D View rotating axis indicator */
- /* since size can't be set to 0, this indicates it's not saved in .B.blend */
- if (U.rvisize == 0) {
- U.rvisize = 15;
- U.rvibright = 8;
- U.uiflag |= USER_SHOW_ROTVIEWICON;
- }
-
- }
- if (G.main->versionfile <= 242) {
- bTheme *btheme;
-
- for(btheme= U.themes.first; btheme; btheme= btheme->next) {
- /* long keyframe color */
- /* check for alpha==0 is safe, then color was never set */
- if(btheme->tact.strip[3]==0) {
- SETCOL(btheme->tv3d.edge_sharp, 255, 32, 32, 255);
- SETCOL(btheme->tact.strip_select, 0xff, 0xff, 0xaa, 204);
- SETCOL(btheme->tact.strip, 0xe4, 0x9c, 0xc6, 204);
- }
-
- /* IPO-Editor - Vertex Size*/
- if(btheme->tipo.vertex_size == 0) {
- btheme->tipo.vertex_size= 3;
- }
- }
- }
- if (G.main->versionfile <= 243) {
- /* set default number of recently-used files (if not set) */
- if (U.recent_files == 0) U.recent_files = 10;
- }
- if (G.main->versionfile < 245 || (G.main->versionfile == 245 && G.main->subversionfile < 3)) {
- bTheme *btheme;
- for(btheme= U.themes.first; btheme; btheme= btheme->next) {
- SETCOL(btheme->tv3d.editmesh_active, 255, 255, 255, 128);
- }
- if(U.coba_weight.tot==0)
- init_colorband(&U.coba_weight, 1);
- }
- if ((G.main->versionfile < 245) || (G.main->versionfile == 245 && G.main->subversionfile < 11)) {
- bTheme *btheme;
- for (btheme= U.themes.first; btheme; btheme= btheme->next) {
- /* these should all use the same colour */
- SETCOL(btheme->tv3d.cframe, 0x60, 0xc0, 0x40, 255);
- SETCOL(btheme->tipo.cframe, 0x60, 0xc0, 0x40, 255);
- SETCOL(btheme->tact.cframe, 0x60, 0xc0, 0x40, 255);
- SETCOL(btheme->tnla.cframe, 0x60, 0xc0, 0x40, 255);
- SETCOL(btheme->tseq.cframe, 0x60, 0xc0, 0x40, 255);
- SETCOL(btheme->tsnd.cframe, 0x60, 0xc0, 0x40, 255);
- SETCOL(btheme->ttime.cframe, 0x60, 0xc0, 0x40, 255);
- }
- }
- if ((G.main->versionfile < 245) || (G.main->versionfile == 245 && G.main->subversionfile < 11)) {
- bTheme *btheme;
- for (btheme= U.themes.first; btheme; btheme= btheme->next) {
- /* these should all use the same color */
- SETCOL(btheme->tv3d.cframe, 0x60, 0xc0, 0x40, 255);
- SETCOL(btheme->tipo.cframe, 0x60, 0xc0, 0x40, 255);
- SETCOL(btheme->tact.cframe, 0x60, 0xc0, 0x40, 255);
- SETCOL(btheme->tnla.cframe, 0x60, 0xc0, 0x40, 255);
- SETCOL(btheme->tseq.cframe, 0x60, 0xc0, 0x40, 255);
- SETCOL(btheme->tsnd.cframe, 0x60, 0xc0, 0x40, 255);
- SETCOL(btheme->ttime.cframe, 0x60, 0xc0, 0x40, 255);
- }
- }
- if ((G.main->versionfile < 245) || (G.main->versionfile == 245 && G.main->subversionfile < 13)) {
- bTheme *btheme;
- for (btheme= U.themes.first; btheme; btheme= btheme->next) {
- /* action channel groups (recolor anyway) */
- SETCOL(btheme->tact.group, 0x39, 0x7d, 0x1b, 255);
- SETCOL(btheme->tact.group_active, 0x7d, 0xe9, 0x60, 255);
-
- /* bone custom-color sets */
- // FIXME: this check for initialised colors is bad
- if (btheme->tarm[0].solid[3] == 0) {
- /* set 1 */
- SETCOL(btheme->tarm[0].solid, 0x9a, 0x00, 0x00, 255);
- SETCOL(btheme->tarm[0].select, 0xbd, 0x11, 0x11, 255);
- SETCOL(btheme->tarm[0].active, 0xf7, 0x0a, 0x0a, 255);
- /* set 2 */
- SETCOL(btheme->tarm[1].solid, 0xf7, 0x40, 0x18, 255);
- SETCOL(btheme->tarm[1].select, 0xf6, 0x69, 0x13, 255);
- SETCOL(btheme->tarm[1].active, 0xfa, 0x99, 0x00, 255);
- /* set 3 */
- SETCOL(btheme->tarm[2].solid, 0x1e, 0x91, 0x09, 255);
- SETCOL(btheme->tarm[2].select, 0x59, 0xb7, 0x0b, 255);
- SETCOL(btheme->tarm[2].active, 0x83, 0xef, 0x1d, 255);
- /* set 4 */
- SETCOL(btheme->tarm[3].solid, 0x0a, 0x36, 0x94, 255);
- SETCOL(btheme->tarm[3].select, 0x36, 0x67, 0xdf, 255);
- SETCOL(btheme->tarm[3].active, 0x5e, 0xc1, 0xef, 255);
- /* set 5 */
- SETCOL(btheme->tarm[4].solid, 0xa9, 0x29, 0x4e, 255);
- SETCOL(btheme->tarm[4].select, 0xc1, 0x41, 0x6a, 255);
- SETCOL(btheme->tarm[4].active, 0xf0, 0x5d, 0x91, 255);
- /* set 6 */
- SETCOL(btheme->tarm[5].solid, 0x43, 0x0c, 0x78, 255);
- SETCOL(btheme->tarm[5].select, 0x54, 0x3a, 0xa3, 255);
- SETCOL(btheme->tarm[5].active, 0x87, 0x64, 0xd5, 255);
- /* set 7 */
- SETCOL(btheme->tarm[6].solid, 0x24, 0x78, 0x5a, 255);
- SETCOL(btheme->tarm[6].select, 0x3c, 0x95, 0x79, 255);
- SETCOL(btheme->tarm[6].active, 0x6f, 0xb6, 0xab, 255);
- /* set 8 */
- SETCOL(btheme->tarm[7].solid, 0x4b, 0x70, 0x7c, 255);
- SETCOL(btheme->tarm[7].select, 0x6a, 0x86, 0x91, 255);
- SETCOL(btheme->tarm[7].active, 0x9b, 0xc2, 0xcd, 255);
- /* set 9 */
- SETCOL(btheme->tarm[8].solid, 0xf4, 0xc9, 0x0c, 255);
- SETCOL(btheme->tarm[8].select, 0xee, 0xc2, 0x36, 255);
- SETCOL(btheme->tarm[8].active, 0xf3, 0xff, 0x00, 255);
- /* set 10 */
- SETCOL(btheme->tarm[9].solid, 0x1e, 0x20, 0x24, 255);
- SETCOL(btheme->tarm[9].select, 0x48, 0x4c, 0x56, 255);
- SETCOL(btheme->tarm[9].active, 0xff, 0xff, 0xff, 255);
- /* set 11 */
- SETCOL(btheme->tarm[10].solid, 0x6f, 0x2f, 0x6a, 255);
- SETCOL(btheme->tarm[10].select, 0x98, 0x45, 0xbe, 255);
- SETCOL(btheme->tarm[10].active, 0xd3, 0x30, 0xd6, 255);
- /* set 12 */
- SETCOL(btheme->tarm[11].solid, 0x6c, 0x8e, 0x22, 255);
- SETCOL(btheme->tarm[11].select, 0x7f, 0xb0, 0x22, 255);
- SETCOL(btheme->tarm[11].active, 0xbb, 0xef, 0x5b, 255);
- /* set 13 */
- SETCOL(btheme->tarm[12].solid, 0x8d, 0x8d, 0x8d, 255);
- SETCOL(btheme->tarm[12].select, 0xb0, 0xb0, 0xb0, 255);
- SETCOL(btheme->tarm[12].active, 0xde, 0xde, 0xde, 255);
- /* set 14 */
- SETCOL(btheme->tarm[13].solid, 0x83, 0x43, 0x26, 255);
- SETCOL(btheme->tarm[13].select, 0x8b, 0x58, 0x11, 255);
- SETCOL(btheme->tarm[13].active, 0xbd, 0x6a, 0x11, 255);
- /* set 15 */
- SETCOL(btheme->tarm[14].solid, 0x08, 0x31, 0x0e, 255);
- SETCOL(btheme->tarm[14].select, 0x1c, 0x43, 0x0b, 255);
- SETCOL(btheme->tarm[14].active, 0x34, 0x62, 0x2b, 255);
- }
- }
- }
- if ((G.main->versionfile < 245) || (G.main->versionfile == 245 && G.main->subversionfile < 16)) {
- U.flag |= USER_ADD_VIEWALIGNED|USER_ADD_EDITMODE;
- }
- if ((G.main->versionfile < 247) || (G.main->versionfile == 247 && G.main->subversionfile <= 2)) {
- bTheme *btheme;
-
- /* adjust themes */
- for (btheme= U.themes.first; btheme; btheme= btheme->next) {
- char *col;
-
- /* IPO Editor: Handles/Vertices */
- col = btheme->tipo.vertex;
- SETCOL(btheme->tipo.handle_vertex, col[0], col[1], col[2], 255);
- col = btheme->tipo.vertex_select;
- SETCOL(btheme->tipo.handle_vertex_select, col[0], col[1], col[2], 255);
- btheme->tipo.handle_vertex_size= btheme->tipo.vertex_size;
-
- /* Sequence/Image Editor: colors for GPencil text */
- col = btheme->tv3d.bone_pose;
- SETCOL(btheme->tseq.bone_pose, col[0], col[1], col[2], 255);
- SETCOL(btheme->tima.bone_pose, col[0], col[1], col[2], 255);
- col = btheme->tv3d.vertex_select;
- SETCOL(btheme->tseq.vertex_select, col[0], col[1], col[2], 255);
- }
- }
- if (G.main->versionfile < 250) {
- bTheme *btheme;
-
- for(btheme= U.themes.first; btheme; btheme= btheme->next) {
- /* this was not properly initialized in 2.45 */
- if(btheme->tima.face_dot[3]==0) {
- SETCOL(btheme->tima.editmesh_active, 255, 255, 255, 128);
- SETCOL(btheme->tima.face_dot, 255, 133, 0, 255);
- btheme->tima.facedot_size= 2;
- }
-
- /* DopeSheet - (Object) Channel color */
- SETCOL(btheme->tact.ds_channel, 82, 96, 110, 255);
- SETCOL(btheme->tact.ds_subchannel, 124, 137, 150, 255);
- /* DopeSheet - Group Channel color (saner version) */
- SETCOL(btheme->tact.group, 79, 101, 73, 255);
- SETCOL(btheme->tact.group_active, 135, 177, 125, 255);
-
- /* Graph Editor - (Object) Channel color */
- SETCOL(btheme->tipo.ds_channel, 82, 96, 110, 255);
- SETCOL(btheme->tipo.ds_subchannel, 124, 137, 150, 255);
- /* Graph Editor - Group Channel color */
- SETCOL(btheme->tipo.group, 79, 101, 73, 255);
- SETCOL(btheme->tipo.group_active, 135, 177, 125, 255);
- }
-
- /* adjust grease-pencil distances */
- U.gp_manhattendist= 1;
- U.gp_euclideandist= 2;
-
- /* adjust default interpolation for new IPO-curves */
- U.ipo_new= BEZT_IPO_BEZ;
- }
-
- /* GL Texture Garbage Collection (variable abused above!) */
- if (U.textimeout == 0) {
- U.texcollectrate = 60;
- U.textimeout = 120;
- }
- if (U.memcachelimit <= 0) {
- U.memcachelimit = 32;
- }
- if (U.frameserverport == 0) {
- U.frameserverport = 8080;
- }
-
- MEM_CacheLimiter_set_maximum(U.memcachelimit * 1024 * 1024);
-
- // sets themes, fonts, .. from userdef
- UI_init_userdef();
-
- /* funny name, but it is GE stuff, moves userdef stuff to engine */
-// XXX space_set_commmandline_options();
- /* this timer uses U */
-// XXX reset_autosave();
-
-}
/* To be able to read files without windows closing, opening, moving
we try to prepare for worst case:
@@ -603,6 +205,12 @@ static void wm_window_match_do(bContext *C, ListBase *oldwmlist)
win->eventstate= oldwin->eventstate;
oldwin->eventstate= NULL;
+
+ /* ensure proper screen rescaling */
+ win->sizex= oldwin->sizex;
+ win->sizey= oldwin->sizey;
+ win->posx= oldwin->posx;
+ win->posy= oldwin->posy;
}
}
}
@@ -611,6 +219,14 @@ static void wm_window_match_do(bContext *C, ListBase *oldwmlist)
}
}
+/* in case UserDef was read, we re-initialize all, and do versioning */
+static void wm_init_userdef()
+{
+ UI_init_userdef();
+ MEM_CacheLimiter_set_maximum(U.memcachelimit * 1024 * 1024);
+
+}
+
void WM_read_file(bContext *C, char *name, ReportList *reports)
{
int retval;
@@ -638,7 +254,7 @@ void WM_read_file(bContext *C, char *name, ReportList *reports)
// XXX mainwindow_set_filename_to_title(G.main->name);
// XXX sound_initialize_sounds();
- if(retval==2) init_userdef_themes(); // in case a userdef is read from regular .blend
+ if(retval==2) wm_init_userdef(); // in case a userdef is read from regular .blend
if (retval!=0) G.relbase_valid = 1;
@@ -662,6 +278,7 @@ void WM_read_file(bContext *C, char *name, ReportList *reports)
/* called on startup, (context entirely filled with NULLs) */
/* or called for 'Erase All' */
+/* op can be NULL */
int WM_read_homefile(bContext *C, wmOperator *op)
{
ListBase wmbase;
@@ -675,7 +292,11 @@ int WM_read_homefile(bContext *C, wmOperator *op)
free_ttfont(); /* still weird... what does it here? */
G.relbase_valid = 0;
- if (!from_memory) BLI_make_file_string(G.sce, tstr, home, ".B.blend");
+ if (!from_memory) {
+ BLI_make_file_string(G.sce, tstr, home, ".B25.blend");
+ if(!BLI_exists(tstr))
+ BLI_make_file_string(G.sce, tstr, home, ".B.blend");
+ }
strcpy(scestr, G.sce); /* temporary store */
/* prevent loading no UI */
@@ -696,7 +317,7 @@ int WM_read_homefile(bContext *C, wmOperator *op)
strcpy(G.sce, scestr); /* restore */
- init_userdef_themes();
+ wm_init_userdef();
/* When loading factory settings, the reset solid OpenGL lights need to be applied. */
GPU_default_lights();
@@ -949,16 +570,16 @@ void WM_write_file(bContext *C, char *target, ReportList *reports)
strcpy(di, target);
}
- if (BLI_exists(di)) {
+// if (BLI_exists(di)) {
// XXX if(!saveover(di))
// XXX return;
- }
+// }
if (G.fileflags & G_AUTOPACK) {
packAll();
}
-// XXX waitcursor(1); // exit_editmode sets cursor too
+ ED_object_exit_editmode(C, 0);
do_history(di, reports);
@@ -986,7 +607,7 @@ int WM_write_homefile(bContext *C, wmOperator *op)
char tstr[FILE_MAXDIR+FILE_MAXFILE];
int write_flags;
- BLI_make_file_string("/", tstr, BLI_gethome(), ".B.blend");
+ BLI_make_file_string("/", tstr, BLI_gethome(), ".B25.blend");
/* force save as regular blend file */
write_flags = G.fileflags & ~(G_FILE_COMPRESS | G_FILE_LOCK | G_FILE_SIGN);
diff --git a/source/blender/windowmanager/intern/wm_init_exit.c b/source/blender/windowmanager/intern/wm_init_exit.c
index a0d170cc0f0..adbc43e439d 100644
--- a/source/blender/windowmanager/intern/wm_init_exit.c
+++ b/source/blender/windowmanager/intern/wm_init_exit.c
@@ -54,11 +54,6 @@
#include "BKE_utildefines.h"
#include "BKE_packedFile.h"
-#include "BMF_Api.h"
-#ifdef INTERNATIONAL
-#include "FTF_Api.h"
-#endif
-
#include "BLI_blenlib.h"
#include "RE_pipeline.h" /* RE_ free stuff */
@@ -83,6 +78,7 @@
#include "wm_window.h"
#include "ED_armature.h"
+#include "ED_keyframing.h"
#include "ED_node.h"
#include "ED_previewrender.h"
#include "ED_space_api.h"
@@ -122,19 +118,16 @@ void WM_init(bContext *C)
ED_file_init(); /* for fsmenu */
ED_init_node_butfuncs();
- BLF_init();
+ BLF_init(11, U.dpi);
BLF_lang_init();
+ init_builtin_keyingsets(); /* editors/animation/keyframing.c */
+
/* get the default database, plus a wm */
WM_read_homefile(C, NULL);
UI_init();
- /* goes away */
- G.font= BMF_GetFont(BMF_kHelvetica12);
- G.fonts= BMF_GetFont(BMF_kHelvetica10);
- G.fontss= BMF_GetFont(BMF_kHelveticaBold8);
-
// clear_matcopybuf(); /* XXX */
// glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
@@ -234,7 +227,6 @@ void WM_exit(bContext *C)
// fsmenu_free();
BLF_exit();
- BLF_lang_exit();
RE_FreeAllRender();
@@ -254,10 +246,6 @@ void WM_exit(bContext *C)
// XXX UI_filelist_free_icons();
}
-#ifdef INTERNATIONAL
- FTF_End();
-#endif
-
GPU_extensions_exit();
// if (copybuf) MEM_freeN(copybuf);
@@ -269,7 +257,7 @@ void WM_exit(bContext *C)
ED_file_exit(); /* for fsmenu */
UI_exit();
- BLI_freelistN(&U.themes);
+ BKE_userdef_free();
RNA_exit();
diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c
index b310fb81216..9c0fc4d8e9e 100644
--- a/source/blender/windowmanager/intern/wm_operators.c
+++ b/source/blender/windowmanager/intern/wm_operators.c
@@ -33,11 +33,14 @@
#include "DNA_ID.h"
#include "DNA_screen_types.h"
+#include "DNA_scene_types.h"
#include "DNA_userdef_types.h"
#include "DNA_windowmanager_types.h"
#include "MEM_guardedalloc.h"
+#include "PIL_time.h"
+
#include "BLI_blenlib.h"
#include "BLI_dynstr.h" /*for WM_operator_pystring */
@@ -47,13 +50,16 @@
#include "BKE_library.h"
#include "BKE_global.h"
#include "BKE_main.h"
+#include "BKE_scene.h"
#include "BKE_utildefines.h"
#include "BIF_gl.h"
#include "BIF_glutil.h" /* for paint cursor */
+
#include "IMB_imbuf_types.h"
#include "ED_screen.h"
+#include "ED_util.h"
#include "RNA_access.h"
#include "RNA_define.h"
@@ -65,9 +71,10 @@
#include "WM_types.h"
#include "wm.h"
-#include "wm_window.h"
-#include "wm_subwindow.h"
+#include "wm_draw.h"
#include "wm_event_system.h"
+#include "wm_subwindow.h"
+#include "wm_window.h"
@@ -147,12 +154,12 @@ char *WM_operator_pystring(wmOperator *op)
BLI_dynstr_appendf(dynstr, "%s(", op->idname);
- iterprop= RNA_struct_iterator_property(op->ptr);
+ iterprop= RNA_struct_iterator_property(op->ptr->type);
RNA_property_collection_begin(op->ptr, iterprop, &iter);
for(; iter.valid; RNA_property_collection_next(&iter)) {
prop= iter.ptr.data;
- arg_name= RNA_property_identifier(&iter.ptr, prop);
+ arg_name= RNA_property_identifier(prop);
if (strcmp(arg_name, "rna_type")==0) continue;
@@ -200,18 +207,20 @@ void WM_operator_properties_free(PointerRNA *ptr)
int WM_menu_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
PropertyRNA *prop= RNA_struct_find_property(op->ptr, "type");
- uiMenuItem *head;
+ uiPopupMenu *pup;
+ uiLayout *layout;
if(prop==NULL) {
printf("WM_menu_invoke: %s has no \"type\" enum property\n", op->type->idname);
}
- else if (RNA_property_type(op->ptr, prop) != PROP_ENUM) {
+ else if (RNA_property_type(prop) != PROP_ENUM) {
printf("WM_menu_invoke: %s \"type\" is not an enum property\n", op->type->idname);
}
else {
- head= uiPupMenuBegin(op->type->name, 0);
- uiMenuItemsEnumO(head, op->type->idname, "type");
- uiPupMenuEnd(C, head);
+ pup= uiPupMenuBegin(C, op->type->name, 0);
+ layout= uiPupMenuLayout(pup);
+ uiItemsEnumO(layout, op->type->idname, "type");
+ uiPupMenuEnd(C, pup);
}
return OPERATOR_CANCELLED;
@@ -220,11 +229,13 @@ int WM_menu_invoke(bContext *C, wmOperator *op, wmEvent *event)
/* op->invoke */
int WM_operator_confirm(bContext *C, wmOperator *op, wmEvent *event)
{
- uiMenuItem *head;
+ uiPopupMenu *pup;
+ uiLayout *layout;
- head= uiPupMenuBegin("OK?", ICON_HELP);
- uiMenuItemO(head, 0, op->type->idname);
- uiPupMenuEnd(C, head);
+ pup= uiPupMenuBegin(C, "OK?", ICON_HELP);
+ layout= uiPupMenuLayout(pup);
+ uiItemO(layout, NULL, 0, op->type->idname);
+ uiPupMenuEnd(C, pup);
return OPERATOR_CANCELLED;
}
@@ -248,6 +259,66 @@ int WM_operator_winactive(bContext *C)
return 1;
}
+/* op->invoke */
+static void redo_cb(bContext *C, void *arg_op, void *arg2)
+{
+ wmOperator *lastop= arg_op;
+
+ if(lastop) {
+ ED_undo_pop(C);
+ WM_operator_repeat(C, lastop);
+ }
+}
+
+static uiBlock *wm_block_create_redo(bContext *C, ARegion *ar, void *arg_op)
+{
+ wmWindowManager *wm= CTX_wm_manager(C);
+ wmOperator *op= arg_op;
+ PointerRNA ptr;
+ uiBlock *block;
+ uiLayout *layout;
+ uiStyle *style= U.uistyles.first;
+
+ block= uiBeginBlock(C, ar, "redo_popup", UI_EMBOSS);
+ uiBlockClearFlag(block, UI_BLOCK_LOOP);
+ uiBlockSetFlag(block, UI_BLOCK_KEEP_OPEN|UI_BLOCK_RET_1);
+ uiBlockSetFunc(block, redo_cb, arg_op, NULL);
+
+ if(!op->properties) {
+ IDPropertyTemplate val = {0};
+ op->properties= IDP_New(IDP_GROUP, val, "wmOperatorProperties");
+ }
+
+ RNA_pointer_create(&wm->id, op->type->srna, op->properties, &ptr);
+ layout= uiBlockLayout(block, UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL, 0, 0, 300, 20, style);
+ uiDefAutoButsRNA(C, layout, &ptr);
+
+ uiPopupBoundsBlock(block, 4.0f, 0, 0);
+ uiEndBlock(C, block);
+
+ return block;
+}
+
+int WM_operator_redo(bContext *C, wmOperator *op, wmEvent *event)
+{
+ int retval= OPERATOR_CANCELLED;
+
+ if(op->type->exec)
+ retval= op->type->exec(C, op);
+
+ if(retval != OPERATOR_CANCELLED)
+ uiPupBlock(C, wm_block_create_redo, op);
+
+ return retval;
+}
+
+int WM_operator_redo_popup(bContext *C, wmOperator *op)
+{
+ uiPupBlock(C, wm_block_create_redo, op);
+
+ return OPERATOR_CANCELLED;
+}
+
/* ************ window / screen operator definitions ************** */
static void WM_OT_window_duplicate(wmOperatorType *ot)
@@ -311,21 +382,23 @@ static int recentfile_exec(bContext *C, wmOperator *op)
static int wm_recentfile_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
struct RecentFile *recent;
- uiMenuItem *head;
+ uiPopupMenu *pup;
+ uiLayout *layout;
int i, ofs= 0;
- head= uiPupMenuBegin("Open Recent", 0);
+ pup= uiPupMenuBegin(C, "Open Recent", 0);
+ layout= uiPupMenuLayout(pup);
if(G.sce[0]) {
- uiMenuItemIntO(head, G.sce, 0, op->type->idname, "nr", 1);
+ uiItemIntO(layout, G.sce, 0, op->type->idname, "nr", 1);
ofs = 1;
}
for(recent = G.recent_files.first, i=0; (i<U.recent_files) && (recent); recent = recent->next, i++)
if(strcmp(recent->filename, G.sce))
- uiMenuItemIntO(head, recent->filename, 0, op->type->idname, "nr", i+ofs+1);
+ uiItemIntO(layout, recent->filename, 0, op->type->idname, "nr", i+ofs+1);
- uiPupMenuEnd(C, head);
+ uiPupMenuEnd(C, pup);
return OPERATOR_CANCELLED;
}
@@ -1199,6 +1272,93 @@ void WM_OT_radial_control_partial(wmOperatorType *ot)
RNA_def_int_vector(ot->srna, "initial_mouse", 2, NULL, INT_MIN, INT_MAX, "initial_mouse", "", INT_MIN, INT_MAX);
}
+/* ************************** timer for testing ***************** */
+
+/* uses no type defines, fully local testing function anyway... ;) */
+
+static int ten_timer_exec(bContext *C, wmOperator *op)
+{
+ ARegion *ar= CTX_wm_region(C);
+ double stime= PIL_check_seconds_timer();
+ int type = RNA_int_get(op->ptr, "type");
+ int a, time;
+ char tmpstr[128];
+
+ WM_cursor_wait(1);
+
+ for(a=0; a<10; a++) {
+ if (type==0) {
+ ED_region_do_draw(C, ar);
+ }
+ else if (type==1) {
+ wmWindow *win= CTX_wm_window(C);
+
+ ED_region_tag_redraw(ar);
+ wm_draw_update(C);
+
+ CTX_wm_window_set(C, win); /* XXX context manipulation warning! */
+ }
+ else if (type==2) {
+ wmWindow *win= CTX_wm_window(C);
+ ScrArea *sa;
+
+ for(sa= CTX_wm_screen(C)->areabase.first; sa; sa= sa->next)
+ ED_area_tag_redraw(sa);
+ wm_draw_update(C);
+
+ CTX_wm_window_set(C, win); /* XXX context manipulation warning! */
+ }
+ else if (type==3) {
+ Scene *scene= CTX_data_scene(C);
+
+ if(a & 1) scene->r.cfra--;
+ else scene->r.cfra++;
+ scene_update_for_newframe(scene, scene->lay);
+ }
+ else {
+ ED_undo_pop(C);
+ ED_undo_redo(C);
+ }
+ }
+
+ time= (int) ((PIL_check_seconds_timer()-stime)*1000);
+
+ if(type==0) sprintf(tmpstr, "10 x Draw Region: %d ms", time);
+ if(type==1) sprintf(tmpstr, "10 x Draw Region and Swap: %d ms", time);
+ if(type==2) sprintf(tmpstr, "10 x Draw Window and Swap: %d ms", time);
+ if(type==3) sprintf(tmpstr, "Anim Step: %d ms", time);
+ if(type==4) sprintf(tmpstr, "10 x Undo/Redo: %d ms", time);
+
+ WM_cursor_wait(0);
+
+ uiPupMenuNotice(C, tmpstr);
+
+ return OPERATOR_FINISHED;
+}
+
+static void WM_OT_ten_timer(wmOperatorType *ot)
+{
+ static EnumPropertyItem prop_type_items[] = {
+ {0, "DRAW", "Draw Region", ""},
+ {1, "DRAWSWAP", "Draw Region + Swap", ""},
+ {2, "DRAWWINSWAP", "Draw Window + Swap", ""},
+ {3, "ANIMSTEP", "Anim Step", ""},
+ {4, "UNDO", "Undo/Redo", ""},
+ {0, NULL, NULL, NULL}};
+
+ ot->name= "Ten Timer";
+ ot->idname= "WM_OT_ten_timer";
+
+ ot->invoke= WM_menu_invoke;
+ ot->exec= ten_timer_exec;
+ ot->poll= WM_operator_winactive;
+
+ RNA_def_enum(ot->srna, "type", prop_type_items, 0, "Type", "");
+
+}
+
+
+
/* ******************************************************* */
/* called on initialize WM_exit() */
@@ -1220,6 +1380,7 @@ void wm_operatortype_init(void)
WM_operatortype_append(WM_OT_jobs_timer);
WM_operatortype_append(WM_OT_save_as_mainfile);
WM_operatortype_append(WM_OT_save_mainfile);
+ WM_operatortype_append(WM_OT_ten_timer);
}
/* default keymap for windows and screens, only call once per WM */
@@ -1241,5 +1402,6 @@ void wm_window_keymap(wmWindowManager *wm)
WM_keymap_verify_item(keymap, "WM_OT_window_fullscreen_toggle", F11KEY, KM_PRESS, 0, 0);
WM_keymap_verify_item(keymap, "WM_OT_exit_blender", QKEY, KM_PRESS, KM_CTRL, 0);
+ WM_keymap_verify_item(keymap, "WM_OT_ten_timer", TKEY, KM_PRESS, KM_ALT|KM_CTRL, 0);
}
diff --git a/source/blender/windowmanager/intern/wm_subwindow.c b/source/blender/windowmanager/intern/wm_subwindow.c
index 54074ec8f07..67ba31b84c0 100644
--- a/source/blender/windowmanager/intern/wm_subwindow.c
+++ b/source/blender/windowmanager/intern/wm_subwindow.c
@@ -68,6 +68,7 @@ typedef struct wmSubWindow {
int swinid;
float viewmat[4][4], winmat[4][4];
+ float viewmat1[4][4], winmat1[4][4];
} wmSubWindow;
@@ -306,6 +307,28 @@ void wmMultMatrix(float mat[][4])
glGetFloatv(GL_MODELVIEW_MATRIX, (float *)_curswin->winmat);
}
+void wmPushMatrix(void)
+{
+ if(_curswin==NULL) return;
+
+ Mat4CpyMat4(_curswin->viewmat1, _curswin->viewmat);
+ Mat4CpyMat4(_curswin->winmat1, _curswin->winmat);
+}
+
+void wmPopMatrix(void)
+{
+ if(_curswin==NULL) return;
+
+ Mat4CpyMat4(_curswin->viewmat, _curswin->viewmat1);
+ Mat4CpyMat4(_curswin->winmat, _curswin->winmat1);
+
+ glMatrixMode(GL_PROJECTION);
+ glLoadMatrixf(&_curswin->winmat[0][0]);
+ glMatrixMode(GL_MODELVIEW);
+ glLoadMatrixf(&_curswin->viewmat[0][0]);
+
+}
+
void wmGetSingleMatrix(float mat[][4])
{
if(_curswin)
diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c
index a57fff58948..2675fba729a 100644
--- a/source/blender/windowmanager/intern/wm_window.c
+++ b/source/blender/windowmanager/intern/wm_window.c
@@ -687,6 +687,7 @@ char *WM_clipboard_text_get(int selection)
void WM_clipboard_text_set(char *buf, int selection)
{
+#ifdef _WIN32
/* do conversion from \n to \r\n on Windows */
char *p, *p2, *newbuf;
int newlen= 0;
@@ -710,6 +711,9 @@ void WM_clipboard_text_set(char *buf, int selection)
GHOST_putClipboard((GHOST_TInt8*)newbuf, selection);
MEM_freeN(newbuf);
+#else
+ GHOST_putClipboard((GHOST_TInt8*)buf, selection);
+#endif
}
/* ************************************ */
diff --git a/source/creator/CMakeLists.txt b/source/creator/CMakeLists.txt
index 170d49fc1d8..fe0f741bb96 100644
--- a/source/creator/CMakeLists.txt
+++ b/source/creator/CMakeLists.txt
@@ -100,6 +100,7 @@ IF(UNIX AND NOT APPLE)
COMMAND cp ${CMAKE_SOURCE_DIR}/bin/.blender/.Blanguages ${TARGETDIR}/.blender/
COMMAND cp -R ${CMAKE_SOURCE_DIR}/bin/.blender/locale ${TARGETDIR}/.blender/
COMMAND cp -R ${CMAKE_SOURCE_DIR}/release/scripts ${TARGETDIR}/.blender/
+ COMMAND cp -R ${CMAKE_SOURCE_DIR}/release/ui ${TARGETDIR}/.blender/
COMMAND find ${TARGETDIR} -name CVS -prune -exec rm -rf {} "\;"
)
ENDIF(UNIX AND NOT APPLE)
@@ -124,9 +125,11 @@ IF(APPLE)
COMMAND cp -R ${CMAKE_SOURCE_DIR}/bin/.blender/locale ${TARGETDIR}/blender.app/Contents/MacOS/.blender/
COMMAND cp ${CMAKE_SOURCE_DIR}/bin/.blender/.Blanguages ${TARGETDIR}/blender.app/Contents/Resources/
COMMAND cp -R ${CMAKE_SOURCE_DIR}/release/scripts ${TARGETDIR}/blender.app/Contents/MacOS/.blender/
+ COMMAND cp -R ${CMAKE_SOURCE_DIR}/release/ui ${TARGETDIR}/blender.app/Contents/MacOS/.blender/
COMMAND find ${TARGETDIR}/blender.app -name CVS -prune -exec rm -rf {} "\;"
COMMAND find ${TARGETDIR}/blender.app -name CVS.sandboxinfo -prune -exec rm -rf {} "\;"
COMMAND find ${TARGETDIR}/blender.app -name .DS_Store -prune -exec rm -rf {} "\;"
+ COMMAND find ${TARGETDIR}/blender.app -name .svn -prune -exec rm -rf {} "\;"
)
ENDIF(APPLE)
@@ -139,11 +142,13 @@ IF(WIN32)
COMMAND if not exist \"${TARGETDIR}\\.blender\" mkdir \"${TARGETDIR}\\.blender\"
COMMAND if not exist \"${TARGETDIR}\\.blender\\locale\" mkdir \"${TARGETDIR}\\.blender\\locale\"
COMMAND if not exist \"${TARGETDIR}\\.blender\\scripts\" mkdir \"${TARGETDIR}\\.blender\\scripts\"
+ COMMAND if not exist \"${TARGETDIR}\\.blender\\ui\" mkdir \"${TARGETDIR}\\.blender\\ui\"
COMMAND if not exist \"${TARGETDIR}\\plugins\" mkdir \"${TARGETDIR}\\plugins\"
COMMAND copy /Y \"${WIN_SOURCE_DIR}\\bin\\.blender\\.Blanguages\" \"${TARGETDIR}\\.blender\\\"
COMMAND copy /Y \"${WIN_SOURCE_DIR}\\bin\\.blender\\.bfont.ttf\" \"${TARGETDIR}\\.blender\\\"
COMMAND xcopy /E /Y \"${WIN_SOURCE_DIR}\\bin\\.blender\\locale\\*.*\" \"${TARGETDIR}\\.blender\\locale\"
COMMAND xcopy /E /Y \"${WIN_SOURCE_DIR}\\release\\scripts\\*.*\" \"${TARGETDIR}\\.blender\\scripts\"
+ COMMAND xcopy /E /Y \"${WIN_SOURCE_DIR}\\release\\ui\\*.*\" \"${TARGETDIR}\\.blender\\ui\"
COMMAND xcopy /E /Y \"${WIN_SOURCE_DIR}\\release\\plugins\\*.*\" \"${TARGETDIR}\\plugins\"
COMMAND copy /Y \"${WIN_SOURCE_DIR}\\release\\text\\*.*\" \"${TARGETDIR}\"
COMMAND copy /Y \"${WIN_SOURCE_DIR}\\release\\windows\\extra\\python25.zip\" \"${TARGETDIR}\\\"
@@ -238,11 +243,8 @@ IF(UNIX)
bf_guardedalloc
blender_CTR
bf_moto
- bf_bmfont
bf_windowmanager
- bf_editors
- bf_ftfont
- extern_ftgl
+ bf_editors
bf_blroutines
bf_converter
bf_dummy
diff --git a/source/creator/Makefile b/source/creator/Makefile
index 3de46a68276..fbe5d252a77 100644
--- a/source/creator/Makefile
+++ b/source/creator/Makefile
@@ -1,3 +1,5 @@
+# -*- mode: gnumakefile; tab-width: 8; indent-tabs-mode: t; -*-
+# vim: tabstop=8
#
# $Id$
#
@@ -22,7 +24,7 @@
#
# The Original Code is: all of this file.
#
-# Contributor(s): none yet.
+# Contributor(s): GSR
#
# ***** END GPL LICENSE BLOCK *****
#
@@ -58,14 +60,14 @@ CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include
CPPFLAGS += -I$(NAN_GLEW)/include
ifeq ($(WITH_QUICKTIME), true)
- CPPFLAGS += -I$(NAN_QUICKTIME)/include -DWITH_QUICKTIME
+ CPPFLAGS += -I$(NAN_QUICKTIME)/include -DWITH_QUICKTIME
endif
ifeq ($(WITH_OPENJPEG), true)
- CPPFLAGS += -DWITH_OPENJPEG
+ CPPFLAGS += -DWITH_OPENJPEG
endif
ifeq ($(WITH_BINRELOC), true)
- CPPFLAGS += -I$(NANBLENDERHOME)/extern/binreloc/include -DWITH_BINRELOC
+ CPPFLAGS += -I$(NANBLENDERHOME)/extern/binreloc/include -DWITH_BINRELOC
endif
CPPFLAGS += -I$(OPENGL_HEADERS)
diff --git a/source/creator/SConscript b/source/creator/SConscript
index 27cfc161c42..75e7494ebb5 100644
--- a/source/creator/SConscript
+++ b/source/creator/SConscript
@@ -12,22 +12,24 @@ incs += ' ' + env['BF_OPENGL_INC']
defs = []
if env['WITH_BF_QUICKTIME']:
- incs += ' ' + env['BF_QUICKTIME_INC']
- defs.append('WITH_QUICKTIME')
+ incs += ' ' + env['BF_QUICKTIME_INC']
+ defs.append('WITH_QUICKTIME')
if env['WITH_BF_BINRELOC']:
- incs += ' ../../extern/binreloc/include'
- defs.append('WITH_BINRELOC')
+ incs += ' ../../extern/binreloc/include'
+ defs.append('WITH_BINRELOC')
if env['WITH_BF_OPENEXR']:
- defs.append('WITH_OPENEXR')
+ defs.append('WITH_OPENEXR')
if not env['WITH_BF_SDL']:
defs.append('DISABLE_SDL')
if env['WITH_BF_PYTHON']:
- incs += ' ../blender/python'
+ incs += ' ../blender/python'
+ if env['BF_DEBUG']:
+ defs.append('_DEBUG')
else:
- defs.append('DISABLE_PYTHON')
+ defs.append('DISABLE_PYTHON')
env.BlenderLib ( libname = 'bf_creator', sources = Split(sources), includes = Split(incs), defines = defs, libtype='core', priority = 0 )
diff --git a/source/creator/creator.c b/source/creator/creator.c
index 69f80570334..2ac65f7a08a 100644
--- a/source/creator/creator.c
+++ b/source/creator/creator.c
@@ -528,6 +528,8 @@ int main(int argc, char **argv)
* on U.pythondir.
*/
BPY_post_start_python();
+
+ BPY_run_ui_scripts(C, 0); /* dont need to reload the first time */
#endif
#ifdef WITH_QUICKTIME
diff --git a/source/darwin/Makefile b/source/darwin/Makefile
index 4959fa428e9..35ecc6de8f1 100644
--- a/source/darwin/Makefile
+++ b/source/darwin/Makefile
@@ -1,5 +1,5 @@
#
-# $Id: Makefile,v 1.7 2003/05/12 18:12:25 sgefant Exp $
+# $Id$
#
# ***** BEGIN GPL LICENSE BLOCK *****
#
@@ -49,7 +49,10 @@ ifeq ($(APPLICATION), blender)
@echo "---> copying .blender/ scripts"
@cp -R $(NANBLENDERHOME)/bin/.blender $(DIR)/bin/$(APPLICATION).app/Contents/MacOS
@cp -R $(NANBLENDERHOME)/release/scripts $(DIR)/bin/$(APPLICATION).app/Contents/MacOS/.blender/
+ @echo "---> copying ui scripts"
+ @cp -R $(NANBLENDERHOME)/release/ui $(DIR)/bin/$(APPLICATION).app/Contents/MacOS/.blender/
endif
- @echo "---> removing CVS directories and Mac hidden files from distribution"
+ @echo "---> removing SNV directories and Mac hidden files from distribution"
@find $(DIR)/bin/$(APPLICATION).app -name CVS -prune -exec rm -rf {} \;
@find $(DIR)/bin/$(APPLICATION).app -name .DS_Store -exec rm -f {} \;
+ @find $(DIR)/bin/$(APPLICATION).app -name .svn -prune -exec rm -rf {} \;
diff --git a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
index 90d5a1860aa..d8de24c610c 100644
--- a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
+++ b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
@@ -369,7 +369,7 @@ extern "C" void StartKetsjiShell(struct ScrArea *area,
blscene);
// some python things
- PyObject* dictionaryobject = initGamePythonScripting("Ketsji", psl_Lowest);
+ PyObject* dictionaryobject = initGamePythonScripting("Ketsji", psl_Lowest, blenderdata);
ketsjiengine->SetPythonDictionary(dictionaryobject);
initRasterizer(rasterizer, canvas);
PyObject *gameLogic = initGameLogic(ketsjiengine, startscene);
@@ -380,10 +380,15 @@ extern "C" void StartKetsjiShell(struct ScrArea *area,
initGameKeys();
initPythonConstraintBinding();
initMathutils();
+ initBGL();
#ifdef WITH_FFMPEG
initVideoTexture();
#endif
+ //initialize Dome Settings
+ if(blscene->r.stereomode == RAS_IRasterizer::RAS_STEREO_DOME)
+ ketsjiengine->InitDome(blscene->r.domesize, blscene->r.domeres, blscene->r.domemode, blscene->r.domeangle, blscene->r.domeresbuf, blscene->r.dometext);
+
if (sceneconverter)
{
// convert and add scene
@@ -539,7 +544,9 @@ extern "C" void StartKetsjiShell(struct ScrArea *area,
SND_DeviceManager::Unsubscribe();
} while (exitrequested == KX_EXIT_REQUEST_RESTART_GAME || exitrequested == KX_EXIT_REQUEST_START_OTHER_GAME);
-
+
+ Py_DECREF(pyGlobalDict);
+
if (bfd) BLO_blendfiledata_free(bfd);
BLI_strncpy(G.sce, oldsce, sizeof(G.sce));
@@ -669,7 +676,7 @@ extern "C" void StartKetsjiShellSimulation(struct ScrArea *area,
blscene);
// some python things
- PyObject* dictionaryobject = initGamePythonScripting("Ketsji", psl_Lowest);
+ PyObject* dictionaryobject = initGamePythonScripting("Ketsji", psl_Lowest, blenderdata);
ketsjiengine->SetPythonDictionary(dictionaryobject);
initRasterizer(rasterizer, canvas);
PyObject *gameLogic = initGameLogic(ketsjiengine, startscene);
@@ -677,6 +684,7 @@ extern "C" void StartKetsjiShellSimulation(struct ScrArea *area,
initGameKeys();
initPythonConstraintBinding();
initMathutils();
+ initBGL();
#ifdef WITH_FFMPEG
initVideoTexture();
#endif
diff --git a/source/gameengine/BlenderRoutines/CMakeLists.txt b/source/gameengine/BlenderRoutines/CMakeLists.txt
index e090a4b9c56..3b690a21584 100644
--- a/source/gameengine/BlenderRoutines/CMakeLists.txt
+++ b/source/gameengine/BlenderRoutines/CMakeLists.txt
@@ -7,7 +7,6 @@ SET(INC
../../../intern/string
../../../intern/guardedalloc
../../../source/gameengine/Rasterizer/RAS_OpenGLRasterizer
- ../../../intern/bmfont
../../../source/gameengine/Converter
../../../source/blender/imbuf
../../../intern/ghost/include
@@ -15,6 +14,7 @@ SET(INC
../../../source/gameengine/Ketsji
../../../source/blender/blenlib
../../../source/blender/blenkernel
+ ../../../source/blender/blenfont
../../../source/blender/editors/include
../../../source/blender/windowmanager
../../../source/blender
diff --git a/source/gameengine/BlenderRoutines/KX_BlenderGL.cpp b/source/gameengine/BlenderRoutines/KX_BlenderGL.cpp
index b3b10e8bf07..de7a7f54fde 100644
--- a/source/gameengine/BlenderRoutines/KX_BlenderGL.cpp
+++ b/source/gameengine/BlenderRoutines/KX_BlenderGL.cpp
@@ -27,6 +27,7 @@
*/
#include "KX_BlenderGL.h"
+#include "BLF_api.h"
#ifdef HAVE_CONFIG_H
#include <config.h>
@@ -42,9 +43,7 @@
#include <stdlib.h>
#include <string.h>
-#include "BMF_Api.h"
-
-#include "BIF_gl.h"
+#include "GL/glew.h"
#include "BL_Material.h" // MAXTEX
@@ -148,8 +147,7 @@ void BL_print_gamedebug_line(char* text, int xco, int yco, int width, int height
/* the actual drawing */
glColor3ub(255, 255, 255);
- glRasterPos2s(xco, height-yco);
- BMF_DrawString(G.fonts, text);
+ BLF_draw_default(xco, height-yco, 0.0f, text);
glMatrixMode(GL_TEXTURE);
glPopMatrix();
@@ -184,11 +182,9 @@ void BL_print_gamedebug_line_padded(char* text, int xco, int yco, int width, int
/* draw in black first*/
glColor3ub(0, 0, 0);
- glRasterPos2s(xco+1, height-yco-1);
- BMF_DrawString(G.fonts, text);
+ BLF_draw_default(xco+1, height-yco-1, 0.0f, text);
glColor3ub(255, 255, 255);
- glRasterPos2s(xco, height-yco);
- BMF_DrawString(G.fonts, text);
+ BLF_draw_default(xco, height-yco, 0.0f, text);
glMatrixMode(GL_TEXTURE);
glPopMatrix();
diff --git a/source/gameengine/BlenderRoutines/KX_BlenderKeyboardDevice.cpp b/source/gameengine/BlenderRoutines/KX_BlenderKeyboardDevice.cpp
index 4b794380610..877a0d39acf 100644
--- a/source/gameengine/BlenderRoutines/KX_BlenderKeyboardDevice.cpp
+++ b/source/gameengine/BlenderRoutines/KX_BlenderKeyboardDevice.cpp
@@ -74,7 +74,7 @@ void KX_BlenderKeyboardDevice::NextFrame()
// now convert justpressed keyevents into regular (active) keyevents
int previousTable = 1-m_currentTable;
- for (int keyevent= KX_BEGINKEY; keyevent< KX_ENDKEY;keyevent++)
+ for (int keyevent= KX_BEGINKEY; keyevent<= KX_ENDKEY;keyevent++)
{
SCA_InputEvent& oldevent = m_eventStatusTables[previousTable][keyevent];
if (oldevent.m_status == SCA_InputEvent::KX_JUSTACTIVATED ||
@@ -100,7 +100,7 @@ bool KX_BlenderKeyboardDevice::ConvertBlenderEvent(unsigned short incode,short v
KX_EnumInputs kxevent = this->ToNative(incode);
// only process it, if it's a key
- if (kxevent >= KX_BEGINKEY && kxevent < KX_ENDKEY)
+ if (kxevent >= KX_BEGINKEY && kxevent <= KX_ENDKEY)
{
int previousTable = 1-m_currentTable;
diff --git a/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp b/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp
index 42ad7769cbd..9dbda3f195b 100644
--- a/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp
+++ b/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp
@@ -28,6 +28,8 @@
#include "GL/glew.h"
+#include "DNA_scene_types.h"
+
#include "RAS_IRenderTools.h"
#include "RAS_IRasterizer.h"
#include "RAS_LightObject.h"
@@ -67,6 +69,7 @@ void KX_BlenderRenderTools::BeginFrame(RAS_IRasterizer* rasty)
m_clientobject = NULL;
m_lastlightlayer = -1;
m_lastlighting = false;
+ m_lastauxinfo = NULL;
DisableOpenGLLights();
}
@@ -80,25 +83,27 @@ void KX_BlenderRenderTools::EndFrame(RAS_IRasterizer* rasty)
* has a maximum of 8 lights (simultaneous), so 20 * 8 lights are possible in
* a scene. */
-void KX_BlenderRenderTools::ProcessLighting(RAS_IRasterizer *rasty, int layer, const MT_Transform& viewmat)
+void KX_BlenderRenderTools::ProcessLighting(RAS_IRasterizer *rasty, bool uselights, const MT_Transform& viewmat)
{
- if(m_lastlightlayer == layer)
- return;
+ bool enable = false;
+ int layer= -1;
- m_lastlightlayer = layer;
+ /* find the layer */
+ if(uselights) {
+ if(m_clientobject)
+ layer = static_cast<KX_GameObject*>(m_clientobject)->GetLayer();
+ }
- bool enable = false;
+ /* avoid state switching */
+ if(m_lastlightlayer == layer && m_lastauxinfo == m_auxilaryClientInfo)
+ return;
- if (layer >= 0)
- {
- if (m_clientobject)
- {
- if (layer == RAS_LIGHT_OBJECT_LAYER)
- layer = static_cast<KX_GameObject*>(m_clientobject)->GetLayer();
+ m_lastlightlayer = layer;
+ m_lastauxinfo = m_auxilaryClientInfo;
- enable = applyLights(layer, viewmat);
- }
- }
+ /* enable/disable lights as needed */
+ if(layer >= 0)
+ enable = applyLights(layer, viewmat);
if(enable)
EnableOpenGLLights(rasty);
@@ -324,11 +329,16 @@ void KX_BlenderRenderTools::PopMatrix()
int KX_BlenderRenderTools::applyLights(int objectlayer, const MT_Transform& viewmat)
{
// taken from blender source, incompatibility between Blender Object / GameObject
+ KX_Scene* kxscene = (KX_Scene*)m_auxilaryClientInfo;
+ int scenelayer = ~0;
float glviewmat[16];
unsigned int count;
float vec[4];
vec[3]= 1.0;
+
+ if(kxscene && kxscene->GetBlenderScene())
+ scenelayer = kxscene->GetBlenderScene()->lay;
for(count=0; count<m_numgllights; count++)
glDisable((GLenum)(GL_LIGHT0+count));
@@ -343,71 +353,77 @@ int KX_BlenderRenderTools::applyLights(int objectlayer, const MT_Transform& view
for (lit = m_lights.begin(), count = 0; !(lit==m_lights.end()) && count < m_numgllights; ++lit)
{
RAS_LightObject* lightdata = (*lit);
- if (lightdata->m_layer & objectlayer)
- {
- vec[0] = (*(lightdata->m_worldmatrix))(0,3);
- vec[1] = (*(lightdata->m_worldmatrix))(1,3);
- vec[2] = (*(lightdata->m_worldmatrix))(2,3);
- vec[3] = 1;
+ KX_Scene* lightscene = (KX_Scene*)lightdata->m_scene;
- if(lightdata->m_type==RAS_LightObject::LIGHT_SUN) {
-
- vec[0] = (*(lightdata->m_worldmatrix))(0,2);
- vec[1] = (*(lightdata->m_worldmatrix))(1,2);
- vec[2] = (*(lightdata->m_worldmatrix))(2,2);
- //vec[0]= base->object->obmat[2][0];
- //vec[1]= base->object->obmat[2][1];
- //vec[2]= base->object->obmat[2][2];
- vec[3]= 0.0;
- glLightfv((GLenum)(GL_LIGHT0+count), GL_POSITION, vec);
- }
- else {
- //vec[3]= 1.0;
- glLightfv((GLenum)(GL_LIGHT0+count), GL_POSITION, vec);
- glLightf((GLenum)(GL_LIGHT0+count), GL_CONSTANT_ATTENUATION, 1.0);
- glLightf((GLenum)(GL_LIGHT0+count), GL_LINEAR_ATTENUATION, lightdata->m_att1/lightdata->m_distance);
- // without this next line it looks backward compatible.
- //attennuation still is acceptable
- glLightf((GLenum)(GL_LIGHT0+count), GL_QUADRATIC_ATTENUATION, lightdata->m_att2/(lightdata->m_distance*lightdata->m_distance));
-
- if(lightdata->m_type==RAS_LightObject::LIGHT_SPOT) {
- vec[0] = -(*(lightdata->m_worldmatrix))(0,2);
- vec[1] = -(*(lightdata->m_worldmatrix))(1,2);
- vec[2] = -(*(lightdata->m_worldmatrix))(2,2);
- //vec[0]= -base->object->obmat[2][0];
- //vec[1]= -base->object->obmat[2][1];
- //vec[2]= -base->object->obmat[2][2];
- glLightfv((GLenum)(GL_LIGHT0+count), GL_SPOT_DIRECTION, vec);
- glLightf((GLenum)(GL_LIGHT0+count), GL_SPOT_CUTOFF, lightdata->m_spotsize/2.0);
- glLightf((GLenum)(GL_LIGHT0+count), GL_SPOT_EXPONENT, 128.0*lightdata->m_spotblend);
- }
- else glLightf((GLenum)(GL_LIGHT0+count), GL_SPOT_CUTOFF, 180.0);
- }
+ /* only use lights in the same layer as the object */
+ if(!(lightdata->m_layer & objectlayer))
+ continue;
+ /* only use lights in the same scene, and in a visible layer */
+ if(kxscene != lightscene || !(lightdata->m_layer & scenelayer))
+ continue;
+
+ vec[0] = (*(lightdata->m_worldmatrix))(0,3);
+ vec[1] = (*(lightdata->m_worldmatrix))(1,3);
+ vec[2] = (*(lightdata->m_worldmatrix))(2,3);
+ vec[3] = 1;
+
+ if(lightdata->m_type==RAS_LightObject::LIGHT_SUN) {
- if (lightdata->m_nodiffuse)
- {
- vec[0] = vec[1] = vec[2] = vec[3] = 0.0;
- } else {
- vec[0]= lightdata->m_energy*lightdata->m_red;
- vec[1]= lightdata->m_energy*lightdata->m_green;
- vec[2]= lightdata->m_energy*lightdata->m_blue;
- vec[3]= 1.0;
- }
- glLightfv((GLenum)(GL_LIGHT0+count), GL_DIFFUSE, vec);
- if (lightdata->m_nospecular)
- {
- vec[0] = vec[1] = vec[2] = vec[3] = 0.0;
- } else if (lightdata->m_nodiffuse) {
- vec[0]= lightdata->m_energy*lightdata->m_red;
- vec[1]= lightdata->m_energy*lightdata->m_green;
- vec[2]= lightdata->m_energy*lightdata->m_blue;
- vec[3]= 1.0;
+ vec[0] = (*(lightdata->m_worldmatrix))(0,2);
+ vec[1] = (*(lightdata->m_worldmatrix))(1,2);
+ vec[2] = (*(lightdata->m_worldmatrix))(2,2);
+ //vec[0]= base->object->obmat[2][0];
+ //vec[1]= base->object->obmat[2][1];
+ //vec[2]= base->object->obmat[2][2];
+ vec[3]= 0.0;
+ glLightfv((GLenum)(GL_LIGHT0+count), GL_POSITION, vec);
+ }
+ else {
+ //vec[3]= 1.0;
+ glLightfv((GLenum)(GL_LIGHT0+count), GL_POSITION, vec);
+ glLightf((GLenum)(GL_LIGHT0+count), GL_CONSTANT_ATTENUATION, 1.0);
+ glLightf((GLenum)(GL_LIGHT0+count), GL_LINEAR_ATTENUATION, lightdata->m_att1/lightdata->m_distance);
+ // without this next line it looks backward compatible.
+ //attennuation still is acceptable
+ glLightf((GLenum)(GL_LIGHT0+count), GL_QUADRATIC_ATTENUATION, lightdata->m_att2/(lightdata->m_distance*lightdata->m_distance));
+
+ if(lightdata->m_type==RAS_LightObject::LIGHT_SPOT) {
+ vec[0] = -(*(lightdata->m_worldmatrix))(0,2);
+ vec[1] = -(*(lightdata->m_worldmatrix))(1,2);
+ vec[2] = -(*(lightdata->m_worldmatrix))(2,2);
+ //vec[0]= -base->object->obmat[2][0];
+ //vec[1]= -base->object->obmat[2][1];
+ //vec[2]= -base->object->obmat[2][2];
+ glLightfv((GLenum)(GL_LIGHT0+count), GL_SPOT_DIRECTION, vec);
+ glLightf((GLenum)(GL_LIGHT0+count), GL_SPOT_CUTOFF, lightdata->m_spotsize/2.0);
+ glLightf((GLenum)(GL_LIGHT0+count), GL_SPOT_EXPONENT, 128.0*lightdata->m_spotblend);
}
- glLightfv((GLenum)(GL_LIGHT0+count), GL_SPECULAR, vec);
- glEnable((GLenum)(GL_LIGHT0+count));
-
- count++;
+ else glLightf((GLenum)(GL_LIGHT0+count), GL_SPOT_CUTOFF, 180.0);
+ }
+
+ if (lightdata->m_nodiffuse)
+ {
+ vec[0] = vec[1] = vec[2] = vec[3] = 0.0;
+ } else {
+ vec[0]= lightdata->m_energy*lightdata->m_red;
+ vec[1]= lightdata->m_energy*lightdata->m_green;
+ vec[2]= lightdata->m_energy*lightdata->m_blue;
+ vec[3]= 1.0;
+ }
+ glLightfv((GLenum)(GL_LIGHT0+count), GL_DIFFUSE, vec);
+ if (lightdata->m_nospecular)
+ {
+ vec[0] = vec[1] = vec[2] = vec[3] = 0.0;
+ } else if (lightdata->m_nodiffuse) {
+ vec[0]= lightdata->m_energy*lightdata->m_red;
+ vec[1]= lightdata->m_energy*lightdata->m_green;
+ vec[2]= lightdata->m_energy*lightdata->m_blue;
+ vec[3]= 1.0;
}
+ glLightfv((GLenum)(GL_LIGHT0+count), GL_SPECULAR, vec);
+ glEnable((GLenum)(GL_LIGHT0+count));
+
+ count++;
}
glPopMatrix();
diff --git a/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.h b/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.h
index ebf7562503f..60130e6bfc9 100644
--- a/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.h
+++ b/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.h
@@ -51,6 +51,7 @@ class KX_BlenderRenderTools : public RAS_IRenderTools
{
int m_lastlightlayer;
bool m_lastlighting;
+ void *m_lastauxinfo;
static unsigned int m_numgllights;
public:
@@ -62,7 +63,7 @@ public:
void EnableOpenGLLights(RAS_IRasterizer *rasty);
void DisableOpenGLLights();
- void ProcessLighting(RAS_IRasterizer *rasty, int layer, const MT_Transform& viewmat);
+ void ProcessLighting(RAS_IRasterizer *rasty, bool uselights, const MT_Transform& viewmat);
void RenderText2D(RAS_TEXT_RENDER_MODE mode,
const char* text,
diff --git a/source/gameengine/BlenderRoutines/Makefile b/source/gameengine/BlenderRoutines/Makefile
index 03a7a247727..f5486bae87b 100644
--- a/source/gameengine/BlenderRoutines/Makefile
+++ b/source/gameengine/BlenderRoutines/Makefile
@@ -40,7 +40,6 @@ CPPFLAGS += -I$(NAN_SUMO)/include -I$(NAN_SOLID)/include
CPPFLAGS += -I$(NAN_SOLID)
CPPFLAGS += -I$(NAN_STRING)/include
CPPFLAGS += -I$(NAN_MOTO)/include
-CPPFLAGS += -I$(NAN_BMFONT)/include
CPPFLAGS += -I$(NAN_FUZZICS)/include
CPPFLAGS += -I$(NAN_SOUNDSYSTEM)/include
CPPFLAGS += -I$(NAN_GLEW)/include
@@ -55,7 +54,7 @@ CPPFLAGS += -I../../blender/blenlib
CPPFLAGS += -I../../blender/blenkernel
CPPFLAGS += -I../../blender/render/extern/include
CPPFLAGS += -I../../blender/blenloader
-CPPFLAGS += -I../../blender/blenkernel
+CPPFLAGS += -I../../blender/blenfont
CPPFLAGS += -I../../blender/gpu
CPPFLAGS += -I../Converter
CPPFLAGS += -I../Expressions
diff --git a/source/gameengine/BlenderRoutines/SConscript b/source/gameengine/BlenderRoutines/SConscript
index 020402e9bcd..a0cc3af3611 100644
--- a/source/gameengine/BlenderRoutines/SConscript
+++ b/source/gameengine/BlenderRoutines/SConscript
@@ -5,11 +5,12 @@ sources = env.Glob('*.cpp')
defs = []
incs = '. #source/kernel/gen_system #intern/string #intern/guardedalloc'
-incs += ' #source/gameengine/Rasterizer/RAS_OpenGLRasterizer #intern/bmfont'
+incs += ' #source/gameengine/Rasterizer/RAS_OpenGLRasterizer'
incs += ' #source/gameengine/Converter #source/blender/imbuf'
incs += ' #intern/ghost/include'
incs += ' #intern/moto/include #source/gameengine/Ketsji #source/blender/blenlib'
-incs += ' #source/blender/blenkernel #source/blender #source/blender/editors/include'
+incs += ' #source/blender/blenkernel #source/blender'
+incs += ' #source/blender/blenfont #source/blender/editors/include'
incs += ' #source/blender/makesdna #source/gameengine/Rasterizer #source/gameengine/GameLogic'
incs += ' #source/gameengine/Expressions #source/gameengine/Network'
incs += ' #source/gameengine/SceneGraph #source/gameengine/Physics/common'
diff --git a/source/gameengine/Converter/BL_ActionActuator.cpp b/source/gameengine/Converter/BL_ActionActuator.cpp
index ce555fc1aeb..662d6b7a63e 100644
--- a/source/gameengine/Converter/BL_ActionActuator.cpp
+++ b/source/gameengine/Converter/BL_ActionActuator.cpp
@@ -423,8 +423,7 @@ const char BL_ActionActuator::GetAction_doc[] =
"getAction()\n"
"\tReturns a string containing the name of the current action.\n";
-PyObject* BL_ActionActuator::PyGetAction(PyObject* self,
- PyObject* args,
+PyObject* BL_ActionActuator::PyGetAction(PyObject* args,
PyObject* kwds) {
ShowDeprecationWarning("getAction()", "the action property");
@@ -439,8 +438,7 @@ const char BL_ActionActuator::GetProperty_doc[] =
"getProperty()\n"
"\tReturns the name of the property to be used in FromProp mode.\n";
-PyObject* BL_ActionActuator::PyGetProperty(PyObject* self,
- PyObject* args,
+PyObject* BL_ActionActuator::PyGetProperty(PyObject* args,
PyObject* kwds) {
ShowDeprecationWarning("getProperty()", "the property property");
@@ -456,8 +454,7 @@ const char BL_ActionActuator::GetFrameProperty_doc[] =
"getFrameProperty()\n"
"\tReturns the name of the property, that is set to the current frame number.\n";
-PyObject* BL_ActionActuator::PyGetFrameProperty(PyObject* self,
- PyObject* args,
+PyObject* BL_ActionActuator::PyGetFrameProperty(PyObject* args,
PyObject* kwds) {
ShowDeprecationWarning("getFrameProperty()", "the frameProperty property");
@@ -473,8 +470,7 @@ const char BL_ActionActuator::GetFrame_doc[] =
"getFrame()\n"
"\tReturns the current frame number.\n";
-PyObject* BL_ActionActuator::PyGetFrame(PyObject* self,
- PyObject* args,
+PyObject* BL_ActionActuator::PyGetFrame(PyObject* args,
PyObject* kwds) {
ShowDeprecationWarning("getFrame()", "the frame property");
@@ -490,8 +486,7 @@ const char BL_ActionActuator::GetEnd_doc[] =
"getEnd()\n"
"\tReturns the last frame of the action.\n";
-PyObject* BL_ActionActuator::PyGetEnd(PyObject* self,
- PyObject* args,
+PyObject* BL_ActionActuator::PyGetEnd(PyObject* args,
PyObject* kwds) {
ShowDeprecationWarning("getEnd()", "the end property");
@@ -507,8 +502,7 @@ const char BL_ActionActuator::GetStart_doc[] =
"getStart()\n"
"\tReturns the starting frame of the action.\n";
-PyObject* BL_ActionActuator::PyGetStart(PyObject* self,
- PyObject* args,
+PyObject* BL_ActionActuator::PyGetStart(PyObject* args,
PyObject* kwds) {
ShowDeprecationWarning("getStart()", "the start property");
@@ -525,8 +519,7 @@ const char BL_ActionActuator::GetBlendin_doc[] =
"\tReturns the number of interpolation animation frames to be\n"
"\tgenerated when this actuator is triggered.\n";
-PyObject* BL_ActionActuator::PyGetBlendin(PyObject* self,
- PyObject* args,
+PyObject* BL_ActionActuator::PyGetBlendin(PyObject* args,
PyObject* kwds) {
ShowDeprecationWarning("getBlendin()", "the blendin property");
@@ -543,8 +536,7 @@ const char BL_ActionActuator::GetPriority_doc[] =
"\tReturns the priority for this actuator. Actuators with lower\n"
"\tPriority numbers will override actuators with higher numbers.\n";
-PyObject* BL_ActionActuator::PyGetPriority(PyObject* self,
- PyObject* args,
+PyObject* BL_ActionActuator::PyGetPriority(PyObject* args,
PyObject* kwds) {
ShowDeprecationWarning("getPriority()", "the priority property");
@@ -565,15 +557,14 @@ const char BL_ActionActuator::SetAction_doc[] =
"\t unchanged. If reset is not specified, the timer will"
"\t be reset.\n";
-PyObject* BL_ActionActuator::PySetAction(PyObject* self,
- PyObject* args,
+PyObject* BL_ActionActuator::PySetAction(PyObject* args,
PyObject* kwds) {
ShowDeprecationWarning("setAction()", "the action property");
char *string;
int reset = 1;
- if (PyArg_ParseTuple(args,"s|i",&string, &reset))
+ if (PyArg_ParseTuple(args,"s|i:setAction",&string, &reset))
{
bAction *action;
@@ -601,14 +592,13 @@ const char BL_ActionActuator::SetStart_doc[] =
"setStart(start)\n"
"\t - start : Specifies the starting frame of the animation.\n";
-PyObject* BL_ActionActuator::PySetStart(PyObject* self,
- PyObject* args,
+PyObject* BL_ActionActuator::PySetStart(PyObject* args,
PyObject* kwds) {
ShowDeprecationWarning("setStart()", "the start property");
float start;
- if (PyArg_ParseTuple(args,"f",&start))
+ if (PyArg_ParseTuple(args,"f:setStart",&start))
{
m_startframe = start;
}
@@ -624,14 +614,13 @@ const char BL_ActionActuator::SetEnd_doc[] =
"setEnd(end)\n"
"\t - end : Specifies the ending frame of the animation.\n";
-PyObject* BL_ActionActuator::PySetEnd(PyObject* self,
- PyObject* args,
+PyObject* BL_ActionActuator::PySetEnd(PyObject* args,
PyObject* kwds) {
ShowDeprecationWarning("setEnd()", "the end property");
float end;
- if (PyArg_ParseTuple(args,"f",&end))
+ if (PyArg_ParseTuple(args,"f:setEnd",&end))
{
m_endframe = end;
}
@@ -648,14 +637,13 @@ const char BL_ActionActuator::SetBlendin_doc[] =
"\t - blendin : Specifies the number of frames of animation to generate\n"
"\t when making transitions between actions.\n";
-PyObject* BL_ActionActuator::PySetBlendin(PyObject* self,
- PyObject* args,
+PyObject* BL_ActionActuator::PySetBlendin(PyObject* args,
PyObject* kwds) {
ShowDeprecationWarning("setBlendin()", "the blendin property");
float blendin;
- if (PyArg_ParseTuple(args,"f",&blendin))
+ if (PyArg_ParseTuple(args,"f:setBlendin",&blendin))
{
m_blendin = blendin;
}
@@ -673,14 +661,13 @@ const char BL_ActionActuator::SetBlendtime_doc[] =
"\t used when generating transitions between actions. This\n"
"\t parameter must be in the range from 0.0 to 1.0.\n";
-PyObject* BL_ActionActuator::PySetBlendtime(PyObject* self,
- PyObject* args,
+PyObject* BL_ActionActuator::PySetBlendtime(PyObject* args,
PyObject* kwds) {
ShowDeprecationWarning("setBlendtime()", "the blendtime property");
float blendframe;
- if (PyArg_ParseTuple(args,"f",&blendframe))
+ if (PyArg_ParseTuple(args,"f:setBlendtime",&blendframe))
{
m_blendframe = blendframe * m_blendin;
if (m_blendframe<0)
@@ -702,14 +689,13 @@ const char BL_ActionActuator::SetPriority_doc[] =
"\t priority numbers will override actuators with higher\n"
"\t numbers.\n";
-PyObject* BL_ActionActuator::PySetPriority(PyObject* self,
- PyObject* args,
+PyObject* BL_ActionActuator::PySetPriority(PyObject* args,
PyObject* kwds) {
ShowDeprecationWarning("setPriority()", "the priority property");
int priority;
- if (PyArg_ParseTuple(args,"i",&priority))
+ if (PyArg_ParseTuple(args,"i:setPriority",&priority))
{
m_priority = priority;
}
@@ -725,14 +711,13 @@ const char BL_ActionActuator::SetFrame_doc[] =
"setFrame(frame)\n"
"\t - frame : Specifies the new current frame for the animation\n";
-PyObject* BL_ActionActuator::PySetFrame(PyObject* self,
- PyObject* args,
+PyObject* BL_ActionActuator::PySetFrame(PyObject* args,
PyObject* kwds) {
ShowDeprecationWarning("setFrame()", "the frame property");
float frame;
- if (PyArg_ParseTuple(args,"f",&frame))
+ if (PyArg_ParseTuple(args,"f:setFrame",&frame))
{
m_localtime = frame;
if (m_localtime<m_startframe)
@@ -753,14 +738,13 @@ const char BL_ActionActuator::SetProperty_doc[] =
"\t - prop : A string specifying the property name to be used in\n"
"\t FromProp playback mode.\n";
-PyObject* BL_ActionActuator::PySetProperty(PyObject* self,
- PyObject* args,
+PyObject* BL_ActionActuator::PySetProperty(PyObject* args,
PyObject* kwds) {
ShowDeprecationWarning("setProperty()", "the property property");
char *string;
- if (PyArg_ParseTuple(args,"s",&string))
+ if (PyArg_ParseTuple(args,"s:setProperty",&string))
{
m_propname = string;
}
@@ -776,14 +760,13 @@ const char BL_ActionActuator::SetFrameProperty_doc[] =
"setFrameProperty(prop)\n"
"\t - prop : A string specifying the property of the frame set up update.\n";
-PyObject* BL_ActionActuator::PySetFrameProperty(PyObject* self,
- PyObject* args,
+PyObject* BL_ActionActuator::PySetFrameProperty(PyObject* args,
PyObject* kwds) {
ShowDeprecationWarning("setFrameProperty()", "the frameProperty property");
char *string;
- if (PyArg_ParseTuple(args,"s",&string))
+ if (PyArg_ParseTuple(args,"s:setFrameProperty",&string))
{
m_framepropname = string;
}
@@ -795,12 +778,11 @@ PyObject* BL_ActionActuator::PySetFrameProperty(PyObject* self,
}
/*
-PyObject* BL_ActionActuator::PyGetChannel(PyObject* self,
- PyObject* args,
+PyObject* BL_ActionActuator::PyGetChannel(PyObject* args,
PyObject* kwds) {
char *string;
- if (PyArg_ParseTuple(args,"s",&string))
+ if (PyArg_ParseTuple(args,"s:getChannel",&string))
{
m_propname = string;
}
@@ -816,8 +798,7 @@ PyObject* BL_ActionActuator::PyGetChannel(PyObject* self,
const char BL_ActionActuator::GetType_doc[] =
"getType()\n"
"\tReturns the operation mode of the actuator.\n";
-PyObject* BL_ActionActuator::PyGetType(PyObject* self,
- PyObject* args,
+PyObject* BL_ActionActuator::PyGetType(PyObject* args,
PyObject* kwds) {
ShowDeprecationWarning("getType()", "the type property");
@@ -829,14 +810,13 @@ const char BL_ActionActuator::SetType_doc[] =
"setType(mode)\n"
"\t - mode: Play (0), Flipper (2), LoopStop (3), LoopEnd (4) or Property (6)\n"
"\tSet the operation mode of the actuator.\n";
-PyObject* BL_ActionActuator::PySetType(PyObject* self,
- PyObject* args,
+PyObject* BL_ActionActuator::PySetType(PyObject* args,
PyObject* kwds) {
ShowDeprecationWarning("setType()", "the type property");
short typeArg;
- if (!PyArg_ParseTuple(args, "h", &typeArg)) {
+ if (!PyArg_ParseTuple(args, "h:setType", &typeArg)) {
return NULL;
}
@@ -854,13 +834,13 @@ PyObject* BL_ActionActuator::PySetType(PyObject* self,
Py_RETURN_NONE;
}
-PyObject* BL_ActionActuator::PyGetContinue(PyObject* self) {
+PyObject* BL_ActionActuator::PyGetContinue() {
ShowDeprecationWarning("getContinue()", "the continue property");
return PyInt_FromLong((long)(m_end_reset==0));
}
-PyObject* BL_ActionActuator::PySetContinue(PyObject* self, PyObject* value) {
+PyObject* BL_ActionActuator::PySetContinue(PyObject* value) {
ShowDeprecationWarning("setContinue()", "the continue property");
int param = PyObject_IsTrue( value );
@@ -894,7 +874,7 @@ KX_PYMETHODDEF_DOC(BL_ActionActuator, setChannel,
int row,col;
int mode = 0; /* 0 for bone space, 1 for armature/world space */
- if (!PyArg_ParseTuple(args,"sO|i", &string, &pylist, &mode))
+ if (!PyArg_ParseTuple(args,"sO|i:setChannel", &string, &pylist, &mode))
return NULL;
if (pylist->ob_type == &CListValue::Type)
@@ -965,22 +945,22 @@ KX_PYMETHODDEF_DOC(BL_ActionActuator, setChannel,
/* ------------------------------------------------------------------------- */
PyTypeObject BL_ActionActuator::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"BL_ActionActuator",
- sizeof(BL_ActionActuator),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0, //&MyPyCompare,
- __repr,
- 0, //&cvalue_as_number,
0,
0,
0,
- 0
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
PyParentObject BL_ActionActuator::Parents[] = {
@@ -1025,6 +1005,7 @@ PyAttributeDef BL_ActionActuator::Attributes[] = {
KX_PYATTRIBUTE_FLOAT_RW("start", 0, MAXFRAMEF, BL_ActionActuator, m_startframe),
KX_PYATTRIBUTE_FLOAT_RW("end", 0, MAXFRAMEF, BL_ActionActuator, m_endframe),
KX_PYATTRIBUTE_FLOAT_RW("blendin", 0, MAXFRAMEF, BL_ActionActuator, m_blendin),
+ KX_PYATTRIBUTE_RW_FUNCTION("action", BL_ActionActuator, pyattr_get_action, pyattr_set_action),
KX_PYATTRIBUTE_SHORT_RW("priority", 0, 100, false, BL_ActionActuator, m_priority),
KX_PYATTRIBUTE_FLOAT_RW_CHECK("frame", 0, MAXFRAMEF, BL_ActionActuator, m_localtime, CheckFrame),
KX_PYATTRIBUTE_STRING_RW("property", 0, 31, false, BL_ActionActuator, m_propname),
@@ -1035,48 +1016,45 @@ PyAttributeDef BL_ActionActuator::Attributes[] = {
{ NULL } //Sentinel
};
-PyObject* BL_ActionActuator::_getattr(const char *attr) {
- if (!strcmp(attr, "action"))
- return PyString_FromString(m_action->id.name+2);
- PyObject* object = _getattr_self(Attributes, this, attr);
- if (object != NULL)
- return object;
- _getattr_up(SCA_IActuator);
+PyObject* BL_ActionActuator::py_getattro(PyObject *attr) {
+ py_getattro_up(SCA_IActuator);
}
-int BL_ActionActuator::_setattr(const char *attr, PyObject* value) {
- if (!strcmp(attr, "action"))
- {
- if (!PyString_Check(value))
- {
- PyErr_SetString(PyExc_ValueError, "expected a string");
- return 1;
- }
+int BL_ActionActuator::py_setattro(PyObject *attr, PyObject* value) {
+ py_setattro_up(SCA_IActuator);
+}
- STR_String val = PyString_AsString(value);
-
- if (val == "")
- {
- m_action = NULL;
- return 0;
- }
- bAction *action;
-
- action = (bAction*)SCA_ILogicBrick::m_sCurrentLogicManager->GetActionByName(val);
-
+PyObject* BL_ActionActuator::pyattr_get_action(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ BL_ActionActuator* self= static_cast<BL_ActionActuator*>(self_v);
+ return PyString_FromString(self->GetAction() ? self->GetAction()->id.name+2 : "");
+}
+
+int BL_ActionActuator::pyattr_set_action(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ BL_ActionActuator* self= static_cast<BL_ActionActuator*>(self_v);
+
+ if (!PyString_Check(value))
+ {
+ PyErr_SetString(PyExc_ValueError, "actuator.action = val: Action Actuator, expected the string name of the action");
+ return -1;
+ }
+ bAction *action= NULL;
+ STR_String val = PyString_AsString(value);
+
+ if (val != "")
+ {
+ action= (bAction*)SCA_ILogicBrick::m_sCurrentLogicManager->GetActionByName(val);
if (!action)
{
- PyErr_SetString(PyExc_ValueError, "action not found!");
+ PyErr_SetString(PyExc_ValueError, "actuator.action = val: Action Actuator, action not found!");
return 1;
}
-
- m_action = action;
- return 0;
}
- int ret = _setattr_self(Attributes, this, attr, value);
- if (ret >= 0)
- return ret;
- return SCA_IActuator::_setattr(attr, value);
+
+ self->SetAction(action);
+ return 0;
+
}
diff --git a/source/gameengine/Converter/BL_ActionActuator.h b/source/gameengine/Converter/BL_ActionActuator.h
index 6161048afb8..6ae7f716b4b 100644
--- a/source/gameengine/Converter/BL_ActionActuator.h
+++ b/source/gameengine/Converter/BL_ActionActuator.h
@@ -81,6 +81,9 @@ public:
virtual void ProcessReplica();
void SetBlendTime (float newtime);
+
+ bAction* GetAction() { return m_action; }
+ void SetAction(bAction* act) { m_action= act; }
//Deprecated ----->
KX_PYMETHOD_DOC(BL_ActionActuator,SetAction);
@@ -110,8 +113,11 @@ public:
KX_PYMETHOD_DOC(BL_ActionActuator,setChannel);
- virtual PyObject* _getattr(const char *attr);
- virtual int _setattr(const char *attr, PyObject* value);
+ virtual PyObject* py_getattro(PyObject* attr);
+ virtual int py_setattro(PyObject* attr, PyObject* value);
+
+ static PyObject* pyattr_get_action(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static int pyattr_set_action(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
/* attribute check */
static int CheckFrame(void *self, const PyAttributeDef*)
@@ -148,11 +154,11 @@ public:
case ACT_ACTION_FROM_PROP:
return 0;
default:
- PyErr_SetString(PyExc_ValueError, "invalid type supplied");
+ PyErr_SetString(PyExc_ValueError, "Action Actuator, invalid play type supplied");
return 1;
}
-
}
+
protected:
void SetStartTime(float curtime);
diff --git a/source/gameengine/Converter/BL_BlenderDataConversion.cpp b/source/gameengine/Converter/BL_BlenderDataConversion.cpp
index da74fa49cba..5220361d10d 100644
--- a/source/gameengine/Converter/BL_BlenderDataConversion.cpp
+++ b/source/gameengine/Converter/BL_BlenderDataConversion.cpp
@@ -164,7 +164,11 @@ extern "C" {
// defines USE_ODE to choose physics engine
#include "KX_ConvertPhysicsObject.h"
-
+#ifdef USE_BULLET
+#include "CcdPhysicsEnvironment.h"
+#include "CcdGraphicController.h"
+#endif
+#include "KX_MotionState.h"
// This file defines relationships between parents and children
// in the game engine.
@@ -598,10 +602,7 @@ BL_Material* ConvertMaterial(
if( validface ) {
- material->ras_mode |= !(
- (mface->flag & ME_HIDE) ||
- (tface->mode & TF_INVISIBLE)
- )?POLY_VIS:0;
+ material->ras_mode |= (tface->mode & TF_INVISIBLE)?0:POLY_VIS;
material->transp = tface->transp;
material->tile = tface->tile;
@@ -839,6 +840,7 @@ RAS_MeshObject* BL_ConvertMesh(Mesh* mesh, Object* blenderobj, RAS_IRenderTools*
{
bool visible = true;
+ bool twoside = false;
RAS_IPolyMaterial* polymat = NULL;
BL_Material *bl_mat = NULL;
@@ -855,6 +857,7 @@ RAS_MeshObject* BL_ConvertMesh(Mesh* mesh, Object* blenderobj, RAS_IRenderTools*
visible = ((bl_mat->ras_mode & POLY_VIS)!=0);
collider = ((bl_mat->ras_mode & COLLIDER)!=0);
+ twoside = ((bl_mat->mode & TF_TWOSIDE)!=0);
/* vertex colors and uv's were stored in bl_mat temporarily */
bl_mat->GetConversionRGB(rgb);
@@ -894,7 +897,8 @@ RAS_MeshObject* BL_ConvertMesh(Mesh* mesh, Object* blenderobj, RAS_IRenderTools*
tile = tface->tile;
mode = tface->mode;
- visible = !((mface->flag & ME_HIDE)||(tface->mode & TF_INVISIBLE));
+ visible = !(tface->mode & TF_INVISIBLE);
+ twoside = ((tface->mode & TF_TWOSIDE)!=0);
uv0.setValue(tface->uv[0]);
uv1.setValue(tface->uv[1]);
@@ -995,6 +999,7 @@ RAS_MeshObject* BL_ConvertMesh(Mesh* mesh, Object* blenderobj, RAS_IRenderTools*
poly->SetVisible(visible);
poly->SetCollider(collider);
+ poly->SetTwoside(twoside);
//poly->SetEdgeCode(mface->edcode);
meshobj->AddVertex(poly,0,pt0,uv0,uv20,tan0,rgb0,no0,flat,mface->v1);
@@ -1099,6 +1104,10 @@ static PHY_ShapeProps *CreateShapePropsFromBlenderObject(struct Object* blendero
shapeProps->m_do_fh = (blenderobject->gameflag & OB_DO_FH) != 0;
shapeProps->m_do_rot_fh = (blenderobject->gameflag & OB_ROT_FH) != 0;
+// velocity clamping XXX
+ shapeProps->m_clamp_vel_min = blenderobject->min_vel;
+ shapeProps->m_clamp_vel_max = blenderobject->max_vel;
+
return shapeProps;
}
@@ -1116,6 +1125,7 @@ static float my_boundbox_mesh(Mesh *me, float *loc, float *size)
BoundBox *bb;
MT_Point3 min, max;
float mloc[3], msize[3];
+ float radius=0.0f, vert_radius, *co;
int a;
if(me->bb==0) me->bb= (struct BoundBox *)MEM_callocN(sizeof(BoundBox), "boundbox");
@@ -1128,7 +1138,15 @@ static float my_boundbox_mesh(Mesh *me, float *loc, float *size)
mvert= me->mvert;
for(a=0; a<me->totvert; a++, mvert++) {
- DO_MINMAX(mvert->co, min, max);
+ co= mvert->co;
+
+ /* bounds */
+ DO_MINMAX(co, min, max);
+
+ /* radius */
+ vert_radius= co[0]*co[0] + co[1]*co[1] + co[2]*co[2];
+ if (vert_radius > radius)
+ radius= vert_radius;
}
if(me->totvert) {
@@ -1154,13 +1172,6 @@ static float my_boundbox_mesh(Mesh *me, float *loc, float *size)
bb->vec[0][2]=bb->vec[3][2]=bb->vec[4][2]=bb->vec[7][2]= loc[2]-size[2];
bb->vec[1][2]=bb->vec[2][2]=bb->vec[5][2]=bb->vec[6][2]= loc[2]+size[2];
- float radius = 0;
- for (a=0, mvert = me->mvert; a < me->totvert; a++, mvert++)
- {
- float vert_radius = MT_Vector3(mvert->co).length2();
- if (vert_radius > radius)
- radius = vert_radius;
- }
return sqrt(radius);
}
@@ -1265,8 +1276,37 @@ static void my_get_local_bounds(Object *ob, float *center, float *size)
//////////////////////////////////////////////////////
-
-
+void BL_CreateGraphicObjectNew(KX_GameObject* gameobj,
+ const MT_Point3& localAabbMin,
+ const MT_Point3& localAabbMax,
+ KX_Scene* kxscene,
+ bool isActive,
+ e_PhysicsEngine physics_engine)
+{
+ if (gameobj->GetMeshCount() > 0)
+ {
+ switch (physics_engine)
+ {
+#ifdef USE_BULLET
+ case UseBullet:
+ {
+ CcdPhysicsEnvironment* env = (CcdPhysicsEnvironment*)kxscene->GetPhysicsEnvironment();
+ assert(env);
+ PHY_IMotionState* motionstate = new KX_MotionState(gameobj->GetSGNode());
+ CcdGraphicController* ctrl = new CcdGraphicController(env, motionstate);
+ gameobj->SetGraphicController(ctrl);
+ ctrl->setNewClientInfo(gameobj->getClientInfo());
+ ctrl->setLocalAabb(localAabbMin, localAabbMax);
+ if (isActive)
+ env->addCcdGraphicController(ctrl);
+ }
+ break;
+#endif
+ default:
+ break;
+ }
+ }
+}
void BL_CreatePhysicsObjectNew(KX_GameObject* gameobj,
struct Object* blenderobject,
@@ -1642,6 +1682,7 @@ static KX_GameObject *gameobject_from_blenderobject(
bool ignoreActivityCulling =
((ob->gameflag2 & OB_NEVER_DO_ACTIVITY_CULLING)!=0);
gameobj->SetIgnoreActivityCulling(ignoreActivityCulling);
+ gameobj->SetOccluder((ob->gameflag & OB_OCCLUDER) != 0, false);
// two options exists for deform: shape keys and armature
// only support relative shape key
@@ -1859,10 +1900,14 @@ void BL_ConvertBlenderObjects(struct Main* maggie,
if (blenderscene->world) {
kxscene->SetActivityCulling( (blenderscene->world->mode & WO_ACTIVITY_CULLING) != 0);
kxscene->SetActivityCullingRadius(blenderscene->world->activityBoxRadius);
+ kxscene->SetDbvtCulling((blenderscene->world->mode & WO_DBVT_CULLING) != 0);
} else {
kxscene->SetActivityCulling(false);
+ kxscene->SetDbvtCulling(false);
}
-
+ // no occlusion culling by default
+ kxscene->SetDbvtOcclusionRes(0);
+
int activeLayerBitInfo = blenderscene->lay;
// templist to find Root Parents (object with no parents)
@@ -1954,7 +1999,7 @@ void BL_ConvertBlenderObjects(struct Main* maggie,
gameobj->NodeSetLocalPosition(pos);
gameobj->NodeSetLocalOrientation(MT_Matrix3x3(eulxyz));
gameobj->NodeSetLocalScale(scale);
- gameobj->NodeUpdateGS(0,true);
+ gameobj->NodeUpdateGS(0);
BL_ConvertIpos(blenderobject,gameobj,converter);
BL_ConvertMaterialIpos(blenderobject, gameobj, converter);
@@ -2037,7 +2082,7 @@ void BL_ConvertBlenderObjects(struct Main* maggie,
objectlist->Add(gameobj->AddRef());
//tf.Add(gameobj->GetSGNode());
- gameobj->NodeUpdateGS(0,true);
+ gameobj->NodeUpdateGS(0);
gameobj->AddMeshUser();
}
@@ -2148,7 +2193,7 @@ void BL_ConvertBlenderObjects(struct Main* maggie,
gameobj->NodeSetLocalPosition(pos);
gameobj->NodeSetLocalOrientation(MT_Matrix3x3(eulxyz));
gameobj->NodeSetLocalScale(scale);
- gameobj->NodeUpdateGS(0,true);
+ gameobj->NodeUpdateGS(0);
BL_ConvertIpos(blenderobject,gameobj,converter);
BL_ConvertMaterialIpos(blenderobject,gameobj, converter);
@@ -2226,7 +2271,7 @@ void BL_ConvertBlenderObjects(struct Main* maggie,
objectlist->Add(gameobj->AddRef());
//tf.Add(gameobj->GetSGNode());
- gameobj->NodeUpdateGS(0,true);
+ gameobj->NodeUpdateGS(0);
gameobj->AddMeshUser();
}
else
@@ -2309,7 +2354,7 @@ void BL_ConvertBlenderObjects(struct Main* maggie,
// Remove the child reference in the local list!
// Note: there may be descendents already if the children of the child were processed
// by this loop before the child. In that case, we must remove the children also
- CListValue* childrenlist = (CListValue*)childobj->PyGetChildrenRecursive(childobj);
+ CListValue* childrenlist = childobj->GetChildrenRecursive();
childrenlist->Add(childobj->AddRef());
for ( i=0;i<childrenlist->GetCount();i++)
{
@@ -2377,7 +2422,7 @@ void BL_ConvertBlenderObjects(struct Main* maggie,
if (gameobj->GetSGNode()->GetSGParent() == 0)
{
parentlist->Add(gameobj->AddRef());
- gameobj->NodeUpdateGS(0,true);
+ gameobj->NodeUpdateGS(0);
}
}
@@ -2414,6 +2459,27 @@ void BL_ConvertBlenderObjects(struct Main* maggie,
BL_CreatePhysicsObjectNew(gameobj,blenderobject,meshobj,kxscene,layerMask,physics_engine,converter,processCompoundChildren);
}
+ // create graphic controller for culling
+ if (kxscene->GetDbvtCulling())
+ {
+ bool occlusion = false;
+ for (i=0; i<sumolist->GetCount();i++)
+ {
+ KX_GameObject* gameobj = (KX_GameObject*) sumolist->GetValue(i);
+ if (gameobj->GetMeshCount() > 0)
+ {
+ MT_Point3 box[2];
+ gameobj->GetSGNode()->BBox().getmm(box, MT_Transform::Identity());
+ // box[0] is the min, box[1] is the max
+ bool isactive = objectlist->SearchValue(gameobj);
+ BL_CreateGraphicObjectNew(gameobj,box[0],box[1],kxscene,isactive,physics_engine);
+ if (gameobj->GetOccluder())
+ occlusion = true;
+ }
+ }
+ if (occlusion)
+ kxscene->SetDbvtOcclusionRes(blenderscene->world->occlusionRes);
+ }
//set ini linearVel and int angularVel //rcruiz
if (converter->addInitFromFrame)
diff --git a/source/gameengine/Converter/BL_ShapeActionActuator.cpp b/source/gameengine/Converter/BL_ShapeActionActuator.cpp
index f4e3e7e0ae8..b0c9e0f5694 100644
--- a/source/gameengine/Converter/BL_ShapeActionActuator.cpp
+++ b/source/gameengine/Converter/BL_ShapeActionActuator.cpp
@@ -420,22 +420,22 @@ bool BL_ShapeActionActuator::Update(double curtime, bool frame)
/* Integration hooks ------------------------------------------------------- */
PyTypeObject BL_ShapeActionActuator::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"BL_ShapeActionActuator",
- sizeof(BL_ShapeActionActuator),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0, //&MyPyCompare,
- __repr,
- 0, //&cvalue_as_number,
0,
0,
0,
- 0
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
PyParentObject BL_ShapeActionActuator::Parents[] = {
@@ -474,6 +474,7 @@ PyAttributeDef BL_ShapeActionActuator::Attributes[] = {
KX_PYATTRIBUTE_FLOAT_RW("start", 0, MAXFRAMEF, BL_ShapeActionActuator, m_startframe),
KX_PYATTRIBUTE_FLOAT_RW("end", 0, MAXFRAMEF, BL_ShapeActionActuator, m_endframe),
KX_PYATTRIBUTE_FLOAT_RW("blendin", 0, MAXFRAMEF, BL_ShapeActionActuator, m_blendin),
+ KX_PYATTRIBUTE_RW_FUNCTION("action", BL_ShapeActionActuator, pyattr_get_action, pyattr_set_action),
KX_PYATTRIBUTE_SHORT_RW("priority", 0, 100, false, BL_ShapeActionActuator, m_priority),
KX_PYATTRIBUTE_FLOAT_RW_CHECK("frame", 0, MAXFRAMEF, BL_ShapeActionActuator, m_localtime, CheckFrame),
KX_PYATTRIBUTE_STRING_RW("property", 0, 31, false, BL_ShapeActionActuator, m_propname),
@@ -484,50 +485,12 @@ PyAttributeDef BL_ShapeActionActuator::Attributes[] = {
};
-PyObject* BL_ShapeActionActuator::_getattr(const char *attr) {
- if (!strcmp(attr, "action"))
- return PyString_FromString(m_action->id.name+2);
- PyObject* object = _getattr_self(Attributes, this, attr);
- if (object != NULL)
- return object;
- _getattr_up(SCA_IActuator);
+PyObject* BL_ShapeActionActuator::py_getattro(PyObject* attr) {
+ py_getattro_up(SCA_IActuator);
}
-int BL_ShapeActionActuator::_setattr(const char *attr, PyObject* value) {
- if (!strcmp(attr, "action"))
- {
- if (!PyString_Check(value))
- {
- PyErr_SetString(PyExc_ValueError, "expected a string");
- return 1;
- }
-
- STR_String val = PyString_AsString(value);
-
- if (val == "")
- {
- m_action = NULL;
- return 0;
- }
-
- bAction *action;
-
- action = (bAction*)SCA_ILogicBrick::m_sCurrentLogicManager->GetActionByName(val);
-
-
- if (!action)
- {
- PyErr_SetString(PyExc_ValueError, "action not found!");
- return 1;
- }
-
- m_action = action;
- return 0;
- }
- int ret = _setattr_self(Attributes, this, attr, value);
- if (ret >= 0)
- return ret;
- return SCA_IActuator::_setattr(attr, value);
+int BL_ShapeActionActuator::py_setattro(PyObject *attr, PyObject* value) {
+ py_setattro_up(SCA_IActuator);
}
/* setStart */
@@ -535,7 +498,7 @@ const char BL_ShapeActionActuator::GetAction_doc[] =
"getAction()\n"
"\tReturns a string containing the name of the current action.\n";
-PyObject* BL_ShapeActionActuator::PyGetAction(PyObject* self) {
+PyObject* BL_ShapeActionActuator::PyGetAction() {
ShowDeprecationWarning("getAction()", "the action property");
if (m_action){
return PyString_FromString(m_action->id.name+2);
@@ -548,7 +511,7 @@ const char BL_ShapeActionActuator::GetProperty_doc[] =
"getProperty()\n"
"\tReturns the name of the property to be used in FromProp mode.\n";
-PyObject* BL_ShapeActionActuator::PyGetProperty(PyObject* self) {
+PyObject* BL_ShapeActionActuator::PyGetProperty() {
ShowDeprecationWarning("getProperty()", "the property property");
PyObject *result;
@@ -562,7 +525,7 @@ const char BL_ShapeActionActuator::GetFrame_doc[] =
"getFrame()\n"
"\tReturns the current frame number.\n";
-PyObject* BL_ShapeActionActuator::PyGetFrame(PyObject* self) {
+PyObject* BL_ShapeActionActuator::PyGetFrame() {
ShowDeprecationWarning("getFrame()", "the frame property");
PyObject *result;
@@ -576,7 +539,7 @@ const char BL_ShapeActionActuator::GetEnd_doc[] =
"getEnd()\n"
"\tReturns the last frame of the action.\n";
-PyObject* BL_ShapeActionActuator::PyGetEnd(PyObject* self) {
+PyObject* BL_ShapeActionActuator::PyGetEnd() {
ShowDeprecationWarning("getEnd()", "the end property");
PyObject *result;
@@ -590,7 +553,7 @@ const char BL_ShapeActionActuator::GetStart_doc[] =
"getStart()\n"
"\tReturns the starting frame of the action.\n";
-PyObject* BL_ShapeActionActuator::PyGetStart(PyObject* self) {
+PyObject* BL_ShapeActionActuator::PyGetStart() {
ShowDeprecationWarning("getStart()", "the start property");
PyObject *result;
@@ -605,7 +568,7 @@ const char BL_ShapeActionActuator::GetBlendin_doc[] =
"\tReturns the number of interpolation animation frames to be\n"
"\tgenerated when this actuator is triggered.\n";
-PyObject* BL_ShapeActionActuator::PyGetBlendin(PyObject* self) {
+PyObject* BL_ShapeActionActuator::PyGetBlendin() {
ShowDeprecationWarning("getBlendin()", "the blendin property");
PyObject *result;
@@ -620,7 +583,7 @@ const char BL_ShapeActionActuator::GetPriority_doc[] =
"\tReturns the priority for this actuator. Actuators with lower\n"
"\tPriority numbers will override actuators with higher numbers.\n";
-PyObject* BL_ShapeActionActuator::PyGetPriority(PyObject* self) {
+PyObject* BL_ShapeActionActuator::PyGetPriority() {
ShowDeprecationWarning("getPriority()", "the priority property");
PyObject *result;
@@ -640,14 +603,12 @@ const char BL_ShapeActionActuator::SetAction_doc[] =
"\t unchanged. If reset is not specified, the timer will"
"\t be reset.\n";
-PyObject* BL_ShapeActionActuator::PySetAction(PyObject* self,
- PyObject* args,
- PyObject* kwds) {
+PyObject* BL_ShapeActionActuator::PySetAction(PyObject* args) {
ShowDeprecationWarning("setAction()", "the action property");
char *string;
int reset = 1;
- if (PyArg_ParseTuple(args,"s|i",&string, &reset))
+ if (PyArg_ParseTuple(args,"s|i:setAction",&string, &reset))
{
bAction *action;
@@ -675,13 +636,11 @@ const char BL_ShapeActionActuator::SetStart_doc[] =
"setStart(start)\n"
"\t - start : Specifies the starting frame of the animation.\n";
-PyObject* BL_ShapeActionActuator::PySetStart(PyObject* self,
- PyObject* args,
- PyObject* kwds) {
+PyObject* BL_ShapeActionActuator::PySetStart(PyObject* args) {
ShowDeprecationWarning("setStart()", "the start property");
float start;
- if (PyArg_ParseTuple(args,"f",&start))
+ if (PyArg_ParseTuple(args,"f:setStart",&start))
{
m_startframe = start;
}
@@ -697,13 +656,11 @@ const char BL_ShapeActionActuator::SetEnd_doc[] =
"setEnd(end)\n"
"\t - end : Specifies the ending frame of the animation.\n";
-PyObject* BL_ShapeActionActuator::PySetEnd(PyObject* self,
- PyObject* args,
- PyObject* kwds) {
+PyObject* BL_ShapeActionActuator::PySetEnd(PyObject* args) {
ShowDeprecationWarning("setEnd()", "the end property");
float end;
- if (PyArg_ParseTuple(args,"f",&end))
+ if (PyArg_ParseTuple(args,"f:setEnd",&end))
{
m_endframe = end;
}
@@ -720,13 +677,11 @@ const char BL_ShapeActionActuator::SetBlendin_doc[] =
"\t - blendin : Specifies the number of frames of animation to generate\n"
"\t when making transitions between actions.\n";
-PyObject* BL_ShapeActionActuator::PySetBlendin(PyObject* self,
- PyObject* args,
- PyObject* kwds) {
+PyObject* BL_ShapeActionActuator::PySetBlendin(PyObject* args) {
ShowDeprecationWarning("setBlendin()", "the blendin property");
float blendin;
- if (PyArg_ParseTuple(args,"f",&blendin))
+ if (PyArg_ParseTuple(args,"f:setBlendin",&blendin))
{
m_blendin = blendin;
}
@@ -744,13 +699,11 @@ const char BL_ShapeActionActuator::SetBlendtime_doc[] =
"\t used when generating transitions between actions. This\n"
"\t parameter must be in the range from 0.0 to 1.0.\n";
-PyObject* BL_ShapeActionActuator::PySetBlendtime(PyObject* self,
- PyObject* args,
- PyObject* kwds) {
+PyObject* BL_ShapeActionActuator::PySetBlendtime(PyObject* args) {
ShowDeprecationWarning("setBlendtime()", "the blendTime property");
float blendframe;
- if (PyArg_ParseTuple(args,"f",&blendframe))
+ if (PyArg_ParseTuple(args,"f:setBlendtime",&blendframe))
{
m_blendframe = blendframe * m_blendin;
if (m_blendframe<0.f)
@@ -772,13 +725,11 @@ const char BL_ShapeActionActuator::SetPriority_doc[] =
"\t priority numbers will override actuators with higher\n"
"\t numbers.\n";
-PyObject* BL_ShapeActionActuator::PySetPriority(PyObject* self,
- PyObject* args,
- PyObject* kwds) {
+PyObject* BL_ShapeActionActuator::PySetPriority(PyObject* args) {
ShowDeprecationWarning("setPriority()", "the priority property");
int priority;
- if (PyArg_ParseTuple(args,"i",&priority))
+ if (PyArg_ParseTuple(args,"i:setPriority",&priority))
{
m_priority = priority;
}
@@ -794,7 +745,7 @@ const char BL_ShapeActionActuator::GetFrameProperty_doc[] =
"getFrameProperty()\n"
"\tReturns the name of the property, that is set to the current frame number.\n";
-PyObject* BL_ShapeActionActuator::PyGetFrameProperty(PyObject* self) {
+PyObject* BL_ShapeActionActuator::PyGetFrameProperty() {
ShowDeprecationWarning("getFrameProperty()", "the frameProperty property");
PyObject *result;
@@ -809,13 +760,11 @@ const char BL_ShapeActionActuator::SetFrame_doc[] =
"setFrame(frame)\n"
"\t - frame : Specifies the new current frame for the animation\n";
-PyObject* BL_ShapeActionActuator::PySetFrame(PyObject* self,
- PyObject* args,
- PyObject* kwds) {
+PyObject* BL_ShapeActionActuator::PySetFrame(PyObject* args) {
ShowDeprecationWarning("setFrame()", "the frame property");
float frame;
- if (PyArg_ParseTuple(args,"f",&frame))
+ if (PyArg_ParseTuple(args,"f:setFrame",&frame))
{
m_localtime = frame;
if (m_localtime<m_startframe)
@@ -836,13 +785,11 @@ const char BL_ShapeActionActuator::SetProperty_doc[] =
"\t - prop : A string specifying the property name to be used in\n"
"\t FromProp playback mode.\n";
-PyObject* BL_ShapeActionActuator::PySetProperty(PyObject* self,
- PyObject* args,
- PyObject* kwds) {
+PyObject* BL_ShapeActionActuator::PySetProperty(PyObject* args) {
ShowDeprecationWarning("setProperty()", "the property property");
char *string;
- if (PyArg_ParseTuple(args,"s",&string))
+ if (PyArg_ParseTuple(args,"s:setProperty",&string))
{
m_propname = string;
}
@@ -858,13 +805,11 @@ const char BL_ShapeActionActuator::SetFrameProperty_doc[] =
"setFrameProperty(prop)\n"
"\t - prop : A string specifying the property of the frame set up update.\n";
-PyObject* BL_ShapeActionActuator::PySetFrameProperty(PyObject* self,
- PyObject* args,
- PyObject* kwds) {
+PyObject* BL_ShapeActionActuator::PySetFrameProperty(PyObject* args) {
ShowDeprecationWarning("setFrameProperty()", "the frameProperty property");
char *string;
- if (PyArg_ParseTuple(args,"s",&string))
+ if (PyArg_ParseTuple(args,"s:setFrameProperty",&string))
{
m_framepropname = string;
}
@@ -879,7 +824,7 @@ PyObject* BL_ShapeActionActuator::PySetFrameProperty(PyObject* self,
const char BL_ShapeActionActuator::GetType_doc[] =
"getType()\n"
"\tReturns the operation mode of the actuator.\n";
-PyObject* BL_ShapeActionActuator::PyGetType(PyObject* self) {
+PyObject* BL_ShapeActionActuator::PyGetType() {
ShowDeprecationWarning("getType()", "the type property");
return Py_BuildValue("h", m_playtype);
}
@@ -889,13 +834,11 @@ const char BL_ShapeActionActuator::SetType_doc[] =
"setType(mode)\n"
"\t - mode: Play (0), Flipper (2), LoopStop (3), LoopEnd (4) or Property (6)\n"
"\tSet the operation mode of the actuator.\n";
-PyObject* BL_ShapeActionActuator::PySetType(PyObject* self,
- PyObject* args,
- PyObject* kwds) {
+PyObject* BL_ShapeActionActuator::PySetType(PyObject* args) {
ShowDeprecationWarning("setType()", "the type property");
short typeArg;
- if (!PyArg_ParseTuple(args, "h", &typeArg)) {
+ if (!PyArg_ParseTuple(args, "h:setType", &typeArg)) {
return NULL;
}
@@ -914,3 +857,36 @@ PyObject* BL_ShapeActionActuator::PySetType(PyObject* self,
Py_RETURN_NONE;
}
+PyObject* BL_ShapeActionActuator::pyattr_get_action(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ BL_ShapeActionActuator* self= static_cast<BL_ShapeActionActuator*>(self_v);
+ return PyString_FromString(self->GetAction() ? self->GetAction()->id.name+2 : "");
+}
+
+int BL_ShapeActionActuator::pyattr_set_action(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ BL_ShapeActionActuator* self= static_cast<BL_ShapeActionActuator*>(self_v);
+ /* exact copy of BL_ActionActuator's function from here down */
+ if (!PyString_Check(value))
+ {
+ PyErr_SetString(PyExc_ValueError, "actuator.action = val: Shape Action Actuator, expected the string name of the action");
+ return -1;
+ }
+
+ bAction *action= NULL;
+ STR_String val = PyString_AsString(value);
+
+ if (val != "")
+ {
+ action= (bAction*)SCA_ILogicBrick::m_sCurrentLogicManager->GetActionByName(val);
+ if (action==NULL)
+ {
+ PyErr_SetString(PyExc_ValueError, "actuator.action = val: Shape Action Actuator, action not found!");
+ return 1;
+ }
+ }
+
+ self->SetAction(action);
+ return 0;
+
+}
diff --git a/source/gameengine/Converter/BL_ShapeActionActuator.h b/source/gameengine/Converter/BL_ShapeActionActuator.h
index 7f2431bcfa5..3bc35ac9495 100644
--- a/source/gameengine/Converter/BL_ShapeActionActuator.h
+++ b/source/gameengine/Converter/BL_ShapeActionActuator.h
@@ -79,17 +79,20 @@ public:
void SetBlendTime (float newtime);
void BlendShape(struct Key* key, float weigth);
-
- KX_PYMETHOD_DOC(BL_ShapeActionActuator,SetAction);
- KX_PYMETHOD_DOC(BL_ShapeActionActuator,SetBlendin);
- KX_PYMETHOD_DOC(BL_ShapeActionActuator,SetPriority);
- KX_PYMETHOD_DOC(BL_ShapeActionActuator,SetStart);
- KX_PYMETHOD_DOC(BL_ShapeActionActuator,SetEnd);
- KX_PYMETHOD_DOC(BL_ShapeActionActuator,SetFrame);
- KX_PYMETHOD_DOC(BL_ShapeActionActuator,SetProperty);
- KX_PYMETHOD_DOC(BL_ShapeActionActuator,SetFrameProperty);
- KX_PYMETHOD_DOC(BL_ShapeActionActuator,SetBlendtime);
- KX_PYMETHOD_DOC(BL_ShapeActionActuator,SetChannel);
+
+ bAction* GetAction() { return m_action; }
+ void SetAction(bAction* act) { m_action= act; }
+
+ KX_PYMETHOD_DOC_VARARGS(BL_ShapeActionActuator,SetAction);
+ KX_PYMETHOD_DOC_VARARGS(BL_ShapeActionActuator,SetBlendin);
+ KX_PYMETHOD_DOC_VARARGS(BL_ShapeActionActuator,SetPriority);
+ KX_PYMETHOD_DOC_VARARGS(BL_ShapeActionActuator,SetStart);
+ KX_PYMETHOD_DOC_VARARGS(BL_ShapeActionActuator,SetEnd);
+ KX_PYMETHOD_DOC_VARARGS(BL_ShapeActionActuator,SetFrame);
+ KX_PYMETHOD_DOC_VARARGS(BL_ShapeActionActuator,SetProperty);
+ KX_PYMETHOD_DOC_VARARGS(BL_ShapeActionActuator,SetFrameProperty);
+ KX_PYMETHOD_DOC_VARARGS(BL_ShapeActionActuator,SetBlendtime);
+ KX_PYMETHOD_DOC_VARARGS(BL_ShapeActionActuator,SetChannel);
KX_PYMETHOD_DOC_NOARGS(BL_ShapeActionActuator,GetAction);
KX_PYMETHOD_DOC_NOARGS(BL_ShapeActionActuator,GetBlendin);
@@ -101,10 +104,13 @@ public:
KX_PYMETHOD_DOC_NOARGS(BL_ShapeActionActuator,GetFrameProperty);
// KX_PYMETHOD(BL_ActionActuator,GetChannel);
KX_PYMETHOD_DOC_NOARGS(BL_ShapeActionActuator,GetType);
- KX_PYMETHOD_DOC(BL_ShapeActionActuator,SetType);
+ KX_PYMETHOD_DOC_VARARGS(BL_ShapeActionActuator,SetType);
+
+ virtual PyObject* py_getattro(PyObject* attr);
+ virtual int py_setattro(PyObject* attr, PyObject* value);
- virtual PyObject* _getattr(const char *attr);
- virtual int _setattr(const char *attr, PyObject* value);
+ static PyObject* pyattr_get_action(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static int pyattr_set_action(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
static int CheckBlendTime(void *self, const PyAttributeDef*)
{
@@ -138,7 +144,7 @@ public:
case ACT_ACTION_FROM_PROP:
return 0;
default:
- PyErr_SetString(PyExc_ValueError, "invalid type supplied");
+ PyErr_SetString(PyExc_ValueError, "Shape Action Actuator, invalid play type supplied");
return 1;
}
diff --git a/source/gameengine/Converter/CMakeLists.txt b/source/gameengine/Converter/CMakeLists.txt
index a5219b9e759..44692241e6f 100644
--- a/source/gameengine/Converter/CMakeLists.txt
+++ b/source/gameengine/Converter/CMakeLists.txt
@@ -32,7 +32,6 @@ SET(INC
../../../intern/string
../../../intern/guardedalloc
../../../source/gameengine/Rasterizer/RAS_OpenGLRasterizer
- ../../../intern/bmfont
../../../intern/SoundSystem
../../../intern/SoundSystem/include
../../../intern/SoundSystem/openal
diff --git a/source/gameengine/Converter/KX_BlenderSceneConverter.cpp b/source/gameengine/Converter/KX_BlenderSceneConverter.cpp
index 7daca6c32fe..60cf6a4a8ee 100644
--- a/source/gameengine/Converter/KX_BlenderSceneConverter.cpp
+++ b/source/gameengine/Converter/KX_BlenderSceneConverter.cpp
@@ -267,9 +267,11 @@ void KX_BlenderSceneConverter::ConvertScene(const STR_String& scenename,
Scene *blenderscene = GetBlenderSceneForName(scenename);
e_PhysicsEngine physics_engine = UseBullet;
+ bool useDbvtCulling = false;
// hook for registration function during conversion.
m_currentScene = destinationscene;
destinationscene->SetSceneConverter(this);
+ SG_SetActiveStage(SG_STAGE_CONVERTER);
if (blenderscene)
{
@@ -281,6 +283,7 @@ void KX_BlenderSceneConverter::ConvertScene(const STR_String& scenename,
case WOPHY_BULLET:
{
physics_engine = UseBullet;
+ useDbvtCulling = (blenderscene->world->mode & WO_DBVT_CULLING) != 0;
break;
}
@@ -313,7 +316,7 @@ void KX_BlenderSceneConverter::ConvertScene(const STR_String& scenename,
#ifdef USE_BULLET
case UseBullet:
{
- CcdPhysicsEnvironment* ccdPhysEnv = new CcdPhysicsEnvironment();
+ CcdPhysicsEnvironment* ccdPhysEnv = new CcdPhysicsEnvironment(useDbvtCulling);
ccdPhysEnv->setDebugDrawer(new BlenderDebugDraw());
ccdPhysEnv->setDeactivationLinearTreshold(0.8f); // default, can be overridden by Python
ccdPhysEnv->setDeactivationAngularTreshold(1.0f); // default, can be overridden by Python
@@ -808,7 +811,7 @@ void KX_BlenderSceneConverter::resetNoneDynamicObjectToIpo(){
gameobj->NodeSetLocalPosition(pos);
gameobj->NodeSetLocalOrientation(MT_Matrix3x3(eulxyz));
gameobj->NodeSetLocalScale(scale);
- gameobj->NodeUpdateGS(0,true);
+ gameobj->NodeUpdateGS(0);
}
}
}
diff --git a/source/gameengine/Converter/KX_ConvertActuators.cpp b/source/gameengine/Converter/KX_ConvertActuators.cpp
index 3a6122e6608..eb2d0a1c4b1 100644
--- a/source/gameengine/Converter/KX_ConvertActuators.cpp
+++ b/source/gameengine/Converter/KX_ConvertActuators.cpp
@@ -585,15 +585,6 @@ void BL_ConvertActuators(char* maggiename,
originalval = converter->FindGameObject(editobact->ob);
}
}
- MT_Vector3 linvelvec (
- KX_BLENDERTRUNC(editobact->linVelocity[0]),
- KX_BLENDERTRUNC(editobact->linVelocity[1]),
- KX_BLENDERTRUNC(editobact->linVelocity[2]));
-
- MT_Vector3 angvelvec (
- KX_BLENDERTRUNC(editobact->angVelocity[0]),
- KX_BLENDERTRUNC(editobact->angVelocity[1]),
- KX_BLENDERTRUNC(editobact->angVelocity[2]));
KX_SCA_AddObjectActuator* tmpaddact =
new KX_SCA_AddObjectActuator(
@@ -601,9 +592,9 @@ void BL_ConvertActuators(char* maggiename,
originalval,
editobact->time,
scene,
- linvelvec.getValue(),
+ editobact->linVelocity,
(editobact->localflag & ACT_EDOB_LOCAL_LINV)!=0,
- angvelvec.getValue(),
+ editobact->angVelocity,
(editobact->localflag & ACT_EDOB_LOCAL_ANGV)!=0
);
@@ -1017,9 +1008,10 @@ void BL_ConvertActuators(char* maggiename,
bVisibilityActuator *vis_act = (bVisibilityActuator *) bact->data;
KX_VisibilityActuator * tmp_vis_act = NULL;
bool v = ((vis_act->flag & ACT_VISIBILITY_INVISIBLE) != 0);
+ bool o = ((vis_act->flag & ACT_VISIBILITY_OCCLUSION) != 0);
bool recursive = ((vis_act->flag & ACT_VISIBILITY_RECURSIVE) != 0);
- tmp_vis_act = new KX_VisibilityActuator(gameobj, !v, recursive);
+ tmp_vis_act = new KX_VisibilityActuator(gameobj, !v, o, recursive);
baseact = tmp_vis_act;
}
diff --git a/source/gameengine/Converter/KX_ConvertSensors.cpp b/source/gameengine/Converter/KX_ConvertSensors.cpp
index c91197b72a6..7d43b358502 100644
--- a/source/gameengine/Converter/KX_ConvertSensors.cpp
+++ b/source/gameengine/Converter/KX_ConvertSensors.cpp
@@ -520,7 +520,6 @@ void BL_ConvertSensors(struct Object* blenderobject,
starty,
keytype,
trackfocus,
- canvas,
kxscene,
kxengine,
gameobj);
@@ -719,6 +718,11 @@ void BL_ConvertSensors(struct Object* blenderobject,
hatf = bjoy->hatf;
joysticktype = SCA_JoystickSensor::KX_JOYSENSORMODE_HAT;
break;
+ case SENS_JOY_AXIS_SINGLE:
+ axis = bjoy->axis_single;
+ prec = bjoy->precision;
+ joysticktype = SCA_JoystickSensor::KX_JOYSENSORMODE_AXIS_SINGLE;
+ break;
default:
printf("Error: bad case statement\n");
break;
diff --git a/source/gameengine/Converter/SConscript b/source/gameengine/Converter/SConscript
index 98b7c71bad2..af0d39771de 100644
--- a/source/gameengine/Converter/SConscript
+++ b/source/gameengine/Converter/SConscript
@@ -5,7 +5,7 @@ sources = env.Glob('*.cpp')
defs = []
incs = '. #source/kernel/gen_system #intern/string #intern/guardedalloc'
-incs += ' #source/gameengine/Rasterizer/RAS_OpenGLRasterizer #intern/bmfont'
+incs += ' #source/gameengine/Rasterizer/RAS_OpenGLRasterizer'
incs += ' #intern/SoundSystem #intern/SoundSystem/include #intern/SoundSystem/openal'
incs += ' #intern/SoundSystem/dummy #intern/SoundSystem/intern #source/gameengine/Converter'
incs += ' #source/gameengine/BlenderRoutines #source/blender/imbuf'
diff --git a/source/gameengine/Expressions/BoolValue.cpp b/source/gameengine/Expressions/BoolValue.cpp
index cadb34d7e8f..13c870b68e5 100644
--- a/source/gameengine/Expressions/BoolValue.cpp
+++ b/source/gameengine/Expressions/BoolValue.cpp
@@ -181,9 +181,9 @@ ret: the bool stored in the object
-float CBoolValue::GetNumber()
+double CBoolValue::GetNumber()
{
- return (float)m_bool;
+ return (double)m_bool;
}
diff --git a/source/gameengine/Expressions/BoolValue.h b/source/gameengine/Expressions/BoolValue.h
index 6c4d964249f..9352b9d4b92 100644
--- a/source/gameengine/Expressions/BoolValue.h
+++ b/source/gameengine/Expressions/BoolValue.h
@@ -33,7 +33,7 @@ public:
CBoolValue(bool innie, STR_String name, AllocationTYPE alloctype = CValue::HEAPVALUE);
virtual const STR_String& GetText();
- virtual float GetNumber();
+ virtual double GetNumber();
bool GetBool();
virtual void SetValue(CValue* newval);
diff --git a/source/gameengine/Expressions/ConstExpr.cpp b/source/gameengine/Expressions/ConstExpr.cpp
index e33ba091ac4..6b64be9c9a9 100644
--- a/source/gameengine/Expressions/ConstExpr.cpp
+++ b/source/gameengine/Expressions/ConstExpr.cpp
@@ -84,7 +84,7 @@ void CConstExpr::ClearModified()
-float CConstExpr::GetNumber()
+double CConstExpr::GetNumber()
{
return -1;
}
diff --git a/source/gameengine/Expressions/ConstExpr.h b/source/gameengine/Expressions/ConstExpr.h
index e27ece52a83..b117140fe70 100644
--- a/source/gameengine/Expressions/ConstExpr.h
+++ b/source/gameengine/Expressions/ConstExpr.h
@@ -32,7 +32,7 @@ public:
//bool IsInside(float x,float y,float z,bool bBorderInclude=true);
bool NeedsRecalculated();
void ClearModified();
- virtual float GetNumber();
+ virtual double GetNumber();
virtual CValue* Calculate();
CConstExpr(CValue* constval);
CConstExpr();
diff --git a/source/gameengine/Expressions/EmptyValue.cpp b/source/gameengine/Expressions/EmptyValue.cpp
index c2b60e590a4..f72ddc47096 100644
--- a/source/gameengine/Expressions/EmptyValue.cpp
+++ b/source/gameengine/Expressions/EmptyValue.cpp
@@ -76,7 +76,7 @@ this object
-float CEmptyValue::GetNumber()
+double CEmptyValue::GetNumber()
{
return 0;
}
diff --git a/source/gameengine/Expressions/EmptyValue.h b/source/gameengine/Expressions/EmptyValue.h
index b9cca0e57e5..fb6b4a477a6 100644
--- a/source/gameengine/Expressions/EmptyValue.h
+++ b/source/gameengine/Expressions/EmptyValue.h
@@ -27,7 +27,7 @@ public:
virtual ~CEmptyValue();
virtual const STR_String & GetText();
- virtual float GetNumber();
+ virtual double GetNumber();
CListValue* GetPolySoup();
virtual double* GetVector3(bool bGetTransformedVec=false);
bool IsInside(CValue* testpoint,bool bBorderInclude=true);
diff --git a/source/gameengine/Expressions/ErrorValue.cpp b/source/gameengine/Expressions/ErrorValue.cpp
index e52be4c8021..651a772db19 100644
--- a/source/gameengine/Expressions/ErrorValue.cpp
+++ b/source/gameengine/Expressions/ErrorValue.cpp
@@ -99,7 +99,7 @@ ret: a new object containing the result of applying operator op to val and
-float CErrorValue::GetNumber()
+double CErrorValue::GetNumber()
{
return -1;
}
diff --git a/source/gameengine/Expressions/ErrorValue.h b/source/gameengine/Expressions/ErrorValue.h
index 16e608ca01a..5b5795196ba 100644
--- a/source/gameengine/Expressions/ErrorValue.h
+++ b/source/gameengine/Expressions/ErrorValue.h
@@ -23,7 +23,7 @@ class CErrorValue : public CPropValue
public:
virtual const STR_String & GetText();
- virtual float GetNumber();
+ virtual double GetNumber();
CErrorValue();
CErrorValue(STR_String errmsg);
virtual ~CErrorValue();
diff --git a/source/gameengine/Expressions/FloatValue.cpp b/source/gameengine/Expressions/FloatValue.cpp
index 460eaa73f35..212a55fe457 100644
--- a/source/gameengine/Expressions/FloatValue.cpp
+++ b/source/gameengine/Expressions/FloatValue.cpp
@@ -278,7 +278,7 @@ ret: the float stored in the object
-float CFloatValue::GetNumber()
+double CFloatValue::GetNumber()
{
return m_float;
}
@@ -287,7 +287,7 @@ float CFloatValue::GetNumber()
void CFloatValue::SetValue(CValue* newval)
{
- m_float = newval->GetNumber();
+ m_float = (float)newval->GetNumber();
SetModified(true);
}
diff --git a/source/gameengine/Expressions/FloatValue.h b/source/gameengine/Expressions/FloatValue.h
index 33f05f1d7f2..41f70b5c54c 100644
--- a/source/gameengine/Expressions/FloatValue.h
+++ b/source/gameengine/Expressions/FloatValue.h
@@ -28,7 +28,7 @@ public:
virtual const STR_String & GetText();
void Configure(CValue* menuvalue);
- virtual float GetNumber();
+ virtual double GetNumber();
virtual void SetValue(CValue* newval);
float GetFloat();
void SetFloat(float fl);
diff --git a/source/gameengine/Expressions/InputParser.cpp b/source/gameengine/Expressions/InputParser.cpp
index 94663c4a365..66075dd8d42 100644
--- a/source/gameengine/Expressions/InputParser.cpp
+++ b/source/gameengine/Expressions/InputParser.cpp
@@ -39,7 +39,12 @@
#include "IfExpr.h"
#if defined(WIN32) || defined(WIN64)
-#define strcasecmp _stricmp
+#define strcasecmp _stricmp
+
+#ifndef strtoll
+#define strtoll _strtoi64
+#endif
+
#endif /* Def WIN32 or Def WIN64 */
#define NUM_PRIORITY 6
@@ -319,12 +324,14 @@ void CParser::NextSym()
}
}
+#if 0
int CParser::MakeInt() {
// returns the integer representation of the value in the global
// variable const_as_string
// pre: const_as_string contains only numercal chars
return atoi(const_as_string);
}
+#endif
STR_String CParser::Symbol2Str(int s) {
// returns a string representation of of symbol s,
@@ -436,8 +443,8 @@ CExpression *CParser::Ex(int i) {
break;
case inttype:
{
- int temp;
- temp = atoi(const_as_string);
+ cInt temp;
+ temp = strtoll(const_as_string, NULL, 10); /* atoi is for int only */
e1 = new CConstExpr(new CIntValue(temp));
break;
}
@@ -580,7 +587,7 @@ float CParser::GetFloat(STR_String txt)
CExpression* expr = ProcessText(txt);
if (expr) {
val = expr->Calculate();
- result=val->GetNumber();
+ result=(float)val->GetNumber();
@@ -642,7 +649,7 @@ PyObject* CParserPyMake(PyObject* ignored,PyObject* args)
CExpression* expr = parser.ProcessText(txt);
CValue* val = expr->Calculate();
expr->Release();
- return val;
+ return val->GetProxy();
}
static PyMethodDef CParserMethods[] =
diff --git a/source/gameengine/Expressions/InputParser.h b/source/gameengine/Expressions/InputParser.h
index f51c473ba18..3d517222639 100644
--- a/source/gameengine/Expressions/InputParser.h
+++ b/source/gameengine/Expressions/InputParser.h
@@ -94,7 +94,9 @@ private:
void CharRep();
void GrabString(int start);
void NextSym();
+#if 0 /* not used yet */
int MakeInt();
+#endif
STR_String Symbol2Str(int s);
void Term(int s);
int Priority(int optor);
diff --git a/source/gameengine/Expressions/IntValue.cpp b/source/gameengine/Expressions/IntValue.cpp
index fb586cb4979..4e86f7bf789 100644
--- a/source/gameengine/Expressions/IntValue.cpp
+++ b/source/gameengine/Expressions/IntValue.cpp
@@ -42,10 +42,10 @@ effect: constructs a new CIntValue
-CIntValue::CIntValue(int innie)
+CIntValue::CIntValue(cInt innie)
/*
pre:
-effect: constructs a new CIntValue containing int innie
+effect: constructs a new CIntValue containing cInt innie
*/
{
m_int = innie;
@@ -54,7 +54,7 @@ effect: constructs a new CIntValue containing int innie
-CIntValue::CIntValue(int innie,STR_String name,AllocationTYPE alloctype)
+CIntValue::CIntValue(cInt innie,STR_String name,AllocationTYPE alloctype)
{
m_int = innie;
SetName(name);
@@ -280,10 +280,10 @@ this object
-int CIntValue::GetInt()
+cInt CIntValue::GetInt()
/*
pre:
-ret: the int stored in the object
+ret: the cInt stored in the object
*/
{
return m_int;
@@ -291,7 +291,7 @@ ret: the int stored in the object
-float CIntValue::GetNumber()
+double CIntValue::GetNumber()
{
return (float) m_int;
}
@@ -302,7 +302,7 @@ const STR_String & CIntValue::GetText()
{
if (!m_pstrRep)
m_pstrRep=new STR_String();
- m_pstrRep->Format("%d",m_int);
+ m_pstrRep->Format("%lld",m_int);
return *m_pstrRep;
}
@@ -321,7 +321,7 @@ CValue* CIntValue::GetReplica() {
void CIntValue::SetValue(CValue* newval)
{
- m_int = (int)newval->GetNumber();
+ m_int = (cInt)newval->GetNumber();
SetModified(true);
}
@@ -329,5 +329,8 @@ void CIntValue::SetValue(CValue* newval)
PyObject* CIntValue::ConvertValueToPython()
{
- return PyInt_FromLong(m_int);
+ if((m_int > INT_MIN) && (m_int < INT_MAX))
+ return PyInt_FromLong(m_int);
+ else
+ return PyLong_FromLongLong(m_int);
}
diff --git a/source/gameengine/Expressions/IntValue.h b/source/gameengine/Expressions/IntValue.h
index 4fdc1089857..0f3a38b274b 100644
--- a/source/gameengine/Expressions/IntValue.h
+++ b/source/gameengine/Expressions/IntValue.h
@@ -18,18 +18,20 @@
#include "Value.h"
+typedef long long cInt;
+
class CIntValue : public CPropValue
{
//PLUGIN_DECLARE_SERIAL (CIntValue,CValue)
public:
virtual const STR_String& GetText();
- virtual float GetNumber();
+ virtual double GetNumber();
- int GetInt();
+ cInt GetInt();
CIntValue();
- CIntValue(int innie);
- CIntValue(int innie,
+ CIntValue(cInt innie);
+ CIntValue(cInt innie,
STR_String name,
AllocationTYPE alloctype=CValue::HEAPVALUE);
@@ -51,7 +53,7 @@ protected:
virtual ~CIntValue();
private:
- int m_int;
+ cInt m_int;
STR_String* m_pstrRep;
};
diff --git a/source/gameengine/Expressions/ListValue.cpp b/source/gameengine/Expressions/ListValue.cpp
index 90a939af236..dd9b296dce1 100644
--- a/source/gameengine/Expressions/ListValue.cpp
+++ b/source/gameengine/Expressions/ListValue.cpp
@@ -27,59 +27,81 @@
#define Py_ssize_t int
#endif
-Py_ssize_t listvalue_bufferlen(PyObject* list)
+Py_ssize_t listvalue_bufferlen(PyObject* self)
{
- return (Py_ssize_t)( ((CListValue*)list)->GetCount());
+ CListValue *list= static_cast<CListValue *>(BGE_PROXY_REF(self));
+ if (list==NULL)
+ return 0;
+
+ return (Py_ssize_t)list->GetCount();
}
-PyObject* listvalue_buffer_item(PyObject* list,Py_ssize_t index)
+PyObject* listvalue_buffer_item(PyObject* self, Py_ssize_t index)
{
- int count = ((CListValue*) list)->GetCount();
+ CListValue *list= static_cast<CListValue *>(BGE_PROXY_REF(self));
+ if (list==NULL) {
+ PyErr_SetString(PyExc_IndexError, BGE_PROXY_ERROR_MSG);
+ return NULL;
+ }
+
+ int count = list->GetCount();
if (index < 0)
index = count+index;
if (index >= 0 && index < count)
{
- PyObject* pyobj = ((CListValue*) list)->GetValue(index)->ConvertValueToPython();
+ PyObject* pyobj = list->GetValue(index)->ConvertValueToPython();
if (pyobj)
return pyobj;
else
- return ((CListValue*) list)->GetValue(index)->AddRef();
+ return list->GetValue(index)->GetProxy();
}
- PyErr_SetString(PyExc_IndexError, "Python ListIndex out of range");
+ PyErr_SetString(PyExc_IndexError, "list[i]: Python ListIndex out of range in CValueList");
return NULL;
}
-PyObject* listvalue_mapping_subscript(PyObject* list,PyObject* pyindex)
+PyObject* listvalue_mapping_subscript(PyObject* self, PyObject* pyindex)
{
+ CListValue *list= static_cast<CListValue *>(BGE_PROXY_REF(self));
+ if (list==NULL) {
+ PyErr_SetString(PyExc_IndexError, BGE_PROXY_ERROR_MSG);
+ return NULL;
+ }
+
if (PyString_Check(pyindex))
{
STR_String index(PyString_AsString(pyindex));
CValue *item = ((CListValue*) list)->FindValue(index);
if (item)
- return (PyObject*) item;
+ return item->GetProxy();
}
if (PyInt_Check(pyindex))
{
int index = PyInt_AsLong(pyindex);
- return listvalue_buffer_item(list, index);
+ return listvalue_buffer_item(self, index);
}
PyObject *pyindex_str = PyObject_Repr(pyindex); /* new ref */
- PyErr_Format(PyExc_KeyError, "'%s' not in list", PyString_AsString(pyindex_str));
+ PyErr_Format(PyExc_KeyError, "list[key]: '%s' key not in list", PyString_AsString(pyindex_str));
Py_DECREF(pyindex_str);
return NULL;
}
/* just slice it into a python list... */
-PyObject* listvalue_buffer_slice(PyObject* list,Py_ssize_t ilow, Py_ssize_t ihigh)
+PyObject* listvalue_buffer_slice(PyObject* self,Py_ssize_t ilow, Py_ssize_t ihigh)
{
+ CListValue *list= static_cast<CListValue *>(BGE_PROXY_REF(self));
+ if (list==NULL) {
+ PyErr_SetString(PyExc_IndexError, BGE_PROXY_ERROR_MSG);
+ return NULL;
+ }
+
int i, j;
- PyListObject *newlist;
+ PyObject *newlist;
if (ilow < 0) ilow = 0;
@@ -90,18 +112,18 @@ PyObject* listvalue_buffer_slice(PyObject* list,Py_ssize_t ilow, Py_ssize_t ihig
if (ihigh < ilow)
ihigh = ilow;
- newlist = (PyListObject *) PyList_New(ihigh - ilow);
+ newlist = PyList_New(ihigh - ilow);
if (!newlist)
return NULL;
for (i = ilow, j = 0; i < ihigh; i++, j++)
{
- PyObject* pyobj = ((CListValue*) list)->GetValue(i)->ConvertValueToPython();
+ PyObject* pyobj = list->GetValue(i)->ConvertValueToPython();
if (!pyobj)
- pyobj = ((CListValue*) list)->GetValue(i)->AddRef();
- newlist->ob_item[j] = pyobj;
+ pyobj = list->GetValue(i)->GetProxy();
+ PyList_SET_ITEM(newlist, i, pyobj);
}
- return (PyObject *) newlist;
+ return newlist;
}
@@ -109,11 +131,16 @@ PyObject* listvalue_buffer_slice(PyObject* list,Py_ssize_t ilow, Py_ssize_t ihig
static PyObject *
listvalue_buffer_concat(PyObject * self, PyObject * other)
{
+ CListValue *listval= static_cast<CListValue *>(BGE_PROXY_REF(self));
+ if (listval==NULL) {
+ PyErr_SetString(PyExc_IndexError, BGE_PROXY_ERROR_MSG);
+ return NULL;
+ }
+
// for now, we support CListValue concatenated with items
// and CListValue concatenated to Python Lists
// and CListValue concatenated with another CListValue
-
- CListValue* listval = (CListValue*) self;
+
listval->AddRef();
if (other->ob_type == &PyList_Type)
{
@@ -135,7 +162,7 @@ listvalue_buffer_concat(PyObject * self, PyObject * other)
}
if (error) {
- PyErr_SetString(PyExc_SystemError, "Python Error: couldn't add one or more items to a list");
+ PyErr_SetString(PyExc_SystemError, "list.append(val): couldn't add one or more items to this CValueList");
return NULL;
}
@@ -160,7 +187,7 @@ listvalue_buffer_concat(PyObject * self, PyObject * other)
listval->Add(objval);
} else
{
- PyErr_SetString(PyExc_SystemError, "Python Error: couldn't add item to a list");
+ PyErr_SetString(PyExc_SystemError, "list.append(i): couldn't add item to this CValueList");
return NULL;
}
}
@@ -193,23 +220,28 @@ static PyMappingMethods instance_as_mapping = {
PyTypeObject CListValue::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0, /*ob_size*/
"CListValue", /*tp_name*/
- sizeof(CListValue), /*tp_basicsize*/
+ sizeof(PyObjectPlus_Proxy), /*tp_basicsize*/
0, /*tp_itemsize*/
/* methods */
- PyDestructor, /*tp_dealloc*/
+ py_base_dealloc, /*tp_dealloc*/
0, /*tp_print*/
- __getattr, /*tp_getattr*/
- __setattr, /*tp_setattr*/
+ 0, /*tp_getattr*/
+ 0, /*tp_setattr*/
0, /*tp_compare*/
- __repr, /*tp_repr*/
+ py_base_repr, /*tp_repr*/
0, /*tp_as_number*/
&listvalue_as_sequence, /*tp_as_sequence*/
&instance_as_mapping, /*tp_as_mapping*/
0, /*tp_hash*/
0, /*tp_call */
+ 0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
@@ -228,6 +260,7 @@ PyMethodDef CListValue::Methods[] = {
{"reverse", (PyCFunction)CListValue::sPyreverse,METH_NOARGS},
{"index", (PyCFunction)CListValue::sPyindex,METH_O},
{"count", (PyCFunction)CListValue::sPycount,METH_O},
+ {"from_id", (PyCFunction)CListValue::sPyfrom_id,METH_O},
{NULL,NULL} //Sentinel
};
@@ -236,8 +269,8 @@ PyAttributeDef CListValue::Attributes[] = {
{ NULL } //Sentinel
};
-PyObject* CListValue::_getattr(const char *attr) {
- _getattr_up(CValue);
+PyObject* CListValue::py_getattro(PyObject* attr) {
+ py_getattro_up(CValue);
}
@@ -405,14 +438,14 @@ void CListValue::MergeList(CListValue *otherlist)
-PyObject* CListValue::Pyappend(PyObject* self, PyObject* value)
+PyObject* CListValue::Pyappend(PyObject* value)
{
- return listvalue_buffer_concat(self, value);
+ return listvalue_buffer_concat(m_proxy, value); /* m_proxy is the same as self */
}
-PyObject* CListValue::Pyreverse(PyObject* self)
+PyObject* CListValue::Pyreverse()
{
std::reverse(m_pValueArray.begin(),m_pValueArray.end());
Py_RETURN_NONE;
@@ -425,6 +458,10 @@ bool CListValue::CheckEqual(CValue* first,CValue* second)
bool result = false;
CValue* eqval = ((CValue*)first)->Calc(VALUE_EQL_OPERATOR,(CValue*)second);
+
+ if (eqval==NULL)
+ return false;
+
STR_String txt = eqval->GetText();
eqval->Release();
if (txt=="TRUE")
@@ -437,7 +474,7 @@ bool CListValue::CheckEqual(CValue* first,CValue* second)
-PyObject* CListValue::Pyindex(PyObject* self, PyObject *value)
+PyObject* CListValue::Pyindex(PyObject *value)
{
PyObject* result = NULL;
@@ -458,7 +495,7 @@ PyObject* CListValue::Pyindex(PyObject* self, PyObject *value)
checkobj->Release();
if (result==NULL) {
- PyErr_SetString(PyExc_ValueError, "ValueError: list.index(x): x not in CListValue");
+ PyErr_SetString(PyExc_ValueError, "list.index(x): x not in CListValue");
}
return result;
@@ -466,7 +503,7 @@ PyObject* CListValue::Pyindex(PyObject* self, PyObject *value)
-PyObject* CListValue::Pycount(PyObject* self, PyObject* value)
+PyObject* CListValue::Pycount(PyObject* value)
{
int numfound = 0;
@@ -474,7 +511,7 @@ PyObject* CListValue::Pycount(PyObject* self, PyObject* value)
if (checkobj==NULL) { /* in this case just return that there are no items in the list */
PyErr_Clear();
- PyInt_FromLong(0);
+ return PyInt_FromLong(0);
}
int numelem = GetCount();
@@ -493,12 +530,32 @@ PyObject* CListValue::Pycount(PyObject* self, PyObject* value)
+PyObject* CListValue::Pyfrom_id(PyObject* value)
+{
+ uintptr_t id= (uintptr_t)PyLong_AsVoidPtr(value);
+
+ if (PyErr_Occurred())
+ return NULL;
+
+ int numelem = GetCount();
+ for (int i=0;i<numelem;i++)
+ {
+ if (reinterpret_cast<uintptr_t>(m_pValueArray[i]->m_proxy) == id)
+ return GetValue(i)->GetProxy();
+ }
+ PyErr_SetString(PyExc_IndexError, "from_id(#): id not found in CValueList");
+ return NULL;
+
+}
+
+
/* ---------------------------------------------------------------------
* Some stuff taken from the header
* --------------------------------------------------------------------- */
CValue* CListValue::Calc(VALUE_OPERATOR op,CValue *val)
{
- assert(false); // todo: implement me!
+ //assert(false); // todo: implement me!
+ fprintf(stderr, "CValueList::Calc not yet implimented\n");
return NULL;
}
@@ -508,7 +565,8 @@ CValue* CListValue::CalcFinal(VALUE_DATA_TYPE dtype,
VALUE_OPERATOR op,
CValue* val)
{
- assert(false); // todo: implement me!
+ //assert(false); // todo: implement me!
+ fprintf(stderr, "CValueList::CalcFinal not yet implimented\n");
return NULL;
}
@@ -521,7 +579,7 @@ void CListValue::Add(CValue* value)
-float CListValue::GetNumber()
+double CListValue::GetNumber()
{
return -1;
}
diff --git a/source/gameengine/Expressions/ListValue.h b/source/gameengine/Expressions/ListValue.h
index 104e3e63283..2af5a330c43 100644
--- a/source/gameengine/Expressions/ListValue.h
+++ b/source/gameengine/Expressions/ListValue.h
@@ -36,7 +36,7 @@ public:
virtual CValue* CalcFinal(VALUE_DATA_TYPE dtype,
VALUE_OPERATOR op,
CValue* val);
- virtual float GetNumber();
+ virtual double GetNumber();
virtual CValue* GetReplica();
public:
@@ -59,12 +59,21 @@ public:
bool CheckEqual(CValue* first,CValue* second);
- virtual PyObject* _getattr(const char *attr);
+ virtual PyObject* py_getattro(PyObject* attr);
+ virtual PyObject* py_repr(void) {
+ PyObject *py_proxy= this->GetProxy();
+ PyObject *py_list= PySequence_List(py_proxy);
+ PyObject *py_string= PyObject_Repr(py_list);
+ Py_DECREF(py_list);
+ Py_DECREF(py_proxy);
+ return py_string;
+ }
KX_PYMETHOD_O(CListValue,append);
KX_PYMETHOD_NOARGS(CListValue,reverse);
KX_PYMETHOD_O(CListValue,index);
KX_PYMETHOD_O(CListValue,count);
+ KX_PYMETHOD_O(CListValue,from_id);
private:
diff --git a/source/gameengine/Expressions/PyObjectPlus.cpp b/source/gameengine/Expressions/PyObjectPlus.cpp
index 1bead0a7664..6cfa14ddc80 100644
--- a/source/gameengine/Expressions/PyObjectPlus.cpp
+++ b/source/gameengine/Expressions/PyObjectPlus.cpp
@@ -54,50 +54,74 @@
* PyObjectPlus Type -- Every class, even the abstract one should have a Type
------------------------------*/
+
PyTypeObject PyObjectPlus::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0, /*ob_size*/
"PyObjectPlus", /*tp_name*/
- sizeof(PyObjectPlus), /*tp_basicsize*/
+ sizeof(PyObjectPlus_Proxy), /*tp_basicsize*/
0, /*tp_itemsize*/
/* methods */
- PyDestructor, /*tp_dealloc*/
- 0, /*tp_print*/
- __getattr, /*tp_getattr*/
- __setattr, /*tp_setattr*/
- 0, /*tp_compare*/
- __repr, /*tp_repr*/
- 0, /*tp_as_number*/
- 0, /*tp_as_sequence*/
- 0, /*tp_as_mapping*/
- 0, /*tp_hash*/
- 0, /*tp_call */
+ py_base_dealloc,
+ 0,
+ 0,
+ 0,
+ 0,
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
+
PyObjectPlus::~PyObjectPlus()
{
- if (ob_refcnt)
- {
- _Py_ForgetReference(this);
+ if(m_proxy) {
+ Py_DECREF(m_proxy); /* Remove own reference, python may still have 1 */
+ BGE_PROXY_REF(m_proxy)= NULL;
}
// assert(ob_refcnt==0);
}
+void PyObjectPlus::py_base_dealloc(PyObject *self) // python wrapper
+{
+ PyObjectPlus *self_plus= BGE_PROXY_REF(self);
+ if(self_plus) {
+ if(BGE_PROXY_PYOWNS(self)) { /* Does python own this?, then delete it */
+ delete self_plus;
+ }
+
+ BGE_PROXY_REF(self)= NULL; // not really needed
+ }
+ PyObject_DEL( self );
+};
+
PyObjectPlus::PyObjectPlus(PyTypeObject *T) // constructor
{
MT_assert(T != NULL);
- this->ob_type = T;
- _Py_NewReference(this);
+ m_proxy= NULL;
};
/*------------------------------
* PyObjectPlus Methods -- Every class, even the abstract one should have a Methods
------------------------------*/
PyMethodDef PyObjectPlus::Methods[] = {
- {"isA", (PyCFunction) sPy_isA, METH_O},
+ {"isA", (PyCFunction) sPyisA, METH_O},
{NULL, NULL} /* Sentinel */
};
+PyAttributeDef PyObjectPlus::Attributes[] = {
+ KX_PYATTRIBUTE_RO_FUNCTION("isValid", PyObjectPlus, pyattr_get_is_valid),
+ {NULL} //Sentinel
+};
+
+PyObject* PyObjectPlus::pyattr_get_is_valid(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ Py_RETURN_TRUE;
+}
+
/*------------------------------
* PyObjectPlus Parents -- Every class, even the abstract one should have parents
------------------------------*/
@@ -106,566 +130,621 @@ PyParentObject PyObjectPlus::Parents[] = {&PyObjectPlus::Type, NULL};
/*------------------------------
* PyObjectPlus attributes -- attributes
------------------------------*/
-PyObject *PyObjectPlus::_getattr(const char *attr)
+
+
+/* This should be the entry in Type since it takes the C++ class from PyObjectPlus_Proxy */
+PyObject *PyObjectPlus::py_base_getattro(PyObject * self, PyObject *attr)
+{
+ PyObjectPlus *self_plus= BGE_PROXY_REF(self);
+ if(self_plus==NULL) {
+ if(!strcmp("isValid", PyString_AsString(attr))) {
+ Py_RETURN_TRUE;
+ }
+ PyErr_SetString(PyExc_RuntimeError, BGE_PROXY_ERROR_MSG);
+ return NULL;
+ }
+ return self_plus->py_getattro(attr);
+}
+
+/* This should be the entry in Type since it takes the C++ class from PyObjectPlus_Proxy */
+int PyObjectPlus::py_base_setattro(PyObject *self, PyObject *attr, PyObject *value)
{
- if (!strcmp(attr, "__doc__") && GetType()->tp_doc)
- return PyString_FromString(GetType()->tp_doc);
+ PyObjectPlus *self_plus= BGE_PROXY_REF(self);
+ if(self_plus==NULL) {
+ PyErr_SetString(PyExc_RuntimeError, BGE_PROXY_ERROR_MSG);
+ return -1;
+ }
+
+ if (value==NULL)
+ return self_plus->py_delattro(attr);
+
+ return self_plus->py_setattro(attr, value);
+}
- //if (streq(attr, "type"))
- // return Py_BuildValue("s", (*(GetParents()))->tp_name);
+PyObject *PyObjectPlus::py_base_repr(PyObject *self) // This should be the entry in Type.
+{
+
+ PyObjectPlus *self_plus= BGE_PROXY_REF(self);
+ if(self_plus==NULL) {
+ PyErr_SetString(PyExc_RuntimeError, BGE_PROXY_ERROR_MSG);
+ return NULL;
+ }
+
+ return self_plus->py_repr();
+}
- return Py_FindMethod(Methods, this, attr);
+PyObject *PyObjectPlus::py_getattro(PyObject* attr)
+{
+ PyObject *descr = PyDict_GetItem(Type.tp_dict, attr); \
+ if (descr == NULL) {
+ if (strcmp(PyString_AsString(attr), "__dict__")==0) {
+ return py_getattr_dict(NULL, Type.tp_dict); /* no Attributes yet */
+ }
+ PyErr_Format(PyExc_AttributeError, "attribute \"%s\" not found", PyString_AsString(attr));
+ return NULL;
+ } else {
+ /* Copied from py_getattro_up */
+ if (PyCObject_Check(descr)) {
+ return py_get_attrdef((void *)this, (const PyAttributeDef*)PyCObject_AsVoidPtr(descr));
+ } else if (descr->ob_type->tp_descr_get) {
+ return PyCFunction_New(((PyMethodDescrObject *)descr)->d_method, this->m_proxy);
+ } else {
+ fprintf(stderr, "Unknown attribute type (PyObjectPlus::py_getattro)");
+ return descr;
+ }
+ /* end py_getattro_up copy */
+ }
}
-int PyObjectPlus::_delattr(const char *attr)
+int PyObjectPlus::py_delattro(PyObject* attr)
{
PyErr_SetString(PyExc_AttributeError, "attribute cant be deleted");
return 1;
}
-int PyObjectPlus::_setattr(const char *attr, PyObject *value)
+int PyObjectPlus::py_setattro(PyObject *attr, PyObject* value)
{
- //return PyObject::_setattr(attr,value);
- //cerr << "Unknown attribute" << endl;
PyErr_SetString(PyExc_AttributeError, "attribute cant be set");
- return 1;
+ return PY_SET_ATTR_MISSING;
}
-PyObject *PyObjectPlus::_getattr_self(const PyAttributeDef attrlist[], void *self, const char *attr)
+PyObject *PyObjectPlus::py_get_attrdef(void *self, const PyAttributeDef *attrdef)
{
- const PyAttributeDef *attrdef;
- for (attrdef=attrlist; attrdef->m_name != NULL; attrdef++)
+ if (attrdef->m_type == KX_PYATTRIBUTE_TYPE_DUMMY)
+ {
+ // fake attribute, ignore
+ return NULL;
+ }
+ if (attrdef->m_type == KX_PYATTRIBUTE_TYPE_FUNCTION)
+ {
+ // the attribute has no field correspondance, handover processing to function.
+ if (attrdef->m_getFunction == NULL)
+ return NULL;
+ return (*attrdef->m_getFunction)(self, attrdef);
+ }
+ char *ptr = reinterpret_cast<char*>(self)+attrdef->m_offset;
+ if (attrdef->m_length > 1)
{
- if (!strcmp(attr, attrdef->m_name))
+ PyObject* resultlist = PyList_New(attrdef->m_length);
+ for (unsigned int i=0; i<attrdef->m_length; i++)
{
- if (attrdef->m_type == KX_PYATTRIBUTE_TYPE_DUMMY)
+ switch (attrdef->m_type) {
+ case KX_PYATTRIBUTE_TYPE_BOOL:
+ {
+ bool *val = reinterpret_cast<bool*>(ptr);
+ ptr += sizeof(bool);
+ PyList_SetItem(resultlist,i,PyInt_FromLong(*val));
+ break;
+ }
+ case KX_PYATTRIBUTE_TYPE_SHORT:
+ {
+ short int *val = reinterpret_cast<short int*>(ptr);
+ ptr += sizeof(short int);
+ PyList_SetItem(resultlist,i,PyInt_FromLong(*val));
+ break;
+ }
+ case KX_PYATTRIBUTE_TYPE_ENUM:
+ // enum are like int, just make sure the field size is the same
+ if (sizeof(int) != attrdef->m_size)
+ {
+ Py_DECREF(resultlist);
+ return NULL;
+ }
+ // walkthrough
+ case KX_PYATTRIBUTE_TYPE_INT:
+ {
+ int *val = reinterpret_cast<int*>(ptr);
+ ptr += sizeof(int);
+ PyList_SetItem(resultlist,i,PyInt_FromLong(*val));
+ break;
+ }
+ case KX_PYATTRIBUTE_TYPE_FLOAT:
+ {
+ float *val = reinterpret_cast<float*>(ptr);
+ ptr += sizeof(float);
+ PyList_SetItem(resultlist,i,PyFloat_FromDouble(*val));
+ break;
+ }
+ default:
+ // no support for array of complex data
+ Py_DECREF(resultlist);
+ return NULL;
+ }
+ }
+ return resultlist;
+ }
+ else
+ {
+ switch (attrdef->m_type) {
+ case KX_PYATTRIBUTE_TYPE_BOOL:
+ {
+ bool *val = reinterpret_cast<bool*>(ptr);
+ return PyInt_FromLong(*val);
+ }
+ case KX_PYATTRIBUTE_TYPE_SHORT:
+ {
+ short int *val = reinterpret_cast<short int*>(ptr);
+ return PyInt_FromLong(*val);
+ }
+ case KX_PYATTRIBUTE_TYPE_ENUM:
+ // enum are like int, just make sure the field size is the same
+ if (sizeof(int) != attrdef->m_size)
{
- // fake attribute, ignore
return NULL;
}
- char *ptr = reinterpret_cast<char*>(self)+attrdef->m_offset;
- if (attrdef->m_length > 1)
+ // walkthrough
+ case KX_PYATTRIBUTE_TYPE_INT:
{
- PyObject* resultlist = PyList_New(attrdef->m_length);
- for (unsigned int i=0; i<attrdef->m_length; i++)
- {
- switch (attrdef->m_type) {
- case KX_PYATTRIBUTE_TYPE_BOOL:
- {
- bool *val = reinterpret_cast<bool*>(ptr);
- ptr += sizeof(bool);
- PyList_SetItem(resultlist,i,PyInt_FromLong(*val));
- break;
- }
- case KX_PYATTRIBUTE_TYPE_SHORT:
- {
- short int *val = reinterpret_cast<short int*>(ptr);
- ptr += sizeof(short int);
- PyList_SetItem(resultlist,i,PyInt_FromLong(*val));
- break;
- }
- case KX_PYATTRIBUTE_TYPE_ENUM:
- // enum are like int, just make sure the field size is the same
- if (sizeof(int) != attrdef->m_size)
- {
- Py_DECREF(resultlist);
- return NULL;
- }
- // walkthrough
- case KX_PYATTRIBUTE_TYPE_INT:
- {
- int *val = reinterpret_cast<int*>(ptr);
- ptr += sizeof(int);
- PyList_SetItem(resultlist,i,PyInt_FromLong(*val));
- break;
- }
- case KX_PYATTRIBUTE_TYPE_FLOAT:
- {
- float *val = reinterpret_cast<float*>(ptr);
- ptr += sizeof(float);
- PyList_SetItem(resultlist,i,PyFloat_FromDouble(*val));
- break;
- }
- default:
- // no support for array of complex data
- Py_DECREF(resultlist);
- return NULL;
- }
- }
- return resultlist;
+ int *val = reinterpret_cast<int*>(ptr);
+ return PyInt_FromLong(*val);
}
- else
+ case KX_PYATTRIBUTE_TYPE_FLOAT:
{
- switch (attrdef->m_type) {
- case KX_PYATTRIBUTE_TYPE_BOOL:
- {
- bool *val = reinterpret_cast<bool*>(ptr);
- return PyInt_FromLong(*val);
- }
- case KX_PYATTRIBUTE_TYPE_SHORT:
- {
- short int *val = reinterpret_cast<short int*>(ptr);
- return PyInt_FromLong(*val);
- }
- case KX_PYATTRIBUTE_TYPE_ENUM:
- // enum are like int, just make sure the field size is the same
- if (sizeof(int) != attrdef->m_size)
- {
- return NULL;
- }
- // walkthrough
- case KX_PYATTRIBUTE_TYPE_INT:
- {
- int *val = reinterpret_cast<int*>(ptr);
- return PyInt_FromLong(*val);
- }
- case KX_PYATTRIBUTE_TYPE_FLOAT:
- {
- float *val = reinterpret_cast<float*>(ptr);
- return PyFloat_FromDouble(*val);
- }
- case KX_PYATTRIBUTE_TYPE_STRING:
- {
- STR_String *val = reinterpret_cast<STR_String*>(ptr);
- return PyString_FromString(*val);
- }
- default:
- return NULL;
- }
+ float *val = reinterpret_cast<float*>(ptr);
+ return PyFloat_FromDouble(*val);
}
+ case KX_PYATTRIBUTE_TYPE_STRING:
+ {
+ STR_String *val = reinterpret_cast<STR_String*>(ptr);
+ return PyString_FromString(*val);
+ }
+ default:
+ return NULL;
}
}
- return NULL;
}
-int PyObjectPlus::_setattr_self(const PyAttributeDef attrlist[], void *self, const char *attr, PyObject *value)
+int PyObjectPlus::py_set_attrdef(void *self, const PyAttributeDef *attrdef, PyObject *value)
{
- const PyAttributeDef *attrdef;
void *undoBuffer = NULL;
void *sourceBuffer = NULL;
size_t bufferSize = 0;
-
- for (attrdef=attrlist; attrdef->m_name != NULL; attrdef++)
+
+ char *ptr = reinterpret_cast<char*>(self)+attrdef->m_offset;
+ if (attrdef->m_length > 1)
{
- if (!strcmp(attr, attrdef->m_name))
+ if (!PySequence_Check(value))
+ {
+ PyErr_Format(PyExc_TypeError, "expected a sequence for attribute \"%s\"", attrdef->m_name);
+ return 1;
+ }
+ if (PySequence_Size(value) != attrdef->m_length)
{
- if (attrdef->m_access == KX_PYATTRIBUTE_RO ||
- attrdef->m_type == KX_PYATTRIBUTE_TYPE_DUMMY)
+ PyErr_Format(PyExc_TypeError, "incorrect number of elements in sequence for attribute \"%s\"", attrdef->m_name);
+ return 1;
+ }
+ switch (attrdef->m_type)
+ {
+ case KX_PYATTRIBUTE_TYPE_FUNCTION:
+ if (attrdef->m_setFunction == NULL)
{
- PyErr_SetString(PyExc_AttributeError, "property is read-only");
+ PyErr_Format(PyExc_AttributeError, "function attribute without function for attribute \"%s\", report to blender.org", attrdef->m_name);
return 1;
}
- char *ptr = reinterpret_cast<char*>(self)+attrdef->m_offset;
- if (attrdef->m_length > 1)
+ return (*attrdef->m_setFunction)(self, attrdef, value);
+ case KX_PYATTRIBUTE_TYPE_BOOL:
+ bufferSize = sizeof(bool);
+ break;
+ case KX_PYATTRIBUTE_TYPE_SHORT:
+ bufferSize = sizeof(short int);
+ break;
+ case KX_PYATTRIBUTE_TYPE_ENUM:
+ case KX_PYATTRIBUTE_TYPE_INT:
+ bufferSize = sizeof(int);
+ break;
+ case KX_PYATTRIBUTE_TYPE_FLOAT:
+ bufferSize = sizeof(float);
+ break;
+ default:
+ // should not happen
+ PyErr_Format(PyExc_AttributeError, "Unsupported attribute type for attribute \"%s\", report to blender.org", attrdef->m_name);
+ return 1;
+ }
+ // let's implement a smart undo method
+ bufferSize *= attrdef->m_length;
+ undoBuffer = malloc(bufferSize);
+ sourceBuffer = ptr;
+ if (undoBuffer)
+ {
+ memcpy(undoBuffer, sourceBuffer, bufferSize);
+ }
+ for (int i=0; i<attrdef->m_length; i++)
+ {
+ PyObject *item = PySequence_GetItem(value, i); /* new ref */
+ // we can decrement the reference immediately, the reference count
+ // is at least 1 because the item is part of an array
+ Py_DECREF(item);
+ switch (attrdef->m_type)
{
- if (!PySequence_Check(value))
- {
- PyErr_SetString(PyExc_TypeError, "expected a sequence");
- return 1;
- }
- if (PySequence_Size(value) != attrdef->m_length)
- {
- PyErr_SetString(PyExc_TypeError, "incorrect number of elements in sequence");
- return 1;
- }
- switch (attrdef->m_type)
+ case KX_PYATTRIBUTE_TYPE_BOOL:
{
- case KX_PYATTRIBUTE_TYPE_BOOL:
- bufferSize = sizeof(bool);
- break;
- case KX_PYATTRIBUTE_TYPE_SHORT:
- bufferSize = sizeof(short int);
- break;
- case KX_PYATTRIBUTE_TYPE_ENUM:
- case KX_PYATTRIBUTE_TYPE_INT:
- bufferSize = sizeof(int);
- break;
- case KX_PYATTRIBUTE_TYPE_FLOAT:
- bufferSize = sizeof(float);
+ bool *var = reinterpret_cast<bool*>(ptr);
+ ptr += sizeof(bool);
+ if (PyInt_Check(item))
+ {
+ *var = (PyInt_AsLong(item) != 0);
+ }
+ else if (PyBool_Check(item))
+ {
+ *var = (item == Py_True);
+ }
+ else
+ {
+ PyErr_Format(PyExc_TypeError, "expected an integer or a bool for attribute \"%s\"", attrdef->m_name);
+ goto UNDO_AND_ERROR;
+ }
break;
- default:
- // should not happen
- PyErr_SetString(PyExc_AttributeError, "Unsupported attribute type, report to blender.org");
- return 1;
}
- // let's implement a smart undo method
- bufferSize *= attrdef->m_length;
- undoBuffer = malloc(bufferSize);
- sourceBuffer = ptr;
- if (undoBuffer)
+ case KX_PYATTRIBUTE_TYPE_SHORT:
{
- memcpy(undoBuffer, sourceBuffer, bufferSize);
- }
- for (int i=0; i<attrdef->m_length; i++)
- {
- PyObject *item = PySequence_GetItem(value, i); /* new ref */
- // we can decrement the reference immediately, the reference count
- // is at least 1 because the item is part of an array
- Py_DECREF(item);
- switch (attrdef->m_type)
+ short int *var = reinterpret_cast<short int*>(ptr);
+ ptr += sizeof(short int);
+ if (PyInt_Check(item))
{
- case KX_PYATTRIBUTE_TYPE_BOOL:
- {
- bool *var = reinterpret_cast<bool*>(ptr);
- ptr += sizeof(bool);
- if (PyInt_Check(item))
- {
- *var = (PyInt_AsLong(item) != 0);
- }
- else if (PyBool_Check(item))
- {
- *var = (item == Py_True);
- }
- else
- {
- PyErr_SetString(PyExc_TypeError, "expected an integer or a bool");
- goto UNDO_AND_ERROR;
- }
- break;
- }
- case KX_PYATTRIBUTE_TYPE_SHORT:
+ long val = PyInt_AsLong(item);
+ if (attrdef->m_clamp)
{
- short int *var = reinterpret_cast<short int*>(ptr);
- ptr += sizeof(short int);
- if (PyInt_Check(item))
- {
- long val = PyInt_AsLong(item);
- if (attrdef->m_clamp)
- {
- if (val < attrdef->m_imin)
- val = attrdef->m_imin;
- else if (val > attrdef->m_imax)
- val = attrdef->m_imax;
- }
- else if (val < attrdef->m_imin || val > attrdef->m_imax)
- {
- PyErr_SetString(PyExc_ValueError, "item value out of range");
- goto UNDO_AND_ERROR;
- }
- *var = (short int)val;
- }
- else
- {
- PyErr_SetString(PyExc_TypeError, "expected an integer");
- goto UNDO_AND_ERROR;
- }
- break;
+ if (val < attrdef->m_imin)
+ val = attrdef->m_imin;
+ else if (val > attrdef->m_imax)
+ val = attrdef->m_imax;
}
- case KX_PYATTRIBUTE_TYPE_ENUM:
- // enum are equivalent to int, just make sure that the field size matches:
- if (sizeof(int) != attrdef->m_size)
+ else if (val < attrdef->m_imin || val > attrdef->m_imax)
{
- PyErr_SetString(PyExc_AttributeError, "attribute size check error, report to blender.org");
+ PyErr_Format(PyExc_ValueError, "item value out of range for attribute \"%s\"", attrdef->m_name);
goto UNDO_AND_ERROR;
}
- // walkthrough
- case KX_PYATTRIBUTE_TYPE_INT:
+ *var = (short int)val;
+ }
+ else
+ {
+ PyErr_Format(PyExc_TypeError, "expected an integer for attribute \"%s\"", attrdef->m_name);
+ goto UNDO_AND_ERROR;
+ }
+ break;
+ }
+ case KX_PYATTRIBUTE_TYPE_ENUM:
+ // enum are equivalent to int, just make sure that the field size matches:
+ if (sizeof(int) != attrdef->m_size)
+ {
+ PyErr_Format(PyExc_AttributeError, "Size check error for attribute, \"%s\", report to blender.org", attrdef->m_name);
+ goto UNDO_AND_ERROR;
+ }
+ // walkthrough
+ case KX_PYATTRIBUTE_TYPE_INT:
+ {
+ int *var = reinterpret_cast<int*>(ptr);
+ ptr += sizeof(int);
+ if (PyInt_Check(item))
+ {
+ long val = PyInt_AsLong(item);
+ if (attrdef->m_clamp)
{
- int *var = reinterpret_cast<int*>(ptr);
- ptr += sizeof(int);
- if (PyInt_Check(item))
- {
- long val = PyInt_AsLong(item);
- if (attrdef->m_clamp)
- {
- if (val < attrdef->m_imin)
- val = attrdef->m_imin;
- else if (val > attrdef->m_imax)
- val = attrdef->m_imax;
- }
- else if (val < attrdef->m_imin || val > attrdef->m_imax)
- {
- PyErr_SetString(PyExc_ValueError, "item value out of range");
- goto UNDO_AND_ERROR;
- }
- *var = (int)val;
- }
- else
- {
- PyErr_SetString(PyExc_TypeError, "expected an integer");
- goto UNDO_AND_ERROR;
- }
- break;
+ if (val < attrdef->m_imin)
+ val = attrdef->m_imin;
+ else if (val > attrdef->m_imax)
+ val = attrdef->m_imax;
}
- case KX_PYATTRIBUTE_TYPE_FLOAT:
+ else if (val < attrdef->m_imin || val > attrdef->m_imax)
{
- float *var = reinterpret_cast<float*>(ptr);
- ptr += sizeof(float);
- double val = PyFloat_AsDouble(item);
- if (val == -1.0 && PyErr_Occurred())
- {
- PyErr_SetString(PyExc_TypeError, "expected a float");
- goto UNDO_AND_ERROR;
- }
- else if (attrdef->m_clamp)
- {
- if (val < attrdef->m_fmin)
- val = attrdef->m_fmin;
- else if (val > attrdef->m_fmax)
- val = attrdef->m_fmax;
- }
- else if (val < attrdef->m_fmin || val > attrdef->m_fmax)
- {
- PyErr_SetString(PyExc_ValueError, "item value out of range");
- goto UNDO_AND_ERROR;
- }
- *var = (float)val;
- break;
+ PyErr_Format(PyExc_ValueError, "item value out of range for attribute \"%s\"", attrdef->m_name);
+ goto UNDO_AND_ERROR;
}
- default:
- // should not happen
- PyErr_SetString(PyExc_AttributeError, "attribute type check error, report to blender.org");
+ *var = (int)val;
+ }
+ else
+ {
+ PyErr_Format(PyExc_TypeError, "expected an integer for attribute \"%s\"", attrdef->m_name);
goto UNDO_AND_ERROR;
}
+ break;
}
- // no error, call check function if any
- if (attrdef->m_function != NULL)
+ case KX_PYATTRIBUTE_TYPE_FLOAT:
{
- if ((*attrdef->m_function)(self, attrdef) != 0)
+ float *var = reinterpret_cast<float*>(ptr);
+ ptr += sizeof(float);
+ double val = PyFloat_AsDouble(item);
+ if (val == -1.0 && PyErr_Occurred())
{
- // post check returned an error, restore values
- UNDO_AND_ERROR:
- if (undoBuffer)
- {
- memcpy(sourceBuffer, undoBuffer, bufferSize);
- free(undoBuffer);
- }
- return 1;
+ PyErr_Format(PyExc_TypeError, "expected a float for attribute \"%s\"", attrdef->m_name);
+ goto UNDO_AND_ERROR;
}
+ else if (attrdef->m_clamp)
+ {
+ if (val < attrdef->m_fmin)
+ val = attrdef->m_fmin;
+ else if (val > attrdef->m_fmax)
+ val = attrdef->m_fmax;
+ }
+ else if (val < attrdef->m_fmin || val > attrdef->m_fmax)
+ {
+ PyErr_Format(PyExc_ValueError, "item value out of range for attribute \"%s\"", attrdef->m_name);
+ goto UNDO_AND_ERROR;
+ }
+ *var = (float)val;
+ break;
}
+ default:
+ // should not happen
+ PyErr_Format(PyExc_AttributeError, "type check error for attribute \"%s\", report to blender.org", attrdef->m_name);
+ goto UNDO_AND_ERROR;
+ }
+ }
+ // no error, call check function if any
+ if (attrdef->m_checkFunction != NULL)
+ {
+ if ((*attrdef->m_checkFunction)(self, attrdef) != 0)
+ {
+ // post check returned an error, restore values
+ UNDO_AND_ERROR:
if (undoBuffer)
+ {
+ memcpy(sourceBuffer, undoBuffer, bufferSize);
free(undoBuffer);
- return 0;
+ }
+ return 1;
+ }
+ }
+ if (undoBuffer)
+ free(undoBuffer);
+ return 0;
+ }
+ else // simple attribute value
+ {
+ if (attrdef->m_type == KX_PYATTRIBUTE_TYPE_FUNCTION)
+ {
+ if (attrdef->m_setFunction == NULL)
+ {
+ PyErr_Format(PyExc_AttributeError, "function attribute without function \"%s\", report to blender.org", attrdef->m_name);
+ return 1;
}
- else // simple attribute value
+ return (*attrdef->m_setFunction)(self, attrdef, value);
+ }
+ if (attrdef->m_checkFunction != NULL)
+ {
+ // post check function is provided, prepare undo buffer
+ sourceBuffer = ptr;
+ switch (attrdef->m_type)
{
-
- if (attrdef->m_function != NULL)
+ case KX_PYATTRIBUTE_TYPE_BOOL:
+ bufferSize = sizeof(bool);
+ break;
+ case KX_PYATTRIBUTE_TYPE_SHORT:
+ bufferSize = sizeof(short);
+ break;
+ case KX_PYATTRIBUTE_TYPE_ENUM:
+ case KX_PYATTRIBUTE_TYPE_INT:
+ bufferSize = sizeof(int);
+ break;
+ case KX_PYATTRIBUTE_TYPE_FLOAT:
+ bufferSize = sizeof(float);
+ break;
+ case KX_PYATTRIBUTE_TYPE_STRING:
+ sourceBuffer = reinterpret_cast<STR_String*>(ptr)->Ptr();
+ if (sourceBuffer)
+ bufferSize = strlen(reinterpret_cast<char*>(sourceBuffer))+1;
+ break;
+ default:
+ PyErr_Format(PyExc_AttributeError, "unknown type for attribute \"%s\", report to blender.org", attrdef->m_name);
+ return 1;
+ }
+ if (bufferSize)
+ {
+ undoBuffer = malloc(bufferSize);
+ if (undoBuffer)
+ {
+ memcpy(undoBuffer, sourceBuffer, bufferSize);
+ }
+ }
+ }
+
+ switch (attrdef->m_type)
+ {
+ case KX_PYATTRIBUTE_TYPE_BOOL:
+ {
+ bool *var = reinterpret_cast<bool*>(ptr);
+ if (PyInt_Check(value))
+ {
+ *var = (PyInt_AsLong(value) != 0);
+ }
+ else if (PyBool_Check(value))
+ {
+ *var = (value == Py_True);
+ }
+ else
+ {
+ PyErr_Format(PyExc_TypeError, "expected an integer or a bool for attribute \"%s\"", attrdef->m_name);
+ goto FREE_AND_ERROR;
+ }
+ break;
+ }
+ case KX_PYATTRIBUTE_TYPE_SHORT:
+ {
+ short int *var = reinterpret_cast<short int*>(ptr);
+ if (PyInt_Check(value))
{
- // post check function is provided, prepare undo buffer
- sourceBuffer = ptr;
- switch (attrdef->m_type)
+ long val = PyInt_AsLong(value);
+ if (attrdef->m_clamp)
{
- case KX_PYATTRIBUTE_TYPE_BOOL:
- bufferSize = sizeof(bool);
- break;
- case KX_PYATTRIBUTE_TYPE_SHORT:
- bufferSize = sizeof(short);
- break;
- case KX_PYATTRIBUTE_TYPE_ENUM:
- case KX_PYATTRIBUTE_TYPE_INT:
- bufferSize = sizeof(int);
- break;
- case KX_PYATTRIBUTE_TYPE_FLOAT:
- bufferSize = sizeof(float);
- break;
- case KX_PYATTRIBUTE_TYPE_STRING:
- sourceBuffer = reinterpret_cast<STR_String*>(ptr)->Ptr();
- if (sourceBuffer)
- bufferSize = strlen(reinterpret_cast<char*>(sourceBuffer))+1;
- break;
- default:
- PyErr_SetString(PyExc_AttributeError, "unknown attribute type, report to blender.org");
- return 1;
+ if (val < attrdef->m_imin)
+ val = attrdef->m_imin;
+ else if (val > attrdef->m_imax)
+ val = attrdef->m_imax;
}
- if (bufferSize)
+ else if (val < attrdef->m_imin || val > attrdef->m_imax)
{
- undoBuffer = malloc(bufferSize);
- if (undoBuffer)
- {
- memcpy(undoBuffer, sourceBuffer, bufferSize);
- }
+ PyErr_Format(PyExc_ValueError, "value out of range for attribute \"%s\"", attrdef->m_name);
+ goto FREE_AND_ERROR;
}
+ *var = (short int)val;
}
-
- switch (attrdef->m_type)
+ else
{
- case KX_PYATTRIBUTE_TYPE_BOOL:
- {
- bool *var = reinterpret_cast<bool*>(ptr);
- if (PyInt_Check(value))
- {
- *var = (PyInt_AsLong(value) != 0);
- }
- else if (PyBool_Check(value))
- {
- *var = (value == Py_True);
- }
- else
- {
- PyErr_SetString(PyExc_TypeError, "expected an integer or a bool");
- goto FREE_AND_ERROR;
- }
- break;
- }
- case KX_PYATTRIBUTE_TYPE_SHORT:
+ PyErr_Format(PyExc_TypeError, "expected an integer for attribute \"%s\"", attrdef->m_name);
+ goto FREE_AND_ERROR;
+ }
+ break;
+ }
+ case KX_PYATTRIBUTE_TYPE_ENUM:
+ // enum are equivalent to int, just make sure that the field size matches:
+ if (sizeof(int) != attrdef->m_size)
+ {
+ PyErr_Format(PyExc_AttributeError, "attribute size check error for attribute \"%s\", report to blender.org", attrdef->m_name);
+ goto FREE_AND_ERROR;
+ }
+ // walkthrough
+ case KX_PYATTRIBUTE_TYPE_INT:
+ {
+ int *var = reinterpret_cast<int*>(ptr);
+ if (PyInt_Check(value))
+ {
+ long val = PyInt_AsLong(value);
+ if (attrdef->m_clamp)
{
- short int *var = reinterpret_cast<short int*>(ptr);
- if (PyInt_Check(value))
- {
- long val = PyInt_AsLong(value);
- if (attrdef->m_clamp)
- {
- if (val < attrdef->m_imin)
- val = attrdef->m_imin;
- else if (val > attrdef->m_imax)
- val = attrdef->m_imax;
- }
- else if (val < attrdef->m_imin || val > attrdef->m_imax)
- {
- PyErr_SetString(PyExc_ValueError, "value out of range");
- goto FREE_AND_ERROR;
- }
- *var = (short int)val;
- }
- else
- {
- PyErr_SetString(PyExc_TypeError, "expected an integer");
- goto FREE_AND_ERROR;
- }
- break;
+ if (val < attrdef->m_imin)
+ val = attrdef->m_imin;
+ else if (val > attrdef->m_imax)
+ val = attrdef->m_imax;
}
- case KX_PYATTRIBUTE_TYPE_ENUM:
- // enum are equivalent to int, just make sure that the field size matches:
- if (sizeof(int) != attrdef->m_size)
+ else if (val < attrdef->m_imin || val > attrdef->m_imax)
{
- PyErr_SetString(PyExc_AttributeError, "attribute size check error, report to blender.org");
+ PyErr_Format(PyExc_ValueError, "value out of range for attribute \"%s\"", attrdef->m_name);
goto FREE_AND_ERROR;
}
- // walkthrough
- case KX_PYATTRIBUTE_TYPE_INT:
- {
- int *var = reinterpret_cast<int*>(ptr);
- if (PyInt_Check(value))
- {
- long val = PyInt_AsLong(value);
- if (attrdef->m_clamp)
- {
- if (val < attrdef->m_imin)
- val = attrdef->m_imin;
- else if (val > attrdef->m_imax)
- val = attrdef->m_imax;
- }
- else if (val < attrdef->m_imin || val > attrdef->m_imax)
- {
- PyErr_SetString(PyExc_ValueError, "value out of range");
- goto FREE_AND_ERROR;
- }
- *var = (int)val;
- }
- else
- {
- PyErr_SetString(PyExc_TypeError, "expected an integer");
- goto FREE_AND_ERROR;
- }
- break;
- }
- case KX_PYATTRIBUTE_TYPE_FLOAT:
+ *var = (int)val;
+ }
+ else
+ {
+ PyErr_Format(PyExc_TypeError, "expected an integer for attribute \"%s\"", attrdef->m_name);
+ goto FREE_AND_ERROR;
+ }
+ break;
+ }
+ case KX_PYATTRIBUTE_TYPE_FLOAT:
+ {
+ float *var = reinterpret_cast<float*>(ptr);
+ double val = PyFloat_AsDouble(value);
+ if (val == -1.0 && PyErr_Occurred())
+ {
+ PyErr_Format(PyExc_TypeError, "expected a float for attribute \"%s\"", attrdef->m_name);
+ goto FREE_AND_ERROR;
+ }
+ else if (attrdef->m_clamp)
+ {
+ if (val < attrdef->m_fmin)
+ val = attrdef->m_fmin;
+ else if (val > attrdef->m_fmax)
+ val = attrdef->m_fmax;
+ }
+ else if (val < attrdef->m_fmin || val > attrdef->m_fmax)
+ {
+ PyErr_Format(PyExc_ValueError, "value out of range for attribute \"%s\"", attrdef->m_name);
+ goto FREE_AND_ERROR;
+ }
+ *var = (float)val;
+ break;
+ }
+ case KX_PYATTRIBUTE_TYPE_STRING:
+ {
+ STR_String *var = reinterpret_cast<STR_String*>(ptr);
+ if (PyString_Check(value))
+ {
+ char *val = PyString_AsString(value);
+ if (attrdef->m_clamp)
{
- float *var = reinterpret_cast<float*>(ptr);
- double val = PyFloat_AsDouble(value);
- if (val == -1.0 && PyErr_Occurred())
+ if (strlen(val) < attrdef->m_imin)
{
- PyErr_SetString(PyExc_TypeError, "expected a float");
+ // can't increase the length of the string
+ PyErr_Format(PyExc_ValueError, "string length too short for attribute \"%s\"", attrdef->m_name);
goto FREE_AND_ERROR;
}
- else if (attrdef->m_clamp)
- {
- if (val < attrdef->m_fmin)
- val = attrdef->m_fmin;
- else if (val > attrdef->m_fmax)
- val = attrdef->m_fmax;
- }
- else if (val < attrdef->m_fmin || val > attrdef->m_fmax)
- {
- PyErr_SetString(PyExc_ValueError, "value out of range");
- goto FREE_AND_ERROR;
- }
- *var = (float)val;
- break;
- }
- case KX_PYATTRIBUTE_TYPE_STRING:
- {
- STR_String *var = reinterpret_cast<STR_String*>(ptr);
- if (PyString_Check(value))
+ else if (strlen(val) > attrdef->m_imax)
{
- char *val = PyString_AsString(value);
- if (attrdef->m_clamp)
- {
- if (strlen(val) < attrdef->m_imin)
- {
- // can't increase the length of the string
- PyErr_SetString(PyExc_ValueError, "string length too short");
- goto FREE_AND_ERROR;
- }
- else if (strlen(val) > attrdef->m_imax)
- {
- // trim the string
- char c = val[attrdef->m_imax];
- val[attrdef->m_imax] = 0;
- *var = val;
- val[attrdef->m_imax] = c;
- break;
- }
- } else if (strlen(val) < attrdef->m_imin || strlen(val) > attrdef->m_imax)
- {
- PyErr_SetString(PyExc_ValueError, "string length out of range");
- goto FREE_AND_ERROR;
- }
+ // trim the string
+ char c = val[attrdef->m_imax];
+ val[attrdef->m_imax] = 0;
*var = val;
+ val[attrdef->m_imax] = c;
+ break;
}
- else
- {
- PyErr_SetString(PyExc_TypeError, "expected a string");
- goto FREE_AND_ERROR;
- }
- break;
+ } else if (strlen(val) < attrdef->m_imin || strlen(val) > attrdef->m_imax)
+ {
+ PyErr_Format(PyExc_ValueError, "string length out of range for attribute \"%s\"", attrdef->m_name);
+ goto FREE_AND_ERROR;
}
- default:
- // should not happen
- PyErr_SetString(PyExc_AttributeError, "unknown attribute type, report to blender.org");
+ *var = val;
+ }
+ else
+ {
+ PyErr_Format(PyExc_TypeError, "expected a string for attribute \"%s\"", attrdef->m_name);
goto FREE_AND_ERROR;
}
+ break;
}
- // check if post processing is needed
- if (attrdef->m_function != NULL)
+ default:
+ // should not happen
+ PyErr_Format(PyExc_AttributeError, "unknown type for attribute \"%s\", report to blender.org", attrdef->m_name);
+ goto FREE_AND_ERROR;
+ }
+ }
+ // check if post processing is needed
+ if (attrdef->m_checkFunction != NULL)
+ {
+ if ((*attrdef->m_checkFunction)(self, attrdef) != 0)
+ {
+ // restore value
+ RESTORE_AND_ERROR:
+ if (undoBuffer)
{
- if ((*attrdef->m_function)(self, attrdef) != 0)
+ if (attrdef->m_type == KX_PYATTRIBUTE_TYPE_STRING)
{
- // restore value
- RESTORE_AND_ERROR:
- if (undoBuffer)
- {
- if (attrdef->m_type == KX_PYATTRIBUTE_TYPE_STRING)
- {
- // special case for STR_String: restore the string
- STR_String *var = reinterpret_cast<STR_String*>(ptr);
- *var = reinterpret_cast<char*>(undoBuffer);
- }
- else
- {
- // other field type have direct values
- memcpy(ptr, undoBuffer, bufferSize);
- }
- }
- FREE_AND_ERROR:
- if (undoBuffer)
- free(undoBuffer);
- return 1;
+ // special case for STR_String: restore the string
+ STR_String *var = reinterpret_cast<STR_String*>(ptr);
+ *var = reinterpret_cast<char*>(undoBuffer);
+ }
+ else
+ {
+ // other field type have direct values
+ memcpy(ptr, undoBuffer, bufferSize);
}
}
+ FREE_AND_ERROR:
if (undoBuffer)
free(undoBuffer);
- return 0;
+ return 1;
}
}
- return -1;
+ if (undoBuffer)
+ free(undoBuffer);
+ return 0;
}
+
+
/*------------------------------
* PyObjectPlus repr -- representations
------------------------------*/
-PyObject *PyObjectPlus::_repr(void)
+PyObject *PyObjectPlus::py_repr(void)
{
PyErr_SetString(PyExc_SystemError, "Representation not overridden by object.");
return NULL;
@@ -676,38 +755,43 @@ PyObject *PyObjectPlus::_repr(void)
------------------------------*/
bool PyObjectPlus::isA(PyTypeObject *T) // if called with a Type, use "typename"
{
- return isA(T->tp_name);
+ int i;
+ PyParentObject P;
+ PyParentObject *Ps = GetParents();
+
+ for (P = Ps[i=0]; P != NULL; P = Ps[i++])
+ if (P==T)
+ return true;
+
+ return false;
}
bool PyObjectPlus::isA(const char *mytypename) // check typename of each parent
{
- int i;
- PyParentObject P;
- PyParentObject *Ps = GetParents();
+ int i;
+ PyParentObject P;
+ PyParentObject *Ps = GetParents();
- for (P = Ps[i=0]; P != NULL; P = Ps[i++])
- {
- if (strcmp(P->tp_name, mytypename)==0)
- return true;
- }
-
- return false;
+ for (P = Ps[i=0]; P != NULL; P = Ps[i++])
+ if (strcmp(P->tp_name, mytypename)==0)
+ return true;
+
+ return false;
}
-PyObject *PyObjectPlus::Py_isA(PyObject *value) // Python wrapper for isA
+PyObject *PyObjectPlus::PyisA(PyObject *value) // Python wrapper for isA
{
- if (!PyString_Check(value)) {
- PyErr_SetString(PyExc_TypeError, "expected a string");
- return NULL;
- }
- if(isA(PyString_AsString(value)))
- Py_RETURN_TRUE;
- else
- Py_RETURN_FALSE;
+ if (PyType_Check(value)) {
+ return PyBool_FromLong(isA((PyTypeObject *)value));
+ } else if (PyString_Check(value)) {
+ return PyBool_FromLong(isA(PyString_AsString(value)));
+ }
+ PyErr_SetString(PyExc_TypeError, "object.isA(value): expected a type or a string");
+ return NULL;
}
-/* Utility function called by the macro _getattr_up()
+/* Utility function called by the macro py_getattro_up()
* for getting ob.__dict__() values from our PyObject
* this is used by python for doing dir() on an object, so its good
* if we return a list of attributes and methods.
@@ -715,26 +799,57 @@ PyObject *PyObjectPlus::Py_isA(PyObject *value) // Python wrapper for isA
* Other then making dir() useful the value returned from __dict__() is not useful
* since every value is a Py_None
* */
-PyObject *_getattr_dict(PyObject *pydict, PyMethodDef *meth, PyAttributeDef *attrdef)
+PyObject *py_getattr_dict(PyObject *pydict, PyObject *tp_dict)
{
if(pydict==NULL) { /* incase calling __dict__ on the parent of this object raised an error */
PyErr_Clear();
pydict = PyDict_New();
}
- if(meth) {
- for (; meth->ml_name != NULL; meth++) {
- PyDict_SetItemString(pydict, meth->ml_name, Py_None);
- }
+ PyDict_Update(pydict, tp_dict);
+ return pydict;
+}
+
+
+
+PyObject *PyObjectPlus::GetProxy_Ext(PyObjectPlus *self, PyTypeObject *tp)
+{
+ if (self->m_proxy==NULL)
+ {
+ self->m_proxy = reinterpret_cast<PyObject *>PyObject_NEW( PyObjectPlus_Proxy, tp);
+ BGE_PROXY_PYOWNS(self->m_proxy) = false;
}
+ //PyObject_Print(self->m_proxy, stdout, 0);
+ //printf("ref %d\n", self->m_proxy->ob_refcnt);
- if(attrdef) {
- for (; attrdef->m_name != NULL; attrdef++) {
- PyDict_SetItemString(pydict, attrdef->m_name, Py_None);
+ BGE_PROXY_REF(self->m_proxy) = self; /* Its possible this was set to NULL, so set it back here */
+ Py_INCREF(self->m_proxy); /* we own one, thos ones fore the return */
+ return self->m_proxy;
+}
+
+PyObject *PyObjectPlus::NewProxy_Ext(PyObjectPlus *self, PyTypeObject *tp, bool py_owns)
+{
+ if (self->m_proxy)
+ {
+ if(py_owns)
+ { /* Free */
+ BGE_PROXY_REF(self->m_proxy) = NULL;
+ Py_DECREF(self->m_proxy);
+ self->m_proxy= NULL;
+ }
+ else {
+ Py_INCREF(self->m_proxy);
+ return self->m_proxy;
}
+
}
-
- return pydict;
+
+ GetProxy_Ext(self, tp);
+ if(py_owns) {
+ BGE_PROXY_PYOWNS(self->m_proxy) = py_owns;
+ Py_DECREF(self->m_proxy); /* could avoid thrashing here but for now its ok */
+ }
+ return self->m_proxy;
}
#endif //NO_EXP_PYTHON_EMBEDDING
diff --git a/source/gameengine/Expressions/PyObjectPlus.h b/source/gameengine/Expressions/PyObjectPlus.h
index 1a5f50a3d23..370717a919b 100644
--- a/source/gameengine/Expressions/PyObjectPlus.h
+++ b/source/gameengine/Expressions/PyObjectPlus.h
@@ -50,18 +50,19 @@
also in api2_2x/gen_utils.h
*/
#ifndef Py_RETURN_NONE
-#define Py_RETURN_NONE return Py_BuildValue("O", Py_None)
+#define Py_RETURN_NONE return Py_INCREF(Py_None), Py_None
#endif
#ifndef Py_RETURN_FALSE
-#define Py_RETURN_FALSE return PyBool_FromLong(0)
+#define Py_RETURN_FALSE return Py_INCREF(Py_False), Py_False
#endif
#ifndef Py_RETURN_TRUE
-#define Py_RETURN_TRUE return PyBool_FromLong(1)
+#define Py_RETURN_TRUE return Py_INCREF(Py_True), Py_True
#endif
/* for pre Py 2.5 */
#if PY_VERSION_HEX < 0x02050000
typedef int Py_ssize_t;
+typedef Py_ssize_t (*lenfunc)(PyObject *);
#define PY_SSIZE_T_MAX INT_MAX
#define PY_SSIZE_T_MIN INT_MIN
#define PY_METHODCHAR char *
@@ -72,11 +73,28 @@ typedef int Py_ssize_t;
#define PY_METHODCHAR const char *
#endif
+#include "descrobject.h"
+
+
static inline void Py_Fatal(const char *M) {
fprintf(stderr, "%s\n", M);
exit(-1);
};
+typedef struct {
+ PyObject_HEAD /* required python macro */
+ class PyObjectPlus *ref;
+ bool py_owns;
+} PyObjectPlus_Proxy;
+
+#define BGE_PROXY_ERROR_MSG "Blender Game Engine data has been freed, cannot use this python variable"
+#define BGE_PROXY_REF(_self) (((PyObjectPlus_Proxy *)_self)->ref)
+#define BGE_PROXY_PYOWNS(_self) (((PyObjectPlus_Proxy *)_self)->py_owns)
+
+/* Note, sometimes we dont care what BGE type this is as long as its a proxy */
+#define BGE_PROXY_CHECK_TYPE(_self) ((_self)->ob_type->tp_dealloc == py_base_dealloc)
+
+
// This must be the first line of each
// PyC++ class
#define Py_Header \
@@ -86,79 +104,130 @@ static inline void Py_Fatal(const char *M) {
static PyAttributeDef Attributes[]; \
static PyParentObject Parents[]; \
virtual PyTypeObject *GetType(void) {return &Type;}; \
- virtual PyParentObject *GetParents(void) {return Parents;}
+ virtual PyParentObject *GetParents(void) {return Parents;} \
+ virtual PyObject *GetProxy() {return GetProxy_Ext(this, &Type);}; \
+ virtual PyObject *NewProxy(bool py_owns) {return NewProxy_Ext(this, &Type, py_owns);}; \
- // This defines the _getattr_up macro
+
+ // This defines the py_getattro_up macro
// which allows attribute and method calls
// to be properly passed up the hierarchy.
-#define _getattr_up(Parent) \
- PyObject *rvalue = Py_FindMethod(Methods, this, attr); \
+
+#define py_getattro_up(Parent) \
+ \
+ PyObject *descr = PyDict_GetItem(Type.tp_dict, attr); \
\
- if (rvalue == NULL) { \
+ if(descr) { \
+ if (PyCObject_Check(descr)) { \
+ return py_get_attrdef((void *)this, (const PyAttributeDef*)PyCObject_AsVoidPtr(descr)); \
+ } else if (descr->ob_type->tp_descr_get) { \
+ return PyCFunction_New(((PyMethodDescrObject *)descr)->d_method, this->m_proxy); \
+ } else { \
+ fprintf(stderr, "unknown attribute type"); \
+ return descr; \
+ } \
+ } else { \
PyErr_Clear(); \
- rvalue = Parent::_getattr(attr); \
+ PyObject *rvalue= Parent::py_getattro(attr); \
+ \
+ if (strcmp(PyString_AsString(attr), "__dict__")==0) { \
+ return py_getattr_dict(rvalue, Type.tp_dict); \
+ } \
+ \
+ return rvalue; \
} \
- if ((rvalue == NULL) && !strcmp(attr, "__dict__")) {\
+ return NULL;
+
+
+/*
+ * nonzero values are an error for setattr
+ * however because of the nested lookups we need to know if the errors
+ * was because the attribute didnt exits of if there was some problem setting the value
+ */
+
+#define PY_SET_ATTR_COERCE_FAIL 2
+#define PY_SET_ATTR_FAIL 1
+#define PY_SET_ATTR_MISSING -1
+#define PY_SET_ATTR_SUCCESS 0
+
+#define py_setattro_up(Parent) \
+ PyObject *descr = PyDict_GetItem(Type.tp_dict, attr); \
+ \
+ if(descr) { \
+ if (PyCObject_Check(descr)) { \
+ const PyAttributeDef* attrdef= reinterpret_cast<const PyAttributeDef *>(PyCObject_AsVoidPtr(descr)); \
+ if (attrdef->m_access == KX_PYATTRIBUTE_RO) { \
+ PyErr_Format(PyExc_AttributeError, "\"%s\" is read only", PyString_AsString(attr)); \
+ return PY_SET_ATTR_FAIL; \
+ } \
+ else { \
+ return py_set_attrdef((void *)this, attrdef, value); \
+ } \
+ } else { \
+ PyErr_Format(PyExc_AttributeError, "\"%s\" cannot be set", PyString_AsString(attr)); \
+ return PY_SET_ATTR_FAIL; \
+ } \
+ } else { \
PyErr_Clear(); \
- rvalue = _getattr_dict(Parent::_getattr(attr), Methods, Attributes); \
- } \
- return rvalue; \
+ return Parent::py_setattro(attr, value); \
+ }
+
/**
* These macros are helpfull when embedding Python routines. The second
* macro is one that also requires a documentation string
*/
#define KX_PYMETHOD(class_name, method_name) \
- PyObject* Py##method_name(PyObject* self, PyObject* args, PyObject* kwds); \
+ PyObject* Py##method_name(PyObject* args, PyObject* kwds); \
static PyObject* sPy##method_name( PyObject* self, PyObject* args, PyObject* kwds) { \
- return ((class_name*) self)->Py##method_name(self, args, kwds); \
+ return ((class_name*)BGE_PROXY_REF(self))->Py##method_name(args, kwds); \
}; \
#define KX_PYMETHOD_VARARGS(class_name, method_name) \
- PyObject* Py##method_name(PyObject* self, PyObject* args); \
+ PyObject* Py##method_name(PyObject* args); \
static PyObject* sPy##method_name( PyObject* self, PyObject* args) { \
- return ((class_name*) self)->Py##method_name(self, args); \
+ return ((class_name*)BGE_PROXY_REF(self))->Py##method_name(args); \
}; \
#define KX_PYMETHOD_NOARGS(class_name, method_name) \
- PyObject* Py##method_name(PyObject* self); \
+ PyObject* Py##method_name(); \
static PyObject* sPy##method_name( PyObject* self) { \
- return ((class_name*) self)->Py##method_name(self); \
+ return ((class_name*)BGE_PROXY_REF(self))->Py##method_name(); \
}; \
#define KX_PYMETHOD_O(class_name, method_name) \
- PyObject* Py##method_name(PyObject* self, PyObject* value); \
+ PyObject* Py##method_name(PyObject* value); \
static PyObject* sPy##method_name( PyObject* self, PyObject* value) { \
- return ((class_name*) self)->Py##method_name(self, value); \
+ return ((class_name*)BGE_PROXY_REF(self))->Py##method_name(value); \
}; \
#define KX_PYMETHOD_DOC(class_name, method_name) \
- PyObject* Py##method_name(PyObject* self, PyObject* args, PyObject* kwds); \
+ PyObject* Py##method_name(PyObject* args, PyObject* kwds); \
static PyObject* sPy##method_name( PyObject* self, PyObject* args, PyObject* kwds) { \
- return ((class_name*) self)->Py##method_name(self, args, kwds); \
+ return ((class_name*)BGE_PROXY_REF(self))->Py##method_name(args, kwds); \
}; \
static const char method_name##_doc[]; \
#define KX_PYMETHOD_DOC_VARARGS(class_name, method_name) \
- PyObject* Py##method_name(PyObject* self, PyObject* args); \
+ PyObject* Py##method_name(PyObject* args); \
static PyObject* sPy##method_name( PyObject* self, PyObject* args) { \
- return ((class_name*) self)->Py##method_name(self, args); \
+ return ((class_name*)BGE_PROXY_REF(self))->Py##method_name(args); \
}; \
static const char method_name##_doc[]; \
#define KX_PYMETHOD_DOC_O(class_name, method_name) \
- PyObject* Py##method_name(PyObject* self, PyObject* value); \
+ PyObject* Py##method_name(PyObject* value); \
static PyObject* sPy##method_name( PyObject* self, PyObject* value) { \
- return ((class_name*) self)->Py##method_name(self, value); \
+ return ((class_name*)BGE_PROXY_REF(self))->Py##method_name(value); \
}; \
static const char method_name##_doc[]; \
#define KX_PYMETHOD_DOC_NOARGS(class_name, method_name) \
- PyObject* Py##method_name(PyObject* self); \
+ PyObject* Py##method_name(); \
static PyObject* sPy##method_name( PyObject* self) { \
- return ((class_name*) self)->Py##method_name(self); \
+ return ((class_name*)BGE_PROXY_REF(self))->Py##method_name(); \
}; \
static const char method_name##_doc[]; \
@@ -181,19 +250,19 @@ static inline void Py_Fatal(const char *M) {
*/
#define KX_PYMETHODDEF_DOC(class_name, method_name, doc_string) \
const char class_name::method_name##_doc[] = doc_string; \
-PyObject* class_name::Py##method_name(PyObject*, PyObject* args, PyObject*)
+PyObject* class_name::Py##method_name(PyObject* args, PyObject*)
#define KX_PYMETHODDEF_DOC_VARARGS(class_name, method_name, doc_string) \
const char class_name::method_name##_doc[] = doc_string; \
-PyObject* class_name::Py##method_name(PyObject*, PyObject* args)
+PyObject* class_name::Py##method_name(PyObject* args)
#define KX_PYMETHODDEF_DOC_O(class_name, method_name, doc_string) \
const char class_name::method_name##_doc[] = doc_string; \
-PyObject* class_name::Py##method_name(PyObject*, PyObject* value)
+PyObject* class_name::Py##method_name(PyObject* value)
#define KX_PYMETHODDEF_DOC_NOARGS(class_name, method_name, doc_string) \
const char class_name::method_name##_doc[] = doc_string; \
-PyObject* class_name::Py##method_name(PyObject*)
+PyObject* class_name::Py##method_name()
/**
* Attribute management
@@ -206,6 +275,7 @@ enum KX_PYATTRIBUTE_TYPE {
KX_PYATTRIBUTE_TYPE_FLOAT,
KX_PYATTRIBUTE_TYPE_STRING,
KX_PYATTRIBUTE_TYPE_DUMMY,
+ KX_PYATTRIBUTE_TYPE_FUNCTION,
};
enum KX_PYATTRIBUTE_ACCESS {
@@ -214,7 +284,9 @@ enum KX_PYATTRIBUTE_ACCESS {
};
struct KX_PYATTRIBUTE_DEF;
-typedef int (*KX_PYATTRIBUTE_FUNCTION)(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
+typedef int (*KX_PYATTRIBUTE_CHECK_FUNCTION)(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
+typedef int (*KX_PYATTRIBUTE_SET_FUNCTION)(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+typedef PyObject* (*KX_PYATTRIBUTE_GET_FUNCTION)(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
typedef struct KX_PYATTRIBUTE_DEF {
const char *m_name; // name of the python attribute
@@ -228,7 +300,10 @@ typedef struct KX_PYATTRIBUTE_DEF {
size_t m_offset; // position of field in structure
size_t m_size; // size of field for runtime verification (enum only)
size_t m_length; // length of array, 1=simple attribute
- KX_PYATTRIBUTE_FUNCTION m_function; // static function to check the assignment, returns 0 if no error
+ KX_PYATTRIBUTE_CHECK_FUNCTION m_checkFunction; // static function to check the assignment, returns 0 if no error
+ KX_PYATTRIBUTE_SET_FUNCTION m_setFunction; // static function to check the assignment, returns 0 if no error
+ KX_PYATTRIBUTE_GET_FUNCTION m_getFunction; // static function to check the assignment, returns 0 if no error
+
// The following pointers are just used to have compile time check for attribute type.
// It would have been good to use a union but that would require C99 compatibility
// to initialize specific union fields through designated initializers.
@@ -242,150 +317,145 @@ typedef struct KX_PYATTRIBUTE_DEF {
} PyAttributeDef;
#define KX_PYATTRIBUTE_DUMMY(name) \
- { name, KX_PYATTRIBUTE_TYPE_DUMMY, KX_PYATTRIBUTE_RO, 0, 0, 0.f, 0.f, false, 0, 0, 1, NULL, {NULL, NULL, NULL, NULL, NULL} }
+ { name, KX_PYATTRIBUTE_TYPE_DUMMY, KX_PYATTRIBUTE_RO, 0, 0, 0.f, 0.f, false, 0, 0, 1, NULL, NULL, NULL, {NULL, NULL, NULL, NULL, NULL} }
#define KX_PYATTRIBUTE_BOOL_RW(name,object,field) \
- { name, KX_PYATTRIBUTE_TYPE_BOOL, KX_PYATTRIBUTE_RW, 0, 1, 0.f, 0.f, false, offsetof(object,field), 0, 1, NULL, {&((object *)0)->field, NULL, NULL, NULL, NULL} }
+ { name, KX_PYATTRIBUTE_TYPE_BOOL, KX_PYATTRIBUTE_RW, 0, 1, 0.f, 0.f, false, offsetof(object,field), 0, 1, NULL, NULL, NULL, {&((object *)0)->field, NULL, NULL, NULL, NULL} }
#define KX_PYATTRIBUTE_BOOL_RW_CHECK(name,object,field,function) \
- { name, KX_PYATTRIBUTE_TYPE_BOOL, KX_PYATTRIBUTE_RW, 0, 1, 0.f, 0.f, false, offsetof(object,field), 0, 1, &object::function, {&((object *)0)->field, NULL, NULL, NULL, NULL} }
+ { name, KX_PYATTRIBUTE_TYPE_BOOL, KX_PYATTRIBUTE_RW, 0, 1, 0.f, 0.f, false, offsetof(object,field), 0, 1, &object::function, NULL, NULL, {&((object *)0)->field, NULL, NULL, NULL, NULL} }
#define KX_PYATTRIBUTE_BOOL_RO(name,object,field) \
- { name, KX_PYATTRIBUTE_TYPE_BOOL, KX_PYATTRIBUTE_RO, 0, 1, 0.f, 0.f, false, offsetof(object,field), 0, 1, NULL, {&((object *)0)->field, NULL, NULL, NULL, NULL} }
+ { name, KX_PYATTRIBUTE_TYPE_BOOL, KX_PYATTRIBUTE_RO, 0, 1, 0.f, 0.f, false, offsetof(object,field), 0, 1, NULL, NULL, NULL, {&((object *)0)->field, NULL, NULL, NULL, NULL} }
// enum field cannot be mapped to pointer (because we would need a pointer for each enum)
// use field size to verify mapping at runtime only, assuming enum size is equal to int size.
#define KX_PYATTRIBUTE_ENUM_RW(name,min,max,clamp,object,field) \
- { name, KX_PYATTRIBUTE_TYPE_ENUM, KX_PYATTRIBUTE_RW, min, max, 0.f, 0.f, clamp, offsetof(object,field), sizeof(((object *)0)->field), 1, NULL, {NULL, NULL, NULL, NULL, NULL} }
+ { name, KX_PYATTRIBUTE_TYPE_ENUM, KX_PYATTRIBUTE_RW, min, max, 0.f, 0.f, clamp, offsetof(object,field), sizeof(((object *)0)->field), 1, NULL, NULL, NULL, {NULL, NULL, NULL, NULL, NULL} }
#define KX_PYATTRIBUTE_ENUM_RW_CHECK(name,min,max,clamp,object,field,function) \
- { name, KX_PYATTRIBUTE_TYPE_ENUM, KX_PYATTRIBUTE_RW, min, max, 0.f, 0.f, clamp, offsetof(object,field), sizeof(((object *)0)->field), 1, &object::function, {NULL, NULL, NULL, NULL, NULL} }
+ { name, KX_PYATTRIBUTE_TYPE_ENUM, KX_PYATTRIBUTE_RW, min, max, 0.f, 0.f, clamp, offsetof(object,field), sizeof(((object *)0)->field), 1, &object::function, NULL, NULL, {NULL, NULL, NULL, NULL, NULL} }
#define KX_PYATTRIBUTE_ENUM_RO(name,object,field) \
- { name, KX_PYATTRIBUTE_TYPE_ENUM, KX_PYATTRIBUTE_RO, 0, 0, 0.f, 0.f, false, offsetof(object,field), sizeof(((object *)0)->field), 1, NULL, {NULL, NULL, NULL, NULL, NULL} }
+ { name, KX_PYATTRIBUTE_TYPE_ENUM, KX_PYATTRIBUTE_RO, 0, 0, 0.f, 0.f, false, offsetof(object,field), sizeof(((object *)0)->field), 1, NULL, NULL, NULL, {NULL, NULL, NULL, NULL, NULL} }
#define KX_PYATTRIBUTE_SHORT_RW(name,min,max,clamp,object,field) \
- { name, KX_PYATTRIBUTE_TYPE_SHORT, KX_PYATTRIBUTE_RW, min, max, 0.f, 0.f, clamp, offsetof(object,field), 0, 1, NULL, {NULL, &((object *)0)->field, NULL, NULL, NULL} }
+ { name, KX_PYATTRIBUTE_TYPE_SHORT, KX_PYATTRIBUTE_RW, min, max, 0.f, 0.f, clamp, offsetof(object,field), 0, 1, NULL, NULL, NULL, {NULL, &((object *)0)->field, NULL, NULL, NULL} }
#define KX_PYATTRIBUTE_SHORT_RW_CHECK(name,min,max,clamp,object,field,function) \
- { name, KX_PYATTRIBUTE_TYPE_SHORT, KX_PYATTRIBUTE_RW, min, max, 0.f, 0.f, clamp, offsetof(object,field), 0, 1, &object::function, {NULL, &((object *)0)->field, NULL, NULL, NULL} }
+ { name, KX_PYATTRIBUTE_TYPE_SHORT, KX_PYATTRIBUTE_RW, min, max, 0.f, 0.f, clamp, offsetof(object,field), 0, 1, &object::function, NULL, NULL, {NULL, &((object *)0)->field, NULL, NULL, NULL} }
#define KX_PYATTRIBUTE_SHORT_RO(name,object,field) \
- { name, KX_PYATTRIBUTE_TYPE_SHORT, KX_PYATTRIBUTE_RO, 0, 0, 0.f, 0.f, false, offsetof(object,field), 0, 1, NULL, {NULL, &((object *)0)->field, NULL, NULL, NULL} }
+ { name, KX_PYATTRIBUTE_TYPE_SHORT, KX_PYATTRIBUTE_RO, 0, 0, 0.f, 0.f, false, offsetof(object,field), 0, 1, NULL, NULL, NULL, {NULL, &((object *)0)->field, NULL, NULL, NULL} }
#define KX_PYATTRIBUTE_SHORT_ARRAY_RW(name,min,max,clamp,object,field,length) \
- { name, KX_PYATTRIBUTE_TYPE_SHORT, KX_PYATTRIBUTE_RW, min, max, 0.f, 0.f, clamp, offsetof(object,field), 0, length, NULL, {NULL, ((object *)0)->field, NULL, NULL, NULL} }
+ { name, KX_PYATTRIBUTE_TYPE_SHORT, KX_PYATTRIBUTE_RW, min, max, 0.f, 0.f, clamp, offsetof(object,field), 0, length, NULL, NULL, NULL, {NULL, ((object *)0)->field, NULL, NULL, NULL} }
#define KX_PYATTRIBUTE_SHORT_ARRAY_RW_CHECK(name,min,max,clamp,object,field,length,function) \
- { name, KX_PYATTRIBUTE_TYPE_SHORT, KX_PYATTRIBUTE_RW, min, max, 0.f, 0.f, clamp, offsetof(object,field), 0, length, &object::function, {NULL, ((object *)0)->field, NULL, NULL, NULL} }
+ { name, KX_PYATTRIBUTE_TYPE_SHORT, KX_PYATTRIBUTE_RW, min, max, 0.f, 0.f, clamp, offsetof(object,field), 0, length, &object::function, NULL, NULL, {NULL, ((object *)0)->field, NULL, NULL, NULL} }
#define KX_PYATTRIBUTE_SHORT_ARRAY_RO(name,object,field,length) \
- { name, KX_PYATTRIBUTE_TYPE_SHORT, KX_PYATTRIBUTE_RO, 0, 0, 0.f, 0.f, false, offsetof(object,field), 0, length, NULL, {NULL, ((object *)0)->field, NULL, NULL, NULL} }
+ { name, KX_PYATTRIBUTE_TYPE_SHORT, KX_PYATTRIBUTE_RO, 0, 0, 0.f, 0.f, false, offsetof(object,field), 0, length, NULL, NULL, NULL, {NULL, ((object *)0)->field, NULL, NULL, NULL} }
// SHORT_LIST
#define KX_PYATTRIBUTE_SHORT_LIST_RW(name,min,max,clamp,object,field,length) \
- { name, KX_PYATTRIBUTE_TYPE_SHORT, KX_PYATTRIBUTE_RW, min, max, 0.f, 0.f, clamp, offsetof(object,field), 0, length, NULL, {NULL, &((object *)0)->field, NULL, NULL, NULL} }
+ { name, KX_PYATTRIBUTE_TYPE_SHORT, KX_PYATTRIBUTE_RW, min, max, 0.f, 0.f, clamp, offsetof(object,field), 0, length, NULL, NULL, NULL, {NULL, &((object *)0)->field, NULL, NULL, NULL} }
#define KX_PYATTRIBUTE_SHORT_LIST_RW_CHECK(name,min,max,clamp,object,field,length,function) \
- { name, KX_PYATTRIBUTE_TYPE_SHORT, KX_PYATTRIBUTE_RW, min, max, 0.f, 0.f, clamp, offsetof(object,field), 0, length, &object::function, {NULL, &((object *)0)->field, NULL, NULL, NULL} }
+ { name, KX_PYATTRIBUTE_TYPE_SHORT, KX_PYATTRIBUTE_RW, min, max, 0.f, 0.f, clamp, offsetof(object,field), 0, length, &object::function, NULL, NULL, {NULL, &((object *)0)->field, NULL, NULL, NULL} }
#define KX_PYATTRIBUTE_SHORT_LIST_RO(name,object,field,length) \
- { name, KX_PYATTRIBUTE_TYPE_SHORT, KX_PYATTRIBUTE_RO, 0, 0, 0.f, 0.f, false, offsetof(object,field), 0, length, NULL, {NULL, &((object *)0)->field, NULL, NULL, NULL} }
+ { name, KX_PYATTRIBUTE_TYPE_SHORT, KX_PYATTRIBUTE_RO, 0, 0, 0.f, 0.f, false, offsetof(object,field), 0, length, NULL, NULL, NULL, {NULL, &((object *)0)->field, NULL, NULL, NULL} }
#define KX_PYATTRIBUTE_INT_RW(name,min,max,clamp,object,field) \
- { name, KX_PYATTRIBUTE_TYPE_INT, KX_PYATTRIBUTE_RW, min, max, 0.f, 0.f, clamp, offsetof(object,field), 0, 1, NULL, {NULL, NULL, &((object *)0)->field, NULL, NULL} }
+ { name, KX_PYATTRIBUTE_TYPE_INT, KX_PYATTRIBUTE_RW, min, max, 0.f, 0.f, clamp, offsetof(object,field), 0, 1, NULL, NULL, NULL, {NULL, NULL, &((object *)0)->field, NULL, NULL} }
#define KX_PYATTRIBUTE_INT_RW_CHECK(name,min,max,clamp,object,field,function) \
- { name, KX_PYATTRIBUTE_TYPE_INT, KX_PYATTRIBUTE_RW, min, max, 0.f, 0.f, clamp, offsetof(object,field), 0, 1, &object::function, {NULL, NULL, &((object *)0)->field, NULL, NULL} }
+ { name, KX_PYATTRIBUTE_TYPE_INT, KX_PYATTRIBUTE_RW, min, max, 0.f, 0.f, clamp, offsetof(object,field), 0, 1, &object::function, NULL, NULL, {NULL, NULL, &((object *)0)->field, NULL, NULL} }
#define KX_PYATTRIBUTE_INT_RO(name,object,field) \
- { name, KX_PYATTRIBUTE_TYPE_INT, KX_PYATTRIBUTE_RO, 0, 0, 0.f, 0.f, false, offsetof(object,field), 0, 1, NULL, {NULL, NULL, &((object *)0)->field, NULL, NULL} }
+ { name, KX_PYATTRIBUTE_TYPE_INT, KX_PYATTRIBUTE_RO, 0, 0, 0.f, 0.f, false, offsetof(object,field), 0, 1, NULL, NULL, NULL, {NULL, NULL, &((object *)0)->field, NULL, NULL} }
#define KX_PYATTRIBUTE_INT_ARRAY_RW(name,min,max,clamp,object,field,length) \
- { name, KX_PYATTRIBUTE_TYPE_INT, KX_PYATTRIBUTE_RW, min, max, 0.f, 0.f, clamp, offsetof(object,field), 0, length, NULL, {NULL, NULL, ((object *)0)->field, NULL, NULL} }
+ { name, KX_PYATTRIBUTE_TYPE_INT, KX_PYATTRIBUTE_RW, min, max, 0.f, 0.f, clamp, offsetof(object,field), 0, length, NULL, NULL, NULL, {NULL, NULL, ((object *)0)->field, NULL, NULL} }
#define KX_PYATTRIBUTE_INT_ARRAY_RW_CHECK(name,min,max,clamp,object,field,length,function) \
- { name, KX_PYATTRIBUTE_TYPE_INT, KX_PYATTRIBUTE_RW, min, max, 0.f, 0.f, clamp, offsetof(object,field), 0, length, &object::function, {NULL, NULL, ((object *)0)->field, NULL, NULL} }
+ { name, KX_PYATTRIBUTE_TYPE_INT, KX_PYATTRIBUTE_RW, min, max, 0.f, 0.f, clamp, offsetof(object,field), 0, length, &object::function, NULL, NULL, {NULL, NULL, ((object *)0)->field, NULL, NULL} }
#define KX_PYATTRIBUTE_INT_ARRAY_RO(name,object,field,length) \
- { name, KX_PYATTRIBUTE_TYPE_INT, KX_PYATTRIBUTE_RO, 0, 0, 0.f, 0.f, false, offsetof(object,field), 0, length, NULL, {NULL, NULL, ((object *)0)->field, NULL, NULL} }
+ { name, KX_PYATTRIBUTE_TYPE_INT, KX_PYATTRIBUTE_RO, 0, 0, 0.f, 0.f, false, offsetof(object,field), 0, length, NULL, NULL, NULL, {NULL, NULL, ((object *)0)->field, NULL, NULL} }
// INT_LIST
#define KX_PYATTRIBUTE_INT_LIST_RW(name,min,max,clamp,object,field,length) \
- { name, KX_PYATTRIBUTE_TYPE_INT, KX_PYATTRIBUTE_RW, min, max, 0.f, 0.f, clamp, offsetof(object,field), 0, length, NULL, {NULL, NULL, &((object *)0)->field, NULL, NULL} }
+ { name, KX_PYATTRIBUTE_TYPE_INT, KX_PYATTRIBUTE_RW, min, max, 0.f, 0.f, clamp, offsetof(object,field), 0, length, NULL, NULL, NULL, {NULL, NULL, &((object *)0)->field, NULL, NULL} }
#define KX_PYATTRIBUTE_INT_LIST_RW_CHECK(name,min,max,clamp,object,field,length,function) \
- { name, KX_PYATTRIBUTE_TYPE_INT, KX_PYATTRIBUTE_RW, min, max, 0.f, 0.f, clamp, offsetof(object,field), 0, length, &object::function, {NULL, NULL, &((object *)0)->field, NULL, NULL} }
+ { name, KX_PYATTRIBUTE_TYPE_INT, KX_PYATTRIBUTE_RW, min, max, 0.f, 0.f, clamp, offsetof(object,field), 0, length, &object::function, NULL, NULL, {NULL, NULL, &((object *)0)->field, NULL, NULL} }
#define KX_PYATTRIBUTE_INT_LIST_RO(name,object,field,length) \
- { name, KX_PYATTRIBUTE_TYPE_INT, KX_PYATTRIBUTE_RO, 0, 0, 0.f, 0.f, false, offsetof(object,field), 0, length, NULL, {NULL, NULL, &((object *)0)->field, NULL, NULL} }
+ { name, KX_PYATTRIBUTE_TYPE_INT, KX_PYATTRIBUTE_RO, 0, 0, 0.f, 0.f, false, offsetof(object,field), 0, length, NULL, NULL, NULL, {NULL, NULL, &((object *)0)->field, NULL, NULL} }
// always clamp for float
#define KX_PYATTRIBUTE_FLOAT_RW(name,min,max,object,field) \
- { name, KX_PYATTRIBUTE_TYPE_FLOAT, KX_PYATTRIBUTE_RW, 0, 0, min, max, true, offsetof(object,field), 0, 1, NULL, {NULL, NULL, NULL, &((object *)0)->field, NULL} }
+ { name, KX_PYATTRIBUTE_TYPE_FLOAT, KX_PYATTRIBUTE_RW, 0, 0, min, max, true, offsetof(object,field), 0, 1, NULL, NULL, NULL, {NULL, NULL, NULL, &((object *)0)->field, NULL} }
#define KX_PYATTRIBUTE_FLOAT_RW_CHECK(name,min,max,object,field,function) \
- { name, KX_PYATTRIBUTE_TYPE_FLOAT, KX_PYATTRIBUTE_RW, 0, 0, min, max, true, offsetof(object,field), 0, 1, &object::function, {NULL, NULL, NULL, &((object *)0)->field, NULL} }
+ { name, KX_PYATTRIBUTE_TYPE_FLOAT, KX_PYATTRIBUTE_RW, 0, 0, min, max, true, offsetof(object,field), 0, 1, &object::function, NULL, NULL, {NULL, NULL, NULL, &((object *)0)->field, NULL} }
#define KX_PYATTRIBUTE_FLOAT_RO(name,object,field) \
- { name, KX_PYATTRIBUTE_TYPE_FLOAT, KX_PYATTRIBUTE_RO, 0, 0, 0.f, 0.f, false, offsetof(object,field), 0, 1, NULL, {NULL, NULL, NULL, &((object *)0)->field, NULL} }
+ { name, KX_PYATTRIBUTE_TYPE_FLOAT, KX_PYATTRIBUTE_RO, 0, 0, 0.f, 0.f, false, offsetof(object,field), 0, 1, NULL, NULL, NULL, {NULL, NULL, NULL, &((object *)0)->field, NULL} }
#define KX_PYATTRIBUTE_FLOAT_ARRAY_RW(name,min,max,object,field,length) \
- { name, KX_PYATTRIBUTE_TYPE_FLOAT, KX_PYATTRIBUTE_RW, 0, 0, min, max, true, offsetof(object,field), 0, length, NULL, {NULL, NULL, NULL, ((object *)0)->field, NULL} }
+ { name, KX_PYATTRIBUTE_TYPE_FLOAT, KX_PYATTRIBUTE_RW, 0, 0, min, max, true, offsetof(object,field), 0, length, NULL, NULL, NULL, {NULL, NULL, NULL, ((object *)0)->field, NULL} }
#define KX_PYATTRIBUTE_FLOAT_ARRAY_RW_CHECK(name,min,max,object,field,length,function) \
- { name, KX_PYATTRIBUTE_TYPE_FLOAT, KX_PYATTRIBUTE_RW, 0, 0, min, max, true, offsetof(object,field), 0, length, &object::function, {NULL, NULL, NULL, ((object *)0)->field, NULL} }
+ { name, KX_PYATTRIBUTE_TYPE_FLOAT, KX_PYATTRIBUTE_RW, 0, 0, min, max, true, offsetof(object,field), 0, length, &object::function, NULL, NULL, {NULL, NULL, NULL, ((object *)0)->field, NULL} }
#define KX_PYATTRIBUTE_FLOAT_ARRAY_RO(name,object,field,length) \
- { name, KX_PYATTRIBUTE_TYPE_FLOAT, KX_PYATTRIBUTE_RO, 0, 0, 0.f, 0.f, false, offsetof(object,field), 0, length, NULL, {NULL, NULL, NULL, ((object *)0)->field, NULL} }
+ { name, KX_PYATTRIBUTE_TYPE_FLOAT, KX_PYATTRIBUTE_RO, 0, 0, 0.f, 0.f, false, offsetof(object,field), 0, length, NULL, NULL, NULL, {NULL, NULL, NULL, ((object *)0)->field, NULL} }
#define KX_PYATTRIBUTE_STRING_RW(name,min,max,clamp,object,field) \
- { name, KX_PYATTRIBUTE_TYPE_STRING, KX_PYATTRIBUTE_RW, min, max, 0.f, 0.f, clamp, offsetof(object,field), 0, 1, NULL, {NULL, NULL, NULL, NULL, &((object *)0)->field} }
+ { name, KX_PYATTRIBUTE_TYPE_STRING, KX_PYATTRIBUTE_RW, min, max, 0.f, 0.f, clamp, offsetof(object,field), 0, 1, NULL, NULL, NULL, {NULL, NULL, NULL, NULL, &((object *)0)->field} }
#define KX_PYATTRIBUTE_STRING_RW_CHECK(name,min,max,clamp,object,field,function) \
- { name, KX_PYATTRIBUTE_TYPE_STRING, KX_PYATTRIBUTE_RW, min, max, 0.f, 0.f, clamp, offsetof(object,field), 0, 1, &object::function, {NULL, NULL, NULL, NULL, &((object *)0)->field} }
+ { name, KX_PYATTRIBUTE_TYPE_STRING, KX_PYATTRIBUTE_RW, min, max, 0.f, 0.f, clamp, offsetof(object,field), 0, 1, &object::function, NULL, NULL, {NULL, NULL, NULL, NULL, &((object *)0)->field} }
#define KX_PYATTRIBUTE_STRING_RO(name,object,field) \
- { name, KX_PYATTRIBUTE_TYPE_STRING, KX_PYATTRIBUTE_RO, 0, 0, 0.f, 0.f, false, offsetof(object,field), 0, 1 , NULL, {NULL, NULL, NULL, NULL, &((object *)0)->field} }
+ { name, KX_PYATTRIBUTE_TYPE_STRING, KX_PYATTRIBUTE_RO, 0, 0, 0.f, 0.f, false, offsetof(object,field), 0, 1 , NULL, NULL, NULL, {NULL, NULL, NULL, NULL, &((object *)0)->field} }
+
+#define KX_PYATTRIBUTE_RW_FUNCTION(name,object,getfunction,setfunction) \
+ { name, KX_PYATTRIBUTE_TYPE_FUNCTION, KX_PYATTRIBUTE_RW, 0, 0, 0.f, 0.f, false, 0, 0, 1, NULL, &object::setfunction, &object::getfunction, {NULL, NULL, NULL, NULL, NULL} }
+#define KX_PYATTRIBUTE_RO_FUNCTION(name,object,getfunction) \
+ { name, KX_PYATTRIBUTE_TYPE_FUNCTION, KX_PYATTRIBUTE_RO, 0, 0, 0.f, 0.f, false, 0, 0, 1, NULL, NULL, &object::getfunction, {NULL, NULL, NULL, NULL, NULL} }
+#define KX_PYATTRIBUTE_ARRAY_RW_FUNCTION(name,object,length,getfunction,setfunction) \
+ { name, KX_PYATTRIBUTE_TYPE_FUNCTION, KX_PYATTRIBUTE_RW, 0, 0, 0.f, 0,f, false, 0, 0, length, NULL, &object::setfunction, &object::getfunction, {NULL, NULL, NULL, NULL, NULL} }
+#define KX_PYATTRIBUTE_ARRAY_RO_FUNCTION(name,object,length,getfunction) \
+ { name, KX_PYATTRIBUTE_TYPE_FUNCTION, KX_PYATTRIBUTE_RO, 0, 0, 0.f, 0,f, false, 0, 0, length, NULL, NULL, &object::getfunction, {NULL, NULL, NULL, NULL, NULL} }
-//Multiple integer
-#define KX_PYATTRIBUTE_MINT_RW_CHECK(name,min,max,clamp,object,field,length,function) \
- { name, KX_PYATTRIBUTE_TYPE_INT, KX_PYATTRIBUTE_RW, min, max, 0.f, 0.f, clamp, offsetof(object,field), 0, length, &object::function, {NULL, NULL, &((object *)0)->field, NULL, NULL} }
/*------------------------------
* PyObjectPlus
------------------------------*/
typedef PyTypeObject * PyParentObject; // Define the PyParent Object
-class PyObjectPlus : public PyObject
+class PyObjectPlus
{ // The PyObjectPlus abstract class
Py_Header; // Always start with Py_Header
public:
PyObjectPlus(PyTypeObject *T);
+
+ PyObject *m_proxy; /* actually a PyObjectPlus_Proxy */
virtual ~PyObjectPlus(); // destructor
- static void PyDestructor(PyObject *P) // python wrapper
- {
- delete ((PyObjectPlus *) P);
- };
-// void INCREF(void) {
-// Py_INCREF(this);
-// }; // incref method
-// void DECREF(void) {
-// Py_DECREF(this);
-// }; // decref method
+ /* These static functions are referenced by ALL PyObjectPlus_Proxy types
+ * they take the C++ reference from the PyObjectPlus_Proxy and call
+ * its own virtual py_getattro, py_setattro etc. functions.
+ */
+ static void py_base_dealloc(PyObject *self);
+ static PyObject* py_base_getattro(PyObject * self, PyObject *attr);
+ static int py_base_setattro(PyObject *self, PyObject *attr, PyObject *value);
+ static PyObject* py_base_repr(PyObject *self);
+
+ /* These are all virtual python methods that are defined in each class
+ * Our own fake subclassing calls these on each class, then calls the parent */
+ virtual PyObject* py_getattro(PyObject *attr);
+ virtual int py_delattro(PyObject *attr);
+ virtual int py_setattro(PyObject *attr, PyObject *value);
+ virtual PyObject* py_repr(void);
+
+ static PyObject* py_get_attrdef(void *self, const PyAttributeDef *attrdef);
+ static int py_set_attrdef(void *self, const PyAttributeDef *attrdef, PyObject *value);
- virtual PyObject *_getattr(const char *attr); // _getattr method
- static PyObject *__getattr(PyObject * PyObj, char *attr) // This should be the entry in Type.
- {
- return ((PyObjectPlus*) PyObj)->_getattr(attr);
- }
- static PyObject *_getattr_self(const PyAttributeDef attrlist[], void *self, const char *attr);
- static int _setattr_self(const PyAttributeDef attrlist[], void *self, const char *attr, PyObject *value);
+ /* isA() methods, shonky replacement for pythons issubclass()
+ * which we cant use because we have our own subclass system */
+ bool isA(PyTypeObject *T);
+ bool isA(const char *mytypename);
- virtual int _delattr(const char *attr);
- virtual int _setattr(const char *attr, PyObject *value); // _setattr method
- static int __setattr(PyObject *PyObj, // This should be the entry in Type.
- char *attr,
- PyObject *value)
- {
- if (!value)
- return ((PyObjectPlus*) PyObj)->_delattr(attr);
- return ((PyObjectPlus*) PyObj)->_setattr(attr, value);
- }
+ KX_PYMETHOD_O(PyObjectPlus,isA);
- virtual PyObject *_repr(void); // _repr method
- static PyObject *__repr(PyObject *PyObj) // This should be the entry in Type.
- {
- return ((PyObjectPlus*) PyObj)->_repr();
- }
+ /* Kindof dumb, always returns True, the false case is checked for, before this function gets accessed */
+ static PyObject* pyattr_get_is_valid(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
- // isA methods
- bool isA(PyTypeObject *T);
- bool isA(const char *mytypename);
- PyObject *Py_isA(PyObject *value);
- static PyObject *sPy_isA(PyObject *self, PyObject *value)
- {
- return ((PyObjectPlus*)self)->Py_isA(value);
- }
+ static PyObject *GetProxy_Ext(PyObjectPlus *self, PyTypeObject *tp);
+ static PyObject *NewProxy_Ext(PyObjectPlus *self, PyTypeObject *tp, bool py_owns);
};
-PyObject *_getattr_dict(PyObject *pydict, PyMethodDef *meth, PyAttributeDef *attrdef);
+PyObject *py_getattr_dict(PyObject *pydict, PyObject *tp_dict);
#endif // _adr_py_lib_h_
diff --git a/source/gameengine/Expressions/StringValue.cpp b/source/gameengine/Expressions/StringValue.cpp
index 1ef8c5629a0..2b3c62c411e 100644
--- a/source/gameengine/Expressions/StringValue.cpp
+++ b/source/gameengine/Expressions/StringValue.cpp
@@ -113,7 +113,7 @@ this object
-float CStringValue::GetNumber()
+double CStringValue::GetNumber()
{
return -1;
}
diff --git a/source/gameengine/Expressions/StringValue.h b/source/gameengine/Expressions/StringValue.h
index b824d4ef86d..16575ed7ffa 100644
--- a/source/gameengine/Expressions/StringValue.h
+++ b/source/gameengine/Expressions/StringValue.h
@@ -33,7 +33,7 @@ public:
/// CValue implementation
virtual bool IsEqual(const STR_String & other);
virtual const STR_String & GetText();
- virtual float GetNumber();
+ virtual double GetNumber();
virtual CValue* Calc(VALUE_OPERATOR op, CValue *val);
virtual CValue* CalcFinal(VALUE_DATA_TYPE dtype, VALUE_OPERATOR op, CValue *val);
diff --git a/source/gameengine/Expressions/Value.cpp b/source/gameengine/Expressions/Value.cpp
index ebb12636ac2..7cb97909119 100644
--- a/source/gameengine/Expressions/Value.cpp
+++ b/source/gameengine/Expressions/Value.cpp
@@ -36,125 +36,24 @@ bool CValue::m_ignore_deprecation_warnings(false);
#ifndef NO_EXP_PYTHON_EMBEDDING
-PyObject* cvalue_add(PyObject*v, PyObject*w)
-{
- return ((CValue*)v)->Calc(VALUE_ADD_OPERATOR,(CValue*)w);
-}
-PyObject* cvalue_sub(PyObject*v, PyObject*w)
-{
- return ((CValue*)v)->Calc(VALUE_SUB_OPERATOR,(CValue*)w);
-}
-PyObject* cvalue_mul(PyObject*v, PyObject*w)
-{
- return ((CValue*)v)->Calc(VALUE_MUL_OPERATOR,(CValue*)w);
-}
-PyObject* cvalue_div(PyObject*v, PyObject*w)
-{
- return ((CValue*)v)->Calc(VALUE_DIV_OPERATOR,(CValue*)w);
-}
-PyObject* cvalue_mod(PyObject*v, PyObject*w)
-{
- return ((CValue*)v)->Calc(VALUE_MOD_OPERATOR,(CValue*)w);
-}
-PyObject* cvalue_neg(PyObject*v)
-{
- return ((CValue*)v)->Calc(VALUE_NEG_OPERATOR,(CValue*)v);
-}
-PyObject* cvalue_pos(PyObject*v)
-{
- return ((CValue*)v)->Calc(VALUE_POS_OPERATOR,(CValue*)v);
-}
-
-
-int MyPyCompare (PyObject* v,PyObject* w)
-{
- CValue* eqval = ((CValue*)v)->Calc(VALUE_EQL_OPERATOR,(CValue*)w);
- STR_String txt = eqval->GetText();
- eqval->Release();
- if (txt=="TRUE")
- return 0;
- CValue* lessval = ((CValue*)v)->Calc(VALUE_LES_OPERATOR,(CValue*)w);
- txt = lessval->GetText();
- lessval->Release();
- if (txt=="TRUE")
- return -1;
-
- return 1;
-}
-
-
-int cvalue_coerce(PyObject** pv,PyObject** pw)
-{
- if (PyInt_Check(*pw)) {
- double db = (double)PyInt_AsLong(*pw);
- *pw = new CIntValue((int) db);
- Py_INCREF(*pv);
- return 0;
- }
- else if (PyLong_Check(*pw)) {
- double db = PyLong_AsDouble(*pw);
- *pw = new CFloatValue(db);
- Py_INCREF(*pv);
- return 0;
- }
- else if (PyFloat_Check(*pw)) {
- double db = PyFloat_AsDouble(*pw);
- *pw = new CFloatValue(db);
- Py_INCREF(*pv);
- return 0;
- } else if (PyString_Check(*pw)) {
- const STR_String str = PyString_AsString(*pw);
- *pw = new CStringValue(str,"");
- Py_INCREF(*pv);
- return 0;
- }
- return 1; /* Can't do it */
-
-}
-static PyNumberMethods cvalue_as_number = {
- (binaryfunc)cvalue_add, /*nb_add*/
- (binaryfunc)cvalue_sub, /*nb_subtract*/
- (binaryfunc)cvalue_mul, /*nb_multiply*/
- (binaryfunc)cvalue_div, /*nb_divide*/
- (binaryfunc)cvalue_mod, /*nb_remainder*/
- 0,//(binaryfunc)cvalue_divmod, /*nb_divmod*/
- 0,//0,//0,//0,//(ternaryfunc)cvalue_pow, /*nb_power*/
- (unaryfunc)cvalue_neg, /*nb_negative*/
- 0,//(unaryfunc)cvalue_pos, /*nb_positive*/
- 0,//(unaryfunc)cvalue_abs, /*nb_absolute*/
- 0,//(inquiry)cvalue_nonzero, /*nb_nonzero*/
- 0, /*nb_invert*/
- 0, /*nb_lshift*/
- 0, /*nb_rshift*/
- 0, /*nb_and*/
- 0, /*nb_xor*/
- 0, /*nb_or*/
- (coercion)cvalue_coerce, /*nb_coerce*/
- 0,//(unaryfunc)cvalue_int, /*nb_int*/
- 0,//(unaryfunc)cvalue_long, /*nb_long*/
- 0,//(unaryfunc)cvalue_float, /*nb_float*/
- 0, /*nb_oct*/
- 0, /*nb_hex*/
-};
-
-
PyTypeObject CValue::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"CValue",
- sizeof(CValue),
+ sizeof(PyObjectPlus_Proxy),
+ 0,
+ py_base_dealloc,
0,
- PyDestructor,
0,
- __getattr,
- __setattr,
- &MyPyCompare,
- __repr,
- &cvalue_as_number,
0,
0,
+ py_base_repr,
0,
- 0
+ 0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
PyParentObject CValue::Parents[] = {
@@ -168,7 +67,7 @@ PyMethodDef CValue::Methods[] = {
{NULL,NULL} //Sentinel
};
-PyObject* CValue::PyGetName(PyObject* self)
+PyObject* CValue::PyGetName()
{
return PyString_FromString(this->GetName());
}
@@ -320,55 +219,70 @@ STR_String CValue::op2str (VALUE_OPERATOR op)
//
void CValue::SetProperty(const STR_String & name,CValue* ioProperty)
{
- // Check if somebody is setting an empty property
if (ioProperty==NULL)
- {
+ { // Check if somebody is setting an empty property
trace("Warning:trying to set empty property!");
return;
}
- // Make sure we have a property array
- if (m_pNamedPropertyArray == NULL)
+ if (m_pNamedPropertyArray)
+ { // Try to replace property (if so -> exit as soon as we replaced it)
+ CValue* oldval = (*m_pNamedPropertyArray)[name];
+ if (oldval)
+ oldval->Release();
+ }
+ else { // Make sure we have a property array
m_pNamedPropertyArray = new std::map<STR_String,CValue *>;
-
- // Try to replace property (if so -> exit as soon as we replaced it)
- CValue* oldval = (*m_pNamedPropertyArray)[name];
- if (oldval)
- {
- oldval->Release();
}
// Add property at end of array
(*m_pNamedPropertyArray)[name] = ioProperty->AddRef();//->Add(ioProperty);
}
+void CValue::SetProperty(const char* name,CValue* ioProperty)
+{
+ if (ioProperty==NULL)
+ { // Check if somebody is setting an empty property
+ trace("Warning:trying to set empty property!");
+ return;
+ }
+ if (m_pNamedPropertyArray)
+ { // Try to replace property (if so -> exit as soon as we replaced it)
+ CValue* oldval = (*m_pNamedPropertyArray)[name];
+ if (oldval)
+ oldval->Release();
+ }
+ else { // Make sure we have a property array
+ m_pNamedPropertyArray = new std::map<STR_String,CValue *>;
+ }
+
+ // Add property at end of array
+ (*m_pNamedPropertyArray)[name] = ioProperty->AddRef();//->Add(ioProperty);
+}
//
// Get pointer to a property with name <inName>, returns NULL if there is no property named <inName>
//
CValue* CValue::GetProperty(const STR_String & inName)
{
- // Check properties, as soon as we found it -> Return a pointer to the property
- CValue* result = NULL;
- if (m_pNamedPropertyArray)
- {
- std::map<STR_String,CValue*>::iterator it = (*m_pNamedPropertyArray).find(inName);
- if (!( it==m_pNamedPropertyArray->end()))
- {
- result = (*it).second;
- }
-
+ if (m_pNamedPropertyArray) {
+ std::map<STR_String,CValue*>::iterator it = m_pNamedPropertyArray->find(inName);
+ if (it != m_pNamedPropertyArray->end())
+ return (*it).second;
}
- //for (int i=0; i<m_pValuePropertyArray->size(); i++)
- // if ((*m_pValuePropertyArray)[i]->GetName() == inName)
- // return (*m_pValuePropertyArray)[i];
-
- // Did not find property with name <inName>, return NULL property pointer
- return result;
+ return NULL;
}
-
+CValue* CValue::GetProperty(const char *inName)
+{
+ if (m_pNamedPropertyArray) {
+ std::map<STR_String,CValue*>::iterator it = m_pNamedPropertyArray->find(inName);
+ if (it != m_pNamedPropertyArray->end())
+ return (*it).second;
+ }
+ return NULL;
+}
//
// Get text description of property with name <inName>, returns an empty string if there is no property named <inName>
@@ -386,7 +300,7 @@ float CValue::GetPropertyNumber(const STR_String& inName,float defnumber)
{
CValue *property = GetProperty(inName);
if (property)
- return property->GetNumber();
+ return property->GetNumber();
else
return defnumber;
}
@@ -396,26 +310,20 @@ float CValue::GetPropertyNumber(const STR_String& inName,float defnumber)
//
// Remove the property named <inName>, returns true if the property was succesfully removed, false if property was not found or could not be removed
//
-bool CValue::RemoveProperty(const STR_String & inName)
+bool CValue::RemoveProperty(const char *inName)
{
// Check if there are properties at all which can be removed
- if (m_pNamedPropertyArray) {
- CValue* val = GetProperty(inName);
- if (NULL != val)
+ if (m_pNamedPropertyArray)
+ {
+ std::map<STR_String,CValue*>::iterator it = m_pNamedPropertyArray->find(inName);
+ if (it != m_pNamedPropertyArray->end())
{
- val->Release();
- m_pNamedPropertyArray->erase(inName);
+ ((*it).second)->Release();
+ m_pNamedPropertyArray->erase(it);
return true;
}
- }
-
- char err[128];
- if (m_pNamedPropertyArray)
- sprintf(err, "attribute \"%s\" dosnt exist", inName.ReadPtr());
- else
- sprintf(err, "attribute \"%s\" dosnt exist (no property array)", inName.ReadPtr());
+ }
- PyErr_SetString(PyExc_AttributeError, err);
return false;
}
@@ -426,8 +334,10 @@ vector<STR_String> CValue::GetPropertyNames()
{
vector<STR_String> result;
if(!m_pNamedPropertyArray) return result;
- for ( std::map<STR_String,CValue*>::iterator it = m_pNamedPropertyArray->begin();
- !(it == m_pNamedPropertyArray->end());it++)
+ result.reserve(m_pNamedPropertyArray->size());
+
+ std::map<STR_String,CValue*>::iterator it;
+ for (it= m_pNamedPropertyArray->begin(); (it != m_pNamedPropertyArray->end()); it++)
{
result.push_back((*it).first);
}
@@ -444,8 +354,8 @@ void CValue::ClearProperties()
return;
// Remove all properties
- for ( std::map<STR_String,CValue*>::iterator it = m_pNamedPropertyArray->begin();
- !(it == m_pNamedPropertyArray->end());it++)
+ std::map<STR_String,CValue*>::iterator it;
+ for (it= m_pNamedPropertyArray->begin();(it != m_pNamedPropertyArray->end()); it++)
{
CValue* tmpval = (*it).second;
//STR_String name = (*it).first;
@@ -464,9 +374,11 @@ void CValue::ClearProperties()
//
void CValue::SetPropertiesModified(bool inModified)
{
- int numprops = GetPropertyCount();
- for (int i=0; i<numprops; i++)
- GetProperty(i)->SetModified(inModified);
+ if(!m_pNamedPropertyArray) return;
+ std::map<STR_String,CValue*>::iterator it;
+
+ for (it= m_pNamedPropertyArray->begin();(it != m_pNamedPropertyArray->end()); it++)
+ ((*it).second)->SetModified(inModified);
}
@@ -476,11 +388,13 @@ void CValue::SetPropertiesModified(bool inModified)
//
bool CValue::IsAnyPropertyModified()
{
- int numprops = GetPropertyCount();
- for (int i=0;i<numprops;i++)
- if (GetProperty(i)->IsModified())
+ if(!m_pNamedPropertyArray) return false;
+ std::map<STR_String,CValue*>::iterator it;
+
+ for (it= m_pNamedPropertyArray->begin();(it != m_pNamedPropertyArray->end()); it++)
+ if (((*it).second)->IsModified())
return true;
-
+
return false;
}
@@ -489,7 +403,6 @@ bool CValue::IsAnyPropertyModified()
//
// Get property number <inIndex>
//
-
CValue* CValue::GetProperty(int inIndex)
{
@@ -498,8 +411,8 @@ CValue* CValue::GetProperty(int inIndex)
if (m_pNamedPropertyArray)
{
- for ( std::map<STR_String,CValue*>::iterator it = m_pNamedPropertyArray->begin();
- !(it == m_pNamedPropertyArray->end());it++)
+ std::map<STR_String,CValue*>::iterator it;
+ for (it= m_pNamedPropertyArray->begin(); (it != m_pNamedPropertyArray->end()); it++)
{
if (count++==inIndex)
{
@@ -535,8 +448,8 @@ void CValue::CloneProperties(CValue *replica)
if (m_pNamedPropertyArray)
{
replica->m_pNamedPropertyArray=NULL;
- for ( std::map<STR_String,CValue*>::iterator it = m_pNamedPropertyArray->begin();
- !(it == m_pNamedPropertyArray->end());it++)
+ std::map<STR_String,CValue*>::iterator it;
+ for (it= m_pNamedPropertyArray->begin(); (it != m_pNamedPropertyArray->end()); it++)
{
CValue *val = (*it).second->GetReplica();
replica->SetProperty((*it).first,val);
@@ -595,6 +508,7 @@ int CValue::Release()
{
// Reference count reached 0, delete ourselves and return 0
// MT_assert(m_refcount==0, "Reference count reached sub-zero, object released too much");
+
delete this;
return 0;
}
@@ -624,9 +538,6 @@ void CValue::AddDataToReplica(CValue *replica)
{
replica->m_refcount = 1;
- //register with Python
- _Py_NewReference(replica);
-
#ifdef _DEBUG
//gRefCountValue++;
#endif
@@ -685,39 +596,28 @@ PyAttributeDef CValue::Attributes[] = {
};
-PyObject* CValue::_getattr(const char *attr)
+PyObject* CValue::py_getattro(PyObject *attr)
{
- CValue* resultattr = FindIdentifier(STR_String(attr));
- STR_String text;
+ char *attr_str= PyString_AsString(attr);
+ CValue* resultattr = GetProperty(attr_str);
if (resultattr)
{
- if (resultattr->IsError())
- {
- resultattr->Release();
- } else
- {
- // to avoid some compare problems, return a real pythonthing
- PyObject* pyconvert = resultattr->ConvertValueToPython();
- if (pyconvert)
- {
- resultattr->Release();
- return pyconvert;
- } else
- {
- // also check if it's already in pythoninterpreter!
- return resultattr;
- }
-
- }
+ PyObject* pyconvert = resultattr->ConvertValueToPython();
+
+ if (pyconvert)
+ return pyconvert;
+ else
+ return resultattr->GetProxy();
}
- _getattr_up(PyObjectPlus);
+ py_getattro_up(PyObjectPlus);
}
CValue* CValue::ConvertPythonToValue(PyObject* pyobj)
{
CValue* vallie = NULL;
-
+ /* refcounting is broking here! - this crashes anyway, just store a python list for KX_GameObject */
+#if 0
if (PyList_Check(pyobj))
{
CListValue* listval = new CListValue();
@@ -748,13 +648,18 @@ CValue* CValue::ConvertPythonToValue(PyObject* pyobj)
}
} else
+#endif
if (PyFloat_Check(pyobj))
{
vallie = new CFloatValue( (float)PyFloat_AsDouble(pyobj) );
} else
if (PyInt_Check(pyobj))
{
- vallie = new CIntValue( (int)PyInt_AS_LONG(pyobj) );
+ vallie = new CIntValue( (cInt)PyInt_AS_LONG(pyobj) );
+ } else
+ if (PyLong_Check(pyobj))
+ {
+ vallie = new CIntValue( (cInt)PyLong_AsLongLong(pyobj) );
} else
if (PyString_Check(pyobj))
{
@@ -766,42 +671,56 @@ CValue* CValue::ConvertPythonToValue(PyObject* pyobj)
} else
{
/* return an error value from the caller */
- PyErr_SetString(PyExc_TypeError, "This python value could not be assigned to a game engine property");
+ PyErr_SetString(PyExc_TypeError, "This python type could not be converted to a to a game engine property");
}
return vallie;
}
-int CValue::_delattr(const char *attr)
+int CValue::py_delattro(PyObject *attr)
{
- if (!RemoveProperty(STR_String(attr))) /* sets error */
- return 1;
- return 0;
+ char *attr_str= PyString_AsString(attr);
+ if (RemoveProperty(STR_String(attr_str)))
+ return 0;
+
+ PyErr_Format(PyExc_AttributeError, "attribute \"%s\" dosnt exist", attr_str);
+ return 1;
}
-int CValue::_setattr(const char *attr,PyObject* pyobj)
+int CValue::py_setattro(PyObject *attr, PyObject* pyobj)
{
+ char *attr_str= PyString_AsString(attr);
+ CValue* oldprop = GetProperty(attr_str);
+
CValue* vallie = ConvertPythonToValue(pyobj);
if (vallie)
{
- STR_String attr_str = attr;
- CValue* oldprop = GetProperty(attr_str);
-
if (oldprop)
- {
oldprop->SetValue(vallie);
- } else
- {
+ else
SetProperty(attr_str, vallie);
- }
+
vallie->Release();
- } else
- {
- return 1; /* ConvertPythonToValue sets the error message */
+ }
+ else {
+ // ConvertPythonToValue sets the error message
+ // must return missing so KX_GameObect knows this
+ // attribute was not a function or bult in attribute,
+ //
+ // CValue attributes override internal attributes
+ // so if it exists as a CValue attribute already,
+ // assume your trying to set it to a differnt CValue attribute
+ // otherwise return PY_SET_ATTR_MISSING so children
+ // classes know they can set it without conflict
+
+ if (GetProperty(attr_str))
+ return PY_SET_ATTR_COERCE_FAIL; /* failed to set an existing attribute */
+ else
+ return PY_SET_ATTR_MISSING; /* allow the KX_GameObject dict to set */
}
- //PyObjectPlus::_setattr(attr,value);
- return 0;
+ //PyObjectPlus::py_setattro(attr,value);
+ return PY_SET_ATTR_SUCCESS;
};
PyObject* CValue::ConvertKeysToPython( void )
@@ -811,8 +730,8 @@ PyObject* CValue::ConvertKeysToPython( void )
if (m_pNamedPropertyArray)
{
- for ( std::map<STR_String,CValue*>::iterator it = m_pNamedPropertyArray->begin();
- !(it == m_pNamedPropertyArray->end());it++)
+ std::map<STR_String,CValue*>::iterator it;
+ for (it= m_pNamedPropertyArray->begin(); (it != m_pNamedPropertyArray->end()); it++)
{
pystr = PyString_FromString( (*it).first );
PyList_Append(pylist, pystr);
@@ -826,7 +745,7 @@ PyObject* CValue::ConvertKeysToPython( void )
PyObject* CValue::PyMake(PyObject* ignored,PyObject* args)
{
- //if (!PyArg_ParseTuple(args,"s",&name)) return NULL;
+ //if (!PyArg_ParseTuple(args,"s:make",&name)) return NULL;
Py_RETURN_NONE;//new CValue();
}
*/
@@ -878,7 +797,7 @@ void CValue::ShowDeprecationWarning(const char* old_way,const char* new_way)
PyObject *getframe, *frame;
PyObject *f_lineno, *f_code, *co_filename;
- getframe = PySys_GetObject("_getframe"); // borrowed
+ getframe = PySys_GetObject((char *)"_getframe"); // borrowed
if (getframe) {
frame = PyObject_CallObject(getframe, NULL);
if (frame) {
diff --git a/source/gameengine/Expressions/Value.h b/source/gameengine/Expressions/Value.h
index caf1064dc32..a687e1a493c 100644
--- a/source/gameengine/Expressions/Value.h
+++ b/source/gameengine/Expressions/Value.h
@@ -217,33 +217,14 @@ public:
CValue(PyTypeObject *T = &Type);
//static PyObject* PyMake(PyObject*,PyObject*);
- virtual PyObject *_repr(void)
+ virtual PyObject *py_repr(void)
{
- return Py_BuildValue("s",(const char*)GetText());
+ return PyString_FromString((const char*)GetText());
}
- virtual PyObject* _getattr(const char *attr);
-
- void SpecialRelease()
- {
- int i=0;
- if (ob_refcnt == 0)
- {
- _Py_NewReference(this);
-
- } else
- {
- i++;
- }
- Release();
- }
- static void PyDestructor(PyObject *P) // python wrapper
- {
- ((CValue*)P)->SpecialRelease();
- };
-
+ virtual PyObject* py_getattro(PyObject *attr);
virtual PyObject* ConvertValueToPython() {
return NULL;
}
@@ -251,8 +232,8 @@ public:
virtual CValue* ConvertPythonToValue(PyObject* pyobj);
- virtual int _delattr(const char *attr);
- virtual int _setattr(const char *attr, PyObject* value);
+ virtual int py_delattro(PyObject *attr);
+ virtual int py_setattro(PyObject *attr, PyObject* value);
virtual PyObject* ConvertKeysToPython( void );
@@ -280,13 +261,16 @@ public:
int GetRefCount() { return m_refcount; }
virtual CValue* AddRef(); // Add a reference to this value
virtual int Release(); // Release a reference to this value (when reference count reaches 0, the value is removed from the heap)
+
/// Property Management
virtual void SetProperty(const STR_String& name,CValue* ioProperty); // Set property <ioProperty>, overwrites and releases a previous property with the same name if needed
- virtual CValue* GetProperty(const STR_String & inName); // Get pointer to a property with name <inName>, returns NULL if there is no property named <inName>
+ virtual void SetProperty(const char* name,CValue* ioProperty);
+ virtual CValue* GetProperty(const char* inName); // Get pointer to a property with name <inName>, returns NULL if there is no property named <inName>
+ virtual CValue* GetProperty(const STR_String & inName);
STR_String GetPropertyText(const STR_String & inName,const STR_String& deftext=""); // Get text description of property with name <inName>, returns an empty string if there is no property named <inName>
float GetPropertyNumber(const STR_String& inName,float defnumber);
- virtual bool RemoveProperty(const STR_String & inName); // Remove the property named <inName>, returns true if the property was succesfully removed, false if property was not found or could not be removed
+ virtual bool RemoveProperty(const char *inName); // Remove the property named <inName>, returns true if the property was succesfully removed, false if property was not found or could not be removed
virtual vector<STR_String> GetPropertyNames();
virtual void ClearProperties(); // Clear all properties
@@ -304,7 +288,7 @@ public:
virtual void SetColorOperator(VALUE_OPERATOR op);
virtual const STR_String & GetText() = 0;
- virtual float GetNumber() = 0;
+ virtual double GetNumber() = 0;
double* ZeroVector() { return m_sZeroVec; };
virtual double* GetVector3(bool bGetTransformedVec = false);
diff --git a/source/gameengine/Expressions/VectorValue.cpp b/source/gameengine/Expressions/VectorValue.cpp
index bea6902eba8..497a50b90e7 100644
--- a/source/gameengine/Expressions/VectorValue.cpp
+++ b/source/gameengine/Expressions/VectorValue.cpp
@@ -156,7 +156,7 @@ this object
return ret;
}
-float CVectorValue::GetNumber()
+double CVectorValue::GetNumber()
{
return m_vec[KX_X];
}
diff --git a/source/gameengine/Expressions/VectorValue.h b/source/gameengine/Expressions/VectorValue.h
index 5d9b2a98891..99bf0abb11b 100644
--- a/source/gameengine/Expressions/VectorValue.h
+++ b/source/gameengine/Expressions/VectorValue.h
@@ -32,7 +32,7 @@ public:
void SetVector(double newvec[]);
void Configure(CValue* menuvalue);
virtual double* GetVector3(bool bGetTransformedVec=false);
- virtual float GetNumber();
+ virtual double GetNumber();
CValue* Calc(VALUE_OPERATOR op, CValue *val) {
return val->CalcFinal(VALUE_VECTOR_TYPE, op, this);
diff --git a/source/gameengine/Expressions/VoidValue.h b/source/gameengine/Expressions/VoidValue.h
index 4bde0254787..10a6ff9ad3d 100644
--- a/source/gameengine/Expressions/VoidValue.h
+++ b/source/gameengine/Expressions/VoidValue.h
@@ -47,7 +47,7 @@ public:
/// Value -> String or number
virtual const STR_String & GetText(); // Get string description of void value (unimplemented)
- virtual float GetNumber() { return -1; }
+ virtual double GetNumber() { return -1; }
/// Value calculation
virtual CValue* Calc(VALUE_OPERATOR op, CValue *val);
diff --git a/source/gameengine/GameLogic/Joystick/SCA_Joystick.cpp b/source/gameengine/GameLogic/Joystick/SCA_Joystick.cpp
index c21e5db1410..c300baa9bd4 100644
--- a/source/gameengine/GameLogic/Joystick/SCA_Joystick.cpp
+++ b/source/gameengine/GameLogic/Joystick/SCA_Joystick.cpp
@@ -29,6 +29,7 @@
#endif
#include <stdio.h>
+#include <stdlib.h>
#include "SCA_Joystick.h"
#include "SCA_JoystickPrivate.h"
@@ -36,21 +37,19 @@
SCA_Joystick::SCA_Joystick(short int index)
:
m_joyindex(index),
- m_axis10(0),
- m_axis11(0),
- m_axis20(0),
- m_axis21(0),
m_prec(3200),
m_buttonnum(-2),
m_axismax(-1),
- m_hatdir(-2),
m_buttonmax(-1),
m_hatmax(-1),
+ m_hatdir(-2),
m_isinit(0),
m_istrig_axis(0),
m_istrig_button(0),
m_istrig_hat(0)
{
+ for(int i=0; i<JOYAXIS_MAX; i++)
+ m_axis_array[i]= 0;
#ifndef DISABLE_SDL
m_private = new PrivateData();
#endif
@@ -125,47 +124,30 @@ void SCA_Joystick::cSetPrecision(int val)
}
-bool SCA_Joystick::aAnyAxisIsPositive(int axis)
+bool SCA_Joystick::aAxisPairIsPositive(int axis)
{
- bool result;
- int res = pAxisTest(axis);
- res > m_prec? result = true: result = false;
- return result;
+ return (pAxisTest(axis) > m_prec) ? true:false;
}
-bool SCA_Joystick::aRightAxisIsPositive(int axis)
+bool SCA_Joystick::aAxisPairDirectionIsPositive(int axis, int dir)
{
- bool result;
- int res = pGetAxis(axis,1);
- res > m_prec? result = true: result = false;
- return result;
-}
-
-bool SCA_Joystick::aUpAxisIsPositive(int axis)
-{
- bool result;
- int res = pGetAxis(axis,0);
- res < -m_prec? result = true : result = false;
- return result;
+ int res;
+
+ if (dir==JOYAXIS_UP || dir==JOYAXIS_DOWN)
+ res = pGetAxis(axis, 1);
+ else /* JOYAXIS_LEFT || JOYAXIS_RIGHT */
+ res = pGetAxis(axis, 0);
+
+ if (dir==JOYAXIS_DOWN || dir==JOYAXIS_RIGHT)
+ return (res > m_prec) ? true : false;
+ else /* JOYAXIS_UP || JOYAXIS_LEFT */
+ return (res < -m_prec) ? true : false;
}
-
-bool SCA_Joystick::aLeftAxisIsPositive(int axis)
+bool SCA_Joystick::aAxisIsPositive(int axis_single)
{
- bool result;
- int res = pGetAxis(axis,1);
- res < -m_prec ? result = true : result = false;
- return result;
-}
-
-
-bool SCA_Joystick::aDownAxisIsPositive(int axis)
-{
- bool result;
- int res = pGetAxis(axis,0);
- res > m_prec ? result = true:result = false;
- return result;
+ return abs(m_axis_array[axis_single]) > m_prec ? true:false;
}
bool SCA_Joystick::aAnyButtonPressIsPositive(void)
@@ -255,8 +237,12 @@ bool SCA_Joystick::CreateJoystickDevice(void)
/* must run after being initialized */
m_axismax = SDL_JoystickNumAxes(m_private->m_joystick);
+ if (m_axismax > JOYAXIS_MAX) m_axismax= JOYAXIS_MAX; /* very unlikely */
+
m_buttonmax = SDL_JoystickNumButtons(m_private->m_joystick);
m_hatmax = SDL_JoystickNumHats(m_private->m_joystick);
+
+
}
return true;
#endif
@@ -288,17 +274,8 @@ int SCA_Joystick::Connected(void)
void SCA_Joystick::pFillAxes()
{
#ifndef DISABLE_SDL
- if(m_axismax == 1){
- m_axis10 = SDL_JoystickGetAxis(m_private->m_joystick, 0);
- m_axis11 = SDL_JoystickGetAxis(m_private->m_joystick, 1);
- }else if(m_axismax > 1){
- m_axis10 = SDL_JoystickGetAxis(m_private->m_joystick, 0);
- m_axis11 = SDL_JoystickGetAxis(m_private->m_joystick, 1);
- m_axis20 = SDL_JoystickGetAxis(m_private->m_joystick, 2);
- m_axis21 = SDL_JoystickGetAxis(m_private->m_joystick, 3);
- }else{
- m_axis10 = m_axis11 = m_axis20 = m_axis21 = 0;
- }
+ for(int i=0; i<m_axismax; i++)
+ m_axis_array[i]= SDL_JoystickGetAxis(m_private->m_joystick, i);
#endif
}
@@ -306,10 +283,7 @@ void SCA_Joystick::pFillAxes()
int SCA_Joystick::pGetAxis(int axisnum, int udlr)
{
#ifndef DISABLE_SDL
- if(axisnum == 1 && udlr == 1)return m_axis10; //u/d
- if(axisnum == 1 && udlr == 0)return m_axis11; //l/r
- if(axisnum == 2 && udlr == 0)return m_axis20; //...
- if(axisnum == 2 && udlr == 1)return m_axis21;
+ return m_axis_array[(axisnum*2)+udlr];
#endif
return 0;
}
@@ -317,13 +291,9 @@ int SCA_Joystick::pGetAxis(int axisnum, int udlr)
int SCA_Joystick::pAxisTest(int axisnum)
{
#ifndef DISABLE_SDL
- short i1,i2;
- if(axisnum == 1) {
- i1 = m_axis10; i2 = m_axis11;
- }
- else if(axisnum == 2) {
- i1 = m_axis20; i2 = m_axis21;
- }
+ short i1= m_axis_array[(axisnum*2)];
+ short i2= m_axis_array[(axisnum*2)+1];
+
/* long winded way to do
* return MAX2(abs(i1), abs(i2))
* avoid abs from math.h */
@@ -335,4 +305,3 @@ int SCA_Joystick::pAxisTest(int axisnum)
return 0;
#endif
}
-
diff --git a/source/gameengine/GameLogic/Joystick/SCA_Joystick.h b/source/gameengine/GameLogic/Joystick/SCA_Joystick.h
index 8335d5538ad..53cd65cd495 100644
--- a/source/gameengine/GameLogic/Joystick/SCA_Joystick.h
+++ b/source/gameengine/GameLogic/Joystick/SCA_Joystick.h
@@ -55,10 +55,8 @@ class SCA_Joystick
/*
*support for 2 axes
*/
-
- int m_axis10,m_axis11;
- int m_axis20,m_axis21;
-
+ int m_axis_array[JOYAXIS_MAX];
+
/*
* Precision or range of the axes
*/
@@ -120,8 +118,11 @@ class SCA_Joystick
void OnButtonUp(SDL_Event *sdl_event);
void OnButtonDown(SDL_Event *sdl_event);
void OnNothing(SDL_Event *sdl_event);
+#if 0 /* not used yet */
void OnBallMotion(SDL_Event *sdl_event){}
#endif
+
+#endif
/*
* Open the joystick
*/
@@ -139,12 +140,12 @@ class SCA_Joystick
void pFillButtons(void);
/*
- * returns m_axis10,m_axis11...
+ * returns m_axis_array
*/
int pAxisTest(int axisnum);
/*
- * returns m_axis10,m_axis11...
+ * returns m_axis_array
*/
int pGetAxis(int axisnum, int udlr);
@@ -166,11 +167,9 @@ public:
/*
*/
- bool aAnyAxisIsPositive(int axis);
- bool aUpAxisIsPositive(int axis);
- bool aDownAxisIsPositive(int axis);
- bool aLeftAxisIsPositive(int axis);
- bool aRightAxisIsPositive(int axis);
+ bool aAxisPairIsPositive(int axis);
+ bool aAxisPairDirectionIsPositive(int axis, int dir); /* function assumes joysticks are in axis pairs */
+ bool aAxisIsPositive(int axis_single); /* check a single axis only */
bool aAnyButtonPressIsPositive(void);
bool aAnyButtonReleaseIsPositive(void);
@@ -184,24 +183,10 @@ public:
void cSetPrecision(int val);
- int GetAxis10(void){
-
- return m_axis10;
-
- }
-
- int GetAxis11(void){
- return m_axis11;
- }
-
- int GetAxis20(void){
- return m_axis20;
+ int GetAxisPosition(int index){
+ return m_axis_array[index];
}
-
- int GetAxis21(void){
- return m_axis21;
- }
-
+
int GetButton(void){
return m_buttonnum;
}
diff --git a/source/gameengine/GameLogic/Joystick/SCA_JoystickDefines.h b/source/gameengine/GameLogic/Joystick/SCA_JoystickDefines.h
index 73ffe1406d9..636c4dd5a42 100644
--- a/source/gameengine/GameLogic/Joystick/SCA_JoystickDefines.h
+++ b/source/gameengine/GameLogic/Joystick/SCA_JoystickDefines.h
@@ -39,5 +39,11 @@
#endif
#define JOYINDEX_MAX 8
+#define JOYAXIS_MAX 16
+
+#define JOYAXIS_RIGHT 0
+#define JOYAXIS_UP 1
+#define JOYAXIS_DOWN 3
+#define JOYAXIS_LEFT 2
#endif
diff --git a/source/gameengine/GameLogic/Joystick/SCA_JoystickEvents.cpp b/source/gameengine/GameLogic/Joystick/SCA_JoystickEvents.cpp
index 73ca288861d..8e190060e95 100644
--- a/source/gameengine/GameLogic/Joystick/SCA_JoystickEvents.cpp
+++ b/source/gameengine/GameLogic/Joystick/SCA_JoystickEvents.cpp
@@ -68,7 +68,7 @@ void SCA_Joystick::OnButtonUp(SDL_Event* sdl_event)
void SCA_Joystick::OnButtonDown(SDL_Event* sdl_event)
{
- if(sdl_event->jbutton.button >= 0 || sdl_event->jbutton.button <= m_buttonmax)
+ if(sdl_event->jbutton.button <= m_buttonmax) /* unsigned int so always above 0 */
{
m_istrig_button = 1;
m_buttonnum = sdl_event->jbutton.button;
@@ -111,9 +111,11 @@ void SCA_Joystick::HandleEvents(void)
case SDL_JOYBUTTONDOWN:
SCA_Joystick::m_instance[sdl_event.jbutton.which]->OnButtonDown(&sdl_event);
break;
+#if 0 /* Not used yet */
case SDL_JOYBALLMOTION:
SCA_Joystick::m_instance[sdl_event.jball.which]->OnBallMotion(&sdl_event);
break;
+#endif
default:
printf("SCA_Joystick::HandleEvents, Unknown SDL event, this should not happen\n");
break;
diff --git a/source/gameengine/GameLogic/SCA_2DFilterActuator.cpp b/source/gameengine/GameLogic/SCA_2DFilterActuator.cpp
index 7bf051f2b5c..251a586308e 100644
--- a/source/gameengine/GameLogic/SCA_2DFilterActuator.cpp
+++ b/source/gameengine/GameLogic/SCA_2DFilterActuator.cpp
@@ -1,5 +1,29 @@
-#include "SCA_IActuator.h"
+/**
+ * SCA_2DFilterActuator.cpp
+ *
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+#include "SCA_IActuator.h"
#include "SCA_2DFilterActuator.h"
#ifdef HAVE_CONFIG_H
@@ -22,7 +46,7 @@ SCA_2DFilterActuator::SCA_2DFilterActuator(
PyTypeObject* T)
: SCA_IActuator(gameobj, T),
m_type(type),
- m_flag(flag),
+ m_disableMotionBlur(flag),
m_float_arg(float_arg),
m_int_arg(int_arg),
m_rasterizer(rasterizer),
@@ -35,12 +59,6 @@ SCA_2DFilterActuator::SCA_2DFilterActuator(
}
}
-void SCA_2DFilterActuator::SetShaderText(STR_String text)
-{
- m_shaderText = text;
-}
-
-
CValue* SCA_2DFilterActuator::GetReplica()
{
@@ -63,7 +81,7 @@ bool SCA_2DFilterActuator::Update()
if( m_type == RAS_2DFilterManager::RAS_2DFILTER_MOTIONBLUR )
{
- if(!m_flag)
+ if(!m_disableMotionBlur)
m_rasterizer->EnableMotionBlur(m_float_arg);
else
m_rasterizer->DisableMotionBlur();
@@ -79,23 +97,35 @@ bool SCA_2DFilterActuator::Update()
}
+void SCA_2DFilterActuator::SetShaderText(STR_String text)
+{
+ m_shaderText = text;
+}
+
+/* ------------------------------------------------------------------------- */
+/* Python functions */
+/* ------------------------------------------------------------------------- */
+
+
+
+/* Integration hooks ------------------------------------------------------- */
PyTypeObject SCA_2DFilterActuator::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"SCA_2DFilterActuator",
- sizeof(SCA_2DFilterActuator),
- 0,
- PyDestructor,
- 0,
- __getattr,
- __setattr,
- 0,
- __repr,
- 0,
- 0,
+ sizeof(PyObjectPlus_Proxy),
0,
- 0,
- 0
+ py_base_dealloc,
+ 0,
+ 0,
+ 0,
+ 0,
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
@@ -109,14 +139,26 @@ PyParentObject SCA_2DFilterActuator::Parents[] = {
PyMethodDef SCA_2DFilterActuator::Methods[] = {
- /* add python functions to deal with m_msg... */
+ /* add python functions to deal with m_msg... */
{NULL,NULL}
};
PyAttributeDef SCA_2DFilterActuator::Attributes[] = {
+ KX_PYATTRIBUTE_STRING_RW("shaderText", 0, 64000, false, SCA_2DFilterActuator, m_shaderText),
+ KX_PYATTRIBUTE_SHORT_RW("disableMotionBlur", 0, 1, true, SCA_2DFilterActuator, m_disableMotionBlur),
+ KX_PYATTRIBUTE_ENUM_RW("type",RAS_2DFilterManager::RAS_2DFILTER_ENABLED,RAS_2DFilterManager::RAS_2DFILTER_NUMBER_OF_FILTERS,false,SCA_2DFilterActuator,m_type),
+ KX_PYATTRIBUTE_INT_RW("passNb", 0, 100, true, SCA_2DFilterActuator, m_int_arg),
+ KX_PYATTRIBUTE_FLOAT_RW("value", 0.0, 100.0, SCA_2DFilterActuator, m_float_arg),
{ NULL } //Sentinel
};
-PyObject* SCA_2DFilterActuator::_getattr(const char *attr) {
- _getattr_up(SCA_IActuator);
+PyObject* SCA_2DFilterActuator::py_getattro(PyObject *attr)
+{
+ py_getattro_up(SCA_IActuator);
+}
+
+int SCA_2DFilterActuator::py_setattro(PyObject *attr, PyObject* value)
+{
+ py_setattro_up(SCA_IActuator);
}
+
diff --git a/source/gameengine/GameLogic/SCA_2DFilterActuator.h b/source/gameengine/GameLogic/SCA_2DFilterActuator.h
index 9da0500afff..de0201a4b19 100644
--- a/source/gameengine/GameLogic/SCA_2DFilterActuator.h
+++ b/source/gameengine/GameLogic/SCA_2DFilterActuator.h
@@ -1,3 +1,30 @@
+/**
+ * SCA_2DFilterActuator.h
+ *
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
#ifndef __SCA_2DFILETRACTUATOR_H__
#define __SCA_2DFILETRACTUATOR_H__
@@ -13,7 +40,7 @@ private:
vector<STR_String> m_propNames;
void * m_gameObj;
RAS_2DFilterManager::RAS_2DFILTER_MODE m_type;
- short m_flag;
+ short m_disableMotionBlur;
float m_float_arg;
int m_int_arg;
STR_String m_shaderText;
@@ -38,7 +65,13 @@ public:
virtual bool Update();
virtual CValue* GetReplica();
- virtual PyObject* _getattr(const char *attr);
+
+ /* --------------------------------------------------------------------- */
+ /* Python interface ---------------------------------------------------- */
+ /* --------------------------------------------------------------------- */
+
+ virtual PyObject* py_getattro(PyObject *attr);
+ virtual int py_setattro(PyObject *attr, PyObject* value);
};
#endif
diff --git a/source/gameengine/GameLogic/SCA_ANDController.cpp b/source/gameengine/GameLogic/SCA_ANDController.cpp
index b67ef7dabaf..1cb03f375cb 100644
--- a/source/gameengine/GameLogic/SCA_ANDController.cpp
+++ b/source/gameengine/GameLogic/SCA_ANDController.cpp
@@ -107,22 +107,22 @@ CValue* SCA_ANDController::GetReplica()
/* Integration hooks ------------------------------------------------------- */
PyTypeObject SCA_ANDController::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"SCA_ANDController",
- sizeof(SCA_ANDController),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0, //&MyPyCompare,
- __repr,
- 0, //&cvalue_as_number,
0,
0,
0,
- 0
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
PyParentObject SCA_ANDController::Parents[] = {
@@ -141,8 +141,8 @@ PyAttributeDef SCA_ANDController::Attributes[] = {
{ NULL } //Sentinel
};
-PyObject* SCA_ANDController::_getattr(const char *attr) {
- _getattr_up(SCA_IController);
+PyObject* SCA_ANDController::py_getattro(PyObject *attr) {
+ py_getattro_up(SCA_IController);
}
/* eof */
diff --git a/source/gameengine/GameLogic/SCA_ANDController.h b/source/gameengine/GameLogic/SCA_ANDController.h
index eba7e1b545a..fdb93d0fc42 100644
--- a/source/gameengine/GameLogic/SCA_ANDController.h
+++ b/source/gameengine/GameLogic/SCA_ANDController.h
@@ -48,7 +48,7 @@ public:
/* Python interface ---------------------------------------------------- */
/* --------------------------------------------------------------------- */
- virtual PyObject* _getattr(const char *attr);
+ virtual PyObject* py_getattro(PyObject *attr);
};
diff --git a/source/gameengine/GameLogic/SCA_ActuatorSensor.cpp b/source/gameengine/GameLogic/SCA_ActuatorSensor.cpp
index 7f8dbef7758..acd906ef9dd 100644
--- a/source/gameengine/GameLogic/SCA_ActuatorSensor.cpp
+++ b/source/gameengine/GameLogic/SCA_ActuatorSensor.cpp
@@ -122,22 +122,22 @@ void SCA_ActuatorSensor::Update()
/* Integration hooks ------------------------------------------------------- */
PyTypeObject SCA_ActuatorSensor::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"SCA_ActuatorSensor",
- sizeof(SCA_ActuatorSensor),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0, //&MyPyCompare,
- __repr,
- 0, //&cvalue_as_number,
0,
0,
0,
- 0
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
PyParentObject SCA_ActuatorSensor::Parents[] = {
@@ -161,11 +161,12 @@ PyAttributeDef SCA_ActuatorSensor::Attributes[] = {
{ NULL } //Sentinel
};
-PyObject* SCA_ActuatorSensor::_getattr(const char *attr) {
- PyObject* object = _getattr_self(Attributes, this, attr);
- if (object != NULL)
- return object;
- _getattr_up(SCA_ISensor); /* implicit return! */
+PyObject* SCA_ActuatorSensor::py_getattro(PyObject *attr) {
+ py_getattro_up(SCA_ISensor);
+}
+
+int SCA_ActuatorSensor::py_setattro(PyObject *attr, PyObject *value) {
+ py_setattro_up(SCA_ISensor);
}
int SCA_ActuatorSensor::CheckActuator(void *self, const PyAttributeDef*)
@@ -180,18 +181,11 @@ int SCA_ActuatorSensor::CheckActuator(void *self, const PyAttributeDef*)
return 1;
}
-int SCA_ActuatorSensor::_setattr(const char *attr, PyObject *value) {
- int ret = _setattr_self(Attributes, this, attr, value);
- if (ret >= 0)
- return ret;
- return SCA_ISensor::_setattr(attr, value);
-}
-
/* 3. getActuator */
const char SCA_ActuatorSensor::GetActuator_doc[] =
"getActuator()\n"
"\tReturn the Actuator with which the sensor operates.\n";
-PyObject* SCA_ActuatorSensor::PyGetActuator(PyObject* self)
+PyObject* SCA_ActuatorSensor::PyGetActuator()
{
ShowDeprecationWarning("getActuator()", "the actuator property");
return PyString_FromString(m_checkactname);
@@ -203,14 +197,14 @@ const char SCA_ActuatorSensor::SetActuator_doc[] =
"\t- name: string\n"
"\tSets the Actuator with which to operate. If there is no Actuator\n"
"\tof this name, the call is ignored.\n";
-PyObject* SCA_ActuatorSensor::PySetActuator(PyObject* self, PyObject* args, PyObject* kwds)
+PyObject* SCA_ActuatorSensor::PySetActuator(PyObject* args)
{
ShowDeprecationWarning("setActuator()", "the actuator property");
/* We should query whether the name exists. Or should we create a prop */
/* on the fly? */
char *actNameArg = NULL;
- if (!PyArg_ParseTuple(args, "s", &actNameArg)) {
+ if (!PyArg_ParseTuple(args, "s:setActuator", &actNameArg)) {
return NULL;
}
diff --git a/source/gameengine/GameLogic/SCA_ActuatorSensor.h b/source/gameengine/GameLogic/SCA_ActuatorSensor.h
index 75ee08f42d6..21960993497 100644
--- a/source/gameengine/GameLogic/SCA_ActuatorSensor.h
+++ b/source/gameengine/GameLogic/SCA_ActuatorSensor.h
@@ -61,11 +61,11 @@ public:
/* Python interface ---------------------------------------------------- */
/* --------------------------------------------------------------------- */
- virtual PyObject* _getattr(const char *attr);
- virtual int _setattr(const char *attr, PyObject *value);
+ virtual PyObject* py_getattro(PyObject *attr);
+ virtual int py_setattro(PyObject *attr, PyObject *value);
/* 3. setProperty */
- KX_PYMETHOD_DOC(SCA_ActuatorSensor,SetActuator);
+ KX_PYMETHOD_DOC_VARARGS(SCA_ActuatorSensor,SetActuator);
/* 4. getProperty */
KX_PYMETHOD_DOC_NOARGS(SCA_ActuatorSensor,GetActuator);
diff --git a/source/gameengine/GameLogic/SCA_AlwaysSensor.cpp b/source/gameengine/GameLogic/SCA_AlwaysSensor.cpp
index 154f0ad8cef..b7ecb0233a1 100644
--- a/source/gameengine/GameLogic/SCA_AlwaysSensor.cpp
+++ b/source/gameengine/GameLogic/SCA_AlwaysSensor.cpp
@@ -105,22 +105,22 @@ bool SCA_AlwaysSensor::Evaluate(CValue* event)
/* Integration hooks ------------------------------------------------------- */
PyTypeObject SCA_AlwaysSensor::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"SCA_AlwaysSensor",
- sizeof(SCA_AlwaysSensor),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0, //&MyPyCompare,
- __repr,
- 0, //&cvalue_as_number,
0,
0,
0,
- 0
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
PyParentObject SCA_AlwaysSensor::Parents[] = {
@@ -139,8 +139,8 @@ PyAttributeDef SCA_AlwaysSensor::Attributes[] = {
{ NULL } //Sentinel
};
-PyObject* SCA_AlwaysSensor::_getattr(const char *attr) {
- _getattr_up(SCA_ISensor);
+PyObject* SCA_AlwaysSensor::py_getattro(PyObject *attr) {
+ py_getattro_up(SCA_ISensor);
}
/* eof */
diff --git a/source/gameengine/GameLogic/SCA_AlwaysSensor.h b/source/gameengine/GameLogic/SCA_AlwaysSensor.h
index ebe6ba80208..87949babf59 100644
--- a/source/gameengine/GameLogic/SCA_AlwaysSensor.h
+++ b/source/gameengine/GameLogic/SCA_AlwaysSensor.h
@@ -52,7 +52,7 @@ public:
/* Python interface ---------------------------------------------------- */
/* --------------------------------------------------------------------- */
- virtual PyObject* _getattr(const char *attr);
+ virtual PyObject* py_getattro(PyObject *attr);
};
diff --git a/source/gameengine/GameLogic/SCA_DelaySensor.cpp b/source/gameengine/GameLogic/SCA_DelaySensor.cpp
index 31a620b939d..44a0175d916 100644
--- a/source/gameengine/GameLogic/SCA_DelaySensor.cpp
+++ b/source/gameengine/GameLogic/SCA_DelaySensor.cpp
@@ -131,22 +131,22 @@ bool SCA_DelaySensor::Evaluate(CValue* event)
/* Integration hooks ------------------------------------------------------- */
PyTypeObject SCA_DelaySensor::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"SCA_DelaySensor",
- sizeof(SCA_DelaySensor),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0, //&MyPyCompare,
- __repr,
- 0, //&cvalue_as_number,
0,
0,
0,
- 0
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
PyParentObject SCA_DelaySensor::Parents[] = {
@@ -178,18 +178,12 @@ PyAttributeDef SCA_DelaySensor::Attributes[] = {
{ NULL } //Sentinel
};
-PyObject* SCA_DelaySensor::_getattr(const char *attr) {
- PyObject* object = _getattr_self(Attributes, this, attr);
- if (object != NULL)
- return object;
- _getattr_up(SCA_ISensor);
+PyObject* SCA_DelaySensor::py_getattro(PyObject *attr) {
+ py_getattro_up(SCA_ISensor);
}
-int SCA_DelaySensor::_setattr(const char *attr, PyObject *value) {
- int ret = _setattr_self(Attributes, this, attr, value);
- if (ret >= 0)
- return ret;
- return SCA_ISensor::_setattr(attr, value);
+int SCA_DelaySensor::py_setattro(PyObject *attr, PyObject *value) {
+ py_setattro_up(SCA_ISensor);
}
@@ -198,12 +192,12 @@ const char SCA_DelaySensor::SetDelay_doc[] =
"\t- delay: length of the initial OFF period as number of frame\n"
"\t 0 for immediate trigger\n"
"\tSet the initial delay before the positive trigger\n";
-PyObject* SCA_DelaySensor::PySetDelay(PyObject* self, PyObject* args, PyObject* kwds)
+PyObject* SCA_DelaySensor::PySetDelay(PyObject* args)
{
ShowDeprecationWarning("setDelay()", "the delay property");
int delay;
- if(!PyArg_ParseTuple(args, "i", &delay)) {
+ if(!PyArg_ParseTuple(args, "i:setDelay", &delay)) {
return NULL;
}
if (delay < 0) {
@@ -220,12 +214,12 @@ const char SCA_DelaySensor::SetDuration_doc[] =
"\t 0 for no ON period\n"
"\tSet the duration of the ON pulse after initial delay.\n"
"\tIf > 0, a negative trigger is fired at the end of the ON pulse.\n";
-PyObject* SCA_DelaySensor::PySetDuration(PyObject* self, PyObject* args, PyObject* kwds)
+PyObject* SCA_DelaySensor::PySetDuration(PyObject* args)
{
ShowDeprecationWarning("setDuration()", "the duration property");
int duration;
- if(!PyArg_ParseTuple(args, "i", &duration)) {
+ if(!PyArg_ParseTuple(args, "i:setDuration", &duration)) {
return NULL;
}
if (duration < 0) {
@@ -241,12 +235,12 @@ const char SCA_DelaySensor::SetRepeat_doc[] =
"\t- repeat: 1 if the initial OFF-ON cycle should be repeated indefinately\n"
"\t 0 if the initial OFF-ON cycle should run only once\n"
"\tSet the sensor repeat mode\n";
-PyObject* SCA_DelaySensor::PySetRepeat(PyObject* self, PyObject* args, PyObject* kwds)
+PyObject* SCA_DelaySensor::PySetRepeat(PyObject* args)
{
ShowDeprecationWarning("setRepeat()", "the repeat property");
int repeat;
- if(!PyArg_ParseTuple(args, "i", &repeat)) {
+ if(!PyArg_ParseTuple(args, "i:setRepeat", &repeat)) {
return NULL;
}
m_repeat = (repeat != 0);
@@ -256,7 +250,7 @@ PyObject* SCA_DelaySensor::PySetRepeat(PyObject* self, PyObject* args, PyObject*
const char SCA_DelaySensor::GetDelay_doc[] =
"getDelay()\n"
"\tReturn the delay parameter value\n";
-PyObject* SCA_DelaySensor::PyGetDelay(PyObject* self)
+PyObject* SCA_DelaySensor::PyGetDelay()
{
ShowDeprecationWarning("getDelay()", "the delay property");
return PyInt_FromLong(m_delay);
@@ -265,7 +259,7 @@ PyObject* SCA_DelaySensor::PyGetDelay(PyObject* self)
const char SCA_DelaySensor::GetDuration_doc[] =
"getDuration()\n"
"\tReturn the duration parameter value\n";
-PyObject* SCA_DelaySensor::PyGetDuration(PyObject* self)
+PyObject* SCA_DelaySensor::PyGetDuration()
{
ShowDeprecationWarning("getDuration()", "the duration property");
return PyInt_FromLong(m_duration);
@@ -274,7 +268,7 @@ PyObject* SCA_DelaySensor::PyGetDuration(PyObject* self)
const char SCA_DelaySensor::GetRepeat_doc[] =
"getRepeat()\n"
"\tReturn the repeat parameter value\n";
-PyObject* SCA_DelaySensor::PyGetRepeat(PyObject* self)
+PyObject* SCA_DelaySensor::PyGetRepeat()
{
ShowDeprecationWarning("getRepeat()", "the repeat property");
return BoolToPyArg(m_repeat);
diff --git a/source/gameengine/GameLogic/SCA_DelaySensor.h b/source/gameengine/GameLogic/SCA_DelaySensor.h
index 491eee61da8..8da76ff7189 100644
--- a/source/gameengine/GameLogic/SCA_DelaySensor.h
+++ b/source/gameengine/GameLogic/SCA_DelaySensor.h
@@ -60,13 +60,13 @@ public:
/* Python interface ---------------------------------------------------- */
/* --------------------------------------------------------------------- */
- virtual PyObject* _getattr(const char *attr);
- virtual int _setattr(const char *attr, PyObject *value);
+ virtual PyObject* py_getattro(PyObject *attr);
+ virtual int py_setattro(PyObject *attr, PyObject *value);
/* setProperty */
- KX_PYMETHOD_DOC(SCA_DelaySensor,SetDelay);
- KX_PYMETHOD_DOC(SCA_DelaySensor,SetDuration);
- KX_PYMETHOD_DOC(SCA_DelaySensor,SetRepeat);
+ KX_PYMETHOD_DOC_VARARGS(SCA_DelaySensor,SetDelay);
+ KX_PYMETHOD_DOC_VARARGS(SCA_DelaySensor,SetDuration);
+ KX_PYMETHOD_DOC_VARARGS(SCA_DelaySensor,SetRepeat);
/* getProperty */
KX_PYMETHOD_DOC_NOARGS(SCA_DelaySensor,GetDelay);
KX_PYMETHOD_DOC_NOARGS(SCA_DelaySensor,GetDuration);
diff --git a/source/gameengine/GameLogic/SCA_ExpressionController.cpp b/source/gameengine/GameLogic/SCA_ExpressionController.cpp
index 8ed46beb7f3..352a39a6fea 100644
--- a/source/gameengine/GameLogic/SCA_ExpressionController.cpp
+++ b/source/gameengine/GameLogic/SCA_ExpressionController.cpp
@@ -109,7 +109,7 @@ void SCA_ExpressionController::Trigger(SCA_LogicManager* logicmgr)
printf(value->GetText());
} else
{
- float num = value->GetNumber();
+ float num = (float)value->GetNumber();
expressionresult = !MT_fuzzyZero(num);
}
value->Release();
diff --git a/source/gameengine/GameLogic/SCA_ExpressionController.h b/source/gameengine/GameLogic/SCA_ExpressionController.h
index 79c26eea1e7..2936742be19 100644
--- a/source/gameengine/GameLogic/SCA_ExpressionController.h
+++ b/source/gameengine/GameLogic/SCA_ExpressionController.h
@@ -59,7 +59,7 @@ public:
/* Python interface ---------------------------------------------------- */
/* --------------------------------------------------------------------- */
-// virtual PyObject* _getattr(const char *attr);
+// virtual PyObject* py_getattro(PyObject *attr);
};
diff --git a/source/gameengine/GameLogic/SCA_ILogicBrick.cpp b/source/gameengine/GameLogic/SCA_ILogicBrick.cpp
index 49d39f75814..3cd750ff63b 100644
--- a/source/gameengine/GameLogic/SCA_ILogicBrick.cpp
+++ b/source/gameengine/GameLogic/SCA_ILogicBrick.cpp
@@ -123,7 +123,7 @@ const STR_String& SCA_ILogicBrick::GetText()
-float SCA_ILogicBrick::GetNumber()
+double SCA_ILogicBrick::GetNumber()
{
return -1;
}
@@ -217,22 +217,22 @@ CValue* SCA_ILogicBrick::GetEvent()
/* python stuff */
PyTypeObject SCA_ILogicBrick::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"SCA_ILogicBrick",
- sizeof(SCA_ILogicBrick),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0, //&MyPyCompare,
- __repr,
- 0, //&cvalue_as_number,
0,
0,
0,
- 0
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
@@ -246,8 +246,8 @@ PyParentObject SCA_ILogicBrick::Parents[] = {
PyMethodDef SCA_ILogicBrick::Methods[] = {
+ // --> Deprecated
{"getOwner", (PyCFunction) SCA_ILogicBrick::sPyGetOwner, METH_NOARGS},
- // --> Deprecated
{"getExecutePriority", (PyCFunction) SCA_ILogicBrick::sPyGetExecutePriority, METH_NOARGS},
{"setExecutePriority", (PyCFunction) SCA_ILogicBrick::sPySetExecutePriority, METH_VARARGS},
// <-- Deprecated
@@ -255,6 +255,7 @@ PyMethodDef SCA_ILogicBrick::Methods[] = {
};
PyAttributeDef SCA_ILogicBrick::Attributes[] = {
+ KX_PYATTRIBUTE_RO_FUNCTION("owner", SCA_ILogicBrick, pyattr_get_owner),
KX_PYATTRIBUTE_INT_RW("executePriority",0,100000,false,SCA_ILogicBrick,m_Execute_Ueber_Priority),
{NULL} //Sentinel
};
@@ -278,30 +279,25 @@ int SCA_ILogicBrick::CheckProperty(void *self, const PyAttributeDef *attrdef)
}
PyObject*
-SCA_ILogicBrick::_getattr(const char *attr)
+SCA_ILogicBrick::py_getattro(PyObject *attr)
{
- PyObject* object = _getattr_self(Attributes, this, attr);
- if (object != NULL)
- return object;
- _getattr_up(CValue);
+ py_getattro_up(CValue);
}
-int SCA_ILogicBrick::_setattr(const char *attr, PyObject *value)
+int SCA_ILogicBrick::py_setattro(PyObject *attr, PyObject *value)
{
- int ret = _setattr_self(Attributes, this, attr, value);
- if (ret >= 0)
- return ret;
- return CValue::_setattr(attr, value);
+ py_setattro_up(CValue);
}
-PyObject* SCA_ILogicBrick::PyGetOwner(PyObject* self)
+PyObject* SCA_ILogicBrick::PyGetOwner()
{
+ ShowDeprecationWarning("getOwner()", "the owner property");
+
CValue* parent = GetParent();
if (parent)
{
- parent->AddRef();
- return parent;
+ return parent->GetProxy();
}
printf("ERROR: Python scriptblock without owner\n");
@@ -310,15 +306,13 @@ PyObject* SCA_ILogicBrick::PyGetOwner(PyObject* self)
-PyObject* SCA_ILogicBrick::PySetExecutePriority(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* SCA_ILogicBrick::PySetExecutePriority(PyObject* args)
{
ShowDeprecationWarning("setExecutePriority()", "the executePriority property");
int priority=0;
- if (!PyArg_ParseTuple(args, "i", &priority)) {
+ if (!PyArg_ParseTuple(args, "i:setExecutePriority", &priority)) {
return NULL;
}
@@ -329,13 +323,26 @@ PyObject* SCA_ILogicBrick::PySetExecutePriority(PyObject* self,
-PyObject* SCA_ILogicBrick::PyGetExecutePriority(PyObject* self)
+PyObject* SCA_ILogicBrick::PyGetExecutePriority()
{
ShowDeprecationWarning("getExecutePriority()", "the executePriority property");
return PyInt_FromLong(m_Execute_Ueber_Priority);
}
+/*Attribute functions */
+PyObject* SCA_ILogicBrick::pyattr_get_owner(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ SCA_ILogicBrick* self= static_cast<SCA_ILogicBrick*>(self_v);
+ CValue* parent = self->GetParent();
+
+ if (parent)
+ return parent->GetProxy();
+
+ Py_RETURN_NONE;
+}
+
+
/* Conversions for making life better. */
bool SCA_ILogicBrick::PyArgToBool(int boolArg)
@@ -347,8 +354,6 @@ bool SCA_ILogicBrick::PyArgToBool(int boolArg)
}
}
-
-
PyObject* SCA_ILogicBrick::BoolToPyArg(bool boolarg)
{
return PyInt_FromLong(boolarg? KX_TRUE: KX_FALSE);
diff --git a/source/gameengine/GameLogic/SCA_ILogicBrick.h b/source/gameengine/GameLogic/SCA_ILogicBrick.h
index 70d49941613..e59d05ea051 100644
--- a/source/gameengine/GameLogic/SCA_ILogicBrick.h
+++ b/source/gameengine/GameLogic/SCA_ILogicBrick.h
@@ -69,7 +69,7 @@ public:
virtual CValue* CalcFinal(VALUE_DATA_TYPE dtype, VALUE_OPERATOR op, CValue *val);
virtual const STR_String & GetText();
- virtual float GetNumber();
+ virtual double GetNumber();
virtual STR_String GetName();
virtual void SetName(STR_String name);
virtual void ReplicaSetName(STR_String name);
@@ -79,8 +79,8 @@ public:
virtual bool LessComparedTo(SCA_ILogicBrick* other);
- virtual PyObject* _getattr(const char *attr);
- virtual int _setattr(const char *attr, PyObject *value);
+ virtual PyObject* py_getattro(PyObject *attr);
+ virtual int py_setattro(PyObject *attr, PyObject *value);
static class SCA_LogicManager* m_sCurrentLogicManager;
@@ -88,8 +88,10 @@ public:
// python methods
KX_PYMETHOD_NOARGS(SCA_ILogicBrick,GetOwner);
- KX_PYMETHOD(SCA_ILogicBrick,SetExecutePriority);
+ KX_PYMETHOD_VARARGS(SCA_ILogicBrick,SetExecutePriority);
KX_PYMETHOD_NOARGS(SCA_ILogicBrick,GetExecutePriority);
+
+ static PyObject* pyattr_get_owner(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
// check that attribute is a property
static int CheckProperty(void *self, const PyAttributeDef *attrdef);
diff --git a/source/gameengine/GameLogic/SCA_IObject.cpp b/source/gameengine/GameLogic/SCA_IObject.cpp
index debd62d44e6..75804525e7a 100644
--- a/source/gameengine/GameLogic/SCA_IObject.cpp
+++ b/source/gameengine/GameLogic/SCA_IObject.cpp
@@ -375,22 +375,22 @@ void SCA_IObject::SetState(unsigned int state)
/* Integration hooks ------------------------------------------------------- */
PyTypeObject SCA_IObject::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"SCA_IObject",
- sizeof(SCA_IObject),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0, //&MyPyCompare,
- __repr,
- 0, //&cvalue_as_number,
0,
0,
0,
- 0
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
@@ -414,7 +414,7 @@ PyAttributeDef SCA_IObject::Attributes[] = {
};
-PyObject* SCA_IObject::_getattr(const char *attr) {
- _getattr_up(CValue);
+PyObject* SCA_IObject::py_getattro(PyObject *attr) {
+ py_getattro_up(CValue);
}
diff --git a/source/gameengine/GameLogic/SCA_IObject.h b/source/gameengine/GameLogic/SCA_IObject.h
index d47353b1ac0..44ed3c8f3fe 100644
--- a/source/gameengine/GameLogic/SCA_IObject.h
+++ b/source/gameengine/GameLogic/SCA_IObject.h
@@ -145,7 +145,7 @@ public:
// const class MT_Point3& ConvertPythonPylist(PyObject* pylist);
// here come the python forwarded methods
- virtual PyObject* _getattr(const char *attr);
+ virtual PyObject* py_getattro(PyObject *attr);
virtual int GetGameObjectType() {return -1;}
diff --git a/source/gameengine/GameLogic/SCA_ISensor.cpp b/source/gameengine/GameLogic/SCA_ISensor.cpp
index e8a072f4c46..68f5653d53a 100644
--- a/source/gameengine/GameLogic/SCA_ISensor.cpp
+++ b/source/gameengine/GameLogic/SCA_ISensor.cpp
@@ -105,7 +105,7 @@ void SCA_ISensor::SetLevel(bool lvl) {
}
-float SCA_ISensor::GetNumber() {
+double SCA_ISensor::GetNumber() {
return IsPositiveTrigger();
}
@@ -218,7 +218,7 @@ void SCA_ISensor::Activate(class SCA_LogicManager* logicmgr, CValue* event)
const char SCA_ISensor::IsPositive_doc[] =
"isPositive()\n"
"\tReturns whether the sensor is in an active state.\n";
-PyObject* SCA_ISensor::PyIsPositive(PyObject* self)
+PyObject* SCA_ISensor::PyIsPositive()
{
ShowDeprecationWarning("isPositive()", "the read-only positive property");
int retval = IsPositiveTrigger();
@@ -228,7 +228,7 @@ PyObject* SCA_ISensor::PyIsPositive(PyObject* self)
const char SCA_ISensor::IsTriggered_doc[] =
"isTriggered()\n"
"\tReturns whether the sensor has triggered the current controller.\n";
-PyObject* SCA_ISensor::PyIsTriggered(PyObject* self)
+PyObject* SCA_ISensor::PyIsTriggered()
{
ShowDeprecationWarning("isTriggered()", "the read-only triggered property");
// check with the current controller
@@ -244,7 +244,7 @@ PyObject* SCA_ISensor::PyIsTriggered(PyObject* self)
const char SCA_ISensor::GetUsePosPulseMode_doc[] =
"getUsePosPulseMode()\n"
"\tReturns whether positive pulse mode is active.\n";
-PyObject* SCA_ISensor::PyGetUsePosPulseMode(PyObject* self)
+PyObject* SCA_ISensor::PyGetUsePosPulseMode()
{
ShowDeprecationWarning("getUsePosPulseMode()", "the usePosPulseMode property");
return BoolToPyArg(m_pos_pulsemode);
@@ -258,11 +258,11 @@ const char SCA_ISensor::SetUsePosPulseMode_doc[] =
"\t - pulse? : Pulse when a positive event occurs?\n"
"\t (KX_TRUE, KX_FALSE)\n"
"\tSet whether to do pulsing when positive pulses occur.\n";
-PyObject* SCA_ISensor::PySetUsePosPulseMode(PyObject* self, PyObject* args, PyObject* kwds)
+PyObject* SCA_ISensor::PySetUsePosPulseMode(PyObject* args)
{
ShowDeprecationWarning("setUsePosPulseMode()", "the usePosPulseMode property");
int pyarg = 0;
- if(!PyArg_ParseTuple(args, "i", &pyarg)) { return NULL; }
+ if(!PyArg_ParseTuple(args, "i:setUsePosPulseMode", &pyarg)) { return NULL; }
m_pos_pulsemode = PyArgToBool(pyarg);
Py_RETURN_NONE;
}
@@ -273,7 +273,7 @@ PyObject* SCA_ISensor::PySetUsePosPulseMode(PyObject* self, PyObject* args, PyOb
const char SCA_ISensor::GetFrequency_doc[] =
"getFrequency()\n"
"\tReturns the frequency of the updates in pulse mode.\n" ;
-PyObject* SCA_ISensor::PyGetFrequency(PyObject* self)
+PyObject* SCA_ISensor::PyGetFrequency()
{
ShowDeprecationWarning("getFrequency()", "the frequency property");
return PyInt_FromLong(m_pulse_frequency);
@@ -287,12 +287,12 @@ const char SCA_ISensor::SetFrequency_doc[] =
"\t- pulse_frequency: The frequency of the updates in pulse mode (integer)"
"\tSet the frequency of the updates in pulse mode.\n"
"\tIf the frequency is negative, it is set to 0.\n" ;
-PyObject* SCA_ISensor::PySetFrequency(PyObject* self, PyObject* args, PyObject* kwds)
+PyObject* SCA_ISensor::PySetFrequency(PyObject* args)
{
ShowDeprecationWarning("setFrequency()", "the frequency property");
int pulse_frequencyArg = 0;
- if(!PyArg_ParseTuple(args, "i", &pulse_frequencyArg)) {
+ if(!PyArg_ParseTuple(args, "i:setFrequency", &pulse_frequencyArg)) {
return NULL;
}
@@ -310,7 +310,7 @@ PyObject* SCA_ISensor::PySetFrequency(PyObject* self, PyObject* args, PyObject*
const char SCA_ISensor::GetInvert_doc[] =
"getInvert()\n"
"\tReturns whether or not pulses from this sensor are inverted.\n" ;
-PyObject* SCA_ISensor::PyGetInvert(PyObject* self)
+PyObject* SCA_ISensor::PyGetInvert()
{
ShowDeprecationWarning("getInvert()", "the invert property");
return BoolToPyArg(m_invert);
@@ -320,11 +320,11 @@ const char SCA_ISensor::SetInvert_doc[] =
"setInvert(invert?)\n"
"\t- invert?: Invert the event-values? (KX_TRUE, KX_FALSE)\n"
"\tSet whether to invert pulses.\n";
-PyObject* SCA_ISensor::PySetInvert(PyObject* self, PyObject* args, PyObject* kwds)
+PyObject* SCA_ISensor::PySetInvert(PyObject* args)
{
ShowDeprecationWarning("setInvert()", "the invert property");
int pyarg = 0;
- if(!PyArg_ParseTuple(args, "i", &pyarg)) { return NULL; }
+ if(!PyArg_ParseTuple(args, "i:setInvert", &pyarg)) { return NULL; }
m_invert = PyArgToBool(pyarg);
Py_RETURN_NONE;
}
@@ -336,7 +336,7 @@ const char SCA_ISensor::GetLevel_doc[] =
"\tA level detector will immediately generate a pulse, negative or positive\n"
"\tdepending on the sensor condition, as soon as the state is activated.\n"
"\tA edge detector will wait for a state change before generating a pulse.\n";
-PyObject* SCA_ISensor::PyGetLevel(PyObject* self)
+PyObject* SCA_ISensor::PyGetLevel()
{
ShowDeprecationWarning("getLevel()", "the level property");
return BoolToPyArg(m_level);
@@ -346,11 +346,11 @@ const char SCA_ISensor::SetLevel_doc[] =
"setLevel(level?)\n"
"\t- level?: Detect level instead of edge? (KX_TRUE, KX_FALSE)\n"
"\tSet whether to detect level or edge transition when entering a state.\n";
-PyObject* SCA_ISensor::PySetLevel(PyObject* self, PyObject* args, PyObject* kwds)
+PyObject* SCA_ISensor::PySetLevel(PyObject* args)
{
ShowDeprecationWarning("setLevel()", "the level property");
int pyarg = 0;
- if(!PyArg_ParseTuple(args, "i", &pyarg)) { return NULL; }
+ if(!PyArg_ParseTuple(args, "i:setLevel", &pyarg)) { return NULL; }
m_level = PyArgToBool(pyarg);
Py_RETURN_NONE;
}
@@ -358,7 +358,7 @@ PyObject* SCA_ISensor::PySetLevel(PyObject* self, PyObject* args, PyObject* kwds
const char SCA_ISensor::GetUseNegPulseMode_doc[] =
"getUseNegPulseMode()\n"
"\tReturns whether negative pulse mode is active.\n";
-PyObject* SCA_ISensor::PyGetUseNegPulseMode(PyObject* self)
+PyObject* SCA_ISensor::PyGetUseNegPulseMode()
{
ShowDeprecationWarning("getUseNegPulseMode()", "the useNegPulseMode property");
return BoolToPyArg(m_neg_pulsemode);
@@ -369,11 +369,11 @@ const char SCA_ISensor::SetUseNegPulseMode_doc[] =
"\t - pulse? : Pulse when a negative event occurs?\n"
"\t (KX_TRUE, KX_FALSE)\n"
"\tSet whether to do pulsing when negative pulses occur.\n";
-PyObject* SCA_ISensor::PySetUseNegPulseMode(PyObject* self, PyObject* args, PyObject* kwds)
+PyObject* SCA_ISensor::PySetUseNegPulseMode(PyObject* args)
{
ShowDeprecationWarning("setUseNegPulseMode()", "the useNegPulseMode property");
int pyarg = 0;
- if(!PyArg_ParseTuple(args, "i", &pyarg)) { return NULL; }
+ if(!PyArg_ParseTuple(args, "i:setUseNegPulseMode", &pyarg)) { return NULL; }
m_neg_pulsemode = PyArgToBool(pyarg);
Py_RETURN_NONE;
}
@@ -393,22 +393,22 @@ KX_PYMETHODDEF_DOC_NOARGS(SCA_ISensor, reset,
/* ----------------------------------------------- */
PyTypeObject SCA_ISensor::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"SCA_ISensor",
- sizeof(SCA_ISensor),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0, //&MyPyCompare,
- __repr,
- 0, //&cvalue_as_number,
0,
0,
0,
- 0
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
PyParentObject SCA_ISensor::Parents[] = {
@@ -454,38 +454,35 @@ PyAttributeDef SCA_ISensor::Attributes[] = {
KX_PYATTRIBUTE_INT_RW("frequency",0,100000,true,SCA_ISensor,m_pulse_frequency),
KX_PYATTRIBUTE_BOOL_RW("invert",SCA_ISensor,m_invert),
KX_PYATTRIBUTE_BOOL_RW("level",SCA_ISensor,m_level),
- // make these properties read-only in _setaddr, must still implement them in _getattr
- KX_PYATTRIBUTE_DUMMY("triggered"),
- KX_PYATTRIBUTE_DUMMY("positive"),
+ KX_PYATTRIBUTE_RO_FUNCTION("triggered", SCA_ISensor, pyattr_get_triggered),
+ KX_PYATTRIBUTE_RO_FUNCTION("positive", SCA_ISensor, pyattr_get_positive),
{ NULL } //Sentinel
};
PyObject*
-SCA_ISensor::_getattr(const char *attr)
+SCA_ISensor::py_getattro(PyObject *attr)
{
- PyObject* object = _getattr_self(Attributes, this, attr);
- if (object != NULL)
- return object;
- if (!strcmp(attr, "triggered"))
- {
- int retval = 0;
- if (SCA_PythonController::m_sCurrentController)
- retval = SCA_PythonController::m_sCurrentController->IsTriggered(this);
- return PyInt_FromLong(retval);
- }
- if (!strcmp(attr, "positive"))
- {
- int retval = IsPositiveTrigger();
- return PyInt_FromLong(retval);
- }
- _getattr_up(SCA_ILogicBrick);
+ py_getattro_up(SCA_ILogicBrick);
}
-int SCA_ISensor::_setattr(const char *attr, PyObject *value)
+int SCA_ISensor::py_setattro(PyObject *attr, PyObject *value)
{
- int ret = _setattr_self(Attributes, this, attr, value);
- if (ret >= 0)
- return ret;
- return SCA_ILogicBrick::_setattr(attr, value);
+ py_setattro_up(SCA_ILogicBrick);
}
+
+PyObject* SCA_ISensor::pyattr_get_triggered(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ SCA_ISensor* self= static_cast<SCA_ISensor*>(self_v);
+ int retval = 0;
+ if (SCA_PythonController::m_sCurrentController)
+ retval = SCA_PythonController::m_sCurrentController->IsTriggered(self);
+ return PyInt_FromLong(retval);
+}
+
+PyObject* SCA_ISensor::pyattr_get_positive(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ SCA_ISensor* self= static_cast<SCA_ISensor*>(self_v);
+ return PyInt_FromLong(self->IsPositiveTrigger());
+}
+
/* eof */
diff --git a/source/gameengine/GameLogic/SCA_ISensor.h b/source/gameengine/GameLogic/SCA_ISensor.h
index 23f2c76c19f..6b1c8cca104 100644
--- a/source/gameengine/GameLogic/SCA_ISensor.h
+++ b/source/gameengine/GameLogic/SCA_ISensor.h
@@ -113,7 +113,7 @@ public:
virtual void RegisterToManager();
virtual void UnregisterToManager();
- virtual float GetNumber();
+ virtual double GetNumber();
/** Stop sensing for a while. */
void Suspend();
@@ -136,24 +136,27 @@ public:
/* Python functions: */
- virtual PyObject* _getattr(const char *attr);
- virtual int _setattr(const char *attr, PyObject *value);
+ virtual PyObject* py_getattro(PyObject *attr);
+ virtual int py_setattro(PyObject *attr, PyObject *value);
//Deprecated functions ----->
KX_PYMETHOD_DOC_NOARGS(SCA_ISensor,IsPositive);
KX_PYMETHOD_DOC_NOARGS(SCA_ISensor,IsTriggered);
KX_PYMETHOD_DOC_NOARGS(SCA_ISensor,GetUsePosPulseMode);
- KX_PYMETHOD_DOC(SCA_ISensor,SetUsePosPulseMode);
+ KX_PYMETHOD_DOC_VARARGS(SCA_ISensor,SetUsePosPulseMode);
KX_PYMETHOD_DOC_NOARGS(SCA_ISensor,GetFrequency);
- KX_PYMETHOD_DOC(SCA_ISensor,SetFrequency);
+ KX_PYMETHOD_DOC_VARARGS(SCA_ISensor,SetFrequency);
KX_PYMETHOD_DOC_NOARGS(SCA_ISensor,GetUseNegPulseMode);
- KX_PYMETHOD_DOC(SCA_ISensor,SetUseNegPulseMode);
+ KX_PYMETHOD_DOC_VARARGS(SCA_ISensor,SetUseNegPulseMode);
KX_PYMETHOD_DOC_NOARGS(SCA_ISensor,GetInvert);
- KX_PYMETHOD_DOC(SCA_ISensor,SetInvert);
+ KX_PYMETHOD_DOC_VARARGS(SCA_ISensor,SetInvert);
KX_PYMETHOD_DOC_NOARGS(SCA_ISensor,GetLevel);
- KX_PYMETHOD_DOC(SCA_ISensor,SetLevel);
+ KX_PYMETHOD_DOC_VARARGS(SCA_ISensor,SetLevel);
//<------
KX_PYMETHOD_DOC_NOARGS(SCA_ISensor,reset);
+
+ static PyObject* pyattr_get_triggered(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_positive(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
};
#endif //__SCA_ISENSOR
diff --git a/source/gameengine/GameLogic/SCA_JoystickSensor.cpp b/source/gameengine/GameLogic/SCA_JoystickSensor.cpp
index c2d90c830cf..1c601eded81 100644
--- a/source/gameengine/GameLogic/SCA_JoystickSensor.cpp
+++ b/source/gameengine/GameLogic/SCA_JoystickSensor.cpp
@@ -117,11 +117,15 @@ bool SCA_JoystickSensor::Evaluate(CValue* event)
case KX_JOYSENSORMODE_AXIS:
{
/* what is what!
- m_axisf == 0 == right
+ m_axisf == JOYAXIS_RIGHT, JOYAXIS_UP, JOYAXIS_DOWN, JOYAXIS_LEFT
m_axisf == 1 == up
m_axisf == 2 == left
m_axisf == 3 == down
- numberof== m_axis -- max 2
+
+ numberof== m_axis (1-4), range is half of JOYAXIS_MAX since
+ it assumes the axis joysticks are axis parirs (0,1), (2,3), etc
+ also note that this starts at 1 where functions its used
+ with expect a zero index.
*/
if (!js->IsTrigAxis() && !reset) /* No events from SDL? - dont bother */
@@ -129,18 +133,7 @@ bool SCA_JoystickSensor::Evaluate(CValue* event)
js->cSetPrecision(m_precision);
if (m_bAllEvents) {
- if(js->aAnyAxisIsPositive(m_axis)){
- m_istrig = 1;
- result = true;
- }else{
- if(m_istrig){
- m_istrig = 0;
- result = true;
- }
- }
- }
- else if(m_axisf == 1){
- if(js->aUpAxisIsPositive(m_axis)){
+ if(js->aAxisPairIsPositive(m_axis-1)){ /* use zero based axis index internally */
m_istrig = 1;
result = true;
}else{
@@ -150,8 +143,8 @@ bool SCA_JoystickSensor::Evaluate(CValue* event)
}
}
}
- else if(m_axisf == 3){
- if(js->aDownAxisIsPositive(m_axis)){
+ else {
+ if(js->aAxisPairDirectionIsPositive(m_axis-1, m_axisf)){ /* use zero based axis index internally */
m_istrig = 1;
result = true;
}else{
@@ -161,30 +154,28 @@ bool SCA_JoystickSensor::Evaluate(CValue* event)
}
}
}
- else if(m_axisf == 2){
- if(js->aLeftAxisIsPositive(m_axis)){
- m_istrig = 1;
- result = true;
- }else{
- if(m_istrig){
- m_istrig = 0;
- result = true;
- }
- }
- }
- else if(m_axisf == 0){
- if(js->aRightAxisIsPositive(m_axis)){
- m_istrig = 1;
+ break;
+ }
+ case KX_JOYSENSORMODE_AXIS_SINGLE:
+ {
+ /* Like KX_JOYSENSORMODE_AXIS but dont pair up axis */
+ if (!js->IsTrigAxis() && !reset) /* No events from SDL? - dont bother */
+ return false;
+
+ /* No need for 'm_bAllEvents' check here since were only checking 1 axis */
+ js->cSetPrecision(m_precision);
+ if(js->aAxisIsPositive(m_axis-1)){ /* use zero based axis index internally */
+ m_istrig = 1;
+ result = true;
+ }else{
+ if(m_istrig){
+ m_istrig = 0;
result = true;
- }else{
- if(m_istrig){
- m_istrig = 0;
- result = true;
- }
}
}
break;
}
+
case KX_JOYSENSORMODE_BUTTON:
{
/* what is what!
@@ -275,22 +266,22 @@ bool SCA_JoystickSensor::isValid(SCA_JoystickSensor::KX_JOYSENSORMODE m)
/* Integration hooks ------------------------------------------------------- */
PyTypeObject SCA_JoystickSensor::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"SCA_JoystickSensor",
- sizeof(SCA_JoystickSensor),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0, //&MyPyCompare,
- __repr,
- 0, //&cvalue_as_number,
0,
0,
0,
- 0
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
@@ -333,48 +324,24 @@ PyAttributeDef SCA_JoystickSensor::Attributes[] = {
KX_PYATTRIBUTE_INT_RW("button",0,100,false,SCA_JoystickSensor,m_button),
KX_PYATTRIBUTE_INT_LIST_RW_CHECK("axis",0,3,true,SCA_JoystickSensor,m_axis,2,CheckAxis),
KX_PYATTRIBUTE_INT_LIST_RW_CHECK("hat",0,12,true,SCA_JoystickSensor,m_hat,2,CheckHat),
- // dummy attributes will just be read-only in _setattr
- // you still need to defined them in _getattr
- KX_PYATTRIBUTE_DUMMY("axisPosition"),
- KX_PYATTRIBUTE_DUMMY("numAxis"),
- KX_PYATTRIBUTE_DUMMY("numButtons"),
- KX_PYATTRIBUTE_DUMMY("numHats"),
- KX_PYATTRIBUTE_DUMMY("connected"),
+ KX_PYATTRIBUTE_RO_FUNCTION("axisValues", SCA_JoystickSensor, pyattr_get_axis_values),
+ KX_PYATTRIBUTE_RO_FUNCTION("axisSingle", SCA_JoystickSensor, pyattr_get_axis_single),
+ KX_PYATTRIBUTE_RO_FUNCTION("numAxis", SCA_JoystickSensor, pyattr_get_num_axis),
+ KX_PYATTRIBUTE_RO_FUNCTION("numButtons", SCA_JoystickSensor, pyattr_get_num_buttons),
+ KX_PYATTRIBUTE_RO_FUNCTION("numHats", SCA_JoystickSensor, pyattr_get_num_hats),
+ KX_PYATTRIBUTE_RO_FUNCTION("connected", SCA_JoystickSensor, pyattr_get_connected),
+
{ NULL } //Sentinel
};
-PyObject* SCA_JoystickSensor::_getattr(const char *attr) {
- SCA_Joystick *joy = m_pJoystickMgr->GetJoystickDevice(m_joyindex);
- if (!strcmp(attr, "axisPosition")) {
- if(joy)
- return Py_BuildValue("[iiii]", joy->GetAxis10(), joy->GetAxis11(), joy->GetAxis20(), joy->GetAxis21());
- else
- return Py_BuildValue("[iiii]", 0, 0, 0, 0);
- }
- if (!strcmp(attr, "numAxis")) {
- return PyInt_FromLong( joy ? joy->GetNumberOfAxes() : 0 );
- }
- if (!strcmp(attr, "numButtons")) {
- return PyInt_FromLong( joy ? joy->GetNumberOfButtons() : 0 );
- }
- if (!strcmp(attr, "numHats")) {
- return PyInt_FromLong( joy ? joy->GetNumberOfHats() : 0 );
- }
- if (!strcmp(attr, "connected")) {
- return PyBool_FromLong( joy ? joy->Connected() : 0 );
- }
- PyObject* object = _getattr_self(Attributes, this, attr);
- if (object != NULL)
- return object;
- _getattr_up(SCA_ISensor);
+PyObject* SCA_JoystickSensor::py_getattro(PyObject *attr)
+{
+ py_getattro_up(SCA_ISensor);
}
-int SCA_JoystickSensor::_setattr(const char *attr, PyObject *value)
+int SCA_JoystickSensor::py_setattro(PyObject *attr, PyObject *value)
{
- int ret = _setattr_self(Attributes, this, attr, value);
- if (ret >= 0)
- return ret;
- return SCA_ISensor::_setattr(attr, value);
+ py_setattro_up(SCA_ISensor);
}
@@ -382,7 +349,7 @@ int SCA_JoystickSensor::_setattr(const char *attr, PyObject *value)
const char SCA_JoystickSensor::GetIndex_doc[] =
"getIndex\n"
"\tReturns the joystick index to use.\n";
-PyObject* SCA_JoystickSensor::PyGetIndex( PyObject* self ) {
+PyObject* SCA_JoystickSensor::PyGetIndex( ) {
ShowDeprecationWarning("getIndex()", "the index property");
return PyInt_FromLong(m_joyindex);
}
@@ -392,7 +359,7 @@ PyObject* SCA_JoystickSensor::PyGetIndex( PyObject* self ) {
const char SCA_JoystickSensor::SetIndex_doc[] =
"setIndex\n"
"\tSets the joystick index to use.\n";
-PyObject* SCA_JoystickSensor::PySetIndex( PyObject* self, PyObject* value ) {
+PyObject* SCA_JoystickSensor::PySetIndex( PyObject* value ) {
ShowDeprecationWarning("setIndex()", "the index property");
int index = PyInt_AsLong( value ); /* -1 on error, will raise an error in this case */
if (index < 0 || index >= JOYINDEX_MAX) {
@@ -408,7 +375,7 @@ PyObject* SCA_JoystickSensor::PySetIndex( PyObject* self, PyObject* value ) {
const char SCA_JoystickSensor::GetAxis_doc[] =
"getAxis\n"
"\tReturns the current axis this sensor reacts to.\n";
-PyObject* SCA_JoystickSensor::PyGetAxis( PyObject* self) {
+PyObject* SCA_JoystickSensor::PyGetAxis( ) {
ShowDeprecationWarning("getAxis()", "the axis property");
return Py_BuildValue("[ii]",m_axis, m_axisf);
}
@@ -418,11 +385,11 @@ PyObject* SCA_JoystickSensor::PyGetAxis( PyObject* self) {
const char SCA_JoystickSensor::SetAxis_doc[] =
"setAxis\n"
"\tSets the current axis this sensor reacts to.\n";
-PyObject* SCA_JoystickSensor::PySetAxis( PyObject* self, PyObject* args ) {
+PyObject* SCA_JoystickSensor::PySetAxis( PyObject* args ) {
ShowDeprecationWarning("setAxis()", "the axis property");
int axis,axisflag;
- if(!PyArg_ParseTuple(args, "ii", &axis, &axisflag)){
+ if(!PyArg_ParseTuple(args, "ii:setAxis", &axis, &axisflag)){
return NULL;
}
m_axis = axis;
@@ -435,13 +402,18 @@ PyObject* SCA_JoystickSensor::PySetAxis( PyObject* self, PyObject* args ) {
const char SCA_JoystickSensor::GetAxisValue_doc[] =
"getAxisValue\n"
"\tReturns a list of the values for the current state of each axis.\n";
-PyObject* SCA_JoystickSensor::PyGetAxisValue( PyObject* self) {
+PyObject* SCA_JoystickSensor::PyGetAxisValue( ) {
ShowDeprecationWarning("getAxisValue()", "the axisPosition property");
SCA_Joystick *joy = m_pJoystickMgr->GetJoystickDevice(m_joyindex);
- if(joy)
- return Py_BuildValue("[iiii]", joy->GetAxis10(), joy->GetAxis11(), joy->GetAxis20(), joy->GetAxis21());
- else
- return Py_BuildValue("[iiii]", 0, 0, 0, 0);
+
+ int axis_index= joy->GetNumberOfAxes();
+ PyObject *list= PyList_New(axis_index);
+
+ while(axis_index--) {
+ PyList_SET_ITEM(list, axis_index, PyInt_FromLong(joy->GetAxisPosition(axis_index)));
+ }
+
+ return list;
}
@@ -449,7 +421,7 @@ PyObject* SCA_JoystickSensor::PyGetAxisValue( PyObject* self) {
const char SCA_JoystickSensor::GetThreshold_doc[] =
"getThreshold\n"
"\tReturns the threshold of the axis.\n";
-PyObject* SCA_JoystickSensor::PyGetThreshold( PyObject* self) {
+PyObject* SCA_JoystickSensor::PyGetThreshold( ) {
ShowDeprecationWarning("getThreshold()", "the threshold property");
return PyInt_FromLong(m_precision);
}
@@ -459,10 +431,10 @@ PyObject* SCA_JoystickSensor::PyGetThreshold( PyObject* self) {
const char SCA_JoystickSensor::SetThreshold_doc[] =
"setThreshold\n"
"\tSets the threshold of the axis.\n";
-PyObject* SCA_JoystickSensor::PySetThreshold( PyObject* self, PyObject* args ) {
+PyObject* SCA_JoystickSensor::PySetThreshold( PyObject* args ) {
ShowDeprecationWarning("setThreshold()", "the threshold property");
int thresh;
- if(!PyArg_ParseTuple(args, "i", &thresh)){
+ if(!PyArg_ParseTuple(args, "i:setThreshold", &thresh)){
return NULL;
}
m_precision = thresh;
@@ -473,7 +445,7 @@ PyObject* SCA_JoystickSensor::PySetThreshold( PyObject* self, PyObject* args ) {
const char SCA_JoystickSensor::GetButton_doc[] =
"getButton\n"
"\tReturns the current button this sensor is checking.\n";
-PyObject* SCA_JoystickSensor::PyGetButton( PyObject* self) {
+PyObject* SCA_JoystickSensor::PyGetButton( ) {
ShowDeprecationWarning("getButton()", "the button property");
return PyInt_FromLong(m_button);
}
@@ -482,7 +454,7 @@ PyObject* SCA_JoystickSensor::PyGetButton( PyObject* self) {
const char SCA_JoystickSensor::SetButton_doc[] =
"setButton\n"
"\tSets the button the sensor reacts to.\n";
-PyObject* SCA_JoystickSensor::PySetButton( PyObject* self, PyObject* value ) {
+PyObject* SCA_JoystickSensor::PySetButton( PyObject* value ) {
ShowDeprecationWarning("setButton()", "the button property");
int button = PyInt_AsLong(value);
if(button==-1 && PyErr_Occurred()) {
@@ -497,16 +469,16 @@ PyObject* SCA_JoystickSensor::PySetButton( PyObject* self, PyObject* value ) {
const char SCA_JoystickSensor::GetButtonValue_doc[] =
"getButtonValue\n"
"\tReturns a list containing the indicies of the current pressed state of each button.\n";
-PyObject* SCA_JoystickSensor::PyGetButtonValue( PyObject* self) {
+PyObject* SCA_JoystickSensor::PyGetButtonValue( ) {
ShowDeprecationWarning("getButtonValue()", "getButtonActiveList");
- return PyGetButtonActiveList(self);
+ return PyGetButtonActiveList( );
}
/* get button active list -------------------------------------------------- */
const char SCA_JoystickSensor::GetButtonActiveList_doc[] =
"getButtonActiveList\n"
"\tReturns a list containing the indicies of the button currently pressed.\n";
-PyObject* SCA_JoystickSensor::PyGetButtonActiveList( PyObject* self) {
+PyObject* SCA_JoystickSensor::PyGetButtonActiveList( ) {
SCA_Joystick *joy = m_pJoystickMgr->GetJoystickDevice(m_joyindex);
PyObject *ls = PyList_New(0);
PyObject *value;
@@ -528,12 +500,11 @@ PyObject* SCA_JoystickSensor::PyGetButtonActiveList( PyObject* self) {
const char SCA_JoystickSensor::GetButtonStatus_doc[] =
"getButtonStatus(buttonIndex)\n"
"\tReturns a bool of the current pressed state of the specified button.\n";
-PyObject* SCA_JoystickSensor::PyGetButtonStatus( PyObject* self, PyObject* args ) {
+PyObject* SCA_JoystickSensor::PyGetButtonStatus( PyObject* args ) {
SCA_Joystick *joy = m_pJoystickMgr->GetJoystickDevice(m_joyindex);
- PyObject *value;
int index;
- if(!PyArg_ParseTuple(args, "i", &index)){
+ if(!PyArg_ParseTuple(args, "i:getButtonStatus", &index)){
return NULL;
}
if(joy && index >= 0 && index < joy->GetNumberOfButtons()) {
@@ -546,7 +517,7 @@ PyObject* SCA_JoystickSensor::PyGetButtonStatus( PyObject* self, PyObject* args
const char SCA_JoystickSensor::GetHat_doc[] =
"getHat\n"
"\tReturns the current direction of the hat.\n";
-PyObject* SCA_JoystickSensor::PyGetHat( PyObject* self ) {
+PyObject* SCA_JoystickSensor::PyGetHat( ) {
ShowDeprecationWarning("getHat()", "the hat property");
return Py_BuildValue("[ii]",m_hat, m_hatf);
}
@@ -556,10 +527,10 @@ PyObject* SCA_JoystickSensor::PyGetHat( PyObject* self ) {
const char SCA_JoystickSensor::SetHat_doc[] =
"setHat\n"
"\tSets the hat the sensor reacts to.\n";
-PyObject* SCA_JoystickSensor::PySetHat( PyObject* self, PyObject* args ) {
+PyObject* SCA_JoystickSensor::PySetHat( PyObject* args ) {
ShowDeprecationWarning("setHat()", "the hat property");
int hat,hatflag;
- if(!PyArg_ParseTuple(args, "ii", &hat, &hatflag)){
+ if(!PyArg_ParseTuple(args, "ii:setHat", &hat, &hatflag)){
return NULL;
}
m_hat = hat;
@@ -572,7 +543,7 @@ PyObject* SCA_JoystickSensor::PySetHat( PyObject* self, PyObject* args ) {
const char SCA_JoystickSensor::NumberOfAxes_doc[] =
"getNumAxes\n"
"\tReturns the number of axes .\n";
-PyObject* SCA_JoystickSensor::PyNumberOfAxes( PyObject* self ) {
+PyObject* SCA_JoystickSensor::PyNumberOfAxes( ) {
ShowDeprecationWarning("getNumAxes()", "the numAxis property");
SCA_Joystick *joy = m_pJoystickMgr->GetJoystickDevice(m_joyindex);
// when the joystick is null their is 0 exis still. dumb but scripters should use isConnected()
@@ -583,7 +554,7 @@ PyObject* SCA_JoystickSensor::PyNumberOfAxes( PyObject* self ) {
const char SCA_JoystickSensor::NumberOfButtons_doc[] =
"getNumButtons\n"
"\tReturns the number of buttons .\n";
-PyObject* SCA_JoystickSensor::PyNumberOfButtons( PyObject* self ) {
+PyObject* SCA_JoystickSensor::PyNumberOfButtons( ) {
ShowDeprecationWarning("getNumButtons()", "the numButtons property");
SCA_Joystick *joy = m_pJoystickMgr->GetJoystickDevice(m_joyindex);
return PyInt_FromLong( joy ? joy->GetNumberOfButtons() : 0 );
@@ -593,7 +564,7 @@ PyObject* SCA_JoystickSensor::PyNumberOfButtons( PyObject* self ) {
const char SCA_JoystickSensor::NumberOfHats_doc[] =
"getNumHats\n"
"\tReturns the number of hats .\n";
-PyObject* SCA_JoystickSensor::PyNumberOfHats( PyObject* self ) {
+PyObject* SCA_JoystickSensor::PyNumberOfHats( ) {
ShowDeprecationWarning("getNumHats()", "the numHats property");
SCA_Joystick *joy = m_pJoystickMgr->GetJoystickDevice(m_joyindex);
return PyInt_FromLong( joy ? joy->GetNumberOfHats() : 0 );
@@ -602,8 +573,65 @@ PyObject* SCA_JoystickSensor::PyNumberOfHats( PyObject* self ) {
const char SCA_JoystickSensor::Connected_doc[] =
"getConnected\n"
"\tReturns True if a joystick is connected at this joysticks index.\n";
-PyObject* SCA_JoystickSensor::PyConnected( PyObject* self ) {
+PyObject* SCA_JoystickSensor::PyConnected( ) {
ShowDeprecationWarning("getConnected()", "the connected property");
SCA_Joystick *joy = m_pJoystickMgr->GetJoystickDevice(m_joyindex);
return PyBool_FromLong( joy ? joy->Connected() : 0 );
}
+
+
+PyObject* SCA_JoystickSensor::pyattr_get_axis_values(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ SCA_JoystickSensor* self= static_cast<SCA_JoystickSensor*>(self_v);
+ SCA_Joystick *joy = self->m_pJoystickMgr->GetJoystickDevice(self->m_joyindex);
+
+ int axis_index= joy->GetNumberOfAxes();
+ PyObject *list= PyList_New(axis_index);
+
+ while(axis_index--) {
+ PyList_SET_ITEM(list, axis_index, PyInt_FromLong(joy->GetAxisPosition(axis_index)));
+ }
+
+ return list;
+}
+
+PyObject* SCA_JoystickSensor::pyattr_get_axis_single(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ SCA_JoystickSensor* self= static_cast<SCA_JoystickSensor*>(self_v);
+ SCA_Joystick *joy = self->m_pJoystickMgr->GetJoystickDevice(self->m_joyindex);
+
+ if(self->m_joymode != KX_JOYSENSORMODE_AXIS_SINGLE) {
+ PyErr_SetString(PyExc_TypeError, "val = sensor.axisSingle: Joystick Sensor, not 'Single Axis' type");
+ return NULL;
+ }
+
+ return PyInt_FromLong(joy->GetAxisPosition(self->m_axis-1));
+}
+
+PyObject* SCA_JoystickSensor::pyattr_get_num_axis(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ SCA_JoystickSensor* self= static_cast<SCA_JoystickSensor*>(self_v);
+ SCA_Joystick *joy = self->m_pJoystickMgr->GetJoystickDevice(self->m_joyindex);
+ return PyInt_FromLong( joy ? joy->GetNumberOfAxes() : 0 );
+}
+
+PyObject* SCA_JoystickSensor::pyattr_get_num_buttons(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ SCA_JoystickSensor* self= static_cast<SCA_JoystickSensor*>(self_v);
+ SCA_Joystick *joy = self->m_pJoystickMgr->GetJoystickDevice(self->m_joyindex);
+ return PyInt_FromLong( joy ? joy->GetNumberOfButtons() : 0 );
+}
+
+PyObject* SCA_JoystickSensor::pyattr_get_num_hats(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ SCA_JoystickSensor* self= static_cast<SCA_JoystickSensor*>(self_v);
+ SCA_Joystick *joy = self->m_pJoystickMgr->GetJoystickDevice(self->m_joyindex);
+ return PyInt_FromLong( joy ? joy->GetNumberOfHats() : 0 );
+}
+
+PyObject* SCA_JoystickSensor::pyattr_get_connected(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ SCA_JoystickSensor* self= static_cast<SCA_JoystickSensor*>(self_v);
+ SCA_Joystick *joy = self->m_pJoystickMgr->GetJoystickDevice(self->m_joyindex);
+ return PyBool_FromLong( joy ? joy->Connected() : 0 );
+}
diff --git a/source/gameengine/GameLogic/SCA_JoystickSensor.h b/source/gameengine/GameLogic/SCA_JoystickSensor.h
index 49d220c056d..cf3e7e74414 100644
--- a/source/gameengine/GameLogic/SCA_JoystickSensor.h
+++ b/source/gameengine/GameLogic/SCA_JoystickSensor.h
@@ -93,6 +93,7 @@ class SCA_JoystickSensor :public SCA_ISensor
KX_JOYSENSORMODE_AXIS,
KX_JOYSENSORMODE_BUTTON,
KX_JOYSENSORMODE_HAT,
+ KX_JOYSENSORMODE_AXIS_SINGLE,
KX_JOYSENSORMODE_MAX
};
bool isValid(KX_JOYSENSORMODE);
@@ -121,8 +122,8 @@ public:
/* Python interface ---------------------------------------------------- */
/* --------------------------------------------------------------------- */
- virtual PyObject* _getattr(const char *attr);
- virtual int _setattr(const char *attr, PyObject *value);
+ virtual PyObject* py_getattro(PyObject *attr);
+ virtual int py_setattro(PyObject *attr, PyObject *value);
/* Joystick Index */
KX_PYMETHOD_DOC_NOARGS(SCA_JoystickSensor,GetIndex);
@@ -148,6 +149,14 @@ public:
KX_PYMETHOD_DOC_NOARGS(SCA_JoystickSensor,NumberOfHats);
KX_PYMETHOD_DOC_NOARGS(SCA_JoystickSensor,Connected);
+ static PyObject* pyattr_get_axis_values(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_axis_single(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_num_axis(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_num_buttons(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_num_hats(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_connected(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+
+
/* attribute check */
static int CheckAxis(void *self, const PyAttributeDef*)
{
diff --git a/source/gameengine/GameLogic/SCA_KeyboardSensor.cpp b/source/gameengine/GameLogic/SCA_KeyboardSensor.cpp
index 324e5eae98a..c946156283f 100644
--- a/source/gameengine/GameLogic/SCA_KeyboardSensor.cpp
+++ b/source/gameengine/GameLogic/SCA_KeyboardSensor.cpp
@@ -148,7 +148,7 @@ bool SCA_KeyboardSensor::Evaluate(CValue* eventval)
bool justreleased = false;
bool active = false;
- for (int i=SCA_IInputDevice::KX_BEGINKEY ; i< SCA_IInputDevice::KX_ENDKEY;i++)
+ for (int i=SCA_IInputDevice::KX_BEGINKEY ; i<= SCA_IInputDevice::KX_ENDKEY;i++)
{
const SCA_InputEvent & inevent = inputdev->GetEventValue((SCA_IInputDevice::KX_EnumInputs) i);
switch (inevent.m_status)
@@ -352,149 +352,8 @@ void SCA_KeyboardSensor::AddToTargetProp(int keyIndex)
}
}
-
-/**
- * Determine whether this character can be printed. We cannot use
- * the library functions here, because we need to test our own
- * keycodes. */
-bool SCA_KeyboardSensor::IsPrintable(int keyIndex)
-{
- /* only print
- * - numerals: KX_ZEROKEY to KX_NINEKEY
- * - alphas: KX_AKEY to KX_ZKEY.
- * - specials: KX_RETKEY, KX_PADASTERKEY, KX_PADCOMMAKEY to KX_PERIODKEY,
- * KX_TABKEY , KX_SEMICOLONKEY to KX_RIGHTBRACKETKEY,
- * KX_PAD2 to KX_PADPLUSKEY
- * - delete and backspace: also printable in the sense that they modify
- * the string
- * - retkey: should this be printable?
- * - virgule: prints a space... don't know which key that's supposed
- * to be...
- */
- if ( ((keyIndex >= SCA_IInputDevice::KX_ZEROKEY)
- && (keyIndex <= SCA_IInputDevice::KX_NINEKEY))
- || ((keyIndex >= SCA_IInputDevice::KX_AKEY)
- && (keyIndex <= SCA_IInputDevice::KX_ZKEY))
- || (keyIndex == SCA_IInputDevice::KX_SPACEKEY)
-/* || (keyIndex == KX_RETKEY) */
- || (keyIndex == SCA_IInputDevice::KX_PADASTERKEY)
- || (keyIndex == SCA_IInputDevice::KX_TABKEY)
- || ((keyIndex >= SCA_IInputDevice::KX_COMMAKEY)
- && (keyIndex <= SCA_IInputDevice::KX_PERIODKEY))
- || ((keyIndex >= SCA_IInputDevice::KX_SEMICOLONKEY)
- && (keyIndex <= SCA_IInputDevice::KX_RIGHTBRACKETKEY))
- || ((keyIndex >= SCA_IInputDevice::KX_PAD2)
- && (keyIndex <= SCA_IInputDevice::KX_PADPLUSKEY))
- || (keyIndex == SCA_IInputDevice::KX_DELKEY)
- || (keyIndex == SCA_IInputDevice::KX_BACKSPACEKEY)
- )
- {
- return true;
- } else {
- return false;
- }
-}
-
-// this code looks ugly, please use an ordinary hashtable
-
-char SCA_KeyboardSensor::ToCharacter(int keyIndex, bool shifted)
-{
- /* numerals */
- if ( (keyIndex >= SCA_IInputDevice::KX_ZEROKEY)
- && (keyIndex <= SCA_IInputDevice::KX_NINEKEY) ) {
- if (shifted) {
- char numshift[] = ")!@#$%^&*(";
- return numshift[keyIndex - '0'];
- } else {
- return keyIndex - SCA_IInputDevice::KX_ZEROKEY + '0';
- }
- }
-
- /* letters... always lowercase... is that desirable? */
- if ( (keyIndex >= SCA_IInputDevice::KX_AKEY)
- && (keyIndex <= SCA_IInputDevice::KX_ZKEY) ) {
- if (shifted) {
- return keyIndex - SCA_IInputDevice::KX_AKEY + 'A';
- } else {
- return keyIndex - SCA_IInputDevice::KX_AKEY + 'a';
- }
- }
-
- if (keyIndex == SCA_IInputDevice::KX_SPACEKEY) {
- return ' ';
- }
-
-/* || (keyIndex == SCA_IInputDevice::KX_RETKEY) */
-
- if (keyIndex == SCA_IInputDevice::KX_PADASTERKEY) {
- return '*';
- }
-
- if (keyIndex == SCA_IInputDevice::KX_TABKEY) {
- return '\t';
- }
-
- /* comma to period */
- char commatoperiod[] = ",-.";
- char commatoperiodshifted[] = "<_>";
- if (keyIndex == SCA_IInputDevice::KX_COMMAKEY) {
- if (shifted) {
- return commatoperiodshifted[0];
- } else {
- return commatoperiod[0];
- }
- }
- if (keyIndex == SCA_IInputDevice::KX_MINUSKEY) {
- if (shifted) {
- return commatoperiodshifted[1];
- } else {
- return commatoperiod[1];
- }
- }
- if (keyIndex == SCA_IInputDevice::KX_PERIODKEY) {
- if (shifted) {
- return commatoperiodshifted[2];
- } else {
- return commatoperiod[2];
- }
- }
-
- /* semicolon to rightbracket */
- char semicolontorightbracket[] = ";\'` /\\=[]";
- char semicolontorightbracketshifted[] = ":\"~ \?|+{}";
- if ((keyIndex >= SCA_IInputDevice::KX_SEMICOLONKEY)
- && (keyIndex <= SCA_IInputDevice::KX_RIGHTBRACKETKEY)) {
- if (shifted) {
- return semicolontorightbracketshifted[keyIndex - SCA_IInputDevice::KX_SEMICOLONKEY];
- } else {
- return semicolontorightbracket[keyIndex - SCA_IInputDevice::KX_SEMICOLONKEY];
- }
- }
-
- /* keypad2 to padplus */
- char pad2topadplus[] = "246813579. 0- +";
- if ((keyIndex >= SCA_IInputDevice::KX_PAD2)
- && (keyIndex <= SCA_IInputDevice::KX_PADPLUSKEY)) {
- return pad2topadplus[keyIndex - SCA_IInputDevice::KX_PAD2];
- }
-
- return '!';
-}
/**
- * Tests whether this is a delete key.
- */
-bool SCA_KeyboardSensor::IsDelete(int keyIndex)
-{
- if ( (keyIndex == SCA_IInputDevice::KX_DELKEY)
- || (keyIndex == SCA_IInputDevice::KX_BACKSPACEKEY) ) {
- return true;
- } else {
- return false;
- }
-}
-
-/**
* Tests whether shift is pressed
*/
bool SCA_KeyboardSensor::IsShifted(void)
@@ -528,7 +387,7 @@ void SCA_KeyboardSensor::LogKeystrokes(void)
int index = 0;
/* Check on all keys whether they were pushed. This does not
* untangle the ordering, so don't type too fast :) */
- for (int i=SCA_IInputDevice::KX_BEGINKEY ; i< SCA_IInputDevice::KX_ENDKEY;i++)
+ for (int i=SCA_IInputDevice::KX_BEGINKEY ; i<= SCA_IInputDevice::KX_ENDKEY;i++)
{
const SCA_InputEvent & inevent = inputdev->GetEventValue((SCA_IInputDevice::KX_EnumInputs) i);
if (inevent.m_status == SCA_InputEvent::KX_JUSTACTIVATED) //NO_INPUTSTATUS)
@@ -553,7 +412,7 @@ void SCA_KeyboardSensor::LogKeystrokes(void)
const char SCA_KeyboardSensor::GetKey_doc[] =
"getKey()\n"
"\tReturn the code of the key this sensor is listening to.\n" ;
-PyObject* SCA_KeyboardSensor::PyGetKey(PyObject* self, PyObject* args, PyObject* kwds)
+PyObject* SCA_KeyboardSensor::PyGetKey()
{
ShowDeprecationWarning("getKey()", "the key property");
return PyInt_FromLong(m_hotkey);
@@ -564,12 +423,12 @@ const char SCA_KeyboardSensor::SetKey_doc[] =
"setKey(keycode)\n"
"\t- keycode: any code from GameKeys\n"
"\tSet the key this sensor should listen to.\n" ;
-PyObject* SCA_KeyboardSensor::PySetKey(PyObject* self, PyObject* args, PyObject* kwds)
+PyObject* SCA_KeyboardSensor::PySetKey(PyObject* args)
{
ShowDeprecationWarning("setKey()", "the key property");
int keyCode;
- if(!PyArg_ParseTuple(args, "i", &keyCode)) {
+ if(!PyArg_ParseTuple(args, "i:setKey", &keyCode)) {
return NULL;
}
@@ -585,7 +444,7 @@ const char SCA_KeyboardSensor::GetHold1_doc[] =
"getHold1()\n"
"\tReturn the code of the first key modifier to the key this \n"
"\tsensor is listening to.\n" ;
-PyObject* SCA_KeyboardSensor::PyGetHold1(PyObject* self, PyObject* args, PyObject* kwds)
+PyObject* SCA_KeyboardSensor::PyGetHold1()
{
ShowDeprecationWarning("getHold1()", "the hold1 property");
return PyInt_FromLong(m_qual);
@@ -596,12 +455,12 @@ const char SCA_KeyboardSensor::SetHold1_doc[] =
"setHold1(keycode)\n"
"\t- keycode: any code from GameKeys\n"
"\tSet the first modifier to the key this sensor should listen to.\n" ;
-PyObject* SCA_KeyboardSensor::PySetHold1(PyObject* self, PyObject* args, PyObject* kwds)
+PyObject* SCA_KeyboardSensor::PySetHold1(PyObject* args)
{
ShowDeprecationWarning("setHold1()", "the hold1 property");
int keyCode;
- if(!PyArg_ParseTuple(args, "i", &keyCode)) {
+ if(!PyArg_ParseTuple(args, "i:setHold1", &keyCode)) {
return NULL;
}
@@ -617,7 +476,7 @@ const char SCA_KeyboardSensor::GetHold2_doc[] =
"getHold2()\n"
"\tReturn the code of the second key modifier to the key this \n"
"\tsensor is listening to.\n" ;
-PyObject* SCA_KeyboardSensor::PyGetHold2(PyObject* self, PyObject* args, PyObject* kwds)
+PyObject* SCA_KeyboardSensor::PyGetHold2()
{
ShowDeprecationWarning("getHold2()", "the hold2 property");
return PyInt_FromLong(m_qual2);
@@ -628,12 +487,12 @@ const char SCA_KeyboardSensor::SetHold2_doc[] =
"setHold2(keycode)\n"
"\t- keycode: any code from GameKeys\n"
"\tSet the first modifier to the key this sensor should listen to.\n" ;
-PyObject* SCA_KeyboardSensor::PySetHold2(PyObject* self, PyObject* args, PyObject* kwds)
+PyObject* SCA_KeyboardSensor::PySetHold2(PyObject* args)
{
ShowDeprecationWarning("setHold2()", "the hold2 property");
int keyCode;
- if(!PyArg_ParseTuple(args, "i", &keyCode)) {
+ if(!PyArg_ParseTuple(args, "i:setHold2", &keyCode)) {
return NULL;
}
@@ -649,9 +508,9 @@ const char SCA_KeyboardSensor::GetPressedKeys_doc[] =
"getPressedKeys()\n"
"\tGet a list of pressed keys that have either been pressed, or just released this frame.\n" ;
-PyObject* SCA_KeyboardSensor::PyGetPressedKeys(PyObject* self, PyObject* args, PyObject* kwds)
+PyObject* SCA_KeyboardSensor::PyGetPressedKeys()
{
- ShowDeprecationWarning("getPressedKeys()", "getEventList()");
+ ShowDeprecationWarning("getPressedKeys()", "events");
SCA_IInputDevice* inputdev = m_pKeyboardMgr->GetInputDevice();
@@ -663,26 +522,25 @@ PyObject* SCA_KeyboardSensor::PyGetPressedKeys(PyObject* self, PyObject* args, P
int index = 0;
- for (int i=SCA_IInputDevice::KX_BEGINKEY ; i< SCA_IInputDevice::KX_ENDKEY;i++)
+ for (int i=SCA_IInputDevice::KX_BEGINKEY ; i<= SCA_IInputDevice::KX_ENDKEY;i++)
{
const SCA_InputEvent & inevent = inputdev->GetEventValue((SCA_IInputDevice::KX_EnumInputs) i);
if ((inevent.m_status == SCA_InputEvent::KX_JUSTACTIVATED)
|| (inevent.m_status == SCA_InputEvent::KX_JUSTRELEASED))
{
- if (index < num)
- {
- PyObject* keypair = PyList_New(2);
- PyList_SetItem(keypair,0,PyInt_FromLong(i));
- PyList_SetItem(keypair,1,PyInt_FromLong(inevent.m_status));
- PyList_SetItem(resultlist,index,keypair);
- index++;
- }
+ PyObject* keypair = PyList_New(2);
+ PyList_SET_ITEM(keypair,0,PyInt_FromLong(i));
+ PyList_SET_ITEM(keypair,1,PyInt_FromLong(inevent.m_status));
+ PyList_SET_ITEM(resultlist,index,keypair);
+ index++;
+
+ if (index >= num) /* should not happen */
+ break;
}
- }
- if (index>0) return resultlist;
+ }
}
- Py_RETURN_NONE;
+ return resultlist;
}
@@ -691,11 +549,11 @@ const char SCA_KeyboardSensor::GetCurrentlyPressedKeys_doc[] =
"getCurrentlyPressedKeys()\n"
"\tGet a list of keys that are currently pressed.\n" ;
-PyObject* SCA_KeyboardSensor::PyGetCurrentlyPressedKeys(PyObject* self, PyObject* args, PyObject* kwds)
+PyObject* SCA_KeyboardSensor::PyGetCurrentlyPressedKeys()
{
-ShowDeprecationWarning("getCurrentlyPressedKeys()", "getEventList()");
+ ShowDeprecationWarning("getCurrentlyPressedKeys()", "events");
-SCA_IInputDevice* inputdev = m_pKeyboardMgr->GetInputDevice();
+ SCA_IInputDevice* inputdev = m_pKeyboardMgr->GetInputDevice();
int num = inputdev->GetNumActiveEvents();
PyObject* resultlist = PyList_New(num);
@@ -704,73 +562,49 @@ SCA_IInputDevice* inputdev = m_pKeyboardMgr->GetInputDevice();
{
int index = 0;
- for (int i=SCA_IInputDevice::KX_BEGINKEY ; i< SCA_IInputDevice::KX_ENDKEY;i++)
+ for (int i=SCA_IInputDevice::KX_BEGINKEY ; i<= SCA_IInputDevice::KX_ENDKEY;i++)
{
const SCA_InputEvent & inevent = inputdev->GetEventValue((SCA_IInputDevice::KX_EnumInputs) i);
if ( (inevent.m_status == SCA_InputEvent::KX_ACTIVE)
|| (inevent.m_status == SCA_InputEvent::KX_JUSTACTIVATED))
{
- if (index < num)
- {
- PyObject* keypair = PyList_New(2);
- PyList_SetItem(keypair,0,PyInt_FromLong(i));
- PyList_SetItem(keypair,1,PyInt_FromLong(inevent.m_status));
- PyList_SetItem(resultlist,index,keypair);
- index++;
- }
+ PyObject* keypair = PyList_New(2);
+ PyList_SET_ITEM(keypair,0,PyInt_FromLong(i));
+ PyList_SET_ITEM(keypair,1,PyInt_FromLong(inevent.m_status));
+ PyList_SET_ITEM(resultlist,index,keypair);
+ index++;
+
+ if (index >= num) /* should never happen */
+ break;
}
}
-
- /* why?*/
- if (index > 0) return resultlist;
}
- Py_RETURN_NONE;
-}
-//<---- Deprecated
-
-KX_PYMETHODDEF_DOC_NOARGS(SCA_KeyboardSensor, getEventList,
-"getEventList()\n"
-"\tGet the list of the keyboard events in this frame.\n")
-{
- SCA_IInputDevice* inputdev = m_pKeyboardMgr->GetInputDevice();
-
- PyObject* resultlist = PyList_New(0);
-
- for (int i=SCA_IInputDevice::KX_BEGINKEY ; i< SCA_IInputDevice::KX_ENDKEY;i++)
- {
- const SCA_InputEvent & inevent = inputdev->GetEventValue((SCA_IInputDevice::KX_EnumInputs) i);
- if (inevent.m_status != SCA_InputEvent::KX_NO_INPUTSTATUS)
- {
- PyObject* keypair = PyList_New(2);
- PyList_SetItem(keypair,0,PyInt_FromLong(i));
- PyList_SetItem(keypair,1,PyInt_FromLong(inevent.m_status));
- PyList_Append(resultlist,keypair);
- }
- }
return resultlist;
}
+//<---- Deprecated
+
KX_PYMETHODDEF_DOC_O(SCA_KeyboardSensor, getKeyStatus,
"getKeyStatus(keycode)\n"
"\tGet the given key's status (KX_NO_INPUTSTATUS, KX_JUSTACTIVATED, KX_ACTIVE or KX_JUSTRELEASED).\n")
{
- if (PyInt_Check(value))
- {
- int keycode = PyInt_AsLong(value);
-
- if ((keycode < SCA_IInputDevice::KX_BEGINKEY)
- || (keycode > SCA_IInputDevice::KX_ENDKEY)){
- PyErr_SetString(PyExc_AttributeError, "invalid keycode specified!");
- return NULL;
- }
-
- SCA_IInputDevice* inputdev = m_pKeyboardMgr->GetInputDevice();
- const SCA_InputEvent & inevent = inputdev->GetEventValue((SCA_IInputDevice::KX_EnumInputs) keycode);
- return PyInt_FromLong(inevent.m_status);
+ if (!PyInt_Check(value)) {
+ PyErr_SetString(PyExc_ValueError, "sensor.getKeyStatus(int): Keyboard Sensor, expected an int");
+ return NULL;
}
- Py_RETURN_NONE;
+ int keycode = PyInt_AsLong(value);
+
+ if ((keycode < SCA_IInputDevice::KX_BEGINKEY)
+ || (keycode > SCA_IInputDevice::KX_ENDKEY)){
+ PyErr_SetString(PyExc_AttributeError, "sensor.getKeyStatus(int): Keyboard Sensor, invalid keycode specified!");
+ return NULL;
+ }
+
+ SCA_IInputDevice* inputdev = m_pKeyboardMgr->GetInputDevice();
+ const SCA_InputEvent & inevent = inputdev->GetEventValue((SCA_IInputDevice::KX_EnumInputs) keycode);
+ return PyInt_FromLong(inevent.m_status);
}
/* ------------------------------------------------------------------------- */
@@ -778,22 +612,22 @@ KX_PYMETHODDEF_DOC_O(SCA_KeyboardSensor, getKeyStatus,
/* ------------------------------------------------------------------------- */
PyTypeObject SCA_KeyboardSensor::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"SCA_KeyboardSensor",
- sizeof(SCA_KeyboardSensor),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0, //&MyPyCompare,
- __repr,
- 0, //&cvalue_as_number,
0,
0,
0,
- 0
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
PyParentObject SCA_KeyboardSensor::Parents[] = {
@@ -806,21 +640,21 @@ PyParentObject SCA_KeyboardSensor::Parents[] = {
PyMethodDef SCA_KeyboardSensor::Methods[] = {
//Deprecated functions ------>
- {"getKey", (PyCFunction) SCA_KeyboardSensor::sPyGetKey, METH_VARARGS, (PY_METHODCHAR)GetKey_doc},
+ {"getKey", (PyCFunction) SCA_KeyboardSensor::sPyGetKey, METH_NOARGS, (PY_METHODCHAR)GetKey_doc},
{"setKey", (PyCFunction) SCA_KeyboardSensor::sPySetKey, METH_VARARGS, (PY_METHODCHAR)SetKey_doc},
- {"getHold1", (PyCFunction) SCA_KeyboardSensor::sPyGetHold1, METH_VARARGS, (PY_METHODCHAR)GetHold1_doc},
+ {"getHold1", (PyCFunction) SCA_KeyboardSensor::sPyGetHold1, METH_NOARGS, (PY_METHODCHAR)GetHold1_doc},
{"setHold1", (PyCFunction) SCA_KeyboardSensor::sPySetHold1, METH_VARARGS, (PY_METHODCHAR)SetHold1_doc},
- {"getHold2", (PyCFunction) SCA_KeyboardSensor::sPyGetHold2, METH_VARARGS, (PY_METHODCHAR)GetHold2_doc},
+ {"getHold2", (PyCFunction) SCA_KeyboardSensor::sPyGetHold2, METH_NOARGS, (PY_METHODCHAR)GetHold2_doc},
{"setHold2", (PyCFunction) SCA_KeyboardSensor::sPySetHold2, METH_VARARGS, (PY_METHODCHAR)SetHold2_doc},
- {"getPressedKeys", (PyCFunction) SCA_KeyboardSensor::sPyGetPressedKeys, METH_VARARGS, (PY_METHODCHAR)GetPressedKeys_doc},
- {"getCurrentlyPressedKeys", (PyCFunction) SCA_KeyboardSensor::sPyGetCurrentlyPressedKeys, METH_VARARGS, (PY_METHODCHAR)GetCurrentlyPressedKeys_doc},
+ {"getPressedKeys", (PyCFunction) SCA_KeyboardSensor::sPyGetPressedKeys, METH_NOARGS, (PY_METHODCHAR)GetPressedKeys_doc},
+ {"getCurrentlyPressedKeys", (PyCFunction) SCA_KeyboardSensor::sPyGetCurrentlyPressedKeys, METH_NOARGS, (PY_METHODCHAR)GetCurrentlyPressedKeys_doc},
//<----- Deprecated
- KX_PYMETHODTABLE_NOARGS(SCA_KeyboardSensor, getEventList),
KX_PYMETHODTABLE_O(SCA_KeyboardSensor, getKeyStatus),
{NULL,NULL} //Sentinel
};
PyAttributeDef SCA_KeyboardSensor::Attributes[] = {
+ KX_PYATTRIBUTE_RO_FUNCTION("events", SCA_KeyboardSensor, pyattr_get_events),
KX_PYATTRIBUTE_BOOL_RW("useAllKeys",SCA_KeyboardSensor,m_bAllKeys),
KX_PYATTRIBUTE_INT_RW("key",0,SCA_IInputDevice::KX_ENDKEY,true,SCA_KeyboardSensor,m_hotkey),
KX_PYATTRIBUTE_SHORT_RW("hold1",0,SCA_IInputDevice::KX_ENDKEY,true,SCA_KeyboardSensor,m_qual),
@@ -831,18 +665,184 @@ PyAttributeDef SCA_KeyboardSensor::Attributes[] = {
};
PyObject*
-SCA_KeyboardSensor::_getattr(const char *attr)
+SCA_KeyboardSensor::py_getattro(PyObject *attr)
+{
+ py_getattro_up(SCA_ISensor);
+}
+
+int SCA_KeyboardSensor::py_setattro(PyObject *attr, PyObject *value)
+{
+ py_setattro_up(SCA_ISensor);
+}
+
+
+PyObject* SCA_KeyboardSensor::pyattr_get_events(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ SCA_KeyboardSensor* self= static_cast<SCA_KeyboardSensor*>(self_v);
+
+ SCA_IInputDevice* inputdev = self->m_pKeyboardMgr->GetInputDevice();
+
+ PyObject* resultlist = PyList_New(0);
+
+ for (int i=SCA_IInputDevice::KX_BEGINKEY ; i<= SCA_IInputDevice::KX_ENDKEY;i++)
+ {
+ const SCA_InputEvent & inevent = inputdev->GetEventValue((SCA_IInputDevice::KX_EnumInputs) i);
+ if (inevent.m_status != SCA_InputEvent::KX_NO_INPUTSTATUS)
+ {
+ PyObject* keypair = PyList_New(2);
+ PyList_SET_ITEM(keypair,0,PyInt_FromLong(i));
+ PyList_SetItem(keypair,1,PyInt_FromLong(inevent.m_status));
+ PyList_Append(resultlist,keypair);
+ }
+ }
+ return resultlist;
+}
+
+
+/* Accessed from python */
+
+// this code looks ugly, please use an ordinary hashtable
+
+char ToCharacter(int keyIndex, bool shifted)
+{
+ /* numerals */
+ if ( (keyIndex >= SCA_IInputDevice::KX_ZEROKEY)
+ && (keyIndex <= SCA_IInputDevice::KX_NINEKEY) ) {
+ if (shifted) {
+ char numshift[] = ")!@#$%^&*(";
+ return numshift[keyIndex - '0'];
+ } else {
+ return keyIndex - SCA_IInputDevice::KX_ZEROKEY + '0';
+ }
+ }
+
+ /* letters... always lowercase... is that desirable? */
+ if ( (keyIndex >= SCA_IInputDevice::KX_AKEY)
+ && (keyIndex <= SCA_IInputDevice::KX_ZKEY) ) {
+ if (shifted) {
+ return keyIndex - SCA_IInputDevice::KX_AKEY + 'A';
+ } else {
+ return keyIndex - SCA_IInputDevice::KX_AKEY + 'a';
+ }
+ }
+
+ if (keyIndex == SCA_IInputDevice::KX_SPACEKEY) {
+ return ' ';
+ }
+ if (keyIndex == SCA_IInputDevice::KX_RETKEY || keyIndex == SCA_IInputDevice::KX_PADENTER) {
+ return '\n';
+ }
+
+
+ if (keyIndex == SCA_IInputDevice::KX_PADASTERKEY) {
+ return '*';
+ }
+
+ if (keyIndex == SCA_IInputDevice::KX_TABKEY) {
+ return '\t';
+ }
+
+ /* comma to period */
+ char commatoperiod[] = ",-.";
+ char commatoperiodshifted[] = "<_>";
+ if (keyIndex == SCA_IInputDevice::KX_COMMAKEY) {
+ if (shifted) {
+ return commatoperiodshifted[0];
+ } else {
+ return commatoperiod[0];
+ }
+ }
+ if (keyIndex == SCA_IInputDevice::KX_MINUSKEY) {
+ if (shifted) {
+ return commatoperiodshifted[1];
+ } else {
+ return commatoperiod[1];
+ }
+ }
+ if (keyIndex == SCA_IInputDevice::KX_PERIODKEY) {
+ if (shifted) {
+ return commatoperiodshifted[2];
+ } else {
+ return commatoperiod[2];
+ }
+ }
+
+ /* semicolon to rightbracket */
+ char semicolontorightbracket[] = ";\'`/\\=[]";
+ char semicolontorightbracketshifted[] = ":\"~\?|+{}";
+ if ((keyIndex >= SCA_IInputDevice::KX_SEMICOLONKEY)
+ && (keyIndex <= SCA_IInputDevice::KX_RIGHTBRACKETKEY)) {
+ if (shifted) {
+ return semicolontorightbracketshifted[keyIndex - SCA_IInputDevice::KX_SEMICOLONKEY];
+ } else {
+ return semicolontorightbracket[keyIndex - SCA_IInputDevice::KX_SEMICOLONKEY];
+ }
+ }
+
+ /* keypad2 to padplus */
+ char pad2topadplus[] = "246813579. 0- +";
+ if ((keyIndex >= SCA_IInputDevice::KX_PAD2)
+ && (keyIndex <= SCA_IInputDevice::KX_PADPLUSKEY)) {
+ return pad2topadplus[keyIndex - SCA_IInputDevice::KX_PAD2];
+ }
+
+ return '!';
+}
+
+
+
+/**
+ * Determine whether this character can be printed. We cannot use
+ * the library functions here, because we need to test our own
+ * keycodes. */
+bool IsPrintable(int keyIndex)
{
- PyObject* object = _getattr_self(Attributes, this, attr);
- if (object != NULL)
- return object;
- _getattr_up(SCA_ISensor);
+ /* only print
+ * - numerals: KX_ZEROKEY to KX_NINEKEY
+ * - alphas: KX_AKEY to KX_ZKEY.
+ * - specials: KX_RETKEY, KX_PADASTERKEY, KX_PADCOMMAKEY to KX_PERIODKEY,
+ * KX_TABKEY , KX_SEMICOLONKEY to KX_RIGHTBRACKETKEY,
+ * KX_PAD2 to KX_PADPLUSKEY
+ * - delete and backspace: also printable in the sense that they modify
+ * the string
+ * - retkey: should this be printable?
+ * - virgule: prints a space... don't know which key that's supposed
+ * to be...
+ */
+ if ( ((keyIndex >= SCA_IInputDevice::KX_ZEROKEY)
+ && (keyIndex <= SCA_IInputDevice::KX_NINEKEY))
+ || ((keyIndex >= SCA_IInputDevice::KX_AKEY)
+ && (keyIndex <= SCA_IInputDevice::KX_ZKEY))
+ || (keyIndex == SCA_IInputDevice::KX_SPACEKEY)
+ || (keyIndex == SCA_IInputDevice::KX_RETKEY)
+ || (keyIndex == SCA_IInputDevice::KX_PADENTER)
+ || (keyIndex == SCA_IInputDevice::KX_PADASTERKEY)
+ || (keyIndex == SCA_IInputDevice::KX_TABKEY)
+ || ((keyIndex >= SCA_IInputDevice::KX_COMMAKEY)
+ && (keyIndex <= SCA_IInputDevice::KX_PERIODKEY))
+ || ((keyIndex >= SCA_IInputDevice::KX_SEMICOLONKEY)
+ && (keyIndex <= SCA_IInputDevice::KX_RIGHTBRACKETKEY))
+ || ((keyIndex >= SCA_IInputDevice::KX_PAD2)
+ && (keyIndex <= SCA_IInputDevice::KX_PADPLUSKEY))
+ || (keyIndex == SCA_IInputDevice::KX_DELKEY)
+ || (keyIndex == SCA_IInputDevice::KX_BACKSPACEKEY)
+ )
+ {
+ return true;
+ } else {
+ return false;
+ }
}
-int SCA_KeyboardSensor::_setattr(const char *attr, PyObject *value)
+/**
+ * Tests whether this is a delete key.
+ */
+bool IsDelete(int keyIndex)
{
- int ret = _setattr_self(Attributes, this, attr, value);
- if (ret >= 0)
- return ret;
- return SCA_ISensor::_setattr(attr, value);
+ if ( (keyIndex == SCA_IInputDevice::KX_DELKEY)
+ || (keyIndex == SCA_IInputDevice::KX_BACKSPACEKEY) ) {
+ return true;
+ } else {
+ return false;
+ }
}
diff --git a/source/gameengine/GameLogic/SCA_KeyboardSensor.h b/source/gameengine/GameLogic/SCA_KeyboardSensor.h
index bc2f86327a5..073b3e6dbe0 100644
--- a/source/gameengine/GameLogic/SCA_KeyboardSensor.h
+++ b/source/gameengine/GameLogic/SCA_KeyboardSensor.h
@@ -82,22 +82,6 @@ class SCA_KeyboardSensor : public SCA_ISensor
void AddToTargetProp(int keyIndex);
/**
- * Determine whether this character can be printed. We cannot use
- * the library functions here, because we need to test our own
- * keycodes. */
- bool IsPrintable(int keyIndex);
-
- /**
- * Transform keycodes to something printable.
- */
- char ToCharacter(int keyIndex, bool shifted);
-
- /**
- * Tests whether this is a delete key.
- */
- bool IsDelete(int keyIndex);
-
- /**
* Tests whether shift is pressed.
*/
bool IsShifted(void);
@@ -126,33 +110,55 @@ public:
/* Python interface ---------------------------------------------------- */
/* --------------------------------------------------------------------- */
- virtual PyObject* _getattr(const char *attr);
- virtual int _setattr(const char *attr, PyObject *value);
+ virtual PyObject* py_getattro(PyObject *attr);
+ virtual int py_setattro(PyObject *attr, PyObject *value);
//Deprecated functions ----->
/** 1. GetKey : check which key this sensor looks at */
- KX_PYMETHOD_DOC(SCA_KeyboardSensor,GetKey);
+ KX_PYMETHOD_DOC_NOARGS(SCA_KeyboardSensor,GetKey);
/** 2. SetKey: change the key to look at */
- KX_PYMETHOD_DOC(SCA_KeyboardSensor,SetKey);
+ KX_PYMETHOD_DOC_VARARGS(SCA_KeyboardSensor,SetKey);
/** 3. GetHold1 : set the first bucky bit */
- KX_PYMETHOD_DOC(SCA_KeyboardSensor,GetHold1);
+ KX_PYMETHOD_DOC_NOARGS(SCA_KeyboardSensor,GetHold1);
/** 4. SetHold1: change the first bucky bit */
- KX_PYMETHOD_DOC(SCA_KeyboardSensor,SetHold1);
+ KX_PYMETHOD_DOC_VARARGS(SCA_KeyboardSensor,SetHold1);
/** 5. GetHold2 : set the second bucky bit */
- KX_PYMETHOD_DOC(SCA_KeyboardSensor,GetHold2);
+ KX_PYMETHOD_DOC_NOARGS(SCA_KeyboardSensor,GetHold2);
/** 6. SetHold2: change the second bucky bit */
- KX_PYMETHOD_DOC(SCA_KeyboardSensor,SetHold2);
+ KX_PYMETHOD_DOC_VARARGS(SCA_KeyboardSensor,SetHold2);
/** 9. GetPressedKeys: */
- KX_PYMETHOD_DOC(SCA_KeyboardSensor,GetPressedKeys);
+ KX_PYMETHOD_DOC_NOARGS(SCA_KeyboardSensor,GetPressedKeys);
/** 9. GetCurrrentlyPressedKeys: */
- KX_PYMETHOD_DOC(SCA_KeyboardSensor,GetCurrentlyPressedKeys);
+ KX_PYMETHOD_DOC_NOARGS(SCA_KeyboardSensor,GetCurrentlyPressedKeys);
// <------
// KeyEvents:
KX_PYMETHOD_DOC_NOARGS(SCA_KeyboardSensor,getEventList);
// KeyStatus:
KX_PYMETHOD_DOC_O(SCA_KeyboardSensor,getKeyStatus);
+
+ static PyObject* pyattr_get_events(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef);
};
+
+/**
+ * Transform keycodes to something printable.
+ */
+char ToCharacter(int keyIndex, bool shifted);
+
+/**
+ * Determine whether this character can be printed. We cannot use
+ * the library functions here, because we need to test our own
+ * keycodes. */
+bool IsPrintable(int keyIndex);
+
+/**
+ * Tests whether this is a delete key.
+ */
+bool IsDelete(int keyIndex);
+
+
#endif //__KX_KEYBOARDSENSOR
+
+
diff --git a/source/gameengine/GameLogic/SCA_MouseSensor.cpp b/source/gameengine/GameLogic/SCA_MouseSensor.cpp
index 57535b29f32..4dbeb156e63 100644
--- a/source/gameengine/GameLogic/SCA_MouseSensor.cpp
+++ b/source/gameengine/GameLogic/SCA_MouseSensor.cpp
@@ -102,7 +102,7 @@ int SCA_MouseSensor::UpdateHotkey(void *self, const PyAttributeDef*)
default:
; /* ignore, no hotkey */
}
- // return value is used in _setattr(),
+ // return value is used in py_setattro(),
// 0=attribute checked ok (see Attributes array definition)
return 0;
}
@@ -252,9 +252,7 @@ const char SCA_MouseSensor::GetXPosition_doc[] =
"\tReturns the x-coordinate of the mouse sensor, in frame coordinates.\n"
"\tThe lower-left corner is the origin. The coordinate is given in\n"
"\tpixels\n";
-PyObject* SCA_MouseSensor::PyGetXPosition(PyObject* self,
- PyObject* args,
- PyObject* kwds) {
+PyObject* SCA_MouseSensor::PyGetXPosition() {
ShowDeprecationWarning("getXPosition()", "the position property");
return PyInt_FromLong(m_x);
}
@@ -265,9 +263,7 @@ const char SCA_MouseSensor::GetYPosition_doc[] =
"\tReturns the y-coordinate of the mouse sensor, in frame coordinates.\n"
"\tThe lower-left corner is the origin. The coordinate is given in\n"
"\tpixels\n";
-PyObject* SCA_MouseSensor::PyGetYPosition(PyObject* self,
- PyObject* args,
- PyObject* kwds) {
+PyObject* SCA_MouseSensor::PyGetYPosition() {
ShowDeprecationWarning("getYPosition()", "the position property");
return PyInt_FromLong(m_y);
}
@@ -275,7 +271,7 @@ PyObject* SCA_MouseSensor::PyGetYPosition(PyObject* self,
KX_PYMETHODDEF_DOC_O(SCA_MouseSensor, getButtonStatus,
"getButtonStatus(button)\n"
-"\tGet the given button's status (KX_NO_INPUTSTATUS, KX_JUSTACTIVATED, KX_ACTIVE or KX_JUSTRELEASED).\n")
+"\tGet the given button's status (KX_INPUT_NONE, KX_INPUT_NONE, KX_INPUT_JUST_ACTIVATED, KX_INPUT_ACTIVE, KX_INPUT_JUST_RELEASED).\n")
{
if (PyInt_Check(value))
{
@@ -283,7 +279,7 @@ KX_PYMETHODDEF_DOC_O(SCA_MouseSensor, getButtonStatus,
if ((button < SCA_IInputDevice::KX_LEFTMOUSE)
|| (button > SCA_IInputDevice::KX_RIGHTMOUSE)){
- PyErr_SetString(PyExc_ValueError, "invalid button specified!");
+ PyErr_SetString(PyExc_ValueError, "sensor.getButtonStatus(int): Mouse Sensor, invalid button specified!");
return NULL;
}
@@ -300,22 +296,22 @@ KX_PYMETHODDEF_DOC_O(SCA_MouseSensor, getButtonStatus,
/* ------------------------------------------------------------------------- */
PyTypeObject SCA_MouseSensor::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"SCA_MouseSensor",
- sizeof(SCA_MouseSensor),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0, //&MyPyCompare,
- __repr,
- 0, //&cvalue_as_number,
0,
0,
0,
- 0
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
PyParentObject SCA_MouseSensor::Parents[] = {
@@ -341,20 +337,14 @@ PyAttributeDef SCA_MouseSensor::Attributes[] = {
{ NULL } //Sentinel
};
-PyObject* SCA_MouseSensor::_getattr(const char *attr)
+PyObject* SCA_MouseSensor::py_getattro(PyObject *attr)
{
- PyObject* object = _getattr_self(Attributes, this, attr);
- if (object != NULL)
- return object;
- _getattr_up(SCA_ISensor);
+ py_getattro_up(SCA_ISensor);
}
-int SCA_MouseSensor::_setattr(const char *attr, PyObject *value)
+int SCA_MouseSensor::py_setattro(PyObject *attr, PyObject *value)
{
- int ret = _setattr_self(Attributes, this, attr, value);
- if (ret >= 0)
- return ret;
- return SCA_ISensor::_setattr(attr, value);
+ py_setattro_up(SCA_ISensor);
}
/* eof */
diff --git a/source/gameengine/GameLogic/SCA_MouseSensor.h b/source/gameengine/GameLogic/SCA_MouseSensor.h
index 30b43fe53cc..2d1c496029d 100644
--- a/source/gameengine/GameLogic/SCA_MouseSensor.h
+++ b/source/gameengine/GameLogic/SCA_MouseSensor.h
@@ -109,14 +109,14 @@ class SCA_MouseSensor : public SCA_ISensor
/* Python interface ---------------------------------------------------- */
/* --------------------------------------------------------------------- */
- virtual PyObject* _getattr(const char *attr);
- virtual int _setattr(const char *attr, PyObject *value);
+ virtual PyObject* py_getattro(PyObject *attr);
+ virtual int py_setattro(PyObject *attr, PyObject *value);
//Deprecated functions ----->
/* read x-coordinate */
- KX_PYMETHOD_DOC(SCA_MouseSensor,GetXPosition);
+ KX_PYMETHOD_DOC_NOARGS(SCA_MouseSensor,GetXPosition);
/* read y-coordinate */
- KX_PYMETHOD_DOC(SCA_MouseSensor,GetYPosition);
+ KX_PYMETHOD_DOC_NOARGS(SCA_MouseSensor,GetYPosition);
//<----- deprecated
// get button status
diff --git a/source/gameengine/GameLogic/SCA_NANDController.cpp b/source/gameengine/GameLogic/SCA_NANDController.cpp
index 18426d75582..703c9c1bbaf 100644
--- a/source/gameengine/GameLogic/SCA_NANDController.cpp
+++ b/source/gameengine/GameLogic/SCA_NANDController.cpp
@@ -107,22 +107,22 @@ CValue* SCA_NANDController::GetReplica()
/* Integration hooks ------------------------------------------------------- */
PyTypeObject SCA_NANDController::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"SCA_NANDController",
- sizeof(SCA_NANDController),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0, //&MyPyCompare,
- __repr,
- 0, //&cvalue_as_number,
0,
0,
0,
- 0
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
PyParentObject SCA_NANDController::Parents[] = {
@@ -141,8 +141,8 @@ PyAttributeDef SCA_NANDController::Attributes[] = {
{ NULL } //Sentinel
};
-PyObject* SCA_NANDController::_getattr(const char *attr) {
- _getattr_up(SCA_IController);
+PyObject* SCA_NANDController::py_getattro(PyObject *attr) {
+ py_getattro_up(SCA_IController);
}
/* eof */
diff --git a/source/gameengine/GameLogic/SCA_NANDController.h b/source/gameengine/GameLogic/SCA_NANDController.h
index d88504cfc0d..11600914a1a 100644
--- a/source/gameengine/GameLogic/SCA_NANDController.h
+++ b/source/gameengine/GameLogic/SCA_NANDController.h
@@ -48,7 +48,7 @@ public:
/* Python interface ---------------------------------------------------- */
/* --------------------------------------------------------------------- */
- virtual PyObject* _getattr(const char *attr);
+ virtual PyObject* py_getattro(PyObject *attr);
};
diff --git a/source/gameengine/GameLogic/SCA_NORController.cpp b/source/gameengine/GameLogic/SCA_NORController.cpp
index 1de6a641c3d..06acae5a81a 100644
--- a/source/gameengine/GameLogic/SCA_NORController.cpp
+++ b/source/gameengine/GameLogic/SCA_NORController.cpp
@@ -107,22 +107,22 @@ CValue* SCA_NORController::GetReplica()
/* Integration hooks ------------------------------------------------------- */
PyTypeObject SCA_NORController::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"SCA_NORController",
- sizeof(SCA_NORController),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0, //&MyPyCompare,
- __repr,
- 0, //&cvalue_as_number,
0,
0,
0,
- 0
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
PyParentObject SCA_NORController::Parents[] = {
@@ -141,8 +141,8 @@ PyAttributeDef SCA_NORController::Attributes[] = {
{ NULL } //Sentinel
};
-PyObject* SCA_NORController::_getattr(const char *attr) {
- _getattr_up(SCA_IController);
+PyObject* SCA_NORController::py_getattro(PyObject *attr) {
+ py_getattro_up(SCA_IController);
}
/* eof */
diff --git a/source/gameengine/GameLogic/SCA_NORController.h b/source/gameengine/GameLogic/SCA_NORController.h
index 45b639f3f3f..fc814e28d37 100644
--- a/source/gameengine/GameLogic/SCA_NORController.h
+++ b/source/gameengine/GameLogic/SCA_NORController.h
@@ -48,7 +48,7 @@ public:
/* Python interface ---------------------------------------------------- */
/* --------------------------------------------------------------------- */
- virtual PyObject* _getattr(const char *attr);
+ virtual PyObject* py_getattro(PyObject *attr);
};
diff --git a/source/gameengine/GameLogic/SCA_ORController.cpp b/source/gameengine/GameLogic/SCA_ORController.cpp
index 61fbc889d90..319ff04f776 100644
--- a/source/gameengine/GameLogic/SCA_ORController.cpp
+++ b/source/gameengine/GameLogic/SCA_ORController.cpp
@@ -99,22 +99,22 @@ void SCA_ORController::Trigger(SCA_LogicManager* logicmgr)
/* Integration hooks ------------------------------------------------------- */
PyTypeObject SCA_ORController::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"SCA_ORController",
- sizeof(SCA_ORController),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0, //&MyPyCompare,
- __repr,
- 0, //&cvalue_as_number,
0,
0,
0,
- 0
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
PyParentObject SCA_ORController::Parents[] = {
@@ -134,8 +134,8 @@ PyAttributeDef SCA_ORController::Attributes[] = {
};
-PyObject* SCA_ORController::_getattr(const char *attr) {
- _getattr_up(SCA_IController);
+PyObject* SCA_ORController::py_getattro(PyObject *attr) {
+ py_getattro_up(SCA_IController);
}
/* eof */
diff --git a/source/gameengine/GameLogic/SCA_ORController.h b/source/gameengine/GameLogic/SCA_ORController.h
index 9a6e9e75022..fdc81486e74 100644
--- a/source/gameengine/GameLogic/SCA_ORController.h
+++ b/source/gameengine/GameLogic/SCA_ORController.h
@@ -49,7 +49,7 @@ public:
/* Python interface ---------------------------------------------------- */
/* --------------------------------------------------------------------- */
- virtual PyObject* _getattr(const char *attr);
+ virtual PyObject* py_getattro(PyObject *attr);
};
#endif //__KX_ORCONTROLLER
diff --git a/source/gameengine/GameLogic/SCA_PropertyActuator.cpp b/source/gameengine/GameLogic/SCA_PropertyActuator.cpp
index c9ace081bae..c4db723ee89 100644
--- a/source/gameengine/GameLogic/SCA_PropertyActuator.cpp
+++ b/source/gameengine/GameLogic/SCA_PropertyActuator.cpp
@@ -77,11 +77,25 @@ bool SCA_PropertyActuator::Update()
CParser parser;
parser.SetContext( propowner->AddRef());
- CExpression* userexpr = parser.ProcessText(m_exprtxt);
- if (userexpr)
+ CExpression* userexpr= NULL;
+
+ if (m_type==KX_ACT_PROP_TOGGLE)
{
-
-
+ /* dont use */
+ CValue* newval;
+ CValue* oldprop = propowner->GetProperty(m_propname);
+ if (oldprop)
+ {
+ newval = new CBoolValue((oldprop->GetNumber()==0.0) ? true:false);
+ oldprop->SetValue(newval);
+ } else
+ { /* as not been assigned, evaluate as false, so assign true */
+ newval = new CBoolValue(true);
+ propowner->SetProperty(m_propname,newval);
+ }
+ newval->Release();
+ }
+ else if ((userexpr = parser.ProcessText(m_exprtxt))) {
switch (m_type)
{
@@ -135,6 +149,7 @@ bool SCA_PropertyActuator::Update()
}
break;
}
+ /* case KX_ACT_PROP_TOGGLE: */ /* accounted for above, no need for userexpr */
default:
{
@@ -218,22 +233,22 @@ void SCA_PropertyActuator::Relink(GEN_Map<GEN_HashedPtr, void*> *obj_map)
/* Integration hooks ------------------------------------------------------- */
PyTypeObject SCA_PropertyActuator::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"SCA_PropertyActuator",
- sizeof(SCA_PropertyActuator),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0, //&MyPyCompare,
- __repr,
- 0, //&cvalue_as_number,
0,
0,
0,
- 0
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
PyParentObject SCA_PropertyActuator::Parents[] = {
@@ -260,18 +275,12 @@ PyAttributeDef SCA_PropertyActuator::Attributes[] = {
{ NULL } //Sentinel
};
-PyObject* SCA_PropertyActuator::_getattr(const char *attr) {
- PyObject* object = _getattr_self(Attributes, this, attr);
- if (object != NULL)
- return object;
- _getattr_up(SCA_IActuator);
+PyObject* SCA_PropertyActuator::py_getattro(PyObject *attr) {
+ py_getattro_up(SCA_IActuator);
}
-int SCA_PropertyActuator::_setattr(const char *attr, PyObject *value) {
- int ret = _setattr_self(Attributes, this, attr, value);
- if (ret >= 0)
- return ret;
- return SCA_IActuator::_setattr(attr, value);
+int SCA_PropertyActuator::py_setattro(PyObject *attr, PyObject *value) {
+ py_setattro_up(SCA_IActuator);
}
/* 1. setProperty */
@@ -280,12 +289,12 @@ const char SCA_PropertyActuator::SetProperty_doc[] =
"\t- name: string\n"
"\tSet the property on which to operate. If there is no property\n"
"\tof this name, the call is ignored.\n";
-PyObject* SCA_PropertyActuator::PySetProperty(PyObject* self, PyObject* args, PyObject* kwds)
+PyObject* SCA_PropertyActuator::PySetProperty(PyObject* args, PyObject* kwds)
{
ShowDeprecationWarning("setProperty()", "the 'property' property");
/* Check whether the name exists first ! */
char *nameArg;
- if (!PyArg_ParseTuple(args, "s", &nameArg)) {
+ if (!PyArg_ParseTuple(args, "s:setProperty", &nameArg)) {
return NULL;
}
@@ -305,7 +314,7 @@ PyObject* SCA_PropertyActuator::PySetProperty(PyObject* self, PyObject* args, Py
const char SCA_PropertyActuator::GetProperty_doc[] =
"getProperty(name)\n"
"\tReturn the property on which the actuator operates.\n";
-PyObject* SCA_PropertyActuator::PyGetProperty(PyObject* self, PyObject* args, PyObject* kwds)
+PyObject* SCA_PropertyActuator::PyGetProperty(PyObject* args, PyObject* kwds)
{
ShowDeprecationWarning("getProperty()", "the 'property' property");
return PyString_FromString(m_propname);
@@ -318,11 +327,11 @@ const char SCA_PropertyActuator::SetValue_doc[] =
"\tSet the value with which the actuator operates. If the value\n"
"\tis not compatible with the type of the property, the subsequent\n"
"\t action is ignored.\n";
-PyObject* SCA_PropertyActuator::PySetValue(PyObject* self, PyObject* args, PyObject* kwds)
+PyObject* SCA_PropertyActuator::PySetValue(PyObject* args, PyObject* kwds)
{
ShowDeprecationWarning("setValue()", "the value property");
char *valArg;
- if(!PyArg_ParseTuple(args, "s", &valArg)) {
+ if(!PyArg_ParseTuple(args, "s:setValue", &valArg)) {
return NULL;
}
@@ -335,7 +344,7 @@ PyObject* SCA_PropertyActuator::PySetValue(PyObject* self, PyObject* args, PyObj
const char SCA_PropertyActuator::GetValue_doc[] =
"getValue()\n"
"\tReturns the value with which the actuator operates.\n";
-PyObject* SCA_PropertyActuator::PyGetValue(PyObject* self, PyObject* args, PyObject* kwds)
+PyObject* SCA_PropertyActuator::PyGetValue(PyObject* args, PyObject* kwds)
{
ShowDeprecationWarning("getValue()", "the value property");
return PyString_FromString(m_exprtxt);
diff --git a/source/gameengine/GameLogic/SCA_PropertyActuator.h b/source/gameengine/GameLogic/SCA_PropertyActuator.h
index 444d9285796..bb841cf88ad 100644
--- a/source/gameengine/GameLogic/SCA_PropertyActuator.h
+++ b/source/gameengine/GameLogic/SCA_PropertyActuator.h
@@ -43,6 +43,7 @@ class SCA_PropertyActuator : public SCA_IActuator
KX_ACT_PROP_ASSIGN,
KX_ACT_PROP_ADD,
KX_ACT_PROP_COPY,
+ KX_ACT_PROP_TOGGLE,
KX_ACT_PROP_MAX
};
@@ -85,8 +86,8 @@ public:
/* Python interface ---------------------------------------------------- */
/* --------------------------------------------------------------------- */
- virtual PyObject* _getattr(const char *attr);
- virtual int _setattr(const char *attr, PyObject *value);
+ virtual PyObject* py_getattro(PyObject *attr);
+ virtual int py_setattro(PyObject *attr, PyObject *value);
// python wrapped methods
KX_PYMETHOD_DOC(SCA_PropertyActuator,SetProperty);
diff --git a/source/gameengine/GameLogic/SCA_PropertySensor.cpp b/source/gameengine/GameLogic/SCA_PropertySensor.cpp
index d683c8bb3e7..de8a9fcf03e 100644
--- a/source/gameengine/GameLogic/SCA_PropertySensor.cpp
+++ b/source/gameengine/GameLogic/SCA_PropertySensor.cpp
@@ -306,22 +306,22 @@ int SCA_PropertySensor::validValueForProperty(void *self, const PyAttributeDef*)
/* Integration hooks ------------------------------------------------------- */
PyTypeObject SCA_PropertySensor::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"SCA_PropertySensor",
- sizeof(SCA_PropertySensor),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0, //&MyPyCompare,
- __repr,
- 0, //&cvalue_as_number,
0,
0,
0,
- 0
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
PyParentObject SCA_PropertySensor::Parents[] = {
@@ -334,11 +334,11 @@ PyParentObject SCA_PropertySensor::Parents[] = {
PyMethodDef SCA_PropertySensor::Methods[] = {
//Deprecated functions ------>
- {"getType", (PyCFunction) SCA_PropertySensor::sPyGetType, METH_VARARGS, (PY_METHODCHAR)GetType_doc},
+ {"getType", (PyCFunction) SCA_PropertySensor::sPyGetType, METH_NOARGS, (PY_METHODCHAR)GetType_doc},
{"setType", (PyCFunction) SCA_PropertySensor::sPySetType, METH_VARARGS, (PY_METHODCHAR)SetType_doc},
- {"getProperty", (PyCFunction) SCA_PropertySensor::sPyGetProperty, METH_VARARGS, (PY_METHODCHAR)GetProperty_doc},
+ {"getProperty", (PyCFunction) SCA_PropertySensor::sPyGetProperty, METH_NOARGS, (PY_METHODCHAR)GetProperty_doc},
{"setProperty", (PyCFunction) SCA_PropertySensor::sPySetProperty, METH_VARARGS, (PY_METHODCHAR)SetProperty_doc},
- {"getValue", (PyCFunction) SCA_PropertySensor::sPyGetValue, METH_VARARGS, (PY_METHODCHAR)GetValue_doc},
+ {"getValue", (PyCFunction) SCA_PropertySensor::sPyGetValue, METH_NOARGS, (PY_METHODCHAR)GetValue_doc},
{"setValue", (PyCFunction) SCA_PropertySensor::sPySetValue, METH_VARARGS, (PY_METHODCHAR)SetValue_doc},
//<----- Deprecated
{NULL,NULL} //Sentinel
@@ -352,25 +352,19 @@ PyAttributeDef SCA_PropertySensor::Attributes[] = {
};
-PyObject* SCA_PropertySensor::_getattr(const char *attr) {
- PyObject* object = _getattr_self(Attributes, this, attr);
- if (object != NULL)
- return object;
- _getattr_up(SCA_ISensor); /* implicit return! */
+PyObject* SCA_PropertySensor::py_getattro(PyObject *attr) {
+ py_getattro_up(SCA_ISensor);
}
-int SCA_PropertySensor::_setattr(const char *attr, PyObject *value) {
- int ret = _setattr_self(Attributes, this, attr, value);
- if (ret >= 0)
- return ret;
- return SCA_ISensor::_setattr(attr, value);
+int SCA_PropertySensor::py_setattro(PyObject *attr, PyObject *value) {
+ py_setattro_up(SCA_ISensor);
}
/* 1. getType */
const char SCA_PropertySensor::GetType_doc[] =
"getType()\n"
"\tReturns the type of check this sensor performs.\n";
-PyObject* SCA_PropertySensor::PyGetType(PyObject* self, PyObject* args, PyObject* kwds)
+PyObject* SCA_PropertySensor::PyGetType()
{
ShowDeprecationWarning("getType()", "the type property");
return PyInt_FromLong(m_checktype);
@@ -383,12 +377,12 @@ const char SCA_PropertySensor::SetType_doc[] =
"\t KX_PROPSENSOR_INTERVAL, KX_PROPSENSOR_CHANGED,\n"
"\t or KX_PROPSENSOR_EXPRESSION.\n"
"\tSet the type of check to perform.\n";
-PyObject* SCA_PropertySensor::PySetType(PyObject* self, PyObject* args, PyObject* kwds)
+PyObject* SCA_PropertySensor::PySetType(PyObject* args)
{
ShowDeprecationWarning("setType()", "the type property");
int typeArg;
- if (!PyArg_ParseTuple(args, "i", &typeArg)) {
+ if (!PyArg_ParseTuple(args, "i:setType", &typeArg)) {
return NULL;
}
@@ -404,7 +398,7 @@ PyObject* SCA_PropertySensor::PySetType(PyObject* self, PyObject* args, PyObject
const char SCA_PropertySensor::GetProperty_doc[] =
"getProperty()\n"
"\tReturn the property with which the sensor operates.\n";
-PyObject* SCA_PropertySensor::PyGetProperty(PyObject* self, PyObject* args, PyObject* kwds)
+PyObject* SCA_PropertySensor::PyGetProperty()
{
ShowDeprecationWarning("getProperty()", "the 'property' property");
return PyString_FromString(m_checkpropname);
@@ -416,14 +410,14 @@ const char SCA_PropertySensor::SetProperty_doc[] =
"\t- name: string\n"
"\tSets the property with which to operate. If there is no property\n"
"\tof this name, the call is ignored.\n";
-PyObject* SCA_PropertySensor::PySetProperty(PyObject* self, PyObject* args, PyObject* kwds)
+PyObject* SCA_PropertySensor::PySetProperty(PyObject* args)
{
ShowDeprecationWarning("setProperty()", "the 'property' property");
/* We should query whether the name exists. Or should we create a prop */
/* on the fly? */
char *propNameArg = NULL;
- if (!PyArg_ParseTuple(args, "s", &propNameArg)) {
+ if (!PyArg_ParseTuple(args, "s:setProperty", &propNameArg)) {
return NULL;
}
@@ -441,7 +435,7 @@ PyObject* SCA_PropertySensor::PySetProperty(PyObject* self, PyObject* args, PyOb
const char SCA_PropertySensor::GetValue_doc[] =
"getValue()\n"
"\tReturns the value with which the sensor operates.\n";
-PyObject* SCA_PropertySensor::PyGetValue(PyObject* self, PyObject* args, PyObject* kwds)
+PyObject* SCA_PropertySensor::PyGetValue()
{
ShowDeprecationWarning("getValue()", "the value property");
return PyString_FromString(m_checkpropval);
@@ -454,19 +448,19 @@ const char SCA_PropertySensor::SetValue_doc[] =
"\tSet the value with which the sensor operates. If the value\n"
"\tis not compatible with the type of the property, the subsequent\n"
"\t action is ignored.\n";
-PyObject* SCA_PropertySensor::PySetValue(PyObject* self, PyObject* args, PyObject* kwds)
+PyObject* SCA_PropertySensor::PySetValue(PyObject* args)
{
ShowDeprecationWarning("setValue()", "the value property");
/* Here, we need to check whether the value is 'valid' for this property.*/
/* We know that the property exists, or is NULL. */
char *propValArg = NULL;
- if(!PyArg_ParseTuple(args, "s", &propValArg)) {
+ if(!PyArg_ParseTuple(args, "s:setValue", &propValArg)) {
return NULL;
}
STR_String oldval = m_checkpropval;
m_checkpropval = propValArg;
- if (validValueForProperty(self, NULL)) {
+ if (validValueForProperty(m_proxy, NULL)) {
m_checkpropval = oldval;
return NULL;
}
diff --git a/source/gameengine/GameLogic/SCA_PropertySensor.h b/source/gameengine/GameLogic/SCA_PropertySensor.h
index 2594e3fca9d..e1e378a973c 100644
--- a/source/gameengine/GameLogic/SCA_PropertySensor.h
+++ b/source/gameengine/GameLogic/SCA_PropertySensor.h
@@ -89,21 +89,21 @@ public:
/* Python interface ---------------------------------------------------- */
/* --------------------------------------------------------------------- */
- virtual PyObject* _getattr(const char *attr);
- virtual int _setattr(const char *attr, PyObject *value);
+ virtual PyObject* py_getattro(PyObject *attr);
+ virtual int py_setattro(PyObject *attr, PyObject *value);
/* 1. getType */
- KX_PYMETHOD_DOC(SCA_PropertySensor,GetType);
+ KX_PYMETHOD_DOC_NOARGS(SCA_PropertySensor,GetType);
/* 2. setType */
- KX_PYMETHOD_DOC(SCA_PropertySensor,SetType);
+ KX_PYMETHOD_DOC_VARARGS(SCA_PropertySensor,SetType);
/* 3. setProperty */
- KX_PYMETHOD_DOC(SCA_PropertySensor,SetProperty);
+ KX_PYMETHOD_DOC_VARARGS(SCA_PropertySensor,SetProperty);
/* 4. getProperty */
- KX_PYMETHOD_DOC(SCA_PropertySensor,GetProperty);
+ KX_PYMETHOD_DOC_NOARGS(SCA_PropertySensor,GetProperty);
/* 5. getValue */
- KX_PYMETHOD_DOC(SCA_PropertySensor,GetValue);
+ KX_PYMETHOD_DOC_NOARGS(SCA_PropertySensor,GetValue);
/* 6. setValue */
- KX_PYMETHOD_DOC(SCA_PropertySensor,SetValue);
+ KX_PYMETHOD_DOC_VARARGS(SCA_PropertySensor,SetValue);
/**
* Test whether this is a sensible value (type check)
*/
diff --git a/source/gameengine/GameLogic/SCA_PythonController.cpp b/source/gameengine/GameLogic/SCA_PythonController.cpp
index c75e36acab2..b8052555528 100644
--- a/source/gameengine/GameLogic/SCA_PythonController.cpp
+++ b/source/gameengine/GameLogic/SCA_PythonController.cpp
@@ -154,10 +154,10 @@ int SCA_PythonController::IsTriggered(class SCA_ISensor* sensor)
static const char* sPyGetCurrentController__doc__;
#endif
-
-PyObject* SCA_PythonController::sPyGetCurrentController(PyObject* self)
+/* warning, self is not the SCA_PythonController, its a PyObjectPlus_Proxy */
+PyObject* SCA_PythonController::sPyGetCurrentController(PyObject *self)
{
- return m_sCurrentController->AddRef();
+ return m_sCurrentController->GetProxy();
}
SCA_IActuator* SCA_PythonController::LinkedActuatorFromPy(PyObject *value)
@@ -176,10 +176,10 @@ SCA_IActuator* SCA_PythonController::LinkedActuatorFromPy(PyObject *value)
}
}
}
- else {
- /* Expecting an actuator type */
+ else if (BGE_PROXY_CHECK_TYPE(value)) {
+ PyObjectPlus *value_plus= BGE_PROXY_REF(value); /* Expecting an actuator type */ // XXX TODO - CHECK TYPE
for(it = lacts.begin(); it!= lacts.end(); it++) {
- if( static_cast<SCA_IActuator*>(value) == (*it) ) {
+ if( static_cast<SCA_IActuator*>(value_plus) == (*it) ) {
return *it;
}
}
@@ -187,7 +187,7 @@ SCA_IActuator* SCA_PythonController::LinkedActuatorFromPy(PyObject *value)
/* set the exception */
PyObject *value_str = PyObject_Repr(value); /* new ref */
- PyErr_Format(PyExc_ValueError, "'%s' not in this controllers actuator list", PyString_AsString(value_str));
+ PyErr_Format(PyExc_ValueError, "'%s' not in this python controllers actuator list", PyString_AsString(value_str));
Py_DECREF(value_str);
return false;
@@ -197,15 +197,12 @@ SCA_IActuator* SCA_PythonController::LinkedActuatorFromPy(PyObject *value)
static const char* sPyAddActiveActuator__doc__;
#endif
-PyObject* SCA_PythonController::sPyAddActiveActuator(
-
- PyObject* self,
- PyObject* args)
+/* warning, self is not the SCA_PythonController, its a PyObjectPlus_Proxy */
+PyObject* SCA_PythonController::sPyAddActiveActuator(PyObject* self, PyObject* args)
{
-
PyObject* ob1;
int activate;
- if (!PyArg_ParseTuple(args, "Oi", &ob1,&activate))
+ if (!PyArg_ParseTuple(args, "Oi:addActiveActuator", &ob1,&activate))
return NULL;
SCA_IActuator* actu = LinkedActuatorFromPy(ob1);
@@ -224,22 +221,22 @@ const char* SCA_PythonController::sPyAddActiveActuator__doc__= "addActiveActuato
const char SCA_PythonController::GetActuators_doc[] = "getActuator";
PyTypeObject SCA_PythonController::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"SCA_PythonController",
- sizeof(SCA_PythonController),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0, //&MyPyCompare,
- __repr,
- 0, //&cvalue_as_number,
0,
0,
0,
- 0
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
PyParentObject SCA_PythonController::Parents[] = {
@@ -265,6 +262,8 @@ PyMethodDef SCA_PythonController::Methods[] = {
};
PyAttributeDef SCA_PythonController::Attributes[] = {
+ KX_PYATTRIBUTE_RO_FUNCTION("state", SCA_PythonController, pyattr_get_state),
+ KX_PYATTRIBUTE_RW_FUNCTION("script", SCA_PythonController, pyattr_get_script, pyattr_set_script),
{ NULL } //Sentinel
};
@@ -298,7 +297,7 @@ bool SCA_PythonController::Compile()
* their user count. Not to mention holding references to wrapped data.
* This is especially bad when the PyObject for the wrapped data is free'd, after blender
* has alredy dealocated the pointer */
- PySys_SetObject( (char *)"last_traceback", Py_None);
+ PySys_SetObject( (char *)"last_traceback", NULL);
PyErr_Clear(); /* just to be sure */
return false;
@@ -356,7 +355,7 @@ void SCA_PythonController::Trigger(SCA_LogicManager* logicmgr)
* their user count. Not to mention holding references to wrapped data.
* This is especially bad when the PyObject for the wrapped data is free'd, after blender
* has alredy dealocated the pointer */
- PySys_SetObject( (char *)"last_traceback", Py_None);
+ PySys_SetObject( (char *)"last_traceback", NULL);
PyErr_Clear(); /* just to be sure */
//PyRun_SimpleString(m_scriptText.Ptr());
@@ -372,41 +371,17 @@ void SCA_PythonController::Trigger(SCA_LogicManager* logicmgr)
-PyObject* SCA_PythonController::_getattr(const char *attr)
+PyObject* SCA_PythonController::py_getattro(PyObject *attr)
{
- if (!strcmp(attr,"state")) {
- return PyInt_FromLong(m_statemask);
- }
- if (!strcmp(attr,"script")) {
- return PyString_FromString(m_scriptText);
- }
- _getattr_up(SCA_IController);
+ py_getattro_up(SCA_IController);
}
-int SCA_PythonController::_setattr(const char *attr, PyObject *value)
+int SCA_PythonController::py_setattro(PyObject *attr, PyObject *value)
{
- if (!strcmp(attr,"state")) {
- PyErr_SetString(PyExc_AttributeError, "state is read only");
- return 1;
- }
- if (!strcmp(attr,"script")) {
- char *scriptArg = PyString_AsString(value);
-
- if (scriptArg==NULL) {
- PyErr_SetString(PyExc_TypeError, "expected a string (script name)");
- return -1;
- }
-
- /* set scripttext sets m_bModified to true,
- so next time the script is needed, a reparse into byte code is done */
- this->SetScriptText(scriptArg);
-
- return 1;
- }
- return SCA_IController::_setattr(attr, value);
+ py_setattro_up(SCA_IController);
}
-PyObject* SCA_PythonController::PyActivate(PyObject* self, PyObject *value)
+PyObject* SCA_PythonController::PyActivate(PyObject *value)
{
SCA_IActuator* actu = LinkedActuatorFromPy(value);
if(actu==NULL)
@@ -418,7 +393,7 @@ PyObject* SCA_PythonController::PyActivate(PyObject* self, PyObject *value)
Py_RETURN_NONE;
}
-PyObject* SCA_PythonController::PyDeActivate(PyObject* self, PyObject *value)
+PyObject* SCA_PythonController::PyDeActivate(PyObject *value)
{
SCA_IActuator* actu = LinkedActuatorFromPy(value);
if(actu==NULL)
@@ -430,26 +405,26 @@ PyObject* SCA_PythonController::PyDeActivate(PyObject* self, PyObject *value)
Py_RETURN_NONE;
}
-PyObject* SCA_PythonController::PyGetActuators(PyObject* self)
+PyObject* SCA_PythonController::PyGetActuators()
{
PyObject* resultlist = PyList_New(m_linkedactuators.size());
for (unsigned int index=0;index<m_linkedactuators.size();index++)
{
- PyList_SET_ITEM(resultlist,index,m_linkedactuators[index]->AddRef());
+ PyList_SET_ITEM(resultlist,index, m_linkedactuators[index]->GetProxy());
}
return resultlist;
}
const char SCA_PythonController::GetSensor_doc[] =
-"GetSensor (char sensorname) return linked sensor that is named [sensorname]\n";
+"getSensor (char sensorname) return linked sensor that is named [sensorname]\n";
PyObject*
-SCA_PythonController::PyGetSensor(PyObject* self, PyObject* value)
+SCA_PythonController::PyGetSensor(PyObject* value)
{
char *scriptArg = PyString_AsString(value);
if (scriptArg==NULL) {
- PyErr_SetString(PyExc_TypeError, "expected a string (sensor name)");
+ PyErr_SetString(PyExc_TypeError, "controller.getSensor(string): Python Controller, expected a string (sensor name)");
return NULL;
}
@@ -459,27 +434,25 @@ SCA_PythonController::PyGetSensor(PyObject* self, PyObject* value)
STR_String realname = sensor->GetName();
if (realname == scriptArg)
{
- return sensor->AddRef();
+ return sensor->GetProxy();
}
}
- char emsg[96];
- PyOS_snprintf( emsg, sizeof( emsg ), "Unable to find requested sensor \"%s\"", scriptArg );
- PyErr_SetString(PyExc_AttributeError, emsg);
+ PyErr_Format(PyExc_AttributeError, "controller.getSensor(string): Python Controller, unable to find requested sensor \"%s\"", scriptArg);
return NULL;
}
const char SCA_PythonController::GetActuator_doc[] =
-"GetActuator (char sensorname) return linked actuator that is named [actuatorname]\n";
+"getActuator (char sensorname) return linked actuator that is named [actuatorname]\n";
PyObject*
-SCA_PythonController::PyGetActuator(PyObject* self, PyObject* value)
+SCA_PythonController::PyGetActuator(PyObject* value)
{
char *scriptArg = PyString_AsString(value);
if (scriptArg==NULL) {
- PyErr_SetString(PyExc_TypeError, "expected a string (actuator name)");
+ PyErr_SetString(PyExc_TypeError, "controller.getActuator(string): Python Controller, expected a string (actuator name)");
return NULL;
}
@@ -488,39 +461,37 @@ SCA_PythonController::PyGetActuator(PyObject* self, PyObject* value)
SCA_IActuator* actua = m_linkedactuators[index];
if (actua->GetName() == scriptArg)
{
- return actua->AddRef();
+ return actua->GetProxy();
}
}
- char emsg[96];
- PyOS_snprintf( emsg, sizeof( emsg ), "Unable to find requested actuator \"%s\"", scriptArg );
- PyErr_SetString(PyExc_AttributeError, emsg);
+ PyErr_Format(PyExc_AttributeError, "controller.getActuator(string): Python Controller, unable to find requested actuator \"%s\"", scriptArg);
return NULL;
}
const char SCA_PythonController::GetSensors_doc[] = "getSensors returns a list of all attached sensors";
PyObject*
-SCA_PythonController::PyGetSensors(PyObject* self)
+SCA_PythonController::PyGetSensors()
{
PyObject* resultlist = PyList_New(m_linkedsensors.size());
for (unsigned int index=0;index<m_linkedsensors.size();index++)
{
- PyList_SET_ITEM(resultlist,index,m_linkedsensors[index]->AddRef());
+ PyList_SET_ITEM(resultlist,index, m_linkedsensors[index]->GetProxy());
}
return resultlist;
}
/* 1. getScript */
-PyObject* SCA_PythonController::PyGetScript(PyObject* self)
+PyObject* SCA_PythonController::PyGetScript()
{
ShowDeprecationWarning("getScript()", "the script property");
return PyString_FromString(m_scriptText);
}
/* 2. setScript */
-PyObject* SCA_PythonController::PySetScript(PyObject* self, PyObject* value)
+PyObject* SCA_PythonController::PySetScript(PyObject* value)
{
char *scriptArg = PyString_AsString(value);
@@ -540,10 +511,41 @@ PyObject* SCA_PythonController::PySetScript(PyObject* self, PyObject* value)
}
/* 1. getScript */
-PyObject* SCA_PythonController::PyGetState(PyObject* self)
+PyObject* SCA_PythonController::PyGetState()
{
ShowDeprecationWarning("getState()", "the state property");
return PyInt_FromLong(m_statemask);
}
+PyObject* SCA_PythonController::pyattr_get_state(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ SCA_PythonController* self= static_cast<SCA_PythonController*>(self_v);
+ return PyInt_FromLong(self->m_statemask);
+}
+
+PyObject* SCA_PythonController::pyattr_get_script(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ SCA_PythonController* self= static_cast<SCA_PythonController*>(self_v);
+ return PyString_FromString(self->m_scriptText);
+}
+
+int SCA_PythonController::pyattr_set_script(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ SCA_PythonController* self= static_cast<SCA_PythonController*>(self_v);
+
+ char *scriptArg = PyString_AsString(value);
+
+ if (scriptArg==NULL) {
+ PyErr_SetString(PyExc_TypeError, "controller.script = string: Python Controller, expected a string script text");
+ return -1;
+ }
+
+ /* set scripttext sets m_bModified to true,
+ so next time the script is needed, a reparse into byte code is done */
+ self->SetScriptText(scriptArg);
+
+ return 0;
+}
+
+
/* eof */
diff --git a/source/gameengine/GameLogic/SCA_PythonController.h b/source/gameengine/GameLogic/SCA_PythonController.h
index 4ec18f32c23..f10c4e47ebb 100644
--- a/source/gameengine/GameLogic/SCA_PythonController.h
+++ b/source/gameengine/GameLogic/SCA_PythonController.h
@@ -78,8 +78,8 @@ class SCA_PythonController : public SCA_IController
static PyObject* sPyAddActiveActuator(PyObject* self,
PyObject* args);
static SCA_IActuator* LinkedActuatorFromPy(PyObject *value);
- virtual PyObject* _getattr(const char *attr);
- virtual int _setattr(const char *attr, PyObject *value);
+ virtual PyObject* py_getattro(PyObject *attr);
+ virtual int py_setattro(PyObject *attr, PyObject *value);
KX_PYMETHOD_O(SCA_PythonController,Activate);
@@ -92,6 +92,10 @@ class SCA_PythonController : public SCA_IController
KX_PYMETHOD_NOARGS(SCA_PythonController,GetScript);
KX_PYMETHOD_NOARGS(SCA_PythonController,GetState);
+ static PyObject* pyattr_get_state(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_script(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static int pyattr_set_script(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+
};
diff --git a/source/gameengine/GameLogic/SCA_RandomActuator.cpp b/source/gameengine/GameLogic/SCA_RandomActuator.cpp
index d6c73f21f37..3a72d9b7652 100644
--- a/source/gameengine/GameLogic/SCA_RandomActuator.cpp
+++ b/source/gameengine/GameLogic/SCA_RandomActuator.cpp
@@ -312,22 +312,22 @@ void SCA_RandomActuator::enforceConstraints() {
/* Integration hooks ------------------------------------------------------- */
PyTypeObject SCA_RandomActuator::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"SCA_RandomActuator",
- sizeof(SCA_RandomActuator),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0, //&MyPyCompare,
- __repr,
- 0, //&cvalue_as_number,
0,
0,
0,
- 0
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
PyParentObject SCA_RandomActuator::Parents[] = {
@@ -341,23 +341,25 @@ PyParentObject SCA_RandomActuator::Parents[] = {
PyMethodDef SCA_RandomActuator::Methods[] = {
//Deprecated functions ------>
{"setSeed", (PyCFunction) SCA_RandomActuator::sPySetSeed, METH_VARARGS, (PY_METHODCHAR)SetSeed_doc},
- {"getSeed", (PyCFunction) SCA_RandomActuator::sPyGetSeed, METH_VARARGS, (PY_METHODCHAR)GetSeed_doc},
- {"getPara1", (PyCFunction) SCA_RandomActuator::sPyGetPara1, METH_VARARGS, (PY_METHODCHAR)GetPara1_doc},
- {"getPara2", (PyCFunction) SCA_RandomActuator::sPyGetPara2, METH_VARARGS, (PY_METHODCHAR)GetPara2_doc},
- {"getDistribution", (PyCFunction) SCA_RandomActuator::sPyGetDistribution, METH_VARARGS, (PY_METHODCHAR)GetDistribution_doc},
+ {"getSeed", (PyCFunction) SCA_RandomActuator::sPyGetSeed, METH_NOARGS, (PY_METHODCHAR)GetSeed_doc},
+ {"getPara1", (PyCFunction) SCA_RandomActuator::sPyGetPara1, METH_NOARGS, (PY_METHODCHAR)GetPara1_doc},
+ {"getPara2", (PyCFunction) SCA_RandomActuator::sPyGetPara2, METH_NOARGS, (PY_METHODCHAR)GetPara2_doc},
+ {"getDistribution", (PyCFunction) SCA_RandomActuator::sPyGetDistribution, METH_NOARGS, (PY_METHODCHAR)GetDistribution_doc},
{"setProperty", (PyCFunction) SCA_RandomActuator::sPySetProperty, METH_VARARGS, (PY_METHODCHAR)SetProperty_doc},
- {"getProperty", (PyCFunction) SCA_RandomActuator::sPyGetProperty, METH_VARARGS, (PY_METHODCHAR)GetProperty_doc},
+ {"getProperty", (PyCFunction) SCA_RandomActuator::sPyGetProperty, METH_NOARGS, (PY_METHODCHAR)GetProperty_doc},
//<----- Deprecated
- {"setBoolConst", (PyCFunction) SCA_RandomActuator::sPySetBoolConst, METH_VARARGS, (PY_METHODCHAR)SetBoolConst_doc},
- {"setBoolUniform", (PyCFunction) SCA_RandomActuator::sPySetBoolUniform, METH_VARARGS, (PY_METHODCHAR)SetBoolUniform_doc},
- {"setBoolBernouilli",(PyCFunction) SCA_RandomActuator::sPySetBoolBernouilli, METH_VARARGS, (PY_METHODCHAR)SetBoolBernouilli_doc},
- {"setIntConst", (PyCFunction) SCA_RandomActuator::sPySetIntConst, METH_VARARGS, (PY_METHODCHAR)SetIntConst_doc},
- {"setIntUniform", (PyCFunction) SCA_RandomActuator::sPySetIntUniform, METH_VARARGS, (PY_METHODCHAR)SetIntUniform_doc},
- {"setIntPoisson", (PyCFunction) SCA_RandomActuator::sPySetIntPoisson, METH_VARARGS, (PY_METHODCHAR)SetIntPoisson_doc},
- {"setFloatConst", (PyCFunction) SCA_RandomActuator::sPySetFloatConst, METH_VARARGS, (PY_METHODCHAR)SetFloatConst_doc},
- {"setFloatUniform", (PyCFunction) SCA_RandomActuator::sPySetFloatUniform, METH_VARARGS, (PY_METHODCHAR)SetFloatUniform_doc},
- {"setFloatNormal", (PyCFunction) SCA_RandomActuator::sPySetFloatNormal, METH_VARARGS, (PY_METHODCHAR)SetFloatNormal_doc},
- {"setFloatNegativeExponential", (PyCFunction) SCA_RandomActuator::sPySetFloatNegativeExponential, METH_VARARGS, (PY_METHODCHAR)SetFloatNegativeExponential_doc},
+ KX_PYMETHODTABLE(SCA_RandomActuator, setBoolConst),
+ KX_PYMETHODTABLE_NOARGS(SCA_RandomActuator, setBoolUniform),
+ KX_PYMETHODTABLE(SCA_RandomActuator, setBoolBernouilli),
+
+ KX_PYMETHODTABLE(SCA_RandomActuator, setIntConst),
+ KX_PYMETHODTABLE(SCA_RandomActuator, setIntUniform),
+ KX_PYMETHODTABLE(SCA_RandomActuator, setIntPoisson),
+
+ KX_PYMETHODTABLE(SCA_RandomActuator, setFloatConst),
+ KX_PYMETHODTABLE(SCA_RandomActuator, setFloatUniform),
+ KX_PYMETHODTABLE(SCA_RandomActuator, setFloatNormal),
+ KX_PYMETHODTABLE(SCA_RandomActuator, setFloatNegativeExponential),
{NULL,NULL} //Sentinel
};
@@ -366,35 +368,36 @@ PyAttributeDef SCA_RandomActuator::Attributes[] = {
KX_PYATTRIBUTE_FLOAT_RO("para2",SCA_RandomActuator,m_parameter2),
KX_PYATTRIBUTE_ENUM_RO("distribution",SCA_RandomActuator,m_distribution),
KX_PYATTRIBUTE_STRING_RW_CHECK("property",0,100,false,SCA_RandomActuator,m_propname,CheckProperty),
+ KX_PYATTRIBUTE_RW_FUNCTION("seed",SCA_RandomActuator,pyattr_get_seed,pyattr_set_seed),
{ NULL } //Sentinel
};
-PyObject* SCA_RandomActuator::_getattr(const char *attr) {
- PyObject* object = _getattr_self(Attributes, this, attr);
- if (object != NULL)
- return object;
- if (!strcmp(attr, "seed")) {
- return PyInt_FromLong(m_base->GetSeed());
- }
- _getattr_up(SCA_IActuator);
+PyObject* SCA_RandomActuator::pyattr_get_seed(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef)
+{
+ SCA_RandomActuator* act = static_cast<SCA_RandomActuator*>(self);
+ return PyInt_FromLong(act->m_base->GetSeed());
}
-int SCA_RandomActuator::_setattr(const char *attr, PyObject *value)
+int SCA_RandomActuator::pyattr_set_seed(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
{
- int ret = _setattr_self(Attributes, this, attr, value);
- if (ret >= 0)
- return ret;
- if (!strcmp(attr, "seed")) {
- if (PyInt_Check(value)) {
- int ival = PyInt_AsLong(value);
- m_base->SetSeed(ival);
- return 0;
- } else {
- PyErr_SetString(PyExc_TypeError, "expected an integer");
- return 1;
- }
+ SCA_RandomActuator* act = static_cast<SCA_RandomActuator*>(self);
+ if (PyInt_Check(value)) {
+ int ival = PyInt_AsLong(value);
+ act->m_base->SetSeed(ival);
+ return 0;
+ } else {
+ PyErr_SetString(PyExc_TypeError, "actuator.seed = int: Random Actuator, expected an integer");
+ return 1;
}
- return SCA_IActuator::_setattr(attr, value);
+}
+
+PyObject* SCA_RandomActuator::py_getattro(PyObject *attr) {
+ py_getattro_up(SCA_IActuator);
+}
+
+int SCA_RandomActuator::py_setattro(PyObject *attr, PyObject *value)
+{
+ py_setattro_up(SCA_IActuator);
}
/* 1. setSeed */
@@ -404,10 +407,10 @@ const char SCA_RandomActuator::SetSeed_doc[] =
"\tSet the initial seed of the generator. Equal seeds produce\n"
"\tequal series. If the seed is 0, the generator will produce\n"
"\tthe same value on every call.\n";
-PyObject* SCA_RandomActuator::PySetSeed(PyObject* self, PyObject* args, PyObject* kwds) {
+PyObject* SCA_RandomActuator::PySetSeed(PyObject* args) {
ShowDeprecationWarning("setSeed()", "the seed property");
long seedArg;
- if(!PyArg_ParseTuple(args, "i", &seedArg)) {
+ if(!PyArg_ParseTuple(args, "i:setSeed", &seedArg)) {
return NULL;
}
@@ -420,7 +423,8 @@ const char SCA_RandomActuator::GetSeed_doc[] =
"getSeed()\n"
"\tReturns the initial seed of the generator. Equal seeds produce\n"
"\tequal series.\n";
-PyObject* SCA_RandomActuator::PyGetSeed(PyObject* self, PyObject* args, PyObject* kwds) {
+PyObject* SCA_RandomActuator::PyGetSeed()
+{
ShowDeprecationWarning("getSeed()", "the seed property");
return PyInt_FromLong(m_base->GetSeed());
}
@@ -431,7 +435,8 @@ const char SCA_RandomActuator::GetPara1_doc[] =
"\tReturns the first parameter of the active distribution. Refer\n"
"\tto the documentation of the generator types for the meaning\n"
"\tof this value.";
-PyObject* SCA_RandomActuator::PyGetPara1(PyObject* self, PyObject* args, PyObject* kwds) {
+PyObject* SCA_RandomActuator::PyGetPara1()
+{
ShowDeprecationWarning("getPara1()", "the para1 property");
return PyFloat_FromDouble(m_parameter1);
}
@@ -442,7 +447,8 @@ const char SCA_RandomActuator::GetPara2_doc[] =
"\tReturns the first parameter of the active distribution. Refer\n"
"\tto the documentation of the generator types for the meaning\n"
"\tof this value.";
-PyObject* SCA_RandomActuator::PyGetPara2(PyObject* self, PyObject* args, PyObject* kwds) {
+PyObject* SCA_RandomActuator::PyGetPara2()
+{
ShowDeprecationWarning("getPara2()", "the para2 property");
return PyFloat_FromDouble(m_parameter2);
}
@@ -451,7 +457,8 @@ PyObject* SCA_RandomActuator::PyGetPara2(PyObject* self, PyObject* args, PyObjec
const char SCA_RandomActuator::GetDistribution_doc[] =
"getDistribution()\n"
"\tReturns the type of the active distribution.\n";
-PyObject* SCA_RandomActuator::PyGetDistribution(PyObject* self, PyObject* args, PyObject* kwds) {
+PyObject* SCA_RandomActuator::PyGetDistribution()
+{
ShowDeprecationWarning("getDistribution()", "the distribution property");
return PyInt_FromLong(m_distribution);
}
@@ -462,10 +469,10 @@ const char SCA_RandomActuator::SetProperty_doc[] =
"\t- name: string\n"
"\tSet the property to which the random value is assigned. If the \n"
"\tgenerator and property types do not match, the assignment is ignored.\n";
-PyObject* SCA_RandomActuator::PySetProperty(PyObject* self, PyObject* args, PyObject* kwds) {
+PyObject* SCA_RandomActuator::PySetProperty(PyObject* args) {
ShowDeprecationWarning("setProperty()", "the 'property' property");
char *nameArg;
- if (!PyArg_ParseTuple(args, "s", &nameArg)) {
+ if (!PyArg_ParseTuple(args, "s:setProperty", &nameArg)) {
return NULL;
}
@@ -485,21 +492,20 @@ const char SCA_RandomActuator::GetProperty_doc[] =
"getProperty(name)\n"
"\tReturn the property to which the random value is assigned. If the \n"
"\tgenerator and property types do not match, the assignment is ignored.\n";
-PyObject* SCA_RandomActuator::PyGetProperty(PyObject* self, PyObject* args, PyObject* kwds) {
+PyObject* SCA_RandomActuator::PyGetProperty()
+{
ShowDeprecationWarning("getProperty()", "the 'property' property");
return PyString_FromString(m_propname);
}
/* 11. setBoolConst */
-const char SCA_RandomActuator::SetBoolConst_doc[] =
+KX_PYMETHODDEF_DOC_VARARGS(SCA_RandomActuator, setBoolConst,
"setBoolConst(value)\n"
"\t- value: 0 or 1\n"
-"\tSet this generator to produce a constant boolean value.\n";
-PyObject* SCA_RandomActuator::PySetBoolConst(PyObject* self,
- PyObject* args,
- PyObject* kwds) {
+"\tSet this generator to produce a constant boolean value.\n")
+{
int paraArg;
- if(!PyArg_ParseTuple(args, "i", &paraArg)) {
+ if(!PyArg_ParseTuple(args, "i:setBoolConst", &paraArg)) {
return NULL;
}
@@ -509,27 +515,23 @@ PyObject* SCA_RandomActuator::PySetBoolConst(PyObject* self,
Py_RETURN_NONE;
}
/* 12. setBoolUniform, */
-const char SCA_RandomActuator::SetBoolUniform_doc[] =
+KX_PYMETHODDEF_DOC_NOARGS(SCA_RandomActuator, setBoolUniform,
"setBoolUniform()\n"
-"\tSet this generator to produce true and false, each with 50%% chance of occuring\n";
-PyObject* SCA_RandomActuator::PySetBoolUniform(PyObject* self,
- PyObject* args,
- PyObject* kwds) {
+"\tSet this generator to produce true and false, each with 50%% chance of occuring\n")
+{
/* no args */
m_distribution = KX_RANDOMACT_BOOL_UNIFORM;
enforceConstraints();
Py_RETURN_NONE;
}
/* 13. setBoolBernouilli, */
-const char SCA_RandomActuator::SetBoolBernouilli_doc[] =
+KX_PYMETHODDEF_DOC_VARARGS(SCA_RandomActuator, setBoolBernouilli,
"setBoolBernouilli(value)\n"
"\t- value: a float between 0 and 1\n"
-"\tReturn false value * 100%% of the time.\n";
-PyObject* SCA_RandomActuator::PySetBoolBernouilli(PyObject* self,
- PyObject* args,
- PyObject* kwds) {
+"\tReturn false value * 100%% of the time.\n")
+{
float paraArg;
- if(!PyArg_ParseTuple(args, "f", &paraArg)) {
+ if(!PyArg_ParseTuple(args, "f:setBoolBernouilli", &paraArg)) {
return NULL;
}
@@ -539,15 +541,13 @@ PyObject* SCA_RandomActuator::PySetBoolBernouilli(PyObject* self,
Py_RETURN_NONE;
}
/* 14. setIntConst,*/
-const char SCA_RandomActuator::SetIntConst_doc[] =
+KX_PYMETHODDEF_DOC_VARARGS(SCA_RandomActuator, setIntConst,
"setIntConst(value)\n"
"\t- value: integer\n"
-"\tAlways return value\n";
-PyObject* SCA_RandomActuator::PySetIntConst(PyObject* self,
- PyObject* args,
- PyObject* kwds) {
+"\tAlways return value\n")
+{
int paraArg;
- if(!PyArg_ParseTuple(args, "i", &paraArg)) {
+ if(!PyArg_ParseTuple(args, "i:setIntConst", &paraArg)) {
return NULL;
}
@@ -557,17 +557,15 @@ PyObject* SCA_RandomActuator::PySetIntConst(PyObject* self,
Py_RETURN_NONE;
}
/* 15. setIntUniform,*/
-const char SCA_RandomActuator::SetIntUniform_doc[] =
+KX_PYMETHODDEF_DOC_VARARGS(SCA_RandomActuator, setIntUniform,
"setIntUniform(lower_bound, upper_bound)\n"
"\t- lower_bound: integer\n"
"\t- upper_bound: integer\n"
"\tReturn a random integer between lower_bound and\n"
-"\tupper_bound. The boundaries are included.\n";
-PyObject* SCA_RandomActuator::PySetIntUniform(PyObject* self,
- PyObject* args,
- PyObject* kwds) {
+"\tupper_bound. The boundaries are included.\n")
+{
int paraArg1, paraArg2;
- if(!PyArg_ParseTuple(args, "ii", &paraArg1, &paraArg2)) {
+ if(!PyArg_ParseTuple(args, "ii:setIntUniform", &paraArg1, &paraArg2)) {
return NULL;
}
@@ -578,17 +576,15 @@ PyObject* SCA_RandomActuator::PySetIntUniform(PyObject* self,
Py_RETURN_NONE;
}
/* 16. setIntPoisson, */
-const char SCA_RandomActuator::SetIntPoisson_doc[] =
+KX_PYMETHODDEF_DOC_VARARGS(SCA_RandomActuator, setIntPoisson,
"setIntPoisson(value)\n"
"\t- value: float\n"
"\tReturn a Poisson-distributed number. This performs a series\n"
"\tof Bernouilli tests with parameter value. It returns the\n"
-"\tnumber of tries needed to achieve succes.\n";
-PyObject* SCA_RandomActuator::PySetIntPoisson(PyObject* self,
- PyObject* args,
- PyObject* kwds) {
+"\tnumber of tries needed to achieve succes.\n")
+{
float paraArg;
- if(!PyArg_ParseTuple(args, "f", &paraArg)) {
+ if(!PyArg_ParseTuple(args, "f:setIntPoisson", &paraArg)) {
return NULL;
}
@@ -597,16 +593,14 @@ PyObject* SCA_RandomActuator::PySetIntPoisson(PyObject* self,
enforceConstraints();
Py_RETURN_NONE;
}
-/* 17. setFloatConst,*/
-const char SCA_RandomActuator::SetFloatConst_doc[] =
+/* 17. setFloatConst */
+KX_PYMETHODDEF_DOC_VARARGS(SCA_RandomActuator, setFloatConst,
"setFloatConst(value)\n"
"\t- value: float\n"
-"\tAlways return value\n";
-PyObject* SCA_RandomActuator::PySetFloatConst(PyObject* self,
- PyObject* args,
- PyObject* kwds) {
+"\tAlways return value\n")
+{
float paraArg;
- if(!PyArg_ParseTuple(args, "f", &paraArg)) {
+ if(!PyArg_ParseTuple(args, "f:setFloatConst", &paraArg)) {
return NULL;
}
@@ -616,17 +610,15 @@ PyObject* SCA_RandomActuator::PySetFloatConst(PyObject* self,
Py_RETURN_NONE;
}
/* 18. setFloatUniform, */
-const char SCA_RandomActuator::SetFloatUniform_doc[] =
+KX_PYMETHODDEF_DOC_VARARGS(SCA_RandomActuator, setFloatUniform,
"setFloatUniform(lower_bound, upper_bound)\n"
"\t- lower_bound: float\n"
"\t- upper_bound: float\n"
"\tReturn a random integer between lower_bound and\n"
-"\tupper_bound.\n";
-PyObject* SCA_RandomActuator::PySetFloatUniform(PyObject* self,
- PyObject* args,
- PyObject* kwds) {
+"\tupper_bound.\n")
+{
float paraArg1, paraArg2;
- if(!PyArg_ParseTuple(args, "ff", &paraArg1, &paraArg2)) {
+ if(!PyArg_ParseTuple(args, "ff:setFloatUniform", &paraArg1, &paraArg2)) {
return NULL;
}
@@ -637,17 +629,15 @@ PyObject* SCA_RandomActuator::PySetFloatUniform(PyObject* self,
Py_RETURN_NONE;
}
/* 19. setFloatNormal, */
-const char SCA_RandomActuator::SetFloatNormal_doc[] =
+KX_PYMETHODDEF_DOC_VARARGS(SCA_RandomActuator, setFloatNormal,
"setFloatNormal(mean, standard_deviation)\n"
"\t- mean: float\n"
"\t- standard_deviation: float\n"
"\tReturn normal-distributed numbers. The average is mean, and the\n"
-"\tdeviation from the mean is characterized by standard_deviation.\n";
-PyObject* SCA_RandomActuator::PySetFloatNormal(PyObject* self,
- PyObject* args,
- PyObject* kwds) {
+"\tdeviation from the mean is characterized by standard_deviation.\n")
+{
float paraArg1, paraArg2;
- if(!PyArg_ParseTuple(args, "ff", &paraArg1, &paraArg2)) {
+ if(!PyArg_ParseTuple(args, "ff:setFloatNormal", &paraArg1, &paraArg2)) {
return NULL;
}
@@ -658,16 +648,14 @@ PyObject* SCA_RandomActuator::PySetFloatNormal(PyObject* self,
Py_RETURN_NONE;
}
/* 20. setFloatNegativeExponential, */
-const char SCA_RandomActuator::SetFloatNegativeExponential_doc[] =
+KX_PYMETHODDEF_DOC_VARARGS(SCA_RandomActuator, setFloatNegativeExponential,
"setFloatNegativeExponential(half_life)\n"
"\t- half_life: float\n"
"\tReturn negative-exponentially distributed numbers. The half-life 'time'\n"
-"\tis characterized by half_life.\n";
-PyObject* SCA_RandomActuator::PySetFloatNegativeExponential(PyObject* self,
- PyObject* args,
- PyObject* kwds) {
+"\tis characterized by half_life.\n")
+{
float paraArg;
- if(!PyArg_ParseTuple(args, "f", &paraArg)) {
+ if(!PyArg_ParseTuple(args, "f:setFloatNegativeExponential", &paraArg)) {
return NULL;
}
diff --git a/source/gameengine/GameLogic/SCA_RandomActuator.h b/source/gameengine/GameLogic/SCA_RandomActuator.h
index 0d404fa8a9f..8f58ed0dcec 100644
--- a/source/gameengine/GameLogic/SCA_RandomActuator.h
+++ b/source/gameengine/GameLogic/SCA_RandomActuator.h
@@ -96,46 +96,32 @@ class SCA_RandomActuator : public SCA_IActuator
/* Python interface ---------------------------------------------------- */
/* --------------------------------------------------------------------- */
- virtual PyObject* _getattr(const char *attr);
- virtual int _setattr(const char *attr, PyObject *value);
+ virtual PyObject* py_getattro(PyObject *attr);
+ virtual int py_setattro(PyObject *attr, PyObject *value);
- /* 1. setSeed */
- KX_PYMETHOD_DOC(SCA_RandomActuator,SetSeed);
- /* 2. getSeed */
- KX_PYMETHOD_DOC(SCA_RandomActuator,GetSeed);
- /* 3. setPara1 -removed- */
- /* 4. getPara1 */
- KX_PYMETHOD_DOC(SCA_RandomActuator,GetPara1);
- /* 5. setPara2 -removed- */
- /* 6. getPara2 */
- KX_PYMETHOD_DOC(SCA_RandomActuator,GetPara2);
- /* 7. setDistribution -removed- */
- /* 8. getDistribution */
- KX_PYMETHOD_DOC(SCA_RandomActuator,GetDistribution);
- /* 9. setProperty */
- KX_PYMETHOD_DOC(SCA_RandomActuator,SetProperty);
- /* 10. getProperty */
- KX_PYMETHOD_DOC(SCA_RandomActuator,GetProperty);
- /* 11. setBoolConst */
- KX_PYMETHOD_DOC(SCA_RandomActuator,SetBoolConst);
- /* 12. setBoolUniform, */
- KX_PYMETHOD_DOC(SCA_RandomActuator,SetBoolUniform);
- /* 13. setBoolBernouilli, */
- KX_PYMETHOD_DOC(SCA_RandomActuator,SetBoolBernouilli);
- /* 14. setIntConst,*/
- KX_PYMETHOD_DOC(SCA_RandomActuator,SetIntConst);
- /* 15. setIntUniform,*/
- KX_PYMETHOD_DOC(SCA_RandomActuator,SetIntUniform);
- /* 16. setIntPoisson, */
- KX_PYMETHOD_DOC(SCA_RandomActuator,SetIntPoisson);
- /* 17. setFloatConst,*/
- KX_PYMETHOD_DOC(SCA_RandomActuator,SetFloatConst);
- /* 18. setFloatUniform, */
- KX_PYMETHOD_DOC(SCA_RandomActuator,SetFloatUniform);
- /* 19. setFloatNormal, */
- KX_PYMETHOD_DOC(SCA_RandomActuator,SetFloatNormal);
- /* 20. setFloatNegativeExponential, */
- KX_PYMETHOD_DOC(SCA_RandomActuator,SetFloatNegativeExponential);
+ static PyObject* pyattr_get_seed(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
+ static int pyattr_set_seed(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+
+ // Deprecated methods ----->
+ KX_PYMETHOD_DOC_VARARGS(SCA_RandomActuator,SetSeed);
+ KX_PYMETHOD_DOC_NOARGS(SCA_RandomActuator,GetSeed);
+ KX_PYMETHOD_DOC_NOARGS(SCA_RandomActuator,GetPara1);
+ KX_PYMETHOD_DOC_NOARGS(SCA_RandomActuator,GetPara2);
+ KX_PYMETHOD_DOC_NOARGS(SCA_RandomActuator,GetDistribution);
+ KX_PYMETHOD_DOC_VARARGS(SCA_RandomActuator,SetProperty);
+ KX_PYMETHOD_DOC_NOARGS(SCA_RandomActuator,GetProperty);
+ // <-----
+
+ KX_PYMETHOD_DOC_VARARGS(SCA_RandomActuator, setBoolConst);
+ KX_PYMETHOD_DOC_NOARGS(SCA_RandomActuator, setBoolUniform);
+ KX_PYMETHOD_DOC_VARARGS(SCA_RandomActuator, setBoolBernouilli);
+ KX_PYMETHOD_DOC_VARARGS(SCA_RandomActuator, setIntConst);
+ KX_PYMETHOD_DOC_VARARGS(SCA_RandomActuator, setIntUniform);
+ KX_PYMETHOD_DOC_VARARGS(SCA_RandomActuator, setIntPoisson);
+ KX_PYMETHOD_DOC_VARARGS(SCA_RandomActuator, setFloatConst);
+ KX_PYMETHOD_DOC_VARARGS(SCA_RandomActuator, setFloatUniform);
+ KX_PYMETHOD_DOC_VARARGS(SCA_RandomActuator, setFloatNormal);
+ KX_PYMETHOD_DOC_VARARGS(SCA_RandomActuator, setFloatNegativeExponential);
}; /* end of class KX_EditObjectActuator : public SCA_PropertyActuator */
#endif
diff --git a/source/gameengine/GameLogic/SCA_RandomSensor.cpp b/source/gameengine/GameLogic/SCA_RandomSensor.cpp
index 5354c120f52..5ead82db428 100644
--- a/source/gameengine/GameLogic/SCA_RandomSensor.cpp
+++ b/source/gameengine/GameLogic/SCA_RandomSensor.cpp
@@ -127,22 +127,22 @@ bool SCA_RandomSensor::Evaluate(CValue* event)
/* Integration hooks ------------------------------------------------------- */
PyTypeObject SCA_RandomSensor::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"SCA_RandomSensor",
- sizeof(SCA_RandomSensor),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0, //&MyPyCompare,
- __repr,
- 0, //&cvalue_as_number,
0,
0,
0,
- 0
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
PyParentObject SCA_RandomSensor::Parents[] = {
@@ -155,42 +155,24 @@ PyParentObject SCA_RandomSensor::Parents[] = {
PyMethodDef SCA_RandomSensor::Methods[] = {
{"setSeed", (PyCFunction) SCA_RandomSensor::sPySetSeed, METH_VARARGS, (PY_METHODCHAR)SetSeed_doc},
- {"getSeed", (PyCFunction) SCA_RandomSensor::sPyGetSeed, METH_VARARGS, (PY_METHODCHAR)GetSeed_doc},
- {"getLastDraw", (PyCFunction) SCA_RandomSensor::sPyGetLastDraw, METH_VARARGS, (PY_METHODCHAR)GetLastDraw_doc},
+ {"getSeed", (PyCFunction) SCA_RandomSensor::sPyGetSeed, METH_NOARGS, (PY_METHODCHAR)GetSeed_doc},
+ {"getLastDraw", (PyCFunction) SCA_RandomSensor::sPyGetLastDraw, METH_NOARGS, (PY_METHODCHAR)GetLastDraw_doc},
{NULL,NULL} //Sentinel
};
PyAttributeDef SCA_RandomSensor::Attributes[] = {
KX_PYATTRIBUTE_BOOL_RO("lastDraw",SCA_RandomSensor,m_lastdraw),
+ KX_PYATTRIBUTE_RW_FUNCTION("seed", SCA_RandomSensor, pyattr_get_seed, pyattr_set_seed),
{NULL} //Sentinel
};
-PyObject* SCA_RandomSensor::_getattr(const char *attr) {
- PyObject* object = _getattr_self(Attributes, this, attr);
- if (object != NULL)
- return object;
- if (!strcmp(attr,"seed")) {
- return PyInt_FromLong(m_basegenerator->GetSeed());
- }
- _getattr_up(SCA_ISensor);
+PyObject* SCA_RandomSensor::py_getattro(PyObject *attr) {
+ py_getattro_up(SCA_ISensor);
}
-int SCA_RandomSensor::_setattr(const char *attr, PyObject *value)
+int SCA_RandomSensor::py_setattro(PyObject *attr, PyObject *value)
{
- int ret = _setattr_self(Attributes, this, attr, value);
- if (ret >= 0)
- return ret;
- if (!strcmp(attr,"seed")) {
- if (PyInt_Check(value)) {
- int ival = PyInt_AsLong(value);
- m_basegenerator->SetSeed(ival);
- return 0;
- } else {
- PyErr_SetString(PyExc_TypeError, "expected an integer");
- return 1;
- }
- }
- return SCA_ISensor::_setattr(attr, value);
+ py_setattro_up(SCA_ISensor);
}
/* 1. setSeed */
@@ -200,10 +182,10 @@ const char SCA_RandomSensor::SetSeed_doc[] =
"\tSet the initial seed of the generator. Equal seeds produce\n"
"\tequal series. If the seed is 0, the generator will produce\n"
"\tthe same value on every call.\n";
-PyObject* SCA_RandomSensor::PySetSeed(PyObject* self, PyObject* args, PyObject* kwds) {
+PyObject* SCA_RandomSensor::PySetSeed(PyObject* args) {
ShowDeprecationWarning("setSeed()", "the seed property");
long seedArg;
- if(!PyArg_ParseTuple(args, "i", &seedArg)) {
+ if(!PyArg_ParseTuple(args, "i:setSeed", &seedArg)) {
return NULL;
}
@@ -217,7 +199,7 @@ const char SCA_RandomSensor::GetSeed_doc[] =
"getSeed()\n"
"\tReturns the initial seed of the generator. Equal seeds produce\n"
"\tequal series.\n";
-PyObject* SCA_RandomSensor::PyGetSeed(PyObject* self, PyObject* args, PyObject* kwds) {
+PyObject* SCA_RandomSensor::PyGetSeed() {
ShowDeprecationWarning("getSeed()", "the seed property");
return PyInt_FromLong(m_basegenerator->GetSeed());
}
@@ -226,9 +208,27 @@ PyObject* SCA_RandomSensor::PyGetSeed(PyObject* self, PyObject* args, PyObject*
const char SCA_RandomSensor::GetLastDraw_doc[] =
"getLastDraw()\n"
"\tReturn the last value that was drawn.\n";
-PyObject* SCA_RandomSensor::PyGetLastDraw(PyObject* self, PyObject* args, PyObject* kwds) {
+PyObject* SCA_RandomSensor::PyGetLastDraw() {
ShowDeprecationWarning("getLastDraw()", "the lastDraw property");
return PyInt_FromLong(m_lastdraw);
}
+
+PyObject* SCA_RandomSensor::pyattr_get_seed(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ SCA_RandomSensor* self= static_cast<SCA_RandomSensor*>(self_v);
+ return PyInt_FromLong(self->m_basegenerator->GetSeed());
+}
+
+int SCA_RandomSensor::pyattr_set_seed(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ SCA_RandomSensor* self= static_cast<SCA_RandomSensor*>(self_v);
+ if (!PyInt_Check(value)) {
+ PyErr_SetString(PyExc_TypeError, "sensor.seed = int: Random Sensor, expected an integer");
+ return -1;
+ }
+ self->m_basegenerator->SetSeed(PyInt_AsLong(value));
+ return 0;
+}
+
/* eof */
diff --git a/source/gameengine/GameLogic/SCA_RandomSensor.h b/source/gameengine/GameLogic/SCA_RandomSensor.h
index d808db07536..764692600c3 100644
--- a/source/gameengine/GameLogic/SCA_RandomSensor.h
+++ b/source/gameengine/GameLogic/SCA_RandomSensor.h
@@ -60,15 +60,18 @@ public:
/* Python interface ---------------------------------------------------- */
/* --------------------------------------------------------------------- */
- virtual PyObject* _getattr(const char *attr);
- virtual int _setattr(const char *attr, PyObject *value);
+ virtual PyObject* py_getattro(PyObject *attr);
+ virtual int py_setattro(PyObject *attr, PyObject *value);
/* 1. setSeed */
- KX_PYMETHOD_DOC(SCA_RandomSensor,SetSeed);
+ KX_PYMETHOD_DOC_VARARGS(SCA_RandomSensor,SetSeed);
/* 2. getSeed */
- KX_PYMETHOD_DOC(SCA_RandomSensor,GetSeed);
- /* 3. getSeed */
- KX_PYMETHOD_DOC(SCA_RandomSensor,GetLastDraw);
+ KX_PYMETHOD_DOC_NOARGS(SCA_RandomSensor,GetSeed);
+ /* 3. getLastDraw */
+ KX_PYMETHOD_DOC_NOARGS(SCA_RandomSensor,GetLastDraw);
+
+ static PyObject* pyattr_get_seed(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static int pyattr_set_seed(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
};
diff --git a/source/gameengine/GameLogic/SCA_XNORController.cpp b/source/gameengine/GameLogic/SCA_XNORController.cpp
index b2734dd1b33..e9bb37ee958 100644
--- a/source/gameengine/GameLogic/SCA_XNORController.cpp
+++ b/source/gameengine/GameLogic/SCA_XNORController.cpp
@@ -111,22 +111,22 @@ CValue* SCA_XNORController::GetReplica()
/* Integration hooks ------------------------------------------------------- */
PyTypeObject SCA_XNORController::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"SCA_XNORController",
- sizeof(SCA_XNORController),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0, //&MyPyCompare,
- __repr,
- 0, //&cvalue_as_number,
0,
0,
0,
- 0
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
PyParentObject SCA_XNORController::Parents[] = {
@@ -145,8 +145,8 @@ PyAttributeDef SCA_XNORController::Attributes[] = {
{ NULL } //Sentinel
};
-PyObject* SCA_XNORController::_getattr(const char *attr) {
- _getattr_up(SCA_IController);
+PyObject* SCA_XNORController::py_getattro(PyObject *attr) {
+ py_getattro_up(SCA_IController);
}
/* eof */
diff --git a/source/gameengine/GameLogic/SCA_XNORController.h b/source/gameengine/GameLogic/SCA_XNORController.h
index a431a72c177..c992d5f1834 100644
--- a/source/gameengine/GameLogic/SCA_XNORController.h
+++ b/source/gameengine/GameLogic/SCA_XNORController.h
@@ -48,7 +48,7 @@ public:
/* Python interface ---------------------------------------------------- */
/* --------------------------------------------------------------------- */
- virtual PyObject* _getattr(const char *attr);
+ virtual PyObject* py_getattro(PyObject *attr);
};
diff --git a/source/gameengine/GameLogic/SCA_XORController.cpp b/source/gameengine/GameLogic/SCA_XORController.cpp
index 662ef523d56..791a139975f 100644
--- a/source/gameengine/GameLogic/SCA_XORController.cpp
+++ b/source/gameengine/GameLogic/SCA_XORController.cpp
@@ -111,22 +111,22 @@ CValue* SCA_XORController::GetReplica()
/* Integration hooks ------------------------------------------------------- */
PyTypeObject SCA_XORController::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"SCA_XORController",
- sizeof(SCA_XORController),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0, //&MyPyCompare,
- __repr,
- 0, //&cvalue_as_number,
0,
0,
0,
- 0
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
PyParentObject SCA_XORController::Parents[] = {
@@ -145,8 +145,8 @@ PyAttributeDef SCA_XORController::Attributes[] = {
{ NULL } //Sentinel
};
-PyObject* SCA_XORController::_getattr(const char *attr) {
- _getattr_up(SCA_IController);
+PyObject* SCA_XORController::py_getattro(PyObject *attr) {
+ py_getattro_up(SCA_IController);
}
/* eof */
diff --git a/source/gameengine/GameLogic/SCA_XORController.h b/source/gameengine/GameLogic/SCA_XORController.h
index 2fbc7866ecf..065b31fd901 100644
--- a/source/gameengine/GameLogic/SCA_XORController.h
+++ b/source/gameengine/GameLogic/SCA_XORController.h
@@ -48,7 +48,7 @@ public:
/* Python interface ---------------------------------------------------- */
/* --------------------------------------------------------------------- */
- virtual PyObject* _getattr(const char *attr);
+ virtual PyObject* py_getattro(PyObject *attr);
};
diff --git a/source/gameengine/GamePlayer/common/CMakeLists.txt b/source/gameengine/GamePlayer/common/CMakeLists.txt
index 0c6c4179e2d..ce1cd217f60 100644
--- a/source/gameengine/GamePlayer/common/CMakeLists.txt
+++ b/source/gameengine/GamePlayer/common/CMakeLists.txt
@@ -42,7 +42,6 @@ SET(INC
../../../../intern/string
../../../../intern/ghost
../../../../intern/guardedalloc
- ../../../../intern/bmfont
../../../../intern/moto/include
../../../../intern/SoundSystem
../../../../source/gameengine/Rasterizer/RAS_OpenGLRasterizer
diff --git a/source/gameengine/GamePlayer/common/GPC_KeyboardDevice.cpp b/source/gameengine/GamePlayer/common/GPC_KeyboardDevice.cpp
index 474df9276a7..472ff580392 100644
--- a/source/gameengine/GamePlayer/common/GPC_KeyboardDevice.cpp
+++ b/source/gameengine/GamePlayer/common/GPC_KeyboardDevice.cpp
@@ -42,7 +42,7 @@ void GPC_KeyboardDevice::NextFrame()
// Now convert justpressed key events into regular (active) keyevents
int previousTable = 1-m_currentTable;
- for (int keyevent= KX_BEGINKEY; keyevent< KX_ENDKEY;keyevent++)
+ for (int keyevent= KX_BEGINKEY; keyevent<= KX_ENDKEY;keyevent++)
{
SCA_InputEvent& oldevent = m_eventStatusTables[previousTable][keyevent];
if (oldevent.m_status == SCA_InputEvent::KX_JUSTACTIVATED ||
@@ -69,7 +69,7 @@ bool GPC_KeyboardDevice::ConvertEvent(int incode, int val)
KX_EnumInputs kxevent = this->ToNative(incode);
// only process it, if it's a key
- if (kxevent >= KX_BEGINKEY && kxevent < KX_ENDKEY)
+ if (kxevent >= KX_BEGINKEY && kxevent <= KX_ENDKEY)
{
int previousTable = 1-m_currentTable;
@@ -114,9 +114,7 @@ bool GPC_KeyboardDevice::ConvertEvent(int incode, int val)
}
}
}
- } else if(kxevent==KX_ENDKEY) {
- exit(1);
- }
+ }
return result;
}
diff --git a/source/gameengine/GamePlayer/common/GPC_RenderTools.cpp b/source/gameengine/GamePlayer/common/GPC_RenderTools.cpp
index c0d6248a3ca..de30bbfcf3a 100644
--- a/source/gameengine/GamePlayer/common/GPC_RenderTools.cpp
+++ b/source/gameengine/GamePlayer/common/GPC_RenderTools.cpp
@@ -29,6 +29,8 @@
#include "GL/glew.h"
+#include "DNA_scene_types.h"
+
#include "RAS_IRenderTools.h"
#include "RAS_IRasterizer.h"
#include "RAS_LightObject.h"
@@ -52,11 +54,12 @@
#include "GPC_RenderTools.h"
+
unsigned int GPC_RenderTools::m_numgllights;
GPC_RenderTools::GPC_RenderTools()
{
- m_font = BMF_GetFont(BMF_kHelvetica10);
+// XXX m_font = BMF_GetFont(BMF_kHelvetica10);
glGetIntegerv(GL_MAX_LIGHTS, (GLint*) &m_numgllights);
if (m_numgllights < 8)
@@ -72,6 +75,7 @@ void GPC_RenderTools::BeginFrame(RAS_IRasterizer* rasty)
m_clientobject = NULL;
m_lastlightlayer = -1;
m_lastlighting = false;
+ m_lastauxinfo = NULL;
DisableOpenGLLights();
}
@@ -85,25 +89,27 @@ void GPC_RenderTools::EndFrame(RAS_IRasterizer* rasty)
* has a maximum of 8 lights (simultaneous), so 20 * 8 lights are possible in
* a scene. */
-void GPC_RenderTools::ProcessLighting(RAS_IRasterizer *rasty, int layer, const MT_Transform& viewmat)
+void GPC_RenderTools::ProcessLighting(RAS_IRasterizer *rasty, bool uselights, const MT_Transform& viewmat)
{
- if(m_lastlightlayer == layer)
- return;
+ bool enable = false;
+ int layer= -1;
- m_lastlightlayer = layer;
+ /* find the layer */
+ if(uselights) {
+ if(m_clientobject)
+ layer = static_cast<KX_GameObject*>(m_clientobject)->GetLayer();
+ }
- bool enable = false;
+ /* avoid state switching */
+ if(m_lastlightlayer == layer && m_lastauxinfo == m_auxilaryClientInfo)
+ return;
- if (layer >= 0)
- {
- if (m_clientobject)
- {
- if (layer == RAS_LIGHT_OBJECT_LAYER)
- layer = static_cast<KX_GameObject*>(m_clientobject)->GetLayer();
+ m_lastlightlayer = layer;
+ m_lastauxinfo = m_auxilaryClientInfo;
- enable = applyLights(layer, viewmat);
- }
- }
+ /* enable/disable lights as needed */
+ if(layer >= 0)
+ enable = applyLights(layer, viewmat);
if(enable)
EnableOpenGLLights(rasty);
@@ -306,28 +312,19 @@ void GPC_RenderTools::RenderText2D(RAS_TEXT_RENDER_MODE mode,
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
-
- // Actual drawing
- unsigned char colors[2][3] = {
- {0x00, 0x00, 0x00},
- {0xFF, 0xFF, 0xFF}
- };
- int numTimes = mode == RAS_TEXT_PADDED ? 2 : 1;
- for (int i = 0; i < numTimes; i++) {
- glColor3ub(colors[i][0], colors[i][1], colors[i][2]);
- glRasterPos2i(xco, yco);
- for (p = s, lines = 0; *p; p++) {
- if (*p == '\n')
- {
- lines++;
- glRasterPos2i(xco, yco-(lines*18));
- }
- BMF_DrawCharacter(m_font, *p);
- }
- xco += 1;
- yco += 1;
+
+ // Actual drawing (draw black first if padded)
+ if (mode == RAS_IRenderTools::RAS_TEXT_PADDED)
+ {
+ glColor3ub(0, 0, 0);
+ glRasterPos2s(xco+1, height-yco-1);
+ // XXX BMF_DrawString(m_font, s);
}
+ glColor3ub(255, 255, 255);
+ glRasterPos2s(xco, height-yco);
+ // XXX BMF_DrawString(m_font, s);
+
// Restore view settings
glMatrixMode(GL_PROJECTION);
glPopMatrix();
@@ -392,11 +389,16 @@ void GPC_RenderTools::PopMatrix()
int GPC_RenderTools::applyLights(int objectlayer, const MT_Transform& viewmat)
{
// taken from blender source, incompatibility between Blender Object / GameObject
+ KX_Scene* kxscene = (KX_Scene*)m_auxilaryClientInfo;
+ int scenelayer = ~0;
float glviewmat[16];
unsigned int count;
float vec[4];
vec[3]= 1.0;
+
+ if(kxscene && kxscene->GetBlenderScene())
+ scenelayer = kxscene->GetBlenderScene()->lay;
for(count=0; count<m_numgllights; count++)
glDisable((GLenum)(GL_LIGHT0+count));
@@ -411,71 +413,77 @@ int GPC_RenderTools::applyLights(int objectlayer, const MT_Transform& viewmat)
for (lit = m_lights.begin(), count = 0; !(lit==m_lights.end()) && count < m_numgllights; ++lit)
{
RAS_LightObject* lightdata = (*lit);
- if (lightdata->m_layer & objectlayer)
- {
- vec[0] = (*(lightdata->m_worldmatrix))(0,3);
- vec[1] = (*(lightdata->m_worldmatrix))(1,3);
- vec[2] = (*(lightdata->m_worldmatrix))(2,3);
- vec[3] = 1;
+ KX_Scene* lightscene = (KX_Scene*)lightdata->m_scene;
- if(lightdata->m_type==RAS_LightObject::LIGHT_SUN) {
-
- vec[0] = (*(lightdata->m_worldmatrix))(0,2);
- vec[1] = (*(lightdata->m_worldmatrix))(1,2);
- vec[2] = (*(lightdata->m_worldmatrix))(2,2);
- //vec[0]= base->object->obmat[2][0];
- //vec[1]= base->object->obmat[2][1];
- //vec[2]= base->object->obmat[2][2];
- vec[3]= 0.0;
- glLightfv((GLenum)(GL_LIGHT0+count), GL_POSITION, vec);
- }
- else {
- //vec[3]= 1.0;
- glLightfv((GLenum)(GL_LIGHT0+count), GL_POSITION, vec);
- glLightf((GLenum)(GL_LIGHT0+count), GL_CONSTANT_ATTENUATION, 1.0);
- glLightf((GLenum)(GL_LIGHT0+count), GL_LINEAR_ATTENUATION, lightdata->m_att1/lightdata->m_distance);
- // without this next line it looks backward compatible.
- //attennuation still is acceptable
- glLightf((GLenum)(GL_LIGHT0+count), GL_QUADRATIC_ATTENUATION, lightdata->m_att2/(lightdata->m_distance*lightdata->m_distance));
-
- if(lightdata->m_type==RAS_LightObject::LIGHT_SPOT) {
- vec[0] = -(*(lightdata->m_worldmatrix))(0,2);
- vec[1] = -(*(lightdata->m_worldmatrix))(1,2);
- vec[2] = -(*(lightdata->m_worldmatrix))(2,2);
- //vec[0]= -base->object->obmat[2][0];
- //vec[1]= -base->object->obmat[2][1];
- //vec[2]= -base->object->obmat[2][2];
- glLightfv((GLenum)(GL_LIGHT0+count), GL_SPOT_DIRECTION, vec);
- glLightf((GLenum)(GL_LIGHT0+count), GL_SPOT_CUTOFF, lightdata->m_spotsize/2.0);
- glLightf((GLenum)(GL_LIGHT0+count), GL_SPOT_EXPONENT, 128.0*lightdata->m_spotblend);
- }
- else glLightf((GLenum)(GL_LIGHT0+count), GL_SPOT_CUTOFF, 180.0);
- }
+ /* only use lights in the same layer as the object */
+ if(!(lightdata->m_layer & objectlayer))
+ continue;
+ /* only use lights in the same scene, and in a visible layer */
+ if(kxscene != lightscene || !(lightdata->m_layer & scenelayer))
+ continue;
+
+ vec[0] = (*(lightdata->m_worldmatrix))(0,3);
+ vec[1] = (*(lightdata->m_worldmatrix))(1,3);
+ vec[2] = (*(lightdata->m_worldmatrix))(2,3);
+ vec[3] = 1;
+
+ if(lightdata->m_type==RAS_LightObject::LIGHT_SUN) {
- if (lightdata->m_nodiffuse)
- {
- vec[0] = vec[1] = vec[2] = vec[3] = 0.0;
- } else {
- vec[0]= lightdata->m_energy*lightdata->m_red;
- vec[1]= lightdata->m_energy*lightdata->m_green;
- vec[2]= lightdata->m_energy*lightdata->m_blue;
- vec[3]= 1.0;
- }
- glLightfv((GLenum)(GL_LIGHT0+count), GL_DIFFUSE, vec);
- if (lightdata->m_nospecular)
- {
- vec[0] = vec[1] = vec[2] = vec[3] = 0.0;
- } else if (lightdata->m_nodiffuse) {
- vec[0]= lightdata->m_energy*lightdata->m_red;
- vec[1]= lightdata->m_energy*lightdata->m_green;
- vec[2]= lightdata->m_energy*lightdata->m_blue;
- vec[3]= 1.0;
+ vec[0] = (*(lightdata->m_worldmatrix))(0,2);
+ vec[1] = (*(lightdata->m_worldmatrix))(1,2);
+ vec[2] = (*(lightdata->m_worldmatrix))(2,2);
+ //vec[0]= base->object->obmat[2][0];
+ //vec[1]= base->object->obmat[2][1];
+ //vec[2]= base->object->obmat[2][2];
+ vec[3]= 0.0;
+ glLightfv((GLenum)(GL_LIGHT0+count), GL_POSITION, vec);
+ }
+ else {
+ //vec[3]= 1.0;
+ glLightfv((GLenum)(GL_LIGHT0+count), GL_POSITION, vec);
+ glLightf((GLenum)(GL_LIGHT0+count), GL_CONSTANT_ATTENUATION, 1.0);
+ glLightf((GLenum)(GL_LIGHT0+count), GL_LINEAR_ATTENUATION, lightdata->m_att1/lightdata->m_distance);
+ // without this next line it looks backward compatible.
+ //attennuation still is acceptable
+ glLightf((GLenum)(GL_LIGHT0+count), GL_QUADRATIC_ATTENUATION, lightdata->m_att2/(lightdata->m_distance*lightdata->m_distance));
+
+ if(lightdata->m_type==RAS_LightObject::LIGHT_SPOT) {
+ vec[0] = -(*(lightdata->m_worldmatrix))(0,2);
+ vec[1] = -(*(lightdata->m_worldmatrix))(1,2);
+ vec[2] = -(*(lightdata->m_worldmatrix))(2,2);
+ //vec[0]= -base->object->obmat[2][0];
+ //vec[1]= -base->object->obmat[2][1];
+ //vec[2]= -base->object->obmat[2][2];
+ glLightfv((GLenum)(GL_LIGHT0+count), GL_SPOT_DIRECTION, vec);
+ glLightf((GLenum)(GL_LIGHT0+count), GL_SPOT_CUTOFF, lightdata->m_spotsize/2.0);
+ glLightf((GLenum)(GL_LIGHT0+count), GL_SPOT_EXPONENT, 128.0*lightdata->m_spotblend);
}
- glLightfv((GLenum)(GL_LIGHT0+count), GL_SPECULAR, vec);
- glEnable((GLenum)(GL_LIGHT0+count));
-
- count++;
+ else glLightf((GLenum)(GL_LIGHT0+count), GL_SPOT_CUTOFF, 180.0);
+ }
+
+ if (lightdata->m_nodiffuse)
+ {
+ vec[0] = vec[1] = vec[2] = vec[3] = 0.0;
+ } else {
+ vec[0]= lightdata->m_energy*lightdata->m_red;
+ vec[1]= lightdata->m_energy*lightdata->m_green;
+ vec[2]= lightdata->m_energy*lightdata->m_blue;
+ vec[3]= 1.0;
}
+ glLightfv((GLenum)(GL_LIGHT0+count), GL_DIFFUSE, vec);
+ if (lightdata->m_nospecular)
+ {
+ vec[0] = vec[1] = vec[2] = vec[3] = 0.0;
+ } else if (lightdata->m_nodiffuse) {
+ vec[0]= lightdata->m_energy*lightdata->m_red;
+ vec[1]= lightdata->m_energy*lightdata->m_green;
+ vec[2]= lightdata->m_energy*lightdata->m_blue;
+ vec[3]= 1.0;
+ }
+ glLightfv((GLenum)(GL_LIGHT0+count), GL_SPECULAR, vec);
+ glEnable((GLenum)(GL_LIGHT0+count));
+
+ count++;
}
glPopMatrix();
diff --git a/source/gameengine/GamePlayer/common/GPC_RenderTools.h b/source/gameengine/GamePlayer/common/GPC_RenderTools.h
index 2a1b66a3aa9..478d8b1a3c5 100644
--- a/source/gameengine/GamePlayer/common/GPC_RenderTools.h
+++ b/source/gameengine/GamePlayer/common/GPC_RenderTools.h
@@ -38,8 +38,6 @@
#include "RAS_IRenderTools.h"
-#include "BMF_Api.h"
-
struct KX_ClientObjectInfo;
class KX_RayCast;
@@ -54,9 +52,10 @@ class GPC_RenderTools : public RAS_IRenderTools
{
int m_lastlightlayer;
bool m_lastlighting;
+ void *m_lastauxinfo;
static unsigned int m_numgllights;
- BMF_Font* m_font;
+// XXX BMF_Font* m_font;
public:
GPC_RenderTools();
@@ -67,7 +66,7 @@ public:
void EnableOpenGLLights(RAS_IRasterizer *rasty);
void DisableOpenGLLights();
- void ProcessLighting(RAS_IRasterizer *rasty, int layer, const MT_Transform& viewmat);
+ void ProcessLighting(RAS_IRasterizer *rasty, bool uselights, const MT_Transform& viewmat);
/* @attention mode is ignored here */
void RenderText2D(RAS_TEXT_RENDER_MODE mode,
diff --git a/source/gameengine/GamePlayer/common/Makefile b/source/gameengine/GamePlayer/common/Makefile
index 6a12e659be6..84b4a4170a9 100644
--- a/source/gameengine/GamePlayer/common/Makefile
+++ b/source/gameengine/GamePlayer/common/Makefile
@@ -56,7 +56,6 @@ CPPFLAGS += -I$(NAN_PNG)/include
CPPFLAGS += -I$(NAN_ZLIB)/include
CPPFLAGS += -I$(NAN_PYTHON)/include/python$(NAN_PYTHON_VERSION)
-CPPFLAGS += -I$(NAN_BMFONT)/include
CPPFLAGS += -I$(NAN_SOUNDSYSTEM)/include
CPPFLAGS += -I../../../gameengine/Converter
CPPFLAGS += -I../../../gameengine/Expressions
diff --git a/source/gameengine/GamePlayer/common/SConscript b/source/gameengine/GamePlayer/common/SConscript
index 23ad413350b..e96b2c5400b 100644
--- a/source/gameengine/GamePlayer/common/SConscript
+++ b/source/gameengine/GamePlayer/common/SConscript
@@ -18,7 +18,6 @@ incs = ['.',
'#intern/string',
'#intern/ghost',
'#intern/guardedalloc',
- '#intern/bmfont',
'#intern/moto/include',
'#intern/SoundSystem',
'#source/gameengine/Rasterizer/RAS_OpenGLRasterizer',
diff --git a/source/gameengine/GamePlayer/common/unix/Makefile b/source/gameengine/GamePlayer/common/unix/Makefile
index 3d44a41afee..90342c7b735 100644
--- a/source/gameengine/GamePlayer/common/unix/Makefile
+++ b/source/gameengine/GamePlayer/common/unix/Makefile
@@ -60,7 +60,6 @@ CPPFLAGS += -I$(NAN_FUZZICS)/include
CPPFLAGS += -I$(NAN_SUMO)/include
CPPFLAGS += -I$(NAN_SOUNDSYSTEM)/include
CPPFLAGS += -I$(NAN_MOTO)/include
-CPPFLAGS += -I$(NAN_BMFONT)/include
CPPFLAGS += -I$(NAN_SOLID)/include
# Blender stuff
diff --git a/source/gameengine/GamePlayer/common/windows/Makefile b/source/gameengine/GamePlayer/common/windows/Makefile
index b0fb25f35b8..b622ee974c8 100644
--- a/source/gameengine/GamePlayer/common/windows/Makefile
+++ b/source/gameengine/GamePlayer/common/windows/Makefile
@@ -48,8 +48,8 @@ CPPFLAGS += -I$(SRCHOME)/gameengine/Physics/Sumo/include
CPPFLAGS += -I$(NAN_MOTO)/include
CPPFLAGS += -I$(NAN_STRING)/include
-CPPFLAGS += -I$(NAN_BMFONT)/include
CPPFLAGS += -I$(NAN_SOUNDSYSTEM)/include
+CPPFLAGS += -I$(NAN_GLEW)/include
# Blender stuff
CPPFLAGS += -I$(SRCHOME)/blender/blenkernel
diff --git a/source/gameengine/GamePlayer/ghost/CMakeLists.txt b/source/gameengine/GamePlayer/ghost/CMakeLists.txt
index a3cd8296da3..71961f27339 100644
--- a/source/gameengine/GamePlayer/ghost/CMakeLists.txt
+++ b/source/gameengine/GamePlayer/ghost/CMakeLists.txt
@@ -37,7 +37,6 @@ SET(INC
../../../../intern/string
../../../../intern/ghost
../../../../intern/guardedalloc
- ../../../../intern/bmfont
../../../../intern/moto/include
../../../../intern/SoundSystem
../../../../source/gameengine/Rasterizer/RAS_OpenGLRasterizer
diff --git a/source/gameengine/GamePlayer/ghost/GPG_Application.cpp b/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
index 81a0f1f4e99..109ed3790ff 100644
--- a/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
+++ b/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
@@ -151,7 +151,7 @@ GPG_Application::~GPG_Application(void)
-bool GPG_Application::SetGameEngineData(struct Main* maggie, Scene *scene)
+bool GPG_Application::SetGameEngineData(struct Main* maggie, Scene *scene, int argc, char **argv)
{
bool result = false;
@@ -163,6 +163,10 @@ bool GPG_Application::SetGameEngineData(struct Main* maggie, Scene *scene)
m_startScene = scene;
result = true;
}
+
+ /* Python needs these */
+ m_argc= argc;
+ m_argv= argv;
return result;
}
@@ -208,7 +212,7 @@ static LRESULT CALLBACK screenSaverWindowProc(HWND hwnd, UINT uMsg, WPARAM wPara
BOOL CALLBACK findGhostWindowHWNDProc(HWND hwnd, LPARAM lParam)
{
- GHOST_IWindow *p = (GHOST_IWindow*) GetWindowLong(hwnd, GWL_USERDATA);
+ GHOST_IWindow *p = (GHOST_IWindow*) GetWindowLongPtr(hwnd, GWLP_USERDATA);
BOOL ret = TRUE;
if (p == ghost_window_to_find)
{
@@ -292,8 +296,8 @@ bool GPG_Application::startScreenSaverFullScreen(
if (ghost_hwnd != NULL)
{
GetCursorPos(&scr_save_mouse_pos);
- ghost_wnd_proc = (WNDPROC) GetWindowLong(ghost_hwnd, GWL_WNDPROC);
- SetWindowLong(ghost_hwnd,GWL_WNDPROC, (LONG) screenSaverWindowProc);
+ ghost_wnd_proc = (WNDPROC) GetWindowLongPtr(ghost_hwnd, GWLP_WNDPROC);
+ SetWindowLongPtr(ghost_hwnd,GWLP_WNDPROC, (uintptr_t) screenSaverWindowProc);
}
}
return ret;
@@ -530,7 +534,7 @@ bool GPG_Application::initEngine(GHOST_IWindow* window, const int stereoMode)
bool fixed_framerate= (SYS_GetCommandLineInt(syshandle, "fixed_framerate", fixedFr) != 0);
bool frameRate = (SYS_GetCommandLineInt(syshandle, "show_framerate", 0) != 0);
bool useLists = (SYS_GetCommandLineInt(syshandle, "displaylists", G.fileflags & G_FILE_DISPLAY_LISTS) != 0);
- bool nodepwarnings = (SYS_GetCommandLineInt(syshandle, "ignore_deprecation_warnings", 0) != 0);
+ bool nodepwarnings = (SYS_GetCommandLineInt(syshandle, "ignore_deprecation_warnings", 1) != 0);
if(GLEW_ARB_multitexture && GLEW_VERSION_1_1)
m_blendermat = (SYS_GetCommandLineInt(syshandle, "blender_material", 1) != 0);
@@ -681,7 +685,7 @@ bool GPG_Application::startEngine(void)
// some python things
- PyObject* dictionaryobject = initGamePlayerPythonScripting("Ketsji", psl_Lowest);
+ PyObject* dictionaryobject = initGamePlayerPythonScripting("Ketsji", psl_Lowest, m_maggie, m_argc, m_argv);
m_ketsjiengine->SetPythonDictionary(dictionaryobject);
initRasterizer(m_rasterizer, m_canvas);
PyObject *gameLogic = initGameLogic(m_ketsjiengine, startscene);
@@ -689,9 +693,15 @@ bool GPG_Application::startEngine(void)
initGameKeys();
initPythonConstraintBinding();
initMathutils();
+ initBGL();
#ifdef WITH_FFMPEG
initVideoTexture();
#endif
+
+ //initialize Dome Settings
+ if(m_startScene->r.stereomode == RAS_IRasterizer::RAS_STEREO_DOME)
+ m_ketsjiengine->InitDome(m_startScene->r.domesize, m_startScene->r.domeres, m_startScene->r.domemode, m_startScene->r.domeangle, m_startScene->r.domeresbuf, m_startScene->r.dometext);
+
// Set the GameLogic.globalDict from marshal'd data, so we can
// load new blend files and keep data in GameLogic.globalDict
loadGamePythonConfig(m_pyGlobalDictString, m_pyGlobalDictString_Length);
diff --git a/source/gameengine/GamePlayer/ghost/GPG_Application.h b/source/gameengine/GamePlayer/ghost/GPG_Application.h
index 38408f919b4..845686f5770 100644
--- a/source/gameengine/GamePlayer/ghost/GPG_Application.h
+++ b/source/gameengine/GamePlayer/ghost/GPG_Application.h
@@ -58,7 +58,7 @@ public:
GPG_Application(GHOST_ISystem* system);
~GPG_Application(void);
- bool SetGameEngineData(struct Main* maggie, struct Scene* scene);
+ bool SetGameEngineData(struct Main* maggie, struct Scene* scene, int argc, char** argv);
bool startWindow(STR_String& title, int windowLeft, int windowTop, int windowWidth, int windowHeight,
const bool stereoVisual, const int stereoMode);
bool startFullScreen(int width, int height, int bpp, int frequency, const bool stereoVisual, const int stereoMode);
@@ -154,5 +154,9 @@ protected:
*/
char* m_pyGlobalDictString;
int m_pyGlobalDictString_Length;
+
+ /* argc and argv need to be passed on to python */
+ int m_argc;
+ char** m_argv;
};
diff --git a/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp b/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp
index d993694ab4a..97b21d13e90 100644
--- a/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp
+++ b/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp
@@ -205,7 +205,9 @@ void usage(const char* program)
printf(" show_properties 0 Show debug properties\n");
printf(" show_profile 0 Show profiling information\n");
printf(" blender_material 0 Enable material settings\n");
- printf(" ignore_deprecation_warnings 0 Ignore deprecation warnings\n");
+ printf(" ignore_deprecation_warnings 1 Ignore deprecation warnings\n");
+ printf("\n");
+ printf(" - : all arguments after this are ignored, allowing python to access them from sys.argv\n");
printf("\n");
printf("example: %s -w 320 200 10 10 -g noaudio c:\\loadtest.blend\n", program);
printf("example: %s -g show_framerate = 0 c:\\loadtest.blend\n", program);
@@ -292,6 +294,7 @@ static BlendFileData *load_game_data(char *progname, char *filename = NULL, char
int main(int argc, char** argv)
{
int i;
+ int argc_py_clamped= argc; /* use this so python args can be added after ' - ' */
bool error = false;
SYS_SystemHandle syshandle = SYS_GetSystem();
bool fullScreen = false;
@@ -392,6 +395,12 @@ int main(int argc, char** argv)
#endif
if (argv[i][0] == '-')
{
+ /* ignore all args after " - ", allow python to have own args */
+ if (argv[i][1]=='\0') {
+ argc_py_clamped= i;
+ break;
+ }
+
switch (argv[i][1])
{
case 'g':
@@ -595,7 +604,7 @@ int main(int argc, char** argv)
char pathname[FILE_MAXDIR + FILE_MAXFILE];
char *titlename;
- get_filename(argc, argv, filename);
+ get_filename(argc_py_clamped, argv, filename);
if(filename[0])
BLI_convertstringcwd(filename);
@@ -690,7 +699,7 @@ int main(int argc, char** argv)
}
// GPG_Application app (system, maggie, startscenename);
- app.SetGameEngineData(maggie, scene);
+ app.SetGameEngineData(maggie, scene, argc, argv); /* this argc cant be argc_py_clamped, since python uses it */
BLI_strncpy(pathname, maggie->name, sizeof(pathname));
BLI_strncpy(G.sce, maggie->name, sizeof(G.sce));
diff --git a/source/gameengine/GamePlayer/ghost/Makefile b/source/gameengine/GamePlayer/ghost/Makefile
index 5f90d804611..c82edca0d45 100644
--- a/source/gameengine/GamePlayer/ghost/Makefile
+++ b/source/gameengine/GamePlayer/ghost/Makefile
@@ -39,7 +39,6 @@ CCFLAGS += $(LEVEL_1_CPP_WARNINGS)
CPPFLAGS += -I$(NAN_GLEW)/include
CPPFLAGS += -I$(OPENGL_HEADERS)
CPPFLAGS += -I$(NAN_STRING)/include
-CPPFLAGS += -I$(NAN_BMFONT)/include
CPPFLAGS += -I$(NAN_SOUNDSYSTEM)/include
CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include
diff --git a/source/gameengine/GamePlayer/ghost/SConscript b/source/gameengine/GamePlayer/ghost/SConscript
index 9b17ed3757b..1cb7c9f2457 100644
--- a/source/gameengine/GamePlayer/ghost/SConscript
+++ b/source/gameengine/GamePlayer/ghost/SConscript
@@ -12,7 +12,6 @@ incs = ['.',
'#intern/string',
'#intern/ghost',
'#intern/guardedalloc',
- '#intern/bmfont',
'#intern/moto/include',
'#intern/SoundSystem',
'#source/gameengine/Rasterizer/RAS_OpenGLRasterizer',
diff --git a/source/gameengine/Ketsji/BL_BlenderShader.cpp b/source/gameengine/Ketsji/BL_BlenderShader.cpp
index 8ec463be6ff..3df483b0598 100644
--- a/source/gameengine/Ketsji/BL_BlenderShader.cpp
+++ b/source/gameengine/Ketsji/BL_BlenderShader.cpp
@@ -52,7 +52,7 @@ void BL_BlenderShader::SetProg(bool enable, double time)
{
if(VerifyShader()) {
if(enable)
- GPU_material_bind(GPU_material_from_blender(mBlenderScene, mMat), mLightLayer, ~0, time);
+ GPU_material_bind(GPU_material_from_blender(mBlenderScene, mMat), mLightLayer, mBlenderScene->lay, time);
else
GPU_material_unbind(GPU_material_from_blender(mBlenderScene, mMat));
}
diff --git a/source/gameengine/Ketsji/BL_Shader.cpp b/source/gameengine/Ketsji/BL_Shader.cpp
index 60cb288436a..88d920043e0 100644
--- a/source/gameengine/Ketsji/BL_Shader.cpp
+++ b/source/gameengine/Ketsji/BL_Shader.cpp
@@ -729,9 +729,9 @@ void BL_Shader::SetUniform(int uniform, const int* val, int len)
}
-PyObject* BL_Shader::_getattr(const char *attr)
+PyObject* BL_Shader::py_getattro(PyObject *attr)
{
- _getattr_up(PyObjectPlus);
+ py_getattro_up(PyObjectPlus);
}
@@ -772,24 +772,28 @@ PyAttributeDef BL_Shader::Attributes[] = {
};
PyTypeObject BL_Shader::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"BL_Shader",
- sizeof(BL_Shader),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
0,
- __repr,
- 0
+ 0,
+ 0,
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
PyParentObject BL_Shader::Parents[] = {
- &PyObjectPlus::Type,
&BL_Shader::Type,
+ &PyObjectPlus::Type,
NULL
};
@@ -803,7 +807,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setSource," setSource(vertexProgram, fragmentProg
}
char *v,*f;
int apply=0;
- if( PyArg_ParseTuple(args, "ssi", &v, &f, &apply) )
+ if( PyArg_ParseTuple(args, "ssi:setSource", &v, &f, &apply) )
{
vertProg = v;
fragProg = f;
@@ -854,7 +858,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, validate, "validate()")
Py_RETURN_NONE;
}
if(mShader==0) {
- PyErr_Format(PyExc_TypeError, "invalid shader object");
+ PyErr_SetString(PyExc_TypeError, "shader.validate(): BL_Shader, invalid shader object");
return NULL;
}
int stat = 0;
@@ -886,7 +890,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setSampler, "setSampler(name, index)" )
const char *uniform="";
int index=-1;
- if(PyArg_ParseTuple(args, "si", &uniform, &index))
+ if(PyArg_ParseTuple(args, "si:setSampler", &uniform, &index))
{
int loc = GetUniformLocation(uniform);
if(loc != -1) {
@@ -911,7 +915,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setSampler, "setSampler(name, index)" )
KX_PYMETHODDEF_DOC( BL_Shader, setNumberOfPasses, "setNumberOfPasses( max-pass )" )
{
int pass = 1;
- if(!PyArg_ParseTuple(args, "i", &pass))
+ if(!PyArg_ParseTuple(args, "i:setNumberOfPasses", &pass))
return NULL;
mPass = 1;
@@ -927,7 +931,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform1f, "setUniform1f(name, fx)" )
const char *uniform="";
float value=0;
- if(PyArg_ParseTuple(args, "sf", &uniform, &value ))
+ if(PyArg_ParseTuple(args, "sf:setUniform1f", &uniform, &value ))
{
int loc = GetUniformLocation(uniform);
if(loc != -1)
@@ -951,7 +955,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform2f , "setUniform2f(name, fx, fy)")
}
const char *uniform="";
float array[2]={ 0,0 };
- if(PyArg_ParseTuple(args, "sff", &uniform, &array[0],&array[1] ))
+ if(PyArg_ParseTuple(args, "sff:setUniform2f", &uniform, &array[0],&array[1] ))
{
int loc = GetUniformLocation(uniform);
if(loc != -1)
@@ -975,7 +979,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform3f, "setUniform3f(name, fx,fy,fz) ")
}
const char *uniform="";
float array[3]={0,0,0};
- if(PyArg_ParseTuple(args, "sfff", &uniform, &array[0],&array[1],&array[2]))
+ if(PyArg_ParseTuple(args, "sfff:setUniform3f", &uniform, &array[0],&array[1],&array[2]))
{
int loc = GetUniformLocation(uniform);
if(loc != -1)
@@ -1000,7 +1004,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform4f, "setUniform4f(name, fx,fy,fz, fw) "
}
const char *uniform="";
float array[4]={0,0,0,0};
- if(PyArg_ParseTuple(args, "sffff", &uniform, &array[0],&array[1],&array[2], &array[3]))
+ if(PyArg_ParseTuple(args, "sffff:setUniform4f", &uniform, &array[0],&array[1],&array[2], &array[3]))
{
int loc = GetUniformLocation(uniform);
if(loc != -1)
@@ -1024,7 +1028,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform1i, "setUniform1i(name, ix)" )
}
const char *uniform="";
int value=0;
- if(PyArg_ParseTuple(args, "si", &uniform, &value ))
+ if(PyArg_ParseTuple(args, "si:setUniform1i", &uniform, &value ))
{
int loc = GetUniformLocation(uniform);
if(loc != -1)
@@ -1048,7 +1052,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform2i , "setUniform2i(name, ix, iy)")
}
const char *uniform="";
int array[2]={ 0,0 };
- if(PyArg_ParseTuple(args, "sii", &uniform, &array[0],&array[1] ))
+ if(PyArg_ParseTuple(args, "sii:setUniform2i", &uniform, &array[0],&array[1] ))
{
int loc = GetUniformLocation(uniform);
if(loc != -1)
@@ -1073,7 +1077,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform3i, "setUniform3i(name, ix,iy,iz) ")
const char *uniform="";
int array[3]={0,0,0};
- if(PyArg_ParseTuple(args, "siii", &uniform, &array[0],&array[1],&array[2]))
+ if(PyArg_ParseTuple(args, "siii:setUniform3i", &uniform, &array[0],&array[1],&array[2]))
{
int loc = GetUniformLocation(uniform);
if(loc != -1)
@@ -1096,7 +1100,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniform4i, "setUniform4i(name, ix,iy,iz, iw) "
}
const char *uniform="";
int array[4]={0,0,0, 0};
- if(PyArg_ParseTuple(args, "siiii", &uniform, &array[0],&array[1],&array[2], &array[3] ))
+ if(PyArg_ParseTuple(args, "siiii:setUniform4i", &uniform, &array[0],&array[1],&array[2], &array[3] ))
{
int loc = GetUniformLocation(uniform);
if(loc != -1)
@@ -1121,7 +1125,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniformfv , "setUniformfv( float (list2 or lis
PyObject *listPtr =0;
float array_data[4] = {0.f,0.f,0.f,0.f};
- if(PyArg_ParseTuple(args, "sO", &uniform, &listPtr))
+ if(PyArg_ParseTuple(args, "sO:setUniformfv", &uniform, &listPtr))
{
int loc = GetUniformLocation(uniform);
if(loc != -1)
@@ -1171,7 +1175,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniformfv , "setUniformfv( float (list2 or lis
}break;
default:
{
- PyErr_Format(PyExc_TypeError, "Invalid list size");
+ PyErr_SetString(PyExc_TypeError, "shader.setUniform4i(name, ix,iy,iz, iw): BL_Shader. invalid list size");
return NULL;
}break;
}
@@ -1181,7 +1185,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniformfv , "setUniformfv( float (list2 or lis
return NULL;
}
-KX_PYMETHODDEF_DOC( BL_Shader, setUniformiv, "setUniformiv( int (list2 or list3 or list4) )")
+KX_PYMETHODDEF_DOC( BL_Shader, setUniformiv, "setUniformiv( uniform_name, (list2 or list3 or list4) )")
{
if(mError) {
Py_RETURN_NONE;
@@ -1190,70 +1194,84 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniformiv, "setUniformiv( int (list2 or list3
PyObject *listPtr =0;
int array_data[4] = {0,0,0,0};
- if(PyArg_ParseTuple(args, "sO", &uniform, &listPtr))
+ if(!PyArg_ParseTuple(args, "sO:setUniformiv", &uniform, &listPtr))
+ return NULL;
+
+ int loc = GetUniformLocation(uniform);
+
+ if(loc == -1) {
+ PyErr_SetString(PyExc_TypeError, "shader.setUniformiv(...): BL_Shader, first string argument is not a valid uniform value");
+ return NULL;
+ }
+
+ if(!PySequence_Check(listPtr)) {
+ PyErr_SetString(PyExc_TypeError, "shader.setUniformiv(...): BL_Shader, second argument is not a sequence");
+ return NULL;
+ }
+
+ unsigned int list_size = PySequence_Size(listPtr);
+
+ for(unsigned int i=0; (i<list_size && i<4); i++)
{
- int loc = GetUniformLocation(uniform);
- if(loc != -1)
+ PyObject *item = PySequence_GetItem(listPtr, i);
+ array_data[i] = PyInt_AsLong(item);
+ Py_DECREF(item);
+ }
+
+ if(PyErr_Occurred()) {
+ PyErr_SetString(PyExc_TypeError, "shader.setUniformiv(...): BL_Shader, one or more values in the list is not an int");
+ return NULL;
+ }
+
+ /* Sanity checks done! */
+
+ switch(list_size)
+ {
+ case 2:
{
- if(PySequence_Check(listPtr))
- {
- unsigned int list_size = PySequence_Size(listPtr);
-
- for(unsigned int i=0; (i<list_size && i<4); i++)
- {
- PyObject *item = PySequence_GetItem(listPtr, i);
- array_data[i] = PyInt_AsLong(item);
- Py_DECREF(item);
- }
- switch(list_size)
- {
- case 2:
- {
- int array2[2] = { array_data[0],array_data[1]};
+ int array2[2] = { array_data[0],array_data[1]};
#ifdef SORT_UNIFORMS
- SetUniformiv(loc, BL_Uniform::UNI_INT2, array2, sizeof(int)*2);
+ SetUniformiv(loc, BL_Uniform::UNI_INT2, array2, sizeof(int)*2);
#else
- SetUniform(loc, array2, 2);
+ SetUniform(loc, array2, 2);
#endif
- Py_RETURN_NONE;
- } break;
- case 3:
- {
- int array3[3] = { array_data[0],array_data[1],array_data[2] };
+ Py_RETURN_NONE;
+ } break;
+ case 3:
+ {
+ int array3[3] = { array_data[0],array_data[1],array_data[2] };
#ifdef SORT_UNIFORMS
- SetUniformiv(loc, BL_Uniform::UNI_INT3, array3, sizeof(int)*3);
-
+ SetUniformiv(loc, BL_Uniform::UNI_INT3, array3, sizeof(int)*3);
+
#else
- SetUniform(loc, array3, 3);
+ SetUniform(loc, array3, 3);
#endif
- Py_RETURN_NONE;
- }break;
- case 4:
- {
- int array4[4] = { array_data[0],array_data[1],array_data[2],array_data[3] };
+ Py_RETURN_NONE;
+ }break;
+ case 4:
+ {
+ int array4[4] = { array_data[0],array_data[1],array_data[2],array_data[3] };
#ifdef SORT_UNIFORMS
- SetUniformiv(loc, BL_Uniform::UNI_INT4, array4, sizeof(int)*4);
-
+ SetUniformiv(loc, BL_Uniform::UNI_INT4, array4, sizeof(int)*4);
+
#else
- SetUniform(loc, array4, 4);
+ SetUniform(loc, array4, 4);
#endif
- Py_RETURN_NONE;
- }break;
- default:
- {
- PyErr_Format(PyExc_TypeError, "Invalid list size");
- return NULL;
- }break;
- }
- }
- }
+ Py_RETURN_NONE;
+ }break;
+ default:
+ {
+ PyErr_SetString(PyExc_TypeError, "shader.setUniformiv(...): BL_Shader, second argument, invalid list size, expected an int list between 2 and 4");
+ return NULL;
+ }break;
}
- return NULL;
+
+ Py_RETURN_NONE;
}
KX_PYMETHODDEF_DOC( BL_Shader, setUniformMatrix4,
-"setUniformMatrix4(uniform-name, mat-4x4, transpose(row-major=true, col-major=false)" )
+"setUniformMatrix4(uniform_name, mat-4x4, transpose(row-major=true, col-major=false)" )
{
if(mError) {
Py_RETURN_NONE;
@@ -1269,33 +1287,38 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniformMatrix4,
const char *uniform="";
PyObject *matrix=0;
int transp=1; // MT_ is row major so transpose by default....
- if(PyArg_ParseTuple(args, "sO|i",&uniform, &matrix,&transp))
- {
- int loc = GetUniformLocation(uniform);
- if(loc != -1)
- {
- if (PyObject_IsMT_Matrix(matrix, 4))
- {
- MT_Matrix4x4 mat;
- if (PyMatTo(matrix, mat))
- {
+
+ if(!PyArg_ParseTuple(args, "sO|i:setUniformMatrix4",&uniform, &matrix,&transp))
+ return NULL;
+
+ int loc = GetUniformLocation(uniform);
+
+ if(loc == -1) {
+ PyErr_SetString(PyExc_TypeError, "shader.setUniformMatrix4(...): BL_Shader, first string argument is not a valid uniform value");
+ return NULL;
+ }
+
+ MT_Matrix4x4 mat;
+
+ if (!PyMatTo(matrix, mat)) {
+ PyErr_SetString(PyExc_TypeError, "shader.setUniformMatrix4(...): BL_Shader, second argument cannot be converted into a 4x4 matrix");
+ return NULL;
+ }
+
+ /* Sanity checks done! */
+
#ifdef SORT_UNIFORMS
- mat.getValue(matr);
- SetUniformfv(loc, BL_Uniform::UNI_MAT4, matr, (sizeof(float)*16), (transp!=0) );
+ mat.getValue(matr);
+ SetUniformfv(loc, BL_Uniform::UNI_MAT4, matr, (sizeof(float)*16), (transp!=0) );
#else
- SetUniform(loc,mat,(transp!=0));
+ SetUniform(loc,mat,(transp!=0));
#endif
- Py_RETURN_NONE;
- }
- }
- }
- }
- return NULL;
+ Py_RETURN_NONE;
}
KX_PYMETHODDEF_DOC( BL_Shader, setUniformMatrix3,
-"setUniformMatrix3(uniform-name, list[3x3], transpose(row-major=true, col-major=false)" )
+"setUniformMatrix3(uniform_name, list[3x3], transpose(row-major=true, col-major=false)" )
{
if(mError) {
Py_RETURN_NONE;
@@ -1310,29 +1333,32 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniformMatrix3,
const char *uniform="";
PyObject *matrix=0;
int transp=1; // MT_ is row major so transpose by default....
- if(PyArg_ParseTuple(args, "sO|i",&uniform, &matrix,&transp))
- {
- int loc = GetUniformLocation(uniform);
- if(loc != -1)
- {
- if (PyObject_IsMT_Matrix(matrix, 3))
- {
- MT_Matrix3x3 mat;
- if (PyMatTo(matrix, mat))
- {
+ if(!PyArg_ParseTuple(args, "sO|i:setUniformMatrix3",&uniform, &matrix,&transp))
+ return NULL;
+
+ int loc = GetUniformLocation(uniform);
+
+ if(loc == -1) {
+ PyErr_SetString(PyExc_TypeError, "shader.setUniformMatrix3(...): BL_Shader, first string argument is not a valid uniform value");
+ return NULL;
+ }
+
+
+ MT_Matrix3x3 mat;
+
+ if (!PyMatTo(matrix, mat)) {
+ PyErr_SetString(PyExc_TypeError, "shader.setUniformMatrix3(...): BL_Shader, second argument cannot be converted into a 3x3 matrix");
+ return NULL;
+ }
+
+
#ifdef SORT_UNIFORMS
- mat.getValue(matr);
- SetUniformfv(loc, BL_Uniform::UNI_MAT3, matr, (sizeof(float)*9), (transp!=0) );
+ mat.getValue(matr);
+ SetUniformfv(loc, BL_Uniform::UNI_MAT3, matr, (sizeof(float)*9), (transp!=0) );
#else
- SetUniform(loc,mat,(transp!=0));
+ SetUniform(loc,mat,(transp!=0));
#endif
- Py_RETURN_NONE;
-
- }
- }
- }
- }
- return NULL;
+ Py_RETURN_NONE;
}
KX_PYMETHODDEF_DOC( BL_Shader, setAttrib, "setAttrib(enum)" )
@@ -1340,18 +1366,20 @@ KX_PYMETHODDEF_DOC( BL_Shader, setAttrib, "setAttrib(enum)" )
if(mError) {
Py_RETURN_NONE;
}
+
int attr=0;
- if(PyArg_ParseTuple(args, "i", &attr )) {
- if(mShader==0) {
- PyErr_Format(PyExc_ValueError, "invalid shader object");
- return NULL;
- }
- mAttr=SHD_TANGENT;
- glUseProgramObjectARB(mShader);
- glBindAttribLocationARB(mShader, mAttr, "Tangent");
- Py_RETURN_NONE;
+
+ if(!PyArg_ParseTuple(args, "i:setAttrib", &attr ))
+ return NULL;
+
+ if(mShader==0) {
+ PyErr_SetString(PyExc_ValueError, "shader.setAttrib() BL_Shader, invalid shader object");
+ return NULL;
}
- return NULL;
+ mAttr=SHD_TANGENT; /* What the heck is going on here - attr is just ignored??? - Campbell */
+ glUseProgramObjectARB(mShader);
+ glBindAttribLocationARB(mShader, mAttr, "Tangent");
+ Py_RETURN_NONE;
}
@@ -1363,7 +1391,7 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniformDef, "setUniformDef(name, enum)" )
const char *uniform="";
int nloc=0;
- if(PyArg_ParseTuple(args, "si",&uniform, &nloc))
+ if(PyArg_ParseTuple(args, "si:setUniformDef",&uniform, &nloc))
{
int loc = GetUniformLocation(uniform);
if(loc != -1)
diff --git a/source/gameengine/Ketsji/BL_Shader.h b/source/gameengine/Ketsji/BL_Shader.h
index 76acd5513ef..08cad5071fd 100644
--- a/source/gameengine/Ketsji/BL_Shader.h
+++ b/source/gameengine/Ketsji/BL_Shader.h
@@ -202,7 +202,8 @@ public:
void SetUniform(int uniform, const int val);
// Python interface
- virtual PyObject* _getattr(const char *attr);
+ virtual PyObject* py_getattro(PyObject *attr);
+ virtual PyObject* py_repr(void) { return PyString_FromFormat("BL_Shader\n\tvertex shader:%s\n\n\tfragment shader%s\n\n", vertProg, fragProg); }
// -----------------------------------
KX_PYMETHOD_DOC( BL_Shader, setSource );
diff --git a/source/gameengine/Ketsji/CMakeLists.txt b/source/gameengine/Ketsji/CMakeLists.txt
index d054894589f..ca9ce4dc50c 100644
--- a/source/gameengine/Ketsji/CMakeLists.txt
+++ b/source/gameengine/Ketsji/CMakeLists.txt
@@ -37,6 +37,8 @@ FILE(GLOB SRC *.cpp)
# ../../../source/blender/python/api2_2x/point.c
# ../../../source/blender/python/api2_2x/quat.c
# ../../../source/blender/python/api2_2x/vector.c
+# ../../../source/blender/python/api2_2x/bpy_internal_import.c
+# ../../../source/blender/python/api2_2x/BGL.c
#)
SET(INC
@@ -45,7 +47,6 @@ SET(INC
../../../intern/string
../../../intern/guardedalloc
../../../source/gameengine/Rasterizer/RAS_OpenGLRasterizer
- ../../../intern/bmfont
../../../source/gameengine/Converter
../../../source/blender/imbuf
../../../intern/ghost/include
@@ -68,7 +69,7 @@ SET(INC
../../../source/gameengine/Physics/Sumo
../../../source/gameengine/Physics/Sumo/Fuzzics/include
../../../source/gameengine/Network/LoopBackNetwork
- ../../../intern/SoundSystem
+ ../../../intern/SoundSystem
../../../source/blender/misc
../../../source/blender/blenloader
../../../source/blender/gpu
diff --git a/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageActuator.cpp b/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageActuator.cpp
index 4e5f27df2da..2483a6bfb39 100644
--- a/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageActuator.cpp
+++ b/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageActuator.cpp
@@ -47,7 +47,7 @@ KX_NetworkMessageActuator::KX_NetworkMessageActuator(
m_networkscene(networkscene),
m_toPropName(toPropName),
m_subject(subject),
- m_bodyType(bodyType),
+ m_bPropBody(bodyType),
m_body(body)
{
}
@@ -69,7 +69,7 @@ bool KX_NetworkMessageActuator::Update()
}
//printf("messageactuator true event\n");
- if (m_bodyType == 1) // ACT_MESG_PROP in DNA_actuator_types.h
+ if (m_bPropBody) // ACT_MESG_PROP in DNA_actuator_types.h
{
m_networkscene->SendMessage(
m_toPropName,
@@ -105,22 +105,22 @@ CValue* KX_NetworkMessageActuator::GetReplica()
/* Integration hooks -------------------------------------------------- */
PyTypeObject KX_NetworkMessageActuator::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"KX_NetworkMessageActuator",
- sizeof(KX_NetworkMessageActuator),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0, //&MyPyCompare,
- __repr,
- 0, //&cvalue_as_number,
0,
0,
0,
- 0
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
PyParentObject KX_NetworkMessageActuator::Parents[] = {
@@ -132,6 +132,7 @@ PyParentObject KX_NetworkMessageActuator::Parents[] = {
};
PyMethodDef KX_NetworkMessageActuator::Methods[] = {
+ // Deprecated ----->
{"setToPropName", (PyCFunction)
KX_NetworkMessageActuator::sPySetToPropName, METH_VARARGS},
{"setSubject", (PyCFunction)
@@ -140,26 +141,36 @@ PyMethodDef KX_NetworkMessageActuator::Methods[] = {
KX_NetworkMessageActuator::sPySetBodyType, METH_VARARGS},
{"setBody", (PyCFunction)
KX_NetworkMessageActuator::sPySetBody, METH_VARARGS},
+ // <-----
{NULL,NULL} // Sentinel
};
PyAttributeDef KX_NetworkMessageActuator::Attributes[] = {
+ KX_PYATTRIBUTE_STRING_RW("propName", 0, 100, false, KX_NetworkMessageActuator, m_toPropName),
+ KX_PYATTRIBUTE_STRING_RW("subject", 0, 100, false, KX_NetworkMessageActuator, m_subject),
+ KX_PYATTRIBUTE_BOOL_RW("usePropBody", KX_NetworkMessageActuator, m_bPropBody),
+ KX_PYATTRIBUTE_STRING_RW("body", 0, 100, false, KX_NetworkMessageActuator, m_body),
{ NULL } //Sentinel
};
-PyObject* KX_NetworkMessageActuator::_getattr(const char *attr) {
- _getattr_up(SCA_IActuator);
+PyObject* KX_NetworkMessageActuator::py_getattro(PyObject *attr) {
+ py_getattro_up(SCA_IActuator);
}
+int KX_NetworkMessageActuator::py_setattro(PyObject *attr, PyObject *value) {
+ py_setattro_up(SCA_IActuator);
+}
+
+// Deprecated ----->
// 1. SetToPropName
PyObject* KX_NetworkMessageActuator::PySetToPropName(
- PyObject* self,
PyObject* args,
PyObject* kwds)
{
+ ShowDeprecationWarning("setToProp()", "the propName property");
char* ToPropName;
- if (PyArg_ParseTuple(args, "s", &ToPropName)) {
+ if (PyArg_ParseTuple(args, "s:setToPropName", &ToPropName)) {
m_toPropName = ToPropName;
}
else {
@@ -171,13 +182,13 @@ PyObject* KX_NetworkMessageActuator::PySetToPropName(
// 2. SetSubject
PyObject* KX_NetworkMessageActuator::PySetSubject(
- PyObject* self,
PyObject* args,
PyObject* kwds)
{
+ ShowDeprecationWarning("setSubject()", "the subject property");
char* Subject;
- if (PyArg_ParseTuple(args, "s", &Subject)) {
+ if (PyArg_ParseTuple(args, "s:setSubject", &Subject)) {
m_subject = Subject;
}
else {
@@ -189,14 +200,14 @@ PyObject* KX_NetworkMessageActuator::PySetSubject(
// 3. SetBodyType
PyObject* KX_NetworkMessageActuator::PySetBodyType(
- PyObject* self,
PyObject* args,
PyObject* kwds)
{
+ ShowDeprecationWarning("setBodyType()", "the usePropBody property");
int BodyType;
- if (PyArg_ParseTuple(args, "i", &BodyType)) {
- m_bodyType = BodyType;
+ if (PyArg_ParseTuple(args, "i:setBodyType", &BodyType)) {
+ m_bPropBody = (BodyType != 0);
}
else {
return NULL;
@@ -207,13 +218,13 @@ PyObject* KX_NetworkMessageActuator::PySetBodyType(
// 4. SetBody
PyObject* KX_NetworkMessageActuator::PySetBody(
- PyObject* self,
PyObject* args,
PyObject* kwds)
{
+ ShowDeprecationWarning("setBody()", "the body property");
char* Body;
- if (PyArg_ParseTuple(args, "s", &Body)) {
+ if (PyArg_ParseTuple(args, "s:setBody", &Body)) {
m_body = Body;
}
else {
@@ -223,3 +234,4 @@ PyObject* KX_NetworkMessageActuator::PySetBody(
Py_RETURN_NONE;
}
+// <----- Deprecated \ No newline at end of file
diff --git a/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageActuator.h b/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageActuator.h
index 96b55ef839b..850f825b8f3 100644
--- a/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageActuator.h
+++ b/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageActuator.h
@@ -41,7 +41,7 @@ class KX_NetworkMessageActuator : public SCA_IActuator
class NG_NetworkScene* m_networkscene; // needed for replication
STR_String m_toPropName;
STR_String m_subject;
- int m_bodyType;
+ bool m_bPropBody;
STR_String m_body;
public:
KX_NetworkMessageActuator(
@@ -61,12 +61,15 @@ public:
/* Python interface ------------------------------------------- */
/* ------------------------------------------------------------ */
- virtual PyObject* _getattr(const char *attr);
+ virtual PyObject* py_getattro(PyObject *attr);
+ virtual int py_setattro(PyObject *attr, PyObject *value);
+ // Deprecated ----->
KX_PYMETHOD(KX_NetworkMessageActuator, SetToPropName);
KX_PYMETHOD(KX_NetworkMessageActuator, SetSubject);
KX_PYMETHOD(KX_NetworkMessageActuator, SetBodyType);
KX_PYMETHOD(KX_NetworkMessageActuator, SetBody);
+ // <-----
};
diff --git a/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.cpp b/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.cpp
index ac89d8b0716..7782567943e 100644
--- a/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.cpp
+++ b/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.cpp
@@ -168,22 +168,22 @@ bool KX_NetworkMessageSensor::IsPositiveTrigger()
/* Integration hooks --------------------------------------------------- */
PyTypeObject KX_NetworkMessageSensor::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"KX_NetworkMessageSensor",
- sizeof(KX_NetworkMessageSensor),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0, //&MyPyCompare,
- __repr,
- 0, //&cvalue_as_number,
0,
0,
0,
- 0
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
PyParentObject KX_NetworkMessageSensor::Parents[] = {
@@ -195,6 +195,7 @@ PyParentObject KX_NetworkMessageSensor::Parents[] = {
};
PyMethodDef KX_NetworkMessageSensor::Methods[] = {
+ // Deprecated ----->
{"setSubjectFilterText", (PyCFunction)
KX_NetworkMessageSensor::sPySetSubjectFilterText, METH_O,
(PY_METHODCHAR)SetSubjectFilterText_doc},
@@ -210,27 +211,58 @@ PyMethodDef KX_NetworkMessageSensor::Methods[] = {
{"getSubjects", (PyCFunction)
KX_NetworkMessageSensor::sPyGetSubjects, METH_NOARGS,
(PY_METHODCHAR)GetSubjects_doc},
+ // <-----
{NULL,NULL} //Sentinel
};
PyAttributeDef KX_NetworkMessageSensor::Attributes[] = {
+ KX_PYATTRIBUTE_STRING_RW("subject", 0, 100, false, KX_NetworkMessageSensor, m_subject),
+ KX_PYATTRIBUTE_INT_RO("frameMessageCount", KX_NetworkMessageSensor, m_frame_message_count),
+ KX_PYATTRIBUTE_RO_FUNCTION("bodies", KX_NetworkMessageSensor, pyattr_get_bodies),
+ KX_PYATTRIBUTE_RO_FUNCTION("subjects", KX_NetworkMessageSensor, pyattr_get_subjects),
{ NULL } //Sentinel
};
-PyObject* KX_NetworkMessageSensor::_getattr(const char *attr) {
- _getattr_up(SCA_ISensor); // implicit return!
+PyObject* KX_NetworkMessageSensor::py_getattro(PyObject *attr) {
+ py_getattro_up(SCA_ISensor);
}
+int KX_NetworkMessageSensor::py_setattro(PyObject *attr, PyObject *value) {
+ return SCA_ISensor::py_setattro(attr, value);
+}
+
+PyObject* KX_NetworkMessageSensor::pyattr_get_bodies(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_NetworkMessageSensor *self = static_cast<KX_NetworkMessageSensor*>(self_v);
+ if (self->m_BodyList) {
+ return self->m_BodyList->GetProxy();
+ } else {
+ return (new CListValue())->NewProxy(true);
+ }
+}
+
+PyObject* KX_NetworkMessageSensor::pyattr_get_subjects(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_NetworkMessageSensor *self = static_cast<KX_NetworkMessageSensor*>(self_v);
+ if (self->m_SubjectList) {
+ return self->m_SubjectList->GetProxy();
+ } else {
+ return (new CListValue())->NewProxy(true);
+ }
+}
+
+// Deprecated ----->
// 1. Set the message subject that this sensor listens for
const char KX_NetworkMessageSensor::SetSubjectFilterText_doc[] =
"\tsetSubjectFilterText(value)\n"
"\tChange the message subject text that this sensor is listening to.\n";
-PyObject* KX_NetworkMessageSensor::PySetSubjectFilterText( PyObject* self, PyObject* value)
+PyObject* KX_NetworkMessageSensor::PySetSubjectFilterText(PyObject* value)
{
+ ShowDeprecationWarning("setSubjectFilterText()", "subject");
char* Subject = PyString_AsString(value);
if (Subject==NULL) {
- PyErr_SetString(PyExc_TypeError, "expected a string message");
+ PyErr_SetString(PyExc_TypeError, "sensor.tsetSubjectFilterText(string): KX_NetworkMessageSensor, expected a string message");
return NULL;
}
@@ -243,8 +275,9 @@ const char KX_NetworkMessageSensor::GetFrameMessageCount_doc[] =
"\tgetFrameMessageCount()\n"
"\tGet the number of messages received since the last frame.\n";
-PyObject* KX_NetworkMessageSensor::PyGetFrameMessageCount( PyObject* )
+PyObject* KX_NetworkMessageSensor::PyGetFrameMessageCount()
{
+ ShowDeprecationWarning("getFrameMessageCount()", "frameMessageCount");
return PyInt_FromLong(long(m_frame_message_count));
}
@@ -253,12 +286,13 @@ const char KX_NetworkMessageSensor::GetBodies_doc[] =
"\tgetBodies()\n"
"\tGet the list of message bodies.\n";
-PyObject* KX_NetworkMessageSensor::PyGetBodies( PyObject* )
+PyObject* KX_NetworkMessageSensor::PyGetBodies()
{
+ ShowDeprecationWarning("getBodies()", "bodies");
if (m_BodyList) {
- return ((PyObject*) m_BodyList->AddRef());
+ return m_BodyList->GetProxy();
} else {
- return ((PyObject*) new CListValue());
+ return (new CListValue())->NewProxy(true);
}
}
@@ -267,8 +301,9 @@ const char KX_NetworkMessageSensor::GetSubject_doc[] =
"\tgetSubject()\n"
"\tGet the subject: field of the message sensor.\n";
-PyObject* KX_NetworkMessageSensor::PyGetSubject( PyObject* )
+PyObject* KX_NetworkMessageSensor::PyGetSubject()
{
+ ShowDeprecationWarning("getSubject()", "subject");
return PyString_FromString(m_subject ? m_subject : "");
}
@@ -277,11 +312,13 @@ const char KX_NetworkMessageSensor::GetSubjects_doc[] =
"\tgetSubjects()\n"
"\tGet list of message subjects.\n";
-PyObject* KX_NetworkMessageSensor::PyGetSubjects( PyObject* )
+PyObject* KX_NetworkMessageSensor::PyGetSubjects()
{
+ ShowDeprecationWarning("getSubjects()", "subjects");
if (m_SubjectList) {
- return ((PyObject*) m_SubjectList->AddRef());
+ return m_SubjectList->GetProxy();
} else {
- return ((PyObject*) new CListValue());
+ return (new CListValue())->NewProxy(true);
}
}
+// <----- Deprecated \ No newline at end of file
diff --git a/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.h b/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.h
index 26adbc9945a..ac0e880d25c 100644
--- a/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.h
+++ b/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.h
@@ -72,14 +72,20 @@ public:
/* Python interface -------------------------------------------- */
/* ------------------------------------------------------------- */
- virtual PyObject* _getattr(const char *attr);
+ virtual PyObject* py_getattro(PyObject *attr);
+ virtual int py_setattro(PyObject *attr, PyObject *value);
+ // Deprecated ----->
KX_PYMETHOD_DOC_O(KX_NetworkMessageSensor, SetSubjectFilterText);
KX_PYMETHOD_DOC_NOARGS(KX_NetworkMessageSensor, GetFrameMessageCount);
KX_PYMETHOD_DOC_NOARGS(KX_NetworkMessageSensor, GetBodies);
KX_PYMETHOD_DOC_NOARGS(KX_NetworkMessageSensor, GetSubject);
KX_PYMETHOD_DOC_NOARGS(KX_NetworkMessageSensor, GetSubjects);
+ // <-----
+ /* attributes */
+ static PyObject* pyattr_get_bodies(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_subjects(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef);
};
diff --git a/source/gameengine/Ketsji/KX_BlenderMaterial.cpp b/source/gameengine/Ketsji/KX_BlenderMaterial.cpp
index b9bd7647f89..849332008ce 100644
--- a/source/gameengine/Ketsji/KX_BlenderMaterial.cpp
+++ b/source/gameengine/Ketsji/KX_BlenderMaterial.cpp
@@ -753,36 +753,40 @@ PyAttributeDef KX_BlenderMaterial::Attributes[] = {
};
PyTypeObject KX_BlenderMaterial::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"KX_BlenderMaterial",
- sizeof(KX_BlenderMaterial),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
0,
- __repr,
- 0
+ 0,
+ 0,
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
PyParentObject KX_BlenderMaterial::Parents[] = {
- &PyObjectPlus::Type,
&KX_BlenderMaterial::Type,
+ &PyObjectPlus::Type,
NULL
};
-PyObject* KX_BlenderMaterial::_getattr(const char *attr)
+PyObject* KX_BlenderMaterial::py_getattro(PyObject *attr)
{
- _getattr_up(PyObjectPlus);
+ py_getattro_up(PyObjectPlus);
}
-int KX_BlenderMaterial::_setattr(const char *attr, PyObject *pyvalue)
+int KX_BlenderMaterial::py_setattro(PyObject *attr, PyObject *pyvalue)
{
- return PyObjectPlus::_setattr(attr, pyvalue);
+ return PyObjectPlus::py_setattro(attr, pyvalue);
}
@@ -823,8 +827,7 @@ KX_PYMETHODDEF_DOC( KX_BlenderMaterial, getShader , "getShader()")
m_flag &= ~RAS_BLENDERGLSL;
mMaterial->SetSharedMaterial(true);
mScene->GetBucketManager()->ReleaseDisplayLists(this);
- Py_INCREF(mShader);
- return mShader;
+ return mShader->GetProxy();
}else
{
// decref all references to the object
@@ -832,18 +835,13 @@ KX_PYMETHODDEF_DOC( KX_BlenderMaterial, getShader , "getShader()")
// We will then go back to fixed functionality
// for this material
if(mShader) {
- if(mShader->ob_refcnt > 1) {
- Py_DECREF(mShader);
- }
- else {
- delete mShader;
- mShader=0;
- }
+ delete mShader; /* will handle python de-referencing */
+ mShader=0;
}
}
Py_RETURN_NONE;
}
- PyErr_Format(PyExc_ValueError, "GLSL Error");
+ PyErr_SetString(PyExc_ValueError, "material.getShader(): KX_BlenderMaterial, GLSL Error");
return NULL;
}
@@ -893,7 +891,7 @@ static unsigned int GL_array[11] = {
KX_PYMETHODDEF_DOC( KX_BlenderMaterial, setBlending , "setBlending( GameLogic.src, GameLogic.dest)")
{
unsigned int b[2];
- if(PyArg_ParseTuple(args, "ii", &b[0], &b[1]))
+ if(PyArg_ParseTuple(args, "ii:setBlending", &b[0], &b[1]))
{
bool value_found[2] = {false, false};
for(int i=0; i<11; i++)
@@ -909,7 +907,7 @@ KX_PYMETHODDEF_DOC( KX_BlenderMaterial, setBlending , "setBlending( GameLogic.sr
if(value_found[0] && value_found[1]) break;
}
if(!value_found[0] || !value_found[1]) {
- PyErr_Format(PyExc_ValueError, "invalid enum.");
+ PyErr_SetString(PyExc_ValueError, "material.setBlending(int, int): KX_BlenderMaterial, invalid enum.");
return NULL;
}
mUserDefBlend = true;
diff --git a/source/gameengine/Ketsji/KX_BlenderMaterial.h b/source/gameengine/Ketsji/KX_BlenderMaterial.h
index 2cf623dbd85..48d4730ab07 100644
--- a/source/gameengine/Ketsji/KX_BlenderMaterial.h
+++ b/source/gameengine/Ketsji/KX_BlenderMaterial.h
@@ -82,8 +82,9 @@ public:
);
// --------------------------------
- virtual PyObject* _getattr(const char *attr);
- virtual int _setattr(const char *attr, PyObject *pyvalue);
+ virtual PyObject* py_getattro(PyObject *attr);
+ virtual int py_setattro(PyObject *attr, PyObject *pyvalue);
+ virtual PyObject* py_repr(void) { return PyString_FromString(mMaterial->matname.ReadPtr()); }
KX_PYMETHOD_DOC( KX_BlenderMaterial, getShader );
KX_PYMETHOD_DOC( KX_BlenderMaterial, getMaterialIndex );
diff --git a/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp b/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp
index 062e9f7df50..831f9241fec 100644
--- a/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp
+++ b/source/gameengine/Ketsji/KX_BulletPhysicsController.cpp
@@ -59,6 +59,24 @@ void KX_BulletPhysicsController::applyImpulse(const MT_Point3& attach, const MT_
}
+float KX_BulletPhysicsController::GetLinVelocityMin()
+{
+ return (float)CcdPhysicsController::GetLinVelocityMin();
+}
+void KX_BulletPhysicsController::SetLinVelocityMin(float val)
+{
+ CcdPhysicsController::SetLinVelocityMin(val);
+}
+
+float KX_BulletPhysicsController::GetLinVelocityMax()
+{
+ return (float)CcdPhysicsController::GetLinVelocityMax();
+}
+void KX_BulletPhysicsController::SetLinVelocityMax(float val)
+{
+ CcdPhysicsController::SetLinVelocityMax(val);
+}
+
void KX_BulletPhysicsController::SetObject (SG_IObject* object)
{
SG_Controller::SetObject(object);
@@ -73,6 +91,10 @@ void KX_BulletPhysicsController::SetObject (SG_IObject* object)
}
+MT_Scalar KX_BulletPhysicsController::GetRadius()
+{
+ return MT_Scalar(CcdPhysicsController::GetRadius());
+}
void KX_BulletPhysicsController::setMargin (float collisionMargin)
{
@@ -162,9 +184,18 @@ MT_Scalar KX_BulletPhysicsController::GetMass()
}
-MT_Scalar KX_BulletPhysicsController::GetRadius()
+MT_Vector3 KX_BulletPhysicsController::GetLocalInertia()
{
- return MT_Scalar(CcdPhysicsController::GetRadius());
+ MT_Vector3 inertia(0.f, 0.f, 0.f);
+ btVector3 inv_inertia;
+ if (GetRigidBody()) {
+ inv_inertia = GetRigidBody()->getInvInertiaDiagLocal();
+ if (!btFuzzyZero(inv_inertia.getX()) &&
+ !btFuzzyZero(inv_inertia.getY()) &&
+ !btFuzzyZero(inv_inertia.getZ()))
+ inertia = MT_Vector3(1.f/inv_inertia.getX(), 1.f/inv_inertia.getY(), 1.f/inv_inertia.getZ());
+ }
+ return inertia;
}
MT_Vector3 KX_BulletPhysicsController::getReactionForce()
@@ -417,13 +448,14 @@ void KX_BulletPhysicsController::SetSumoTransform(bool nondynaonly)
{
if (!nondynaonly)
{
+ /*
btTransform worldTrans;
if (GetRigidBody())
{
GetRigidBody()->getMotionState()->getWorldTransform(worldTrans);
GetRigidBody()->setCenterOfMassTransform(worldTrans);
}
-
+ */
/*
scaling?
if (m_bDyna)
diff --git a/source/gameengine/Ketsji/KX_BulletPhysicsController.h b/source/gameengine/Ketsji/KX_BulletPhysicsController.h
index 44fbde7054e..b39098206f7 100644
--- a/source/gameengine/Ketsji/KX_BulletPhysicsController.h
+++ b/source/gameengine/Ketsji/KX_BulletPhysicsController.h
@@ -42,6 +42,7 @@ public:
virtual void setScaling(const MT_Vector3& scaling);
virtual MT_Scalar GetMass();
virtual void SetMass(MT_Scalar newmass);
+ virtual MT_Vector3 GetLocalInertia();
virtual MT_Vector3 getReactionForce();
virtual void setRigidBody(bool rigid);
virtual void AddCompoundChild(KX_IPhysicsController* child);
@@ -55,7 +56,11 @@ public:
virtual SG_Controller* GetReplica(class SG_Node* destnode);
virtual MT_Scalar GetRadius();
-
+
+ virtual float GetLinVelocityMin();
+ virtual void SetLinVelocityMin(float val);
+ virtual float GetLinVelocityMax();
+ virtual void SetLinVelocityMax(float val);
virtual void SetSumoTransform(bool nondynaonly);
// todo: remove next line !
diff --git a/source/gameengine/Ketsji/KX_CDActuator.cpp b/source/gameengine/Ketsji/KX_CDActuator.cpp
index ef7883910fd..121d4512265 100644
--- a/source/gameengine/Ketsji/KX_CDActuator.cpp
+++ b/source/gameengine/Ketsji/KX_CDActuator.cpp
@@ -98,7 +98,7 @@ bool KX_CDActuator::Update()
SND_CDObject::Instance()->SetPlaymode(SND_CD_ALL);
SND_CDObject::Instance()->SetTrack(1);
SND_CDObject::Instance()->SetPlaystate(SND_MUST_PLAY);
- result = true;
+ //result = true;
break;
}
case KX_CDACT_PLAY_TRACK:
@@ -106,7 +106,7 @@ bool KX_CDActuator::Update()
SND_CDObject::Instance()->SetPlaymode(SND_CD_TRACK);
SND_CDObject::Instance()->SetTrack(m_track);
SND_CDObject::Instance()->SetPlaystate(SND_MUST_PLAY);
- result = true;
+ //result = true;
break;
}
case KX_CDACT_LOOP_TRACK:
@@ -114,7 +114,7 @@ bool KX_CDActuator::Update()
SND_CDObject::Instance()->SetPlaymode(SND_CD_ALL);
SND_CDObject::Instance()->SetTrack(m_track);
SND_CDObject::Instance()->SetPlaystate(SND_MUST_PLAY);
- result = true;
+ //result = true;
break;
}
case KX_CDACT_STOP:
@@ -125,19 +125,19 @@ bool KX_CDActuator::Update()
case KX_CDACT_PAUSE:
{
SND_CDObject::Instance()->SetPlaystate(SND_MUST_PAUSE);
- result = true;
+ //result = true;
break;
}
case KX_CDACT_RESUME:
{
SND_CDObject::Instance()->SetPlaystate(SND_MUST_RESUME);
- result = true;
+ //result = true;
break;
}
case KX_CDACT_VOLUME:
{
SND_CDObject::Instance()->SetGain(m_gain);
- result = true;
+ //result = true;
break;
}
default:
@@ -158,22 +158,22 @@ bool KX_CDActuator::Update()
/* Integration hooks ------------------------------------------------------- */
PyTypeObject KX_CDActuator::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"KX_SoundActuator",
- sizeof(KX_CDActuator),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0, //&MyPyCompare,
- __repr,
- 0, //&cvalue_as_number,
0,
0,
0,
- 0
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
@@ -189,54 +189,111 @@ PyParentObject KX_CDActuator::Parents[] = {
PyMethodDef KX_CDActuator::Methods[] = {
- {"startCD",(PyCFunction) KX_CDActuator::sPyStartCD,METH_VARARGS,NULL},
- {"pauseCD",(PyCFunction) KX_CDActuator::sPyPauseCD,METH_VARARGS,NULL},
- {"stopCD",(PyCFunction) KX_CDActuator::sPyStopCD,METH_VARARGS,NULL},
+ // Deprecated ----->
{"setGain",(PyCFunction) KX_CDActuator::sPySetGain,METH_VARARGS,NULL},
{"getGain",(PyCFunction) KX_CDActuator::sPyGetGain,METH_VARARGS,NULL},
+ // <-----
+ KX_PYMETHODTABLE_NOARGS(KX_CDActuator, startCD),
+ KX_PYMETHODTABLE_NOARGS(KX_CDActuator, pauseCD),
+ KX_PYMETHODTABLE_NOARGS(KX_CDActuator, resumeCD),
+ KX_PYMETHODTABLE_NOARGS(KX_CDActuator, stopCD),
+ KX_PYMETHODTABLE_NOARGS(KX_CDActuator, playAll),
+ KX_PYMETHODTABLE_O(KX_CDActuator, playTrack),
{NULL,NULL,NULL,NULL} //Sentinel
};
PyAttributeDef KX_CDActuator::Attributes[] = {
+ KX_PYATTRIBUTE_FLOAT_RW_CHECK("volume", 0.0, 1.0, KX_CDActuator, m_gain,pyattr_setGain),
+ KX_PYATTRIBUTE_INT_RW("track", 1, 99, false, KX_CDActuator, m_track),
{ NULL } //Sentinel
};
-PyObject* KX_CDActuator::_getattr(const char *attr)
+int KX_CDActuator::pyattr_setGain(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef)
{
- _getattr_up(SCA_IActuator);
+ KX_CDActuator* act = static_cast<KX_CDActuator*>(self);
+ SND_CDObject::Instance()->SetGain(act->m_gain);
+ return 0;
}
+PyObject* KX_CDActuator::py_getattro(PyObject *attr)
+{
+ py_getattro_up(SCA_IActuator);
+}
+
+int KX_CDActuator::py_setattro(PyObject *attr, PyObject *value)
+{
+ py_setattro_up(SCA_IActuator);
+}
-PyObject* KX_CDActuator::PyStartCD(PyObject* self, PyObject* args, PyObject* kwds)
+KX_PYMETHODDEF_DOC_NOARGS(KX_CDActuator, startCD,
+"startCD()\n"
+"\tStarts the CD playing.\n")
{
SND_CDObject::Instance()->SetPlaystate(SND_MUST_PLAY);
Py_RETURN_NONE;
}
-
-PyObject* KX_CDActuator::PyPauseCD(PyObject* self, PyObject* args, PyObject* kwds)
+KX_PYMETHODDEF_DOC_NOARGS(KX_CDActuator, pauseCD,
+"pauseCD()\n"
+"\tPauses the CD playing.\n")
{
SND_CDObject::Instance()->SetPlaystate(SND_MUST_PAUSE);
Py_RETURN_NONE;
}
+KX_PYMETHODDEF_DOC_NOARGS(KX_CDActuator, resumeCD,
+"resumeCD()\n"
+"\tResumes the CD playing.\n")
+{
+ SND_CDObject::Instance()->SetPlaystate(SND_MUST_RESUME);
+ Py_RETURN_NONE;
+}
+
-PyObject* KX_CDActuator::PyStopCD(PyObject* self, PyObject* args, PyObject* kwds)
+KX_PYMETHODDEF_DOC_NOARGS(KX_CDActuator, stopCD,
+"stopCD()\n"
+"\tStops the CD playing.\n")
{
SND_CDObject::Instance()->SetPlaystate(SND_MUST_STOP);
Py_RETURN_NONE;
}
+KX_PYMETHODDEF_DOC_O(KX_CDActuator, playTrack,
+"playTrack(trackNumber)\n"
+"\tPlays the track selected.\n")
+{
+ if (PyInt_Check(value)) {
+ int track = PyInt_AsLong(value);
+ SND_CDObject::Instance()->SetPlaymode(SND_CD_TRACK);
+ SND_CDObject::Instance()->SetTrack(track);
+ SND_CDObject::Instance()->SetPlaystate(SND_MUST_PLAY);
+ }
+ Py_RETURN_NONE;
+}
+
+
+
+KX_PYMETHODDEF_DOC_NOARGS(KX_CDActuator, playAll,
+"playAll()\n"
+"\tPlays the CD from the beginning.\n")
+{
+ SND_CDObject::Instance()->SetPlaymode(SND_CD_ALL);
+ SND_CDObject::Instance()->SetTrack(1);
+ SND_CDObject::Instance()->SetPlaystate(SND_MUST_PLAY);
+ Py_RETURN_NONE;
+}
-PyObject* KX_CDActuator::PySetGain(PyObject* self, PyObject* args, PyObject* kwds)
+// Deprecated ----->
+PyObject* KX_CDActuator::PySetGain(PyObject* args)
{
float gain = 1.0;
- if (!PyArg_ParseTuple(args, "f", &gain))
+ ShowDeprecationWarning("setGain()", "the volume property");
+ if (!PyArg_ParseTuple(args, "f:setGain", &gain))
return NULL;
SND_CDObject::Instance()->SetGain(gain);
@@ -246,10 +303,12 @@ PyObject* KX_CDActuator::PySetGain(PyObject* self, PyObject* args, PyObject* kwd
-PyObject* KX_CDActuator::PyGetGain(PyObject* self, PyObject* args, PyObject* kwds)
+PyObject* KX_CDActuator::PyGetGain(PyObject* args)
{
float gain = SND_CDObject::Instance()->GetGain();
+ ShowDeprecationWarning("getGain()", "the volume property");
PyObject* result = PyFloat_FromDouble(gain);
return result;
}
+// <-----
diff --git a/source/gameengine/Ketsji/KX_CDActuator.h b/source/gameengine/Ketsji/KX_CDActuator.h
index 393c49083f9..b674755e59f 100644
--- a/source/gameengine/Ketsji/KX_CDActuator.h
+++ b/source/gameengine/Ketsji/KX_CDActuator.h
@@ -81,13 +81,24 @@ public:
/* Python interface --------------------------------------------------- */
/* -------------------------------------------------------------------- */
- virtual PyObject* _getattr(const char *attr);
+ virtual PyObject* py_getattro(PyObject *attr);
+ virtual int py_setattro(PyObject *attr, PyObject *value);
+
+ // Deprecated ----->
+ KX_PYMETHOD_VARARGS(KX_CDActuator,SetGain);
+ KX_PYMETHOD_VARARGS(KX_CDActuator,GetGain);
+ // <-----
+
+ KX_PYMETHOD_DOC_NOARGS(KX_CDActuator, startCD);
+ KX_PYMETHOD_DOC_NOARGS(KX_CDActuator, pauseCD);
+ KX_PYMETHOD_DOC_NOARGS(KX_CDActuator, resumeCD);
+ KX_PYMETHOD_DOC_NOARGS(KX_CDActuator, stopCD);
+ KX_PYMETHOD_DOC_NOARGS(KX_CDActuator, playAll);
+ KX_PYMETHOD_DOC_O(KX_CDActuator, playTrack);
+
+ static int pyattr_setGain(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
+
- KX_PYMETHOD(KX_CDActuator,StartCD);
- KX_PYMETHOD(KX_CDActuator,PauseCD);
- KX_PYMETHOD(KX_CDActuator,StopCD);
- KX_PYMETHOD(KX_CDActuator,SetGain);
- KX_PYMETHOD(KX_CDActuator,GetGain);
};
#endif //__KX_CDACTUATOR
diff --git a/source/gameengine/Ketsji/KX_Camera.cpp b/source/gameengine/Ketsji/KX_Camera.cpp
index 5caac2fc670..c8575424751 100644
--- a/source/gameengine/Ketsji/KX_Camera.cpp
+++ b/source/gameengine/Ketsji/KX_Camera.cpp
@@ -484,56 +484,53 @@ PyMethodDef KX_Camera::Methods[] = {
};
PyAttributeDef KX_Camera::Attributes[] = {
+
+ KX_PYATTRIBUTE_BOOL_RW("frustum_culling", KX_Camera, m_frustum_culling),
+ KX_PYATTRIBUTE_RW_FUNCTION("perspective", KX_Camera, pyattr_get_perspective, pyattr_set_perspective),
+
+ KX_PYATTRIBUTE_RW_FUNCTION("lens", KX_Camera, pyattr_get_lens, pyattr_set_lens),
+ KX_PYATTRIBUTE_RW_FUNCTION("near", KX_Camera, pyattr_get_near, pyattr_set_near),
+ KX_PYATTRIBUTE_RW_FUNCTION("far", KX_Camera, pyattr_get_far, pyattr_set_far),
+
+ KX_PYATTRIBUTE_RO_FUNCTION("projection_matrix", KX_Camera, pyattr_get_projection_matrix),
+ KX_PYATTRIBUTE_RO_FUNCTION("modelview_matrix", KX_Camera, pyattr_get_modelview_matrix),
+ KX_PYATTRIBUTE_RO_FUNCTION("camera_to_world", KX_Camera, pyattr_get_camera_to_world),
+ KX_PYATTRIBUTE_RO_FUNCTION("world_to_camera", KX_Camera, pyattr_get_world_to_camera),
+
+ /* Grrr, functions for constants? */
+ KX_PYATTRIBUTE_RO_FUNCTION("INSIDE", KX_Camera, pyattr_get_INSIDE),
+ KX_PYATTRIBUTE_RO_FUNCTION("OUTSIDE", KX_Camera, pyattr_get_OUTSIDE),
+ KX_PYATTRIBUTE_RO_FUNCTION("INTERSECT", KX_Camera, pyattr_get_INTERSECT),
+
{ NULL } //Sentinel
};
-char KX_Camera::doc[] = "Module KX_Camera\n\n"
-"Constants:\n"
-"\tINSIDE\n"
-"\tINTERSECT\n"
-"\tOUTSIDE\n"
-"Attributes:\n"
-"\tlens -> float\n"
-"\t\tThe camera's lens value\n"
-"\tnear -> float\n"
-"\t\tThe camera's near clip distance\n"
-"\tfar -> float\n"
-"\t\tThe camera's far clip distance\n"
-"\tfrustum_culling -> bool\n"
-"\t\tNon zero if this camera is frustum culling.\n"
-"\tprojection_matrix -> [[float]]\n"
-"\t\tThis camera's projection matrix.\n"
-"\tmodelview_matrix -> [[float]] (read only)\n"
-"\t\tThis camera's model view matrix.\n"
-"\t\tRegenerated every frame from the camera's position and orientation.\n"
-"\tcamera_to_world -> [[float]] (read only)\n"
-"\t\tThis camera's camera to world transform.\n"
-"\t\tRegenerated every frame from the camera's position and orientation.\n"
-"\tworld_to_camera -> [[float]] (read only)\n"
-"\t\tThis camera's world to camera transform.\n"
-"\t\tRegenerated every frame from the camera's position and orientation.\n"
-"\t\tThis is camera_to_world inverted.\n";
-
PyTypeObject KX_Camera::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"KX_Camera",
- sizeof(KX_Camera),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0, //&MyPyCompare,
- __repr,
- 0, //&cvalue_as_number,
0,
0,
0,
- 0, 0, 0, 0, 0, 0,
- doc
+ py_base_repr,
+ 0,0,
+ &KX_GameObject::Mapping,
+ 0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
+
+
+
+
+
PyParentObject KX_Camera::Parents[] = {
&KX_Camera::Type,
&KX_GameObject::Type,
@@ -542,90 +539,14 @@ PyParentObject KX_Camera::Parents[] = {
NULL
};
-PyObject* KX_Camera::_getattr(const char *attr)
-{
- if (!strcmp(attr, "INSIDE"))
- return PyInt_FromLong(INSIDE); /* new ref */
- if (!strcmp(attr, "OUTSIDE"))
- return PyInt_FromLong(OUTSIDE); /* new ref */
- if (!strcmp(attr, "INTERSECT"))
- return PyInt_FromLong(INTERSECT); /* new ref */
-
- if (!strcmp(attr, "lens"))
- return PyFloat_FromDouble(GetLens()); /* new ref */
- if (!strcmp(attr, "near"))
- return PyFloat_FromDouble(GetCameraNear()); /* new ref */
- if (!strcmp(attr, "far"))
- return PyFloat_FromDouble(GetCameraFar()); /* new ref */
- if (!strcmp(attr, "frustum_culling"))
- return PyInt_FromLong(m_frustum_culling); /* new ref */
- if (!strcmp(attr, "perspective"))
- return PyInt_FromLong(m_camdata.m_perspective); /* new ref */
- if (!strcmp(attr, "projection_matrix"))
- return PyObjectFrom(GetProjectionMatrix()); /* new ref */
- if (!strcmp(attr, "modelview_matrix"))
- return PyObjectFrom(GetModelviewMatrix()); /* new ref */
- if (!strcmp(attr, "camera_to_world"))
- return PyObjectFrom(GetCameraToWorld()); /* new ref */
- if (!strcmp(attr, "world_to_camera"))
- return PyObjectFrom(GetWorldToCamera()); /* new ref */
-
- _getattr_up(KX_GameObject);
-}
-
-int KX_Camera::_setattr(const char *attr, PyObject *pyvalue)
-{
- if (PyInt_Check(pyvalue))
- {
- if (!strcmp(attr, "frustum_culling"))
- {
- m_frustum_culling = PyInt_AsLong(pyvalue);
- return 0;
- }
-
- if (!strcmp(attr, "perspective"))
- {
- m_camdata.m_perspective = PyInt_AsLong(pyvalue);
- return 0;
- }
- }
-
- if (PyFloat_Check(pyvalue))
- {
- if (!strcmp(attr, "lens"))
- {
- m_camdata.m_lens = PyFloat_AsDouble(pyvalue);
- m_set_projection_matrix = false;
- return 0;
- }
- if (!strcmp(attr, "near"))
- {
- m_camdata.m_clipstart = PyFloat_AsDouble(pyvalue);
- m_set_projection_matrix = false;
- return 0;
- }
- if (!strcmp(attr, "far"))
- {
- m_camdata.m_clipend = PyFloat_AsDouble(pyvalue);
- m_set_projection_matrix = false;
- return 0;
- }
- }
-
- if (PyObject_IsMT_Matrix(pyvalue, 4))
- {
- if (!strcmp(attr, "projection_matrix"))
- {
- MT_Matrix4x4 mat;
- if (PyMatTo(pyvalue, mat))
- {
- SetProjectionMatrix(mat);
- return 0;
- }
- return 1;
- }
- }
- return KX_GameObject::_setattr(attr, pyvalue);
+PyObject* KX_Camera::py_getattro(PyObject *attr)
+{
+ py_getattro_up(KX_GameObject);
+}
+
+int KX_Camera::py_setattro(PyObject *attr, PyObject *value)
+{
+ py_setattro_up(KX_GameObject);
}
KX_PYMETHODDEF_DOC_VARARGS(KX_Camera, sphereInsideFrustum,
@@ -648,7 +569,7 @@ KX_PYMETHODDEF_DOC_VARARGS(KX_Camera, sphereInsideFrustum,
{
PyObject *pycenter;
float radius;
- if (PyArg_ParseTuple(args, "Of", &pycenter, &radius))
+ if (PyArg_ParseTuple(args, "Of:sphereInsideFrustum", &pycenter, &radius))
{
MT_Point3 center;
if (PyVecTo(pycenter, center))
@@ -657,7 +578,7 @@ KX_PYMETHODDEF_DOC_VARARGS(KX_Camera, sphereInsideFrustum,
}
}
- PyErr_SetString(PyExc_TypeError, "sphereInsideFrustum: Expected arguments: (center, radius)");
+ PyErr_SetString(PyExc_TypeError, "camera.sphereInsideFrustum(center, radius): KX_Camera, expected arguments: (center, radius)");
return NULL;
}
@@ -690,7 +611,7 @@ KX_PYMETHODDEF_DOC_O(KX_Camera, boxInsideFrustum,
unsigned int num_points = PySequence_Size(value);
if (num_points != 8)
{
- PyErr_Format(PyExc_TypeError, "boxInsideFrustum: Expected eight (8) points, got %d", num_points);
+ PyErr_Format(PyExc_TypeError, "camera.boxInsideFrustum(box): KX_Camera, expected eight (8) points, got %d", num_points);
return NULL;
}
@@ -729,7 +650,7 @@ KX_PYMETHODDEF_DOC_O(KX_Camera, pointInsideFrustum,
return PyInt_FromLong(PointInsideFrustum(point)); /* new ref */
}
- PyErr_SetString(PyExc_TypeError, "pointInsideFrustum: Expected point argument.");
+ PyErr_SetString(PyExc_TypeError, "camera.pointInsideFrustum(point): KX_Camera, expected point argument.");
return NULL;
}
@@ -805,7 +726,7 @@ KX_PYMETHODDEF_DOC_O(KX_Camera, setProjectionMatrix,
MT_Matrix4x4 mat;
if (!PyMatTo(value, mat))
{
- PyErr_SetString(PyExc_TypeError, "setProjectionMatrix: Expected 4x4 list as matrix argument.");
+ PyErr_SetString(PyExc_TypeError, "camera.setProjectionMatrix(matrix): KX_Camera, expected 4x4 list as matrix argument.");
return NULL;
}
@@ -821,7 +742,7 @@ KX_PYMETHODDEF_DOC_O(KX_Camera, enableViewport,
int viewport = PyObject_IsTrue(value);
if (viewport == -1) {
- PyErr_SetString(PyExc_ValueError, "expected True/False or 0/1");
+ PyErr_SetString(PyExc_ValueError, "camera.enableViewport(bool): KX_Camera, expected True/False or 0/1");
return NULL;
}
@@ -856,3 +777,126 @@ KX_PYMETHODDEF_DOC_NOARGS(KX_Camera, setOnTop,
scene->SetCameraOnTop(this);
Py_RETURN_NONE;
}
+
+PyObject* KX_Camera::pyattr_get_perspective(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_Camera* self= static_cast<KX_Camera*>(self_v);
+ return PyBool_FromLong(self->m_camdata.m_perspective);
+}
+
+int KX_Camera::pyattr_set_perspective(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_Camera* self= static_cast<KX_Camera*>(self_v);
+ int param = PyObject_IsTrue( value );
+ if (param == -1) {
+ PyErr_SetString(PyExc_AttributeError, "camera.perspective = bool: KX_Camera, expected True/False or 0/1");
+ return -1;
+ }
+
+ self->m_camdata.m_perspective= param;
+ return 0;
+}
+
+PyObject* KX_Camera::pyattr_get_lens(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_Camera* self= static_cast<KX_Camera*>(self_v);
+ return PyFloat_FromDouble(self->m_camdata.m_lens);
+}
+
+int KX_Camera::pyattr_set_lens(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_Camera* self= static_cast<KX_Camera*>(self_v);
+ float param = PyFloat_AsDouble(value);
+ if (param == -1) {
+ PyErr_SetString(PyExc_AttributeError, "camera.lens = float: KX_Camera, expected a float greater then zero");
+ return -1;
+ }
+
+ self->m_camdata.m_lens= param;
+ self->m_set_projection_matrix = false;
+ return 0;
+}
+
+PyObject* KX_Camera::pyattr_get_near(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_Camera* self= static_cast<KX_Camera*>(self_v);
+ return PyFloat_FromDouble(self->m_camdata.m_clipstart);
+}
+
+int KX_Camera::pyattr_set_near(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_Camera* self= static_cast<KX_Camera*>(self_v);
+ float param = PyFloat_AsDouble(value);
+ if (param == -1) {
+ PyErr_SetString(PyExc_AttributeError, "camera.near = float: KX_Camera, expected a float greater then zero");
+ return -1;
+ }
+
+ self->m_camdata.m_clipstart= param;
+ self->m_set_projection_matrix = false;
+ return 0;
+}
+
+PyObject* KX_Camera::pyattr_get_far(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_Camera* self= static_cast<KX_Camera*>(self_v);
+ return PyFloat_FromDouble(self->m_camdata.m_clipend);
+}
+
+int KX_Camera::pyattr_set_far(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_Camera* self= static_cast<KX_Camera*>(self_v);
+ float param = PyFloat_AsDouble(value);
+ if (param == -1) {
+ PyErr_SetString(PyExc_AttributeError, "camera.far = float: KX_Camera, expected a float greater then zero");
+ return -1;
+ }
+
+ self->m_camdata.m_clipend= param;
+ self->m_set_projection_matrix = false;
+ return 0;
+}
+
+PyObject* KX_Camera::pyattr_get_projection_matrix(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_Camera* self= static_cast<KX_Camera*>(self_v);
+ return PyObjectFrom(self->GetProjectionMatrix());
+}
+
+int KX_Camera::pyattr_set_projection_matrix(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_Camera* self= static_cast<KX_Camera*>(self_v);
+ MT_Matrix4x4 mat;
+ if (!PyMatTo(value, mat))
+ return -1;
+
+ self->SetProjectionMatrix(mat);
+ return 0;
+}
+
+PyObject* KX_Camera::pyattr_get_modelview_matrix(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_Camera* self= static_cast<KX_Camera*>(self_v);
+ return PyObjectFrom(self->GetModelviewMatrix());
+}
+
+PyObject* KX_Camera::pyattr_get_camera_to_world(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_Camera* self= static_cast<KX_Camera*>(self_v);
+ return PyObjectFrom(self->GetCameraToWorld());
+}
+
+PyObject* KX_Camera::pyattr_get_world_to_camera(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_Camera* self= static_cast<KX_Camera*>(self_v);
+ return PyObjectFrom(self->GetWorldToCamera());
+}
+
+
+PyObject* KX_Camera::pyattr_get_INSIDE(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{ return PyInt_FromLong(INSIDE); }
+PyObject* KX_Camera::pyattr_get_OUTSIDE(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{ return PyInt_FromLong(OUTSIDE); }
+PyObject* KX_Camera::pyattr_get_INTERSECT(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{ return PyInt_FromLong(INTERSECT); }
+
diff --git a/source/gameengine/Ketsji/KX_Camera.h b/source/gameengine/Ketsji/KX_Camera.h
index efd18f99390..4accd4bc2f1 100644
--- a/source/gameengine/Ketsji/KX_Camera.h
+++ b/source/gameengine/Ketsji/KX_Camera.h
@@ -45,6 +45,7 @@ class KX_Camera : public KX_GameObject
{
Py_Header;
protected:
+ friend class KX_Scene;
/** Camera parameters (clips distances, focal lenght). These
* params are closely tied to Blender. In the gameengine, only the
* projection and modelview matrices are relevant. There's a
@@ -67,6 +68,7 @@ protected:
* Storage for the projection matrix that is passed to the
* rasterizer. */
MT_Matrix4x4 m_projection_matrix;
+ //MT_Matrix4x4 m_projection_matrix1;
/**
* Storage for the modelview matrix that is passed to the
@@ -108,11 +110,6 @@ protected:
bool m_set_frustum_center;
/**
- * Python module doc string.
- */
- static char doc[];
-
- /**
* Extracts the camera clip frames from the projection and world-to-camera matrices.
*/
void ExtractClipPlanes();
@@ -124,6 +121,16 @@ protected:
* Extracts the bound sphere of the view frustum.
*/
void ExtractFrustumSphere();
+ /**
+ * return the clip plane
+ */
+ MT_Vector4 *GetNormalizedClipPlanes()
+ {
+ ExtractClipPlanes();
+ NormalizeClipPlanes();
+ return m_planes;
+ }
+
public:
enum { INSIDE, INTERSECT, OUTSIDE } ;
@@ -270,9 +277,29 @@ public:
KX_PYMETHOD_DOC_VARARGS(KX_Camera, setViewport);
KX_PYMETHOD_DOC_NOARGS(KX_Camera, setOnTop);
- virtual PyObject* _getattr(const char *attr); /* lens, near, far, projection_matrix */
- virtual int _setattr(const char *attr, PyObject *pyvalue);
+ virtual PyObject* py_getattro(PyObject *attr); /* lens, near, far, projection_matrix */
+ virtual int py_setattro(PyObject *attr, PyObject *pyvalue);
+
+ static PyObject* pyattr_get_perspective(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static int pyattr_set_perspective(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+ static PyObject* pyattr_get_lens(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static int pyattr_set_lens(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+ static PyObject* pyattr_get_near(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static int pyattr_set_near(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+ static PyObject* pyattr_get_far(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static int pyattr_set_far(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+
+ static PyObject* pyattr_get_projection_matrix(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static int pyattr_set_projection_matrix(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+
+ static PyObject* pyattr_get_modelview_matrix(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_camera_to_world(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_world_to_camera(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+
+ static PyObject* pyattr_get_INSIDE(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_OUTSIDE(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_INTERSECT(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
};
#endif //__KX_CAMERA
diff --git a/source/gameengine/Ketsji/KX_CameraActuator.cpp b/source/gameengine/Ketsji/KX_CameraActuator.cpp
index 30ecc5ad441..8ef9f318142 100644
--- a/source/gameengine/Ketsji/KX_CameraActuator.cpp
+++ b/source/gameengine/Ketsji/KX_CameraActuator.cpp
@@ -371,22 +371,22 @@ bool KX_CameraActuator::string2axischoice(const char *axisString)
/* Integration hooks ------------------------------------------------------- */
PyTypeObject KX_CameraActuator::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"KX_CameraActuator",
- sizeof(KX_CameraActuator),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0, //&MyPyCompare,
- __repr,
- 0, //&cvalue_as_number,
0,
0,
0,
- 0
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
PyParentObject KX_CameraActuator::Parents[] = {
@@ -408,7 +408,7 @@ PyMethodDef KX_CameraActuator::Methods[] = {
{"setHeight",(PyCFunction) KX_CameraActuator::sPySetHeight, METH_VARARGS, (PY_METHODCHAR)SetHeight_doc},
{"getHeight",(PyCFunction) KX_CameraActuator::sPyGetHeight, METH_NOARGS, (PY_METHODCHAR)GetHeight_doc},
{"setXY" ,(PyCFunction) KX_CameraActuator::sPySetXY, METH_VARARGS, (PY_METHODCHAR)SetXY_doc},
- {"getXY" ,(PyCFunction) KX_CameraActuator::sPyGetXY, METH_VARARGS, (PY_METHODCHAR)GetXY_doc},
+ {"getXY" ,(PyCFunction) KX_CameraActuator::sPyGetXY, METH_NOARGS, (PY_METHODCHAR)GetXY_doc},
{NULL,NULL,NULL,NULL} //Sentinel
};
@@ -417,47 +417,16 @@ PyAttributeDef KX_CameraActuator::Attributes[] = {
KX_PYATTRIBUTE_FLOAT_RW("max",-FLT_MAX,FLT_MAX,KX_CameraActuator,m_maxHeight),
KX_PYATTRIBUTE_FLOAT_RW("height",-FLT_MAX,FLT_MAX,KX_CameraActuator,m_height),
KX_PYATTRIBUTE_BOOL_RW("xy",KX_CameraActuator,m_x),
+ KX_PYATTRIBUTE_RW_FUNCTION("object", KX_CameraActuator, pyattr_get_object, pyattr_set_object),
{NULL}
};
-PyObject* KX_CameraActuator::_getattr(const char *attr) {
- PyObject* object;
-
- if (!strcmp(attr, "object")) {
- if (!m_ob) Py_RETURN_NONE;
- else return m_ob->AddRef();
- }
-
- object = _getattr_self(Attributes, this, attr);
- if (object != NULL)
- return object;
- _getattr_up(SCA_IActuator);
+PyObject* KX_CameraActuator::py_getattro(PyObject *attr) {
+ py_getattro_up(SCA_IActuator);
}
-int KX_CameraActuator::_setattr(const char *attr, PyObject* value) {
- int ret;
-
- if (!strcmp(attr, "object")) {
- KX_GameObject *gameobj;
-
- if (!ConvertPythonToGameObject(value, &gameobj, true))
- return 1; // ConvertPythonToGameObject sets the error
-
- if (m_ob != NULL)
- m_ob->UnregisterActuator(this);
-
- m_ob = (SCA_IObject*)gameobj;
-
- if (m_ob)
- m_ob->RegisterActuator(this);
-
- return 0;
- }
-
- ret = _setattr_self(Attributes, this, attr, value);
- if (ret >= 0)
- return ret;
- return SCA_IActuator::_setattr(attr, value);
+int KX_CameraActuator::py_setattro(PyObject *attr, PyObject* value) {
+ py_setattro_up(SCA_IActuator);
}
/* get obj ---------------------------------------------------------- */
@@ -465,13 +434,13 @@ const char KX_CameraActuator::GetObject_doc[] =
"getObject(name_only = 1)\n"
"name_only - optional arg, when true will return the KX_GameObject rather then its name\n"
"\tReturns the object this sensor reacts to.\n";
-PyObject* KX_CameraActuator::PyGetObject(PyObject* self, PyObject* args)
+PyObject* KX_CameraActuator::PyGetObject(PyObject* args)
{
int ret_name_only = 1;
ShowDeprecationWarning("getObject()", "the object property");
- if (!PyArg_ParseTuple(args, "|i", &ret_name_only))
+ if (!PyArg_ParseTuple(args, "|i:getObject", &ret_name_only))
return NULL;
if (!m_ob)
@@ -480,20 +449,20 @@ PyObject* KX_CameraActuator::PyGetObject(PyObject* self, PyObject* args)
if (ret_name_only)
return PyString_FromString(m_ob->GetName());
else
- return m_ob->AddRef();
+ return m_ob->GetProxy();
}
/* set obj ---------------------------------------------------------- */
const char KX_CameraActuator::SetObject_doc[] =
"setObject(object)\n"
"\t- object: KX_GameObject, string or None\n"
"\tSets the object this sensor reacts to.\n";
-PyObject* KX_CameraActuator::PySetObject(PyObject* self, PyObject* value)
+PyObject* KX_CameraActuator::PySetObject(PyObject* value)
{
KX_GameObject *gameobj;
ShowDeprecationWarning("setObject()", "the object property");
- if (!ConvertPythonToGameObject(value, &gameobj, true))
+ if (!ConvertPythonToGameObject(value, &gameobj, true, "actuator.setObject(value): KX_CameraActuator"))
return NULL; // ConvertPythonToGameObject sets the error
if (m_ob != NULL)
@@ -510,9 +479,7 @@ PyObject* KX_CameraActuator::PySetObject(PyObject* self, PyObject* value)
const char KX_CameraActuator::GetMin_doc[] =
"getMin\n"
"\tReturns the minimum value set in the Min: field.\n";
-PyObject* KX_CameraActuator::PyGetMin(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_CameraActuator::PyGetMin()
{
ShowDeprecationWarning("getMin()", "the min property");
return PyFloat_FromDouble(m_minHeight);
@@ -521,13 +488,11 @@ PyObject* KX_CameraActuator::PyGetMin(PyObject* self,
const char KX_CameraActuator::SetMin_doc[] =
"setMin\n"
"\tSets the minimum value.\n";
-PyObject* KX_CameraActuator::PySetMin(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_CameraActuator::PySetMin(PyObject* args)
{
ShowDeprecationWarning("setMin()", "the min property");
float min;
- if(PyArg_ParseTuple(args,"f", &min))
+ if(PyArg_ParseTuple(args,"f:setMin", &min))
{
m_minHeight = min;
Py_RETURN_NONE;
@@ -538,9 +503,7 @@ PyObject* KX_CameraActuator::PySetMin(PyObject* self,
const char KX_CameraActuator::GetMax_doc[] =
"getMax\n"
"\tReturns the maximum value set in the Max: field.\n";
-PyObject* KX_CameraActuator::PyGetMax(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_CameraActuator::PyGetMax()
{
ShowDeprecationWarning("getMax()", "the max property");
return PyFloat_FromDouble(m_maxHeight);
@@ -549,13 +512,11 @@ PyObject* KX_CameraActuator::PyGetMax(PyObject* self,
const char KX_CameraActuator::SetMax_doc[] =
"setMax\n"
"\tSets the maximum value.\n";
-PyObject* KX_CameraActuator::PySetMax(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_CameraActuator::PySetMax(PyObject* args)
{
ShowDeprecationWarning("getMax()", "the max property");
float max;
- if(PyArg_ParseTuple(args,"f", &max))
+ if(PyArg_ParseTuple(args,"f:setMax", &max))
{
m_maxHeight = max;
Py_RETURN_NONE;
@@ -566,9 +527,7 @@ PyObject* KX_CameraActuator::PySetMax(PyObject* self,
const char KX_CameraActuator::GetHeight_doc[] =
"getHeight\n"
"\tReturns the height value set in the height: field.\n";
-PyObject* KX_CameraActuator::PyGetHeight(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_CameraActuator::PyGetHeight()
{
ShowDeprecationWarning("getHeight()", "the height property");
return PyFloat_FromDouble(m_height);
@@ -577,13 +536,11 @@ PyObject* KX_CameraActuator::PyGetHeight(PyObject* self,
const char KX_CameraActuator::SetHeight_doc[] =
"setHeight\n"
"\tSets the height value.\n";
-PyObject* KX_CameraActuator::PySetHeight(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_CameraActuator::PySetHeight(PyObject* args)
{
ShowDeprecationWarning("getHeight()", "the height property");
float height;
- if(PyArg_ParseTuple(args,"f", &height))
+ if(PyArg_ParseTuple(args,"f:setHeight", &height))
{
m_height = height;
Py_RETURN_NONE;
@@ -595,13 +552,11 @@ const char KX_CameraActuator::SetXY_doc[] =
"setXY\n"
"\tSets axis the camera tries to get behind.\n"
"\t1=x, 0=y\n";
-PyObject* KX_CameraActuator::PySetXY(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_CameraActuator::PySetXY(PyObject* args)
{
ShowDeprecationWarning("setXY()", "the xy property");
int value;
- if(PyArg_ParseTuple(args,"i", &value))
+ if(PyArg_ParseTuple(args,"i:setXY", &value))
{
m_x = value != 0;
Py_RETURN_NONE;
@@ -614,12 +569,36 @@ const char KX_CameraActuator::GetXY_doc[] =
"getXY\n"
"\tGets the axis the camera tries to get behind.\n"
"\tTrue = X, False = Y\n";
-PyObject* KX_CameraActuator::PyGetXY(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_CameraActuator::PyGetXY()
{
ShowDeprecationWarning("getXY()", "the xy property");
return PyInt_FromLong(m_x);
}
+PyObject* KX_CameraActuator::pyattr_get_object(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_CameraActuator* self= static_cast<KX_CameraActuator*>(self_v);
+ if (self->m_ob==NULL)
+ Py_RETURN_NONE;
+ else
+ return self->m_ob->GetProxy();
+}
+
+int KX_CameraActuator::pyattr_set_object(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_CameraActuator* self= static_cast<KX_CameraActuator*>(self_v);
+ KX_GameObject *gameobj;
+
+ if (!ConvertPythonToGameObject(value, &gameobj, true, "actuator.object = value: KX_CameraActuator"))
+ return 1; // ConvertPythonToGameObject sets the error
+
+ if (self->m_ob)
+ self->m_ob->UnregisterActuator(self);
+
+ if ((self->m_ob = (SCA_IObject*)gameobj))
+ self->m_ob->RegisterActuator(self);
+
+ return 0;
+}
+
/* eof */
diff --git a/source/gameengine/Ketsji/KX_CameraActuator.h b/source/gameengine/Ketsji/KX_CameraActuator.h
index 3b08536fc21..9298e1e868d 100644
--- a/source/gameengine/Ketsji/KX_CameraActuator.h
+++ b/source/gameengine/Ketsji/KX_CameraActuator.h
@@ -120,21 +120,24 @@ private :
/* Python interface ---------------------------------------------------- */
/* --------------------------------------------------------------------- */
- virtual PyObject* _getattr(const char *attr);
- virtual int _setattr(const char *attr, PyObject* value);
+ virtual PyObject* py_getattro(PyObject *attr);
+ virtual int py_setattro(PyObject *attr, PyObject* value);
/* set object to look at */
KX_PYMETHOD_DOC_O(KX_CameraActuator,SetObject);
/* get current object */
KX_PYMETHOD_DOC_VARARGS(KX_CameraActuator,GetObject);
- KX_PYMETHOD_DOC(KX_CameraActuator,SetMin);
- KX_PYMETHOD_DOC(KX_CameraActuator,GetMin);
- KX_PYMETHOD_DOC(KX_CameraActuator,SetMax);
- KX_PYMETHOD_DOC(KX_CameraActuator,GetMax);
- KX_PYMETHOD_DOC(KX_CameraActuator,SetHeight);
- KX_PYMETHOD_DOC(KX_CameraActuator,GetHeight);
- KX_PYMETHOD_DOC(KX_CameraActuator,SetXY);
- KX_PYMETHOD_DOC(KX_CameraActuator,GetXY);
+ KX_PYMETHOD_DOC_VARARGS(KX_CameraActuator,SetMin);
+ KX_PYMETHOD_DOC_NOARGS(KX_CameraActuator,GetMin);
+ KX_PYMETHOD_DOC_VARARGS(KX_CameraActuator,SetMax);
+ KX_PYMETHOD_DOC_NOARGS(KX_CameraActuator,GetMax);
+ KX_PYMETHOD_DOC_VARARGS(KX_CameraActuator,SetHeight);
+ KX_PYMETHOD_DOC_NOARGS(KX_CameraActuator,GetHeight);
+ KX_PYMETHOD_DOC_VARARGS(KX_CameraActuator,SetXY);
+ KX_PYMETHOD_DOC_NOARGS(KX_CameraActuator,GetXY);
+
+ static PyObject* pyattr_get_object(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static int pyattr_set_object(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
};
diff --git a/source/gameengine/Ketsji/KX_ConstraintActuator.cpp b/source/gameengine/Ketsji/KX_ConstraintActuator.cpp
index fba9544d702..c2b4db2de8e 100644
--- a/source/gameengine/Ketsji/KX_ConstraintActuator.cpp
+++ b/source/gameengine/Ketsji/KX_ConstraintActuator.cpp
@@ -57,19 +57,21 @@ KX_ConstraintActuator::KX_ConstraintActuator(SCA_IObject *gameobj,
char *property,
PyTypeObject* T) :
SCA_IActuator(gameobj, T),
- m_refDirection(refDir),
+ m_refDirVector(refDir),
m_currentTime(0)
{
+ m_refDirection[0] = refDir[0];
+ m_refDirection[1] = refDir[1];
+ m_refDirection[2] = refDir[2];
m_posDampTime = posDampTime;
m_rotDampTime = rotDampTime;
m_locrot = locrotxyz;
m_option = option;
m_activeTime = time;
if (property) {
- strncpy(m_property, property, sizeof(m_property));
- m_property[sizeof(m_property)-1] = 0;
+ m_property = property;
} else {
- m_property[0] = 0;
+ m_property = "";
}
/* The units of bounds are determined by the type of constraint. To */
/* make the constraint application easier and more transparent later on, */
@@ -80,13 +82,16 @@ KX_ConstraintActuator::KX_ConstraintActuator(SCA_IObject *gameobj,
case KX_ACT_CONSTRAINT_ORIY:
case KX_ACT_CONSTRAINT_ORIZ:
{
- MT_Scalar len = m_refDirection.length();
+ MT_Scalar len = m_refDirVector.length();
if (MT_fuzzyZero(len)) {
// missing a valid direction
std::cout << "WARNING: Constraint actuator " << GetName() << ": There is no valid reference direction!" << std::endl;
m_locrot = KX_ACT_CONSTRAINT_NODEF;
} else {
- m_refDirection /= len;
+ m_refDirection[0] /= len;
+ m_refDirection[1] /= len;
+ m_refDirection[2] /= len;
+ m_refDirVector /= len;
}
m_minimumBound = cos(minBound);
m_maximumBound = cos(maxBound);
@@ -116,7 +121,7 @@ bool KX_ConstraintActuator::RayHit(KX_ClientObjectInfo* client, KX_RayCast* resu
bool bFound = false;
- if (m_property[0] == 0)
+ if (m_property.IsEmpty())
{
bFound = true;
}
@@ -126,7 +131,7 @@ bool KX_ConstraintActuator::RayHit(KX_ClientObjectInfo* client, KX_RayCast* resu
{
if (client->m_auxilary_info)
{
- bFound = !strcmp(m_property, ((char*)client->m_auxilary_info));
+ bFound = !strcmp(m_property.Ptr(), ((char*)client->m_auxilary_info));
}
}
else
@@ -209,7 +214,7 @@ bool KX_ConstraintActuator::Update(double curtime, bool frame)
if ((m_maximumBound < (1.0f-FLT_EPSILON)) || (m_minimumBound < (1.0f-FLT_EPSILON))) {
// reference direction needs to be evaluated
// 1. get the cosine between current direction and target
- cosangle = direction.dot(m_refDirection);
+ cosangle = direction.dot(m_refDirVector);
if (cosangle >= (m_maximumBound-FLT_EPSILON) && cosangle <= (m_minimumBound+FLT_EPSILON)) {
// no change to do
result = true;
@@ -218,27 +223,27 @@ bool KX_ConstraintActuator::Update(double curtime, bool frame)
// 2. define a new reference direction
// compute local axis with reference direction as X and
// Y in direction X refDirection plane
- MT_Vector3 zaxis = m_refDirection.cross(direction);
+ MT_Vector3 zaxis = m_refDirVector.cross(direction);
if (MT_fuzzyZero2(zaxis.length2())) {
// direction and refDirection are identical,
// choose any other direction to define plane
if (direction[0] < 0.9999)
- zaxis = m_refDirection.cross(MT_Vector3(1.0,0.0,0.0));
+ zaxis = m_refDirVector.cross(MT_Vector3(1.0,0.0,0.0));
else
- zaxis = m_refDirection.cross(MT_Vector3(0.0,1.0,0.0));
+ zaxis = m_refDirVector.cross(MT_Vector3(0.0,1.0,0.0));
}
- MT_Vector3 yaxis = zaxis.cross(m_refDirection);
+ MT_Vector3 yaxis = zaxis.cross(m_refDirVector);
yaxis.normalize();
if (cosangle > m_minimumBound) {
// angle is too close to reference direction,
// choose a new reference that is exactly at minimum angle
- refDirection = m_minimumBound * m_refDirection + m_minimumSine * yaxis;
+ refDirection = m_minimumBound * m_refDirVector + m_minimumSine * yaxis;
} else {
// angle is too large, choose new reference direction at maximum angle
- refDirection = m_maximumBound * m_refDirection + m_maximumSine * yaxis;
+ refDirection = m_maximumBound * m_refDirVector + m_maximumSine * yaxis;
}
} else {
- refDirection = m_refDirection;
+ refDirection = m_refDirVector;
}
// apply damping on the direction
direction = filter*direction + (1.0-filter)*refDirection;
@@ -470,7 +475,7 @@ bool KX_ConstraintActuator::Update(double curtime, bool frame)
// Fh force is stored in m_maximum
MT_Scalar springForce = springExtent * m_maximumBound;
// damping is stored in m_refDirection [0] = damping, [1] = rot damping
- MT_Scalar springDamp = relativeVelocityRay * m_refDirection[0];
+ MT_Scalar springDamp = relativeVelocityRay * m_refDirVector[0];
MT_Vector3 newVelocity = spc->GetLinearVelocity()-(springForce+springDamp)*direction;
if (m_option & KX_ACT_CONSTRAINT_NORMAL)
{
@@ -483,7 +488,7 @@ bool KX_ConstraintActuator::Update(double curtime, bool frame)
MT_Vector3 angVelocity = spc->GetAngularVelocity();
// remove component that is parallel to normal
angVelocity -= angVelocity.dot(newnormal)*newnormal;
- MT_Vector3 angDamp = angVelocity * ((m_refDirection[1]>MT_EPSILON)?m_refDirection[1]:m_refDirection[0]);
+ MT_Vector3 angDamp = angVelocity * ((m_refDirVector[1]>MT_EPSILON)?m_refDirVector[1]:m_refDirVector[0]);
spc->SetAngularVelocity(spc->GetAngularVelocity()+(angSpring-angDamp), false);
}
} else if (m_option & KX_ACT_CONSTRAINT_PERMANENT) {
@@ -560,22 +565,22 @@ bool KX_ConstraintActuator::IsValidMode(KX_ConstraintActuator::KX_CONSTRAINTTYPE
/* Integration hooks ------------------------------------------------------- */
PyTypeObject KX_ConstraintActuator::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"KX_ConstraintActuator",
- sizeof(KX_ConstraintActuator),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0, //&MyPyCompare,
- __repr,
- 0, //&cvalue_as_number,
0,
0,
0,
- 0
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
PyParentObject KX_ConstraintActuator::Parents[] = {
@@ -587,6 +592,7 @@ PyParentObject KX_ConstraintActuator::Parents[] = {
};
PyMethodDef KX_ConstraintActuator::Methods[] = {
+ // Deprecated -->
{"setDamp", (PyCFunction) KX_ConstraintActuator::sPySetDamp, METH_VARARGS, (PY_METHODCHAR)SetDamp_doc},
{"getDamp", (PyCFunction) KX_ConstraintActuator::sPyGetDamp, METH_NOARGS, (PY_METHODCHAR)GetDamp_doc},
{"setRotDamp", (PyCFunction) KX_ConstraintActuator::sPySetRotDamp, METH_VARARGS, (PY_METHODCHAR)SetRotDamp_doc},
@@ -609,15 +615,47 @@ PyMethodDef KX_ConstraintActuator::Methods[] = {
{"getRayLength", (PyCFunction) KX_ConstraintActuator::sPyGetMax, METH_NOARGS, (PY_METHODCHAR)GetRayLength_doc},
{"setLimit", (PyCFunction) KX_ConstraintActuator::sPySetLimit, METH_VARARGS, (PY_METHODCHAR)SetLimit_doc},
{"getLimit", (PyCFunction) KX_ConstraintActuator::sPyGetLimit, METH_NOARGS, (PY_METHODCHAR)GetLimit_doc},
+ // <--
{NULL,NULL} //Sentinel
};
PyAttributeDef KX_ConstraintActuator::Attributes[] = {
+ KX_PYATTRIBUTE_INT_RW("damp",0,100,true,KX_ConstraintActuator,m_posDampTime),
+ KX_PYATTRIBUTE_INT_RW("rotDamp",0,100,true,KX_ConstraintActuator,m_rotDampTime),
+ KX_PYATTRIBUTE_FLOAT_ARRAY_RW_CHECK("direction",-FLT_MAX,FLT_MAX,KX_ConstraintActuator,m_refDirection,3,pyattr_check_direction),
+ KX_PYATTRIBUTE_INT_RW("option",0,0xFFFF,false,KX_ConstraintActuator,m_option),
+ KX_PYATTRIBUTE_INT_RW("time",0,1000,true,KX_ConstraintActuator,m_activeTime),
+ KX_PYATTRIBUTE_STRING_RW("property",0,32,true,KX_ConstraintActuator,m_property),
+ KX_PYATTRIBUTE_FLOAT_RW("min",-FLT_MAX,FLT_MAX,KX_ConstraintActuator,m_minimumBound),
+ KX_PYATTRIBUTE_FLOAT_RW("distance",-FLT_MAX,FLT_MAX,KX_ConstraintActuator,m_minimumBound),
+ KX_PYATTRIBUTE_FLOAT_RW("max",-FLT_MAX,FLT_MAX,KX_ConstraintActuator,m_maximumBound),
+ KX_PYATTRIBUTE_FLOAT_RW("rayLength",0,2000.f,KX_ConstraintActuator,m_maximumBound),
+ KX_PYATTRIBUTE_INT_RW("limit",KX_ConstraintActuator::KX_ACT_CONSTRAINT_NODEF+1,KX_ConstraintActuator::KX_ACT_CONSTRAINT_MAX-1,false,KX_ConstraintActuator,m_locrot),
{ NULL } //Sentinel
};
-PyObject* KX_ConstraintActuator::_getattr(const char *attr) {
- _getattr_up(SCA_IActuator);
+PyObject* KX_ConstraintActuator::py_getattro(PyObject *attr)
+{
+ py_getattro_up(SCA_IActuator);
+}
+
+int KX_ConstraintActuator::py_setattro(PyObject *attr, PyObject* value)
+{
+ py_setattro_up(SCA_IActuator);
+}
+
+
+int KX_ConstraintActuator::pyattr_check_direction(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_ConstraintActuator* act = static_cast<KX_ConstraintActuator*>(self);
+ MT_Vector3 dir(act->m_refDirection);
+ MT_Scalar len = dir.length();
+ if (MT_fuzzyZero(len)) {
+ PyErr_SetString(PyExc_ValueError, "actuator.direction = vec: KX_ConstraintActuator, invalid direction");
+ return 1;
+ }
+ act->m_refDirVector = dir/len;
+ return 0;
}
/* 2. setDamp */
@@ -626,11 +664,10 @@ const char KX_ConstraintActuator::SetDamp_doc[] =
"\t- duration: integer\n"
"\tSets the time constant of the orientation and distance constraint.\n"
"\tIf the duration is negative, it is set to 0.\n";
-PyObject* KX_ConstraintActuator::PySetDamp(PyObject* self,
- PyObject* args,
- PyObject* kwds) {
+PyObject* KX_ConstraintActuator::PySetDamp(PyObject* args) {
+ ShowDeprecationWarning("setDamp()", "the damp property");
int dampArg;
- if(!PyArg_ParseTuple(args, "i", &dampArg)) {
+ if(!PyArg_ParseTuple(args, "i:setDamp", &dampArg)) {
return NULL;
}
@@ -643,7 +680,8 @@ PyObject* KX_ConstraintActuator::PySetDamp(PyObject* self,
const char KX_ConstraintActuator::GetDamp_doc[] =
"getDamp()\n"
"\tReturns the damping parameter.\n";
-PyObject* KX_ConstraintActuator::PyGetDamp(PyObject* self){
+PyObject* KX_ConstraintActuator::PyGetDamp(){
+ ShowDeprecationWarning("getDamp()", "the damp property");
return PyInt_FromLong(m_posDampTime);
}
@@ -653,11 +691,10 @@ const char KX_ConstraintActuator::SetRotDamp_doc[] =
"\t- duration: integer\n"
"\tSets the time constant of the orientation constraint.\n"
"\tIf the duration is negative, it is set to 0.\n";
-PyObject* KX_ConstraintActuator::PySetRotDamp(PyObject* self,
- PyObject* args,
- PyObject* kwds) {
+PyObject* KX_ConstraintActuator::PySetRotDamp(PyObject* args) {
+ ShowDeprecationWarning("setRotDamp()", "the rotDamp property");
int dampArg;
- if(!PyArg_ParseTuple(args, "i", &dampArg)) {
+ if(!PyArg_ParseTuple(args, "i:setRotDamp", &dampArg)) {
return NULL;
}
@@ -670,7 +707,8 @@ PyObject* KX_ConstraintActuator::PySetRotDamp(PyObject* self,
const char KX_ConstraintActuator::GetRotDamp_doc[] =
"getRotDamp()\n"
"\tReturns the damping time for application of the constraint.\n";
-PyObject* KX_ConstraintActuator::PyGetRotDamp(PyObject* self){
+PyObject* KX_ConstraintActuator::PyGetRotDamp(){
+ ShowDeprecationWarning("getRotDamp()", "the rotDamp property");
return PyInt_FromLong(m_rotDampTime);
}
@@ -679,14 +717,13 @@ const char KX_ConstraintActuator::SetDirection_doc[] =
"setDirection(vector)\n"
"\t- vector: 3-tuple\n"
"\tSets the reference direction in world coordinate for the orientation constraint.\n";
-PyObject* KX_ConstraintActuator::PySetDirection(PyObject* self,
- PyObject* args,
- PyObject* kwds) {
+PyObject* KX_ConstraintActuator::PySetDirection(PyObject* args) {
+ ShowDeprecationWarning("setDirection()", "the direction property");
float x, y, z;
MT_Scalar len;
MT_Vector3 dir;
- if(!PyArg_ParseTuple(args, "(fff)", &x, &y, &z)) {
+ if(!PyArg_ParseTuple(args, "(fff):setDirection", &x, &y, &z)) {
return NULL;
}
dir[0] = x;
@@ -697,7 +734,10 @@ PyObject* KX_ConstraintActuator::PySetDirection(PyObject* self,
std::cout << "Invalid direction" << std::endl;
return NULL;
}
- m_refDirection = dir/len;
+ m_refDirVector = dir/len;
+ m_refDirection[0] = x/len;
+ m_refDirection[1] = y/len;
+ m_refDirection[2] = z/len;
Py_RETURN_NONE;
}
@@ -705,7 +745,8 @@ PyObject* KX_ConstraintActuator::PySetDirection(PyObject* self,
const char KX_ConstraintActuator::GetDirection_doc[] =
"getDirection()\n"
"\tReturns the reference direction of the orientation constraint as a 3-tuple.\n";
-PyObject* KX_ConstraintActuator::PyGetDirection(PyObject* self){
+PyObject* KX_ConstraintActuator::PyGetDirection(){
+ ShowDeprecationWarning("getDirection()", "the direction property");
PyObject *retVal = PyList_New(3);
PyList_SetItem(retVal, 0, PyFloat_FromDouble(m_refDirection[0]));
@@ -724,11 +765,10 @@ const char KX_ConstraintActuator::SetOption_doc[] =
"\t\t128 : Detect material rather than property\n"
"\t\t256 : No deactivation if ray does not hit target\n"
"\t\t512 : Activate distance control\n";
-PyObject* KX_ConstraintActuator::PySetOption(PyObject* self,
- PyObject* args,
- PyObject* kwds) {
+PyObject* KX_ConstraintActuator::PySetOption(PyObject* args) {
+ ShowDeprecationWarning("setOption()", "the option property");
int option;
- if(!PyArg_ParseTuple(args, "i", &option)) {
+ if(!PyArg_ParseTuple(args, "i:setOption", &option)) {
return NULL;
}
@@ -740,7 +780,8 @@ PyObject* KX_ConstraintActuator::PySetOption(PyObject* self,
const char KX_ConstraintActuator::GetOption_doc[] =
"getOption()\n"
"\tReturns the option parameter.\n";
-PyObject* KX_ConstraintActuator::PyGetOption(PyObject* self){
+PyObject* KX_ConstraintActuator::PyGetOption(){
+ ShowDeprecationWarning("getOption()", "the option property");
return PyInt_FromLong(m_option);
}
@@ -751,11 +792,10 @@ const char KX_ConstraintActuator::SetTime_doc[] =
"\tSets the activation time of the actuator.\n"
"\tThe actuator disables itself after this many frame.\n"
"\tIf set to 0 or negative, the actuator is not limited in time.\n";
-PyObject* KX_ConstraintActuator::PySetTime(PyObject* self,
- PyObject* args,
- PyObject* kwds) {
+PyObject* KX_ConstraintActuator::PySetTime(PyObject* args) {
+ ShowDeprecationWarning("setTime()", "the time property");
int t;
- if(!PyArg_ParseTuple(args, "i", &t)) {
+ if(!PyArg_ParseTuple(args, "i:setTime", &t)) {
return NULL;
}
@@ -769,7 +809,8 @@ PyObject* KX_ConstraintActuator::PySetTime(PyObject* self,
const char KX_ConstraintActuator::GetTime_doc[] =
"getTime()\n"
"\tReturns the time parameter.\n";
-PyObject* KX_ConstraintActuator::PyGetTime(PyObject* self){
+PyObject* KX_ConstraintActuator::PyGetTime(){
+ ShowDeprecationWarning("getTime()", "the time property");
return PyInt_FromLong(m_activeTime);
}
@@ -779,18 +820,16 @@ const char KX_ConstraintActuator::SetProperty_doc[] =
"\t- property: string\n"
"\tSets the name of the property or material for the ray detection of the distance constraint.\n"
"\tIf empty, the ray will detect any collisioning object.\n";
-PyObject* KX_ConstraintActuator::PySetProperty(PyObject* self,
- PyObject* args,
- PyObject* kwds) {
+PyObject* KX_ConstraintActuator::PySetProperty(PyObject* args) {
+ ShowDeprecationWarning("setProperty()", "the 'property' property");
char *property;
- if (!PyArg_ParseTuple(args, "s", &property)) {
+ if (!PyArg_ParseTuple(args, "s:setProperty", &property)) {
return NULL;
}
if (property == NULL) {
- m_property[0] = 0;
+ m_property = "";
} else {
- strncpy(m_property, property, sizeof(m_property));
- m_property[sizeof(m_property)-1] = 0;
+ m_property = property;
}
Py_RETURN_NONE;
@@ -799,8 +838,9 @@ PyObject* KX_ConstraintActuator::PySetProperty(PyObject* self,
const char KX_ConstraintActuator::GetProperty_doc[] =
"getProperty()\n"
"\tReturns the property parameter.\n";
-PyObject* KX_ConstraintActuator::PyGetProperty(PyObject* self){
- return PyString_FromString(m_property);
+PyObject* KX_ConstraintActuator::PyGetProperty(){
+ ShowDeprecationWarning("getProperty()", "the 'property' property");
+ return PyString_FromString(m_property.Ptr());
}
/* 4. setDistance */
@@ -814,11 +854,10 @@ const char KX_ConstraintActuator::SetMin_doc[] =
"\t- lower_bound: float\n"
"\tSets the lower value of the interval to which the value\n"
"\tis clipped.\n";
-PyObject* KX_ConstraintActuator::PySetMin(PyObject* self,
- PyObject* args,
- PyObject* kwds) {
+PyObject* KX_ConstraintActuator::PySetMin(PyObject* args) {
+ ShowDeprecationWarning("setMin() or setDistance()", "the min or distance property");
float minArg;
- if(!PyArg_ParseTuple(args, "f", &minArg)) {
+ if(!PyArg_ParseTuple(args, "f:setMin", &minArg)) {
return NULL;
}
@@ -844,7 +883,8 @@ const char KX_ConstraintActuator::GetMin_doc[] =
"getMin()\n"
"\tReturns the lower value of the interval to which the value\n"
"\tis clipped.\n";
-PyObject* KX_ConstraintActuator::PyGetMin(PyObject* self) {
+PyObject* KX_ConstraintActuator::PyGetMin() {
+ ShowDeprecationWarning("getMin() or getDistance()", "the min or distance property");
return PyFloat_FromDouble(m_minimumBound);
}
@@ -859,11 +899,10 @@ const char KX_ConstraintActuator::SetMax_doc[] =
"\t- upper_bound: float\n"
"\tSets the upper value of the interval to which the value\n"
"\tis clipped.\n";
-PyObject* KX_ConstraintActuator::PySetMax(PyObject* self,
- PyObject* args,
- PyObject* kwds){
+PyObject* KX_ConstraintActuator::PySetMax(PyObject* args){
+ ShowDeprecationWarning("setMax() or setRayLength()", "the max or rayLength property");
float maxArg;
- if(!PyArg_ParseTuple(args, "f", &maxArg)) {
+ if(!PyArg_ParseTuple(args, "f:setMax", &maxArg)) {
return NULL;
}
@@ -889,7 +928,8 @@ const char KX_ConstraintActuator::GetMax_doc[] =
"getMax()\n"
"\tReturns the upper value of the interval to which the value\n"
"\tis clipped.\n";
-PyObject* KX_ConstraintActuator::PyGetMax(PyObject* self) {
+PyObject* KX_ConstraintActuator::PyGetMax() {
+ ShowDeprecationWarning("getMax() or getRayLength()", "the max or rayLength property");
return PyFloat_FromDouble(m_maximumBound);
}
@@ -912,11 +952,10 @@ const char KX_ConstraintActuator::SetLimit_doc[] =
"\t 14 : Align Y axis\n"
"\t 15 : Align Z axis\n"
"\tSets the type of constraint.\n";
-PyObject* KX_ConstraintActuator::PySetLimit(PyObject* self,
- PyObject* args,
- PyObject* kwds) {
+PyObject* KX_ConstraintActuator::PySetLimit(PyObject* args) {
+ ShowDeprecationWarning("setLimit()", "the limit property");
int locrotArg;
- if(!PyArg_ParseTuple(args, "i", &locrotArg)) {
+ if(!PyArg_ParseTuple(args, "i:setLimit", &locrotArg)) {
return NULL;
}
@@ -928,7 +967,8 @@ PyObject* KX_ConstraintActuator::PySetLimit(PyObject* self,
const char KX_ConstraintActuator::GetLimit_doc[] =
"getLimit()\n"
"\tReturns the type of constraint.\n";
-PyObject* KX_ConstraintActuator::PyGetLimit(PyObject* self) {
+PyObject* KX_ConstraintActuator::PyGetLimit() {
+ ShowDeprecationWarning("setLimit()", "the limit property");
return PyInt_FromLong(m_locrot);
}
diff --git a/source/gameengine/Ketsji/KX_ConstraintActuator.h b/source/gameengine/Ketsji/KX_ConstraintActuator.h
index 132b8a7328a..98f6fcd7906 100644
--- a/source/gameengine/Ketsji/KX_ConstraintActuator.h
+++ b/source/gameengine/Ketsji/KX_ConstraintActuator.h
@@ -56,7 +56,8 @@ protected:
// sinus of maximum angle
float m_maximumSine;
// reference direction
- MT_Vector3 m_refDirection;
+ float m_refDirection[3];
+ MT_Vector3 m_refDirVector; // same as m_refDirection
// locrotxyz choice (pick one): only one choice allowed at a time!
int m_locrot;
// active time of actuator
@@ -65,7 +66,7 @@ protected:
// option
int m_option;
// property to check
- char m_property[32];
+ STR_String m_property;
// hit object
KX_GameObject* m_hitObject;
@@ -142,29 +143,33 @@ protected:
/* Python interface ---------------------------------------------------- */
/* --------------------------------------------------------------------- */
- virtual PyObject* _getattr(const char *attr);
+ virtual PyObject* py_getattro(PyObject *attr);
+ virtual int py_setattro(PyObject *attr, PyObject* value);
- KX_PYMETHOD_DOC(KX_ConstraintActuator,SetDamp);
+ static int pyattr_check_direction(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
+ static int pyattr_check_min(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
+
+ KX_PYMETHOD_DOC_VARARGS(KX_ConstraintActuator,SetDamp);
KX_PYMETHOD_DOC_NOARGS(KX_ConstraintActuator,GetDamp);
- KX_PYMETHOD_DOC(KX_ConstraintActuator,SetRotDamp);
+ KX_PYMETHOD_DOC_VARARGS(KX_ConstraintActuator,SetRotDamp);
KX_PYMETHOD_DOC_NOARGS(KX_ConstraintActuator,GetRotDamp);
- KX_PYMETHOD_DOC(KX_ConstraintActuator,SetDirection);
+ KX_PYMETHOD_DOC_VARARGS(KX_ConstraintActuator,SetDirection);
KX_PYMETHOD_DOC_NOARGS(KX_ConstraintActuator,GetDirection);
- KX_PYMETHOD_DOC(KX_ConstraintActuator,SetOption);
+ KX_PYMETHOD_DOC_VARARGS(KX_ConstraintActuator,SetOption);
KX_PYMETHOD_DOC_NOARGS(KX_ConstraintActuator,GetOption);
- KX_PYMETHOD_DOC(KX_ConstraintActuator,SetTime);
+ KX_PYMETHOD_DOC_VARARGS(KX_ConstraintActuator,SetTime);
KX_PYMETHOD_DOC_NOARGS(KX_ConstraintActuator,GetTime);
- KX_PYMETHOD_DOC(KX_ConstraintActuator,SetProperty);
+ KX_PYMETHOD_DOC_VARARGS(KX_ConstraintActuator,SetProperty);
KX_PYMETHOD_DOC_NOARGS(KX_ConstraintActuator,GetProperty);
- KX_PYMETHOD_DOC(KX_ConstraintActuator,SetMin);
+ KX_PYMETHOD_DOC_VARARGS(KX_ConstraintActuator,SetMin);
KX_PYMETHOD_DOC_NOARGS(KX_ConstraintActuator,GetMin);
static const char SetDistance_doc[];
static const char GetDistance_doc[];
- KX_PYMETHOD_DOC(KX_ConstraintActuator,SetMax);
+ KX_PYMETHOD_DOC_VARARGS(KX_ConstraintActuator,SetMax);
KX_PYMETHOD_DOC_NOARGS(KX_ConstraintActuator,GetMax);
static const char SetRayLength_doc[];
static const char GetRayLength_doc[];
- KX_PYMETHOD_DOC(KX_ConstraintActuator,SetLimit);
+ KX_PYMETHOD_DOC_VARARGS(KX_ConstraintActuator,SetLimit);
KX_PYMETHOD_DOC_NOARGS(KX_ConstraintActuator,GetLimit);
};
diff --git a/source/gameengine/Ketsji/KX_ConstraintWrapper.cpp b/source/gameengine/Ketsji/KX_ConstraintWrapper.cpp
index f014c1896fe..7c3abb49159 100644
--- a/source/gameengine/Ketsji/KX_ConstraintWrapper.cpp
+++ b/source/gameengine/Ketsji/KX_ConstraintWrapper.cpp
@@ -49,17 +49,12 @@ KX_ConstraintWrapper::~KX_ConstraintWrapper()
{
}
//python integration methods
-PyObject* KX_ConstraintWrapper::PyTestMethod(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_ConstraintWrapper::PyTestMethod(PyObject* args, PyObject* kwds)
{
-
Py_RETURN_NONE;
}
-PyObject* KX_ConstraintWrapper::PyGetConstraintId(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_ConstraintWrapper::PyGetConstraintId(PyObject* args, PyObject* kwds)
{
return PyInt_FromLong(m_constraintId);
}
@@ -69,22 +64,22 @@ PyObject* KX_ConstraintWrapper::PyGetConstraintId(PyObject* self,
//python specific stuff
PyTypeObject KX_ConstraintWrapper::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"KX_ConstraintWrapper",
- sizeof(KX_ConstraintWrapper),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0, //&MyPyCompare,
- __repr,
- 0, //&cvalue_as_number,
0,
0,
0,
- 0
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
PyParentObject KX_ConstraintWrapper::Parents[] = {
@@ -92,16 +87,16 @@ PyParentObject KX_ConstraintWrapper::Parents[] = {
NULL
};
-PyObject* KX_ConstraintWrapper::_getattr(const char *attr)
+PyObject* KX_ConstraintWrapper::py_getattro(PyObject *attr)
{
//here you can search for existing data members (like mass,friction etc.)
- _getattr_up(PyObjectPlus);
+ py_getattro_up(PyObjectPlus);
}
-int KX_ConstraintWrapper::_setattr(const char *attr,PyObject* pyobj)
+int KX_ConstraintWrapper::py_setattro(PyObject *attr,PyObject* pyobj)
{
int result = 1;
-
+ /* what the heck is this supposed to do?, needs attention */
if (PyList_Check(pyobj))
{
result = 0;
@@ -120,7 +115,7 @@ int KX_ConstraintWrapper::_setattr(const char *attr,PyObject* pyobj)
result = 0;
}
if (result)
- result = PyObjectPlus::_setattr(attr,pyobj);
+ result = PyObjectPlus::py_setattro(attr,pyobj);
return result;
};
diff --git a/source/gameengine/Ketsji/KX_ConstraintWrapper.h b/source/gameengine/Ketsji/KX_ConstraintWrapper.h
index 36606d2d67b..6e67d842cb6 100644
--- a/source/gameengine/Ketsji/KX_ConstraintWrapper.h
+++ b/source/gameengine/Ketsji/KX_ConstraintWrapper.h
@@ -35,8 +35,8 @@
class KX_ConstraintWrapper : public PyObjectPlus
{
Py_Header;
- virtual PyObject* _getattr(const char *attr);
- virtual int _setattr(const char *attr, PyObject *value);
+ virtual PyObject* py_getattro(PyObject *attr);
+ virtual int py_setattro(PyObject *attr, PyObject *value);
public:
KX_ConstraintWrapper(PHY_ConstraintType ctype,int constraintId,class PHY_IPhysicsEnvironment* physenv,PyTypeObject *T = &Type);
virtual ~KX_ConstraintWrapper ();
diff --git a/source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp b/source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp
index 602486e0017..08e2ea30414 100644
--- a/source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp
+++ b/source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp
@@ -801,6 +801,8 @@ void KX_ConvertBulletObject( class KX_GameObject* gameobj,
ci.m_gravity = btVector3(0,0,0);
ci.m_localInertiaTensor =btVector3(0,0,0);
ci.m_mass = objprop->m_dyna ? shapeprops->m_mass : 0.f;
+ ci.m_clamp_vel_min = shapeprops->m_clamp_vel_min;
+ ci.m_clamp_vel_max = shapeprops->m_clamp_vel_max;
ci.m_margin = objprop->m_margin;
shapeInfo->m_radius = objprop->m_radius;
isbulletdyna = objprop->m_dyna;
@@ -881,8 +883,10 @@ void KX_ConvertBulletObject( class KX_GameObject* gameobj,
{
shapeInfo->SetMesh(meshobj, false,false);
}
+
+ // Soft bodies require welding. Only avoid remove doubles for non-soft bodies!
if (objprop->m_softbody)
- shapeInfo->setVertexWeldingThreshold(0.01f); //todo: expose this to the UI
+ shapeInfo->setVertexWeldingThreshold1(0.01f); //todo: expose this to the UI
bm = shapeInfo->CreateBulletShape();
//no moving concave meshes, so don't bother calculating inertia
@@ -1103,16 +1107,19 @@ void KX_ConvertBulletObject( class KX_GameObject* gameobj,
if (rbody)
{
- btVector3 linearFactor(
- objprop->m_lockXaxis? 0 : 1,
- objprop->m_lockYaxis? 0 : 1,
- objprop->m_lockZaxis? 0 : 1);
- btVector3 angularFactor(
- objprop->m_lockXRotaxis? 0 : 1,
- objprop->m_lockYRotaxis? 0 : 1,
- objprop->m_lockZRotaxis? 0 : 1);
- rbody->setLinearFactor(linearFactor);
- rbody->setAngularFactor(angularFactor);
+ if (objprop->m_angular_rigidbody)
+ {
+ btVector3 linearFactor(
+ objprop->m_lockXaxis? 0 : 1,
+ objprop->m_lockYaxis? 0 : 1,
+ objprop->m_lockZaxis? 0 : 1);
+ btVector3 angularFactor(
+ objprop->m_lockXRotaxis? 0 : 1,
+ objprop->m_lockYRotaxis? 0 : 1,
+ objprop->m_lockZRotaxis? 0 : 1);
+ rbody->setLinearFactor(linearFactor);
+ rbody->setAngularFactor(angularFactor);
+ }
if (rbody && objprop->m_disableSleeping)
{
diff --git a/source/gameengine/Ketsji/KX_Dome.cpp b/source/gameengine/Ketsji/KX_Dome.cpp
new file mode 100644
index 00000000000..321370f9f3f
--- /dev/null
+++ b/source/gameengine/Ketsji/KX_Dome.cpp
@@ -0,0 +1,1819 @@
+/* $Id$
+-----------------------------------------------------------------------------
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+
+Contributor(s): Dalai Felinto
+
+This code is originally inspired on some of the ideas and codes from Paul Bourke.
+Developed as part of a Research and Development project for SAT - La Société des arts technologiques.
+-----------------------------------------------------------------------------
+*/
+
+#include "KX_Dome.h"
+
+#include <structmember.h>
+#include <float.h>
+#include <math.h>
+
+#include "DNA_scene_types.h"
+#include "RAS_CameraData.h"
+#include "BLI_arithb.h"
+
+#include "GL/glew.h"
+
+// constructor
+KX_Dome::KX_Dome (
+ RAS_ICanvas* canvas,
+ /// rasterizer
+ RAS_IRasterizer* rasterizer,
+ /// render tools
+ RAS_IRenderTools* rendertools,
+ /// engine
+ KX_KetsjiEngine* engine,
+
+ float size, //size for adjustments
+ short res, //resolution of the mesh
+ short mode, //mode - fisheye, truncated, warped, panoramic, ...
+ short angle,
+ float resbuf, //size adjustment of the buffer
+ struct Text* warptext
+
+):
+ m_canvas(canvas),
+ m_rasterizer(rasterizer),
+ m_rendertools(rendertools),
+ m_engine(engine),
+ m_drawingmode(engine->GetDrawType()),
+ m_size(size),
+ m_resolution(res),
+ m_mode(mode),
+ m_angle(angle),
+ m_resbuffer(resbuf),
+ canvaswidth(-1), canvasheight(-1),
+ dlistSupported(false)
+{
+ warp.usemesh = false;
+
+ if (mode >= DOME_NUM_MODES)
+ m_mode = DOME_FISHEYE;
+
+ if (warptext) // it there is a text data try to warp it
+ {
+ char *buf;
+ buf = txt_to_buf(warptext);
+ if (buf)
+ {
+ warp.usemesh = ParseWarpMesh(STR_String(buf));
+ MEM_freeN(buf);
+ }
+ }
+
+ //setting the viewport size
+ GLuint viewport[4]={0};
+ glGetIntegerv(GL_VIEWPORT,(GLint *)viewport);
+
+ SetViewPort(viewport);
+
+ switch(m_mode){
+ case DOME_FISHEYE:
+ if (m_angle <= 180){
+ cubetop.resize(1);
+ cubebottom.resize(1);
+ cubeleft.resize(2);
+ cuberight.resize(2);
+
+ CreateMeshDome180();
+ m_numfaces = 4;
+ }else if (m_angle > 180){
+ cubetop.resize(2);
+ cubebottom.resize(2);
+ cubeleft.resize(2);
+ cubefront.resize(2);
+ cuberight.resize(2);
+
+ CreateMeshDome250();
+ m_numfaces = 5;
+ } break;
+ case DOME_TRUNCATED:
+ cubetop.resize(1);
+ cubebottom.resize(1);
+ cubeleft.resize(2);
+ cuberight.resize(2);
+
+ m_angle = 180;
+ CreateMeshDome180();
+ m_numfaces = 4;
+ break;
+ case DOME_PANORAM_SPH:
+ cubeleft.resize(2);
+ cubeleftback.resize(2);
+ cuberight.resize(2);
+ cuberightback.resize(2);
+ cubetop.resize(2);
+ cubebottom.resize(2);
+
+ m_angle = 360;
+ CreateMeshPanorama();
+ m_numfaces = 6;
+ break;
+ }
+
+ m_numimages =(warp.usemesh?m_numfaces+1:m_numfaces);
+
+ CalculateCameraOrientation();
+
+ CreateGLImages();
+
+ dlistSupported = CreateDL();
+}
+
+// destructor
+KX_Dome::~KX_Dome (void)
+{
+ GLuint m_numimages = m_numfaces;
+
+ ClearGLImages();
+
+ if(dlistSupported)
+ glDeleteLists(dlistId, (GLsizei) m_numimages);
+}
+
+void KX_Dome::SetViewPort(GLuint viewport[4])
+{
+ if(canvaswidth != m_canvas->GetWidth() || canvasheight != m_canvas->GetHeight())
+ {
+ m_viewport.SetLeft(viewport[0]);
+ m_viewport.SetBottom(viewport[1]);
+ m_viewport.SetRight(viewport[2]);
+ m_viewport.SetTop(viewport[3]);
+
+ CalculateImageSize();
+ }
+}
+
+void KX_Dome::CreateGLImages(void)
+{
+ glGenTextures(m_numimages, (GLuint*)&domefacesId);
+
+ for (int j=0;j<m_numfaces;j++){
+ glBindTexture(GL_TEXTURE_2D, domefacesId[j]);
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, m_imagesize, m_imagesize, 0, GL_RGB8,
+ GL_UNSIGNED_BYTE, 0);
+ glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 0, 0, m_imagesize, m_imagesize, 0);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+ }
+ if(warp.usemesh){
+ glBindTexture(GL_TEXTURE_2D, domefacesId[m_numfaces]);
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, warp.imagewidth, warp.imageheight, 0, GL_RGB8,
+ GL_UNSIGNED_BYTE, 0);
+ glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 0, 0, warp.imagewidth, warp.imageheight, 0);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+ }
+}
+
+void KX_Dome::ClearGLImages(void)
+{
+ glDeleteTextures(m_numimages, (GLuint*)&domefacesId);
+/*
+ for (int i=0;i<m_numimages;i++)
+ if(glIsTexture(domefacesId[i]))
+ glDeleteTextures(1, (GLuint*)&domefacesId[i]);
+*/
+}
+
+void KX_Dome::CalculateImageSize(void)
+{
+/*
+- determine the minimum buffer size
+- reduce the buffer for better performace
+- create a power of 2 texture bigger than the buffer
+*/
+
+ canvaswidth = m_canvas->GetWidth();
+ canvasheight = m_canvas->GetHeight();
+
+ m_buffersize = (canvaswidth > canvasheight?canvasheight:canvaswidth);
+ m_buffersize *= m_resbuffer; //reduce buffer size for better performance
+
+ int i = 0;
+ while ((1 << i) <= m_buffersize)
+ i++;
+ m_imagesize = (1 << i);
+
+ if (warp.usemesh){
+ warp.bufferwidth = canvaswidth;
+ warp.bufferheight = canvasheight;
+
+ i = 0;
+ while ((1 << i) <= warp.bufferwidth)
+ i++;
+ warp.imagewidth = (1 << i);
+
+ i = 0;
+ while ((1 << i) <= warp.bufferheight)
+ i++;
+ warp.imageheight = (1 << i);
+ }
+}
+
+bool KX_Dome::CreateDL(){
+ int i,j;
+
+ dlistId = glGenLists((GLsizei) m_numimages);
+ if (dlistId != 0) {
+ if(m_mode == DOME_FISHEYE || m_mode == DOME_TRUNCATED){
+ glNewList(dlistId, GL_COMPILE);
+ GLDrawTriangles(cubetop, nfacestop);
+ glEndList();
+
+ glNewList(dlistId+1, GL_COMPILE);
+ GLDrawTriangles(cubebottom, nfacesbottom);
+ glEndList();
+
+ glNewList(dlistId+2, GL_COMPILE);
+ GLDrawTriangles(cubeleft, nfacesleft);
+ glEndList();
+
+ glNewList(dlistId+3, GL_COMPILE);
+ GLDrawTriangles(cuberight, nfacesright);
+ glEndList();
+
+ if (m_angle > 180){
+ glNewList(dlistId+4, GL_COMPILE);
+ GLDrawTriangles(cubefront, nfacesfront);
+ glEndList();
+ }
+ }
+ else if (m_mode == DOME_PANORAM_SPH)
+ {
+ glNewList(dlistId, GL_COMPILE);
+ GLDrawTriangles(cubetop, nfacestop);
+ glEndList();
+
+ glNewList(dlistId+1, GL_COMPILE);
+ GLDrawTriangles(cubebottom, nfacesbottom);
+ glEndList();
+
+ glNewList(dlistId+2, GL_COMPILE);
+ GLDrawTriangles(cubeleft, nfacesleft);
+ glEndList();
+
+ glNewList(dlistId+3, GL_COMPILE);
+ GLDrawTriangles(cuberight, nfacesright);
+ glEndList();
+
+ glNewList(dlistId+4, GL_COMPILE);
+ GLDrawTriangles(cubeleftback, nfacesleftback);
+ glEndList();
+
+ glNewList(dlistId+5, GL_COMPILE);
+ GLDrawTriangles(cuberightback, nfacesrightback);
+ glEndList();
+ }
+
+ if(warp.usemesh){
+ glNewList((dlistId + m_numfaces), GL_COMPILE);
+ GLDrawWarpQuads();
+ glEndList();
+ }
+
+ //clearing the vectors
+ cubetop.clear();
+ cubebottom.clear();
+ cuberight.clear();
+ cubeleft.clear();
+ cubefront.clear();
+ cubeleftback.clear();
+ cuberightback.clear();
+ warp.nodes.clear();
+
+ } else // genList failed
+ return false;
+
+ return true;
+}
+
+void KX_Dome::GLDrawTriangles(vector <DomeFace>& face, int nfaces)
+{
+ int i,j;
+ glBegin(GL_TRIANGLES);
+ for (i=0;i<nfaces;i++) {
+ for (j=0;j<3;j++) {
+ glTexCoord2f(face[i].u[j],face[i].v[j]);
+ glVertex3f((GLfloat)face[i].verts[j][0],(GLfloat)face[i].verts[j][1],(GLfloat)face[i].verts[j][2]);
+ }
+ }
+ glEnd();
+}
+
+void KX_Dome::GLDrawWarpQuads(void)
+{
+ int i, j, i2;
+ float uv_width = (float)(warp.bufferwidth-1) / warp.imagewidth;
+ float uv_height = (float)(warp.bufferheight-1) / warp.imageheight;
+
+ if(warp.mode ==2 ){
+ glBegin(GL_QUADS);
+ for (i=0;i<warp.n_height-1;i++) {
+ for (j=0;j<warp.n_width-1;j++) {
+ if(warp.nodes[i][j].i < 0 || warp.nodes[i+1][j].i < 0 || warp.nodes[i+1][j+1].i < 0 || warp.nodes[i][j+1].i < 0)
+ continue;
+
+ glColor3f(warp.nodes[i][j].i, warp.nodes[i][j].i, warp.nodes[i][j].i);
+ glTexCoord2f((warp.nodes[i][j].u * uv_width), (warp.nodes[i][j].v * uv_height));
+ glVertex3f(warp.nodes[i][j].x, warp.nodes[i][j].y,0.0);
+
+ glColor3f(warp.nodes[i+1][j].i, warp.nodes[i+1][j].i, warp.nodes[i+1][j].i);
+ glTexCoord2f((warp.nodes[i+1][j].u * uv_width), (warp.nodes[i+1][j].v * uv_height));
+ glVertex3f(warp.nodes[i+1][j].x, warp.nodes[i+1][j].y,0.0);
+
+ glColor3f(warp.nodes[i+1][j+1].i, warp.nodes[i+1][j+1].i, warp.nodes[i+1][j+1].i);
+ glTexCoord2f((warp.nodes[i+1][j+1].u * uv_width), (warp.nodes[i+1][j+1].v * uv_height));
+ glVertex3f(warp.nodes[i+1][j+1].x, warp.nodes[i+1][j+1].y,0.0);
+
+ glColor3f(warp.nodes[i][j+1].i, warp.nodes[i][j+1].i, warp.nodes[i][j+1].i);
+ glTexCoord2f((warp.nodes[i][j+1].u * uv_width), (warp.nodes[i][j+1].v * uv_height));
+ glVertex3f(warp.nodes[i][j+1].x, warp.nodes[i][j+1].y,0.0);
+ }
+ }
+ glEnd();
+ }
+ else if (warp.mode == 1){
+ glBegin(GL_QUADS);
+ for (i=0;i<warp.n_height-1;i++) {
+ for (j=0;j<warp.n_width-1;j++) {
+ i2 = (i+1) % warp.n_width; // Wrap around, i = warp.n_width = 0
+
+ if (warp.nodes[i][j].i < 0 || warp.nodes[i2][j].i < 0 || warp.nodes[i2][j+1].i < 0 || warp.nodes[i][j+1].i < 0)
+ continue;
+
+ glColor3f(warp.nodes[i][j].i,warp.nodes[i][j].i,warp.nodes[i][j].i);
+ glTexCoord2f((warp.nodes[i][j].u * uv_width), (warp.nodes[i][j].v * uv_height));
+ glVertex3f(warp.nodes[i][j].x,warp.nodes[i][j].y,0.0);
+
+ glColor3f(warp.nodes[i2][j].i,warp.nodes[i2][j].i,warp.nodes[i2][j].i);
+ glTexCoord2f((warp.nodes[i2][j].u * uv_width), (warp.nodes[i2][j].v * uv_height));
+ glVertex3f(warp.nodes[i2][j].x,warp.nodes[i2][j].y,0.0);
+
+ glColor3f(warp.nodes[i2][j+1].i,warp.nodes[i2][j+1].i,warp.nodes[i2][j+1].i);
+ glTexCoord2f((warp.nodes[i2][j+1].u * uv_width), (warp.nodes[i2][j+1].v * uv_height));
+ glVertex3f(warp.nodes[i2][j+1].x,warp.nodes[i2][j+1].y,0.0);
+
+ glColor3f(warp.nodes[i2][j+1].i,warp.nodes[i2][j+1].i,warp.nodes[i2][j+1].i);
+ glTexCoord2f((warp.nodes[i2][j+1].u * uv_width), (warp.nodes[i2][j+1].v * uv_height));
+ glVertex3f(warp.nodes[i2][j+1].x,warp.nodes[i2][j+1].y,0.0);
+
+ }
+ }
+ glEnd();
+ } else{
+ printf("Error: Warp Mode unsupported. Try 1 for Polar Mesh or 2 for Fisheye.\n");
+ }
+}
+
+
+bool KX_Dome::ParseWarpMesh(STR_String text)
+{
+/*
+//Notes about the supported data format:
+File example::
+ mode
+ width height
+ n0_x n0_y n0_u n0_v n0_i
+ n1_x n1_y n1_u n1_v n1_i
+ n2_x n1_y n2_u n2_v n2_i
+ n3_x n3_y n3_u n3_v n3_i
+ (...)
+First line is the image type the mesh is support to be applied to: 2 = fisheye, 1=radial
+Tthe next line has the mesh dimensions
+Rest of the lines are the nodes of the mesh. Each line has x y u v i
+ (x,y) are the normalised screen coordinates
+ (u,v) texture coordinates
+ i a multiplicative intensity factor
+
+x varies from -screen aspect to screen aspect
+y varies from -1 to 1
+u and v vary from 0 to 1
+i ranges from 0 to 1, if negative don't draw that mesh node
+*/
+ int i,j,k;
+ int nodeX=0, nodeY=0;
+
+ vector<STR_String> columns, lines;
+
+ lines = text.Explode('\n');
+ if(lines.size() < 6){
+ printf("Error: Warp Mesh File with insufficient data!\n");
+ return false;
+ }
+ columns = lines[1].Explode(' ');
+
+ if(columns.size() !=2){
+ printf("Error: Warp Mesh File incorrect. The second line should contain: width height.\n");
+ return false;
+ }
+
+ warp.mode = atoi(lines[0]);// 1 = radial, 2 = fisheye
+
+ warp.n_width = atoi(columns[0]);
+ warp.n_height = atoi(columns[1]);
+
+ if (lines.size() < 2 + (warp.n_width * warp.n_height)){
+ printf("Error: Warp Mesh File with insufficient data!\n");
+ return false;
+ }else{
+ warp.nodes = vector<vector<WarpMeshNode> > (warp.n_height, vector<WarpMeshNode>(warp.n_width));
+
+ for(i=2; i-2 < (warp.n_width*warp.n_height); i++){
+ columns = lines[i].Explode(' ');
+
+ if (columns.size() == 5){
+ nodeX = (i-2)%warp.n_width;
+ nodeY = ((i-2) - nodeX) / warp.n_width;
+
+ warp.nodes[nodeY][nodeX].x = atof(columns[0]);
+ warp.nodes[nodeY][nodeX].y = atof(columns[1]);
+ warp.nodes[nodeY][nodeX].u = atof(columns[2]);
+ warp.nodes[nodeY][nodeX].v = atof(columns[3]);
+ warp.nodes[nodeY][nodeX].i = atof(columns[4]);
+ }
+ else{
+ warp.nodes.clear();
+ printf("Error: Warp Mesh File with wrong number of fields. You should use 5: x y u v i.\n");
+ return false;
+ }
+ }
+ }
+ return true;
+}
+
+void KX_Dome::CreateMeshDome180(void)
+{
+/*
+1)- Define the faces of half of a cube
+ - each face is made out of 2 triangles
+2) Subdivide the faces
+ - more resolution == more curved lines
+3) Spherize the cube
+ - normalize the verts
+4) Flatten onto xz plane
+ - transform it onto an equidistant spherical projection techniques to transform the sphere onto a dome image
+*/
+ int i,j;
+ float sqrt_2 = sqrt(2.0);
+ float uv_ratio = (float)(m_buffersize-1) / m_imagesize;
+
+ m_radangle = m_angle * M_PI/180.0;//calculates the radians angle, used for flattening
+
+ //creating faces for the env mapcube 180º Dome
+ // Top Face - just a triangle
+ cubetop[0].verts[0][0] = -sqrt_2 / 2.0;
+ cubetop[0].verts[0][1] = 0.0;
+ cubetop[0].verts[0][2] = 0.5;
+ cubetop[0].u[0] = 0.0;
+ cubetop[0].v[0] = uv_ratio;
+
+ cubetop[0].verts[1][0] = 0.0;
+ cubetop[0].verts[1][1] = sqrt_2 / 2.0;
+ cubetop[0].verts[1][2] = 0.5;
+ cubetop[0].u[1] = 0.0;
+ cubetop[0].v[1] = 0.0;
+
+ cubetop[0].verts[2][0] = sqrt_2 / 2.0;
+ cubetop[0].verts[2][1] = 0.0;
+ cubetop[0].verts[2][2] = 0.5;
+ cubetop[0].u[2] = uv_ratio;
+ cubetop[0].v[2] = 0.0;
+
+ nfacestop = 1;
+
+ /* Bottom face - just a triangle */
+ cubebottom[0].verts[0][0] = -sqrt_2 / 2.0;
+ cubebottom[0].verts[0][1] = 0.0;
+ cubebottom[0].verts[0][2] = -0.5;
+ cubebottom[0].u[0] = uv_ratio;
+ cubebottom[0].v[0] = 0.0;
+
+ cubebottom[0].verts[1][0] = sqrt_2 / 2.0;
+ cubebottom[0].verts[1][1] = 0;
+ cubebottom[0].verts[1][2] = -0.5;
+ cubebottom[0].u[1] = 0.0;
+ cubebottom[0].v[1] = uv_ratio;
+
+ cubebottom[0].verts[2][0] = 0.0;
+ cubebottom[0].verts[2][1] = sqrt_2 / 2.0;
+ cubebottom[0].verts[2][2] = -0.5;
+ cubebottom[0].u[2] = 0.0;
+ cubebottom[0].v[2] = 0.0;
+
+ nfacesbottom = 1;
+
+ /* Left face - two triangles */
+
+ cubeleft[0].verts[0][0] = -sqrt_2 / 2.0;
+ cubeleft[0].verts[0][1] = .0;
+ cubeleft[0].verts[0][2] = -0.5;
+ cubeleft[0].u[0] = 0.0;
+ cubeleft[0].v[0] = 0.0;
+
+ cubeleft[0].verts[1][0] = 0.0;
+ cubeleft[0].verts[1][1] = sqrt_2 / 2.0;
+ cubeleft[0].verts[1][2] = -0.5;
+ cubeleft[0].u[1] = uv_ratio;
+ cubeleft[0].v[1] = 0.0;
+
+ cubeleft[0].verts[2][0] = -sqrt_2 / 2.0;
+ cubeleft[0].verts[2][1] = 0.0;
+ cubeleft[0].verts[2][2] = 0.5;
+ cubeleft[0].u[2] = 0.0;
+ cubeleft[0].v[2] = uv_ratio;
+
+ //second triangle
+ cubeleft[1].verts[0][0] = -sqrt_2 / 2.0;
+ cubeleft[1].verts[0][1] = 0.0;
+ cubeleft[1].verts[0][2] = 0.5;
+ cubeleft[1].u[0] = 0.0;
+ cubeleft[1].v[0] = uv_ratio;
+
+ cubeleft[1].verts[1][0] = 0.0;
+ cubeleft[1].verts[1][1] = sqrt_2 / 2.0;
+ cubeleft[1].verts[1][2] = -0.5;
+ cubeleft[1].u[1] = uv_ratio;
+ cubeleft[1].v[1] = 0.0;
+
+ cubeleft[1].verts[2][0] = 0.0;
+ cubeleft[1].verts[2][1] = sqrt_2 / 2.0;
+ cubeleft[1].verts[2][2] = 0.5;
+ cubeleft[1].u[2] = uv_ratio;
+ cubeleft[1].v[2] = uv_ratio;
+
+ nfacesleft = 2;
+
+ /* Right face - two triangles */
+ cuberight[0].verts[0][0] = 0.0;
+ cuberight[0].verts[0][1] = sqrt_2 / 2.0;
+ cuberight[0].verts[0][2] = -0.5;
+ cuberight[0].u[0] = 0.0;
+ cuberight[0].v[0] = 0.0;
+
+ cuberight[0].verts[1][0] = sqrt_2 / 2.0;
+ cuberight[0].verts[1][1] = 0.0;
+ cuberight[0].verts[1][2] = -0.5;
+ cuberight[0].u[1] = uv_ratio;
+ cuberight[0].v[1] = 0.0;
+
+ cuberight[0].verts[2][0] = sqrt_2 / 2.0;
+ cuberight[0].verts[2][1] = 0.0;
+ cuberight[0].verts[2][2] = 0.5;
+ cuberight[0].u[2] = uv_ratio;
+ cuberight[0].v[2] = uv_ratio;
+
+ //second triangle
+ cuberight[1].verts[0][0] = 0.0;
+ cuberight[1].verts[0][1] = sqrt_2 / 2.0;
+ cuberight[1].verts[0][2] = -0.5;
+ cuberight[1].u[0] = 0.0;
+ cuberight[1].v[0] = 0.0;
+
+ cuberight[1].verts[1][0] = sqrt_2 / 2.0;
+ cuberight[1].verts[1][1] = 0.0;
+ cuberight[1].verts[1][2] = 0.5;
+ cuberight[1].u[1] = uv_ratio;
+ cuberight[1].v[1] = uv_ratio;
+
+ cuberight[1].verts[2][0] = 0.0;
+ cuberight[1].verts[2][1] = sqrt_2 / 2.0;
+ cuberight[1].verts[2][2] = 0.5;
+ cuberight[1].u[2] = 0.0;
+ cuberight[1].v[2] = uv_ratio;
+
+ nfacesright = 2;
+
+ //Refine a triangular mesh by bisecting each edge forms 3 new triangles for each existing triangle on each iteration
+ //Could be made more efficient for drawing if the triangles were ordered in a fan. Not that important since we are using DisplayLists
+
+ for(i=0;i<m_resolution;i++){
+ cubetop.resize(4*nfacestop);
+ SplitFace(cubetop,&nfacestop);
+ cubebottom.resize(4*nfacesbottom);
+ SplitFace(cubebottom,&nfacesbottom);
+ cubeleft.resize(4*nfacesleft);
+ SplitFace(cubeleft,&nfacesleft);
+ cuberight.resize(4*nfacesright);
+ SplitFace(cuberight,&nfacesright);
+ }
+
+ // Turn into a hemisphere
+ for(j=0;j<3;j++){
+ for(i=0;i<nfacestop;i++)
+ cubetop[i].verts[j].normalize();
+ for(i=0;i<nfacesbottom;i++)
+ cubebottom[i].verts[j].normalize();
+ for(i=0;i<nfacesleft;i++)
+ cubeleft[i].verts[j].normalize();
+ for(i=0;i<nfacesright;i++)
+ cuberight[i].verts[j].normalize();
+ }
+
+ //flatten onto xz plane
+ for(i=0;i<nfacestop;i++)
+ FlattenDome(cubetop[i].verts);
+ for(i=0;i<nfacesbottom;i++)
+ FlattenDome(cubebottom[i].verts);
+ for(i=0;i<nfacesleft;i++)
+ FlattenDome(cubeleft[i].verts);
+ for(i=0;i<nfacesright;i++)
+ FlattenDome(cuberight[i].verts);
+
+}
+
+void KX_Dome::CreateMeshDome250(void)
+{
+/*
+1)- Define the faces of a cube without the back face
+ - each face is made out of 2 triangles
+2) Subdivide the faces
+ - more resolution == more curved lines
+3) Spherize the cube
+ - normalize the verts
+4) Flatten onto xz plane
+ - transform it onto an equidistant spherical projection techniques to transform the sphere onto a dome image
+*/
+
+ int i,j;
+ float uv_height, uv_base;
+ float verts_height;
+
+ float rad_ang = m_angle * MT_PI / 180.0;
+ float uv_ratio = (float)(m_buffersize-1) / m_imagesize;
+
+ m_radangle = m_angle * M_PI/180.0;//calculates the radians angle, used for flattening
+/*
+verts_height is the exactly needed height of the cube faces (not always 1.0).
+When we want some horizontal information (e.g. for horizontal 220º domes) we don't need to create and tesselate the whole cube.
+Therefore the lateral cube faces could be small, and the tesselate mesh would be completely used.
+(if we always worked with verts_height = 1.0, we would be discarding a lot of the calculated and tesselated geometry).
+
+So I came out with this formula:
+verts_height = tan((rad_ang/2) - (MT_PI/2))*sqrt(2.0);
+
+Here we take half the sphere(rad_ang/2) and subtract a quarter of it (MT_PI/2)
+Therefore we have the lenght in radians of the dome/sphere over the horizon.
+Once we take the tangent of that angle, you have the verts coordinate corresponding to the verts on the side faces.
+Then we need to multiply it by sqrt(2.0) to get the coordinate of the verts on the diagonal of the original cube.
+*/
+ verts_height = tan((rad_ang/2) - (MT_PI/2))*sqrt(2.0);
+
+ uv_height = uv_ratio * ((verts_height/2) + 0.5);
+ uv_base = uv_ratio * (1.0 - ((verts_height/2) + 0.5));
+
+ //creating faces for the env mapcube 180º Dome
+ // Front Face - 2 triangles
+ cubefront[0].verts[0][0] =-1.0;
+ cubefront[0].verts[0][1] = 1.0;
+ cubefront[0].verts[0][2] =-1.0;
+ cubefront[0].u[0] = 0.0;
+ cubefront[0].v[0] = 0.0;
+
+ cubefront[0].verts[1][0] = 1.0;
+ cubefront[0].verts[1][1] = 1.0;
+ cubefront[0].verts[1][2] = 1.0;
+ cubefront[0].u[1] = uv_ratio;
+ cubefront[0].v[1] = uv_ratio;
+
+ cubefront[0].verts[2][0] =-1.0;
+ cubefront[0].verts[2][1] = 1.0;
+ cubefront[0].verts[2][2] = 1.0;
+ cubefront[0].u[2] = 0.0;
+ cubefront[0].v[2] = uv_ratio;
+
+ //second triangle
+ cubefront[1].verts[0][0] = 1.0;
+ cubefront[1].verts[0][1] = 1.0;
+ cubefront[1].verts[0][2] = 1.0;
+ cubefront[1].u[0] = uv_ratio;
+ cubefront[1].v[0] = uv_ratio;
+
+ cubefront[1].verts[1][0] =-1.0;
+ cubefront[1].verts[1][1] = 1.0;
+ cubefront[1].verts[1][2] =-1.0;
+ cubefront[1].u[1] = 0.0;
+ cubefront[1].v[1] = 0.0;
+
+ cubefront[1].verts[2][0] = 1.0;
+ cubefront[1].verts[2][1] = 1.0;
+ cubefront[1].verts[2][2] =-1.0;
+ cubefront[1].u[2] = uv_ratio;
+ cubefront[1].v[2] = 0.0;
+
+ nfacesfront = 2;
+
+ // Left Face - 2 triangles
+ cubeleft[0].verts[0][0] =-1.0;
+ cubeleft[0].verts[0][1] = 1.0;
+ cubeleft[0].verts[0][2] =-1.0;
+ cubeleft[0].u[0] = uv_ratio;
+ cubeleft[0].v[0] = 0.0;
+
+ cubeleft[0].verts[1][0] =-1.0;
+ cubeleft[0].verts[1][1] =-verts_height;
+ cubeleft[0].verts[1][2] = 1.0;
+ cubeleft[0].u[1] = uv_base;
+ cubeleft[0].v[1] = uv_ratio;
+
+ cubeleft[0].verts[2][0] =-1.0;
+ cubeleft[0].verts[2][1] =-verts_height;
+ cubeleft[0].verts[2][2] =-1.0;
+ cubeleft[0].u[2] = uv_base;
+ cubeleft[0].v[2] = 0.0;
+
+ //second triangle
+ cubeleft[1].verts[0][0] =-1.0;
+ cubeleft[1].verts[0][1] =-verts_height;
+ cubeleft[1].verts[0][2] = 1.0;
+ cubeleft[1].u[0] = uv_base;
+ cubeleft[1].v[0] = uv_ratio;
+
+ cubeleft[1].verts[1][0] =-1.0;
+ cubeleft[1].verts[1][1] = 1.0;
+ cubeleft[1].verts[1][2] =-1.0;
+ cubeleft[1].u[1] = uv_ratio;
+ cubeleft[1].v[1] = 0.0;
+
+ cubeleft[1].verts[2][0] =-1.0;
+ cubeleft[1].verts[2][1] = 1.0;
+ cubeleft[1].verts[2][2] = 1.0;
+ cubeleft[1].u[2] = uv_ratio;
+ cubeleft[1].v[2] = uv_ratio;
+
+ nfacesleft = 2;
+
+ // right Face - 2 triangles
+ cuberight[0].verts[0][0] = 1.0;
+ cuberight[0].verts[0][1] = 1.0;
+ cuberight[0].verts[0][2] = 1.0;
+ cuberight[0].u[0] = 0.0;
+ cuberight[0].v[0] = uv_ratio;
+
+ cuberight[0].verts[1][0] = 1.0;
+ cuberight[0].verts[1][1] =-verts_height;
+ cuberight[0].verts[1][2] =-1.0;
+ cuberight[0].u[1] = uv_height;
+ cuberight[0].v[1] = 0.0;
+
+ cuberight[0].verts[2][0] = 1.0;
+ cuberight[0].verts[2][1] =-verts_height;
+ cuberight[0].verts[2][2] = 1.0;
+ cuberight[0].u[2] = uv_height;
+ cuberight[0].v[2] = uv_ratio;
+
+ //second triangle
+ cuberight[1].verts[0][0] = 1.0;
+ cuberight[1].verts[0][1] =-verts_height;
+ cuberight[1].verts[0][2] =-1.0;
+ cuberight[1].u[0] = uv_height;
+ cuberight[1].v[0] = 0.0;
+
+ cuberight[1].verts[1][0] = 1.0;
+ cuberight[1].verts[1][1] = 1.0;
+ cuberight[1].verts[1][2] = 1.0;
+ cuberight[1].u[1] = 0.0;
+ cuberight[1].v[1] = uv_ratio;
+
+ cuberight[1].verts[2][0] = 1.0;
+ cuberight[1].verts[2][1] = 1.0;
+ cuberight[1].verts[2][2] =-1.0;
+ cuberight[1].u[2] = 0.0;
+ cuberight[1].v[2] = 0.0;
+
+ nfacesright = 2;
+
+ // top Face - 2 triangles
+ cubetop[0].verts[0][0] =-1.0;
+ cubetop[0].verts[0][1] = 1.0;
+ cubetop[0].verts[0][2] = 1.0;
+ cubetop[0].u[0] = 0.0;
+ cubetop[0].v[0] = 0.0;
+
+ cubetop[0].verts[1][0] = 1.0;
+ cubetop[0].verts[1][1] =-verts_height;
+ cubetop[0].verts[1][2] = 1.0;
+ cubetop[0].u[1] = uv_ratio;
+ cubetop[0].v[1] = uv_height;
+
+ cubetop[0].verts[2][0] =-1.0;
+ cubetop[0].verts[2][1] =-verts_height;
+ cubetop[0].verts[2][2] = 1.0;
+ cubetop[0].u[2] = 0.0;
+ cubetop[0].v[2] = uv_height;
+
+ //second triangle
+ cubetop[1].verts[0][0] = 1.0;
+ cubetop[1].verts[0][1] =-verts_height;
+ cubetop[1].verts[0][2] = 1.0;
+ cubetop[1].u[0] = uv_ratio;
+ cubetop[1].v[0] = uv_height;
+
+ cubetop[1].verts[1][0] =-1.0;
+ cubetop[1].verts[1][1] = 1.0;
+ cubetop[1].verts[1][2] = 1.0;
+ cubetop[1].u[1] = 0.0;
+ cubetop[1].v[1] = 0.0;
+
+ cubetop[1].verts[2][0] = 1.0;
+ cubetop[1].verts[2][1] = 1.0;
+ cubetop[1].verts[2][2] = 1.0;
+ cubetop[1].u[2] = uv_ratio;
+ cubetop[1].v[2] = 0.0;
+
+ nfacestop = 2;
+
+ // bottom Face - 2 triangles
+ cubebottom[0].verts[0][0] =-1.0;
+ cubebottom[0].verts[0][1] =-verts_height;
+ cubebottom[0].verts[0][2] =-1.0;
+ cubebottom[0].u[0] = 0.0;
+ cubebottom[0].v[0] = uv_base;
+
+ cubebottom[0].verts[1][0] = 1.0;
+ cubebottom[0].verts[1][1] = 1.0;
+ cubebottom[0].verts[1][2] =-1.0;
+ cubebottom[0].u[1] = uv_ratio;
+ cubebottom[0].v[1] = uv_ratio;
+
+ cubebottom[0].verts[2][0] =-1.0;
+ cubebottom[0].verts[2][1] = 1.0;
+ cubebottom[0].verts[2][2] =-1.0;
+ cubebottom[0].u[2] = 0.0;
+ cubebottom[0].v[2] = uv_ratio;
+
+ //second triangle
+ cubebottom[1].verts[0][0] = 1.0;
+ cubebottom[1].verts[0][1] = 1.0;
+ cubebottom[1].verts[0][2] =-1.0;
+ cubebottom[1].u[0] = uv_ratio;
+ cubebottom[1].v[0] = uv_ratio;
+
+ cubebottom[1].verts[1][0] =-1.0;
+ cubebottom[1].verts[1][1] =-verts_height;
+ cubebottom[1].verts[1][2] =-1.0;
+ cubebottom[1].u[1] = 0.0;
+ cubebottom[1].v[1] = uv_base;
+
+ cubebottom[1].verts[2][0] = 1.0;
+ cubebottom[1].verts[2][1] =-verts_height;
+ cubebottom[1].verts[2][2] =-1.0;
+ cubebottom[1].u[2] = uv_ratio;
+ cubebottom[1].v[2] = uv_base;
+
+ nfacesbottom = 2;
+
+ //Refine a triangular mesh by bisecting each edge forms 3 new triangles for each existing triangle on each iteration
+ //It could be made more efficient for drawing if the triangles were ordered in a strip!
+
+ for(i=0;i<m_resolution;i++){
+ cubefront.resize(4*nfacesfront);
+ SplitFace(cubefront,&nfacesfront);
+ cubetop.resize(4*nfacestop);
+ SplitFace(cubetop,&nfacestop);
+ cubebottom.resize(4*nfacesbottom);
+ SplitFace(cubebottom,&nfacesbottom);
+ cubeleft.resize(4*nfacesleft);
+ SplitFace(cubeleft,&nfacesleft);
+ cuberight.resize(4*nfacesright);
+ SplitFace(cuberight,&nfacesright);
+ }
+
+ // Turn into a hemisphere/sphere
+ for(j=0;j<3;j++){
+ for(i=0;i<nfacesfront;i++)
+ cubefront[i].verts[j].normalize();
+ for(i=0;i<nfacestop;i++)
+ cubetop[i].verts[j].normalize();
+ for(i=0;i<nfacesbottom;i++)
+ cubebottom[i].verts[j].normalize();
+ for(i=0;i<nfacesleft;i++)
+ cubeleft[i].verts[j].normalize();
+ for(i=0;i<nfacesright;i++)
+ cuberight[i].verts[j].normalize();
+ }
+
+ //flatten onto xz plane
+ for(i=0;i<nfacesfront;i++)
+ FlattenDome(cubefront[i].verts);
+ for(i=0;i<nfacestop;i++)
+ FlattenDome(cubetop[i].verts);
+ for(i=0;i<nfacesbottom;i++)
+ FlattenDome(cubebottom[i].verts);
+ for(i=0;i<nfacesleft;i++)
+ FlattenDome(cubeleft[i].verts);
+ for(i=0;i<nfacesright;i++)
+ FlattenDome(cuberight[i].verts);
+}
+
+void KX_Dome::CreateMeshPanorama(void)
+{
+/*
+1)- Define the faces of a cube without the top and bottom faces
+ - each face is made out of 2 triangles
+2) Subdivide the faces
+ - more resolution == more curved lines
+3) Spherize the cube
+ - normalize the verts t
+4) Flatten onto xz plane
+ - use spherical projection techniques to transform the sphere onto a flat panorama
+*/
+ int i,j;
+
+ float sqrt_2 = sqrt(2.0);
+ float uv_ratio = (float)(m_buffersize-1) / m_imagesize;
+
+ /* Top face - two triangles */
+ cubetop[0].verts[0][0] = -sqrt_2;
+ cubetop[0].verts[0][1] = 0.0;
+ cubetop[0].verts[0][2] = 1.0;
+ cubetop[0].u[0] = 0.0;
+ cubetop[0].v[0] = uv_ratio;
+
+ cubetop[0].verts[1][0] = 0.0;
+ cubetop[0].verts[1][1] = sqrt_2;
+ cubetop[0].verts[1][2] = 1.0;
+ cubetop[0].u[1] = 0.0;
+ cubetop[0].v[1] = 0.0;
+
+ //second triangle
+ cubetop[0].verts[2][0] = sqrt_2;
+ cubetop[0].verts[2][1] = 0.0;
+ cubetop[0].verts[2][2] = 1.0;
+ cubetop[0].u[2] = uv_ratio;
+ cubetop[0].v[2] = 0.0;
+
+ cubetop[1].verts[0][0] = sqrt_2;
+ cubetop[1].verts[0][1] = 0.0;
+ cubetop[1].verts[0][2] = 1.0;
+ cubetop[1].u[0] = uv_ratio;
+ cubetop[1].v[0] = 0.0;
+
+ cubetop[1].verts[1][0] = 0.0;
+ cubetop[1].verts[1][1] = -sqrt_2;
+ cubetop[1].verts[1][2] = 1.0;
+ cubetop[1].u[1] = uv_ratio;
+ cubetop[1].v[1] = uv_ratio;
+
+ cubetop[1].verts[2][0] = -sqrt_2;
+ cubetop[1].verts[2][1] = 0.0;
+ cubetop[1].verts[2][2] = 1.0;
+ cubetop[1].u[2] = 0.0;
+ cubetop[1].v[2] = uv_ratio;
+
+ nfacestop = 2;
+
+ /* Bottom face - two triangles */
+ cubebottom[0].verts[0][0] = -sqrt_2;
+ cubebottom[0].verts[0][1] = 0.0;
+ cubebottom[0].verts[0][2] = -1.0;
+ cubebottom[0].u[0] = uv_ratio;
+ cubebottom[0].v[0] = 0.0;
+
+ cubebottom[0].verts[1][0] = sqrt_2;
+ cubebottom[0].verts[1][1] = 0.0;
+ cubebottom[0].verts[1][2] = -1.0;
+ cubebottom[0].u[1] = 0.0;
+ cubebottom[0].v[1] = uv_ratio;
+
+ cubebottom[0].verts[2][0] = 0.0;
+ cubebottom[0].verts[2][1] = sqrt_2;
+ cubebottom[0].verts[2][2] = -1.0;
+ cubebottom[0].u[2] = 0.0;
+ cubebottom[0].v[2] = 0.0;
+
+ //second triangle
+ cubebottom[1].verts[0][0] = sqrt_2;
+ cubebottom[1].verts[0][1] = 0.0;
+ cubebottom[1].verts[0][2] = -1.0;
+ cubebottom[1].u[0] = 0.0;
+ cubebottom[1].v[0] = uv_ratio;
+
+ cubebottom[1].verts[1][0] = -sqrt_2;
+ cubebottom[1].verts[1][1] = 0.0;
+ cubebottom[1].verts[1][2] = -1.0;
+ cubebottom[1].u[1] = uv_ratio;
+ cubebottom[1].v[1] = 0.0;
+
+ cubebottom[1].verts[2][0] = 0.0;
+ cubebottom[1].verts[2][1] = -sqrt_2;
+ cubebottom[1].verts[2][2] = -1.0;
+ cubebottom[1].u[2] = uv_ratio;
+ cubebottom[1].v[2] = uv_ratio;
+
+ nfacesbottom = 2;
+
+ /* Left Back (135º) face - two triangles */
+
+ cubeleftback[0].verts[0][0] = 0;
+ cubeleftback[0].verts[0][1] = -sqrt_2;
+ cubeleftback[0].verts[0][2] = -1.0;
+ cubeleftback[0].u[0] = 0;
+ cubeleftback[0].v[0] = 0;
+
+ cubeleftback[0].verts[1][0] = -sqrt_2;
+ cubeleftback[0].verts[1][1] = 0;
+ cubeleftback[0].verts[1][2] = -1.0;
+ cubeleftback[0].u[1] = uv_ratio;
+ cubeleftback[0].v[1] = 0;
+
+ cubeleftback[0].verts[2][0] = 0;
+ cubeleftback[0].verts[2][1] = -sqrt_2;
+ cubeleftback[0].verts[2][2] = 1.0;
+ cubeleftback[0].u[2] = 0;
+ cubeleftback[0].v[2] = uv_ratio;
+
+ //second triangle
+ cubeleftback[1].verts[0][0] = 0;
+ cubeleftback[1].verts[0][1] = -sqrt_2;
+ cubeleftback[1].verts[0][2] = 1.0;
+ cubeleftback[1].u[0] = 0;
+ cubeleftback[1].v[0] = uv_ratio;
+
+ cubeleftback[1].verts[1][0] = -sqrt_2;
+ cubeleftback[1].verts[1][1] = 0;
+ cubeleftback[1].verts[1][2] = -1.0;
+ cubeleftback[1].u[1] = uv_ratio;
+ cubeleftback[1].v[1] = 0;
+
+ cubeleftback[1].verts[2][0] = -sqrt_2;
+ cubeleftback[1].verts[2][1] = 0;
+ cubeleftback[1].verts[2][2] = 1.0;
+ cubeleftback[1].u[2] = uv_ratio;
+ cubeleftback[1].v[2] = uv_ratio;
+
+ nfacesleftback = 2;
+
+ /* Left face - two triangles */
+
+ cubeleft[0].verts[0][0] = -sqrt_2;
+ cubeleft[0].verts[0][1] = 0;
+ cubeleft[0].verts[0][2] = -1.0;
+ cubeleft[0].u[0] = 0;
+ cubeleft[0].v[0] = 0;
+
+ cubeleft[0].verts[1][0] = 0;
+ cubeleft[0].verts[1][1] = sqrt_2;
+ cubeleft[0].verts[1][2] = -1.0;
+ cubeleft[0].u[1] = uv_ratio;
+ cubeleft[0].v[1] = 0;
+
+ cubeleft[0].verts[2][0] = -sqrt_2;
+ cubeleft[0].verts[2][1] = 0;
+ cubeleft[0].verts[2][2] = 1.0;
+ cubeleft[0].u[2] = 0;
+ cubeleft[0].v[2] = uv_ratio;
+
+ //second triangle
+ cubeleft[1].verts[0][0] = -sqrt_2;
+ cubeleft[1].verts[0][1] = 0;
+ cubeleft[1].verts[0][2] = 1.0;
+ cubeleft[1].u[0] = 0;
+ cubeleft[1].v[0] = uv_ratio;
+
+ cubeleft[1].verts[1][0] = 0;
+ cubeleft[1].verts[1][1] = sqrt_2;
+ cubeleft[1].verts[1][2] = -1.0;
+ cubeleft[1].u[1] = uv_ratio;
+ cubeleft[1].v[1] = 0;
+
+ cubeleft[1].verts[2][0] = 0;
+ cubeleft[1].verts[2][1] = sqrt_2;
+ cubeleft[1].verts[2][2] = 1.0;
+ cubeleft[1].u[2] = uv_ratio;
+ cubeleft[1].v[2] = uv_ratio;
+
+ nfacesleft = 2;
+
+ /* Right face - two triangles */
+ cuberight[0].verts[0][0] = 0;
+ cuberight[0].verts[0][1] = sqrt_2;
+ cuberight[0].verts[0][2] = -1.0;
+ cuberight[0].u[0] = 0;
+ cuberight[0].v[0] = 0;
+
+ cuberight[0].verts[1][0] = sqrt_2;
+ cuberight[0].verts[1][1] = 0;
+ cuberight[0].verts[1][2] = -1.0;
+ cuberight[0].u[1] = uv_ratio;
+ cuberight[0].v[1] = 0;
+
+ cuberight[0].verts[2][0] = sqrt_2;
+ cuberight[0].verts[2][1] = 0;
+ cuberight[0].verts[2][2] = 1.0;
+ cuberight[0].u[2] = uv_ratio;
+ cuberight[0].v[2] = uv_ratio;
+
+ //second triangle
+ cuberight[1].verts[0][0] = 0;
+ cuberight[1].verts[0][1] = sqrt_2;
+ cuberight[1].verts[0][2] = -1.0;
+ cuberight[1].u[0] = 0;
+ cuberight[1].v[0] = 0;
+
+ cuberight[1].verts[1][0] = sqrt_2;
+ cuberight[1].verts[1][1] = 0;
+ cuberight[1].verts[1][2] = 1.0;
+ cuberight[1].u[1] = uv_ratio;
+ cuberight[1].v[1] = uv_ratio;
+
+ cuberight[1].verts[2][0] = 0;
+ cuberight[1].verts[2][1] = sqrt_2;
+ cuberight[1].verts[2][2] = 1.0;
+ cuberight[1].u[2] = 0;
+ cuberight[1].v[2] = uv_ratio;
+
+ nfacesright = 2;
+
+ /* Right Back (-135º) face - two triangles */
+ cuberightback[0].verts[0][0] = sqrt_2;
+ cuberightback[0].verts[0][1] = 0;
+ cuberightback[0].verts[0][2] = -1.0;
+ cuberightback[0].u[0] = 0;
+ cuberightback[0].v[0] = 0;
+
+ cuberightback[0].verts[1][0] = 0;
+ cuberightback[0].verts[1][1] = -sqrt_2;
+ cuberightback[0].verts[1][2] = -1.0;
+ cuberightback[0].u[1] = uv_ratio;
+ cuberightback[0].v[1] = 0;
+
+ cuberightback[0].verts[2][0] = 0;
+ cuberightback[0].verts[2][1] = -sqrt_2;
+ cuberightback[0].verts[2][2] = 1.0;
+ cuberightback[0].u[2] = uv_ratio;
+ cuberightback[0].v[2] = uv_ratio;
+
+ //second triangle
+ cuberightback[1].verts[0][0] = sqrt_2;
+ cuberightback[1].verts[0][1] = 0;
+ cuberightback[1].verts[0][2] = -1.0;
+ cuberightback[1].u[0] = 0;
+ cuberightback[1].v[0] = 0;
+
+ cuberightback[1].verts[1][0] = 0;
+ cuberightback[1].verts[1][1] = -sqrt_2;
+ cuberightback[1].verts[1][2] = 1.0;
+ cuberightback[1].u[1] = uv_ratio;
+ cuberightback[1].v[1] = uv_ratio;
+
+ cuberightback[1].verts[2][0] = sqrt_2;
+ cuberightback[1].verts[2][1] = 0;
+ cuberightback[1].verts[2][2] = 1.0;
+ cuberightback[1].u[2] = 0;
+ cuberightback[1].v[2] = uv_ratio;
+
+ nfacesrightback = 2;
+
+ // Subdivide the faces
+ for(i=0;i<m_resolution;i++)
+ {
+ cubetop.resize(4*nfacestop);
+ SplitFace(cubetop,&nfacestop);
+
+ cubebottom.resize(4*nfacesbottom);
+ SplitFace(cubebottom,&nfacesbottom);
+
+ cubeleft.resize(4*nfacesleft);
+ SplitFace(cubeleft,&nfacesleft);
+
+ cuberight.resize(4*nfacesright);
+ SplitFace(cuberight,&nfacesright);
+
+ cubeleftback.resize(4*nfacesleftback);
+ SplitFace(cubeleftback,&nfacesleftback);
+
+ cuberightback.resize(4*nfacesrightback);
+ SplitFace(cuberightback,&nfacesrightback);
+ }
+
+ // Spherize the cube
+ for(j=0;j<3;j++)
+ {
+ for(i=0;i<nfacestop;i++)
+ cubetop[i].verts[j].normalize();
+
+ for(i=0;i<nfacesbottom;i++)
+ cubebottom[i].verts[j].normalize();
+
+ for(i=0;i<nfacesleftback;i++)
+ cubeleftback[i].verts[j].normalize();
+
+ for(i=0;i<nfacesleft;i++)
+ cubeleft[i].verts[j].normalize();
+
+ for(i=0;i<nfacesright;i++)
+ cuberight[i].verts[j].normalize();
+
+ for(i=0;i<nfacesrightback;i++)
+ cuberightback[i].verts[j].normalize();
+ }
+
+ //Flatten onto xz plane
+ for(i=0;i<nfacesleftback;i++)
+ FlattenPanorama(cubeleftback[i].verts);
+
+ for(i=0;i<nfacesleft;i++)
+ FlattenPanorama(cubeleft[i].verts);
+
+ for(i=0;i<nfacesright;i++)
+ FlattenPanorama(cuberight[i].verts);
+
+ for(i=0;i<nfacesrightback;i++)
+ FlattenPanorama(cuberightback[i].verts);
+
+ for(i=0;i<nfacestop;i++)
+ FlattenPanorama(cubetop[i].verts);
+
+ for(i=0;i<nfacesbottom;i++)
+ FlattenPanorama(cubebottom[i].verts);
+}
+
+void KX_Dome::FlattenDome(MT_Vector3 verts[3])
+{
+ double phi, r;
+
+ for (int i=0;i<3;i++){
+ r = atan2(sqrt(verts[i][0]*verts[i][0] + verts[i][2]*verts[i][2]), verts[i][1]);
+ r /= m_radangle/2;
+
+ phi = atan2(verts[i][2], verts[i][0]);
+
+ verts[i][0] = r * cos(phi);
+ verts[i][1] = 0;
+ verts[i][2] = r * sin(phi);
+
+ if (r > 1.0){
+ //round the border
+ verts[i][0] = cos(phi);
+ verts[i][1] = -3.0;
+ verts[i][2] = sin(phi);
+ }
+ }
+}
+
+void KX_Dome::FlattenPanorama(MT_Vector3 verts[3])
+{
+// it creates a full spherical panoramic (360º)
+ int i;
+ double phi;
+ bool edge=false;
+
+ for (i=0;i<3;i++){
+ phi = atan2(verts[i][1], verts[i][0]);
+ phi *= -1.0; //flipping
+
+ if (phi == -MT_PI) //It's on the edge
+ edge=true;
+
+ verts[i][0] = phi / MT_PI;
+ verts[i][1] = 0;
+
+ verts[i][2] = atan2(verts[i][2], 1.0);
+ verts[i][2] /= MT_PI / 2;
+ }
+ if(edge){
+ bool right=false;
+
+ for (i=0;i<3;i++){
+ if(fmod(verts[i][0],1.0) > 0.0){
+ right=true;
+ break;
+ }
+ }
+ if(right){
+ for (i=0;i<3;i++){
+ if(verts[i][0] < 0.0)
+ verts[i][0] *= -1.0;
+ }
+ }
+ }
+}
+
+void KX_Dome::SplitFace(vector <DomeFace>& face, int *nfaces)
+{
+ int i;
+ int n1, n2;
+
+ n1 = n2 = *nfaces;
+
+ for(i=0;i<n1;i++){
+
+ face[n2].verts[0] = (face[i].verts[0] + face[i].verts[1]) /2;
+ face[n2].verts[1] = face[i].verts[1];
+ face[n2].verts[2] = (face[i].verts[1] + face[i].verts[2]) /2;
+ face[n2].u[0] = (face[i].u[0] + face[i].u[1]) /2;
+ face[n2].u[1] = face[i].u[1];
+ face[n2].u[2] = (face[i].u[1] + face[i].u[2]) /2;
+ face[n2].v[0] = (face[i].v[0] + face[i].v[1]) /2;
+ face[n2].v[1] = face[i].v[1];
+ face[n2].v[2] = (face[i].v[1] + face[i].v[2]) /2;
+
+ face[n2+1].verts[0] = (face[i].verts[1] + face[i].verts[2]) /2;
+ face[n2+1].verts[1] = face[i].verts[2];
+ face[n2+1].verts[2] = (face[i].verts[2] + face[i].verts[0]) /2;
+ face[n2+1].u[0] = (face[i].u[1] + face[i].u[2]) /2;
+ face[n2+1].u[1] = face[i].u[2];
+ face[n2+1].u[2] = (face[i].u[2] + face[i].u[0]) /2;
+ face[n2+1].v[0] = (face[i].v[1] + face[i].v[2]) /2;
+ face[n2+1].v[1] = face[i].v[2];
+ face[n2+1].v[2] = (face[i].v[2] + face[i].v[0]) /2;
+
+ face[n2+2].verts[0] = (face[i].verts[0] + face[i].verts[1]) /2;
+ face[n2+2].verts[1] = (face[i].verts[1] + face[i].verts[2]) /2;
+ face[n2+2].verts[2] = (face[i].verts[2] + face[i].verts[0]) /2;
+ face[n2+2].u[0] = (face[i].u[0] + face[i].u[1]) /2;
+ face[n2+2].u[1] = (face[i].u[1] + face[i].u[2]) /2;
+ face[n2+2].u[2] = (face[i].u[2] + face[i].u[0]) /2;
+ face[n2+2].v[0] = (face[i].v[0] + face[i].v[1]) /2;
+ face[n2+2].v[1] = (face[i].v[1] + face[i].v[2]) /2;
+ face[n2+2].v[2] = (face[i].v[2] + face[i].v[0]) /2;
+
+ //face[i].verts[0] = face[i].verts[0] ;
+ face[i].verts[1] = (face[i].verts[0] + face[i].verts[1]) /2;
+ face[i].verts[2] = (face[i].verts[0] + face[i].verts[2]) /2;
+ //face[i].u[0] = face[i].u[0];
+ face[i].u[1] = (face[i].u[0] + face[i].u[1]) /2;
+ face[i].u[2] = (face[i].u[0] + face[i].u[2]) /2;
+ //face[i].v[0] = face[i].v[0] ;
+ face[i].v[1] = (face[i].v[0] + face[i].v[1]) /2;
+ face[i].v[2] = (face[i].v[0] + face[i].v[2]) /2;
+
+ n2 += 3; // number of faces
+ }
+ *nfaces = n2;
+}
+
+void KX_Dome::CalculateFrustum(KX_Camera * cam)
+{
+ /*
+ // manually creating a 90º Field of View Frustum
+
+ the original formula:
+ top = tan(fov*3.14159/360.0) * near [for fov in degrees]
+ fov*0.5 = arctan ((top-bottom)*0.5 / near) [for fov in radians]
+ bottom = -top
+ left = aspect * bottom
+ right = aspect * top
+
+ // the equivalent GLU call is:
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+ gluPerspective(90.0,1.0,cam->GetCameraNear(),cam->GetCameraFar());
+ */
+
+ RAS_FrameFrustum m_frustrum; //90 deg. Frustum
+
+ m_frustrum.camnear = cam->GetCameraNear();
+ m_frustrum.camfar = cam->GetCameraFar();
+
+// float top = tan(90.0*MT_PI/360.0) * m_frustrum.camnear;
+ float top = m_frustrum.camnear; // for deg = 90º, tan = 1
+
+ m_frustrum.x1 = -top;
+ m_frustrum.x2 = top;
+ m_frustrum.y1 = -top;
+ m_frustrum.y2 = top;
+
+ m_projmat = m_rasterizer->GetFrustumMatrix(
+ m_frustrum.x1, m_frustrum.x2, m_frustrum.y1, m_frustrum.y2, m_frustrum.camnear, m_frustrum.camfar);
+
+}
+
+void KX_Dome::CalculateCameraOrientation()
+{
+/*
+Uses 4 cameras for angles up to 180º
+Uses 5 cameras for angles up to 250º
+Uses 6 cameras for angles up to 360º
+*/
+ float deg45 = MT_PI / 4;
+ MT_Scalar c = cos(deg45);
+ MT_Scalar s = sin(deg45);
+
+ if ((m_mode == DOME_FISHEYE && m_angle <= 180)|| m_mode == DOME_TRUNCATED){
+
+ m_locRot[0] = MT_Matrix3x3( // 90º - Top
+ c, -s, 0.0,
+ 0.0,0.0, -1.0,
+ s, c, 0.0);
+
+ m_locRot[1] = MT_Matrix3x3( // 90º - Bottom
+ -s, c, 0.0,
+ 0.0,0.0, 1.0,
+ s, c, 0.0);
+
+ m_locRot[2] = MT_Matrix3x3( // 45º - Left
+ c, 0.0, s,
+ 0, 1.0, 0.0,
+ -s, 0.0, c);
+
+ m_locRot[3] = MT_Matrix3x3( // 45º - Right
+ c, 0.0, -s,
+ 0.0, 1.0, 0.0,
+ s, 0.0, c);
+
+ } else if ((m_mode == DOME_FISHEYE && m_angle > 180)){
+
+ m_locRot[0] = MT_Matrix3x3( // 90º - Top
+ 1.0, 0.0, 0.0,
+ 0.0, 0.0,-1.0,
+ 0.0, 1.0, 0.0);
+
+ m_locRot[1] = MT_Matrix3x3( // 90º - Bottom
+ 1.0, 0.0, 0.0,
+ 0.0, 0.0, 1.0,
+ 0.0,-1.0, 0.0);
+
+ m_locRot[2] = MT_Matrix3x3( // -90º - Left
+ 0.0, 0.0, 1.0,
+ 0.0, 1.0, 0.0,
+ -1.0, 0.0, 0.0);
+
+ m_locRot[3] = MT_Matrix3x3( // 90º - Right
+ 0.0, 0.0,-1.0,
+ 0.0, 1.0, 0.0,
+ 1.0, 0.0, 0.0);
+
+ m_locRot[4] = MT_Matrix3x3( // 0º - Front
+ 1.0, 0.0, 0.0,
+ 0.0, 1.0, 0.0,
+ 0.0, 0.0, 1.0);
+
+ m_locRot[5] = MT_Matrix3x3( // 180º - Back - NOT USING
+ -1.0, 0.0, 0.0,
+ 0.0, 1.0, 0.0,
+ 0.0, 0.0,-1.0);
+
+ } else if (m_mode == DOME_PANORAM_SPH){
+
+ m_locRot[0] = MT_Matrix3x3( // Top
+ c, s, 0.0,
+ 0.0,0.0, -1.0,
+ -s, c, 0.0);
+
+ m_locRot[1] = MT_Matrix3x3( // Bottom
+ c, s, 0.0,
+ 0.0 ,0.0, 1.0,
+ s, -c, 0.0);
+
+ m_locRot[2] = MT_Matrix3x3( // 45º - Left
+ -s, 0.0, c,
+ 0, 1.0, 0.0,
+ -c, 0.0, -s);
+
+ m_locRot[3] = MT_Matrix3x3( // 45º - Right
+ c, 0.0, s,
+ 0, 1.0, 0.0,
+ -s, 0.0, c);
+
+ m_locRot[4] = MT_Matrix3x3( // 135º - LeftBack
+ -s, 0.0, -c,
+ 0.0, 1.0, 0.0,
+ c, 0.0, -s);
+
+ m_locRot[5] = MT_Matrix3x3( // 135º - RightBack
+ c, 0.0, -s,
+ 0.0, 1.0, 0.0,
+ s, 0.0, c);
+ }
+}
+
+void KX_Dome::RotateCamera(KX_Camera* cam, int i)
+{
+// I'm not using it, I'm doing inline calls for these commands
+// but it's nice to have it here in case I need it
+
+ MT_Matrix3x3 camori = cam->GetSGNode()->GetLocalOrientation();
+
+ cam->NodeSetLocalOrientation(camori*m_locRot[i]);
+ cam->NodeUpdateGS(0.f);
+
+ MT_Transform camtrans(cam->GetWorldToCamera());
+ MT_Matrix4x4 viewmat(camtrans);
+ m_rasterizer->SetViewMatrix(viewmat, cam->NodeGetWorldPosition(),
+ cam->GetCameraLocation(), cam->GetCameraOrientation());
+ cam->SetModelviewMatrix(viewmat);
+
+ // restore the original orientation
+ cam->NodeSetLocalOrientation(camori);
+ cam->NodeUpdateGS(0.f);
+}
+
+void KX_Dome::Draw(void)
+{
+
+ switch(m_mode){
+ case DOME_FISHEYE:
+ DrawDomeFisheye();
+ break;
+ case DOME_TRUNCATED:
+ DrawDomeFisheye();
+ break;
+ case DOME_PANORAM_SPH:
+ DrawPanorama();
+ break;
+ }
+
+ if(warp.usemesh)
+ {
+ glBindTexture(GL_TEXTURE_2D, domefacesId[m_numfaces]);
+ glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, m_viewport.GetLeft(), m_viewport.GetBottom(), warp.bufferwidth, warp.bufferheight);
+ DrawDomeWarped();
+ }
+}
+
+void KX_Dome::DrawDomeFisheye(void)
+{
+ int i,j;
+
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+
+ // Making the viewport always square
+
+ int can_width = m_viewport.GetRight();
+ int can_height = m_viewport.GetTop();
+
+ float ortho_width, ortho_height;
+
+ if (warp.usemesh)
+ glOrtho((-1.0), 1.0, (-1.0), 1.0, -20.0, 10.0); //stretch the image to reduce resolution lost
+
+ else if(m_mode == DOME_TRUNCATED){
+ ortho_width = 1.0;
+ ortho_height = 2 * ((float)can_height/can_width) - 1.0 ;
+
+ ortho_width /= m_size;
+ ortho_height /= m_size;
+
+ glOrtho((-ortho_width), ortho_width, (-ortho_height), ortho_width, -20.0, 10.0);
+ } else {
+ if (can_width < can_height){
+ ortho_width = 1.0;
+ ortho_height = (float)can_height/can_width;
+ }else{
+ ortho_width = (float)can_width/can_height;
+ ortho_height = 1.0;
+ }
+
+ ortho_width /= m_size;
+ ortho_height /= m_size;
+
+ glOrtho((-ortho_width), ortho_width, (-ortho_height), ortho_height, -20.0, 10.0);
+ }
+
+ glMatrixMode(GL_TEXTURE);
+ glLoadIdentity();
+ glMatrixMode(GL_MODELVIEW);
+ glLoadIdentity();
+ gluLookAt(0.0,-1.0,0.0, 0.0,0.0,0.0, 0.0,0.0,1.0);
+
+ if(m_drawingmode == RAS_IRasterizer::KX_WIREFRAME)
+ glPolygonMode(GL_FRONT, GL_LINE);
+ else
+ glPolygonMode(GL_FRONT, GL_FILL);
+
+ glShadeModel(GL_SMOOTH);
+ glDisable(GL_LIGHTING);
+ glDisable(GL_DEPTH_TEST);
+
+ glEnable(GL_TEXTURE_2D);
+ glColor3f(1.0,1.0,1.0);
+
+ if (dlistSupported){
+ for(i=0;i<m_numfaces;i++){
+ glBindTexture(GL_TEXTURE_2D, domefacesId[i]);
+ glCallList(dlistId+i);
+ }
+ }
+ else { // DisplayLists not supported
+ // top triangle
+ glBindTexture(GL_TEXTURE_2D, domefacesId[0]);
+ GLDrawTriangles(cubetop, nfacestop);
+
+ // bottom triangle
+ glBindTexture(GL_TEXTURE_2D, domefacesId[1]);
+ GLDrawTriangles(cubebottom, nfacesbottom);
+
+ // left triangle
+ glBindTexture(GL_TEXTURE_2D, domefacesId[2]);
+ GLDrawTriangles(cubeleft, nfacesleft);
+
+ // right triangle
+ glBindTexture(GL_TEXTURE_2D, domefacesId[3]);
+ GLDrawTriangles(cuberight, nfacesright);
+
+ if (m_angle > 180){
+ // front triangle
+ glBindTexture(GL_TEXTURE_2D, domefacesId[4]);
+ GLDrawTriangles(cubefront, nfacesfront);
+ }
+ }
+ glDisable(GL_TEXTURE_2D);
+ glEnable(GL_DEPTH_TEST);
+}
+
+void KX_Dome::DrawPanorama(void)
+{
+ int i,j;
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+
+ // Making the viewport always square
+
+ int can_width = m_viewport.GetRight();
+ int can_height = m_viewport.GetTop();
+
+ float ortho_height = 1.0;
+ float ortho_width = 1.0;
+
+ if (warp.usemesh)
+ glOrtho((-1.0), 1.0, (-0.5), 0.5, -20.0, 10.0); //stretch the image to reduce resolution lost
+
+ else {
+ //using all the screen
+ if ((can_width / 2) <= (can_height)){
+ ortho_width = 1.0;
+ ortho_height = (float)can_height/can_width;
+ }else{
+ ortho_width = (float)can_width/can_height * 0.5;
+ ortho_height = 0.5;
+ }
+
+ ortho_width /= m_size;
+ ortho_height /= m_size;
+
+ glOrtho((-ortho_width), ortho_width, (-ortho_height), ortho_height, -20.0, 10.0);
+ }
+
+ glMatrixMode(GL_TEXTURE);
+ glLoadIdentity();
+ glMatrixMode(GL_MODELVIEW);
+ glLoadIdentity();
+ gluLookAt(0.0,-1.0,0.0, 0.0,0.0,0.0, 0.0,0.0,1.0);
+
+ if(m_drawingmode == RAS_IRasterizer::KX_WIREFRAME)
+ glPolygonMode(GL_FRONT, GL_LINE);
+ else
+ glPolygonMode(GL_FRONT, GL_FILL);
+
+ glShadeModel(GL_SMOOTH);
+ glDisable(GL_LIGHTING);
+ glDisable(GL_DEPTH_TEST);
+
+ glEnable(GL_TEXTURE_2D);
+ glColor3f(1.0,1.0,1.0);
+
+ if (dlistSupported){
+ for(i=0;i<m_numfaces;i++){
+ glBindTexture(GL_TEXTURE_2D, domefacesId[i]);
+ glCallList(dlistId+i);
+ }
+ }
+ else {
+ // domefacesId[4] => (top)
+ glBindTexture(GL_TEXTURE_2D, domefacesId[0]);
+ GLDrawTriangles(cubetop, nfacestop);
+
+ // domefacesId[5] => (bottom)
+ glBindTexture(GL_TEXTURE_2D, domefacesId[1]);
+ GLDrawTriangles(cubebottom, nfacesbottom);
+
+ // domefacesId[1] => -45º (left)
+ glBindTexture(GL_TEXTURE_2D, domefacesId[2]);
+ GLDrawTriangles(cubeleft, nfacesleft);
+
+ // domefacesId[2] => 45º (right)
+ glBindTexture(GL_TEXTURE_2D, domefacesId[3]);
+ GLDrawTriangles(cuberight, nfacesright);
+
+ // domefacesId[0] => -135º (leftback)
+ glBindTexture(GL_TEXTURE_2D, domefacesId[4]);
+ GLDrawTriangles(cubeleftback, nfacesleftback);
+
+ // domefacesId[3] => 135º (rightback)
+ glBindTexture(GL_TEXTURE_2D, domefacesId[5]);
+ GLDrawTriangles(cuberightback, nfacesrightback);
+ }
+ glDisable(GL_TEXTURE_2D);
+ glEnable(GL_DEPTH_TEST);
+}
+
+void KX_Dome::DrawDomeWarped(void)
+{
+ int i,j;
+
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+
+ // Making the viewport always square
+ int can_width = m_viewport.GetRight();
+ int can_height = m_viewport.GetTop();
+
+ double screen_ratio = can_width/ (double) can_height;
+ screen_ratio /= m_size;
+
+ glOrtho(-screen_ratio,screen_ratio,-1.0,1.0,-20.0,10.0);
+
+
+ glMatrixMode(GL_TEXTURE);
+ glLoadIdentity();
+ glMatrixMode(GL_MODELVIEW);
+ glLoadIdentity();
+ gluLookAt(0.0, 0.0, 1.0, 0.0,0.0,0.0, 0.0,1.0,0.0);
+
+ if(m_drawingmode == RAS_IRasterizer::KX_WIREFRAME)
+ glPolygonMode(GL_FRONT, GL_LINE);
+ else
+ glPolygonMode(GL_FRONT, GL_FILL);
+
+ glShadeModel(GL_SMOOTH);
+ glDisable(GL_LIGHTING);
+ glDisable(GL_DEPTH_TEST);
+
+ glEnable(GL_TEXTURE_2D);
+ glColor3f(1.0,1.0,1.0);
+
+
+ float uv_width = (float)(warp.bufferwidth-1) / warp.imagewidth;
+ float uv_height = (float)(warp.bufferheight-1) / warp.imageheight;
+
+ if (dlistSupported){
+ glBindTexture(GL_TEXTURE_2D, domefacesId[m_numfaces]);
+ glCallList(dlistId + m_numfaces);
+ }
+ else{
+ glBindTexture(GL_TEXTURE_2D, domefacesId[m_numfaces]);
+ GLDrawWarpQuads();
+ }
+ glDisable(GL_TEXTURE_2D);
+ glEnable(GL_DEPTH_TEST);
+}
+
+void KX_Dome::BindImages(int i)
+{
+ glBindTexture(GL_TEXTURE_2D, domefacesId[i]);
+ glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, m_viewport.GetLeft(), m_viewport.GetBottom(), m_buffersize, m_buffersize);
+}
+
+void KX_Dome::RenderDomeFrame(KX_Scene* scene, KX_Camera* cam, int i)
+{
+ if (!cam)
+ return;
+
+ m_canvas->SetViewPort(0,0,m_buffersize-1,m_buffersize-1);
+
+// m_rasterizer->SetAmbient();
+ m_rasterizer->DisplayFog();
+
+ CalculateFrustum(cam); //calculates m_projmat
+ cam->SetProjectionMatrix(m_projmat);
+ m_rasterizer->SetProjectionMatrix(cam->GetProjectionMatrix());
+// Dome_RotateCamera(cam,i);
+
+ MT_Matrix3x3 camori = cam->GetSGNode()->GetLocalOrientation();
+
+ cam->NodeSetLocalOrientation(camori*m_locRot[i]);
+ cam->NodeUpdateGS(0.f);
+
+ MT_Transform camtrans(cam->GetWorldToCamera());
+ MT_Matrix4x4 viewmat(camtrans);
+ m_rasterizer->SetViewMatrix(viewmat, cam->NodeGetWorldPosition(),
+ cam->GetCameraLocation(), cam->GetCameraOrientation());
+ cam->SetModelviewMatrix(viewmat);
+
+ scene->CalculateVisibleMeshes(m_rasterizer,cam);
+ scene->RenderBuckets(camtrans, m_rasterizer, m_rendertools);
+
+ // restore the original orientation
+ cam->NodeSetLocalOrientation(camori);
+ cam->NodeUpdateGS(0.f);
+} \ No newline at end of file
diff --git a/source/gameengine/Ketsji/KX_Dome.h b/source/gameengine/Ketsji/KX_Dome.h
new file mode 100644
index 00000000000..786e04b4385
--- /dev/null
+++ b/source/gameengine/Ketsji/KX_Dome.h
@@ -0,0 +1,183 @@
+/* $Id$
+-----------------------------------------------------------------------------
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+
+Contributor(s): Dalai Felinto
+
+This source uses some of the ideas and code from Paul Bourke.
+Developed as part of a Research and Development project for SAT - La Société des arts technologiques.
+-----------------------------------------------------------------------------
+*/
+
+#if !defined KX_DOME_H
+#define KX_DOME_H
+
+#include "KX_Scene.h"
+#include "KX_Camera.h"
+#include "DNA_screen_types.h"
+#include "RAS_ICanvas.h"
+#include "RAS_IRasterizer.h"
+#include "RAS_IRenderTools.h"
+#include "KX_KetsjiEngine.h"
+
+#include "GL/glew.h"
+#include <vector>
+
+#include "MEM_guardedalloc.h"
+#include "BKE_text.h"
+//#include "BLI_blenlib.h"
+
+//Dome modes: limit hardcoded in buttons_scene.c
+#define DOME_FISHEYE 1
+#define DOME_TRUNCATED 2
+#define DOME_PANORAM_SPH 3
+#define DOME_NUM_MODES 4
+
+
+/// class for render 3d scene
+class KX_Dome
+{
+public:
+ /// constructor
+ KX_Dome (
+ RAS_ICanvas* m_canvas,
+ /// rasterizer
+ RAS_IRasterizer* m_rasterizer,
+ /// render tools
+ RAS_IRenderTools* m_rendertools,
+ /// engine
+ KX_KetsjiEngine* m_engine,
+
+ float size,
+ short res,
+ short mode,
+ short angle,
+ float resbuf,
+ struct Text* warptext
+ );
+
+ /// destructor
+ virtual ~KX_Dome (void);
+
+ //openGL checks:
+ bool dlistSupported;
+
+ //openGL names:
+ GLuint domefacesId[7]; // ID of the images -- room for 7 images, using only 4 for 180º x 360º dome, 6 for panoramic and +1 for warp mesh
+ GLuint dlistId; // ID of the Display Lists of the images (used as an offset)
+
+ typedef struct {
+ double u[3], v[3];
+ MT_Vector3 verts[3]; //three verts
+ } DomeFace;
+
+ //mesh warp functions
+ typedef struct {
+ double x, y, u, v, i;
+ } WarpMeshNode;
+
+ struct {
+ bool usemesh;
+ int mode;
+ int n_width, n_height; //nodes width and height
+ int imagewidth, imageheight;
+ int bufferwidth, bufferheight;
+ vector <vector <WarpMeshNode> > nodes;
+ } warp;
+
+ bool ParseWarpMesh(STR_String text);
+
+ vector <DomeFace> cubetop, cubebottom, cuberight, cubeleft, cubefront, cubeback; //for fisheye
+ vector <DomeFace> cubeleftback, cuberightback; //for panorama
+
+ int nfacestop, nfacesbottom, nfacesleft, nfacesright, nfacesfront, nfacesback;
+ int nfacesleftback, nfacesrightback;
+
+ int GetNumberRenders(){return m_numfaces;};
+
+ void RenderDome(void);
+ void RenderDomeFrame(KX_Scene* scene, KX_Camera* cam, int i);
+ void BindImages(int i);
+
+ void SetViewPort(GLuint viewport[4]);
+ void CalculateFrustum(KX_Camera* cam);
+ void RotateCamera(KX_Camera* cam, int i);
+
+ //Mesh Creating Functions
+ void CreateMeshDome180(void);
+ void CreateMeshDome250(void);
+ void CreateMeshPanorama(void);
+
+ void SplitFace(vector <DomeFace>& face, int *nfaces);
+
+ void FlattenDome(MT_Vector3 verts[3]);
+ void FlattenPanorama(MT_Vector3 verts[3]);
+
+ //Draw functions
+ void GLDrawTriangles(vector <DomeFace>& face, int nfaces);
+ void GLDrawWarpQuads(void);
+ void Draw(void);
+ void DrawDomeFisheye(void);
+ void DrawPanorama(void);
+ void DrawDomeWarped(void);
+
+ //setting up openGL
+ void CreateGLImages(void);
+ void ClearGLImages(void);//called on resize
+ bool CreateDL(void); //create Display Lists
+ void ClearDL(void); //remove Display Lists
+
+ void CalculateCameraOrientation();
+ void CalculateImageSize(); //set m_imagesize
+
+ int canvaswidth;
+ int canvasheight;
+
+protected:
+ int m_drawingmode;
+
+ int m_imagesize;
+ int m_buffersize; // canvas small dimension
+ int m_numfaces; // 4 to 6 depending on the kind of dome image
+ int m_numimages; //numfaces +1 if we have warp mesh
+
+ float m_size; // size to adjust
+ short m_resolution; //resolution to tesselate the mesh
+ short m_mode; // the mode (truncated, warped, panoramic,...)
+ short m_angle; //the angle of the fisheye
+ float m_radangle; //the angle of the fisheye in radians
+ float m_resbuffer; //the resolution of the buffer
+
+ RAS_Rect m_viewport;
+
+ MT_Matrix4x4 m_projmat;
+
+ MT_Matrix3x3 m_locRot [6];// the rotation matrix
+
+ /// rendered scene
+ KX_Scene * m_scene;
+
+ /// canvas
+ RAS_ICanvas* m_canvas;
+ /// rasterizer
+ RAS_IRasterizer* m_rasterizer;
+ /// render tools
+ RAS_IRenderTools* m_rendertools;
+ /// engine
+ KX_KetsjiEngine* m_engine;
+};
+
+#endif
diff --git a/source/gameengine/Ketsji/KX_GameActuator.cpp b/source/gameengine/Ketsji/KX_GameActuator.cpp
index 3c0695b5952..8b587c6f7de 100644
--- a/source/gameengine/Ketsji/KX_GameActuator.cpp
+++ b/source/gameengine/Ketsji/KX_GameActuator.cpp
@@ -208,22 +208,22 @@ bool KX_GameActuator::Update()
/* Integration hooks ------------------------------------------------------- */
PyTypeObject KX_GameActuator::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"KX_GameActuator",
- sizeof(KX_GameActuator),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0, //&MyPyCompare,
- __repr,
- 0, //&cvalue_as_number,
0,
0,
0,
- 0
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
@@ -241,21 +241,38 @@ PyParentObject KX_GameActuator::Parents[] =
PyMethodDef KX_GameActuator::Methods[] =
{
+ // Deprecated ----->
{"getFile", (PyCFunction) KX_GameActuator::sPyGetFile, METH_VARARGS, (PY_METHODCHAR)GetFile_doc},
{"setFile", (PyCFunction) KX_GameActuator::sPySetFile, METH_VARARGS, (PY_METHODCHAR)SetFile_doc},
+ // <-----
{NULL,NULL} //Sentinel
};
PyAttributeDef KX_GameActuator::Attributes[] = {
+ KX_PYATTRIBUTE_STRING_RW("file",0,100,false,KX_GameActuator,m_filename),
{ NULL } //Sentinel
};
+PyObject*
+KX_GameActuator::py_getattro(PyObject *attr)
+{
+ py_getattro_up(SCA_IActuator);
+}
+
+int KX_GameActuator::py_setattro(PyObject *attr, PyObject *value)
+{
+ py_setattro_up(SCA_IActuator);
+}
+
+
+// Deprecated ----->
/* getFile */
const char KX_GameActuator::GetFile_doc[] =
"getFile()\n"
"get the name of the file to start.\n";
-PyObject* KX_GameActuator::PyGetFile(PyObject* self, PyObject* args, PyObject* kwds)
+PyObject* KX_GameActuator::PyGetFile(PyObject* args, PyObject* kwds)
{
+ ShowDeprecationWarning("getFile()", "the file property");
return PyString_FromString(m_filename);
}
@@ -263,11 +280,13 @@ PyObject* KX_GameActuator::PyGetFile(PyObject* self, PyObject* args, PyObject* k
const char KX_GameActuator::SetFile_doc[] =
"setFile(name)\n"
"set the name of the file to start.\n";
-PyObject* KX_GameActuator::PySetFile(PyObject* self, PyObject* args, PyObject* kwds)
+PyObject* KX_GameActuator::PySetFile(PyObject* args, PyObject* kwds)
{
char* new_file;
+
+ ShowDeprecationWarning("setFile()", "the file property");
- if (!PyArg_ParseTuple(args, "s", &new_file))
+ if (!PyArg_ParseTuple(args, "s:setFile", &new_file))
{
return NULL;
}
@@ -277,12 +296,4 @@ PyObject* KX_GameActuator::PySetFile(PyObject* self, PyObject* args, PyObject* k
Py_RETURN_NONE;
}
-
-
-
-PyObject* KX_GameActuator::_getattr(const char *attr)
-{
- _getattr_up(SCA_IActuator);
-}
-
-
+// <-----
diff --git a/source/gameengine/Ketsji/KX_GameActuator.h b/source/gameengine/Ketsji/KX_GameActuator.h
index 856fa0c24e9..570cb2e68ef 100644
--- a/source/gameengine/Ketsji/KX_GameActuator.h
+++ b/source/gameengine/Ketsji/KX_GameActuator.h
@@ -77,9 +77,13 @@ protected:
/* Python interface ---------------------------------------------------- */
/* --------------------------------------------------------------------- */
- virtual PyObject* _getattr(const char *attr);
+ virtual PyObject* py_getattro(PyObject *attr);
+ virtual int py_setattro(PyObject *attr, PyObject *value);
+
+ // Deprecated functions ----->
KX_PYMETHOD_DOC(KX_GameActuator,GetFile);
KX_PYMETHOD_DOC(KX_GameActuator,SetFile);
+ // <-----
}; /* end of class KX_GameActuator */
diff --git a/source/gameengine/Ketsji/KX_GameObject.cpp b/source/gameengine/Ketsji/KX_GameObject.cpp
index 95df9d51a26..bea0fcff2af 100644
--- a/source/gameengine/Ketsji/KX_GameObject.cpp
+++ b/source/gameengine/Ketsji/KX_GameObject.cpp
@@ -55,6 +55,7 @@ typedef unsigned long uint_ptr;
#include <stdio.h> // printf
#include "SG_Controller.h"
#include "KX_IPhysicsController.h"
+#include "PHY_IGraphicController.h"
#include "SG_Node.h"
#include "SG_Controller.h"
#include "KX_ClientObjectInfo.h"
@@ -64,6 +65,8 @@ typedef unsigned long uint_ptr;
#include "KX_PyMath.h"
#include "SCA_IActuator.h"
#include "SCA_ISensor.h"
+#include "SCA_IController.h"
+#include "NG_NetworkScene.h" //Needed for sendMessage()
#include "PyObjectPlus.h" /* python stuff */
@@ -72,6 +75,12 @@ typedef unsigned long uint_ptr;
#include "KX_SG_NodeRelationships.h"
+static MT_Point3 dummy_point= MT_Point3(0.0, 0.0, 0.0);
+static MT_Vector3 dummy_scaling = MT_Vector3(1.0, 1.0, 1.0);
+static MT_Matrix3x3 dummy_orientation = MT_Matrix3x3( 1.0, 0.0, 0.0,
+ 0.0, 1.0, 0.0,
+ 0.0, 0.0, 1.0);
+
KX_GameObject::KX_GameObject(
void* sgReplicationInfo,
SG_Callbacks callbacks,
@@ -87,11 +96,14 @@ KX_GameObject::KX_GameObject(
m_bIsNegativeScaling(false),
m_bVisible(true),
m_bCulled(true),
+ m_bOccluder(false),
m_pPhysicsController1(NULL),
+ m_pGraphicController(NULL),
m_pPhysicsEnvironment(NULL),
m_xray(false),
m_pHitObject(NULL),
- m_isDeformable(false)
+ m_isDeformable(false),
+ m_attr_dict(NULL)
{
m_ignore_activity_culling = false;
m_pClient_info = new KX_ClientObjectInfo(this, KX_ClientObjectInfo::ACTOR);
@@ -129,9 +141,23 @@ KX_GameObject::~KX_GameObject()
}
m_pSGNode->SetSGClientObject(NULL);
}
+ if (m_pGraphicController)
+ {
+ delete m_pGraphicController;
+ }
+
+ if (m_attr_dict) {
+ PyDict_Clear(m_attr_dict); /* incase of circular refs or other weired cases */
+ Py_DECREF(m_attr_dict);
+ }
}
-
+KX_GameObject* KX_GameObject::GetClientObject(KX_ClientObjectInfo* info)
+{
+ if (!info)
+ return NULL;
+ return info->m_gameobject;
+}
CValue* KX_GameObject:: Calc(VALUE_OPERATOR op, CValue *val)
{
@@ -154,7 +180,7 @@ const STR_String & KX_GameObject::GetText()
-float KX_GameObject::GetNumber()
+double KX_GameObject::GetNumber()
{
return 0;
}
@@ -246,7 +272,7 @@ void KX_GameObject::SetParent(KX_Scene *scene, KX_GameObject* obj)
NodeSetLocalScale(scale1);
NodeSetLocalPosition(MT_Point3(newpos[0],newpos[1],newpos[2]));
NodeSetLocalOrientation(invori*NodeGetWorldOrientation());
- NodeUpdateGS(0.f,true);
+ NodeUpdateGS(0.f);
// object will now be a child, it must be removed from the parent list
CListValue* rootlist = scene->GetRootParentList();
if (rootlist->RemoveValue(this))
@@ -266,6 +292,7 @@ void KX_GameObject::SetParent(KX_Scene *scene, KX_GameObject* obj)
rootobj->m_pPhysicsController1->AddCompoundChild(m_pPhysicsController1);
}
}
+ // graphically, the object hasn't change place, no need to update m_pGraphicController
}
}
@@ -283,7 +310,7 @@ void KX_GameObject::RemoveParent(KX_Scene *scene)
// Remove us from our parent
GetSGNode()->DisconnectFromParent();
- NodeUpdateGS(0.f,true);
+ NodeUpdateGS(0.f);
// the object is now a root object, add it to the parentlist
CListValue* rootlist = scene->GetRootParentList();
if (!rootlist->SearchValue(this))
@@ -300,16 +327,21 @@ void KX_GameObject::RemoveParent(KX_Scene *scene)
}
m_pPhysicsController1->RestoreDynamics();
}
+ // graphically, the object hasn't change place, no need to update m_pGraphicController
}
}
void KX_GameObject::ProcessReplica(KX_GameObject* replica)
{
replica->m_pPhysicsController1 = NULL;
+ replica->m_pGraphicController = NULL;
replica->m_pSGNode = NULL;
replica->m_pClient_info = new KX_ClientObjectInfo(*m_pClient_info);
replica->m_pClient_info->m_gameobject = replica;
replica->m_state = 0;
+ if(m_attr_dict)
+ replica->m_attr_dict= PyDict_Copy(m_attr_dict);
+
}
@@ -345,11 +377,14 @@ void KX_GameObject::ApplyTorque(const MT_Vector3& torque,bool local)
void KX_GameObject::ApplyMovement(const MT_Vector3& dloc,bool local)
{
- if (m_pPhysicsController1) // (IsDynamic())
+ if (GetSGNode())
{
- m_pPhysicsController1->RelativeTranslate(dloc,local);
+ if (m_pPhysicsController1) // (IsDynamic())
+ {
+ m_pPhysicsController1->RelativeTranslate(dloc,local);
+ }
+ GetSGNode()->RelativeTranslate(dloc,GetSGNode()->GetSGParent(),local);
}
- GetSGNode()->RelativeTranslate(dloc,GetSGNode()->GetSGParent(),local);
}
@@ -357,11 +392,13 @@ void KX_GameObject::ApplyMovement(const MT_Vector3& dloc,bool local)
void KX_GameObject::ApplyRotation(const MT_Vector3& drot,bool local)
{
MT_Matrix3x3 rotmat(drot);
+
+ if (GetSGNode()) {
+ GetSGNode()->RelativeRotate(rotmat,local);
- GetSGNode()->RelativeRotate(rotmat,local);
-
- if (m_pPhysicsController1) { // (IsDynamic())
- m_pPhysicsController1->RelativeRotate(rotmat,local);
+ if (m_pPhysicsController1) { // (IsDynamic())
+ m_pPhysicsController1->RelativeRotate(rotmat,local);
+ }
}
}
@@ -374,16 +411,17 @@ double* KX_GameObject::GetOpenGLMatrix()
{
// todo: optimize and only update if necessary
double* fl = m_OpenGL_4x4Matrix.getPointer();
- MT_Transform trans;
+ if (GetSGNode()) {
+ MT_Transform trans;
- trans.setOrigin(GetSGNode()->GetWorldPosition());
- trans.setBasis(GetSGNode()->GetWorldOrientation());
+ trans.setOrigin(GetSGNode()->GetWorldPosition());
+ trans.setBasis(GetSGNode()->GetWorldOrientation());
- MT_Vector3 scaling = GetSGNode()->GetWorldScaling();
- m_bIsNegativeScaling = ((scaling[0] < 0.0) ^ (scaling[1] < 0.0) ^ (scaling[2] < 0.0)) ? true : false;
- trans.scale(scaling[0], scaling[1], scaling[2]);
- trans.getValue(fl);
-
+ MT_Vector3 scaling = GetSGNode()->GetWorldScaling();
+ m_bIsNegativeScaling = ((scaling[0] < 0.0) ^ (scaling[1] < 0.0) ^ (scaling[2] < 0.0)) ? true : false;
+ trans.scale(scaling[0], scaling[1], scaling[2]);
+ trans.getValue(fl);
+ }
return fl;
}
@@ -414,13 +452,15 @@ static void UpdateBuckets_recursive(SG_Node* node)
void KX_GameObject::UpdateBuckets( bool recursive )
{
- double* fl = GetOpenGLMatrix();
+ if (GetSGNode()) {
+ double* fl = GetOpenGLMatrixPtr()->getPointer();
- for (size_t i=0;i<m_meshes.size();i++)
- m_meshes[i]->UpdateBuckets(this, fl, m_bUseObjectColor, m_objectColor, m_bVisible, m_bCulled);
+ for (size_t i=0;i<m_meshes.size();i++)
+ m_meshes[i]->UpdateBuckets(this, fl, m_bUseObjectColor, m_objectColor, m_bVisible, m_bCulled);
- if (recursive) {
- UpdateBuckets_recursive(m_pSGNode);
+ if (recursive) {
+ UpdateBuckets_recursive(GetSGNode());
+ }
}
}
@@ -434,22 +474,18 @@ void KX_GameObject::RemoveMeshes()
m_meshes.clear();
}
-
-
-void KX_GameObject::UpdateNonDynas()
+void KX_GameObject::UpdateTransform()
{
if (m_pPhysicsController1)
- {
+ // only update the transform of static object, dynamic object are handled differently
+ // note that for bullet, this does not even update the transform of static object
+ // but merely sets there collision flag to "kinematic" because the synchronization is
+ // done differently during physics simulation
m_pPhysicsController1->SetSumoTransform(true);
- }
-}
-
-
+ if (m_pGraphicController)
+ // update the culling tree
+ m_pGraphicController->SetGraphicTransform();
-void KX_GameObject::UpdateTransform()
-{
- if (m_pPhysicsController1)
- m_pPhysicsController1->SetSumoTransform(false);
}
void KX_GameObject::UpdateTransformFunc(SG_IObject* node, void* gameobj, void* scene)
@@ -575,28 +611,43 @@ KX_GameObject::SetVisible(
bool recursive
)
{
- m_bVisible = v;
- if (recursive)
- setVisible_recursive(m_pSGNode, v);
+ if (GetSGNode()) {
+ m_bVisible = v;
+ if (recursive)
+ setVisible_recursive(GetSGNode(), v);
+ }
}
-bool
-KX_GameObject::GetCulled(
- void
- )
+static void setOccluder_recursive(SG_Node* node, bool v)
{
- return m_bCulled;
+ NodeList& children = node->GetSGChildren();
+
+ for (NodeList::iterator childit = children.begin();!(childit==children.end());++childit)
+ {
+ SG_Node* childnode = (*childit);
+ KX_GameObject *clientgameobj = static_cast<KX_GameObject*>( (*childit)->GetSGClientObject());
+ if (clientgameobj != NULL) // This is a GameObject
+ clientgameobj->SetOccluder(v, false);
+
+ // if the childobj is NULL then this may be an inverse parent link
+ // so a non recursive search should still look down this node.
+ setOccluder_recursive(childnode, v);
+ }
}
void
-KX_GameObject::SetCulled(
- bool c
+KX_GameObject::SetOccluder(
+ bool v,
+ bool recursive
)
{
- m_bCulled = c;
+ if (GetSGNode()) {
+ m_bOccluder = v;
+ if (recursive)
+ setOccluder_recursive(GetSGNode(), v);
+ }
}
-
void
KX_GameObject::SetLayer(
int l
@@ -764,6 +815,16 @@ MT_Scalar KX_GameObject::GetMass()
return 0.0;
}
+MT_Vector3 KX_GameObject::GetLocalInertia()
+{
+ MT_Vector3 local_inertia(0.0,0.0,0.0);
+ if (m_pPhysicsController1)
+ {
+ local_inertia = m_pPhysicsController1->GetLocalInertia();
+ }
+ return local_inertia;
+}
+
MT_Vector3 KX_GameObject::GetLinearVelocity(bool local)
{
MT_Vector3 velocity(0.0,0.0,0.0), locvel;
@@ -829,6 +890,7 @@ void KX_GameObject::NodeSetLocalPosition(const MT_Point3& trans)
}
GetSGNode()->SetLocalPosition(trans);
+
}
@@ -883,7 +945,9 @@ void KX_GameObject::NodeSetRelativeScale(const MT_Vector3& scale)
void KX_GameObject::NodeSetWorldPosition(const MT_Point3& trans)
{
- SG_Node* parent = m_pSGNode->GetSGParent();
+ if (!GetSGNode())
+ return;
+ SG_Node* parent = GetSGNode()->GetSGParent();
if (parent != NULL)
{
// Make sure the objects have some scale
@@ -908,7 +972,7 @@ void KX_GameObject::NodeSetWorldPosition(const MT_Point3& trans)
}
-void KX_GameObject::NodeUpdateGS(double time,bool bInitiator)
+void KX_GameObject::NodeUpdateGS(double time)
{
if (GetSGNode())
GetSGNode()->UpdateWorldData(time);
@@ -918,13 +982,9 @@ void KX_GameObject::NodeUpdateGS(double time,bool bInitiator)
const MT_Matrix3x3& KX_GameObject::NodeGetWorldOrientation() const
{
- static MT_Matrix3x3 defaultOrientation = MT_Matrix3x3( 1.0, 0.0, 0.0,
- 0.0, 1.0, 0.0,
- 0.0, 0.0, 1.0);
-
// check on valid node in case a python controller holds a reference to a deleted object
if (!GetSGNode())
- return defaultOrientation;
+ return dummy_orientation;
return GetSGNode()->GetWorldOrientation();
}
@@ -932,11 +992,9 @@ const MT_Matrix3x3& KX_GameObject::NodeGetWorldOrientation() const
const MT_Vector3& KX_GameObject::NodeGetWorldScaling() const
{
- static MT_Vector3 defaultScaling = MT_Vector3(1.0, 1.0, 1.0);
-
// check on valid node in case a python controller holds a reference to a deleted object
if (!GetSGNode())
- return defaultScaling;
+ return dummy_scaling;
return GetSGNode()->GetWorldScaling();
}
@@ -949,7 +1007,7 @@ const MT_Point3& KX_GameObject::NodeGetWorldPosition() const
if (GetSGNode())
return GetSGNode()->GetWorldPosition();
else
- return MT_Point3(0.0, 0.0, 0.0);
+ return dummy_point;
}
/* Suspend/ resume: for the dynamic behaviour, there is a simple
@@ -963,7 +1021,8 @@ void KX_GameObject::Resume(void)
{
if (m_suspended) {
SCA_IObject::Resume();
- GetPhysicsController()->RestoreDynamics();
+ if(GetPhysicsController())
+ GetPhysicsController()->RestoreDynamics();
m_suspended = false;
}
@@ -974,22 +1033,54 @@ void KX_GameObject::Suspend()
if ((!m_ignore_activity_culling)
&& (!m_suspended)) {
SCA_IObject::Suspend();
- GetPhysicsController()->SuspendDynamics();
+ if(GetPhysicsController())
+ GetPhysicsController()->SuspendDynamics();
m_suspended = true;
}
}
+static void walk_children(SG_Node* node, CListValue* list, bool recursive)
+{
+ if (!node)
+ return;
+ NodeList& children = node->GetSGChildren();
+ for (NodeList::iterator childit = children.begin();!(childit==children.end());++childit)
+ {
+ SG_Node* childnode = (*childit);
+ CValue* childobj = (CValue*)childnode->GetSGClientObject();
+ if (childobj != NULL) // This is a GameObject
+ {
+ // add to the list
+ list->Add(childobj->AddRef());
+ }
+
+ // if the childobj is NULL then this may be an inverse parent link
+ // so a non recursive search should still look down this node.
+ if (recursive || childobj==NULL) {
+ walk_children(childnode, list, recursive);
+ }
+ }
+}
+CListValue* KX_GameObject::GetChildren()
+{
+ CListValue* list = new CListValue();
+ walk_children(GetSGNode(), list, 0); /* GetSGNode() is always valid or it would have raised an exception before this */
+ return list;
+}
-/* ------- python stuff ---------------------------------------------------*/
-
+CListValue* KX_GameObject::GetChildrenRecursive()
+{
+ CListValue* list = new CListValue();
+ walk_children(GetSGNode(), list, 1);
+ return list;
+}
+/* ------- python stuff ---------------------------------------------------*/
PyMethodDef KX_GameObject::Methods[] = {
- {"getPosition", (PyCFunction) KX_GameObject::sPyGetPosition, METH_NOARGS},
- {"setPosition", (PyCFunction) KX_GameObject::sPySetPosition, METH_O},
{"setWorldPosition", (PyCFunction) KX_GameObject::sPySetWorldPosition, METH_O},
{"applyForce", (PyCFunction) KX_GameObject::sPyApplyForce, METH_VARARGS},
{"applyTorque", (PyCFunction) KX_GameObject::sPyApplyTorque, METH_VARARGS},
@@ -1000,14 +1091,7 @@ PyMethodDef KX_GameObject::Methods[] = {
{"getAngularVelocity", (PyCFunction) KX_GameObject::sPyGetAngularVelocity, METH_VARARGS},
{"setAngularVelocity", (PyCFunction) KX_GameObject::sPySetAngularVelocity, METH_VARARGS},
{"getVelocity", (PyCFunction) KX_GameObject::sPyGetVelocity, METH_VARARGS},
- {"getMass", (PyCFunction) KX_GameObject::sPyGetMass, METH_NOARGS},
{"getReactionForce", (PyCFunction) KX_GameObject::sPyGetReactionForce, METH_NOARGS},
- {"getOrientation", (PyCFunction) KX_GameObject::sPyGetOrientation, METH_NOARGS},
- {"setOrientation", (PyCFunction) KX_GameObject::sPySetOrientation, METH_O},
- {"getVisible",(PyCFunction) KX_GameObject::sPyGetVisible, METH_NOARGS},
- {"setVisible",(PyCFunction) KX_GameObject::sPySetVisible, METH_VARARGS},
- {"getState",(PyCFunction) KX_GameObject::sPyGetState, METH_NOARGS},
- {"setState",(PyCFunction) KX_GameObject::sPySetState, METH_O},
{"alignAxisToVect",(PyCFunction) KX_GameObject::sPyAlignAxisToVect, METH_VARARGS},
{"getAxisVect",(PyCFunction) KX_GameObject::sPyGetAxisVect, METH_O},
{"suspendDynamics", (PyCFunction)KX_GameObject::sPySuspendDynamics,METH_NOARGS},
@@ -1016,25 +1100,66 @@ PyMethodDef KX_GameObject::Methods[] = {
{"disableRigidBody", (PyCFunction)KX_GameObject::sPyDisableRigidBody,METH_NOARGS},
{"applyImpulse", (PyCFunction) KX_GameObject::sPyApplyImpulse, METH_VARARGS},
{"setCollisionMargin", (PyCFunction) KX_GameObject::sPySetCollisionMargin, METH_O},
- {"getParent", (PyCFunction)KX_GameObject::sPyGetParent,METH_NOARGS},
{"setParent", (PyCFunction)KX_GameObject::sPySetParent,METH_O},
+ {"setVisible",(PyCFunction) KX_GameObject::sPySetVisible, METH_VARARGS},
+ {"setOcclusion",(PyCFunction) KX_GameObject::sPySetOcclusion, METH_VARARGS},
{"removeParent", (PyCFunction)KX_GameObject::sPyRemoveParent,METH_NOARGS},
{"getChildren", (PyCFunction)KX_GameObject::sPyGetChildren,METH_NOARGS},
{"getChildrenRecursive", (PyCFunction)KX_GameObject::sPyGetChildrenRecursive,METH_NOARGS},
- {"getMesh", (PyCFunction)KX_GameObject::sPyGetMesh,METH_VARARGS},
{"getPhysicsId", (PyCFunction)KX_GameObject::sPyGetPhysicsId,METH_NOARGS},
{"getPropertyNames", (PyCFunction)KX_GameObject::sPyGetPropertyNames,METH_NOARGS},
{"replaceMesh",(PyCFunction) KX_GameObject::sPyReplaceMesh, METH_O},
{"endObject",(PyCFunction) KX_GameObject::sPyEndObject, METH_NOARGS},
+
KX_PYMETHODTABLE(KX_GameObject, rayCastTo),
KX_PYMETHODTABLE(KX_GameObject, rayCast),
KX_PYMETHODTABLE_O(KX_GameObject, getDistanceTo),
KX_PYMETHODTABLE_O(KX_GameObject, getVectTo),
+ KX_PYMETHODTABLE(KX_GameObject, sendMessage),
+
+ // deprecated
+ {"getPosition", (PyCFunction) KX_GameObject::sPyGetPosition, METH_NOARGS},
+ {"setPosition", (PyCFunction) KX_GameObject::sPySetPosition, METH_O},
+ {"getOrientation", (PyCFunction) KX_GameObject::sPyGetOrientation, METH_NOARGS},
+ {"setOrientation", (PyCFunction) KX_GameObject::sPySetOrientation, METH_O},
+ {"getState",(PyCFunction) KX_GameObject::sPyGetState, METH_NOARGS},
+ {"setState",(PyCFunction) KX_GameObject::sPySetState, METH_O},
+ {"getParent", (PyCFunction)KX_GameObject::sPyGetParent,METH_NOARGS},
+ {"getVisible",(PyCFunction) KX_GameObject::sPyGetVisible, METH_NOARGS},
+ {"getMass", (PyCFunction) KX_GameObject::sPyGetMass, METH_NOARGS},
+ {"getMesh", (PyCFunction)KX_GameObject::sPyGetMesh,METH_VARARGS},
{NULL,NULL} //Sentinel
};
PyAttributeDef KX_GameObject::Attributes[] = {
- { NULL } //Sentinel
+ KX_PYATTRIBUTE_RO_FUNCTION("name", KX_GameObject, pyattr_get_name),
+ KX_PYATTRIBUTE_RO_FUNCTION("parent", KX_GameObject, pyattr_get_parent),
+ KX_PYATTRIBUTE_RW_FUNCTION("mass", KX_GameObject, pyattr_get_mass, pyattr_set_mass),
+ KX_PYATTRIBUTE_RW_FUNCTION("linVelocityMin", KX_GameObject, pyattr_get_lin_vel_min, pyattr_set_lin_vel_min),
+ KX_PYATTRIBUTE_RW_FUNCTION("linVelocityMax", KX_GameObject, pyattr_get_lin_vel_max, pyattr_set_lin_vel_max),
+ KX_PYATTRIBUTE_RW_FUNCTION("visible", KX_GameObject, pyattr_get_visible, pyattr_set_visible),
+ KX_PYATTRIBUTE_BOOL_RW ("occlusion", KX_GameObject, m_bOccluder),
+ KX_PYATTRIBUTE_RW_FUNCTION("position", KX_GameObject, pyattr_get_worldPosition, pyattr_set_localPosition),
+ KX_PYATTRIBUTE_RO_FUNCTION("localInertia", KX_GameObject, pyattr_get_localInertia),
+ KX_PYATTRIBUTE_RW_FUNCTION("orientation",KX_GameObject,pyattr_get_worldOrientation,pyattr_set_localOrientation),
+ KX_PYATTRIBUTE_RW_FUNCTION("scaling", KX_GameObject, pyattr_get_worldScaling, pyattr_set_localScaling),
+ KX_PYATTRIBUTE_RW_FUNCTION("timeOffset",KX_GameObject, pyattr_get_timeOffset,pyattr_set_timeOffset),
+ KX_PYATTRIBUTE_RW_FUNCTION("state", KX_GameObject, pyattr_get_state, pyattr_set_state),
+ KX_PYATTRIBUTE_RO_FUNCTION("meshes", KX_GameObject, pyattr_get_meshes),
+ KX_PYATTRIBUTE_RW_FUNCTION("localOrientation",KX_GameObject,pyattr_get_localOrientation,pyattr_set_localOrientation),
+ KX_PYATTRIBUTE_RO_FUNCTION("worldOrientation",KX_GameObject,pyattr_get_worldOrientation),
+ KX_PYATTRIBUTE_RW_FUNCTION("localPosition", KX_GameObject, pyattr_get_localPosition, pyattr_set_localPosition),
+ KX_PYATTRIBUTE_RW_FUNCTION("worldPosition", KX_GameObject, pyattr_get_worldPosition, pyattr_set_worldPosition),
+ KX_PYATTRIBUTE_RW_FUNCTION("localScaling", KX_GameObject, pyattr_get_localScaling, pyattr_set_localScaling),
+ KX_PYATTRIBUTE_RO_FUNCTION("worldScaling", KX_GameObject, pyattr_get_worldScaling),
+
+ KX_PYATTRIBUTE_RO_FUNCTION("__dict__", KX_GameObject, pyattr_get_dir_dict),
+
+ /* Experemental, dont rely on these yet */
+ KX_PYATTRIBUTE_RO_FUNCTION("sensors", KX_GameObject, pyattr_get_sensors),
+ KX_PYATTRIBUTE_RO_FUNCTION("controllers", KX_GameObject, pyattr_get_controllers),
+ KX_PYATTRIBUTE_RO_FUNCTION("actuators", KX_GameObject, pyattr_get_actuators),
+ {NULL} //Sentinel
};
@@ -1054,29 +1179,19 @@ bool KX_GameObject::ConvertPythonVectorArgs(PyObject* args,
}
*/
-PyObject* KX_GameObject::PyReplaceMesh(PyObject* self, PyObject* value)
+PyObject* KX_GameObject::PyReplaceMesh(PyObject* value)
{
KX_Scene *scene = KX_GetActiveScene();
- char* meshname;
- void* mesh_pt;
-
- meshname = PyString_AsString(value);
- if (meshname==NULL) {
- PyErr_SetString(PyExc_ValueError, "Expected a mesh name");
- return NULL;
- }
- mesh_pt = SCA_ILogicBrick::m_sCurrentLogicManager->GetMeshByName(STR_String(meshname));
+ RAS_MeshObject* new_mesh;
- if (mesh_pt==NULL) {
- PyErr_SetString(PyExc_ValueError, "The mesh name given does not exist");
+ if (!ConvertPythonToMesh(value, &new_mesh, false, "gameOb.replaceMesh(value): KX_GameObject"))
return NULL;
- }
- scene->ReplaceMesh(this, (class RAS_MeshObject*)mesh_pt);
+ scene->ReplaceMesh(this, new_mesh);
Py_RETURN_NONE;
}
-PyObject* KX_GameObject::PyEndObject(PyObject* self)
+PyObject* KX_GameObject::PyEndObject()
{
KX_Scene *scene = KX_GetActiveScene();
@@ -1087,34 +1202,183 @@ PyObject* KX_GameObject::PyEndObject(PyObject* self)
}
-PyObject* KX_GameObject::PyGetPosition(PyObject* self)
+PyObject* KX_GameObject::PyGetPosition()
{
+ ShowDeprecationWarning("getPosition()", "the position property");
return PyObjectFrom(NodeGetWorldPosition());
}
+Py_ssize_t KX_GameObject::Map_Len(PyObject* self_v)
+{
+ KX_GameObject* self= static_cast<KX_GameObject*>BGE_PROXY_REF(self_v);
+
+ if (self==NULL) /* not sure what to do here */
+ return 0;
+
+ Py_ssize_t len= self->GetPropertyCount();
+ if(self->m_attr_dict)
+ len += PyDict_Size(self->m_attr_dict);
+ return len;
+}
+
+
+PyObject *KX_GameObject::Map_GetItem(PyObject *self_v, PyObject *item)
+{
+ KX_GameObject* self= static_cast<KX_GameObject*>BGE_PROXY_REF(self_v);
+ const char *attr_str= PyString_AsString(item);
+ CValue* resultattr;
+ PyObject* pyconvert;
+
+ if (self==NULL) {
+ PyErr_SetString(PyExc_RuntimeError, BGE_PROXY_ERROR_MSG);
+ return NULL;
+ }
+
+ /* first see if the attributes a string and try get the cvalue attribute */
+ if(attr_str && (resultattr=self->GetProperty(attr_str))) {
+ pyconvert = resultattr->ConvertValueToPython();
+ return pyconvert ? pyconvert:resultattr->GetProxy();
+ }
+ /* no CValue attribute, try get the python only m_attr_dict attribute */
+ else if (self->m_attr_dict && (pyconvert=PyDict_GetItem(self->m_attr_dict, item))) {
+
+ if (attr_str)
+ PyErr_Clear();
+ Py_INCREF(pyconvert);
+ return pyconvert;
+ }
+ else {
+ if(attr_str) PyErr_Format(PyExc_KeyError, "value = gameOb[key]: KX_GameObject, key \"%s\" does not exist", attr_str);
+ else PyErr_SetString(PyExc_KeyError, "value = gameOb[key]: KX_GameObject, key does not exist");
+ return NULL;
+ }
+
+}
+
+
+int KX_GameObject::Map_SetItem(PyObject *self_v, PyObject *key, PyObject *val)
+{
+ KX_GameObject* self= static_cast<KX_GameObject*>BGE_PROXY_REF(self_v);
+ const char *attr_str= PyString_AsString(key);
+ if(attr_str==NULL)
+ PyErr_Clear();
+
+ if (self==NULL) {
+ PyErr_SetString(PyExc_RuntimeError, BGE_PROXY_ERROR_MSG);
+ return -1;
+ }
+
+ if (val==NULL) { /* del ob["key"] */
+ int del= 0;
+
+ /* try remove both just incase */
+ if(attr_str)
+ del |= (self->RemoveProperty(attr_str)==true) ? 1:0;
+
+ if(self->m_attr_dict)
+ del |= (PyDict_DelItem(self->m_attr_dict, key)==0) ? 1:0;
+
+ if (del==0) {
+ if(attr_str) PyErr_Format(PyExc_KeyError, "gameOb[key] = value: KX_GameObject, key \"%s\" could not be set", attr_str);
+ else PyErr_SetString(PyExc_KeyError, "gameOb[key] = value: KX_GameObject, key could not be set");
+ return -1;
+ }
+ else if (self->m_attr_dict) {
+ PyErr_Clear(); /* PyDict_DelItem sets an error when it fails */
+ }
+ }
+ else { /* ob["key"] = value */
+ int set= 0;
+
+ /* as CValue */
+ if(attr_str)
+ {
+ CValue* vallie = self->ConvertPythonToValue(val);
+
+ if(vallie)
+ {
+ CValue* oldprop = self->GetProperty(attr_str);
+
+ if (oldprop)
+ oldprop->SetValue(vallie);
+ else
+ self->SetProperty(attr_str, vallie);
+
+ vallie->Release();
+ set= 1;
+
+ /* try remove dict value to avoid double ups */
+ if (self->m_attr_dict){
+ if (PyDict_DelItem(self->m_attr_dict, key) != 0)
+ PyErr_Clear();
+ }
+ }
+ else {
+ PyErr_Clear();
+ }
+ }
+
+ if(set==0)
+ {
+ if (self->m_attr_dict==NULL) /* lazy init */
+ self->m_attr_dict= PyDict_New();
+
+
+ if(PyDict_SetItem(self->m_attr_dict, key, val)==0)
+ {
+ if(attr_str)
+ self->RemoveProperty(attr_str); /* overwrite the CValue if it exists */
+ set= 1;
+ }
+ else {
+ if(attr_str) PyErr_Format(PyExc_KeyError, "gameOb[key] = value: KX_GameObject, key \"%s\" not be added to internal dictionary", attr_str);
+ else PyErr_SetString(PyExc_KeyError, "gameOb[key] = value: KX_GameObject, key not be added to internal dictionary");
+ }
+ }
+
+ if(set==0)
+ return -1; /* pythons error value */
+
+ }
+
+ return 0; /* success */
+}
+
+
+PyMappingMethods KX_GameObject::Mapping = {
+ (lenfunc)KX_GameObject::Map_Len, /*inquiry mp_length */
+ (binaryfunc)KX_GameObject::Map_GetItem, /*binaryfunc mp_subscript */
+ (objobjargproc)KX_GameObject::Map_SetItem, /*objobjargproc mp_ass_subscript */
+};
+
PyTypeObject KX_GameObject::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"KX_GameObject",
- sizeof(KX_GameObject),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0, //&MyPyCompare,
- __repr,
- 0, //&cvalue_as_number,
0,
0,
0,
- 0
+ py_base_repr,
+ 0,0,
+ &Mapping,
+ 0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
+
+
+
PyParentObject KX_GameObject::Parents[] = {
&KX_GameObject::Type,
&SCA_IObject::Type,
@@ -1122,181 +1386,448 @@ PyParentObject KX_GameObject::Parents[] = {
NULL
};
+PyObject* KX_GameObject::pyattr_get_name(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_GameObject* self= static_cast<KX_GameObject*>(self_v);
+ return PyString_FromString(self->GetName().ReadPtr());
+}
+PyObject* KX_GameObject::pyattr_get_parent(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_GameObject* self= static_cast<KX_GameObject*>(self_v);
+ KX_GameObject* parent = self->GetParent();
+ if (parent)
+ return parent->GetProxy();
+ Py_RETURN_NONE;
+}
+PyObject* KX_GameObject::pyattr_get_mass(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_GameObject* self= static_cast<KX_GameObject*>(self_v);
+ KX_IPhysicsController *spc = self->GetPhysicsController();
+ return PyFloat_FromDouble(spc ? spc->GetMass() : 0.0f);
+}
-PyObject* KX_GameObject::_getattr(const char *attr)
+int KX_GameObject::pyattr_set_mass(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
{
- if (m_pPhysicsController1)
- {
- if (!strcmp(attr, "mass"))
- return PyFloat_FromDouble(m_pPhysicsController1->GetMass());
+ KX_GameObject* self= static_cast<KX_GameObject*>(self_v);
+ KX_IPhysicsController *spc = self->GetPhysicsController();
+ MT_Scalar val = PyFloat_AsDouble(value);
+ if (val < 0.0f) { /* also accounts for non float */
+ PyErr_SetString(PyExc_AttributeError, "gameOb.mass = float: KX_GameObject, expected a float zero or above");
+ return 1;
}
- if (!strcmp(attr, "parent"))
- {
- KX_GameObject* parent = GetParent();
- if (parent)
- return parent->AddRef();
- Py_RETURN_NONE;
+ if (spc)
+ spc->SetMass(val);
+
+ return 0;
+}
+
+PyObject* KX_GameObject::pyattr_get_lin_vel_min(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_GameObject* self= static_cast<KX_GameObject*>(self_v);
+ KX_IPhysicsController *spc = self->GetPhysicsController();
+ return PyFloat_FromDouble(spc ? spc->GetLinVelocityMax() : 0.0f);
+}
+
+int KX_GameObject::pyattr_set_lin_vel_min(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_GameObject* self= static_cast<KX_GameObject*>(self_v);
+ KX_IPhysicsController *spc = self->GetPhysicsController();
+ MT_Scalar val = PyFloat_AsDouble(value);
+ if (val < 0.0f) { /* also accounts for non float */
+ PyErr_SetString(PyExc_AttributeError, "gameOb.linVelocityMin = float: KX_GameObject, expected a float zero or above");
+ return 1;
}
- if (!strcmp(attr, "visible"))
- return PyInt_FromLong(m_bVisible);
-
- if (!strcmp(attr, "position"))
- return PyObjectFrom(NodeGetWorldPosition());
-
- if (!strcmp(attr, "orientation"))
- return PyObjectFrom(NodeGetWorldOrientation());
+ if (spc)
+ spc->SetLinVelocityMin(val);
+
+ return 0;
+}
+
+PyObject* KX_GameObject::pyattr_get_lin_vel_max(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_GameObject* self= static_cast<KX_GameObject*>(self_v);
+ KX_IPhysicsController *spc = self->GetPhysicsController();
+ return PyFloat_FromDouble(spc ? spc->GetLinVelocityMax() : 0.0f);
+}
+
+int KX_GameObject::pyattr_set_lin_vel_max(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_GameObject* self= static_cast<KX_GameObject*>(self_v);
+ KX_IPhysicsController *spc = self->GetPhysicsController();
+ MT_Scalar val = PyFloat_AsDouble(value);
+ if (val < 0.0f) { /* also accounts for non float */
+ PyErr_SetString(PyExc_AttributeError, "gameOb.linVelocityMax = float: KX_GameObject, expected a float zero or above");
+ return 1;
+ }
+
+ if (spc)
+ spc->SetLinVelocityMax(val);
+
+ return 0;
+}
+
+
+PyObject* KX_GameObject::pyattr_get_visible(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_GameObject* self= static_cast<KX_GameObject*>(self_v);
+ return PyBool_FromLong(self->GetVisible());
+}
+
+int KX_GameObject::pyattr_set_visible(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_GameObject* self= static_cast<KX_GameObject*>(self_v);
+ int param = PyObject_IsTrue( value );
+ if (param == -1) {
+ PyErr_SetString(PyExc_AttributeError, "gameOb.visible = bool: KX_GameObject, expected True or False");
+ return 1;
+ }
+
+ self->SetVisible(param, false);
+ self->UpdateBuckets(false);
+ return 0;
+}
+
+PyObject* KX_GameObject::pyattr_get_worldPosition(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_GameObject* self= static_cast<KX_GameObject*>(self_v);
+ return PyObjectFrom(self->NodeGetWorldPosition());
+}
+
+int KX_GameObject::pyattr_set_worldPosition(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_GameObject* self= static_cast<KX_GameObject*>(self_v);
+ MT_Point3 pos;
+ if (!PyVecTo(value, pos))
+ return 1;
- if (!strcmp(attr, "scaling"))
- return PyObjectFrom(NodeGetWorldScaling());
-
- if (!strcmp(attr, "name"))
- return PyString_FromString(m_name.ReadPtr());
+ self->NodeSetWorldPosition(pos);
+ self->NodeUpdateGS(0.f);
+ return 0;
+}
+
+PyObject* KX_GameObject::pyattr_get_localPosition(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_GameObject* self= static_cast<KX_GameObject*>(self_v);
+ if (self->GetSGNode())
+ return PyObjectFrom(self->GetSGNode()->GetLocalPosition());
+ else
+ return PyObjectFrom(dummy_point);
+}
+
+int KX_GameObject::pyattr_set_localPosition(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_GameObject* self= static_cast<KX_GameObject*>(self_v);
+ MT_Point3 pos;
+ if (!PyVecTo(value, pos))
+ return 1;
- if (!strcmp(attr, "timeOffset"))
+ self->NodeSetLocalPosition(pos);
+ self->NodeUpdateGS(0.f);
+ return 0;
+}
+
+PyObject* KX_GameObject::pyattr_get_localInertia(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_GameObject* self= static_cast<KX_GameObject*>(self_v);
+ if (self->GetPhysicsController())
{
- if (m_pSGNode->GetSGParent()->IsSlowParent()) {
- return PyFloat_FromDouble(static_cast<KX_SlowParentRelation *>(m_pSGNode->GetSGParent()->GetParentRelation())->GetTimeOffset());
- } else {
- return PyFloat_FromDouble(0.0);
- }
+ return PyObjectFrom(self->GetPhysicsController()->GetLocalInertia());
}
+ return Py_BuildValue("fff", 0.0f, 0.0f, 0.0f);
+}
+
+PyObject* KX_GameObject::pyattr_get_worldOrientation(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_GameObject* self= static_cast<KX_GameObject*>(self_v);
+ return PyObjectFrom(self->NodeGetWorldOrientation());
+}
+
+PyObject* KX_GameObject::pyattr_get_localOrientation(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_GameObject* self= static_cast<KX_GameObject*>(self_v);
+ if (self->GetSGNode())
+ return PyObjectFrom(self->GetSGNode()->GetLocalOrientation());
+ else
+ return PyObjectFrom(dummy_orientation);
+}
+
+int KX_GameObject::pyattr_set_localOrientation(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_GameObject* self= static_cast<KX_GameObject*>(self_v);
-
- _getattr_up(SCA_IObject);
+ /* if value is not a sequence PyOrientationTo makes an error */
+ MT_Matrix3x3 rot;
+ if (!PyOrientationTo(value, rot, "gameOb.orientation = sequence: KX_GameObject, "))
+ return NULL;
+
+ self->NodeSetLocalOrientation(rot);
+ self->NodeUpdateGS(0.f);
+ return 0;
+}
+
+PyObject* KX_GameObject::pyattr_get_worldScaling(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_GameObject* self= static_cast<KX_GameObject*>(self_v);
+ return PyObjectFrom(self->NodeGetWorldScaling());
+}
+
+PyObject* KX_GameObject::pyattr_get_localScaling(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_GameObject* self= static_cast<KX_GameObject*>(self_v);
+ if (self->GetSGNode())
+ return PyObjectFrom(self->GetSGNode()->GetLocalScale());
+ else
+ return PyObjectFrom(dummy_scaling);
+}
+
+int KX_GameObject::pyattr_set_localScaling(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_GameObject* self= static_cast<KX_GameObject*>(self_v);
+ MT_Vector3 scale;
+ if (!PyVecTo(value, scale))
+ return 1;
+
+ self->NodeSetLocalScale(scale);
+ self->NodeUpdateGS(0.f);
+ return 0;
+}
+
+PyObject* KX_GameObject::pyattr_get_timeOffset(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_GameObject* self= static_cast<KX_GameObject*>(self_v);
+ SG_Node* sg_parent;
+ if (self->GetSGNode() && (sg_parent = self->GetSGNode()->GetSGParent()) != NULL && sg_parent->IsSlowParent()) {
+ return PyFloat_FromDouble(static_cast<KX_SlowParentRelation *>(sg_parent->GetParentRelation())->GetTimeOffset());
+ } else {
+ return PyFloat_FromDouble(0.0);
+ }
+}
+
+int KX_GameObject::pyattr_set_timeOffset(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_GameObject* self= static_cast<KX_GameObject*>(self_v);
+ if (self->GetSGNode()) {
+ MT_Scalar val = PyFloat_AsDouble(value);
+ SG_Node* sg_parent= self->GetSGNode()->GetSGParent();
+ if (val < 0.0f) { /* also accounts for non float */
+ PyErr_SetString(PyExc_AttributeError, "gameOb.timeOffset = float: KX_GameObject, expected a float zero or above");
+ return 1;
+ }
+ if (sg_parent && sg_parent->IsSlowParent())
+ static_cast<KX_SlowParentRelation *>(sg_parent->GetParentRelation())->SetTimeOffset(val);
+ }
+ return 0;
}
-int KX_GameObject::_setattr(const char *attr, PyObject *value) // _setattr method
+PyObject* KX_GameObject::pyattr_get_state(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
{
+ KX_GameObject* self= static_cast<KX_GameObject*>(self_v);
+ int state = 0;
+ state |= self->GetState();
+ return PyInt_FromLong(state);
+}
+
+int KX_GameObject::pyattr_set_state(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_GameObject* self= static_cast<KX_GameObject*>(self_v);
+ int state_i = PyInt_AsLong(value);
+ unsigned int state = 0;
- if (!strcmp(attr, "parent")) {
- PyErr_SetString(PyExc_AttributeError, "attribute \"parent\" is read only\nUse setParent()");
+ if (state_i == -1 && PyErr_Occurred()) {
+ PyErr_SetString(PyExc_TypeError, "gameOb.state = int: KX_GameObject, expected an int bit field");
return 1;
}
-
- if (PyInt_Check(value))
+
+ state |= state_i;
+ if ((state & ((1<<30)-1)) == 0) {
+ PyErr_SetString(PyExc_AttributeError, "gameOb.state = int: KX_GameObject, state bitfield was not between 0 and 30 (1<<0 and 1<<29)");
+ return 1;
+ }
+ self->SetState(state);
+ return 0;
+}
+
+PyObject* KX_GameObject::pyattr_get_meshes(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_GameObject* self= static_cast<KX_GameObject*>(self_v);
+ PyObject *meshes= PyList_New(self->m_meshes.size());
+ int i;
+
+ for(i=0; i < self->m_meshes.size(); i++)
{
- int val = PyInt_AsLong(value);
- if (!strcmp(attr, "visible"))
- {
- SetVisible(val != 0, false);
- UpdateBuckets(false);
- return 0;
- }
+ KX_MeshProxy* meshproxy = new KX_MeshProxy(self->m_meshes[i]);
+ PyList_SET_ITEM(meshes, i, meshproxy->GetProxy());
}
+
+ return meshes;
+}
- if (PyFloat_Check(value))
+/* experemental! */
+PyObject* KX_GameObject::pyattr_get_sensors(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_GameObject* self= static_cast<KX_GameObject*>(self_v);
+ SCA_SensorList& sensors= self->GetSensors();
+ PyObject* resultlist = PyList_New(sensors.size());
+
+ for (unsigned int index=0;index<sensors.size();index++)
+ PyList_SET_ITEM(resultlist, index, sensors[index]->GetProxy());
+
+ return resultlist;
+}
+
+PyObject* KX_GameObject::pyattr_get_controllers(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_GameObject* self= static_cast<KX_GameObject*>(self_v);
+ SCA_ControllerList& controllers= self->GetControllers();
+ PyObject* resultlist = PyList_New(controllers.size());
+
+ for (unsigned int index=0;index<controllers.size();index++)
+ PyList_SET_ITEM(resultlist, index, controllers[index]->GetProxy());
+
+ return resultlist;
+}
+
+PyObject* KX_GameObject::pyattr_get_actuators(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_GameObject* self= static_cast<KX_GameObject*>(self_v);
+ SCA_ActuatorList& actuators= self->GetActuators();
+ PyObject* resultlist = PyList_New(actuators.size());
+
+ for (unsigned int index=0;index<actuators.size();index++)
+ PyList_SET_ITEM(resultlist, index, actuators[index]->GetProxy());
+
+ return resultlist;
+}
+
+/* __dict__ only for the purpose of giving useful dir() results */
+PyObject* KX_GameObject::pyattr_get_dir_dict(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_GameObject* self= static_cast<KX_GameObject*>(self_v);
+ PyObject *dict_str = PyString_FromString("__dict__");
+ PyObject *dict= py_getattr_dict(self->SCA_IObject::py_getattro(dict_str), Type.tp_dict);
+ Py_DECREF(dict_str);
+
+ if(dict==NULL)
+ return NULL;
+
+ /* Not super fast getting as a list then making into dict keys but its only for dir() */
+ PyObject *list= self->ConvertKeysToPython();
+ if(list)
{
- MT_Scalar val = PyFloat_AsDouble(value);
- if (!strcmp(attr, "timeOffset")) {
- if (m_pSGNode->GetSGParent() && m_pSGNode->GetSGParent()->IsSlowParent()) {
- static_cast<KX_SlowParentRelation *>(m_pSGNode->GetSGParent()->GetParentRelation())->SetTimeOffset(val);
- return 0;
- } else {
- return 0;
- }
- }
- if (!strcmp(attr, "mass")) {
- if (m_pPhysicsController1)
- m_pPhysicsController1->SetMass(val);
- return 0;
- }
+ int i;
+ for(i=0; i<PyList_Size(list); i++)
+ PyDict_SetItem(dict, PyList_GET_ITEM(list, i), Py_None);
}
+ else
+ PyErr_Clear();
+
+ Py_DECREF(list);
- if (PySequence_Check(value))
+ /* Add m_attr_dict if we have it */
+ if(self->m_attr_dict)
+ PyDict_Update(dict, self->m_attr_dict);
+
+ return dict;
+}
+
+/* We need these because the macros have a return in them */
+PyObject* KX_GameObject::py_getattro__internal(PyObject *attr)
+{
+ py_getattro_up(SCA_IObject);
+}
+
+int KX_GameObject::py_setattro__internal(PyObject *attr, PyObject *value) // py_setattro method
+{
+ py_setattro_up(SCA_IObject);
+}
+
+
+PyObject* KX_GameObject::py_getattro(PyObject *attr)
+{
+ PyObject *object= py_getattro__internal(attr);
+
+ if (object==NULL && m_attr_dict)
{
- if (!strcmp(attr, "orientation"))
- {
- MT_Matrix3x3 rot;
- if (PyObject_IsMT_Matrix(value, 3))
- {
- if (PyMatTo(value, rot))
- {
- NodeSetLocalOrientation(rot);
- NodeUpdateGS(0.f,true);
- return 0;
- }
- return 1;
- }
-
- if (PySequence_Size(value) == 4)
- {
- MT_Quaternion qrot;
- if (PyVecTo(value, qrot))
- {
- rot.setRotation(qrot);
- NodeSetLocalOrientation(rot);
- NodeUpdateGS(0.f,true);
- return 0;
- }
- return 1;
- }
+ /* backup the exception incase the attr doesnt exist in the dict either */
+ PyObject *err_type, *err_value, *err_tb;
+ PyErr_Fetch(&err_type, &err_value, &err_tb);
+
+ object= PyDict_GetItem(m_attr_dict, attr);
+ if (object) {
+ Py_INCREF(object);
- if (PySequence_Size(value) == 3)
- {
- MT_Vector3 erot;
- if (PyVecTo(value, erot))
- {
- rot.setEuler(erot);
- NodeSetLocalOrientation(rot);
- NodeUpdateGS(0.f,true);
- return 0;
- }
- return 1;
- }
- PyErr_SetString(PyExc_AttributeError, "could not set the orientation from a 3x3 matrix, quaternion or euler sequence");
- return 1;
+ PyErr_Clear();
+ Py_XDECREF( err_type );
+ Py_XDECREF( err_value );
+ Py_XDECREF( err_tb );
}
-
- if (!strcmp(attr, "position"))
- {
- MT_Point3 pos;
- if (PyVecTo(value, pos))
- {
- NodeSetLocalPosition(pos);
- NodeUpdateGS(0.f,true);
- return 0;
- }
- return 1;
+ else {
+ PyErr_Restore(err_type, err_value, err_tb); /* use the error from the parent function */
}
-
- if (!strcmp(attr, "scaling"))
- {
- MT_Vector3 scale;
- if (PyVecTo(value, scale))
- {
- NodeSetLocalScale(scale);
- NodeUpdateGS(0.f,true);
- return 0;
- }
- return 1;
+ }
+ return object;
+}
+
+int KX_GameObject::py_setattro(PyObject *attr, PyObject *value) // py_setattro method
+{
+ int ret;
+
+ ret= py_setattro__internal(attr, value);
+
+ if (ret==PY_SET_ATTR_SUCCESS) {
+ /* remove attribute in our own dict to avoid double ups */
+ /* NOTE: Annoying that we also do this for setting builtin attributes like mass and visibility :/ */
+ if (m_attr_dict) {
+ if (PyDict_DelItem(m_attr_dict, attr) != 0)
+ PyErr_Clear();
}
}
- if (PyString_Check(value))
- {
- if (!strcmp(attr, "name"))
- {
-#if 0 // was added in revision 2832, but never took into account Object name mappings from revision 2
- // unlikely anyone ever used this successfully , removing.
- m_name = PyString_AsString(value);
- return 0;
-#else
- PyErr_SetString(PyExc_AttributeError, "object name readonly");
- return 1;
-#endif
+ if (ret==PY_SET_ATTR_COERCE_FAIL) {
+ /* CValue attribute exists, remove CValue and add PyDict value */
+ RemoveProperty(STR_String(PyString_AsString(attr)));
+ ret= PY_SET_ATTR_MISSING;
+ }
+
+ if (ret==PY_SET_ATTR_MISSING) {
+ /* Lazy initialization */
+ if (m_attr_dict==NULL)
+ m_attr_dict = PyDict_New();
+
+ if (PyDict_SetItem(m_attr_dict, attr, value)==0) {
+ PyErr_Clear();
+ ret= PY_SET_ATTR_SUCCESS;
+ }
+ else {
+ PyErr_Format(PyExc_AttributeError, "gameOb.myAttr = value: KX_GameObject, failed assigning value to internal dictionary");
+ ret= PY_SET_ATTR_FAIL;
}
}
- /* Need to have parent settable here too */
+ return ret;
+}
+
+
+int KX_GameObject::py_delattro(PyObject *attr)
+{
+ char *attr_str= PyString_AsString(attr);
+
+ if (RemoveProperty(STR_String(attr_str))) // XXX - should call CValues instead but its only 2 lines here
+ return 0;
+
+ if (m_attr_dict && (PyDict_DelItem(m_attr_dict, attr) == 0))
+ return 0;
- return SCA_IObject::_setattr(attr, value);
+ PyErr_Format(PyExc_AttributeError, "del gameOb.myAttr: KX_GameObject, attribute \"%s\" dosnt exist", attr_str);
+ return 1;
}
-PyObject* KX_GameObject::PyApplyForce(PyObject* self, PyObject* args)
+
+PyObject* KX_GameObject::PyApplyForce(PyObject* args)
{
int local = 0;
PyObject* pyvect;
@@ -1311,7 +1842,7 @@ PyObject* KX_GameObject::PyApplyForce(PyObject* self, PyObject* args)
return NULL;
}
-PyObject* KX_GameObject::PyApplyTorque(PyObject* self, PyObject* args)
+PyObject* KX_GameObject::PyApplyTorque(PyObject* args)
{
int local = 0;
PyObject* pyvect;
@@ -1326,7 +1857,7 @@ PyObject* KX_GameObject::PyApplyTorque(PyObject* self, PyObject* args)
return NULL;
}
-PyObject* KX_GameObject::PyApplyRotation(PyObject* self, PyObject* args)
+PyObject* KX_GameObject::PyApplyRotation(PyObject* args)
{
int local = 0;
PyObject* pyvect;
@@ -1341,7 +1872,7 @@ PyObject* KX_GameObject::PyApplyRotation(PyObject* self, PyObject* args)
return NULL;
}
-PyObject* KX_GameObject::PyApplyMovement(PyObject* self, PyObject* args)
+PyObject* KX_GameObject::PyApplyMovement(PyObject* args)
{
int local = 0;
PyObject* pyvect;
@@ -1356,7 +1887,7 @@ PyObject* KX_GameObject::PyApplyMovement(PyObject* self, PyObject* args)
return NULL;
}
-PyObject* KX_GameObject::PyGetLinearVelocity(PyObject* self, PyObject* args)
+PyObject* KX_GameObject::PyGetLinearVelocity(PyObject* args)
{
// only can get the velocity if we have a physics object connected to us...
int local = 0;
@@ -1370,7 +1901,7 @@ PyObject* KX_GameObject::PyGetLinearVelocity(PyObject* self, PyObject* args)
}
}
-PyObject* KX_GameObject::PySetLinearVelocity(PyObject* self, PyObject* args)
+PyObject* KX_GameObject::PySetLinearVelocity(PyObject* args)
{
int local = 0;
PyObject* pyvect;
@@ -1385,7 +1916,7 @@ PyObject* KX_GameObject::PySetLinearVelocity(PyObject* self, PyObject* args)
return NULL;
}
-PyObject* KX_GameObject::PyGetAngularVelocity(PyObject* self, PyObject* args)
+PyObject* KX_GameObject::PyGetAngularVelocity(PyObject* args)
{
// only can get the velocity if we have a physics object connected to us...
int local = 0;
@@ -1399,7 +1930,7 @@ PyObject* KX_GameObject::PyGetAngularVelocity(PyObject* self, PyObject* args)
}
}
-PyObject* KX_GameObject::PySetAngularVelocity(PyObject* self, PyObject* args)
+PyObject* KX_GameObject::PySetAngularVelocity(PyObject* args)
{
int local = 0;
PyObject* pyvect;
@@ -1414,7 +1945,7 @@ PyObject* KX_GameObject::PySetAngularVelocity(PyObject* self, PyObject* args)
return NULL;
}
-PyObject* KX_GameObject::PySetVisible(PyObject* self, PyObject* args)
+PyObject* KX_GameObject::PySetVisible(PyObject* args)
{
int visible, recursive = 0;
if (!PyArg_ParseTuple(args,"i|i:setVisible",&visible, &recursive))
@@ -1426,20 +1957,33 @@ PyObject* KX_GameObject::PySetVisible(PyObject* self, PyObject* args)
}
-PyObject* KX_GameObject::PyGetVisible(PyObject* self)
+PyObject* KX_GameObject::PySetOcclusion(PyObject* args)
{
+ int occlusion, recursive = 0;
+ if (!PyArg_ParseTuple(args,"i|i:setOcclusion",&occlusion, &recursive))
+ return NULL;
+
+ SetOccluder(occlusion ? true:false, recursive ? true:false);
+ Py_RETURN_NONE;
+}
+
+PyObject* KX_GameObject::PyGetVisible()
+{
+ ShowDeprecationWarning("getVisible()", "the visible property");
return PyInt_FromLong(m_bVisible);
}
-PyObject* KX_GameObject::PyGetState(PyObject* self)
+PyObject* KX_GameObject::PyGetState()
{
+ ShowDeprecationWarning("getState()", "the state property");
int state = 0;
state |= GetState();
return PyInt_FromLong(state);
}
-PyObject* KX_GameObject::PySetState(PyObject* self, PyObject* value)
+PyObject* KX_GameObject::PySetState(PyObject* value)
{
+ ShowDeprecationWarning("setState()", "the state property");
int state_i = PyInt_AsLong(value);
unsigned int state = 0;
@@ -1458,9 +2002,7 @@ PyObject* KX_GameObject::PySetState(PyObject* self, PyObject* value)
Py_RETURN_NONE;
}
-
-
-PyObject* KX_GameObject::PyGetVelocity(PyObject* self, PyObject* args)
+PyObject* KX_GameObject::PyGetVelocity(PyObject* args)
{
// only can get the velocity if we have a physics object connected to us...
MT_Point3 point(0.0,0.0,0.0);
@@ -1486,110 +2028,89 @@ PyObject* KX_GameObject::PyGetVelocity(PyObject* self, PyObject* args)
-PyObject* KX_GameObject::PyGetMass(PyObject* self)
+PyObject* KX_GameObject::PyGetMass()
{
- return PyFloat_FromDouble(GetPhysicsController()->GetMass());
+ ShowDeprecationWarning("getMass()", "the mass property");
+ return PyFloat_FromDouble((GetPhysicsController() != NULL) ? GetPhysicsController()->GetMass() : 0.0f);
}
-
-
-PyObject* KX_GameObject::PyGetReactionForce(PyObject* self)
+PyObject* KX_GameObject::PyGetReactionForce()
{
// only can get the velocity if we have a physics object connected to us...
- return PyObjectFrom(GetPhysicsController()->getReactionForce());
+
+ // XXX - Currently not working with bullet intergration, see KX_BulletPhysicsController.cpp's getReactionForce
+ /*
+ if (GetPhysicsController())
+ return PyObjectFrom(GetPhysicsController()->getReactionForce());
+ return PyObjectFrom(dummy_point);
+ */
+
+ return Py_BuildValue("fff", 0.0f, 0.0f, 0.0f);
+
}
-PyObject* KX_GameObject::PyEnableRigidBody(PyObject* self)
+PyObject* KX_GameObject::PyEnableRigidBody()
{
- GetPhysicsController()->setRigidBody(true);
+ if(GetPhysicsController())
+ GetPhysicsController()->setRigidBody(true);
Py_RETURN_NONE;
}
-PyObject* KX_GameObject::PyDisableRigidBody(PyObject* self)
+PyObject* KX_GameObject::PyDisableRigidBody()
{
- GetPhysicsController()->setRigidBody(false);
+ if(GetPhysicsController())
+ GetPhysicsController()->setRigidBody(false);
Py_RETURN_NONE;
}
-PyObject* KX_GameObject::PyGetParent(PyObject* self)
+PyObject* KX_GameObject::PyGetParent()
{
+ ShowDeprecationWarning("getParent()", "the parent property");
KX_GameObject* parent = this->GetParent();
if (parent)
- return parent->AddRef();
+ return parent->GetProxy();
Py_RETURN_NONE;
}
-PyObject* KX_GameObject::PySetParent(PyObject* self, PyObject* value)
+PyObject* KX_GameObject::PySetParent(PyObject* value)
{
- if (!PyObject_TypeCheck(value, &KX_GameObject::Type)) {
- PyErr_SetString(PyExc_TypeError, "expected a KX_GameObject type");
+ KX_GameObject *obj;
+ if (!ConvertPythonToGameObject(value, &obj, false, "gameOb.setParent(value): KX_GameObject"))
return NULL;
- }
-
- // The object we want to set as parent
- CValue *m_ob = (CValue*)value;
- KX_GameObject *obj = ((KX_GameObject*)m_ob);
- KX_Scene *scene = KX_GetActiveScene();
- this->SetParent(scene, obj);
-
+ this->SetParent(KX_GetActiveScene(), obj);
Py_RETURN_NONE;
}
-PyObject* KX_GameObject::PyRemoveParent(PyObject* self)
+PyObject* KX_GameObject::PyRemoveParent()
{
KX_Scene *scene = KX_GetActiveScene();
this->RemoveParent(scene);
Py_RETURN_NONE;
}
-
-static void walk_children(SG_Node* node, CListValue* list, bool recursive)
-{
- NodeList& children = node->GetSGChildren();
-
- for (NodeList::iterator childit = children.begin();!(childit==children.end());++childit)
- {
- SG_Node* childnode = (*childit);
- CValue* childobj = (CValue*)childnode->GetSGClientObject();
- if (childobj != NULL) // This is a GameObject
- {
- // add to the list
- list->Add(childobj->AddRef());
- }
-
- // if the childobj is NULL then this may be an inverse parent link
- // so a non recursive search should still look down this node.
- if (recursive || childobj==NULL) {
- walk_children(childnode, list, recursive);
- }
- }
-}
-
-PyObject* KX_GameObject::PyGetChildren(PyObject* self)
+PyObject* KX_GameObject::PyGetChildren()
{
- CListValue* list = new CListValue();
- walk_children(m_pSGNode, list, 0);
- return list;
+ return GetChildren()->NewProxy(true);
}
-PyObject* KX_GameObject::PyGetChildrenRecursive(PyObject* self)
+PyObject* KX_GameObject::PyGetChildrenRecursive()
{
- CListValue* list = new CListValue();
- walk_children(m_pSGNode, list, 1);
- return list;
+ return GetChildrenRecursive()->NewProxy(true);
}
-PyObject* KX_GameObject::PyGetMesh(PyObject* self, PyObject* args)
+PyObject* KX_GameObject::PyGetMesh(PyObject* args)
{
+ ShowDeprecationWarning("getMesh()", "the meshes property");
+
int mesh = 0;
if (!PyArg_ParseTuple(args, "|i:getMesh", &mesh))
@@ -1598,7 +2119,7 @@ PyObject* KX_GameObject::PyGetMesh(PyObject* self, PyObject* args)
if (((unsigned int)mesh < m_meshes.size()) && mesh >= 0)
{
KX_MeshProxy* meshproxy = new KX_MeshProxy(m_meshes[mesh]);
- return meshproxy;
+ return meshproxy->NewProxy(true); // XXX Todo Python own.
}
Py_RETURN_NONE;
@@ -1608,7 +2129,7 @@ PyObject* KX_GameObject::PyGetMesh(PyObject* self, PyObject* args)
-PyObject* KX_GameObject::PySetCollisionMargin(PyObject* self, PyObject* value)
+PyObject* KX_GameObject::PySetCollisionMargin(PyObject* value)
{
float collisionMargin = PyFloat_AsDouble(value);
@@ -1628,7 +2149,7 @@ PyObject* KX_GameObject::PySetCollisionMargin(PyObject* self, PyObject* value)
-PyObject* KX_GameObject::PyApplyImpulse(PyObject* self, PyObject* args)
+PyObject* KX_GameObject::PyApplyImpulse(PyObject* args)
{
PyObject* pyattach;
PyObject* pyimpulse;
@@ -1655,7 +2176,7 @@ PyObject* KX_GameObject::PyApplyImpulse(PyObject* self, PyObject* args)
-PyObject* KX_GameObject::PySuspendDynamics(PyObject* self)
+PyObject* KX_GameObject::PySuspendDynamics()
{
SuspendDynamics();
Py_RETURN_NONE;
@@ -1663,7 +2184,7 @@ PyObject* KX_GameObject::PySuspendDynamics(PyObject* self)
-PyObject* KX_GameObject::PyRestoreDynamics(PyObject* self)
+PyObject* KX_GameObject::PyRestoreDynamics()
{
RestoreDynamics();
Py_RETURN_NONE;
@@ -1671,20 +2192,22 @@ PyObject* KX_GameObject::PyRestoreDynamics(PyObject* self)
-PyObject* KX_GameObject::PyGetOrientation(PyObject* self) //keywords
+PyObject* KX_GameObject::PyGetOrientation() //keywords
{
+ ShowDeprecationWarning("getOrientation()", "the orientation property");
return PyObjectFrom(NodeGetWorldOrientation());
}
-PyObject* KX_GameObject::PySetOrientation(PyObject* self, PyObject* value)
+PyObject* KX_GameObject::PySetOrientation(PyObject* value)
{
+ ShowDeprecationWarning("setOrientation()", "the orientation property");
MT_Matrix3x3 matrix;
if (PyObject_IsMT_Matrix(value, 3) && PyMatTo(value, matrix))
{
NodeSetLocalOrientation(matrix);
- NodeUpdateGS(0.f,true);
+ NodeUpdateGS(0.f);
Py_RETURN_NONE;
}
@@ -1693,13 +2216,13 @@ PyObject* KX_GameObject::PySetOrientation(PyObject* self, PyObject* value)
{
matrix.setRotation(quat);
NodeSetLocalOrientation(matrix);
- NodeUpdateGS(0.f,true);
+ NodeUpdateGS(0.f);
Py_RETURN_NONE;
}
return NULL;
}
-PyObject* KX_GameObject::PyAlignAxisToVect(PyObject* self, PyObject* args)
+PyObject* KX_GameObject::PyAlignAxisToVect(PyObject* args)
{
PyObject* pyvect;
int axis = 2; //z axis is the default
@@ -1714,14 +2237,14 @@ PyObject* KX_GameObject::PyAlignAxisToVect(PyObject* self, PyObject* args)
if (fac> 1.0) fac= 1.0;
AlignAxisToVect(vect,axis,fac);
- NodeUpdateGS(0.f,true);
+ NodeUpdateGS(0.f);
Py_RETURN_NONE;
}
}
return NULL;
}
-PyObject* KX_GameObject::PyGetAxisVect(PyObject* self, PyObject* value)
+PyObject* KX_GameObject::PyGetAxisVect(PyObject* value)
{
MT_Vector3 vect;
if (PyVecTo(value, vect))
@@ -1731,33 +2254,34 @@ PyObject* KX_GameObject::PyGetAxisVect(PyObject* self, PyObject* value)
return NULL;
}
-PyObject* KX_GameObject::PySetPosition(PyObject* self, PyObject* value)
+PyObject* KX_GameObject::PySetPosition(PyObject* value)
{
+ ShowDeprecationWarning("setPosition()", "the position property");
MT_Point3 pos;
if (PyVecTo(value, pos))
{
NodeSetLocalPosition(pos);
- NodeUpdateGS(0.f,true);
+ NodeUpdateGS(0.f);
Py_RETURN_NONE;
}
return NULL;
}
-PyObject* KX_GameObject::PySetWorldPosition(PyObject* self, PyObject* value)
+PyObject* KX_GameObject::PySetWorldPosition(PyObject* value)
{
MT_Point3 pos;
if (PyVecTo(value, pos))
{
NodeSetWorldPosition(pos);
- NodeUpdateGS(0.f,true);
+ NodeUpdateGS(0.f);
Py_RETURN_NONE;
}
return NULL;
}
-PyObject* KX_GameObject::PyGetPhysicsId(PyObject* self)
+PyObject* KX_GameObject::PyGetPhysicsId()
{
KX_IPhysicsController* ctrl = GetPhysicsController();
uint_ptr physid=0;
@@ -1768,9 +2292,19 @@ PyObject* KX_GameObject::PyGetPhysicsId(PyObject* self)
return PyInt_FromLong((long)physid);
}
-PyObject* KX_GameObject::PyGetPropertyNames(PyObject* self)
+PyObject* KX_GameObject::PyGetPropertyNames()
{
- return ConvertKeysToPython();
+ PyObject *list= ConvertKeysToPython();
+
+ if(m_attr_dict) {
+ PyObject *key, *value;
+ Py_ssize_t pos = 0;
+
+ while (PyDict_Next(m_attr_dict, &pos, &key, &value)) {
+ PyList_Append(list, key);
+ }
+ }
+ return list;
}
KX_PYMETHODDEF_DOC_O(KX_GameObject, getDistanceTo,
@@ -1784,7 +2318,7 @@ KX_PYMETHODDEF_DOC_O(KX_GameObject, getDistanceTo,
PyErr_Clear();
KX_GameObject *other;
- if (ConvertPythonToGameObject(value, &other, false))
+ if (ConvertPythonToGameObject(value, &other, false, "gameOb.getDistanceTo(value): KX_GameObject"))
{
return PyFloat_FromDouble(NodeGetWorldPosition().distance(other->NodeGetWorldPosition()));
}
@@ -1807,12 +2341,12 @@ KX_PYMETHODDEF_DOC_O(KX_GameObject, getVectTo,
PyErr_Clear();
KX_GameObject *other;
- if (ConvertPythonToGameObject(value, &other, false))
+ if (ConvertPythonToGameObject(value, &other, false, "")) /* error will be overwritten */
{
toPoint = other->NodeGetWorldPosition();
} else
{
- PyErr_SetString(PyExc_TypeError, "Expected a 3D Vector or GameObject type");
+ PyErr_SetString(PyExc_TypeError, "gameOb.getVectTo(other): KX_GameObject, expected a 3D Vector or KX_GameObject type");
return NULL;
}
}
@@ -1901,12 +2435,12 @@ KX_PYMETHODDEF_DOC(KX_GameObject, rayCastTo,
KX_GameObject *other;
PyErr_Clear();
- if (ConvertPythonToGameObject(pyarg, &other, false))
+ if (ConvertPythonToGameObject(pyarg, &other, false, "")) /* error will be overwritten */
{
toPoint = other->NodeGetWorldPosition();
} else
{
- PyErr_SetString(PyExc_TypeError, "the first argument to rayCastTo must be a vector or a KX_GameObject");
+ PyErr_SetString(PyExc_TypeError, "gameOb.rayCastTo(other,dist,prop): KX_GameObject, the first argument to rayCastTo must be a vector or a KX_GameObject");
return NULL;
}
}
@@ -1935,7 +2469,7 @@ KX_PYMETHODDEF_DOC(KX_GameObject, rayCastTo,
KX_RayCast::RayTest(pe, fromPoint, toPoint, callback);
if (m_pHitObject)
- return m_pHitObject->AddRef();
+ return m_pHitObject->GetProxy();
Py_RETURN_NONE;
}
@@ -1977,7 +2511,7 @@ KX_PYMETHODDEF_DOC(KX_GameObject, rayCast,
{
PyErr_Clear();
- if (ConvertPythonToGameObject(pyto, &other, false))
+ if (ConvertPythonToGameObject(pyto, &other, false, "")) /* error will be overwritten */
{
toPoint = other->NodeGetWorldPosition();
} else
@@ -1994,12 +2528,12 @@ KX_PYMETHODDEF_DOC(KX_GameObject, rayCast,
{
PyErr_Clear();
- if (ConvertPythonToGameObject(pyfrom, &other, false))
+ if (ConvertPythonToGameObject(pyfrom, &other, false, "")) /* error will be overwritten */
{
fromPoint = other->NodeGetWorldPosition();
} else
{
- PyErr_SetString(PyExc_TypeError, "the second optional argument to rayCast must be a vector or a KX_GameObject");
+ PyErr_SetString(PyExc_TypeError, "gameOb.rayCast(to,from,dist,prop,face,xray,poly): KX_GameObject, the second optional argument to rayCast must be a vector or a KX_GameObject");
return NULL;
}
}
@@ -2037,7 +2571,7 @@ KX_PYMETHODDEF_DOC(KX_GameObject, rayCast,
{
PyObject* returnValue = (poly) ? PyTuple_New(4) : PyTuple_New(3);
if (returnValue) { // unlikely this would ever fail, if it does python sets an error
- PyTuple_SET_ITEM(returnValue, 0, m_pHitObject->AddRef());
+ PyTuple_SET_ITEM(returnValue, 0, m_pHitObject->GetProxy());
PyTuple_SET_ITEM(returnValue, 1, PyObjectFrom(callback.m_hitPoint));
PyTuple_SET_ITEM(returnValue, 2, PyObjectFrom(callback.m_hitNormal));
if (poly)
@@ -2047,7 +2581,7 @@ KX_PYMETHODDEF_DOC(KX_GameObject, rayCast,
// if this field is set, then we can trust that m_hitPolygon is a valid polygon
RAS_Polygon* polygon = callback.m_hitMesh->GetPolygon(callback.m_hitPolygon);
KX_PolyProxy* polyproxy = new KX_PolyProxy(callback.m_hitMesh, polygon);
- PyTuple_SET_ITEM(returnValue, 3, polyproxy);
+ PyTuple_SET_ITEM(returnValue, 3, polyproxy->NewProxy(true));
}
else
{
@@ -2065,6 +2599,26 @@ KX_PYMETHODDEF_DOC(KX_GameObject, rayCast,
return Py_BuildValue("OOO", Py_None, Py_None, Py_None);
}
+KX_PYMETHODDEF_DOC_VARARGS(KX_GameObject, sendMessage,
+ "sendMessage(subject, [body, to])\n"
+"sends a message in same manner as a message actuator"
+"subject = Subject of the message (string)"
+"body = Message body (string)"
+"to = Name of object to send the message to")
+{
+ char* subject;
+ char* body = (char *)"";
+ char* to = (char *)"";
+ const STR_String& from = GetName();
+
+ if (!PyArg_ParseTuple(args, "s|sss:sendMessage", &subject, &body, &to))
+ return NULL;
+
+ KX_GetActiveScene()->GetNetworkScene()->SendMessage(to, from, subject, body);
+
+ Py_RETURN_NONE;
+}
+
/* ---------------------------------------------------------------------
* Some stuff taken from the header
* --------------------------------------------------------------------- */
@@ -2087,10 +2641,10 @@ void KX_GameObject::Relink(GEN_Map<GEN_HashedPtr, void*> *map_parameter)
}
}
-bool ConvertPythonToGameObject(PyObject * value, KX_GameObject **object, bool py_none_ok)
+bool ConvertPythonToGameObject(PyObject * value, KX_GameObject **object, bool py_none_ok, const char *error_prefix)
{
if (value==NULL) {
- PyErr_SetString(PyExc_TypeError, "Error in ConvertPythonToGameObject, python pointer NULL, should never happen");
+ PyErr_Format(PyExc_TypeError, "%s, python pointer NULL, should never happen", error_prefix);
*object = NULL;
return false;
}
@@ -2101,33 +2655,40 @@ bool ConvertPythonToGameObject(PyObject * value, KX_GameObject **object, bool py
if (py_none_ok) {
return true;
} else {
- PyErr_SetString(PyExc_TypeError, "Expected KX_GameObject or a string for a name of a KX_GameObject, None is invalid");
+ PyErr_Format(PyExc_TypeError, "%s, expected KX_GameObject or a KX_GameObject name, None is invalid", error_prefix);
return false;
}
}
if (PyString_Check(value)) {
- *object = (KX_GameObject *)SCA_ILogicBrick::m_sCurrentLogicManager->GetGameObjectByName(STR_String( PyString_AsString(value) ));
+ *object = (KX_GameObject*)SCA_ILogicBrick::m_sCurrentLogicManager->GetGameObjectByName(STR_String( PyString_AsString(value) ));
if (*object) {
return true;
} else {
- PyErr_SetString(PyExc_ValueError, "Requested name did not match any KX_GameObject");
+ PyErr_Format(PyExc_ValueError, "%s, requested name \"%s\" did not match any KX_GameObject in this scene", error_prefix, PyString_AsString(value));
return false;
}
}
if (PyObject_TypeCheck(value, &KX_GameObject::Type)) {
- *object = static_cast<KX_GameObject*>(value);
+ *object = static_cast<KX_GameObject*>BGE_PROXY_REF(value);
+
+ /* sets the error */
+ if (*object==NULL) {
+ PyErr_Format(PyExc_RuntimeError, "%s, " BGE_PROXY_ERROR_MSG, error_prefix);
+ return false;
+ }
+
return true;
}
*object = NULL;
if (py_none_ok) {
- PyErr_SetString(PyExc_TypeError, "Expect a KX_GameObject, a string or None");
+ PyErr_Format(PyExc_TypeError, "%s, expect a KX_GameObject, a string or None", error_prefix);
} else {
- PyErr_SetString(PyExc_TypeError, "Expect a KX_GameObject or a string");
+ PyErr_Format(PyExc_TypeError, "%s, expect a KX_GameObject or a string", error_prefix);
}
return false;
diff --git a/source/gameengine/Ketsji/KX_GameObject.h b/source/gameengine/Ketsji/KX_GameObject.h
index 211c9b7ca7d..ec02dc17b75 100644
--- a/source/gameengine/Ketsji/KX_GameObject.h
+++ b/source/gameengine/Ketsji/KX_GameObject.h
@@ -51,15 +51,18 @@
#include "SCA_LogicManager.h" /* for ConvertPythonToGameObject to search object names */
#define KX_OB_DYNAMIC 1
-
//Forward declarations.
struct KX_ClientObjectInfo;
class KX_RayCast;
class RAS_MeshObject;
class KX_IPhysicsController;
+class PHY_IGraphicController;
class PHY_IPhysicsEnvironment;
struct Object;
+/* utility conversion function */
+bool ConvertPythonToGameObject(PyObject * value, KX_GameObject **object, bool py_none_ok, const char *error_prefix);
+
/**
* KX_GameObject is the main class for dynamic objects.
*/
@@ -86,8 +89,10 @@ protected:
// culled = while rendering, depending on camera
bool m_bVisible;
bool m_bCulled;
+ bool m_bOccluder;
KX_IPhysicsController* m_pPhysicsController1;
+ PHY_IGraphicController* m_pGraphicController;
// used for ray casting
PHY_IPhysicsEnvironment* m_pPhysicsEnvironment;
STR_String m_testPropName;
@@ -101,6 +106,28 @@ protected:
public:
bool m_isDeformable;
+ /**
+ * Helper function for modules that can't include KX_ClientObjectInfo.h
+ */
+ static KX_GameObject* GetClientObject(KX_ClientObjectInfo* info);
+
+ // Python attributes that wont convert into CValue
+ //
+ // there are 2 places attributes can be stored, in the CValue,
+ // where attributes are converted into BGE's CValue types
+ // these can be used with property actuators
+ //
+ // For the python API, For types that cannot be converted into CValues (lists, dicts, GameObjects)
+ // these will be put into "m_attr_dict", logic bricks cannot access them.
+ //
+ // rules for setting attributes.
+ //
+ // * there should NEVER be a CValue and a m_attr_dict attribute with matching names. get/sets make sure of this.
+ // * if CValue conversion fails, use a PyObject in "m_attr_dict"
+ // * when assigning a value, first see if it can be a CValue, if it can remove the "m_attr_dict" and set the CValue
+ //
+ PyObject* m_attr_dict;
+
virtual void /* This function should be virtual - derived classed override it */
Relink(
GEN_Map<GEN_HashedPtr, void*> *map
@@ -206,7 +233,7 @@ public:
/**
* Inherited from CValue -- does nothing!
*/
- float
+ double
GetNumber(
);
@@ -279,6 +306,12 @@ public:
MT_Scalar
GetMass();
+ /**
+ * Return the local inertia vector of the object
+ */
+ MT_Vector3
+ GetLocalInertia();
+
/**
* Return the angular velocity of the game object.
*/
@@ -351,6 +384,19 @@ public:
}
/**
+ * @return a pointer to the graphic controller owner by this class
+ */
+ PHY_IGraphicController* GetGraphicController()
+ {
+ return m_pGraphicController;
+ }
+
+ void SetGraphicController(PHY_IGraphicController* graphiccontroller)
+ {
+ m_pGraphicController = graphiccontroller;
+ }
+
+ /**
* @section Coordinate system manipulation functions
*/
@@ -367,8 +413,7 @@ public:
void
NodeUpdateGS(
- double time,
- bool bInitiator
+ double time
);
const
@@ -525,13 +570,6 @@ public:
static void UpdateTransformFunc(SG_IObject* node, void* gameobj, void* scene);
/**
- * Only update the transform if it's a non-dynamic object
- */
- void
- UpdateNonDynas(
- );
-
- /**
* Function to set IPO option at start of IPO
*/
void
@@ -665,20 +703,37 @@ public:
/**
* Was this object culled?
*/
- bool
+ inline bool
GetCulled(
void
- );
+ ) { return m_bCulled; }
/**
* Set culled flag of this object
*/
- void
+ inline void
SetCulled(
bool c
- );
+ ) { m_bCulled = c; }
+
+ /**
+ * Is this object an occluder?
+ */
+ inline bool
+ GetOccluder(
+ void
+ ) { return m_bOccluder; }
/**
+ * Set occluder flag of this object
+ */
+ void
+ SetOccluder(
+ bool v,
+ bool recursive
+ );
+
+ /**
* Change the layer of the object (when it is added in another layer
* than the original layer)
*/
@@ -752,14 +807,29 @@ public:
}
KX_ClientObjectInfo* getClientInfo() { return m_pClient_info; }
+
+ CListValue* GetChildren();
+ CListValue* GetChildrenRecursive();
+
/**
* @section Python interface functions.
*/
-
- virtual PyObject* _getattr(const char *attr);
- virtual int _setattr(const char *attr, PyObject *value); // _setattr method
- virtual PyObject* _repr(void) { return PyString_FromString(GetName().ReadPtr()); }
+ virtual PyObject* py_getattro(PyObject *attr);
+ virtual int py_setattro(PyObject *attr, PyObject *value); // py_setattro method
+ virtual int py_delattro(PyObject *attr);
+ virtual PyObject* py_repr(void)
+ {
+ return PyString_FromString(GetName().ReadPtr());
+ }
+
+
+ /* quite annoying that we need these but the bloody
+ * py_getattro_up and py_setattro_up macro's have a returns in them! */
+ PyObject* py_getattro__internal(PyObject *attr);
+ int py_setattro__internal(PyObject *attr, PyObject *value); // py_setattro method
+
+
KX_PYMETHOD_NOARGS(KX_GameObject,GetPosition);
KX_PYMETHOD_O(KX_GameObject,SetPosition);
KX_PYMETHOD_O(KX_GameObject,SetWorldPosition);
@@ -778,6 +848,7 @@ public:
KX_PYMETHOD_O(KX_GameObject,SetOrientation);
KX_PYMETHOD_NOARGS(KX_GameObject,GetVisible);
KX_PYMETHOD_VARARGS(KX_GameObject,SetVisible);
+ KX_PYMETHOD_VARARGS(KX_GameObject,SetOcclusion);
KX_PYMETHOD_NOARGS(KX_GameObject,GetState);
KX_PYMETHOD_O(KX_GameObject,SetState);
KX_PYMETHOD_VARARGS(KX_GameObject,AlignAxisToVect);
@@ -802,6 +873,50 @@ public:
KX_PYMETHOD_DOC(KX_GameObject,rayCast);
KX_PYMETHOD_DOC_O(KX_GameObject,getDistanceTo);
KX_PYMETHOD_DOC_O(KX_GameObject,getVectTo);
+ KX_PYMETHOD_DOC_VARARGS(KX_GameObject, sendMessage);
+ /* attributes */
+ static PyObject* pyattr_get_name(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_parent(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+
+ static PyObject* pyattr_get_mass(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static int pyattr_set_mass(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+ static PyObject* pyattr_get_lin_vel_min(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static int pyattr_set_lin_vel_min(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+ static PyObject* pyattr_get_lin_vel_max(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static int pyattr_set_lin_vel_max(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+ static PyObject* pyattr_get_visible(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static int pyattr_set_visible(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+ static PyObject* pyattr_get_worldPosition(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static int pyattr_set_worldPosition(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+ static PyObject* pyattr_get_localPosition(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static int pyattr_set_localPosition(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+ static PyObject* pyattr_get_localInertia(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static int pyattr_set_localInertia(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+ static PyObject* pyattr_get_worldOrientation(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_localOrientation(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static int pyattr_set_localOrientation(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+ static PyObject* pyattr_get_worldScaling(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_localScaling(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static int pyattr_set_localScaling(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+ static PyObject* pyattr_get_timeOffset(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static int pyattr_set_timeOffset(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+ static PyObject* pyattr_get_state(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static int pyattr_set_state(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+ static PyObject* pyattr_get_meshes(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+
+ /* for dir(), python3 uses __dir__() */
+ static PyObject* pyattr_get_dir_dict(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+
+ /* Experemental! */
+ static PyObject* pyattr_get_sensors(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_controllers(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_actuators(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+
+ /* getitem/setitem */
+ static Py_ssize_t Map_Len(PyObject* self);
+ static PyMappingMethods Mapping;
+ static PyObject* Map_GetItem(PyObject *self_v, PyObject *item);
+ static int Map_SetItem(PyObject *self_v, PyObject *key, PyObject *val);
private :
@@ -820,8 +935,7 @@ private :
};
-/* utility conversion function */
-bool ConvertPythonToGameObject(PyObject * value, KX_GameObject **object, bool py_none_ok);
+
#endif //__KX_GAMEOBJECT
diff --git a/source/gameengine/Ketsji/KX_IPhysicsController.h b/source/gameengine/Ketsji/KX_IPhysicsController.h
index 13501f1fbbd..10b66da7b76 100644
--- a/source/gameengine/Ketsji/KX_IPhysicsController.h
+++ b/source/gameengine/Ketsji/KX_IPhysicsController.h
@@ -79,6 +79,13 @@ public:
virtual void setScaling(const MT_Vector3& scaling)=0;
virtual MT_Scalar GetMass()=0;
virtual void SetMass(MT_Scalar newmass)=0;
+
+ virtual float GetLinVelocityMin()=0;
+ virtual void SetLinVelocityMin(float newmass)=0;
+ virtual float GetLinVelocityMax()=0;
+ virtual void SetLinVelocityMax(float newmass)=0;
+
+ virtual MT_Vector3 GetLocalInertia()=0;
virtual MT_Vector3 getReactionForce()=0;
virtual void setRigidBody(bool rigid)=0;
virtual void AddCompoundChild(KX_IPhysicsController* child) = 0;
diff --git a/source/gameengine/Ketsji/KX_IpoActuator.cpp b/source/gameengine/Ketsji/KX_IpoActuator.cpp
index 623a939bf62..f04e3c79a8e 100644
--- a/source/gameengine/Ketsji/KX_IpoActuator.cpp
+++ b/source/gameengine/Ketsji/KX_IpoActuator.cpp
@@ -84,7 +84,7 @@ KX_IpoActuator::KX_IpoActuator(SCA_IObject* gameobj,
m_ipo_as_force(ipo_as_force),
m_ipo_add(ipo_add),
m_ipo_local(ipo_local),
- m_type((IpoActType)acttype)
+ m_type(acttype)
{
m_starttime = -2.0*fabs(m_endframe - m_startframe) - 1.0;
m_bIpoPlaying = false;
@@ -190,7 +190,7 @@ bool KX_IpoActuator::Update(double curtime, bool frame)
}
}
- switch (m_type)
+ switch ((IpoActType)m_type)
{
case KX_ACT_IPO_PLAY:
@@ -383,7 +383,7 @@ bool KX_IpoActuator::Update(double curtime, bool frame)
return result;
}
-KX_IpoActuator::IpoActType KX_IpoActuator::string2mode(char* modename) {
+int KX_IpoActuator::string2mode(char* modename) {
IpoActType res = KX_ACT_IPO_NODEF;
if (modename == S_KX_ACT_IPO_PLAY_STRING) {
@@ -413,22 +413,22 @@ KX_IpoActuator::IpoActType KX_IpoActuator::string2mode(char* modename) {
/* Integration hooks ------------------------------------------------------- */
PyTypeObject KX_IpoActuator::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"KX_IpoActuator",
- sizeof(KX_IpoActuator),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0, //&MyPyCompare,
- __repr,
- 0, //&cvalue_as_number,
0,
0,
0,
- 0
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
PyParentObject KX_IpoActuator::Parents[] = {
@@ -441,6 +441,8 @@ PyParentObject KX_IpoActuator::Parents[] = {
PyMethodDef KX_IpoActuator::Methods[] = {
{"set", (PyCFunction) KX_IpoActuator::sPySet, METH_VARARGS, (PY_METHODCHAR)Set_doc},
+
+ // deprecated
{"setProperty", (PyCFunction) KX_IpoActuator::sPySetProperty, METH_VARARGS, (PY_METHODCHAR)SetProperty_doc},
{"setStart", (PyCFunction) KX_IpoActuator::sPySetStart, METH_VARARGS, (PY_METHODCHAR)SetStart_doc},
{"getStart", (PyCFunction) KX_IpoActuator::sPyGetStart, METH_NOARGS, (PY_METHODCHAR)GetStart_doc},
@@ -450,22 +452,35 @@ PyMethodDef KX_IpoActuator::Methods[] = {
{"getIpoAsForce", (PyCFunction) KX_IpoActuator::sPyGetIpoAsForce, METH_NOARGS, (PY_METHODCHAR)GetIpoAsForce_doc},
{"setIpoAdd", (PyCFunction) KX_IpoActuator::sPySetIpoAdd, METH_VARARGS, (PY_METHODCHAR)SetIpoAdd_doc},
{"getIpoAdd", (PyCFunction) KX_IpoActuator::sPyGetIpoAdd, METH_NOARGS, (PY_METHODCHAR)GetIpoAdd_doc},
- {"setType", (PyCFunction) KX_IpoActuator::sPySetType, METH_VARARGS, (PY_METHODCHAR)SetType_doc},
- {"getType", (PyCFunction) KX_IpoActuator::sPyGetType, METH_NOARGS, (PY_METHODCHAR)GetType_doc},
{"setForceIpoActsLocal", (PyCFunction) KX_IpoActuator::sPySetForceIpoActsLocal, METH_VARARGS, (PY_METHODCHAR)SetForceIpoActsLocal_doc},
{"getForceIpoActsLocal", (PyCFunction) KX_IpoActuator::sPyGetForceIpoActsLocal, METH_NOARGS, (PY_METHODCHAR)GetForceIpoActsLocal_doc},
+ {"setType", (PyCFunction) KX_IpoActuator::sPySetType, METH_VARARGS, (PY_METHODCHAR)SetType_doc},
+ {"getType", (PyCFunction) KX_IpoActuator::sPyGetType, METH_NOARGS, (PY_METHODCHAR)GetType_doc},
{NULL,NULL} //Sentinel
};
PyAttributeDef KX_IpoActuator::Attributes[] = {
+ KX_PYATTRIBUTE_FLOAT_RW("startFrame", 0, 300000, KX_IpoActuator, m_startframe),
+ KX_PYATTRIBUTE_FLOAT_RW("endFrame", 0, 300000, KX_IpoActuator, m_endframe),
+ KX_PYATTRIBUTE_STRING_RW("propName", 0, 64, false, KX_IpoActuator, m_propname),
+ KX_PYATTRIBUTE_STRING_RW("framePropName", 0, 64, false, KX_IpoActuator, m_framepropname),
+ KX_PYATTRIBUTE_INT_RW("type", KX_ACT_IPO_NODEF+1, KX_ACT_IPO_MAX-1, true, KX_IpoActuator, m_type),
+ KX_PYATTRIBUTE_BOOL_RW("useIpoAsForce", KX_IpoActuator, m_ipo_as_force),
+ KX_PYATTRIBUTE_BOOL_RW("useIpoAdd", KX_IpoActuator, m_ipo_add),
+ KX_PYATTRIBUTE_BOOL_RW("useIpoLocal", KX_IpoActuator, m_ipo_local),
+ KX_PYATTRIBUTE_BOOL_RW("useChildren", KX_IpoActuator, m_recurse),
+
{ NULL } //Sentinel
};
-PyObject* KX_IpoActuator::_getattr(const char *attr) {
- _getattr_up(SCA_IActuator);
+PyObject* KX_IpoActuator::py_getattro(PyObject *attr) {
+ py_getattro_up(SCA_IActuator);
}
-
+int KX_IpoActuator::py_setattro(PyObject *attr, PyObject *value) // py_setattro method
+{
+ py_setattro_up(SCA_IActuator);
+}
/* set --------------------------------------------------------------------- */
const char KX_IpoActuator::Set_doc[] =
@@ -475,17 +490,18 @@ const char KX_IpoActuator::Set_doc[] =
"\t - endframe : last frame to use (int)\n"
"\t - mode? : special mode (0=normal, 1=interpret location as force, 2=additive)"
"\tSet the properties of the actuator.\n";
-PyObject* KX_IpoActuator::PySet(PyObject* self,
- PyObject* args,
- PyObject* kwds) {
+PyObject* KX_IpoActuator::PySet(PyObject* args) {
+
+ ShowDeprecationWarning("set()", "a number properties");
+
/* sets modes PLAY, PINGPONG, FLIPPER, LOOPSTOP, LOOPEND */
/* arg 1 = mode string, arg 2 = startframe, arg3 = stopframe, */
/* arg4 = force toggle */
char* mode;
int forceToggle;
- IpoActType modenum;
+ int modenum;
int startFrame, stopFrame;
- if(!PyArg_ParseTuple(args, "siii", &mode, &startFrame,
+ if(!PyArg_ParseTuple(args, "siii:set", &mode, &startFrame,
&stopFrame, &forceToggle)) {
return NULL;
}
@@ -515,13 +531,14 @@ const char KX_IpoActuator::SetProperty_doc[] =
"setProperty(propname)\n"
"\t - propname: name of the property (string)\n"
"\tSet the property to be used in FromProp mode.\n";
-PyObject* KX_IpoActuator::PySetProperty(PyObject* self,
- PyObject* args,
- PyObject* kwds) {
+PyObject* KX_IpoActuator::PySetProperty(PyObject* args) {
+
+ ShowDeprecationWarning("setProperty()", "the propName property");
+
/* mode is implicit here, but not supported yet... */
/* args: property */
char *propertyName;
- if(!PyArg_ParseTuple(args, "s", &propertyName)) {
+ if(!PyArg_ParseTuple(args, "s:setProperty", &propertyName)) {
return NULL;
}
@@ -535,11 +552,12 @@ const char KX_IpoActuator::SetStart_doc[] =
"setStart(frame)\n"
"\t - frame: first frame to use (int)\n"
"\tSet the frame from which the ipo starts playing.\n";
-PyObject* KX_IpoActuator::PySetStart(PyObject* self,
- PyObject* args,
- PyObject* kwds) {
+PyObject* KX_IpoActuator::PySetStart(PyObject* args) {
+
+ ShowDeprecationWarning("setStart()", "the startFrame property");
+
float startArg;
- if(!PyArg_ParseTuple(args, "f", &startArg)) {
+ if(!PyArg_ParseTuple(args, "f:setStart", &startArg)) {
return NULL;
}
@@ -551,7 +569,8 @@ PyObject* KX_IpoActuator::PySetStart(PyObject* self,
const char KX_IpoActuator::GetStart_doc[] =
"getStart()\n"
"\tReturns the frame from which the ipo starts playing.\n";
-PyObject* KX_IpoActuator::PyGetStart(PyObject* self) {
+PyObject* KX_IpoActuator::PyGetStart() {
+ ShowDeprecationWarning("getStart()", "the startFrame property");
return PyFloat_FromDouble(m_startframe);
}
@@ -560,11 +579,10 @@ const char KX_IpoActuator::SetEnd_doc[] =
"setEnd(frame)\n"
"\t - frame: last frame to use (int)\n"
"\tSet the frame at which the ipo stops playing.\n";
-PyObject* KX_IpoActuator::PySetEnd(PyObject* self,
- PyObject* args,
- PyObject* kwds) {
+PyObject* KX_IpoActuator::PySetEnd(PyObject* args) {
+ ShowDeprecationWarning("setEnd()", "the endFrame property");
float endArg;
- if(!PyArg_ParseTuple(args, "f", &endArg)) {
+ if(!PyArg_ParseTuple(args, "f:setEnd", &endArg)) {
return NULL;
}
@@ -576,7 +594,8 @@ PyObject* KX_IpoActuator::PySetEnd(PyObject* self,
const char KX_IpoActuator::GetEnd_doc[] =
"getEnd()\n"
"\tReturns the frame at which the ipo stops playing.\n";
-PyObject* KX_IpoActuator::PyGetEnd(PyObject* self) {
+PyObject* KX_IpoActuator::PyGetEnd() {
+ ShowDeprecationWarning("getEnd()", "the endFrame property");
return PyFloat_FromDouble(m_endframe);
}
@@ -585,12 +604,11 @@ const char KX_IpoActuator::SetIpoAsForce_doc[] =
"setIpoAsForce(force?)\n"
"\t - force? : interpret this ipo as a force? (KX_TRUE, KX_FALSE)\n"
"\tSet whether to interpret the ipo as a force rather than a displacement.\n";
-PyObject* KX_IpoActuator::PySetIpoAsForce(PyObject* self,
- PyObject* args,
- PyObject* kwds) {
+PyObject* KX_IpoActuator::PySetIpoAsForce(PyObject* args) {
+ ShowDeprecationWarning("setIpoAsForce()", "the useIpoAsForce property");
int boolArg;
- if (!PyArg_ParseTuple(args, "i", &boolArg)) {
+ if (!PyArg_ParseTuple(args, "i:setIpoAsForce", &boolArg)) {
return NULL;
}
@@ -604,7 +622,8 @@ PyObject* KX_IpoActuator::PySetIpoAsForce(PyObject* self,
const char KX_IpoActuator::GetIpoAsForce_doc[] =
"getIpoAsForce()\n"
"\tReturns whether to interpret the ipo as a force rather than a displacement.\n";
-PyObject* KX_IpoActuator::PyGetIpoAsForce(PyObject* self) {
+PyObject* KX_IpoActuator::PyGetIpoAsForce() {
+ ShowDeprecationWarning("getIpoAsForce()", "the useIpoAsForce property");
return BoolToPyArg(m_ipo_as_force);
}
@@ -613,12 +632,11 @@ const char KX_IpoActuator::SetIpoAdd_doc[] =
"setIpoAdd(add?)\n"
"\t - add? : add flag (KX_TRUE, KX_FALSE)\n"
"\tSet whether to interpret the ipo as additive rather than absolute.\n";
-PyObject* KX_IpoActuator::PySetIpoAdd(PyObject* self,
- PyObject* args,
- PyObject* kwds) {
+PyObject* KX_IpoActuator::PySetIpoAdd(PyObject* args) {
+ ShowDeprecationWarning("setIpoAdd()", "the useIpoAdd property");
int boolArg;
- if (!PyArg_ParseTuple(args, "i", &boolArg)) {
+ if (!PyArg_ParseTuple(args, "i:setIpoAdd", &boolArg)) {
return NULL;
}
@@ -632,7 +650,8 @@ PyObject* KX_IpoActuator::PySetIpoAdd(PyObject* self,
const char KX_IpoActuator::GetIpoAdd_doc[] =
"getIpoAsAdd()\n"
"\tReturns whether to interpret the ipo as additive rather than absolute.\n";
-PyObject* KX_IpoActuator::PyGetIpoAdd(PyObject* self) {
+PyObject* KX_IpoActuator::PyGetIpoAdd() {
+ ShowDeprecationWarning("getIpoAdd()", "the useIpoAdd property");
return BoolToPyArg(m_ipo_add);
}
@@ -641,18 +660,17 @@ const char KX_IpoActuator::SetType_doc[] =
"setType(mode)\n"
"\t - mode: Play, PingPong, Flipper, LoopStop, LoopEnd or FromProp (string)\n"
"\tSet the operation mode of the actuator.\n";
-PyObject* KX_IpoActuator::PySetType(PyObject* self,
- PyObject* args,
- PyObject* kwds) {
+PyObject* KX_IpoActuator::PySetType(PyObject* args) {
+ ShowDeprecationWarning("setType()", "the type property");
int typeArg;
- if (!PyArg_ParseTuple(args, "i", &typeArg)) {
+ if (!PyArg_ParseTuple(args, "i:setType", &typeArg)) {
return NULL;
}
if ( (typeArg > KX_ACT_IPO_NODEF)
- && (typeArg < KX_ACT_IPO_KEY2KEY) ) {
- m_type = (IpoActType) typeArg;
+ && (typeArg < KX_ACT_IPO_MAX) ) {
+ m_type = typeArg;
}
Py_RETURN_NONE;
@@ -661,7 +679,8 @@ PyObject* KX_IpoActuator::PySetType(PyObject* self,
const char KX_IpoActuator::GetType_doc[] =
"getType()\n"
"\tReturns the operation mode of the actuator.\n";
-PyObject* KX_IpoActuator::PyGetType(PyObject* self) {
+PyObject* KX_IpoActuator::PyGetType() {
+ ShowDeprecationWarning("getType()", "the type property");
return PyInt_FromLong(m_type);
}
@@ -672,12 +691,11 @@ const char KX_IpoActuator::SetForceIpoActsLocal_doc[] =
"\t coordinates? (KX_TRUE, KX_FALSE)\n"
"\tSet whether to apply the force in the object's local\n"
"\tcoordinates rather than the world global coordinates.\n";
-PyObject* KX_IpoActuator::PySetForceIpoActsLocal(PyObject* self,
- PyObject* args,
- PyObject* kwds) {
+PyObject* KX_IpoActuator::PySetForceIpoActsLocal(PyObject* args) {
+ ShowDeprecationWarning("setForceIpoActsLocal()", "the useIpoLocal property");
int boolArg;
- if (!PyArg_ParseTuple(args, "i", &boolArg)) {
+ if (!PyArg_ParseTuple(args, "i:setForceIpoActsLocal", &boolArg)) {
return NULL;
}
@@ -690,7 +708,8 @@ const char KX_IpoActuator::GetForceIpoActsLocal_doc[] =
"getForceIpoActsLocal()\n"
"\tReturn whether to apply the force in the object's local\n"
"\tcoordinates rather than the world global coordinates.\n";
-PyObject* KX_IpoActuator::PyGetForceIpoActsLocal(PyObject* self) {
+PyObject* KX_IpoActuator::PyGetForceIpoActsLocal() {
+ ShowDeprecationWarning("getForceIpoActsLocal()", "the useIpoLocal property");
return BoolToPyArg(m_ipo_local);
}
diff --git a/source/gameengine/Ketsji/KX_IpoActuator.h b/source/gameengine/Ketsji/KX_IpoActuator.h
index 12e1835ab49..184ad5512de 100644
--- a/source/gameengine/Ketsji/KX_IpoActuator.h
+++ b/source/gameengine/Ketsji/KX_IpoActuator.h
@@ -108,9 +108,9 @@ public:
static STR_String S_KX_ACT_IPO_KEY2KEY_STRING;
static STR_String S_KX_ACT_IPO_FROM_PROP_STRING;
- IpoActType string2mode(char* modename);
+ int string2mode(char* modename);
- IpoActType m_type;
+ int m_type;
KX_IpoActuator(SCA_IObject* gameobj,
const STR_String& propname,
@@ -141,22 +141,24 @@ public:
/* Python interface ---------------------------------------------------- */
/* --------------------------------------------------------------------- */
- virtual PyObject* _getattr(const char *attr);
+ virtual PyObject* py_getattro(PyObject *attr);
+ virtual int py_setattro(PyObject *attr, PyObject *value);
+
//KX_PYMETHOD_DOC
- KX_PYMETHOD_DOC(KX_IpoActuator,Set);
- KX_PYMETHOD_DOC(KX_IpoActuator,SetProperty);
+ KX_PYMETHOD_DOC_VARARGS(KX_IpoActuator,Set);
+ KX_PYMETHOD_DOC_VARARGS(KX_IpoActuator,SetProperty);
/* KX_PYMETHOD_DOC(KX_IpoActuator,SetKey2Key); */
- KX_PYMETHOD_DOC(KX_IpoActuator,SetStart);
+ KX_PYMETHOD_DOC_VARARGS(KX_IpoActuator,SetStart);
KX_PYMETHOD_DOC_NOARGS(KX_IpoActuator,GetStart);
- KX_PYMETHOD_DOC(KX_IpoActuator,SetEnd);
+ KX_PYMETHOD_DOC_VARARGS(KX_IpoActuator,SetEnd);
KX_PYMETHOD_DOC_NOARGS(KX_IpoActuator,GetEnd);
- KX_PYMETHOD_DOC(KX_IpoActuator,SetIpoAsForce);
+ KX_PYMETHOD_DOC_VARARGS(KX_IpoActuator,SetIpoAsForce);
KX_PYMETHOD_DOC_NOARGS(KX_IpoActuator,GetIpoAsForce);
- KX_PYMETHOD_DOC(KX_IpoActuator,SetIpoAdd);
+ KX_PYMETHOD_DOC_VARARGS(KX_IpoActuator,SetIpoAdd);
KX_PYMETHOD_DOC_NOARGS(KX_IpoActuator,GetIpoAdd);
- KX_PYMETHOD_DOC(KX_IpoActuator,SetType);
+ KX_PYMETHOD_DOC_VARARGS(KX_IpoActuator,SetType);
KX_PYMETHOD_DOC_NOARGS(KX_IpoActuator,GetType);
- KX_PYMETHOD_DOC(KX_IpoActuator,SetForceIpoActsLocal);
+ KX_PYMETHOD_DOC_VARARGS(KX_IpoActuator,SetForceIpoActsLocal);
KX_PYMETHOD_DOC_NOARGS(KX_IpoActuator,GetForceIpoActsLocal);
};
diff --git a/source/gameengine/Ketsji/KX_KetsjiEngine.cpp b/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
index 97b4213b8bd..83a2fa8a448 100644
--- a/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
+++ b/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
@@ -55,6 +55,7 @@
#include "KX_Scene.h"
#include "MT_CmMatrix4x4.h"
#include "KX_Camera.h"
+#include "KX_Dome.h"
#include "KX_Light.h"
#include "KX_PythonInit.h"
#include "KX_PyConstraintBinding.h"
@@ -144,6 +145,8 @@ KX_KetsjiEngine::KX_KetsjiEngine(KX_ISystem* system)
m_stereo(false),
m_curreye(0),
+ m_usedome(false),
+
m_logger(NULL),
// Set up timing info display variables
@@ -179,6 +182,8 @@ KX_KetsjiEngine::KX_KetsjiEngine(KX_ISystem* system)
KX_KetsjiEngine::~KX_KetsjiEngine()
{
delete m_logger;
+ if(m_usedome)
+ delete m_dome;
}
@@ -256,7 +261,129 @@ void KX_KetsjiEngine::SetSceneConverter(KX_ISceneConverter* sceneconverter)
m_sceneconverter = sceneconverter;
}
+void KX_KetsjiEngine::InitDome(float size, short res, short mode, short angle, float resbuf, struct Text* text)
+{
+ m_dome = new KX_Dome(m_canvas, m_rasterizer, m_rendertools,this, size, res, mode, angle, resbuf, text);
+ m_usedome = true;
+}
+
+void KX_KetsjiEngine::RenderDome()
+{
+ GLuint viewport[4]={0};
+ glGetIntegerv(GL_VIEWPORT,(GLint *)viewport);
+// unsigned int m_viewport[4] = {viewport[0], viewport[1], viewport[2], viewport[3]};
+
+ m_dome->SetViewPort(viewport);
+
+ KX_Scene* firstscene = *m_scenes.begin();
+ const RAS_FrameSettings &framesettings = firstscene->GetFramingType();
+
+ m_logger->StartLog(tc_rasterizer, m_kxsystem->GetTimeInSeconds(), true);
+
+ // hiding mouse cursor each frame
+ // (came back when going out of focus and then back in again)
+ if (m_hideCursor)
+ m_canvas->SetMouseState(RAS_ICanvas::MOUSE_INVISIBLE);
+
+ // clear the entire game screen with the border color
+ // only once per frame
+
+ m_canvas->BeginDraw();
+
+ // BeginFrame() sets the actual drawing area. You can use a part of the window
+ if (!BeginFrame())
+ return;
+
+ KX_SceneList::iterator sceneit;
+ for (sceneit = m_scenes.begin();sceneit != m_scenes.end(); sceneit++)
+ {
+ // do this only once per scene
+ (*sceneit)->UpdateMeshTransformations();
+ }
+
+ int n_renders=m_dome->GetNumberRenders();// usually 4 or 6
+ for (int i=0;i<n_renders;i++){
+ m_canvas->ClearBuffer(RAS_ICanvas::COLOR_BUFFER|RAS_ICanvas::DEPTH_BUFFER);
+ for (sceneit = m_scenes.begin();sceneit != m_scenes.end(); sceneit++)
+ // for each scene, call the proceed functions
+ {
+ KX_Scene* scene = *sceneit;
+ KX_Camera* cam = scene->GetActiveCamera();
+
+ m_rendertools->BeginFrame(m_rasterizer);
+ // pass the scene's worldsettings to the rasterizer
+ SetWorldSettings(scene->GetWorldInfo());
+
+ // shadow buffers
+ if (i == 0){
+ RenderShadowBuffers(scene);
+ }
+ // Avoid drawing the scene with the active camera twice when it's viewport is enabled
+ if(cam && !cam->GetViewport())
+ {
+ if (scene->IsClearingZBuffer())
+ m_rasterizer->ClearDepthBuffer();
+
+ m_rendertools->SetAuxilaryClientInfo(scene);
+
+ // do the rendering
+ m_dome->RenderDomeFrame(scene,cam, i);
+ }
+
+ list<class KX_Camera*>* cameras = scene->GetCameras();
+
+ // Draw the scene once for each camera with an enabled viewport
+ list<KX_Camera*>::iterator it = cameras->begin();
+ while(it != cameras->end())
+ {
+ if((*it)->GetViewport())
+ {
+ if (scene->IsClearingZBuffer())
+ m_rasterizer->ClearDepthBuffer();
+
+ m_rendertools->SetAuxilaryClientInfo(scene);
+
+ // do the rendering
+ m_dome->RenderDomeFrame(scene, (*it),i);
+ }
+
+ it++;
+ }
+ }
+ m_dome->BindImages(i);
+ }
+
+// m_dome->Dome_PostRender(scene, cam, stereomode);
+ m_canvas->EndFrame();//XXX do we really need that?
+ m_canvas->SetViewPort(0, 0, m_canvas->GetWidth(), m_canvas->GetHeight());
+
+ if (m_overrideFrameColor) //XXX why do we want
+ {
+ // Do not use the framing bar color set in the Blender scenes
+ m_canvas->ClearColor(
+ m_overrideFrameColorR,
+ m_overrideFrameColorG,
+ m_overrideFrameColorB,
+ 1.0
+ );
+ }
+ else
+ {
+ // Use the framing bar color set in the Blender scenes
+ m_canvas->ClearColor(
+ framesettings.BarRed(),
+ framesettings.BarGreen(),
+ framesettings.BarBlue(),
+ 1.0
+ );
+ }
+
+ m_dome->Draw();
+
+ //run 2dfilters
+ EndFrame();
+}
/**
* Ketsji Init(), Initializes datastructures and converts data from
@@ -412,7 +539,7 @@ else
// Compute the number of logic frames to do each update (fixed tic bricks)
- int frames =int(deltatime*m_ticrate);
+ int frames =int(deltatime*m_ticrate+1e-6);
// if (frames>1)
// printf("****************************************");
// printf("dt = %f, deltatime = %f, frames = %d\n",dt, deltatime,frames);
@@ -465,12 +592,15 @@ else
m_logger->StartLog(tc_network, m_kxsystem->GetTimeInSeconds(), true);
+ SG_SetActiveStage(SG_STAGE_NETWORK);
scene->GetNetworkScene()->proceed(m_frameTime);
- m_logger->StartLog(tc_scenegraph, m_kxsystem->GetTimeInSeconds(), true);
- scene->UpdateParents(m_frameTime);
+ //m_logger->StartLog(tc_scenegraph, m_kxsystem->GetTimeInSeconds(), true);
+ //SG_SetActiveStage(SG_STAGE_NETWORK_UPDATE);
+ //scene->UpdateParents(m_frameTime);
m_logger->StartLog(tc_physics, m_kxsystem->GetTimeInSeconds(), true);
+ SG_SetActiveStage(SG_STAGE_PHYSICS1);
// set Python hooks for each scene
PHY_SetActiveEnvironment(scene->GetPhysicsEnvironment());
KX_SetActiveScene(scene);
@@ -479,31 +609,37 @@ else
// Update scenegraph after physics step. This maps physics calculations
// into node positions.
- m_logger->StartLog(tc_scenegraph, m_kxsystem->GetTimeInSeconds(), true);
- scene->UpdateParents(m_frameTime);
+ //m_logger->StartLog(tc_scenegraph, m_kxsystem->GetTimeInSeconds(), true);
+ //SG_SetActiveStage(SG_STAGE_PHYSICS1_UPDATE);
+ //scene->UpdateParents(m_frameTime);
// Process sensors, and controllers
m_logger->StartLog(tc_logic, m_kxsystem->GetTimeInSeconds(), true);
+ SG_SetActiveStage(SG_STAGE_CONTROLLER);
scene->LogicBeginFrame(m_frameTime);
// Scenegraph needs to be updated again, because Logic Controllers
// can affect the local matrices.
m_logger->StartLog(tc_scenegraph, m_kxsystem->GetTimeInSeconds(), true);
+ SG_SetActiveStage(SG_STAGE_CONTROLLER_UPDATE);
scene->UpdateParents(m_frameTime);
// Process actuators
// Do some cleanup work for this logic frame
m_logger->StartLog(tc_logic, m_kxsystem->GetTimeInSeconds(), true);
+ SG_SetActiveStage(SG_STAGE_ACTUATOR);
scene->LogicUpdateFrame(m_frameTime, true);
scene->LogicEndFrame();
// Actuators can affect the scenegraph
m_logger->StartLog(tc_scenegraph, m_kxsystem->GetTimeInSeconds(), true);
+ SG_SetActiveStage(SG_STAGE_ACTUATOR_UPDATE);
scene->UpdateParents(m_frameTime);
m_logger->StartLog(tc_physics, m_kxsystem->GetTimeInSeconds(), true);
+ SG_SetActiveStage(SG_STAGE_PHYSICS2);
scene->GetPhysicsEnvironment()->beginFrame();
// Perform physics calculations on the scene. This can involve
@@ -511,6 +647,7 @@ else
scene->GetPhysicsEnvironment()->proceedDeltaTime(m_frameTime,1.0/m_ticrate);//m_deltatimerealDeltaTime);
m_logger->StartLog(tc_scenegraph, m_kxsystem->GetTimeInSeconds(), true);
+ SG_SetActiveStage(SG_STAGE_PHYSICS2_UPDATE);
scene->UpdateParents(m_frameTime);
@@ -574,6 +711,7 @@ else
KX_SetActiveScene(scene);
m_logger->StartLog(tc_scenegraph, m_kxsystem->GetTimeInSeconds(), true);
+ SG_SetActiveStage(SG_STAGE_PHYSICS1);
scene->UpdateParents(m_clockTime);
// Perform physics calculations on the scene. This can involve
@@ -583,6 +721,7 @@ else
// Update scenegraph after physics step. This maps physics calculations
// into node positions.
m_logger->StartLog(tc_scenegraph, m_kxsystem->GetTimeInSeconds(), true);
+ SG_SetActiveStage(SG_STAGE_PHYSICS2);
scene->UpdateParents(m_clockTime);
// Do some cleanup work for this logic frame
@@ -591,6 +730,7 @@ else
// Actuators can affect the scenegraph
m_logger->StartLog(tc_scenegraph, m_kxsystem->GetTimeInSeconds(), true);
+ SG_SetActiveStage(SG_STAGE_ACTUATOR);
scene->UpdateParents(m_clockTime);
scene->setSuspendedTime(0.0);
@@ -618,10 +758,15 @@ else
void KX_KetsjiEngine::Render()
{
+ if(m_usedome){
+ RenderDome();
+ return;
+ }
KX_Scene* firstscene = *m_scenes.begin();
const RAS_FrameSettings &framesettings = firstscene->GetFramingType();
m_logger->StartLog(tc_rasterizer, m_kxsystem->GetTimeInSeconds(), true);
+ SG_SetActiveStage(SG_STAGE_RENDER);
// hiding mouse cursor each frame
// (came back when going out of focus and then back in again)
@@ -672,6 +817,9 @@ void KX_KetsjiEngine::Render()
// pass the scene's worldsettings to the rasterizer
SetWorldSettings(scene->GetWorldInfo());
+ // do this only once per scene
+ scene->UpdateMeshTransformations();
+
// shadow buffers
RenderShadowBuffers(scene);
@@ -758,6 +906,9 @@ void KX_KetsjiEngine::Render()
}
} // if(m_rasterizer->Stereo())
+ // run the 2dfilters and motion blur once for all the scenes
+ PostRenderFrame();
+
EndFrame();
}
@@ -997,7 +1148,6 @@ void KX_KetsjiEngine::RenderShadowBuffers(KX_Scene *scene)
light->BindShadowBuffer(m_rasterizer, cam, camtrans);
/* update scene */
- scene->UpdateMeshTransformations();
scene->CalculateVisibleMeshes(m_rasterizer, cam, light->GetShadowLayer());
/* render */
@@ -1102,30 +1252,34 @@ void KX_KetsjiEngine::RenderFrame(KX_Scene* scene, KX_Camera* cam)
cam->GetCameraLocation(), cam->GetCameraOrientation());
cam->SetModelviewMatrix(viewmat);
- scene->UpdateMeshTransformations();
+ //redundant, already done in Render()
+ //scene->UpdateMeshTransformations();
// The following actually reschedules all vertices to be
// redrawn. There is a cache between the actual rescheduling
// and this call though. Visibility is imparted when this call
// runs through the individual objects.
+
+ m_logger->StartLog(tc_scenegraph, m_kxsystem->GetTimeInSeconds(), true);
+ SG_SetActiveStage(SG_STAGE_CULLING);
+
scene->CalculateVisibleMeshes(m_rasterizer,cam);
+ m_logger->StartLog(tc_rasterizer, m_kxsystem->GetTimeInSeconds(), true);
+ SG_SetActiveStage(SG_STAGE_RENDER);
+
scene->RenderBuckets(camtrans, m_rasterizer, m_rendertools);
if (scene->GetPhysicsEnvironment())
scene->GetPhysicsEnvironment()->debugDrawWorld();
m_rasterizer->FlushDebugLines();
-
- PostRenderFrame();
}
void KX_KetsjiEngine::PostRenderFrame()
{
- m_rendertools->PushMatrix();
m_rendertools->Render2DFilters(m_canvas);
m_rendertools->MotionBlur(m_rasterizer);
- m_rendertools->PopMatrix();
}
void KX_KetsjiEngine::StopEngine()
@@ -1166,15 +1320,17 @@ void KX_KetsjiEngine::AddScene(KX_Scene* scene)
void KX_KetsjiEngine::PostProcessScene(KX_Scene* scene)
{
bool override_camera = (m_overrideCam && (scene->GetName() == m_overrideSceneName));
-
- // if there is no activecamera, or the camera is being
- // overridden we need to construct a temporarily camera
+
+ SG_SetActiveStage(SG_STAGE_SCENE);
+
+ // if there is no activecamera, or the camera is being
+ // overridden we need to construct a temporarily camera
if (!scene->GetActiveCamera() || override_camera)
{
KX_Camera* activecam = NULL;
RAS_CameraData camdata = RAS_CameraData();
- activecam = new KX_Camera(scene,KX_Scene::m_callbacks,camdata, false);
+ activecam = new KX_Camera(scene,KX_Scene::m_callbacks,camdata);
activecam->SetName("__default__cam__");
// set transformation
@@ -1186,11 +1342,11 @@ void KX_KetsjiEngine::PostProcessScene(KX_Scene* scene)
activecam->NodeSetLocalPosition(camtrans.getOrigin());
activecam->NodeSetLocalOrientation(camtrans.getBasis());
- activecam->NodeUpdateGS(0,true);
+ activecam->NodeUpdateGS(0);
} else {
activecam->NodeSetLocalPosition(MT_Point3(0.0, 0.0, 0.0));
activecam->NodeSetLocalOrientation(MT_Vector3(0.0, 0.0, 0.0));
- activecam->NodeUpdateGS(0,true);
+ activecam->NodeUpdateGS(0);
}
scene->AddCamera(activecam);
@@ -1675,4 +1831,3 @@ void KX_KetsjiEngine::GetOverrideFrameColor(float& r, float& g, float& b) const
}
-
diff --git a/source/gameengine/Ketsji/KX_KetsjiEngine.h b/source/gameengine/Ketsji/KX_KetsjiEngine.h
index 8516049f6d8..a8ccd6100d7 100644
--- a/source/gameengine/Ketsji/KX_KetsjiEngine.h
+++ b/source/gameengine/Ketsji/KX_KetsjiEngine.h
@@ -74,6 +74,7 @@ private:
PyObject* m_pythondictionary;
class SCA_IInputDevice* m_keyboarddevice;
class SCA_IInputDevice* m_mousedevice;
+ class KX_Dome* m_dome; // dome stereo mode
/** Lists of scenes scheduled to be removed at the end of the frame. */
std::set<STR_String> m_removingScenes;
@@ -208,6 +209,12 @@ public:
RAS_ICanvas* GetCanvas(){return m_canvas;};
RAS_IRenderTools* GetRenderTools(){return m_rendertools;};
+ /// Dome functions
+ void InitDome(float size, short res, short mode, short angle, float resbuf, struct Text* text);
+ void EndDome();
+ void RenderDome();
+ bool m_usedome;
+
///returns true if an update happened to indicate -> Render
bool NextFrame();
void Render();
@@ -234,6 +241,8 @@ public:
void GetSceneViewport(KX_Scene* scene, KX_Camera* cam, RAS_Rect& area, RAS_Rect& viewport);
void SetDrawType(int drawingtype);
+ int GetDrawType(){return m_drawingmode;};
+
void SetCameraZoom(float camzoom);
void EnableCameraOverride(const STR_String& forscene);
diff --git a/source/gameengine/Ketsji/KX_Light.cpp b/source/gameengine/Ketsji/KX_Light.cpp
index a2e93ecdd36..713838c88ec 100644
--- a/source/gameengine/Ketsji/KX_Light.cpp
+++ b/source/gameengine/Ketsji/KX_Light.cpp
@@ -57,6 +57,7 @@ KX_LightObject::KX_LightObject(void* sgReplicationInfo,SG_Callbacks callbacks,
{
m_lightobj = lightobj;
m_lightobj.m_worldmatrix = GetOpenGLMatrixPtr();
+ m_lightobj.m_scene = sgReplicationInfo;
m_rendertools->AddLight(&m_lightobj);
m_glsl = glsl;
m_blenderscene = ((KX_Scene*)sgReplicationInfo)->GetBlenderScene();
@@ -158,7 +159,7 @@ void KX_LightObject::BindShadowBuffer(RAS_IRasterizer *ras, KX_Camera *cam, MT_T
cam->NodeSetLocalPosition(camtrans.getOrigin());
cam->NodeSetLocalOrientation(camtrans.getBasis());
- cam->NodeUpdateGS(0,true);
+ cam->NodeUpdateGS(0);
/* setup rasterizer transformations */
ras->SetProjectionMatrix(projectionmat);
@@ -172,109 +173,114 @@ void KX_LightObject::UnbindShadowBuffer(RAS_IRasterizer *ras)
GPU_lamp_shadow_buffer_unbind(lamp);
}
-PyObject* KX_LightObject::_getattr(const char *attr)
+PyObject* KX_LightObject::py_getattro(PyObject *attr)
{
- if (!strcmp(attr, "layer"))
+ char *attr_str= PyString_AsString(attr);
+
+ if (!strcmp(attr_str, "layer"))
return PyInt_FromLong(m_lightobj.m_layer);
- if (!strcmp(attr, "energy"))
+ if (!strcmp(attr_str, "energy"))
return PyFloat_FromDouble(m_lightobj.m_energy);
- if (!strcmp(attr, "distance"))
+ if (!strcmp(attr_str, "distance"))
return PyFloat_FromDouble(m_lightobj.m_distance);
- if (!strcmp(attr, "colour") || !strcmp(attr, "color"))
+ if (!strcmp(attr_str, "colour") || !strcmp(attr_str, "color"))
return Py_BuildValue("[fff]", m_lightobj.m_red, m_lightobj.m_green, m_lightobj.m_blue);
- if (!strcmp(attr, "lin_attenuation"))
+ if (!strcmp(attr_str, "lin_attenuation"))
return PyFloat_FromDouble(m_lightobj.m_att1);
- if (!strcmp(attr, "quad_attenuation"))
+ if (!strcmp(attr_str, "quad_attenuation"))
return PyFloat_FromDouble(m_lightobj.m_att2);
- if (!strcmp(attr, "spotsize"))
+ if (!strcmp(attr_str, "spotsize"))
return PyFloat_FromDouble(m_lightobj.m_spotsize);
- if (!strcmp(attr, "spotblend"))
+ if (!strcmp(attr_str, "spotblend"))
return PyFloat_FromDouble(m_lightobj.m_spotblend);
- if (!strcmp(attr, "SPOT"))
+ if (!strcmp(attr_str, "SPOT"))
return PyInt_FromLong(RAS_LightObject::LIGHT_SPOT);
- if (!strcmp(attr, "SUN"))
+ if (!strcmp(attr_str, "SUN"))
return PyInt_FromLong(RAS_LightObject::LIGHT_SUN);
- if (!strcmp(attr, "NORMAL"))
+ if (!strcmp(attr_str, "NORMAL"))
return PyInt_FromLong(RAS_LightObject::LIGHT_NORMAL);
- if (!strcmp(attr, "type"))
+ if (!strcmp(attr_str, "type"))
return PyInt_FromLong(m_lightobj.m_type);
- _getattr_up(KX_GameObject);
+ py_getattro_up(KX_GameObject);
}
-int KX_LightObject::_setattr(const char *attr, PyObject *pyvalue)
-{
+
+int KX_LightObject::py_setattro(PyObject *attr, PyObject *pyvalue)
+{
+ char *attr_str= PyString_AsString(attr);
+
if (PyInt_Check(pyvalue))
{
int value = PyInt_AsLong(pyvalue);
- if (!strcmp(attr, "layer"))
+ if (!strcmp(attr_str, "layer"))
{
m_lightobj.m_layer = value;
- return 0;
+ return PY_SET_ATTR_SUCCESS;
}
- if (!strcmp(attr, "type"))
+ if (!strcmp(attr_str, "type"))
{
if (value >= RAS_LightObject::LIGHT_SPOT && value <= RAS_LightObject::LIGHT_NORMAL)
m_lightobj.m_type = (RAS_LightObject::LightType) value;
- return 0;
+ return PY_SET_ATTR_SUCCESS;
}
}
- if (PyFloat_Check(pyvalue))
+ if (PyFloat_Check(pyvalue) || PyInt_Check(pyvalue))
{
float value = PyFloat_AsDouble(pyvalue);
- if (!strcmp(attr, "energy"))
+ if (!strcmp(attr_str, "energy"))
{
m_lightobj.m_energy = value;
- return 0;
+ return PY_SET_ATTR_SUCCESS;
}
- if (!strcmp(attr, "distance"))
+ if (!strcmp(attr_str, "distance"))
{
m_lightobj.m_distance = value;
- return 0;
+ return PY_SET_ATTR_SUCCESS;
}
- if (!strcmp(attr, "lin_attenuation"))
+ if (!strcmp(attr_str, "lin_attenuation"))
{
m_lightobj.m_att1 = value;
- return 0;
+ return PY_SET_ATTR_SUCCESS;
}
- if (!strcmp(attr, "quad_attenuation"))
+ if (!strcmp(attr_str, "quad_attenuation"))
{
m_lightobj.m_att2 = value;
- return 0;
+ return PY_SET_ATTR_SUCCESS;
}
- if (!strcmp(attr, "spotsize"))
+ if (!strcmp(attr_str, "spotsize"))
{
m_lightobj.m_spotsize = value;
- return 0;
+ return PY_SET_ATTR_SUCCESS;
}
- if (!strcmp(attr, "spotblend"))
+ if (!strcmp(attr_str, "spotblend"))
{
m_lightobj.m_spotblend = value;
- return 0;
+ return PY_SET_ATTR_SUCCESS;
}
}
if (PySequence_Check(pyvalue))
{
- if (!strcmp(attr, "colour") || !strcmp(attr, "color"))
+ if (!strcmp(attr_str, "colour") || !strcmp(attr_str, "color"))
{
MT_Vector3 color;
if (PyVecTo(pyvalue, color))
@@ -282,19 +288,19 @@ int KX_LightObject::_setattr(const char *attr, PyObject *pyvalue)
m_lightobj.m_red = color[0];
m_lightobj.m_green = color[1];
m_lightobj.m_blue = color[2];
- return 0;
+ return PY_SET_ATTR_SUCCESS;
}
- return 1;
+ return PY_SET_ATTR_FAIL;
}
}
- if (!strcmp(attr, "SPOT") || !strcmp(attr, "SUN") || !strcmp(attr, "NORMAL"))
+ if (!strcmp(attr_str, "SPOT") || !strcmp(attr_str, "SUN") || !strcmp(attr_str, "NORMAL"))
{
- PyErr_Format(PyExc_RuntimeError, "Attribute %s is read only.", attr);
- return 1;
+ PyErr_Format(PyExc_RuntimeError, "Attribute %s is read only.", attr_str);
+ return PY_SET_ATTR_FAIL;
}
- return KX_GameObject::_setattr(attr, pyvalue);
+ return KX_GameObject::py_setattro(attr, pyvalue);
}
PyMethodDef KX_LightObject::Methods[] = {
@@ -302,51 +308,41 @@ PyMethodDef KX_LightObject::Methods[] = {
};
PyAttributeDef KX_LightObject::Attributes[] = {
+ KX_PYATTRIBUTE_DUMMY("layer"),
+ KX_PYATTRIBUTE_DUMMY("energy"),
+ KX_PYATTRIBUTE_DUMMY("distance"),
+ KX_PYATTRIBUTE_DUMMY("colour"),
+ KX_PYATTRIBUTE_DUMMY("color"),
+ KX_PYATTRIBUTE_DUMMY("lin_attenuation"),
+ KX_PYATTRIBUTE_DUMMY("quad_attenuation"),
+ KX_PYATTRIBUTE_DUMMY("spotsize"),
+ KX_PYATTRIBUTE_DUMMY("spotblend"),
+ KX_PYATTRIBUTE_DUMMY("SPOT"),
+ KX_PYATTRIBUTE_DUMMY("SUN"),
+ KX_PYATTRIBUTE_DUMMY("NORMAL"),
+ KX_PYATTRIBUTE_DUMMY("type"),
{ NULL } //Sentinel
};
-char KX_LightObject::doc[] = "Module KX_LightObject\n\n"
-"Constants:\n"
-"\tSPOT\n"
-"\tSUN\n"
-"\tNORMAL\n"
-"Attributes:\n"
-"\ttype -> SPOT, SUN or NORMAL\n"
-"\t\tThe type of light.\n"
-"\tlayer -> integer bit field.\n"
-"\t\tThe layers this light applies to.\n"
-"\tenergy -> float.\n"
-"\t\tThe brightness of the light.\n"
-"\tdistance -> float.\n"
-"\t\tThe effect radius of the light.\n"
-"\tcolour -> list [r, g, b].\n"
-"\tcolor -> list [r, g, b].\n"
-"\t\tThe color of the light.\n"
-"\tlin_attenuation -> float.\n"
-"\t\tThe attenuation factor for the light.\n"
-"\tspotsize -> float.\n"
-"\t\tThe size of the spot.\n"
-"\tspotblend -> float.\n"
-"\t\tThe blend? of the spot.\n";
-
PyTypeObject KX_LightObject::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"KX_LightObject",
- sizeof(KX_LightObject),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0, //&MyPyCompare,
- __repr,
- 0, //&cvalue_as_number,
0,
0,
0,
- 0, 0, 0, 0, 0, 0,
- doc
+ py_base_repr,
+ 0,0,
+ &KX_GameObject::Mapping,
+ 0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
PyParentObject KX_LightObject::Parents[] = {
diff --git a/source/gameengine/Ketsji/KX_Light.h b/source/gameengine/Ketsji/KX_Light.h
index 47edd09b5b9..4559954c8d7 100644
--- a/source/gameengine/Ketsji/KX_Light.h
+++ b/source/gameengine/Ketsji/KX_Light.h
@@ -47,7 +47,6 @@ protected:
class RAS_IRenderTools* m_rendertools; //needed for registering and replication of lightobj
bool m_glsl;
Scene* m_blenderscene;
- static char doc[];
public:
KX_LightObject(void* sgReplicationInfo,SG_Callbacks callbacks,class RAS_IRenderTools* rendertools,const struct RAS_LightObject& lightobj, bool glsl, PyTypeObject *T = &Type);
@@ -63,8 +62,8 @@ public:
void UnbindShadowBuffer(class RAS_IRasterizer *ras);
void Update();
- virtual PyObject* _getattr(const char *attr); /* lens, near, far, projection_matrix */
- virtual int _setattr(const char *attr, PyObject *pyvalue);
+ virtual PyObject* py_getattro(PyObject *attr); /* lens, near, far, projection_matrix */
+ virtual int py_setattro(PyObject *attr, PyObject *pyvalue);
virtual bool IsLight(void) { return true; }
};
diff --git a/source/gameengine/Ketsji/KX_MeshProxy.cpp b/source/gameengine/Ketsji/KX_MeshProxy.cpp
index a0c0a496c06..6be1da55ff8 100644
--- a/source/gameengine/Ketsji/KX_MeshProxy.cpp
+++ b/source/gameengine/Ketsji/KX_MeshProxy.cpp
@@ -46,22 +46,22 @@
#include "PyObjectPlus.h"
PyTypeObject KX_MeshProxy::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"KX_MeshProxy",
- sizeof(KX_MeshProxy),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0, //&MyPyCompare,
- __repr,
- 0, //&cvalue_as_number,
0,
0,
0,
- 0
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
PyParentObject KX_MeshProxy::Parents[] = {
@@ -73,8 +73,11 @@ PyParentObject KX_MeshProxy::Parents[] = {
};
PyMethodDef KX_MeshProxy::Methods[] = {
+// Deprecated ----->
{"getNumMaterials", (PyCFunction)KX_MeshProxy::sPyGetNumMaterials,METH_VARARGS},
{"getNumPolygons", (PyCFunction)KX_MeshProxy::sPyGetNumPolygons,METH_NOARGS},
+// <-----
+
{"getMaterialName", (PyCFunction)KX_MeshProxy::sPyGetMaterialName,METH_VARARGS},
{"getTextureName", (PyCFunction)KX_MeshProxy::sPyGetTextureName,METH_VARARGS},
{"getVertexArrayLength", (PyCFunction)KX_MeshProxy::sPyGetVertexArrayLength,METH_VARARGS},
@@ -87,6 +90,10 @@ KX_PYMETHODTABLE(KX_MeshProxy, reinstancePhysicsMesh),
};
PyAttributeDef KX_MeshProxy::Attributes[] = {
+ KX_PYATTRIBUTE_RO_FUNCTION("materials", KX_MeshProxy, pyattr_get_materials),
+ KX_PYATTRIBUTE_RO_FUNCTION("numPolygons", KX_MeshProxy, pyattr_get_numPolygons),
+ KX_PYATTRIBUTE_RO_FUNCTION("numMaterials", KX_MeshProxy, pyattr_get_numMaterials),
+
{ NULL } //Sentinel
};
@@ -96,35 +103,19 @@ void KX_MeshProxy::SetMeshModified(bool v)
}
-PyObject*
-KX_MeshProxy::_getattr(const char *attr)
+PyObject* KX_MeshProxy::py_getattro(PyObject *attr)
{
- if (!strcmp(attr, "materials"))
- {
- PyObject *materials = PyList_New(0);
- list<RAS_MeshMaterial>::iterator mit = m_meshobj->GetFirstMaterial();
- for(; mit != m_meshobj->GetLastMaterial(); ++mit)
- {
- RAS_IPolyMaterial *polymat = mit->m_bucket->GetPolyMaterial();
-
- if(polymat->GetFlag() & RAS_BLENDERMAT)
- {
- KX_BlenderMaterial *mat = static_cast<KX_BlenderMaterial*>(polymat);
- PyList_Append(materials, mat);
- }else
- {
- PyList_Append(materials, static_cast<KX_PolygonMaterial*>(polymat));
- }
- }
- return materials;
- }
- _getattr_up(SCA_IObject);
+ py_getattro_up(SCA_IObject);
}
+int KX_MeshProxy::py_setattro(PyObject *attr, PyObject* value)
+{
+ py_setattro_up(SCA_IObject);
+}
KX_MeshProxy::KX_MeshProxy(RAS_MeshObject* mesh)
- : m_meshobj(mesh)
+ : SCA_IObject(&Type), m_meshobj(mesh)
{
}
@@ -139,7 +130,7 @@ CValue* KX_MeshProxy::Calc(VALUE_OPERATOR op, CValue *val) { return NULL;}
CValue* KX_MeshProxy::CalcFinal(VALUE_DATA_TYPE dtype, VALUE_OPERATOR op, CValue *val) { return NULL;}
const STR_String & KX_MeshProxy::GetText() {return m_meshobj->GetName();};
-float KX_MeshProxy::GetNumber() { return -1;}
+double KX_MeshProxy::GetNumber() { return -1;}
STR_String KX_MeshProxy::GetName() { return m_meshobj->GetName();}
void KX_MeshProxy::SetName(STR_String name) { };
CValue* KX_MeshProxy::GetReplica() { return NULL;}
@@ -148,28 +139,26 @@ void KX_MeshProxy::ReplicaSetName(STR_String name) {};
// stuff for python integration
-PyObject* KX_MeshProxy::PyGetNumMaterials(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_MeshProxy::PyGetNumMaterials(PyObject* args, PyObject* kwds)
{
int num = m_meshobj->NumMaterials();
+ ShowDeprecationWarning("getNumMaterials()", "the numMaterials property");
return PyInt_FromLong(num);
}
-PyObject* KX_MeshProxy::PyGetNumPolygons(PyObject* self)
+PyObject* KX_MeshProxy::PyGetNumPolygons()
{
int num = m_meshobj->NumPolygons();
+ ShowDeprecationWarning("getNumPolygons()", "the numPolygons property");
return PyInt_FromLong(num);
}
-PyObject* KX_MeshProxy::PyGetMaterialName(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_MeshProxy::PyGetMaterialName(PyObject* args, PyObject* kwds)
{
int matid= 1;
STR_String matname;
- if (PyArg_ParseTuple(args,"i",&matid))
+ if (PyArg_ParseTuple(args,"i:getMaterialName",&matid))
{
matname = m_meshobj->GetMaterialName(matid);
}
@@ -182,14 +171,12 @@ PyObject* KX_MeshProxy::PyGetMaterialName(PyObject* self,
}
-PyObject* KX_MeshProxy::PyGetTextureName(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_MeshProxy::PyGetTextureName(PyObject* args, PyObject* kwds)
{
int matid= 1;
STR_String matname;
- if (PyArg_ParseTuple(args,"i",&matid))
+ if (PyArg_ParseTuple(args,"i:getTextureName",&matid))
{
matname = m_meshobj->GetTextureName(matid);
}
@@ -201,45 +188,41 @@ PyObject* KX_MeshProxy::PyGetTextureName(PyObject* self,
}
-PyObject* KX_MeshProxy::PyGetVertexArrayLength(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_MeshProxy::PyGetVertexArrayLength(PyObject* args, PyObject* kwds)
{
- int matid= -1;
- int length = -1;
+ int matid= 0;
+ int length = 0;
- if (PyArg_ParseTuple(args,"i",&matid))
+ if (!PyArg_ParseTuple(args,"i:getVertexArrayLength",&matid))
+ return NULL;
+
+
+ RAS_MeshMaterial *mmat = m_meshobj->GetMeshMaterial(matid); /* can be NULL*/
+
+ if (mmat)
{
- RAS_MeshMaterial *mmat = m_meshobj->GetMeshMaterial(matid);
RAS_IPolyMaterial* mat = mmat->m_bucket->GetPolyMaterial();
-
if (mat)
length = m_meshobj->NumVertices(mat);
}
- else {
- return NULL;
- }
-
+
return PyInt_FromLong(length);
-
}
-PyObject* KX_MeshProxy::PyGetVertex(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_MeshProxy::PyGetVertex(PyObject* args, PyObject* kwds)
{
int vertexindex= 1;
int matindex= 1;
PyObject* vertexob = NULL;
- if (PyArg_ParseTuple(args,"ii",&matindex,&vertexindex))
+ if (PyArg_ParseTuple(args,"ii:getVertex",&matindex,&vertexindex))
{
RAS_TexVert* vertex = m_meshobj->GetVertex(matindex,vertexindex);
if (vertex)
{
- vertexob = new KX_VertexProxy(this, vertex);
+ vertexob = (new KX_VertexProxy(this, vertex))->NewProxy(true);
}
}
else {
@@ -250,24 +233,28 @@ PyObject* KX_MeshProxy::PyGetVertex(PyObject* self,
}
-PyObject* KX_MeshProxy::PyGetPolygon(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_MeshProxy::PyGetPolygon(PyObject* args, PyObject* kwds)
{
int polyindex= 1;
PyObject* polyob = NULL;
- if (!PyArg_ParseTuple(args,"i",&polyindex))
+ if (!PyArg_ParseTuple(args,"i:getPolygon",&polyindex))
+ return NULL;
+
+ if (polyindex<0 || polyindex >= m_meshobj->NumPolygons())
+ {
+ PyErr_SetString(PyExc_AttributeError, "mesh.getPolygon(int): KX_MeshProxy, invalid polygon index");
return NULL;
+ }
+
RAS_Polygon* polygon = m_meshobj->GetPolygon(polyindex);
if (polygon)
{
- polyob = new KX_PolyProxy(m_meshobj, polygon);
+ polyob = (new KX_PolyProxy(m_meshobj, polygon))->NewProxy(true);
}
- else
- {
- PyErr_SetString(PyExc_AttributeError, "Invalid polygon index");
+ else {
+ PyErr_SetString(PyExc_AttributeError, "mesh.getPolygon(int): KX_MeshProxy, polygon is NULL, unknown reason");
}
return polyob;
}
@@ -278,3 +265,97 @@ KX_PYMETHODDEF_DOC(KX_MeshProxy, reinstancePhysicsMesh,
//this needs to be reviewed, it is dependend on Sumo/Solid. Who is using this ?
Py_RETURN_NONE;//(KX_ReInstanceShapeFromMesh(m_meshobj)) ? Py_RETURN_TRUE : Py_RETURN_FALSE;
}
+
+PyObject* KX_MeshProxy::pyattr_get_materials(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_MeshProxy* self= static_cast<KX_MeshProxy*>(self_v);
+
+ int tot= self->m_meshobj->NumMaterials();
+ int i;
+
+ PyObject *materials = PyList_New( tot );
+
+ list<RAS_MeshMaterial>::iterator mit= self->m_meshobj->GetFirstMaterial();
+
+
+ for(i=0; i<tot; mit++, i++) {
+ RAS_IPolyMaterial *polymat = mit->m_bucket->GetPolyMaterial();
+
+ /* Why do we need to check for RAS_BLENDERMAT if both are cast to a (PyObject*)? - Campbell */
+ if(polymat->GetFlag() & RAS_BLENDERMAT)
+ {
+ KX_BlenderMaterial *mat = static_cast<KX_BlenderMaterial*>(polymat);
+ PyList_SET_ITEM(materials, i, mat->GetProxy());
+ }
+ else {
+ KX_PolygonMaterial *mat = static_cast<KX_PolygonMaterial*>(polymat);
+ PyList_SET_ITEM(materials, i, mat->GetProxy());
+ }
+ }
+ return materials;
+}
+
+PyObject * KX_MeshProxy::pyattr_get_numMaterials(void * selfv, const KX_PYATTRIBUTE_DEF * attrdef) {
+ KX_MeshProxy * self = static_cast<KX_MeshProxy *> (selfv);
+ return PyInt_FromLong(self->m_meshobj->NumMaterials());
+}
+
+PyObject * KX_MeshProxy::pyattr_get_numPolygons(void * selfv, const KX_PYATTRIBUTE_DEF * attrdef) {
+ KX_MeshProxy * self = static_cast<KX_MeshProxy *> (selfv);
+ return PyInt_FromLong(self->m_meshobj->NumPolygons());
+}
+
+/* a close copy of ConvertPythonToGameObject but for meshes */
+bool ConvertPythonToMesh(PyObject * value, RAS_MeshObject **object, bool py_none_ok, const char *error_prefix)
+{
+ if (value==NULL) {
+ PyErr_Format(PyExc_TypeError, "%s, python pointer NULL, should never happen", error_prefix);
+ *object = NULL;
+ return false;
+ }
+
+ if (value==Py_None) {
+ *object = NULL;
+
+ if (py_none_ok) {
+ return true;
+ } else {
+ PyErr_Format(PyExc_TypeError, "%s, expected KX_MeshProxy or a KX_MeshProxy name, None is invalid", error_prefix);
+ return false;
+ }
+ }
+
+ if (PyString_Check(value)) {
+ *object = (RAS_MeshObject*)SCA_ILogicBrick::m_sCurrentLogicManager->GetMeshByName(STR_String( PyString_AsString(value) ));
+
+ if (*object) {
+ return true;
+ } else {
+ PyErr_Format(PyExc_ValueError, "%s, requested name \"%s\" did not match any KX_MeshProxy in this scene", error_prefix, PyString_AsString(value));
+ return false;
+ }
+ }
+
+ if (PyObject_TypeCheck(value, &KX_MeshProxy::Type)) {
+ KX_MeshProxy *kx_mesh = static_cast<KX_MeshProxy*>BGE_PROXY_REF(value);
+
+ /* sets the error */
+ if (*object==NULL) {
+ PyErr_Format(PyExc_RuntimeError, "%s, " BGE_PROXY_ERROR_MSG, error_prefix);
+ return false;
+ }
+
+ *object = kx_mesh->GetMesh();
+ return true;
+ }
+
+ *object = NULL;
+
+ if (py_none_ok) {
+ PyErr_Format(PyExc_TypeError, "%s, expect a KX_MeshProxy, a string or None", error_prefix);
+ } else {
+ PyErr_Format(PyExc_TypeError, "%s, expect a KX_MeshProxy or a string", error_prefix);
+ }
+
+ return false;
+}
diff --git a/source/gameengine/Ketsji/KX_MeshProxy.h b/source/gameengine/Ketsji/KX_MeshProxy.h
index 34f60a54a3a..aeecefc09e6 100644
--- a/source/gameengine/Ketsji/KX_MeshProxy.h
+++ b/source/gameengine/Ketsji/KX_MeshProxy.h
@@ -31,6 +31,9 @@
#include "SCA_IObject.h"
+/* utility conversion function */
+bool ConvertPythonToMesh(PyObject * value, class RAS_MeshObject **object, bool py_none_ok, const char *error_prefix);
+
class KX_MeshProxy : public SCA_IObject
{
Py_Header;
@@ -46,24 +49,31 @@ public:
virtual CValue* Calc(VALUE_OPERATOR op, CValue *val) ;
virtual CValue* CalcFinal(VALUE_DATA_TYPE dtype, VALUE_OPERATOR op, CValue *val);
virtual const STR_String & GetText();
- virtual float GetNumber();
+ virtual double GetNumber();
+ virtual RAS_MeshObject* GetMesh() { return m_meshobj; }
virtual STR_String GetName();
virtual void SetName(STR_String name); // Set the name of the value
virtual void ReplicaSetName(STR_String name);
virtual CValue* GetReplica();
// stuff for python integration
- virtual PyObject* _getattr(const char *attr);
- KX_PYMETHOD(KX_MeshProxy,GetNumMaterials);
+ virtual PyObject* py_getattro(PyObject *attr);
+ virtual int py_setattro(PyObject *attr, PyObject* value);
+
+ KX_PYMETHOD(KX_MeshProxy,GetNumMaterials); // Deprecated
KX_PYMETHOD(KX_MeshProxy,GetMaterialName);
KX_PYMETHOD(KX_MeshProxy,GetTextureName);
- KX_PYMETHOD_NOARGS(KX_MeshProxy,GetNumPolygons);
+ KX_PYMETHOD_NOARGS(KX_MeshProxy,GetNumPolygons); // Deprecated
// both take materialid (int)
KX_PYMETHOD(KX_MeshProxy,GetVertexArrayLength);
KX_PYMETHOD(KX_MeshProxy,GetVertex);
KX_PYMETHOD(KX_MeshProxy,GetPolygon);
KX_PYMETHOD_DOC(KX_MeshProxy, reinstancePhysicsMesh);
+
+ static PyObject* pyattr_get_materials(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject * pyattr_get_numMaterials(void * self, const KX_PYATTRIBUTE_DEF * attrdef);
+ static PyObject * pyattr_get_numPolygons(void * self, const KX_PYATTRIBUTE_DEF * attrdef);
};
#endif //__KX_MESHPROXY
diff --git a/source/gameengine/Ketsji/KX_MotionState.cpp b/source/gameengine/Ketsji/KX_MotionState.cpp
index 15f100af915..b4d58dccfdf 100644
--- a/source/gameengine/Ketsji/KX_MotionState.cpp
+++ b/source/gameengine/Ketsji/KX_MotionState.cpp
@@ -44,7 +44,7 @@ KX_MotionState::~KX_MotionState()
void KX_MotionState::getWorldPosition(float& posX,float& posY,float& posZ)
{
- MT_Point3 pos = m_node->GetWorldPosition();
+ const MT_Point3& pos = m_node->GetWorldPosition();
posX = pos[0];
posY = pos[1];
posZ = pos[2];
@@ -52,7 +52,7 @@ void KX_MotionState::getWorldPosition(float& posX,float& posY,float& posZ)
void KX_MotionState::getWorldScaling(float& scaleX,float& scaleY,float& scaleZ)
{
- MT_Vector3 scale = m_node->GetWorldScaling();
+ const MT_Vector3& scale = m_node->GetWorldScaling();
scaleX = scale[0];
scaleY = scale[1];
scaleZ = scale[2];
@@ -67,10 +67,16 @@ void KX_MotionState::getWorldOrientation(float& quatIma0,float& quatIma1,float&
quatReal = orn[3];
}
+void KX_MotionState::getWorldOrientation(float* ori)
+{
+ const MT_Matrix3x3& mat = m_node->GetWorldOrientation();
+ mat.getValue(ori);
+}
+
void KX_MotionState::setWorldPosition(float posX,float posY,float posZ)
{
m_node->SetLocalPosition(MT_Point3(posX,posY,posZ));
- m_node->SetWorldPosition(MT_Point3(posX,posY,posZ));
+ //m_node->SetWorldPosition(MT_Point3(posX,posY,posZ));
}
void KX_MotionState::setWorldOrientation(float quatIma0,float quatIma1,float quatIma2,float quatReal)
@@ -82,13 +88,15 @@ void KX_MotionState::setWorldOrientation(float quatIma0,float quatIma1,float qua
orn[3] = quatReal;
m_node->SetLocalOrientation(orn);
- m_node->SetWorldOrientation(orn);
+ //m_node->SetWorldOrientation(orn);
}
void KX_MotionState::calculateWorldTransformations()
{
- m_node->ComputeWorldTransforms(NULL);
+ //Not needed, will be done in KX_Scene::UpdateParents() after the physics simulation
+ //bool parentUpdated = false;
+ //m_node->ComputeWorldTransforms(NULL, parentUpdated);
}
diff --git a/source/gameengine/Ketsji/KX_MotionState.h b/source/gameengine/Ketsji/KX_MotionState.h
index c83af664817..7ba3ca2f85c 100644
--- a/source/gameengine/Ketsji/KX_MotionState.h
+++ b/source/gameengine/Ketsji/KX_MotionState.h
@@ -44,6 +44,7 @@ public:
virtual void getWorldOrientation(float& quatIma0,float& quatIma1,float& quatIma2,float& quatReal);
virtual void setWorldPosition(float posX,float posY,float posZ);
virtual void setWorldOrientation(float quatIma0,float quatIma1,float quatIma2,float quatReal);
+ virtual void getWorldOrientation(float* ori);
virtual void calculateWorldTransformations();
};
diff --git a/source/gameengine/Ketsji/KX_MouseFocusSensor.cpp b/source/gameengine/Ketsji/KX_MouseFocusSensor.cpp
index 384034485e7..87b5c81392d 100644
--- a/source/gameengine/Ketsji/KX_MouseFocusSensor.cpp
+++ b/source/gameengine/Ketsji/KX_MouseFocusSensor.cpp
@@ -61,14 +61,12 @@ KX_MouseFocusSensor::KX_MouseFocusSensor(SCA_MouseManager* eventmgr,
int starty,
short int mousemode,
int focusmode,
- RAS_ICanvas* canvas,
KX_Scene* kxscene,
KX_KetsjiEngine *kxengine,
SCA_IObject* gameobj,
PyTypeObject* T)
: SCA_MouseSensor(eventmgr, startx, starty, mousemode, gameobj, T),
m_focusmode(focusmode),
- m_gp_canvas(canvas),
m_kxscene(kxscene),
m_kxengine(kxengine)
{
@@ -81,6 +79,11 @@ void KX_MouseFocusSensor::Init()
m_positive_event = false;
m_hitObject = 0;
m_reset = true;
+
+ m_hitPosition.setValue(0,0,0);
+ m_prevTargetPoint.setValue(0,0,0);
+ m_prevSourcePoint.setValue(0,0,0);
+ m_hitNormal.setValue(0,0,1);
}
bool KX_MouseFocusSensor::Evaluate(CValue* event)
@@ -150,12 +153,8 @@ bool KX_MouseFocusSensor::RayHit(KX_ClientObjectInfo* client_info, KX_RayCast* r
-bool KX_MouseFocusSensor::ParentObjectHasFocus(void)
+bool KX_MouseFocusSensor::ParentObjectHasFocusCamera(KX_Camera *cam)
{
- m_hitObject = 0;
- m_hitPosition = MT_Vector3(0,0,0);
- m_hitNormal = MT_Vector3(1,0,0);
-
/* All screen handling in the gameengine is done by GL,
* specifically the model/view and projection parts. The viewport
* part is in the creator.
@@ -187,6 +186,7 @@ bool KX_MouseFocusSensor::ParentObjectHasFocus(void)
* = 1.0 - 2(y_blender - y_lb)/height
*
* */
+
/* Because we don't want to worry about resize events, camera
* changes and all that crap, we just determine this over and
@@ -195,15 +195,18 @@ bool KX_MouseFocusSensor::ParentObjectHasFocus(void)
* canvas, the test is irrelevant. The 1.0 makes sure the
* calculations don't bomb. Maybe we should explicitly guard for
* division by 0.0...*/
-
- KX_Camera* cam = m_kxscene->GetActiveCamera();
-
- /* get the scenes current viewport. we recompute it because there
- * may be multiple cameras and m_kxscene->GetSceneViewport() only
- * has the one that was last drawn */
-
+
RAS_Rect area, viewport;
m_kxengine->GetSceneViewport(m_kxscene, cam, area, viewport);
+
+ /* Check if the mouse is in the viewport */
+ if (( m_x < viewport.m_x2 && // less then right
+ m_x > viewport.m_x1 && // more then then left
+ m_y < viewport.m_y2 && // below top
+ m_y > viewport.m_y1) == 0) // above bottom
+ {
+ return false;
+ }
float height = float(viewport.m_y2 - viewport.m_y1 + 1);
float width = float(viewport.m_x2 - viewport.m_x1 + 1);
@@ -211,14 +214,13 @@ bool KX_MouseFocusSensor::ParentObjectHasFocus(void)
float x_lb = float(viewport.m_x1);
float y_lb = float(viewport.m_y1);
+ MT_Vector4 frompoint;
+ MT_Vector4 topoint;
+
/* There's some strangeness I don't fully get here... These values
- * _should_ be wrong! */
+ * _should_ be wrong! - see from point Z values */
+
-
- /* old: */
- float nearclip = 0.0;
- float farclip = 1.0;
-
/* build the from and to point in normalized device coordinates
* Looks like normailized device coordinates are [-1,1] in x [-1,1] in y
* [0,-1] in z
@@ -226,18 +228,15 @@ bool KX_MouseFocusSensor::ParentObjectHasFocus(void)
* The actual z coordinates used don't have to be exact just infront and
* behind of the near and far clip planes.
*/
- MT_Vector4 frompoint = MT_Vector4(
- (2 * (m_x-x_lb) / width) - 1.0,
- 1.0 - (2 * (m_y - y_lb) / height),
- nearclip,
- 1.0
- );
- MT_Vector4 topoint = MT_Vector4(
- (2 * (m_x-x_lb) / width) - 1.0,
- 1.0 - (2 * (m_y-y_lb) / height),
- farclip,
- 1.0
- );
+ frompoint.setValue( (2 * (m_x-x_lb) / width) - 1.0,
+ 1.0 - (2 * (m_y - y_lb) / height),
+ 0.0, /* nearclip, see above comments */
+ 1.0 );
+
+ topoint.setValue( (2 * (m_x-x_lb) / width) - 1.0,
+ 1.0 - (2 * (m_y-y_lb) / height),
+ 1.0, /* farclip, see above comments */
+ 1.0 );
/* camera to world */
MT_Transform wcs_camcs_tranform = cam->GetWorldToCamera();
@@ -260,31 +259,74 @@ bool KX_MouseFocusSensor::ParentObjectHasFocus(void)
topoint = camcs_wcs_matrix * topoint;
/* from hom wcs to 3d wcs: */
- MT_Point3 frompoint3 = MT_Point3(frompoint[0]/frompoint[3],
- frompoint[1]/frompoint[3],
- frompoint[2]/frompoint[3]);
- MT_Point3 topoint3 = MT_Point3(topoint[0]/topoint[3],
- topoint[1]/topoint[3],
- topoint[2]/topoint[3]);
- m_prevTargetPoint = topoint3;
- m_prevSourcePoint = frompoint3;
+ m_prevSourcePoint.setValue( frompoint[0]/frompoint[3],
+ frompoint[1]/frompoint[3],
+ frompoint[2]/frompoint[3]);
+
+ m_prevTargetPoint.setValue( topoint[0]/topoint[3],
+ topoint[1]/topoint[3],
+ topoint[2]/topoint[3]);
/* 2. Get the object from PhysicsEnvironment */
/* Shoot! Beware that the first argument here is an
* ignore-object. We don't ignore anything... */
-
KX_IPhysicsController* physics_controller = cam->GetPhysicsController();
PHY_IPhysicsEnvironment* physics_environment = m_kxscene->GetPhysicsEnvironment();
- bool result = false;
-
KX_RayCast::Callback<KX_MouseFocusSensor> callback(this,physics_controller);
- KX_RayCast::RayTest(physics_environment, frompoint3, topoint3, callback);
+
+ KX_RayCast::RayTest(physics_environment, m_prevSourcePoint, m_prevTargetPoint, callback);
+
+ if (m_hitObject)
+ return true;
- result = (m_hitObject!=0);
+ return false;
+}
- return result;
+bool KX_MouseFocusSensor::ParentObjectHasFocus()
+{
+ m_hitObject = 0;
+ m_hitPosition.setValue(0,0,0);
+ m_hitNormal.setValue(1,0,0);
+
+ KX_Camera *cam= m_kxscene->GetActiveCamera();
+
+ if(ParentObjectHasFocusCamera(cam))
+ return true;
+
+ list<class KX_Camera*>* cameras = m_kxscene->GetCameras();
+ list<KX_Camera*>::iterator it = cameras->begin();
+
+ while(it != cameras->end())
+ {
+ if(((*it) != cam) && (*it)->GetViewport())
+ if (ParentObjectHasFocusCamera(*it))
+ return true;
+
+ it++;
+ }
+
+ return false;
+}
+
+const MT_Point3& KX_MouseFocusSensor::RaySource() const
+{
+ return m_prevSourcePoint;
+}
+
+const MT_Point3& KX_MouseFocusSensor::RayTarget() const
+{
+ return m_prevTargetPoint;
+}
+
+const MT_Point3& KX_MouseFocusSensor::HitPosition() const
+{
+ return m_hitPosition;
+}
+const MT_Vector3& KX_MouseFocusSensor::HitNormal() const
+{
+ return m_hitNormal;
}
/* ------------------------------------------------------------------------- */
@@ -293,22 +335,22 @@ bool KX_MouseFocusSensor::ParentObjectHasFocus(void)
/* Integration hooks ------------------------------------------------------- */
PyTypeObject KX_MouseFocusSensor::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"KX_MouseFocusSensor",
- sizeof(KX_MouseFocusSensor),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0, //&MyPyCompare,
- __repr,
- 0, //&cvalue_as_number,
0,
0,
0,
- 0
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
PyParentObject KX_MouseFocusSensor::Parents[] = {
@@ -328,26 +370,33 @@ PyMethodDef KX_MouseFocusSensor::Methods[] = {
{"getHitNormal",(PyCFunction) KX_MouseFocusSensor::sPyGetHitNormal,METH_NOARGS, (PY_METHODCHAR)GetHitNormal_doc},
{"getRayDirection",(PyCFunction) KX_MouseFocusSensor::sPyGetRayDirection,METH_NOARGS, (PY_METHODCHAR)GetRayDirection_doc},
-
{NULL,NULL} //Sentinel
};
PyAttributeDef KX_MouseFocusSensor::Attributes[] = {
+ KX_PYATTRIBUTE_RO_FUNCTION("raySource", KX_MouseFocusSensor, pyattr_get_ray_source),
+ KX_PYATTRIBUTE_RO_FUNCTION("rayTarget", KX_MouseFocusSensor, pyattr_get_ray_target),
+ KX_PYATTRIBUTE_RO_FUNCTION("rayDirection", KX_MouseFocusSensor, pyattr_get_ray_direction),
+ KX_PYATTRIBUTE_RO_FUNCTION("hitObject", KX_MouseFocusSensor, pyattr_get_hit_object),
+ KX_PYATTRIBUTE_RO_FUNCTION("hitPosition", KX_MouseFocusSensor, pyattr_get_hit_position),
+ KX_PYATTRIBUTE_RO_FUNCTION("hitNormal", KX_MouseFocusSensor, pyattr_get_hit_normal),
{ NULL } //Sentinel
};
-PyObject* KX_MouseFocusSensor::_getattr(const char *attr) {
- _getattr_up(SCA_MouseSensor);
+PyObject* KX_MouseFocusSensor::py_getattro(PyObject *attr) {
+ py_getattro_up(SCA_MouseSensor);
}
const char KX_MouseFocusSensor::GetHitObject_doc[] =
"getHitObject()\n"
-"\tReturns the name of the object that was hit by this ray.\n";
-PyObject* KX_MouseFocusSensor::PyGetHitObject(PyObject* self)
+"\tReturns the object that was hit by this ray.\n";
+PyObject* KX_MouseFocusSensor::PyGetHitObject()
{
+ ShowDeprecationWarning("GetHitObject()", "the hitObject property");
+
if (m_hitObject)
- return m_hitObject->AddRef();
+ return m_hitObject->GetProxy();
Py_RETURN_NONE;
}
@@ -356,27 +405,33 @@ PyObject* KX_MouseFocusSensor::PyGetHitObject(PyObject* self)
const char KX_MouseFocusSensor::GetHitPosition_doc[] =
"getHitPosition()\n"
"\tReturns the position (in worldcoordinates) where the object was hit by this ray.\n";
-PyObject* KX_MouseFocusSensor::PyGetHitPosition(PyObject* self)
+PyObject* KX_MouseFocusSensor::PyGetHitPosition()
{
+ ShowDeprecationWarning("getHitPosition()", "the hitPosition property");
+
return PyObjectFrom(m_hitPosition);
}
const char KX_MouseFocusSensor::GetRayDirection_doc[] =
"getRayDirection()\n"
"\tReturns the direction from the ray (in worldcoordinates) .\n";
-PyObject* KX_MouseFocusSensor::PyGetRayDirection(PyObject* self)
+PyObject* KX_MouseFocusSensor::PyGetRayDirection()
{
-
+ ShowDeprecationWarning("getRayDirection()", "the rayDirection property");
+
MT_Vector3 dir = m_prevTargetPoint - m_prevSourcePoint;
- dir.normalize();
+ if(MT_fuzzyZero(dir)) dir.setValue(0,0,0);
+ else dir.normalize();
return PyObjectFrom(dir);
}
const char KX_MouseFocusSensor::GetHitNormal_doc[] =
"getHitNormal()\n"
-"\tReturns the normal (in worldcoordinates) of the object at the location where the object was hit by this ray.\n";
-PyObject* KX_MouseFocusSensor::PyGetHitNormal(PyObject* self)
+"\tReturns the normal (in worldcoordinates) at the point of collision where the object was hit by this ray.\n";
+PyObject* KX_MouseFocusSensor::PyGetHitNormal()
{
+ ShowDeprecationWarning("getHitNormal()", "the hitNormal property");
+
return PyObjectFrom(m_hitNormal);
}
@@ -386,7 +441,10 @@ const char KX_MouseFocusSensor::GetRayTarget_doc[] =
"getRayTarget()\n"
"\tReturns the target of the ray that seeks the focus object,\n"
"\tin worldcoordinates.";
-PyObject* KX_MouseFocusSensor::PyGetRayTarget(PyObject* self) {
+PyObject* KX_MouseFocusSensor::PyGetRayTarget()
+{
+ ShowDeprecationWarning("getRayTarget()", "the rayTarget property");
+
return PyObjectFrom(m_prevTargetPoint);
}
@@ -395,9 +453,58 @@ const char KX_MouseFocusSensor::GetRaySource_doc[] =
"getRaySource()\n"
"\tReturns the source of the ray that seeks the focus object,\n"
"\tin worldcoordinates.";
-PyObject* KX_MouseFocusSensor::PyGetRaySource(PyObject* self) {
+PyObject* KX_MouseFocusSensor::PyGetRaySource()
+{
+ ShowDeprecationWarning("getRaySource()", "the raySource property");
+
return PyObjectFrom(m_prevSourcePoint);
}
+/* Attributes */
+PyObject* KX_MouseFocusSensor::pyattr_get_ray_source(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_MouseFocusSensor* self= static_cast<KX_MouseFocusSensor*>(self_v);
+ return PyObjectFrom(self->RaySource());
+}
+
+PyObject* KX_MouseFocusSensor::pyattr_get_ray_target(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_MouseFocusSensor* self= static_cast<KX_MouseFocusSensor*>(self_v);
+ return PyObjectFrom(self->RayTarget());
+}
+
+PyObject* KX_MouseFocusSensor::pyattr_get_ray_direction(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_MouseFocusSensor* self= static_cast<KX_MouseFocusSensor*>(self_v);
+ MT_Vector3 dir = self->RayTarget() - self->RaySource();
+ if(MT_fuzzyZero(dir)) dir.setValue(0,0,0);
+ else dir.normalize();
+ return PyObjectFrom(dir);
+}
+
+PyObject* KX_MouseFocusSensor::pyattr_get_hit_object(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_MouseFocusSensor* self= static_cast<KX_MouseFocusSensor*>(self_v);
+
+ if(self->m_hitObject)
+ return self->m_hitObject->GetProxy();
+
+ Py_RETURN_NONE;
+}
+
+PyObject* KX_MouseFocusSensor::pyattr_get_hit_position(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_MouseFocusSensor* self= static_cast<KX_MouseFocusSensor*>(self_v);
+ return PyObjectFrom(self->HitPosition());
+}
+
+PyObject* KX_MouseFocusSensor::pyattr_get_hit_normal(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_MouseFocusSensor* self= static_cast<KX_MouseFocusSensor*>(self_v);
+ return PyObjectFrom(self->HitNormal());
+}
+
+
+
/* eof */
diff --git a/source/gameengine/Ketsji/KX_MouseFocusSensor.h b/source/gameengine/Ketsji/KX_MouseFocusSensor.h
index 4979783032c..8de1f88c5c3 100644
--- a/source/gameengine/Ketsji/KX_MouseFocusSensor.h
+++ b/source/gameengine/Ketsji/KX_MouseFocusSensor.h
@@ -54,7 +54,6 @@ class KX_MouseFocusSensor : public SCA_MouseSensor
int starty,
short int mousemode,
int focusmode,
- RAS_ICanvas* canvas,
KX_Scene* kxscene,
KX_KetsjiEngine* kxengine,
SCA_IObject* gameobj,
@@ -82,12 +81,15 @@ class KX_MouseFocusSensor : public SCA_MouseSensor
bool RayHit(KX_ClientObjectInfo* client, KX_RayCast* result, void * const data);
bool NeedRayCast(KX_ClientObjectInfo* client) { return true; }
-
+ const MT_Point3& RaySource() const;
+ const MT_Point3& RayTarget() const;
+ const MT_Point3& HitPosition() const;
+ const MT_Vector3& HitNormal() const;
/* --------------------------------------------------------------------- */
/* Python interface ---------------------------------------------------- */
/* --------------------------------------------------------------------- */
- virtual PyObject* _getattr(const char *attr);
+ virtual PyObject* py_getattro(PyObject *attr);
KX_PYMETHOD_DOC_NOARGS(KX_MouseFocusSensor,GetRayTarget);
KX_PYMETHOD_DOC_NOARGS(KX_MouseFocusSensor,GetRaySource);
@@ -97,6 +99,14 @@ class KX_MouseFocusSensor : public SCA_MouseSensor
KX_PYMETHOD_DOC_NOARGS(KX_MouseFocusSensor,GetHitNormal);
KX_PYMETHOD_DOC_NOARGS(KX_MouseFocusSensor,GetRayDirection);
+ /* attributes */
+ static PyObject* pyattr_get_ray_source(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_ray_target(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_ray_direction(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_hit_object(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_hit_position(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_hit_normal(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+
/* --------------------------------------------------------------------- */
SCA_IObject* m_hitObject;
@@ -116,9 +126,13 @@ class KX_MouseFocusSensor : public SCA_MouseSensor
*/
bool m_positive_event;
+ /**
+ * Tests whether the object is in mouse focus for this camera
+ */
+ bool ParentObjectHasFocusCamera(KX_Camera *cam);
/**
- * Tests whether the object is in mouse focus in this frame.
+ * Tests whether the object is in mouse focus in this scene.
*/
bool ParentObjectHasFocus(void);
@@ -142,12 +156,6 @@ class KX_MouseFocusSensor : public SCA_MouseSensor
* the object was hit. */
MT_Vector3 m_hitNormal;
-
- /**
- * The active canvas. The size of this canvas determines a part of
- * the start position of the picking ray. */
- RAS_ICanvas* m_gp_canvas;
-
/**
* The KX scene that holds the camera. The camera position
* determines a part of the start location of the picking ray. */
diff --git a/source/gameengine/Ketsji/KX_NearSensor.cpp b/source/gameengine/Ketsji/KX_NearSensor.cpp
index 993a6b3d86c..0489b7090e9 100644
--- a/source/gameengine/Ketsji/KX_NearSensor.cpp
+++ b/source/gameengine/Ketsji/KX_NearSensor.cpp
@@ -127,13 +127,10 @@ CValue* KX_NearSensor::GetReplica()
}
}
- //static_cast<KX_TouchEventManager*>(m_eventmgr)->RegisterSensor(this);
- //todo: make sure replication works fine
- //>m_sumoObj = new SM_Object(DT_NewSphere(0.0),NULL,NULL,NULL);
- //replica->m_sumoObj->setMargin(m_Margin);
- //replica->m_sumoObj->setClientObject(replica->m_client_info);
-
- ((KX_GameObject*)replica->GetParent())->GetSGNode()->ComputeWorldTransforms(NULL);
+ //Wrong: the parent object could be a child, this code works only if it is a root parent.
+ //Anyway, at this stage, the parent object is already synchronized, nothing to do.
+ //bool parentUpdated = false;
+ //((KX_GameObject*)replica->GetParent())->GetSGNode()->ComputeWorldTransforms(NULL, parentUpdated);
replica->SynchronizeTransform();
return replica;
@@ -154,8 +151,10 @@ void KX_NearSensor::ReParent(SCA_IObject* parent)
client_info->m_sensors.push_back(this);
SCA_ISensor::ReParent(parent);
*/
- ((KX_GameObject*)GetParent())->GetSGNode()->ComputeWorldTransforms(NULL);
- SynchronizeTransform();
+ //Not needed, was done in GetReplica() already
+ //bool parentUpdated = false;
+ //((KX_GameObject*)GetParent())->GetSGNode()->ComputeWorldTransforms(NULL,parentUpdated);
+ //SynchronizeTransform();
SCA_ISensor::ReParent(parent);
}
@@ -287,22 +286,22 @@ bool KX_NearSensor::NewHandleCollision(void* obj1,void* obj2,const PHY_CollData
/* ------------------------------------------------------------------------- */
PyTypeObject KX_NearSensor::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"KX_NearSensor",
- sizeof(KX_NearSensor),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0, //&MyPyCompare,
- __repr,
- 0, //&cvalue_as_number,
0,
0,
0,
- 0
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
@@ -330,20 +329,12 @@ PyAttributeDef KX_NearSensor::Attributes[] = {
};
-PyObject* KX_NearSensor::_getattr(const char *attr)
+PyObject* KX_NearSensor::py_getattro(PyObject *attr)
{
- PyObject* object = _getattr_self(Attributes, this, attr);
- if (object != NULL)
- return object;
-
- _getattr_up(KX_TouchSensor);
+ py_getattro_up(KX_TouchSensor);
}
-int KX_NearSensor::_setattr(const char *attr, PyObject* value)
+int KX_NearSensor::py_setattro(PyObject*attr, PyObject* value)
{
- int ret = _setattr_self(Attributes, this, attr, value);
- if (ret >= 0)
- return ret;
-
- return KX_TouchSensor::_setattr(attr, value);
+ py_setattro_up(KX_TouchSensor);
}
diff --git a/source/gameengine/Ketsji/KX_NearSensor.h b/source/gameengine/Ketsji/KX_NearSensor.h
index ee03992e734..26c5feb4e67 100644
--- a/source/gameengine/Ketsji/KX_NearSensor.h
+++ b/source/gameengine/Ketsji/KX_NearSensor.h
@@ -82,8 +82,8 @@ public:
/* --------------------------------------------------------------------- */
/* Python interface ---------------------------------------------------- */
/* --------------------------------------------------------------------- */
- virtual PyObject* _getattr(const char *attr);
- virtual int _setattr(const char *attr, PyObject* value);
+ virtual PyObject* py_getattro(PyObject *attr);
+ virtual int py_setattro(PyObject *attr, PyObject* value);
//No methods
diff --git a/source/gameengine/Ketsji/KX_ObjectActuator.cpp b/source/gameengine/Ketsji/KX_ObjectActuator.cpp
index 0666261b470..861c5757971 100644
--- a/source/gameengine/Ketsji/KX_ObjectActuator.cpp
+++ b/source/gameengine/Ketsji/KX_ObjectActuator.cpp
@@ -277,22 +277,22 @@ bool KX_ObjectActuator::isValid(KX_ObjectActuator::KX_OBJECT_ACT_VEC_TYPE type)
/* Integration hooks ------------------------------------------------------- */
PyTypeObject KX_ObjectActuator::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"KX_ObjectActuator",
- sizeof(KX_ObjectActuator),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0, //&MyPyCompare,
- __repr,
- 0, //&cvalue_as_number,
0,
0,
0,
- 0
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
PyParentObject KX_ObjectActuator::Parents[] = {
@@ -336,15 +336,15 @@ PyAttributeDef KX_ObjectActuator::Attributes[] = {
{ NULL } //Sentinel
};
-PyObject* KX_ObjectActuator::_getattr(const char *attr) {
- _getattr_up(SCA_IActuator);
+PyObject* KX_ObjectActuator::py_getattro(PyObject *attr) {
+ py_getattro_up(SCA_IActuator);
};
/* 1. set ------------------------------------------------------------------ */
/* Removed! */
/* 2. getForce */
-PyObject* KX_ObjectActuator::PyGetForce(PyObject* self)
+PyObject* KX_ObjectActuator::PyGetForce()
{
PyObject *retVal = PyList_New(4);
@@ -356,13 +356,11 @@ PyObject* KX_ObjectActuator::PyGetForce(PyObject* self)
return retVal;
}
/* 3. setForce */
-PyObject* KX_ObjectActuator::PySetForce(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_ObjectActuator::PySetForce(PyObject* args)
{
float vecArg[3];
int bToggle = 0;
- if (!PyArg_ParseTuple(args, "fffi", &vecArg[0], &vecArg[1],
+ if (!PyArg_ParseTuple(args, "fffi:setForce", &vecArg[0], &vecArg[1],
&vecArg[2], &bToggle)) {
return NULL;
}
@@ -373,7 +371,7 @@ PyObject* KX_ObjectActuator::PySetForce(PyObject* self,
}
/* 4. getTorque */
-PyObject* KX_ObjectActuator::PyGetTorque(PyObject* self)
+PyObject* KX_ObjectActuator::PyGetTorque()
{
PyObject *retVal = PyList_New(4);
@@ -385,13 +383,11 @@ PyObject* KX_ObjectActuator::PyGetTorque(PyObject* self)
return retVal;
}
/* 5. setTorque */
-PyObject* KX_ObjectActuator::PySetTorque(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_ObjectActuator::PySetTorque(PyObject* args)
{
float vecArg[3];
int bToggle = 0;
- if (!PyArg_ParseTuple(args, "fffi", &vecArg[0], &vecArg[1],
+ if (!PyArg_ParseTuple(args, "fffi:setTorque", &vecArg[0], &vecArg[1],
&vecArg[2], &bToggle)) {
return NULL;
}
@@ -402,7 +398,7 @@ PyObject* KX_ObjectActuator::PySetTorque(PyObject* self,
}
/* 6. getDLoc */
-PyObject* KX_ObjectActuator::PyGetDLoc(PyObject* self)
+PyObject* KX_ObjectActuator::PyGetDLoc()
{
PyObject *retVal = PyList_New(4);
@@ -414,13 +410,11 @@ PyObject* KX_ObjectActuator::PyGetDLoc(PyObject* self)
return retVal;
}
/* 7. setDLoc */
-PyObject* KX_ObjectActuator::PySetDLoc(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_ObjectActuator::PySetDLoc(PyObject* args)
{
float vecArg[3];
int bToggle = 0;
- if(!PyArg_ParseTuple(args, "fffi", &vecArg[0], &vecArg[1],
+ if(!PyArg_ParseTuple(args, "fffi:setDLoc", &vecArg[0], &vecArg[1],
&vecArg[2], &bToggle)) {
return NULL;
}
@@ -431,7 +425,7 @@ PyObject* KX_ObjectActuator::PySetDLoc(PyObject* self,
}
/* 8. getDRot */
-PyObject* KX_ObjectActuator::PyGetDRot(PyObject* self)
+PyObject* KX_ObjectActuator::PyGetDRot()
{
PyObject *retVal = PyList_New(4);
@@ -443,13 +437,11 @@ PyObject* KX_ObjectActuator::PyGetDRot(PyObject* self)
return retVal;
}
/* 9. setDRot */
-PyObject* KX_ObjectActuator::PySetDRot(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_ObjectActuator::PySetDRot(PyObject* args)
{
float vecArg[3];
int bToggle = 0;
- if (!PyArg_ParseTuple(args, "fffi", &vecArg[0], &vecArg[1],
+ if (!PyArg_ParseTuple(args, "fffi:setDRot", &vecArg[0], &vecArg[1],
&vecArg[2], &bToggle)) {
return NULL;
}
@@ -460,7 +452,7 @@ PyObject* KX_ObjectActuator::PySetDRot(PyObject* self,
}
/* 10. getLinearVelocity */
-PyObject* KX_ObjectActuator::PyGetLinearVelocity(PyObject* self) {
+PyObject* KX_ObjectActuator::PyGetLinearVelocity() {
PyObject *retVal = PyList_New(4);
PyList_SetItem(retVal, 0, PyFloat_FromDouble(m_linear_velocity[0]));
@@ -472,12 +464,10 @@ PyObject* KX_ObjectActuator::PyGetLinearVelocity(PyObject* self) {
}
/* 11. setLinearVelocity */
-PyObject* KX_ObjectActuator::PySetLinearVelocity(PyObject* self,
- PyObject* args,
- PyObject* kwds) {
+PyObject* KX_ObjectActuator::PySetLinearVelocity(PyObject* args) {
float vecArg[3];
int bToggle = 0;
- if (!PyArg_ParseTuple(args, "fffi", &vecArg[0], &vecArg[1],
+ if (!PyArg_ParseTuple(args, "fffi:setLinearVelocity", &vecArg[0], &vecArg[1],
&vecArg[2], &bToggle)) {
return NULL;
}
@@ -489,7 +479,7 @@ PyObject* KX_ObjectActuator::PySetLinearVelocity(PyObject* self,
/* 12. getAngularVelocity */
-PyObject* KX_ObjectActuator::PyGetAngularVelocity(PyObject* self) {
+PyObject* KX_ObjectActuator::PyGetAngularVelocity() {
PyObject *retVal = PyList_New(4);
PyList_SetItem(retVal, 0, PyFloat_FromDouble(m_angular_velocity[0]));
@@ -500,12 +490,10 @@ PyObject* KX_ObjectActuator::PyGetAngularVelocity(PyObject* self) {
return retVal;
}
/* 13. setAngularVelocity */
-PyObject* KX_ObjectActuator::PySetAngularVelocity(PyObject* self,
- PyObject* args,
- PyObject* kwds) {
+PyObject* KX_ObjectActuator::PySetAngularVelocity(PyObject* args) {
float vecArg[3];
int bToggle = 0;
- if (!PyArg_ParseTuple(args, "fffi", &vecArg[0], &vecArg[1],
+ if (!PyArg_ParseTuple(args, "fffi:setAngularVelocity", &vecArg[0], &vecArg[1],
&vecArg[2], &bToggle)) {
return NULL;
}
@@ -516,11 +504,9 @@ PyObject* KX_ObjectActuator::PySetAngularVelocity(PyObject* self,
}
/* 13. setDamping */
-PyObject* KX_ObjectActuator::PySetDamping(PyObject* self,
- PyObject* args,
- PyObject* kwds) {
+PyObject* KX_ObjectActuator::PySetDamping(PyObject* args) {
int damping = 0;
- if (!PyArg_ParseTuple(args, "i", &damping) || damping < 0 || damping > 1000) {
+ if (!PyArg_ParseTuple(args, "i:setDamping", &damping) || damping < 0 || damping > 1000) {
return NULL;
}
m_damping = damping;
@@ -528,11 +514,11 @@ PyObject* KX_ObjectActuator::PySetDamping(PyObject* self,
}
/* 13. getVelocityDamping */
-PyObject* KX_ObjectActuator::PyGetDamping(PyObject* self) {
+PyObject* KX_ObjectActuator::PyGetDamping() {
return Py_BuildValue("i",m_damping);
}
/* 6. getForceLimitX */
-PyObject* KX_ObjectActuator::PyGetForceLimitX(PyObject* self)
+PyObject* KX_ObjectActuator::PyGetForceLimitX()
{
PyObject *retVal = PyList_New(3);
@@ -543,13 +529,11 @@ PyObject* KX_ObjectActuator::PyGetForceLimitX(PyObject* self)
return retVal;
}
/* 7. setForceLimitX */
-PyObject* KX_ObjectActuator::PySetForceLimitX(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_ObjectActuator::PySetForceLimitX(PyObject* args)
{
float vecArg[2];
int bToggle = 0;
- if(!PyArg_ParseTuple(args, "ffi", &vecArg[0], &vecArg[1], &bToggle)) {
+ if(!PyArg_ParseTuple(args, "ffi:setForceLimitX", &vecArg[0], &vecArg[1], &bToggle)) {
return NULL;
}
m_drot[0] = vecArg[0];
@@ -559,7 +543,7 @@ PyObject* KX_ObjectActuator::PySetForceLimitX(PyObject* self,
}
/* 6. getForceLimitY */
-PyObject* KX_ObjectActuator::PyGetForceLimitY(PyObject* self)
+PyObject* KX_ObjectActuator::PyGetForceLimitY()
{
PyObject *retVal = PyList_New(3);
@@ -570,13 +554,11 @@ PyObject* KX_ObjectActuator::PyGetForceLimitY(PyObject* self)
return retVal;
}
/* 7. setForceLimitY */
-PyObject* KX_ObjectActuator::PySetForceLimitY(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_ObjectActuator::PySetForceLimitY(PyObject* args)
{
float vecArg[2];
int bToggle = 0;
- if(!PyArg_ParseTuple(args, "ffi", &vecArg[0], &vecArg[1], &bToggle)) {
+ if(!PyArg_ParseTuple(args, "ffi:setForceLimitY", &vecArg[0], &vecArg[1], &bToggle)) {
return NULL;
}
m_drot[1] = vecArg[0];
@@ -586,7 +568,7 @@ PyObject* KX_ObjectActuator::PySetForceLimitY(PyObject* self,
}
/* 6. getForceLimitZ */
-PyObject* KX_ObjectActuator::PyGetForceLimitZ(PyObject* self)
+PyObject* KX_ObjectActuator::PyGetForceLimitZ()
{
PyObject *retVal = PyList_New(3);
@@ -597,13 +579,11 @@ PyObject* KX_ObjectActuator::PyGetForceLimitZ(PyObject* self)
return retVal;
}
/* 7. setForceLimitZ */
-PyObject* KX_ObjectActuator::PySetForceLimitZ(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_ObjectActuator::PySetForceLimitZ(PyObject* args)
{
float vecArg[2];
int bToggle = 0;
- if(!PyArg_ParseTuple(args, "ffi", &vecArg[0], &vecArg[1], &bToggle)) {
+ if(!PyArg_ParseTuple(args, "ffi:setForceLimitZ", &vecArg[0], &vecArg[1], &bToggle)) {
return NULL;
}
m_drot[2] = vecArg[0];
@@ -613,7 +593,7 @@ PyObject* KX_ObjectActuator::PySetForceLimitZ(PyObject* self,
}
/* 4. getPID */
-PyObject* KX_ObjectActuator::PyGetPID(PyObject* self)
+PyObject* KX_ObjectActuator::PyGetPID()
{
PyObject *retVal = PyList_New(3);
@@ -624,12 +604,10 @@ PyObject* KX_ObjectActuator::PyGetPID(PyObject* self)
return retVal;
}
/* 5. setPID */
-PyObject* KX_ObjectActuator::PySetPID(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_ObjectActuator::PySetPID(PyObject* args)
{
float vecArg[3];
- if (!PyArg_ParseTuple(args, "fff", &vecArg[0], &vecArg[1], &vecArg[2])) {
+ if (!PyArg_ParseTuple(args, "fff:setPID", &vecArg[0], &vecArg[1], &vecArg[2])) {
return NULL;
}
m_torque.setValue(vecArg);
diff --git a/source/gameengine/Ketsji/KX_ObjectActuator.h b/source/gameengine/Ketsji/KX_ObjectActuator.h
index 0331c67617c..a812942a0ae 100644
--- a/source/gameengine/Ketsji/KX_ObjectActuator.h
+++ b/source/gameengine/Ketsji/KX_ObjectActuator.h
@@ -153,30 +153,30 @@ public:
/* Python interface ---------------------------------------------------- */
/* --------------------------------------------------------------------- */
- virtual PyObject* _getattr(const char *attr);
+ virtual PyObject* py_getattro(PyObject *attr);
KX_PYMETHOD_NOARGS(KX_ObjectActuator,GetForce);
- KX_PYMETHOD(KX_ObjectActuator,SetForce);
+ KX_PYMETHOD_VARARGS(KX_ObjectActuator,SetForce);
KX_PYMETHOD_NOARGS(KX_ObjectActuator,GetTorque);
- KX_PYMETHOD(KX_ObjectActuator,SetTorque);
+ KX_PYMETHOD_VARARGS(KX_ObjectActuator,SetTorque);
KX_PYMETHOD_NOARGS(KX_ObjectActuator,GetDLoc);
- KX_PYMETHOD(KX_ObjectActuator,SetDLoc);
+ KX_PYMETHOD_VARARGS(KX_ObjectActuator,SetDLoc);
KX_PYMETHOD_NOARGS(KX_ObjectActuator,GetDRot);
- KX_PYMETHOD(KX_ObjectActuator,SetDRot);
+ KX_PYMETHOD_VARARGS(KX_ObjectActuator,SetDRot);
KX_PYMETHOD_NOARGS(KX_ObjectActuator,GetLinearVelocity);
- KX_PYMETHOD(KX_ObjectActuator,SetLinearVelocity);
+ KX_PYMETHOD_VARARGS(KX_ObjectActuator,SetLinearVelocity);
KX_PYMETHOD_NOARGS(KX_ObjectActuator,GetAngularVelocity);
- KX_PYMETHOD(KX_ObjectActuator,SetAngularVelocity);
- KX_PYMETHOD(KX_ObjectActuator,SetDamping);
+ KX_PYMETHOD_VARARGS(KX_ObjectActuator,SetAngularVelocity);
+ KX_PYMETHOD_VARARGS(KX_ObjectActuator,SetDamping);
KX_PYMETHOD_NOARGS(KX_ObjectActuator,GetDamping);
KX_PYMETHOD_NOARGS(KX_ObjectActuator,GetForceLimitX);
- KX_PYMETHOD(KX_ObjectActuator,SetForceLimitX);
+ KX_PYMETHOD_VARARGS(KX_ObjectActuator,SetForceLimitX);
KX_PYMETHOD_NOARGS(KX_ObjectActuator,GetForceLimitY);
- KX_PYMETHOD(KX_ObjectActuator,SetForceLimitY);
+ KX_PYMETHOD_VARARGS(KX_ObjectActuator,SetForceLimitY);
KX_PYMETHOD_NOARGS(KX_ObjectActuator,GetForceLimitZ);
- KX_PYMETHOD(KX_ObjectActuator,SetForceLimitZ);
+ KX_PYMETHOD_VARARGS(KX_ObjectActuator,SetForceLimitZ);
KX_PYMETHOD_NOARGS(KX_ObjectActuator,GetPID);
- KX_PYMETHOD(KX_ObjectActuator,SetPID);
+ KX_PYMETHOD_VARARGS(KX_ObjectActuator,SetPID);
};
#endif //__KX_OBJECTACTUATOR
diff --git a/source/gameengine/Ketsji/KX_OdePhysicsController.h b/source/gameengine/Ketsji/KX_OdePhysicsController.h
index e3b5336c0b5..21b7e632d83 100644
--- a/source/gameengine/Ketsji/KX_OdePhysicsController.h
+++ b/source/gameengine/Ketsji/KX_OdePhysicsController.h
@@ -82,6 +82,10 @@ public:
virtual SG_Controller* GetReplica(class SG_Node* destnode);
+ virtual float GetLinVelocityMin() { return ODEPhysicsController::GetLinVelocityMin(); }
+ virtual void SetLinVelocityMin(float val) { ODEPhysicsController::SetLinVelocityMin(val); }
+ virtual float GetLinVelocityMax() { return ODEPhysicsController::GetLinVelocityMax(); }
+ virtual void SetLinVelocityMax(float val) { ODEPhysicsController::SetLinVelocityMax(val); }
virtual void SetSumoTransform(bool nondynaonly);
// todo: remove next line !
diff --git a/source/gameengine/Ketsji/KX_ParentActuator.cpp b/source/gameengine/Ketsji/KX_ParentActuator.cpp
index 84d7ccb9c05..0093cf5f313 100644
--- a/source/gameengine/Ketsji/KX_ParentActuator.cpp
+++ b/source/gameengine/Ketsji/KX_ParentActuator.cpp
@@ -1,7 +1,7 @@
/**
* Set or remove an objects parent
*
- * $Id: SCA_ParentActuator.cpp 13932 2008-03-01 19:05:41Z ben2610 $
+ * $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
*
@@ -139,22 +139,22 @@ bool KX_ParentActuator::Update()
/* Integration hooks ------------------------------------------------------- */
PyTypeObject KX_ParentActuator::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"KX_ParentActuator",
- sizeof(KX_ParentActuator),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0, //&MyPyCompare,
- __repr,
- 0, //&cvalue_as_number,
0,
0,
0,
- 0
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
PyParentObject KX_ParentActuator::Parents[] = {
@@ -166,59 +166,67 @@ PyParentObject KX_ParentActuator::Parents[] = {
};
PyMethodDef KX_ParentActuator::Methods[] = {
- // ---> deprecated (all)
- {"setObject", (PyCFunction) KX_ParentActuator::sPySetObject, METH_O, (PY_METHODCHAR)SetObject_doc},
- {"getObject", (PyCFunction) KX_ParentActuator::sPyGetObject, METH_VARARGS, (PY_METHODCHAR)GetObject_doc},
+ // Deprecated ----->
+ {"setObject", (PyCFunction) KX_ParentActuator::sPySetObject, METH_O, (PY_METHODCHAR)SetObject_doc},
+ {"getObject", (PyCFunction) KX_ParentActuator::sPyGetObject, METH_VARARGS, (PY_METHODCHAR)GetObject_doc},
+ // <-----
{NULL,NULL} //Sentinel
};
PyAttributeDef KX_ParentActuator::Attributes[] = {
+ KX_PYATTRIBUTE_RW_FUNCTION("object", KX_ParentActuator, pyattr_get_object, pyattr_set_object),
{ NULL } //Sentinel
};
-PyObject* KX_ParentActuator::_getattr(const char *attr) {
-
- if (!strcmp(attr, "object")) {
- if (!m_ob) Py_RETURN_NONE;
- else return m_ob->AddRef();
- }
-
- _getattr_up(SCA_IActuator);
+PyObject* KX_ParentActuator::pyattr_get_object(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_ParentActuator* actuator = static_cast<KX_ParentActuator*>(self);
+ if (!actuator->m_ob)
+ Py_RETURN_NONE;
+ else
+ return actuator->m_ob->GetProxy();
}
-int KX_ParentActuator::_setattr(const char *attr, PyObject* value) {
-
- if (!strcmp(attr, "object")) {
- KX_GameObject *gameobj;
+int KX_ParentActuator::pyattr_set_object(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_ParentActuator* actuator = static_cast<KX_ParentActuator*>(self);
+ KX_GameObject *gameobj;
- if (!ConvertPythonToGameObject(value, &gameobj, true))
- return 1; // ConvertPythonToGameObject sets the error
+ if (!ConvertPythonToGameObject(value, &gameobj, true, "actuator.object = value: KX_ParentActuator"))
+ return 1; // ConvertPythonToGameObject sets the error
- if (m_ob != NULL)
- m_ob->UnregisterActuator(this);
+ if (actuator->m_ob != NULL)
+ actuator->m_ob->UnregisterActuator(actuator);
- m_ob = (SCA_IObject*)gameobj;
+ actuator->m_ob = (SCA_IObject*) gameobj;
- if (m_ob)
- m_ob->RegisterActuator(this);
+ if (actuator->m_ob)
+ actuator->m_ob->RegisterActuator(actuator);
- return 0;
- }
-
- return SCA_IActuator::_setattr(attr, value);
+ return 0;
+}
+
+
+PyObject* KX_ParentActuator::py_getattro(PyObject *attr) {
+ py_getattro_up(SCA_IActuator);
+}
+
+int KX_ParentActuator::py_setattro(PyObject *attr, PyObject* value) {
+ py_setattro_up(SCA_IActuator);
}
+/* Deprecated -----> */
/* 1. setObject */
const char KX_ParentActuator::SetObject_doc[] =
"setObject(object)\n"
"\t- object: KX_GameObject, string or None\n"
"\tSet the object to set as parent.\n";
-PyObject* KX_ParentActuator::PySetObject(PyObject* self, PyObject* value) {
+PyObject* KX_ParentActuator::PySetObject(PyObject* value) {
KX_GameObject *gameobj;
ShowDeprecationWarning("setObject()", "the object property");
- if (!ConvertPythonToGameObject(value, &gameobj, true))
+ if (!ConvertPythonToGameObject(value, &gameobj, true, "actuator.setObject(value): KX_ParentActuator"))
return NULL; // ConvertPythonToGameObject sets the error
if (m_ob != NULL)
@@ -238,13 +246,13 @@ const char KX_ParentActuator::GetObject_doc[] =
"getObject(name_only = 1)\n"
"name_only - optional arg, when true will return the KX_GameObject rather then its name\n"
"\tReturns the object that is set to.\n";
-PyObject* KX_ParentActuator::PyGetObject(PyObject* self, PyObject* args)
+PyObject* KX_ParentActuator::PyGetObject(PyObject* args)
{
int ret_name_only = 1;
ShowDeprecationWarning("getObject()", "the object property");
- if (!PyArg_ParseTuple(args, "|i", &ret_name_only))
+ if (!PyArg_ParseTuple(args, "|i:getObject", &ret_name_only))
return NULL;
if (!m_ob)
@@ -253,7 +261,8 @@ PyObject* KX_ParentActuator::PyGetObject(PyObject* self, PyObject* args)
if (ret_name_only)
return PyString_FromString(m_ob->GetName());
else
- return m_ob->AddRef();
+ return m_ob->GetProxy();
}
+/* <----- */
/* eof */
diff --git a/source/gameengine/Ketsji/KX_ParentActuator.h b/source/gameengine/Ketsji/KX_ParentActuator.h
index c974001c0d0..f9f0b73b876 100644
--- a/source/gameengine/Ketsji/KX_ParentActuator.h
+++ b/source/gameengine/Ketsji/KX_ParentActuator.h
@@ -2,7 +2,7 @@
* Set or remove an objects parent
*
*
- * $Id: KX_ParentActuator.h 3271 2004-10-16 11:41:50Z kester $
+ * $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
*
@@ -76,13 +76,17 @@ class KX_ParentActuator : public SCA_IActuator
/* Python interface ---------------------------------------------------- */
/* --------------------------------------------------------------------- */
- virtual PyObject* _getattr(const char *attr);
- virtual int _setattr(const char *attr, PyObject* value);
+ virtual PyObject* py_getattro(PyObject *attr);
+ virtual int py_setattro(PyObject *attr, PyObject* value);
- /* 1. setObject */
+ /* These are used to get and set m_ob */
+ static PyObject* pyattr_get_object(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
+ static int pyattr_set_object(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+
+ // Deprecated ----->
KX_PYMETHOD_DOC_O(KX_ParentActuator,SetObject);
- /* 2. getObject */
KX_PYMETHOD_DOC_VARARGS(KX_ParentActuator,GetObject);
+ // <-----
}; /* end of class KX_ParentActuator : public SCA_PropertyActuator */
diff --git a/source/gameengine/Ketsji/KX_PhysicsObjectWrapper.cpp b/source/gameengine/Ketsji/KX_PhysicsObjectWrapper.cpp
index 246c63feb21..fda639c09e0 100644
--- a/source/gameengine/Ketsji/KX_PhysicsObjectWrapper.cpp
+++ b/source/gameengine/Ketsji/KX_PhysicsObjectWrapper.cpp
@@ -51,12 +51,10 @@ KX_PhysicsObjectWrapper::~KX_PhysicsObjectWrapper()
}
-PyObject* KX_PhysicsObjectWrapper::PySetPosition(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_PhysicsObjectWrapper::PySetPosition(PyObject* args)
{
float x,y,z;
- if (PyArg_ParseTuple(args,"fff",&x,&y,&z))
+ if (PyArg_ParseTuple(args,"fff:setPosition",&x,&y,&z))
{
m_ctrl->setPosition(x,y,z);
}
@@ -67,13 +65,11 @@ PyObject* KX_PhysicsObjectWrapper::PySetPosition(PyObject* self,
}
-PyObject* KX_PhysicsObjectWrapper::PySetLinearVelocity(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_PhysicsObjectWrapper::PySetLinearVelocity(PyObject* args)
{
float x,y,z;
int local;
- if (PyArg_ParseTuple(args,"fffi",&x,&y,&z,&local))
+ if (PyArg_ParseTuple(args,"fffi:setLinearVelocity",&x,&y,&z,&local))
{
m_ctrl->SetLinearVelocity(x,y,z,local != 0);
}
@@ -83,13 +79,11 @@ PyObject* KX_PhysicsObjectWrapper::PySetLinearVelocity(PyObject* self,
Py_RETURN_NONE;
}
-PyObject* KX_PhysicsObjectWrapper::PySetAngularVelocity(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_PhysicsObjectWrapper::PySetAngularVelocity(PyObject* args)
{
float x,y,z;
int local;
- if (PyArg_ParseTuple(args,"fffi",&x,&y,&z,&local))
+ if (PyArg_ParseTuple(args,"fffi:setAngularVelocity",&x,&y,&z,&local))
{
m_ctrl->SetAngularVelocity(x,y,z,local != 0);
}
@@ -99,12 +93,10 @@ PyObject* KX_PhysicsObjectWrapper::PySetAngularVelocity(PyObject* self,
Py_RETURN_NONE;
}
-PyObject* KX_PhysicsObjectWrapper::PySetActive(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_PhysicsObjectWrapper::PySetActive(PyObject* args)
{
int active;
- if (PyArg_ParseTuple(args,"i",&active))
+ if (PyArg_ParseTuple(args,"i:setActive",&active))
{
m_ctrl->SetActive(active!=0);
}
@@ -115,26 +107,28 @@ PyObject* KX_PhysicsObjectWrapper::PySetActive(PyObject* self,
}
-
+PyAttributeDef KX_PhysicsObjectWrapper::Attributes[] = {
+ { NULL } //Sentinel
+};
//python specific stuff
PyTypeObject KX_PhysicsObjectWrapper::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"KX_PhysicsObjectWrapper",
- sizeof(KX_PhysicsObjectWrapper),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0, //&MyPyCompare,
- __repr,
- 0, //&cvalue_as_number,
0,
0,
0,
- 0
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
PyParentObject KX_PhysicsObjectWrapper::Parents[] = {
@@ -142,13 +136,13 @@ PyParentObject KX_PhysicsObjectWrapper::Parents[] = {
NULL
};
-PyObject* KX_PhysicsObjectWrapper::_getattr(const char *attr)
+PyObject* KX_PhysicsObjectWrapper::py_getattro(PyObject *attr)
{
- _getattr_up(PyObjectPlus);
+ py_getattro_up(PyObjectPlus);
}
-int KX_PhysicsObjectWrapper::_setattr(const char *attr,PyObject *pyobj)
+int KX_PhysicsObjectWrapper::py_setattro(PyObject *attr,PyObject *pyobj)
{
int result = 1;
@@ -161,7 +155,7 @@ int KX_PhysicsObjectWrapper::_setattr(const char *attr,PyObject *pyobj)
result = 0;
}
if (result)
- result = PyObjectPlus::_setattr(attr,pyobj);
+ result = PyObjectPlus::py_setattro(attr,pyobj);
return result;
};
diff --git a/source/gameengine/Ketsji/KX_PhysicsObjectWrapper.h b/source/gameengine/Ketsji/KX_PhysicsObjectWrapper.h
index 95560698896..7e10dc3ccf4 100644
--- a/source/gameengine/Ketsji/KX_PhysicsObjectWrapper.h
+++ b/source/gameengine/Ketsji/KX_PhysicsObjectWrapper.h
@@ -36,16 +36,16 @@ class KX_PhysicsObjectWrapper : public PyObjectPlus
{
Py_Header;
- virtual PyObject* _getattr(const char *attr);
- virtual int _setattr(const char *attr, PyObject *value);
+ virtual PyObject* py_getattro(PyObject *attr);
+ virtual int py_setattro(PyObject *attr, PyObject *value);
public:
KX_PhysicsObjectWrapper(class PHY_IPhysicsController* ctrl,class PHY_IPhysicsEnvironment* physenv,PyTypeObject *T = &Type);
virtual ~KX_PhysicsObjectWrapper();
- KX_PYMETHOD(KX_PhysicsObjectWrapper , SetPosition);
- KX_PYMETHOD(KX_PhysicsObjectWrapper,SetLinearVelocity);
- KX_PYMETHOD(KX_PhysicsObjectWrapper,SetAngularVelocity);
- KX_PYMETHOD(KX_PhysicsObjectWrapper,SetActive);
+ KX_PYMETHOD_VARARGS(KX_PhysicsObjectWrapper,SetPosition);
+ KX_PYMETHOD_VARARGS(KX_PhysicsObjectWrapper,SetLinearVelocity);
+ KX_PYMETHOD_VARARGS(KX_PhysicsObjectWrapper,SetAngularVelocity);
+ KX_PYMETHOD_VARARGS(KX_PhysicsObjectWrapper,SetActive);
private:
class PHY_IPhysicsController* m_ctrl;
diff --git a/source/gameengine/Ketsji/KX_PolyProxy.cpp b/source/gameengine/Ketsji/KX_PolyProxy.cpp
index b4bdd77fb66..2e5dd72db0e 100644
--- a/source/gameengine/Ketsji/KX_PolyProxy.cpp
+++ b/source/gameengine/Ketsji/KX_PolyProxy.cpp
@@ -39,22 +39,22 @@
#include "KX_PyMath.h"
PyTypeObject KX_PolyProxy::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"KX_PolyProxy",
- sizeof(KX_PolyProxy),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0, //&MyPyCompare,
- __repr,
- 0, //&cvalue_as_number,
0,
0,
0,
- 0
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
PyParentObject KX_PolyProxy::Parents[] = {
@@ -78,42 +78,52 @@ PyMethodDef KX_PolyProxy::Methods[] = {
};
PyAttributeDef KX_PolyProxy::Attributes[] = {
+ /* All dummy's so they come up in a dir() */
+ KX_PYATTRIBUTE_DUMMY("matname"),
+ KX_PYATTRIBUTE_DUMMY("texture"),
+ KX_PYATTRIBUTE_DUMMY("material"),
+ KX_PYATTRIBUTE_DUMMY("matid"),
+ KX_PYATTRIBUTE_DUMMY("v1"),
+ KX_PYATTRIBUTE_DUMMY("v2"),
+ KX_PYATTRIBUTE_DUMMY("v3"),
+ KX_PYATTRIBUTE_DUMMY("v4"),
+ KX_PYATTRIBUTE_DUMMY("visible"),
+ KX_PYATTRIBUTE_DUMMY("collide"),
{ NULL } //Sentinel
};
-PyObject* KX_PolyProxy::_getattr(const char *attr)
+PyObject* KX_PolyProxy::py_getattro(PyObject *attr)
{
- if (!strcmp(attr, "matname"))
+ char *attr_str= PyString_AsString(attr);
+ if (!strcmp(attr_str, "matname"))
{
return PyString_FromString(m_polygon->GetMaterial()->GetPolyMaterial()->GetMaterialName());
}
- if (!strcmp(attr, "texture"))
+ if (!strcmp(attr_str, "texture"))
{
return PyString_FromString(m_polygon->GetMaterial()->GetPolyMaterial()->GetTextureName());
}
- if (!strcmp(attr, "material"))
+ if (!strcmp(attr_str, "material"))
{
RAS_IPolyMaterial *polymat = m_polygon->GetMaterial()->GetPolyMaterial();
if(polymat->GetFlag() & RAS_BLENDERMAT)
{
KX_BlenderMaterial* mat = static_cast<KX_BlenderMaterial*>(polymat);
- Py_INCREF(mat);
- return mat;
+ return mat->GetProxy();
}
else
{
KX_PolygonMaterial* mat = static_cast<KX_PolygonMaterial*>(polymat);
- Py_INCREF(mat);
- return mat;
+ return mat->GetProxy();
}
}
- if (!strcmp(attr, "matid"))
+ if (!strcmp(attr_str, "matid"))
{
// we'll have to scan through the material bucket of the mes and compare with
// the one of the polygon
RAS_MaterialBucket* polyBucket = m_polygon->GetMaterial();
unsigned int matid;
- for (matid=0; matid<m_mesh->NumMaterials(); matid++)
+ for (matid=0; matid<(unsigned int)m_mesh->NumMaterials(); matid++)
{
RAS_MeshMaterial* meshMat = m_mesh->GetMeshMaterial(matid);
if (meshMat->m_bucket == polyBucket)
@@ -122,31 +132,31 @@ PyObject* KX_PolyProxy::_getattr(const char *attr)
}
return PyInt_FromLong(matid);
}
- if (!strcmp(attr, "v1"))
+ if (!strcmp(attr_str, "v1"))
{
return PyInt_FromLong(m_polygon->GetVertexOffset(0));
}
- if (!strcmp(attr, "v2"))
+ if (!strcmp(attr_str, "v2"))
{
return PyInt_FromLong(m_polygon->GetVertexOffset(1));
}
- if (!strcmp(attr, "v3"))
+ if (!strcmp(attr_str, "v3"))
{
return PyInt_FromLong(m_polygon->GetVertexOffset(2));
}
- if (!strcmp(attr, "v4"))
+ if (!strcmp(attr_str, "v4"))
{
return PyInt_FromLong(((m_polygon->VertexCount()>3)?m_polygon->GetVertexOffset(3):0));
}
- if (!strcmp(attr, "visible"))
+ if (!strcmp(attr_str, "visible"))
{
return PyInt_FromLong(m_polygon->IsVisible());
}
- if (!strcmp(attr, "collide"))
+ if (!strcmp(attr_str, "collide"))
{
return PyInt_FromLong(m_polygon->IsCollider());
}
- _getattr_up(SCA_IObject);
+ py_getattro_up(SCA_IObject);
}
KX_PolyProxy::KX_PolyProxy(const RAS_MeshObject*mesh, RAS_Polygon* polygon)
@@ -165,7 +175,7 @@ CValue* KX_PolyProxy::Calc(VALUE_OPERATOR, CValue *) { return NULL;}
CValue* KX_PolyProxy::CalcFinal(VALUE_DATA_TYPE, VALUE_OPERATOR, CValue *) { return NULL;}
STR_String sPolyName="polygone";
const STR_String & KX_PolyProxy::GetText() {return sPolyName;};
-float KX_PolyProxy::GetNumber() { return -1;}
+double KX_PolyProxy::GetNumber() { return -1;}
STR_String KX_PolyProxy::GetName() { return sPolyName;}
void KX_PolyProxy::SetName(STR_String) { };
CValue* KX_PolyProxy::GetReplica() { return NULL;}
@@ -179,7 +189,7 @@ KX_PYMETHODDEF_DOC_NOARGS(KX_PolyProxy, getMaterialIndex,
{
RAS_MaterialBucket* polyBucket = m_polygon->GetMaterial();
unsigned int matid;
- for (matid=0; matid<m_mesh->NumMaterials(); matid++)
+ for (matid=0; matid<(unsigned int)m_mesh->NumMaterials(); matid++)
{
RAS_MeshMaterial* meshMat = m_mesh->GetMeshMaterial(matid);
if (meshMat->m_bucket == polyBucket)
@@ -226,13 +236,13 @@ KX_PYMETHODDEF_DOC(KX_PolyProxy, getVertexIndex,
"Note: getVertexIndex(3) on a triangle polygon returns 0\n")
{
int index;
- if (!PyArg_ParseTuple(args,"i",&index))
+ if (!PyArg_ParseTuple(args,"i:getVertexIndex",&index))
{
return NULL;
}
if (index < 0 || index > 3)
{
- PyErr_SetString(PyExc_AttributeError, "Valid range for index is 0-3");
+ PyErr_SetString(PyExc_AttributeError, "poly.getVertexIndex(int): KX_PolyProxy, expected an index between 0-3");
return NULL;
}
if (index < m_polygon->VertexCount())
@@ -246,7 +256,7 @@ KX_PYMETHODDEF_DOC_NOARGS(KX_PolyProxy, getMesh,
"getMesh() : returns a mesh proxy\n")
{
KX_MeshProxy* meshproxy = new KX_MeshProxy((RAS_MeshObject*)m_mesh);
- return meshproxy;
+ return meshproxy->NewProxy(true);
}
KX_PYMETHODDEF_DOC_NOARGS(KX_PolyProxy, getMaterial,
@@ -256,13 +266,11 @@ KX_PYMETHODDEF_DOC_NOARGS(KX_PolyProxy, getMaterial,
if(polymat->GetFlag() & RAS_BLENDERMAT)
{
KX_BlenderMaterial* mat = static_cast<KX_BlenderMaterial*>(polymat);
- Py_INCREF(mat);
- return mat;
+ return mat->GetProxy();
}
else
{
KX_PolygonMaterial* mat = static_cast<KX_PolygonMaterial*>(polymat);
- Py_INCREF(mat);
- return mat;
+ return mat->GetProxy();
}
}
diff --git a/source/gameengine/Ketsji/KX_PolyProxy.h b/source/gameengine/Ketsji/KX_PolyProxy.h
index 9b548f9490d..275e65da810 100644
--- a/source/gameengine/Ketsji/KX_PolyProxy.h
+++ b/source/gameengine/Ketsji/KX_PolyProxy.h
@@ -45,7 +45,7 @@ public:
CValue* Calc(VALUE_OPERATOR op, CValue *val) ;
CValue* CalcFinal(VALUE_DATA_TYPE dtype, VALUE_OPERATOR op, CValue *val);
const STR_String & GetText();
- float GetNumber();
+ double GetNumber();
STR_String GetName();
void SetName(STR_String name); // Set the name of the value
void ReplicaSetName(STR_String name);
@@ -53,7 +53,7 @@ public:
// stuff for python integration
- virtual PyObject* _getattr(const char *attr);
+ virtual PyObject* py_getattro(PyObject *attr);
KX_PYMETHOD_DOC_NOARGS(KX_PolyProxy,getMaterialIndex)
KX_PYMETHOD_DOC_NOARGS(KX_PolyProxy,getNumVertex)
diff --git a/source/gameengine/Ketsji/KX_PolygonMaterial.cpp b/source/gameengine/Ketsji/KX_PolygonMaterial.cpp
index bbaf697b168..46d04486cc6 100644
--- a/source/gameengine/Ketsji/KX_PolygonMaterial.cpp
+++ b/source/gameengine/Ketsji/KX_PolygonMaterial.cpp
@@ -98,8 +98,7 @@ bool KX_PolygonMaterial::Activate(RAS_IRasterizer* rasty, TCachingInfo& cachingI
{
PyObject *pyRasty = PyCObject_FromVoidPtr((void*)rasty, NULL); /* new reference */
PyObject *pyCachingInfo = PyCObject_FromVoidPtr((void*) &cachingInfo, NULL); /* new reference */
-
- PyObject *ret = PyObject_CallMethod(m_pymaterial, "activate", "(NNO)", pyRasty, pyCachingInfo, (PyObject*) this);
+ PyObject *ret = PyObject_CallMethod(m_pymaterial, "activate", "(NNO)", pyRasty, pyCachingInfo, (PyObject*) this->m_proxy);
if (ret)
{
bool value = PyInt_AsLong(ret);
@@ -109,6 +108,8 @@ bool KX_PolygonMaterial::Activate(RAS_IRasterizer* rasty, TCachingInfo& cachingI
else
{
PyErr_Print();
+ PyErr_Clear();
+ PySys_SetObject( (char *)"last_traceback", NULL);
}
}
else
@@ -181,181 +182,70 @@ PyMethodDef KX_PolygonMaterial::Methods[] = {
};
PyAttributeDef KX_PolygonMaterial::Attributes[] = {
+ KX_PYATTRIBUTE_RO_FUNCTION("texture", KX_PolygonMaterial, pyattr_get_texture),
+ KX_PYATTRIBUTE_RO_FUNCTION("material", KX_PolygonMaterial, pyattr_get_material), /* should probably be .name ? */
+
+ KX_PYATTRIBUTE_INT_RW("tile", INT_MIN, INT_MAX, true, KX_PolygonMaterial, m_tile),
+ KX_PYATTRIBUTE_INT_RW("tilexrep", INT_MIN, INT_MAX, true, KX_PolygonMaterial, m_tilexrep),
+ KX_PYATTRIBUTE_INT_RW("tileyrep", INT_MIN, INT_MAX, true, KX_PolygonMaterial, m_tileyrep),
+ KX_PYATTRIBUTE_INT_RW("drawingmode", INT_MIN, INT_MAX, true, KX_PolygonMaterial, m_drawingmode),
+ KX_PYATTRIBUTE_INT_RW("lightlayer", INT_MIN, INT_MAX, true, KX_PolygonMaterial, m_lightlayer),
+
+ KX_PYATTRIBUTE_BOOL_RW("transparent", KX_PolygonMaterial, m_alpha),
+ KX_PYATTRIBUTE_BOOL_RW("zsort", KX_PolygonMaterial, m_zsort),
+
+ KX_PYATTRIBUTE_FLOAT_RW("shininess", 0.0f, 1000.0f, KX_PolygonMaterial, m_shininess),
+ KX_PYATTRIBUTE_FLOAT_RW("specularity", 0.0f, 1000.0f, KX_PolygonMaterial, m_specularity),
+
+ KX_PYATTRIBUTE_RW_FUNCTION("diffuse", KX_PolygonMaterial, pyattr_get_texture, pyattr_set_diffuse),
+ KX_PYATTRIBUTE_RW_FUNCTION("specular",KX_PolygonMaterial, pyattr_get_specular, pyattr_set_specular),
+
+ KX_PYATTRIBUTE_RO_FUNCTION("tface", KX_PolygonMaterial, pyattr_get_tface), /* How the heck is this even useful??? - Campbell */
+ KX_PYATTRIBUTE_RO_FUNCTION("gl_texture", KX_PolygonMaterial, pyattr_get_gl_texture), /* could be called 'bindcode' */
+
+ /* triangle used to be an attribute, removed for 2.49, nobody should be using it */
{ NULL } //Sentinel
};
PyTypeObject KX_PolygonMaterial::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"KX_PolygonMaterial",
- sizeof(KX_PolygonMaterial),
+ sizeof(PyObjectPlus_Proxy),
+ 0,
+ py_base_dealloc,
+ 0,
0,
- PyDestructor,
0,
- __getattr,
- __setattr,
- 0, //&MyPyCompare,
- __repr,
- 0 //&cvalue_as_number,
+ 0,
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
PyParentObject KX_PolygonMaterial::Parents[] = {
- &PyObjectPlus::Type,
&KX_PolygonMaterial::Type,
+ &PyObjectPlus::Type,
NULL
};
-PyObject* KX_PolygonMaterial::_getattr(const char *attr)
-{
- if (!strcmp(attr, "texture"))
- return PyString_FromString(m_texturename.ReadPtr());
- if (!strcmp(attr, "material"))
- return PyString_FromString(m_materialname.ReadPtr());
-
- if (!strcmp(attr, "tface"))
- return PyCObject_FromVoidPtr(m_tface, NULL);
-
- if (!strcmp(attr, "gl_texture"))
- {
- Image *ima = m_tface->tpage;
- int bind = 0;
- if (ima)
- bind = ima->bindcode;
-
- return PyInt_FromLong(bind);
- }
-
- if (!strcmp(attr, "tile"))
- return PyInt_FromLong(m_tile);
- if (!strcmp(attr, "tilexrep"))
- return PyInt_FromLong(m_tilexrep);
- if (!strcmp(attr, "tileyrep"))
- return PyInt_FromLong(m_tileyrep);
-
- if (!strcmp(attr, "drawingmode"))
- return PyInt_FromLong(m_drawingmode);
- if (!strcmp(attr, "transparent"))
- return PyInt_FromLong(m_alpha);
- if (!strcmp(attr, "zsort"))
- return PyInt_FromLong(m_zsort);
- if (!strcmp(attr, "lightlayer"))
- return PyInt_FromLong(m_lightlayer);
- if (!strcmp(attr, "triangle"))
- // deprecated, triangle/quads shouldn't have been a material property
- return 0;
-
- if (!strcmp(attr, "diffuse"))
- return PyObjectFrom(m_diffuse);
- if (!strcmp(attr, "shininess"))
- return PyFloat_FromDouble(m_shininess);
- if (!strcmp(attr, "specular"))
- return PyObjectFrom(m_specular);
- if (!strcmp(attr, "specularity"))
- return PyFloat_FromDouble(m_specularity);
-
- _getattr_up(PyObjectPlus);
+PyObject* KX_PolygonMaterial::py_getattro(PyObject *attr)
+{
+ py_getattro_up(PyObjectPlus);
}
-int KX_PolygonMaterial::_setattr(const char *attr, PyObject *pyvalue)
+int KX_PolygonMaterial::py_setattro(PyObject *attr, PyObject *value)
{
- if (PyFloat_Check(pyvalue))
- {
- float value = PyFloat_AsDouble(pyvalue);
- if (!strcmp(attr, "shininess"))
- {
- m_shininess = value;
- return 0;
- }
-
- if (!strcmp(attr, "specularity"))
- {
- m_specularity = value;
- return 0;
- }
- }
-
- if (PyInt_Check(pyvalue))
- {
- int value = PyInt_AsLong(pyvalue);
- if (!strcmp(attr, "tile"))
- {
- m_tile = value;
- return 0;
- }
-
- if (!strcmp(attr, "tilexrep"))
- {
- m_tilexrep = value;
- return 0;
- }
-
- if (!strcmp(attr, "tileyrep"))
- {
- m_tileyrep = value;
- return 0;
- }
-
- if (!strcmp(attr, "drawingmode"))
- {
- m_drawingmode = value;
- return 0;
- }
-
- if (!strcmp(attr, "transparent"))
- {
- m_alpha = value;
- return 0;
- }
-
- if (!strcmp(attr, "zsort"))
- {
- m_zsort = value;
- return 0;
- }
-
- if (!strcmp(attr, "lightlayer"))
- {
- m_lightlayer = value;
- return 0;
- }
-
- // This probably won't work...
- if (!strcmp(attr, "triangle"))
- {
- // deprecated, triangle/quads shouldn't have been a material property
- return 0;
- }
- }
-
- if (PySequence_Check(pyvalue))
- {
- if (PySequence_Size(pyvalue) == 3)
- {
- MT_Vector3 value;
- if (PyVecTo(pyvalue, value))
- {
- if (!strcmp(attr, "diffuse"))
- {
- m_diffuse = value;
- return 0;
- }
-
- if (!strcmp(attr, "specular"))
- {
- m_specular = value;
- return 0;
- }
- }
- }
- }
-
- return PyObjectPlus::_setattr(attr, pyvalue);
+ py_setattro_up(PyObjectPlus);
}
KX_PYMETHODDEF_DOC(KX_PolygonMaterial, setCustomMaterial, "setCustomMaterial(material)")
{
PyObject *material;
- if (PyArg_ParseTuple(args, "O", &material))
+ if (PyArg_ParseTuple(args, "O:setCustomMaterial", &material))
{
if (m_pymaterial) {
Py_DECREF(m_pymaterial);
@@ -371,7 +261,7 @@ KX_PYMETHODDEF_DOC(KX_PolygonMaterial, setCustomMaterial, "setCustomMaterial(mat
KX_PYMETHODDEF_DOC(KX_PolygonMaterial, updateTexture, "updateTexture(tface, rasty)")
{
PyObject *pyrasty, *pytface;
- if (PyArg_ParseTuple(args, "O!O!", &PyCObject_Type, &pytface, &PyCObject_Type, &pyrasty))
+ if (PyArg_ParseTuple(args, "O!O!:updateTexture", &PyCObject_Type, &pytface, &PyCObject_Type, &pyrasty))
{
MTFace *tface = (MTFace*) PyCObject_AsVoidPtr(pytface);
RAS_IRasterizer *rasty = (RAS_IRasterizer*) PyCObject_AsVoidPtr(pyrasty);
@@ -387,7 +277,7 @@ KX_PYMETHODDEF_DOC(KX_PolygonMaterial, updateTexture, "updateTexture(tface, rast
KX_PYMETHODDEF_DOC(KX_PolygonMaterial, setTexture, "setTexture(tface)")
{
PyObject *pytface;
- if (PyArg_ParseTuple(args, "O!", &PyCObject_Type, &pytface))
+ if (PyArg_ParseTuple(args, "O!:setTexture", &PyCObject_Type, &pytface))
{
MTFace *tface = (MTFace*) PyCObject_AsVoidPtr(pytface);
GPU_set_tpage(tface);
@@ -400,7 +290,7 @@ KX_PYMETHODDEF_DOC(KX_PolygonMaterial, setTexture, "setTexture(tface)")
KX_PYMETHODDEF_DOC(KX_PolygonMaterial, activate, "activate(rasty, cachingInfo)")
{
PyObject *pyrasty, *pyCachingInfo;
- if (PyArg_ParseTuple(args, "O!O!", &PyCObject_Type, &pyrasty, &PyCObject_Type, &pyCachingInfo))
+ if (PyArg_ParseTuple(args, "O!O!:activate", &PyCObject_Type, &pyrasty, &PyCObject_Type, &pyCachingInfo))
{
RAS_IRasterizer *rasty = static_cast<RAS_IRasterizer*>(PyCObject_AsVoidPtr(pyrasty));
TCachingInfo *cachingInfo = static_cast<TCachingInfo*>(PyCObject_AsVoidPtr(pyCachingInfo));
@@ -413,3 +303,69 @@ KX_PYMETHODDEF_DOC(KX_PolygonMaterial, activate, "activate(rasty, cachingInfo)")
return NULL;
}
+
+PyObject* KX_PolygonMaterial::pyattr_get_texture(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_PolygonMaterial* self= static_cast<KX_PolygonMaterial*>(self_v);
+ return PyString_FromString(self->m_texturename.ReadPtr());
+}
+
+PyObject* KX_PolygonMaterial::pyattr_get_material(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_PolygonMaterial* self= static_cast<KX_PolygonMaterial*>(self_v);
+ return PyString_FromString(self->m_materialname.ReadPtr());
+}
+
+/* this does not seem useful */
+PyObject* KX_PolygonMaterial::pyattr_get_tface(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_PolygonMaterial* self= static_cast<KX_PolygonMaterial*>(self_v);
+ return PyCObject_FromVoidPtr(self->m_tface, NULL);
+}
+
+PyObject* KX_PolygonMaterial::pyattr_get_gl_texture(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_PolygonMaterial* self= static_cast<KX_PolygonMaterial*>(self_v);
+ int bindcode= 0;
+ if (self->m_tface && self->m_tface->tpage)
+ bindcode= self->m_tface->tpage->bindcode;
+
+ return PyInt_FromLong(bindcode);
+}
+
+
+PyObject* KX_PolygonMaterial::pyattr_get_diffuse(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_PolygonMaterial* self= static_cast<KX_PolygonMaterial*>(self_v);
+ return PyObjectFrom(self->m_diffuse);
+}
+
+int KX_PolygonMaterial::pyattr_set_diffuse(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_PolygonMaterial* self= static_cast<KX_PolygonMaterial*>(self_v);
+ MT_Vector3 vec;
+
+ if (!PyVecTo(value, vec))
+ return -1;
+
+ self->m_diffuse= vec;
+ return 0;
+}
+
+PyObject* KX_PolygonMaterial::pyattr_get_specular(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_PolygonMaterial* self= static_cast<KX_PolygonMaterial*>(self_v);
+ return PyObjectFrom(self->m_specular);
+}
+
+int KX_PolygonMaterial::pyattr_set_specular(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_PolygonMaterial* self= static_cast<KX_PolygonMaterial*>(self_v);
+ MT_Vector3 vec;
+
+ if (!PyVecTo(value, vec))
+ return -1;
+
+ self->m_specular= vec;
+ return 0;
+}
diff --git a/source/gameengine/Ketsji/KX_PolygonMaterial.h b/source/gameengine/Ketsji/KX_PolygonMaterial.h
index a3ef4ca51ef..9865a66e836 100644
--- a/source/gameengine/Ketsji/KX_PolygonMaterial.h
+++ b/source/gameengine/Ketsji/KX_PolygonMaterial.h
@@ -33,6 +33,7 @@
#include "RAS_MaterialBucket.h"
#include "RAS_IRasterizer.h"
+#include "DNA_ID.h"
struct MTFace;
struct Material;
@@ -115,8 +116,20 @@ public:
KX_PYMETHOD_DOC(KX_PolygonMaterial, setCustomMaterial);
KX_PYMETHOD_DOC(KX_PolygonMaterial, loadProgram);
- virtual PyObject* _getattr(const char *attr);
- virtual int _setattr(const char *attr, PyObject *pyvalue);
+ virtual PyObject* py_getattro(PyObject *attr);
+ virtual int py_setattro(PyObject *attr, PyObject *pyvalue);
+ virtual PyObject* py_repr(void) { return PyString_FromString(m_material ? ((ID *)m_material)->name+2 : ""); }
+
+ static PyObject* pyattr_get_texture(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_material(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+
+ static PyObject* pyattr_get_tface(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_gl_texture(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+
+ static PyObject* pyattr_get_diffuse(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static int pyattr_set_diffuse(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+ static PyObject* pyattr_get_specular(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static int pyattr_set_specular(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
};
#endif // __KX_POLYGONMATERIAL_H__
diff --git a/source/gameengine/Ketsji/KX_PyConstraintBinding.cpp b/source/gameengine/Ketsji/KX_PyConstraintBinding.cpp
index fb37eded450..2c65c184a9c 100644
--- a/source/gameengine/Ketsji/KX_PyConstraintBinding.cpp
+++ b/source/gameengine/Ketsji/KX_PyConstraintBinding.cpp
@@ -381,7 +381,7 @@ static PyObject* gPyGetVehicleConstraint(PyObject* self,
if (vehicle)
{
KX_VehicleWrapper* pyWrapper = new KX_VehicleWrapper(vehicle,PHY_GetActiveEnvironment());
- return pyWrapper;
+ return pyWrapper->NewProxy(true);
}
}
@@ -440,7 +440,7 @@ static PyObject* gPyCreateConstraint(PyObject* self,
KX_ConstraintWrapper* wrap = new KX_ConstraintWrapper((enum PHY_ConstraintType)constrainttype,constraintid,PHY_GetActiveEnvironment());
- return wrap;
+ return wrap->NewProxy(true);
}
@@ -582,6 +582,7 @@ PyObject* initPythonConstraintBinding()
d = PyModule_GetDict(m);
ErrorObject = PyString_FromString("PhysicsConstraints.error");
PyDict_SetItemString(d, "error", ErrorObject);
+ Py_DECREF(ErrorObject);
// XXXX Add constants here
diff --git a/source/gameengine/Ketsji/KX_PyMath.cpp b/source/gameengine/Ketsji/KX_PyMath.cpp
index 92f18590a7e..0093a72808e 100644
--- a/source/gameengine/Ketsji/KX_PyMath.cpp
+++ b/source/gameengine/Ketsji/KX_PyMath.cpp
@@ -44,6 +44,7 @@
#include "ListValue.h"
#include "KX_Python.h"
+#include "KX_PyMath.h"
bool PyObject_IsMT_Matrix(PyObject *pymat, unsigned int rank)
{
@@ -74,6 +75,39 @@ bool PyObject_IsMT_Matrix(PyObject *pymat, unsigned int rank)
return false;
}
+bool PyOrientationTo(PyObject* pyval, MT_Matrix3x3 &mat, const char *error_prefix)
+{
+ MT_Matrix3x3 rot;
+ int size= PySequence_Size(pyval);
+
+ if (size == 4)
+ {
+ MT_Quaternion qrot;
+ if (PyVecTo(pyval, qrot))
+ {
+ rot.setRotation(qrot);
+ return true;
+ }
+ }
+ else if (size == 3) {
+ /* 3x3 matrix or euler */
+ MT_Vector3 erot;
+ if (PyVecTo(pyval, erot))
+ {
+ rot.setEuler(erot);
+ return true;
+ }
+ PyErr_Clear();
+
+ if (PyMatTo(pyval, rot))
+ {
+ return true;
+ }
+ }
+
+ PyErr_Format(PyExc_TypeError, "%s, could not set the orientation from a 3x3 matrix, quaternion or euler sequence", error_prefix);
+ return false;
+}
PyObject* PyObjectFrom(const MT_Matrix4x4 &mat)
{
@@ -93,7 +127,7 @@ PyObject* PyObjectFrom(const MT_Matrix4x4 &mat)
PyList_SET_ITEM(sublist, 0, PyFloat_FromDouble(mat[i][0]));
PyList_SET_ITEM(sublist, 1, PyFloat_FromDouble(mat[i][1]));
PyList_SET_ITEM(sublist, 2, PyFloat_FromDouble(mat[i][2]));
- PyList_SET_ITEM(sublist, 2, PyFloat_FromDouble(mat[i][3]));
+ PyList_SET_ITEM(sublist, 3, PyFloat_FromDouble(mat[i][3]));
PyList_SET_ITEM(list, i, sublist);
}
diff --git a/source/gameengine/Ketsji/KX_PyMath.h b/source/gameengine/Ketsji/KX_PyMath.h
index 39c9c358792..00f7c5cad93 100644
--- a/source/gameengine/Ketsji/KX_PyMath.h
+++ b/source/gameengine/Ketsji/KX_PyMath.h
@@ -92,18 +92,35 @@ bool PyMatTo(PyObject* pymat, T& mat)
}
/**
- * Converts a python list to a MT class.
+ * Converts a python sequence to a MT class.
*/
template<class T>
bool PyVecTo(PyObject* pyval, T& vec)
{
- if (PySequence_Check(pyval))
+
+ if(PyTuple_Check(pyval))
+ {
+ unsigned int numitems = PyTuple_GET_SIZE(pyval);
+ if (numitems != Size(vec)) {
+ PyErr_Format(PyExc_AttributeError, "error setting vector, %d args, should be %d", numitems, Size(vec));
+ return false;
+ }
+
+ for (unsigned int x = 0; x < numitems; x++)
+ vec[x] = PyFloat_AsDouble(PyTuple_GET_ITEM(pyval, x)); /* borrow ref */
+
+ if (PyErr_Occurred()) {
+ PyErr_SetString(PyExc_AttributeError, "one or more of the items in the sequence was not a float");
+ return false;
+ }
+
+ return true;
+ }
+ else if (PySequence_Check(pyval))
{
unsigned int numitems = PySequence_Size(pyval);
if (numitems != Size(vec)) {
- char err[128];
- sprintf(err, "error setting vector, %d args, should be %d", numitems, Size(vec));
- PyErr_SetString(PyExc_AttributeError, err);
+ PyErr_Format(PyExc_AttributeError, "error setting vector, %d args, should be %d", numitems, Size(vec));
return false;
}
@@ -122,14 +139,14 @@ bool PyVecTo(PyObject* pyval, T& vec)
return true;
} else
{
- char err[128];
- sprintf(err, "not a sequence type, expected a sequence of numbers size %d", Size(vec));
- PyErr_SetString(PyExc_AttributeError, err);
+ PyErr_Format(PyExc_AttributeError, "not a sequence type, expected a sequence of numbers size %d", Size(vec));
}
return false;
}
+bool PyOrientationTo(PyObject* pyval, MT_Matrix3x3 &mat, const char *error_prefix);
+
/**
* Converts an MT_Matrix4x4 to a python object.
*/
diff --git a/source/gameengine/Ketsji/KX_PythonInit.cpp b/source/gameengine/Ketsji/KX_PythonInit.cpp
index 965c4ed2ba3..ffcf7d7162e 100644
--- a/source/gameengine/Ketsji/KX_PythonInit.cpp
+++ b/source/gameengine/Ketsji/KX_PythonInit.cpp
@@ -48,33 +48,45 @@
#include "KX_KetsjiEngine.h"
#include "KX_RadarSensor.h"
+#include "KX_RaySensor.h"
+#include "KX_SCA_DynamicActuator.h"
#include "SCA_IInputDevice.h"
#include "SCA_PropertySensor.h"
#include "SCA_RandomActuator.h"
+#include "SCA_KeyboardSensor.h" /* IsPrintable, ToCharacter */
#include "KX_ConstraintActuator.h"
#include "KX_IpoActuator.h"
#include "KX_SoundActuator.h"
+#include "KX_StateActuator.h"
#include "BL_ActionActuator.h"
#include "RAS_IRasterizer.h"
#include "RAS_ICanvas.h"
#include "RAS_BucketManager.h"
+#include "RAS_2DFilterManager.h"
#include "MT_Vector3.h"
#include "MT_Point3.h"
#include "ListValue.h"
#include "KX_Scene.h"
#include "SND_DeviceManager.h"
+#include "NG_NetworkScene.h" //Needed for sendMessage()
+
#include "BL_Shader.h"
#include "KX_PyMath.h"
-#include "PyObjectPlus.h"
+#include "PyObjectPlus.h"
//XXX
#if 0
+
+#include "KX_PythonInitTypes.h"
+
extern "C" {
#include "Mathutils.h" // Blender.Mathutils module copied here so the blenderlayer can use.
+ #include "bpy_internal_import.h" /* from the blender python api, but we want to import text too! */
+ #include "BGL.h"
}
#endif
@@ -94,7 +106,7 @@ extern "C" {
#include "GPU_material.h"
static void setSandbox(TPythonSecurityLevel level);
-
+static void clearGameModules();
// 'local' copy of canvas ptr, for window height/width python scripts
static RAS_ICanvas* gp_Canvas = NULL;
@@ -111,9 +123,9 @@ void KX_RasterizerDrawDebugLine(const MT_Vector3& from,const MT_Vector3& to,cons
/* Macro for building the keyboard translation */
//#define KX_MACRO_addToDict(dict, name) PyDict_SetItemString(dict, #name, PyInt_FromLong(SCA_IInputDevice::KX_##name))
-#define KX_MACRO_addToDict(dict, name) PyDict_SetItemString(dict, #name, PyInt_FromLong(name))
+#define KX_MACRO_addToDict(dict, name) PyDict_SetItemString(dict, #name, item=PyInt_FromLong(name)); Py_DECREF(item)
/* For the defines for types from logic bricks, we do stuff explicitly... */
-#define KX_MACRO_addTypesToDict(dict, name, name2) PyDict_SetItemString(dict, #name, PyInt_FromLong(name2))
+#define KX_MACRO_addTypesToDict(dict, name, name2) PyDict_SetItemString(dict, #name, item=PyInt_FromLong(name2)); Py_DECREF(item)
// temporarily python stuff, will be put in another place later !
@@ -156,7 +168,7 @@ static PyObject* gPyExpandPath(PyObject*, PyObject* args)
char expanded[FILE_MAXDIR + FILE_MAXFILE];
char* filename;
- if (!PyArg_ParseTuple(args,"s",&filename))
+ if (!PyArg_ParseTuple(args,"s:ExpandPath",&filename))
return NULL;
BLI_strncpy(expanded, filename, FILE_MAXDIR + FILE_MAXFILE);
@@ -164,6 +176,28 @@ static PyObject* gPyExpandPath(PyObject*, PyObject* args)
return PyString_FromString(expanded);
}
+static char gPySendMessage_doc[] =
+"sendMessage(subject, [body, to, from])\n\
+sends a message in same manner as a message actuator\
+subject = Subject of the message\
+body = Message body\
+to = Name of object to send the message to\
+from = Name of object to sned the string from";
+
+static PyObject* gPySendMessage(PyObject*, PyObject* args)
+{
+ char* subject;
+ char* body = (char *)"";
+ char* to = (char *)"";
+ char* from = (char *)"";
+
+ if (!PyArg_ParseTuple(args, "s|sss:sendMessage", &subject, &body, &to, &from))
+ return NULL;
+
+ gp_KetsjiScene->GetNetworkScene()->SendMessage(to, from, subject, body);
+
+ Py_RETURN_NONE;
+}
static bool usedsp = false;
@@ -240,7 +274,7 @@ static PyObject* gPyStopDSP(PyObject*, PyObject* args)
static PyObject* gPySetLogicTicRate(PyObject*, PyObject* args)
{
float ticrate;
- if (!PyArg_ParseTuple(args, "f", &ticrate))
+ if (!PyArg_ParseTuple(args, "f:setLogicTicRate", &ticrate))
return NULL;
KX_KetsjiEngine::SetTicRate(ticrate);
@@ -255,7 +289,7 @@ static PyObject* gPyGetLogicTicRate(PyObject*)
static PyObject* gPySetPhysicsTicRate(PyObject*, PyObject* args)
{
float ticrate;
- if (!PyArg_ParseTuple(args, "f", &ticrate))
+ if (!PyArg_ParseTuple(args, "f:setPhysicsTicRate", &ticrate))
return NULL;
PHY_GetActiveEnvironment()->setFixedTimeStep(true,ticrate);
@@ -265,7 +299,7 @@ static PyObject* gPySetPhysicsTicRate(PyObject*, PyObject* args)
static PyObject* gPySetPhysicsDebug(PyObject*, PyObject* args)
{
int debugMode;
- if (!PyArg_ParseTuple(args, "i", &debugMode))
+ if (!PyArg_ParseTuple(args, "i:setPhysicsDebug", &debugMode))
return NULL;
PHY_GetActiveEnvironment()->setDebugMode(debugMode);
@@ -293,7 +327,7 @@ static PyObject* gPyGetBlendFileList(PyObject*, PyObject* args)
DIR *dp;
struct dirent *dirp;
- if (!PyArg_ParseTuple(args, "|s", &searchpath))
+ if (!PyArg_ParseTuple(args, "|s:getBlendFileList", &searchpath))
return NULL;
list = PyList_New(0);
@@ -329,8 +363,7 @@ static STR_String gPyGetCurrentScene_doc =
"Gets a reference to the current scene.\n";
static PyObject* gPyGetCurrentScene(PyObject* self)
{
- Py_INCREF(gp_KetsjiScene);
- return (PyObject*) gp_KetsjiScene;
+ return gp_KetsjiScene->GetProxy();
}
static STR_String gPyGetSceneList_doc =
@@ -339,7 +372,6 @@ static STR_String gPyGetSceneList_doc =
static PyObject* gPyGetSceneList(PyObject* self)
{
KX_KetsjiEngine* m_engine = KX_GetActiveEngine();
- //CListValue* list = new CListValue();
PyObject* list;
KX_SceneList* scenes = m_engine->CurrentScenes();
int numScenes = scenes->size();
@@ -350,13 +382,10 @@ static PyObject* gPyGetSceneList(PyObject* self)
for (i=0;i<numScenes;i++)
{
KX_Scene* scene = scenes->at(i);
- //list->Add(scene);
- PyList_SET_ITEM(list, i, scene);
- Py_INCREF(scene);
-
+ PyList_SET_ITEM(list, i, scene->GetProxy());
}
- return (PyObject*)list;
+ return list;
}
static PyObject *pyPrintExt(PyObject *,PyObject *,PyObject *)
@@ -433,6 +462,7 @@ static PyObject *pyPrintExt(PyObject *,PyObject *,PyObject *)
static struct PyMethodDef game_methods[] = {
{"expandPath", (PyCFunction)gPyExpandPath, METH_VARARGS, (PY_METHODCHAR)gPyExpandPath_doc},
+ {"sendMessage", (PyCFunction)gPySendMessage, METH_VARARGS, (PY_METHODCHAR)gPySendMessage_doc},
{"getCurrentController",
(PyCFunction) SCA_PythonController::sPyGetCurrentController,
METH_NOARGS, (PY_METHODCHAR)SCA_PythonController::sPyGetCurrentController__doc__},
@@ -478,7 +508,7 @@ bool gUseVisibilityTemp = false;
static PyObject* gPyEnableVisibility(PyObject*, PyObject* args)
{
int visible;
- if (!PyArg_ParseTuple(args,"i",&visible))
+ if (!PyArg_ParseTuple(args,"i:enableVisibility",&visible))
return NULL;
gUseVisibilityTemp = (visible != 0);
@@ -490,7 +520,7 @@ static PyObject* gPyEnableVisibility(PyObject*, PyObject* args)
static PyObject* gPyShowMouse(PyObject*, PyObject* args)
{
int visible;
- if (!PyArg_ParseTuple(args,"i",&visible))
+ if (!PyArg_ParseTuple(args,"i:showMouse",&visible))
return NULL;
if (visible)
@@ -511,7 +541,7 @@ static PyObject* gPyShowMouse(PyObject*, PyObject* args)
static PyObject* gPySetMousePosition(PyObject*, PyObject* args)
{
int x,y;
- if (!PyArg_ParseTuple(args,"ii",&x,&y))
+ if (!PyArg_ParseTuple(args,"ii:setMousePosition",&x,&y))
return NULL;
if (gp_Canvas)
@@ -523,11 +553,11 @@ static PyObject* gPySetMousePosition(PyObject*, PyObject* args)
static PyObject* gPySetEyeSeparation(PyObject*, PyObject* args)
{
float sep;
- if (!PyArg_ParseTuple(args, "f", &sep))
+ if (!PyArg_ParseTuple(args, "f:setEyeSeparation", &sep))
return NULL;
if (!gp_Rasterizer) {
- PyErr_SetString(PyExc_RuntimeError, "Rasterizer not available");
+ PyErr_SetString(PyExc_RuntimeError, "Rasterizer.setEyeSeparation(float), Rasterizer not available");
return NULL;
}
@@ -536,10 +566,10 @@ static PyObject* gPySetEyeSeparation(PyObject*, PyObject* args)
Py_RETURN_NONE;
}
-static PyObject* gPyGetEyeSeparation(PyObject*, PyObject*, PyObject*)
+static PyObject* gPyGetEyeSeparation(PyObject*)
{
if (!gp_Rasterizer) {
- PyErr_SetString(PyExc_RuntimeError, "Rasterizer not available");
+ PyErr_SetString(PyExc_RuntimeError, "Rasterizer.getEyeSeparation(), Rasterizer not available");
return NULL;
}
@@ -549,11 +579,11 @@ static PyObject* gPyGetEyeSeparation(PyObject*, PyObject*, PyObject*)
static PyObject* gPySetFocalLength(PyObject*, PyObject* args)
{
float focus;
- if (!PyArg_ParseTuple(args, "f", &focus))
+ if (!PyArg_ParseTuple(args, "f:setFocalLength", &focus))
return NULL;
if (!gp_Rasterizer) {
- PyErr_SetString(PyExc_RuntimeError, "Rasterizer not available");
+ PyErr_SetString(PyExc_RuntimeError, "Rasterizer.setFocalLength(float), Rasterizer not available");
return NULL;
}
@@ -565,7 +595,7 @@ static PyObject* gPySetFocalLength(PyObject*, PyObject* args)
static PyObject* gPyGetFocalLength(PyObject*, PyObject*, PyObject*)
{
if (!gp_Rasterizer) {
- PyErr_SetString(PyExc_RuntimeError, "Rasterizer not available");
+ PyErr_SetString(PyExc_RuntimeError, "Rasterizer.getFocalLength(), Rasterizer not available");
return NULL;
}
@@ -598,7 +628,7 @@ static PyObject* gPySetMistColor(PyObject*, PyObject* value)
return NULL;
if (!gp_Rasterizer) {
- PyErr_SetString(PyExc_RuntimeError, "Rasterizer not available");
+ PyErr_SetString(PyExc_RuntimeError, "Rasterizer.setMistColor(color), Rasterizer not available");
return NULL;
}
gp_Rasterizer->SetFogColor(vec[0], vec[1], vec[2]);
@@ -612,11 +642,11 @@ static PyObject* gPySetMistStart(PyObject*, PyObject* args)
{
float miststart;
- if (!PyArg_ParseTuple(args,"f",&miststart))
+ if (!PyArg_ParseTuple(args,"f:setMistStart",&miststart))
return NULL;
if (!gp_Rasterizer) {
- PyErr_SetString(PyExc_RuntimeError, "Rasterizer not available");
+ PyErr_SetString(PyExc_RuntimeError, "Rasterizer.setMistStart(float), Rasterizer not available");
return NULL;
}
@@ -631,11 +661,11 @@ static PyObject* gPySetMistEnd(PyObject*, PyObject* args)
{
float mistend;
- if (!PyArg_ParseTuple(args,"f",&mistend))
+ if (!PyArg_ParseTuple(args,"f:setMistEnd",&mistend))
return NULL;
if (!gp_Rasterizer) {
- PyErr_SetString(PyExc_RuntimeError, "Rasterizer not available");
+ PyErr_SetString(PyExc_RuntimeError, "Rasterizer.setMistEnd(float), Rasterizer not available");
return NULL;
}
@@ -653,7 +683,7 @@ static PyObject* gPySetAmbientColor(PyObject*, PyObject* value)
return NULL;
if (!gp_Rasterizer) {
- PyErr_SetString(PyExc_RuntimeError, "Rasterizer not available");
+ PyErr_SetString(PyExc_RuntimeError, "Rasterizer.setAmbientColor(color), Rasterizer not available");
return NULL;
}
gp_Rasterizer->SetAmbientColor(vec[0], vec[1], vec[2]);
@@ -667,7 +697,7 @@ static PyObject* gPySetAmbientColor(PyObject*, PyObject* value)
static PyObject* gPyMakeScreenshot(PyObject*, PyObject* args)
{
char* filename;
- if (!PyArg_ParseTuple(args,"s",&filename))
+ if (!PyArg_ParseTuple(args,"s:makeScreenshot",&filename))
return NULL;
if (gp_Canvas)
@@ -681,11 +711,11 @@ static PyObject* gPyMakeScreenshot(PyObject*, PyObject* args)
static PyObject* gPyEnableMotionBlur(PyObject*, PyObject* args)
{
float motionblurvalue;
- if (!PyArg_ParseTuple(args,"f",&motionblurvalue))
+ if (!PyArg_ParseTuple(args,"f:enableMotionBlur",&motionblurvalue))
return NULL;
if (!gp_Rasterizer) {
- PyErr_SetString(PyExc_RuntimeError, "Rasterizer not available");
+ PyErr_SetString(PyExc_RuntimeError, "Rasterizer.enableMotionBlur(float), Rasterizer not available");
return NULL;
}
@@ -697,7 +727,7 @@ static PyObject* gPyEnableMotionBlur(PyObject*, PyObject* args)
static PyObject* gPyDisableMotionBlur(PyObject*, PyObject* args)
{
if (!gp_Rasterizer) {
- PyErr_SetString(PyExc_RuntimeError, "Rasterizer not available");
+ PyErr_SetString(PyExc_RuntimeError, "Rasterizer.disableMotionBlur(), Rasterizer not available");
return NULL;
}
@@ -731,13 +761,13 @@ static PyObject* gPySetGLSLMaterialSetting(PyObject*,
char *setting;
int enable, flag, fileflags;
- if (!PyArg_ParseTuple(args,"si",&setting,&enable))
+ if (!PyArg_ParseTuple(args,"si:setGLSLMaterialSetting",&setting,&enable))
return NULL;
flag = getGLSLSettingFlag(setting);
if (flag==-1) {
- PyErr_SetString(PyExc_ValueError, "glsl setting is not known");
+ PyErr_SetString(PyExc_ValueError, "Rasterizer.setGLSLMaterialSetting(string): glsl setting is not known");
return NULL;
}
@@ -772,13 +802,13 @@ static PyObject* gPyGetGLSLMaterialSetting(PyObject*,
char *setting;
int enabled = 0, flag;
- if (!PyArg_ParseTuple(args,"s",&setting))
+ if (!PyArg_ParseTuple(args,"s:getGLSLMaterialSetting",&setting))
return NULL;
flag = getGLSLSettingFlag(setting);
if (flag==-1) {
- PyErr_SetString(PyExc_ValueError, "glsl setting is not known");
+ PyErr_SetString(PyExc_ValueError, "Rasterizer.getGLSLMaterialSetting(string): glsl setting is not known");
return NULL;
}
@@ -796,7 +826,7 @@ static PyObject* gPySetMaterialType(PyObject*,
{
int flag, type;
- if (!PyArg_ParseTuple(args,"i",&type))
+ if (!PyArg_ParseTuple(args,"i:setMaterialType",&type))
return NULL;
if(type == KX_BLENDER_GLSL_MATERIAL)
@@ -806,7 +836,7 @@ static PyObject* gPySetMaterialType(PyObject*,
else if(type == KX_TEXFACE_MATERIAL)
flag = 0;
else {
- PyErr_SetString(PyExc_ValueError, "material type is not known");
+ PyErr_SetString(PyExc_ValueError, "Rasterizer.setMaterialType(int): material type is not known");
return NULL;
}
@@ -837,11 +867,11 @@ static PyObject* gPyDrawLine(PyObject*, PyObject* args)
PyObject* ob_color;
if (!gp_Rasterizer) {
- PyErr_SetString(PyExc_RuntimeError, "Rasterizer not available");
+ PyErr_SetString(PyExc_RuntimeError, "Rasterizer.drawLine(obFrom, obTo, color): Rasterizer not available");
return NULL;
}
- if (!PyArg_ParseTuple(args,"OOO",&ob_from,&ob_to,&ob_color))
+ if (!PyArg_ParseTuple(args,"OOO:drawLine",&ob_from,&ob_to,&ob_color))
return NULL;
MT_Vector3 from;
@@ -882,7 +912,7 @@ static struct PyMethodDef rasterizer_methods[] = {
{"setEyeSeparation", (PyCFunction) gPySetEyeSeparation, METH_VARARGS, "set the eye separation for stereo mode"},
- {"getEyeSeparation", (PyCFunction) gPyGetEyeSeparation, METH_VARARGS, "get the eye separation for stereo mode"},
+ {"getEyeSeparation", (PyCFunction) gPyGetEyeSeparation, METH_NOARGS, "get the eye separation for stereo mode"},
{"setFocalLength", (PyCFunction) gPySetFocalLength, METH_VARARGS, "set the focal length for stereo mode"},
{"getFocalLength", (PyCFunction) gPyGetFocalLength, METH_VARARGS, "get the focal length for stereo mode"},
{"setMaterialMode",(PyCFunction) gPySetMaterialType,
@@ -914,7 +944,8 @@ PyObject* initGameLogic(KX_KetsjiEngine *engine, KX_Scene* scene) // quick hack
{
PyObject* m;
PyObject* d;
-
+ PyObject* item; /* temp PyObject* storage */
+
gp_KetsjiEngine = engine;
gp_KetsjiScene = scene;
@@ -930,10 +961,12 @@ PyObject* initGameLogic(KX_KetsjiEngine *engine, KX_Scene* scene) // quick hack
// can be overwritten later for gameEngine instances that can load new blend files and re-initialize this module
// for now its safe to make sure it exists for other areas such as the web plugin
- PyDict_SetItemString(d, "globalDict", PyDict_New());
+
+ PyDict_SetItemString(d, "globalDict", item=PyDict_New()); Py_DECREF(item);
ErrorObject = PyString_FromString("GameLogic.error");
PyDict_SetItemString(d, "error", ErrorObject);
+ Py_DECREF(ErrorObject);
// XXXX Add constants here
/* To use logic bricks, we need some sort of constants. Here, we associate */
@@ -966,6 +999,12 @@ PyObject* initGameLogic(KX_KetsjiEngine *engine, KX_Scene* scene) // quick hack
KX_MACRO_addTypesToDict(d, KX_CONSTRAINTACT_ORIX, KX_ConstraintActuator::KX_ACT_CONSTRAINT_ORIX);
KX_MACRO_addTypesToDict(d, KX_CONSTRAINTACT_ORIY, KX_ConstraintActuator::KX_ACT_CONSTRAINT_ORIY);
KX_MACRO_addTypesToDict(d, KX_CONSTRAINTACT_ORIZ, KX_ConstraintActuator::KX_ACT_CONSTRAINT_ORIZ);
+ KX_MACRO_addTypesToDict(d, KX_ACT_CONSTRAINT_FHPX, KX_ConstraintActuator::KX_ACT_CONSTRAINT_FHPX);
+ KX_MACRO_addTypesToDict(d, KX_ACT_CONSTRAINT_FHPY, KX_ConstraintActuator::KX_ACT_CONSTRAINT_FHPY);
+ KX_MACRO_addTypesToDict(d, KX_ACT_CONSTRAINT_FHPZ, KX_ConstraintActuator::KX_ACT_CONSTRAINT_FHPZ);
+ KX_MACRO_addTypesToDict(d, KX_ACT_CONSTRAINT_FHNX, KX_ConstraintActuator::KX_ACT_CONSTRAINT_FHNX);
+ KX_MACRO_addTypesToDict(d, KX_ACT_CONSTRAINT_FHNY, KX_ConstraintActuator::KX_ACT_CONSTRAINT_FHNY);
+ KX_MACRO_addTypesToDict(d, KX_ACT_CONSTRAINT_FHNZ, KX_ConstraintActuator::KX_ACT_CONSTRAINT_FHNZ);
/* 4. Ipo actuator, simple part */
KX_MACRO_addTypesToDict(d, KX_IPOACT_PLAY, KX_IpoActuator::KX_ACT_IPO_PLAY);
@@ -973,6 +1012,7 @@ PyObject* initGameLogic(KX_KetsjiEngine *engine, KX_Scene* scene) // quick hack
KX_MACRO_addTypesToDict(d, KX_IPOACT_FLIPPER, KX_IpoActuator::KX_ACT_IPO_FLIPPER);
KX_MACRO_addTypesToDict(d, KX_IPOACT_LOOPSTOP, KX_IpoActuator::KX_ACT_IPO_LOOPSTOP);
KX_MACRO_addTypesToDict(d, KX_IPOACT_LOOPEND, KX_IpoActuator::KX_ACT_IPO_LOOPEND);
+ KX_MACRO_addTypesToDict(d, KX_IPOACT_FROM_PROP,KX_IpoActuator::KX_ACT_IPO_FROM_PROP);
/* 5. Random distribution types */
KX_MACRO_addTypesToDict(d, KX_RANDOMACT_BOOL_CONST, SCA_RandomActuator::KX_RANDOMACT_BOOL_CONST);
@@ -1072,6 +1112,66 @@ PyObject* initGameLogic(KX_KetsjiEngine *engine, KX_Scene* scene) // quick hack
KX_MACRO_addTypesToDict(d, KX_RADAR_AXIS_NEG_Y, KX_RadarSensor::KX_RADAR_AXIS_NEG_X);
KX_MACRO_addTypesToDict(d, KX_RADAR_AXIS_NEG_Z, KX_RadarSensor::KX_RADAR_AXIS_NEG_Z);
+ /* Ray Sensor */
+ KX_MACRO_addTypesToDict(d, KX_RAY_AXIS_POS_X, KX_RaySensor::KX_RAY_AXIS_POS_X);
+ KX_MACRO_addTypesToDict(d, KX_RAY_AXIS_POS_Y, KX_RaySensor::KX_RAY_AXIS_POS_Y);
+ KX_MACRO_addTypesToDict(d, KX_RAY_AXIS_POS_Z, KX_RaySensor::KX_RAY_AXIS_POS_Z);
+ KX_MACRO_addTypesToDict(d, KX_RAY_AXIS_NEG_X, KX_RaySensor::KX_RAY_AXIS_NEG_Y);
+ KX_MACRO_addTypesToDict(d, KX_RAY_AXIS_NEG_Y, KX_RaySensor::KX_RAY_AXIS_NEG_X);
+ KX_MACRO_addTypesToDict(d, KX_RAY_AXIS_NEG_Z, KX_RaySensor::KX_RAY_AXIS_NEG_Z);
+
+ /* Dynamic actuator */
+ KX_MACRO_addTypesToDict(d, KX_DYN_RESTORE_DYNAMICS, KX_SCA_DynamicActuator::KX_DYN_RESTORE_DYNAMICS);
+ KX_MACRO_addTypesToDict(d, KX_DYN_DISABLE_DYNAMICS, KX_SCA_DynamicActuator::KX_DYN_DISABLE_DYNAMICS);
+ KX_MACRO_addTypesToDict(d, KX_DYN_ENABLE_RIGID_BODY, KX_SCA_DynamicActuator::KX_DYN_ENABLE_RIGID_BODY);
+ KX_MACRO_addTypesToDict(d, KX_DYN_DISABLE_RIGID_BODY, KX_SCA_DynamicActuator::KX_DYN_DISABLE_RIGID_BODY);
+ KX_MACRO_addTypesToDict(d, KX_DYN_SET_MASS, KX_SCA_DynamicActuator::KX_DYN_SET_MASS);
+
+ /* Input & Mouse Sensor */
+ KX_MACRO_addTypesToDict(d, KX_INPUT_NONE, SCA_InputEvent::KX_NO_INPUTSTATUS);
+ KX_MACRO_addTypesToDict(d, KX_INPUT_JUST_ACTIVATED, SCA_InputEvent::KX_JUSTACTIVATED);
+ KX_MACRO_addTypesToDict(d, KX_INPUT_ACTIVE, SCA_InputEvent::KX_ACTIVE);
+ KX_MACRO_addTypesToDict(d, KX_INPUT_JUST_RELEASED, SCA_InputEvent::KX_JUSTRELEASED);
+
+ KX_MACRO_addTypesToDict(d, KX_MOUSE_BUT_LEFT, SCA_IInputDevice::KX_LEFTMOUSE);
+ KX_MACRO_addTypesToDict(d, KX_MOUSE_BUT_MIDDLE, SCA_IInputDevice::KX_MIDDLEMOUSE);
+ KX_MACRO_addTypesToDict(d, KX_MOUSE_BUT_RIGHT, SCA_IInputDevice::KX_RIGHTMOUSE);
+
+ KX_MACRO_addTypesToDict(d, RAS_2DFILTER_ENABLED, RAS_2DFilterManager::RAS_2DFILTER_ENABLED);
+ KX_MACRO_addTypesToDict(d, RAS_2DFILTER_DISABLED, RAS_2DFilterManager::RAS_2DFILTER_DISABLED);
+ KX_MACRO_addTypesToDict(d, RAS_2DFILTER_NOFILTER, RAS_2DFilterManager::RAS_2DFILTER_NOFILTER);
+ KX_MACRO_addTypesToDict(d, RAS_2DFILTER_MOTIONBLUR, RAS_2DFilterManager::RAS_2DFILTER_MOTIONBLUR);
+ KX_MACRO_addTypesToDict(d, RAS_2DFILTER_BLUR, RAS_2DFilterManager::RAS_2DFILTER_BLUR);
+ KX_MACRO_addTypesToDict(d, RAS_2DFILTER_SHARPEN, RAS_2DFilterManager::RAS_2DFILTER_SHARPEN);
+ KX_MACRO_addTypesToDict(d, RAS_2DFILTER_DILATION, RAS_2DFilterManager::RAS_2DFILTER_DILATION);
+ KX_MACRO_addTypesToDict(d, RAS_2DFILTER_EROSION, RAS_2DFilterManager::RAS_2DFILTER_EROSION);
+ KX_MACRO_addTypesToDict(d, RAS_2DFILTER_LAPLACIAN, RAS_2DFilterManager::RAS_2DFILTER_LAPLACIAN);
+ KX_MACRO_addTypesToDict(d, RAS_2DFILTER_SOBEL, RAS_2DFilterManager::RAS_2DFILTER_SOBEL);
+ KX_MACRO_addTypesToDict(d, RAS_2DFILTER_PREWITT, RAS_2DFilterManager::RAS_2DFILTER_PREWITT);
+ KX_MACRO_addTypesToDict(d, RAS_2DFILTER_GRAYSCALE, RAS_2DFilterManager::RAS_2DFILTER_GRAYSCALE);
+ KX_MACRO_addTypesToDict(d, RAS_2DFILTER_SEPIA, RAS_2DFilterManager::RAS_2DFILTER_SEPIA);
+ KX_MACRO_addTypesToDict(d, RAS_2DFILTER_INVERT, RAS_2DFilterManager::RAS_2DFILTER_INVERT);
+ KX_MACRO_addTypesToDict(d, RAS_2DFILTER_CUSTOMFILTER, RAS_2DFilterManager::RAS_2DFILTER_CUSTOMFILTER);
+
+ KX_MACRO_addTypesToDict(d, KX_SOUNDACT_PLAYSTOP, KX_SoundActuator::KX_SOUNDACT_PLAYSTOP);
+ KX_MACRO_addTypesToDict(d, KX_SOUNDACT_PLAYEND, KX_SoundActuator::KX_SOUNDACT_PLAYEND);
+ KX_MACRO_addTypesToDict(d, KX_SOUNDACT_LOOPSTOP, KX_SoundActuator::KX_SOUNDACT_LOOPSTOP);
+ KX_MACRO_addTypesToDict(d, KX_SOUNDACT_LOOPEND, KX_SoundActuator:: KX_SOUNDACT_LOOPEND);
+ KX_MACRO_addTypesToDict(d, KX_SOUNDACT_LOOPBIDIRECTIONAL, KX_SoundActuator::KX_SOUNDACT_LOOPBIDIRECTIONAL);
+ KX_MACRO_addTypesToDict(d, KX_SOUNDACT_LOOPBIDIRECTIONAL_STOP, KX_SoundActuator::KX_SOUNDACT_LOOPBIDIRECTIONAL_STOP);
+
+ KX_MACRO_addTypesToDict(d, KX_STATE_OP_CPY, KX_StateActuator::OP_CPY);
+ KX_MACRO_addTypesToDict(d, KX_STATE_OP_SET, KX_StateActuator::OP_SET);
+ KX_MACRO_addTypesToDict(d, KX_STATE_OP_CLR, KX_StateActuator::OP_CLR);
+ KX_MACRO_addTypesToDict(d, KX_STATE_OP_NEG, KX_StateActuator::OP_NEG);
+
+ KX_MACRO_addTypesToDict(d, KX_ACT_CONSTRAINT_NORMAL, KX_ConstraintActuator::KX_ACT_CONSTRAINT_NORMAL);
+ KX_MACRO_addTypesToDict(d, KX_ACT_CONSTRAINT_MATERIAL, KX_ConstraintActuator::KX_ACT_CONSTRAINT_MATERIAL);
+ KX_MACRO_addTypesToDict(d, KX_ACT_CONSTRAINT_PERMANENT, KX_ConstraintActuator::KX_ACT_CONSTRAINT_PERMANENT);
+ KX_MACRO_addTypesToDict(d, KX_ACT_CONSTRAINT_DISTANCE, KX_ConstraintActuator::KX_ACT_CONSTRAINT_DISTANCE);
+ KX_MACRO_addTypesToDict(d, KX_ACT_CONSTRAINT_LOCAL, KX_ConstraintActuator::KX_ACT_CONSTRAINT_LOCAL);
+ KX_MACRO_addTypesToDict(d, KX_ACT_CONSTRAINT_DOROTFH, KX_ConstraintActuator::KX_ACT_CONSTRAINT_DOROTFH);
+
// Check for errors
if (PyErr_Occurred())
{
@@ -1090,11 +1190,6 @@ PyObject *KXpy_open(PyObject *self, PyObject *args) {
return NULL;
}
-PyObject *KXpy_reload(PyObject *self, PyObject *args) {
- PyErr_SetString(PyExc_RuntimeError, "Sandbox: reload() function disabled!\nGame Scripts should not use this function.");
- return NULL;
-}
-
PyObject *KXpy_file(PyObject *self, PyObject *args) {
PyErr_SetString(PyExc_RuntimeError, "Sandbox: file() function disabled!\nGame Scripts should not use this function.");
return NULL;
@@ -1113,6 +1208,7 @@ PyObject *KXpy_compile(PyObject *self, PyObject *args) {
PyObject *KXpy_import(PyObject *self, PyObject *args)
{
char *name;
+ int found;
PyObject *globals = NULL;
PyObject *locals = NULL;
PyObject *fromlist = NULL;
@@ -1142,16 +1238,48 @@ PyObject *KXpy_import(PyObject *self, PyObject *args)
/* quick hack for GamePython modules
TODO: register builtin modules properly by ExtendInittab */
if (!strcmp(name, "GameLogic") || !strcmp(name, "GameKeys") || !strcmp(name, "PhysicsConstraints") ||
- !strcmp(name, "Rasterizer") || !strcmp(name, "Mathutils")) {
+ !strcmp(name, "Rasterizer") || !strcmp(name, "Mathutils") || !strcmp(name, "BGL")) {
return PyImport_ImportModuleEx(name, globals, locals, fromlist);
}
-
- PyErr_Format(PyExc_ImportError,
- "Import of external Module %.20s not allowed.", name);
+
+ /* Import blender texts as python modules */
+ /* XXX 2.5
+ * m= bpy_text_import(name, &found);
+ if (m)
+ return m; */
+
+ if(found==0) /* if its found but could not import then it has its own error */
+ PyErr_Format(PyExc_ImportError, "Import of external Module %.20s not allowed.", name);
+
return NULL;
}
+PyObject *KXpy_reload(PyObject *self, PyObject *args) {
+
+ /* Used to be sandboxed, bettet to allow importing of internal text only */
+#if 0
+ PyErr_SetString(PyExc_RuntimeError, "Sandbox: reload() function disabled!\nGame Scripts should not use this function.");
+ return NULL;
+#endif
+ int found;
+ PyObject *module = NULL;
+ PyObject *newmodule = NULL;
+
+ /* check for a module arg */
+ if( !PyArg_ParseTuple( args, "O:bpy_reload_meth", &module ) )
+ return NULL;
+
+ /* XXX 2.5 newmodule= bpy_text_reimport( module, &found );
+ if (newmodule)
+ return newmodule; */
+
+ if (found==0) /* if its found but could not import then it has its own error */
+ PyErr_SetString(PyExc_ImportError, "reload(module): failed to reload from blenders internal text");
+
+ return newmodule;
+}
+
/* override python file type functions */
#if 0
static int
@@ -1184,18 +1312,18 @@ void setSandbox(TPythonSecurityLevel level)
{
PyObject *m = PyImport_AddModule("__builtin__");
PyObject *d = PyModule_GetDict(m);
-
+ PyObject *item;
switch (level) {
case psl_Highest:
//if (!g_security) {
//g_oldopen = PyDict_GetItemString(d, "open");
// functions we cant trust
- PyDict_SetItemString(d, "open", PyCFunction_New(meth_open, NULL));
- PyDict_SetItemString(d, "reload", PyCFunction_New(meth_reload, NULL));
- PyDict_SetItemString(d, "file", PyCFunction_New(meth_file, NULL));
- PyDict_SetItemString(d, "execfile", PyCFunction_New(meth_execfile, NULL));
- PyDict_SetItemString(d, "compile", PyCFunction_New(meth_compile, NULL));
+ PyDict_SetItemString(d, "open", item=PyCFunction_New(meth_open, NULL)); Py_DECREF(item);
+ PyDict_SetItemString(d, "reload", item=PyCFunction_New(meth_reload, NULL)); Py_DECREF(item);
+ PyDict_SetItemString(d, "file", item=PyCFunction_New(meth_file, NULL)); Py_DECREF(item);
+ PyDict_SetItemString(d, "execfile", item=PyCFunction_New(meth_execfile, NULL)); Py_DECREF(item);
+ PyDict_SetItemString(d, "compile", item=PyCFunction_New(meth_compile, NULL)); Py_DECREF(item);
// our own import
PyDict_SetItemString(d, "__import__", PyCFunction_New(meth_import, NULL));
@@ -1224,6 +1352,9 @@ void setSandbox(TPythonSecurityLevel level)
}
*/
default:
+ /* Allow importing internal text, from bpy_internal_import.py */
+ /* XXX 2.5 PyDict_SetItemString(d, "reload", item=PyCFunction_New(bpy_reload_meth, NULL)); Py_DECREF(item); */
+ /* XXX 2.5 PyDict_SetItemString(d, "__import__", item=PyCFunction_New(bpy_import_meth, NULL)); Py_DECREF(item); */
break;
}
}
@@ -1231,31 +1362,39 @@ void setSandbox(TPythonSecurityLevel level)
/**
* Python is not initialised.
*/
-PyObject* initGamePlayerPythonScripting(const STR_String& progname, TPythonSecurityLevel level)
+PyObject* initGamePlayerPythonScripting(const STR_String& progname, TPythonSecurityLevel level, Main *maggie, int argc, char** argv)
{
STR_String pname = progname;
Py_SetProgramName(pname.Ptr());
Py_NoSiteFlag=1;
Py_FrozenFlag=1;
Py_Initialize();
-
+
+ if(argv) /* browser plugins dont currently set this */
+ PySys_SetArgv(argc, argv);
+
//importBlenderModules()
setSandbox(level);
-
+ /* XXX 2.5 initPyTypes(); */
+
+ /* XXX 2.5 bpy_import_main_set(maggie); */
+
PyObject* moduleobj = PyImport_AddModule("__main__");
return PyModule_GetDict(moduleobj);
}
void exitGamePlayerPythonScripting()
{
+ //clearGameModules(); // were closing python anyway
Py_Finalize();
+ /* XXX 2.5 bpy_import_main_set(NULL); */
}
/**
* Python is already initialized.
*/
-PyObject* initGamePythonScripting(const STR_String& progname, TPythonSecurityLevel level)
+PyObject* initGamePythonScripting(const STR_String& progname, TPythonSecurityLevel level, Main *maggie)
{
STR_String pname = progname;
Py_SetProgramName(pname.Ptr());
@@ -1263,15 +1402,54 @@ PyObject* initGamePythonScripting(const STR_String& progname, TPythonSecurityLev
Py_FrozenFlag=1;
setSandbox(level);
+ /* XXX 2.5 initPyTypes(); */
+
+ /* XXX 2.5 bpy_import_main_set(maggie); */
+
+ /* run this to clear game modules and user modules which
+ * may contain references to in game data */
+ clearGameModules();
PyObject* moduleobj = PyImport_AddModule("__main__");
return PyModule_GetDict(moduleobj);
}
+static void clearModule(PyObject *modules, const char *name)
+{
+ PyObject *mod= PyDict_GetItemString(modules, name);
+
+ if (mod==NULL)
+ return;
+
+ PyDict_Clear(PyModule_GetDict(mod)); /* incase there are any circular refs */
+ PyDict_DelItemString(modules, name);
+}
+static void clearGameModules()
+{
+ /* Note, user modules could still reference these modules
+ * but since the dict's are cleared their members wont be accessible */
+
+ PyObject *modules= PySys_GetObject((char *)"modules");
+ clearModule(modules, "Expression");
+ clearModule(modules, "CValue");
+ clearModule(modules, "PhysicsConstraints");
+ clearModule(modules, "GameLogic");
+ clearModule(modules, "Rasterizer");
+ clearModule(modules, "GameKeys");
+ clearModule(modules, "VideoTexture");
+ clearModule(modules, "Mathutils");
+ clearModule(modules, "BGL");
+ PyErr_Clear(); // incase some of these were alredy removed.
+
+ /* clear user defined modules */
+ /* XXX 2.5 bpy_text_clear_modules(); */
+}
void exitGamePythonScripting()
{
+ clearGameModules();
+ /* XXX 2.5 bpy_import_main_set(NULL); */
}
@@ -1284,6 +1462,7 @@ PyObject* initRasterizer(RAS_IRasterizer* rasty,RAS_ICanvas* canvas)
PyObject* m;
PyObject* d;
+ PyObject* item;
// Create the module and add the functions
m = Py_InitModule4("Rasterizer", rasterizer_methods,
@@ -1294,6 +1473,7 @@ PyObject* initRasterizer(RAS_IRasterizer* rasty,RAS_ICanvas* canvas)
d = PyModule_GetDict(m);
ErrorObject = PyString_FromString("Rasterizer.error");
PyDict_SetItemString(d, "error", ErrorObject);
+ Py_DECREF(ErrorObject);
/* needed for get/setMaterialType */
KX_MACRO_addTypesToDict(d, KX_TEXFACE_MATERIAL, KX_TEXFACE_MATERIAL);
@@ -1322,7 +1502,7 @@ static char GameKeys_module_documentation[] =
;
static char gPyEventToString_doc[] =
-"Take a valid event from the GameKeys module or Keyboard Sensor and return a name"
+"EventToString(event) - Take a valid event from the GameKeys module or Keyboard Sensor and return a name"
;
static PyObject* gPyEventToString(PyObject*, PyObject* value)
@@ -1345,13 +1525,35 @@ static PyObject* gPyEventToString(PyObject*, PyObject* value)
PyErr_Clear(); // incase there was an error clearing
Py_DECREF(mod);
- if (!ret) PyErr_SetString(PyExc_ValueError, "expected a valid int keyboard event");
+ if (!ret) PyErr_SetString(PyExc_ValueError, "GameKeys.EventToString(int): expected a valid int keyboard event");
else Py_INCREF(ret);
return ret;
}
+static char gPyEventToCharacter_doc[] =
+"EventToCharacter(event, is_shift) - Take a valid event from the GameKeys module or Keyboard Sensor and return a character"
+;
+
+static PyObject* gPyEventToCharacter(PyObject*, PyObject* args)
+{
+ int event, shift;
+ if (!PyArg_ParseTuple(args,"ii:EventToCharacter", &event, &shift))
+ return NULL;
+
+ if(IsPrintable(event)) {
+ char ch[2] = {'\0', '\0'};
+ ch[0] = ToCharacter(event, (bool)shift);
+ return PyString_FromString(ch);
+ }
+ else {
+ return PyString_FromString("");
+ }
+}
+
+
static struct PyMethodDef gamekeys_methods[] = {
+ {"EventToCharacter", (PyCFunction)gPyEventToCharacter, METH_VARARGS, (PY_METHODCHAR)gPyEventToCharacter_doc},
{"EventToString", (PyCFunction)gPyEventToString, METH_O, (PY_METHODCHAR)gPyEventToString_doc},
{ NULL, (PyCFunction) NULL, 0, NULL }
};
@@ -1362,6 +1564,7 @@ PyObject* initGameKeys()
{
PyObject* m;
PyObject* d;
+ PyObject* item;
// Create the module and add the functions
m = Py_InitModule4("GameKeys", gamekeys_methods,
@@ -1486,7 +1689,6 @@ PyObject* initGameKeys()
KX_MACRO_addTypesToDict(d, PAGEDOWNKEY, SCA_IInputDevice::KX_PAGEDOWNKEY);
KX_MACRO_addTypesToDict(d, ENDKEY, SCA_IInputDevice::KX_ENDKEY);
-
// Check for errors
if (PyErr_Occurred())
{
@@ -1501,6 +1703,11 @@ PyObject* initMathutils()
return NULL; //XXX Mathutils_Init("Mathutils"); // Use as a top level module in BGE
}
+PyObject* initBGL()
+{
+ return NULL; // XXX 2.5 BGL_Init("BGL"); // Use as a top level module in BGE
+}
+
void KX_SetActiveScene(class KX_Scene* scene)
{
gp_KetsjiScene = scene;
diff --git a/source/gameengine/Ketsji/KX_PythonInit.h b/source/gameengine/Ketsji/KX_PythonInit.h
index 57ee0be9400..11360197b95 100644
--- a/source/gameengine/Ketsji/KX_PythonInit.h
+++ b/source/gameengine/Ketsji/KX_PythonInit.h
@@ -43,11 +43,12 @@ extern bool gUseVisibilityTemp;
PyObject* initGameLogic(class KX_KetsjiEngine *engine, class KX_Scene* ketsjiscene);
PyObject* initGameKeys();
PyObject* initRasterizer(class RAS_IRasterizer* rasty,class RAS_ICanvas* canvas);
-PyObject* initGamePlayerPythonScripting(const STR_String& progname, TPythonSecurityLevel level);
+PyObject* initGamePlayerPythonScripting(const STR_String& progname, TPythonSecurityLevel level, struct Main *maggie, int argc, char** argv);
PyObject* initMathutils();
+PyObject* initBGL();
PyObject* initVideoTexture(void);
void exitGamePlayerPythonScripting();
-PyObject* initGamePythonScripting(const STR_String& progname, TPythonSecurityLevel level);
+PyObject* initGamePythonScripting(const STR_String& progname, TPythonSecurityLevel level, struct Main *maggie);
void exitGamePythonScripting();
void setGamePythonPath(char *path);
diff --git a/source/gameengine/Ketsji/KX_PythonInitTypes.cpp b/source/gameengine/Ketsji/KX_PythonInitTypes.cpp
new file mode 100644
index 00000000000..dcd11b551a1
--- /dev/null
+++ b/source/gameengine/Ketsji/KX_PythonInitTypes.cpp
@@ -0,0 +1,233 @@
+/**
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): Campbell Barton
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+
+
+#ifndef _adr_py_init_types_h_ // only process once,
+#define _adr_py_init_types_h_ // even if multiply included
+
+/* Only for Class::Parents */
+#include "BL_BlenderShader.h"
+#include "BL_ShapeActionActuator.h"
+#include "KX_BlenderMaterial.h"
+#include "KX_CDActuator.h"
+#include "KX_CameraActuator.h"
+#include "KX_ConstraintActuator.h"
+#include "KX_ConstraintWrapper.h"
+#include "KX_GameActuator.h"
+#include "KX_Light.h"
+#include "KX_MeshProxy.h"
+#include "KX_MouseFocusSensor.h"
+#include "KX_NetworkMessageActuator.h"
+#include "KX_NetworkMessageSensor.h"
+#include "KX_ObjectActuator.h"
+#include "KX_ParentActuator.h"
+#include "KX_PhysicsObjectWrapper.h"
+#include "KX_PolyProxy.h"
+#include "KX_PolygonMaterial.h"
+#include "KX_SCA_AddObjectActuator.h"
+#include "KX_SCA_EndObjectActuator.h"
+#include "KX_SCA_ReplaceMeshActuator.h"
+#include "KX_SceneActuator.h"
+#include "KX_StateActuator.h"
+#include "KX_TrackToActuator.h"
+#include "KX_VehicleWrapper.h"
+#include "KX_VertexProxy.h"
+#include "SCA_2DFilterActuator.h"
+#include "SCA_ANDController.h"
+#include "SCA_ActuatorSensor.h"
+#include "SCA_AlwaysSensor.h"
+#include "SCA_DelaySensor.h"
+#include "SCA_JoystickSensor.h"
+#include "SCA_KeyboardSensor.h"
+#include "SCA_MouseSensor.h"
+#include "SCA_NANDController.h"
+#include "SCA_NORController.h"
+#include "SCA_ORController.h"
+#include "SCA_RandomSensor.h"
+#include "SCA_XNORController.h"
+#include "SCA_XORController.h"
+#include "KX_IpoActuator.h"
+#include "KX_NearSensor.h"
+#include "KX_RadarSensor.h"
+#include "KX_RaySensor.h"
+#include "KX_SCA_DynamicActuator.h"
+#include "KX_SoundActuator.h"
+#include "KX_TouchSensor.h"
+#include "KX_VisibilityActuator.h"
+#include "SCA_PropertySensor.h"
+#include "SCA_PythonController.h"
+#include "SCA_RandomActuator.h"
+
+
+void initPyObjectPlusType(PyTypeObject **parents)
+{
+ int i;
+
+ for (i=0; parents[i]; i++) {
+ if(PyType_Ready(parents[i]) < 0) {
+ /* This is very very unlikely */
+ printf("Error, pytype could not initialize, Blender may crash \"%s\"\n", parents[i]->tp_name);
+ return;
+ }
+
+#if 0
+ PyObject_Print(reinterpret_cast<PyObject *>parents[i], stderr, 0);
+ fprintf(stderr, "\n");
+ PyObject_Print(parents[i]->tp_dict, stderr, 0);
+ fprintf(stderr, "\n\n");
+#endif
+
+ }
+
+ PyObject *dict= NULL;
+
+ while(i) {
+ i--;
+
+ if (dict) {
+ PyDict_Update(parents[i]->tp_dict, dict);
+ }
+ dict= parents[i]->tp_dict;
+
+#if 1
+ PyObject_Print(reinterpret_cast<PyObject *>(parents[i]), stderr, 0);
+ fprintf(stderr, "\n");
+ PyObject_Print(parents[i]->tp_dict, stderr, 0);
+ fprintf(stderr, "\n\n");
+#endif
+
+ }
+}
+
+
+
+
+static void PyType_Ready_ADD(PyObject *dict, PyTypeObject *tp, PyAttributeDef *attributes)
+{
+ PyAttributeDef *attr;
+ PyObject *item;
+
+ PyType_Ready(tp);
+ PyDict_SetItemString(dict, tp->tp_name, reinterpret_cast<PyObject *>(tp));
+
+ /* store attr defs in the tp_dict for to avoid string lookups */
+ for(attr= attributes; attr->m_name; attr++) {
+ item= PyCObject_FromVoidPtr(attr, NULL);
+ PyDict_SetItemString(tp->tp_dict, attr->m_name, item);
+ Py_DECREF(item);
+ }
+
+}
+
+
+#define PyType_Ready_Attr(d, n) PyType_Ready_ADD(d, &n::Type, n::Attributes)
+
+void initPyTypes(void)
+{
+
+/*
+ initPyObjectPlusType(BL_ActionActuator::Parents);
+ .....
+*/
+
+ /* For now just do PyType_Ready */
+ PyObject *mod= PyModule_New("GameTypes");
+ PyObject *dict= PyModule_GetDict(mod);
+ PyDict_SetItemString(PySys_GetObject((char *)"modules"), (char *)"GameTypes", mod);
+ Py_DECREF(mod);
+
+ PyType_Ready_Attr(dict, BL_ActionActuator);
+ PyType_Ready_Attr(dict, BL_Shader);
+ PyType_Ready_Attr(dict, BL_ShapeActionActuator);
+ PyType_Ready_Attr(dict, CListValue);
+ PyType_Ready_Attr(dict, CValue);
+ PyType_Ready_Attr(dict, KX_BlenderMaterial);
+ PyType_Ready_Attr(dict, KX_CDActuator);
+ PyType_Ready_Attr(dict, KX_Camera);
+ PyType_Ready_Attr(dict, KX_CameraActuator);
+ PyType_Ready_Attr(dict, KX_ConstraintActuator);
+ PyType_Ready_Attr(dict, KX_ConstraintWrapper);
+ PyType_Ready_Attr(dict, KX_GameActuator);
+ PyType_Ready_Attr(dict, KX_GameObject);
+ PyType_Ready_Attr(dict, KX_IpoActuator);
+ PyType_Ready_Attr(dict, KX_LightObject);
+ PyType_Ready_Attr(dict, KX_MeshProxy);
+ PyType_Ready_Attr(dict, KX_MouseFocusSensor);
+ PyType_Ready_Attr(dict, KX_NearSensor);
+ PyType_Ready_Attr(dict, KX_NetworkMessageActuator);
+ PyType_Ready_Attr(dict, KX_NetworkMessageSensor);
+ PyType_Ready_Attr(dict, KX_ObjectActuator);
+ PyType_Ready_Attr(dict, KX_ParentActuator);
+ PyType_Ready_Attr(dict, KX_PhysicsObjectWrapper);
+ PyType_Ready_Attr(dict, KX_PolyProxy);
+ PyType_Ready_Attr(dict, KX_PolygonMaterial);
+ PyType_Ready_Attr(dict, KX_RadarSensor);
+ PyType_Ready_Attr(dict, KX_RaySensor);
+ PyType_Ready_Attr(dict, KX_SCA_AddObjectActuator);
+ PyType_Ready_Attr(dict, KX_SCA_DynamicActuator);
+ PyType_Ready_Attr(dict, KX_SCA_EndObjectActuator);
+ PyType_Ready_Attr(dict, KX_SCA_ReplaceMeshActuator);
+ PyType_Ready_Attr(dict, KX_Scene);
+ PyType_Ready_Attr(dict, KX_SceneActuator);
+ PyType_Ready_Attr(dict, KX_SoundActuator);
+ PyType_Ready_Attr(dict, KX_StateActuator);
+ PyType_Ready_Attr(dict, KX_TouchSensor);
+ PyType_Ready_Attr(dict, KX_TrackToActuator);
+ PyType_Ready_Attr(dict, KX_VehicleWrapper);
+ PyType_Ready_Attr(dict, KX_VertexProxy);
+ PyType_Ready_Attr(dict, KX_VisibilityActuator);
+ PyType_Ready_Attr(dict, PyObjectPlus);
+ PyType_Ready_Attr(dict, SCA_2DFilterActuator);
+ PyType_Ready_Attr(dict, SCA_ANDController);
+ PyType_Ready_Attr(dict, SCA_ActuatorSensor);
+ PyType_Ready_Attr(dict, SCA_AlwaysSensor);
+ PyType_Ready_Attr(dict, SCA_DelaySensor);
+ PyType_Ready_Attr(dict, SCA_ILogicBrick);
+ PyType_Ready_Attr(dict, SCA_IObject);
+ PyType_Ready_Attr(dict, SCA_ISensor);
+ PyType_Ready_Attr(dict, SCA_JoystickSensor);
+ PyType_Ready_Attr(dict, SCA_KeyboardSensor);
+ PyType_Ready_Attr(dict, SCA_MouseSensor);
+ PyType_Ready_Attr(dict, SCA_NANDController);
+ PyType_Ready_Attr(dict, SCA_NORController);
+ PyType_Ready_Attr(dict, SCA_ORController);
+ PyType_Ready_Attr(dict, SCA_PropertyActuator);
+ PyType_Ready_Attr(dict, SCA_PropertySensor);
+ PyType_Ready_Attr(dict, SCA_PythonController);
+ PyType_Ready_Attr(dict, SCA_RandomActuator);
+ PyType_Ready_Attr(dict, SCA_RandomSensor);
+ PyType_Ready_Attr(dict, SCA_XNORController);
+ PyType_Ready_Attr(dict, SCA_XORController);
+
+
+
+}
+
+#endif \ No newline at end of file
diff --git a/source/gameengine/Ketsji/KX_PythonInitTypes.h b/source/gameengine/Ketsji/KX_PythonInitTypes.h
new file mode 100644
index 00000000000..6da79be9301
--- /dev/null
+++ b/source/gameengine/Ketsji/KX_PythonInitTypes.h
@@ -0,0 +1,35 @@
+/**
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): Campbell Barton
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifndef _adr_py_init_types_h_ // only process once,
+#define _adr_py_init_types_h_ // even if multiply included
+
+void initPyTypes(void);
+
+#endif
diff --git a/source/gameengine/Ketsji/KX_RadarSensor.cpp b/source/gameengine/Ketsji/KX_RadarSensor.cpp
index fa8998cd81d..8277e7ef19c 100644
--- a/source/gameengine/Ketsji/KX_RadarSensor.cpp
+++ b/source/gameengine/Ketsji/KX_RadarSensor.cpp
@@ -100,8 +100,9 @@ CValue* KX_RadarSensor::GetReplica()
//>m_sumoObj = new SM_Object(DT_NewCone(m_coneradius, m_coneheight),NULL,NULL,NULL);
//replica->m_sumoObj->setMargin(m_Margin);
//replica->m_sumoObj->setClientObject(replica->m_client_info);
-
- ((KX_GameObject*)replica->GetParent())->GetSGNode()->ComputeWorldTransforms(NULL);
+ //Wrong: see KX_TouchSensor
+ //bool parentUpdated = false;
+ //((KX_GameObject*)replica->GetParent())->GetSGNode()->ComputeWorldTransforms(NULL,parentUpdated);
replica->SynchronizeTransform();
return replica;
@@ -206,7 +207,7 @@ const char KX_RadarSensor::GetConeOrigin_doc[] =
"getConeOrigin()\n"
"\tReturns the origin of the cone with which to test. The origin\n"
"\tis in the middle of the cone.";
-PyObject* KX_RadarSensor::PyGetConeOrigin(PyObject* self) {
+PyObject* KX_RadarSensor::PyGetConeOrigin() {
ShowDeprecationWarning("getConeOrigin()", "the coneOrigin property");
PyObject *retVal = PyList_New(3);
@@ -222,7 +223,7 @@ PyObject* KX_RadarSensor::PyGetConeOrigin(PyObject* self) {
const char KX_RadarSensor::GetConeTarget_doc[] =
"getConeTarget()\n"
"\tReturns the center of the bottom face of the cone with which to test.\n";
-PyObject* KX_RadarSensor::PyGetConeTarget(PyObject* self) {
+PyObject* KX_RadarSensor::PyGetConeTarget() {
ShowDeprecationWarning("getConeTarget()", "the coneTarget property");
PyObject *retVal = PyList_New(3);
@@ -238,7 +239,7 @@ PyObject* KX_RadarSensor::PyGetConeTarget(PyObject* self) {
const char KX_RadarSensor::GetConeHeight_doc[] =
"getConeHeight()\n"
"\tReturns the height of the cone with which to test.\n";
-PyObject* KX_RadarSensor::PyGetConeHeight(PyObject* self) {
+PyObject* KX_RadarSensor::PyGetConeHeight() {
ShowDeprecationWarning("getConeHeight()", "the distance property");
@@ -250,22 +251,22 @@ PyObject* KX_RadarSensor::PyGetConeHeight(PyObject* self) {
/* Python Integration Hooks */
/* ------------------------------------------------------------------------- */
PyTypeObject KX_RadarSensor::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"KX_RadarSensor",
- sizeof(KX_RadarSensor),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0, //&MyPyCompare,
- __repr,
- 0, //&cvalue_as_number,
0,
0,
0,
- 0
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
PyParentObject KX_RadarSensor::Parents[] = {
@@ -298,20 +299,12 @@ PyAttributeDef KX_RadarSensor::Attributes[] = {
{NULL} //Sentinel
};
-PyObject* KX_RadarSensor::_getattr(const char *attr)
+PyObject* KX_RadarSensor::py_getattro(PyObject *attr)
{
- PyObject* object = _getattr_self(Attributes, this, attr);
- if (object != NULL)
- return object;
-
- _getattr_up(KX_NearSensor);
+ py_getattro_up(KX_NearSensor);
}
-int KX_RadarSensor::_setattr(const char *attr, PyObject* value)
+int KX_RadarSensor::py_setattro(PyObject *attr, PyObject* value)
{
- int ret = _setattr_self(Attributes, this, attr, value);
- if (ret >= 0)
- return ret;
-
- return KX_NearSensor::_setattr(attr, value);
+ py_setattro_up(KX_NearSensor);
}
diff --git a/source/gameengine/Ketsji/KX_RadarSensor.h b/source/gameengine/Ketsji/KX_RadarSensor.h
index 6dfe0c42f5d..c3a941696ce 100644
--- a/source/gameengine/Ketsji/KX_RadarSensor.h
+++ b/source/gameengine/Ketsji/KX_RadarSensor.h
@@ -89,8 +89,8 @@ public:
KX_RADAR_AXIS_NEG_Z
};
- virtual PyObject* _getattr(const char *attr);
- virtual int _setattr(const char *attr, PyObject* value);
+ virtual PyObject* py_getattro(PyObject *attr);
+ virtual int py_setattro(PyObject *attr, PyObject* value);
//Deprecated ----->
KX_PYMETHOD_DOC_NOARGS(KX_RadarSensor,GetConeOrigin);
diff --git a/source/gameengine/Ketsji/KX_RayCast.cpp b/source/gameengine/Ketsji/KX_RayCast.cpp
index 974d4b992a6..8c7612bf663 100644
--- a/source/gameengine/Ketsji/KX_RayCast.cpp
+++ b/source/gameengine/Ketsji/KX_RayCast.cpp
@@ -56,12 +56,15 @@ void KX_RayCast::reportHit(PHY_RayCastResult* result)
bool KX_RayCast::RayTest(PHY_IPhysicsEnvironment* physics_environment, const MT_Point3& _frompoint, const MT_Point3& topoint, KX_RayCast& callback)
{
+ if(physics_environment==NULL) return false; /* prevents crashing in some cases */
+
// Loops over all physics objects between frompoint and topoint,
// calling callback.RayHit for each one.
//
// callback.RayHit should return true to stop looking, or false to continue.
//
// returns true if an object was found, false if not.
+
MT_Point3 frompoint(_frompoint);
const MT_Vector3 todir( (topoint - frompoint).safe_normalized() );
MT_Point3 prevpoint(_frompoint+todir*(-1.f));
diff --git a/source/gameengine/Ketsji/KX_RaySensor.cpp b/source/gameengine/Ketsji/KX_RaySensor.cpp
index ce12b983147..06c04dbf10d 100644
--- a/source/gameengine/Ketsji/KX_RaySensor.cpp
+++ b/source/gameengine/Ketsji/KX_RaySensor.cpp
@@ -136,8 +136,13 @@ bool KX_RaySensor::RayHit(KX_ClientObjectInfo* client, KX_RayCast* result, void
{
m_rayHit = true;
m_hitObject = hitKXObj;
- m_hitPosition = result->m_hitPoint;
- m_hitNormal = result->m_hitNormal;
+ m_hitPosition[0] = result->m_hitPoint[0];
+ m_hitPosition[1] = result->m_hitPoint[1];
+ m_hitPosition[2] = result->m_hitPoint[2];
+
+ m_hitNormal[0] = result->m_hitNormal[0];
+ m_hitNormal[1] = result->m_hitNormal[1];
+ m_hitNormal[2] = result->m_hitNormal[2];
}
// no multi-hit search yet
@@ -180,8 +185,13 @@ bool KX_RaySensor::Evaluate(CValue* event)
bool reset = m_reset && m_level;
m_rayHit = false;
m_hitObject = NULL;
- m_hitPosition.setValue(0,0,0);
- m_hitNormal.setValue(1,0,0);
+ m_hitPosition[0] = 0;
+ m_hitPosition[1] = 0;
+ m_hitPosition[2] = 0;
+
+ m_hitNormal[0] = 1;
+ m_hitNormal[1] = 0;
+ m_hitNormal[2] = 0;
KX_GameObject* obj = (KX_GameObject*)GetParent();
MT_Point3 frompoint = obj->NodeGetWorldPosition();
@@ -236,7 +246,9 @@ bool KX_RaySensor::Evaluate(CValue* event)
}
}
todir.normalize();
- m_rayDirection = todir;
+ m_rayDirection[0] = todir[0];
+ m_rayDirection[1] = todir[1];
+ m_rayDirection[2] = todir[2];
MT_Point3 topoint = frompoint + (m_distance) * todir;
PHY_IPhysicsEnvironment* pe = m_scene->GetPhysicsEnvironment();
@@ -309,22 +321,23 @@ bool KX_RaySensor::Evaluate(CValue* event)
/* Integration hooks ------------------------------------------------------- */
PyTypeObject KX_RaySensor::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"KX_RaySensor",
- sizeof(KX_RaySensor),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0, //&MyPyCompare,
- __repr,
- 0, //&cvalue_as_number,
0,
0,
0,
- 0
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
+
};
PyParentObject KX_RaySensor::Parents[] = {
@@ -336,25 +349,47 @@ PyParentObject KX_RaySensor::Parents[] = {
};
PyMethodDef KX_RaySensor::Methods[] = {
+ // Deprecated ----->
{"getHitObject",(PyCFunction) KX_RaySensor::sPyGetHitObject,METH_NOARGS, (PY_METHODCHAR)GetHitObject_doc},
{"getHitPosition",(PyCFunction) KX_RaySensor::sPyGetHitPosition,METH_NOARGS, (PY_METHODCHAR)GetHitPosition_doc},
{"getHitNormal",(PyCFunction) KX_RaySensor::sPyGetHitNormal,METH_NOARGS, (PY_METHODCHAR)GetHitNormal_doc},
{"getRayDirection",(PyCFunction) KX_RaySensor::sPyGetRayDirection,METH_NOARGS, (PY_METHODCHAR)GetRayDirection_doc},
+ // <-----
{NULL,NULL} //Sentinel
};
PyAttributeDef KX_RaySensor::Attributes[] = {
+ KX_PYATTRIBUTE_BOOL_RW("useMaterial", KX_RaySensor, m_bFindMaterial),
+ KX_PYATTRIBUTE_BOOL_RW("useXRay", KX_RaySensor, m_bXRay),
+ KX_PYATTRIBUTE_FLOAT_RW("range", 0, 10000, KX_RaySensor, m_distance),
+ KX_PYATTRIBUTE_STRING_RW("property", 0, 100, false, KX_RaySensor, m_propertyname),
+ KX_PYATTRIBUTE_INT_RW("axis", 0, 5, true, KX_RaySensor, m_axis),
+ KX_PYATTRIBUTE_FLOAT_ARRAY_RO("hitPosition", KX_RaySensor, m_hitPosition, 3),
+ KX_PYATTRIBUTE_FLOAT_ARRAY_RO("rayDirection", KX_RaySensor, m_rayDirection, 3),
+ KX_PYATTRIBUTE_FLOAT_ARRAY_RO("hitNormal", KX_RaySensor, m_hitNormal, 3),
+ KX_PYATTRIBUTE_RO_FUNCTION("hitObject", KX_RaySensor, pyattr_get_hitobject),
{ NULL } //Sentinel
};
+PyObject* KX_RaySensor::pyattr_get_hitobject(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_RaySensor* self = static_cast<KX_RaySensor*>(self_v);
+ if (self->m_hitObject)
+ return self->m_hitObject->GetProxy();
+
+ Py_RETURN_NONE;
+}
+
+// Deprecated ----->
const char KX_RaySensor::GetHitObject_doc[] =
"getHitObject()\n"
"\tReturns the name of the object that was hit by this ray.\n";
-PyObject* KX_RaySensor::PyGetHitObject(PyObject* self)
+PyObject* KX_RaySensor::PyGetHitObject()
{
+ ShowDeprecationWarning("getHitObject()", "the hitObject property");
if (m_hitObject)
{
- return m_hitObject->AddRef();
+ return m_hitObject->GetProxy();
}
Py_RETURN_NONE;
}
@@ -363,29 +398,59 @@ PyObject* KX_RaySensor::PyGetHitObject(PyObject* self)
const char KX_RaySensor::GetHitPosition_doc[] =
"getHitPosition()\n"
"\tReturns the position (in worldcoordinates) where the object was hit by this ray.\n";
-PyObject* KX_RaySensor::PyGetHitPosition(PyObject* self)
+PyObject* KX_RaySensor::PyGetHitPosition()
{
- return PyObjectFrom(m_hitPosition);
+ ShowDeprecationWarning("getHitPosition()", "the hitPosition property");
+
+ PyObject *retVal = PyList_New(3);
+
+ PyList_SetItem(retVal, 0, PyFloat_FromDouble(m_hitPosition[0]));
+ PyList_SetItem(retVal, 1, PyFloat_FromDouble(m_hitPosition[1]));
+ PyList_SetItem(retVal, 2, PyFloat_FromDouble(m_hitPosition[2]));
+
+ return retVal;
}
const char KX_RaySensor::GetRayDirection_doc[] =
"getRayDirection()\n"
"\tReturns the direction from the ray (in worldcoordinates) .\n";
-PyObject* KX_RaySensor::PyGetRayDirection(PyObject* self)
+PyObject* KX_RaySensor::PyGetRayDirection()
{
- return PyObjectFrom(m_rayDirection);
+ ShowDeprecationWarning("getRayDirection()", "the rayDirection property");
+
+ PyObject *retVal = PyList_New(3);
+
+ PyList_SetItem(retVal, 0, PyFloat_FromDouble(m_rayDirection[0]));
+ PyList_SetItem(retVal, 1, PyFloat_FromDouble(m_rayDirection[1]));
+ PyList_SetItem(retVal, 2, PyFloat_FromDouble(m_rayDirection[2]));
+
+ return retVal;
}
const char KX_RaySensor::GetHitNormal_doc[] =
"getHitNormal()\n"
"\tReturns the normal (in worldcoordinates) of the object at the location where the object was hit by this ray.\n";
-PyObject* KX_RaySensor::PyGetHitNormal(PyObject* self)
+PyObject* KX_RaySensor::PyGetHitNormal()
{
- return PyObjectFrom(m_hitNormal);
+ ShowDeprecationWarning("getHitNormal()", "the hitNormal property");
+
+ PyObject *retVal = PyList_New(3);
+
+ PyList_SetItem(retVal, 0, PyFloat_FromDouble(m_hitNormal[0]));
+ PyList_SetItem(retVal, 1, PyFloat_FromDouble(m_hitNormal[1]));
+ PyList_SetItem(retVal, 2, PyFloat_FromDouble(m_hitNormal[2]));
+
+ return retVal;
}
-PyObject* KX_RaySensor::_getattr(const char *attr) {
- _getattr_up(SCA_ISensor);
+PyObject* KX_RaySensor::py_getattro(PyObject *attr) {
+ py_getattro_up(SCA_ISensor);
}
+
+int KX_RaySensor::py_setattro(PyObject *attr, PyObject *value) {
+ py_setattro_up(SCA_ISensor);
+}
+
+// <----- Deprecated
diff --git a/source/gameengine/Ketsji/KX_RaySensor.h b/source/gameengine/Ketsji/KX_RaySensor.h
index 09d8bc1369a..a5d7d15c60c 100644
--- a/source/gameengine/Ketsji/KX_RaySensor.h
+++ b/source/gameengine/Ketsji/KX_RaySensor.h
@@ -44,15 +44,15 @@ class KX_RaySensor : public SCA_ISensor
STR_String m_propertyname;
bool m_bFindMaterial;
bool m_bXRay;
- double m_distance;
+ float m_distance;
class KX_Scene* m_scene;
bool m_bTriggered;
int m_axis;
bool m_rayHit;
- MT_Point3 m_hitPosition;
+ float m_hitPosition[3];
SCA_IObject* m_hitObject;
- MT_Vector3 m_hitNormal;
- MT_Vector3 m_rayDirection;
+ float m_hitNormal[3];
+ float m_rayDirection[3];
public:
KX_RaySensor(class SCA_EventManager* eventmgr,
@@ -73,13 +73,31 @@ public:
bool RayHit(KX_ClientObjectInfo* client, KX_RayCast* result, void * const data);
bool NeedRayCast(KX_ClientObjectInfo* client);
+
+
+ //Python Interface
+ enum RayAxis {
+ KX_RAY_AXIS_POS_Y = 0,
+ KX_RAY_AXIS_POS_X,
+ KX_RAY_AXIS_POS_Z,
+ KX_RAY_AXIS_NEG_X,
+ KX_RAY_AXIS_NEG_Y,
+ KX_RAY_AXIS_NEG_Z
+ };
+
+
+ virtual PyObject* py_getattro(PyObject *attr);
+ virtual int py_setattro(PyObject *attr, PyObject *value);
+ // Deprecated ----->
KX_PYMETHOD_DOC_NOARGS(KX_RaySensor,GetHitObject);
KX_PYMETHOD_DOC_NOARGS(KX_RaySensor,GetHitPosition);
KX_PYMETHOD_DOC_NOARGS(KX_RaySensor,GetHitNormal);
KX_PYMETHOD_DOC_NOARGS(KX_RaySensor,GetRayDirection);
+ // <-----
- virtual PyObject* _getattr(const char *attr);
+ /* Attributes */
+ static PyObject* pyattr_get_hitobject(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
};
diff --git a/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.cpp b/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.cpp
index 68b704f4889..c45d89a2815 100644
--- a/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.cpp
+++ b/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.cpp
@@ -38,7 +38,6 @@
#include "SCA_IScene.h"
#include "KX_GameObject.h"
#include "KX_IPhysicsController.h"
-
#include "PyObjectPlus.h"
#ifdef HAVE_CONFIG_H
@@ -53,9 +52,9 @@ KX_SCA_AddObjectActuator::KX_SCA_AddObjectActuator(SCA_IObject *gameobj,
SCA_IObject *original,
int time,
SCA_IScene* scene,
- const MT_Vector3& linvel,
+ const float *linvel,
bool linv_local,
- const MT_Vector3& angvel,
+ const float *angvel,
bool angv_local,
PyTypeObject* T)
:
@@ -63,12 +62,16 @@ KX_SCA_AddObjectActuator::KX_SCA_AddObjectActuator(SCA_IObject *gameobj,
m_OriginalObject(original),
m_scene(scene),
- m_linear_velocity(linvel),
m_localLinvFlag(linv_local),
-
- m_angular_velocity(angvel),
m_localAngvFlag(angv_local)
{
+ m_linear_velocity[0] = linvel[0];
+ m_linear_velocity[1] = linvel[1];
+ m_linear_velocity[2] = linvel[2];
+ m_angular_velocity[0] = angvel[0];
+ m_angular_velocity[1] = angvel[1];
+ m_angular_velocity[2] = angvel[2];
+
if (m_OriginalObject)
m_OriginalObject->RegisterActuator(this);
@@ -163,31 +166,33 @@ void KX_SCA_AddObjectActuator::Relink(GEN_Map<GEN_HashedPtr, void*> *obj_map)
/* Integration hooks ------------------------------------------------------- */
PyTypeObject KX_SCA_AddObjectActuator::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"KX_SCA_AddObjectActuator",
- sizeof(KX_SCA_AddObjectActuator),
- 0,
- PyDestructor,
+ sizeof(PyObjectPlus_Proxy),
0,
- __getattr,
- __setattr,
- 0,
- __repr,
+ py_base_dealloc,
0,
0,
0,
0,
- 0
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
PyParentObject KX_SCA_AddObjectActuator::Parents[] = {
+ &KX_SCA_AddObjectActuator::Type,
&SCA_IActuator::Type,
&SCA_ILogicBrick::Type,
&CValue::Type,
NULL
};
PyMethodDef KX_SCA_AddObjectActuator::Methods[] = {
+ // ---> deprecated
{"setTime", (PyCFunction) KX_SCA_AddObjectActuator::sPySetTime, METH_O, (PY_METHODCHAR)SetTime_doc},
{"getTime", (PyCFunction) KX_SCA_AddObjectActuator::sPyGetTime, METH_NOARGS, (PY_METHODCHAR)GetTime_doc},
{"getLinearVelocity", (PyCFunction) KX_SCA_AddObjectActuator::sPyGetLinearVelocity, METH_NOARGS, (PY_METHODCHAR)GetLinearVelocity_doc},
@@ -196,8 +201,6 @@ PyMethodDef KX_SCA_AddObjectActuator::Methods[] = {
{"setAngularVelocity", (PyCFunction) KX_SCA_AddObjectActuator::sPySetAngularVelocity, METH_VARARGS, (PY_METHODCHAR)SetAngularVelocity_doc},
{"getLastCreatedObject", (PyCFunction) KX_SCA_AddObjectActuator::sPyGetLastCreatedObject, METH_NOARGS,"getLastCreatedObject() : get the object handle to the last created object\n"},
{"instantAddObject", (PyCFunction) KX_SCA_AddObjectActuator::sPyInstantAddObject, METH_NOARGS,"instantAddObject() : immediately add object without delay\n"},
-
- // ---> deprecated
{"setObject", (PyCFunction) KX_SCA_AddObjectActuator::sPySetObject, METH_O, (PY_METHODCHAR)SetObject_doc},
{"getObject", (PyCFunction) KX_SCA_AddObjectActuator::sPyGetObject, METH_VARARGS, (PY_METHODCHAR)GetObject_doc},
@@ -205,42 +208,60 @@ PyMethodDef KX_SCA_AddObjectActuator::Methods[] = {
};
PyAttributeDef KX_SCA_AddObjectActuator::Attributes[] = {
+ KX_PYATTRIBUTE_RW_FUNCTION("object",KX_SCA_AddObjectActuator,pyattr_get_object,pyattr_set_object),
+ KX_PYATTRIBUTE_RO_FUNCTION("objectLastCreated",KX_SCA_AddObjectActuator,pyattr_get_objectLastCreated),
+ KX_PYATTRIBUTE_INT_RW("time",0,2000,true,KX_SCA_AddObjectActuator,m_timeProp),
+ KX_PYATTRIBUTE_FLOAT_ARRAY_RW("linearVelocity",-FLT_MAX,FLT_MAX,KX_SCA_AddObjectActuator,m_linear_velocity,3),
+ KX_PYATTRIBUTE_FLOAT_ARRAY_RW("angularVelocity",-FLT_MAX,FLT_MAX,KX_SCA_AddObjectActuator,m_angular_velocity,3),
{ NULL } //Sentinel
};
-PyObject* KX_SCA_AddObjectActuator::_getattr(const char *attr)
+PyObject* KX_SCA_AddObjectActuator::pyattr_get_object(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef)
{
- if (!strcmp(attr, "object")) {
- if (!m_OriginalObject) Py_RETURN_NONE;
- else return m_OriginalObject->AddRef();
- } else if (!strcmp(attr, "objectLastCreated")) {
- if (!m_OriginalObject) Py_RETURN_NONE;
- else return m_lastCreatedObject->AddRef();
- }
-
- _getattr_up(SCA_IActuator);
+ KX_SCA_AddObjectActuator* actuator = static_cast<KX_SCA_AddObjectActuator*>(self);
+ if (!actuator->m_OriginalObject)
+ Py_RETURN_NONE;
+ else
+ return actuator->m_OriginalObject->GetProxy();
}
-int KX_SCA_AddObjectActuator::_setattr(const char *attr, PyObject* value) {
-
- if (!strcmp(attr, "object")) {
- KX_GameObject *gameobj;
+int KX_SCA_AddObjectActuator::pyattr_set_object(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_SCA_AddObjectActuator* actuator = static_cast<KX_SCA_AddObjectActuator*>(self);
+ KX_GameObject *gameobj;
- if (!ConvertPythonToGameObject(value, &gameobj, true))
- return 1; // ConvertPythonToGameObject sets the error
+ if (!ConvertPythonToGameObject(value, &gameobj, true, "actuator.object = value: KX_SCA_AddObjectActuator"))
+ return 1; // ConvertPythonToGameObject sets the error
- if (m_OriginalObject != NULL)
- m_OriginalObject->UnregisterActuator(this);
+ if (actuator->m_OriginalObject != NULL)
+ actuator->m_OriginalObject->UnregisterActuator(actuator);
- m_OriginalObject = (SCA_IObject*)gameobj;
+ actuator->m_OriginalObject = (SCA_IObject*)gameobj;
- if (m_OriginalObject)
- m_OriginalObject->RegisterActuator(this);
+ if (actuator->m_OriginalObject)
+ actuator->m_OriginalObject->RegisterActuator(actuator);
- return 0;
- }
-
- return SCA_IActuator::_setattr(attr, value);
+ return 0;
+}
+
+PyObject* KX_SCA_AddObjectActuator::pyattr_get_objectLastCreated(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_SCA_AddObjectActuator* actuator = static_cast<KX_SCA_AddObjectActuator*>(self);
+ if (!actuator->m_lastCreatedObject)
+ Py_RETURN_NONE;
+ else
+ return actuator->m_lastCreatedObject->GetProxy();
+}
+
+
+PyObject* KX_SCA_AddObjectActuator::py_getattro(PyObject *attr)
+{
+ py_getattro_up(SCA_IActuator);
+}
+
+int KX_SCA_AddObjectActuator::py_setattro(PyObject *attr, PyObject* value)
+{
+ py_setattro_up(SCA_IActuator);
}
/* 1. setObject */
@@ -249,13 +270,13 @@ const char KX_SCA_AddObjectActuator::SetObject_doc[] =
"\t- object: KX_GameObject, string or None\n"
"\tSets the object that will be added. There has to be an object\n"
"\tof this name. If not, this function does nothing.\n";
-PyObject* KX_SCA_AddObjectActuator::PySetObject(PyObject* self, PyObject* value)
+PyObject* KX_SCA_AddObjectActuator::PySetObject(PyObject* value)
{
KX_GameObject *gameobj;
ShowDeprecationWarning("setObject()", "the object property");
- if (!ConvertPythonToGameObject(value, &gameobj, true))
+ if (!ConvertPythonToGameObject(value, &gameobj, true, "actuator.setObject(value): KX_SCA_AddObjectActuator"))
return NULL; // ConvertPythonToGameObject sets the error
if (m_OriginalObject != NULL)
@@ -278,8 +299,9 @@ const char KX_SCA_AddObjectActuator::SetTime_doc[] =
"\tIf the duration is negative, it is set to 0.\n";
-PyObject* KX_SCA_AddObjectActuator::PySetTime(PyObject* self, PyObject* value)
+PyObject* KX_SCA_AddObjectActuator::PySetTime(PyObject* value)
{
+ ShowDeprecationWarning("setTime()", "the time property");
int deltatime = PyInt_AsLong(value);
if (deltatime==-1 && PyErr_Occurred()) {
PyErr_SetString(PyExc_TypeError, "expected an int");
@@ -296,12 +318,13 @@ PyObject* KX_SCA_AddObjectActuator::PySetTime(PyObject* self, PyObject* value)
/* 3. getTime */
const char KX_SCA_AddObjectActuator::GetTime_doc[] =
-"GetTime()\n"
+"getTime()\n"
"\tReturns the lifetime of the object that will be added.\n";
-PyObject* KX_SCA_AddObjectActuator::PyGetTime(PyObject* self)
+PyObject* KX_SCA_AddObjectActuator::PyGetTime()
{
+ ShowDeprecationWarning("getTime()", "the time property");
return PyInt_FromLong(m_timeProp);
}
@@ -311,13 +334,13 @@ const char KX_SCA_AddObjectActuator::GetObject_doc[] =
"getObject(name_only = 1)\n"
"name_only - optional arg, when true will return the KX_GameObject rather then its name\n"
"\tReturns the name of the object that will be added.\n";
-PyObject* KX_SCA_AddObjectActuator::PyGetObject(PyObject* self, PyObject* args)
+PyObject* KX_SCA_AddObjectActuator::PyGetObject(PyObject* args)
{
int ret_name_only = 1;
ShowDeprecationWarning("getObject()", "the object property");
- if (!PyArg_ParseTuple(args, "|i", &ret_name_only))
+ if (!PyArg_ParseTuple(args, "|i:getObject", &ret_name_only))
return NULL;
if (!m_OriginalObject)
@@ -326,7 +349,7 @@ PyObject* KX_SCA_AddObjectActuator::PyGetObject(PyObject* self, PyObject* args)
if (ret_name_only)
return PyString_FromString(m_OriginalObject->GetName());
else
- return m_OriginalObject->AddRef();
+ return m_OriginalObject->GetProxy();
}
@@ -337,8 +360,9 @@ const char KX_SCA_AddObjectActuator::GetLinearVelocity_doc[] =
"\tReturns the linear velocity that will be assigned to \n"
"\tthe created object.\n";
-PyObject* KX_SCA_AddObjectActuator::PyGetLinearVelocity(PyObject* self)
+PyObject* KX_SCA_AddObjectActuator::PyGetLinearVelocity()
{
+ ShowDeprecationWarning("getLinearVelocity()", "the linearVelocity property");
PyObject *retVal = PyList_New(3);
PyList_SET_ITEM(retVal, 0, PyFloat_FromDouble(m_linear_velocity[0]));
@@ -359,14 +383,17 @@ const char KX_SCA_AddObjectActuator::SetLinearVelocity_doc[] =
"\t- local: bool\n"
"\tAssign this velocity to the created object. \n";
-PyObject* KX_SCA_AddObjectActuator::PySetLinearVelocity(PyObject* self, PyObject* args)
+PyObject* KX_SCA_AddObjectActuator::PySetLinearVelocity(PyObject* args)
{
+ ShowDeprecationWarning("setLinearVelocity()", "the linearVelocity property");
float vecArg[3];
- if (!PyArg_ParseTuple(args, "fff", &vecArg[0], &vecArg[1], &vecArg[2]))
+ if (!PyArg_ParseTuple(args, "fff:setLinearVelocity", &vecArg[0], &vecArg[1], &vecArg[2]))
return NULL;
- m_linear_velocity.setValue(vecArg);
+ m_linear_velocity[0] = vecArg[0];
+ m_linear_velocity[1] = vecArg[1];
+ m_linear_velocity[2] = vecArg[2];
Py_RETURN_NONE;
}
@@ -376,8 +403,9 @@ const char KX_SCA_AddObjectActuator::GetAngularVelocity_doc[] =
"\tReturns the angular velocity that will be assigned to \n"
"\tthe created object.\n";
-PyObject* KX_SCA_AddObjectActuator::PyGetAngularVelocity(PyObject* self)
+PyObject* KX_SCA_AddObjectActuator::PyGetAngularVelocity()
{
+ ShowDeprecationWarning("getAngularVelocity()", "the angularVelocity property");
PyObject *retVal = PyList_New(3);
PyList_SET_ITEM(retVal, 0, PyFloat_FromDouble(m_angular_velocity[0]));
@@ -398,14 +426,17 @@ const char KX_SCA_AddObjectActuator::SetAngularVelocity_doc[] =
"\t- local: bool\n"
"\tAssign this angular velocity to the created object. \n";
-PyObject* KX_SCA_AddObjectActuator::PySetAngularVelocity(PyObject* self, PyObject* args)
+PyObject* KX_SCA_AddObjectActuator::PySetAngularVelocity(PyObject* args)
{
+ ShowDeprecationWarning("setAngularVelocity()", "the angularVelocity property");
float vecArg[3];
- if (!PyArg_ParseTuple(args, "fff", &vecArg[0], &vecArg[1], &vecArg[2]))
+ if (!PyArg_ParseTuple(args, "fff:setAngularVelocity", &vecArg[0], &vecArg[1], &vecArg[2]))
return NULL;
- m_angular_velocity.setValue(vecArg);
+ m_angular_velocity[0] = vecArg[0];
+ m_angular_velocity[1] = vecArg[1];
+ m_angular_velocity[2] = vecArg[2];
Py_RETURN_NONE;
}
@@ -417,7 +448,7 @@ void KX_SCA_AddObjectActuator::InstantAddObject()
// Now it needs to be added to the current scene.
SCA_IObject* replica = m_scene->AddReplicaObject(m_OriginalObject,GetParent(),m_timeProp );
KX_GameObject * game_obj = static_cast<KX_GameObject *>(replica);
- game_obj->setLinearVelocity(m_linear_velocity,m_localLinvFlag);
+ game_obj->setLinearVelocity(m_linear_velocity ,m_localLinvFlag);
game_obj->setAngularVelocity(m_angular_velocity,m_localAngvFlag);
game_obj->ResolveCombinedVelocities(m_linear_velocity, m_angular_velocity, m_localLinvFlag, m_localAngvFlag);
@@ -436,7 +467,7 @@ void KX_SCA_AddObjectActuator::InstantAddObject()
}
}
-PyObject* KX_SCA_AddObjectActuator::PyInstantAddObject(PyObject* self)
+PyObject* KX_SCA_AddObjectActuator::PyInstantAddObject()
{
InstantAddObject();
@@ -451,16 +482,16 @@ const char KX_SCA_AddObjectActuator::GetLastCreatedObject_doc[] =
"\tReturn the last created object. \n";
-PyObject* KX_SCA_AddObjectActuator::PyGetLastCreatedObject(PyObject* self)
+PyObject* KX_SCA_AddObjectActuator::PyGetLastCreatedObject()
{
+ ShowDeprecationWarning("getLastCreatedObject()", "the objectLastCreated property");
SCA_IObject* result = this->GetLastCreatedObject();
// if result->GetSGNode() is NULL
// it means the object has ended, The BGE python api crashes in many places if the object is returned.
if (result && (static_cast<KX_GameObject *>(result))->GetSGNode())
{
- result->AddRef();
- return result;
+ return result->GetProxy();
}
// don't return NULL to python anymore, it gives trouble in the scripts
Py_RETURN_NONE;
diff --git a/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.h b/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.h
index 18298cbcb0c..4ece5a6d83b 100644
--- a/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.h
+++ b/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.h
@@ -59,12 +59,12 @@ class KX_SCA_AddObjectActuator : public SCA_IActuator
SCA_IScene* m_scene;
/// Linear velocity upon creation of the object.
- MT_Vector3 m_linear_velocity;
+ float m_linear_velocity[3];
/// Apply the velocity locally
bool m_localLinvFlag;
/// Angular velocity upon creation of the object.
- MT_Vector3 m_angular_velocity;
+ float m_angular_velocity[3];
/// Apply the velocity locally
bool m_localAngvFlag;
@@ -85,9 +85,9 @@ public:
SCA_IObject *original,
int time,
SCA_IScene* scene,
- const MT_Vector3& linvel,
+ const float *linvel,
bool linv_local,
- const MT_Vector3& angvel,
+ const float *angvel,
bool angv_local,
PyTypeObject* T=&Type
);
@@ -110,8 +110,8 @@ public:
virtual bool
Update();
- virtual PyObject* _getattr(const char *attr);
- virtual int _setattr(const char *attr, PyObject* value);
+ virtual PyObject* py_getattro(PyObject *attr);
+ virtual int py_setattro(PyObject *attr, PyObject* value);
SCA_IObject*
GetLastCreatedObject(
@@ -140,6 +140,9 @@ public:
/* 10. instantAddObject*/
KX_PYMETHOD_DOC_NOARGS(KX_SCA_AddObjectActuator,InstantAddObject);
+ static PyObject* pyattr_get_object(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
+ static int pyattr_set_object(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+ static PyObject* pyattr_get_objectLastCreated(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
}; /* end of class KX_SCA_AddObjectActuator : public KX_EditObjectActuator */
diff --git a/source/gameengine/Ketsji/KX_SCA_DynamicActuator.cpp b/source/gameengine/Ketsji/KX_SCA_DynamicActuator.cpp
index 394bb667728..83dfdc2484c 100644
--- a/source/gameengine/Ketsji/KX_SCA_DynamicActuator.cpp
+++ b/source/gameengine/Ketsji/KX_SCA_DynamicActuator.cpp
@@ -49,25 +49,23 @@
PyTypeObject
-KX_SCA_DynamicActuator::
-
-Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+KX_SCA_DynamicActuator::Type = {
+ PyObject_HEAD_INIT(NULL)
0,
"KX_SCA_DynamicActuator",
- sizeof(KX_SCA_DynamicActuator),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0,
- __repr,
- 0,
0,
0,
0,
- 0
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
PyParentObject KX_SCA_DynamicActuator::Parents[] = {
@@ -80,21 +78,28 @@ PyParentObject KX_SCA_DynamicActuator::Parents[] = {
PyMethodDef KX_SCA_DynamicActuator::Methods[] = {
+ // ---> deprecated
KX_PYMETHODTABLE(KX_SCA_DynamicActuator, setOperation),
KX_PYMETHODTABLE(KX_SCA_DynamicActuator, getOperation),
{NULL,NULL} //Sentinel
};
PyAttributeDef KX_SCA_DynamicActuator::Attributes[] = {
+ KX_PYATTRIBUTE_SHORT_RW("operation",0,4,false,KX_SCA_DynamicActuator,m_dyn_operation),
+ KX_PYATTRIBUTE_FLOAT_RW("mass",0.0,FLT_MAX,KX_SCA_DynamicActuator,m_setmass),
{ NULL } //Sentinel
};
-PyObject* KX_SCA_DynamicActuator::_getattr(const char *attr)
+PyObject* KX_SCA_DynamicActuator::py_getattro(PyObject *attr)
{
- _getattr_up(SCA_IActuator);
+ py_getattro_up(SCA_IActuator);
}
+int KX_SCA_DynamicActuator::py_setattro(PyObject *attr, PyObject* value)
+{
+ py_setattro_up(SCA_IActuator);
+}
/* 1. setOperation */
@@ -107,9 +112,10 @@ KX_PYMETHODDEF_DOC(KX_SCA_DynamicActuator, setOperation,
"\t 3 = disable rigid body\n"
"Change the dynamic status of the parent object.\n")
{
+ ShowDeprecationWarning("setOperation()", "the operation property");
int dyn_operation;
- if (!PyArg_ParseTuple(args, "i", &dyn_operation))
+ if (!PyArg_ParseTuple(args, "i:setOperation", &dyn_operation))
{
return NULL;
}
@@ -126,6 +132,7 @@ KX_PYMETHODDEF_DOC(KX_SCA_DynamicActuator, getOperation,
"Returns the operation type of this actuator.\n"
)
{
+ ShowDeprecationWarning("getOperation()", "the operation property");
return PyInt_FromLong((long)m_dyn_operation);
}
diff --git a/source/gameengine/Ketsji/KX_SCA_DynamicActuator.h b/source/gameengine/Ketsji/KX_SCA_DynamicActuator.h
index a82cddd66a7..99855124bdb 100644
--- a/source/gameengine/Ketsji/KX_SCA_DynamicActuator.h
+++ b/source/gameengine/Ketsji/KX_SCA_DynamicActuator.h
@@ -64,7 +64,18 @@ class KX_SCA_DynamicActuator : public SCA_IActuator
virtual bool
Update();
- virtual PyObject* _getattr(const char *attr);
+ //Python Interface
+ enum DynamicOperation {
+ KX_DYN_RESTORE_DYNAMICS = 0,
+ KX_DYN_DISABLE_DYNAMICS,
+ KX_DYN_ENABLE_RIGID_BODY,
+ KX_DYN_DISABLE_RIGID_BODY,
+ KX_DYN_SET_MASS,
+ };
+
+
+ virtual PyObject* py_getattro(PyObject *attr);
+ virtual int py_setattro(PyObject *attr, PyObject *value);
/* 1. setOperation */
KX_PYMETHOD_DOC(KX_SCA_DynamicActuator,setOperation);
diff --git a/source/gameengine/Ketsji/KX_SCA_EndObjectActuator.cpp b/source/gameengine/Ketsji/KX_SCA_EndObjectActuator.cpp
index 9268a1df5f0..3b42577810e 100644
--- a/source/gameengine/Ketsji/KX_SCA_EndObjectActuator.cpp
+++ b/source/gameengine/Ketsji/KX_SCA_EndObjectActuator.cpp
@@ -94,22 +94,22 @@ CValue* KX_SCA_EndObjectActuator::GetReplica()
/* ------------------------------------------------------------------------- */
PyTypeObject KX_SCA_EndObjectActuator::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"KX_SCA_EndObjectActuator",
- sizeof(KX_SCA_EndObjectActuator),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0, //&MyPyCompare,
- __repr,
- 0, //&cvalue_as_number,
0,
0,
0,
- 0
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
@@ -131,9 +131,9 @@ PyAttributeDef KX_SCA_EndObjectActuator::Attributes[] = {
{ NULL } //Sentinel
};
-PyObject* KX_SCA_EndObjectActuator::_getattr(const char *attr)
+PyObject* KX_SCA_EndObjectActuator::py_getattro(PyObject *attr)
{
- _getattr_up(SCA_IActuator);
+ py_getattro_up(SCA_IActuator);
}
/* eof */
diff --git a/source/gameengine/Ketsji/KX_SCA_EndObjectActuator.h b/source/gameengine/Ketsji/KX_SCA_EndObjectActuator.h
index 12118743f0a..2940246f443 100644
--- a/source/gameengine/Ketsji/KX_SCA_EndObjectActuator.h
+++ b/source/gameengine/Ketsji/KX_SCA_EndObjectActuator.h
@@ -64,7 +64,7 @@ class KX_SCA_EndObjectActuator : public SCA_IActuator
/* Python interface ---------------------------------------------------- */
/* --------------------------------------------------------------------- */
- virtual PyObject* _getattr(const char *attr);
+ virtual PyObject* py_getattro(PyObject *attr);
}; /* end of class KX_EditObjectActuator : public SCA_PropertyActuator */
diff --git a/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.cpp b/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.cpp
index 502990b2b27..38f8d581d55 100644
--- a/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.cpp
+++ b/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.cpp
@@ -36,6 +36,7 @@
// Please look here for revision history.
#include "KX_SCA_ReplaceMeshActuator.h"
+#include "KX_MeshProxy.h"
#include "PyObjectPlus.h"
@@ -51,28 +52,27 @@
PyTypeObject
-KX_SCA_ReplaceMeshActuator::
-
-Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+KX_SCA_ReplaceMeshActuator::Type = {
+ PyObject_HEAD_INIT(NULL)
0,
"KX_SCA_ReplaceMeshActuator",
- sizeof(KX_SCA_ReplaceMeshActuator),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0,
- __repr,
- 0,
0,
0,
0,
- 0
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
PyParentObject KX_SCA_ReplaceMeshActuator::Parents[] = {
+ &KX_SCA_ReplaceMeshActuator::Type,
&SCA_IActuator::Type,
&SCA_ILogicBrick::Type,
&CValue::Type,
@@ -82,23 +82,48 @@ PyParentObject KX_SCA_ReplaceMeshActuator::Parents[] = {
PyMethodDef KX_SCA_ReplaceMeshActuator::Methods[] = {
- {"setMesh", (PyCFunction) KX_SCA_ReplaceMeshActuator::sPySetMesh, METH_O, (PY_METHODCHAR)SetMesh_doc},
-
KX_PYMETHODTABLE(KX_SCA_ReplaceMeshActuator, instantReplaceMesh),
+ // Deprecated ----->
+ {"setMesh", (PyCFunction) KX_SCA_ReplaceMeshActuator::sPySetMesh, METH_O, (PY_METHODCHAR)SetMesh_doc},
KX_PYMETHODTABLE(KX_SCA_ReplaceMeshActuator, getMesh),
{NULL,NULL} //Sentinel
};
PyAttributeDef KX_SCA_ReplaceMeshActuator::Attributes[] = {
+ KX_PYATTRIBUTE_RW_FUNCTION("mesh", KX_SCA_ReplaceMeshActuator, pyattr_get_mesh, pyattr_set_mesh),
{ NULL } //Sentinel
};
-PyObject* KX_SCA_ReplaceMeshActuator::_getattr(const char *attr)
+PyObject* KX_SCA_ReplaceMeshActuator::py_getattro(PyObject *attr)
{
- _getattr_up(SCA_IActuator);
+ py_getattro_up(SCA_IActuator);
}
+int KX_SCA_ReplaceMeshActuator::py_setattro(PyObject *attr, PyObject* value)
+{
+ py_setattro_up(SCA_IActuator);
+}
+
+PyObject* KX_SCA_ReplaceMeshActuator::pyattr_get_mesh(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_SCA_ReplaceMeshActuator* actuator = static_cast<KX_SCA_ReplaceMeshActuator*>(self);
+ if (!actuator->m_mesh)
+ Py_RETURN_NONE;
+ KX_MeshProxy* meshproxy = new KX_MeshProxy(actuator->m_mesh);
+ return meshproxy->NewProxy(true);
+}
+int KX_SCA_ReplaceMeshActuator::pyattr_set_mesh(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_SCA_ReplaceMeshActuator* actuator = static_cast<KX_SCA_ReplaceMeshActuator*>(self);
+ RAS_MeshObject* new_mesh;
+
+ if (!ConvertPythonToMesh(value, &new_mesh, true, "actuator.mesh = value: KX_SCA_ReplaceMeshActuator"))
+ return 1;
+
+ actuator->m_mesh = new_mesh;
+ return 0;
+}
/* 1. setMesh */
const char KX_SCA_ReplaceMeshActuator::SetMesh_doc[] =
@@ -106,25 +131,15 @@ const char KX_SCA_ReplaceMeshActuator::SetMesh_doc[] =
"\t- name: string or None\n"
"\tSet the mesh that will be substituted for the current one.\n";
-PyObject* KX_SCA_ReplaceMeshActuator::PySetMesh(PyObject* self, PyObject* value)
+PyObject* KX_SCA_ReplaceMeshActuator::PySetMesh(PyObject* value)
{
- if (value == Py_None) {
- m_mesh = NULL;
- } else {
- char* meshname = PyString_AsString(value);
- if (!meshname) {
- PyErr_SetString(PyExc_ValueError, "Expected the name of a mesh or None");
- return NULL;
- }
- void* mesh = SCA_ILogicBrick::m_sCurrentLogicManager->GetMeshByName(STR_String(meshname));
-
- if (mesh==NULL) {
- PyErr_SetString(PyExc_ValueError, "The mesh name given does not exist");
- return NULL;
- }
- m_mesh= (class RAS_MeshObject*)mesh;
- }
+ ShowDeprecationWarning("setMesh()", "the mesh property");
+ RAS_MeshObject* new_mesh;
+
+ if (!ConvertPythonToMesh(value, &new_mesh, true, "actuator.mesh = value: KX_SCA_ReplaceMeshActuator"))
+ return NULL;
+ m_mesh = new_mesh;
Py_RETURN_NONE;
}
@@ -133,6 +148,7 @@ KX_PYMETHODDEF_DOC(KX_SCA_ReplaceMeshActuator, getMesh,
"Returns the name of the mesh to be substituted.\n"
)
{
+ ShowDeprecationWarning("getMesh()", "the mesh property");
if (!m_mesh)
Py_RETURN_NONE;
diff --git a/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.h b/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.h
index 0ba60650683..7a18df2356d 100644
--- a/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.h
+++ b/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.h
@@ -69,9 +69,14 @@ class KX_SCA_ReplaceMeshActuator : public SCA_IActuator
virtual bool
Update();
- virtual PyObject* _getattr(const char *attr);
void InstantReplaceMesh();
+ virtual PyObject* py_getattro(PyObject *attr);
+ virtual int py_setattro(PyObject *attr, PyObject* value);
+
+ static PyObject* pyattr_get_mesh(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
+ static int pyattr_set_mesh(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+
/* 1. setMesh */
KX_PYMETHOD_DOC_O(KX_SCA_ReplaceMeshActuator,SetMesh);
KX_PYMETHOD_DOC(KX_SCA_ReplaceMeshActuator,getMesh);
diff --git a/source/gameengine/Ketsji/KX_SG_BoneParentNodeRelationship.cpp b/source/gameengine/Ketsji/KX_SG_BoneParentNodeRelationship.cpp
index 151270cbd68..0e7571031e8 100644
--- a/source/gameengine/Ketsji/KX_SG_BoneParentNodeRelationship.cpp
+++ b/source/gameengine/Ketsji/KX_SG_BoneParentNodeRelationship.cpp
@@ -57,7 +57,8 @@ New(Bone* bone
KX_BoneParentRelation::
UpdateChildCoordinates(
SG_Spatial * child,
- const SG_Spatial * parent
+ const SG_Spatial * parent,
+ bool& parentUpdated
){
MT_assert(child != NULL);
@@ -67,6 +68,8 @@ UpdateChildCoordinates(
const MT_Vector3 & child_scale = child->GetLocalScale();
const MT_Point3 & child_pos = child->GetLocalPosition();
const MT_Matrix3x3 & child_rotation = child->GetLocalOrientation();
+ // we don't know if the armature has been updated or not, assume yes
+ parentUpdated = true;
// the childs world locations which we will update.
@@ -122,7 +125,7 @@ UpdateChildCoordinates(
else {
child->SetWorldFromLocalTransform();
}
-
+ child->SetModified(false);
return valid_parent_transform;
}
diff --git a/source/gameengine/Ketsji/KX_SG_BoneParentNodeRelationship.h b/source/gameengine/Ketsji/KX_SG_BoneParentNodeRelationship.h
index 2a19d8a1784..c9baf228855 100644
--- a/source/gameengine/Ketsji/KX_SG_BoneParentNodeRelationship.h
+++ b/source/gameengine/Ketsji/KX_SG_BoneParentNodeRelationship.h
@@ -82,7 +82,8 @@ public :
bool
UpdateChildCoordinates(
SG_Spatial * child,
- const SG_Spatial * parent
+ const SG_Spatial * parent,
+ bool& parentUpdated
);
/**
diff --git a/source/gameengine/Ketsji/KX_SG_NodeRelationships.cpp b/source/gameengine/Ketsji/KX_SG_NodeRelationships.cpp
index 0729ec8a902..c3b0c21c8e0 100644
--- a/source/gameengine/Ketsji/KX_SG_NodeRelationships.cpp
+++ b/source/gameengine/Ketsji/KX_SG_NodeRelationships.cpp
@@ -51,13 +51,20 @@ New(
KX_NormalParentRelation::
UpdateChildCoordinates(
SG_Spatial * child,
- const SG_Spatial * parent
+ const SG_Spatial * parent,
+ bool& parentUpdated
){
MT_assert(child != NULL);
+ if (!parentUpdated && !child->IsModified())
+ return false;
+
+ parentUpdated = true;
+
if (parent==NULL) { /* Simple case */
child->SetWorldFromLocalTransform();
- return false;
+ child->SetModified(false);
+ return true; //false;
}
else {
// the childs world locations which we will update.
@@ -68,6 +75,7 @@ UpdateChildCoordinates(
child->SetWorldScale(p_world_scale * child->GetLocalScale());
child->SetWorldOrientation(p_world_rotation * child->GetLocalOrientation());
child->SetWorldPosition(p_world_pos + p_world_scale * (p_world_rotation * child->GetLocalPosition()));
+ child->SetModified(false);
return true;
}
}
@@ -112,10 +120,15 @@ New(
KX_VertexParentRelation::
UpdateChildCoordinates(
SG_Spatial * child,
- const SG_Spatial * parent
+ const SG_Spatial * parent,
+ bool& parentUpdated
){
MT_assert(child != NULL);
+
+ if (!parentUpdated && !child->IsModified())
+ return false;
+
child->SetWorldScale(child->GetLocalScale());
if (parent)
@@ -124,7 +137,8 @@ UpdateChildCoordinates(
child->SetWorldPosition(child->GetLocalPosition());
child->SetWorldOrientation(child->GetLocalOrientation());
- return parent != NULL;
+ child->SetModified(false);
+ return true; //parent != NULL;
}
/**
@@ -172,10 +186,14 @@ New(
KX_SlowParentRelation::
UpdateChildCoordinates(
SG_Spatial * child,
- const SG_Spatial * parent
+ const SG_Spatial * parent,
+ bool& parentUpdated
){
MT_assert(child != NULL);
+ // the child will move even if the parent is not
+ parentUpdated = true;
+
const MT_Vector3 & child_scale = child->GetLocalScale();
const MT_Point3 & child_pos = child->GetLocalPosition();
const MT_Matrix3x3 & child_rotation = child->GetLocalOrientation();
@@ -217,23 +235,12 @@ UpdateChildCoordinates(
// now 'interpolate' the normal coordinates with the last
// world coordinates to get the new world coordinates.
- // problem 1:
- // The child world scale needs to be initialized in some way for this
- // to make sense
- // problem 2:
- // This is way of doing interpolation is nonsense
-
- int i;
-
MT_Scalar weight = MT_Scalar(1)/(m_relax + 1);
- for (i=0;i <3 ;i++) {
- child_w_scale[i] = (m_relax * child_w_scale[i] + child_n_scale[i]) * weight;
- child_w_pos[i] = (m_relax * child_w_pos[i] + child_n_pos[i]) * weight;
- child_w_rotation[0][i] = (m_relax * child_w_rotation[0][i] + child_n_rotation[0][i]) * weight;
- child_w_rotation[1][i] = (m_relax * child_w_rotation[1][i] + child_n_rotation[1][i]) * weight;
- child_w_rotation[2][i] = (m_relax * child_w_rotation[2][i] + child_n_rotation[2][i]) * weight;
- }
-
+ child_w_scale = (m_relax * child_w_scale + child_n_scale) * weight;
+ child_w_pos = (m_relax * child_w_pos + child_n_pos) * weight;
+ // for rotation we must go through quaternion
+ MT_Quaternion child_w_quat = child_w_rotation.getRotation().slerp(child_n_rotation.getRotation(), weight);
+ child_w_rotation.setRotation(child_w_quat);
//FIXME: update physics controller.
} else {
child_w_scale = child_n_scale;
@@ -252,8 +259,9 @@ UpdateChildCoordinates(
child->SetWorldScale(child_w_scale);
child->SetWorldPosition(child_w_pos);
child->SetWorldOrientation(child_w_rotation);
+ child->SetModified(false);
- return parent != NULL;
+ return true; //parent != NULL;
}
/**
diff --git a/source/gameengine/Ketsji/KX_SG_NodeRelationships.h b/source/gameengine/Ketsji/KX_SG_NodeRelationships.h
index faa650106c8..d8fb9211f21 100644
--- a/source/gameengine/Ketsji/KX_SG_NodeRelationships.h
+++ b/source/gameengine/Ketsji/KX_SG_NodeRelationships.h
@@ -71,7 +71,8 @@ public :
bool
UpdateChildCoordinates(
SG_Spatial * child,
- const SG_Spatial * parent
+ const SG_Spatial * parent,
+ bool& parentUpdated
);
/**
@@ -115,7 +116,8 @@ public :
bool
UpdateChildCoordinates(
SG_Spatial * child,
- const SG_Spatial * parent
+ const SG_Spatial * parent,
+ bool& parentUpdated
);
/**
@@ -166,7 +168,8 @@ public :
bool
UpdateChildCoordinates(
SG_Spatial * child,
- const SG_Spatial * parent
+ const SG_Spatial * parent,
+ bool& parentUpdated
);
/**
diff --git a/source/gameengine/Ketsji/KX_Scene.cpp b/source/gameengine/Ketsji/KX_Scene.cpp
index 0fded15f1a1..aa7bd65f240 100644
--- a/source/gameengine/Ketsji/KX_Scene.cpp
+++ b/source/gameengine/Ketsji/KX_Scene.cpp
@@ -32,7 +32,6 @@
#pragma warning (disable : 4786)
#endif //WIN32
-
#include "KX_Scene.h"
#include "MT_assert.h"
@@ -77,7 +76,9 @@
#include "NG_NetworkScene.h"
#include "PHY_IPhysicsEnvironment.h"
#include "KX_IPhysicsController.h"
+#include "PHY_IGraphicController.h"
#include "KX_BlenderSceneConverter.h"
+#include "KX_MotionState.h"
#include "BL_ShapeDeformer.h"
#include "BL_DeformableGameObject.h"
@@ -90,6 +91,8 @@
#include "CcdPhysicsController.h"
#endif
+#include "KX_Light.h"
+
void* KX_SceneReplicationFunc(SG_IObject* node,void* gameobj,void* scene)
{
KX_GameObject* replica = ((KX_Scene*)scene)->AddNodeReplicaObject(node,(KX_GameObject*)gameobj);
@@ -134,6 +137,8 @@ KX_Scene::KX_Scene(class SCA_IInputDevice* keyboarddevice,
m_suspendedtime = 0.0;
m_suspendeddelta = 0.0;
+ m_dbvt_culling = false;
+ m_dbvt_occlusion_res = 0;
m_activity_culling = false;
m_suspend = false;
m_isclearingZbuffer = true;
@@ -191,7 +196,7 @@ KX_Scene::KX_Scene(class SCA_IInputDevice* keyboarddevice,
m_canvasDesignWidth = 0;
m_canvasDesignHeight = 0;
- m_attrlist = PyDict_New(); /* new ref */
+ m_attr_dict = PyDict_New(); /* new ref */
}
@@ -245,7 +250,8 @@ KX_Scene::~KX_Scene()
{
delete m_bucketmanager;
}
- //Py_DECREF(m_attrlist);
+ PyDict_Clear(m_attr_dict);
+ Py_DECREF(m_attr_dict);
}
void KX_Scene::SetProjectionMatrix(MT_CmMatrix4x4& pmat)
@@ -408,6 +414,13 @@ void KX_Scene::RemoveNodeDestructObject(class SG_IObject* node,class CValue* gam
// will in any case be deleted. This ensures that the object will not try to use the node
// when it is finally deleted (see KX_GameObject destructor)
orgobj->SetSGNode(NULL);
+ PHY_IGraphicController* ctrl = orgobj->GetGraphicController();
+ if (ctrl)
+ {
+ // a graphic controller is set, we must delete it as the node will be deleted
+ delete ctrl;
+ orgobj->SetGraphicController(NULL);
+ }
}
if (node)
delete node;
@@ -486,7 +499,14 @@ KX_GameObject* KX_Scene::AddNodeReplicaObject(class SG_IObject* node, class CVal
replicanode->AddSGController(replicacontroller);
}
}
-
+ // replicate graphic controller
+ if (orgobj->GetGraphicController())
+ {
+ PHY_IMotionState* motionstate = new KX_MotionState(newobj->GetSGNode());
+ PHY_IGraphicController* newctrl = orgobj->GetGraphicController()->GetReplica(motionstate);
+ newctrl->setNewClientInfo(newobj->getClientInfo());
+ newobj->SetGraphicController(newctrl);
+ }
return newobj;
}
@@ -698,9 +718,9 @@ void KX_Scene::DupliGroupRecurse(CValue* obj, int level)
MT_Matrix3x3 newori = groupobj->NodeGetWorldOrientation() * gameobj->NodeGetWorldOrientation();
replica->NodeSetLocalOrientation(newori);
-
+ MT_Point3 offset(group->dupli_ofs);
MT_Point3 newpos = groupobj->NodeGetWorldPosition() +
- newscale*(groupobj->NodeGetWorldOrientation() * gameobj->NodeGetWorldPosition());
+ newscale*(groupobj->NodeGetWorldOrientation() * (gameobj->NodeGetWorldPosition()-offset));
replica->NodeSetLocalPosition(newpos);
replica->GetSGNode()->UpdateWorldData(0);
@@ -725,6 +745,12 @@ void KX_Scene::DupliGroupRecurse(CValue* obj, int level)
(*git)->Relink(&m_map_gameobject_to_replica);
// add the object in the layer of the parent
(*git)->SetLayer(groupobj->GetLayer());
+ // If the object was a light, we need to update it's RAS_LightObject as well
+ if ((*git)->IsLight())
+ {
+ KX_LightObject* lightobj = static_cast<KX_LightObject*>(*git);
+ lightobj->GetLightData()->m_layer = groupobj->GetLayer();
+ }
}
// replicate crosslinks etc. between logic bricks
@@ -793,6 +819,24 @@ SCA_IObject* KX_Scene::AddReplicaObject(class CValue* originalobject,
replica->GetSGNode()->AddChild(childreplicanode);
}
+ // At this stage all the objects in the hierarchy have been duplicated,
+ // we can update the scenegraph, we need it for the duplication of logic
+ MT_Point3 newpos = ((KX_GameObject*) parentobject)->NodeGetWorldPosition();
+ replica->NodeSetLocalPosition(newpos);
+
+ MT_Matrix3x3 newori = ((KX_GameObject*) parentobject)->NodeGetWorldOrientation();
+ replica->NodeSetLocalOrientation(newori);
+
+ // get the rootnode's scale
+ MT_Vector3 newscale = parentobj->GetSGNode()->GetRootSGParent()->GetLocalScale();
+
+ // set the replica's relative scale with the rootnode's scale
+ replica->NodeSetRelativeScale(newscale);
+
+ replica->GetSGNode()->UpdateWorldData(0);
+ replica->GetSGNode()->SetBBox(originalobj->GetSGNode()->BBox());
+ replica->GetSGNode()->SetRadius(originalobj->GetSGNode()->Radius());
+
// now replicate logic
vector<KX_GameObject*>::iterator git;
for (git = m_logicHierarchicalGameObjects.begin();!(git==m_logicHierarchicalGameObjects.end());++git)
@@ -807,6 +851,12 @@ SCA_IObject* KX_Scene::AddReplicaObject(class CValue* originalobject,
(*git)->Relink(&m_map_gameobject_to_replica);
// add the object in the layer of the parent
(*git)->SetLayer(parentobj->GetLayer());
+ // If the object was a light, we need to update it's RAS_LightObject as well
+ if ((*git)->IsLight())
+ {
+ KX_LightObject* lightobj = static_cast<KX_LightObject*>(*git);
+ lightobj->GetLightData()->m_layer = parentobj->GetLayer();
+ }
}
// replicate crosslinks etc. between logic bricks
@@ -815,21 +865,6 @@ SCA_IObject* KX_Scene::AddReplicaObject(class CValue* originalobject,
ReplicateLogic((*git));
}
- MT_Point3 newpos = ((KX_GameObject*) parentobject)->NodeGetWorldPosition();
- replica->NodeSetLocalPosition(newpos);
-
- MT_Matrix3x3 newori = ((KX_GameObject*) parentobject)->NodeGetWorldOrientation();
- replica->NodeSetLocalOrientation(newori);
-
- // get the rootnode's scale
- MT_Vector3 newscale = parentobj->GetSGNode()->GetRootSGParent()->GetLocalScale();
-
- // set the replica's relative scale with the rootnode's scale
- replica->NodeSetRelativeScale(newscale);
-
- replica->GetSGNode()->UpdateWorldData(0);
- replica->GetSGNode()->SetBBox(originalobj->GetSGNode()->BBox());
- replica->GetSGNode()->SetRadius(originalobj->GetSGNode()->Radius());
// check if there are objects with dupligroup in the hierarchy
vector<KX_GameObject*> duplilist;
for (git = m_logicHierarchicalGameObjects.begin();!(git==m_logicHierarchicalGameObjects.end());++git)
@@ -937,7 +972,7 @@ int KX_Scene::NewRemoveObject(class CValue* gameobj)
newobj->RemoveMeshes();
ret = 1;
- if (m_lightlist->RemoveValue(newobj)) // TODO - use newobj->IsLight() test when its merged in from apricot. - Campbell
+ if (newobj->IsLight() && m_lightlist->RemoveValue(newobj))
ret = newobj->Release();
if (m_objectlist->RemoveValue(newobj))
ret = newobj->Release();
@@ -963,6 +998,7 @@ int KX_Scene::NewRemoveObject(class CValue* gameobj)
if (m_sceneConverter)
m_sceneConverter->UnregisterGameObject(newobj);
// return value will be 0 if the object is actually deleted (all reference gone)
+
return ret;
}
@@ -1164,7 +1200,6 @@ void KX_Scene::UpdateMeshTransformations()
{
KX_GameObject* gameobj = (KX_GameObject*)m_objectlist->GetValue(i);
gameobj->GetOpenGLMatrix();
-// gameobj->UpdateNonDynas();
}
}
@@ -1299,21 +1334,47 @@ void KX_Scene::MarkVisible(RAS_IRasterizer* rasty, KX_GameObject* gameobj,KX_Cam
}
}
+void KX_Scene::PhysicsCullingCallback(KX_ClientObjectInfo* objectInfo, void* cullingInfo)
+{
+ KX_GameObject* gameobj = objectInfo->m_gameobject;
+ if (!gameobj->GetVisible())
+ // ideally, invisible objects should be removed from the culling tree temporarily
+ return;
+ if(((CullingInfo*)cullingInfo)->m_layer && !(gameobj->GetLayer() & ((CullingInfo*)cullingInfo)->m_layer))
+ // used for shadow: object is not in shadow layer
+ return;
+
+ // make object visible
+ gameobj->SetCulled(false);
+ gameobj->UpdateBuckets(false);
+}
+
void KX_Scene::CalculateVisibleMeshes(RAS_IRasterizer* rasty,KX_Camera* cam, int layer)
{
-// FIXME: When tree is operational
-#if 1
- // do this incrementally in the future
- for (int i = 0; i < m_objectlist->GetCount(); i++)
+ bool dbvt_culling = false;
+ if (m_dbvt_culling)
{
- MarkVisible(rasty, static_cast<KX_GameObject*>(m_objectlist->GetValue(i)), cam, layer);
+ // test culling through Bullet
+ PHY__Vector4 planes[6];
+ // get the clip planes
+ MT_Vector4* cplanes = cam->GetNormalizedClipPlanes();
+ // and convert
+ planes[0].setValue(cplanes[4].getValue()); // near
+ planes[1].setValue(cplanes[5].getValue()); // far
+ planes[2].setValue(cplanes[0].getValue()); // left
+ planes[3].setValue(cplanes[1].getValue()); // right
+ planes[4].setValue(cplanes[2].getValue()); // top
+ planes[5].setValue(cplanes[3].getValue()); // bottom
+ CullingInfo info(layer);
+ dbvt_culling = m_physicsEnvironment->cullingTest(PhysicsCullingCallback,&info,planes,5,m_dbvt_occlusion_res);
+ }
+ if (!dbvt_culling) {
+ // the physics engine couldn't help us, do it the hard way
+ for (int i = 0; i < m_objectlist->GetCount(); i++)
+ {
+ MarkVisible(rasty, static_cast<KX_GameObject*>(m_objectlist->GetValue(i)), cam, layer);
+ }
}
-#else
- if (cam->GetFrustumCulling())
- MarkVisible(m_objecttree, rasty, cam, layer);
- else
- MarkSubTreeVisible(m_objecttree, rasty, true, cam, layer);
-#endif
}
// logic stuff
@@ -1394,7 +1455,7 @@ void KX_Scene::UpdateParents(double curtime)
for (int i=0; i<GetRootParentList()->GetCount(); i++)
{
KX_GameObject* parentobj = (KX_GameObject*)GetRootParentList()->GetValue(i);
- parentobj->NodeUpdateGS(curtime,true);
+ parentobj->NodeUpdateGS(curtime);
}
}
@@ -1518,22 +1579,22 @@ double KX_Scene::getSuspendedDelta()
//Python
PyTypeObject KX_Scene::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"KX_Scene",
- sizeof(KX_Scene),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0, //&MyPyCompare,
- __repr,
- 0, //&cvalue_as_number,
0,
0,
0,
- 0, 0, 0, 0, 0, 0
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
PyParentObject KX_Scene::Parents[] = {
@@ -1551,52 +1612,102 @@ PyMethodDef KX_Scene::Methods[] = {
{NULL,NULL} //Sentinel
};
+PyObject* KX_Scene::pyattr_get_name(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_Scene* self= static_cast<KX_Scene*>(self_v);
+ return PyString_FromString(self->GetName().ReadPtr());
+}
+
+PyObject* KX_Scene::pyattr_get_objects(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_Scene* self= static_cast<KX_Scene*>(self_v);
+ return self->GetObjectList()->GetProxy();
+}
+
+PyObject* KX_Scene::pyattr_get_active_camera(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_Scene* self= static_cast<KX_Scene*>(self_v);
+ return self->GetActiveCamera()->GetProxy();
+}
+
+/* __dict__ only for the purpose of giving useful dir() results */
+PyObject* KX_Scene::pyattr_get_dir_dict(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_Scene* self= static_cast<KX_Scene*>(self_v);
+ /* Useually done by py_getattro_up but in this case we want to include m_attr_dict dict */
+ PyObject *dict_str= PyString_FromString("__dict__");
+ PyObject *dict= py_getattr_dict(self->PyObjectPlus::py_getattro(dict_str), Type.tp_dict);
+ Py_DECREF(dict_str);
+
+ PyDict_Update(dict, self->m_attr_dict);
+ return dict;
+}
+
PyAttributeDef KX_Scene::Attributes[] = {
+ KX_PYATTRIBUTE_RO_FUNCTION("name", KX_Scene, pyattr_get_name),
+ KX_PYATTRIBUTE_RO_FUNCTION("objects", KX_Scene, pyattr_get_objects),
+ KX_PYATTRIBUTE_RO_FUNCTION("active_camera", KX_Scene, pyattr_get_active_camera),
+ KX_PYATTRIBUTE_BOOL_RO("suspended", KX_Scene, m_suspend),
+ KX_PYATTRIBUTE_BOOL_RO("activity_culling", KX_Scene, m_activity_culling),
+ KX_PYATTRIBUTE_FLOAT_RW("activity_culling_radius", 0.5f, FLT_MAX, KX_Scene, m_activity_box_radius),
+ KX_PYATTRIBUTE_BOOL_RO("dbvt_culling", KX_Scene, m_dbvt_culling),
+ KX_PYATTRIBUTE_RO_FUNCTION("__dict__", KX_Scene, pyattr_get_dir_dict),
{ NULL } //Sentinel
};
-PyObject* KX_Scene::_getattr(const char *attr)
+
+PyObject* KX_Scene::py_getattro__internal(PyObject *attr)
+{
+ py_getattro_up(PyObjectPlus);
+}
+
+int KX_Scene::py_setattro__internal(PyObject *attr, PyObject *pyvalue)
{
- if (!strcmp(attr, "name"))
- return PyString_FromString(GetName());
-
- if (!strcmp(attr, "objects"))
- return (PyObject*) m_objectlist->AddRef();
-
- if (!strcmp(attr, "active_camera"))
- return (PyObject*) GetActiveCamera()->AddRef();
-
- if (!strcmp(attr, "suspended"))
- return PyInt_FromLong(m_suspend);
-
- if (!strcmp(attr, "activity_culling"))
- return PyInt_FromLong(m_activity_culling);
-
- if (!strcmp(attr, "activity_culling_radius"))
- return PyFloat_FromDouble(m_activity_box_radius);
+ return PyObjectPlus::py_setattro(attr, pyvalue);
+}
+
+PyObject* KX_Scene::py_getattro(PyObject *attr)
+{
+ PyObject *object = py_getattro__internal(attr);
- PyObject* value = PyDict_GetItemString(m_attrlist, attr);
- if (value)
+ if (object==NULL)
{
- Py_INCREF(value);
- return value;
+ PyErr_Clear();
+ object = PyDict_GetItem(m_attr_dict, attr);
+ if(object) {
+ Py_INCREF(object);
+ }
+ else {
+ PyErr_Format(PyExc_AttributeError, "value = scene.myAttr: KX_Scene, attribute \"%s\" not found", PyString_AsString(attr));
+ }
}
- _getattr_up(PyObjectPlus);
+ return object;
}
-int KX_Scene::_delattr(const char *attr)
+
+int KX_Scene::py_setattro(PyObject *attr, PyObject *value)
{
- PyDict_DelItemString(m_attrlist, attr);
- return 0;
+ int ret= py_setattro__internal(attr, value);
+
+ if (ret==PY_SET_ATTR_MISSING) {
+ if (PyDict_SetItem(m_attr_dict, attr, value)==0) {
+ PyErr_Clear();
+ ret= PY_SET_ATTR_SUCCESS;
+ }
+ else {
+ PyErr_SetString(PyExc_AttributeError, "scene.UserAttr = value: KX_Scenes, failed assigning value to internal dictionary");
+ ret= PY_SET_ATTR_FAIL;
+ }
+ }
+
+ return ret;
}
-int KX_Scene::_setattr(const char *attr, PyObject *pyvalue)
+int KX_Scene::py_delattro(PyObject *attr)
{
- if (!PyDict_SetItemString(m_attrlist, attr, pyvalue))
- return 0;
-
- return PyObjectPlus::_setattr(attr, pyvalue);
+ PyDict_DelItem(m_attr_dict, attr);
+ return 0;
}
KX_PYMETHODDEF_DOC_NOARGS(KX_Scene, getLightList,
@@ -1604,7 +1715,7 @@ KX_PYMETHODDEF_DOC_NOARGS(KX_Scene, getLightList,
"Returns a list of all lights in the scene.\n"
)
{
- return (PyObject*) m_lightlist->AddRef();
+ return m_lightlist->GetProxy();
}
KX_PYMETHODDEF_DOC_NOARGS(KX_Scene, getObjectList,
@@ -1613,7 +1724,7 @@ KX_PYMETHODDEF_DOC_NOARGS(KX_Scene, getObjectList,
)
{
// ShowDeprecationWarning("getObjectList()", "the objects property"); // XXX Grr, why doesnt this work?
- return (PyObject*) m_objectlist->AddRef();
+ return m_objectlist->GetProxy();
}
KX_PYMETHODDEF_DOC_NOARGS(KX_Scene, getName,
@@ -1633,15 +1744,14 @@ KX_PYMETHODDEF_DOC(KX_Scene, addObject,
int time = 0;
- if (!PyArg_ParseTuple(args, "OO|i", &pyob, &pyother, &time))
+ if (!PyArg_ParseTuple(args, "OO|i:addObject", &pyob, &pyother, &time))
return NULL;
- if (!ConvertPythonToGameObject(pyob, &ob, false)
- || !ConvertPythonToGameObject(pyother, &other, false))
+ if ( !ConvertPythonToGameObject(pyob, &ob, false, "scene.addObject(object, other, time): KX_Scene (first argument)") ||
+ !ConvertPythonToGameObject(pyother, &other, false, "scene.addObject(object, other, time): KX_Scene (second argument)") )
return NULL;
SCA_IObject* replica = AddReplicaObject((SCA_IObject*)ob, other, time);
- replica->AddRef();
- return replica;
+ return replica->GetProxy();
} \ No newline at end of file
diff --git a/source/gameengine/Ketsji/KX_Scene.h b/source/gameengine/Ketsji/KX_Scene.h
index 962db1a9b96..a06c66ec5dd 100644
--- a/source/gameengine/Ketsji/KX_Scene.h
+++ b/source/gameengine/Ketsji/KX_Scene.h
@@ -85,6 +85,8 @@ class RAS_IRenderTools;
class SCA_JoystickManager;
class btCollisionShape;
class KX_BlenderSceneConverter;
+struct KX_ClientObjectInfo;
+
/**
* The KX_Scene holds all data for an independent scene. It relates
* KX_Objects to the specific objects in the modules.
@@ -92,6 +94,12 @@ class KX_BlenderSceneConverter;
class KX_Scene : public PyObjectPlus, public SCA_IScene
{
Py_Header;
+
+ struct CullingInfo {
+ int m_layer;
+ CullingInfo(int layer) : m_layer(layer) {}
+ };
+
protected:
RAS_BucketManager* m_bucketmanager;
CListValue* m_tempObjectList;
@@ -252,6 +260,16 @@ protected:
bool m_activity_culling;
/**
+ * Toggle to enable or disable culling via DBVT broadphase of Bullet.
+ */
+ bool m_dbvt_culling;
+
+ /**
+ * Occlusion culling resolution
+ */
+ int m_dbvt_occlusion_res;
+
+ /**
* The framing settings used by this scene
*/
@@ -269,6 +287,7 @@ protected:
void MarkVisible(SG_Tree *node, RAS_IRasterizer* rasty, KX_Camera*cam,int layer=0);
void MarkSubTreeVisible(SG_Tree *node, RAS_IRasterizer* rasty, bool visible, KX_Camera*cam,int layer=0);
void MarkVisible(RAS_IRasterizer* rasty, KX_GameObject* gameobj, KX_Camera*cam, int layer=0);
+ static void PhysicsCullingCallback(KX_ClientObjectInfo* objectInfo, void* cullingInfo);
double m_suspendedtime;
double m_suspendeddelta;
@@ -276,7 +295,7 @@ protected:
/**
* This stores anything from python
*/
- PyObject* m_attrlist;
+ PyObject* m_attr_dict;
struct Scene* m_blenderScene;
@@ -530,6 +549,11 @@ public:
bool IsSuspended();
bool IsClearingZBuffer();
void EnableZBufferClearing(bool isclearingZbuffer);
+ // use of DBVT tree for camera culling
+ void SetDbvtCulling(bool b) { m_dbvt_culling = b; };
+ bool GetDbvtCulling() { return m_dbvt_culling; };
+ void SetDbvtOcclusionRes(int i) { m_dbvt_occlusion_res = i; };
+ int GetDbvtOcclusionRes() { return m_dbvt_occlusion_res; };
void SetSceneConverter(class KX_BlenderSceneConverter* sceneConverter);
@@ -565,11 +589,22 @@ public:
KX_PYMETHOD_DOC(KX_Scene, setSceneViewport);
*/
- virtual PyObject* _getattr(const char *attr); /* name, active_camera, gravity, suspended, viewport, framing, activity_culling, activity_culling_radius */
- virtual int _setattr(const char *attr, PyObject *pyvalue);
- virtual int _delattr(const char *attr);
- virtual PyObject* _repr(void) { return PyString_FromString(GetName().ReadPtr()); }
+ /* attributes */
+ static PyObject* pyattr_get_name(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_objects(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_active_camera(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+
+ /* for dir(), python3 uses __dir__() */
+ static PyObject* pyattr_get_dir_dict(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+
+
+ virtual PyObject* py_getattro(PyObject *attr); /* name, active_camera, gravity, suspended, viewport, framing, activity_culling, activity_culling_radius */
+ virtual int py_setattro(PyObject *attr, PyObject *pyvalue);
+ virtual int py_delattro(PyObject *attr);
+ virtual PyObject* py_repr(void) { return PyString_FromString(GetName().ReadPtr()); }
+ PyObject* py_getattro__internal(PyObject *attr);
+ int py_setattro__internal(PyObject *attr, PyObject *pyvalue);
/**
* Sets the time the scene was suspended
diff --git a/source/gameengine/Ketsji/KX_SceneActuator.cpp b/source/gameengine/Ketsji/KX_SceneActuator.cpp
index 1cad4e21352..f54d8542260 100644
--- a/source/gameengine/Ketsji/KX_SceneActuator.cpp
+++ b/source/gameengine/Ketsji/KX_SceneActuator.cpp
@@ -226,22 +226,22 @@ KX_Scene* KX_SceneActuator::FindScene(char * sceneName)
/* Integration hooks ------------------------------------------------------- */
PyTypeObject KX_SceneActuator::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"KX_SceneActuator",
- sizeof(KX_SceneActuator),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0, //&MyPyCompare,
- __repr,
- 0, //&cvalue_as_number,
0,
0,
0,
- 0
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
@@ -259,24 +259,93 @@ PyParentObject KX_SceneActuator::Parents[] =
PyMethodDef KX_SceneActuator::Methods[] =
{
+ //Deprecated functions ------>
{"setUseRestart", (PyCFunction) KX_SceneActuator::sPySetUseRestart, METH_VARARGS, (PY_METHODCHAR)SetUseRestart_doc},
{"setScene", (PyCFunction) KX_SceneActuator::sPySetScene, METH_VARARGS, (PY_METHODCHAR)SetScene_doc},
{"setCamera", (PyCFunction) KX_SceneActuator::sPySetCamera, METH_VARARGS, (PY_METHODCHAR)SetCamera_doc},
- {"getUseRestart", (PyCFunction) KX_SceneActuator::sPyGetUseRestart, METH_VARARGS, (PY_METHODCHAR)GetUseRestart_doc},
- {"getScene", (PyCFunction) KX_SceneActuator::sPyGetScene, METH_VARARGS, (PY_METHODCHAR)GetScene_doc},
- {"getCamera", (PyCFunction) KX_SceneActuator::sPyGetCamera, METH_VARARGS, (PY_METHODCHAR)GetCamera_doc},
+ {"getUseRestart", (PyCFunction) KX_SceneActuator::sPyGetUseRestart, METH_NOARGS, (PY_METHODCHAR)GetUseRestart_doc},
+ {"getScene", (PyCFunction) KX_SceneActuator::sPyGetScene, METH_NOARGS, (PY_METHODCHAR)GetScene_doc},
+ {"getCamera", (PyCFunction) KX_SceneActuator::sPyGetCamera, METH_NOARGS, (PY_METHODCHAR)GetCamera_doc},
+ //<----- Deprecated
{NULL,NULL} //Sentinel
};
PyAttributeDef KX_SceneActuator::Attributes[] = {
+ KX_PYATTRIBUTE_STRING_RW("scene",0,32,true,KX_SceneActuator,m_nextSceneName),
+ KX_PYATTRIBUTE_RW_FUNCTION("camera",KX_SceneActuator,pyattr_get_camera,pyattr_set_camera),
{ NULL } //Sentinel
};
-PyObject* KX_SceneActuator::_getattr(const char *attr)
+PyObject* KX_SceneActuator::py_getattro(PyObject *attr)
{
- _getattr_up(SCA_IActuator);
+ py_getattro_up(SCA_IActuator);
}
+int KX_SceneActuator::py_setattro(PyObject *attr, PyObject *value)
+{
+ py_setattro_up(SCA_IActuator);
+}
+
+PyObject* KX_SceneActuator::pyattr_get_camera(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_SceneActuator* actuator = static_cast<KX_SceneActuator*>(self);
+ if (!actuator->m_camera)
+ Py_RETURN_NONE;
+
+ return actuator->m_camera->GetProxy();
+}
+
+int KX_SceneActuator::pyattr_set_camera(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_SceneActuator* actuator = static_cast<KX_SceneActuator*>(self);
+ KX_Camera *camOb;
+
+ if(value==Py_None)
+ {
+ if (actuator->m_camera)
+ actuator->m_camera->UnregisterActuator(actuator);
+
+ actuator->m_camera= NULL;
+ return 0;
+ }
+
+ if (PyObject_TypeCheck(value, &KX_Camera::Type))
+ {
+ KX_Camera *camOb= static_cast<KX_Camera*>BGE_PROXY_REF(value);
+
+ if(camOb==NULL)
+ {
+ PyErr_SetString(PyExc_RuntimeError, BGE_PROXY_ERROR_MSG);
+ return 1;
+ }
+
+ if (actuator->m_camera)
+ actuator->m_camera->UnregisterActuator(actuator);
+
+ actuator->m_camera = camOb;
+ actuator->m_camera->RegisterActuator(actuator);
+ return 0;
+ }
+
+ if (PyString_Check(value))
+ {
+ char *camName = PyString_AsString(value);
+
+ camOb = actuator->FindCamera(camName);
+ if (camOb)
+ {
+ if (actuator->m_camera)
+ actuator->m_camera->UnregisterActuator(actuator);
+ actuator->m_camera = camOb;
+ actuator->m_camera->RegisterActuator(actuator);
+ return 0;
+ }
+ PyErr_SetString(PyExc_TypeError, "not a valid camera name");
+ return 1;
+ }
+ PyErr_SetString(PyExc_TypeError, "expected a string or a camera object reference");
+ return 1;
+}
/* 2. setUseRestart--------------------------------------------------------- */
@@ -284,13 +353,12 @@ const char KX_SceneActuator::SetUseRestart_doc[] =
"setUseRestart(flag)\n"
"\t- flag: 0 or 1.\n"
"\tSet flag to 1 to restart the scene.\n" ;
-PyObject* KX_SceneActuator::PySetUseRestart(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_SceneActuator::PySetUseRestart(PyObject* args)
{
+ ShowDeprecationWarning("setUseRestart()", "(no replacement)");
int boolArg;
- if (!PyArg_ParseTuple(args, "i", &boolArg))
+ if (!PyArg_ParseTuple(args, "i:setUseRestart", &boolArg))
{
return NULL;
}
@@ -306,10 +374,9 @@ PyObject* KX_SceneActuator::PySetUseRestart(PyObject* self,
const char KX_SceneActuator::GetUseRestart_doc[] =
"getUseRestart()\n"
"\tReturn whether the scene will be restarted.\n" ;
-PyObject* KX_SceneActuator::PyGetUseRestart(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_SceneActuator::PyGetUseRestart()
{
+ ShowDeprecationWarning("getUseRestart()", "(no replacement)");
return PyInt_FromLong(!(m_restart == 0));
}
@@ -320,14 +387,13 @@ const char KX_SceneActuator::SetScene_doc[] =
"setScene(scene)\n"
"\t- scene: string\n"
"\tSet the name of scene the actuator will switch to.\n" ;
-PyObject* KX_SceneActuator::PySetScene(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_SceneActuator::PySetScene(PyObject* args)
{
+ ShowDeprecationWarning("setScene()", "the scene property");
/* one argument: a scene, ignore the rest */
char *scene_name;
- if(!PyArg_ParseTuple(args, "s", &scene_name))
+ if(!PyArg_ParseTuple(args, "s:setScene", &scene_name))
{
return NULL;
}
@@ -344,10 +410,9 @@ PyObject* KX_SceneActuator::PySetScene(PyObject* self,
const char KX_SceneActuator::GetScene_doc[] =
"getScene()\n"
"\tReturn the name of the scene the actuator wants to switch to.\n" ;
-PyObject* KX_SceneActuator::PyGetScene(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_SceneActuator::PyGetScene()
{
+ ShowDeprecationWarning("getScene()", "the scene property");
return PyString_FromString(m_nextSceneName);
}
@@ -358,25 +423,34 @@ const char KX_SceneActuator::SetCamera_doc[] =
"setCamera(camera)\n"
"\t- camera: string\n"
"\tSet the camera to switch to.\n" ;
-PyObject* KX_SceneActuator::PySetCamera(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_SceneActuator::PySetCamera(PyObject* args)
{
+ ShowDeprecationWarning("setCamera()", "the camera property");
PyObject *cam;
- if (PyArg_ParseTuple(args, "O!", &KX_Camera::Type, &cam))
+ if (PyArg_ParseTuple(args, "O!:setCamera", &KX_Camera::Type, &cam))
{
+ KX_Camera *new_camera;
+
+ new_camera = static_cast<KX_Camera*>BGE_PROXY_REF(cam);
+ if(new_camera==NULL)
+ {
+ PyErr_SetString(PyExc_RuntimeError, BGE_PROXY_ERROR_MSG);
+ return NULL;
+ }
+
if (m_camera)
m_camera->UnregisterActuator(this);
- m_camera = (KX_Camera*) cam;
- if (m_camera)
- m_camera->RegisterActuator(this);
+
+ m_camera= new_camera;
+
+ m_camera->RegisterActuator(this);
Py_RETURN_NONE;
}
PyErr_Clear();
/* one argument: a scene, ignore the rest */
char *camName;
- if(!PyArg_ParseTuple(args, "s", &camName))
+ if(!PyArg_ParseTuple(args, "s:setCamera", &camName))
{
return NULL;
}
@@ -399,10 +473,14 @@ PyObject* KX_SceneActuator::PySetCamera(PyObject* self,
const char KX_SceneActuator::GetCamera_doc[] =
"getCamera()\n"
"\tReturn the name of the camera to switch to.\n" ;
-PyObject* KX_SceneActuator::PyGetCamera(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_SceneActuator::PyGetCamera()
{
- return PyString_FromString(m_camera->GetName());
+ ShowDeprecationWarning("getCamera()", "the camera property");
+ if (m_camera) {
+ return PyString_FromString(m_camera->GetName());
+ }
+ else {
+ Py_RETURN_NONE;
+ }
}
/* eof */
diff --git a/source/gameengine/Ketsji/KX_SceneActuator.h b/source/gameengine/Ketsji/KX_SceneActuator.h
index af11af955bf..803c5106a60 100644
--- a/source/gameengine/Ketsji/KX_SceneActuator.h
+++ b/source/gameengine/Ketsji/KX_SceneActuator.h
@@ -92,24 +92,28 @@ class KX_SceneActuator : public SCA_IActuator
/* Python interface ---------------------------------------------------- */
/* --------------------------------------------------------------------- */
- virtual PyObject* _getattr(const char *attr);
+ virtual PyObject* py_getattro(PyObject *attr);
+ virtual int py_setattro(PyObject *attr, PyObject *value);
/* 1. set */
/* Removed */
/* 2. setUseRestart: */
- KX_PYMETHOD_DOC(KX_SceneActuator,SetUseRestart);
+ KX_PYMETHOD_DOC_VARARGS(KX_SceneActuator,SetUseRestart);
/* 3. getUseRestart: */
- KX_PYMETHOD_DOC(KX_SceneActuator,GetUseRestart);
+ KX_PYMETHOD_DOC_NOARGS(KX_SceneActuator,GetUseRestart);
/* 4. setScene: */
- KX_PYMETHOD_DOC(KX_SceneActuator,SetScene);
+ KX_PYMETHOD_DOC_VARARGS(KX_SceneActuator,SetScene);
/* 5. getScene: */
- KX_PYMETHOD_DOC(KX_SceneActuator,GetScene);
+ KX_PYMETHOD_DOC_NOARGS(KX_SceneActuator,GetScene);
/* 6. setCamera: */
- KX_PYMETHOD_DOC(KX_SceneActuator,SetCamera);
+ KX_PYMETHOD_DOC_VARARGS(KX_SceneActuator,SetCamera);
/* 7. getCamera: */
- KX_PYMETHOD_DOC(KX_SceneActuator,GetCamera);
+ KX_PYMETHOD_DOC_NOARGS(KX_SceneActuator,GetCamera);
+ static PyObject* pyattr_get_camera(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
+ static int pyattr_set_camera(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+
}; /* end of class KXSceneActuator */
#endif
diff --git a/source/gameengine/Ketsji/KX_SoundActuator.cpp b/source/gameengine/Ketsji/KX_SoundActuator.cpp
index 6de1d67bfdb..412be497c5a 100644
--- a/source/gameengine/Ketsji/KX_SoundActuator.cpp
+++ b/source/gameengine/Ketsji/KX_SoundActuator.cpp
@@ -35,6 +35,7 @@
#include "KX_GameObject.h"
#include "SND_SoundObject.h"
#include "SND_Scene.h" // needed for replication
+#include "KX_PyMath.h" // needed for PyObjectFrom()
#include <iostream>
#ifdef HAVE_CONFIG_H
@@ -233,22 +234,22 @@ void KX_SoundActuator::setSoundObject(class SND_SoundObject* soundobject)
/* Integration hooks ------------------------------------------------------- */
PyTypeObject KX_SoundActuator::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"KX_SoundActuator",
- sizeof(KX_SoundActuator),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0, //&MyPyCompare,
- __repr,
- 0, //&cvalue_as_number,
0,
0,
0,
- 0
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
@@ -264,104 +265,328 @@ PyParentObject KX_SoundActuator::Parents[] = {
PyMethodDef KX_SoundActuator::Methods[] = {
+ // Deprecated ----->
{"setFilename", (PyCFunction) KX_SoundActuator::sPySetFilename, METH_VARARGS,NULL},
- {"getFilename", (PyCFunction) KX_SoundActuator::sPyGetFilename, METH_VARARGS,NULL},
- {"startSound",(PyCFunction) KX_SoundActuator::sPyStartSound,METH_VARARGS,NULL},
- {"pauseSound",(PyCFunction) KX_SoundActuator::sPyPauseSound,METH_VARARGS,NULL},
- {"stopSound",(PyCFunction) KX_SoundActuator::sPyStopSound,METH_VARARGS,NULL},
+ {"getFilename", (PyCFunction) KX_SoundActuator::sPyGetFilename, METH_NOARGS,NULL},
{"setGain",(PyCFunction) KX_SoundActuator::sPySetGain,METH_VARARGS,NULL},
- {"getGain",(PyCFunction) KX_SoundActuator::sPyGetGain,METH_VARARGS,NULL},
+ {"getGain",(PyCFunction) KX_SoundActuator::sPyGetGain,METH_NOARGS,NULL},
{"setPitch",(PyCFunction) KX_SoundActuator::sPySetPitch,METH_VARARGS,NULL},
- {"getPitch",(PyCFunction) KX_SoundActuator::sPyGetPitch,METH_VARARGS,NULL},
+ {"getPitch",(PyCFunction) KX_SoundActuator::sPyGetPitch,METH_NOARGS,NULL},
{"setRollOffFactor",(PyCFunction) KX_SoundActuator::sPySetRollOffFactor,METH_VARARGS,NULL},
- {"getRollOffFactor",(PyCFunction) KX_SoundActuator::sPyGetRollOffFactor,METH_VARARGS,NULL},
+ {"getRollOffFactor",(PyCFunction) KX_SoundActuator::sPyGetRollOffFactor,METH_NOARGS,NULL},
{"setLooping",(PyCFunction) KX_SoundActuator::sPySetLooping,METH_VARARGS,NULL},
- {"getLooping",(PyCFunction) KX_SoundActuator::sPyGetLooping,METH_VARARGS,NULL},
+ {"getLooping",(PyCFunction) KX_SoundActuator::sPyGetLooping,METH_NOARGS,NULL},
{"setPosition",(PyCFunction) KX_SoundActuator::sPySetPosition,METH_VARARGS,NULL},
{"setVelocity",(PyCFunction) KX_SoundActuator::sPySetVelocity,METH_VARARGS,NULL},
{"setOrientation",(PyCFunction) KX_SoundActuator::sPySetOrientation,METH_VARARGS,NULL},
{"setType",(PyCFunction) KX_SoundActuator::sPySetType,METH_VARARGS,NULL},
- {"getType",(PyCFunction) KX_SoundActuator::sPyGetType,METH_VARARGS,NULL},
+ {"getType",(PyCFunction) KX_SoundActuator::sPyGetType,METH_NOARGS,NULL},
+ // <-----
+
+ KX_PYMETHODTABLE_NOARGS(KX_SoundActuator, startSound),
+ KX_PYMETHODTABLE_NOARGS(KX_SoundActuator, pauseSound),
+ KX_PYMETHODTABLE_NOARGS(KX_SoundActuator, stopSound),
{NULL,NULL,NULL,NULL} //Sentinel
};
PyAttributeDef KX_SoundActuator::Attributes[] = {
+ KX_PYATTRIBUTE_RW_FUNCTION("filename", KX_SoundActuator, pyattr_get_filename, pyattr_set_filename),
+ KX_PYATTRIBUTE_RW_FUNCTION("volume", KX_SoundActuator, pyattr_get_gain, pyattr_set_gain),
+ KX_PYATTRIBUTE_RW_FUNCTION("pitch", KX_SoundActuator, pyattr_get_pitch, pyattr_set_pitch),
+ KX_PYATTRIBUTE_RW_FUNCTION("rollOffFactor", KX_SoundActuator, pyattr_get_rollOffFactor, pyattr_set_rollOffFactor),
+ KX_PYATTRIBUTE_RW_FUNCTION("looping", KX_SoundActuator, pyattr_get_looping, pyattr_set_looping),
+ KX_PYATTRIBUTE_RW_FUNCTION("position", KX_SoundActuator, pyattr_get_position, pyattr_set_position),
+ KX_PYATTRIBUTE_RW_FUNCTION("velocity", KX_SoundActuator, pyattr_get_velocity, pyattr_set_velocity),
+ KX_PYATTRIBUTE_RW_FUNCTION("orientation", KX_SoundActuator, pyattr_get_orientation, pyattr_set_orientation),
+ KX_PYATTRIBUTE_ENUM_RW("type",KX_SoundActuator::KX_SOUNDACT_NODEF+1,KX_SoundActuator::KX_SOUNDACT_MAX-1,false,KX_SoundActuator,m_type),
{ NULL } //Sentinel
};
-PyObject* KX_SoundActuator::_getattr(const char *attr)
+/* Methods ----------------------------------------------------------------- */
+KX_PYMETHODDEF_DOC_NOARGS(KX_SoundActuator, startSound,
+"startSound()\n"
+"\tStarts the sound.\n")
{
- _getattr_up(SCA_IActuator);
-}
-
-
+ if (m_soundObject)
+ // This has no effect if the actuator is not active.
+ // To start the sound you must activate the actuator.
+ // This function is to restart the sound.
+ m_soundObject->StartSound();
+ Py_RETURN_NONE;
+}
-PyObject* KX_SoundActuator::PySetFilename(PyObject* self, PyObject* args, PyObject* kwds)
+KX_PYMETHODDEF_DOC_NOARGS(KX_SoundActuator, pauseSound,
+"pauseSound()\n"
+"\tPauses the sound.\n")
{
- char *soundName = NULL;
- // void *soundPointer = NULL; /*unused*/
-
- if (!PyArg_ParseTuple(args, "s", &soundName))
- return NULL;
+ if (m_soundObject)
+ // unfortunately, openal does not implement pause correctly, it is equivalent to a stop
+ m_soundObject->PauseSound();
+ Py_RETURN_NONE;
+}
+KX_PYMETHODDEF_DOC_NOARGS(KX_SoundActuator, stopSound,
+"stopSound()\n"
+"\tStops the sound.\n")
+{
+ if (m_soundObject)
+ m_soundObject->StopSound();
Py_RETURN_NONE;
}
+/* Atribute setting and getting -------------------------------------------- */
+PyObject* KX_SoundActuator::py_getattro(PyObject *attr)
+{
+ py_getattro_up(SCA_IActuator);
+}
+int KX_SoundActuator::py_setattro(PyObject *attr, PyObject* value) {
+ py_setattro_up(SCA_IActuator);
+}
-PyObject* KX_SoundActuator::PyGetFilename(PyObject* self, PyObject* args, PyObject* kwds)
+PyObject* KX_SoundActuator::pyattr_get_filename(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef)
{
- if (!m_soundObject)
+ KX_SoundActuator * actuator = static_cast<KX_SoundActuator *> (self);
+ if (!actuator->m_soundObject)
{
return PyString_FromString("");
}
- STR_String objectname = m_soundObject->GetObjectName();
+ STR_String objectname = actuator->m_soundObject->GetObjectName();
char* name = objectname.Ptr();
if (!name) {
- PyErr_SetString(PyExc_RuntimeError, "Unable to get sound filename");
+ PyErr_SetString(PyExc_RuntimeError, "value = actuator.filename: KX_SoundActuator, unable to get sound filename");
return NULL;
} else
return PyString_FromString(name);
}
+PyObject* KX_SoundActuator::pyattr_get_gain(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_SoundActuator * actuator = static_cast<KX_SoundActuator *> (self);
+ float gain = (actuator->m_soundObject) ? actuator->m_soundObject->GetGain() : 1.0f;
+ PyObject* result = PyFloat_FromDouble(gain);
+
+ return result;
+}
-PyObject* KX_SoundActuator::PyStartSound(PyObject* self, PyObject* args, PyObject* kwds)
+PyObject* KX_SoundActuator::pyattr_get_pitch(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef)
{
- if (m_soundObject)
- // This has no effect if the actuator is not active.
- // To start the sound you must activate the actuator.
- // This function is to restart the sound.
- m_soundObject->StartSound();
- Py_RETURN_NONE;
+ KX_SoundActuator * actuator = static_cast<KX_SoundActuator *> (self);
+ float pitch = (actuator->m_soundObject) ? actuator->m_soundObject->GetPitch() : 1.0;
+ PyObject* result = PyFloat_FromDouble(pitch);
+
+ return result;
+}
+
+PyObject* KX_SoundActuator::pyattr_get_rollOffFactor(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_SoundActuator * actuator = static_cast<KX_SoundActuator *> (self);
+ float rollofffactor = (actuator->m_soundObject) ? actuator->m_soundObject->GetRollOffFactor() : 1.0;
+ PyObject* result = PyFloat_FromDouble(rollofffactor);
+
+ return result;
+}
+
+PyObject* KX_SoundActuator::pyattr_get_looping(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_SoundActuator * actuator = static_cast<KX_SoundActuator *> (self);
+ int looping = (actuator->m_soundObject) ? actuator->m_soundObject->GetLoopMode() : (int)SND_LOOP_OFF;
+ PyObject* result = PyInt_FromLong(looping);
+
+ return result;
+}
+
+PyObject* KX_SoundActuator::pyattr_get_position(void * self, const struct KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_SoundActuator * actuator = static_cast<KX_SoundActuator *> (self);
+ MT_Vector3 pos(0.0, 0.0, 0.0);
+
+ if (actuator->m_soundObject)
+ pos = actuator->m_soundObject->GetPosition();
+
+ PyObject * result = PyObjectFrom(pos);
+ return result;
+}
+
+PyObject* KX_SoundActuator::pyattr_get_velocity(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_SoundActuator * actuator = static_cast<KX_SoundActuator *> (self);
+ MT_Vector3 vel;
+
+ if (actuator->m_soundObject)
+ vel = actuator->m_soundObject->GetVelocity();
+
+ PyObject * result = PyObjectFrom(vel);
+ return result;
+}
+
+PyObject* KX_SoundActuator::pyattr_get_orientation(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_SoundActuator * actuator = static_cast<KX_SoundActuator *> (self);
+ MT_Matrix3x3 ori;
+
+ if (actuator->m_soundObject)
+ ori = actuator->m_soundObject->GetOrientation();
+
+ PyObject * result = PyObjectFrom(ori);
+ return result;
+}
+
+int KX_SoundActuator::pyattr_set_filename(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ char *soundName = NULL;
+ KX_SoundActuator * actuator = static_cast<KX_SoundActuator*> (self);
+ // void *soundPointer = NULL; /*unused*/
+
+ if (!PyArg_Parse(value, "s", &soundName))
+ return 1;
+
+ if (actuator->m_soundObject) {
+ actuator->m_soundObject->SetObjectName(soundName);
+ }
+
+ return 0;
+}
+
+
+int KX_SoundActuator::pyattr_set_gain(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ float gain = 1.0;
+ KX_SoundActuator * actuator = static_cast<KX_SoundActuator *> (self);
+ if (!PyArg_Parse(value, "f", &gain))
+ return 1;
+
+ if (actuator->m_soundObject)
+ actuator->m_soundObject->SetGain(gain);
+
+ return 0;
}
+int KX_SoundActuator::pyattr_set_pitch(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ float pitch = 1.0;
+ KX_SoundActuator * actuator = static_cast<KX_SoundActuator *> (self);
+ if (!PyArg_Parse(value, "f", &pitch))
+ return 1;
+
+ if (actuator->m_soundObject)
+ actuator->m_soundObject->SetPitch(pitch);
+
+ return 0;
+}
+int KX_SoundActuator::pyattr_set_rollOffFactor(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_SoundActuator * actuator = static_cast<KX_SoundActuator *> (self);
+ float rollofffactor = 1.0;
+ if (!PyArg_Parse(value, "f", &rollofffactor))
+ return 1;
+
+ if (actuator->m_soundObject)
+ actuator->m_soundObject->SetRollOffFactor(rollofffactor);
-PyObject* KX_SoundActuator::PyPauseSound(PyObject* self, PyObject* args, PyObject* kwds)
+ return 0;
+}
+
+int KX_SoundActuator::pyattr_set_looping(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
{
- if (m_soundObject)
- // unfortunately, openal does not implement pause correctly, it is equivalent to a stop
- m_soundObject->PauseSound();
- Py_RETURN_NONE;
-}
+ KX_SoundActuator * actuator = static_cast<KX_SoundActuator *> (self);
+ int looping = 1;
+ if (!PyArg_Parse(value, "i", &looping))
+ return 1;
+
+ if (actuator->m_soundObject)
+ actuator->m_soundObject->SetLoopMode(looping);
+
+ return 0;
+}
+int KX_SoundActuator::pyattr_set_position(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ float pos[3];
+ KX_SoundActuator * actuator = static_cast<KX_SoundActuator *> (self);
-PyObject* KX_SoundActuator::PyStopSound(PyObject* self, PyObject* args, PyObject* kwds)
+ if (!PyArg_ParseTuple(value, "fff", &pos[0], &pos[1], &pos[2]))
+ return 1;
+
+ if (actuator->m_soundObject)
+ actuator->m_soundObject->SetPosition(MT_Vector3(pos));
+
+ return 0;
+}
+
+int KX_SoundActuator::pyattr_set_velocity(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
{
- if (m_soundObject)
- m_soundObject->StopSound();
- Py_RETURN_NONE;
+ float vel[3];
+ KX_SoundActuator * actuator = static_cast<KX_SoundActuator *> (self);
+
+
+ if (!PyArg_ParseTuple(value, "fff", &vel[0], &vel[1], &vel[2]))
+ return 1;
+
+ if (actuator->m_soundObject)
+ actuator->m_soundObject->SetVelocity(MT_Vector3(vel));
+
+ return 0;
+
+}
+
+int KX_SoundActuator::pyattr_set_orientation(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+
+ MT_Matrix3x3 rot;
+ KX_SoundActuator * actuator = static_cast<KX_SoundActuator *> (self);
+
+ /* if value is not a sequence PyOrientationTo makes an error */
+ if (!PyOrientationTo(value, rot, "actuator.orientation = value: KX_SoundActuator"))
+ return NULL;
+
+ if (!actuator->m_soundObject)
+ return 0; /* Since not having m_soundObject didn't do anything in the old version,
+ * it probably should be kept that way */
+
+ actuator->m_soundObject->SetOrientation(rot);
+ return 0;
}
+// Deprecated ----->
+PyObject* KX_SoundActuator::PySetFilename(PyObject* args)
+{
+ char *soundName = NULL;
+ ShowDeprecationWarning("setFilename()", "the filename property");
+ // void *soundPointer = NULL; /*unused*/
+
+ if (!PyArg_ParseTuple(args, "s", &soundName))
+ return NULL;
+ Py_RETURN_NONE;
+}
-PyObject* KX_SoundActuator::PySetGain(PyObject* self, PyObject* args, PyObject* kwds)
+PyObject* KX_SoundActuator::PyGetFilename()
{
+ ShowDeprecationWarning("getFilename()", "the filename property");
+ if (!m_soundObject)
+ {
+ return PyString_FromString("");
+ }
+ STR_String objectname = m_soundObject->GetObjectName();
+ char* name = objectname.Ptr();
+
+ if (!name) {
+ PyErr_SetString(PyExc_RuntimeError, "Unable to get sound filename");
+ return NULL;
+ } else
+ return PyString_FromString(name);
+}
+
+PyObject* KX_SoundActuator::PySetGain(PyObject* args)
+{
+ ShowDeprecationWarning("setGain()", "the volume property");
float gain = 1.0;
- if (!PyArg_ParseTuple(args, "f", &gain))
+ if (!PyArg_ParseTuple(args, "f:setGain", &gain))
return NULL;
if (m_soundObject)
@@ -372,8 +597,9 @@ PyObject* KX_SoundActuator::PySetGain(PyObject* self, PyObject* args, PyObject*
-PyObject* KX_SoundActuator::PyGetGain(PyObject* self, PyObject* args, PyObject* kwds)
+PyObject* KX_SoundActuator::PyGetGain()
{
+ ShowDeprecationWarning("getGain()", "the volume property");
float gain = (m_soundObject) ? m_soundObject->GetGain() : 1.0f;
PyObject* result = PyFloat_FromDouble(gain);
@@ -382,10 +608,11 @@ PyObject* KX_SoundActuator::PyGetGain(PyObject* self, PyObject* args, PyObject*
-PyObject* KX_SoundActuator::PySetPitch(PyObject* self, PyObject* args, PyObject* kwds)
+PyObject* KX_SoundActuator::PySetPitch(PyObject* args)
{
+ ShowDeprecationWarning("setPitch()", "the pitch property");
float pitch = 1.0;
- if (!PyArg_ParseTuple(args, "f", &pitch))
+ if (!PyArg_ParseTuple(args, "f:setPitch", &pitch))
return NULL;
if (m_soundObject)
@@ -396,8 +623,9 @@ PyObject* KX_SoundActuator::PySetPitch(PyObject* self, PyObject* args, PyObject*
-PyObject* KX_SoundActuator::PyGetPitch(PyObject* self, PyObject* args, PyObject* kwds)
+PyObject* KX_SoundActuator::PyGetPitch()
{
+ ShowDeprecationWarning("getPitch()", "the pitch property");
float pitch = (m_soundObject) ? m_soundObject->GetPitch() : 1.0;
PyObject* result = PyFloat_FromDouble(pitch);
@@ -406,10 +634,11 @@ PyObject* KX_SoundActuator::PyGetPitch(PyObject* self, PyObject* args, PyObject*
-PyObject* KX_SoundActuator::PySetRollOffFactor(PyObject* self, PyObject* args, PyObject* kwds)
+PyObject* KX_SoundActuator::PySetRollOffFactor(PyObject* args)
{
+ ShowDeprecationWarning("setRollOffFactor()", "the rollOffFactor property");
float rollofffactor = 1.0;
- if (!PyArg_ParseTuple(args, "f", &rollofffactor))
+ if (!PyArg_ParseTuple(args, "f:setRollOffFactor", &rollofffactor))
return NULL;
if (m_soundObject)
@@ -420,8 +649,9 @@ PyObject* KX_SoundActuator::PySetRollOffFactor(PyObject* self, PyObject* args, P
-PyObject* KX_SoundActuator::PyGetRollOffFactor(PyObject* self, PyObject* args, PyObject* kwds)
+PyObject* KX_SoundActuator::PyGetRollOffFactor()
{
+ ShowDeprecationWarning("getRollOffFactor()", "the rollOffFactor property");
float rollofffactor = (m_soundObject) ? m_soundObject->GetRollOffFactor() : 1.0;
PyObject* result = PyFloat_FromDouble(rollofffactor);
@@ -430,10 +660,11 @@ PyObject* KX_SoundActuator::PyGetRollOffFactor(PyObject* self, PyObject* args, P
-PyObject* KX_SoundActuator::PySetLooping(PyObject* self, PyObject* args, PyObject* kwds)
+PyObject* KX_SoundActuator::PySetLooping(PyObject* args)
{
+ ShowDeprecationWarning("setLooping()", "the looping property");
bool looping = 1;
- if (!PyArg_ParseTuple(args, "i", &looping))
+ if (!PyArg_ParseTuple(args, "i:setLooping", &looping))
return NULL;
if (m_soundObject)
@@ -444,8 +675,9 @@ PyObject* KX_SoundActuator::PySetLooping(PyObject* self, PyObject* args, PyObjec
-PyObject* KX_SoundActuator::PyGetLooping(PyObject* self, PyObject* args, PyObject* kwds)
+PyObject* KX_SoundActuator::PyGetLooping()
{
+ ShowDeprecationWarning("getLooping()", "the looping property");
int looping = (m_soundObject) ? m_soundObject->GetLoopMode() : (int)SND_LOOP_OFF;
PyObject* result = PyInt_FromLong(looping);
@@ -454,14 +686,15 @@ PyObject* KX_SoundActuator::PyGetLooping(PyObject* self, PyObject* args, PyObjec
-PyObject* KX_SoundActuator::PySetPosition(PyObject* self, PyObject* args, PyObject* kwds)
+PyObject* KX_SoundActuator::PySetPosition(PyObject* args)
{
MT_Point3 pos;
+ ShowDeprecationWarning("setPosition()", "the position property");
pos[0] = 0.0;
pos[1] = 0.0;
pos[2] = 0.0;
- if (!PyArg_ParseTuple(args, "fff", &pos[0], &pos[1], &pos[2]))
+ if (!PyArg_ParseTuple(args, "fff:setPosition", &pos[0], &pos[1], &pos[2]))
return NULL;
if (m_soundObject)
@@ -472,14 +705,15 @@ PyObject* KX_SoundActuator::PySetPosition(PyObject* self, PyObject* args, PyObje
-PyObject* KX_SoundActuator::PySetVelocity(PyObject* self, PyObject* args, PyObject* kwds)
+PyObject* KX_SoundActuator::PySetVelocity(PyObject* args)
{
MT_Vector3 vel;
+ ShowDeprecationWarning("setVelocity()", "the velocity property");
vel[0] = 0.0;
vel[1] = 0.0;
vel[2] = 0.0;
- if (!PyArg_ParseTuple(args, "fff", &vel[0], &vel[1], &vel[2]))
+ if (!PyArg_ParseTuple(args, "fff:setVelocity", &vel[0], &vel[1], &vel[2]))
return NULL;
if (m_soundObject)
@@ -490,9 +724,10 @@ PyObject* KX_SoundActuator::PySetVelocity(PyObject* self, PyObject* args, PyObje
-PyObject* KX_SoundActuator::PySetOrientation(PyObject* self, PyObject* args, PyObject* kwds)
+PyObject* KX_SoundActuator::PySetOrientation(PyObject* args)
{
MT_Matrix3x3 ori;
+ ShowDeprecationWarning("setOrientation()", "the orientation property");
ori[0][0] = 1.0;
ori[0][1] = 0.0;
ori[0][2] = 0.0;
@@ -503,7 +738,7 @@ PyObject* KX_SoundActuator::PySetOrientation(PyObject* self, PyObject* args, PyO
ori[2][1] = 0.0;
ori[2][2] = 1.0;
- if (!PyArg_ParseTuple(args, "fffffffff", &ori[0][0], &ori[0][1], &ori[0][2], &ori[1][0], &ori[1][1], &ori[1][2], &ori[2][0], &ori[2][1], &ori[2][2]))
+ if (!PyArg_ParseTuple(args, "fffffffff:setOrientation", &ori[0][0], &ori[0][1], &ori[0][2], &ori[1][0], &ori[1][1], &ori[1][2], &ori[2][0], &ori[2][1], &ori[2][2]))
return NULL;
if (m_soundObject)
@@ -512,11 +747,12 @@ PyObject* KX_SoundActuator::PySetOrientation(PyObject* self, PyObject* args, PyO
Py_RETURN_NONE;
}
-PyObject* KX_SoundActuator::PySetType(PyObject* self, PyObject* args, PyObject* kwds)
+PyObject* KX_SoundActuator::PySetType(PyObject* args)
{
int typeArg;
+ ShowDeprecationWarning("setType()", "the type property");
- if (!PyArg_ParseTuple(args, "i", &typeArg)) {
+ if (!PyArg_ParseTuple(args, "i:setType", &typeArg)) {
return NULL;
}
@@ -528,10 +764,10 @@ PyObject* KX_SoundActuator::PySetType(PyObject* self, PyObject* args, PyObject*
Py_RETURN_NONE;
}
-PyObject* KX_SoundActuator::PyGetType(PyObject* self, PyObject* args, PyObject* kwds)
+PyObject* KX_SoundActuator::PyGetType()
{
+ ShowDeprecationWarning("getType()", "the type property");
return PyInt_FromLong(m_type);
}
-
-
+// <-----
diff --git a/source/gameengine/Ketsji/KX_SoundActuator.h b/source/gameengine/Ketsji/KX_SoundActuator.h
index 68d5b792729..d5e678bbecd 100644
--- a/source/gameengine/Ketsji/KX_SoundActuator.h
+++ b/source/gameengine/Ketsji/KX_SoundActuator.h
@@ -80,26 +80,51 @@ public:
/* Python interface --------------------------------------------------- */
/* -------------------------------------------------------------------- */
- virtual PyObject* _getattr(const char *attr);
-
- KX_PYMETHOD(KX_SoundActuator,SetFilename);
- KX_PYMETHOD(KX_SoundActuator,GetFilename);
- KX_PYMETHOD(KX_SoundActuator,StartSound);
- KX_PYMETHOD(KX_SoundActuator,PauseSound);
- KX_PYMETHOD(KX_SoundActuator,StopSound);
- KX_PYMETHOD(KX_SoundActuator,SetGain);
- KX_PYMETHOD(KX_SoundActuator,GetGain);
- KX_PYMETHOD(KX_SoundActuator,SetPitch);
- KX_PYMETHOD(KX_SoundActuator,GetPitch);
- KX_PYMETHOD(KX_SoundActuator,SetRollOffFactor);
- KX_PYMETHOD(KX_SoundActuator,GetRollOffFactor);
- KX_PYMETHOD(KX_SoundActuator,SetLooping);
- KX_PYMETHOD(KX_SoundActuator,GetLooping);
- KX_PYMETHOD(KX_SoundActuator,SetPosition);
- KX_PYMETHOD(KX_SoundActuator,SetVelocity);
- KX_PYMETHOD(KX_SoundActuator,SetOrientation);
- KX_PYMETHOD(KX_SoundActuator,SetType);
- KX_PYMETHOD(KX_SoundActuator,GetType);
+ virtual PyObject* py_getattro(PyObject *attr);
+ virtual int py_setattro(PyObject *attr, PyObject* value);
+
+ KX_PYMETHOD_DOC_NOARGS(KX_SoundActuator, startSound);
+ KX_PYMETHOD_DOC_NOARGS(KX_SoundActuator, pauseSound);
+ KX_PYMETHOD_DOC_NOARGS(KX_SoundActuator, stopSound);
+
+ static int pyattr_set_filename(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+ static int pyattr_set_gain(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+ static int pyattr_set_pitch(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+ static int pyattr_set_rollOffFactor(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+ static int pyattr_set_looping(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+ static int pyattr_set_position(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+ static int pyattr_set_velocity(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+ static int pyattr_set_orientation(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+ static int pyattr_set_type(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+
+ static PyObject* pyattr_get_filename(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_gain(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_pitch(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_looping(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_rollOffFactor(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_position(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_velocity(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_orientation(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_type(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
+
+ // Deprecated ----->
+ KX_PYMETHOD_VARARGS(KX_SoundActuator,SetFilename);
+ KX_PYMETHOD_NOARGS(KX_SoundActuator,GetFilename);
+ KX_PYMETHOD_VARARGS(KX_SoundActuator,SetGain);
+ KX_PYMETHOD_NOARGS(KX_SoundActuator,GetGain);
+ KX_PYMETHOD_VARARGS(KX_SoundActuator,SetPitch);
+ KX_PYMETHOD_NOARGS(KX_SoundActuator,GetPitch);
+ KX_PYMETHOD_VARARGS(KX_SoundActuator,SetRollOffFactor);
+ KX_PYMETHOD_NOARGS(KX_SoundActuator,GetRollOffFactor);
+ KX_PYMETHOD_VARARGS(KX_SoundActuator,SetLooping);
+ KX_PYMETHOD_NOARGS(KX_SoundActuator,GetLooping);
+ KX_PYMETHOD_VARARGS(KX_SoundActuator,SetPosition);
+ KX_PYMETHOD_VARARGS(KX_SoundActuator,SetVelocity);
+ KX_PYMETHOD_VARARGS(KX_SoundActuator,SetOrientation);
+ KX_PYMETHOD_VARARGS(KX_SoundActuator,SetType);
+ KX_PYMETHOD_NOARGS(KX_SoundActuator,GetType);
+ // <-----
+
};
#endif //__KX_SOUNDACTUATOR
diff --git a/source/gameengine/Ketsji/KX_StateActuator.cpp b/source/gameengine/Ketsji/KX_StateActuator.cpp
index 0de4da79bd8..976e7ea5204 100644
--- a/source/gameengine/Ketsji/KX_StateActuator.cpp
+++ b/source/gameengine/Ketsji/KX_StateActuator.cpp
@@ -108,24 +108,23 @@ KX_StateActuator::Update()
/* Integration hooks ------------------------------------------------------- */
-PyTypeObject
-KX_StateActuator::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+PyTypeObject KX_StateActuator::Type = {
+ PyObject_HEAD_INIT(NULL)
0,
"KX_StateActuator",
- sizeof(KX_StateActuator),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0, //&MyPyCompare,
- __repr,
- 0, //&cvalue_as_number,
0,
0,
0,
- 0
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
PyParentObject
@@ -139,22 +138,30 @@ KX_StateActuator::Parents[] = {
PyMethodDef
KX_StateActuator::Methods[] = {
+ // deprecated -->
{"setOperation", (PyCFunction) KX_StateActuator::sPySetOperation,
METH_VARARGS, (PY_METHODCHAR)SetOperation_doc},
{"setMask", (PyCFunction) KX_StateActuator::sPySetMask,
METH_VARARGS, (PY_METHODCHAR)SetMask_doc},
+ // <--
{NULL,NULL} //Sentinel
};
PyAttributeDef KX_StateActuator::Attributes[] = {
+ KX_PYATTRIBUTE_INT_RW("operation",KX_StateActuator::OP_NOP+1,KX_StateActuator::OP_COUNT-1,false,KX_StateActuator,m_operation),
+ KX_PYATTRIBUTE_INT_RW("mask",0,0x3FFFFFFF,false,KX_StateActuator,m_mask),
{ NULL } //Sentinel
};
-PyObject* KX_StateActuator::_getattr(const char *attr)
+PyObject* KX_StateActuator::py_getattro(PyObject *attr)
{
- _getattr_up(SCA_IActuator);
+ py_getattro_up(SCA_IActuator);
};
+int KX_StateActuator::py_setattro(PyObject *attr, PyObject* value)
+{
+ py_setattro_up(SCA_IActuator);
+}
/* set operation ---------------------------------------------------------- */
@@ -166,12 +173,11 @@ KX_StateActuator::SetOperation_doc[] =
"\tUse setMask() to specify the bits that will be modified.\n";
PyObject*
-KX_StateActuator::PySetOperation(PyObject* self,
- PyObject* args,
- PyObject* kwds) {
+KX_StateActuator::PySetOperation(PyObject* args) {
+ ShowDeprecationWarning("setOperation()", "the operation property");
int oper;
- if(!PyArg_ParseTuple(args, "i", &oper)) {
+ if(!PyArg_ParseTuple(args, "i:setOperation", &oper)) {
return NULL;
}
@@ -191,12 +197,11 @@ KX_StateActuator::SetMask_doc[] =
"\twhich copies the value to the object state.\n";
PyObject*
-KX_StateActuator::PySetMask(PyObject* self,
- PyObject* args,
- PyObject* kwds) {
+KX_StateActuator::PySetMask(PyObject* args) {
+ ShowDeprecationWarning("setMask()", "the mask property");
int mask;
- if(!PyArg_ParseTuple(args, "i", &mask)) {
+ if(!PyArg_ParseTuple(args, "i:setMask", &mask)) {
return NULL;
}
diff --git a/source/gameengine/Ketsji/KX_StateActuator.h b/source/gameengine/Ketsji/KX_StateActuator.h
index 023b8993d7c..4a64894259d 100644
--- a/source/gameengine/Ketsji/KX_StateActuator.h
+++ b/source/gameengine/Ketsji/KX_StateActuator.h
@@ -39,13 +39,15 @@ class KX_StateActuator : public SCA_IActuator
/** Make visible? */
enum {
+ OP_NOP = -1,
OP_CPY = 0,
OP_SET,
OP_CLR,
- OP_NEG
+ OP_NEG,
+ OP_COUNT
};
int m_operation;
- unsigned int m_mask;
+ int m_mask;
public:
@@ -73,10 +75,11 @@ class KX_StateActuator : public SCA_IActuator
/* Python interface ---------------------------------------------------- */
/* --------------------------------------------------------------------- */
- virtual PyObject* _getattr(const char *attr);
+ virtual PyObject* py_getattro(PyObject *attr);
+ virtual int py_setattro(PyObject *attr, PyObject* value);
//KX_PYMETHOD_DOC
- KX_PYMETHOD_DOC(KX_StateActuator,SetOperation);
- KX_PYMETHOD_DOC(KX_StateActuator,SetMask);
+ KX_PYMETHOD_DOC_VARARGS(KX_StateActuator,SetOperation);
+ KX_PYMETHOD_DOC_VARARGS(KX_StateActuator,SetMask);
};
#endif
diff --git a/source/gameengine/Ketsji/KX_SumoPhysicsController.cpp b/source/gameengine/Ketsji/KX_SumoPhysicsController.cpp
index 7631ee05b0b..fc053f05e63 100644
--- a/source/gameengine/Ketsji/KX_SumoPhysicsController.cpp
+++ b/source/gameengine/Ketsji/KX_SumoPhysicsController.cpp
@@ -209,6 +209,11 @@ void KX_SumoPhysicsController::SetMass(MT_Scalar newmass)
{
}
+MT_Vector3 KX_SumoPhysicsController::GetLocalInertia()
+{
+ return MT_Vector3(0.f, 0.f, 0.f); // \todo
+}
+
MT_Scalar KX_SumoPhysicsController::GetRadius()
{
return SumoPhysicsController::GetRadius();
diff --git a/source/gameengine/Ketsji/KX_SumoPhysicsController.h b/source/gameengine/Ketsji/KX_SumoPhysicsController.h
index 46c8ba6df45..083d89896f6 100644
--- a/source/gameengine/Ketsji/KX_SumoPhysicsController.h
+++ b/source/gameengine/Ketsji/KX_SumoPhysicsController.h
@@ -88,10 +88,15 @@ public:
virtual void setScaling(const MT_Vector3& scaling);
virtual MT_Scalar GetMass();
virtual void SetMass(MT_Scalar newmass);
+ virtual MT_Vector3 GetLocalInertia();
virtual MT_Scalar GetRadius();
virtual MT_Vector3 getReactionForce();
virtual void setRigidBody(bool rigid);
+ virtual float GetLinVelocityMin() { return SumoPhysicsController::GetLinVelocityMin(); }
+ virtual void SetLinVelocityMin(float val) { SumoPhysicsController::SetLinVelocityMin(val); }
+ virtual float GetLinVelocityMax() { return SumoPhysicsController::GetLinVelocityMax(); }
+ virtual void SetLinVelocityMax(float val) { SumoPhysicsController::SetLinVelocityMax(val); }
virtual SG_Controller* GetReplica(class SG_Node* destnode);
diff --git a/source/gameengine/Ketsji/KX_TouchSensor.cpp b/source/gameengine/Ketsji/KX_TouchSensor.cpp
index 705b54edd37..5a6e8e6f501 100644
--- a/source/gameengine/Ketsji/KX_TouchSensor.cpp
+++ b/source/gameengine/Ketsji/KX_TouchSensor.cpp
@@ -242,22 +242,22 @@ bool KX_TouchSensor::NewHandleCollision(void*object1,void*object2,const PHY_Coll
/* ------------------------------------------------------------------------- */
/* Integration hooks ------------------------------------------------------- */
PyTypeObject KX_TouchSensor::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"KX_TouchSensor",
- sizeof(KX_TouchSensor),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0, //&MyPyCompare,
- __repr,
- 0, //&cvalue_as_number,
0,
0,
0,
- 0
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
PyParentObject KX_TouchSensor::Parents[] = {
@@ -286,34 +286,19 @@ PyAttributeDef KX_TouchSensor::Attributes[] = {
KX_PYATTRIBUTE_STRING_RW("property",0,100,false,KX_TouchSensor,m_touchedpropname),
KX_PYATTRIBUTE_BOOL_RW("useMaterial",KX_TouchSensor,m_bFindMaterial),
KX_PYATTRIBUTE_BOOL_RW("pulseCollisions",KX_TouchSensor,m_bTouchPulse),
- KX_PYATTRIBUTE_DUMMY("objectHit"),
- KX_PYATTRIBUTE_DUMMY("objectHitList"),
+ KX_PYATTRIBUTE_RO_FUNCTION("objectHit", KX_TouchSensor, pyattr_get_object_hit),
+ KX_PYATTRIBUTE_RO_FUNCTION("objectHitList", KX_TouchSensor, pyattr_get_object_hit_list),
{ NULL } //Sentinel
};
-PyObject* KX_TouchSensor::_getattr(const char *attr)
-{
- if (!strcmp(attr, "objectHit")) {
- if (m_hitObject) return m_hitObject->AddRef();
- else Py_RETURN_NONE;
- }
- if (!strcmp(attr, "objectHitList")) {
- return m_colliders->AddRef();
- }
-
- PyObject* object= _getattr_self(Attributes, this, attr);
- if (object != NULL)
- return object;
- _getattr_up(SCA_ISensor);
+PyObject* KX_TouchSensor::py_getattro(PyObject *attr)
+{
+ py_getattro_up(SCA_ISensor);
}
-int KX_TouchSensor::_setattr(const char *attr, PyObject *value)
+int KX_TouchSensor::py_setattro(PyObject *attr, PyObject *value)
{
- int ret = _setattr_self(Attributes, this, attr, value);
- if (ret >= 0)
- return ret;
-
- return SCA_ISensor::_setattr(attr, value);
+ py_setattro_up(SCA_ISensor);
}
/* Python API */
@@ -325,7 +310,7 @@ const char KX_TouchSensor::SetProperty_doc[] =
"\tSet the property or material to collide with. Use\n"
"\tsetTouchMaterial() to switch between properties and\n"
"\tmaterials.";
-PyObject* KX_TouchSensor::PySetProperty(PyObject* self, PyObject* value)
+PyObject* KX_TouchSensor::PySetProperty(PyObject* value)
{
ShowDeprecationWarning("setProperty()", "the propertyName property");
char *nameArg= PyString_AsString(value);
@@ -343,21 +328,21 @@ const char KX_TouchSensor::GetProperty_doc[] =
"\tReturns the property or material to collide with. Use\n"
"\tgetTouchMaterial() to find out whether this sensor\n"
"\tlooks for properties or materials.";
-PyObject* KX_TouchSensor::PyGetProperty(PyObject* self) {
+PyObject* KX_TouchSensor::PyGetProperty() {
return PyString_FromString(m_touchedpropname);
}
const char KX_TouchSensor::GetHitObject_doc[] =
"getHitObject()\n"
;
-PyObject* KX_TouchSensor::PyGetHitObject(PyObject* self)
+PyObject* KX_TouchSensor::PyGetHitObject()
{
ShowDeprecationWarning("getHitObject()", "the objectHit property");
/* to do: do Py_IncRef if the object is already known in Python */
/* otherwise, this leaks memory */
if (m_hitObject)
{
- return m_hitObject->AddRef();
+ return m_hitObject->GetProxy();
}
Py_RETURN_NONE;
}
@@ -366,12 +351,12 @@ const char KX_TouchSensor::GetHitObjectList_doc[] =
"getHitObjectList()\n"
"\tReturn a list of the objects this object collided with,\n"
"\tbut only those matching the property/material condition.\n";
-PyObject* KX_TouchSensor::PyGetHitObjectList(PyObject* self)
+PyObject* KX_TouchSensor::PyGetHitObjectList()
{
ShowDeprecationWarning("getHitObjectList()", "the objectHitList property");
/* to do: do Py_IncRef if the object is already known in Python */
/* otherwise, this leaks memory */ /* Edit, this seems ok and not to leak memory - Campbell */
- return m_colliders->AddRef();
+ return m_colliders->GetProxy();
}
/*getTouchMaterial and setTouchMaterial were never added to the api,
@@ -382,9 +367,9 @@ const char KX_TouchSensor::GetTouchMaterial_doc[] =
"getTouchMaterial()\n"
"\tReturns KX_TRUE if this sensor looks for a specific material,\n"
"\tKX_FALSE if it looks for a specific property.\n" ;
-PyObject* KX_TouchSensor::PyGetTouchMaterial(PyObject* self)
+PyObject* KX_TouchSensor::PyGetTouchMaterial()
{
- ShowDeprecationWarning("getTouchMaterial()", "the materialCheck property");
+ ShowDeprecationWarning("getTouchMaterial()", "the useMaterial property");
return PyInt_FromLong(m_bFindMaterial);
}
@@ -395,8 +380,9 @@ const char KX_TouchSensor::SetTouchMaterial_doc[] =
"\t- flag: KX_TRUE or KX_FALSE.\n"
"\tSet flag to KX_TRUE to switch on positive pulse mode,\n"
"\tKX_FALSE to switch off positive pulse mode.\n" ;
-PyObject* KX_TouchSensor::PySetTouchMaterial(PyObject* self, PyObject *value)
+PyObject* KX_TouchSensor::PySetTouchMaterial(PyObject *value)
{
+ ShowDeprecationWarning("setTouchMaterial()", "the useMaterial property");
int pulseArg = PyInt_AsLong(value);
if(pulseArg ==-1 && PyErr_Occurred()) {
@@ -410,4 +396,21 @@ PyObject* KX_TouchSensor::PySetTouchMaterial(PyObject* self, PyObject *value)
}
#endif
+PyObject* KX_TouchSensor::pyattr_get_object_hit(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_TouchSensor* self= static_cast<KX_TouchSensor*>(self_v);
+
+ if (self->m_hitObject)
+ return self->m_hitObject->GetProxy();
+ else
+ Py_RETURN_NONE;
+}
+
+PyObject* KX_TouchSensor::pyattr_get_object_hit_list(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_TouchSensor* self= static_cast<KX_TouchSensor*>(self_v);
+ return self->m_colliders->GetProxy();
+}
+
+
/* eof */
diff --git a/source/gameengine/Ketsji/KX_TouchSensor.h b/source/gameengine/Ketsji/KX_TouchSensor.h
index 18ce9406a9b..15ef653c1b2 100644
--- a/source/gameengine/Ketsji/KX_TouchSensor.h
+++ b/source/gameengine/Ketsji/KX_TouchSensor.h
@@ -120,8 +120,8 @@ public:
/* Python interface ---------------------------------------------------- */
/* --------------------------------------------------------------------- */
- virtual PyObject* _getattr(const char *attr);
- virtual int _setattr(const char *attr, PyObject *value);
+ virtual PyObject* py_getattro(PyObject *attr);
+ virtual int py_setattro(PyObject *attr, PyObject *value);
//Deprecated ----->
/* 1. setProperty */
@@ -140,6 +140,10 @@ public:
#endif
//<-----
+ static PyObject* pyattr_get_object_hit(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_object_hit_list(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+
+
};
#endif //__KX_TOUCHSENSOR
diff --git a/source/gameengine/Ketsji/KX_TrackToActuator.cpp b/source/gameengine/Ketsji/KX_TrackToActuator.cpp
index 8637bc92d39..fbf43de6cf4 100644
--- a/source/gameengine/Ketsji/KX_TrackToActuator.cpp
+++ b/source/gameengine/Ketsji/KX_TrackToActuator.cpp
@@ -402,7 +402,7 @@ bool KX_TrackToActuator::Update(double curtime, bool frame)
// set the models tranformation properties
curobj->NodeSetLocalOrientation(mat);
curobj->NodeSetLocalPosition(localpos);
- curobj->UpdateTransform();
+ //curobj->UpdateTransform();
}
else
{
@@ -425,22 +425,22 @@ bool KX_TrackToActuator::Update(double curtime, bool frame)
/* Integration hooks ------------------------------------------------------- */
PyTypeObject KX_TrackToActuator::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"KX_TrackToActuator",
- sizeof(KX_TrackToActuator),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0, //&MyPyCompare,
- __repr,
- 0, //&cvalue_as_number,
0,
0,
0,
- 0
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
@@ -456,12 +456,11 @@ PyParentObject KX_TrackToActuator::Parents[] = {
PyMethodDef KX_TrackToActuator::Methods[] = {
+ // ---> deprecated
{"setTime", (PyCFunction) KX_TrackToActuator::sPySetTime, METH_VARARGS, (PY_METHODCHAR)SetTime_doc},
- {"getTime", (PyCFunction) KX_TrackToActuator::sPyGetTime, METH_VARARGS, (PY_METHODCHAR)GetTime_doc},
+ {"getTime", (PyCFunction) KX_TrackToActuator::sPyGetTime, METH_NOARGS, (PY_METHODCHAR)GetTime_doc},
{"setUse3D", (PyCFunction) KX_TrackToActuator::sPySetUse3D, METH_VARARGS, (PY_METHODCHAR)SetUse3D_doc},
- {"getUse3D", (PyCFunction) KX_TrackToActuator::sPyGetUse3D, METH_VARARGS, (PY_METHODCHAR)GetUse3D_doc},
-
- // ---> deprecated
+ {"getUse3D", (PyCFunction) KX_TrackToActuator::sPyGetUse3D, METH_NOARGS, (PY_METHODCHAR)GetUse3D_doc},
{"setObject", (PyCFunction) KX_TrackToActuator::sPySetObject, METH_O, (PY_METHODCHAR)SetObject_doc},
{"getObject", (PyCFunction) KX_TrackToActuator::sPyGetObject, METH_VARARGS, (PY_METHODCHAR)GetObject_doc},
@@ -469,40 +468,50 @@ PyMethodDef KX_TrackToActuator::Methods[] = {
};
PyAttributeDef KX_TrackToActuator::Attributes[] = {
+ KX_PYATTRIBUTE_INT_RW("time",0,1000,true,KX_TrackToActuator,m_time),
+ KX_PYATTRIBUTE_BOOL_RW("use3D",KX_TrackToActuator,m_allow3D),
+ KX_PYATTRIBUTE_RW_FUNCTION("object", KX_TrackToActuator, pyattr_get_object, pyattr_set_object),
+
{ NULL } //Sentinel
};
-
-PyObject* KX_TrackToActuator::_getattr(const char *attr)
+PyObject* KX_TrackToActuator::pyattr_get_object(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef)
{
- if (!strcmp(attr, "object")) {
- if (!m_object) Py_RETURN_NONE;
- else return m_object->AddRef();
- }
-
- _getattr_up(SCA_IActuator);
+ KX_TrackToActuator* actuator = static_cast<KX_TrackToActuator*>(self);
+ if (!actuator->m_object)
+ Py_RETURN_NONE;
+ else
+ return actuator->m_object->GetProxy();
}
-int KX_TrackToActuator::_setattr(const char *attr, PyObject* value)
+int KX_TrackToActuator::pyattr_set_object(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
{
- if (!strcmp(attr, "object")) {
- KX_GameObject *gameobj;
+ KX_TrackToActuator* actuator = static_cast<KX_TrackToActuator*>(self);
+ KX_GameObject *gameobj;
- if (!ConvertPythonToGameObject(value, &gameobj, true))
- return 1; // ConvertPythonToGameObject sets the error
+ if (!ConvertPythonToGameObject(value, &gameobj, true, "actuator.object = value: KX_TrackToActuator"))
+ return 1; // ConvertPythonToGameObject sets the error
- if (m_object != NULL)
- m_object->UnregisterActuator(this);
+ if (actuator->m_object != NULL)
+ actuator->m_object->UnregisterActuator(actuator);
- m_object = (SCA_IObject*)gameobj;
+ actuator->m_object = (SCA_IObject*) gameobj;
- if (m_object)
- m_object->RegisterActuator(this);
+ if (actuator->m_object)
+ actuator->m_object->RegisterActuator(actuator);
- return 0;
- }
-
- return SCA_IActuator::_setattr(attr, value);
+ return 0;
+}
+
+
+PyObject* KX_TrackToActuator::py_getattro(PyObject *attr)
+{
+ py_getattro_up(SCA_IActuator);
+}
+
+int KX_TrackToActuator::py_setattro(PyObject *attr, PyObject* value)
+{
+ py_setattro_up(SCA_IActuator);
}
/* 1. setObject */
@@ -510,13 +519,13 @@ const char KX_TrackToActuator::SetObject_doc[] =
"setObject(object)\n"
"\t- object: KX_GameObject, string or None\n"
"\tSet the object to track with the parent of this actuator.\n";
-PyObject* KX_TrackToActuator::PySetObject(PyObject* self, PyObject* value)
+PyObject* KX_TrackToActuator::PySetObject(PyObject* value)
{
KX_GameObject *gameobj;
ShowDeprecationWarning("setObject()", "the object property");
- if (!ConvertPythonToGameObject(value, &gameobj, true))
+ if (!ConvertPythonToGameObject(value, &gameobj, true, "actuator.setObject(value): KX_TrackToActuator"))
return NULL; // ConvertPythonToGameObject sets the error
if (m_object != NULL)
@@ -536,13 +545,13 @@ const char KX_TrackToActuator::GetObject_doc[] =
"getObject(name_only = 1)\n"
"name_only - optional arg, when true will return the KX_GameObject rather then its name\n"
"\tReturns the object to track with the parent of this actuator\n";
-PyObject* KX_TrackToActuator::PyGetObject(PyObject* self, PyObject* args)
+PyObject* KX_TrackToActuator::PyGetObject(PyObject* args)
{
int ret_name_only = 1;
ShowDeprecationWarning("getObject()", "the object property");
- if (!PyArg_ParseTuple(args, "|i", &ret_name_only))
+ if (!PyArg_ParseTuple(args, "|i:getObject", &ret_name_only))
return NULL;
if (!m_object)
@@ -551,7 +560,7 @@ PyObject* KX_TrackToActuator::PyGetObject(PyObject* self, PyObject* args)
if (ret_name_only)
return PyString_FromString(m_object->GetName());
else
- return m_object->AddRef();
+ return m_object->GetProxy();
}
@@ -561,11 +570,12 @@ const char KX_TrackToActuator::SetTime_doc[] =
"setTime(time)\n"
"\t- time: integer\n"
"\tSet the time in frames with which to delay the tracking motion.\n";
-PyObject* KX_TrackToActuator::PySetTime(PyObject* self, PyObject* args, PyObject* kwds)
+PyObject* KX_TrackToActuator::PySetTime(PyObject* args)
{
+ ShowDeprecationWarning("setTime()", "the timer property");
int timeArg;
- if (!PyArg_ParseTuple(args, "i", &timeArg))
+ if (!PyArg_ParseTuple(args, "i:setTime", &timeArg))
{
return NULL;
}
@@ -582,8 +592,9 @@ const char KX_TrackToActuator::GetTime_doc[] =
"getTime()\n"
"\t- time: integer\n"
"\tReturn the time in frames with which the tracking motion is delayed.\n";
-PyObject* KX_TrackToActuator::PyGetTime(PyObject* self, PyObject* args, PyObject* kwds)
+PyObject* KX_TrackToActuator::PyGetTime()
{
+ ShowDeprecationWarning("getTime()", "the timer property");
return PyInt_FromLong(m_time);
}
@@ -593,8 +604,9 @@ PyObject* KX_TrackToActuator::PyGetTime(PyObject* self, PyObject* args, PyObject
const char KX_TrackToActuator::GetUse3D_doc[] =
"getUse3D()\n"
"\tReturns 1 if the motion is allowed to extend in the z-direction.\n";
-PyObject* KX_TrackToActuator::PyGetUse3D(PyObject* self, PyObject* args, PyObject* kwds)
+PyObject* KX_TrackToActuator::PyGetUse3D()
{
+ ShowDeprecationWarning("setTime()", "the use3D property");
return PyInt_FromLong(!(m_allow3D == 0));
}
@@ -606,11 +618,12 @@ const char KX_TrackToActuator::SetUse3D_doc[] =
"\t- value: 0 or 1\n"
"\tSet to 1 to allow the tracking motion to extend in the z-direction,\n"
"\tset to 0 to lock the tracking motion to the x-y plane.\n";
-PyObject* KX_TrackToActuator::PySetUse3D(PyObject* self, PyObject* args, PyObject* kwds)
+PyObject* KX_TrackToActuator::PySetUse3D(PyObject* args)
{
+ ShowDeprecationWarning("setTime()", "the use3D property");
int boolArg;
- if (!PyArg_ParseTuple(args, "i", &boolArg)) {
+ if (!PyArg_ParseTuple(args, "i:setUse3D", &boolArg)) {
return NULL;
}
diff --git a/source/gameengine/Ketsji/KX_TrackToActuator.h b/source/gameengine/Ketsji/KX_TrackToActuator.h
index 392e55402f1..99505f93cfe 100644
--- a/source/gameengine/Ketsji/KX_TrackToActuator.h
+++ b/source/gameengine/Ketsji/KX_TrackToActuator.h
@@ -72,21 +72,25 @@ class KX_TrackToActuator : public SCA_IActuator
virtual bool Update(double curtime, bool frame);
/* Python part */
- virtual PyObject* _getattr(const char *attr);
- virtual int _setattr(const char *attr, PyObject* value);
-
+ virtual PyObject* py_getattro(PyObject *attr);
+ virtual int py_setattro(PyObject *attr, PyObject* value);
+
+ /* These are used to get and set m_ob */
+ static PyObject* pyattr_get_object(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
+ static int pyattr_set_object(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+
/* 1. setObject */
KX_PYMETHOD_DOC_O(KX_TrackToActuator,SetObject);
/* 2. getObject */
KX_PYMETHOD_DOC_VARARGS(KX_TrackToActuator,GetObject);
/* 3. setTime */
- KX_PYMETHOD_DOC(KX_TrackToActuator,SetTime);
+ KX_PYMETHOD_DOC_VARARGS(KX_TrackToActuator,SetTime);
/* 4. getTime */
- KX_PYMETHOD_DOC(KX_TrackToActuator,GetTime);
+ KX_PYMETHOD_DOC_NOARGS(KX_TrackToActuator,GetTime);
/* 5. getUse3D */
- KX_PYMETHOD_DOC(KX_TrackToActuator,GetUse3D);
+ KX_PYMETHOD_DOC_NOARGS(KX_TrackToActuator,GetUse3D);
/* 6. setUse3D */
- KX_PYMETHOD_DOC(KX_TrackToActuator,SetUse3D);
+ KX_PYMETHOD_DOC_VARARGS(KX_TrackToActuator,SetUse3D);
}; /* end of class KX_TrackToActuator : public KX_EditObjectActuator */
diff --git a/source/gameengine/Ketsji/KX_VehicleWrapper.cpp b/source/gameengine/Ketsji/KX_VehicleWrapper.cpp
index 8d5af1b9216..1a6fb196db5 100644
--- a/source/gameengine/Ketsji/KX_VehicleWrapper.cpp
+++ b/source/gameengine/Ketsji/KX_VehicleWrapper.cpp
@@ -35,9 +35,7 @@ KX_VehicleWrapper::~KX_VehicleWrapper()
}
-PyObject* KX_VehicleWrapper::PyAddWheel(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_VehicleWrapper::PyAddWheel(PyObject* args)
{
PyObject* pylistPos,*pylistDir,*pylistAxleDir;
@@ -46,14 +44,18 @@ PyObject* KX_VehicleWrapper::PyAddWheel(PyObject* self,
int hasSteering;
- if (PyArg_ParseTuple(args,"OOOOffi",&wheelGameObject,&pylistPos,&pylistDir,&pylistAxleDir,&suspensionRestLength,&wheelRadius,&hasSteering))
+ if (PyArg_ParseTuple(args,"OOOOffi:addWheel",&wheelGameObject,&pylistPos,&pylistDir,&pylistAxleDir,&suspensionRestLength,&wheelRadius,&hasSteering))
{
- KX_GameObject* gameOb = (KX_GameObject*) wheelGameObject;
+ KX_GameObject *gameOb;
+ if (!ConvertPythonToGameObject(wheelGameObject, &gameOb, false, "vehicle.addWheel(...): KX_VehicleWrapper (first argument)"))
+ return NULL;
+
if (gameOb->GetSGNode())
{
PHY_IMotionState* motionState = new KX_MotionState(gameOb->GetSGNode());
-
+
+ /* TODO - no error checking here! - bad juju */
MT_Vector3 attachPos,attachDir,attachAxle;
PyVecTo(pylistPos,attachPos);
PyVecTo(pylistDir,attachDir);
@@ -82,14 +84,12 @@ PyObject* KX_VehicleWrapper::PyAddWheel(PyObject* self,
-PyObject* KX_VehicleWrapper::PyGetWheelPosition(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_VehicleWrapper::PyGetWheelPosition(PyObject* args)
{
int wheelIndex;
- if (PyArg_ParseTuple(args,"i",&wheelIndex))
+ if (PyArg_ParseTuple(args,"i:getWheelPosition",&wheelIndex))
{
float position[3];
m_vehicle->GetWheelPosition(wheelIndex,position[0],position[1],position[2]);
@@ -99,24 +99,20 @@ PyObject* KX_VehicleWrapper::PyGetWheelPosition(PyObject* self,
return NULL;
}
-PyObject* KX_VehicleWrapper::PyGetWheelRotation(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_VehicleWrapper::PyGetWheelRotation(PyObject* args)
{
int wheelIndex;
- if (PyArg_ParseTuple(args,"i",&wheelIndex))
+ if (PyArg_ParseTuple(args,"i:getWheelRotation",&wheelIndex))
{
return PyFloat_FromDouble(m_vehicle->GetWheelRotation(wheelIndex));
}
return NULL;
}
-PyObject* KX_VehicleWrapper::PyGetWheelOrientationQuaternion(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_VehicleWrapper::PyGetWheelOrientationQuaternion(PyObject* args)
{
int wheelIndex;
- if (PyArg_ParseTuple(args,"i",&wheelIndex))
+ if (PyArg_ParseTuple(args,"i:getWheelOrientationQuaternion",&wheelIndex))
{
float orn[4];
m_vehicle->GetWheelOrientationQuaternion(wheelIndex,orn[0],orn[1],orn[2],orn[3]);
@@ -129,31 +125,25 @@ PyObject* KX_VehicleWrapper::PyGetWheelOrientationQuaternion(PyObject* self,
}
-PyObject* KX_VehicleWrapper::PyGetNumWheels(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_VehicleWrapper::PyGetNumWheels(PyObject* args)
{
return PyInt_FromLong(m_vehicle->GetNumWheels());
}
-PyObject* KX_VehicleWrapper::PyGetConstraintId(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_VehicleWrapper::PyGetConstraintId(PyObject* args)
{
return PyInt_FromLong(m_vehicle->GetUserConstraintId());
}
-PyObject* KX_VehicleWrapper::PyApplyEngineForce(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_VehicleWrapper::PyApplyEngineForce(PyObject* args)
{
float force;
int wheelIndex;
- if (PyArg_ParseTuple(args,"fi",&force,&wheelIndex))
+ if (PyArg_ParseTuple(args,"fi:applyEngineForce",&force,&wheelIndex))
{
force *= -1.f;//someone reverse some conventions inside Bullet (axle winding)
m_vehicle->ApplyEngineForce(force,wheelIndex);
@@ -164,14 +154,12 @@ PyObject* KX_VehicleWrapper::PyApplyEngineForce(PyObject* self,
Py_RETURN_NONE;
}
-PyObject* KX_VehicleWrapper::PySetTyreFriction(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_VehicleWrapper::PySetTyreFriction(PyObject* args)
{
float wheelFriction;
int wheelIndex;
- if (PyArg_ParseTuple(args,"fi",&wheelFriction,&wheelIndex))
+ if (PyArg_ParseTuple(args,"fi:setTyreFriction",&wheelFriction,&wheelIndex))
{
m_vehicle->SetWheelFriction(wheelFriction,wheelIndex);
}
@@ -181,14 +169,12 @@ PyObject* KX_VehicleWrapper::PySetTyreFriction(PyObject* self,
Py_RETURN_NONE;
}
-PyObject* KX_VehicleWrapper::PySetSuspensionStiffness(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_VehicleWrapper::PySetSuspensionStiffness(PyObject* args)
{
float suspensionStiffness;
int wheelIndex;
- if (PyArg_ParseTuple(args,"fi",&suspensionStiffness,&wheelIndex))
+ if (PyArg_ParseTuple(args,"fi:setSuspensionStiffness",&suspensionStiffness,&wheelIndex))
{
m_vehicle->SetSuspensionStiffness(suspensionStiffness,wheelIndex);
}
@@ -198,14 +184,12 @@ PyObject* KX_VehicleWrapper::PySetSuspensionStiffness(PyObject* self,
Py_RETURN_NONE;
}
-PyObject* KX_VehicleWrapper::PySetSuspensionDamping(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_VehicleWrapper::PySetSuspensionDamping(PyObject* args)
{
float suspensionDamping;
int wheelIndex;
- if (PyArg_ParseTuple(args,"fi",&suspensionDamping,&wheelIndex))
+ if (PyArg_ParseTuple(args,"fi:setSuspensionDamping",&suspensionDamping,&wheelIndex))
{
m_vehicle->SetSuspensionDamping(suspensionDamping,wheelIndex);
} else {
@@ -214,14 +198,12 @@ PyObject* KX_VehicleWrapper::PySetSuspensionDamping(PyObject* self,
Py_RETURN_NONE;
}
-PyObject* KX_VehicleWrapper::PySetSuspensionCompression(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_VehicleWrapper::PySetSuspensionCompression(PyObject* args)
{
float suspensionCompression;
int wheelIndex;
- if (PyArg_ParseTuple(args,"fi",&suspensionCompression,&wheelIndex))
+ if (PyArg_ParseTuple(args,"fi:setSuspensionCompression",&suspensionCompression,&wheelIndex))
{
m_vehicle->SetSuspensionCompression(suspensionCompression,wheelIndex);
} else {
@@ -230,14 +212,12 @@ PyObject* KX_VehicleWrapper::PySetSuspensionCompression(PyObject* self,
Py_RETURN_NONE;
}
-PyObject* KX_VehicleWrapper::PySetRollInfluence(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_VehicleWrapper::PySetRollInfluence(PyObject* args)
{
float rollInfluence;
int wheelIndex;
- if (PyArg_ParseTuple(args,"fi",&rollInfluence,&wheelIndex))
+ if (PyArg_ParseTuple(args,"fi:setRollInfluence",&rollInfluence,&wheelIndex))
{
m_vehicle->SetRollInfluence(rollInfluence,wheelIndex);
}
@@ -248,14 +228,12 @@ PyObject* KX_VehicleWrapper::PySetRollInfluence(PyObject* self,
}
-PyObject* KX_VehicleWrapper::PyApplyBraking(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_VehicleWrapper::PyApplyBraking(PyObject* args)
{
float braking;
int wheelIndex;
- if (PyArg_ParseTuple(args,"fi",&braking,&wheelIndex))
+ if (PyArg_ParseTuple(args,"fi:applyBraking",&braking,&wheelIndex))
{
m_vehicle->ApplyBraking(braking,wheelIndex);
}
@@ -268,14 +246,12 @@ PyObject* KX_VehicleWrapper::PyApplyBraking(PyObject* self,
-PyObject* KX_VehicleWrapper::PySetSteeringValue(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_VehicleWrapper::PySetSteeringValue(PyObject* args)
{
float steeringValue;
int wheelIndex;
- if (PyArg_ParseTuple(args,"fi",&steeringValue,&wheelIndex))
+ if (PyArg_ParseTuple(args,"fi:setSteeringValue",&steeringValue,&wheelIndex))
{
m_vehicle->SetSteeringValue(steeringValue,wheelIndex);
}
@@ -286,9 +262,7 @@ PyObject* KX_VehicleWrapper::PySetSteeringValue(PyObject* self,
}
-PyObject* KX_VehicleWrapper::PyGetConstraintType(PyObject* self,
- PyObject* args,
- PyObject* kwds)
+PyObject* KX_VehicleWrapper::PyGetConstraintType(PyObject* args)
{
return PyInt_FromLong(m_vehicle->GetUserConstraintType());
}
@@ -299,38 +273,39 @@ PyObject* KX_VehicleWrapper::PyGetConstraintType(PyObject* self,
//python specific stuff
PyTypeObject KX_VehicleWrapper::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"KX_VehicleWrapper",
- sizeof(KX_VehicleWrapper),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0, //&MyPyCompare,
- __repr,
- 0, //&cvalue_as_number,
0,
0,
0,
- 0
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
PyParentObject KX_VehicleWrapper::Parents[] = {
&KX_VehicleWrapper::Type,
+ &PyObjectPlus::Type,
NULL
};
-PyObject* KX_VehicleWrapper::_getattr(const char *attr)
+PyObject* KX_VehicleWrapper::py_getattro(PyObject *attr)
{
//here you can search for existing data members (like mass,friction etc.)
- _getattr_up(PyObjectPlus);
+ py_getattro_up(PyObjectPlus);
}
-int KX_VehicleWrapper::_setattr(const char *attr,PyObject* pyobj)
+int KX_VehicleWrapper::py_setattro(PyObject *attr,PyObject* pyobj)
{
-
+ /* TODO - strange setattr, needs updating */
PyTypeObject* type = pyobj->ob_type;
int result = 1;
@@ -352,7 +327,7 @@ int KX_VehicleWrapper::_setattr(const char *attr,PyObject* pyobj)
result = 0;
}
if (result)
- result = PyObjectPlus::_setattr(attr,pyobj);
+ result = PyObjectPlus::py_setattro(attr,pyobj);
return result;
};
diff --git a/source/gameengine/Ketsji/KX_VehicleWrapper.h b/source/gameengine/Ketsji/KX_VehicleWrapper.h
index cad926ce85a..de7fe75cfba 100644
--- a/source/gameengine/Ketsji/KX_VehicleWrapper.h
+++ b/source/gameengine/Ketsji/KX_VehicleWrapper.h
@@ -12,8 +12,8 @@ class PHY_IMotionState;
class KX_VehicleWrapper : public PyObjectPlus
{
Py_Header;
- virtual PyObject* _getattr(const char *attr);
- virtual int _setattr(const char *attr, PyObject *value);
+ virtual PyObject* py_getattro(PyObject *attr);
+ virtual int py_setattro(PyObject *attr, PyObject *value);
std::vector<PHY_IMotionState*> m_motionStates;
@@ -23,31 +23,31 @@ public:
int getConstraintId();
- KX_PYMETHOD(KX_VehicleWrapper,AddWheel);
- KX_PYMETHOD(KX_VehicleWrapper,GetNumWheels);
- KX_PYMETHOD(KX_VehicleWrapper,GetWheelOrientationQuaternion);
- KX_PYMETHOD(KX_VehicleWrapper,GetWheelRotation);
+ KX_PYMETHOD_VARARGS(KX_VehicleWrapper,AddWheel);
+ KX_PYMETHOD_VARARGS(KX_VehicleWrapper,GetNumWheels);
+ KX_PYMETHOD_VARARGS(KX_VehicleWrapper,GetWheelOrientationQuaternion);
+ KX_PYMETHOD_VARARGS(KX_VehicleWrapper,GetWheelRotation);
- KX_PYMETHOD(KX_VehicleWrapper,GetWheelPosition);
+ KX_PYMETHOD_VARARGS(KX_VehicleWrapper,GetWheelPosition);
- KX_PYMETHOD(KX_VehicleWrapper,GetConstraintId);
- KX_PYMETHOD(KX_VehicleWrapper,GetConstraintType);
+ KX_PYMETHOD_VARARGS(KX_VehicleWrapper,GetConstraintId);
+ KX_PYMETHOD_VARARGS(KX_VehicleWrapper,GetConstraintType);
- KX_PYMETHOD(KX_VehicleWrapper,SetSteeringValue);
+ KX_PYMETHOD_VARARGS(KX_VehicleWrapper,SetSteeringValue);
- KX_PYMETHOD(KX_VehicleWrapper,ApplyEngineForce);
+ KX_PYMETHOD_VARARGS(KX_VehicleWrapper,ApplyEngineForce);
- KX_PYMETHOD(KX_VehicleWrapper,ApplyBraking);
+ KX_PYMETHOD_VARARGS(KX_VehicleWrapper,ApplyBraking);
- KX_PYMETHOD(KX_VehicleWrapper,SetTyreFriction);
+ KX_PYMETHOD_VARARGS(KX_VehicleWrapper,SetTyreFriction);
- KX_PYMETHOD(KX_VehicleWrapper,SetSuspensionStiffness);
+ KX_PYMETHOD_VARARGS(KX_VehicleWrapper,SetSuspensionStiffness);
- KX_PYMETHOD(KX_VehicleWrapper,SetSuspensionDamping);
+ KX_PYMETHOD_VARARGS(KX_VehicleWrapper,SetSuspensionDamping);
- KX_PYMETHOD(KX_VehicleWrapper,SetSuspensionCompression);
+ KX_PYMETHOD_VARARGS(KX_VehicleWrapper,SetSuspensionCompression);
- KX_PYMETHOD(KX_VehicleWrapper,SetRollInfluence);
+ KX_PYMETHOD_VARARGS(KX_VehicleWrapper,SetRollInfluence);
private:
diff --git a/source/gameengine/Ketsji/KX_VertexProxy.cpp b/source/gameengine/Ketsji/KX_VertexProxy.cpp
index da0e3dbdd8d..88f63334285 100644
--- a/source/gameengine/Ketsji/KX_VertexProxy.cpp
+++ b/source/gameengine/Ketsji/KX_VertexProxy.cpp
@@ -37,22 +37,22 @@
#include "KX_PyMath.h"
PyTypeObject KX_VertexProxy::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+ PyObject_HEAD_INIT(NULL)
0,
"KX_VertexProxy",
- sizeof(KX_VertexProxy),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0, //&MyPyCompare,
- __repr,
- 0, //&cvalue_as_number,
0,
0,
0,
- 0
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
};
PyParentObject KX_VertexProxy::Parents[] = {
@@ -79,47 +79,71 @@ PyMethodDef KX_VertexProxy::Methods[] = {
};
PyAttributeDef KX_VertexProxy::Attributes[] = {
+
+ KX_PYATTRIBUTE_DUMMY("x"),
+ KX_PYATTRIBUTE_DUMMY("y"),
+ KX_PYATTRIBUTE_DUMMY("z"),
+
+ KX_PYATTRIBUTE_DUMMY("r"),
+ KX_PYATTRIBUTE_DUMMY("g"),
+ KX_PYATTRIBUTE_DUMMY("b"),
+ KX_PYATTRIBUTE_DUMMY("a"),
+
+ KX_PYATTRIBUTE_DUMMY("u"),
+ KX_PYATTRIBUTE_DUMMY("v"),
+
+ KX_PYATTRIBUTE_DUMMY("u2"),
+ KX_PYATTRIBUTE_DUMMY("v2"),
+
+ KX_PYATTRIBUTE_DUMMY("XYZ"),
+ KX_PYATTRIBUTE_DUMMY("UV"),
+
+ KX_PYATTRIBUTE_DUMMY("color"),
+ KX_PYATTRIBUTE_DUMMY("colour"),
+
+ KX_PYATTRIBUTE_DUMMY("normal"),
+
{ NULL } //Sentinel
};
PyObject*
-KX_VertexProxy::_getattr(const char *attr)
+KX_VertexProxy::py_getattro(PyObject *attr)
{
-
- if (attr[1]=='\0') { // Group single letters
+ char *attr_str= PyString_AsString(attr);
+ if (attr_str[1]=='\0') { // Group single letters
// pos
- if (attr[0]=='x')
+ if (attr_str[0]=='x')
return PyFloat_FromDouble(m_vertex->getXYZ()[0]);
- if (attr[0]=='y')
+ if (attr_str[0]=='y')
return PyFloat_FromDouble(m_vertex->getXYZ()[1]);
- if (attr[0]=='z')
+ if (attr_str[0]=='z')
return PyFloat_FromDouble(m_vertex->getXYZ()[2]);
// Col
- if (attr[0]=='r')
+ if (attr_str[0]=='r')
return PyFloat_FromDouble(m_vertex->getRGBA()[0]/255.0);
- if (attr[0]=='g')
+ if (attr_str[0]=='g')
return PyFloat_FromDouble(m_vertex->getRGBA()[1]/255.0);
- if (attr[0]=='b')
+ if (attr_str[0]=='b')
return PyFloat_FromDouble(m_vertex->getRGBA()[2]/255.0);
- if (attr[0]=='a')
+ if (attr_str[0]=='a')
return PyFloat_FromDouble(m_vertex->getRGBA()[3]/255.0);
// UV
- if (attr[0]=='u')
+ if (attr_str[0]=='u')
return PyFloat_FromDouble(m_vertex->getUV1()[0]);
- if (attr[0]=='v')
+ if (attr_str[0]=='v')
return PyFloat_FromDouble(m_vertex->getUV1()[1]);
}
- if (!strcmp(attr, "XYZ"))
+ if (!strcmp(attr_str, "XYZ"))
return PyObjectFrom(MT_Vector3(m_vertex->getXYZ()));
- if (!strcmp(attr, "UV"))
+ if (!strcmp(attr_str, "UV"))
return PyObjectFrom(MT_Point2(m_vertex->getUV1()));
- if (!strcmp(attr, "color") || !strcmp(attr, "colour"))
+ if (!strcmp(attr_str, "color") || !strcmp(attr_str, "colour"))
{
const unsigned char *colp = m_vertex->getRGBA();
MT_Vector4 color(colp[0], colp[1], colp[2], colp[3]);
@@ -127,64 +151,65 @@ KX_VertexProxy::_getattr(const char *attr)
return PyObjectFrom(color);
}
- if (!strcmp(attr, "normal"))
+ if (!strcmp(attr_str, "normal"))
{
return PyObjectFrom(MT_Vector3(m_vertex->getNormal()));
}
- _getattr_up(SCA_IObject);
+ py_getattro_up(SCA_IObject);
}
-int KX_VertexProxy::_setattr(const char *attr, PyObject *pyvalue)
+int KX_VertexProxy::py_setattro(PyObject *attr, PyObject *pyvalue)
{
+ char *attr_str= PyString_AsString(attr);
if (PySequence_Check(pyvalue))
{
- if (!strcmp(attr, "XYZ"))
+ if (!strcmp(attr_str, "XYZ"))
{
MT_Point3 vec;
if (PyVecTo(pyvalue, vec))
{
m_vertex->SetXYZ(vec);
m_mesh->SetMeshModified(true);
- return 0;
+ return PY_SET_ATTR_SUCCESS;
}
- return 1;
+ return PY_SET_ATTR_FAIL;
}
- if (!strcmp(attr, "UV"))
+ if (!strcmp(attr_str, "UV"))
{
MT_Point2 vec;
if (PyVecTo(pyvalue, vec))
{
m_vertex->SetUV(vec);
m_mesh->SetMeshModified(true);
- return 0;
+ return PY_SET_ATTR_SUCCESS;
}
- return 1;
+ return PY_SET_ATTR_FAIL;
}
- if (!strcmp(attr, "color") || !strcmp(attr, "colour"))
+ if (!strcmp(attr_str, "color") || !strcmp(attr_str, "colour"))
{
MT_Vector4 vec;
if (PyVecTo(pyvalue, vec))
{
m_vertex->SetRGBA(vec);
m_mesh->SetMeshModified(true);
- return 0;
+ return PY_SET_ATTR_SUCCESS;
}
- return 1;
+ return PY_SET_ATTR_FAIL;
}
- if (!strcmp(attr, "normal"))
+ if (!strcmp(attr_str, "normal"))
{
MT_Vector3 vec;
if (PyVecTo(pyvalue, vec))
{
m_vertex->SetNormal(vec);
m_mesh->SetMeshModified(true);
- return 0;
+ return PY_SET_ATTR_SUCCESS;
}
- return 1;
+ return PY_SET_ATTR_FAIL;
}
}
@@ -193,51 +218,51 @@ int KX_VertexProxy::_setattr(const char *attr, PyObject *pyvalue)
float val = PyFloat_AsDouble(pyvalue);
// pos
MT_Point3 pos(m_vertex->getXYZ());
- if (!strcmp(attr, "x"))
+ if (!strcmp(attr_str, "x"))
{
pos.x() = val;
m_vertex->SetXYZ(pos);
m_mesh->SetMeshModified(true);
- return 0;
+ return PY_SET_ATTR_SUCCESS;
}
- if (!strcmp(attr, "y"))
+ if (!strcmp(attr_str, "y"))
{
pos.y() = val;
m_vertex->SetXYZ(pos);
m_mesh->SetMeshModified(true);
- return 0;
+ return PY_SET_ATTR_SUCCESS;
}
- if (!strcmp(attr, "z"))
+ if (!strcmp(attr_str, "z"))
{
pos.z() = val;
m_vertex->SetXYZ(pos);
m_mesh->SetMeshModified(true);
- return 0;
+ return PY_SET_ATTR_SUCCESS;
}
// uv
MT_Point2 uv = m_vertex->getUV1();
- if (!strcmp(attr, "u"))
+ if (!strcmp(attr_str, "u"))
{
uv[0] = val;
m_vertex->SetUV(uv);
m_mesh->SetMeshModified(true);
- return 0;
+ return PY_SET_ATTR_SUCCESS;
}
- if (!strcmp(attr, "v"))
+ if (!strcmp(attr_str, "v"))
{
uv[1] = val;
m_vertex->SetUV(uv);
m_mesh->SetMeshModified(true);
- return 0;
+ return PY_SET_ATTR_SUCCESS;
}
// uv
MT_Point2 uv2 = m_vertex->getUV2();
- if (!strcmp(attr, "u2"))
+ if (!strcmp(attr_str, "u2"))
{
uv[0] = val;
m_vertex->SetUV2(uv);
@@ -245,49 +270,49 @@ int KX_VertexProxy::_setattr(const char *attr, PyObject *pyvalue)
return 0;
}
- if (!strcmp(attr, "v2"))
+ if (!strcmp(attr_str, "v2"))
{
uv[1] = val;
m_vertex->SetUV2(uv);
m_mesh->SetMeshModified(true);
- return 0;
+ return PY_SET_ATTR_SUCCESS;
}
// col
unsigned int icol = *((const unsigned int *)m_vertex->getRGBA());
unsigned char *cp = (unsigned char*) &icol;
val *= 255.0;
- if (!strcmp(attr, "r"))
+ if (!strcmp(attr_str, "r"))
{
cp[0] = (unsigned char) val;
m_vertex->SetRGBA(icol);
m_mesh->SetMeshModified(true);
- return 0;
+ return PY_SET_ATTR_SUCCESS;
}
- if (!strcmp(attr, "g"))
+ if (!strcmp(attr_str, "g"))
{
cp[1] = (unsigned char) val;
m_vertex->SetRGBA(icol);
m_mesh->SetMeshModified(true);
- return 0;
+ return PY_SET_ATTR_SUCCESS;
}
- if (!strcmp(attr, "b"))
+ if (!strcmp(attr_str, "b"))
{
cp[2] = (unsigned char) val;
m_vertex->SetRGBA(icol);
m_mesh->SetMeshModified(true);
- return 0;
+ return PY_SET_ATTR_SUCCESS;
}
- if (!strcmp(attr, "a"))
+ if (!strcmp(attr_str, "a"))
{
cp[3] = (unsigned char) val;
m_vertex->SetRGBA(icol);
m_mesh->SetMeshModified(true);
- return 0;
+ return PY_SET_ATTR_SUCCESS;
}
}
- return SCA_IObject::_setattr(attr, pyvalue);
+ return SCA_IObject::py_setattro(attr, pyvalue);
}
KX_VertexProxy::KX_VertexProxy(KX_MeshProxy*mesh, RAS_TexVert* vertex)
@@ -307,7 +332,7 @@ CValue* KX_VertexProxy::Calc(VALUE_OPERATOR, CValue *) { return NULL;}
CValue* KX_VertexProxy::CalcFinal(VALUE_DATA_TYPE, VALUE_OPERATOR, CValue *) { return NULL;}
STR_String sVertexName="vertex";
const STR_String & KX_VertexProxy::GetText() {return sVertexName;};
-float KX_VertexProxy::GetNumber() { return -1;}
+double KX_VertexProxy::GetNumber() { return -1;}
STR_String KX_VertexProxy::GetName() { return sVertexName;}
void KX_VertexProxy::SetName(STR_String) { };
CValue* KX_VertexProxy::GetReplica() { return NULL;}
@@ -316,12 +341,12 @@ void KX_VertexProxy::ReplicaSetName(STR_String) {};
// stuff for python integration
-PyObject* KX_VertexProxy::PyGetXYZ(PyObject*)
+PyObject* KX_VertexProxy::PyGetXYZ()
{
return PyObjectFrom(MT_Point3(m_vertex->getXYZ()));
}
-PyObject* KX_VertexProxy::PySetXYZ(PyObject*, PyObject* value)
+PyObject* KX_VertexProxy::PySetXYZ(PyObject* value)
{
MT_Point3 vec;
if (!PyVecTo(value, vec))
@@ -332,12 +357,12 @@ PyObject* KX_VertexProxy::PySetXYZ(PyObject*, PyObject* value)
Py_RETURN_NONE;
}
-PyObject* KX_VertexProxy::PyGetNormal(PyObject*)
+PyObject* KX_VertexProxy::PyGetNormal()
{
return PyObjectFrom(MT_Vector3(m_vertex->getNormal()));
}
-PyObject* KX_VertexProxy::PySetNormal(PyObject*, PyObject* value)
+PyObject* KX_VertexProxy::PySetNormal(PyObject* value)
{
MT_Vector3 vec;
if (!PyVecTo(value, vec))
@@ -349,13 +374,13 @@ PyObject* KX_VertexProxy::PySetNormal(PyObject*, PyObject* value)
}
-PyObject* KX_VertexProxy::PyGetRGBA(PyObject*)
+PyObject* KX_VertexProxy::PyGetRGBA()
{
int *rgba = (int *) m_vertex->getRGBA();
return PyInt_FromLong(*rgba);
}
-PyObject* KX_VertexProxy::PySetRGBA(PyObject*, PyObject* value)
+PyObject* KX_VertexProxy::PySetRGBA(PyObject* value)
{
if PyInt_Check(value) {
int rgba = PyInt_AsLong(value);
@@ -373,17 +398,17 @@ PyObject* KX_VertexProxy::PySetRGBA(PyObject*, PyObject* value)
}
}
- PyErr_SetString(PyExc_TypeError, "expected a 4D vector or an int");
+ PyErr_SetString(PyExc_TypeError, "vert.setRGBA(value): KX_VertexProxy, expected a 4D vector or an int");
return NULL;
}
-PyObject* KX_VertexProxy::PyGetUV(PyObject*)
+PyObject* KX_VertexProxy::PyGetUV()
{
return PyObjectFrom(MT_Vector2(m_vertex->getUV1()));
}
-PyObject* KX_VertexProxy::PySetUV(PyObject*, PyObject* value)
+PyObject* KX_VertexProxy::PySetUV(PyObject* value)
{
MT_Point2 vec;
if (!PyVecTo(value, vec))
@@ -394,12 +419,12 @@ PyObject* KX_VertexProxy::PySetUV(PyObject*, PyObject* value)
Py_RETURN_NONE;
}
-PyObject* KX_VertexProxy::PyGetUV2(PyObject*)
+PyObject* KX_VertexProxy::PyGetUV2()
{
return PyObjectFrom(MT_Vector2(m_vertex->getUV2()));
}
-PyObject* KX_VertexProxy::PySetUV2(PyObject*, PyObject* args)
+PyObject* KX_VertexProxy::PySetUV2(PyObject* args)
{
MT_Point2 vec;
unsigned int unit=0;
diff --git a/source/gameengine/Ketsji/KX_VertexProxy.h b/source/gameengine/Ketsji/KX_VertexProxy.h
index 28196075904..67a15d96768 100644
--- a/source/gameengine/Ketsji/KX_VertexProxy.h
+++ b/source/gameengine/Ketsji/KX_VertexProxy.h
@@ -46,7 +46,7 @@ public:
CValue* Calc(VALUE_OPERATOR op, CValue *val) ;
CValue* CalcFinal(VALUE_DATA_TYPE dtype, VALUE_OPERATOR op, CValue *val);
const STR_String & GetText();
- float GetNumber();
+ double GetNumber();
STR_String GetName();
void SetName(STR_String name); // Set the name of the value
void ReplicaSetName(STR_String name);
@@ -54,8 +54,8 @@ public:
// stuff for python integration
- virtual PyObject* _getattr(const char *attr);
- virtual int _setattr(const char *attr, PyObject *pyvalue);
+ virtual PyObject* py_getattro(PyObject *attr);
+ virtual int py_setattro(PyObject *attr, PyObject *pyvalue);
KX_PYMETHOD_NOARGS(KX_VertexProxy,GetXYZ);
KX_PYMETHOD_O(KX_VertexProxy,SetXYZ);
diff --git a/source/gameengine/Ketsji/KX_VisibilityActuator.cpp b/source/gameengine/Ketsji/KX_VisibilityActuator.cpp
index 0ec280080bd..ba59d0d3d47 100644
--- a/source/gameengine/Ketsji/KX_VisibilityActuator.cpp
+++ b/source/gameengine/Ketsji/KX_VisibilityActuator.cpp
@@ -38,11 +38,13 @@
KX_VisibilityActuator::KX_VisibilityActuator(
SCA_IObject* gameobj,
bool visible,
+ bool occlusion,
bool recursive,
PyTypeObject* T
)
: SCA_IActuator(gameobj,T),
m_visible(visible),
+ m_occlusion(occlusion),
m_recursive(recursive)
{
// intentionally empty
@@ -78,6 +80,7 @@ KX_VisibilityActuator::Update()
KX_GameObject *obj = (KX_GameObject*) GetParent();
obj->SetVisible(m_visible, m_recursive);
+ obj->SetOccluder(m_occlusion, m_recursive);
obj->UpdateBuckets(m_recursive);
return false;
@@ -90,24 +93,24 @@ KX_VisibilityActuator::Update()
/* Integration hooks ------------------------------------------------------- */
-PyTypeObject
-KX_VisibilityActuator::Type = {
- PyObject_HEAD_INIT(&PyType_Type)
+PyTypeObject KX_VisibilityActuator::Type = {
+ PyObject_HEAD_INIT(NULL)
0,
"KX_VisibilityActuator",
- sizeof(KX_VisibilityActuator),
+ sizeof(PyObjectPlus_Proxy),
0,
- PyDestructor,
+ py_base_dealloc,
0,
- __getattr,
- __setattr,
- 0, //&MyPyCompare,
- __repr,
- 0, //&cvalue_as_number,
0,
0,
0,
- 0
+ py_base_repr,
+ 0,0,0,0,0,0,
+ py_base_getattro,
+ py_base_setattro,
+ 0,0,0,0,0,0,0,0,0,
+ Methods
+
};
PyParentObject
@@ -121,20 +124,29 @@ KX_VisibilityActuator::Parents[] = {
PyMethodDef
KX_VisibilityActuator::Methods[] = {
- {"set", (PyCFunction) KX_VisibilityActuator::sPySetVisible,
- METH_VARARGS, (PY_METHODCHAR)SetVisible_doc},
+ // Deprecated ----->
+ {"set", (PyCFunction) KX_VisibilityActuator::sPySetVisible, METH_VARARGS,
+ (PY_METHODCHAR) SetVisible_doc},
+ // <-----
{NULL,NULL} //Sentinel
};
PyAttributeDef KX_VisibilityActuator::Attributes[] = {
+ KX_PYATTRIBUTE_BOOL_RW("visibility", KX_VisibilityActuator, m_visible),
+ KX_PYATTRIBUTE_BOOL_RW("occlusion", KX_VisibilityActuator, m_occlusion),
+ KX_PYATTRIBUTE_BOOL_RW("recursion", KX_VisibilityActuator, m_recursive),
{ NULL } //Sentinel
};
-PyObject* KX_VisibilityActuator::_getattr(const char *attr)
+PyObject* KX_VisibilityActuator::py_getattro(PyObject *attr)
{
- _getattr_up(SCA_IActuator);
-};
+ py_getattro_up(SCA_IActuator);
+}
+int KX_VisibilityActuator::py_setattro(PyObject *attr, PyObject *value)
+{
+ py_setattro_up(SCA_IActuator);
+}
/* set visibility ---------------------------------------------------------- */
@@ -145,12 +157,11 @@ KX_VisibilityActuator::SetVisible_doc[] =
"\tSet the properties of the actuator.\n";
PyObject*
-KX_VisibilityActuator::PySetVisible(PyObject* self,
- PyObject* args,
- PyObject* kwds) {
+KX_VisibilityActuator::PySetVisible(PyObject* args) {
int vis;
+ ShowDeprecationWarning("SetVisible()", "the visible property");
- if(!PyArg_ParseTuple(args, "i", &vis)) {
+ if(!PyArg_ParseTuple(args, "i:setVisible", &vis)) {
return NULL;
}
diff --git a/source/gameengine/Ketsji/KX_VisibilityActuator.h b/source/gameengine/Ketsji/KX_VisibilityActuator.h
index 323280de8cb..04633bce665 100644
--- a/source/gameengine/Ketsji/KX_VisibilityActuator.h
+++ b/source/gameengine/Ketsji/KX_VisibilityActuator.h
@@ -39,6 +39,7 @@ class KX_VisibilityActuator : public SCA_IActuator
/** Make visible? */
bool m_visible;
+ bool m_occlusion;
bool m_recursive;
public:
@@ -46,6 +47,7 @@ class KX_VisibilityActuator : public SCA_IActuator
KX_VisibilityActuator(
SCA_IObject* gameobj,
bool visible,
+ bool occlusion,
bool recursive,
PyTypeObject* T=&Type
);
@@ -67,9 +69,13 @@ class KX_VisibilityActuator : public SCA_IActuator
/* Python interface ---------------------------------------------------- */
/* --------------------------------------------------------------------- */
- virtual PyObject* _getattr(const char *attr);
- //KX_PYMETHOD_DOC
- KX_PYMETHOD_DOC(KX_VisibilityActuator,SetVisible);
+ virtual PyObject* py_getattro(PyObject *attr);
+ virtual int py_setattro(PyObject *attr, PyObject *value);
+
+ // Deprecated ----->
+ KX_PYMETHOD_DOC_VARARGS(KX_VisibilityActuator,SetVisible);
+ // <-----
+
};
diff --git a/source/gameengine/Ketsji/SConscript b/source/gameengine/Ketsji/SConscript
index 950c82b2795..921aba9c11f 100644
--- a/source/gameengine/Ketsji/SConscript
+++ b/source/gameengine/Ketsji/SConscript
@@ -6,7 +6,7 @@ Import ('env')
sources = env.Glob('*.cpp')
defs = ''
-#XXX
+# XXX 2.5
# Mathutils C files.
#sources.extend([\
# '#source/blender/python/api2_2x/Mathutils.c',\
@@ -18,11 +18,20 @@ defs = ''
# '#source/blender/python/api2_2x/quat.c',\
# '#source/blender/python/api2_2x/vector.c',\
#])
+#
+#sources.extend([\
+# '#source/blender/python/api2_2x/bpy_internal_import.c'
+#])
+#
+#
+#sources.extend([\
+# '#source/blender/python/api2_2x/BGL.c'
+#])
-incs = '. #source/blender/python/api2_2x' # Only for Mathutils! - no other deps
+incs = '. #source/blender/python/api2_2x' # Only for Mathutils! and bpy_internal_import.h, be very careful
incs += ' #source/kernel/gen_system #intern/string #intern/guardedalloc'
-incs += ' #source/gameengine/Rasterizer/RAS_OpenGLRasterizer #intern/bmfont'
+incs += ' #source/gameengine/Rasterizer/RAS_OpenGLRasterizer'
incs += ' #intern/SoundSystem #intern/SoundSystem/include #intern/SoundSystem/openal'
incs += ' #intern/SoundSystem/dummy #intern/SoundSystem/intern #source/gameengine/Converter'
incs += ' #source/gameengine/BlenderRoutines #source/blender/imbuf #intern/moto/include'
diff --git a/source/gameengine/Network/NG_NetworkScene.h b/source/gameengine/Network/NG_NetworkScene.h
index 58de9cf6af2..fc6367c3526 100644
--- a/source/gameengine/Network/NG_NetworkScene.h
+++ b/source/gameengine/Network/NG_NetworkScene.h
@@ -34,6 +34,11 @@
#include "STR_HashedString.h"
#include <vector>
+//MSVC defines SendMessage as a win api function, even though we aren't using it
+#ifdef SendMessage
+ #undef SendMessage
+#endif
+
class NG_NetworkDeviceInterface;
class NG_NetworkScene
diff --git a/source/gameengine/Physics/BlOde/OdePhysicsController.h b/source/gameengine/Physics/BlOde/OdePhysicsController.h
index 925f5b6686a..e97afdb68c3 100644
--- a/source/gameengine/Physics/BlOde/OdePhysicsController.h
+++ b/source/gameengine/Physics/BlOde/OdePhysicsController.h
@@ -124,6 +124,10 @@ public:
float getFriction() { return m_friction;}
float getRestitution() { return m_restitution;}
+ float GetLinVelocityMin() const { return 0.f; }
+ void SetLinVelocityMin(float val) { }
+ float GetLinVelocityMax() const { return 0.f; }
+ void SetLinVelocityMax(float val) { }
private:
diff --git a/source/gameengine/Physics/BlOde/OdePhysicsEnvironment.h b/source/gameengine/Physics/BlOde/OdePhysicsEnvironment.h
index dcc87d614c0..2e4709cf420 100644
--- a/source/gameengine/Physics/BlOde/OdePhysicsEnvironment.h
+++ b/source/gameengine/Physics/BlOde/OdePhysicsEnvironment.h
@@ -55,6 +55,7 @@ public:
virtual void removeConstraint(void * constraintid);
virtual PHY_IPhysicsController* rayTest(PHY_IRayCastFilterCallback &filterCallback,float fromX,float fromY,float fromZ, float toX,float toY,float toZ);
+ virtual bool cullingTest(PHY_CullingCallback callback, void* userData, PHY__Vector4* planes, int nplanes, int occlusionRes) { return false; }
//gamelogic callbacks
diff --git a/source/gameengine/Physics/Bullet/CMakeLists.txt b/source/gameengine/Physics/Bullet/CMakeLists.txt
index 6c733786caf..ec2cdede683 100644
--- a/source/gameengine/Physics/Bullet/CMakeLists.txt
+++ b/source/gameengine/Physics/Bullet/CMakeLists.txt
@@ -24,16 +24,24 @@
#
# ***** END GPL LICENSE BLOCK *****
-SET(SRC CcdPhysicsEnvironment.cpp CcdPhysicsController.cpp)
+SET(SRC CcdPhysicsEnvironment.cpp CcdPhysicsController.cpp CcdGraphicController.cpp)
SET(INC
.
../common
../../../../extern/bullet2/src
+ ../../../../extern/glew/include
../../../../intern/moto/include
../../../kernel/gen_system
../../../../intern/string
+ ../../../../intern/SoundSystem
../../Rasterizer
+ ../../Ketsji
+ ../../Expressions
+ ../../GameLogic
+ ../../SceneGraph
+ ../../../../source/blender/makesdna
+ ${PYTHON_INC}
)
BLENDERLIB(bf_bullet "${SRC}" "${INC}")
diff --git a/source/gameengine/Physics/Bullet/CcdGraphicController.cpp b/source/gameengine/Physics/Bullet/CcdGraphicController.cpp
new file mode 100644
index 00000000000..caf18fd28ba
--- /dev/null
+++ b/source/gameengine/Physics/Bullet/CcdGraphicController.cpp
@@ -0,0 +1,112 @@
+/*
+Bullet Continuous Collision Detection and Physics Library
+Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
+
+This software is provided 'as-is', without any express or implied warranty.
+In no event will the authors be held liable for any damages arising from the use of this software.
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute it freely,
+subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
+2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
+3. This notice may not be removed or altered from any source distribution.
+*/
+
+#include "CcdPhysicsEnvironment.h"
+#include "CcdGraphicController.h"
+#include "btBulletDynamicsCommon.h"
+#include "MT_Point3.h"
+
+
+CcdGraphicController::CcdGraphicController (CcdPhysicsEnvironment* phyEnv, PHY_IMotionState* motionState) :
+ m_localAabbMin(0.f, 0.f, 0.f),
+ m_localAabbMax(0.f, 0.f, 0.f),
+ m_motionState(motionState),
+ m_phyEnv(phyEnv),
+ m_handle(NULL),
+ m_newClientInfo(NULL)
+{
+}
+
+CcdGraphicController::~CcdGraphicController()
+{
+ if (m_phyEnv)
+ m_phyEnv->removeCcdGraphicController(this);
+
+ if (m_motionState)
+ delete m_motionState;
+}
+
+void CcdGraphicController::setLocalAabb(const btVector3& aabbMin,const btVector3& aabbMax)
+{
+ m_localAabbMin = aabbMin;
+ m_localAabbMax = aabbMax;
+ SetGraphicTransform();
+}
+
+void CcdGraphicController::setLocalAabb(const MT_Point3& aabbMin,const MT_Point3& aabbMax)
+{
+ m_localAabbMin = btVector3(aabbMin[0],aabbMin[1],aabbMin[2]);
+ m_localAabbMax = btVector3(aabbMax[0],aabbMax[1],aabbMax[2]);
+ SetGraphicTransform();
+}
+
+
+void CcdGraphicController::getAabb(btVector3& aabbMin, btVector3& aabbMax)
+{
+ btVector3 pos;
+ btVector3 scale;
+ float ori[12];
+ m_motionState->getWorldPosition(pos.m_floats[0],pos.m_floats[1],pos.m_floats[2]);
+ m_motionState->getWorldScaling(scale.m_floats[0],scale.m_floats[1],scale.m_floats[2]);
+ m_motionState->getWorldOrientation(ori);
+ btMatrix3x3 rot(ori[0], ori[4], ori[8],
+ ori[1], ori[5], ori[9],
+ ori[2], ori[6], ori[10]);
+
+ btVector3 localAabbMin = m_localAabbMin;
+ btVector3 localAabbMax = m_localAabbMax;
+ btVector3 tmpAabbMin = m_localAabbMin * scale;
+ btVector3 tmpAabbMax = m_localAabbMax * scale;
+
+ localAabbMin[0] = (scale.getX() >= 0.) ? tmpAabbMin[0] : tmpAabbMax[0];
+ localAabbMin[1] = (scale.getY() >= 0.) ? tmpAabbMin[1] : tmpAabbMax[1];
+ localAabbMin[2] = (scale.getZ() >= 0.) ? tmpAabbMin[2] : tmpAabbMax[2];
+ localAabbMax[0] = (scale.getX() <= 0.) ? tmpAabbMin[0] : tmpAabbMax[0];
+ localAabbMax[1] = (scale.getY() <= 0.) ? tmpAabbMin[1] : tmpAabbMax[1];
+ localAabbMax[2] = (scale.getZ() <= 0.) ? tmpAabbMin[2] : tmpAabbMax[2];
+
+ btVector3 localHalfExtents = btScalar(0.5)*(localAabbMax-localAabbMin);
+ btVector3 localCenter = btScalar(0.5)*(localAabbMax+localAabbMin);
+
+ btMatrix3x3 abs_b = rot.absolute();
+ btVector3 center = rot*localCenter + pos;
+ btVector3 extent = abs_b*localHalfExtents;
+ aabbMin = center - extent;
+ aabbMax = center + extent;
+}
+
+bool CcdGraphicController::SetGraphicTransform()
+{
+ if (!m_handle)
+ return false;
+ btVector3 aabbMin;
+ btVector3 aabbMax;
+ getAabb(aabbMin, aabbMax);
+ // update Aabb in broadphase
+ m_phyEnv->getCullingTree()->setAabb(m_handle,aabbMin,aabbMax,NULL);
+ return true;
+}
+
+PHY_IGraphicController* CcdGraphicController::GetReplica(class PHY_IMotionState* motionState)
+{
+ CcdGraphicController* replica = new CcdGraphicController(*this);
+ replica->m_motionState = motionState;
+ replica->m_newClientInfo = NULL;
+ replica->m_handle = NULL;
+ m_phyEnv->addCcdGraphicController(replica);
+ return replica;
+}
+
+
diff --git a/source/gameengine/Physics/Bullet/CcdGraphicController.h b/source/gameengine/Physics/Bullet/CcdGraphicController.h
new file mode 100644
index 00000000000..8faa0944313
--- /dev/null
+++ b/source/gameengine/Physics/Bullet/CcdGraphicController.h
@@ -0,0 +1,74 @@
+/*
+Bullet Continuous Collision Detection and Physics Library
+Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
+
+This software is provided 'as-is', without any express or implied warranty.
+In no event will the authors be held liable for any damages arising from the use of this software.
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute it freely,
+subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
+2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
+3. This notice may not be removed or altered from any source distribution.
+*/
+
+
+#ifndef BULLET2_GRAPHICCONTROLLER_H
+#define BULLET2_GRAPHICCONTROLLER_H
+
+#include "PHY_IGraphicController.h"
+
+#include "btBulletDynamicsCommon.h"
+#include "LinearMath/btTransform.h"
+
+#include "PHY_IMotionState.h"
+#include "MT_Point3.h"
+
+class CcdPhysicsEnvironment;
+class btCollisionObject;
+
+///CcdGraphicController is a graphic object that supports view frustrum culling and occlusion
+class CcdGraphicController : public PHY_IGraphicController
+{
+public:
+ CcdGraphicController(CcdPhysicsEnvironment* phyEnv, PHY_IMotionState* motionState);
+
+ virtual ~CcdGraphicController();
+
+ void setLocalAabb(const btVector3& aabbMin,const btVector3& aabbMax);
+ void setLocalAabb(const MT_Point3& aabbMin,const MT_Point3& aabbMax);
+
+ PHY_IMotionState* GetMotionState() { return m_motionState; }
+ void getAabb(btVector3& aabbMin, btVector3& aabbMax);
+
+ virtual void setBroadphaseHandle(btBroadphaseProxy* handle) { m_handle = handle; }
+ virtual btBroadphaseProxy* getBroadphaseHandle() { return m_handle; }
+
+ ////////////////////////////////////
+ // PHY_IGraphicController interface
+ ////////////////////////////////////
+
+ /**
+ * Updates the Aabb based on the motion state
+ */
+ virtual bool SetGraphicTransform();
+
+ // client info for culling
+ virtual void* getNewClientInfo() { return m_newClientInfo; }
+ virtual void setNewClientInfo(void* clientinfo) { m_newClientInfo = clientinfo; }
+ virtual PHY_IGraphicController* GetReplica(class PHY_IMotionState* motionstate);
+
+private:
+ // unscaled aabb corner
+ btVector3 m_localAabbMin;
+ btVector3 m_localAabbMax;
+
+ PHY_IMotionState* m_motionState;
+ CcdPhysicsEnvironment* m_phyEnv;
+ btBroadphaseProxy* m_handle;
+ void* m_newClientInfo;
+
+};
+
+#endif //BULLET2_PHYSICSCONTROLLER_H
diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp b/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp
index eecdea55349..0b9da8f46d3 100644
--- a/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp
+++ b/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp
@@ -16,6 +16,9 @@ subject to the following restrictions:
#include "CcdPhysicsController.h"
#include "btBulletDynamicsCommon.h"
#include "BulletCollision/CollisionShapes/btScaledBvhTriangleMeshShape.h"
+
+#include "BulletCollision/CollisionShapes/btTriangleIndexVertexArray.h"
+
#include "PHY_IMotionState.h"
#include "CcdPhysicsEnvironment.h"
#include "RAS_MeshObject.h"
@@ -24,10 +27,14 @@ subject to the following restrictions:
#include "BulletSoftBody/btSoftBodyHelpers.h"
#include "LinearMath/btConvexHull.h"
#include "BulletCollision/Gimpact/btGImpactShape.h"
+#include "BulletCollision/Gimpact/btGImpactShape.h"
#include "BulletSoftBody/btSoftRigidDynamicsWorld.h"
+#include "DNA_mesh_types.h"
+#include "DNA_meshdata_types.h"
+
class BP_Proxy;
///todo: fill all the empty CcdPhysicsController methods, hook them up to the btRigidBody class
@@ -577,7 +584,19 @@ bool CcdPhysicsController::SynchronizeMotionStates(float time)
if (body && !body->isStaticObject())
{
-
+
+ if ((m_cci.m_clamp_vel_max>0.0) || (m_cci.m_clamp_vel_min>0.0))
+ {
+ const btVector3& linvel = body->getLinearVelocity();
+ float len= linvel.length();
+
+ if((m_cci.m_clamp_vel_max>0.0) && (len > m_cci.m_clamp_vel_max))
+ body->setLinearVelocity(linvel * (m_cci.m_clamp_vel_max / len));
+
+ else if ((m_cci.m_clamp_vel_min>0.0) && btFuzzyZero(len)==0 && (len < m_cci.m_clamp_vel_min))
+ body->setLinearVelocity(linvel * (m_cci.m_clamp_vel_min / len));
+ }
+
const btVector3& worldPos = body->getCenterOfMassPosition();
m_MotionState->setWorldPosition(worldPos[0],worldPos[1],worldPos[2]);
@@ -1238,6 +1257,22 @@ void DefaultMotionState::getWorldOrientation(float& quatIma0,float& quatIma1,flo
quatReal = m_worldTransform.getRotation()[3];
}
+void DefaultMotionState::getWorldOrientation(float* ori)
+{
+ *ori++ = m_worldTransform.getBasis()[0].x();
+ *ori++ = m_worldTransform.getBasis()[1].x();
+ *ori++ = m_worldTransform.getBasis()[1].x();
+ *ori++ = 0.f;
+ *ori++ = m_worldTransform.getBasis()[0].y();
+ *ori++ = m_worldTransform.getBasis()[1].y();
+ *ori++ = m_worldTransform.getBasis()[1].y();
+ *ori++ = 0.f;
+ *ori++ = m_worldTransform.getBasis()[0].z();
+ *ori++ = m_worldTransform.getBasis()[1].z();
+ *ori++ = m_worldTransform.getBasis()[1].z();
+ *ori++ = 0.f;
+}
+
void DefaultMotionState::setWorldPosition(float posX,float posY,float posZ)
{
btVector3 pos(posX,posY,posZ);
@@ -1272,123 +1307,212 @@ CcdShapeConstructionInfo* CcdShapeConstructionInfo::FindMesh(RAS_MeshObject* mes
bool CcdShapeConstructionInfo::SetMesh(RAS_MeshObject* meshobj, bool polytope,bool useGimpact)
{
+ int numpolys;
+
m_useGimpact = useGimpact;
// assume no shape information
// no support for dynamic change of shape yet
assert(IsUnused());
m_shapeType = PHY_SHAPE_NONE;
- m_vertexArray.clear();
- m_polygonIndexArray.clear();
m_meshObject = NULL;
- if (!meshobj)
- return false;
-
- // Mesh has no polygons!
- int numpolys = meshobj->NumPolygons();
- if (!numpolys)
- {
+ // No mesh object or mesh has no polys
+ if (!meshobj || meshobj->HasColliderPolygon()==false) {
+ m_vertexArray.clear();
+ m_polygonIndexArray.clear();
+ m_triFaceArray.clear();
return false;
}
- // check that we have at least one colliding polygon
- int numvalidpolys = 0;
+ numpolys = meshobj->NumPolygons();
- for (int p=0; p<numpolys; p++)
- {
- RAS_Polygon* poly = meshobj->GetPolygon(p);
+ m_shapeType = (polytope) ? PHY_SHAPE_POLYTOPE : PHY_SHAPE_MESH;
- // only add polygons that have the collisionflag set
- if (poly->IsCollider())
+ /* Convert blender geometry into bullet mesh, need these vars for mapping */
+ vector<bool> vert_tag_array(meshobj->GetMesh()->totvert, false);
+ unsigned int tot_bt_verts= 0;
+ unsigned int orig_index;
+ int i;
+
+ if (polytope)
+ {
+ // Tag verts we're using
+ for (int p2=0; p2<numpolys; p2++)
{
- numvalidpolys++;
- break;
- }
- }
+ RAS_Polygon* poly= meshobj->GetPolygon(p2);
- // No collision polygons
- if (numvalidpolys < 1)
- return false;
+ // only add polygons that have the collision flag set
+ if (poly->IsCollider())
+ {
+ for(i=0; i<poly->VertexCount(); i++) {
+ orig_index= poly->GetVertex(i)->getOrigIndex();
+ if (vert_tag_array[orig_index]==false)
+ {
+ vert_tag_array[orig_index]= true;
+ tot_bt_verts++;
+ }
+ }
+ }
+ }
- m_shapeType = (polytope) ? PHY_SHAPE_POLYTOPE : PHY_SHAPE_MESH;
+ m_vertexArray.resize(tot_bt_verts);
- numvalidpolys = 0;
+ btVector3 *bt= &m_vertexArray[0];
- for (int p2=0; p2<numpolys; p2++)
- {
- RAS_Polygon* poly = meshobj->GetPolygon(p2);
+ for (int p2=0; p2<numpolys; p2++)
+ {
+ RAS_Polygon* poly= meshobj->GetPolygon(p2);
- // only add polygons that have the collisionflag set
- if (poly->IsCollider())
- {
- //Bullet can raycast any shape, so
- if (polytope)
+ // only add polygons that have the collisionflag set
+ if (poly->IsCollider())
{
- for (int i=0;i<poly->VertexCount();i++)
- {
- const float* vtx = poly->GetVertex(i)->getXYZ();
- btVector3 point(vtx[0],vtx[1],vtx[2]);
- //avoid duplicates (could better directly use vertex offsets, rather than a vertex compare)
- bool found = false;
- for (int j=0;j<m_vertexArray.size();j++)
+ for(i=0; i<poly->VertexCount(); i++) {
+ RAS_TexVert *v= poly->GetVertex(i);
+ orig_index= v->getOrigIndex();
+
+ if (vert_tag_array[orig_index]==true)
{
- if (m_vertexArray[j]==point)
- {
- found = true;
- break;
- }
- }
- if (!found)
- m_vertexArray.push_back(point);
+ const float* vtx = v->getXYZ();
+ vert_tag_array[orig_index]= false;
- numvalidpolys++;
+ bt->setX(vtx[0]); bt->setY(vtx[1]); bt->setZ(vtx[2]);
+ bt++;
+ }
}
- } else
+ }
+ }
+ }
+ else {
+ unsigned int tot_bt_tris= 0;
+ vector<int> vert_remap_array(meshobj->GetMesh()->totvert, 0);
+
+ // Tag verts we're using
+ for (int p2=0; p2<numpolys; p2++)
+ {
+ RAS_Polygon* poly= meshobj->GetPolygon(p2);
+
+ // only add polygons that have the collision flag set
+ if (poly->IsCollider())
{
- {
- const float* vtx = poly->GetVertex(2)->getXYZ();
- btVector3 vertex0(vtx[0],vtx[1],vtx[2]);
+ for(i=0; i<poly->VertexCount(); i++) {
+ orig_index= poly->GetVertex(i)->getOrigIndex();
+ if (vert_tag_array[orig_index]==false)
+ {
+ vert_tag_array[orig_index]= true;
+ vert_remap_array[orig_index]= tot_bt_verts;
+ tot_bt_verts++;
+ }
+ }
+
+ tot_bt_tris += (i==4 ? 2:1); /* a quad or a tri */
+ }
+ }
- vtx = poly->GetVertex(1)->getXYZ();
- btVector3 vertex1(vtx[0],vtx[1],vtx[2]);
+ m_vertexArray.resize(tot_bt_verts);
+ m_polygonIndexArray.resize(tot_bt_tris);
+ m_triFaceArray.resize(tot_bt_tris*3);
- vtx = poly->GetVertex(0)->getXYZ();
- btVector3 vertex2(vtx[0],vtx[1],vtx[2]);
+ btVector3 *bt= &m_vertexArray[0];
+ int *poly_index_pt= &m_polygonIndexArray[0];
+ int *tri_pt= &m_triFaceArray[0];
- m_vertexArray.push_back(vertex0);
- m_vertexArray.push_back(vertex1);
- m_vertexArray.push_back(vertex2);
- m_polygonIndexArray.push_back(p2);
- numvalidpolys++;
+
+ for (int p2=0; p2<numpolys; p2++)
+ {
+ RAS_Polygon* poly= meshobj->GetPolygon(p2);
+
+ // only add polygons that have the collisionflag set
+ if (poly->IsCollider())
+ {
+ RAS_TexVert *v1= poly->GetVertex(0);
+ RAS_TexVert *v2= poly->GetVertex(1);
+ RAS_TexVert *v3= poly->GetVertex(2);
+ int i1= v1->getOrigIndex();
+ int i2= v2->getOrigIndex();
+ int i3= v3->getOrigIndex();
+ const float* vtx;
+
+ // the face indicies
+ tri_pt[0]= vert_remap_array[i1];
+ tri_pt[1]= vert_remap_array[i2];
+ tri_pt[2]= vert_remap_array[i3];
+ tri_pt= tri_pt+3;
+
+ // m_polygonIndexArray
+ *poly_index_pt= p2;
+ poly_index_pt++;
+
+ // the vertex location
+ if (vert_tag_array[i1]==true) { /* *** v1 *** */
+ vert_tag_array[i1]= false;
+ vtx = v1->getXYZ();
+ bt->setX(vtx[0]); bt->setY( vtx[1]); bt->setZ(vtx[2]);
+ bt++;
+ }
+ if (vert_tag_array[i2]==true) { /* *** v2 *** */
+ vert_tag_array[i2]= false;
+ vtx = v2->getXYZ();
+ bt->setX(vtx[0]); bt->setY(vtx[1]); bt->setZ(vtx[2]);
+ bt++;
}
- if (poly->VertexCount() == 4)
+ if (vert_tag_array[i3]==true) { /* *** v3 *** */
+ vert_tag_array[i3]= false;
+ vtx = v3->getXYZ();
+ bt->setX(vtx[0]); bt->setY(vtx[1]); bt->setZ(vtx[2]);
+ bt++;
+ }
+
+ if (poly->VertexCount()==4)
{
- const float* vtx = poly->GetVertex(3)->getXYZ();
- btVector3 vertex0(vtx[0],vtx[1],vtx[2]);
+ RAS_TexVert *v4= poly->GetVertex(3);
+ int i4= v4->getOrigIndex();
+
+ tri_pt[0]= vert_remap_array[i1];
+ tri_pt[1]= vert_remap_array[i3];
+ tri_pt[2]= vert_remap_array[i4];
+ tri_pt= tri_pt+3;
+
+ // m_polygonIndexArray
+ *poly_index_pt= p2;
+ poly_index_pt++;
+
+ // the vertex location
+ if (vert_tag_array[i4]==true) { /* *** v4 *** */
+ vert_tag_array[i4]= false;
+ vtx = v4->getXYZ();
+ bt->setX(vtx[0]); bt->setY(vtx[1]); bt->setZ(vtx[2]);
+ bt++;
+ }
+ }
+ }
+ }
- vtx = poly->GetVertex(2)->getXYZ();
- btVector3 vertex1(vtx[0],vtx[1],vtx[2]);
- vtx = poly->GetVertex(0)->getXYZ();
- btVector3 vertex2(vtx[0],vtx[1],vtx[2]);
+ /* If this ever gets confusing, print out an OBJ file for debugging */
+#if 0
+ printf("# vert count %d\n", m_vertexArray.size());
+ for(i=0; i<m_vertexArray.size(); i+=1) {
+ printf("v %.6f %.6f %.6f\n", m_vertexArray[i].x(), m_vertexArray[i].y(), m_vertexArray[i].z());
+ }
- m_vertexArray.push_back(vertex0);
- m_vertexArray.push_back(vertex1);
- m_vertexArray.push_back(vertex2);
- m_polygonIndexArray.push_back(p2);
- numvalidpolys++;
- }
- }
+ printf("# face count %d\n", m_triFaceArray.size());
+ for(i=0; i<m_triFaceArray.size(); i+=3) {
+ printf("f %d %d %d\n", m_triFaceArray[i]+1, m_triFaceArray[i+1]+1, m_triFaceArray[i+2]+1);
}
+#endif
+
}
- if (!numvalidpolys)
+#if 0
+ if (validpolys==false)
{
// should not happen
m_shapeType = PHY_SHAPE_NONE;
return false;
}
+#endif
+
m_meshObject = meshobj;
if (!polytope)
{
@@ -1413,7 +1537,6 @@ btCollisionShape* CcdShapeConstructionInfo::CreateBulletShape()
{
btCollisionShape* collisionShape = 0;
btTriangleMeshShape* concaveShape = 0;
- btTriangleMesh* collisionMeshData = 0;
btCompoundShape* compoundShape = 0;
CcdShapeConstructionInfo* nextShapeInfo;
@@ -1454,18 +1577,17 @@ btCollisionShape* CcdShapeConstructionInfo::CreateBulletShape()
// One possible optimization is to use directly the btBvhTriangleMeshShape when the scale is 1,1,1
// and btScaledBvhTriangleMeshShape otherwise.
if (m_useGimpact)
- {
- collisionMeshData = new btTriangleMesh();
-
- bool removeDuplicateVertices=true;
-
- // m_vertexArray is necessarily a multiple of 3
- for (int i=0;i<m_vertexArray.size(); i+=3 )
- {
- collisionMeshData->addTriangle(m_vertexArray[i+2],m_vertexArray[i+1],m_vertexArray[i],removeDuplicateVertices);
- }
+ {
+ btTriangleIndexVertexArray* indexVertexArrays = new btTriangleIndexVertexArray(
+ m_polygonIndexArray.size(),
+ &m_triFaceArray[0],
+ 3*sizeof(int),
+ m_vertexArray.size(),
+ (btScalar*) &m_vertexArray[0].x(),
+ sizeof(btVector3)
+ );
- btGImpactMeshShape* gimpactShape = new btGImpactMeshShape(collisionMeshData);
+ btGImpactMeshShape* gimpactShape = new btGImpactMeshShape(indexVertexArrays);
collisionShape = gimpactShape;
gimpactShape->updateBound();
@@ -1474,17 +1596,39 @@ btCollisionShape* CcdShapeConstructionInfo::CreateBulletShape()
{
if (!m_unscaledShape)
{
- collisionMeshData = new btTriangleMesh(true,false);
- collisionMeshData->m_weldingThreshold = m_weldingThreshold;
+
+ btTriangleIndexVertexArray* indexVertexArrays = 0;
- bool removeDuplicateVertices=true;
- // m_vertexArray is necessarily a multiple of 3
- for (int i=0;i<m_vertexArray.size(); i+=3 )
+ ///enable welding, only for the objects that need it (such as soft bodies)
+ if (0.f != m_weldingThreshold1)
{
- collisionMeshData->addTriangle(m_vertexArray[i+2],m_vertexArray[i+1],m_vertexArray[i],removeDuplicateVertices);
+ btTriangleMesh* collisionMeshData = new btTriangleMesh(true,false);
+ collisionMeshData->m_weldingThreshold = m_weldingThreshold1;
+ bool removeDuplicateVertices=true;
+ // m_vertexArray not in multiple of 3 anymore, use m_triFaceArray
+ for(int i=0; i<m_triFaceArray.size(); i+=3) {
+ collisionMeshData->addTriangle(
+ m_vertexArray[m_triFaceArray[i]],
+ m_vertexArray[m_triFaceArray[i+1]],
+ m_vertexArray[m_triFaceArray[i+2]],
+ removeDuplicateVertices
+ );
+ }
+ indexVertexArrays = collisionMeshData;
+
+ } else
+ {
+ indexVertexArrays = new btTriangleIndexVertexArray(
+ m_polygonIndexArray.size(),
+ &m_triFaceArray[0],
+ 3*sizeof(int),
+ m_vertexArray.size(),
+ (btScalar*) &m_vertexArray[0].x(),
+ sizeof(btVector3));
}
+
// this shape will be shared and not deleted until shapeInfo is deleted
- m_unscaledShape = new btBvhTriangleMeshShape( collisionMeshData, true );
+ m_unscaledShape = new btBvhTriangleMeshShape( indexVertexArrays, true );
m_unscaledShape->recalcLocalAabb();
}
collisionShape = new btScaledBvhTriangleMeshShape(m_unscaledShape, btVector3(1.0f,1.0f,1.0f));
diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsController.h b/source/gameengine/Physics/Bullet/CcdPhysicsController.h
index deb3c0880e9..4510bbddf65 100644
--- a/source/gameengine/Physics/Bullet/CcdPhysicsController.h
+++ b/source/gameengine/Physics/Bullet/CcdPhysicsController.h
@@ -72,7 +72,7 @@ public:
m_meshObject(NULL),
m_unscaledShape(NULL),
m_useGimpact(false),
- m_weldingThreshold(0.f),
+ m_weldingThreshold1(0.f),
m_shapeProxy(NULL)
{
m_childTrans.setIdentity();
@@ -107,7 +107,7 @@ public:
}
CcdShapeConstructionInfo* GetChildShape(int i)
{
- if (i < 0 || i >= m_shapeArray.size())
+ if (i < 0 || i >= (int)m_shapeArray.size())
return NULL;
return m_shapeArray.at(i);
@@ -116,7 +116,7 @@ public:
{
if (shapeInfo == NULL)
return -1;
- for (int i=0; i<m_shapeArray.size(); i++)
+ for (int i=0; i<(int)m_shapeArray.size(); i++)
{
CcdShapeConstructionInfo* childInfo = m_shapeArray.at(i);
if ((userData == NULL || userData == childInfo->m_userData) &&
@@ -130,10 +130,10 @@ public:
bool RemoveChildShape(int i)
{
- if (i < 0 || i >= m_shapeArray.size())
+ if (i < 0 || i >= (int)m_shapeArray.size())
return false;
m_shapeArray.at(i)->Release();
- if (i < m_shapeArray.size()-1)
+ if (i < (int)m_shapeArray.size()-1)
m_shapeArray[i] = m_shapeArray.back();
m_shapeArray.pop_back();
return true;
@@ -167,14 +167,17 @@ public:
std::vector<int> m_polygonIndexArray; // Contains the array of polygon index in the
// original mesh that correspond to shape triangles.
// only set for concave mesh shape.
+
+ std::vector<int> m_triFaceArray; // Contains an array of triplets of face indicies
+ // quads turn into 2 tris
- void setVertexWeldingThreshold(float threshold)
+ void setVertexWeldingThreshold1(float threshold)
{
- m_weldingThreshold = threshold;
+ m_weldingThreshold1 = threshold;
}
- float getVertexWeldingThreshold() const
+ float getVertexWeldingThreshold1() const
{
- return m_weldingThreshold;
+ return m_weldingThreshold1;
}
protected:
static std::map<RAS_MeshObject*, CcdShapeConstructionInfo*> m_meshShapeMap;
@@ -185,7 +188,7 @@ protected:
// the actual shape is of type btScaledBvhTriangleMeshShape
std::vector<CcdShapeConstructionInfo*> m_shapeArray; // for compound shapes
bool m_useGimpact; //use gimpact for concave dynamic/moving collision detection
- float m_weldingThreshold; //welding closeby vertices together can improve softbody stability etc.
+ float m_weldingThreshold1; //welding closeby vertices together can improve softbody stability etc.
CcdShapeConstructionInfo* m_shapeProxy; // only used for PHY_SHAPE_PROXY, pointer to actual shape info
};
@@ -211,6 +214,8 @@ struct CcdConstructionInfo
m_gravity(0,0,0),
m_scaling(1.f,1.f,1.f),
m_mass(0.f),
+ m_clamp_vel_min(-1.f),
+ m_clamp_vel_max(-1.f),
m_restitution(0.1f),
m_friction(0.5f),
m_linearDamping(0.1f),
@@ -236,6 +241,8 @@ struct CcdConstructionInfo
btVector3 m_gravity;
btVector3 m_scaling;
btScalar m_mass;
+ btScalar m_clamp_vel_min;
+ btScalar m_clamp_vel_max;
btScalar m_restitution;
btScalar m_friction;
btScalar m_linearDamping;
@@ -476,7 +483,24 @@ class CcdPhysicsController : public PHY_IPhysicsController
}
m_cci.m_radius = margin;
}
-
+
+ // velocity clamping
+ virtual void SetLinVelocityMin(float val)
+ {
+ m_cci.m_clamp_vel_min= val;
+ }
+ virtual float GetLinVelocityMin() const
+ {
+ return m_cci.m_clamp_vel_min;
+ }
+ virtual void SetLinVelocityMax(float val)
+ {
+ m_cci.m_clamp_vel_max= val;
+ }
+ virtual float GetLinVelocityMax() const
+ {
+ return m_cci.m_clamp_vel_max;
+ }
bool wantsSleeping();
@@ -541,6 +565,7 @@ class DefaultMotionState : public PHY_IMotionState
virtual void setWorldPosition(float posX,float posY,float posZ);
virtual void setWorldOrientation(float quatIma0,float quatIma1,float quatIma2,float quatReal);
+ virtual void getWorldOrientation(float* ori);
virtual void calculateWorldTransformations();
diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp b/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp
index dd21e58bd68..3e1e0294321 100644
--- a/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp
+++ b/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp
@@ -18,6 +18,7 @@ subject to the following restrictions:
#include "CcdPhysicsEnvironment.h"
#include "CcdPhysicsController.h"
+#include "CcdGraphicController.h"
#include <algorithm>
#include "btBulletDynamicsCommon.h"
@@ -32,6 +33,10 @@ subject to the following restrictions:
#include "PHY_IMotionState.h"
+#include "KX_GameObject.h"
+#include "RAS_MeshObject.h"
+#include "RAS_Polygon.h"
+#include "RAS_TexVert.h"
#define CCD_CONSTRAINT_DISABLE_LINKED_COLLISION 0x80
@@ -46,7 +51,9 @@ btRaycastVehicle::btVehicleTuning gTuning;
#endif //NEW_BULLET_VEHICLE_SUPPORT
#include "LinearMath/btAabbUtil2.h"
-
+#include "MT_Matrix4x4.h"
+#include "MT_Vector3.h"
+#include "GL/glew.h"
#ifdef WIN32
void DrawRasterizerLine(const float* from,const float* to,int color);
@@ -316,8 +323,10 @@ static void DrawAabb(btIDebugDraw* debugDrawer,const btVector3& from,const btVec
-CcdPhysicsEnvironment::CcdPhysicsEnvironment(btDispatcher* dispatcher,btOverlappingPairCache* pairCache)
-:m_numIterations(10),
+CcdPhysicsEnvironment::CcdPhysicsEnvironment(bool useDbvtCulling,btDispatcher* dispatcher,btOverlappingPairCache* pairCache)
+:m_cullingCache(NULL),
+m_cullingTree(NULL),
+m_numIterations(10),
m_scalingPropagated(false),
m_numTimeSubSteps(1),
m_ccdMode(0),
@@ -350,6 +359,11 @@ m_ownDispatcher(NULL)
//m_broadphase = new btAxisSweep3(btVector3(-1000,-1000,-1000),btVector3(1000,1000,1000));
//m_broadphase = new btSimpleBroadphase();
m_broadphase = new btDbvtBroadphase();
+ // avoid any collision in the culling tree
+ if (useDbvtCulling) {
+ m_cullingCache = new btNullPairCache();
+ m_cullingTree = new btDbvtBroadphase(m_cullingCache);
+ }
m_filterCallback = new CcdOverlapFilterCallBack(this);
m_broadphase->getOverlappingPairCache()->setOverlapFilterCallback(m_filterCallback);
@@ -364,7 +378,6 @@ m_ownDispatcher(NULL)
m_gravity = btVector3(0.f,-10.f,0.f);
m_dynamicsWorld->setGravity(m_gravity);
-
}
void CcdPhysicsEnvironment::addCcdPhysicsController(CcdPhysicsController* ctrl)
@@ -558,6 +571,41 @@ void CcdPhysicsEnvironment::refreshCcdPhysicsController(CcdPhysicsController* ct
}
}
+void CcdPhysicsEnvironment::addCcdGraphicController(CcdGraphicController* ctrl)
+{
+ if (m_cullingTree)
+ {
+ btVector3 minAabb;
+ btVector3 maxAabb;
+ ctrl->getAabb(minAabb, maxAabb);
+
+ ctrl->setBroadphaseHandle(m_cullingTree->createProxy(
+ minAabb,
+ maxAabb,
+ INVALID_SHAPE_PROXYTYPE, // this parameter is not used
+ ctrl,
+ 0, // this object does not collision with anything
+ 0,
+ NULL, // dispatcher => this parameter is not used
+ 0));
+
+ assert(ctrl->getBroadphaseHandle());
+ }
+}
+
+void CcdPhysicsEnvironment::removeCcdGraphicController(CcdGraphicController* ctrl)
+{
+ if (m_cullingTree)
+ {
+ btBroadphaseProxy* bp = ctrl->getBroadphaseHandle();
+ if (bp)
+ {
+ m_cullingTree->destroyProxy(bp,NULL);
+ ctrl->setBroadphaseHandle(0);
+ }
+ }
+}
+
void CcdPhysicsEnvironment::beginFrame()
{
@@ -593,10 +641,10 @@ bool CcdPhysicsEnvironment::proceedDeltaTime(double curTime,float timeStep)
(*it)->SynchronizeMotionStates(timeStep);
}
- for (it=m_controllers.begin(); it!=m_controllers.end(); it++)
- {
- (*it)->SynchronizeMotionStates(timeStep);
- }
+ //for (it=m_controllers.begin(); it!=m_controllers.end(); it++)
+ //{
+ // (*it)->SynchronizeMotionStates(timeStep);
+ //}
for (i=0;i<m_wrapperVehicles.size();i++)
{
@@ -618,9 +666,10 @@ class ClosestRayResultCallbackNotMe : public btCollisionWorld::ClosestRayResultC
public:
ClosestRayResultCallbackNotMe(const btVector3& rayFromWorld,const btVector3& rayToWorld,btCollisionObject* owner,btCollisionObject* parent)
:btCollisionWorld::ClosestRayResultCallback(rayFromWorld,rayToWorld),
- m_owner(owner)
+ m_owner(owner),
+ m_parent(parent)
{
-
+
}
virtual bool needsCollision(btBroadphaseProxy* proxy0) const
@@ -668,7 +717,7 @@ void CcdPhysicsEnvironment::processFhSprings(double curTime,float timeStep)
//btVector3 rayToWorld = rayFromWorld + body->getCenterOfMassTransform().getBasis() * rayDirLocal;
//ray always points down the z axis in world space...
btVector3 rayToWorld = rayFromWorld + rayDirLocal;
-
+
ClosestRayResultCallbackNotMe resultCallback(rayFromWorld,rayToWorld,body,parentBody);
m_dynamicsWorld->rayTest(rayFromWorld,rayToWorld,resultCallback);
@@ -1146,7 +1195,578 @@ PHY_IPhysicsController* CcdPhysicsEnvironment::rayTest(PHY_IRayCastFilterCallbac
return result.m_controller;
}
+// Handles occlusion culling.
+// The implementation is based on the CDTestFramework
+struct OcclusionBuffer
+{
+ struct WriteOCL
+ {
+ static inline bool Process(btScalar& q,btScalar v) { if(q<v) q=v;return(false); }
+ static inline void Occlusion(bool& flag) { flag = true; }
+ };
+ struct QueryOCL
+ {
+ static inline bool Process(btScalar& q,btScalar v) { return(q<=v); }
+ static inline void Occlusion(bool& flag) { }
+ };
+ btScalar* m_buffer;
+ size_t m_bufferSize;
+ bool m_initialized;
+ bool m_occlusion;
+ int m_sizes[2];
+ btScalar m_scales[2];
+ btScalar m_offsets[2];
+ btScalar m_wtc[16]; // world to clip transform
+ btScalar m_mtc[16]; // model to clip transform
+ // constructor: size=largest dimension of the buffer.
+ // Buffer size depends on aspect ratio
+ OcclusionBuffer()
+ {
+ m_initialized=false;
+ m_occlusion = false;
+ m_buffer == NULL;
+ m_bufferSize = 0;
+ }
+ // multiplication of column major matrices: m=m1*m2
+ template<typename T1, typename T2>
+ void CMmat4mul(btScalar* m, const T1* m1, const T2* m2)
+ {
+ m[ 0] = btScalar(m1[ 0]*m2[ 0]+m1[ 4]*m2[ 1]+m1[ 8]*m2[ 2]+m1[12]*m2[ 3]);
+ m[ 1] = btScalar(m1[ 1]*m2[ 0]+m1[ 5]*m2[ 1]+m1[ 9]*m2[ 2]+m1[13]*m2[ 3]);
+ m[ 2] = btScalar(m1[ 2]*m2[ 0]+m1[ 6]*m2[ 1]+m1[10]*m2[ 2]+m1[14]*m2[ 3]);
+ m[ 3] = btScalar(m1[ 3]*m2[ 0]+m1[ 7]*m2[ 1]+m1[11]*m2[ 2]+m1[15]*m2[ 3]);
+
+ m[ 4] = btScalar(m1[ 0]*m2[ 4]+m1[ 4]*m2[ 5]+m1[ 8]*m2[ 6]+m1[12]*m2[ 7]);
+ m[ 5] = btScalar(m1[ 1]*m2[ 4]+m1[ 5]*m2[ 5]+m1[ 9]*m2[ 6]+m1[13]*m2[ 7]);
+ m[ 6] = btScalar(m1[ 2]*m2[ 4]+m1[ 6]*m2[ 5]+m1[10]*m2[ 6]+m1[14]*m2[ 7]);
+ m[ 7] = btScalar(m1[ 3]*m2[ 4]+m1[ 7]*m2[ 5]+m1[11]*m2[ 6]+m1[15]*m2[ 7]);
+
+ m[ 8] = btScalar(m1[ 0]*m2[ 8]+m1[ 4]*m2[ 9]+m1[ 8]*m2[10]+m1[12]*m2[11]);
+ m[ 9] = btScalar(m1[ 1]*m2[ 8]+m1[ 5]*m2[ 9]+m1[ 9]*m2[10]+m1[13]*m2[11]);
+ m[10] = btScalar(m1[ 2]*m2[ 8]+m1[ 6]*m2[ 9]+m1[10]*m2[10]+m1[14]*m2[11]);
+ m[11] = btScalar(m1[ 3]*m2[ 8]+m1[ 7]*m2[ 9]+m1[11]*m2[10]+m1[15]*m2[11]);
+
+ m[12] = btScalar(m1[ 0]*m2[12]+m1[ 4]*m2[13]+m1[ 8]*m2[14]+m1[12]*m2[15]);
+ m[13] = btScalar(m1[ 1]*m2[12]+m1[ 5]*m2[13]+m1[ 9]*m2[14]+m1[13]*m2[15]);
+ m[14] = btScalar(m1[ 2]*m2[12]+m1[ 6]*m2[13]+m1[10]*m2[14]+m1[14]*m2[15]);
+ m[15] = btScalar(m1[ 3]*m2[12]+m1[ 7]*m2[13]+m1[11]*m2[14]+m1[15]*m2[15]);
+ }
+ void setup(int size)
+ {
+ m_initialized=false;
+ m_occlusion=false;
+ // compute the size of the buffer
+ GLint v[4];
+ GLdouble m[16],p[16];
+ int maxsize;
+ double ratio;
+ glGetIntegerv(GL_VIEWPORT,v);
+ maxsize = (v[2] > v[3]) ? v[2] : v[3];
+ assert(maxsize > 0);
+ ratio = 1.0/(2*maxsize);
+ // ensure even number
+ m_sizes[0] = 2*((int)(size*v[2]*ratio+0.5));
+ m_sizes[1] = 2*((int)(size*v[3]*ratio+0.5));
+ m_scales[0]=btScalar(m_sizes[0]/2);
+ m_scales[1]=btScalar(m_sizes[1]/2);
+ m_offsets[0]=m_scales[0]+0.5f;
+ m_offsets[1]=m_scales[1]+0.5f;
+ // prepare matrix
+ // at this time of the rendering, the modelview matrix is the
+ // world to camera transformation and the projection matrix is
+ // camera to clip transformation. combine both so that
+ glGetDoublev(GL_MODELVIEW_MATRIX,m);
+ glGetDoublev(GL_PROJECTION_MATRIX,p);
+ CMmat4mul(m_wtc,p,m);
+ }
+ void initialize()
+ {
+ size_t newsize = (m_sizes[0]*m_sizes[1])*sizeof(btScalar);
+ if (m_buffer)
+ {
+ // see if we can reuse
+ if (newsize > m_bufferSize)
+ {
+ free(m_buffer);
+ m_buffer = NULL;
+ m_bufferSize = 0;
+ }
+ }
+ if (!m_buffer)
+ {
+ m_buffer = (btScalar*)calloc(1, newsize);
+ m_bufferSize = newsize;
+ } else
+ {
+ // buffer exists already, just clears it
+ memset(m_buffer, 0, newsize);
+ }
+ // memory allocate must succeed
+ assert(m_buffer != NULL);
+ m_initialized = true;
+ m_occlusion = false;
+ }
+ void SetModelMatrix(double *fl)
+ {
+ CMmat4mul(m_mtc,m_wtc,fl);
+ if (!m_initialized)
+ initialize();
+ }
+
+ // transform a segment in world coordinate to clip coordinate
+ void transformW(const btVector3& x, btVector4& t)
+ {
+ t[0] = x[0]*m_wtc[0]+x[1]*m_wtc[4]+x[2]*m_wtc[8]+m_wtc[12];
+ t[1] = x[0]*m_wtc[1]+x[1]*m_wtc[5]+x[2]*m_wtc[9]+m_wtc[13];
+ t[2] = x[0]*m_wtc[2]+x[1]*m_wtc[6]+x[2]*m_wtc[10]+m_wtc[14];
+ t[3] = x[0]*m_wtc[3]+x[1]*m_wtc[7]+x[2]*m_wtc[11]+m_wtc[15];
+ }
+ void transformM(const float* x, btVector4& t)
+ {
+ t[0] = x[0]*m_mtc[0]+x[1]*m_mtc[4]+x[2]*m_mtc[8]+m_mtc[12];
+ t[1] = x[0]*m_mtc[1]+x[1]*m_mtc[5]+x[2]*m_mtc[9]+m_mtc[13];
+ t[2] = x[0]*m_mtc[2]+x[1]*m_mtc[6]+x[2]*m_mtc[10]+m_mtc[14];
+ t[3] = x[0]*m_mtc[3]+x[1]*m_mtc[7]+x[2]*m_mtc[11]+m_mtc[15];
+ }
+ // convert polygon to device coordinates
+ static bool project(btVector4* p,int n)
+ {
+ for(int i=0;i<n;++i)
+ {
+ const btScalar iw=1/p[i][3];
+ p[i][2]=1/p[i][3];
+ p[i][0]*=p[i][2];
+ p[i][1]*=p[i][2];
+ }
+ return(true);
+ }
+ // pi: closed polygon in clip coordinate, NP = number of segments
+ // po: same polygon with clipped segments removed
+ template <const int NP>
+ static int clip(const btVector4* pi,btVector4* po)
+ {
+ btScalar s[2*NP];
+ btVector4 pn[2*NP];
+ int i, j, m, n, ni;
+ // deal with near clipping
+ for(i=0, m=0;i<NP;++i)
+ {
+ s[i]=pi[i][2]+pi[i][3];
+ if(s[i]<0) m+=1<<i;
+ }
+ if(m==((1<<NP)-1))
+ return(0);
+ if(m!=0)
+ {
+ for(i=NP-1,j=0,n=0;j<NP;i=j++)
+ {
+ const btVector4& a=pi[i];
+ const btVector4& b=pi[j];
+ const btScalar t=s[i]/(a[3]+a[2]-b[3]-b[2]);
+ if((t>0)&&(t<1))
+ {
+ pn[n][0] = a[0]+(b[0]-a[0])*t;
+ pn[n][1] = a[1]+(b[1]-a[1])*t;
+ pn[n][2] = a[2]+(b[2]-a[2])*t;
+ pn[n][3] = a[3]+(b[3]-a[3])*t;
+ ++n;
+ }
+ if(s[j]>0) pn[n++]=b;
+ }
+ // ready to test far clipping, start from the modified polygon
+ pi = pn;
+ ni = n;
+ } else
+ {
+ // no clipping on the near plane, keep same vector
+ ni = NP;
+ }
+ // now deal with far clipping
+ for(i=0, m=0;i<ni;++i)
+ {
+ s[i]=pi[i][2]-pi[i][3];
+ if(s[i]>0) m+=1<<i;
+ }
+ if(m==((1<<ni)-1))
+ return(0);
+ if(m!=0)
+ {
+ for(i=ni-1,j=0,n=0;j<ni;i=j++)
+ {
+ const btVector4& a=pi[i];
+ const btVector4& b=pi[j];
+ const btScalar t=s[i]/(a[2]-a[3]-b[2]+b[3]);
+ if((t>0)&&(t<1))
+ {
+ po[n][0] = a[0]+(b[0]-a[0])*t;
+ po[n][1] = a[1]+(b[1]-a[1])*t;
+ po[n][2] = a[2]+(b[2]-a[2])*t;
+ po[n][3] = a[3]+(b[3]-a[3])*t;
+ ++n;
+ }
+ if(s[j]<0) po[n++]=b;
+ }
+ return(n);
+ }
+ for(int i=0;i<ni;++i) po[i]=pi[i];
+ return(ni);
+ }
+ // write or check a triangle to buffer. a,b,c in device coordinates (-1,+1)
+ template <typename POLICY>
+ inline bool draw( const btVector4& a,
+ const btVector4& b,
+ const btVector4& c,
+ const float face,
+ const btScalar minarea)
+ {
+ const btScalar a2=cross(b-a,c-a)[2];
+ if((face*a2)<0.f || btFabs(a2)<minarea)
+ return false;
+ // further down we are normally going to write to the Zbuffer, mark it so
+ POLICY::Occlusion(m_occlusion);
+
+ int x[3], y[3], ib=1, ic=2;
+ btScalar z[3];
+ x[0]=(int)(a.x()*m_scales[0]+m_offsets[0]);
+ y[0]=(int)(a.y()*m_scales[1]+m_offsets[1]);
+ z[0]=a.z();
+ if (a2 < 0.f)
+ {
+ // negative aire is possible with double face => must
+ // change the order of b and c otherwise the algorithm doesn't work
+ ib=2;
+ ic=1;
+ }
+ x[ib]=(int)(b.x()*m_scales[0]+m_offsets[0]);
+ x[ic]=(int)(c.x()*m_scales[0]+m_offsets[0]);
+ y[ib]=(int)(b.y()*m_scales[1]+m_offsets[1]);
+ y[ic]=(int)(c.y()*m_scales[1]+m_offsets[1]);
+ z[ib]=b.z();
+ z[ic]=c.z();
+ const int mix=btMax(0,btMin(x[0],btMin(x[1],x[2])));
+ const int mxx=btMin(m_sizes[0],1+btMax(x[0],btMax(x[1],x[2])));
+ const int miy=btMax(0,btMin(y[0],btMin(y[1],y[2])));
+ const int mxy=btMin(m_sizes[1],1+btMax(y[0],btMax(y[1],y[2])));
+ const int width=mxx-mix;
+ const int height=mxy-miy;
+ if ((width*height) <= 1)
+ {
+ // degenerated in at most one single pixel
+ btScalar* scan=&m_buffer[miy*m_sizes[0]+mix];
+ // use for loop to detect the case where width or height == 0
+ for(int iy=miy;iy<mxy;++iy)
+ {
+ for(int ix=mix;ix<mxx;++ix)
+ {
+ if(POLICY::Process(*scan,z[0]))
+ return(true);
+ if(POLICY::Process(*scan,z[1]))
+ return(true);
+ if(POLICY::Process(*scan,z[2]))
+ return(true);
+ }
+ }
+ } else if (width == 1)
+ {
+ // Degenerated in at least 2 vertical lines
+ // The algorithm below doesn't work when face has a single pixel width
+ // We cannot use general formulas because the plane is degenerated.
+ // We have to interpolate along the 3 edges that overlaps and process each pixel.
+ // sort the y coord to make formula simpler
+ int ytmp;
+ btScalar ztmp;
+ if (y[0] > y[1]) { ytmp=y[1];y[1]=y[0];y[0]=ytmp;ztmp=z[1];z[1]=z[0];z[0]=ztmp; }
+ if (y[0] > y[2]) { ytmp=y[2];y[2]=y[0];y[0]=ytmp;ztmp=z[2];z[2]=z[0];z[0]=ztmp; }
+ if (y[1] > y[2]) { ytmp=y[2];y[2]=y[1];y[1]=ytmp;ztmp=z[2];z[2]=z[1];z[1]=ztmp; }
+ int dy[]={ y[0]-y[1],
+ y[1]-y[2],
+ y[2]-y[0]};
+ btScalar dzy[3];
+ dzy[0] = (dy[0]) ? (z[0]-z[1])/dy[0] : btScalar(0.f);
+ dzy[1] = (dy[1]) ? (z[1]-z[2])/dy[1] : btScalar(0.f);
+ dzy[2] = (dy[2]) ? (z[2]-z[0])/dy[2] : btScalar(0.f);
+ btScalar v[3] = { dzy[0]*(miy-y[0])+z[0],
+ dzy[1]*(miy-y[1])+z[1],
+ dzy[2]*(miy-y[2])+z[2] };
+ dy[0] = y[1]-y[0];
+ dy[1] = y[0]-y[1];
+ dy[2] = y[2]-y[0];
+ btScalar* scan=&m_buffer[miy*m_sizes[0]+mix];
+ for(int iy=miy;iy<mxy;++iy)
+ {
+ if(dy[0] >= 0 && POLICY::Process(*scan,v[0]))
+ return(true);
+ if(dy[1] >= 0 && POLICY::Process(*scan,v[1]))
+ return(true);
+ if(dy[2] >= 0 && POLICY::Process(*scan,v[2]))
+ return(true);
+ scan+=m_sizes[0];
+ v[0] += dzy[0]; v[1] += dzy[1]; v[2] += dzy[2];
+ dy[0]--; dy[1]++, dy[2]--;
+ }
+ } else if (height == 1)
+ {
+ // Degenerated in at least 2 horizontal lines
+ // The algorithm below doesn't work when face has a single pixel width
+ // We cannot use general formulas because the plane is degenerated.
+ // We have to interpolate along the 3 edges that overlaps and process each pixel.
+ int xtmp;
+ btScalar ztmp;
+ if (x[0] > x[1]) { xtmp=x[1];x[1]=x[0];x[0]=xtmp;ztmp=z[1];z[1]=z[0];z[0]=ztmp; }
+ if (x[0] > x[2]) { xtmp=x[2];x[2]=x[0];x[0]=xtmp;ztmp=z[2];z[2]=z[0];z[0]=ztmp; }
+ if (x[1] > x[2]) { xtmp=x[2];x[2]=x[1];x[1]=xtmp;ztmp=z[2];z[2]=z[1];z[1]=ztmp; }
+ int dx[]={ x[0]-x[1],
+ x[1]-x[2],
+ x[2]-x[0]};
+ btScalar dzx[3];
+ dzx[0] = (dx[0]) ? (z[0]-z[1])/dx[0] : btScalar(0.f);
+ dzx[1] = (dx[1]) ? (z[1]-z[2])/dx[1] : btScalar(0.f);
+ dzx[2] = (dx[2]) ? (z[2]-z[0])/dx[2] : btScalar(0.f);
+ btScalar v[3] = { dzx[0]*(mix-x[0])+z[0],
+ dzx[1]*(mix-x[1])+z[1],
+ dzx[2]*(mix-x[2])+z[2] };
+ dx[0] = x[1]-x[0];
+ dx[1] = x[0]-x[1];
+ dx[2] = x[2]-x[0];
+ btScalar* scan=&m_buffer[miy*m_sizes[0]+mix];
+ for(int ix=mix;ix<mxx;++ix)
+ {
+ if(dx[0] >= 0 && POLICY::Process(*scan,v[0]))
+ return(true);
+ if(dx[1] >= 0 && POLICY::Process(*scan,v[1]))
+ return(true);
+ if(dx[2] >= 0 && POLICY::Process(*scan,v[2]))
+ return(true);
+ scan++;
+ v[0] += dzx[0]; v[1] += dzx[1]; v[2] += dzx[2];
+ dx[0]--; dx[1]++, dx[2]--;
+ }
+ } else
+ {
+ // general case
+ const int dx[]={ y[0]-y[1],
+ y[1]-y[2],
+ y[2]-y[0]};
+ const int dy[]={ x[1]-x[0]-dx[0]*width,
+ x[2]-x[1]-dx[1]*width,
+ x[0]-x[2]-dx[2]*width};
+ const int a=x[2]*y[0]+x[0]*y[1]-x[2]*y[1]-x[0]*y[2]+x[1]*y[2]-x[1]*y[0];
+ const btScalar ia=1/(btScalar)a;
+ const btScalar dzx=ia*(y[2]*(z[1]-z[0])+y[1]*(z[0]-z[2])+y[0]*(z[2]-z[1]));
+ const btScalar dzy=ia*(x[2]*(z[0]-z[1])+x[0]*(z[1]-z[2])+x[1]*(z[2]-z[0]))-(dzx*width);
+ int c[]={ miy*x[1]+mix*y[0]-x[1]*y[0]-mix*y[1]+x[0]*y[1]-miy*x[0],
+ miy*x[2]+mix*y[1]-x[2]*y[1]-mix*y[2]+x[1]*y[2]-miy*x[1],
+ miy*x[0]+mix*y[2]-x[0]*y[2]-mix*y[0]+x[2]*y[0]-miy*x[2]};
+ btScalar v=ia*((z[2]*c[0])+(z[0]*c[1])+(z[1]*c[2]));
+ btScalar* scan=&m_buffer[miy*m_sizes[0]];
+ for(int iy=miy;iy<mxy;++iy)
+ {
+ for(int ix=mix;ix<mxx;++ix)
+ {
+ if((c[0]>=0)&&(c[1]>=0)&&(c[2]>=0))
+ {
+ if(POLICY::Process(scan[ix],v))
+ return(true);
+ }
+ c[0]+=dx[0];c[1]+=dx[1];c[2]+=dx[2];v+=dzx;
+ }
+ c[0]+=dy[0];c[1]+=dy[1];c[2]+=dy[2];v+=dzy;
+ scan+=m_sizes[0];
+ }
+ }
+ return(false);
+ }
+ // clip than write or check a polygon
+ template <const int NP,typename POLICY>
+ inline bool clipDraw( const btVector4* p,
+ const float face,
+ btScalar minarea)
+ {
+ btVector4 o[NP*2];
+ int n=clip<NP>(p,o);
+ bool earlyexit=false;
+ if (n)
+ {
+ project(o,n);
+ for(int i=2;i<n && !earlyexit;++i)
+ {
+ earlyexit|=draw<POLICY>(o[0],o[i-1],o[i],face,minarea);
+ }
+ }
+ return(earlyexit);
+ }
+ // add a triangle (in model coordinate)
+ // face = 0.f if face is double side,
+ // = 1.f if face is single sided and scale is positive
+ // = -1.f if face is single sided and scale is negative
+ void appendOccluderM(const float* a,
+ const float* b,
+ const float* c,
+ const float face)
+ {
+ btVector4 p[3];
+ transformM(a,p[0]);
+ transformM(b,p[1]);
+ transformM(c,p[2]);
+ clipDraw<3,WriteOCL>(p,face,btScalar(0.f));
+ }
+ // add a quad (in model coordinate)
+ void appendOccluderM(const float* a,
+ const float* b,
+ const float* c,
+ const float* d,
+ const float face)
+ {
+ btVector4 p[4];
+ transformM(a,p[0]);
+ transformM(b,p[1]);
+ transformM(c,p[2]);
+ transformM(d,p[3]);
+ clipDraw<4,WriteOCL>(p,face,btScalar(0.f));
+ }
+ // query occluder for a box (c=center, e=extend) in world coordinate
+ inline bool queryOccluderW( const btVector3& c,
+ const btVector3& e)
+ {
+ if (!m_occlusion)
+ // no occlusion yet, no need to check
+ return true;
+ btVector4 x[8];
+ transformW(btVector3(c[0]-e[0],c[1]-e[1],c[2]-e[2]),x[0]);
+ transformW(btVector3(c[0]+e[0],c[1]-e[1],c[2]-e[2]),x[1]);
+ transformW(btVector3(c[0]+e[0],c[1]+e[1],c[2]-e[2]),x[2]);
+ transformW(btVector3(c[0]-e[0],c[1]+e[1],c[2]-e[2]),x[3]);
+ transformW(btVector3(c[0]-e[0],c[1]-e[1],c[2]+e[2]),x[4]);
+ transformW(btVector3(c[0]+e[0],c[1]-e[1],c[2]+e[2]),x[5]);
+ transformW(btVector3(c[0]+e[0],c[1]+e[1],c[2]+e[2]),x[6]);
+ transformW(btVector3(c[0]-e[0],c[1]+e[1],c[2]+e[2]),x[7]);
+ for(int i=0;i<8;++i)
+ {
+ // the box is clipped, it's probably a large box, don't waste our time to check
+ if((x[i][2]+x[i][3])<=0) return(true);
+ }
+ static const int d[]={ 1,0,3,2,
+ 4,5,6,7,
+ 4,7,3,0,
+ 6,5,1,2,
+ 7,6,2,3,
+ 5,4,0,1};
+ for(int i=0;i<(sizeof(d)/sizeof(d[0]));)
+ {
+ const btVector4 p[]={ x[d[i++]],
+ x[d[i++]],
+ x[d[i++]],
+ x[d[i++]]};
+ if(clipDraw<4,QueryOCL>(p,1.f,0.f))
+ return(true);
+ }
+ return(false);
+ }
+};
+
+
+struct DbvtCullingCallback : btDbvt::ICollide
+{
+ PHY_CullingCallback m_clientCallback;
+ void* m_userData;
+ OcclusionBuffer *m_ocb;
+
+ DbvtCullingCallback(PHY_CullingCallback clientCallback, void* userData)
+ {
+ m_clientCallback = clientCallback;
+ m_userData = userData;
+ m_ocb = NULL;
+ }
+ bool Descent(const btDbvtNode* node)
+ {
+ return(m_ocb->queryOccluderW(node->volume.Center(),node->volume.Extents()));
+ }
+ void Process(const btDbvtNode* node,btScalar depth)
+ {
+ Process(node);
+ }
+ void Process(const btDbvtNode* leaf)
+ {
+ btBroadphaseProxy* proxy=(btBroadphaseProxy*)leaf->data;
+ // the client object is a graphic controller
+ CcdGraphicController* ctrl = static_cast<CcdGraphicController*>(proxy->m_clientObject);
+ KX_ClientObjectInfo* info = (KX_ClientObjectInfo*)ctrl->getNewClientInfo();
+ if (m_ocb)
+ {
+ // means we are doing occlusion culling. Check if this object is an occluders
+ KX_GameObject* gameobj = KX_GameObject::GetClientObject(info);
+ if (gameobj && gameobj->GetOccluder())
+ {
+ double* fl = gameobj->GetOpenGLMatrixPtr()->getPointer();
+ // this will create the occlusion buffer if not already done
+ // and compute the transformation from model local space to clip space
+ m_ocb->SetModelMatrix(fl);
+ float face = (gameobj->IsNegativeScaling()) ? -1.0f : 1.0f;
+ // walk through the meshes and for each add to buffer
+ for (int i=0; i<gameobj->GetMeshCount(); i++)
+ {
+ RAS_MeshObject* meshobj = gameobj->GetMesh(i);
+ const float *v1, *v2, *v3, *v4;
+ int polycount = meshobj->NumPolygons();
+ for (int j=0; j<polycount; j++)
+ {
+ RAS_Polygon* poly = meshobj->GetPolygon(j);
+ switch (poly->VertexCount())
+ {
+ case 3:
+ v1 = poly->GetVertex(0)->getXYZ();
+ v2 = poly->GetVertex(1)->getXYZ();
+ v3 = poly->GetVertex(2)->getXYZ();
+ m_ocb->appendOccluderM(v1,v2,v3,((poly->IsTwoside())?0.f:face));
+ break;
+ case 4:
+ v1 = poly->GetVertex(0)->getXYZ();
+ v2 = poly->GetVertex(1)->getXYZ();
+ v3 = poly->GetVertex(2)->getXYZ();
+ v4 = poly->GetVertex(3)->getXYZ();
+ m_ocb->appendOccluderM(v1,v2,v3,v4,((poly->IsTwoside())?0.f:face));
+ break;
+ }
+ }
+ }
+ }
+ }
+ if (info)
+ (*m_clientCallback)(info, m_userData);
+ }
+};
+
+static OcclusionBuffer gOcb;
+bool CcdPhysicsEnvironment::cullingTest(PHY_CullingCallback callback, void* userData, PHY__Vector4 *planes, int nplanes, int occlusionRes)
+{
+ if (!m_cullingTree)
+ return false;
+ DbvtCullingCallback dispatcher(callback, userData);
+ btVector3 planes_n[6];
+ btScalar planes_o[6];
+ if (nplanes > 6)
+ nplanes = 6;
+ for (int i=0; i<nplanes; i++)
+ {
+ planes_n[i].setValue(planes[i][0], planes[i][1], planes[i][2]);
+ planes_o[i] = planes[i][3];
+ }
+ // if occlusionRes != 0 => occlusion culling
+ if (occlusionRes)
+ {
+ gOcb.setup(occlusionRes);
+ dispatcher.m_ocb = &gOcb;
+ // occlusion culling, the direction of the view is taken from the first plan which MUST be the near plane
+ btDbvt::collideOCL(m_cullingTree->m_sets[1].m_root,planes_n,planes_o,planes_n[0],nplanes,dispatcher);
+ btDbvt::collideOCL(m_cullingTree->m_sets[0].m_root,planes_n,planes_o,planes_n[0],nplanes,dispatcher);
+ }else
+ {
+ btDbvt::collideKDOP(m_cullingTree->m_sets[1].m_root,planes_n,planes_o,nplanes,dispatcher);
+ btDbvt::collideKDOP(m_cullingTree->m_sets[0].m_root,planes_n,planes_o,nplanes,dispatcher);
+ }
+ return true;
+}
int CcdPhysicsEnvironment::getNumContactPoints()
{
@@ -1211,6 +1831,13 @@ CcdPhysicsEnvironment::~CcdPhysicsEnvironment()
if (NULL != m_broadphase)
delete m_broadphase;
+
+ if (NULL != m_cullingTree)
+ delete m_cullingTree;
+
+ if (NULL != m_cullingCache)
+ delete m_cullingCache;
+
}
@@ -1465,8 +2092,8 @@ PHY_IPhysicsController* CcdPhysicsEnvironment::CreateSphereController(float radi
{
CcdConstructionInfo cinfo;
- // memory leak! The shape is not deleted by Bullet and we cannot add it to the KX_Scene.m_shapes list
- cinfo.m_collisionShape = new btSphereShape(radius);
+ memset(&cinfo, 0, sizeof(cinfo)); /* avoid uninitialized values */
+ cinfo.m_collisionShape = new btSphereShape(radius); // memory leak! The shape is not deleted by Bullet and we cannot add it to the KX_Scene.m_shapes list
cinfo.m_MotionState = 0;
cinfo.m_physicsEnv = this;
// declare this object as Dyamic rather then static!!
@@ -1925,7 +2552,7 @@ int CcdPhysicsEnvironment::createConstraint(class PHY_IPhysicsController* ctrl
PHY_IPhysicsController* CcdPhysicsEnvironment::CreateConeController(float coneradius,float coneheight)
{
CcdConstructionInfo cinfo;
-
+ memset(&cinfo, 0, sizeof(cinfo)); /* avoid uninitialized values */
// we don't need a CcdShapeConstructionInfo for this shape:
// it is simple enough for the standard copy constructor (see CcdPhysicsController::GetReplica)
cinfo.m_collisionShape = new btConeShape(coneradius,coneheight);
diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h b/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h
index 2f1f0bb254b..f861621ae37 100644
--- a/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h
+++ b/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h
@@ -20,6 +20,7 @@ subject to the following restrictions:
#include <vector>
#include <set>
class CcdPhysicsController;
+class CcdGraphicController;
#include "LinearMath/btVector3.h"
#include "LinearMath/btTransform.h"
@@ -40,6 +41,7 @@ class btDispatcher;
class WrapperVehicle;
class btPersistentManifold;
class btBroadphaseInterface;
+struct btDbvtBroadphase;
class btOverlappingPairCache;
class btIDebugDraw;
class PHY_IVehicle;
@@ -58,7 +60,10 @@ protected:
btIDebugDraw* m_debugDrawer;
class btDefaultCollisionConfiguration* m_collisionConfiguration;
- class btBroadphaseInterface* m_broadphase;
+ class btBroadphaseInterface* m_broadphase; // broadphase for dynamic world
+ // for culling only
+ btOverlappingPairCache* m_cullingCache;
+ struct btDbvtBroadphase* m_cullingTree; // broadphase for culling
//solver iterations
int m_numIterations;
@@ -77,7 +82,7 @@ protected:
void processFhSprings(double curTime,float timeStep);
public:
- CcdPhysicsEnvironment(btDispatcher* dispatcher=0, btOverlappingPairCache* pairCache=0);
+ CcdPhysicsEnvironment(bool useDbvtCulling, btDispatcher* dispatcher=0, btOverlappingPairCache* pairCache=0);
virtual ~CcdPhysicsEnvironment();
@@ -167,6 +172,7 @@ protected:
btTypedConstraint* getConstraintById(int constraintId);
virtual PHY_IPhysicsController* rayTest(PHY_IRayCastFilterCallback &filterCallback, float fromX,float fromY,float fromZ, float toX,float toY,float toZ);
+ virtual bool cullingTest(PHY_CullingCallback callback, void* userData, PHY__Vector4* planes, int nplanes, int occlusionRes);
//Methods for gamelogic collision/physics callbacks
@@ -200,7 +206,12 @@ protected:
void refreshCcdPhysicsController(CcdPhysicsController* ctrl);
+ void addCcdGraphicController(CcdGraphicController* ctrl);
+
+ void removeCcdGraphicController(CcdGraphicController* ctrl);
+
btBroadphaseInterface* getBroadphase();
+ btDbvtBroadphase* getCullingTree() { return m_cullingTree; }
btDispatcher* getDispatcher();
diff --git a/source/gameengine/Physics/Bullet/Makefile b/source/gameengine/Physics/Bullet/Makefile
index d5570e75833..48e537bb6a3 100644
--- a/source/gameengine/Physics/Bullet/Makefile
+++ b/source/gameengine/Physics/Bullet/Makefile
@@ -39,8 +39,16 @@ CPPFLAGS += -I$(NAN_BULLET2)/include
CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include
CPPFLAGS += -I$(NAN_STRING)/include
CPPFLAGS += -I$(NAN_MOTO)/include
+CPPFLAGS += -I$(NAN_GLEW)/include
+CPPFLAGS += -I$(NAN_PYTHON)/include/python$(NAN_PYTHON_VERSION)
+CPPFLAGS += -I$(NAN_SOUNDSYSTEM)/include
CPPFLAGS += -I../../../kernel/gen_system
CPPFLAGS += -I../../Physics/common
CPPFLAGS += -I../../Physics/Dummy
CPPFLAGS += -I../../Rasterizer
+CPPFLAGS += -I../../Ketsji
+CPPFLAGS += -I../../Expressions
+CPPFLAGS += -I../../GameLogic
+CPPFLAGS += -I../../SceneGraph
+CPPFLAGS += -I../../../../source/blender/makesdna
diff --git a/source/gameengine/Physics/Bullet/SConscript b/source/gameengine/Physics/Bullet/SConscript
index db9f3387bfe..ab2c68ddfd5 100644
--- a/source/gameengine/Physics/Bullet/SConscript
+++ b/source/gameengine/Physics/Bullet/SConscript
@@ -1,11 +1,23 @@
#!/usr/bin/python
Import ('env')
-sources = 'CcdPhysicsEnvironment.cpp CcdPhysicsController.cpp'
+sources = 'CcdPhysicsEnvironment.cpp CcdPhysicsController.cpp CcdGraphicController.cpp'
-incs = '. ../common #source/kernel/gen_system #intern/string #intern/moto/include #source/gameengine/Rasterizer'
+incs = '. ../common'
+incs += ' #source/kernel/gen_system'
+incs += ' #intern/string'
+incs += ' #intern/moto/include'
+incs += ' #extern/glew/include'
+incs += ' #source/gameengine/Rasterizer'
+incs += ' #source/gameengine/Ketsji'
+incs += ' #source/gameengine/Expressions'
+incs += ' #source/gameengine/GameLogic'
+incs += ' #source/gameengine/SceneGraph'
+incs += ' #source/blender/makesdna'
+incs += ' #intern/SoundSystem'
incs += ' ' + env['BF_BULLET_INC']
+incs += ' ' + env['BF_PYTHON_INC']
cxxflags = []
if env['OURPLATFORM']=='win32-vc':
diff --git a/source/gameengine/Physics/Dummy/DummyPhysicsEnvironment.h b/source/gameengine/Physics/Dummy/DummyPhysicsEnvironment.h
index a92b1e7f4a6..4e15e6ec130 100644
--- a/source/gameengine/Physics/Dummy/DummyPhysicsEnvironment.h
+++ b/source/gameengine/Physics/Dummy/DummyPhysicsEnvironment.h
@@ -70,6 +70,7 @@ public:
}
virtual PHY_IPhysicsController* rayTest(PHY_IRayCastFilterCallback &filterCallback, float fromX,float fromY,float fromZ, float toX,float toY,float toZ);
+ virtual bool cullingTest(PHY_CullingCallback callback, void* userData, PHY__Vector4* planes, int nplanes, int occlusionRes) { return false; }
//gamelogic callbacks
diff --git a/source/gameengine/Physics/Sumo/SumoPhysicsController.h b/source/gameengine/Physics/Sumo/SumoPhysicsController.h
index d8ee54935d7..415bc1e3982 100644
--- a/source/gameengine/Physics/Sumo/SumoPhysicsController.h
+++ b/source/gameengine/Physics/Sumo/SumoPhysicsController.h
@@ -144,6 +144,11 @@ public:
void GetWorldPosition(MT_Point3& pos);
void GetWorldScaling(MT_Vector3& scale);
+ float GetLinVelocityMin() const { return 0.f; }
+ void SetLinVelocityMin(float val) { }
+ float GetLinVelocityMax() const { return 0.f; }
+ void SetLinVelocityMax(float val) { }
+
// void SetSumoObject(class SM_Object* sumoObj) {
// m_sumoObj = sumoObj;
diff --git a/source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.h b/source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.h
index 65b07a7a0be..418a361a065 100644
--- a/source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.h
+++ b/source/gameengine/Physics/Sumo/SumoPhysicsEnvironment.h
@@ -76,6 +76,7 @@ public:
}
virtual PHY_IPhysicsController* rayTest(PHY_IRayCastFilterCallback &filterCallback,float fromX,float fromY,float fromZ, float toX,float toY,float toZ);
+ virtual bool cullingTest(PHY_CullingCallback callback, void* userData, PHY__Vector4 *planes, int nplanes, int occlusionRes) { return false; }
//gamelogic callbacks
diff --git a/source/gameengine/Physics/common/CMakeLists.txt b/source/gameengine/Physics/common/CMakeLists.txt
index a28fabe0c3a..41b2687fe38 100644
--- a/source/gameengine/Physics/common/CMakeLists.txt
+++ b/source/gameengine/Physics/common/CMakeLists.txt
@@ -24,7 +24,7 @@
#
# ***** END GPL LICENSE BLOCK *****
-SET(SRC PHY_IMotionState.cpp PHY_IPhysicsController.cpp PHY_IPhysicsEnvironment.cpp PHY_IVehicle.cpp)
+SET(SRC PHY_IMotionState.cpp PHY_IController.cpp PHY_IPhysicsController.cpp PHY_IGraphicController.cpp PHY_IPhysicsEnvironment.cpp PHY_IVehicle.cpp)
SET(INC
.
diff --git a/source/gameengine/Physics/common/PHY_DynamicTypes.h b/source/gameengine/Physics/common/PHY_DynamicTypes.h
index c5cf92b553a..7ce40001af7 100644
--- a/source/gameengine/Physics/common/PHY_DynamicTypes.h
+++ b/source/gameengine/Physics/common/PHY_DynamicTypes.h
@@ -19,12 +19,42 @@ subject to the following restrictions:
-
+struct KX_ClientObjectInfo;
class PHY_Shape;
struct PHY__Vector3
{
float m_vec[4];
+
+ operator const float* () const
+ {
+ return &m_vec[0];
+ }
+ operator float* ()
+ {
+ return &m_vec[0];
+ }
+};
+
+struct PHY__Vector4
+{
+ float m_vec[4];
+ PHY__Vector4() {}
+ void setValue(const float *value)
+ {
+ m_vec[0] = *value++;
+ m_vec[1] = *value++;
+ m_vec[2] = *value++;
+ m_vec[3] = *value++;
+ }
+ void setValue(const double *value)
+ {
+ m_vec[0] = (float)(*value++);
+ m_vec[1] = (float)(*value++);
+ m_vec[2] = (float)(*value++);
+ m_vec[3] = (float)(*value++);
+ }
+
operator const float* () const
{
return &m_vec[0];
@@ -34,6 +64,7 @@ struct PHY__Vector3
return &m_vec[0];
}
};
+
//typedef float PHY__Vector3[4];
enum
@@ -59,7 +90,7 @@ enum
void *client_object1,
void *client_object2,
const PHY_CollData *coll_data);
-
+ typedef void (*PHY_CullingCallback)(KX_ClientObjectInfo* info, void* param);
/// PHY_PhysicsType enumerates all possible Physics Entities.
diff --git a/intern/bmfont/intern/BMF_FontData.h b/source/gameengine/Physics/common/PHY_IController.cpp
index 603d291d47d..47fe9a9eea8 100644
--- a/intern/bmfont/intern/BMF_FontData.h
+++ b/source/gameengine/Physics/common/PHY_IController.cpp
@@ -1,5 +1,6 @@
/**
* $Id$
+ *
* ***** BEGIN GPL LICENSE BLOCK *****
*
* This program is free software; you can redistribute it and/or
@@ -25,31 +26,14 @@
*
* ***** END GPL LICENSE BLOCK *****
*/
+#include "PHY_IController.h"
-/**
-
- * $Id$
- * Copyright (C) 2001 NaN Technologies B.V.
- */
-
-#ifndef __BMF_FONTDATA_H__
-#define __BMF_FONTDATA_H__
-
-typedef struct {
- signed char width, height;
- signed char xorig, yorig;
- signed char advance;
-
- short data_offset;
-} BMF_CharData;
-
-typedef struct {
- int xmin, ymin;
- int xmax, ymax;
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
- BMF_CharData chars[256];
- unsigned char* bitmap_data;
-} BMF_FontData;
+PHY_IController::~PHY_IController()
+{
-#endif
+}
diff --git a/source/blender/editors/include/UI_text.h b/source/gameengine/Physics/common/PHY_IController.h
index 860fd5e15aa..45e93f9d24e 100644
--- a/source/blender/editors/include/UI_text.h
+++ b/source/gameengine/Physics/common/PHY_IController.h
@@ -26,28 +26,28 @@
*
* ***** END GPL LICENSE BLOCK *****
*/
+#ifndef PHY_ICONTROLLER_H
+#define PHY_ICONTROLLER_H
-#ifndef UI_TEXT_H
-#define UI_TEXT_H
+#include "PHY_DynamicTypes.h"
-struct BMF_Font;
-void set_interface_font(char *str); /* headerbuttons.c */
-void start_interface_font(void); /* headerbuttons.c */
-char *fontsize_pup(void);
-
-int UI_DrawString(struct BMF_Font* font, char *str, int translate);
-float UI_GetStringWidth(struct BMF_Font* font, char *str, int translate);
-void UI_GetBoundingBox(struct BMF_Font* font, char* str, int translate, rctf* bbox);
-
-void UI_set_international(int international);
-int UI_get_international(void);
-
-void UI_RasterPos(float x, float y);
-void UI_SetScale(float aspect);
-void ui_text_init_userdef(void);
-
-
-#endif /* UI_TEXT_H */
+/**
+ PHY_IController is the abstract simplified Interface to objects
+ controlled by the physics engine. This includes the physics objects
+ and the graphics object for view frustrum and occlusion culling.
+*/
+class PHY_IController
+{
+ public:
+
+ virtual ~PHY_IController();
+ // clientinfo for raycasts for example
+ virtual void* getNewClientInfo()=0;
+ virtual void setNewClientInfo(void* clientinfo)=0;
+
+};
+
+#endif //PHY_ICONTROLLER_H
diff --git a/source/blender/ftfont/FTF_Settings.h b/source/gameengine/Physics/common/PHY_IGraphicController.cpp
index ff9d78e3f58..4dccecd3d29 100644
--- a/source/blender/ftfont/FTF_Settings.h
+++ b/source/gameengine/Physics/common/PHY_IGraphicController.cpp
@@ -1,5 +1,6 @@
/**
* $Id$
+ *
* ***** BEGIN GPL LICENSE BLOCK *****
*
* This program is free software; you can redistribute it and/or
@@ -16,7 +17,8 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
- * Copyright (C) 2002 Blender Foundation. All Rights Reserved.
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
*
* The Original Code is: all of this file.
*
@@ -24,23 +26,14 @@
*
* ***** END GPL LICENSE BLOCK *****
*/
+#include "PHY_IGraphicController.h"
-/**
-
- * $Id$
- * Copyright (C) 2001 NaN Technologies B.V.
- * Allows you to determine which fonts to include in the library.
- */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
-#ifndef __FTF_SETTINGS_H
-#define __FTF_SETTINGS_H
+PHY_IGraphicController::~PHY_IGraphicController()
+{
-#define FTF_BIT(num) ((unsigned int)1 << (num))
-#define FTF_NO_TRANSCONV 0
-#define FTF_INPUT_SYSTEM_ENCODING FTF_BIT(1)
-#define FTF_USE_GETTEXT FTF_BIT(2)
-#define FTF_INPUT_UTF8 FTF_BIT(3)
-#define FTF_PIXMAPFONT 0
-#define FTF_TEXTUREFONT 1
+}
-#endif /* __FTF_SETTINGS_H */
diff --git a/intern/bmfont/BMF_Fonts.h b/source/gameengine/Physics/common/PHY_IGraphicController.h
index 00a902573fb..36b8a978e87 100644
--- a/intern/bmfont/BMF_Fonts.h
+++ b/source/gameengine/Physics/common/PHY_IGraphicController.h
@@ -1,5 +1,6 @@
/**
* $Id$
+ *
* ***** BEGIN GPL LICENSE BLOCK *****
*
* This program is free software; you can redistribute it and/or
@@ -25,50 +26,31 @@
*
* ***** END GPL LICENSE BLOCK *****
*/
+#ifndef PHY_IGRAPHICCONTROLLER_H
+#define PHY_IGRAPHICCONTROLLER_H
-/**
-
- * $Id$
- * Copyright (C) 2001 NaN Technologies B.V.
- * Defines the names of the fonts in the library.
- */
+#include "PHY_IController.h"
-#ifndef __BMF_FONTS_H
-#define __BMF_FONTS_H
-#include "BMF_Settings.h"
-typedef enum
+/**
+ PHY_IPhysicsController is the abstract simplified Interface to a physical object.
+ It contains the IMotionState and IDeformableMesh Interfaces.
+*/
+class PHY_IGraphicController : public PHY_IController
{
- BMF_kHelvetica10 = 0,
-#if BMF_INCLUDE_HELV12
- BMF_kHelvetica12,
-#endif
-#if BMF_INCLUDE_HELVB8
- BMF_kHelveticaBold8,
-#endif
-#if BMF_INCLUDE_HELVB10
- BMF_kHelveticaBold10,
-#endif
-#if BMF_INCLUDE_HELVB12
- BMF_kHelveticaBold12,
-#endif
-#if BMF_INCLUDE_HELVB14
- BMF_kHelveticaBold14,
-#endif
-#if BMF_INCLUDE_SCR12
- BMF_kScreen12,
-#endif
-#if BMF_INCLUDE_SCR14
- BMF_kScreen14,
-#endif
-#if BMF_INCLUDE_SCR15
- BMF_kScreen15,
-#endif
- BMF_kNumFonts
-} BMF_FontType;
-typedef struct BMF_Font BMF_Font;
+ public:
+
+ virtual ~PHY_IGraphicController();
+ /**
+ SynchronizeMotionStates ynchronizes dynas, kinematic and deformable entities (and do 'late binding')
+ */
+ virtual bool SetGraphicTransform()=0;
+
+ virtual PHY_IGraphicController* GetReplica(class PHY_IMotionState* motionstate) {return 0;}
+
+};
-#endif /* __BMF_FONTS_H */
+#endif //PHY_IGRAPHICCONTROLLER_H
diff --git a/source/gameengine/Physics/common/PHY_IMotionState.h b/source/gameengine/Physics/common/PHY_IMotionState.h
index d759b0aeff4..64bb810ee7c 100644
--- a/source/gameengine/Physics/common/PHY_IMotionState.h
+++ b/source/gameengine/Physics/common/PHY_IMotionState.h
@@ -43,6 +43,8 @@ class PHY_IMotionState
virtual void getWorldPosition(float& posX,float& posY,float& posZ)=0;
virtual void getWorldScaling(float& scaleX,float& scaleY,float& scaleZ)=0;
virtual void getWorldOrientation(float& quatIma0,float& quatIma1,float& quatIma2,float& quatReal)=0;
+ // ori = array 12 floats, [0..3] = first column + 0, [4..7] = second colum, [8..11] = third column
+ virtual void getWorldOrientation(float* ori)=0;
virtual void setWorldPosition(float posX,float posY,float posZ)=0;
virtual void setWorldOrientation(float quatIma0,float quatIma1,float quatIma2,float quatReal)=0;
diff --git a/source/gameengine/Physics/common/PHY_IPhysicsController.h b/source/gameengine/Physics/common/PHY_IPhysicsController.h
index 884e14cfb5a..770426b48db 100644
--- a/source/gameengine/Physics/common/PHY_IPhysicsController.h
+++ b/source/gameengine/Physics/common/PHY_IPhysicsController.h
@@ -29,7 +29,7 @@
#ifndef PHY_IPHYSICSCONTROLLER_H
#define PHY_IPHYSICSCONTROLLER_H
-#include "PHY_DynamicTypes.h"
+#include "PHY_IController.h"
@@ -37,7 +37,7 @@
PHY_IPhysicsController is the abstract simplified Interface to a physical object.
It contains the IMotionState and IDeformableMesh Interfaces.
*/
-class PHY_IPhysicsController
+class PHY_IPhysicsController : public PHY_IController
{
public:
@@ -82,9 +82,7 @@ class PHY_IPhysicsController
// dyna's that are rigidbody are free in orientation, dyna's with non-rigidbody are restricted
virtual void setRigidBody(bool rigid)=0;
- // clientinfo for raycasts for example
- virtual void* getNewClientInfo()=0;
- virtual void setNewClientInfo(void* clientinfo)=0;
+
virtual PHY_IPhysicsController* GetReplica() {return 0;}
virtual void calcXform() =0;
@@ -92,6 +90,12 @@ class PHY_IPhysicsController
virtual float GetMargin() const=0;
virtual float GetRadius() const=0;
virtual void SetRadius(float margin) = 0;
+
+ virtual float GetLinVelocityMin() const=0;
+ virtual void SetLinVelocityMin(float val) = 0;
+ virtual float GetLinVelocityMax() const=0;
+ virtual void SetLinVelocityMax(float val) = 0;
+
PHY__Vector3 GetWorldPosition(PHY__Vector3& localpos);
};
diff --git a/source/gameengine/Physics/common/PHY_IPhysicsEnvironment.h b/source/gameengine/Physics/common/PHY_IPhysicsEnvironment.h
index 226ba3a7e74..9a4500c3214 100644
--- a/source/gameengine/Physics/common/PHY_IPhysicsEnvironment.h
+++ b/source/gameengine/Physics/common/PHY_IPhysicsEnvironment.h
@@ -142,6 +142,10 @@ class PHY_IPhysicsEnvironment
virtual PHY_IPhysicsController* rayTest(PHY_IRayCastFilterCallback &filterCallback, float fromX,float fromY,float fromZ, float toX,float toY,float toZ)=0;
+ //culling based on physical broad phase
+ // the plane number must be set as follow: near, far, left, right, top, botton
+ // the near plane must be the first one and must always be present, it is used to get the direction of the view
+ virtual bool cullingTest(PHY_CullingCallback callback, void *userData, PHY__Vector4* planeNormals, int planeNumber, int occlusionRes) = 0;
//Methods for gamelogic collision/physics callbacks
//todo:
diff --git a/source/gameengine/Physics/common/PHY_Pro.h b/source/gameengine/Physics/common/PHY_Pro.h
index 32e63ac2f6d..0249fc3118a 100644
--- a/source/gameengine/Physics/common/PHY_Pro.h
+++ b/source/gameengine/Physics/common/PHY_Pro.h
@@ -35,9 +35,11 @@
struct PHY_ShapeProps {
MT_Scalar m_mass; // Total mass
MT_Scalar m_inertia; // Inertia, should be a tensor some time
- MT_Scalar m_lin_drag; // Linear drag (air, water) 0 = concrete, 1 = vacuum
- MT_Scalar m_ang_drag; // Angular drag
+ MT_Scalar m_lin_drag; // Linear drag (air, water) 0 = concrete, 1 = vacuum, inverted and called dampening in blenders UI
+ MT_Scalar m_ang_drag; // Angular drag, inverted and called dampening in blenders UI
MT_Scalar m_friction_scaling[3]; // Scaling for anisotropic friction. Component in range [0, 1]
+ MT_Scalar m_clamp_vel_min; // Clamp the minimum velocity, this ensures an object moves at a minimum speed unless its stationary
+ MT_Scalar m_clamp_vel_max; // Clamp max velocity
bool m_do_anisotropic; // Should I do anisotropic friction?
bool m_do_fh; // Should the object have a linear Fh spring?
bool m_do_rot_fh; // Should the object have an angular Fh spring?
diff --git a/source/gameengine/Physics/common/SConscript b/source/gameengine/Physics/common/SConscript
index 4d7c808f49b..2713143f50d 100644
--- a/source/gameengine/Physics/common/SConscript
+++ b/source/gameengine/Physics/common/SConscript
@@ -1,7 +1,7 @@
#!/usr/bin/python
Import ('env')
-sources = 'PHY_IMotionState.cpp PHY_IPhysicsController.cpp PHY_IPhysicsEnvironment.cpp PHY_IVehicle.cpp'
+sources = 'PHY_IMotionState.cpp PHY_IController.cpp PHY_IPhysicsController.cpp PHY_IGraphicController.cpp PHY_IPhysicsEnvironment.cpp PHY_IVehicle.cpp'
incs = '. ../Dummy #intern/moto/include'
diff --git a/source/gameengine/PyDoc/BL_ActionActuator.py b/source/gameengine/PyDoc/BL_ActionActuator.py
index 3e95befe16b..480681dc14a 100644
--- a/source/gameengine/PyDoc/BL_ActionActuator.py
+++ b/source/gameengine/PyDoc/BL_ActionActuator.py
@@ -1,7 +1,9 @@
# $Id$
# Documentation for BL_ActionActuator
+import SCA_ILogicBrick
from SCA_IActuator import *
+
class BL_ActionActuator(SCA_IActuator):
"""
Action Actuators apply an action to an actor.
@@ -10,7 +12,7 @@ class BL_ActionActuator(SCA_IActuator):
@type action: string
@ivar start: Specifies the starting frame of the animation.
@type start: float
- @type end: Specifies the ending frame of the animation.
+ @ivar end: Specifies the ending frame of the animation.
@type end: float
@ivar blendin: Specifies the number of frames of animation to generate when making transitions between actions.
@type blendin: float
@@ -25,9 +27,7 @@ class BL_ActionActuator(SCA_IActuator):
@ivar blendTime: Sets the internal frame timer. This property must be in
the range from 0.0 to blendin.
@type blendTime: float
- @ivar type: The operation mode of the actuator.
- KX_ACTIONACT_PLAY, KX_ACTIONACT_PROPERTY, KX_ACTIONACT_FLIPPER,
- KX_ACTIONACT_LOOPSTOP, KX_ACTIONACT_LOOPEND
+ @ivar type: The operation mode of the actuator. KX_ACTIONACT_PLAY, KX_ACTIONACT_PROPERTY, KX_ACTIONACT_FLIPPER, KX_ACTIONACT_LOOPSTOP, KX_ACTIONACT_LOOPEND
@type type: integer
@ivar continue: The actions continue option, True or False.
When True, the action will always play from where last left off,
diff --git a/source/gameengine/PyDoc/BL_Shader.py b/source/gameengine/PyDoc/BL_Shader.py
new file mode 100644
index 00000000000..182b73d437b
--- /dev/null
+++ b/source/gameengine/PyDoc/BL_Shader.py
@@ -0,0 +1,228 @@
+class BL_Shader: # (PyObjectPlus)
+ """
+ BL_Shader GLSL shaders.
+
+ All placeholders have a __ prefix
+ """
+
+ def __setUniformfv(val):
+ """
+ TODO - Description
+
+ @param val: the starting frame of the animation
+ @type val: float
+
+ @rtype: integer
+ @return: TODO Description
+ """
+
+ def __delSource(val):
+ """
+ TODO - Description
+
+ @param val: the starting frame of the animation
+ @type val: float
+
+ @rtype: integer
+ @return: TODO Description
+ """
+ def __getFragmentProg(val):
+ """
+ TODO - Description
+
+ @param val: the starting frame of the animation
+ @type val: float
+
+ @rtype: integer
+ @return: TODO Description
+ """
+ def __getVertexProg(val):
+ """
+ TODO - Description
+
+ @param val: the starting frame of the animation
+ @type val: float
+
+ @rtype: integer
+ @return: TODO Description
+ """
+ def __isValid(val):
+ """
+ TODO - Description
+
+ @param val: the starting frame of the animation
+ @type val: float
+
+ @rtype: integer
+ @return: TODO Description
+ """
+ def __setAttrib(val):
+ """
+ TODO - Description
+
+ @param val: the starting frame of the animation
+ @type val: float
+
+ @rtype: integer
+ @return: TODO Description
+ """
+ def __setNumberOfPasses(val):
+ """
+ TODO - Description
+
+ @param val: the starting frame of the animation
+ @type val: float
+
+ @rtype: integer
+ @return: TODO Description
+ """
+ def __setSampler(val):
+ """
+ TODO - Description
+
+ @param val: the starting frame of the animation
+ @type val: float
+
+ @rtype: integer
+ @return: TODO Description
+ """
+ def __setSource(val):
+ """
+ TODO - Description
+
+ @param val: the starting frame of the animation
+ @type val: float
+
+ @rtype: integer
+ @return: TODO Description
+ """
+ def __setUniform1f(val):
+ """
+ TODO - Description
+
+ @param val: the starting frame of the animation
+ @type val: float
+
+ @rtype: integer
+ @return: TODO Description
+ """
+ def __setUniform1i(val):
+ """
+ TODO - Description
+
+ @param val: the starting frame of the animation
+ @type val: float
+
+ @rtype: integer
+ @return: TODO Description
+ """
+ def __setUniform2f(val):
+ """
+ TODO - Description
+
+ @param val: the starting frame of the animation
+ @type val: float
+
+ @rtype: integer
+ @return: TODO Description
+ """
+ def __setUniform2i(val):
+ """
+ TODO - Description
+
+ @param val: the starting frame of the animation
+ @type val: float
+
+ @rtype: integer
+ @return: TODO Description
+ """
+ def __setUniform3f(val):
+ """
+ TODO - Description
+
+ @param val: the starting frame of the animation
+ @type val: float
+
+ @rtype: integer
+ @return: TODO Description
+ """
+ def __setUniform3i(val):
+ """
+ TODO - Description
+
+ @param val: the starting frame of the animation
+ @type val: float
+
+ @rtype: integer
+ @return: TODO Description
+ """
+ def __setUniform4f(val):
+ """
+ TODO - Description
+
+ @param val: the starting frame of the animation
+ @type val: float
+
+ @rtype: integer
+ @return: TODO Description
+ """
+ def __setUniform4i(val):
+ """
+ TODO - Description
+
+ @param val: the starting frame of the animation
+ @type val: float
+
+ @rtype: integer
+ @return: TODO Description
+ """
+ def __setUniformDef(val):
+ """
+ TODO - Description
+
+ @param val: the starting frame of the animation
+ @type val: float
+
+ @rtype: integer
+ @return: TODO Description
+ """
+ def __setUniformMatrix3(val):
+ """
+ TODO - Description
+
+ @param val: the starting frame of the animation
+ @type val: float
+
+ @rtype: integer
+ @return: TODO Description
+ """
+ def __setUniformMatrix4(val):
+ """
+ TODO - Description
+
+ @param val: the starting frame of the animation
+ @type val: float
+
+ @rtype: integer
+ @return: TODO Description
+ """
+ def __setUniformiv(val):
+ """
+ TODO - Description
+
+ @param val: the starting frame of the animation
+ @type val: float
+
+ @rtype: integer
+ @return: TODO Description
+ """
+ def __validate(val):
+ """
+ TODO - Description
+
+ @param val: the starting frame of the animation
+ @type val: float
+
+ @rtype: integer
+ @return: TODO Description
+ """
diff --git a/source/gameengine/PyDoc/BL_ShapeActionActuator.py b/source/gameengine/PyDoc/BL_ShapeActionActuator.py
index 209ff4e5580..e1e8b039749 100644
--- a/source/gameengine/PyDoc/BL_ShapeActionActuator.py
+++ b/source/gameengine/PyDoc/BL_ShapeActionActuator.py
@@ -1,6 +1,7 @@
# $Id$
# Documentation for BL_ShapeActionActuator
from SCA_IActuator import *
+from SCA_ILogicBrick import *
class BL_ShapeActionActuator(SCA_IActuator):
"""
@@ -10,7 +11,7 @@ class BL_ShapeActionActuator(SCA_IActuator):
@type action: string
@ivar start: Specifies the starting frame of the shape animation.
@type start: float
- @type end: Specifies the ending frame of the shape animation.
+ @ivar end: Specifies the ending frame of the shape animation.
@type end: float
@ivar blendin: Specifies the number of frames of animation to generate when making transitions between actions.
@type blendin: float
diff --git a/source/gameengine/PyDoc/CListValue.py b/source/gameengine/PyDoc/CListValue.py
new file mode 100644
index 00000000000..e9fc4215bb6
--- /dev/null
+++ b/source/gameengine/PyDoc/CListValue.py
@@ -0,0 +1,59 @@
+class CListValue: # (PyObjectPlus)
+ """
+ CListValue
+
+ This is a list like object used in the game engine internally that behaves similar to a python list in most ways.
+
+ As well as the normal index lookup.
+ C{val= clist[i]}
+
+ CListValue supports string lookups.
+ C{val= scene.objects["OBCube"]}
+
+ Other operations such as C{len(clist), list(clist), clist[0:10]} are also supported.
+ """
+ def append(val):
+ """
+ Add an item to the list (like pythons append)
+
+ Warning: Appending values to the list can cause crashes when the list is used internally by the game engine.
+ """
+
+ def count(val):
+ """
+ Count the number of instances of a value in the list.
+
+ @rtype: integer
+ @return: number of instances
+ """
+ def index(val):
+ """
+ Return the index of a value in the list.
+
+ @rtype: integer
+ @return: The index of the value in the list.
+ """
+ def reverse():
+ """
+ Reverse the order of the list.
+ """
+ def from_id(id):
+ """
+ This is a funtion especially for the game engine to return a value with a spesific id.
+
+ Since object names are not always unique, the id of an object can be used to get an object from the CValueList.
+
+ Example.
+
+ C{myObID = id(gameObject)}
+
+ C{...}
+
+ C{ob= scene.objects.from_id(myObID)}
+
+ Where myObID is an int or long from the id function.
+
+ This has the advantage that you can store the id in places you could not store a gameObject.
+
+ Warning: the id is derived from a memory location and will be different each time the game engine starts.
+ """ \ No newline at end of file
diff --git a/source/gameengine/PyDoc/GameKeys.py b/source/gameengine/PyDoc/GameKeys.py
index 1a0a737718e..310f2b0d506 100644
--- a/source/gameengine/PyDoc/GameKeys.py
+++ b/source/gameengine/PyDoc/GameKeys.py
@@ -134,26 +134,20 @@ Example::
co = GameLogic.getCurrentController()
# 'Keyboard' is a keyboard sensor
sensor = co.getSensor('Keyboard')
- sensor.setKey(GameKeys.F1KEY)
+ sensor.key = GameKeys.F1KEY
Example::
# Do the all keys thing
import GameLogic
import GameKeys
-
- # status: these should be added to a module somewhere
- KX_NO_INPUTSTATUS = 0
- KX_JUSTACTIVATED = 1
- KX_ACTIVE = 2
- KX_JUSTRELEASED = 3
-
+
co = GameLogic.getCurrentController()
# 'Keyboard' is a keyboard sensor
sensor = co.getSensor('Keyboard')
- keylist = sensor.getPressedKeys()
+ keylist = sensor.events
for key in keylist:
# key[0] == GameKeys.keycode, key[1] = status
- if key[1] == KX_JUSTACTIVATED:
+ if key[1] == GameLogic.KX_INPUT_JUST_ACTIVATED:
if key[0] == GameKeys.WKEY:
# Activate Forward!
if key[0] == GameKeys.SKEY:
@@ -173,3 +167,15 @@ def EventToString(event):
@param event: key event from GameKeys or the keyboard sensor.
@rtype: string
"""
+
+def EventToCharacter(event, shift):
+ """
+ Return the string name of a key event. Returns an empty string if the event cant be represented as a character.
+
+ @type event: int
+ @param event: key event from GameKeys or the keyboard sensor.
+ @type event: bool
+ @param event: set to true if shift is held.
+ @rtype: string
+ """
+
diff --git a/source/gameengine/PyDoc/GameLogic.py b/source/gameengine/PyDoc/GameLogic.py
index 0524a9df355..1996aa3f8a9 100644
--- a/source/gameengine/PyDoc/GameLogic.py
+++ b/source/gameengine/PyDoc/GameLogic.py
@@ -3,10 +3,17 @@
Documentation for the GameLogic Module.
=======================================
- There are only three importable modules in the game engine:
+ Modules available in the game engine:
- GameLogic
- L{GameKeys}
- L{Rasterizer}
+ - L{GameTypes}
+
+ Undocumented modules:
+ - VideoTexture
+ - CValue
+ - Expression
+ - PhysicsConstraints
All the other modules are accessible through the methods in GameLogic.
@@ -18,7 +25,7 @@ Documentation for the GameLogic Module.
# To get the game object this controller is on:
obj = co.getOwner()
- L{KX_GameObject} and L{KX_Camera} or L{KX_Light} methods are
+ L{KX_GameObject} and L{KX_Camera} or L{KX_LightObject} methods are
available depending on the type of object::
# To get a sensor linked to this controller.
# "sensorname" is the name of the sensor as defined in the Blender interface.
@@ -72,6 +79,7 @@ Documentation for the GameLogic Module.
- L{SoundActuator<KX_SoundActuator.KX_SoundActuator>}
- L{TrackToActuator<KX_TrackToActuator.KX_TrackToActuator>}
- L{VisibilityActuator<KX_VisibilityActuator.KX_VisibilityActuator>}
+ - L{DynamicActuator<KX_SCA_DynamicActuator.KX_SCA_DynamicActuator>}
Most logic brick's methods are accessors for the properties available in the logic buttons.
Consult the logic bricks documentation for more information on how each logic brick works.
@@ -148,9 +156,35 @@ Documentation for the GameLogic Module.
@var KX_RADAR_AXIS_NEG_X: See L{KX_RadarSensor}
@var KX_RADAR_AXIS_NEG_Y: See L{KX_RadarSensor}
@var KX_RADAR_AXIS_NEG_Z: See L{KX_RadarSensor}
-"""
+
+@group Ray Sensor: KX_RAY_AXIS_POS_X, KX_RAY_AXIS_POS_Y, KX_RAY_AXIS_POS_Z, KX_RAY_AXIS_NEG_X, KX_RAY_AXIS_NEG_Y, KX_RAY_AXIS_NEG_Z
+@var KX_RAY_AXIS_POS_X: See L{KX_RaySensor}
+@var KX_RAY_AXIS_POS_Y: See L{KX_RaySensor}
+@var KX_RAY_AXIS_POS_Z: See L{KX_RaySensor}
+@var KX_RAY_AXIS_NEG_X: See L{KX_RaySensor}
+@var KX_RAY_AXIS_NEG_Y: See L{KX_RaySensor}
+@var KX_RAY_AXIS_NEG_Z: See L{KX_RaySensor}
+
+@group Dynamic Actuator: KX_DYN_RESTORE_DYNAMICS, KX_DYN_DISABLE_DYNAMICS, KX_DYN_ENABLE_RIGID_BODY, KX_DYN_DISABLE_RIGID_BODY, KX_DYN_SET_MASS
+@var KX_DYN_RESTORE_DYNAMICS: See L{KX_SCA_DynamicActuator}
+@var KX_DYN_DISABLE_DYNAMICS: See L{KX_SCA_DynamicActuator}
+@var KX_DYN_ENABLE_RIGID_BODY: See L{KX_SCA_DynamicActuator}
+@var KX_DYN_DISABLE_RIGID_BODY: See L{KX_SCA_DynamicActuator}
+@var KX_DYN_SET_MASS: See L{KX_SCA_DynamicActuator}
+
+@group Input Status: KX_INPUT_NONE, KX_INPUT_JUST_ACTIVATED, KX_INPUT_ACTIVE, KX_INPUT_JUST_RELEASED
+@var KX_INPUT_NONE: See L{SCA_MouseSensor}
+@var KX_INPUT_JUST_ACTIVATED: See L{SCA_MouseSensor}
+@var KX_INPUT_ACTIVE: See L{SCA_MouseSensor}
+@var KX_INPUT_JUST_RELEASED: See L{SCA_MouseSensor}
+@group Mouse Buttons: KX_MOUSE_BUT_LEFT, KX_MOUSE_BUT_MIDDLE, KX_MOUSE_BUT_RIGHT
+@var KX_MOUSE_BUT_LEFT: See L{SCA_MouseSensor}
+@var KX_MOUSE_BUT_MIDDLE: See L{SCA_MouseSensor}
+@var KX_MOUSE_BUT_RIGHT: See L{SCA_MouseSensor}
+"""
+
def getCurrentController():
"""
Gets the Python controller associated with this Python script.
@@ -171,6 +205,19 @@ def addActiveActuator(actuator, activate):
@type activate: boolean
@param activate: whether to activate or deactivate the given actuator.
"""
+def sendMessage(subject, body="", to="", message_from=""):
+ """
+ Sends a message to sensors in any active scene.
+
+ @param subject: The subject of the message
+ @type subject: string
+ @param body: The body of the message (optional)
+ @type body: string
+ @param to: The name of the object to send the message to (optional)
+ @type to: string
+ @param message_from: The name of the object that the message is coming from (optional)
+ @type message_from: string
+ """
def getRandomFloat():
"""
Returns a random floating point value in the range [0...1)
diff --git a/source/gameengine/PyDoc/GameTypes.py b/source/gameengine/PyDoc/GameTypes.py
new file mode 100644
index 00000000000..2b07a18247c
--- /dev/null
+++ b/source/gameengine/PyDoc/GameTypes.py
@@ -0,0 +1,75 @@
+# $Id$
+"""
+GameEngine Types
+================
+@var BL_ActionActuator: L{BL_ActionActuator<BL_ActionActuator.BL_ActionActuator>}
+@var BL_Shader: L{BL_Shader<BL_Shader.BL_Shader>}
+@var BL_ShapeActionActuator: L{BL_ShapeActionActuator<BL_ShapeActionActuator.BL_ShapeActionActuator>}
+@var CListValue: L{CListValue<CListValue.CListValue>}
+@var CValue: L{CValue<CValue.CValue>}
+@var KX_BlenderMaterial: L{KX_BlenderMaterial<KX_BlenderMaterial.KX_BlenderMaterial>}
+@var KX_CDActuator: L{KX_CDActuator<KX_CDActuator.KX_CDActuator>}
+@var KX_Camera: L{KX_Camera<KX_Camera.KX_Camera>}
+@var KX_CameraActuator: L{KX_CameraActuator<KX_CameraActuator.KX_CameraActuator>}
+@var KX_ConstraintActuator: L{KX_ConstraintActuator<KX_ConstraintActuator.KX_ConstraintActuator>}
+@var KX_ConstraintWrapper: L{KX_ConstraintWrapper<KX_ConstraintWrapper.KX_ConstraintWrapper>}
+@var KX_GameActuator: L{KX_GameActuator<KX_GameActuator.KX_GameActuator>}
+@var KX_GameObject: L{KX_GameObject<KX_GameObject.KX_GameObject>}
+@var KX_IpoActuator: L{KX_IpoActuator<KX_IpoActuator.KX_IpoActuator>}
+@var KX_LightObject: L{KX_LightObject<KX_LightObject.KX_LightObject>}
+@var KX_MeshProxy: L{KX_MeshProxy<KX_MeshProxy.KX_MeshProxy>}
+@var KX_MouseFocusSensor: L{KX_MouseFocusSensor<KX_MouseFocusSensor.KX_MouseFocusSensor>}
+@var KX_NearSensor: L{KX_NearSensor<KX_NearSensor.KX_NearSensor>}
+@var KX_NetworkMessageActuator: L{KX_NetworkMessageActuator<KX_NetworkMessageActuator.KX_NetworkMessageActuator>}
+@var KX_NetworkMessageSensor: L{KX_NetworkMessageSensor<KX_NetworkMessageSensor.KX_NetworkMessageSensor>}
+@var KX_ObjectActuator: L{KX_ObjectActuator<KX_ObjectActuator.KX_ObjectActuator>}
+@var KX_ParentActuator: L{KX_ParentActuator<KX_ParentActuator.KX_ParentActuator>}
+@var KX_PhysicsObjectWrapper: L{KX_PhysicsObjectWrapper<KX_PhysicsObjectWrapper.KX_PhysicsObjectWrapper>}
+@var KX_PolyProxy: L{KX_PolyProxy<KX_PolyProxy.KX_PolyProxy>}
+@var KX_PolygonMaterial: L{KX_PolygonMaterial<KX_PolygonMaterial.KX_PolygonMaterial>}
+@var KX_RadarSensor: L{KX_RadarSensor<KX_RadarSensor.KX_RadarSensor>}
+@var KX_RaySensor: L{KX_RaySensor<KX_RaySensor.KX_RaySensor>}
+@var KX_SCA_AddObjectActuator: L{KX_SCA_AddObjectActuator<KX_SCA_AddObjectActuator.KX_SCA_AddObjectActuator>}
+@var KX_SCA_DynamicActuator: L{KX_SCA_DynamicActuator<KX_SCA_DynamicActuator.KX_SCA_DynamicActuator>}
+@var KX_SCA_EndObjectActuator: L{KX_SCA_EndObjectActuator<KX_SCA_EndObjectActuator.KX_SCA_EndObjectActuator>}
+@var KX_SCA_ReplaceMeshActuator: L{KX_SCA_ReplaceMeshActuator<KX_SCA_ReplaceMeshActuator.KX_SCA_ReplaceMeshActuator>}
+@var KX_Scene: L{KX_Scene<KX_Scene.KX_Scene>}
+@var KX_SceneActuator: L{KX_SceneActuator<KX_SceneActuator.KX_SceneActuator>}
+@var KX_SoundActuator: L{KX_SoundActuator<KX_SoundActuator.KX_SoundActuator>}
+@var KX_StateActuator: L{KX_StateActuator<KX_StateActuator.KX_StateActuator>}
+@var KX_TouchSensor: L{KX_TouchSensor<KX_TouchSensor.KX_TouchSensor>}
+@var KX_TrackToActuator: L{KX_TrackToActuator<KX_TrackToActuator.KX_TrackToActuator>}
+@var KX_VehicleWrapper: L{KX_VehicleWrapper<KX_VehicleWrapper.KX_VehicleWrapper>}
+@var KX_VertexProxy: L{KX_VertexProxy<KX_VertexProxy.KX_VertexProxy>}
+@var KX_VisibilityActuator: L{KX_VisibilityActuator<KX_VisibilityActuator.KX_VisibilityActuator>}
+@var PyObjectPlus: L{PyObjectPlus<PyObjectPlus.PyObjectPlus>}
+@var SCA_2DFilterActuator: L{SCA_2DFilterActuator<SCA_2DFilterActuator.SCA_2DFilterActuator>}
+@var SCA_ANDController: L{SCA_ANDController<SCA_ANDController.SCA_ANDController>}
+@var SCA_ActuatorSensor: L{SCA_ActuatorSensor<SCA_ActuatorSensor.SCA_ActuatorSensor>}
+@var SCA_AlwaysSensor: L{SCA_AlwaysSensor<SCA_AlwaysSensor.SCA_AlwaysSensor>}
+@var SCA_DelaySensor: L{SCA_DelaySensor<SCA_DelaySensor.SCA_DelaySensor>}
+@var SCA_ILogicBrick: L{SCA_ILogicBrick<SCA_ILogicBrick.SCA_ILogicBrick>}
+@var SCA_IObject: L{SCA_IObject<SCA_IObject.SCA_IObject>}
+@var SCA_ISensor: L{SCA_ISensor<SCA_ISensor.SCA_ISensor>}
+@var SCA_JoystickSensor: L{SCA_JoystickSensor<SCA_JoystickSensor.SCA_JoystickSensor>}
+@var SCA_KeyboardSensor: L{SCA_KeyboardSensor<SCA_KeyboardSensor.SCA_KeyboardSensor>}
+@var SCA_MouseSensor: L{SCA_MouseSensor<SCA_MouseSensor.SCA_MouseSensor>}
+@var SCA_NANDController: L{SCA_NANDController<SCA_NANDController.SCA_NANDController>}
+@var SCA_NORController: L{SCA_NORController<SCA_NORController.SCA_NORController>}
+@var SCA_ORController: L{SCA_ORController<SCA_ORController.SCA_ORController>}
+@var SCA_PropertyActuator: L{SCA_PropertyActuator<SCA_PropertyActuator.SCA_PropertyActuator>}
+@var SCA_PropertySensor: L{SCA_PropertySensor<SCA_PropertySensor.SCA_PropertySensor>}
+@var SCA_PythonController: L{SCA_PythonController<SCA_PythonController.SCA_PythonController>}
+@var SCA_RandomActuator: L{SCA_RandomActuator<SCA_RandomActuator.SCA_RandomActuator>}
+@var SCA_RandomSensor: L{SCA_RandomSensor<SCA_RandomSensor.SCA_RandomSensor>}
+@var SCA_XNORController: L{SCA_XNORController<SCA_XNORController.SCA_XNORController>}
+@var SCA_XORController: L{SCA_XORController<SCA_XORController.SCA_XORController>}
+"""
+
+if 0:
+ # Use to print out all the links
+ for i in a.split('\n'):
+ if i.startswith('@var'):
+ var = i.split(' ')[1].split(':')[0]
+ print '@var %s: L{%s<%s.%s>}' % (var, var, var, var)
+
diff --git a/source/gameengine/PyDoc/KX_BlenderMaterial.py b/source/gameengine/PyDoc/KX_BlenderMaterial.py
new file mode 100644
index 00000000000..21417db1802
--- /dev/null
+++ b/source/gameengine/PyDoc/KX_BlenderMaterial.py
@@ -0,0 +1,38 @@
+class KX_BlenderMaterial: # (PyObjectPlus)
+ """
+ KX_BlenderMaterial
+
+ All placeholders have a __ prefix
+ """
+
+ def __getShader(val):
+ """
+ TODO - Description
+
+ @param val: the starting frame of the animation
+ @type val: float
+
+ @rtype: integer
+ @return: TODO Description
+ """
+
+ def __setBlending(val):
+ """
+ TODO - Description
+
+ @param val: the starting frame of the animation
+ @type val: float
+
+ @rtype: integer
+ @return: TODO Description
+ """
+ def __getMaterialIndex(val):
+ """
+ TODO - Description
+
+ @param val: the starting frame of the animation
+ @type val: float
+
+ @rtype: integer
+ @return: TODO Description
+ """
diff --git a/source/gameengine/PyDoc/KX_CDActuator.py b/source/gameengine/PyDoc/KX_CDActuator.py
index 2c202476584..e1067674e7e 100644
--- a/source/gameengine/PyDoc/KX_CDActuator.py
+++ b/source/gameengine/PyDoc/KX_CDActuator.py
@@ -3,6 +3,15 @@
from SCA_IActuator import *
class KX_CDActuator(SCA_IActuator):
+ """
+ CD Controller actuator.
+ @ivar volume: controls the volume to set the CD to. 0.0 = silent, 1.0 = max volume.
+ @type volume: float
+ @ivar track: the track selected to be played
+ @type track: integer
+ @ivar gain: the gain (volume) of the CD between 0.0 and 1.0.
+ @type gain: float
+ """
def startCD():
"""
Starts the CD playing.
@@ -15,8 +24,21 @@ class KX_CDActuator(SCA_IActuator):
"""
Pauses the CD.
"""
+ def resumeCD():
+ """
+ Resumes the CD after a pause.
+ """
+ def playAll():
+ """
+ Plays the CD from the beginning.
+ """
+ def playTrack(trackNumber):
+ """
+ Plays the track selected.
+ """
def setGain(gain):
"""
+ DEPRECATED: Use the volume property.
Sets the gain (volume) of the CD.
@type gain: float
@@ -24,6 +46,7 @@ class KX_CDActuator(SCA_IActuator):
"""
def getGain():
"""
+ DEPRECATED: Use the volume property.
Gets the current gain (volume) of the CD.
@rtype: float
diff --git a/source/gameengine/PyDoc/KX_Camera.py b/source/gameengine/PyDoc/KX_Camera.py
index 4cadf1c0ed0..f5d0d45f968 100644
--- a/source/gameengine/PyDoc/KX_Camera.py
+++ b/source/gameengine/PyDoc/KX_Camera.py
@@ -185,3 +185,25 @@ class KX_Camera(KX_GameObject):
@param matrix: The new projection matrix for this camera.
"""
+ def enableViewport(viewport):
+ """
+ Use this camera to draw a viewport on the screen (for split screen games or overlay scenes). The viewport region is defined with L{setViewport}.
+
+ @type viewport: bool
+ @param viewport: the new viewport status
+ """
+ def setOnTop():
+ """
+ Set this cameras viewport ontop of all other viewport.
+ """
+ def setViewport(left, bottom, right, top):
+ """
+ Sets the region of this viewport on the screen in pixels.
+
+ Use L{Rasterizer.getWindowHeight} L{Rasterizer.getWindowWidth} to calculate values relative to the entire display.
+
+ @type left: int
+ @type bottom: int
+ @type right: int
+ @type top: int
+ """
diff --git a/source/gameengine/PyDoc/KX_ConstraintActuator.py b/source/gameengine/PyDoc/KX_ConstraintActuator.py
index 7c7ad5aa0fa..a30b859548b 100644
--- a/source/gameengine/PyDoc/KX_ConstraintActuator.py
+++ b/source/gameengine/PyDoc/KX_ConstraintActuator.py
@@ -5,6 +5,75 @@ from SCA_IActuator import *
class KX_ConstraintActuator(SCA_IActuator):
"""
A constraint actuator limits the position, rotation, distance or orientation of an object.
+
+ Properties:
+
+ @ivar damp: time constant of the constraint expressed in frame (not use by Force field constraint)
+ @type damp: integer
+
+ @ivar rotDamp: time constant for the rotation expressed in frame (only for the distance constraint)
+ 0 = use damp for rotation as well
+ @type rotDamp: integer
+
+ @ivar direction: the reference direction in world coordinate for the orientation constraint
+ @type direction: 3-tuple of float: [x,y,z]
+
+ @ivar option: Binary combination of the following values:
+ Applicable to Distance constraint:
+ KX_ACT_CONSTRAINT_NORMAL ( 64) : Activate alignment to surface
+ KX_ACT_CONSTRAINT_DISTANCE ( 512) : Activate distance control
+ KX_ACT_CONSTRAINT_LOCAL (1024) : direction of the ray is along the local axis
+ Applicable to Force field constraint:
+ KX_ACT_CONSTRAINT_DOROTFH (2048) : Force field act on rotation as well
+ Applicable to both:
+ KX_ACT_CONSTRAINT_MATERIAL ( 128) : Detect material rather than property
+ KX_ACT_CONSTRAINT_PERMANENT ( 256) : No deactivation if ray does not hit target
+ @type option: integer
+
+ @ivar time: activation time of the actuator. The actuator disables itself after this many frame.
+ If set to 0, the actuator is not limited in time.
+ @type time: integer
+
+ @ivar property: the name of the property or material for the ray detection of the distance constraint.
+ @type property: string
+
+ @ivar min: The lower bound of the constraint
+ For the rotation and orientation constraint, it represents radiant
+ @type min: float
+
+ @ivar distance: the target distance of the distance constraint
+ @type distance: float
+
+ @ivar max: the upper bound of the constraint.
+ For rotation and orientation constraints, it represents radiant.
+ @type max: float
+
+ @ivar rayLength: the length of the ray of the distance constraint.
+ @type rayLength: float
+
+ @ivar limit: type of constraint, use one of the following constant:
+ KX_ACT_CONSTRAINT_LOCX ( 1) : limit X coord
+ KX_ACT_CONSTRAINT_LOCY ( 2) : limit Y coord
+ KX_ACT_CONSTRAINT_LOCZ ( 3) : limit Z coord
+ KX_ACT_CONSTRAINT_ROTX ( 4) : limit X rotation
+ KX_ACT_CONSTRAINT_ROTY ( 5) : limit Y rotation
+ KX_ACT_CONSTRAINT_ROTZ ( 6) : limit Z rotation
+ KX_ACT_CONSTRAINT_DIRPX ( 7) : set distance along positive X axis
+ KX_ACT_CONSTRAINT_DIRPY ( 8) : set distance along positive Y axis
+ KX_ACT_CONSTRAINT_DIRPZ ( 9) : set distance along positive Z axis
+ KX_ACT_CONSTRAINT_DIRNX (10) : set distance along negative X axis
+ KX_ACT_CONSTRAINT_DIRNY (11) : set distance along negative Y axis
+ KX_ACT_CONSTRAINT_DIRNZ (12) : set distance along negative Z axis
+ KX_ACT_CONSTRAINT_ORIX (13) : set orientation of X axis
+ KX_ACT_CONSTRAINT_ORIY (14) : set orientation of Y axis
+ KX_ACT_CONSTRAINT_ORIZ (15) : set orientation of Z axis
+ KX_ACT_CONSTRAINT_FHPX (16) : set force field along positive X axis
+ KX_ACT_CONSTRAINT_FHPY (17) : set force field along positive Y axis
+ KX_ACT_CONSTRAINT_FHPZ (18) : set force field along positive Z axis
+ KX_ACT_CONSTRAINT_FHNX (19) : set force field along negative X axis
+ KX_ACT_CONSTRAINT_FHNY (20) : set force field along negative Y axis
+ KX_ACT_CONSTRAINT_FHNZ (21) : set force field along negative Z axis
+ @type limit: integer
"""
def setDamp(time):
"""
diff --git a/source/gameengine/PyDoc/KX_ConstraintWrapper.py b/source/gameengine/PyDoc/KX_ConstraintWrapper.py
new file mode 100644
index 00000000000..5b34e1609e8
--- /dev/null
+++ b/source/gameengine/PyDoc/KX_ConstraintWrapper.py
@@ -0,0 +1,28 @@
+class KX_ConstraintWrapper: # (PyObjectPlus)
+ """
+ KX_ConstraintWrapper
+
+ All placeholders have a __ prefix
+ """
+ def __getConstraintId(val):
+ """
+ TODO - Description
+
+ @param val: the starting frame of the animation
+ @type val: float
+
+ @rtype: integer
+ @return: TODO Description
+ """
+
+ def __testMethod(val):
+ """
+ TODO - Description
+
+ @param val: the starting frame of the animation
+ @type val: float
+
+ @rtype: integer
+ @return: TODO Description
+ """
+
diff --git a/source/gameengine/PyDoc/KX_GameActuator.py b/source/gameengine/PyDoc/KX_GameActuator.py
index b916b3b5617..fc5bd6005fc 100644
--- a/source/gameengine/PyDoc/KX_GameActuator.py
+++ b/source/gameengine/PyDoc/KX_GameActuator.py
@@ -5,15 +5,22 @@ from SCA_IActuator import *
class KX_GameActuator(SCA_IActuator):
"""
The game actuator loads a new .blend file, restarts the current .blend file or quits the game.
+
+ Properties:
+
+ @ivar file: the new .blend file to load
+ @type file: string.
"""
def getFile():
"""
+ DEPRECATED: use the file property
Returns the filename of the new .blend file to load.
@rtype: string
"""
def setFile(filename):
"""
+ DEPRECATED: use the file property
Sets the new .blend file to load.
@param filename: The file name this actuator will load.
diff --git a/source/gameengine/PyDoc/KX_GameObject.py b/source/gameengine/PyDoc/KX_GameObject.py
index 4f389a1ae4f..21ddf439924 100644
--- a/source/gameengine/PyDoc/KX_GameObject.py
+++ b/source/gameengine/PyDoc/KX_GameObject.py
@@ -1,29 +1,86 @@
# $Id$
# Documentation for game objects
-class KX_GameObject:
+# from SCA_IObject import *
+# from SCA_ISensor import *
+# from SCA_IController import *
+# from SCA_IActuator import *
+
+
+class KX_GameObject: # (SCA_IObject)
"""
All game objects are derived from this class.
Properties assigned to game objects are accessible as attributes of this class.
-
+ - note: Calling ANY method or attribute on an object that has been removed from a scene will raise a RuntimeError, if an object may have been removed since last accessing it use the L{isValid} attribute to check.
+
@ivar name: The object's name. (Read only)
+ - note: Currently (Blender 2.49) the prefix "OB" is added to all objects name. This may change in blender 2.5.
@type name: string.
- @ivar mass: The object's mass (provided the object has a physics controller). Read only.
+ @ivar mass: The object's mass
+ - note: The object must have a physics controller for the mass to be applied, otherwise the mass value will be returned as 0.0
@type mass: float
+ @ivar linVelocityMin: Enforces the object keeps moving at a minimum velocity.
+ - note: Applies to dynamic and rigid body objects only.
+ - note: A value of 0.0 disables this option.
+ - note: While objects are stationary the minimum velocity will not be applied.
+ @type linVelocityMin: float
+ @ivar linVelocityMax: Clamp the maximum linear velocity to prevent objects moving beyond a set speed.
+ - note: Applies to dynamic and rigid body objects only.
+ - note: A value of 0.0 disables this option (rather then setting it stationary).
+ @type linVelocityMax: float
+ @ivar localInertia: the object's inertia vector in local coordinates. Read only.
+ @type localInertia: list [ix, iy, iz]
@ivar parent: The object's parent object. (Read only)
- @type parent: L{KX_GameObject}
+ @type parent: L{KX_GameObject} or None
@ivar visible: visibility flag.
+ - note: Game logic will still run for invisible objects.
@type visible: boolean
+ @ivar occlusion: occlusion capability flag.
+ @type occlusion: boolean
@ivar position: The object's position.
- @type position: list [x, y, z]
- @ivar orientation: The object's orientation. 3x3 Matrix.
- You can also write a Quaternion or Euler vector.
- @type orientation: 3x3 Matrix [[float]]
+ DEPRECATED: use localPosition and worldPosition
+ @type position: list [x, y, z] On write: local position, on read: world position
+ @ivar orientation: The object's orientation. 3x3 Matrix. You can also write a Quaternion or Euler vector.
+ DEPRECATED: use localOrientation and worldOrientation
+ @type orientation: 3x3 Matrix [[float]] On write: local orientation, on read: world orientation
@ivar scaling: The object's scaling factor. list [sx, sy, sz]
- @type scaling: list [sx, sy, sz]
+ DEPRECATED: use localScaling and worldScaling
+ @type scaling: list [sx, sy, sz] On write: local scaling, on read: world scaling
+ @ivar localOrientation: The object's local orientation. 3x3 Matrix. You can also write a Quaternion or Euler vector.
+ @type localOrientation: 3x3 Matrix [[float]]
+ @ivar worldOrientation: The object's world orientation. Read-only.
+ @type worldOrientation: 3x3 Matrix [[float]]
+ @ivar localScaling: The object's local scaling factor.
+ @type localScaling: list [sx, sy, sz]
+ @ivar worldScaling: The object's world scaling factor. Read-only
+ @type worldScaling: list [sx, sy, sz]
+ @ivar localPosition: The object's local position.
+ @type localPosition: list [x, y, z]
+ @ivar worldPosition: The object's world position.
+ @type worldPosition: list [x, y, z]
@ivar timeOffset: adjust the slowparent delay at runtime.
@type timeOffset: float
+ @ivar state: the game object's state bitmask, using the first 30 bits, one bit must always be set.
+ @type state: int
+ @ivar meshes: a list meshes for this object.
+ - note: Most objects use only 1 mesh.
+ - note: Changes to this list will not update the KX_GameObject.
+ @type meshes: list of L{KX_MeshProxy}
+ @ivar sensors: a list of L{SCA_ISensor} objects.
+ - note: This attribute is experemental and may be removed (but probably wont be).
+ - note: Changes to this list will not update the KX_GameObject.
+ @type sensors: list
+ @ivar controllers: a list of L{SCA_IController} objects.
+ - note: This attribute is experemental and may be removed (but probably wont be).
+ - note: Changes to this list will not update the KX_GameObject.
+ @type controllers: list of L{SCA_ISensor}.
+ @ivar actuators: a list of L{SCA_IActuator} objects.
+ - note: This attribute is experemental and may be removed (but probably wont be).
+ - note: Changes to this list will not update the KX_GameObject.
+ @type actuators: list
+ @ivar isValid: Retuerns fails when the object has been removed from the scene and can no longer be used.
+ @type isValid: bool
"""
def endObject(visible):
"""
@@ -37,33 +94,43 @@ class KX_GameObject:
"""
def getVisible():
"""
- Gets the game object's visible flag.
+ Gets the game object's visible flag. (B{deprecated})
@rtype: boolean
"""
- def setVisible(visible):
+ def setVisible(visible, recursive):
"""
Sets the game object's visible flag.
@type visible: boolean
+ @type recursive: boolean
+ @param recursive: optional argument to set all childrens visibility flag too.
+ """
+ def setOcclusion(occlusion, recursive):
+ """
+ Sets the game object's occlusion capability.
+
+ @type visible: boolean
+ @type recursive: boolean
+ @param recursive: optional argument to set all childrens occlusion flag too.
"""
def getState():
"""
- Gets the game object's state bitmask.
+ Gets the game object's state bitmask. (B{deprecated})
@rtype: int
@return: the objects state.
"""
def setState(state):
"""
- Sets the game object's state flag.
- The bitmasks for states from 1 to 30 can be set with (1<<0, 1<<1, 1<<2 ... 1<<29)
+ Sets the game object's state flag. (B{deprecated}).
+ The bitmasks for states from 1 to 30 can be set with (1<<0, 1<<1, 1<<2 ... 1<<29)
@type state: integer
"""
def setPosition(pos):
"""
- Sets the game object's position.
+ Sets the game object's position. (B{deprecated})
Global coordinates for root object, local for child objects.
@@ -79,14 +146,14 @@ class KX_GameObject:
"""
def getPosition():
"""
- Gets the game object's position.
+ Gets the game object's position. (B{deprecated})
@rtype: list [x, y, z]
@return: the object's position in world coordinates.
"""
def setOrientation(orn):
"""
- Sets the game object's orientation.
+ Sets the game object's orientation. (B{deprecated})
@type orn: 3x3 rotation matrix, or Quaternion.
@param orn: a rotation matrix specifying the new rotation.
@@ -117,7 +184,7 @@ class KX_GameObject:
"""
def getOrientation():
"""
- Gets the game object's orientation.
+ Gets the game object's orientation. (B{deprecated})
@rtype: 3x3 rotation matrix
@return: The game object's rotation matrix
@@ -133,7 +200,7 @@ class KX_GameObject:
@param local: - False: you get the "global" movement ie: relative to world orientation (default).
- True: you get the "local" movement ie: relative to object orientation.
"""
- def applyRotation(movement, local = 0):
+ def applyRotation(rotation, local = 0):
"""
Sets the game object's rotation.
@@ -231,7 +298,7 @@ class KX_GameObject:
"""
def getMass():
"""
- Gets the game object's mass.
+ Gets the game object's mass. (B{deprecated})
@rtype: float
@return: the object's mass.
@@ -243,6 +310,8 @@ class KX_GameObject:
The reaction force is the force applied to this object over the last simulation timestep.
This also includes impulses, eg from collisions.
+ (B{This is not implimented for bullet physics at the moment})
+
@rtype: list [fx, fy, fz]
@return: the reaction force of this object.
"""
@@ -280,7 +349,7 @@ class KX_GameObject:
"""
def getParent():
"""
- Gets this object's parent.
+ Gets this object's parent. (B{deprecated})
@rtype: L{KX_GameObject}
@return: this object's parent object, or None if this object has no parent.
@@ -299,13 +368,13 @@ class KX_GameObject:
def getChildren():
"""
Return a list of immediate children of this object.
- @rtype: list
+ @rtype: L{CListValue<CListValue.CListValue>} of L{KX_GameObject<KX_GameObject.KX_GameObject>}
@return: a list of all this objects children.
"""
def getChildrenRecursive():
"""
Return a list of children of this object, including all their childrens children.
- @rtype: list
+ @rtype: L{CListValue<CListValue.CListValue>} of L{KX_GameObject<KX_GameObject.KX_GameObject>}
@return: a list of all this objects children recursivly.
"""
def getMesh(mesh):
@@ -413,5 +482,23 @@ class KX_GameObject:
If no hit, returns (None,None,None) or (None,None,None,None)
If the object hit is not a static mesh, polygon is None
"""
-
-
+ def setCollisionMargin(margin):
+ """
+ Set the objects collision margin.
+
+ note: If this object has no physics controller (a physics ID of zero), this function will raise RuntimeError.
+
+ @type margin: float
+ @param margin: the collision margin distance in blender units.
+ """
+ def sendMessage(subject, body="", to=""):
+ """
+ Sends a message.
+
+ @param subject: The subject of the message
+ @type subject: string
+ @param body: The body of the message (optional)
+ @type body: string
+ @param to: The name of the object to send the message to (optional)
+ @type to: string
+ """
diff --git a/source/gameengine/PyDoc/KX_IpoActuator.py b/source/gameengine/PyDoc/KX_IpoActuator.py
index e2fe3b289e3..ebc0b855f0a 100644
--- a/source/gameengine/PyDoc/KX_IpoActuator.py
+++ b/source/gameengine/PyDoc/KX_IpoActuator.py
@@ -5,10 +5,29 @@ from SCA_IActuator import *
class KX_IpoActuator(SCA_IActuator):
"""
IPO actuator activates an animation.
+
+ @ivar startFrame: Start frame.
+ @type startFrame: float
+ @ivar endFrame: End frame.
+ @type endFrame: float
+ @ivar propName: Use this property to define the Ipo position
+ @type propName: string
+ @ivar framePropName: Assign this property this action current frame number
+ @type framePropName: string
+ @ivar type: Play mode for the ipo. (In GameLogic.KX_IPOACT_PLAY, KX_IPOACT_PINGPONG, KX_IPOACT_FLIPPER, KX_IPOACT_LOOPSTOP, KX_IPOACT_LOOPEND, KX_IPOACT_FROM_PROP)
+ @type type: int
+ @ivar useIpoAsForce: Apply Ipo as a global or local force depending on the local option (dynamic objects only)
+ @type useIpoAsForce: bool
+ @ivar useIpoAdd: Ipo is added to the current loc/rot/scale in global or local coordinate according to Local flag
+ @type useIpoAdd: bool
+ @ivar useIpoLocal: Let the ipo acts in local coordinates, used in Force and Add mode.
+ @type useIpoLocal: bool
+ @ivar useChildren: Update IPO on all children Objects as well
+ @type useChildren: bool
"""
def set(mode, startframe, endframe, force):
"""
- Sets the properties of the actuator.
+ Sets the properties of the actuator. (B{deprecated})
@param mode: "Play", "PingPong", "Flipper", "LoopStop", "LoopEnd" or "FromProp"
@type mode: string
@@ -21,70 +40,70 @@ class KX_IpoActuator(SCA_IActuator):
"""
def setProperty(property):
"""
- Sets the name of the property to be used in FromProp mode.
+ Sets the name of the property to be used in FromProp mode. (B{deprecated})
@type property: string
"""
def setStart(startframe):
"""
- Sets the frame from which the IPO starts playing.
+ Sets the frame from which the IPO starts playing. (B{deprecated})
@type startframe: integer
"""
def getStart():
"""
- Returns the frame from which the IPO starts playing.
+ Returns the frame from which the IPO starts playing. (B{deprecated})
@rtype: integer
"""
def setEnd(endframe):
"""
- Sets the frame at which the IPO stops playing.
+ Sets the frame at which the IPO stops playing. (B{deprecated})
@type endframe: integer
"""
def getEnd():
"""
- Returns the frame at which the IPO stops playing.
+ Returns the frame at which the IPO stops playing. (B{deprecated})
@rtype: integer
"""
def setIpoAsForce(force):
"""
- Set whether to interpret the ipo as a force rather than a displacement.
+ Set whether to interpret the ipo as a force rather than a displacement. (B{deprecated})
@type force: boolean
@param force: KX_TRUE or KX_FALSE
"""
def getIpoAsForce():
"""
- Returns whether to interpret the ipo as a force rather than a displacement.
+ Returns whether to interpret the ipo as a force rather than a displacement. (B{deprecated})
@rtype: boolean
"""
def setIpoAdd(add):
"""
- Set whether to interpret the ipo as additive rather than absolute.
+ Set whether to interpret the ipo as additive rather than absolute. (B{deprecated})
@type add: boolean
@param add: KX_TRUE or KX_FALSE
"""
def getIpoAdd():
"""
- Returns whether to interpret the ipo as additive rather than absolute.
+ Returns whether to interpret the ipo as additive rather than absolute. (B{deprecated})
@rtype: boolean
"""
def setType(mode):
"""
- Sets the operation mode of the actuator.
+ Sets the operation mode of the actuator. (B{deprecated})
@param mode: KX_IPOACT_PLAY, KX_IPOACT_PINGPONG, KX_IPOACT_FLIPPER, KX_IPOACT_LOOPSTOP, KX_IPOACT_LOOPEND
@type mode: string
"""
def getType():
"""
- Returns the operation mode of the actuator.
+ Returns the operation mode of the actuator. (B{deprecated})
@rtype: integer
@return: KX_IPOACT_PLAY, KX_IPOACT_PINGPONG, KX_IPOACT_FLIPPER, KX_IPOACT_LOOPSTOP, KX_IPOACT_LOOPEND
@@ -92,7 +111,7 @@ class KX_IpoActuator(SCA_IActuator):
def setForceIpoActsLocal(local):
"""
Set whether to apply the force in the object's local
- coordinates rather than the world global coordinates.
+ coordinates rather than the world global coordinates. (B{deprecated})
@param local: Apply the ipo-as-force in the object's local
coordinates? (KX_TRUE, KX_FALSE)
@@ -101,5 +120,5 @@ class KX_IpoActuator(SCA_IActuator):
def getForceIpoActsLocal():
"""
Return whether to apply the force in the object's local
- coordinates rather than the world global coordinates.
+ coordinates rather than the world global coordinates. (B{deprecated})
"""
diff --git a/source/gameengine/PyDoc/KX_Light.py b/source/gameengine/PyDoc/KX_LightObject.py
index ff0cf071d2d..8cc1787887b 100644
--- a/source/gameengine/PyDoc/KX_Light.py
+++ b/source/gameengine/PyDoc/KX_LightObject.py
@@ -2,7 +2,7 @@
# Documentation for Light game objects.
from KX_GameObject import *
-class KX_Light(KX_GameObject):
+class KX_LightObject(KX_GameObject):
"""
A Light object.
diff --git a/source/gameengine/PyDoc/KX_MeshProxy.py b/source/gameengine/PyDoc/KX_MeshProxy.py
index 03bc36b6ac1..e8839ac484c 100644
--- a/source/gameengine/PyDoc/KX_MeshProxy.py
+++ b/source/gameengine/PyDoc/KX_MeshProxy.py
@@ -45,7 +45,14 @@ class KX_MeshProxy:
m_i += 1
mesh = obj.getMesh(m_i)
-
+ @ivar materials:
+ @type materials: list of L{KX_BlenderMaterial} or L{KX_PolygonMaterial} types
+
+ @ivar numPolygons:
+ @type numPolygons: integer
+
+ @ivar numMaterials:
+ @type numMaterials: integer
"""
def getNumMaterials():
diff --git a/source/gameengine/PyDoc/KX_MouseFocusSensor.py b/source/gameengine/PyDoc/KX_MouseFocusSensor.py
index 28d584037f8..24f7716218b 100644
--- a/source/gameengine/PyDoc/KX_MouseFocusSensor.py
+++ b/source/gameengine/PyDoc/KX_MouseFocusSensor.py
@@ -8,19 +8,60 @@ class KX_MouseFocusSensor(SCA_MouseSensor):
The mouse focus sensor works by transforming the mouse coordinates from 2d device
space to 3d space then raycasting away from the camera.
+
+ @ivar raySource: The worldspace source of the ray (the view position)
+ @type raySource: list (vector of 3 floats)
+ @ivar rayTarget: The worldspace target of the ray.
+ @type rayTarget: list (vector of 3 floats)
+ @ivar rayDirection: The L{rayTarget} - L{raySource} normalized.
+ @type rayDirection: list (normalized vector of 3 floats)
+ @ivar hitObject: the last object the mouse was over.
+ @type hitObject: L{KX_GameObject<KX_GameObject.KX_GameObject>} or None
+ @ivar hitPosition: The worldspace position of the ray intersecton.
+ @type hitPosition: list (vector of 3 floats)
+ @ivar hitNormal: the worldspace normal from the face at point of intersection.
+ @type hitNormal: list (normalized vector of 3 floats)
"""
- def GetRayTarget():
+ def getHitNormal():
+ """
+ Returns the normal (in worldcoordinates) at the point of collision where the object was hit by this ray. (B{deprecated})
+
+ @rtype: list [x, y, z]
+ @return: the ray collision normal.
+ """
+ def getHitObject():
+ """
+ Returns the object that was hit by this ray or None. (B{deprecated})
+
+ @rtype: L{KX_GameObject} or None
+ @return: the collision object.
+ """
+ def getHitPosition():
"""
- Returns the end point of the sensor ray.
+ Returns the position (in worldcoordinates) at the point of collision where the object was hit by this ray. (B{deprecated})
@rtype: list [x, y, z]
- @return: the end point of the sensor ray, in world coordinates.
+ @return: the ray collision position.
"""
- def GetRaySource():
+ def getRayDirection():
"""
- Returns the start point of the sensor ray.
+ Returns the normalized direction (in worldcoordinates) of the ray cast by the mouse. (B{deprecated})
@rtype: list [x, y, z]
- @return: the start point of the sensor ray, in world coordinates.
+ @return: the ray direction.
"""
+ def getRaySource():
+ """
+ Returns the position (in worldcoordinates) the ray was cast from by the mouse. (B{deprecated})
+
+ @rtype: list [x, y, z]
+ @return: the ray source.
+ """
+ def getRayTarget():
+ """
+ Returns the target of the ray (in worldcoordinates) that seeks the focus object. (B{deprecated})
+
+ @rtype: list [x, y, z]
+ @return: the ray target.
+ """ \ No newline at end of file
diff --git a/source/gameengine/PyDoc/KX_NetworkMessageActuator.py b/source/gameengine/PyDoc/KX_NetworkMessageActuator.py
index aecd2897743..c9f48d47eb8 100644
--- a/source/gameengine/PyDoc/KX_NetworkMessageActuator.py
+++ b/source/gameengine/PyDoc/KX_NetworkMessageActuator.py
@@ -5,21 +5,33 @@ from SCA_IActuator import *
class KX_NetworkMessageActuator(SCA_IActuator):
"""
Message Actuator
+
+ @ivar propName: Messages will only be sent to objects with the given property name.
+ @type propName: string
+ @ivar subject: The subject field of the message.
+ @type subject: string
+ @ivar body: The body of the message.
+ @type body: string
+ @ivar usePropBody: Send a property instead of a regular body message.
+ @type usePropBody: boolean
"""
def setToPropName(name):
"""
+ DEPRECATED: Use the propName property instead.
Messages will only be sent to objects with the given property name.
@type name: string
"""
def setSubject(subject):
"""
+ DEPRECATED: Use the subject property instead.
Sets the subject field of the message.
@type subject: string
"""
def setBodyType(bodytype):
"""
+ DEPRECATED: Use the usePropBody property instead.
Sets the type of body to send.
@type bodytype: boolean
@@ -27,6 +39,7 @@ class KX_NetworkMessageActuator(SCA_IActuator):
"""
def setBody(body):
"""
+ DEPRECATED: Use the body property instead.
Sets the message body.
@type body: string
diff --git a/source/gameengine/PyDoc/KX_NetworkMessageSensor.py b/source/gameengine/PyDoc/KX_NetworkMessageSensor.py
index 8f5f3609df7..0fecad58437 100644
--- a/source/gameengine/PyDoc/KX_NetworkMessageSensor.py
+++ b/source/gameengine/PyDoc/KX_NetworkMessageSensor.py
@@ -7,9 +7,22 @@ class KX_NetworkMessageSensor(SCA_ISensor):
The Message Sensor logic brick.
Currently only loopback (local) networks are supported.
+
+ @ivar subject: The subject the sensor is looking for.
+ @type subject: string
+ @ivar frameMessageCount: The number of messages received since the last frame.
+ (Read-only)
+ @type framemessageCount: int
+ @ivar subjects: The list of message subjects received. (Read-only)
+ @type subjects: list of strings
+ @ivar bodies: The list of message bodies received. (Read-only)
+ @type bodies: list of strings
"""
+
+
def setSubjectFilterText(subject):
"""
+ DEPRECATED: Use the subject property instead.
Change the message subject text that this sensor is listening to.
@type subject: string
@@ -18,24 +31,28 @@ class KX_NetworkMessageSensor(SCA_ISensor):
def getFrameMessageCount():
"""
+ DEPRECATED: Use the frameMessageCount property instead.
Get the number of messages received since the last frame.
@rtype: integer
"""
def getBodies():
"""
+ DEPRECATED: Use the bodies property instead.
Gets the list of message bodies.
@rtype: list
"""
def getSubject():
"""
+ DEPRECATED: Use the subject property instead.
Gets the message subject this sensor is listening for from the Subject: field.
@rtype: string
"""
def getSubjects():
"""
+ DEPRECATED: Use the subjects property instead.
Gets the list of message subjects received.
@rtype: list
diff --git a/source/gameengine/PyDoc/KX_ParentActuator.py b/source/gameengine/PyDoc/KX_ParentActuator.py
index 7b5625ec82d..2f5d9515d0b 100644
--- a/source/gameengine/PyDoc/KX_ParentActuator.py
+++ b/source/gameengine/PyDoc/KX_ParentActuator.py
@@ -1,16 +1,16 @@
-# $Id: KX_ParentActuator.py 2615 2004-06-02 12:43:27Z kester $
+# $Id$
# Documentation for KX_ParentActuator
from SCA_IActuator import *
class KX_ParentActuator(SCA_IActuator):
"""
- The parent actuator can set or remove an objects parent object.
-
+ The parent actuator can set or remove an objects parent object.
@ivar object: the object this actuator sets the parent too.
@type object: KX_GameObject or None
"""
def setObject(object):
"""
+ DEPRECATED: Use the object property.
Sets the object to set as parent.
Object can be either a L{KX_GameObject} or the name of the object.
@@ -19,6 +19,7 @@ class KX_ParentActuator(SCA_IActuator):
"""
def getObject(name_only = 1):
"""
+ DEPRECATED: Use the object property.
Returns the name of the object to change to.
@type name_only: bool
@param name_only: optional argument, when 0 return a KX_GameObject
diff --git a/source/gameengine/PyDoc/KX_PhysicsObjectWrapper.py b/source/gameengine/PyDoc/KX_PhysicsObjectWrapper.py
new file mode 100644
index 00000000000..2171cf4c7b6
--- /dev/null
+++ b/source/gameengine/PyDoc/KX_PhysicsObjectWrapper.py
@@ -0,0 +1,47 @@
+class KX_PhysicsObjectWrapper: # (PyObjectPlus)
+ """
+ KX_PhysicsObjectWrapper
+
+ All placeholders have a __ prefix
+ """
+ def __setActive(val):
+ """
+ TODO - Description
+
+ @param val: the starting frame of the animation
+ @type val: float
+
+ @rtype: integer
+ @return: TODO Description
+ """
+
+ def __setAngularVelocity(val):
+ """
+ TODO - Description
+
+ @param val: the starting frame of the animation
+ @type val: float
+
+ @rtype: integer
+ @return: TODO Description
+ """
+ def __setLinearVelocity(val):
+ """
+ TODO - Description
+
+ @param val: the starting frame of the animation
+ @type val: float
+
+ @rtype: integer
+ @return: TODO Description
+ """
+ def __setPosition(val):
+ """
+ TODO - Description
+
+ @param val: the starting frame of the animation
+ @type val: float
+
+ @rtype: integer
+ @return: TODO Description
+ """
diff --git a/source/gameengine/PyDoc/KX_RaySensor.py b/source/gameengine/PyDoc/KX_RaySensor.py
index e487edcb655..b9de54e92a5 100644
--- a/source/gameengine/PyDoc/KX_RaySensor.py
+++ b/source/gameengine/PyDoc/KX_RaySensor.py
@@ -5,28 +5,53 @@ from SCA_ISensor import *
class KX_RaySensor(SCA_ISensor):
"""
A ray sensor detects the first object in a given direction.
+
+ @ivar property: The property the ray is looking for.
+ @type property: string
+ @ivar range: The distance of the ray.
+ @type range: float
+ @ivar useMaterial: Whether or not to look for a material (false = property)
+ @type useMaterial: boolean
+ @ivar useXRay: Whether or not to use XRay.
+ @type useXRay: boolean
+ @ivar hitObject: The game object that was hit by the ray. (Read-only)
+ @type hitObject: KX_GameObject
+ @ivar hitPosition: The position (in worldcoordinates) where the object was hit by the ray. (Read-only)
+ @type hitPosition: list [x, y, z]
+ @ivar hitNormal: The normal (in worldcoordinates) of the object at the location where the object was hit by the ray. (Read-only)
+ @type hitNormal: list [x, y, z]
+ @ivar rayDirection: The direction from the ray (in worldcoordinates). (Read-only)
+ @type rayDirection: list [x, y, z]
+ @ivar axis: The axis the ray is pointing on.
+ @type axis: int from 0 to 5
+ KX_RAY_AXIS_POS_X, KX_RAY_AXIS_POS_Y, KX_RAY_AXIS_POS_Z,
+ KX_RAY_AXIS_NEG_X, KX_RAY_AXIS_NEG_Y, KX_RAY_AXIS_NEG_Z
"""
def getHitObject():
"""
+ DEPRECATED: Use the hitObject property instead.
Returns the game object that was hit by this ray.
@rtype: KX_GameObject
"""
def getHitPosition():
"""
+ DEPRECATED: Use the hitPosition property instead.
Returns the position (in worldcoordinates) where the object was hit by this ray.
@rtype: list [x, y, z]
"""
def getHitNormal():
"""
+ DEPRECATED: Use the hitNormal property instead.
Returns the normal (in worldcoordinates) of the object at the location where the object was hit by this ray.
@rtype: list [nx, ny, nz]
"""
def getRayDirection():
"""
+ DEPRECATED: Use the rayDirection property instead.
Returns the direction from the ray (in worldcoordinates)
@rtype: list [dx, dy, dz]
diff --git a/source/gameengine/PyDoc/KX_SCA_AddObjectActuator.py b/source/gameengine/PyDoc/KX_SCA_AddObjectActuator.py
index 56068fa641a..572b864ff0a 100644
--- a/source/gameengine/PyDoc/KX_SCA_AddObjectActuator.py
+++ b/source/gameengine/PyDoc/KX_SCA_AddObjectActuator.py
@@ -9,6 +9,12 @@ class KX_SCA_AddObjectActuator(SCA_IActuator):
@type object: KX_GameObject or None
@ivar objectLastCreated: the last added object from this actuator (read only).
@type objectLastCreated: KX_GameObject or None
+ @ivar time: the lifetime of added objects, in frames.
+ @type time: integer
+ @ivar linearVelocity: the initial linear velocity of added objects.
+ @type linearVelocity: list [vx, vy, vz]
+ @ivar angularVelocity: the initial angular velocity of added objects.
+ @type angularVelocity: list [vx, vy, vz]
@warning: An Add Object actuator will be ignored if at game start, the linked object doesn't exist
(or is empty) or the linked object is in an active layer.
@@ -19,6 +25,7 @@ class KX_SCA_AddObjectActuator(SCA_IActuator):
"""
def setObject(object):
"""
+ DEPRECATED: use the object property
Sets the game object to add.
A copy of the object will be added to the scene when the actuator is activated.
@@ -31,6 +38,7 @@ class KX_SCA_AddObjectActuator(SCA_IActuator):
"""
def getObject(name_only = 0):
"""
+ DEPRECATED: use the object property
Returns the name of the game object to be added.
Returns None if no game object has been assigned to be added.
@@ -40,6 +48,7 @@ class KX_SCA_AddObjectActuator(SCA_IActuator):
"""
def setTime(time):
"""
+ DEPRECATED: use the time property
Sets the lifetime of added objects, in frames.
If time == 0, the object will last forever.
@@ -49,12 +58,14 @@ class KX_SCA_AddObjectActuator(SCA_IActuator):
"""
def getTime():
"""
+ DEPRECATED: use the time property
Returns the lifetime of the added object, in frames.
@rtype: integer
"""
def setLinearVelocity(vx, vy, vz):
"""
+ DEPRECATED: use the linearVelocity property
Sets the initial linear velocity of added objects.
@type vx: float
@@ -66,12 +77,14 @@ class KX_SCA_AddObjectActuator(SCA_IActuator):
"""
def getLinearVelocity():
"""
+ DEPRECATED: use the linearVelocity property
Returns the initial linear velocity of added objects.
@rtype: list [vx, vy, vz]
"""
def setAngularVelocity(vx, vy, vz):
"""
+ DEPRECATED: use the angularVelocity property
Sets the initial angular velocity of added objects.
@type vx: float
@@ -83,14 +96,23 @@ class KX_SCA_AddObjectActuator(SCA_IActuator):
"""
def getAngularVelocity():
"""
+ DEPRECATED: use the angularVelocity property
Returns the initial angular velocity of added objects.
@rtype: list [vx, vy, vz]
"""
def getLastCreatedObject():
"""
+ DEPRECATED: use the objectLastCreated property
Returns the last object created by this actuator.
@rtype: L{KX_GameObject}
@return: A L{KX_GameObject} or None if no object has been created.
"""
+ def instantAddObject():
+ """
+ Returns the last object created by this actuator. The object can then be accessed from L{objectLastCreated}.
+
+ @rtype: None
+ """
+
diff --git a/source/gameengine/PyDoc/KX_SCA_DynamicActuator.py b/source/gameengine/PyDoc/KX_SCA_DynamicActuator.py
new file mode 100644
index 00000000000..22da159ce71
--- /dev/null
+++ b/source/gameengine/PyDoc/KX_SCA_DynamicActuator.py
@@ -0,0 +1,30 @@
+# $Id$
+# Documentation for KX_SCA_DynamicActuator
+from SCA_IActuator import *
+
+class KX_SCA_DynamicActuator(SCA_IActuator):
+ """
+ Dynamic Actuator.
+ @ivar operation: the type of operation of the actuator, 0-4
+ KX_DYN_RESTORE_DYNAMICS, KX_DYN_DISABLE_DYNAMICS,
+ KX_DYN_ENABLE_RIGID_BODY, KX_DYN_DISABLE_RIGID_BODY, KX_DYN_SET_MASS
+ @type operation: integer
+ @ivar mass: the mass value for the KX_DYN_SET_MASS operation
+ @type mass: float
+ """
+ def setOperation(operation):
+ """
+ DEPRECATED: Use the operation property instead.
+ Set the type of operation when the actuator is activated:
+ - 0 = restore dynamics
+ - 1 = disable dynamics
+ - 2 = enable rigid body
+ - 3 = disable rigid body
+ - 4 = set mass
+ """
+ def getOperation():
+ """
+ DEPRECATED: Use the operation property instead.
+ return the type of operation
+ """
+
diff --git a/source/gameengine/PyDoc/KX_SCA_ReplaceMeshActuator.py b/source/gameengine/PyDoc/KX_SCA_ReplaceMeshActuator.py
index 498f6072e23..951c118a99a 100644
--- a/source/gameengine/PyDoc/KX_SCA_ReplaceMeshActuator.py
+++ b/source/gameengine/PyDoc/KX_SCA_ReplaceMeshActuator.py
@@ -18,13 +18,13 @@ class KX_SCA_ReplaceMeshActuator(SCA_IActuator):
# Mesh (name, near, far)
# Meshes overlap so that they don't 'pop' when on the edge of the distance.
meshes = ((".Hi", 0.0, -20.0),
- (".Med", -15.0, -50.0),
- (".Lo", -40.0, -100.0)
- )
+ (".Med", -15.0, -50.0),
+ (".Lo", -40.0, -100.0)
+ )
co = GameLogic.getCurrentController()
obj = co.getOwner()
- act = co.getActuator("LOD." + obj.getName())
+ act = co.getActuator("LOD." + obj.name)
cam = GameLogic.getCurrentScene().active_camera
def Depth(pos, plane):
@@ -39,10 +39,10 @@ class KX_SCA_ReplaceMeshActuator(SCA_IActuator):
for mesh in meshes:
if depth < mesh[1] and depth > mesh[2]:
newmesh = mesh
- if "ME" + obj.getName() + mesh[0] == act.getMesh():
+ if "ME" + obj.name + mesh[0] == act.getMesh():
curmesh = mesh
- if newmesh != None and "ME" + obj.getName() + newmesh[0] != act.getMesh():
+ if newmesh != None and "ME" + obj.name + newmesh[0] != act.getMesh():
# The mesh is a different mesh - switch it.
# Check the current mesh is not a better fit.
if curmesh == None or curmesh[1] < depth or curmesh[2] > depth:
@@ -55,9 +55,14 @@ class KX_SCA_ReplaceMeshActuator(SCA_IActuator):
This will generate a warning in the console:
C{ERROR: GameObject I{OBName} ReplaceMeshActuator I{ActuatorName} without object}
+
+ @ivar mesh: L{KX_MeshProxy} or the name of the mesh that will replace the current one
+ Set to None to disable actuator
+ @type mesh: L{KX_MeshProxy} or None if no mesh is set
"""
def setMesh(name):
"""
+ DEPRECATED: Use the mesh property instead.
Sets the name of the mesh that will replace the current one.
When the name is None it will unset the mesh value so no action is taken.
@@ -65,10 +70,15 @@ class KX_SCA_ReplaceMeshActuator(SCA_IActuator):
"""
def getMesh():
"""
+ DEPRECATED: Use the mesh property instead.
Returns the name of the mesh that will replace the current one.
Returns None if no mesh has been scheduled to be added.
@rtype: string or None
"""
-
+ def instantReplaceMesh():
+ """
+ Immediately replace mesh without delay.
+ @rtype: None
+ """ \ No newline at end of file
diff --git a/source/gameengine/PyDoc/KX_Scene.py b/source/gameengine/PyDoc/KX_Scene.py
index 5e357e6eefc..5dcd560ee96 100644
--- a/source/gameengine/PyDoc/KX_Scene.py
+++ b/source/gameengine/PyDoc/KX_Scene.py
@@ -16,14 +16,14 @@ class KX_Scene:
scene = GameLogic.getCurrentScene()
# print all the objects in the scene
- for obj in scene.getObjectList():
- print obj.getName()
+ for obj in scene.objects:
+ print obj.name
# get an object named 'Cube'
- obj = scene.getObjectList()["OBCube"]
+ obj = scene.objects["OBCube"]
# get the first object in the scene.
- obj = scene.getObjectList()[0]
+ obj = scene.objects[0]
Example::
# Get the depth of an object in the camera view.
@@ -39,8 +39,8 @@ class KX_Scene:
@ivar name: The scene's name
@type name: string
- @type objects: A list of objects in the scene.
- @type objects: list [L{KX_GameObject}]
+ @ivar objects: A list of objects in the scene.
+ @type objects: L{CListValue<CListValue.CListValue>} of L{KX_GameObject<KX_GameObject.KX_GameObject>}
@ivar active_camera: The current active camera
@type active_camera: L{KX_Camera}
@ivar suspended: True if the scene is suspended.
@@ -55,7 +55,7 @@ class KX_Scene:
"""
Returns the list of lights in the scene.
- @rtype: list [L{KX_Light}]
+ @rtype: list [L{KX_LightObject}]
"""
def getObjectList():
"""
@@ -70,7 +70,7 @@ class KX_Scene:
@rtype: string
"""
- def addObject(object, other, time=0)
+ def addObject(object, other, time=0):
"""
Adds an object to the scene like the Add Object Actuator would, and returns the created object.
diff --git a/source/gameengine/PyDoc/KX_SceneActuator.py b/source/gameengine/PyDoc/KX_SceneActuator.py
index cfb40ae072f..6e27257533e 100644
--- a/source/gameengine/PyDoc/KX_SceneActuator.py
+++ b/source/gameengine/PyDoc/KX_SceneActuator.py
@@ -8,25 +8,34 @@ class KX_SceneActuator(SCA_IActuator):
@warning: Scene actuators that use a scene name will be ignored if at game start, the
named scene doesn't exist or is empty
-
+
This will generate a warning in the console:
C{ERROR: GameObject I{OBName} has a SceneActuator I{ActuatorName} (SetScene) without scene}
+
+ @ivar scene: the name of the scene to change to/overlay/underlay/remove/suspend/resume
+ @type scene: string.
+ @ivar camera: the camera to change to.
+ When setting the attribute, you can use either a L{KX_Camera} or the name of the camera.
+ @type camera: L{KX_Camera} on read, string or L{KX_Camera} on write
"""
def setUseRestart(flag):
"""
+ DEPRECATED
Set flag to True to restart the scene.
@type flag: boolean
"""
def setScene(scene):
"""
+ DEPRECATED: use the scene property instead
Sets the name of the scene to change to/overlay/underlay/remove/suspend/resume.
@type scene: string
"""
def setCamera(camera):
"""
+ DEPRECATED: use the camera property instead
Sets the camera to change to.
Camera can be either a L{KX_Camera} or the name of the camera.
@@ -35,12 +44,14 @@ class KX_SceneActuator(SCA_IActuator):
"""
def getUseRestart():
"""
+ DEPRECATED
Returns True if the scene will be restarted.
@rtype: boolean
"""
def getScene():
"""
+ DEPRECATED: use the scene property instead
Returns the name of the scene to change to/overlay/underlay/remove/suspend/resume.
Returns an empty string ("") if no scene has been set.
@@ -49,6 +60,7 @@ class KX_SceneActuator(SCA_IActuator):
"""
def getCamera():
"""
+ DEPRECATED: use the camera property instead
Returns the name of the camera to change to.
@rtype: string
diff --git a/source/gameengine/PyDoc/KX_SoundActuator.py b/source/gameengine/PyDoc/KX_SoundActuator.py
index 072af5b816c..37ae3c6640d 100644
--- a/source/gameengine/PyDoc/KX_SoundActuator.py
+++ b/source/gameengine/PyDoc/KX_SoundActuator.py
@@ -7,18 +7,55 @@ class KX_SoundActuator(SCA_IActuator):
Sound Actuator.
The L{startSound()}, L{pauseSound()} and L{stopSound()} do not require
- the actuator to be activated - they act instantly.
+ the actuator to be activated - they act instantly provided that the actuator has
+ been activated once at least.
+
+ @ivar filename: Sets the filename of the sound this actuator plays.
+ @type filename: string
+
+ @ivar volume: Sets the volume (gain) of the sound.
+ @type volume: float
+
+ @ivar pitch: Sets the pitch of the sound.
+ @type pitch: float
+
+ @ivar rollOffFactor: Sets the roll off factor. Rolloff defines the rate of attenuation as the sound gets further away.
+ @type rollOffFactor: float
+
+ @ivar looping: Sets the loop mode of the actuator.
+ @type looping: integer
+
+ @ivar position: Sets the position of the sound.
+ @type position: float array
+
+ @ivar velocity: Sets the speed of the sound; The speed of the sound alter the pitch.
+ @type velocity: float array
+
+ @ivar orientation: Sets the orientation of the sound. When setting the orientation you can
+ also use quaternion [float,float,float,float] or euler angles [float,float,float]
+ @type orientation: 3x3 matrix [[float]]
+
+ @ivar type: Sets the operation mode of the actuator. You can use one of the following constant:
+ KX_SOUNDACT_PLAYSTOP (1)
+ KX_SOUNDACT_PLAYEND (2)
+ KX_SOUNDACT_LOOPSTOP (3)
+ KX_SOUNDACT_LOOPEND (4)
+ KX_SOUNDACT_LOOPBIDIRECTIONAL (5)
+ KX_SOUNDACT_LOOPBIDIRECTIONAL_STOP (6)
+ @type type: integer
- @group Play Methods: startSound, pauseSound, stopSound
+ @group Play Methods: startSound, pauseSound, stopSound.
"""
def setFilename(filename):
"""
- Sets the filename of the sound this actuator plays.
+ DEPRECATED: Use the filename property instead.
+ Sets the filename of the sound this actuator plays.
@type filename: string
"""
def getFilename():
"""
+ DEPRECATED: Use the filename property instead.
Returns the filename of the sound this actuator plays.
@rtype: string
@@ -37,6 +74,7 @@ class KX_SoundActuator(SCA_IActuator):
"""
def setGain(gain):
"""
+ DEPRECATED: Use the volume property instead
Sets the gain (volume) of the sound
@type gain: float
@@ -44,24 +82,28 @@ class KX_SoundActuator(SCA_IActuator):
"""
def getGain():
"""
+ DEPRECATED: Use the volume property instead.
Gets the gain (volume) of the sound.
@rtype: float
"""
def setPitch(pitch):
"""
+ DEPRECATED: Use the pitch property instead.
Sets the pitch of the sound.
@type pitch: float
"""
def getPitch():
"""
+ DEPRECATED: Use the pitch property instead.
Returns the pitch of the sound.
@rtype: float
"""
def setRollOffFactor(rolloff):
"""
+ DEPRECATED: Use the rollOffFactor property instead.
Sets the rolloff factor for the sounds.
Rolloff defines the rate of attenuation as the sound gets further away.
@@ -71,12 +113,14 @@ class KX_SoundActuator(SCA_IActuator):
"""
def getRollOffFactor():
"""
+ DEPRECATED: Use the rollOffFactor property instead.
Returns the rolloff factor for the sound.
@rtype: float
"""
def setLooping(loop):
"""
+ DEPRECATED: Use the looping property instead.
Sets the loop mode of the actuator.
@bug: There are no constants defined for this method!
@@ -90,12 +134,14 @@ class KX_SoundActuator(SCA_IActuator):
"""
def getLooping():
"""
+ DEPRECATED: Use the looping property instead.
Returns the current loop mode of the actuator.
@rtype: integer
"""
def setPosition(x, y, z):
"""
+ DEPRECATED: Use the position property instead.
Sets the position this sound will come from.
@type x: float
@@ -107,6 +153,7 @@ class KX_SoundActuator(SCA_IActuator):
"""
def setVelocity(vx, vy, vz):
"""
+ DEPRECATED: Use the velocity property instead.
Sets the velocity this sound is moving at.
The sound's pitch is determined from the velocity.
@@ -120,6 +167,7 @@ class KX_SoundActuator(SCA_IActuator):
"""
def setOrientation(o11, o12, o13, o21, o22, o23, o31, o32, o33):
"""
+ DEPRECATED: Use the orientation property instead.
Sets the orientation of the sound.
The nine parameters specify a rotation matrix::
@@ -130,6 +178,7 @@ class KX_SoundActuator(SCA_IActuator):
def setType(mode):
"""
+ DEPRECATED: Use the type property instead.
Sets the operation mode of the actuator.
@param mode: KX_SOUNDACT_PLAYSTOP, KX_SOUNDACT_PLAYEND, KX_SOUNDACT_LOOPSTOP, KX_SOUNDACT_LOOPEND, KX_SOUNDACT_LOOPBIDIRECTIONAL, KX_SOUNDACT_LOOPBIDIRECTIONAL_STOP
@@ -138,6 +187,7 @@ class KX_SoundActuator(SCA_IActuator):
def getType():
"""
+ DEPRECATED: Use the type property instead.
Returns the operation mode of the actuator.
@rtype: integer
diff --git a/source/gameengine/PyDoc/KX_StateActuator.py b/source/gameengine/PyDoc/KX_StateActuator.py
index fb6ae5a3621..fe3669d3809 100644
--- a/source/gameengine/PyDoc/KX_StateActuator.py
+++ b/source/gameengine/PyDoc/KX_StateActuator.py
@@ -5,9 +5,26 @@ from SCA_IActuator import *
class KX_StateActuator(SCA_IActuator):
"""
State actuator changes the state mask of parent object.
+
+ Property:
+
+ @ivar operation: type of bit operation to be applied on object state mask.
+ You can use one of the following constant:
+ KX_STATE_OP_CPY (0) : Copy state mask
+ KX_STATE_OP_SET (1) : Add bits to state mask
+ KX_STATE_OP_CLR (2) : Substract bits to state mask
+ KX_STATE_OP_NEG (3) : Invert bits to state mask
+ @type operation: integer
+
+ @ivar mask: value that defines the bits that will be modified by the operation.
+ The bits that are 1 in the mask will be updated in the object state,
+ the bits that are 0 are will be left unmodified expect for the Copy operation
+ which copies the mask to the object state
+ @type mask: integer
"""
def setOperation(op):
"""
+ DEPRECATED: Use the operation property instead.
Set the type of bit operation to be applied on object state mask.
Use setMask() to specify the bits that will be modified.
@@ -16,6 +33,7 @@ class KX_StateActuator(SCA_IActuator):
"""
def setMask(mask):
"""
+ DEPRECATED: Use the mask property instead.
Set the value that defines the bits that will be modified by the operation.
The bits that are 1 in the value will be updated in the object state,
the bits that are 0 are will be left unmodified expect for the Copy operation
diff --git a/source/gameengine/PyDoc/KX_TouchSensor.py b/source/gameengine/PyDoc/KX_TouchSensor.py
index d7277be4c2a..f4fcbeefc62 100644
--- a/source/gameengine/PyDoc/KX_TouchSensor.py
+++ b/source/gameengine/PyDoc/KX_TouchSensor.py
@@ -17,7 +17,7 @@ class KX_TouchSensor(SCA_ISensor):
@ivar objectHit: The last collided object. (Read Only)
@type objectHit: L{KX_GameObject} or None
@ivar objectHitList: A list of colliding objects. (Read Only)
- @type objectHitList: list
+ @type objectHitList: L{CListValue<CListValue.CListValue>} of L{KX_GameObject<KX_GameObject.KX_GameObject>}
"""
#--The following methods are deprecated, please use properties instead.
@@ -53,7 +53,7 @@ class KX_TouchSensor(SCA_ISensor):
Only objects that have the requisite material/property are listed.
- @rtype: list [L{KX_GameObject}]
+ @rtype: L{CListValue<CListValue.CListValue>} of L{KX_GameObject<KX_GameObject.KX_GameObject>}
"""
def getTouchMaterial():
"""
diff --git a/source/gameengine/PyDoc/KX_TrackToActuator.py b/source/gameengine/PyDoc/KX_TrackToActuator.py
index 730ab21166b..ee2dc5d6144 100644
--- a/source/gameengine/PyDoc/KX_TrackToActuator.py
+++ b/source/gameengine/PyDoc/KX_TrackToActuator.py
@@ -15,9 +15,15 @@ class KX_TrackToActuator(SCA_IActuator):
@ivar object: the object this actuator tracks.
@type object: KX_GameObject or None
+ @ivar time: the time in frames with which to delay the tracking motion
+ @type time: integer
+ @ivar use3D: the tracking motion to use 3D
+ @type use3D: boolean
+
"""
def setObject(object):
"""
+ DEPRECATED: Use the object property.
Sets the object to track.
@type object: L{KX_GameObject}, string or None
@@ -25,6 +31,7 @@ class KX_TrackToActuator(SCA_IActuator):
"""
def getObject(name_only):
"""
+ DEPRECATED: Use the object property.
Returns the name of the object to track.
@type name_only: bool
@@ -33,18 +40,21 @@ class KX_TrackToActuator(SCA_IActuator):
"""
def setTime(time):
"""
+ DEPRECATED: Use the time property.
Sets the time in frames with which to delay the tracking motion.
@type time: integer
"""
def getTime():
"""
+ DEPRECATED: Use the time property.
Returns the time in frames with which the tracking motion is delayed.
@rtype: integer
"""
def setUse3D(use3d):
"""
+ DEPRECATED: Use the use3D property.
Sets the tracking motion to use 3D.
@type use3d: boolean
@@ -53,6 +63,7 @@ class KX_TrackToActuator(SCA_IActuator):
"""
def getUse3D():
"""
+ DEPRECATED: Use the use3D property.
Returns True if the tracking motion will track in the z direction.
@rtype: boolean
diff --git a/source/gameengine/PyDoc/KX_VehicleWrapper.py b/source/gameengine/PyDoc/KX_VehicleWrapper.py
new file mode 100644
index 00000000000..087aa167475
--- /dev/null
+++ b/source/gameengine/PyDoc/KX_VehicleWrapper.py
@@ -0,0 +1,166 @@
+class KX_VehicleWrapper: # (PyObjectPlus)
+ """
+ KX_VehicleWrapper
+
+ All placeholders have a __ prefix
+ """
+
+ def addWheel(wheel, attachPos, attachDir, axleDir, suspensionRestLength, wheelRadius, hasSteering):
+
+ """
+ TODO - Description
+
+ @param wheel: The object to use as a wheel.
+ @type wheel: L{KX_GameObject<KX_GameObject.KX_GameObject>} or a KX_GameObject name
+ @param attachPos: The position that this wheel will attach to.
+ @type attachPos: vector of 3 floats
+ @param attachDir: The direction this wheel points.
+ @type attachDir: vector of 3 floats
+ @param axleDir: The direction of this wheels axle.
+ @type axleDir: vector of 3 floats
+ @param suspensionRestLength: TODO - Description
+ @type suspensionRestLength: float
+ @param wheelRadius: The size of the wheel.
+ @type wheelRadius: float
+ """
+
+ def __applyBraking(val):
+ """
+ TODO - Description
+
+ @param val: the starting frame of the animation
+ @type val: float
+
+ @rtype: integer
+ @return: TODO Description
+ """
+ def __applyEngineForce(val):
+ """
+ TODO - Description
+
+ @param val: the starting frame of the animation
+ @type val: float
+
+ @rtype: integer
+ @return: TODO Description
+ """
+ def __getConstraintId(val):
+ """
+ TODO - Description
+
+ @param val: the starting frame of the animation
+ @type val: float
+
+ @rtype: integer
+ @return: TODO Description
+ """
+ def __getConstraintType(val):
+ """
+ TODO - Description
+
+ @param val: the starting frame of the animation
+ @type val: float
+
+ @rtype: integer
+ @return: TODO Description
+ """
+ def __getNumWheels(val):
+ """
+ TODO - Description
+
+ @param val: the starting frame of the animation
+ @type val: float
+
+ @rtype: integer
+ @return: TODO Description
+ """
+ def __getWheelOrientationQuaternion(val):
+ """
+ TODO - Description
+
+ @param val: the starting frame of the animation
+ @type val: float
+
+ @rtype: integer
+ @return: TODO Description
+ """
+ def __getWheelPosition(val):
+ """
+ TODO - Description
+
+ @param val: the starting frame of the animation
+ @type val: float
+
+ @rtype: integer
+ @return: TODO Description
+ """
+ def __getWheelRotation(val):
+ """
+ TODO - Description
+
+ @param val: the starting frame of the animation
+ @type val: float
+
+ @rtype: integer
+ @return: TODO Description
+ """
+ def __setRollInfluence(val):
+ """
+ TODO - Description
+
+ @param val: the starting frame of the animation
+ @type val: float
+
+ @rtype: integer
+ @return: TODO Description
+ """
+ def __setSteeringValue(val):
+ """
+ TODO - Description
+
+ @param val: the starting frame of the animation
+ @type val: float
+
+ @rtype: integer
+ @return: TODO Description
+ """
+ def __setSuspensionCompression(val):
+ """
+ TODO - Description
+
+ @param val: the starting frame of the animation
+ @type val: float
+
+ @rtype: integer
+ @return: TODO Description
+ """
+ def __setSuspensionDamping(val):
+ """
+ TODO - Description
+
+ @param val: the starting frame of the animation
+ @type val: float
+
+ @rtype: integer
+ @return: TODO Description
+ """
+ def __setSuspensionStiffness(val):
+ """
+ TODO - Description
+
+ @param val: the starting frame of the animation
+ @type val: float
+
+ @rtype: integer
+ @return: TODO Description
+ """
+ def __setTyreFriction(val):
+ """
+ TODO - Description
+
+ @param val: the starting frame of the animation
+ @type val: float
+
+ @rtype: integer
+ @return: TODO Description
+ """
diff --git a/source/gameengine/PyDoc/KX_VertexProxy.py b/source/gameengine/PyDoc/KX_VertexProxy.py
index 8dc2752c037..7ee5087b316 100644
--- a/source/gameengine/PyDoc/KX_VertexProxy.py
+++ b/source/gameengine/PyDoc/KX_VertexProxy.py
@@ -34,6 +34,11 @@ class KX_VertexProxy:
@ivar v: The v texture coordinate of the vertex.
@type v: float
+ @ivar u2: The second u texture coordinate of the vertex.
+ @type u2: float
+ @ivar v2: The second v texture coordinate of the vertex.
+ @type v2: float
+
@group Colour: r, g, b, a
@ivar r: The red component of the vertex colour. 0.0 <= r <= 1.0
@type r: float
@@ -72,6 +77,19 @@ class KX_VertexProxy:
@type uv: list [u, v]
"""
+ def getUV2():
+ """
+ Gets the 2nd UV (texture) coordinates of this vertex.
+
+ @rtype: list [u, v]
+ @return: this vertexes UV (texture) coordinates.
+ """
+ def setUV2(uv):
+ """
+ Sets the 2nd UV (texture) coordinates of this vertex.
+
+ @type uv: list [u, v]
+ """
def getRGBA():
"""
Gets the colour of this vertex.
@@ -120,3 +138,11 @@ class KX_VertexProxy:
@rtype: list [nx, ny, nz]
@return: normalised normal vector.
"""
+ def setNormal(normal):
+ """
+ Sets the normal vector of this vertex.
+
+ @type normal: sequence of floats [r, g, b]
+ @param normal: the new normal of this vertex.
+ """
+
diff --git a/source/gameengine/PyDoc/KX_VisibilityActuator.py b/source/gameengine/PyDoc/KX_VisibilityActuator.py
index 22499f25d81..36f25b2423c 100644
--- a/source/gameengine/PyDoc/KX_VisibilityActuator.py
+++ b/source/gameengine/PyDoc/KX_VisibilityActuator.py
@@ -5,13 +5,18 @@ from SCA_IActuator import *
class KX_VisibilityActuator(SCA_IActuator):
"""
Visibility Actuator.
+ @ivar visibility: whether the actuator makes its parent object visible or invisible
+ @type visibility: boolean
+ @ivar occlusion: whether the actuator makes its parent object an occluder or not
+ @type occlusion: boolean
+ @ivar recursion: whether the visibility/occlusion should be propagated to all children of the object
+ @type recursion: boolean
"""
def set(visible):
"""
+ DEPRECATED: Use the visibility property instead.
Sets whether the actuator makes its parent object visible or invisible.
-
+
@param visible: - True: Makes its parent visible.
- False: Makes its parent invisible.
"""
-
- \ No newline at end of file
diff --git a/source/gameengine/PyDoc/SCA_2DFilterActuator.py b/source/gameengine/PyDoc/SCA_2DFilterActuator.py
new file mode 100644
index 00000000000..9a010e8f221
--- /dev/null
+++ b/source/gameengine/PyDoc/SCA_2DFilterActuator.py
@@ -0,0 +1,44 @@
+# $Id$
+# Documentation for SCA_2DFilterActuator
+from SCA_IActuator import *
+from SCA_ILogicBrick import *
+
+class SCA_2DFilterActuator(SCA_IActuator):
+ """
+ Create, enable and disable 2D filters
+
+ Properties:
+
+ The following properties don't have an immediate effect.
+ You must active the actuator to get the result.
+ The actuator is not persistent: it automatically stops itself after setting up the filter
+ but the filter remains active. To stop a filter you must activate the actuator with 'type'
+ set to RAS_2DFILTER_DISABLED or RAS_2DFILTER_NOFILTER.
+
+ @ivar shaderText: shader source code for custom shader
+ @type shaderText: string
+ @ivar disableMotionBlur: action on motion blur: 0=enable, 1=disable
+ @type disableMotionBlur: integer
+ @ivar type: type of 2D filter, use one of the following constants:
+ RAS_2DFILTER_ENABLED (-2) : enable the filter that was previously disabled
+ RAS_2DFILTER_DISABLED (-1) : disable the filter that is currently active
+ RAS_2DFILTER_NOFILTER (0) : disable and destroy the filter that is currently active
+ RAS_2DFILTER_MOTIONBLUR (1) : create and enable preset filters
+ RAS_2DFILTER_BLUR (2)
+ RAS_2DFILTER_SHARPEN (3)
+ RAS_2DFILTER_DILATION (4)
+ RAS_2DFILTER_EROSION (5)
+ RAS_2DFILTER_LAPLACIAN (6)
+ RAS_2DFILTER_SOBEL (7)
+ RAS_2DFILTER_PREWITT (8)
+ RAS_2DFILTER_GRAYSCALE (9)
+ RAS_2DFILTER_SEPIA (10)
+ RAS_2DFILTER_INVERT (11)
+ RAS_2DFILTER_CUSTOMFILTER (12) : customer filter, the code code is set via shaderText property
+ @type type: integer
+ @ivar passNb: order number of filter in the stack of 2D filters. Filters are executed in increasing order of passNb.
+ Only be one filter can be defined per passNb.
+ @type passNb: integer (0-100)
+ @ivar value: argument for motion blur filter
+ @type value: float (0.0-100.0)
+ """
diff --git a/source/gameengine/PyDoc/KX_ActuatorSensor.py b/source/gameengine/PyDoc/SCA_ActuatorSensor.py
index b0e138a8009..515354e8716 100644
--- a/source/gameengine/PyDoc/KX_ActuatorSensor.py
+++ b/source/gameengine/PyDoc/SCA_ActuatorSensor.py
@@ -1,9 +1,10 @@
# $Id$
-# Documentation for KX_ActuatorSensor
+# Documentation for SCA_ActuatorSensor
from SCA_IActuator import *
from SCA_ISensor import *
+from SCA_ILogicBrick import *
-class KX_ActuatorSensor(SCA_ISensor):
+class SCA_ActuatorSensor(SCA_ISensor):
"""
Actuator sensor detect change in actuator state of the parent object.
It generates a positive pulse if the corresponding actuator is activated
diff --git a/source/gameengine/PyDoc/SCA_ILogicBrick.py b/source/gameengine/PyDoc/SCA_ILogicBrick.py
index 18cb900f28d..4688ba12bb6 100644
--- a/source/gameengine/PyDoc/SCA_ILogicBrick.py
+++ b/source/gameengine/PyDoc/SCA_ILogicBrick.py
@@ -8,13 +8,17 @@ class SCA_ILogicBrick:
@ivar executePriority: This determines the order controllers are evaluated, and actuators are activated (lower priority is executed first).
@type executePriority: int
+ @ivar owner: The game object this logic brick is attached to (read only).
+ @type owner: L{KX_GameObject<KX_GameObject.KX_GameObject>} or None in exceptional cases.
"""
def getOwner():
"""
Gets the game object associated with this logic brick.
- @rtype: L{KX_GameObject}
+ Deprecated: Use the "owner" property instead.
+
+ @rtype: L{KX_GameObject<KX_GameObject.KX_GameObject>}
"""
#--The following methods are deprecated--
diff --git a/source/gameengine/PyDoc/SCA_JoystickSensor.py b/source/gameengine/PyDoc/SCA_JoystickSensor.py
index 111ee7f4cfa..13b006e8dd6 100644
--- a/source/gameengine/PyDoc/SCA_JoystickSensor.py
+++ b/source/gameengine/PyDoc/SCA_JoystickSensor.py
@@ -1,4 +1,4 @@
-# $Id: SCA_RandomSensor.py 15444 2008-07-05 17:05:05Z lukep $
+# $Id$
# Documentation for SCA_RandomSensor
from SCA_ISensor import *
@@ -8,10 +8,16 @@ class SCA_JoystickSensor(SCA_ISensor):
Properties:
- @ivar axisPosition: (read-only) The state of the joysticks axis as a list of 4 values, each spesifying the value of an axis between -32767 and 32767 depending on how far the axis is pushed, 0 for nothing.
- The first 2 values are used by most joysticks and gamepads for directional control. 3rd and 4th values are only on some joysticks and can be used for arbitary controls.
- left:[-32767, 0, ...], right:[32767, 0, ...], up:[0, -32767, ...], down:[0, 32767, ...]
- @type axisPosition: [integer, integer, integer, integer]
+ @ivar axisValues: (read-only) The state of the joysticks axis as a list of values L{numAxis} long.
+ each spesifying the value of an axis between -32767 and 32767 depending on how far the axis is pushed, 0 for nothing.
+ The first 2 values are used by most joysticks and gamepads for directional control. 3rd and 4th values are only on some joysticks and can be used for arbitary controls.
+ left:[-32767, 0, ...], right:[32767, 0, ...], up:[0, -32767, ...], down:[0, 32767, ...]
+ @type axisValues: list of ints
+
+ @ivar axisSingle: (read-only) like L{axisValues} but returns a single axis value that is set by the sensor.
+ Only use this for "Single Axis" type sensors otherwise it will raise an error.
+ @type axisSingle: int
+
@ivar numAxis: (read-only) The number of axes for the joystick at this index.
@type numAxis: integer
@ivar numButtons: (read-only) The number of buttons for the joystick at this index.
@@ -41,13 +47,13 @@ class SCA_JoystickSensor(SCA_ISensor):
Returns a list containing the indicies of the currently pressed buttons.
@rtype: list
"""
- def getButtonStatus(buttonIndex):
- """
- Returns a bool of the current pressed state of the specified button.
- @param buttonIndex: the button index, 0=first button
- @type buttonIndex: integer
- @rtype: bool
- """
+ def getButtonStatus(buttonIndex):
+ """
+ Returns a bool of the current pressed state of the specified button.
+ @param buttonIndex: the button index, 0=first button
+ @type buttonIndex: integer
+ @rtype: bool
+ """
def getIndex():
"""
DEPRECATED: use the 'index' property.
diff --git a/source/gameengine/PyDoc/SCA_KeyboardSensor.py b/source/gameengine/PyDoc/SCA_KeyboardSensor.py
index f6a7a7d8a97..8abb1fda762 100644
--- a/source/gameengine/PyDoc/SCA_KeyboardSensor.py
+++ b/source/gameengine/PyDoc/SCA_KeyboardSensor.py
@@ -20,31 +20,34 @@ class SCA_KeyboardSensor(SCA_ISensor):
@type targetProperty: string
@ivar useAllKeys: Flag to determine whether or not to accept all keys.
@type useAllKeys: boolean
+ @ivar events: a list of pressed keys that have either been pressed, or just released, or are active this frame. (read only).
+
+ - 'keycode' matches the values in L{GameKeys}.
+ - 'status' uses...
+ - L{GameLogic.KX_INPUT_NONE}
+ - L{GameLogic.KX_INPUT_JUST_ACTIVATED}
+ - L{GameLogic.KX_INPUT_ACTIVE}
+ - L{GameLogic.KX_INPUT_JUST_RELEASED}
+
+ @type events: list [[keycode, status], ...]
"""
- def getEventList():
- """
- Get a list of pressed keys that have either been pressed, or just released, or are active this frame.
-
- @rtype: list of key status. [[keycode, status]]
- @return: A list of keyboard events
- """
def getKeyStatus(keycode):
"""
Get the status of a key.
- @rtype: key state (KX_NO_INPUTSTATUS, KX_JUSTACTIVATED, KX_ACTIVE or KX_JUSTRELEASED)
+ @rtype: key state L{GameLogic} members (KX_INPUT_NONE, KX_INPUT_JUST_ACTIVATED, KX_INPUT_ACTIVE, KX_INPUT_JUST_RELEASED)
@return: The state of the given key
@type keycode: integer
@param keycode: The code that represents the key you want to get the state of
"""
- #--The following methods are deprecated--
+ #--The following methods are DEPRECATED--
def getKey():
"""
Returns the key code this sensor is looking for.
- Deprecated: Use the "key" property instead.
+ B{DEPRECATED: Use the "key" property instead}.
@rtype: keycode from L{GameKeys} module
"""
@@ -53,7 +56,7 @@ class SCA_KeyboardSensor(SCA_ISensor):
"""
Set the key this sensor should listen for.
- Deprecated: Use the "key" property instead.
+ B{DEPRECATED: Use the "key" property instead}.
@type keycode: keycode from L{GameKeys} module
"""
@@ -62,7 +65,7 @@ class SCA_KeyboardSensor(SCA_ISensor):
"""
Returns the key code for the first modifier this sensor is looking for.
- Deprecated: Use the "hold1" property instead.
+ B{DEPRECATED: Use the "hold1" property instead}.
@rtype: keycode from L{GameKeys} module
"""
@@ -71,7 +74,7 @@ class SCA_KeyboardSensor(SCA_ISensor):
"""
Sets the key code for the first modifier this sensor should look for.
- Deprecated: Use the "hold1" property instead.
+ B{DEPRECATED: Use the "hold1" property instead}.
@type keycode: keycode from L{GameKeys} module
"""
@@ -80,7 +83,7 @@ class SCA_KeyboardSensor(SCA_ISensor):
"""
Returns the key code for the second modifier this sensor is looking for.
- Deprecated: Use the "hold2" property instead.
+ B{DEPRECATED: Use the "hold2" property instead}.
@rtype: keycode from L{GameKeys} module
"""
@@ -89,7 +92,7 @@ class SCA_KeyboardSensor(SCA_ISensor):
"""
Sets the key code for the second modifier this sensor should look for.
- Deprecated: Use the "hold2" property instead.
+ B{DEPRECATED: Use the "hold2" property instead.}
@type keycode: keycode from L{GameKeys} module
"""
@@ -98,7 +101,7 @@ class SCA_KeyboardSensor(SCA_ISensor):
"""
Get a list of keys that have either been pressed, or just released this frame.
- Deprecated: Use getEventList() instead.
+ B{DEPRECATED: Use "events" instead.}
@rtype: list of key status. [[keycode, status]]
"""
@@ -107,7 +110,7 @@ class SCA_KeyboardSensor(SCA_ISensor):
"""
Get a list of currently pressed keys that have either been pressed, or just released
- Deprecated: Use getEventList() instead.
+ B{DEPRECATED: Use "events" instead.}
@rtype: list of key status. [[keycode, status]]
""" \ No newline at end of file
diff --git a/source/gameengine/PyDoc/SCA_MouseSensor.py b/source/gameengine/PyDoc/SCA_MouseSensor.py
index 9550cbb4105..278ebe63b8a 100644
--- a/source/gameengine/PyDoc/SCA_MouseSensor.py
+++ b/source/gameengine/PyDoc/SCA_MouseSensor.py
@@ -32,3 +32,13 @@ class SCA_MouseSensor(SCA_ISensor):
@rtype: integer
@return: the current y coordinate of the mouse, in frame coordinates (pixels).
"""
+ def getButtonStatus(button):
+ """
+ Get the mouse button status.
+
+ @type button: int
+ @param button: value in GameLogic members KX_MOUSE_BUT_LEFT, KX_MOUSE_BUT_MIDDLE, KX_MOUSE_BUT_RIGHT
+
+ @rtype: integer
+ @return: value in GameLogic members KX_INPUT_NONE, KX_INPUT_NONE, KX_INPUT_JUST_ACTIVATED, KX_INPUT_ACTIVE, KX_INPUT_JUST_RELEASED
+ """
diff --git a/source/gameengine/PyDoc/SCA_NANDController.py b/source/gameengine/PyDoc/SCA_NANDController.py
new file mode 100644
index 00000000000..a864ff2981c
--- /dev/null
+++ b/source/gameengine/PyDoc/SCA_NANDController.py
@@ -0,0 +1,11 @@
+# $Id$
+# Documentation for SCA_NANDController
+from SCA_IController import *
+
+class SCA_NANDController(SCA_IController):
+ """
+ An NAND controller activates when all linked sensors are not active.
+
+ There are no special python methods for this controller.
+ """
+
diff --git a/source/gameengine/PyDoc/SCA_NORController.py b/source/gameengine/PyDoc/SCA_NORController.py
new file mode 100644
index 00000000000..0bc0a71d7b1
--- /dev/null
+++ b/source/gameengine/PyDoc/SCA_NORController.py
@@ -0,0 +1,11 @@
+# $Id$
+# Documentation for SCA_NORController
+from SCA_IController import *
+
+class SCA_NORController(SCA_IController):
+ """
+ An NOR controller activates only when all linked sensors are de-activated.
+
+ There are no special python methods for this controller.
+ """
+
diff --git a/source/gameengine/PyDoc/SCA_RandomSensor.py b/source/gameengine/PyDoc/SCA_RandomSensor.py
index 940b8f879ff..6dc0a3c23c0 100644
--- a/source/gameengine/PyDoc/SCA_RandomSensor.py
+++ b/source/gameengine/PyDoc/SCA_RandomSensor.py
@@ -5,6 +5,11 @@ from SCA_ISensor import *
class SCA_RandomSensor(SCA_ISensor):
"""
This sensor activates randomly.
+
+ @ivar lastDraw: The seed of the random number generator.
+ @type lastDraw: int
+ @ivar seed: The seed of the random number generator.
+ @type seed: int
"""
def setSeed(seed):
@@ -25,4 +30,6 @@ class SCA_RandomSensor(SCA_ISensor):
def getLastDraw():
"""
Returns the last random number generated.
+
+ @rtype: integer
"""
diff --git a/source/gameengine/PyDoc/SCA_XNORController.py b/source/gameengine/PyDoc/SCA_XNORController.py
new file mode 100644
index 00000000000..5fb2561f35a
--- /dev/null
+++ b/source/gameengine/PyDoc/SCA_XNORController.py
@@ -0,0 +1,11 @@
+# $Id$
+# Documentation for SCA_XNORController
+from SCA_IController import *
+
+class SCA_XNORController(SCA_IController):
+ """
+ An XNOR controller activates when all linked sensors are the same (activated or inative).
+
+ There are no special python methods for this controller.
+ """
+
diff --git a/source/gameengine/PyDoc/SCA_XORController.py b/source/gameengine/PyDoc/SCA_XORController.py
new file mode 100644
index 00000000000..10e20fb0945
--- /dev/null
+++ b/source/gameengine/PyDoc/SCA_XORController.py
@@ -0,0 +1,11 @@
+# $Id$
+# Documentation for SCA_XORController
+from SCA_IController import *
+
+class SCA_XORController(SCA_IController):
+ """
+ An XOR controller activates when there is the input is mixed, but not when all are on or off.
+
+ There are no special python methods for this controller.
+ """
+
diff --git a/source/gameengine/PyDoc/SConscript b/source/gameengine/PyDoc/SConscript
index ac0b163d7bd..ed9712ba273 100644
--- a/source/gameengine/PyDoc/SConscript
+++ b/source/gameengine/PyDoc/SConscript
@@ -3,26 +3,27 @@ Import ('env')
from optparse import OptionParser
-try:
- import epydoc
-except ImportError:
- print "No epydoc install detected, Python API Docs will not be generated "
-if epydoc:
- from epydoc.docbuilder import build_doc_index
- from epydoc import cli
- names = env.Glob("source/gameengine/PyDoc/*.py")
- docindex = build_doc_index(names)
- optvalues = cli.OPTION_DEFAULTS
- optvalues["verbose"] = 1
- optvalues["target"] = env["BF_DOCDIR"]+"/BGE_API/"
- optvalues["url"] = "http://www.blender.org"
- optvalues["top"] = "Game Engine API"
- optvalues["name"] = "Blender"
- optvalues["noprivate"] = 1
- optvalues["noframes"] = 1
- optvalues["names"] = names
- optparser = OptionParser()
- optparser.set_defaults(**optvalues)
- (options, args) = optparser.parse_args([])
- cli.write_html(docindex, options)
+import epydoc
+from epydoc.docbuilder import build_doc_index
+from epydoc import cli
+names = env.Glob("source/gameengine/PyDoc/*.py")
+docindex = build_doc_index(names)
+optvalues = cli.OPTION_DEFAULTS
+optvalues["verbose"] = 1
+optvalues["quiet"] = 0
+optvalues["include_source_code"] = 0
+optvalues["inheritance"] = "included"
+optvalues["show_private"] = 0
+optvalues["target"] = env["BF_DOCDIR"]+"/BGE_API/"
+optvalues["url"] = "http://www.blender.org"
+optvalues["top"] = "Game Engine API"
+optvalues["name"] = "Blender"
+optvalues["noprivate"] = 1
+optvalues["noframes"] = 1
+optvalues["names"] = names
+optparser = OptionParser()
+optparser.set_defaults(**optvalues)
+(options, args) = optparser.parse_args([])
+print "Writing Game Engine epydocs to \"%s\"" % optvalues["target"]
+cli.write_html(docindex, options)
diff --git a/source/gameengine/PyDoc/WhatsNew.py b/source/gameengine/PyDoc/WhatsNew.py
index 64bef7ee1c8..4d86e6ef3c4 100644
--- a/source/gameengine/PyDoc/WhatsNew.py
+++ b/source/gameengine/PyDoc/WhatsNew.py
@@ -26,7 +26,7 @@ Blender 2.34
- Added getType() and setType() to L{BL_ActionActuator} and L{KX_SoundActuator} (sgefant)
- New Scene module: L{KX_Scene}
- New Camera module: L{KX_Camera}
- - New Light module: L{KX_Light}
+ - New Light module: L{KX_LightObject}
- Added attributes to L{KX_GameObject}, L{KX_VertexProxy}
- L{KX_SCA_AddObjectActuator}.setObject(), L{KX_TrackToActuator}.setObject() and
L{KX_SceneActuator}.setCamera() now accept L{KX_GameObject}s as parameters
diff --git a/source/gameengine/PyDoc/bge_api_validate_py.txt b/source/gameengine/PyDoc/bge_api_validate_py.txt
new file mode 100644
index 00000000000..0920e5d3c7d
--- /dev/null
+++ b/source/gameengine/PyDoc/bge_api_validate_py.txt
@@ -0,0 +1,110 @@
+#~ This program is free software; you can redistribute it and/or modify
+#~ it under the terms of the GNU General Public License as published by
+#~ the Free Software Foundation; version 2 of the License.
+
+#~ This program is distributed in the hope that it will be useful,
+#~ but WITHOUT ANY WARRANTY; without even the implied warranty of
+#~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+#~ GNU General Public License for more details.
+
+# This script must run from a logic brick so it has access to the game engine api
+# it assumes the root blender source directory is the current working directory
+#
+# Currently it only prints missing modules and methods (not attributes)
+
+
+BGE_API_DOC_PATH = 'source/gameengine/PyDoc'
+
+import GameTypes
+type_members = {}
+
+for type_name in dir(GameTypes):
+ if type_name.startswith('__'):
+ continue
+
+ type_object = getattr(GameTypes, type_name)
+
+ members = []
+ type_members[type_object.__name__] = members
+
+ for member in type_object.__dict__.keys():
+ if member.startswith('__'):
+ continue
+
+ # print type_object.__name__ + '.' + k
+ members.append(member)
+
+import sys, os
+
+doc_dir= os.path.join(os.getcwd(), BGE_API_DOC_PATH)
+
+if doc_dir not in sys.path:
+ sys.path.append(doc_dir)
+
+
+def check_attribute(type_mame, member):
+ filename = os.path.join(doc_dir, type_mame + '.py')
+ # print filename
+
+ file = open(filename, 'rU')
+
+ for l in file:
+ l = l.strip()
+
+ '''
+ @ivar foo: blah blah
+ to
+ foo
+
+ '''
+
+ if l.startswith('@ivar'):
+ var = l.split()[1].split(':')[0]
+
+ if var == member:
+ file.close()
+ return True
+
+ file.close()
+ return False
+
+
+
+
+
+
+print '\n\n\nChecking Docs'
+
+PRINT_OK = False
+
+for type_name in sorted(type_members.keys()):
+ members = type_members[type_name]
+
+ try:
+ mod = __import__(type_name)
+ if PRINT_OK:
+ print "type: %s" % type_name
+ except:
+ print "missing: %s - %s" % (type_name, str(sorted(members)))
+ continue
+
+ reload(mod) # incase were editing it
+
+ try:
+ type_class = getattr(mod, type_name)
+ except:
+ print "missing class: %s.%s - %s" % (type_name, type_name, str(sorted(members)))
+ continue
+
+ for member in sorted(members):
+ try:
+ getattr(type_class, member)
+ if PRINT_OK:
+ print "\tfound: %s.%s" % (type_name, member)
+ except:
+ if check_attribute(type_name, member):
+ if PRINT_OK:
+ print "\tfound attr: %s.%s" % (type_name, member)
+ else:
+ print "\tmissing: %s.%s" % (type_name, member)
+
diff --git a/source/gameengine/PyDoc/epy_docgen.sh b/source/gameengine/PyDoc/epy_docgen.sh
index b243101ddcb..ddf39dcc081 100644..100755
--- a/source/gameengine/PyDoc/epy_docgen.sh
+++ b/source/gameengine/PyDoc/epy_docgen.sh
@@ -8,4 +8,4 @@
LC_ALL=POSIX
epydoc --debug -v -o BPY_GE --url "http://www.blender.org" --top GameLogic \
- --name "Blender GameEngine" --no-private --no-frames *.py
+ --name "Blender GameEngine" --no-private --no-frames --no-sourcecode --inheritance=included *.py
diff --git a/source/gameengine/Rasterizer/RAS_2DFilterManager.cpp b/source/gameengine/Rasterizer/RAS_2DFilterManager.cpp
index 282c7306285..176da51b183 100644
--- a/source/gameengine/Rasterizer/RAS_2DFilterManager.cpp
+++ b/source/gameengine/Rasterizer/RAS_2DFilterManager.cpp
@@ -435,11 +435,12 @@ void RAS_2DFilterManager::RenderFilters(RAS_ICanvas* canvas)
glViewport(0,0, texturewidth, textureheight);
glDisable(GL_DEPTH_TEST);
+ glPushMatrix(); //GL_MODELVIEW
+ glLoadIdentity(); // GL_MODELVIEW
glMatrixMode(GL_TEXTURE);
glLoadIdentity();
glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glMatrixMode(GL_MODELVIEW);
+ glPushMatrix();
glLoadIdentity();
for(passindex =0; passindex<MAX_RENDER_PASS; passindex++)
@@ -466,6 +467,9 @@ void RAS_2DFilterManager::RenderFilters(RAS_ICanvas* canvas)
glEnable(GL_DEPTH_TEST);
glViewport(viewport[0],viewport[1],viewport[2],viewport[3]);
EndShaderProgram();
+ glPopMatrix();
+ glMatrixMode(GL_MODELVIEW);
+ glPopMatrix();
}
void RAS_2DFilterManager::EnableFilter(vector<STR_String>& propNames, void* gameObj, RAS_2DFILTER_MODE mode, int pass, STR_String& text)
diff --git a/source/gameengine/Rasterizer/RAS_BucketManager.cpp b/source/gameengine/Rasterizer/RAS_BucketManager.cpp
index f7938bb62e6..ec290f89d9e 100644
--- a/source/gameengine/Rasterizer/RAS_BucketManager.cpp
+++ b/source/gameengine/Rasterizer/RAS_BucketManager.cpp
@@ -148,6 +148,10 @@ void RAS_BucketManager::RenderAlphaBuckets(
while(sit->m_bucket->ActivateMaterial(cameratrans, rasty, rendertools))
sit->m_bucket->RenderMeshSlot(cameratrans, rasty, rendertools, *(sit->m_ms));
+
+ // make this mesh slot culled automatically for next frame
+ // it will be culled out by frustrum culling
+ sit->m_ms->SetCulled(true);
}
rasty->SetDepthMask(RAS_IRasterizer::KX_DEPTHMASK_ENABLED);
@@ -170,6 +174,10 @@ void RAS_BucketManager::RenderSolidBuckets(
while ((*bit)->ActivateMaterial(cameratrans, rasty, rendertools))
(*bit)->RenderMeshSlot(cameratrans, rasty, rendertools, *mit);
+
+ // make this mesh slot culled automatically for next frame
+ // it will be culled out by frustrum culling
+ mit->SetCulled(true);
}
}
diff --git a/source/gameengine/Rasterizer/RAS_FramingManager.h b/source/gameengine/Rasterizer/RAS_FramingManager.h
index 610bd13ff12..0a226ac30f9 100644
--- a/source/gameengine/Rasterizer/RAS_FramingManager.h
+++ b/source/gameengine/Rasterizer/RAS_FramingManager.h
@@ -163,6 +163,13 @@ struct RAS_FrameFrustum
float x2,y2;
};
+/* must match R_CULLING_... from DNA_scene_types.h */
+enum RAS_CullingMode
+{
+ RAS_CULLING_DBVT = 0,
+ RAS_CULLING_NORMAL,
+ RAS_CULLING_NONE
+};
/**
* @section RAS_FramingManager
diff --git a/source/gameengine/Rasterizer/RAS_IRasterizer.h b/source/gameengine/Rasterizer/RAS_IRasterizer.h
index 83adcfd8321..cfeda06e670 100644
--- a/source/gameengine/Rasterizer/RAS_IRasterizer.h
+++ b/source/gameengine/Rasterizer/RAS_IRasterizer.h
@@ -113,6 +113,7 @@ public:
RAS_STEREO_ANAGLYPH,
RAS_STEREO_SIDEBYSIDE,
RAS_STEREO_VINTERLACE,
+ RAS_STEREO_DOME,
RAS_STEREO_MAXSTEREO
};
diff --git a/source/gameengine/Rasterizer/RAS_IRenderTools.h b/source/gameengine/Rasterizer/RAS_IRenderTools.h
index a289ffed492..52f6397cf6c 100644
--- a/source/gameengine/Rasterizer/RAS_IRenderTools.h
+++ b/source/gameengine/Rasterizer/RAS_IRenderTools.h
@@ -58,10 +58,6 @@ public:
RAS_TEXT_PADDED,
RAS_TEXT_MAX
};
- enum RAS_LIGHT_MODE {
- RAS_LIGHT_NONE = -1,
- RAS_LIGHT_OBJECT_LAYER = 0
- };
RAS_IRenderTools(
) :
@@ -135,7 +131,7 @@ public:
void
ProcessLighting(
RAS_IRasterizer *rasty,
- int layer,
+ bool uselights,
const MT_Transform& trans
)=0;
diff --git a/source/gameengine/Rasterizer/RAS_LightObject.h b/source/gameengine/Rasterizer/RAS_LightObject.h
index 4c54857dc39..6b63a891981 100644
--- a/source/gameengine/Rasterizer/RAS_LightObject.h
+++ b/source/gameengine/Rasterizer/RAS_LightObject.h
@@ -40,6 +40,7 @@ struct RAS_LightObject
};
bool m_modified;
int m_layer;
+ void *m_scene;
float m_energy;
float m_distance;
diff --git a/source/gameengine/Rasterizer/RAS_MaterialBucket.cpp b/source/gameengine/Rasterizer/RAS_MaterialBucket.cpp
index d8631c1edf6..6beab28d61f 100644
--- a/source/gameengine/Rasterizer/RAS_MaterialBucket.cpp
+++ b/source/gameengine/Rasterizer/RAS_MaterialBucket.cpp
@@ -60,12 +60,14 @@ RAS_MeshSlot::RAS_MeshSlot()
RAS_MeshSlot::~RAS_MeshSlot()
{
- vector<RAS_DisplayArray*>::iterator it;
+ RAS_DisplayArrayList::iterator it;
+#ifdef USE_SPLIT
Split(true);
while(m_joinedSlots.size())
m_joinedSlots.front()->Split(true);
+#endif
for(it=m_displayArrays.begin(); it!=m_displayArrays.end(); it++) {
(*it)->m_users--;
@@ -81,7 +83,7 @@ RAS_MeshSlot::~RAS_MeshSlot()
RAS_MeshSlot::RAS_MeshSlot(const RAS_MeshSlot& slot)
{
- vector<RAS_DisplayArray*>::iterator it;
+ RAS_DisplayArrayList::iterator it;
m_clientObj = NULL;
m_pDeformer = NULL;
@@ -203,7 +205,7 @@ RAS_DisplayArray *RAS_MeshSlot::CurrentDisplayArray()
void RAS_MeshSlot::SetDisplayArray(int numverts)
{
- vector<RAS_DisplayArray*>::iterator it;
+ RAS_DisplayArrayList::iterator it;
RAS_DisplayArray *darray = NULL;
for(it=m_displayArrays.begin(); it!=m_displayArrays.end(); it++) {
@@ -295,7 +297,7 @@ bool RAS_MeshSlot::Equals(RAS_MeshSlot *target)
bool RAS_MeshSlot::Join(RAS_MeshSlot *target, MT_Scalar distance)
{
- vector<RAS_DisplayArray*>::iterator it;
+ RAS_DisplayArrayList::iterator it;
iterator mit;
size_t i;
@@ -330,6 +332,9 @@ bool RAS_MeshSlot::Join(RAS_MeshSlot *target, MT_Scalar distance)
for(begin(mit); !end(mit); next(mit))
for(i=mit.startvertex; i<mit.endvertex; i++)
mit.vertex[i].Transform(transform, ntransform);
+
+ /* We know we'll need a list at least this big, reserve in advance */
+ target->m_displayArrays.reserve(target->m_displayArrays.size() + m_displayArrays.size());
for(it=m_displayArrays.begin(); it!=m_displayArrays.end(); it++) {
target->m_displayArrays.push_back(*it);
@@ -357,7 +362,7 @@ bool RAS_MeshSlot::Split(bool force)
{
list<RAS_MeshSlot*>::iterator jit;
RAS_MeshSlot *target = m_joinSlot;
- vector<RAS_DisplayArray*>::iterator it, jt;
+ RAS_DisplayArrayList::iterator it, jt;
iterator mit;
size_t i, found0 = 0, found1 = 0;
@@ -425,11 +430,11 @@ bool RAS_MeshSlot::IsCulled()
return true;
if(!m_bCulled)
return false;
-
+#ifdef USE_SPLIT
for(it=m_joinedSlots.begin(); it!=m_joinedSlots.end(); it++)
if(!(*it)->m_bCulled)
return false;
-
+#endif
return true;
}
@@ -513,13 +518,13 @@ list<RAS_MeshSlot>::iterator RAS_MaterialBucket::msEnd()
bool RAS_MaterialBucket::ActivateMaterial(const MT_Transform& cameratrans, RAS_IRasterizer* rasty,
RAS_IRenderTools *rendertools)
{
- if (!rasty->SetMaterial(*m_material))
+ bool uselights;
+
+ if(!rasty->SetMaterial(*m_material))
return false;
- if (m_material->UsesLighting(rasty))
- rendertools->ProcessLighting(rasty, RAS_IRenderTools::RAS_LIGHT_OBJECT_LAYER, cameratrans);
- else
- rendertools->ProcessLighting(rasty, -1, cameratrans);
+ uselights= m_material->UsesLighting(rasty);
+ rendertools->ProcessLighting(rasty, uselights, cameratrans);
return true;
}
diff --git a/source/gameengine/Rasterizer/RAS_MaterialBucket.h b/source/gameengine/Rasterizer/RAS_MaterialBucket.h
index 475f01d549a..f5c8cd3e107 100644
--- a/source/gameengine/Rasterizer/RAS_MaterialBucket.h
+++ b/source/gameengine/Rasterizer/RAS_MaterialBucket.h
@@ -86,9 +86,11 @@ public:
};
/* Entry of a RAS_MeshObject into RAS_MaterialBucket */
+typedef std::vector<RAS_DisplayArray*> RAS_DisplayArrayList;
class RAS_MeshSlot
{
+ friend class RAS_ListRasterizer;
private:
// indices into display arrays
int m_startarray;
@@ -97,7 +99,7 @@ private:
int m_endindex;
int m_startvertex;
int m_endvertex;
- vector<RAS_DisplayArray*> m_displayArrays;
+ RAS_DisplayArrayList m_displayArrays;
// for construction only
RAS_DisplayArray* m_currentArray;
@@ -156,6 +158,7 @@ public:
bool Join(RAS_MeshSlot *target, MT_Scalar distance);
bool Equals(RAS_MeshSlot *target);
bool IsCulled();
+ void SetCulled(bool culled) { m_bCulled = culled; }
};
/* Used by RAS_MeshObject, to point to it's slots in a bucket */
diff --git a/source/gameengine/Rasterizer/RAS_MeshObject.cpp b/source/gameengine/Rasterizer/RAS_MeshObject.cpp
index a907994bf57..162f9a81335 100644
--- a/source/gameengine/Rasterizer/RAS_MeshObject.cpp
+++ b/source/gameengine/Rasterizer/RAS_MeshObject.cpp
@@ -406,7 +406,9 @@ void RAS_MeshObject::UpdateBuckets(void* clientobj,
ms->m_bCulled = culled || !visible;
/* split if necessary */
+#ifdef USE_SPLIT
ms->Split();
+#endif
}
}
diff --git a/source/gameengine/Rasterizer/RAS_MeshObject.h b/source/gameengine/Rasterizer/RAS_MeshObject.h
index 0d35a2f402b..404b7f16a59 100644
--- a/source/gameengine/Rasterizer/RAS_MeshObject.h
+++ b/source/gameengine/Rasterizer/RAS_MeshObject.h
@@ -147,6 +147,16 @@ public:
/* polygon sorting by Z for alpha */
void SortPolygons(RAS_MeshSlot& ms, const MT_Transform &transform);
+
+ bool HasColliderPolygon() {
+ int numpolys= NumPolygons();
+ for (int p=0; p<numpolys; p++)
+ if (m_Polygons[p]->IsCollider())
+ return true;
+
+ return false;
+ }
+
/* for construction to find shared vertices */
struct SharedVertex {
RAS_DisplayArray *m_darray;
diff --git a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.cpp b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.cpp
index 2c4b55ff964..65aadd63a40 100644
--- a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.cpp
+++ b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.cpp
@@ -136,10 +136,10 @@ RAS_ListSlot* RAS_ListRasterizer::FindOrAdd(RAS_MeshSlot& ms)
*/
RAS_ListSlot* localSlot = (RAS_ListSlot*)ms.m_DisplayList;
if(!localSlot) {
- RAS_Lists::iterator it = mLists.find(&ms);
+ RAS_Lists::iterator it = mLists.find(ms.m_displayArrays);
if(it == mLists.end()) {
localSlot = new RAS_ListSlot(this);
- mLists.insert(std::pair<RAS_MeshSlot*, RAS_ListSlot*>(&ms, localSlot));
+ mLists.insert(std::pair<RAS_DisplayArrayList, RAS_ListSlot*>(ms.m_displayArrays, localSlot));
} else {
localSlot = static_cast<RAS_ListSlot*>(it->second->AddRef());
}
diff --git a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.h b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.h
index 96d6d2a995d..653bb43e534 100644
--- a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.h
+++ b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.h
@@ -35,7 +35,7 @@ enum RAS_ListSlotFlags {
LIST_REGEN =64
};
-typedef std::map<class RAS_MeshSlot*, RAS_ListSlot*> RAS_Lists;
+typedef std::map<RAS_DisplayArrayList, RAS_ListSlot*> RAS_Lists;
class RAS_ListRasterizer : public RAS_VAOpenGLRasterizer
{
diff --git a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
index d4d1b73c772..1a9a28916de 100644
--- a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
+++ b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
@@ -327,17 +327,23 @@ void RAS_OpenGLRasterizer::ClearCachingInfo(void)
m_materialCachingInfo = 0;
}
-void RAS_OpenGLRasterizer::FlushDebugLines()
+void RAS_OpenGLRasterizer::FlushDebugLines()
{
-//DrawDebugLines
- glDisable(GL_LIGHTING);
- glDisable(GL_TEXTURE_2D);
+ if(!m_debugLines.size())
+ return;
+
+ // DrawDebugLines
+ GLboolean light, tex;
+
+ light= glIsEnabled(GL_LIGHTING);
+ tex= glIsEnabled(GL_TEXTURE_2D);
+
+ if(light) glDisable(GL_LIGHTING);
+ if(tex) glDisable(GL_TEXTURE_2D);
glBegin(GL_LINES);
for (unsigned int i=0;i<m_debugLines.size();i++)
{
-
-
glColor4f(m_debugLines[i].m_color[0],m_debugLines[i].m_color[1],m_debugLines[i].m_color[2],1.f);
const MT_Scalar* fromPtr = &m_debugLines[i].m_from.x();
const MT_Scalar* toPtr= &m_debugLines[i].m_to.x();
@@ -347,11 +353,10 @@ void RAS_OpenGLRasterizer::FlushDebugLines()
}
glEnd();
- glEnable(GL_LIGHTING);
- glEnable(GL_TEXTURE_2D);
+ if(light) glEnable(GL_LIGHTING);
+ if(tex) glEnable(GL_TEXTURE_2D);
m_debugLines.clear();
-
}
void RAS_OpenGLRasterizer::EndFrame()
@@ -431,7 +436,7 @@ RAS_IRasterizer::StereoMode RAS_OpenGLRasterizer::GetStereoMode()
bool RAS_OpenGLRasterizer::Stereo()
{
- if(m_stereomode == RAS_STEREO_NOSTEREO)
+ if(m_stereomode == RAS_STEREO_NOSTEREO || m_stereomode == RAS_STEREO_DOME)
return false;
else
return true;
@@ -798,7 +803,7 @@ MT_Matrix4x4 RAS_OpenGLRasterizer::GetFrustumMatrix(
double mat[16];
// correction for stereo
- if(m_stereomode != RAS_STEREO_NOSTEREO)
+ if(Stereo())
{
float near_div_focallength;
// next 2 params should be specified on command line and in Blender publisher
@@ -841,7 +846,7 @@ void RAS_OpenGLRasterizer::SetViewMatrix(const MT_Matrix4x4 &mat, const MT_Vecto
m_viewmatrix = mat;
// correction for stereo
- if(m_stereomode != RAS_STEREO_NOSTEREO)
+ if(Stereo())
{
MT_Matrix3x3 camOrientMat3x3(camOrientQuat);
MT_Vector3 unitViewDir(0.0, -1.0, 0.0); // minus y direction, Blender convention
diff --git a/source/gameengine/Rasterizer/RAS_Polygon.cpp b/source/gameengine/Rasterizer/RAS_Polygon.cpp
index 50331d7a664..eacc1285166 100644
--- a/source/gameengine/Rasterizer/RAS_Polygon.cpp
+++ b/source/gameengine/Rasterizer/RAS_Polygon.cpp
@@ -39,7 +39,7 @@ RAS_Polygon::RAS_Polygon(RAS_MaterialBucket* bucket, RAS_DisplayArray *darray, i
m_offset[0]= m_offset[1]= m_offset[2]= m_offset[3]= 0;
m_numvert = numvert;
- m_edgecode = 255;
+// m_edgecode = 255;
m_polyflags = 0;
}
@@ -63,6 +63,7 @@ int RAS_Polygon::GetVertexOffset(int i)
return m_offset[i];
}
+/*
int RAS_Polygon::GetEdgeCode()
{
return m_edgecode;
@@ -71,7 +72,7 @@ int RAS_Polygon::GetEdgeCode()
void RAS_Polygon::SetEdgeCode(int edgecode)
{
m_edgecode = edgecode;
-}
+}*/
bool RAS_Polygon::IsVisible()
@@ -96,6 +97,17 @@ void RAS_Polygon::SetCollider(bool visible)
else m_polyflags &= ~COLLIDER;
}
+bool RAS_Polygon::IsTwoside()
+{
+ return (m_polyflags & TWOSIDE) != 0;
+}
+
+void RAS_Polygon::SetTwoside(bool twoside)
+{
+ if(twoside) m_polyflags |= TWOSIDE;
+ else m_polyflags &= ~TWOSIDE;
+}
+
RAS_MaterialBucket* RAS_Polygon::GetMaterial()
{
return m_bucket;
diff --git a/source/gameengine/Rasterizer/RAS_Polygon.h b/source/gameengine/Rasterizer/RAS_Polygon.h
index 18526ba45f7..41eaa6bdd4a 100644
--- a/source/gameengine/Rasterizer/RAS_Polygon.h
+++ b/source/gameengine/Rasterizer/RAS_Polygon.h
@@ -46,13 +46,18 @@ class RAS_Polygon
unsigned short m_numvert;
/* flags */
+#if 1
+ unsigned short m_polyflags;
+#else
unsigned char m_edgecode;
unsigned char m_polyflags;
-
+#endif
+
public:
enum {
VISIBLE = 1,
- COLLIDER = 2
+ COLLIDER = 2,
+ TWOSIDE = 4
};
RAS_Polygon(RAS_MaterialBucket* bucket, RAS_DisplayArray* darray, int numvert);
@@ -65,8 +70,9 @@ public:
int GetVertexOffset(int i);
// each bit is for a visible edge, starting with bit 1 for the first edge, bit 2 for second etc.
- int GetEdgeCode();
- void SetEdgeCode(int edgecode);
+ // - Not used yet!
+/* int GetEdgeCode();
+ void SetEdgeCode(int edgecode); */
bool IsVisible();
void SetVisible(bool visible);
@@ -74,6 +80,9 @@ public:
bool IsCollider();
void SetCollider(bool collider);
+ bool IsTwoside();
+ void SetTwoside(bool twoside);
+
RAS_MaterialBucket* GetMaterial();
RAS_DisplayArray* GetDisplayArray();
};
diff --git a/source/gameengine/SceneGraph/SG_BBox.cpp b/source/gameengine/SceneGraph/SG_BBox.cpp
index a44262d04f7..66fcc5c7408 100644
--- a/source/gameengine/SceneGraph/SG_BBox.cpp
+++ b/source/gameengine/SceneGraph/SG_BBox.cpp
@@ -188,6 +188,13 @@ void SG_BBox::getaa(MT_Point3 *box, const MT_Transform &world) const
*box++ = max;
}
+void SG_BBox::getmm(MT_Point3 *box, const MT_Transform &world) const
+{
+ const MT_Point3 min(world(m_min)), max(world(m_max));
+ *box++ = min;
+ *box++ = max;
+}
+
void SG_BBox::split(SG_BBox &left, SG_BBox &right) const
{
MT_Scalar sizex = m_max[0] - m_min[0];
diff --git a/source/gameengine/SceneGraph/SG_BBox.h b/source/gameengine/SceneGraph/SG_BBox.h
index b7e8ff65865..c39ad268e25 100644
--- a/source/gameengine/SceneGraph/SG_BBox.h
+++ b/source/gameengine/SceneGraph/SG_BBox.h
@@ -122,6 +122,8 @@ public:
*/
void getaa(MT_Point3 *box, const MT_Transform &world) const;
+ void getmm(MT_Point3 *box, const MT_Transform &world) const;
+
void split(SG_BBox &left, SG_BBox &right) const;
friend class SG_Tree;
diff --git a/source/gameengine/SceneGraph/SG_IObject.cpp b/source/gameengine/SceneGraph/SG_IObject.cpp
index d0bdac5c8f0..fbab4032a10 100644
--- a/source/gameengine/SceneGraph/SG_IObject.cpp
+++ b/source/gameengine/SceneGraph/SG_IObject.cpp
@@ -33,6 +33,8 @@
#include <config.h>
#endif
+SG_Stage gSG_Stage = SG_STAGE_UNKNOWN;
+
SG_IObject::
SG_IObject(
void* clientobj,
diff --git a/source/gameengine/SceneGraph/SG_IObject.h b/source/gameengine/SceneGraph/SG_IObject.h
index 7f6bdfbbb1c..9012b532059 100644
--- a/source/gameengine/SceneGraph/SG_IObject.h
+++ b/source/gameengine/SceneGraph/SG_IObject.h
@@ -31,6 +31,36 @@
#include <vector>
+// used for debugging: stage of the game engine main loop at which a Scenegraph modification is done
+enum SG_Stage
+{
+ SG_STAGE_UNKNOWN = 0,
+ SG_STAGE_NETWORK,
+ SG_STAGE_NETWORK_UPDATE,
+ SG_STAGE_PHYSICS1,
+ SG_STAGE_PHYSICS1_UPDATE,
+ SG_STAGE_CONTROLLER,
+ SG_STAGE_CONTROLLER_UPDATE,
+ SG_STAGE_ACTUATOR,
+ SG_STAGE_ACTUATOR_UPDATE,
+ SG_STAGE_PHYSICS2,
+ SG_STAGE_PHYSICS2_UPDATE,
+ SG_STAGE_SCENE,
+ SG_STAGE_RENDER,
+ SG_STAGE_CONVERTER,
+ SG_STAGE_CULLING,
+ SG_STAGE_MAX
+};
+
+extern SG_Stage gSG_Stage;
+
+inline void SG_SetActiveStage(SG_Stage stage)
+{
+ gSG_Stage = stage;
+}
+
+
+
class SG_Controller;
class SG_IObject;
diff --git a/source/gameengine/SceneGraph/SG_Node.cpp b/source/gameengine/SceneGraph/SG_Node.cpp
index 8de7ac83477..64d9019c86a 100644
--- a/source/gameengine/SceneGraph/SG_Node.cpp
+++ b/source/gameengine/SceneGraph/SG_Node.cpp
@@ -219,18 +219,19 @@ void SG_Node::RemoveChild(SG_Node* child)
-void SG_Node::UpdateWorldData(double time)
+void SG_Node::UpdateWorldData(double time, bool parentUpdated)
{
//if (!GetSGParent())
// return;
- if (UpdateSpatialData(GetSGParent(),time))
+ if (UpdateSpatialData(GetSGParent(),time,parentUpdated))
+ // to update the
ActivateUpdateTransformCallback();
// update children's worlddata
for (NodeList::iterator it = m_children.begin();it!=m_children.end();++it)
{
- (*it)->UpdateWorldData(time);
+ (*it)->UpdateWorldData(time, parentUpdated);
}
}
diff --git a/source/gameengine/SceneGraph/SG_Node.h b/source/gameengine/SceneGraph/SG_Node.h
index ffaaad861e2..29943653a81 100644
--- a/source/gameengine/SceneGraph/SG_Node.h
+++ b/source/gameengine/SceneGraph/SG_Node.h
@@ -175,7 +175,8 @@ public:
void
UpdateWorldData(
- double time
+ double time,
+ bool parentUpdated=false
);
/**
diff --git a/source/gameengine/SceneGraph/SG_ParentRelation.h b/source/gameengine/SceneGraph/SG_ParentRelation.h
index 6507cb98519..8f45df09b27 100644
--- a/source/gameengine/SceneGraph/SG_ParentRelation.h
+++ b/source/gameengine/SceneGraph/SG_ParentRelation.h
@@ -69,7 +69,8 @@ public :
bool
UpdateChildCoordinates(
SG_Spatial * child,
- const SG_Spatial * parent
+ const SG_Spatial * parent,
+ bool& parentUpdated
) = 0;
virtual
diff --git a/source/gameengine/SceneGraph/SG_Spatial.cpp b/source/gameengine/SceneGraph/SG_Spatial.cpp
index 99aeb3e72ee..2f3176816c6 100644
--- a/source/gameengine/SceneGraph/SG_Spatial.cpp
+++ b/source/gameengine/SceneGraph/SG_Spatial.cpp
@@ -55,7 +55,8 @@ SG_Spatial(
m_parent_relation (NULL),
m_bbox(MT_Point3(-1.0, -1.0, -1.0), MT_Point3(1.0, 1.0, 1.0)),
- m_radius(1.0)
+ m_radius(1.0),
+ m_modified(true)
{
}
@@ -101,6 +102,7 @@ SetParentRelation(
){
delete (m_parent_relation);
m_parent_relation = relation;
+ m_modified = true;
}
@@ -114,7 +116,8 @@ SetParentRelation(
SG_Spatial::
UpdateSpatialData(
const SG_Spatial *parent,
- double time
+ double time,
+ bool& parentUpdated
){
bool bComputesWorldTransform = false;
@@ -135,14 +138,14 @@ UpdateSpatialData(
// our world coordinates.
if (!bComputesWorldTransform)
- bComputesWorldTransform = ComputeWorldTransforms(parent);
+ bComputesWorldTransform = ComputeWorldTransforms(parent, parentUpdated);
return bComputesWorldTransform;
}
-bool SG_Spatial::ComputeWorldTransforms(const SG_Spatial *parent)
+bool SG_Spatial::ComputeWorldTransforms(const SG_Spatial *parent, bool& parentUpdated)
{
- return m_parent_relation->UpdateChildCoordinates(this,parent);
+ return m_parent_relation->UpdateChildCoordinates(this,parent,parentUpdated);
}
/**
@@ -166,6 +169,7 @@ RelativeTranslate(
m_localPosition += trans;
}
}
+ m_modified = true;
}
void
@@ -174,6 +178,7 @@ SetLocalPosition(
const MT_Point3& trans
){
m_localPosition = trans;
+ m_modified = true;
}
void
@@ -194,6 +199,7 @@ RelativeScale(
const MT_Vector3& scale
){
m_localScaling = m_localScaling * scale;
+ m_modified = true;
}
void
@@ -202,6 +208,7 @@ SetLocalScale(
const MT_Vector3& scale
){
m_localScaling = scale;
+ m_modified = true;
}
@@ -229,6 +236,7 @@ RelativeRotate(
rot
:
(GetWorldOrientation().inverse() * rot * GetWorldOrientation()));
+ m_modified = true;
}
void
@@ -236,6 +244,7 @@ SG_Spatial::
SetLocalOrientation(const MT_Matrix3x3& rot)
{
m_localRotation = rot;
+ m_modified = true;
}
diff --git a/source/gameengine/SceneGraph/SG_Spatial.h b/source/gameengine/SceneGraph/SG_Spatial.h
index 6ccec2aa9c1..c2ed80d21b2 100644
--- a/source/gameengine/SceneGraph/SG_Spatial.h
+++ b/source/gameengine/SceneGraph/SG_Spatial.h
@@ -61,7 +61,7 @@ protected:
SG_BBox m_bbox;
MT_Scalar m_radius;
-
+ bool m_modified;
public:
@@ -180,7 +180,7 @@ public:
MT_Transform GetWorldTransform() const;
- bool ComputeWorldTransforms( const SG_Spatial *parent);
+ bool ComputeWorldTransforms(const SG_Spatial *parent, bool& parentUpdated);
/**
* Bounding box functions.
@@ -193,9 +193,14 @@ public:
MT_Scalar Radius() const { return m_radius; }
void SetRadius(MT_Scalar radius) { m_radius = radius; }
+ bool IsModified() { return m_modified; }
protected:
friend class SG_Controller;
+ friend class KX_BoneParentRelation;
+ friend class KX_VertexParentRelation;
+ friend class KX_SlowParentRelation;
+ friend class KX_NormalParentRelation;
/**
* Protected constructor this class is not
@@ -223,8 +228,10 @@ protected:
bool
UpdateSpatialData(
const SG_Spatial *parent,
- double time
+ double time,
+ bool& parentUpdated
);
+ void SetModified(bool modified) { m_modified = modified; }
};
diff --git a/source/gameengine/VideoTexture/FilterNormal.cpp b/source/gameengine/VideoTexture/FilterNormal.cpp
index 03a79c1c8ce..a7266967efb 100644
--- a/source/gameengine/VideoTexture/FilterNormal.cpp
+++ b/source/gameengine/VideoTexture/FilterNormal.cpp
@@ -74,7 +74,7 @@ static int setColor (PyFilter * self, PyObject * value, void * closure)
// check validity of parameter
if (value == NULL || !PyInt_Check(value))
{
- PyErr_SetString(PyExc_TypeError, "The value must be a int");
+ PyErr_SetString(PyExc_TypeError, "filt.colorIdx = int: VideoTexture.FilterNormal, expected the value must be a int");
return -1;
}
// set color index
@@ -94,15 +94,20 @@ static PyObject * getDepth (PyFilter * self, void * closure)
static int setDepth (PyFilter * self, PyObject * value, void * closure)
{
// check validity of parameter
- if (value == NULL || !PyFloat_Check(value))
+ if (value)
{
- PyErr_SetString(PyExc_TypeError, "The value must be a float");
- return -1;
+ float depth= (float)PyFloat_AsDouble(value);
+ if ((depth==-1 && PyErr_Occurred()) == 0) /* no error converting to a float? */
+ {
+ // set depth
+ getFilter(self)->setDepth(depth);
+ // success
+ return 0;
+ }
}
- // set depth
- getFilter(self)->setDepth(float(PyFloat_AsDouble(value)));
- // success
- return 0;
+
+ PyErr_SetString(PyExc_TypeError, "filt.depth = float: VideoTexture.FilterNormal, expected the value must be a float");
+ return -1;
}
diff --git a/source/gameengine/VideoTexture/FilterSource.h b/source/gameengine/VideoTexture/FilterSource.h
index 6385ed5108f..254e0a02679 100644
--- a/source/gameengine/VideoTexture/FilterSource.h
+++ b/source/gameengine/VideoTexture/FilterSource.h
@@ -225,7 +225,7 @@ protected:
// otherwise if only vertical interpolation is needed
}
}
- else if ((y & 1) == 1)
+ else if ((y & 1) == 1) {
// if this pixel is on the edge
if (isEdge(x, y, size))
{
@@ -239,6 +239,7 @@ protected:
d = interpolV(m_buffU + offset) - 128;
e = interpolV(m_buffV + offset) - 128;
}
+ }
// convert to RGB
// R = clip(( 298 * C + 409 * E + 128) >> 8)
// G = clip(( 298 * C - 100 * D - 208 * E + 128) >> 8)
diff --git a/source/gameengine/VideoTexture/ImageRender.cpp b/source/gameengine/VideoTexture/ImageRender.cpp
index 58697ed3cc7..09c3c22f258 100644
--- a/source/gameengine/VideoTexture/ImageRender.cpp
+++ b/source/gameengine/VideoTexture/ImageRender.cpp
@@ -28,7 +28,7 @@ http://www.gnu.org/copyleft/lesser.txt.
#include <math.h>
-#include <BIF_gl.h>
+#include "GL/glew.h"
#include "KX_PythonInit.h"
#include "DNA_scene_types.h"
@@ -249,7 +249,7 @@ void ImageRender::Render()
// restore the stereo mode now that the matrix is computed
m_rasterizer->SetStereoMode(stereomode);
- // do not update the mesh, we don't want to do it more than once per frame
+ // do not update the mesh transform, we don't want to do it more than once per frame
//m_scene->UpdateMeshTransformations();
m_scene->CalculateVisibleMeshes(m_rasterizer,m_camera);
@@ -434,26 +434,35 @@ static int ImageMirror_init (PyObject * pySelf, PyObject * args, PyObject * kwds
{
// get scene pointer
KX_Scene * scenePtr (NULL);
- if (scene != NULL && PyObject_TypeCheck(scene, &KX_Scene::Type))
- scenePtr = static_cast<KX_Scene*>(scene);
- else
+ if (scene != NULL && PyObject_TypeCheck(scene, &KX_Scene::Type))
+ scenePtr = static_cast<KX_Scene*>BGE_PROXY_REF(scene);
+ else
THRWEXCP(SceneInvalid, S_OK);
-
+
+ if(scenePtr==NULL) /* incase the python proxy reference is invalid */
+ THRWEXCP(SceneInvalid, S_OK);
+
// get observer pointer
KX_GameObject * observerPtr (NULL);
if (observer != NULL && PyObject_TypeCheck(observer, &KX_GameObject::Type))
- observerPtr = static_cast<KX_GameObject*>(observer);
+ observerPtr = static_cast<KX_GameObject*>BGE_PROXY_REF(observer);
else if (observer != NULL && PyObject_TypeCheck(observer, &KX_Camera::Type))
- observerPtr = static_cast<KX_Camera*>(observer);
+ observerPtr = static_cast<KX_Camera*>BGE_PROXY_REF(observer);
else
THRWEXCP(ObserverInvalid, S_OK);
+
+ if(observerPtr==NULL) /* incase the python proxy reference is invalid */
+ THRWEXCP(ObserverInvalid, S_OK);
// get mirror pointer
KX_GameObject * mirrorPtr (NULL);
if (mirror != NULL && PyObject_TypeCheck(mirror, &KX_GameObject::Type))
- mirrorPtr = static_cast<KX_GameObject*>(mirror);
+ mirrorPtr = static_cast<KX_GameObject*>BGE_PROXY_REF(mirror);
else
THRWEXCP(MirrorInvalid, S_OK);
+
+ if(mirrorPtr==NULL) /* incase the python proxy reference is invalid */
+ THRWEXCP(MirrorInvalid, S_OK);
// locate the material in the mirror
RAS_IPolyMaterial * material = getMaterial(mirror, materialID);
diff --git a/source/gameengine/VideoTexture/ImageViewport.cpp b/source/gameengine/VideoTexture/ImageViewport.cpp
index 4c2c81e2208..a4e36b5948c 100644
--- a/source/gameengine/VideoTexture/ImageViewport.cpp
+++ b/source/gameengine/VideoTexture/ImageViewport.cpp
@@ -25,7 +25,7 @@ http://www.gnu.org/copyleft/lesser.txt.
#include <PyObjectPlus.h>
#include <structmember.h>
-#include <BIF_gl.h>
+#include "GL/glew.h"
#include "Texture.h"
#include "ImageBase.h"
diff --git a/source/gameengine/VideoTexture/Texture.cpp b/source/gameengine/VideoTexture/Texture.cpp
index 12d4e79ad89..3533cee0f7f 100644
--- a/source/gameengine/VideoTexture/Texture.cpp
+++ b/source/gameengine/VideoTexture/Texture.cpp
@@ -45,7 +45,7 @@ http://www.gnu.org/copyleft/lesser.txt.
#include "Exception.h"
#include <memory.h>
-#include <BIF_gl.h>
+#include "GL/glew.h"
// macro for exception handling and logging
diff --git a/source/gameengine/VideoTexture/VideoBase.cpp b/source/gameengine/VideoTexture/VideoBase.cpp
index 10117c3af9e..3c703d75cda 100644
--- a/source/gameengine/VideoTexture/VideoBase.cpp
+++ b/source/gameengine/VideoTexture/VideoBase.cpp
@@ -22,7 +22,7 @@ http://www.gnu.org/copyleft/lesser.txt.
#if defined WIN32
#define WINDOWS_LEAN_AND_MEAN
-#include <Windows.h>
+#include <windows.h>
#endif
#include "VideoBase.h"
diff --git a/source/gameengine/VideoTexture/VideoFFmpeg.h b/source/gameengine/VideoTexture/VideoFFmpeg.h
index 51ce2c4eebe..51f1067c466 100644
--- a/source/gameengine/VideoTexture/VideoFFmpeg.h
+++ b/source/gameengine/VideoTexture/VideoFFmpeg.h
@@ -25,10 +25,10 @@ http://www.gnu.org/copyleft/lesser.txt.
#ifdef WITH_FFMPEG
extern "C" {
#include <pthread.h>
-#include <ffmpeg/avformat.h>
-#include <ffmpeg/avcodec.h>
-#include <ffmpeg/rational.h>
-#include <ffmpeg/swscale.h>
+#include <libavformat/avformat.h>
+#include <libavcodec/avcodec.h>
+#include <libavutil/rational.h>
+#include <libswscale/swscale.h>
#include "DNA_listBase.h"
#include "BLI_threads.h"
#include "BLI_blenlib.h"
diff --git a/source/gameengine/VideoTexture/blendVideoTex.cpp b/source/gameengine/VideoTexture/blendVideoTex.cpp
index ec066811a52..c11e7fffecd 100644
--- a/source/gameengine/VideoTexture/blendVideoTex.cpp
+++ b/source/gameengine/VideoTexture/blendVideoTex.cpp
@@ -1,6 +1,6 @@
/* $Id$
-----------------------------------------------------------------------------
-This source file is part of VideoTexure library
+This source file is part of VideoTexture library
Copyright (c) 2006 The Zdeno Ash Miklas
@@ -49,14 +49,14 @@ static PyObject * getMaterialID (PyObject *self, PyObject *args)
char * matName;
// get parameters
- if (!PyArg_ParseTuple(args, "Os", &obj, &matName))
+ if (!PyArg_ParseTuple(args, "Os:materialID", &obj, &matName))
return NULL;
// get material id
short matID = getMaterialID(obj, matName);
// if material was not found, report errot
if (matID < 0)
{
- PyErr_SetString(PyExc_RuntimeError, "object doesn't have material with given name");
+ PyErr_SetString(PyExc_RuntimeError, "VideoTexture.materialID(ob, string): Object doesn't have material with given name");
return NULL;
}
// return material ID
@@ -67,7 +67,7 @@ static PyObject * getMaterialID (PyObject *self, PyObject *args)
// get last error description
static PyObject * getLastError (PyObject *self, PyObject *args)
{
- return Py_BuildValue("s", Exception::m_lastError.c_str());
+ return PyString_FromString(Exception::m_lastError.c_str());
}
// set log file
@@ -89,7 +89,7 @@ static PyObject * imageToArray (PyObject * self, PyObject *args)
if (!PyArg_ParseTuple(args, "O", &pyImg) || !pyImageTypes.in(pyImg->ob_type))
{
// if object is incorect, report error
- PyErr_SetString(PyExc_TypeError, "The value must be a image source object");
+ PyErr_SetString(PyExc_TypeError, "VideoTexture.imageToArray(image): The value must be a image source object");
return NULL;
}
// get image structure
diff --git a/source/nan_compile.mk b/source/nan_compile.mk
index a2fcfad3a9e..70aee0bd416 100644
--- a/source/nan_compile.mk
+++ b/source/nan_compile.mk
@@ -49,6 +49,11 @@ else
CPPFLAGS += -DNO_KETSJI
endif
+ifeq ($(BF_PROFILE), true)
+ CFLAGS += -pg
+ CCFLAGS += -pg
+endif
+
ifeq ($(WITH_BF_OPENMP), true)
CFLAGS += -fopenmp
CCFLAGS += -fopenmp
diff --git a/source/nan_definitions.mk b/source/nan_definitions.mk
index 60fc56408b2..ba2f8f04233 100644
--- a/source/nan_definitions.mk
+++ b/source/nan_definitions.mk
@@ -88,6 +88,7 @@ else
export NAN_SOLID ?= $(LCGDIR)/solid
export NAN_QHULL ?= $(LCGDIR)/qhull
endif
+ export BF_PROFILE ?= false
export NAN_USE_BULLET ?= true
export NAN_BULLET2 ?= $(LCGDIR)/bullet2
export NAN_SUMO ?= $(SRCHOME)/gameengine/Physics/Sumo
@@ -105,78 +106,23 @@ endif
export NAN_ACTION ?= $(LCGDIR)/action
export NAN_GHOST ?= $(LCGDIR)/ghost
export NAN_TEST_VERBOSITY ?= 1
- export NAN_BMFONT ?= $(LCGDIR)/bmfont
export NAN_OPENNL ?= $(LCGDIR)/opennl
export NAN_ELBEEM ?= $(LCGDIR)/elbeem
export NAN_SUPERLU ?= $(LCGDIR)/superlu
export NAN_GLEW ?= $(LCGDIR)/glew
ifeq ($(FREE_WINDOWS), true)
- export NAN_FTGL ?= $(LCGDIR)/gcc/ftgl
export NAN_FFMPEG ?= $(LCGDIR)/gcc/ffmpeg
export NAN_FFMPEGLIBS ?= $(NAN_FFMPEG)/lib/libavformat.a $(NAN_FFMPEG)/lib/libavutil.a $(NAN_FFMPEG)/lib/libavcodec.a $(NAN_FFMPEG)/lib/libavdevice.a
- export NAN_FFMPEGCFLAGS ?= -I$(NAN_FFMPEG)/include -I$(NANBLENDERHOME)/extern/ffmpeg
else
- export NAN_FTGL ?= $(LCGDIR)/ftgl
export NAN_FFMPEG ?= $(LCGDIR)/ffmpeg
export NAN_FFMPEGLIBS ?= $(NAN_FFMPEG)/lib/libavformat.a $(NAN_FFMPEG)/lib/libavcodec.a $(NAN_FFMPEG)/lib/libswscale.a $(NAN_FFMPEG)/lib/libavutil.a $(NAN_FFMPEG)/lib/libavdevice.a
- export NAN_FFMPEGCFLAGS ?= -I$(NAN_FFMPEG)/include -I$(NANBLENDERHOME)/extern/ffmpeg
endif
+ export NAN_FFMPEGCFLAGS ?= -I$(NAN_FFMPEG)/include -I$(NANBLENDERHOME)/extern/ffmpeg
export WITH_OPENEXR ?= true
export WITH_DDS ?= true
export WITH_OPENJPEG ?= true
- ifeq ($(OS),windows)
- export NAN_WINTAB ?= $(LCGDIR)/wintab
- ifeq ($(FREE_WINDOWS), true)
- export NAN_PTHREADS ?= $(LCGDIR)/pthreads
- export NAN_OPENEXR ?= $(LCGDIR)/gcc/openexr
- export NAN_OPENEXR_LIBS ?= $(NAN_OPENEXR)/lib/libIlmImf.a $(NAN_OPENEXR)/lib/libHalf.a $(NAN_OPENEXR)/lib/libIex.a
- export NAN_OPENEXR_INC ?= -I$(NAN_OPENEXR)/include -I$(NAN_OPENEXR)/include/OpenEXR
- else
- export NAN_OPENEXR ?= $(LCGDIR)/openexr
- export NAN_OPENEXR_LIBS ?= $(NAN_OPENEXR)/lib/IlmImf.lib $(NAN_OPENEXR)/lib/Half.lib $(NAN_OPENEXR)/lib/Iex.lib
- export NAN_OPENEXR_INC ?= -I$(NAN_OPENEXR)/include -I$(NAN_OPENEXR)/include/IlmImf -I$(NAN_OPENEXR)/include/Imath -I$(NAN_OPENEXR)/include/Iex
- endif
- else
- ifeq ($(OS),darwin)
- export NAN_OPENEXR ?= $(LCGDIR)/openexr
- ifeq ($(CPU),powerpc)
- export NAN_OPENEXR_LIBS ?= $(NAN_OPENEXR)/lib/libIlmImf.a $(NAN_OPENEXR)/lib/libHalf.a $(NAN_OPENEXR)/lib/libIex.a
- else
- export NAN_OPENEXR_LIBS ?= $(NAN_OPENEXR)/lib/libIlmImf.a $(NAN_OPENEXR)/lib/libHalf.a $(NAN_OPENEXR)/lib/libIex.a $(NAN_OPENEXR)/lib/libIlmThread.a
- endif
- else
- ifeq ($(OS),linux)
- ifeq ($(WITH_OPENEXR), true)
- export NAN_OPENEXR?=$(shell pkg-config --variable=prefix OpenEXR )
- export NAN_OPENEXR_INC?=$(shell pkg-config --cflags OpenEXR )
- export NAN_OPENEXR_LIBS?=$(addprefix ${NAN_OPENEXR}/lib/lib,$(addsuffix .a,$(shell pkg-config --libs-only-l OpenEXR | sed -s "s/-l//g" )))
- endif
- else
- ifeq ($(OS), solaris)
- # this only exists at the moment for i386-64 CPU Types at the moment
- export NAN_OPENEXR ?= $(LCGDIR)/openexr
- export NAN_OPENEXR_LIBS ?= $(NAN_OPENEXR)/lib/libIlmImf.a $(NAN_OPENEXR)/lib/libHalf.a $(NAN_OPENEXR)/lib/libIex.a $(NAN_OPENEXR)/lib/libIlmThread.a -lrt
- else
- ifeq ($(OS), irix)
- ifeq ($(IRIX_USE_GCC), true)
- export NAN_OPENEXR ?= $(LCGDIR)/openexr/gcc
- else
- export NAN_OPENEXR ?= $(LCGDIR)/openexr
- endif
- endif
- export NAN_OPENEXR_INC ?= -I$(NAN_OPENEXR)/include -I$(NAN_OPENEXR)/include/OpenEXR
- export NAN_OPENEXR_LIBS ?= $(NAN_OPENEXR)/lib/libIlmImf.a $(NAN_OPENEXR)/lib/libHalf.a $(NAN_OPENEXR)/lib/libIex.a $(NAN_OPENEXR)/lib/libIlmThread.a
- endif
- endif
- endif
- ifeq ($(WITH_OPENEXR), true)
- export NAN_OPENEXR_INC ?= -I$(NAN_OPENEXR)/include -I$(NAN_OPENEXR)/include/OpenEXR
- endif
-
- endif
- # Platform Dependent settings go below:
ifeq ($(NAN_USE_FFMPEG_CONFIG), true)
export NAN_FFMPEG ?= $(shell ffmpeg-config --prefix)
@@ -184,6 +130,7 @@ endif
export NAN_FFMPEGCFLAGS ?= $(shell ffmpeg-config --cflags)
endif
+ # Platform Dependent settings go below:
ifeq ($(OS),beos)
export ID = $(USER)
@@ -193,7 +140,6 @@ endif
export NAN_PYTHON_BINARY ?= $(NAN_PYTHON)/bin/python$(NAN_PYTHON_VERSION)
export NAN_PYTHON_LIB ?= $(NAN_PYTHON)/lib/python$(NAN_PYTHON_VERSION)/config/libpython$(NAN_PYTHON_VERSION).a
export NAN_OPENAL ?= $(LCGDIR)/openal
- export NAN_FMOD ?= $(LCGDIR)/fmod
export NAN_JPEG ?= $(LCGDIR)/jpeg
export NAN_PNG ?= $(LCGDIR)/png
export NAN_TIFF ?= $(LCGDIR)/tiff
@@ -205,7 +151,7 @@ endif
export NAN_FREETYPE ?= $(LCGDIR)/freetype
export NAN_GETTEXT ?= $(LCGDIR)/gettext
export NAN_SDL ?= $(shell sdl-config --prefix)
- export NAN_SDLLIBS ?= $(shell sdl-config --libs)
+ export NAN_SDLLIBS ?= $(shell sdl-config --libs)
export NAN_SDLCFLAGS ?= $(shell sdl-config --cflags)
# Uncomment the following line to use Mozilla inplace of netscape
@@ -223,23 +169,20 @@ endif
# l10n
#export INTERNATIONAL ?= true
- # enable freetype2 support for text objects
- #export WITH_FREETYPE2 ?= true
-
else
ifeq ($(OS),darwin)
export ID = $(shell whoami)
export HOST = $(shell hostname -s)
- export PY_FRAMEWORK = 1
+ export PY_FRAMEWORK ?= 1
ifdef PY_FRAMEWORK
export NAN_PYTHON ?= /System/Library/Frameworks/Python.framework/Versions/2.3
export NAN_PYTHON_VERSION ?= 2.3
export NAN_PYTHON_BINARY ?= $(NAN_PYTHON)/bin/python$(NAN_PYTHON_VERSION)
- export NAN_PYTHON_LIB ?= -framework Python
- else
+ export NAN_PYTHON_LIB ?= -framework Python
+ else
export NAN_PYTHON ?= /sw
export NAN_PYTHON_VERSION ?= 2.3
export NAN_PYTHON_BINARY ?= $(NAN_PYTHON)/bin/python$(NAN_PYTHON_VERSION)
@@ -247,7 +190,6 @@ endif
endif
export NAN_OPENAL ?= $(LCGDIR)/openal
- export NAN_FMOD ?= $(LCGDIR)/fmod
export NAN_JPEG ?= $(LCGDIR)/jpeg
export NAN_PNG ?= $(LCGDIR)/png
export NAN_TIFF ?= $(LCGDIR)/tiff
@@ -266,10 +208,18 @@ endif
export NAN_SDLCFLAGS ?= -I$(NAN_SDL)/include
export NAN_SDLLIBS ?= $(NAN_SDL)/lib/libSDL.a -framework Cocoa -framework IOKit
+ export NAN_OPENEXR ?= $(LCGDIR)/openexr
+ export NAN_OPENEXR_INC ?= -I$(NAN_OPENEXR)/include -I$(NAN_OPENEXR)/include/OpenEXR
+ ifeq ($(CPU),powerpc)
+ export NAN_OPENEXR_LIBS ?= $(NAN_OPENEXR)/lib/libIlmImf.a $(NAN_OPENEXR)/lib/libHalf.a $(NAN_OPENEXR)/lib/libIex.a
+ else
+ export NAN_OPENEXR_LIBS ?= $(NAN_OPENEXR)/lib/libIlmImf.a $(NAN_OPENEXR)/lib/libHalf.a $(NAN_OPENEXR)/lib/libIex.a $(NAN_OPENEXR)/lib/libIlmThread.a
+ endif
+
# export NAN_NO_KETSJI=true
ifeq ($(CPU), i386)
- export NAN_NO_OPENAL=true
+ export NAN_NO_OPENAL=true
endif
# Uncomment the following line to use Mozilla inplace of netscape
@@ -290,9 +240,6 @@ endif
# enable l10n
export INTERNATIONAL ?= true
- # enable freetype2 support for text objects
- export WITH_FREETYPE2 ?= true
-
else
ifeq ($(OS),freebsd)
@@ -305,7 +252,6 @@ endif
export NAN_PYTHON_BINARY ?= $(NAN_PYTHON)/bin/python$(NAN_PYTHON_VERSION)
export NAN_PYTHON_LIB ?= $(NAN_PYTHON)/lib/python$(NAN_PYTHON_VERSION)/config/libpython$(NAN_PYTHON_VERSION).a
export NAN_OPENAL ?= /usr/local
- export NAN_FMOD ?= $(LCGDIR)/fmod
export NAN_JPEG ?= /usr/local
export NAN_PNG ?= /usr/local
export NAN_TIFF ?= /usr/local
@@ -335,9 +281,6 @@ endif
# enable l10n
# export INTERNATIONAL ?= true
- # enable freetype2 support for text objects
- # export WITH_FREETYPE2 ?= true
-
else
ifeq ($(OS),irix)
@@ -350,7 +293,6 @@ endif
export NAN_PYTHON_BINARY ?= $(NAN_PYTHON)/bin/python$(NAN_PYTHON_VERSION)
export NAN_PYTHON_LIB ?= $(NAN_PYTHON)/lib/python$(NAN_PYTHON_VERSION)/config/libpython$(NAN_PYTHON_VERSION).a -lpthread
export NAN_OPENAL ?= $(LCGDIR)/openal
- export NAN_FMOD ?= $(LCGDIR)/fmod
export NAN_JPEG ?= $(LCGDIR)/jpeg
export NAN_PNG ?= $(LCGDIR)/png
export NAN_TIFF ?= $(LCGDIR)/tiff
@@ -369,7 +311,15 @@ endif
export NAN_FFMPEG ?= $(LCGDIR)/ffmpeg
export NAN_FFMPEGLIBS = $(NAN_FFMPEG)/lib/libavformat.a $(NAN_FFMPEG)/lib/libavcodec.a $(NAN_FFMPEG)/lib/libswscale.a $(NAN_FFMPEG)/lib/libavutil.a $(NAN_FFMPEG)/lib/libavdevice.a $(NAN_FFMPEG)/lib/libogg.a $(NAN_FFMPEG)/lib/libfaad.a $(NAN_FFMPEG)/lib/libmp3lame.a $(NAN_FFMPEG)/lib/libvorbis.a $(NAN_FFMPEG)/lib/libx264.a $(NAN_FFMPEG)/lib/libfaac.a $(NAN_ZLIB)/lib/libz.a
export NAN_FFMPEGCFLAGS ?= -I$(NAN_FFMPEG)/include -I$(NANBLENDERHOME)/extern/ffmpeg
-
+
+ ifeq ($(IRIX_USE_GCC), true)
+ export NAN_OPENEXR ?= $(LCGDIR)/openexr/gcc
+ else
+ export NAN_OPENEXR ?= $(LCGDIR)/openexr
+ endif
+ export NAN_OPENEXR_INC ?= -I$(NAN_OPENEXR)/include -I$(NAN_OPENEXR)/include/OpenEXR
+ export NAN_OPENEXR_LIBS ?= $(NAN_OPENEXR)/lib/libIlmImf.a $(NAN_OPENEXR)/lib/libHalf.a $(NAN_OPENEXR)/lib/libIex.a $(NAN_OPENEXR)/lib/libIlmThread.a
+
# Uncomment the following line to use Mozilla inplace of netscape
# CPPFLAGS +=-DMOZ_NOT_NET
# Location of MOZILLA/Netscape header files...
@@ -385,9 +335,6 @@ endif
# enable l10n
export INTERNATIONAL ?= true
- # enable freetype2 support for text objects
- export WITH_FREETYPE2 ?= true
-
else
ifeq ($(OS),linux)
@@ -400,7 +347,6 @@ endif
export NAN_PYTHON_BINARY ?= $(NAN_PYTHON)/bin/python$(NAN_PYTHON_VERSION)
export NAN_PYTHON_LIB ?= $(NAN_PYTHON)/lib/python$(NAN_PYTHON_VERSION)/config/libpython$(NAN_PYTHON_VERSION).a
export NAN_OPENAL ?= /usr
- export NAN_FMOD ?= $(LCGDIR)/fmod
export NAN_JPEG ?= /usr
export NAN_PNG ?= /usr
export NAN_TIFF ?= /usr
@@ -421,6 +367,12 @@ ifneq ($(NAN_USE_FFMPEG_CONFIG), true)
export NAN_FFMPEGCFLAGS ?= -I$(NAN_FFMPEG)/include
endif
+ ifeq ($(WITH_OPENEXR), true)
+ export NAN_OPENEXR ?= $(shell pkg-config --variable=prefix OpenEXR )
+ export NAN_OPENEXR_INC ?= $(shell pkg-config --cflags OpenEXR )
+ export NAN_OPENEXR_LIBS ?= $(addprefix ${NAN_OPENEXR}/lib/lib,$(addsuffix .a,$(shell pkg-config --libs-only-l OpenEXR | sed -s "s/-l//g" )))
+ endif
+
# Uncomment the following line to use Mozilla inplace of netscape
export CPPFLAGS += -DMOZ_NOT_NET
# Location of MOZILLA/Netscape header files...
@@ -436,14 +388,11 @@ endif
# l10n
export INTERNATIONAL ?= true
- # enable freetype2 support for text objects
- export WITH_FREETYPE2 ?= true
-
export WITH_BINRELOC ?= true
# enable ffmpeg support
ifndef NAN_NO_FFMPEG
- export WITH_FFMPEG ?= true
+ export WITH_FFMPEG ?= true
endif
else
@@ -458,7 +407,6 @@ endif
export NAN_PYTHON_BINARY ?= $(NAN_PYTHON)/bin/python$(NAN_PYTHON_VERSION)
export NAN_PYTHON_LIB ?= $(NAN_PYTHON)/lib/python$(NAN_PYTHON_VERSION)/config/libpython$(NAN_PYTHON_VERSION).a
export NAN_OPENAL ?= $(LCGDIR)/openal
- export NAN_FMOD ?= $(LCGDIR)/fmod
export NAN_JPEG ?= $(LCGDIR)/jpeg
export NAN_PNG ?= $(LCGDIR)/png
export NAN_TIFF ?= $(LCGDIR)/tiff
@@ -488,9 +436,6 @@ endif
# l10n
#export INTERNATIONAL ?= true
- # enable freetype2 support for text objects
- #export WITH_FREETYPE2 ?= true
-
else
ifeq ($(OS),solaris)
@@ -500,8 +445,7 @@ endif
export NAN_PYTHON_VERSION ?= 2.5
export NAN_PYTHON_BINARY ?= $(NAN_PYTHON)/bin/python$(NAN_PYTHON_VERSION)
export NAN_PYTHON_LIB ?= $(NAN_PYTHON)/lib/python$(NAN_PYTHON_VERSION)/config/libpython$(NAN_PYTHON_VERSION).a
- export NAN_OPENAL ?= $(LCGDIR)/openal
- export NAN_FMOD ?= $(LCGDIR)/fmod
+ export NAN_OPENAL ?= $(LCGDIR)/openal
export NAN_JPEG ?= $(LCGDIR)/jpeg
export NAN_PNG ?= $(LCGDIR)/png
export NAN_TIFF ?= /usr
@@ -517,6 +461,11 @@ endif
export NAN_SDLCFLAGS ?= -I$(NAN_SDL)/include/SDL
export NAN_SDLLIBS ?= $(NAN_SDL)/lib/libSDL.a
+ # this only exists at the moment for i386-64 CPU Types at the moment
+ export NAN_OPENEXR ?= $(LCGDIR)/openexr
+ export NAN_OPENEXR_INC ?= -I$(NAN_OPENEXR)/include -I$(NAN_OPENEXR)/include/OpenEXR
+ export NAN_OPENEXR_LIBS ?= $(NAN_OPENEXR)/lib/libIlmImf.a $(NAN_OPENEXR)/lib/libHalf.a $(NAN_OPENEXR)/lib/libIex.a $(NAN_OPENEXR)/lib/libIlmThread.a -lrt
+
# Uncomment the following line to use Mozilla inplace of netscape
# CPPFLAGS +=-DMOZ_NOT_NET
# Location of MOZILLA/Netscape header files...
@@ -532,9 +481,6 @@ endif
# l10n
#export INTERNATIONAL ?= true
- # enable freetype2 support for text objects
- #export WITH_FREETYPE2 ?= true
-
else
ifeq ($(OS),windows)
@@ -542,23 +488,7 @@ endif
export NAN_PYTHON ?= $(LCGDIR)/python
export NAN_ICONV ?= $(LCGDIR)/iconv
export NAN_PYTHON_VERSION ?= 2.5
- ifeq ($(FREE_WINDOWS), true)
- export NAN_PYTHON_BINARY ?= $(NAN_PYTHON)/bin/python$(NAN_PYTHON_VERSION)
- export NAN_PYTHON_LIB ?= $(NAN_PYTHON)/lib/freepy.a
- export NAN_FREETYPE ?= $(LCGDIR)/gcc/freetype
- export NAN_ODE ?= $(LCGDIR)/gcc/ode
- export NAN_SDL ?= $(LCGDIR)/gcc/sdl
- export NAN_SDLCFLAGS ?= -I$(NAN_SDL)/include
- else
- export NAN_PYTHON_BINARY ?= python
- export NAN_PYTHON_LIB ?= $(NAN_PYTHON)/lib/python23.lib
- export NAN_FREETYPE ?= $(LCGDIR)/freetype
- export NAN_ODE ?= $(LCGDIR)/ode
- export NAN_SDL ?= $(LCGDIR)/sdl
- export NAN_SDLCFLAGS ?= -I$(NAN_SDL)/include
- endif
export NAN_OPENAL ?= $(LCGDIR)/openal
- export NAN_FMOD ?= $(LCGDIR)/fmod
export NAN_JPEG ?= $(LCGDIR)/jpeg
export NAN_PNG ?= $(LCGDIR)/png
export NAN_TIFF ?= $(LCGDIR)/tiff
@@ -568,11 +498,30 @@ endif
export NAN_NSPR ?= $(LCGDIR)/nspr
export NAN_GETTEXT ?= $(LCGDIR)/gettext
ifeq ($(FREE_WINDOWS), true)
- export NAN_GETTEXT_LIB ?= $(NAN_GETTEXT)/lib/freegettext.a $(NAN_ICONV)/lib/freeiconv.a
+ export NAN_GETTEXT_LIB ?= $(NAN_GETTEXT)/lib/freegettext.a $(NAN_ICONV)/lib/freeiconv.a
+ export NAN_PYTHON_BINARY ?= $(NAN_PYTHON)/bin/python$(NAN_PYTHON_VERSION)
+ export NAN_PYTHON_LIB ?= $(NAN_PYTHON)/lib/lib25_vs2005/libpython25.a
+ export NAN_FREETYPE ?= $(LCGDIR)/gcc/freetype
+ export NAN_ODE ?= $(LCGDIR)/gcc/ode
+ export NAN_SDL ?= $(LCGDIR)/gcc/sdl
+ export NAN_OPENEXR ?= $(LCGDIR)/gcc/openexr
+ export NAN_OPENEXR_INC ?= -I$(NAN_OPENEXR)/include -I$(NAN_OPENEXR)/include/OpenEXR
+ export NAN_OPENEXR_LIBS ?= $(NAN_OPENEXR)/lib/libIlmImf.a $(NAN_OPENEXR)/lib/libHalf.a $(NAN_OPENEXR)/lib/libIex.a
+ export NAN_PTHREADS ?= $(LCGDIR)/pthreads
else
- export NAN_GETTEXT_LIB ?= $(NAN_GETTEXT)/lib/gnu_gettext.lib $(NAN_ICONV)/lib/iconv.lib
+ export NAN_GETTEXT_LIB ?= $(NAN_GETTEXT)/lib/gnu_gettext.lib $(NAN_ICONV)/lib/iconv.lib
+ export NAN_PYTHON_BINARY ?= python
+ export NAN_PYTHON_LIB ?= $(NAN_PYTHON)/lib/python23.lib
+ export NAN_FREETYPE ?= $(LCGDIR)/freetype
+ export NAN_ODE ?= $(LCGDIR)/ode
+ export NAN_SDL ?= $(LCGDIR)/sdl
+ export NAN_OPENEXR ?= $(LCGDIR)/openexr
+ export NAN_OPENEXR_INC ?= -I$(NAN_OPENEXR)/include -I$(NAN_OPENEXR)/include/IlmImf -I$(NAN_OPENEXR)/include/Imath -I$(NAN_OPENEXR)/include/Iex
+ export NAN_OPENEXR_LIBS ?= $(NAN_OPENEXR)/lib/IlmImf.lib $(NAN_OPENEXR)/lib/Half.lib $(NAN_OPENEXR)/lib/Iex.lib
endif
+ export NAN_SDLCFLAGS ?= -I$(NAN_SDL)/include
+ export NAN_WINTAB ?= $(LCGDIR)/wintab
# Uncomment the following line to use Mozilla inplace of netscape
# CPPFLAGS +=-DMOZ_NOT_NET
# Location of MOZILLA/Netscape header files...
@@ -580,7 +529,7 @@ endif
export NAN_MOZILLA_LIB ?= $(LCGDIR)/mozilla/lib/
# Will fall back to look in NAN_MOZILLA_INC/nspr and NAN_MOZILLA_LIB
# if this is not set.
- export NAN_PYTHON_BINARY ?= python
+ export NAN_PYTHON_BINARY ?= python
export NAN_BUILDINFO ?= true
# Be paranoid regarding library creation (do not update archives)
export NAN_PARANOID ?= true
@@ -588,9 +537,6 @@ endif
# l10n
export INTERNATIONAL ?= true
- # enable freetype2 support for text objects
- export WITH_FREETYPE2 ?= true
-
# enable quicktime support
# export WITH_QUICKTIME ?= true
@@ -602,7 +548,6 @@ endif
export NAN_PYTHON_LIB ?= $(NAN_PYTHON)/lib/python$(NAN_PYTHON_VERSION)/config/libpython$(NAN_PYTHON_VERSION).a
export NAN_OPENAL ?= $(LCGDIR)/openal
- export NAN_FMOD ?= $(LCGDIR)/fmod
export NAN_JPEG ?= $(LCGDIR)/jpeg
export NAN_PNG ?= $(LCGDIR)/png
export NAN_TIFF ?= $(LCGDIR)/tiff
@@ -633,27 +578,19 @@ endif
# l10n
#export INTERNATIONAL ?= true
- # enable freetype2 support for text objects
- #export WITH_FREETYPE2 ?= true
+ endif # windows + fallback
+ endif # solaris
+ endif # openbsd
+ endif # linux
+ endif # irix
+ endif # freebsd
+ endif # darwin
+ endif # beos
- endif
-
-endif
-endif
-endif
-endif
-endif
-endif
-endif
-endif
+endif # CONFIG_GUESS
# Don't want to build the gameengine?
ifeq ($(NAN_NO_KETSJI), true)
export NAN_JUST_BLENDERDYNAMIC=true
export NAN_NO_OPENAL=true
endif
-
-# INTERNATIONAL implies WITH_FREETYPE2
-ifeq ($(INTERNATIONAL), true)
- export WITH_FREETYPE2=true
-endif
diff --git a/tools/Blender.py b/tools/Blender.py
index ede99fb6e8b..ea6e4be7d30 100644
--- a/tools/Blender.py
+++ b/tools/Blender.py
@@ -120,6 +120,7 @@ def setup_staticlibs(lenv):
lenv['BF_ICONV_LIBPATH']
]
+ libincs += Split(lenv['BF_FREETYPE_LIBPATH'])
if lenv['WITH_BF_PYTHON']:
libincs += Split(lenv['BF_PYTHON_LIBPATH'])
if lenv['WITH_BF_SDL']:
@@ -134,7 +135,6 @@ def setup_staticlibs(lenv):
statlibs += Split(lenv['BF_OPENEXR_LIB_STATIC'])
if lenv['WITH_BF_INTERNATIONAL']:
libincs += Split(lenv['BF_GETTEXT_LIBPATH'])
- libincs += Split(lenv['BF_FREETYPE_LIBPATH'])
if lenv['WITH_BF_OPENAL']:
libincs += Split(lenv['BF_OPENAL_LIBPATH'])
if lenv['WITH_BF_STATICOPENAL']:
@@ -158,13 +158,15 @@ def setup_syslibs(lenv):
lenv['BF_ZLIB_LIB']
]
+ syslibs += Split(lenv['BF_FREETYPE_LIB'])
if lenv['WITH_BF_PYTHON'] and not lenv['WITH_BF_STATICPYTHON']:
- if lenv['BF_DEBUG'] and lenv['OURPLATFORM'] in ('win32-vc'):
- syslibs.append(lenv['BF_PYTHON_LIB']+'_d')
- else:
- syslibs.append(lenv['BF_PYTHON_LIB'])
+ #if not lenv['BF_NO_PYDEBUG'] and lenv['BF_DEBUG'] and lenv['OURPLATFORM'] in ('win32-vc'):
+ # print "using debug py"
+ # syslibs.append(lenv['BF_PYTHON_LIB']+'_d')
+ #else:
+ #print "not using debug py"
+ syslibs.append(lenv['BF_PYTHON_LIB'])
if lenv['WITH_BF_INTERNATIONAL']:
- syslibs += Split(lenv['BF_FREETYPE_LIB'])
syslibs += Split(lenv['BF_GETTEXT_LIB'])
if lenv['WITH_BF_OPENAL']:
if not lenv['WITH_BF_STATICOPENAL']:
@@ -189,6 +191,9 @@ def setup_syslibs(lenv):
syslibs += Split(lenv['BF_OPENGL_LIB'])
if lenv['OURPLATFORM'] in ('win32-vc', 'win32-mingw','linuxcross'):
syslibs += Split(lenv['BF_PTHREADS_LIB'])
+ if lenv['WITH_BF_LCMS']:
+ syslibs.append(lenv['BF_LCMS_LIB'])
+
syslibs += lenv['LLIBS']
@@ -354,6 +359,8 @@ def AppIt(target=None, source=None, env=None):
commands.getoutput(cmd)
cmd = 'cp -R %s/release/scripts %s/%s.app/Contents/MacOS/.blender/'%(bldroot,builddir,binary)
commands.getoutput(cmd)
+ cmd = 'cp -R %s/release/ui %s/%s.app/Contents/MacOS/.blender/'%(bldroot,builddir,binary)
+ commands.getoutput(cmd)
cmd = 'chmod +x %s/%s.app/Contents/MacOS/%s'%(builddir,binary, binary)
commands.getoutput(cmd)
cmd = 'find %s/%s.app -name .svn -prune -exec rm -rf {} \;'%(builddir, binary)
diff --git a/tools/btools.py b/tools/btools.py
index 3c6b63c30cc..3fa23f9d49d 100755
--- a/tools/btools.py
+++ b/tools/btools.py
@@ -27,11 +27,10 @@ def print_arguments(args, bc):
def validate_arguments(args, bc):
opts_list = [
- 'WITH_BF_PYTHON', 'BF_PYTHON', 'BF_PYTHON_VERSION', 'BF_PYTHON_INC', 'BF_PYTHON_BINARY', 'BF_PYTHON_LIB', 'BF_PYTHON_LIBPATH', 'WITH_BF_STATICPYTHON', 'BF_PYTHON_LIB_STATIC',
+ 'BF_NO_PYDEBUG', 'WITH_BF_PYTHON', 'BF_PYTHON', 'BF_PYTHON_VERSION', 'BF_PYTHON_INC', 'BF_PYTHON_BINARY', 'BF_PYTHON_LIB', 'BF_PYTHON_LIBPATH', 'WITH_BF_STATICPYTHON', 'BF_PYTHON_LIB_STATIC',
'WITH_BF_OPENAL', 'BF_OPENAL', 'BF_OPENAL_INC', 'BF_OPENAL_LIB', 'BF_OPENAL_LIBPATH', 'WITH_BF_STATICOPENAL', 'BF_OPENAL_LIB_STATIC',
'WITH_BF_SDL', 'BF_SDL', 'BF_SDL_INC', 'BF_SDL_LIB', 'BF_SDL_LIBPATH',
'BF_PTHREADS', 'BF_PTHREADS_INC', 'BF_PTHREADS_LIB', 'BF_PTHREADS_LIBPATH',
- 'WITH_BF_FMOD',
'WITH_BF_OPENEXR', 'BF_OPENEXR', 'BF_OPENEXR_INC', 'BF_OPENEXR_LIB', 'BF_OPENEXR_LIBPATH', 'WITH_BF_STATICOPENEXR', 'BF_OPENEXR_LIB_STATIC',
'WITH_BF_DDS',
'WITH_BF_FFMPEG', 'BF_FFMPEG_LIB','BF_FFMPEG_EXTRA', 'BF_FFMPEG', 'BF_FFMPEG_INC',
@@ -50,7 +49,6 @@ def validate_arguments(args, bc):
'WITH_BF_FREETYPE', 'BF_FREETYPE', 'BF_FREETYPE_INC', 'BF_FREETYPE_LIB', 'BF_FREETYPE_LIBPATH',
'WITH_BF_QUICKTIME', 'BF_QUICKTIME', 'BF_QUICKTIME_INC', 'BF_QUICKTIME_LIB', 'BF_QUICKTIME_LIBPATH',
'WITH_BF_STATICOPENGL', 'BF_OPENGL', 'BF_OPENGL_INC', 'BF_OPENGL_LIB', 'BF_OPENGL_LIBPATH', 'BF_OPENGL_LIB_STATIC',
- 'WITH_BF_FTGL', 'BF_FTGL', 'BF_FTGL_INC', 'BF_FTGL_LIB',
'WITH_BF_PLAYER',
'WITH_BF_NOBLENDER',
'WITH_BF_BINRELOC',
@@ -63,6 +61,7 @@ def validate_arguments(args, bc):
'BF_FANCY', 'BF_QUIET',
'BF_X264_CONFIG',
'BF_XVIDCORE_CONFIG',
+ 'WITH_BF_LCMS', 'BF_LCMS_LIB',
'WITH_BF_DOCS',
'BF_NUMJOBS',
]
@@ -80,7 +79,7 @@ def validate_arguments(args, bc):
]
- arg_list = ['BF_DEBUG', 'BF_QUIET', 'BF_CROSS', 'BF_UPDATE',
+ arg_list = ['BF_NO_PYDEBUG', 'BF_DEBUG', 'BF_QUIET', 'BF_CROSS', 'BF_UPDATE',
'BF_INSTALLDIR', 'BF_TOOLSET', 'BF_BINNAME',
'BF_BUILDDIR', 'BF_FANCY', 'BF_QUICK', 'BF_PROFILE',
'BF_BSC', 'BF_CONFIG',
@@ -146,6 +145,7 @@ def read_opts(cfg, args):
localopts.AddVariables(
('LCGDIR', 'location of cvs lib dir'),
(BoolVariable('WITH_BF_PYTHON', 'Compile with python', True)),
+ (BoolVariable('BF_NO_PYDEBUG', 'don\'t use debug python, only valid on win32/msvc', False)),
('BF_PYTHON', 'base path for python', ''),
('BF_PYTHON_VERSION', 'Python version to use', ''),
('BF_PYTHON_INC', 'include path for Python headers', ''),
@@ -178,9 +178,6 @@ def read_opts(cfg, args):
('BF_PTHREADS_LIB', 'Pthreads library', ''),
('BF_PTHREADS_LIBPATH', 'Pthreads library path', ''),
- (BoolVariable('WITH_BF_FMOD', 'Use FMOD if true', False)),
- # BF_FMOD = $(LCGDIR)/fmod
-
(BoolVariable('WITH_BF_OPENEXR', 'Use OPENEXR if true', True)),
(BoolVariable('WITH_BF_STATICOPENEXR', 'Staticly link to OpenEXR', False)),
('BF_OPENEXR', 'OPENEXR base path', ''),
@@ -239,7 +236,7 @@ def read_opts(cfg, args):
('BF_ZLIB_LIB', 'ZLib library', ''),
('BF_ZLIB_LIBPATH', 'ZLib library path', ''),
- (BoolVariable('WITH_BF_INTERNATIONAL', 'Use Gettext and Freetype if true', True)),
+ (BoolVariable('WITH_BF_INTERNATIONAL', 'Use Gettext if true', True)),
('BF_GETTEXT', 'gettext base path', ''),
('BF_GETTEXT_INC', 'gettext include path', ''),
@@ -290,7 +287,7 @@ def read_opts(cfg, args):
##BF_PARANOID = True
##
### enable freetype2 support for text objects
- (BoolVariable('WITH_BF_FREETYPE', 'Use FreeType2 if true', False)),
+ (BoolVariable('WITH_BF_FREETYPE', 'Use FreeType2 if true', True)),
('BF_FREETYPE', 'Freetype base path', ''),
('BF_FREETYPE_INC', 'Freetype include path', ''),
('BF_FREETYPE_LIB', 'Freetype library', ''),
@@ -312,11 +309,6 @@ def read_opts(cfg, args):
('BF_OPENGL_LIB_STATIC', 'OpenGL static libraries', ''),
('BF_OPENGL_LINKFLAGS', 'OpenGL link flags', ''),
- (BoolVariable('WITH_BF_FTGL', 'Use FTGL if true', True)),
- ('BF_FTGL', 'FTGL base path', ''),
- ('BF_FTGL_INC', 'FTGL include path', ''),
- ('BF_FTGL_LIB', 'FTGL libraries', ''),
-
(BoolVariable('WITH_BF_PLAYER', 'Build blenderplayer if true', False)),
(BoolVariable('WITH_BF_NOBLENDER', 'Do not build blender if true', False)),
@@ -363,6 +355,9 @@ def read_opts(cfg, args):
(BoolVariable('BF_FANCY', 'Enable fancy output if true', True)),
(BoolVariable('BF_QUIET', 'Enable silent output if true', True)),
(BoolVariable('WITH_BF_BINRELOC', 'Enable relocatable binary (linux only)', False)),
+
+ (BoolVariable('WITH_BF_LCMS', 'Enable color correction with lcms', False)),
+ ('BF_LCMS_LIB', 'LCMSlibrary', 'lcms'),
('BF_X264_CONFIG', 'configuration flags for x264', ''),
('BF_XVIDCORE_CONFIG', 'configuration flags for xvidcore', ''),