Xinqi Bao's Git
5 #include "BufferWrite.hh"
11 double zmax
= stl
.getZmax();
12 double zmin
= stl
.getZmin();
13 numLayer
= (zmax
- zmin
- zStart
) / zgap
+ 1;
14 layers
.reserve(numLayer
);
15 checkLayers
= new bool[numLayer
];
16 for (int i
= 0; i
< numLayer
; i
++) checkLayers
[i
] = false;
17 for (double z
= zmin
+ zStart
; z
< zmax
; z
+= zgap
)
19 layers
.push_back(Layer(z
));
21 cout
<< finishedCount
<< "/" << numLayer
;
22 for (int i
= 0; i
< NUM_THREADS
; i
++)
24 threads
[i
] = thread(&Slicer::threadLayer
, this);
26 for (int i
= 0; i
< NUM_THREADS
; i
++)
30 cout
<< "\nWriting...";
31 #if 0 // Write to gcode file directly
32 ofstream
f(gcode_target
, ios_base::out
| ios_base::app
);
33 for (const auto& layer
: layers
)
36 #if 1 // Write to writing buffer
37 BufferWrite
buffer(gcode_target
);
38 for (const auto& layer
: layers
) layer
.commandsOut(buffer
);
44 // mult-threads management function
45 void Slicer::threadLayer()
47 for (int index
= 0; index
< numLayer
; index
++)
50 if (checkLayers
[index
])
55 checkLayers
[index
] = true;
58 Slicing
cl(stl
, layers
[index
]);
62 cout
<< "\r" << finishedCount
<< "/" << numLayer
;
67 Slicer::Slicer(std::string
& filename
) : Slicer(filename
.c_str()) {}
69 Slicer::Slicer(const char* filename
)
71 #if 0 // Make directory for Windows
72 _mkdir(gcode_filePath
.c_str()); //make directory for storing gcode
75 std::string mkdir
= "mkdir -p ";
76 int res
= system(mkdir
.append(gcode_filePath
.c_str()).c_str());
79 // TODO: STL file extensions: .stl, .stlb, .bif.
80 // This can work for .stl and .stlb, but not good.
83 if (filename
[strlen(filename
) - 1] == 'b')
91 // change the file extension from ".stl" to ".gcode"
92 stl_target
= stl_filePath
;
93 stl_target
.append(filename
);
94 gcode_target
= gcode_filePath
;
95 gcode_target
.append(filename
, strlen(filename
) - extensionLen
);
96 gcode_target
.append("gcode");
97 remove(gcode_target
.c_str()); // remove old gcode file
98 std::cout
<< "\tFile: " << filename
<< "\nReading...";
99 std::cout
<< "\nNumber of triangles: " << stl
.read(stl_target
, isBinary
);
100 std::cout
<< "\nRead finish\n";