c31d25dd01
You can choose between errors, warning, info or full debug, errors will always log to ensure we don't have silent failures with debug on or off.
67 lines
1.9 KiB
Python
67 lines
1.9 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Copyright 2014 MMD Tools authors
|
|
# This file is part of MMD Tools.
|
|
|
|
import bpy
|
|
|
|
from ..bpyutils import FnContext, Props
|
|
|
|
|
|
class MMDLamp:
|
|
def __init__(self, obj):
|
|
if MMDLamp.isLamp(obj):
|
|
obj = obj.parent
|
|
if obj and obj.type == "EMPTY" and obj.mmd_type == "LIGHT":
|
|
self.__emptyObj = obj
|
|
else:
|
|
raise ValueError("%s is not MMDLamp" % str(obj))
|
|
|
|
@staticmethod
|
|
def isLamp(obj):
|
|
return obj and obj.type in {"LIGHT", "LAMP"}
|
|
|
|
@staticmethod
|
|
def isMMDLamp(obj):
|
|
if MMDLamp.isLamp(obj):
|
|
obj = obj.parent
|
|
return obj and obj.type == "EMPTY" and obj.mmd_type == "LIGHT"
|
|
|
|
@staticmethod
|
|
def convertToMMDLamp(lampObj, scale=1.0):
|
|
if MMDLamp.isMMDLamp(lampObj):
|
|
return MMDLamp(lampObj)
|
|
|
|
empty = bpy.data.objects.new(name="MMD_Light", object_data=None)
|
|
FnContext.link_object(FnContext.ensure_context(), empty)
|
|
|
|
empty.rotation_mode = "XYZ"
|
|
empty.lock_rotation = (True, True, True)
|
|
setattr(empty, Props.empty_display_size, 0.4)
|
|
empty.scale = [10 * scale] * 3
|
|
empty.mmd_type = "LIGHT"
|
|
empty.location = (0, 0, 11 * scale)
|
|
|
|
lampObj.parent = empty
|
|
lampObj.data.color = (0.602, 0.602, 0.602)
|
|
lampObj.location = (0.5, -0.5, 1.0)
|
|
lampObj.rotation_mode = "XYZ"
|
|
lampObj.rotation_euler = (0, 0, 0)
|
|
lampObj.lock_rotation = (True, True, True)
|
|
|
|
constraint = lampObj.constraints.new(type="TRACK_TO")
|
|
constraint.name = "mmd_lamp_track"
|
|
constraint.target = empty
|
|
constraint.track_axis = "TRACK_NEGATIVE_Z"
|
|
constraint.up_axis = "UP_Y"
|
|
|
|
return MMDLamp(empty)
|
|
|
|
def object(self):
|
|
return self.__emptyObj
|
|
|
|
def lamp(self):
|
|
for i in self.__emptyObj.children:
|
|
if MMDLamp.isLamp(i):
|
|
return i
|
|
raise KeyError
|