All pastes #22274 Raw Edit

Something

public python v1 · immutable
#22274 ·published 2005-09-07 05:21 UTC
rendered paste body
# fix shift+d duplication codeimport Blenderdef get_space_size():	size=Blender.BGL.Buffer(Blender.BGL.GL_FLOAT, 4)	Blender.BGL.glGetFloatv(Blender.BGL.GL_SCISSOR_BOX, size)	size= size.list 	return int(size[0]), int(size[1])def area_mouse_coords():	a = get_space_size()	b = Blender.Window.GetMouseCoords()	return b[0]-a[0], b[1]-a[1]class interface_handler:		current_sel = None	move = 0			def __init__(self):		self.bevent_num = 65536		self.objects = []		self.events = []		self.bevents = []		self.mevents = []		Blender.Draw.Register(self.draw,self.event)			def add_obj(self, obj):		self.objects.append(obj)			def rem_obj(self, obj):		self.objects.remove(obj)			def idx_obj(self, obj):		return self.objects.index(obj)		def draw(self):		for obj in self.objects:			obj.draw()		def add_event(self, event, callback):		self.events.append([event, callback])				def event(self, evt, val):		if val == 0:			for event in self.events:				if event[0] == evt:					event[1]()					if interface_handler.move:										#update block position if we are moving.			coords = area_mouse_coords()			interface_handler.current_sel.move(coords[0], coords[1])			Blender.Draw.Redraw()				if evt == Blender.Draw.LEFTMOUSE:			if interface_handler.move:									#if we are moving, then stop moving				interface_handler.move = 0				Blender.Draw.Redraw()				return None						if evt == Blender.Draw.RIGHTMOUSE:			if interface_handler.move:									#test if we are moving a block, if so, stop				interface_handler.move = 0				return None			interface_handler.current_sel = None						#if we click off a block, set no selection			coords = area_mouse_coords()			for obj in self.objects:				if obj.x < coords[0] < obj.x + obj.w and obj.y < coords[1] < obj.y + obj.h:			#check for selection					interface_handler.current_sel = obj					obj.sel = 1				else:					obj.sel = 0			Blender.Draw.Redraw()					if evt == Blender.Draw.MIDDLEMOUSE or (evt == Blender.Draw.GKEY and val == 0):			if interface_handler.current_sel:							#if there's a selected block start moving it													interface_handler.move = 1					if evt == Blender.Draw.ESCKEY and val==0:			if interface_handler.move:									#if we are moving a block stop				interface_handler.move = 0				Blender.Draw.Redraw()				return None				else:														#otherwise quit on user prompt				self.optional_quit()					if evt == Blender.Draw.AKEY and val==0:										if interface_handler.current_sel:							#if there is a block selected, deselect				interface_handler.current_sel.sel = 0				interface_handler.current_sel = None				Blender.Draw.Redraw()						if evt == Blender.Draw.XKEY and val==0:							#delete a block on user prompt			if self.pupmenu("OK?%t | Delete"):				self.rem_obj(interface_handler.current_sel)				interface_handler.current_sel = None				Blender.Draw.Redraw()		#does not work as of yet - duplication code				if evt == Blender.Draw.DKEY and val==0 and (Blender.Window.GetKeyQualifiers() & Blender.Window.Qual.SHIFT):			if interface_handler.current_sel:				self.add_obj(interface_handler.current_sel)				interface_handler.current_sel = tex_panel.instances[tex_panel.inst_count]				interface_handler.move = 1				Blender.Draw.Redraw()	def optional_quit(self):		menustr = "OK?%t| Quit"						if Blender.Draw.PupMenu(menustr) == 1:			Blender.Draw.Exit()					def pupmenu(self, menustr):		return Blender.Draw.PupMenu(menustr)					class tex_panel:		inst_count = -1	instances = []	def __init__(self, x=25, y=25, w=100, h=100):		tex_panel.inst_count += 1		tex_panel.instances.append(self)		self.ref = tex_panel.inst_count		self.x = x		self.y = y		self.h = h		self.w = w		self.sel = 0		self.input = raised_panel(x+1, y + 1, 16, 16,)		self.output = raised_panel(x + w - 17, y + 1, 16, 16)		self.props = raised_panel(x + 17, y + 1, w - 34, 16)		def move(self, x, y):		self.x = x		self.y = y		self.input.move(x + 1, y + 1)		self.output.move(x + self.w - 17, y + 1)		self.props.move(x + 17, y + 1)		def draw(self):			if self.sel:			Blender.BGL.glColor3f(0.9,0.0,0.0)			Blender.BGL.glRecti(self.x - 3, self.y - 3, self.x + self.w + 3, self.y + self.h + 3)			Blender.BGL.glColor3f(0.6,0.6,0.6)			Blender.BGL.glRecti(self.x - 1, self.y - 1, self.x + self.w + 1, self.y + self.h + 1)							Blender.BGL.glColor3f(0.3,0.3,0.3)		Blender.BGL.glRecti(self.x, self.y, self.x + self.w, self.y + self.h)		#light rect		Blender.BGL.glColor3f(0.7,0.7,0.7)		Blender.BGL.glRecti(self.x + 1, self.y, self.x + self.w, self.y + self.h - 1)		#main rect		Blender.BGL.glColor3f(0.5,0.5,0.5)		Blender.BGL.glRecti(self.x + 1, self.y + 1, self.x + self.w - 1, self.y + self.h - 1)				self.input.draw()		self.output.draw()		self.props.draw()		class raised_panel:	def __init__(self, x, y, width, height):				self.x = x		self.y = y		self.h = height		self.w = width		self.sel = 0		def move(self, x, y):		self.x = x		self.y = y		def draw(self):			if self.sel:			Blender.BGL.glColor3f(0.9,0.0,0.0)			Blender.BGL.glRecti(self.x - 3, self.y - 3, self.x + self.w + 3, self.y + self.h + 3)			Blender.BGL.glColor3f(0.6,0.6,0.6)			Blender.BGL.glRecti(self.x - 1, self.y - 1, self.x + self.w + 1, self.y + self.h + 1)							Blender.BGL.glColor3f(0.7,0.7,0.7)		Blender.BGL.glRecti(self.x, self.y, self.x + self.w, self.y + self.h)		#light rect		Blender.BGL.glColor3f(0.4,0.4,0.4)		Blender.BGL.glRecti(self.x + 1, self.y, self.x + self.w, self.y + self.h - 1)		#main rect		Blender.BGL.glColor3f(0.6,0.6,0.6)		Blender.BGL.glRecti(self.x + 1, self.y + 1, self.x + self.w - 1, self.y + self.h - 1)		panel = tex_panel()panel2 = tex_panel(150,150)panel3 = tex_panel(200,0)ui = interface_handler()ui.add_obj(panel)ui.add_obj(panel2)ui.add_obj(panel3)ui.add_event(Blender.Draw.QKEY, Blender.Draw.Exit)