Merge pull request #239 from guzba/master
updated + new pixie masters , get smooth a bit smarter
|
@ -1,11 +1,13 @@
|
|||
## Load and Save SVG files.
|
||||
|
||||
import cairo, chroma, pixie/common, pixie/images, pixie/paths, strutils, vmath,
|
||||
import cairo, chroma, pixie/common, pixie/images, strutils, vmath,
|
||||
xmlparser, xmltree
|
||||
|
||||
type Path = paths.Path
|
||||
include pixie/paths
|
||||
|
||||
proc processCommands(c: ptr Context, path: paths.Path) =
|
||||
# type Path = paths.Path
|
||||
|
||||
proc processCommands(c: ptr Context, path: Path) =
|
||||
c.newPath()
|
||||
c.moveTo(0, 0)
|
||||
for i, command in path.commands:
|
||||
|
@ -99,8 +101,8 @@ type Ctx = object
|
|||
fillRule: WindingRule
|
||||
fill, stroke: ColorRGBA
|
||||
strokeWidth: float32
|
||||
strokeLineCap: paths.LineCap
|
||||
strokeLineJoin: paths.LineJoin
|
||||
strokeLineCap: LineCap
|
||||
strokeLineJoin: LineJoin
|
||||
strokeMiterLimit: float32
|
||||
strokeDashArray: seq[float32]
|
||||
transform: Mat3
|
||||
|
@ -319,7 +321,7 @@ proc decodeCtx(inherited: Ctx, node: XmlNode): Ctx =
|
|||
else:
|
||||
failInvalidTransform(transform)
|
||||
|
||||
proc cairoLineCap(lineCap: paths.LineCap): cairo.LineCap =
|
||||
proc cairoLineCap(lineCap: LineCap): cairo.LineCap =
|
||||
case lineCap:
|
||||
of lcButt:
|
||||
LineCapButt
|
||||
|
@ -328,7 +330,7 @@ proc cairoLineCap(lineCap: paths.LineCap): cairo.LineCap =
|
|||
of lcSquare:
|
||||
LineCapSquare
|
||||
|
||||
proc cairoLineJoin(lineJoin: paths.LineJoin): cairo.LineJoin =
|
||||
proc cairoLineJoin(lineJoin: LineJoin): cairo.LineJoin =
|
||||
case lineJoin:
|
||||
of ljMiter:
|
||||
LineJoinMiter
|
||||
|
|
|
@ -312,13 +312,11 @@ proc clip*(ctx: Context, path: Path, windingRule = wrNonZero) =
|
|||
## Turns the path into the current clipping region. The previous clipping
|
||||
## region, if any, is intersected with the current or given path to create
|
||||
## the new clipping region.
|
||||
let mask = newMask(ctx.image.width, ctx.image.height)
|
||||
mask.fillPath(path, ctx.mat, windingRule)
|
||||
|
||||
if ctx.mask == nil:
|
||||
ctx.mask = mask
|
||||
ctx.mask = newMask(ctx.image.width, ctx.image.height)
|
||||
ctx.mask.fillPath(path, windingRule = windingRule)
|
||||
else:
|
||||
ctx.mask.draw(mask, blendMode = bmMask)
|
||||
ctx.mask.fillPath(path, windingRule = windingRule, blendMode = bmMask)
|
||||
|
||||
proc clip*(ctx: Context, windingRule = wrNonZero) {.inline.} =
|
||||
## Turns the current path into the current clipping region. The previous
|
||||
|
|
|
@ -535,11 +535,18 @@ proc getRgbaSmooth*(image: Image, x, y: float32, wrapped = false): ColorRGBX =
|
|||
x0y1 = image[x0, y1]
|
||||
x1y1 = image[x1, y1]
|
||||
|
||||
let
|
||||
var topMix = x0y0
|
||||
if xFractional > 0 and x0y0 != x1y0:
|
||||
topMix = lerp(x0y0, x1y0, xFractional)
|
||||
|
||||
var bottomMix = x0y1
|
||||
if xFractional > 0 and x0y1 != x1y1:
|
||||
bottomMix = lerp(x0y1, x1y1, xFractional)
|
||||
|
||||
lerp(topMix, bottomMix, yFractional)
|
||||
if yFractional != 0 and topMix != bottomMix:
|
||||
lerp(topMix, bottomMix, yFractional)
|
||||
else:
|
||||
topMix
|
||||
|
||||
proc drawCorrect(
|
||||
a, b: Image | Mask, mat = mat3(), tiled = false, blendMode = bmNormal
|
||||
|
@ -678,9 +685,11 @@ proc drawUber(a, b: Image | Mask, mat = mat3(), blendMode = bmNormal) =
|
|||
zeroMem(a.data[a.dataIndex(0, y)].addr, 4 * xMin)
|
||||
|
||||
if smooth:
|
||||
var srcPos = p + dx * xMin.float32 + dy * y.float32
|
||||
srcPos = vec2(max(0, srcPos.x), max(0, srcPos.y))
|
||||
|
||||
for x in xMin ..< xMax:
|
||||
let
|
||||
srcPos = p + dx * x.float32 + dy * y.float32
|
||||
xFloat = srcPos.x - h
|
||||
yFloat = srcPos.y - h
|
||||
when type(a) is Image:
|
||||
|
@ -701,6 +710,9 @@ proc drawUber(a, b: Image | Mask, mat = mat3(), blendMode = bmNormal) =
|
|||
else: # b is a Mask
|
||||
let sample = b.getValueSmooth(xFloat, yFloat)
|
||||
a.setValueUnsafe(x, y, masker(backdrop, sample))
|
||||
|
||||
srcPos += dx
|
||||
|
||||
else:
|
||||
var x = xMin
|
||||
when defined(amd64) and not defined(pixieNoSimd):
|
||||
|
|
|
@ -173,10 +173,18 @@ proc getValueSmooth*(mask: Mask, x, y: float32): uint8 =
|
|||
x0y1 = mask[x0, y1]
|
||||
x1y1 = mask[x1, y1]
|
||||
|
||||
var topMix = x0y0
|
||||
if xFractional > 0 and x0y0 != x1y0:
|
||||
topMix = lerp(x0y0, x1y0, xFractional)
|
||||
|
||||
var bottomMix = x0y1
|
||||
if xFractional > 0 and x0y1 != x1y1:
|
||||
bottomMix = lerp(x0y1, x1y1, xFractional)
|
||||
|
||||
lerp(topMix, bottomMix, yFractional)
|
||||
if yFractional != 0 and topMix != bottomMix:
|
||||
lerp(topMix, bottomMix, yFractional)
|
||||
else:
|
||||
topMix
|
||||
|
||||
proc spread*(mask: Mask, spread: float32) =
|
||||
## Grows the mask by spread.
|
||||
|
|
|
@ -1230,6 +1230,8 @@ proc computeCoverages(
|
|||
|
||||
proc clearUnsafe(target: Image | Mask, startX, startY, toX, toY: int) =
|
||||
## Clears data from [start, to).
|
||||
if startX == target.width or startY == target.height:
|
||||
return
|
||||
let
|
||||
start = target.dataIndex(startX, startY)
|
||||
len = target.dataIndex(toX, toY) - start
|
||||
|
|
|
@ -40,7 +40,40 @@ block:
|
|||
a.fill(rgba(255, 0, 0, 255))
|
||||
b.fill(rgba(0, 255, 0, 255))
|
||||
|
||||
timeIt "draw big-on-bigger Smooth bmNormal":
|
||||
timeIt "draw [scale 0.5]":
|
||||
a.draw(b, translate(vec2(25, 25)) * scale(vec2(0.5, 0.5)), bmNormal)
|
||||
keep(b)
|
||||
|
||||
block:
|
||||
let
|
||||
a = newImage(1000, 1000)
|
||||
b = newImage(500, 500)
|
||||
a.fill(rgba(255, 0, 0, 255))
|
||||
b.fill(rgba(0, 255, 0, 255))
|
||||
|
||||
timeIt "draw Smooth [x translate]":
|
||||
a.draw(b, translate(vec2(25.2, 0)), bmNormal)
|
||||
keep(b)
|
||||
|
||||
block:
|
||||
let
|
||||
a = newImage(1000, 1000)
|
||||
b = newImage(500, 500)
|
||||
a.fill(rgba(255, 0, 0, 255))
|
||||
b.fill(rgba(0, 255, 0, 255))
|
||||
|
||||
timeIt "draw Smooth [y translate]":
|
||||
a.draw(b, translate(vec2(0, 25.2)), bmNormal)
|
||||
keep(b)
|
||||
|
||||
block:
|
||||
let
|
||||
a = newImage(1000, 1000)
|
||||
b = newImage(500, 500)
|
||||
a.fill(rgba(255, 0, 0, 255))
|
||||
b.fill(rgba(0, 255, 0, 255))
|
||||
|
||||
timeIt "draw Smooth [x + y translate]":
|
||||
a.draw(b, translate(vec2(25.2, 25.2)), bmNormal)
|
||||
keep(b)
|
||||
|
||||
|
@ -51,8 +84,8 @@ block:
|
|||
a.fill(rgba(255, 0, 0, 255))
|
||||
b.fill(rgba(0, 255, 0, 255))
|
||||
|
||||
timeIt "draw big-on-bigger bmNormal scale(0.5)":
|
||||
a.draw(b, translate(vec2(25, 25)) * scale(vec2(0.5, 0.5)), bmNormal)
|
||||
timeIt "draw Smooth [rotate 45 deg]":
|
||||
a.draw(b, translate(vec2(0, 500)) * rotate(toRadians(45)), bmNormal)
|
||||
keep(b)
|
||||
|
||||
block:
|
||||
|
|
BIN
tests/fonts/diffs/basic10.png
Normal file
After Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 75 KiB After Width: | Height: | Size: 33 KiB |
Before Width: | Height: | Size: 76 KiB After Width: | Height: | Size: 33 KiB |
Before Width: | Height: | Size: 70 KiB After Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 70 KiB After Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 32 KiB |
BIN
tests/fonts/diffs/image_fill.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
tests/fonts/diffs/image_paint_fill.png
Normal file
After Width: | Height: | Size: 2.6 KiB |
BIN
tests/fonts/diffs/image_stroke.png
Normal file
After Width: | Height: | Size: 6.5 KiB |
BIN
tests/fonts/diffs/mask_fill.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
tests/fonts/diffs/mask_stroke.png
Normal file
After Width: | Height: | Size: 7.5 KiB |
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 55 KiB After Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 243 B After Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 712 B |
Before Width: | Height: | Size: 3.7 KiB |
BIN
tests/fonts/masters/basic10.png
Normal file
After Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 13 KiB |
BIN
tests/fonts/masters/image_fill.png
Normal file
After Width: | Height: | Size: 795 B |
BIN
tests/fonts/masters/image_paint_fill.png
Normal file
After Width: | Height: | Size: 2.1 KiB |
BIN
tests/fonts/masters/image_stroke.png
Normal file
After Width: | Height: | Size: 3.3 KiB |
BIN
tests/fonts/masters/mask_fill.png
Normal file
After Width: | Height: | Size: 662 B |
BIN
tests/fonts/masters/mask_stroke.png
Normal file
After Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 7.9 KiB |
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 9.9 KiB |
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 8.1 KiB |
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 2 KiB |
BIN
tests/fonts/rendered/basic10.png
Normal file
After Width: | Height: | Size: 4.9 KiB |
Before Width: | Height: | Size: 91 KiB After Width: | Height: | Size: 38 KiB |
Before Width: | Height: | Size: 90 KiB After Width: | Height: | Size: 38 KiB |
Before Width: | Height: | Size: 76 KiB After Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 35 KiB |
Before Width: | Height: | Size: 88 KiB After Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 87 KiB After Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
BIN
tests/fonts/rendered/image_paint_fill.png
Normal file
After Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 6.9 KiB After Width: | Height: | Size: 6.9 KiB |
BIN
tests/fonts/rendered/mask_fill.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
tests/fonts/rendered/mask_stroke.png
Normal file
After Width: | Height: | Size: 7.2 KiB |
Before Width: | Height: | Size: 61 KiB After Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.6 KiB |
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" standalone="no"?>
|
||||
<svg width="12cm" height="4cm" viewBox="0 0 1200 400"
|
||||
<svg viewBox="0 0 1200 400"
|
||||
xmlns="http://www.w3.org/2000/svg" version="1.1">
|
||||
<desc>Example circle01 - circle filled with red and stroked with blue</desc>
|
||||
|
||||
|
|
Before Width: | Height: | Size: 483 B After Width: | Height: | Size: 457 B |
Before Width: | Height: | Size: 2.9 KiB |
|
@ -1,20 +1,22 @@
|
|||
<svg viewBox="0 0 600 200" transform="scale(20, 20)" xmlns="http://www.w3.org/2000/svg">
|
||||
<svg viewBox="0 0 600 200" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="600" height="200" fill="white"/>
|
||||
|
||||
<!-- No dashes nor gaps -->
|
||||
<line x1="0" y1="1" x2="30" y2="1" stroke="black" />
|
||||
<line x1="0" y1="20" x2="600" y2="20" stroke="black" stroke-width="20" />
|
||||
|
||||
<!-- Dashes and gaps of the same size -->
|
||||
<line x1="0" y1="3" x2="30" y2="3" stroke="black"
|
||||
stroke-dasharray="4" />
|
||||
<line x1="0" y1="60" x2="600" y2="60" stroke="black"
|
||||
stroke-dasharray="80" stroke-width="20" />
|
||||
|
||||
<!-- Dashes and gaps of different sizes -->
|
||||
<line x1="0" y1="5" x2="30" y2="5" stroke="black"
|
||||
stroke-dasharray="4 1" />
|
||||
<line x1="0" y1="100" x2="600" y2="100" stroke="black"
|
||||
stroke-dasharray="80 20" stroke-width="20" />
|
||||
|
||||
<!-- Dashes and gaps of various sizes with an odd number of values -->
|
||||
<line x1="0" y1="7" x2="30" y2="7" stroke="black"
|
||||
stroke-dasharray="4 1 2" />
|
||||
<line x1="0" y1="140" x2="600" y2="140" stroke="black"
|
||||
stroke-dasharray="80 20 40" stroke-width="20" />
|
||||
|
||||
<!-- Dashes and gaps of various sizes with an even number of values -->
|
||||
<line x1="0" y1="9" x2="30" y2="9" stroke="black"
|
||||
stroke-dasharray="4 1 2 3" />
|
||||
<line x1="0" y1="180" x2="600" y2="180" stroke="black"
|
||||
stroke-dasharray="80 20 40 60" stroke-width="20" />
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 778 B After Width: | Height: | Size: 922 B |
BIN
tests/images/svg/diffs/Ghostscript_Tiger.png
Normal file
After Width: | Height: | Size: 260 KiB |
BIN
tests/images/svg/diffs/circle01.png
Normal file
After Width: | Height: | Size: 9.3 KiB |
BIN
tests/images/svg/diffs/dashes.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
tests/images/svg/diffs/ellipse01.png
Normal file
After Width: | Height: | Size: 27 KiB |
BIN
tests/images/svg/diffs/line01.png
Normal file
After Width: | Height: | Size: 9 KiB |
BIN
tests/images/svg/diffs/miterlimit.png
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
tests/images/svg/diffs/polygon01.png
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
tests/images/svg/diffs/polyline01.png
Normal file
After Width: | Height: | Size: 3.2 KiB |
BIN
tests/images/svg/diffs/quad01.png
Normal file
After Width: | Height: | Size: 32 KiB |
BIN
tests/images/svg/diffs/rect01.png
Normal file
After Width: | Height: | Size: 3.2 KiB |
BIN
tests/images/svg/diffs/rect02.png
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
tests/images/svg/diffs/scale.png
Normal file
After Width: | Height: | Size: 3.4 KiB |
BIN
tests/images/svg/diffs/triangle01.png
Normal file
After Width: | Height: | Size: 3.6 KiB |
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" standalone="no"?>
|
||||
<svg width="12cm" height="4cm" viewBox="0 0 1200 400"
|
||||
<svg viewBox="0 0 1200 400"
|
||||
xmlns="http://www.w3.org/2000/svg" version="1.1">
|
||||
<desc>Example ellipse01 - examples of ellipses</desc>
|
||||
|
||||
|
|
Before Width: | Height: | Size: 609 B After Width: | Height: | Size: 583 B |
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" standalone="no"?>
|
||||
<svg width="12cm" height="4cm" viewBox="0 0 1200 400"
|
||||
<svg viewBox="0 0 1200 400"
|
||||
xmlns="http://www.w3.org/2000/svg" version="1.1">
|
||||
<desc>Example line01 - lines expressed in user coordinates</desc>
|
||||
|
||||
|
|
Before Width: | Height: | Size: 811 B After Width: | Height: | Size: 785 B |
BIN
tests/images/svg/masters/Ghostscript_Tiger.png
Normal file
After Width: | Height: | Size: 198 KiB |
BIN
tests/images/svg/masters/circle01.png
Normal file
After Width: | Height: | Size: 7.4 KiB |
BIN
tests/images/svg/masters/dashes.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
tests/images/svg/masters/ellipse01.png
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
tests/images/svg/masters/line01.png
Normal file
After Width: | Height: | Size: 6 KiB |
BIN
tests/images/svg/masters/miterlimit.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
tests/images/svg/masters/polygon01.png
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
tests/images/svg/masters/polyline01.png
Normal file
After Width: | Height: | Size: 3 KiB |
BIN
tests/images/svg/masters/quad01.png
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
tests/images/svg/masters/rect01.png
Normal file
After Width: | Height: | Size: 2.9 KiB |
BIN
tests/images/svg/masters/rect02.png
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
tests/images/svg/masters/scale.png
Normal file
After Width: | Height: | Size: 2.1 KiB |
BIN
tests/images/svg/masters/triangle01.png
Normal file
After Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 41 KiB |
|
@ -1,27 +1,24 @@
|
|||
<svg viewBox="0 0 760 600" transform="scale(20, 20)" xmlns="http://www.w3.org/2000/svg">
|
||||
<svg viewBox="0 0 760 600" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="760" height="600" fill="white"/>
|
||||
|
||||
<!-- Impact of the default miter limit -->
|
||||
<path stroke="black" fill="none" stroke-linejoin="miter" id="p1" d="M1,9 l7 ,-3 l7 ,3
|
||||
m2,0 l3.5 ,-3 l3.5 ,3
|
||||
m2,0 l2 ,-3 l2 ,3
|
||||
m2,0 l0.75,-3 l0.75,3
|
||||
m2,0 l0.5 ,-3 l0.5 ,3"></path>
|
||||
<path stroke="black" fill="none" stroke-linejoin="miter" stroke-width="20" id="p1" d="M20,180 l140 ,-60 l140 ,60
|
||||
m40,0 l70 ,-60 l140 ,60
|
||||
m40,0 l40 ,-60 l40 ,60
|
||||
m40,0 l15,-60 l30,60
|
||||
m40,0 l10 ,-60 l20 ,60"></path>
|
||||
|
||||
<!-- Impact of the smallest miter limit (1) -->
|
||||
<path stroke="black" fill="none" stroke-linejoin="miter" stroke-miterlimit="1" id="p2" d="M1,19 l7 ,-3 l7 ,3
|
||||
m2, 0 l3.5 ,-3 l3.5 ,3
|
||||
m2, 0 l2 ,-3 l2 ,3
|
||||
m2, 0 l0.75,-3 l0.75,3
|
||||
m2, 0 l0.5 ,-3 l0.5 ,3"></path>
|
||||
<path stroke="black" fill="none" stroke-linejoin="miter" stroke-width="20" stroke-miterlimit="1" id="p2" d="M20,380 l140 ,-60 l140 ,60
|
||||
m40, 0 l70 ,-60 l140 ,60
|
||||
m40, 0 l40 ,-60 l40 ,60
|
||||
m40, 0 l15,-60 l15,60
|
||||
m40, 0 l10 ,-60 l10 ,60"></path>
|
||||
|
||||
<!-- Impact of a large miter limit (8) -->
|
||||
<path stroke="black" fill="none" stroke-linejoin="miter" stroke-miterlimit="8" id="p3" d="M1,29 l7 ,-3 l7 ,3
|
||||
m2, 0 l3.5 ,-3 l3.5 ,3
|
||||
m2, 0 l2 ,-3 l2 ,3
|
||||
m2, 0 l0.75,-3 l0.75,3
|
||||
m2, 0 l0.5 ,-3 l0.5 ,3"></path>
|
||||
|
||||
<!-- the following pink lines highlight the position of the path for each stroke -->
|
||||
<path stroke="pink" fill="none" stroke-width="0.05" d="M1, 9 l7,-3 l7,3 m2,0 l3.5,-3 l3.5,3 m2,0 l2,-3 l2,3 m2,0 l0.75,-3 l0.75,3 m2,0 l0.5,-3 l0.5,3
|
||||
M1,19 l7,-3 l7,3 m2,0 l3.5,-3 l3.5,3 m2,0 l2,-3 l2,3 m2,0 l0.75,-3 l0.75,3 m2,0 l0.5,-3 l0.5,3
|
||||
M1,29 l7,-3 l7,3 m2,0 l3.5,-3 l3.5,3 m2,0 l2,-3 l2,3 m2,0 l0.75,-3 l0.75,3 m2,0 l0.5,-3 l0.5,3"></path>
|
||||
<path stroke="black" fill="none" stroke-linejoin="miter" stroke-width="20" stroke-miterlimit="8" id="p3" d="M20,580 l140 ,-60 l140 ,60
|
||||
m40, 0 l70 ,-60 l140 ,60
|
||||
m40, 0 l40 ,-60 l40 ,60
|
||||
m40, 0 l15,-60 l15,60
|
||||
m40, 0 l10 ,-60 l10 ,60"></path>
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.1 KiB |
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" standalone="no"?>
|
||||
<svg width="12cm" height="4cm" viewBox="0 0 1200 400"
|
||||
<svg viewBox="0 0 1200 400"
|
||||
xmlns="http://www.w3.org/2000/svg" version="1.1">
|
||||
<desc>Example polygon01 - star and hexagon</desc>
|
||||
|
||||
|
|
Before Width: | Height: | Size: 721 B After Width: | Height: | Size: 695 B |
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" standalone="no"?>
|
||||
<svg width="12cm" height="4cm" viewBox="0 0 1200 400"
|
||||
<svg viewBox="0 0 1200 400"
|
||||
xmlns="http://www.w3.org/2000/svg" version="1.1">
|
||||
<desc>Example polyline01 - increasingly larger bars</desc>
|
||||
|
||||
|
|
Before Width: | Height: | Size: 752 B After Width: | Height: | Size: 726 B |
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" standalone="no"?>
|
||||
<svg width="12cm" height="6cm" viewBox="0 0 1200 600"
|
||||
<svg viewBox="0 0 1200 600"
|
||||
xmlns="http://www.w3.org/2000/svg" version="1.1">
|
||||
<title>Example quad01 - quadratic Bézier commands in path data</title>
|
||||
<desc>Picture showing a "Q" a "T" command,
|
||||
|
|
Before Width: | Height: | Size: 1 KiB After Width: | Height: | Size: 1,007 B |
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" standalone="no"?>
|
||||
<svg width="12cm" height="4cm" viewBox="0 0 1200 400"
|
||||
<svg viewBox="0 0 1200 400"
|
||||
xmlns="http://www.w3.org/2000/svg" version="1.1">
|
||||
<desc>Example rect01 - rectangle with sharp corners</desc>
|
||||
|
||||
|
|
Before Width: | Height: | Size: 481 B After Width: | Height: | Size: 455 B |