mirror of
https://github.com/AleziaKurdis/overte.git
synced 2025-04-05 21:12:40 +02:00
This adds "Paste" buttons in "Create Model", "Create Material" and "Create Voxels" to help pasting url (which was totally disfunctional in VR)
603 lines
19 KiB
QML
603 lines
19 KiB
QML
//
|
|
// NewPolyVoxDialog.qml
|
|
// Created by dr Karol Suprynowicz on May 17th, 2022
|
|
// based on NewModelDialog.qml
|
|
// qml/hifi
|
|
//
|
|
// Copyright 2017 High Fidelity, Inc.
|
|
// Copyright 2020 Vircadia contributors
|
|
// Copyright 2022-2024 Overte e.V.
|
|
//
|
|
// Distributed under the Apache License, Version 2.0.
|
|
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
|
//
|
|
|
|
import QtQuick 2.5
|
|
import QtQuick.Dialogs 1.2 as OriginalDialogs
|
|
|
|
import stylesUit 1.0
|
|
import controlsUit 1.0
|
|
import hifi.dialogs 1.0
|
|
|
|
Rectangle {
|
|
id: newPolyVoxDialog
|
|
// width: parent.width
|
|
// height: parent.height
|
|
HifiConstants { id: hifi }
|
|
color: hifi.colors.baseGray;
|
|
signal sendToScript(var message);
|
|
property bool keyboardEnabled: false
|
|
property bool keyboardRaised: false
|
|
property bool punctuationMode: false
|
|
property bool keyboardRasied: false
|
|
|
|
function errorMessageBox(message) {
|
|
try {
|
|
return desktop.messageBox({
|
|
icon: hifi.icons.warning,
|
|
defaultButton: OriginalDialogs.StandardButton.Ok,
|
|
title: "Error",
|
|
text: message
|
|
});
|
|
} catch(e) {
|
|
Window.alert(message);
|
|
}
|
|
}
|
|
|
|
Item {
|
|
id: column1
|
|
anchors.rightMargin: 10
|
|
anchors.leftMargin: 10
|
|
anchors.bottomMargin: 10
|
|
anchors.topMargin: 0
|
|
anchors.top: parent.top
|
|
anchors.left: parent.left
|
|
anchors.right: parent.right
|
|
anchors.bottom: keyboard.top
|
|
|
|
ComboBox {
|
|
id: texturePreset
|
|
currentIndex: 0
|
|
|
|
property var texturePresetArray: ["Material presets",
|
|
"Grass + ground",
|
|
"Bricks",
|
|
"Stone",
|
|
"Concrete",
|
|
"Rock"]
|
|
|
|
width: 200
|
|
z: 100
|
|
transformOrigin: Item.Center
|
|
model: texturePresetArray
|
|
|
|
onCurrentIndexChanged: {
|
|
switch (currentIndex) {
|
|
// Clear texture entries
|
|
case 0:
|
|
xTextureURL.text = "";
|
|
yTextureURL.text = "";
|
|
zTextureURL.text = "";
|
|
break;
|
|
// Grass + ground
|
|
case 1:
|
|
xTextureURL.text = "qrc:///serverless/Textures/ground_5-2K/2K-ground_5-diffuse.jpg";
|
|
yTextureURL.text = "qrc:///serverless/Textures/ground_grass_gen_05.png";
|
|
zTextureURL.text = "qrc:///serverless/Textures/ground_5-2K/2K-ground_5-diffuse.jpg";
|
|
break;
|
|
// Bricks
|
|
case 2:
|
|
xTextureURL.text = "qrc:///serverless/Textures/2K-wall_stone_2-diffuse_l.jpg";
|
|
yTextureURL.text = "qrc:///serverless/Textures/2K-stone_floor_3-diffuse_l.jpg";
|
|
zTextureURL.text = "qrc:///serverless/Textures/2K-wall_stone_2-diffuse_l.jpg";
|
|
break;
|
|
// Stone
|
|
case 3:
|
|
xTextureURL.text = "qrc:///serverless/Textures/wall_l.png";
|
|
yTextureURL.text = "qrc:///serverless/Textures/floor_l.png";
|
|
zTextureURL.text = "qrc:///serverless/Textures/wall_l.png";
|
|
break;
|
|
// Concrete
|
|
case 4:
|
|
xTextureURL.text = "qrc:///serverless/Textures/concrete_12-2K/2K-concrete_12-diffuse.jpg";
|
|
yTextureURL.text = "qrc:///serverless/Textures/concrete_12-2K/2K-concrete_12-diffuse.jpg";
|
|
zTextureURL.text = "qrc:///serverless/Textures/concrete_12-2K/2K-concrete_12-diffuse.jpg";
|
|
break;
|
|
// Rock
|
|
case 5:
|
|
xTextureURL.text = "qrc:///serverless/Textures/Rock026_2K-JPG/Rock026_2K_Color.jpg";
|
|
yTextureURL.text = "qrc:///serverless/Textures/Rock026_2K-JPG/Rock026_2K_Color.jpg";
|
|
zTextureURL.text = "qrc:///serverless/Textures/Rock026_2K-JPG/Rock026_2K_Color.jpg";
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
Text {
|
|
id: text1
|
|
anchors.top: texturePreset.bottom
|
|
anchors.topMargin: 5
|
|
text: qsTr("X Texture URL <i> </i>")
|
|
color: "#ffffff"
|
|
font.pixelSize: 12
|
|
}
|
|
|
|
Button {
|
|
id: pasteBtn1
|
|
text: "Paste"
|
|
font.pixelSize: 11
|
|
height: 16
|
|
width: 40
|
|
radius: 4
|
|
anchors.top: text1.top
|
|
anchors.left: text1.right
|
|
anchors.bottom: text1.bottom
|
|
onClicked: {
|
|
xTextureURL.paste()
|
|
}
|
|
}
|
|
|
|
TextInput {
|
|
id: xTextureURL
|
|
height: 20
|
|
text: qsTr("")
|
|
color: "white"
|
|
anchors.top: pasteBtn1.bottom
|
|
anchors.topMargin: 5
|
|
anchors.left: parent.left
|
|
anchors.leftMargin: 0
|
|
anchors.right: parent.right
|
|
anchors.rightMargin: 0
|
|
font.pixelSize: 12
|
|
|
|
onAccepted: {
|
|
newPolyVoxDialog.keyboardEnabled = false;
|
|
}
|
|
|
|
onTextChanged : {
|
|
if (xTextureURL.text.length === 0){
|
|
button1.enabled = false;
|
|
} else {
|
|
button1.enabled = true;
|
|
}
|
|
}
|
|
|
|
MouseArea {
|
|
anchors.fill: parent
|
|
onClicked: {
|
|
newPolyVoxDialog.keyboardEnabled = HMD.active
|
|
parent.focus = true;
|
|
parent.forceActiveFocus();
|
|
xTextureURL.cursorPosition = xTextureURL.positionAt(mouseX, mouseY, TextInput.CursorBetweenCharaters);
|
|
}
|
|
}
|
|
}
|
|
|
|
Rectangle {
|
|
id: textInputBox1
|
|
color: "white"
|
|
anchors.fill: xTextureURL
|
|
opacity: 0.1
|
|
}
|
|
|
|
Text {
|
|
id: text2
|
|
text: qsTr("Y Texture URL <i> </i>")
|
|
color: "#ffffff"
|
|
font.pixelSize: 12
|
|
anchors.top: textInputBox1.bottom
|
|
anchors.topMargin: 5
|
|
}
|
|
Button {
|
|
id: pasteBtn2
|
|
text: "Paste"
|
|
font.pixelSize: 11
|
|
height: 16
|
|
width: 40
|
|
radius: 4
|
|
anchors.top: text2.top
|
|
anchors.left: text2.right
|
|
anchors.bottom: text2.bottom
|
|
onClicked: {
|
|
yTextureURL.paste()
|
|
}
|
|
}
|
|
|
|
TextInput {
|
|
id: yTextureURL
|
|
height: 20
|
|
text: qsTr("")
|
|
color: "white"
|
|
anchors.top: pasteBtn2.bottom
|
|
anchors.topMargin: 5
|
|
anchors.left: parent.left
|
|
anchors.leftMargin: 0
|
|
anchors.right: parent.right
|
|
anchors.rightMargin: 0
|
|
font.pixelSize: 12
|
|
|
|
onAccepted: {
|
|
newPolyVoxDialog.keyboardEnabled = false;
|
|
}
|
|
|
|
onTextChanged : {
|
|
if (yTextureURL.text.length === 0){
|
|
button1.enabled = false;
|
|
} else {
|
|
button1.enabled = true;
|
|
}
|
|
}
|
|
|
|
MouseArea {
|
|
anchors.fill: parent
|
|
onClicked: {
|
|
newPolyVoxDialog.keyboardEnabled = HMD.active
|
|
parent.focus = true;
|
|
parent.forceActiveFocus();
|
|
yTextureURL.cursorPosition = yTextureURL.positionAt(mouseX, mouseY, TextInput.CursorBetweenCharaters);
|
|
}
|
|
}
|
|
}
|
|
|
|
Rectangle {
|
|
id: textInputBox2
|
|
color: "white"
|
|
anchors.fill: yTextureURL
|
|
opacity: 0.1
|
|
}
|
|
|
|
Text {
|
|
id: text3
|
|
text: qsTr("Z Texture URL <i> </i>")
|
|
color: "#ffffff"
|
|
font.pixelSize: 12
|
|
anchors.top: textInputBox2.bottom
|
|
anchors.topMargin: 5
|
|
}
|
|
Button {
|
|
id: pasteBtn3
|
|
text: "Paste"
|
|
font.pixelSize: 11
|
|
height: 16
|
|
width: 40
|
|
radius: 4
|
|
anchors.top: text3.top
|
|
anchors.left: text3.right
|
|
anchors.bottom: text3.bottom
|
|
onClicked: {
|
|
zTextureURL.paste()
|
|
}
|
|
}
|
|
|
|
TextInput {
|
|
id: zTextureURL
|
|
height: 20
|
|
text: qsTr("")
|
|
color: "white"
|
|
anchors.top: pasteBtn3.bottom
|
|
anchors.topMargin: 5
|
|
anchors.left: parent.left
|
|
anchors.leftMargin: 0
|
|
anchors.right: parent.right
|
|
anchors.rightMargin: 0
|
|
font.pixelSize: 12
|
|
|
|
onAccepted: {
|
|
newPolyVoxDialog.keyboardEnabled = false;
|
|
}
|
|
|
|
onTextChanged : {
|
|
if (zTextureURL.text.length === 0){
|
|
button1.enabled = false;
|
|
} else {
|
|
button1.enabled = true;
|
|
}
|
|
}
|
|
|
|
MouseArea {
|
|
anchors.fill: parent
|
|
onClicked: {
|
|
newPolyVoxDialog.keyboardEnabled = HMD.active
|
|
parent.focus = true;
|
|
parent.forceActiveFocus();
|
|
zTextureURL.cursorPosition = zTextureURL.positionAt(mouseX, mouseY, TextInput.CursorBetweenCharaters);
|
|
}
|
|
}
|
|
}
|
|
|
|
Rectangle {
|
|
id: textInputBox3
|
|
color: "white"
|
|
anchors.fill: zTextureURL
|
|
opacity: 0.1
|
|
}
|
|
|
|
Text {
|
|
id: textVolumeSize
|
|
text: qsTr("Volume Size (number of voxels along the edge)")
|
|
color: "#ffffff"
|
|
font.pixelSize: 12
|
|
anchors.top: zTextureURL.bottom
|
|
anchors.topMargin: 5
|
|
}
|
|
|
|
Row {
|
|
id: rowVolumeSize
|
|
height: 50
|
|
spacing: 30
|
|
anchors.top: textVolumeSize.bottom
|
|
anchors.topMargin: 5
|
|
anchors.left: parent.left
|
|
anchors.leftMargin: 0
|
|
anchors.right: parent.right
|
|
anchors.rightMargin: 0
|
|
|
|
Text {
|
|
id: textVolumeSizeX
|
|
text: qsTr("X")
|
|
color: "#ffffff"
|
|
font.pixelSize: 12
|
|
}
|
|
|
|
TextInput {
|
|
id: volumeSizeX
|
|
height: 20
|
|
width: 50
|
|
anchors.left: textVolumeSizeX.right
|
|
anchors.leftMargin: 3
|
|
text: qsTr("20")
|
|
color: "white"
|
|
font.pixelSize: 12
|
|
validator: IntValidator{bottom: 8; top: 64;}
|
|
|
|
onAccepted: {
|
|
newPolyVoxDialog.keyboardEnabled = false;
|
|
}
|
|
|
|
MouseArea {
|
|
anchors.fill: parent
|
|
onClicked: {
|
|
newPolyVoxDialog.keyboardEnabled = HMD.active
|
|
parent.focus = true;
|
|
parent.forceActiveFocus();
|
|
volumeSizeX.cursorPosition = volumeSizeX.positionAt(mouseX, mouseY, TextInput.CursorBetweenCharaters);
|
|
}
|
|
}
|
|
}
|
|
|
|
Rectangle {
|
|
id: textInputBoxVolumeSizeX
|
|
color: "white"
|
|
anchors.fill: volumeSizeX
|
|
opacity: 0.1
|
|
}
|
|
|
|
Text {
|
|
id: textVolumeSizeY
|
|
text: qsTr("Y")
|
|
color: "#ffffff"
|
|
font.pixelSize: 12
|
|
anchors.left: volumeSizeX.right
|
|
anchors.leftMargin: 5
|
|
}
|
|
|
|
TextInput {
|
|
id: volumeSizeY
|
|
height: 20
|
|
width: 50
|
|
anchors.left: textVolumeSizeY.right
|
|
anchors.leftMargin: 3
|
|
text: qsTr("20")
|
|
color: "white"
|
|
font.pixelSize: 12
|
|
validator: IntValidator{bottom: 8; top: 64;}
|
|
|
|
onAccepted: {
|
|
newPolyVoxDialog.keyboardEnabled = false;
|
|
}
|
|
|
|
MouseArea {
|
|
anchors.fill: parent
|
|
onClicked: {
|
|
newPolyVoxDialog.keyboardEnabled = HMD.active
|
|
parent.focus = true;
|
|
parent.forceActiveFocus();
|
|
volumeSizeY.cursorPosition = volumeSizeY.positionAt(mouseX, mouseY, TextInput.CursorBetweenCharaters);
|
|
}
|
|
}
|
|
}
|
|
|
|
Rectangle {
|
|
id: textInputBoxVolumeSizeY
|
|
color: "white"
|
|
anchors.fill: volumeSizeY
|
|
opacity: 0.1
|
|
}
|
|
Text {
|
|
id: textVolumeSizeZ
|
|
text: qsTr("X")
|
|
color: "#ffffff"
|
|
font.pixelSize: 12
|
|
anchors.left: volumeSizeY.right
|
|
anchors.leftMargin: 5
|
|
}
|
|
|
|
TextInput {
|
|
id: volumeSizeZ
|
|
height: 20
|
|
width: 50
|
|
anchors.left: textVolumeSizeZ.right
|
|
anchors.leftMargin: 3
|
|
text: qsTr("20")
|
|
color: "white"
|
|
font.pixelSize: 12
|
|
validator: IntValidator{bottom: 8; top: 64;}
|
|
|
|
onAccepted: {
|
|
newPolyVoxDialog.keyboardEnabled = false;
|
|
}
|
|
|
|
MouseArea {
|
|
anchors.fill: parent
|
|
onClicked: {
|
|
newPolyVoxDialog.keyboardEnabled = HMD.active
|
|
parent.focus = true;
|
|
parent.forceActiveFocus();
|
|
volumeSizeZ.cursorPosition = volumeSizeZ.positionAt(mouseX, mouseY, TextInput.CursorBetweenCharaters);
|
|
}
|
|
}
|
|
}
|
|
|
|
Rectangle {
|
|
id: textInputBoxVolumeSizeZ
|
|
color: "white"
|
|
anchors.fill: volumeSizeZ
|
|
opacity: 0.1
|
|
}
|
|
}
|
|
|
|
Row {
|
|
id: row1
|
|
height: 400
|
|
spacing: 30
|
|
anchors.top: rowVolumeSize.bottom
|
|
anchors.topMargin: 5
|
|
anchors.left: parent.left
|
|
anchors.leftMargin: 0
|
|
anchors.right: parent.right
|
|
anchors.rightMargin: 0
|
|
|
|
Column {
|
|
id: column2
|
|
width: 200
|
|
height: 600
|
|
spacing: 10
|
|
|
|
|
|
CheckBox {
|
|
id: grabbable
|
|
text: qsTr("Grabbable")
|
|
}
|
|
|
|
CheckBox {
|
|
id: collisions
|
|
text: qsTr("Collisions")
|
|
}
|
|
|
|
Row {
|
|
id: row2
|
|
width: 200
|
|
height: 400
|
|
spacing: 20
|
|
|
|
}
|
|
}
|
|
|
|
Column {
|
|
id: column3
|
|
height: 400
|
|
spacing: 10
|
|
|
|
Text {
|
|
id: text4
|
|
text: qsTr("Voxel type")
|
|
color: "#ffffff"
|
|
font.pixelSize: 12
|
|
}
|
|
|
|
ComboBox {
|
|
id: surfaceStyle
|
|
currentIndex: 3
|
|
|
|
property var surfaceStyleArray: ["Marching Cubes",
|
|
"Cubic",
|
|
"Edged Cubic",
|
|
"Edged Marching Cubes"]
|
|
|
|
width: 200
|
|
z: 100
|
|
transformOrigin: Item.Center
|
|
model: surfaceStyleArray
|
|
}
|
|
|
|
Text {
|
|
id: textInitialShape
|
|
text: qsTr("Initial shape")
|
|
color: "#ffffff"
|
|
font.pixelSize: 12
|
|
}
|
|
|
|
ComboBox {
|
|
id: initialShape
|
|
currentIndex: 0
|
|
|
|
property var initialShapeArray: ["Box",
|
|
"Plane, 1/4 full",
|
|
"Plane, 3/4 full",
|
|
"Single voxel",
|
|
]
|
|
|
|
width: 200
|
|
z: 100
|
|
transformOrigin: Item.Center
|
|
model: initialShapeArray
|
|
}
|
|
|
|
Row {
|
|
id: row3
|
|
width: 200
|
|
height: 400
|
|
spacing: 5
|
|
|
|
anchors.horizontalCenter: column3.horizontalCenter
|
|
anchors.horizontalCenterOffset: -20
|
|
|
|
Button {
|
|
id: button1
|
|
text: qsTr("Create")
|
|
z: -1
|
|
enabled: false
|
|
onClicked: {
|
|
newPolyVoxDialog.sendToScript({
|
|
method: "newPolyVoxDialogAdd",
|
|
params: {
|
|
xTextureURL: xTextureURL.text,
|
|
yTextureURL: yTextureURL.text,
|
|
zTextureURL: zTextureURL.text,
|
|
volumeSizeX: volumeSizeX.text,
|
|
volumeSizeY: volumeSizeY.text,
|
|
volumeSizeZ: volumeSizeZ.text,
|
|
surfaceStyleIndex: surfaceStyle.currentIndex,
|
|
initialShapeIndex: initialShape.currentIndex,
|
|
grabbable: grabbable.checked,
|
|
collisions: collisions.checked,
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
Button {
|
|
id: button2
|
|
z: -1
|
|
text: qsTr("Cancel")
|
|
onClicked: {
|
|
newPolyVoxDialog.sendToScript({method: "newPolyVoxDialogCancel"})
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
Keyboard {
|
|
id: keyboard
|
|
raised: parent.keyboardEnabled && parent.keyboardRaised
|
|
numeric: parent.punctuationMode
|
|
anchors {
|
|
bottom: parent.bottom
|
|
bottomMargin: 40
|
|
left: parent.left
|
|
right: parent.right
|
|
}
|
|
}
|
|
}
|