All pastes #14035 Raw Edit

timmeh

public python v1 · immutable
#14035 ·published 2005-06-12 10:59 UTC
rendered paste body
#!BPY"""Name: 'FlashGen'Blender: 237Group: 'Animation'Tip: 'Creates flashing lights replicating lightning'"""import sysimport Blenderimport mathfrom Blender import Draw, BGL, Window, Ipo, Object, Lamp, Mathutilsfrom Blender.BGL import *EVENT_radius = 10EVENT_floor = 11EVENT_ceiling = 12EVENT_intensity_fallOff = 13EVENT_light_fallOff = 14EVENT_max_intensity = 15EVENT_strike_frequency = 16EVENT_secondaryStrike_max = 17EVENT_secondaryStrike_time = 18EVENT_secondaryStrike_fallOff = 19EVENT_start_frame = 20EVENT_end_frame = 21EVENT_startFlash = 22EVENT_exit = 23EVENT_Text = 24EVENT_create_emitter = 25Object_radius = Draw.Create(0.0)Object_floor = Draw.Create(0.0)Object_ceiling = Draw.Create(0.0)Object_intensity_fallOff = Draw.Create(0.0)Object_light_fallOff = Draw.Create(0.0)Object_max_intensity = Draw.Create(0.0)Object_strike_frequency = Draw.Create(0.0)Object_secondaryStrike_max = Draw.Create(0.0)Object_secondaryStrike_time = Draw.Create(0.0)Object_secondaryStrike_fallOff = Draw.Create(0.0)Object_start_frame = Draw.Create(0.0)Object_end_frame = Draw.Create(0.0)Object_startFlash = Draw.Create(0.0)Object_exit = Draw.Create(0.0)Object_Text = Draw.Create("")def draw():	global EVENT_radius	global EVENT_floor	global EVENT_ceiling	global EVENT_intensity_fallOff	global EVENT_light_fallOff	global EVENT_max_intensity	global EVENT_strike_frequency	global EVENT_secondaryStrike_max	global EVENT_secondaryStrike_time	global EVENT_secondaryStrike_fallOff	global EVENT_start_frame	global EVENT_end_frame	global EVENT_startFlash	global EVENT_exit	global EVENT_Text	global EVENT_create_emitter	global Object_radius	global Object_floor	global Object_ceiling	global Object_intensity_fallOff	global Object_light_fallOff	global Object_max_intensity	global Object_strike_frequency	global Object_secondaryStrike_max	global Object_secondaryStrike_time	global Object_secondaryStrike_fallOff	global Object_start_frame	global Object_end_frame	global Object_startFlash	global Object_exit	global Object_Text	global Object_create_emitter	BGL.glClearColor(0.500000, 0.500000, 0.500000, 0.0)	BGL.glClear(GL_COLOR_BUFFER_BIT)	BGL.glColor3f(0.000000, 0.000000, 0.000000)	Object_radius = Draw.Slider("Rig Radius", EVENT_radius, 24, 368, 300, 20, Object_radius.val, 0.000000, 300.000000, 1, "the radius of the circle from which flashes will be generated")	Object_floor = Draw.Slider("Rig Floor", EVENT_floor, 24, 344, 300, 20, Object_floor.val, 0.000000, 300.000000, 1, "the lowest height flashes will be generated from")	Object_ceiling = Draw.Slider("Rig Ceiling", EVENT_ceiling, 24, 320, 300, 20, Object_ceiling.val, 0.000000, 300.000000, 1, "the maximum height from which flashes will be generated")	Object_intensity_fallOff = Draw.Slider("Height Intensity Falloff", EVENT_intensity_fallOff, 24, 288, 300, 20, Object_intensity_fallOff.val, 0.000000, 1.000000, 1, "intensity variance between floor and ceiling")	Object_light_fallOff = Draw.Slider("Light FallOff Speed", EVENT_light_fallOff, 24, 264, 300, 20, Object_light_fallOff.val, 0.000000, 100.000000, 1, "the number of frames it takes for the flash intensity to drop to zero")	Object_max_intensity = Draw.Slider("Primary Strike Intensity", EVENT_max_intensity, 24, 232, 300, 20, Object_max_intensity.val, 0.000000, 10.000000, 1, "maximum lamp energy for primary flashes")	Object_strike_frequency = Draw.Slider("Primary Strike Frequency", EVENT_strike_frequency, 24, 208, 300, 20, Object_strike_frequency.val, 0.1, 500.000000, 1, "number of frames between primary flashes")	Object_secondaryStrike_max = Draw.Slider("Secondary Strike Max.", EVENT_secondaryStrike_max, 24, 176, 300, 20, Object_secondaryStrike_max.val, 0.000000, 500.000000, 1, "the maximum number of secondary flashes between primary flashes")	Object_secondaryStrike_time = Draw.Slider("Secondary Strike Inter.", EVENT_secondaryStrike_time, 24, 152, 300, 20, Object_secondaryStrike_time.val, 0.000000, 500.000000, 1, "the maximum number of frames between secondary flashes")	Object_secondaryStrike_fallOff = Draw.Slider("Secondary Light Int.", EVENT_secondaryStrike_fallOff, 24, 128, 300, 20, Object_secondaryStrike_fallOff.val, 0.000000, 1.000000, 1, "the maximum intensity of the secondary flashes with respect to primary flashes")	Object_start_frame = Draw.Number("Start frame", EVENT_start_frame, 24, 96, 300, 20, Object_start_frame.val, 0.000000, 1024.000000, "starting frame")	Object_end_frame = Draw.Number("End Frame", EVENT_end_frame, 24, 72, 300, 20, Object_end_frame.val, 0.000000, 1024.000000, "ending frame")	Object_startFlash = Draw.Button("Generate", EVENT_startFlash, 24, 40, 148, 20, "create ipos")	Object_exit = Draw.Button("Exit", EVENT_exit, 176, 40, 148, 20, "stop execution")	BGL.glRasterPos2i(24, 400)	Object_Text = Draw.Text("Timmeh's Lightning Flash Generator")	Object_create_emitter = Draw.Button("Create Emitter", EVENT_create_emitter, 24, 16, 148, 20, "Create lamp for flashes to come from")def event(event, value):	if event == Draw.ESCKEY and not value: Draw.Exit()def b_event(event):	global EVENT_radius	global EVENT_floor	global EVENT_ceiling	global EVENT_intensity_fallOff	global EVENT_light_fallOff	global EVENT_max_intensity	global EVENT_strike_frequency	global EVENT_secondaryStrike_max	global EVENT_secondaryStrike_time	global EVENT_secondaryStrike_fallOff	global EVENT_start_frame	global EVENT_end_frame	global EVENT_startFlash	global EVENT_exit	global EVENT_Text	global EVENT_create_emitter	global Object_radius	global Object_floor	global Object_ceiling	global Object_intensity_fallOff	global Object_light_fallOff	global Object_max_intensity	global Object_strike_frequency	global Object_secondaryStrike_max	global Object_secondaryStrike_time	global Object_secondaryStrike_fallOff	global Object_start_frame	global Object_end_frame	global Object_startFlash	global Object_exit	global Object_Text	global Object_create_emitter	if event == 0: pass	elif event == EVENT_startFlash:		startFlash(Object_radius.val, Object_floor.val, Object_ceiling.val, Object_light_fallOff.val, Object_intensity_fallOff.val, Object_max_intensity.val, Object_secondaryStrike_max.val, Object_secondaryStrike_fallOff.val, Object_secondaryStrike_time.val, Object_strike_frequency.val, Object_start_frame.val, Object_end_frame.val)		name = "Reminder%t|Remember to assign Lamp Ipo to Emitter" 		result = Draw.PupMenu(name)	elif event == EVENT_exit:		Draw.Exit()	elif event == EVENT_create_emitter:		pass		#createEmitter()				Draw.Draw()	Draw.Register(draw, event, b_event)		def startFlash(radius, floor, ceiling, light_fallOff, height_fallOff, max_intensity, secondaryStrike_max, secondaryStrike_fallOff, secondaryStrike_time, strike_frequency, start_frame, end_frame):		rnd = Mathutils.Rand	#print radius	#radius = Object_radius.val	#floor = Object_floor.val	#ceiling = Object_ceiling.val	#light_fallOff = Object_light_fallOff.val	#height_falloff = Object_intensity_fallOff.val	#max_intensity = Object_max_intensity.val	#secondaryStrike_max = Object_secondaryStrike_max.val	#secondaryStrike_fallOff = Object_secondaryStrike_fallOff.val	#secondaryStrike_time = Object_secondaryStrike_time.val	#strike_frequency = Object_strike_frequency.val	#start_frame = Object_start_frame.val	#end_frame = Object_end_frame.val	height_range = ceiling - floor	frame_range = end_frame - start_frame		emit = Lamp.New("Spot")	emit.setDist(radius * 2)	emit.col[0] = 0.8	emit.col[1] = 0.8	emit.col[2] = 1.0	emit.setSpotSize(90)	emitter = Object.New("Lamp")	emitter.link(emit)	Blender.Scene.GetCurrent().link(emitter)	tracker = Object.New("Empty")	Blender.Scene.GetCurrent().link(tracker)		objIpo = Ipo.New("Object","EmitObj")	lampIpo = Ipo.New("Lamp","EmitLamp")		xIpo = objIpo.addCurve("LocX")	yIpo = objIpo.addCurve("LocY")	zIpo = objIpo.addCurve("LocZ")		energyIpo = lampIpo.addCurve("Energ")	energyIpo.setInterpolation("Linear")	number_majorStrikes = int(frame_range / strike_frequency)		for strike in range(number_majorStrikes):		frame = int(rnd() * frame_range + start_frame)		intensity = rnd() * (max_intensity * secondaryStrike_fallOff) + (max_intensity * secondaryStrike_fallOff)		direction = int(rnd() * 2 * math.pi)		height = rnd() * height_range + floor		x = radius * math.cos(direction)		y = radius * math.sin(direction)		xIpo.addBezier((frame,x))		yIpo.addBezier((frame,y))		zIpo.addBezier((frame,height))		energyIpo.addBezier((frame-1,0))		energyIpo.addBezier((frame,intensity))		energyIpo.addBezier((frame + light_fallOff,0))		sec_strikes = int(rnd() * secondaryStrike_max)		for sec in range(sec_strikes):			sec_frame = frame + int(rnd() * secondaryStrike_time)			intensity = rnd() * max_intensity * secondaryStrike_fallOff			direction = int(rnd() * 2 * math.pi)			x = radius * math.cos(direction)			y = radius * math.sin(direction)			height = rnd() * height_range + floor				xIpo.addBezier((sec_frame,x))			yIpo.addBezier((sec_frame,y))			zIpo.addBezier((sec_frame,height))			energyIpo.addBezier((sec_frame-1,0))			energyIpo.addBezier((sec_frame,intensity))			energyIpo.addBezier((sec_frame + light_fallOff,0))				try:		emitter.setIpo(objIpo)	except:		sys.exc_clear()		Draw.Exit()	# emitter.getData().setIpo(lampIpo) # currently a bug in blender		Blender.Redraw()