diff --git a/.gitignore b/.gitignore index 0a7523ff37..fd01d5ce76 100644 --- a/.gitignore +++ b/.gitignore @@ -26,3 +26,10 @@ LC_MESSAGES # Debian packaging debian* + +#Externally located plug-ins. +plugins/Doodle3D-cura-plugin +plugins/GodMode +plugins/PostProcessingPlugin +plugins/UM3NetworkPrinting +plugins/X3GWriter \ No newline at end of file diff --git a/cura/BuildVolume.py b/cura/BuildVolume.py index c87f3a8cbd..b9208ad1c0 100644 --- a/cura/BuildVolume.py +++ b/cura/BuildVolume.py @@ -592,7 +592,7 @@ class BuildVolume(SceneNode): raise Exception("Unknown bed adhesion type. Did you forget to update the build volume calculations for your new bed adhesion type?") support_expansion = 0 - if self._getSettingFromSupportInfillExtruder("support_offset"): + if self._getSettingFromSupportInfillExtruder("support_offset") and self._global_container_stack.getProperty("support_enable", "value"): support_expansion += self._getSettingFromSupportInfillExtruder("support_offset") farthest_shield_distance = 0 @@ -604,7 +604,7 @@ class BuildVolume(SceneNode): move_from_wall_radius = 0 # Moves that start from outer wall. if self._getSettingFromAdhesionExtruder("infill_wipe_dist"): move_from_wall_radius = max(move_from_wall_radius, self._getSettingFromAdhesionExtruder("infill_wipe_dist")) - if self._getSettingFromAdhesionExtruder("travel_avoid_distance"): + if self._getSettingFromAdhesionExtruder("travel_avoid_distance") and self._getSettingFromAdhesionExtruder("travel_avoid_other_parts"): move_from_wall_radius = max(move_from_wall_radius, self._getSettingFromAdhesionExtruder("travel_avoid_distance")) #Now combine our different pieces of data to get the final border size. @@ -621,4 +621,4 @@ class BuildVolume(SceneNode): _prime_settings = ["extruder_prime_pos_x", "extruder_prime_pos_y", "extruder_prime_pos_z"] _tower_settings = ["prime_tower_enable", "prime_tower_size", "prime_tower_position_x", "prime_tower_position_y"] _ooze_shield_settings = ["ooze_shield_enabled", "ooze_shield_dist"] - _distance_settings = ["infill_wipe_dist", "travel_avoid_distance", "support_offset"] + _distance_settings = ["infill_wipe_dist", "travel_avoid_distance", "support_offset", "support_enable", "travel_avoid_other_parts"] diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index ec52c7aea1..3a67b9b95c 100644 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -549,7 +549,7 @@ class CuraApplication(QtApplication): qmlRegisterType(cura.Settings.ExtrudersModel, "Cura", 1, 0, "ExtrudersModel") qmlRegisterType(cura.Settings.ContainerSettingsModel, "Cura", 1, 0, "ContainerSettingsModel") - qmlRegisterType(cura.Settings.ProfilesModel, "Cura", 1, 0, "ProfilesModel") + qmlRegisterSingletonType(cura.Settings.ProfilesModel, "Cura", 1, 0, "ProfilesModel", cura.Settings.ProfilesModel.createProfilesModel) qmlRegisterType(cura.Settings.QualityAndUserProfilesModel, "Cura", 1, 0, "QualityAndUserProfilesModel") qmlRegisterType(cura.Settings.UserProfilesModel, "Cura", 1, 0, "UserProfilesModel") qmlRegisterType(cura.Settings.MaterialSettingsVisibilityHandler, "Cura", 1, 0, "MaterialSettingsVisibilityHandler") diff --git a/cura/Settings/ProfilesModel.py b/cura/Settings/ProfilesModel.py index 2ad9813e37..c03e074053 100644 --- a/cura/Settings/ProfilesModel.py +++ b/cura/Settings/ProfilesModel.py @@ -25,6 +25,21 @@ class ProfilesModel(InstanceContainersModel): Application.getInstance().getMachineManager().activeStackChanged.connect(self._update) Application.getInstance().getMachineManager().activeMaterialChanged.connect(self._update) + # Factory function, used by QML + @staticmethod + def createProfilesModel(engine, js_engine): + return ProfilesModel.getInstance() + + ## Get the singleton instance for this class. + @classmethod + def getInstance(cls): + # Note: Explicit use of class name to prevent issues with inheritance. + if ProfilesModel.__instance is None: + ProfilesModel.__instance = cls() + return ProfilesModel.__instance + + __instance = None + ## Fetch the list of containers to display. # # See UM.Settings.Models.InstanceContainersModel._fetchInstanceContainers(). diff --git a/plugins/ChangeLogPlugin/ChangeLog.txt b/plugins/ChangeLogPlugin/ChangeLog.txt index 9504ccf04f..496efd1615 100644 --- a/plugins/ChangeLogPlugin/ChangeLog.txt +++ b/plugins/ChangeLogPlugin/ChangeLog.txt @@ -3,25 +3,35 @@ The layer height of each profile is now shown in the profile selection menu. *Bug fixes -Upgrading from version 2.1 on OSX works again. -You can import g-code from related machines as profile. -Fixed inheritance taking from the wrong extruder. -Moved z-hop and extruder selection settings to a better category. +Editing material settings has actual effect on the prints again +Upgrading from version 2.1 on OSX works again +You can import g-code from related machines as profile +Fixed inheritance taking from the wrong extruder +The i-symbol is updated properly +Fixed a freeze that could sometimes occur while printing via Wi-Fi [2.3.0] +*Multi Extrusion Support +Machines with multiple extruders are now supported. Ultimaker 3 printers and Ultimaker Original printers with dual extrusion upgrade kit are currently supported. + +*Network Printing for Ultimaker 3 +Sending a print to an Ultimaker 3 remotely via the network is now possible. Requires Wi-Fi or LAN to connect to the printer. + +*Print Monitoring for Ultimaker 3 +You can monitor your print on an Ultimaker 3 with a live camera feed. Requires Wi-Fi or LAN to connect to the printer. + +*Material and Print Core Synchronization +Connecting to an Ultimaker 3 now gives you the option to synchronize the materials in Cura with what is loaded in the printer. *Speed improvements -The first thing you will notice is the speed. STL loading is now 10 to 20 times faster, layerview is significantly faster and slicing speed is slightly improved. - -*Multi Extrusion Support -Machines with multiple extruders are now supported. If you’ve got the Ultimaker Original with the dual extrusion upgrade kit, we’ve got you covered. - -*Custom Machine Support -It’s now much easier to use Cura with custom machines. You can edit the machine settings when you load a new custom machine. +The first thing you will notice is the speed. STL loading is now 10 to 20 times faster, layer view is significantly faster and slicing speed is slightly improved. *Improved Position Tool Place objects precisely where you want them by manually entering the values for the position. +*Custom Machine Support +It’s now much easier to use Cura with custom machines. You can edit the machine settings when you load a new custom machine. + *Improved Grouping It's now possible to transform objects that are already grouped. Select an individual item in a group or merged object and edit as usual. Just Ctrl + Click and edit away. @@ -30,7 +40,7 @@ Select an individual item in a group or merged object and edit as usual. Just Ct Profile management is improved. You can now easily see and track changes made to your profiles. *Improved Setting Visibility -Make multiple settings visible at once. The Visibility Overview setting indicates why a setting is not shown in the sidebar even if it is enabled. +Make multiple settings visible at the same time with a checkbox. The Visibility Overview setting indicates why a setting is not shown in the sidebar even if it is enabled. *Improved time estimation Time estimations are more accurate. Based on our test time estimations should be within 5% accuracy for Ultimaker printers. @@ -46,10 +56,10 @@ Configurations from older installations of Cura 2.1 are automatically imported i *Slicing features *Infill Types -We've introduced two new infill types: Tetrahedral and Cubic. They change along with the Z-axis for more uniform strength in all directions. There are now 7 infill types to choose from. +Two new infill types are now introduced: Tetrahedral and Cubic. They change along with the Z-axis for more uniform strength in all directions. There are now seven infill types to choose from. *Gradual Infill -Now you can change the density of the infill based on the distance from the top layers. Your objects print faster, use less material, while top surfaces have the same quality. +Gradual infill lets users adjust infill density, based on the distance from the top layers. This offers faster printing and reduced material requirements, whilst maintaining surface quality. *Set Acceleration and Jerk by Feature You can now set Jerk and Acceleration by feature-type (infill, walls, top/bottom, etc), for more precision. @@ -66,7 +76,7 @@ Can’t avoid previously printed parts by horizontal moves? The Z Hop Only Over *Skin and Wall Overlap The Skin Overlap setting allows you to overlap the skin lines with the walls for better adhesion. -*Control Initial Layer Travel Speed +*Adjust Initial Layer Travel Speed Set the travel speed of the initial layer(s) to reduce risk of extruder pulling the print from the bed. *Support Interface @@ -76,39 +86,39 @@ It is now possible to print a support bottom as well as a support roof. Support Deleting grouped objects Duplicating groups Bridging -Drag and drop on the first run on Windows +Drag and drop (first Windows run) Unretraction speeds Bottom layer in Spiralize mode Overlap Compensation -Retractions on Raft -Retractions now occur after each object printed in one-at-a-time mode. -Rafts are no longer printed outside of build area. -Spiralize no longer only spiralizes the first printed segment only. -Line distance is now the actual line distance. -Enabling raft doesn’t influence at which height the model is sliced any more. -Brim is now always printed just once. -Support roofs now only occur just below overhang. +Raft retractions +Retractions now occur after each object printed in one-at-a-time mode +Rafts are no longer printed outside of build area +Spiralize no longer limited to the first printed segment only +Line distance is now the actual line distance +Enabling raft doesn’t influence at which height the model is sliced any more +Brim is now always printed just once +Support roofs now only occur just below overhang *Minor changes -Messages are now displayed 30 seconds instead of 10, making it less likely that certain messages are missed. -You are now notified if you try to save to a locked SD card. -Engine log is now included in the application log. -Undo and Redo now work correctly with multiple operations. -The last used folder is now remembered (instead of defaulting to home folder). -Import X3D files. -Made it possible to add multiple Per Model Settings at once. -Bed Level and Checkup procedures for UMO+ can now be done without re-adding machine. -Combing is applied in more cases and results in better paths. -Infill thickness now supports Grid infill also for even multiples of the layer height. -Support is no longer removed by unprintable thin parts of the model. -Support is now generated on each layer it’s supposed to. -Support doesn't go outside overhang areas any more. -Support doesn't remove brim around the object any more. -Brim is now also generated under the support. -Draft shield and Ooze shield get their own brim or raft. -Settings shared between skirt and brim now also activate when brim is selected. -Compensate overlapping wall parts now also works for inner walls. -You can now adjust the speed at which the bed is lowered each layer. +Message display time increased to 30 seconds +Notification if you try to save to a locked SD card +Engine log now included in the application log +Undo and Redo now function with multiple operations +The last used folder is now remembered rather than defaulting to home folder +Import X3D files +Made it possible to add multiple Per Model Settings at once +Bed Level and Checkup procedures for UMO+ can be performed without re-adding machine +Combing applied in more cases and results in better paths +Infill thickness now supports Grid infill also for even multiples of the layer height +Support is no longer removed by unprintable thin parts of the model +Support generated on each appropriate layer +Support no longer goes outside overhang areas +Support no longer removes brim around the object +Brim is now also generated under the support +Draft and Ooze shield get their own brim or raft +Settings shared between skirt and brim now also activate when brim is selected +Compensate overlapping wall parts now also works for inner walls +Bed lowering speed can be adjusted for each layer [2.1.3] diff --git a/plugins/XmlMaterialProfile/XmlMaterialProfile.py b/plugins/XmlMaterialProfile/XmlMaterialProfile.py index baf986067a..d6f16b08e9 100644 --- a/plugins/XmlMaterialProfile/XmlMaterialProfile.py +++ b/plugins/XmlMaterialProfile/XmlMaterialProfile.py @@ -411,6 +411,8 @@ class XmlMaterialProfile(UM.Settings.InstanceContainer): else: Logger.log("d", "Unsupported material setting %s", key) + self.addMetaDataEntry("compatible", global_compatibility) + self._dirty = False machines = data.iterfind("./um:settings/um:machine", self.__namespaces) @@ -447,6 +449,7 @@ class XmlMaterialProfile(UM.Settings.InstanceContainer): new_material.setName(self.getName()) new_material.setMetaData(copy.deepcopy(self.getMetaData())) new_material.setDefinition(definition) + new_material.setMetaDataEntry("compatible", machine_compatibility) for key, value in global_setting_values.items(): new_material.setProperty(key, "value", value, definition) @@ -492,7 +495,7 @@ class XmlMaterialProfile(UM.Settings.InstanceContainer): new_hotend_material.setMetaData(copy.deepcopy(self.getMetaData())) new_hotend_material.setDefinition(definition) new_hotend_material.addMetaDataEntry("variant", variant_containers[0].id) - new_hotend_material.addMetaDataEntry("compatible", hotend_compatibility) + new_hotend_material.setMetaDataEntry("compatible", hotend_compatibility) for key, value in global_setting_values.items(): new_hotend_material.setProperty(key, "value", value, definition) @@ -506,14 +509,6 @@ class XmlMaterialProfile(UM.Settings.InstanceContainer): new_hotend_material._dirty = False UM.Settings.ContainerRegistry.getInstance().addContainer(new_hotend_material) - if not global_compatibility: - # Change the type of this container so it is not shown as an option in menus. - # This uses InstanceContainer.setMetaDataEntry because otherwise all containers that - # share this basefile are also updated. - dirty = self.isDirty() - super().setMetaDataEntry("type", "incompatible_material") - super().setDirty(dirty) # reset dirty flag after setMetaDataEntry - def _addSettingElement(self, builder, instance): try: key = UM.Dictionary.findKey(self.__material_property_setting_map, instance.definition.key) diff --git a/resources/definitions/ultimaker2_plus.def.json b/resources/definitions/ultimaker2_plus.def.json index 87c158782c..5b1c7909ba 100644 --- a/resources/definitions/ultimaker2_plus.def.json +++ b/resources/definitions/ultimaker2_plus.def.json @@ -40,7 +40,7 @@ "value": "speed_wall_0" }, "machine_height": { - "default_value": 203 + "default_value": 205 }, "machine_show_variants": { "default_value": true diff --git a/resources/qml/Menus/ProfileMenu.qml b/resources/qml/Menus/ProfileMenu.qml index 4fa7a0d3c5..9dea8420bb 100644 --- a/resources/qml/Menus/ProfileMenu.qml +++ b/resources/qml/Menus/ProfileMenu.qml @@ -13,7 +13,7 @@ Menu Instantiator { - model: Cura.ProfilesModel { } + model: Cura.ProfilesModel MenuItem { diff --git a/resources/qml/Settings/SettingItem.qml b/resources/qml/Settings/SettingItem.qml index 881cea39d2..7fa2856e27 100644 --- a/resources/qml/Settings/SettingItem.qml +++ b/resources/qml/Settings/SettingItem.qml @@ -208,12 +208,14 @@ Item { // But this will cause the binding to be re-evaluated when the enabled property changes. return false; } - + if(Cura.SettingInheritanceManager.settingsWithInheritanceWarning.length == 0) + { + return false; + } if(globalPropertyProvider.properties.limit_to_extruder == null || globalPropertyProvider.properties.limit_to_extruder == -1) { return Cura.SettingInheritanceManager.settingsWithInheritanceWarning.indexOf(definition.key) >= 0; } - return Cura.SettingInheritanceManager.getOverridesForExtruder(definition.key, globalPropertyProvider.properties.limit_to_extruder).indexOf(definition.key) >= 0; }