io_scene_3ds: Added pivot origin option and fixed camera and light ranges #104818
@ -1137,14 +1137,14 @@ def process_next_chunk(context, file, previous_chunk, imported_objects, CONSTRAI
|
|||||||
contextLamp.data.use_shadow = False
|
contextLamp.data.use_shadow = False
|
||||||
spot = mathutils.Vector(read_float_array(new_chunk)) # Spot location
|
spot = mathutils.Vector(read_float_array(new_chunk)) # Spot location
|
||||||
aim = calc_target(contextLamp.location, spot) # Target
|
aim = calc_target(contextLamp.location, spot) # Target
|
||||||
contextLamp.rotation_euler[0] = aim[0]
|
contextLamp.rotation_euler.x = aim[0]
|
||||||
contextLamp.rotation_euler[2] = aim[1]
|
contextLamp.rotation_euler.z = aim[1]
|
||||||
hotspot = read_float(new_chunk) # Hotspot
|
hotspot = read_float(new_chunk) # Hotspot
|
||||||
beam_angle = read_float(new_chunk) # Beam angle
|
beam_angle = read_float(new_chunk) # Beam angle
|
||||||
contextLamp.data.spot_size = math.radians(beam_angle)
|
contextLamp.data.spot_size = math.radians(beam_angle)
|
||||||
contextLamp.data.spot_blend = 1.0 - (hotspot / beam_angle)
|
contextLamp.data.spot_blend = 1.0 - (hotspot / beam_angle)
|
||||||
elif CreateLightObject and new_chunk.ID == LIGHT_SPOT_ROLL: # Roll
|
elif CreateLightObject and new_chunk.ID == LIGHT_SPOT_ROLL: # Roll
|
||||||
contextLamp.rotation_euler[1] = read_float(new_chunk)
|
contextLamp.rotation_euler.y = read_float(new_chunk)
|
||||||
elif CreateLightObject and new_chunk.ID == LIGHT_SPOT_SHADOWED: # Shadow flag
|
elif CreateLightObject and new_chunk.ID == LIGHT_SPOT_SHADOWED: # Shadow flag
|
||||||
contextLamp.data.use_shadow = True
|
contextLamp.data.use_shadow = True
|
||||||
elif CreateLightObject and new_chunk.ID == LIGHT_LOCAL_SHADOW2: # Shadow parameters
|
elif CreateLightObject and new_chunk.ID == LIGHT_LOCAL_SHADOW2: # Shadow parameters
|
||||||
@ -1195,9 +1195,9 @@ def process_next_chunk(context, file, previous_chunk, imported_objects, CONSTRAI
|
|||||||
contextCamera.location = read_float_array(new_chunk) # Position
|
contextCamera.location = read_float_array(new_chunk) # Position
|
||||||
focus = mathutils.Vector(read_float_array(new_chunk))
|
focus = mathutils.Vector(read_float_array(new_chunk))
|
||||||
direction = calc_target(contextCamera.location, focus) # Target
|
direction = calc_target(contextCamera.location, focus) # Target
|
||||||
contextCamera.rotation_euler[0] = direction[0]
|
contextCamera.rotation_euler.x = direction[0]
|
||||||
contextCamera.rotation_euler[1] = read_float(new_chunk) # Roll
|
contextCamera.rotation_euler.y = read_float(new_chunk) # Roll
|
||||||
contextCamera.rotation_euler[2] = direction[1]
|
contextCamera.rotation_euler.z = direction[1]
|
||||||
contextCamera.data.lens = read_float(new_chunk) # Focal length
|
contextCamera.data.lens = read_float(new_chunk) # Focal length
|
||||||
contextMatrix = None # Reset matrix
|
contextMatrix = None # Reset matrix
|
||||||
elif CreateCameraObject and new_chunk.ID == OBJECT_HIERARCHY: # Hierarchy
|
elif CreateCameraObject and new_chunk.ID == OBJECT_HIERARCHY: # Hierarchy
|
||||||
@ -1371,8 +1371,8 @@ def process_next_chunk(context, file, previous_chunk, imported_objects, CONSTRAI
|
|||||||
location = child.location
|
location = child.location
|
||||||
target = mathutils.Vector(read_track_data(new_chunk)[0])
|
target = mathutils.Vector(read_track_data(new_chunk)[0])
|
||||||
direction = calc_target(location, target)
|
direction = calc_target(location, target)
|
||||||
child.rotation_euler[0] = direction[0]
|
child.rotation_euler.x = direction[0]
|
||||||
child.rotation_euler[2] = direction[1]
|
child.rotation_euler.z = direction[1]
|
||||||
for keydata in keyframe_data.items():
|
for keydata in keyframe_data.items():
|
||||||
track = trackposition.get(keydata[0], child.location)
|
track = trackposition.get(keydata[0], child.location)
|
||||||
locate = mathutils.Vector(track)
|
locate = mathutils.Vector(track)
|
||||||
@ -1404,8 +1404,6 @@ def process_next_chunk(context, file, previous_chunk, imported_objects, CONSTRAI
|
|||||||
child.lock_rotation[1] = True
|
child.lock_rotation[1] = True
|
||||||
if tflags & 0x20: # Flag 0x20 locks Z axis
|
if tflags & 0x20: # Flag 0x20 locks Z axis
|
||||||
child.lock_rotation[2] = True
|
child.lock_rotation[2] = True
|
||||||
if nkeys == 0:
|
|
||||||
keyframe_rotation[0] = child.rotation_axis_angle[:]
|
|
||||||
for i in range(nkeys):
|
for i in range(nkeys):
|
||||||
nframe = read_long(new_chunk)
|
nframe = read_long(new_chunk)
|
||||||
nflags = read_short(new_chunk)
|
nflags = read_short(new_chunk)
|
||||||
@ -1452,10 +1450,10 @@ def process_next_chunk(context, file, previous_chunk, imported_objects, CONSTRAI
|
|||||||
|
|
||||||
elif KEYFRAME and new_chunk.ID == ROLL_TRACK_TAG and tracktype == 'OBJECT': # Roll angle
|
elif KEYFRAME and new_chunk.ID == ROLL_TRACK_TAG and tracktype == 'OBJECT': # Roll angle
|
||||||
keyframe_angle = {}
|
keyframe_angle = {}
|
||||||
default_value = child.rotation_euler[1]
|
default_value = child.rotation_euler.y
|
||||||
child.rotation_euler[1] = read_track_angle(new_chunk)[0]
|
child.rotation_euler.y = read_track_angle(new_chunk)[0]
|
||||||
for keydata in keyframe_angle.items():
|
for keydata in keyframe_angle.items():
|
||||||
child.rotation_euler[1] = keydata[1]
|
child.rotation_euler.y = keydata[1]
|
||||||
if hierarchy == ROOT_OBJECT:
|
if hierarchy == ROOT_OBJECT:
|
||||||
child.rotation_euler.rotate(CONVERSE)
|
child.rotation_euler.rotate(CONVERSE)
|
||||||
child.keyframe_insert(data_path="rotation_euler", index=1, frame=keydata[0])
|
child.keyframe_insert(data_path="rotation_euler", index=1, frame=keydata[0])
|
||||||
|
Loading…
Reference in New Issue
Block a user