Commit Graph
100 Commits
Author SHA1 Message Date
bubnikv 11bd62a3e6 Merge branch 'master' of https://github.com/Prusa3d/PrusaSlicer 2020-03-02 09:23:16 +01:00
bubnikv 3e722d82b2 Merge branch 'vb_camera_rotation_quaternion' 2020-03-02 09:23:00 +01:00
bubnikv c9a75bb70a Fixed localization issue of the "Removable media unmounted" message.
Generalized the Slic3r::show_info() function to std::strings and
const char*
2020-02-29 12:03:07 +01:00
bubnikv 192bdffb3f Updated printer profiles, bumped up version to 2.2.0-rc. 2020-02-29 10:53:18 +01:00
bubnikv 0a0219961b Free rotating camera reworked to rotate around the free rotation
axis in a single step.
2020-02-28 14:59:59 +01:00
bubnikv b6068b6278 Camera refactored to use quaternions primarily for processing
rotations due to numerical reasons (no need for normalization
and orthogonalization of the rotation matrix).
2020-02-28 13:29:05 +01:00
bubnikv 7c55674220 Disabled implicit conversion of wxString to std::string or const char*
and vice versa. Fixed one last implicit wxString conversion.
2020-02-27 17:02:08 +01:00
bubnikv b4d0d9610e Various changes in handling of profile compatiblilities
and the "show incompatible profiles" option.

It was not able to select the incompatible Print profile, which is
possible now.
(see Cannot select incompatible printer profile #3715)

When the Printer profile derived from the Prusa3D system profile was
active or a system Prusa3D profile was active, and when the Print profile
with the removed "inherits" field was active (or any other profile
derived from the "-- default --" profile was active), then the filament
selector offered just the profiles with the removed "inherits" field
(or any other profile derived from the "-- default--") profile.
This behavior has been now changed, so that in this scenario the Filament selector
will offer the Prusa3D vendor profiles compatible with the active Print
and Printer profile as well as the user profiles.

Slicer was also changed to keep an incompatible preset selected
at its respective tab if its respective "Red flag" is enabled.
For example, if an incompatible Print preset is selected and a Printer
profile is switched to another one which is not compatible with the active
Print preset that was red already, the active Print preset is
not switched if the Print "Red flag" is active. However, if the Print profile
was compatible before the Printer profile is switched and now the Print
profile becomes incompatible, another compatible Print profile is selected.

A likely bug in wxWidgets was worked around when switching a Print preset
on Plater, if the last item in the Print preset was active and incompatible,
and another Print preset was selected by the user. On Windows, an CBN_EDITCHANGE
is sent just after combo box selection change event and the CBN_EDITCHANGE
holds an index of the combo box item, which will be removed by the 1st event,
therefore leading to an assert in wxWidgets on CBN_EDITCHANGE. The workaround
is to disable processing of CBN_EDITCHANGE on Windows for the Plater
preset selection combo boxes.
2020-02-27 11:44:12 +01:00
bubnikv 5e10e5ae5f new hollowing icon 2020-02-26 15:00:23 +01:00
bubnikv d4d5076e49 Generalization of translate() / translate_utf8() to wxString arguments. 2020-02-24 15:23:43 +01:00
bubnikv d5bffd2816 Fixed crash on reading profiles with the "thumbnails" settings different
from the parent profile.
2020-02-24 10:41:20 +01:00
bubnikv 6ddb21fe06 Bumped up version to 2.2.0-beta
Changed the profile directory from PrusaSlicer-alpha to PrusaSlicer-beta
2020-02-21 18:44:53 +01:00
bubnikv a28c373d22 Updated bundled profiles. 2020-02-21 18:43:26 +01:00
bubnikv 29086aa00b Fix of a regression from e0811e4aa5
Due to refactoring of G-code export some "don't care" extrusions
were not extruded at all.
2020-02-21 18:18:17 +01:00
bubnikv a7ffd2a6fe GUI::show_error() is now generalized for std::string and const char*
Fixed return type of std::string translate_utf8() with context
(incorrectly returned wxString, should return std::string).
Fixed double translation of BackgroundSlicingProcess::validate() in Plater.
2020-02-21 13:38:06 +01:00
bubnikv aef93158ec Merge branch 'master' of https://github.com/Prusa3d/PrusaSlicer 2020-02-21 12:18:57 +01:00
bubnikv 377b9e4b45 ImGUI input_double wrapper for wxString label.
Possible fix of Fix encoding in Hollowing #3683
2020-02-21 12:17:46 +01:00
bubnikv 004b23e362 Fix of Bug: Changing print settings resets filament settings #3675
When switching a Print profile, the modifications of an active Filament
profile were incorrecly dropped even if the active Filament profile
was compatible with the newly selected Print profile.
2020-02-21 11:03:03 +01:00
bubnikv dfbae648bf Follow up on 6deb6a776d:
Fixed orientation of contours after Elephant Foot Compensation.
2020-02-19 12:58:03 +01:00
bubnikv ab72d5135b Fix of Placeholders do not respect filament overrides. #3649 2020-02-19 10:56:30 +01:00
bubnikv 0228375512 Merge branch 'master' of https://github.com/Prusa3d/PrusaSlicer 2020-02-18 15:44:07 +01:00
bubnikv b47246f69b Fixed a bug, where the top or bottom solid layers were created even
if the number of top / bottom solid layers was set to zero while
the top / bottom minimum shell thickess was set nonzero.

With this commit, if the top / bottom solid layers is set to zero,
there are no top / bottom solid layers generated independent from
the minimum top / bottom shell thickness.
2020-02-18 15:44:01 +01:00
bubnikv 25d6818fc7 Fix of
Opening saved project removes Print Host settings #3655
Octoprint Settings when Opening a .3MF file #3244

When loading a configuration file (from AMF, 3MF, .ini or .gcode),
and if the host settings ("print_host", "printhost_apikey", "printhost_cafile")
in the configuration file is empty, then the config is considered to be anonymized,
and these anonymized keys are loaded from the referenced "derived from" profile,
if it exists in user's PrusaSlicer configuration directory.

We are aware that this is a patch work and a better long term solution
is to separate physical printer settings from logical printer settings,
but this is a good enough solution for PrusaSlicer 2.2.0 release.
2020-02-18 14:13:56 +01:00
bubnikv 43f2171446 Partial fix of v2.2.0 alpha2 Unhandled exception - extrusion width #3482
Exceptions thrown by Flow calculation were made explicit classes derived
from std::invalid_argument.

The PresetHints::recommended_thin_wall_thickness() newly catches these
exceptions and it shows the reason of why the hint is invalid.
2020-02-18 12:26:56 +01:00
bubnikv 1850685431 One more fix for Make compile and works for FreeBSD (#3556) 2020-02-18 10:15:41 +01:00
bubnikv 26a6a9b23f Fixed regression crashing when generating G-code with supports. 2020-02-10 16:37:38 +01:00
bubnikv 7655488639 Ammendment of
Reverted the time estimate number stored into the G-code from
    days/hours/minutes to days/hours/minutes/seconds, because who knows
    who is already parsing the file.
2020-02-10 15:53:11 +01:00
bubnikv 9f40e9e56e Reverted the time estimate number stored into the G-code from
days/hours/minutes to days/hours/minutes/seconds, because who knows
who is already parsing the file.
2020-02-10 15:46:08 +01:00
bubnikv a25f58731e Fix of d81f7d8465
(SlicedInfo: Removed secondes from estimated times):
GCodeTimeEstimator::_get_time_dhm() shall round to minutes, old
code rounded down to minutes, new code rounds to 1/2.
2020-02-10 14:40:21 +01:00
bubnikv bfbf3ac94d Follow up on the hot fix of #3637 53bfb6bed3
This is the correct solution, which maintains the optimization introduced
by 3e0690b37b
2020-02-10 14:24:28 +01:00
bubnikv 53bfb6bed3 Hot fix of Object disappears when wipe to object turned on #3637
which is a regression of an optimization 3e0690b37b

With the optimization disabled, the G-code generator will not be slower
than PrusaSlicer 2.1.1. I am leaving the code there to mark for
further optimization opportunities.
2020-02-10 08:24:39 +01:00
bubnikv 519a982fe9 Fix of #3632: Crash if a thin wall object is not printable, therefore
no extrusion is generated.

Now the situation is detected and an exception is thrown.
2020-02-09 18:34:06 +01:00
bubnikv 5eb1e7e886 Fixed a bug in the update of the backend when the Spiral Vase option
is enabled / disabled.

Spiral Vase forces different kind of slicing than the normal model:
In Spiral Vase mode, holes are closed and only the largest area contour is kept at each layer.
Therefore toggling the Spiral Vase on / off requires complete reslicing.

This commit moves the update to the correct location.
2020-02-09 13:56:42 +01:00
bubnikv 9ae0311434 bumped up the version number. 2020-02-09 11:01:15 +01:00
bubnikv e7d2fcf0be Fixed unit tests broken with the previous commit (Spiral Vase fix).
Fixed a crash in the previous commit.
2020-02-09 09:43:15 +01:00
bubnikv 76433da64c Printer profiles were updated by @rtyr 2020-02-08 22:11:44 +01:00
bubnikv 4e11552da9 Spiral vase improvements and bugfixes.
Fixes Connecting / expanding Bottom Layers to Vase Perimeter #253
Fixes Slicing error in vase mode #452
Fixes Slicing Issue (Vase Mode, 0.6mm dmr nozzle) #1887
Fixes Top fill pattern isn't used in spiral vase mode #2533
Fixes Cisar's vase doesn't slice correctly, creates artefacts #3595

When the model is sliced, all the contours are newly oriented
counter-clockwise (even holes), merged and then only the largest area
contour is retained. In perimeter generator, if the largest contour
splits into multiple perimeters, newly only the largest area perimeter
is retained in spiral vase mode. These two changes solve #3595 and similar.

The infill is newly calculated only for the bottom solid layers
if the spiral vase mode is active (removes various unwanted infill
along the vase walls), and the last bottom solid layer is switched
to a top solid pattern (solves #2533).

The thin walls are newly enforced to be disabled in spiral vase mode,
and the "ensure vertical shell wall" is enforced in spiral vase mode
to extend the bottom of the vase to the vase hull (fixes #253).
2020-02-08 21:36:43 +01:00
bubnikv 348bf39012 Fix of the previous commit: Fixed sequential print unit tests. 2020-02-07 14:43:13 +01:00
bubnikv b8c898bf40 Fixed a bug in validation of the FDM Print to check for extruder
collisions against already printed objects: Rotation of an object
was not being taken into account.
Fixes #2450 PrusaSlicer 2.0 Sequential printing vs rotate object
Fixes #3585 Always Sequential Printing Error (Regardless of setting, placement or object size)

Fixed some collisions in sequential print just after arrangement by
making the validation using a slightly lower extruder radius value
than the arrangement.

Refactored PrintObject coordinate system so that the PrintObject's
coordinate system is always centered in respect to its ModelObject's
geometries. This refactoring may improve path planning a bit and
it may lower the requirements on bits representing Clipper coordinates
by 1 bit.
2020-02-07 14:10:27 +01:00
bubnikv fb235cb675 Color change - handling Color Change data stored for different
printer configuration:

ss -> sm : Just apply the color changes of the original ss project at the active extruder.
ss -> mm : There are no tool changes stored. Ignore color changes, they are invalid because they are extruder non-specific.

sm -> ss : Apply tool changes as color changes (tool changes remember the target color), apply original color changes.
sm -> mm : Ignore both color changes and tool changes.

mm -> ss/sm : Ignore both color changes and tool changes.
2020-02-06 14:03:27 +01:00
bubnikv adf60d5931 Fix of the new top / bottom shell thickness hint. 2020-02-06 11:00:35 +01:00
bubnikv 34588f365d For the builds with a label assigned (no commit after the label),
show just the label in the application title. For Win32, add the
" 32 bit" indicator, so that we may see clearly if somebody is running
a 32bit build on 64bit windows by a mistake.
2020-02-06 10:17:22 +01:00
bubnikv 495a71ed00 Implemented top_solid_min_thickness / bottom_solid_min_thickness.
The two new config keys define a minimum vertical shell thickness.
The top shell thickness is calculated as a maximum of sum over
top_solid_layers * layer heights and top_solid_min_thickness,
the bottom shell thickness is calculated as a maximum of sum over
bottom_solid_layers * layer heights and bottom_solid_min_thickness.

The results of the formula above are shown at the Print parameter page
below the two new values to hint the user about the interaction
of the old versus new config values.

top_solid_min_thickness has no meaning if top_solid_layers is zero,
bottom_solid_min_thickness has no meaning if bottom_solid_layers is zero.
2020-02-05 16:53:48 +01:00
bubnikv bca3e86455 Fixed invalidation of FDM back end if a custom per layer
extruder change is added or removed.
2020-02-04 17:46:31 +01:00
bubnikv 450e21d457 Replaced unsafe use of dx_url.substr(0, 54) with boost::starts_with 2020-02-04 16:10:39 +01: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 f28d0ebc18 Implemented reload of original mesh volume in case the SLA hollowing
step is no more valid.
2020-02-03 15:17:18 +01:00
bubnikv 73f69f3387 Speed up of libigl SelfIntersectMesh:
The test for intersection of two triangles sharing a common edge
has been optimized to reject non-overlaping triangles with
the least amount of exact arithmetics predicates.

Cherry pick of
https://github.com/bubnikv/libigl/commit/d367762468ce3e663a62f155ee118fb6aa3657c4
2020-02-03 14:01:35 +01:00
bubnikv 9ef65b23d8 Implemented loading of hollowed SLA mesh into the scene
in place of the normal mesh.

WIP: The code is inefficient (it does not store the timestamp
of the hollowed mesh, therefore it refreshes the hollowed mesh on each
scene update) and if the hollowing gets invalidated, the original mesh
is currently not being reloaded and the hollowed mesh is still visible.
2020-01-30 17:58:49 +01:00
bubnikv 1278aabf3e Fixed some compiler warnings. 2020-01-30 13:00:51 +01:00
bubnikv d590d5cad8 Created Creality.idx
bumped up the version number for Creality.ini
2020-01-30 13:00:26 +01:00
bubnikv c5fa400208 Fixed regression of 71fa411100
where the PrintObject bounding box was not invalidated correctly
when the transformation matrices of instances changed.

Also refactored PrintObject::size() for const correctness.
2020-01-30 12:22:30 +01:00
bubnikv dced3ce783 Fix of 2.2.0-A3: Sequential Printing: Wrong location after slicing #3570
This is a regression from 71fa411
2020-01-24 17:11:14 +01:00
bubnikv d937ac1ed3 Forcing a print bed update after config or config bundle is loaded.
The solution is hackish, but a major refactoring would be needed
to avoid multiple refreshes of the print bed, and to avoid
expensive checks at Plater::on_config_change() every time
a config value changes at a parameter tab.
2020-01-24 15:16:36 +01:00
bubnikv a0e6afcee8 Update of PrusaSlicer.idx to force the users of PrusaSlicer 2.2.0-alpha3
and newer to update the profiles to 1.1.1-alpha3 and newer,
so they will see the print bed.
2020-01-23 16:52:24 +01:00
bubnikv 8bf53370c1 Bumped up version number 2.2.0-alpha3,
so that the updated bundled profiles may require this version
(2.2.0-alpha3) or newer.
This change is needed for the clients to be forced to update
the configurations to see the print bed, as the print bed model and
image are no more hard coded, but they are referenced from
the vendor specific Preset Bundle.
2020-01-23 16:40:25 +01:00
bubnikv 3d9ac0ada1 Little optimization of the profile aliases. 2020-01-23 16:04:17 +01:00
bubnikv 4f8f619686 Fixed Perl bindings after refactoring. 2020-01-23 10:35:03 +01:00
bubnikv b0fe7ad865 Merge branch 'master' of https://github.com/Prusa3d/PrusaSlicer 2020-01-23 09:53:17 +01:00
bubnikv 71fa411100 Refactored PrintObject::m_copies to PrintInstances,
so that the ordering code at G-code export may work directly with
pointers to PrintInstances instead of with pair of <PrintObject, copy idx>.
Also the PrintInstance knows its source ModelInstance, which allows
sorting of PrintInstances for sequential printing in the order
they appear in Plater's object list.
2020-01-23 09:53:06 +01:00
bubnikv cea7cbfaa0 The print order for sequential print now corresponds to the order
at the object list.
Partial fix of https://github.com/prusa3d/PrusaSlicer/issues/3455
2020-01-22 10:50:20 +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 fa3d138e91 Fix of the previous commit: Fixed number of unit tests to be executed. 2020-01-21 13:13:52 +01:00
bubnikv 05ea01bdcc Ported PlaceholderParser unit tests to C++. 2020-01-21 12:10:09 +01:00
bubnikv c627114830 Fixed missing "&" in Brazilian Portugal translation. 2020-01-21 10:14:25 +01:00
bubnikv 7efca35c27 Don't store "print_host", "printhost_apikey", "printhost_cafile"
into the G-code.
2020-01-21 09:55:44 +01:00
bubnikv 5fe5378367 Fixed AstroBox upload type selection. 2020-01-20 16:57:50 +01:00
bubnikv 3acfae92e1 Fix of recent wipe tower / tool ordering refactoring. 2020-01-16 14:59:16 +01:00
bubnikv 1b354d8d3c WIP: Enhancement of the FDM back end to support Color Change situations,
when a project was switched from multi-extruder printer to single
extruder printer.
2020-01-16 13:39:03 +01:00
bubnikv 8e5ba5ccc5 Added synonyms to some PrintSteps:
psWipeTower now equals to new psToolOrdering indicating that
the ToolOrdering has been calculated (only if non-sequential mode is active).

psBrim now equals to new psExtrusionPaths
psExtrusionPaths shall be the last step before psWipeTower, indicating
that all the printing extrusions are calculated for the G-code preview
slider to edit the custom per print_z color changes, tool changes etc.
2020-01-15 16:20:16 +01:00
bubnikv 2c958c021d Fixed regression in placement of Color Change event at the correct layer. 2020-01-14 17:35:42 +01:00
bubnikv 10d1b459bb Fix of
Skirt loops not being honored, only producing single loop #2193
First layer skirt only has half the loops when using multiple extruders #469

The skirt generator used to prime all printing extruders at the 1st layer
if enough skirt lines were configured, while at the other layers the skirt
used to be printed with the 1st extruder printing the layer.

There was a bug introduced quite a long time ago, where not enough skirt
lines were extruded if some extruders were not needed to print the 1st layer.

Newly the skirt generator works the same way on all layers:
All the extruders planned to print a layer are primed over the skirt
if enough skirt lines are configured.
2020-01-14 16:38:34 +01:00
bubnikv 390376daae Fix of recent refactoring of color print. 2020-01-14 16:11:03 +01:00
bubnikv ab6a2b71e8 Another bugfixes of GCode export after refactoring. 2020-01-14 15:12:45 +01:00
bubnikv b54ce0d468 Fixing GCode Skirt generator after refactoring. 2020-01-14 14:24:38 +01:00
bubnikv c96fc5eb51 gcc & clang do not like taking reference of const temporaries. 2020-01-14 12:10:01 +01:00
bubnikv 98e49772ed Custom G-code references are now being assigned to ToolOrdering::LayerTools()
and the superfluous M600 (color change) events are filtered out there.

Fixed a handful of compiler warnings.
2020-01-14 11:54:09 +01:00
bubnikv 8bfc986fa7 Refactoring of GCode::process_layer().
Refactoring of GCode export of color changes, extruder switches etc,
so that the "color change" like extruder switches are applied first
at the Wipe Tower / G-code export, so that adding / removing
an extruder switch at the G-code preview slider does not invalidate
slicing.
2020-01-14 10:31:18 +01:00
bubnikv 79d7a0130f Fixing some missing throw statements.
Adding noexcept to move constructors / operators.
2020-01-13 17:41:40 +01:00
bubnikv 9a3901e159 Support for new "default_materials" property at PrinterModel
of system profiles. The "default_materials" key accepts
"default_filaments" as well.
2020-01-13 16:01:20 +01:00
bubnikv 19f0f50e98 MSVC specific: Disable STL4007: Many result_type typedefs and
all argument_type, first_argument_type, and second_argument_type
typedefs are deprecated in C++17.

Remove this warning disable after eigen library adapts to the new C++17 adaptor rules.
2020-01-13 16:01:20 +01:00
bubnikv 9038dc21e8 Fixing regression issue after G-code export refactoring. 2020-01-10 15:51:35 +01:00
bubnikv 702a489b03 Fixing compilation isue on non-MS compilers. 2020-01-10 11:53:39 +01:00
bubnikv 15eedef74b Refactoring of ToolOrdering (wipe into infill / object)
Refactoring of GCode::_do_export()
Helper lower_bound and search functions similar to std, but without
needing the value object explicitely.
2020-01-10 11:27:04 +01:00
bubnikv cc2b9b8849 ToolOrdering: Removed unused parameter. 2020-01-10 11:27:04 +01:00
bubnikv 5bb9ba64c2 Fix of previous commit 2020-01-09 10:14:50 +01:00
bubnikv de70adca9c Optimization of G-code export: Don't make copies of ExtrusionEntities
when sorting them into Extruders / Islands / Regions.
2020-01-09 10:00:48 +01:00
bubnikv 3e0690b37b Further optimizations of G-Code generator when Wipe into object / infill:
Don't do unnecessary tests if it is known that there is
no Wipe into object or infill active.
2020-01-08 15:16:31 +01:00
bubnikv e0811e4aa5 Optimization of G-code export:
1) Don't allocate ExtruderOverrides if not necessary
2) Use boost::container::small_vector<int32, 3) for ExtruderOverrides
   (usually less than 4 instances are printed))
2020-01-08 14:58:24 +01:00
bubnikv 81187e7e0e Some refactoring and const correctness fixes. 2020-01-07 14:35:43 +01:00
bubnikv 70bc392003 Support for Vendor / Printer Model specific print bed texture and model. 2020-01-07 14:08:35 +01:00
bubnikv 5078604182 Trying to fix Linux compilation 2020-01-06 11:59:24 +01:00
bubnikv 704e10c55a Replaced unix basename() with boost::filesystem::basename(),
as various unices define basename() differently.
2020-01-06 11:32:17 +01:00
bubnikv 791f487c76 Clean-up of the "Upload to" code (AstroBox, Duet, FlashAir, OctoPrint) 2020-01-06 10:59:57 +01:00
bubnikv afbc4a4cf2 Fixing perl bindings after refactoring 2020-01-06 09:36:03 +01:00
bubnikv 5294c85dfc Some minor polishing of Color print back end. 2020-01-06 09:32:13 +01:00
bubnikv 9406b50447 Const correctness improvements:
removed some unnecessary const_casts that remove const.
2020-01-03 16:33:04 +01:00
bubnikv 3d17543d40 Fix of "Don't use bridging perimeters on top of elephant-foot compensation #3011"
If the Elephant foot compensation is applied to the 1st object's layer,
the uncompensated 1st object's slice is newly used for calculation
of bridges, overhans, skirt, brim, raft and supports.

Layer::slices were renamed to Layer::lslices to simplify reading
of the code, to differentiate from LayerRegion::slices.
2020-01-03 14:07:31 +01:00
bubnikv c74ba012e2 Merge branch 'master' of https://github.com/Prusa3d/PrusaSlicer 2020-01-02 16:40:46 +01:00
bubnikv 0d9022c5f6 Implemented "renamed_from" attribute of a system profile,
so that references from user profiles and .3mfs / .amfs
to system profiles are not being lost.

If a system profile has no "renamed_from" profile name assigned,
and the system profile name contains "@", then a profile name
with the "@" is implicitely assumed to be the name, from which this
profile has been renamed.
2020-01-02 16:40:32 +01:00