Exemple #1
0
 def __init__(self, border):
     self.border = border
     sf.VertexArray.__init__(self, sf.PrimitiveType.LINES_STRIP, 4)
     self[1].position = border.lines[1][0]
     self[2].position = border.lines[1][1]
     for i in [0, 1, 2, 3]:
         self[i].color = sf.Color.BLACK
     self.vertCircle = SFCircle(oc=sf.Color.RED, ic=sf.Color.TRANSPARENT)
Exemple #2
0
class SFObjects(sf.Drawable):
    def __init__(self, polies, verts):
        sf.Drawable.__init__(self)
        self.polies = polies
        self.verts = verts
        P = [poly.centroid for poly in polies]
        self.sfPolies = {
            tuple(P[i]): SFPoly(polies[i], verts)
            for i in range(len(polies))
        }
        self.clickedAt = self.selectPoly
        self.selectedPoly = None
        self.vertCirc = SFCircle(oc=sf.Color.TRANSPARENT,
                                 ic=sf.Color(0, 0, 255, 128))
        self.pc = 0
        self.text = Text()

    def setScale(self, scale):
        self.vertCirc.setScale(2.5 * scale)
        self.text.ratio = scale, scale
        #if self.selectedPoly:
        #	self.selectedPoly.setScale(scale)

    def updateRays(self, corners):
        pass
        #for c in self.sfPolies: self.sfPolies[c].updateRays(corners)

    def draw(self, target, states):
        if self.selectedPoly:
            self.selectedPoly.draw(target, states, True)
        for c in self.sfPolies:
            sfPoly = self.sfPolies[c]
            if sfPoly != self.selectedPoly:
                sfPoly.draw(target, states)

        pc = 0
        for p in self.verts:
            if pointInPoly(p, self.quadCorners): pc += 1
            self.vertCirc.draw(target, states, p)
        if pc != self.pc:
            self.text.string = ('%i vert%s' %
                                (pc, 's' if pc != 1 else '')).rjust(10)
            self.pc = pc

        self.text.position = self.quadCorners[0]
        self.text.rotation = target.view.rotation
        target.draw(self.text)
        #self.text.draw(target,states)

    def selectPoly(self, p):
        dists = {mDist(p, c): self.sfPolies[c] for c in self.sfPolies}
        self.selectedPoly = dists[min(dists.keys())]
Exemple #3
0
 def __init__(self, polies, verts):
     sf.Drawable.__init__(self)
     self.polies = polies
     self.verts = verts
     P = [poly.centroid for poly in polies]
     self.sfPolies = {
         tuple(P[i]): SFPoly(polies[i], verts)
         for i in range(len(polies))
     }
     self.clickedAt = self.selectPoly
     self.selectedPoly = None
     self.vertCirc = SFCircle(oc=sf.Color.TRANSPARENT,
                              ic=sf.Color(0, 0, 255, 128))
     self.pc = 0
     self.text = Text()
Exemple #4
0
	def __init__(self, border):
		self.border= border
		sf.VertexArray.__init__(self, sf.PrimitiveType.LINES_STRIP,4 )
		self[1].position= border.lines[1][0]
		self[2].position= border.lines[1][1]
		for i in [0,1,2,3]: self[i].color= sf.Color.BLACK
		self.vertCircle= SFCircle( oc=sf.Color.RED , ic=sf.Color.TRANSPARENT )
Exemple #5
0
class SFObjects(sf.Drawable):
	def __init__(self, polies,verts):
		sf.Drawable.__init__(self)
		self.polies= polies
		self.verts= verts
		P= [poly.centroid for poly in polies]
		self.sfPolies= { tuple(P[i]):SFPoly(polies[i],verts) for i in range(len(polies)) }
		self.clickedAt= self.selectPoly
		self.selectedPoly=None
		self.vertCirc= SFCircle( oc=sf.Color.TRANSPARENT , ic=sf.Color(0,0,255,128) )
		self.pc=0
		self.text=Text()

	def setScale(self,scale):
		self.vertCirc.setScale(2.5*scale)
		self.text.ratio=scale,scale
		#if self.selectedPoly:
		#	self.selectedPoly.setScale(scale)

	def updateRays(self, corners):
		pass
		#for c in self.sfPolies: self.sfPolies[c].updateRays(corners)

	def draw(self, target,states):
		if self.selectedPoly:
			self.selectedPoly.draw(target, states, True)
		for c in self.sfPolies:
			sfPoly= self.sfPolies[c]
			if sfPoly!=self.selectedPoly:
				sfPoly.draw(target, states)

		pc= 0
		for p in self.verts:
			if pointInPoly(p,self.quadCorners): pc+=1
			self.vertCirc.draw(target,states,p)
		if pc != self.pc:
			self.text.string= ('%i vert%s'%(pc,'s' if pc!=1 else '')).rjust(10)
			self.pc=pc

		self.text.position= self.quadCorners[0]
		self.text.rotation= target.view.rotation
		target.draw(self.text)
		#self.text.draw(target,states)

	def selectPoly(self, p):
		dists = {mDist(p,c):self.sfPolies[c] for c in self.sfPolies}
		self.selectedPoly = dists[min(dists.keys())]
Exemple #6
0
class _SFBorder(sf.VertexArray):
	def __init__(self, border):
		self.border= border
		sf.VertexArray.__init__(self, sf.PrimitiveType.LINES_STRIP,4 )
		self[1].position= border.lines[1][0]
		self[2].position= border.lines[1][1]
		for i in [0,1,2,3]: self[i].color= sf.Color.BLACK
		self.vertCircle= SFCircle( oc=sf.Color.RED , ic=sf.Color.TRANSPARENT )
	def updateRays(self, corners):
		p0= ScreenEdgeIntersect(corners, self[1].position,-self.border.axis)
		p3= ScreenEdgeIntersect(corners, self[2].position, self.border.axis)
		if p0: self[0].position= p0
		if p3: self[3].position= p3
	def setScale(self,scale):
		self.vertCircle.setScale(scale)
	def draw(self, target,states):
		target.draw(self,states)
		for p in self.border.verts:
			self.vertCircle.draw(target,states,p)
Exemple #7
0
	def __init__(self, polies,verts):
		sf.Drawable.__init__(self)
		self.polies= polies
		self.verts= verts
		P= [poly.centroid for poly in polies]
		self.sfPolies= { tuple(P[i]):SFPoly(polies[i],verts) for i in range(len(polies)) }
		self.clickedAt= self.selectPoly
		self.selectedPoly=None
		self.vertCirc= SFCircle( oc=sf.Color.TRANSPARENT , ic=sf.Color(0,0,255,128) )
		self.pc=0
		self.text=Text()
Exemple #8
0
class _SFBorder(sf.VertexArray):
    def __init__(self, border):
        self.border = border
        sf.VertexArray.__init__(self, sf.PrimitiveType.LINES_STRIP, 4)
        self[1].position = border.lines[1][0]
        self[2].position = border.lines[1][1]
        for i in [0, 1, 2, 3]:
            self[i].color = sf.Color.BLACK
        self.vertCircle = SFCircle(oc=sf.Color.RED, ic=sf.Color.TRANSPARENT)

    def updateRays(self, corners):
        p0 = ScreenEdgeIntersect(corners, self[1].position, -self.border.axis)
        p3 = ScreenEdgeIntersect(corners, self[2].position, self.border.axis)
        if p0: self[0].position = p0
        if p3: self[3].position = p3

    def setScale(self, scale):
        self.vertCircle.setScale(scale)

    def draw(self, target, states):
        target.draw(self, states)
        for p in self.border.verts:
            self.vertCircle.draw(target, states, p)