def generateSvg(self,  c_x, c_y, radialLine_x=None, radialLine_y=None, tail_x=None, tail_y=None, angleText='90°',
                    arrowL1=3,arrowL2=1,arrowW=2, strokeWidth=0.5,  lineColor='blue', textRenderer=None):
        self.svg_lineColor = lineColor
        self.svg_strokeWidth = strokeWidth
        XML_body = []
        if radialLine_x <> None and radialLine_y <> None:
            XML_body.append( self.svgLine(radialLine_x, radialLine_y, c_x, c_y) )
            d = directionVector(
                numpy.array([      c_x, c_y]),
                numpy.array([radialLine_x, radialLine_y]),
                )
            XML_body.append( arrowHeadSVG( numpy.array([c_x, c_y]), d, arrowL1, arrowL2, arrowW, lineColor ) )
            if tail_x <> None and tail_y <> None:
                XML_body.append(  self.svgLine( radialLine_x, radialLine_y, tail_x, radialLine_y) )
                #getting scale factor
                svgText = SvgTextParser( textRenderer(0,0,"0") )
                f = svgText.width()
                box_w = f * 1.6
                rect_w = f * 3
                x, y = tail_x, radialLine_y-box_w/2
                #rects
                XML_body.append(  self.svgLine( x,         y, x        , y+box_w)  )
                XML_body.append(  self.svgLine( x + box_w, y, x + box_w, y+box_w)  )
                xe = x + box_w + rect_w
                XML_body.append(  self.svgLine( x,         y, xe, y)  )
                XML_body.append(  self.svgLine( x,         y+box_w, xe, y+box_w)  )
                XML_body.append(  self.svgLine( xe,        y, xe, y+box_w)  )
                #bend symbol
                XML_body.append(  self.svgLine( x + 0.2*box_w, y + 0.8*box_w, x + 0.8*box_w , y + 0.8*box_w,  textRenderer.fill)  )
                XML_body.append(  self.svgLine( x + 0.2*box_w, y + 0.8*box_w, x + 0.8*box_w , y + 0.2*box_w,  textRenderer.fill)  )
                #text
                XML_body.append( textRenderer(x + box_w*1.2, y+box_w*0.8, angleText) )


        return '<g> %s </g> ''' % "\n".join(XML_body)
def ArrowWithTail_SVG(c_x,
                      c_y,
                      radialLine_x=None,
                      radialLine_y=None,
                      tail_x=None,
                      tail_y=None,
                      arrowL1=3,
                      arrowL2=1,
                      arrowW=2,
                      svgTag='g',
                      svgParms='',
                      strokeWidth=0.5,
                      lineColor='blue'):
    XML_body = []
    if radialLine_x <> None and radialLine_y <> None:
        XML_body.append(
            '<line x1="%f" y1="%f" x2="%f" y2="%f" style="stroke:%s;stroke-width:%1.2f" />'
            % (radialLine_x, radialLine_y, c_x, c_y, lineColor, strokeWidth))
        d = directionVector(
            numpy.array([c_x, c_y]),
            numpy.array([radialLine_x, radialLine_y]),
        )
        XML_body.append(
            arrowHeadSVG(numpy.array([c_x, c_y]), d, arrowL1, arrowL2, arrowW,
                         lineColor))
    if tail_x <> None and tail_y <> None:
        XML_body.append(
            '<line x1="%f" y1="%f" x2="%f" y2="%f" style="stroke:%s;stroke-width:%1.2f" />'
            % (radialLine_x, radialLine_y, tail_x, radialLine_y, lineColor,
               strokeWidth))
    return '''<%s  %s >
%s
</%s> ''' % (svgTag, svgParms, "\n".join(XML_body), svgTag)
    def generateSvg(self,
                    c_x,
                    c_y,
                    radialLine_x=None,
                    radialLine_y=None,
                    tail_x=None,
                    tail_y=None,
                    angleText='90°',
                    arrowL1=3,
                    arrowL2=1,
                    arrowW=2,
                    strokeWidth=0.5,
                    lineColor='blue',
                    textRenderer=None):
        self.svg_lineColor = lineColor
        self.svg_strokeWidth = strokeWidth
        XML_body = []
        if radialLine_x <> None and radialLine_y <> None:
            XML_body.append(self.svgLine(radialLine_x, radialLine_y, c_x, c_y))
            d = directionVector(
                numpy.array([c_x, c_y]),
                numpy.array([radialLine_x, radialLine_y]),
            )
            XML_body.append(
                arrowHeadSVG(numpy.array([c_x, c_y]), d, arrowL1, arrowL2,
                             arrowW, lineColor))
            if tail_x <> None and tail_y <> None:
                XML_body.append(
                    self.svgLine(radialLine_x, radialLine_y, tail_x,
                                 radialLine_y))
                #getting scale factor
                svgText = SvgTextParser(textRenderer(0, 0, "0"))
                f = svgText.width()
                box_w = f * 1.6
                rect_w = f * 3
                x, y = tail_x, radialLine_y - box_w / 2
                #rects
                XML_body.append(self.svgLine(x, y, x, y + box_w))
                XML_body.append(
                    self.svgLine(x + box_w, y, x + box_w, y + box_w))
                xe = x + box_w + rect_w
                XML_body.append(self.svgLine(x, y, xe, y))
                XML_body.append(self.svgLine(x, y + box_w, xe, y + box_w))
                XML_body.append(self.svgLine(xe, y, xe, y + box_w))
                #bend symbol
                XML_body.append(
                    self.svgLine(x + 0.2 * box_w, y + 0.8 * box_w,
                                 x + 0.8 * box_w, y + 0.8 * box_w,
                                 textRenderer.fill))
                XML_body.append(
                    self.svgLine(x + 0.2 * box_w, y + 0.8 * box_w,
                                 x + 0.8 * box_w, y + 0.2 * box_w,
                                 textRenderer.fill))
                #text
                XML_body.append(
                    textRenderer(x + box_w * 1.2, y + box_w * 0.8, angleText))

        return '<g> %s </g> ' '' % "\n".join(XML_body)
Exemple #4
0
def ArrowWithTail_SVG( c_x, c_y, radialLine_x=None, radialLine_y=None, tail_x=None, tail_y=None, arrowL1=3,arrowL2=1,arrowW=2, svgTag='g', svgParms='', strokeWidth=0.5,  lineColor='blue'):
    XML_body = []
    if radialLine_x <> None and radialLine_y <> None:
        XML_body.append( '<line x1="%f" y1="%f" x2="%f" y2="%f" style="stroke:%s;stroke-width:%1.2f" />' % (radialLine_x, radialLine_y, c_x, c_y, lineColor, strokeWidth) )
        d = directionVector(
            numpy.array([      c_x, c_y]),
            numpy.array([radialLine_x, radialLine_y]),
            )
        XML_body.append( arrowHeadSVG( numpy.array([c_x, c_y]), d, arrowL1, arrowL2, arrowW, lineColor ) )
    if tail_x <> None and tail_y <> None:
        XML_body.append( '<line x1="%f" y1="%f" x2="%f" y2="%f" style="stroke:%s;stroke-width:%1.2f" />' % (radialLine_x, radialLine_y, tail_x, radialLine_y, lineColor, strokeWidth) )
    return '''<%s  %s >
%s
</%s> ''' % ( svgTag, svgParms, "\n".join(XML_body), svgTag )
    def generateSvg(self,
                    c_x,
                    c_y,
                    radialLine_x=None,
                    radialLine_y=None,
                    tail_x=None,
                    tail_y=None,
                    weldingMarker_x=None,
                    weldingMarker_y=None,
                    arrowL1=3,
                    arrowL2=1,
                    arrowW=2,
                    svgTag='g',
                    svgParms='',
                    strokeWidth=0.5,
                    lineColor='blue',
                    textRenderer=None):
        self.svg_lineColor = lineColor
        self.svg_strokeWidth = strokeWidth
        XML_body = []
        if radialLine_x <> None and radialLine_y <> None:
            XML_body.append(self.svgLine(radialLine_x, radialLine_y, c_x, c_y))
            d = directionVector(
                numpy.array([c_x, c_y]),
                numpy.array([radialLine_x, radialLine_y]),
            )
            XML_body.append(
                arrowHeadSVG(numpy.array([c_x, c_y]), d, arrowL1, arrowL2,
                             arrowW, lineColor))
            if tail_x <> None and tail_y <> None:
                XML_body.append(
                    self.svgLine(radialLine_x, radialLine_y, tail_x,
                                 radialLine_y))
                if weldingMarker_x <> None:
                    self.radialLine_x = radialLine_x  #storing values incase self.weldingMarkerSvg needs them
                    self.radialLine_y = radialLine_y
                    self.tail_x = tail_x
                    self.tail_y = tail_y
                    XML_body.append(
                        self.weldingMarkerSvg(weldingMarker_x, radialLine_y,
                                              lineColor, strokeWidth,
                                              textRenderer))
        return '''<%s  %s >
%s
</%s> ''' % (svgTag, svgParms, "\n".join(XML_body), svgTag)
    def generateSvg(self,  c_x, c_y, radialLine_x=None, radialLine_y=None, tail_x=None, tail_y=None, weldingMarker_x=None, weldingMarker_y=None, 
                    arrowL1=3,arrowL2=1,arrowW=2, svgTag='g', svgParms='', strokeWidth=0.5,  lineColor='blue', textRenderer=None):
        self.svg_lineColor = lineColor
        self.svg_strokeWidth = strokeWidth
        XML_body = []
        if radialLine_x <> None and radialLine_y <> None:
            XML_body.append( self.svgLine(radialLine_x, radialLine_y, c_x, c_y) )
            d = directionVector(
                numpy.array([      c_x, c_y]),
                numpy.array([radialLine_x, radialLine_y]),
                )
            XML_body.append( arrowHeadSVG( numpy.array([c_x, c_y]), d, arrowL1, arrowL2, arrowW, lineColor ) )
            if tail_x <> None and tail_y <> None:
                XML_body.append(  self.svgLine( radialLine_x, radialLine_y, tail_x, radialLine_y) )
                if weldingMarker_x <> None:
                    self.radialLine_x = radialLine_x #storing values incase self.weldingMarkerSvg needs them
                    self.radialLine_y = radialLine_y 
                    self.tail_x = tail_x 
                    self.tail_y = tail_y
                    XML_body.append( self.weldingMarkerSvg( weldingMarker_x, radialLine_y, lineColor, strokeWidth, textRenderer) )
        return '''<%s  %s >
%s
</%s> ''' % ( svgTag, svgParms, "\n".join(XML_body), svgTag )