WIP GCode/SmoothPath.cpp,hpp cache for interpolating extrusion path with arches.
Removed Perl test t/geometry.t, replaced with C++ tests.
Refactored ExtrusionEntity and derived classes to hold extrusion attributes in new ExtrusionFlow/ExtrusionAttributes classes.
Reworked path ordering in G-code export to never copy polylines, but to work with a new "flipped" attribute.
Reworked G-code export to interpolate extrusion paths with smooth paths and to extrude those smooth paths.
New parameters: arc_fitting, arc_fitting_tolerance
Renamed GCode class to GCodeGenerator
Moved GCodeWriter.cpp/hpp to GCode/
Moved Wipe from from GCode.cpp,hpp to GCode/Wipe.cpp,hpp
Moved WipeTowerIntegration from GCode.cpp,hpp to GCode/WipeTowerIntegration.cpp,hpp
New variant of douglas_peucker() to simplify range of iterators in place.
Refactored wipe in general and wipe on perimeters / hiding seams.
WIP: Convert estimate_speed_from_extrusion_quality() and its application to smooth paths.
WIP: Cooling buffer to process G2G3, disable arc fitting for filters that cannot process it.
1) added "num_extruders" placeholder
2) changed "is_extruder_used" vector to be always minimum 256 elements long
with the non-existent extruder values set to zero.
This is wasteful, but necessary until we change the PlaceholderParser
handling of vector values to not substitute missing elements
with the zero'th value.
The object labeling likely never worked. Likely it was contributed,
but not reviewed sufficiently (by me I suppose).
Now the object ID is calculated as an index in the list of PrintObjects,
the order is arbitrary but stable, indices start with 0 and incremented
for every printed object with no gap in indices.
We are not quite sure how the indices are used by the OctoPrint
"Cancel Object" plugin, I suppose this change is sufficient.
Dynamic overhang speed could sometimes wrongly apply volumtric limits
Also, setting speed to zero will now cause the algorithm to use base external perim speed.
the amount of total extruded material and per extruder extruded material
up to the point the value is evaluated:
"extruded_volume", "extruded_weight",
"extruded_volume_total", "extruded_weight_total"
Newly each custom G-code block may exchange the following values with slicer:
Position and Z-hop:
position (read/write)- 3 element vector (X, Y, Z) of current G-code position. Z element contains the current Z hop.
zhop (read only)- initial zhop value
Extruders: vector variables, one element per extruder:
e_position (read/write) - absolute E position, only available with absolute extruder addressing
e_retracted (read/write) - current retraction state
e_restart_extra (read/write) - current planned extra deretraction when starting printing
For readibility, script's if / elsif / else / endif syntax was modified:
{if cond then
block
elsif cond then
block
else
block
endif}
Semicolon is not required after else or endif.
Implements #4048#7196
Syntax:
(global|local) variable_name =
(scalar_expression|vector_variable|array_expr|initializer_list)
array_expr := array(repeat, value)
initializer_list := (value, value, value, ...)
The type of the newly created variable is defined by the type
of the right hand side intitializer.
Newly declared variable must not override an existing variable.
Variable may be assigned with global|local expression, but its type
must not be changed.
Newly the assignment operator also accepts the same right hand expressions
as the global|local variable definition.
Should fix the following issues: #9594, #9485, #9563, #9588, #9610
Also fixed a problem with zero speed when dynamic speed was percentage based and speeds were set to 0 (auto)