forked from bartvdbraak/blender
svn merge -r39800:39900 https://svn.blender.org/svnroot/bf-blender/trunk/blender
This commit is contained in:
commit
9c4165fde0
@ -948,7 +948,7 @@ elseif(APPLE)
|
|||||||
# we use precompiled libraries for py 3.2 and up by default
|
# we use precompiled libraries for py 3.2 and up by default
|
||||||
|
|
||||||
# normally cached but not since we include them with blender
|
# normally cached but not since we include them with blender
|
||||||
set(PYTHON_VERSION 3.2)
|
set(PYTHON_VERSION 3.2)
|
||||||
set(PYTHON_INCLUDE_DIR "${LIBDIR}/python/include/python${PYTHON_VERSION}")
|
set(PYTHON_INCLUDE_DIR "${LIBDIR}/python/include/python${PYTHON_VERSION}")
|
||||||
# set(PYTHON_BINARY "${LIBDIR}/python/bin/python${PYTHON_VERSION}") # not used yet
|
# set(PYTHON_BINARY "${LIBDIR}/python/bin/python${PYTHON_VERSION}") # not used yet
|
||||||
set(PYTHON_LIBRARY python${PYTHON_VERSION})
|
set(PYTHON_LIBRARY python${PYTHON_VERSION})
|
||||||
|
@ -14,7 +14,7 @@ USE_SDK=True
|
|||||||
################### Cocoa & architecture settings ##################
|
################### Cocoa & architecture settings ##################
|
||||||
#############################################################################
|
#############################################################################
|
||||||
WITH_GHOST_COCOA=True
|
WITH_GHOST_COCOA=True
|
||||||
MACOSX_ARCHITECTURE = 'i386' # valid archs: ppc, i386, ppc64, x86_64
|
MACOSX_ARCHITECTURE = 'x86_64' # valid archs: ppc, i386, ppc64, x86_64
|
||||||
|
|
||||||
|
|
||||||
cmd = 'uname -p'
|
cmd = 'uname -p'
|
||||||
@ -104,14 +104,26 @@ BF_FFMPEG_LIBPATH='${BF_FFMPEG}/lib'
|
|||||||
BF_FFMPEG_LIB = 'avcodec avdevice avformat avutil mp3lame swscale x264 xvidcore theora theoradec theoraenc vorbis vorbisenc vorbisfile ogg bz2'
|
BF_FFMPEG_LIB = 'avcodec avdevice avformat avutil mp3lame swscale x264 xvidcore theora theoradec theoraenc vorbis vorbisenc vorbisfile ogg bz2'
|
||||||
#bz2 is a standard osx dynlib
|
#bz2 is a standard osx dynlib
|
||||||
|
|
||||||
# python 3.1 uses precompiled libraries in bf svn /lib by default
|
|
||||||
BF_PYTHON_VERSION = '3.2'
|
BF_PYTHON_VERSION = '3.2'
|
||||||
BF_PYTHON = LIBDIR + '/python'
|
WITH_OSX_STATICPYTHON = True
|
||||||
BF_PYTHON_INC = '${BF_PYTHON}/include/python${BF_PYTHON_VERSION}'
|
|
||||||
# BF_PYTHON_BINARY = '${BF_PYTHON}/bin/python${BF_PYTHON_VERSION}'
|
if WITH_OSX_STATICPYTHON:
|
||||||
BF_PYTHON_LIB = 'python${BF_PYTHON_VERSION}'
|
# python 3.2 uses precompiled libraries in bf svn /lib by default
|
||||||
BF_PYTHON_LIBPATH = '${BF_PYTHON}/lib/python${BF_PYTHON_VERSION}'
|
|
||||||
# BF_PYTHON_LINKFLAGS = ['-u', '_PyMac_Error', '-framework', 'System']
|
BF_PYTHON = LIBDIR + '/python'
|
||||||
|
BF_PYTHON_INC = '${BF_PYTHON}/include/python${BF_PYTHON_VERSION}'
|
||||||
|
# BF_PYTHON_BINARY = '${BF_PYTHON}/bin/python${BF_PYTHON_VERSION}'
|
||||||
|
BF_PYTHON_LIB = 'python${BF_PYTHON_VERSION}'
|
||||||
|
BF_PYTHON_LIBPATH = '${BF_PYTHON}/lib/python${BF_PYTHON_VERSION}'
|
||||||
|
# BF_PYTHON_LINKFLAGS = ['-u', '_PyMac_Error', '-framework', 'System']
|
||||||
|
else:
|
||||||
|
# python 3.2 uses Python-framework additionally installed in /Library/Frameworks
|
||||||
|
|
||||||
|
BF_PYTHON = '/Library/Frameworks/Python.framework/Versions/'
|
||||||
|
BF_PYTHON_INC = '${BF_PYTHON}${BF_PYTHON_VERSION}/include/python${BF_PYTHON_VERSION}m'
|
||||||
|
BF_PYTHON_BINARY = '${BF_PYTHON}${BF_PYTHON_VERSION}/bin/python${BF_PYTHON_VERSION}'
|
||||||
|
#BF_PYTHON_LIB = ''
|
||||||
|
BF_PYTHON_LIBPATH = '${BF_PYTHON}${BF_PYTHON_VERSION}/lib/python${BF_PYTHON_VERSION}/config-3.2m'
|
||||||
|
|
||||||
WITH_BF_OPENAL = True
|
WITH_BF_OPENAL = True
|
||||||
#different lib must be used following version of gcc
|
#different lib must be used following version of gcc
|
||||||
@ -315,6 +327,10 @@ if WITH_BF_QUICKTIME:
|
|||||||
else:
|
else:
|
||||||
PLATFORM_LINKFLAGS = PLATFORM_LINKFLAGS+['-framework','QuickTime']
|
PLATFORM_LINKFLAGS = PLATFORM_LINKFLAGS+['-framework','QuickTime']
|
||||||
|
|
||||||
|
if not WITH_OSX_STATICPYTHON:
|
||||||
|
PLATFORM_LINKFLAGS = PLATFORM_LINKFLAGS+['-framework','Python']
|
||||||
|
|
||||||
|
|
||||||
#note to build succesfully on 10.3.9 SDK you need to patch 10.3.9 by adding the SystemStubs.a lib from 10.4
|
#note to build succesfully on 10.3.9 SDK you need to patch 10.3.9 by adding the SystemStubs.a lib from 10.4
|
||||||
#for 10.7.sdk, SystemStubs needs to be excluded (lib doesn't exist anymore)
|
#for 10.7.sdk, SystemStubs needs to be excluded (lib doesn't exist anymore)
|
||||||
if MACOSX_DEPLOYMENT_TARGET == '10.7':
|
if MACOSX_DEPLOYMENT_TARGET == '10.7':
|
||||||
|
@ -40,7 +40,7 @@ BF_JACK_INC = '${BF_JACK}/include ${BF_FFMPEG}/include/msvc'
|
|||||||
BF_JACK_LIB = 'libjack'
|
BF_JACK_LIB = 'libjack'
|
||||||
BF_JACK_LIBPATH = '${BF_JACK}/lib'
|
BF_JACK_LIBPATH = '${BF_JACK}/lib'
|
||||||
|
|
||||||
WITH_BF_SNDFILE = False
|
WITH_BF_SNDFILE = True
|
||||||
BF_SNDFILE = LIBDIR + '/sndfile'
|
BF_SNDFILE = LIBDIR + '/sndfile'
|
||||||
BF_SNDFILE_INC = '${BF_SNDFILE}/include'
|
BF_SNDFILE_INC = '${BF_SNDFILE}/include'
|
||||||
BF_SNDFILE_LIB = 'libsndfile-1'
|
BF_SNDFILE_LIB = 'libsndfile-1'
|
||||||
|
@ -536,7 +536,10 @@ def AppIt(target=None, source=None, env=None):
|
|||||||
print("Installing to %s"%(installdir))
|
print("Installing to %s"%(installdir))
|
||||||
# TODO, use tar.
|
# TODO, use tar.
|
||||||
python_zip = 'python_' + osxarch + '.zip' # set specific python_arch.zip
|
python_zip = 'python_' + osxarch + '.zip' # set specific python_arch.zip
|
||||||
print("unzipping to app-bundle: %s"%(python_zip))
|
if env['WITH_OSX_STATICPYTHON']:
|
||||||
|
print("unzipping to app-bundle: %s"%(python_zip))
|
||||||
|
else:
|
||||||
|
print("dynamic build - make sure to have python3.x-framework installed")
|
||||||
bldroot = env.Dir('.').abspath
|
bldroot = env.Dir('.').abspath
|
||||||
binary = env['BINARYKIND']
|
binary = env['BINARYKIND']
|
||||||
|
|
||||||
@ -569,10 +572,11 @@ def AppIt(target=None, source=None, env=None):
|
|||||||
commands.getoutput(cmd)
|
commands.getoutput(cmd)
|
||||||
cmd = 'cp %s/release/bin/%s/.Blanguages %s/%s.app/Contents/Resources/'%(bldroot,VERSION,installdir,binary)
|
cmd = 'cp %s/release/bin/%s/.Blanguages %s/%s.app/Contents/Resources/'%(bldroot,VERSION,installdir,binary)
|
||||||
commands.getoutput(cmd)
|
commands.getoutput(cmd)
|
||||||
cmd = 'mkdir %s/%s.app/Contents/MacOS/%s/python/'%(installdir,binary, VERSION)
|
if env['WITH_OSX_STATICPYTHON']:
|
||||||
commands.getoutput(cmd)
|
cmd = 'mkdir %s/%s.app/Contents/MacOS/%s/python/'%(installdir,binary, VERSION)
|
||||||
cmd = 'unzip -q %s/release/%s -d %s/%s.app/Contents/MacOS/%s/python/'%(libdir,python_zip,installdir,binary,VERSION)
|
commands.getoutput(cmd)
|
||||||
commands.getoutput(cmd)
|
cmd = 'unzip -q %s/release/%s -d %s/%s.app/Contents/MacOS/%s/python/'%(libdir,python_zip,installdir,binary,VERSION)
|
||||||
|
commands.getoutput(cmd)
|
||||||
|
|
||||||
if binary == 'blender':#not copy everything for blenderplayer
|
if binary == 'blender':#not copy everything for blenderplayer
|
||||||
cmd = 'cp -R %s/release/scripts %s/%s.app/Contents/MacOS/%s/'%(bldroot,installdir,binary,VERSION)
|
cmd = 'cp -R %s/release/scripts %s/%s.app/Contents/MacOS/%s/'%(bldroot,installdir,binary,VERSION)
|
||||||
|
@ -78,7 +78,7 @@ def print_arguments(args, bc):
|
|||||||
|
|
||||||
def validate_arguments(args, bc):
|
def validate_arguments(args, bc):
|
||||||
opts_list = [
|
opts_list = [
|
||||||
'WITH_BF_PYTHON', 'WITH_BF_PYTHON_SAFETY', '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_PYTHON_DLL', 'BF_PYTHON_ABI_FLAGS',
|
'WITH_BF_PYTHON', 'WITH_BF_PYTHON_SAFETY', 'BF_PYTHON', 'BF_PYTHON_VERSION', 'BF_PYTHON_INC', 'BF_PYTHON_BINARY', 'BF_PYTHON_LIB', 'BF_PYTHON_LIBPATH', 'WITH_BF_STATICPYTHON', 'WITH_OSX_STATICPYTHON', 'BF_PYTHON_LIB_STATIC', 'BF_PYTHON_DLL', 'BF_PYTHON_ABI_FLAGS',
|
||||||
'WITH_BF_OPENAL', 'BF_OPENAL', 'BF_OPENAL_INC', 'BF_OPENAL_LIB', 'BF_OPENAL_LIBPATH', 'WITH_BF_STATICOPENAL', 'BF_OPENAL_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',
|
'WITH_BF_SDL', 'BF_SDL', 'BF_SDL_INC', 'BF_SDL_LIB', 'BF_SDL_LIBPATH',
|
||||||
'BF_LIBSAMPLERATE', 'BF_LIBSAMPLERATE_INC', 'BF_LIBSAMPLERATE_LIB', 'BF_LIBSAMPLERATE_LIBPATH', 'WITH_BF_STATICLIBSAMPLERATE', 'BF_LIBSAMPLERATE_LIB_STATIC',
|
'BF_LIBSAMPLERATE', 'BF_LIBSAMPLERATE_INC', 'BF_LIBSAMPLERATE_LIB', 'BF_LIBSAMPLERATE_LIBPATH', 'WITH_BF_STATICLIBSAMPLERATE', 'BF_LIBSAMPLERATE_LIB_STATIC',
|
||||||
@ -230,6 +230,7 @@ def read_opts(env, cfg, args):
|
|||||||
('BF_PYTHON_LIBPATH', 'Library path', ''),
|
('BF_PYTHON_LIBPATH', 'Library path', ''),
|
||||||
('BF_PYTHON_LINKFLAGS', 'Python link flags', ''),
|
('BF_PYTHON_LINKFLAGS', 'Python link flags', ''),
|
||||||
(BoolVariable('WITH_BF_STATICPYTHON', 'Staticly link to python', False)),
|
(BoolVariable('WITH_BF_STATICPYTHON', 'Staticly link to python', False)),
|
||||||
|
(BoolVariable('WITH_OSX_STATICPYTHON', 'Staticly link to python', True)),
|
||||||
('BF_PYTHON_ABI_FLAGS', 'Python ABI flags (suffix in library version: m, mu, etc)', ''),
|
('BF_PYTHON_ABI_FLAGS', 'Python ABI flags (suffix in library version: m, mu, etc)', ''),
|
||||||
|
|
||||||
(BoolVariable('BF_NO_ELBEEM', 'Disable Fluid Sim', False)),
|
(BoolVariable('BF_NO_ELBEEM', 'Disable Fluid Sim', False)),
|
||||||
|
@ -215,6 +215,18 @@ Functions
|
|||||||
:type setting: string (lights, shaders, shadows, ramps, nodes, extra_textures)
|
:type setting: string (lights, shaders, shadows, ramps, nodes, extra_textures)
|
||||||
:rtype: boolean
|
:rtype: boolean
|
||||||
|
|
||||||
|
.. function:: setAnisotropicFiltering(level)
|
||||||
|
|
||||||
|
Set the anisotropic filtering level for textures.
|
||||||
|
|
||||||
|
:arg level: The new anisotropic filtering level to use
|
||||||
|
:type level: integer (must be one of 1, 2, 4, 8, 16)
|
||||||
|
|
||||||
|
.. function:: getAnisotropicFiltering()
|
||||||
|
|
||||||
|
Get the anisotropic filtering level used for textures.
|
||||||
|
|
||||||
|
:rtype: integer (one of 1, 2, 4, 8, 16)
|
||||||
|
|
||||||
.. function:: drawLine(fromVec,toVec,color)
|
.. function:: drawLine(fromVec,toVec,color)
|
||||||
|
|
||||||
|
@ -1539,62 +1539,66 @@ Game Types (bge.types)
|
|||||||
Return the value matching key, or the default value if its not found.
|
Return the value matching key, or the default value if its not found.
|
||||||
:return: The key value or a default.
|
:return: The key value or a default.
|
||||||
|
|
||||||
.. method:: playAction(name, start_frame, end_frame, layer=0, priority=0 blendin=0, play_mode=ACT_MODE_PLAY, layer_weight=0.0, ipo_flags=0, speed=1.0)
|
.. method:: playAction(name, start_frame, end_frame, layer=0, priority=0, blendin=0, play_mode=ACT_MODE_PLAY, layer_weight=0.0, ipo_flags=0, speed=1.0)
|
||||||
|
|
||||||
Plays an action.
|
Plays an action.
|
||||||
|
|
||||||
:arg name: the name of the action
|
:arg name: the name of the action
|
||||||
:type name: string
|
:type name: string
|
||||||
:arg start: the start frame of the action
|
:arg start: the start frame of the action
|
||||||
:type start: float
|
:type start: float
|
||||||
:arg end: the end frame of the action
|
:arg end: the end frame of the action
|
||||||
:type end: float
|
:type end: float
|
||||||
:arg layer: the layer the action will play in (actions in different layers are added/blended together)
|
:arg layer: the layer the action will play in (actions in different layers are added/blended together)
|
||||||
:type layer: integer
|
:type layer: integer
|
||||||
:arg priority: only play this action if there isn't an action currently playing in this layer with a higher (lower number) priority
|
:arg priority: only play this action if there isn't an action currently playing in this layer with a higher (lower number) priority
|
||||||
:type priority: integer
|
:type priority: integer
|
||||||
:arg blendin: the amount of blending between this animation and the previous one on this layer
|
:arg blendin: the amount of blending between this animation and the previous one on this layer
|
||||||
:type blendin: float
|
:type blendin: float
|
||||||
:arg play_mode: the play mode
|
:arg play_mode: the play mode
|
||||||
:type play_mode: KX_ACTION_PLAY, KX_ACTION_LOOP, or KX_ACTION_PING_PONG
|
:type play_mode: KX_ACTION_MODE_PLAY, KX_ACTION_MODE_LOOP, or KX_ACTION_MODE_PING_PONG
|
||||||
:arg layer_weight: how much of the previous layer to use for blending (0 = add)
|
:arg layer_weight: how much of the previous layer to use for blending (0 = add)
|
||||||
:type layer_weight: float
|
:type layer_weight: float
|
||||||
:arg ipo_flags: flags for the old IPO behaviors (force, etc)
|
:arg ipo_flags: flags for the old IPO behaviors (force, etc)
|
||||||
:type ipo_flags: int bitfield
|
:type ipo_flags: int bitfield
|
||||||
:arg speed: the playback speed of the action as a factor (1.0 = normal speed, 2.0 = 2x speed, etc)
|
:arg speed: the playback speed of the action as a factor (1.0 = normal speed, 2.0 = 2x speed, etc)
|
||||||
:type speed: float
|
:type speed: float
|
||||||
|
|
||||||
.. method:: stopAction(layer=0)
|
.. method:: stopAction(layer=0)
|
||||||
|
|
||||||
Stop playing the action on the given layer.
|
Stop playing the action on the given layer.
|
||||||
|
|
||||||
:arg layer: The layer to stop playing.
|
:arg layer: The layer to stop playing.
|
||||||
:type layer: integer
|
:type layer: integer
|
||||||
|
|
||||||
.. method:: getActionFrame(layer=0)
|
.. method:: getActionFrame(layer=0)
|
||||||
|
|
||||||
Gets the current frame of the action playing in the supplied layer.
|
Gets the current frame of the action playing in the supplied layer.
|
||||||
|
|
||||||
:arg layer: The layer that you want to get the frame from.
|
:arg layer: The layer that you want to get the frame from.
|
||||||
:type layer: integer
|
:type layer: integer
|
||||||
|
|
||||||
:return: The current frame of the action
|
:return: The current frame of the action
|
||||||
|
:rtype: float
|
||||||
|
|
||||||
.. method:: setActionFrame(frame, layer=0)
|
.. method:: setActionFrame(frame, layer=0)
|
||||||
|
|
||||||
Set the current frame of the action playing in the supplied layer.
|
Set the current frame of the action playing in the supplied layer.
|
||||||
|
|
||||||
:arg layer: The layer where you want to set the frame
|
:arg layer: The layer where you want to set the frame
|
||||||
:type layer: integer
|
:type layer: integer
|
||||||
:arg frame: The frame to set the action to
|
:arg frame: The frame to set the action to
|
||||||
:type frame: float
|
:type frame: float
|
||||||
|
|
||||||
.. method:: isPlayingAction(layer=0)
|
.. method:: isPlayingAction(layer=0)
|
||||||
|
|
||||||
Checks to see if there is an action playing in the given layer.
|
Checks to see if there is an action playing in the given layer.
|
||||||
|
|
||||||
:arg layer: The layer to check for a playing action.
|
:arg layer: The layer to check for a playing action.
|
||||||
:type layer: integer
|
:type layer: integer
|
||||||
|
|
||||||
|
:return: Whether or not the action is playing
|
||||||
|
:rtype: boolean
|
||||||
|
|
||||||
.. class:: KX_IpoActuator(SCA_IActuator)
|
.. class:: KX_IpoActuator(SCA_IActuator)
|
||||||
|
|
||||||
|
57
doc/python_api/rst/info_tips_and_tricks.rst
Normal file
57
doc/python_api/rst/info_tips_and_tricks.rst
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
###############
|
||||||
|
Tips and Tricks
|
||||||
|
###############
|
||||||
|
|
||||||
|
Some of these are just python features that scripters may not have thaught to use with blender.
|
||||||
|
|
||||||
|
|
||||||
|
****************
|
||||||
|
Use The Terminal
|
||||||
|
****************
|
||||||
|
|
||||||
|
For Linux and OSX users this means starting the terminal first, then running blender from within it. on Windows the terminal can be enabled from the help menu.
|
||||||
|
|
||||||
|
********************
|
||||||
|
Run External Scripts
|
||||||
|
********************
|
||||||
|
|
||||||
|
|
||||||
|
******************
|
||||||
|
Don't Use Blender!
|
||||||
|
******************
|
||||||
|
|
||||||
|
|
||||||
|
******************
|
||||||
|
Use External Tools
|
||||||
|
******************
|
||||||
|
|
||||||
|
|
||||||
|
**************
|
||||||
|
Bundled Python
|
||||||
|
**************
|
||||||
|
|
||||||
|
Blender from blender.org includes a compleate python installation on all platforms, this has the disadvantage that any extensions you have installed in you're systems python wont be found by blender.
|
||||||
|
|
||||||
|
There are 2 ways around this:
|
||||||
|
|
||||||
|
* remove blender python subdirectory, blender will then look for the systems python and use that instead **python version must match the one that blender comes with**.
|
||||||
|
|
||||||
|
* copy the extensions into blender's python subdirectry so blender can access them, you could also copy the entire python installation into blenders subdirectory, replacing the one blender comes with. This works as long as the python versions match and the paths are created in the same location relative locations. Doing this has the advantage that you can redistribute this bundle to others with blender and/or the game player, including any extensions you rely on.
|
||||||
|
|
||||||
|
********
|
||||||
|
Advanced
|
||||||
|
********
|
||||||
|
|
||||||
|
|
||||||
|
===================
|
||||||
|
Blender as a module
|
||||||
|
===================
|
||||||
|
|
||||||
|
|
||||||
|
============================
|
||||||
|
Python Safety (Build Option)
|
||||||
|
============================
|
||||||
|
|
||||||
|
=================
|
||||||
|
CTypes in Blender
|
||||||
|
=================
|
@ -1,3 +1,33 @@
|
|||||||
|
/*
|
||||||
|
* $Id$
|
||||||
|
*
|
||||||
|
* ***** BEGIN GPL LICENSE BLOCK *****
|
||||||
|
*
|
||||||
|
* Copyright 2009-2011 Jörg Hermann Müller
|
||||||
|
*
|
||||||
|
* This file is part of AudaSpace.
|
||||||
|
*
|
||||||
|
* Audaspace 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.
|
||||||
|
*
|
||||||
|
* AudaSpace 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 Audaspace; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
*
|
||||||
|
* ***** END GPL LICENSE BLOCK *****
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** \file audaspace/intern/AUD_JOSResampleReaderCoeff.cpp
|
||||||
|
* \ingroup audaspaceintern
|
||||||
|
*/
|
||||||
|
|
||||||
#include "AUD_JOSResampleReader.h"
|
#include "AUD_JOSResampleReader.h"
|
||||||
|
|
||||||
// sinc filter coefficients, Nz = 136, L = 2304, freq = 0.963904, Kaiser Window B = 16
|
// sinc filter coefficients, Nz = 136, L = 2304, freq = 0.963904, Kaiser Window B = 16
|
||||||
|
@ -516,7 +516,7 @@ bool AUD_SoftwareDevice::AUD_SoftwareHandle::setVolumeMaximum(float volume)
|
|||||||
float AUD_SoftwareDevice::AUD_SoftwareHandle::getVolumeMinimum()
|
float AUD_SoftwareDevice::AUD_SoftwareHandle::getVolumeMinimum()
|
||||||
{
|
{
|
||||||
if(!m_status)
|
if(!m_status)
|
||||||
return std::numeric_limits<float>::quiet_NaN();;
|
return std::numeric_limits<float>::quiet_NaN();
|
||||||
|
|
||||||
return m_volume_min;
|
return m_volume_min;
|
||||||
}
|
}
|
||||||
@ -634,7 +634,7 @@ bool AUD_SoftwareDevice::AUD_SoftwareHandle::setConeAngleInner(float angle)
|
|||||||
float AUD_SoftwareDevice::AUD_SoftwareHandle::getConeVolumeOuter()
|
float AUD_SoftwareDevice::AUD_SoftwareHandle::getConeVolumeOuter()
|
||||||
{
|
{
|
||||||
if(!m_status)
|
if(!m_status)
|
||||||
return std::numeric_limits<float>::quiet_NaN();;
|
return std::numeric_limits<float>::quiet_NaN();
|
||||||
|
|
||||||
return m_cone_volume_outer;
|
return m_cone_volume_outer;
|
||||||
}
|
}
|
||||||
|
@ -70,7 +70,7 @@ GHOST_TSuccess GHOST_ISystemPaths::create()
|
|||||||
# ifdef GHOST_COCOA
|
# ifdef GHOST_COCOA
|
||||||
m_systemPaths = new GHOST_SystemPathsCocoa ();
|
m_systemPaths = new GHOST_SystemPathsCocoa ();
|
||||||
# else
|
# else
|
||||||
m_systemPaths = new GHOST_SystemPathsarbon ();
|
m_systemPaths = new GHOST_SystemPathsCarbon ();
|
||||||
# endif
|
# endif
|
||||||
# else
|
# else
|
||||||
m_systemPaths = new GHOST_SystemPathsX11 ();
|
m_systemPaths = new GHOST_SystemPathsX11 ();
|
||||||
|
@ -39,7 +39,7 @@
|
|||||||
|
|
||||||
GHOST_TSuccess GHOST_CreateSystemPaths(void)
|
GHOST_TSuccess GHOST_CreateSystemPaths(void)
|
||||||
{
|
{
|
||||||
return GHOST_ISystemPaths::create();;
|
return GHOST_ISystemPaths::create();
|
||||||
}
|
}
|
||||||
|
|
||||||
GHOST_TSuccess GHOST_DisposeSystemPaths(void)
|
GHOST_TSuccess GHOST_DisposeSystemPaths(void)
|
||||||
|
@ -48,7 +48,9 @@
|
|||||||
#include "GHOST_EventButton.h"
|
#include "GHOST_EventButton.h"
|
||||||
#include "GHOST_EventCursor.h"
|
#include "GHOST_EventCursor.h"
|
||||||
#include "GHOST_EventWheel.h"
|
#include "GHOST_EventWheel.h"
|
||||||
|
#ifdef WITH_INPUT_NDOF
|
||||||
#include "GHOST_EventNDOF.h"
|
#include "GHOST_EventNDOF.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "GHOST_TimerManager.h"
|
#include "GHOST_TimerManager.h"
|
||||||
#include "GHOST_TimerTask.h"
|
#include "GHOST_TimerTask.h"
|
||||||
@ -1101,7 +1103,9 @@ OSStatus GHOST_SystemCarbon::sEventHandlerProc(EventHandlerCallRef handler, Even
|
|||||||
GHOST_SystemCarbon* sys = (GHOST_SystemCarbon*) userData;
|
GHOST_SystemCarbon* sys = (GHOST_SystemCarbon*) userData;
|
||||||
OSStatus err = eventNotHandledErr;
|
OSStatus err = eventNotHandledErr;
|
||||||
GHOST_IWindow* window;
|
GHOST_IWindow* window;
|
||||||
|
#ifdef WITH_INPUT_NDOF
|
||||||
GHOST_TEventNDOFData data;
|
GHOST_TEventNDOFData data;
|
||||||
|
#endif
|
||||||
UInt32 kind;
|
UInt32 kind;
|
||||||
|
|
||||||
switch (::GetEventClass(event))
|
switch (::GetEventClass(event))
|
||||||
@ -1122,6 +1126,7 @@ OSStatus GHOST_SystemCarbon::sEventHandlerProc(EventHandlerCallRef handler, Even
|
|||||||
err = sys->handleKeyEvent(event);
|
err = sys->handleKeyEvent(event);
|
||||||
break;
|
break;
|
||||||
case kEventClassBlender :
|
case kEventClassBlender :
|
||||||
|
#ifdef WITH_INPUT_NDOF
|
||||||
window = sys->m_windowManager->getActiveWindow();
|
window = sys->m_windowManager->getActiveWindow();
|
||||||
sys->m_ndofManager->GHOST_NDOFGetDatas(data);
|
sys->m_ndofManager->GHOST_NDOFGetDatas(data);
|
||||||
kind = ::GetEventKind(event);
|
kind = ::GetEventKind(event);
|
||||||
@ -1137,6 +1142,7 @@ OSStatus GHOST_SystemCarbon::sEventHandlerProc(EventHandlerCallRef handler, Even
|
|||||||
// printf("button\n");
|
// printf("button\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
err = noErr;
|
err = noErr;
|
||||||
break;
|
break;
|
||||||
default :
|
default :
|
||||||
|
@ -866,6 +866,8 @@ GHOST_TSuccess GHOST_WindowWin32::installDrawingContext(GHOST_TDrawingContextTyp
|
|||||||
{
|
{
|
||||||
|
|
||||||
// Make sure we don't screw up the context
|
// Make sure we don't screw up the context
|
||||||
|
if (m_hGlRc == s_firsthGLRc)
|
||||||
|
s_firsthGLRc = NULL;
|
||||||
m_drawingContextType = GHOST_kDrawingContextTypeOpenGL;
|
m_drawingContextType = GHOST_kDrawingContextTypeOpenGL;
|
||||||
removeDrawingContext();
|
removeDrawingContext();
|
||||||
|
|
||||||
|
@ -88,7 +88,7 @@ typedef unsigned long uintptr_t;
|
|||||||
#define _UINTPTR_T_DEFINED
|
#define _UINTPTR_T_DEFINED
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#elif defined(__linux__) || defined(__NetBSD__)
|
#elif defined(__linux__) || defined(__NetBSD__) || defined(__OpenBSD__)
|
||||||
|
|
||||||
/* Linux-i386, Linux-Alpha, Linux-ppc */
|
/* Linux-i386, Linux-Alpha, Linux-ppc */
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
@ -319,7 +319,7 @@ void IK_QSegment::RemoveChild(IK_QSegment *child)
|
|||||||
else {
|
else {
|
||||||
IK_QSegment *seg = m_child;
|
IK_QSegment *seg = m_child;
|
||||||
|
|
||||||
while (seg->m_sibling != child);
|
while (seg->m_sibling != child)
|
||||||
seg = seg->m_sibling;
|
seg = seg->m_sibling;
|
||||||
|
|
||||||
if (child == seg->m_sibling)
|
if (child == seg->m_sibling)
|
||||||
|
@ -89,7 +89,7 @@ typedef unsigned long uintptr_t;
|
|||||||
#define _UINTPTR_T_DEFINED
|
#define _UINTPTR_T_DEFINED
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#elif defined(__linux__) || defined(__NetBSD__)
|
#elif defined(__linux__) || defined(__NetBSD__) || defined(__OpenBSD__)
|
||||||
|
|
||||||
/* Linux-i386, Linux-Alpha, Linux-ppc */
|
/* Linux-i386, Linux-Alpha, Linux-ppc */
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
@ -185,9 +185,13 @@ class DATA_PT_pose_library(ArmatureButtonsPanel, Panel):
|
|||||||
layout.template_ID(ob, "pose_library", new="poselib.new", unlink="poselib.unlink")
|
layout.template_ID(ob, "pose_library", new="poselib.new", unlink="poselib.unlink")
|
||||||
|
|
||||||
if poselib:
|
if poselib:
|
||||||
|
|
||||||
|
# list of poses in pose library
|
||||||
row = layout.row()
|
row = layout.row()
|
||||||
row.template_list(poselib, "pose_markers", poselib.pose_markers, "active_index", rows=5)
|
row.template_list(poselib, "pose_markers", poselib.pose_markers, "active_index", rows=5)
|
||||||
|
|
||||||
|
# column of operators for active pose
|
||||||
|
# - goes beside list
|
||||||
col = row.column(align=True)
|
col = row.column(align=True)
|
||||||
col.active = (poselib.library is None)
|
col.active = (poselib.library is None)
|
||||||
|
|
||||||
@ -203,7 +207,11 @@ class DATA_PT_pose_library(ArmatureButtonsPanel, Panel):
|
|||||||
col.operator("poselib.pose_remove", icon='ZOOMOUT', text="").pose = pose_marker_active.name
|
col.operator("poselib.pose_remove", icon='ZOOMOUT', text="").pose = pose_marker_active.name
|
||||||
col.operator("poselib.apply_pose", icon='ZOOM_SELECTED', text="").pose_index = poselib.pose_markers.active_index
|
col.operator("poselib.apply_pose", icon='ZOOM_SELECTED', text="").pose_index = poselib.pose_markers.active_index
|
||||||
|
|
||||||
layout.operator("poselib.action_sanitise")
|
col.operator("poselib.action_sanitise", icon='HELP', text="") # XXX: put in menu?
|
||||||
|
|
||||||
|
# properties for active marker
|
||||||
|
if pose_marker_active is not None:
|
||||||
|
layout.prop(pose_marker_active, "name")
|
||||||
|
|
||||||
|
|
||||||
# TODO: this panel will soon be depreceated too
|
# TODO: this panel will soon be depreceated too
|
||||||
|
@ -340,10 +340,12 @@ class RENDER_PT_game_performance(RenderButtonsPanel, Panel):
|
|||||||
layout = self.layout
|
layout = self.layout
|
||||||
|
|
||||||
gs = context.scene.game_settings
|
gs = context.scene.game_settings
|
||||||
row = layout.row()
|
col = layout.column()
|
||||||
|
row = col.row()
|
||||||
row.prop(gs, "use_frame_rate")
|
row.prop(gs, "use_frame_rate")
|
||||||
row.prop(gs, "use_display_lists")
|
row.prop(gs, "use_display_lists")
|
||||||
row.prop(gs, "restrict_animation_updates")
|
|
||||||
|
col.prop(gs, "restrict_animation_updates")
|
||||||
|
|
||||||
|
|
||||||
class RENDER_PT_game_display(RenderButtonsPanel, Panel):
|
class RENDER_PT_game_display(RenderButtonsPanel, Panel):
|
||||||
|
@ -213,7 +213,7 @@ void blf_font_buffer(FontBLF *font, const char *str)
|
|||||||
{
|
{
|
||||||
unsigned char *cbuf;
|
unsigned char *cbuf;
|
||||||
unsigned int c;
|
unsigned int c;
|
||||||
unsigned char b_col_char[3];
|
unsigned char b_col_char[4];
|
||||||
GlyphBLF *g, *g_prev;
|
GlyphBLF *g, *g_prev;
|
||||||
FT_Vector delta;
|
FT_Vector delta;
|
||||||
FT_UInt glyph_index;
|
FT_UInt glyph_index;
|
||||||
@ -232,6 +232,7 @@ void blf_font_buffer(FontBLF *font, const char *str)
|
|||||||
b_col_char[0]= font->b_col[0] * 255;
|
b_col_char[0]= font->b_col[0] * 255;
|
||||||
b_col_char[1]= font->b_col[1] * 255;
|
b_col_char[1]= font->b_col[1] * 255;
|
||||||
b_col_char[2]= font->b_col[2] * 255;
|
b_col_char[2]= font->b_col[2] * 255;
|
||||||
|
b_col_char[3]= font->b_col[3] * 255;
|
||||||
|
|
||||||
while (str[i]) {
|
while (str[i]) {
|
||||||
int pen_y;
|
int pen_y;
|
||||||
@ -296,16 +297,19 @@ void blf_font_buffer(FontBLF *font, const char *str)
|
|||||||
a= *(g->bitmap + x + (yb * g->pitch)) / 255.0f;
|
a= *(g->bitmap + x + (yb * g->pitch)) / 255.0f;
|
||||||
|
|
||||||
if(a > 0.0f) {
|
if(a > 0.0f) {
|
||||||
|
float alphatest;
|
||||||
fbuf= font->b_fbuf + font->bch * ((chx + x) + ((pen_y + y)*font->bw));
|
fbuf= font->b_fbuf + font->bch * ((chx + x) + ((pen_y + y)*font->bw));
|
||||||
if (a >= 1.0f) {
|
if (a >= 1.0f) {
|
||||||
fbuf[0]= font->b_col[0];
|
fbuf[0]= font->b_col[0];
|
||||||
fbuf[1]= font->b_col[1];
|
fbuf[1]= font->b_col[1];
|
||||||
fbuf[2]= font->b_col[2];
|
fbuf[2]= font->b_col[2];
|
||||||
|
fbuf[3]= (alphatest= (fbuf[3] + (font->b_col[3]))) < 1.0f ? alphatest : 1.0f;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
fbuf[0]= (font->b_col[0]*a) + (fbuf[0] * (1-a));
|
fbuf[0]= (font->b_col[0]*a) + (fbuf[0] * (1-a));
|
||||||
fbuf[1]= (font->b_col[1]*a) + (fbuf[1] * (1-a));
|
fbuf[1]= (font->b_col[1]*a) + (fbuf[1] * (1-a));
|
||||||
fbuf[2]= (font->b_col[2]*a) + (fbuf[2] * (1-a));
|
fbuf[2]= (font->b_col[2]*a) + (fbuf[2] * (1-a));
|
||||||
|
fbuf[3]= (alphatest= (fbuf[3] + (font->b_col[3]*a))) < 1.0f ? alphatest : 1.0f;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -324,16 +328,19 @@ void blf_font_buffer(FontBLF *font, const char *str)
|
|||||||
a= *(g->bitmap + x + (yb * g->pitch)) / 255.0f;
|
a= *(g->bitmap + x + (yb * g->pitch)) / 255.0f;
|
||||||
|
|
||||||
if(a > 0.0f) {
|
if(a > 0.0f) {
|
||||||
|
int alphatest;
|
||||||
cbuf= font->b_cbuf + font->bch * ((chx + x) + ((pen_y + y)*font->bw));
|
cbuf= font->b_cbuf + font->bch * ((chx + x) + ((pen_y + y)*font->bw));
|
||||||
if (a >= 1.0f) {
|
if (a >= 1.0f) {
|
||||||
cbuf[0]= b_col_char[0];
|
cbuf[0]= b_col_char[0];
|
||||||
cbuf[1]= b_col_char[1];
|
cbuf[1]= b_col_char[1];
|
||||||
cbuf[2]= b_col_char[2];
|
cbuf[2]= b_col_char[2];
|
||||||
|
cbuf[3]= (alphatest= ((int)cbuf[3] + (int)b_col_char[3])) < 255 ? alphatest : 255;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
cbuf[0]= (b_col_char[0]*a) + (cbuf[0] * (1-a));
|
cbuf[0]= (b_col_char[0]*a) + (cbuf[0] * (1-a));
|
||||||
cbuf[1]= (b_col_char[1]*a) + (cbuf[1] * (1-a));
|
cbuf[1]= (b_col_char[1]*a) + (cbuf[1] * (1-a));
|
||||||
cbuf[2]= (b_col_char[2]*a) + (cbuf[2] * (1-a));
|
cbuf[2]= (b_col_char[2]*a) + (cbuf[2] * (1-a));
|
||||||
|
cbuf[3]= (alphatest= ((int)cbuf[3] + (int)((font->b_col[3]*a)*255.0f))) < 255 ? alphatest : 255;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1091,7 +1091,7 @@ static int cloth_collision_response_moving ( ClothModifierData *clmd, CollisionM
|
|||||||
|
|
||||||
VECADDMUL(cloth1->verts[collpair->ap1].impulse, pimpulse, w1*2.0);
|
VECADDMUL(cloth1->verts[collpair->ap1].impulse, pimpulse, w1*2.0);
|
||||||
VECADDMUL(cloth1->verts[collpair->ap2].impulse, pimpulse, w2*2.0);
|
VECADDMUL(cloth1->verts[collpair->ap2].impulse, pimpulse, w2*2.0);
|
||||||
VECADDMUL(cloth1->verts[collpair->ap3].impulse, pimpulse, w3*2.0);;
|
VECADDMUL(cloth1->verts[collpair->ap3].impulse, pimpulse, w3*2.0);
|
||||||
cloth1->verts[collpair->ap1].impulse_count++;
|
cloth1->verts[collpair->ap1].impulse_count++;
|
||||||
cloth1->verts[collpair->ap2].impulse_count++;
|
cloth1->verts[collpair->ap2].impulse_count++;
|
||||||
cloth1->verts[collpair->ap3].impulse_count++;
|
cloth1->verts[collpair->ap3].impulse_count++;
|
||||||
@ -1487,8 +1487,8 @@ static CollPair* cloth_collision ( ModifierData *md1, ModifierData *md2,
|
|||||||
|
|
||||||
sdis = clmd->coll_parms->distance_repel + epsilon2 + FLT_EPSILON;
|
sdis = clmd->coll_parms->distance_repel + epsilon2 + FLT_EPSILON;
|
||||||
|
|
||||||
/*apply a repulsion force, to help the solver along.
|
/* apply a repulsion force, to help the solver along.
|
||||||
this is kindof crude, it only tests one vert of the triangle*/
|
* this is kindof crude, it only tests one vert of the triangle */
|
||||||
if (isect_ray_plane_v3(cloth->verts[collpair->ap1].tx, n2, collmd->current_xnew[collpair->bp1].co,
|
if (isect_ray_plane_v3(cloth->verts[collpair->ap1].tx, n2, collmd->current_xnew[collpair->bp1].co,
|
||||||
collmd->current_xnew[collpair->bp2].co,
|
collmd->current_xnew[collpair->bp2].co,
|
||||||
collmd->current_xnew[collpair->bp3].co, &l, 0))
|
collmd->current_xnew[collpair->bp3].co, &l, 0))
|
||||||
|
@ -808,41 +808,65 @@ static void layerDefault_mcol(void *data, int count)
|
|||||||
|
|
||||||
|
|
||||||
static const LayerTypeInfo LAYERTYPEINFO[CD_NUMTYPES] = {
|
static const LayerTypeInfo LAYERTYPEINFO[CD_NUMTYPES] = {
|
||||||
|
/* 0: CD_MVERT */
|
||||||
{sizeof(MVert), "MVert", 1, NULL, NULL, NULL, NULL, NULL, NULL},
|
{sizeof(MVert), "MVert", 1, NULL, NULL, NULL, NULL, NULL, NULL},
|
||||||
|
/* 1: CD_MSTICKY */
|
||||||
{sizeof(MSticky), "MSticky", 1, NULL, NULL, NULL, layerInterp_msticky, NULL,
|
{sizeof(MSticky), "MSticky", 1, NULL, NULL, NULL, layerInterp_msticky, NULL,
|
||||||
NULL},
|
NULL},
|
||||||
|
/* 2: CD_MDEFORMVERT */
|
||||||
{sizeof(MDeformVert), "MDeformVert", 1, NULL, layerCopy_mdeformvert,
|
{sizeof(MDeformVert), "MDeformVert", 1, NULL, layerCopy_mdeformvert,
|
||||||
layerFree_mdeformvert, layerInterp_mdeformvert, NULL, NULL},
|
layerFree_mdeformvert, layerInterp_mdeformvert, NULL, NULL},
|
||||||
|
/* 3: CD_MEDGE */
|
||||||
{sizeof(MEdge), "MEdge", 1, NULL, NULL, NULL, NULL, NULL, NULL},
|
{sizeof(MEdge), "MEdge", 1, NULL, NULL, NULL, NULL, NULL, NULL},
|
||||||
|
/* 4: CD_MFACE */
|
||||||
{sizeof(MFace), "MFace", 1, NULL, NULL, NULL, NULL, NULL, NULL},
|
{sizeof(MFace), "MFace", 1, NULL, NULL, NULL, NULL, NULL, NULL},
|
||||||
|
/* 5: CD_MTFACE */
|
||||||
{sizeof(MTFace), "MTFace", 1, "UVTex", layerCopy_tface, NULL,
|
{sizeof(MTFace), "MTFace", 1, "UVTex", layerCopy_tface, NULL,
|
||||||
layerInterp_tface, layerSwap_tface, layerDefault_tface},
|
layerInterp_tface, layerSwap_tface, layerDefault_tface},
|
||||||
|
/* 6: CD_MCOL */
|
||||||
/* 4 MCol structs per face */
|
/* 4 MCol structs per face */
|
||||||
{sizeof(MCol)*4, "MCol", 4, "Col", NULL, NULL, layerInterp_mcol,
|
{sizeof(MCol)*4, "MCol", 4, "Col", NULL, NULL, layerInterp_mcol,
|
||||||
layerSwap_mcol, layerDefault_mcol},
|
layerSwap_mcol, layerDefault_mcol},
|
||||||
|
/* 7: CD_ORIGINDEX */
|
||||||
{sizeof(int), "", 0, NULL, NULL, NULL, NULL, NULL, NULL},
|
{sizeof(int), "", 0, NULL, NULL, NULL, NULL, NULL, NULL},
|
||||||
|
/* 8: CD_NORMAL */
|
||||||
/* 3 floats per normal vector */
|
/* 3 floats per normal vector */
|
||||||
{sizeof(float)*3, "", 0, NULL, NULL, NULL, NULL, NULL, NULL},
|
{sizeof(float)*3, "", 0, NULL, NULL, NULL, NULL, NULL, NULL},
|
||||||
|
/* 9: CD_FLAGS */
|
||||||
{sizeof(int), "", 0, NULL, NULL, NULL, NULL, NULL, NULL},
|
{sizeof(int), "", 0, NULL, NULL, NULL, NULL, NULL, NULL},
|
||||||
|
/* 10: CD_PROP_FLT */
|
||||||
{sizeof(MFloatProperty), "MFloatProperty",1,"Float",NULL,NULL,NULL,NULL},
|
{sizeof(MFloatProperty), "MFloatProperty",1,"Float",NULL,NULL,NULL,NULL},
|
||||||
|
/* 11: CD_PROP_INT */
|
||||||
{sizeof(MIntProperty), "MIntProperty",1,"Int",NULL,NULL,NULL,NULL},
|
{sizeof(MIntProperty), "MIntProperty",1,"Int",NULL,NULL,NULL,NULL},
|
||||||
|
/* 12: CD_PROP_STR */
|
||||||
{sizeof(MStringProperty), "MStringProperty",1,"String",NULL,NULL,NULL,NULL},
|
{sizeof(MStringProperty), "MStringProperty",1,"String",NULL,NULL,NULL,NULL},
|
||||||
|
/* 13: CD_ORIGSPACE */
|
||||||
{sizeof(OrigSpaceFace), "OrigSpaceFace", 1, "UVTex", layerCopy_origspace_face, NULL,
|
{sizeof(OrigSpaceFace), "OrigSpaceFace", 1, "UVTex", layerCopy_origspace_face, NULL,
|
||||||
layerInterp_origspace_face, layerSwap_origspace_face, layerDefault_origspace_face},
|
layerInterp_origspace_face, layerSwap_origspace_face, layerDefault_origspace_face},
|
||||||
|
/* 14: CD_ORCO */
|
||||||
{sizeof(float)*3, "", 0, NULL, NULL, NULL, NULL, NULL, NULL},
|
{sizeof(float)*3, "", 0, NULL, NULL, NULL, NULL, NULL, NULL},
|
||||||
|
/* 15: CD_MTEXPOLY */
|
||||||
{sizeof(MTexPoly), "MTexPoly", 1, "Face Texture", NULL, NULL, NULL, NULL, NULL},
|
{sizeof(MTexPoly), "MTexPoly", 1, "Face Texture", NULL, NULL, NULL, NULL, NULL},
|
||||||
|
/* 16: CD_MLOOPUV */
|
||||||
{sizeof(MLoopUV), "MLoopUV", 1, "UV coord", NULL, NULL, layerInterp_mloopuv, NULL, NULL},
|
{sizeof(MLoopUV), "MLoopUV", 1, "UV coord", NULL, NULL, layerInterp_mloopuv, NULL, NULL},
|
||||||
|
/* 17: CD_MLOOPCOL */
|
||||||
{sizeof(MLoopCol), "MLoopCol", 1, "Col", NULL, NULL, layerInterp_mloopcol, NULL, layerDefault_mloopcol},
|
{sizeof(MLoopCol), "MLoopCol", 1, "Col", NULL, NULL, layerInterp_mloopcol, NULL, layerDefault_mloopcol},
|
||||||
|
/* 18: CD_TANGENT */
|
||||||
{sizeof(float)*4*4, "", 0, NULL, NULL, NULL, NULL, NULL, NULL},
|
{sizeof(float)*4*4, "", 0, NULL, NULL, NULL, NULL, NULL, NULL},
|
||||||
|
/* 19: CD_MDISPS */
|
||||||
{sizeof(MDisps), "MDisps", 1, NULL, layerCopy_mdisps,
|
{sizeof(MDisps), "MDisps", 1, NULL, layerCopy_mdisps,
|
||||||
layerFree_mdisps, layerInterp_mdisps, layerSwap_mdisps, NULL, layerRead_mdisps, layerWrite_mdisps,
|
layerFree_mdisps, layerInterp_mdisps, layerSwap_mdisps, NULL, layerRead_mdisps, layerWrite_mdisps,
|
||||||
layerFilesize_mdisps, layerValidate_mdisps},
|
layerFilesize_mdisps, layerValidate_mdisps},
|
||||||
|
/* 20: CD_WEIGHT_MCOL */
|
||||||
{sizeof(MCol)*4, "MCol", 4, "WeightCol", NULL, NULL, layerInterp_mcol,
|
{sizeof(MCol)*4, "MCol", 4, "WeightCol", NULL, NULL, layerInterp_mcol,
|
||||||
layerSwap_mcol, layerDefault_mcol},
|
layerSwap_mcol, layerDefault_mcol},
|
||||||
{sizeof(MCol)*4, "MCol", 4, "IDCol", NULL, NULL, layerInterp_mcol,
|
/* 21: CD_ID_MCOL */
|
||||||
|
{sizeof(MCol)*4, "MCol", 4, "IDCol", NULL, NULL, layerInterp_mcol,
|
||||||
layerSwap_mcol, layerDefault_mcol},
|
layerSwap_mcol, layerDefault_mcol},
|
||||||
{sizeof(MCol)*4, "MCol", 4, "TexturedCol", NULL, NULL, layerInterp_mcol,
|
/* 22: CD_TEXTURE_MCOL */
|
||||||
|
{sizeof(MCol)*4, "MCol", 4, "TexturedCol", NULL, NULL, layerInterp_mcol,
|
||||||
layerSwap_mcol, layerDefault_mcol},
|
layerSwap_mcol, layerDefault_mcol},
|
||||||
|
/* 23: CD_CLOTH_ORCO */
|
||||||
{sizeof(float)*3, "", 0, NULL, NULL, NULL, NULL, NULL, NULL}
|
{sizeof(float)*3, "", 0, NULL, NULL, NULL, NULL, NULL, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -166,7 +166,7 @@ int BKE_mesh_validate_arrays(Mesh *me, MVert *UNUSED(mverts), unsigned int totve
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(BLI_edgehash_haskey(edge_hash, med->v1, med->v2)) {
|
if(BLI_edgehash_haskey(edge_hash, med->v1, med->v2)) {
|
||||||
PRINT(" edge %u: is a duplicate of, %u\n", i, GET_INT_FROM_POINTER(BLI_edgehash_lookup(edge_hash, med->v1, med->v2)));
|
PRINT(" edge %u: is a duplicate of, %d\n", i, GET_INT_FROM_POINTER(BLI_edgehash_lookup(edge_hash, med->v1, med->v2)));
|
||||||
remove= do_fixes;
|
remove= do_fixes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -359,6 +359,9 @@ NlaStrip *add_nla_soundstrip (Scene *scene, Speaker *speaker)
|
|||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
strip->end = 10.0f;
|
strip->end = 10.0f;
|
||||||
|
/* quiet compiler warnings */
|
||||||
|
(void)scene;
|
||||||
|
(void)speaker;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* general settings */
|
/* general settings */
|
||||||
|
@ -39,8 +39,10 @@
|
|||||||
#include "BKE_sequencer.h"
|
#include "BKE_sequencer.h"
|
||||||
#include "BKE_scene.h"
|
#include "BKE_scene.h"
|
||||||
|
|
||||||
|
#ifdef WITH_AUDASPACE
|
||||||
// evil global ;-)
|
// evil global ;-)
|
||||||
static int sound_cfra;
|
static int sound_cfra;
|
||||||
|
#endif
|
||||||
|
|
||||||
struct bSound* sound_new_file(struct Main *bmain, const char *filename)
|
struct bSound* sound_new_file(struct Main *bmain, const char *filename)
|
||||||
{
|
{
|
||||||
@ -760,5 +762,17 @@ void sound_seek_scene(struct bContext *UNUSED(C)) {}
|
|||||||
float sound_sync_scene(struct Scene *UNUSED(scene)) { return 0.0f; }
|
float sound_sync_scene(struct Scene *UNUSED(scene)) { return 0.0f; }
|
||||||
int sound_scene_playing(struct Scene *UNUSED(scene)) { return -1; }
|
int sound_scene_playing(struct Scene *UNUSED(scene)) { return -1; }
|
||||||
int sound_read_sound_buffer(struct bSound* UNUSED(sound), float* UNUSED(buffer), int UNUSED(length), float UNUSED(start), float UNUSED(end)) { return 0; }
|
int sound_read_sound_buffer(struct bSound* UNUSED(sound), float* UNUSED(buffer), int UNUSED(length), float UNUSED(start), float UNUSED(end)) { return 0; }
|
||||||
|
void sound_read_waveform(struct bSound* sound) { (void)sound; }
|
||||||
|
void sound_init_main(struct Main *bmain) { (void)bmain; }
|
||||||
|
void sound_set_cfra(int cfra) { (void)cfra; }
|
||||||
|
void sound_update_sequencer(struct Main* main, struct bSound* sound) { (void)main; (void)sound; }
|
||||||
|
void sound_update_scene(struct Scene* scene) { (void)scene; }
|
||||||
|
void sound_update_scene_sound(void* handle, struct bSound* sound) { (void)handle; (void)sound; }
|
||||||
|
void sound_update_scene_listener(struct Scene *scene) { (void)scene; }
|
||||||
|
void sound_update_fps(struct Scene *scene) { (void)scene; }
|
||||||
|
void sound_set_scene_sound_volume(void* handle, float volume, char animated) { (void)handle; (void)volume; (void)animated; }
|
||||||
|
void sound_set_scene_sound_pan(void* handle, float pan, char animated) { (void)handle; (void)pan; (void)animated; }
|
||||||
|
void sound_set_scene_volume(struct Scene *scene, float volume) { (void)scene; (void)volume; }
|
||||||
|
void sound_set_scene_sound_pitch(void* handle, float pitch, char animated) { (void)handle; (void)pitch; (void)animated; }
|
||||||
|
|
||||||
#endif // WITH_AUDASPACE
|
#endif // WITH_AUDASPACE
|
||||||
|
@ -42,6 +42,7 @@ struct ID;
|
|||||||
typedef enum {
|
typedef enum {
|
||||||
BLI_CB_EVT_RENDER_PRE,
|
BLI_CB_EVT_RENDER_PRE,
|
||||||
BLI_CB_EVT_RENDER_POST,
|
BLI_CB_EVT_RENDER_POST,
|
||||||
|
BLI_CB_EVT_RENDER_STATS,
|
||||||
BLI_CB_EVT_LOAD_PRE,
|
BLI_CB_EVT_LOAD_PRE,
|
||||||
BLI_CB_EVT_LOAD_POST,
|
BLI_CB_EVT_LOAD_POST,
|
||||||
BLI_CB_EVT_SAVE_PRE,
|
BLI_CB_EVT_SAVE_PRE,
|
||||||
|
@ -1968,7 +1968,7 @@ void resolve_tri_uv(float uv[2], const float st[2], const float st0[2], const fl
|
|||||||
void resolve_quad_uv(float uv[2], const float st[2], const float st0[2], const float st1[2], const float st2[2], const float st3[2])
|
void resolve_quad_uv(float uv[2], const float st[2], const float st0[2], const float st1[2], const float st2[2], const float st3[2])
|
||||||
{
|
{
|
||||||
const double signed_area= (st0[0]*st1[1] - st0[1]*st1[0]) + (st1[0]*st2[1] - st1[1]*st2[0]) +
|
const double signed_area= (st0[0]*st1[1] - st0[1]*st1[0]) + (st1[0]*st2[1] - st1[1]*st2[0]) +
|
||||||
(st2[0]*st3[1] - st2[1]*st3[0]) + (st3[0]*st0[1] - st3[1]*st0[0]);
|
(st2[0]*st3[1] - st2[1]*st3[0]) + (st3[0]*st0[1] - st3[1]*st0[0]);
|
||||||
|
|
||||||
/* X is 2D cross product (determinant)
|
/* X is 2D cross product (determinant)
|
||||||
A= (p0-p) X (p0-p3)*/
|
A= (p0-p) X (p0-p3)*/
|
||||||
|
@ -820,7 +820,7 @@ void normalize_m4_m4(float rmat[][4], float mat[][4])
|
|||||||
len= normalize_v3_v3(rmat[1], mat[1]);
|
len= normalize_v3_v3(rmat[1], mat[1]);
|
||||||
if(len!=0.0f) rmat[1][3]= mat[1][3] / len;
|
if(len!=0.0f) rmat[1][3]= mat[1][3] / len;
|
||||||
len= normalize_v3_v3(rmat[2], mat[2]);
|
len= normalize_v3_v3(rmat[2], mat[2]);
|
||||||
if(len!=0.0f) rmat[2][3]= mat[2][3] / len;;
|
if(len!=0.0f) rmat[2][3]= mat[2][3] / len;
|
||||||
}
|
}
|
||||||
|
|
||||||
void adjoint_m3_m3(float m1[][3], float m[][3])
|
void adjoint_m3_m3(float m1[][3], float m[][3])
|
||||||
|
@ -83,7 +83,7 @@ typedef unsigned long uintptr_t;
|
|||||||
#define _UINTPTR_T_DEFINED
|
#define _UINTPTR_T_DEFINED
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#elif defined(__linux__) || defined(__NetBSD__)
|
#elif defined(__linux__) || defined(__NetBSD__) || defined(__OpenBSD__)
|
||||||
|
|
||||||
/* Linux-i386, Linux-Alpha, Linux-ppc */
|
/* Linux-i386, Linux-Alpha, Linux-ppc */
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
@ -115,7 +115,7 @@ LIBIMPORT void IMB_rectcpy(struct ImBuf *dbuf, struct ImBuf *sbuf,
|
|||||||
|
|
||||||
LIBIMPORT void IMB_rectfill(struct ImBuf *drect, const float col[4]);
|
LIBIMPORT void IMB_rectfill(struct ImBuf *drect, const float col[4]);
|
||||||
LIBIMPORT void IMB_rectfill_area(struct ImBuf *ibuf, float *col, int x1, int y1, int x2, int y2);
|
LIBIMPORT void IMB_rectfill_area(struct ImBuf *ibuf, float *col, int x1, int y1, int x2, int y2);
|
||||||
LIBIMPORT void buf_rectfill_area(unsigned char *rect, float *rectf, int width, int height, float *col, int x1, int y1, int x2, int y2);
|
LIBIMPORT void buf_rectfill_area(unsigned char *rect, float *rectf, int width, int height, const float col[4], int x1, int y1, int x2, int y2);
|
||||||
LIBIMPORT void IMB_rectfill_alpha(struct ImBuf *drect, const float value);
|
LIBIMPORT void IMB_rectfill_alpha(struct ImBuf *drect, const float value);
|
||||||
|
|
||||||
#endif /* IFF_H */
|
#endif /* IFF_H */
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -92,8 +92,8 @@ void AnimationImporter::animation_to_fcurves(COLLADAFW::AnimationCurve *curve)
|
|||||||
|
|
||||||
if( curve->getInterpolationType() == COLLADAFW::AnimationCurve::INTERPOLATION_BEZIER ||
|
if( curve->getInterpolationType() == COLLADAFW::AnimationCurve::INTERPOLATION_BEZIER ||
|
||||||
curve->getInterpolationType() == COLLADAFW::AnimationCurve::INTERPOLATION_STEP ) {
|
curve->getInterpolationType() == COLLADAFW::AnimationCurve::INTERPOLATION_STEP ) {
|
||||||
COLLADAFW::FloatOrDoubleArray& intan = curve->getInTangentValues();
|
COLLADAFW::FloatOrDoubleArray& intan = curve->getInTangentValues();
|
||||||
COLLADAFW::FloatOrDoubleArray& outtan = curve->getOutTangentValues();
|
COLLADAFW::FloatOrDoubleArray& outtan = curve->getOutTangentValues();
|
||||||
}
|
}
|
||||||
|
|
||||||
float fps = (float)FPS;
|
float fps = (float)FPS;
|
||||||
@ -131,20 +131,20 @@ void AnimationImporter::animation_to_fcurves(COLLADAFW::AnimationCurve *curve)
|
|||||||
curve->getInterpolationType() == COLLADAFW::AnimationCurve::INTERPOLATION_STEP)
|
curve->getInterpolationType() == COLLADAFW::AnimationCurve::INTERPOLATION_STEP)
|
||||||
{
|
{
|
||||||
COLLADAFW::FloatOrDoubleArray& intan = curve->getInTangentValues();
|
COLLADAFW::FloatOrDoubleArray& intan = curve->getInTangentValues();
|
||||||
COLLADAFW::FloatOrDoubleArray& outtan = curve->getOutTangentValues();
|
COLLADAFW::FloatOrDoubleArray& outtan = curve->getOutTangentValues();
|
||||||
|
|
||||||
// intangent
|
// intangent
|
||||||
bez.vec[0][0] = bc_get_float_value(intan, (j * 2 * dim ) + (2 * i)) * fps;
|
bez.vec[0][0] = bc_get_float_value(intan, (j * 2 * dim ) + (2 * i)) * fps;
|
||||||
bez.vec[0][1] = bc_get_float_value(intan, (j * 2 * dim )+ (2 * i) + 1);
|
bez.vec[0][1] = bc_get_float_value(intan, (j * 2 * dim )+ (2 * i) + 1);
|
||||||
|
|
||||||
// outtangent
|
// outtangent
|
||||||
bez.vec[2][0] = bc_get_float_value(outtan, (j * 2 * dim ) + (2 * i)) * fps;
|
bez.vec[2][0] = bc_get_float_value(outtan, (j * 2 * dim ) + (2 * i)) * fps;
|
||||||
bez.vec[2][1] = bc_get_float_value(outtan, (j * 2 * dim )+ (2 * i) + 1);
|
bez.vec[2][1] = bc_get_float_value(outtan, (j * 2 * dim )+ (2 * i) + 1);
|
||||||
if(curve->getInterpolationType() == COLLADAFW::AnimationCurve::INTERPOLATION_BEZIER)
|
if(curve->getInterpolationType() == COLLADAFW::AnimationCurve::INTERPOLATION_BEZIER)
|
||||||
bez.ipo = BEZT_IPO_BEZ;
|
bez.ipo = BEZT_IPO_BEZ;
|
||||||
else
|
else
|
||||||
bez.ipo = BEZT_IPO_CONST;
|
bez.ipo = BEZT_IPO_CONST;
|
||||||
//bez.h1 = bez.h2 = HD_AUTO;
|
//bez.h1 = bez.h2 = HD_AUTO;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -450,18 +450,18 @@ void AnimationImporter::modify_fcurve(std::vector<FCurve*>* curves , char* rna_p
|
|||||||
void AnimationImporter::find_frames( std::vector<float>* frames , std::vector<FCurve*>* curves)
|
void AnimationImporter::find_frames( std::vector<float>* frames , std::vector<FCurve*>* curves)
|
||||||
{
|
{
|
||||||
std::vector<FCurve*>::iterator iter;
|
std::vector<FCurve*>::iterator iter;
|
||||||
for (iter = curves->begin(); iter != curves->end(); iter++) {
|
for (iter = curves->begin(); iter != curves->end(); iter++) {
|
||||||
FCurve *fcu = *iter;
|
FCurve *fcu = *iter;
|
||||||
|
|
||||||
for (unsigned int k = 0; k < fcu->totvert; k++) {
|
for (unsigned int k = 0; k < fcu->totvert; k++) {
|
||||||
//get frame value from bezTriple
|
//get frame value from bezTriple
|
||||||
float fra = fcu->bezt[k].vec[1][0];
|
float fra = fcu->bezt[k].vec[1][0];
|
||||||
//if frame already not added add frame to frames
|
//if frame already not added add frame to frames
|
||||||
if (std::find(frames->begin(), frames->end(), fra) == frames->end())
|
if (std::find(frames->begin(), frames->end(), fra) == frames->end())
|
||||||
frames->push_back(fra);
|
frames->push_back(fra);
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//creates the rna_paths and array indices of fcurves from animations using transformation and bound animation class of each animation.
|
//creates the rna_paths and array indices of fcurves from animations using transformation and bound animation class of each animation.
|
||||||
@ -495,23 +495,23 @@ void AnimationImporter:: Assign_transform_animations(COLLADAFW::Transformation *
|
|||||||
BLI_strncpy(rna_path, loc ? "location" : "scale", sizeof(rna_path));
|
BLI_strncpy(rna_path, loc ? "location" : "scale", sizeof(rna_path));
|
||||||
|
|
||||||
switch (binding->animationClass) {
|
switch (binding->animationClass) {
|
||||||
case COLLADAFW::AnimationList::POSITION_X:
|
case COLLADAFW::AnimationList::POSITION_X:
|
||||||
modify_fcurve(curves, rna_path, 0 );
|
modify_fcurve(curves, rna_path, 0 );
|
||||||
break;
|
break;
|
||||||
case COLLADAFW::AnimationList::POSITION_Y:
|
case COLLADAFW::AnimationList::POSITION_Y:
|
||||||
modify_fcurve(curves, rna_path, 1 );
|
modify_fcurve(curves, rna_path, 1 );
|
||||||
break;
|
break;
|
||||||
case COLLADAFW::AnimationList::POSITION_Z:
|
case COLLADAFW::AnimationList::POSITION_Z:
|
||||||
modify_fcurve(curves, rna_path, 2 );
|
modify_fcurve(curves, rna_path, 2 );
|
||||||
break;
|
break;
|
||||||
case COLLADAFW::AnimationList::POSITION_XYZ:
|
case COLLADAFW::AnimationList::POSITION_XYZ:
|
||||||
modify_fcurve(curves, rna_path, -1 );
|
modify_fcurve(curves, rna_path, -1 );
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
fprintf(stderr, "AnimationClass %d is not supported for %s.\n",
|
fprintf(stderr, "AnimationClass %d is not supported for %s.\n",
|
||||||
binding->animationClass, loc ? "TRANSLATE" : "SCALE");
|
binding->animationClass, loc ? "TRANSLATE" : "SCALE");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -521,7 +521,7 @@ void AnimationImporter:: Assign_transform_animations(COLLADAFW::Transformation *
|
|||||||
BLI_snprintf(rna_path, sizeof(rna_path), "%s.rotation_euler", joint_path);
|
BLI_snprintf(rna_path, sizeof(rna_path), "%s.rotation_euler", joint_path);
|
||||||
else
|
else
|
||||||
BLI_strncpy(rna_path, "rotation_euler", sizeof(rna_path));
|
BLI_strncpy(rna_path, "rotation_euler", sizeof(rna_path));
|
||||||
std::vector<FCurve*>::iterator iter;
|
std::vector<FCurve*>::iterator iter;
|
||||||
for (iter = curves->begin(); iter != curves->end(); iter++) {
|
for (iter = curves->begin(); iter != curves->end(); iter++) {
|
||||||
FCurve* fcu = *iter;
|
FCurve* fcu = *iter;
|
||||||
|
|
||||||
@ -533,41 +533,41 @@ void AnimationImporter:: Assign_transform_animations(COLLADAFW::Transformation *
|
|||||||
COLLADABU::Math::Vector3& axis = rot->getRotationAxis();
|
COLLADABU::Math::Vector3& axis = rot->getRotationAxis();
|
||||||
|
|
||||||
switch (binding->animationClass) {
|
switch (binding->animationClass) {
|
||||||
case COLLADAFW::AnimationList::ANGLE:
|
case COLLADAFW::AnimationList::ANGLE:
|
||||||
if (COLLADABU::Math::Vector3::UNIT_X == axis) {
|
if (COLLADABU::Math::Vector3::UNIT_X == axis) {
|
||||||
modify_fcurve(curves, rna_path, 0 );
|
modify_fcurve(curves, rna_path, 0 );
|
||||||
}
|
}
|
||||||
else if (COLLADABU::Math::Vector3::UNIT_Y == axis) {
|
else if (COLLADABU::Math::Vector3::UNIT_Y == axis) {
|
||||||
modify_fcurve(curves, rna_path, 1 );
|
modify_fcurve(curves, rna_path, 1 );
|
||||||
}
|
}
|
||||||
else if (COLLADABU::Math::Vector3::UNIT_Z == axis) {
|
else if (COLLADABU::Math::Vector3::UNIT_Z == axis) {
|
||||||
modify_fcurve(curves, rna_path, 2 );
|
modify_fcurve(curves, rna_path, 2 );
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
case COLLADAFW::AnimationList::AXISANGLE:
|
|
||||||
// TODO convert axis-angle to quat? or XYZ?
|
|
||||||
default:
|
|
||||||
fprintf(stderr, "AnimationClass %d is not supported for ROTATE transformation.\n",
|
|
||||||
binding->animationClass);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
case COLLADAFW::AnimationList::AXISANGLE:
|
||||||
|
// TODO convert axis-angle to quat? or XYZ?
|
||||||
|
default:
|
||||||
|
fprintf(stderr, "AnimationClass %d is not supported for ROTATE transformation.\n",
|
||||||
|
binding->animationClass);
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case COLLADAFW::Transformation::MATRIX:
|
case COLLADAFW::Transformation::MATRIX:
|
||||||
/*{
|
/*{
|
||||||
COLLADAFW::Matrix* mat = (COLLADAFW::Matrix*)transform;
|
COLLADAFW::Matrix* mat = (COLLADAFW::Matrix*)transform;
|
||||||
COLLADABU::Math::Matrix4 mat4 = mat->getMatrix();
|
COLLADABU::Math::Matrix4 mat4 = mat->getMatrix();
|
||||||
switch (binding->animationClass) {
|
switch (binding->animationClass) {
|
||||||
case COLLADAFW::AnimationList::TRANSFORM:
|
case COLLADAFW::AnimationList::TRANSFORM:
|
||||||
|
|
||||||
}
|
}
|
||||||
}*/
|
}*/
|
||||||
break;
|
break;
|
||||||
case COLLADAFW::Transformation::SKEW:
|
case COLLADAFW::Transformation::SKEW:
|
||||||
case COLLADAFW::Transformation::LOOKAT:
|
case COLLADAFW::Transformation::LOOKAT:
|
||||||
fprintf(stderr, "Animation of SKEW and LOOKAT transformations is not supported yet.\n");
|
fprintf(stderr, "Animation of SKEW and LOOKAT transformations is not supported yet.\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -579,12 +579,12 @@ void AnimationImporter:: Assign_color_animations(const COLLADAFW::UniqueId& list
|
|||||||
|
|
||||||
const COLLADAFW::AnimationList *animlist = animlist_map[listid];
|
const COLLADAFW::AnimationList *animlist = animlist_map[listid];
|
||||||
const COLLADAFW::AnimationList::AnimationBindings& bindings = animlist->getAnimationBindings();
|
const COLLADAFW::AnimationList::AnimationBindings& bindings = animlist->getAnimationBindings();
|
||||||
//all the curves belonging to the current binding
|
//all the curves belonging to the current binding
|
||||||
std::vector<FCurve*> animcurves;
|
std::vector<FCurve*> animcurves;
|
||||||
for (unsigned int j = 0; j < bindings.getCount(); j++) {
|
for (unsigned int j = 0; j < bindings.getCount(); j++) {
|
||||||
animcurves = curve_map[bindings[j].animation];
|
animcurves = curve_map[bindings[j].animation];
|
||||||
|
|
||||||
switch (bindings[j].animationClass) {
|
switch (bindings[j].animationClass) {
|
||||||
case COLLADAFW::AnimationList::COLOR_R:
|
case COLLADAFW::AnimationList::COLOR_R:
|
||||||
modify_fcurve(&animcurves, rna_path, 0 );
|
modify_fcurve(&animcurves, rna_path, 0 );
|
||||||
break;
|
break;
|
||||||
@ -601,10 +601,10 @@ void AnimationImporter:: Assign_color_animations(const COLLADAFW::UniqueId& list
|
|||||||
|
|
||||||
default:
|
default:
|
||||||
fprintf(stderr, "AnimationClass %d is not supported for %s.\n",
|
fprintf(stderr, "AnimationClass %d is not supported for %s.\n",
|
||||||
bindings[j].animationClass, "COLOR" );
|
bindings[j].animationClass, "COLOR" );
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<FCurve*>::iterator iter;
|
std::vector<FCurve*>::iterator iter;
|
||||||
//Add the curves of the current animation to the object
|
//Add the curves of the current animation to the object
|
||||||
for (iter = animcurves.begin(); iter != animcurves.end(); iter++) {
|
for (iter = animcurves.begin(); iter != animcurves.end(); iter++) {
|
||||||
FCurve * fcu = *iter;
|
FCurve * fcu = *iter;
|
||||||
@ -671,27 +671,27 @@ void AnimationImporter::apply_matrix_curves( Object * ob, std::vector<FCurve*>&
|
|||||||
copy_m4_m4(rest, bone->arm_mat);
|
copy_m4_m4(rest, bone->arm_mat);
|
||||||
invert_m4_m4(irest, rest);
|
invert_m4_m4(irest, rest);
|
||||||
}
|
}
|
||||||
// new curves to assign matrix transform animation
|
// new curves to assign matrix transform animation
|
||||||
FCurve *newcu[10]; // if tm_type is matrix, then create 10 curves: 4 rot, 3 loc, 3 scale
|
FCurve *newcu[10]; // if tm_type is matrix, then create 10 curves: 4 rot, 3 loc, 3 scale
|
||||||
unsigned int totcu = 10 ;
|
unsigned int totcu = 10 ;
|
||||||
const char *tm_str = NULL;
|
const char *tm_str = NULL;
|
||||||
char rna_path[200];
|
char rna_path[200];
|
||||||
for (int i = 0; i < totcu; i++) {
|
for (int i = 0; i < totcu; i++) {
|
||||||
|
|
||||||
int axis = i;
|
int axis = i;
|
||||||
|
|
||||||
if (i < 4) {
|
if (i < 4) {
|
||||||
tm_str = "rotation_quaternion";
|
tm_str = "rotation_quaternion";
|
||||||
axis = i;
|
axis = i;
|
||||||
}
|
}
|
||||||
else if (i < 7) {
|
else if (i < 7) {
|
||||||
tm_str = "location";
|
tm_str = "location";
|
||||||
axis = i - 4;
|
axis = i - 4;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
tm_str = "scale";
|
tm_str = "scale";
|
||||||
axis = i - 7;
|
axis = i - 7;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (is_joint)
|
if (is_joint)
|
||||||
@ -702,10 +702,10 @@ void AnimationImporter::apply_matrix_curves( Object * ob, std::vector<FCurve*>&
|
|||||||
newcu[i]->totvert = frames.size();
|
newcu[i]->totvert = frames.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (frames.size() == 0)
|
if (frames.size() == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
std::sort(frames.begin(), frames.end());
|
std::sort(frames.begin(), frames.end());
|
||||||
|
|
||||||
std::vector<float>::iterator it;
|
std::vector<float>::iterator it;
|
||||||
|
|
||||||
@ -744,22 +744,22 @@ std::sort(frames.begin(), frames.end());
|
|||||||
|
|
||||||
float rot[4], loc[3], scale[3];
|
float rot[4], loc[3], scale[3];
|
||||||
|
|
||||||
mat4_to_quat(rot, mat);
|
mat4_to_quat(rot, mat);
|
||||||
/*for ( int i = 0 ; i < 4 ; i ++ )
|
/*for ( int i = 0 ; i < 4 ; i ++ )
|
||||||
{
|
{
|
||||||
rot[i] = rot[i] * (180 / M_PI);
|
rot[i] = rot[i] * (180 / M_PI);
|
||||||
}*/
|
}*/
|
||||||
copy_v3_v3(loc, mat[3]);
|
copy_v3_v3(loc, mat[3]);
|
||||||
mat4_to_size(scale, mat);
|
mat4_to_size(scale, mat);
|
||||||
|
|
||||||
// add keys
|
// add keys
|
||||||
for (int i = 0; i < totcu; i++) {
|
for (int i = 0; i < totcu; i++) {
|
||||||
if (i < 4)
|
if (i < 4)
|
||||||
add_bezt(newcu[i], fra, rot[i]);
|
add_bezt(newcu[i], fra, rot[i]);
|
||||||
else if (i < 7)
|
else if (i < 7)
|
||||||
add_bezt(newcu[i], fra, loc[i - 4]);
|
add_bezt(newcu[i], fra, loc[i - 4]);
|
||||||
else
|
else
|
||||||
add_bezt(newcu[i], fra, scale[i - 7]);
|
add_bezt(newcu[i], fra, scale[i - 7]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
verify_adt_action((ID*)&ob->id, 1);
|
verify_adt_action((ID*)&ob->id, 1);
|
||||||
@ -774,13 +774,13 @@ std::sort(frames.begin(), frames.end());
|
|||||||
BLI_addtail(curves, newcu[i]);
|
BLI_addtail(curves, newcu[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_joint) {
|
if (is_joint) {
|
||||||
bPoseChannel *chan = get_pose_channel(ob->pose, bone_name);
|
bPoseChannel *chan = get_pose_channel(ob->pose, bone_name);
|
||||||
chan->rotmode = ROT_MODE_QUAT;
|
chan->rotmode = ROT_MODE_QUAT;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ob->rotmode = ROT_MODE_QUAT;
|
ob->rotmode = ROT_MODE_QUAT;
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -807,18 +807,18 @@ void AnimationImporter::translate_Animations ( COLLADAFW::Node * node ,
|
|||||||
|
|
||||||
if ( (animType->transform) != 0 )
|
if ( (animType->transform) != 0 )
|
||||||
{
|
{
|
||||||
const char *bone_name = is_joint ? bc_get_joint_name(node) : NULL;
|
const char *bone_name = is_joint ? bc_get_joint_name(node) : NULL;
|
||||||
char joint_path[200];
|
char joint_path[200];
|
||||||
|
|
||||||
if ( is_joint )
|
if ( is_joint )
|
||||||
armature_importer->get_rna_path_for_joint(node, joint_path, sizeof(joint_path));
|
armature_importer->get_rna_path_for_joint(node, joint_path, sizeof(joint_path));
|
||||||
|
|
||||||
|
|
||||||
if (!ob->adt || !ob->adt->action) act = verify_adt_action((ID*)&ob->id, 1);
|
if (!ob->adt || !ob->adt->action) act = verify_adt_action((ID*)&ob->id, 1);
|
||||||
else act = ob->adt->action;
|
else act = ob->adt->action;
|
||||||
|
|
||||||
//Get the list of animation curves of the object
|
//Get the list of animation curves of the object
|
||||||
ListBase *AnimCurves = &(act->curves);
|
ListBase *AnimCurves = &(act->curves);
|
||||||
|
|
||||||
const COLLADAFW::TransformationPointerArray& nodeTransforms = node->getTransformations();
|
const COLLADAFW::TransformationPointerArray& nodeTransforms = node->getTransformations();
|
||||||
|
|
||||||
@ -842,23 +842,23 @@ void AnimationImporter::translate_Animations ( COLLADAFW::Node * node ,
|
|||||||
//all the curves belonging to the current binding
|
//all the curves belonging to the current binding
|
||||||
std::vector<FCurve*> animcurves;
|
std::vector<FCurve*> animcurves;
|
||||||
for (unsigned int j = 0; j < bindings.getCount(); j++) {
|
for (unsigned int j = 0; j < bindings.getCount(); j++) {
|
||||||
animcurves = curve_map[bindings[j].animation];
|
animcurves = curve_map[bindings[j].animation];
|
||||||
if ( is_matrix )
|
if ( is_matrix )
|
||||||
apply_matrix_curves(ob, animcurves, root , node, transform );
|
apply_matrix_curves(ob, animcurves, root , node, transform );
|
||||||
else {
|
else {
|
||||||
//calculate rnapaths and array index of fcurves according to transformation and animation class
|
//calculate rnapaths and array index of fcurves according to transformation and animation class
|
||||||
Assign_transform_animations(transform, &bindings[j], &animcurves, is_joint, joint_path );
|
Assign_transform_animations(transform, &bindings[j], &animcurves, is_joint, joint_path );
|
||||||
|
|
||||||
std::vector<FCurve*>::iterator iter;
|
std::vector<FCurve*>::iterator iter;
|
||||||
//Add the curves of the current animation to the object
|
//Add the curves of the current animation to the object
|
||||||
for (iter = animcurves.begin(); iter != animcurves.end(); iter++) {
|
for (iter = animcurves.begin(); iter != animcurves.end(); iter++) {
|
||||||
FCurve * fcu = *iter;
|
FCurve * fcu = *iter;
|
||||||
if ((ob->type == OB_ARMATURE))
|
if ((ob->type == OB_ARMATURE))
|
||||||
add_bone_fcurve( ob, node , fcu );
|
add_bone_fcurve( ob, node , fcu );
|
||||||
else
|
else
|
||||||
BLI_addtail(AnimCurves, fcu);
|
BLI_addtail(AnimCurves, fcu);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (is_rotation) {
|
if (is_rotation) {
|
||||||
@ -880,7 +880,7 @@ void AnimationImporter::translate_Animations ( COLLADAFW::Node * node ,
|
|||||||
Lamp * lamp = (Lamp*) ob->data;
|
Lamp * lamp = (Lamp*) ob->data;
|
||||||
|
|
||||||
if (!lamp->adt || !lamp->adt->action) act = verify_adt_action((ID*)&lamp->id, 1);
|
if (!lamp->adt || !lamp->adt->action) act = verify_adt_action((ID*)&lamp->id, 1);
|
||||||
else act = lamp->adt->action;
|
else act = lamp->adt->action;
|
||||||
|
|
||||||
ListBase *AnimCurves = &(act->curves);
|
ListBase *AnimCurves = &(act->curves);
|
||||||
const COLLADAFW::InstanceLightPointerArray& nodeLights = node->getInstanceLights();
|
const COLLADAFW::InstanceLightPointerArray& nodeLights = node->getInstanceLights();
|
||||||
@ -918,7 +918,7 @@ void AnimationImporter::translate_Animations ( COLLADAFW::Node * node ,
|
|||||||
Camera * camera = (Camera*) ob->data;
|
Camera * camera = (Camera*) ob->data;
|
||||||
|
|
||||||
if (!camera->adt || !camera->adt->action) act = verify_adt_action((ID*)&camera->id, 1);
|
if (!camera->adt || !camera->adt->action) act = verify_adt_action((ID*)&camera->id, 1);
|
||||||
else act = camera->adt->action;
|
else act = camera->adt->action;
|
||||||
|
|
||||||
ListBase *AnimCurves = &(act->curves);
|
ListBase *AnimCurves = &(act->curves);
|
||||||
const COLLADAFW::InstanceCameraPointerArray& nodeCameras= node->getInstanceCameras();
|
const COLLADAFW::InstanceCameraPointerArray& nodeCameras= node->getInstanceCameras();
|
||||||
@ -957,9 +957,9 @@ void AnimationImporter::translate_Animations ( COLLADAFW::Node * node ,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ( animType->material != 0){
|
if ( animType->material != 0){
|
||||||
Material *ma = give_current_material(ob, 1);
|
Material *ma = give_current_material(ob, 1);
|
||||||
if (!ma->adt || !ma->adt->action) act = verify_adt_action((ID*)&ma->id, 1);
|
if (!ma->adt || !ma->adt->action) act = verify_adt_action((ID*)&ma->id, 1);
|
||||||
else act = ma->adt->action;
|
else act = ma->adt->action;
|
||||||
|
|
||||||
ListBase *AnimCurves = &(act->curves);
|
ListBase *AnimCurves = &(act->curves);
|
||||||
|
|
||||||
@ -1039,7 +1039,7 @@ AnimationImporter::AnimMix* AnimationImporter::get_animation_type ( const COLLAD
|
|||||||
|
|
||||||
if ( camera->getCameraType() == COLLADAFW::Camera::PERSPECTIVE )
|
if ( camera->getCameraType() == COLLADAFW::Camera::PERSPECTIVE )
|
||||||
{
|
{
|
||||||
types->camera = setAnimType(&(camera->getXMag()),(types->camera), CAMERA_XFOV);
|
types->camera = setAnimType(&(camera->getXMag()),(types->camera), CAMERA_XFOV);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -1063,7 +1063,7 @@ AnimationImporter::AnimMix* AnimationImporter::get_animation_type ( const COLLAD
|
|||||||
types->material = setAnimType(&(efc->getShininess()),(types->material), MATERIAL_SHININESS);
|
types->material = setAnimType(&(efc->getShininess()),(types->material), MATERIAL_SHININESS);
|
||||||
types->material = setAnimType(&(efc->getSpecular().getColor()),(types->material), MATERIAL_SPEC_COLOR);
|
types->material = setAnimType(&(efc->getSpecular().getColor()),(types->material), MATERIAL_SPEC_COLOR);
|
||||||
types->material = setAnimType(&(efc->getDiffuse().getColor()),(types->material), MATERIAL_DIFF_COLOR);
|
types->material = setAnimType(&(efc->getDiffuse().getColor()),(types->material), MATERIAL_DIFF_COLOR);
|
||||||
// types->material = setAnimType(&(efc->get()),(types->material), MATERIAL_TRANSPARENCY);
|
// types->material = setAnimType(&(efc->get()),(types->material), MATERIAL_TRANSPARENCY);
|
||||||
types->material = setAnimType(&(efc->getIndexOfRefraction()),(types->material), MATERIAL_IOR);
|
types->material = setAnimType(&(efc->getIndexOfRefraction()),(types->material), MATERIAL_IOR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1448,9 +1448,9 @@ bool AnimationImporter::evaluate_animation(COLLADAFW::Transformation *tm, float
|
|||||||
COLLADAFW::Transformation::TransformationType type = tm->getTransformationType();
|
COLLADAFW::Transformation::TransformationType type = tm->getTransformationType();
|
||||||
|
|
||||||
if (type != COLLADAFW::Transformation::ROTATE &&
|
if (type != COLLADAFW::Transformation::ROTATE &&
|
||||||
type != COLLADAFW::Transformation::SCALE &&
|
type != COLLADAFW::Transformation::SCALE &&
|
||||||
type != COLLADAFW::Transformation::TRANSLATE &&
|
type != COLLADAFW::Transformation::TRANSLATE &&
|
||||||
type != COLLADAFW::Transformation::MATRIX) {
|
type != COLLADAFW::Transformation::MATRIX) {
|
||||||
fprintf(stderr, "animation of transformation %d is not supported yet\n", type);
|
fprintf(stderr, "animation of transformation %d is not supported yet\n", type);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -207,4 +207,4 @@ public:
|
|||||||
void extra_data_importer(std::string elementName);
|
void extra_data_importer(std::string elementName);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -188,7 +188,7 @@ void ArmatureExporter::add_bone_node(Bone *bone, Object *ob_arm)
|
|||||||
for (Bone *child = (Bone*)bone->childbase.first; child; child = child->next) {
|
for (Bone *child = (Bone*)bone->childbase.first; child; child = child->next) {
|
||||||
add_bone_node(child, ob_arm);
|
add_bone_node(child, ob_arm);
|
||||||
}
|
}
|
||||||
node.end();
|
node.end();
|
||||||
//}
|
//}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -87,7 +87,7 @@ void ArmatureImporter::create_unskinned_bone( COLLADAFW::Node *node, EditBone *p
|
|||||||
if ( it != finished_joints.end()) return;
|
if ( it != finished_joints.end()) return;
|
||||||
|
|
||||||
float mat[4][4];
|
float mat[4][4];
|
||||||
float obmat[4][4];
|
float obmat[4][4];
|
||||||
|
|
||||||
// object-space
|
// object-space
|
||||||
get_node_mat(obmat, node, NULL, NULL);
|
get_node_mat(obmat, node, NULL, NULL);
|
||||||
@ -296,7 +296,7 @@ void ArmatureImporter::add_leaf_bone(float mat[][4], EditBone *bone, COLLADAFW:
|
|||||||
et->setData("tip_z",&z);
|
et->setData("tip_z",&z);
|
||||||
float vec[3] = {x,y,z};
|
float vec[3] = {x,y,z};
|
||||||
copy_v3_v3(leaf.bone->tail, leaf.bone->head);
|
copy_v3_v3(leaf.bone->tail, leaf.bone->head);
|
||||||
add_v3_v3v3(leaf.bone->tail, leaf.bone->head, vec);
|
add_v3_v3v3(leaf.bone->tail, leaf.bone->head, vec);
|
||||||
}else
|
}else
|
||||||
leaf_bones.push_back(leaf);
|
leaf_bones.push_back(leaf);
|
||||||
}
|
}
|
||||||
@ -310,9 +310,10 @@ void ArmatureImporter::fix_leaf_bones( )
|
|||||||
LeafBone& leaf = *it;
|
LeafBone& leaf = *it;
|
||||||
|
|
||||||
// pointing up
|
// pointing up
|
||||||
float vec[3] = {0.0f, 0.0f, 1.0f};
|
float vec[3] = {0.0f, 0.0f, 0.1f};
|
||||||
|
|
||||||
//mul_v3_fl(vec, leaf_bone_length);
|
// if parent: take parent length and direction
|
||||||
|
if(leaf.bone->parent) sub_v3_v3v3(vec, leaf.bone->parent->tail, leaf.bone->parent->head);
|
||||||
|
|
||||||
copy_v3_v3(leaf.bone->tail, leaf.bone->head);
|
copy_v3_v3(leaf.bone->tail, leaf.bone->head);
|
||||||
add_v3_v3v3(leaf.bone->tail, leaf.bone->head, vec);
|
add_v3_v3v3(leaf.bone->tail, leaf.bone->head, vec);
|
||||||
|
@ -115,7 +115,7 @@ private:
|
|||||||
|
|
||||||
void fix_leaf_bones();
|
void fix_leaf_bones();
|
||||||
|
|
||||||
void set_pose ( Object * ob_arm , COLLADAFW::Node * root_node ,char * parentname, float parent_mat[][4]);
|
void set_pose ( Object * ob_arm , COLLADAFW::Node * root_node ,char * parentname, float parent_mat[][4]);
|
||||||
|
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
|
@ -328,9 +328,7 @@ void DocumentExporter::exportCurrentScene(Scene *sce, const char* filename, bool
|
|||||||
//scale = RNA_struct_find_property(&unit_settings, "scale_length");
|
//scale = RNA_struct_find_property(&unit_settings, "scale_length");
|
||||||
|
|
||||||
std::string unitname = "meter";
|
std::string unitname = "meter";
|
||||||
float linearmeasure = 1.0f;
|
float linearmeasure = RNA_float_get(&unit_settings, "scale_length");
|
||||||
|
|
||||||
linearmeasure = RNA_float_get(&unit_settings, "scale_length");
|
|
||||||
|
|
||||||
switch(RNA_property_enum_get(&unit_settings, system)) {
|
switch(RNA_property_enum_get(&unit_settings, system)) {
|
||||||
case USER_UNIT_NONE:
|
case USER_UNIT_NONE:
|
||||||
@ -368,8 +366,7 @@ void DocumentExporter::exportCurrentScene(Scene *sce, const char* filename, bool
|
|||||||
|
|
||||||
asset.setUnit(unitname, linearmeasure);
|
asset.setUnit(unitname, linearmeasure);
|
||||||
asset.setUpAxisType(COLLADASW::Asset::Z_UP);
|
asset.setUpAxisType(COLLADASW::Asset::Z_UP);
|
||||||
// TODO: need an Author field in userpref
|
if(U.author[0] != '\0') {
|
||||||
if(strlen(U.author) > 0) {
|
|
||||||
asset.getContributor().mAuthor = U.author;
|
asset.getContributor().mAuthor = U.author;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -56,7 +56,7 @@ bool ExtraHandler::textData(const char* text, size_t textLength)
|
|||||||
{
|
{
|
||||||
char buf[1024];
|
char buf[1024];
|
||||||
|
|
||||||
if(currentElement.length() == 0) return false;
|
if(currentElement.length() == 0 || currentExtraTags == 0) return false;
|
||||||
|
|
||||||
BLI_snprintf(buf, textLength+1, "%s", text);
|
BLI_snprintf(buf, textLength+1, "%s", text);
|
||||||
currentExtraTags->addTag(currentElement, std::string(buf));
|
currentExtraTags->addTag(currentElement, std::string(buf));
|
||||||
|
@ -90,32 +90,28 @@ std::string ExtraTags::asString( std::string tag, bool *ok)
|
|||||||
void ExtraTags::setData(std::string tag, short *data)
|
void ExtraTags::setData(std::string tag, short *data)
|
||||||
{
|
{
|
||||||
bool ok = false;
|
bool ok = false;
|
||||||
int tmp = 0;
|
int tmp = asInt(tag, &ok);
|
||||||
tmp = asInt(tag, &ok);
|
|
||||||
if(ok)
|
if(ok)
|
||||||
*data = (short)tmp;
|
*data = (short)tmp;
|
||||||
}
|
}
|
||||||
void ExtraTags::setData(std::string tag, int *data)
|
void ExtraTags::setData(std::string tag, int *data)
|
||||||
{
|
{
|
||||||
bool ok = false;
|
bool ok = false;
|
||||||
int tmp = 0;
|
int tmp = asInt(tag, &ok);
|
||||||
tmp = asInt(tag, &ok);
|
|
||||||
if(ok)
|
if(ok)
|
||||||
*data = tmp;
|
*data = tmp;
|
||||||
}
|
}
|
||||||
void ExtraTags::setData(std::string tag, float *data)
|
void ExtraTags::setData(std::string tag, float *data)
|
||||||
{
|
{
|
||||||
bool ok = false;
|
bool ok = false;
|
||||||
float tmp = 0.0f;
|
float tmp = asFloat(tag, &ok);
|
||||||
tmp = asFloat(tag, &ok);
|
|
||||||
if(ok)
|
if(ok)
|
||||||
*data = tmp;
|
*data = tmp;
|
||||||
}
|
}
|
||||||
void ExtraTags::setData(std::string tag, char *data)
|
void ExtraTags::setData(std::string tag, char *data)
|
||||||
{
|
{
|
||||||
bool ok = false;
|
bool ok = false;
|
||||||
int tmp = 0;
|
int tmp = asInt(tag, &ok);
|
||||||
tmp = asInt(tag, &ok);
|
|
||||||
if(ok)
|
if(ok)
|
||||||
*data = (char)tmp;
|
*data = (char)tmp;
|
||||||
}
|
}
|
||||||
|
@ -220,8 +220,8 @@ void MeshImporter::set_face_uv(MTFace *mtface, UVDataWrapper &uvs,
|
|||||||
|
|
||||||
if (quad) uvs.getUV(indices[index + 3], mtface->uv[3]);
|
if (quad) uvs.getUV(indices[index + 3], mtface->uv[3]);
|
||||||
|
|
||||||
#ifdef COLLADA_DEBUG
|
#if 1 // #ifdef COLLADA_DEBUG
|
||||||
/*if (quad) {
|
if (quad) {
|
||||||
fprintf(stderr, "face uv:\n"
|
fprintf(stderr, "face uv:\n"
|
||||||
"((%d, %d, %d, %d))\n"
|
"((%d, %d, %d, %d))\n"
|
||||||
"((%.1f, %.1f), (%.1f, %.1f), (%.1f, %.1f), (%.1f, %.1f))\n",
|
"((%.1f, %.1f), (%.1f, %.1f), (%.1f, %.1f), (%.1f, %.1f))\n",
|
||||||
@ -248,7 +248,7 @@ void MeshImporter::set_face_uv(MTFace *mtface, UVDataWrapper &uvs,
|
|||||||
mtface->uv[0][0], mtface->uv[0][1],
|
mtface->uv[0][0], mtface->uv[0][1],
|
||||||
mtface->uv[1][0], mtface->uv[1][1],
|
mtface->uv[1][0], mtface->uv[1][1],
|
||||||
mtface->uv[2][0], mtface->uv[2][1]);
|
mtface->uv[2][0], mtface->uv[2][1]);
|
||||||
}*/
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -411,7 +411,7 @@ int MeshImporter::count_new_tris(COLLADAFW::Mesh *mesh, Mesh *me)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// TODO: import uv set names
|
// TODO: import uv set names
|
||||||
void MeshImporter::read_faces(COLLADAFW::Mesh *mesh, Mesh *me, int new_tris) //TODO:: Refactor. Possibly replace by iterators
|
void MeshImporter::read_faces(COLLADAFW::Mesh *mesh, Mesh *me, int new_tris) //TODO:: Refactor. Possibly replace by iterators
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
@ -587,7 +587,7 @@ void MeshImporter::read_faces(COLLADAFW::Mesh *mesh, Mesh *me, int new_tris)
|
|||||||
for (k = 0; k < index_list_array.getCount(); k++) {
|
for (k = 0; k < index_list_array.getCount(); k++) {
|
||||||
// get mtface by face index and uv set index
|
// get mtface by face index and uv set index
|
||||||
MTFace *mtface = (MTFace*)CustomData_get_layer_n(&me->fdata, CD_MTFACE, k);
|
MTFace *mtface = (MTFace*)CustomData_get_layer_n(&me->fdata, CD_MTFACE, k);
|
||||||
set_face_uv(&mtface[face_index], uvs, *index_list_array[k], index, mface->v4 != 0);
|
set_face_uv(&mtface[face_index], uvs, *index_list_array[k], index, vcount == 4);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -266,9 +266,9 @@ void SkinInfo::link_armature(bContext *C, Object *ob, std::map<COLLADAFW::Unique
|
|||||||
// ^ bone index can be -1 meaning weight toward bind shape, how to express this in Blender?
|
// ^ bone index can be -1 meaning weight toward bind shape, how to express this in Blender?
|
||||||
|
|
||||||
// for each vertex in weight indices
|
// for each vertex in weight indices
|
||||||
// for each bone index in vertex
|
// for each bone index in vertex
|
||||||
// add vertex to group at group index
|
// add vertex to group at group index
|
||||||
// treat group index -1 specially
|
// treat group index -1 specially
|
||||||
|
|
||||||
// get def group by index with BLI_findlink
|
// get def group by index with BLI_findlink
|
||||||
|
|
||||||
|
@ -50,7 +50,7 @@ void TransformWriter::add_node_transform(COLLADASW::Node& node, float mat[][4],
|
|||||||
|
|
||||||
double dmat[4][4];
|
double dmat[4][4];
|
||||||
UnitConverter* converter = new UnitConverter();
|
UnitConverter* converter = new UnitConverter();
|
||||||
converter->mat4_to_dae_double(dmat,local);
|
converter->mat4_to_dae_double(dmat,local);
|
||||||
|
|
||||||
TransformBase::decompose(local, loc, rot, NULL, scale);
|
TransformBase::decompose(local, loc, rot, NULL, scale);
|
||||||
if ( node.getType() == COLLADASW::Node::JOINT)
|
if ( node.getType() == COLLADASW::Node::JOINT)
|
||||||
|
@ -1177,28 +1177,33 @@ static size_t animfilter_nla (bAnimContext *UNUSED(ac), ListBase *anim_data, bDo
|
|||||||
/* determine what animation data from AnimData block should get displayed */
|
/* determine what animation data from AnimData block should get displayed */
|
||||||
static size_t animfilter_block_data (bAnimContext *ac, ListBase *anim_data, bDopeSheet *ads, ID *id, int filter_mode)
|
static size_t animfilter_block_data (bAnimContext *ac, ListBase *anim_data, bDopeSheet *ads, ID *id, int filter_mode)
|
||||||
{
|
{
|
||||||
IdAdtTemplate *iat = (IdAdtTemplate*)id;
|
|
||||||
AnimData *adt = BKE_animdata_from_id(id);
|
AnimData *adt = BKE_animdata_from_id(id);
|
||||||
size_t items = 0;
|
size_t items = 0;
|
||||||
|
|
||||||
/* NOTE: this macro is used instead of inlining the logic here, since this sort of filtering is still needed
|
/* image object datablocks have no anim-data so check for NULL */
|
||||||
* in a few places in he rest of the code still - notably for the few cases where special mode-based
|
if(adt) {
|
||||||
* different types of data expanders are required.
|
IdAdtTemplate *iat = (IdAdtTemplate*)id;
|
||||||
*/
|
|
||||||
ANIMDATA_FILTER_CASES(iat,
|
/* NOTE: this macro is used instead of inlining the logic here, since this sort of filtering is still needed
|
||||||
{ /* AnimData */
|
* in a few places in he rest of the code still - notably for the few cases where special mode-based
|
||||||
/* specifically filter animdata block */
|
* different types of data expanders are required.
|
||||||
ANIMCHANNEL_NEW_CHANNEL(adt, ANIMTYPE_ANIMDATA, id);
|
*/
|
||||||
},
|
ANIMDATA_FILTER_CASES(iat,
|
||||||
{ /* NLA */
|
{ /* AnimData */
|
||||||
items += animfilter_nla(ac, anim_data, ads, adt, filter_mode, id);
|
/* specifically filter animdata block */
|
||||||
},
|
ANIMCHANNEL_NEW_CHANNEL(adt, ANIMTYPE_ANIMDATA, id);
|
||||||
{ /* Drivers */
|
},
|
||||||
items += animfilter_fcurves(anim_data, ads, adt->drivers.first, NULL, filter_mode, id);
|
{ /* NLA */
|
||||||
},
|
items += animfilter_nla(ac, anim_data, ads, adt, filter_mode, id);
|
||||||
{ /* Keyframes */
|
},
|
||||||
items += animfilter_action(ac, anim_data, ads, adt->action, filter_mode, id);
|
{ /* Drivers */
|
||||||
});
|
items += animfilter_fcurves(anim_data, ads, adt->drivers.first, NULL, filter_mode, id);
|
||||||
|
},
|
||||||
|
{ /* Keyframes */
|
||||||
|
items += animfilter_action(ac, anim_data, ads, adt->action, filter_mode, id);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
return items;
|
return items;
|
||||||
}
|
}
|
||||||
|
@ -530,6 +530,7 @@ static short visualkey_can_use (PointerRNA *ptr, PropertyRNA *prop)
|
|||||||
{
|
{
|
||||||
bConstraint *con= NULL;
|
bConstraint *con= NULL;
|
||||||
short searchtype= VISUALKEY_NONE;
|
short searchtype= VISUALKEY_NONE;
|
||||||
|
short has_parent = FALSE;
|
||||||
char *identifier= NULL;
|
char *identifier= NULL;
|
||||||
|
|
||||||
/* validate data */
|
/* validate data */
|
||||||
@ -548,6 +549,7 @@ static short visualkey_can_use (PointerRNA *ptr, PropertyRNA *prop)
|
|||||||
|
|
||||||
con= ob->constraints.first;
|
con= ob->constraints.first;
|
||||||
identifier= (char *)RNA_property_identifier(prop);
|
identifier= (char *)RNA_property_identifier(prop);
|
||||||
|
has_parent= (ob->parent != NULL);
|
||||||
}
|
}
|
||||||
else if (ptr->type == &RNA_PoseBone) {
|
else if (ptr->type == &RNA_PoseBone) {
|
||||||
/* Pose Channel */
|
/* Pose Channel */
|
||||||
@ -555,10 +557,11 @@ static short visualkey_can_use (PointerRNA *ptr, PropertyRNA *prop)
|
|||||||
|
|
||||||
con= pchan->constraints.first;
|
con= pchan->constraints.first;
|
||||||
identifier= (char *)RNA_property_identifier(prop);
|
identifier= (char *)RNA_property_identifier(prop);
|
||||||
|
has_parent= (pchan->parent != NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* check if any data to search using */
|
/* check if any data to search using */
|
||||||
if (ELEM(NULL, con, identifier))
|
if (ELEM(NULL, con, identifier) && (has_parent == FALSE))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* location or rotation identifiers only... */
|
/* location or rotation identifiers only... */
|
||||||
@ -573,7 +576,12 @@ static short visualkey_can_use (PointerRNA *ptr, PropertyRNA *prop)
|
|||||||
|
|
||||||
|
|
||||||
/* only search if a searchtype and initial constraint are available */
|
/* only search if a searchtype and initial constraint are available */
|
||||||
if (searchtype && con) {
|
if (searchtype) {
|
||||||
|
/* parent is always matching */
|
||||||
|
if (has_parent)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
/* constraints */
|
||||||
for (; con; con= con->next) {
|
for (; con; con= con->next) {
|
||||||
/* only consider constraint if it is not disabled, and has influence */
|
/* only consider constraint if it is not disabled, and has influence */
|
||||||
if (con->flag & CONSTRAINT_DISABLE) continue;
|
if (con->flag & CONSTRAINT_DISABLE) continue;
|
||||||
@ -645,39 +653,34 @@ static float visualkey_get_value (PointerRNA *ptr, PropertyRNA *prop, int array_
|
|||||||
if (ptr->type == &RNA_Object) {
|
if (ptr->type == &RNA_Object) {
|
||||||
Object *ob= (Object *)ptr->data;
|
Object *ob= (Object *)ptr->data;
|
||||||
|
|
||||||
/* parented objects are not supported, as the effects of the parent
|
/* only Location or Rotation keyframes are supported now */
|
||||||
* are included in the matrix, which kindof beats the point
|
if (strstr(identifier, "location")) {
|
||||||
*/
|
return ob->obmat[3][array_index];
|
||||||
if (ob->parent == NULL) {
|
}
|
||||||
/* only Location or Rotation keyframes are supported now */
|
else if (strstr(identifier, "rotation_euler")) {
|
||||||
if (strstr(identifier, "location")) {
|
float eul[3];
|
||||||
return ob->obmat[3][array_index];
|
|
||||||
}
|
|
||||||
else if (strstr(identifier, "rotation_euler")) {
|
|
||||||
float eul[3];
|
|
||||||
|
|
||||||
mat4_to_eulO(eul, ob->rotmode, ob->obmat);
|
mat4_to_eulO(eul, ob->rotmode, ob->obmat);
|
||||||
return eul[array_index];
|
return eul[array_index];
|
||||||
}
|
}
|
||||||
else if (strstr(identifier, "rotation_quaternion")) {
|
else if (strstr(identifier, "rotation_quaternion")) {
|
||||||
float trimat[3][3], quat[4];
|
float trimat[3][3], quat[4];
|
||||||
|
|
||||||
copy_m3_m4(trimat, ob->obmat);
|
copy_m3_m4(trimat, ob->obmat);
|
||||||
mat3_to_quat_is_ok(quat, trimat);
|
mat3_to_quat_is_ok(quat, trimat);
|
||||||
|
|
||||||
return quat[array_index];
|
return quat[array_index];
|
||||||
}
|
}
|
||||||
else if (strstr(identifier, "rotation_axis_angle")) {
|
else if (strstr(identifier, "rotation_axis_angle")) {
|
||||||
float axis[3], angle;
|
float axis[3], angle;
|
||||||
|
|
||||||
mat4_to_axis_angle(axis, &angle, ob->obmat);
|
mat4_to_axis_angle(axis, &angle, ob->obmat);
|
||||||
|
|
||||||
/* w = 0, x,y,z = 1,2,3 */
|
/* w = 0, x,y,z = 1,2,3 */
|
||||||
if (array_index == 0)
|
if (array_index == 0)
|
||||||
return angle;
|
return angle;
|
||||||
else
|
else
|
||||||
return axis[array_index - 1];
|
return axis[array_index - 1];
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (ptr->type == &RNA_PoseBone) {
|
else if (ptr->type == &RNA_PoseBone) {
|
||||||
|
@ -771,6 +771,10 @@ void ui_draw_but_HISTOGRAM(ARegion *ar, uiBut *but, uiWidgetColors *UNUSED(wcol)
|
|||||||
uiSetRoundBox(15);
|
uiSetRoundBox(15);
|
||||||
uiDrawBox(GL_POLYGON, rect.xmin-1, rect.ymin-1, rect.xmax+1, rect.ymax+1, 3.0f);
|
uiDrawBox(GL_POLYGON, rect.xmin-1, rect.ymin-1, rect.xmax+1, rect.ymax+1, 3.0f);
|
||||||
|
|
||||||
|
/* need scissor test, histogram can draw outside of boundary */
|
||||||
|
glGetIntegerv(GL_VIEWPORT, scissor);
|
||||||
|
glScissor(ar->winrct.xmin + (rect.xmin-1), ar->winrct.ymin+(rect.ymin-1), (rect.xmax+1)-(rect.xmin-1), (rect.ymax+1)-(rect.ymin-1));
|
||||||
|
|
||||||
glColor4f(1.f, 1.f, 1.f, 0.08f);
|
glColor4f(1.f, 1.f, 1.f, 0.08f);
|
||||||
/* draw grid lines here */
|
/* draw grid lines here */
|
||||||
for (i=1; i<4; i++) {
|
for (i=1; i<4; i++) {
|
||||||
@ -778,10 +782,6 @@ void ui_draw_but_HISTOGRAM(ARegion *ar, uiBut *but, uiWidgetColors *UNUSED(wcol)
|
|||||||
fdrawline(rect.xmin+(i/4.f)*w, rect.ymin, rect.xmin+(i/4.f)*w, rect.ymax);
|
fdrawline(rect.xmin+(i/4.f)*w, rect.ymin, rect.xmin+(i/4.f)*w, rect.ymax);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* need scissor test, histogram can draw outside of boundary */
|
|
||||||
glGetIntegerv(GL_VIEWPORT, scissor);
|
|
||||||
glScissor(ar->winrct.xmin + (rect.xmin-1), ar->winrct.ymin+(rect.ymin-1), (rect.xmax+1)-(rect.xmin-1), (rect.ymax+1)-(rect.ymin-1));
|
|
||||||
|
|
||||||
if (hist->mode == HISTO_MODE_LUMA)
|
if (hist->mode == HISTO_MODE_LUMA)
|
||||||
histogram_draw_one(1.0, 1.0, 1.0, 0.75, rect.xmin, rect.ymin, w, h, hist->data_luma, res);
|
histogram_draw_one(1.0, 1.0, 1.0, 0.75, rect.xmin, rect.ymin, w, h, hist->data_luma, res);
|
||||||
else {
|
else {
|
||||||
|
@ -1099,7 +1099,7 @@ void load_editMesh(Scene *scene, Object *obedit)
|
|||||||
int j;
|
int j;
|
||||||
|
|
||||||
for (ob=G.main->object.first; ob; ob=ob->id.next) {
|
for (ob=G.main->object.first; ob; ob=ob->id.next) {
|
||||||
if (ob->parent==ob && ELEM(ob->partype, PARVERT1,PARVERT3)) {
|
if (ob->parent==obedit && ELEM(ob->partype, PARVERT1,PARVERT3)) {
|
||||||
|
|
||||||
/* duplicate code from below, make it function later...? */
|
/* duplicate code from below, make it function later...? */
|
||||||
if (!vertMap) {
|
if (!vertMap) {
|
||||||
|
@ -1141,6 +1141,9 @@ short extrudeflag_face_indiv(EditMesh *em, short UNUSED(flag), float *UNUSED(nor
|
|||||||
|
|
||||||
EM_select_flush(em);
|
EM_select_flush(em);
|
||||||
|
|
||||||
|
/* step 5; update normals after extrude */
|
||||||
|
recalc_editnormals(em);
|
||||||
|
|
||||||
return 'n';
|
return 'n';
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1206,6 +1209,9 @@ short extrudeflag_edges_indiv(EditMesh *em, short flag, float *nor)
|
|||||||
if(eed->v1->f & eed->v2->f & flag) eed->f |= flag;
|
if(eed->v1->f & eed->v2->f & flag) eed->f |= flag;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* update normals after extrude */
|
||||||
|
recalc_editnormals(em);
|
||||||
|
|
||||||
if(is_zero_v3(nor)) return 'g'; // g is grab
|
if(is_zero_v3(nor)) return 'g'; // g is grab
|
||||||
return 'n'; // n is for normal constraint
|
return 'n'; // n is for normal constraint
|
||||||
}
|
}
|
||||||
@ -1485,6 +1491,9 @@ static short extrudeflag_edge(Object *obedit, EditMesh *em, short UNUSED(flag),
|
|||||||
|
|
||||||
EM_select_flush(em);
|
EM_select_flush(em);
|
||||||
|
|
||||||
|
/* step 8; update normals after extrude */
|
||||||
|
recalc_editnormals(em);
|
||||||
|
|
||||||
if(is_zero_v3(nor)) return 'g'; // grab
|
if(is_zero_v3(nor)) return 'g'; // grab
|
||||||
return 'n'; // normal constraint
|
return 'n'; // normal constraint
|
||||||
}
|
}
|
||||||
|
@ -276,8 +276,10 @@ int ED_object_add_generic_get_opts(bContext *C, wmOperator *op, float *loc, floa
|
|||||||
RNA_boolean_set(op->ptr, "view_align", view_align);
|
RNA_boolean_set(op->ptr, "view_align", view_align);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (view_align)
|
if (view_align) {
|
||||||
ED_object_rotation_from_view(C, rot);
|
ED_object_rotation_from_view(C, rot);
|
||||||
|
RNA_float_set_array(op->ptr, "rotation", rot);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
RNA_float_get_array(op->ptr, "rotation", rot);
|
RNA_float_get_array(op->ptr, "rotation", rot);
|
||||||
|
|
||||||
|
@ -159,7 +159,7 @@ typedef struct {
|
|||||||
static void multiresbake_get_normal(const MResolvePixelData *data, float norm[], const int face_num, const int vert_index)
|
static void multiresbake_get_normal(const MResolvePixelData *data, float norm[], const int face_num, const int vert_index)
|
||||||
{
|
{
|
||||||
unsigned int indices[]= {data->mface[face_num].v1, data->mface[face_num].v2,
|
unsigned int indices[]= {data->mface[face_num].v1, data->mface[face_num].v2,
|
||||||
data->mface[face_num].v3, data->mface[face_num].v4};
|
data->mface[face_num].v3, data->mface[face_num].v4};
|
||||||
const int smoothnormal= (data->mface[face_num].flag & ME_SMOOTH);
|
const int smoothnormal= (data->mface[face_num].flag & ME_SMOOTH);
|
||||||
|
|
||||||
if(!smoothnormal) { /* flat */
|
if(!smoothnormal) { /* flat */
|
||||||
|
@ -1411,6 +1411,8 @@ static int forcefield_toggle_exec(bContext *C, wmOperator *UNUSED(op))
|
|||||||
else
|
else
|
||||||
ob->pd->forcefield = 0;
|
ob->pd->forcefield = 0;
|
||||||
|
|
||||||
|
WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, NULL);
|
||||||
|
|
||||||
return OPERATOR_FINISHED;
|
return OPERATOR_FINISHED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -64,6 +64,7 @@
|
|||||||
|
|
||||||
#include "ED_curve.h"
|
#include "ED_curve.h"
|
||||||
#include "ED_mesh.h"
|
#include "ED_mesh.h"
|
||||||
|
#include "ED_lattice.h"
|
||||||
#include "ED_screen.h"
|
#include "ED_screen.h"
|
||||||
|
|
||||||
#include "WM_types.h"
|
#include "WM_types.h"
|
||||||
@ -292,7 +293,7 @@ static int return_editcurve_indexar(Object *obedit, int *tot, int **indexar, flo
|
|||||||
return totvert;
|
return totvert;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int object_hook_index_array(Object *obedit, int *tot, int **indexar, char *name, float *cent_r)
|
static int object_hook_index_array(Scene *scene, Object *obedit, int *tot, int **indexar, char *name, float *cent_r)
|
||||||
{
|
{
|
||||||
*indexar= NULL;
|
*indexar= NULL;
|
||||||
*tot= 0;
|
*tot= 0;
|
||||||
@ -302,7 +303,12 @@ static int object_hook_index_array(Object *obedit, int *tot, int **indexar, char
|
|||||||
case OB_MESH:
|
case OB_MESH:
|
||||||
{
|
{
|
||||||
Mesh *me= obedit->data;
|
Mesh *me= obedit->data;
|
||||||
EditMesh *em = BKE_mesh_get_editmesh(me);
|
EditMesh *em;
|
||||||
|
|
||||||
|
load_editMesh(scene, obedit);
|
||||||
|
make_editMesh(scene, obedit);
|
||||||
|
|
||||||
|
em = BKE_mesh_get_editmesh(me);
|
||||||
|
|
||||||
/* check selected vertices first */
|
/* check selected vertices first */
|
||||||
if( return_editmesh_indexar(em, tot, indexar, cent_r)) {
|
if( return_editmesh_indexar(em, tot, indexar, cent_r)) {
|
||||||
@ -316,10 +322,17 @@ static int object_hook_index_array(Object *obedit, int *tot, int **indexar, char
|
|||||||
}
|
}
|
||||||
case OB_CURVE:
|
case OB_CURVE:
|
||||||
case OB_SURF:
|
case OB_SURF:
|
||||||
|
load_editNurb(obedit);
|
||||||
|
make_editNurb(obedit);
|
||||||
|
|
||||||
return return_editcurve_indexar(obedit, tot, indexar, cent_r);
|
return return_editcurve_indexar(obedit, tot, indexar, cent_r);
|
||||||
case OB_LATTICE:
|
case OB_LATTICE:
|
||||||
{
|
{
|
||||||
Lattice *lt= obedit->data;
|
Lattice *lt= obedit->data;
|
||||||
|
|
||||||
|
load_editLatt(obedit);
|
||||||
|
make_editLatt(obedit);
|
||||||
|
|
||||||
return return_editlattice_indexar(lt->editlatt->latt, tot, indexar, cent_r);
|
return return_editlattice_indexar(lt->editlatt->latt, tot, indexar, cent_r);
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
@ -427,7 +440,7 @@ static void add_hook_object(Main *bmain, Scene *scene, Object *obedit, Object *o
|
|||||||
int tot, ok, *indexar;
|
int tot, ok, *indexar;
|
||||||
char name[32];
|
char name[32];
|
||||||
|
|
||||||
ok = object_hook_index_array(obedit, &tot, &indexar, name, cent);
|
ok = object_hook_index_array(scene, obedit, &tot, &indexar, name, cent);
|
||||||
|
|
||||||
if (!ok) return; // XXX error("Requires selected vertices or active Vertex Group");
|
if (!ok) return; // XXX error("Requires selected vertices or active Vertex Group");
|
||||||
|
|
||||||
@ -760,7 +773,7 @@ static int object_hook_assign_exec(bContext *C, wmOperator *op)
|
|||||||
|
|
||||||
/* assign functionality */
|
/* assign functionality */
|
||||||
|
|
||||||
if(!object_hook_index_array(ob, &tot, &indexar, name, cent)) {
|
if(!object_hook_index_array(CTX_data_scene(C), ob, &tot, &indexar, name, cent)) {
|
||||||
BKE_report(op->reports, RPT_WARNING, "Requires selected vertices or active vertex group");
|
BKE_report(op->reports, RPT_WARNING, "Requires selected vertices or active vertex group");
|
||||||
return OPERATOR_CANCELLED;
|
return OPERATOR_CANCELLED;
|
||||||
}
|
}
|
||||||
|
@ -91,6 +91,8 @@
|
|||||||
|
|
||||||
#include "ED_armature.h"
|
#include "ED_armature.h"
|
||||||
#include "ED_curve.h"
|
#include "ED_curve.h"
|
||||||
|
#include "ED_lattice.h"
|
||||||
|
#include "ED_mesh.h"
|
||||||
#include "ED_keyframing.h"
|
#include "ED_keyframing.h"
|
||||||
#include "ED_object.h"
|
#include "ED_object.h"
|
||||||
#include "ED_screen.h"
|
#include "ED_screen.h"
|
||||||
@ -122,7 +124,12 @@ static int vertex_parent_set_exec(bContext *C, wmOperator *op)
|
|||||||
|
|
||||||
if(obedit->type==OB_MESH) {
|
if(obedit->type==OB_MESH) {
|
||||||
Mesh *me= obedit->data;
|
Mesh *me= obedit->data;
|
||||||
EditMesh *em = BKE_mesh_get_editmesh(me);
|
EditMesh *em;
|
||||||
|
|
||||||
|
load_editMesh(scene, obedit);
|
||||||
|
make_editMesh(scene, obedit);
|
||||||
|
|
||||||
|
em = BKE_mesh_get_editmesh(me);
|
||||||
|
|
||||||
eve= em->verts.first;
|
eve= em->verts.first;
|
||||||
while(eve) {
|
while(eve) {
|
||||||
@ -140,7 +147,12 @@ static int vertex_parent_set_exec(bContext *C, wmOperator *op)
|
|||||||
BKE_mesh_end_editmesh(me, em);
|
BKE_mesh_end_editmesh(me, em);
|
||||||
}
|
}
|
||||||
else if(ELEM(obedit->type, OB_SURF, OB_CURVE)) {
|
else if(ELEM(obedit->type, OB_SURF, OB_CURVE)) {
|
||||||
ListBase *editnurb= curve_get_editcurve(obedit);
|
ListBase *editnurb;
|
||||||
|
|
||||||
|
load_editNurb(obedit);
|
||||||
|
make_editNurb(obedit);
|
||||||
|
|
||||||
|
editnurb= curve_get_editcurve(obedit);
|
||||||
|
|
||||||
cu= obedit->data;
|
cu= obedit->data;
|
||||||
|
|
||||||
@ -180,7 +192,12 @@ static int vertex_parent_set_exec(bContext *C, wmOperator *op)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(obedit->type==OB_LATTICE) {
|
else if(obedit->type==OB_LATTICE) {
|
||||||
Lattice *lt= obedit->data;
|
Lattice *lt;
|
||||||
|
|
||||||
|
load_editLatt(obedit);
|
||||||
|
make_editLatt(obedit);
|
||||||
|
|
||||||
|
lt= obedit->data;
|
||||||
|
|
||||||
a= lt->editlatt->latt->pntsu*lt->editlatt->latt->pntsv*lt->editlatt->latt->pntsw;
|
a= lt->editlatt->latt->pntsu*lt->editlatt->latt->pntsv*lt->editlatt->latt->pntsw;
|
||||||
bp= lt->editlatt->latt->def;
|
bp= lt->editlatt->latt->def;
|
||||||
|
@ -221,6 +221,7 @@ void SOUND_OT_open_mono(wmOperatorType *ot)
|
|||||||
|
|
||||||
static int mixdown_exec(bContext *C, wmOperator *op)
|
static int mixdown_exec(bContext *C, wmOperator *op)
|
||||||
{
|
{
|
||||||
|
#ifdef WITH_AUDASPACE
|
||||||
char path[FILE_MAX];
|
char path[FILE_MAX];
|
||||||
char filename[FILE_MAX];
|
char filename[FILE_MAX];
|
||||||
Scene *scene;
|
Scene *scene;
|
||||||
@ -254,7 +255,10 @@ static int mixdown_exec(bContext *C, wmOperator *op)
|
|||||||
BKE_report(op->reports, RPT_ERROR, result);
|
BKE_report(op->reports, RPT_ERROR, result);
|
||||||
return OPERATOR_CANCELLED;
|
return OPERATOR_CANCELLED;
|
||||||
}
|
}
|
||||||
|
#else // WITH_AUDASPACE
|
||||||
|
(void)C;
|
||||||
|
(void)op;
|
||||||
|
#endif // WITH_AUDASPACE
|
||||||
return OPERATOR_FINISHED;
|
return OPERATOR_FINISHED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -278,6 +282,7 @@ static int mixdown_draw_check_prop(PropertyRNA *prop)
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef WITH_AUDASPACE
|
||||||
static void mixdown_draw(bContext *C, wmOperator *op)
|
static void mixdown_draw(bContext *C, wmOperator *op)
|
||||||
{
|
{
|
||||||
static EnumPropertyItem pcm_format_items[] = {
|
static EnumPropertyItem pcm_format_items[] = {
|
||||||
@ -429,9 +434,11 @@ static void mixdown_draw(bContext *C, wmOperator *op)
|
|||||||
/* main draw call */
|
/* main draw call */
|
||||||
uiDefAutoButsRNA(layout, &ptr, mixdown_draw_check_prop, '\0');
|
uiDefAutoButsRNA(layout, &ptr, mixdown_draw_check_prop, '\0');
|
||||||
}
|
}
|
||||||
|
#endif // WITH_AUDASPACE
|
||||||
|
|
||||||
void SOUND_OT_mixdown(wmOperatorType *ot)
|
void SOUND_OT_mixdown(wmOperatorType *ot)
|
||||||
{
|
{
|
||||||
|
#ifdef WITH_AUDASPACE
|
||||||
static EnumPropertyItem format_items[] = {
|
static EnumPropertyItem format_items[] = {
|
||||||
{AUD_FORMAT_U8, "U8", 0, "U8", "8 bit unsigned"},
|
{AUD_FORMAT_U8, "U8", 0, "U8", "8 bit unsigned"},
|
||||||
{AUD_FORMAT_S16, "S16", 0, "S16", "16 bit signed"},
|
{AUD_FORMAT_S16, "S16", 0, "S16", "16 bit signed"},
|
||||||
@ -469,6 +476,8 @@ void SOUND_OT_mixdown(wmOperatorType *ot)
|
|||||||
{AUD_CODEC_VORBIS, "VORBIS", 0, "Vorbis", "Xiph.Org Vorbis Codec"},
|
{AUD_CODEC_VORBIS, "VORBIS", 0, "Vorbis", "Xiph.Org Vorbis Codec"},
|
||||||
{0, NULL, 0, NULL, NULL}};
|
{0, NULL, 0, NULL, NULL}};
|
||||||
|
|
||||||
|
#endif // WITH_AUDASPACE
|
||||||
|
|
||||||
/* identifiers */
|
/* identifiers */
|
||||||
ot->name= "Mixdown";
|
ot->name= "Mixdown";
|
||||||
ot->description= "Mixes the scene's audio to a sound file";
|
ot->description= "Mixes the scene's audio to a sound file";
|
||||||
@ -477,18 +486,22 @@ void SOUND_OT_mixdown(wmOperatorType *ot)
|
|||||||
/* api callbacks */
|
/* api callbacks */
|
||||||
ot->exec= mixdown_exec;
|
ot->exec= mixdown_exec;
|
||||||
ot->invoke= mixdown_invoke;
|
ot->invoke= mixdown_invoke;
|
||||||
ot->ui= mixdown_draw;
|
|
||||||
|
|
||||||
|
#ifdef WITH_AUDASPACE
|
||||||
|
ot->ui= mixdown_draw;
|
||||||
|
#endif
|
||||||
/* flags */
|
/* flags */
|
||||||
ot->flag= OPTYPE_REGISTER;
|
ot->flag= OPTYPE_REGISTER;
|
||||||
|
|
||||||
/* properties */
|
/* properties */
|
||||||
WM_operator_properties_filesel(ot, FOLDERFILE|SOUNDFILE, FILE_SPECIAL, FILE_SAVE, WM_FILESEL_FILEPATH);
|
WM_operator_properties_filesel(ot, FOLDERFILE|SOUNDFILE, FILE_SPECIAL, FILE_SAVE, WM_FILESEL_FILEPATH);
|
||||||
|
#ifdef WITH_AUDASPACE
|
||||||
RNA_def_int(ot->srna, "accuracy", 1024, 1, 16777216, "Accuracy", "Sample accuracy. Important for animation data. The lower the value, the more accurate.", 1, 16777216);
|
RNA_def_int(ot->srna, "accuracy", 1024, 1, 16777216, "Accuracy", "Sample accuracy. Important for animation data. The lower the value, the more accurate.", 1, 16777216);
|
||||||
RNA_def_enum(ot->srna, "container", container_items, AUD_CONTAINER_FLAC, "Container", "File format");
|
RNA_def_enum(ot->srna, "container", container_items, AUD_CONTAINER_FLAC, "Container", "File format");
|
||||||
RNA_def_enum(ot->srna, "codec", codec_items, AUD_CODEC_FLAC, "Codec", "Audio Codec");
|
RNA_def_enum(ot->srna, "codec", codec_items, AUD_CODEC_FLAC, "Codec", "Audio Codec");
|
||||||
RNA_def_enum(ot->srna, "format", format_items, AUD_FORMAT_S16, "Format", "Sample format");
|
RNA_def_enum(ot->srna, "format", format_items, AUD_FORMAT_S16, "Format", "Sample format");
|
||||||
RNA_def_int(ot->srna, "bitrate", 192, 32, 512, "Bitrate", "Bitrate in kbit/s", 32, 512);
|
RNA_def_int(ot->srna, "bitrate", 192, 32, 512, "Bitrate", "Bitrate in kbit/s", 32, 512);
|
||||||
|
#endif // WITH_AUDASPACE
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ******************************************************* */
|
/* ******************************************************* */
|
||||||
|
@ -960,20 +960,19 @@ static int save_image_options_init(SaveImageOptions *simopts, SpaceImage *sima,
|
|||||||
|
|
||||||
if(ibuf) {
|
if(ibuf) {
|
||||||
Image *ima= sima->image;
|
Image *ima= sima->image;
|
||||||
RenderResult *rr= BKE_image_acquire_renderresult(scene, ima);
|
|
||||||
|
|
||||||
simopts->planes= ibuf->depth;
|
simopts->planes= ibuf->depth;
|
||||||
|
|
||||||
/* cant save multilayer sequence, ima->rr isn't valid for a specific frame */
|
if(ELEM(ima->type, IMA_TYPE_R_RESULT, IMA_TYPE_COMPOSITE)) {
|
||||||
if(rr && !(ima->source==IMA_SRC_SEQUENCE && ima->type==IMA_TYPE_MULTILAYER))
|
|
||||||
simopts->imtype= R_MULTILAYER;
|
|
||||||
else if(ima->type==IMA_TYPE_R_RESULT)
|
|
||||||
simopts->imtype= scene->r.imtype;
|
simopts->imtype= scene->r.imtype;
|
||||||
else if (ima->source == IMA_SRC_GENERATED)
|
simopts->planes= scene->r.planes;
|
||||||
|
}
|
||||||
|
else if (ima->source == IMA_SRC_GENERATED) {
|
||||||
simopts->imtype= R_PNG;
|
simopts->imtype= R_PNG;
|
||||||
else
|
}
|
||||||
|
else {
|
||||||
simopts->imtype= BKE_ftype_to_imtype(ibuf->ftype);
|
simopts->imtype= BKE_ftype_to_imtype(ibuf->ftype);
|
||||||
|
}
|
||||||
simopts->subimtype= scene->r.subimtype; /* XXX - this is lame, we need to make these available too! */
|
simopts->subimtype= scene->r.subimtype; /* XXX - this is lame, we need to make these available too! */
|
||||||
simopts->quality= ibuf->ftype & 0xff;
|
simopts->quality= ibuf->ftype & 0xff;
|
||||||
|
|
||||||
@ -1000,8 +999,6 @@ static int save_image_options_init(SaveImageOptions *simopts, SpaceImage *sima,
|
|||||||
}
|
}
|
||||||
BLI_path_abs(simopts->filepath, G.main->name);
|
BLI_path_abs(simopts->filepath, G.main->name);
|
||||||
}
|
}
|
||||||
/* cleanup */
|
|
||||||
BKE_image_release_renderresult(scene, ima);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ED_space_image_release_buffer(sima, lock);
|
ED_space_image_release_buffer(sima, lock);
|
||||||
@ -1016,7 +1013,10 @@ static void save_image_options_from_op(SaveImageOptions *simopts, wmOperator *op
|
|||||||
// if (RNA_property_is_set(op->ptr, "subimtype")) simopts->subimtype= RNA_enum_get(op->ptr, "subimtype"); // XXX
|
// if (RNA_property_is_set(op->ptr, "subimtype")) simopts->subimtype= RNA_enum_get(op->ptr, "subimtype"); // XXX
|
||||||
if (RNA_property_is_set(op->ptr, "file_quality")) simopts->quality= RNA_int_get(op->ptr, "file_quality");
|
if (RNA_property_is_set(op->ptr, "file_quality")) simopts->quality= RNA_int_get(op->ptr, "file_quality");
|
||||||
|
|
||||||
if (RNA_property_is_set(op->ptr, "filepath")) RNA_string_get(op->ptr, "filepath", simopts->filepath);
|
if (RNA_property_is_set(op->ptr, "filepath")) {
|
||||||
|
RNA_string_get(op->ptr, "filepath", simopts->filepath);
|
||||||
|
BLI_path_abs(simopts->filepath, G.main->name);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void save_image_options_to_op(SaveImageOptions *simopts, wmOperator *op)
|
static void save_image_options_to_op(SaveImageOptions *simopts, wmOperator *op)
|
||||||
@ -1069,7 +1069,7 @@ static void save_image_doit(bContext *C, SpaceImage *sima, wmOperator *op, SaveI
|
|||||||
Scene *scene= CTX_data_scene(C);
|
Scene *scene= CTX_data_scene(C);
|
||||||
RenderResult *rr= BKE_image_acquire_renderresult(scene, ima);
|
RenderResult *rr= BKE_image_acquire_renderresult(scene, ima);
|
||||||
if(rr) {
|
if(rr) {
|
||||||
RE_WriteRenderResult(rr, simopts->filepath, simopts->quality);
|
RE_WriteRenderResult(op->reports, rr, simopts->filepath, simopts->quality);
|
||||||
ok= TRUE;
|
ok= TRUE;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -3677,7 +3677,7 @@ static void draw_actuator_action(uiLayout *layout, PointerRNA *ptr)
|
|||||||
{
|
{
|
||||||
Object *ob = (Object *)ptr->id.data;
|
Object *ob = (Object *)ptr->id.data;
|
||||||
PointerRNA settings_ptr;
|
PointerRNA settings_ptr;
|
||||||
uiLayout *row, *subrow, *col;;
|
uiLayout *row, *subrow, *col;
|
||||||
|
|
||||||
RNA_pointer_create((ID *)ob, &RNA_GameObjectSettings, ob, &settings_ptr);
|
RNA_pointer_create((ID *)ob, &RNA_GameObjectSettings, ob, &settings_ptr);
|
||||||
|
|
||||||
|
@ -1385,7 +1385,7 @@ static void node_texture_set_butfunc(bNodeType *ntype)
|
|||||||
default:
|
default:
|
||||||
ntype->uifunc= NULL;
|
ntype->uifunc= NULL;
|
||||||
}
|
}
|
||||||
if (ntype->uifuncbut == NULL) ntype->uifuncbut = ntype->uifunc;
|
if (ntype->uifuncbut == NULL) ntype->uifuncbut = ntype->uifunc;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ******* init draw callbacks for all tree types, only called in usiblender.c, once ************* */
|
/* ******* init draw callbacks for all tree types, only called in usiblender.c, once ************* */
|
||||||
|
@ -236,7 +236,7 @@ static int group_select_flag(Group *gr)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void restrictbutton_gr_restrict_flag(void *poin, void *poin2, int flag)
|
void restrictbutton_gr_restrict_flag(void *poin, void *poin2, int flag)
|
||||||
{
|
{
|
||||||
Scene *scene = (Scene *)poin;
|
Scene *scene = (Scene *)poin;
|
||||||
GroupObject *gob;
|
GroupObject *gob;
|
||||||
|
@ -218,6 +218,34 @@ void OUTLINER_OT_item_openclose(wmOperatorType *ot)
|
|||||||
|
|
||||||
/* Rename --------------------------------------------------- */
|
/* Rename --------------------------------------------------- */
|
||||||
|
|
||||||
|
void do_item_rename(ARegion *ar, TreeElement *te, TreeStoreElem *tselem, ReportList *reports)
|
||||||
|
{
|
||||||
|
/* can't rename rna datablocks entries */
|
||||||
|
if(ELEM3(tselem->type, TSE_RNA_STRUCT, TSE_RNA_PROPERTY, TSE_RNA_ARRAY_ELEM))
|
||||||
|
;
|
||||||
|
else if(ELEM10(tselem->type, TSE_ANIM_DATA, TSE_NLA, TSE_DEFGROUP_BASE, TSE_CONSTRAINT_BASE, TSE_MODIFIER_BASE, TSE_SCRIPT_BASE, TSE_POSE_BASE, TSE_POSEGRP_BASE, TSE_R_LAYER_BASE, TSE_R_PASS))
|
||||||
|
BKE_report(reports, RPT_WARNING, "Cannot edit builtin name");
|
||||||
|
else if(ELEM3(tselem->type, TSE_SEQUENCE, TSE_SEQ_STRIP, TSE_SEQUENCE_DUP))
|
||||||
|
BKE_report(reports, RPT_WARNING, "Cannot edit sequence name");
|
||||||
|
else if(tselem->id->lib) {
|
||||||
|
// XXX error_libdata();
|
||||||
|
}
|
||||||
|
else if(te->idcode == ID_LI && te->parent) {
|
||||||
|
BKE_report(reports, RPT_WARNING, "Cannot edit the path of an indirectly linked library");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
tselem->flag |= TSE_TEXTBUT;
|
||||||
|
ED_region_tag_redraw(ar);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void item_rename_cb(bContext *C, Scene *UNUSED(scene), TreeElement *te, TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem)
|
||||||
|
{
|
||||||
|
ARegion *ar= CTX_wm_region(C);
|
||||||
|
ReportList *reports= CTX_wm_reports(C); // XXX
|
||||||
|
do_item_rename(ar, te, tselem, reports) ;
|
||||||
|
}
|
||||||
|
|
||||||
static int do_outliner_item_rename(bContext *C, ARegion *ar, SpaceOops *soops, TreeElement *te, const float mval[2])
|
static int do_outliner_item_rename(bContext *C, ARegion *ar, SpaceOops *soops, TreeElement *te, const float mval[2])
|
||||||
{
|
{
|
||||||
ReportList *reports= CTX_wm_reports(C); // XXX
|
ReportList *reports= CTX_wm_reports(C); // XXX
|
||||||
@ -228,23 +256,7 @@ static int do_outliner_item_rename(bContext *C, ARegion *ar, SpaceOops *soops, T
|
|||||||
/* name and first icon */
|
/* name and first icon */
|
||||||
if(mval[0]>te->xs+UI_UNIT_X && mval[0]<te->xend) {
|
if(mval[0]>te->xs+UI_UNIT_X && mval[0]<te->xend) {
|
||||||
|
|
||||||
/* can't rename rna datablocks entries */
|
do_item_rename(ar, te, tselem, reports) ;
|
||||||
if(ELEM3(tselem->type, TSE_RNA_STRUCT, TSE_RNA_PROPERTY, TSE_RNA_ARRAY_ELEM))
|
|
||||||
;
|
|
||||||
else if(ELEM10(tselem->type, TSE_ANIM_DATA, TSE_NLA, TSE_DEFGROUP_BASE, TSE_CONSTRAINT_BASE, TSE_MODIFIER_BASE, TSE_SCRIPT_BASE, TSE_POSE_BASE, TSE_POSEGRP_BASE, TSE_R_LAYER_BASE, TSE_R_PASS))
|
|
||||||
BKE_report(reports, RPT_WARNING, "Cannot edit builtin name");
|
|
||||||
else if(ELEM3(tselem->type, TSE_SEQUENCE, TSE_SEQ_STRIP, TSE_SEQUENCE_DUP))
|
|
||||||
BKE_report(reports, RPT_WARNING, "Cannot edit sequence name");
|
|
||||||
else if(tselem->id->lib) {
|
|
||||||
// XXX error_libdata();
|
|
||||||
}
|
|
||||||
else if(te->idcode == ID_LI && te->parent) {
|
|
||||||
BKE_report(reports, RPT_WARNING, "Cannot edit the path of an indirectly linked library");
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
tselem->flag |= TSE_TEXTBUT;
|
|
||||||
ED_region_tag_redraw(ar);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -377,6 +389,12 @@ void object_toggle_visibility_cb(bContext *C, Scene *scene, TreeElement *te, Tre
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void group_toggle_visibility_cb(bContext *UNUSED(C), Scene *scene, TreeElement *UNUSED(te), TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem)
|
||||||
|
{
|
||||||
|
Group *group= (Group *)tselem->id;
|
||||||
|
restrictbutton_gr_restrict_flag(scene, group, OB_RESTRICT_VIEW);
|
||||||
|
}
|
||||||
|
|
||||||
static int outliner_toggle_visibility_exec(bContext *C, wmOperator *UNUSED(op))
|
static int outliner_toggle_visibility_exec(bContext *C, wmOperator *UNUSED(op))
|
||||||
{
|
{
|
||||||
SpaceOops *soops= CTX_wm_space_outliner(C);
|
SpaceOops *soops= CTX_wm_space_outliner(C);
|
||||||
@ -417,6 +435,12 @@ void object_toggle_selectability_cb(bContext *UNUSED(C), Scene *scene, TreeEleme
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void group_toggle_selectability_cb(bContext *UNUSED(C), Scene *scene, TreeElement *UNUSED(te), TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem)
|
||||||
|
{
|
||||||
|
Group *group= (Group *)tselem->id;
|
||||||
|
restrictbutton_gr_restrict_flag(scene, group, OB_RESTRICT_SELECT);
|
||||||
|
}
|
||||||
|
|
||||||
static int outliner_toggle_selectability_exec(bContext *C, wmOperator *UNUSED(op))
|
static int outliner_toggle_selectability_exec(bContext *C, wmOperator *UNUSED(op))
|
||||||
{
|
{
|
||||||
SpaceOops *soops= CTX_wm_space_outliner(C);
|
SpaceOops *soops= CTX_wm_space_outliner(C);
|
||||||
@ -457,6 +481,12 @@ void object_toggle_renderability_cb(bContext *UNUSED(C), Scene *scene, TreeEleme
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void group_toggle_renderability_cb(bContext *UNUSED(C), Scene *scene, TreeElement *UNUSED(te), TreeStoreElem *UNUSED(tsep), TreeStoreElem *tselem)
|
||||||
|
{
|
||||||
|
Group *group= (Group *)tselem->id;
|
||||||
|
restrictbutton_gr_restrict_flag(scene, group, OB_RESTRICT_RENDER);
|
||||||
|
}
|
||||||
|
|
||||||
static int outliner_toggle_renderability_exec(bContext *C, wmOperator *UNUSED(op))
|
static int outliner_toggle_renderability_exec(bContext *C, wmOperator *UNUSED(op))
|
||||||
{
|
{
|
||||||
SpaceOops *soops= CTX_wm_space_outliner(C);
|
SpaceOops *soops= CTX_wm_space_outliner(C);
|
||||||
|
@ -129,6 +129,7 @@ typedef struct TreeElement {
|
|||||||
/* outliner_tree.c ----------------------------------------------- */
|
/* outliner_tree.c ----------------------------------------------- */
|
||||||
|
|
||||||
void outliner_free_tree(ListBase *lb);
|
void outliner_free_tree(ListBase *lb);
|
||||||
|
void outliner_cleanup_tree(struct SpaceOops *soops);
|
||||||
|
|
||||||
TreeElement *outliner_find_tse(struct SpaceOops *soops, TreeStoreElem *tse);
|
TreeElement *outliner_find_tse(struct SpaceOops *soops, TreeStoreElem *tse);
|
||||||
TreeElement *outliner_find_id(struct SpaceOops *soops, ListBase *lb, struct ID *id);
|
TreeElement *outliner_find_id(struct SpaceOops *soops, ListBase *lb, struct ID *id);
|
||||||
@ -139,6 +140,7 @@ void outliner_build_tree(struct Main *mainvar, struct Scene *scene, struct Space
|
|||||||
/* outliner_draw.c ---------------------------------------------- */
|
/* outliner_draw.c ---------------------------------------------- */
|
||||||
|
|
||||||
void draw_outliner(const struct bContext *C);
|
void draw_outliner(const struct bContext *C);
|
||||||
|
void restrictbutton_gr_restrict_flag(void *poin, void *poin2, int flag);
|
||||||
|
|
||||||
/* outliner_select.c -------------------------------------------- */
|
/* outliner_select.c -------------------------------------------- */
|
||||||
int tree_element_type_active(struct bContext *C, struct Scene *scene, struct SpaceOops *soops, TreeElement *te, TreeStoreElem *tselem, int set);
|
int tree_element_type_active(struct bContext *C, struct Scene *scene, struct SpaceOops *soops, TreeElement *te, TreeStoreElem *tselem, int set);
|
||||||
@ -158,6 +160,13 @@ void object_toggle_visibility_cb(struct bContext *C, struct Scene *scene, TreeEl
|
|||||||
void object_toggle_selectability_cb(struct bContext *C, struct Scene *scene, TreeElement *te, struct TreeStoreElem *tsep, struct TreeStoreElem *tselem);
|
void object_toggle_selectability_cb(struct bContext *C, struct Scene *scene, TreeElement *te, struct TreeStoreElem *tsep, struct TreeStoreElem *tselem);
|
||||||
void object_toggle_renderability_cb(struct bContext *C, struct Scene *scene, TreeElement *te, struct TreeStoreElem *tsep, struct TreeStoreElem *tselem);
|
void object_toggle_renderability_cb(struct bContext *C, struct Scene *scene, TreeElement *te, struct TreeStoreElem *tsep, struct TreeStoreElem *tselem);
|
||||||
|
|
||||||
|
|
||||||
|
void group_toggle_visibility_cb(struct bContext *C, struct Scene *scene, TreeElement *te, struct TreeStoreElem *tsep, struct TreeStoreElem *tselem);
|
||||||
|
void group_toggle_selectability_cb(struct bContext *C, struct Scene *scene, TreeElement *te, struct TreeStoreElem *tsep, struct TreeStoreElem *tselem);
|
||||||
|
void group_toggle_renderability_cb(struct bContext *C, struct Scene *scene, TreeElement *te, struct TreeStoreElem *tsep, struct TreeStoreElem *tselem);
|
||||||
|
|
||||||
|
void item_rename_cb(struct bContext *C, struct Scene *scene, TreeElement *te, struct TreeStoreElem *tsep, struct TreeStoreElem *tselem);
|
||||||
|
|
||||||
/* ...................................................... */
|
/* ...................................................... */
|
||||||
|
|
||||||
void OUTLINER_OT_item_activate(struct wmOperatorType *ot);
|
void OUTLINER_OT_item_activate(struct wmOperatorType *ot);
|
||||||
|
@ -287,6 +287,8 @@ static void object_delete_cb(bContext *C, Scene *scene, TreeElement *te, TreeSto
|
|||||||
if(base==NULL)
|
if(base==NULL)
|
||||||
base= object_in_scene((Object *)tselem->id, scene);
|
base= object_in_scene((Object *)tselem->id, scene);
|
||||||
if(base) {
|
if(base) {
|
||||||
|
SpaceOops *soops= CTX_wm_space_outliner(C);
|
||||||
|
|
||||||
// check also library later
|
// check also library later
|
||||||
if(scene->obedit==base->object)
|
if(scene->obedit==base->object)
|
||||||
ED_object_exit_editmode(C, EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR|EM_DO_UNDO);
|
ED_object_exit_editmode(C, EM_FREEDATA|EM_FREEUNDO|EM_WAITCURSOR|EM_DO_UNDO);
|
||||||
@ -294,6 +296,13 @@ static void object_delete_cb(bContext *C, Scene *scene, TreeElement *te, TreeSto
|
|||||||
ED_base_object_free_and_unlink(CTX_data_main(C), scene, base);
|
ED_base_object_free_and_unlink(CTX_data_main(C), scene, base);
|
||||||
te->directdata= NULL;
|
te->directdata= NULL;
|
||||||
tselem->id= NULL;
|
tselem->id= NULL;
|
||||||
|
|
||||||
|
/* XXX: tree management normally happens from draw_outliner(), but when
|
||||||
|
you're clicking to fast on Delete object from context menu in
|
||||||
|
outliner several mouse events can be handled in one cycle without
|
||||||
|
handling notifiers/redraw which leads to deleting the same object twice.
|
||||||
|
cleanup tree here to prevent such cases. */
|
||||||
|
outliner_cleanup_tree(soops);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -510,6 +519,7 @@ static EnumPropertyItem prop_object_op_types[] = {
|
|||||||
{6, "TOGVIS", 0, "Toggle Visible", ""},
|
{6, "TOGVIS", 0, "Toggle Visible", ""},
|
||||||
{7, "TOGSEL", 0, "Toggle Selectable", ""},
|
{7, "TOGSEL", 0, "Toggle Selectable", ""},
|
||||||
{8, "TOGREN", 0, "Toggle Renderable", ""},
|
{8, "TOGREN", 0, "Toggle Renderable", ""},
|
||||||
|
{9, "RENAME", 0, "Rename", ""},
|
||||||
{0, NULL, 0, NULL, NULL}
|
{0, NULL, 0, NULL, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -567,6 +577,10 @@ static int outliner_object_operation_exec(bContext *C, wmOperator *op)
|
|||||||
str= "Toggle Renderability";
|
str= "Toggle Renderability";
|
||||||
WM_event_add_notifier(C, NC_SCENE|ND_OB_RENDER, scene);
|
WM_event_add_notifier(C, NC_SCENE|ND_OB_RENDER, scene);
|
||||||
}
|
}
|
||||||
|
else if(event==9) {
|
||||||
|
outliner_do_object_operation(C, scene, soops, &soops->tree, item_rename_cb);
|
||||||
|
str= "Rename Object";
|
||||||
|
}
|
||||||
|
|
||||||
ED_undo_push(C, str);
|
ED_undo_push(C, str);
|
||||||
|
|
||||||
@ -600,6 +614,7 @@ static EnumPropertyItem prop_group_op_types[] = {
|
|||||||
{4, "TOGVIS", 0, "Toggle Visible", ""},
|
{4, "TOGVIS", 0, "Toggle Visible", ""},
|
||||||
{5, "TOGSEL", 0, "Toggle Selectable", ""},
|
{5, "TOGSEL", 0, "Toggle Selectable", ""},
|
||||||
{6, "TOGREN", 0, "Toggle Renderable", ""},
|
{6, "TOGREN", 0, "Toggle Renderable", ""},
|
||||||
|
{7, "RENAME", 0, "Rename", ""},
|
||||||
{0, NULL, 0, NULL, NULL}
|
{0, NULL, 0, NULL, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -608,6 +623,7 @@ static int outliner_group_operation_exec(bContext *C, wmOperator *op)
|
|||||||
Scene *scene= CTX_data_scene(C);
|
Scene *scene= CTX_data_scene(C);
|
||||||
SpaceOops *soops= CTX_wm_space_outliner(C);
|
SpaceOops *soops= CTX_wm_space_outliner(C);
|
||||||
int event;
|
int event;
|
||||||
|
const char *str= NULL;
|
||||||
|
|
||||||
/* check for invalid states */
|
/* check for invalid states */
|
||||||
if (soops == NULL)
|
if (soops == NULL)
|
||||||
@ -617,18 +633,35 @@ static int outliner_group_operation_exec(bContext *C, wmOperator *op)
|
|||||||
|
|
||||||
if(event==1) {
|
if(event==1) {
|
||||||
outliner_do_libdata_operation(C, scene, soops, &soops->tree, unlink_group_cb);
|
outliner_do_libdata_operation(C, scene, soops, &soops->tree, unlink_group_cb);
|
||||||
ED_undo_push(C, "Unlink group");
|
str= "Unlink group";
|
||||||
}
|
}
|
||||||
else if(event==2) {
|
else if(event==2) {
|
||||||
outliner_do_libdata_operation(C, scene, soops, &soops->tree, id_local_cb);
|
outliner_do_libdata_operation(C, scene, soops, &soops->tree, id_local_cb);
|
||||||
ED_undo_push(C, "Localized Data");
|
str= "Localized Data";
|
||||||
}
|
}
|
||||||
else if(event==3) {
|
else if(event==3) {
|
||||||
outliner_do_libdata_operation(C, scene, soops, &soops->tree, group_linkobs2scene_cb);
|
outliner_do_libdata_operation(C, scene, soops, &soops->tree, group_linkobs2scene_cb);
|
||||||
ED_undo_push(C, "Link Group Objects to Scene");
|
str= "Link Group Objects to Scene";
|
||||||
|
}
|
||||||
|
else if(event==4) {
|
||||||
|
outliner_do_libdata_operation(C, scene, soops, &soops->tree, group_toggle_visibility_cb);
|
||||||
|
str= "Toggle Visibility";
|
||||||
|
}
|
||||||
|
else if(event==5) {
|
||||||
|
outliner_do_libdata_operation(C, scene, soops, &soops->tree, group_toggle_selectability_cb);
|
||||||
|
str= "Toggle Selectability";
|
||||||
|
}
|
||||||
|
else if(event==6) {
|
||||||
|
outliner_do_libdata_operation(C, scene, soops, &soops->tree, group_toggle_renderability_cb);
|
||||||
|
str= "Toggle Renderability";
|
||||||
|
}
|
||||||
|
else if(event==7) {
|
||||||
|
outliner_do_libdata_operation(C, scene, soops, &soops->tree, item_rename_cb);
|
||||||
|
str= "Rename";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ED_undo_push(C, str);
|
||||||
WM_event_add_notifier(C, NC_GROUP, NULL);
|
WM_event_add_notifier(C, NC_GROUP, NULL);
|
||||||
|
|
||||||
return OPERATOR_FINISHED;
|
return OPERATOR_FINISHED;
|
||||||
@ -662,7 +695,8 @@ typedef enum eOutlinerIdOpTypes {
|
|||||||
OUTLINER_IDOP_SINGLE,
|
OUTLINER_IDOP_SINGLE,
|
||||||
|
|
||||||
OUTLINER_IDOP_FAKE_ADD,
|
OUTLINER_IDOP_FAKE_ADD,
|
||||||
OUTLINER_IDOP_FAKE_CLEAR
|
OUTLINER_IDOP_FAKE_CLEAR,
|
||||||
|
OUTLINER_IDOP_RENAME
|
||||||
} eOutlinerIdOpTypes;
|
} eOutlinerIdOpTypes;
|
||||||
|
|
||||||
// TODO: implement support for changing the ID-block used
|
// TODO: implement support for changing the ID-block used
|
||||||
@ -672,6 +706,7 @@ static EnumPropertyItem prop_id_op_types[] = {
|
|||||||
{OUTLINER_IDOP_SINGLE, "SINGLE", 0, "Make Single User", ""},
|
{OUTLINER_IDOP_SINGLE, "SINGLE", 0, "Make Single User", ""},
|
||||||
{OUTLINER_IDOP_FAKE_ADD, "ADD_FAKE", 0, "Add Fake User", "Ensure datablock gets saved even if it isn't in use (e.g. for motion and material libraries)"},
|
{OUTLINER_IDOP_FAKE_ADD, "ADD_FAKE", 0, "Add Fake User", "Ensure datablock gets saved even if it isn't in use (e.g. for motion and material libraries)"},
|
||||||
{OUTLINER_IDOP_FAKE_CLEAR, "CLEAR_FAKE", 0, "Clear Fake User", ""},
|
{OUTLINER_IDOP_FAKE_CLEAR, "CLEAR_FAKE", 0, "Clear Fake User", ""},
|
||||||
|
{OUTLINER_IDOP_RENAME, "RENAME", 0, "Rename", ""},
|
||||||
{0, NULL, 0, NULL, NULL}
|
{0, NULL, 0, NULL, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -765,6 +800,14 @@ static int outliner_id_operation_exec(bContext *C, wmOperator *op)
|
|||||||
ED_undo_push(C, "Clear Fake User");
|
ED_undo_push(C, "Clear Fake User");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case OUTLINER_IDOP_RENAME:
|
||||||
|
/* rename */
|
||||||
|
outliner_do_libdata_operation(C, scene, soops, &soops->tree, item_rename_cb);
|
||||||
|
|
||||||
|
WM_event_add_notifier(C, NC_ID|NA_EDITED, NULL);
|
||||||
|
ED_undo_push(C, "Rename");
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
// invalid - unhandled
|
// invalid - unhandled
|
||||||
|
@ -222,6 +222,12 @@ void outliner_free_tree(ListBase *lb)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void outliner_cleanup_tree(SpaceOops *soops)
|
||||||
|
{
|
||||||
|
outliner_free_tree(&soops->tree);
|
||||||
|
outliner_storage_cleanup(soops);
|
||||||
|
}
|
||||||
|
|
||||||
/* Find ith item from the treestore */
|
/* Find ith item from the treestore */
|
||||||
static TreeElement *outliner_find_tree_element(ListBase *lb, int store_index)
|
static TreeElement *outliner_find_tree_element(ListBase *lb, int store_index)
|
||||||
{
|
{
|
||||||
|
@ -154,6 +154,11 @@ static void text_listener(ScrArea *sa, wmNotifier *wmn)
|
|||||||
case NA_REMOVED:
|
case NA_REMOVED:
|
||||||
ED_area_tag_redraw(sa);
|
ED_area_tag_redraw(sa);
|
||||||
break;
|
break;
|
||||||
|
case NA_SELECTED:
|
||||||
|
if(st->text && st->text == wmn->reference)
|
||||||
|
text_scroll_to_cursor(st, sa);
|
||||||
|
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -1821,12 +1821,10 @@ void text_update_character_width(SpaceText *st)
|
|||||||
|
|
||||||
/* Moves the view to the cursor location,
|
/* Moves the view to the cursor location,
|
||||||
also used to make sure the view isnt outside the file */
|
also used to make sure the view isnt outside the file */
|
||||||
void text_update_cursor_moved(bContext *C)
|
void text_scroll_to_cursor(SpaceText *st, ScrArea *sa)
|
||||||
{
|
{
|
||||||
ScrArea *sa= CTX_wm_area(C);
|
|
||||||
SpaceText *st= CTX_wm_space_text(C);
|
|
||||||
Text *text;
|
Text *text;
|
||||||
ARegion *ar;
|
ARegion *ar= NULL;
|
||||||
int i, x, winx= 0;
|
int i, x, winx= 0;
|
||||||
|
|
||||||
if(ELEM3(NULL, st, st->text, st->text->curl)) return;
|
if(ELEM3(NULL, st, st->text, st->text->curl)) return;
|
||||||
@ -1834,8 +1832,10 @@ void text_update_cursor_moved(bContext *C)
|
|||||||
text= st->text;
|
text= st->text;
|
||||||
|
|
||||||
for(ar=sa->regionbase.first; ar; ar= ar->next)
|
for(ar=sa->regionbase.first; ar; ar= ar->next)
|
||||||
if(ar->regiontype==RGN_TYPE_WINDOW)
|
if(ar->regiontype==RGN_TYPE_WINDOW) {
|
||||||
winx= ar->winx;
|
winx= ar->winx;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
winx -= TXT_SCROLL_WIDTH;
|
winx -= TXT_SCROLL_WIDTH;
|
||||||
|
|
||||||
@ -1844,7 +1844,7 @@ void text_update_cursor_moved(bContext *C)
|
|||||||
i= txt_get_span(text->lines.first, text->sell);
|
i= txt_get_span(text->lines.first, text->sell);
|
||||||
if(st->wordwrap) {
|
if(st->wordwrap) {
|
||||||
int offl, offc;
|
int offl, offc;
|
||||||
wrap_offset(st, CTX_wm_region(C), text->sell, text->selc, &offl, &offc);
|
wrap_offset(st, ar, text->sell, text->selc, &offl, &offc);
|
||||||
i+= offl;
|
i+= offl;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1865,3 +1865,10 @@ void text_update_cursor_moved(bContext *C)
|
|||||||
if(st->left <0) st->left= 0;
|
if(st->left <0) st->left= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void text_update_cursor_moved(bContext *C)
|
||||||
|
{
|
||||||
|
ScrArea *sa= CTX_wm_area(C);
|
||||||
|
SpaceText *st= CTX_wm_space_text(C);
|
||||||
|
|
||||||
|
text_scroll_to_cursor(st, sa);
|
||||||
|
}
|
||||||
|
@ -55,6 +55,7 @@ int text_font_width(struct SpaceText *st, const char *str);
|
|||||||
void text_update_line_edited(struct TextLine *line);
|
void text_update_line_edited(struct TextLine *line);
|
||||||
void text_update_edited(struct Text *text);
|
void text_update_edited(struct Text *text);
|
||||||
void text_update_character_width(struct SpaceText *st);
|
void text_update_character_width(struct SpaceText *st);
|
||||||
|
void text_scroll_to_cursor(struct SpaceText *st, struct ScrArea *sa);
|
||||||
void text_update_cursor_moved(struct bContext *C);
|
void text_update_cursor_moved(struct bContext *C);
|
||||||
|
|
||||||
/* TXT_OFFSET used to be 35 when the scrollbar was on the left... */
|
/* TXT_OFFSET used to be 35 when the scrollbar was on the left... */
|
||||||
|
@ -3475,7 +3475,7 @@ void ED_view3d_from_m4(float mat[][4], float ofs[3], float quat[4], float *dist)
|
|||||||
copy_m3_m4(nmat, mat);
|
copy_m3_m4(nmat, mat);
|
||||||
normalize_m3(nmat);
|
normalize_m3(nmat);
|
||||||
|
|
||||||
mul_m3_v3(nmat, vec);;
|
mul_m3_v3(nmat, vec);
|
||||||
sub_v3_v3(ofs, vec);
|
sub_v3_v3(ofs, vec);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -625,8 +625,8 @@ void ED_view3d_win_to_3d(ARegion *ar, const float depth_pt[3], const float mval[
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
const float dx= (2.0f * mval[0] / (float)ar->winx) - 1.0f;
|
const float dx= (2.0f * mval[0] / (float)ar->winx) - 1.0f;
|
||||||
const float dy= (2.0f * mval[1] / (float)ar->winy) - 1.0f;
|
const float dy= (2.0f * mval[1] / (float)ar->winy) - 1.0f;
|
||||||
line_sta[0]= (rv3d->persinv[0][0] * dx) + (rv3d->persinv[1][0] * dy) + rv3d->viewinv[3][0];
|
line_sta[0]= (rv3d->persinv[0][0] * dx) + (rv3d->persinv[1][0] * dy) + rv3d->viewinv[3][0];
|
||||||
line_sta[1]= (rv3d->persinv[0][1] * dx) + (rv3d->persinv[1][1] * dy) + rv3d->viewinv[3][1];
|
line_sta[1]= (rv3d->persinv[0][1] * dx) + (rv3d->persinv[1][1] * dy) + rv3d->viewinv[3][1];
|
||||||
line_sta[2]= (rv3d->persinv[0][2] * dx) + (rv3d->persinv[1][2] * dy) + rv3d->viewinv[3][2];
|
line_sta[2]= (rv3d->persinv[0][2] * dx) + (rv3d->persinv[1][2] * dy) + rv3d->viewinv[3][2];
|
||||||
|
@ -499,7 +499,7 @@ void IMB_rectfill_area(struct ImBuf *ibuf, float *col, int x1, int y1, int x2, i
|
|||||||
void IMB_rectfill_alpha(struct ImBuf *ibuf, const float value);
|
void IMB_rectfill_alpha(struct ImBuf *ibuf, const float value);
|
||||||
|
|
||||||
/* this should not be here, really, we needed it for operating on render data, IMB_rectfill_area calls it */
|
/* this should not be here, really, we needed it for operating on render data, IMB_rectfill_area calls it */
|
||||||
void buf_rectfill_area(unsigned char *rect, float *rectf, int width, int height, float *col, int x1, int y1, int x2, int y2);
|
void buf_rectfill_area(unsigned char *rect, float *rectf, int width, int height, const float col[4], int x1, int y1, int x2, int y2);
|
||||||
|
|
||||||
/* defined in metadata.c */
|
/* defined in metadata.c */
|
||||||
int IMB_metadata_change_field(struct ImBuf *img, const char *key, const char *field);
|
int IMB_metadata_change_field(struct ImBuf *img, const char *key, const char *field);
|
||||||
|
@ -922,7 +922,7 @@ static int ffmpeg_decode_video_frame(struct anim * anim)
|
|||||||
static void ffmpeg_decode_video_frame_scan(
|
static void ffmpeg_decode_video_frame_scan(
|
||||||
struct anim * anim, int64_t pts_to_search)
|
struct anim * anim, int64_t pts_to_search)
|
||||||
{
|
{
|
||||||
/* there seem to exist *very* silly GOP lengths out in the wild... */
|
/* there seem to exist *very* silly GOP lengths out in the wild... */
|
||||||
int count = 1000;
|
int count = 1000;
|
||||||
|
|
||||||
av_log(anim->pFormatCtx,
|
av_log(anim->pFormatCtx,
|
||||||
|
@ -30,8 +30,8 @@
|
|||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
|
||||||
typedef struct indexer_dv_bitstream {
|
typedef struct indexer_dv_bitstream {
|
||||||
unsigned char* buffer;
|
unsigned char* buffer;
|
||||||
int bit_pos;
|
int bit_pos;
|
||||||
} indexer_dv_bitstream;
|
} indexer_dv_bitstream;
|
||||||
|
|
||||||
static indexer_dv_bitstream bitstream_new(unsigned char* buffer_)
|
static indexer_dv_bitstream bitstream_new(unsigned char* buffer_)
|
||||||
@ -57,41 +57,41 @@ static unsigned long bitstream_get_bits(indexer_dv_bitstream * This, int num)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int parse_num(indexer_dv_bitstream * b, int numbits) {
|
static int parse_num(indexer_dv_bitstream * b, int numbits) {
|
||||||
return bitstream_get_bits(b, numbits);
|
return bitstream_get_bits(b, numbits);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int parse_bcd(indexer_dv_bitstream * b, int n)
|
static int parse_bcd(indexer_dv_bitstream * b, int n)
|
||||||
{
|
{
|
||||||
char s[256];
|
char s[256];
|
||||||
char * p = s + (n+3)/4;
|
char * p = s + (n+3)/4;
|
||||||
|
|
||||||
*p-- = 0;
|
*p-- = 0;
|
||||||
|
|
||||||
while (n > 4) {
|
while (n > 4) {
|
||||||
char a;
|
char a;
|
||||||
int v = bitstream_get_bits(b, 4);
|
int v = bitstream_get_bits(b, 4);
|
||||||
|
|
||||||
n -= 4;
|
n -= 4;
|
||||||
a = '0' + v;
|
a = '0' + v;
|
||||||
|
|
||||||
if (a > '9') {
|
if (a > '9') {
|
||||||
bitstream_get_bits(b, n);
|
bitstream_get_bits(b, n);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
*p-- = a;
|
*p-- = a;
|
||||||
}
|
}
|
||||||
if (n) {
|
if (n) {
|
||||||
char a;
|
char a;
|
||||||
int v = bitstream_get_bits(b, n);
|
int v = bitstream_get_bits(b, n);
|
||||||
a = '0' + v;
|
a = '0' + v;
|
||||||
if (a > '9') {
|
if (a > '9') {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
*p-- = a;
|
*p-- = a;
|
||||||
}
|
}
|
||||||
|
|
||||||
return atol(s);
|
return atol(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef struct indexer_dv_context
|
typedef struct indexer_dv_context
|
||||||
@ -125,124 +125,124 @@ typedef struct indexer_dv_context
|
|||||||
|
|
||||||
static void parse_packet(indexer_dv_context * This, unsigned char * p)
|
static void parse_packet(indexer_dv_context * This, unsigned char * p)
|
||||||
{
|
{
|
||||||
indexer_dv_bitstream b;
|
indexer_dv_bitstream b;
|
||||||
int type = p[0];
|
int type = p[0];
|
||||||
|
|
||||||
b = bitstream_new(p + 1);
|
b = bitstream_new(p + 1);
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case 0x62: // Record date
|
case 0x62: // Record date
|
||||||
parse_num(&b, 8);
|
parse_num(&b, 8);
|
||||||
This->rec_curr_day = parse_bcd(&b, 6);
|
This->rec_curr_day = parse_bcd(&b, 6);
|
||||||
parse_num(&b, 2);
|
parse_num(&b, 2);
|
||||||
This->rec_curr_month = parse_bcd(&b, 5);
|
This->rec_curr_month = parse_bcd(&b, 5);
|
||||||
parse_num(&b, 3);
|
parse_num(&b, 3);
|
||||||
This->rec_curr_year = parse_bcd(&b, 8);
|
This->rec_curr_year = parse_bcd(&b, 8);
|
||||||
if (This->rec_curr_year < 25) {
|
if (This->rec_curr_year < 25) {
|
||||||
This->rec_curr_year += 2000;
|
This->rec_curr_year += 2000;
|
||||||
} else {
|
} else {
|
||||||
This->rec_curr_year += 1900;
|
This->rec_curr_year += 1900;
|
||||||
}
|
}
|
||||||
This->got_record_date = 1;
|
This->got_record_date = 1;
|
||||||
break;
|
break;
|
||||||
case 0x63: // Record time
|
case 0x63: // Record time
|
||||||
This->rec_curr_frame = parse_bcd(&b, 6);
|
This->rec_curr_frame = parse_bcd(&b, 6);
|
||||||
parse_num(&b, 2);
|
parse_num(&b, 2);
|
||||||
This->rec_curr_second = parse_bcd(&b, 7);
|
This->rec_curr_second = parse_bcd(&b, 7);
|
||||||
parse_num(&b, 1);
|
parse_num(&b, 1);
|
||||||
This->rec_curr_minute = parse_bcd(&b, 7);
|
This->rec_curr_minute = parse_bcd(&b, 7);
|
||||||
parse_num(&b, 1);
|
parse_num(&b, 1);
|
||||||
This->rec_curr_hour = parse_bcd(&b, 6);
|
This->rec_curr_hour = parse_bcd(&b, 6);
|
||||||
This->got_record_time = 1;
|
This->got_record_time = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void parse_header_block(indexer_dv_context * This, unsigned char* target)
|
static void parse_header_block(indexer_dv_context * This, unsigned char* target)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
for (i = 3; i < 80; i += 5) {
|
for (i = 3; i < 80; i += 5) {
|
||||||
if (target[i] != 0xff) {
|
if (target[i] != 0xff) {
|
||||||
parse_packet(This, target + i);
|
parse_packet(This, target + i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void parse_subcode_blocks(
|
static void parse_subcode_blocks(
|
||||||
indexer_dv_context * This, unsigned char* target)
|
indexer_dv_context * This, unsigned char* target)
|
||||||
{
|
{
|
||||||
int i,j;
|
int i,j;
|
||||||
|
|
||||||
for (j = 0; j < 2; j++) {
|
for (j = 0; j < 2; j++) {
|
||||||
for (i = 3; i < 80; i += 5) {
|
for (i = 3; i < 80; i += 5) {
|
||||||
if (target[i] != 0xff) {
|
if (target[i] != 0xff) {
|
||||||
parse_packet(This, target + i);
|
parse_packet(This, target + i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void parse_vaux_blocks(
|
static void parse_vaux_blocks(
|
||||||
indexer_dv_context * This, unsigned char* target)
|
indexer_dv_context * This, unsigned char* target)
|
||||||
{
|
{
|
||||||
int i,j;
|
int i,j;
|
||||||
|
|
||||||
for (j = 0; j < 3; j++) {
|
for (j = 0; j < 3; j++) {
|
||||||
for (i = 3; i < 80; i += 5) {
|
for (i = 3; i < 80; i += 5) {
|
||||||
if (target[i] != 0xff) {
|
if (target[i] != 0xff) {
|
||||||
parse_packet(This, target + i);
|
parse_packet(This, target + i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
target += 80;
|
target += 80;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void parse_audio_headers(
|
static void parse_audio_headers(
|
||||||
indexer_dv_context * This, unsigned char* target)
|
indexer_dv_context * This, unsigned char* target)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for(i = 0; i < 9; i++) {
|
for(i = 0; i < 9; i++) {
|
||||||
if (target[3] != 0xff) {
|
if (target[3] != 0xff) {
|
||||||
parse_packet(This, target + 3);
|
parse_packet(This, target + 3);
|
||||||
}
|
}
|
||||||
target += 16 * 80;
|
target += 16 * 80;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void parse_frame(indexer_dv_context * This,
|
static void parse_frame(indexer_dv_context * This,
|
||||||
unsigned char * framebuffer, int isPAL)
|
unsigned char * framebuffer, int isPAL)
|
||||||
{
|
{
|
||||||
int numDIFseq = isPAL ? 12 : 10;
|
int numDIFseq = isPAL ? 12 : 10;
|
||||||
unsigned char* target = framebuffer;
|
unsigned char* target = framebuffer;
|
||||||
int ds;
|
int ds;
|
||||||
|
|
||||||
for (ds = 0; ds < numDIFseq; ds++) {
|
for (ds = 0; ds < numDIFseq; ds++) {
|
||||||
parse_header_block(This, target);
|
parse_header_block(This, target);
|
||||||
target += 1 * 80;
|
target += 1 * 80;
|
||||||
parse_subcode_blocks(This, target);
|
parse_subcode_blocks(This, target);
|
||||||
target += 2 * 80;
|
target += 2 * 80;
|
||||||
parse_vaux_blocks(This, target);
|
parse_vaux_blocks(This, target);
|
||||||
target += 3 * 80;
|
target += 3 * 80;
|
||||||
parse_audio_headers(This, target);
|
parse_audio_headers(This, target);
|
||||||
target += 144 * 80;
|
target += 144 * 80;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void inc_frame(int * frame, time_t * t, int isPAL)
|
static void inc_frame(int * frame, time_t * t, int isPAL)
|
||||||
{
|
{
|
||||||
if ((isPAL && *frame >= 25) || (!isPAL && *frame >= 30)) {
|
if ((isPAL && *frame >= 25) || (!isPAL && *frame >= 30)) {
|
||||||
fprintf(stderr, "Ouchie: inc_frame: invalid_frameno: %d\n",
|
fprintf(stderr, "Ouchie: inc_frame: invalid_frameno: %d\n",
|
||||||
*frame);
|
*frame);
|
||||||
}
|
}
|
||||||
(*frame)++;
|
(*frame)++;
|
||||||
if (isPAL && *frame >= 25) {
|
if (isPAL && *frame >= 25) {
|
||||||
(*t)++;
|
(*t)++;
|
||||||
*frame = 0;
|
*frame = 0;
|
||||||
} else if (!isPAL && *frame >= 30) {
|
} else if (!isPAL && *frame >= 30) {
|
||||||
(*t)++;
|
(*t)++;
|
||||||
*frame = 0;
|
*frame = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void write_index(indexer_dv_context * This, anim_index_entry * entry)
|
static void write_index(indexer_dv_context * This, anim_index_entry * entry)
|
||||||
@ -256,36 +256,36 @@ static void fill_gap(indexer_dv_context * This, int isPAL)
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < This->fsize; i++) {
|
for (i = 0; i < This->fsize; i++) {
|
||||||
if (This->gap_start == This->ref_time_read &&
|
if (This->gap_start == This->ref_time_read &&
|
||||||
This->gap_frame == This->curr_frame) {
|
This->gap_frame == This->curr_frame) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"indexer_dv::fill_gap: "
|
"indexer_dv::fill_gap: "
|
||||||
"can't seek backwards !\n");
|
"can't seek backwards !\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
inc_frame(&This->gap_frame, &This->gap_start, isPAL);
|
inc_frame(&This->gap_frame, &This->gap_start, isPAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
while (This->gap_start != This->ref_time_read ||
|
while (This->gap_start != This->ref_time_read ||
|
||||||
This->gap_frame != This->curr_frame) {
|
This->gap_frame != This->curr_frame) {
|
||||||
inc_frame(&This->gap_frame, &This->gap_start, isPAL);
|
inc_frame(&This->gap_frame, &This->gap_start, isPAL);
|
||||||
This->frameno_offset++;
|
This->frameno_offset++;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < This->fsize; i++) {
|
for (i = 0; i < This->fsize; i++) {
|
||||||
write_index(This, This->backbuffer + i);
|
write_index(This, This->backbuffer + i);
|
||||||
}
|
}
|
||||||
This->fsize = 0;
|
This->fsize = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void proc_frame(indexer_dv_context * This,
|
static void proc_frame(indexer_dv_context * This,
|
||||||
unsigned char* UNUSED(framebuffer), int isPAL)
|
unsigned char* UNUSED(framebuffer), int isPAL)
|
||||||
{
|
{
|
||||||
struct tm recDate;
|
struct tm recDate;
|
||||||
time_t t;
|
time_t t;
|
||||||
|
|
||||||
if (!This->got_record_date || !This->got_record_time) {
|
if (!This->got_record_date || !This->got_record_time) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -329,9 +329,9 @@ static void proc_frame(indexer_dv_context * This,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void indexer_dv_proc_frame(anim_index_builder * idx,
|
static void indexer_dv_proc_frame(anim_index_builder * idx,
|
||||||
unsigned char * buffer,
|
unsigned char * buffer,
|
||||||
int UNUSED(data_size),
|
int UNUSED(data_size),
|
||||||
struct anim_index_entry * entry)
|
struct anim_index_entry * entry)
|
||||||
{
|
{
|
||||||
int isPAL;
|
int isPAL;
|
||||||
|
|
||||||
@ -354,7 +354,7 @@ static void indexer_dv_proc_frame(anim_index_builder * idx,
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
fprintf(stderr, "indexer_dv::indexer_dv_proc_frame: "
|
fprintf(stderr, "indexer_dv::indexer_dv_proc_frame: "
|
||||||
"backbuffer overrun, emergency flush");
|
"backbuffer overrun, emergency flush");
|
||||||
|
|
||||||
for (i = 0; i < This->fsize; i++) {
|
for (i = 0; i < This->fsize; i++) {
|
||||||
write_index(This, This->backbuffer+i);
|
write_index(This, This->backbuffer+i);
|
||||||
@ -379,7 +379,7 @@ static void indexer_dv_delete(anim_index_builder * idx)
|
|||||||
void IMB_indexer_dv_new(anim_index_builder * idx)
|
void IMB_indexer_dv_new(anim_index_builder * idx)
|
||||||
{
|
{
|
||||||
indexer_dv_context * rv = MEM_callocN(
|
indexer_dv_context * rv = MEM_callocN(
|
||||||
sizeof(indexer_dv_context), "index_dv builder context");
|
sizeof(indexer_dv_context), "index_dv builder context");
|
||||||
|
|
||||||
rv->ref_time_read = -1;
|
rv->ref_time_read = -1;
|
||||||
rv->curr_frame = -1;
|
rv->curr_frame = -1;
|
||||||
|
@ -487,7 +487,7 @@ void IMB_exr_add_channel(void *handle, const char *layname, const char *passname
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* only used for writing temp. render results (not image files) */
|
/* only used for writing temp. render results (not image files) */
|
||||||
void IMB_exr_begin_write(void *handle, const char *filename, int width, int height, int compress)
|
int IMB_exr_begin_write(void *handle, const char *filename, int width, int height, int compress)
|
||||||
{
|
{
|
||||||
ExrHandle *data= (ExrHandle *)handle;
|
ExrHandle *data= (ExrHandle *)handle;
|
||||||
Header header (width, height);
|
Header header (width, height);
|
||||||
@ -505,7 +505,16 @@ void IMB_exr_begin_write(void *handle, const char *filename, int width, int heig
|
|||||||
|
|
||||||
header.insert ("BlenderMultiChannel", StringAttribute ("Blender V2.55.1 and newer"));
|
header.insert ("BlenderMultiChannel", StringAttribute ("Blender V2.55.1 and newer"));
|
||||||
|
|
||||||
data->ofile = new OutputFile(filename, header);
|
/* avoid crash/abort when we dont have permission to write here */
|
||||||
|
try {
|
||||||
|
data->ofile = new OutputFile(filename, header);
|
||||||
|
}
|
||||||
|
catch (const std::exception &exc) {
|
||||||
|
std::cerr << "IMB_exr_begin_write: ERROR: " << exc.what() << std::endl;
|
||||||
|
data->ofile = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (data->ofile != NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void IMB_exrtile_begin_write(void *handle, const char *filename, int mipmap, int width, int height, int tilex, int tiley)
|
void IMB_exrtile_begin_write(void *handle, const char *filename, int mipmap, int width, int height, int tilex, int tiley)
|
||||||
|
@ -50,7 +50,7 @@ void * IMB_exr_get_handle (void);
|
|||||||
void IMB_exr_add_channel (void *handle, const char *layname, const char *passname, int xstride, int ystride, float *rect);
|
void IMB_exr_add_channel (void *handle, const char *layname, const char *passname, int xstride, int ystride, float *rect);
|
||||||
|
|
||||||
int IMB_exr_begin_read (void *handle, const char *filename, int *width, int *height);
|
int IMB_exr_begin_read (void *handle, const char *filename, int *width, int *height);
|
||||||
void IMB_exr_begin_write (void *handle, const char *filename, int width, int height, int compress);
|
int IMB_exr_begin_write (void *handle, const char *filename, int width, int height, int compress);
|
||||||
void IMB_exrtile_begin_write (void *handle, const char *filename, int mipmap, int width, int height, int tilex, int tiley);
|
void IMB_exrtile_begin_write (void *handle, const char *filename, int mipmap, int width, int height, int tilex, int tiley);
|
||||||
|
|
||||||
void IMB_exr_set_channel (void *handle, const char *layname, const char *passname, int xstride, int ystride, float *rect);
|
void IMB_exr_set_channel (void *handle, const char *layname, const char *passname, int xstride, int ystride, float *rect);
|
||||||
@ -75,7 +75,7 @@ void * IMB_exr_get_handle (void) {return NULL;}
|
|||||||
void IMB_exr_add_channel (void *handle, const char *layname, const char *channame, int xstride, int ystride, float *rect) { (void)handle; (void)layname; (void)channame; (void)xstride; (void)ystride; (void)rect; }
|
void IMB_exr_add_channel (void *handle, const char *layname, const char *channame, int xstride, int ystride, float *rect) { (void)handle; (void)layname; (void)channame; (void)xstride; (void)ystride; (void)rect; }
|
||||||
|
|
||||||
int IMB_exr_begin_read (void *handle, const char *filename, int *width, int *height) { (void)handle; (void)filename; (void)width; (void)height; return 0;}
|
int IMB_exr_begin_read (void *handle, const char *filename, int *width, int *height) { (void)handle; (void)filename; (void)width; (void)height; return 0;}
|
||||||
void IMB_exr_begin_write (void *handle, const char *filename, int width, int height, int compress) { (void)handle; (void)filename; (void)width; (void)height; (void)compress; }
|
int IMB_exr_begin_write (void *handle, const char *filename, int width, int height, int compress) { (void)handle; (void)filename; (void)width; (void)height; (void)compress; return 0;}
|
||||||
void IMB_exrtile_begin_write (void *handle, const char *filename, int mipmap, int width, int height, int tilex, int tiley) { (void)handle; (void)filename; (void)mipmap; (void)width; (void)height; (void)tilex; (void)tiley; }
|
void IMB_exrtile_begin_write (void *handle, const char *filename, int mipmap, int width, int height, int tilex, int tiley) { (void)handle; (void)filename; (void)mipmap; (void)width; (void)height; (void)tilex; (void)tiley; }
|
||||||
|
|
||||||
void IMB_exr_set_channel (void *handle, char *layname, const char *channame, int xstride, int ystride, float *rect) { (void)handle; (void)layname; (void)channame; (void)xstride; (void)ystride; (void)rect; }
|
void IMB_exr_set_channel (void *handle, char *layname, const char *channame, int xstride, int ystride, float *rect) { (void)handle; (void)layname; (void)channame; (void)xstride; (void)ystride; (void)rect; }
|
||||||
|
@ -482,7 +482,7 @@ void IMB_rectfill(struct ImBuf *drect, const float col[4])
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void buf_rectfill_area(unsigned char *rect, float *rectf, int width, int height, float *col, int x1, int y1, int x2, int y2)
|
void buf_rectfill_area(unsigned char *rect, float *rectf, int width, int height, const float col[4], int x1, int y1, int x2, int y2)
|
||||||
{
|
{
|
||||||
int i, j;
|
int i, j;
|
||||||
float a; /* alpha */
|
float a; /* alpha */
|
||||||
@ -510,6 +510,8 @@ void buf_rectfill_area(unsigned char *rect, float *rectf, int width, int height,
|
|||||||
unsigned char chr=0, chg=0, chb=0;
|
unsigned char chr=0, chg=0, chb=0;
|
||||||
float fr=0, fg=0, fb=0;
|
float fr=0, fg=0, fb=0;
|
||||||
|
|
||||||
|
const int alphaint= FTOCHAR(a);
|
||||||
|
|
||||||
if (a == 1.0f) {
|
if (a == 1.0f) {
|
||||||
chr = FTOCHAR(col[0]);
|
chr = FTOCHAR(col[0]);
|
||||||
chg = FTOCHAR(col[1]);
|
chg = FTOCHAR(col[1]);
|
||||||
@ -527,10 +529,13 @@ void buf_rectfill_area(unsigned char *rect, float *rectf, int width, int height,
|
|||||||
pixel[0] = chr;
|
pixel[0] = chr;
|
||||||
pixel[1] = chg;
|
pixel[1] = chg;
|
||||||
pixel[2] = chb;
|
pixel[2] = chb;
|
||||||
|
pixel[3] = 255;
|
||||||
} else {
|
} else {
|
||||||
|
int alphatest;
|
||||||
pixel[0] = (char)((fr + ((float)pixel[0]*aich))*255.0f);
|
pixel[0] = (char)((fr + ((float)pixel[0]*aich))*255.0f);
|
||||||
pixel[1] = (char)((fg + ((float)pixel[1]*aich))*255.0f);
|
pixel[1] = (char)((fg + ((float)pixel[1]*aich))*255.0f);
|
||||||
pixel[2] = (char)((fb + ((float)pixel[2]*aich))*255.0f);
|
pixel[2] = (char)((fb + ((float)pixel[2]*aich))*255.0f);
|
||||||
|
pixel[3] = (char)((alphatest= ((int)pixel[3] + alphaint)) < 255 ? alphatest : 255);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -546,10 +551,13 @@ void buf_rectfill_area(unsigned char *rect, float *rectf, int width, int height,
|
|||||||
pixel[0] = col[0];
|
pixel[0] = col[0];
|
||||||
pixel[1] = col[1];
|
pixel[1] = col[1];
|
||||||
pixel[2] = col[2];
|
pixel[2] = col[2];
|
||||||
|
pixel[3] = 1.0f;
|
||||||
} else {
|
} else {
|
||||||
|
float alphatest;
|
||||||
pixel[0] = (col[0]*a) + (pixel[0]*ai);
|
pixel[0] = (col[0]*a) + (pixel[0]*ai);
|
||||||
pixel[1] = (col[1]*a) + (pixel[1]*ai);
|
pixel[1] = (col[1]*a) + (pixel[1]*ai);
|
||||||
pixel[2] = (col[2]*a) + (pixel[2]*ai);
|
pixel[2] = (col[2]*a) + (pixel[2]*ai);
|
||||||
|
pixel[3] = (alphatest= (pixel[3] + a)) < 1.0f ? alphatest : 1.0f;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -55,7 +55,6 @@ short IMB_saveiff(struct ImBuf *ibuf, const char *name, int flags)
|
|||||||
if(ibuf->rect==NULL && ibuf->rect_float)
|
if(ibuf->rect==NULL && ibuf->rect_float)
|
||||||
IMB_rect_from_float(ibuf);
|
IMB_rect_from_float(ibuf);
|
||||||
}
|
}
|
||||||
/* TODO. have const char for image write funcs */
|
|
||||||
return type->save(ibuf, name, flags);
|
return type->save(ibuf, name, flags);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2216,8 +2216,17 @@ char *RNA_property_string_get_alloc(PointerRNA *ptr, PropertyRNA *prop, char *fi
|
|||||||
else
|
else
|
||||||
buf= MEM_mallocN(sizeof(char)*(length+1), "RNA_string_get_alloc");
|
buf= MEM_mallocN(sizeof(char)*(length+1), "RNA_string_get_alloc");
|
||||||
|
|
||||||
|
#ifndef NDEBUG
|
||||||
|
/* safety check to ensure the string is actually set */
|
||||||
|
buf[length]= 255;
|
||||||
|
#endif
|
||||||
|
|
||||||
RNA_property_string_get(ptr, prop, buf);
|
RNA_property_string_get(ptr, prop, buf);
|
||||||
|
|
||||||
|
#ifndef NDEBUG
|
||||||
|
BLI_assert(buf[length] == '\0');
|
||||||
|
#endif
|
||||||
|
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -184,7 +184,11 @@ static void rna_DomainFluidSettings_memory_estimate_get(PointerRNA *ptr, char *v
|
|||||||
|
|
||||||
static int rna_DomainFluidSettings_memory_estimate_length(PointerRNA *ptr)
|
static int rna_DomainFluidSettings_memory_estimate_length(PointerRNA *ptr)
|
||||||
{
|
{
|
||||||
return 32;
|
#ifdef DISABLE_ELBEEM
|
||||||
|
return 0;
|
||||||
|
#else
|
||||||
|
return 31;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *rna_FluidSettings_path(PointerRNA *ptr)
|
static char *rna_FluidSettings_path(PointerRNA *ptr)
|
||||||
|
@ -111,7 +111,7 @@ void RNA_api_scene(StructRNA *srna)
|
|||||||
#ifdef WITH_COLLADA
|
#ifdef WITH_COLLADA
|
||||||
/* don't remove this, as COLLADA exporting cannot be done through operators in render() callback. */
|
/* don't remove this, as COLLADA exporting cannot be done through operators in render() callback. */
|
||||||
func= RNA_def_function(srna, "collada_export", "rna_Scene_collada_export");
|
func= RNA_def_function(srna, "collada_export", "rna_Scene_collada_export");
|
||||||
parm= RNA_def_string(func, "filepath", "", FILE_MAX, "File Path", "File path to write Collada file.");
|
RNA_def_string(func, "filepath", "", FILE_MAX, "File Path", "File path to write Collada file.");
|
||||||
parm= RNA_def_boolean(func, "selected", 0, "Export only selected", "Export only selected elements.");
|
parm= RNA_def_boolean(func, "selected", 0, "Export only selected", "Export only selected elements.");
|
||||||
RNA_def_property_flag(parm, PROP_REQUIRED);
|
RNA_def_property_flag(parm, PROP_REQUIRED);
|
||||||
RNA_def_property_subtype(parm, PROP_FILEPATH); /* allow non utf8 */
|
RNA_def_property_subtype(parm, PROP_FILEPATH); /* allow non utf8 */
|
||||||
|
@ -591,7 +591,8 @@ static void rna_SpaceTextEditor_text_set(PointerRNA *ptr, PointerRNA value)
|
|||||||
SpaceText *st= (SpaceText*)(ptr->data);
|
SpaceText *st= (SpaceText*)(ptr->data);
|
||||||
|
|
||||||
st->text= value.data;
|
st->text= value.data;
|
||||||
st->top= 0;
|
|
||||||
|
WM_main_add_notifier(NC_TEXT|NA_SELECTED, st->text);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void rna_SpaceTextEditor_updateEdited(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
|
static void rna_SpaceTextEditor_updateEdited(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
|
||||||
|
@ -680,20 +680,14 @@ static void rna_wmKeyMapItem_name_get(PointerRNA *ptr, char *value)
|
|||||||
{
|
{
|
||||||
wmKeyMapItem *kmi= ptr->data;
|
wmKeyMapItem *kmi= ptr->data;
|
||||||
wmOperatorType *ot= WM_operatortype_find(kmi->idname, 1);
|
wmOperatorType *ot= WM_operatortype_find(kmi->idname, 1);
|
||||||
|
strcpy(value, ot ? ot->name : kmi->idname);
|
||||||
if (ot)
|
|
||||||
strcpy(value, ot->name);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int rna_wmKeyMapItem_name_length(PointerRNA *ptr)
|
static int rna_wmKeyMapItem_name_length(PointerRNA *ptr)
|
||||||
{
|
{
|
||||||
wmKeyMapItem *kmi= ptr->data;
|
wmKeyMapItem *kmi= ptr->data;
|
||||||
wmOperatorType *ot= WM_operatortype_find(kmi->idname, 1);
|
wmOperatorType *ot= WM_operatortype_find(kmi->idname, 1);
|
||||||
|
return strlen(ot ? ot->name : kmi->idname);
|
||||||
if (ot)
|
|
||||||
return strlen(ot->name);
|
|
||||||
else
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int rna_KeyMapItem_userdefined_get(PointerRNA *ptr)
|
static int rna_KeyMapItem_userdefined_get(PointerRNA *ptr)
|
||||||
@ -1653,6 +1647,8 @@ static void rna_def_keyconfig(BlenderRNA *brna)
|
|||||||
RNA_def_struct_name_property(srna, prop);
|
RNA_def_struct_name_property(srna, prop);
|
||||||
RNA_def_property_update(prop, 0, "rna_KeyMapItem_update");
|
RNA_def_property_update(prop, 0, "rna_KeyMapItem_update");
|
||||||
|
|
||||||
|
/* this is infact the operator name, but if the operator can't be found we
|
||||||
|
* fallback on the operator ID */
|
||||||
prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
|
prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
|
||||||
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
|
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
|
||||||
RNA_def_property_ui_text(prop, "Name", "Name of operator to call on input event");
|
RNA_def_property_ui_text(prop, "Name", "Name of operator to call on input event");
|
||||||
|
@ -52,11 +52,9 @@ static int Buffer_len(Buffer *self);
|
|||||||
static PyObject *Buffer_item(Buffer *self, int i);
|
static PyObject *Buffer_item(Buffer *self, int i);
|
||||||
static PyObject *Buffer_slice(Buffer *self, int begin, int end);
|
static PyObject *Buffer_slice(Buffer *self, int begin, int end);
|
||||||
static int Buffer_ass_item(Buffer *self, int i, PyObject *v);
|
static int Buffer_ass_item(Buffer *self, int i, PyObject *v);
|
||||||
static int Buffer_ass_slice(Buffer *self, int begin, int end,
|
static int Buffer_ass_slice(Buffer *self, int begin, int end, PyObject *seq);
|
||||||
PyObject *seq);
|
|
||||||
static PyObject *Buffer_subscript(Buffer *self, PyObject *item);
|
static PyObject *Buffer_subscript(Buffer *self, PyObject *item);
|
||||||
static int Buffer_ass_subscript(Buffer *self, PyObject *item,
|
static int Buffer_ass_subscript(Buffer *self, PyObject *item, PyObject *value);
|
||||||
PyObject *value);
|
|
||||||
|
|
||||||
static PySequenceMethods Buffer_SeqMethods = {
|
static PySequenceMethods Buffer_SeqMethods = {
|
||||||
(lenfunc) Buffer_len, /*sq_length */
|
(lenfunc) Buffer_len, /*sq_length */
|
||||||
|
@ -208,78 +208,35 @@ PyObject *PyC_Object_GetAttrStringArgs(PyObject *o, Py_ssize_t n, ...)
|
|||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* returns the exception string as a new PyUnicode object, depends on external StringIO module */
|
/* returns the exception string as a new PyUnicode object, depends on external traceback module */
|
||||||
PyObject *PyC_ExceptionBuffer(void)
|
PyObject *PyC_ExceptionBuffer(void)
|
||||||
{
|
{
|
||||||
PyObject *stdout_backup = PySys_GetObject("stdout"); /* borrowed */
|
PyObject *traceback_mod= NULL;
|
||||||
PyObject *stderr_backup = PySys_GetObject("stderr"); /* borrowed */
|
PyObject *format_tb_func= NULL;
|
||||||
PyObject *string_io = NULL;
|
PyObject *ret= NULL;
|
||||||
PyObject *string_io_buf = NULL;
|
|
||||||
PyObject *string_io_mod= NULL;
|
|
||||||
PyObject *string_io_getvalue= NULL;
|
|
||||||
|
|
||||||
PyObject *error_type, *error_value, *error_traceback;
|
if(! (traceback_mod= PyImport_ImportModule("traceback")) ) {
|
||||||
|
|
||||||
if (!PyErr_Occurred())
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
PyErr_Fetch(&error_type, &error_value, &error_traceback);
|
|
||||||
|
|
||||||
PyErr_Clear();
|
|
||||||
|
|
||||||
/* import io
|
|
||||||
* string_io = io.StringIO()
|
|
||||||
*/
|
|
||||||
|
|
||||||
if(! (string_io_mod= PyImport_ImportModule("io")) ) {
|
|
||||||
goto error_cleanup;
|
goto error_cleanup;
|
||||||
}
|
}
|
||||||
else if (! (string_io = PyObject_CallMethod(string_io_mod, (char *)"StringIO", NULL))) {
|
else if (! (format_tb_func= PyObject_GetAttrString(traceback_mod, "format_exc"))) {
|
||||||
goto error_cleanup;
|
|
||||||
}
|
|
||||||
else if (! (string_io_getvalue= PyObject_GetAttrString(string_io, "getvalue"))) {
|
|
||||||
goto error_cleanup;
|
goto error_cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
Py_INCREF(stdout_backup); // since these were borrowed we dont want them freed when replaced.
|
ret= PyObject_CallObject(format_tb_func, NULL);
|
||||||
Py_INCREF(stderr_backup);
|
|
||||||
|
|
||||||
PySys_SetObject("stdout", string_io); // both of these are free'd when restoring
|
|
||||||
PySys_SetObject("stderr", string_io);
|
|
||||||
|
|
||||||
PyErr_Restore(error_type, error_value, error_traceback);
|
|
||||||
PyErr_Print(); /* print the error */
|
|
||||||
PyErr_Clear();
|
|
||||||
|
|
||||||
string_io_buf = PyObject_CallObject(string_io_getvalue, NULL);
|
|
||||||
|
|
||||||
PySys_SetObject("stdout", stdout_backup);
|
|
||||||
PySys_SetObject("stderr", stderr_backup);
|
|
||||||
|
|
||||||
Py_DECREF(stdout_backup); /* now sys owns the ref again */
|
|
||||||
Py_DECREF(stderr_backup);
|
|
||||||
|
|
||||||
Py_DECREF(string_io_mod);
|
|
||||||
Py_DECREF(string_io_getvalue);
|
|
||||||
Py_DECREF(string_io); /* free the original reference */
|
|
||||||
|
|
||||||
PyErr_Clear();
|
|
||||||
return string_io_buf;
|
|
||||||
|
|
||||||
|
if(ret == Py_None) {
|
||||||
|
Py_DECREF(ret);
|
||||||
|
ret= NULL;
|
||||||
|
}
|
||||||
|
|
||||||
error_cleanup:
|
error_cleanup:
|
||||||
/* could not import the module so print the error and close */
|
/* could not import the module so print the error and close */
|
||||||
Py_XDECREF(string_io_mod);
|
Py_XDECREF(traceback_mod);
|
||||||
Py_XDECREF(string_io);
|
Py_XDECREF(format_tb_func);
|
||||||
|
|
||||||
PyErr_Restore(error_type, error_value, error_traceback);
|
return ret;
|
||||||
PyErr_Print(); /* print the error */
|
|
||||||
PyErr_Clear();
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* string conversion, escape non-unicode chars, coerce must be set to NULL */
|
/* string conversion, escape non-unicode chars, coerce must be set to NULL */
|
||||||
const char *PyC_UnicodeAsByte(PyObject *py_str, PyObject **coerce)
|
const char *PyC_UnicodeAsByte(PyObject *py_str, PyObject **coerce)
|
||||||
{
|
{
|
||||||
|
@ -42,9 +42,10 @@ static PyTypeObject BlenderAppCbType;
|
|||||||
static PyStructSequence_Field app_cb_info_fields[]= {
|
static PyStructSequence_Field app_cb_info_fields[]= {
|
||||||
{(char *)"render_pre", NULL},
|
{(char *)"render_pre", NULL},
|
||||||
{(char *)"render_post", NULL},
|
{(char *)"render_post", NULL},
|
||||||
{(char *)"load_pre", NULL},
|
{(char *)"render_stats", NULL},
|
||||||
|
{(char *)"load_pre", NULL},
|
||||||
{(char *)"load_post", NULL},
|
{(char *)"load_post", NULL},
|
||||||
{(char *)"save_pre", NULL},
|
{(char *)"save_pre", NULL},
|
||||||
{(char *)"save_post", NULL},
|
{(char *)"save_post", NULL},
|
||||||
{NULL}
|
{NULL}
|
||||||
};
|
};
|
||||||
|
@ -40,7 +40,7 @@ PyObject *bpy_intern_str___slots__;
|
|||||||
void bpy_intern_string_init(void)
|
void bpy_intern_string_init(void)
|
||||||
{
|
{
|
||||||
bpy_intern_str_register= PyUnicode_FromString("register");
|
bpy_intern_str_register= PyUnicode_FromString("register");
|
||||||
bpy_intern_str_unregister= PyUnicode_FromString("unregister");;
|
bpy_intern_str_unregister= PyUnicode_FromString("unregister");
|
||||||
bpy_intern_str_bl_rna= PyUnicode_FromString("bl_rna");
|
bpy_intern_str_bl_rna= PyUnicode_FromString("bl_rna");
|
||||||
bpy_intern_str_order= PyUnicode_FromString("order");
|
bpy_intern_str_order= PyUnicode_FromString("order");
|
||||||
bpy_intern_str_attr= PyUnicode_FromString("attr");
|
bpy_intern_str_attr= PyUnicode_FromString("attr");
|
||||||
|
@ -1298,7 +1298,9 @@ PyObject *pyrna_prop_to_py(PointerRNA *ptr, PropertyRNA *prop)
|
|||||||
{
|
{
|
||||||
int subtype= RNA_property_subtype(prop);
|
int subtype= RNA_property_subtype(prop);
|
||||||
const char *buf;
|
const char *buf;
|
||||||
buf= RNA_property_string_get_alloc(ptr, prop, NULL, -1);
|
char buf_fixed[32];
|
||||||
|
|
||||||
|
buf= RNA_property_string_get_alloc(ptr, prop, buf_fixed, sizeof(buf_fixed));
|
||||||
#ifdef USE_STRING_COERCE
|
#ifdef USE_STRING_COERCE
|
||||||
/* only file paths get special treatment, they may contain non utf-8 chars */
|
/* only file paths get special treatment, they may contain non utf-8 chars */
|
||||||
if(ELEM3(subtype, PROP_FILEPATH, PROP_DIRPATH, PROP_FILENAME)) {
|
if(ELEM3(subtype, PROP_FILEPATH, PROP_DIRPATH, PROP_FILENAME)) {
|
||||||
@ -1310,7 +1312,9 @@ PyObject *pyrna_prop_to_py(PointerRNA *ptr, PropertyRNA *prop)
|
|||||||
#else // USE_STRING_COERCE
|
#else // USE_STRING_COERCE
|
||||||
ret= PyUnicode_FromString(buf);
|
ret= PyUnicode_FromString(buf);
|
||||||
#endif // USE_STRING_COERCE
|
#endif // USE_STRING_COERCE
|
||||||
MEM_freeN((void *)buf);
|
if(buf_fixed != buf) {
|
||||||
|
MEM_freeN((void *)buf);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case PROP_ENUM:
|
case PROP_ENUM:
|
||||||
@ -4627,28 +4631,28 @@ static PyObject *pyrna_func_call(BPy_FunctionRNA *self, PyObject *args, PyObject
|
|||||||
/* note: tp_base member is set to &PyType_Type on init */
|
/* note: tp_base member is set to &PyType_Type on init */
|
||||||
PyTypeObject pyrna_struct_meta_idprop_Type= {
|
PyTypeObject pyrna_struct_meta_idprop_Type= {
|
||||||
PyVarObject_HEAD_INIT(NULL, 0)
|
PyVarObject_HEAD_INIT(NULL, 0)
|
||||||
"bpy_struct_meta_idprop", /* tp_name */
|
"bpy_struct_meta_idprop", /* tp_name */
|
||||||
sizeof(PyHeapTypeObject), /* tp_basicsize */ // XXX, would be PyTypeObject, but subtypes of Type must be PyHeapTypeObject's
|
sizeof(PyHeapTypeObject), /* tp_basicsize */ // XXX, would be PyTypeObject, but subtypes of Type must be PyHeapTypeObject's
|
||||||
0, /* tp_itemsize */
|
0, /* tp_itemsize */
|
||||||
/* methods */
|
/* methods */
|
||||||
NULL, /* tp_dealloc */
|
NULL, /* tp_dealloc */
|
||||||
NULL, /* printfunc tp_print; */
|
NULL, /* printfunc tp_print; */
|
||||||
NULL, /* getattrfunc tp_getattr; */
|
NULL, /* getattrfunc tp_getattr; */
|
||||||
NULL, /* setattrfunc tp_setattr; */
|
NULL, /* setattrfunc tp_setattr; */
|
||||||
NULL, /* tp_compare */ /* deprecated in python 3.0! */
|
NULL, /* tp_compare */ /* deprecated in python 3.0! */
|
||||||
NULL, /* tp_repr */
|
NULL, /* tp_repr */
|
||||||
|
|
||||||
/* Method suites for standard classes */
|
/* Method suites for standard classes */
|
||||||
NULL, /* PyNumberMethods *tp_as_number; */
|
NULL, /* PyNumberMethods *tp_as_number; */
|
||||||
NULL, /* PySequenceMethods *tp_as_sequence; */
|
NULL, /* PySequenceMethods *tp_as_sequence; */
|
||||||
NULL, /* PyMappingMethods *tp_as_mapping; */
|
NULL, /* PyMappingMethods *tp_as_mapping; */
|
||||||
|
|
||||||
/* More standard operations (here for binary compatibility) */
|
/* More standard operations (here for binary compatibility) */
|
||||||
NULL, /* hashfunc tp_hash; */
|
NULL, /* hashfunc tp_hash; */
|
||||||
NULL, /* ternaryfunc tp_call; */
|
NULL, /* ternaryfunc tp_call; */
|
||||||
NULL, /* reprfunc tp_str; */
|
NULL, /* reprfunc tp_str; */
|
||||||
NULL /*(getattrofunc) pyrna_struct_meta_idprop_getattro*/, /* getattrofunc tp_getattro; */
|
NULL /*(getattrofunc) pyrna_struct_meta_idprop_getattro*/, /* getattrofunc tp_getattro; */
|
||||||
(setattrofunc) pyrna_struct_meta_idprop_setattro, /* setattrofunc tp_setattro; */
|
(setattrofunc) pyrna_struct_meta_idprop_setattro, /* setattrofunc tp_setattro; */
|
||||||
|
|
||||||
/* Functions to access object as input/output buffer */
|
/* Functions to access object as input/output buffer */
|
||||||
NULL, /* PyBufferProcs *tp_as_buffer; */
|
NULL, /* PyBufferProcs *tp_as_buffer; */
|
||||||
@ -4656,7 +4660,7 @@ PyTypeObject pyrna_struct_meta_idprop_Type= {
|
|||||||
/*** Flags to define presence of optional/expanded features ***/
|
/*** Flags to define presence of optional/expanded features ***/
|
||||||
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* long tp_flags; */
|
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* long tp_flags; */
|
||||||
|
|
||||||
NULL, /* char *tp_doc; Documentation string */
|
NULL, /* char *tp_doc; Documentation string */
|
||||||
/*** Assigned meaning in release 2.0 ***/
|
/*** Assigned meaning in release 2.0 ***/
|
||||||
/* call function for all accessible objects */
|
/* call function for all accessible objects */
|
||||||
NULL, /* traverseproc tp_traverse; */
|
NULL, /* traverseproc tp_traverse; */
|
||||||
@ -4666,7 +4670,7 @@ PyTypeObject pyrna_struct_meta_idprop_Type= {
|
|||||||
|
|
||||||
/*** Assigned meaning in release 2.1 ***/
|
/*** Assigned meaning in release 2.1 ***/
|
||||||
/*** rich comparisons ***/
|
/*** rich comparisons ***/
|
||||||
NULL, /* richcmpfunc tp_richcompare; */
|
NULL, /* richcmpfunc tp_richcompare; */
|
||||||
|
|
||||||
/*** weak reference enabler ***/
|
/*** weak reference enabler ***/
|
||||||
0, /* long tp_weaklistoffset; */
|
0, /* long tp_weaklistoffset; */
|
||||||
@ -4677,9 +4681,9 @@ PyTypeObject pyrna_struct_meta_idprop_Type= {
|
|||||||
NULL, /* iternextfunc tp_iternext; */
|
NULL, /* iternextfunc tp_iternext; */
|
||||||
|
|
||||||
/*** Attribute descriptor and subclassing stuff ***/
|
/*** Attribute descriptor and subclassing stuff ***/
|
||||||
NULL, /* struct PyMethodDef *tp_methods; */
|
NULL, /* struct PyMethodDef *tp_methods; */
|
||||||
NULL, /* struct PyMemberDef *tp_members; */
|
NULL, /* struct PyMemberDef *tp_members; */
|
||||||
NULL, /* struct PyGetSetDef *tp_getset; */
|
NULL, /* struct PyGetSetDef *tp_getset; */
|
||||||
NULL, /* struct _typeobject *tp_base; */
|
NULL, /* struct _typeobject *tp_base; */
|
||||||
NULL, /* PyObject *tp_dict; */
|
NULL, /* PyObject *tp_dict; */
|
||||||
NULL, /* descrgetfunc tp_descr_get; */
|
NULL, /* descrgetfunc tp_descr_get; */
|
||||||
@ -4687,7 +4691,7 @@ PyTypeObject pyrna_struct_meta_idprop_Type= {
|
|||||||
0, /* long tp_dictoffset; */
|
0, /* long tp_dictoffset; */
|
||||||
NULL, /* initproc tp_init; */
|
NULL, /* initproc tp_init; */
|
||||||
NULL, /* allocfunc tp_alloc; */
|
NULL, /* allocfunc tp_alloc; */
|
||||||
NULL, /* newfunc tp_new; */
|
NULL, /* newfunc tp_new; */
|
||||||
/* Low-level free-memory routine */
|
/* Low-level free-memory routine */
|
||||||
NULL, /* freefunc tp_free; */
|
NULL, /* freefunc tp_free; */
|
||||||
/* For PyObject_IS_GC */
|
/* For PyObject_IS_GC */
|
||||||
@ -4705,45 +4709,45 @@ PyTypeObject pyrna_struct_meta_idprop_Type= {
|
|||||||
/*-----------------------BPy_StructRNA method def------------------------------*/
|
/*-----------------------BPy_StructRNA method def------------------------------*/
|
||||||
PyTypeObject pyrna_struct_Type= {
|
PyTypeObject pyrna_struct_Type= {
|
||||||
PyVarObject_HEAD_INIT(NULL, 0)
|
PyVarObject_HEAD_INIT(NULL, 0)
|
||||||
"bpy_struct", /* tp_name */
|
"bpy_struct", /* tp_name */
|
||||||
sizeof(BPy_StructRNA), /* tp_basicsize */
|
sizeof(BPy_StructRNA), /* tp_basicsize */
|
||||||
0, /* tp_itemsize */
|
0, /* tp_itemsize */
|
||||||
/* methods */
|
/* methods */
|
||||||
(destructor) pyrna_struct_dealloc,/* tp_dealloc */
|
(destructor) pyrna_struct_dealloc,/* tp_dealloc */
|
||||||
NULL, /* printfunc tp_print; */
|
NULL, /* printfunc tp_print; */
|
||||||
NULL, /* getattrfunc tp_getattr; */
|
NULL, /* getattrfunc tp_getattr; */
|
||||||
NULL, /* setattrfunc tp_setattr; */
|
NULL, /* setattrfunc tp_setattr; */
|
||||||
NULL, /* tp_compare */ /* DEPRECATED in python 3.0! */
|
NULL, /* tp_compare */ /* DEPRECATED in python 3.0! */
|
||||||
(reprfunc) pyrna_struct_repr, /* tp_repr */
|
(reprfunc) pyrna_struct_repr, /* tp_repr */
|
||||||
|
|
||||||
/* Method suites for standard classes */
|
/* Method suites for standard classes */
|
||||||
|
|
||||||
NULL, /* PyNumberMethods *tp_as_number; */
|
NULL, /* PyNumberMethods *tp_as_number; */
|
||||||
&pyrna_struct_as_sequence, /* PySequenceMethods *tp_as_sequence; */
|
&pyrna_struct_as_sequence, /* PySequenceMethods *tp_as_sequence; */
|
||||||
&pyrna_struct_as_mapping, /* PyMappingMethods *tp_as_mapping; */
|
&pyrna_struct_as_mapping, /* PyMappingMethods *tp_as_mapping; */
|
||||||
|
|
||||||
/* More standard operations (here for binary compatibility) */
|
/* More standard operations (here for binary compatibility) */
|
||||||
|
|
||||||
(hashfunc) pyrna_struct_hash, /* hashfunc tp_hash; */
|
(hashfunc) pyrna_struct_hash, /* hashfunc tp_hash; */
|
||||||
NULL, /* ternaryfunc tp_call; */
|
NULL, /* ternaryfunc tp_call; */
|
||||||
(reprfunc) pyrna_struct_str, /* reprfunc tp_str; */
|
(reprfunc) pyrna_struct_str, /* reprfunc tp_str; */
|
||||||
(getattrofunc) pyrna_struct_getattro, /* getattrofunc tp_getattro; */
|
(getattrofunc) pyrna_struct_getattro, /* getattrofunc tp_getattro; */
|
||||||
(setattrofunc) pyrna_struct_setattro, /* setattrofunc tp_setattro; */
|
(setattrofunc) pyrna_struct_setattro, /* setattrofunc tp_setattro; */
|
||||||
|
|
||||||
/* Functions to access object as input/output buffer */
|
/* Functions to access object as input/output buffer */
|
||||||
NULL, /* PyBufferProcs *tp_as_buffer; */
|
NULL, /* PyBufferProcs *tp_as_buffer; */
|
||||||
|
|
||||||
/*** Flags to define presence of optional/expanded features ***/
|
/*** Flags to define presence of optional/expanded features ***/
|
||||||
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC, /* long tp_flags; */
|
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC, /* long tp_flags; */
|
||||||
|
|
||||||
NULL, /* char *tp_doc; Documentation string */
|
NULL, /* char *tp_doc; Documentation string */
|
||||||
/*** Assigned meaning in release 2.0 ***/
|
/*** Assigned meaning in release 2.0 ***/
|
||||||
/* call function for all accessible objects */
|
/* call function for all accessible objects */
|
||||||
#ifdef USE_PYRNA_STRUCT_REFERENCE
|
#ifdef USE_PYRNA_STRUCT_REFERENCE
|
||||||
(traverseproc) pyrna_struct_traverse, /* traverseproc tp_traverse; */
|
(traverseproc) pyrna_struct_traverse, /* traverseproc tp_traverse; */
|
||||||
|
|
||||||
/* delete references to contained objects */
|
/* delete references to contained objects */
|
||||||
(inquiry)pyrna_struct_clear, /* inquiry tp_clear; */
|
(inquiry)pyrna_struct_clear, /* inquiry tp_clear; */
|
||||||
#else
|
#else
|
||||||
NULL, /* traverseproc tp_traverse; */
|
NULL, /* traverseproc tp_traverse; */
|
||||||
|
|
||||||
@ -4753,11 +4757,11 @@ PyTypeObject pyrna_struct_Type= {
|
|||||||
|
|
||||||
/*** Assigned meaning in release 2.1 ***/
|
/*** Assigned meaning in release 2.1 ***/
|
||||||
/*** rich comparisons ***/
|
/*** rich comparisons ***/
|
||||||
(richcmpfunc)pyrna_struct_richcmp, /* richcmpfunc tp_richcompare; */
|
(richcmpfunc)pyrna_struct_richcmp, /* richcmpfunc tp_richcompare; */
|
||||||
|
|
||||||
/*** weak reference enabler ***/
|
/*** weak reference enabler ***/
|
||||||
#ifdef USE_WEAKREFS
|
#ifdef USE_WEAKREFS
|
||||||
offsetof(BPy_StructRNA, in_weakreflist), /* long tp_weaklistoffset; */
|
offsetof(BPy_StructRNA, in_weakreflist), /* long tp_weaklistoffset; */
|
||||||
#else
|
#else
|
||||||
0,
|
0,
|
||||||
#endif
|
#endif
|
||||||
@ -4767,9 +4771,9 @@ PyTypeObject pyrna_struct_Type= {
|
|||||||
NULL, /* iternextfunc tp_iternext; */
|
NULL, /* iternextfunc tp_iternext; */
|
||||||
|
|
||||||
/*** Attribute descriptor and subclassing stuff ***/
|
/*** Attribute descriptor and subclassing stuff ***/
|
||||||
pyrna_struct_methods, /* struct PyMethodDef *tp_methods; */
|
pyrna_struct_methods, /* struct PyMethodDef *tp_methods; */
|
||||||
NULL, /* struct PyMemberDef *tp_members; */
|
NULL, /* struct PyMemberDef *tp_members; */
|
||||||
pyrna_struct_getseters, /* struct PyGetSetDef *tp_getset; */
|
pyrna_struct_getseters, /* struct PyGetSetDef *tp_getset; */
|
||||||
NULL, /* struct _typeobject *tp_base; */
|
NULL, /* struct _typeobject *tp_base; */
|
||||||
NULL, /* PyObject *tp_dict; */
|
NULL, /* PyObject *tp_dict; */
|
||||||
NULL, /* descrgetfunc tp_descr_get; */
|
NULL, /* descrgetfunc tp_descr_get; */
|
||||||
@ -4777,7 +4781,7 @@ PyTypeObject pyrna_struct_Type= {
|
|||||||
0, /* long tp_dictoffset; */
|
0, /* long tp_dictoffset; */
|
||||||
NULL, /* initproc tp_init; */
|
NULL, /* initproc tp_init; */
|
||||||
NULL, /* allocfunc tp_alloc; */
|
NULL, /* allocfunc tp_alloc; */
|
||||||
pyrna_struct_new, /* newfunc tp_new; */
|
pyrna_struct_new, /* newfunc tp_new; */
|
||||||
/* Low-level free-memory routine */
|
/* Low-level free-memory routine */
|
||||||
NULL, /* freefunc tp_free; */
|
NULL, /* freefunc tp_free; */
|
||||||
/* For PyObject_IS_GC */
|
/* For PyObject_IS_GC */
|
||||||
@ -4794,32 +4798,32 @@ PyTypeObject pyrna_struct_Type= {
|
|||||||
/*-----------------------BPy_PropertyRNA method def------------------------------*/
|
/*-----------------------BPy_PropertyRNA method def------------------------------*/
|
||||||
PyTypeObject pyrna_prop_Type= {
|
PyTypeObject pyrna_prop_Type= {
|
||||||
PyVarObject_HEAD_INIT(NULL, 0)
|
PyVarObject_HEAD_INIT(NULL, 0)
|
||||||
"bpy_prop", /* tp_name */
|
"bpy_prop", /* tp_name */
|
||||||
sizeof(BPy_PropertyRNA), /* tp_basicsize */
|
sizeof(BPy_PropertyRNA), /* tp_basicsize */
|
||||||
0, /* tp_itemsize */
|
0, /* tp_itemsize */
|
||||||
/* methods */
|
/* methods */
|
||||||
(destructor) pyrna_prop_dealloc, /* tp_dealloc */
|
(destructor) pyrna_prop_dealloc, /* tp_dealloc */
|
||||||
NULL, /* printfunc tp_print; */
|
NULL, /* printfunc tp_print; */
|
||||||
NULL, /* getattrfunc tp_getattr; */
|
NULL, /* getattrfunc tp_getattr; */
|
||||||
NULL, /* setattrfunc tp_setattr; */
|
NULL, /* setattrfunc tp_setattr; */
|
||||||
NULL, /* tp_compare */ /* DEPRECATED in python 3.0! */
|
NULL, /* tp_compare */ /* DEPRECATED in python 3.0! */
|
||||||
(reprfunc) pyrna_prop_repr, /* tp_repr */
|
(reprfunc) pyrna_prop_repr, /* tp_repr */
|
||||||
|
|
||||||
/* Method suites for standard classes */
|
/* Method suites for standard classes */
|
||||||
|
|
||||||
NULL, /* PyNumberMethods *tp_as_number; */
|
NULL, /* PyNumberMethods *tp_as_number; */
|
||||||
NULL, /* PySequenceMethods *tp_as_sequence; */
|
NULL, /* PySequenceMethods *tp_as_sequence; */
|
||||||
NULL, /* PyMappingMethods *tp_as_mapping; */
|
NULL, /* PyMappingMethods *tp_as_mapping; */
|
||||||
|
|
||||||
/* More standard operations (here for binary compatibility) */
|
/* More standard operations (here for binary compatibility) */
|
||||||
|
|
||||||
(hashfunc) pyrna_prop_hash, /* hashfunc tp_hash; */
|
(hashfunc) pyrna_prop_hash, /* hashfunc tp_hash; */
|
||||||
NULL, /* ternaryfunc tp_call; */
|
NULL, /* ternaryfunc tp_call; */
|
||||||
(reprfunc) pyrna_prop_str, /* reprfunc tp_str; */
|
(reprfunc) pyrna_prop_str, /* reprfunc tp_str; */
|
||||||
|
|
||||||
/* will only use these if this is a subtype of a py class */
|
/* will only use these if this is a subtype of a py class */
|
||||||
NULL, /* getattrofunc tp_getattro; */
|
NULL, /* getattrofunc tp_getattro; */
|
||||||
NULL, /* setattrofunc tp_setattro; */
|
NULL, /* setattrofunc tp_setattro; */
|
||||||
|
|
||||||
/* Functions to access object as input/output buffer */
|
/* Functions to access object as input/output buffer */
|
||||||
NULL, /* PyBufferProcs *tp_as_buffer; */
|
NULL, /* PyBufferProcs *tp_as_buffer; */
|
||||||
@ -4827,7 +4831,7 @@ PyTypeObject pyrna_prop_Type= {
|
|||||||
/*** Flags to define presence of optional/expanded features ***/
|
/*** Flags to define presence of optional/expanded features ***/
|
||||||
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* long tp_flags; */
|
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* long tp_flags; */
|
||||||
|
|
||||||
NULL, /* char *tp_doc; Documentation string */
|
NULL, /* char *tp_doc; Documentation string */
|
||||||
/*** Assigned meaning in release 2.0 ***/
|
/*** Assigned meaning in release 2.0 ***/
|
||||||
/* call function for all accessible objects */
|
/* call function for all accessible objects */
|
||||||
NULL, /* traverseproc tp_traverse; */
|
NULL, /* traverseproc tp_traverse; */
|
||||||
@ -4848,11 +4852,11 @@ PyTypeObject pyrna_prop_Type= {
|
|||||||
|
|
||||||
/*** Added in release 2.2 ***/
|
/*** Added in release 2.2 ***/
|
||||||
/* Iterators */
|
/* Iterators */
|
||||||
NULL, /* getiterfunc tp_iter; */
|
NULL, /* getiterfunc tp_iter; */
|
||||||
NULL, /* iternextfunc tp_iternext; */
|
NULL, /* iternextfunc tp_iternext; */
|
||||||
|
|
||||||
/*** Attribute descriptor and subclassing stuff ***/
|
/*** Attribute descriptor and subclassing stuff ***/
|
||||||
pyrna_prop_methods, /* struct PyMethodDef *tp_methods; */
|
pyrna_prop_methods, /* struct PyMethodDef *tp_methods; */
|
||||||
NULL, /* struct PyMemberDef *tp_members; */
|
NULL, /* struct PyMemberDef *tp_members; */
|
||||||
pyrna_prop_getseters, /* struct PyGetSetDef *tp_getset; */
|
pyrna_prop_getseters, /* struct PyGetSetDef *tp_getset; */
|
||||||
NULL, /* struct _typeobject *tp_base; */
|
NULL, /* struct _typeobject *tp_base; */
|
||||||
@ -4862,7 +4866,7 @@ PyTypeObject pyrna_prop_Type= {
|
|||||||
0, /* long tp_dictoffset; */
|
0, /* long tp_dictoffset; */
|
||||||
NULL, /* initproc tp_init; */
|
NULL, /* initproc tp_init; */
|
||||||
NULL, /* allocfunc tp_alloc; */
|
NULL, /* allocfunc tp_alloc; */
|
||||||
pyrna_prop_new, /* newfunc tp_new; */
|
pyrna_prop_new, /* newfunc tp_new; */
|
||||||
/* Low-level free-memory routine */
|
/* Low-level free-memory routine */
|
||||||
NULL, /* freefunc tp_free; */
|
NULL, /* freefunc tp_free; */
|
||||||
/* For PyObject_IS_GC */
|
/* For PyObject_IS_GC */
|
||||||
@ -4884,34 +4888,34 @@ PyTypeObject pyrna_prop_array_Type= {
|
|||||||
/* methods */
|
/* methods */
|
||||||
(destructor)pyrna_prop_array_dealloc, /* tp_dealloc */
|
(destructor)pyrna_prop_array_dealloc, /* tp_dealloc */
|
||||||
NULL, /* printfunc tp_print; */
|
NULL, /* printfunc tp_print; */
|
||||||
NULL, /* getattrfunc tp_getattr; */
|
NULL, /* getattrfunc tp_getattr; */
|
||||||
NULL, /* setattrfunc tp_setattr; */
|
NULL, /* setattrfunc tp_setattr; */
|
||||||
NULL, /* tp_compare */ /* DEPRECATED in python 3.0! */
|
NULL, /* tp_compare */ /* DEPRECATED in python 3.0! */
|
||||||
NULL,/* subclassed */ /* tp_repr */
|
NULL,/* subclassed */ /* tp_repr */
|
||||||
|
|
||||||
/* Method suites for standard classes */
|
/* Method suites for standard classes */
|
||||||
|
|
||||||
&pyrna_prop_array_as_number, /* PyNumberMethods *tp_as_number; */
|
&pyrna_prop_array_as_number, /* PyNumberMethods *tp_as_number; */
|
||||||
&pyrna_prop_array_as_sequence, /* PySequenceMethods *tp_as_sequence; */
|
&pyrna_prop_array_as_sequence, /* PySequenceMethods *tp_as_sequence; */
|
||||||
&pyrna_prop_array_as_mapping, /* PyMappingMethods *tp_as_mapping; */
|
&pyrna_prop_array_as_mapping, /* PyMappingMethods *tp_as_mapping; */
|
||||||
|
|
||||||
/* More standard operations (here for binary compatibility) */
|
/* More standard operations (here for binary compatibility) */
|
||||||
|
|
||||||
NULL, /* hashfunc tp_hash; */
|
NULL, /* hashfunc tp_hash; */
|
||||||
NULL, /* ternaryfunc tp_call; */
|
NULL, /* ternaryfunc tp_call; */
|
||||||
NULL, /* reprfunc tp_str; */
|
NULL, /* reprfunc tp_str; */
|
||||||
|
|
||||||
/* will only use these if this is a subtype of a py class */
|
/* will only use these if this is a subtype of a py class */
|
||||||
(getattrofunc) pyrna_prop_array_getattro, /* getattrofunc tp_getattro; */
|
(getattrofunc) pyrna_prop_array_getattro, /* getattrofunc tp_getattro; */
|
||||||
NULL, /* setattrofunc tp_setattro; */
|
NULL, /* setattrofunc tp_setattro; */
|
||||||
|
|
||||||
/* Functions to access object as input/output buffer */
|
/* Functions to access object as input/output buffer */
|
||||||
NULL, /* PyBufferProcs *tp_as_buffer; */
|
NULL, /* PyBufferProcs *tp_as_buffer; */
|
||||||
|
|
||||||
/*** Flags to define presence of optional/expanded features ***/
|
/*** Flags to define presence of optional/expanded features ***/
|
||||||
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* long tp_flags; */
|
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* long tp_flags; */
|
||||||
|
|
||||||
NULL, /* char *tp_doc; Documentation string */
|
NULL, /* char *tp_doc; Documentation string */
|
||||||
/*** Assigned meaning in release 2.0 ***/
|
/*** Assigned meaning in release 2.0 ***/
|
||||||
/* call function for all accessible objects */
|
/* call function for all accessible objects */
|
||||||
NULL, /* traverseproc tp_traverse; */
|
NULL, /* traverseproc tp_traverse; */
|
||||||
@ -4921,7 +4925,7 @@ PyTypeObject pyrna_prop_array_Type= {
|
|||||||
|
|
||||||
/*** Assigned meaning in release 2.1 ***/
|
/*** Assigned meaning in release 2.1 ***/
|
||||||
/*** rich comparisons ***/
|
/*** rich comparisons ***/
|
||||||
NULL, /* subclassed */ /* richcmpfunc tp_richcompare; */
|
NULL, /* subclassed */ /* richcmpfunc tp_richcompare; */
|
||||||
|
|
||||||
/*** weak reference enabler ***/
|
/*** weak reference enabler ***/
|
||||||
#ifdef USE_WEAKREFS
|
#ifdef USE_WEAKREFS
|
||||||
@ -4935,22 +4939,22 @@ PyTypeObject pyrna_prop_array_Type= {
|
|||||||
NULL, /* iternextfunc tp_iternext; */
|
NULL, /* iternextfunc tp_iternext; */
|
||||||
|
|
||||||
/*** Attribute descriptor and subclassing stuff ***/
|
/*** Attribute descriptor and subclassing stuff ***/
|
||||||
pyrna_prop_array_methods, /* struct PyMethodDef *tp_methods; */
|
pyrna_prop_array_methods, /* struct PyMethodDef *tp_methods; */
|
||||||
NULL, /* struct PyMemberDef *tp_members; */
|
NULL, /* struct PyMemberDef *tp_members; */
|
||||||
NULL /*pyrna_prop_getseters*/, /* struct PyGetSetDef *tp_getset; */
|
NULL /*pyrna_prop_getseters*/, /* struct PyGetSetDef *tp_getset; */
|
||||||
&pyrna_prop_Type, /* struct _typeobject *tp_base; */
|
&pyrna_prop_Type, /* struct _typeobject *tp_base; */
|
||||||
NULL, /* PyObject *tp_dict; */
|
NULL, /* PyObject *tp_dict; */
|
||||||
NULL, /* descrgetfunc tp_descr_get; */
|
NULL, /* descrgetfunc tp_descr_get; */
|
||||||
NULL, /* descrsetfunc tp_descr_set; */
|
NULL, /* descrsetfunc tp_descr_set; */
|
||||||
0, /* long tp_dictoffset; */
|
0, /* long tp_dictoffset; */
|
||||||
NULL, /* initproc tp_init; */
|
NULL, /* initproc tp_init; */
|
||||||
NULL, /* allocfunc tp_alloc; */
|
NULL, /* allocfunc tp_alloc; */
|
||||||
NULL, /* newfunc tp_new; */
|
NULL, /* newfunc tp_new; */
|
||||||
/* Low-level free-memory routine */
|
/* Low-level free-memory routine */
|
||||||
NULL, /* freefunc tp_free; */
|
NULL, /* freefunc tp_free; */
|
||||||
/* For PyObject_IS_GC */
|
/* For PyObject_IS_GC */
|
||||||
NULL, /* inquiry tp_is_gc; */
|
NULL, /* inquiry tp_is_gc; */
|
||||||
NULL, /* PyObject *tp_bases; */
|
NULL, /* PyObject *tp_bases; */
|
||||||
/* method resolution order */
|
/* method resolution order */
|
||||||
NULL, /* PyObject *tp_mro; */
|
NULL, /* PyObject *tp_mro; */
|
||||||
NULL, /* PyObject *tp_cache; */
|
NULL, /* PyObject *tp_cache; */
|
||||||
@ -4961,32 +4965,32 @@ PyTypeObject pyrna_prop_array_Type= {
|
|||||||
|
|
||||||
PyTypeObject pyrna_prop_collection_Type= {
|
PyTypeObject pyrna_prop_collection_Type= {
|
||||||
PyVarObject_HEAD_INIT(NULL, 0)
|
PyVarObject_HEAD_INIT(NULL, 0)
|
||||||
"bpy_prop_collection", /* tp_name */
|
"bpy_prop_collection", /* tp_name */
|
||||||
sizeof(BPy_PropertyRNA), /* tp_basicsize */
|
sizeof(BPy_PropertyRNA), /* tp_basicsize */
|
||||||
0, /* tp_itemsize */
|
0, /* tp_itemsize */
|
||||||
/* methods */
|
/* methods */
|
||||||
(destructor)pyrna_prop_dealloc, /* tp_dealloc */
|
(destructor)pyrna_prop_dealloc, /* tp_dealloc */
|
||||||
NULL, /* printfunc tp_print; */
|
NULL, /* printfunc tp_print; */
|
||||||
NULL, /* getattrfunc tp_getattr; */
|
NULL, /* getattrfunc tp_getattr; */
|
||||||
NULL, /* setattrfunc tp_setattr; */
|
NULL, /* setattrfunc tp_setattr; */
|
||||||
NULL, /* tp_compare */ /* DEPRECATED in python 3.0! */
|
NULL, /* tp_compare */ /* DEPRECATED in python 3.0! */
|
||||||
NULL, /* subclassed */ /* tp_repr */
|
NULL, /* subclassed */ /* tp_repr */
|
||||||
|
|
||||||
/* Method suites for standard classes */
|
/* Method suites for standard classes */
|
||||||
|
|
||||||
&pyrna_prop_collection_as_number, /* PyNumberMethods *tp_as_number; */
|
&pyrna_prop_collection_as_number, /* PyNumberMethods *tp_as_number; */
|
||||||
&pyrna_prop_collection_as_sequence, /* PySequenceMethods *tp_as_sequence; */
|
&pyrna_prop_collection_as_sequence, /* PySequenceMethods *tp_as_sequence; */
|
||||||
&pyrna_prop_collection_as_mapping, /* PyMappingMethods *tp_as_mapping; */
|
&pyrna_prop_collection_as_mapping, /* PyMappingMethods *tp_as_mapping; */
|
||||||
|
|
||||||
/* More standard operations (here for binary compatibility) */
|
/* More standard operations (here for binary compatibility) */
|
||||||
|
|
||||||
NULL, /* hashfunc tp_hash; */
|
NULL, /* hashfunc tp_hash; */
|
||||||
NULL, /* ternaryfunc tp_call; */
|
NULL, /* ternaryfunc tp_call; */
|
||||||
NULL, /* reprfunc tp_str; */
|
NULL, /* reprfunc tp_str; */
|
||||||
|
|
||||||
/* will only use these if this is a subtype of a py class */
|
/* will only use these if this is a subtype of a py class */
|
||||||
(getattrofunc) pyrna_prop_collection_getattro, /* getattrofunc tp_getattro; */
|
(getattrofunc) pyrna_prop_collection_getattro, /* getattrofunc tp_getattro; */
|
||||||
(setattrofunc) pyrna_prop_collection_setattro, /* setattrofunc tp_setattro; */
|
(setattrofunc) pyrna_prop_collection_setattro, /* setattrofunc tp_setattro; */
|
||||||
|
|
||||||
/* Functions to access object as input/output buffer */
|
/* Functions to access object as input/output buffer */
|
||||||
NULL, /* PyBufferProcs *tp_as_buffer; */
|
NULL, /* PyBufferProcs *tp_as_buffer; */
|
||||||
@ -4994,7 +4998,7 @@ PyTypeObject pyrna_prop_collection_Type= {
|
|||||||
/*** Flags to define presence of optional/expanded features ***/
|
/*** Flags to define presence of optional/expanded features ***/
|
||||||
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* long tp_flags; */
|
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* long tp_flags; */
|
||||||
|
|
||||||
NULL, /* char *tp_doc; Documentation string */
|
NULL, /* char *tp_doc; Documentation string */
|
||||||
/*** Assigned meaning in release 2.0 ***/
|
/*** Assigned meaning in release 2.0 ***/
|
||||||
/* call function for all accessible objects */
|
/* call function for all accessible objects */
|
||||||
NULL, /* traverseproc tp_traverse; */
|
NULL, /* traverseproc tp_traverse; */
|
||||||
@ -5008,33 +5012,33 @@ PyTypeObject pyrna_prop_collection_Type= {
|
|||||||
|
|
||||||
/*** weak reference enabler ***/
|
/*** weak reference enabler ***/
|
||||||
#ifdef USE_WEAKREFS
|
#ifdef USE_WEAKREFS
|
||||||
offsetof(BPy_PropertyRNA, in_weakreflist), /* long tp_weaklistoffset; */
|
offsetof(BPy_PropertyRNA, in_weakreflist), /* long tp_weaklistoffset; */
|
||||||
#else
|
#else
|
||||||
0,
|
0,
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*** Added in release 2.2 ***/
|
/*** Added in release 2.2 ***/
|
||||||
/* Iterators */
|
/* Iterators */
|
||||||
(getiterfunc)pyrna_prop_collection_iter, /* getiterfunc tp_iter; */
|
(getiterfunc)pyrna_prop_collection_iter, /* getiterfunc tp_iter; */
|
||||||
NULL, /* iternextfunc tp_iternext; */
|
NULL, /* iternextfunc tp_iternext; */
|
||||||
|
|
||||||
/*** Attribute descriptor and subclassing stuff ***/
|
/*** Attribute descriptor and subclassing stuff ***/
|
||||||
pyrna_prop_collection_methods, /* struct PyMethodDef *tp_methods; */
|
pyrna_prop_collection_methods, /* struct PyMethodDef *tp_methods; */
|
||||||
NULL, /* struct PyMemberDef *tp_members; */
|
NULL, /* struct PyMemberDef *tp_members; */
|
||||||
NULL /*pyrna_prop_getseters*/, /* struct PyGetSetDef *tp_getset; */
|
NULL /*pyrna_prop_getseters*/, /* struct PyGetSetDef *tp_getset; */
|
||||||
&pyrna_prop_Type, /* struct _typeobject *tp_base; */
|
&pyrna_prop_Type, /* struct _typeobject *tp_base; */
|
||||||
NULL, /* PyObject *tp_dict; */
|
NULL, /* PyObject *tp_dict; */
|
||||||
NULL, /* descrgetfunc tp_descr_get; */
|
NULL, /* descrgetfunc tp_descr_get; */
|
||||||
NULL, /* descrsetfunc tp_descr_set; */
|
NULL, /* descrsetfunc tp_descr_set; */
|
||||||
0, /* long tp_dictoffset; */
|
0, /* long tp_dictoffset; */
|
||||||
NULL, /* initproc tp_init; */
|
NULL, /* initproc tp_init; */
|
||||||
NULL, /* allocfunc tp_alloc; */
|
NULL, /* allocfunc tp_alloc; */
|
||||||
NULL, /* newfunc tp_new; */
|
NULL, /* newfunc tp_new; */
|
||||||
/* Low-level free-memory routine */
|
/* Low-level free-memory routine */
|
||||||
NULL, /* freefunc tp_free; */
|
NULL, /* freefunc tp_free; */
|
||||||
/* For PyObject_IS_GC */
|
/* For PyObject_IS_GC */
|
||||||
NULL, /* inquiry tp_is_gc; */
|
NULL, /* inquiry tp_is_gc; */
|
||||||
NULL, /* PyObject *tp_bases; */
|
NULL, /* PyObject *tp_bases; */
|
||||||
/* method resolution order */
|
/* method resolution order */
|
||||||
NULL, /* PyObject *tp_mro; */
|
NULL, /* PyObject *tp_mro; */
|
||||||
NULL, /* PyObject *tp_cache; */
|
NULL, /* PyObject *tp_cache; */
|
||||||
@ -5046,32 +5050,32 @@ PyTypeObject pyrna_prop_collection_Type= {
|
|||||||
/* only for add/remove/move methods */
|
/* only for add/remove/move methods */
|
||||||
static PyTypeObject pyrna_prop_collection_idprop_Type= {
|
static PyTypeObject pyrna_prop_collection_idprop_Type= {
|
||||||
PyVarObject_HEAD_INIT(NULL, 0)
|
PyVarObject_HEAD_INIT(NULL, 0)
|
||||||
"bpy_prop_collection_idprop", /* tp_name */
|
"bpy_prop_collection_idprop", /* tp_name */
|
||||||
sizeof(BPy_PropertyRNA), /* tp_basicsize */
|
sizeof(BPy_PropertyRNA), /* tp_basicsize */
|
||||||
0, /* tp_itemsize */
|
0, /* tp_itemsize */
|
||||||
/* methods */
|
/* methods */
|
||||||
(destructor)pyrna_prop_dealloc, /* tp_dealloc */
|
(destructor)pyrna_prop_dealloc, /* tp_dealloc */
|
||||||
NULL, /* printfunc tp_print; */
|
NULL, /* printfunc tp_print; */
|
||||||
NULL, /* getattrfunc tp_getattr; */
|
NULL, /* getattrfunc tp_getattr; */
|
||||||
NULL, /* setattrfunc tp_setattr; */
|
NULL, /* setattrfunc tp_setattr; */
|
||||||
NULL, /* tp_compare */ /* DEPRECATED in python 3.0! */
|
NULL, /* tp_compare */ /* DEPRECATED in python 3.0! */
|
||||||
NULL, /* subclassed */ /* tp_repr */
|
NULL, /* subclassed */ /* tp_repr */
|
||||||
|
|
||||||
/* Method suites for standard classes */
|
/* Method suites for standard classes */
|
||||||
|
|
||||||
NULL, /* PyNumberMethods *tp_as_number; */
|
NULL, /* PyNumberMethods *tp_as_number; */
|
||||||
NULL, /* PySequenceMethods *tp_as_sequence; */
|
NULL, /* PySequenceMethods *tp_as_sequence; */
|
||||||
NULL, /* PyMappingMethods *tp_as_mapping; */
|
NULL, /* PyMappingMethods *tp_as_mapping; */
|
||||||
|
|
||||||
/* More standard operations (here for binary compatibility) */
|
/* More standard operations (here for binary compatibility) */
|
||||||
|
|
||||||
NULL, /* hashfunc tp_hash; */
|
NULL, /* hashfunc tp_hash; */
|
||||||
NULL, /* ternaryfunc tp_call; */
|
NULL, /* ternaryfunc tp_call; */
|
||||||
NULL, /* reprfunc tp_str; */
|
NULL, /* reprfunc tp_str; */
|
||||||
|
|
||||||
/* will only use these if this is a subtype of a py class */
|
/* will only use these if this is a subtype of a py class */
|
||||||
NULL, /* getattrofunc tp_getattro; */
|
NULL, /* getattrofunc tp_getattro; */
|
||||||
NULL, /* setattrofunc tp_setattro; */
|
NULL, /* setattrofunc tp_setattro; */
|
||||||
|
|
||||||
/* Functions to access object as input/output buffer */
|
/* Functions to access object as input/output buffer */
|
||||||
NULL, /* PyBufferProcs *tp_as_buffer; */
|
NULL, /* PyBufferProcs *tp_as_buffer; */
|
||||||
@ -5079,7 +5083,7 @@ static PyTypeObject pyrna_prop_collection_idprop_Type= {
|
|||||||
/*** Flags to define presence of optional/expanded features ***/
|
/*** Flags to define presence of optional/expanded features ***/
|
||||||
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* long tp_flags; */
|
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* long tp_flags; */
|
||||||
|
|
||||||
NULL, /* char *tp_doc; Documentation string */
|
NULL, /* char *tp_doc; Documentation string */
|
||||||
/*** Assigned meaning in release 2.0 ***/
|
/*** Assigned meaning in release 2.0 ***/
|
||||||
/* call function for all accessible objects */
|
/* call function for all accessible objects */
|
||||||
NULL, /* traverseproc tp_traverse; */
|
NULL, /* traverseproc tp_traverse; */
|
||||||
@ -5093,33 +5097,33 @@ static PyTypeObject pyrna_prop_collection_idprop_Type= {
|
|||||||
|
|
||||||
/*** weak reference enabler ***/
|
/*** weak reference enabler ***/
|
||||||
#ifdef USE_WEAKREFS
|
#ifdef USE_WEAKREFS
|
||||||
offsetof(BPy_PropertyRNA, in_weakreflist), /* long tp_weaklistoffset; */
|
offsetof(BPy_PropertyRNA, in_weakreflist), /* long tp_weaklistoffset; */
|
||||||
#else
|
#else
|
||||||
0,
|
0,
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*** Added in release 2.2 ***/
|
/*** Added in release 2.2 ***/
|
||||||
/* Iterators */
|
/* Iterators */
|
||||||
NULL, /* getiterfunc tp_iter; */
|
NULL, /* getiterfunc tp_iter; */
|
||||||
NULL, /* iternextfunc tp_iternext; */
|
NULL, /* iternextfunc tp_iternext; */
|
||||||
|
|
||||||
/*** Attribute descriptor and subclassing stuff ***/
|
/*** Attribute descriptor and subclassing stuff ***/
|
||||||
pyrna_prop_collection_idprop_methods, /* struct PyMethodDef *tp_methods; */
|
pyrna_prop_collection_idprop_methods, /* struct PyMethodDef *tp_methods; */
|
||||||
NULL, /* struct PyMemberDef *tp_members; */
|
NULL, /* struct PyMemberDef *tp_members; */
|
||||||
NULL /*pyrna_prop_getseters*/, /* struct PyGetSetDef *tp_getset; */
|
NULL /*pyrna_prop_getseters*/, /* struct PyGetSetDef *tp_getset; */
|
||||||
&pyrna_prop_collection_Type, /* struct _typeobject *tp_base; */
|
&pyrna_prop_collection_Type,/* struct _typeobject *tp_base; */
|
||||||
NULL, /* PyObject *tp_dict; */
|
NULL, /* PyObject *tp_dict; */
|
||||||
NULL, /* descrgetfunc tp_descr_get; */
|
NULL, /* descrgetfunc tp_descr_get; */
|
||||||
NULL, /* descrsetfunc tp_descr_set; */
|
NULL, /* descrsetfunc tp_descr_set; */
|
||||||
0, /* long tp_dictoffset; */
|
0, /* long tp_dictoffset; */
|
||||||
NULL, /* initproc tp_init; */
|
NULL, /* initproc tp_init; */
|
||||||
NULL, /* allocfunc tp_alloc; */
|
NULL, /* allocfunc tp_alloc; */
|
||||||
NULL, /* newfunc tp_new; */
|
NULL, /* newfunc tp_new; */
|
||||||
/* Low-level free-memory routine */
|
/* Low-level free-memory routine */
|
||||||
NULL, /* freefunc tp_free; */
|
NULL, /* freefunc tp_free; */
|
||||||
/* For PyObject_IS_GC */
|
/* For PyObject_IS_GC */
|
||||||
NULL, /* inquiry tp_is_gc; */
|
NULL, /* inquiry tp_is_gc; */
|
||||||
NULL, /* PyObject *tp_bases; */
|
NULL, /* PyObject *tp_bases; */
|
||||||
/* method resolution order */
|
/* method resolution order */
|
||||||
NULL, /* PyObject *tp_mro; */
|
NULL, /* PyObject *tp_mro; */
|
||||||
NULL, /* PyObject *tp_cache; */
|
NULL, /* PyObject *tp_cache; */
|
||||||
@ -5131,32 +5135,32 @@ static PyTypeObject pyrna_prop_collection_idprop_Type= {
|
|||||||
/*-----------------------BPy_PropertyRNA method def------------------------------*/
|
/*-----------------------BPy_PropertyRNA method def------------------------------*/
|
||||||
PyTypeObject pyrna_func_Type= {
|
PyTypeObject pyrna_func_Type= {
|
||||||
PyVarObject_HEAD_INIT(NULL, 0)
|
PyVarObject_HEAD_INIT(NULL, 0)
|
||||||
"bpy_func", /* tp_name */
|
"bpy_func", /* tp_name */
|
||||||
sizeof(BPy_FunctionRNA), /* tp_basicsize */
|
sizeof(BPy_FunctionRNA), /* tp_basicsize */
|
||||||
0, /* tp_itemsize */
|
0, /* tp_itemsize */
|
||||||
/* methods */
|
/* methods */
|
||||||
NULL, /* tp_dealloc */
|
NULL, /* tp_dealloc */
|
||||||
NULL, /* printfunc tp_print; */
|
NULL, /* printfunc tp_print; */
|
||||||
NULL, /* getattrfunc tp_getattr; */
|
NULL, /* getattrfunc tp_getattr; */
|
||||||
NULL, /* setattrfunc tp_setattr; */
|
NULL, /* setattrfunc tp_setattr; */
|
||||||
NULL, /* tp_compare */ /* DEPRECATED in python 3.0! */
|
NULL, /* tp_compare */ /* DEPRECATED in python 3.0! */
|
||||||
(reprfunc) pyrna_func_repr, /* tp_repr */
|
(reprfunc) pyrna_func_repr, /* tp_repr */
|
||||||
|
|
||||||
/* Method suites for standard classes */
|
/* Method suites for standard classes */
|
||||||
|
|
||||||
NULL, /* PyNumberMethods *tp_as_number; */
|
NULL, /* PyNumberMethods *tp_as_number; */
|
||||||
NULL, /* PySequenceMethods *tp_as_sequence; */
|
NULL, /* PySequenceMethods *tp_as_sequence; */
|
||||||
NULL, /* PyMappingMethods *tp_as_mapping; */
|
NULL, /* PyMappingMethods *tp_as_mapping; */
|
||||||
|
|
||||||
/* More standard operations (here for binary compatibility) */
|
/* More standard operations (here for binary compatibility) */
|
||||||
|
|
||||||
NULL, /* hashfunc tp_hash; */
|
NULL, /* hashfunc tp_hash; */
|
||||||
(ternaryfunc)pyrna_func_call, /* ternaryfunc tp_call; */
|
(ternaryfunc)pyrna_func_call, /* ternaryfunc tp_call; */
|
||||||
NULL, /* reprfunc tp_str; */
|
NULL, /* reprfunc tp_str; */
|
||||||
|
|
||||||
/* will only use these if this is a subtype of a py class */
|
/* will only use these if this is a subtype of a py class */
|
||||||
NULL, /* getattrofunc tp_getattro; */
|
NULL, /* getattrofunc tp_getattro; */
|
||||||
NULL, /* setattrofunc tp_setattro; */
|
NULL, /* setattrofunc tp_setattro; */
|
||||||
|
|
||||||
/* Functions to access object as input/output buffer */
|
/* Functions to access object as input/output buffer */
|
||||||
NULL, /* PyBufferProcs *tp_as_buffer; */
|
NULL, /* PyBufferProcs *tp_as_buffer; */
|
||||||
@ -5164,7 +5168,7 @@ PyTypeObject pyrna_func_Type= {
|
|||||||
/*** Flags to define presence of optional/expanded features ***/
|
/*** Flags to define presence of optional/expanded features ***/
|
||||||
Py_TPFLAGS_DEFAULT, /* long tp_flags; */
|
Py_TPFLAGS_DEFAULT, /* long tp_flags; */
|
||||||
|
|
||||||
NULL, /* char *tp_doc; Documentation string */
|
NULL, /* char *tp_doc; Documentation string */
|
||||||
/*** Assigned meaning in release 2.0 ***/
|
/*** Assigned meaning in release 2.0 ***/
|
||||||
/* call function for all accessible objects */
|
/* call function for all accessible objects */
|
||||||
NULL, /* traverseproc tp_traverse; */
|
NULL, /* traverseproc tp_traverse; */
|
||||||
@ -5174,7 +5178,7 @@ PyTypeObject pyrna_func_Type= {
|
|||||||
|
|
||||||
/*** Assigned meaning in release 2.1 ***/
|
/*** Assigned meaning in release 2.1 ***/
|
||||||
/*** rich comparisons ***/
|
/*** rich comparisons ***/
|
||||||
NULL, /* richcmpfunc tp_richcompare; */
|
NULL, /* richcmpfunc tp_richcompare; */
|
||||||
|
|
||||||
/*** weak reference enabler ***/
|
/*** weak reference enabler ***/
|
||||||
#ifdef USE_WEAKREFS
|
#ifdef USE_WEAKREFS
|
||||||
@ -5185,13 +5189,13 @@ PyTypeObject pyrna_func_Type= {
|
|||||||
|
|
||||||
/*** Added in release 2.2 ***/
|
/*** Added in release 2.2 ***/
|
||||||
/* Iterators */
|
/* Iterators */
|
||||||
NULL, /* getiterfunc tp_iter; */
|
NULL, /* getiterfunc tp_iter; */
|
||||||
NULL, /* iternextfunc tp_iternext; */
|
NULL, /* iternextfunc tp_iternext; */
|
||||||
|
|
||||||
/*** Attribute descriptor and subclassing stuff ***/
|
/*** Attribute descriptor and subclassing stuff ***/
|
||||||
NULL, /* struct PyMethodDef *tp_methods; */
|
NULL, /* struct PyMethodDef *tp_methods; */
|
||||||
NULL, /* struct PyMemberDef *tp_members; */
|
NULL, /* struct PyMemberDef *tp_members; */
|
||||||
NULL, /* struct PyGetSetDef *tp_getset; */
|
NULL, /* struct PyGetSetDef *tp_getset; */
|
||||||
NULL, /* struct _typeobject *tp_base; */
|
NULL, /* struct _typeobject *tp_base; */
|
||||||
NULL, /* PyObject *tp_dict; */
|
NULL, /* PyObject *tp_dict; */
|
||||||
NULL, /* descrgetfunc tp_descr_get; */
|
NULL, /* descrgetfunc tp_descr_get; */
|
||||||
@ -5199,7 +5203,7 @@ PyTypeObject pyrna_func_Type= {
|
|||||||
0, /* long tp_dictoffset; */
|
0, /* long tp_dictoffset; */
|
||||||
NULL, /* initproc tp_init; */
|
NULL, /* initproc tp_init; */
|
||||||
NULL, /* allocfunc tp_alloc; */
|
NULL, /* allocfunc tp_alloc; */
|
||||||
NULL, /* newfunc tp_new; */
|
NULL, /* newfunc tp_new; */
|
||||||
/* Low-level free-memory routine */
|
/* Low-level free-memory routine */
|
||||||
NULL, /* freefunc tp_free; */
|
NULL, /* freefunc tp_free; */
|
||||||
/* For PyObject_IS_GC */
|
/* For PyObject_IS_GC */
|
||||||
@ -5227,32 +5231,32 @@ static PyObject *pyrna_prop_collection_iter_next(BPy_PropertyCollectionIterRNA *
|
|||||||
|
|
||||||
PyTypeObject pyrna_prop_collection_iter_Type= {
|
PyTypeObject pyrna_prop_collection_iter_Type= {
|
||||||
PyVarObject_HEAD_INIT(NULL, 0)
|
PyVarObject_HEAD_INIT(NULL, 0)
|
||||||
"bpy_prop_collection_iter", /* tp_name */
|
"bpy_prop_collection_iter", /* tp_name */
|
||||||
sizeof(BPy_PropertyCollectionIterRNA), /* tp_basicsize */
|
sizeof(BPy_PropertyCollectionIterRNA), /* tp_basicsize */
|
||||||
0, /* tp_itemsize */
|
0, /* tp_itemsize */
|
||||||
/* methods */
|
/* methods */
|
||||||
(destructor)pyrna_prop_collection_iter_dealloc, /* tp_dealloc */
|
(destructor)pyrna_prop_collection_iter_dealloc, /* tp_dealloc */
|
||||||
NULL, /* printfunc tp_print; */
|
NULL, /* printfunc tp_print; */
|
||||||
NULL, /* getattrfunc tp_getattr; */
|
NULL, /* getattrfunc tp_getattr; */
|
||||||
NULL, /* setattrfunc tp_setattr; */
|
NULL, /* setattrfunc tp_setattr; */
|
||||||
NULL, /* tp_compare */ /* DEPRECATED in python 3.0! */
|
NULL, /* tp_compare */ /* DEPRECATED in python 3.0! */
|
||||||
NULL,/* subclassed */ /* tp_repr */
|
NULL,/* subclassed */ /* tp_repr */
|
||||||
|
|
||||||
/* Method suites for standard classes */
|
/* Method suites for standard classes */
|
||||||
|
|
||||||
NULL, /* PyNumberMethods *tp_as_number; */
|
NULL, /* PyNumberMethods *tp_as_number; */
|
||||||
NULL, /* PySequenceMethods *tp_as_sequence; */
|
NULL, /* PySequenceMethods *tp_as_sequence; */
|
||||||
NULL, /* PyMappingMethods *tp_as_mapping; */
|
NULL, /* PyMappingMethods *tp_as_mapping; */
|
||||||
|
|
||||||
/* More standard operations (here for binary compatibility) */
|
/* More standard operations (here for binary compatibility) */
|
||||||
|
|
||||||
NULL, /* hashfunc tp_hash; */
|
NULL, /* hashfunc tp_hash; */
|
||||||
NULL, /* ternaryfunc tp_call; */
|
NULL, /* ternaryfunc tp_call; */
|
||||||
NULL, /* reprfunc tp_str; */
|
NULL, /* reprfunc tp_str; */
|
||||||
|
|
||||||
/* will only use these if this is a subtype of a py class */
|
/* will only use these if this is a subtype of a py class */
|
||||||
PyObject_GenericGetAttr, /* getattrofunc tp_getattro; */
|
PyObject_GenericGetAttr, /* getattrofunc tp_getattro; */
|
||||||
NULL, /* setattrofunc tp_setattro; */
|
NULL, /* setattrofunc tp_setattro; */
|
||||||
|
|
||||||
/* Functions to access object as input/output buffer */
|
/* Functions to access object as input/output buffer */
|
||||||
NULL, /* PyBufferProcs *tp_as_buffer; */
|
NULL, /* PyBufferProcs *tp_as_buffer; */
|
||||||
@ -5260,7 +5264,7 @@ PyTypeObject pyrna_prop_collection_iter_Type= {
|
|||||||
/*** Flags to define presence of optional/expanded features ***/
|
/*** Flags to define presence of optional/expanded features ***/
|
||||||
Py_TPFLAGS_DEFAULT, /* long tp_flags; */
|
Py_TPFLAGS_DEFAULT, /* long tp_flags; */
|
||||||
|
|
||||||
NULL, /* char *tp_doc; Documentation string */
|
NULL, /* char *tp_doc; Documentation string */
|
||||||
/*** Assigned meaning in release 2.0 ***/
|
/*** Assigned meaning in release 2.0 ***/
|
||||||
/* call function for all accessible objects */
|
/* call function for all accessible objects */
|
||||||
NULL, /* traverseproc tp_traverse; */
|
NULL, /* traverseproc tp_traverse; */
|
||||||
@ -5274,19 +5278,19 @@ PyTypeObject pyrna_prop_collection_iter_Type= {
|
|||||||
|
|
||||||
/*** weak reference enabler ***/
|
/*** weak reference enabler ***/
|
||||||
#ifdef USE_WEAKREFS
|
#ifdef USE_WEAKREFS
|
||||||
offsetof(BPy_PropertyCollectionIterRNA, in_weakreflist), /* long tp_weaklistoffset; */
|
offsetof(BPy_PropertyCollectionIterRNA, in_weakreflist), /* long tp_weaklistoffset; */
|
||||||
#else
|
#else
|
||||||
0,
|
0,
|
||||||
#endif
|
#endif
|
||||||
/*** Added in release 2.2 ***/
|
/*** Added in release 2.2 ***/
|
||||||
/* Iterators */
|
/* Iterators */
|
||||||
PyObject_SelfIter, /* getiterfunc tp_iter; */
|
PyObject_SelfIter, /* getiterfunc tp_iter; */
|
||||||
(iternextfunc) pyrna_prop_collection_iter_next, /* iternextfunc tp_iternext; */
|
(iternextfunc) pyrna_prop_collection_iter_next, /* iternextfunc tp_iternext; */
|
||||||
|
|
||||||
/*** Attribute descriptor and subclassing stuff ***/
|
/*** Attribute descriptor and subclassing stuff ***/
|
||||||
NULL, /* struct PyMethodDef *tp_methods; */
|
NULL, /* struct PyMethodDef *tp_methods; */
|
||||||
NULL, /* struct PyMemberDef *tp_members; */
|
NULL, /* struct PyMemberDef *tp_members; */
|
||||||
NULL, /* struct PyGetSetDef *tp_getset; */
|
NULL, /* struct PyGetSetDef *tp_getset; */
|
||||||
NULL, /* struct _typeobject *tp_base; */
|
NULL, /* struct _typeobject *tp_base; */
|
||||||
NULL, /* PyObject *tp_dict; */
|
NULL, /* PyObject *tp_dict; */
|
||||||
NULL, /* descrgetfunc tp_descr_get; */
|
NULL, /* descrgetfunc tp_descr_get; */
|
||||||
@ -5294,12 +5298,12 @@ PyTypeObject pyrna_prop_collection_iter_Type= {
|
|||||||
0, /* long tp_dictoffset; */
|
0, /* long tp_dictoffset; */
|
||||||
NULL, /* initproc tp_init; */
|
NULL, /* initproc tp_init; */
|
||||||
NULL, /* allocfunc tp_alloc; */
|
NULL, /* allocfunc tp_alloc; */
|
||||||
NULL, /* newfunc tp_new; */
|
NULL, /* newfunc tp_new; */
|
||||||
/* Low-level free-memory routine */
|
/* Low-level free-memory routine */
|
||||||
NULL, /* freefunc tp_free; */
|
NULL, /* freefunc tp_free; */
|
||||||
/* For PyObject_IS_GC */
|
/* For PyObject_IS_GC */
|
||||||
NULL, /* inquiry tp_is_gc; */
|
NULL, /* inquiry tp_is_gc; */
|
||||||
NULL, /* PyObject *tp_bases; */
|
NULL, /* PyObject *tp_bases; */
|
||||||
/* method resolution order */
|
/* method resolution order */
|
||||||
NULL, /* PyObject *tp_mro; */
|
NULL, /* PyObject *tp_mro; */
|
||||||
NULL, /* PyObject *tp_cache; */
|
NULL, /* PyObject *tp_cache; */
|
||||||
|
@ -227,8 +227,8 @@ void RE_SetReports(struct Render *re, struct ReportList *reports);
|
|||||||
/* main preview render call */
|
/* main preview render call */
|
||||||
void RE_PreviewRender(struct Render *re, struct Main *bmain, struct Scene *scene);
|
void RE_PreviewRender(struct Render *re, struct Main *bmain, struct Scene *scene);
|
||||||
|
|
||||||
void RE_ReadRenderResult(struct Scene *scene, struct Scene *scenode);
|
int RE_ReadRenderResult(struct Scene *scene, struct Scene *scenode);
|
||||||
void RE_WriteRenderResult(RenderResult *rr, const char *filename, int compress);
|
int RE_WriteRenderResult(struct ReportList *reports, RenderResult *rr, const char *filename, int compress);
|
||||||
struct RenderResult *RE_MultilayerConvert(void *exrhandle, int rectx, int recty);
|
struct RenderResult *RE_MultilayerConvert(void *exrhandle, int rectx, int recty);
|
||||||
|
|
||||||
extern const float default_envmap_layout[];
|
extern const float default_envmap_layout[];
|
||||||
|
@ -173,6 +173,9 @@ static void stats_background(void *UNUSED(arg), RenderStats *rs)
|
|||||||
else
|
else
|
||||||
fprintf(stdout, "Sce: %s Ve:%d Fa:%d La:%d", rs->scenename, rs->totvert, rs->totface, rs->totlamp);
|
fprintf(stdout, "Sce: %s Ve:%d Fa:%d La:%d", rs->scenename, rs->totvert, rs->totface, rs->totlamp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BLI_exec_cb(G.main, NULL, BLI_CB_EVT_RENDER_STATS);
|
||||||
|
|
||||||
fputc('\n', stdout);
|
fputc('\n', stdout);
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
}
|
}
|
||||||
@ -638,9 +641,9 @@ static RenderResult *new_render_result(Render *re, rcti *partrct, int crop, int
|
|||||||
render_layer_add_pass(rr, rl, 3, SCE_PASS_REFRACT);
|
render_layer_add_pass(rr, rl, 3, SCE_PASS_REFRACT);
|
||||||
if(srl->passflag & SCE_PASS_INDEXOB)
|
if(srl->passflag & SCE_PASS_INDEXOB)
|
||||||
render_layer_add_pass(rr, rl, 1, SCE_PASS_INDEXOB);
|
render_layer_add_pass(rr, rl, 1, SCE_PASS_INDEXOB);
|
||||||
if(srl->passflag & SCE_PASS_INDEXMA)
|
if(srl->passflag & SCE_PASS_INDEXMA)
|
||||||
render_layer_add_pass(rr, rl, 1, SCE_PASS_INDEXMA);
|
render_layer_add_pass(rr, rl, 1, SCE_PASS_INDEXMA);
|
||||||
if(srl->passflag & SCE_PASS_MIST)
|
if(srl->passflag & SCE_PASS_MIST)
|
||||||
render_layer_add_pass(rr, rl, 1, SCE_PASS_MIST);
|
render_layer_add_pass(rr, rl, 1, SCE_PASS_MIST);
|
||||||
if(rl->passflag & SCE_PASS_RAYHITS)
|
if(rl->passflag & SCE_PASS_RAYHITS)
|
||||||
render_layer_add_pass(rr, rl, 4, SCE_PASS_RAYHITS);
|
render_layer_add_pass(rr, rl, 4, SCE_PASS_RAYHITS);
|
||||||
@ -824,11 +827,12 @@ static char *make_pass_name(RenderPass *rpass, int chan)
|
|||||||
|
|
||||||
/* filename already made absolute */
|
/* filename already made absolute */
|
||||||
/* called from within UI, saves both rendered result as a file-read result */
|
/* called from within UI, saves both rendered result as a file-read result */
|
||||||
void RE_WriteRenderResult(RenderResult *rr, const char *filename, int compress)
|
int RE_WriteRenderResult(ReportList *reports, RenderResult *rr, const char *filename, int compress)
|
||||||
{
|
{
|
||||||
RenderLayer *rl;
|
RenderLayer *rl;
|
||||||
RenderPass *rpass;
|
RenderPass *rpass;
|
||||||
void *exrhandle= IMB_exr_get_handle();
|
void *exrhandle= IMB_exr_get_handle();
|
||||||
|
int success;
|
||||||
|
|
||||||
BLI_make_existing_file(filename);
|
BLI_make_existing_file(filename);
|
||||||
|
|
||||||
@ -865,10 +869,19 @@ void RE_WriteRenderResult(RenderResult *rr, const char *filename, int compress)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
IMB_exr_begin_write(exrhandle, filename, rr->rectx, rr->recty, compress);
|
/* when the filename has no permissions, this can fail */
|
||||||
|
if(IMB_exr_begin_write(exrhandle, filename, rr->rectx, rr->recty, compress)) {
|
||||||
IMB_exr_write_channels(exrhandle);
|
IMB_exr_write_channels(exrhandle);
|
||||||
|
success= TRUE;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
/* TODO, get the error from openexr's exception */
|
||||||
|
BKE_report(reports, RPT_ERROR, "Error Writing Render Result, see console");
|
||||||
|
success= FALSE;
|
||||||
|
}
|
||||||
IMB_exr_close(exrhandle);
|
IMB_exr_close(exrhandle);
|
||||||
|
|
||||||
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* callbacks for RE_MultilayerConvert */
|
/* callbacks for RE_MultilayerConvert */
|
||||||
@ -992,9 +1005,10 @@ static int read_render_result_from_file(const char *filename, RenderResult *rr)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* only for temp buffer files, makes exact copy of render result */
|
/* only for temp buffer files, makes exact copy of render result */
|
||||||
static void read_render_result(Render *re, int sample)
|
static int read_render_result(Render *re, int sample)
|
||||||
{
|
{
|
||||||
char str[FILE_MAX];
|
char str[FILE_MAX];
|
||||||
|
int success;
|
||||||
|
|
||||||
BLI_rw_mutex_lock(&re->resultmutex, THREAD_LOCK_WRITE);
|
BLI_rw_mutex_lock(&re->resultmutex, THREAD_LOCK_WRITE);
|
||||||
|
|
||||||
@ -1004,10 +1018,18 @@ static void read_render_result(Render *re, int sample)
|
|||||||
render_unique_exr_name(re, str, sample);
|
render_unique_exr_name(re, str, sample);
|
||||||
printf("read exr tmp file: %s\n", str);
|
printf("read exr tmp file: %s\n", str);
|
||||||
|
|
||||||
if(!read_render_result_from_file(str, re->result))
|
if(read_render_result_from_file(str, re->result)) {
|
||||||
|
success= TRUE;
|
||||||
|
}
|
||||||
|
else {
|
||||||
printf("cannot read: %s\n", str);
|
printf("cannot read: %s\n", str);
|
||||||
|
success= FALSE;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
BLI_rw_mutex_unlock(&re->resultmutex);
|
BLI_rw_mutex_unlock(&re->resultmutex);
|
||||||
|
|
||||||
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* *************************************************** */
|
/* *************************************************** */
|
||||||
@ -2981,7 +3003,7 @@ static int do_write_image_or_movie(Render *re, Scene *scene, bMovieHandle *mh, c
|
|||||||
|
|
||||||
if(re->r.imtype==R_MULTILAYER) {
|
if(re->r.imtype==R_MULTILAYER) {
|
||||||
if(re->result) {
|
if(re->result) {
|
||||||
RE_WriteRenderResult(re->result, name, scene->r.quality);
|
RE_WriteRenderResult(re->reports, re->result, name, scene->r.quality);
|
||||||
printf("Saved: %s", name);
|
printf("Saved: %s", name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3198,7 +3220,7 @@ void RE_PreviewRender(Render *re, Main *bmain, Scene *sce)
|
|||||||
/* note; repeated win/disprect calc... solve that nicer, also in compo */
|
/* note; repeated win/disprect calc... solve that nicer, also in compo */
|
||||||
|
|
||||||
/* only the temp file! */
|
/* only the temp file! */
|
||||||
void RE_ReadRenderResult(Scene *scene, Scene *scenode)
|
int RE_ReadRenderResult(Scene *scene, Scene *scenode)
|
||||||
{
|
{
|
||||||
Render *re;
|
Render *re;
|
||||||
int winx, winy;
|
int winx, winy;
|
||||||
@ -3232,7 +3254,7 @@ void RE_ReadRenderResult(Scene *scene, Scene *scenode)
|
|||||||
RE_InitState(re, NULL, &scene->r, NULL, winx, winy, &disprect);
|
RE_InitState(re, NULL, &scene->r, NULL, winx, winy, &disprect);
|
||||||
re->scene= scene;
|
re->scene= scene;
|
||||||
|
|
||||||
read_render_result(re, 0);
|
return read_render_result(re, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RE_set_max_threads(int threads)
|
void RE_set_max_threads(int threads)
|
||||||
|
@ -282,10 +282,10 @@ static void spothalo(struct LampRen *lar, ShadeInput *shi, float *intens)
|
|||||||
else if(ok1==0 || ok2==0) return;
|
else if(ok1==0 || ok2==0) return;
|
||||||
|
|
||||||
/* at least 1 visible interesction point */
|
/* at least 1 visible interesction point */
|
||||||
if(t1<0.0f && t2<0.0f) return;
|
if(t1<0.0 && t2<0.0) return;
|
||||||
|
|
||||||
if(t1<0.0f) t1= 0.0f;
|
if(t1<0.0) t1= 0.0;
|
||||||
if(t2<0.0f) t2= 0.0f;
|
if(t2<0.0) t2= 0.0;
|
||||||
|
|
||||||
if(t1==t2) return;
|
if(t1==t2) return;
|
||||||
|
|
||||||
@ -423,8 +423,8 @@ float fresnel_fac(float *view, float *vn, float grad, float fac)
|
|||||||
|
|
||||||
static double saacos_d(double fac)
|
static double saacos_d(double fac)
|
||||||
{
|
{
|
||||||
if(fac<= -1.0f) return M_PI;
|
if(fac<= -1.0) return M_PI;
|
||||||
else if(fac>=1.0f) return 0.0;
|
else if(fac>=1.0) return 0.0;
|
||||||
else return acos(fac);
|
else return acos(fac);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -590,7 +590,7 @@ static float CookTorr_Spec(float *n, float *l, float *v, int hard, int tangent)
|
|||||||
|
|
||||||
i= spec(nh, hard);
|
i= spec(nh, hard);
|
||||||
|
|
||||||
i= i/(0.1+nv);
|
i= i/(0.1f+nv);
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -896,7 +896,7 @@ static void ramp_diffuse_result(float *diff, ShadeInput *shi)
|
|||||||
if(ma->ramp_col) {
|
if(ma->ramp_col) {
|
||||||
if(ma->rampin_col==MA_RAMP_IN_RESULT) {
|
if(ma->rampin_col==MA_RAMP_IN_RESULT) {
|
||||||
|
|
||||||
fac= 0.3*diff[0] + 0.58*diff[1] + 0.12*diff[2];
|
fac= 0.3f*diff[0] + 0.58f*diff[1] + 0.12f*diff[2];
|
||||||
do_colorband(ma->ramp_col, fac, col);
|
do_colorband(ma->ramp_col, fac, col);
|
||||||
|
|
||||||
/* blending method */
|
/* blending method */
|
||||||
@ -926,7 +926,7 @@ static void add_to_diffuse(float *diff, ShadeInput *shi, float is, float r, floa
|
|||||||
/* input */
|
/* input */
|
||||||
switch(ma->rampin_col) {
|
switch(ma->rampin_col) {
|
||||||
case MA_RAMP_IN_ENERGY:
|
case MA_RAMP_IN_ENERGY:
|
||||||
fac= 0.3*r + 0.58*g + 0.12*b;
|
fac= 0.3f*r + 0.58f*g + 0.12f*b;
|
||||||
break;
|
break;
|
||||||
case MA_RAMP_IN_SHADER:
|
case MA_RAMP_IN_SHADER:
|
||||||
fac= is;
|
fac= is;
|
||||||
@ -966,7 +966,7 @@ static void ramp_spec_result(float *specr, float *specg, float *specb, ShadeInpu
|
|||||||
float fac;
|
float fac;
|
||||||
|
|
||||||
if(ma->ramp_spec && (ma->rampin_spec==MA_RAMP_IN_RESULT)) {
|
if(ma->ramp_spec && (ma->rampin_spec==MA_RAMP_IN_RESULT)) {
|
||||||
fac= 0.3*(*specr) + 0.58*(*specg) + 0.12*(*specb);
|
fac= 0.3f*(*specr) + 0.58f*(*specg) + 0.12f*(*specb);
|
||||||
do_colorband(ma->ramp_spec, fac, col);
|
do_colorband(ma->ramp_spec, fac, col);
|
||||||
|
|
||||||
/* blending method */
|
/* blending method */
|
||||||
@ -1213,7 +1213,7 @@ float lamp_get_visibility(LampRen *lar, float *co, float *lv, float *dist)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (visifac <= 0.001) visifac = 0.0f;
|
if (visifac <= 0.001f) visifac = 0.0f;
|
||||||
return visifac;
|
return visifac;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1231,7 +1231,7 @@ static void shade_one_light(LampRen *lar, ShadeInput *shi, ShadeResult *shr, int
|
|||||||
view= shi->view;
|
view= shi->view;
|
||||||
|
|
||||||
|
|
||||||
if (lar->energy == 0.0) return;
|
if (lar->energy == 0.0f) return;
|
||||||
/* only shadow lamps shouldn't affect shadow-less materials at all */
|
/* only shadow lamps shouldn't affect shadow-less materials at all */
|
||||||
if ((lar->mode & LA_ONLYSHADOW) && (!(ma->mode & MA_SHADOW) || !(R.r.mode & R_SHADOW)))
|
if ((lar->mode & LA_ONLYSHADOW) && (!(ma->mode & MA_SHADOW) || !(R.r.mode & R_SHADOW)))
|
||||||
return;
|
return;
|
||||||
@ -1359,7 +1359,7 @@ static void shade_one_light(LampRen *lar, ShadeInput *shi, ShadeResult *shr, int
|
|||||||
|
|
||||||
/* 'is' is diffuse */
|
/* 'is' is diffuse */
|
||||||
if((ma->shade_flag & MA_CUBIC) && is>0.0f && is<1.0f)
|
if((ma->shade_flag & MA_CUBIC) && is>0.0f && is<1.0f)
|
||||||
is= 3.0*is*is - 2.0*is*is*is; // nicer termination of shades
|
is= 3.0f*is*is - 2.0f*is*is*is; // nicer termination of shades
|
||||||
|
|
||||||
i= is*phongcorr;
|
i= is*phongcorr;
|
||||||
|
|
||||||
@ -1388,7 +1388,7 @@ static void shade_one_light(LampRen *lar, ShadeInput *shi, ShadeResult *shr, int
|
|||||||
lamp_get_shadow(lar, shi, inp, shadfac, shi->depth);
|
lamp_get_shadow(lar, shi, inp, shadfac, shi->depth);
|
||||||
|
|
||||||
/* warning, here it skips the loop */
|
/* warning, here it skips the loop */
|
||||||
if((lar->mode & LA_ONLYSHADOW) && i>0.0) {
|
if((lar->mode & LA_ONLYSHADOW) && i>0.0f) {
|
||||||
|
|
||||||
shadfac[3]= i*lar->energy*(1.0f-shadfac[3]);
|
shadfac[3]= i*lar->energy*(1.0f-shadfac[3]);
|
||||||
shr->shad[0] -= shadfac[3]*shi->r*(1.0f-lashdw[0]);
|
shr->shad[0] -= shadfac[3]*shi->r*(1.0f-lashdw[0]);
|
||||||
@ -1448,7 +1448,7 @@ static void shade_one_light(LampRen *lar, ShadeInput *shi, ShadeResult *shr, int
|
|||||||
t= vn[0]*lv[0]+vn[1]*lv[1]+vn[2]*lv[2];
|
t= vn[0]*lv[0]+vn[1]*lv[1]+vn[2]*lv[2];
|
||||||
|
|
||||||
if(lar->type==LA_HEMI) {
|
if(lar->type==LA_HEMI) {
|
||||||
t= 0.5*t+0.5;
|
t= 0.5f*t+0.5f;
|
||||||
}
|
}
|
||||||
|
|
||||||
t= shadfac[3]*shi->spec*spec(t, shi->har);
|
t= shadfac[3]*shi->spec*spec(t, shi->har);
|
||||||
|
@ -4115,13 +4115,13 @@ unsigned short *zbuffer_transp_shade(RenderPart *pa, RenderLayer *rl, float *pas
|
|||||||
add_transp_obindex(rlpp[a], od, obr->ob);
|
add_transp_obindex(rlpp[a], od, obr->ob);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(addpassflag & SCE_PASS_INDEXMA) {
|
if(addpassflag & SCE_PASS_INDEXMA) {
|
||||||
ObjectRen *obr= R.objectinstance[zrow[totface-1].obi].obr;
|
ObjectRen *obr= R.objectinstance[zrow[totface-1].obi].obr;
|
||||||
if(obr->ob) {
|
if(obr->ob) {
|
||||||
for(a= 0; a<totfullsample; a++)
|
for(a= 0; a<totfullsample; a++)
|
||||||
add_transp_obindex(rlpp[a], od, obr->ob);
|
add_transp_obindex(rlpp[a], od, obr->ob);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* for each mask-sample we alpha-under colors. then in end it's added using filter */
|
/* for each mask-sample we alpha-under colors. then in end it's added using filter */
|
||||||
memset(samp_shr, 0, sizeof(ShadeResult)*osa);
|
memset(samp_shr, 0, sizeof(ShadeResult)*osa);
|
||||||
|
@ -108,20 +108,27 @@ static GHash *global_ops_hash= NULL;
|
|||||||
|
|
||||||
wmOperatorType *WM_operatortype_find(const char *idname, int quiet)
|
wmOperatorType *WM_operatortype_find(const char *idname, int quiet)
|
||||||
{
|
{
|
||||||
wmOperatorType *ot;
|
if(idname[0]) {
|
||||||
|
wmOperatorType *ot;
|
||||||
|
|
||||||
char idname_bl[OP_MAX_TYPENAME]; // XXX, needed to support python style names without the _OT_ syntax
|
/* needed to support python style names without the _OT_ syntax */
|
||||||
WM_operator_bl_idname(idname_bl, idname);
|
char idname_bl[OP_MAX_TYPENAME];
|
||||||
|
WM_operator_bl_idname(idname_bl, idname);
|
||||||
|
|
||||||
if (idname_bl[0]) {
|
|
||||||
ot= BLI_ghash_lookup(global_ops_hash, idname_bl);
|
ot= BLI_ghash_lookup(global_ops_hash, idname_bl);
|
||||||
if(ot) {
|
if(ot) {
|
||||||
return ot;
|
return ot;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if(!quiet)
|
if(!quiet) {
|
||||||
printf("search for unknown operator %s, %s\n", idname_bl, idname);
|
printf("search for unknown operator '%s', '%s'\n", idname_bl, idname);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if(!quiet) {
|
||||||
|
printf("search for empty operator\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -1259,11 +1266,12 @@ static uiBlock *wm_block_create_splash(bContext *C, ARegion *ar, void *UNUSED(ar
|
|||||||
split = uiLayoutSplit(layout, 0, 0);
|
split = uiLayoutSplit(layout, 0, 0);
|
||||||
col = uiLayoutColumn(split, 0);
|
col = uiLayoutColumn(split, 0);
|
||||||
uiItemL(col, "Links", ICON_NONE);
|
uiItemL(col, "Links", ICON_NONE);
|
||||||
uiItemStringO(col, "Donations", ICON_URL, "WM_OT_url_open", "url", "http://www.blender.org/blenderorg/blender-foundation/donation-payment/");
|
uiItemStringO(col, "Donations", ICON_URL, "WM_OT_url_open", "url", "http://www.blender.org/blenderorg/blender-foundation/donation-payment");
|
||||||
uiItemStringO(col, "Release Log", ICON_URL, "WM_OT_url_open", "url", "http://www.blender.org/development/release-logs/blender-259/");
|
uiItemStringO(col, "Credits", ICON_URL, "WM_OT_url_open", "url", "http://www.blender.org/development/credits");
|
||||||
|
uiItemStringO(col, "Release Log", ICON_URL, "WM_OT_url_open", "url", "http://www.blender.org/development/release-logs/blender-259");
|
||||||
uiItemStringO(col, "Manual", ICON_URL, "WM_OT_url_open", "url", "http://wiki.blender.org/index.php/Doc:2.5/Manual");
|
uiItemStringO(col, "Manual", ICON_URL, "WM_OT_url_open", "url", "http://wiki.blender.org/index.php/Doc:2.5/Manual");
|
||||||
uiItemStringO(col, "Blender Website", ICON_URL, "WM_OT_url_open", "url", "http://www.blender.org/");
|
uiItemStringO(col, "Blender Website", ICON_URL, "WM_OT_url_open", "url", "http://www.blender.org");
|
||||||
uiItemStringO(col, "User Community", ICON_URL, "WM_OT_url_open", "url", "http://www.blender.org/community/user-community/"); //
|
uiItemStringO(col, "User Community", ICON_URL, "WM_OT_url_open", "url", "http://www.blender.org/community/user-community");
|
||||||
if(strcmp(STRINGIFY(BLENDER_VERSION_CYCLE), "release")==0) {
|
if(strcmp(STRINGIFY(BLENDER_VERSION_CYCLE), "release")==0) {
|
||||||
BLI_snprintf(url, sizeof(url), "http://www.blender.org/documentation/blender_python_api_%d_%d" STRINGIFY(BLENDER_VERSION_CHAR) "_release", BLENDER_VERSION/100, BLENDER_VERSION%100);
|
BLI_snprintf(url, sizeof(url), "http://www.blender.org/documentation/blender_python_api_%d_%d" STRINGIFY(BLENDER_VERSION_CHAR) "_release", BLENDER_VERSION/100, BLENDER_VERSION%100);
|
||||||
}
|
}
|
||||||
|
@ -57,183 +57,181 @@ class BL_BlenderInputDevice : public SCA_IInputDevice
|
|||||||
std::map<int,KX_EnumInputs> m_reverseKeyTranslateTable;
|
std::map<int,KX_EnumInputs> m_reverseKeyTranslateTable;
|
||||||
public:
|
public:
|
||||||
BL_BlenderInputDevice()
|
BL_BlenderInputDevice()
|
||||||
{
|
{
|
||||||
|
|
||||||
/* The reverse table. In order to not confuse ourselves, we */
|
/* The reverse table. In order to not confuse ourselves, we */
|
||||||
/* immediately convert all events that come in to KX codes. */
|
/* immediately convert all events that come in to KX codes. */
|
||||||
m_reverseKeyTranslateTable[LEFTMOUSE ] = KX_LEFTMOUSE ;
|
m_reverseKeyTranslateTable[LEFTMOUSE ] = KX_LEFTMOUSE;
|
||||||
m_reverseKeyTranslateTable[MIDDLEMOUSE ] = KX_MIDDLEMOUSE ;
|
m_reverseKeyTranslateTable[MIDDLEMOUSE ] = KX_MIDDLEMOUSE;
|
||||||
m_reverseKeyTranslateTable[RIGHTMOUSE ] = KX_RIGHTMOUSE ;
|
m_reverseKeyTranslateTable[RIGHTMOUSE ] = KX_RIGHTMOUSE;
|
||||||
m_reverseKeyTranslateTable[WHEELUPMOUSE ] = KX_WHEELUPMOUSE ;
|
m_reverseKeyTranslateTable[WHEELUPMOUSE ] = KX_WHEELUPMOUSE;
|
||||||
m_reverseKeyTranslateTable[WHEELDOWNMOUSE ] = KX_WHEELDOWNMOUSE ;
|
m_reverseKeyTranslateTable[WHEELDOWNMOUSE ] = KX_WHEELDOWNMOUSE;
|
||||||
m_reverseKeyTranslateTable[MOUSEX ] = KX_MOUSEX ;
|
m_reverseKeyTranslateTable[MOUSEX ] = KX_MOUSEX;
|
||||||
m_reverseKeyTranslateTable[MOUSEY ] = KX_MOUSEY ;
|
m_reverseKeyTranslateTable[MOUSEY ] = KX_MOUSEY;
|
||||||
|
|
||||||
// TIMERS
|
// TIMERS
|
||||||
|
|
||||||
m_reverseKeyTranslateTable[TIMER0 ] = KX_TIMER0 ;
|
m_reverseKeyTranslateTable[TIMER0 ] = KX_TIMER0;
|
||||||
m_reverseKeyTranslateTable[TIMER1 ] = KX_TIMER1 ;
|
m_reverseKeyTranslateTable[TIMER1 ] = KX_TIMER1;
|
||||||
m_reverseKeyTranslateTable[TIMER2 ] = KX_TIMER2 ;
|
m_reverseKeyTranslateTable[TIMER2 ] = KX_TIMER2;
|
||||||
|
|
||||||
// SYSTEM
|
// SYSTEM
|
||||||
#if 0
|
#if 0
|
||||||
/* **** XXX **** */
|
/* **** XXX **** */
|
||||||
m_reverseKeyTranslateTable[KEYBD ] = KX_KEYBD ;
|
m_reverseKeyTranslateTable[KEYBD ] = KX_KEYBD;
|
||||||
m_reverseKeyTranslateTable[RAWKEYBD ] = KX_RAWKEYBD ;
|
m_reverseKeyTranslateTable[RAWKEYBD ] = KX_RAWKEYBD;
|
||||||
m_reverseKeyTranslateTable[REDRAW ] = KX_REDRAW ;
|
m_reverseKeyTranslateTable[REDRAW ] = KX_REDRAW;
|
||||||
m_reverseKeyTranslateTable[INPUTCHANGE ] = KX_INPUTCHANGE ;
|
m_reverseKeyTranslateTable[INPUTCHANGE ] = KX_INPUTCHANGE;
|
||||||
m_reverseKeyTranslateTable[QFULL ] = KX_QFULL ;
|
m_reverseKeyTranslateTable[QFULL ] = KX_QFULL;
|
||||||
m_reverseKeyTranslateTable[WINFREEZE ] = KX_WINFREEZE ;
|
m_reverseKeyTranslateTable[WINFREEZE ] = KX_WINFREEZE;
|
||||||
m_reverseKeyTranslateTable[WINTHAW ] = KX_WINTHAW ;
|
m_reverseKeyTranslateTable[WINTHAW ] = KX_WINTHAW;
|
||||||
m_reverseKeyTranslateTable[WINCLOSE ] = KX_WINCLOSE ;
|
m_reverseKeyTranslateTable[WINCLOSE ] = KX_WINCLOSE;
|
||||||
m_reverseKeyTranslateTable[WINQUIT ] = KX_WINQUIT ;
|
m_reverseKeyTranslateTable[WINQUIT ] = KX_WINQUIT;
|
||||||
m_reverseKeyTranslateTable[Q_FIRSTTIME ] = KX_Q_FIRSTTIME ;
|
m_reverseKeyTranslateTable[Q_FIRSTTIME ] = KX_Q_FIRSTTIME;
|
||||||
/* **** XXX **** */
|
/* **** XXX **** */
|
||||||
#endif
|
#endif
|
||||||
// standard keyboard
|
// standard keyboard
|
||||||
|
|
||||||
m_reverseKeyTranslateTable[AKEY ] = KX_AKEY ;
|
m_reverseKeyTranslateTable[AKEY ] = KX_AKEY;
|
||||||
m_reverseKeyTranslateTable[BKEY ] = KX_BKEY ;
|
m_reverseKeyTranslateTable[BKEY ] = KX_BKEY;
|
||||||
m_reverseKeyTranslateTable[CKEY ] = KX_CKEY ;
|
m_reverseKeyTranslateTable[CKEY ] = KX_CKEY;
|
||||||
m_reverseKeyTranslateTable[DKEY ] = KX_DKEY ;
|
m_reverseKeyTranslateTable[DKEY ] = KX_DKEY;
|
||||||
m_reverseKeyTranslateTable[EKEY ] = KX_EKEY ;
|
m_reverseKeyTranslateTable[EKEY ] = KX_EKEY;
|
||||||
m_reverseKeyTranslateTable[FKEY ] = KX_FKEY ;
|
m_reverseKeyTranslateTable[FKEY ] = KX_FKEY;
|
||||||
m_reverseKeyTranslateTable[GKEY ] = KX_GKEY ;
|
m_reverseKeyTranslateTable[GKEY ] = KX_GKEY;
|
||||||
//XXX clean up
|
//XXX clean up
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
#define HKEY 'h'
|
#define HKEY 'h'
|
||||||
#endif
|
#endif
|
||||||
m_reverseKeyTranslateTable[HKEY ] = KX_HKEY ;
|
m_reverseKeyTranslateTable[HKEY ] = KX_HKEY;
|
||||||
//XXX clean up
|
//XXX clean up
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
#undef HKEY
|
#undef HKEY
|
||||||
#endif
|
#endif
|
||||||
m_reverseKeyTranslateTable[IKEY ] = KX_IKEY ;
|
m_reverseKeyTranslateTable[IKEY ] = KX_IKEY;
|
||||||
m_reverseKeyTranslateTable[JKEY ] = KX_JKEY ;
|
m_reverseKeyTranslateTable[JKEY ] = KX_JKEY;
|
||||||
m_reverseKeyTranslateTable[KKEY ] = KX_KKEY ;
|
m_reverseKeyTranslateTable[KKEY ] = KX_KKEY;
|
||||||
m_reverseKeyTranslateTable[LKEY ] = KX_LKEY ;
|
m_reverseKeyTranslateTable[LKEY ] = KX_LKEY;
|
||||||
m_reverseKeyTranslateTable[MKEY ] = KX_MKEY ;
|
m_reverseKeyTranslateTable[MKEY ] = KX_MKEY;
|
||||||
m_reverseKeyTranslateTable[NKEY ] = KX_NKEY ;
|
m_reverseKeyTranslateTable[NKEY ] = KX_NKEY;
|
||||||
m_reverseKeyTranslateTable[OKEY ] = KX_OKEY ;
|
m_reverseKeyTranslateTable[OKEY ] = KX_OKEY;
|
||||||
m_reverseKeyTranslateTable[PKEY ] = KX_PKEY ;
|
m_reverseKeyTranslateTable[PKEY ] = KX_PKEY;
|
||||||
m_reverseKeyTranslateTable[QKEY ] = KX_QKEY ;
|
m_reverseKeyTranslateTable[QKEY ] = KX_QKEY;
|
||||||
m_reverseKeyTranslateTable[RKEY ] = KX_RKEY ;
|
m_reverseKeyTranslateTable[RKEY ] = KX_RKEY;
|
||||||
m_reverseKeyTranslateTable[SKEY ] = KX_SKEY ;
|
m_reverseKeyTranslateTable[SKEY ] = KX_SKEY;
|
||||||
m_reverseKeyTranslateTable[TKEY ] = KX_TKEY ;
|
m_reverseKeyTranslateTable[TKEY ] = KX_TKEY;
|
||||||
m_reverseKeyTranslateTable[UKEY ] = KX_UKEY ;
|
m_reverseKeyTranslateTable[UKEY ] = KX_UKEY;
|
||||||
m_reverseKeyTranslateTable[VKEY ] = KX_VKEY ;
|
m_reverseKeyTranslateTable[VKEY ] = KX_VKEY;
|
||||||
m_reverseKeyTranslateTable[WKEY ] = KX_WKEY ;
|
m_reverseKeyTranslateTable[WKEY ] = KX_WKEY;
|
||||||
m_reverseKeyTranslateTable[XKEY ] = KX_XKEY ;
|
m_reverseKeyTranslateTable[XKEY ] = KX_XKEY;
|
||||||
m_reverseKeyTranslateTable[YKEY ] = KX_YKEY ;
|
m_reverseKeyTranslateTable[YKEY ] = KX_YKEY;
|
||||||
m_reverseKeyTranslateTable[ZKEY ] = KX_ZKEY ;
|
m_reverseKeyTranslateTable[ZKEY ] = KX_ZKEY;
|
||||||
|
|
||||||
m_reverseKeyTranslateTable[ZEROKEY ] = KX_ZEROKEY ;
|
m_reverseKeyTranslateTable[ZEROKEY ] = KX_ZEROKEY;
|
||||||
m_reverseKeyTranslateTable[ONEKEY ] = KX_ONEKEY ;
|
m_reverseKeyTranslateTable[ONEKEY ] = KX_ONEKEY;
|
||||||
m_reverseKeyTranslateTable[TWOKEY ] = KX_TWOKEY ;
|
m_reverseKeyTranslateTable[TWOKEY ] = KX_TWOKEY;
|
||||||
m_reverseKeyTranslateTable[THREEKEY ] = KX_THREEKEY ;
|
m_reverseKeyTranslateTable[THREEKEY ] = KX_THREEKEY;
|
||||||
m_reverseKeyTranslateTable[FOURKEY ] = KX_FOURKEY ;
|
m_reverseKeyTranslateTable[FOURKEY ] = KX_FOURKEY;
|
||||||
m_reverseKeyTranslateTable[FIVEKEY ] = KX_FIVEKEY ;
|
m_reverseKeyTranslateTable[FIVEKEY ] = KX_FIVEKEY;
|
||||||
m_reverseKeyTranslateTable[SIXKEY ] = KX_SIXKEY ;
|
m_reverseKeyTranslateTable[SIXKEY ] = KX_SIXKEY;
|
||||||
m_reverseKeyTranslateTable[SEVENKEY ] = KX_SEVENKEY ;
|
m_reverseKeyTranslateTable[SEVENKEY ] = KX_SEVENKEY;
|
||||||
m_reverseKeyTranslateTable[EIGHTKEY ] = KX_EIGHTKEY ;
|
m_reverseKeyTranslateTable[EIGHTKEY ] = KX_EIGHTKEY;
|
||||||
m_reverseKeyTranslateTable[NINEKEY ] = KX_NINEKEY ;
|
m_reverseKeyTranslateTable[NINEKEY ] = KX_NINEKEY;
|
||||||
|
|
||||||
m_reverseKeyTranslateTable[CAPSLOCKKEY ] = KX_CAPSLOCKKEY ;
|
m_reverseKeyTranslateTable[CAPSLOCKKEY ] = KX_CAPSLOCKKEY;
|
||||||
|
|
||||||
m_reverseKeyTranslateTable[LEFTCTRLKEY ] = KX_LEFTCTRLKEY ;
|
m_reverseKeyTranslateTable[LEFTCTRLKEY ] = KX_LEFTCTRLKEY;
|
||||||
m_reverseKeyTranslateTable[LEFTALTKEY ] = KX_LEFTALTKEY ;
|
m_reverseKeyTranslateTable[LEFTALTKEY ] = KX_LEFTALTKEY;
|
||||||
m_reverseKeyTranslateTable[RIGHTALTKEY ] = KX_RIGHTALTKEY ;
|
m_reverseKeyTranslateTable[RIGHTALTKEY ] = KX_RIGHTALTKEY;
|
||||||
m_reverseKeyTranslateTable[RIGHTCTRLKEY ] = KX_RIGHTCTRLKEY ;
|
m_reverseKeyTranslateTable[RIGHTCTRLKEY ] = KX_RIGHTCTRLKEY;
|
||||||
m_reverseKeyTranslateTable[RIGHTSHIFTKEY ] = KX_RIGHTSHIFTKEY ;
|
m_reverseKeyTranslateTable[RIGHTSHIFTKEY ] = KX_RIGHTSHIFTKEY;
|
||||||
m_reverseKeyTranslateTable[LEFTSHIFTKEY ] = KX_LEFTSHIFTKEY ;
|
m_reverseKeyTranslateTable[LEFTSHIFTKEY ] = KX_LEFTSHIFTKEY;
|
||||||
|
|
||||||
m_reverseKeyTranslateTable[ESCKEY ] = KX_ESCKEY ;
|
m_reverseKeyTranslateTable[ESCKEY ] = KX_ESCKEY;
|
||||||
m_reverseKeyTranslateTable[TABKEY ] = KX_TABKEY ;
|
m_reverseKeyTranslateTable[TABKEY ] = KX_TABKEY;
|
||||||
m_reverseKeyTranslateTable[RETKEY ] = KX_RETKEY ;
|
m_reverseKeyTranslateTable[RETKEY ] = KX_RETKEY;
|
||||||
m_reverseKeyTranslateTable[SPACEKEY ] = KX_SPACEKEY ;
|
m_reverseKeyTranslateTable[SPACEKEY ] = KX_SPACEKEY;
|
||||||
m_reverseKeyTranslateTable[LINEFEEDKEY ] = KX_LINEFEEDKEY ;
|
m_reverseKeyTranslateTable[LINEFEEDKEY ] = KX_LINEFEEDKEY;
|
||||||
m_reverseKeyTranslateTable[BACKSPACEKEY ] = KX_BACKSPACEKEY ;
|
m_reverseKeyTranslateTable[BACKSPACEKEY ] = KX_BACKSPACEKEY;
|
||||||
m_reverseKeyTranslateTable[DELKEY ] = KX_DELKEY ;
|
m_reverseKeyTranslateTable[DELKEY ] = KX_DELKEY;
|
||||||
m_reverseKeyTranslateTable[SEMICOLONKEY ] = KX_SEMICOLONKEY ;
|
m_reverseKeyTranslateTable[SEMICOLONKEY ] = KX_SEMICOLONKEY;
|
||||||
m_reverseKeyTranslateTable[PERIODKEY ] = KX_PERIODKEY ;
|
m_reverseKeyTranslateTable[PERIODKEY ] = KX_PERIODKEY;
|
||||||
m_reverseKeyTranslateTable[COMMAKEY ] = KX_COMMAKEY ;
|
m_reverseKeyTranslateTable[COMMAKEY ] = KX_COMMAKEY;
|
||||||
m_reverseKeyTranslateTable[QUOTEKEY ] = KX_QUOTEKEY ;
|
m_reverseKeyTranslateTable[QUOTEKEY ] = KX_QUOTEKEY;
|
||||||
m_reverseKeyTranslateTable[ACCENTGRAVEKEY ] = KX_ACCENTGRAVEKEY ;
|
m_reverseKeyTranslateTable[ACCENTGRAVEKEY ] = KX_ACCENTGRAVEKEY;
|
||||||
m_reverseKeyTranslateTable[MINUSKEY ] = KX_MINUSKEY ;
|
m_reverseKeyTranslateTable[MINUSKEY ] = KX_MINUSKEY;
|
||||||
m_reverseKeyTranslateTable[SLASHKEY ] = KX_SLASHKEY ;
|
m_reverseKeyTranslateTable[SLASHKEY ] = KX_SLASHKEY;
|
||||||
m_reverseKeyTranslateTable[BACKSLASHKEY ] = KX_BACKSLASHKEY ;
|
m_reverseKeyTranslateTable[BACKSLASHKEY ] = KX_BACKSLASHKEY;
|
||||||
m_reverseKeyTranslateTable[EQUALKEY ] = KX_EQUALKEY ;
|
m_reverseKeyTranslateTable[EQUALKEY ] = KX_EQUALKEY;
|
||||||
m_reverseKeyTranslateTable[LEFTBRACKETKEY ] = KX_LEFTBRACKETKEY ;
|
m_reverseKeyTranslateTable[LEFTBRACKETKEY ] = KX_LEFTBRACKETKEY;
|
||||||
m_reverseKeyTranslateTable[RIGHTBRACKETKEY ] = KX_RIGHTBRACKETKEY ;
|
m_reverseKeyTranslateTable[RIGHTBRACKETKEY ] = KX_RIGHTBRACKETKEY;
|
||||||
|
|
||||||
m_reverseKeyTranslateTable[LEFTARROWKEY ] = KX_LEFTARROWKEY ;
|
m_reverseKeyTranslateTable[LEFTARROWKEY ] = KX_LEFTARROWKEY;
|
||||||
m_reverseKeyTranslateTable[DOWNARROWKEY ] = KX_DOWNARROWKEY ;
|
m_reverseKeyTranslateTable[DOWNARROWKEY ] = KX_DOWNARROWKEY;
|
||||||
m_reverseKeyTranslateTable[RIGHTARROWKEY ] = KX_RIGHTARROWKEY ;
|
m_reverseKeyTranslateTable[RIGHTARROWKEY ] = KX_RIGHTARROWKEY;
|
||||||
m_reverseKeyTranslateTable[UPARROWKEY ] = KX_UPARROWKEY ;
|
m_reverseKeyTranslateTable[UPARROWKEY ] = KX_UPARROWKEY;
|
||||||
|
|
||||||
m_reverseKeyTranslateTable[PAD2 ] = KX_PAD2 ;
|
m_reverseKeyTranslateTable[PAD2 ] = KX_PAD2;
|
||||||
m_reverseKeyTranslateTable[PAD4 ] = KX_PAD4 ;
|
m_reverseKeyTranslateTable[PAD4 ] = KX_PAD4;
|
||||||
m_reverseKeyTranslateTable[PAD6 ] = KX_PAD6 ;
|
m_reverseKeyTranslateTable[PAD6 ] = KX_PAD6;
|
||||||
m_reverseKeyTranslateTable[PAD8 ] = KX_PAD8 ;
|
m_reverseKeyTranslateTable[PAD8 ] = KX_PAD8;
|
||||||
|
|
||||||
m_reverseKeyTranslateTable[PAD1 ] = KX_PAD1 ;
|
m_reverseKeyTranslateTable[PAD1 ] = KX_PAD1;
|
||||||
m_reverseKeyTranslateTable[PAD3 ] = KX_PAD3 ;
|
m_reverseKeyTranslateTable[PAD3 ] = KX_PAD3;
|
||||||
m_reverseKeyTranslateTable[PAD5 ] = KX_PAD5 ;
|
m_reverseKeyTranslateTable[PAD5 ] = KX_PAD5;
|
||||||
m_reverseKeyTranslateTable[PAD7 ] = KX_PAD7 ;
|
m_reverseKeyTranslateTable[PAD7 ] = KX_PAD7;
|
||||||
m_reverseKeyTranslateTable[PAD9 ] = KX_PAD9 ;
|
m_reverseKeyTranslateTable[PAD9 ] = KX_PAD9;
|
||||||
|
|
||||||
m_reverseKeyTranslateTable[PADPERIOD ] = KX_PADPERIOD ;
|
m_reverseKeyTranslateTable[PADPERIOD ] = KX_PADPERIOD;
|
||||||
m_reverseKeyTranslateTable[PADSLASHKEY ] = KX_PADSLASHKEY ;
|
m_reverseKeyTranslateTable[PADSLASHKEY ] = KX_PADSLASHKEY;
|
||||||
m_reverseKeyTranslateTable[PADASTERKEY ] = KX_PADASTERKEY ;
|
m_reverseKeyTranslateTable[PADASTERKEY ] = KX_PADASTERKEY;
|
||||||
|
|
||||||
|
|
||||||
m_reverseKeyTranslateTable[PAD0 ] = KX_PAD0 ;
|
m_reverseKeyTranslateTable[PAD0 ] = KX_PAD0;
|
||||||
m_reverseKeyTranslateTable[PADMINUS ] = KX_PADMINUS ;
|
m_reverseKeyTranslateTable[PADMINUS ] = KX_PADMINUS;
|
||||||
m_reverseKeyTranslateTable[PADENTER ] = KX_PADENTER ;
|
m_reverseKeyTranslateTable[PADENTER ] = KX_PADENTER;
|
||||||
m_reverseKeyTranslateTable[PADPLUSKEY ] = KX_PADPLUSKEY ;
|
m_reverseKeyTranslateTable[PADPLUSKEY ] = KX_PADPLUSKEY;
|
||||||
|
|
||||||
|
|
||||||
m_reverseKeyTranslateTable[F1KEY ] = KX_F1KEY ;
|
m_reverseKeyTranslateTable[F1KEY ] = KX_F1KEY;
|
||||||
m_reverseKeyTranslateTable[F2KEY ] = KX_F2KEY ;
|
m_reverseKeyTranslateTable[F2KEY ] = KX_F2KEY;
|
||||||
m_reverseKeyTranslateTable[F3KEY ] = KX_F3KEY ;
|
m_reverseKeyTranslateTable[F3KEY ] = KX_F3KEY;
|
||||||
m_reverseKeyTranslateTable[F4KEY ] = KX_F4KEY ;
|
m_reverseKeyTranslateTable[F4KEY ] = KX_F4KEY;
|
||||||
m_reverseKeyTranslateTable[F5KEY ] = KX_F5KEY ;
|
m_reverseKeyTranslateTable[F5KEY ] = KX_F5KEY;
|
||||||
m_reverseKeyTranslateTable[F6KEY ] = KX_F6KEY ;
|
m_reverseKeyTranslateTable[F6KEY ] = KX_F6KEY;
|
||||||
m_reverseKeyTranslateTable[F7KEY ] = KX_F7KEY ;
|
m_reverseKeyTranslateTable[F7KEY ] = KX_F7KEY;
|
||||||
m_reverseKeyTranslateTable[F8KEY ] = KX_F8KEY ;
|
m_reverseKeyTranslateTable[F8KEY ] = KX_F8KEY;
|
||||||
m_reverseKeyTranslateTable[F9KEY ] = KX_F9KEY ;
|
m_reverseKeyTranslateTable[F9KEY ] = KX_F9KEY;
|
||||||
m_reverseKeyTranslateTable[F10KEY ] = KX_F10KEY ;
|
m_reverseKeyTranslateTable[F10KEY ] = KX_F10KEY;
|
||||||
m_reverseKeyTranslateTable[F11KEY ] = KX_F11KEY ;
|
m_reverseKeyTranslateTable[F11KEY ] = KX_F11KEY;
|
||||||
m_reverseKeyTranslateTable[F12KEY ] = KX_F12KEY ;
|
m_reverseKeyTranslateTable[F12KEY ] = KX_F12KEY;
|
||||||
m_reverseKeyTranslateTable[F13KEY ] = KX_F13KEY ;
|
m_reverseKeyTranslateTable[F13KEY ] = KX_F13KEY;
|
||||||
m_reverseKeyTranslateTable[F14KEY ] = KX_F14KEY ;
|
m_reverseKeyTranslateTable[F14KEY ] = KX_F14KEY;
|
||||||
m_reverseKeyTranslateTable[F15KEY ] = KX_F15KEY ;
|
m_reverseKeyTranslateTable[F15KEY ] = KX_F15KEY;
|
||||||
m_reverseKeyTranslateTable[F16KEY ] = KX_F16KEY ;
|
m_reverseKeyTranslateTable[F16KEY ] = KX_F16KEY;
|
||||||
m_reverseKeyTranslateTable[F17KEY ] = KX_F17KEY ;
|
m_reverseKeyTranslateTable[F17KEY ] = KX_F17KEY;
|
||||||
m_reverseKeyTranslateTable[F18KEY ] = KX_F18KEY ;
|
m_reverseKeyTranslateTable[F18KEY ] = KX_F18KEY;
|
||||||
m_reverseKeyTranslateTable[F19KEY ] = KX_F19KEY ;
|
m_reverseKeyTranslateTable[F19KEY ] = KX_F19KEY;
|
||||||
|
|
||||||
m_reverseKeyTranslateTable[PAUSEKEY ] = KX_PAUSEKEY ;
|
m_reverseKeyTranslateTable[PAUSEKEY ] = KX_PAUSEKEY;
|
||||||
m_reverseKeyTranslateTable[INSERTKEY ] = KX_INSERTKEY ;
|
m_reverseKeyTranslateTable[INSERTKEY ] = KX_INSERTKEY;
|
||||||
m_reverseKeyTranslateTable[HOMEKEY ] = KX_HOMEKEY ;
|
m_reverseKeyTranslateTable[HOMEKEY ] = KX_HOMEKEY;
|
||||||
m_reverseKeyTranslateTable[PAGEUPKEY ] = KX_PAGEUPKEY ;
|
m_reverseKeyTranslateTable[PAGEUPKEY ] = KX_PAGEUPKEY;
|
||||||
m_reverseKeyTranslateTable[PAGEDOWNKEY ] = KX_PAGEDOWNKEY ;
|
m_reverseKeyTranslateTable[PAGEDOWNKEY ] = KX_PAGEDOWNKEY;
|
||||||
m_reverseKeyTranslateTable[ENDKEY ] = KX_ENDKEY ;
|
m_reverseKeyTranslateTable[ENDKEY ] = KX_ENDKEY;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual ~BL_BlenderInputDevice()
|
virtual ~BL_BlenderInputDevice()
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
KX_EnumInputs ToNative(unsigned short incode) {
|
KX_EnumInputs ToNative(unsigned short incode) {
|
||||||
return m_reverseKeyTranslateTable[incode];
|
return m_reverseKeyTranslateTable[incode];
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual bool IsPressed(SCA_IInputDevice::KX_EnumInputs inputcode)=0;
|
virtual bool IsPressed(SCA_IInputDevice::KX_EnumInputs inputcode)=0;
|
||||||
// virtual const SCA_InputEvent& GetEventValue(SCA_IInputDevice::KX_EnumInputs inputcode)=0;
|
// virtual const SCA_InputEvent& GetEventValue(SCA_IInputDevice::KX_EnumInputs inputcode)=0;
|
||||||
virtual bool ConvertBlenderEvent(unsigned short incode,short val)=0;
|
virtual bool ConvertBlenderEvent(unsigned short incode,short val)=0;
|
||||||
|
|
||||||
|
|
||||||
|
@ -129,6 +129,50 @@ void BL_ActionActuator::SetBlendTime (float newtime){
|
|||||||
m_blendframe = newtime;
|
m_blendframe = newtime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BL_ActionActuator::SetLocalTime(float curtime)
|
||||||
|
{
|
||||||
|
float dt = (curtime-m_starttime)*KX_KetsjiEngine::GetAnimFrameRate();
|
||||||
|
|
||||||
|
if (m_endframe < m_startframe)
|
||||||
|
dt = -dt;
|
||||||
|
|
||||||
|
m_localtime = m_startframe + dt;
|
||||||
|
|
||||||
|
// Handle wrap around
|
||||||
|
if (m_localtime < min(m_startframe, m_endframe) || m_localtime > max(m_startframe, m_endframe))
|
||||||
|
{
|
||||||
|
switch(m_playtype)
|
||||||
|
{
|
||||||
|
case ACT_ACTION_PLAY:
|
||||||
|
// Clamp
|
||||||
|
m_localtime = m_endframe;
|
||||||
|
break;
|
||||||
|
case ACT_ACTION_LOOP_END:
|
||||||
|
// Put the time back to the beginning
|
||||||
|
m_localtime = m_startframe;
|
||||||
|
m_starttime = curtime;
|
||||||
|
break;
|
||||||
|
case ACT_ACTION_PINGPONG:
|
||||||
|
// Swap the start and end frames
|
||||||
|
float temp = m_startframe;
|
||||||
|
m_startframe = m_endframe;
|
||||||
|
m_endframe = temp;
|
||||||
|
|
||||||
|
m_starttime = curtime;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void BL_ActionActuator::ResetStartTime(float curtime)
|
||||||
|
{
|
||||||
|
float dt = m_localtime - m_startframe;
|
||||||
|
|
||||||
|
m_starttime = curtime - dt / (KX_KetsjiEngine::GetAnimFrameRate());
|
||||||
|
//SetLocalTime(curtime);
|
||||||
|
}
|
||||||
|
|
||||||
CValue* BL_ActionActuator::GetReplica() {
|
CValue* BL_ActionActuator::GetReplica() {
|
||||||
BL_ActionActuator* replica = new BL_ActionActuator(*this);//m_float,GetName());
|
BL_ActionActuator* replica = new BL_ActionActuator(*this);//m_float,GetName());
|
||||||
replica->ProcessReplica();
|
replica->ProcessReplica();
|
||||||
@ -173,6 +217,9 @@ bool BL_ActionActuator::Update(double curtime, bool frame)
|
|||||||
case ACT_ACTION_FROM_PROP:
|
case ACT_ACTION_FROM_PROP:
|
||||||
CValue* prop = GetParent()->GetProperty(m_propname);
|
CValue* prop = GetParent()->GetProperty(m_propname);
|
||||||
|
|
||||||
|
// If we don't have a property, we can't do anything, so just bail
|
||||||
|
if (!prop) return false;
|
||||||
|
|
||||||
playtype = BL_Action::ACT_MODE_PLAY;
|
playtype = BL_Action::ACT_MODE_PLAY;
|
||||||
start = end = prop->GetNumber();
|
start = end = prop->GetNumber();
|
||||||
|
|
||||||
@ -194,11 +241,46 @@ bool BL_ActionActuator::Update(double curtime, bool frame)
|
|||||||
RemoveAllEvents();
|
RemoveAllEvents();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bUseContinue && (m_flag & ACT_FLAG_ACTIVE))
|
if (m_flag & ACT_FLAG_ATTEMPT_PLAY)
|
||||||
m_localtime = obj->GetActionFrame(m_layer);
|
SetLocalTime(curtime);
|
||||||
|
|
||||||
if (bPositiveEvent)
|
if (bUseContinue && (m_flag & ACT_FLAG_ACTIVE))
|
||||||
{
|
{
|
||||||
|
m_localtime = obj->GetActionFrame(m_layer);
|
||||||
|
ResetStartTime(curtime);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle a frame property if it's defined
|
||||||
|
if ((m_flag & ACT_FLAG_ACTIVE) && m_framepropname[0] != 0)
|
||||||
|
{
|
||||||
|
CValue* oldprop = obj->GetProperty(m_framepropname);
|
||||||
|
CValue* newval = new CFloatValue(obj->GetActionFrame(m_layer));
|
||||||
|
if (oldprop)
|
||||||
|
oldprop->SetValue(newval);
|
||||||
|
else
|
||||||
|
obj->SetProperty(m_framepropname, newval);
|
||||||
|
|
||||||
|
newval->Release();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle a finished animation
|
||||||
|
if ((m_flag & ACT_FLAG_PLAY_END) && obj->IsActionDone(m_layer))
|
||||||
|
{
|
||||||
|
m_flag &= ~ACT_FLAG_ACTIVE;
|
||||||
|
m_flag &= ~ACT_FLAG_ATTEMPT_PLAY;
|
||||||
|
obj->StopAction(m_layer);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If a different action is playing, we've been overruled and are no longer active
|
||||||
|
if (obj->GetCurrentAction(m_layer) != m_action)
|
||||||
|
m_flag &= ~ACT_FLAG_ACTIVE;
|
||||||
|
|
||||||
|
if (bPositiveEvent || (m_flag & ACT_FLAG_ATTEMPT_PLAY && !(m_flag & ACT_FLAG_ACTIVE)))
|
||||||
|
{
|
||||||
|
if (bPositiveEvent)
|
||||||
|
ResetStartTime(curtime);
|
||||||
|
|
||||||
if (obj->PlayAction(m_action->id.name+2, start, end, m_layer, m_priority, m_blendin, playtype, m_layer_weight, m_ipo_flags))
|
if (obj->PlayAction(m_action->id.name+2, start, end, m_layer, m_priority, m_blendin, playtype, m_layer_weight, m_ipo_flags))
|
||||||
{
|
{
|
||||||
m_flag |= ACT_FLAG_ACTIVE;
|
m_flag |= ACT_FLAG_ACTIVE;
|
||||||
@ -210,11 +292,11 @@ bool BL_ActionActuator::Update(double curtime, bool frame)
|
|||||||
else
|
else
|
||||||
m_flag &= ~ACT_FLAG_PLAY_END;
|
m_flag &= ~ACT_FLAG_PLAY_END;
|
||||||
}
|
}
|
||||||
else
|
m_flag |= ACT_FLAG_ATTEMPT_PLAY;
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
else if ((m_flag & ACT_FLAG_ACTIVE) && bNegativeEvent)
|
else if ((m_flag & ACT_FLAG_ACTIVE) && bNegativeEvent)
|
||||||
{
|
{
|
||||||
|
m_flag &= ~ACT_FLAG_ATTEMPT_PLAY;
|
||||||
bAction *curr_action = obj->GetCurrentAction(m_layer);
|
bAction *curr_action = obj->GetCurrentAction(m_layer);
|
||||||
if (curr_action && curr_action != m_action)
|
if (curr_action && curr_action != m_action)
|
||||||
{
|
{
|
||||||
@ -259,27 +341,6 @@ bool BL_ActionActuator::Update(double curtime, bool frame)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handle a frame property if it's defined
|
|
||||||
if ((m_flag & ACT_FLAG_ACTIVE) && m_framepropname[0] != 0)
|
|
||||||
{
|
|
||||||
CValue* oldprop = obj->GetProperty(m_framepropname);
|
|
||||||
CValue* newval = new CFloatValue(obj->GetActionFrame(m_layer));
|
|
||||||
if (oldprop)
|
|
||||||
oldprop->SetValue(newval);
|
|
||||||
else
|
|
||||||
obj->SetProperty(m_framepropname, newval);
|
|
||||||
|
|
||||||
newval->Release();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Handle a finished animation
|
|
||||||
if ((m_flag & ACT_FLAG_PLAY_END) && obj->IsActionDone(m_layer))
|
|
||||||
{
|
|
||||||
m_flag &= ~ACT_FLAG_ACTIVE;
|
|
||||||
obj->StopAction(m_layer);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -64,6 +64,8 @@ public:
|
|||||||
virtual void ProcessReplica();
|
virtual void ProcessReplica();
|
||||||
|
|
||||||
void SetBlendTime (float newtime);
|
void SetBlendTime (float newtime);
|
||||||
|
void SetLocalTime (float curtime);
|
||||||
|
void ResetStartTime (float curtime);
|
||||||
|
|
||||||
bAction* GetAction() { return m_action; }
|
bAction* GetAction() { return m_action; }
|
||||||
void SetAction(bAction* act) { m_action= act; }
|
void SetAction(bAction* act) { m_action= act; }
|
||||||
@ -150,7 +152,7 @@ enum {
|
|||||||
ACT_FLAG_ACTIVE = 1<<3,
|
ACT_FLAG_ACTIVE = 1<<3,
|
||||||
ACT_FLAG_CONTINUE = 1<<4,
|
ACT_FLAG_CONTINUE = 1<<4,
|
||||||
ACT_FLAG_PLAY_END = 1<<5,
|
ACT_FLAG_PLAY_END = 1<<5,
|
||||||
|
ACT_FLAG_ATTEMPT_PLAY = 1<<6,
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1483,7 +1483,7 @@ void BL_CreatePhysicsObjectNew(KX_GameObject* gameobj,
|
|||||||
{
|
{
|
||||||
objprop.m_gamesoftFlag = OB_BSB_BENDING_CONSTRAINTS | OB_BSB_SHAPE_MATCHING | OB_BSB_AERO_VPOINT;
|
objprop.m_gamesoftFlag = OB_BSB_BENDING_CONSTRAINTS | OB_BSB_SHAPE_MATCHING | OB_BSB_AERO_VPOINT;
|
||||||
|
|
||||||
objprop.m_soft_linStiff = 0.5;;
|
objprop.m_soft_linStiff = 0.5;
|
||||||
objprop.m_soft_angStiff = 1.f; /* angular stiffness 0..1 */
|
objprop.m_soft_angStiff = 1.f; /* angular stiffness 0..1 */
|
||||||
objprop.m_soft_volume= 1.f; /* volume preservation 0..1 */
|
objprop.m_soft_volume= 1.f; /* volume preservation 0..1 */
|
||||||
|
|
||||||
@ -1911,11 +1911,11 @@ void RBJconstraints(Object *ob)//not used
|
|||||||
|
|
||||||
KX_IPhysicsController* getPhId(CListValue* sumolist,STR_String busc){//not used
|
KX_IPhysicsController* getPhId(CListValue* sumolist,STR_String busc){//not used
|
||||||
|
|
||||||
for (int j=0;j<sumolist->GetCount();j++)
|
for (int j=0;j<sumolist->GetCount();j++)
|
||||||
{
|
{
|
||||||
KX_GameObject* gameobje = (KX_GameObject*) sumolist->GetValue(j);
|
KX_GameObject* gameobje = (KX_GameObject*) sumolist->GetValue(j);
|
||||||
if (gameobje->GetName()==busc)
|
if (gameobje->GetName()==busc)
|
||||||
return gameobje->GetPhysicsController();
|
return gameobje->GetPhysicsController();
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -1924,11 +1924,11 @@ KX_IPhysicsController* getPhId(CListValue* sumolist,STR_String busc){//not used
|
|||||||
|
|
||||||
KX_GameObject* getGameOb(STR_String busc,CListValue* sumolist){
|
KX_GameObject* getGameOb(STR_String busc,CListValue* sumolist){
|
||||||
|
|
||||||
for (int j=0;j<sumolist->GetCount();j++)
|
for (int j=0;j<sumolist->GetCount();j++)
|
||||||
{
|
{
|
||||||
KX_GameObject* gameobje = (KX_GameObject*) sumolist->GetValue(j);
|
KX_GameObject* gameobje = (KX_GameObject*) sumolist->GetValue(j);
|
||||||
if (gameobje->GetName()==busc)
|
if (gameobje->GetName()==busc)
|
||||||
return gameobje;
|
return gameobje;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -88,7 +88,7 @@ protected:
|
|||||||
// --
|
// --
|
||||||
int m_tvtot;
|
int m_tvtot;
|
||||||
BL_DeformableGameObject* m_gameobj;
|
BL_DeformableGameObject* m_gameobj;
|
||||||
double m_lastDeformUpdate;
|
double m_lastDeformUpdate;
|
||||||
|
|
||||||
|
|
||||||
#ifdef WITH_CXX_GUARDEDALLOC
|
#ifdef WITH_CXX_GUARDEDALLOC
|
||||||
|
@ -69,12 +69,12 @@ extern "C"{
|
|||||||
//#undef __NLA_DEFNORMALS
|
//#undef __NLA_DEFNORMALS
|
||||||
|
|
||||||
BL_ShapeDeformer::BL_ShapeDeformer(BL_DeformableGameObject *gameobj,
|
BL_ShapeDeformer::BL_ShapeDeformer(BL_DeformableGameObject *gameobj,
|
||||||
Object *bmeshobj,
|
Object *bmeshobj,
|
||||||
RAS_MeshObject *mesh)
|
RAS_MeshObject *mesh)
|
||||||
:
|
:
|
||||||
BL_SkinDeformer(gameobj,bmeshobj, mesh),
|
BL_SkinDeformer(gameobj,bmeshobj, mesh),
|
||||||
m_useShapeDrivers(false),
|
m_useShapeDrivers(false),
|
||||||
m_lastShapeUpdate(-1)
|
m_lastShapeUpdate(-1)
|
||||||
{
|
{
|
||||||
m_key = m_bmesh->key;
|
m_key = m_bmesh->key;
|
||||||
m_bmesh->key = copy_key(m_key);
|
m_bmesh->key = copy_key(m_key);
|
||||||
|
@ -46,8 +46,8 @@ class BL_ShapeDeformer : public BL_SkinDeformer
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
BL_ShapeDeformer(BL_DeformableGameObject *gameobj,
|
BL_ShapeDeformer(BL_DeformableGameObject *gameobj,
|
||||||
Object *bmeshobj,
|
Object *bmeshobj,
|
||||||
RAS_MeshObject *mesh);
|
RAS_MeshObject *mesh);
|
||||||
|
|
||||||
/* this second constructor is needed for making a mesh deformable on the fly. */
|
/* this second constructor is needed for making a mesh deformable on the fly. */
|
||||||
BL_ShapeDeformer(BL_DeformableGameObject *gameobj,
|
BL_ShapeDeformer(BL_DeformableGameObject *gameobj,
|
||||||
|
@ -679,7 +679,7 @@ void KX_BlenderSceneConverter::ResetPhysicsObjectsAnimationIpo(bool clearIpo)
|
|||||||
MEM_freeN( tmpicu );
|
MEM_freeN( tmpicu );
|
||||||
localDel_ipoCurve( tmpicu );
|
localDel_ipoCurve( tmpicu );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
{ ipo = NULL; // XXX add_ipo(blenderObject->id.name+2, ID_OB);
|
{ ipo = NULL; // XXX add_ipo(blenderObject->id.name+2, ID_OB);
|
||||||
blenderObject->ipo = ipo;
|
blenderObject->ipo = ipo;
|
||||||
|
@ -942,7 +942,7 @@ void BL_ConvertActuators(char* maggiename,
|
|||||||
case ACT_2DFILTER:
|
case ACT_2DFILTER:
|
||||||
{
|
{
|
||||||
bTwoDFilterActuator *_2dfilter = (bTwoDFilterActuator*) bact->data;
|
bTwoDFilterActuator *_2dfilter = (bTwoDFilterActuator*) bact->data;
|
||||||
SCA_2DFilterActuator *tmp = NULL;
|
SCA_2DFilterActuator *tmp = NULL;
|
||||||
|
|
||||||
RAS_2DFilterManager::RAS_2DFILTER_MODE filtermode;
|
RAS_2DFilterManager::RAS_2DFILTER_MODE filtermode;
|
||||||
switch(_2dfilter->type)
|
switch(_2dfilter->type)
|
||||||
@ -1012,7 +1012,7 @@ void BL_ConvertActuators(char* maggiename,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
baseact = tmp;
|
baseact = tmp;
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -276,7 +276,7 @@ void BL_ConvertSensors(struct Object* blenderobject,
|
|||||||
gReverseKeyTranslateTable[ENDKEY ] = SCA_IInputDevice::KX_ENDKEY;
|
gReverseKeyTranslateTable[ENDKEY ] = SCA_IInputDevice::KX_ENDKEY;
|
||||||
}
|
}
|
||||||
|
|
||||||
int executePriority = 0;
|
int executePriority = 0;
|
||||||
int uniqueint = 0;
|
int uniqueint = 0;
|
||||||
int count = 0;
|
int count = 0;
|
||||||
bSensor* sens = (bSensor*)blenderobject->sensors.first;
|
bSensor* sens = (bSensor*)blenderobject->sensors.first;
|
||||||
|
@ -257,7 +257,7 @@ SG_Controller *BL_CreateCameraIPO(struct bAction *action, KX_GameObject* camera
|
|||||||
ipocontr->m_clipstart = blendercamera->clipsta;
|
ipocontr->m_clipstart = blendercamera->clipsta;
|
||||||
ipocontr->m_clipend = blendercamera->clipend;
|
ipocontr->m_clipend = blendercamera->clipend;
|
||||||
|
|
||||||
BL_InterpolatorList *adtList= GetAdtList(blendercamera->adt->action, converter);
|
BL_InterpolatorList *adtList= GetAdtList(action, converter);
|
||||||
|
|
||||||
// For each active channel in the adtList add an
|
// For each active channel in the adtList add an
|
||||||
// interpolator to the game object.
|
// interpolator to the game object.
|
||||||
|
@ -192,89 +192,89 @@ void CParser::NextSym()
|
|||||||
|
|
||||||
switch(ch)
|
switch(ch)
|
||||||
{
|
{
|
||||||
case '(':
|
case '(':
|
||||||
sym = lbracksym; NextCh();
|
sym = lbracksym; NextCh();
|
||||||
break;
|
break;
|
||||||
case ')':
|
case ')':
|
||||||
sym = rbracksym; NextCh();
|
sym = rbracksym; NextCh();
|
||||||
break;
|
break;
|
||||||
case ',':
|
case ',':
|
||||||
sym = commasym; NextCh();
|
sym = commasym; NextCh();
|
||||||
break;
|
break;
|
||||||
case '%' :
|
case '%' :
|
||||||
sym = opsym; opkind = OPmodulus; NextCh();
|
sym = opsym; opkind = OPmodulus; NextCh();
|
||||||
break;
|
break;
|
||||||
case '+' :
|
case '+' :
|
||||||
sym = opsym; opkind = OPplus; NextCh();
|
sym = opsym; opkind = OPplus; NextCh();
|
||||||
break;
|
break;
|
||||||
case '-' :
|
case '-' :
|
||||||
sym = opsym; opkind = OPminus; NextCh();
|
sym = opsym; opkind = OPminus; NextCh();
|
||||||
break;
|
break;
|
||||||
case '*' :
|
case '*' :
|
||||||
sym = opsym; opkind = OPtimes; NextCh();
|
sym = opsym; opkind = OPtimes; NextCh();
|
||||||
break;
|
break;
|
||||||
case '/' :
|
case '/' :
|
||||||
sym = opsym; opkind = OPdivide; NextCh();
|
sym = opsym; opkind = OPdivide; NextCh();
|
||||||
break;
|
break;
|
||||||
case '&' :
|
case '&' :
|
||||||
sym = opsym; opkind = OPand; NextCh(); TermChar('&');
|
sym = opsym; opkind = OPand; NextCh(); TermChar('&');
|
||||||
break;
|
break;
|
||||||
case '|' :
|
case '|' :
|
||||||
sym = opsym; opkind = OPor; NextCh(); TermChar('|');
|
sym = opsym; opkind = OPor; NextCh(); TermChar('|');
|
||||||
break;
|
break;
|
||||||
case '=' :
|
case '=' :
|
||||||
sym = opsym; opkind = OPequal; NextCh(); TermChar('=');
|
sym = opsym; opkind = OPequal; NextCh(); TermChar('=');
|
||||||
break;
|
break;
|
||||||
case '!' :
|
case '!' :
|
||||||
sym = opsym;
|
sym = opsym;
|
||||||
NextCh();
|
|
||||||
if (ch == '=')
|
|
||||||
{
|
|
||||||
opkind = OPunequal;
|
|
||||||
NextCh();
|
NextCh();
|
||||||
}
|
if (ch == '=')
|
||||||
else
|
{
|
||||||
{
|
opkind = OPunequal;
|
||||||
opkind = OPnot;
|
NextCh();
|
||||||
}
|
}
|
||||||
break;
|
else
|
||||||
case '>':
|
{
|
||||||
sym = opsym;
|
opkind = OPnot;
|
||||||
NextCh();
|
}
|
||||||
if (ch == '=')
|
break;
|
||||||
{
|
case '>':
|
||||||
opkind = OPgreaterequal;
|
sym = opsym;
|
||||||
NextCh();
|
NextCh();
|
||||||
}
|
if (ch == '=')
|
||||||
else
|
{
|
||||||
{
|
opkind = OPgreaterequal;
|
||||||
opkind = OPgreater;
|
NextCh();
|
||||||
}
|
}
|
||||||
break;
|
else
|
||||||
case '<':
|
{
|
||||||
sym = opsym;
|
opkind = OPgreater;
|
||||||
NextCh();
|
}
|
||||||
if (ch == '=') {
|
break;
|
||||||
opkind = OPlessequal;
|
case '<':
|
||||||
|
sym = opsym;
|
||||||
NextCh();
|
NextCh();
|
||||||
} else {
|
if (ch == '=') {
|
||||||
opkind = OPless;
|
opkind = OPlessequal;
|
||||||
}
|
NextCh();
|
||||||
break;
|
} else {
|
||||||
case '\"' : {
|
opkind = OPless;
|
||||||
int start;
|
}
|
||||||
sym = constsym;
|
break;
|
||||||
constkind = stringtype;
|
case '\"' : {
|
||||||
NextCh();
|
int start;
|
||||||
start = chcount;
|
sym = constsym;
|
||||||
while ((ch != '\"') && (ch != 0x0))
|
constkind = stringtype;
|
||||||
NextCh();
|
NextCh();
|
||||||
GrabRealString(start);
|
start = chcount;
|
||||||
TermChar('\"'); // check for eol before '\"'
|
while ((ch != '\"') && (ch != 0x0))
|
||||||
break;
|
NextCh();
|
||||||
}
|
GrabRealString(start);
|
||||||
case 0x0: sym = eolsym; break;
|
TermChar('\"'); // check for eol before '\"'
|
||||||
default:
|
break;
|
||||||
|
}
|
||||||
|
case 0x0: sym = eolsym; break;
|
||||||
|
default:
|
||||||
{
|
{
|
||||||
int start;
|
int start;
|
||||||
start = chcount;
|
start = chcount;
|
||||||
@ -301,7 +301,7 @@ void CParser::NextSym()
|
|||||||
}
|
}
|
||||||
GrabString(start);
|
GrabString(start);
|
||||||
} else if (((ch >= 'a') && (ch <= 'z'))
|
} else if (((ch >= 'a') && (ch <= 'z'))
|
||||||
|| ((ch >= 'A') && (ch <= 'Z')))
|
|| ((ch >= 'A') && (ch <= 'Z')))
|
||||||
{ // reserved word?
|
{ // reserved word?
|
||||||
|
|
||||||
start = chcount;
|
start = chcount;
|
||||||
@ -358,18 +358,18 @@ STR_String CParser::Symbol2Str(int s) {
|
|||||||
// returns a string representation of of symbol s,
|
// returns a string representation of of symbol s,
|
||||||
// for use in Term when generating an error
|
// for use in Term when generating an error
|
||||||
switch(s) {
|
switch(s) {
|
||||||
case errorsym: return "error";
|
case errorsym: return "error";
|
||||||
case lbracksym: return "(";
|
case lbracksym: return "(";
|
||||||
case rbracksym: return ")";
|
case rbracksym: return ")";
|
||||||
case commasym: return ",";
|
case commasym: return ",";
|
||||||
case opsym: return "operator";
|
case opsym: return "operator";
|
||||||
case constsym: return "constant";
|
case constsym: return "constant";
|
||||||
case sumsym: return "SUM";
|
case sumsym: return "SUM";
|
||||||
case ifsym: return "IF";
|
case ifsym: return "IF";
|
||||||
case whocodedsym: return "WHOMADE";
|
case whocodedsym: return "WHOMADE";
|
||||||
case eolsym: return "end of line";
|
case eolsym: return "end of line";
|
||||||
case idsym: return "identifier";
|
case idsym: return "identifier";
|
||||||
default: return "unknown"; // should not happen
|
default: return "unknown"; // should not happen
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -391,19 +391,19 @@ int CParser::Priority(int optorkind) {
|
|||||||
// returns the priority of an operator
|
// returns the priority of an operator
|
||||||
// higher number means higher priority
|
// higher number means higher priority
|
||||||
switch(optorkind) {
|
switch(optorkind) {
|
||||||
case OPor: return 1;
|
case OPor: return 1;
|
||||||
case OPand: return 2;
|
case OPand: return 2;
|
||||||
case OPgreater:
|
case OPgreater:
|
||||||
case OPless:
|
case OPless:
|
||||||
case OPgreaterequal:
|
case OPgreaterequal:
|
||||||
case OPlessequal:
|
case OPlessequal:
|
||||||
case OPequal:
|
case OPequal:
|
||||||
case OPunequal: return 3;
|
case OPunequal: return 3;
|
||||||
case OPplus:
|
case OPplus:
|
||||||
case OPminus: return 4;
|
case OPminus: return 4;
|
||||||
case OPmodulus:
|
case OPmodulus:
|
||||||
case OPtimes:
|
case OPtimes:
|
||||||
case OPdivide: return 5;
|
case OPdivide: return 5;
|
||||||
}
|
}
|
||||||
MT_assert(false);
|
MT_assert(false);
|
||||||
return 0; // should not happen
|
return 0; // should not happen
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user