示例#1
0
	def __init__(self, parent, layerName, frame): #, log, frame
		ogl.ShapeCanvas.__init__(self, parent)
		Deca.Layer.__init__(self, Deca.world, layerName)

		self.log = wx.GetApp().GetLog()
		self.frame = frame
		self.Selection = []
		self._scripts = {}
		self.last_x = self.last_y = 0

		wid = 200
		hei = 200
		if '@view' in self.storage.graph_data.keys():
			wid = self.storage.graph_data['@view'].width
			hei = self.storage.graph_data['@view'].height
		else:
			shi = DecaShape('@view')
			shi.Tag = '@view'
			shi.width = wid
			shi.height = hei
			shi.scale = 1.0
			self.storage.graph_data['@view'] = shi
		sc = getattr(self.storage.graph_data['@view'], 'scale', 1.0)
		self.SetViewSize(wid, hei)
		self.SetScale(sc, sc)

		self.SetBackgroundColour(wx.WHITE) #"LIGHT BLUE") #
		self.diagram = ogl.Diagram()
		self.SetDiagram(self.diagram)
		self.diagram.SetCanvas(self)
		self.shapes = {}
		self.pen = wx.Pen(wx.BLACK)
		self.brush = wx.Brush(wx.BLACK)
		obj_len = len(self.storage.graph_data)
		if obj_len > 1000:
			wxres = wx.MessageBox(_("View contains of %i objects? It may take awhile to draw them all.\nAre you sure to draw objects?") % obj_len,
			                      _("Sampo Framework"), wx.YES_NO|wx.ICON_QUESTION)
		else:
			wxres = wx.ID_YES
		if wxres == wx.ID_YES:
			# add objects
			self.Freeze()
			self.diagram.SetQuickEditMode(True)
			obj_curr = 2
			frame.SetStatus(_("Draw elements"))
			frame.SetStatusProgressRange(obj_len)
			self.RebuildDrawing()
			# for oid, shp in self.storage.graph_data.items():
			# 	if getattr(shp, 'Tag') == 'object':
			# 		s = self.AddObjectShape(self.storage.objects[oid], shp.xpos, shp.ypos, shp)
			# 		s.SetPen(CreatePen(getattr(shp, 'pen', ()), self.pen))
			# 		s.SetBrush(CreateBrush(getattr(shp, 'brush', ()), self.brush))
			# 		s.SetWidth(shp.width)
			# 		s.SetHeight(shp.height)
			# 		obj_curr += 1
			# 		frame.SetStatusProgress(obj_curr)
			# 		wx.Yield()
			# #add links
			# for oid, shp in self.storage.graph_data.items():
			# 	if getattr(shp, 'Tag') == 'link':
			# 		lnk = self.GetLinks(lambda ln: ln.StartObject == shp.start and ln.FinishObject == shp.finish)
			# 		if len(lnk) > 0:
			# 			#lnk = lnk[0]
			# 			lnk = self.AddLinkShape(lnk[0], shp)
			# 			lnk.SetPen(CreatePen(getattr(shp, 'pen', ()), self.pen))
			# 			lnk.SetBrush(CreateBrush(getattr(shp, 'brush', ()), self.brush))
			# 			obj_curr += 1
			# 			frame.SetStatusProgress(obj_curr)
			# 			wx.Yield()
			self.diagram.SetQuickEditMode(False)
			frame.SetStatus(_("Ready"))
			self.Thaw()
		# objects redraw done
		self.Bind(wx.EVT_MENU, self.OnScript)
		#self.Bind(wx.EVT_MOUSEWHEEL, self.OnWheel)
		wx.CallAfter(self.Update)