3D view now shows lights and added double spinbox

This commit is contained in:
2023-02-22 01:25:32 +01:00
parent a0b77ead41
commit 58c65c73f2
9 changed files with 113 additions and 526 deletions

View File

@ -39,8 +39,6 @@ qt_add_qml_module(appscheincommander
icons/nebelmaschine.png
icons/rgbstrahler.png
ui-icons/MaterialIcons-Regular.ttf
models/cube.obj
textures/cubetexture.png
QML_FILES
main.qml
HomePage.qml
@ -63,6 +61,7 @@ qt_add_qml_module(appscheincommander
AnimatedInputPanel.qml
AnimatedStackView.qml
Devices3dView.qml
DoubleSpinBox.qml
)
add_definitions(-DCMAKE_PROJECT_VERSION=${CMAKE_PROJECT_VERSION})

View File

@ -3,63 +3,13 @@ import QtDataVisualization
import QtQuick.Controls
Item {
property int selectedAxisLabel: -1
property real dragSpeedModifier: 100.0
property real dragSpeedModifier: 25.0
property int currentMouseX: -1
property int currentMouseY: -1
property int previousMouseX: -1
property int previousMouseY: -1
ListModel {
id: graphModel
ListElement{ xPos: 0.0; yPos: 0.0; zPos: 0.0; rotation: "@0,0,0,0" }
ListElement{ xPos: 1.0; yPos: 1.0; zPos: 1.0; rotation: "@45,1,1,1" }
}
Timer {
id: dataTimer
interval: 1
running: true
repeat: true
property bool isIncreasing: true
property real rotationAngle: 0
function generateQuaternion() {
return "@" + Math.random() * 360 + "," + Math.random() + ","
+ Math.random() + "," + Math.random()
}
function appendRow() {
graphModel.append({"xPos": Math.random(),
"yPos": Math.random(),
"zPos": Math.random(),
"rotation": generateQuaternion()
});
}
//! [10]
onTriggered: {
rotationAngle = rotationAngle + 1
qtCube.setRotationAxisAndAngle(Qt.vector3d(1,0,1), rotationAngle)
//! [10]
scatterSeries.setMeshAxisAndAngle(Qt.vector3d(1,1,1), rotationAngle)
if (isIncreasing) {
for (var i = 0; i < 10; i++)
appendRow()
if (graphModel.count > 2002) {
scatterGraph.theme = isabelleTheme
isIncreasing = false
}
} else {
graphModel.remove(2, 10);
if (graphModel.count == 2) {
scatterGraph.theme = dynamicColorTheme
isIncreasing = true
}
}
}
}
property alias model: itemModelScatterDataProxy.itemModel
ThemeColor {
id: dynamicColor
@ -108,6 +58,12 @@ Item {
scene.activeCamera.yRotation: 45.0
scene.activeCamera.xRotation: 45.0
scene.activeCamera.zoomLevel: 75.0
axisX.min: -10
axisX.max: 10
axisY.min: -10
axisY.max: 10
axisZ.min: -10
axisZ.max: 10
Scatter3DSeries {
id: scatterSeries
@ -115,25 +71,13 @@ Item {
mesh: Abstract3DSeries.MeshCube
ItemModelScatterDataProxy {
itemModel: graphModel
xPosRole: "xPos"
yPosRole: "yPos"
zPosRole: "zPos"
rotationRole: "rotation"
id: itemModelScatterDataProxy
xPosRole: "positionX"
yPosRole: "positionY"
zPosRole: "positionZ"
//rotationRole: "rotation"
}
}
//! [9]
customItemList: [
Custom3DItem {
id: qtCube
meshFile: ":/scheincommander/models/cube.obj"
textureFile: ":/scheincommander/textures/cubetexture.png"
position: Qt.vector3d(0.65,0.35,0.65)
scaling: Qt.vector3d(0.3,0.3,0.3)
}
]
//! [9]
//! [5]
onSelectedElementChanged: {
if (selectedElement >= AbstractGraph3D.ElementAxisXLabel
&& selectedElement <= AbstractGraph3D.ElementAxisZLabel)
@ -141,36 +85,27 @@ Item {
else
selectedAxisLabel = -1
}
//! [5]
}
//! [1]
MouseArea {
anchors.fill: parent
hoverEnabled: true
acceptedButtons: Qt.LeftButton
//! [1]
//! [3]
onPositionChanged: (mouse)=> {
currentMouseX = mouse.x;
currentMouseY = mouse.y;
//! [3]
//! [6]
if (pressed && selectedAxisLabel != -1)
dragAxis();
//! [6]
//! [4]
previousMouseX = currentMouseX;
previousMouseY = currentMouseY;
}
//! [4]
//! [2]
onPressed: (mouse)=> {
scatterGraph.scene.selectionQueryPosition = Qt.point(mouse.x, mouse.y);
}
//! [2]
onReleased: {
// We need to clear mouse positions and selected axis, because touch devices cannot
@ -184,7 +119,6 @@ Item {
}
}
//! [7]
function dragAxis() {
// Do nothing if previous mouse position is uninitialized
if (previousMouseX === -1)
@ -235,11 +169,10 @@ Item {
break
}
}
//! [7]
Button {
id: rangeToggle
width: parent.width / 3 // We're adding 3 buttons and want to divide them equally
width: parent.width / 2 // We're adding 3 buttons and want to divide them equally
text: "Use Preset Range"
anchors.left: parent.left
property bool autoRange: true
@ -265,10 +198,9 @@ Item {
}
}
//! [8]
Button {
id: orthoToggle
width: parent.width / 3
width: parent.width / 2
text: "Display Orthographic"
anchors.left: rangeToggle.right
onClicked: {
@ -283,13 +215,4 @@ Item {
}
}
}
//! [8]
Button {
id: exitButton
width: parent.width / 3
text: "Quit"
anchors.left: orthoToggle.right
onClicked: Qt.quit();
}
}

View File

@ -119,6 +119,8 @@ ColumnLayout {
Devices3dView {
Layout.fillWidth: true
Layout.fillHeight: true
model: model
}
}
}

39
DoubleSpinBox.qml Normal file
View File

@ -0,0 +1,39 @@
import QtQuick
import QtQuick.Controls
SpinBox {
id: spinbox
property int decimals: 2
property real factor: 100
property real realFrom: from / factor
property real realTo: to / factor
property real realValue: value / factor
from: realFrom * factor
to: realTo * factor
value: realValue * factor
stepSize: factor
signal realValueModified
onValueModified: {
realValue = Qt.binding(function(){ return value / factor; });
realValueModified();
}
validator: DoubleValidator {
bottom: Math.min(spinbox.from, spinbox.to)
top: Math.max(spinbox.from, spinbox.to)
}
textFromValue: function(value, locale) {
return Number(value / 100).toLocaleString(locale, 'f', spinbox.decimals)
}
valueFromText: function(text, locale) {
return Number.fromLocaleString(locale, text) * 100
}
}

View File

@ -7,15 +7,15 @@ GridLayout {
property vector3d value
onValueChanged: {
xBox.value = value.x
yBox.value = value.y
zBox.value = value.z
xBox.realValue = value.x
yBox.realValue = value.y
zBox.realValue = value.z
}
signal valueModified
function updateValue() {
const newValue = Qt.vector3d(xBox.value, yBox.value, zBox.value);
const newValue = Qt.vector3d(xBox.realValue, yBox.realValue, zBox.realValue);
console.log(newValue);
if (newValue === value)
return;
@ -27,26 +27,38 @@ GridLayout {
text: qsTr('x:')
}
SpinBox {
DoubleSpinBox {
id: xBox
onValueModified: updateValue()
editable: true
realFrom: -1000
realTo: 1000
//stepSize: 0.01
onRealValueModified: updateValue()
}
Label {
text: qsTr('y:')
}
SpinBox {
DoubleSpinBox {
id: yBox
onValueModified: updateValue()
editable: true
realFrom: -1000
realTo: 1000
//stepSize: 0.01
onRealValueModified: updateValue()
}
Label {
text: qsTr('z:')
}
SpinBox {
DoubleSpinBox {
id: zBox
onValueModified: updateValue()
editable: true
realFrom: -1000
realTo: 1000
//stepSize: 0.01
onRealValueModified: updateValue()
}
}

View File

@ -11,7 +11,10 @@ enum {
IdRole = Qt::UserRole,
DeviceTypeIdRole,
AddressRole,
PositionRole
PositionRole,
PositionXRole,
PositionYRole,
PositionZRole
};
void DevicesModel::setController(DmxController *controller)
@ -111,6 +114,9 @@ QVariant DevicesModel::data(const QModelIndex &index, int role) const
case DeviceTypeIdRole: return device.deviceTypeId;
case AddressRole: return device.address;
case PositionRole: return device.position;
case PositionXRole: return device.position.x();
case PositionYRole: return device.position.y();
case PositionZRole: return device.position.z();
}
return {};
@ -149,7 +155,10 @@ QMap<int, QVariant> DevicesModel::itemData(const QModelIndex &index) const
{ IdRole, device.id },
{ DeviceTypeIdRole, device.deviceTypeId },
{ AddressRole, device.address },
{ PositionRole, device.position }
{ PositionRole, device.position },
{ PositionXRole, device.position.x() },
{ PositionYRole, device.position.y() },
{ PositionZRole, device.position.z() }
};
}
@ -160,7 +169,10 @@ QHash<int, QByteArray> DevicesModel::roleNames() const
{ IdRole, "id" },
{ DeviceTypeIdRole, "deviceTypeId" },
{ AddressRole, "address" },
{ PositionRole, "position" }
{ PositionRole, "position" },
{ PositionXRole, "positionX" },
{ PositionYRole, "positionY" },
{ PositionZRole, "positionZ" }
};
}
@ -273,7 +285,7 @@ bool DevicesModel::setData(const QModelIndex &index, const QVariant &value, int
QMutexLocker locker{&m_controller->mutex()};
device.position = value.value<QVector3D>();
}
emit dataChanged(index, index, { PositionRole });
emit dataChanged(index, index, { PositionRole, PositionXRole, PositionYRole, PositionZRole });
disconnect(m_controller, &DmxController::devicePositionChanged,
this, &DevicesModel::otherDevicePositionChanged);
@ -458,7 +470,7 @@ void DevicesModel::otherDevicePositionChanged(int row, const QVector3D &position
}
const auto index = this->index(row);
emit dataChanged(index, index, { PositionRole });
emit dataChanged(index, index, { PositionRole, PositionXRole, PositionYRole, PositionZRole });
}
namespace {

View File

@ -9,6 +9,18 @@
#include "projectloader.h"
void doFun(auto &y)
{
return;
double i{-10};
for (auto &x : y.devices)
{
x.position.setX(i);
x.position.setZ(std::sin(i / 2.) * 10.);
i += 20./double(y.devices.size());
}
}
DmxController::DmxController(ScheinCommanderSettings &settings, QObject *parent) :
QObject{parent},
m_settings{settings},
@ -168,6 +180,7 @@ DmxController::DmxController(ScheinCommanderSettings &settings, QObject *parent)
}
}
{
doFun(m_lightProject);
}
bool DmxController::start()
@ -243,6 +256,8 @@ bool DmxController::loadProject(const QString &name)
return false;
}
doFun(m_lightProject);
return true;
}

View File

@ -1,415 +0,0 @@
# Blender v2.66 (sub 0) OBJ File: 'beveled_cube.blend'
# www.blender.org
v -1.000000 -0.878027 0.878027
v -0.978771 -0.929277 0.878027
v -0.950975 -0.932562 0.932562
v -0.978771 -0.878027 0.929277
v -0.932562 -0.950975 0.932562
v -0.929277 -0.978771 0.878027
v -0.878027 -1.000000 0.878027
v -0.878027 -0.978771 0.929277
v -0.932562 -0.932562 0.950975
v -0.878027 -0.929277 0.978771
v -0.878027 -0.878027 1.000000
v -0.929277 -0.878027 0.978771
v -1.000000 -0.878027 -0.878027
v -0.978771 -0.878027 -0.929277
v -0.950975 -0.932562 -0.932562
v -0.978771 -0.929277 -0.878027
v -0.932562 -0.932562 -0.950975
v -0.929277 -0.878027 -0.978771
v -0.878027 -0.878027 -1.000000
v -0.878027 -0.929277 -0.978771
v -0.932562 -0.950975 -0.932562
v -0.878027 -0.978771 -0.929277
v -0.878027 -1.000000 -0.878027
v -0.929277 -0.978771 -0.878027
v 0.878027 -0.878027 -1.000000
v 0.929277 -0.878027 -0.978771
v 0.932562 -0.932562 -0.950975
v 0.878027 -0.929277 -0.978771
v 0.950975 -0.932562 -0.932562
v 0.978771 -0.878027 -0.929277
v 1.000000 -0.878027 -0.878027
v 0.978771 -0.929277 -0.878027
v 0.932562 -0.950975 -0.932562
v 0.929277 -0.978771 -0.878027
v 0.878027 -1.000000 -0.878027
v 0.878027 -0.978771 -0.929277
v 1.000000 -0.878027 0.878027
v 0.978771 -0.878027 0.929277
v 0.950975 -0.932562 0.932562
v 0.978771 -0.929277 0.878027
v 0.932562 -0.932562 0.950975
v 0.929277 -0.878027 0.978771
v 0.878027 -0.878027 1.000000
v 0.878027 -0.929277 0.978771
v 0.932562 -0.950975 0.932562
v 0.878027 -0.978771 0.929277
v 0.878027 -1.000000 0.878027
v 0.929277 -0.978771 0.878027
v -0.878027 0.878027 1.000000
v -0.878027 0.929277 0.978771
v -0.932562 0.932562 0.950975
v -0.929277 0.878027 0.978771
v -0.932562 0.950975 0.932562
v -0.878027 0.978771 0.929277
v -0.878027 1.000000 0.878027
v -0.929277 0.978771 0.878027
v -0.950975 0.932562 0.932562
v -0.978771 0.929277 0.878027
v -1.000000 0.878027 0.878027
v -0.978771 0.878027 0.929277
v -1.000000 0.878027 -0.878027
v -0.978771 0.929277 -0.878027
v -0.950975 0.932562 -0.932562
v -0.978771 0.878027 -0.929277
v -0.932562 0.950975 -0.932562
v -0.929277 0.978771 -0.878027
v -0.878027 1.000000 -0.878027
v -0.878027 0.978771 -0.929277
v -0.932562 0.932562 -0.950975
v -0.878027 0.929277 -0.978771
v -0.878027 0.878027 -1.000000
v -0.929277 0.878027 -0.978771
v 0.878027 0.878027 -1.000000
v 0.878027 0.929277 -0.978771
v 0.932562 0.932562 -0.950975
v 0.929277 0.878027 -0.978771
v 0.932562 0.950975 -0.932562
v 0.878027 0.978771 -0.929277
v 0.878027 1.000000 -0.878027
v 0.929277 0.978771 -0.878027
v 0.950975 0.932562 -0.932562
v 0.978771 0.929277 -0.878027
v 1.000000 0.878027 -0.878027
v 0.978771 0.878027 -0.929277
v 1.000000 0.878027 0.878027
v 0.978771 0.929277 0.878027
v 0.950975 0.932562 0.932562
v 0.978771 0.878027 0.929277
v 0.932562 0.950975 0.932562
v 0.929277 0.978771 0.878027
v 0.878027 1.000000 0.878027
v 0.878027 0.978771 0.929277
v 0.932562 0.932562 0.950975
v 0.878027 0.929277 0.978771
v 0.878027 0.878027 1.000000
v 0.929277 0.878027 0.978771
vt 0.024513 0.966281
vt 0.033719 0.975487
vt 0.033719 0.966281
vt 0.964639 0.060986
vt 0.964639 0.939014
vt 0.989386 0.939014
vt 0.939014 0.964639
vt 0.060986 0.964639
vt 0.939014 0.989386
vt 0.060986 0.060986
vt 0.060986 0.939014
vt 0.939014 0.939014
vt 0.035361 0.060986
vt 0.035361 0.939014
vt 0.010614 0.060986
vt 0.010614 0.939014
vt 0.989386 0.060986
vt 0.939014 0.035361
vt 0.060986 0.035361
vt 0.060986 0.010614
vt 0.060986 0.989386
vt 0.939014 0.060986
vt 0.966281 0.975487
vt 0.966281 0.966281
vt 0.975487 0.966281
vt 0.975487 0.033719
vt 0.966281 0.033719
vt 0.966281 0.024513
vt 0.033719 0.024513
vt 0.033719 0.033719
vt 0.024513 0.033719
vt 0.939014 0.010614
vn -0.713187 -0.495651 -0.495651
vn -0.495651 -0.495651 -0.713187
vn -0.495651 -0.713187 -0.495651
vn 0.539384 -0.823450 0.175909
vn 0.539384 -0.823450 -0.175909
vn 0.823450 -0.539384 -0.175909
vn -0.713187 0.495651 -0.495651
vn -0.495651 0.713187 -0.495651
vn -0.495651 0.495651 -0.713187
vn 0.175909 -0.823450 -0.539384
vn -0.185644 -0.825892 -0.532365
vn 0.175909 -0.539384 -0.823450
vn -0.193426 -0.961852 0.193426
vn -0.193426 -0.961852 -0.193426
vn 0.187689 -0.964110 -0.187689
vn -0.532365 -0.185644 0.825892
vn -0.532365 0.185644 0.825892
vn -0.825892 -0.185644 0.532365
vn -0.532365 0.185644 -0.825892
vn -0.532365 -0.185644 -0.825892
vn -0.825892 0.185644 -0.532365
vn 0.823450 0.175909 -0.539384
vn 0.823450 -0.175909 -0.539384
vn 0.539384 -0.175909 -0.823450
vn 0.539384 0.175909 0.823450
vn 0.539384 -0.175909 0.823450
vn 0.823450 -0.175909 0.539384
vn 0.175909 0.823450 0.539384
vn -0.185644 0.825892 0.532365
vn -0.185644 0.532365 0.825892
vn -0.185644 0.825892 -0.532365
vn 0.175909 0.823450 -0.539384
vn -0.185644 0.532365 -0.825892
vn 0.539384 0.823450 -0.175909
vn 0.539384 0.823450 0.175909
vn 0.823450 0.539384 0.175909
vn 0.187689 0.964110 0.187689
vn 0.187689 0.964110 -0.187689
vn -0.193426 0.961852 -0.193426
vn -0.193426 0.193426 -0.961852
vn 0.187689 0.187689 -0.964110
vn -0.193426 -0.193426 -0.961852
vn -0.961852 0.193426 0.193426
vn -0.961852 0.193426 -0.193426
vn -0.961852 -0.193426 0.193426
vn -0.532365 -0.825892 -0.185644
vn -0.532365 -0.825892 0.185644
vn -0.825892 -0.532365 -0.185644
vn 0.498856 0.498856 -0.708701
vn 0.498856 0.708701 -0.498856
vn 0.708701 0.498856 -0.498856
vn 0.964110 0.187689 -0.187689
vn 0.964110 0.187689 0.187689
vn 0.964110 -0.187689 0.187689
vn 0.498856 -0.498856 -0.708701
vn 0.708701 -0.498856 -0.498856
vn 0.498856 -0.708701 -0.498856
vn 0.708701 0.498856 0.498856
vn 0.498856 0.708701 0.498856
vn 0.498856 0.498856 0.708701
vn -0.495651 0.495651 0.713187
vn -0.495651 0.713187 0.495651
vn -0.713187 0.495651 0.495651
vn 0.708701 -0.498856 0.498856
vn 0.498856 -0.498856 0.708701
vn 0.498856 -0.708701 0.498856
vn -0.532365 0.825892 0.185644
vn -0.532365 0.825892 -0.185644
vn -0.825892 0.532365 0.185644
vn 0.187689 0.187689 0.964110
vn -0.193426 0.193426 0.961852
vn -0.193426 -0.193426 0.961852
vn -0.185644 -0.825892 0.532365
vn 0.175909 -0.823450 0.539384
vn 0.175909 -0.539384 0.823450
vn -0.825892 -0.532365 0.185644
vn -0.713187 -0.495651 0.495651
vn -0.495651 -0.713187 0.495651
vn -0.495651 -0.495651 0.713187
vn -0.185644 -0.532365 0.825892
vn -0.961852 -0.193426 -0.193426
vn -0.825892 -0.185644 -0.532365
vn 0.187689 -0.187689 -0.964110
vn 0.823450 -0.539384 0.175909
vn -0.193426 0.961852 0.193426
vn -0.825892 0.532365 -0.185644
vn 0.175909 0.539384 -0.823450
vn 0.539384 0.175909 -0.823450
vn 0.823450 0.539384 -0.175909
vn 0.823450 0.175909 0.539384
vn 0.175909 0.539384 0.823450
vn -0.185644 -0.532365 -0.825892
vn -0.825892 0.185644 0.532365
vn 0.964110 -0.187689 -0.187689
vn 0.187689 -0.187689 0.964110
vn 0.187689 -0.964110 0.187689
s 1
f 15/1/1 17/2/2 21/3/3
f 48/4/4 34/5/5 32/6/6
f 63/1/7 65/3/8 69/2/9
f 36/7/10 22/8/11 28/9/12
f 7/10/13 23/11/14 35/12/15
f 12/13/16 52/14/17 4/15/18
f 72/14/19 18/13/20 64/16/21
f 84/6/22 30/17/23 26/4/24
f 96/5/25 42/4/26 38/17/27
f 92/18/28 54/19/29 50/20/30
f 68/8/31 78/7/32 70/21/33
f 80/5/34 90/4/35 86/17/36
f 91/22/37 79/12/38 67/11/39
f 71/11/40 73/12/41 19/10/42
f 59/11/43 61/12/44 1/10/45
f 24/14/46 6/13/47 16/16/48
f 75/23/49 77/24/50 81/25/51
f 83/12/52 85/11/53 37/10/54
f 27/23/55 29/25/56 33/24/57
f 87/26/58 89/27/59 93/28/60
f 51/29/61 53/30/62 57/31/63
f 39/26/64 41/28/65 45/27/66
f 56/13/67 66/14/68 58/15/69
f 95/12/70 49/11/71 11/10/72
f 8/19/73 46/18/74 44/32/75
f 1/10/45 2/19/76 3/30/77
f 5/30/78 6/13/47 7/10/13
f 9/30/79 10/19/80 11/10/72
f 13/22/81 14/4/82 15/27/1
f 17/30/2 18/13/20 19/10/42
f 21/3/3 22/8/11 23/11/14
f 25/22/83 26/4/24 28/18/12
f 29/27/56 30/4/23 32/18/6
f 33/24/57 34/5/5 36/7/10
f 37/10/54 38/13/27 40/19/84
f 41/27/65 42/4/26 44/18/75
f 45/27/66 46/18/74 48/4/4
f 49/11/71 50/8/30 51/3/61
f 53/30/62 54/19/29 55/10/85
f 57/3/63 58/8/69 59/11/43
f 61/12/44 62/7/86 63/24/7
f 65/3/8 66/14/68 67/11/39
f 69/3/9 70/8/33 71/11/40
f 73/12/41 74/7/87 76/5/88
f 77/24/50 78/7/32 80/5/34
f 81/24/51 82/7/89 84/5/22
f 85/11/53 86/8/36 88/14/90
f 89/27/59 90/4/35 92/18/28
f 93/24/60 94/7/91 96/5/25
f 2/15/76 6/13/47 3/31/77
f 8/19/73 10/20/80 5/30/78
f 12/13/16 4/15/18 9/30/79
f 14/15/82 18/13/20 15/31/1
f 20/21/92 22/8/11 17/2/2
f 24/14/46 16/16/48 21/3/3
f 26/4/24 30/17/23 29/26/56
f 32/6/6 34/5/5 33/24/57
f 36/7/10 28/9/12 27/23/55
f 38/17/27 42/4/26 41/27/65
f 44/32/75 46/18/74 45/27/66
f 48/4/4 40/17/84 39/26/64
f 50/20/30 54/19/29 51/29/61
f 56/13/67 58/15/69 53/30/62
f 60/16/93 52/14/17 57/1/63
f 62/16/86 66/14/68 63/1/7
f 68/8/31 70/21/33 65/3/8
f 72/14/19 64/16/21 69/3/9
f 74/9/87 78/7/32 77/24/50
f 80/5/34 82/6/89 81/25/51
f 84/6/22 76/5/88 75/24/49
f 86/17/36 90/4/35 89/27/59
f 92/18/28 94/32/91 93/28/60
f 96/5/25 88/6/90 87/25/58
f 55/10/85 67/11/39 56/13/67
f 61/12/44 59/11/43 62/7/86
f 71/11/40 19/10/42 72/14/19
f 13/22/81 61/12/44 14/4/82
f 23/11/14 7/10/13 24/14/46
f 1/10/45 13/22/81 2/19/76
f 11/10/72 49/11/71 12/13/16
f 59/11/43 1/10/45 60/14/93
f 67/11/39 79/12/38 68/8/31
f 73/12/41 71/11/40 74/7/87
f 83/12/52 31/22/94 30/4/23
f 25/22/83 73/12/41 76/5/88
f 35/12/15 23/11/14 36/7/10
f 19/10/42 25/22/83 20/19/92
f 79/12/38 91/22/37 90/4/35
f 85/11/53 83/12/52 82/7/89
f 95/12/70 43/22/95 42/4/26
f 37/10/54 85/11/53 88/14/90
f 47/22/96 35/12/15 34/5/5
f 31/22/94 37/10/54 40/19/84
f 91/22/37 55/10/85 54/19/29
f 49/11/71 95/12/70 94/7/91
f 7/10/13 47/22/96 46/18/74
f 43/22/95 11/10/72 10/19/80
f 3/31/77 5/30/78 9/29/79
f 40/17/84 48/4/4 32/6/6
f 22/8/11 20/21/92 28/9/12
f 47/22/96 7/10/13 35/12/15
f 52/14/17 60/16/93 4/15/18
f 18/13/20 14/15/82 64/16/21
f 76/5/88 84/6/22 26/4/24
f 88/6/90 96/5/25 38/17/27
f 94/32/91 92/18/28 50/20/30
f 78/7/32 74/9/87 70/21/33
f 82/6/89 80/5/34 86/17/36
f 55/10/85 91/22/37 67/11/39
f 73/12/41 25/22/83 19/10/42
f 61/12/44 13/22/81 1/10/45
f 6/13/47 2/15/76 16/16/48
f 31/22/94 83/12/52 37/10/54
f 66/14/68 62/16/86 58/15/69
f 43/22/95 95/12/70 11/10/72
f 10/20/80 8/19/73 44/32/75
f 4/13/18 1/10/45 3/30/77
f 8/19/73 5/30/78 7/10/13
f 12/13/16 9/30/79 11/10/72
f 16/18/48 13/22/81 15/27/1
f 20/19/92 17/30/2 19/10/42
f 24/14/46 21/3/3 23/11/14
f 26/4/24 27/27/55 28/18/12
f 30/4/23 31/22/94 32/18/6
f 34/5/5 35/12/15 36/7/10
f 38/13/27 39/30/64 40/19/84
f 42/4/26 43/22/95 44/18/75
f 46/18/74 47/22/96 48/4/4
f 52/14/17 49/11/71 51/3/61
f 56/13/67 53/30/62 55/10/85
f 60/14/93 57/3/63 59/11/43
f 64/5/21 61/12/44 63/24/7
f 68/8/31 65/3/8 67/11/39
f 72/14/19 69/3/9 71/11/40
f 74/7/87 75/24/49 76/5/88
f 78/7/32 79/12/38 80/5/34
f 82/7/89 83/12/52 84/5/22
f 86/8/36 87/3/58 88/14/90
f 90/4/35 91/22/37 92/18/28
f 94/7/91 95/12/70 96/5/25
f 6/13/47 5/30/78 3/31/77
f 10/20/80 9/29/79 5/30/78
f 4/15/18 3/31/77 9/30/79
f 18/13/20 17/30/2 15/31/1
f 22/8/11 21/3/3 17/2/2
f 16/16/48 15/1/1 21/3/3
f 27/27/55 26/4/24 29/26/56
f 29/25/56 32/6/6 33/24/57
f 33/24/57 36/7/10 27/23/55
f 39/26/64 38/17/27 41/27/65
f 41/28/65 44/32/75 45/27/66
f 45/27/66 48/4/4 39/26/64
f 54/19/29 53/30/62 51/29/61
f 58/15/69 57/31/63 53/30/62
f 52/14/17 51/3/61 57/1/63
f 66/14/68 65/3/8 63/1/7
f 70/21/33 69/2/9 65/3/8
f 64/16/21 63/1/7 69/3/9
f 75/23/49 74/9/87 77/24/50
f 77/24/50 80/5/34 81/25/51
f 81/25/51 84/6/22 75/24/49
f 87/26/58 86/17/36 89/27/59
f 89/27/59 92/18/28 93/28/60
f 93/24/60 96/5/25 87/25/58
f 67/11/39 66/14/68 56/13/67
f 59/11/43 58/8/69 62/7/86
f 19/10/42 18/13/20 72/14/19
f 61/12/44 64/5/21 14/4/82
f 7/10/13 6/13/47 24/14/46
f 13/22/81 16/18/48 2/19/76
f 49/11/71 52/14/17 12/13/16
f 1/10/45 4/13/18 60/14/93
f 79/12/38 78/7/32 68/8/31
f 71/11/40 70/8/33 74/7/87
f 84/5/22 83/12/52 30/4/23
f 26/4/24 25/22/83 76/5/88
f 23/11/14 22/8/11 36/7/10
f 25/22/83 28/18/12 20/19/92
f 80/5/34 79/12/38 90/4/35
f 86/8/36 85/11/53 82/7/89
f 96/5/25 95/12/70 42/4/26
f 38/13/27 37/10/54 88/14/90
f 48/4/4 47/22/96 34/5/5
f 32/18/6 31/22/94 40/19/84
f 92/18/28 91/22/37 54/19/29
f 50/8/30 49/11/71 94/7/91
f 8/19/73 7/10/13 46/18/74
f 44/18/75 43/22/95 10/19/80

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB