54 Commits

Author SHA1 Message Date
Vojtech Bubnik
8dad25efc4 Merge branch 'master' into master_262 2023-09-04 14:44:32 +02:00
ps_copyright
f32859c302 final copyright headers 2023-09-01 14:49:07 +02:00
Vojtech Bubnik
4580e69d86 ArcWelder: Fixed NaN when exporting arches with nearly zero radii. 2023-09-01 13:05:22 +02:00
Vojtech Bubnik
015a24133a Fixed some compilation warnings. 2023-08-30 12:51:35 +02:00
Vojtech Bubnik
8806442f55 PlaceholderParser on G-code export:
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.
2023-06-13 10:21:13 +02:00
Vojtech Bubnik
c21e745caa PlaceholderParser: Test for undefined (nil) variables or vector elements
and throw if such nil variable or vector element is used.
Fix of #10578 SPE-1710
2023-05-18 15:47:44 +02:00
Vojtech Bubnik
c9f449bcb2 PlaceholderParser: fixed reporting of x value outside
of the interpolated table.
2023-05-09 11:14:36 +02:00
Vojtech Bubnik
c2baa9ad4f PlaceholderParser: Throw if valid or invalid UTF-8 sequence
is encountered inside a code block.
2023-04-06 13:30:29 +02:00
Vojtech Bubnik
030cfaf4b3 Fix of SPE-1630 crash when referencing an invalid variable name
using the old placeholder parser syntax.
Also implemented unescaping of \r\n\"\\ in string syntax.
2023-04-06 10:40:20 +02:00
Vojtech Bubnik
f591c2503a PlaceholderParser: changed the syntax of if inside a {} block to
{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}
2023-03-27 15:36:14 +02:00
Vojtech Bubnik
a53070f5e6 PlaceholderParser: Simpler if / elsif / else / endif syntax.
{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}
2023-03-24 16:35:53 +01:00
Vojtech Bubnik
59d3683a79 PlaceholderParser: Refactored, removed all the unncesseary <Iterator>
template parameters.
2023-03-24 14:26:25 +01:00
Vojtech Bubnik
5b115b7972 PlaceholderParser: Implemented skipping of inactive if / else / endif
and ternary operator branches, thus missing variables or addressing
outside of the variable range in an inactive branch will not trigger
an error.
2023-03-24 13:55:58 +01:00
Vojtech Bubnik
9cb50e6586 PlaceholderParser: added size() and empty() functions over vector variables. 2023-03-23 17:51:37 +01:00
Vojtech Bubnik
929a0eba2c PlaceholderParser: replaced the new "array" operator with "repeat",
simplified the parser a bit more.
2023-03-23 17:08:56 +01:00
Vojtech Bubnik
3045884640 PlaceholderParser: Reduced code duplicity. 2023-03-23 15:00:45 +01:00
Vojtech Bubnik
e46891fa8c PlaceholderParser: Fixed compilation issues, added integration test
with FDM slicing process.
2023-03-23 09:23:20 +01:00
Vojtech Bubnik
c28585ab7f WIP PlaceholderParser: Support for local and global variables.
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.
2023-03-22 17:46:57 +01:00
Vojtech Bubnik
963ca415d4 PlaceholderParser: new interpolate_table() "function"
interpolate_table(x, (x0, y0), (x1, y1), (x2, y2), ...)
interpolates a table at position x.
2023-03-22 17:46:57 +01:00
Vojtech Bubnik
7afabcde95 PlaceholderParser: Implemented one_of() matching function:
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.*/
2023-03-20 15:55:18 +01:00
Vojtech Bubnik
d152b67ce5 PlaceholderParser: Simplified the parser after introducing
the writable variables.
2023-03-20 10:25:52 +01:00
Vojtech Bubnik
b9d8fe7118 WIP: PlaceholderParser support for writable output variables. 2023-03-20 07:48:38 +01:00
Lukas Matena
f6445eefe3 Fix a memory leak in placeholder parser 2023-03-10 11:49:53 +01:00
PavelMikus
5b0c270b30 Merge remote-tracking branch 'origin/master' into pm_anchor_bridges_on_sparse_infill 2023-03-01 16:45:26 +01:00
Vojtech Bubnik
55533397f9 PlaceholderPareser: new is_null() function to test whether a variable
has a "nil" value or not.
Implements SPE-1539
2023-02-28 18:30:04 +01:00
Vojtech Bubnik
1a5533d571 PlaceholderParser:
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.
2023-01-04 13:38:18 +01:00
Vojtech Bubnik
7949ea9544 Fixed some compiler warnings.
Removed some implicit type conversions of ExPolygon (to Points, Polylines, Polygons)
Fixed obsolete boost::spirit includes.
2022-08-22 15:14:54 +02:00
Lukáš Hejl
82a3f1c965 Fixed memory leak in PlaceholderParser::compare_op(). 2022-01-28 14:43:10 +01:00
Vojtech Bubnik
a94f1b332a Fixing the GCC/clang builds. MSVC is again non-conformant. 2021-10-30 14:00:23 +02:00
Vojtech Bubnik
3216448bbc PlaceholderParser: implemented round(), digits() and zdigits() macros.
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.
2021-10-29 13:36:26 +02:00
Vojtech Bubnik
0f145920d9 Fixed conditional G-code int(...), which did not accept an expression,
just a variable, constant or an expression enclosed in double braces (())
Mentioned for example in #3472
2021-10-29 10:45:33 +02:00
Vojtech Bubnik
7353d8c6e9 Rework of Add random function for gcode macros. #5219 after merge:
The thread local storage variables for the random number generator
were replaced by an external context variable.
Thread local storage is a scarce resource.
2020-12-09 09:19:46 +01:00
Vojtech Bubnik
1e190affcf Merge branch 'pa_macro_random_support' of https://github.com/ardenpm/PrusaSlicer into ardenpm-pa_macro_random_support 2020-12-09 07:33:41 +01:00
Vojtech Bubnik
3dd9b8c718 Further improvement error reporting with buggy custom G-code sections #1516
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.
2020-12-03 12:50:24 +01:00
Vojtech Bubnik
306acbdfb4 Improvement of Improve error reporting with buggy custom G-code sections #1516
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.
2020-12-03 11:03:16 +01:00
Paul Arden
003ccf388d Add a new macro function random(min,max) which will return a random number in the range specified by the parameters. The type of parameters defines the type of the output, if the inputs are doubles then result will be a double and if the inputs are int the output will be in. Uses C++11 random functionality, compiler compatibility on Linux should be checked. Fixes #4001. 2020-11-22 18:22:48 +11:00
Vojtech Bubnik
067cde85f1 WIP Refactoring of exceptions:
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.
2020-09-14 18:03:22 +02:00
bubnikv
059bdb4711 Implemented handling of complex ConfigOptionFloatOrPercent chains
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.
2020-02-04 15:27:38 +01:00
bubnikv
094cef26d4 Fix of the new PlaceholderParser int() conversion.
Fixes https://github.com/prusa3d/PrusaSlicer/pull/3271
Also some old errors (typos, UBs) were fixed.
2020-01-21 17:12:06 +01:00
bubnikv
05ea01bdcc Ported PlaceholderParser unit tests to C++. 2020-01-21 12:10:09 +01:00
Matthias Urlichs
329ad97a84 Add int() and % (modulo) 2019-12-04 09:32:22 +01:00
Lukas Matena
09e4ac42ba Fixed some more warnings (mostly GLGizmoSlaSupports.cpp) 2019-09-04 16:05:32 +02:00
bubnikv
7e694a8fb8 Workaround for invalid access inside some character classification table
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.
2019-08-08 14:21:24 +02:00
bubnikv
f8218eb903 Reworked the FFF Print::update() to process the filament retract
override values and to store them into the output G-code.
2019-07-25 14:39:19 +02:00
bubnikv
42c8940795 Fixed is_nil() method on ConfigOptions.
PlaceholderParser was extended to support external config.
The external config has a lowest priority when looking up a variable.
2019-07-24 12:39:01 +02:00
Lukas Matena
cb916c4dda Fixed warnings in libslic3r 2019-06-25 16:04:29 +02:00
bubnikv
13f0da3ace Fixed conversion of floating point values to string from PlaceholderParser
after boost::to_string() was removed from boost 1.66.
2019-01-18 09:50:56 +01:00
Vojtech Kral
6175eda867 Fix build 2019-01-17 15:40:09 +01:00
bubnikv
6828d8ba24 Yet another compilation fix on OSX. 2018-12-03 15:28:54 +01:00
bubnikv
d46d0dc365 Implemented naming of the SLA export file based on the output file name
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.
2018-12-03 13:14:28 +01:00