J'avais fait un truc du genre aussi. On pourrait l'améliorer en permettant de sélectionner plusieurs "ouvertures".
Il y a aussi un script pour "retourner" la lumière si l'axe Z n'est pas dans le bon sens. (pas facile de déterminer le bon sens en fait)
areaLight.zip
Le fichier est à dézipper dans le répertoire script. Le code est commenté. Il y a même des undo. (je devais être en forme ce jour là)
Pas certain que le code soit optimisé, ça remonte à pas mal de temps maintenant.
Et en cadeaux bonux, un script pour créer et placer une lumière à l'endroit où se trouve la camera actuellement et orienté de la même façon. En appuyant sur les touches shift, alt, ctrl on peut créer les différentes lumière.
Code:
import c4d
from c4d import gui
#Welcome to the world of Python
def main():
msg = c4d.BaseContainer()
lightTtype = 0
c4d.gui.GetInputState(c4d.BFM_INPUT_KEYBOARD, c4d.BFM_INPUT_CHANNEL, msg)
if msg.GetLong(c4d.BFM_INPUT_QUALIFIER) & c4d.QCTRL:
lightTtype = 1
if msg.GetLong(c4d.BFM_INPUT_QUALIFIER) & c4d.QSHIFT:
lightTtype = 8
if msg.GetLong(c4d.BFM_INPUT_QUALIFIER) & c4d.QALT:
lightTtype = 3
doc = c4d.documents.GetActiveDocument()
bd = doc.GetActiveBaseDraw()
camMatrix = bd.GetMg()
doc.StartUndo()
light = c4d.BaseObject(c4d.Olight)
doc.InsertObject(light)
doc.AddUndo(c4d.UNDOTYPE_NEW, light)
doc.AddUndo(c4d.UNDOTYPE_CHANGE, light)
light.SetMg(camMatrix)
doc.AddUndo(c4d.UNDOTYPE_CHANGE,light)
light[c4d.LIGHT_TYPE]=lightTtype
doc.SetActiveObject(light)
doc.EndUndo()
c4d.EventAdd()
if __name__=='__main__':
main()