├── .gitignore ├── .gitmodules ├── GeneratedPathsDemo ├── App.config ├── GeneratePathsDemo.cs ├── GeneratedPathsDemo.csproj └── Properties │ └── AssemblyInfo.cs ├── LICENSE ├── MeshToGCodeDemo ├── App.config ├── MeshToGCodeDemo.csproj ├── Program.cs └── Properties │ └── AssemblyInfo.cs ├── README.md ├── bin ├── LICENSE.txt ├── gpx ├── gpx.exe └── readme.txt ├── dlpView ├── DLPViewCanvas.cs ├── DLPViewerMain.cs ├── Properties │ └── AssemblyInfo.cs ├── SkiaUtil.cs ├── app.config ├── dlpViewer.csproj └── packages.config ├── gsSlicer.sln ├── gsSlicerEXE ├── App.config ├── Properties │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ ├── Resources.resx │ ├── Settings.Designer.cs │ └── Settings.settings ├── SlicerMain.cs ├── gsSlicerEXE.csproj └── gsSlicerEXE.csproj.user ├── sample_files ├── 50x50x1_box.obj ├── Slim_Type1.stl ├── arrow_posx.obj ├── basic_step.obj ├── box_and_cylsheet.obj ├── box_and_opensheet.obj ├── box_infill_50.gcode ├── bunny_hollow_5cm.obj ├── bunny_open.obj ├── bunny_solid_2p5cm.obj ├── bunny_solid_5cm.obj ├── bunny_solid_5cm_min.obj ├── cotan_cylinder.obj ├── crop_bracket.obj ├── disc_0p6mm.gcode ├── disc_2mm.gcode ├── disc_single_layer.gcode ├── edge_overhang.obj ├── edge_overhang_2.obj ├── edge_overhang_support.obj ├── inverted_cone_1.obj ├── large_bunny_yup.obj ├── notch_test_1.obj ├── overhang_slab_1.obj ├── planar_clearance_test_1.obj ├── radial_fins.mix ├── radial_fins.obj ├── radial_fins_larger.obj ├── ring_2p2_makerbot.gcode ├── slab_5deg.gcode ├── slab_5deg.obj ├── sphere_angles_1cm.obj ├── square_linearfill.gcode ├── square_linearfill_2layer.gcode ├── support_mintip.obj ├── support_mintip_vtx.obj ├── support_tilted_cone.obj ├── thin_hex_test_part.gcode ├── thinwall1.obj ├── thinwall2.obj ├── tilted_thin_slab.obj ├── tiny.obj ├── tube_1.obj ├── tube_adapter.obj ├── tube_adapter_makerbot.gcode ├── tube_adapter_slice.obj ├── unsupported_slab_5deg.obj └── variable_thins.obj ├── sample_output └── gitkeepdir.txt └── sliceViewGTK ├── DebugViewCanvas.cs ├── GtkUtil.cs ├── PanZoomCanvas2D.cs ├── Properties └── AssemblyInfo.cs ├── SkiaUtil.cs ├── SliceViewCanvas.cs ├── SliceViewer.csproj ├── SliceViewerMain.cs ├── SliceViewerTests.cs ├── app.config └── packages.config /.gitignore: -------------------------------------------------------------------------------- 1 | # Compiled Object files 2 | *.slo 3 | *.lo 4 | *.o 5 | *.obj 6 | 7 | # Precompiled Headers 8 | *.gch 9 | *.pch 10 | 11 | 12 | # Fortran module files 13 | *.mod 14 | *.smod 15 | 16 | # Compiled Static libraries 17 | *.lai 18 | *.la 19 | *.a 20 | *.lib 21 | 22 | # Executables 23 | *.out 24 | *.app 25 | gsSlicer/obj/ 26 | gsSlicer/bin/ 27 | .vs/gsSlicer/v14/.suo 28 | gsSlicer/gsSlicer.csproj.user 29 | gsSlicerEXE/obj/ 30 | gsSlicerEXE/bin/ 31 | packages/ 32 | sliceViewGTK/bin/ 33 | sliceViewGTK/obj/x86/ 34 | 35 | gsSlicer/thirdparty/clipper_library/bin 36 | gsSlicer/thirdparty/clipper_library/obj 37 | *.userprefs 38 | 39 | dlpView/bin 40 | dlpView/obj 41 | 42 | !/sample_files/*.obj 43 | 44 | sample_output/* 45 | !/sample_output/gitkeepdir.txt 46 | 47 | .vs/ 48 | SLIC3R_LAST.gcode 49 | sample_files/external_gcode/ 50 | sample_files/local/ 51 | MeshToGCodeDemo/bin/ 52 | MeshToGCodeDemo/obj/ 53 | GeneratedPathsDemo/bin/ 54 | GeneratedPathsDemo/obj/ 55 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "geometry3Sharp"] 2 | path = geometry3Sharp 3 | url = https://github.com/gradientspace/geometry3Sharp 4 | [submodule "gsGCode"] 5 | path = gsGCode 6 | url = https://github.com/gradientspace/gsGCode 7 | [submodule "gsSlicer"] 8 | path = gsSlicer 9 | url = https://github.com/gradientspace/gsSlicer 10 | -------------------------------------------------------------------------------- /GeneratedPathsDemo/App.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /GeneratedPathsDemo/GeneratePathsDemo.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | using System.Collections.Generic; 4 | using g3; 5 | using gs; 6 | using gs.info; 7 | 8 | namespace GeneratedPathsDemo 9 | { 10 | class Program 11 | { 12 | static string OUT_PATH = Util.IsRunningOnMono() ? "../../../sample_output/" : "c:\\demo\\"; 13 | 14 | static void Main(string[] args) 15 | { 16 | var gcode_accumulator = new GCodeFileAccumulator(); 17 | var builder = new GCodeBuilder(gcode_accumulator); 18 | MakerbotSettings settings = new MakerbotSettings(); 19 | 20 | SingleMaterialFFFCompiler compiler = new SingleMaterialFFFCompiler( 21 | builder, settings, MakerbotAssembler.Factory); 22 | settings.ExtruderTempC = 200; 23 | 24 | compiler.Begin(); 25 | 26 | //generate_stacked_polygon(compiler, settings); 27 | //generate_stacked_wavy_circle(compiler, settings); 28 | //generate_square(compiler, settings); 29 | //generate_vertical(compiler, settings); 30 | generate_vertical_wave(compiler, settings); 31 | 32 | compiler.End(); 33 | 34 | GCodeFile gcode = gcode_accumulator.File; 35 | using (StreamWriter w = new StreamWriter(OUT_PATH+"generated.gcode")) { 36 | StandardGCodeWriter writer = new StandardGCodeWriter(); 37 | writer.WriteFile(gcode, w); 38 | } 39 | } 40 | 41 | 42 | 43 | static void generate_stacked_polygon(SingleMaterialFFFCompiler compiler, 44 | SingleMaterialFFFSettings settings) 45 | { 46 | int NLayers = 10; 47 | for (int layer_i = 0; layer_i < NLayers; ++layer_i) { 48 | 49 | // create data structures for organizing this layer 50 | ToolpathSetBuilder layer_builder = new ToolpathSetBuilder(); 51 | SequentialScheduler2d scheduler = new SequentialScheduler2d(layer_builder, settings); 52 | if (layer_i == 0) 53 | scheduler.SpeedHint = SchedulerSpeedHint.Careful; 54 | 55 | // initialize layer 56 | layer_builder.Initialize(compiler.NozzlePosition); 57 | 58 | // layer-up 59 | layer_builder.AppendZChange(settings.LayerHeightMM, settings.ZTravelSpeed); 60 | 61 | // schedule a circle 62 | FillPolygon2d circle_poly = new FillPolygon2d(Polygon2d.MakeCircle(25.0f, 64)); 63 | circle_poly.TypeFlags = FillTypeFlags.OuterPerimeter; 64 | scheduler.AppendPolygon2d(circle_poly); 65 | 66 | // pass paths to compiler 67 | compiler.AppendPaths(layer_builder.Paths, settings); 68 | } 69 | } 70 | 71 | 72 | 73 | 74 | 75 | static void generate_stacked_wavy_circle(SingleMaterialFFFCompiler compiler, 76 | SingleMaterialFFFSettings settings) 77 | { 78 | double height = 20.0; // mm 79 | int NLayers = (int)(height / settings.LayerHeightMM); // 20mm 80 | int NSteps = 128; 81 | double radius = 15.0; 82 | double frequency = 6; 83 | double scale = 5.0; 84 | 85 | for (int layer_i = 0; layer_i < NLayers; ++layer_i) { 86 | 87 | // create data structures for organizing this layer 88 | ToolpathSetBuilder layer_builder = new ToolpathSetBuilder(); 89 | SequentialScheduler2d scheduler = new SequentialScheduler2d(layer_builder, settings); 90 | if (layer_i == 0) 91 | scheduler.SpeedHint = SchedulerSpeedHint.Careful; 92 | 93 | // initialize and layer-up 94 | layer_builder.Initialize(compiler.NozzlePosition); 95 | layer_builder.AppendZChange(settings.LayerHeightMM, settings.ZTravelSpeed); 96 | 97 | // start with circle 98 | FillPolygon2d circle_poly = new FillPolygon2d(Polygon2d.MakeCircle(radius, NSteps)); 99 | 100 | // apply a wave deformation to circle, with wave height increasing with Z 101 | double layer_scale = MathUtil.Lerp(0, scale, (double)layer_i / (double)NLayers); 102 | for ( int i = 0; i < NSteps; ++i ) { 103 | Vector2d v = circle_poly[i]; 104 | double angle = Math.Atan2(v.y, v.x); 105 | double r = v.Length; 106 | r += layer_scale * Math.Sin(frequency * angle); 107 | circle_poly[i] = r * v.Normalized; 108 | } 109 | 110 | circle_poly.TypeFlags = FillTypeFlags.OuterPerimeter; 111 | scheduler.AppendPolygon2d(circle_poly); 112 | 113 | // pass paths to compiler 114 | compiler.AppendPaths(layer_builder.Paths, settings); 115 | } 116 | } 117 | 118 | 119 | 120 | 121 | static void generate_square(SingleMaterialFFFCompiler compiler, 122 | SingleMaterialFFFSettings settings) 123 | { 124 | 125 | ToolpathSetBuilder builder = new ToolpathSetBuilder(); 126 | builder.Initialize(compiler.NozzlePosition); 127 | 128 | // layer-up 129 | builder.AppendZChange(settings.LayerHeightMM, settings.ZTravelSpeed); 130 | 131 | // draw rectangle 132 | float left = 0, right = 50, bottom = -20, top = 20; 133 | builder.AppendTravel(new Vector2d(left, bottom), settings.RapidTravelSpeed); 134 | builder.AppendExtrude(new Vector2d(right, bottom), settings.CarefulExtrudeSpeed); 135 | builder.AppendExtrude(new Vector2d(right, top), settings.CarefulExtrudeSpeed); 136 | builder.AppendExtrude(new Vector2d(left, top), settings.CarefulExtrudeSpeed); 137 | builder.AppendExtrude(new Vector2d(left, bottom), settings.CarefulExtrudeSpeed); 138 | 139 | compiler.AppendPaths(builder.Paths, settings); 140 | } 141 | 142 | 143 | 144 | static void generate_vertical(SingleMaterialFFFCompiler compiler, 145 | SingleMaterialFFFSettings settings) 146 | { 147 | 148 | ToolpathSetBuilder builder = new ToolpathSetBuilder(); 149 | builder.Initialize(compiler.NozzlePosition); 150 | 151 | // layer-up 152 | builder.AppendZChange(settings.LayerHeightMM, settings.ZTravelSpeed); 153 | 154 | // draw circle 155 | int N = 32; 156 | Polygon2d circle = Polygon2d.MakeCircle(25.0f, N, -MathUtil.HalfPI); 157 | 158 | builder.AppendTravel(circle[0], settings.RapidTravelSpeed); 159 | for (int k = 1; k <= N; k++) 160 | builder.AppendExtrude(circle[k%N], settings.CarefulExtrudeSpeed); 161 | 162 | // layer-up 163 | builder.AppendZChange(settings.LayerHeightMM, settings.ZTravelSpeed); 164 | 165 | double height = 5.0f; 166 | double z_layer = builder.Position.z; 167 | double z_high = z_layer + height; 168 | for ( int k = 1; k <= N; k++ ) { 169 | Vector2d p2 = circle[k%N]; 170 | double z = (k % 2 == 1) ? z_high : z_layer; 171 | Vector3d p3 = new Vector3d(p2.x, p2.y, z); 172 | builder.AppendExtrude(p3, settings.CarefulExtrudeSpeed / 4); 173 | 174 | // dwell at tops 175 | if ( z == z_high ) { 176 | AssemblerCommandsToolpath dwell_path = new AssemblerCommandsToolpath() { 177 | AssemblerF = make_tip 178 | }; 179 | builder.AppendPath(dwell_path); 180 | } 181 | } 182 | 183 | // move up to z_high 184 | builder.AppendZChange(height, settings.ZTravelSpeed); 185 | 186 | // draw circle again 187 | builder.AppendTravel(circle[0], settings.RapidTravelSpeed); 188 | for (int k = 1; k <= N; k++) 189 | builder.AppendExtrude(circle[k % N], settings.RapidExtrudeSpeed); 190 | 191 | 192 | // draw teeth again 193 | 194 | z_layer = builder.Position.z; 195 | z_high = z_layer + height; 196 | for (int k = 1; k <= N; k++) { 197 | Vector2d p2 = circle[k % N]; 198 | double z = (k % 2 == 1) ? z_high : z_layer; 199 | Vector3d p3 = new Vector3d(p2.x, p2.y, z); 200 | builder.AppendExtrude(p3, settings.CarefulExtrudeSpeed / 4); 201 | 202 | // dwell at tops 203 | if (z == z_high) { 204 | AssemblerCommandsToolpath dwell_path = new AssemblerCommandsToolpath() { 205 | AssemblerF = make_tip 206 | }; 207 | builder.AppendPath(dwell_path); 208 | } 209 | } 210 | 211 | 212 | // move up to z_high 213 | builder.AppendZChange(height, settings.ZTravelSpeed); 214 | 215 | // draw circle again 216 | builder.AppendTravel(circle[0], settings.RapidTravelSpeed); 217 | for (int k = 1; k <= N; k++) 218 | builder.AppendExtrude(circle[k % N], settings.RapidExtrudeSpeed); 219 | 220 | 221 | compiler.AppendPaths(builder.Paths, settings); 222 | } 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | static void generate_vertical_wave(SingleMaterialFFFCompiler compiler, 233 | SingleMaterialFFFSettings settings) 234 | { 235 | 236 | ToolpathSetBuilder builder = new ToolpathSetBuilder(); 237 | builder.Initialize(compiler.NozzlePosition); 238 | 239 | // layer-up 240 | builder.AppendZChange(settings.LayerHeightMM, settings.ZTravelSpeed); 241 | 242 | int N = 24; 243 | Polygon2d circle = Polygon2d.MakeCircle(15.0f, N, -MathUtil.HalfPI); 244 | 245 | int REPEAT = 5; 246 | 247 | for (int ri = 0; ri < REPEAT; ++ri) { 248 | 249 | builder.AppendTravel(circle[0], settings.RapidTravelSpeed); 250 | for (int k = 1; k <= N; k++) 251 | builder.AppendExtrude(circle[k % N], settings.CarefulExtrudeSpeed / 4); 252 | builder.AppendZChange(settings.LayerHeightMM, settings.ZTravelSpeed); 253 | 254 | builder.AppendTravel(circle[0], settings.RapidTravelSpeed); 255 | for (int k = 1; k <= N; k++) 256 | builder.AppendExtrude(circle[k % N], settings.CarefulExtrudeSpeed / 4); 257 | builder.AppendZChange(settings.LayerHeightMM, settings.ZTravelSpeed); 258 | 259 | if (ri == REPEAT - 1) 260 | break; 261 | 262 | // make on the move up we should also move 'back' a bit, 263 | // to counteract forward pull force? 264 | 265 | double height = 1.0f; 266 | double h_fudge = 0.0f; 267 | double z_stick = -0.05f; 268 | double z_layer = builder.Position.z; 269 | double top_z = z_layer + height + h_fudge; 270 | for (int k = 0; k < N-1; k++) { 271 | Vector2d pcur = circle[k%N], pnext = circle[(k+1)%N]; 272 | Vector3d pUp = new Vector3d(pcur.x, pcur.y, top_z); 273 | builder.AppendExtrude(pUp, settings.CarefulExtrudeSpeed / 8); 274 | builder.AppendDwell(500, false); 275 | Vector3d pDown = new Vector3d(pnext.x, pnext.y, z_layer+z_stick); 276 | builder.AppendExtrude(pDown, settings.CarefulExtrudeSpeed / 8); 277 | } 278 | 279 | // move up to z_high 280 | Vector3d vpos = new Vector3d(circle[0].x, circle[0].y, z_layer+height); 281 | builder.AppendExtrude(vpos, settings.CarefulExtrudeSpeed / 8); 282 | } 283 | 284 | compiler.AppendPaths(builder.Paths, settings); 285 | } 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | static void make_tip(IGCodeAssembler iassember, ICNCCompiler icompiler) 295 | { 296 | BaseDepositionAssembler assembler = iassember as BaseDepositionAssembler; 297 | assembler.FlushQueues(); 298 | assembler.BeginRetractRelativeDist(assembler.NozzlePosition, 9999, -1.0f); 299 | assembler.AppendDwell(500); 300 | assembler.EndRetract(assembler.NozzlePosition, 9999); 301 | } 302 | 303 | 304 | 305 | } 306 | } 307 | -------------------------------------------------------------------------------- /GeneratedPathsDemo/GeneratedPathsDemo.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {4EA4D31D-287A-4F62-AFC0-C8281A88EF35} 8 | Exe 9 | GeneratedPathsDemo 10 | GeneratedPathsDemo 11 | v4.6.1 12 | 512 13 | true 14 | 15 | 16 | AnyCPU 17 | true 18 | full 19 | false 20 | bin\Debug\ 21 | DEBUG;TRACE 22 | prompt 23 | 4 24 | 25 | 26 | AnyCPU 27 | pdbonly 28 | true 29 | bin\Release\ 30 | TRACE 31 | prompt 32 | 4 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | {0c518dda-28fe-44ca-9ab0-f9773974f13a} 54 | geometry3Sharp 55 | 56 | 57 | {25de77c9-14a4-4562-9a24-0bf1e612d9a9} 58 | gsGCode 59 | 60 | 61 | {6c2e415e-37d9-4c5a-8fd5-60b0133872cf} 62 | gsSlicer 63 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /GeneratedPathsDemo/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("GeneratedPathsDemo")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("GeneratedPathsDemo")] 13 | [assembly: AssemblyCopyright("Copyright © 2018")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("4ea4d31d-287a-4f62-afc0-c8281a88ef35")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 gradientspace 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 | -------------------------------------------------------------------------------- /MeshToGCodeDemo/App.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /MeshToGCodeDemo/MeshToGCodeDemo.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {33DA100D-8DC1-4AA1-97A0-792A1AB661AC} 8 | Exe 9 | MeshToGCodeDemo 10 | MeshToGCodeDemo 11 | v4.6.1 12 | 512 13 | true 14 | 15 | 16 | AnyCPU 17 | true 18 | full 19 | false 20 | bin\Debug\ 21 | DEBUG;TRACE 22 | prompt 23 | 4 24 | 25 | 26 | AnyCPU 27 | pdbonly 28 | true 29 | bin\Release\ 30 | TRACE 31 | prompt 32 | 4 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | {0c518dda-28fe-44ca-9ab0-f9773974f13a} 54 | geometry3Sharp 55 | 56 | 57 | {25de77c9-14a4-4562-9a24-0bf1e612d9a9} 58 | gsGCode 59 | 60 | 61 | {6c2e415e-37d9-4c5a-8fd5-60b0133872cf} 62 | gsSlicer 63 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /MeshToGCodeDemo/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | using g3; 4 | using gs; 5 | using gs.info; 6 | 7 | namespace MeshToGCodeDemo 8 | { 9 | class Program 10 | { 11 | static void Main(string[] args) 12 | { 13 | CappedCylinderGenerator cylgen = new CappedCylinderGenerator() { 14 | BaseRadius = 10, TopRadius = 5, Height = 20, Slices = 32 15 | }; 16 | DMesh3 mesh = cylgen.Generate().MakeDMesh(); 17 | MeshTransforms.ConvertYUpToZUp(mesh); // g3 meshes are usually Y-up 18 | 19 | // center mesh above origin 20 | AxisAlignedBox3d bounds = mesh.CachedBounds; 21 | Vector3d baseCenterPt = bounds.Center - bounds.Extents.z*Vector3d.AxisZ; 22 | MeshTransforms.Translate(mesh, -baseCenterPt); 23 | 24 | // create print mesh set 25 | PrintMeshAssembly meshes = new PrintMeshAssembly(); 26 | meshes.AddMesh(mesh, PrintMeshOptions.Default()); 27 | 28 | // create settings 29 | //MakerbotSettings settings = new MakerbotSettings(Makerbot.Models.Replicator2); 30 | //PrintrbotSettings settings = new PrintrbotSettings(Printrbot.Models.Plus); 31 | //MonopriceSettings settings = new MonopriceSettings(Monoprice.Models.MP_Select_Mini_V2); 32 | RepRapSettings settings = new RepRapSettings(RepRap.Models.Unknown); 33 | 34 | // do slicing 35 | MeshPlanarSlicer slicer = new MeshPlanarSlicer() { 36 | LayerHeightMM = settings.LayerHeightMM }; 37 | slicer.Add(meshes); 38 | PlanarSliceStack slices = slicer.Compute(); 39 | 40 | // run print generator 41 | SingleMaterialFFFPrintGenerator printGen = 42 | new SingleMaterialFFFPrintGenerator(meshes, slices, settings); 43 | if ( printGen.Generate() ) { 44 | // export gcode 45 | GCodeFile gcode = printGen.Result; 46 | using (StreamWriter w = new StreamWriter("c:\\demo\\cone.gcode")) { 47 | StandardGCodeWriter writer = new StandardGCodeWriter(); 48 | writer.WriteFile(gcode, w); 49 | } 50 | } 51 | } 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /MeshToGCodeDemo/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("MeshToGCodeDemo")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("MeshToGCodeDemo")] 13 | [assembly: AssemblyCopyright("Copyright © 2018")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("33da100d-8dc1-4aa1-97a0-792a1ab661ac")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # gsSlicerApps 2 | 3 | command line and interactive front-ends to [gsSlicer](https://github.com/gradientspace/gsSlicer) 4 | 5 | C#, MIT License (but see note about dependencies below). Copyright 2017 ryan schmidt / gradientspace 6 | 7 | questions? get in touch on twitter: @rms80 or @gradientspace, or email rms@gradientspace.com. 8 | 9 | # Overview 10 | 11 | The intention of this project is that it will provide GUI and command-line access to gsSlicer. At present this project is mainly used for testing and debugging of gsSlicer. 12 | 13 | 14 | 15 | # sliceViewGTK 16 | 17 | 2D viewer for GCode files. Current code will also slice and toolpath a mesh file on startup. Path is currently hardcoded in **SliceViewerMain**. 18 | 19 | # dlpView 20 | 21 | basic 2D tool for slicing a mesh and generating/browsing per-layer bitmaps, suitable for DLP printing. Path is currently hardcoded in **DLPViewerMain**. 22 | 23 | 24 | 25 | # Dependencies 26 | 27 | The **sliceViewGTK** and **dlpView** code is MIT-license, but they depends on Gdk/Gtk/GtkSharp (LGPL) and the SkiaSharp wrapper (MIT) around the Skia library (BSD). 28 | -------------------------------------------------------------------------------- /bin/LICENSE.txt: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 2, June 1991 3 | 4 | Copyright (C) 1989, 1991 Free Software Foundation, Inc., 5 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 6 | Everyone is permitted to copy and distribute verbatim copies 7 | of this license document, but changing it is not allowed. 8 | 9 | Preamble 10 | 11 | The licenses for most software are designed to take away your 12 | freedom to share and change it. By contrast, the GNU General Public 13 | License is intended to guarantee your freedom to share and change free 14 | software--to make sure the software is free for all its users. This 15 | General Public License applies to most of the Free Software 16 | Foundation's software and to any other program whose authors commit to 17 | using it. (Some other Free Software Foundation software is covered by 18 | the GNU Lesser General Public License instead.) You can apply it to 19 | your programs, too. 20 | 21 | When we speak of free software, we are referring to freedom, not 22 | price. Our General Public Licenses are designed to make sure that you 23 | have the freedom to distribute copies of free software (and charge for 24 | this service if you wish), that you receive source code or can get it 25 | if you want it, that you can change the software or use pieces of it 26 | in new free programs; and that you know you can do these things. 27 | 28 | To protect your rights, we need to make restrictions that forbid 29 | anyone to deny you these rights or to ask you to surrender the rights. 30 | These restrictions translate to certain responsibilities for you if you 31 | distribute copies of the software, or if you modify it. 32 | 33 | For example, if you distribute copies of such a program, whether 34 | gratis or for a fee, you must give the recipients all the rights that 35 | you have. You must make sure that they, too, receive or can get the 36 | source code. And you must show them these terms so they know their 37 | rights. 38 | 39 | We protect your rights with two steps: (1) copyright the software, and 40 | (2) offer you this license which gives you legal permission to copy, 41 | distribute and/or modify the software. 42 | 43 | Also, for each author's protection and ours, we want to make certain 44 | that everyone understands that there is no warranty for this free 45 | software. If the software is modified by someone else and passed on, we 46 | want its recipients to know that what they have is not the original, so 47 | that any problems introduced by others will not reflect on the original 48 | authors' reputations. 49 | 50 | Finally, any free program is threatened constantly by software 51 | patents. We wish to avoid the danger that redistributors of a free 52 | program will individually obtain patent licenses, in effect making the 53 | program proprietary. To prevent this, we have made it clear that any 54 | patent must be licensed for everyone's free use or not licensed at all. 55 | 56 | The precise terms and conditions for copying, distribution and 57 | modification follow. 58 | 59 | GNU GENERAL PUBLIC LICENSE 60 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 61 | 62 | 0. This License applies to any program or other work which contains 63 | a notice placed by the copyright holder saying it may be distributed 64 | under the terms of this General Public License. The "Program", below, 65 | refers to any such program or work, and a "work based on the Program" 66 | means either the Program or any derivative work under copyright law: 67 | that is to say, a work containing the Program or a portion of it, 68 | either verbatim or with modifications and/or translated into another 69 | language. (Hereinafter, translation is included without limitation in 70 | the term "modification".) Each licensee is addressed as "you". 71 | 72 | Activities other than copying, distribution and modification are not 73 | covered by this License; they are outside its scope. The act of 74 | running the Program is not restricted, and the output from the Program 75 | is covered only if its contents constitute a work based on the 76 | Program (independent of having been made by running the Program). 77 | Whether that is true depends on what the Program does. 78 | 79 | 1. You may copy and distribute verbatim copies of the Program's 80 | source code as you receive it, in any medium, provided that you 81 | conspicuously and appropriately publish on each copy an appropriate 82 | copyright notice and disclaimer of warranty; keep intact all the 83 | notices that refer to this License and to the absence of any warranty; 84 | and give any other recipients of the Program a copy of this License 85 | along with the Program. 86 | 87 | You may charge a fee for the physical act of transferring a copy, and 88 | you may at your option offer warranty protection in exchange for a fee. 89 | 90 | 2. You may modify your copy or copies of the Program or any portion 91 | of it, thus forming a work based on the Program, and copy and 92 | distribute such modifications or work under the terms of Section 1 93 | above, provided that you also meet all of these conditions: 94 | 95 | a) You must cause the modified files to carry prominent notices 96 | stating that you changed the files and the date of any change. 97 | 98 | b) You must cause any work that you distribute or publish, that in 99 | whole or in part contains or is derived from the Program or any 100 | part thereof, to be licensed as a whole at no charge to all third 101 | parties under the terms of this License. 102 | 103 | c) If the modified program normally reads commands interactively 104 | when run, you must cause it, when started running for such 105 | interactive use in the most ordinary way, to print or display an 106 | announcement including an appropriate copyright notice and a 107 | notice that there is no warranty (or else, saying that you provide 108 | a warranty) and that users may redistribute the program under 109 | these conditions, and telling the user how to view a copy of this 110 | License. (Exception: if the Program itself is interactive but 111 | does not normally print such an announcement, your work based on 112 | the Program is not required to print an announcement.) 113 | 114 | These requirements apply to the modified work as a whole. If 115 | identifiable sections of that work are not derived from the Program, 116 | and can be reasonably considered independent and separate works in 117 | themselves, then this License, and its terms, do not apply to those 118 | sections when you distribute them as separate works. But when you 119 | distribute the same sections as part of a whole which is a work based 120 | on the Program, the distribution of the whole must be on the terms of 121 | this License, whose permissions for other licensees extend to the 122 | entire whole, and thus to each and every part regardless of who wrote it. 123 | 124 | Thus, it is not the intent of this section to claim rights or contest 125 | your rights to work written entirely by you; rather, the intent is to 126 | exercise the right to control the distribution of derivative or 127 | collective works based on the Program. 128 | 129 | In addition, mere aggregation of another work not based on the Program 130 | with the Program (or with a work based on the Program) on a volume of 131 | a storage or distribution medium does not bring the other work under 132 | the scope of this License. 133 | 134 | 3. You may copy and distribute the Program (or a work based on it, 135 | under Section 2) in object code or executable form under the terms of 136 | Sections 1 and 2 above provided that you also do one of the following: 137 | 138 | a) Accompany it with the complete corresponding machine-readable 139 | source code, which must be distributed under the terms of Sections 140 | 1 and 2 above on a medium customarily used for software interchange; or, 141 | 142 | b) Accompany it with a written offer, valid for at least three 143 | years, to give any third party, for a charge no more than your 144 | cost of physically performing source distribution, a complete 145 | machine-readable copy of the corresponding source code, to be 146 | distributed under the terms of Sections 1 and 2 above on a medium 147 | customarily used for software interchange; or, 148 | 149 | c) Accompany it with the information you received as to the offer 150 | to distribute corresponding source code. (This alternative is 151 | allowed only for noncommercial distribution and only if you 152 | received the program in object code or executable form with such 153 | an offer, in accord with Subsection b above.) 154 | 155 | The source code for a work means the preferred form of the work for 156 | making modifications to it. For an executable work, complete source 157 | code means all the source code for all modules it contains, plus any 158 | associated interface definition files, plus the scripts used to 159 | control compilation and installation of the executable. However, as a 160 | special exception, the source code distributed need not include 161 | anything that is normally distributed (in either source or binary 162 | form) with the major components (compiler, kernel, and so on) of the 163 | operating system on which the executable runs, unless that component 164 | itself accompanies the executable. 165 | 166 | If distribution of executable or object code is made by offering 167 | access to copy from a designated place, then offering equivalent 168 | access to copy the source code from the same place counts as 169 | distribution of the source code, even though third parties are not 170 | compelled to copy the source along with the object code. 171 | 172 | 4. You may not copy, modify, sublicense, or distribute the Program 173 | except as expressly provided under this License. Any attempt 174 | otherwise to copy, modify, sublicense or distribute the Program is 175 | void, and will automatically terminate your rights under this License. 176 | However, parties who have received copies, or rights, from you under 177 | this License will not have their licenses terminated so long as such 178 | parties remain in full compliance. 179 | 180 | 5. You are not required to accept this License, since you have not 181 | signed it. However, nothing else grants you permission to modify or 182 | distribute the Program or its derivative works. These actions are 183 | prohibited by law if you do not accept this License. Therefore, by 184 | modifying or distributing the Program (or any work based on the 185 | Program), you indicate your acceptance of this License to do so, and 186 | all its terms and conditions for copying, distributing or modifying 187 | the Program or works based on it. 188 | 189 | 6. Each time you redistribute the Program (or any work based on the 190 | Program), the recipient automatically receives a license from the 191 | original licensor to copy, distribute or modify the Program subject to 192 | these terms and conditions. You may not impose any further 193 | restrictions on the recipients' exercise of the rights granted herein. 194 | You are not responsible for enforcing compliance by third parties to 195 | this License. 196 | 197 | 7. If, as a consequence of a court judgment or allegation of patent 198 | infringement or for any other reason (not limited to patent issues), 199 | conditions are imposed on you (whether by court order, agreement or 200 | otherwise) that contradict the conditions of this License, they do not 201 | excuse you from the conditions of this License. If you cannot 202 | distribute so as to satisfy simultaneously your obligations under this 203 | License and any other pertinent obligations, then as a consequence you 204 | may not distribute the Program at all. For example, if a patent 205 | license would not permit royalty-free redistribution of the Program by 206 | all those who receive copies directly or indirectly through you, then 207 | the only way you could satisfy both it and this License would be to 208 | refrain entirely from distribution of the Program. 209 | 210 | If any portion of this section is held invalid or unenforceable under 211 | any particular circumstance, the balance of the section is intended to 212 | apply and the section as a whole is intended to apply in other 213 | circumstances. 214 | 215 | It is not the purpose of this section to induce you to infringe any 216 | patents or other property right claims or to contest validity of any 217 | such claims; this section has the sole purpose of protecting the 218 | integrity of the free software distribution system, which is 219 | implemented by public license practices. Many people have made 220 | generous contributions to the wide range of software distributed 221 | through that system in reliance on consistent application of that 222 | system; it is up to the author/donor to decide if he or she is willing 223 | to distribute software through any other system and a licensee cannot 224 | impose that choice. 225 | 226 | This section is intended to make thoroughly clear what is believed to 227 | be a consequence of the rest of this License. 228 | 229 | 8. If the distribution and/or use of the Program is restricted in 230 | certain countries either by patents or by copyrighted interfaces, the 231 | original copyright holder who places the Program under this License 232 | may add an explicit geographical distribution limitation excluding 233 | those countries, so that distribution is permitted only in or among 234 | countries not thus excluded. In such case, this License incorporates 235 | the limitation as if written in the body of this License. 236 | 237 | 9. The Free Software Foundation may publish revised and/or new versions 238 | of the General Public License from time to time. Such new versions will 239 | be similar in spirit to the present version, but may differ in detail to 240 | address new problems or concerns. 241 | 242 | Each version is given a distinguishing version number. If the Program 243 | specifies a version number of this License which applies to it and "any 244 | later version", you have the option of following the terms and conditions 245 | either of that version or of any later version published by the Free 246 | Software Foundation. If the Program does not specify a version number of 247 | this License, you may choose any version ever published by the Free Software 248 | Foundation. 249 | 250 | 10. If you wish to incorporate parts of the Program into other free 251 | programs whose distribution conditions are different, write to the author 252 | to ask for permission. For software which is copyrighted by the Free 253 | Software Foundation, write to the Free Software Foundation; we sometimes 254 | make exceptions for this. Our decision will be guided by the two goals 255 | of preserving the free status of all derivatives of our free software and 256 | of promoting the sharing and reuse of software generally. 257 | 258 | NO WARRANTY 259 | 260 | 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY 261 | FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN 262 | OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES 263 | PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED 264 | OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 265 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS 266 | TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE 267 | PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, 268 | REPAIR OR CORRECTION. 269 | 270 | 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 271 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR 272 | REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, 273 | INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING 274 | OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED 275 | TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY 276 | YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER 277 | PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE 278 | POSSIBILITY OF SUCH DAMAGES. 279 | 280 | END OF TERMS AND CONDITIONS 281 | 282 | How to Apply These Terms to Your New Programs 283 | 284 | If you develop a new program, and you want it to be of the greatest 285 | possible use to the public, the best way to achieve this is to make it 286 | free software which everyone can redistribute and change under these terms. 287 | 288 | To do so, attach the following notices to the program. It is safest 289 | to attach them to the start of each source file to most effectively 290 | convey the exclusion of warranty; and each file should have at least 291 | the "copyright" line and a pointer to where the full notice is found. 292 | 293 | 294 | Copyright (C) 295 | 296 | This program is free software; you can redistribute it and/or modify 297 | it under the terms of the GNU General Public License as published by 298 | the Free Software Foundation; either version 2 of the License, or 299 | (at your option) any later version. 300 | 301 | This program is distributed in the hope that it will be useful, 302 | but WITHOUT ANY WARRANTY; without even the implied warranty of 303 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 304 | GNU General Public License for more details. 305 | 306 | You should have received a copy of the GNU General Public License along 307 | with this program; if not, write to the Free Software Foundation, Inc., 308 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 309 | 310 | Also add information on how to contact you by electronic and paper mail. 311 | 312 | If the program is interactive, make it output a short notice like this 313 | when it starts in an interactive mode: 314 | 315 | Gnomovision version 69, Copyright (C) year name of author 316 | Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 317 | This is free software, and you are welcome to redistribute it 318 | under certain conditions; type `show c' for details. 319 | 320 | The hypothetical commands `show w' and `show c' should show the appropriate 321 | parts of the General Public License. Of course, the commands you use may 322 | be called something other than `show w' and `show c'; they could even be 323 | mouse-clicks or menu items--whatever suits your program. 324 | 325 | You should also get your employer (if you work as a programmer) or your 326 | school, if any, to sign a "copyright disclaimer" for the program, if 327 | necessary. Here is a sample; alter the names: 328 | 329 | Yoyodyne, Inc., hereby disclaims all copyright interest in the program 330 | `Gnomovision' (which makes passes at compilers) written by James Hacker. 331 | 332 | , 1 April 1989 333 | Ty Coon, President of Vice 334 | 335 | This General Public License does not permit incorporating your program into 336 | proprietary programs. If your program is a subroutine library, you may 337 | consider it more useful to permit linking proprietary applications with the 338 | library. If this is what you want to do, use the GNU Lesser General 339 | Public License instead of this License. -------------------------------------------------------------------------------- /bin/gpx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gradientspace/gsSlicerApps/eaa54f1ce925da0ec58b193f35c675f9e61407d2/bin/gpx -------------------------------------------------------------------------------- /bin/gpx.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gradientspace/gsSlicerApps/eaa54f1ce925da0ec58b193f35c675f9e61407d2/bin/gpx.exe -------------------------------------------------------------------------------- /bin/readme.txt: -------------------------------------------------------------------------------- 1 | Compiled version of gpx 2 | 3 | source: https://github.com/markwal/GPX 4 | builds: https://github.com/markwal/GPX/releases 5 | -------------------------------------------------------------------------------- /dlpView/DLPViewCanvas.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using Gtk; 4 | using GLib; 5 | using SkiaSharp; 6 | using g3; 7 | using gs; 8 | 9 | namespace DLPViewer 10 | { 11 | class DLPViewCanvas : DrawingArea 12 | { 13 | 14 | 15 | public bool ShowOpenEndpoints = true; 16 | 17 | public float Zoom = 0.95f; 18 | 19 | // this is a pixel-space translate 20 | public Vector2f Translate = Vector2f.Zero; 21 | 22 | 23 | public DLPViewCanvas() 24 | { 25 | ExposeEvent += OnExpose; 26 | 27 | ButtonPressEvent += OnButtonPressEvent; 28 | ButtonReleaseEvent += OnButtonReleaseEvent; 29 | MotionNotifyEvent += OnMotionNotifyEvent; 30 | ScrollEvent += OnScrollEvent; 31 | Events = Gdk.EventMask.ExposureMask | Gdk.EventMask.LeaveNotifyMask | 32 | Gdk.EventMask.ButtonPressMask | Gdk.EventMask.ButtonReleaseMask | Gdk.EventMask.PointerMotionMask | 33 | Gdk.EventMask.ScrollMask; 34 | 35 | SetSlices(new PlanarSliceStack()); 36 | } 37 | 38 | PlanarSliceStack Stack; 39 | int currentLayer = 0; 40 | 41 | public void SetSlices(PlanarSliceStack slices) { 42 | Stack = slices; 43 | CurrentLayer = 0; 44 | SliceImages = new List(); 45 | } 46 | 47 | public int CurrentLayer { 48 | get { return currentLayer; } 49 | set { 50 | currentLayer = MathUtil.Clamp(value, 0, Stack.Slices.Count - 1); 51 | QueueDraw(); 52 | } 53 | } 54 | 55 | 56 | 57 | List SliceImages = new List(); 58 | float CurrentDPIMM = 1.0f; 59 | 60 | 61 | // compute bitmap for each slice (maybe do on demand?) 62 | void compute_slice_images() { 63 | 64 | // construct bounding box and add buffer region 65 | AxisAlignedBox3d bounds = Stack.Bounds; 66 | double bufferMM = 1; 67 | bounds.Expand(bufferMM); 68 | Vector3d center = bounds.Center; 69 | 70 | // will create a bitmap with this dots-per-inch 71 | double dpi = 300; 72 | double dpmm = dpi / Units.Convert(Units.Linear.Inches, Units.Linear.Millimeters); 73 | CurrentDPIMM = (float)dpmm; 74 | 75 | // pixel dimensions of image 76 | int width = (int)(bounds.Width * dpmm); 77 | int height = (int)(bounds.Height * dpmm); 78 | 79 | // backgroun and object colors 80 | SKColor bgColor = SkiaUtil.Color(0, 0, 0, 255); 81 | SKColor objColor = SkiaUtil.Color(255, 255, 255, 255); 82 | 83 | // function that maps from input coordinates to pixel space 84 | Func mapToSkiaF = (origPt) => { 85 | origPt.y = -origPt.y; // [RMS] !!! flip Y here? if we don't do this the 86 | // polylines we draw below don't match up. But maybe 87 | // its the polylines that are wrong?? 88 | origPt *= dpmm; 89 | origPt.x += width / 2; origPt.y += height / 2; 90 | return new SKPoint((float)origPt.x, (float)origPt.y); 91 | }; 92 | 93 | foreach (PlanarSlice slice in Stack.Slices) { 94 | 95 | var bitmap = new SKBitmap(width, height, SkiaUtil.ColorType(), SKAlphaType.Premul); 96 | IntPtr len; 97 | using (var skSurface = SKSurface.Create(bitmap.Info.Width, bitmap.Info.Height, SkiaUtil.ColorType(), SKAlphaType.Premul, bitmap.GetPixels(out len), bitmap.Info.RowBytes)) { 98 | 99 | var canvas = skSurface.Canvas; 100 | canvas.Clear(bgColor); 101 | 102 | using (var paint = new SKPaint()) { 103 | paint.IsAntialias = false; 104 | paint.Style = SKPaintStyle.Fill; 105 | paint.Color = objColor; 106 | foreach (GeneralPolygon2d poly in slice.Solids) { 107 | SKPath path = SkiaUtil.ToSKPath(poly, mapToSkiaF); 108 | canvas.DrawPath(path, paint); 109 | } 110 | } 111 | } 112 | 113 | SliceImages.Add(bitmap); 114 | } 115 | 116 | 117 | } 118 | 119 | SKBitmap get_slice_image(int i) { 120 | if (SliceImages.Count == 0) 121 | compute_slice_images(); 122 | return SliceImages[i]; 123 | } 124 | 125 | 126 | 127 | 128 | void OnExpose(object sender, ExposeEventArgs args) 129 | { 130 | DrawingArea area = (DrawingArea) sender; 131 | Cairo.Context cr = Gdk.CairoHelper.Create(area.GdkWindow); 132 | 133 | int width = area.Allocation.Width; 134 | int height = area.Allocation.Height; 135 | 136 | AxisAlignedBox3d bounds3 = Stack.Bounds; 137 | AxisAlignedBox2d bounds = (bounds3 == AxisAlignedBox3d.Empty) ? 138 | new AxisAlignedBox2d(0, 0, 500, 500) : 139 | new AxisAlignedBox2d(bounds3.Min.x, bounds3.Min.y, bounds3.Max.x, bounds3.Max.y ); 140 | 141 | double sx = (double)width / bounds.Width; 142 | double sy = (double)height / bounds.Height; 143 | 144 | float scale = (float)Math.Min(sx, sy); 145 | 146 | // we apply this translate after scaling to pixel coords 147 | Vector2f pixC = Zoom * scale * (Vector2f)bounds.Center; 148 | Vector2f translate = new Vector2f(width/2, height/2) - pixC; 149 | 150 | using (var bitmap = new SKBitmap(width, height, SkiaUtil.ColorType(), SKAlphaType.Premul)) 151 | { 152 | IntPtr len; 153 | using (var skSurface = SKSurface.Create(bitmap.Info.Width, bitmap.Info.Height, SkiaUtil.ColorType(), SKAlphaType.Premul, bitmap.GetPixels(out len), bitmap.Info.RowBytes)) 154 | { 155 | var canvas = skSurface.Canvas; 156 | canvas.Clear(SkiaUtil.Color(240, 240, 240, 255)); 157 | 158 | Func xformF = (pOrig) => { 159 | Vector2f pNew = (Vector2f)pOrig; 160 | pNew -= (Vector2f)bounds.Center; 161 | pNew = Zoom * scale * pNew; 162 | pNew += (Vector2f)pixC; 163 | pNew += translate + Zoom*Translate; 164 | pNew.y = canvas.LocalClipBounds.Height - pNew.y; 165 | return pNew; 166 | }; 167 | Func mapToSkiaF = (pOrig) => { 168 | Vector2f p = xformF(pOrig); 169 | return new SKPoint(p.x, p.y); 170 | }; 171 | 172 | using (var paint = new SKPaint()) 173 | { 174 | SKBitmap sliceImg = get_slice_image(currentLayer); 175 | float w = sliceImg.Width / CurrentDPIMM, h = sliceImg.Height / CurrentDPIMM; 176 | w *= Zoom * scale; 177 | h *= Zoom * scale; 178 | SKPoint sliceCenter = mapToSkiaF(Vector2d.Zero); 179 | SKRect drawRect = new SKRect( 180 | sliceCenter.X - w / 2, sliceCenter.Y - h / 2, 181 | sliceCenter.X + w / 2, sliceCenter.Y + h / 2); 182 | canvas.DrawBitmap(sliceImg, drawRect, paint); 183 | 184 | 185 | paint.IsAntialias = true; 186 | paint.Style = SKPaintStyle.Stroke; 187 | 188 | PlanarSlice slice = Stack.Slices[currentLayer]; 189 | 190 | paint.Color = SkiaUtil.Color(255, 0, 0, 255); ; 191 | paint.StrokeWidth = 2; 192 | foreach ( GeneralPolygon2d poly in slice.Solids ) { 193 | SKPath path = SkiaUtil.ToSKPath(poly, mapToSkiaF); 194 | canvas.DrawPath(path, paint); 195 | } 196 | 197 | } 198 | 199 | Cairo.Surface surface = new Cairo.ImageSurface( 200 | bitmap.GetPixels(out len), 201 | Cairo.Format.Argb32, 202 | bitmap.Width, bitmap.Height, 203 | bitmap.Width * 4); 204 | 205 | surface.MarkDirty(); 206 | cr.SetSourceSurface(surface, 0, 0); 207 | cr.Paint(); 208 | } 209 | } 210 | 211 | //return true; 212 | } 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | // zoom 221 | private void OnScrollEvent(object o, ScrollEventArgs args) 222 | { 223 | if (args.Event.Direction == Gdk.ScrollDirection.Up) 224 | Zoom *= 1.05f; 225 | else 226 | Zoom = Math.Max(0.25f, Zoom * (1.0f / 1.05f)); 227 | QueueDraw(); 228 | } 229 | 230 | 231 | // pan support 232 | bool left_down = false; 233 | Vector2f start_pos = Vector2f.Zero; 234 | Vector2f pan_start; 235 | private void OnButtonPressEvent(object o, ButtonPressEventArgs args) 236 | { 237 | if (args.Event.Button == 1) { 238 | left_down = true; 239 | start_pos = new Vector2f((float)args.Event.X, (float)args.Event.Y); 240 | pan_start = Translate; 241 | } 242 | } 243 | private void OnButtonReleaseEvent(object o, ButtonReleaseEventArgs args) 244 | { 245 | if (left_down) 246 | left_down = false; 247 | } 248 | private void OnMotionNotifyEvent(object o, MotionNotifyEventArgs args) 249 | { 250 | if (left_down) { 251 | Vector2f cur_pos = new Vector2f((float)args.Event.X, (float)args.Event.Y); 252 | Vector2f delta = cur_pos - start_pos; 253 | delta.y = -delta.y; 254 | delta *= 1.0f; // speed 255 | Translate = pan_start + delta / Zoom; 256 | QueueDraw(); 257 | } 258 | } 259 | 260 | 261 | void Reset() 262 | { 263 | Zoom = 1.0f; 264 | Translate = Vector2f.Zero; 265 | QueueDraw(); 266 | } 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | } 277 | 278 | 279 | 280 | 281 | 282 | } 283 | -------------------------------------------------------------------------------- /dlpView/DLPViewerMain.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | 5 | using Gtk; 6 | using GLib; 7 | using SkiaSharp; 8 | using g3; 9 | using gs; 10 | 11 | namespace DLPViewer 12 | { 13 | 14 | 15 | class MainClass 16 | { 17 | 18 | public static Window MainWindow; 19 | public static DLPViewCanvas View; 20 | 21 | 22 | public static void Main(string[] args) 23 | { 24 | ExceptionManager.UnhandledException += delegate (UnhandledExceptionArgs expArgs) { 25 | Console.WriteLine(expArgs.ExceptionObject.ToString()); 26 | expArgs.ExitApplication = true; 27 | }; 28 | 29 | Gtk.Application.Init(); 30 | 31 | MainWindow = new Window("DLPViewer"); 32 | MainWindow.SetDefaultSize(900, 600); 33 | MainWindow.SetPosition(WindowPosition.Center); 34 | MainWindow.DeleteEvent += delegate { 35 | Gtk.Application.Quit(); 36 | }; 37 | 38 | 39 | 40 | DMesh3 mesh = StandardMeshReader.ReadMesh("../../../sample_files/bunny_solid_5cm_min.obj"); 41 | 42 | 43 | MeshPlanarSlicer slicer = new MeshPlanarSlicer(); 44 | slicer.LayerHeightMM = 0.2; 45 | slicer.AddMesh(mesh); 46 | PlanarSliceStack sliceStack = slicer.Compute(); 47 | 48 | View = new DLPViewCanvas(); 49 | View.SetSlices(sliceStack); 50 | MainWindow.Add(View); 51 | 52 | MainWindow.KeyReleaseEvent += Window_KeyReleaseEvent; 53 | 54 | MainWindow.ShowAll(); 55 | 56 | Gtk.Application.Run(); 57 | } 58 | 59 | void OnException(object o, UnhandledExceptionArgs args) 60 | { 61 | 62 | } 63 | 64 | 65 | private static void Window_KeyReleaseEvent(object sender, KeyReleaseEventArgs args) 66 | { 67 | if (args.Event.Key == Gdk.Key.Up) { 68 | if ( (args.Event.State & Gdk.ModifierType.ShiftMask) != 0 ) 69 | View.CurrentLayer = View.CurrentLayer + 10; 70 | else 71 | View.CurrentLayer = View.CurrentLayer + 1; 72 | } else if (args.Event.Key == Gdk.Key.Down) { 73 | if ((args.Event.State & Gdk.ModifierType.ShiftMask) != 0) 74 | View.CurrentLayer = View.CurrentLayer - 10; 75 | else 76 | View.CurrentLayer = View.CurrentLayer - 1; 77 | } 78 | } 79 | 80 | 81 | 82 | 83 | 84 | 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /dlpView/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | 4 | // Information about this assembly is defined by the following attributes. 5 | // Change them to the values specific to your project. 6 | 7 | [assembly: AssemblyTitle("DLPViewer")] 8 | [assembly: AssemblyDescription("")] 9 | [assembly: AssemblyConfiguration("")] 10 | [assembly: AssemblyCompany("gradientspace")] 11 | [assembly: AssemblyProduct("")] 12 | [assembly: AssemblyCopyright("gradientspace")] 13 | [assembly: AssemblyTrademark("")] 14 | [assembly: AssemblyCulture("")] 15 | 16 | // The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}". 17 | // The form "{Major}.{Minor}.*" will automatically update the build and revision, 18 | // and "{Major}.{Minor}.{Build}.*" will update just the revision. 19 | 20 | [assembly: AssemblyVersion("1.0.*")] 21 | 22 | // The following attributes are used to specify the signing key for the assembly, 23 | // if desired. See the Mono documentation for more information about signing. 24 | 25 | //[assembly: AssemblyDelaySign(false)] 26 | //[assembly: AssemblyKeyFile("")] 27 | -------------------------------------------------------------------------------- /dlpView/SkiaUtil.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using SkiaSharp; 3 | using g3; 4 | using gs; 5 | 6 | 7 | namespace DLPViewer 8 | { 9 | public static class SkiaUtil 10 | { 11 | public static SKColorType ColorType() { 12 | return Util.IsRunningOnMono() ? SKColorType.Rgba8888 : SKColorType.Bgra8888; 13 | } 14 | 15 | public static SKColor Color(SKColor c, byte new_a) 16 | { 17 | return new SKColor(c.Red, c.Green, c.Blue, new_a); 18 | } 19 | 20 | public static SKColor Color(byte r, byte g, byte b, byte a = 255) { 21 | if ( Util.IsRunningOnMono() ) { 22 | return new SKColor(b, g, r, a); 23 | } else { 24 | return new SKColor(r, g, b, a); 25 | } 26 | } 27 | 28 | 29 | public static SKColor Blend(SKColor c0, SKColor c1, float t) 30 | { 31 | return new SKColor( 32 | (byte)MathUtil.Clamp(((1 - t) * c0.Red + (t) * c1.Red), 0, 255), 33 | (byte)MathUtil.Clamp(((1 - t) * c0.Green + (t) * c1.Green), 0, 255), 34 | (byte)MathUtil.Clamp(((1 - t) * c0.Blue + (t) * c1.Blue), 0, 255), 35 | (byte)MathUtil.Clamp(((1 - t) * c0.Alpha + (t) * c1.Alpha), 0, 255)); 36 | } 37 | 38 | 39 | public static SKPath ToSKPath(GeneralPolygon2d g, Func mapF) 40 | { 41 | SKPath p = new SKPath(); 42 | 43 | int N = g.Outer.VertexCount; 44 | p.MoveTo(mapF(g.Outer[0])); 45 | for (int i = 1; i < N; i++) 46 | p.LineTo(mapF(g.Outer[i])); 47 | p.Close(); 48 | 49 | foreach (Polygon2d h in g.Holes) { 50 | int hN = h.VertexCount; 51 | p.MoveTo(mapF(h[0])); 52 | for (int i = 1; i < hN; ++i) 53 | p.LineTo(mapF(h[i])); 54 | p.Close(); 55 | } 56 | 57 | return p; 58 | } 59 | 60 | 61 | 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /dlpView/app.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /dlpView/dlpViewer.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | {27D42159-1910-4506-B62B-8A502084EAC1} 5 | WinExe 6 | v4.6 7 | DLPViewer 8 | true 9 | publish\ 10 | true 11 | Disk 12 | false 13 | Foreground 14 | 7 15 | Days 16 | false 17 | false 18 | true 19 | 0 20 | 1.0.0.%2a 21 | false 22 | false 23 | true 24 | 25 | 26 | DLPViewer.MainClass 27 | 28 | 29 | 30 | true 31 | full 32 | false 33 | bin\Debug 34 | DEBUG; 35 | 4 36 | x86 37 | 38 | 39 | true 40 | bin\Release 41 | 4 42 | x86 43 | 44 | 45 | DLPViewer.MainClass 46 | 47 | 48 | 49 | 50 | ..\packages\SkiaSharp.1.60.2\lib\net45\SkiaSharp.dll 51 | 52 | 53 | ..\packages\SkiaSharp.Views.1.60.2\lib\net45\SkiaSharp.Views.Desktop.dll 54 | 55 | 56 | ..\packages\SkiaSharp.Views.1.60.2\lib\net45\SkiaSharp.Views.Gtk.dll 57 | 58 | 59 | ..\packages\SkiaSharp.Views.1.60.2\lib\net45\SkiaSharp.Views.WPF.dll 60 | 61 | 62 | 63 | False 64 | 65 | 66 | False 67 | 68 | 69 | False 70 | 71 | 72 | False 73 | 74 | 75 | False 76 | 77 | 78 | False 79 | 80 | 81 | 82 | 83 | ..\packages\Svg.2.3.0\lib\net35\Svg.dll 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | {6c2e415e-37d9-4c5a-8fd5-60b0133872cf} 99 | gsSlicer 100 | 101 | 102 | {0C518DDA-28FE-44CA-9AB0-F9773974F13A} 103 | geometry3Sharp 104 | 105 | 106 | {25DE77C9-14A4-4562-9A24-0BF1E612D9A9} 107 | gsGCode 108 | 109 | 110 | 111 | 112 | False 113 | Microsoft .NET Framework 4.5.2 %28x86 and x64%29 114 | true 115 | 116 | 117 | False 118 | .NET Framework 3.5 SP1 119 | false 120 | 121 | 122 | 123 | 124 | 125 | 126 | This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. 127 | 128 | 129 | 130 | -------------------------------------------------------------------------------- /dlpView/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /gsSlicer.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | VisualStudioVersion = 15.0.27130.2027 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "geometry3Sharp", "geometry3Sharp\geometry3Sharp.csproj", "{0C518DDA-28FE-44CA-9AB0-F9773974F13A}" 7 | EndProject 8 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{508067DB-D515-41DD-AD3D-02CBDDB20B82}" 9 | ProjectSection(SolutionItems) = preProject 10 | Performance1.psess = Performance1.psess 11 | EndProjectSection 12 | EndProject 13 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SliceViewer", "sliceViewGTK\SliceViewer.csproj", "{6348C5CD-6696-4B59-9851-43924A326BD4}" 14 | EndProject 15 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "gsSlicer", "gsSlicer\gsSlicer.csproj", "{6C2E415E-37D9-4C5A-8FD5-60B0133872CF}" 16 | EndProject 17 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "gsGCode", "gsGCode\gsGCode.csproj", "{25DE77C9-14A4-4562-9A24-0BF1E612D9A9}" 18 | EndProject 19 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "clipper_library", "gsSlicer\thirdparty\clipper_library\clipper_library.csproj", "{9B062971-A88E-4A3D-B3C9-12B78D15FA66}" 20 | EndProject 21 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "dlpViewer", "dlpView\dlpViewer.csproj", "{27D42159-1910-4506-B62B-8A502084EAC1}" 22 | EndProject 23 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MeshToGCodeDemo", "MeshToGCodeDemo\MeshToGCodeDemo.csproj", "{33DA100D-8DC1-4AA1-97A0-792A1AB661AC}" 24 | EndProject 25 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GeneratedPathsDemo", "GeneratedPathsDemo\GeneratedPathsDemo.csproj", "{4EA4D31D-287A-4F62-AFC0-C8281A88EF35}" 26 | EndProject 27 | Global 28 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 29 | Debug|Any CPU = Debug|Any CPU 30 | Debug|x64 = Debug|x64 31 | Debug|x86 = Debug|x86 32 | Release|Any CPU = Release|Any CPU 33 | Release|x64 = Release|x64 34 | Release|x86 = Release|x86 35 | EndGlobalSection 36 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 37 | {0C518DDA-28FE-44CA-9AB0-F9773974F13A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 38 | {0C518DDA-28FE-44CA-9AB0-F9773974F13A}.Debug|Any CPU.Build.0 = Debug|Any CPU 39 | {0C518DDA-28FE-44CA-9AB0-F9773974F13A}.Debug|x64.ActiveCfg = Debug|Any CPU 40 | {0C518DDA-28FE-44CA-9AB0-F9773974F13A}.Debug|x64.Build.0 = Debug|Any CPU 41 | {0C518DDA-28FE-44CA-9AB0-F9773974F13A}.Debug|x86.ActiveCfg = Debug|Any CPU 42 | {0C518DDA-28FE-44CA-9AB0-F9773974F13A}.Debug|x86.Build.0 = Debug|Any CPU 43 | {0C518DDA-28FE-44CA-9AB0-F9773974F13A}.Release|Any CPU.ActiveCfg = Release|Any CPU 44 | {0C518DDA-28FE-44CA-9AB0-F9773974F13A}.Release|Any CPU.Build.0 = Release|Any CPU 45 | {0C518DDA-28FE-44CA-9AB0-F9773974F13A}.Release|x64.ActiveCfg = Release|Any CPU 46 | {0C518DDA-28FE-44CA-9AB0-F9773974F13A}.Release|x64.Build.0 = Release|Any CPU 47 | {0C518DDA-28FE-44CA-9AB0-F9773974F13A}.Release|x86.ActiveCfg = Release|Any CPU 48 | {0C518DDA-28FE-44CA-9AB0-F9773974F13A}.Release|x86.Build.0 = Release|Any CPU 49 | {6348C5CD-6696-4B59-9851-43924A326BD4}.Debug|Any CPU.ActiveCfg = Debug|x86 50 | {6348C5CD-6696-4B59-9851-43924A326BD4}.Debug|Any CPU.Build.0 = Debug|x86 51 | {6348C5CD-6696-4B59-9851-43924A326BD4}.Debug|x64.ActiveCfg = Debug|x86 52 | {6348C5CD-6696-4B59-9851-43924A326BD4}.Debug|x64.Build.0 = Debug|x86 53 | {6348C5CD-6696-4B59-9851-43924A326BD4}.Debug|x86.ActiveCfg = Debug|x86 54 | {6348C5CD-6696-4B59-9851-43924A326BD4}.Debug|x86.Build.0 = Debug|x86 55 | {6348C5CD-6696-4B59-9851-43924A326BD4}.Release|Any CPU.ActiveCfg = Release|x86 56 | {6348C5CD-6696-4B59-9851-43924A326BD4}.Release|Any CPU.Build.0 = Release|x86 57 | {6348C5CD-6696-4B59-9851-43924A326BD4}.Release|x64.ActiveCfg = Release|x86 58 | {6348C5CD-6696-4B59-9851-43924A326BD4}.Release|x64.Build.0 = Release|x86 59 | {6348C5CD-6696-4B59-9851-43924A326BD4}.Release|x86.ActiveCfg = Release|x86 60 | {6348C5CD-6696-4B59-9851-43924A326BD4}.Release|x86.Build.0 = Release|x86 61 | {6C2E415E-37D9-4C5A-8FD5-60B0133872CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 62 | {6C2E415E-37D9-4C5A-8FD5-60B0133872CF}.Debug|Any CPU.Build.0 = Debug|Any CPU 63 | {6C2E415E-37D9-4C5A-8FD5-60B0133872CF}.Debug|x64.ActiveCfg = Debug|Any CPU 64 | {6C2E415E-37D9-4C5A-8FD5-60B0133872CF}.Debug|x64.Build.0 = Debug|Any CPU 65 | {6C2E415E-37D9-4C5A-8FD5-60B0133872CF}.Debug|x86.ActiveCfg = Debug|Any CPU 66 | {6C2E415E-37D9-4C5A-8FD5-60B0133872CF}.Debug|x86.Build.0 = Debug|Any CPU 67 | {6C2E415E-37D9-4C5A-8FD5-60B0133872CF}.Release|Any CPU.ActiveCfg = Release|Any CPU 68 | {6C2E415E-37D9-4C5A-8FD5-60B0133872CF}.Release|Any CPU.Build.0 = Release|Any CPU 69 | {6C2E415E-37D9-4C5A-8FD5-60B0133872CF}.Release|x64.ActiveCfg = Release|Any CPU 70 | {6C2E415E-37D9-4C5A-8FD5-60B0133872CF}.Release|x64.Build.0 = Release|Any CPU 71 | {6C2E415E-37D9-4C5A-8FD5-60B0133872CF}.Release|x86.ActiveCfg = Release|Any CPU 72 | {6C2E415E-37D9-4C5A-8FD5-60B0133872CF}.Release|x86.Build.0 = Release|Any CPU 73 | {25DE77C9-14A4-4562-9A24-0BF1E612D9A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 74 | {25DE77C9-14A4-4562-9A24-0BF1E612D9A9}.Debug|Any CPU.Build.0 = Debug|Any CPU 75 | {25DE77C9-14A4-4562-9A24-0BF1E612D9A9}.Debug|x64.ActiveCfg = Debug|Any CPU 76 | {25DE77C9-14A4-4562-9A24-0BF1E612D9A9}.Debug|x64.Build.0 = Debug|Any CPU 77 | {25DE77C9-14A4-4562-9A24-0BF1E612D9A9}.Debug|x86.ActiveCfg = Debug|Any CPU 78 | {25DE77C9-14A4-4562-9A24-0BF1E612D9A9}.Debug|x86.Build.0 = Debug|Any CPU 79 | {25DE77C9-14A4-4562-9A24-0BF1E612D9A9}.Release|Any CPU.ActiveCfg = Release|Any CPU 80 | {25DE77C9-14A4-4562-9A24-0BF1E612D9A9}.Release|Any CPU.Build.0 = Release|Any CPU 81 | {25DE77C9-14A4-4562-9A24-0BF1E612D9A9}.Release|x64.ActiveCfg = Release|Any CPU 82 | {25DE77C9-14A4-4562-9A24-0BF1E612D9A9}.Release|x64.Build.0 = Release|Any CPU 83 | {25DE77C9-14A4-4562-9A24-0BF1E612D9A9}.Release|x86.ActiveCfg = Release|Any CPU 84 | {25DE77C9-14A4-4562-9A24-0BF1E612D9A9}.Release|x86.Build.0 = Release|Any CPU 85 | {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 86 | {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Debug|Any CPU.Build.0 = Debug|Any CPU 87 | {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Debug|x64.ActiveCfg = Debug|Any CPU 88 | {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Debug|x64.Build.0 = Debug|Any CPU 89 | {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Debug|x86.ActiveCfg = Debug|Any CPU 90 | {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Debug|x86.Build.0 = Debug|Any CPU 91 | {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Release|Any CPU.ActiveCfg = Release|Any CPU 92 | {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Release|Any CPU.Build.0 = Release|Any CPU 93 | {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Release|x64.ActiveCfg = Release|Any CPU 94 | {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Release|x64.Build.0 = Release|Any CPU 95 | {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Release|x86.ActiveCfg = Release|Any CPU 96 | {9B062971-A88E-4A3D-B3C9-12B78D15FA66}.Release|x86.Build.0 = Release|Any CPU 97 | {27D42159-1910-4506-B62B-8A502084EAC1}.Debug|Any CPU.ActiveCfg = Debug|x86 98 | {27D42159-1910-4506-B62B-8A502084EAC1}.Debug|Any CPU.Build.0 = Debug|x86 99 | {27D42159-1910-4506-B62B-8A502084EAC1}.Debug|x64.ActiveCfg = Debug|x86 100 | {27D42159-1910-4506-B62B-8A502084EAC1}.Debug|x64.Build.0 = Debug|x86 101 | {27D42159-1910-4506-B62B-8A502084EAC1}.Debug|x86.ActiveCfg = Debug|x86 102 | {27D42159-1910-4506-B62B-8A502084EAC1}.Debug|x86.Build.0 = Debug|x86 103 | {27D42159-1910-4506-B62B-8A502084EAC1}.Release|Any CPU.ActiveCfg = Release|x86 104 | {27D42159-1910-4506-B62B-8A502084EAC1}.Release|Any CPU.Build.0 = Release|x86 105 | {27D42159-1910-4506-B62B-8A502084EAC1}.Release|x64.ActiveCfg = Release|x86 106 | {27D42159-1910-4506-B62B-8A502084EAC1}.Release|x64.Build.0 = Release|x86 107 | {27D42159-1910-4506-B62B-8A502084EAC1}.Release|x86.ActiveCfg = Release|x86 108 | {27D42159-1910-4506-B62B-8A502084EAC1}.Release|x86.Build.0 = Release|x86 109 | {33DA100D-8DC1-4AA1-97A0-792A1AB661AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 110 | {33DA100D-8DC1-4AA1-97A0-792A1AB661AC}.Debug|Any CPU.Build.0 = Debug|Any CPU 111 | {33DA100D-8DC1-4AA1-97A0-792A1AB661AC}.Debug|x64.ActiveCfg = Debug|Any CPU 112 | {33DA100D-8DC1-4AA1-97A0-792A1AB661AC}.Debug|x64.Build.0 = Debug|Any CPU 113 | {33DA100D-8DC1-4AA1-97A0-792A1AB661AC}.Debug|x86.ActiveCfg = Debug|Any CPU 114 | {33DA100D-8DC1-4AA1-97A0-792A1AB661AC}.Debug|x86.Build.0 = Debug|Any CPU 115 | {33DA100D-8DC1-4AA1-97A0-792A1AB661AC}.Release|Any CPU.ActiveCfg = Release|Any CPU 116 | {33DA100D-8DC1-4AA1-97A0-792A1AB661AC}.Release|Any CPU.Build.0 = Release|Any CPU 117 | {33DA100D-8DC1-4AA1-97A0-792A1AB661AC}.Release|x64.ActiveCfg = Release|Any CPU 118 | {33DA100D-8DC1-4AA1-97A0-792A1AB661AC}.Release|x64.Build.0 = Release|Any CPU 119 | {33DA100D-8DC1-4AA1-97A0-792A1AB661AC}.Release|x86.ActiveCfg = Release|Any CPU 120 | {33DA100D-8DC1-4AA1-97A0-792A1AB661AC}.Release|x86.Build.0 = Release|Any CPU 121 | {4EA4D31D-287A-4F62-AFC0-C8281A88EF35}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 122 | {4EA4D31D-287A-4F62-AFC0-C8281A88EF35}.Debug|Any CPU.Build.0 = Debug|Any CPU 123 | {4EA4D31D-287A-4F62-AFC0-C8281A88EF35}.Debug|x64.ActiveCfg = Debug|Any CPU 124 | {4EA4D31D-287A-4F62-AFC0-C8281A88EF35}.Debug|x64.Build.0 = Debug|Any CPU 125 | {4EA4D31D-287A-4F62-AFC0-C8281A88EF35}.Debug|x86.ActiveCfg = Debug|Any CPU 126 | {4EA4D31D-287A-4F62-AFC0-C8281A88EF35}.Debug|x86.Build.0 = Debug|Any CPU 127 | {4EA4D31D-287A-4F62-AFC0-C8281A88EF35}.Release|Any CPU.ActiveCfg = Release|Any CPU 128 | {4EA4D31D-287A-4F62-AFC0-C8281A88EF35}.Release|Any CPU.Build.0 = Release|Any CPU 129 | {4EA4D31D-287A-4F62-AFC0-C8281A88EF35}.Release|x64.ActiveCfg = Release|Any CPU 130 | {4EA4D31D-287A-4F62-AFC0-C8281A88EF35}.Release|x64.Build.0 = Release|Any CPU 131 | {4EA4D31D-287A-4F62-AFC0-C8281A88EF35}.Release|x86.ActiveCfg = Release|Any CPU 132 | {4EA4D31D-287A-4F62-AFC0-C8281A88EF35}.Release|x86.Build.0 = Release|Any CPU 133 | EndGlobalSection 134 | GlobalSection(SolutionProperties) = preSolution 135 | HideSolutionNode = FALSE 136 | EndGlobalSection 137 | GlobalSection(ExtensibilityGlobals) = postSolution 138 | SolutionGuid = {C5DB3B00-5C9B-4955-8934-8A51FA501820} 139 | EndGlobalSection 140 | GlobalSection(Performance) = preSolution 141 | HasPerformanceSessions = true 142 | EndGlobalSection 143 | GlobalSection(MonoDevelopProperties) = preSolution 144 | Policies = $0 145 | $0.DotNetNamingPolicy = $1 146 | $1.DirectoryNamespaceAssociation = PrefixedHierarchical 147 | EndGlobalSection 148 | EndGlobal 149 | -------------------------------------------------------------------------------- /gsSlicerEXE/App.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /gsSlicerEXE/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("gsSlicer")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("gsSlicer")] 13 | [assembly: AssemblyCopyright("Copyright © gradientspace 2017")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("19b31e73-1328-4a5d-9922-32dfaccb84cd")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /gsSlicerEXE/Properties/Resources.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace gsSlicer.Properties { 12 | using System; 13 | 14 | 15 | /// 16 | /// A strongly-typed resource class, for looking up localized strings, etc. 17 | /// 18 | // This class was auto-generated by the StronglyTypedResourceBuilder 19 | // class via a tool like ResGen or Visual Studio. 20 | // To add or remove a member, edit your .ResX file then rerun ResGen 21 | // with the /str option, or rebuild your VS project. 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | internal class Resources { 26 | 27 | private static global::System.Resources.ResourceManager resourceMan; 28 | 29 | private static global::System.Globalization.CultureInfo resourceCulture; 30 | 31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 32 | internal Resources() { 33 | } 34 | 35 | /// 36 | /// Returns the cached ResourceManager instance used by this class. 37 | /// 38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 39 | internal static global::System.Resources.ResourceManager ResourceManager { 40 | get { 41 | if (object.ReferenceEquals(resourceMan, null)) { 42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("gsSlicer.Properties.Resources", typeof(Resources).Assembly); 43 | resourceMan = temp; 44 | } 45 | return resourceMan; 46 | } 47 | } 48 | 49 | /// 50 | /// Overrides the current thread's CurrentUICulture property for all 51 | /// resource lookups using this strongly typed resource class. 52 | /// 53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 54 | internal static global::System.Globalization.CultureInfo Culture { 55 | get { 56 | return resourceCulture; 57 | } 58 | set { 59 | resourceCulture = value; 60 | } 61 | } 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /gsSlicerEXE/Properties/Resources.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 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 | text/microsoft-resx 107 | 108 | 109 | 2.0 110 | 111 | 112 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 113 | 114 | 115 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | -------------------------------------------------------------------------------- /gsSlicerEXE/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace gsSlicer.Properties { 12 | 13 | 14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")] 16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { 17 | 18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 19 | 20 | public static Settings Default { 21 | get { 22 | return defaultInstance; 23 | } 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /gsSlicerEXE/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /gsSlicerEXE/SlicerMain.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using g3; 5 | 6 | namespace gsSlicer 7 | { 8 | static class SlicerMain 9 | { 10 | 11 | /// 12 | /// The main entry point for the application. 13 | /// 14 | [STAThread] 15 | static void Main() 16 | { 17 | Polygon2d poly = new Polygon2d(); 18 | poly.AppendVertex(new Vector2d(0, 0)); 19 | poly.AppendVertex(new Vector2d(100, 0)); 20 | poly.AppendVertex(new Vector2d(100, 100)); 21 | poly.AppendVertex(new Vector2d(0, 1000)); 22 | 23 | 24 | 25 | 26 | } 27 | 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /gsSlicerEXE/gsSlicerEXE.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {19B31E73-1328-4A5D-9922-32DFACCB84CD} 8 | Exe 9 | Properties 10 | gsSlicer 11 | gsSlicer 12 | v4.5.2 13 | 512 14 | true 15 | frame3Test.Program 16 | false 17 | publish\ 18 | true 19 | Disk 20 | false 21 | Foreground 22 | 7 23 | Days 24 | false 25 | false 26 | true 27 | 0 28 | 1.0.0.%2a 29 | false 30 | true 31 | 32 | 33 | AnyCPU 34 | true 35 | full 36 | false 37 | bin\Debug\ 38 | DEBUG;TRACE 39 | prompt 40 | 4 41 | false 42 | 43 | 44 | AnyCPU 45 | pdbonly 46 | true 47 | bin\Release\ 48 | TRACE 49 | prompt 50 | 4 51 | false 52 | 53 | 54 | gsSlicer.SlicerMain 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | ResXFileCodeGenerator 74 | Resources.Designer.cs 75 | Designer 76 | 77 | 78 | True 79 | Resources.resx 80 | True 81 | 82 | 83 | SettingsSingleFileGenerator 84 | Settings.Designer.cs 85 | 86 | 87 | True 88 | Settings.settings 89 | True 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | {0c518dda-28fe-44ca-9ab0-f9773974f13a} 98 | geometry3Sharp 99 | 100 | 101 | 102 | 103 | False 104 | Microsoft .NET Framework 4.5.2 %28x86 and x64%29 105 | true 106 | 107 | 108 | False 109 | .NET Framework 3.5 SP1 110 | false 111 | 112 | 113 | 114 | 115 | 116 | 123 | -------------------------------------------------------------------------------- /gsSlicerEXE/gsSlicerEXE.csproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | publish\ 5 | 6 | 7 | 8 | 9 | 10 | en-US 11 | false 12 | 13 | -------------------------------------------------------------------------------- /sample_files/Slim_Type1.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gradientspace/gsSlicerApps/eaa54f1ce925da0ec58b193f35c675f9e61407d2/sample_files/Slim_Type1.stl -------------------------------------------------------------------------------- /sample_files/basic_step.obj: -------------------------------------------------------------------------------- 1 | v 4.999995232 4.999995232 -2.910385266e-10 2 | vn 0 -6.123234263e-17 -1 3 | v -5.000000477 -5.000000477 -2.91037916e-10 4 | vn 0 -6.123234263e-17 -1 5 | v 4.999995232 -5.000000477 -2.91037916e-10 6 | vn 0 -6.123234263e-17 -1 7 | v -6.146773103e-06 9.999996185 -2.910388319e-10 8 | vn 0 0.2425355762 -0.9701424837 9 | v 9.999996185 -10.00000191 -2.910376107e-10 10 | vn 0.3123473227 -0.1561737806 -0.9370426536 11 | v -6.146773103e-06 -6.146773103e-06 -2.910382213e-10 12 | vn 0 -6.123234263e-17 -1 13 | v 9.999996185 -6.146773103e-06 -2.910382213e-10 14 | vn 0.242535606 -5.94040948e-17 -0.9701424837 15 | v -10.00000191 -10.00000191 -2.910376107e-10 16 | vn -0.156173721 -0.3123474419 -0.937042594 17 | v -10.00000191 -6.146773103e-06 -2.910382213e-10 18 | vn -0.2425356507 -5.94040948e-17 -0.9701424837 19 | v -6.14669716e-06 -6.14669716e-06 4.166666031 20 | vn 3.549873303e-27 1 -2.728488789e-11 21 | v -6.146773103e-06 -10.00000191 4.166666031 22 | vn 0 -1 -6.386209179e-07 23 | v -10.00000191 -6.14669716e-06 4.999999523 24 | vn -0.1622214913 0.1622214913 0.9733285308 25 | v -6.14669716e-06 -6.14669716e-06 4.999999523 26 | vn 4.700375831e-13 0.1240348667 0.9922778606 27 | v 9.999996185 -6.146773103e-06 1.666666627 28 | vn 1 0 0 29 | v -10.00000191 -10.00000191 1.666666627 30 | vn -0.7071067691 -0.7071067691 4.329780302e-17 31 | v -6.146773103e-06 9.999996185 1.666666627 32 | vn 0 1 -6.123234263e-17 33 | v -10.00000191 -10.00000191 3.333333015 34 | vn -0.8320503235 -0.5547001958 -4.649442928e-07 35 | v -6.146773103e-06 9.999996185 3.333333015 36 | vn 0 0.2425355911 0.9701424837 37 | v -6.146773103e-06 -10.00000191 3.333333015 38 | vn 0 -1 -2.793967724e-07 39 | v 4.999995232 -5.000000477 4.999999523 40 | vn 2.692644171e-24 3.104408819e-08 1 41 | v -10.00000191 -6.146773103e-06 4.166666031 42 | vn -0.7071067691 0.7071067691 -2.634498912e-07 43 | v 9.999996185 -10.00000191 4.166666031 44 | vn 0.8320501447 -0.5547004342 -3.099629282e-07 45 | v -6.146773103e-06 -10.00000191 5 46 | vn 0 -0.1240347326 0.9922778606 47 | v 9.999996185 -6.14669716e-06 4.999999523 48 | vn 0.1638464183 0.08192326128 0.983078301 49 | v 9.999996185 9.999996185 1.666666627 50 | vn 0.7071067691 0.7071067691 -4.329780302e-17 51 | v -6.146773103e-06 -10.00000191 1.666666627 52 | vn 0 -1 6.123234263e-17 53 | v -10.00000191 9.999996185 1.666666627 54 | vn -0.7071070075 0.7071065307 -4.329778978e-17 55 | v -5.000000477 4.999995232 3.333333015 56 | vn 0 6.123234263e-17 1 57 | v 9.999996185 9.999996185 3.333333015 58 | vn 0.3123474121 0.1561737061 0.937042594 59 | v 9.999996185 -6.146773103e-06 3.333333015 60 | vn 0.5025703907 0.07179580629 0.8615499735 61 | v -5.000000477 -5.000000477 4.999999523 62 | vn -2.692645749e-24 3.104408819e-08 1 63 | v -6.14669716e-06 -6.14669716e-06 3.333333015 64 | vn 7.294942591e-28 0.1643989682 0.9863939285 65 | v -5.000000477 4.999995232 -2.910385266e-10 66 | vn 0 -6.123234263e-17 -1 67 | v 9.999996185 9.999996185 -2.910388319e-10 68 | vn 0.156173721 0.3123474419 -0.937042594 69 | v -10.00000191 9.999996185 -2.910388319e-10 70 | vn -0.3123475313 0.1561736614 -0.937042594 71 | v -6.146773103e-06 -10.00000191 -2.910376107e-10 72 | vn 0 -0.2425356954 -0.9701424837 73 | v 9.999996185 -6.146773103e-06 4.166666031 74 | vn 0.5999997258 0.8000001907 -2.728489309e-11 75 | v -10.00000191 -10.00000191 4.166666031 76 | vn -0.7071067691 -0.7071067691 -5.268354357e-07 77 | v -10.00000191 -10.00000191 5 78 | vn -0.08276055753 -0.08276052028 0.993127048 79 | v 9.999996185 -10.00000191 5 80 | vn 0.08192314208 -0.1638463736 0.983078301 81 | v 9.999996185 -10.00000191 1.666666627 82 | vn 0.7071065307 -0.7071070671 4.329781956e-17 83 | v -10.00000191 -6.146773103e-06 1.666666627 84 | vn -1 0 0 85 | v 4.999995232 4.999995232 3.333333015 86 | vn 0 6.123234263e-17 1 87 | v 9.999996185 -10.00000191 3.333333015 88 | vn 0.5546999574 -0.8320504427 -3.099629282e-07 89 | v -10.00000191 9.999996185 3.333333015 90 | vn -0.1561737508 0.3123472929 0.9370426536 91 | v -10.00000191 -6.146773103e-06 3.333333015 92 | vn -0.5025705695 0.07179576904 0.8615498543 93 | # mm_gid 0 94 | g mmGroup0 95 | f 6//6 4//4 1//1 96 | f 1//1 34//34 7//7 97 | f 6//6 1//1 7//7 98 | f 9//9 35//35 33//33 99 | f 33//33 4//4 6//6 100 | f 9//9 33//33 6//6 101 | f 36//36 6//6 3//3 102 | f 3//3 7//7 5//5 103 | f 36//36 3//3 5//5 104 | f 8//8 9//9 2//2 105 | f 2//2 6//6 36//36 106 | f 8//8 2//2 36//36 107 | f 4//4 34//34 1//1 108 | f 35//35 4//4 33//33 109 | f 6//6 7//7 3//3 110 | f 9//9 6//6 2//2 111 | # mm_gid 2 112 | g mmGroup2 113 | f 38//38 39//39 12//12 114 | f 38//38 12//12 21//21 115 | f 10//10 12//12 13//13 116 | f 10//10 21//21 12//12 117 | f 37//37 13//13 24//24 118 | f 37//37 10//10 13//13 119 | f 22//22 24//24 40//40 120 | f 22//22 37//37 24//24 121 | f 11//11 40//40 23//23 122 | f 11//11 22//22 40//40 123 | f 38//38 23//23 39//39 124 | f 38//38 11//11 23//23 125 | f 17//17 38//38 21//21 126 | f 17//17 21//21 46//46 127 | f 32//32 21//21 10//10 128 | f 32//32 46//46 21//21 129 | f 32//32 10//10 37//37 130 | f 32//32 37//37 30//30 131 | f 44//44 37//37 22//22 132 | f 44//44 30//30 37//37 133 | f 44//44 22//22 11//11 134 | f 44//44 11//11 19//19 135 | f 17//17 11//11 38//38 136 | f 17//17 19//19 11//11 137 | f 25//25 18//18 29//29 138 | f 25//25 16//16 18//18 139 | f 12//12 31//31 13//13 140 | f 14//14 25//25 29//29 141 | f 13//13 20//20 24//24 142 | f 39//39 23//23 31//31 143 | f 31//31 23//23 13//13 144 | f 39//39 31//31 12//12 145 | f 23//23 40//40 20//20 146 | f 20//20 40//40 24//24 147 | f 23//23 20//20 13//13 148 | f 46//46 32//32 28//28 149 | f 28//28 32//32 18//18 150 | f 46//46 28//28 45//45 151 | f 16//16 45//45 18//18 152 | f 16//16 27//27 45//45 153 | f 34//34 16//16 25//25 154 | f 34//34 4//4 16//16 155 | f 7//7 25//25 14//14 156 | f 7//7 34//34 25//25 157 | f 5//5 14//14 41//41 158 | f 5//5 7//7 14//14 159 | f 36//36 41//41 26//26 160 | f 36//36 5//5 41//41 161 | f 8//8 26//26 15//15 162 | f 8//8 36//36 26//26 163 | f 9//9 15//15 42//42 164 | f 9//9 8//8 15//15 165 | f 35//35 42//42 27//27 166 | f 35//35 9//9 42//42 167 | f 4//4 27//27 16//16 168 | f 4//4 35//35 27//27 169 | f 32//32 30//30 43//43 170 | f 43//43 30//30 29//29 171 | f 32//32 43//43 18//18 172 | f 27//27 42//42 46//46 173 | f 27//27 46//46 45//45 174 | f 42//42 15//15 17//17 175 | f 42//42 17//17 46//46 176 | f 15//15 26//26 19//19 177 | f 15//15 19//19 17//17 178 | f 26//26 41//41 44//44 179 | f 26//26 44//44 19//19 180 | f 41//41 14//14 30//30 181 | f 18//18 43//43 29//29 182 | f 45//45 28//28 18//18 183 | f 41//41 30//30 44//44 184 | f 14//14 29//29 30//30 185 | -------------------------------------------------------------------------------- /sample_files/disc_single_layer.gcode: -------------------------------------------------------------------------------- 1 | M136 (enable build) 2 | M73 P0 3 | G162 X Y F2000(home XY axes maximum) 4 | G161 Z F900(home Z axis minimum) 5 | G92 X0 Y0 Z-5 A0 B0 (set Z to -5) 6 | G1 Z0.0 F900(move Z to '0') 7 | G161 Z F100(home Z axis minimum) 8 | M132 X Y Z A B (Recall stored home offsets for XYZAB axis) 9 | G92 X152 Y75 Z0 A0 B0 10 | G1 X-141 Y-74 Z40 F3300.0 (move to waiting position) 11 | G130 X20 Y20 A20 B20 (Lower stepper Vrefs while heating) 12 | M135 T0 13 | M104 S210 T0 14 | M133 T0 15 | G130 X127 Y127 A127 B127 (Set Stepper motor Vref to defaults) 16 | ; Makerbot Industries 17 | ; Miracle Grue 3.9.4 18 | ; This file contains digital fabrication directives 19 | ; in G-Code format for your 3D printer 20 | ; http://www.makerbot.com/support/makerware/documentation/slicer/ 21 | ; 22 | ; Right Toolhead Weight (grams): 0.187216 23 | ; Right Toolhead Distance (mm): 61.3601 24 | ; Duration: 103.453 seconds 25 | ; Active extruders in print: 0 26 | ; Chunk 0 27 | ; Lower Position 0 28 | ; Upper Position 0.2 29 | ; Thickness 0.2 30 | ; Width 0.4 31 | G1 X105.400 Y-74.000 Z0.270 F9000.000 (Extruder Prime Dry Move) 32 | G1 X-141 Y-74 Z0.270 F1800.000 E25.000 (Extruder Prime Start) 33 | G92 A0 B0 (Reset after prime) 34 | G1 Z0.000000 F1000 35 | G1 X-141.0 Y-74.0 Z0.0 F1000 E0.0 36 | G92 E0 37 | G1 X-141.000 Y-74.000 Z0.000 F1500 A-1.30000; Retract 38 | G1 X-141.000 Y-74.000 Z0.000 F3000; Retract 39 | G1 X-141.000 Y-74.000 Z0.200 F1380; Travel Move 40 | M73 P0; Update Progress 41 | G1 X-7.198 Y-12.470 Z0.200 F9000; Travel Move 42 | M73 P1; Update Progress 43 | G1 X-7.198 Y-12.470 Z0.200 F1500 A0.00000; Restart 44 | G1 X-9.633 Y-10.701 Z0.200 F1800 A0.10522; Inset 45 | G1 X-11.647 Y-8.463 Z0.200 F1800 A0.21045; Inset 46 | G1 X-13.152 Y-5.857 Z0.200 F1800 A0.31568; Inset 47 | M73 P2; Update Progress 48 | G1 X-14.082 Y-2.994 Z0.200 F1800 A0.42092; Inset 49 | G1 X-14.397 Y0.000 Z0.200 F1800 A0.52616; Inset 50 | G1 X-14.082 Y2.994 Z0.200 F1800 A0.63139; Inset 51 | G1 X-13.152 Y5.857 Z0.200 F1800 A0.73663; Inset 52 | G1 X-11.647 Y8.463 Z0.200 F1800 A0.84186; Inset 53 | G1 X-9.633 Y10.701 Z0.200 F1800 A0.94709; Inset 54 | M73 P3; Update Progress 55 | G1 X-7.198 Y12.470 Z0.200 F1800 A1.05231; Inset 56 | G1 X-4.449 Y13.694 Z0.200 F1800 A1.15754; Inset 57 | G1 X-1.505 Y14.320 Z0.200 F1800 A1.26276; Inset 58 | G1 X1.505 Y14.320 Z0.200 F1800 A1.36798; Inset 59 | G1 X4.449 Y13.694 Z0.200 F1800 A1.47319; Inset 60 | G1 X7.198 Y12.470 Z0.200 F1800 A1.57842; Inset 61 | M73 P4; Update Progress 62 | G1 X9.633 Y10.701 Z0.200 F1800 A1.68364; Inset 63 | G1 X11.647 Y8.463 Z0.200 F1800 A1.78887; Inset 64 | G1 X13.152 Y5.857 Z0.200 F1800 A1.89410; Inset 65 | G1 X14.082 Y2.994 Z0.200 F1800 A1.99934; Inset 66 | G1 X14.397 Y0.000 Z0.200 F1800 A2.10458; Inset 67 | G1 X14.082 Y-2.994 Z0.200 F1800 A2.20981; Inset 68 | M73 P5; Update Progress 69 | G1 X13.152 Y-5.857 Z0.200 F1800 A2.31505; Inset 70 | G1 X11.647 Y-8.463 Z0.200 F1800 A2.42028; Inset 71 | G1 X9.633 Y-10.701 Z0.200 F1800 A2.52551; Inset 72 | G1 X7.198 Y-12.470 Z0.200 F1800 A2.63073; Inset 73 | G1 X4.449 Y-13.694 Z0.200 F1800 A2.73596; Inset 74 | G1 X1.505 Y-14.320 Z0.200 F1800 A2.84118; Inset 75 | M73 P6; Update Progress 76 | G1 X-1.505 Y-14.320 Z0.200 F1800 A2.94640; Inset 77 | G1 X-4.449 Y-13.694 Z0.200 F1800 A3.05161; Inset 78 | G1 X-7.198 Y-12.470 Z0.200 F1800 A3.15684; Inset 79 | G1 X-7.198 Y-12.470 Z0.200 F1500 A1.85684; Retract 80 | G1 X-7.198 Y-12.470 Z0.200 F3000; Retract 81 | G1 X-7.399 Y-12.818 Z0.200 F9000; Travel Move 82 | G1 X-7.399 Y-12.818 Z0.200 F1500 A3.15684; Restart 83 | G1 X-9.902 Y-10.999 Z0.200 F1800 A3.26501; Inset 84 | G1 X-11.973 Y-8.700 Z0.200 F1800 A3.37317; Inset 85 | G1 X-13.519 Y-6.020 Z0.200 F1800 A3.48135; Inset 86 | M73 P7; Update Progress 87 | G1 X-14.475 Y-3.077 Z0.200 F1800 A3.58952; Inset 88 | G1 X-14.799 Y0.000 Z0.200 F1800 A3.69769; Inset 89 | G1 X-14.475 Y3.077 Z0.200 F1800 A3.80587; Inset 90 | G1 X-13.519 Y6.020 Z0.200 F1800 A3.91404; Inset 91 | G1 X-11.973 Y8.700 Z0.200 F1800 A4.02222; Inset 92 | G1 X-9.902 Y10.999 Z0.200 F1800 A4.13038; Inset 93 | M73 P8; Update Progress 94 | G1 X-7.399 Y12.818 Z0.200 F1800 A4.23855; Inset 95 | G1 X-4.573 Y14.077 Z0.200 F1800 A4.34671; Inset 96 | G1 X-1.547 Y14.720 Z0.200 F1800 A4.45487; Inset 97 | G1 X1.547 Y14.720 Z0.200 F1800 A4.56303; Inset 98 | G1 X4.573 Y14.077 Z0.200 F1800 A4.67119; Inset 99 | G1 X7.399 Y12.818 Z0.200 F1800 A4.77935; Inset 100 | M73 P9; Update Progress 101 | G1 X9.902 Y10.999 Z0.200 F1800 A4.88752; Inset 102 | G1 X11.973 Y8.700 Z0.200 F1800 A4.99569; Inset 103 | G1 X13.519 Y6.020 Z0.200 F1800 A5.10386; Inset 104 | G1 X14.475 Y3.077 Z0.200 F1800 A5.21203; Inset 105 | G1 X14.799 Y0.000 Z0.200 F1800 A5.32021; Inset 106 | G1 X14.475 Y-3.077 Z0.200 F1800 A5.42838; Inset 107 | M73 P10; Update Progress 108 | G1 X13.519 Y-6.020 Z0.200 F1800 A5.53656; Inset 109 | G1 X11.973 Y-8.700 Z0.200 F1800 A5.64473; Inset 110 | G1 X9.902 Y-10.999 Z0.200 F1800 A5.75290; Inset 111 | G1 X7.399 Y-12.818 Z0.200 F1800 A5.86106; Inset 112 | G1 X4.573 Y-14.077 Z0.200 F1800 A5.96923; Inset 113 | G1 X1.547 Y-14.720 Z0.200 F1800 A6.07738; Inset 114 | M73 P11; Update Progress 115 | G1 X-1.547 Y-14.720 Z0.200 F1800 A6.18554; Inset 116 | G1 X-4.573 Y-14.077 Z0.200 F1800 A6.29370; Inset 117 | G1 X-7.399 Y-12.818 Z0.200 F1800 A6.40186; Inset 118 | G1 X-7.399 Y-12.818 Z0.200 F1500 A5.10186; Retract 119 | G1 X-7.399 Y-12.818 Z0.200 F3000; Retract 120 | G1 X-6.919 Y-12.281 Z0.200 F9000; Travel Move 121 | G1 X-6.919 Y-12.281 Z0.200 F1500 A6.40186; Restart 122 | G1 X12.235 Y6.873 Z0.200 F1800 A7.34887; Infill 123 | M73 P13; Update Progress 124 | G1 X12.440 Y6.518 Z0.200 F1800 A7.36320; Connection 125 | G1 X-6.532 Y-12.454 Z0.200 F1800 A8.30118; Infill 126 | M73 P14; Update Progress 127 | G1 X-6.144 Y-12.626 Z0.200 F1800 A8.31601; Connection 128 | G1 X12.645 Y6.163 Z0.200 F1800 A9.24496; Infill 129 | M73 P16; Update Progress 130 | G1 X12.850 Y5.808 Z0.200 F1800 A9.25929; Connection 131 | G1 X-5.757 Y-12.799 Z0.200 F1800 A10.17922; Infill 132 | M73 P17; Update Progress 133 | G1 X-5.369 Y-12.971 Z0.200 F1800 A10.19405; Connection 134 | G1 X13.000 Y5.398 Z0.200 F1800 A11.10225; Infill 135 | M73 P19; Update Progress 136 | G1 X13.137 Y4.976 Z0.200 F1800 A11.11779; Connection 137 | G1 X-4.982 Y-13.144 Z0.200 F1800 A12.01363; Infill 138 | M73 P20; Update Progress 139 | G1 X-4.594 Y-13.316 Z0.200 F1800 A12.02846; Connection 140 | G1 X13.275 Y4.553 Z0.200 F1800 A12.91192; Infill 141 | M73 P21; Update Progress 142 | G1 X13.412 Y4.130 Z0.200 F1800 A12.92746; Connection 143 | G1 X-4.178 Y-13.459 Z0.200 F1800 A13.79711; Infill 144 | M73 P23; Update Progress 145 | G1 X-3.716 Y-13.558 Z0.200 F1800 A13.81362; Connection 146 | G1 X13.549 Y3.708 Z0.200 F1800 A14.66722; Infill 147 | M73 P24; Update Progress 148 | G1 X13.687 Y3.285 Z0.200 F1800 A14.68276; Connection 149 | G1 X-3.254 Y-13.656 Z0.200 F1800 A15.52031; Infill 150 | M73 P25; Update Progress 151 | G1 X-2.792 Y-13.754 Z0.200 F1800 A15.53682; Connection 152 | G1 X13.810 Y2.848 Z0.200 F1800 A16.35763; Infill 153 | M73 P27; Update Progress 154 | G1 X13.863 Y2.341 Z0.200 F1800 A16.37544; Connection 155 | G1 X-2.330 Y-13.852 Z0.200 F1800 A17.17605; Infill 156 | M73 P28; Update Progress 157 | G1 X-1.868 Y-13.950 Z0.200 F1800 A17.19255; Connection 158 | G1 X13.916 Y1.834 Z0.200 F1800 A17.97296; Infill 159 | M73 P29; Update Progress 160 | G1 X13.970 Y1.328 Z0.200 F1800 A17.99077; Connection 161 | G1 X-1.392 Y-14.034 Z0.200 F1800 A18.75026; Infill 162 | M73 P31; Update Progress 163 | G1 X-0.832 Y-14.034 Z0.200 F1800 A18.76984; Connection 164 | G1 X14.023 Y0.821 Z0.200 F1800 A19.50427; Infill 165 | M73 P32; Update Progress 166 | G1 X14.076 Y0.314 Z0.200 F1800 A19.52208; Connection 167 | G1 X-0.272 Y-14.034 Z0.200 F1800 A20.23146; Infill 168 | M73 P33; Update Progress 169 | G1 X0.288 Y-14.034 Z0.200 F1800 A20.25104; Connection 170 | G1 X14.084 Y-0.238 Z0.200 F1800 A20.93312; Infill 171 | M73 P34; Update Progress 172 | G1 X14.018 Y-0.864 Z0.200 F1800 A20.95512; Connection 173 | G1 X0.848 Y-14.034 Z0.200 F1800 A21.60626; Infill 174 | M73 P35; Update Progress 175 | G1 X1.408 Y-14.034 Z0.200 F1800 A21.62584; Connection 176 | G1 X13.953 Y-1.490 Z0.200 F1800 A22.24604; Infill 177 | M73 P36; Update Progress 178 | G1 X13.887 Y-2.115 Z0.200 F1800 A22.26804; Connection 179 | G1 X2.101 Y-13.901 Z0.200 F1800 A22.85071; Infill 180 | M73 P37; Update Progress 181 | G1 X2.813 Y-13.750 Z0.200 F1800 A22.87613; Connection 182 | G1 X13.821 Y-2.741 Z0.200 F1800 A23.42039; Infill 183 | M73 P38; Update Progress 184 | G1 X13.614 Y-3.508 Z0.200 F1800 A23.44816; Connection 185 | G1 X3.524 Y-13.598 Z0.200 F1800 A23.94703; Infill 186 | M73 P39; Update Progress 187 | G1 X4.235 Y-13.447 Z0.200 F1800 A23.97245; Connection 188 | G1 X13.345 Y-4.338 Z0.200 F1800 A24.42284; Infill 189 | G1 X13.075 Y-5.167 Z0.200 F1800 A24.45333; Connection 190 | G1 X5.192 Y-13.050 Z0.200 F1800 A24.84307; Infill 191 | M73 P40; Update Progress 192 | G1 X6.202 Y-12.600 Z0.200 F1800 A24.88170; Connection 193 | G1 X12.652 Y-6.150 Z0.200 F1800 A25.20062; Infill 194 | M73 P41; Update Progress 195 | G1 X11.888 Y-7.475 Z0.200 F1800 A25.25410; Connection 196 | G1 X7.373 Y-11.989 Z0.200 F1800 A25.47731; Infill 197 | G1 X9.422 Y-10.501 Z0.200 F1800 A25.56584; Connection 198 | G1 X9.488 Y-10.435 Z0.200 F1800 A25.56910; Infill 199 | G1 X9.488 Y-10.435 Z0.200 F1500 A24.26910; Retract 200 | G1 X9.488 Y-10.435 Z0.200 F3000; Retract 201 | G1 X-7.266 Y-12.067 Z0.200 F9000; Travel Move 202 | G1 X-7.266 Y-12.067 Z0.200 F1500 A25.56910; Restart 203 | G1 X12.030 Y7.228 Z0.200 F1800 A26.52309; Infill 204 | M73 P43; Update Progress 205 | G1 X11.825 Y7.583 Z0.200 F1800 A26.53742; Connection 206 | G1 X-7.590 Y-11.832 Z0.200 F1800 A27.49732; Infill 207 | M73 P44; Update Progress 208 | G1 X-7.914 Y-11.596 Z0.200 F1800 A27.51134; Connection 209 | G1 X11.620 Y7.938 Z0.200 F1800 A28.47713; Infill 210 | M73 P46; Update Progress 211 | G1 X11.415 Y8.294 Z0.200 F1800 A28.49147; Connection 212 | G1 X-8.239 Y-11.360 Z0.200 F1800 A29.46317; Infill 213 | M73 P47; Update Progress 214 | G1 X-8.563 Y-11.125 Z0.200 F1800 A29.47718; Connection 215 | M73 P48; Update Progress 216 | G1 X11.150 Y8.588 Z0.200 F1800 A30.45181; Infill 217 | M73 P49; Update Progress 218 | G1 X10.885 Y8.883 Z0.200 F1800 A30.46567; Connection 219 | G1 X-8.887 Y-10.889 Z0.200 F1800 A31.44322; Infill 220 | M73 P51; Update Progress 221 | G1 X-9.212 Y-10.653 Z0.200 F1800 A31.45723; Connection 222 | G1 X10.619 Y9.178 Z0.200 F1800 A32.43770; Infill 223 | M73 P52; Update Progress 224 | G1 X10.354 Y9.472 Z0.200 F1800 A32.45156; Connection 225 | G1 X-9.519 Y-10.400 Z0.200 F1800 A33.43408; Infill 226 | M73 P54; Update Progress 227 | G1 X-9.784 Y-10.106 Z0.200 F1800 A33.44795; Connection 228 | G1 X10.089 Y9.767 Z0.200 F1800 A34.43047; Infill 229 | M73 P55; Update Progress 230 | G1 X9.823 Y10.062 Z0.200 F1800 A34.44433; Connection 231 | G1 X-10.049 Y-9.811 Z0.200 F1800 A35.42686; Infill 232 | M73 P57; Update Progress 233 | G1 X-10.315 Y-9.516 Z0.200 F1800 A35.44072; Connection 234 | G1 X9.558 Y10.357 Z0.200 F1800 A36.42325; Infill 235 | M73 P58; Update Progress 236 | G1 X9.260 Y10.618 Z0.200 F1800 A36.43712; Connection 237 | G1 X-10.580 Y-9.221 Z0.200 F1800 A37.41801; Infill 238 | M73 P60; Update Progress 239 | G1 X-10.845 Y-8.927 Z0.200 F1800 A37.43188; Connection 240 | G1 X8.935 Y10.854 Z0.200 F1800 A38.40985; Infill 241 | M73 P62; Update Progress 242 | G1 X8.611 Y11.090 Z0.200 F1800 A38.42387; Connection 243 | G1 X-11.111 Y-8.632 Z0.200 F1800 A39.39893; Infill 244 | M73 P63; Update Progress 245 | G1 X-11.376 Y-8.337 Z0.200 F1800 A39.41279; Connection 246 | G1 X8.287 Y11.325 Z0.200 F1800 A40.38493; Infill 247 | M73 P65; Update Progress 248 | G1 X7.962 Y11.561 Z0.200 F1800 A40.39895; Connection 249 | G1 X-11.590 Y-7.991 Z0.200 F1800 A41.36562; Infill 250 | M73 P66; Update Progress 251 | G1 X-11.795 Y-7.636 Z0.200 F1800 A41.37995; Connection 252 | G1 X7.638 Y11.797 Z0.200 F1800 A42.34072; Infill 253 | M73 P68; Update Progress 254 | G1 X7.314 Y12.032 Z0.200 F1800 A42.35474; Connection 255 | G1 X-12.000 Y-7.281 Z0.200 F1800 A43.30960; Infill 256 | M73 P69; Update Progress 257 | G1 X-12.205 Y-6.926 Z0.200 F1800 A43.32394; Connection 258 | G1 X6.977 Y12.255 Z0.200 F1800 A44.27227; Infill 259 | M73 P71; Update Progress 260 | G1 X6.589 Y12.428 Z0.200 F1800 A44.28710; Connection 261 | G1 X-12.410 Y-6.571 Z0.200 F1800 A45.22641; Infill 262 | M73 P72; Update Progress 263 | G1 X-12.615 Y-6.216 Z0.200 F1800 A45.24075; Connection 264 | G1 X6.202 Y12.601 Z0.200 F1800 A46.17103; Infill 265 | M73 P74; Update Progress 266 | G1 X5.814 Y12.773 Z0.200 F1800 A46.18586; Connection 267 | G1 X-12.819 Y-5.861 Z0.200 F1800 A47.10713; Infill 268 | M73 P75; Update Progress 269 | G1 X-12.980 Y-5.461 Z0.200 F1800 A47.12218; Connection 270 | G1 X5.427 Y12.946 Z0.200 F1800 A48.03222; Infill 271 | M73 P77; Update Progress 272 | G1 X5.039 Y13.118 Z0.200 F1800 A48.04704; Connection 273 | G1 X-13.117 Y-5.038 Z0.200 F1800 A48.94471; Infill 274 | M73 P78; Update Progress 275 | G1 X-13.255 Y-4.615 Z0.200 F1800 A48.96025; Connection 276 | G1 X4.652 Y13.291 Z0.200 F1800 A49.84555; Infill 277 | M73 P79; Update Progress 278 | G1 X4.246 Y13.445 Z0.200 F1800 A49.86072; Connection 279 | G1 X-13.392 Y-4.193 Z0.200 F1800 A50.73274; Infill 280 | M73 P81; Update Progress 281 | G1 X-13.529 Y-3.770 Z0.200 F1800 A50.74828; Connection 282 | G1 X3.784 Y13.543 Z0.200 F1800 A51.60426; Infill 283 | M73 P82; Update Progress 284 | G1 X3.322 Y13.641 Z0.200 F1800 A51.62076; Connection 285 | G1 X-13.666 Y-3.347 Z0.200 F1800 A52.46070; Infill 286 | M73 P84; Update Progress 287 | G1 X-13.802 Y-2.923 Z0.200 F1800 A52.47628; Connection 288 | G1 X2.860 Y13.739 Z0.200 F1800 A53.30007; Infill 289 | M73 P85; Update Progress 290 | G1 X2.398 Y13.838 Z0.200 F1800 A53.31658; Connection 291 | G1 X-13.855 Y-2.416 Z0.200 F1800 A54.12017; Infill 292 | M73 P86; Update Progress 293 | G1 X-13.908 Y-1.909 Z0.200 F1800 A54.13799; Connection 294 | G1 X1.937 Y13.936 Z0.200 F1800 A54.92138; Infill 295 | M73 P87; Update Progress 296 | G1 X1.475 Y14.034 Z0.200 F1800 A54.93789; Connection 297 | G1 X-13.962 Y-1.402 Z0.200 F1800 A55.70108; Infill 298 | M73 P89; Update Progress 299 | G1 X-14.015 Y-0.896 Z0.200 F1800 A55.71889; Connection 300 | G1 X0.915 Y14.034 Z0.200 F1800 A56.45703; Infill 301 | M73 P90; Update Progress 302 | G1 X0.355 Y14.034 Z0.200 F1800 A56.47661; Connection 303 | G1 X-14.068 Y-0.389 Z0.200 F1800 A57.18969; Infill 304 | M73 P91; Update Progress 305 | G1 X-14.094 Y0.145 Z0.200 F1800 A57.20839; Connection 306 | G1 X-0.205 Y14.034 Z0.200 F1800 A57.89505; Infill 307 | M73 P92; Update Progress 308 | G1 X-0.765 Y14.034 Z0.200 F1800 A57.91463; Connection 309 | G1 X-14.028 Y0.771 Z0.200 F1800 A58.57035; Infill 310 | M73 P93; Update Progress 311 | G1 X-13.962 Y1.397 Z0.200 F1800 A58.59235; Connection 312 | G1 X-1.325 Y14.034 Z0.200 F1800 A59.21713; Infill 313 | M73 P94; Update Progress 314 | G1 X-1.996 Y13.923 Z0.200 F1800 A59.24090; Connection 315 | G1 X-13.897 Y2.023 Z0.200 F1800 A59.82926; Infill 316 | M73 P95; Update Progress 317 | G1 X-13.831 Y2.649 Z0.200 F1800 A59.85125; Connection 318 | G1 X-2.708 Y13.772 Z0.200 F1800 A60.40120; Infill 319 | M73 P96; Update Progress 320 | G1 X-3.419 Y13.621 Z0.200 F1800 A60.42662; Connection 321 | G1 X-13.654 Y3.385 Z0.200 F1800 A60.93267; Infill 322 | M73 P97; Update Progress 323 | G1 X-13.385 Y4.215 Z0.200 F1800 A60.96316; Connection 324 | G1 X-4.130 Y13.470 Z0.200 F1800 A61.42072; Infill 325 | M73 P98; Update Progress 326 | G1 X-5.043 Y13.116 Z0.200 F1800 A61.45494; Connection 327 | G1 X-13.115 Y5.044 Z0.200 F1800 A61.85403; Infill 328 | G1 X-12.766 Y5.954 Z0.200 F1800 A61.88810; Connection 329 | G1 X-6.053 Y12.667 Z0.200 F1800 A62.22000; Infill 330 | M73 P99; Update Progress 331 | G1 X-7.070 Y12.210 Z0.200 F1800 A62.25900; Connection 332 | G1 X-12.001 Y7.279 Z0.200 F1800 A62.50278; Infill 333 | G1 X-10.235 Y9.604 Z0.200 F1800 A62.60486; Connection 334 | G1 X-9.119 Y10.721 Z0.200 F1800 A62.66007; Infill 335 | M73 P100; Update Progress 336 | ; End of print 337 | G1 X-9.119 Y10.721 Z0.200 F1500 A61.36007; Retract 338 | M127 T0 (Fan Off) 339 | M18 A B(Turn off A and B Steppers) 340 | G1 Z155 F900 341 | G162 X Y F2000 342 | M18 X Y Z(Turn off steppers after a build) 343 | M104 S0 T0 344 | M70 P5 (We <3 Making Things!) 345 | M72 P1 ( Play Ta-Da song ) 346 | M73 P100 347 | M137 (build end notification) 348 | -------------------------------------------------------------------------------- /sample_files/radial_fins.mix: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gradientspace/gsSlicerApps/eaa54f1ce925da0ec58b193f35c675f9e61407d2/sample_files/radial_fins.mix -------------------------------------------------------------------------------- /sample_files/square_linearfill.gcode: -------------------------------------------------------------------------------- 1 | M136 (enable build) 2 | M73 P0 3 | G162 X Y F2000(home XY axes maximum) 4 | G161 Z F900(home Z axis minimum) 5 | G92 X0 Y0 Z-5 A0 B0 (set Z to -5) 6 | G1 Z0.0 F900(move Z to '0') 7 | G161 Z F100(home Z axis minimum) 8 | M132 X Y Z A B (Recall stored home offsets for XYZAB axis) 9 | G92 X152 Y75 Z0 A0 B0 10 | G1 X-141 Y-74 Z40 F3300.0 (move to waiting position) 11 | G130 X20 Y20 A20 B20 (Lower stepper Vrefs while heating) 12 | M135 T0 13 | M104 S230 T0 14 | M133 T0 15 | G130 X127 Y127 A127 B127 (Set Stepper motor Vref to defaults) 16 | ; Makerbot Industries 17 | ; Miracle Grue 3.9.4 18 | ; This file contains digital fabrication directives 19 | ; in G-Code format for your 3D printer 20 | ; http://www.makerbot.com/support/makerware/documentation/slicer/ 21 | ; 22 | ; Right Toolhead Weight (grams): 0.103757 23 | ; Right Toolhead Distance (mm): 34.0062 24 | ; Duration: 58.9226 seconds 25 | ; Active extruders in print: 0 26 | ; Chunk 0 27 | ; Lower Position 0 28 | ; Upper Position 0.2 29 | ; Thickness 0.2 30 | ; Width 0.4 31 | G1 X105.400 Y-74.000 Z0.270 F9000.000 (Extruder Prime Dry Move) 32 | G1 X-141 Y-74 Z0.270 F1800.000 E25.000 (Extruder Prime Start) 33 | G92 A0 B0 (Reset after prime) 34 | G1 Z0.000000 F1000 35 | G1 X-141.0 Y-74.0 Z0.0 F1000 E0.0 36 | G92 E0 37 | G1 X-141.000 Y-74.000 Z0.000 F1500 A-1.30000; Retract 38 | G1 X-141.000 Y-74.000 Z0.000 F3000; Retract 39 | G1 X-141.000 Y-74.000 Z0.200 F1380; Travel Move 40 | M73 P0; Update Progress 41 | G1 X-9.400 Y-9.400 Z0.200 F9000; Travel Move 42 | M73 P2; Update Progress 43 | G1 X-9.400 Y-9.400 Z0.200 F1500 A0.00000; Restart 44 | G1 X-9.400 Y9.400 Z0.200 F1800 A0.65725; Inset 45 | M73 P4; Update Progress 46 | G1 X9.400 Y9.400 Z0.200 F1800 A1.31449; Inset 47 | M73 P6; Update Progress 48 | G1 X9.400 Y-9.400 Z0.200 F1800 A1.97174; Inset 49 | M73 P8; Update Progress 50 | G1 X-9.400 Y-9.400 Z0.200 F1800 A2.62898; Inset 51 | M73 P10; Update Progress 52 | G1 X-9.400 Y-9.400 Z0.200 F1500 A1.32898; Retract 53 | G1 X-9.400 Y-9.400 Z0.200 F3000; Retract 54 | G1 X-9.800 Y-9.800 Z0.200 F9000; Travel Move 55 | G1 X-9.800 Y-9.800 Z0.200 F1500 A2.62898; Restart 56 | G1 X-9.800 Y9.800 Z0.200 F1800 A3.31420; Inset 57 | M73 P11; Update Progress 58 | G1 X9.800 Y9.800 Z0.200 F1800 A3.99941; Inset 59 | M73 P13; Update Progress 60 | G1 X9.800 Y-9.800 Z0.200 F1800 A4.68462; Inset 61 | M73 P15; Update Progress 62 | G1 X-9.800 Y-9.800 Z0.200 F1800 A5.36984; Inset 63 | M73 P17; Update Progress 64 | G1 X-9.800 Y-9.800 Z0.200 F1500 A4.06984; Retract 65 | G1 X-9.800 Y-9.800 Z0.200 F3000; Retract 66 | G1 X-8.994 Y-9.114 Z0.200 F9000; Travel Move 67 | G1 X-8.994 Y-9.114 Z0.200 F1500 A5.36984; Restart 68 | G1 X-8.994 Y9.114 Z0.200 F1800 A6.00708; Infill 69 | M73 P19; Update Progress 70 | G1 X-8.598 Y9.114 Z0.200 F1800 A6.02093; Connection 71 | G1 X-8.598 Y-9.114 Z0.200 F1800 A6.65818; Infill 72 | M73 P21; Update Progress 73 | G1 X-8.202 Y-9.114 Z0.200 F1800 A6.67202; Connection 74 | G1 X-8.202 Y9.114 Z0.200 F1800 A7.30927; Infill 75 | M73 P22; Update Progress 76 | G1 X-7.806 Y9.114 Z0.200 F1800 A7.32311; Connection 77 | M73 P23; Update Progress 78 | G1 X-7.806 Y-9.114 Z0.200 F1800 A7.96036; Infill 79 | M73 P24; Update Progress 80 | G1 X-7.410 Y-9.114 Z0.200 F1800 A7.97420; Connection 81 | G1 X-7.410 Y9.114 Z0.200 F1800 A8.61145; Infill 82 | M73 P26; Update Progress 83 | G1 X-7.014 Y9.114 Z0.200 F1800 A8.62530; Connection 84 | G1 X-7.014 Y-9.114 Z0.200 F1800 A9.26254; Infill 85 | M73 P28; Update Progress 86 | G1 X-6.618 Y-9.114 Z0.200 F1800 A9.27639; Connection 87 | G1 X-6.618 Y9.114 Z0.200 F1800 A9.91363; Infill 88 | M73 P30; Update Progress 89 | G1 X-6.222 Y9.114 Z0.200 F1800 A9.92748; Connection 90 | G1 X-6.222 Y-9.114 Z0.200 F1800 A10.56473; Infill 91 | M73 P31; Update Progress 92 | G1 X-5.826 Y-9.114 Z0.200 F1800 A10.57857; Connection 93 | G1 X-5.826 Y9.114 Z0.200 F1800 A11.21582; Infill 94 | M73 P33; Update Progress 95 | G1 X-5.430 Y9.114 Z0.200 F1800 A11.22966; Connection 96 | G1 X-5.430 Y-9.114 Z0.200 F1800 A11.86691; Infill 97 | M73 P35; Update Progress 98 | G1 X-5.034 Y-9.114 Z0.200 F1800 A11.88075; Connection 99 | G1 X-5.034 Y9.114 Z0.200 F1800 A12.51800; Infill 100 | M73 P37; Update Progress 101 | G1 X-4.638 Y9.114 Z0.200 F1800 A12.53184; Connection 102 | G1 X-4.638 Y-9.114 Z0.200 F1800 A13.16909; Infill 103 | M73 P39; Update Progress 104 | G1 X-4.242 Y-9.114 Z0.200 F1800 A13.18294; Connection 105 | G1 X-4.242 Y9.114 Z0.200 F1800 A13.82018; Infill 106 | M73 P40; Update Progress 107 | G1 X-3.846 Y9.114 Z0.200 F1800 A13.83403; Connection 108 | G1 X-3.846 Y-9.114 Z0.200 F1800 A14.47128; Infill 109 | M73 P42; Update Progress 110 | G1 X-3.450 Y-9.114 Z0.200 F1800 A14.48512; Connection 111 | G1 X-3.450 Y9.114 Z0.200 F1800 A15.12237; Infill 112 | M73 P44; Update Progress 113 | G1 X-3.054 Y9.114 Z0.200 F1800 A15.13621; Connection 114 | G1 X-3.054 Y-9.114 Z0.200 F1800 A15.77346; Infill 115 | M73 P46; Update Progress 116 | G1 X-2.658 Y-9.114 Z0.200 F1800 A15.78730; Connection 117 | G1 X-2.658 Y9.114 Z0.200 F1800 A16.42455; Infill 118 | M73 P48; Update Progress 119 | G1 X-2.262 Y9.114 Z0.200 F1800 A16.43839; Connection 120 | G1 X-2.262 Y-9.114 Z0.200 F1800 A17.07564; Infill 121 | M73 P49; Update Progress 122 | G1 X-1.866 Y-9.114 Z0.200 F1800 A17.08949; Connection 123 | G1 X-1.866 Y9.114 Z0.200 F1800 A17.72673; Infill 124 | M73 P51; Update Progress 125 | G1 X-1.470 Y9.114 Z0.200 F1800 A17.74058; Connection 126 | G1 X-1.470 Y-9.114 Z0.200 F1800 A18.37783; Infill 127 | M73 P53; Update Progress 128 | G1 X-1.074 Y-9.114 Z0.200 F1800 A18.39167; Connection 129 | G1 X-1.074 Y9.114 Z0.200 F1800 A19.02892; Infill 130 | M73 P55; Update Progress 131 | G1 X-0.678 Y9.114 Z0.200 F1800 A19.04276; Connection 132 | G1 X-0.678 Y-9.114 Z0.200 F1800 A19.68001; Infill 133 | M73 P57; Update Progress 134 | G1 X-0.282 Y-9.114 Z0.200 F1800 A19.69385; Connection 135 | G1 X-0.282 Y9.114 Z0.200 F1800 A20.33110; Infill 136 | M73 P58; Update Progress 137 | G1 X0.114 Y9.114 Z0.200 F1800 A20.34494; Connection 138 | G1 X0.114 Y-9.114 Z0.200 F1800 A20.98219; Infill 139 | M73 P60; Update Progress 140 | G1 X0.510 Y-9.114 Z0.200 F1800 A20.99604; Connection 141 | G1 X0.510 Y9.114 Z0.200 F1800 A21.63328; Infill 142 | M73 P62; Update Progress 143 | G1 X0.906 Y9.114 Z0.200 F1800 A21.64713; Connection 144 | G1 X0.906 Y-9.114 Z0.200 F1800 A22.28437; Infill 145 | M73 P64; Update Progress 146 | G1 X1.302 Y-9.114 Z0.200 F1800 A22.29822; Connection 147 | G1 X1.302 Y9.114 Z0.200 F1800 A22.93547; Infill 148 | M73 P65; Update Progress 149 | G1 X1.698 Y9.114 Z0.200 F1800 A22.94931; Connection 150 | M73 P66; Update Progress 151 | G1 X1.698 Y-9.114 Z0.200 F1800 A23.58656; Infill 152 | M73 P67; Update Progress 153 | G1 X2.094 Y-9.114 Z0.200 F1800 A23.60040; Connection 154 | G1 X2.094 Y9.114 Z0.200 F1800 A24.23765; Infill 155 | M73 P69; Update Progress 156 | G1 X2.490 Y9.114 Z0.200 F1800 A24.25149; Connection 157 | G1 X2.490 Y-9.114 Z0.200 F1800 A24.88874; Infill 158 | M73 P71; Update Progress 159 | G1 X2.886 Y-9.114 Z0.200 F1800 A24.90259; Connection 160 | G1 X2.886 Y9.114 Z0.200 F1800 A25.53983; Infill 161 | M73 P73; Update Progress 162 | G1 X3.282 Y9.114 Z0.200 F1800 A25.55368; Connection 163 | G1 X3.282 Y-9.114 Z0.200 F1800 A26.19092; Infill 164 | M73 P74; Update Progress 165 | G1 X3.678 Y-9.114 Z0.200 F1800 A26.20477; Connection 166 | G1 X3.678 Y9.114 Z0.200 F1800 A26.84202; Infill 167 | M73 P76; Update Progress 168 | G1 X4.074 Y9.114 Z0.200 F1800 A26.85586; Connection 169 | G1 X4.074 Y-9.114 Z0.200 F1800 A27.49311; Infill 170 | M73 P78; Update Progress 171 | G1 X4.470 Y-9.114 Z0.200 F1800 A27.50695; Connection 172 | G1 X4.470 Y9.114 Z0.200 F1800 A28.14420; Infill 173 | M73 P80; Update Progress 174 | G1 X4.866 Y9.114 Z0.200 F1800 A28.15804; Connection 175 | G1 X4.866 Y-9.114 Z0.200 F1800 A28.79529; Infill 176 | M73 P82; Update Progress 177 | G1 X5.262 Y-9.114 Z0.200 F1800 A28.80914; Connection 178 | G1 X5.262 Y9.114 Z0.200 F1800 A29.44638; Infill 179 | M73 P83; Update Progress 180 | G1 X5.658 Y9.114 Z0.200 F1800 A29.46023; Connection 181 | G1 X5.658 Y-9.114 Z0.200 F1800 A30.09747; Infill 182 | M73 P85; Update Progress 183 | G1 X6.054 Y-9.114 Z0.200 F1800 A30.11132; Connection 184 | G1 X6.054 Y9.114 Z0.200 F1800 A30.74857; Infill 185 | M73 P87; Update Progress 186 | G1 X6.450 Y9.114 Z0.200 F1800 A30.76241; Connection 187 | G1 X6.450 Y-9.114 Z0.200 F1800 A31.39966; Infill 188 | M73 P89; Update Progress 189 | G1 X6.846 Y-9.114 Z0.200 F1800 A31.41350; Connection 190 | G1 X6.846 Y9.114 Z0.200 F1800 A32.05075; Infill 191 | M73 P91; Update Progress 192 | G1 X7.242 Y9.114 Z0.200 F1800 A32.06459; Connection 193 | G1 X7.242 Y-9.114 Z0.200 F1800 A32.70184; Infill 194 | M73 P92; Update Progress 195 | G1 X7.638 Y-9.114 Z0.200 F1800 A32.71568; Connection 196 | G1 X7.638 Y9.114 Z0.200 F1800 A33.35293; Infill 197 | M73 P94; Update Progress 198 | G1 X8.034 Y9.114 Z0.200 F1800 A33.36678; Connection 199 | G1 X8.034 Y-9.114 Z0.200 F1800 A34.00402; Infill 200 | M73 P96; Update Progress 201 | G1 X8.430 Y-9.114 Z0.200 F1800 A34.01787; Connection 202 | G1 X8.430 Y9.114 Z0.200 F1800 A34.65512; Infill 203 | M73 P98; Update Progress 204 | G1 X8.826 Y9.114 Z0.200 F1800 A34.66896; Connection 205 | G1 X8.826 Y-9.114 Z0.200 F1800 A35.30621; Infill 206 | M73 P100; Update Progress 207 | ; End of print 208 | G1 X8.826 Y-9.114 Z0.200 F1500 A34.00621; Retract 209 | M127 T0 (Fan Off) 210 | M18 A B(Turn off A and B Steppers) 211 | G1 Z155 F900 212 | G162 X Y F2000 213 | M18 X Y Z(Turn off steppers after a build) 214 | M104 S0 T0 215 | M70 P5 (We <3 Making Things!) 216 | M72 P1 ( Play Ta-Da song ) 217 | M73 P100 218 | M137 (build end notification) 219 | -------------------------------------------------------------------------------- /sample_files/square_linearfill_2layer.gcode: -------------------------------------------------------------------------------- 1 | M136 (enable build) 2 | M73 P0 3 | G162 X Y F2000(home XY axes maximum) 4 | G161 Z F900(home Z axis minimum) 5 | G92 X0 Y0 Z-5 A0 B0 (set Z to -5) 6 | G1 Z0.0 F900(move Z to '0') 7 | G161 Z F100(home Z axis minimum) 8 | M132 X Y Z A B (Recall stored home offsets for XYZAB axis) 9 | G92 X152 Y75 Z0 A0 B0 10 | G1 X-141 Y-74 Z40 F3300.0 (move to waiting position) 11 | G130 X20 Y20 A20 B20 (Lower stepper Vrefs while heating) 12 | M135 T0 13 | M104 S230 T0 14 | M133 T0 15 | G130 X127 Y127 A127 B127 (Set Stepper motor Vref to defaults) 16 | ; Makerbot Industries 17 | ; Miracle Grue 3.9.4 18 | ; This file contains digital fabrication directives 19 | ; in G-Code format for your 3D printer 20 | ; http://www.makerbot.com/support/makerware/documentation/slicer/ 21 | ; 22 | ; Right Toolhead Weight (grams): 0.214268 23 | ; Right Toolhead Distance (mm): 70.2261 24 | ; Duration: 81.3092 seconds 25 | ; Active extruders in print: 0 26 | ; Chunk 0 27 | ; Lower Position 0 28 | ; Upper Position 0.2 29 | ; Thickness 0.2 30 | ; Width 0.4 31 | G1 X105.400 Y-74.000 Z0.270 F9000.000 (Extruder Prime Dry Move) 32 | G1 X-141 Y-74 Z0.270 F1800.000 E25.000 (Extruder Prime Start) 33 | G92 A0 B0 (Reset after prime) 34 | G1 Z0.000000 F1000 35 | G1 X-141.0 Y-74.0 Z0.0 F1000 E0.0 36 | G92 E0 37 | G1 X-141.000 Y-74.000 Z0.000 F1500 A-1.30000; Retract 38 | G1 X-141.000 Y-74.000 Z0.000 F3000; Retract 39 | G1 X-141.000 Y-74.000 Z0.200 F1380; Travel Move 40 | M73 P0; Update Progress 41 | G1 X-8.200 Y-8.200 Z0.200 F9000; Travel Move 42 | M73 P2; Update Progress 43 | G1 X-8.200 Y-8.200 Z0.200 F1500 A0.00000; Restart 44 | G1 X-8.200 Y8.200 Z0.200 F1800 A0.57334; Inset 45 | M73 P3; Update Progress 46 | G1 X8.200 Y8.200 Z0.200 F1800 A1.14668; Inset 47 | M73 P4; Update Progress 48 | G1 X8.200 Y-8.200 Z0.200 F1800 A1.72002; Inset 49 | M73 P5; Update Progress 50 | G1 X-8.200 Y-8.200 Z0.200 F1800 A2.29337; Inset 51 | M73 P6; Update Progress 52 | G1 X-8.200 Y-8.200 Z0.200 F1500 A0.99337; Retract 53 | G1 X-8.200 Y-8.200 Z0.200 F3000; Retract 54 | G1 X-8.600 Y-8.600 Z0.200 F9000; Travel Move 55 | G1 X-8.600 Y-8.600 Z0.200 F1500 A2.29337; Restart 56 | G1 X-8.600 Y8.600 Z0.200 F1800 A2.89468; Inset 57 | M73 P7; Update Progress 58 | G1 X8.600 Y8.600 Z0.200 F1800 A3.49599; Inset 59 | M73 P9; Update Progress 60 | G1 X8.600 Y-8.600 Z0.200 F1800 A4.09730; Inset 61 | M73 P10; Update Progress 62 | G1 X-8.600 Y-8.600 Z0.200 F1800 A4.69861; Inset 63 | M73 P11; Update Progress 64 | G1 X-8.600 Y-8.600 Z0.200 F1500 A3.39861; Retract 65 | G1 X-8.600 Y-8.600 Z0.200 F3000; Retract 66 | G1 X-9.000 Y-9.000 Z0.200 F9000; Travel Move 67 | G1 X-9.000 Y-9.000 Z0.200 F1500 A4.69861; Restart 68 | G1 X-9.000 Y9.000 Z0.200 F1800 A5.32789; Inset 69 | M73 P12; Update Progress 70 | G1 X9.000 Y9.000 Z0.200 F1800 A5.95716; Inset 71 | M73 P13; Update Progress 72 | G1 X9.000 Y-9.000 Z0.200 F1800 A6.58644; Inset 73 | M73 P15; Update Progress 74 | G1 X-9.000 Y-9.000 Z0.200 F1800 A7.21572; Inset 75 | M73 P16; Update Progress 76 | G1 X-9.000 Y-9.000 Z0.200 F1500 A5.91572; Retract 77 | G1 X-9.000 Y-9.000 Z0.200 F3000; Retract 78 | G1 X-9.400 Y-9.400 Z0.200 F9000; Travel Move 79 | G1 X-9.400 Y-9.400 Z0.200 F1500 A7.21572; Restart 80 | G1 X-9.400 Y9.400 Z0.200 F1800 A7.87296; Inset 81 | M73 P17; Update Progress 82 | G1 X9.400 Y9.400 Z0.200 F1800 A8.53021; Inset 83 | M73 P19; Update Progress 84 | G1 X9.400 Y-9.400 Z0.200 F1800 A9.18745; Inset 85 | M73 P20; Update Progress 86 | G1 X-9.400 Y-9.400 Z0.200 F1800 A9.84470; Inset 87 | M73 P21; Update Progress 88 | G1 X-9.400 Y-9.400 Z0.200 F1500 A8.54470; Retract 89 | G1 X-9.400 Y-9.400 Z0.200 F3000; Retract 90 | G1 X-9.800 Y-9.800 Z0.200 F9000; Travel Move 91 | G1 X-9.800 Y-9.800 Z0.200 F1500 A9.84470; Restart 92 | G1 X-9.800 Y9.800 Z0.200 F1800 A10.52991; Inset 93 | M73 P23; Update Progress 94 | G1 X9.800 Y9.800 Z0.200 F1800 A11.21513; Inset 95 | M73 P24; Update Progress 96 | G1 X9.800 Y-9.800 Z0.200 F1800 A11.90034; Inset 97 | M73 P25; Update Progress 98 | G1 X-9.800 Y-9.800 Z0.200 F1800 A12.58556; Inset 99 | M73 P27; Update Progress 100 | G1 X-9.800 Y-9.800 Z0.200 F1500 A11.28556; Retract 101 | G1 X-9.800 Y-9.800 Z0.200 F3000; Retract 102 | G1 X-7.753 Y-7.914 Z0.200 F9000; Travel Move 103 | G1 X-7.753 Y-7.914 Z0.200 F1500 A12.58556; Restart 104 | G1 X7.914 Y7.753 Z0.200 F1800 A13.36014; Infill 105 | M73 P28; Update Progress 106 | G1 X7.515 Y7.914 Z0.200 F1800 A13.37518; Connection 107 | G1 X-7.914 Y-7.515 Z0.200 F1800 A14.13800; Infill 108 | M73 P30; Update Progress 109 | G1 X-7.914 Y-6.955 Z0.200 F1800 A14.15758; Connection 110 | G1 X6.955 Y7.914 Z0.200 F1800 A14.89271; Infill 111 | M73 P31; Update Progress 112 | G1 X6.395 Y7.914 Z0.200 F1800 A14.91229; Connection 113 | G1 X-7.914 Y-6.395 Z0.200 F1800 A15.61973; Infill 114 | M73 P33; Update Progress 115 | G1 X-7.914 Y-5.835 Z0.200 F1800 A15.63931; Connection 116 | G1 X5.835 Y7.914 Z0.200 F1800 A16.31907; Infill 117 | M73 P34; Update Progress 118 | G1 X5.275 Y7.914 Z0.200 F1800 A16.33865; Connection 119 | G1 X-7.914 Y-5.275 Z0.200 F1800 A16.99071; Infill 120 | M73 P36; Update Progress 121 | G1 X-7.914 Y-4.715 Z0.200 F1800 A17.01029; Connection 122 | G1 X4.715 Y7.914 Z0.200 F1800 A17.63467; Infill 123 | M73 P37; Update Progress 124 | G1 X4.155 Y7.914 Z0.200 F1800 A17.65425; Connection 125 | G1 X-7.914 Y-4.155 Z0.200 F1800 A18.25094; Infill 126 | M73 P38; Update Progress 127 | G1 X-7.914 Y-3.595 Z0.200 F1800 A18.27052; Connection 128 | G1 X3.595 Y7.914 Z0.200 F1800 A18.83952; Infill 129 | M73 P39; Update Progress 130 | G1 X3.035 Y7.914 Z0.200 F1800 A18.85910; Connection 131 | G1 X-7.914 Y-3.035 Z0.200 F1800 A19.40041; Infill 132 | M73 P40; Update Progress 133 | G1 X-7.914 Y-2.475 Z0.200 F1800 A19.41999; Connection 134 | G1 X2.475 Y7.914 Z0.200 F1800 A19.93361; Infill 135 | M73 P41; Update Progress 136 | G1 X1.915 Y7.914 Z0.200 F1800 A19.95319; Connection 137 | G1 X-7.914 Y-1.915 Z0.200 F1800 A20.43913; Infill 138 | M73 P42; Update Progress 139 | G1 X-7.914 Y-1.355 Z0.200 F1800 A20.45871; Connection 140 | G1 X1.355 Y7.914 Z0.200 F1800 A20.91696; Infill 141 | M73 P43; Update Progress 142 | G1 X0.795 Y7.914 Z0.200 F1800 A20.93653; Connection 143 | G1 X-7.914 Y-0.795 Z0.200 F1800 A21.36709; Infill 144 | M73 P44; Update Progress 145 | G1 X-7.914 Y-0.235 Z0.200 F1800 A21.38667; Connection 146 | G1 X0.235 Y7.914 Z0.200 F1800 A21.78955; Infill 147 | M73 P45; Update Progress 148 | G1 X-0.325 Y7.914 Z0.200 F1800 A21.80912; Connection 149 | G1 X-7.914 Y0.325 Z0.200 F1800 A22.18431; Infill 150 | M73 P46; Update Progress 151 | G1 X-7.914 Y0.885 Z0.200 F1800 A22.20389; Connection 152 | G1 X-0.885 Y7.914 Z0.200 F1800 A22.55138; Infill 153 | M73 P47; Update Progress 154 | G1 X-1.445 Y7.914 Z0.200 F1800 A22.57096; Connection 155 | G1 X-7.914 Y1.445 Z0.200 F1800 A22.89077; Infill 156 | G1 X-7.914 Y2.006 Z0.200 F1800 A22.91035; Connection 157 | G1 X-2.006 Y7.914 Z0.200 F1800 A23.20246; Infill 158 | M73 P48; Update Progress 159 | G1 X-2.566 Y7.914 Z0.200 F1800 A23.22204; Connection 160 | G1 X-7.914 Y2.566 Z0.200 F1800 A23.48647; Infill 161 | G1 X-7.914 Y3.126 Z0.200 F1800 A23.50605; Connection 162 | M73 P49; Update Progress 163 | G1 X-3.126 Y7.914 Z0.200 F1800 A23.74280; Infill 164 | G1 X-3.686 Y7.914 Z0.200 F1800 A23.76237; Connection 165 | G1 X-7.914 Y3.686 Z0.200 F1800 A23.97143; Infill 166 | G1 X-7.914 Y4.246 Z0.200 F1800 A23.99101; Connection 167 | G1 X-4.246 Y7.914 Z0.200 F1800 A24.17237; Infill 168 | M73 P50; Update Progress 169 | G1 X-4.806 Y7.914 Z0.200 F1800 A24.19195; Connection 170 | G1 X-7.914 Y4.806 Z0.200 F1800 A24.34563; Infill 171 | G1 X-7.914 Y5.366 Z0.200 F1800 A24.36521; Connection 172 | G1 X-5.366 Y7.914 Z0.200 F1800 A24.49120; Infill 173 | G1 X-5.926 Y7.914 Z0.200 F1800 A24.51078; Connection 174 | M73 P51; Update Progress 175 | G1 X-7.914 Y5.926 Z0.200 F1800 A24.60908; Infill 176 | G1 X-7.914 Y6.486 Z0.200 F1800 A24.62865; Connection 177 | G1 X-6.486 Y7.914 Z0.200 F1800 A24.69927; Infill 178 | G1 X-7.046 Y7.914 Z0.200 F1800 A24.71885; Connection 179 | G1 X-7.914 Y7.046 Z0.200 F1800 A24.76177; Infill 180 | G1 X-7.914 Y7.606 Z0.200 F1800 A24.78135; Connection 181 | G1 X-7.606 Y7.914 Z0.200 F1800 A24.79659; Infill 182 | G1 X-7.606 Y7.914 Z0.200 F1500 A23.49659; Retract 183 | G1 X-7.606 Y7.914 Z0.200 F3000; Retract 184 | G1 X7.914 Y7.193 Z0.200 F9000; Travel Move 185 | G1 X7.914 Y7.193 Z0.200 F1500 A24.79659; Restart 186 | G1 X-7.193 Y-7.914 Z0.200 F1800 A25.54348; Infill 187 | M73 P53; Update Progress 188 | G1 X-6.633 Y-7.914 Z0.200 F1800 A25.56306; Connection 189 | G1 X7.914 Y6.633 Z0.200 F1800 A26.28227; Infill 190 | M73 P54; Update Progress 191 | G1 X7.914 Y6.073 Z0.200 F1800 A26.30185; Connection 192 | G1 X-6.073 Y-7.914 Z0.200 F1800 A26.99337; Infill 193 | M73 P56; Update Progress 194 | G1 X-5.513 Y-7.914 Z0.200 F1800 A27.01295; Connection 195 | G1 X7.914 Y5.513 Z0.200 F1800 A27.67678; Infill 196 | M73 P57; Update Progress 197 | G1 X7.914 Y4.953 Z0.200 F1800 A27.69636; Connection 198 | G1 X-4.953 Y-7.914 Z0.200 F1800 A28.33250; Infill 199 | M73 P58; Update Progress 200 | G1 X-4.393 Y-7.914 Z0.200 F1800 A28.35208; Connection 201 | G1 X7.914 Y4.393 Z0.200 F1800 A28.96053; Infill 202 | M73 P60; Update Progress 203 | G1 X7.914 Y3.833 Z0.200 F1800 A28.98011; Connection 204 | G1 X-3.833 Y-7.914 Z0.200 F1800 A29.56088; Infill 205 | M73 P61; Update Progress 206 | G1 X-3.273 Y-7.914 Z0.200 F1800 A29.58046; Connection 207 | G1 X7.914 Y3.273 Z0.200 F1800 A30.13354; Infill 208 | M73 P62; Update Progress 209 | G1 X7.914 Y2.713 Z0.200 F1800 A30.15312; Connection 210 | G1 X-2.713 Y-7.914 Z0.200 F1800 A30.67851; Infill 211 | M73 P63; Update Progress 212 | G1 X-2.153 Y-7.914 Z0.200 F1800 A30.69808; Connection 213 | G1 X7.914 Y2.153 Z0.200 F1800 A31.19579; Infill 214 | M73 P64; Update Progress 215 | G1 X7.914 Y1.593 Z0.200 F1800 A31.21537; Connection 216 | G1 X-1.593 Y-7.914 Z0.200 F1800 A31.68538; Infill 217 | M73 P65; Update Progress 218 | G1 X-1.033 Y-7.914 Z0.200 F1800 A31.70496; Connection 219 | G1 X7.914 Y1.033 Z0.200 F1800 A32.14728; Infill 220 | M73 P66; Update Progress 221 | G1 X7.914 Y0.473 Z0.200 F1800 A32.16686; Connection 222 | G1 X-0.473 Y-7.914 Z0.200 F1800 A32.58150; Infill 223 | M73 P67; Update Progress 224 | G1 X0.087 Y-7.914 Z0.200 F1800 A32.60108; Connection 225 | G1 X7.914 Y-0.087 Z0.200 F1800 A32.98803; Infill 226 | M73 P68; Update Progress 227 | G1 X7.914 Y-0.647 Z0.200 F1800 A33.00761; Connection 228 | G1 X0.647 Y-7.914 Z0.200 F1800 A33.36687; Infill 229 | G1 X1.208 Y-7.914 Z0.200 F1800 A33.38644; Connection 230 | G1 X7.914 Y-1.208 Z0.200 F1800 A33.71802; Infill 231 | M73 P69; Update Progress 232 | G1 X7.914 Y-1.768 Z0.200 F1800 A33.73760; Connection 233 | G1 X1.768 Y-7.914 Z0.200 F1800 A34.04148; Infill 234 | M73 P70; Update Progress 235 | G1 X2.328 Y-7.914 Z0.200 F1800 A34.06106; Connection 236 | G1 X7.914 Y-2.328 Z0.200 F1800 A34.33725; Infill 237 | G1 X7.914 Y-2.888 Z0.200 F1800 A34.35683; Connection 238 | G1 X2.888 Y-7.914 Z0.200 F1800 A34.60534; Infill 239 | M73 P71; Update Progress 240 | G1 X3.448 Y-7.914 Z0.200 F1800 A34.62492; Connection 241 | G1 X7.914 Y-3.448 Z0.200 F1800 A34.84574; Infill 242 | G1 X7.914 Y-4.008 Z0.200 F1800 A34.86532; Connection 243 | G1 X4.008 Y-7.914 Z0.200 F1800 A35.05845; Infill 244 | M73 P72; Update Progress 245 | G1 X4.568 Y-7.914 Z0.200 F1800 A35.07803; Connection 246 | G1 X7.914 Y-4.568 Z0.200 F1800 A35.24347; Infill 247 | G1 X7.914 Y-5.128 Z0.200 F1800 A35.26305; Connection 248 | G1 X5.128 Y-7.914 Z0.200 F1800 A35.40080; Infill 249 | G1 X5.688 Y-7.914 Z0.200 F1800 A35.42038; Connection 250 | G1 X7.914 Y-5.688 Z0.200 F1800 A35.53045; Infill 251 | M73 P73; Update Progress 252 | G1 X7.914 Y-6.248 Z0.200 F1800 A35.55003; Connection 253 | G1 X6.248 Y-7.914 Z0.200 F1800 A35.63241; Infill 254 | G1 X6.808 Y-7.914 Z0.200 F1800 A35.65198; Connection 255 | G1 X7.914 Y-6.808 Z0.200 F1800 A35.70667; Infill 256 | G1 X7.914 Y-7.368 Z0.200 F1800 A35.72625; Connection 257 | G1 X7.368 Y-7.914 Z0.200 F1800 A35.75325; Infill 258 | ; Chunk 1 259 | ; Lower Position 0.2 260 | ; Upper Position 0.4 261 | ; Thickness 0.2 262 | ; Width 0.4 263 | G1 X7.368 Y-7.914 Z0.200 F1500 A34.45325; Retract 264 | G1 X7.368 Y-7.914 Z0.200 F3000; Retract 265 | G1 X7.368 Y-7.914 Z0.400 F1380; Travel Move 266 | G1 X-8.200 Y-8.200 Z0.400 F9000; Travel Move 267 | G1 X-8.200 Y-8.200 Z0.400 F1500 A35.75325; Restart 268 | M126 T0; Enable Fan 269 | G1 X-8.200 Y8.200 Z0.400 F5400 A36.32660; Inset 270 | M73 P74; Update Progress 271 | G1 X8.200 Y8.200 Z0.400 F5400 A36.89994; Inset 272 | G1 X8.200 Y-8.200 Z0.400 F5400 A37.47328; Inset 273 | M73 P75; Update Progress 274 | G1 X-8.200 Y-8.200 Z0.400 F5400 A38.04662; Inset 275 | M127 T0; Disable Fan 276 | G1 X-8.200 Y-8.200 Z0.400 F1500 A36.74662; Retract 277 | G1 X-8.200 Y-8.200 Z0.400 F3000; Retract 278 | G1 X-8.600 Y-8.600 Z0.400 F9000; Travel Move 279 | G1 X-8.600 Y-8.600 Z0.400 F1500 A38.04662; Restart 280 | M126 T0; Enable Fan 281 | G1 X-8.600 Y8.600 Z0.400 F5400 A38.64793; Inset 282 | G1 X8.600 Y8.600 Z0.400 F5400 A39.24924; Inset 283 | M73 P76; Update Progress 284 | G1 X8.600 Y-8.600 Z0.400 F5400 A39.85055; Inset 285 | G1 X-8.600 Y-8.600 Z0.400 F5400 A40.45186; Inset 286 | M73 P77; Update Progress 287 | M127 T0; Disable Fan 288 | G1 X-8.600 Y-8.600 Z0.400 F1500 A39.15186; Retract 289 | G1 X-8.600 Y-8.600 Z0.400 F3000; Retract 290 | G1 X-9.000 Y-9.000 Z0.400 F9000; Travel Move 291 | G1 X-9.000 Y-9.000 Z0.400 F1500 A40.45186; Restart 292 | M126 T0; Enable Fan 293 | G1 X-9.000 Y9.000 Z0.400 F5400 A41.08114; Inset 294 | G1 X9.000 Y9.000 Z0.400 F5400 A41.71042; Inset 295 | G1 X9.000 Y-9.000 Z0.400 F5400 A42.33970; Inset 296 | M73 P78; Update Progress 297 | G1 X-9.000 Y-9.000 Z0.400 F5400 A42.96897; Inset 298 | M127 T0; Disable Fan 299 | G1 X-9.000 Y-9.000 Z0.400 F1500 A41.66897; Retract 300 | G1 X-9.000 Y-9.000 Z0.400 F3000; Retract 301 | G1 X-9.400 Y-9.400 Z0.400 F9000; Travel Move 302 | G1 X-9.400 Y-9.400 Z0.400 F1500 A42.96897; Restart 303 | M126 T0; Enable Fan 304 | G1 X-9.400 Y9.400 Z0.400 F5400 A43.62622; Inset 305 | M73 P79; Update Progress 306 | G1 X9.400 Y9.400 Z0.400 F5400 A44.28346; Inset 307 | G1 X9.400 Y-9.400 Z0.400 F5400 A44.94071; Inset 308 | M73 P80; Update Progress 309 | G1 X-9.400 Y-9.400 Z0.400 F5400 A45.59795; Inset 310 | M127 T0; Disable Fan 311 | G1 X-9.400 Y-9.400 Z0.400 F1500 A44.29795; Retract 312 | G1 X-9.400 Y-9.400 Z0.400 F3000; Retract 313 | G1 X-9.800 Y-9.800 Z0.400 F9000; Travel Move 314 | G1 X-9.800 Y-9.800 Z0.400 F1500 A45.59795; Restart 315 | M126 T0; Enable Fan 316 | G1 X-9.800 Y9.800 Z0.400 F2400 A46.28317; Inset 317 | M73 P81; Update Progress 318 | G1 X9.800 Y9.800 Z0.400 F2400 A46.96838; Inset 319 | M73 P82; Update Progress 320 | G1 X9.800 Y-9.800 Z0.400 F2400 A47.65360; Inset 321 | M73 P83; Update Progress 322 | G1 X-9.800 Y-9.800 Z0.400 F2400 A48.33881; Inset 323 | M73 P84; Update Progress 324 | M127 T0; Disable Fan 325 | G1 X-9.800 Y-9.800 Z0.400 F1500 A47.03881; Retract 326 | G1 X-9.800 Y-9.800 Z0.400 F3000; Retract 327 | G1 X-7.606 Y-7.914 Z0.400 F9000; Travel Move 328 | G1 X-7.606 Y-7.914 Z0.400 F1500 A48.33881; Restart 329 | M126 T0; Enable Fan 330 | G1 X-7.914 Y-7.606 Z0.400 F5400 A48.35405; Infill 331 | G1 X-7.914 Y-7.046 Z0.400 F5400 A48.37362; Connection 332 | G1 X-7.046 Y-7.914 Z0.400 F5400 A48.41655; Infill 333 | G1 X-6.486 Y-7.914 Z0.400 F5400 A48.43613; Connection 334 | G1 X-7.914 Y-6.486 Z0.400 F5400 A48.50674; Infill 335 | G1 X-7.914 Y-5.926 Z0.400 F5400 A48.52632; Connection 336 | G1 X-5.926 Y-7.914 Z0.400 F5400 A48.62462; Infill 337 | G1 X-5.366 Y-7.914 Z0.400 F5400 A48.64420; Connection 338 | G1 X-7.914 Y-5.366 Z0.400 F5400 A48.77019; Infill 339 | G1 X-7.914 Y-4.806 Z0.400 F5400 A48.78977; Connection 340 | G1 X-4.806 Y-7.914 Z0.400 F5400 A48.94344; Infill 341 | G1 X-4.246 Y-7.914 Z0.400 F5400 A48.96302; Connection 342 | M73 P85; Update Progress 343 | G1 X-7.914 Y-4.246 Z0.400 F5400 A49.14439; Infill 344 | G1 X-7.914 Y-3.686 Z0.400 F5400 A49.16397; Connection 345 | G1 X-3.686 Y-7.914 Z0.400 F5400 A49.37302; Infill 346 | G1 X-3.126 Y-7.914 Z0.400 F5400 A49.39260; Connection 347 | G1 X-7.914 Y-3.126 Z0.400 F5400 A49.62934; Infill 348 | G1 X-7.914 Y-2.566 Z0.400 F5400 A49.64892; Connection 349 | G1 X-2.566 Y-7.914 Z0.400 F5400 A49.91335; Infill 350 | G1 X-2.006 Y-7.914 Z0.400 F5400 A49.93293; Connection 351 | G1 X-7.914 Y-2.006 Z0.400 F5400 A50.22505; Infill 352 | G1 X-7.914 Y-1.445 Z0.400 F5400 A50.24463; Connection 353 | G1 X-1.445 Y-7.914 Z0.400 F5400 A50.56443; Infill 354 | M73 P86; Update Progress 355 | G1 X-0.885 Y-7.914 Z0.400 F5400 A50.58401; Connection 356 | G1 X-7.914 Y-0.885 Z0.400 F5400 A50.93151; Infill 357 | G1 X-7.914 Y-0.325 Z0.400 F5400 A50.95109; Connection 358 | G1 X-0.325 Y-7.914 Z0.400 F5400 A51.32627; Infill 359 | G1 X0.235 Y-7.914 Z0.400 F5400 A51.34585; Connection 360 | G1 X-7.914 Y0.235 Z0.400 F5400 A51.74872; Infill 361 | G1 X-7.914 Y0.795 Z0.400 F5400 A51.76830; Connection 362 | G1 X0.795 Y-7.914 Z0.400 F5400 A52.19886; Infill 363 | M73 P87; Update Progress 364 | G1 X1.355 Y-7.914 Z0.400 F5400 A52.21844; Connection 365 | G1 X-7.914 Y1.355 Z0.400 F5400 A52.67669; Infill 366 | G1 X-7.914 Y1.915 Z0.400 F5400 A52.69627; Connection 367 | G1 X1.915 Y-7.914 Z0.400 F5400 A53.18220; Infill 368 | G1 X2.475 Y-7.914 Z0.400 F5400 A53.20178; Connection 369 | G1 X-7.914 Y2.475 Z0.400 F5400 A53.71541; Infill 370 | M73 P88; Update Progress 371 | G1 X-7.914 Y3.035 Z0.400 F5400 A53.73498; Connection 372 | G1 X3.035 Y-7.914 Z0.400 F5400 A54.27630; Infill 373 | G1 X3.595 Y-7.914 Z0.400 F5400 A54.29588; Connection 374 | G1 X-7.914 Y3.595 Z0.400 F5400 A54.86488; Infill 375 | G1 X-7.914 Y4.155 Z0.400 F5400 A54.88446; Connection 376 | G1 X4.155 Y-7.914 Z0.400 F5400 A55.48115; Infill 377 | M73 P89; Update Progress 378 | G1 X4.715 Y-7.914 Z0.400 F5400 A55.50072; Connection 379 | G1 X-7.914 Y4.715 Z0.400 F5400 A56.12510; Infill 380 | G1 X-7.914 Y5.275 Z0.400 F5400 A56.14468; Connection 381 | G1 X5.275 Y-7.914 Z0.400 F5400 A56.79675; Infill 382 | M73 P90; Update Progress 383 | G1 X5.835 Y-7.914 Z0.400 F5400 A56.81633; Connection 384 | G1 X-7.914 Y5.835 Z0.400 F5400 A57.49608; Infill 385 | G1 X-7.914 Y6.395 Z0.400 F5400 A57.51566; Connection 386 | G1 X6.395 Y-7.914 Z0.400 F5400 A58.22310; Infill 387 | M73 P91; Update Progress 388 | G1 X6.955 Y-7.914 Z0.400 F5400 A58.24268; Connection 389 | G1 X-7.914 Y6.955 Z0.400 F5400 A58.97781; Infill 390 | G1 X-7.914 Y7.515 Z0.400 F5400 A58.99739; Connection 391 | G1 X7.515 Y-7.914 Z0.400 F5400 A59.76021; Infill 392 | M73 P92; Update Progress 393 | G1 X7.914 Y-7.753 Z0.400 F5400 A59.77525; Connection 394 | G1 X-7.753 Y7.914 Z0.400 F5400 A60.54984; Infill 395 | G1 X-7.193 Y7.914 Z0.400 F5400 A60.56942; Connection 396 | G1 X7.914 Y-7.193 Z0.400 F5400 A61.31631; Infill 397 | M73 P93; Update Progress 398 | G1 X7.914 Y-6.633 Z0.400 F5400 A61.33589; Connection 399 | G1 X-6.633 Y7.914 Z0.400 F5400 A62.05510; Infill 400 | G1 X-6.073 Y7.914 Z0.400 F5400 A62.07468; Connection 401 | G1 X7.914 Y-6.073 Z0.400 F5400 A62.76620; Infill 402 | M73 P94; Update Progress 403 | G1 X7.914 Y-5.513 Z0.400 F5400 A62.78578; Connection 404 | G1 X-5.513 Y7.914 Z0.400 F5400 A63.44961; Infill 405 | G1 X-4.953 Y7.914 Z0.400 F5400 A63.46919; Connection 406 | G1 X7.914 Y-4.953 Z0.400 F5400 A64.10533; Infill 407 | M73 P95; Update Progress 408 | G1 X7.914 Y-4.393 Z0.400 F5400 A64.12491; Connection 409 | G1 X-4.393 Y7.914 Z0.400 F5400 A64.73336; Infill 410 | G1 X-3.833 Y7.914 Z0.400 F5400 A64.75294; Connection 411 | G1 X7.914 Y-3.833 Z0.400 F5400 A65.33371; Infill 412 | G1 X7.914 Y-3.273 Z0.400 F5400 A65.35329; Connection 413 | G1 X-3.273 Y7.914 Z0.400 F5400 A65.90637; Infill 414 | M73 P96; Update Progress 415 | G1 X-2.713 Y7.914 Z0.400 F5400 A65.92595; Connection 416 | G1 X7.914 Y-2.713 Z0.400 F5400 A66.45134; Infill 417 | G1 X7.914 Y-2.153 Z0.400 F5400 A66.47092; Connection 418 | G1 X-2.153 Y7.914 Z0.400 F5400 A66.96862; Infill 419 | G1 X-1.593 Y7.914 Z0.400 F5400 A66.98820; Connection 420 | G1 X7.914 Y-1.593 Z0.400 F5400 A67.45821; Infill 421 | M73 P97; Update Progress 422 | G1 X7.914 Y-1.033 Z0.400 F5400 A67.47779; Connection 423 | G1 X-1.033 Y7.914 Z0.400 F5400 A67.92011; Infill 424 | G1 X-0.473 Y7.914 Z0.400 F5400 A67.93969; Connection 425 | G1 X7.914 Y-0.473 Z0.400 F5400 A68.35433; Infill 426 | G1 X7.914 Y0.087 Z0.400 F5400 A68.37391; Connection 427 | G1 X0.087 Y7.914 Z0.400 F5400 A68.76086; Infill 428 | M73 P98; Update Progress 429 | G1 X0.647 Y7.914 Z0.400 F5400 A68.78044; Connection 430 | G1 X7.914 Y0.647 Z0.400 F5400 A69.13970; Infill 431 | G1 X7.914 Y1.208 Z0.400 F5400 A69.15928; Connection 432 | G1 X1.208 Y7.914 Z0.400 F5400 A69.49085; Infill 433 | G1 X1.768 Y7.914 Z0.400 F5400 A69.51043; Connection 434 | G1 X7.914 Y1.768 Z0.400 F5400 A69.81431; Infill 435 | G1 X7.914 Y2.328 Z0.400 F5400 A69.83389; Connection 436 | G1 X2.328 Y7.914 Z0.400 F5400 A70.11009; Infill 437 | M73 P99; Update Progress 438 | G1 X2.888 Y7.914 Z0.400 F5400 A70.12967; Connection 439 | G1 X7.914 Y2.888 Z0.400 F5400 A70.37817; Infill 440 | G1 X7.914 Y3.448 Z0.400 F5400 A70.39775; Connection 441 | G1 X3.448 Y7.914 Z0.400 F5400 A70.61857; Infill 442 | G1 X4.008 Y7.914 Z0.400 F5400 A70.63815; Connection 443 | G1 X7.914 Y4.008 Z0.400 F5400 A70.83128; Infill 444 | G1 X7.914 Y4.568 Z0.400 F5400 A70.85086; Connection 445 | G1 X4.568 Y7.914 Z0.400 F5400 A71.01630; Infill 446 | G1 X5.128 Y7.914 Z0.400 F5400 A71.03588; Connection 447 | G1 X7.914 Y5.128 Z0.400 F5400 A71.17364; Infill 448 | G1 X7.914 Y5.688 Z0.400 F5400 A71.19321; Connection 449 | G1 X5.688 Y7.914 Z0.400 F5400 A71.30328; Infill 450 | G1 X6.248 Y7.914 Z0.400 F5400 A71.32286; Connection 451 | G1 X7.914 Y6.248 Z0.400 F5400 A71.40524; Infill 452 | G1 X7.914 Y6.808 Z0.400 F5400 A71.42482; Connection 453 | G1 X6.808 Y7.914 Z0.400 F5400 A71.47951; Infill 454 | G1 X7.368 Y7.914 Z0.400 F5400 A71.49909; Connection 455 | G1 X7.914 Y7.368 Z0.400 F5400 A71.52609; Infill 456 | M73 P100; Update Progress 457 | M127 T0; Disable Fan 458 | ; End of print 459 | G1 X7.914 Y7.368 Z0.400 F1500 A70.22609; Retract 460 | M127 T0 (Fan Off) 461 | M18 A B(Turn off A and B Steppers) 462 | G1 Z155 F900 463 | G162 X Y F2000 464 | M18 X Y Z(Turn off steppers after a build) 465 | M104 S0 T0 466 | M70 P5 (We <3 Making Things!) 467 | M72 P1 ( Play Ta-Da song ) 468 | M73 P100 469 | M137 (build end notification) 470 | -------------------------------------------------------------------------------- /sample_files/thin_hex_test_part.gcode: -------------------------------------------------------------------------------- 1 | M136 (enable build) 2 | M73 P0 3 | G162 X Y F2000(home XY axes maximum) 4 | G161 Z F900(home Z axis minimum) 5 | G92 X0 Y0 Z-5 A0 B0 (set Z to -5) 6 | G1 Z0.0 F900(move Z to '0') 7 | G161 Z F100(home Z axis minimum) 8 | M132 X Y Z A B (Recall stored home offsets for XYZAB axis) 9 | G92 X152 Y75 Z0 A0 B0 10 | G1 X-141 Y-74 Z40 F3300.0 (move to waiting position) 11 | G130 X20 Y20 A20 B20 (Lower stepper Vrefs while heating) 12 | M135 T0 13 | M104 S230 T0 14 | M133 T0 15 | G130 X127 Y127 A127 B127 (Set Stepper motor Vref to defaults) 16 | ; Makerbot Industries 17 | ; Miracle Grue 3.9.4 18 | ; This file contains digital fabrication directives 19 | ; in G-Code format for your 3D printer 20 | ; http://www.makerbot.com/support/makerware/documentation/slicer/ 21 | ; 22 | ; Right Toolhead Weight (grams): 0.0889037 23 | ; Right Toolhead Distance (mm): 29.1381 24 | ; Duration: 51.3445 seconds 25 | ; Active extruders in print: 0 26 | ; Chunk 0 27 | ; Lower Position 0 28 | ; Upper Position 0.2 29 | ; Thickness 0.2 30 | ; Width 0.4 31 | G1 X105.400 Y-74.000 Z0.270 F9000.000 (Extruder Prime Dry Move) 32 | G1 X-141 Y-74 Z0.270 F1800.000 E25.000 (Extruder Prime Start) 33 | G92 A0 B0 (Reset after prime) 34 | G1 Z0.000000 F1000 35 | G1 X-141.0 Y-74.0 Z0.0 F1000 E0.0 36 | G92 E0 37 | G1 X-141.000 Y-74.000 Z0.000 F1500 A-1.30000; Retract 38 | G1 X-141.000 Y-74.000 Z0.000 F3000; Retract 39 | G1 X-141.000 Y-74.000 Z0.200 F1380; Travel Move 40 | M73 P0; Update Progress 41 | G1 X-5.605 Y-3.934 Z0.200 F9000; Travel Move 42 | M73 P3; Update Progress 43 | G1 X-5.605 Y-3.934 Z0.200 F1500 A0.00000; Restart 44 | G1 X-0.407 Y-6.860 Z0.200 F1800 A0.20853; Inset 45 | M73 P4; Update Progress 46 | G1 X0.558 Y-6.849 Z0.200 F1800 A0.24226; Inset 47 | G1 X5.690 Y-3.809 Z0.200 F1800 A0.45079; Inset 48 | G1 X6.162 Y-2.968 Z0.200 F1800 A0.48450; Inset 49 | G1 X6.096 Y2.994 Z0.200 F1800 A0.69296; Inset 50 | M73 P5; Update Progress 51 | G1 X5.605 Y3.824 Z0.200 F1800 A0.72667; Inset 52 | G1 X0.407 Y6.750 Z0.200 F1800 A0.93520; Inset 53 | M73 P6; Update Progress 54 | G1 X-0.558 Y6.739 Z0.200 F1800 A0.96893; Inset 55 | G1 X-5.690 Y3.699 Z0.200 F1800 A1.17746; Inset 56 | M73 P7; Update Progress 57 | G1 X-6.162 Y2.858 Z0.200 F1800 A1.21118; Inset 58 | G1 X-6.096 Y-3.104 Z0.200 F1800 A1.41963; Inset 59 | G1 X-5.605 Y-3.934 Z0.200 F1800 A1.45334; Inset 60 | G1 X-5.605 Y-3.934 Z0.200 F1500 A0.15334; Retract 61 | G1 X-5.605 Y-3.934 Z0.200 F3000; Retract 62 | G1 X-5.315 Y-3.638 Z0.200 F9000; Travel Move 63 | G1 X-5.315 Y-3.638 Z0.200 F1500 A1.45334; Restart 64 | G1 X-0.304 Y-6.459 Z0.200 F1800 A1.65437; Inset 65 | M73 P8; Update Progress 66 | G1 X0.446 Y-6.450 Z0.200 F1800 A1.68061; Inset 67 | G1 X5.393 Y-3.519 Z0.200 F1800 A1.88165; Inset 68 | M73 P9; Update Progress 69 | G1 X5.761 Y-2.865 Z0.200 F1800 A1.90787; Inset 70 | G1 X5.697 Y2.883 Z0.200 F1800 A2.10883; Inset 71 | M73 P10; Update Progress 72 | G1 X5.315 Y3.528 Z0.200 F1800 A2.13505; Inset 73 | G1 X0.304 Y6.349 Z0.200 F1800 A2.33608; Inset 74 | G1 X-0.446 Y6.340 Z0.200 F1800 A2.36232; Inset 75 | G1 X-5.393 Y3.409 Z0.200 F1800 A2.56335; Inset 76 | M73 P11; Update Progress 77 | G1 X-5.761 Y2.755 Z0.200 F1800 A2.58958; Inset 78 | G1 X-5.697 Y-2.993 Z0.200 F1800 A2.79054; Inset 79 | M73 P12; Update Progress 80 | G1 X-5.315 Y-3.638 Z0.200 F1800 A2.81676; Inset 81 | G1 X-5.315 Y-3.638 Z0.200 F1500 A1.51676; Retract 82 | G1 X-5.315 Y-3.638 Z0.200 F3000; Retract 83 | G1 X-5.026 Y-3.342 Z0.200 F9000; Travel Move 84 | G1 X-5.026 Y-3.342 Z0.200 F1500 A2.81676; Restart 85 | G1 X-0.201 Y-6.058 Z0.200 F1800 A3.01030; Inset 86 | G1 X0.335 Y-6.052 Z0.200 F1800 A3.02904; Inset 87 | G1 X5.097 Y-3.230 Z0.200 F1800 A3.22257; Inset 88 | M73 P13; Update Progress 89 | G1 X5.360 Y-2.763 Z0.200 F1800 A3.24131; Inset 90 | G1 X5.299 Y2.771 Z0.200 F1800 A3.43477; Inset 91 | M73 P14; Update Progress 92 | G1 X5.026 Y3.232 Z0.200 F1800 A3.45350; Inset 93 | G1 X0.201 Y5.948 Z0.200 F1800 A3.64704; Inset 94 | G1 X-0.335 Y5.942 Z0.200 F1800 A3.66578; Inset 95 | G1 X-5.097 Y3.120 Z0.200 F1800 A3.85932; Inset 96 | M73 P15; Update Progress 97 | G1 X-5.360 Y2.653 Z0.200 F1800 A3.87805; Inset 98 | G1 X-5.299 Y-2.881 Z0.200 F1800 A4.07152; Inset 99 | M73 P16; Update Progress 100 | G1 X-5.026 Y-3.342 Z0.200 F1800 A4.09025; Inset 101 | G1 X-5.026 Y-3.342 Z0.200 F1500 A2.79025; Retract 102 | G1 X-5.026 Y-3.342 Z0.200 F3000; Retract 103 | G1 X-4.736 Y-3.046 Z0.200 F9000; Travel Move 104 | G1 X-4.736 Y-3.046 Z0.200 F1500 A4.09025; Restart 105 | G1 X-0.099 Y-5.656 Z0.200 F1800 A4.27629; Inset 106 | G1 X0.223 Y-5.653 Z0.200 F1800 A4.28754; Inset 107 | G1 X4.801 Y-2.940 Z0.200 F1800 A4.47358; Inset 108 | M73 P17; Update Progress 109 | G1 X4.959 Y-2.660 Z0.200 F1800 A4.48481; Inset 110 | G1 X4.900 Y2.659 Z0.200 F1800 A4.67079; Inset 111 | M73 P18; Update Progress 112 | G1 X4.736 Y2.936 Z0.200 F1800 A4.68203; Inset 113 | G1 X0.099 Y5.546 Z0.200 F1800 A4.86807; Inset 114 | G1 X-0.223 Y5.543 Z0.200 F1800 A4.87932; Inset 115 | G1 X-4.801 Y2.830 Z0.200 F1800 A5.06536; Inset 116 | M73 P19; Update Progress 117 | G1 X-4.959 Y2.550 Z0.200 F1800 A5.07660; Inset 118 | G1 X-4.900 Y-2.769 Z0.200 F1800 A5.26257; Inset 119 | M73 P20; Update Progress 120 | G1 X-4.736 Y-3.046 Z0.200 F1800 A5.27381; Inset 121 | G1 X-4.736 Y-3.046 Z0.200 F1500 A3.97381; Retract 122 | G1 X-4.736 Y-3.046 Z0.200 F3000; Retract 123 | G1 X-4.500 Y-2.720 Z0.200 F9000; Travel Move 124 | G1 X-4.500 Y-2.720 Z0.200 F1500 A5.27381; Restart 125 | G1 X0.058 Y-5.286 Z0.200 F1800 A5.45668; Inset 126 | G1 X4.558 Y-2.619 Z0.200 F1800 A5.63956; Inset 127 | M73 P21; Update Progress 128 | G1 X4.500 Y2.610 Z0.200 F1800 A5.82236; Inset 129 | G1 X-0.058 Y5.176 Z0.200 F1800 A6.00524; Inset 130 | M73 P22; Update Progress 131 | G1 X-4.558 Y2.509 Z0.200 F1800 A6.18811; Inset 132 | G1 X-4.500 Y-2.720 Z0.200 F1800 A6.37092; Inset 133 | M73 P23; Update Progress 134 | G1 X-4.500 Y-2.720 Z0.200 F1500 A5.07092; Retract 135 | G1 X-4.500 Y-2.720 Z0.200 F3000; Retract 136 | G1 X-8.200 Y-8.200 Z0.200 F9000; Travel Move 137 | G1 X-8.200 Y-8.200 Z0.200 F1500 A6.37092; Restart 138 | G1 X-8.200 Y8.200 Z0.200 F1800 A6.94426; Inset 139 | M73 P25; Update Progress 140 | G1 X8.200 Y8.200 Z0.200 F1800 A7.51760; Inset 141 | M73 P27; Update Progress 142 | G1 X8.200 Y-8.200 Z0.200 F1800 A8.09095; Inset 143 | M73 P29; Update Progress 144 | G1 X-8.200 Y-8.200 Z0.200 F1800 A8.66429; Inset 145 | M73 P30; Update Progress 146 | G1 X-8.200 Y-8.200 Z0.200 F1500 A7.36429; Retract 147 | G1 X-8.200 Y-8.200 Z0.200 F3000; Retract 148 | G1 X-8.600 Y-8.600 Z0.200 F9000; Travel Move 149 | G1 X-8.600 Y-8.600 Z0.200 F1500 A8.66429; Restart 150 | G1 X-8.600 Y8.600 Z0.200 F1800 A9.26560; Inset 151 | M73 P32; Update Progress 152 | G1 X8.600 Y8.600 Z0.200 F1800 A9.86691; Inset 153 | M73 P34; Update Progress 154 | G1 X8.600 Y-8.600 Z0.200 F1800 A10.46822; Inset 155 | M73 P36; Update Progress 156 | G1 X-8.600 Y-8.600 Z0.200 F1800 A11.06954; Inset 157 | M73 P38; Update Progress 158 | G1 X-8.600 Y-8.600 Z0.200 F1500 A9.76954; Retract 159 | G1 X-8.600 Y-8.600 Z0.200 F3000; Retract 160 | G1 X-9.000 Y-9.000 Z0.200 F9000; Travel Move 161 | G1 X-9.000 Y-9.000 Z0.200 F1500 A11.06954; Restart 162 | G1 X-9.000 Y9.000 Z0.200 F1800 A11.69881; Inset 163 | M73 P40; Update Progress 164 | G1 X9.000 Y9.000 Z0.200 F1800 A12.32809; Inset 165 | M73 P42; Update Progress 166 | G1 X9.000 Y-9.000 Z0.200 F1800 A12.95737; Inset 167 | M73 P44; Update Progress 168 | G1 X-9.000 Y-9.000 Z0.200 F1800 A13.58665; Inset 169 | M73 P46; Update Progress 170 | G1 X-9.000 Y-9.000 Z0.200 F1500 A12.28665; Retract 171 | G1 X-9.000 Y-9.000 Z0.200 F3000; Retract 172 | G1 X-9.400 Y-9.400 Z0.200 F9000; Travel Move 173 | G1 X-9.400 Y-9.400 Z0.200 F1500 A13.58665; Restart 174 | G1 X-9.400 Y9.400 Z0.200 F1800 A14.24390; Inset 175 | M73 P48; Update Progress 176 | G1 X9.400 Y9.400 Z0.200 F1800 A14.90114; Inset 177 | M73 P50; Update Progress 178 | G1 X9.400 Y-9.400 Z0.200 F1800 A15.55839; Inset 179 | M73 P52; Update Progress 180 | G1 X-9.400 Y-9.400 Z0.200 F1800 A16.21564; Inset 181 | M73 P54; Update Progress 182 | G1 X-9.400 Y-9.400 Z0.200 F1500 A14.91564; Retract 183 | G1 X-9.400 Y-9.400 Z0.200 F3000; Retract 184 | G1 X-9.800 Y-9.800 Z0.200 F9000; Travel Move 185 | G1 X-9.800 Y-9.800 Z0.200 F1500 A16.21564; Restart 186 | G1 X-9.800 Y9.800 Z0.200 F1800 A16.90085; Inset 187 | M73 P56; Update Progress 188 | G1 X9.800 Y9.800 Z0.200 F1800 A17.58607; Inset 189 | M73 P59; Update Progress 190 | G1 X9.800 Y-9.800 Z0.200 F1800 A18.27128; Inset 191 | M73 P61; Update Progress 192 | G1 X-9.800 Y-9.800 Z0.200 F1800 A18.95650; Inset 193 | M73 P63; Update Progress 194 | G1 X-9.800 Y-9.800 Z0.200 F1500 A17.65650; Retract 195 | G1 X-9.800 Y-9.800 Z0.200 F3000; Retract 196 | G1 X-7.753 Y-7.914 Z0.200 F9000; Travel Move 197 | G1 X-7.753 Y-7.914 Z0.200 F1500 A18.95650; Restart 198 | G1 X-4.643 Y-4.804 Z0.200 F1800 A19.11027; Infill 199 | M73 P64; Update Progress 200 | G1 X-4.284 Y-5.005 Z0.200 F1800 A19.12464; Connection 201 | G1 X-7.193 Y-7.914 Z0.200 F1800 A19.26844; Infill 202 | G1 X-6.633 Y-7.914 Z0.200 F1800 A19.28802; Connection 203 | G1 X-3.926 Y-5.207 Z0.200 F1800 A19.42184; Infill 204 | M73 P65; Update Progress 205 | G1 X-3.568 Y-5.409 Z0.200 F1800 A19.43622; Connection 206 | G1 X-6.073 Y-7.914 Z0.200 F1800 A19.56007; Infill 207 | G1 X-5.513 Y-7.914 Z0.200 F1800 A19.57965; Connection 208 | G1 X-3.209 Y-5.611 Z0.200 F1800 A19.69353; Infill 209 | G1 X-2.851 Y-5.812 Z0.200 F1800 A19.70791; Connection 210 | G1 X-4.953 Y-7.914 Z0.200 F1800 A19.81182; Infill 211 | M73 P66; Update Progress 212 | G1 X-4.393 Y-7.914 Z0.200 F1800 A19.83139; Connection 213 | G1 X-2.493 Y-6.014 Z0.200 F1800 A19.92533; Infill 214 | G1 X-2.134 Y-6.216 Z0.200 F1800 A19.93970; Connection 215 | G1 X-3.833 Y-7.914 Z0.200 F1800 A20.02367; Infill 216 | G1 X-3.273 Y-7.914 Z0.200 F1800 A20.04325; Connection 217 | G1 X-1.776 Y-6.417 Z0.200 F1800 A20.11724; Infill 218 | M73 P67; Update Progress 219 | G1 X-1.418 Y-6.619 Z0.200 F1800 A20.13161; Connection 220 | G1 X-2.713 Y-7.914 Z0.200 F1800 A20.19563; Infill 221 | G1 X-2.153 Y-7.914 Z0.200 F1800 A20.21521; Connection 222 | G1 X-1.060 Y-6.821 Z0.200 F1800 A20.26926; Infill 223 | G1 X-0.701 Y-7.023 Z0.200 F1800 A20.28363; Connection 224 | G1 X-1.593 Y-7.914 Z0.200 F1800 A20.32770; Infill 225 | G1 X-1.033 Y-7.914 Z0.200 F1800 A20.34728; Connection 226 | G1 X-0.263 Y-7.144 Z0.200 F1800 A20.38533; Infill 227 | M73 P68; Update Progress 228 | G1 X0.303 Y-7.138 Z0.200 F1800 A20.40513; Connection 229 | G1 X-0.473 Y-7.914 Z0.200 F1800 A20.44349; Infill 230 | G1 X0.087 Y-7.914 Z0.200 F1800 A20.46307; Connection 231 | G1 X1.200 Y-6.801 Z0.200 F1800 A20.51809; Infill 232 | G1 X0.647 Y-7.914 Z0.200 F1800 A20.56153; Connection 233 | G1 X2.575 Y-5.987 Z0.200 F1800 A20.65682; Infill 234 | G1 X3.949 Y-5.172 Z0.200 F1800 A20.71267; Connection 235 | M73 P69; Update Progress 236 | G1 X1.207 Y-7.914 Z0.200 F1800 A20.84822; Infill 237 | G1 X1.768 Y-7.914 Z0.200 F1800 A20.86780; Connection 238 | G1 X7.914 Y-1.768 Z0.200 F1800 A21.17169; Infill 239 | M73 P70; Update Progress 240 | G1 X7.914 Y-2.328 Z0.200 F1800 A21.19127; Connection 241 | G1 X2.328 Y-7.914 Z0.200 F1800 A21.46746; Infill 242 | M73 P71; Update Progress 243 | G1 X2.888 Y-7.914 Z0.200 F1800 A21.48704; Connection 244 | G1 X7.914 Y-2.888 Z0.200 F1800 A21.73555; Infill 245 | M73 P72; Update Progress 246 | G1 X7.914 Y-3.448 Z0.200 F1800 A21.75513; Connection 247 | G1 X3.448 Y-7.914 Z0.200 F1800 A21.97595; Infill 248 | M73 P73; Update Progress 249 | G1 X4.008 Y-7.914 Z0.200 F1800 A21.99553; Connection 250 | G1 X7.914 Y-4.008 Z0.200 F1800 A22.18866; Infill 251 | G1 X7.914 Y-4.568 Z0.200 F1800 A22.20824; Connection 252 | G1 X4.568 Y-7.914 Z0.200 F1800 A22.37369; Infill 253 | M73 P74; Update Progress 254 | G1 X5.128 Y-7.914 Z0.200 F1800 A22.39327; Connection 255 | G1 X7.914 Y-5.128 Z0.200 F1800 A22.53102; Infill 256 | G1 X7.914 Y-5.688 Z0.200 F1800 A22.55060; Connection 257 | G1 X5.688 Y-7.914 Z0.200 F1800 A22.66067; Infill 258 | M73 P75; Update Progress 259 | G1 X6.248 Y-7.914 Z0.200 F1800 A22.68025; Connection 260 | G1 X7.914 Y-6.248 Z0.200 F1800 A22.76263; Infill 261 | G1 X7.914 Y-6.808 Z0.200 F1800 A22.78221; Connection 262 | G1 X6.808 Y-7.914 Z0.200 F1800 A22.83690; Infill 263 | G1 X7.368 Y-7.914 Z0.200 F1800 A22.85648; Connection 264 | G1 X7.914 Y-7.368 Z0.200 F1800 A22.88348; Infill 265 | G1 X7.914 Y-7.368 Z0.200 F1500 A21.58348; Retract 266 | G1 X7.914 Y-7.368 Z0.200 F3000; Retract 267 | G1 X6.445 Y-2.676 Z0.200 F9000; Travel Move 268 | M73 P76; Update Progress 269 | G1 X6.445 Y-2.676 Z0.200 F1500 A22.88348; Restart 270 | G1 X7.914 Y-1.207 Z0.200 F1800 A22.95610; Infill 271 | G1 X7.914 Y-0.647 Z0.200 F1800 A22.97568; Connection 272 | G1 X6.439 Y-2.122 Z0.200 F1800 A23.04860; Infill 273 | G1 X6.433 Y-1.569 Z0.200 F1800 A23.06797; Connection 274 | G1 X7.914 Y-0.087 Z0.200 F1800 A23.14120; Infill 275 | G1 X7.914 Y0.473 Z0.200 F1800 A23.16078; Connection 276 | G1 X6.427 Y-1.015 Z0.200 F1800 A23.23431; Infill 277 | M73 P77; Update Progress 278 | G1 X6.421 Y-0.461 Z0.200 F1800 A23.25368; Connection 279 | G1 X7.914 Y1.033 Z0.200 F1800 A23.32752; Infill 280 | G1 X7.914 Y1.593 Z0.200 F1800 A23.34710; Connection 281 | G1 X6.414 Y0.093 Z0.200 F1800 A23.42124; Infill 282 | G1 X6.408 Y0.647 Z0.200 F1800 A23.44060; Connection 283 | G1 X7.914 Y2.153 Z0.200 F1800 A23.51505; Infill 284 | M73 P78; Update Progress 285 | G1 X7.914 Y2.713 Z0.200 F1800 A23.53463; Connection 286 | G1 X6.402 Y1.201 Z0.200 F1800 A23.60938; Infill 287 | G1 X6.396 Y1.755 Z0.200 F1800 A23.62875; Connection 288 | G1 X7.914 Y3.273 Z0.200 F1800 A23.70380; Infill 289 | G1 X7.914 Y3.833 Z0.200 F1800 A23.72338; Connection 290 | G1 X6.390 Y2.308 Z0.200 F1800 A23.79874; Infill 291 | G1 X6.384 Y2.862 Z0.200 F1800 A23.81811; Connection 292 | G1 X7.914 Y4.393 Z0.200 F1800 A23.89377; Infill 293 | M73 P79; Update Progress 294 | G1 X7.914 Y4.953 Z0.200 F1800 A23.91335; Connection 295 | G1 X6.252 Y3.291 Z0.200 F1800 A23.99550; Infill 296 | G1 X6.044 Y3.643 Z0.200 F1800 A24.00979; Connection 297 | G1 X7.914 Y5.513 Z0.200 F1800 A24.10223; Infill 298 | G1 X7.914 Y6.073 Z0.200 F1800 A24.12181; Connection 299 | G1 X5.836 Y3.995 Z0.200 F1800 A24.22455; Infill 300 | M73 P80; Update Progress 301 | G1 X5.495 Y4.214 Z0.200 F1800 A24.23872; Connection 302 | G1 X7.914 Y6.633 Z0.200 F1800 A24.35831; Infill 303 | G1 X7.914 Y7.193 Z0.200 F1800 A24.37789; Connection 304 | G1 X5.137 Y4.416 Z0.200 F1800 A24.51520; Infill 305 | M73 P81; Update Progress 306 | G1 X4.778 Y4.617 Z0.200 F1800 A24.52958; Connection 307 | G1 X7.914 Y7.753 Z0.200 F1800 A24.68461; Infill 308 | G1 X7.515 Y7.914 Z0.200 F1800 A24.69965; Connection 309 | G1 X4.420 Y4.819 Z0.200 F1800 A24.85266; Infill 310 | M73 P82; Update Progress 311 | G1 X4.062 Y5.021 Z0.200 F1800 A24.86704; Connection 312 | G1 X6.955 Y7.914 Z0.200 F1800 A25.01008; Infill 313 | G1 X6.395 Y7.914 Z0.200 F1800 A25.02966; Connection 314 | G1 X3.703 Y5.222 Z0.200 F1800 A25.16273; Infill 315 | M73 P83; Update Progress 316 | G1 X3.345 Y5.424 Z0.200 F1800 A25.17711; Connection 317 | G1 X5.835 Y7.914 Z0.200 F1800 A25.30021; Infill 318 | G1 X5.275 Y7.914 Z0.200 F1800 A25.31978; Connection 319 | G1 X2.987 Y5.626 Z0.200 F1800 A25.43291; Infill 320 | M73 P84; Update Progress 321 | G1 X2.628 Y5.828 Z0.200 F1800 A25.44729; Connection 322 | G1 X4.715 Y7.914 Z0.200 F1800 A25.55044; Infill 323 | G1 X4.155 Y7.914 Z0.200 F1800 A25.57002; Connection 324 | G1 X2.270 Y6.029 Z0.200 F1800 A25.66320; Infill 325 | G1 X1.912 Y6.231 Z0.200 F1800 A25.67758; Connection 326 | G1 X3.595 Y7.914 Z0.200 F1800 A25.76078; Infill 327 | M73 P85; Update Progress 328 | G1 X3.035 Y7.914 Z0.200 F1800 A25.78036; Connection 329 | G1 X1.553 Y6.433 Z0.200 F1800 A25.85360; Infill 330 | G1 X1.195 Y6.634 Z0.200 F1800 A25.86797; Connection 331 | G1 X2.475 Y7.914 Z0.200 F1800 A25.93124; Infill 332 | G1 X1.915 Y7.914 Z0.200 F1800 A25.95082; Connection 333 | G1 X0.837 Y6.836 Z0.200 F1800 A26.00411; Infill 334 | G1 X0.470 Y7.029 Z0.200 F1800 A26.01861; Connection 335 | G1 X1.355 Y7.914 Z0.200 F1800 A26.06236; Infill 336 | M73 P86; Update Progress 337 | G1 X0.795 Y7.914 Z0.200 F1800 A26.08194; Connection 338 | G1 X-0.089 Y7.030 Z0.200 F1800 A26.12562; Infill 339 | G1 X-0.680 Y6.999 Z0.200 F1800 A26.14632; Connection 340 | G1 X0.235 Y7.914 Z0.200 F1800 A26.19155; Infill 341 | G1 X-0.325 Y7.914 Z0.200 F1800 A26.21113; Connection 342 | G1 X-2.055 Y6.185 Z0.200 F1800 A26.29662; Infill 343 | G1 X-3.429 Y5.370 Z0.200 F1800 A26.35247; Connection 344 | G1 X-0.885 Y7.914 Z0.200 F1800 A26.47823; Infill 345 | M73 P87; Update Progress 346 | G1 X-1.445 Y7.914 Z0.200 F1800 A26.49781; Connection 347 | G1 X-4.803 Y4.556 Z0.200 F1800 A26.66383; Infill 348 | G1 X-7.914 Y2.005 Z0.200 F1800 A26.80445; Connection 349 | M73 P88; Update Progress 350 | G1 X-2.005 Y7.914 Z0.200 F1800 A27.09657; Infill 351 | M73 P89; Update Progress 352 | G1 X-2.566 Y7.914 Z0.200 F1800 A27.11615; Connection 353 | G1 X-7.914 Y2.566 Z0.200 F1800 A27.38059; Infill 354 | M73 P90; Update Progress 355 | G1 X-7.914 Y3.126 Z0.200 F1800 A27.40016; Connection 356 | G1 X-3.126 Y7.914 Z0.200 F1800 A27.63691; Infill 357 | M73 P91; Update Progress 358 | G1 X-3.686 Y7.914 Z0.200 F1800 A27.65649; Connection 359 | G1 X-7.914 Y3.686 Z0.200 F1800 A27.86554; Infill 360 | G1 X-7.914 Y4.246 Z0.200 F1800 A27.88512; Connection 361 | G1 X-4.246 Y7.914 Z0.200 F1800 A28.06649; Infill 362 | M73 P92; Update Progress 363 | G1 X-4.806 Y7.914 Z0.200 F1800 A28.08607; Connection 364 | G1 X-7.914 Y4.806 Z0.200 F1800 A28.23975; Infill 365 | G1 X-7.914 Y5.366 Z0.200 F1800 A28.25932; Connection 366 | M73 P93; Update Progress 367 | G1 X-5.366 Y7.914 Z0.200 F1800 A28.38531; Infill 368 | G1 X-5.926 Y7.914 Z0.200 F1800 A28.40489; Connection 369 | G1 X-7.914 Y5.926 Z0.200 F1800 A28.50320; Infill 370 | G1 X-7.914 Y6.486 Z0.200 F1800 A28.52277; Connection 371 | G1 X-6.486 Y7.914 Z0.200 F1800 A28.59339; Infill 372 | M73 P94; Update Progress 373 | G1 X-7.046 Y7.914 Z0.200 F1800 A28.61297; Connection 374 | G1 X-7.914 Y7.046 Z0.200 F1800 A28.65589; Infill 375 | G1 X-7.914 Y7.606 Z0.200 F1800 A28.67547; Connection 376 | G1 X-7.606 Y7.914 Z0.200 F1800 A28.69071; Infill 377 | G1 X-7.606 Y7.914 Z0.200 F1500 A27.39071; Retract 378 | G1 X-7.606 Y7.914 Z0.200 F3000; Retract 379 | G1 X-6.442 Y2.917 Z0.200 F9000; Travel Move 380 | G1 X-6.442 Y2.917 Z0.200 F1500 A28.69071; Restart 381 | G1 X-7.914 Y1.445 Z0.200 F1800 A28.76346; Infill 382 | G1 X-7.914 Y0.885 Z0.200 F1800 A28.78304; Connection 383 | G1 X-6.443 Y2.357 Z0.200 F1800 A28.85578; Infill 384 | M73 P95; Update Progress 385 | G1 X-6.437 Y1.803 Z0.200 F1800 A28.87514; Connection 386 | G1 X-7.914 Y0.325 Z0.200 F1800 A28.94818; Infill 387 | G1 X-7.914 Y-0.235 Z0.200 F1800 A28.96776; Connection 388 | G1 X-6.430 Y1.249 Z0.200 F1800 A29.04111; Infill 389 | G1 X-6.424 Y0.695 Z0.200 F1800 A29.06047; Connection 390 | G1 X-7.914 Y-0.795 Z0.200 F1800 A29.13412; Infill 391 | G1 X-7.914 Y-1.355 Z0.200 F1800 A29.15370; Connection 392 | G1 X-6.418 Y0.141 Z0.200 F1800 A29.22766; Infill 393 | M73 P96; Update Progress 394 | G1 X-6.412 Y-0.413 Z0.200 F1800 A29.24702; Connection 395 | G1 X-7.914 Y-1.915 Z0.200 F1800 A29.32128; Infill 396 | G1 X-7.914 Y-2.475 Z0.200 F1800 A29.34086; Connection 397 | G1 X-6.406 Y-0.967 Z0.200 F1800 A29.41542; Infill 398 | G1 X-6.400 Y-1.520 Z0.200 F1800 A29.43478; Connection 399 | G1 X-7.914 Y-3.035 Z0.200 F1800 A29.50965; Infill 400 | M73 P97; Update Progress 401 | G1 X-7.914 Y-3.595 Z0.200 F1800 A29.52923; Connection 402 | G1 X-6.394 Y-2.074 Z0.200 F1800 A29.60440; Infill 403 | G1 X-6.387 Y-2.628 Z0.200 F1800 A29.62377; Connection 404 | G1 X-7.914 Y-4.155 Z0.200 F1800 A29.69924; Infill 405 | G1 X-7.914 Y-4.715 Z0.200 F1800 A29.71882; Connection 406 | G1 X-6.373 Y-3.174 Z0.200 F1800 A29.79499; Infill 407 | G1 X-6.174 Y-3.535 Z0.200 F1800 A29.80939; Connection 408 | M73 P98; Update Progress 409 | G1 X-7.914 Y-5.275 Z0.200 F1800 A29.89543; Infill 410 | G1 X-7.914 Y-5.835 Z0.200 F1800 A29.91501; Connection 411 | G1 X-5.965 Y-3.886 Z0.200 F1800 A30.01135; Infill 412 | G1 X-5.718 Y-4.199 Z0.200 F1800 A30.02529; Connection 413 | G1 X-7.914 Y-6.395 Z0.200 F1800 A30.13387; Infill 414 | M73 P99; Update Progress 415 | G1 X-7.914 Y-6.955 Z0.200 F1800 A30.15345; Connection 416 | G1 X-5.359 Y-4.400 Z0.200 F1800 A30.27975; Infill 417 | G1 X-5.001 Y-4.602 Z0.200 F1800 A30.29412; Connection 418 | G1 X-7.914 Y-7.515 Z0.200 F1800 A30.43814; Infill 419 | M73 P100; Update Progress 420 | ; End of print 421 | G1 X-7.914 Y-7.515 Z0.200 F1500 A29.13814; Retract 422 | M127 T0 (Fan Off) 423 | M18 A B(Turn off A and B Steppers) 424 | G1 Z155 F900 425 | G162 X Y F2000 426 | M18 X Y Z(Turn off steppers after a build) 427 | M104 S0 T0 428 | M70 P5 (We <3 Making Things!) 429 | M72 P1 ( Play Ta-Da song ) 430 | M73 P100 431 | M137 (build end notification) 432 | -------------------------------------------------------------------------------- /sample_output/gitkeepdir.txt: -------------------------------------------------------------------------------- 1 | sadfsa -------------------------------------------------------------------------------- /sliceViewGTK/DebugViewCanvas.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using SkiaSharp; 4 | using System.IO; 5 | using g3; 6 | using gs; 7 | 8 | namespace SliceViewer 9 | { 10 | public class DebugViewCanvas : PanZoomCanvas2D 11 | { 12 | public List Graphs = new List(); 13 | public List GPolygons = new List(); 14 | public Dictionary Colors = new Dictionary(); 15 | int timestamp = 0; 16 | 17 | Dictionary PathCache = new Dictionary(); 18 | 19 | public DebugViewCanvas() 20 | { 21 | } 22 | 23 | 24 | public void AddGraph(DGraph2 graph, Colorf color) { 25 | Graphs.Add(graph); 26 | Colors.Add(graph, color); 27 | increment_timestamp(); 28 | } 29 | 30 | public void AddPolygon(GeneralPolygon2d poly, Colorf color) 31 | { 32 | GPolygons.Add(poly); 33 | Colors.Add(poly, color); 34 | increment_timestamp(); 35 | } 36 | 37 | void increment_timestamp() { 38 | timestamp++; 39 | PathCache.Clear(); 40 | QueueDraw(); 41 | } 42 | 43 | 44 | AxisAlignedBox2d cachedBounds; 45 | int boundsTimestamp = -1; 46 | 47 | protected override AxisAlignedBox2d DrawingBounds { 48 | get { 49 | if ( boundsTimestamp != timestamp ) { 50 | cachedBounds = AxisAlignedBox2d.Empty; 51 | foreach (var g in Graphs) 52 | cachedBounds.Contain(g.GetBounds()); 53 | foreach (var gp in GPolygons) 54 | cachedBounds.Contain(gp.Bounds); 55 | boundsTimestamp = timestamp; 56 | } 57 | return cachedBounds; 58 | } 59 | } 60 | 61 | 62 | 63 | protected override void DrawScene(SKCanvas canvas, Func ViewTransformF) 64 | { 65 | Random jitter = new Random(313377); 66 | Func jitterF = () => { return Vector2d.Zero; }; 67 | //{ return 0.1 * new Vector2d(jitter.NextDouble(), jitter.NextDouble()); }; 68 | 69 | canvas.Clear(SkiaUtil.Color(255, 255, 255, 255)); 70 | 71 | 72 | Func SceneToSkiaF = (v) => { 73 | Vector2f p = ViewTransformF(v); 74 | return new SKPoint(p.x, p.y); 75 | }; 76 | 77 | 78 | using (var paint = new SKPaint()) { 79 | paint.IsAntialias = true; 80 | 81 | paint.StrokeWidth = 1; 82 | paint.Style = SKPaintStyle.Stroke; 83 | 84 | foreach (var g in GPolygons) 85 | DrawPolygon(canvas, paint, g, SceneToSkiaF); 86 | foreach (var g in Graphs) 87 | DrawGraph(canvas, paint, g, SceneToSkiaF); 88 | } 89 | } 90 | 91 | 92 | 93 | void DrawPolygon(SKCanvas canvas, SKPaint paint, GeneralPolygon2d poly, Func mapF) 94 | { 95 | Colorf color = Colorf.Red; 96 | if (Colors.ContainsKey(poly)) 97 | color = Colors[poly]; 98 | paint.Color = SkiaUtil.Color(color); 99 | 100 | SKPath path = SkiaUtil.ToSKPath(poly, mapF); 101 | paint.StrokeWidth = 2; 102 | canvas.DrawPath(path, paint); 103 | 104 | //paint.Color = SKColors.Orange; 105 | paint.StrokeWidth = 1; 106 | foreach (Vector2d v in poly.AllVerticesItr()) { 107 | SKPoint c = mapF(v); 108 | canvas.DrawCircle(c.X, c.Y, 3.0f, paint); 109 | } 110 | } 111 | 112 | 113 | 114 | void DrawGraph(SKCanvas canvas, SKPaint paint, DGraph2 graph, Func mapF) { 115 | Colorf color = Colorf.Red; 116 | if (Colors.ContainsKey(graph)) 117 | color = Colors[graph]; 118 | paint.Color = SkiaUtil.Color(color); 119 | 120 | SKPath path = SkiaUtil.ToSKPath(graph, mapF); 121 | paint.StrokeWidth = 2; 122 | canvas.DrawPath(path, paint); 123 | 124 | paint.StrokeWidth = 1; 125 | //paint.Color = SKColors.Black; 126 | foreach (Vector2d v in graph.Vertices()) { 127 | SKPoint c = mapF(v); 128 | canvas.DrawCircle(c.X, c.Y, 3.0f, paint); 129 | } 130 | } 131 | 132 | 133 | 134 | 135 | 136 | public static void compute_distance_image() 137 | { 138 | DMesh3 mesh = StandardMeshReader.ReadMesh("c:\\scratch\\remesh.obj"); 139 | MeshBoundaryLoops loops = new MeshBoundaryLoops(mesh); 140 | DCurve3 curve = loops[0].ToCurve(); 141 | Polygon2d poly = new Polygon2d(); 142 | foreach (Vector3d v in curve.Vertices) 143 | poly.AppendVertex(v.xy); 144 | int N = 1024; 145 | double cellsize = poly.Bounds.MaxDim / (double)N; 146 | Vector2d o = poly.Bounds.Min; 147 | o -= 4 * cellsize * Vector2d.One; 148 | N += 8; 149 | 150 | ShiftGridIndexer2 indexer = new ShiftGridIndexer2(poly.Bounds.Min, cellsize); 151 | 152 | double[] df = new double[N * N]; 153 | double maxd = 0; 154 | for (int yi = 0; yi < N; ++yi) { 155 | for (int xi = 0; xi < N; ++xi) { 156 | Vector2d p = indexer.FromGrid(new Vector2i(xi, yi)); 157 | double d = Math.Sqrt(poly.DistanceSquared(p)); 158 | df[yi * N + xi] = d; 159 | maxd = Math.Max(d, maxd); 160 | } 161 | } 162 | 163 | SKBitmap bmp = new SKBitmap(N, N); 164 | for (int yi = 0; yi < N; ++yi) { 165 | for (int xi = 0; xi < N; ++xi) { 166 | double d = df[yi*N + xi]; 167 | float f = (float)(d / maxd); 168 | byte b = (byte)(int)(f * 255); 169 | bmp.SetPixel(xi, yi, new SKColor(b, b, b)); 170 | } 171 | } 172 | 173 | using (var image = SKImage.FromBitmap(bmp)) 174 | using (var data = image.Encode(SKEncodedImageFormat.Png, 80)) { 175 | // save the data to a stream 176 | using (var stream = File.OpenWrite("c:\\scratch\\distances.png")) { 177 | data.SaveTo(stream); 178 | } 179 | } 180 | 181 | } 182 | 183 | 184 | } 185 | } 186 | -------------------------------------------------------------------------------- /sliceViewGTK/GtkUtil.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using System.IO; 7 | using g3; 8 | 9 | namespace SliceViewer 10 | { 11 | public static class GtkUtil 12 | { 13 | /// 14 | /// Fix some issues w/ GtkSharp DLLs on windows. 15 | /// see: https://github.com/picoe/Eto/issues/442 16 | /// https://forums.xamarin.com/discussion/15568/unable-to-load-dll-libgtk-win32-2-0-0-dll 17 | /// https://forums.xamarin.com/discussion/2091/cannot-run-gtk-project 18 | /// https://github.com/mono/monodevelop/commit/ad672ce79a50ce844398ae30cce8005163e41d0e 19 | /// 20 | public static bool CheckWindowsGtk() 21 | { 22 | if (Util.IsRunningOnMono()) 23 | return true; 24 | 25 | string location = null; 26 | Version version = null; 27 | Version minVersion = new Version(2, 12, 22); 28 | using (var key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Xamarin\GtkSharp\InstallFolder")) { 29 | if (key != null) 30 | location = key.GetValue(null) as string; 31 | } 32 | using (var key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Xamarin\GtkSharp\Version")) { 33 | if (key != null) 34 | Version.TryParse(key.GetValue(null) as string, out version); 35 | } 36 | //TODO: check build version of GTK# dlls in GAC 37 | if (version == null || version < minVersion || location == null || !File.Exists(Path.Combine(location, "bin", "libgtk-win32-2.0-0.dll"))) { 38 | Console.WriteLine("Did not find required GTK# installation"); 39 | // string url = "http://monodevelop.com/Download"; 40 | // string caption = "Fatal Error"; 41 | // string message = 42 | // "{0} did not find the required version of GTK#. Please click OK to open the download page, where " + 43 | // "you can download and install the latest version."; 44 | // if (DisplayWindowsOkCancelMessage ( 45 | // string.Format (message, BrandingService.ApplicationName, url), caption) 46 | // ) { 47 | // Process.Start (url); 48 | // } 49 | return false; 50 | } 51 | Console.WriteLine("Found GTK# version " + version); 52 | var path = Path.Combine(location, @"bin"); 53 | Console.WriteLine("SetDllDirectory(\"{0}\") ", path); 54 | try { 55 | if (SetDllDirectory(path)) { 56 | return true; 57 | } 58 | } catch (EntryPointNotFoundException) { 59 | } 60 | // this shouldn't happen unless something is weird in Windows 61 | Console.WriteLine("Unable to set GTK+ dll directory"); 62 | return true; 63 | } 64 | 65 | [System.Runtime.InteropServices.DllImport("kernel32.dll", CharSet = System.Runtime.InteropServices.CharSet.Unicode, SetLastError = true)] 66 | [return: System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.Bool)] 67 | static extern bool SetDllDirectory(string lpPathName); 68 | } 69 | 70 | 71 | } 72 | 73 | -------------------------------------------------------------------------------- /sliceViewGTK/PanZoomCanvas2D.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using Gtk; 4 | using GLib; 5 | using SkiaSharp; 6 | using g3; 7 | 8 | 9 | namespace gs 10 | { 11 | public class PanZoomCanvas2D : DrawingArea 12 | { 13 | public float Zoom = 0.95f; 14 | 15 | // this is a pixel-space translate 16 | public Vector2f PixelTranslate = Vector2f.Zero; 17 | 18 | public Vector2i PixelDimensions = Vector2i.Zero; 19 | 20 | public PanZoomCanvas2D() 21 | { 22 | ExposeEvent += OnExpose; 23 | 24 | ButtonPressEvent += OnButtonPressEvent; 25 | ButtonReleaseEvent += OnButtonReleaseEvent; 26 | MotionNotifyEvent += OnMotionNotifyEvent; 27 | ScrollEvent += OnScrollEvent; 28 | Events = Gdk.EventMask.ExposureMask | Gdk.EventMask.LeaveNotifyMask | 29 | Gdk.EventMask.ButtonPressMask | Gdk.EventMask.ButtonReleaseMask | Gdk.EventMask.PointerMotionMask | 30 | Gdk.EventMask.ScrollMask; 31 | 32 | } 33 | 34 | 35 | 36 | protected virtual AxisAlignedBox2d DrawingBounds { 37 | get { return new AxisAlignedBox2d(0, 0, 500, 500); } 38 | } 39 | 40 | protected virtual void DrawScene(SKCanvas drawCanvas, Func ViewTransformF) { 41 | } 42 | 43 | 44 | 45 | void OnExpose(object sender, ExposeEventArgs args) 46 | { 47 | DrawingArea area = (DrawingArea)sender; 48 | Cairo.Context cairoContext = Gdk.CairoHelper.Create(area.GdkWindow); 49 | 50 | int width = area.Allocation.Width; 51 | int height = area.Allocation.Height; 52 | PixelDimensions = new Vector2i(width, height); 53 | 54 | AxisAlignedBox2d bounds = DrawingBounds; 55 | 56 | double sx = (double)width / bounds.Width; 57 | double sy = (double)height / bounds.Height; 58 | 59 | float scale = (float)Math.Min(sx, sy); 60 | 61 | // we apply this translate after scaling to pixel coords 62 | Vector2f pixC = Zoom * scale * (Vector2f)bounds.Center; 63 | Vector2f translate = new Vector2f(width / 2, height / 2) - pixC; 64 | 65 | 66 | using (var bitmap = new SKBitmap(width, height, SkiaUtil.ColorType(), SKAlphaType.Premul)) { 67 | IntPtr len; 68 | using (var skSurface = SKSurface.Create(bitmap.Info.Width, bitmap.Info.Height, SkiaUtil.ColorType(), SKAlphaType.Premul, bitmap.GetPixels(out len), bitmap.Info.RowBytes)) { 69 | var canvas = skSurface.Canvas; 70 | 71 | // update scene xform 72 | Func ViewTransformF = (pOrig) => { 73 | Vector2f pNew = (Vector2f)pOrig - (Vector2f)bounds.Center; 74 | pNew = Zoom * scale * pNew; 75 | pNew += (Vector2f)pixC; 76 | pNew += translate + Zoom * PixelTranslate; 77 | pNew.y = canvas.LocalClipBounds.Height - pNew.y; 78 | return pNew; 79 | }; 80 | 81 | DrawScene(canvas, ViewTransformF); 82 | 83 | Cairo.Surface cairoSurf = new Cairo.ImageSurface( 84 | bitmap.GetPixels(out len), 85 | Cairo.Format.Argb32, 86 | bitmap.Width, bitmap.Height, 87 | bitmap.Width * 4); 88 | 89 | cairoSurf.MarkDirty(); 90 | cairoContext.SetSourceSurface(cairoSurf, 0, 0); 91 | cairoContext.Paint(); 92 | 93 | cairoSurf.Dispose(); 94 | } 95 | } 96 | 97 | cairoContext.Dispose(); 98 | 99 | //return true; 100 | } 101 | 102 | 103 | 104 | 105 | 106 | // zoom 107 | protected void OnScrollEvent(object o, ScrollEventArgs args) 108 | { 109 | if (args.Event.Direction == Gdk.ScrollDirection.Up) 110 | Zoom *= 1.05f; 111 | else 112 | Zoom = Math.Max(0.25f, Zoom * (1.0f / 1.05f)); 113 | QueueDraw(); 114 | } 115 | 116 | 117 | // pan support 118 | bool left_down = false; 119 | Vector2f start_pos = Vector2f.Zero; 120 | Vector2f pan_start; 121 | protected void OnButtonPressEvent(object o, ButtonPressEventArgs args) 122 | { 123 | if (args.Event.Button == 1) { 124 | left_down = true; 125 | start_pos = new Vector2f((float)args.Event.X, (float)args.Event.Y); 126 | pan_start = PixelTranslate; 127 | } 128 | } 129 | protected void OnButtonReleaseEvent(object o, ButtonReleaseEventArgs args) 130 | { 131 | if (left_down) 132 | left_down = false; 133 | } 134 | protected void OnMotionNotifyEvent(object o, MotionNotifyEventArgs args) 135 | { 136 | if (left_down) { 137 | Vector2f cur_pos = new Vector2f((float)args.Event.X, (float)args.Event.Y); 138 | Vector2f delta = cur_pos - start_pos; 139 | delta.y = -delta.y; 140 | delta *= 1.0f; // speed 141 | PixelTranslate = pan_start + delta / Zoom; 142 | QueueDraw(); 143 | } 144 | } 145 | 146 | 147 | public void Reset() 148 | { 149 | Zoom = 1.0f; 150 | PixelTranslate = Vector2f.Zero; 151 | QueueDraw(); 152 | } 153 | 154 | 155 | 156 | } 157 | } 158 | -------------------------------------------------------------------------------- /sliceViewGTK/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | 4 | // Information about this assembly is defined by the following attributes. 5 | // Change them to the values specific to your project. 6 | 7 | [assembly: AssemblyTitle("SliceViewer")] 8 | [assembly: AssemblyDescription("")] 9 | [assembly: AssemblyConfiguration("")] 10 | [assembly: AssemblyCompany("gradientspace")] 11 | [assembly: AssemblyProduct("")] 12 | [assembly: AssemblyCopyright("gradientspace")] 13 | [assembly: AssemblyTrademark("")] 14 | [assembly: AssemblyCulture("")] 15 | 16 | // The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}". 17 | // The form "{Major}.{Minor}.*" will automatically update the build and revision, 18 | // and "{Major}.{Minor}.{Build}.*" will update just the revision. 19 | 20 | [assembly: AssemblyVersion("1.0.*")] 21 | 22 | // The following attributes are used to specify the signing key for the assembly, 23 | // if desired. See the Mono documentation for more information about signing. 24 | 25 | //[assembly: AssemblyDelaySign(false)] 26 | //[assembly: AssemblyKeyFile("")] 27 | -------------------------------------------------------------------------------- /sliceViewGTK/SkiaUtil.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using SkiaSharp; 3 | using g3; 4 | using gs; 5 | 6 | 7 | namespace gs 8 | { 9 | public static class SkiaUtil 10 | { 11 | public static SKColorType ColorType() { 12 | return Util.IsRunningOnMono() ? SKColorType.Rgba8888 : SKColorType.Bgra8888; 13 | } 14 | 15 | public static SKColor Color(SKColor c, byte new_a) 16 | { 17 | return new SKColor(c.Red, c.Green, c.Blue, new_a); 18 | } 19 | 20 | public static SKColor Color(byte r, byte g, byte b, byte a = 255) { 21 | if ( Util.IsRunningOnMono() ) { 22 | return new SKColor(b, g, r, a); 23 | } else { 24 | return new SKColor(r, g, b, a); 25 | } 26 | } 27 | 28 | public static SKColor Color(Colorf c) { 29 | Colorb bc = c.ToBytes(); 30 | return Color(bc.r, bc.g, bc.b, bc.a); 31 | } 32 | 33 | 34 | public static SKColor Blend(SKColor c0, SKColor c1, float t) 35 | { 36 | return new SKColor( 37 | (byte)MathUtil.Clamp(((1 - t) * c0.Red + (t) * c1.Red), 0, 255), 38 | (byte)MathUtil.Clamp(((1 - t) * c0.Green + (t) * c1.Green), 0, 255), 39 | (byte)MathUtil.Clamp(((1 - t) * c0.Blue + (t) * c1.Blue), 0, 255), 40 | (byte)MathUtil.Clamp(((1 - t) * c0.Alpha + (t) * c1.Alpha), 0, 255)); 41 | } 42 | 43 | 44 | public static SKPath ToSKPath(GeneralPolygon2d g, Func mapF) 45 | { 46 | SKPath p = new SKPath(); 47 | 48 | int N = g.Outer.VertexCount; 49 | p.MoveTo(mapF(g.Outer[0])); 50 | for (int i = 1; i < N; i++) 51 | p.LineTo(mapF(g.Outer[i])); 52 | p.Close(); 53 | 54 | foreach (Polygon2d h in g.Holes) { 55 | int hN = h.VertexCount; 56 | p.MoveTo(mapF(h[0])); 57 | for (int i = 1; i < hN; ++i) 58 | p.LineTo(mapF(h[i])); 59 | p.Close(); 60 | } 61 | 62 | return p; 63 | } 64 | 65 | 66 | 67 | public static SKPath ToSKPath(DGraph2 g, Func mapF) 68 | { 69 | SKPath p = new SKPath(); 70 | 71 | foreach (Index3i edge in g.Edges()) { 72 | Vector2d a = g.GetVertex(edge.a); 73 | Vector2d b = g.GetVertex(edge.b); 74 | p.MoveTo(mapF(a)); 75 | p.LineTo(mapF(b)); 76 | p.Close(); 77 | } 78 | 79 | return p; 80 | } 81 | 82 | 83 | 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /sliceViewGTK/SliceViewer.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | {6348C5CD-6696-4B59-9851-43924A326BD4} 5 | WinExe 6 | v4.6 7 | SliceViewer 8 | true 9 | publish\ 10 | true 11 | Disk 12 | false 13 | Foreground 14 | 7 15 | Days 16 | false 17 | false 18 | true 19 | 0 20 | 1.0.0.%2a 21 | false 22 | false 23 | true 24 | 25 | 26 | 27 | 28 | 29 | true 30 | full 31 | false 32 | bin\Debug 33 | DEBUG; 34 | 4 35 | x86 36 | 37 | 38 | true 39 | bin\Release 40 | 4 41 | x86 42 | 43 | 44 | SliceViewer.MainClass 45 | 46 | 47 | 48 | 49 | ..\packages\SkiaSharp.1.60.2\lib\net45\SkiaSharp.dll 50 | 51 | 52 | ..\packages\SkiaSharp.Views.1.60.2\lib\net45\SkiaSharp.Views.Desktop.dll 53 | 54 | 55 | ..\packages\SkiaSharp.Views.1.60.2\lib\net45\SkiaSharp.Views.Gtk.dll 56 | 57 | 58 | ..\packages\SkiaSharp.Views.1.60.2\lib\net45\SkiaSharp.Views.WPF.dll 59 | 60 | 61 | 62 | False 63 | 64 | 65 | False 66 | 67 | 68 | False 69 | 70 | 71 | False 72 | 73 | 74 | False 75 | 76 | 77 | False 78 | 79 | 80 | 81 | 82 | ..\packages\Svg.2.3.0\lib\net35\Svg.dll 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | {6c2e415e-37d9-4c5a-8fd5-60b0133872cf} 102 | gsSlicer 103 | 104 | 105 | {0C518DDA-28FE-44CA-9AB0-F9773974F13A} 106 | geometry3Sharp 107 | 108 | 109 | {25DE77C9-14A4-4562-9A24-0BF1E612D9A9} 110 | gsGCode 111 | 112 | 113 | {9b062971-a88e-4a3d-b3c9-12b78d15fa66} 114 | clipper_library 115 | 116 | 117 | 118 | 119 | False 120 | Microsoft .NET Framework 4.5.2 %28x86 and x64%29 121 | true 122 | 123 | 124 | False 125 | .NET Framework 3.5 SP1 126 | false 127 | 128 | 129 | 130 | 131 | 132 | copy $(SolutionDir)bin\gpx.exe $(TargetDir) 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. 142 | 143 | 144 | 145 | -------------------------------------------------------------------------------- /sliceViewGTK/SliceViewerTests.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using Gtk; 5 | using GLib; 6 | using g3; 7 | using gs; 8 | 9 | namespace SliceViewer 10 | { 11 | public static class SliceViewerTests 12 | { 13 | public static DebugViewCanvas Active = null; 14 | 15 | public static void TestFill() 16 | { 17 | Window window = new Window("TestFill"); 18 | window.SetDefaultSize(600, 600); 19 | window.SetPosition(WindowPosition.Center); 20 | 21 | DebugViewCanvas view = new DebugViewCanvas(); 22 | 23 | GeneralPolygon2d poly = new GeneralPolygon2d( 24 | Polygon2d.MakeCircle(20, 32)); 25 | 26 | Polygon2d hole = Polygon2d.MakeCircle(15, 32); 27 | hole.Reverse(); 28 | hole.Translate(2 * Vector2d.AxisX); 29 | poly.AddHole(hole); 30 | 31 | view.AddPolygon(poly, Colorf.Black); 32 | 33 | double spacing = 0.5; 34 | 35 | double[] offsets = new double[] { 5 }; 36 | 37 | foreach (double offset in offsets) { 38 | DGraph2 graph = TopoOffset2d.QuickCompute(poly, offset, spacing); 39 | DGraph2Util.Curves c = DGraph2Util.ExtractCurves(graph); 40 | //view.AddGraph(graph, Colorf.Red); 41 | 42 | //DGraph2 perturbGraph = perturb_fill(graph, poly, 5.0f, spacing); 43 | DGraph2 perturbGraph = perturb_fill_2(graph, poly, 1.0f, spacing); 44 | //DGraph2Util.Curves c2 = DGraph2Util.ExtractCurves(perturbGraph); 45 | view.AddGraph(perturbGraph, Colorf.Orange); 46 | 47 | } 48 | 49 | window.Add(view); 50 | window.ShowAll(); 51 | 52 | Active = view; 53 | } 54 | 55 | 56 | 57 | 58 | 59 | public static DGraph2 perturb_fill(DGraph2 graphIn, GeneralPolygon2d bounds, double waveWidth, double stepSize) 60 | { 61 | DGraph2Util.Curves curves = DGraph2Util.ExtractCurves(graphIn); 62 | Polygon2d poly = curves.Loops[0]; 63 | 64 | GeneralPolygon2dBoxTree gpTree = new GeneralPolygon2dBoxTree(bounds); 65 | Polygon2dBoxTree outerTree = new Polygon2dBoxTree(bounds.Outer); 66 | Polygon2dBoxTree innerTree = new Polygon2dBoxTree(bounds.Holes[0]); 67 | 68 | DGraph2 graph = new DGraph2(); 69 | graph.EnableVertexColors(Vector3f.Zero); 70 | 71 | double len = poly.Perimeter; 72 | int waves = (int)(len / waveWidth); 73 | double lenScale = len / (MathUtil.TwoPI * waves); 74 | double accum_len = 0; 75 | int prev_vid = -1, start_vid = -1; 76 | int N = poly.VertexCount; 77 | for ( int k = 0; k < N; ++k ) { 78 | double t = accum_len / lenScale; 79 | t = Math.Cos(t); 80 | //Vector2d normal = poly.GetNormal(k); 81 | Vector2d normal = poly[k].Normalized; 82 | int vid = graph.AppendVertex(poly[k], new Vector3f(t, normal.x, normal.y)); 83 | if ( prev_vid != -1 ) { 84 | graph.AppendEdge(prev_vid, vid); 85 | accum_len += graph.GetVertex(prev_vid).Distance(graph.GetVertex(vid)); 86 | } else { 87 | start_vid = vid; 88 | } 89 | prev_vid = vid; 90 | } 91 | graph.AppendEdge(prev_vid, start_vid); 92 | 93 | Vector2d[] newPos = new Vector2d[graph.MaxVertexID]; 94 | 95 | for (int k = 0; k < 10; ++k) 96 | smooth_pass(graph, 0.5f, newPos); 97 | 98 | for (int k = 0; k < 20; ++k) { 99 | 100 | foreach (int vid in graph.VertexIndices()) { 101 | Vector2d v = graph.GetVertex(vid); 102 | Vector3f c = graph.GetVertexColor(vid); 103 | 104 | float t = c.x; 105 | Vector2d n = new Vector2d(c.y, c.z); 106 | 107 | if ( k == 0 || Math.Abs(t) > 0.9) { 108 | v += t * stepSize * n; 109 | if (!bounds.Contains(v)) { 110 | v = gpTree.NearestPoint(v); 111 | } 112 | } 113 | 114 | newPos[vid] = v; 115 | } 116 | 117 | foreach (int vid in graph.VertexIndices()) { 118 | graph.SetVertex(vid, newPos[vid]); 119 | } 120 | 121 | for ( int j = 0; j < 5; ++j ) 122 | smooth_pass(graph, 0.1f, newPos); 123 | } 124 | 125 | return graph; 126 | } 127 | 128 | 129 | 130 | 131 | 132 | public static DGraph2 perturb_fill_2(DGraph2 graphIn, GeneralPolygon2d bounds, double waveWidth, double stepSize) 133 | { 134 | DGraph2Util.Curves curves = DGraph2Util.ExtractCurves(graphIn); 135 | Polygon2d poly = curves.Loops[0]; 136 | 137 | GeneralPolygon2dBoxTree gpTree = new GeneralPolygon2dBoxTree(bounds); 138 | Polygon2dBoxTree outerTree = new Polygon2dBoxTree(bounds.Outer); 139 | Polygon2dBoxTree innerTree = new Polygon2dBoxTree(bounds.Holes[0]); 140 | 141 | DGraph2 graph = new DGraph2(); 142 | graph.EnableVertexColors(Vector3f.Zero); 143 | 144 | graph.AppendPolygon(poly); 145 | 146 | DGraph2Resampler resampler = new DGraph2Resampler(graph); 147 | resampler.CollapseToMinEdgeLength(waveWidth); 148 | if (graph.VertexCount % 2 != 0) { 149 | // TODO smallest edge 150 | Index2i ev = graph.GetEdgeV(graph.EdgeIndices().First()); 151 | DGraph2.EdgeCollapseInfo cinfo; 152 | graph.CollapseEdge(ev.a, ev.b, out cinfo); 153 | } 154 | 155 | 156 | // move to borders 157 | int startv = graph.VertexIndices().First(); 158 | int eid = graph.VtxEdgesItr(startv).First(); 159 | int curv = startv; 160 | bool outer = true; 161 | do { 162 | Polygon2dBoxTree use_tree = (outer) ? outerTree : innerTree; 163 | outer = !outer; 164 | graph.SetVertex(curv, use_tree.NearestPoint(graph.GetVertex(curv))); 165 | 166 | Index2i next = DGraph2Util.NextEdgeAndVtx(eid, curv, graph); 167 | eid = next.a; 168 | curv = next.b; 169 | } while (curv != startv); 170 | 171 | 172 | 173 | return graph; 174 | } 175 | 176 | 177 | 178 | 179 | public static void smooth_pass(DGraph2 graph, float alpha, Vector2d[] newPos) 180 | { 181 | foreach (int vid in graph.VertexIndices()) { 182 | Vector2d v = graph.GetVertex(vid); 183 | bool isvalid; 184 | Vector2d l = DGraph2Util.VertexLaplacian(graph, vid, out isvalid); 185 | v += alpha * l; 186 | newPos[vid] = v; 187 | } 188 | foreach (int vid in graph.VertexIndices()) { 189 | graph.SetVertex(vid, newPos[vid]); 190 | } 191 | } 192 | 193 | 194 | 195 | 196 | 197 | 198 | public static void TestDGraph2() 199 | { 200 | Window window = new Window("TestDGraph2"); 201 | window.SetDefaultSize(600, 600); 202 | window.SetPosition(WindowPosition.Center); 203 | 204 | DebugViewCanvas view = new DebugViewCanvas(); 205 | 206 | GeneralPolygon2d poly = new GeneralPolygon2d( 207 | Polygon2d.MakeCircle(10, 32)); 208 | 209 | //Polygon2d hole = Polygon2d.MakeCircle(9, 32); 210 | //hole.Reverse(); 211 | //poly.AddHole(hole); 212 | 213 | Polygon2d hole = Polygon2d.MakeCircle(5, 32); 214 | hole.Translate(new Vector2d(2, 0)); 215 | hole.Reverse(); 216 | poly.AddHole(hole); 217 | 218 | Polygon2d hole2 = Polygon2d.MakeCircle(1, 32); 219 | hole2.Translate(-6 * Vector2d.AxisX); 220 | hole2.Reverse(); 221 | poly.AddHole(hole2); 222 | 223 | Polygon2d hole3 = Polygon2d.MakeCircle(1, 32); 224 | hole3.Translate(-6 * Vector2d.One); 225 | hole3.Reverse(); 226 | poly.AddHole(hole3); 227 | 228 | Polygon2d hole4 = Polygon2d.MakeCircle(1, 32); 229 | hole4.Translate(7 * Vector2d.AxisY); 230 | hole4.Reverse(); 231 | poly.AddHole(hole4); 232 | 233 | view.AddPolygon(poly, Colorf.Black); 234 | 235 | double spacing = 0.2; 236 | 237 | //double[] offsets = new double[] { 0.5, 1, 1.5, 2, 2.5 }; 238 | double[] offsets = new double[] { 0.2, 0.6 }; 239 | 240 | TopoOffset2d o = new TopoOffset2d(poly) { PointSpacing = spacing }; 241 | foreach (double offset in offsets) { 242 | o.Offset = offset; 243 | DGraph2 graph = o.Compute(); 244 | DGraph2Util.Curves c = DGraph2Util.ExtractCurves(graph); 245 | view.AddGraph(graph, Colorf.Red); 246 | } 247 | 248 | 249 | 250 | window.Add(view); 251 | window.ShowAll(); 252 | } 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | static GeneralPolygon2d Outer = null; 264 | static float AnimSpacing = 0.3f; 265 | static float AnimOffset = 0.01f; 266 | 267 | public static void TestOffsetAnimation() 268 | { 269 | Window window = new Window("TestFill"); 270 | window.SetDefaultSize(600, 600); 271 | window.SetPosition(WindowPosition.Center); 272 | 273 | DMesh3 mesh = StandardMeshReader.ReadMesh("c:\\scratch\\remesh.obj"); 274 | MeshBoundaryLoops loops = new MeshBoundaryLoops(mesh); 275 | DCurve3 curve = loops[0].ToCurve(); 276 | Polygon2d poly = new Polygon2d(); 277 | foreach (Vector3d v in curve.Vertices) 278 | poly.AppendVertex(v.xy); 279 | Outer = new GeneralPolygon2d(poly); 280 | 281 | DebugViewCanvas view = new DebugViewCanvas(); 282 | view.AddPolygon(Outer, Colorf.Black); 283 | 284 | 285 | DGraph2 graph = TopoOffset2d.QuickCompute(Outer, AnimOffset, AnimSpacing); 286 | view.AddGraph(graph, Colorf.Red); 287 | 288 | window.Add(view); 289 | window.ShowAll(); 290 | 291 | Active = view; 292 | } 293 | 294 | public static void UpdateOffsetAnimation() 295 | { 296 | AnimOffset += 0.1f; 297 | DGraph2 graph = TopoOffset2d.QuickCompute(Outer, AnimOffset, AnimSpacing); 298 | 299 | Active.Graphs.Clear(); 300 | Active.AddGraph(graph, Colorf.Red); 301 | } 302 | 303 | 304 | 305 | 306 | 307 | 308 | } 309 | } 310 | -------------------------------------------------------------------------------- /sliceViewGTK/app.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /sliceViewGTK/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | --------------------------------------------------------------------------------