mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-08-05 04:54:04 -06:00
Solved merge conflicts
This commit is contained in:
commit
36476a14bb
128 changed files with 53773 additions and 1446 deletions
|
@ -14,6 +14,7 @@ from UM.View.GL.OpenGL import OpenGL
|
|||
|
||||
from cura.Settings.ExtruderManager import ExtruderManager
|
||||
|
||||
|
||||
import os.path
|
||||
|
||||
## RenderPass used to display g-code paths.
|
||||
|
@ -47,8 +48,7 @@ class LayerPass(RenderPass):
|
|||
self._layer_shader.setUniformValue("u_layer_view_type", self._layer_view.getLayerViewType())
|
||||
self._layer_shader.setUniformValue("u_extruder_opacity", self._layer_view.getExtruderOpacities())
|
||||
self._layer_shader.setUniformValue("u_show_travel_moves", self._layer_view.getShowTravelMoves())
|
||||
self._layer_shader.setUniformValue("u_show_support", self._layer_view.getShowSupport())
|
||||
self._layer_shader.setUniformValue("u_show_adhesion", self._layer_view.getShowAdhesion())
|
||||
self._layer_shader.setUniformValue("u_show_helpers", self._layer_view.getShowHelpers())
|
||||
self._layer_shader.setUniformValue("u_show_skin", self._layer_view.getShowSkin())
|
||||
self._layer_shader.setUniformValue("u_show_infill", self._layer_view.getShowInfill())
|
||||
else:
|
||||
|
@ -56,8 +56,7 @@ class LayerPass(RenderPass):
|
|||
self._layer_shader.setUniformValue("u_layer_view_type", 1)
|
||||
self._layer_shader.setUniformValue("u_extruder_opacity", [1, 1, 1, 1])
|
||||
self._layer_shader.setUniformValue("u_show_travel_moves", 0)
|
||||
self._layer_shader.setUniformValue("u_show_support", 1)
|
||||
self._layer_shader.setUniformValue("u_show_adhesion", 1)
|
||||
self._layer_shader.setUniformValue("u_show_helpers", 1)
|
||||
self._layer_shader.setUniformValue("u_show_skin", 1)
|
||||
self._layer_shader.setUniformValue("u_show_infill", 1)
|
||||
|
||||
|
|
|
@ -16,6 +16,7 @@ from UM.Logger import Logger
|
|||
from UM.View.GL.OpenGL import OpenGL
|
||||
from UM.Message import Message
|
||||
from UM.Application import Application
|
||||
from UM.View.GL.OpenGLContext import OpenGLContext
|
||||
|
||||
from cura.ConvexHullNode import ConvexHullNode
|
||||
from cura.Settings.ExtruderManager import ExtruderManager
|
||||
|
@ -35,6 +36,10 @@ import os.path
|
|||
|
||||
## View used to display g-code paths.
|
||||
class LayerView(View):
|
||||
# Must match LayerView.qml
|
||||
LAYER_VIEW_TYPE_MATERIAL_TYPE = 0
|
||||
LAYER_VIEW_TYPE_LINE_TYPE = 1
|
||||
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
|
||||
|
@ -65,9 +70,21 @@ class LayerView(View):
|
|||
|
||||
Preferences.getInstance().addPreference("view/top_layer_count", 5)
|
||||
Preferences.getInstance().addPreference("view/only_show_top_layers", False)
|
||||
Preferences.getInstance().addPreference("view/compatibility_mode", True) # Default True for now, needs testing of different computers
|
||||
Preferences.getInstance().addPreference("view/force_layer_view_compatibility_mode", False)
|
||||
|
||||
Preferences.getInstance().addPreference("layerview/layer_view_type", 0)
|
||||
Preferences.getInstance().addPreference("layerview/extruder0_opacity", 1.0)
|
||||
Preferences.getInstance().addPreference("layerview/extruder1_opacity", 1.0)
|
||||
Preferences.getInstance().addPreference("layerview/extruder2_opacity", 1.0)
|
||||
Preferences.getInstance().addPreference("layerview/extruder3_opacity", 1.0)
|
||||
|
||||
Preferences.getInstance().addPreference("layerview/show_travel_moves", False)
|
||||
Preferences.getInstance().addPreference("layerview/show_helpers", True)
|
||||
Preferences.getInstance().addPreference("layerview/show_skin", True)
|
||||
Preferences.getInstance().addPreference("layerview/show_infill", True)
|
||||
|
||||
Preferences.getInstance().preferenceChanged.connect(self._onPreferencesChanged)
|
||||
self._updateWithPreferences()
|
||||
|
||||
self._solid_layers = int(Preferences.getInstance().getValue("view/top_layer_count"))
|
||||
self._only_show_top_layers = bool(Preferences.getInstance().getValue("view/only_show_top_layers"))
|
||||
|
@ -80,8 +97,7 @@ class LayerView(View):
|
|||
self._extruder_count = 0
|
||||
self._extruder_opacity = [1.0, 1.0, 1.0, 1.0]
|
||||
self._show_travel_moves = 0
|
||||
self._show_support = 1
|
||||
self._show_adhesion = 1
|
||||
self._show_helpers = 1
|
||||
self._show_skin = 1
|
||||
self._show_infill = 1
|
||||
|
||||
|
@ -93,7 +109,7 @@ class LayerView(View):
|
|||
# Currently the RenderPass constructor requires a size > 0
|
||||
# This should be fixed in RenderPass's constructor.
|
||||
self._layer_pass = LayerPass.LayerPass(1, 1)
|
||||
self._compatibility_mode = not self.getRenderer().getSupportsGeometryShader()
|
||||
self._compatibility_mode = OpenGLContext.isLegacyOpenGL() or bool(Preferences.getInstance().getValue("view/force_layer_view_compatibility_mode"))
|
||||
self._layer_pass.setLayerView(self)
|
||||
self.getRenderer().addRenderPass(self._layer_pass)
|
||||
return self._layer_pass
|
||||
|
@ -164,13 +180,21 @@ class LayerView(View):
|
|||
|
||||
self.currentLayerNumChanged.emit()
|
||||
|
||||
## Set the layer view type
|
||||
#
|
||||
# \param layer_view_type integer as in LayerView.qml and this class
|
||||
def setLayerViewType(self, layer_view_type):
|
||||
self._layer_view_type = layer_view_type
|
||||
self.currentLayerNumChanged.emit()
|
||||
|
||||
## Return the layer view type, integer as in LayerView.qml and this class
|
||||
def getLayerViewType(self):
|
||||
return self._layer_view_type
|
||||
|
||||
## Set the extruder opacity
|
||||
#
|
||||
# \param extruder_nr 0..3
|
||||
# \param opacity 0.0 .. 1.0
|
||||
def setExtruderOpacity(self, extruder_nr, opacity):
|
||||
self._extruder_opacity[extruder_nr] = opacity
|
||||
self.currentLayerNumChanged.emit()
|
||||
|
@ -185,19 +209,12 @@ class LayerView(View):
|
|||
def getShowTravelMoves(self):
|
||||
return self._show_travel_moves
|
||||
|
||||
def setShowSupport(self, show):
|
||||
self._show_support = show
|
||||
def setShowHelpers(self, show):
|
||||
self._show_helpers = show
|
||||
self.currentLayerNumChanged.emit()
|
||||
|
||||
def getShowSupport(self):
|
||||
return self._show_support
|
||||
|
||||
def setShowAdhesion(self, show):
|
||||
self._show_adhesion = show
|
||||
self.currentLayerNumChanged.emit()
|
||||
|
||||
def getShowAdhesion(self):
|
||||
return self._show_adhesion
|
||||
def getShowHelpers(self):
|
||||
return self._show_helpers
|
||||
|
||||
def setShowSkin(self, show):
|
||||
self._show_skin = show
|
||||
|
@ -251,6 +268,7 @@ class LayerView(View):
|
|||
maxLayersChanged = Signal()
|
||||
currentLayerNumChanged = Signal()
|
||||
globalStackChanged = Signal()
|
||||
preferencesChanged = Signal()
|
||||
|
||||
## Hackish way to ensure the proxy is already created, which ensures that the layerview.qml is already created
|
||||
# as this caused some issues.
|
||||
|
@ -260,6 +278,12 @@ class LayerView(View):
|
|||
def endRendering(self):
|
||||
pass
|
||||
|
||||
def enableLegend(self):
|
||||
Application.getInstance().setViewLegendItems(self._getLegendItems())
|
||||
|
||||
def disableLegend(self):
|
||||
Application.getInstance().setViewLegendItems([])
|
||||
|
||||
def event(self, event):
|
||||
modifiers = QApplication.keyboardModifiers()
|
||||
ctrl_is_active = modifiers == Qt.ControlModifier
|
||||
|
@ -292,7 +316,8 @@ class LayerView(View):
|
|||
self._old_composite_shader = self._composite_pass.getCompositeShader()
|
||||
self._composite_pass.setCompositeShader(self._layerview_composite_shader)
|
||||
|
||||
Application.getInstance().setViewLegendItems(self._getLegendItems())
|
||||
if self.getLayerViewType() == self.LAYER_VIEW_TYPE_LINE_TYPE or self._compatibility_mode:
|
||||
self.enableLegend()
|
||||
|
||||
elif event.type == Event.ViewDeactivateEvent:
|
||||
self._wireprint_warning_message.hide()
|
||||
|
@ -303,7 +328,7 @@ class LayerView(View):
|
|||
self._composite_pass.setLayerBindings(self._old_layer_bindings)
|
||||
self._composite_pass.setCompositeShader(self._old_composite_shader)
|
||||
|
||||
Application.getInstance().setViewLegendItems([])
|
||||
self.disableLegend()
|
||||
|
||||
def _onGlobalStackChanged(self):
|
||||
if self._global_container_stack:
|
||||
|
@ -350,14 +375,45 @@ class LayerView(View):
|
|||
|
||||
self._top_layers_job = None
|
||||
|
||||
def _onPreferencesChanged(self, preference):
|
||||
if preference not in {"view/top_layer_count", "view/only_show_top_layers", "view/compatibility_mode"}:
|
||||
return
|
||||
|
||||
def _updateWithPreferences(self):
|
||||
self._solid_layers = int(Preferences.getInstance().getValue("view/top_layer_count"))
|
||||
self._only_show_top_layers = bool(Preferences.getInstance().getValue("view/only_show_top_layers"))
|
||||
self._compatibility_mode = OpenGLContext.isLegacyOpenGL() or bool(
|
||||
Preferences.getInstance().getValue("view/force_layer_view_compatibility_mode"))
|
||||
|
||||
self.setLayerViewType(int(float(Preferences.getInstance().getValue("layerview/layer_view_type"))));
|
||||
|
||||
self.setExtruderOpacity(0, float(Preferences.getInstance().getValue("layerview/extruder0_opacity")))
|
||||
self.setExtruderOpacity(1, float(Preferences.getInstance().getValue("layerview/extruder1_opacity")))
|
||||
self.setExtruderOpacity(2, float(Preferences.getInstance().getValue("layerview/extruder2_opacity")))
|
||||
self.setExtruderOpacity(3, float(Preferences.getInstance().getValue("layerview/extruder3_opacity")))
|
||||
|
||||
self.setShowTravelMoves(bool(Preferences.getInstance().getValue("layerview/show_travel_moves")))
|
||||
self.setShowHelpers(bool(Preferences.getInstance().getValue("layerview/show_helpers")))
|
||||
self.setShowSkin(bool(Preferences.getInstance().getValue("layerview/show_skin")))
|
||||
self.setShowInfill(bool(Preferences.getInstance().getValue("layerview/show_infill")))
|
||||
|
||||
self._startUpdateTopLayers()
|
||||
self.preferencesChanged.emit()
|
||||
|
||||
def _onPreferencesChanged(self, preference):
|
||||
if preference not in {
|
||||
"view/top_layer_count",
|
||||
"view/only_show_top_layers",
|
||||
"view/force_layer_view_compatibility_mode",
|
||||
"layerview/layer_view_type",
|
||||
"layerview/extruder0_opacity",
|
||||
"layerview/extruder1_opacity",
|
||||
"layerview/extruder2_opacity",
|
||||
"layerview/extruder3_opacity",
|
||||
"layerview/show_travel_moves",
|
||||
"layerview/show_helpers",
|
||||
"layerview/show_skin",
|
||||
"layerview/show_infill",
|
||||
}:
|
||||
return
|
||||
|
||||
self._updateWithPreferences()
|
||||
|
||||
def _getLegendItems(self):
|
||||
if self._legend_items is None:
|
||||
|
|
|
@ -15,7 +15,7 @@ Item
|
|||
|
||||
Slider
|
||||
{
|
||||
id: slider2
|
||||
id: sliderMinimumLayer
|
||||
width: UM.Theme.getSize("slider_layerview_size").width
|
||||
height: UM.Theme.getSize("slider_layerview_size").height
|
||||
anchors.left: parent.left
|
||||
|
@ -75,7 +75,7 @@ Item
|
|||
border.color: UM.Theme.getColor("slider_groove_border")
|
||||
color: UM.Theme.getColor("tool_panel_background")
|
||||
|
||||
visible: UM.LayerView.getLayerActivity && Printer.getPlatformActivity ? true : false
|
||||
visible: UM.LayerView.layerActivity && Printer.platformActivity ? true : false
|
||||
|
||||
TextField
|
||||
{
|
||||
|
@ -148,10 +148,7 @@ Item
|
|||
|
||||
Rectangle {
|
||||
anchors.left: parent.right
|
||||
//anchors.verticalCenter: parent.verticalCenter
|
||||
//anchors.top: sidebar.top
|
||||
anchors.bottom: slider_background.top
|
||||
//anchors.topMargin: UM.Theme.getSize("default_margin").height
|
||||
anchors.leftMargin: UM.Theme.getSize("default_margin").width
|
||||
width: UM.Theme.getSize("layerview_menu_size").width
|
||||
height: UM.Theme.getSize("layerview_menu_size").height
|
||||
|
@ -169,15 +166,15 @@ Item
|
|||
text: catalog.i18nc("@label","Color scheme")
|
||||
}
|
||||
|
||||
ListModel
|
||||
ListModel // matches LayerView.py
|
||||
{
|
||||
id: layerViewTypes
|
||||
ListElement {
|
||||
text: "Material color"
|
||||
text: "Material Color"
|
||||
type_id: 0
|
||||
}
|
||||
ListElement {
|
||||
text: "Line type"
|
||||
text: "Line Type"
|
||||
type_id: 1 // these ids match the switching in the shader
|
||||
}
|
||||
}
|
||||
|
@ -185,145 +182,142 @@ Item
|
|||
ComboBox
|
||||
{
|
||||
id: layerTypeCombobox
|
||||
anchors.top: layerViewTypesLabel.bottom
|
||||
anchors.topMargin: UM.Theme.getSize("margin_small").height
|
||||
anchors.top: layerViewTypesLabel.bottom
|
||||
anchors.left: parent.left
|
||||
anchors.leftMargin: UM.Theme.getSize("default_margin").width
|
||||
anchors.right: parent.right
|
||||
anchors.rightMargin: UM.Theme.getSize("default_margin").width
|
||||
model: layerViewTypes
|
||||
visible: !UM.LayerView.compatibilityMode
|
||||
property int layer_view_type: UM.Preferences.getValue("layerview/layer_view_type")
|
||||
currentIndex: layer_view_type // index matches type_id
|
||||
onActivated: {
|
||||
UM.LayerView.setLayerViewType(layerViewTypes.get(index).type_id);
|
||||
// Combobox selection
|
||||
var type_id = layerViewTypes.get(index).type_id;
|
||||
UM.Preferences.setValue("layerview/layer_view_type", type_id);
|
||||
updateLegend();
|
||||
}
|
||||
onModelChanged: {
|
||||
updateLegend();
|
||||
}
|
||||
// Update visibility of legend.
|
||||
function updateLegend() {
|
||||
var type_id = layerViewTypes.get(currentIndex).type_id;
|
||||
if (UM.LayerView.compatibilityMode || (type_id == 1)) {
|
||||
// Line type
|
||||
UM.LayerView.enableLegend();
|
||||
} else {
|
||||
UM.LayerView.disableLegend();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Label
|
||||
{
|
||||
id: layerRangeTypeLabel
|
||||
anchors.top: layerTypeCombobox.bottom
|
||||
anchors.topMargin: UM.Theme.getSize("default_margin").height
|
||||
id: compatibilityModeLabel
|
||||
anchors.top: parent.top
|
||||
anchors.left: parent.left
|
||||
anchors.leftMargin: UM.Theme.getSize("default_margin").width
|
||||
text: catalog.i18nc("@label","Layer range")
|
||||
}
|
||||
|
||||
ListModel
|
||||
{
|
||||
id: layerRangeTypes
|
||||
ListElement {
|
||||
text: "All layers"
|
||||
range_type_id: 0
|
||||
}
|
||||
ListElement {
|
||||
text: "Layer range"
|
||||
range_type_id: 1
|
||||
}
|
||||
ListElement {
|
||||
text: "Single layer"
|
||||
range_type_id: 2
|
||||
}
|
||||
}
|
||||
|
||||
ComboBox
|
||||
{
|
||||
id: layerRangeTypeCombobox
|
||||
anchors.top: layerRangeTypeLabel.bottom
|
||||
anchors.topMargin: UM.Theme.getSize("margin_small").height
|
||||
anchors.left: parent.left
|
||||
anchors.leftMargin: UM.Theme.getSize("default_margin").width
|
||||
anchors.right: parent.right
|
||||
anchors.rightMargin: UM.Theme.getSize("default_margin").width
|
||||
model: layerRangeTypes
|
||||
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")
|
||||
text: catalog.i18nc("@label","Compatibility Mode")
|
||||
visible: UM.LayerView.compatibilityMode
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: UM.Preferences
|
||||
onPreferenceChanged:
|
||||
{
|
||||
layerTypeCombobox.layer_view_type = UM.Preferences.getValue("layerview/layer_view_type");
|
||||
view_settings.extruder0_checked = UM.Preferences.getValue("layerview/extruder0_opacity") > 0.5;
|
||||
view_settings.extruder1_checked = UM.Preferences.getValue("layerview/extruder1_opacity") > 0.5;
|
||||
view_settings.extruder2_checked = UM.Preferences.getValue("layerview/extruder2_opacity") > 0.5;
|
||||
view_settings.extruder3_checked = UM.Preferences.getValue("layerview/extruder3_opacity") > 0.5;
|
||||
view_settings.show_travel_moves = UM.Preferences.getValue("layerview/show_travel_moves");
|
||||
view_settings.show_helpers = UM.Preferences.getValue("layerview/show_helpers");
|
||||
view_settings.show_skin = UM.Preferences.getValue("layerview/show_skin");
|
||||
view_settings.show_infill = UM.Preferences.getValue("layerview/show_infill");
|
||||
}
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
id: view_settings
|
||||
anchors.top: layerRangeTypeCombobox.bottom
|
||||
|
||||
property bool extruder0_checked: UM.Preferences.getValue("layerview/extruder0_opacity") > 0.5
|
||||
property bool extruder1_checked: UM.Preferences.getValue("layerview/extruder1_opacity") > 0.5
|
||||
property bool extruder2_checked: UM.Preferences.getValue("layerview/extruder2_opacity") > 0.5
|
||||
property bool extruder3_checked: UM.Preferences.getValue("layerview/extruder3_opacity") > 0.5
|
||||
property bool show_travel_moves: UM.Preferences.getValue("layerview/show_travel_moves")
|
||||
property bool show_helpers: UM.Preferences.getValue("layerview/show_helpers")
|
||||
property bool show_skin: UM.Preferences.getValue("layerview/show_skin")
|
||||
property bool show_infill: UM.Preferences.getValue("layerview/show_infill")
|
||||
|
||||
anchors.top: UM.LayerView.compatibilityMode ? compatibilityModeLabel.bottom : layerTypeCombobox.bottom
|
||||
anchors.topMargin: UM.Theme.getSize("default_margin").height
|
||||
x: UM.Theme.getSize("default_margin").width
|
||||
anchors.left: parent.left
|
||||
anchors.leftMargin: UM.Theme.getSize("default_margin").width
|
||||
|
||||
CheckBox {
|
||||
checked: true
|
||||
checked: view_settings.extruder0_checked
|
||||
onClicked: {
|
||||
UM.LayerView.setExtruderOpacity(0, checked ? 1.0 : 0.0);
|
||||
UM.Preferences.setValue("layerview/extruder0_opacity", checked ? 1.0 : 0.0);
|
||||
}
|
||||
text: "Extruder 1"
|
||||
visible: !UM.LayerView.compatibilityMode && (UM.LayerView.getExtruderCount >= 1)
|
||||
visible: !UM.LayerView.compatibilityMode && (UM.LayerView.extruderCount >= 1)
|
||||
}
|
||||
CheckBox {
|
||||
checked: true
|
||||
checked: view_settings.extruder1_checked
|
||||
onClicked: {
|
||||
UM.LayerView.setExtruderOpacity(1, checked ? 1.0 : 0.0);
|
||||
UM.Preferences.setValue("layerview/extruder1_opacity", checked ? 1.0 : 0.0);
|
||||
}
|
||||
text: "Extruder 2"
|
||||
visible: !UM.LayerView.compatibilityMode && (UM.LayerView.getExtruderCount >= 2)
|
||||
visible: !UM.LayerView.compatibilityMode && (UM.LayerView.extruderCount >= 2)
|
||||
}
|
||||
CheckBox {
|
||||
checked: true
|
||||
checked: view_settings.extruder2_checked
|
||||
onClicked: {
|
||||
UM.LayerView.setExtruderOpacity(2, checked ? 1.0 : 0.0);
|
||||
UM.Preferences.setValue("layerview/extruder2_opacity", checked ? 1.0 : 0.0);
|
||||
}
|
||||
text: "Extruder 3"
|
||||
visible: !UM.LayerView.compatibilityMode && (UM.LayerView.getExtruderCount >= 3)
|
||||
visible: !UM.LayerView.compatibilityMode && (UM.LayerView.etruderCount >= 3)
|
||||
}
|
||||
CheckBox {
|
||||
checked: true
|
||||
checked: view_settings.extruder3_checked
|
||||
onClicked: {
|
||||
UM.LayerView.setExtruderOpacity(3, checked ? 1.0 : 0.0);
|
||||
UM.Preferences.setValue("layerview/extruder3_opacity", checked ? 1.0 : 0.0);
|
||||
}
|
||||
text: "Extruder 4"
|
||||
visible: !UM.LayerView.compatibilityMode && (UM.LayerView.getExtruderCount >= 4)
|
||||
visible: !UM.LayerView.compatibilityMode && (UM.LayerView.extruderCount >= 4)
|
||||
}
|
||||
Label {
|
||||
text: "Other extruders always visible"
|
||||
visible: !UM.LayerView.compatibilityMode && (UM.LayerView.getExtruderCount >= 5)
|
||||
visible: !UM.LayerView.compatibilityMode && (UM.LayerView.extruderCount >= 5)
|
||||
}
|
||||
CheckBox {
|
||||
checked: view_settings.show_travel_moves
|
||||
onClicked: {
|
||||
UM.LayerView.setShowTravelMoves(checked ? 1 : 0);
|
||||
UM.Preferences.setValue("layerview/show_travel_moves", checked);
|
||||
}
|
||||
text: "Show travel moves"
|
||||
text: catalog.i18nc("@label", "Show Travel Moves")
|
||||
}
|
||||
CheckBox {
|
||||
checked: true
|
||||
checked: view_settings.show_helpers
|
||||
onClicked: {
|
||||
UM.LayerView.setShowSupport(checked ? 1 : 0);
|
||||
UM.Preferences.setValue("layerview/show_helpers", checked);
|
||||
}
|
||||
text: "Show support"
|
||||
text: catalog.i18nc("@label", "Show Helpers")
|
||||
}
|
||||
CheckBox {
|
||||
checked: true
|
||||
checked: view_settings.show_skin
|
||||
onClicked: {
|
||||
UM.LayerView.setShowAdhesion(checked ? 1 : 0);
|
||||
UM.Preferences.setValue("layerview/show_skin", checked);
|
||||
}
|
||||
text: "Show adhesion"
|
||||
text: catalog.i18nc("@label", "Show Shell")
|
||||
}
|
||||
CheckBox {
|
||||
checked: true
|
||||
checked: view_settings.show_infill
|
||||
onClicked: {
|
||||
UM.LayerView.setShowSkin(checked ? 1 : 0);
|
||||
UM.Preferences.setValue("layerview/show_infill", checked);
|
||||
}
|
||||
text: "Show skin"
|
||||
}
|
||||
CheckBox {
|
||||
checked: true
|
||||
onClicked: {
|
||||
UM.LayerView.setShowInfill(checked ? 1 : 0);
|
||||
}
|
||||
text: "Show infill"
|
||||
text: catalog.i18nc("@label", "Show Infill")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,9 +17,10 @@ class LayerViewProxy(QObject):
|
|||
maxLayersChanged = pyqtSignal()
|
||||
activityChanged = pyqtSignal()
|
||||
globalStackChanged = pyqtSignal()
|
||||
preferencesChanged = pyqtSignal()
|
||||
|
||||
@pyqtProperty(bool, notify = activityChanged)
|
||||
def getLayerActivity(self):
|
||||
def layerActivity(self):
|
||||
active_view = self._controller.getActiveView()
|
||||
if type(active_view) == LayerView.LayerView.LayerView:
|
||||
return active_view.getActivity()
|
||||
|
@ -52,7 +53,7 @@ class LayerViewProxy(QObject):
|
|||
|
||||
return False
|
||||
|
||||
@pyqtProperty(bool)
|
||||
@pyqtProperty(bool, notify = preferencesChanged)
|
||||
def compatibilityMode(self):
|
||||
active_view = self._controller.getActiveView()
|
||||
if type(active_view) == LayerView.LayerView.LayerView:
|
||||
|
@ -78,7 +79,7 @@ class LayerViewProxy(QObject):
|
|||
if type(active_view) == LayerView.LayerView.LayerView:
|
||||
active_view.setLayerViewType(layer_view_type)
|
||||
|
||||
@pyqtProperty(bool)
|
||||
@pyqtSlot(result = int)
|
||||
def getLayerViewType(self):
|
||||
active_view = self._controller.getActiveView()
|
||||
if type(active_view) == LayerView.LayerView.LayerView:
|
||||
|
@ -99,16 +100,10 @@ class LayerViewProxy(QObject):
|
|||
active_view.setShowTravelMoves(show)
|
||||
|
||||
@pyqtSlot(int)
|
||||
def setShowSupport(self, show):
|
||||
def setShowHelpers(self, show):
|
||||
active_view = self._controller.getActiveView()
|
||||
if type(active_view) == LayerView.LayerView.LayerView:
|
||||
active_view.setShowSupport(show)
|
||||
|
||||
@pyqtSlot(int)
|
||||
def setShowAdhesion(self, show):
|
||||
active_view = self._controller.getActiveView()
|
||||
if type(active_view) == LayerView.LayerView.LayerView:
|
||||
active_view.setShowAdhesion(show)
|
||||
active_view.setShowHelpers(show)
|
||||
|
||||
@pyqtSlot(int)
|
||||
def setShowSkin(self, show):
|
||||
|
@ -123,12 +118,24 @@ class LayerViewProxy(QObject):
|
|||
active_view.setShowInfill(show)
|
||||
|
||||
@pyqtProperty(int, notify = globalStackChanged)
|
||||
def getExtruderCount(self):
|
||||
def extruderCount(self):
|
||||
active_view = self._controller.getActiveView()
|
||||
if type(active_view) == LayerView.LayerView.LayerView:
|
||||
return active_view.getExtruderCount()
|
||||
return 0
|
||||
|
||||
@pyqtSlot()
|
||||
def enableLegend(self):
|
||||
active_view = self._controller.getActiveView()
|
||||
if type(active_view) == LayerView.LayerView.LayerView:
|
||||
active_view.enableLegend()
|
||||
|
||||
@pyqtSlot()
|
||||
def disableLegend(self):
|
||||
active_view = self._controller.getActiveView()
|
||||
if type(active_view) == LayerView.LayerView.LayerView:
|
||||
active_view.disableLegend()
|
||||
|
||||
def _layerActivityChanged(self):
|
||||
self.activityChanged.emit()
|
||||
|
||||
|
@ -145,6 +152,9 @@ class LayerViewProxy(QObject):
|
|||
def _onGlobalStackChanged(self):
|
||||
self.globalStackChanged.emit()
|
||||
|
||||
def _onPreferencesChanged(self):
|
||||
self.preferencesChanged.emit()
|
||||
|
||||
def _onActiveViewChanged(self):
|
||||
active_view = self._controller.getActiveView()
|
||||
if type(active_view) == LayerView.LayerView.LayerView:
|
||||
|
@ -152,3 +162,4 @@ class LayerViewProxy(QObject):
|
|||
active_view.maxLayersChanged.connect(self._onMaxLayersChanged)
|
||||
active_view.busyChanged.connect(self._onBusyChanged)
|
||||
active_view.globalStackChanged.connect(self._onGlobalStackChanged)
|
||||
active_view.preferencesChanged.connect(self._onPreferencesChanged)
|
||||
|
|
|
@ -4,10 +4,9 @@ vertex =
|
|||
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 float a_extruder;
|
||||
attribute highp float a_line_type;
|
||||
attribute highp vec4 a_vertex;
|
||||
attribute lowp vec4 a_color;
|
||||
attribute lowp vec4 a_material_color;
|
||||
|
@ -18,11 +17,10 @@ vertex =
|
|||
void main()
|
||||
{
|
||||
gl_Position = u_modelViewProjectionMatrix * a_vertex;
|
||||
// shade the color depending on the extruder index
|
||||
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)) {
|
||||
// 8 and 9 are travel moves
|
||||
if ((a_line_type != 8.0) && (a_line_type != 9.0)) {
|
||||
v_color = (a_extruder == u_active_extruder) ? v_color : vec4(u_shade_factor * v_color.rgb, v_color.a);
|
||||
}
|
||||
|
||||
|
@ -34,8 +32,7 @@ fragment =
|
|||
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_helpers;
|
||||
uniform int u_show_skin;
|
||||
uniform int u_show_infill;
|
||||
|
||||
|
@ -45,11 +42,12 @@ fragment =
|
|||
// discard movements
|
||||
discard;
|
||||
}
|
||||
// support: 4, 7, 10
|
||||
if ((u_show_support == 0) && (
|
||||
// support: 4, 5, 7, 10
|
||||
if ((u_show_helpers == 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))
|
||||
((v_line_type >= 9.5) && (v_line_type <= 10.5)) ||
|
||||
((v_line_type >= 4.5) && (v_line_type <= 5.5))
|
||||
)) {
|
||||
discard;
|
||||
}
|
||||
|
@ -59,11 +57,6 @@ fragment =
|
|||
)) {
|
||||
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
|
||||
|
@ -73,16 +66,82 @@ fragment =
|
|||
gl_FragColor = v_color;
|
||||
}
|
||||
|
||||
vertex41core =
|
||||
#version 410
|
||||
uniform highp mat4 u_modelViewProjectionMatrix;
|
||||
uniform lowp float u_active_extruder;
|
||||
uniform lowp float u_shade_factor;
|
||||
uniform highp int u_layer_view_type;
|
||||
|
||||
in highp float a_extruder;
|
||||
in highp float a_line_type;
|
||||
in highp vec4 a_vertex;
|
||||
in lowp vec4 a_color;
|
||||
in lowp vec4 a_material_color;
|
||||
|
||||
out lowp vec4 v_color;
|
||||
out float v_line_type;
|
||||
|
||||
void main()
|
||||
{
|
||||
gl_Position = u_modelViewProjectionMatrix * a_vertex;
|
||||
v_color = a_color;
|
||||
if ((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;
|
||||
}
|
||||
|
||||
fragment41core =
|
||||
#version 410
|
||||
in lowp vec4 v_color;
|
||||
in float v_line_type;
|
||||
out vec4 frag_color;
|
||||
|
||||
uniform int u_show_travel_moves;
|
||||
uniform int u_show_helpers;
|
||||
uniform int u_show_skin;
|
||||
uniform int u_show_infill;
|
||||
|
||||
void main()
|
||||
{
|
||||
if ((u_show_travel_moves == 0) && (v_line_type >= 7.5) && (v_line_type <= 9.5)) { // actually, 8 and 9
|
||||
// discard movements
|
||||
discard;
|
||||
}
|
||||
// helpers: 4, 5, 7, 10
|
||||
if ((u_show_helpers == 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)) ||
|
||||
((v_line_type >= 4.5) && (v_line_type <= 5.5))
|
||||
)) {
|
||||
discard;
|
||||
}
|
||||
// skin: 1, 2, 3
|
||||
if ((u_show_skin == 0) && (
|
||||
(v_line_type >= 0.5) && (v_line_type <= 3.5)
|
||||
)) {
|
||||
discard;
|
||||
}
|
||||
// infill:
|
||||
if ((u_show_infill == 0) && (v_line_type >= 5.5) && (v_line_type <= 6.5)) {
|
||||
// discard movements
|
||||
discard;
|
||||
}
|
||||
|
||||
frag_color = 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_helpers = 1
|
||||
u_show_skin = 1
|
||||
u_show_infill = 1
|
||||
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
[shaders]
|
||||
vertex =
|
||||
vertex41core =
|
||||
#version 410
|
||||
uniform highp mat4 u_modelViewProjectionMatrix;
|
||||
|
||||
uniform highp mat4 u_modelMatrix;
|
||||
uniform highp mat4 u_viewProjectionMatrix;
|
||||
uniform lowp float u_active_extruder;
|
||||
|
@ -9,27 +11,26 @@ vertex =
|
|||
|
||||
uniform highp mat4 u_normalMatrix;
|
||||
|
||||
attribute highp vec4 a_vertex;
|
||||
attribute lowp vec4 a_color;
|
||||
attribute lowp vec4 a_material_color;
|
||||
attribute highp vec4 a_normal;
|
||||
attribute highp vec2 a_line_dim; // line width and thickness
|
||||
attribute highp int a_extruder;
|
||||
attribute highp int a_line_type;
|
||||
in highp vec4 a_vertex;
|
||||
in lowp vec4 a_color;
|
||||
in lowp vec4 a_material_color;
|
||||
in highp vec4 a_normal;
|
||||
in highp vec2 a_line_dim; // line width and thickness
|
||||
in highp int a_extruder; // Note: cannot use this in compatibility, int is only available in newer OpenGL.
|
||||
in highp float a_line_type;
|
||||
|
||||
varying lowp vec4 v_color;
|
||||
out lowp vec4 v_color;
|
||||
|
||||
varying highp vec3 v_vertex;
|
||||
varying highp vec3 v_normal;
|
||||
varying lowp vec2 v_line_dim;
|
||||
varying highp int v_extruder;
|
||||
varying highp vec4 v_extruder_opacity;
|
||||
varying int v_line_type;
|
||||
out highp vec3 v_vertex;
|
||||
out highp vec3 v_normal;
|
||||
out lowp vec2 v_line_dim;
|
||||
out highp int v_extruder;
|
||||
out highp vec4 v_extruder_opacity;
|
||||
out float v_line_type;
|
||||
|
||||
varying lowp vec4 f_color;
|
||||
varying highp vec3 f_vertex;
|
||||
varying highp vec3 f_normal;
|
||||
varying highp int f_extruder;
|
||||
out lowp vec4 f_color;
|
||||
out highp vec3 f_vertex;
|
||||
out highp vec3 f_normal;
|
||||
|
||||
void main()
|
||||
{
|
||||
|
@ -56,19 +57,18 @@ vertex =
|
|||
v_line_type = a_line_type;
|
||||
v_extruder_opacity = u_extruder_opacity;
|
||||
|
||||
// for testing and backwards compatibility without geometry shader
|
||||
/*f_color = v_color;
|
||||
// for testing without geometry shader
|
||||
f_color = v_color;
|
||||
f_vertex = v_vertex;
|
||||
f_normal = v_normal;*/
|
||||
f_normal = v_normal;
|
||||
}
|
||||
|
||||
geometry =
|
||||
geometry41core =
|
||||
#version 410
|
||||
|
||||
uniform highp mat4 u_viewProjectionMatrix;
|
||||
uniform int u_show_travel_moves;
|
||||
uniform int u_show_support;
|
||||
uniform int u_show_adhesion;
|
||||
uniform int u_show_helpers;
|
||||
uniform int u_show_skin;
|
||||
uniform int u_show_infill;
|
||||
|
||||
|
@ -81,12 +81,20 @@ geometry =
|
|||
in vec2 v_line_dim[];
|
||||
in int v_extruder[];
|
||||
in vec4 v_extruder_opacity[];
|
||||
in int v_line_type[];
|
||||
in float v_line_type[];
|
||||
|
||||
out vec4 f_color;
|
||||
out vec3 f_normal;
|
||||
out vec3 f_vertex;
|
||||
out uint f_extruder;
|
||||
|
||||
// Set the set of variables and EmitVertex
|
||||
void myEmitVertex(vec3 vertex, vec4 color, vec3 normal, vec4 pos) {
|
||||
f_vertex = vertex;
|
||||
f_color = color;
|
||||
f_normal = normal;
|
||||
gl_Position = pos;
|
||||
EmitVertex();
|
||||
}
|
||||
|
||||
void main()
|
||||
{
|
||||
|
@ -108,10 +116,7 @@ geometry =
|
|||
if ((u_show_travel_moves == 0) && ((v_line_type[0] == 8) || (v_line_type[0] == 9))) {
|
||||
return;
|
||||
}
|
||||
if ((u_show_support == 0) && ((v_line_type[0] == 4) || (v_line_type[0] == 7) || (v_line_type[0] == 10))) {
|
||||
return;
|
||||
}
|
||||
if ((u_show_adhesion == 0) && (v_line_type[0] == 5)) {
|
||||
if ((u_show_helpers == 0) && ((v_line_type[0] == 4) || (v_line_type[0] == 5) || (v_line_type[0] == 7) || (v_line_type[0] == 10))) {
|
||||
return;
|
||||
}
|
||||
if ((u_show_skin == 0) && ((v_line_type[0] == 1) || (v_line_type[0] == 2) || (v_line_type[0] == 3))) {
|
||||
|
@ -123,14 +128,11 @@ geometry =
|
|||
|
||||
if ((v_line_type[0] == 8) || (v_line_type[0] == 9)) {
|
||||
// fixed size for movements
|
||||
size_x = 0.1;
|
||||
size_y = 0.1;
|
||||
size_x = 0.2;
|
||||
} else {
|
||||
size_x = v_line_dim[0].x / 2 + 0.01; // radius, and make it nicely overlapping
|
||||
size_y = v_line_dim[0].y / 2 + 0.01;
|
||||
}
|
||||
|
||||
f_extruder = v_extruder[0];
|
||||
size_y = v_line_dim[0].y / 2 + 0.01;
|
||||
|
||||
g_vertex_delta = gl_in[1].gl_Position - gl_in[0].gl_Position;
|
||||
g_vertex_normal_horz_head = normalize(vec3(-g_vertex_delta.x, -g_vertex_delta.y, -g_vertex_delta.z));
|
||||
|
@ -142,154 +144,71 @@ geometry =
|
|||
g_vertex_normal_vert = vec3(0.0, 1.0, 0.0);
|
||||
g_vertex_offset_vert = vec4(g_vertex_normal_vert * size_y, 0.0);
|
||||
|
||||
f_vertex = v_vertex[0];
|
||||
f_color = v_color[0];
|
||||
f_normal = g_vertex_normal_horz;
|
||||
gl_Position = u_viewProjectionMatrix * (gl_in[0].gl_Position + g_vertex_offset_horz);
|
||||
EmitVertex();
|
||||
if ((v_line_type[0] == 8) || (v_line_type[0] == 9)) {
|
||||
// Travels: flat plane with pointy ends
|
||||
myEmitVertex(v_vertex[0], v_color[0], g_vertex_normal_vert, u_viewProjectionMatrix * (gl_in[0].gl_Position + g_vertex_offset_horz + g_vertex_offset_vert));
|
||||
myEmitVertex(v_vertex[0], v_color[0], g_vertex_normal_vert, u_viewProjectionMatrix * (gl_in[0].gl_Position + g_vertex_offset_horz_head + g_vertex_offset_vert));
|
||||
myEmitVertex(v_vertex[0], v_color[0], g_vertex_normal_vert, u_viewProjectionMatrix * (gl_in[0].gl_Position - g_vertex_offset_horz + g_vertex_offset_vert));
|
||||
myEmitVertex(v_vertex[0], v_color[0], g_vertex_normal_vert, u_viewProjectionMatrix * (gl_in[0].gl_Position + g_vertex_offset_horz + g_vertex_offset_vert));
|
||||
myEmitVertex(v_vertex[1], v_color[1], g_vertex_normal_vert, u_viewProjectionMatrix * (gl_in[1].gl_Position - g_vertex_offset_horz + g_vertex_offset_vert));
|
||||
myEmitVertex(v_vertex[1], v_color[1], g_vertex_normal_vert, u_viewProjectionMatrix * (gl_in[1].gl_Position + g_vertex_offset_horz + g_vertex_offset_vert));
|
||||
myEmitVertex(v_vertex[1], v_color[1], g_vertex_normal_vert, u_viewProjectionMatrix * (gl_in[1].gl_Position - g_vertex_offset_horz_head + g_vertex_offset_vert));
|
||||
|
||||
f_vertex = v_vertex[1];
|
||||
f_color = v_color[1];
|
||||
f_normal = g_vertex_normal_horz;
|
||||
gl_Position = u_viewProjectionMatrix * (gl_in[1].gl_Position + g_vertex_offset_horz);
|
||||
EmitVertex();
|
||||
EndPrimitive();
|
||||
} else {
|
||||
// All normal lines are rendered as 3d tubes.
|
||||
myEmitVertex(v_vertex[0], v_color[0], g_vertex_normal_horz, u_viewProjectionMatrix * (gl_in[0].gl_Position + g_vertex_offset_horz));
|
||||
myEmitVertex(v_vertex[1], v_color[1], g_vertex_normal_horz, u_viewProjectionMatrix * (gl_in[1].gl_Position + g_vertex_offset_horz));
|
||||
myEmitVertex(v_vertex[0], v_color[0], g_vertex_normal_vert, u_viewProjectionMatrix * (gl_in[0].gl_Position + g_vertex_offset_vert));
|
||||
myEmitVertex(v_vertex[1], v_color[1], g_vertex_normal_vert, u_viewProjectionMatrix * (gl_in[1].gl_Position + g_vertex_offset_vert));
|
||||
myEmitVertex(v_vertex[0], v_color[0], -g_vertex_normal_horz, u_viewProjectionMatrix * (gl_in[0].gl_Position - g_vertex_offset_horz));
|
||||
myEmitVertex(v_vertex[1], v_color[1], -g_vertex_normal_horz, u_viewProjectionMatrix * (gl_in[1].gl_Position - g_vertex_offset_horz));
|
||||
myEmitVertex(v_vertex[0], v_color[0], -g_vertex_normal_vert, u_viewProjectionMatrix * (gl_in[0].gl_Position - g_vertex_offset_vert));
|
||||
myEmitVertex(v_vertex[1], v_color[1], -g_vertex_normal_vert, u_viewProjectionMatrix * (gl_in[1].gl_Position - g_vertex_offset_vert));
|
||||
myEmitVertex(v_vertex[0], v_color[0], g_vertex_normal_horz, u_viewProjectionMatrix * (gl_in[0].gl_Position + g_vertex_offset_horz));
|
||||
myEmitVertex(v_vertex[1], v_color[1], g_vertex_normal_horz, u_viewProjectionMatrix * (gl_in[1].gl_Position + g_vertex_offset_horz));
|
||||
|
||||
f_vertex = v_vertex[0];
|
||||
f_color = v_color[0];
|
||||
f_normal = g_vertex_normal_vert;
|
||||
gl_Position = u_viewProjectionMatrix * (gl_in[0].gl_Position + g_vertex_offset_vert);
|
||||
EmitVertex();
|
||||
EndPrimitive();
|
||||
|
||||
f_vertex = v_vertex[1];
|
||||
f_color = v_color[1];
|
||||
f_normal = g_vertex_normal_vert;
|
||||
gl_Position = u_viewProjectionMatrix * (gl_in[1].gl_Position + g_vertex_offset_vert);
|
||||
EmitVertex();
|
||||
// left side
|
||||
myEmitVertex(v_vertex[0], v_color[0], g_vertex_normal_horz, u_viewProjectionMatrix * (gl_in[0].gl_Position + g_vertex_offset_horz));
|
||||
myEmitVertex(v_vertex[0], v_color[0], g_vertex_normal_vert, u_viewProjectionMatrix * (gl_in[0].gl_Position + g_vertex_offset_vert));
|
||||
myEmitVertex(v_vertex[0], v_color[0], g_vertex_normal_horz_head, u_viewProjectionMatrix * (gl_in[0].gl_Position + g_vertex_offset_horz_head));
|
||||
myEmitVertex(v_vertex[0], v_color[0], -g_vertex_normal_horz, u_viewProjectionMatrix * (gl_in[0].gl_Position - g_vertex_offset_horz));
|
||||
|
||||
f_vertex = v_vertex[0];
|
||||
f_normal = -g_vertex_normal_horz;
|
||||
f_color = v_color[0];
|
||||
gl_Position = u_viewProjectionMatrix * (gl_in[0].gl_Position - g_vertex_offset_horz);
|
||||
EmitVertex();
|
||||
EndPrimitive();
|
||||
|
||||
f_vertex = v_vertex[1];
|
||||
f_color = v_color[1];
|
||||
f_normal = -g_vertex_normal_horz;
|
||||
gl_Position = u_viewProjectionMatrix * (gl_in[1].gl_Position - g_vertex_offset_horz);
|
||||
EmitVertex();
|
||||
myEmitVertex(v_vertex[0], v_color[0], -g_vertex_normal_horz, u_viewProjectionMatrix * (gl_in[0].gl_Position - g_vertex_offset_horz));
|
||||
myEmitVertex(v_vertex[0], v_color[0], -g_vertex_normal_vert, u_viewProjectionMatrix * (gl_in[0].gl_Position - g_vertex_offset_vert));
|
||||
myEmitVertex(v_vertex[0], v_color[0], g_vertex_normal_horz_head, u_viewProjectionMatrix * (gl_in[0].gl_Position + g_vertex_offset_horz_head));
|
||||
myEmitVertex(v_vertex[0], v_color[0], g_vertex_normal_horz, u_viewProjectionMatrix * (gl_in[0].gl_Position + g_vertex_offset_horz));
|
||||
|
||||
f_vertex = v_vertex[0];
|
||||
f_color = v_color[0];
|
||||
f_normal = -g_vertex_normal_vert;
|
||||
gl_Position = u_viewProjectionMatrix * (gl_in[0].gl_Position - g_vertex_offset_vert);
|
||||
EmitVertex();
|
||||
EndPrimitive();
|
||||
|
||||
f_vertex = v_vertex[1];
|
||||
f_color = v_color[1];
|
||||
f_normal = -g_vertex_normal_vert;
|
||||
gl_Position = u_viewProjectionMatrix * (gl_in[1].gl_Position - g_vertex_offset_vert);
|
||||
EmitVertex();
|
||||
// right side
|
||||
myEmitVertex(v_vertex[1], v_color[1], g_vertex_normal_horz, u_viewProjectionMatrix * (gl_in[1].gl_Position + g_vertex_offset_horz));
|
||||
myEmitVertex(v_vertex[1], v_color[1], g_vertex_normal_vert, u_viewProjectionMatrix * (gl_in[1].gl_Position + g_vertex_offset_vert));
|
||||
myEmitVertex(v_vertex[1], v_color[1], -g_vertex_normal_horz_head, u_viewProjectionMatrix * (gl_in[1].gl_Position - g_vertex_offset_horz_head));
|
||||
myEmitVertex(v_vertex[1], v_color[1], -g_vertex_normal_horz, u_viewProjectionMatrix * (gl_in[1].gl_Position - g_vertex_offset_horz));
|
||||
|
||||
f_vertex = v_vertex[0];
|
||||
f_normal = g_vertex_normal_horz;
|
||||
f_color = v_color[0];
|
||||
gl_Position = u_viewProjectionMatrix * (gl_in[0].gl_Position + g_vertex_offset_horz);
|
||||
EmitVertex();
|
||||
EndPrimitive();
|
||||
|
||||
f_vertex = v_vertex[1];
|
||||
f_color = v_color[1];
|
||||
f_normal = g_vertex_normal_horz;
|
||||
gl_Position = u_viewProjectionMatrix * (gl_in[1].gl_Position + g_vertex_offset_horz);
|
||||
EmitVertex();
|
||||
myEmitVertex(v_vertex[1], v_color[1], -g_vertex_normal_horz, u_viewProjectionMatrix * (gl_in[1].gl_Position - g_vertex_offset_horz));
|
||||
myEmitVertex(v_vertex[1], v_color[1], -g_vertex_normal_vert, u_viewProjectionMatrix * (gl_in[1].gl_Position - g_vertex_offset_vert));
|
||||
myEmitVertex(v_vertex[1], v_color[1], -g_vertex_normal_horz_head, u_viewProjectionMatrix * (gl_in[1].gl_Position - g_vertex_offset_horz_head));
|
||||
myEmitVertex(v_vertex[1], v_color[1], g_vertex_normal_horz, u_viewProjectionMatrix * (gl_in[1].gl_Position + g_vertex_offset_horz));
|
||||
|
||||
EndPrimitive();
|
||||
|
||||
// left side
|
||||
f_vertex = v_vertex[0];
|
||||
f_color = v_color[0];
|
||||
|
||||
f_normal = g_vertex_normal_horz;
|
||||
gl_Position = u_viewProjectionMatrix * (gl_in[0].gl_Position + g_vertex_offset_horz);
|
||||
EmitVertex();
|
||||
|
||||
f_normal = g_vertex_normal_vert;
|
||||
gl_Position = u_viewProjectionMatrix * (gl_in[0].gl_Position + g_vertex_offset_vert);
|
||||
EmitVertex();
|
||||
|
||||
f_normal = g_vertex_normal_horz_head;
|
||||
gl_Position = u_viewProjectionMatrix * (gl_in[0].gl_Position + g_vertex_offset_horz_head);
|
||||
EmitVertex();
|
||||
|
||||
f_normal = -g_vertex_normal_horz;
|
||||
gl_Position = u_viewProjectionMatrix * (gl_in[0].gl_Position - g_vertex_offset_horz);
|
||||
EmitVertex();
|
||||
|
||||
EndPrimitive();
|
||||
|
||||
f_normal = -g_vertex_normal_horz;
|
||||
gl_Position = u_viewProjectionMatrix * (gl_in[0].gl_Position - g_vertex_offset_horz);
|
||||
EmitVertex();
|
||||
|
||||
f_normal = -g_vertex_normal_vert;
|
||||
gl_Position = u_viewProjectionMatrix * (gl_in[0].gl_Position - g_vertex_offset_vert);
|
||||
EmitVertex();
|
||||
|
||||
f_normal = g_vertex_normal_horz_head;
|
||||
gl_Position = u_viewProjectionMatrix * (gl_in[0].gl_Position + g_vertex_offset_horz_head);
|
||||
EmitVertex();
|
||||
|
||||
f_normal = g_vertex_normal_horz;
|
||||
gl_Position = u_viewProjectionMatrix * (gl_in[0].gl_Position + g_vertex_offset_horz);
|
||||
EmitVertex();
|
||||
|
||||
EndPrimitive();
|
||||
|
||||
// right side
|
||||
f_vertex = v_vertex[1];
|
||||
f_color = v_color[1];
|
||||
|
||||
f_normal = g_vertex_normal_horz;
|
||||
gl_Position = u_viewProjectionMatrix * (gl_in[1].gl_Position + g_vertex_offset_horz);
|
||||
EmitVertex();
|
||||
|
||||
f_normal = g_vertex_normal_vert;
|
||||
gl_Position = u_viewProjectionMatrix * (gl_in[1].gl_Position + g_vertex_offset_vert);
|
||||
EmitVertex();
|
||||
|
||||
f_normal = -g_vertex_normal_horz_head;
|
||||
gl_Position = u_viewProjectionMatrix * (gl_in[1].gl_Position - g_vertex_offset_horz_head);
|
||||
EmitVertex();
|
||||
|
||||
f_normal = -g_vertex_normal_horz;
|
||||
gl_Position = u_viewProjectionMatrix * (gl_in[1].gl_Position - g_vertex_offset_horz);
|
||||
EmitVertex();
|
||||
|
||||
EndPrimitive();
|
||||
|
||||
f_normal = -g_vertex_normal_horz;
|
||||
gl_Position = u_viewProjectionMatrix * (gl_in[1].gl_Position - g_vertex_offset_horz);
|
||||
EmitVertex();
|
||||
|
||||
f_normal = -g_vertex_normal_vert;
|
||||
gl_Position = u_viewProjectionMatrix * (gl_in[1].gl_Position - g_vertex_offset_vert);
|
||||
EmitVertex();
|
||||
|
||||
f_normal = -g_vertex_normal_horz_head;
|
||||
gl_Position = u_viewProjectionMatrix * (gl_in[1].gl_Position - g_vertex_offset_horz_head);
|
||||
EmitVertex();
|
||||
|
||||
f_normal = g_vertex_normal_horz;
|
||||
gl_Position = u_viewProjectionMatrix * (gl_in[1].gl_Position + g_vertex_offset_horz);
|
||||
EmitVertex();
|
||||
|
||||
EndPrimitive();
|
||||
EndPrimitive();
|
||||
}
|
||||
}
|
||||
|
||||
fragment =
|
||||
fragment41core =
|
||||
#version 410
|
||||
varying lowp vec4 f_color;
|
||||
varying lowp vec3 f_normal;
|
||||
varying lowp vec3 f_vertex;
|
||||
in lowp vec4 f_color;
|
||||
in lowp vec3 f_normal;
|
||||
in lowp vec3 f_vertex;
|
||||
|
||||
out vec4 frag_color;
|
||||
|
||||
uniform mediump vec4 u_ambientColor;
|
||||
uniform highp vec3 u_lightPosition;
|
||||
|
@ -302,14 +221,14 @@ fragment =
|
|||
finalColor.rgb += f_color.rgb * 0.3;
|
||||
|
||||
highp vec3 normal = normalize(f_normal);
|
||||
highp vec3 lightDir = normalize(u_lightPosition - f_vertex);
|
||||
highp vec3 light_dir = normalize(u_lightPosition - f_vertex);
|
||||
|
||||
// Diffuse Component
|
||||
highp float NdotL = clamp(dot(normal, lightDir), 0.0, 1.0);
|
||||
highp float NdotL = clamp(dot(normal, light_dir), 0.0, 1.0);
|
||||
finalColor += (NdotL * f_color);
|
||||
finalColor.a = alpha; // Do not change alpha in any way
|
||||
|
||||
gl_FragColor = finalColor;
|
||||
frag_color = finalColor;
|
||||
}
|
||||
|
||||
|
||||
|
@ -324,8 +243,7 @@ u_diffuseColor = [1.0, 0.79, 0.14, 1.0]
|
|||
u_shininess = 20.0
|
||||
|
||||
u_show_travel_moves = 0
|
||||
u_show_support = 1
|
||||
u_show_adhesion = 1
|
||||
u_show_helpers = 1
|
||||
u_show_skin = 1
|
||||
u_show_infill = 1
|
||||
|
||||
|
|
|
@ -33,6 +33,7 @@ fragment =
|
|||
|
||||
void main()
|
||||
{
|
||||
// blur kernel
|
||||
kernel[0] = 0.0; kernel[1] = 1.0; kernel[2] = 0.0;
|
||||
kernel[3] = 1.0; kernel[4] = -4.0; kernel[5] = 1.0;
|
||||
kernel[6] = 0.0; kernel[7] = 1.0; kernel[8] = 0.0;
|
||||
|
@ -63,6 +64,75 @@ fragment =
|
|||
}
|
||||
}
|
||||
|
||||
vertex41core =
|
||||
#version 410
|
||||
uniform highp mat4 u_modelViewProjectionMatrix;
|
||||
in highp vec4 a_vertex;
|
||||
in highp vec2 a_uvs;
|
||||
|
||||
out highp vec2 v_uvs;
|
||||
|
||||
void main()
|
||||
{
|
||||
gl_Position = u_modelViewProjectionMatrix * a_vertex;
|
||||
v_uvs = a_uvs;
|
||||
}
|
||||
|
||||
fragment41core =
|
||||
#version 410
|
||||
uniform sampler2D u_layer0;
|
||||
uniform sampler2D u_layer1;
|
||||
uniform sampler2D u_layer2;
|
||||
|
||||
uniform vec2 u_offset[9];
|
||||
|
||||
uniform vec4 u_background_color;
|
||||
uniform float u_outline_strength;
|
||||
uniform vec4 u_outline_color;
|
||||
|
||||
in vec2 v_uvs;
|
||||
|
||||
float kernel[9];
|
||||
|
||||
const vec3 x_axis = vec3(1.0, 0.0, 0.0);
|
||||
const vec3 y_axis = vec3(0.0, 1.0, 0.0);
|
||||
const vec3 z_axis = vec3(0.0, 0.0, 1.0);
|
||||
|
||||
out vec4 frag_color;
|
||||
|
||||
void main()
|
||||
{
|
||||
// blur kernel
|
||||
kernel[0] = 0.0; kernel[1] = 1.0; kernel[2] = 0.0;
|
||||
kernel[3] = 1.0; kernel[4] = -4.0; kernel[5] = 1.0;
|
||||
kernel[6] = 0.0; kernel[7] = 1.0; kernel[8] = 0.0;
|
||||
|
||||
vec4 result = u_background_color;
|
||||
|
||||
vec4 main_layer = texture(u_layer0, v_uvs);
|
||||
vec4 selection_layer = texture(u_layer1, v_uvs);
|
||||
vec4 layerview_layer = texture(u_layer2, v_uvs);
|
||||
|
||||
result = main_layer * main_layer.a + result * (1.0 - main_layer.a);
|
||||
result = layerview_layer * layerview_layer.a + result * (1.0 - layerview_layer.a);
|
||||
|
||||
vec4 sum = vec4(0.0);
|
||||
for (int i = 0; i < 9; i++)
|
||||
{
|
||||
vec4 color = vec4(texture(u_layer1, v_uvs.xy + u_offset[i]).a);
|
||||
sum += color * (kernel[i] / u_outline_strength);
|
||||
}
|
||||
|
||||
if((selection_layer.rgb == x_axis || selection_layer.rgb == y_axis || selection_layer.rgb == z_axis))
|
||||
{
|
||||
frag_color = result;
|
||||
}
|
||||
else
|
||||
{
|
||||
frag_color = mix(result, u_outline_color, abs(sum.a));
|
||||
}
|
||||
}
|
||||
|
||||
[defaults]
|
||||
u_layer0 = 0
|
||||
u_layer1 = 1
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue