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.
{if condition then block elsif}
The "then" keyword is now mandatory.
On the other hand, "then" keyword must NOT be used using old syntax:
{if condition}...{endif}
{if cond1}{expr1}{elsif cond2}{expr2}{else}{expr3}{endif}
could be written as
{if cond1;expr1;elsif cond2;expr2;else;expr3;endif}
the first semicolon after else is not manadtory, thus the following is valid
{if cond1;expr1;elsif cond2;expr2;else expr3;endif}
each expression could be also empty or contain multiple expressions:
{if cond1;elsif cond2;else 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.
1st parameter is the text to match against,
the rest of the parameters are pattern to be matched:
either strings, then the match is exact,
or regex enclosed in //
or regex string starting with ~
For example
one_of("a", "a", "b")
finds a in "a", "b"
one_of("abc", /.*a.*/)
matches "abc" using regular expression /.*a.*/
1) Implemented access to coEnum values, they are returned as strings.
2) Fixed some possible memory leaks.
3) Fixed some possible union type punning issues.
round() rounds to an integer.
This is a popular request, for example #3472
digits(value, num_digits, num_decimals) rounds to num_digits and
num_decimals, left filled with spaces.
digits(value, num_digits) the same as digits(value, num_digits, 0)
Neither decimal separator nor any decimals after decimal separator
are emitted.
zdigits(...) is the same as digits(...) only left filled with zeros.
If the result does not fit num_digits, the result is never trimmed.
The thread local storage variables for the random number generator
were replaced by an external context variable.
Thread local storage is a scarce resource.
1) The macro-processor sanitizes the source code line for invalid UTF-8
characters. Ideally these invalid characters would be replaced with ?,
they are just dropped as of now. Better than showing an empty string
when converting to wxString though.
2) G-code export collects full error message for 1st occurence of an error
for each custom G-code block.
3) The composite error message now displays the errors collected in 2).
4) The error window is now scaled bigger and the Slicer logo is smaller
if the text is to be rendered with monospaced font, as the monospaced
text will not be word wrapped.
Errors in the file output templates are reported in mono-spaced font,
so that the arrow character ^ is displayed at the right column
pointing to the offending spot.
1) All slicer's exceptions are now derived from Slic3r::Exception.
2) New exceptions are defined for slicing errors.
3) Exceptions are propagated to the Plater to show.
It remains to modify the slicing back-end to throw the new SlicingError
exceptions instead of std::runtime_error and to show the other exceptions
by a message dialog instead of a notification.
by the PlaceholderParser.
Namely, all the options with the "ratio_over" reference are now handled
correctly by the PlaceholderParser with the exception
of the "first_layer_extrusion_width", which overrides speed of extrusions
by their respective extrusion type.
Also the various extrusion widths (extrusion_width, first_layer_extrusion_width,
external_perimeter_extrusion_width etc.) produce the same numbers
as if ran through the back-end, with the assumption of not overriding
layer height by the variable layer height editing tool or layer height
modifiers.
when parsing localized file names by the PlaceholderParser:
UTF8 characters were handled as chars, and the negative char values were
used as indices into 7bit long tables.
template.
Reworked naming of the plater exports to not use the output file name
template, but to derive the file name from the first printable object's name.
Fixed error handling: Reimpemented the Perl's "eval" blocks
as try / catch blocks.