Revision control
Copy as Markdown
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
import QtQuick 2.15
import QtQuick.Layouts 1.15
import HelperWidgets 2.0
import StudioTheme 1.0 as StudioTheme
Column {
width: parent.width
Section {
caption: qsTr("Model")
width: parent.width
SectionLayout {
PropertyLabel {
text: qsTr("Source")
tooltip: qsTr("Sets the location of the mesh file containing the geometry of this model.")
}
SecondColumnLayout {
UrlChooser {
id: sourceUrlChooser
backendValue: backendValues.source
filter: "*.mesh"
defaultItems: ["#Rectangle" ,"#Sphere" ,"#Cube" ,"#Cone" ,"#Cylinder"]
}
ExpandingSpacer {}
}
PropertyLabel {
text: qsTr("Geometry")
tooltip: qsTr("Sets a custom geometry for the model")
}
SecondColumnLayout {
ItemFilterComboBox {
id: geometryComboBox
typeFilter: "QtQuick3D.Geometry"
backendValue: backendValues.geometry
implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ StudioTheme.Values.actionIndicatorWidth
Connections {
target: geometryComboBox.backendValue
function onExpressionChanged() {
if (geometryComboBox.backendValue.expression !== "" &&
sourceUrlChooser.backendValue.expression !== "")
sourceUrlChooser.backendValue.resetValue()
}
}
}
ExpandingSpacer {}
}
PropertyLabel {
text: qsTr("Materials")
Layout.alignment: Qt.AlignTop
Layout.topMargin: 5
}
SecondColumnLayout {
EditableListView {
backendValue: backendValues.materials
model: backendValues.materials.expressionAsList
Layout.fillWidth: true
typeFilter: "QtQuick3D.Material"
textRole: "idAndName"
onAdd: function(value) { backendValues.materials.idListAdd(value) }
onRemove: function(idx) { backendValues.materials.idListRemove(idx) }
onReplace: function (idx, value) { backendValues.materials.idListReplace(idx, value) }
extraButtonIcon: StudioTheme.Constants.material_medium
extraButtonToolTip: qsTr("Edit material")
onExtraButtonClicked: (idx) => { backendValues.materials.openMaterialEditor(idx) }
}
ExpandingSpacer {}
}
PropertyLabel {
text: qsTr("Casts Shadows")
tooltip: qsTr("Enables the geometry of this model to be rendered to the shadow maps.")
}
SecondColumnLayout {
CheckBox {
text: backendValues.castsShadows.valueToString
backendValue: backendValues.castsShadows
implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ StudioTheme.Values.actionIndicatorWidth
}
ExpandingSpacer {}
}
PropertyLabel {
text: qsTr("Receives Shadows")
tooltip: qsTr("Enables the geometry of this model to receive shadows.")
}
SecondColumnLayout {
CheckBox {
text: backendValues.receivesShadows.valueToString
backendValue: backendValues.receivesShadows
implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ StudioTheme.Values.actionIndicatorWidth
}
ExpandingSpacer {}
}
PropertyLabel {
text: qsTr("Casts Reflections")
tooltip: qsTr("Enables reflection probes to reflect this model.")
}
SecondColumnLayout {
CheckBox {
text: backendValues.castsReflections.valueToString
backendValue: backendValues.castsReflections
implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ StudioTheme.Values.actionIndicatorWidth
}
ExpandingSpacer {}
}
PropertyLabel {
text: qsTr("Receives Reflections")
tooltip: qsTr("Enables the geometry of this model to receive reflections from the nearest reflection probe. The model must be inside at least one reflection probe to start receiving reflections.")
}
SecondColumnLayout {
CheckBox {
text: backendValues.receivesReflections.valueToString
backendValue: backendValues.receivesReflections
implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ StudioTheme.Values.actionIndicatorWidth
}
ExpandingSpacer {}
}
PropertyLabel {
text: qsTr("Is Pickable")
tooltip: qsTr("Enables ray cast based picking for this model.")
}
SecondColumnLayout {
CheckBox {
text: backendValues.pickable.valueToString
backendValue: backendValues.pickable
implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ StudioTheme.Values.actionIndicatorWidth
}
ExpandingSpacer {}
}
PropertyLabel {
text: qsTr("Used in Baked Lighting")
tooltip: qsTr("This model is static and suitable to contribute to baked lighting.")
}
SecondColumnLayout {
CheckBox {
text: backendValues.usedInBakedLighting.valueToString
backendValue: backendValues.usedInBakedLighting
implicitWidth: StudioTheme.Values.twoControlColumnWidth
+ StudioTheme.Values.actionIndicatorWidth
}
ExpandingSpacer {}
}
PropertyLabel {
text: qsTr("Depth Bias")
tooltip: qsTr("Sets the depth bias of the model.")
}
SecondColumnLayout {
SpinBox {
minimumValue: -9999999
maximumValue: 9999999
decimals: 0
backendValue: backendValues.depthBias
implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ StudioTheme.Values.actionIndicatorWidth
}
ExpandingSpacer {}
}
PropertyLabel {
text: qsTr("LOD Bias")
tooltip: qsTr("Sets the size a model needs to be when rendered before the automatic level of detail meshes are used")
}
SecondColumnLayout {
SpinBox {
minimumValue: 0.0
maximumValue: 9999999
decimals: 2
backendValue: backendValues.levelOfDetailBias
implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ StudioTheme.Values.actionIndicatorWidth
}
ExpandingSpacer {}
}
}
}
Section {
caption: qsTr("Instancing")
width: parent.width
SectionLayout {
PropertyLabel {
text: qsTr("Data Source")
tooltip: qsTr("If this property is set, the model will not be rendered normally. Instead, a number of instances of the model will be rendered, as defined by the instance table.")
}
SecondColumnLayout {
ItemFilterComboBox {
typeFilter: "QtQuick3D.Instancing"
backendValue: backendValues.instancing
implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ StudioTheme.Values.actionIndicatorWidth
}
ExpandingSpacer {}
}
PropertyLabel {
text: qsTr("Origin Node")
tooltip: qsTr("Sets the origin of the instance’s coordinate system.")
}
SecondColumnLayout {
ItemFilterComboBox {
typeFilter: "QtQuick3D.Node"
backendValue: backendValues.instanceRoot
implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ StudioTheme.Values.actionIndicatorWidth
}
ExpandingSpacer {}
}
}
}
Section {
caption: qsTr("Animation")
width: parent.width
SectionLayout {
PropertyLabel {
text: qsTr("Skeleton")
tooltip: qsTr("Sets the skeleton for the model.")
}
SecondColumnLayout {
ItemFilterComboBox {
typeFilter: "QtQuick3D.Skeleton"
backendValue: backendValues.skeleton
implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ StudioTheme.Values.actionIndicatorWidth
}
ExpandingSpacer {}
}
PropertyLabel {
text: qsTr("Morph Targets")
tooltip: qsTr("Sets a list of MorphTargets used to render the provided geometry.")
Layout.alignment: Qt.AlignTop
Layout.topMargin: 5
}
SecondColumnLayout {
EditableListView {
backendValue: backendValues.morphTargets
model: backendValues.morphTargets.expressionAsList
Layout.fillWidth: true
typeFilter: "QtQuick3D.MorphTarget"
onAdd: function(value) { backendValues.morphTargets.idListAdd(value) }
onRemove: function(idx) { backendValues.morphTargets.idListRemove(idx) }
onReplace: function (idx, value) { backendValues.morphTargets.idListReplace(idx, value) }
}
ExpandingSpacer {}
}
PropertyLabel {
text: qsTr("Skin")
tooltip: qsTr("Sets the skin for the model.")
}
SecondColumnLayout {
ItemFilterComboBox {
typeFilter: "QtQuick3D.Skin"
backendValue: backendValues.skin
implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ StudioTheme.Values.actionIndicatorWidth
}
ExpandingSpacer {}
}
}
}
Section {
caption: qsTr("Lightmapping")
width: parent.width
SectionLayout {
PropertyLabel {
text: qsTr("Resolution")
tooltip: qsTr("Sets the target resolution of the baked lightmap texture for the model.")
}
SecondColumnLayout {
SpinBox {
minimumValue: 128
maximumValue: 4096
decimals: 0
stepSize: 128
sliderIndicatorVisible: true
backendValue: backendValues.lightmapBaseResolution
implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ StudioTheme.Values.actionIndicatorWidth
}
ExpandingSpacer {}
}
PropertyLabel {
text: qsTr("Lightmap")
tooltip: qsTr("Sets the baked lightmap data for the model.")
}
SecondColumnLayout {
ItemFilterComboBox {
typeFilter: "QtQuick3D.BakedLightmap"
backendValue: backendValues.bakedLightmap
implicitWidth: StudioTheme.Values.singleControlColumnWidth
+ StudioTheme.Values.actionIndicatorWidth
}
ExpandingSpacer {}
}
}
}
}