diff --git a/meshroom/nodes/aliceVision/ConvertSfMFormat.py b/meshroom/nodes/aliceVision/ConvertSfMFormat.py
index de64850574..09822aacdf 100644
--- a/meshroom/nodes/aliceVision/ConvertSfMFormat.py
+++ b/meshroom/nodes/aliceVision/ConvertSfMFormat.py
@@ -38,6 +38,7 @@ class ConvertSfMFormat(desc.AVCommandLineNode):
value=["dspsift"],
exclusive=False,
joinChar=",",
+ exposed=True,
),
desc.ListAttribute(
elementDesc=desc.File(
diff --git a/meshroom/nodes/aliceVision/FeatureExtraction.py b/meshroom/nodes/aliceVision/FeatureExtraction.py
index 29e7afd483..037a02631e 100644
--- a/meshroom/nodes/aliceVision/FeatureExtraction.py
+++ b/meshroom/nodes/aliceVision/FeatureExtraction.py
@@ -66,6 +66,7 @@ class FeatureExtraction(desc.AVCommandLineNode):
value=["dspsift"],
exclusive=False,
joinChar=",",
+ exposed=True,
),
desc.ChoiceParam(
name="describerPreset",
diff --git a/meshroom/nodes/aliceVision/FeatureMatching.py b/meshroom/nodes/aliceVision/FeatureMatching.py
index 10aba6f0e0..fcff21d7a1 100644
--- a/meshroom/nodes/aliceVision/FeatureMatching.py
+++ b/meshroom/nodes/aliceVision/FeatureMatching.py
@@ -50,6 +50,7 @@ class FeatureMatching(desc.AVCommandLineNode):
name="featuresFolders",
label="Features Folders",
description="Folder(s) containing the extracted features and descriptors.",
+ exposed=True,
),
desc.File(
name="imagePairsList",
@@ -65,6 +66,7 @@ class FeatureMatching(desc.AVCommandLineNode):
value=["dspsift"],
exclusive=False,
joinChar=",",
+ exposed=True,
),
desc.ChoiceParam(
name="photometricMatchingMethod",
diff --git a/meshroom/nodes/aliceVision/ImageMatching.py b/meshroom/nodes/aliceVision/ImageMatching.py
index c87e7be20e..e5aa0b728a 100644
--- a/meshroom/nodes/aliceVision/ImageMatching.py
+++ b/meshroom/nodes/aliceVision/ImageMatching.py
@@ -50,6 +50,7 @@ class ImageMatching(desc.AVCommandLineNode):
name="featuresFolders",
label="Features Folders",
description="Folder(s) containing the extracted features and descriptors.",
+ exposed=True,
),
desc.ChoiceParam(
name="method",
diff --git a/meshroom/nodes/aliceVision/ImageMatchingMultiSfM.py b/meshroom/nodes/aliceVision/ImageMatchingMultiSfM.py
index 8040dce19a..ce90f20554 100644
--- a/meshroom/nodes/aliceVision/ImageMatchingMultiSfM.py
+++ b/meshroom/nodes/aliceVision/ImageMatchingMultiSfM.py
@@ -41,6 +41,7 @@ class ImageMatchingMultiSfM(desc.AVCommandLineNode):
name="featuresFolders",
label="Features Folders",
description="Folder(s) containing the extracted features and descriptors.",
+ exposed=True,
),
desc.ChoiceParam(
name="method",
diff --git a/meshroom/nodes/aliceVision/LdrToHdrCalibration.py b/meshroom/nodes/aliceVision/LdrToHdrCalibration.py
index 1270e6e743..a461db992d 100644
--- a/meshroom/nodes/aliceVision/LdrToHdrCalibration.py
+++ b/meshroom/nodes/aliceVision/LdrToHdrCalibration.py
@@ -61,6 +61,7 @@ class LdrToHdrCalibration(desc.AVCommandLineNode):
group="user", # not used directly on the command line
errorMessage="The set number of brackets is not a multiple of the number of input images.\n"
"Errors will occur during the computation.",
+ exposed=True,
),
desc.IntParam(
name="nbBrackets",
@@ -78,6 +79,7 @@ class LdrToHdrCalibration(desc.AVCommandLineNode):
description="Bypass HDR creation and use the medium bracket as the source for the next steps.",
value=False,
enabled=lambda node: node.nbBrackets.value != 1,
+ exposed=True,
),
desc.ChoiceParam(
name="calibrationMethod",
@@ -92,6 +94,7 @@ class LdrToHdrCalibration(desc.AVCommandLineNode):
value="auto",
exclusive=True,
enabled=lambda node: node.byPass.enabled and not node.byPass.value,
+ exposed=True,
),
desc.ChoiceParam(
name="calibrationWeight",
@@ -114,6 +117,7 @@ class LdrToHdrCalibration(desc.AVCommandLineNode):
range=(8, 14, 1),
advanced=True,
enabled=lambda node: node.byPass.enabled and not node.byPass.value,
+ exposed=True,
),
desc.ChoiceParam(
name="workingColorSpace",
@@ -126,6 +130,7 @@ class LdrToHdrCalibration(desc.AVCommandLineNode):
invalidate=False,
group="user", # not used directly on the command line
enabled=lambda node: node.byPass.enabled and not node.byPass.value,
+ exposed=True,
),
desc.IntParam(
name="maxTotalPoints",
diff --git a/meshroom/nodes/aliceVision/LdrToHdrMerge.py b/meshroom/nodes/aliceVision/LdrToHdrMerge.py
index 624e32ccb4..929de5063e 100644
--- a/meshroom/nodes/aliceVision/LdrToHdrMerge.py
+++ b/meshroom/nodes/aliceVision/LdrToHdrMerge.py
@@ -60,6 +60,7 @@ class LdrToHdrMerge(desc.AVCommandLineNode):
group="user", # not used directly on the command line
errorMessage="The set number of brackets is not a multiple of the number of input images.\n"
"Errors will occur during the computation.",
+ exposed=True,
),
desc.IntParam(
name="nbBrackets",
@@ -124,6 +125,7 @@ class LdrToHdrMerge(desc.AVCommandLineNode):
description="Bypass HDR creation and use the medium bracket as the source for the next steps.",
value=False,
enabled=lambda node: node.nbBrackets.value != 1,
+ exposed=True,
),
desc.BoolParam(
name="keepSourceImageName",
@@ -151,6 +153,7 @@ class LdrToHdrMerge(desc.AVCommandLineNode):
range=(8, 14, 1),
advanced=True,
enabled=lambda node: node.byPass.enabled and not node.byPass.value,
+ exposed=True,
),
desc.ChoiceParam(
name="workingColorSpace",
@@ -161,6 +164,7 @@ class LdrToHdrMerge(desc.AVCommandLineNode):
value="AUTO",
exclusive=True,
enabled=lambda node: node.byPass.enabled and not node.byPass.value,
+ exposed=True,
),
desc.BoolParam(
name="enableHighlight",
diff --git a/meshroom/nodes/aliceVision/LdrToHdrSampling.py b/meshroom/nodes/aliceVision/LdrToHdrSampling.py
index 19a359fef6..061e994629 100644
--- a/meshroom/nodes/aliceVision/LdrToHdrSampling.py
+++ b/meshroom/nodes/aliceVision/LdrToHdrSampling.py
@@ -76,6 +76,7 @@ class LdrToHdrSampling(desc.AVCommandLineNode):
group="user", # not used directly on the command line
errorMessage="The set number of brackets is not a multiple of the number of input images.\n"
"Errors will occur during the computation.",
+ exposed=True,
),
desc.IntParam(
name="nbBrackets",
@@ -93,6 +94,7 @@ class LdrToHdrSampling(desc.AVCommandLineNode):
description="Bypass HDR creation and use the medium bracket as the source for the next steps.",
value=False,
enabled=lambda node: node.nbBrackets.value != 1,
+ exposed=True,
),
desc.ChoiceParam(
name="calibrationMethod",
@@ -107,6 +109,7 @@ class LdrToHdrSampling(desc.AVCommandLineNode):
value="auto",
exclusive=True,
enabled=lambda node: node.byPass.enabled and not node.byPass.value,
+ exposed=True,
),
desc.IntParam(
name="channelQuantizationPower",
@@ -116,6 +119,7 @@ class LdrToHdrSampling(desc.AVCommandLineNode):
range=(8, 14, 1),
advanced=True,
enabled=lambda node: node.byPass.enabled and not node.byPass.value,
+ exposed=True,
),
desc.ChoiceParam(
name="workingColorSpace",
@@ -126,6 +130,7 @@ class LdrToHdrSampling(desc.AVCommandLineNode):
value="AUTO",
exclusive=True,
enabled=lambda node: node.byPass.enabled and not node.byPass.value,
+ exposed=True,
),
desc.IntParam(
name="blockSize",
diff --git a/meshroom/nodes/aliceVision/PanoramaCompositing.py b/meshroom/nodes/aliceVision/PanoramaCompositing.py
index 983f53387c..811a0ddce7 100644
--- a/meshroom/nodes/aliceVision/PanoramaCompositing.py
+++ b/meshroom/nodes/aliceVision/PanoramaCompositing.py
@@ -75,6 +75,7 @@ class PanoramaCompositing(desc.AVCommandLineNode):
label="Use Tiling",
description="Enable tiling mode for parallelization.",
value=True,
+ exposed=True,
),
desc.ChoiceParam(
name="storageDataType",
diff --git a/meshroom/nodes/aliceVision/PanoramaEstimation.py b/meshroom/nodes/aliceVision/PanoramaEstimation.py
index e1361c0688..80034348c5 100644
--- a/meshroom/nodes/aliceVision/PanoramaEstimation.py
+++ b/meshroom/nodes/aliceVision/PanoramaEstimation.py
@@ -33,6 +33,7 @@ class PanoramaEstimation(desc.AVCommandLineNode):
name="featuresFolders",
label="Features Folders",
description="Folder(s) containing the extracted features.",
+ exposed=True,
),
desc.ListAttribute(
elementDesc=desc.File(
@@ -53,6 +54,7 @@ class PanoramaEstimation(desc.AVCommandLineNode):
value=["sift"],
exclusive=False,
joinChar=",",
+ exposed=True,
),
desc.FloatParam(
name="offsetLongitude",
diff --git a/meshroom/nodes/aliceVision/PanoramaMerging.py b/meshroom/nodes/aliceVision/PanoramaMerging.py
index 4e5d792478..b684bd592d 100644
--- a/meshroom/nodes/aliceVision/PanoramaMerging.py
+++ b/meshroom/nodes/aliceVision/PanoramaMerging.py
@@ -45,6 +45,7 @@ class PanoramaMerging(desc.AVCommandLineNode):
label="Use Tiling",
description="Enable tiling mode for parallelization.",
value=True,
+ exposed=True,
),
desc.ChoiceParam(
name="storageDataType",
diff --git a/meshroom/nodes/aliceVision/SfMTriangulation.py b/meshroom/nodes/aliceVision/SfMTriangulation.py
index e7a87ae540..025dbf47cf 100644
--- a/meshroom/nodes/aliceVision/SfMTriangulation.py
+++ b/meshroom/nodes/aliceVision/SfMTriangulation.py
@@ -31,6 +31,7 @@ class SfMTriangulation(desc.AVCommandLineNode):
name="featuresFolders",
label="Features Folders",
description="Folder(s) containing the extracted features and descriptors.",
+ exposed=True,
),
desc.ListAttribute(
elementDesc=desc.File(
@@ -42,6 +43,7 @@ class SfMTriangulation(desc.AVCommandLineNode):
name="matchesFolders",
label="Matches Folders",
description="Folder(s) in which computed matches are stored.",
+ exposed=True,
),
desc.ChoiceParam(
name="describerTypes",
diff --git a/meshroom/nodes/aliceVision/StructureFromMotion.py b/meshroom/nodes/aliceVision/StructureFromMotion.py
index d9b20585db..f16c92f129 100644
--- a/meshroom/nodes/aliceVision/StructureFromMotion.py
+++ b/meshroom/nodes/aliceVision/StructureFromMotion.py
@@ -82,6 +82,7 @@ class StructureFromMotion(desc.AVCommandLineNode):
name="featuresFolders",
label="Features Folders",
description="Folder(s) containing the extracted features and descriptors.",
+ exposed=True,
),
desc.ListAttribute(
elementDesc=desc.File(
@@ -93,6 +94,7 @@ class StructureFromMotion(desc.AVCommandLineNode):
name="matchesFolders",
label="Matches Folders",
description="Folder(s) in which the computed matches are stored.",
+ exposed=True,
),
desc.ChoiceParam(
name="describerTypes",
@@ -102,6 +104,7 @@ class StructureFromMotion(desc.AVCommandLineNode):
value=["dspsift"],
exclusive=False,
joinChar=",",
+ exposed=True,
),
desc.ChoiceParam(
name="localizerEstimator",
diff --git a/meshroom/nodes/aliceVision/TracksBuilding.py b/meshroom/nodes/aliceVision/TracksBuilding.py
index 870c6339d4..c6cb841ea2 100644
--- a/meshroom/nodes/aliceVision/TracksBuilding.py
+++ b/meshroom/nodes/aliceVision/TracksBuilding.py
@@ -30,6 +30,7 @@ class TracksBuilding(desc.AVCommandLineNode):
name="featuresFolders",
label="Features Folders",
description="Folder(s) containing the extracted features and descriptors.",
+ exposed=True,
),
desc.ListAttribute(
elementDesc=desc.File(
diff --git a/meshroom/ui/qml/Application.qml b/meshroom/ui/qml/Application.qml
index 05b986ab43..02e02e48fa 100644
--- a/meshroom/ui/qml/Application.qml
+++ b/meshroom/ui/qml/Application.qml
@@ -591,9 +591,14 @@ Page {
elide: Text.ElideLeft
elideWidth: newPipelineMenu.maxWidth
}
- ToolTip.text: modelData["path"]
- ToolTip.visible: hovered
- ToolTip.delay: 200
+
+ ToolTip {
+ id: toolTip
+
+ delay: 200
+ text: modelData["path"]
+ visible: hovered
+ }
}
}
}
@@ -1037,7 +1042,7 @@ Page {
headerBar: RowLayout {
MaterialToolButton {
- text: MaterialIcons.refresh
+ text: MaterialIcons.sync
ToolTip.text: "Refresh Nodes Status"
ToolTip.visible: hovered
font.pointSize: 11
@@ -1051,45 +1056,30 @@ Page {
enabled: !updatingStatus
}
MaterialToolButton {
- id: filePollerRefreshStatus
- text: {
- if (_reconstruction.filePollerRefresh === 0)
- return MaterialIcons.published_with_changes
- else if (_reconstruction.filePollerRefresh === 2)
- return MaterialIcons.sync
- else
- return MaterialIcons.sync_disabled
- }
+ text: MaterialIcons.more_vert
font.pointSize: 11
padding: 2
- enabled: true
- ToolTip {
- id: filePollerTooltip
- property string title: "Auto-Refresh Nodes Status For External Changes. "
- property string description: "Check if the status of a node is changed by another instance on the same network, " +
- "such as when computing in render farm."
- text: {
- var status = ""
- if (_reconstruction.filePollerRefresh === 0)
- status = "Enabled"
- else if (_reconstruction.filePollerRefresh === 2)
- status = "Minimal"
- else
- status = "Disabled"
- return title + "(Current: " + status + ")\n\n" + description
- }
- visible: filePollerRefreshStatus.hovered
- contentWidth: 420
- }
- onClicked: {
- refreshFilesMenu.open()
- }
+ onClicked: graphEditorMenu.open()
+ checkable: true
+ checked: graphEditorMenu.visible
Menu {
- id: refreshFilesMenu
- width: 210
+ id: graphEditorMenu
y: parent.height
x: -width + parent.width
MenuItem {
+ text: "Clear Pending Status"
+ enabled: _reconstruction ? !_reconstruction.computingLocally : false
+ onTriggered: _reconstruction.graph.clearSubmittedNodes()
+ }
+ MenuItem {
+ text: "Force Unlock Nodes"
+ onTriggered: _reconstruction.graph.forceUnlockNodes()
+ }
+
+ Menu {
+ title: "Refresh Nodes Status"
+
+ MenuItem {
id: enableAutoRefresh
text: "Enable Auto-Refresh"
checkable: true
@@ -1105,8 +1095,6 @@ Page {
}
// Prevents cases where the user unchecks the currently checked option
enableAutoRefresh.checked = true
- filePollerRefreshStatus.text = MaterialIcons.published_with_changes
- filePollerTooltip.text = filePollerTooltip.title + "(Current: Enabled)\n\n" + filePollerTooltip.description
}
}
MenuItem {
@@ -1125,8 +1113,6 @@ Page {
}
// Prevents cases where the user unchecks the currently checked option
disableAutoRefresh.checked = true
- filePollerRefreshStatus.text = MaterialIcons.sync_disabled
- filePollerTooltip.text = filePollerTooltip.title + "(Current: Disabled)\n\n" + filePollerTooltip.description
}
}
MenuItem {
@@ -1145,31 +1131,8 @@ Page {
}
// Prevents cases where the user unchecks the currently checked option
minimalAutoRefresh.checked = true
- filePollerRefreshStatus.text = MaterialIcons.sync
- filePollerTooltip.text = filePollerTooltip.title + "(Current: Minimal)\n\n" + filePollerTooltip.description
}
}
- }
- }
- MaterialToolButton {
- text: MaterialIcons.more_vert
- font.pointSize: 11
- padding: 2
- onClicked: graphEditorMenu.open()
- checkable: true
- checked: graphEditorMenu.visible
- Menu {
- id: graphEditorMenu
- y: parent.height
- x: -width + parent.width
- MenuItem {
- text: "Clear Pending Status"
- enabled: _reconstruction ? !_reconstruction.computingLocally : false
- onTriggered: _reconstruction.graph.clearSubmittedNodes()
- }
- MenuItem {
- text: "Force Unlock Nodes"
- onTriggered: _reconstruction.graph.forceUnlockNodes()
}
}
}
diff --git a/meshroom/ui/qml/GraphEditor/AttributeItemDelegate.qml b/meshroom/ui/qml/GraphEditor/AttributeItemDelegate.qml
index f6f1de7b9e..83f26c1288 100644
--- a/meshroom/ui/qml/GraphEditor/AttributeItemDelegate.qml
+++ b/meshroom/ui/qml/GraphEditor/AttributeItemDelegate.qml
@@ -33,7 +33,7 @@ RowLayout {
var tooltip = ""
if (!attribute.validValue && attribute.desc.errorMessage !== "")
tooltip += "Error: " + Format.plainToHtml(attribute.desc.errorMessage) + "
"
- tooltip += " " + attribute.desc.name + ": " + attribute.type + "
" + Format.plainToHtml(attribute.desc.description)
+ tooltip += " " + attribute.desc.name + ": " + attribute.type + "
" + Format.plainToHtml(attribute.desc.description)
parameterTooltip.text = tooltip
}
@@ -78,7 +78,7 @@ RowLayout {
var tooltip = ""
if (!object.validValue && object.desc.errorMessage !== "")
tooltip += "Error: " + Format.plainToHtml(object.desc.errorMessage) + "
"
- tooltip += "" + object.desc.name + ": " + attribute.type + "
" + Format.plainToHtml(object.description)
+ tooltip += "" + object.desc.name + ": " + attribute.type + "
" + Format.plainToHtml(object.description)
return tooltip
}
visible: parameterMA.containsMouse