Initial Create App UI for voxels

This commit is contained in:
ksuprynowicz 2022-05-01 20:00:25 +02:00
parent 44702b3e26
commit 716e310c0f
7 changed files with 627 additions and 1 deletions

View file

@ -4,6 +4,7 @@
// Persist toolbar by HRS 6/11/15.
// Copyright 2014 High Fidelity, Inc.
// Copyright 2020 Vircadia contributors.
// Copyright 2022 Overte e.V.
//
// This script allows you to edit entities with a new UI/UX for mouse and trackpad based editing
//
@ -971,6 +972,8 @@ var toolBar = (function () {
addButton("newMaterialButton", createNewEntityDialogButtonCallback("Material"));
addButton("newPolyVoxButton", createNewEntityDialogButtonCallback("PolyVox"));
var deactivateCreateIfDesktopWindowsHidden = function() {
if (!shouldUseEditTabletApp() && !entityListTool.isVisible() && !createToolsWindow.isVisible()) {
that.setActive(false);

View file

@ -1326,6 +1326,48 @@ const GROUPS = [
}
]
},
{
id: "polyvox",
label: "POLYVOX",
properties: [
{
label: "Volume Size",
type: "vec3",
vec3Type: "xyz",
step: 1.0,
decimals: 0,
subLabels: [ "x", "y", "z" ],
unit: "",
propertyID: "voxelVolumeSize",
},
{
label: "Surface Style",
type: "dropdown",
options: { 0: "Marching cubes", 1: "Cubic",
2: "Edged cubic", 3: "Edged marching cubes" },
propertyID: "voxelSurfaceStyle",
propertyName: "voxelSurfaceStyle",
},
{
label: "X Texture URL",
type: "string",
propertyID: "xTextureURL",
propertyName: "xTextureURL",
},
{
label: "Y Texture URL",
type: "string",
propertyID: "yTextureURL",
propertyName: "yTextureURL",
},
{
label: "Z Texture URL",
type: "string",
propertyID: "zTextureURL",
propertyName: "zTextureURL",
},
]
},
{
id: "spatial",
label: "SPATIAL",
@ -1705,7 +1747,7 @@ const GROUPS_PER_TYPE = {
ParticleEffect: [ 'base', 'particles', 'particles_emit', 'particles_size', 'particles_color',
'particles_behavior', 'particles_constraints', 'spatial', 'behavior', 'scripts', 'physics' ],
PolyLine: [ 'base', 'spatial', 'behavior', 'scripts', 'collision', 'physics' ],
PolyVox: [ 'base', 'spatial', 'behavior', 'scripts', 'collision', 'physics' ],
PolyVox: [ 'base', 'polyvox', 'spatial', 'behavior', 'scripts', 'collision', 'physics' ],
Grid: [ 'base', 'grid', 'spatial', 'behavior', 'scripts', 'physics' ],
Multiple: [ 'base', 'spatial', 'behavior', 'scripts', 'collision', 'physics' ],
};

View file

@ -178,6 +178,18 @@ TabBar {
editTabView.currentIndex = 2
}
}
NewEntityButton {
icon: "icons/voxels.svg"
text: "VOXELS"
onClicked: {
editRoot.sendToScript({
method: "newEntityButtonClicked",
params: { buttonName: "newPolyVoxButton" }
});
editTabView.currentIndex = 2
}
}
}
HifiControls.Button {

View file

@ -184,6 +184,18 @@ TabBar {
editTabView.currentIndex = tabIndex.properties
}
}
NewEntityButton {
icon: "icons/voxels.svg"
text: "VOXELS"
onClicked: {
editRoot.sendToScript({
method: "newEntityButtonClicked",
params: { buttonName: "newPolyVoxButton" }
});
editTabView.currentIndex = tabIndex.properties
}
}
}
HifiControls.Button {

View file

@ -0,0 +1,487 @@
//
// NewPolyVoxDialog.qml
// based on NewModelDialog.qml
// qml/hifi
//
// Copyright 2017 High Fidelity, Inc.
// Copyright 2020 Vircadia contributors
// Copyright 2022 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
Text {
id: text1
text: qsTr("X Texture URL")
color: "#ffffff"
font.pixelSize: 12
}
TextInput {
id: xTextureURL
height: 20
text: qsTr("")
color: "white"
anchors.top: text1.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")
color: "#ffffff"
font.pixelSize: 12
anchors.top: textInputBox1.bottom
anchors.topMargin: 5
}
TextInput {
id: yTextureURL
height: 20
text: qsTr("")
color: "white"
anchors.top: text2.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")
color: "#ffffff"
font.pixelSize: 12
anchors.top: textInputBox2.bottom
anchors.topMargin: 5
}
TextInput {
id: zTextureURL
height: 20
text: qsTr("")
color: "white"
anchors.top: text3.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("")
color: "white"
font.pixelSize: 12
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("")
color: "white"
font.pixelSize: 12
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("")
color: "white"
font.pixelSize: 12
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
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
property var initialShapeArray: ["Sphere",
"Box",
"Plane"]
width: 200
z: 100
transformOrigin: Item.Center
model: initialShapeArray
}
Row {
id: row3
width: 200
height: 400
spacing: 5
anchors.horizontalCenter: column3.horizontalCenter
anchors.horizontalCenterOffset: -surfaceStyleArray20
Button {
id: button1
text: qsTr("Create")
z: -1
enabled: false
onClicked: {
newPolyVoxDialog.sendToScript({
method: "newPolyVoxDialogAdd",
params: {
url: xTextureURL.text,
dynamic: dynamic.checked,
collisionShapeIndex: surfaceStyle.currentIndex,
grabbable: grabbable.checked,
useOriginalPivot: useOriginalPivot.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
}
}
}

View file

@ -0,0 +1,20 @@
import QtQuick 2.7
import QtQuick.Controls 2.2
StackView {
id: stackView
anchors.fill: parent
anchors.leftMargin: 10
anchors.rightMargin: 10
anchors.topMargin: 40
signal sendToScript(var message);
NewPolyVoxDialog {
id: dialog
anchors.fill: parent
Component.onCompleted:{
dialog.sendToScript.connect(stackView.sendToScript);
}
}
}

View file

@ -0,0 +1,50 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Generator: Adobe Illustrator 19.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg
version="1.1"
id="Layer_1"
x="0px"
y="0px"
viewBox="0 0 50 50"
style="enable-background:new 0 0 50 50;"
xml:space="preserve"
sodipodi:docname="voxels.svg"
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><defs
id="defs27" /><sodipodi:namedview
id="namedview25"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="17.42"
inkscape:cx="25.028703"
inkscape:cy="20.407577"
inkscape:window-width="1918"
inkscape:window-height="1042"
inkscape:window-x="1920"
inkscape:window-y="18"
inkscape:window-maximized="1"
inkscape:current-layer="Layer_1" />
<style
type="text/css"
id="style2">
.st0{opacity:0.9;}
.st1{fill:#1E1E1E;}
.st2{fill:#EAEAEA;}
</style>
<path
class="st2"
d="M 42.986179,11.33074 34.367376,6.3639716 c -0.438244,-0.2921628 -1.02257,-0.2921628 -1.460814,0 L 25.164247,10.892495 17.129769,6.2178902 c -0.438244,-0.2921628 -1.02257,-0.2921628 -1.460814,0 L 7.196233,11.184658 C 6.7579887,11.476821 6.4658259,11.915065 6.4658259,12.35331 v 9.933535 c 0,0.438244 0.2921628,1.02257 0.7304071,1.168651 l 7.888397,4.528524 v 9.057048 c 0,0.438244 0.292162,1.02257 0.730407,1.168651 l 8.618803,4.966768 c 0.292163,0.146081 0.438244,0.146081 0.730407,0.146081 0.292163,0 0.438244,0 0.730407,-0.146081 l 8.618803,-4.966768 c 0.438245,-0.292163 0.730407,-0.730407 0.730407,-1.168651 v -8.910966 l 7.888397,-4.528524 c 0.438244,-0.292163 0.730407,-0.730407 0.730407,-1.168652 V 12.499391 C 43.716586,12.061147 43.424423,11.622902 42.986179,11.33074 Z m -2.04514,8.910965 -5.989337,-3.505954 V 9.8699255 l 5.989337,3.5059535 z m -7.011907,5.551094 -7.304071,-4.236361 v -8.180559 l 5.989338,-3.5059535 v 6.8658255 l -2.921628,1.752977 c -0.584326,0.292163 -0.730407,1.02257 -0.438244,1.606896 0.292162,0.438244 0.584325,0.584326 1.022569,0.584326 0.146082,0 0.438245,0 0.584326,-0.146082 l 2.921628,-1.752977 5.989338,3.505954 z m -7.596234,5.697175 v -6.719745 l 5.989338,3.505954 v 6.719745 z M 23.703433,20.095624 17.714095,16.58967 V 9.7238441 l 5.989338,3.5059539 z M 9.2413727,13.229798 15.230711,9.7238441 V 16.58967 l -3.213791,1.899058 c -0.584326,0.292163 -0.730407,1.02257 -0.438244,1.606896 0.292163,0.438244 0.584325,0.584326 1.02257,0.584326 0.146081,0 0.438244,0 0.584325,-0.146082 l 3.213791,-1.899058 5.989338,3.505954 -5.989338,3.505954 -7.1579893,-4.09028 z m 15.9228743,27.317224 -7.157989,-4.09028 v -8.180559 l 5.989338,-3.505954 v 6.865826 l -2.921629,1.606896 c -0.584325,0.292163 -0.730407,1.02257 -0.438244,1.606895 0.292163,0.438245 0.584326,0.584326 1.02257,0.584326 0.146082,0 0.438244,0 0.584326,-0.146081 l 2.921628,-1.606896 5.989338,3.505954 z"
id="path10"
style="stroke-width:1.46081;fill:#000000" />
</svg>

After

Width:  |  Height:  |  Size: 3.2 KiB