This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

✅ Setup snapshot testing, snapshot-test some examples

+677 -1
+20
Cargo.lock
··· 992 992 name = "dna-analysis-machine" 993 993 version = "0.1.0" 994 994 dependencies = [ 995 + "insta", 995 996 "rand 0.9.0", 996 997 "shapemaker", 997 998 ] ··· 2680 2681 ] 2681 2682 2682 2683 [[package]] 2684 + name = "insta" 2685 + version = "1.43.2" 2686 + source = "registry+https://github.com/rust-lang/crates.io-index" 2687 + checksum = "46fdb647ebde000f43b5b53f773c30cf9b0cb4300453208713fa38b2c70935a0" 2688 + dependencies = [ 2689 + "console", 2690 + "once_cell", 2691 + "similar", 2692 + ] 2693 + 2694 + [[package]] 2683 2695 name = "instant" 2684 2696 version = "0.1.12" 2685 2697 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4389 4401 "getrandom 0.2.14", 4390 4402 "indexmap", 4391 4403 "indicatif", 4404 + "insta", 4392 4405 "itertools 0.12.1", 4393 4406 "log", 4394 4407 "measure_time", ··· 4476 4489 checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" 4477 4490 4478 4491 [[package]] 4492 + name = "similar" 4493 + version = "2.7.0" 4494 + source = "registry+https://github.com/rust-lang/crates.io-index" 4495 + checksum = "bbbb5d9659141646ae647b42fe094daf6c6192d1620870b449d9557f748b2daa" 4496 + 4497 + [[package]] 4479 4498 name = "simplecss" 4480 4499 version = "0.2.2" 4481 4500 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4548 4567 name = "specimen" 4549 4568 version = "0.1.0" 4550 4569 dependencies = [ 4570 + "insta", 4551 4571 "rand 0.9.0", 4552 4572 "shapemaker", 4553 4573 ]
+1
Cargo.toml
··· 108 108 109 109 110 110 [dev-dependencies] 111 + insta = "1.43.2" 111 112 rust-analyzer = "0.0.1"
+3
examples/dna-analysis-machine/Cargo.toml
··· 6 6 [dependencies] 7 7 rand = "0.9.0" 8 8 shapemaker = { path = "../../" } 9 + 10 + [dev-dependencies] 11 + insta = "1.43.2"
+11 -1
examples/dna-analysis-machine/src/main.rs
··· 1 1 use rand; 2 2 use shapemaker::*; 3 3 4 - pub fn main() { 4 + fn artwork() -> Canvas { 5 5 let mut canvas = Canvas::with_colors(ColorMapping { 6 6 black: "#000000".into(), 7 7 white: "#ffffff".into(), ··· 68 68 } 69 69 70 70 canvas 71 + } 72 + 73 + pub fn main() { 74 + artwork() 71 75 .render_to_png("dna-analysis-machine.png", 480) 72 76 .unwrap(); 73 77 } 78 + 79 + #[test] 80 + fn test_artwork() { 81 + use insta; 82 + insta::assert_snapshot! { artwork().render_to_svg_string().unwrap() } 83 + }
+563
examples/dna-analysis-machine/src/snapshots/dna_analysis_machine__artwork.snap
··· 1 + --- 2 + source: examples/dna-analysis-machine/src/main.rs 3 + expression: artwork().render_to_svg_string().unwrap() 4 + --- 5 + <svg height="470" viewBox="-10 -10 820 470" width="820" xmlns="http://www.w3.org/2000/svg"> 6 + <rect fill="#000000" height="470" width="820" x="-10" y="-10"/> 7 + <g class="layer" data-layer="hatches"> 8 + <rect data-object="hatches--anon-0" height="50" style="fill: url(#pattern-hatched-45deg-white-0.5-0.25);" width="50" x="50" y="50"/> 9 + <rect data-object="hatches--anon-1" height="50" style="fill: url(#pattern-hatched-45deg-white-0.6-0.25);" width="50" x="100" y="50"/> 10 + <rect data-object="hatches--anon-10" height="50" style="fill: url(#pattern-hatched-45deg-white-1.5-0.25);" width="50" x="550" y="50"/> 11 + <circle cx="625" cy="75" data-object="hatches--anon-11" r="25" style="fill: url(#pattern-hatched-45deg-white-1.6-0.25);"/> 12 + <circle cx="675" cy="75" data-object="hatches--anon-12" r="25" style="fill: url(#pattern-hatched-45deg-white-1.7-0.25);"/> 13 + <rect data-object="hatches--anon-13" height="50" style="fill: url(#pattern-hatched-45deg-white-1.8-0.25);" width="50" x="700" y="50"/> 14 + <rect data-object="hatches--anon-14" height="50" style="fill: url(#pattern-hatched-45deg-white-1.9-0.25);" width="50" x="50" y="100"/> 15 + <rect data-object="hatches--anon-15" height="50" style="fill: url(#pattern-hatched-45deg-white-2-0.25);" width="50" x="100" y="100"/> 16 + <rect data-object="hatches--anon-16" height="50" style="fill: url(#pattern-hatched-45deg-white-2.1-0.25);" width="50" x="150" y="100"/> 17 + <rect data-object="hatches--anon-17" height="50" style="fill: url(#pattern-hatched-45deg-white-2.2-0.25);" width="50" x="200" y="100"/> 18 + <circle cx="275" cy="125" data-object="hatches--anon-18" r="25" style="fill: url(#pattern-hatched-45deg-white-2.3-0.25);"/> 19 + <rect data-object="hatches--anon-19" height="50" style="fill: url(#pattern-hatched-45deg-white-2.4-0.25);" width="50" x="300" y="100"/> 20 + <rect data-object="hatches--anon-2" height="50" style="fill: url(#pattern-hatched-45deg-white-0.7-0.25);" width="50" x="150" y="50"/> 21 + <circle cx="375" cy="125" data-object="hatches--anon-20" r="25" style="fill: url(#pattern-hatched-45deg-white-2.5-0.25);"/> 22 + <circle cx="425" cy="125" data-object="hatches--anon-21" r="25" style="fill: url(#pattern-hatched-45deg-white-2.6-0.25);"/> 23 + <circle cx="475" cy="125" data-object="hatches--anon-22" r="25" style="fill: url(#pattern-hatched-45deg-white-2.7-0.25);"/> 24 + <circle cx="525" cy="125" data-object="hatches--anon-23" r="25" style="fill: url(#pattern-hatched-45deg-white-2.8-0.25);"/> 25 + <circle cx="575" cy="125" data-object="hatches--anon-24" r="25" style="fill: url(#pattern-hatched-45deg-white-2.9-0.25);"/> 26 + <circle cx="625" cy="125" data-object="hatches--anon-25" r="25" style="fill: url(#pattern-hatched-45deg-white-3-0.25);"/> 27 + <rect data-object="hatches--anon-26" height="50" style="fill: url(#pattern-hatched-45deg-white-3.1-0.25);" width="50" x="650" y="100"/> 28 + <circle cx="725" cy="125" data-object="hatches--anon-27" r="25" style="fill: url(#pattern-hatched-45deg-white-3.2-0.25);"/> 29 + <rect data-object="hatches--anon-28" height="50" style="fill: url(#pattern-hatched-45deg-white-3.3-0.25);" width="50" x="50" y="150"/> 30 + <circle cx="125" cy="175" data-object="hatches--anon-29" r="25" style="fill: url(#pattern-hatched-45deg-white-3.4-0.25);"/> 31 + <circle cx="225" cy="75" data-object="hatches--anon-3" r="25" style="fill: url(#pattern-hatched-45deg-white-0.8-0.25);"/> 32 + <rect data-object="hatches--anon-30" height="50" style="fill: url(#pattern-hatched-45deg-white-3.5-0.25);" width="50" x="150" y="150"/> 33 + <rect data-object="hatches--anon-31" height="50" style="fill: url(#pattern-hatched-45deg-white-3.6-0.25);" width="50" x="200" y="150"/> 34 + <circle cx="275" cy="175" data-object="hatches--anon-32" r="25" style="fill: url(#pattern-hatched-45deg-white-3.7-0.25);"/> 35 + <circle cx="325" cy="175" data-object="hatches--anon-33" r="25" style="fill: url(#pattern-hatched-45deg-white-3.8-0.25);"/> 36 + <rect data-object="hatches--anon-34" height="50" style="fill: url(#pattern-hatched-45deg-white-3.9-0.25);" width="50" x="350" y="150"/> 37 + <rect data-object="hatches--anon-35" height="50" style="fill: url(#pattern-hatched-45deg-white-4-0.25);" width="50" x="400" y="150"/> 38 + <rect data-object="hatches--anon-36" height="50" style="fill: url(#pattern-hatched-45deg-white-4.1-0.25);" width="50" x="450" y="150"/> 39 + <circle cx="525" cy="175" data-object="hatches--anon-37" r="25" style="fill: url(#pattern-hatched-45deg-white-4.2-0.25);"/> 40 + <circle cx="625" cy="175" data-object="hatches--anon-38" r="25" style="fill: url(#pattern-hatched-45deg-white-4.4-0.25);"/> 41 + <rect data-object="hatches--anon-39" height="50" style="fill: url(#pattern-hatched-45deg-white-4.5-0.25);" width="50" x="650" y="150"/> 42 + <rect data-object="hatches--anon-4" height="50" style="fill: url(#pattern-hatched-45deg-white-0.9-0.25);" width="50" x="250" y="50"/> 43 + <rect data-object="hatches--anon-40" height="50" style="fill: url(#pattern-hatched-45deg-white-4.6-0.25);" width="50" x="700" y="150"/> 44 + <rect data-object="hatches--anon-41" height="50" style="fill: url(#pattern-hatched-45deg-white-4.7-0.25);" width="50" x="50" y="200"/> 45 + <circle cx="125" cy="225" data-object="hatches--anon-42" r="25" style="fill: url(#pattern-hatched-45deg-white-4.8-0.25);"/> 46 + <rect data-object="hatches--anon-43" height="50" style="fill: url(#pattern-hatched-45deg-white-4.9-0.25);" width="50" x="300" y="200"/> 47 + <circle cx="375" cy="225" data-object="hatches--anon-44" r="25" style="fill: url(#pattern-hatched-45deg-white-5-0.25);"/> 48 + <circle cx="425" cy="225" data-object="hatches--anon-45" r="25" style="fill: url(#pattern-hatched-45deg-white-5.1-0.25);"/> 49 + <rect data-object="hatches--anon-46" height="50" style="fill: url(#pattern-hatched-45deg-white-5.2-0.25);" width="50" x="450" y="200"/> 50 + <rect data-object="hatches--anon-47" height="50" style="fill: url(#pattern-hatched-45deg-white-5.3-0.25);" width="50" x="500" y="200"/> 51 + <rect data-object="hatches--anon-48" height="50" style="fill: url(#pattern-hatched-45deg-white-5.4-0.25);" width="50" x="550" y="200"/> 52 + <circle cx="625" cy="225" data-object="hatches--anon-49" r="25" style="fill: url(#pattern-hatched-45deg-white-5.5-0.25);"/> 53 + <rect data-object="hatches--anon-5" height="50" style="fill: url(#pattern-hatched-45deg-white-1-0.25);" width="50" x="300" y="50"/> 54 + <circle cx="675" cy="225" data-object="hatches--anon-50" r="25" style="fill: url(#pattern-hatched-45deg-white-5.6-0.25);"/> 55 + <rect data-object="hatches--anon-51" height="50" style="fill: url(#pattern-hatched-45deg-white-5.7-0.25);" width="50" x="700" y="200"/> 56 + <rect data-object="hatches--anon-52" height="50" style="fill: url(#pattern-hatched-45deg-white-5.8-0.25);" width="50" x="50" y="250"/> 57 + <rect data-object="hatches--anon-53" height="50" style="fill: url(#pattern-hatched-45deg-white-5.9-0.25);" width="50" x="100" y="250"/> 58 + <circle cx="325" cy="275" data-object="hatches--anon-54" r="25" style="fill: url(#pattern-hatched-45deg-white-6-0.25);"/> 59 + <circle cx="375" cy="275" data-object="hatches--anon-55" r="25" style="fill: url(#pattern-hatched-45deg-white-6.1-0.25);"/> 60 + <rect data-object="hatches--anon-56" height="50" style="fill: url(#pattern-hatched-45deg-white-6.2-0.25);" width="50" x="400" y="250"/> 61 + <circle cx="475" cy="275" data-object="hatches--anon-57" r="25" style="fill: url(#pattern-hatched-45deg-white-6.3-0.25);"/> 62 + <circle cx="525" cy="275" data-object="hatches--anon-58" r="25" style="fill: url(#pattern-hatched-45deg-white-6.4-0.25);"/> 63 + <circle cx="575" cy="275" data-object="hatches--anon-59" r="25" style="fill: url(#pattern-hatched-45deg-white-6.5-0.25);"/> 64 + <circle cx="375" cy="75" data-object="hatches--anon-6" r="25" style="fill: url(#pattern-hatched-45deg-white-1.1-0.25);"/> 65 + <circle cx="625" cy="275" data-object="hatches--anon-60" r="25" style="fill: url(#pattern-hatched-45deg-white-6.6-0.25);"/> 66 + <rect data-object="hatches--anon-61" height="50" style="fill: url(#pattern-hatched-45deg-white-6.7-0.25);" width="50" x="650" y="250"/> 67 + <rect data-object="hatches--anon-62" height="50" style="fill: url(#pattern-hatched-45deg-white-6.8-0.25);" width="50" x="700" y="250"/> 68 + <circle cx="75" cy="325" data-object="hatches--anon-63" r="25" style="fill: url(#pattern-hatched-45deg-white-6.9-0.25);"/> 69 + <circle cx="125" cy="325" data-object="hatches--anon-64" r="25" style="fill: url(#pattern-hatched-45deg-white-7-0.25);"/> 70 + <rect data-object="hatches--anon-65" height="50" style="fill: url(#pattern-hatched-45deg-white-7.1-0.25);" width="50" x="300" y="300"/> 71 + <circle cx="375" cy="325" data-object="hatches--anon-66" r="25" style="fill: url(#pattern-hatched-45deg-white-7.2-0.25);"/> 72 + <rect data-object="hatches--anon-67" height="50" style="fill: url(#pattern-hatched-45deg-white-7.3-0.25);" width="50" x="400" y="300"/> 73 + <circle cx="475" cy="325" data-object="hatches--anon-68" r="25" style="fill: url(#pattern-hatched-45deg-white-7.4-0.25);"/> 74 + <circle cx="525" cy="325" data-object="hatches--anon-69" r="25" style="fill: url(#pattern-hatched-45deg-white-7.5-0.25);"/> 75 + <rect data-object="hatches--anon-7" height="50" style="fill: url(#pattern-hatched-45deg-white-1.2-0.25);" width="50" x="400" y="50"/> 76 + <circle cx="575" cy="325" data-object="hatches--anon-70" r="25" style="fill: url(#pattern-hatched-45deg-white-7.6-0.25);"/> 77 + <circle cx="625" cy="325" data-object="hatches--anon-71" r="25" style="fill: url(#pattern-hatched-45deg-white-7.7-0.25);"/> 78 + <rect data-object="hatches--anon-72" height="50" style="fill: url(#pattern-hatched-45deg-white-7.8-0.25);" width="50" x="650" y="300"/> 79 + <rect data-object="hatches--anon-73" height="50" style="fill: url(#pattern-hatched-45deg-white-7.9-0.25);" width="50" x="700" y="300"/> 80 + <rect data-object="hatches--anon-74" height="50" style="fill: url(#pattern-hatched-45deg-white-8-0.25);" width="50" x="50" y="350"/> 81 + <rect data-object="hatches--anon-75" height="50" style="fill: url(#pattern-hatched-45deg-white-8.1-0.25);" width="50" x="100" y="350"/> 82 + <circle cx="175" cy="375" data-object="hatches--anon-76" r="25" style="fill: url(#pattern-hatched-45deg-white-8.2-0.25);"/> 83 + <circle cx="225" cy="375" data-object="hatches--anon-77" r="25" style="fill: url(#pattern-hatched-45deg-white-8.3-0.25);"/> 84 + <rect data-object="hatches--anon-78" height="50" style="fill: url(#pattern-hatched-45deg-white-8.4-0.25);" width="50" x="250" y="350"/> 85 + <circle cx="325" cy="375" data-object="hatches--anon-79" r="25" style="fill: url(#pattern-hatched-45deg-white-8.5-0.25);"/> 86 + <rect data-object="hatches--anon-8" height="50" style="fill: url(#pattern-hatched-45deg-white-1.3-0.25);" width="50" x="450" y="50"/> 87 + <circle cx="375" cy="375" data-object="hatches--anon-80" r="25" style="fill: url(#pattern-hatched-45deg-white-8.6-0.25);"/> 88 + <rect data-object="hatches--anon-81" height="50" style="fill: url(#pattern-hatched-45deg-white-8.7-0.25);" width="50" x="400" y="350"/> 89 + <rect data-object="hatches--anon-82" height="50" style="fill: url(#pattern-hatched-45deg-white-8.8-0.25);" width="50" x="450" y="350"/> 90 + <circle cx="525" cy="375" data-object="hatches--anon-83" r="25" style="fill: url(#pattern-hatched-45deg-white-8.9-0.25);"/> 91 + <rect data-object="hatches--anon-84" height="50" style="fill: url(#pattern-hatched-45deg-white-9-0.25);" width="50" x="550" y="350"/> 92 + <rect data-object="hatches--anon-85" height="50" style="fill: url(#pattern-hatched-45deg-white-9.1-0.25);" width="50" x="600" y="350"/> 93 + <rect data-object="hatches--anon-86" height="50" style="fill: url(#pattern-hatched-45deg-white-9.2-0.25);" width="50" x="650" y="350"/> 94 + <circle cx="725" cy="375" data-object="hatches--anon-87" r="25" style="fill: url(#pattern-hatched-45deg-white-9.3-0.25);"/> 95 + <rect data-object="hatches--anon-9" height="50" style="fill: url(#pattern-hatched-45deg-white-1.4-0.25);" width="50" x="500" y="50"/> 96 + </g> 97 + <g class="layer" data-layer="red dot"> 98 + <g data-object="red dot--anon-0" style="fill: #cf0a2b;transform-box: fill-box;filter: url(#filter-glow-5); overflow: visible;" transform-origin="575 175"> 99 + <circle cx="575" cy="175" data-object="red dot--anon-0" r="25"/> 100 + </g> 101 + </g> 102 + <g class="layer" data-layer="strands"> 103 + <g data-object="strands--strands#0" style="stroke: #e92e76; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;" transform-origin="250 300"> 104 + <path d="M250,300 Q200,300,200,250" data-object="strands--strands#0" stroke-width="2"/> 105 + </g> 106 + <g data-object="strands--strands#1" style="stroke: #4fecec; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;" transform-origin="250 300"> 107 + <path d="M200,300 Q250,300,250,250" data-object="strands--strands#1" stroke-width="2"/> 108 + </g> 109 + <g data-object="strands--strands#10" style="stroke: #e92e76; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;" transform-origin="250 250"> 110 + <line data-object="strands--strands#10" stroke-width="2" x1="250" x2="150" y1="250" y2="200"/> 111 + </g> 112 + <g data-object="strands--strands#11" style="stroke: #e92e76; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;" transform-origin="250 300"> 113 + <path d="M200,300 Q200,250,250,250" data-object="strands--strands#11" stroke-width="2"/> 114 + </g> 115 + <g data-object="strands--strands#12" style="stroke: #4fecec; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;" transform-origin="250 325"> 116 + <path d="M250,250 Q150,250,150,350" data-object="strands--strands#12" stroke-width="2"/> 117 + </g> 118 + <g data-object="strands--strands#13" style="stroke: #4fecec; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;" transform-origin="250 250"> 119 + <path d="M200,200 Q200,250,250,250" data-object="strands--strands#13" stroke-width="2"/> 120 + </g> 121 + <g data-object="strands--strands#14" style="stroke: #4fecec; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;" transform-origin="200 300"> 122 + <path d="M150,300 Q150,250,200,250" data-object="strands--strands#14" stroke-width="2"/> 123 + </g> 124 + <g data-object="strands--strands#15" style="stroke: #e92e76; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;" transform-origin="225 325"> 125 + <path d="M150,250 Q250,250,250,350" data-object="strands--strands#15" stroke-width="2"/> 126 + </g> 127 + <g data-object="strands--strands#16" style="stroke: #e92e76; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;" transform-origin="200 300"> 128 + <path d="M150,300 Q200,300,200,250" data-object="strands--strands#16" stroke-width="2"/> 129 + </g> 130 + <g data-object="strands--strands#17" style="stroke: #4fecec; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;" transform-origin="225 250"> 131 + <line data-object="strands--strands#17" stroke-width="2" x1="200" x2="200" y1="200" y2="250"/> 132 + </g> 133 + <g data-object="strands--strands#18" style="stroke: #4fecec; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;" transform-origin="250 300"> 134 + <path d="M200,300 Q250,300,250,250" data-object="strands--strands#18" stroke-width="2"/> 135 + </g> 136 + <g data-object="strands--strands#19" style="stroke: #4fecec; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;" transform-origin="250 250"> 137 + <path d="M250,200 Q200,200,200,250" data-object="strands--strands#19" stroke-width="2"/> 138 + </g> 139 + <g data-object="strands--strands#2" style="stroke: #e92e76; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;" transform-origin="300 300"> 140 + <path d="M250,300 Q250,250,300,250" data-object="strands--strands#2" stroke-width="2"/> 141 + </g> 142 + <g data-object="strands--strands#20" style="stroke: #4fecec; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;" transform-origin="200 300"> 143 + <path d="M150,250 Q200,250,200,300" data-object="strands--strands#20" stroke-width="2"/> 144 + </g> 145 + <g data-object="strands--strands#21" style="stroke: #e92e76; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;" transform-origin="275 300"> 146 + <line data-object="strands--strands#21" stroke-width="2" x1="250" x2="250" y1="300" y2="250"/> 147 + </g> 148 + <g data-object="strands--strands#22" style="stroke: #4fecec; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;" transform-origin="200 350"> 149 + <path d="M150,300 Q150,350,200,350" data-object="strands--strands#22" stroke-width="2"/> 150 + </g> 151 + <g data-object="strands--strands#23" style="stroke: #4fecec; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;" transform-origin="250 250"> 152 + <path d="M250,200 Q200,200,200,250" data-object="strands--strands#23" stroke-width="2"/> 153 + </g> 154 + <g data-object="strands--strands#24" style="stroke: #4fecec; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;" transform-origin="250 250"> 155 + <path d="M250,200 Q250,250,200,250" data-object="strands--strands#24" stroke-width="2"/> 156 + </g> 157 + <g data-object="strands--strands#25" style="stroke: #4fecec; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;" transform-origin="225 300"> 158 + <path d="M150,300 Q250,300,250,200" data-object="strands--strands#25" stroke-width="2"/> 159 + </g> 160 + <g data-object="strands--strands#26" style="stroke: #e92e76; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;" transform-origin="200 350"> 161 + <path d="M200,300 Q150,300,150,350" data-object="strands--strands#26" stroke-width="2"/> 162 + </g> 163 + <g data-object="strands--strands#27" style="stroke: #e92e76; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;" transform-origin="250 225"> 164 + <line data-object="strands--strands#27" stroke-width="2" x1="250" x2="200" y1="200" y2="200"/> 165 + </g> 166 + <g data-object="strands--strands#28" style="stroke: #4fecec; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;" transform-origin="300 300"> 167 + <path d="M250,300 Q300,300,300,250" data-object="strands--strands#28" stroke-width="2"/> 168 + </g> 169 + <g data-object="strands--strands#29" style="stroke: #e92e76; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;" transform-origin="200 300"> 170 + <path d="M150,300 Q200,300,200,250" data-object="strands--strands#29" stroke-width="2"/> 171 + </g> 172 + <g data-object="strands--strands#3" style="stroke: #4fecec; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;" transform-origin="200 250"> 173 + <line data-object="strands--strands#3" stroke-width="2" x1="150" x2="200" y1="250" y2="200"/> 174 + </g> 175 + <g data-object="strands--strands#4" style="stroke: #e92e76; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;" transform-origin="300 300"> 176 + <path d="M250,250 Q250,300,300,300" data-object="strands--strands#4" stroke-width="2"/> 177 + </g> 178 + <g data-object="strands--strands#5" style="stroke: #e92e76; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;" transform-origin="225 275"> 179 + <line data-object="strands--strands#5" stroke-width="2" x1="150" x2="250" y1="200" y2="300"/> 180 + </g> 181 + <g data-object="strands--strands#6" style="stroke: #e92e76; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;" transform-origin="250 300"> 182 + <path d="M200,250 Q250,250,250,300" data-object="strands--strands#6" stroke-width="2"/> 183 + </g> 184 + <g data-object="strands--strands#7" style="stroke: #4fecec; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;" transform-origin="250 300"> 185 + <line data-object="strands--strands#7" stroke-width="2" x1="250" x2="150" y1="300" y2="250"/> 186 + </g> 187 + <g data-object="strands--strands#8" style="stroke: #e92e76; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;" transform-origin="225 250"> 188 + <line data-object="strands--strands#8" stroke-width="2" x1="200" x2="200" y1="200" y2="250"/> 189 + </g> 190 + <g data-object="strands--strands#9" style="stroke: #e92e76; fill: transparent;transform-box: fill-box;filter: url(#filter-glow-4); overflow: visible;" transform-origin="275 275"> 191 + <path d="M200,200 Q300,200,300,300" data-object="strands--strands#9" stroke-width="2"/> 192 + </g> 193 + </g> 194 + <g class="layer" data-layer="root"/> 195 + <defs> 196 + <filter filterUnit="userSpaceOnUse" id="filter-glow-4"> 197 + <feGaussianBlur result="coloredBlur" stdDeviation="4"/> 198 + <feMerge> 199 + <feMergeNode in="coloredBlur"/> 200 + <feMergeNode in="SourceGraphic"/> 201 + </feMerge> 202 + </filter> 203 + <filter filterUnit="userSpaceOnUse" id="filter-glow-5"> 204 + <feGaussianBlur result="coloredBlur" stdDeviation="5"/> 205 + <feMerge> 206 + <feMergeNode in="coloredBlur"/> 207 + <feMergeNode in="SourceGraphic"/> 208 + </feMerge> 209 + </filter> 210 + <pattern height="2.6" id="pattern-hatched-45deg-white-1.3-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,1.3,1.3" width="2.6"> 211 + <polygon fill="#ffffff" points="0,0 0.325,0 0,0.325"/> 212 + <polygon fill="#ffffff" points="0,1.3 1.3,0 1.3,0.325 0.325,1.3"/> 213 + </pattern> 214 + <pattern height="5" id="pattern-hatched-45deg-white-2.5-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,2.5,2.5" width="5"> 215 + <polygon fill="#ffffff" points="0,0 0.625,0 0,0.625"/> 216 + <polygon fill="#ffffff" points="0,2.5 2.5,0 2.5,0.625 0.625,2.5"/> 217 + </pattern> 218 + <pattern height="10.2" id="pattern-hatched-45deg-white-5.1-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,5.1,5.1" width="10.2"> 219 + <polygon fill="#ffffff" points="0,0 1.275,0 0,1.275"/> 220 + <polygon fill="#ffffff" points="0,5.1 5.1,0 5.1,1.275 1.275,5.1"/> 221 + </pattern> 222 + <pattern height="14.6" id="pattern-hatched-45deg-white-7.3-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,7.3,7.3" width="14.6"> 223 + <polygon fill="#ffffff" points="0,0 1.825,0 0,1.825"/> 224 + <polygon fill="#ffffff" points="0,7.3 7.3,0 7.3,1.825 1.825,7.3"/> 225 + </pattern> 226 + <pattern height="6.6" id="pattern-hatched-45deg-white-3.3-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,3.3,3.3" width="6.6"> 227 + <polygon fill="#ffffff" points="0,0 0.825,0 0,0.825"/> 228 + <polygon fill="#ffffff" points="0,3.3 3.3,0 3.3,0.825 0.825,3.3"/> 229 + </pattern> 230 + <pattern height="2.2" id="pattern-hatched-45deg-white-1.1-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,1.1,1.1" width="2.2"> 231 + <polygon fill="#ffffff" points="0,0 0.275,0 0,0.275"/> 232 + <polygon fill="#ffffff" points="0,1.1 1.1,0 1.1,0.275 0.275,1.1"/> 233 + </pattern> 234 + <pattern height="17" id="pattern-hatched-45deg-white-8.5-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,8.5,8.5" width="17"> 235 + <polygon fill="#ffffff" points="0,0 2.125,0 0,2.125"/> 236 + <polygon fill="#ffffff" points="0,8.5 8.5,0 8.5,2.125 2.125,8.5"/> 237 + </pattern> 238 + <pattern height="18.4" id="pattern-hatched-45deg-white-9.2-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,9.2,9.2" width="18.4"> 239 + <polygon fill="#ffffff" points="0,0 2.3,0 0,2.3"/> 240 + <polygon fill="#ffffff" points="0,9.2 9.2,0 9.2,2.3 2.3,9.2"/> 241 + </pattern> 242 + <pattern height="16.4" id="pattern-hatched-45deg-white-8.2-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,8.2,8.2" width="16.4"> 243 + <polygon fill="#ffffff" points="0,0 2.05,0 0,2.05"/> 244 + <polygon fill="#ffffff" points="0,8.2 8.2,0 8.2,2.05 2.05,8.2"/> 245 + </pattern> 246 + <pattern height="15.8" id="pattern-hatched-45deg-white-7.9-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,7.9,7.9" width="15.8"> 247 + <polygon fill="#ffffff" points="0,0 1.975,0 0,1.975"/> 248 + <polygon fill="#ffffff" points="0,7.9 7.9,0 7.9,1.975 1.975,7.9"/> 249 + </pattern> 250 + <pattern height="16" id="pattern-hatched-45deg-white-8-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,8,8" width="16"> 251 + <polygon fill="#ffffff" points="0,0 2,0 0,2"/> 252 + <polygon fill="#ffffff" points="0,8 8,0 8,2 2,8"/> 253 + </pattern> 254 + <pattern height="17.4" id="pattern-hatched-45deg-white-8.7-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,8.7,8.7" width="17.4"> 255 + <polygon fill="#ffffff" points="0,0 2.175,0 0,2.175"/> 256 + <polygon fill="#ffffff" points="0,8.7 8.7,0 8.7,2.175 2.175,8.7"/> 257 + </pattern> 258 + <pattern height="13" id="pattern-hatched-45deg-white-6.5-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,6.5,6.5" width="13"> 259 + <polygon fill="#ffffff" points="0,0 1.625,0 0,1.625"/> 260 + <polygon fill="#ffffff" points="0,6.5 6.5,0 6.5,1.625 1.625,6.5"/> 261 + </pattern> 262 + <pattern height="18" id="pattern-hatched-45deg-white-9-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,9,9" width="18"> 263 + <polygon fill="#ffffff" points="0,0 2.25,0 0,2.25"/> 264 + <polygon fill="#ffffff" points="0,9 9,0 9,2.25 2.25,9"/> 265 + </pattern> 266 + <pattern height="2.8" id="pattern-hatched-45deg-white-1.4-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,1.4,1.4" width="2.8"> 267 + <polygon fill="#ffffff" points="0,0 0.35,0 0,0.35"/> 268 + <polygon fill="#ffffff" points="0,1.4 1.4,0 1.4,0.35 0.35,1.4"/> 269 + </pattern> 270 + <pattern height="5.6" id="pattern-hatched-45deg-white-2.8-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,2.8,2.8" width="5.6"> 271 + <polygon fill="#ffffff" points="0,0 0.7,0 0,0.7"/> 272 + <polygon fill="#ffffff" points="0,2.8 2.8,0 2.8,0.7 0.7,2.8"/> 273 + </pattern> 274 + <pattern height="2" id="pattern-hatched-45deg-white-1-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,1,1" width="2"> 275 + <polygon fill="#ffffff" points="0,0 0.25,0 0,0.25"/> 276 + <polygon fill="#ffffff" points="0,1 1,0 1,0.25 0.25,1"/> 277 + </pattern> 278 + <pattern height="3.2" id="pattern-hatched-45deg-white-1.6-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,1.6,1.6" width="3.2"> 279 + <polygon fill="#ffffff" points="0,0 0.4,0 0,0.4"/> 280 + <polygon fill="#ffffff" points="0,1.6 1.6,0 1.6,0.4 0.4,1.6"/> 281 + </pattern> 282 + <pattern height="8.2" id="pattern-hatched-45deg-white-4.1-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,4.1,4.1" width="8.2"> 283 + <polygon fill="#ffffff" points="0,0 1.025,0 0,1.025"/> 284 + <polygon fill="#ffffff" points="0,4.1 4.1,0 4.1,1.025 1.025,4.1"/> 285 + </pattern> 286 + <pattern height="10.4" id="pattern-hatched-45deg-white-5.2-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,5.2,5.2" width="10.4"> 287 + <polygon fill="#ffffff" points="0,0 1.3,0 0,1.3"/> 288 + <polygon fill="#ffffff" points="0,5.2 5.2,0 5.2,1.3 1.3,5.2"/> 289 + </pattern> 290 + <pattern height="7.2" id="pattern-hatched-45deg-white-3.6-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,3.6,3.6" width="7.2"> 291 + <polygon fill="#ffffff" points="0,0 0.9,0 0,0.9"/> 292 + <polygon fill="#ffffff" points="0,3.6 3.6,0 3.6,0.9 0.9,3.6"/> 293 + </pattern> 294 + <pattern height="11" id="pattern-hatched-45deg-white-5.5-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,5.5,5.5" width="11"> 295 + <polygon fill="#ffffff" points="0,0 1.375,0 0,1.375"/> 296 + <polygon fill="#ffffff" points="0,5.5 5.5,0 5.5,1.375 1.375,5.5"/> 297 + </pattern> 298 + <pattern height="12" id="pattern-hatched-45deg-white-6-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,6,6" width="12"> 299 + <polygon fill="#ffffff" points="0,0 1.5,0 0,1.5"/> 300 + <polygon fill="#ffffff" points="0,6 6,0 6,1.5 1.5,6"/> 301 + </pattern> 302 + <pattern height="12.8" id="pattern-hatched-45deg-white-6.4-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,6.4,6.4" width="12.8"> 303 + <polygon fill="#ffffff" points="0,0 1.6,0 0,1.6"/> 304 + <polygon fill="#ffffff" points="0,6.4 6.4,0 6.4,1.6 1.6,6.4"/> 305 + </pattern> 306 + <pattern height="6" id="pattern-hatched-45deg-white-3-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,3,3" width="6"> 307 + <polygon fill="#ffffff" points="0,0 0.75,0 0,0.75"/> 308 + <polygon fill="#ffffff" points="0,3 3,0 3,0.75 0.75,3"/> 309 + </pattern> 310 + <pattern height="14.2" id="pattern-hatched-45deg-white-7.1-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,7.1,7.1" width="14.2"> 311 + <polygon fill="#ffffff" points="0,0 1.775,0 0,1.775"/> 312 + <polygon fill="#ffffff" points="0,7.1 7.1,0 7.1,1.775 1.775,7.1"/> 313 + </pattern> 314 + <pattern height="16.6" id="pattern-hatched-45deg-white-8.3-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,8.3,8.3" width="16.6"> 315 + <polygon fill="#ffffff" points="0,0 2.075,0 0,2.075"/> 316 + <polygon fill="#ffffff" points="0,8.3 8.3,0 8.3,2.075 2.075,8.3"/> 317 + </pattern> 318 + <pattern height="14" id="pattern-hatched-45deg-white-7-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,7,7" width="14"> 319 + <polygon fill="#ffffff" points="0,0 1.75,0 0,1.75"/> 320 + <polygon fill="#ffffff" points="0,7 7,0 7,1.75 1.75,7"/> 321 + </pattern> 322 + <pattern height="16.8" id="pattern-hatched-45deg-white-8.4-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,8.4,8.4" width="16.8"> 323 + <polygon fill="#ffffff" points="0,0 2.1,0 0,2.1"/> 324 + <polygon fill="#ffffff" points="0,8.4 8.4,0 8.4,2.1 2.1,8.4"/> 325 + </pattern> 326 + <pattern height="10.6" id="pattern-hatched-45deg-white-5.3-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,5.3,5.3" width="10.6"> 327 + <polygon fill="#ffffff" points="0,0 1.325,0 0,1.325"/> 328 + <polygon fill="#ffffff" points="0,5.3 5.3,0 5.3,1.325 1.325,5.3"/> 329 + </pattern> 330 + <pattern height="11.2" id="pattern-hatched-45deg-white-5.6-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,5.6,5.6" width="11.2"> 331 + <polygon fill="#ffffff" points="0,0 1.4,0 0,1.4"/> 332 + <polygon fill="#ffffff" points="0,5.6 5.6,0 5.6,1.4 1.4,5.6"/> 333 + </pattern> 334 + <pattern height="11.4" id="pattern-hatched-45deg-white-5.7-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,5.7,5.7" width="11.4"> 335 + <polygon fill="#ffffff" points="0,0 1.425,0 0,1.425"/> 336 + <polygon fill="#ffffff" points="0,5.7 5.7,0 5.7,1.425 1.425,5.7"/> 337 + </pattern> 338 + <pattern height="5.4" id="pattern-hatched-45deg-white-2.7-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,2.7,2.7" width="5.4"> 339 + <polygon fill="#ffffff" points="0,0 0.675,0 0,0.675"/> 340 + <polygon fill="#ffffff" points="0,2.7 2.7,0 2.7,0.675 0.675,2.7"/> 341 + </pattern> 342 + <pattern height="3" id="pattern-hatched-45deg-white-1.5-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,1.5,1.5" width="3"> 343 + <polygon fill="#ffffff" points="0,0 0.375,0 0,0.375"/> 344 + <polygon fill="#ffffff" points="0,1.5 1.5,0 1.5,0.375 0.375,1.5"/> 345 + </pattern> 346 + <pattern height="13.6" id="pattern-hatched-45deg-white-6.8-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,6.8,6.8" width="13.6"> 347 + <polygon fill="#ffffff" points="0,0 1.7,0 0,1.7"/> 348 + <polygon fill="#ffffff" points="0,6.8 6.8,0 6.8,1.7 1.7,6.8"/> 349 + </pattern> 350 + <pattern height="3.4" id="pattern-hatched-45deg-white-1.7-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,1.7,1.7" width="3.4"> 351 + <polygon fill="#ffffff" points="0,0 0.425,0 0,0.425"/> 352 + <polygon fill="#ffffff" points="0,1.7 1.7,0 1.7,0.425 0.425,1.7"/> 353 + </pattern> 354 + <pattern height="6.4" id="pattern-hatched-45deg-white-3.2-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,3.2,3.2" width="6.4"> 355 + <polygon fill="#ffffff" points="0,0 0.8,0 0,0.8"/> 356 + <polygon fill="#ffffff" points="0,3.2 3.2,0 3.2,0.8 0.8,3.2"/> 357 + </pattern> 358 + <pattern height="6.8" id="pattern-hatched-45deg-white-3.4-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,3.4,3.4" width="6.8"> 359 + <polygon fill="#ffffff" points="0,0 0.85,0 0,0.85"/> 360 + <polygon fill="#ffffff" points="0,3.4 3.4,0 3.4,0.85 0.85,3.4"/> 361 + </pattern> 362 + <pattern height="12.4" id="pattern-hatched-45deg-white-6.2-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,6.2,6.2" width="12.4"> 363 + <polygon fill="#ffffff" points="0,0 1.55,0 0,1.55"/> 364 + <polygon fill="#ffffff" points="0,6.2 6.2,0 6.2,1.55 1.55,6.2"/> 365 + </pattern> 366 + <pattern height="4.6" id="pattern-hatched-45deg-white-2.3-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,2.3,2.3" width="4.6"> 367 + <polygon fill="#ffffff" points="0,0 0.575,0 0,0.575"/> 368 + <polygon fill="#ffffff" points="0,2.3 2.3,0 2.3,0.575 0.575,2.3"/> 369 + </pattern> 370 + <pattern height="9.2" id="pattern-hatched-45deg-white-4.6-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,4.6,4.6" width="9.2"> 371 + <polygon fill="#ffffff" points="0,0 1.15,0 0,1.15"/> 372 + <polygon fill="#ffffff" points="0,4.6 4.6,0 4.6,1.15 1.15,4.6"/> 373 + </pattern> 374 + <pattern height="15.6" id="pattern-hatched-45deg-white-7.8-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,7.8,7.8" width="15.6"> 375 + <polygon fill="#ffffff" points="0,0 1.95,0 0,1.95"/> 376 + <polygon fill="#ffffff" points="0,7.8 7.8,0 7.8,1.95 1.95,7.8"/> 377 + </pattern> 378 + <pattern height="5.8" id="pattern-hatched-45deg-white-2.9-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,2.9,2.9" width="5.8"> 379 + <polygon fill="#ffffff" points="0,0 0.725,0 0,0.725"/> 380 + <polygon fill="#ffffff" points="0,2.9 2.9,0 2.9,0.725 0.725,2.9"/> 381 + </pattern> 382 + <pattern height="9.8" id="pattern-hatched-45deg-white-4.9-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,4.9,4.9" width="9.8"> 383 + <polygon fill="#ffffff" points="0,0 1.225,0 0,1.225"/> 384 + <polygon fill="#ffffff" points="0,4.9 4.9,0 4.9,1.225 1.225,4.9"/> 385 + </pattern> 386 + <pattern height="9" id="pattern-hatched-45deg-white-4.5-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,4.5,4.5" width="9"> 387 + <polygon fill="#ffffff" points="0,0 1.125,0 0,1.125"/> 388 + <polygon fill="#ffffff" points="0,4.5 4.5,0 4.5,1.125 1.125,4.5"/> 389 + </pattern> 390 + <pattern height="10.8" id="pattern-hatched-45deg-white-5.4-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,5.4,5.4" width="10.8"> 391 + <polygon fill="#ffffff" points="0,0 1.35,0 0,1.35"/> 392 + <polygon fill="#ffffff" points="0,5.4 5.4,0 5.4,1.35 1.35,5.4"/> 393 + </pattern> 394 + <pattern height="3.8" id="pattern-hatched-45deg-white-1.9-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,1.9,1.9" width="3.8"> 395 + <polygon fill="#ffffff" points="0,0 0.475,0 0,0.475"/> 396 + <polygon fill="#ffffff" points="0,1.9 1.9,0 1.9,0.475 0.475,1.9"/> 397 + </pattern> 398 + <pattern height="15" id="pattern-hatched-45deg-white-7.5-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,7.5,7.5" width="15"> 399 + <polygon fill="#ffffff" points="0,0 1.875,0 0,1.875"/> 400 + <polygon fill="#ffffff" points="0,7.5 7.5,0 7.5,1.875 1.875,7.5"/> 401 + </pattern> 402 + <pattern height="7.4" id="pattern-hatched-45deg-white-3.7-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,3.7,3.7" width="7.4"> 403 + <polygon fill="#ffffff" points="0,0 0.925,0 0,0.925"/> 404 + <polygon fill="#ffffff" points="0,3.7 3.7,0 3.7,0.925 0.925,3.7"/> 405 + </pattern> 406 + <pattern height="1" id="pattern-hatched-45deg-white-0.5-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,0.5,0.5" width="1"> 407 + <polygon fill="#ffffff" points="0,0 0.125,0 0,0.125"/> 408 + <polygon fill="#ffffff" points="0,0.5 0.5,0 0.5,0.125 0.125,0.5"/> 409 + </pattern> 410 + <pattern height="14.4" id="pattern-hatched-45deg-white-7.2-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,7.2,7.2" width="14.4"> 411 + <polygon fill="#ffffff" points="0,0 1.8,0 0,1.8"/> 412 + <polygon fill="#ffffff" points="0,7.2 7.2,0 7.2,1.8 1.8,7.2"/> 413 + </pattern> 414 + <pattern height="7.8" id="pattern-hatched-45deg-white-3.9-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,3.9,3.9" width="7.8"> 415 + <polygon fill="#ffffff" points="0,0 0.975,0 0,0.975"/> 416 + <polygon fill="#ffffff" points="0,3.9 3.9,0 3.9,0.975 0.975,3.9"/> 417 + </pattern> 418 + <pattern height="6.2" id="pattern-hatched-45deg-white-3.1-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,3.1,3.1" width="6.2"> 419 + <polygon fill="#ffffff" points="0,0 0.775,0 0,0.775"/> 420 + <polygon fill="#ffffff" points="0,3.1 3.1,0 3.1,0.775 0.775,3.1"/> 421 + </pattern> 422 + <pattern height="17.8" id="pattern-hatched-45deg-white-8.9-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,8.9,8.9" width="17.8"> 423 + <polygon fill="#ffffff" points="0,0 2.225,0 0,2.225"/> 424 + <polygon fill="#ffffff" points="0,8.9 8.9,0 8.9,2.225 2.225,8.9"/> 425 + </pattern> 426 + <pattern height="17.2" id="pattern-hatched-45deg-white-8.6-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,8.6,8.6" width="17.2"> 427 + <polygon fill="#ffffff" points="0,0 2.15,0 0,2.15"/> 428 + <polygon fill="#ffffff" points="0,8.6 8.6,0 8.6,2.15 2.15,8.6"/> 429 + </pattern> 430 + <pattern height="15.2" id="pattern-hatched-45deg-white-7.6-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,7.6,7.6" width="15.2"> 431 + <polygon fill="#ffffff" points="0,0 1.9,0 0,1.9"/> 432 + <polygon fill="#ffffff" points="0,7.6 7.6,0 7.6,1.9 1.9,7.6"/> 433 + </pattern> 434 + <pattern height="18.2" id="pattern-hatched-45deg-white-9.1-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,9.1,9.1" width="18.2"> 435 + <polygon fill="#ffffff" points="0,0 2.275,0 0,2.275"/> 436 + <polygon fill="#ffffff" points="0,9.1 9.1,0 9.1,2.275 2.275,9.1"/> 437 + </pattern> 438 + <pattern height="3.6" id="pattern-hatched-45deg-white-1.8-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,1.8,1.8" width="3.6"> 439 + <polygon fill="#ffffff" points="0,0 0.45,0 0,0.45"/> 440 + <polygon fill="#ffffff" points="0,1.8 1.8,0 1.8,0.45 0.45,1.8"/> 441 + </pattern> 442 + <pattern height="9.6" id="pattern-hatched-45deg-white-4.8-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,4.8,4.8" width="9.6"> 443 + <polygon fill="#ffffff" points="0,0 1.2,0 0,1.2"/> 444 + <polygon fill="#ffffff" points="0,4.8 4.8,0 4.8,1.2 1.2,4.8"/> 445 + </pattern> 446 + <pattern height="8.8" id="pattern-hatched-45deg-white-4.4-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,4.4,4.4" width="8.8"> 447 + <polygon fill="#ffffff" points="0,0 1.1,0 0,1.1"/> 448 + <polygon fill="#ffffff" points="0,4.4 4.4,0 4.4,1.1 1.1,4.4"/> 449 + </pattern> 450 + <pattern height="4.2" id="pattern-hatched-45deg-white-2.1-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,2.1,2.1" width="4.2"> 451 + <polygon fill="#ffffff" points="0,0 0.525,0 0,0.525"/> 452 + <polygon fill="#ffffff" points="0,2.1 2.1,0 2.1,0.525 0.525,2.1"/> 453 + </pattern> 454 + <pattern height="13.8" id="pattern-hatched-45deg-white-6.9-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,6.9,6.9" width="13.8"> 455 + <polygon fill="#ffffff" points="0,0 1.725,0 0,1.725"/> 456 + <polygon fill="#ffffff" points="0,6.9 6.9,0 6.9,1.725 1.725,6.9"/> 457 + </pattern> 458 + <pattern height="5.2" id="pattern-hatched-45deg-white-2.6-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,2.6,2.6" width="5.2"> 459 + <polygon fill="#ffffff" points="0,0 0.65,0 0,0.65"/> 460 + <polygon fill="#ffffff" points="0,2.6 2.6,0 2.6,0.65 0.65,2.6"/> 461 + </pattern> 462 + <pattern height="15.4" id="pattern-hatched-45deg-white-7.7-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,7.7,7.7" width="15.4"> 463 + <polygon fill="#ffffff" points="0,0 1.925,0 0,1.925"/> 464 + <polygon fill="#ffffff" points="0,7.7 7.7,0 7.7,1.925 1.925,7.7"/> 465 + </pattern> 466 + <pattern height="1.6" id="pattern-hatched-45deg-white-0.8-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,0.8,0.8" width="1.6"> 467 + <polygon fill="#ffffff" points="0,0 0.2,0 0,0.2"/> 468 + <polygon fill="#ffffff" points="0,0.8 0.8,0 0.8,0.2 0.2,0.8"/> 469 + </pattern> 470 + <pattern height="9.4" id="pattern-hatched-45deg-white-4.7-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,4.7,4.7" width="9.4"> 471 + <polygon fill="#ffffff" points="0,0 1.175,0 0,1.175"/> 472 + <polygon fill="#ffffff" points="0,4.7 4.7,0 4.7,1.175 1.175,4.7"/> 473 + </pattern> 474 + <pattern height="10" id="pattern-hatched-45deg-white-5-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,5,5" width="10"> 475 + <polygon fill="#ffffff" points="0,0 1.25,0 0,1.25"/> 476 + <polygon fill="#ffffff" points="0,5 5,0 5,1.25 1.25,5"/> 477 + </pattern> 478 + <pattern height="12.2" id="pattern-hatched-45deg-white-6.1-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,6.1,6.1" width="12.2"> 479 + <polygon fill="#ffffff" points="0,0 1.525,0 0,1.525"/> 480 + <polygon fill="#ffffff" points="0,6.1 6.1,0 6.1,1.525 1.525,6.1"/> 481 + </pattern> 482 + <pattern height="1.2" id="pattern-hatched-45deg-white-0.6-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,0.6,0.6" width="1.2"> 483 + <polygon fill="#ffffff" points="0,0 0.15,0 0,0.15"/> 484 + <polygon fill="#ffffff" points="0,0.6 0.6,0 0.6,0.15 0.15,0.6"/> 485 + </pattern> 486 + <pattern height="2.4" id="pattern-hatched-45deg-white-1.2-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,1.2,1.2" width="2.4"> 487 + <polygon fill="#ffffff" points="0,0 0.3,0 0,0.3"/> 488 + <polygon fill="#ffffff" points="0,1.2 1.2,0 1.2,0.3 0.3,1.2"/> 489 + </pattern> 490 + <pattern height="12.6" id="pattern-hatched-45deg-white-6.3-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,6.3,6.3" width="12.6"> 491 + <polygon fill="#ffffff" points="0,0 1.575,0 0,1.575"/> 492 + <polygon fill="#ffffff" points="0,6.3 6.3,0 6.3,1.575 1.575,6.3"/> 493 + </pattern> 494 + <pattern height="14.8" id="pattern-hatched-45deg-white-7.4-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,7.4,7.4" width="14.8"> 495 + <polygon fill="#ffffff" points="0,0 1.85,0 0,1.85"/> 496 + <polygon fill="#ffffff" points="0,7.4 7.4,0 7.4,1.85 1.85,7.4"/> 497 + </pattern> 498 + <pattern height="13.4" id="pattern-hatched-45deg-white-6.7-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,6.7,6.7" width="13.4"> 499 + <polygon fill="#ffffff" points="0,0 1.675,0 0,1.675"/> 500 + <polygon fill="#ffffff" points="0,6.7 6.7,0 6.7,1.675 1.675,6.7"/> 501 + </pattern> 502 + <pattern height="16.2" id="pattern-hatched-45deg-white-8.1-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,8.1,8.1" width="16.2"> 503 + <polygon fill="#ffffff" points="0,0 2.025,0 0,2.025"/> 504 + <polygon fill="#ffffff" points="0,8.1 8.1,0 8.1,2.025 2.025,8.1"/> 505 + </pattern> 506 + <pattern height="4" id="pattern-hatched-45deg-white-2-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,2,2" width="4"> 507 + <polygon fill="#ffffff" points="0,0 0.5,0 0,0.5"/> 508 + <polygon fill="#ffffff" points="0,2 2,0 2,0.5 0.5,2"/> 509 + </pattern> 510 + <pattern height="4.8" id="pattern-hatched-45deg-white-2.4-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,2.4,2.4" width="4.8"> 511 + <polygon fill="#ffffff" points="0,0 0.6,0 0,0.6"/> 512 + <polygon fill="#ffffff" points="0,2.4 2.4,0 2.4,0.6 0.6,2.4"/> 513 + </pattern> 514 + <pattern height="7.6" id="pattern-hatched-45deg-white-3.8-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,3.8,3.8" width="7.6"> 515 + <polygon fill="#ffffff" points="0,0 0.95,0 0,0.95"/> 516 + <polygon fill="#ffffff" points="0,3.8 3.8,0 3.8,0.95 0.95,3.8"/> 517 + </pattern> 518 + <pattern height="13.2" id="pattern-hatched-45deg-white-6.6-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,6.6,6.6" width="13.2"> 519 + <polygon fill="#ffffff" points="0,0 1.65,0 0,1.65"/> 520 + <polygon fill="#ffffff" points="0,6.6 6.6,0 6.6,1.65 1.65,6.6"/> 521 + </pattern> 522 + <pattern height="7" id="pattern-hatched-45deg-white-3.5-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,3.5,3.5" width="7"> 523 + <polygon fill="#ffffff" points="0,0 0.875,0 0,0.875"/> 524 + <polygon fill="#ffffff" points="0,3.5 3.5,0 3.5,0.875 0.875,3.5"/> 525 + </pattern> 526 + <pattern height="8.4" id="pattern-hatched-45deg-white-4.2-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,4.2,4.2" width="8.4"> 527 + <polygon fill="#ffffff" points="0,0 1.05,0 0,1.05"/> 528 + <polygon fill="#ffffff" points="0,4.2 4.2,0 4.2,1.05 1.05,4.2"/> 529 + </pattern> 530 + <pattern height="17.6" id="pattern-hatched-45deg-white-8.8-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,8.8,8.8" width="17.6"> 531 + <polygon fill="#ffffff" points="0,0 2.2,0 0,2.2"/> 532 + <polygon fill="#ffffff" points="0,8.8 8.8,0 8.8,2.2 2.2,8.8"/> 533 + </pattern> 534 + <pattern height="11.6" id="pattern-hatched-45deg-white-5.8-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,5.8,5.8" width="11.6"> 535 + <polygon fill="#ffffff" points="0,0 1.45,0 0,1.45"/> 536 + <polygon fill="#ffffff" points="0,5.8 5.8,0 5.8,1.45 1.45,5.8"/> 537 + </pattern> 538 + <pattern height="18.6" id="pattern-hatched-45deg-white-9.3-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,9.3,9.3" width="18.6"> 539 + <polygon fill="#ffffff" points="0,0 2.325,0 0,2.325"/> 540 + <polygon fill="#ffffff" points="0,9.3 9.3,0 9.3,2.325 2.325,9.3"/> 541 + </pattern> 542 + <pattern height="1.4" id="pattern-hatched-45deg-white-0.7-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,0.7,0.7" width="1.4"> 543 + <polygon fill="#ffffff" points="0,0 0.175,0 0,0.175"/> 544 + <polygon fill="#ffffff" points="0,0.7 0.7,0 0.7,0.175 0.175,0.7"/> 545 + </pattern> 546 + <pattern height="8" id="pattern-hatched-45deg-white-4-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,4,4" width="8"> 547 + <polygon fill="#ffffff" points="0,0 1,0 0,1"/> 548 + <polygon fill="#ffffff" points="0,4 4,0 4,1 1,4"/> 549 + </pattern> 550 + <pattern height="4.4" id="pattern-hatched-45deg-white-2.2-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,2.2,2.2" width="4.4"> 551 + <polygon fill="#ffffff" points="0,0 0.55,0 0,0.55"/> 552 + <polygon fill="#ffffff" points="0,2.2 2.2,0 2.2,0.55 0.55,2.2"/> 553 + </pattern> 554 + <pattern height="1.8" id="pattern-hatched-45deg-white-0.9-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,0.9,0.9" width="1.8"> 555 + <polygon fill="#ffffff" points="0,0 0.225,0 0,0.225"/> 556 + <polygon fill="#ffffff" points="0,0.9 0.9,0 0.9,0.225 0.225,0.9"/> 557 + </pattern> 558 + <pattern height="11.8" id="pattern-hatched-45deg-white-5.9-0.25" patternTransform="rotate(0)" patternUnits="userSpaceOnUse" viewBox="0,0,5.9,5.9" width="11.8"> 559 + <polygon fill="#ffffff" points="0,0 1.475,0 0,1.475"/> 560 + <polygon fill="#ffffff" points="0,5.9 5.9,0 5.9,1.475 1.475,5.9"/> 561 + </pattern> 562 + </defs> 563 + </svg>
+3
examples/specimen/Cargo.toml
··· 6 6 [dependencies] 7 7 rand = "0.9.0" 8 8 shapemaker = { version = "1.2.2", path = "../.." } 9 + 10 + [dev-dependencies] 11 + insta = "1.43.2"
+18
examples/specimen/src/main.rs
··· 83 83 .render_to_png("shapeshed.png", 1000) 84 84 .expect("Failed to render shapes_shed as PNG"); 85 85 } 86 + 87 + #[test] 88 + fn test_grid() { 89 + use insta; 90 + insta::assert_snapshot! { grid().render_to_svg_string().unwrap() } 91 + } 92 + 93 + #[test] 94 + fn test_colors_shed() { 95 + use insta; 96 + insta::assert_snapshot! { colors_shed().render_to_svg_string().unwrap() } 97 + } 98 + 99 + #[test] 100 + fn test_shapes_shed() { 101 + use insta; 102 + insta::assert_snapshot! { shapes_shed().render_to_svg_string().unwrap() } 103 + }
+20
examples/specimen/src/snapshots/specimen__colors_shed.snap
··· 1 + --- 2 + source: examples/specimen/src/main.rs 3 + expression: colors_shed().render_to_svg_string().unwrap() 4 + --- 5 + <svg height="150" viewBox="0 0 150 150" width="150" xmlns="http://www.w3.org/2000/svg"> 6 + <rect fill="white" height="150" width="150" x="0" y="0"/> 7 + <g class="layer" data-layer="root"> 8 + <rect data-object="root--anon-0" height="50" style="fill: blue;" width="50" x="0" y="0"/> 9 + <rect data-object="root--anon-1" height="50" style="fill: cyan;" width="50" x="50" y="0"/> 10 + <rect data-object="root--anon-2" height="50" style="fill: yellow;" width="50" x="100" y="0"/> 11 + <rect data-object="root--anon-3" height="50" style="fill: orange;" width="50" x="0" y="50"/> 12 + <rect data-object="root--anon-4" height="50" style="fill: red;" width="50" x="50" y="50"/> 13 + <rect data-object="root--anon-5" height="50" style="fill: brown;" width="50" x="100" y="50"/> 14 + <rect data-object="root--anon-6" height="50" style="fill: purple;" width="50" x="0" y="100"/> 15 + <rect data-object="root--anon-7" height="50" style="fill: pink;" width="50" x="50" y="100"/> 16 + <rect data-object="root--anon-8" height="50" style="fill: green;" width="50" x="100" y="100"/> 17 + </g> 18 + <g class="layer" data-layer="circles"/> 19 + <defs/> 20 + </svg>
+19
examples/specimen/src/snapshots/specimen__grid.snap
··· 1 + --- 2 + source: examples/specimen/src/main.rs 3 + expression: grid().render_to_svg_string().unwrap() 4 + --- 5 + <svg height="170" viewBox="-10 -10 170 170" width="170" xmlns="http://www.w3.org/2000/svg"> 6 + <rect fill="white" height="170" width="170" x="-10" y="-10"/> 7 + <g class="layer" data-layer="root"> 8 + <circle cx="0" cy="0" data-object="root--anon-0" r="2" style="fill: black;"/> 9 + <circle cx="50" cy="0" data-object="root--anon-1" r="2" style="fill: black;"/> 10 + <circle cx="100" cy="0" data-object="root--anon-2" r="2" style="fill: black;"/> 11 + <circle cx="0" cy="50" data-object="root--anon-3" r="2" style="fill: black;"/> 12 + <circle cx="50" cy="50" data-object="root--anon-4" r="2" style="fill: black;"/> 13 + <circle cx="100" cy="50" data-object="root--anon-5" r="2" style="fill: black;"/> 14 + <circle cx="0" cy="100" data-object="root--anon-6" r="2" style="fill: black;"/> 15 + <circle cx="50" cy="100" data-object="root--anon-7" r="2" style="fill: black;"/> 16 + <circle cx="100" cy="100" data-object="root--anon-8" r="2" style="fill: black;"/> 17 + </g> 18 + <defs/> 19 + </svg>
+19
examples/specimen/src/snapshots/specimen__shapes_shed.snap
··· 1 + --- 2 + source: examples/specimen/src/main.rs 3 + expression: shapes_shed().render_to_svg_string().unwrap() 4 + --- 5 + <svg height="170" viewBox="-10 -10 170 170" width="170" xmlns="http://www.w3.org/2000/svg"> 6 + <rect fill="white" height="170" width="170" x="-10" y="-10"/> 7 + <g class="layer" data-layer="root"> 8 + <circle cx="25" cy="25" data-object="root--anon-0" r="25" style="fill: black;"/> 9 + <path d="M50,50 Q100,50,100,0" data-object="root--anon-1" stroke-width="5" style="stroke: black; fill: transparent;"/> 10 + <path d="M100,50 Q100,0,150,0" data-object="root--anon-2" stroke-width="5" style="stroke: black; fill: transparent;"/> 11 + <circle cx="0" cy="50" data-object="root--anon-3" r="5" style="fill: black;"/> 12 + <line data-object="root--anon-4" stroke-width="5" style="stroke: black; fill: transparent;" x1="50" x2="100" y1="50" y2="100"/> 13 + <rect data-object="root--anon-5" height="50" style="fill: black;" width="50" x="0" y="100"/> 14 + <circle cx="100" cy="150" data-object="root--anon-6" r="2" style="fill: black;"/> 15 + <path d="M100,50 L150,50 L150,100 z" data-object="root--anon-7" style="fill: black;"/> 16 + <text data-object="root--anon-8" dominant-baseline="hanging" font-family="Inconsolata" font-size="5pt" style="fill: black;" x="0" y="0">test</text> 17 + </g> 18 + <defs/> 19 + </svg>