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)
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())]
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 __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 )
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())]
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)
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()
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)