Merged changes in the trunk up to revision 31284.

This commit is contained in:
2010-08-12 13:41:59 +00:00
248 changed files with 6634 additions and 6285 deletions

View File

@@ -316,12 +316,6 @@ IF(UNIX AND NOT APPLE)
SET(PLATFORM_CFLAGS "-pipe -fPIC -funsigned-char -fno-strict-aliasing -Wno-char-subscripts")
IF(WITH_RAYOPTIMIZATION AND SUPPORT_SSE_BUILD)
SET(PLATFORM_CFLAGS " -msse -msse2 ${PLATFORM_CFLAGS}")
ADD_DEFINITIONS(-D__SSE__)
ADD_DEFINITIONS(-D__MMX__)
ENDIF(WITH_RAYOPTIMIZATION AND SUPPORT_SSE_BUILD)
SET(PLATFORM_LINKFLAGS "-pthread")
# Better warnings
@@ -633,12 +627,6 @@ IF(WIN32)
SET(WITH_JACK OFF)
ENDIF(WITH_JACK)
IF(WITH_RAYOPTIMIZATION AND SUPPORT_SSE_BUILD)
SET(PLATFORM_CFLAGS " -msse -msse2 ${PLATFORM_CFLAGS}")
ADD_DEFINITIONS(-D__SSE__)
ADD_DEFINITIONS(-D__MMX__)
ENDIF(WITH_RAYOPTIMIZATION AND SUPPORT_SSE_BUILD)
ENDIF(MSVC)
ENDIF(WIN32)
@@ -819,12 +807,6 @@ IF(APPLE)
SET(TIFF_LIBPATH ${TIFF}/lib)
ENDIF(WITH_IMAGE_TIFF)
IF(WITH_RAYOPTIMIZATION AND SUPPORT_SSE_BUILD)
SET(PLATFORM_CFLAGS " -msse -msse2 ${PLATFORM_CFLAGS}")
ADD_DEFINITIONS(-D__SSE__)
ADD_DEFINITIONS(-D__MMX__)
ENDIF(WITH_RAYOPTIMIZATION AND SUPPORT_SSE_BUILD)
SET(EXETYPE MACOSX_BUNDLE)
SET(CMAKE_C_FLAGS_DEBUG "-fno-strict-aliasing -g")
@@ -868,9 +850,26 @@ IF(WITH_BUILDINFO)
ENDIF(BUILD_REV_RETURN)
ENDIF(WIN32)
ENDIF(WITH_BUILDINFO)
#-----------------------------------------------------------------------------
# Common.
IF(WITH_RAYOPTIMIZATION)
IF(CMAKE_COMPILER_IS_GNUCC)
IF(SUPPORT_SSE_BUILD)
SET(PLATFORM_CFLAGS " -msse ${PLATFORM_CFLAGS}")
ADD_DEFINITIONS(-D__SSE__)
ADD_DEFINITIONS(-D__MMX__)
ENDIF(SUPPORT_SSE_BUILD)
IF(SUPPORT_SSE2_BUILD)
SET(PLATFORM_CFLAGS " -msse2 ${PLATFORM_CFLAGS}")
ADD_DEFINITIONS(-D__SSE2__)
IF(NOT SUPPORT_SSE_BUILD) # dont double up
ADD_DEFINITIONS(-D__MMX__)
ENDIF(NOT SUPPORT_SSE_BUILD)
ENDIF(SUPPORT_SSE2_BUILD)
ENDIF(CMAKE_COMPILER_IS_GNUCC)
ENDIF(WITH_RAYOPTIMIZATION)
IF(WITH_IMAGE_OPENJPEG)
set(OPENJPEG ${CMAKE_SOURCE_DIR}/extern/libopenjpeg)
set(OPENJPEG_INC ${OPENJPEG})

View File

@@ -183,19 +183,38 @@ MACRO(SETUP_LIBLINKS
ENDMACRO(SETUP_LIBLINKS)
MACRO(TEST_SSE_SUPPORT)
INCLUDE(CheckCXXSourceCompiles)
INCLUDE(CheckCSourceRuns)
MESSAGE(STATUS "Detecting SSE support")
IF(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX)
SET(CMAKE_REQUIRED_FLAGS "-msse -msse2")
ELSEIF(MSVC)
SET(CMAKE_REQUIRED_FLAGS "/arch:SSE2")
SET(CMAKE_REQUIRED_FLAGS "/arch:SSE2") # TODO, SSE 1 ?
ENDIF()
CHECK_CXX_SOURCE_COMPILES("
CHECK_C_SOURCE_RUNS("
#include <xmmintrin.h>
int main() { __m128 v = _mm_setzero_ps(); return 0; }"
SUPPORT_SSE_BUILD)
CHECK_C_SOURCE_RUNS("
#include <emmintrin.h>
int main() { __m128d v = _mm_setzero_pd(); return 0; }"
SUPPORT_SSE2_BUILD)
MESSAGE(STATUS "Detecting SSE support")
IF(SUPPORT_SSE_BUILD)
MESSAGE(STATUS " ...SSE support found.")
ELSE(SUPPORT_SSE_BUILD)
MESSAGE(STATUS " ...SSE support missing.")
ENDIF(SUPPORT_SSE_BUILD)
IF(SUPPORT_SSE2_BUILD)
MESSAGE(STATUS " ...SSE2 support found.")
ELSE(SUPPORT_SSE2_BUILD)
MESSAGE(STATUS " ...SSE2 support missing.")
ENDIF(SUPPORT_SSE2_BUILD)
ENDMACRO(TEST_SSE_SUPPORT)

View File

@@ -176,6 +176,9 @@ ifeq ($(OS),linux)
REL_CFLAGS += -O2
REL_CCFLAGS += -O2
NAN_DEPEND = true
ifeq ($(WITH_BF_RAYOPTIMIZATION), true)
CCFLAGS += -msse
endif
ifeq ($(CPU),alpha)
CFLAGS += -mieee
endif

View File

@@ -16,7 +16,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.

View File

@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.

View File

@@ -16,7 +16,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.

View File

@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.

View File

@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.

View File

@@ -55,7 +55,7 @@ import math # math.pi
import shutil # for file copying
import bpy
from mathutils import Vector, Euler, Matrix, RotationMatrix
from mathutils import Vector, Euler, Matrix
def copy_file(source, dest):
# XXX - remove, can use shutil
@@ -107,19 +107,19 @@ def eulerRadToDeg(eul):
mtx4_identity = Matrix()
# testing
mtx_x90 = RotationMatrix( math.pi/2, 3, 'X') # used
#mtx_x90n = RotationMatrix(-90, 3, 'x')
#mtx_y90 = RotationMatrix( 90, 3, 'y')
#mtx_y90n = RotationMatrix(-90, 3, 'y')
#mtx_z90 = RotationMatrix( 90, 3, 'z')
#mtx_z90n = RotationMatrix(-90, 3, 'z')
mtx_x90 = Matrix.Rotation( math.pi/2, 3, 'X') # used
#mtx_x90n = Matrix.Rotation(-90, 3, 'x')
#mtx_y90 = Matrix.Rotation( 90, 3, 'y')
#mtx_y90n = Matrix.Rotation(-90, 3, 'y')
#mtx_z90 = Matrix.Rotation( 90, 3, 'z')
#mtx_z90n = Matrix.Rotation(-90, 3, 'z')
#mtx4_x90 = RotationMatrix( 90, 4, 'x')
mtx4_x90n = RotationMatrix(-math.pi/2, 4, 'X') # used
#mtx4_y90 = RotationMatrix( 90, 4, 'y')
mtx4_y90n = RotationMatrix(-math.pi/2, 4, 'Y') # used
mtx4_z90 = RotationMatrix( math.pi/2, 4, 'Z') # used
mtx4_z90n = RotationMatrix(-math.pi/2, 4, 'Z') # used
#mtx4_x90 = Matrix.Rotation( 90, 4, 'x')
mtx4_x90n = Matrix.Rotation(-math.pi/2, 4, 'X') # used
#mtx4_y90 = Matrix.Rotation( 90, 4, 'y')
mtx4_y90n = Matrix.Rotation(-math.pi/2, 4, 'Y') # used
mtx4_z90 = Matrix.Rotation( math.pi/2, 4, 'Z') # used
mtx4_z90n = Matrix.Rotation(-math.pi/2, 4, 'Z') # used
# def strip_path(p):
# return p.split('\\')[-1].split('/')[-1]
@@ -562,7 +562,7 @@ def write(filename, batch_objects = None, \
elif type =='CAMERA':
# elif ob and type =='Camera':
y = matrix_rot * Vector((0.0, 1.0, 0.0))
matrix_rot = RotationMatrix(math.pi/2, 3, y) * matrix_rot
matrix_rot = Matrix.Rotation(math.pi/2, 3, y) * matrix_rot
return matrix_rot
@@ -664,7 +664,7 @@ def write(filename, batch_objects = None, \
rot = tuple(matrix_rot.to_euler())
elif ob and ob.type =='Camera':
y = matrix_rot * Vector((0.0, 1.0, 0.0))
matrix_rot = RotationMatrix(math.pi/2, 3, y) * matrix_rot
matrix_rot = Matrix.Rotation(math.pi/2, 3, y) * matrix_rot
rot = tuple(matrix_rot.to_euler())
else:
rot = tuple(matrix_rot.to_euler())

View File

@@ -275,7 +275,7 @@ def write_nurb(file, ob, ob_mat):
return tot_verts
def write(filepath, objects, scene,
def write_file(filepath, objects, scene,
EXPORT_TRI=False,
EXPORT_EDGES=False,
EXPORT_NORMALS=False,
@@ -363,7 +363,7 @@ def write(filepath, objects, scene,
file.write('mtllib %s\n' % ( mtlfilepath.split('\\')[-1].split('/')[-1] ))
if EXPORT_ROTX90:
mat_xrot90= mathutils.RotationMatrix(-math.pi/2, 4, 'X')
mat_xrot90= mathutils.Matrix.Rotation(-math.pi/2, 4, 'X')
# Initialize totals, these are updated each object
totverts = totuvco = totno = 1
@@ -788,27 +788,26 @@ def write(filepath, objects, scene,
# print('\tError: "%s" could not be used as a base for an image path.' % filepath)
print("OBJ Export time: %.2f" % (time.clock() - time1))
# print "OBJ Export time: %.2f" % (sys.time() - time1)
def write(filepath, context,
EXPORT_APPLY_MODIFIERS = True, # not used
EXPORT_ROTX90 = True, # wrong
EXPORT_TRI = False, # ok
EXPORT_EDGES = False,
EXPORT_NORMALS = False, # not yet
EXPORT_NORMALS_HQ = False, # not yet
EXPORT_UV = True, # ok
EXPORT_MTL = True,
EXPORT_SEL_ONLY = True, # ok
EXPORT_ALL_SCENES = False, # XXX not working atm
EXPORT_ANIMATION = False,
EXPORT_COPY_IMAGES = False,
EXPORT_BLEN_OBS = True,
EXPORT_GROUP_BY_OB = False,
EXPORT_GROUP_BY_MAT = False,
EXPORT_KEEP_VERT_ORDER = False,
EXPORT_POLYGROUPS = False,
EXPORT_CURVE_AS_NURBS = True):
EXPORT_TRI, # ok
EXPORT_EDGES,
EXPORT_NORMALS, # not yet
EXPORT_NORMALS_HQ, # not yet
EXPORT_UV, # ok
EXPORT_MTL,
EXPORT_COPY_IMAGES,
EXPORT_APPLY_MODIFIERS, # ok
EXPORT_ROTX90, # wrong
EXPORT_BLEN_OBS,
EXPORT_GROUP_BY_OB,
EXPORT_GROUP_BY_MAT,
EXPORT_KEEP_VERT_ORDER,
EXPORT_POLYGROUPS,
EXPORT_CURVE_AS_NURBS,
EXPORT_SEL_ONLY, # ok
EXPORT_ALL_SCENES, # XXX not working atm
EXPORT_ANIMATION): # Not used
base_name, ext = splitExt(filepath)
context_name = [base_name, '', '', ext] # Base name, scene name, frame number, extension
@@ -831,17 +830,17 @@ def write(filepath, context,
export_scenes = [orig_scene]
# Export all scenes.
for scn in export_scenes:
# scn.makeCurrent() # If already current, this is not slow.
# context = scn.getRenderingContext()
orig_frame = scn.frame_current
for scene in export_scenes:
# scene.makeCurrent() # If already current, this is not slow.
# context = scene.getRenderingContext()
orig_frame = scene.frame_current
if EXPORT_ALL_SCENES: # Add scene name into the context_name
context_name[1] = '_%s' % bpy.path.clean_name(scn.name) # WARNING, its possible that this could cause a collision. we could fix if were feeling parranoied.
context_name[1] = '_%s' % bpy.path.clean_name(scene.name) # WARNING, its possible that this could cause a collision. we could fix if were feeling parranoied.
# Export an animation?
if EXPORT_ANIMATION:
scene_frames = range(scn.frame_start, context.frame_end + 1) # Up to and including the end frame.
scene_frames = range(scene.frame_start, context.frame_end + 1) # Up to and including the end frame.
else:
scene_frames = [orig_frame] # Dont export an animation.
@@ -850,26 +849,35 @@ def write(filepath, context,
if EXPORT_ANIMATION: # Add frame to the filepath.
context_name[2] = '_%.6d' % frame
scn.frame_current = frame
scene.frame_current = frame
if EXPORT_SEL_ONLY:
export_objects = context.selected_objects
objects = context.selected_objects
else:
export_objects = scn.objects
objects = scene.objects
full_path= ''.join(context_name)
# erm... bit of a problem here, this can overwrite files when exporting frames. not too bad.
# EXPORT THE FILE.
write(full_path, export_objects, scn,
EXPORT_TRI, EXPORT_EDGES, EXPORT_NORMALS,
EXPORT_NORMALS_HQ, EXPORT_UV, EXPORT_MTL,
EXPORT_COPY_IMAGES, EXPORT_APPLY_MODIFIERS,
EXPORT_ROTX90, EXPORT_BLEN_OBS,
EXPORT_GROUP_BY_OB, EXPORT_GROUP_BY_MAT, EXPORT_KEEP_VERT_ORDER,
EXPORT_POLYGROUPS, EXPORT_CURVE_AS_NURBS)
write_file(full_path, objects, scene,
EXPORT_TRI,
EXPORT_EDGES,
EXPORT_NORMALS,
EXPORT_NORMALS_HQ,
EXPORT_UV,
EXPORT_MTL,
EXPORT_COPY_IMAGES,
EXPORT_APPLY_MODIFIERS,
EXPORT_ROTX90,
EXPORT_BLEN_OBS,
EXPORT_GROUP_BY_OB,
EXPORT_GROUP_BY_MAT,
EXPORT_KEEP_VERT_ORDER,
EXPORT_POLYGROUPS,
EXPORT_CURVE_AS_NURBS)
scn.frame_current = orig_frame
scene.frame_current = orig_frame
# Restore old active scene.
# orig_scene.makeCurrent()
@@ -898,12 +906,12 @@ class ExportOBJ(bpy.types.Operator):
check_existing = BoolProperty(name="Check Existing", description="Check and warn on overwriting existing files", default=True, options={'HIDDEN'})
# context group
use_selection = BoolProperty(name="Selection Only", description="", default= False)
use_selection = BoolProperty(name="Selection Only", description="Export selected objects only", default= False)
use_all_scenes = BoolProperty(name="All Scenes", description="", default= False)
use_animation = BoolProperty(name="All Animation", description="", default= False)
use_animation = BoolProperty(name="Animation", description="", default= False)
# object group
use_modifiers = BoolProperty(name="Apply Modifiers", description="", default= True)
use_modifiers = BoolProperty(name="Apply Modifiers", description="Apply modifiers (preview resolution)", default= True)
use_rotate90 = BoolProperty(name="Rotate X90", description="", default= True)
# extra data group
@@ -947,7 +955,7 @@ class ExportOBJ(bpy.types.Operator):
EXPORT_CURVE_AS_NURBS=self.properties.use_nurbs,
EXPORT_SEL_ONLY=self.properties.use_selection,
EXPORT_ALL_SCENES=self.properties.use_all_scenes,
)
EXPORT_ANIMATION=self.properties.use_animation)
return {'FINISHED'}
@@ -978,4 +986,3 @@ def unregister():
if __name__ == "__main__":
register()

View File

@@ -81,7 +81,7 @@ from export_3ds import create_derived_objects, free_derived_objects
#
DEG2RAD=0.017453292519943295
MATWORLD= mathutils.RotationMatrix(-90, 4, 'X')
MATWORLD= mathutils.Matrix.Rotation(-90, 4, 'X')
####################################
# Global Variables

View File

@@ -23,7 +23,7 @@ from math import radians
import bpy
import mathutils
from mathutils import Vector, Euler, Matrix, RotationMatrix, TranslationMatrix
from mathutils import Vector, Euler, Matrix
class bvh_node_class(object):
@@ -78,7 +78,7 @@ MATRIX_IDENTITY_4x4 = Matrix([1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0,
def eulerRotate(x, y, z, rot_order):
# Clamp all values between 0 and 360, values outside this raise an error.
mats = [RotationMatrix(x, 3, 'X'), RotationMatrix(y, 3, 'Y'), RotationMatrix(z, 3, 'Z')]
mats = [Matrix.Rotation(x, 3, 'X'), Matrix.Rotation(y, 3, 'Y'), Matrix.Rotation(z, 3, 'Z')]
return (MATRIX_IDENTITY_3x3 * mats[rot_order[0]] * (mats[rot_order[1]] * (mats[rot_order[2]]))).to_euler()
# Should work but doesnt!
@@ -529,7 +529,7 @@ def bvh_node_dict2armature(context, bvh_nodes, ROT_MODE='XYZ', IMPORT_START_FRAM
prev_euler[i] = euler
if bvh_node.has_loc:
pose_bone.location = (bone_rest_matrix_inv * TranslationMatrix(Vector((lx, ly, lz)) - bvh_node.rest_head_local)).translation_part()
pose_bone.location = (bone_rest_matrix_inv * Matrix.Translation(Vector((lx, ly, lz)) - bvh_node.rest_head_local)).translation_part()
if bvh_node.has_loc:
pose_bone.keyframe_insert("location")

View File

@@ -141,7 +141,7 @@ import os
import time
import struct
from import_scene_obj import unpack_face_list, load_image
from import_scene_obj import load_image
import bpy
import mathutils
@@ -312,10 +312,10 @@ def process_next_chunk(file, previous_chunk, importedObjects, IMAGE_SEARCH):
contextMaterial = None
contextMatrix_rot = None # Blender.mathutils.Matrix(); contextMatrix.identity()
#contextMatrix_tx = None # Blender.mathutils.Matrix(); contextMatrix.identity()
contextMesh_vertls = None
contextMesh_vertls = None # flat array: (verts * 3)
contextMesh_facels = None
contextMeshMaterials = {} # matname:[face_idxs]
contextMeshUV = None
contextMeshUV = None # flat array (verts * 2)
TEXTURE_DICT = {}
MATDICT = {}
@@ -334,93 +334,58 @@ def process_next_chunk(file, previous_chunk, importedObjects, IMAGE_SEARCH):
def putContextMesh(myContextMesh_vertls, myContextMesh_facels, myContextMeshMaterials):
materialFaces = set() # faces that have a material. Can optimize?
bmesh = bpy.data.meshes.new(contextObName)
if myContextMesh_vertls:
# Now make copies with assigned materils.
bmesh.add_geometry(len(myContextMesh_vertls)//3, 0, len(myContextMesh_facels))
bmesh.verts.foreach_set("co", myContextMesh_vertls)
def makeMeshMaterialCopy(matName, faces):
'''
Make a new mesh with only face the faces that use this material.
faces can be any iterable object - containing ints.
'''
eekadoodle_faces = []
for v1, v2, v3 in myContextMesh_facels:
eekadoodle_faces.extend([v3, v1, v2, 0] if v3 == 0 else [v1, v2, v3, 0])
bmesh.faces.foreach_set("verts_raw", eekadoodle_faces)
faceVertUsers = [False] * len(myContextMesh_vertls)
ok = 0
for fIdx in faces:
for vindex in myContextMesh_facels[fIdx]:
faceVertUsers[vindex] = True
if matName != None: # if matName is none then this is a set(), meaning we are using the untextured faces and do not need to store textured faces.
materialFaces.add(fIdx)
ok = 1
if bmesh.faces and contextMeshUV:
bmesh.add_uv_texture()
uv_faces = bmesh.active_uv_texture.data[:]
else:
uv_faces = None
if not ok:
return
myVertMapping = {}
vertMappingIndex = 0
vertsToUse = [i for i in range(len(myContextMesh_vertls)) if faceVertUsers[i]]
myVertMapping = {ii: i for i, ii in enumerate(vertsToUse)}
tempName= '%s_%s' % (contextObName, matName) # matName may be None.
bmesh = bpy.data.meshes.new(tempName)
if matName == None:
img = None
for mat_idx, (matName, faces) in enumerate(myContextMeshMaterials.items()):
if matName is None:
bmesh.add_material(None)
else:
bmat = MATDICT[matName][1]
bmesh.add_material(bmat)
# bmesh.materials = [bmat]
try: img = TEXTURE_DICT[bmat.name]
except: img = None
bmesh.add_material(bmat) # can be None
img = TEXTURE_DICT.get(bmat.name)
# bmesh_verts = bmesh.verts
if len(vertsToUse):
bmesh.add_geometry(len(vertsToUse), 0, len(faces))
# XXX why add extra vertex?
# bmesh_verts.extend( [Vector()] )
bmesh.verts.foreach_set("co", [x for tup in [myContextMesh_vertls[i] for i in vertsToUse] for x in tup])
# bmesh_verts.extend( [myContextMesh_vertls[i] for i in vertsToUse] )
# +1 because of DUMMYVERT
bmesh.faces.foreach_set("verts_raw", unpack_face_list([[myVertMapping[vindex] for vindex in myContextMesh_facels[fIdx]] for fIdx in faces]))
# face_mapping = bmesh.faces.extend( [ [ bmesh_verts[ myVertMapping[vindex]+1] for vindex in myContextMesh_facels[fIdx]] for fIdx in faces ], indexList=True )
if bmesh.faces and (contextMeshUV or img):
bmesh.add_uv_texture()
for ii, i in enumerate(faces):
# Mapped index- faces may have not been added- if so, then map to the correct index
# BUGGY API - face_mapping is not always the right length
# map_index = face_mapping[ii]
if 1:
# if map_index != None:
targetFace = bmesh.faces[ii]
# targetFace = bmesh.faces[map_index]
uf = bmesh.active_uv_texture.data[ii]
if contextMeshUV:
# v.index-1 because of the DUMMYVERT
uvs = [contextMeshUV[vindex] for vindex in myContextMesh_facels[i]]
if len(myContextMesh_facels[i]) == 3:
uf.uv1, uf.uv2, uf.uv3, uf.uv4 = uvs + [(0.0, 0.0)]
else:
uf.uv1, uf.uv2, uf.uv3, uf.uv4 = uvs
# targetFace.uv = [contextMeshUV[vindex] for vindex in myContextMesh_facels[i]]
if img:
if uv_faces and img:
for fidx in faces:
bmesh.faces[fidx].material_index = mat_idx
uf = uv_faces[fidx]
uf.image = img
# to get this image to show up in 'Textured' shading mode
uf.tex = True
else:
for fidx in faces:
bmesh.faces[fidx].material_index = mat_idx
if uv_faces:
for fidx, uf in enumerate(uv_faces):
face = myContextMesh_facels[fidx]
v1, v2, v3 = face
# eekadoodle
if v3 == 0:
v1, v2, v3 = v3, v1, v2
uf.uv1 = contextMeshUV[v1 * 2:(v1 * 2) + 2]
uf.uv2 = contextMeshUV[v2 * 2:(v2 * 2) + 2]
uf.uv3 = contextMeshUV[v3 * 2:(v3 * 2) + 2]
# always a tri
# bmesh.transform(contextMatrix)
ob = bpy.data.objects.new(tempName, bmesh)
SCN.objects.link(ob)
# ob = SCN_OBJECTS.new(bmesh, tempName)
'''
if contextMatrix_tx:
ob.setMatrix(contextMatrix_tx)
@@ -431,15 +396,6 @@ def process_next_chunk(file, previous_chunk, importedObjects, IMAGE_SEARCH):
importedObjects.append(ob)
bmesh.update()
# bmesh.calcNormals()
for matName, faces in myContextMeshMaterials.items():
makeMeshMaterialCopy(matName, faces)
if len(materialFaces) != len(myContextMesh_facels):
# Invert material faces.
makeMeshMaterialCopy(None, set(range(len( myContextMesh_facels ))) - materialFaces)
#raise 'Some UnMaterialed faces', len(contextMesh.faces)
#a spare chunk
new_chunk = chunk()
@@ -667,13 +623,9 @@ def process_next_chunk(file, previous_chunk, importedObjects, IMAGE_SEARCH):
new_chunk.bytes_read += 2
# print 'number of verts: ', num_verts
def getvert():
temp_data = struct.unpack('<3f', file.read(STRUCT_SIZE_3FLOAT))
new_chunk.bytes_read += STRUCT_SIZE_3FLOAT #12: 3 floats x 4 bytes each
return temp_data
#contextMesh.verts.extend( [Vector(),] ) # DUMMYVERT! - remove when blenders internals are fixed.
contextMesh_vertls = [getvert() for i in range(num_verts)]
contextMesh_vertls = struct.unpack('<%df' % (num_verts * 3), file.read(STRUCT_SIZE_3FLOAT * num_verts))
new_chunk.bytes_read += STRUCT_SIZE_3FLOAT * num_verts
# dummyvert is not used atm!
#print 'object verts: bytes read: ', new_chunk.bytes_read
@@ -684,15 +636,11 @@ def process_next_chunk(file, previous_chunk, importedObjects, IMAGE_SEARCH):
new_chunk.bytes_read += 2
#print 'number of faces: ', num_faces
def getface():
# print '\ngetting a face'
temp_data = file.read(STRUCT_SIZE_4UNSIGNED_SHORT)
new_chunk.bytes_read += STRUCT_SIZE_4UNSIGNED_SHORT #4 short ints x 2 bytes each
v1,v2,v3,dummy = struct.unpack('<4H', temp_data)
return v1, v2, v3
contextMesh_facels = [ getface() for i in range(num_faces) ]
temp_data = file.read(STRUCT_SIZE_4UNSIGNED_SHORT * num_faces)
new_chunk.bytes_read += STRUCT_SIZE_4UNSIGNED_SHORT * num_faces #4 short ints x 2 bytes each
contextMesh_facels = struct.unpack('<%dH' % (num_faces * 4), temp_data)
contextMesh_facels = [contextMesh_facels[i - 3:i] for i in range(3, (num_faces * 4) + 3, 4)]
elif (new_chunk.ID == OBJECT_MATERIAL):
# print 'elif (new_chunk.ID == OBJECT_MATERIAL):'
@@ -703,12 +651,11 @@ def process_next_chunk(file, previous_chunk, importedObjects, IMAGE_SEARCH):
num_faces_using_mat = struct.unpack('<H', temp_data)[0]
new_chunk.bytes_read += STRUCT_SIZE_UNSIGNED_SHORT
def getmat():
temp_data = file.read(STRUCT_SIZE_UNSIGNED_SHORT)
new_chunk.bytes_read += STRUCT_SIZE_UNSIGNED_SHORT
return struct.unpack('<H', temp_data)[0]
contextMeshMaterials[material_name]= [ getmat() for i in range(num_faces_using_mat) ]
temp_data = file.read(STRUCT_SIZE_UNSIGNED_SHORT * num_faces_using_mat)
new_chunk.bytes_read += STRUCT_SIZE_UNSIGNED_SHORT * num_faces_using_mat
contextMeshMaterials[material_name]= struct.unpack("<%dH" % (num_faces_using_mat), temp_data)
#look up the material in all the materials
@@ -717,12 +664,9 @@ def process_next_chunk(file, previous_chunk, importedObjects, IMAGE_SEARCH):
num_uv = struct.unpack('<H', temp_data)[0]
new_chunk.bytes_read += 2
def getuv():
temp_data = file.read(STRUCT_SIZE_2FLOAT)
new_chunk.bytes_read += STRUCT_SIZE_2FLOAT #2 float x 4 bytes each
return mathutils.Vector( struct.unpack('<2f', temp_data) )
contextMeshUV = [ getuv() for i in range(num_uv) ]
temp_data = file.read(STRUCT_SIZE_2FLOAT * num_uv)
new_chunk.bytes_read += STRUCT_SIZE_2FLOAT * num_uv
contextMeshUV = struct.unpack('<%df' % (num_uv * 2), temp_data)
elif (new_chunk.ID == OBJECT_TRANS_MATRIX):
# How do we know the matrix size? 54 == 4x4 48 == 4x3
@@ -771,7 +715,7 @@ def process_next_chunk(file, previous_chunk, importedObjects, IMAGE_SEARCH):
#print contextMatrix_rot
contextMatrix_rot.invert()
#print contextMatrix_rot
#contextMatrix_tx = Blender.mathutils.TranslationMatrix(0.5 * Blender.mathutils.Vector(data[9:]))
#contextMatrix_tx = mathutils.Matrix.Translation(0.5 * Blender.mathutils.Vector(data[9:]))
#contextMatrix_tx.invert()
#tx.invert()
@@ -806,7 +750,7 @@ def process_next_chunk(file, previous_chunk, importedObjects, IMAGE_SEARCH):
# FINISHED LOOP
# There will be a number of objects still not added
if contextMesh_facels != None:
if CreateBlenderObject:
putContextMesh(contextMesh_vertls, contextMesh_facels, contextMeshMaterials)
def load_3ds(filename, context, IMPORT_CONSTRAIN_BOUNDS=10.0, IMAGE_SEARCH=True, APPLY_MATRIX=False):

View File

@@ -82,23 +82,21 @@ def unpack_list(list_of_tuples):
# same as above except that it adds 0 for triangle faces
def unpack_face_list(list_of_tuples):
l = []
# allocate the entire list
flat_ls = [0] * (len(list_of_tuples) * 4)
i = 0
for t in list_of_tuples:
face = [i for i in t]
if len(t) == 3:
if t[2] == 0:
t = t[1], t[2], t[0]
else: # assuem quad
if t[3] == 0 or t[2] == 0:
t = t[2], t[3], t[0], t[1]
if len(face) != 3 and len(face) != 4:
raise RuntimeError("{0} vertices in face.".format(len(face)))
# rotate indices if the 4th is 0
if len(face) == 4 and face[3] == 0:
face = [face[3], face[0], face[1], face[2]]
if len(face) == 3:
face.append(0)
l.extend(face)
return l
flat_ls[i:i + len(t)] = t
i += 4
return flat_ls
def BPyMesh_ngon(from_data, indices, PREF_FIX_LOOPS= True):
'''
@@ -305,13 +303,14 @@ def load_image(imagepath, dirname):
if os.path.exists(imagepath):
return bpy.data.images.load(imagepath)
variants = [os.path.join(dirname, imagepath), os.path.join(dirname, os.path.basename(imagepath))]
variants = [imagepath, os.path.join(dirname, imagepath), os.path.join(dirname, os.path.basename(imagepath))]
for path in variants:
if os.path.exists(path):
return bpy.data.images.load(path)
else:
print(path, "doesn't exist")
for filepath in variants:
for nfilepath in (filepath, bpy.path.resolve_ncase(filepath)):
if os.path.exists(nfilepath):
return bpy.data.images.load(nfilepath)
print(filepath, "doesn't exist")
# TODO comprehensiveImageLoad also searched in bpy.config.textureDir
return None

View File

@@ -12,7 +12,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# ***** END GPL LICENCE BLOCK *****

View File

@@ -87,6 +87,10 @@ class RenderButtonsPanel():
bl_context = "render"
# COMPAT_ENGINES must be defined in each subclass, external engines can add themselves here
@classmethod
def poll(cls, context):
rd = context.scene.render
return (rd.use_game_engine==False) and (rd.engine in cls.COMPAT_ENGINES)
# Setting panel, use in the scene for now.
class RENDER_PT_network_settings(bpy.types.Panel, RenderButtonsPanel):
@@ -95,7 +99,7 @@ class RENDER_PT_network_settings(bpy.types.Panel, RenderButtonsPanel):
@classmethod
def poll(cls, context):
return base_poll(cls, context)
return super(RENDER_PT_network_settings, cls).poll(context)
def draw(self, context):
layout = self.layout
@@ -134,7 +138,7 @@ class RENDER_PT_network_slave_settings(bpy.types.Panel, RenderButtonsPanel):
@classmethod
def poll(cls, context):
scene = context.scene
return base_poll(cls, context) and scene.network_render.mode == "RENDER_SLAVE"
return super(RENDER_PT_network_slave_settings, cls).poll(context) and scene.network_render.mode == "RENDER_SLAVE"
def draw(self, context):
layout = self.layout
@@ -159,7 +163,7 @@ class RENDER_PT_network_master_settings(bpy.types.Panel, RenderButtonsPanel):
@classmethod
def poll(cls, context):
scene = context.scene
return base_poll(cls, context) and scene.network_render.mode == "RENDER_MASTER"
return super(RENDER_PT_network_master_settings, cls).poll(context) and scene.network_render.mode == "RENDER_MASTER"
def draw(self, context):
layout = self.layout
@@ -177,7 +181,7 @@ class RENDER_PT_network_job(bpy.types.Panel, RenderButtonsPanel):
@classmethod
def poll(cls, context):
scene = context.scene
return base_poll(cls, context) and scene.network_render.mode == "RENDER_CLIENT"
return super(RENDER_PT_network_job, cls).poll(context) and scene.network_render.mode == "RENDER_CLIENT"
def draw(self, context):
layout = self.layout
@@ -221,7 +225,7 @@ class RENDER_PT_network_slaves(bpy.types.Panel, RenderButtonsPanel):
if netsettings.mode != "RENDER_CLIENT":
return False
verify_address(netsettings)
return base_poll(cls, context) and netsettings.server_address != "[default]"
return super(RENDER_PT_network_slaves, cls).poll(context) and netsettings.server_address != "[default]"
def draw(self, context):
layout = self.layout
@@ -259,7 +263,7 @@ class RENDER_PT_network_slaves_blacklist(bpy.types.Panel, RenderButtonsPanel):
if netsettings.mode != "RENDER_CLIENT":
return False
verify_address(netsettings)
return base_poll(cls, context) and netsettings.server_address != "[default]"
return super(RENDER_PT_network_slaves_blacklist, cls).poll(context) and netsettings.server_address != "[default]"
def draw(self, context):
layout = self.layout
@@ -296,7 +300,7 @@ class RENDER_PT_network_jobs(bpy.types.Panel, RenderButtonsPanel):
if netsettings.mode != "RENDER_CLIENT":
return False
verify_address(netsettings)
return base_poll(cls, context) and netsettings.server_address != "[default]"
return super(RENDER_PT_network_jobs, cls).poll(context) and netsettings.server_address != "[default]"
def draw(self, context):
layout = self.layout

View File

@@ -25,11 +25,11 @@ import mathutils
def add_object_align_init(context, operator):
if operator and operator.properties.is_property_set("location") and operator.properties.is_property_set("rotation"):
location = mathutils.TranslationMatrix(mathutils.Vector(operator.properties.location))
location = mathutils.Matrix.Translation(mathutils.Vector(operator.properties.location))
rotation = mathutils.Euler(operator.properties.rotation).to_matrix().resize4x4()
else:
# TODO, local view cursor!
location = mathutils.TranslationMatrix(context.scene.cursor_location)
location = mathutils.Matrix.Translation(context.scene.cursor_location)
if context.user_preferences.edit.object_align == 'VIEW' and context.space_data.type == 'VIEW_3D':
rotation = context.space_data.region_3d.view_matrix.rotation_part().invert().resize4x4()

View File

@@ -30,8 +30,6 @@ import sys as _sys
from _bpy import blend_paths
from _bpy import script_paths as _bpy_script_paths
_TEST_XML = _bpy.app.debug
def _test_import(module_name, loaded_modules):
import traceback
import time
@@ -54,35 +52,6 @@ def _test_import(module_name, loaded_modules):
loaded_modules.add(mod.__name__) # should match mod.__name__ too
return mod
if _TEST_XML:
# TEST CODE
def _test_import_xml(path, f, loaded_modules):
import bpy_xml_ui
import traceback
f_full = _os.path.join(path, f)
_bpy_types._register_immediate = True
try:
classes = bpy_xml_ui.load_xml(f_full)
except:
traceback.print_exc()
classes = []
_bpy_types._register_immediate = False
if classes:
mod_name = f.split(".")[0]
# fake module
mod = type(traceback)(mod_name)
mod.__file__ = f_full
for cls in classes:
setattr(mod, cls.__name__, cls)
loaded_modules.add(mod_name)
_sys.modules[mod_name] = mod
mod.register = lambda: None # quiet errors
return mod
def modules_from_path(path, loaded_modules):
"""
@@ -110,10 +79,6 @@ def modules_from_path(path, loaded_modules):
else:
mod = None
if _TEST_XML:
if mod is None and f.endswith(".xml"):
mod = _test_import_xml(path, f, loaded_modules)
if mod:
modules.append(mod)

View File

@@ -525,7 +525,7 @@ class Text(bpy_types.ID):
def as_string(self):
"""Return the text as a string."""
return "\n".join(line.line for line in self.lines)
return "\n".join(line.body for line in self.lines)
def from_string(self, string):
"""Replace text with this string."""

View File

@@ -1,151 +0,0 @@
# ##### BEGIN GPL LICENSE BLOCK #####
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# ##### END GPL LICENSE BLOCK #####
# <pep8 compliant>
"""
This module translates XML into blender/ui function calls.
"""
import xml.dom.minidom
import bpy as _bpy
def parse_rna(prop, value):
if prop.type == 'FLOAT':
value = float(value)
elif prop.type == 'INT':
value = int(value)
elif prop.type == 'BOOLEAN':
if value not in ("true", "false"):
raise Exception("invalid bool value: %s", value)
value = bool(value == "true")
elif prop.type in ('STRING', 'ENUM'):
pass
elif prop.type == 'POINTER':
value = eval("_bpy." + value)
else:
raise Exception("type not supported %s.%s" % (prop.identifier, prop.type))
return value
def parse_args(base, xml_node):
args = {}
rna_params = base.bl_rna.functions[xml_node.tagName].parameters
for key, value in xml_node.attributes.items():
args[key] = parse_rna(rna_params[key], value)
return args
def ui_xml(base, xml_node):
name = xml_node.tagName
prop = base.bl_rna.properties.get(name)
if name in base.bl_rna.properties:
attr = xml_node.attributes.get("expr")
if attr:
value = attr.value
value = eval(value, {"context": _bpy.context})
setattr(base, name, value)
else:
attr = xml_node.attributes['value']
value = attr.value
value = parse_rna(prop, value)
setattr(base, name, value)
else:
func_new = getattr(base, name)
kw_args = parse_args(base, xml_node)
base_new = func_new(**kw_args) # call blender func
if xml_node.hasChildNodes():
ui_xml_list(base_new, xml_node.childNodes)
def ui_xml_list(base, xml_nodes):
import bpy
for node in xml_nodes:
if node.nodeType not in (node.TEXT_NODE, node.COMMENT_NODE):
ui_xml(base, node)
bpy.N = node
def test(layout):
uixml = xml.dom.minidom.parseString(open("/mnt/test/blender-svn/blender/release/scripts/ui/test.xml", 'r').read())
panel = uixml.getElementsByTagName('panel')[0]
ui_xml_list(layout, panel.childNodes)
def load_xml(filepath):
classes = []
fn = open(filepath, 'r')
data = fn.read()
uixml = xml.dom.minidom.parseString(data).getElementsByTagName("ui")[0]
fn.close()
def draw_xml(self, context):
node = self._xml_node.getElementsByTagName("draw")[0]
ui_xml_list(self.layout, node.childNodes)
def draw_header_xml(self, context):
node = self._xml_node.getElementsByTagName("draw_header")[0]
ui_xml_list(self.layout, node.childNodes)
for node in uixml.childNodes:
if node.nodeType not in (node.TEXT_NODE, node.COMMENT_NODE):
name = node.tagName
class_name = node.attributes["identifier"].value
if name == "panel":
class_dict = {
"bl_label": node.attributes["label"].value,
"bl_region_type": node.attributes["region_type"].value,
"bl_space_type": node.attributes["space_type"].value,
"bl_context": node.attributes["context"].value,
"bl_default_closed": ((node.attributes["default_closed"].value == "true") if "default_closed" in node.attributes else False),
"draw": draw_xml,
"_xml_node": node
}
if node.getElementsByTagName("draw_header"):
class_dict["draw_header"] = draw_header_xml
# will register instantly
class_new = type(class_name, (_bpy.types.Panel,), class_dict)
elif name == "menu":
class_dict = {
"bl_label": node.attributes["label"].value,
"draw": draw_xml,
"_xml_node": node
}
# will register instantly
class_new = type(class_name, (_bpy.types.Menu,), class_dict)
elif name == "header":
class_dict = {
"bl_label": node.attributes["label"].value,
"bl_space_type": node.attributes["space_type"].value,
"draw": draw_xml,
"_xml_node": node
}
# will register instantly
class_new = type(class_name, (_bpy.types.Header,), class_dict)
else:
raise Exception("invalid id found '%s': expected a value in ('header', 'panel', 'menu)'" % name)
classes.append(class_new)
return classes

View File

@@ -0,0 +1,204 @@
# ##### BEGIN GPL LICENSE BLOCK #####
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# ##### END GPL LICENSE BLOCK #####
# <pep8 compliant>
"""
This module translates a python like XML representation into XML
or simple python blender/ui function calls.
sometag(arg=10) [
another()
another(key="value")
]
# converts into ...
<sometag arg="10">
<another/>
<another key="value" />
</sometag>
"""
TAG, ARGS, CHILDREN = range(3)
class ReturnStore(tuple):
def __getitem__(self, key):
# single item get's
if type(key) is ReturnStore:
key = (key, )
if type(key) is tuple:
children = self[CHILDREN]
if children:
raise Exception("Only a single __getitem__ is allowed on the ReturnStore")
else:
children[:] = key
return self
else:
return tuple.__getitem__(self, key)
class FunctionStore(object):
def __call__(self, **kwargs):
return ReturnStore((self.__class__.__name__, kwargs, []))
def tag_vars(tags, module=__name__):
return {tag: type(tag, (FunctionStore, ), {"__module__": module})() for tag in tags}
def tag_module(mod_name, tags):
import sys
from types import ModuleType
mod = ModuleType(mod_name)
sys.modules[mod_name] = mod
dict_values = tag_vars(tags, mod_name)
mod.__dict__.update(dict_values)
return mod
def toxml(py_data, indent=" "):
if len(py_data) != 1 or type(py_data) != list:
raise Exception("Expected a list with one member")
def _to_xml(py_item, xml_node=None):
if xml_node is None:
xml_node = newdoc.createElement(py_item[TAG])
for key, value in py_item[ARGS].items():
xml_node.setAttribute(key, str(value))
for py_item_child in py_item[CHILDREN]:
xml_node.appendChild(_to_xml(py_item_child))
return xml_node
def _to_xml_iter(xml_parent, data_ls):
for py_item in data_ls:
xml_node = newdoc.createElement(py_item[TAG])
# ok if its empty
_to_xml_iter(xml_node, py_item[CHILDREN])
import xml.dom.minidom
impl = xml.dom.minidom.getDOMImplementation()
newdoc = impl.createDocument(None, py_data[0][TAG], None)
_to_xml(py_data[0], newdoc.documentElement)
return newdoc.documentElement.toprettyxml(indent=" ")
def fromxml(data):
def _fromxml_kwargs(xml_node):
kwargs = {}
for key, value in xml_node.attributes.items():
kwargs[key] = value
return kwargs
def _fromxml(xml_node):
py_item = (xml_node.tagName, _fromxml_kwargs(xml_node), [])
#_fromxml_iter(py_item, xml_node.childNodes)
for xml_node_child in xml_node.childNodes:
if xml_node_child.nodeType not in (xml_node_child.TEXT_NODE, xml_node_child.COMMENT_NODE):
py_item[CHILDREN].append(_fromxml(xml_node_child))
return py_item
import xml.dom.minidom
xml_doc = xml.dom.minidom.parseString(data)
return [_fromxml(xml_doc.documentElement)]
def topretty_py(py_data, indent=" "):
if len(py_data) != 1:
raise Exception("Expected a list with one member")
lines = []
def _to_kwargs(kwargs):
return ", ".join([("%s=%s" % (key, repr(value))) for key, value in sorted(kwargs.items())])
def _topretty(py_item, indent_ctx, last):
if py_item[CHILDREN]:
lines.append("%s%s(%s) [" % (indent_ctx, py_item[TAG], _to_kwargs(py_item[ARGS])))
py_item_last = py_item[CHILDREN][-1]
for py_item_child in py_item[CHILDREN]:
_topretty(py_item_child, indent_ctx + indent, (py_item_child is py_item_last))
lines.append("%s]%s" % (indent_ctx, ("" if last else ",")))
else:
lines.append("%s%s(%s)%s" % (indent_ctx, py_item[TAG], _to_kwargs(py_item[ARGS]), ("" if last else ",")))
_topretty(py_data[0], "", True)
return "\n".join(lines)
if __name__ == "__main__":
# testing code.
tag_module("bpyml_test", ("ui", "prop", "row", "column", "active", "separator", "split"))
from bpyml_test import *
draw = [
ui() [
split() [
column() [
prop(data='context.scene.render', property='stamp_time', text='Time'),
prop(data='context.scene.render', property='stamp_date', text='Date'),
prop(data='context.scene.render', property='stamp_render_time', text='RenderTime'),
prop(data='context.scene.render', property='stamp_frame', text='Frame'),
prop(data='context.scene.render', property='stamp_scene', text='Scene'),
prop(data='context.scene.render', property='stamp_camera', text='Camera'),
prop(data='context.scene.render', property='stamp_filename', text='Filename'),
prop(data='context.scene.render', property='stamp_marker', text='Marker'),
prop(data='context.scene.render', property='stamp_sequencer_strip', text='Seq. Strip')
],
column() [
active(expr='context.scene.render.render_stamp'),
prop(data='context.scene.render', property='stamp_foreground', slider=True),
prop(data='context.scene.render', property='stamp_background', slider=True),
separator(),
prop(data='context.scene.render', property='stamp_font_size', text='Font Size')
]
],
split(percentage=0.2) [
prop(data='context.scene.render', property='stamp_note', text='Note'),
row() [
active(expr='context.scene.render.stamp_note'),
prop(data='context.scene.render', property='stamp_note_text', text='')
]
]
]
]
xml_data = toxml(draw)
print(xml_data) # xml version
py_data = fromxml(xml_data)
print(py_data) # converted back to py
xml_data = toxml(py_data)
print(xml_data) # again back to xml
py_data = fromxml(xml_data) # pretty python version
print(topretty_py(py_data))

View File

@@ -0,0 +1,100 @@
# ##### BEGIN GPL LICENSE BLOCK #####
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# ##### END GPL LICENSE BLOCK #####
# <pep8 compliant>
import bpy as _bpy
import bpyml
from bpyml import TAG, ARGS, CHILDREN
from types import ModuleType
_uilayout_rna = _bpy.types.UILayout.bl_rna
_uilayout_tags = ["ui"] + \
_uilayout_rna.properties.keys() + \
_uilayout_rna.functions.keys()
# these need to be imported directly
# >>> from bpyml_ui.locals import *
locals = bpyml.tag_module("%s.locals" % __name__ , _uilayout_tags)
def _parse_rna(prop, value):
if prop.type == 'FLOAT':
value = float(value)
elif prop.type == 'INT':
value = int(value)
elif prop.type == 'BOOLEAN':
if value in (True, False):
pass
else:
if value not in ("True", "False"):
raise Exception("invalid bool value: %s" % value)
value = bool(value == "True")
elif prop.type in ('STRING', 'ENUM'):
pass
elif prop.type == 'POINTER':
value = eval("_bpy." + value)
else:
raise Exception("type not supported %s.%s" % (prop.identifier, prop.type))
return value
def _parse_rna_args(base, py_node):
rna_params = base.bl_rna.functions[py_node[TAG]].parameters
args = {}
for key, value in py_node[ARGS].items():
args[key] = _parse_rna(rna_params[key], value)
return args
def _call_recursive(context, base, py_node):
prop = base.bl_rna.properties.get(py_node[TAG])
if py_node[TAG] in base.bl_rna.properties:
value = py_node[ARGS].get("expr")
if value:
value = eval(value, {"context": _bpy.context})
setattr(base, py_node[TAG], value)
else:
value = py_node[ARGS]['value'] # have to have this
setattr(base, name, value)
else:
args = _parse_rna_args(base, py_node)
func_new = getattr(base, py_node[TAG])
base_new = func_new(**args) # call blender func
if base_new is not None:
for py_node_child in py_node[CHILDREN]:
_call_recursive(context, base_new, py_node_child)
class BPyML_BaseUI():
'''
This is a mix-in class that defines a draw function
which checks for draw_data
'''
def draw(self, context):
layout = self.layout
for py_node in self.draw_data[CHILDREN]:
_call_recursive(context, layout, py_node)
def draw_header(self, context):
layout = self.layout
for py_node in self.draw_header_data[CHILDREN]:
_call_recursive(context, layout, py_node)

View File

@@ -147,7 +147,7 @@ def deform(obj, definitions, base_names, options):
def main(obj, bone_definition, base_names, options):
from mathutils import Vector, RotationMatrix
from mathutils import Vector, Matrix
from math import radians, pi
arm = obj.data
@@ -264,7 +264,7 @@ def main(obj, bone_definition, base_names, options):
# Rotate the rev chain 180 about the by the first bones center point
pivot = (rv_chain.spine_01_e.head + rv_chain.spine_01_e.tail) * 0.5
matrix = RotationMatrix(radians(180), 3, 'X')
matrix = Matrix.Rotation(radians(180), 3, 'X')
for i, attr in enumerate(rv_chain.attr_names): # similar to neck
spine_e = getattr(rv_chain, attr + "_e")
# use the first bone as the pivot

View File

@@ -12,7 +12,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# ##### END GPL LICENSE BLOCK #####
@@ -22,7 +22,7 @@ import bpy
from rigify import RigifyError
from rigify_utils import bone_class_instance, copy_bone_simple
from rna_prop_ui import rna_idprop_ui_prop_get
from mathutils import Vector, RotationMatrix
from mathutils import Vector, Matrix
from math import radians, pi
# not used, defined for completeness

View File

@@ -625,18 +625,23 @@ def BuildRNAInfo():
if __name__ == "__main__":
import rna_info
struct = rna_info.BuildRNAInfo()[0]
data = ""
data = []
for struct_id, v in sorted(struct.items()):
struct_id_str = "".join(sid for sid in struct_id if struct_id)
props = [(prop.identifier, prop) for prop in v.properties]
struct_id_str = v.identifier # "".join(sid for sid in struct_id if struct_id)
for base in v.get_bases():
struct_id_str = base.identifier + "|" + struct_id_str
props = [(prop.identifier, prop) for prop in v.properties]
for prop_id, prop in sorted(props):
# if prop.type == 'boolean':
# continue
data += "%s.%s -> %s: %s%s %s\n" % (struct_id_str, prop.identifier, prop.identifier, prop.type, ", (read-only)" if prop.is_readonly else "", prop.description)
data.append("%s.%s -> %s: %s%s %s" % (struct_id_str, prop.identifier, prop.identifier, prop.type, ", (read-only)" if prop.is_readonly else "", prop.description))
data.sort()
if bpy.app.background:
print(data)
import sys
sys.stderr.write("\n".join(data))
else:
text = bpy.data.texts.new(name="api.py")
text.from_string(data)

View File

@@ -131,7 +131,7 @@ def execute(context):
is_multiline = False
try:
line = line_object.line
line = line_object.body
# run the console, "\n" executes a multiline statement
line_exec = line if line.strip() else "\n"
@@ -212,13 +212,13 @@ def autocomplete(context):
try:
current_line = sc.history[-1]
line = current_line.line
line = current_line.body
# This function isnt aware of the text editor or being an operator
# just does the autocomp then copy its results back
current_line.line, current_line.current_character, scrollback = \
current_line.body, current_line.current_character, scrollback = \
intellisense.expand(
line=current_line.line,
line=current_line.body,
cursor=current_line.current_character,
namespace=console.locals,
private=bpy.app.debug)
@@ -233,7 +233,7 @@ def autocomplete(context):
# Separate automplete output by command prompts
if scrollback != '':
bpy.ops.console.scrollback_append(text=sc.prompt + current_line.line, type='INPUT')
bpy.ops.console.scrollback_append(text=sc.prompt + current_line.body, type='INPUT')
# Now we need to copy back the line from blender back into the
# text editor. This will change when we dont use the text editor

View File

@@ -47,7 +47,7 @@ def execute(context):
sc = context.space_data
try:
line = sc.history[-1].line
line = sc.history[-1].body
except:
return {'CANCELLED'}

View File

@@ -22,7 +22,7 @@
# <pep8 compliant>
from mathutils import Matrix, Vector, RotationMatrix
from mathutils import Matrix, Vector
import time
import geometry
import bpy
@@ -275,15 +275,15 @@ def testNewVecLs2DRotIsBetter(vecs, mat=-1, bestAreaSoFar = -1):
# Takes a list of faces that make up a UV island and rotate
# until they optimally fit inside a square.
ROTMAT_2D_POS_90D = RotationMatrix( radians(90.0), 2)
ROTMAT_2D_POS_45D = RotationMatrix( radians(45.0), 2)
ROTMAT_2D_POS_90D = Matrix.Rotation( radians(90.0), 2)
ROTMAT_2D_POS_45D = Matrix.Rotation( radians(45.0), 2)
RotMatStepRotation = []
rot_angle = 22.5 #45.0/2
while rot_angle > 0.1:
RotMatStepRotation.append([\
RotationMatrix( radians(rot_angle), 2),\
RotationMatrix( radians(-rot_angle), 2)])
Matrix.Rotation( radians(rot_angle), 2),\
Matrix.Rotation( radians(-rot_angle), 2)])
rot_angle = rot_angle/2.0

View File

@@ -6,7 +6,7 @@
# for keyboard event comparison
# import GameKeys
# support for Vector(), Matrix() types and advanced functions like ScaleMatrix(...) and RotationMatrix(...)
# support for Vector(), Matrix() types and advanced functions like Matrix.Scale(...) and Matrix.Rotation(...)
# import mathutils
# for functions like getWindowWidth(), getWindowHeight()

View File

@@ -95,6 +95,7 @@ class DATA_PT_template(bpy.types.Panel):
subsubrow.operator("pose.metarig_assign", text="Assign")
subsubrow.operator("pose.metarig_clear", text="Clear")
if self.templates:
subsubrow = subrow.split(percentage=0.8)
subsubrow.operator("pose.metarig_sample_add", text="Sample").metarig_type = self.templates[pose_templates.active_template_index]
subsubrow.operator("pose.metarig_sample_add", text="All").metarig_type = "" # self.templates[pose_templates.active_template_index]

View File

@@ -24,7 +24,7 @@ from rna_prop_ui import PropertyPanel
def active_node_mat(mat):
# TODO, 2.4x has a pipeline section, for 2.5 we need to communicate
# which settings from node-materials are used
if mat:
if mat is not None:
mat_node = mat.active_node_material
if mat_node:
return mat_node

View File

@@ -252,7 +252,7 @@ class OBJECT_PT_animation(ObjectButtonsPanel, bpy.types.Panel):
col.prop(ob, "time_offset_edit", text="Edit")
row = col.row()
row.prop(ob, "time_offset_particle", text="Particle")
row.active = len(ob.particle_systems) != 0
row.active = bool(ob.particle_systems)
row = col.row()
row.prop(ob, "time_offset_parent", text="Parent")
row.active = (ob.parent is not None)

View File

@@ -695,7 +695,7 @@ class RENDER_PT_encoding(RenderButtonsPanel, bpy.types.Panel):
# Audio:
sub = layout.column()
if rd.ffmpeg_format not in ('MP3'):
if rd.ffmpeg_format not in ('MP3', ):
sub.prop(rd, "ffmpeg_audio_codec", text="Audio Codec")
sub.separator()

View File

@@ -1,79 +0,0 @@
<ui>
<panel identifier="RENDER_PT_stamp_test" label="Stamp (XML)" space_type="PROPERTIES" region_type="WINDOW" context="render" default_closed="true">
<draw_header>
<prop data="context.scene.render" property="render_stamp" text=""/>
</draw_header>
<draw>
<split>
<column>
<prop data="context.scene.render" property="stamp_time" text="Time"/>
<prop data="context.scene.render" property="stamp_date" text="Date"/>
<prop data="context.scene.render" property="stamp_render_time" text="RenderTime"/>
<prop data="context.scene.render" property="stamp_frame" text="Frame"/>
<prop data="context.scene.render" property="stamp_scene" text="Scene"/>
<prop data="context.scene.render" property="stamp_camera" text="Camera"/>
<prop data="context.scene.render" property="stamp_filename" text="Filename"/>
<prop data="context.scene.render" property="stamp_marker" text="Marker"/>
<prop data="context.scene.render" property="stamp_sequencer_strip" text="Seq. Strip"/>
</column>
<column>
<active expr="context.scene.render.render_stamp"/>
<prop data="context.scene.render" property="stamp_foreground" slider="true"/>
<prop data="context.scene.render" property="stamp_background" slider="true"/>
<separator/>
<prop data="context.scene.render" property="stamp_font_size" text="Font Size"/>
</column>
</split>
<split percentage="0.2">
<prop data="context.scene.render" property="stamp_note" text="Note"/>
<row>
<active expr="context.scene.render.stamp_note"/>
<prop data="context.scene.render" property="stamp_note_text" text=""/>
</row>
</split>
</draw>
</panel>
<panel identifier="RENDER_PT_dimensions_test" label="Dimensions (XML)" space_type="PROPERTIES" region_type="WINDOW" context="render">
<draw>
<row align="true">
<menu menu="RENDER_MT_presets"/>
<operator operator="render.preset_add" text="" icon="ZOOMIN"/>
</row>
<split>
<column>
<column align="true">
<label text="Resolution:"/>
<prop data="context.scene.render" property="resolution_x" text="X"/>
<prop data="context.scene.render" property="resolution_y" text="Y"/>
<prop data="context.scene.render" property="resolution_percentage" text=""/>
<label text="Aspect Ratio:"/>
<prop data="context.scene.render" property="pixel_aspect_x" text="X"/>
<prop data="context.scene.render" property="pixel_aspect_y" text="Y"/>
</column>
<row>
<prop data="context.scene.render" property="use_border" text="Border"/>
<row>
<active expr="context.scene.render.use_border"/>
<prop data="context.scene.render" property="crop_to_border" text="Crop"/>
</row>
</row>
</column>
<column>
<column align="true">
<label text="Frame Range:"/>
<prop data="context.scene" property="frame_start" text="Start"/>
<prop data="context.scene" property="frame_end" text="End"/>
<prop data="context.scene" property="frame_step" text="Step"/>
<label text="Frame Rate:"/>
<prop data="context.scene.render" property="fps"/>
<prop data="context.scene.render" property="fps_base" text="/"/>
</column>
</column>
</split>
</draw>
</panel>
</ui>

View File

@@ -27,7 +27,7 @@ class INFO_HT_header(bpy.types.Header):
layout = self.layout
wm = context.manager
if wm and len(wm.operators):
if wm and wm.operators:
last_op = wm.operators[-1]
else:
last_op = None
@@ -131,7 +131,7 @@ class INFO_MT_file_import(bpy.types.Menu):
bl_label = "Import"
def draw(self, context):
if "collada_import" in dir(bpy.ops.wm):
if hasattr(bpy.types, "WM_OT_collada_import"):
self.layout.operator("wm.collada_import", text="COLLADA (.dae)")
@@ -140,7 +140,7 @@ class INFO_MT_file_export(bpy.types.Menu):
bl_label = "Export"
def draw(self, context):
if "collada_export" in dir(bpy.ops.wm):
if hasattr(bpy.types, "WM_OT_collada_export"):
self.layout.operator("wm.collada_export", text="COLLADA (.dae)")

View File

@@ -48,9 +48,9 @@ class TEXT_HT_header(bpy.types.Header):
layout.template_ID(st, "text", new="text.new", unlink="text.unlink")
row = layout.row(align=True)
row.prop(st, "line_numbers", text="")
row.prop(st, "word_wrap", text="")
row.prop(st, "syntax_highlight", text="")
row.prop(st, "show_line_numbers", text="")
row.prop(st, "show_word_wrap", text="")
row.prop(st, "show_syntax_highlight", text="")
if text:
row = layout.row()
@@ -81,9 +81,10 @@ class TEXT_PT_properties(bpy.types.Panel):
st = context.space_data
flow = layout.column_flow()
flow.prop(st, "line_numbers")
flow.prop(st, "word_wrap")
flow.prop(st, "syntax_highlight")
flow.prop(st, "show_line_numbers")
flow.prop(st, "show_word_wrap")
flow.prop(st, "show_syntax_highlight")
flow.prop(st, "show_line_highlight")
flow.prop(st, "live_edit")
flow = layout.column_flow()

View File

@@ -487,7 +487,7 @@ class PaintPanel():
elif context.particle_edit_object:
return ts.particle_edit
return False
return None
class VIEW3D_PT_tools_brush(PaintPanel, bpy.types.Panel):
@@ -753,7 +753,7 @@ class VIEW3D_PT_tools_brush_texture(PaintPanel, bpy.types.Panel):
col.separator()
col = layout.column()
col.active = tex_slot.map_mode in ('FIXED')
col.active = tex_slot.map_mode in ('FIXED', )
col.label(text="Angle:")
col = layout.column()
@@ -963,6 +963,7 @@ class VIEW3D_PT_tools_brush_curve(PaintPanel, bpy.types.Panel):
layout = self.layout
settings = self.paint_settings(context)
brush = settings.brush
layout.template_curve_mapping(brush, "curve", brush=True)

View File

@@ -17,7 +17,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.

View File

@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.

View File

@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.

View File

@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.

View File

@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2009 Blender Foundation
# All rights reserved.

View File

@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2008 Blender Foundation.
# All rights reserved.

View File

@@ -33,24 +33,8 @@
#include <float.h>
#include "BLI_linklist.h"
#include "BKE_customdata.h"
#include "BKE_DerivedMesh.h"
#include "BLI_blenlib.h"
#include "BLI_math.h"
#include "BLI_edgehash.h"
#include "DNA_cloth_types.h"
#include "DNA_customdata_types.h"
#include "DNA_meshdata_types.h"
#include "DNA_modifier_types.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
#include "BKE_collision.h"
struct Object;
struct ListBase;
struct Scene;
struct MFace;
struct DerivedMesh;
@@ -210,7 +194,7 @@ typedef enum
////////////////////////////////////////////////
// needed for implicit.c
int cloth_bvh_objcollision (Object *ob, ClothModifierData * clmd, float step, float dt );
int cloth_bvh_objcollision (struct Object *ob, struct ClothModifierData * clmd, float step, float dt );
////////////////////////////////////////////////
@@ -220,10 +204,10 @@ int cloth_bvh_objcollision (Object *ob, ClothModifierData * clmd, float step, fl
////////////////////////////////////////////////
// needed for cloth.c
int implicit_init ( Object *ob, ClothModifierData *clmd );
int implicit_free ( ClothModifierData *clmd );
int implicit_solver ( Object *ob, float frame, ClothModifierData *clmd, ListBase *effectors );
void implicit_set_positions ( ClothModifierData *clmd );
int implicit_init ( struct Object *ob, struct ClothModifierData *clmd );
int implicit_free ( struct ClothModifierData *clmd );
int implicit_solver ( struct Object *ob, float frame, struct ClothModifierData *clmd, struct ListBase *effectors );
void implicit_set_positions ( struct ClothModifierData *clmd );
// globally needed
void clmdSetInterruptCallBack ( int ( *f ) ( void ) );
@@ -235,23 +219,23 @@ void clmdSetInterruptCallBack ( int ( *f ) ( void ) );
////////////////////////////////////////////////
// needed for modifier.c
void cloth_free_modifier_extern ( ClothModifierData *clmd );
void cloth_free_modifier ( Object *ob, ClothModifierData *clmd );
void cloth_init ( ClothModifierData *clmd );
DerivedMesh *clothModifier_do ( ClothModifierData *clmd, struct Scene *scene, Object *ob, DerivedMesh *dm, int useRenderParams, int isFinalCalc );
void cloth_free_modifier_extern ( struct ClothModifierData *clmd );
void cloth_free_modifier ( struct Object *ob, struct ClothModifierData *clmd );
void cloth_init ( struct ClothModifierData *clmd );
struct DerivedMesh *clothModifier_do ( struct ClothModifierData *clmd, struct Scene *scene, struct Object *ob, struct DerivedMesh *dm, int useRenderParams, int isFinalCalc );
void cloth_update_normals ( ClothVertex *verts, int nVerts, MFace *face, int totface );
int cloth_uses_vgroup(ClothModifierData *clmd);
void cloth_update_normals ( ClothVertex *verts, int nVerts, struct MFace *face, int totface );
int cloth_uses_vgroup(struct ClothModifierData *clmd);
// needed for collision.c
void bvhtree_update_from_cloth ( ClothModifierData *clmd, int moving );
void bvhselftree_update_from_cloth ( ClothModifierData *clmd, int moving );
void bvhtree_update_from_cloth ( struct ClothModifierData *clmd, int moving );
void bvhselftree_update_from_cloth ( struct ClothModifierData *clmd, int moving );
// needed for button_object.c
void cloth_clear_cache ( Object *ob, ClothModifierData *clmd, float framenr );
void cloth_clear_cache ( struct Object *ob, struct ClothModifierData *clmd, float framenr );
// needed for cloth.c
int cloth_add_spring ( ClothModifierData *clmd, unsigned int indexA, unsigned int indexB, float restlength, int spring_type);
int cloth_add_spring ( struct ClothModifierData *clmd, unsigned int indexA, unsigned int indexB, float restlength, int spring_type);
////////////////////////////////////////////////
@@ -270,9 +254,9 @@ typedef struct
{
char *name;
CM_SOLVER_ID id;
int ( *init ) ( Object *ob, ClothModifierData *clmd );
int ( *solver ) ( Object *ob, float framenr, ClothModifierData *clmd, ListBase *effectors );
int ( *free ) ( ClothModifierData *clmd );
int ( *init ) ( struct Object *ob, struct ClothModifierData *clmd );
int ( *solver ) ( struct Object *ob, float framenr, struct ClothModifierData *clmd, struct ListBase *effectors );
int ( *free ) ( struct ClothModifierData *clmd );
}
CM_SOLVER_DEF;

View File

@@ -37,25 +37,21 @@
#include <string.h>
/* types */
#include "BLI_linklist.h"
#include "BKE_collision.h"
#include "BKE_customdata.h"
#include "BKE_DerivedMesh.h"
#include "DNA_cloth_types.h"
#include "DNA_customdata_types.h"
#include "DNA_meshdata_types.h"
#include "DNA_modifier_types.h"
#include "DNA_object_types.h"
#include "BLI_kdopbvh.h"
struct Cloth;
struct ClothModifierData;
struct CollisionModifierData;
struct DerivedMesh;
struct Group;
struct MFace;
struct MVert;
struct Object;
struct Scene;
struct LinkNode;
////////////////////////////////////////
// used for collisions in collision.c
@@ -122,16 +118,16 @@ FaceCollPair;
// used in modifier.c from collision.c
/////////////////////////////////////////////////
BVHTree *bvhtree_build_from_mvert ( MFace *mfaces, unsigned int numfaces, MVert *x, unsigned int numverts, float epsilon );
void bvhtree_update_from_mvert ( BVHTree * bvhtree, MFace *faces, int numfaces, MVert *x, MVert *xnew, int numverts, int moving );
BVHTree *bvhtree_build_from_mvert ( struct MFace *mfaces, unsigned int numfaces, struct MVert *x, unsigned int numverts, float epsilon );
void bvhtree_update_from_mvert ( BVHTree * bvhtree, struct MFace *faces, int numfaces, struct MVert *x, struct MVert *xnew, int numverts, int moving );
/////////////////////////////////////////////////
LinkNode *BLI_linklist_append_fast ( LinkNode **listp, void *ptr );
struct LinkNode *BLI_linklist_append_fast ( struct LinkNode **listp, void *ptr );
// move Collision modifier object inter-frame with step = [0,1]
// defined in collisions.c
void collision_move_object ( CollisionModifierData *collmd, float step, float prevstep );
void collision_move_object ( struct CollisionModifierData *collmd, float step, float prevstep );
// interface for collision functions
void collisions_compute_barycentric ( float pv[3], float p1[3], float p2[3], float p3[3], float *w1, float *w2, float *w3 );

View File

@@ -31,7 +31,6 @@
#ifndef BKE_EFFECT_H
#define BKE_EFFECT_H
#include "DNA_object_types.h"
#include "DNA_modifier_types.h"
struct Object;

View File

@@ -0,0 +1,75 @@
/**
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
* All rights reserved.
*
* The Original Code is: all of this file.
*
* Contributor(s): none yet.
*
* ***** END GPL LICENSE BLOCK *****
*/
#ifndef BKE_ID_INFO_H
#define BKE_ID_INFO_H
/**
* Convert an idcode into a name.
*
* @param code The code to convert.
* @return A static string representing the name of
* the code.
*/
const char *BKE_idcode_to_name(int code);
/**
* Convert an idcode into a name (plural).
*
* @param code The code to convert.
* @return A static string representing the name of
* the code.
*/
const char *BKE_idcode_to_name_plural(int code);
/**
* Convert a name into an idcode (ie. ID_SCE)
*
* @param name The name to convert.
* @return The code for the name, or 0 if invalid.
*/
int BKE_idcode_from_name(const char *name);
/**
* Return non-zero when an ID type is linkable.
*
* @param code The code to check.
* @return Boolean, 0 when non linkable.
*/
int BKE_idcode_is_linkable(int code);
/**
* Return if the ID code is a valid ID code.
*
* @param code The code to check.
* @return Boolean, 0 when invalid.
*/
int BKE_idcode_is_valid(int code);
#endif

View File

@@ -70,9 +70,9 @@ void set_sca_new_poins_ob(struct Object *ob);
void set_sca_new_poins(void);
void sca_remove_ob_poin(struct Object *obt, struct Object *ob);
void sca_move_sensor(struct bSensor *sens_to_move, Object *ob, int move_up);
void sca_move_controller(struct bController *cont_to_move, Object *ob, int move_up);
void sca_move_actuator(struct bActuator *act_to_move, Object *ob, int move_up);
void sca_move_sensor(struct bSensor *sens_to_move, struct Object *ob, int move_up);
void sca_move_controller(struct bController *cont_to_move, struct Object *ob, int move_up);
void sca_move_actuator(struct bActuator *act_to_move, struct Object *ob, int move_up);
#endif

View File

@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.

View File

@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.

View File

@@ -27,6 +27,14 @@
#include "MEM_guardedalloc.h"
#include "DNA_cloth_types.h"
#include "DNA_scene_types.h"
#include "DNA_object_types.h"
#include "DNA_meshdata_types.h"
#include "BLI_math.h"
#include "BLI_edgehash.h"
#include "BKE_cdderivedmesh.h"
#include "BKE_cloth.h"
#include "BKE_effect.h"

View File

@@ -37,6 +37,11 @@
#include "DNA_object_types.h"
#include "DNA_object_force.h"
#include "DNA_scene_types.h"
#include "DNA_meshdata_types.h"
#include "BLI_blenlib.h"
#include "BLI_math.h"
#include "BLI_edgehash.h"
#include "BKE_DerivedMesh.h"
#include "BKE_global.h"

View File

@@ -1573,7 +1573,7 @@ static void alfa_bezpart(BezTriple *prevbezt, BezTriple *bezt, Nurb *nu, float *
for(a=0; a<resolu; a++, fac+= dfac) {
if (tilt_array) {
if (nu->tilt_interp==3) { /* May as well support for tilt also 2.47 ease interp */
if (nu->tilt_interp==KEY_CU_EASE) { /* May as well support for tilt also 2.47 ease interp */
*tilt_array = prevbezt->alfa + (bezt->alfa - prevbezt->alfa)*(3.0f*fac*fac - 2.0f*fac*fac*fac);
} else {
key_curve_position_weights(fac, t, nu->tilt_interp);
@@ -1584,7 +1584,7 @@ static void alfa_bezpart(BezTriple *prevbezt, BezTriple *bezt, Nurb *nu, float *
}
if (radius_array) {
if (nu->radius_interp==3) {
if (nu->radius_interp==KEY_CU_EASE) {
/* Support 2.47 ease interp
* Note! - this only takes the 2 points into account,
* giving much more localized results to changes in radius, sometimes you want that */

View File

@@ -0,0 +1,129 @@
/**
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
* All rights reserved.
*
* The Original Code is: all of this file.
*
* Contributor(s): none yet.
*
* ***** END GPL LICENSE BLOCK *****
* return info about ID types
*/
#include <stdlib.h>
#include <string.h>
#include "DNA_ID.h"
typedef struct {
unsigned short code;
char *name, *plural;
int flags;
#define IDTYPE_FLAGS_ISLINKABLE (1<<0)
} IDType;
/* plural need to match rna_main.c's MainCollectionDef */
static IDType idtypes[]= {
{ ID_AC, "Action", "actions", IDTYPE_FLAGS_ISLINKABLE},
{ ID_AR, "Armature", "armatures", IDTYPE_FLAGS_ISLINKABLE},
{ ID_BR, "Brush", "brushes", IDTYPE_FLAGS_ISLINKABLE},
{ ID_CA, "Camera", "cameras", IDTYPE_FLAGS_ISLINKABLE},
{ ID_CU, "Curve", "curves", IDTYPE_FLAGS_ISLINKABLE},
{ ID_GD, "GPencil", "gpencil", IDTYPE_FLAGS_ISLINKABLE}, /* rename gpencil */
{ ID_GR, "Group", "groups", IDTYPE_FLAGS_ISLINKABLE},
{ ID_ID, "ID", "ids", 0}, /* plural is fake */
{ ID_IM, "Image", "images", IDTYPE_FLAGS_ISLINKABLE},
{ ID_IP, "Ipo", "ipos", IDTYPE_FLAGS_ISLINKABLE}, /* deprecated */
{ ID_KE, "Key", "keys", 0},
{ ID_LA, "Lamp", "lamps", IDTYPE_FLAGS_ISLINKABLE},
{ ID_LI, "Library", "libraries", 0},
{ ID_LS, "FreestyleLineStyle", "linestyles", 0},
{ ID_LT, "Lattice", "lattices", IDTYPE_FLAGS_ISLINKABLE},
{ ID_MA, "Material", "materials", IDTYPE_FLAGS_ISLINKABLE},
{ ID_MB, "Metaball", "metaballs", IDTYPE_FLAGS_ISLINKABLE},
{ ID_ME, "Mesh", "meshes", IDTYPE_FLAGS_ISLINKABLE},
{ ID_NT, "NodeTree", "node_groups", IDTYPE_FLAGS_ISLINKABLE},
{ ID_OB, "Object", "objects", IDTYPE_FLAGS_ISLINKABLE},
{ ID_PA, "ParticleSettings", "particles", 0},
{ ID_SCE, "Scene", "scenes", IDTYPE_FLAGS_ISLINKABLE},
{ ID_SCR, "Screen", "screens", 0},
{ ID_SEQ, "Sequence", "sequences", 0}, /* not actually ID data */
{ ID_SO, "Sound", "sounds", IDTYPE_FLAGS_ISLINKABLE},
{ ID_TE, "Texture", "textures", IDTYPE_FLAGS_ISLINKABLE},
{ ID_TXT, "Text", "texts", IDTYPE_FLAGS_ISLINKABLE},
{ ID_VF, "VFont", "fonts", IDTYPE_FLAGS_ISLINKABLE},
{ ID_WO, "World", "worlds", IDTYPE_FLAGS_ISLINKABLE},
{ ID_WM, "WindowManager", "window_managers", 0},
};
static int nidtypes= sizeof(idtypes)/sizeof(idtypes[0]);
static IDType *idtype_from_name(const char *str)
{
int i= nidtypes;
while (i--)
if (strcmp(str, idtypes[i].name)==0)
return &idtypes[i];
return NULL;
}
static IDType *idtype_from_code(int code)
{
int i= nidtypes;
while (i--)
if (code==idtypes[i].code)
return &idtypes[i];
return NULL;
}
int BKE_idcode_is_valid(int code)
{
return idtype_from_code(code)?1:0;
}
int BKE_idcode_is_linkable(int code) {
IDType *idt= idtype_from_code(code);
return idt?(idt->flags&IDTYPE_FLAGS_ISLINKABLE):0;
}
const char *BKE_idcode_to_name(int code)
{
IDType *idt= idtype_from_code(code);
return idt?idt->name:NULL;
}
int BKE_idcode_from_name(const char *name)
{
IDType *idt= idtype_from_name(name);
return idt?idt->code:0;
}
const char *BKE_idcode_to_name_plural(int code)
{
IDType *idt= idtype_from_code(code);
return idt?idt->plural:NULL;
}

View File

@@ -29,16 +29,21 @@
#include "MEM_guardedalloc.h"
#include "BKE_cloth.h"
#include "DNA_scene_types.h"
#include "DNA_object_types.h"
#include "DNA_object_force.h"
#include "DNA_meshdata_types.h"
#include "BLI_threads.h"
#include "BLI_math.h"
#include "BLI_linklist.h"
#include "BKE_cloth.h"
#include "BKE_collision.h"
#include "BKE_effect.h"
#include "BKE_global.h"
#include "BKE_utildefines.h"
#include "BLI_threads.h"
#define CLOTH_OPENMP_LIMIT 25
#ifdef _WIN32

View File

@@ -1850,9 +1850,12 @@ void vertcos_to_key(Object *ob, KeyBlock *kb, float (*vertCos)[3])
tot= count_curveverts(&cu->nurb);
}
fp= kb->data= MEM_callocN(tot*elemsize, "key_to_vertcos vertCos");
if (tot == 0) {
kb->data= NULL;
return;
}
if (tot == 0) return;
fp= kb->data= MEM_callocN(tot*elemsize, "key_to_vertcos vertCos");
/* Copy coords to keyblock */

View File

@@ -225,8 +225,12 @@ void free_lattice(Lattice *lt)
if(lt->def) MEM_freeN(lt->def);
if(lt->dvert) free_dverts(lt->dvert, lt->pntsu*lt->pntsv*lt->pntsw);
if(lt->editlatt) {
if(lt->editlatt->def) MEM_freeN(lt->editlatt->def);
if(lt->editlatt->dvert) free_dverts(lt->editlatt->dvert, lt->pntsu*lt->pntsv*lt->pntsw);
Lattice *editlt= lt->editlatt->latt;
if(editlt->def) MEM_freeN(editlt->def);
if(editlt->dvert) free_dverts(editlt->dvert, lt->pntsu*lt->pntsv*lt->pntsw);
MEM_freeN(editlt);
MEM_freeN(lt->editlatt);
}
}
@@ -295,7 +299,7 @@ void init_latt_deform(Object *oblatt, Object *ob)
float fu, fv, fw;
int u, v, w;
if(lt->editlatt) lt= lt->editlatt;
if(lt->editlatt) lt= lt->editlatt->latt;
bp = lt->def;
fp= lt->latticedata= MEM_mallocN(sizeof(float)*3*lt->pntsu*lt->pntsv*lt->pntsw, "latticedata");
@@ -350,7 +354,7 @@ void calc_latt_deform(Object *ob, float *co, float weight)
MDeformVert *dvert= lattice_get_deform_verts(ob);
if(lt->editlatt) lt= lt->editlatt;
if(lt->editlatt) lt= lt->editlatt->latt;
if(lt->latticedata==NULL) return;
if(lt->vgroup[0] && dvert) {
@@ -446,7 +450,7 @@ void end_latt_deform(Object *ob)
{
Lattice *lt= ob->data;
if(lt->editlatt) lt= lt->editlatt;
if(lt->editlatt) lt= lt->editlatt->latt;
if(lt->latticedata)
MEM_freeN(lt->latticedata);
@@ -1002,7 +1006,7 @@ float (*lattice_getVertexCos(struct Object *ob, int *numVerts_r))[3]
int i, numVerts;
float (*vertexCos)[3];
if(lt->editlatt) lt= lt->editlatt;
if(lt->editlatt) lt= lt->editlatt->latt;
numVerts = *numVerts_r = lt->pntsu*lt->pntsv*lt->pntsw;
vertexCos = MEM_mallocN(sizeof(*vertexCos)*numVerts,"lt_vcos");
@@ -1066,7 +1070,7 @@ struct MDeformVert* lattice_get_deform_verts(struct Object *oblatt)
if(oblatt->type == OB_LATTICE)
{
Lattice *lt = (Lattice*)oblatt->data;
if(lt->editlatt) lt= lt->editlatt;
if(lt->editlatt) lt= lt->editlatt->latt;
return lt->dvert;
}

View File

@@ -41,6 +41,8 @@
#include "float.h"
#include "DNA_armature_types.h"
#include "DNA_object_types.h"
#include "DNA_meshdata_types.h"
#include "BKE_bmesh.h"
#include "BKE_cloth.h"
@@ -193,7 +195,7 @@ void modifier_copyData(ModifierData *md, ModifierData *target)
mti->copyData(md, target);
}
int modifier_couldBeCage(Scene *scene, ModifierData *md)
int modifier_couldBeCage(struct Scene *scene, ModifierData *md)
{
ModifierTypeInfo *mti = modifierType_getInfo(md->type);
@@ -233,7 +235,7 @@ void modifier_setError(ModifierData *md, char *format, ...)
* also used in transform_conversion.c, to detect CrazySpace [tm] (2nd arg
* then is NULL)
*/
int modifiers_getCageIndex(Scene *scene, Object *ob, int *lastPossibleCageIndex_r, int virtual_)
int modifiers_getCageIndex(struct Scene *scene, Object *ob, int *lastPossibleCageIndex_r, int virtual_)
{
ModifierData *md = (virtual_)? modifiers_getVirtualModifierList(ob): ob->modifiers.first;
int i, cageIndex = -1;
@@ -283,7 +285,7 @@ int modifiers_isParticleEnabled(Object *ob)
return (md && md->mode & (eModifierMode_Realtime | eModifierMode_Render));
}
int modifier_isEnabled(Scene *scene, ModifierData *md, int required_mode)
int modifier_isEnabled(struct Scene *scene, ModifierData *md, int required_mode)
{
ModifierTypeInfo *mti = modifierType_getInfo(md->type);
@@ -298,7 +300,7 @@ int modifier_isEnabled(Scene *scene, ModifierData *md, int required_mode)
return 1;
}
LinkNode *modifiers_calcDataMasks(Scene *scene, Object *ob, ModifierData *md, CustomDataMask dataMask, int required_mode)
LinkNode *modifiers_calcDataMasks(struct Scene *scene, Object *ob, ModifierData *md, CustomDataMask dataMask, int required_mode)
{
LinkNode *dataMasks = NULL;
LinkNode *curr, *prev;
@@ -487,7 +489,7 @@ int modifier_isCorrectableDeformed(ModifierData *md)
return 0;
}
int modifiers_isCorrectableDeformed(Scene *scene, Object *ob)
int modifiers_isCorrectableDeformed(struct Scene *scene, Object *ob)
{
ModifierData *md = modifiers_getVirtualModifierList(ob);

View File

@@ -1265,13 +1265,13 @@ void BKE_nlastrip_validate_name (AnimData *adt, NlaStrip *strip)
char *dot;
/* Strip off the suffix */
dot = strchr(strip->name, '.');
dot = strrchr(strip->name, '.');
if (dot) *dot=0;
/* Try different possibilities */
for (number = 1; number <= 999; number++) {
/* assemble alternative name */
BLI_snprintf(tempname, 128, "%s%c%03d", strip->name, ".", number);
BLI_snprintf(tempname, 128, "%s.%03d", strip->name, number);
/* if hash doesn't have this, set it */
if (BLI_ghash_haskey(gh, tempname) == 0) {

View File

@@ -1917,7 +1917,7 @@ static void give_parvert(Object *par, int nr, float *vec)
DispList *dl = find_displist(&par->disp, DL_VERTS);
float *co = dl?dl->verts:NULL;
if(latt->editlatt) latt= latt->editlatt;
if(latt->editlatt) latt= latt->editlatt->latt;
a= latt->pntsu*latt->pntsv*latt->pntsw;
count= 0;
@@ -2501,7 +2501,7 @@ void object_handle_update(Scene *scene, Object *ob)
/* includes all keys and modifiers */
if(ob->type==OB_MESH) {
EditMesh *em = BKE_mesh_get_editmesh(ob->data);
EditMesh *em = (ob == scene->obedit)? BKE_mesh_get_editmesh(ob->data): NULL;
/* evaluate drivers */
// XXX: should we push this to derivedmesh instead?

View File

@@ -40,12 +40,16 @@
#include "DNA_key_types.h"
#include "DNA_material_types.h"
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
#include "DNA_particle_types.h"
#include "DNA_smoke_types.h"
#include "DNA_scene_types.h"
#include "BLI_blenlib.h"
#include "BLI_kdtree.h"
#include "BLI_rand.h"
#include "BLI_threads.h"
#include "BLI_math.h"
#include "BKE_anim.h"
#include "BKE_animsys.h"

View File

@@ -43,6 +43,7 @@
#include "BLI_blenlib.h"
#include "BLI_threads.h"
#include "BLI_math.h"
#include "PIL_time.h"

View File

@@ -55,11 +55,12 @@ variables on the UI for now
#include "MEM_guardedalloc.h"
/* types */
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
#include "DNA_lattice_types.h"
#include "DNA_curve_types.h"
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
#include "DNA_lattice_types.h"
#include "DNA_scene_types.h"
#include "BLI_math.h"
#include "BLI_ghash.h"

View File

@@ -69,6 +69,8 @@ static int ccgDM_getVertMapIndex(CCGSubSurf *ss, CCGVert *v);
static int ccgDM_getEdgeMapIndex(CCGSubSurf *ss, CCGEdge *e);
static int ccgDM_getFaceMapIndex(CCGSubSurf *ss, CCGFace *f);
static int ccgDM_use_grid_pbvh(CCGDerivedMesh *ccgdm);
///
static void *arena_alloc(CCGAllocatorHDL a, int numBytes) {
@@ -1249,7 +1251,7 @@ static void ccgDM_glNormalFast(float *a, float *b, float *c, float *d)
static void ccgdm_pbvh_update(CCGDerivedMesh *ccgdm)
{
if(ccgdm->pbvh && ccgdm->multires.mmd) {
if(ccgdm->pbvh && ccgDM_use_grid_pbvh(ccgdm)) {
CCGFace **faces;
int totface;

View File

@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.

View File

@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.

View File

@@ -15,7 +15,7 @@
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
* All rights reserved.

View File

@@ -586,7 +586,7 @@ int BLI_path_abs(char *path, const char *basepath)
BLI_strncpy(tmp, path, FILE_MAX);
}
#else
BLI_strncpy(tmp, path, FILE_MAX);
BLI_strncpy(tmp, path, sizeof(tmp));
/* Check for loading a windows path on a posix system
* in this case, there is no use in trying C:/ since it
@@ -603,7 +603,7 @@ int BLI_path_abs(char *path, const char *basepath)
#endif
BLI_strncpy(base, basepath, FILE_MAX);
BLI_strncpy(base, basepath, sizeof(base));
BLI_cleanup_file(NULL, base);
@@ -626,17 +626,19 @@ int BLI_path_abs(char *path, const char *basepath)
BLI_strncpy(path, tmp+2, FILE_MAX);
memcpy(tmp, base, baselen);
strcpy(tmp+baselen, path);
strcpy(path, tmp);
BLI_strncpy(tmp+baselen, path, sizeof(tmp)-baselen);
BLI_strncpy(path, tmp, FILE_MAX);
} else {
strcpy(path, tmp+2);
BLI_strncpy(path, tmp+2, FILE_MAX);
}
} else {
strcpy(path, tmp);
BLI_strncpy(path, tmp, FILE_MAX);
}
if (path[0]!='\0') {
if ( path[strlen(path)-1]=='/') {
/* remove the '/' so we avoid BLI_cleanup_dir adding an extra \ in WIN32 */
path[strlen(path)-1] = '\0';
BLI_cleanup_dir(NULL, path);
} else {
BLI_cleanup_file(NULL, path);
@@ -1160,7 +1162,7 @@ void BLI_make_existing_file(char *name)
{
char di[FILE_MAXDIR+FILE_MAXFILE], fi[FILE_MAXFILE];
strcpy(di, name);
BLI_strncpy(di, name, sizeof(di));
BLI_splitdirstring(di, fi);
/* test exist */

View File

@@ -237,8 +237,19 @@ void BLI_builddir(char *dirname, char *relname)
if (newnum){
if (files) files=(struct direntry *)realloc(files,(totnum+newnum) * sizeof(struct direntry));
else files=(struct direntry *)malloc(newnum * sizeof(struct direntry));
if(files) {
void *tmp= realloc(files, (totnum+newnum) * sizeof(struct direntry));
if(tmp) {
files= (struct direntry *)tmp;
}
else { /* realloc fail */
free(files);
files= NULL;
}
}
if(files==NULL)
files=(struct direntry *)malloc(newnum * sizeof(struct direntry));
if (files){
dlink = (struct dirlink *) dirbase->first;

View File

@@ -112,38 +112,6 @@ BlendFileData *BLO_read_from_memfile(struct Main *oldmain, const char *filename,
BLO_blendfiledata_free(
BlendFileData *bfd);
/**
* Convert an idcode into a name.
*
* @param code The code to convert.
* @return A static string representing the name of
* the code.
*/
char*
BLO_idcode_to_name(
int code);
/**
* Convert an idcode into a name (plural).
*
* @param code The code to convert.
* @return A static string representing the name of
* the code.
*/
char*
BLO_idcode_to_name_plural(
int code);
/**
* Convert a name into an idcode (ie. ID_SCE)
*
* @param name The name to convert.
* @return The code for the name, or 0 if invalid.
*/
int
BLO_idcode_from_name(
char *name);
/**
* Open a blendhandle from a file path.
*

View File

@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.

View File

@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.

View File

@@ -46,6 +46,7 @@
#include "BKE_main.h"
#include "BKE_library.h" // for free_main
#include "BKE_idcode.h"
#include "BKE_report.h"
#include "BLO_readfile.h"
@@ -61,112 +62,9 @@
#include "BLI_winstuff.h"
#endif
/**
* IDType stuff, I plan to move this
* out into its own file + prefix, and
* make sure all IDType handling goes through
* these routines.
*/
typedef struct {
unsigned short code;
char *name, *plural;
int flags;
#define IDTYPE_FLAGS_ISLINKABLE (1<<0)
} IDType;
/* plural need to match rna_main.c's MainCollectionDef */
static IDType idtypes[]= {
{ ID_AC, "Action", "actions", IDTYPE_FLAGS_ISLINKABLE},
{ ID_AR, "Armature", "armatures", IDTYPE_FLAGS_ISLINKABLE},
{ ID_BR, "Brush", "brushes", IDTYPE_FLAGS_ISLINKABLE},
{ ID_CA, "Camera", "cameras", IDTYPE_FLAGS_ISLINKABLE},
{ ID_CU, "Curve", "curves", IDTYPE_FLAGS_ISLINKABLE},
{ ID_GD, "GPencil", "gpencil", IDTYPE_FLAGS_ISLINKABLE}, /* rename gpencil */
{ ID_GR, "Group", "groups", IDTYPE_FLAGS_ISLINKABLE},
{ ID_ID, "ID", "ids", 0}, /* plural is fake */
{ ID_IM, "Image", "images", IDTYPE_FLAGS_ISLINKABLE},
{ ID_IP, "Ipo", "ipos", IDTYPE_FLAGS_ISLINKABLE}, /* deprecated */
{ ID_KE, "Key", "keys", 0},
{ ID_LA, "Lamp", "lamps", IDTYPE_FLAGS_ISLINKABLE},
{ ID_LI, "Library", "libraries", 0},
{ ID_LS, "FreestyleLineStyle", "linestyles", 0},
{ ID_LT, "Lattice", "lattices", IDTYPE_FLAGS_ISLINKABLE},
{ ID_MA, "Material", "materials", IDTYPE_FLAGS_ISLINKABLE},
{ ID_MB, "Metaball", "metaballs", IDTYPE_FLAGS_ISLINKABLE},
{ ID_ME, "Mesh", "meshes", IDTYPE_FLAGS_ISLINKABLE},
{ ID_NT, "NodeTree", "node_groups", IDTYPE_FLAGS_ISLINKABLE},
{ ID_OB, "Object", "objects", IDTYPE_FLAGS_ISLINKABLE},
{ ID_PA, "ParticleSettings", "particles", 0},
{ ID_SCE, "Scene", "scenes", IDTYPE_FLAGS_ISLINKABLE},
{ ID_SCR, "Screen", "screens", 0},
{ ID_SEQ, "Sequence", "sequences", 0}, /* not actually ID data */
{ ID_SO, "Sound", "sounds", IDTYPE_FLAGS_ISLINKABLE},
{ ID_TE, "Texture", "textures", IDTYPE_FLAGS_ISLINKABLE},
{ ID_TXT, "Text", "texts", IDTYPE_FLAGS_ISLINKABLE},
{ ID_VF, "VFont", "fonts", IDTYPE_FLAGS_ISLINKABLE},
{ ID_WO, "World", "worlds", IDTYPE_FLAGS_ISLINKABLE},
{ ID_WM, "WindowManager", "window_managers", 0},
};
static int nidtypes= sizeof(idtypes)/sizeof(idtypes[0]);
/* local prototypes --------------------- */
void BLO_blendhandle_print_sizes(BlendHandle *, void *);
static IDType *idtype_from_name(char *str)
{
int i= nidtypes;
while (i--)
if (BLI_streq(str, idtypes[i].name))
return &idtypes[i];
return NULL;
}
static IDType *idtype_from_code(int code)
{
int i= nidtypes;
while (i--)
if (code==idtypes[i].code)
return &idtypes[i];
return NULL;
}
static int bheadcode_is_idcode(int code)
{
return idtype_from_code(code)?1:0;
}
static int idcode_is_linkable(int code) {
IDType *idt= idtype_from_code(code);
return idt?(idt->flags&IDTYPE_FLAGS_ISLINKABLE):0;
}
char *BLO_idcode_to_name(int code)
{
IDType *idt= idtype_from_code(code);
return idt?idt->name:NULL;
}
int BLO_idcode_from_name(char *name)
{
IDType *idt= idtype_from_name(name);
return idt?idt->code:0;
}
char *BLO_idcode_to_name_plural(int code)
{
IDType *idt= idtype_from_code(code);
return idt?idt->plural:NULL;
}
/* Access routines used by filesel. */
BlendHandle *BLO_blendhandle_from_file(char *file)
@@ -309,13 +207,13 @@ LinkNode *BLO_blendhandle_get_linkable_groups(BlendHandle *bh)
for (bhead= blo_firstbhead(fd); bhead; bhead= blo_nextbhead(fd, bhead)) {
if (bhead->code==ENDB) {
break;
} else if (bheadcode_is_idcode(bhead->code)) {
if (idcode_is_linkable(bhead->code)) {
char *str= BLO_idcode_to_name(bhead->code);
} else if (BKE_idcode_is_valid(bhead->code)) {
if (BKE_idcode_is_linkable(bhead->code)) {
const char *str= BKE_idcode_to_name(bhead->code);
if (!BLI_ghash_haskey(gathered, str)) {
if (!BLI_ghash_haskey(gathered, (void *)str)) {
BLI_linklist_prepend(&names, strdup(str));
BLI_ghash_insert(gathered, str, NULL);
BLI_ghash_insert(gathered, (void *)str, NULL);
}
}
}

View File

@@ -106,6 +106,7 @@
#include "BKE_image.h"
#include "BKE_lattice.h"
#include "BKE_library.h" // for which_libbase
#include "BKE_idcode.h"
#include "BKE_main.h" // for Main
#include "BKE_mesh.h" // for ME_ defines (patching)
#include "BKE_modifier.h"
@@ -4107,8 +4108,9 @@ static void composite_patch(bNodeTree *ntree, Scene *scene)
static void link_paint(FileData *fd, Scene *sce, Paint *p)
{
if(p && p->brush) {
if(p) {
p->brush= newlibadr_us(fd, sce->id.lib, p->brush);
p->paint_cursor= NULL;
}
}
@@ -12755,8 +12757,8 @@ static void read_libraries(FileData *basefd, ListBase *mainlist)
append_id_part(fd, mainptr, id, &realid);
if (!realid) {
BKE_reportf(fd->reports, RPT_ERROR, "LIB ERROR: %s:'%s' missing from '%s'\n", BLO_idcode_to_name(GS(id->name)), id->name+2, mainptr->curlib->filepath);
if(!G.background && basefd->reports) printf("LIB ERROR: %s:'%s' missing from '%s'\n", BLO_idcode_to_name(GS(id->name)), id->name+2, mainptr->curlib->filepath);
BKE_reportf(fd->reports, RPT_ERROR, "LIB ERROR: %s:'%s' missing from '%s'\n", BKE_idcode_to_name(GS(id->name)), id->name+2, mainptr->curlib->filepath);
if(!G.background && basefd->reports) printf("LIB ERROR: %s:'%s' missing from '%s'\n", BKE_idcode_to_name(GS(id->name)), id->name+2, mainptr->curlib->filepath);
}
change_idid_adr(mainlist, basefd, id, realid);
@@ -12791,8 +12793,8 @@ static void read_libraries(FileData *basefd, ListBase *mainlist)
ID *idn= id->next;
if(id->flag & LIB_READ) {
BLI_remlink(lbarray[a], id);
BKE_reportf(basefd->reports, RPT_ERROR, "LIB ERROR: %s:'%s' unread libblock missing from '%s'\n", BLO_idcode_to_name(GS(id->name)), id->name+2, mainptr->curlib->filepath);
if(!G.background && basefd->reports)printf("LIB ERROR: %s:'%s' unread libblock missing from '%s'\n", BLO_idcode_to_name(GS(id->name)), id->name+2, mainptr->curlib->filepath);
BKE_reportf(basefd->reports, RPT_ERROR, "LIB ERROR: %s:'%s' unread libblock missing from '%s'\n", BKE_idcode_to_name(GS(id->name)), id->name+2, mainptr->curlib->filepath);
if(!G.background && basefd->reports)printf("LIB ERROR: %s:'%s' unread libblock missing from '%s'\n", BKE_idcode_to_name(GS(id->name)), id->name+2, mainptr->curlib->filepath);
change_idid_adr(mainlist, basefd, id, NULL);
MEM_freeN(id);

View File

@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.

View File

@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.

View File

@@ -1774,6 +1774,7 @@ public:
for (int a = 0; a < MAX_MTEX; a++) {
if (ma->mtex[a] &&
ma->mtex[a]->tex &&
ma->mtex[a]->tex->type == TEX_IMAGE &&
ma->mtex[a]->texco == TEXCO_UV){
indices.push_back(a);

View File

@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2008 Blender Foundation.
# All rights reserved.

View File

@@ -14,7 +14,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2006, Blender Foundation
# All rights reserved.

View File

@@ -17,7 +17,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) Blender Foundation.
# All rights reserved.

View File

@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.

View File

@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.

View File

@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.

View File

@@ -724,7 +724,7 @@ static void calc_shapeKeys(Object *obedit)
int a, i, j;
EditNurb *editnurb= cu->editnurb;
KeyBlock *currkey;
KeyBlock *actkey= ob_get_keyblock(obedit);
KeyBlock *actkey= BLI_findlink(&cu->key->block, editnurb->shapenr-1);
BezTriple *bezt, *oldbezt;
BPoint *bp, *oldbp;
Nurb *nu;
@@ -738,7 +738,7 @@ static void calc_shapeKeys(Object *obedit)
int act_is_basis = 0;
/* find if this key is a basis for any others */
for(currkey = cu->key->block.first; currkey; currkey= currkey->next) {
if(obedit->shapenr-1 == currkey->relative) {
if(editnurb->shapenr-1 == currkey->relative) {
act_is_basis = 1;
break;
}
@@ -806,7 +806,7 @@ static void calc_shapeKeys(Object *obedit)
currkey = cu->key->block.first;
while(currkey) {
int apply_offset = (ofs && (currkey != actkey) && (obedit->shapenr-1 == currkey->relative));
int apply_offset = (ofs && (currkey != actkey) && (editnurb->shapenr-1 == currkey->relative));
fp= newkey= MEM_callocN(cu->key->elemsize * totvert, "currkey->data");
ofp= oldkey = currkey->data;
@@ -1035,6 +1035,7 @@ void make_editNurb(Object *obedit)
}
if(actkey) {
editnurb->shapenr= obedit->shapenr;
init_editNurb_keyIndex(editnurb, &cu->nurb);
}
}

View File

@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.

View File

@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.

View File

@@ -0,0 +1,33 @@
/**
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* The Original Code is Copyright (C) 2008 Blender Foundation.
* All rights reserved.
*
*
* Contributor(s): Blender Foundation
*
* ***** END GPL LICENSE BLOCK *****
*/
struct Object;
void free_editLatt(struct Object *ob);
void make_editLatt(struct Object *obedit);
void load_editLatt(struct Object *obedit);

View File

@@ -51,7 +51,7 @@ struct ViewContext;
/* for derivedmesh drawing callbacks, for view3d_select, .... */
typedef struct ViewContext {
Scene *scene;
struct Scene *scene;
struct Object *obact;
struct Object *obedit;
struct ARegion *ar;

View File

@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.

View File

@@ -1146,7 +1146,7 @@ void ui_draw_but_COLORBAND(uiBut *but, uiWidgetColors *wcol, rcti *rect)
glColor4fv( &cbd->r );
glVertex2fv(v1); glVertex2fv(v2);
for( a = 1; a < sizex; a++ ) {
for( a = 1; a <= sizex; a++ ) {
pos = ((float)a) / (sizex-1);
do_colorband( coba, pos, colf );
if (but->block->color_profile != BLI_PR_NONE)
@@ -1163,19 +1163,8 @@ void ui_draw_but_COLORBAND(uiBut *but, uiWidgetColors *wcol, rcti *rect)
glDisable(GL_BLEND);
/* outline */
v1[0]= x1; v1[1]= y1;
cpack(0x0);
glBegin(GL_LINE_LOOP);
glVertex2fv(v1);
v1[0]+= sizex;
glVertex2fv(v1);
v1[1]+= sizey;
glVertex2fv(v1);
v1[0]-= sizex;
glVertex2fv(v1);
glEnd();
glColor4f(0.0, 0.0, 0.0, 1.0);
fdrawbox(x1, y1, x1+sizex, y1+sizey);
/* help lines */
v1[0]= v2[0]=v3[0]= x1;
@@ -1231,6 +1220,7 @@ void ui_draw_but_COLORBAND(uiBut *but, uiWidgetColors *wcol, rcti *rect)
}
}
glEnd();
}
void ui_draw_but_NORMAL(uiBut *but, uiWidgetColors *wcol, rcti *rect)

View File

@@ -4262,7 +4262,7 @@ static int ui_do_button(bContext *C, uiBlock *block, uiBut *but, wmEvent *event)
return WM_UI_HANDLER_BREAK;
}
/* reset to default */
else if(event->type == ZEROKEY && event->val == KM_PRESS) {
else if(ELEM(event->type, ZEROKEY,PAD0) && event->val == KM_PRESS) {
if (!(ELEM3(but->type, HSVCIRCLE, HSVCUBE, HISTOGRAM)))
ui_set_but_default(C, but);
}

View File

@@ -2099,12 +2099,6 @@ static void list_item_row(bContext *C, uiLayout *layout, PointerRNA *ptr, Pointe
/* list item behind label & other buttons */
sub= uiLayoutRow(overlap, 0);
if(itemptr->type == &RNA_ShapeKey) {
ob= (Object*)activeptr->data;
if(ob->mode == OB_MODE_EDIT && !(ob->type == OB_MESH))
uiLayoutSetEnabled(sub, 0);
}
but= uiDefButR(block, LISTROW, 0, "", 0,0, UI_UNIT_X*10,UI_UNIT_Y, activeptr, activepropname, 0, 0, i, 0, 0, "");
uiButSetFlag(but, UI_BUT_NO_TOOLTIP);

View File

@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.

View File

@@ -32,8 +32,11 @@
#include "MEM_guardedalloc.h"
#include "DNA_scene_types.h"
#include "DNA_object_types.h"
#include "DNA_key_types.h"
#include "DNA_meshdata_types.h"
#include "DNA_modifier_types.h"
#include "BLI_blenlib.h"
#include "BLI_math.h"
@@ -41,7 +44,7 @@
#include "BLI_dynstr.h"
#include "BLI_rand.h"
#include "BKE_cloth.h"
#include "BKE_DerivedMesh.h"
#include "BKE_context.h"
#include "BKE_depsgraph.h"
#include "BKE_global.h"

View File

@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.

View File

@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.

View File

@@ -43,6 +43,9 @@
#include "DNA_material_types.h"
#include "DNA_meta_types.h"
#include "DNA_property_types.h"
#include "DNA_scene_types.h"
#include "DNA_object_types.h"
#include "DNA_meshdata_types.h"
#include "DNA_vfont_types.h"
#include "BLI_blenlib.h"
@@ -54,7 +57,6 @@
#include "BKE_anim.h"
#include "BKE_constraint.h"
#include "BKE_context.h"
#include "BKE_cloth.h"
#include "BKE_curve.h"
#include "BKE_depsgraph.h"
#include "BKE_font.h"
@@ -76,6 +78,7 @@
#include "ED_curve.h"
#include "ED_mesh.h"
#include "ED_mball.h"
#include "ED_lattice.h"
#include "ED_object.h"
#include "ED_screen.h"
#include "ED_util.h"
@@ -936,8 +939,9 @@ void special_editmenu(Scene *scene, View3D *v3d)
static float weight= 1.0f;
{ // XXX
// XXX if(fbutton(&weight, 0.0f, 1.0f, 10, 10, "Set Weight")) {
int a= lt->editlatt->pntsu*lt->editlatt->pntsv*lt->editlatt->pntsw;
BPoint *bp= lt->editlatt->def;
Lattice *editlt= lt->editlatt->latt;
int a= editlt->pntsu*editlt->pntsv*editlt->pntsw;
BPoint *bp= editlt->def;
while(a--) {
if(bp->f1 & SELECT)

View File

@@ -191,13 +191,14 @@ static int return_editlattice_indexar(Lattice *editlatt, int *tot, int **indexar
static void select_editlattice_hook(Object *obedit, HookModifierData *hmd)
{
Lattice *lt= obedit->data;
Lattice *lt= obedit->data, *editlt;
BPoint *bp;
int index=0, nr=0, a;
editlt= lt->editlatt->latt;
/* count */
a= lt->editlatt->pntsu*lt->editlatt->pntsv*lt->editlatt->pntsw;
bp= lt->editlatt->def;
a= editlt->pntsu*editlt->pntsv*editlt->pntsw;
bp= editlt->def;
while(a--) {
if(hmd->indexar[index]==nr) {
bp->f1 |= SELECT;
@@ -313,7 +314,7 @@ static int object_hook_index_array(Object *obedit, int *tot, int **indexar, char
case OB_LATTICE:
{
Lattice *lt= obedit->data;
return return_editlattice_indexar(lt->editlatt, tot, indexar, cent_r);
return return_editlattice_indexar(lt->editlatt->latt, tot, indexar, cent_r);
}
default:
return 0;

View File

@@ -131,11 +131,6 @@ void OBJECT_OT_hook_reset(struct wmOperatorType *ot);
void OBJECT_OT_hook_recenter(struct wmOperatorType *ot);
/* object_lattice.c */
void free_editLatt(struct Object *ob);
void make_editLatt(struct Object *obedit);
void load_editLatt(struct Object *obedit);
void remake_editLatt(struct Object *obedit);
void LATTICE_OT_select_all(struct wmOperatorType *ot);
void LATTICE_OT_make_regular(struct wmOperatorType *ot);

View File

@@ -46,6 +46,8 @@
#include "BKE_lattice.h"
#include "BKE_mesh.h"
#include "BLI_listbase.h"
#include "ED_screen.h"
#include "ED_view3d.h"
#include "ED_util.h"
@@ -62,12 +64,16 @@ void free_editLatt(Object *ob)
Lattice *lt= ob->data;
if(lt->editlatt) {
if(lt->editlatt->def)
MEM_freeN(lt->editlatt->def);
if(lt->editlatt->dvert)
free_dverts(lt->editlatt->dvert, lt->editlatt->pntsu*lt->editlatt->pntsv*lt->editlatt->pntsw);
Lattice *editlt= lt->editlatt->latt;
if(editlt->def)
MEM_freeN(editlt->def);
if(editlt->dvert)
free_dverts(editlt->dvert, editlt->pntsu*editlt->pntsv*editlt->pntsw);
MEM_freeN(editlt);
MEM_freeN(lt->editlatt);
lt->editlatt= NULL;
}
}
@@ -85,38 +91,42 @@ void make_editLatt(Object *obedit)
if(actkey)
key_to_latt(actkey, lt);
lt->editlatt= MEM_dupallocN(lt);
lt->editlatt->def= MEM_dupallocN(lt->def);
lt->editlatt= MEM_callocN(sizeof(EditLatt), "editlatt");
lt->editlatt->latt= MEM_dupallocN(lt);
lt->editlatt->latt->def= MEM_dupallocN(lt->def);
if(lt->dvert) {
int tot= lt->pntsu*lt->pntsv*lt->pntsw;
lt->editlatt->dvert = MEM_mallocN (sizeof (MDeformVert)*tot, "Lattice MDeformVert");
copy_dverts(lt->editlatt->dvert, lt->dvert, tot);
lt->editlatt->latt->dvert = MEM_mallocN (sizeof (MDeformVert)*tot, "Lattice MDeformVert");
copy_dverts(lt->editlatt->latt->dvert, lt->dvert, tot);
}
if(lt->key) lt->editlatt->shapenr= obedit->shapenr;
}
void load_editLatt(Object *obedit)
{
Lattice *lt;
Lattice *lt, *editlt;
KeyBlock *actkey;
BPoint *bp;
float *fp;
int tot;
lt= obedit->data;
editlt= lt->editlatt->latt;
actkey= ob_get_keyblock(obedit);
if(lt->editlatt->shapenr) {
actkey= BLI_findlink(&lt->key->block, lt->editlatt->shapenr-1);
if(actkey) {
/* active key: vertices */
tot= lt->editlatt->pntsu*lt->editlatt->pntsv*lt->editlatt->pntsw;
tot= editlt->pntsu*editlt->pntsv*editlt->pntsw;
if(actkey->data) MEM_freeN(actkey->data);
fp=actkey->data= MEM_callocN(lt->key->elemsize*tot, "actkey->data");
actkey->totelem= tot;
bp= lt->editlatt->def;
bp= editlt->def;
while(tot--) {
VECCOPY(fp, bp->vec);
fp+= 3;
@@ -126,17 +136,17 @@ void load_editLatt(Object *obedit)
else {
MEM_freeN(lt->def);
lt->def= MEM_dupallocN(lt->editlatt->def);
lt->def= MEM_dupallocN(editlt->def);
lt->flag= lt->editlatt->flag;
lt->flag= editlt->flag;
lt->pntsu= lt->editlatt->pntsu;
lt->pntsv= lt->editlatt->pntsv;
lt->pntsw= lt->editlatt->pntsw;
lt->pntsu= editlt->pntsu;
lt->pntsv= editlt->pntsv;
lt->pntsw= editlt->pntsw;
lt->typeu= lt->editlatt->typeu;
lt->typev= lt->editlatt->typev;
lt->typew= lt->editlatt->typew;
lt->typeu= editlt->typeu;
lt->typev= editlt->typev;
lt->typew= editlt->typew;
}
if(lt->dvert) {
@@ -144,11 +154,11 @@ void load_editLatt(Object *obedit)
lt->dvert= NULL;
}
if(lt->editlatt->dvert) {
if(editlt->dvert) {
int tot= lt->pntsu*lt->pntsv*lt->pntsw;
lt->dvert = MEM_mallocN (sizeof (MDeformVert)*tot, "Lattice MDeformVert");
copy_dverts(lt->dvert, lt->editlatt->dvert, tot);
copy_dverts(lt->dvert, editlt->dvert, tot);
}
}
@@ -160,9 +170,9 @@ void ED_setflagsLatt(Object *obedit, int flag)
BPoint *bp;
int a;
bp= lt->editlatt->def;
bp= lt->editlatt->latt->def;
a= lt->editlatt->pntsu*lt->editlatt->pntsv*lt->editlatt->pntsw;
a= lt->editlatt->latt->pntsu*lt->editlatt->latt->pntsv*lt->editlatt->latt->pntsw;
while(a--) {
if(bp->hide==0) {
@@ -183,8 +193,8 @@ int select_all_exec(bContext *C, wmOperator *op)
if (action == SEL_TOGGLE) {
action = SEL_SELECT;
bp= lt->editlatt->def;
a= lt->editlatt->pntsu*lt->editlatt->pntsv*lt->editlatt->pntsw;
bp= lt->editlatt->latt->def;
a= lt->editlatt->latt->pntsu*lt->editlatt->latt->pntsv*lt->editlatt->latt->pntsw;
while(a--) {
if(bp->hide==0) {
@@ -205,8 +215,8 @@ int select_all_exec(bContext *C, wmOperator *op)
ED_setflagsLatt(obedit, 0);
break;
case SEL_INVERT:
bp= lt->editlatt->def;
a= lt->editlatt->pntsu*lt->editlatt->pntsv*lt->editlatt->pntsw;
bp= lt->editlatt->latt->def;
a= lt->editlatt->latt->pntsu*lt->editlatt->latt->pntsv*lt->editlatt->latt->pntsw;
while(a--) {
if(bp->hide==0) {
@@ -256,7 +266,7 @@ int make_regular_exec(bContext *C, wmOperator *op)
if(ob) {
lt= ob->data;
resizelattice(lt->editlatt, lt->pntsu, lt->pntsv, lt->pntsw, NULL);
resizelattice(lt->editlatt->latt, lt->pntsu, lt->pntsv, lt->pntsw, NULL);
}
else {
ob= CTX_data_active_object(C);
@@ -354,21 +364,21 @@ typedef struct UndoLattice {
static void undoLatt_to_editLatt(void *data, void *edata)
{
UndoLattice *ult= (UndoLattice*)data;
Lattice *editlatt= (Lattice *)edata;
int a= editlatt->pntsu*editlatt->pntsv*editlatt->pntsw;
EditLatt *editlatt= (EditLatt *)edata;
int a= editlatt->latt->pntsu*editlatt->latt->pntsv*editlatt->latt->pntsw;
memcpy(editlatt->def, ult->def, a*sizeof(BPoint));
memcpy(editlatt->latt->def, ult->def, a*sizeof(BPoint));
}
static void *editLatt_to_undoLatt(void *edata)
{
UndoLattice *ult= MEM_callocN(sizeof(UndoLattice), "UndoLattice");
Lattice *editlatt= (Lattice *)edata;
EditLatt *editlatt= (EditLatt *)edata;
ult->def= MEM_dupallocN(editlatt->def);
ult->pntsu= editlatt->pntsu;
ult->pntsv= editlatt->pntsv;
ult->pntsw= editlatt->pntsw;
ult->def= MEM_dupallocN(editlatt->latt->def);
ult->pntsu= editlatt->latt->pntsu;
ult->pntsv= editlatt->latt->pntsv;
ult->pntsw= editlatt->latt->pntsw;
return ult;
}
@@ -384,11 +394,11 @@ static void free_undoLatt(void *data)
static int validate_undoLatt(void *data, void *edata)
{
UndoLattice *ult= (UndoLattice*)data;
Lattice *editlatt= (Lattice *)edata;
EditLatt *editlatt= (EditLatt *)edata;
return (ult->pntsu == editlatt->pntsu &&
ult->pntsv == editlatt->pntsv &&
ult->pntsw == editlatt->pntsw);
return (ult->pntsu == editlatt->latt->pntsu &&
ult->pntsv == editlatt->latt->pntsv &&
ult->pntsw == editlatt->latt->pntsw);
}
static void *get_editlatt(bContext *C)

Some files were not shown because too many files have changed in this diff Show More