├── Archive ├── Handmade Artwork │ ├── handcut paper lattice 1 - 9x2feet.jpg │ ├── handcut paper lattice 2 - 3x2feet.JPG │ ├── paper handdrawn 1 - 7x10feet.jpg │ ├── paper handdrawn 1 closeup - 7x10feet.jpg │ ├── paper handdrawn 2.JPG │ ├── paper handdrawn 3.JPG │ ├── paper handdrawn 4.JPG │ └── paper handdrawn 5.JPG ├── Software Sketches │ ├── 1st-Draft_2006.jpg │ ├── 2nd-Draft_P1.JPG │ ├── 2nd-Draft_P2.JPG │ ├── 2nd-Draft_P3.JPG │ ├── 2nd-Draft_P4.JPG │ ├── 2nd-Draft_P5.JPG │ ├── 3rd-Draft_P01_StartUp.jpg │ ├── 3rd-Draft_P02_DrawGuideLines.jpg │ ├── 3rd-Draft_P03_PreviewRecursion.jpg │ ├── 3rd-Draft_P04_ReverseDirection.jpg │ ├── 3rd-Draft_P05_InitialColorFill.jpg │ ├── 3rd-Draft_P06_DepthOverride.jpg │ ├── 3rd-Draft_P07_Disable.jpg │ ├── 3rd-Draft_P08_IterationSpacing.jpg │ ├── 3rd-Draft_P09_FooterBufferHeight.jpg │ ├── 3rd-Draft_P10_InnerEdge.jpg │ └── 3rd-Draft_P11_GIF_ExampleOfTechnique.gif ├── Vector-Recursion-Workbench_screenshot1.JPG └── Vector-Recursion-Workbench_screenshot2.JPG ├── Examples ├── FaceSilhouette_001.json ├── FaceSilhouette_001.svg ├── FaceSilhouette_001_BackgroundImage.jpg ├── FaceSilhouette_001b.json ├── FaceSilhouette_001b.svg ├── GoldenRatio_001.json ├── GoldenRatio_001.svg ├── GoldenRatio_001_rasterized.jpg ├── GoldenRatio_001b.json ├── GoldenRatio_001b.svg ├── GoldenRatio_002.json ├── GoldenRatio_002.svg ├── GoldenRatio_002_rasterized.jpg ├── GoldenRatio_002b.json ├── GoldenRatio_002b.svg ├── GoldenRatio_BackgroundImage.jpg ├── VRW_icon.json ├── VRW_icon.svg ├── beehive_001.json ├── beehive_001.svg ├── beehive_001_rasterized.jpg ├── handcut_mimic_001.json ├── handcut_mimic_001.svg ├── handcut_mimic_001_rasterized.jpg ├── handcut_mimic_001b.json ├── handcut_mimic_001b.svg ├── handcut_mimic_001b_rasterized.jpg ├── handcut_mimic_001c.json ├── handcut_mimic_001c.svg ├── handcut_mimic_001d.json ├── handcut_mimic_001d.svg ├── handcut_mimic_001d_rasterized.jpg ├── handcut_photo_original.jpg ├── hands_001.json ├── hands_001.svg ├── hands_001_BackgroundImage.jpg ├── hexagon_001.json ├── hexagon_001.svg ├── hexagon_001_cutout.json ├── hexagon_001_cutout.svg ├── hexagon_001_cutout_rasterized.jpg ├── hexagon_001_rasterized.jpg ├── hexagon_001b.json ├── hexagon_001b.svg ├── hexagon_002.json ├── hexagon_002.svg ├── hexagon_003.json ├── hexagon_003.svg ├── hexagon_003b.json ├── hexagon_003b.svg ├── hexagon_003b_rasterized.jpg ├── hexagon_004.json ├── hexagon_004.svg ├── vanilla_001.json ├── vanilla_001.svg ├── vanilla_002.json ├── vanilla_002.svg ├── vanilla_003.json ├── vanilla_003.svg ├── vanilla_004.json ├── vanilla_004.svg ├── vanilla_005.json ├── vanilla_005.svg ├── vanilla_005b.json ├── vanilla_005b.svg ├── vanilla_006.json ├── vanilla_006.svg ├── vanilla_007.json ├── vanilla_007.svg ├── vanilla_007_cutout.json ├── vanilla_007_cutout.svg ├── vanilla_007_cutout_rasterized.jpg └── vanilla_007_rasterized.jpg ├── LICENSE ├── README.md ├── VRW-gui.py ├── geometry.py ├── project.py └── recursion_excursion.py /Archive/Handmade Artwork/handcut paper lattice 1 - 9x2feet.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuclearsugar/VectorRecursionWorkbench/3881605d9c6bd4e64d4252f3ee6cb7c1a9ea64ed/Archive/Handmade Artwork/handcut paper lattice 1 - 9x2feet.jpg -------------------------------------------------------------------------------- /Archive/Handmade Artwork/handcut paper lattice 2 - 3x2feet.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuclearsugar/VectorRecursionWorkbench/3881605d9c6bd4e64d4252f3ee6cb7c1a9ea64ed/Archive/Handmade Artwork/handcut paper lattice 2 - 3x2feet.JPG -------------------------------------------------------------------------------- /Archive/Handmade Artwork/paper handdrawn 1 - 7x10feet.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuclearsugar/VectorRecursionWorkbench/3881605d9c6bd4e64d4252f3ee6cb7c1a9ea64ed/Archive/Handmade Artwork/paper handdrawn 1 - 7x10feet.jpg -------------------------------------------------------------------------------- /Archive/Handmade Artwork/paper handdrawn 1 closeup - 7x10feet.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuclearsugar/VectorRecursionWorkbench/3881605d9c6bd4e64d4252f3ee6cb7c1a9ea64ed/Archive/Handmade Artwork/paper handdrawn 1 closeup - 7x10feet.jpg -------------------------------------------------------------------------------- /Archive/Handmade Artwork/paper handdrawn 2.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuclearsugar/VectorRecursionWorkbench/3881605d9c6bd4e64d4252f3ee6cb7c1a9ea64ed/Archive/Handmade Artwork/paper handdrawn 2.JPG -------------------------------------------------------------------------------- /Archive/Handmade Artwork/paper handdrawn 3.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuclearsugar/VectorRecursionWorkbench/3881605d9c6bd4e64d4252f3ee6cb7c1a9ea64ed/Archive/Handmade Artwork/paper handdrawn 3.JPG -------------------------------------------------------------------------------- /Archive/Handmade Artwork/paper handdrawn 4.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuclearsugar/VectorRecursionWorkbench/3881605d9c6bd4e64d4252f3ee6cb7c1a9ea64ed/Archive/Handmade Artwork/paper handdrawn 4.JPG -------------------------------------------------------------------------------- /Archive/Handmade Artwork/paper handdrawn 5.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuclearsugar/VectorRecursionWorkbench/3881605d9c6bd4e64d4252f3ee6cb7c1a9ea64ed/Archive/Handmade Artwork/paper handdrawn 5.JPG -------------------------------------------------------------------------------- /Archive/Software Sketches/1st-Draft_2006.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuclearsugar/VectorRecursionWorkbench/3881605d9c6bd4e64d4252f3ee6cb7c1a9ea64ed/Archive/Software Sketches/1st-Draft_2006.jpg -------------------------------------------------------------------------------- /Archive/Software Sketches/2nd-Draft_P1.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuclearsugar/VectorRecursionWorkbench/3881605d9c6bd4e64d4252f3ee6cb7c1a9ea64ed/Archive/Software Sketches/2nd-Draft_P1.JPG -------------------------------------------------------------------------------- /Archive/Software Sketches/2nd-Draft_P2.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuclearsugar/VectorRecursionWorkbench/3881605d9c6bd4e64d4252f3ee6cb7c1a9ea64ed/Archive/Software Sketches/2nd-Draft_P2.JPG -------------------------------------------------------------------------------- /Archive/Software Sketches/2nd-Draft_P3.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuclearsugar/VectorRecursionWorkbench/3881605d9c6bd4e64d4252f3ee6cb7c1a9ea64ed/Archive/Software Sketches/2nd-Draft_P3.JPG -------------------------------------------------------------------------------- /Archive/Software Sketches/2nd-Draft_P4.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuclearsugar/VectorRecursionWorkbench/3881605d9c6bd4e64d4252f3ee6cb7c1a9ea64ed/Archive/Software Sketches/2nd-Draft_P4.JPG -------------------------------------------------------------------------------- /Archive/Software Sketches/2nd-Draft_P5.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuclearsugar/VectorRecursionWorkbench/3881605d9c6bd4e64d4252f3ee6cb7c1a9ea64ed/Archive/Software Sketches/2nd-Draft_P5.JPG -------------------------------------------------------------------------------- /Archive/Software Sketches/3rd-Draft_P01_StartUp.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuclearsugar/VectorRecursionWorkbench/3881605d9c6bd4e64d4252f3ee6cb7c1a9ea64ed/Archive/Software Sketches/3rd-Draft_P01_StartUp.jpg -------------------------------------------------------------------------------- /Archive/Software Sketches/3rd-Draft_P02_DrawGuideLines.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuclearsugar/VectorRecursionWorkbench/3881605d9c6bd4e64d4252f3ee6cb7c1a9ea64ed/Archive/Software Sketches/3rd-Draft_P02_DrawGuideLines.jpg -------------------------------------------------------------------------------- /Archive/Software Sketches/3rd-Draft_P03_PreviewRecursion.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuclearsugar/VectorRecursionWorkbench/3881605d9c6bd4e64d4252f3ee6cb7c1a9ea64ed/Archive/Software Sketches/3rd-Draft_P03_PreviewRecursion.jpg -------------------------------------------------------------------------------- /Archive/Software Sketches/3rd-Draft_P04_ReverseDirection.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuclearsugar/VectorRecursionWorkbench/3881605d9c6bd4e64d4252f3ee6cb7c1a9ea64ed/Archive/Software Sketches/3rd-Draft_P04_ReverseDirection.jpg -------------------------------------------------------------------------------- /Archive/Software Sketches/3rd-Draft_P05_InitialColorFill.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuclearsugar/VectorRecursionWorkbench/3881605d9c6bd4e64d4252f3ee6cb7c1a9ea64ed/Archive/Software Sketches/3rd-Draft_P05_InitialColorFill.jpg -------------------------------------------------------------------------------- /Archive/Software Sketches/3rd-Draft_P06_DepthOverride.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuclearsugar/VectorRecursionWorkbench/3881605d9c6bd4e64d4252f3ee6cb7c1a9ea64ed/Archive/Software Sketches/3rd-Draft_P06_DepthOverride.jpg -------------------------------------------------------------------------------- /Archive/Software Sketches/3rd-Draft_P07_Disable.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuclearsugar/VectorRecursionWorkbench/3881605d9c6bd4e64d4252f3ee6cb7c1a9ea64ed/Archive/Software Sketches/3rd-Draft_P07_Disable.jpg -------------------------------------------------------------------------------- /Archive/Software Sketches/3rd-Draft_P08_IterationSpacing.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuclearsugar/VectorRecursionWorkbench/3881605d9c6bd4e64d4252f3ee6cb7c1a9ea64ed/Archive/Software Sketches/3rd-Draft_P08_IterationSpacing.jpg -------------------------------------------------------------------------------- /Archive/Software Sketches/3rd-Draft_P09_FooterBufferHeight.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuclearsugar/VectorRecursionWorkbench/3881605d9c6bd4e64d4252f3ee6cb7c1a9ea64ed/Archive/Software Sketches/3rd-Draft_P09_FooterBufferHeight.jpg -------------------------------------------------------------------------------- /Archive/Software Sketches/3rd-Draft_P10_InnerEdge.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuclearsugar/VectorRecursionWorkbench/3881605d9c6bd4e64d4252f3ee6cb7c1a9ea64ed/Archive/Software Sketches/3rd-Draft_P10_InnerEdge.jpg -------------------------------------------------------------------------------- /Archive/Software Sketches/3rd-Draft_P11_GIF_ExampleOfTechnique.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuclearsugar/VectorRecursionWorkbench/3881605d9c6bd4e64d4252f3ee6cb7c1a9ea64ed/Archive/Software Sketches/3rd-Draft_P11_GIF_ExampleOfTechnique.gif -------------------------------------------------------------------------------- /Archive/Vector-Recursion-Workbench_screenshot1.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuclearsugar/VectorRecursionWorkbench/3881605d9c6bd4e64d4252f3ee6cb7c1a9ea64ed/Archive/Vector-Recursion-Workbench_screenshot1.JPG -------------------------------------------------------------------------------- /Archive/Vector-Recursion-Workbench_screenshot2.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuclearsugar/VectorRecursionWorkbench/3881605d9c6bd4e64d4252f3ee6cb7c1a9ea64ed/Archive/Vector-Recursion-Workbench_screenshot2.JPG -------------------------------------------------------------------------------- /Examples/FaceSilhouette_001_BackgroundImage.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuclearsugar/VectorRecursionWorkbench/3881605d9c6bd4e64d4252f3ee6cb7c1a9ea64ed/Examples/FaceSilhouette_001_BackgroundImage.jpg -------------------------------------------------------------------------------- /Examples/FaceSilhouette_001b.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | -------------------------------------------------------------------------------- /Examples/GoldenRatio_001.json: -------------------------------------------------------------------------------- 1 | { 2 | "canvas": [ 3 | 0, 4 | 0, 5 | 154, 6 | 100 7 | ], 8 | "colors": [ 9 | "#000000", 10 | "#FFFFFF" 11 | ], 12 | "footer_buffer": 0.0, 13 | "shapes": [ 14 | { 15 | "clockwise": true, 16 | "depth": 141, 17 | "disabled": false, 18 | "inc": 0.0108, 19 | "points": [ 20 | [ 21 | 0.0, 22 | 0.0 23 | ], 24 | [ 25 | 95.10925926, 26 | 0.0 27 | ], 28 | [ 29 | 94.96666667, 30 | 100.0 31 | ], 32 | [ 33 | 0.0, 34 | 100.0 35 | ] 36 | ], 37 | "reverse_colors": true, 38 | "step": 0.084 39 | }, 40 | { 41 | "clockwise": false, 42 | "depth": 50, 43 | "disabled": false, 44 | "inc": 0.0108, 45 | "points": [ 46 | [ 47 | 95.10925926, 48 | 0.0 49 | ], 50 | [ 51 | 154.0, 52 | 0.0 53 | ], 54 | [ 55 | 154.0, 56 | 61.6 57 | ], 58 | [ 59 | 95.02143139, 60 | 61.59357164 61 | ] 62 | ], 63 | "reverse_colors": false, 64 | "step": 0.084 65 | }, 66 | { 67 | "clockwise": true, 68 | "depth": 50, 69 | "disabled": false, 70 | "inc": 0.0108, 71 | "points": [ 72 | [ 73 | 117.49649877, 74 | 61.59602131 75 | ], 76 | [ 77 | 154.0, 78 | 61.6 79 | ], 80 | [ 81 | 154.0, 82 | 100.0 83 | ], 84 | [ 85 | 117.3537037, 86 | 100.0 87 | ] 88 | ], 89 | "reverse_colors": true, 90 | "step": 0.084 91 | }, 92 | { 93 | "clockwise": false, 94 | "depth": 50, 95 | "disabled": false, 96 | "inc": 0.0178, 97 | "points": [ 98 | [ 99 | 95.00070228, 100 | 76.1308701 101 | ], 102 | [ 103 | 117.44186303, 104 | 76.2900158 105 | ], 106 | [ 107 | 117.3537037, 108 | 100.0 109 | ], 110 | [ 111 | 94.96666667, 112 | 100.0 113 | ] 114 | ], 115 | "reverse_colors": false, 116 | "step": 0.141 117 | }, 118 | { 119 | "clockwise": true, 120 | "depth": 50, 121 | "disabled": false, 122 | "inc": 0.0199, 123 | "points": [ 124 | [ 125 | 95.02143139, 126 | 61.59357164 127 | ], 128 | [ 129 | 108.94128524, 130 | 61.59508883 131 | ], 132 | [ 133 | 108.95024768, 134 | 76.22979592 135 | ], 136 | [ 137 | 95.00070228, 138 | 76.1308701 139 | ] 140 | ], 141 | "reverse_colors": true, 142 | "step": 0.244 143 | }, 144 | { 145 | "clockwise": false, 146 | "depth": 50, 147 | "disabled": false, 148 | "inc": 0.0297, 149 | "points": [ 150 | [ 151 | 108.94128524, 152 | 61.59508883 153 | ], 154 | [ 155 | 117.49649877, 156 | 61.59602131 157 | ], 158 | [ 159 | 117.46253633, 160 | 70.73004194 161 | ], 162 | [ 163 | 108.94679064, 164 | 70.58481416 165 | ] 166 | ], 167 | "reverse_colors": false, 168 | "step": 0.3 169 | }, 170 | { 171 | "clockwise": true, 172 | "depth": 50, 173 | "disabled": false, 174 | "inc": 0.0279, 175 | "points": [ 176 | [ 177 | 112.52880629, 178 | 70.64590196 179 | ], 180 | [ 181 | 117.46253633, 182 | 70.73004194 183 | ], 184 | [ 185 | 117.44186303, 186 | 76.2900158 187 | ], 188 | [ 189 | 112.50173799, 190 | 76.25498198 191 | ] 192 | ], 193 | "reverse_colors": true, 194 | "step": 0.398 195 | }, 196 | { 197 | "clockwise": true, 198 | "depth": 50, 199 | "disabled": false, 200 | "inc": 0.0295, 201 | "points": [ 202 | [ 203 | 108.94679064, 204 | 70.58481416 205 | ], 206 | [ 207 | 112.52880629, 208 | 70.64590196 209 | ], 210 | [ 211 | 112.51810461, 212 | 72.86349913 213 | ], 214 | [ 215 | 108.94818714, 216 | 72.86515955 217 | ] 218 | ], 219 | "reverse_colors": true, 220 | "step": 0.398 221 | }, 222 | { 223 | "clockwise": false, 224 | "depth": 50, 225 | "disabled": false, 226 | "inc": 0.025, 227 | "points": [ 228 | [ 229 | 108.94818714, 230 | 72.86515955 231 | ], 232 | [ 233 | 112.51810461, 234 | 72.86349913 235 | ], 236 | [ 237 | 112.50173799, 238 | 76.25498198 239 | ], 240 | [ 241 | 108.95024768, 242 | 76.22979592 243 | ] 244 | ], 245 | "reverse_colors": false, 246 | "step": 0.51 247 | } 248 | ] 249 | } -------------------------------------------------------------------------------- /Examples/GoldenRatio_001_rasterized.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuclearsugar/VectorRecursionWorkbench/3881605d9c6bd4e64d4252f3ee6cb7c1a9ea64ed/Examples/GoldenRatio_001_rasterized.jpg -------------------------------------------------------------------------------- /Examples/GoldenRatio_001b.json: -------------------------------------------------------------------------------- 1 | { 2 | "canvas": [ 3 | 0, 4 | 0, 5 | 154, 6 | 100 7 | ], 8 | "colors": [ 9 | "#000000", 10 | "#FFFFFF" 11 | ], 12 | "footer_buffer": 0.0, 13 | "shapes": [ 14 | { 15 | "clockwise": true, 16 | "depth": 15, 17 | "disabled": false, 18 | "inc": 0.0108, 19 | "points": [ 20 | [ 21 | 0.0, 22 | 0.0 23 | ], 24 | [ 25 | 95.10925926, 26 | 0.0 27 | ], 28 | [ 29 | 94.96666667, 30 | 100.0 31 | ], 32 | [ 33 | 0.0, 34 | 100.0 35 | ] 36 | ], 37 | "reverse_colors": true, 38 | "step": 0.084 39 | }, 40 | { 41 | "clockwise": false, 42 | "depth": 16, 43 | "disabled": false, 44 | "inc": 0.0108, 45 | "points": [ 46 | [ 47 | 95.10925926, 48 | 0.0 49 | ], 50 | [ 51 | 154.0, 52 | 0.0 53 | ], 54 | [ 55 | 154.0, 56 | 61.6 57 | ], 58 | [ 59 | 95.02143139, 60 | 61.59357164 61 | ] 62 | ], 63 | "reverse_colors": false, 64 | "step": 0.084 65 | }, 66 | { 67 | "clockwise": true, 68 | "depth": 17, 69 | "disabled": false, 70 | "inc": 0.0108, 71 | "points": [ 72 | [ 73 | 117.49649877, 74 | 61.59602131 75 | ], 76 | [ 77 | 154.0, 78 | 61.6 79 | ], 80 | [ 81 | 154.0, 82 | 100.0 83 | ], 84 | [ 85 | 117.3537037, 86 | 100.0 87 | ] 88 | ], 89 | "reverse_colors": true, 90 | "step": 0.084 91 | }, 92 | { 93 | "clockwise": false, 94 | "depth": 12, 95 | "disabled": false, 96 | "inc": 0.0178, 97 | "points": [ 98 | [ 99 | 95.00070228, 100 | 76.1308701 101 | ], 102 | [ 103 | 117.44186303, 104 | 76.2900158 105 | ], 106 | [ 107 | 117.3537037, 108 | 100.0 109 | ], 110 | [ 111 | 94.96666667, 112 | 100.0 113 | ] 114 | ], 115 | "reverse_colors": false, 116 | "step": 0.141 117 | }, 118 | { 119 | "clockwise": true, 120 | "depth": 9, 121 | "disabled": false, 122 | "inc": 0.0199, 123 | "points": [ 124 | [ 125 | 95.02143139, 126 | 61.59357164 127 | ], 128 | [ 129 | 108.94128524, 130 | 61.59508883 131 | ], 132 | [ 133 | 108.95024768, 134 | 76.22979592 135 | ], 136 | [ 137 | 95.00070228, 138 | 76.1308701 139 | ] 140 | ], 141 | "reverse_colors": true, 142 | "step": 0.244 143 | }, 144 | { 145 | "clockwise": false, 146 | "depth": 8, 147 | "disabled": false, 148 | "inc": 0.0297, 149 | "points": [ 150 | [ 151 | 108.94128524, 152 | 61.59508883 153 | ], 154 | [ 155 | 117.49649877, 156 | 61.59602131 157 | ], 158 | [ 159 | 117.46253633, 160 | 70.73004194 161 | ], 162 | [ 163 | 108.94679064, 164 | 70.58481416 165 | ] 166 | ], 167 | "reverse_colors": false, 168 | "step": 0.3 169 | }, 170 | { 171 | "clockwise": true, 172 | "depth": 7, 173 | "disabled": false, 174 | "inc": 0.0279, 175 | "points": [ 176 | [ 177 | 112.52880629, 178 | 70.64590196 179 | ], 180 | [ 181 | 117.46253633, 182 | 70.73004194 183 | ], 184 | [ 185 | 117.44186303, 186 | 76.2900158 187 | ], 188 | [ 189 | 112.50173799, 190 | 76.25498198 191 | ] 192 | ], 193 | "reverse_colors": true, 194 | "step": 0.398 195 | }, 196 | { 197 | "clockwise": true, 198 | "depth": 7, 199 | "disabled": false, 200 | "inc": 0.0295, 201 | "points": [ 202 | [ 203 | 108.94679064, 204 | 70.58481416 205 | ], 206 | [ 207 | 112.52880629, 208 | 70.64590196 209 | ], 210 | [ 211 | 112.51810461, 212 | 72.86349913 213 | ], 214 | [ 215 | 108.94818714, 216 | 72.86515955 217 | ] 218 | ], 219 | "reverse_colors": true, 220 | "step": 0.398 221 | }, 222 | { 223 | "clockwise": false, 224 | "depth": 6, 225 | "disabled": false, 226 | "inc": 0.025, 227 | "points": [ 228 | [ 229 | 108.94818714, 230 | 72.86515955 231 | ], 232 | [ 233 | 112.51810461, 234 | 72.86349913 235 | ], 236 | [ 237 | 112.50173799, 238 | 76.25498198 239 | ], 240 | [ 241 | 108.95024768, 242 | 76.22979592 243 | ] 244 | ], 245 | "reverse_colors": false, 246 | "step": 0.51 247 | } 248 | ] 249 | } -------------------------------------------------------------------------------- /Examples/GoldenRatio_002.json: -------------------------------------------------------------------------------- 1 | { 2 | "canvas": [ 3 | 0, 4 | 0, 5 | 154, 6 | 100 7 | ], 8 | "colors": [ 9 | "#000000", 10 | "#FFFFFF" 11 | ], 12 | "footer_buffer": 0.0, 13 | "shapes": [ 14 | { 15 | "clockwise": true, 16 | "depth": 141, 17 | "disabled": false, 18 | "inc": 0.0016, 19 | "points": [ 20 | [ 21 | 0.0, 22 | 0.0 23 | ], 24 | [ 25 | 95.10925926, 26 | 0.0 27 | ], 28 | [ 29 | 94.96666667, 30 | 100.0 31 | ], 32 | [ 33 | 0.0, 34 | 100.0 35 | ] 36 | ], 37 | "reverse_colors": true, 38 | "step": 0.001 39 | }, 40 | { 41 | "clockwise": false, 42 | "depth": 100, 43 | "disabled": false, 44 | "inc": 0.0027, 45 | "points": [ 46 | [ 47 | 95.10925926, 48 | 0.0 49 | ], 50 | [ 51 | 154.0, 52 | 0.0 53 | ], 54 | [ 55 | 154.0, 56 | 61.6 57 | ], 58 | [ 59 | 95.02143139, 60 | 61.59357164 61 | ] 62 | ], 63 | "reverse_colors": false, 64 | "step": 0.001 65 | }, 66 | { 67 | "clockwise": true, 68 | "depth": 69, 69 | "disabled": false, 70 | "inc": 0.0057, 71 | "points": [ 72 | [ 73 | 117.49649877, 74 | 61.59602131 75 | ], 76 | [ 77 | 154.0, 78 | 61.6 79 | ], 80 | [ 81 | 154.0, 82 | 100.0 83 | ], 84 | [ 85 | 117.3537037, 86 | 100.0 87 | ] 88 | ], 89 | "reverse_colors": true, 90 | "step": 0.001 91 | }, 92 | { 93 | "clockwise": false, 94 | "depth": 50, 95 | "disabled": false, 96 | "inc": 0.0131, 97 | "points": [ 98 | [ 99 | 95.00070228, 100 | 76.1308701 101 | ], 102 | [ 103 | 117.44186303, 104 | 76.2900158 105 | ], 106 | [ 107 | 117.3537037, 108 | 100.0 109 | ], 110 | [ 111 | 94.96666667, 112 | 100.0 113 | ] 114 | ], 115 | "reverse_colors": false, 116 | "step": 0.001 117 | }, 118 | { 119 | "clockwise": true, 120 | "depth": 50, 121 | "disabled": false, 122 | "inc": 0.0199, 123 | "points": [ 124 | [ 125 | 95.02143139, 126 | 61.59357164 127 | ], 128 | [ 129 | 108.94128524, 130 | 61.59508883 131 | ], 132 | [ 133 | 108.95024768, 134 | 76.22979592 135 | ], 136 | [ 137 | 95.00070228, 138 | 76.1308701 139 | ] 140 | ], 141 | "reverse_colors": true, 142 | "step": 0.001 143 | }, 144 | { 145 | "clockwise": false, 146 | "depth": 50, 147 | "disabled": false, 148 | "inc": 0.0297, 149 | "points": [ 150 | [ 151 | 108.94128524, 152 | 61.59508883 153 | ], 154 | [ 155 | 117.49649877, 156 | 61.59602131 157 | ], 158 | [ 159 | 117.46253633, 160 | 70.73004194 161 | ], 162 | [ 163 | 108.94679064, 164 | 70.58481416 165 | ] 166 | ], 167 | "reverse_colors": false, 168 | "step": 0.001 169 | }, 170 | { 171 | "clockwise": true, 172 | "depth": 50, 173 | "disabled": false, 174 | "inc": 0.0522, 175 | "points": [ 176 | [ 177 | 112.52880629, 178 | 70.64590196 179 | ], 180 | [ 181 | 117.46253633, 182 | 70.73004194 183 | ], 184 | [ 185 | 117.44186303, 186 | 76.2900158 187 | ], 188 | [ 189 | 112.50173799, 190 | 76.25498198 191 | ] 192 | ], 193 | "reverse_colors": true, 194 | "step": 0.001 195 | }, 196 | { 197 | "clockwise": true, 198 | "depth": 50, 199 | "disabled": false, 200 | "inc": 0.0988, 201 | "points": [ 202 | [ 203 | 108.94679064, 204 | 70.58481416 205 | ], 206 | [ 207 | 112.52880629, 208 | 70.64590196 209 | ], 210 | [ 211 | 112.51810461, 212 | 72.86349913 213 | ], 214 | [ 215 | 108.94818714, 216 | 72.86515955 217 | ] 218 | ], 219 | "reverse_colors": true, 220 | "step": 0.001 221 | }, 222 | { 223 | "clockwise": false, 224 | "depth": 50, 225 | "disabled": false, 226 | "inc": 0.0768, 227 | "points": [ 228 | [ 229 | 108.94818714, 230 | 72.86515955 231 | ], 232 | [ 233 | 112.51810461, 234 | 72.86349913 235 | ], 236 | [ 237 | 112.50173799, 238 | 76.25498198 239 | ], 240 | [ 241 | 108.95024768, 242 | 76.22979592 243 | ] 244 | ], 245 | "reverse_colors": false, 246 | "step": 0.001 247 | } 248 | ] 249 | } -------------------------------------------------------------------------------- /Examples/GoldenRatio_002_rasterized.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuclearsugar/VectorRecursionWorkbench/3881605d9c6bd4e64d4252f3ee6cb7c1a9ea64ed/Examples/GoldenRatio_002_rasterized.jpg -------------------------------------------------------------------------------- /Examples/GoldenRatio_002b.json: -------------------------------------------------------------------------------- 1 | { 2 | "canvas": [ 3 | 0, 4 | 0, 5 | 154, 6 | 100 7 | ], 8 | "colors": [ 9 | "#000000", 10 | "#FFFFFF" 11 | ], 12 | "footer_buffer": 0.0, 13 | "shapes": [ 14 | { 15 | "clockwise": true, 16 | "depth": 51, 17 | "disabled": false, 18 | "inc": 0.0016, 19 | "points": [ 20 | [ 21 | 0.0, 22 | 0.0 23 | ], 24 | [ 25 | 95.10925926, 26 | 0.0 27 | ], 28 | [ 29 | 94.96666667, 30 | 100.0 31 | ], 32 | [ 33 | 0.0, 34 | 100.0 35 | ] 36 | ], 37 | "reverse_colors": true, 38 | "step": 0.001 39 | }, 40 | { 41 | "clockwise": false, 42 | "depth": 42, 43 | "disabled": false, 44 | "inc": 0.0027, 45 | "points": [ 46 | [ 47 | 95.10925926, 48 | 0.0 49 | ], 50 | [ 51 | 154.0, 52 | 0.0 53 | ], 54 | [ 55 | 154.0, 56 | 61.6 57 | ], 58 | [ 59 | 95.02143139, 60 | 61.59357164 61 | ] 62 | ], 63 | "reverse_colors": false, 64 | "step": 0.001 65 | }, 66 | { 67 | "clockwise": true, 68 | "depth": 29, 69 | "disabled": false, 70 | "inc": 0.0057, 71 | "points": [ 72 | [ 73 | 117.49649877, 74 | 61.59602131 75 | ], 76 | [ 77 | 154.0, 78 | 61.6 79 | ], 80 | [ 81 | 154.0, 82 | 100.0 83 | ], 84 | [ 85 | 117.3537037, 86 | 100.0 87 | ] 88 | ], 89 | "reverse_colors": true, 90 | "step": 0.001 91 | }, 92 | { 93 | "clockwise": false, 94 | "depth": 20, 95 | "disabled": false, 96 | "inc": 0.0131, 97 | "points": [ 98 | [ 99 | 95.00070228, 100 | 76.1308701 101 | ], 102 | [ 103 | 117.44186303, 104 | 76.2900158 105 | ], 106 | [ 107 | 117.3537037, 108 | 100.0 109 | ], 110 | [ 111 | 94.96666667, 112 | 100.0 113 | ] 114 | ], 115 | "reverse_colors": false, 116 | "step": 0.001 117 | }, 118 | { 119 | "clockwise": true, 120 | "depth": 17, 121 | "disabled": false, 122 | "inc": 0.0199, 123 | "points": [ 124 | [ 125 | 95.02143139, 126 | 61.59357164 127 | ], 128 | [ 129 | 108.94128524, 130 | 61.59508883 131 | ], 132 | [ 133 | 108.95024768, 134 | 76.22979592 135 | ], 136 | [ 137 | 95.00070228, 138 | 76.1308701 139 | ] 140 | ], 141 | "reverse_colors": true, 142 | "step": 0.001 143 | }, 144 | { 145 | "clockwise": false, 146 | "depth": 14, 147 | "disabled": false, 148 | "inc": 0.0297, 149 | "points": [ 150 | [ 151 | 108.94128524, 152 | 61.59508883 153 | ], 154 | [ 155 | 117.49649877, 156 | 61.59602131 157 | ], 158 | [ 159 | 117.46253633, 160 | 70.73004194 161 | ], 162 | [ 163 | 108.94679064, 164 | 70.58481416 165 | ] 166 | ], 167 | "reverse_colors": false, 168 | "step": 0.001 169 | }, 170 | { 171 | "clockwise": true, 172 | "depth": 11, 173 | "disabled": false, 174 | "inc": 0.0522, 175 | "points": [ 176 | [ 177 | 112.52880629, 178 | 70.64590196 179 | ], 180 | [ 181 | 117.46253633, 182 | 70.73004194 183 | ], 184 | [ 185 | 117.44186303, 186 | 76.2900158 187 | ], 188 | [ 189 | 112.50173799, 190 | 76.25498198 191 | ] 192 | ], 193 | "reverse_colors": true, 194 | "step": 0.001 195 | }, 196 | { 197 | "clockwise": true, 198 | "depth": 9, 199 | "disabled": false, 200 | "inc": 0.0988, 201 | "points": [ 202 | [ 203 | 108.94679064, 204 | 70.58481416 205 | ], 206 | [ 207 | 112.52880629, 208 | 70.64590196 209 | ], 210 | [ 211 | 112.51810461, 212 | 72.86349913 213 | ], 214 | [ 215 | 108.94818714, 216 | 72.86515955 217 | ] 218 | ], 219 | "reverse_colors": true, 220 | "step": 0.001 221 | }, 222 | { 223 | "clockwise": false, 224 | "depth": 10, 225 | "disabled": false, 226 | "inc": 0.0768, 227 | "points": [ 228 | [ 229 | 108.94818714, 230 | 72.86515955 231 | ], 232 | [ 233 | 112.51810461, 234 | 72.86349913 235 | ], 236 | [ 237 | 112.50173799, 238 | 76.25498198 239 | ], 240 | [ 241 | 108.95024768, 242 | 76.22979592 243 | ] 244 | ], 245 | "reverse_colors": false, 246 | "step": 0.001 247 | } 248 | ] 249 | } -------------------------------------------------------------------------------- /Examples/GoldenRatio_BackgroundImage.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuclearsugar/VectorRecursionWorkbench/3881605d9c6bd4e64d4252f3ee6cb7c1a9ea64ed/Examples/GoldenRatio_BackgroundImage.jpg -------------------------------------------------------------------------------- /Examples/VRW_icon.json: -------------------------------------------------------------------------------- 1 | { 2 | "canvas": [ 3 | 0, 4 | 0, 5 | 500, 6 | 500 7 | ], 8 | "colors": [ 9 | "#000000", 10 | "#FFFFFF" 11 | ], 12 | "shapes": [ 13 | { 14 | "clockwise": true, 15 | "depth": 8, 16 | "disabled": false, 17 | "footer": 0.0, 18 | "footer_inc": 0.0, 19 | "footer_offset": 0, 20 | "inc": 0.0, 21 | "points": [ 22 | [ 23 | 0.0, 24 | 0.0 25 | ], 26 | [ 27 | 500.0, 28 | 0.0 29 | ], 30 | [ 31 | 500.0, 32 | 500.0 33 | ], 34 | [ 35 | 0.0, 36 | 500.0 37 | ] 38 | ], 39 | "reverse_colors": false, 40 | "step": 0.37 41 | } 42 | ] 43 | } -------------------------------------------------------------------------------- /Examples/VRW_icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /Examples/beehive_001.json: -------------------------------------------------------------------------------- 1 | { 2 | "canvas": [ 3 | 0, 4 | 0, 5 | 1000, 6 | 1000 7 | ], 8 | "colors": [ 9 | "#000000", 10 | "#FFFFFF" 11 | ], 12 | "footer_buffer": 0.05, 13 | "shapes": [ 14 | { 15 | "clockwise": true, 16 | "depth": 50, 17 | "disabled": true, 18 | "inc": 0.0, 19 | "points": [ 20 | [ 21 | 720.0538358, 22 | 0.0 23 | ], 24 | [ 25 | 1000, 26 | 0 27 | ], 28 | [ 29 | 1000.0, 30 | 506.05652759 31 | ] 32 | ], 33 | "reverse_colors": false, 34 | "step": 0.2 35 | }, 36 | { 37 | "clockwise": true, 38 | "depth": 50, 39 | "disabled": true, 40 | "inc": 0.0, 41 | "points": [ 42 | [ 43 | 1000.0, 44 | 506.05652759 45 | ], 46 | [ 47 | 1000, 48 | 1000 49 | ], 50 | [ 51 | 745.62584118, 52 | 1000.0 53 | ] 54 | ], 55 | "reverse_colors": false, 56 | "step": 0.2 57 | }, 58 | { 59 | "clockwise": true, 60 | "depth": 50, 61 | "disabled": true, 62 | "inc": 0.0, 63 | "points": [ 64 | [ 65 | 0, 66 | 0 67 | ], 68 | [ 69 | 258.41184388, 70 | 0.0 71 | ], 72 | [ 73 | 0.0, 74 | 502.01884253 75 | ] 76 | ], 77 | "reverse_colors": false, 78 | "step": 0.2 79 | }, 80 | { 81 | "clockwise": true, 82 | "depth": 50, 83 | "disabled": true, 84 | "inc": 0.0, 85 | "points": [ 86 | [ 87 | 0.0, 88 | 502.01884253 89 | ], 90 | [ 91 | 261.10363392, 92 | 1000.0 93 | ], 94 | [ 95 | 0, 96 | 1000 97 | ] 98 | ], 99 | "reverse_colors": false, 100 | "step": 0.2 101 | }, 102 | { 103 | "clockwise": true, 104 | "depth": 50, 105 | "disabled": false, 106 | "inc": 0.0048, 107 | "points": [ 108 | [ 109 | 0.0, 110 | 502.01884253 111 | ], 112 | [ 113 | 258.41184388, 114 | 0.0 115 | ], 116 | [ 117 | 720.0538358, 118 | 0.0 119 | ], 120 | [ 121 | 1000.0, 122 | 506.05652759 123 | ], 124 | [ 125 | 745.62584118, 126 | 1000.0 127 | ], 128 | [ 129 | 261.10363392, 130 | 1000.0 131 | ] 132 | ], 133 | "reverse_colors": false, 134 | "step": 0.272 135 | } 136 | ] 137 | } -------------------------------------------------------------------------------- /Examples/beehive_001.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /Examples/beehive_001_rasterized.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuclearsugar/VectorRecursionWorkbench/3881605d9c6bd4e64d4252f3ee6cb7c1a9ea64ed/Examples/beehive_001_rasterized.jpg -------------------------------------------------------------------------------- /Examples/handcut_mimic_001_rasterized.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuclearsugar/VectorRecursionWorkbench/3881605d9c6bd4e64d4252f3ee6cb7c1a9ea64ed/Examples/handcut_mimic_001_rasterized.jpg -------------------------------------------------------------------------------- /Examples/handcut_mimic_001b_rasterized.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuclearsugar/VectorRecursionWorkbench/3881605d9c6bd4e64d4252f3ee6cb7c1a9ea64ed/Examples/handcut_mimic_001b_rasterized.jpg -------------------------------------------------------------------------------- /Examples/handcut_mimic_001d_rasterized.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuclearsugar/VectorRecursionWorkbench/3881605d9c6bd4e64d4252f3ee6cb7c1a9ea64ed/Examples/handcut_mimic_001d_rasterized.jpg -------------------------------------------------------------------------------- /Examples/handcut_photo_original.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuclearsugar/VectorRecursionWorkbench/3881605d9c6bd4e64d4252f3ee6cb7c1a9ea64ed/Examples/handcut_photo_original.jpg -------------------------------------------------------------------------------- /Examples/hands_001_BackgroundImage.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuclearsugar/VectorRecursionWorkbench/3881605d9c6bd4e64d4252f3ee6cb7c1a9ea64ed/Examples/hands_001_BackgroundImage.jpg -------------------------------------------------------------------------------- /Examples/hexagon_001.json: -------------------------------------------------------------------------------- 1 | { 2 | "canvas": [ 3 | 0, 4 | 0, 5 | 1000, 6 | 1000 7 | ], 8 | "colors": [ 9 | "#000000", 10 | "#FFFFFF" 11 | ], 12 | "footer_buffer": 0.0, 13 | "shapes": [ 14 | { 15 | "clockwise": true, 16 | "depth": 50, 17 | "disabled": true, 18 | "inc": 0.0, 19 | "points": [ 20 | [ 21 | 720.0538358, 22 | 0.0 23 | ], 24 | [ 25 | 1000.0, 26 | 0.0 27 | ], 28 | [ 29 | 1000.0, 30 | 506.05652759 31 | ] 32 | ], 33 | "reverse_colors": false, 34 | "step": 0.092 35 | }, 36 | { 37 | "clockwise": true, 38 | "depth": 50, 39 | "disabled": true, 40 | "inc": 0.0, 41 | "points": [ 42 | [ 43 | 1000.0, 44 | 506.05652759 45 | ], 46 | [ 47 | 1000.0, 48 | 1000.0 49 | ], 50 | [ 51 | 745.62584118, 52 | 1000.0 53 | ] 54 | ], 55 | "reverse_colors": false, 56 | "step": 0.092 57 | }, 58 | { 59 | "clockwise": true, 60 | "depth": 50, 61 | "disabled": true, 62 | "inc": 0.0, 63 | "points": [ 64 | [ 65 | 0.0, 66 | 0.0 67 | ], 68 | [ 69 | 258.41184388, 70 | 0.0 71 | ], 72 | [ 73 | 0.0, 74 | 502.01884253 75 | ] 76 | ], 77 | "reverse_colors": false, 78 | "step": 0.092 79 | }, 80 | { 81 | "clockwise": true, 82 | "depth": 50, 83 | "disabled": true, 84 | "inc": 0.0, 85 | "points": [ 86 | [ 87 | 0.0, 88 | 502.01884253 89 | ], 90 | [ 91 | 261.10363392, 92 | 1000.0 93 | ], 94 | [ 95 | 0.0, 96 | 1000.0 97 | ] 98 | ], 99 | "reverse_colors": false, 100 | "step": 0.092 101 | }, 102 | { 103 | "clockwise": false, 104 | "depth": 32, 105 | "disabled": false, 106 | "inc": 0.0048, 107 | "points": [ 108 | [ 109 | 258.41184388, 110 | 0.0 111 | ], 112 | [ 113 | 720.0538358, 114 | 0.0 115 | ], 116 | [ 117 | 473.57895463, 118 | 370.24674075 119 | ], 120 | [ 121 | 0.0, 122 | 502.01884253 123 | ] 124 | ], 125 | "reverse_colors": false, 126 | "step": 0.092 127 | }, 128 | { 129 | "clockwise": true, 130 | "depth": 25, 131 | "disabled": false, 132 | "inc": 0.0048, 133 | "points": [ 134 | [ 135 | 0.0, 136 | 502.01884253 137 | ], 138 | [ 139 | 473.57895463, 140 | 370.24674075 141 | ], 142 | [ 143 | 1000.0, 144 | 506.05652759 145 | ], 146 | [ 147 | 745.62584118, 148 | 1000.0 149 | ], 150 | [ 151 | 261.10363392, 152 | 1000.0 153 | ] 154 | ], 155 | "reverse_colors": true, 156 | "step": 0.092 157 | }, 158 | { 159 | "clockwise": true, 160 | "depth": 15, 161 | "disabled": false, 162 | "inc": 0.0048, 163 | "points": [ 164 | [ 165 | 720.0538358, 166 | 0.0 167 | ], 168 | [ 169 | 846.50265563, 170 | 228.58055893 171 | ], 172 | [ 173 | 730.67127462, 174 | 270.68914477 175 | ], 176 | [ 177 | 605.65355118, 178 | 171.84847528 179 | ] 180 | ], 181 | "reverse_colors": true, 182 | "step": 0.188 183 | }, 184 | { 185 | "clockwise": true, 186 | "depth": 22, 187 | "disabled": false, 188 | "inc": 0.0048, 189 | "points": [ 190 | [ 191 | 634.28596943, 192 | 317.15747004 193 | ], 194 | [ 195 | 730.67127462, 196 | 270.68914477 197 | ], 198 | [ 199 | 846.50265563, 200 | 228.58055893 201 | ], 202 | [ 203 | 1000.0, 204 | 506.05652759 205 | ], 206 | [ 207 | 629.17000187, 208 | 410.38720843 209 | ] 210 | ], 211 | "reverse_colors": false, 212 | "step": 0.211 213 | }, 214 | { 215 | "clockwise": false, 216 | "depth": 9, 217 | "disabled": false, 218 | "inc": 0.0048, 219 | "points": [ 220 | [ 221 | 542.15471165, 222 | 267.23441588 223 | ], 224 | [ 225 | 634.28596943, 226 | 317.15747004 227 | ], 228 | [ 229 | 629.17000187, 230 | 410.38720843 231 | ], 232 | [ 233 | 473.57895463, 234 | 370.24674075 235 | ] 236 | ], 237 | "reverse_colors": true, 238 | "step": 0.196 239 | }, 240 | { 241 | "clockwise": false, 242 | "depth": 16, 243 | "disabled": false, 244 | "inc": 0.0048, 245 | "points": [ 246 | [ 247 | 605.65355118, 248 | 171.84847528 249 | ], 250 | [ 251 | 730.67127462, 252 | 270.68914477 253 | ], 254 | [ 255 | 634.28596943, 256 | 317.15747004 257 | ], 258 | [ 259 | 542.15471165, 260 | 267.23441588 261 | ] 262 | ], 263 | "reverse_colors": false, 264 | "step": 0.246 265 | } 266 | ] 267 | } -------------------------------------------------------------------------------- /Examples/hexagon_001_cutout.json: -------------------------------------------------------------------------------- 1 | { 2 | "canvas": [ 3 | 0, 4 | 0, 5 | 1000, 6 | 1000 7 | ], 8 | "colors": [ 9 | "#000000", 10 | "#FFFFFF" 11 | ], 12 | "shapes": [ 13 | { 14 | "clockwise": true, 15 | "depth": 50, 16 | "disabled": true, 17 | "footer": 0.0, 18 | "footer_inc": 0.0, 19 | "footer_offset": 0.0, 20 | "inc": 0.0, 21 | "points": [ 22 | [ 23 | 720.0538358, 24 | 0.0 25 | ], 26 | [ 27 | 1000.0, 28 | 0.0 29 | ], 30 | [ 31 | 1000.0, 32 | 506.05652759 33 | ] 34 | ], 35 | "reverse_colors": false, 36 | "step": 0.092 37 | }, 38 | { 39 | "clockwise": true, 40 | "depth": 50, 41 | "disabled": true, 42 | "footer": 0.0, 43 | "footer_inc": 0.0, 44 | "footer_offset": 0.0, 45 | "inc": 0.0, 46 | "points": [ 47 | [ 48 | 1000.0, 49 | 506.05652759 50 | ], 51 | [ 52 | 1000.0, 53 | 1000.0 54 | ], 55 | [ 56 | 745.62584118, 57 | 1000.0 58 | ] 59 | ], 60 | "reverse_colors": false, 61 | "step": 0.092 62 | }, 63 | { 64 | "clockwise": true, 65 | "depth": 50, 66 | "disabled": true, 67 | "footer": 0.0, 68 | "footer_inc": 0.0, 69 | "footer_offset": 0.0, 70 | "inc": 0.0, 71 | "points": [ 72 | [ 73 | 0.0, 74 | 0.0 75 | ], 76 | [ 77 | 258.41184388, 78 | 0.0 79 | ], 80 | [ 81 | 0.0, 82 | 502.01884253 83 | ] 84 | ], 85 | "reverse_colors": false, 86 | "step": 0.092 87 | }, 88 | { 89 | "clockwise": true, 90 | "depth": 50, 91 | "disabled": true, 92 | "footer": 0.0, 93 | "footer_inc": 0.0, 94 | "footer_offset": 0.0, 95 | "inc": 0.0, 96 | "points": [ 97 | [ 98 | 0.0, 99 | 502.01884253 100 | ], 101 | [ 102 | 261.10363392, 103 | 1000.0 104 | ], 105 | [ 106 | 0.0, 107 | 1000.0 108 | ] 109 | ], 110 | "reverse_colors": false, 111 | "step": 0.092 112 | }, 113 | { 114 | "clockwise": false, 115 | "depth": 32, 116 | "disabled": false, 117 | "footer": 0.108, 118 | "footer_inc": 0.006, 119 | "footer_offset": 6, 120 | "inc": 0.0048, 121 | "points": [ 122 | [ 123 | 258.41184388, 124 | 0.0 125 | ], 126 | [ 127 | 720.0538358, 128 | 0.0 129 | ], 130 | [ 131 | 473.57895463, 132 | 370.24674075 133 | ], 134 | [ 135 | 0.0, 136 | 502.01884253 137 | ] 138 | ], 139 | "reverse_colors": false, 140 | "step": 0.092 141 | }, 142 | { 143 | "clockwise": true, 144 | "depth": 25, 145 | "disabled": false, 146 | "footer": 0.075, 147 | "footer_inc": 0.01, 148 | "footer_offset": 10, 149 | "inc": 0.0048, 150 | "points": [ 151 | [ 152 | 0.0, 153 | 502.01884253 154 | ], 155 | [ 156 | 473.57895463, 157 | 370.24674075 158 | ], 159 | [ 160 | 1000.0, 161 | 506.05652759 162 | ], 163 | [ 164 | 745.62584118, 165 | 1000.0 166 | ], 167 | [ 168 | 261.10363392, 169 | 1000.0 170 | ] 171 | ], 172 | "reverse_colors": true, 173 | "step": 0.092 174 | }, 175 | { 176 | "clockwise": true, 177 | "depth": 15, 178 | "disabled": false, 179 | "footer": 0.192, 180 | "footer_inc": 0.032, 181 | "footer_offset": 7, 182 | "inc": 0.0048, 183 | "points": [ 184 | [ 185 | 720.0538358, 186 | 0.0 187 | ], 188 | [ 189 | 846.50265563, 190 | 228.58055893 191 | ], 192 | [ 193 | 730.67127462, 194 | 270.68914477 195 | ], 196 | [ 197 | 605.65355118, 198 | 171.84847528 199 | ] 200 | ], 201 | "reverse_colors": true, 202 | "step": 0.188 203 | }, 204 | { 205 | "clockwise": true, 206 | "depth": 22, 207 | "disabled": false, 208 | "footer": 0.13, 209 | "footer_inc": 0.028, 210 | "footer_offset": 2, 211 | "inc": 0.0048, 212 | "points": [ 213 | [ 214 | 634.28596943, 215 | 317.15747004 216 | ], 217 | [ 218 | 730.67127462, 219 | 270.68914477 220 | ], 221 | [ 222 | 846.50265563, 223 | 228.58055893 224 | ], 225 | [ 226 | 1000.0, 227 | 506.05652759 228 | ], 229 | [ 230 | 629.17000187, 231 | 410.38720843 232 | ] 233 | ], 234 | "reverse_colors": false, 235 | "step": 0.211 236 | }, 237 | { 238 | "clockwise": false, 239 | "depth": 9, 240 | "disabled": false, 241 | "footer": 0.151, 242 | "footer_inc": 0.024, 243 | "footer_offset": 3, 244 | "inc": 0.0048, 245 | "points": [ 246 | [ 247 | 542.15471165, 248 | 267.23441588 249 | ], 250 | [ 251 | 634.28596943, 252 | 317.15747004 253 | ], 254 | [ 255 | 629.17000187, 256 | 410.38720843 257 | ], 258 | [ 259 | 473.57895463, 260 | 370.24674075 261 | ] 262 | ], 263 | "reverse_colors": true, 264 | "step": 0.196 265 | }, 266 | { 267 | "clockwise": false, 268 | "depth": 16, 269 | "disabled": false, 270 | "footer": 0.223, 271 | "footer_inc": 0.03, 272 | "footer_offset": 3, 273 | "inc": 0.0048, 274 | "points": [ 275 | [ 276 | 605.65355118, 277 | 171.84847528 278 | ], 279 | [ 280 | 730.67127462, 281 | 270.68914477 282 | ], 283 | [ 284 | 634.28596943, 285 | 317.15747004 286 | ], 287 | [ 288 | 542.15471165, 289 | 267.23441588 290 | ] 291 | ], 292 | "reverse_colors": false, 293 | "step": 0.246 294 | } 295 | ] 296 | } -------------------------------------------------------------------------------- /Examples/hexagon_001_cutout_rasterized.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuclearsugar/VectorRecursionWorkbench/3881605d9c6bd4e64d4252f3ee6cb7c1a9ea64ed/Examples/hexagon_001_cutout_rasterized.jpg -------------------------------------------------------------------------------- /Examples/hexagon_001_rasterized.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuclearsugar/VectorRecursionWorkbench/3881605d9c6bd4e64d4252f3ee6cb7c1a9ea64ed/Examples/hexagon_001_rasterized.jpg -------------------------------------------------------------------------------- /Examples/hexagon_001b.json: -------------------------------------------------------------------------------- 1 | { 2 | "canvas": [ 3 | 0, 4 | 0, 5 | 1000, 6 | 1000 7 | ], 8 | "colors": [ 9 | "#000000", 10 | "#FFFFFF" 11 | ], 12 | "shapes": [ 13 | { 14 | "clockwise": true, 15 | "depth": 50, 16 | "disabled": true, 17 | "footer": 0.136, 18 | "inc": 0.0, 19 | "points": [ 20 | [ 21 | 720.0538358, 22 | 0.0 23 | ], 24 | [ 25 | 1000.0, 26 | 0.0 27 | ], 28 | [ 29 | 1000.0, 30 | 506.05652759 31 | ] 32 | ], 33 | "reverse_colors": false, 34 | "step": 0.092 35 | }, 36 | { 37 | "clockwise": true, 38 | "depth": 50, 39 | "disabled": true, 40 | "footer": 0.136, 41 | "inc": 0.0, 42 | "points": [ 43 | [ 44 | 1000.0, 45 | 506.05652759 46 | ], 47 | [ 48 | 1000.0, 49 | 1000.0 50 | ], 51 | [ 52 | 745.62584118, 53 | 1000.0 54 | ] 55 | ], 56 | "reverse_colors": false, 57 | "step": 0.092 58 | }, 59 | { 60 | "clockwise": true, 61 | "depth": 50, 62 | "disabled": true, 63 | "footer": 0.136, 64 | "inc": 0.0, 65 | "points": [ 66 | [ 67 | 0.0, 68 | 0.0 69 | ], 70 | [ 71 | 258.41184388, 72 | 0.0 73 | ], 74 | [ 75 | 0.0, 76 | 502.01884253 77 | ] 78 | ], 79 | "reverse_colors": false, 80 | "step": 0.092 81 | }, 82 | { 83 | "clockwise": true, 84 | "depth": 50, 85 | "disabled": true, 86 | "footer": 0.136, 87 | "inc": 0.0, 88 | "points": [ 89 | [ 90 | 0.0, 91 | 502.01884253 92 | ], 93 | [ 94 | 261.10363392, 95 | 1000.0 96 | ], 97 | [ 98 | 0.0, 99 | 1000.0 100 | ] 101 | ], 102 | "reverse_colors": false, 103 | "step": 0.092 104 | }, 105 | { 106 | "clockwise": false, 107 | "depth": 32, 108 | "disabled": false, 109 | "footer": 0.176, 110 | "inc": 0.0048, 111 | "points": [ 112 | [ 113 | 258.41184388, 114 | 0.0 115 | ], 116 | [ 117 | 720.0538358, 118 | 0.0 119 | ], 120 | [ 121 | 473.57895463, 122 | 370.24674075 123 | ], 124 | [ 125 | 0.0, 126 | 502.01884253 127 | ] 128 | ], 129 | "reverse_colors": false, 130 | "step": 0.092 131 | }, 132 | { 133 | "clockwise": true, 134 | "depth": 25, 135 | "disabled": false, 136 | "footer": 0.136, 137 | "inc": 0.0048, 138 | "points": [ 139 | [ 140 | 0.0, 141 | 502.01884253 142 | ], 143 | [ 144 | 473.57895463, 145 | 370.24674075 146 | ], 147 | [ 148 | 1000.0, 149 | 506.05652759 150 | ], 151 | [ 152 | 745.62584118, 153 | 1000.0 154 | ], 155 | [ 156 | 261.10363392, 157 | 1000.0 158 | ] 159 | ], 160 | "reverse_colors": true, 161 | "step": 0.092 162 | }, 163 | { 164 | "clockwise": true, 165 | "depth": 15, 166 | "disabled": false, 167 | "footer": 0.196, 168 | "inc": 0.0048, 169 | "points": [ 170 | [ 171 | 720.0538358, 172 | 0.0 173 | ], 174 | [ 175 | 846.50265563, 176 | 228.58055893 177 | ], 178 | [ 179 | 730.67127462, 180 | 270.68914477 181 | ], 182 | [ 183 | 605.65355118, 184 | 171.84847528 185 | ] 186 | ], 187 | "reverse_colors": true, 188 | "step": 0.188 189 | }, 190 | { 191 | "clockwise": true, 192 | "depth": 22, 193 | "disabled": false, 194 | "footer": 0.223, 195 | "inc": 0.0048, 196 | "points": [ 197 | [ 198 | 634.28596943, 199 | 317.15747004 200 | ], 201 | [ 202 | 730.67127462, 203 | 270.68914477 204 | ], 205 | [ 206 | 846.50265563, 207 | 228.58055893 208 | ], 209 | [ 210 | 1000.0, 211 | 506.05652759 212 | ], 213 | [ 214 | 629.17000187, 215 | 410.38720843 216 | ] 217 | ], 218 | "reverse_colors": false, 219 | "step": 0.211 220 | }, 221 | { 222 | "clockwise": false, 223 | "depth": 9, 224 | "disabled": false, 225 | "footer": 0.214, 226 | "inc": 0.0048, 227 | "points": [ 228 | [ 229 | 542.15471165, 230 | 267.23441588 231 | ], 232 | [ 233 | 634.28596943, 234 | 317.15747004 235 | ], 236 | [ 237 | 629.17000187, 238 | 410.38720843 239 | ], 240 | [ 241 | 473.57895463, 242 | 370.24674075 243 | ] 244 | ], 245 | "reverse_colors": true, 246 | "step": 0.196 247 | }, 248 | { 249 | "clockwise": false, 250 | "depth": 16, 251 | "disabled": false, 252 | "footer": 0.208, 253 | "inc": 0.0048, 254 | "points": [ 255 | [ 256 | 605.65355118, 257 | 171.84847528 258 | ], 259 | [ 260 | 730.67127462, 261 | 270.68914477 262 | ], 263 | [ 264 | 634.28596943, 265 | 317.15747004 266 | ], 267 | [ 268 | 542.15471165, 269 | 267.23441588 270 | ] 271 | ], 272 | "reverse_colors": false, 273 | "step": 0.246 274 | } 275 | ] 276 | } -------------------------------------------------------------------------------- /Examples/hexagon_002.json: -------------------------------------------------------------------------------- 1 | { 2 | "canvas": [ 3 | 0, 4 | 0, 5 | 1000, 6 | 1000 7 | ], 8 | "colors": [ 9 | "#000000", 10 | "#FFFFFF" 11 | ], 12 | "footer_buffer": 0.0, 13 | "shapes": [ 14 | { 15 | "clockwise": true, 16 | "depth": 50, 17 | "disabled": true, 18 | "inc": 0.0, 19 | "points": [ 20 | [ 21 | 720.0538358, 22 | 0.0 23 | ], 24 | [ 25 | 1000.0, 26 | 0.0 27 | ], 28 | [ 29 | 1000.0, 30 | 506.05652759 31 | ] 32 | ], 33 | "reverse_colors": false, 34 | "step": 0.06 35 | }, 36 | { 37 | "clockwise": true, 38 | "depth": 50, 39 | "disabled": true, 40 | "inc": 0.0, 41 | "points": [ 42 | [ 43 | 1000.0, 44 | 506.05652759 45 | ], 46 | [ 47 | 1000.0, 48 | 1000.0 49 | ], 50 | [ 51 | 745.62584118, 52 | 1000.0 53 | ] 54 | ], 55 | "reverse_colors": false, 56 | "step": 0.06 57 | }, 58 | { 59 | "clockwise": true, 60 | "depth": 50, 61 | "disabled": true, 62 | "inc": 0.0, 63 | "points": [ 64 | [ 65 | 0.0, 66 | 0.0 67 | ], 68 | [ 69 | 258.41184388, 70 | 0.0 71 | ], 72 | [ 73 | 0.0, 74 | 502.01884253 75 | ] 76 | ], 77 | "reverse_colors": false, 78 | "step": 0.06 79 | }, 80 | { 81 | "clockwise": true, 82 | "depth": 50, 83 | "disabled": true, 84 | "inc": 0.0, 85 | "points": [ 86 | [ 87 | 0.0, 88 | 502.01884253 89 | ], 90 | [ 91 | 261.10363392, 92 | 1000.0 93 | ], 94 | [ 95 | 0.0, 96 | 1000.0 97 | ] 98 | ], 99 | "reverse_colors": false, 100 | "step": 0.06 101 | }, 102 | { 103 | "clockwise": false, 104 | "depth": 23, 105 | "disabled": false, 106 | "inc": 0.0048, 107 | "points": [ 108 | [ 109 | 172.02250313, 110 | 167.82929218 111 | ], 112 | [ 113 | 258.41184388, 114 | 0.0 115 | ], 116 | [ 117 | 720.0538358, 118 | 0.0 119 | ], 120 | [ 121 | 1000.0, 122 | 506.05652759 123 | ], 124 | [ 125 | 821.69477571, 126 | 852.28942343 127 | ] 128 | ], 129 | "reverse_colors": true, 130 | "step": 0.063 131 | }, 132 | { 133 | "clockwise": true, 134 | "depth": 32, 135 | "disabled": false, 136 | "inc": 0.0048, 137 | "points": [ 138 | [ 139 | 0.0, 140 | 502.01884253 141 | ], 142 | [ 143 | 172.02250313, 144 | 167.82929218 145 | ], 146 | [ 147 | 567.58470976, 148 | 584.57258152 149 | ], 150 | [ 151 | 261.10363392, 152 | 1000.0 153 | ] 154 | ], 155 | "reverse_colors": false, 156 | "step": 0.033 157 | }, 158 | { 159 | "clockwise": true, 160 | "depth": 21, 161 | "disabled": false, 162 | "inc": 0.0048, 163 | "points": [ 164 | [ 165 | 567.58470976, 166 | 584.57258152 167 | ], 168 | [ 169 | 821.69477571, 170 | 852.28942343 171 | ], 172 | [ 173 | 745.62584118, 174 | 1000.0 175 | ], 176 | [ 177 | 261.10363392, 178 | 1000.0 179 | ] 180 | ], 181 | "reverse_colors": true, 182 | "step": 0.06 183 | } 184 | ] 185 | } -------------------------------------------------------------------------------- /Examples/hexagon_002.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | -------------------------------------------------------------------------------- /Examples/hexagon_003.json: -------------------------------------------------------------------------------- 1 | { 2 | "canvas": [ 3 | 0, 4 | 0, 5 | 1000, 6 | 1000 7 | ], 8 | "colors": [ 9 | "#000000", 10 | "#FFFFFF" 11 | ], 12 | "footer_buffer": 0.0, 13 | "shapes": [ 14 | { 15 | "clockwise": true, 16 | "depth": 50, 17 | "disabled": true, 18 | "inc": 0.0, 19 | "points": [ 20 | [ 21 | 720.0538358, 22 | 0.0 23 | ], 24 | [ 25 | 1000.0, 26 | 0.0 27 | ], 28 | [ 29 | 1000.0, 30 | 506.05652759 31 | ] 32 | ], 33 | "reverse_colors": false, 34 | "step": 0.145 35 | }, 36 | { 37 | "clockwise": true, 38 | "depth": 50, 39 | "disabled": true, 40 | "inc": 0.0, 41 | "points": [ 42 | [ 43 | 1000.0, 44 | 506.05652759 45 | ], 46 | [ 47 | 1000.0, 48 | 1000.0 49 | ], 50 | [ 51 | 745.62584118, 52 | 1000.0 53 | ] 54 | ], 55 | "reverse_colors": false, 56 | "step": 0.145 57 | }, 58 | { 59 | "clockwise": true, 60 | "depth": 50, 61 | "disabled": true, 62 | "inc": 0.0, 63 | "points": [ 64 | [ 65 | 0.0, 66 | 0.0 67 | ], 68 | [ 69 | 258.41184388, 70 | 0.0 71 | ], 72 | [ 73 | 0.0, 74 | 502.01884253 75 | ] 76 | ], 77 | "reverse_colors": false, 78 | "step": 0.145 79 | }, 80 | { 81 | "clockwise": true, 82 | "depth": 50, 83 | "disabled": true, 84 | "inc": 0.0, 85 | "points": [ 86 | [ 87 | 0.0, 88 | 502.01884253 89 | ], 90 | [ 91 | 261.10363392, 92 | 1000.0 93 | ], 94 | [ 95 | 0.0, 96 | 1000.0 97 | ] 98 | ], 99 | "reverse_colors": false, 100 | "step": 0.145 101 | }, 102 | { 103 | "clockwise": false, 104 | "depth": 50, 105 | "disabled": false, 106 | "inc": 0.0048, 107 | "points": [ 108 | [ 109 | 258.41184388, 110 | 0.0 111 | ], 112 | [ 113 | 261.10363392, 114 | 1000.0 115 | ], 116 | [ 117 | 0.0, 118 | 502.01884253 119 | ] 120 | ], 121 | "reverse_colors": true, 122 | "step": 0.145 123 | }, 124 | { 125 | "clockwise": true, 126 | "depth": 50, 127 | "disabled": false, 128 | "inc": 0.0048, 129 | "points": [ 130 | [ 131 | 258.41184388, 132 | 0.0 133 | ], 134 | [ 135 | 720.0538358, 136 | 0.0 137 | ], 138 | [ 139 | 261.10363392, 140 | 1000.0 141 | ] 142 | ], 143 | "reverse_colors": false, 144 | "step": 0.145 145 | }, 146 | { 147 | "clockwise": true, 148 | "depth": 50, 149 | "disabled": false, 150 | "inc": 0.0048, 151 | "points": [ 152 | [ 153 | 720.0538358, 154 | 0.0 155 | ], 156 | [ 157 | 1000.0, 158 | 506.05652759 159 | ], 160 | [ 161 | 491.44399192, 162 | 498.11470381 163 | ] 164 | ], 165 | "reverse_colors": false, 166 | "step": 0.145 167 | }, 168 | { 169 | "clockwise": true, 170 | "depth": 50, 171 | "disabled": false, 172 | "inc": 0.0048, 173 | "points": [ 174 | [ 175 | 491.44399192, 176 | 498.11470381 177 | ], 178 | [ 179 | 745.62584118, 180 | 1000.0 181 | ], 182 | [ 183 | 261.10363392, 184 | 1000.0 185 | ] 186 | ], 187 | "reverse_colors": true, 188 | "step": 0.145 189 | }, 190 | { 191 | "clockwise": false, 192 | "depth": 50, 193 | "disabled": false, 194 | "inc": 0.0048, 195 | "points": [ 196 | [ 197 | 491.44399192, 198 | 498.11470381 199 | ], 200 | [ 201 | 1000.0, 202 | 506.05652759 203 | ], 204 | [ 205 | 601.51636299, 206 | 715.45400131 207 | ] 208 | ], 209 | "reverse_colors": false, 210 | "step": 0.145 211 | }, 212 | { 213 | "clockwise": false, 214 | "depth": 50, 215 | "disabled": false, 216 | "inc": 0.0048, 217 | "points": [ 218 | [ 219 | 601.51636299, 220 | 715.45400131 221 | ], 222 | [ 223 | 867.53317527, 224 | 763.28046767 225 | ], 226 | [ 227 | 745.62584118, 228 | 1000.0 229 | ] 230 | ], 231 | "reverse_colors": false, 232 | "step": 0.145 233 | }, 234 | { 235 | "clockwise": true, 236 | "depth": 50, 237 | "disabled": false, 238 | "inc": 0.0048, 239 | "points": [ 240 | [ 241 | 1000.0, 242 | 506.05652759 243 | ], 244 | [ 245 | 867.53317527, 246 | 763.28046767 247 | ], 248 | [ 249 | 601.51636299, 250 | 715.45400131 251 | ] 252 | ], 253 | "reverse_colors": true, 254 | "step": 0.145 255 | } 256 | ] 257 | } -------------------------------------------------------------------------------- /Examples/hexagon_003b.json: -------------------------------------------------------------------------------- 1 | { 2 | "canvas": [ 3 | 0, 4 | 0, 5 | 1000, 6 | 1000 7 | ], 8 | "colors": [ 9 | "#000000", 10 | "#FFFFFF" 11 | ], 12 | "footer_buffer": 0.0, 13 | "shapes": [ 14 | { 15 | "clockwise": true, 16 | "depth": 50, 17 | "disabled": true, 18 | "inc": 0.0, 19 | "points": [ 20 | [ 21 | 720.0538358, 22 | 0.0 23 | ], 24 | [ 25 | 1000.0, 26 | 0.0 27 | ], 28 | [ 29 | 1000.0, 30 | 506.05652759 31 | ] 32 | ], 33 | "reverse_colors": false, 34 | "step": 0.145 35 | }, 36 | { 37 | "clockwise": true, 38 | "depth": 50, 39 | "disabled": true, 40 | "inc": 0.0, 41 | "points": [ 42 | [ 43 | 1000.0, 44 | 506.05652759 45 | ], 46 | [ 47 | 1000.0, 48 | 1000.0 49 | ], 50 | [ 51 | 745.62584118, 52 | 1000.0 53 | ] 54 | ], 55 | "reverse_colors": false, 56 | "step": 0.145 57 | }, 58 | { 59 | "clockwise": true, 60 | "depth": 50, 61 | "disabled": true, 62 | "inc": 0.0, 63 | "points": [ 64 | [ 65 | 0.0, 66 | 0.0 67 | ], 68 | [ 69 | 258.41184388, 70 | 0.0 71 | ], 72 | [ 73 | 0.0, 74 | 502.01884253 75 | ] 76 | ], 77 | "reverse_colors": false, 78 | "step": 0.145 79 | }, 80 | { 81 | "clockwise": true, 82 | "depth": 50, 83 | "disabled": true, 84 | "inc": 0.0, 85 | "points": [ 86 | [ 87 | 0.0, 88 | 502.01884253 89 | ], 90 | [ 91 | 261.10363392, 92 | 1000.0 93 | ], 94 | [ 95 | 0.0, 96 | 1000.0 97 | ] 98 | ], 99 | "reverse_colors": false, 100 | "step": 0.145 101 | }, 102 | { 103 | "clockwise": false, 104 | "depth": 15, 105 | "disabled": false, 106 | "inc": 0.0048, 107 | "points": [ 108 | [ 109 | 258.41184388, 110 | 0.0 111 | ], 112 | [ 113 | 261.10363392, 114 | 1000.0 115 | ], 116 | [ 117 | 0.0, 118 | 502.01884253 119 | ] 120 | ], 121 | "reverse_colors": true, 122 | "step": 0.145 123 | }, 124 | { 125 | "clockwise": true, 126 | "depth": 12, 127 | "disabled": false, 128 | "inc": 0.0048, 129 | "points": [ 130 | [ 131 | 258.41184388, 132 | 0.0 133 | ], 134 | [ 135 | 720.0538358, 136 | 0.0 137 | ], 138 | [ 139 | 261.10363392, 140 | 1000.0 141 | ] 142 | ], 143 | "reverse_colors": false, 144 | "step": 0.145 145 | }, 146 | { 147 | "clockwise": true, 148 | "depth": 14, 149 | "disabled": false, 150 | "inc": 0.0048, 151 | "points": [ 152 | [ 153 | 720.0538358, 154 | 0.0 155 | ], 156 | [ 157 | 1000.0, 158 | 506.05652759 159 | ], 160 | [ 161 | 491.44399192, 162 | 498.11470381 163 | ] 164 | ], 165 | "reverse_colors": false, 166 | "step": 0.145 167 | }, 168 | { 169 | "clockwise": true, 170 | "depth": 11, 171 | "disabled": false, 172 | "inc": 0.0048, 173 | "points": [ 174 | [ 175 | 491.44399192, 176 | 498.11470381 177 | ], 178 | [ 179 | 745.62584118, 180 | 1000.0 181 | ], 182 | [ 183 | 261.10363392, 184 | 1000.0 185 | ] 186 | ], 187 | "reverse_colors": true, 188 | "step": 0.145 189 | }, 190 | { 191 | "clockwise": false, 192 | "depth": 16, 193 | "disabled": false, 194 | "inc": 0.0048, 195 | "points": [ 196 | [ 197 | 491.44399192, 198 | 498.11470381 199 | ], 200 | [ 201 | 1000.0, 202 | 506.05652759 203 | ], 204 | [ 205 | 601.51636299, 206 | 715.45400131 207 | ] 208 | ], 209 | "reverse_colors": false, 210 | "step": 0.145 211 | }, 212 | { 213 | "clockwise": false, 214 | "depth": 16, 215 | "disabled": false, 216 | "inc": 0.0048, 217 | "points": [ 218 | [ 219 | 601.51636299, 220 | 715.45400131 221 | ], 222 | [ 223 | 867.53317527, 224 | 763.28046767 225 | ], 226 | [ 227 | 745.62584118, 228 | 1000.0 229 | ] 230 | ], 231 | "reverse_colors": false, 232 | "step": 0.145 233 | }, 234 | { 235 | "clockwise": true, 236 | "depth": 17, 237 | "disabled": false, 238 | "inc": 0.0048, 239 | "points": [ 240 | [ 241 | 1000.0, 242 | 506.05652759 243 | ], 244 | [ 245 | 867.53317527, 246 | 763.28046767 247 | ], 248 | [ 249 | 601.51636299, 250 | 715.45400131 251 | ] 252 | ], 253 | "reverse_colors": true, 254 | "step": 0.145 255 | } 256 | ] 257 | } -------------------------------------------------------------------------------- /Examples/hexagon_003b.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | -------------------------------------------------------------------------------- /Examples/hexagon_003b_rasterized.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuclearsugar/VectorRecursionWorkbench/3881605d9c6bd4e64d4252f3ee6cb7c1a9ea64ed/Examples/hexagon_003b_rasterized.jpg -------------------------------------------------------------------------------- /Examples/vanilla_001.json: -------------------------------------------------------------------------------- 1 | { 2 | "canvas": [ 3 | 0, 4 | 0, 5 | 843, 6 | 398 7 | ], 8 | "colors": [ 9 | "#FFFFFF", 10 | "#000000" 11 | ], 12 | "footer_buffer": 0.0, 13 | "shapes": [ 14 | { 15 | "clockwise": false, 16 | "depth": 23, 17 | "disabled": false, 18 | "inc": 0.02, 19 | "points": [ 20 | [ 21 | 0.0, 22 | 0.0 23 | ], 24 | [ 25 | 285.0, 26 | 0.0 27 | ], 28 | [ 29 | 285.0, 30 | 398.0 31 | ], 32 | [ 33 | 0.0, 34 | 398.0 35 | ] 36 | ], 37 | "reverse_colors": false, 38 | "step": 0.075 39 | }, 40 | { 41 | "clockwise": false, 42 | "depth": 17, 43 | "disabled": false, 44 | "inc": 0.0259, 45 | "points": [ 46 | [ 47 | 285.0, 48 | 0.0 49 | ], 50 | [ 51 | 498.0, 52 | 0.0 53 | ], 54 | [ 55 | 372.0, 56 | 237.0 57 | ], 58 | [ 59 | 285.0, 60 | 161.0 61 | ] 62 | ], 63 | "reverse_colors": false, 64 | "step": 0.148 65 | }, 66 | { 67 | "clockwise": true, 68 | "depth": 10, 69 | "disabled": false, 70 | "inc": 0.0451, 71 | "points": [ 72 | [ 73 | 285.0, 74 | 161.0 75 | ], 76 | [ 77 | 372.0, 78 | 237.0 79 | ], 80 | [ 81 | 285.0, 82 | 398.0 83 | ] 84 | ], 85 | "reverse_colors": true, 86 | "step": 0.166 87 | }, 88 | { 89 | "clockwise": false, 90 | "depth": 13, 91 | "disabled": false, 92 | "inc": 0.03, 93 | "points": [ 94 | [ 95 | 372.0, 96 | 237.0 97 | ], 98 | [ 99 | 554.0, 100 | 398.0 101 | ], 102 | [ 103 | 285.0, 104 | 398.0 105 | ] 106 | ], 107 | "reverse_colors": false, 108 | "step": 0.155 109 | }, 110 | { 111 | "clockwise": true, 112 | "depth": 29, 113 | "disabled": false, 114 | "inc": 0.0298, 115 | "points": [ 116 | [ 117 | 498.0, 118 | 0.0 119 | ], 120 | [ 121 | 843.0, 122 | 0.0 123 | ], 124 | [ 125 | 843.0, 126 | 398.0 127 | ], 128 | [ 129 | 554.0, 130 | 398.0 131 | ], 132 | [ 133 | 372.0, 134 | 237.0 135 | ] 136 | ], 137 | "reverse_colors": false, 138 | "step": 0.063 139 | } 140 | ] 141 | } -------------------------------------------------------------------------------- /Examples/vanilla_001.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | -------------------------------------------------------------------------------- /Examples/vanilla_002.json: -------------------------------------------------------------------------------- 1 | { 2 | "canvas": [ 3 | 0, 4 | 0, 5 | 1500, 6 | 500 7 | ], 8 | "colors": [ 9 | "#000000", 10 | "#FFFFFF" 11 | ], 12 | "footer_buffer": 0.0, 13 | "shapes": [ 14 | { 15 | "clockwise": true, 16 | "depth": 50, 17 | "disabled": false, 18 | "inc": 0.0092, 19 | "points": [ 20 | [ 21 | 1015.32033426, 22 | 0.0 23 | ], 24 | [ 25 | 1500.0000000000005, 26 | 0.0 27 | ], 28 | [ 29 | 1500.0000000000005, 30 | 500.0 31 | ], 32 | [ 33 | 1020.54317549, 34 | 500.0 35 | ] 36 | ], 37 | "reverse_colors": false, 38 | "step": 0.118 39 | }, 40 | { 41 | "clockwise": false, 42 | "depth": 50, 43 | "disabled": false, 44 | "inc": 0.0072, 45 | "points": [ 46 | [ 47 | 0.0, 48 | 282.03342618 49 | ], 50 | [ 51 | 1018.22522299, 52 | 278.0946807 53 | ], 54 | [ 55 | 1020.54317549, 56 | 500.0 57 | ], 58 | [ 59 | 0.0, 60 | 500.0 61 | ] 62 | ], 63 | "reverse_colors": false, 64 | "step": 0.049 65 | }, 66 | { 67 | "clockwise": true, 68 | "depth": 50, 69 | "disabled": false, 70 | "inc": 0.0107, 71 | "points": [ 72 | [ 73 | 0.0, 74 | 0.0 75 | ], 76 | [ 77 | 721.79665738, 78 | 0.0 79 | ], 80 | [ 81 | 724.16184392, 82 | 279.23219014 83 | ], 84 | [ 85 | 0.0, 86 | 282.03342618 87 | ] 88 | ], 89 | "reverse_colors": true, 90 | "step": 0.118 91 | }, 92 | { 93 | "clockwise": true, 94 | "depth": 50, 95 | "disabled": false, 96 | "inc": 0.0137, 97 | "points": [ 98 | [ 99 | 721.79665738, 100 | 0.0 101 | ], 102 | [ 103 | 853.41225627, 104 | 0.0 105 | ], 106 | [ 107 | 855.61789056, 108 | 278.72368584 109 | ], 110 | [ 111 | 724.16184392, 112 | 279.23219014 113 | ] 114 | ], 115 | "reverse_colors": false, 116 | "step": 0.29 117 | }, 118 | { 119 | "clockwise": true, 120 | "depth": 50, 121 | "disabled": false, 122 | "inc": 0.0, 123 | "points": [ 124 | [ 125 | 853.41225627, 126 | 0.0 127 | ], 128 | [ 129 | 1015.32033426, 130 | 0.0 131 | ], 132 | [ 133 | 1015.88663056, 134 | 54.21343234 135 | ], 136 | [ 137 | 853.86062103, 138 | 56.65938379 139 | ] 140 | ], 141 | "reverse_colors": false, 142 | "step": 0.356 143 | }, 144 | { 145 | "clockwise": true, 146 | "depth": 50, 147 | "disabled": false, 148 | "inc": 0.0, 149 | "points": [ 150 | [ 151 | 854.39046348, 152 | 123.61501692 153 | ], 154 | [ 155 | 1016.58350542, 156 | 120.92758596 157 | ], 158 | [ 159 | 1018.22522299, 160 | 278.0946807 161 | ], 162 | [ 163 | 855.61789056, 164 | 278.72368584 165 | ] 166 | ], 167 | "reverse_colors": false, 168 | "step": 0.301 169 | }, 170 | { 171 | "clockwise": false, 172 | "depth": 50, 173 | "disabled": false, 174 | "inc": 0.0, 175 | "points": [ 176 | [ 177 | 853.86062103, 178 | 56.65938379 179 | ], 180 | [ 181 | 929.43156716, 182 | 55.51856161 183 | ], 184 | [ 185 | 928.83163214, 186 | 122.38157621 187 | ], 188 | [ 189 | 854.39046348, 190 | 123.61501692 191 | ] 192 | ], 193 | "reverse_colors": false, 194 | "step": 0.344 195 | }, 196 | { 197 | "clockwise": true, 198 | "depth": 50, 199 | "disabled": false, 200 | "inc": 0.0, 201 | "points": [ 202 | [ 203 | 972.37522953, 204 | 54.87028228 205 | ], 206 | [ 207 | 1015.88663056, 208 | 54.21343234 209 | ], 210 | [ 211 | 1016.58350542, 212 | 120.92758596 213 | ], 214 | [ 215 | 972.70876008, 216 | 121.65456135 217 | ] 218 | ], 219 | "reverse_colors": false, 220 | "step": 0.522 221 | }, 222 | { 223 | "clockwise": true, 224 | "depth": 50, 225 | "disabled": false, 226 | "inc": 0.0, 227 | "points": [ 228 | [ 229 | 929.43156716, 230 | 55.51856161 231 | ], 232 | [ 233 | 972.37522953, 234 | 54.87028228 235 | ], 236 | [ 237 | 972.49754019, 238 | 79.3610805 239 | ], 240 | [ 241 | 929.20941333, 242 | 80.27770058 243 | ] 244 | ], 245 | "reverse_colors": false, 246 | "step": 0.436 247 | }, 248 | { 249 | "clockwise": true, 250 | "depth": 50, 251 | "disabled": false, 252 | "inc": 0.0, 253 | "points": [ 254 | [ 255 | 929.20941333, 256 | 80.27770058 257 | ], 258 | [ 259 | 972.49754019, 260 | 79.3610805 261 | ], 262 | [ 263 | 972.70876008, 264 | 121.65456135 265 | ], 266 | [ 267 | 928.83163214, 268 | 122.38157621 269 | ] 270 | ], 271 | "reverse_colors": false, 272 | "step": 0.465 273 | } 274 | ] 275 | } -------------------------------------------------------------------------------- /Examples/vanilla_004.json: -------------------------------------------------------------------------------- 1 | { 2 | "canvas": [ 3 | 0, 4 | 0, 5 | 1500, 6 | 500 7 | ], 8 | "colors": [ 9 | "#000000", 10 | "#FFFFFF" 11 | ], 12 | "footer_buffer": 0.0, 13 | "shapes": [ 14 | { 15 | "clockwise": false, 16 | "depth": 50, 17 | "disabled": false, 18 | "inc": 0.0092, 19 | "points": [ 20 | [ 21 | 227.71587744, 22 | 0.0 23 | ], 24 | [ 25 | 1176.18384401, 26 | 0.0 27 | ], 28 | [ 29 | 836.54246503, 30 | 334.91367692 31 | ] 32 | ], 33 | "reverse_colors": true, 34 | "step": 0.053 35 | }, 36 | { 37 | "clockwise": true, 38 | "depth": 50, 39 | "disabled": false, 40 | "inc": 0.0013, 41 | "points": [ 42 | [ 43 | 1023.44741381, 44 | 150.61038673 45 | ], 46 | [ 47 | 1176.18384401, 48 | 0.0 49 | ], 50 | [ 51 | 1500.0, 52 | 0 53 | ], 54 | [ 55 | 1500.0, 56 | 500.0 57 | ] 58 | ], 59 | "reverse_colors": false, 60 | "step": 0.177 61 | }, 62 | { 63 | "clockwise": false, 64 | "depth": 50, 65 | "disabled": false, 66 | "inc": 0.0043, 67 | "points": [ 68 | [ 69 | 836.54246503, 70 | 334.91367692 71 | ], 72 | [ 73 | 1023.44741381, 74 | 150.61038673 75 | ], 76 | [ 77 | 1500.0, 78 | 500.0 79 | ], 80 | [ 81 | 856.545961, 82 | 500.0 83 | ] 84 | ], 85 | "reverse_colors": true, 86 | "step": 0.177 87 | }, 88 | { 89 | "clockwise": true, 90 | "depth": 50, 91 | "disabled": false, 92 | "inc": 0.0, 93 | "points": [ 94 | [ 95 | 0.0, 96 | 0 97 | ], 98 | [ 99 | 227.71587744, 100 | 0.0 101 | ], 102 | [ 103 | 0.0, 104 | 500.0 105 | ] 106 | ], 107 | "reverse_colors": true, 108 | "step": 0.177 109 | }, 110 | { 111 | "clockwise": true, 112 | "depth": 53, 113 | "disabled": false, 114 | "inc": 0.0018, 115 | "points": [ 116 | [ 117 | 227.71587744, 118 | 0.0 119 | ], 120 | [ 121 | 836.54246503, 122 | 334.91367692 123 | ], 124 | [ 125 | 856.545961, 126 | 500.0 127 | ], 128 | [ 129 | 0.0, 130 | 500.0 131 | ] 132 | ], 133 | "reverse_colors": false, 134 | "step": 0.144 135 | } 136 | ] 137 | } -------------------------------------------------------------------------------- /Examples/vanilla_005.json: -------------------------------------------------------------------------------- 1 | { 2 | "canvas": [ 3 | 0, 4 | 0, 5 | 1500, 6 | 600 7 | ], 8 | "colors": [ 9 | "#000000", 10 | "#FFFFFF" 11 | ], 12 | "footer_buffer": 0.0, 13 | "shapes": [ 14 | { 15 | "clockwise": true, 16 | "depth": 50, 17 | "disabled": false, 18 | "inc": 0.0077, 19 | "points": [ 20 | [ 21 | 0, 22 | 0.0 23 | ], 24 | [ 25 | 311.79039301, 26 | 0.0 27 | ], 28 | [ 29 | 428.38427948, 30 | 600.0 31 | ], 32 | [ 33 | 0, 34 | 600.0 35 | ] 36 | ], 37 | "reverse_colors": false, 38 | "step": 0.177 39 | }, 40 | { 41 | "clockwise": false, 42 | "depth": 50, 43 | "disabled": false, 44 | "inc": 0.0055, 45 | "points": [ 46 | [ 47 | 1164.62882096, 48 | 0.0 49 | ], 50 | [ 51 | 1500, 52 | 0.0 53 | ], 54 | [ 55 | 1500, 56 | 600.0 57 | ], 58 | [ 59 | 902.62008734, 60 | 600.0 61 | ] 62 | ], 63 | "reverse_colors": false, 64 | "step": 0.173 65 | }, 66 | { 67 | "clockwise": true, 68 | "depth": 50, 69 | "disabled": false, 70 | "inc": 0.0094, 71 | "points": [ 72 | [ 73 | 405.9926401, 74 | 484.77111422 75 | ], 76 | [ 77 | 992.62015657, 78 | 393.89984145 79 | ], 80 | [ 81 | 902.62008734, 82 | 600.0 83 | ], 84 | [ 85 | 428.38427948, 86 | 600.0 87 | ] 88 | ], 89 | "reverse_colors": true, 90 | "step": 0.175 91 | }, 92 | { 93 | "clockwise": false, 94 | "depth": 50, 95 | "disabled": false, 96 | "inc": 0.0112, 97 | "points": [ 98 | [ 99 | 311.79039301, 100 | 0.0 101 | ], 102 | [ 103 | 690.3930131, 104 | 0.0 105 | ], 106 | [ 107 | 365.96074232, 108 | 278.76426947 109 | ] 110 | ], 111 | "reverse_colors": true, 112 | "step": 0.15 113 | }, 114 | { 115 | "clockwise": true, 116 | "depth": 50, 117 | "disabled": false, 118 | "inc": 0.0118, 119 | "points": [ 120 | [ 121 | 830.56768559, 122 | 0.0 123 | ], 124 | [ 125 | 1164.62882096, 126 | 0.0 127 | ], 128 | [ 129 | 992.62015657, 130 | 393.89984145 131 | ], 132 | [ 133 | 885.49246004, 134 | 410.49440931 135 | ] 136 | ], 137 | "reverse_colors": false, 138 | "step": 0.254 139 | }, 140 | { 141 | "clockwise": false, 142 | "depth": 50, 143 | "disabled": false, 144 | "inc": 0.0111, 145 | "points": [ 146 | [ 147 | 365.96074232, 148 | 278.76426947 149 | ], 150 | [ 151 | 462.09319874, 152 | 196.1636887 153 | ], 154 | [ 155 | 700.04248139, 156 | 439.22145522 157 | ], 158 | [ 159 | 405.9926401, 160 | 484.77111422 161 | ] 162 | ], 163 | "reverse_colors": true, 164 | "step": 0.223 165 | }, 166 | { 167 | "clockwise": false, 168 | "depth": 50, 169 | "disabled": false, 170 | "inc": 0.0152, 171 | "points": [ 172 | [ 173 | 690.3930131, 174 | 0.0 175 | ], 176 | [ 177 | 830.56768559, 178 | 0.0 179 | ], 180 | [ 181 | 863.99809061, 182 | 249.85071856 183 | ], 184 | [ 185 | 556.50371299, 186 | 115.04266467 187 | ] 188 | ], 189 | "reverse_colors": true, 190 | "step": 0.187 191 | }, 192 | { 193 | "clockwise": true, 194 | "depth": 50, 195 | "disabled": false, 196 | "inc": 0.0134, 197 | "points": [ 198 | [ 199 | 556.50371299, 200 | 115.04266467 201 | ], 202 | [ 203 | 642.3772243, 204 | 152.69031544 205 | ], 206 | [ 207 | 545.75955143, 208 | 281.62625699 209 | ], 210 | [ 211 | 462.09319874, 212 | 196.1636887 213 | ] 214 | ], 215 | "reverse_colors": false, 216 | "step": 0.236 217 | }, 218 | { 219 | "clockwise": false, 220 | "depth": 50, 221 | "disabled": false, 222 | "inc": 0.014, 223 | "points": [ 224 | [ 225 | 753.19734202, 226 | 201.27476279 227 | ], 228 | [ 229 | 863.99809061, 230 | 249.85071856 231 | ], 232 | [ 233 | 885.49246004, 234 | 410.49440931 235 | ], 236 | [ 237 | 700.04248139, 238 | 439.22145522 239 | ], 240 | [ 241 | 619.00331085, 242 | 356.44247152 243 | ] 244 | ], 245 | "reverse_colors": false, 246 | "step": 0.232 247 | }, 248 | { 249 | "clockwise": true, 250 | "depth": 50, 251 | "disabled": false, 252 | "inc": 0.0164, 253 | "points": [ 254 | [ 255 | 603.74977284, 256 | 204.23851233 257 | ], 258 | [ 259 | 642.3772243, 260 | 152.69031544 261 | ], 262 | [ 263 | 753.19734202, 264 | 201.27476279 265 | ], 266 | [ 267 | 702.10760766, 268 | 260.34949921 269 | ] 270 | ], 271 | "reverse_colors": false, 272 | "step": 0.224 273 | }, 274 | { 275 | "clockwise": true, 276 | "depth": 50, 277 | "disabled": false, 278 | "inc": 0.0102, 279 | "points": [ 280 | [ 281 | 603.74977284, 282 | 204.23851233 283 | ], 284 | [ 285 | 647.26416822, 286 | 229.06252023 287 | ], 288 | [ 289 | 619.00331085, 290 | 356.44247152 291 | ], 292 | [ 293 | 545.75955143, 294 | 281.62625699 295 | ] 296 | ], 297 | "reverse_colors": true, 298 | "step": 0.219 299 | }, 300 | { 301 | "clockwise": true, 302 | "depth": 50, 303 | "disabled": false, 304 | "inc": 0.014, 305 | "points": [ 306 | [ 307 | 647.26416822, 308 | 229.06252023 309 | ], 310 | [ 311 | 702.10760766, 312 | 260.34949921 313 | ], 314 | [ 315 | 636.16870108, 316 | 279.07303636 317 | ] 318 | ], 319 | "reverse_colors": false, 320 | "step": 0.257 321 | }, 322 | { 323 | "clockwise": true, 324 | "depth": 50, 325 | "disabled": false, 326 | "inc": 0.0157, 327 | "points": [ 328 | [ 329 | 636.16870108, 330 | 279.07303636 331 | ], 332 | [ 333 | 702.10760766, 334 | 260.34949921 335 | ], 336 | [ 337 | 619.00331085, 338 | 356.44247152 339 | ] 340 | ], 341 | "reverse_colors": true, 342 | "step": 0.242 343 | } 344 | ] 345 | } -------------------------------------------------------------------------------- /Examples/vanilla_005b.json: -------------------------------------------------------------------------------- 1 | { 2 | "canvas": [ 3 | 0, 4 | 0, 5 | 1500, 6 | 600 7 | ], 8 | "colors": [ 9 | "#000000", 10 | "#FFFFFF" 11 | ], 12 | "footer_buffer": 0.0, 13 | "shapes": [ 14 | { 15 | "clockwise": true, 16 | "depth": 12, 17 | "disabled": false, 18 | "inc": 0.0077, 19 | "points": [ 20 | [ 21 | 0.0, 22 | 0.0 23 | ], 24 | [ 25 | 311.79039301, 26 | 0.0 27 | ], 28 | [ 29 | 428.38427948, 30 | 600.0 31 | ], 32 | [ 33 | 0.0, 34 | 600.0 35 | ] 36 | ], 37 | "reverse_colors": false, 38 | "step": 0.177 39 | }, 40 | { 41 | "clockwise": false, 42 | "depth": 10, 43 | "disabled": false, 44 | "inc": 0.0055, 45 | "points": [ 46 | [ 47 | 1164.62882096, 48 | 0.0 49 | ], 50 | [ 51 | 1500.0, 52 | 0.0 53 | ], 54 | [ 55 | 1500.0, 56 | 600.0 57 | ], 58 | [ 59 | 902.62008734, 60 | 600.0 61 | ] 62 | ], 63 | "reverse_colors": false, 64 | "step": 0.173 65 | }, 66 | { 67 | "clockwise": true, 68 | "depth": 19, 69 | "disabled": false, 70 | "inc": 0.0094, 71 | "points": [ 72 | [ 73 | 405.9926401, 74 | 484.77111422 75 | ], 76 | [ 77 | 992.62015657, 78 | 393.89984145 79 | ], 80 | [ 81 | 902.62008734, 82 | 600.0 83 | ], 84 | [ 85 | 428.38427948, 86 | 600.0 87 | ] 88 | ], 89 | "reverse_colors": true, 90 | "step": 0.175 91 | }, 92 | { 93 | "clockwise": false, 94 | "depth": 13, 95 | "disabled": false, 96 | "inc": 0.0112, 97 | "points": [ 98 | [ 99 | 311.79039301, 100 | 0.0 101 | ], 102 | [ 103 | 690.3930131, 104 | 0.0 105 | ], 106 | [ 107 | 365.96074232, 108 | 278.76426947 109 | ] 110 | ], 111 | "reverse_colors": true, 112 | "step": 0.15 113 | }, 114 | { 115 | "clockwise": true, 116 | "depth": 16, 117 | "disabled": false, 118 | "inc": 0.0118, 119 | "points": [ 120 | [ 121 | 830.56768559, 122 | 0.0 123 | ], 124 | [ 125 | 1164.62882096, 126 | 0.0 127 | ], 128 | [ 129 | 992.62015657, 130 | 393.89984145 131 | ], 132 | [ 133 | 885.49246004, 134 | 410.49440931 135 | ] 136 | ], 137 | "reverse_colors": false, 138 | "step": 0.254 139 | }, 140 | { 141 | "clockwise": false, 142 | "depth": 17, 143 | "disabled": false, 144 | "inc": 0.0111, 145 | "points": [ 146 | [ 147 | 365.96074232, 148 | 278.76426947 149 | ], 150 | [ 151 | 462.09319874, 152 | 196.1636887 153 | ], 154 | [ 155 | 700.04248139, 156 | 439.22145522 157 | ], 158 | [ 159 | 405.9926401, 160 | 484.77111422 161 | ] 162 | ], 163 | "reverse_colors": true, 164 | "step": 0.223 165 | }, 166 | { 167 | "clockwise": false, 168 | "depth": 7, 169 | "disabled": false, 170 | "inc": 0.0152, 171 | "points": [ 172 | [ 173 | 690.3930131, 174 | 0.0 175 | ], 176 | [ 177 | 830.56768559, 178 | 0.0 179 | ], 180 | [ 181 | 863.99809061, 182 | 249.85071856 183 | ], 184 | [ 185 | 556.50371299, 186 | 115.04266467 187 | ] 188 | ], 189 | "reverse_colors": true, 190 | "step": 0.187 191 | }, 192 | { 193 | "clockwise": true, 194 | "depth": 14, 195 | "disabled": false, 196 | "inc": 0.0134, 197 | "points": [ 198 | [ 199 | 556.50371299, 200 | 115.04266467 201 | ], 202 | [ 203 | 642.3772243, 204 | 152.69031544 205 | ], 206 | [ 207 | 545.75955143, 208 | 281.62625699 209 | ], 210 | [ 211 | 462.09319874, 212 | 196.1636887 213 | ] 214 | ], 215 | "reverse_colors": false, 216 | "step": 0.236 217 | }, 218 | { 219 | "clockwise": false, 220 | "depth": 14, 221 | "disabled": false, 222 | "inc": 0.014, 223 | "points": [ 224 | [ 225 | 753.19734202, 226 | 201.27476279 227 | ], 228 | [ 229 | 863.99809061, 230 | 249.85071856 231 | ], 232 | [ 233 | 885.49246004, 234 | 410.49440931 235 | ], 236 | [ 237 | 700.04248139, 238 | 439.22145522 239 | ], 240 | [ 241 | 619.00331085, 242 | 356.44247152 243 | ] 244 | ], 245 | "reverse_colors": false, 246 | "step": 0.232 247 | }, 248 | { 249 | "clockwise": true, 250 | "depth": 14, 251 | "disabled": false, 252 | "inc": 0.0164, 253 | "points": [ 254 | [ 255 | 603.74977284, 256 | 204.23851233 257 | ], 258 | [ 259 | 642.3772243, 260 | 152.69031544 261 | ], 262 | [ 263 | 753.19734202, 264 | 201.27476279 265 | ], 266 | [ 267 | 702.10760766, 268 | 260.34949921 269 | ] 270 | ], 271 | "reverse_colors": false, 272 | "step": 0.224 273 | }, 274 | { 275 | "clockwise": true, 276 | "depth": 15, 277 | "disabled": false, 278 | "inc": 0.0102, 279 | "points": [ 280 | [ 281 | 603.74977284, 282 | 204.23851233 283 | ], 284 | [ 285 | 647.26416822, 286 | 229.06252023 287 | ], 288 | [ 289 | 619.00331085, 290 | 356.44247152 291 | ], 292 | [ 293 | 545.75955143, 294 | 281.62625699 295 | ] 296 | ], 297 | "reverse_colors": true, 298 | "step": 0.219 299 | }, 300 | { 301 | "clockwise": true, 302 | "depth": 8, 303 | "disabled": false, 304 | "inc": 0.014, 305 | "points": [ 306 | [ 307 | 647.26416822, 308 | 229.06252023 309 | ], 310 | [ 311 | 702.10760766, 312 | 260.34949921 313 | ], 314 | [ 315 | 636.16870108, 316 | 279.07303636 317 | ] 318 | ], 319 | "reverse_colors": false, 320 | "step": 0.257 321 | }, 322 | { 323 | "clockwise": true, 324 | "depth": 5, 325 | "disabled": false, 326 | "inc": 0.0157, 327 | "points": [ 328 | [ 329 | 636.16870108, 330 | 279.07303636 331 | ], 332 | [ 333 | 702.10760766, 334 | 260.34949921 335 | ], 336 | [ 337 | 619.00331085, 338 | 356.44247152 339 | ] 340 | ], 341 | "reverse_colors": true, 342 | "step": 0.242 343 | } 344 | ] 345 | } -------------------------------------------------------------------------------- /Examples/vanilla_006.json: -------------------------------------------------------------------------------- 1 | { 2 | "canvas": [ 3 | 0, 4 | 0, 5 | 1500, 6 | 600 7 | ], 8 | "colors": [ 9 | "#000000", 10 | "#FFFFFF" 11 | ], 12 | "footer_buffer": 0.0, 13 | "shapes": [ 14 | { 15 | "clockwise": true, 16 | "depth": 50, 17 | "disabled": false, 18 | "inc": 0.0193, 19 | "points": [ 20 | [ 21 | 1162.00873362, 22 | 0.0 23 | ], 24 | [ 25 | 1500, 26 | 0 27 | ], 28 | [ 29 | 1500.0, 30 | 455.89519651 31 | ], 32 | [ 33 | 1139.06326003, 34 | 174.28071914 35 | ] 36 | ], 37 | "reverse_colors": true, 38 | "step": 0.135 39 | }, 40 | { 41 | "clockwise": false, 42 | "depth": 50, 43 | "disabled": false, 44 | "inc": 0.0197, 45 | "points": [ 46 | [ 47 | 996.66905663, 48 | 197.03891933 49 | ], 50 | [ 51 | 1139.06326003, 52 | 174.28071914 53 | ], 54 | [ 55 | 1500.0, 56 | 455.89519651 57 | ], 58 | [ 59 | 1500, 60 | 600 61 | ], 62 | [ 63 | 1046.72489083, 64 | 600.0 65 | ] 66 | ], 67 | "reverse_colors": false, 68 | "step": 0.135 69 | }, 70 | { 71 | "clockwise": false, 72 | "depth": 50, 73 | "disabled": false, 74 | "inc": 0.021, 75 | "points": [ 76 | [ 77 | 171.42997395, 78 | 328.933026 79 | ], 80 | [ 81 | 444.73281796, 82 | 285.25230945 83 | ], 84 | [ 85 | 458.51528384, 86 | 600.0 87 | ], 88 | [ 89 | 172.92576419, 90 | 600.0 91 | ] 92 | ], 93 | "reverse_colors": true, 94 | "step": 0.135 95 | }, 96 | { 97 | "clockwise": true, 98 | "depth": 50, 99 | "disabled": false, 100 | "inc": 0.0186, 101 | "points": [ 102 | [ 103 | 724.43388466, 104 | 240.54899485 105 | ], 106 | [ 107 | 996.66905663, 108 | 197.03891933 109 | ], 110 | [ 111 | 1046.72489083, 112 | 600.0 113 | ], 114 | [ 115 | 750.65502183, 116 | 600.0 117 | ] 118 | ], 119 | "reverse_colors": true, 120 | "step": 0.135 121 | }, 122 | { 123 | "clockwise": true, 124 | "depth": 50, 125 | "disabled": false, 126 | "inc": 0.0208, 127 | "points": [ 128 | [ 129 | 444.73281796, 130 | 285.25230945 131 | ], 132 | [ 133 | 724.43388466, 134 | 240.54899485 135 | ], 136 | [ 137 | 458.51528384, 138 | 600.0 139 | ] 140 | ], 141 | "reverse_colors": false, 142 | "step": 0.135 143 | }, 144 | { 145 | "clockwise": false, 146 | "depth": 50, 147 | "disabled": false, 148 | "inc": 0.0181, 149 | "points": [ 150 | [ 151 | 724.43388466, 152 | 240.54899485 153 | ], 154 | [ 155 | 750.65502183, 156 | 600.0 157 | ], 158 | [ 159 | 458.51528384, 160 | 600.0 161 | ] 162 | ], 163 | "reverse_colors": false, 164 | "step": 0.135 165 | }, 166 | { 167 | "clockwise": false, 168 | "depth": 50, 169 | "disabled": false, 170 | "inc": 0.0192, 171 | "points": [ 172 | [ 173 | 319.65065502, 174 | 0.0 175 | ], 176 | [ 177 | 602.62008734, 178 | 0.0 179 | ], 180 | [ 181 | 587.59336087, 182 | 262.41957638 183 | ], 184 | [ 185 | 306.36386084, 186 | 307.36717333 187 | ] 188 | ], 189 | "reverse_colors": false, 190 | "step": 0.135 191 | }, 192 | { 193 | "clockwise": true, 194 | "depth": 50, 195 | "disabled": false, 196 | "inc": 0.0193, 197 | "points": [ 198 | [ 199 | 602.62008734, 200 | 0.0 201 | ], 202 | [ 203 | 881.65938865, 204 | 0.0 205 | ], 206 | [ 207 | 865.08991353, 208 | 218.06859897 209 | ], 210 | [ 211 | 587.59336087, 212 | 262.41957638 213 | ] 214 | ], 215 | "reverse_colors": true, 216 | "step": 0.135 217 | }, 218 | { 219 | "clockwise": false, 220 | "depth": 50, 221 | "disabled": false, 222 | "inc": 0.0196, 223 | "points": [ 224 | [ 225 | 881.65938865, 226 | 0.0 227 | ], 228 | [ 229 | 1162.00873362, 230 | 0.0 231 | ], 232 | [ 233 | 1139.06326003, 234 | 174.28071914 235 | ], 236 | [ 237 | 865.08991353, 238 | 218.06859897 239 | ] 240 | ], 241 | "reverse_colors": false, 242 | "step": 0.149 243 | }, 244 | { 245 | "clockwise": true, 246 | "depth": 50, 247 | "disabled": false, 248 | "inc": 0.0193, 249 | "points": [ 250 | [ 251 | 0, 252 | 0 253 | ], 254 | [ 255 | 306.36386084, 256 | 307.36717333 257 | ], 258 | [ 259 | 0.0, 260 | 356.33187773 261 | ] 262 | ], 263 | "reverse_colors": false, 264 | "step": 0.135 265 | }, 266 | { 267 | "clockwise": true, 268 | "depth": 50, 269 | "disabled": false, 270 | "inc": 0.0186, 271 | "points": [ 272 | [ 273 | 0.0, 274 | 0.0 275 | ], 276 | [ 277 | 319.65065502, 278 | 0.0 279 | ], 280 | [ 281 | 306.36386084, 282 | 307.36717333 283 | ] 284 | ], 285 | "reverse_colors": true, 286 | "step": 0.135 287 | }, 288 | { 289 | "clockwise": false, 290 | "depth": 50, 291 | "disabled": false, 292 | "inc": 0.0265, 293 | "points": [ 294 | [ 295 | 0.0, 296 | 356.33187773 297 | ], 298 | [ 299 | 171.42997395, 300 | 328.933026 301 | ], 302 | [ 303 | 172.16634055, 304 | 462.37731519 305 | ], 306 | [ 307 | 0.0, 308 | 482.09606987 309 | ] 310 | ], 311 | "reverse_colors": true, 312 | "step": 0.217 313 | }, 314 | { 315 | "clockwise": true, 316 | "depth": 50, 317 | "disabled": false, 318 | "inc": 0.0192, 319 | "points": [ 320 | [ 321 | 0.0, 322 | 482.09606987 323 | ], 324 | [ 325 | 172.16634055, 326 | 462.37731519 327 | ], 328 | [ 329 | 172.92576419, 330 | 600.0 331 | ], 332 | [ 333 | 0, 334 | 600 335 | ] 336 | ], 337 | "reverse_colors": false, 338 | "step": 0.204 339 | } 340 | ] 341 | } -------------------------------------------------------------------------------- /Examples/vanilla_007.json: -------------------------------------------------------------------------------- 1 | { 2 | "canvas": [ 3 | 0, 4 | 0, 5 | 1500, 6 | 600 7 | ], 8 | "colors": [ 9 | "#000000", 10 | "#FFFFFF" 11 | ], 12 | "footer_buffer": 0.0, 13 | "shapes": [ 14 | { 15 | "clockwise": true, 16 | "depth": 50, 17 | "disabled": false, 18 | "inc": 0.0042, 19 | "points": [ 20 | [ 21 | 0, 22 | 0 23 | ], 24 | [ 25 | 683.84279476, 26 | 0.0 27 | ], 28 | [ 29 | 0.0, 30 | 600.0 31 | ] 32 | ], 33 | "reverse_colors": true, 34 | "step": 0.09 35 | }, 36 | { 37 | "clockwise": true, 38 | "depth": 50, 39 | "disabled": false, 40 | "inc": 0.0032, 41 | "points": [ 42 | [ 43 | 322.27031858, 44 | 317.24175113 45 | ], 46 | [ 47 | 576.41921397, 48 | 600.0 49 | ], 50 | [ 51 | 0.0, 52 | 600.0 53 | ] 54 | ], 55 | "reverse_colors": false, 56 | "step": 0.14 57 | }, 58 | { 59 | "clockwise": false, 60 | "depth": 50, 61 | "disabled": false, 62 | "inc": 0.0, 63 | "points": [ 64 | [ 65 | 322.27031858, 66 | 317.24175113 67 | ], 68 | [ 69 | 499.7000764, 70 | 161.56583335 71 | ], 72 | [ 73 | 475.96545457, 74 | 488.23823508 75 | ] 76 | ], 77 | "reverse_colors": true, 78 | "step": 0.206 79 | }, 80 | { 81 | "clockwise": true, 82 | "depth": 50, 83 | "disabled": false, 84 | "inc": 0.0044, 85 | "points": [ 86 | [ 87 | 499.7000764, 88 | 161.56583335 89 | ], 90 | [ 91 | 683.84279476, 92 | 0.0 93 | ], 94 | [ 95 | 890.82969432, 96 | 0.0 97 | ], 98 | [ 99 | 852.01370965, 100 | 320.37319165 101 | ], 102 | [ 103 | 488.93238772, 104 | 309.76734034 105 | ] 106 | ], 107 | "reverse_colors": false, 108 | "step": 0.226 109 | }, 110 | { 111 | "clockwise": false, 112 | "depth": 50, 113 | "disabled": false, 114 | "inc": 0.0033, 115 | "points": [ 116 | [ 117 | 488.93238772, 118 | 309.76734034 119 | ], 120 | [ 121 | 852.01370965, 122 | 320.37319165 123 | ], 124 | [ 125 | 818.77729258, 126 | 600.0 127 | ], 128 | [ 129 | 576.41921397, 130 | 600.0 131 | ], 132 | [ 133 | 475.96545457, 134 | 488.23823508 135 | ] 136 | ], 137 | "reverse_colors": true, 138 | "step": 0.214 139 | }, 140 | { 141 | "clockwise": true, 142 | "depth": 50, 143 | "disabled": false, 144 | "inc": 0.0036, 145 | "points": [ 146 | [ 147 | 852.01370965, 148 | 320.37319165 149 | ], 150 | [ 151 | 1087.8409939, 152 | 327.26186634 153 | ], 154 | [ 155 | 1100.43668122, 156 | 600.0 157 | ], 158 | [ 159 | 818.77729258, 160 | 600.0 161 | ] 162 | ], 163 | "reverse_colors": false, 164 | "step": 0.168 165 | }, 166 | { 167 | "clockwise": false, 168 | "depth": 50, 169 | "disabled": false, 170 | "inc": 0.002, 171 | "points": [ 172 | [ 173 | 1087.8409939, 174 | 327.26186634 175 | ], 176 | [ 177 | 1500.0, 178 | 339.30131004 179 | ], 180 | [ 181 | 1500, 182 | 600 183 | ], 184 | [ 185 | 1100.43668122, 186 | 600.0 187 | ] 188 | ], 189 | "reverse_colors": true, 190 | "step": 0.156 191 | }, 192 | { 193 | "clockwise": false, 194 | "depth": 50, 195 | "disabled": false, 196 | "inc": 0.0028, 197 | "points": [ 198 | [ 199 | 890.82969432, 200 | 0.0 201 | ], 202 | [ 203 | 1156.76855895, 204 | 0.0 205 | ], 206 | [ 207 | 1260.05476213, 208 | 332.29234714 209 | ], 210 | [ 211 | 852.01370965, 212 | 320.37319165 213 | ] 214 | ], 215 | "reverse_colors": true, 216 | "step": 0.171 217 | }, 218 | { 219 | "clockwise": true, 220 | "depth": 50, 221 | "disabled": false, 222 | "inc": 0.0031, 223 | "points": [ 224 | [ 225 | 1156.76855895, 226 | 0.0 227 | ], 228 | [ 229 | 1500, 230 | 0 231 | ], 232 | [ 233 | 1500.0, 234 | 339.30131004 235 | ], 236 | [ 237 | 1260.05476213, 238 | 332.29234714 239 | ] 240 | ], 241 | "reverse_colors": false, 242 | "step": 0.159 243 | } 244 | ] 245 | } -------------------------------------------------------------------------------- /Examples/vanilla_007_cutout.json: -------------------------------------------------------------------------------- 1 | { 2 | "canvas": [ 3 | 0, 4 | 0, 5 | 1500, 6 | 600 7 | ], 8 | "colors": [ 9 | "#000000", 10 | "#FFFFFF" 11 | ], 12 | "shapes": [ 13 | { 14 | "clockwise": true, 15 | "depth": 26, 16 | "disabled": false, 17 | "footer": 0.109, 18 | "footer_inc": 0.027, 19 | "footer_offset": 15, 20 | "inc": 0.0042, 21 | "points": [ 22 | [ 23 | 0.0, 24 | 0.0 25 | ], 26 | [ 27 | 683.84279476, 28 | 0.0 29 | ], 30 | [ 31 | 0.0, 32 | 600.0 33 | ] 34 | ], 35 | "reverse_colors": true, 36 | "step": 0.09 37 | }, 38 | { 39 | "clockwise": true, 40 | "depth": 18, 41 | "disabled": false, 42 | "footer": 0.112, 43 | "footer_inc": 0.035, 44 | "footer_offset": 0.0, 45 | "inc": 0.0032, 46 | "points": [ 47 | [ 48 | 322.27031858, 49 | 317.24175113 50 | ], 51 | [ 52 | 576.41921397, 53 | 600.0 54 | ], 55 | [ 56 | 0.0, 57 | 600.0 58 | ] 59 | ], 60 | "reverse_colors": false, 61 | "step": 0.14 62 | }, 63 | { 64 | "clockwise": false, 65 | "depth": 13, 66 | "disabled": false, 67 | "footer": 0.149, 68 | "footer_inc": 0.038, 69 | "footer_offset": 0.0, 70 | "inc": 0.0, 71 | "points": [ 72 | [ 73 | 322.27031858, 74 | 317.24175113 75 | ], 76 | [ 77 | 499.7000764, 78 | 161.56583335 79 | ], 80 | [ 81 | 475.96545457, 82 | 488.23823508 83 | ] 84 | ], 85 | "reverse_colors": true, 86 | "step": 0.206 87 | }, 88 | { 89 | "clockwise": true, 90 | "depth": 25, 91 | "disabled": false, 92 | "footer": 0.157, 93 | "footer_inc": 0.031, 94 | "footer_offset": 6, 95 | "inc": 0.0044, 96 | "points": [ 97 | [ 98 | 499.7000764, 99 | 161.56583335 100 | ], 101 | [ 102 | 683.84279476, 103 | 0.0 104 | ], 105 | [ 106 | 890.82969432, 107 | 0.0 108 | ], 109 | [ 110 | 852.01370965, 111 | 320.37319165 112 | ], 113 | [ 114 | 488.93238772, 115 | 309.76734034 116 | ] 117 | ], 118 | "reverse_colors": false, 119 | "step": 0.226 120 | }, 121 | { 122 | "clockwise": false, 123 | "depth": 27, 124 | "disabled": false, 125 | "footer": 0.156, 126 | "footer_inc": 0.027, 127 | "footer_offset": 8, 128 | "inc": 0.0033, 129 | "points": [ 130 | [ 131 | 488.93238772, 132 | 309.76734034 133 | ], 134 | [ 135 | 852.01370965, 136 | 320.37319165 137 | ], 138 | [ 139 | 818.77729258, 140 | 600.0 141 | ], 142 | [ 143 | 576.41921397, 144 | 600.0 145 | ], 146 | [ 147 | 475.96545457, 148 | 488.23823508 149 | ] 150 | ], 151 | "reverse_colors": true, 152 | "step": 0.214 153 | }, 154 | { 155 | "clockwise": true, 156 | "depth": 22, 157 | "disabled": false, 158 | "footer": 0.118, 159 | "footer_inc": 0.038, 160 | "footer_offset": 7, 161 | "inc": 0.0036, 162 | "points": [ 163 | [ 164 | 852.01370965, 165 | 320.37319165 166 | ], 167 | [ 168 | 1087.8409939, 169 | 327.26186634 170 | ], 171 | [ 172 | 1100.43668122, 173 | 600.0 174 | ], 175 | [ 176 | 818.77729258, 177 | 600.0 178 | ] 179 | ], 180 | "reverse_colors": false, 181 | "step": 0.168 182 | }, 183 | { 184 | "clockwise": false, 185 | "depth": 28, 186 | "disabled": false, 187 | "footer": 0.13, 188 | "footer_inc": 0.033, 189 | "footer_offset": 12, 190 | "inc": 0.002, 191 | "points": [ 192 | [ 193 | 1087.8409939, 194 | 327.26186634 195 | ], 196 | [ 197 | 1500.0, 198 | 339.30131004 199 | ], 200 | [ 201 | 1500.0, 202 | 600.0 203 | ], 204 | [ 205 | 1100.43668122, 206 | 600.0 207 | ] 208 | ], 209 | "reverse_colors": true, 210 | "step": 0.156 211 | }, 212 | { 213 | "clockwise": false, 214 | "depth": 26, 215 | "disabled": false, 216 | "footer": 0.116, 217 | "footer_inc": 0.029, 218 | "footer_offset": 8, 219 | "inc": 0.0028, 220 | "points": [ 221 | [ 222 | 890.82969432, 223 | 0.0 224 | ], 225 | [ 226 | 1156.76855895, 227 | 0.0 228 | ], 229 | [ 230 | 1260.05476213, 231 | 332.29234714 232 | ], 233 | [ 234 | 852.01370965, 235 | 320.37319165 236 | ] 237 | ], 238 | "reverse_colors": true, 239 | "step": 0.171 240 | }, 241 | { 242 | "clockwise": true, 243 | "depth": 25, 244 | "disabled": false, 245 | "footer": 0.111, 246 | "footer_inc": 0.029, 247 | "footer_offset": 6, 248 | "inc": 0.0031, 249 | "points": [ 250 | [ 251 | 1156.76855895, 252 | 0.0 253 | ], 254 | [ 255 | 1500.0, 256 | 0.0 257 | ], 258 | [ 259 | 1500.0, 260 | 339.30131004 261 | ], 262 | [ 263 | 1260.05476213, 264 | 332.29234714 265 | ] 266 | ], 267 | "reverse_colors": false, 268 | "step": 0.159 269 | } 270 | ] 271 | } -------------------------------------------------------------------------------- /Examples/vanilla_007_cutout_rasterized.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuclearsugar/VectorRecursionWorkbench/3881605d9c6bd4e64d4252f3ee6cb7c1a9ea64ed/Examples/vanilla_007_cutout_rasterized.jpg -------------------------------------------------------------------------------- /Examples/vanilla_007_rasterized.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nuclearsugar/VectorRecursionWorkbench/3881605d9c6bd4e64d4252f3ee6cb7c1a9ea64ed/Examples/vanilla_007_rasterized.jpg -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2014-2016 Nathan Williams, Jason Fletcher 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Vector Recursion Workbench 2 | This is a tool for laying out recursively nested polygons that can be exported as an SVG. 3 | *Designed with laser cutting in mind.* 4 |
5 | 6 | ![History3](Examples/handcut_mimic_001d_rasterized.jpg) 7 |

8 | 9 | ## App Screenshots 10 | ![Screenshot1](Archive/Vector-Recursion-Workbench_screenshot1.JPG) 11 | *Screenshot: previewing the guide lines* 12 | 13 | ![Screenshot2](Archive/Vector-Recursion-Workbench_screenshot2.JPG) 14 | *Screenshot: previewing the guide lines and recursion concurrently* 15 |

16 | 17 | ### Standalone App 18 | To play with this software without any fuss, check out the [standalone app](https://github.com/nuclearsugar/VectorRecursionWorkbench/releases) available for Mac & Windows. 19 | 20 | ### Development Frozen 21 | This software is no longer being maintained and issues will not be fixed. But you're welcome to fork this project. 22 | 23 | ### Dependencies 24 | Python 2.7.9 25 | wxPython 3.0.1.1 26 | PyOpenGL 3.1.0 27 | 28 | ### Usage 29 | Run this script in a CMD shell to initiate the GUI: 30 | ```python VRW-gui.py``` 31 |

32 | 33 | ## Documentation 34 | ### Preview Window 35 | - **Draw Guide Line**: Allows you to draw a guide line onto the canvas. (hotkey is ‘d’.) To cancel drawing a guide line hit ‘ESC’. If you need to slice a specific shape, then first click to select that shape and then draw the guide line within it. 36 | - **Delete Guide Lines**: Allows you to delete a specific guide line by clicking on it. (hotkey is ‘x’.) Useful mainly for creating shapes such as a pentagon. *Beware: deleting a line is risky and may break your layout, so be sure to save prior.* 37 | - Undo (cmd-z) and Redo (cmd-shft-z) are functional for guide lines. *Beware: But if you try to undo the change of a shape attribute, then all of the attributes will revert to their original state (known annoying bug). Also undo-ing a guide line is risky and may break your layout, so be sure to save often.* 38 | - **Snapping**: When drawing a guide line, the cursor will snap to the nearest corner when within a certain proximity. 39 | - **Hide Guide Lines**: Makes the guide lines invisible within the preview area so that you can see the recursion as it will be exported. 40 | - **Hide Shape #’s**: Makes the shape #’s invisible within the preview area. But you can still select a shape. 41 | - **Preview**: Allows you to preview just the guide lines, or preview the guide lines and recursion concurrently. 42 | - **Aspect Ratio**: Allows you to fit the recursion to the canvas, or stretch the recursion to the canvas. When exporting, fit will always be used. But stretch is useful if you’re doing projection mapping and want to layout in context. 43 | 44 | ### Shape Attributes 45 | - Select a shape by click on the # within the preview window. 46 | - **Direction**: Decide whether the recursion iterates clockwise or counter-clockwise. 47 | - **Depth**: Limits the amount of iterations. 48 | - **Step**: Increases or decreases the spacing of the shape recursion. 49 | - **Inner**: Increases or decreases the spacing of the shape recursion, but affecting the inner iterations more heavily. This allows you to decide on the complexity of the inner iterations without affecting the outer iterations. 50 | - **Reverse Colors**: Swap the starting color. This is important for maintaining a cohesive pattern when laying out a piece. 51 | - **Disable**: This will turn off recursions for the currently selected shape and it will not render when exported. This is useful for creating unique canvas shapes, such as a hexagon. It’s also useful for creating empty spaces within your layout. Or approaching it creatively to create a silhouette within your layout. 52 | - **Footer**: Adds extra spacing around each triangle. Affects the overall recursion evenly. 53 | - **Buffer**: Adds extra spacing around each triangle. Affects the inner iterations more heavily. 54 | - **Offset**: Adjusts the starting point of which the Buffer begins within the outer iterations. 55 | 56 | ### Global Attributes 57 | - **Step**: Increases or decreases the spacing of the shape recursion for the whole layout. Every shape is affected equally, without resetting the individual Shape Step setting. 58 | - **Colors**: Determine what two colors are used to alternate within the recursion. 59 | - **Canvas Width/Height**: Set in pixels of your monitor. Just a way to determine the aspect ratio since the SVG exports are vector in nature. 60 | - **Load Background Image**: Allows you to load a background image within the preview window. This background image does not affect the recursion or export, it can only be used as a helper when laying out guide lines. It can be useful for tracing complex patterns you want to draw. To see an example, check of the ‘FaceSilhouette_001’ or ‘Hands_001’ within the Examples folder. 61 | 62 | ### Saving & Exporting 63 | - **File > Save as**: Writes an JSON file which can be opened later and edited. 64 | - **File > Export**: Writes an SVG of the whole canvas. This is the easiest approach for when you’re doing a single laser cut piece. 65 | - **File > Export Shapes**: Exports in a modular fashion by writing multiple SVG’s. One SVG is exported for each shape # on the canvas. This option is useful if you want to cut out each shape # individually and then physically assemble them all together after completed. So long as you plan with the max dimensions of your work bed in mind, then you can fill a wall of unlimited size. 66 | 67 | ### Post-Production 68 | - If you need to alter the exported SVG or combine multiple SVG’s, [Inkscape](https://inkscape.org/) is free and highly recommended. 69 |

70 | 71 | ## History 72 | This software was programmed by [Nathan Williams](https://github.com/nathanlws) and designed by [Jason Fletcher](http://www.jasonfletcher.info/). 73 | 74 | I was first introduced to this technique through drawing by hand. Over the years I experimented with different approaches and started using an exacto blade to cutout the patterns into paper. I loved the resulting artworks but the effort required was enormous and difficult on my hands. So for many years I dreamed of creating a software which would automate the process and make laser cutting possible. While studying in college, Alex Horn helped me to create an early version of the idea first in Pure Data and then Adobe Flash. Then many years later I met Nathan and randomly shared my idea over a beer and a collaboration bloomed. This software is the result. Check out the Archive folder to see some early hand drawings of this software and its evolution. 75 | 76 | I've long wanted to laser cut these patterns into wood and make giant latticed windows or pieces which precisely fill up an entire wall. Due to available free time, workspace constraints, and spare money, I haven't yet explored this dream. Someday I will but in the meantime why not open-source it? I would love to see your creations, please share photos with me. Cheers! 77 | 78 | ![History1](Examples/handcut_photo_original.jpg) 79 | *Red paper which has been hand drawn and then hand cut - (9 x 2 feet / 2.74 x .60 meters)* 80 | 81 | ![History2](Examples/handcut_mimic_001_rasterized.jpg) 82 | *A similar recursion pattern can been mimicked using this software* 83 | 84 | ![History3](Examples/handcut_mimic_001d_rasterized.jpg) 85 | *Then by tweaking the shape Footer, Buffer, and Offset attributes, the piece can be optimized for laser cutting* 86 |

87 | 88 | ## License 89 | The MIT License (MIT) 90 | Copyright (c) 2014-2016 Nathan Williams, Jason Fletcher 91 | It is free software and may be redistributed under the terms specified in the LICENSE file. 92 |

93 | 94 | ## Example Renders (rasterized) 95 | *SVG versions of these renders are available within the Examples folder.* 96 | 97 | ![Gallery1](Examples/GoldenRatio_001_rasterized.jpg) 98 | 99 | ![Gallery2](Examples/GoldenRatio_002_rasterized.jpg) 100 | 101 | ![Gallery3](Examples/hexagon_001_rasterized.jpg) 102 | 103 | ![Gallery4](Examples/hexagon_001_cutout_rasterized.jpg) 104 | 105 | ![Gallery5](Examples/vanilla_007_rasterized.jpg) 106 | 107 | ![Gallery6](Examples/vanilla_007_cutout_rasterized.jpg) 108 | 109 | ![Gallery7](Examples/hexagon_003b_rasterized.jpg) 110 | -------------------------------------------------------------------------------- /geometry.py: -------------------------------------------------------------------------------- 1 | # 2 | # Vector Recursion Workbench 3 | # Copyright (c) 2014-2016 Nathan Williams, Jason Fletcher 4 | # 5 | # Permission is hereby granted, free of charge, to any person obtaining a copy 6 | # of this software and associated documentation files (the "Software"), to deal 7 | # in the Software without restriction, including without limitation the rights 8 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | # copies of the Software, and to permit persons to whom the Software is 10 | # furnished to do so, subject to the following conditions: 11 | # 12 | # The above copyright notice and this permission notice shall be included in 13 | # all copies or substantial portions of the Software. 14 | # 15 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | # SOFTWARE. 22 | # 23 | 24 | import math 25 | 26 | 27 | class vec2(object): 28 | def __init__(self, x, y): 29 | self.x = x 30 | self.y = y 31 | 32 | def __repr__(self): 33 | return "(%g,%g)" % (self.x, self.y) 34 | 35 | def __eq__(self, rhs): 36 | return (self.x == rhs.x) and (self.y == rhs.y) 37 | 38 | def __sub__(self, rhs): 39 | return vec2(self.x - rhs.x, self.y - rhs.y) 40 | 41 | def __add__(self, rhs): 42 | return vec2(self.x + rhs.x, self.y + rhs.y) 43 | 44 | def __mul__(self, s): 45 | return vec2(self.x * s, self.y * s) 46 | 47 | def __div__(self, s): 48 | return vec2(self.x / s, self.y / s) 49 | 50 | def dot(self, rhs): 51 | return (self.x * rhs.x) + (self.y * rhs.y) 52 | 53 | def cross(self, rhs): 54 | # u x v = ( u.y * v.z - u.z * v.y, 55 | # u.z * v.x - u.x * v.z, 56 | # u.x * v.y - u.y * v.x) 57 | # Treat this vec2 as vec3 with 0 for z components 58 | return (self.x * rhs.y) - (self.y * rhs.x) 59 | 60 | def dist_sq(self, rhs): 61 | a = (rhs.x - self.x) ** 2 62 | b = (rhs.y - self.y) ** 2 63 | return a + b 64 | 65 | def dist(self, rhs): 66 | return math.sqrt(self.dist_sq(rhs)) 67 | 68 | def rot(self, deg): 69 | rad = math.radians(deg) 70 | c = math.cos(rad) 71 | s = math.sin(rad) 72 | return vec2(self.x * c - self.y * s, self.x * s + self.y * c) 73 | 74 | def project_onto_line(self, a, b): 75 | """ Project this vec2 on the line segment defined by a and b """ 76 | ab = b - a 77 | ab_dist_sq = ab.dot(ab) 78 | if ab_dist_sq == 0: 79 | # a and b are equal 80 | return a 81 | else: 82 | # Line parameterized as a + t(b - a) 83 | ap = self - a 84 | t = ap.dot(ab) / ab_dist_sq 85 | if t < 0.0: 86 | # before a 87 | return a 88 | elif t > 1: 89 | # before b 90 | return b 91 | else: 92 | # between 93 | return a + (ab * t) 94 | 95 | 96 | class polygon(object): 97 | def __init__(self, points, make_clockwise=True): 98 | self.points = [] 99 | self.points.extend(points) 100 | if make_clockwise: 101 | self.make_clockwise() 102 | 103 | def __repr__(self): 104 | return str(self.points) 105 | 106 | @classmethod 107 | def aabb(cls, x, y, w, h): 108 | return polygon([ 109 | vec2(x, y), 110 | vec2(x, y+h), 111 | vec2(x+w, y+h), 112 | vec2(x+w, y) 113 | ]) 114 | 115 | def make_clockwise(self): 116 | # Get into clockwise order 117 | c = self.center() 118 | if c is None: 119 | return None 120 | a = {} 121 | for p in self.points: 122 | # Angle between vertex and center 123 | a[p] = math.atan2(p.y - c.y, p.x - c.x) 124 | self.points.sort(key=lambda p: a[p]) 125 | return self 126 | 127 | def is_concave(self): 128 | # All consecutive line segments must have cross products of same sign 129 | n = len(self.points) 130 | prev_sign = None 131 | for i,a in enumerate(self.points): 132 | b = self.points[(i+1) % n] 133 | c = self.points[(i+2) % n] 134 | ab = b - a 135 | bc = c - b 136 | sign = ab.cross(bc) >= 0.0 137 | if prev_sign is None: 138 | prev_sign = sign 139 | elif prev_sign != sign: 140 | return False 141 | return True 142 | 143 | def center(self): 144 | a = 0.0 145 | cx = 0.0 146 | cy = 0.0 147 | p = self.points + [ self.points[0] ] 148 | for i in range(0, len(p)-1): 149 | tmp = p[i].x * p[i+1].y - p[i+1].x * p[i].y 150 | a += tmp 151 | cx += ( (p[i].x + p[i+1].x) * tmp) 152 | cy += ( (p[i].y + p[i+1].y) * tmp) 153 | a = 0.5 * a 154 | if a == 0.0: 155 | return None 156 | tmp = (1.0 / (6.0 * a)) 157 | return vec2( tmp * cx, tmp * cy ) 158 | 159 | def contains(self, p): 160 | # self.points sorted clockwise so pointer must 161 | # be on right (inner) side of all segments 162 | for i,a in enumerate(self.points): 163 | b = self.points[(i+1)%len(self.points)] 164 | ab = b - a 165 | ap = p - a 166 | if ab.cross(ap) < 0: 167 | return False 168 | return True 169 | 170 | def rotate(self, deg): 171 | c = self.center() 172 | if c is None: 173 | return None 174 | out = [] 175 | for p in self.points: 176 | x = p - c 177 | x = x.rot(deg) 178 | x = x + c 179 | out.append(x) 180 | return polygon(out) 181 | 182 | def scale(self, s): 183 | c = self.center() 184 | if c is None: 185 | return None 186 | out = [] 187 | for p in self.points: 188 | x = (p.x - c.x) * s + c.x 189 | y = (p.y - c.y) * s + c.y 190 | out.append(vec2(x, y)) 191 | p = polygon(out, make_clockwise=False) 192 | return p.make_clockwise() 193 | 194 | def recurse(self, s): 195 | p = [] 196 | l = len(self.points) 197 | for i in range(0, l): 198 | p.append(self.points[i] + (self.points[(i+1)%l] - self.points[i]) * s) 199 | # Input polygon already clockwise => recurse is clockwise 200 | return polygon(p, make_clockwise=False) 201 | 202 | -------------------------------------------------------------------------------- /project.py: -------------------------------------------------------------------------------- 1 | # 2 | # Vector Recursion Workbench 3 | # Copyright (c) 2014-2016 Nathan Williams, Jason Fletcher 4 | # 5 | # Permission is hereby granted, free of charge, to any person obtaining a copy 6 | # of this software and associated documentation files (the "Software"), to deal 7 | # in the Software without restriction, including without limitation the rights 8 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | # copies of the Software, and to permit persons to whom the Software is 10 | # furnished to do so, subject to the following conditions: 11 | # 12 | # The above copyright notice and this permission notice shall be included in 13 | # all copies or substantial portions of the Software. 14 | # 15 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | # SOFTWARE. 22 | # 23 | 24 | import json 25 | 26 | from geometry import vec2, polygon 27 | 28 | 29 | class shape(object): 30 | def __init__(self, poly, depth, step, inc, clockwise, reverse_colors, disabled, footer, footer_inc, footer_offset): 31 | # Polygon. 32 | assert type(poly) == polygon 33 | self.poly = poly 34 | # Int >= 1. Max recursion count. 35 | assert depth >= 1 36 | self.depth = depth 37 | # Float (0.0, 1.0). How far to step along the (half) line. 38 | assert (step > 0.0) and (step < 1.0) 39 | self.step = step 40 | # Float [0.0, 1.0). How much to add to step each iteration. 41 | assert (inc >= 0.0) and (inc < 1.0) 42 | self.inc = inc 43 | # Bool. Whether or not recursion appears clockwise. 44 | assert clockwise in (True, False) 45 | self.clockwise = clockwise 46 | # Bool. Whether or not to reverse color sequence. 47 | assert reverse_colors in (True, False) 48 | self.reverse_colors = reverse_colors 49 | # Bool. Whether or not to disable shape. 50 | assert disabled in (True, False) 51 | self.disabled = disabled 52 | # Float [0.0, 1.0). How much to footer to apply each iteration. 53 | assert (footer >= 0.0) and (footer < 1.0) 54 | self.footer = footer 55 | # Float [0.0, 1.0). How much to add each iteration after footer_offset. 56 | assert (footer_inc >= 0.0) and (footer_inc < 1.0) 57 | self.footer_inc = footer_inc 58 | # Int >= 0. What iteration to start applying footer_inc. 59 | assert footer_offset >= 0 60 | self.footer_offset = footer_offset 61 | 62 | 63 | COLOR_NAME_TO_HTML = { 64 | 'black' : "#000000", 65 | 'red' : "#FF0000", 66 | 'green' : "#00FF00", 67 | 'blue' : "#0000FF", 68 | 'gray' : "#7F7F7F", 69 | 'white' : "#FFFFFF", 70 | } 71 | 72 | def convert_color_names(colors): 73 | out = [] 74 | for c in colors: 75 | out.append(COLOR_NAME_TO_HTML.get(c, c)) 76 | return out 77 | 78 | class project(object): 79 | def __init__(self, canvas, colors, shapes): 80 | # List. [start_x, start_y, end_x, end_y] 81 | assert (type(canvas) == list) and (len(canvas) == 4) 82 | self.canvas = canvas 83 | # List. HTML color strings 84 | assert (type(colors) == list) 85 | self.colors = colors 86 | self.shapes = shapes 87 | 88 | def to_json(self, filename=None): 89 | raw_shapes = [] 90 | for s in self.shapes: 91 | points = [] 92 | for p in s.poly.points: 93 | points.append((p.x, p.y)) 94 | raw_shapes.append({ 95 | 'points': points, 96 | 'depth': s.depth, 97 | 'step': s.step, 98 | 'inc': s.inc, 99 | 'clockwise': s.clockwise, 100 | 'reverse_colors': s.reverse_colors, 101 | 'disabled': s.disabled, 102 | 'footer': s.footer, 103 | 'footer_inc': s.footer_inc, 104 | 'footer_offset': s.footer_offset, 105 | }) 106 | obj = { 107 | 'canvas': self.canvas, 108 | 'colors': self.colors, 109 | 'shapes': raw_shapes, 110 | } 111 | args = { 'sort_keys': True, 'indent': 4, 'separators': (',', ': ') } 112 | if filename: 113 | with open(filename, 'w') as f: 114 | json.dump(obj, f, **args) 115 | return None 116 | else: 117 | return json.dumps(obj, **args) 118 | 119 | def save_file(self, filename): 120 | self.to_json(filename) 121 | 122 | @classmethod 123 | def load_file(cls, filename): 124 | with open(filename, 'r') as f: 125 | data = json.load(f) 126 | return cls.load_dict(data) 127 | 128 | @classmethod 129 | def load_json(cls, json_str): 130 | data = json.loads(json_str) 131 | return cls.load_dict(data) 132 | 133 | @classmethod 134 | def load_dict(cls, data): 135 | canvas = data['canvas'] 136 | colors = convert_color_names(data['colors']) 137 | footer_buffer = float(data.get('footer_buffer', 0.0)) 138 | raw_shapes = data.get('shapes', []) 139 | shapes = [] 140 | for s in raw_shapes: 141 | points = [] 142 | for p in s['points']: 143 | points.append(vec2(float(p[0]), float(p[1]))) 144 | shapes.append( 145 | shape( 146 | poly=polygon(points), 147 | depth=int(s['depth']), 148 | step=float(s['step']), 149 | inc=float(s['inc']), 150 | clockwise=bool(s['clockwise']), 151 | reverse_colors=bool(s.get('reverse_colors', False)), 152 | disabled=bool(s.get('disabled', False)), 153 | footer=float(s.get('footer', footer_buffer)), 154 | footer_inc=float(s.get('footer_inc', 0.0)), 155 | footer_offset=float(s.get('footer_offset', 0)), 156 | ) 157 | ) 158 | return project(canvas, colors, shapes) 159 | 160 | -------------------------------------------------------------------------------- /recursion_excursion.py: -------------------------------------------------------------------------------- 1 | # 2 | # Vector Recursion Workbench 3 | # Copyright (c) 2014-2016 Nathan Williams, Jason Fletcher 4 | # 5 | # Permission is hereby granted, free of charge, to any person obtaining a copy 6 | # of this software and associated documentation files (the "Software"), to deal 7 | # in the Software without restriction, including without limitation the rights 8 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | # copies of the Software, and to permit persons to whom the Software is 10 | # furnished to do so, subject to the following conditions: 11 | # 12 | # The above copyright notice and this permission notice shall be included in 13 | # all copies or substantial portions of the Software. 14 | # 15 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | # SOFTWARE. 22 | # 23 | 24 | from project import project 25 | from geometry import polygon 26 | 27 | def svg_vec2_str(vec2): 28 | return "%g,%g" % (vec2.x, vec2.y) 29 | 30 | def generate_svg(canvas, recursion_list, output): 31 | output.write('\n') 32 | output.write('\n') 33 | output.write('\n' % str(canvas)[1:-1]) 34 | for n,poly_list in enumerate(recursion_list): 35 | output.write(' \n' % (n + 1)) 36 | for c,poly in poly_list: 37 | output.write(' \n' % (c, ", ".join(map(svg_vec2_str, poly.points)))) 38 | output.write('\n') 39 | 40 | 41 | def generate_recursion(proj): 42 | """ 43 | Returns list of list of color,polygon tuples: 44 | [ 45 | [ ('color', poly0_recursion0), ('color', poly1_recursion1), ...], 46 | [ ('color', poly1_recursion0), ... ] 47 | ] 48 | """ 49 | all_output = [] 50 | for n,shape in enumerate(proj.shapes): 51 | if shape.disabled: 52 | all_output.append([]) 53 | continue 54 | if shape.reverse_colors: 55 | colors = list(proj.colors) 56 | colors.reverse() 57 | else: 58 | colors = proj.colors 59 | step = shape.step 60 | inc = shape.inc 61 | footer_scale = 1.0 - shape.footer 62 | footer_inc = shape.footer_inc 63 | footer_offset = shape.footer_offset 64 | poly = shape.poly 65 | # real step (0.0,0.5) appears clockwise and (0.5, 1.0) counter-clockwise 66 | step /= 2.0 67 | inc /= 2.0 68 | if not shape.clockwise: 69 | step = 1.0 - step 70 | inc = 0.0 - inc 71 | poly_output = [] 72 | for d in range(shape.depth): 73 | c = colors[d % len(colors)] 74 | new_poly = poly.recurse(step) 75 | if new_poly is None: 76 | break 77 | if d >= footer_offset: 78 | footer_scale -= footer_inc 79 | if footer_scale < 0: 80 | break 81 | # 82 | # 0 is poly[0], 0` is new_poly[0], etc: 83 | # 84 | # 0...0`....1 85 | # . . 86 | # . . 87 | # . . 88 | # . 1` 89 | # 3` . 90 | # . . 91 | # . . 92 | # . . 93 | # 3....2`...2 94 | # 95 | # Would triangulate as: 96 | # [0, 0`, 3`], 97 | # [1, 1`, 0`], 98 | # [2, 2`, 1`], 99 | # [3, 3`, 2`] 100 | # 101 | # That is, for i in p: 102 | # [i, i`, (i-1)`] 103 | # 104 | assert len(poly.points) == len(new_poly.points) 105 | l = len(poly.points) 106 | for i in range(l): 107 | tri = [ 108 | poly.points[i], 109 | new_poly.points[i], 110 | new_poly.points[(i-1)%l] 111 | ] 112 | # Starting poly clockwise => tri already is 113 | tri_poly = polygon(tri, make_clockwise=False) 114 | # Footer shrinks tri to add a gap 115 | if footer_scale != 1.0: 116 | tri_poly = tri_poly.scale(footer_scale) 117 | poly_output.append((c, tri_poly)) 118 | poly = new_poly 119 | step += inc 120 | if (step <= 0.0) or (step >= 1.0): 121 | print 'Recursion stopped due to step size' 122 | break 123 | all_output.append(poly_output) 124 | return all_output 125 | 126 | 127 | if __name__ == "__main__": 128 | import sys 129 | if len(sys.argv) not in (2,3): 130 | sys.stderr.write('Usage: %s [output.svg]\n' % sys.argv[0]) 131 | sys.exit(1) 132 | proj = project.load_file(sys.argv[1]) 133 | rec_list = generate_recursion(proj) 134 | if len(sys.argv) == 3: 135 | output = open(sys.argv[2], 'w') 136 | else: 137 | output = sys.stdout 138 | generate_svg(proj.canvas, rec_list, output) 139 | 140 | --------------------------------------------------------------------------------