All pastes #22297 Raw Edit

timmeh

public python v1 · immutable
#22297 ·published 2005-09-07 14:12 UTC
rendered paste body
# fix shift+d duplication codeimport Blenderimport Generatordef 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 and val==0:			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()			min_dist = 80			for obj in self.objects:				obj.sel = 0				dist = ((obj.cx - coords[0])**2 + (obj.cy - coords[1])**2) ** 0.5				if dist < min_dist and min_dist==80:					min_dist = dist					interface_handler.current_sel = obj					interface_handler.current_sel.sel = 1													Blender.Draw.Redraw()					if evt == Blender.Draw.MIDDLEMOUSE or (evt == Blender.Draw.GKEY and val == 0):			if interface_handler.move:				interface_handler.move = 0				return 0			if interface_handler.current_sel:							#if there's a selected block start moving it													interface_handler.move = 1				coords = area_mouse_coords()				interface_handler.current_sel.mx = coords[0]				interface_handler.current_sel.my = coords[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.move:				interface_handler.move = 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:			if not interface_handler.current_sel:						#delete a block on user prompt				return 0			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.mx = 0		self.my = 0		self.cx = x + w/2		self.cy = y + h/2		self.sel = 0		self.input = tex_button(x+1, y + 1, 16, 16,)		self.output = tex_button(x + w - 17, y + 1, 16, 16)		self.props = tex_button(x + 17, y + 1, w - 34, 16)		def check_inp(self, coords):		if self.input.x < coords[0] < self.input.x + 16 and self.input.y < coords[1] < self.input.y + 16:			return 1		else:			return 0			def check_out(self, coords):		if self.output.x < coords[0] < self.output.x + 16 and self.output.y < coords[1] < self.output.y + 16:			return 1		else:			return 0			def check_props(self, coords):		if self.props.x < coords[0] < self.props.x + self.w and self.props.y < coords[1] < self.props.y + 16:			return 1		else:			return 0						def move(self, x, y):		a = x - self.mx		b = y - self.my		self.mx = x		self.my = y		self.x += a		self.y += b		self.cx = self.x + self.w/2		self.cy = self.y + self.h/2		self.input.move(self.x + 1, self.y + 1)		self.output.move(self.x + self.w - 17, self.y + 1)		self.props.move(self.x + 17, self.y + 1)		def draw(self):			if self.sel:			Blender.BGL.glColor3f(0.9,0.0,0.0)		else:			Blender.BGL.glColor3f(0.3,0.3,0.3)				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()		Blender.BGL.glColor3f(0.3,0.3,0.3)		Blender.BGL.glBegin(Blender.BGL.GL_POLYGON)		Blender.BGL.glVertex2i(self.x + 12, self.y + 4)		Blender.BGL.glVertex2i(self.x + 12, self.y + 14)		Blender.BGL.glVertex2i(self.x + 4, self.y + 9)		Blender.BGL.glEnd()				Blender.BGL.glBegin(Blender.BGL.GL_POLYGON)		Blender.BGL.glVertex2i(self.x + self.w - 12, self.y + 4)		Blender.BGL.glVertex2i(self.x + self.w - 12, self.y + 14)		Blender.BGL.glVertex2i(self.x + self.w - 4, self.y + 9)		Blender.BGL.glEnd()		class tex_button:	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)		class connector:		def __init__(self, input, output):		self.inp = input		self.out = out		self.points = []			def draw(self):		if len(self.points):			passpanel = 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)