def PlotDashLine(self):
     dashSize = 2.0
     gapSize = 7.0
     r, g, b = self.GetRGB()
     DASHCOLOR = (r, g, b, 1.0)
     GAPCOLOR = (r, g, b, 0.0)
     MARGIN = 16.0 * self.localScale
     vecDir = geo2.Vec2Subtract(self.toPosition, self.fromPosition)
     vecLength = geo2.Vec2Length(vecDir)
     vecDirNorm = geo2.Vec2Normalize(vecDir)
     p = MARGIN
     while p < vecLength - MARGIN:
         startPoint = geo2.Vec2Add(self.fromPosition,
                                   geo2.Vec2Scale(vecDirNorm, p - 0.5))
         self.AddPoint(startPoint, GAPCOLOR)
         fromPoint = geo2.Vec2Add(self.fromPosition,
                                  geo2.Vec2Scale(vecDirNorm, p))
         self.AddPoint(fromPoint, DASHCOLOR)
         p = min(vecLength - MARGIN, dashSize + p)
         toPoint = geo2.Vec2Add(self.fromPosition,
                                geo2.Vec2Scale(vecDirNorm, p))
         self.AddPoint(toPoint, DASHCOLOR)
         endPoint = geo2.Vec2Add(self.fromPosition,
                                 geo2.Vec2Scale(vecDirNorm, p + 0.5))
         self.AddPoint(endPoint, GAPCOLOR)
         p += gapSize
 def PlotLineTrace(self):
     self.Flush()
     if self.glowLine:
         self.glowLine.Flush()
     if self.lineType in (LINE_DASHED, LINE_DASHED_ACTIVE):
         self.PlotDashLine()
     elif self.lineType == LINE_SOLID:
         self.PlotSolidLine()
     else:
         return
     if self.lineType == LINE_DASHED_ACTIVE:
         vecDir = geo2.Vec2Subtract(self.toPosition, self.fromPosition)
         vecLength = geo2.Vec2Length(vecDir)
         vecDirNorm = geo2.Vec2Normalize(vecDir)
         r, g, b = self.GetRGB()
         GLOWCOLOR = (r, g, b, 1.0)
         GAPCOLOR = (r, g, b, 0.0)
         self.glowLine.AddPoint(self.fromPosition, GAPCOLOR)
         point = geo2.Vec2Add(self.fromPosition,
                              geo2.Vec2Scale(vecDirNorm, vecLength * 0.5))
         self.glowLine.AddPoint(point, GLOWCOLOR)
         self.glowLine.AddPoint(self.toPosition, GAPCOLOR)
         self.glowLine.textureWidth = vecLength
         uicore.animations.MorphScalar(self.glowLine,
                                       'textureOffset',
                                       startVal=0.0,
                                       endVal=1.0,
                                       curveType=uiconst.ANIM_LINEAR,
                                       duration=2.0,
                                       loops=uiconst.ANIM_REPEAT)
Esempio n. 3
0
 def ApplyLineMargin(self, p1, p2, radius1, radius2):
     v = geo2.Vec2Subtract(p1, p2)
     vn = geo2.Vec2Normalize(v)
     l = geo2.Vec2Length(v)
     if not l:
         return (None, None)
     s = (radius1 + radius2) / l
     mp1 = geo2.Vec2Subtract(p1, geo2.Vec2Scale(vn, radius1))
     mp2 = geo2.Vec2Add(p2, geo2.Vec2Scale(vn, radius2))
     return (mp1, mp2)
 def __init__(self, parent, tileFrom, tileTo):
     self.tileFrom = tileFrom
     self.tileTo = tileTo
     self.parent = parent
     k = hackingUIConst.TILE_SIZE / 2.0
     self.p0 = (self.tileFrom.left + k, self.tileFrom.top + k)
     self.p1 = (self.tileTo.left + k, self.tileTo.top + k)
     self.offset = geo2.Vec2Subtract(self.p1, self.p0)
     self.offset = geo2.Vec2Normalize(self.offset)
     self.center = geo2.Vec2Lerp(self.p0, self.p1, 0.5)
     self.lineType = self.GetLineType()
     self.line = uicls.VectorLine(parent=parent, align=uiconst.TOPLEFT)
     self.bleedSprite = None
     self.UpdateState()
Esempio n. 5
0
def closest_point_on_seg(seg_a, seg_b, circ_pos):
    seg_v = geo2.Vec2Subtract(seg_b, seg_a)
    pt_v = geo2.Vec2Subtract(circ_pos, seg_a)
    if geo2.Vec2Length(seg_v) <= 0:
        raise ValueError, 'Invalid segment length'
    seg_v_unit = geo2.Vec2Normalize(seg_v)
    proj = geo2.Vec2Dot(seg_v_unit, pt_v)
    if proj <= 0:
        return seg_a
    if proj >= geo2.Vec2Length(seg_v):
        return seg_b
    proj_v = geo2.Vec2Scale(seg_v_unit, proj)
    closest = geo2.Vec2Add(proj_v, seg_a)
    return closest
 def PlotSolidLine(self):
     r, g, b = self.GetRGB()
     DASHCOLOR = (r, g, b, 1.0)
     GAPCOLOR = (r, g, b, 0.0)
     MARGIN = 16.0 * self.localScale
     vecDir = geo2.Vec2Subtract(self.toPosition, self.fromPosition)
     vecLength = geo2.Vec2Length(vecDir)
     vecDirNorm = geo2.Vec2Normalize(vecDir)
     startPoint = geo2.Vec2Add(self.fromPosition,
                               geo2.Vec2Scale(vecDirNorm, MARGIN))
     self.AddPoint(startPoint, GAPCOLOR)
     startPoint = geo2.Vec2Add(self.fromPosition,
                               geo2.Vec2Scale(vecDirNorm, MARGIN + 8))
     self.AddPoint(startPoint, DASHCOLOR)
     startPoint = geo2.Vec2Add(
         self.fromPosition,
         geo2.Vec2Scale(vecDirNorm, vecLength - MARGIN - 8))
     self.AddPoint(startPoint, DASHCOLOR)
     startPoint = geo2.Vec2Add(
         self.fromPosition, geo2.Vec2Scale(vecDirNorm, vecLength - MARGIN))
     self.AddPoint(startPoint, GAPCOLOR)