Browse Source

Finishing up compatibility mode

Jack Ha 8 years ago
parent
commit
f0e0d65635

+ 3 - 1
cura/LayerDataBuilder.py

@@ -49,7 +49,8 @@ class LayerDataBuilder(MeshBuilder):
         self._layers[layer].setThickness(thickness)
 
     #   material color map: [r, g, b, a] for each extruder row.
-    def build(self, material_color_map):
+    #   line_type_brightness: compatibility layer view uses line type brightness of 0.5
+    def build(self, material_color_map, line_type_brightness = 1.0):
         vertex_count = 0
         index_count = 0
         for layer, data in self._layers.items():
@@ -70,6 +71,7 @@ class LayerDataBuilder(MeshBuilder):
             self._element_counts[layer] = data.elementCount
 
         self.addVertices(vertices)
+        colors[:, 0:3] *= line_type_brightness
         self.addColors(colors)
         self.addIndices(indices.flatten())
 

+ 7 - 2
plugins/CuraEngineBackend/ProcessSlicedLayersJob.py

@@ -8,6 +8,7 @@ from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator
 from UM.Scene.SceneNode import SceneNode
 from UM.Application import Application
 from UM.Mesh.MeshData import MeshData
+from UM.Preferences import Preferences
 
 from UM.Message import Message
 from UM.i18n import i18nCatalog
@@ -105,7 +106,6 @@ class ProcessSlicedLayersJob(Job):
                 polygon = layer.getRepeatedMessage("path_segment", p)
 
                 extruder = polygon.extruder
-                x = dir(polygon)
 
                 line_types = numpy.fromstring(polygon.line_type, dtype="u1")  # Convert bytearray to numpy array
                 line_types = line_types.reshape((-1,1))
@@ -162,6 +162,7 @@ class ProcessSlicedLayersJob(Job):
         # TODO: move to a better place. Code is similar to code in ExtrudersModel
         from cura.Settings.ExtruderManager import ExtruderManager
         import UM
+
         global_container_stack = UM.Application.getInstance().getGlobalContainerStack()
         manager = ExtruderManager.getInstance()
         extruders = list(manager.getMachineExtruders(global_container_stack.getId()))
@@ -181,7 +182,11 @@ class ProcessSlicedLayersJob(Job):
             color = colorCodeToRGBA(color_code)
             material_color_map[0, :] = color
 
-        layer_mesh = layer_data.build(material_color_map)
+        if bool(Preferences.getInstance().getValue("view/compatibility_mode")):
+            line_type_brightness = 0.5
+        else:
+            line_type_brightness = 1.0
+        layer_mesh = layer_data.build(material_color_map, line_type_brightness)
 
         if self._abort_requested:
             if self._progress:

+ 11 - 1
plugins/LayerView/LayerView.qml

@@ -146,7 +146,6 @@ Item
         color: UM.Theme.getColor("tool_panel_background");
         border.width: UM.Theme.getSize("default_lining").width
         border.color: UM.Theme.getColor("lining")
-        visible: !UM.LayerView.compatibilityMode
 
         ListModel
         {
@@ -167,11 +166,20 @@ Item
             anchors.top: slider_background.bottom
             anchors.left: parent.left
             model: layerViewTypes
+            visible: !UM.LayerView.compatibilityMode
             onActivated: {
                 UM.LayerView.setLayerViewType(layerViewTypes.get(index).type_id);
             }
         }
 
+        Label
+        {
+            anchors.top: slider_background.bottom
+            anchors.left: parent.left
+            text: catalog.i18nc("@label","Compatibility mode")
+            visible: UM.LayerView.compatibilityMode
+        }
+
         ColumnLayout {
             anchors.top: layer_type_combobox.bottom
             anchors.topMargin: UM.Theme.getSize("default_margin").height
@@ -182,6 +190,7 @@ Item
                     UM.LayerView.setExtruderOpacity(0, checked ? 1.0 : 0.0);
                 }
                 text: "Extruder 1"
+                visible: !UM.LayerView.compatibilityMode
             }
             CheckBox {
                 checked: true
@@ -189,6 +198,7 @@ Item
                     UM.LayerView.setExtruderOpacity(1, checked ? 1.0 : 0.0);
                 }
                 text: "Extruder 2"
+                visible: !UM.LayerView.compatibilityMode
             }
             CheckBox {
                 onClicked: {

+ 69 - 9
plugins/LayerView/layers.shader

@@ -3,30 +3,88 @@ vertex =
     uniform highp mat4 u_modelViewProjectionMatrix;
     uniform lowp float u_active_extruder;
     uniform lowp float u_shade_factor;
+    uniform highp int u_layer_view_type;
+    uniform highp int u_only_color_active_extruder;
 
     attribute highp int a_extruder;
+    attribute highp int a_line_type;
     attribute highp vec4 a_vertex;
     attribute lowp vec4 a_color;
+    attribute lowp vec4 a_material_color;
+
     varying lowp vec4 v_color;
-        void main()
-        {
-            gl_Position = u_modelViewProjectionMatrix * a_vertex;
-            // shade the color depending on the extruder index stored in the alpha component of the color
-            v_color = (a_color.a == u_active_extruder) ? a_color * 1.5 : a_color * 1.5 * u_shade_factor;
-            v_color.a = 1.0;
+    varying float v_line_type;
+
+    void main()
+    {
+        gl_Position = u_modelViewProjectionMatrix * a_vertex;
+        v_color = a_color;
+        if ((u_only_color_active_extruder == 1) && (a_line_type != 8) && (a_line_type != 9)) {
+            v_color = (a_extruder == u_active_extruder) ? v_color : vec4(0.4, 0.4, 0.4, v_color.a);
+        }
+        if ((u_only_color_active_extruder == 0) && (a_line_type != 8) && (a_line_type != 9)) {
+            v_color = (a_extruder == u_active_extruder) ? v_color : vec4(u_shade_factor * v_color.rgb, v_color.a);
         }
 
+        v_line_type = a_line_type;
+    }
+
 fragment =
     varying lowp vec4 v_color;
+    varying float v_line_type;
+
+    uniform int u_show_travel_moves;
+    uniform int u_show_support;
+    uniform int u_show_adhesion;
+    uniform int u_show_skin;
+    uniform int u_show_infill;
 
     void main()
-        {
-	        gl_FragColor = v_color;
-		    }
+    {
+        if ((u_show_travel_moves == 0) && (v_line_type >= 7.5) && (v_line_type <= 9.5)) {  // actually, 8 and 9
+            // discard movements
+            discard;
+        }
+        // support: 4, 7, 10
+        if ((u_show_support == 0) && (
+            ((v_line_type >= 3.5) && (v_line_type <= 4.5)) ||
+            ((v_line_type >= 6.5) && (v_line_type <= 7.5)) ||
+            ((v_line_type >= 9.5) && (v_line_type <= 10.5))
+            )) {
+            discard;
+        }
+        // skin: 1, 2, 3
+        if ((u_show_skin == 0) && (
+            (v_line_type >= 0.5) && (v_line_type <= 3.5)
+            )) {
+            discard;
+        }
+        // adhesion:
+        if ((u_show_adhesion == 0) && (v_line_type >= 4.5) && (v_line_type <= 5.5)) {
+            // discard movements
+            discard;
+        }
+        // infill:
+        if ((u_show_infill == 0) && (v_line_type >= 5.5) && (v_line_type <= 6.5)) {
+            // discard movements
+            discard;
+        }
+
+        gl_FragColor = v_color;
+    }
 
 [defaults]
 u_active_extruder = 0.0
 u_shade_factor = 0.60
+u_layer_view_type = 0
+u_only_color_active_extruder = 1
+u_extruder_opacity = [1.0, 1.0, 1.0, 1.0]
+
+u_show_travel_moves = 0
+u_show_support = 1
+u_show_adhesion = 1
+u_show_skin = 1
+u_show_infill = 1
 
 [bindings]
 u_modelViewProjectionMatrix = model_view_projection_matrix
@@ -35,3 +93,5 @@ u_modelViewProjectionMatrix = model_view_projection_matrix
 a_vertex = vertex
 a_color = color
 a_extruder = extruder
+a_line_type = line_type
+a_material_color = material_color

+ 1 - 2
plugins/LayerView/layers3d.shader

@@ -94,7 +94,6 @@ geometry =
     out vec3 f_normal;
     out vec3 f_vertex;
     out uint f_extruder;
-    //out vec4 f_material_color;
 
     void main()
     {
@@ -325,7 +324,7 @@ fragment =
 u_active_extruder = 0.0
 u_layer_view_type = 0
 u_only_color_active_extruder = 1
-u_extruder_opacity = [1.0, 1.0]
+u_extruder_opacity = [1.0, 1.0, 1.0, 1.0]
 
 u_specularColor = [0.4, 0.4, 0.4, 1.0]
 u_ambientColor = [0.3, 0.3, 0.3, 0.0]