forked from bartvdbraak/blender
svn merge ^/trunk/blender -r43345:43381
This commit is contained in:
commit
917714acf7
@ -13,8 +13,8 @@ class SubMenu(bpy.types.Menu):
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
|
||||
layout.operator("object.select_all", text="Select/Deselect All")
|
||||
layout.operator("object.select_inverse", text="Inverse")
|
||||
layout.operator("object.select_all", text="Select/Deselect All").action = 'TOGGLE'
|
||||
layout.operator("object.select_all", text="Inverse").action = 'INVERT'
|
||||
layout.operator("object.select_random", text="Random")
|
||||
|
||||
# access this operator as a submenu
|
||||
|
@ -27,8 +27,8 @@ class BasicMenu(bpy.types.Menu):
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
|
||||
layout.operator("object.select_all", text="Select/Deselect All")
|
||||
layout.operator("object.select_inverse", text="Inverse")
|
||||
layout.operator("object.select_all", text="Select/Deselect All").action = 'TOGGLE'
|
||||
layout.operator("object.select_all", text="Inverse").action = 'INVERT'
|
||||
layout.operator("object.select_random", text="Random")
|
||||
|
||||
|
||||
|
@ -34,9 +34,9 @@ class ObjectSelectPanel(bpy.types.Panel):
|
||||
|
||||
box = layout.box()
|
||||
box.label("Selection Tools")
|
||||
box.operator("object.select_all")
|
||||
box.operator("object.select_all").action = 'TOGGLE'
|
||||
row = box.row()
|
||||
row.operator("object.select_inverse")
|
||||
row.operator("object.select_all").action = 'INVERT'
|
||||
row.operator("object.select_random")
|
||||
|
||||
|
||||
|
@ -516,7 +516,7 @@ When the texture object is deleted, the new texture is deleted and the old textu
|
||||
line by line starting from the bottom of the image. The pixel size and format is determined by the mode
|
||||
parameter.
|
||||
|
||||
.. function materialID(object,name)
|
||||
.. function:: materialID(object,name)
|
||||
|
||||
Returns a numeric value that can be used in :class:`Texture` to create a dynamic texture.
|
||||
|
||||
@ -538,7 +538,7 @@ When the texture object is deleted, the new texture is deleted and the old textu
|
||||
:type name: string
|
||||
:rtype: integer
|
||||
|
||||
.. function setLogFile(filename)
|
||||
.. function:: setLogFile(filename)
|
||||
|
||||
Sets the name of a text file in which runtime error messages will be written, in addition to the printing
|
||||
of the messages on the Python console. Only the runtime errors specific to the VideoTexture module
|
||||
|
@ -1765,33 +1765,29 @@ Game Types (bge.types)
|
||||
#. Polygon shape (triangle/quad)
|
||||
#. Game Object
|
||||
|
||||
#. Verticies will be split by face if necessary. Verticies can only be shared between faces if:
|
||||
#. Vertices will be split by face if necessary. Vertices can only be shared between faces if:
|
||||
|
||||
#. They are at the same position
|
||||
#. UV coordinates are the same
|
||||
#. Their normals are the same (both polygons are "Set Smooth")
|
||||
#. They are the same colour, for example: a cube has 24 verticies: 6 faces with 4 verticies per face.
|
||||
#. They are the same colour, for example: a cube has 24 vertices: 6 faces with 4 vertices per face.
|
||||
|
||||
The correct method of iterating over every :class:`KX_VertexProxy` in a game object
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
import GameLogic
|
||||
from bge import logic
|
||||
|
||||
co = GameLogic.getCurrentController()
|
||||
obj = co.owner
|
||||
cont = logic.getCurrentController()
|
||||
object = cont.owner
|
||||
|
||||
m_i = 0
|
||||
mesh = obj.getMesh(m_i) # There can be more than one mesh...
|
||||
while mesh != None:
|
||||
for mat in range(mesh.getNumMaterials()):
|
||||
for mesh in object.meshes:
|
||||
for material in mesh.materials:
|
||||
for v_index in range(mesh.getVertexArrayLength(mat)):
|
||||
vertex = mesh.getVertex(mat, v_index)
|
||||
# Do something with vertex here...
|
||||
# ... eg: colour the vertex red.
|
||||
vertex.colour = [1.0, 0.0, 0.0, 1.0]
|
||||
m_i += 1
|
||||
mesh = obj.getMesh(m_i)
|
||||
|
||||
.. attribute:: materials
|
||||
|
||||
@ -2401,135 +2397,53 @@ Game Types (bge.types)
|
||||
|
||||
Some of the methods/variables are CObjects. If you mix these up, you will crash blender.
|
||||
|
||||
This example requires `PyOpenGL <http://pyopengl.sourceforge.net>`_ and `GLEWPy <http://glewpy.sourceforge.net>`_
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
import GameLogic
|
||||
import OpenGL
|
||||
from OpenGL.GL import *
|
||||
from OpenGL.GLU import *
|
||||
import glew
|
||||
from glew import *
|
||||
|
||||
glewInit()
|
||||
from bge import logic
|
||||
|
||||
vertex_shader = """
|
||||
|
||||
void main(void)
|
||||
{
|
||||
// original vertex position, no changes
|
||||
gl_Position = ftransform();
|
||||
// coordinate of the 1st texture channel
|
||||
gl_TexCoord[0] = gl_MultiTexCoord0;
|
||||
// coordinate of the 2nd texture channel
|
||||
gl_TexCoord[1] = gl_MultiTexCoord1;
|
||||
}
|
||||
"""
|
||||
|
||||
fragment_shader ="""
|
||||
|
||||
uniform sampler2D color_0;
|
||||
uniform sampler2D color_1;
|
||||
uniform float factor;
|
||||
|
||||
void main(void)
|
||||
{
|
||||
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
|
||||
vec4 color_0 = texture2D(color_0, gl_TexCoord[0].st);
|
||||
vec4 color_1 = texture2D(color_1, gl_TexCoord[1].st);
|
||||
gl_FragColor = mix(color_0, color_1, factor);
|
||||
}
|
||||
"""
|
||||
|
||||
class MyMaterial:
|
||||
def __init__(self):
|
||||
self.pass_no = 0
|
||||
# Create a shader
|
||||
self.m_program = glCreateProgramObjectARB()
|
||||
# Compile the vertex shader
|
||||
self.shader(GL_VERTEX_SHADER_ARB, (vertex_shader))
|
||||
# Compile the fragment shader
|
||||
self.shader(GL_FRAGMENT_SHADER_ARB, (fragment_shader))
|
||||
# Link the shaders together
|
||||
self.link()
|
||||
object = logic.getCurrentController().owner
|
||||
object = cont.owner
|
||||
for mesh in object.meshes:
|
||||
for material in mesh.materials:
|
||||
shader = material.getShader()
|
||||
if shader != None:
|
||||
if not shader.isValid():
|
||||
shader.setSource(vertex_shader, fragment_shader, True)
|
||||
|
||||
def PrintInfoLog(self, tag, object):
|
||||
"""
|
||||
PrintInfoLog prints the GLSL compiler log
|
||||
"""
|
||||
print "Tag: def PrintGLError(self, tag = ""):
|
||||
# get the first texture channel of the material
|
||||
shader.setSampler('color_0', 0)
|
||||
# get the second texture channel of the material
|
||||
shader.setSampler('color_1', 1)
|
||||
# pass another uniform to the shader
|
||||
shader.setUniform1f('factor', 0.3)
|
||||
|
||||
def PrintGLError(self, tag = ""):
|
||||
"""
|
||||
Prints the current GL error status
|
||||
"""
|
||||
if len(tag):
|
||||
print tag
|
||||
err = glGetError()
|
||||
if err != GL_NO_ERROR:
|
||||
print "GL Error: %s\\n"%(gluErrorString(err))
|
||||
|
||||
def shader(self, type, shaders):
|
||||
"""
|
||||
shader compiles a GLSL shader and attaches it to the current
|
||||
program.
|
||||
|
||||
type should be either GL_VERTEX_SHADER_ARB or GL_FRAGMENT_SHADER_ARB
|
||||
shaders should be a sequence of shader source to compile.
|
||||
"""
|
||||
# Create a shader object
|
||||
shader_object = glCreateShaderObjectARB(type)
|
||||
|
||||
# Add the source code
|
||||
glShaderSourceARB(shader_object, len(shaders), shaders)
|
||||
|
||||
# Compile the shader
|
||||
glCompileShaderARB(shader_object)
|
||||
|
||||
# Print the compiler log
|
||||
self.PrintInfoLog("vertex shader", shader_object)
|
||||
|
||||
# Check if compiled, and attach if it did
|
||||
compiled = glGetObjectParameterivARB(shader_object, GL_OBJECT_COMPILE_STATUS_ARB)
|
||||
if compiled:
|
||||
glAttachObjectARB(self.m_program, shader_object)
|
||||
|
||||
# Delete the object (glAttachObjectARB makes a copy)
|
||||
glDeleteObjectARB(shader_object)
|
||||
|
||||
# print the gl error log
|
||||
self.PrintGLError()
|
||||
|
||||
def link(self):
|
||||
"""
|
||||
Links the shaders together.
|
||||
"""
|
||||
# clear error indicator
|
||||
glGetError()
|
||||
|
||||
glLinkProgramARB(self.m_program)
|
||||
|
||||
self.PrintInfoLog("link", self.m_program)
|
||||
|
||||
linked = glGetObjectParameterivARB(self.m_program, GL_OBJECT_LINK_STATUS_ARB)
|
||||
if not linked:
|
||||
print "Shader failed to link"
|
||||
return
|
||||
|
||||
glValidateProgramARB(self.m_program)
|
||||
valid = glGetObjectParameterivARB(self.m_program, GL_OBJECT_VALIDATE_STATUS_ARB)
|
||||
if not valid:
|
||||
print "Shader failed to validate"
|
||||
return
|
||||
|
||||
def activate(self, rasty, cachingInfo, mat):
|
||||
self.pass_no+=1
|
||||
if (self.pass_no == 1):
|
||||
glDisable(GL_COLOR_MATERIAL)
|
||||
glUseProgramObjectARB(self.m_program)
|
||||
return True
|
||||
|
||||
glEnable(GL_COLOR_MATERIAL)
|
||||
glUseProgramObjectARB(0)
|
||||
self.pass_no = 0
|
||||
return False
|
||||
|
||||
obj = GameLogic.getCurrentController().owner
|
||||
|
||||
mesh = obj.meshes[0]
|
||||
|
||||
for mat in mesh.materials:
|
||||
mat.setCustomMaterial(MyMaterial())
|
||||
print mat.texture
|
||||
|
||||
.. attribute:: texture
|
||||
|
||||
@ -2932,7 +2846,7 @@ Game Types (bge.types)
|
||||
# +----------+ +-----------+ +-------------------------------------+
|
||||
# | Always +-----+ Python +-----+ Edit Object (Replace Mesh) LOD.Mesh |
|
||||
# +----------+ +-----------+ +-------------------------------------+
|
||||
import GameLogic
|
||||
from bge import logic
|
||||
|
||||
# List detail meshes here
|
||||
# Mesh (name, near, far)
|
||||
@ -2942,16 +2856,16 @@ Game Types (bge.types)
|
||||
(".Lo", -40.0, -100.0)
|
||||
)
|
||||
|
||||
co = GameLogic.getCurrentController()
|
||||
obj = co.owner
|
||||
act = co.actuators["LOD." + obj.name]
|
||||
cam = GameLogic.getCurrentScene().active_camera
|
||||
cont = logic.getCurrentController()
|
||||
object = cont.owner
|
||||
actuator = cont.actuators["LOD." + obj.name]
|
||||
camera = logic.getCurrentScene().active_camera
|
||||
|
||||
def Depth(pos, plane):
|
||||
return pos[0]*plane[0] + pos[1]*plane[1] + pos[2]*plane[2] + plane[3]
|
||||
|
||||
# Depth is negative and decreasing further from the camera
|
||||
depth = Depth(obj.position, cam.world_to_camera[2])
|
||||
depth = Depth(object.position, camera.world_to_camera[2])
|
||||
|
||||
newmesh = None
|
||||
curmesh = None
|
||||
@ -2959,15 +2873,15 @@ Game Types (bge.types)
|
||||
for mesh in meshes:
|
||||
if depth < mesh[1] and depth > mesh[2]:
|
||||
newmesh = mesh
|
||||
if "ME" + obj.name + mesh[0] == act.getMesh():
|
||||
if "ME" + object.name + mesh[0] == actuator.getMesh():
|
||||
curmesh = mesh
|
||||
|
||||
if newmesh != None and "ME" + obj.name + newmesh[0] != act.getMesh():
|
||||
if newmesh != None and "ME" + object.name + newmesh[0] != actuator.mesh:
|
||||
# The mesh is a different mesh - switch it.
|
||||
# Check the current mesh is not a better fit.
|
||||
if curmesh == None or curmesh[1] < depth or curmesh[2] > depth:
|
||||
act.mesh = obj.getName() + newmesh[0]
|
||||
GameLogic.addActiveActuator(act, True)
|
||||
actuator.mesh = object.name + newmesh[0]
|
||||
cont.activate(actuator)
|
||||
|
||||
.. attribute:: mesh
|
||||
|
||||
@ -3003,31 +2917,31 @@ Game Types (bge.types)
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
import GameLogic
|
||||
from bge import logic
|
||||
|
||||
# get the scene
|
||||
scene = GameLogic.getCurrentScene()
|
||||
scene = logic.getCurrentScene()
|
||||
|
||||
# print all the objects in the scene
|
||||
for obj in scene.objects:
|
||||
print obj.name
|
||||
for object in scene.objects:
|
||||
print(object.name)
|
||||
|
||||
# get an object named 'Cube'
|
||||
obj = scene.objects["Cube"]
|
||||
object = scene.objects["Cube"]
|
||||
|
||||
# get the first object in the scene.
|
||||
obj = scene.objects[0]
|
||||
object = scene.objects[0]
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
# Get the depth of an object in the camera view.
|
||||
import GameLogic
|
||||
from bge import logic
|
||||
|
||||
obj = GameLogic.getCurrentController().owner
|
||||
cam = GameLogic.getCurrentScene().active_camera
|
||||
object = logic.getCurrentController().owner
|
||||
cam = logic.getCurrentScene().active_camera
|
||||
|
||||
# Depth is negative and decreasing further from the camera
|
||||
depth = obj.position[0]*cam.world_to_camera[2][0] + obj.position[1]*cam.world_to_camera[2][1] + obj.position[2]*cam.world_to_camera[2][2] + cam.world_to_camera[2][3]
|
||||
depth = object.position[0]*cam.world_to_camera[2][0] + object.position[1]*cam.world_to_camera[2][1] + object.position[2]*cam.world_to_camera[2][2] + cam.world_to_camera[2][3]
|
||||
|
||||
@bug: All attributes are read only at the moment.
|
||||
|
||||
@ -4361,9 +4275,9 @@ Game Types (bge.types)
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
import GameLogic
|
||||
co = GameLogic.getCurrentController()
|
||||
cam = co.owner
|
||||
from bge import logic
|
||||
cont = logic.getCurrentController()
|
||||
cam = cont.owner
|
||||
|
||||
# A sphere of radius 4.0 located at [x, y, z] = [1.0, 1.0, 1.0]
|
||||
if (cam.sphereInsideFrustum([1.0, 1.0, 1.0], 4) != cam.OUTSIDE):
|
||||
@ -4386,9 +4300,9 @@ Game Types (bge.types)
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
import GameLogic
|
||||
co = GameLogic.getCurrentController()
|
||||
cam = co.owner
|
||||
from bge import logic
|
||||
cont = logic.getCurrentController()
|
||||
cam = cont.owner
|
||||
|
||||
# Box to test...
|
||||
box = []
|
||||
@ -4422,9 +4336,9 @@ Game Types (bge.types)
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
import GameLogic
|
||||
co = GameLogic.getCurrentController()
|
||||
cam = co.owner
|
||||
from bge import logic
|
||||
cont = logic.getCurrentController()
|
||||
cam = cont.owner
|
||||
|
||||
# Test point [0.0, 0.0, 0.0]
|
||||
if (cam.pointInsideFrustum([0.0, 0.0, 0.0])):
|
||||
|
@ -23,7 +23,6 @@ bl_info = {
|
||||
"author": "",
|
||||
"version": (0, 0),
|
||||
"blender": (2, 6, 0),
|
||||
"api": 41670,
|
||||
"location": "Info header, render engine menu",
|
||||
"description": "Cycles Render Engine integration.",
|
||||
"warning": "",
|
||||
|
@ -361,7 +361,6 @@ def module_bl_info(mod, info_basis={"name": "",
|
||||
"author": "",
|
||||
"version": (),
|
||||
"blender": (),
|
||||
"api": 0,
|
||||
"location": "",
|
||||
"description": "",
|
||||
"wiki_url": "",
|
||||
|
@ -1,7 +1,7 @@
|
||||
import bpy
|
||||
is_ntsc = (bpy.context.scene.render.fps != 25)
|
||||
|
||||
bpy.context.scene.render.ffmpeg_format = "DV"
|
||||
bpy.context.scene.render.ffmpeg.format = "DV"
|
||||
bpy.context.scene.render.resolution_x = 720
|
||||
|
||||
if is_ntsc:
|
||||
@ -9,6 +9,6 @@ if is_ntsc:
|
||||
else:
|
||||
bpy.context.scene.render.resolution_y = 576
|
||||
|
||||
bpy.context.scene.render.ffmpeg_audio_mixrate = 48000
|
||||
bpy.context.scene.render.ffmpeg_audio_codec = "PCM"
|
||||
bpy.context.scene.render.ffmpeg_audio_channels = "STEREO"
|
||||
bpy.context.scene.render.ffmpeg.audio_mixrate = 48000
|
||||
bpy.context.scene.render.ffmpeg.audio_codec = "PCM"
|
||||
bpy.context.scene.render.ffmpeg.audio_channels = "STEREO"
|
||||
|
@ -1,24 +1,24 @@
|
||||
import bpy
|
||||
is_ntsc = (bpy.context.scene.render.fps != 25)
|
||||
|
||||
bpy.context.scene.render.ffmpeg_format = "MPEG2"
|
||||
bpy.context.scene.render.ffmpeg.format = "MPEG2"
|
||||
bpy.context.scene.render.resolution_x = 720
|
||||
|
||||
if is_ntsc:
|
||||
bpy.context.scene.render.resolution_y = 480
|
||||
bpy.context.scene.render.ffmpeg_gopsize = 18
|
||||
bpy.context.scene.render.ffmpeg.gopsize = 18
|
||||
else:
|
||||
bpy.context.scene.render.resolution_y = 576
|
||||
bpy.context.scene.render.ffmpeg_gopsize = 15
|
||||
bpy.context.scene.render.ffmpeg.gopsize = 15
|
||||
|
||||
bpy.context.scene.render.ffmpeg_video_bitrate = 6000
|
||||
bpy.context.scene.render.ffmpeg_maxrate = 9000
|
||||
bpy.context.scene.render.ffmpeg_minrate = 0
|
||||
bpy.context.scene.render.ffmpeg_buffersize = 224 * 8
|
||||
bpy.context.scene.render.ffmpeg_packetsize = 2048
|
||||
bpy.context.scene.render.ffmpeg_muxrate = 10080000
|
||||
bpy.context.scene.render.ffmpeg.video_bitrate = 6000
|
||||
bpy.context.scene.render.ffmpeg.maxrate = 9000
|
||||
bpy.context.scene.render.ffmpeg.minrate = 0
|
||||
bpy.context.scene.render.ffmpeg.buffersize = 224 * 8
|
||||
bpy.context.scene.render.ffmpeg.packetsize = 2048
|
||||
bpy.context.scene.render.ffmpeg.muxrate = 10080000
|
||||
|
||||
bpy.context.scene.render.ffmpeg_audio_codec = "AC3"
|
||||
bpy.context.scene.render.ffmpeg_audio_bitrate = 448
|
||||
bpy.context.scene.render.ffmpeg_audio_mixrate = 48000
|
||||
bpy.context.scene.render.ffmpeg_audio_channels = "SURROUND51"
|
||||
bpy.context.scene.render.ffmpeg.audio_codec = "AC3"
|
||||
bpy.context.scene.render.ffmpeg.audio_bitrate = 448
|
||||
bpy.context.scene.render.ffmpeg.audio_mixrate = 48000
|
||||
bpy.context.scene.render.ffmpeg.audio_channels = "SURROUND51"
|
||||
|
@ -1,24 +1,24 @@
|
||||
import bpy
|
||||
is_ntsc = (bpy.context.scene.render.fps != 25)
|
||||
|
||||
bpy.context.scene.render.ffmpeg_format = "MPEG2"
|
||||
bpy.context.scene.render.ffmpeg.format = "MPEG2"
|
||||
bpy.context.scene.render.resolution_x = 480
|
||||
|
||||
if is_ntsc:
|
||||
bpy.context.scene.render.resolution_y = 480
|
||||
bpy.context.scene.render.ffmpeg_gopsize = 18
|
||||
bpy.context.scene.render.ffmpeg.gopsize = 18
|
||||
else:
|
||||
bpy.context.scene.render.resolution_y = 576
|
||||
bpy.context.scene.render.ffmpeg_gopsize = 15
|
||||
bpy.context.scene.render.ffmpeg.gopsize = 15
|
||||
|
||||
bpy.context.scene.render.ffmpeg_video_bitrate = 2040
|
||||
bpy.context.scene.render.ffmpeg_maxrate = 2516
|
||||
bpy.context.scene.render.ffmpeg_minrate = 0
|
||||
bpy.context.scene.render.ffmpeg_buffersize = 224 * 8
|
||||
bpy.context.scene.render.ffmpeg_packetsize = 2324
|
||||
bpy.context.scene.render.ffmpeg_muxrate = 0
|
||||
bpy.context.scene.render.ffmpeg.video_bitrate = 2040
|
||||
bpy.context.scene.render.ffmpeg.maxrate = 2516
|
||||
bpy.context.scene.render.ffmpeg.minrate = 0
|
||||
bpy.context.scene.render.ffmpeg.buffersize = 224 * 8
|
||||
bpy.context.scene.render.ffmpeg.packetsize = 2324
|
||||
bpy.context.scene.render.ffmpeg.muxrate = 0
|
||||
|
||||
bpy.context.scene.render.ffmpeg_audio_bitrate = 224
|
||||
bpy.context.scene.render.ffmpeg_audio_mixrate = 44100
|
||||
bpy.context.scene.render.ffmpeg_audio_codec = "MP2"
|
||||
bpy.context.scene.render.ffmpeg_audio_channels = "STEREO"
|
||||
bpy.context.scene.render.ffmpeg.audio_bitrate = 224
|
||||
bpy.context.scene.render.ffmpeg.audio_mixrate = 44100
|
||||
bpy.context.scene.render.ffmpeg.audio_codec = "MP2"
|
||||
bpy.context.scene.render.ffmpeg.audio_channels = "STEREO"
|
||||
|
@ -1,24 +1,24 @@
|
||||
import bpy
|
||||
is_ntsc = (bpy.context.scene.render.fps != 25)
|
||||
|
||||
bpy.context.scene.render.ffmpeg_format = "MPEG1"
|
||||
bpy.context.scene.render.ffmpeg.format = "MPEG1"
|
||||
bpy.context.scene.render.resolution_x = 352
|
||||
|
||||
if is_ntsc:
|
||||
bpy.context.scene.render.resolution_y = 240
|
||||
bpy.context.scene.render.ffmpeg_gopsize = 18
|
||||
bpy.context.scene.render.ffmpeg.gopsize = 18
|
||||
else:
|
||||
bpy.context.scene.render.resolution_y = 288
|
||||
bpy.context.scene.render.ffmpeg_gopsize = 15
|
||||
bpy.context.scene.render.ffmpeg.gopsize = 15
|
||||
|
||||
bpy.context.scene.render.ffmpeg_video_bitrate = 1150
|
||||
bpy.context.scene.render.ffmpeg_maxrate = 1150
|
||||
bpy.context.scene.render.ffmpeg_minrate = 1150
|
||||
bpy.context.scene.render.ffmpeg_buffersize = 40 * 8
|
||||
bpy.context.scene.render.ffmpeg_packetsize = 2324
|
||||
bpy.context.scene.render.ffmpeg_muxrate = 2352 * 75 * 8
|
||||
bpy.context.scene.render.ffmpeg.video_bitrate = 1150
|
||||
bpy.context.scene.render.ffmpeg.maxrate = 1150
|
||||
bpy.context.scene.render.ffmpeg.minrate = 1150
|
||||
bpy.context.scene.render.ffmpeg.buffersize = 40 * 8
|
||||
bpy.context.scene.render.ffmpeg.packetsize = 2324
|
||||
bpy.context.scene.render.ffmpeg.muxrate = 2352 * 75 * 8
|
||||
|
||||
bpy.context.scene.render.ffmpeg_audio_bitrate = 224
|
||||
bpy.context.scene.render.ffmpeg_audio_mixrate = 44100
|
||||
bpy.context.scene.render.ffmpeg_audio_codec = "MP2"
|
||||
bpy.context.scene.render.ffmpeg_audio_channels = "STEREO"
|
||||
bpy.context.scene.render.ffmpeg.audio_bitrate = 224
|
||||
bpy.context.scene.render.ffmpeg.audio_mixrate = 44100
|
||||
bpy.context.scene.render.ffmpeg.audio_codec = "MP2"
|
||||
bpy.context.scene.render.ffmpeg.audio_channels = "STEREO"
|
||||
|
@ -1,17 +1,17 @@
|
||||
import bpy
|
||||
is_ntsc = (bpy.context.scene.render.fps != 25)
|
||||
|
||||
bpy.context.scene.render.ffmpeg_format = "H264"
|
||||
bpy.context.scene.render.ffmpeg_codec = "H264"
|
||||
bpy.context.scene.render.ffmpeg.format = "H264"
|
||||
bpy.context.scene.render.ffmpeg.codec = "H264"
|
||||
|
||||
if is_ntsc:
|
||||
bpy.context.scene.render.ffmpeg_gopsize = 18
|
||||
bpy.context.scene.render.ffmpeg.gopsize = 18
|
||||
else:
|
||||
bpy.context.scene.render.ffmpeg_gopsize = 15
|
||||
bpy.context.scene.render.ffmpeg.gopsize = 15
|
||||
|
||||
bpy.context.scene.render.ffmpeg_video_bitrate = 6000
|
||||
bpy.context.scene.render.ffmpeg_maxrate = 9000
|
||||
bpy.context.scene.render.ffmpeg_minrate = 0
|
||||
bpy.context.scene.render.ffmpeg_buffersize = 224 * 8
|
||||
bpy.context.scene.render.ffmpeg_packetsize = 2048
|
||||
bpy.context.scene.render.ffmpeg_muxrate = 10080000
|
||||
bpy.context.scene.render.ffmpeg.video_bitrate = 6000
|
||||
bpy.context.scene.render.ffmpeg.maxrate = 9000
|
||||
bpy.context.scene.render.ffmpeg.minrate = 0
|
||||
bpy.context.scene.render.ffmpeg.buffersize = 224 * 8
|
||||
bpy.context.scene.render.ffmpeg.packetsize = 2048
|
||||
bpy.context.scene.render.ffmpeg.muxrate = 10080000
|
||||
|
@ -1,17 +1,17 @@
|
||||
import bpy
|
||||
is_ntsc = (bpy.context.scene.render.fps != 25)
|
||||
|
||||
bpy.context.scene.render.ffmpeg_format = "OGG"
|
||||
bpy.context.scene.render.ffmpeg_codec = "THEORA"
|
||||
bpy.context.scene.render.ffmpeg.format = "OGG"
|
||||
bpy.context.scene.render.ffmpeg.codec = "THEORA"
|
||||
|
||||
if is_ntsc:
|
||||
bpy.context.scene.render.ffmpeg_gopsize = 18
|
||||
bpy.context.scene.render.ffmpeg.gopsize = 18
|
||||
else:
|
||||
bpy.context.scene.render.ffmpeg_gopsize = 15
|
||||
bpy.context.scene.render.ffmpeg.gopsize = 15
|
||||
|
||||
bpy.context.scene.render.ffmpeg_video_bitrate = 6000
|
||||
bpy.context.scene.render.ffmpeg_maxrate = 9000
|
||||
bpy.context.scene.render.ffmpeg_minrate = 0
|
||||
bpy.context.scene.render.ffmpeg_buffersize = 224 * 8
|
||||
bpy.context.scene.render.ffmpeg_packetsize = 2048
|
||||
bpy.context.scene.render.ffmpeg_muxrate = 10080000
|
||||
bpy.context.scene.render.ffmpeg.video_bitrate = 6000
|
||||
bpy.context.scene.render.ffmpeg.maxrate = 9000
|
||||
bpy.context.scene.render.ffmpeg.minrate = 0
|
||||
bpy.context.scene.render.ffmpeg.buffersize = 224 * 8
|
||||
bpy.context.scene.render.ffmpeg.packetsize = 2048
|
||||
bpy.context.scene.render.ffmpeg.muxrate = 10080000
|
||||
|
@ -1,16 +1,16 @@
|
||||
import bpy
|
||||
is_ntsc = (bpy.context.scene.render.fps != 25)
|
||||
|
||||
bpy.context.scene.render.ffmpeg_format = "XVID"
|
||||
bpy.context.scene.render.ffmpeg.format = "XVID"
|
||||
|
||||
if is_ntsc:
|
||||
bpy.context.scene.render.ffmpeg_gopsize = 18
|
||||
bpy.context.scene.render.ffmpeg.gopsize = 18
|
||||
else:
|
||||
bpy.context.scene.render.ffmpeg_gopsize = 15
|
||||
bpy.context.scene.render.ffmpeg.gopsize = 15
|
||||
|
||||
bpy.context.scene.render.ffmpeg_video_bitrate = 6000
|
||||
bpy.context.scene.render.ffmpeg_maxrate = 9000
|
||||
bpy.context.scene.render.ffmpeg_minrate = 0
|
||||
bpy.context.scene.render.ffmpeg_buffersize = 224 * 8
|
||||
bpy.context.scene.render.ffmpeg_packetsize = 2048
|
||||
bpy.context.scene.render.ffmpeg_muxrate = 10080000
|
||||
bpy.context.scene.render.ffmpeg.video_bitrate = 6000
|
||||
bpy.context.scene.render.ffmpeg.maxrate = 9000
|
||||
bpy.context.scene.render.ffmpeg.minrate = 0
|
||||
bpy.context.scene.render.ffmpeg.buffersize = 224 * 8
|
||||
bpy.context.scene.render.ffmpeg.packetsize = 2048
|
||||
bpy.context.scene.render.ffmpeg.muxrate = 10080000
|
||||
|
@ -219,7 +219,7 @@ kmi.properties.value_1 = 'DISABLED'
|
||||
kmi.properties.value_2 = 'ENABLED'
|
||||
kmi = km.keymap_items.new('view3d.game_start', 'P', 'PRESS')
|
||||
kmi = km.keymap_items.new('object.select_all', 'A', 'PRESS')
|
||||
kmi = km.keymap_items.new('object.select_inverse', 'I', 'PRESS', ctrl=True)
|
||||
kmi = km.keymap_items.new('object.select_all', 'I', 'PRESS', ctrl=True).action = 'INVERT'
|
||||
kmi = km.keymap_items.new('object.select_linked', 'L', 'PRESS', shift=True)
|
||||
kmi = km.keymap_items.new('object.select_grouped', 'G', 'PRESS', shift=True)
|
||||
kmi = km.keymap_items.new('object.select_mirror', 'M', 'PRESS', shift=True, ctrl=True)
|
||||
@ -304,7 +304,8 @@ kmi = km.keymap_items.new('mesh.select_shortest_path', 'SELECTMOUSE', 'PRESS', c
|
||||
kmi = km.keymap_items.new('mesh.select_all', 'A', 'PRESS')
|
||||
kmi = km.keymap_items.new('mesh.select_more', 'NUMPAD_PLUS', 'PRESS', ctrl=True)
|
||||
kmi = km.keymap_items.new('mesh.select_less', 'NUMPAD_MINUS', 'PRESS', ctrl=True)
|
||||
kmi = km.keymap_items.new('mesh.select_inverse', 'I', 'PRESS', ctrl=True)
|
||||
kmi = km.keymap_items.new('mesh.select_all', 'I', 'PRESS', ctrl=True)
|
||||
kmi.properties.action = 'INVERT'
|
||||
kmi = km.keymap_items.new('mesh.select_non_manifold', 'M', 'PRESS', shift=True, ctrl=True, alt=True)
|
||||
kmi = km.keymap_items.new('mesh.select_linked', 'L', 'PRESS', ctrl=True)
|
||||
kmi = km.keymap_items.new('mesh.select_linked_pick', 'L', 'PRESS')
|
||||
|
@ -1178,7 +1178,7 @@ class WM_OT_copy_prev_settings(Operator):
|
||||
return {'CANCELLED'}
|
||||
|
||||
|
||||
class WM_OT_blenderplayer_start(bpy.types.Operator):
|
||||
class WM_OT_blenderplayer_start(Operator):
|
||||
'''Launch the Blenderplayer with the current blendfile'''
|
||||
bl_idname = "wm.blenderplayer_start"
|
||||
bl_label = "Start"
|
||||
|
@ -597,11 +597,10 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
|
||||
layout.prop(md, "use_keep_above_surface")
|
||||
|
||||
def SIMPLE_DEFORM(self, layout, ob, md):
|
||||
split = layout.split()
|
||||
|
||||
col = split.column()
|
||||
col.label(text="Mode:")
|
||||
col.prop(md, "deform_method", text="")
|
||||
layout.row().prop(md, "deform_method", expand=True)
|
||||
|
||||
split = layout.split()
|
||||
|
||||
col = split.column()
|
||||
col.label(text="Vertex Group:")
|
||||
@ -620,7 +619,7 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
|
||||
col.label(text="Deform:")
|
||||
col.prop(md, "factor")
|
||||
col.prop(md, "limits", slider=True)
|
||||
if md.deform_method in {'TAPER', 'STRETCH'}:
|
||||
if md.deform_method in {'TAPER', 'STRETCH', 'TWIST'}:
|
||||
col.prop(md, "lock_x")
|
||||
col.prop(md, "lock_y")
|
||||
|
||||
|
@ -56,6 +56,7 @@ class PHYSICS_PT_fluid(PhysicButtonsPanel, Panel):
|
||||
layout.active = fluid.use
|
||||
|
||||
if fluid.type == 'DOMAIN':
|
||||
# odd formatting here so translation script can extract string
|
||||
layout.operator("fluid.bake", text="Bake (Req. Memory:" + " %s)" % fluid.memory_estimate, icon='MOD_FLUIDSIM')
|
||||
split = layout.split()
|
||||
|
||||
|
@ -472,33 +472,35 @@ class RENDER_PT_output(RenderButtonsPanel, Panel):
|
||||
layout.operator("scene.render_data_set_quicktime_codec")
|
||||
|
||||
elif file_format == 'QUICKTIME_QTKIT':
|
||||
quicktime = rd.quicktime
|
||||
|
||||
split = layout.split()
|
||||
col = split.column()
|
||||
col.prop(rd, "quicktime_codec_type", text="Video Codec")
|
||||
col.prop(rd, "quicktime_codec_spatial_quality", text="Quality")
|
||||
col.prop(quicktime, "codec_type", text="Video Codec")
|
||||
col.prop(quicktime, "codec_spatial_quality", text="Quality")
|
||||
|
||||
# Audio
|
||||
col.prop(rd, "quicktime_audiocodec_type", text="Audio Codec")
|
||||
if rd.quicktime_audiocodec_type != 'No audio':
|
||||
col.prop(quicktime, "audiocodec_type", text="Audio Codec")
|
||||
if quicktime.audiocodec_type != 'No audio':
|
||||
split = layout.split()
|
||||
if rd.quicktime_audiocodec_type == 'LPCM':
|
||||
split.prop(rd, "quicktime_audio_bitdepth", text="")
|
||||
if quicktime.audiocodec_type == 'LPCM':
|
||||
split.prop(quicktime, "audio_bitdepth", text="")
|
||||
|
||||
split.prop(rd, "quicktime_audio_samplerate", text="")
|
||||
split.prop(quicktime, "audio_samplerate", text="")
|
||||
|
||||
split = layout.split()
|
||||
col = split.column()
|
||||
if rd.quicktime_audiocodec_type == 'AAC':
|
||||
col.prop(rd, "quicktime_audio_bitrate")
|
||||
if quicktime.audiocodec_type == 'AAC':
|
||||
col.prop(quicktime, "audio_bitrate")
|
||||
|
||||
subsplit = split.split()
|
||||
col = subsplit.column()
|
||||
|
||||
if rd.quicktime_audiocodec_type == 'AAC':
|
||||
col.prop(rd, "quicktime_audio_codec_isvbr")
|
||||
if rquicktime.audiocodec_type == 'AAC':
|
||||
col.prop(quicktime, "audio_codec_isvbr")
|
||||
|
||||
col = subsplit.column()
|
||||
col.prop(rd, "quicktime_audio_resampling_hq")
|
||||
col.prop(quicktime, "audio_resampling_hq")
|
||||
|
||||
|
||||
class RENDER_PT_encoding(RenderButtonsPanel, Panel):
|
||||
@ -515,43 +517,46 @@ class RENDER_PT_encoding(RenderButtonsPanel, Panel):
|
||||
layout = self.layout
|
||||
|
||||
rd = context.scene.render
|
||||
ffmpeg = rd.ffmpeg
|
||||
|
||||
layout.menu("RENDER_MT_ffmpeg_presets", text="Presets")
|
||||
|
||||
split = layout.split()
|
||||
split.prop(rd, "ffmpeg_format")
|
||||
if rd.ffmpeg_format in {'AVI', 'QUICKTIME', 'MKV', 'OGG'}:
|
||||
split.prop(rd, "ffmpeg_codec")
|
||||
split.prop(rd.ffmpeg, "format")
|
||||
if ffmpeg.format in {'AVI', 'QUICKTIME', 'MKV', 'OGG'}:
|
||||
split.prop(ffmpeg, "codec")
|
||||
elif rd.ffmpeg.format == 'H264':
|
||||
split.prop(ffmpeg, 'use_lossless_output')
|
||||
else:
|
||||
split.label()
|
||||
|
||||
row = layout.row()
|
||||
row.prop(rd, "ffmpeg_video_bitrate")
|
||||
row.prop(rd, "ffmpeg_gopsize")
|
||||
row.prop(ffmpeg, "video_bitrate")
|
||||
row.prop(ffmpeg, "gopsize")
|
||||
|
||||
split = layout.split()
|
||||
|
||||
col = split.column()
|
||||
col.label(text="Rate:")
|
||||
col.prop(rd, "ffmpeg_minrate", text="Minimum")
|
||||
col.prop(rd, "ffmpeg_maxrate", text="Maximum")
|
||||
col.prop(rd, "ffmpeg_buffersize", text="Buffer")
|
||||
col.prop(ffmpeg, "minrate", text="Minimum")
|
||||
col.prop(ffmpeg, "maxrate", text="Maximum")
|
||||
col.prop(ffmpeg, "buffersize", text="Buffer")
|
||||
|
||||
col = split.column()
|
||||
col.prop(rd, "ffmpeg_autosplit")
|
||||
col.prop(ffmpeg, "use_autosplit")
|
||||
col.label(text="Mux:")
|
||||
col.prop(rd, "ffmpeg_muxrate", text="Rate")
|
||||
col.prop(rd, "ffmpeg_packetsize", text="Packet Size")
|
||||
col.prop(ffmpeg, "muxrate", text="Rate")
|
||||
col.prop(ffmpeg, "packetsize", text="Packet Size")
|
||||
|
||||
layout.separator()
|
||||
|
||||
# Audio:
|
||||
if rd.ffmpeg_format not in {'MP3'}:
|
||||
layout.prop(rd, "ffmpeg_audio_codec", text="Audio Codec")
|
||||
if ffmpeg.format != 'MP3':
|
||||
layout.prop(ffmpeg, "audio_codec", text="Audio Codec")
|
||||
|
||||
row = layout.row()
|
||||
row.prop(rd, "ffmpeg_audio_bitrate")
|
||||
row.prop(rd, "ffmpeg_audio_volume", slider=True)
|
||||
row.prop(ffmpeg, "audio_bitrate")
|
||||
row.prop(ffmpeg, "audio_volume", slider=True)
|
||||
|
||||
|
||||
class RENDER_PT_bake(RenderButtonsPanel, Panel):
|
||||
|
@ -54,6 +54,7 @@ class SCENE_PT_audio(SceneButtonsPanel, Panel):
|
||||
layout = self.layout
|
||||
scene = context.scene
|
||||
rd = context.scene.render
|
||||
ffmpeg = rd.ffmpeg
|
||||
|
||||
layout.prop(scene, "audio_volume")
|
||||
layout.operator("sound.bake_animation")
|
||||
@ -68,8 +69,8 @@ class SCENE_PT_audio(SceneButtonsPanel, Panel):
|
||||
|
||||
col = split.column()
|
||||
col.label("Format:")
|
||||
col.prop(rd, "ffmpeg_audio_channels", text="")
|
||||
col.prop(rd, "ffmpeg_audio_mixrate", text="Rate")
|
||||
col.prop(ffmpeg, "audio_channels", text="")
|
||||
col.prop(ffmpeg, "audio_mixrate", text="Rate")
|
||||
|
||||
layout.operator("sound.mixdown")
|
||||
|
||||
|
@ -166,25 +166,19 @@ class CLIP_PT_tools_tracking(Panel):
|
||||
|
||||
row = layout.row(align=True)
|
||||
|
||||
props = row.operator("clip.track_markers", text="", icon='FRAME_PREV')
|
||||
props.backwards = True
|
||||
row.operator("clip.track_markers", text="", icon='FRAME_PREV').backwards = True
|
||||
props = row.operator("clip.track_markers", text="",
|
||||
icon='PLAY_REVERSE')
|
||||
icon='PLAY_REVERSE')
|
||||
props.backwards = True
|
||||
props.sequence = True
|
||||
props = row.operator("clip.track_markers", text="", icon='PLAY')
|
||||
props.sequence = True
|
||||
row.operator("clip.track_markers", text="", icon='PLAY').sequence = True
|
||||
row.operator("clip.track_markers", text="", icon='FRAME_NEXT')
|
||||
|
||||
col = layout.column(align=True)
|
||||
props = col.operator("clip.clear_track_path", text="Clear After")
|
||||
props.action = 'REMAINED'
|
||||
col.operator("clip.clear_track_path", text="Clear After").action = 'REMAINED'
|
||||
|
||||
props = col.operator("clip.clear_track_path", text="Clear Before")
|
||||
props.action = 'UPTO'
|
||||
|
||||
props = col.operator("clip.clear_track_path", text="Clear")
|
||||
props.action = 'ALL'
|
||||
col.operator("clip.clear_track_path", text="Clear Before").action = 'UPTO'
|
||||
col.operator("clip.clear_track_path", text="Clear").action = 'ALL'
|
||||
|
||||
layout.operator("clip.join_tracks", text="Join")
|
||||
|
||||
@ -484,8 +478,7 @@ class CLIP_PT_tracking_camera(Panel):
|
||||
label = bpy.types.CLIP_MT_camera_presets.bl_label
|
||||
row.menu('CLIP_MT_camera_presets', text=label)
|
||||
row.operator("clip.camera_preset_add", text="", icon='ZOOMIN')
|
||||
props = row.operator("clip.camera_preset_add", text="", icon='ZOOMOUT')
|
||||
props.remove_active = True
|
||||
row.operator("clip.camera_preset_add", text="", icon='ZOOMOUT').remove_active = True
|
||||
|
||||
row = layout.row(align=True)
|
||||
sub = row.split(percentage=0.65)
|
||||
@ -938,7 +931,7 @@ class CLIP_MT_select(Menu):
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.operator("clip.select_all", text="Select/Deselect all")
|
||||
layout.operator("clip.select_all", text="Select/Deselect all").action = 'TOGGLE'
|
||||
layout.operator("clip.select_all", text="Inverse").action = 'INVERT'
|
||||
|
||||
layout.menu("CLIP_MT_select_grouped")
|
||||
@ -963,11 +956,8 @@ class CLIP_MT_tracking_specials(Menu):
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
|
||||
props = layout.operator("clip.disable_markers", text="Enable Markers")
|
||||
props.action = 'ENABLE'
|
||||
|
||||
props = layout.operator("clip.disable_markers", text="Disable markers")
|
||||
props.action = 'DISABLE'
|
||||
layout.operator("clip.disable_markers", text="Enable Markers").action = 'ENABLE'
|
||||
layout.operator("clip.disable_markers", text="Disable markers").action = 'DISABLE'
|
||||
|
||||
layout.separator()
|
||||
layout.operator("clip.set_origin")
|
||||
|
@ -152,10 +152,7 @@ class DOPESHEET_MT_view(Menu):
|
||||
layout.prop(st, "use_auto_merge_keyframes")
|
||||
layout.prop(st, "use_marker_sync")
|
||||
|
||||
if st.show_seconds:
|
||||
layout.operator("anim.time_toggle", text="Show Frames")
|
||||
else:
|
||||
layout.operator("anim.time_toggle", text="Show Seconds")
|
||||
layout.prop(st, "show_seconds")
|
||||
|
||||
layout.separator()
|
||||
layout.operator("anim.previewrange_set")
|
||||
@ -179,11 +176,11 @@ class DOPESHEET_MT_select(Menu):
|
||||
layout = self.layout
|
||||
|
||||
# This is a bit misleading as the operator's default text is "Select All" while it actually *toggles* All/None
|
||||
layout.operator("action.select_all_toggle")
|
||||
layout.operator("action.select_all_toggle").invert = False
|
||||
layout.operator("action.select_all_toggle", text="Invert Selection").invert = True
|
||||
|
||||
layout.separator()
|
||||
layout.operator("action.select_border")
|
||||
layout.operator("action.select_border").axis_range = False
|
||||
layout.operator("action.select_border", text="Border Axis Range").axis_range = True
|
||||
|
||||
layout.separator()
|
||||
|
@ -81,13 +81,13 @@ class GRAPH_MT_view(Menu):
|
||||
layout.prop(st, "use_beauty_drawing")
|
||||
|
||||
layout.separator()
|
||||
if st.show_handles:
|
||||
layout.operator("graph.handles_view_toggle", icon='CHECKBOX_HLT', text="Show All Handles")
|
||||
else:
|
||||
layout.operator("graph.handles_view_toggle", icon='CHECKBOX_DEHLT', text="Show All Handles")
|
||||
|
||||
layout.prop(st, "show_handles")
|
||||
|
||||
layout.prop(st, "use_only_selected_curves_handles")
|
||||
layout.prop(st, "use_only_selected_keyframe_handles")
|
||||
layout.operator("anim.time_toggle")
|
||||
|
||||
layout.prop(st, "show_seconds")
|
||||
|
||||
layout.separator()
|
||||
layout.operator("anim.previewrange_set")
|
||||
@ -111,7 +111,7 @@ class GRAPH_MT_select(Menu):
|
||||
layout = self.layout
|
||||
|
||||
# This is a bit misleading as the operator's default text is "Select All" while it actually *toggles* All/None
|
||||
layout.operator("graph.select_all_toggle")
|
||||
layout.operator("graph.select_all_toggle").invert = False
|
||||
layout.operator("graph.select_all_toggle", text="Invert Selection").invert = True
|
||||
|
||||
layout.separator()
|
||||
|
@ -85,7 +85,7 @@ class IMAGE_MT_select(Menu):
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
|
||||
layout.operator("uv.select_border")
|
||||
layout.operator("uv.select_border").pinned = False
|
||||
layout.operator("uv.select_border").pinned = True
|
||||
|
||||
layout.separator()
|
||||
@ -184,7 +184,7 @@ class IMAGE_MT_uvs_showhide(Menu):
|
||||
layout = self.layout
|
||||
|
||||
layout.operator("uv.reveal")
|
||||
layout.operator("uv.hide", text="Hide Selected")
|
||||
layout.operator("uv.hide", text="Hide Selected").unselected = False
|
||||
layout.operator("uv.hide", text="Hide Unselected").unselected = True
|
||||
|
||||
|
||||
|
@ -275,7 +275,9 @@ class INFO_MT_add(Menu):
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
|
||||
layout.operator_context = 'EXEC_SCREEN'
|
||||
# note, dont use 'EXEC_SCREEN' or operators wont get the 'v3d' context.
|
||||
|
||||
layout.operator_context = 'EXEC_AREA'
|
||||
|
||||
#layout.operator_menu_enum("object.mesh_add", "type", text="Mesh", icon='OUTLINER_OB_MESH')
|
||||
layout.menu("INFO_MT_mesh_add", icon='OUTLINER_OB_MESH')
|
||||
@ -298,7 +300,7 @@ class INFO_MT_add(Menu):
|
||||
layout.separator()
|
||||
|
||||
layout.operator("object.camera_add", text="Camera", icon='OUTLINER_OB_CAMERA')
|
||||
layout.operator_context = 'EXEC_SCREEN'
|
||||
layout.operator_context = 'EXEC_AREA'
|
||||
layout.operator_menu_enum("object.lamp_add", "type", text="Lamp", icon='OUTLINER_OB_LAMP')
|
||||
layout.separator()
|
||||
|
||||
|
@ -62,7 +62,7 @@ class NLA_MT_view(Menu):
|
||||
layout.prop(st, "use_realtime_update")
|
||||
layout.prop(st, "show_frame_indicator")
|
||||
|
||||
layout.operator("anim.time_toggle", text="Show Frames" if st.show_seconds else "Show Seconds")
|
||||
layout.prop(st, "show_seconds")
|
||||
|
||||
layout.prop(st, "show_strip_curves")
|
||||
|
||||
@ -86,11 +86,11 @@ class NLA_MT_select(Menu):
|
||||
layout = self.layout
|
||||
|
||||
# This is a bit misleading as the operator's default text is "Select All" while it actually *toggles* All/None
|
||||
layout.operator("nla.select_all_toggle")
|
||||
layout.operator("nla.select_all_toggle").invert = False
|
||||
layout.operator("nla.select_all_toggle", text="Invert Selection").invert = True
|
||||
|
||||
layout.separator()
|
||||
layout.operator("nla.select_border")
|
||||
layout.operator("nla.select_border").axis_range = False
|
||||
layout.operator("nla.select_border", text="Border Axis Range").axis_range = True
|
||||
|
||||
layout.separator()
|
||||
@ -165,7 +165,7 @@ class NLA_MT_add(Menu):
|
||||
layout.operator("nla.meta_remove")
|
||||
|
||||
layout.separator()
|
||||
layout.operator("nla.tracks_add")
|
||||
layout.operator("nla.tracks_add").above_selected = False
|
||||
layout.operator("nla.tracks_add", text="Add Tracks Above Selected").above_selected = True
|
||||
|
||||
|
||||
|
@ -114,10 +114,7 @@ class SEQUENCER_MT_view(Menu):
|
||||
|
||||
layout.operator("sequencer.view_selected")
|
||||
|
||||
if st.show_frames:
|
||||
layout.operator("anim.time_toggle", text="Show Seconds")
|
||||
else:
|
||||
layout.operator("anim.time_toggle", text="Show Frames")
|
||||
layout.prop(st, "show_seconds")
|
||||
|
||||
layout.prop(st, "show_frame_indicator")
|
||||
if st.display_mode == 'IMAGE':
|
||||
@ -148,8 +145,8 @@ class SEQUENCER_MT_select(Menu):
|
||||
layout.separator()
|
||||
layout.operator_menu_enum("object.select_grouped", "type", text="Grouped")
|
||||
layout.operator("sequencer.select_linked")
|
||||
layout.operator("sequencer.select_all_toggle")
|
||||
layout.operator("sequencer.select_inverse")
|
||||
layout.operator("sequencer.select_all").action = 'TOGGLE'
|
||||
layout.operator("sequencer.select_all").action = 'INVERT'
|
||||
|
||||
|
||||
class SEQUENCER_MT_marker(Menu):
|
||||
@ -285,7 +282,7 @@ class SEQUENCER_MT_strip(Menu):
|
||||
layout.separator()
|
||||
layout.operator("sequencer.lock")
|
||||
layout.operator("sequencer.unlock")
|
||||
layout.operator("sequencer.mute")
|
||||
layout.operator("sequencer.mute").unselected = False
|
||||
layout.operator("sequencer.unmute")
|
||||
|
||||
layout.operator("sequencer.mute", text="Mute Deselected Strips").unselected = True
|
||||
@ -625,6 +622,7 @@ class SEQUENCER_PT_sound(SequencerButtonsPanel, Panel):
|
||||
layout = self.layout
|
||||
|
||||
strip = act_strip(context)
|
||||
sound = strip.sound
|
||||
|
||||
layout.template_ID(strip, "sound", open="sound.open")
|
||||
|
||||
@ -632,12 +630,12 @@ class SEQUENCER_PT_sound(SequencerButtonsPanel, Panel):
|
||||
layout.prop(strip, "filepath", text="")
|
||||
|
||||
row = layout.row()
|
||||
if strip.sound.packed_file:
|
||||
if sound.packed_file:
|
||||
row.operator("sound.unpack", icon='PACKAGE', text="Unpack")
|
||||
else:
|
||||
row.operator("sound.pack", icon='UGLYPACKAGE', text="Pack")
|
||||
|
||||
row.prop(strip.sound, "use_memory_cache")
|
||||
row.prop(sound, "use_memory_cache")
|
||||
|
||||
layout.prop(strip, "waveform")
|
||||
layout.prop(strip, "volume")
|
||||
|
@ -61,7 +61,7 @@ class TIME_HT_header(Header):
|
||||
# if using JACK and A/V sync:
|
||||
# hide the play-reversed button
|
||||
# since JACK transport doesn't support reversed playback
|
||||
if (context.user_preferences.system.audio_device == 'JACK' and scene.sync_mode == 'AUDIO_SYNC'):
|
||||
if scene.sync_mode == 'AUDIO_SYNC' and context.user_preferences.system.audio_device == 'JACK':
|
||||
sub = row.row()
|
||||
sub.scale_x = 2.0
|
||||
sub.operator("screen.animation_play", text="", icon='PLAY')
|
||||
@ -109,7 +109,7 @@ class TIME_MT_view(Menu):
|
||||
|
||||
st = context.space_data
|
||||
|
||||
layout.operator("anim.time_toggle")
|
||||
layout.prop(st, "show_seconds")
|
||||
layout.operator("time.view_all")
|
||||
|
||||
layout.separator()
|
||||
|
@ -507,32 +507,40 @@ class USERPREF_PT_theme(Panel):
|
||||
@staticmethod
|
||||
def _theme_generic(split, themedata):
|
||||
|
||||
row = split.row()
|
||||
col = split.column()
|
||||
|
||||
subsplit = row.split(percentage=0.95)
|
||||
def theme_generic_recurse(data):
|
||||
col.label(data.rna_type.name)
|
||||
row = col.row()
|
||||
subsplit = row.split(percentage=0.95)
|
||||
|
||||
padding1 = subsplit.split(percentage=0.15)
|
||||
padding1.column()
|
||||
padding1 = subsplit.split(percentage=0.15)
|
||||
padding1.column()
|
||||
|
||||
subsplit = row.split(percentage=0.85)
|
||||
subsplit = row.split(percentage=0.85)
|
||||
|
||||
padding2 = subsplit.split(percentage=0.15)
|
||||
padding2.column()
|
||||
padding2 = subsplit.split(percentage=0.15)
|
||||
padding2.column()
|
||||
|
||||
colsub_pair = padding1.column(), padding2.column()
|
||||
colsub_pair = padding1.column(), padding2.column()
|
||||
|
||||
props_type = {}
|
||||
props_type = {}
|
||||
|
||||
for i, prop in enumerate(themedata.rna_type.properties):
|
||||
attr = prop.identifier
|
||||
if attr == "rna_type":
|
||||
continue
|
||||
for i, prop in enumerate(data.rna_type.properties):
|
||||
if prop.identifier == "rna_type":
|
||||
continue
|
||||
|
||||
props_type.setdefault((prop.type, prop.subtype), []).append(prop.identifier)
|
||||
props_type.setdefault((prop.type, prop.subtype), []).append(prop)
|
||||
|
||||
for props_type, props_ls in sorted(props_type.items()):
|
||||
for i, attr in enumerate(props_ls):
|
||||
colsub_pair[i % 2].row().prop(themedata, attr)
|
||||
for props_type, props_ls in sorted(props_type.items()):
|
||||
if props_type[0] == 'POINTER':
|
||||
for i, prop in enumerate(props_ls):
|
||||
theme_generic_recurse(getattr(data, prop.identifier))
|
||||
else:
|
||||
for i, prop in enumerate(props_ls):
|
||||
colsub_pair[i % 2].row().prop(data, prop.identifier)
|
||||
|
||||
theme_generic_recurse(themedata)
|
||||
|
||||
@classmethod
|
||||
def poll(cls, context):
|
||||
|
@ -263,7 +263,7 @@ class VIEW3D_MT_uv_map(Menu):
|
||||
layout.separator()
|
||||
|
||||
layout.operator_context = 'EXEC_REGION_WIN'
|
||||
layout.operator("uv.project_from_view")
|
||||
layout.operator("uv.project_from_view").scale_to_bounds = False
|
||||
layout.operator("uv.project_from_view", text="Project from View (Bounds)").scale_to_bounds = True
|
||||
|
||||
layout.separator()
|
||||
@ -421,8 +421,8 @@ class VIEW3D_MT_select_object(Menu):
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.operator("object.select_all", text="Select/Deselect All")
|
||||
layout.operator("object.select_inverse", text="Inverse")
|
||||
layout.operator("object.select_all", text="Select/Deselect All").action = 'TOGGLE'
|
||||
layout.operator("object.select_all", text="Inverse").action = 'INVERT'
|
||||
layout.operator("object.select_random", text="Random")
|
||||
layout.operator("object.select_mirror", text="Mirror")
|
||||
layout.operator("object.select_by_layer", text="Select All by Layer")
|
||||
@ -446,8 +446,8 @@ class VIEW3D_MT_select_pose(Menu):
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.operator("pose.select_all", text="Select/Deselect All")
|
||||
layout.operator("pose.select_inverse", text="Inverse")
|
||||
layout.operator("pose.select_all", text="Select/Deselect All").action = 'TOGGLE'
|
||||
layout.operator("pose.select_all", text="Inverse").action = 'INVERT'
|
||||
layout.operator("pose.select_flip_active", text="Flip Active")
|
||||
layout.operator("pose.select_constraint_target", text="Constraint Target")
|
||||
layout.operator("pose.select_linked", text="Linked")
|
||||
@ -483,9 +483,9 @@ class VIEW3D_MT_select_particle(Menu):
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.operator("particle.select_all", text="Select/Deselect All")
|
||||
layout.operator("particle.select_all", text="Select/Deselect All").action = 'TOGGLE'
|
||||
layout.operator("particle.select_linked")
|
||||
layout.operator("particle.select_inverse")
|
||||
layout.operator("particle.select_all").action = 'INVERT'
|
||||
|
||||
layout.separator()
|
||||
|
||||
@ -509,8 +509,8 @@ class VIEW3D_MT_select_edit_mesh(Menu):
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.operator("mesh.select_all", text="Select/Deselect All")
|
||||
layout.operator("mesh.select_inverse", text="Inverse")
|
||||
layout.operator("mesh.select_all", text="Select/Deselect All").action = 'TOGGLE'
|
||||
layout.operator("mesh.select_all", text="Inverse").action = 'INVERT'
|
||||
|
||||
layout.separator()
|
||||
|
||||
@ -540,7 +540,7 @@ class VIEW3D_MT_select_edit_mesh(Menu):
|
||||
|
||||
layout.operator("mesh.select_linked", text="Linked")
|
||||
layout.operator("mesh.select_vertex_path", text="Vertex Path")
|
||||
layout.operator("mesh.loop_multi_select", text="Edge Loop")
|
||||
layout.operator("mesh.loop_multi_select", text="Edge Loop").ring = False
|
||||
layout.operator("mesh.loop_multi_select", text="Edge Ring").ring = True
|
||||
|
||||
layout.separator()
|
||||
@ -560,8 +560,8 @@ class VIEW3D_MT_select_edit_curve(Menu):
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.operator("curve.select_all", text="Select/Deselect All")
|
||||
layout.operator("curve.select_inverse")
|
||||
layout.operator("curve.select_all", text="Select/Deselect All").action = 'TOGGLE'
|
||||
layout.operator("curve.select_all", text="Inverse").action = 'INVERT'
|
||||
layout.operator("curve.select_random")
|
||||
layout.operator("curve.select_nth", text="Every Nth Number of Points")
|
||||
|
||||
@ -589,8 +589,8 @@ class VIEW3D_MT_select_edit_surface(Menu):
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.operator("curve.select_all", text="Select/Deselect All")
|
||||
layout.operator("curve.select_inverse")
|
||||
layout.operator("curve.select_all", text="Select/Deselect All").action = 'TOGGLE'
|
||||
layout.operator("curve.select_all", text="Inverse").action = 'INVERT'
|
||||
layout.operator("curve.select_random")
|
||||
layout.operator("curve.select_nth", text="Every Nth Number of Points")
|
||||
|
||||
@ -615,7 +615,7 @@ class VIEW3D_MT_select_edit_metaball(Menu):
|
||||
layout.separator()
|
||||
|
||||
layout.operator("mball.select_all").action = 'TOGGLE'
|
||||
layout.operator("mball.select_inverse_metaelems")
|
||||
layout.operator("mball.select_all").action = 'INVERT'
|
||||
|
||||
layout.separator()
|
||||
|
||||
@ -760,7 +760,7 @@ class VIEW3D_MT_object_clear(Menu):
|
||||
layout.operator("object.location_clear", text="Location")
|
||||
layout.operator("object.rotation_clear", text="Rotation")
|
||||
layout.operator("object.scale_clear", text="Scale")
|
||||
layout.operator("object.origin_clear", text="Origin")
|
||||
layout ("object.origin_clear", text="Origin")
|
||||
|
||||
|
||||
class VIEW3D_MT_object_specials(Menu):
|
||||
@ -864,12 +864,16 @@ class VIEW3D_MT_object_apply(Menu):
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
|
||||
layout.operator("object.transform_apply", text="Location").location = True
|
||||
layout.operator("object.transform_apply", text="Rotation").rotation = True
|
||||
layout.operator("object.transform_apply", text="Scale").scale = True
|
||||
props = layout.operator("object.transform_apply", text="Location")
|
||||
props.location, props.rotation, props.scale = True, False, False
|
||||
|
||||
props = layout.operator("object.transform_apply", text="Rotation")
|
||||
props.location, props.rotation, props.scale = False, True, False
|
||||
|
||||
props = layout.operator("object.transform_apply", text="Scale")
|
||||
props.location, props.rotation, props.scale = False, False, True
|
||||
props = layout.operator("object.transform_apply", text="Rotation & Scale")
|
||||
props.scale = True
|
||||
props.rotation = True
|
||||
props.location, props.rotation, props.scale = False, True, True
|
||||
|
||||
layout.separator()
|
||||
|
||||
@ -942,7 +946,7 @@ class VIEW3D_MT_object_showhide(Menu):
|
||||
layout = self.layout
|
||||
|
||||
layout.operator("object.hide_view_clear", text="Show Hidden")
|
||||
layout.operator("object.hide_view_set", text="Hide Selected")
|
||||
layout.operator("object.hide_view_set", text="Hide Selected").unselected = False
|
||||
layout.operator("object.hide_view_set", text="Hide Unselected").unselected = True
|
||||
|
||||
|
||||
@ -1055,13 +1059,13 @@ class VIEW3D_MT_vertex_group(Menu):
|
||||
if ob.vertex_groups.active:
|
||||
layout.separator()
|
||||
layout.operator("object.vertex_group_assign", text="Assign to Active Group")
|
||||
layout.operator("object.vertex_group_remove_from", text="Remove from Active Group")
|
||||
layout.operator("object.vertex_group_remove_from", text="Remove from Active Group").all = False
|
||||
layout.operator("object.vertex_group_remove_from", text="Remove from All").all = True
|
||||
layout.separator()
|
||||
|
||||
if ob.vertex_groups.active:
|
||||
layout.operator_menu_enum("object.vertex_group_set_active", "group", text="Set Active Group")
|
||||
layout.operator("object.vertex_group_remove", text="Remove Active Group")
|
||||
layout.operator("object.vertex_group_remove", text="Remove Active Group").all = False
|
||||
layout.operator("object.vertex_group_remove", text="Remove All Groups").all = True
|
||||
|
||||
# ********** Weight paint menu **********
|
||||
@ -1310,7 +1314,7 @@ class VIEW3D_MT_pose_propagate(Menu):
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
|
||||
layout.operator("pose.propagate")
|
||||
layout.operator("pose.propagate").mode = 'WHILE_HELD'
|
||||
|
||||
layout.separator()
|
||||
|
||||
@ -1497,7 +1501,7 @@ class VIEW3D_MT_edit_mesh_specials(Menu):
|
||||
|
||||
layout.operator_context = 'INVOKE_REGION_WIN'
|
||||
|
||||
layout.operator("mesh.subdivide", text="Subdivide")
|
||||
layout.operator("mesh.subdivide", text="Subdivide").smoothness = 0.0
|
||||
"""
|
||||
layout.operator("mesh.subdivide", text="Subdivide Smooth").smoothness = 1.0
|
||||
"""
|
||||
@ -1505,7 +1509,7 @@ class VIEW3D_MT_edit_mesh_specials(Menu):
|
||||
layout.operator("mesh.remove_doubles")
|
||||
layout.operator("mesh.hide", text="Hide")
|
||||
layout.operator("mesh.reveal", text="Reveal")
|
||||
layout.operator("mesh.select_inverse")
|
||||
layout.operator("mesh.select_all").action = 'INVERT'
|
||||
layout.operator("mesh.flip_normals")
|
||||
layout.operator("mesh.vertices_smooth", text="Smooth")
|
||||
layout.operator("mesh.bevel", text="Bevel")
|
||||
@ -1616,12 +1620,12 @@ class VIEW3D_MT_edit_mesh_edges(Menu):
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.operator("mesh.mark_seam")
|
||||
layout.operator("mesh.mark_seam").clear = False
|
||||
layout.operator("mesh.mark_seam", text="Clear Seam").clear = True
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.operator("mesh.mark_sharp")
|
||||
layout.operator("mesh.mark_sharp").clear = False
|
||||
layout.operator("mesh.mark_sharp", text="Clear Sharp").clear = True
|
||||
|
||||
layout.separator()
|
||||
@ -1637,7 +1641,7 @@ class VIEW3D_MT_edit_mesh_edges(Menu):
|
||||
|
||||
layout.operator("TRANSFORM_OT_edge_slide")
|
||||
layout.operator("TRANSFORM_OT_edge_crease")
|
||||
layout.operator("mesh.loop_multi_select", text="Edge Loop")
|
||||
layout.operator("mesh.loop_multi_select", text="Edge Loop").ring = False
|
||||
|
||||
# uiItemO(layout, "Loopcut", 0, "mesh.loop_cut"); // CutEdgeloop(em, 1);
|
||||
# uiItemO(layout, "Edge Slide", 0, "mesh.edge_slide"); // EdgeSlide(em, 0,0.0);
|
||||
@ -1697,7 +1701,7 @@ class VIEW3D_MT_edit_mesh_normals(Menu):
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
|
||||
layout.operator("mesh.normals_make_consistent", text="Recalculate Outside")
|
||||
layout.operator("mesh.normals_make_consistent", text="Recalculate Outside").inside = False
|
||||
layout.operator("mesh.normals_make_consistent", text="Recalculate Inside").inside = True
|
||||
|
||||
layout.separator()
|
||||
|
@ -155,7 +155,7 @@ class VIEW3D_PT_tools_meshedit(View3DPanel, Panel):
|
||||
col = layout.column(align=True)
|
||||
col.label(text="UV Mapping:")
|
||||
col.operator("wm.call_menu", text="Unwrap").name = "VIEW3D_MT_uv_map"
|
||||
col.operator("mesh.mark_seam")
|
||||
col.operator("mesh.mark_seam").clear = False
|
||||
col.operator("mesh.mark_seam", text="Clear Seam").clear = True
|
||||
|
||||
col = layout.column(align=True)
|
||||
|
@ -3,7 +3,6 @@ bl_info = {
|
||||
"author": "YourNameHere",
|
||||
"version": (1, 0),
|
||||
"blender": (2, 5, 5),
|
||||
"api": 33333,
|
||||
"location": "View3D > Add > Mesh > New Object",
|
||||
"description": "Adds a new Mesh Object",
|
||||
"warning": "",
|
||||
|
@ -67,7 +67,7 @@ float brush_curve_strength_clamp(struct Brush *br, float p, const float len);
|
||||
float brush_curve_strength(struct Brush *br, float p, const float len); /* used for sculpt */
|
||||
|
||||
/* sampling */
|
||||
void brush_sample_tex(struct Brush *brush, float *xy, float *rgba, const int thread);
|
||||
void brush_sample_tex(struct Brush *brush, const float xy[2], float rgba[4], const int thread);
|
||||
void brush_imbuf_new(struct Brush *brush, short flt, short texfalloff, int size,
|
||||
struct ImBuf **imbuf, int use_color_correction);
|
||||
|
||||
|
@ -44,7 +44,8 @@ struct Scene;
|
||||
|
||||
typedef struct bMovieHandle {
|
||||
int (*start_movie)(struct Scene *scene, struct RenderData *rd, int rectx, int recty, struct ReportList *reports);
|
||||
int (*append_movie)(struct RenderData *rd, int frame, int *pixels, int rectx, int recty, struct ReportList *reports);
|
||||
int (*append_movie)(struct RenderData *rd, int start_frame, int frame, int *pixels,
|
||||
int rectx, int recty, struct ReportList *reports);
|
||||
void (*end_movie)(void);
|
||||
int (*get_next_frame)(struct RenderData *rd, struct ReportList *reports); /* optional */
|
||||
void (*get_movie_path)(char *string, struct RenderData *rd); /* optional */
|
||||
|
@ -68,11 +68,13 @@ struct Scene;
|
||||
|
||||
extern int start_ffmpeg(struct Scene *scene, struct RenderData *rd, int rectx, int recty, struct ReportList *reports);
|
||||
extern void end_ffmpeg(void);
|
||||
extern int append_ffmpeg(struct RenderData *rd, int frame, int *pixels, int rectx, int recty, struct ReportList *reports);
|
||||
extern int append_ffmpeg(struct RenderData *rd, int start_frame, int frame, int *pixels,
|
||||
int rectx, int recty, struct ReportList *reports);
|
||||
void filepath_ffmpeg(char* string, struct RenderData* rd);
|
||||
|
||||
extern void ffmpeg_set_preset(struct RenderData *rd, int preset);
|
||||
extern void ffmpeg_verify_image_type(struct RenderData *rd, struct ImageFormatData *imf);
|
||||
extern void ffmpeg_verify_lossless_format(struct RenderData *rd, struct ImageFormatData *imf);
|
||||
|
||||
extern struct IDProperty *ffmpeg_property_add(struct RenderData *Rd, const char *type, int opt_index, int parent_index);
|
||||
extern int ffmpeg_property_add_string(struct RenderData *rd, const char *type, const char *str);
|
||||
|
@ -42,7 +42,8 @@ struct Scene;
|
||||
|
||||
extern int start_frameserver(struct Scene *scene, struct RenderData *rd, int rectx, int recty, struct ReportList *reports);
|
||||
extern void end_frameserver(void);
|
||||
extern int append_frameserver(struct RenderData *rd, int frame, int *pixels, int rectx, int recty, struct ReportList *reports);
|
||||
extern int append_frameserver(struct RenderData *rd, int start_frame, int frame, int *pixels,
|
||||
int rectx, int recty, struct ReportList *reports);
|
||||
extern int frameserver_loop(struct RenderData *rd, struct ReportList *reports);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
@ -487,7 +487,7 @@ int brush_clone_image_delete(Brush *brush)
|
||||
}
|
||||
|
||||
/* Brush Sampling */
|
||||
void brush_sample_tex(Brush *brush, float *xy, float *rgba, const int thread)
|
||||
void brush_sample_tex(Brush *brush, const float xy[2], float rgba[4], const int thread)
|
||||
{
|
||||
MTex *mtex= &brush->mtex;
|
||||
|
||||
@ -515,15 +515,16 @@ void brush_sample_tex(Brush *brush, float *xy, float *rgba, const int thread)
|
||||
rgba[3]= 1.0f;
|
||||
}
|
||||
}
|
||||
else if (rgba)
|
||||
else {
|
||||
rgba[0]= rgba[1]= rgba[2]= rgba[3]= 1.0f;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* TODO, use define for 'texfall' arg */
|
||||
void brush_imbuf_new(Brush *brush, short flt, short texfall, int bufsize, ImBuf **outbuf, int use_color_correction)
|
||||
{
|
||||
ImBuf *ibuf;
|
||||
float xy[2], dist, rgba[4], *dstf;
|
||||
float xy[2], rgba[4], *dstf;
|
||||
int x, y, rowbytes, xoff, yoff, imbflag;
|
||||
const int radius= brush_size(brush);
|
||||
char *dst, crgb[3];
|
||||
@ -554,28 +555,23 @@ void brush_imbuf_new(Brush *brush, short flt, short texfall, int bufsize, ImBuf
|
||||
xy[1] = y + yoff;
|
||||
|
||||
if (texfall == 0) {
|
||||
dist = sqrt(xy[0]*xy[0] + xy[1]*xy[1]);
|
||||
|
||||
copy_v3_v3(dstf, brush_rgb);
|
||||
dstf[3]= alpha*brush_curve_strength_clamp(brush, dist, radius);
|
||||
dstf[3]= alpha*brush_curve_strength_clamp(brush, len_v2(xy), radius);
|
||||
}
|
||||
else if (texfall == 1) {
|
||||
brush_sample_tex(brush, xy, dstf, 0);
|
||||
}
|
||||
else {
|
||||
dist = sqrt(xy[0]*xy[0] + xy[1]*xy[1]);
|
||||
|
||||
brush_sample_tex(brush, xy, rgba, 0);
|
||||
mul_v3_v3v3(dstf, rgba, brush_rgb);
|
||||
dstf[3] = rgba[3]*alpha*brush_curve_strength_clamp(brush, dist, radius);
|
||||
dstf[3] = rgba[3]*alpha*brush_curve_strength_clamp(brush, len_v2(xy), radius);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
crgb[0]= FTOCHAR(brush->rgb[0]);
|
||||
crgb[1]= FTOCHAR(brush->rgb[1]);
|
||||
crgb[2]= FTOCHAR(brush->rgb[2]);
|
||||
float alpha_f; /* final float alpha to convert to char */
|
||||
F3TOCHAR3(brush->rgb, crgb);
|
||||
|
||||
for (y=0; y < ibuf->y; y++) {
|
||||
dst = (char*)ibuf->rect + y*rowbytes;
|
||||
@ -585,36 +581,38 @@ void brush_imbuf_new(Brush *brush, short flt, short texfall, int bufsize, ImBuf
|
||||
xy[1] = y + yoff;
|
||||
|
||||
if (texfall == 0) {
|
||||
dist = sqrt(xy[0]*xy[0] + xy[1]*xy[1]);
|
||||
alpha_f = alpha * brush_curve_strength(brush, len_v2(xy), radius);
|
||||
|
||||
dst[0]= crgb[0];
|
||||
dst[1]= crgb[1];
|
||||
dst[2]= crgb[2];
|
||||
dst[3]= FTOCHAR(alpha*brush_curve_strength(brush, dist, radius));
|
||||
dst[0] = crgb[0];
|
||||
dst[1] = crgb[1];
|
||||
dst[2] = crgb[2];
|
||||
dst[3] = FTOCHAR(alpha_f);
|
||||
}
|
||||
else if (texfall == 1) {
|
||||
brush_sample_tex(brush, xy, rgba, 0);
|
||||
dst[0]= FTOCHAR(rgba[0]);
|
||||
dst[1]= FTOCHAR(rgba[1]);
|
||||
dst[2]= FTOCHAR(rgba[2]);
|
||||
dst[3]= FTOCHAR(rgba[3]);
|
||||
dst[0] = FTOCHAR(rgba[0]);
|
||||
dst[1] = FTOCHAR(rgba[1]);
|
||||
dst[2] = FTOCHAR(rgba[2]);
|
||||
dst[3] = FTOCHAR(rgba[3]);
|
||||
}
|
||||
else if (texfall == 2) {
|
||||
dist = sqrt(xy[0]*xy[0] + xy[1]*xy[1]);
|
||||
|
||||
brush_sample_tex(brush, xy, rgba, 0);
|
||||
dst[0] = FTOCHAR(rgba[0]*brush->rgb[0]);
|
||||
dst[1] = FTOCHAR(rgba[1]*brush->rgb[1]);
|
||||
dst[2] = FTOCHAR(rgba[2]*brush->rgb[2]);
|
||||
dst[3] = FTOCHAR(rgba[3]*alpha*brush_curve_strength_clamp(brush, dist, radius));
|
||||
} else {
|
||||
dist = sqrt(xy[0]*xy[0] + xy[1]*xy[1]);
|
||||
mul_v3_v3(rgba, brush->rgb);
|
||||
alpha_f = rgba[3] * alpha * brush_curve_strength_clamp(brush, len_v2(xy), radius);
|
||||
|
||||
dst[0] = FTOCHAR(rgba[0]);
|
||||
dst[1] = FTOCHAR(rgba[1]);
|
||||
dst[2] = FTOCHAR(rgba[2]);
|
||||
dst[3] = FTOCHAR(alpha_f);
|
||||
}
|
||||
else {
|
||||
brush_sample_tex(brush, xy, rgba, 0);
|
||||
dst[0]= crgb[0];
|
||||
dst[1]= crgb[1];
|
||||
dst[2]= crgb[2];
|
||||
dst[3] = FTOCHAR(rgba[3]*alpha*brush_curve_strength_clamp(brush, dist, radius));
|
||||
alpha_f = rgba[3] * alpha * brush_curve_strength_clamp(brush, len_v2(xy), radius);
|
||||
|
||||
dst[0] = crgb[0];
|
||||
dst[1] = crgb[1];
|
||||
dst[2] = crgb[2];
|
||||
dst[3] = FTOCHAR(alpha_f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1002,7 +1002,7 @@ void scopes_update(Scopes *scopes, ImBuf *ibuf, int use_color_management)
|
||||
}
|
||||
|
||||
/* we still need luma for histogram */
|
||||
luma = 0.299f * rgb[0] + 0.587f * rgb[1] + 0.114f * rgb[2];
|
||||
luma = rgb_to_luma(rgb);
|
||||
|
||||
/* check for min max */
|
||||
if(ycc_mode == -1 ) {
|
||||
|
@ -1624,8 +1624,8 @@ static struct DerivedMesh *dynamicPaint_Modifier_apply(DynamicPaintModifierData
|
||||
}
|
||||
else {
|
||||
col[l_index].a = 255;
|
||||
col[l_index].r = FTOCHAR(pPoint[v_index].wetness);
|
||||
col[l_index].g = FTOCHAR(pPoint[v_index].wetness);
|
||||
col[l_index].r =
|
||||
col[l_index].g =
|
||||
col[l_index].b = FTOCHAR(pPoint[v_index].wetness);
|
||||
}
|
||||
}
|
||||
@ -1667,8 +1667,8 @@ static struct DerivedMesh *dynamicPaint_Modifier_apply(DynamicPaintModifierData
|
||||
for (i=0; i<totloop; i++) {
|
||||
int index = mloop[i].v;
|
||||
col[i].a = 255;
|
||||
col[i].r = FTOCHAR(pPoint[index].wetness);
|
||||
col[i].g = FTOCHAR(pPoint[index].wetness);
|
||||
col[i].r =
|
||||
col[i].g =
|
||||
col[i].b = FTOCHAR(pPoint[index].wetness);
|
||||
}
|
||||
}
|
||||
|
@ -1839,7 +1839,6 @@ static void registerCompositNodes(bNodeTreeType *ttype)
|
||||
register_node_type_cmp_vecblur(ttype);
|
||||
register_node_type_cmp_dilateerode(ttype);
|
||||
register_node_type_cmp_defocus(ttype);
|
||||
register_node_type_cmp_doubleedgemask(ttype);
|
||||
|
||||
register_node_type_cmp_valtorgb(ttype);
|
||||
register_node_type_cmp_rgbtobw(ttype);
|
||||
@ -1863,6 +1862,7 @@ static void registerCompositNodes(bNodeTreeType *ttype)
|
||||
register_node_type_cmp_channel_matte(ttype);
|
||||
register_node_type_cmp_color_spill(ttype);
|
||||
register_node_type_cmp_luma_matte(ttype);
|
||||
register_node_type_cmp_doubleedgemask(ttype);
|
||||
|
||||
register_node_type_cmp_translate(ttype);
|
||||
register_node_type_cmp_rotate(ttype);
|
||||
|
@ -1180,10 +1180,11 @@ static unsigned char *get_ucharbuf(ImBuf *ibuf)
|
||||
int pixel= ibuf->x*y + x;
|
||||
|
||||
if(ibuf->rect_float) {
|
||||
float *rrgbf= ibuf->rect_float + pixel*4;
|
||||
*cp= FTOCHAR(0.2126f*rrgbf[0] + 0.7152f*rrgbf[1] + 0.0722f*rrgbf[2]);
|
||||
const float *rrgbf= ibuf->rect_float + pixel*4;
|
||||
const float grey_f= 0.2126f*rrgbf[0] + 0.7152f*rrgbf[1] + 0.0722f*rrgbf[2];
|
||||
*cp= FTOCHAR(grey_f);
|
||||
} else {
|
||||
unsigned char *rrgb= (unsigned char*)ibuf->rect + pixel*4;
|
||||
const unsigned char *rrgb= (unsigned char*)ibuf->rect + pixel*4;
|
||||
*cp= 0.2126f*rrgb[0] + 0.7152f*rrgb[1] + 0.0722f*rrgb[2];
|
||||
}
|
||||
cp++;
|
||||
|
@ -52,7 +52,8 @@
|
||||
/* callbacks */
|
||||
static int start_avi(Scene *scene, RenderData *rd, int rectx, int recty, ReportList *reports);
|
||||
static void end_avi(void);
|
||||
static int append_avi(RenderData *rd, int frame, int *pixels, int rectx, int recty, ReportList *reports);
|
||||
static int append_avi(RenderData *rd, int start_frame, int frame, int *pixels,
|
||||
int rectx, int recty, ReportList *reports);
|
||||
static void filepath_avi(char *string, RenderData *rd);
|
||||
|
||||
/* ********************** general blender movie support ***************************** */
|
||||
@ -121,7 +122,6 @@ bMovieHandle *BKE_get_movie_handle(const char imtype)
|
||||
|
||||
|
||||
static AviMovie *avi=NULL;
|
||||
static int sframe;
|
||||
|
||||
static void filepath_avi (char *string, RenderData *rd)
|
||||
{
|
||||
@ -150,7 +150,6 @@ static int start_avi(Scene *scene, RenderData *rd, int rectx, int recty, ReportL
|
||||
|
||||
filepath_avi(name, rd);
|
||||
|
||||
sframe = (rd->sfra);
|
||||
x = rectx;
|
||||
y = recty;
|
||||
|
||||
@ -183,7 +182,8 @@ static int start_avi(Scene *scene, RenderData *rd, int rectx, int recty, ReportL
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int append_avi(RenderData *UNUSED(rd), int frame, int *pixels, int rectx, int recty, ReportList *UNUSED(reports))
|
||||
static int append_avi(RenderData *UNUSED(rd), int start_frame, int frame, int *pixels,
|
||||
int rectx, int recty, ReportList *UNUSED(reports))
|
||||
{
|
||||
unsigned int *rt1, *rt2, *rectot;
|
||||
int x, y;
|
||||
@ -212,8 +212,8 @@ static int append_avi(RenderData *UNUSED(rd), int frame, int *pixels, int rectx,
|
||||
}
|
||||
}
|
||||
|
||||
AVI_write_frame (avi, (frame-sframe), AVI_FORMAT_RGB32, rectot, rectx*recty*4);
|
||||
// printf ("added frame %3d (frame %3d in avi): ", frame, frame-sframe);
|
||||
AVI_write_frame (avi, (frame-start_frame), AVI_FORMAT_RGB32, rectot, rectx*recty*4);
|
||||
// printf ("added frame %3d (frame %3d in avi): ", frame, frame-start_frame);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
@ -236,13 +236,13 @@ static const char** get_file_extensions(int format)
|
||||
}
|
||||
|
||||
/* Write a frame to the output file */
|
||||
static int write_video_frame(RenderData *rd, AVFrame* frame, ReportList *reports)
|
||||
static int write_video_frame(RenderData *rd, int cfra, AVFrame* frame, ReportList *reports)
|
||||
{
|
||||
int outsize = 0;
|
||||
int ret, success= 1;
|
||||
AVCodecContext* c = video_stream->codec;
|
||||
|
||||
frame->pts = rd->cfra - rd->sfra;
|
||||
frame->pts = cfra;
|
||||
|
||||
if (rd->mode & R_FIELDS) {
|
||||
frame->top_field_first = ((rd->mode & R_ODDFIELD) != 0);
|
||||
@ -918,7 +918,7 @@ static void write_audio_frames(double to_pts)
|
||||
}
|
||||
#endif
|
||||
|
||||
int append_ffmpeg(RenderData *rd, int frame, int *pixels, int rectx, int recty, ReportList *reports)
|
||||
int append_ffmpeg(RenderData *rd, int start_frame, int frame, int *pixels, int rectx, int recty, ReportList *reports)
|
||||
{
|
||||
AVFrame* avframe;
|
||||
int success = 1;
|
||||
@ -933,7 +933,7 @@ int append_ffmpeg(RenderData *rd, int frame, int *pixels, int rectx, int recty,
|
||||
if(video_stream)
|
||||
{
|
||||
avframe= generate_video_frame((unsigned char*) pixels, reports);
|
||||
success= (avframe && write_video_frame(rd, avframe, reports));
|
||||
success= (avframe && write_video_frame(rd, frame - start_frame, avframe, reports));
|
||||
|
||||
if (ffmpeg_autosplit) {
|
||||
if (avio_tell(outfile->pb) > FFMPEG_AUTOSPLIT_SIZE) {
|
||||
@ -1200,6 +1200,56 @@ int ffmpeg_property_add_string(RenderData *rd, const char * type, const char * s
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void ffmpeg_set_expert_options(RenderData *rd, int preset)
|
||||
{
|
||||
if(rd->ffcodecdata.properties)
|
||||
IDP_FreeProperty(rd->ffcodecdata.properties);
|
||||
|
||||
if(preset == FFMPEG_PRESET_H264) {
|
||||
/*
|
||||
* All options here are for x264, but must be set via ffmpeg.
|
||||
* The names are therefore different - Search for "x264 to FFmpeg option mapping"
|
||||
* to get a list.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Use CABAC coder. Using "coder:1", which should be equivalent,
|
||||
* crashes Blender for some reason. Either way - this is no big deal.
|
||||
*/
|
||||
ffmpeg_property_add_string(rd, "video", "coder:vlc");
|
||||
|
||||
/*
|
||||
* The other options were taken from the libx264-default.preset
|
||||
* included in the ffmpeg distribution.
|
||||
*/
|
||||
ffmpeg_property_add_string(rd, "video", "flags:loop");
|
||||
ffmpeg_property_add_string(rd, "video", "cmp:chroma");
|
||||
ffmpeg_property_add_string(rd, "video", "partitions:parti4x4");
|
||||
ffmpeg_property_add_string(rd, "video", "partitions:partp8x8");
|
||||
ffmpeg_property_add_string(rd, "video", "partitions:partb8x8");
|
||||
ffmpeg_property_add_string(rd, "video", "me:hex");
|
||||
ffmpeg_property_add_string(rd, "video", "subq:6");
|
||||
ffmpeg_property_add_string(rd, "video", "me_range:16");
|
||||
ffmpeg_property_add_string(rd, "video", "qdiff:4");
|
||||
ffmpeg_property_add_string(rd, "video", "keyint_min:25");
|
||||
ffmpeg_property_add_string(rd, "video", "sc_threshold:40");
|
||||
ffmpeg_property_add_string(rd, "video", "i_qfactor:0.71");
|
||||
ffmpeg_property_add_string(rd, "video", "b_strategy:1");
|
||||
ffmpeg_property_add_string(rd, "video", "bf:3");
|
||||
ffmpeg_property_add_string(rd, "video", "refs:2");
|
||||
ffmpeg_property_add_string(rd, "video", "qcomp:0.6");
|
||||
ffmpeg_property_add_string(rd, "video", "directpred:3");
|
||||
ffmpeg_property_add_string(rd, "video", "trellis:0");
|
||||
ffmpeg_property_add_string(rd, "video", "flags2:wpred");
|
||||
ffmpeg_property_add_string(rd, "video", "flags2:dct8x8");
|
||||
ffmpeg_property_add_string(rd, "video", "flags2:fastpskip");
|
||||
ffmpeg_property_add_string(rd, "video", "wpredp:2");
|
||||
|
||||
if(rd->ffcodecdata.flags & FFMPEG_LOSSLESS_OUTPUT)
|
||||
ffmpeg_property_add_string(rd, "video", "cqp:0");
|
||||
}
|
||||
}
|
||||
|
||||
void ffmpeg_set_preset(RenderData *rd, int preset)
|
||||
{
|
||||
int isntsc = (rd->frs_sec != 25);
|
||||
@ -1267,47 +1317,7 @@ void ffmpeg_set_preset(RenderData *rd, int preset)
|
||||
rd->ffcodecdata.mux_packet_size = 2048;
|
||||
rd->ffcodecdata.mux_rate = 10080000;
|
||||
|
||||
/*
|
||||
* All options here are for x264, but must be set via ffmpeg.
|
||||
* The names are therefore different - Search for "x264 to FFmpeg option mapping"
|
||||
* to get a list.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Use CABAC coder. Using "coder:1", which should be equivalent,
|
||||
* crashes Blender for some reason. Either way - this is no big deal.
|
||||
*/
|
||||
ffmpeg_property_add_string(rd, "video", "coder:vlc");
|
||||
|
||||
/*
|
||||
* The other options were taken from the libx264-default.preset
|
||||
* included in the ffmpeg distribution.
|
||||
*/
|
||||
ffmpeg_property_add_string(rd, "video", "flags:loop");
|
||||
ffmpeg_property_add_string(rd, "video", "cmp:chroma");
|
||||
ffmpeg_property_add_string(rd, "video", "partitions:parti4x4");
|
||||
ffmpeg_property_add_string(rd, "video", "partitions:partp8x8");
|
||||
ffmpeg_property_add_string(rd, "video", "partitions:partb8x8");
|
||||
ffmpeg_property_add_string(rd, "video", "me:hex");
|
||||
ffmpeg_property_add_string(rd, "video", "subq:6");
|
||||
ffmpeg_property_add_string(rd, "video", "me_range:16");
|
||||
ffmpeg_property_add_string(rd, "video", "qdiff:4");
|
||||
ffmpeg_property_add_string(rd, "video", "keyint_min:25");
|
||||
ffmpeg_property_add_string(rd, "video", "sc_threshold:40");
|
||||
ffmpeg_property_add_string(rd, "video", "i_qfactor:0.71");
|
||||
ffmpeg_property_add_string(rd, "video", "b_strategy:1");
|
||||
ffmpeg_property_add_string(rd, "video", "bf:3");
|
||||
ffmpeg_property_add_string(rd, "video", "refs:2");
|
||||
ffmpeg_property_add_string(rd, "video", "qcomp:0.6");
|
||||
ffmpeg_property_add_string(rd, "video", "directpred:3");
|
||||
ffmpeg_property_add_string(rd, "video", "trellis:0");
|
||||
ffmpeg_property_add_string(rd, "video", "flags2:wpred");
|
||||
ffmpeg_property_add_string(rd, "video", "flags2:dct8x8");
|
||||
ffmpeg_property_add_string(rd, "video", "flags2:fastpskip");
|
||||
ffmpeg_property_add_string(rd, "video", "wpredp:2");
|
||||
|
||||
// This makes x264 output lossless. Will be a separate option later.
|
||||
//ffmpeg_property_add_string(rd, "video", "cqp:0");
|
||||
ffmpeg_set_expert_options(rd, preset);
|
||||
break;
|
||||
|
||||
case FFMPEG_PRESET_THEORA:
|
||||
@ -1378,4 +1388,11 @@ void ffmpeg_verify_image_type(RenderData *rd, ImageFormatData *imf)
|
||||
}
|
||||
}
|
||||
|
||||
void ffmpeg_verify_lossless_format(RenderData *rd, ImageFormatData *imf)
|
||||
{
|
||||
if(imf->imtype == R_IMF_IMTYPE_H264) {
|
||||
ffmpeg_set_expert_options(rd, FFMPEG_PRESET_H264);
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -362,7 +362,8 @@ static void serve_ppm(int *pixels, int rectx, int recty)
|
||||
connsock = -1;
|
||||
}
|
||||
|
||||
int append_frameserver(RenderData *UNUSED(rd), int frame, int *pixels, int rectx, int recty, ReportList *UNUSED(reports))
|
||||
int append_frameserver(RenderData *UNUSED(rd), int UNUSED(start_frame), int frame, int *pixels,
|
||||
int rectx, int recty, ReportList *UNUSED(reports))
|
||||
{
|
||||
fprintf(stderr, "Serving frame: %d\n", frame);
|
||||
if (write_ppm) {
|
||||
|
@ -69,8 +69,10 @@ void rgb_to_hsv_compat(float r, float g, float b, float *lh, float *ls, float *l
|
||||
unsigned int rgb_to_cpack(float r, float g, float b);
|
||||
unsigned int hsv_to_cpack(float h, float s, float v);
|
||||
|
||||
float rgb_to_grayscale(float rgb[3]);
|
||||
unsigned char rgb_to_grayscale_byte(unsigned char rgb[3]);
|
||||
float rgb_to_grayscale(const float rgb[3]);
|
||||
unsigned char rgb_to_grayscale_byte(const unsigned char rgb[3]);
|
||||
float rgb_to_luma(const float rgb[3]);
|
||||
unsigned char rgb_to_luma_byte(const unsigned char rgb[3]);
|
||||
|
||||
/**************** Profile Transformations *****************/
|
||||
|
||||
@ -99,8 +101,8 @@ void minmax_rgb(short c[3]);
|
||||
void rgb_float_set_hue_float_offset(float * rgb, float hue_offset);
|
||||
void rgb_byte_set_hue_float_offset(unsigned char * rgb, float hue_offset);
|
||||
|
||||
void rgb_byte_to_float(const unsigned char *in, float *out);
|
||||
void rgb_float_to_byte(const float *in, unsigned char *out);
|
||||
void rgb_byte_to_float(const unsigned char in[3], float out[3]);
|
||||
void rgb_float_to_byte(const float in[3], unsigned char out[3]);
|
||||
|
||||
/***************** lift/gamma/gain / ASC-CDL conversion *****************/
|
||||
|
||||
|
@ -337,14 +337,14 @@ void cpack_to_rgb(unsigned int col, float *r, float *g, float *b)
|
||||
*b /= 255.0f;
|
||||
}
|
||||
|
||||
void rgb_byte_to_float(const unsigned char *in, float *out)
|
||||
void rgb_byte_to_float(const unsigned char in[3], float out[3])
|
||||
{
|
||||
out[0]= ((float)in[0]) / 255.0f;
|
||||
out[1]= ((float)in[1]) / 255.0f;
|
||||
out[2]= ((float)in[2]) / 255.0f;
|
||||
}
|
||||
|
||||
void rgb_float_to_byte(const float *in, unsigned char *out)
|
||||
void rgb_float_to_byte(const float in[3], unsigned char out[3])
|
||||
{
|
||||
int r, g, b;
|
||||
|
||||
@ -434,16 +434,26 @@ int constrain_rgb(float *r, float *g, float *b)
|
||||
return 0; /* Color within RGB gamut */
|
||||
}
|
||||
|
||||
float rgb_to_grayscale(float rgb[3])
|
||||
float rgb_to_grayscale(const float rgb[3])
|
||||
{
|
||||
return 0.3f*rgb[0] + 0.58f*rgb[1] + 0.12f*rgb[2];
|
||||
}
|
||||
|
||||
unsigned char rgb_to_grayscale_byte(unsigned char rgb[3])
|
||||
unsigned char rgb_to_grayscale_byte(const unsigned char rgb[3])
|
||||
{
|
||||
return (76*(unsigned short)rgb[0] + 148*(unsigned short)rgb[1] + 31*(unsigned short)rgb[2]) / 255;
|
||||
}
|
||||
|
||||
float rgb_to_luma(const float rgb[3])
|
||||
{
|
||||
return 0.299f*rgb[0] + 0.587f*rgb[1] + 0.114f*rgb[2];
|
||||
}
|
||||
|
||||
unsigned char rgb_to_luma_byte(const unsigned char rgb[3])
|
||||
{
|
||||
return (76*(unsigned short)rgb[0] + 150*(unsigned short)rgb[1] + 29*(unsigned short)rgb[2]) / 255;
|
||||
}
|
||||
|
||||
/* ********************************* lift/gamma/gain / ASC-CDL conversion ********************************* */
|
||||
|
||||
void lift_gamma_gain_to_asc_cdl(float *lift, float *gamma, float *gain, float *offset, float *slope, float *power)
|
||||
|
@ -277,78 +277,12 @@ static void ANIM_OT_previewrange_clear(wmOperatorType *ot)
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
}
|
||||
|
||||
/* ****************** time display toggle operator ****************************/
|
||||
|
||||
static int toggle_time_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
{
|
||||
ScrArea *curarea= CTX_wm_area(C);
|
||||
|
||||
if (curarea == NULL)
|
||||
return OPERATOR_CANCELLED;
|
||||
|
||||
/* simply toggle draw frames flag in applicable spaces */
|
||||
// XXX or should relevant spaces define their own version of this?
|
||||
switch (curarea->spacetype) {
|
||||
case SPACE_TIME: /* TimeLine */
|
||||
{
|
||||
SpaceTime *stime= CTX_wm_space_time(C);
|
||||
stime->flag ^= TIME_DRAWFRAMES;
|
||||
}
|
||||
break;
|
||||
case SPACE_ACTION: /* Action Editor */
|
||||
{
|
||||
SpaceAction *saction= CTX_wm_space_action(C);
|
||||
saction->flag ^= SACTION_DRAWTIME;
|
||||
}
|
||||
break;
|
||||
case SPACE_IPO: /* Graph Editor */
|
||||
{
|
||||
SpaceIpo *sipo= CTX_wm_space_graph(C);
|
||||
sipo->flag ^= SIPO_DRAWTIME;
|
||||
}
|
||||
break;
|
||||
case SPACE_NLA: /* NLA Editor */
|
||||
{
|
||||
SpaceNla *snla= CTX_wm_space_nla(C);
|
||||
snla->flag ^= SNLA_DRAWTIME;
|
||||
}
|
||||
break;
|
||||
case SPACE_SEQ: /* Sequencer */
|
||||
{
|
||||
SpaceSeq *sseq= CTX_wm_space_seq(C);
|
||||
sseq->flag ^= SEQ_DRAWFRAMES;
|
||||
}
|
||||
break;
|
||||
|
||||
default: /* editor doesn't show frames */
|
||||
return OPERATOR_CANCELLED; // XXX or should we pass through instead?
|
||||
}
|
||||
|
||||
ED_area_tag_redraw(curarea);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
static void ANIM_OT_time_toggle(wmOperatorType *ot)
|
||||
{
|
||||
/* identifiers */
|
||||
ot->name= "Toggle Frames/Seconds";
|
||||
ot->idname= "ANIM_OT_time_toggle";
|
||||
ot->description= "Toggle whether timing is displayed in frames or seconds for active timeline view";
|
||||
|
||||
/* api callbacks */
|
||||
ot->exec= toggle_time_exec;
|
||||
|
||||
ot->poll= ED_operator_animview_active;
|
||||
}
|
||||
|
||||
/* ************************** registration **********************************/
|
||||
|
||||
void ED_operatortypes_anim(void)
|
||||
{
|
||||
/* Animation Editors only -------------------------- */
|
||||
WM_operatortype_append(ANIM_OT_change_frame);
|
||||
WM_operatortype_append(ANIM_OT_time_toggle);
|
||||
|
||||
WM_operatortype_append(ANIM_OT_previewrange_set);
|
||||
WM_operatortype_append(ANIM_OT_previewrange_clear);
|
||||
@ -382,11 +316,14 @@ void ED_operatortypes_anim(void)
|
||||
void ED_keymap_anim(wmKeyConfig *keyconf)
|
||||
{
|
||||
wmKeyMap *keymap= WM_keymap_find(keyconf, "Animation", 0, 0);
|
||||
wmKeyMapItem *kmi;
|
||||
|
||||
/* frame management */
|
||||
/* NOTE: 'ACTIONMOUSE' not 'LEFTMOUSE', as user may have swapped mouse-buttons */
|
||||
WM_keymap_add_item(keymap, "ANIM_OT_change_frame", ACTIONMOUSE, KM_PRESS, 0, 0);
|
||||
WM_keymap_verify_item(keymap, "ANIM_OT_time_toggle", TKEY, KM_PRESS, KM_CTRL, 0);
|
||||
|
||||
kmi = WM_keymap_add_item(keymap, "WM_OT_context_toggle", TKEY, KM_PRESS, KM_CTRL, 0);
|
||||
RNA_string_set(kmi->ptr, "data_path", "space_data.show_seconds");
|
||||
|
||||
/* preview range */
|
||||
WM_keymap_verify_item(keymap, "ANIM_OT_previewrange_set", PKEY, KM_PRESS, 0, 0);
|
||||
|
@ -99,7 +99,6 @@ void POSE_OT_copy(struct wmOperatorType *ot);
|
||||
void POSE_OT_paste(struct wmOperatorType *ot);
|
||||
|
||||
void POSE_OT_select_all(struct wmOperatorType *ot);
|
||||
void POSE_OT_select_inverse(struct wmOperatorType *ot);
|
||||
void POSE_OT_select_parent(struct wmOperatorType *ot);
|
||||
void POSE_OT_select_hierarchy(struct wmOperatorType *ot);
|
||||
void POSE_OT_select_linked(struct wmOperatorType *ot);
|
||||
|
@ -114,7 +114,6 @@ void ED_operatortypes_armature(void)
|
||||
WM_operatortype_append(POSE_OT_paste);
|
||||
|
||||
WM_operatortype_append(POSE_OT_select_all);
|
||||
WM_operatortype_append(POSE_OT_select_inverse);
|
||||
|
||||
WM_operatortype_append(POSE_OT_select_parent);
|
||||
WM_operatortype_append(POSE_OT_select_hierarchy);
|
||||
@ -322,7 +321,7 @@ void ED_keymap_armature(wmKeyConfig *keyconf)
|
||||
RNA_boolean_set(kmi->ptr, "flipped", 1);
|
||||
|
||||
WM_keymap_add_item(keymap, "POSE_OT_select_all", AKEY, KM_PRESS, 0, 0);
|
||||
WM_keymap_add_item(keymap, "POSE_OT_select_inverse", IKEY, KM_PRESS, KM_CTRL, 0);
|
||||
RNA_enum_set(WM_keymap_add_item(keymap, "POSE_OT_select_all", IKEY, KM_PRESS, KM_CTRL, 0)->ptr, "action", SEL_INVERT);
|
||||
|
||||
WM_keymap_add_item(keymap, "POSE_OT_select_parent", PKEY, KM_PRESS, KM_SHIFT, 0);
|
||||
|
||||
|
@ -5031,38 +5031,6 @@ void POSE_OT_transforms_clear(wmOperatorType *ot)
|
||||
|
||||
/* ***************** selections ********************** */
|
||||
|
||||
static int pose_select_inverse_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
{
|
||||
|
||||
/* Set the flags */
|
||||
CTX_DATA_BEGIN(C, bPoseChannel *, pchan, visible_pose_bones)
|
||||
{
|
||||
if ((pchan->bone->flag & BONE_UNSELECTABLE) == 0) {
|
||||
pchan->bone->flag ^= (BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL);
|
||||
}
|
||||
}
|
||||
CTX_DATA_END;
|
||||
|
||||
WM_event_add_notifier(C, NC_OBJECT|ND_BONE_SELECT, NULL);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
void POSE_OT_select_inverse(wmOperatorType *ot)
|
||||
{
|
||||
/* identifiers */
|
||||
ot->name= "Select Inverse";
|
||||
ot->idname= "POSE_OT_select_inverse";
|
||||
ot->description= "Flip the selection status of bones (selected -> unselected, unselected -> selected)";
|
||||
|
||||
/* api callbacks */
|
||||
ot->exec= pose_select_inverse_exec;
|
||||
ot->poll= ED_operator_posemode;
|
||||
|
||||
/* flags */
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
|
||||
}
|
||||
static int pose_de_select_all_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
int action = RNA_enum_get(op->ptr, "action");
|
||||
|
@ -106,7 +106,6 @@ void SURFACE_OT_primitive_nurbs_surface_torus_add(struct wmOperatorType *ot);
|
||||
void CURVE_OT_de_select_first(struct wmOperatorType *ot);
|
||||
void CURVE_OT_de_select_last(struct wmOperatorType *ot);
|
||||
void CURVE_OT_select_all(struct wmOperatorType *ot);
|
||||
void CURVE_OT_select_inverse(struct wmOperatorType *ot);
|
||||
void CURVE_OT_select_linked(struct wmOperatorType *ot);
|
||||
void CURVE_OT_select_linked_pick(struct wmOperatorType *ot);
|
||||
void CURVE_OT_select_row(struct wmOperatorType *ot);
|
||||
|
@ -116,7 +116,6 @@ void ED_operatortypes_curve(void)
|
||||
WM_operatortype_append(CURVE_OT_de_select_first);
|
||||
WM_operatortype_append(CURVE_OT_de_select_last);
|
||||
WM_operatortype_append(CURVE_OT_select_all);
|
||||
WM_operatortype_append(CURVE_OT_select_inverse);
|
||||
WM_operatortype_append(CURVE_OT_select_linked);
|
||||
WM_operatortype_append(CURVE_OT_select_linked_pick);
|
||||
WM_operatortype_append(CURVE_OT_select_row);
|
||||
@ -224,10 +223,11 @@ void ED_keymap_curve(wmKeyConfig *keyconf)
|
||||
WM_keymap_add_item(keymap, "CURVE_OT_vertex_add", LEFTMOUSE, KM_CLICK, KM_CTRL, 0);
|
||||
|
||||
WM_keymap_add_item(keymap, "CURVE_OT_select_all", AKEY, KM_PRESS, 0, 0);
|
||||
RNA_enum_set(WM_keymap_add_item(keymap, "CURVE_OT_select_all", IKEY, KM_PRESS, KM_CTRL, 0)->ptr, "action", SEL_INVERT);
|
||||
|
||||
WM_keymap_add_item(keymap, "CURVE_OT_select_row", RKEY, KM_PRESS, KM_SHIFT, 0);
|
||||
WM_keymap_add_item(keymap, "CURVE_OT_select_more", PADPLUSKEY, KM_PRESS, KM_CTRL, 0);
|
||||
WM_keymap_add_item(keymap, "CURVE_OT_select_less", PADMINUS, KM_PRESS, KM_CTRL, 0);
|
||||
WM_keymap_add_item(keymap, "CURVE_OT_select_inverse", IKEY, KM_PRESS, KM_CTRL, 0);
|
||||
WM_keymap_add_item(keymap, "CURVE_OT_select_linked", LKEY, KM_PRESS, KM_CTRL, 0);
|
||||
WM_keymap_add_item(keymap, "CURVE_OT_select_linked_pick", LKEY, KM_PRESS, 0, 0);
|
||||
RNA_boolean_set(WM_keymap_add_item(keymap, "CURVE_OT_select_linked_pick", LKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "deselect", 1);
|
||||
|
@ -2749,64 +2749,6 @@ void CURVE_OT_reveal(wmOperatorType *ot)
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
}
|
||||
|
||||
/********************** select invert operator *********************/
|
||||
|
||||
static int select_inverse_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
{
|
||||
Object *obedit= CTX_data_edit_object(C);
|
||||
Curve *cu= obedit->data;
|
||||
ListBase *editnurb= object_editcurve_get(obedit);
|
||||
Nurb *nu;
|
||||
BPoint *bp;
|
||||
BezTriple *bezt;
|
||||
int a;
|
||||
|
||||
cu->lastsel= NULL;
|
||||
|
||||
for(nu= editnurb->first; nu; nu= nu->next) {
|
||||
if(nu->type == CU_BEZIER) {
|
||||
bezt= nu->bezt;
|
||||
a= nu->pntsu;
|
||||
while(a--) {
|
||||
if(bezt->hide==0) {
|
||||
bezt->f2 ^= SELECT; /* always do the center point */
|
||||
if((cu->drawflag & CU_HIDE_HANDLES)==0) {
|
||||
bezt->f1 ^= SELECT;
|
||||
bezt->f3 ^= SELECT;
|
||||
}
|
||||
}
|
||||
bezt++;
|
||||
}
|
||||
}
|
||||
else {
|
||||
bp= nu->bp;
|
||||
a= nu->pntsu*nu->pntsv;
|
||||
while(a--) {
|
||||
swap_selection_bpoint(bp);
|
||||
bp++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
WM_event_add_notifier(C, NC_GEOM|ND_SELECT, obedit->data);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
void CURVE_OT_select_inverse(wmOperatorType *ot)
|
||||
{
|
||||
/* identifiers */
|
||||
ot->name= "Select Inverse";
|
||||
ot->idname= "CURVE_OT_select_inverse";
|
||||
|
||||
/* api callbacks */
|
||||
ot->exec= select_inverse_exec;
|
||||
ot->poll= ED_operator_editsurfcurve;
|
||||
|
||||
/* flags */
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
}
|
||||
|
||||
/********************** subdivide operator *********************/
|
||||
|
||||
/** Divide the line segments associated with the currently selected
|
||||
|
@ -270,8 +270,8 @@ int lasso_inside_edge(int mcords[][2], short moves, int x0, int y0, int x1, int
|
||||
|
||||
/* get 3d region from context, also if mouse is in header or toolbar */
|
||||
struct RegionView3D *ED_view3d_context_rv3d(struct bContext *C);
|
||||
struct ARegion *ED_view3d_context_region_unlock(struct bContext *C);
|
||||
int ED_operator_rv3d_unlock_poll(struct bContext *C);
|
||||
int ED_view3d_context_user_region(struct bContext *C, struct View3D **v3d_r, struct ARegion **ar_r);
|
||||
int ED_operator_rv3d_user_region_poll(struct bContext *C);
|
||||
|
||||
void ED_view3d_init_mats_rv3d(struct Object *ob, struct RegionView3D *rv3d);
|
||||
void ED_view3d_init_mats_rv3d_gl(struct Object *ob, struct RegionView3D *rv3d);
|
||||
|
@ -444,7 +444,7 @@ extern void ui_draw_aligned_panel(struct uiStyle *style, uiBlock *block, rcti *r
|
||||
/* interface_draw.c */
|
||||
extern void ui_dropshadow(rctf *rct, float radius, float aspect, int select);
|
||||
|
||||
void ui_draw_gradient(rcti *rect, float *hsv, int type, float alpha);
|
||||
void ui_draw_gradient(rcti *rect, const float hsv[3], int type, float alpha);
|
||||
|
||||
void ui_draw_but_HISTOGRAM(ARegion *ar, uiBut *but, struct uiWidgetColors *wcol, rcti *rect);
|
||||
void ui_draw_but_WAVEFORM(ARegion *ar, uiBut *but, struct uiWidgetColors *wcol, rcti *rect);
|
||||
|
@ -130,9 +130,12 @@ typedef struct uiWidgetType {
|
||||
static float cornervec[WIDGET_CURVE_RESOLU][2]= {{0.0, 0.0}, {0.195, 0.02}, {0.383, 0.067}, {0.55, 0.169},
|
||||
{0.707, 0.293}, {0.831, 0.45}, {0.924, 0.617}, {0.98, 0.805}, {1.0, 1.0}};
|
||||
|
||||
static float jit[8][2]= {{0.468813 , -0.481430}, {-0.155755 , -0.352820},
|
||||
{0.219306 , -0.238501}, {-0.393286 , -0.110949}, {-0.024699 , 0.013908},
|
||||
{0.343805 , 0.147431}, {-0.272855 , 0.269918}, {0.095909 , 0.388710}};
|
||||
#define WIDGET_AA_JITTER 8
|
||||
static float jit[WIDGET_AA_JITTER][2]= {
|
||||
{ 0.468813 , -0.481430}, {-0.155755 , -0.352820},
|
||||
{ 0.219306 , -0.238501}, {-0.393286 , -0.110949},
|
||||
{-0.024699 , 0.013908}, { 0.343805 , 0.147431},
|
||||
{-0.272855 , 0.269918}, { 0.095909 , 0.388710}};
|
||||
|
||||
static float num_tria_vert[3][2]= {
|
||||
{-0.352077, 0.532607}, {-0.352077, -0.549313}, {0.330000, -0.008353}};
|
||||
@ -192,7 +195,7 @@ void ui_draw_anti_tria(float x1, float y1, float x2, float y2, float x3, float y
|
||||
glVertexPointer(2, GL_FLOAT, 0, tri_arr);
|
||||
|
||||
/* for each AA step */
|
||||
for(j=0; j<8; j++) {
|
||||
for (j = 0; j < WIDGET_AA_JITTER; j++) {
|
||||
glTranslatef(1.0f * jit[j][0], 1.0f * jit[j][1], 0.0f);
|
||||
glDrawArrays(GL_TRIANGLES, 0, 3);
|
||||
glTranslatef(-1.0f * jit[j][0], -1.0f * jit[j][1], 0.0f);
|
||||
@ -212,7 +215,7 @@ void ui_draw_anti_roundbox(int mode, float minx, float miny, float maxx, float m
|
||||
color[3] *= 0.125f;
|
||||
glColor4fv(color);
|
||||
|
||||
for(j=0; j<8; j++) {
|
||||
for (j = 0; j < WIDGET_AA_JITTER; j++) {
|
||||
glTranslatef(1.0f * jit[j][0], 1.0f * jit[j][1], 0.0f);
|
||||
uiDrawBox(mode, minx, miny, maxx, maxy, rad);
|
||||
glTranslatef(-1.0f * jit[j][0], -1.0f * jit[j][1], 0.0f);
|
||||
@ -749,6 +752,11 @@ static void widgetbase_draw(uiWidgetBase *wtb, uiWidgetColors *wcol)
|
||||
float quad_strip[WIDGET_SIZE_MAX*2+2][2]; /* + 2 because the last pair is wrapped */
|
||||
float quad_strip_emboss[WIDGET_SIZE_MAX*2][2]; /* only for emboss */
|
||||
|
||||
const unsigned char tcol[4] = {wcol->outline[0],
|
||||
wcol->outline[1],
|
||||
wcol->outline[2],
|
||||
UCHAR_MAX / WIDGET_AA_JITTER};
|
||||
|
||||
widget_verts_to_quad_strip(wtb, wtb->totvert, quad_strip);
|
||||
|
||||
if(wtb->emboss) {
|
||||
@ -757,11 +765,11 @@ static void widgetbase_draw(uiWidgetBase *wtb, uiWidgetColors *wcol)
|
||||
|
||||
glEnableClientState(GL_VERTEX_ARRAY);
|
||||
|
||||
for(j=0; j<8; j++) {
|
||||
for (j = 0; j < WIDGET_AA_JITTER; j++) {
|
||||
glTranslatef(1.0f * jit[j][0], 1.0f * jit[j][1], 0.0f);
|
||||
|
||||
/* outline */
|
||||
glColor4ub(wcol->outline[0], wcol->outline[1], wcol->outline[2], 32);
|
||||
glColor4ubv(tcol);
|
||||
|
||||
glVertexPointer(2, GL_FLOAT, 0, quad_strip);
|
||||
glDrawArrays(GL_QUAD_STRIP, 0, wtb->totvert*2 + 2);
|
||||
@ -782,16 +790,20 @@ static void widgetbase_draw(uiWidgetBase *wtb, uiWidgetColors *wcol)
|
||||
|
||||
/* decoration */
|
||||
if(wtb->tria1.tot || wtb->tria2.tot) {
|
||||
const unsigned char tcol[4] = {wcol->item[0],
|
||||
wcol->item[1],
|
||||
wcol->item[2],
|
||||
(unsigned char)((float)wcol->item[3] / WIDGET_AA_JITTER)};
|
||||
/* for each AA step */
|
||||
for(j=0; j<8; j++) {
|
||||
for (j = 0; j < WIDGET_AA_JITTER; j++) {
|
||||
glTranslatef(1.0f * jit[j][0], 1.0f * jit[j][1], 0.0f);
|
||||
|
||||
if(wtb->tria1.tot) {
|
||||
glColor4ub(wcol->item[0], wcol->item[1], wcol->item[2], 32);
|
||||
glColor4ubv(tcol);
|
||||
widget_trias_draw(&wtb->tria1);
|
||||
}
|
||||
if(wtb->tria2.tot) {
|
||||
glColor4ub(wcol->item[0], wcol->item[1], wcol->item[2], 32);
|
||||
glColor4ubv(tcol);
|
||||
widget_trias_draw(&wtb->tria2);
|
||||
}
|
||||
|
||||
@ -1875,7 +1887,7 @@ static void ui_draw_but_HSVCIRCLE(uiBut *but, uiWidgetColors *wcol, rcti *rect)
|
||||
/* ************ custom buttons, old stuff ************** */
|
||||
|
||||
/* draws in resolution of 20x4 colors */
|
||||
void ui_draw_gradient(rcti *rect, float *hsv, int type, float alpha)
|
||||
void ui_draw_gradient(rcti *rect, const float hsv[3], int type, float alpha)
|
||||
{
|
||||
int a;
|
||||
float h= hsv[0], s= hsv[1], v= hsv[2];
|
||||
@ -2489,10 +2501,8 @@ static void widget_swatch(uiBut *but, uiWidgetColors *wcol, rcti *rect, int stat
|
||||
if (color_profile)
|
||||
linearrgb_to_srgb_v3_v3(col, col);
|
||||
|
||||
wcol->inner[0]= FTOCHAR(col[0]);
|
||||
wcol->inner[1]= FTOCHAR(col[1]);
|
||||
wcol->inner[2]= FTOCHAR(col[2]);
|
||||
wcol->inner[3]= FTOCHAR(col[3]);
|
||||
F4TOCHAR4(col, wcol->inner);
|
||||
|
||||
wcol->shaded = 0;
|
||||
wcol->alpha_check = (wcol->inner[3] < 255);
|
||||
|
||||
|
@ -1688,34 +1688,6 @@ void EDBM_select_swap(BMEditMesh *em) /* exported for UV */
|
||||
// if (EM_texFaceCheck())
|
||||
}
|
||||
|
||||
static int select_inverse_mesh_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
{
|
||||
Object *obedit= CTX_data_edit_object(C);
|
||||
BMEditMesh *em= ((Mesh *)obedit->data)->edit_btmesh;
|
||||
|
||||
EDBM_select_swap(em);
|
||||
|
||||
WM_event_add_notifier(C, NC_GEOM|ND_SELECT, obedit);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
void MESH_OT_select_inverse(wmOperatorType *ot)
|
||||
{
|
||||
/* identifiers */
|
||||
ot->name= "Select Inverse";
|
||||
ot->idname= "MESH_OT_select_inverse";
|
||||
ot->description= "Select inverse of (un)selected vertices, edges or faces";
|
||||
|
||||
/* api callbacks */
|
||||
ot->exec= select_inverse_mesh_exec;
|
||||
ot->poll= ED_operator_editmesh;
|
||||
|
||||
/* flags */
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
}
|
||||
|
||||
|
||||
static int select_linked_pick_invoke(bContext *C, wmOperator *op, wmEvent *event)
|
||||
{
|
||||
Object *obedit= CTX_data_edit_object(C);
|
||||
|
@ -205,7 +205,6 @@ void MESH_OT_select_all(struct wmOperatorType *ot);
|
||||
void MESH_OT_bmesh_test(struct wmOperatorType *ot);
|
||||
void MESH_OT_select_more(struct wmOperatorType *ot);
|
||||
void MESH_OT_select_less(struct wmOperatorType *ot);
|
||||
void MESH_OT_select_inverse(struct wmOperatorType *ot);
|
||||
void MESH_OT_select_non_manifold(struct wmOperatorType *ot);
|
||||
void MESH_OT_select_linked(struct wmOperatorType *ot);
|
||||
void MESH_OT_select_linked_pick(struct wmOperatorType *ot);
|
||||
|
@ -63,7 +63,6 @@ void ED_operatortypes_mesh(void)
|
||||
WM_operatortype_append(MESH_OT_select_all);
|
||||
WM_operatortype_append(MESH_OT_select_more);
|
||||
WM_operatortype_append(MESH_OT_select_less);
|
||||
WM_operatortype_append(MESH_OT_select_inverse);
|
||||
WM_operatortype_append(MESH_OT_select_non_manifold);
|
||||
WM_operatortype_append(MESH_OT_select_linked);
|
||||
WM_operatortype_append(MESH_OT_select_linked_pick);
|
||||
@ -255,25 +254,30 @@ void ED_keymap_mesh(wmKeyConfig *keyconf)
|
||||
|
||||
/* selecting */
|
||||
/* standard mouse selection goes via space_view3d */
|
||||
WM_keymap_add_item(keymap, "MESH_OT_loop_select", SELECTMOUSE, KM_PRESS, KM_ALT, 0);
|
||||
kmi= WM_keymap_add_item(keymap, "MESH_OT_loop_select", SELECTMOUSE, KM_PRESS, KM_SHIFT|KM_ALT, 0);
|
||||
RNA_boolean_set(kmi->ptr, "extend", 1);
|
||||
kmi = WM_keymap_add_item(keymap, "MESH_OT_loop_select", SELECTMOUSE, KM_PRESS, KM_ALT, 0);
|
||||
RNA_boolean_set(kmi->ptr, "extend", FALSE);
|
||||
kmi = WM_keymap_add_item(keymap, "MESH_OT_loop_select", SELECTMOUSE, KM_PRESS, KM_SHIFT|KM_ALT, 0);
|
||||
RNA_boolean_set(kmi->ptr, "extend", TRUE);
|
||||
|
||||
WM_keymap_add_item(keymap, "MESH_OT_edgering_select", SELECTMOUSE, KM_PRESS, KM_ALT|KM_CTRL, 0);
|
||||
kmi= WM_keymap_add_item(keymap, "MESH_OT_edgering_select", SELECTMOUSE, KM_PRESS, KM_SHIFT|KM_ALT|KM_CTRL, 0);
|
||||
RNA_boolean_set(kmi->ptr, "extend", 1);
|
||||
kmi = WM_keymap_add_item(keymap, "MESH_OT_edgering_select", SELECTMOUSE, KM_PRESS, KM_ALT|KM_CTRL, 0);
|
||||
RNA_boolean_set(kmi->ptr, "extend", FALSE);
|
||||
kmi = WM_keymap_add_item(keymap, "MESH_OT_edgering_select", SELECTMOUSE, KM_PRESS, KM_SHIFT|KM_ALT|KM_CTRL, 0);
|
||||
RNA_boolean_set(kmi->ptr, "extend", TRUE);
|
||||
|
||||
WM_keymap_add_item(keymap, "MESH_OT_select_shortest_path", SELECTMOUSE, KM_PRESS, KM_CTRL, 0);
|
||||
|
||||
WM_keymap_add_item(keymap, "MESH_OT_select_all", AKEY, KM_PRESS, 0, 0);
|
||||
RNA_enum_set(WM_keymap_add_item(keymap, "MESH_OT_select_all", IKEY, KM_PRESS, KM_CTRL, 0)->ptr, "action", SEL_INVERT);
|
||||
|
||||
WM_keymap_add_item(keymap, "MESH_OT_select_more", PADPLUSKEY, KM_PRESS, KM_CTRL, 0);
|
||||
WM_keymap_add_item(keymap, "MESH_OT_select_less", PADMINUS, KM_PRESS, KM_CTRL, 0);
|
||||
WM_keymap_add_item(keymap, "MESH_OT_select_inverse", IKEY, KM_PRESS, KM_CTRL, 0);
|
||||
WM_keymap_add_item(keymap, "MESH_OT_select_non_manifold", MKEY, KM_PRESS, (KM_CTRL|KM_SHIFT|KM_ALT), 0);
|
||||
|
||||
WM_keymap_add_item(keymap, "MESH_OT_select_linked", LKEY, KM_PRESS, KM_CTRL, 0);
|
||||
WM_keymap_add_item(keymap, "MESH_OT_select_linked_pick", LKEY, KM_PRESS, 0, 0);
|
||||
RNA_boolean_set(WM_keymap_add_item(keymap, "MESH_OT_select_linked_pick", LKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "deselect", 1);
|
||||
kmi = WM_keymap_add_item(keymap, "MESH_OT_select_linked_pick", LKEY, KM_PRESS, 0, 0);
|
||||
RNA_boolean_set(kmi->ptr, "deselect", FALSE);
|
||||
kmi = WM_keymap_add_item(keymap, "MESH_OT_select_linked_pick", LKEY, KM_PRESS, KM_SHIFT, 0);
|
||||
RNA_boolean_set(kmi->ptr, "deselect", TRUE);
|
||||
|
||||
WM_keymap_add_item(keymap, "MESH_OT_faces_select_linked_flat", FKEY, KM_PRESS, (KM_CTRL|KM_SHIFT|KM_ALT), 0);
|
||||
|
||||
@ -283,13 +287,17 @@ void ED_keymap_mesh(wmKeyConfig *keyconf)
|
||||
WM_keymap_add_menu(keymap, "VIEW3D_MT_edit_mesh_select_mode", TABKEY, KM_PRESS, KM_CTRL, 0);
|
||||
|
||||
/* hide */
|
||||
WM_keymap_add_item(keymap, "MESH_OT_hide", HKEY, KM_PRESS, 0, 0);
|
||||
RNA_boolean_set(WM_keymap_add_item(keymap, "MESH_OT_hide", HKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "unselected", 1);
|
||||
kmi = WM_keymap_add_item(keymap, "MESH_OT_hide", HKEY, KM_PRESS, 0, 0);
|
||||
RNA_boolean_set(kmi->ptr, "unselected", FALSE);
|
||||
kmi = WM_keymap_add_item(keymap, "MESH_OT_hide", HKEY, KM_PRESS, KM_SHIFT, 0);
|
||||
RNA_boolean_set(kmi->ptr, "unselected", TRUE);
|
||||
WM_keymap_add_item(keymap, "MESH_OT_reveal", HKEY, KM_PRESS, KM_ALT, 0);
|
||||
|
||||
/* tools */
|
||||
WM_keymap_add_item(keymap, "MESH_OT_normals_make_consistent", NKEY, KM_PRESS, KM_CTRL, 0);
|
||||
RNA_boolean_set(WM_keymap_add_item(keymap, "MESH_OT_normals_make_consistent", NKEY, KM_PRESS, KM_SHIFT|KM_CTRL, 0)->ptr, "inside", 1);
|
||||
kmi = WM_keymap_add_item(keymap, "MESH_OT_normals_make_consistent", NKEY, KM_PRESS, KM_CTRL, 0);
|
||||
RNA_boolean_set(kmi->ptr, "inside", FALSE);
|
||||
kmi = WM_keymap_add_item(keymap, "MESH_OT_normals_make_consistent", NKEY, KM_PRESS, KM_SHIFT|KM_CTRL, 0);
|
||||
RNA_boolean_set(kmi->ptr, "inside", TRUE);
|
||||
|
||||
WM_keymap_add_item(keymap, "VIEW3D_OT_edit_mesh_extrude_move_normal", EKEY, KM_PRESS, 0, 0); /* python operator */
|
||||
WM_keymap_add_menu(keymap, "VIEW3D_MT_edit_mesh_extrude", EKEY, KM_PRESS, KM_ALT, 0);
|
||||
@ -321,8 +329,10 @@ void ED_keymap_mesh(wmKeyConfig *keyconf)
|
||||
WM_keymap_add_item(keymap, "MESH_OT_vert_connect", YKEY, KM_PRESS, 0, 0);
|
||||
|
||||
/* use KM_CLICK because same key is used for tweaks */
|
||||
WM_keymap_add_item(keymap, "MESH_OT_dupli_extrude_cursor", ACTIONMOUSE, KM_CLICK, KM_CTRL, 0);
|
||||
RNA_boolean_set(WM_keymap_add_item(keymap, "MESH_OT_dupli_extrude_cursor", ACTIONMOUSE, KM_CLICK, KM_SHIFT|KM_CTRL, 0)->ptr, "rotate_source", 0);
|
||||
kmi = WM_keymap_add_item(keymap, "MESH_OT_dupli_extrude_cursor", ACTIONMOUSE, KM_CLICK, KM_CTRL, 0);
|
||||
RNA_boolean_set(kmi->ptr, "rotate_source", TRUE);
|
||||
kmi = WM_keymap_add_item(keymap, "MESH_OT_dupli_extrude_cursor", ACTIONMOUSE, KM_CLICK, KM_SHIFT|KM_CTRL, 0);
|
||||
RNA_boolean_set(kmi->ptr, "rotate_source", FALSE);
|
||||
|
||||
WM_keymap_add_item(keymap, "MESH_OT_delete", XKEY, KM_PRESS, 0, 0);
|
||||
WM_keymap_add_item(keymap, "MESH_OT_delete", DELKEY, KM_PRESS, 0, 0);
|
||||
|
@ -181,45 +181,6 @@ void MBALL_OT_select_all(wmOperatorType *ot)
|
||||
WM_operator_properties_select_all(ot);
|
||||
}
|
||||
|
||||
/***************************** Select inverse operator *****************************/
|
||||
|
||||
/* Invert metaball selection */
|
||||
static int select_inverse_metaelems_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
{
|
||||
Object *obedit= CTX_data_edit_object(C);
|
||||
MetaBall *mb = (MetaBall*)obedit->data;
|
||||
MetaElem *ml;
|
||||
|
||||
ml= mb->editelems->first;
|
||||
if(ml) {
|
||||
while(ml) {
|
||||
if(ml->flag & SELECT)
|
||||
ml->flag &= ~SELECT;
|
||||
else
|
||||
ml->flag |= SELECT;
|
||||
ml= ml->next;
|
||||
}
|
||||
WM_event_add_notifier(C, NC_GEOM|ND_SELECT, mb);
|
||||
}
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
void MBALL_OT_select_inverse_metaelems(wmOperatorType *ot)
|
||||
{
|
||||
/* identifiers */
|
||||
ot->name= "Inverse";
|
||||
ot->description= "Select inverse of (un)selected metaelements";
|
||||
ot->idname= "MBALL_OT_select_inverse_metaelems";
|
||||
|
||||
/* callback functions */
|
||||
ot->exec= select_inverse_metaelems_exec;
|
||||
ot->poll= ED_operator_editmball;
|
||||
|
||||
/* flags */
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
}
|
||||
|
||||
/***************************** Select random operator *****************************/
|
||||
|
||||
/* Random metaball selection */
|
||||
|
@ -43,7 +43,6 @@ void MBALL_OT_delete_metaelems(struct wmOperatorType *ot);
|
||||
void MBALL_OT_duplicate_metaelems(struct wmOperatorType *ot);
|
||||
|
||||
void MBALL_OT_select_all(struct wmOperatorType *ot);
|
||||
void MBALL_OT_select_inverse_metaelems(struct wmOperatorType *ot);
|
||||
void MBALL_OT_select_random_metaelems(struct wmOperatorType *ot);
|
||||
|
||||
#endif
|
||||
|
@ -48,7 +48,6 @@ void ED_operatortypes_metaball(void)
|
||||
WM_operatortype_append(MBALL_OT_reveal_metaelems);
|
||||
|
||||
WM_operatortype_append(MBALL_OT_select_all);
|
||||
WM_operatortype_append(MBALL_OT_select_inverse_metaelems);
|
||||
WM_operatortype_append(MBALL_OT_select_random_metaelems);
|
||||
}
|
||||
|
||||
@ -70,6 +69,6 @@ void ED_keymap_metaball(wmKeyConfig *keyconf)
|
||||
WM_keymap_add_item(keymap, "MBALL_OT_duplicate_metaelems", DKEY, KM_PRESS, KM_SHIFT, 0);
|
||||
|
||||
WM_keymap_add_item(keymap, "MBALL_OT_select_all", AKEY, KM_PRESS, 0, 0);
|
||||
WM_keymap_add_item(keymap, "MBALL_OT_select_inverse_metaelems", IKEY, KM_PRESS, KM_CTRL, 0);
|
||||
RNA_enum_set(WM_keymap_add_item(keymap, "MBALL_OT_select_all", IKEY, KM_PRESS, KM_CTRL, 0)->ptr, "action", SEL_INVERT);
|
||||
}
|
||||
|
||||
|
@ -229,15 +229,13 @@ static void object_add_generic_invoke_options(bContext *C, wmOperator *op)
|
||||
|
||||
if(v3d) {
|
||||
layer = (v3d->scenelock && !v3d->localvd)? scene->layact: v3d->layact;
|
||||
|
||||
for(a=0; a<20; a++)
|
||||
values[a]= (layer & (1<<a));
|
||||
}
|
||||
else {
|
||||
layer = scene->layact;
|
||||
}
|
||||
|
||||
for(a=0; a<20; a++)
|
||||
values[a]= (layer & (1<<a));
|
||||
for (a=0; a<20; a++) {
|
||||
values[a]= (layer & (1<<a));
|
||||
}
|
||||
|
||||
RNA_boolean_set_array(op->ptr, "layers", values);
|
||||
|
@ -96,7 +96,6 @@ void OBJECT_OT_game_physics_copy(struct wmOperatorType *ot);
|
||||
|
||||
/* object_select.c */
|
||||
void OBJECT_OT_select_all(struct wmOperatorType *ot);
|
||||
void OBJECT_OT_select_inverse(struct wmOperatorType *ot);
|
||||
void OBJECT_OT_select_random(struct wmOperatorType *ot);
|
||||
void OBJECT_OT_select_by_type(struct wmOperatorType *ot);
|
||||
void OBJECT_OT_select_by_layer(struct wmOperatorType *ot);
|
||||
|
@ -94,7 +94,6 @@ void ED_operatortypes_object(void)
|
||||
WM_operatortype_append(OBJECT_OT_make_links_data);
|
||||
WM_operatortype_append(OBJECT_OT_move_to_layer);
|
||||
|
||||
WM_operatortype_append(OBJECT_OT_select_inverse);
|
||||
WM_operatortype_append(OBJECT_OT_select_random);
|
||||
WM_operatortype_append(OBJECT_OT_select_all);
|
||||
WM_operatortype_append(OBJECT_OT_select_same_group);
|
||||
@ -298,7 +297,8 @@ void ED_keymap_object(wmKeyConfig *keyconf)
|
||||
WM_keymap_add_item(keymap, "VIEW3D_OT_game_start", PKEY, KM_PRESS, 0, 0);
|
||||
|
||||
WM_keymap_add_item(keymap, "OBJECT_OT_select_all", AKEY, KM_PRESS, 0, 0);
|
||||
WM_keymap_add_item(keymap, "OBJECT_OT_select_inverse", IKEY, KM_PRESS, KM_CTRL, 0);
|
||||
RNA_enum_set(WM_keymap_add_item(keymap, "OBJECT_OT_select_all", IKEY, KM_PRESS, KM_CTRL, 0)->ptr, "action", SEL_INVERT);
|
||||
|
||||
WM_keymap_add_item(keymap, "OBJECT_OT_select_linked", LKEY, KM_PRESS, KM_SHIFT, 0);
|
||||
WM_keymap_add_item(keymap, "OBJECT_OT_select_grouped", GKEY, KM_PRESS, KM_SHIFT, 0);
|
||||
WM_keymap_add_item(keymap, "OBJECT_OT_select_mirror", MKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0);
|
||||
|
@ -739,41 +739,6 @@ void OBJECT_OT_select_by_layer(wmOperatorType *ot)
|
||||
RNA_def_int(ot->srna, "layers", 1, 1, 20, "Layer", "", 1, 20);
|
||||
}
|
||||
|
||||
/************************** Select Inverse *************************/
|
||||
|
||||
static int object_select_inverse_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
{
|
||||
CTX_DATA_BEGIN(C, Base*, base, visible_bases) {
|
||||
if (base->flag & SELECT)
|
||||
ED_base_object_select(base, BA_DESELECT);
|
||||
else
|
||||
ED_base_object_select(base, BA_SELECT);
|
||||
}
|
||||
CTX_DATA_END;
|
||||
|
||||
/* undo? */
|
||||
WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, CTX_data_scene(C));
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
void OBJECT_OT_select_inverse(wmOperatorType *ot)
|
||||
{
|
||||
|
||||
/* identifiers */
|
||||
ot->name= "Select Inverse";
|
||||
ot->description = "Invert selection of all visible objects";
|
||||
ot->idname= "OBJECT_OT_select_inverse";
|
||||
|
||||
/* api callbacks */
|
||||
ot->exec= object_select_inverse_exec;
|
||||
ot->poll= objects_selectable_poll;
|
||||
|
||||
/* flags */
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
|
||||
}
|
||||
|
||||
/**************************** (De)select All ****************************/
|
||||
|
||||
static int object_select_all_exec(bContext *C, wmOperator *op)
|
||||
|
@ -254,13 +254,21 @@ static PTCacheEdit *pe_get_current(Scene *scene, Object *ob, int create)
|
||||
}
|
||||
else if(pset->edittype == PE_TYPE_SOFTBODY && pid->type == PTCACHE_TYPE_SOFTBODY) {
|
||||
if(create && pid->cache->flag & PTCACHE_BAKED && !pid->cache->edit)
|
||||
{
|
||||
pset->flag |= PE_FADE_TIME;
|
||||
// NICE TO HAVE but doesn't work: pset->brushtype = PE_BRUSH_COMB;
|
||||
PE_create_particle_edit(scene, ob, pid->cache, NULL);
|
||||
}
|
||||
edit = pid->cache->edit;
|
||||
break;
|
||||
}
|
||||
else if(pset->edittype == PE_TYPE_CLOTH && pid->type == PTCACHE_TYPE_CLOTH) {
|
||||
if(create && pid->cache->flag & PTCACHE_BAKED && !pid->cache->edit)
|
||||
{
|
||||
pset->flag |= PE_FADE_TIME;
|
||||
// NICE TO HAVE but doesn't work: pset->brushtype = PE_BRUSH_COMB;
|
||||
PE_create_particle_edit(scene, ob, pid->cache, NULL);
|
||||
}
|
||||
edit = pid->cache->edit;
|
||||
break;
|
||||
}
|
||||
@ -1872,43 +1880,6 @@ void PARTICLE_OT_select_more(wmOperatorType *ot)
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
}
|
||||
|
||||
static int select_inverse_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
{
|
||||
PEData data;
|
||||
PTCacheEdit *edit;
|
||||
POINT_P; KEY_K;
|
||||
|
||||
PE_set_data(C, &data);
|
||||
|
||||
edit= PE_get_current(data.scene, data.ob);
|
||||
|
||||
LOOP_VISIBLE_POINTS {
|
||||
LOOP_KEYS {
|
||||
key->flag ^= PEK_SELECT;
|
||||
point->flag |= PEP_EDIT_RECALC; /* redraw selection only */
|
||||
}
|
||||
}
|
||||
|
||||
PE_update_selection(data.scene, data.ob, 1);
|
||||
WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE|NA_SELECTED, data.ob);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
void PARTICLE_OT_select_inverse(wmOperatorType *ot)
|
||||
{
|
||||
/* identifiers */
|
||||
ot->name= "Select Inverse";
|
||||
ot->idname= "PARTICLE_OT_select_inverse";
|
||||
|
||||
/* api callbacks */
|
||||
ot->exec= select_inverse_exec;
|
||||
ot->poll= PE_poll;
|
||||
|
||||
/* flags */
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
}
|
||||
|
||||
/************************ rekey operator ************************/
|
||||
|
||||
static void rekey_particle(PEData *data, int pa_index)
|
||||
@ -3659,7 +3630,13 @@ static void brush_edit_apply(bContext *C, wmOperator *op, PointerRNA *itemptr)
|
||||
PE_update_object(scene, ob, 1);
|
||||
}
|
||||
|
||||
WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE|NA_EDITED, ob);
|
||||
if(edit->psys)
|
||||
WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE|NA_EDITED, ob);
|
||||
else
|
||||
{
|
||||
DAG_id_tag_update(&ob->id, OB_RECALC_DATA);
|
||||
WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob);
|
||||
}
|
||||
|
||||
bedit->lastmouse[0]= mouse[0];
|
||||
bedit->lastmouse[1]= mouse[1];
|
||||
|
@ -42,7 +42,6 @@ void PARTICLE_OT_select_tips(struct wmOperatorType *ot);
|
||||
void PARTICLE_OT_select_linked(struct wmOperatorType *ot);
|
||||
void PARTICLE_OT_select_less(struct wmOperatorType *ot);
|
||||
void PARTICLE_OT_select_more(struct wmOperatorType *ot);
|
||||
void PARTICLE_OT_select_inverse(struct wmOperatorType *ot);
|
||||
|
||||
void PARTICLE_OT_hide(struct wmOperatorType *ot);
|
||||
void PARTICLE_OT_reveal(struct wmOperatorType *ot);
|
||||
|
@ -51,7 +51,6 @@ static void operatortypes_particle(void)
|
||||
WM_operatortype_append(PARTICLE_OT_select_linked);
|
||||
WM_operatortype_append(PARTICLE_OT_select_less);
|
||||
WM_operatortype_append(PARTICLE_OT_select_more);
|
||||
WM_operatortype_append(PARTICLE_OT_select_inverse);
|
||||
|
||||
WM_operatortype_append(PARTICLE_OT_hide);
|
||||
WM_operatortype_append(PARTICLE_OT_reveal);
|
||||
@ -95,11 +94,12 @@ static void keymap_particle(wmKeyConfig *keyconf)
|
||||
keymap->poll= PE_poll;
|
||||
|
||||
WM_keymap_add_item(keymap, "PARTICLE_OT_select_all", AKEY, KM_PRESS, 0, 0);
|
||||
RNA_enum_set(WM_keymap_add_item(keymap, "PARTICLE_OT_select_all", IKEY, KM_PRESS, KM_CTRL, 0)->ptr, "action", SEL_INVERT);
|
||||
|
||||
WM_keymap_add_item(keymap, "PARTICLE_OT_select_more", PADPLUSKEY, KM_PRESS, KM_CTRL, 0);
|
||||
WM_keymap_add_item(keymap, "PARTICLE_OT_select_less", PADMINUS, KM_PRESS, KM_CTRL, 0);
|
||||
WM_keymap_add_item(keymap, "PARTICLE_OT_select_linked", LKEY, KM_PRESS, 0, 0);
|
||||
RNA_boolean_set(WM_keymap_add_item(keymap, "PARTICLE_OT_select_linked", LKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "deselect", 1);
|
||||
WM_keymap_add_item(keymap, "PARTICLE_OT_select_inverse", IKEY, KM_PRESS, KM_CTRL, 0);
|
||||
|
||||
WM_keymap_add_item(keymap, "PARTICLE_OT_delete", XKEY, KM_PRESS, 0, 0);
|
||||
WM_keymap_add_item(keymap, "PARTICLE_OT_delete", DELKEY, KM_PRESS, 0, 0);
|
||||
|
@ -83,6 +83,9 @@ typedef struct OGLRender {
|
||||
RegionView3D *rv3d;
|
||||
ARegion *ar;
|
||||
|
||||
ScrArea *prevsa;
|
||||
ARegion *prevar;
|
||||
|
||||
short obcenter_dia_back; /* temp overwrite */
|
||||
|
||||
Image *ima;
|
||||
@ -250,6 +253,8 @@ static int screen_opengl_render_init(bContext *C, wmOperator *op)
|
||||
{
|
||||
/* new render clears all callbacks */
|
||||
Scene *scene= CTX_data_scene(C);
|
||||
ScrArea *prevsa= CTX_wm_area(C);
|
||||
ARegion *prevar= CTX_wm_region(C);
|
||||
RenderResult *rr;
|
||||
GPUOffScreen *ofs;
|
||||
OGLRender *oglrender;
|
||||
@ -318,10 +323,12 @@ static int screen_opengl_render_init(bContext *C, wmOperator *op)
|
||||
oglrender->obcenter_dia_back = U.obcenter_dia;
|
||||
U.obcenter_dia = 0;
|
||||
|
||||
oglrender->prevsa= prevsa;
|
||||
oglrender->prevar= prevar;
|
||||
|
||||
if(is_view_context) {
|
||||
oglrender->v3d= CTX_wm_view3d(C);
|
||||
oglrender->ar= CTX_wm_region(C);
|
||||
oglrender->rv3d= CTX_wm_region_view3d(C);
|
||||
ED_view3d_context_user_region(C, &oglrender->v3d, &oglrender->ar); /* so quad view renders camera */
|
||||
oglrender->rv3d= oglrender->ar->regiondata;
|
||||
|
||||
/* MUST be cleared on exit */
|
||||
oglrender->scene->customdata_mask_modal = (ED_view3d_datamask(oglrender->scene, oglrender->v3d) |
|
||||
@ -381,6 +388,9 @@ static void screen_opengl_render_end(bContext *C, OGLRender *oglrender)
|
||||
|
||||
oglrender->scene->customdata_mask_modal= 0;
|
||||
|
||||
CTX_wm_area_set(C, oglrender->prevsa);
|
||||
CTX_wm_region_set(C, oglrender->prevar);
|
||||
|
||||
MEM_freeN(oglrender);
|
||||
}
|
||||
|
||||
@ -488,7 +498,8 @@ static int screen_opengl_render_anim_step(bContext *C, wmOperator *op)
|
||||
}
|
||||
|
||||
if(BKE_imtype_is_movie(scene->r.im_format.imtype)) {
|
||||
ok= oglrender->mh->append_movie(&scene->r, CFRA, (int*)ibuf->rect, oglrender->sizex, oglrender->sizey, oglrender->reports);
|
||||
ok= oglrender->mh->append_movie(&scene->r, SFRA, CFRA, (int*)ibuf->rect,
|
||||
oglrender->sizex, oglrender->sizey, oglrender->reports);
|
||||
if(ok) {
|
||||
printf("Append frame %d", scene->r.cfra);
|
||||
BKE_reportf(op->reports, RPT_INFO, "Appended frame: %d", scene->r.cfra);
|
||||
|
@ -302,7 +302,9 @@ static void screenshot_startjob(void *sjv, short *stop, short *do_update, float
|
||||
if(sj->dumprect) {
|
||||
|
||||
if(mh) {
|
||||
if(mh->append_movie(&rd, rd.cfra, (int *)sj->dumprect, sj->dumpsx, sj->dumpsy, &sj->reports)) {
|
||||
if(mh->append_movie(&rd, rd.sfra, rd.cfra, (int *)sj->dumprect,
|
||||
sj->dumpsx, sj->dumpsy, &sj->reports))
|
||||
{
|
||||
BKE_reportf(&sj->reports, RPT_INFO, "Appended frame: %d", rd.cfra);
|
||||
printf("Appended frame %d\n", rd.cfra);
|
||||
} else
|
||||
|
@ -1784,16 +1784,7 @@ static void scale_tri(float insetCos[4][3], float *origCos[4], const float inset
|
||||
}
|
||||
#endif //PROJ_DEBUG_NOSEAMBLEED
|
||||
|
||||
static float Vec2Lenf_nosqrt(const float *v1, const float *v2)
|
||||
{
|
||||
float x, y;
|
||||
|
||||
x = v1[0]-v2[0];
|
||||
y = v1[1]-v2[1];
|
||||
return x*x+y*y;
|
||||
}
|
||||
|
||||
static float Vec2Lenf_nosqrt_other(const float *v1, const float v2_1, const float v2_2)
|
||||
static float len_squared_v2v2_alt(const float *v1, const float v2_1, const float v2_2)
|
||||
{
|
||||
float x, y;
|
||||
|
||||
@ -1802,7 +1793,7 @@ static float Vec2Lenf_nosqrt_other(const float *v1, const float v2_1, const floa
|
||||
return x*x+y*y;
|
||||
}
|
||||
|
||||
/* note, use a squared value so we can use Vec2Lenf_nosqrt
|
||||
/* note, use a squared value so we can use len_squared_v2v2
|
||||
* be sure that you have done a bounds check first or this may fail */
|
||||
/* only give bucket_bounds as an arg because we need it elsewhere */
|
||||
static int project_bucket_isect_circle(const float cent[2], const float radius_squared, rctf *bucket_bounds)
|
||||
@ -1826,21 +1817,21 @@ static int project_bucket_isect_circle(const float cent[2], const float radius_s
|
||||
if (cent[0] < bucket_bounds->xmin) {
|
||||
/* lower left out of radius test */
|
||||
if (cent[1] < bucket_bounds->ymin) {
|
||||
return (Vec2Lenf_nosqrt_other(cent, bucket_bounds->xmin, bucket_bounds->ymin) < radius_squared) ? 1 : 0;
|
||||
return (len_squared_v2v2_alt(cent, bucket_bounds->xmin, bucket_bounds->ymin) < radius_squared) ? 1 : 0;
|
||||
}
|
||||
/* top left test */
|
||||
else if (cent[1] > bucket_bounds->ymax) {
|
||||
return (Vec2Lenf_nosqrt_other(cent, bucket_bounds->xmin, bucket_bounds->ymax) < radius_squared) ? 1 : 0;
|
||||
return (len_squared_v2v2_alt(cent, bucket_bounds->xmin, bucket_bounds->ymax) < radius_squared) ? 1 : 0;
|
||||
}
|
||||
}
|
||||
else if (cent[0] > bucket_bounds->xmax) {
|
||||
/* lower right out of radius test */
|
||||
if (cent[1] < bucket_bounds->ymin) {
|
||||
return (Vec2Lenf_nosqrt_other(cent, bucket_bounds->xmax, bucket_bounds->ymin) < radius_squared) ? 1 : 0;
|
||||
return (len_squared_v2v2_alt(cent, bucket_bounds->xmax, bucket_bounds->ymin) < radius_squared) ? 1 : 0;
|
||||
}
|
||||
/* top right test */
|
||||
else if (cent[1] > bucket_bounds->ymax) {
|
||||
return (Vec2Lenf_nosqrt_other(cent, bucket_bounds->xmax, bucket_bounds->ymax) < radius_squared) ? 1 : 0;
|
||||
return (len_squared_v2v2_alt(cent, bucket_bounds->xmax, bucket_bounds->ymax) < radius_squared) ? 1 : 0;
|
||||
}
|
||||
}
|
||||
|
||||
@ -3901,8 +3892,7 @@ static void *do_projectpaint_thread(void *ph_v)
|
||||
|
||||
projPixel = (ProjPixel *)node->link;
|
||||
|
||||
/*dist = len_v2v2(projPixel->projCoSS, pos);*/ /* correct but uses a sqrtf */
|
||||
dist_nosqrt = Vec2Lenf_nosqrt(projPixel->projCoSS, pos);
|
||||
dist_nosqrt = len_squared_v2v2(projPixel->projCoSS, pos);
|
||||
|
||||
/*if (dist < radius) {*/ /* correct but uses a sqrtf */
|
||||
if (dist_nosqrt <= radius_squared) {
|
||||
|
@ -182,43 +182,11 @@ static void GRAPH_OT_cursor_set(wmOperatorType *ot)
|
||||
RNA_def_float(ot->srna, "value", 0, FLT_MIN, FLT_MAX, "Value", "", -100.0f, 100.0f);
|
||||
}
|
||||
|
||||
/* Toggle Handles ----------------------------------------------------------------- */
|
||||
|
||||
static int view_toggle_handles_exec (bContext *C, wmOperator *UNUSED(op))
|
||||
{
|
||||
SpaceIpo *sipo= CTX_wm_space_graph(C);
|
||||
ARegion *ar= CTX_wm_region(C);
|
||||
|
||||
if (sipo == NULL)
|
||||
return OPERATOR_CANCELLED;
|
||||
|
||||
/* toggle flag to hide handles */
|
||||
sipo->flag ^= SIPO_NOHANDLES;
|
||||
|
||||
/* request refresh of keys area */
|
||||
ED_region_tag_redraw(ar);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
static void GRAPH_OT_view_togglehandles (wmOperatorType *ot)
|
||||
{
|
||||
/* identification */
|
||||
ot->name= "Show/Hide All Handles";
|
||||
ot->idname= "GRAPH_OT_handles_view_toggle";
|
||||
ot->description= "Toggle whether handles are drawn on all keyframes that need them";
|
||||
|
||||
/* callbacks */
|
||||
ot->exec= view_toggle_handles_exec;
|
||||
ot->poll= ED_operator_graphedit_active;
|
||||
}
|
||||
|
||||
/* ************************** registration - operator types **********************************/
|
||||
|
||||
void graphedit_operatortypes(void)
|
||||
{
|
||||
/* view */
|
||||
WM_operatortype_append(GRAPH_OT_view_togglehandles);
|
||||
WM_operatortype_append(GRAPH_OT_cursor_set);
|
||||
|
||||
WM_operatortype_append(GRAPH_OT_previewrange_set);
|
||||
@ -290,7 +258,9 @@ static void graphedit_keymap_keyframes (wmKeyConfig *keyconf, wmKeyMap *keymap)
|
||||
wmKeyMapItem *kmi;
|
||||
|
||||
/* view */
|
||||
WM_keymap_add_item(keymap, "GRAPH_OT_handles_view_toggle", HKEY, KM_PRESS, KM_CTRL, 0);
|
||||
kmi = WM_keymap_add_item(keymap, "WM_OT_context_toggle", HKEY, KM_PRESS, KM_CTRL, 0);
|
||||
RNA_string_set(kmi->ptr, "data_path", "space_data.show_handles");
|
||||
|
||||
/* NOTE: 'ACTIONMOUSE' not 'LEFTMOUSE', as user may have swapped mouse-buttons
|
||||
* This keymap is supposed to override ANIM_OT_change_frame, which does the same except it doesn't do y-values
|
||||
*/
|
||||
|
@ -201,7 +201,7 @@ static void borderselect_graphkeys (bAnimContext *ac, rcti rect, short mode, sho
|
||||
{
|
||||
ListBase anim_data = {NULL, NULL};
|
||||
bAnimListElem *ale;
|
||||
int filter;
|
||||
int filter, mapping_flag;
|
||||
|
||||
SpaceIpo *sipo= (SpaceIpo *)ac->sl;
|
||||
KeyframeEditData ked;
|
||||
@ -226,8 +226,12 @@ static void borderselect_graphkeys (bAnimContext *ac, rcti rect, short mode, sho
|
||||
ked.data= &rectf;
|
||||
|
||||
/* treat handles separately? */
|
||||
if (incl_handles)
|
||||
if (incl_handles) {
|
||||
ked.iterflags |= KEYFRAME_ITER_INCL_HANDLES;
|
||||
mapping_flag= 0;
|
||||
}
|
||||
else
|
||||
mapping_flag= ANIM_UNITCONV_ONLYKEYS;
|
||||
|
||||
/* loop over data, doing border select */
|
||||
for (ale= anim_data.first; ale; ale= ale->next) {
|
||||
@ -235,7 +239,7 @@ static void borderselect_graphkeys (bAnimContext *ac, rcti rect, short mode, sho
|
||||
FCurve *fcu= (FCurve *)ale->key_data;
|
||||
|
||||
/* apply unit corrections */
|
||||
ANIM_unit_mapping_apply_fcurve(ac->scene, ale->id, ale->key_data, ANIM_UNITCONV_ONLYKEYS);
|
||||
ANIM_unit_mapping_apply_fcurve(ac->scene, ale->id, ale->key_data, mapping_flag);
|
||||
|
||||
/* apply NLA mapping to all the keyframes, since it's easier than trying to
|
||||
* guess when a callback might use something different
|
||||
@ -274,7 +278,7 @@ static void borderselect_graphkeys (bAnimContext *ac, rcti rect, short mode, sho
|
||||
ANIM_nla_mapping_apply_fcurve(adt, ale->key_data, 1, incl_handles==0);
|
||||
|
||||
/* unapply unit corrections */
|
||||
ANIM_unit_mapping_apply_fcurve(ac->scene, ale->id, ale->key_data, ANIM_UNITCONV_RESTORE|ANIM_UNITCONV_ONLYKEYS);
|
||||
ANIM_unit_mapping_apply_fcurve(ac->scene, ale->id, ale->key_data, ANIM_UNITCONV_RESTORE|mapping_flag);
|
||||
}
|
||||
|
||||
/* cleanup */
|
||||
|
@ -2016,14 +2016,14 @@ static int image_sample_line_exec(bContext *C, wmOperator *op)
|
||||
hist->data_r[i] = rgb[0];
|
||||
hist->data_g[i] = rgb[1];
|
||||
hist->data_b[i] = rgb[2];
|
||||
hist->data_luma[i] = (0.299f*rgb[0] + 0.587f*rgb[1] + 0.114f*rgb[2]);
|
||||
hist->data_luma[i] = rgb_to_luma(rgb);
|
||||
}
|
||||
else if (ibuf->rect) {
|
||||
cp= (unsigned char *)(ibuf->rect + y*ibuf->x + x);
|
||||
hist->data_r[i] = (float)cp[0]/255.0f;
|
||||
hist->data_g[i] = (float)cp[1]/255.0f;
|
||||
hist->data_b[i] = (float)cp[2]/255.0f;
|
||||
hist->data_luma[i] = (0.299f*cp[0] + 0.587f*cp[1] + 0.114f*cp[2])/255;
|
||||
hist->data_luma[i] = (float)rgb_to_luma_byte(cp)/255.0f;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -122,7 +122,7 @@ void SEQUENCER_OT_rebuild_proxy(struct wmOperatorType *ot);
|
||||
void SEQUENCER_OT_view_all_preview(struct wmOperatorType *ot);
|
||||
|
||||
/* sequencer_select.c */
|
||||
void SEQUENCER_OT_select_all_toggle(struct wmOperatorType *ot);
|
||||
void SEQUENCER_OT_select_all(struct wmOperatorType *ot);
|
||||
void SEQUENCER_OT_select(struct wmOperatorType *ot);
|
||||
void SEQUENCER_OT_select_more(struct wmOperatorType *ot);
|
||||
void SEQUENCER_OT_select_less(struct wmOperatorType *ot);
|
||||
|
@ -92,8 +92,7 @@ void sequencer_operatortypes(void)
|
||||
WM_operatortype_append(SEQUENCER_OT_change_path);
|
||||
|
||||
/* sequencer_select.c */
|
||||
WM_operatortype_append(SEQUENCER_OT_select_all_toggle);
|
||||
WM_operatortype_append(SEQUENCER_OT_select_inverse);
|
||||
WM_operatortype_append(SEQUENCER_OT_select_all);
|
||||
WM_operatortype_append(SEQUENCER_OT_select);
|
||||
WM_operatortype_append(SEQUENCER_OT_select_more);
|
||||
WM_operatortype_append(SEQUENCER_OT_select_less);
|
||||
@ -133,8 +132,8 @@ void sequencer_keymap(wmKeyConfig *keyconf)
|
||||
|
||||
WM_keymap_add_item(keymap, "SEQUENCER_OT_properties", NKEY, KM_PRESS, 0, 0);
|
||||
|
||||
WM_keymap_add_item(keymap, "SEQUENCER_OT_select_all_toggle", AKEY, KM_PRESS, 0, 0);
|
||||
WM_keymap_add_item(keymap, "SEQUENCER_OT_select_inverse", IKEY, KM_PRESS, KM_CTRL, 0);
|
||||
WM_keymap_add_item(keymap, "SEQUENCER_OT_select_all", AKEY, KM_PRESS, 0, 0);
|
||||
RNA_enum_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_select_all", IKEY, KM_PRESS, KM_CTRL, 0)->ptr, "action", SEL_INVERT);
|
||||
|
||||
RNA_enum_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_cut", KKEY, KM_PRESS, 0, 0)->ptr, "type", SEQ_CUT_SOFT);
|
||||
RNA_enum_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_cut", KKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "type", SEQ_CUT_HARD);
|
||||
|
@ -29,16 +29,17 @@
|
||||
#include <math.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "BLI_math_color.h"
|
||||
#include "BLI_utildefines.h"
|
||||
|
||||
|
||||
|
||||
#include "IMB_imbuf_types.h"
|
||||
#include "IMB_imbuf.h"
|
||||
|
||||
#include "sequencer_intern.h"
|
||||
|
||||
static void rgb_to_yuv(float rgb[3], float yuv[3])
|
||||
/* XXX, why is this function better then BLI_math version?
|
||||
* only difference is it does some normalize after, need to double check on this - campbell */
|
||||
static void rgb_to_yuv_normalized(const float rgb[3], float yuv[3])
|
||||
{
|
||||
yuv[0]= 0.299f*rgb[0] + 0.587f*rgb[1] + 0.114f*rgb[2];
|
||||
yuv[1]= 0.492f*(rgb[2] - yuv[0]);
|
||||
@ -169,10 +170,7 @@ static struct ImBuf *make_waveform_view_from_ibuf_byte(struct ImBuf * ibuf)
|
||||
|
||||
for (x = 0; x < ibuf->x; x++) {
|
||||
unsigned char * rgb = src + 4 * (ibuf->x * y + x);
|
||||
float v = 1.0 *
|
||||
( 0.299*rgb[0]
|
||||
+ 0.587*rgb[1]
|
||||
+ 0.114*rgb[2]) / 255.0;
|
||||
float v = (float)rgb_to_luma_byte(rgb) / 255.0;
|
||||
unsigned char * p = tgt;
|
||||
p += 4 * (w * ((int) (v * (h - 3)) + 1) + x + 1);
|
||||
|
||||
@ -215,10 +213,7 @@ static struct ImBuf *make_waveform_view_from_ibuf_float(struct ImBuf * ibuf)
|
||||
|
||||
for (x = 0; x < ibuf->x; x++) {
|
||||
float * rgb = src + 4 * (ibuf->x * y + x);
|
||||
float v = 1.0f *
|
||||
( 0.299f*rgb[0]
|
||||
+ 0.587f*rgb[1]
|
||||
+ 0.114f*rgb[2]);
|
||||
float v = rgb_to_luma(rgb);
|
||||
unsigned char * p = tgt;
|
||||
|
||||
CLAMP(v, 0.0f, 1.0f);
|
||||
@ -583,7 +578,7 @@ static void vectorscope_put_cross(unsigned char r, unsigned char g,
|
||||
rgb[0]= (float)r/255.0f;
|
||||
rgb[1]= (float)g/255.0f;
|
||||
rgb[2]= (float)b/255.0f;
|
||||
rgb_to_yuv(rgb, yuv);
|
||||
rgb_to_yuv_normalized(rgb, yuv);
|
||||
|
||||
p = tgt + 4 * (w * (int) ((yuv[2] * (h - 3) + 1))
|
||||
+ (int) ((yuv[1] * (w - 3) + 1)));
|
||||
@ -634,7 +629,7 @@ static struct ImBuf *make_vectorscope_view_from_ibuf_byte(struct ImBuf * ibuf)
|
||||
rgb[0]= (float)src1[0]/255.0f;
|
||||
rgb[1]= (float)src1[1]/255.0f;
|
||||
rgb[2]= (float)src1[2]/255.0f;
|
||||
rgb_to_yuv(rgb, yuv);
|
||||
rgb_to_yuv_normalized(rgb, yuv);
|
||||
|
||||
p = tgt + 4 * (w * (int) ((yuv[2] * (h - 3) + 1))
|
||||
+ (int) ((yuv[1] * (w - 3) + 1)));
|
||||
@ -684,7 +679,7 @@ static struct ImBuf *make_vectorscope_view_from_ibuf_float(struct ImBuf * ibuf)
|
||||
CLAMP(rgb[1], 0.0f, 1.0f);
|
||||
CLAMP(rgb[2], 0.0f, 1.0f);
|
||||
|
||||
rgb_to_yuv(rgb, yuv);
|
||||
rgb_to_yuv_normalized(rgb, yuv);
|
||||
|
||||
p = tgt + 4 * (w * (int) ((yuv[2] * (h - 3) + 1))
|
||||
+ (int) ((yuv[1] * (w - 3) + 1)));
|
||||
|
@ -179,8 +179,6 @@ static void UNUSED_FUNCTION(select_single_seq)(Scene *scene, Sequence *seq, int
|
||||
recurs_sel_seq(seq);
|
||||
}
|
||||
|
||||
// remove this function, replace with invert operator
|
||||
//void swap_select_seq(Scene *scene)
|
||||
#if 0
|
||||
static void select_neighbor_from_last(Scene *scene, int lr)
|
||||
{
|
||||
@ -214,48 +212,65 @@ static void select_neighbor_from_last(Scene *scene, int lr)
|
||||
#endif
|
||||
|
||||
/* (de)select operator */
|
||||
static int sequencer_deselect_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
static int sequencer_de_select_all_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
Scene *scene= CTX_data_scene(C);
|
||||
Editing *ed= seq_give_editing(scene, FALSE);
|
||||
int action = RNA_enum_get(op->ptr, "action");
|
||||
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
Editing *ed = seq_give_editing(scene, FALSE);
|
||||
Sequence *seq;
|
||||
int desel = 0;
|
||||
|
||||
for(seq= ed->seqbasep->first; seq; seq=seq->next) {
|
||||
if(seq->flag & SEQ_ALLSEL) {
|
||||
desel= 1;
|
||||
break;
|
||||
if (action == SEL_TOGGLE) {
|
||||
action = SEL_SELECT;
|
||||
for (seq = ed->seqbasep->first; seq; seq = seq->next) {
|
||||
if (seq->flag & SEQ_ALLSEL) {
|
||||
action = SEL_DESELECT;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for(seq= ed->seqbasep->first; seq; seq=seq->next) {
|
||||
if (desel) {
|
||||
seq->flag &= ~SEQ_ALLSEL;
|
||||
}
|
||||
else {
|
||||
seq->flag &= ~(SEQ_LEFTSEL+SEQ_RIGHTSEL);
|
||||
seq->flag |= SELECT;
|
||||
for (seq = ed->seqbasep->first; seq; seq = seq->next) {
|
||||
switch (action) {
|
||||
case SEL_SELECT:
|
||||
seq->flag &= ~(SEQ_LEFTSEL + SEQ_RIGHTSEL);
|
||||
seq->flag |= SELECT;
|
||||
break;
|
||||
case SEL_DESELECT:
|
||||
seq->flag &= ~SEQ_ALLSEL;
|
||||
break;
|
||||
case SEL_INVERT:
|
||||
if (seq->flag & SEQ_ALLSEL) {
|
||||
seq->flag &= ~SEQ_ALLSEL;
|
||||
}
|
||||
else {
|
||||
seq->flag &= ~(SEQ_LEFTSEL + SEQ_RIGHTSEL);
|
||||
seq->flag |= SELECT;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER|NA_SELECTED, scene);
|
||||
WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER | NA_SELECTED, scene);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
void SEQUENCER_OT_select_all_toggle(struct wmOperatorType *ot)
|
||||
void SEQUENCER_OT_select_all(struct wmOperatorType *ot)
|
||||
{
|
||||
/* identifiers */
|
||||
ot->name= "Select or Deselect All";
|
||||
ot->idname= "SEQUENCER_OT_select_all_toggle";
|
||||
ot->idname= "SEQUENCER_OT_select_all";
|
||||
ot->description="Select or deselect all strips";
|
||||
|
||||
/* api callbacks */
|
||||
ot->exec= sequencer_deselect_exec;
|
||||
ot->exec= sequencer_de_select_all_exec;
|
||||
ot->poll= sequencer_edit_poll;
|
||||
|
||||
/* flags */
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
|
||||
WM_operator_properties_select_all(ot);
|
||||
}
|
||||
|
||||
|
||||
|
@ -3252,6 +3252,7 @@ static void draw_mesh_fancy(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D
|
||||
bglPolygonOffset(rv3d->dist, 0.0);
|
||||
glDepthMask(1);
|
||||
glDisable(GL_LINE_STIPPLE);
|
||||
glDisable(GL_BLEND);
|
||||
|
||||
GPU_disable_material();
|
||||
|
||||
|
@ -154,15 +154,23 @@ RegionView3D *ED_view3d_context_rv3d(bContext *C)
|
||||
|
||||
/* ideally would return an rv3d but in some cases the region is needed too
|
||||
* so return that, the caller can then access the ar->regiondata */
|
||||
ARegion *ED_view3d_context_region_unlock(bContext *C)
|
||||
int ED_view3d_context_user_region(bContext *C, View3D **v3d_r, ARegion **ar_r)
|
||||
{
|
||||
ScrArea *sa= CTX_wm_area(C);
|
||||
|
||||
*v3d_r = NULL;
|
||||
*ar_r = NULL;
|
||||
|
||||
if(sa && sa->spacetype==SPACE_VIEW3D) {
|
||||
ARegion *ar= CTX_wm_region(C);
|
||||
View3D *v3d = (View3D *)sa->spacedata.first;
|
||||
|
||||
if(ar) {
|
||||
RegionView3D *rv3d= ar->regiondata;
|
||||
if(rv3d && rv3d->viewlock == 0) {
|
||||
return ar;
|
||||
*v3d_r = v3d;
|
||||
*ar_r = ar;
|
||||
return 1;
|
||||
}
|
||||
else {
|
||||
ARegion *ar_unlock_user= NULL;
|
||||
@ -182,12 +190,22 @@ ARegion *ED_view3d_context_region_unlock(bContext *C)
|
||||
}
|
||||
|
||||
/* camera/perspective view get priority when the active region is locked */
|
||||
if(ar_unlock_user) return ar_unlock_user;
|
||||
if(ar_unlock) return ar_unlock;
|
||||
if(ar_unlock_user) {
|
||||
*v3d_r = v3d;
|
||||
*ar_r = ar_unlock_user;
|
||||
return 1;
|
||||
}
|
||||
|
||||
if(ar_unlock) {
|
||||
*v3d_r = v3d;
|
||||
*ar_r = ar_unlock;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Most of the time this isn't needed since you could assume the view matrix was
|
||||
|
@ -2653,13 +2653,16 @@ static void axis_set_view(bContext *C, View3D *v3d, ARegion *ar, float q1, float
|
||||
|
||||
static int viewnumpad_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
View3D *v3d = CTX_wm_view3d(C);
|
||||
ARegion *ar= ED_view3d_context_region_unlock(C);
|
||||
RegionView3D *rv3d= ar->regiondata; /* no NULL check is needed, poll checks */
|
||||
View3D *v3d;
|
||||
ARegion *ar;
|
||||
RegionView3D *rv3d;
|
||||
Scene *scene= CTX_data_scene(C);
|
||||
static int perspo=RV3D_PERSP;
|
||||
static int perspo = RV3D_PERSP;
|
||||
int viewnum, align_active, nextperspo;
|
||||
|
||||
ED_view3d_context_user_region(C, &v3d, &ar);
|
||||
rv3d = ar->regiondata;
|
||||
|
||||
viewnum = RNA_enum_get(op->ptr, "type");
|
||||
align_active = RNA_boolean_get(op->ptr, "align_active");
|
||||
|
||||
@ -2783,7 +2786,7 @@ void VIEW3D_OT_viewnumpad(wmOperatorType *ot)
|
||||
|
||||
/* api callbacks */
|
||||
ot->exec= viewnumpad_exec;
|
||||
ot->poll= ED_operator_rv3d_unlock_poll;
|
||||
ot->poll= ED_operator_rv3d_user_region_poll;
|
||||
|
||||
/* flags */
|
||||
ot->flag= 0;
|
||||
@ -2801,12 +2804,16 @@ static EnumPropertyItem prop_view_orbit_items[] = {
|
||||
|
||||
static int vieworbit_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
View3D *v3d= CTX_wm_view3d(C);
|
||||
ARegion *ar= ED_view3d_context_region_unlock(C);
|
||||
RegionView3D *rv3d= ar->regiondata; /* no NULL check is needed, poll checks */
|
||||
View3D *v3d;
|
||||
ARegion *ar;
|
||||
RegionView3D *rv3d;
|
||||
float phi, q1[4], new_quat[4];
|
||||
int orbitdir;
|
||||
|
||||
/* no NULL check is needed, poll checks */
|
||||
ED_view3d_context_user_region(C, &v3d, &ar);
|
||||
rv3d = ar->regiondata;
|
||||
|
||||
orbitdir = RNA_enum_get(op->ptr, "type");
|
||||
|
||||
if(rv3d->viewlock==0) {
|
||||
@ -2852,7 +2859,7 @@ void VIEW3D_OT_view_orbit(wmOperatorType *ot)
|
||||
|
||||
/* api callbacks */
|
||||
ot->exec= vieworbit_exec;
|
||||
ot->poll= ED_operator_rv3d_unlock_poll;
|
||||
ot->poll= ED_operator_rv3d_user_region_poll;
|
||||
|
||||
/* flags */
|
||||
ot->flag= 0;
|
||||
@ -2909,8 +2916,13 @@ void VIEW3D_OT_view_pan(wmOperatorType *ot)
|
||||
|
||||
static int viewpersportho_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
{
|
||||
ARegion *ar= ED_view3d_context_region_unlock(C);
|
||||
RegionView3D *rv3d= ar->regiondata; /* no NULL check is needed, poll checks */
|
||||
View3D *v3d_dummy;
|
||||
ARegion *ar;
|
||||
RegionView3D *rv3d;
|
||||
|
||||
/* no NULL check is needed, poll checks */
|
||||
ED_view3d_context_user_region(C, &v3d_dummy, &ar);
|
||||
rv3d = ar->regiondata;
|
||||
|
||||
if(rv3d->viewlock==0) {
|
||||
if(rv3d->persp!=RV3D_ORTHO)
|
||||
@ -2932,7 +2944,7 @@ void VIEW3D_OT_view_persportho(wmOperatorType *ot)
|
||||
|
||||
/* api callbacks */
|
||||
ot->exec= viewpersportho_exec;
|
||||
ot->poll= ED_operator_rv3d_unlock_poll;
|
||||
ot->poll= ED_operator_rv3d_user_region_poll;
|
||||
|
||||
/* flags */
|
||||
ot->flag= 0;
|
||||
|
@ -467,12 +467,17 @@ void VIEW3D_OT_camera_to_view_selected(wmOperatorType *ot)
|
||||
|
||||
static int view3d_setobjectascamera_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
{
|
||||
View3D *v3d = CTX_wm_view3d(C);
|
||||
ARegion *ar= ED_view3d_context_region_unlock(C);
|
||||
RegionView3D *rv3d= ar->regiondata; /* no NULL check is needed, poll checks */
|
||||
View3D *v3d;
|
||||
ARegion *ar;
|
||||
RegionView3D *rv3d;
|
||||
|
||||
Scene *scene= CTX_data_scene(C);
|
||||
Object *ob = CTX_data_active_object(C);
|
||||
|
||||
/* no NULL check is needed, poll checks */
|
||||
ED_view3d_context_user_region(C, &v3d, &ar);
|
||||
rv3d = ar->regiondata;
|
||||
|
||||
if(ob) {
|
||||
Object *camera_old= (rv3d->persp == RV3D_CAMOB) ? V3D_CAMERA_SCENE(scene, v3d) : NULL;
|
||||
rv3d->persp= RV3D_CAMOB;
|
||||
@ -489,9 +494,12 @@ static int view3d_setobjectascamera_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
int ED_operator_rv3d_unlock_poll(bContext *C)
|
||||
int ED_operator_rv3d_user_region_poll(bContext *C)
|
||||
{
|
||||
return ED_view3d_context_region_unlock(C) != NULL;
|
||||
View3D *v3d_dummy;
|
||||
ARegion *ar_dummy;
|
||||
|
||||
return ED_view3d_context_user_region(C, &v3d_dummy, &ar_dummy);
|
||||
}
|
||||
|
||||
void VIEW3D_OT_object_as_camera(wmOperatorType *ot)
|
||||
@ -504,7 +512,7 @@ void VIEW3D_OT_object_as_camera(wmOperatorType *ot)
|
||||
|
||||
/* api callbacks */
|
||||
ot->exec= view3d_setobjectascamera_exec;
|
||||
ot->poll= ED_operator_rv3d_unlock_poll;
|
||||
ot->poll= ED_operator_rv3d_user_region_poll;
|
||||
|
||||
/* flags */
|
||||
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
|
||||
|
@ -1410,18 +1410,21 @@ void saveTransform(bContext *C, TransInfo *t, wmOperator *op)
|
||||
if (t->flag & T_MODAL) {
|
||||
|
||||
/* save settings if not set in operator */
|
||||
if (RNA_struct_find_property(op->ptr, "proportional") && !RNA_struct_property_is_set(op->ptr, "proportional")) {
|
||||
if ( (prop = RNA_struct_find_property(op->ptr, "proportional")) && !RNA_property_is_set(op->ptr, prop))
|
||||
{
|
||||
if (t->obedit)
|
||||
ts->proportional = proportional;
|
||||
else
|
||||
ts->proportional_objects = (proportional != PROP_EDIT_OFF);
|
||||
}
|
||||
|
||||
if (RNA_struct_find_property(op->ptr, "proportional_size") && !RNA_struct_property_is_set(op->ptr, "proportional_size")) {
|
||||
if ( (prop = RNA_struct_find_property(op->ptr, "proportional_size")) && !RNA_property_is_set(op->ptr, prop))
|
||||
{
|
||||
ts->proportional_size = t->prop_size;
|
||||
}
|
||||
|
||||
if (RNA_struct_find_property(op->ptr, "proportional_edit_falloff") && !RNA_struct_property_is_set(op->ptr, "proportional_edit_falloff")) {
|
||||
if ( (prop = RNA_struct_find_property(op->ptr, "proportional_edit_falloff")) && !RNA_property_is_set(op->ptr, prop))
|
||||
{
|
||||
ts->prop_mode = t->prop_mode;
|
||||
}
|
||||
|
||||
@ -1432,8 +1435,9 @@ void saveTransform(bContext *C, TransInfo *t, wmOperator *op)
|
||||
ts->snap_flag &= ~SCE_SNAP;
|
||||
}
|
||||
|
||||
if(t->spacetype == SPACE_VIEW3D) {
|
||||
if (RNA_struct_find_property(op->ptr, "constraint_orientation") && !RNA_struct_property_is_set(op->ptr, "constraint_orientation")) {
|
||||
if (t->spacetype == SPACE_VIEW3D) {
|
||||
if ( (prop = RNA_struct_find_property(op->ptr, "constraint_orientation")) && !RNA_property_is_set(op->ptr, prop))
|
||||
{
|
||||
View3D *v3d = t->view;
|
||||
|
||||
v3d->twmode = t->current_orientation;
|
||||
@ -1448,17 +1452,17 @@ void saveTransform(bContext *C, TransInfo *t, wmOperator *op)
|
||||
RNA_float_set(op->ptr, "proportional_size", t->prop_size);
|
||||
}
|
||||
|
||||
if (RNA_struct_find_property(op->ptr, "axis"))
|
||||
if ((prop = RNA_struct_find_property(op->ptr, "axis")))
|
||||
{
|
||||
RNA_float_set_array(op->ptr, "axis", t->axis);
|
||||
RNA_property_float_set_array(op->ptr, prop, t->axis);
|
||||
}
|
||||
|
||||
if (RNA_struct_find_property(op->ptr, "mirror"))
|
||||
if ((prop = RNA_struct_find_property(op->ptr, "mirror")))
|
||||
{
|
||||
RNA_boolean_set(op->ptr, "mirror", t->flag & T_MIRROR);
|
||||
RNA_property_boolean_set(op->ptr, prop, t->flag & T_MIRROR);
|
||||
}
|
||||
|
||||
if (RNA_struct_find_property(op->ptr, "constraint_axis"))
|
||||
if ((prop = RNA_struct_find_property(op->ptr, "constraint_axis")))
|
||||
{
|
||||
/* constraint orientation can be global, event if user selects something else
|
||||
* so use the orientation in the constraint if set
|
||||
@ -1482,7 +1486,7 @@ void saveTransform(bContext *C, TransInfo *t, wmOperator *op)
|
||||
}
|
||||
}
|
||||
|
||||
RNA_boolean_set_array(op->ptr, "constraint_axis", constraint_axis);
|
||||
RNA_property_boolean_set_array(op->ptr, prop, constraint_axis);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1490,6 +1494,7 @@ void saveTransform(bContext *C, TransInfo *t, wmOperator *op)
|
||||
int initTransform(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event, int mode)
|
||||
{
|
||||
int options = 0;
|
||||
PropertyRNA *prop;
|
||||
|
||||
t->context = C;
|
||||
|
||||
@ -1497,9 +1502,12 @@ int initTransform(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event, int
|
||||
|
||||
t->state = TRANS_STARTING;
|
||||
|
||||
if(RNA_struct_find_property(op->ptr, "texture_space"))
|
||||
if(RNA_boolean_get(op->ptr, "texture_space"))
|
||||
if ( (prop = RNA_struct_find_property(op->ptr, "texture_space")) && RNA_property_is_set(op->ptr, prop))
|
||||
{
|
||||
if(RNA_property_boolean_get(op->ptr, prop)) {
|
||||
options |= CTX_TEXTURE;
|
||||
}
|
||||
}
|
||||
|
||||
t->options = options;
|
||||
|
||||
@ -1706,10 +1714,9 @@ int initTransform(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event, int
|
||||
|
||||
|
||||
/* overwrite initial values if operator supplied a non-null vector */
|
||||
if (RNA_struct_property_is_set(op->ptr, "value"))
|
||||
if ( (prop = RNA_struct_find_property(op->ptr, "value")) && RNA_property_is_set(op->ptr, prop))
|
||||
{
|
||||
float values[4]= {0}; /* incase value isn't length 4, avoid uninitialized memory */
|
||||
PropertyRNA *prop= RNA_struct_find_property(op->ptr, "value");
|
||||
|
||||
if(RNA_property_array_check(prop)) {
|
||||
RNA_float_get_array(op->ptr, "value", values);
|
||||
@ -1723,19 +1730,19 @@ int initTransform(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event, int
|
||||
}
|
||||
|
||||
/* Transformation axis from operator */
|
||||
if (RNA_struct_find_property(op->ptr, "axis") && RNA_struct_property_is_set(op->ptr, "axis"))
|
||||
if ((prop = RNA_struct_find_property(op->ptr, "axis")) && RNA_property_is_set(op->ptr, prop))
|
||||
{
|
||||
RNA_float_get_array(op->ptr, "axis", t->axis);
|
||||
RNA_property_float_get_array(op->ptr, prop, t->axis);
|
||||
normalize_v3(t->axis);
|
||||
copy_v3_v3(t->axis_orig, t->axis);
|
||||
}
|
||||
|
||||
/* Constraint init from operator */
|
||||
if (RNA_struct_find_property(op->ptr, "constraint_axis") && RNA_struct_property_is_set(op->ptr, "constraint_axis"))
|
||||
if ((prop = RNA_struct_find_property(op->ptr, "constraint_axis")) && RNA_property_is_set(op->ptr, prop))
|
||||
{
|
||||
int constraint_axis[3];
|
||||
|
||||
RNA_boolean_get_array(op->ptr, "constraint_axis", constraint_axis);
|
||||
RNA_property_boolean_get_array(op->ptr, prop, constraint_axis);
|
||||
|
||||
if (constraint_axis[0] || constraint_axis[1] || constraint_axis[2])
|
||||
{
|
||||
@ -2636,7 +2643,7 @@ static void ElementResize(TransInfo *t, TransData *td, float mat[3][3])
|
||||
/* local constraint shouldn't alter center */
|
||||
if ((t->around == V3D_LOCAL) &&
|
||||
( (t->flag & (T_OBJECT|T_POSE)) ||
|
||||
((t->flag & T_EDIT) && (t->settings->selectmode & SCE_SELECT_FACE)) ||
|
||||
((t->flag & T_EDIT) && (t->settings->selectmode & (SCE_SELECT_EDGE|SCE_SELECT_FACE))) ||
|
||||
(t->obedit && t->obedit->type == OB_ARMATURE))
|
||||
)
|
||||
{
|
||||
@ -2923,7 +2930,7 @@ static void ElementRotation(TransInfo *t, TransData *td, float mat[3][3], short
|
||||
/* local constraint shouldn't alter center */
|
||||
if (around == V3D_LOCAL) {
|
||||
if ( (t->flag & (T_OBJECT|T_POSE)) ||
|
||||
(t->settings->selectmode & SCE_SELECT_FACE) ||
|
||||
(t->settings->selectmode & (SCE_SELECT_EDGE|SCE_SELECT_FACE)) ||
|
||||
(t->obedit && t->obedit->type == OB_ARMATURE))
|
||||
{
|
||||
center = td->center;
|
||||
|
@ -1931,6 +1931,19 @@ static void editmesh_set_connectivity_distance(BMEditMesh *em, float mtx[][3], f
|
||||
}
|
||||
}
|
||||
|
||||
static void get_edge_center(float cent_r[3], BMesh *bm, BMVert *eve)
|
||||
{
|
||||
BMEdge *eed;
|
||||
BMIter iter;
|
||||
|
||||
BM_ITER(eed, &iter, bm, BM_EDGES_OF_VERT, eve) {
|
||||
if (BM_Selected(bm, eed)) {
|
||||
mid_v3_v3v3(cent_r, eed->v1->co, eed->v2->co);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* way to overwrite what data is edited with transform
|
||||
* static void VertsToTransData(TransData *td, EditVert *eve, BakeKey *key) */
|
||||
static void VertsToTransData(TransInfo *t, TransData *td, BMEditMesh *em, BMVert *eve, float *bweight)
|
||||
@ -1942,8 +1955,13 @@ static void VertsToTransData(TransInfo *t, TransData *td, BMEditMesh *em, BMVert
|
||||
td->loc = eve->co;
|
||||
|
||||
copy_v3_v3(td->center, td->loc);
|
||||
if(t->around==V3D_LOCAL && (em->selectmode & SCE_SELECT_FACE))
|
||||
get_face_center(td->center, em->bm, eve);
|
||||
|
||||
if(t->around==V3D_LOCAL) {
|
||||
if(em->selectmode & SCE_SELECT_FACE)
|
||||
get_face_center(td->center, em->bm, eve);
|
||||
else if(em->selectmode & SCE_SELECT_EDGE)
|
||||
get_edge_center(td->center, em->bm, eve);
|
||||
}
|
||||
copy_v3_v3(td->iloc, td->loc);
|
||||
|
||||
// Setting normals
|
||||
|
@ -3505,10 +3505,10 @@ void ED_keymap_uvedit(wmKeyConfig *keyconf)
|
||||
keymap->poll= ED_operator_uvedit;
|
||||
|
||||
/* pick selection */
|
||||
WM_keymap_add_item(keymap, "UV_OT_select", SELECTMOUSE, KM_PRESS, 0, 0);
|
||||
RNA_boolean_set(WM_keymap_add_item(keymap, "UV_OT_select", SELECTMOUSE, KM_PRESS, KM_SHIFT, 0)->ptr, "extend", 1);
|
||||
WM_keymap_add_item(keymap, "UV_OT_select_loop", SELECTMOUSE, KM_PRESS, KM_ALT, 0);
|
||||
RNA_boolean_set(WM_keymap_add_item(keymap, "UV_OT_select_loop", SELECTMOUSE, KM_PRESS, KM_SHIFT|KM_ALT, 0)->ptr, "extend", 1);
|
||||
RNA_boolean_set(WM_keymap_add_item(keymap, "UV_OT_select", SELECTMOUSE, KM_PRESS, 0, 0)->ptr, "extend", FALSE);
|
||||
RNA_boolean_set(WM_keymap_add_item(keymap, "UV_OT_select", SELECTMOUSE, KM_PRESS, KM_SHIFT, 0)->ptr, "extend", TRUE);
|
||||
RNA_boolean_set(WM_keymap_add_item(keymap, "UV_OT_select_loop", SELECTMOUSE, KM_PRESS, KM_ALT, 0)->ptr, "extend", FALSE);
|
||||
RNA_boolean_set(WM_keymap_add_item(keymap, "UV_OT_select_loop", SELECTMOUSE, KM_PRESS, KM_SHIFT|KM_ALT, 0)->ptr, "extend", TRUE);
|
||||
|
||||
/* border/circle selection */
|
||||
WM_keymap_add_item(keymap, "UV_OT_select_border", BKEY, KM_PRESS, 0, 0);
|
||||
@ -3516,8 +3516,8 @@ void ED_keymap_uvedit(wmKeyConfig *keyconf)
|
||||
WM_keymap_add_item(keymap, "UV_OT_circle_select", CKEY, KM_PRESS, 0, 0);
|
||||
|
||||
/* selection manipulation */
|
||||
WM_keymap_add_item(keymap, "UV_OT_select_linked", LKEY, KM_PRESS, KM_CTRL, 0);
|
||||
WM_keymap_add_item(keymap, "UV_OT_select_linked_pick", LKEY, KM_PRESS, 0, 0);
|
||||
RNA_boolean_set(WM_keymap_add_item(keymap, "UV_OT_select_linked", LKEY, KM_PRESS, KM_CTRL, 0)->ptr, "extend", FALSE);
|
||||
RNA_boolean_set(WM_keymap_add_item(keymap, "UV_OT_select_linked_pick", LKEY, KM_PRESS, 0, 0)->ptr, "extend", FALSE);
|
||||
RNA_boolean_set(WM_keymap_add_item(keymap, "UV_OT_select_linked", LKEY, KM_PRESS, KM_CTRL|KM_SHIFT, 0)->ptr, "extend", TRUE);
|
||||
RNA_boolean_set(WM_keymap_add_item(keymap, "UV_OT_select_linked_pick", LKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "extend", TRUE);
|
||||
|
||||
|
@ -1380,6 +1380,7 @@ typedef struct Scene {
|
||||
|
||||
#define FFMPEG_MULTIPLEX_AUDIO 1 /* deprecated, you can choose none as audiocodec now */
|
||||
#define FFMPEG_AUTOSPLIT_OUTPUT 2
|
||||
#define FFMPEG_LOSSLESS_OUTPUT 4
|
||||
|
||||
/* Paint.flags */
|
||||
typedef enum {
|
||||
|
@ -215,6 +215,7 @@ extern StructRNA RNA_ExplodeModifier;
|
||||
extern StructRNA RNA_ExpressionController;
|
||||
extern StructRNA RNA_FCurve;
|
||||
extern StructRNA RNA_FCurveSample;
|
||||
extern StructRNA RNA_FFmpegSettings;
|
||||
extern StructRNA RNA_FModifier;
|
||||
extern StructRNA RNA_FModifierCycles;
|
||||
extern StructRNA RNA_FModifierEnvelope;
|
||||
@ -399,6 +400,7 @@ extern StructRNA RNA_PropertyGroupItem;
|
||||
extern StructRNA RNA_PropertySensor;
|
||||
extern StructRNA RNA_PythonConstraint;
|
||||
extern StructRNA RNA_PythonController;
|
||||
extern StructRNA RNA_QuickTimeSettings;
|
||||
extern StructRNA RNA_RadarSensor;
|
||||
extern StructRNA RNA_RandomSensor;
|
||||
extern StructRNA RNA_RaySensor;
|
||||
@ -549,6 +551,8 @@ extern StructRNA RNA_ThemeNodeEditor;
|
||||
extern StructRNA RNA_ThemeOutliner;
|
||||
extern StructRNA RNA_ThemeProperties;
|
||||
extern StructRNA RNA_ThemeSequenceEditor;
|
||||
extern StructRNA RNA_ThemeSpaceGeneric;
|
||||
extern StructRNA RNA_ThemeSpaceListGeneric;
|
||||
extern StructRNA RNA_ThemeStyle;
|
||||
extern StructRNA RNA_ThemeTextEditor;
|
||||
extern StructRNA RNA_ThemeTimeline;
|
||||
|
@ -24,7 +24,6 @@
|
||||
* \ingroup RNA
|
||||
*/
|
||||
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "RNA_define.h"
|
||||
@ -871,6 +870,20 @@ static EnumPropertyItem *rna_RenderSettings_qtcodecsettings_audiocodecType_itemf
|
||||
#endif
|
||||
#endif
|
||||
|
||||
static void rna_FFmpegSettings_lossless_output_set(PointerRNA *ptr, int value)
|
||||
{
|
||||
Scene *scene = (Scene *) ptr->id.data;
|
||||
RenderData *rd = &scene->r;
|
||||
|
||||
if (value)
|
||||
rd->ffcodecdata.flags |= FFMPEG_LOSSLESS_OUTPUT;
|
||||
else
|
||||
rd->ffcodecdata.flags &= ~FFMPEG_LOSSLESS_OUTPUT;
|
||||
#ifdef WITH_FFMPEG
|
||||
ffmpeg_verify_lossless_format(rd, &rd->im_format);
|
||||
#endif
|
||||
}
|
||||
|
||||
static int rna_RenderSettings_active_layer_index_get(PointerRNA *ptr)
|
||||
{
|
||||
RenderData *rd= (RenderData*)ptr->data;
|
||||
@ -2643,6 +2656,269 @@ static void rna_def_scene_image_format_data(BlenderRNA *brna)
|
||||
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
|
||||
}
|
||||
|
||||
static void rna_def_scene_ffmpeg_settings(BlenderRNA *brna)
|
||||
{
|
||||
StructRNA *srna;
|
||||
PropertyRNA *prop;
|
||||
|
||||
#ifdef WITH_FFMPEG
|
||||
static EnumPropertyItem ffmpeg_format_items[] = {
|
||||
{FFMPEG_MPEG1, "MPEG1", 0, "MPEG-1", ""},
|
||||
{FFMPEG_MPEG2, "MPEG2", 0, "MPEG-2", ""},
|
||||
{FFMPEG_MPEG4, "MPEG4", 0, "MPEG-4", ""},
|
||||
{FFMPEG_AVI, "AVI", 0, "AVI", ""},
|
||||
{FFMPEG_MOV, "QUICKTIME", 0, "Quicktime", ""},
|
||||
{FFMPEG_DV, "DV", 0, "DV", ""},
|
||||
{FFMPEG_H264, "H264", 0, "H.264", ""},
|
||||
{FFMPEG_XVID, "XVID", 0, "Xvid", ""},
|
||||
{FFMPEG_OGG, "OGG", 0, "Ogg", ""},
|
||||
{FFMPEG_MKV, "MKV", 0, "Matroska", ""},
|
||||
{FFMPEG_FLV, "FLASH", 0, "Flash", ""},
|
||||
{FFMPEG_WAV, "WAV", 0, "Wav", ""},
|
||||
{FFMPEG_MP3, "MP3", 0, "Mp3", ""},
|
||||
{0, NULL, 0, NULL, NULL}};
|
||||
|
||||
static EnumPropertyItem ffmpeg_codec_items[] = {
|
||||
{CODEC_ID_NONE, "NONE", 0, "None", ""},
|
||||
{CODEC_ID_MPEG1VIDEO, "MPEG1", 0, "MPEG-1", ""},
|
||||
{CODEC_ID_MPEG2VIDEO, "MPEG2", 0, "MPEG-2", ""},
|
||||
{CODEC_ID_MPEG4, "MPEG4", 0, "MPEG-4(divx)", ""},
|
||||
{CODEC_ID_HUFFYUV, "HUFFYUV", 0, "HuffYUV", ""},
|
||||
{CODEC_ID_DVVIDEO, "DV", 0, "DV", ""},
|
||||
{CODEC_ID_H264, "H264", 0, "H.264", ""},
|
||||
{CODEC_ID_THEORA, "THEORA", 0, "Theora", ""},
|
||||
{CODEC_ID_FLV1, "FLASH", 0, "Flash Video", ""},
|
||||
{CODEC_ID_FFV1, "FFV1", 0, "FFmpeg video codec #1", ""},
|
||||
{0, NULL, 0, NULL, NULL}};
|
||||
|
||||
static EnumPropertyItem ffmpeg_audio_codec_items[] = {
|
||||
{CODEC_ID_NONE, "NONE", 0, "None", ""},
|
||||
{CODEC_ID_MP2, "MP2", 0, "MP2", ""},
|
||||
{CODEC_ID_MP3, "MP3", 0, "MP3", ""},
|
||||
{CODEC_ID_AC3, "AC3", 0, "AC3", ""},
|
||||
{CODEC_ID_AAC, "AAC", 0, "AAC", ""},
|
||||
{CODEC_ID_VORBIS, "VORBIS", 0, "Vorbis", ""},
|
||||
{CODEC_ID_FLAC, "FLAC", 0, "FLAC", ""},
|
||||
{CODEC_ID_PCM_S16LE, "PCM", 0, "PCM", ""},
|
||||
{0, NULL, 0, NULL, NULL}};
|
||||
#endif
|
||||
|
||||
static EnumPropertyItem audio_channel_items[] = {
|
||||
{1, "MONO", 0, "Mono", "Set audio channels to mono"},
|
||||
{2, "STEREO", 0, "Stereo", "Set audio channels to stereo"},
|
||||
{4, "SURROUND4", 0, "4 Channels", "Set audio channels to 4 channels"},
|
||||
{6, "SURROUND51", 0, "5.1 Surround", "Set audio channels to 5.1 surround sound"},
|
||||
{8, "SURROUND71", 0, "7.1 Surround", "Set audio channels to 7.1 surround sound"},
|
||||
{0, NULL, 0, NULL, NULL}};
|
||||
|
||||
srna = RNA_def_struct(brna, "FFmpegSettings", NULL);
|
||||
RNA_def_struct_sdna(srna, "FFMpegCodecData");
|
||||
RNA_def_struct_ui_text(srna, "FFmpeg Settings", "FFmpeg related settings for the scene");
|
||||
|
||||
#ifdef WITH_FFMPEG
|
||||
prop = RNA_def_property(srna, "format", PROP_ENUM, PROP_NONE);
|
||||
RNA_def_property_enum_bitflag_sdna(prop, NULL, "type");
|
||||
RNA_def_property_enum_items(prop, ffmpeg_format_items);
|
||||
RNA_def_property_ui_text(prop, "Format", "Output file format");
|
||||
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
|
||||
|
||||
prop = RNA_def_property(srna, "codec", PROP_ENUM, PROP_NONE);
|
||||
RNA_def_property_enum_bitflag_sdna(prop, NULL, "codec");
|
||||
RNA_def_property_enum_items(prop, ffmpeg_codec_items);
|
||||
RNA_def_property_ui_text(prop, "Codec", "FFmpeg codec to use");
|
||||
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
|
||||
|
||||
prop = RNA_def_property(srna, "video_bitrate", PROP_INT, PROP_NONE);
|
||||
RNA_def_property_int_sdna(prop, NULL, "video_bitrate");
|
||||
RNA_def_property_range(prop, 1, 14000);
|
||||
RNA_def_property_ui_text(prop, "Bitrate", "Video bitrate (kb/s)");
|
||||
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
|
||||
|
||||
prop = RNA_def_property(srna, "minrate", PROP_INT, PROP_NONE);
|
||||
RNA_def_property_int_sdna(prop, NULL, "rc_min_rate");
|
||||
RNA_def_property_range(prop, 0, 9000);
|
||||
RNA_def_property_ui_text(prop, "Min Rate", "Rate control: min rate (kb/s)");
|
||||
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
|
||||
|
||||
prop = RNA_def_property(srna, "maxrate", PROP_INT, PROP_NONE);
|
||||
RNA_def_property_int_sdna(prop, NULL, "rc_max_rate");
|
||||
RNA_def_property_range(prop, 1, 14000);
|
||||
RNA_def_property_ui_text(prop, "Max Rate", "Rate control: max rate (kb/s)");
|
||||
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
|
||||
|
||||
prop= RNA_def_property(srna, "muxrate", PROP_INT, PROP_NONE);
|
||||
RNA_def_property_int_sdna(prop, NULL, "mux_rate");
|
||||
RNA_def_property_range(prop, 0, 100000000);
|
||||
RNA_def_property_ui_text(prop, "Mux Rate", "Mux rate (bits/s(!))");
|
||||
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
|
||||
|
||||
prop = RNA_def_property(srna, "gopsize", PROP_INT, PROP_NONE);
|
||||
RNA_def_property_int_sdna(prop, NULL, "gop_size");
|
||||
RNA_def_property_range(prop, 0, 100);
|
||||
RNA_def_property_ui_text(prop, "GOP Size", "Distance between key frames");
|
||||
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
|
||||
|
||||
prop = RNA_def_property(srna, "buffersize", PROP_INT, PROP_NONE);
|
||||
RNA_def_property_int_sdna(prop, NULL, "rc_buffer_size");
|
||||
RNA_def_property_range(prop, 0, 2000);
|
||||
RNA_def_property_ui_text(prop, "Buffersize", "Rate control: buffer size (kb)");
|
||||
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
|
||||
|
||||
prop = RNA_def_property(srna, "packetsize", PROP_INT, PROP_NONE);
|
||||
RNA_def_property_int_sdna(prop, NULL, "mux_packet_size");
|
||||
RNA_def_property_range(prop, 0, 16384);
|
||||
RNA_def_property_ui_text(prop, "Mux Packet Size", "Mux packet size (byte)");
|
||||
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
|
||||
|
||||
prop= RNA_def_property(srna, "use_autosplit", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_boolean_sdna(prop, NULL, "flags", FFMPEG_AUTOSPLIT_OUTPUT);
|
||||
RNA_def_property_ui_text(prop, "Autosplit Output", "Autosplit output at 2GB boundary");
|
||||
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
|
||||
|
||||
prop = RNA_def_property(srna, "use_lossless_output", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_boolean_sdna(prop, NULL, "flags", FFMPEG_LOSSLESS_OUTPUT);
|
||||
RNA_def_property_boolean_funcs(prop, NULL, "rna_FFmpegSettings_lossless_output_set");
|
||||
RNA_def_property_ui_text(prop, "Lossless Output", "Use losslecc output for video streams");
|
||||
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
|
||||
|
||||
/* FFMPEG Audio*/
|
||||
prop = RNA_def_property(srna, "audio_codec", PROP_ENUM, PROP_NONE);
|
||||
RNA_def_property_enum_bitflag_sdna(prop, NULL, "audio_codec");
|
||||
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
||||
RNA_def_property_enum_items(prop, ffmpeg_audio_codec_items);
|
||||
RNA_def_property_ui_text(prop, "Audio Codec", "FFmpeg audio codec to use");
|
||||
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
|
||||
|
||||
prop = RNA_def_property(srna, "audio_bitrate", PROP_INT, PROP_NONE);
|
||||
RNA_def_property_int_sdna(prop, NULL, "audio_bitrate");
|
||||
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
||||
RNA_def_property_range(prop, 32, 384);
|
||||
RNA_def_property_ui_text(prop, "Bitrate", "Audio bitrate (kb/s)");
|
||||
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
|
||||
|
||||
prop= RNA_def_property(srna, "audio_volume", PROP_FLOAT, PROP_NONE);
|
||||
RNA_def_property_float_sdna(prop, NULL, "audio_volume");
|
||||
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
||||
RNA_def_property_range(prop, 0.0f, 1.0f);
|
||||
RNA_def_property_ui_text(prop, "Volume", "Audio volume");
|
||||
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
|
||||
#endif
|
||||
|
||||
// the following two "ffmpeg" settings are general audio settings
|
||||
prop= RNA_def_property(srna, "audio_mixrate", PROP_INT, PROP_NONE);
|
||||
RNA_def_property_int_sdna(prop, NULL, "audio_mixrate");
|
||||
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
||||
RNA_def_property_range(prop, 8000, 192000);
|
||||
RNA_def_property_ui_text(prop, "Samplerate", "Audio samplerate(samples/s)");
|
||||
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
|
||||
|
||||
prop= RNA_def_property(srna, "audio_channels", PROP_ENUM, PROP_NONE);
|
||||
RNA_def_property_enum_sdna(prop, NULL, "audio_channels");
|
||||
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
||||
RNA_def_property_enum_items(prop, audio_channel_items);
|
||||
RNA_def_property_ui_text(prop, "Audio Channels", "Audio channel count");
|
||||
}
|
||||
|
||||
#ifdef WITH_QUICKTIME
|
||||
static void rna_def_scene_quicktime_settings(BlenderRNA *brna)
|
||||
{
|
||||
StructRNA *srna;
|
||||
PropertyRNA *prop;
|
||||
|
||||
static EnumPropertyItem quicktime_codec_type_items[] = {
|
||||
{0, "codec", 0, "codec", ""},
|
||||
{0, NULL, 0, NULL, NULL}};
|
||||
|
||||
#ifdef USE_QTKIT
|
||||
static EnumPropertyItem quicktime_audio_samplerate_items[] = {
|
||||
{22050, "22050", 0, "22kHz", ""},
|
||||
{44100, "44100", 0, "44.1kHz", ""},
|
||||
{48000, "48000", 0, "48kHz", ""},
|
||||
{88200, "88200", 0, "88.2kHz", ""},
|
||||
{96000, "96000", 0, "96kHz", ""},
|
||||
{192000, "192000", 0, "192kHz", ""},
|
||||
{0, NULL, 0, NULL, NULL}};
|
||||
|
||||
static EnumPropertyItem quicktime_audio_bitdepth_items[] = {
|
||||
{AUD_FORMAT_U8, "8BIT", 0, "8bit", ""},
|
||||
{AUD_FORMAT_S16, "16BIT", 0, "16bit", ""},
|
||||
{AUD_FORMAT_S24, "24BIT", 0, "24bit", ""},
|
||||
{AUD_FORMAT_S32, "32BIT", 0, "32bit", ""},
|
||||
{AUD_FORMAT_FLOAT32, "FLOAT32", 0, "float32", ""},
|
||||
{AUD_FORMAT_FLOAT64, "FLOAT64", 0, "float64", ""},
|
||||
{0, NULL, 0, NULL, NULL}};
|
||||
|
||||
static EnumPropertyItem quicktime_audio_bitrate_items[] = {
|
||||
{64000, "64000", 0, "64kbps", ""},
|
||||
{112000, "112000", 0, "112kpbs", ""},
|
||||
{128000, "128000", 0, "128kbps", ""},
|
||||
{192000, "192000", 0, "192kbps", ""},
|
||||
{256000, "256000", 0, "256kbps", ""},
|
||||
{320000, "320000", 0, "320kbps", ""},
|
||||
{0, NULL, 0, NULL, NULL}};
|
||||
#endif
|
||||
|
||||
/* QuickTime */
|
||||
srna = RNA_def_struct(brna, "QuickTimeSettings", NULL);
|
||||
RNA_def_struct_sdna(srna, "QuicktimeCodecSettings");
|
||||
RNA_def_struct_ui_text(srna, "QuickTime Settings", "QuickTime related settings for the scene");
|
||||
|
||||
prop = RNA_def_property(srna, "codec_type", PROP_ENUM, PROP_NONE);
|
||||
RNA_def_property_enum_bitflag_sdna(prop, NULL, "codecType");
|
||||
RNA_def_property_enum_items(prop, quicktime_codec_type_items);
|
||||
RNA_def_property_enum_funcs(prop, "rna_RenderSettings_qtcodecsettings_codecType_get",
|
||||
"rna_RenderSettings_qtcodecsettings_codecType_set",
|
||||
"rna_RenderSettings_qtcodecsettings_codecType_itemf");
|
||||
RNA_def_property_ui_text(prop, "Codec", "QuickTime codec type");
|
||||
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
|
||||
|
||||
prop = RNA_def_property(srna, "codec_spatial_quality", PROP_INT, PROP_PERCENTAGE);
|
||||
RNA_def_property_int_sdna(prop, NULL, "codecSpatialQuality");
|
||||
RNA_def_property_range(prop, 0, 100);
|
||||
RNA_def_property_ui_text(prop, "Spatial quality", "Intra-frame spatial quality level");
|
||||
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
|
||||
|
||||
#ifdef USE_QTKIT
|
||||
prop = RNA_def_property(srna, "audiocodec_type", PROP_ENUM, PROP_NONE);
|
||||
RNA_def_property_enum_bitflag_sdna(prop, NULL, "audiocodecType");
|
||||
RNA_def_property_enum_items(prop, quicktime_codec_type_items);
|
||||
RNA_def_property_enum_funcs(prop, "rna_RenderSettings_qtcodecsettings_audiocodecType_get",
|
||||
"rna_RenderSettings_qtcodecsettings_audiocodecType_set",
|
||||
"rna_RenderSettings_qtcodecsettings_audiocodecType_itemf");
|
||||
RNA_def_property_ui_text(prop, "Audio Codec", "QuickTime audio codec type");
|
||||
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
|
||||
|
||||
prop = RNA_def_property(srna, "audio_samplerate", PROP_ENUM, PROP_NONE);
|
||||
RNA_def_property_enum_bitflag_sdna(prop, NULL, "audioSampleRate");
|
||||
RNA_def_property_enum_items(prop, quicktime_audio_samplerate_items);
|
||||
RNA_def_property_ui_text(prop, "Smp Rate", "Sample Rate");
|
||||
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
|
||||
|
||||
prop = RNA_def_property(srna, "audio_bitdepth", PROP_ENUM, PROP_NONE);
|
||||
RNA_def_property_enum_bitflag_sdna(prop, NULL, "audioBitDepth");
|
||||
RNA_def_property_enum_items(prop, quicktime_audio_bitdepth_items);
|
||||
RNA_def_property_ui_text(prop, "Bit Depth", "Bit Depth");
|
||||
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
|
||||
|
||||
prop = RNA_def_property(srna, "audio_resampling_hq", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_boolean_negative_sdna(prop, NULL, "audioCodecFlags", QTAUDIO_FLAG_RESAMPLE_NOHQ);
|
||||
RNA_def_property_ui_text(prop, "HQ", "Use High Quality resampling algorithm");
|
||||
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
|
||||
|
||||
prop= RNA_def_property(srna, "audio_codec_isvbr", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_boolean_negative_sdna(prop, NULL, "audioCodecFlags", QTAUDIO_FLAG_CODEC_ISCBR);
|
||||
RNA_def_property_ui_text(prop, "VBR", "Use Variable Bit Rate compression (improves quality at same bitrate)");
|
||||
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
|
||||
|
||||
prop= RNA_def_property(srna, "audio_bitrate", PROP_ENUM, PROP_NONE);
|
||||
RNA_def_property_enum_bitflag_sdna(prop, NULL, "audioBitRate");
|
||||
RNA_def_property_enum_items(prop, quicktime_audio_bitrate_items);
|
||||
RNA_def_property_ui_text(prop, "Bitrate", "Compressed audio bitrate");
|
||||
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
static void rna_def_scene_render_data(BlenderRNA *brna)
|
||||
{
|
||||
StructRNA *srna;
|
||||
@ -2734,95 +3010,15 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
|
||||
{R_FIXED_THREADS, "FIXED", 0, "Fixed", "Manually determine the number of threads"},
|
||||
{0, NULL, 0, NULL, NULL}};
|
||||
|
||||
#ifdef WITH_QUICKTIME
|
||||
static EnumPropertyItem quicktime_codec_type_items[] = {
|
||||
{0, "codec", 0, "codec", ""},
|
||||
{0, NULL, 0, NULL, NULL}};
|
||||
|
||||
#ifdef USE_QTKIT
|
||||
static EnumPropertyItem quicktime_audio_samplerate_items[] = {
|
||||
{22050, "22050", 0, "22kHz", ""},
|
||||
{44100, "44100", 0, "44.1kHz", ""},
|
||||
{48000, "48000", 0, "48kHz", ""},
|
||||
{88200, "88200", 0, "88.2kHz", ""},
|
||||
{96000, "96000", 0, "96kHz", ""},
|
||||
{192000, "192000", 0, "192kHz", ""},
|
||||
{0, NULL, 0, NULL, NULL}};
|
||||
|
||||
static EnumPropertyItem quicktime_audio_bitdepth_items[] = {
|
||||
{AUD_FORMAT_U8, "8BIT", 0, "8bit", ""},
|
||||
{AUD_FORMAT_S16, "16BIT", 0, "16bit", ""},
|
||||
{AUD_FORMAT_S24, "24BIT", 0, "24bit", ""},
|
||||
{AUD_FORMAT_S32, "32BIT", 0, "32bit", ""},
|
||||
{AUD_FORMAT_FLOAT32, "FLOAT32", 0, "float32", ""},
|
||||
{AUD_FORMAT_FLOAT64, "FLOAT64", 0, "float64", ""},
|
||||
{0, NULL, 0, NULL, NULL}};
|
||||
|
||||
static EnumPropertyItem quicktime_audio_bitrate_items[] = {
|
||||
{64000, "64000", 0, "64kbps", ""},
|
||||
{112000, "112000", 0, "112kpbs", ""},
|
||||
{128000, "128000", 0, "128kbps", ""},
|
||||
{192000, "192000", 0, "192kbps", ""},
|
||||
{256000, "256000", 0, "256kbps", ""},
|
||||
{320000, "320000", 0, "320kbps", ""},
|
||||
{0, NULL, 0, NULL, NULL}};
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef WITH_FFMPEG
|
||||
static EnumPropertyItem ffmpeg_format_items[] = {
|
||||
{FFMPEG_MPEG1, "MPEG1", 0, "MPEG-1", ""},
|
||||
{FFMPEG_MPEG2, "MPEG2", 0, "MPEG-2", ""},
|
||||
{FFMPEG_MPEG4, "MPEG4", 0, "MPEG-4", ""},
|
||||
{FFMPEG_AVI, "AVI", 0, "AVI", ""},
|
||||
{FFMPEG_MOV, "QUICKTIME", 0, "Quicktime", ""},
|
||||
{FFMPEG_DV, "DV", 0, "DV", ""},
|
||||
{FFMPEG_H264, "H264", 0, "H.264", ""},
|
||||
{FFMPEG_XVID, "XVID", 0, "Xvid", ""},
|
||||
{FFMPEG_OGG, "OGG", 0, "Ogg", ""},
|
||||
{FFMPEG_MKV, "MKV", 0, "Matroska", ""},
|
||||
{FFMPEG_FLV, "FLASH", 0, "Flash", ""},
|
||||
{FFMPEG_WAV, "WAV", 0, "Wav", ""},
|
||||
{FFMPEG_MP3, "MP3", 0, "Mp3", ""},
|
||||
{0, NULL, 0, NULL, NULL}};
|
||||
|
||||
static EnumPropertyItem ffmpeg_codec_items[] = {
|
||||
{CODEC_ID_NONE, "NONE", 0, "None", ""},
|
||||
{CODEC_ID_MPEG1VIDEO, "MPEG1", 0, "MPEG-1", ""},
|
||||
{CODEC_ID_MPEG2VIDEO, "MPEG2", 0, "MPEG-2", ""},
|
||||
{CODEC_ID_MPEG4, "MPEG4", 0, "MPEG-4(divx)", ""},
|
||||
{CODEC_ID_HUFFYUV, "HUFFYUV", 0, "HuffYUV", ""},
|
||||
{CODEC_ID_DVVIDEO, "DV", 0, "DV", ""},
|
||||
{CODEC_ID_H264, "H264", 0, "H.264", ""},
|
||||
{CODEC_ID_THEORA, "THEORA", 0, "Theora", ""},
|
||||
{CODEC_ID_FLV1, "FLASH", 0, "Flash Video", ""},
|
||||
{CODEC_ID_FFV1, "FFV1", 0, "FFmpeg video codec #1", ""},
|
||||
{0, NULL, 0, NULL, NULL}};
|
||||
|
||||
static EnumPropertyItem ffmpeg_audio_codec_items[] = {
|
||||
{CODEC_ID_NONE, "NONE", 0, "None", ""},
|
||||
{CODEC_ID_MP2, "MP2", 0, "MP2", ""},
|
||||
{CODEC_ID_MP3, "MP3", 0, "MP3", ""},
|
||||
{CODEC_ID_AC3, "AC3", 0, "AC3", ""},
|
||||
{CODEC_ID_AAC, "AAC", 0, "AAC", ""},
|
||||
{CODEC_ID_VORBIS, "VORBIS", 0, "Vorbis", ""},
|
||||
{CODEC_ID_FLAC, "FLAC", 0, "FLAC", ""},
|
||||
{CODEC_ID_PCM_S16LE, "PCM", 0, "PCM", ""},
|
||||
{0, NULL, 0, NULL, NULL}};
|
||||
#endif
|
||||
|
||||
static EnumPropertyItem audio_channel_items[] = {
|
||||
{1, "MONO", 0, "Mono", "Set audio channels to mono"},
|
||||
{2, "STEREO", 0, "Stereo", "Set audio channels to stereo"},
|
||||
{4, "SURROUND4", 0, "4 Channels", "Set audio channels to 4 channels"},
|
||||
{6, "SURROUND51", 0, "5.1 Surround", "Set audio channels to 5.1 surround sound"},
|
||||
{8, "SURROUND71", 0, "7.1 Surround", "Set audio channels to 7.1 surround sound"},
|
||||
{0, NULL, 0, NULL, NULL}};
|
||||
|
||||
static EnumPropertyItem engine_items[] = {
|
||||
{0, "BLENDER_RENDER", 0, "Blender Render", "Use the Blender internal rendering engine for rendering"},
|
||||
{0, NULL, 0, NULL, NULL}};
|
||||
|
||||
rna_def_scene_ffmpeg_settings(brna);
|
||||
#ifdef WITH_QUICKTIME
|
||||
rna_def_scene_quicktime_settings(brna);
|
||||
#endif
|
||||
|
||||
srna= RNA_def_struct(brna, "RenderSettings", NULL);
|
||||
RNA_def_struct_sdna(srna, "RenderData");
|
||||
RNA_def_struct_nested(brna, srna, "Scene");
|
||||
@ -2880,161 +3076,18 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
|
||||
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneCamera_update");
|
||||
|
||||
#ifdef WITH_QUICKTIME
|
||||
/* QuickTime */
|
||||
|
||||
prop= RNA_def_property(srna, "quicktime_codec_type", PROP_ENUM, PROP_NONE);
|
||||
RNA_def_property_enum_bitflag_sdna(prop, NULL, "qtcodecsettings.codecType");
|
||||
RNA_def_property_enum_items(prop, quicktime_codec_type_items);
|
||||
RNA_def_property_enum_funcs(prop, "rna_RenderSettings_qtcodecsettings_codecType_get",
|
||||
"rna_RenderSettings_qtcodecsettings_codecType_set",
|
||||
"rna_RenderSettings_qtcodecsettings_codecType_itemf");
|
||||
RNA_def_property_ui_text(prop, "Codec", "QuickTime codec type");
|
||||
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
|
||||
|
||||
prop= RNA_def_property(srna, "quicktime_codec_spatial_quality", PROP_INT, PROP_PERCENTAGE);
|
||||
RNA_def_property_int_sdna(prop, NULL, "qtcodecsettings.codecSpatialQuality");
|
||||
RNA_def_property_range(prop, 0, 100);
|
||||
RNA_def_property_ui_text(prop, "Spatial quality", "Intra-frame spatial quality level");
|
||||
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
|
||||
|
||||
#ifdef USE_QTKIT
|
||||
prop= RNA_def_property(srna, "quicktime_audiocodec_type", PROP_ENUM, PROP_NONE);
|
||||
RNA_def_property_enum_bitflag_sdna(prop, NULL, "qtcodecsettings.audiocodecType");
|
||||
RNA_def_property_enum_items(prop, quicktime_codec_type_items);
|
||||
RNA_def_property_enum_funcs(prop, "rna_RenderSettings_qtcodecsettings_audiocodecType_get",
|
||||
"rna_RenderSettings_qtcodecsettings_audiocodecType_set",
|
||||
"rna_RenderSettings_qtcodecsettings_audiocodecType_itemf");
|
||||
RNA_def_property_ui_text(prop, "Audio Codec", "QuickTime audio codec type");
|
||||
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
|
||||
|
||||
prop= RNA_def_property(srna, "quicktime_audio_samplerate", PROP_ENUM, PROP_NONE);
|
||||
RNA_def_property_enum_bitflag_sdna(prop, NULL, "qtcodecsettings.audioSampleRate");
|
||||
RNA_def_property_enum_items(prop, quicktime_audio_samplerate_items);
|
||||
RNA_def_property_ui_text(prop, "Smp Rate", "Sample Rate");
|
||||
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
|
||||
|
||||
prop= RNA_def_property(srna, "quicktime_audio_bitdepth", PROP_ENUM, PROP_NONE);
|
||||
RNA_def_property_enum_bitflag_sdna(prop, NULL, "qtcodecsettings.audioBitDepth");
|
||||
RNA_def_property_enum_items(prop, quicktime_audio_bitdepth_items);
|
||||
RNA_def_property_ui_text(prop, "Bit Depth", "Bit Depth");
|
||||
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
|
||||
|
||||
prop= RNA_def_property(srna, "quicktime_audio_resampling_hq", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_boolean_negative_sdna(prop, NULL, "qtcodecsettings.audioCodecFlags", QTAUDIO_FLAG_RESAMPLE_NOHQ);
|
||||
RNA_def_property_ui_text(prop, "HQ", "Use High Quality resampling algorithm");
|
||||
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
|
||||
|
||||
prop= RNA_def_property(srna, "quicktime_audio_codec_isvbr", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_boolean_negative_sdna(prop, NULL, "qtcodecsettings.audioCodecFlags", QTAUDIO_FLAG_CODEC_ISCBR);
|
||||
RNA_def_property_ui_text(prop, "VBR", "Use Variable Bit Rate compression (improves quality at same bitrate)");
|
||||
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
|
||||
|
||||
prop= RNA_def_property(srna, "quicktime_audio_bitrate", PROP_ENUM, PROP_NONE);
|
||||
RNA_def_property_enum_bitflag_sdna(prop, NULL, "qtcodecsettings.audioBitRate");
|
||||
RNA_def_property_enum_items(prop, quicktime_audio_bitrate_items);
|
||||
RNA_def_property_ui_text(prop, "Bitrate", "Compressed audio bitrate");
|
||||
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
|
||||
#endif
|
||||
prop= RNA_def_property(srna, "quicktime", PROP_POINTER, PROP_NONE);
|
||||
RNA_def_property_struct_type(prop, "QuickTimeSettings");
|
||||
RNA_def_property_pointer_sdna(prop, NULL, "qtcodecsettings");
|
||||
RNA_def_property_flag(prop, PROP_NEVER_UNLINK);
|
||||
RNA_def_property_ui_text(prop, "QuickTime Settings", "QuickTime related settings for the scene");
|
||||
#endif
|
||||
|
||||
#ifdef WITH_FFMPEG
|
||||
/* FFMPEG Video*/
|
||||
|
||||
prop= RNA_def_property(srna, "ffmpeg_format", PROP_ENUM, PROP_NONE);
|
||||
RNA_def_property_enum_bitflag_sdna(prop, NULL, "ffcodecdata.type");
|
||||
RNA_def_property_enum_items(prop, ffmpeg_format_items);
|
||||
RNA_def_property_ui_text(prop, "Format", "Output file format");
|
||||
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
|
||||
|
||||
prop= RNA_def_property(srna, "ffmpeg_codec", PROP_ENUM, PROP_NONE);
|
||||
RNA_def_property_enum_bitflag_sdna(prop, NULL, "ffcodecdata.codec");
|
||||
RNA_def_property_enum_items(prop, ffmpeg_codec_items);
|
||||
RNA_def_property_ui_text(prop, "Codec", "FFMpeg codec to use");
|
||||
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
|
||||
|
||||
prop= RNA_def_property(srna, "ffmpeg_video_bitrate", PROP_INT, PROP_NONE);
|
||||
RNA_def_property_int_sdna(prop, NULL, "ffcodecdata.video_bitrate");
|
||||
RNA_def_property_range(prop, 1, 14000);
|
||||
RNA_def_property_ui_text(prop, "Bitrate", "Video bitrate (kb/s)");
|
||||
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
|
||||
|
||||
prop= RNA_def_property(srna, "ffmpeg_minrate", PROP_INT, PROP_NONE);
|
||||
RNA_def_property_int_sdna(prop, NULL, "ffcodecdata.rc_min_rate");
|
||||
RNA_def_property_range(prop, 0, 9000);
|
||||
RNA_def_property_ui_text(prop, "Min Rate", "Rate control: min rate (kb/s)");
|
||||
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
|
||||
|
||||
prop= RNA_def_property(srna, "ffmpeg_maxrate", PROP_INT, PROP_NONE);
|
||||
RNA_def_property_int_sdna(prop, NULL, "ffcodecdata.rc_max_rate");
|
||||
RNA_def_property_range(prop, 1, 14000);
|
||||
RNA_def_property_ui_text(prop, "Max Rate", "Rate control: max rate (kb/s)");
|
||||
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
|
||||
|
||||
prop= RNA_def_property(srna, "ffmpeg_muxrate", PROP_INT, PROP_NONE);
|
||||
RNA_def_property_int_sdna(prop, NULL, "ffcodecdata.mux_rate");
|
||||
RNA_def_property_range(prop, 0, 100000000);
|
||||
RNA_def_property_ui_text(prop, "Mux Rate", "Mux rate (bits/s(!))");
|
||||
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
|
||||
|
||||
prop= RNA_def_property(srna, "ffmpeg_gopsize", PROP_INT, PROP_NONE);
|
||||
RNA_def_property_int_sdna(prop, NULL, "ffcodecdata.gop_size");
|
||||
RNA_def_property_range(prop, 0, 100);
|
||||
RNA_def_property_ui_text(prop, "GOP Size", "Distance between key frames");
|
||||
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
|
||||
|
||||
prop= RNA_def_property(srna, "ffmpeg_buffersize", PROP_INT, PROP_NONE);
|
||||
RNA_def_property_int_sdna(prop, NULL, "ffcodecdata.rc_buffer_size");
|
||||
RNA_def_property_range(prop, 0, 2000);
|
||||
RNA_def_property_ui_text(prop, "Buffersize", "Rate control: buffer size (kb)");
|
||||
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
|
||||
|
||||
prop= RNA_def_property(srna, "ffmpeg_packetsize", PROP_INT, PROP_NONE);
|
||||
RNA_def_property_int_sdna(prop, NULL, "ffcodecdata.mux_packet_size");
|
||||
RNA_def_property_range(prop, 0, 16384);
|
||||
RNA_def_property_ui_text(prop, "Mux Packet Size", "Mux packet size (byte)");
|
||||
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
|
||||
|
||||
prop= RNA_def_property(srna, "ffmpeg_autosplit", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_boolean_sdna(prop, NULL, "ffcodecdata.flags", FFMPEG_AUTOSPLIT_OUTPUT);
|
||||
RNA_def_property_ui_text(prop, "Autosplit Output", "Autosplit output at 2GB boundary");
|
||||
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
|
||||
|
||||
/* FFMPEG Audio*/
|
||||
prop= RNA_def_property(srna, "ffmpeg_audio_codec", PROP_ENUM, PROP_NONE);
|
||||
RNA_def_property_enum_bitflag_sdna(prop, NULL, "ffcodecdata.audio_codec");
|
||||
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
||||
RNA_def_property_enum_items(prop, ffmpeg_audio_codec_items);
|
||||
RNA_def_property_ui_text(prop, "Audio Codec", "FFMpeg audio codec to use");
|
||||
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
|
||||
|
||||
prop= RNA_def_property(srna, "ffmpeg_audio_bitrate", PROP_INT, PROP_NONE);
|
||||
RNA_def_property_int_sdna(prop, NULL, "ffcodecdata.audio_bitrate");
|
||||
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
||||
RNA_def_property_range(prop, 32, 384);
|
||||
RNA_def_property_ui_text(prop, "Bitrate", "Audio bitrate (kb/s)");
|
||||
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
|
||||
|
||||
prop= RNA_def_property(srna, "ffmpeg_audio_volume", PROP_FLOAT, PROP_NONE);
|
||||
RNA_def_property_float_sdna(prop, NULL, "ffcodecdata.audio_volume");
|
||||
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
||||
RNA_def_property_range(prop, 0.0f, 1.0f);
|
||||
RNA_def_property_ui_text(prop, "Volume", "Audio volume");
|
||||
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
|
||||
#endif
|
||||
|
||||
// the following two "ffmpeg" settings are general audio settings
|
||||
prop= RNA_def_property(srna, "ffmpeg_audio_mixrate", PROP_INT, PROP_NONE);
|
||||
RNA_def_property_int_sdna(prop, NULL, "ffcodecdata.audio_mixrate");
|
||||
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
||||
RNA_def_property_range(prop, 8000, 192000);
|
||||
RNA_def_property_ui_text(prop, "Samplerate", "Audio samplerate(samples/s)");
|
||||
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
|
||||
|
||||
prop= RNA_def_property(srna, "ffmpeg_audio_channels", PROP_ENUM, PROP_NONE);
|
||||
RNA_def_property_enum_sdna(prop, NULL, "ffcodecdata.audio_channels");
|
||||
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
||||
RNA_def_property_enum_items(prop, audio_channel_items);
|
||||
RNA_def_property_ui_text(prop, "Audio Channels", "Audio channel count");
|
||||
prop= RNA_def_property(srna, "ffmpeg", PROP_POINTER, PROP_NONE);
|
||||
RNA_def_property_struct_type(prop, "FFmpegSettings");
|
||||
RNA_def_property_pointer_sdna(prop, NULL, "ffcodecdata");
|
||||
RNA_def_property_flag(prop, PROP_NEVER_UNLINK);
|
||||
RNA_def_property_ui_text(prop, "FFmpeg Settings", "FFmpeg related settings for the scene");
|
||||
|
||||
prop= RNA_def_property(srna, "fps", PROP_INT, PROP_NONE);
|
||||
RNA_def_property_int_sdna(prop, NULL, "frs_sec");
|
||||
|
@ -2139,7 +2139,6 @@ static void rna_def_space_dopesheet(BlenderRNA *brna)
|
||||
/* display */
|
||||
prop= RNA_def_property(srna, "show_seconds", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_boolean_sdna(prop, NULL, "flag", SACTION_DRAWTIME);
|
||||
RNA_def_property_clear_flag(prop, PROP_EDITABLE); // XXX for now, only set with operator
|
||||
RNA_def_property_ui_text(prop, "Show Seconds", "Show timing in seconds not frames");
|
||||
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_DOPESHEET, NULL);
|
||||
|
||||
@ -2224,7 +2223,6 @@ static void rna_def_space_graph(BlenderRNA *brna)
|
||||
/* display */
|
||||
prop= RNA_def_property(srna, "show_seconds", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_boolean_sdna(prop, NULL, "flag", SIPO_DRAWTIME);
|
||||
RNA_def_property_clear_flag(prop, PROP_EDITABLE); // XXX for now, only set with operator
|
||||
RNA_def_property_ui_text(prop, "Show Seconds", "Show timing in seconds not frames");
|
||||
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_GRAPH, NULL);
|
||||
|
||||
@ -2322,7 +2320,6 @@ static void rna_def_space_nla(BlenderRNA *brna)
|
||||
/* display */
|
||||
prop= RNA_def_property(srna, "show_seconds", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_boolean_sdna(prop, NULL, "flag", SNLA_DRAWTIME);
|
||||
RNA_def_property_clear_flag(prop, PROP_EDITABLE); // XXX for now, only set with operator
|
||||
RNA_def_property_ui_text(prop, "Show Seconds", "Show timing in seconds not frames");
|
||||
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_NLA, NULL);
|
||||
|
||||
|
@ -312,6 +312,17 @@ static void rna_userdef_text_update(Main *UNUSED(bmain), Scene *UNUSED(scene), P
|
||||
WM_main_add_notifier(NC_WINDOW, NULL);
|
||||
}
|
||||
|
||||
static PointerRNA rna_Theme_space_generic_get(PointerRNA *ptr)
|
||||
{
|
||||
return rna_pointer_inherit_refine(ptr, &RNA_ThemeSpaceGeneric, ptr->data);
|
||||
}
|
||||
|
||||
static PointerRNA rna_Theme_space_list_generic_get(PointerRNA *ptr)
|
||||
{
|
||||
return rna_pointer_inherit_refine(ptr, &RNA_ThemeSpaceListGeneric, ptr->data);
|
||||
}
|
||||
|
||||
|
||||
#ifdef WITH_CYCLES
|
||||
static EnumPropertyItem *rna_userdef_compute_device_type_itemf(bContext *UNUSED(C), PointerRNA *UNUSED(ptr), PropertyRNA *UNUSED(prop), int *free)
|
||||
{
|
||||
@ -711,10 +722,15 @@ static void rna_def_userdef_theme_ui(BlenderRNA *brna)
|
||||
RNA_def_property_update(prop, 0, "rna_userdef_update");
|
||||
}
|
||||
|
||||
static void rna_def_userdef_theme_spaces_main(StructRNA *srna, int spacetype)
|
||||
static void rna_def_userdef_theme_space_generic(BlenderRNA *brna)
|
||||
{
|
||||
StructRNA *srna;
|
||||
PropertyRNA *prop;
|
||||
|
||||
srna= RNA_def_struct(brna, "ThemeSpaceGeneric", NULL);
|
||||
RNA_def_struct_sdna(srna, "ThemeSpace");
|
||||
RNA_def_struct_ui_text(srna, "Theme Space Settings", "");
|
||||
|
||||
/* window */
|
||||
prop= RNA_def_property(srna, "back", PROP_FLOAT, PROP_COLOR_GAMMA);
|
||||
RNA_def_property_array(prop, 3);
|
||||
@ -774,29 +790,59 @@ static void rna_def_userdef_theme_spaces_main(StructRNA *srna, int spacetype)
|
||||
RNA_def_property_ui_text(prop, "Region Text Highlight", "");
|
||||
RNA_def_property_update(prop, 0, "rna_userdef_update");
|
||||
// }
|
||||
}
|
||||
|
||||
/* list/channels */
|
||||
if(ELEM5(spacetype, SPACE_IPO, SPACE_ACTION, SPACE_NLA, SPACE_NODE, SPACE_FILE)) {
|
||||
prop= RNA_def_property(srna, "list", PROP_FLOAT, PROP_COLOR_GAMMA);
|
||||
RNA_def_property_array(prop, 3);
|
||||
RNA_def_property_ui_text(prop, "Source List", "");
|
||||
RNA_def_property_update(prop, 0, "rna_userdef_update");
|
||||
/* list / channels */
|
||||
static void rna_def_userdef_theme_space_list_generic(BlenderRNA *brna)
|
||||
{
|
||||
StructRNA *srna;
|
||||
PropertyRNA *prop;
|
||||
|
||||
prop= RNA_def_property(srna, "list_title", PROP_FLOAT, PROP_COLOR_GAMMA);
|
||||
RNA_def_property_array(prop, 3);
|
||||
RNA_def_property_ui_text(prop, "Source List Title", "");
|
||||
RNA_def_property_update(prop, 0, "rna_userdef_update");
|
||||
srna= RNA_def_struct(brna, "ThemeSpaceListGeneric", NULL);
|
||||
RNA_def_struct_sdna(srna, "ThemeSpace");
|
||||
RNA_def_struct_ui_text(srna, "Theme Space List Settings", "");
|
||||
|
||||
prop= RNA_def_property(srna, "list_text", PROP_FLOAT, PROP_COLOR_GAMMA);
|
||||
RNA_def_property_array(prop, 3);
|
||||
RNA_def_property_ui_text(prop, "Source List Text", "");
|
||||
RNA_def_property_update(prop, 0, "rna_userdef_update");
|
||||
prop= RNA_def_property(srna, "list", PROP_FLOAT, PROP_COLOR_GAMMA);
|
||||
RNA_def_property_array(prop, 3);
|
||||
RNA_def_property_ui_text(prop, "Source List", "");
|
||||
RNA_def_property_update(prop, 0, "rna_userdef_update");
|
||||
|
||||
prop= RNA_def_property(srna, "list_text_hi", PROP_FLOAT, PROP_COLOR_GAMMA);
|
||||
RNA_def_property_array(prop, 3);
|
||||
RNA_def_property_ui_text(prop, "Source List Text Highlight", "");
|
||||
RNA_def_property_update(prop, 0, "rna_userdef_update");
|
||||
}
|
||||
prop= RNA_def_property(srna, "list_title", PROP_FLOAT, PROP_COLOR_GAMMA);
|
||||
RNA_def_property_array(prop, 3);
|
||||
RNA_def_property_ui_text(prop, "Source List Title", "");
|
||||
RNA_def_property_update(prop, 0, "rna_userdef_update");
|
||||
|
||||
prop= RNA_def_property(srna, "list_text", PROP_FLOAT, PROP_COLOR_GAMMA);
|
||||
RNA_def_property_array(prop, 3);
|
||||
RNA_def_property_ui_text(prop, "Source List Text", "");
|
||||
RNA_def_property_update(prop, 0, "rna_userdef_update");
|
||||
|
||||
prop= RNA_def_property(srna, "list_text_hi", PROP_FLOAT, PROP_COLOR_GAMMA);
|
||||
RNA_def_property_array(prop, 3);
|
||||
RNA_def_property_ui_text(prop, "Source List Text Highlight", "");
|
||||
RNA_def_property_update(prop, 0, "rna_userdef_update");
|
||||
}
|
||||
|
||||
static void rna_def_userdef_theme_spaces_main(StructRNA *srna)
|
||||
{
|
||||
PropertyRNA *prop;
|
||||
|
||||
prop= RNA_def_property(srna, "space", PROP_POINTER, PROP_NONE);
|
||||
RNA_def_property_flag(prop, PROP_NEVER_NULL);
|
||||
RNA_def_property_struct_type(prop, "ThemeSpaceGeneric");
|
||||
RNA_def_property_pointer_funcs(prop, "rna_Theme_space_generic_get", NULL, NULL, NULL);
|
||||
RNA_def_property_ui_text(prop, "Theme Space", "Settings for space");
|
||||
}
|
||||
|
||||
static void rna_def_userdef_theme_spaces_list_main(StructRNA *srna)
|
||||
{
|
||||
PropertyRNA *prop;
|
||||
|
||||
prop= RNA_def_property(srna, "space_list", PROP_POINTER, PROP_NONE);
|
||||
RNA_def_property_flag(prop, PROP_NEVER_NULL);
|
||||
RNA_def_property_struct_type(prop, "ThemeSpaceListGeneric");
|
||||
RNA_def_property_pointer_funcs(prop, "rna_Theme_space_list_generic_get", NULL, NULL, NULL);
|
||||
RNA_def_property_ui_text(prop, "Theme Space List", "Settings for space list");
|
||||
}
|
||||
|
||||
static void rna_def_userdef_theme_spaces_vertex(StructRNA *srna)
|
||||
@ -992,7 +1038,7 @@ static void rna_def_userdef_theme_space_view3d(BlenderRNA *brna)
|
||||
RNA_def_struct_clear_flag(srna, STRUCT_UNDO);
|
||||
RNA_def_struct_ui_text(srna, "Theme 3D View", "Theme settings for the 3D View");
|
||||
|
||||
rna_def_userdef_theme_spaces_main(srna, SPACE_VIEW3D);
|
||||
rna_def_userdef_theme_spaces_main(srna);
|
||||
|
||||
prop= RNA_def_property(srna, "grid", PROP_FLOAT, PROP_COLOR_GAMMA);
|
||||
RNA_def_property_array(prop, 3);
|
||||
@ -1130,7 +1176,8 @@ static void rna_def_userdef_theme_space_graph(BlenderRNA *brna)
|
||||
RNA_def_struct_clear_flag(srna, STRUCT_UNDO);
|
||||
RNA_def_struct_ui_text(srna, "Theme Graph Editor", "Theme settings for the graph editor");
|
||||
|
||||
rna_def_userdef_theme_spaces_main(srna, SPACE_IPO);
|
||||
rna_def_userdef_theme_spaces_main(srna);
|
||||
rna_def_userdef_theme_spaces_list_main(srna);
|
||||
|
||||
prop= RNA_def_property(srna, "grid", PROP_FLOAT, PROP_COLOR_GAMMA);
|
||||
RNA_def_property_array(prop, 3);
|
||||
@ -1215,7 +1262,8 @@ static void rna_def_userdef_theme_space_file(BlenderRNA *brna)
|
||||
RNA_def_struct_clear_flag(srna, STRUCT_UNDO);
|
||||
RNA_def_struct_ui_text(srna, "Theme File Browser", "Theme settings for the File Browser");
|
||||
|
||||
rna_def_userdef_theme_spaces_main(srna, SPACE_FILE);
|
||||
rna_def_userdef_theme_spaces_main(srna);
|
||||
rna_def_userdef_theme_spaces_list_main(srna);
|
||||
|
||||
prop= RNA_def_property(srna, "selected_file", PROP_FLOAT, PROP_COLOR_GAMMA);
|
||||
RNA_def_property_float_sdna(prop, NULL, "hilite");
|
||||
@ -1265,7 +1313,7 @@ static void rna_def_userdef_theme_space_outliner(BlenderRNA *brna)
|
||||
RNA_def_struct_clear_flag(srna, STRUCT_UNDO);
|
||||
RNA_def_struct_ui_text(srna, "Theme Outliner", "Theme settings for the Outliner");
|
||||
|
||||
rna_def_userdef_theme_spaces_main(srna, SPACE_OUTLINER);
|
||||
rna_def_userdef_theme_spaces_main(srna);
|
||||
}
|
||||
|
||||
static void rna_def_userdef_theme_space_userpref(BlenderRNA *brna)
|
||||
@ -1279,7 +1327,7 @@ static void rna_def_userdef_theme_space_userpref(BlenderRNA *brna)
|
||||
RNA_def_struct_clear_flag(srna, STRUCT_UNDO);
|
||||
RNA_def_struct_ui_text(srna, "Theme User Preferences", "Theme settings for the User Preferences");
|
||||
|
||||
rna_def_userdef_theme_spaces_main(srna, SPACE_USERPREF);
|
||||
rna_def_userdef_theme_spaces_main(srna);
|
||||
}
|
||||
|
||||
static void rna_def_userdef_theme_space_console(BlenderRNA *brna)
|
||||
@ -1294,7 +1342,7 @@ static void rna_def_userdef_theme_space_console(BlenderRNA *brna)
|
||||
RNA_def_struct_clear_flag(srna, STRUCT_UNDO);
|
||||
RNA_def_struct_ui_text(srna, "Theme Console", "Theme settings for the Console");
|
||||
|
||||
rna_def_userdef_theme_spaces_main(srna, SPACE_CONSOLE);
|
||||
rna_def_userdef_theme_spaces_main(srna);
|
||||
|
||||
prop= RNA_def_property(srna, "line_output", PROP_FLOAT, PROP_COLOR_GAMMA);
|
||||
RNA_def_property_float_sdna(prop, NULL, "console_output");
|
||||
@ -1338,7 +1386,7 @@ static void rna_def_userdef_theme_space_info(BlenderRNA *brna)
|
||||
RNA_def_struct_clear_flag(srna, STRUCT_UNDO);
|
||||
RNA_def_struct_ui_text(srna, "Theme Info", "Theme settings for Info");
|
||||
|
||||
rna_def_userdef_theme_spaces_main(srna, SPACE_INFO);
|
||||
rna_def_userdef_theme_spaces_main(srna);
|
||||
}
|
||||
|
||||
|
||||
@ -1354,7 +1402,7 @@ static void rna_def_userdef_theme_space_text(BlenderRNA *brna)
|
||||
RNA_def_struct_clear_flag(srna, STRUCT_UNDO);
|
||||
RNA_def_struct_ui_text(srna, "Theme Text Editor", "Theme settings for the Text Editor");
|
||||
|
||||
rna_def_userdef_theme_spaces_main(srna, SPACE_TEXT);
|
||||
rna_def_userdef_theme_spaces_main(srna);
|
||||
|
||||
prop= RNA_def_property(srna, "line_numbers_background", PROP_FLOAT, PROP_COLOR_GAMMA);
|
||||
RNA_def_property_float_sdna(prop, NULL, "grid");
|
||||
@ -1423,7 +1471,8 @@ static void rna_def_userdef_theme_space_node(BlenderRNA *brna)
|
||||
RNA_def_struct_clear_flag(srna, STRUCT_UNDO);
|
||||
RNA_def_struct_ui_text(srna, "Theme Node Editor", "Theme settings for the Node Editor");
|
||||
|
||||
rna_def_userdef_theme_spaces_main(srna, SPACE_NODE);
|
||||
rna_def_userdef_theme_spaces_main(srna);
|
||||
rna_def_userdef_theme_spaces_list_main(srna);
|
||||
|
||||
prop= RNA_def_property(srna, "wire", PROP_FLOAT, PROP_COLOR_GAMMA);
|
||||
RNA_def_property_float_sdna(prop, NULL, "wire");
|
||||
@ -1493,7 +1542,7 @@ static void rna_def_userdef_theme_space_logic(BlenderRNA *brna)
|
||||
RNA_def_struct_clear_flag(srna, STRUCT_UNDO);
|
||||
RNA_def_struct_ui_text(srna, "Theme Logic Editor", "Theme settings for the Logic Editor");
|
||||
|
||||
rna_def_userdef_theme_spaces_main(srna, SPACE_LOGIC);
|
||||
rna_def_userdef_theme_spaces_main(srna);
|
||||
|
||||
prop= RNA_def_property(srna, "panel", PROP_FLOAT, PROP_COLOR_GAMMA);
|
||||
RNA_def_property_array(prop, 3);
|
||||
@ -1514,7 +1563,7 @@ static void rna_def_userdef_theme_space_buts(BlenderRNA *brna)
|
||||
RNA_def_struct_clear_flag(srna, STRUCT_UNDO);
|
||||
RNA_def_struct_ui_text(srna, "Theme Properties", "Theme settings for the Properties");
|
||||
|
||||
rna_def_userdef_theme_spaces_main(srna, SPACE_BUTS);
|
||||
rna_def_userdef_theme_spaces_main(srna);
|
||||
|
||||
prop= RNA_def_property(srna, "panel", PROP_FLOAT, PROP_COLOR_GAMMA);
|
||||
RNA_def_property_array(prop, 3);
|
||||
@ -1534,7 +1583,7 @@ static void rna_def_userdef_theme_space_time(BlenderRNA *brna)
|
||||
RNA_def_struct_clear_flag(srna, STRUCT_UNDO);
|
||||
RNA_def_struct_ui_text(srna, "Theme Timeline", "Theme settings for the Timeline");
|
||||
|
||||
rna_def_userdef_theme_spaces_main(srna, SPACE_TIME);
|
||||
rna_def_userdef_theme_spaces_main(srna);
|
||||
|
||||
prop= RNA_def_property(srna, "grid", PROP_FLOAT, PROP_COLOR_GAMMA);
|
||||
RNA_def_property_array(prop, 3);
|
||||
@ -1560,7 +1609,7 @@ static void rna_def_userdef_theme_space_image(BlenderRNA *brna)
|
||||
RNA_def_struct_clear_flag(srna, STRUCT_UNDO);
|
||||
RNA_def_struct_ui_text(srna, "Theme Image Editor", "Theme settings for the Image Editor");
|
||||
|
||||
rna_def_userdef_theme_spaces_main(srna, SPACE_IMAGE);
|
||||
rna_def_userdef_theme_spaces_main(srna);
|
||||
rna_def_userdef_theme_spaces_vertex(srna);
|
||||
rna_def_userdef_theme_spaces_face(srna);
|
||||
|
||||
@ -1588,7 +1637,7 @@ static void rna_def_userdef_theme_space_seq(BlenderRNA *brna)
|
||||
RNA_def_struct_clear_flag(srna, STRUCT_UNDO);
|
||||
RNA_def_struct_ui_text(srna, "Theme Sequence Editor", "Theme settings for the Sequence Editor");
|
||||
|
||||
rna_def_userdef_theme_spaces_main(srna, SPACE_IMAGE);
|
||||
rna_def_userdef_theme_spaces_main(srna);
|
||||
|
||||
prop= RNA_def_property(srna, "grid", PROP_FLOAT, PROP_COLOR_GAMMA);
|
||||
RNA_def_property_array(prop, 3);
|
||||
@ -1680,7 +1729,8 @@ static void rna_def_userdef_theme_space_action(BlenderRNA *brna)
|
||||
RNA_def_struct_clear_flag(srna, STRUCT_UNDO);
|
||||
RNA_def_struct_ui_text(srna, "Theme DopeSheet", "Theme settings for the DopeSheet");
|
||||
|
||||
rna_def_userdef_theme_spaces_main(srna, SPACE_ACTION);
|
||||
rna_def_userdef_theme_spaces_main(srna);
|
||||
rna_def_userdef_theme_spaces_list_main(srna);
|
||||
|
||||
prop= RNA_def_property(srna, "grid", PROP_FLOAT, PROP_COLOR_GAMMA);
|
||||
RNA_def_property_array(prop, 3);
|
||||
@ -1766,7 +1816,8 @@ static void rna_def_userdef_theme_space_nla(BlenderRNA *brna)
|
||||
RNA_def_struct_clear_flag(srna, STRUCT_UNDO);
|
||||
RNA_def_struct_ui_text(srna, "Theme NLA Editor", "Theme settings for the NLA Editor");
|
||||
|
||||
rna_def_userdef_theme_spaces_main(srna, SPACE_NLA);
|
||||
rna_def_userdef_theme_spaces_main(srna);
|
||||
rna_def_userdef_theme_spaces_list_main(srna);
|
||||
|
||||
prop= RNA_def_property(srna, "grid", PROP_FLOAT, PROP_COLOR_GAMMA);
|
||||
RNA_def_property_array(prop, 3);
|
||||
@ -1855,7 +1906,7 @@ static void rna_def_userdef_theme_space_clip(BlenderRNA *brna)
|
||||
RNA_def_struct_clear_flag(srna, STRUCT_UNDO);
|
||||
RNA_def_struct_ui_text(srna, "Theme Clip Editor", "Theme settings for the Movie Clip Editor");
|
||||
|
||||
rna_def_userdef_theme_spaces_main(srna, SPACE_CLIP);
|
||||
rna_def_userdef_theme_spaces_main(srna);
|
||||
|
||||
prop= RNA_def_property(srna, "marker_outline", PROP_FLOAT, PROP_COLOR_GAMMA);
|
||||
RNA_def_property_float_sdna(prop, NULL, "marker_outline");
|
||||
@ -2111,6 +2162,9 @@ static void rna_def_userdef_dothemes(BlenderRNA *brna)
|
||||
rna_def_userdef_theme_ui_style(brna);
|
||||
rna_def_userdef_theme_ui(brna);
|
||||
|
||||
rna_def_userdef_theme_space_generic(brna);
|
||||
rna_def_userdef_theme_space_list_generic(brna);
|
||||
|
||||
rna_def_userdef_theme_space_view3d(brna);
|
||||
rna_def_userdef_theme_space_graph(brna);
|
||||
rna_def_userdef_theme_space_file(brna);
|
||||
|
@ -80,7 +80,6 @@ void register_node_type_cmp_bilateralblur(struct bNodeTreeType *ttype);
|
||||
void register_node_type_cmp_vecblur(struct bNodeTreeType *ttype);
|
||||
void register_node_type_cmp_dilateerode(struct bNodeTreeType *ttype);
|
||||
void register_node_type_cmp_defocus(struct bNodeTreeType *ttype);
|
||||
void register_node_type_cmp_doubleedgemask(struct bNodeTreeType *ttype);
|
||||
|
||||
void register_node_type_cmp_valtorgb(struct bNodeTreeType *ttype);
|
||||
void register_node_type_cmp_rgbtobw(struct bNodeTreeType *ttype);
|
||||
@ -104,6 +103,7 @@ void register_node_type_cmp_color_matte(struct bNodeTreeType *ttype);
|
||||
void register_node_type_cmp_channel_matte(struct bNodeTreeType *ttype);
|
||||
void register_node_type_cmp_color_spill(struct bNodeTreeType *ttype);
|
||||
void register_node_type_cmp_luma_matte(struct bNodeTreeType *ttype);
|
||||
void register_node_type_cmp_doubleedgemask(struct bNodeTreeType *ttype);
|
||||
|
||||
void register_node_type_cmp_translate(struct bNodeTreeType *ttype);
|
||||
void register_node_type_cmp_rotate(struct bNodeTreeType *ttype);
|
||||
|
@ -29,7 +29,7 @@
|
||||
* \ingroup cmpnodes
|
||||
*/
|
||||
#include "node_composite_util.h"
|
||||
/* **************** DblEdgMatte ******************** */
|
||||
/* **************** Double Edge Mask ******************** */
|
||||
|
||||
|
||||
static bNodeSocketTemplate cmp_node_doubleedgemask_in[]= {
|
||||
@ -1149,7 +1149,7 @@ static void node_composit_exec_doubleedgemask(void *UNUSED(data), bNode *node, b
|
||||
}
|
||||
|
||||
isz=rsize[0]; // set edge and gradient buffer sizes once again...
|
||||
osz=rsize[1]; // the sizes in rsize[] have been modified (always increased)
|
||||
osz=rsize[1]; // the sizes in rsize[] may have been modified
|
||||
gsz=rsize[2]; // by the do_*EdgeDetection() function.
|
||||
|
||||
// quick check for existance of edges in the buffer...
|
||||
|
@ -530,7 +530,8 @@ int node_group_ungroup(bNodeTree *ntree, bNode *gnode)
|
||||
BLI_addtail(&ntree->links, link);
|
||||
}
|
||||
|
||||
/* and copy across the animation */
|
||||
/* and copy across the animation,
|
||||
* note that the animation data's action can be NULL here */
|
||||
if (wgroup->adt) {
|
||||
LinkData *ld, *ldn=NULL;
|
||||
bAction *waction;
|
||||
@ -550,7 +551,9 @@ int node_group_ungroup(bNodeTree *ntree, bNode *gnode)
|
||||
}
|
||||
|
||||
/* free temp action too */
|
||||
free_libblock(&G.main->action, waction);
|
||||
if (waction) {
|
||||
free_libblock(&G.main->action, waction);
|
||||
}
|
||||
}
|
||||
|
||||
/* delete the group instance. this also removes old input links! */
|
||||
|
@ -745,7 +745,7 @@ int pyrna_enum_value_from_id(EnumPropertyItem *item, const char *identifier, int
|
||||
|
||||
static int pyrna_struct_compare(BPy_StructRNA *a, BPy_StructRNA *b)
|
||||
{
|
||||
return (a->ptr.data == b->ptr.data) ? 0 : -1;
|
||||
return (a->ptr.data == b->ptr.data && a->ptr.type == b->ptr.type) ? 0 : -1;
|
||||
}
|
||||
|
||||
static int pyrna_prop_compare(BPy_PropertyRNA *a, BPy_PropertyRNA *b)
|
||||
|
@ -50,7 +50,8 @@
|
||||
because function is too long. Since this is code that is called billions
|
||||
of times we really do want to inline. */
|
||||
|
||||
MALWAYS_INLINE RayObject* rayface_from_coords(RayFace *rayface, void *ob, void *face, float *v1, float *v2, float *v3, float *v4)
|
||||
MALWAYS_INLINE RayObject* rayface_from_coords(RayFace *rayface, void *ob, void *face,
|
||||
float *v1, float *v2, float *v3, float *v4)
|
||||
{
|
||||
rayface->ob = ob;
|
||||
rayface->face = face;
|
||||
@ -118,7 +119,7 @@ MALWAYS_INLINE int vlr_check_intersect(Isect *is, ObjectInstanceRen *obi, VlakRe
|
||||
return (is->lay & obi->lay);
|
||||
}
|
||||
|
||||
MALWAYS_INLINE int vlr_check_intersect_solid(Isect *is, ObjectInstanceRen* obi, VlakRen *vlr)
|
||||
MALWAYS_INLINE int vlr_check_intersect_solid(Isect *UNUSED(is), ObjectInstanceRen* UNUSED(obi), VlakRen *vlr)
|
||||
{
|
||||
/* solid material types only */
|
||||
if (vlr->mat->material_type == MA_TYPE_SURFACE)
|
||||
@ -127,7 +128,7 @@ MALWAYS_INLINE int vlr_check_intersect_solid(Isect *is, ObjectInstanceRen* obi,
|
||||
return 0;
|
||||
}
|
||||
|
||||
MALWAYS_INLINE int vlr_check_bake(Isect *is, ObjectInstanceRen* obi, VlakRen *vlr)
|
||||
MALWAYS_INLINE int vlr_check_bake(Isect *is, ObjectInstanceRen* obi, VlakRen *UNUSED(vlr))
|
||||
{
|
||||
return (obi->obr->ob != is->userdata);
|
||||
}
|
||||
|
@ -46,13 +46,14 @@ static void RE_rayobject_blibvh_done(RayObject *o);
|
||||
static void RE_rayobject_blibvh_free(RayObject *o);
|
||||
static void RE_rayobject_blibvh_bb(RayObject *o, float *min, float *max);
|
||||
|
||||
static float RE_rayobject_blibvh_cost(RayObject *o)
|
||||
static float RE_rayobject_blibvh_cost(RayObject *UNUSED(o))
|
||||
{
|
||||
//TODO calculate the expected cost to raycast on this structure
|
||||
return 1.0;
|
||||
}
|
||||
|
||||
static void RE_rayobject_blibvh_hint_bb(RayObject *o, RayHint *hint, float *min, float *max)
|
||||
static void RE_rayobject_blibvh_hint_bb(RayObject *UNUSED(o), RayHint *UNUSED(hint),
|
||||
float *UNUSED(min), float *UNUSED(max))
|
||||
{
|
||||
return;
|
||||
}
|
||||
@ -95,7 +96,7 @@ struct BVHCallbackUserData
|
||||
RayObject **leafs;
|
||||
};
|
||||
|
||||
static void bvh_callback(void *userdata, int index, const BVHTreeRay *ray, BVHTreeRayHit *hit)
|
||||
static void bvh_callback(void *userdata, int index, const BVHTreeRay *UNUSED(ray), BVHTreeRayHit *hit)
|
||||
{
|
||||
struct BVHCallbackUserData *data = (struct BVHCallbackUserData*)userdata;
|
||||
Isect *isec = data->isec;
|
||||
|
@ -32,30 +32,33 @@
|
||||
|
||||
#include "rayobject.h"
|
||||
|
||||
#include "BLI_utildefines.h"
|
||||
|
||||
/*
|
||||
* Empty raytree
|
||||
*/
|
||||
|
||||
static int RE_rayobject_empty_intersect(RayObject *o, Isect *is)
|
||||
static int RE_rayobject_empty_intersect(RayObject *UNUSED(o), Isect *UNUSED(is))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void RE_rayobject_empty_free(RayObject *o)
|
||||
static void RE_rayobject_empty_free(RayObject *UNUSED(o))
|
||||
{
|
||||
}
|
||||
|
||||
static void RE_rayobject_empty_bb(RayObject *o, float *min, float *max)
|
||||
static void RE_rayobject_empty_bb(RayObject *UNUSED(o), float *UNUSED(min), float *UNUSED(max))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
static float RE_rayobject_empty_cost(RayObject *o)
|
||||
static float RE_rayobject_empty_cost(RayObject *UNUSED(o))
|
||||
{
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
static void RE_rayobject_empty_hint_bb(RayObject *o, RayHint *hint, float *min, float *max)
|
||||
static void RE_rayobject_empty_hint_bb(RayObject *UNUSED(o), RayHint *UNUSED(hint),
|
||||
float *UNUSED(min), float *UNUSED(max))
|
||||
{}
|
||||
|
||||
static RayObjectAPI empty_api =
|
||||
|
@ -47,7 +47,8 @@ static void RE_rayobject_instance_free(RayObject *o);
|
||||
static void RE_rayobject_instance_bb(RayObject *o, float *min, float *max);
|
||||
static float RE_rayobject_instance_cost(RayObject *o);
|
||||
|
||||
static void RE_rayobject_instance_hint_bb(RayObject *o, RayHint *hint, float *min, float *max)
|
||||
static void RE_rayobject_instance_hint_bb(RayObject *UNUSED(o), RayHint *UNUSED(hint),
|
||||
float *UNUSED(min), float *UNUSED(max))
|
||||
{}
|
||||
|
||||
static RayObjectAPI instance_api =
|
||||
|
@ -96,12 +96,13 @@ static void RE_rayobject_octree_bb(RayObject *o, float *min, float *max);
|
||||
/*
|
||||
* This function is not expected to be called by current code state.
|
||||
*/
|
||||
static float RE_rayobject_octree_cost(RayObject *o)
|
||||
static float RE_rayobject_octree_cost(RayObject *UNUSED(o))
|
||||
{
|
||||
return 1.0;
|
||||
}
|
||||
|
||||
static void RE_rayobject_octree_hint_bb(RayObject *o, RayHint *hint, float *min, float *max)
|
||||
static void RE_rayobject_octree_hint_bb(RayObject *UNUSED(o), RayHint *UNUSED(hint),
|
||||
float *UNUSED(min), float *UNUSED(max))
|
||||
{
|
||||
return;
|
||||
}
|
||||
@ -671,7 +672,7 @@ static void RE_rayobject_octree_bb(RayObject *tree, float *min, float *max)
|
||||
}
|
||||
|
||||
/* check all faces in this node */
|
||||
static int testnode(Octree *oc, Isect *is, Node *no, OcVal ocval)
|
||||
static int testnode(Octree *UNUSED(oc), Isect *is, Node *no, OcVal ocval)
|
||||
{
|
||||
short nr=0;
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user