@abi-software/scaffoldvuer 0.2.2 → 0.2.3-alpha-2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/.eslintrc.js +12 -12
  2. package/CHANGELOG.md +316 -316
  3. package/LICENSE +201 -201
  4. package/README.md +164 -164
  5. package/babel.config.js +14 -14
  6. package/dist/scaffoldvuer-wc.common.js +183 -35
  7. package/dist/scaffoldvuer-wc.umd.js +183 -35
  8. package/dist/scaffoldvuer-wc.umd.min.js +183 -35
  9. package/dist/scaffoldvuer.common.js +1086 -717
  10. package/dist/scaffoldvuer.common.js.map +1 -1
  11. package/dist/scaffoldvuer.css +1 -1
  12. package/dist/scaffoldvuer.umd.js +1086 -717
  13. package/dist/scaffoldvuer.umd.js.map +1 -1
  14. package/dist/scaffoldvuer.umd.min.js +1 -1
  15. package/dist/scaffoldvuer.umd.min.js.map +1 -1
  16. package/package-lock.json +18119 -18121
  17. package/package.json +89 -89
  18. package/public/index.html +17 -17
  19. package/src/App.vue +669 -714
  20. package/src/ScaffoldVuer-wc.js +13 -13
  21. package/src/{components → app}/DropZone.vue +114 -114
  22. package/src/{components → app}/ModelsInformation.js +35 -35
  23. package/src/{components → app}/ModelsTable.vue +113 -113
  24. package/src/app/TextureDemos.js +114 -0
  25. package/src/assets/_variables.scss +43 -43
  26. package/src/assets/styles.scss +7 -7
  27. package/src/components/OpacityControls.vue +222 -222
  28. package/src/components/ScaffoldTooltip.vue +142 -141
  29. package/src/components/ScaffoldVuer.md +44 -44
  30. package/src/components/ScaffoldVuer.vue +2007 -1887
  31. package/src/components/TreeControls.vue +699 -691
  32. package/src/components/index.js +7 -7
  33. package/src/components/test.pdf +0 -0
  34. package/src/main.js +14 -14
  35. package/src/scripts/BaseModule.js +80 -80
  36. package/src/scripts/RendererModule.js +289 -289
  37. package/src/scripts/WebGL.js +94 -94
  38. package/src/scripts/annotation.js +5 -5
  39. package/src/scripts/eventNotifier.js +66 -66
  40. package/src/scripts/graphicsHighlight.js +134 -134
  41. package/src/scripts/organsRenderer.js +587 -606
  42. package/src/scripts/search.js +182 -153
  43. package/src/scripts/utilities.js +146 -43
  44. package/src/searchControls.vue +122 -0
  45. package/styleguide.config.js +22 -22
  46. package/vue.config.js +41 -41
  47. package/src/credential.json +0 -12
@@ -1,14 +1,14 @@
1
- import Vue from 'vue'
2
- import vueCustomElement from 'vue-custom-element';
3
-
4
- Vue.use(vueCustomElement);
5
-
6
- import ScaffoldVuer from "./components/ScaffoldVuer.vue";
7
-
8
- Vue.customElement("scaffoldvuer-wc", ScaffoldVuer);
9
-
10
- /*
11
- const wrappedElement = wrap(Vue, ScaffoldVuer);
12
-
13
- window.customElements.define("scaffoldvuer-wc", wrappedElement);
1
+ import Vue from 'vue'
2
+ import vueCustomElement from 'vue-custom-element';
3
+
4
+ Vue.use(vueCustomElement);
5
+
6
+ import ScaffoldVuer from "./components/ScaffoldVuer.vue";
7
+
8
+ Vue.customElement("scaffoldvuer-wc", ScaffoldVuer);
9
+
10
+ /*
11
+ const wrappedElement = wrap(Vue, ScaffoldVuer);
12
+
13
+ window.customElements.define("scaffoldvuer-wc", wrappedElement);
14
14
  */
@@ -1,114 +1,114 @@
1
- <template>
2
- <div
3
- ref="dropEl"
4
- class="dropzone"
5
- >
6
- <slot />
7
- <input
8
- ref="fileInput"
9
- type="file"
10
- >
11
- </div>
12
- </template>
13
-
14
- <script>
15
- /* eslint-disable no-alert, no-console */
16
- import { SimpleDropzone } from "simple-dropzone";
17
- import path from "path";
18
-
19
- export default {
20
- name: "DropZone",
21
- data: function () {
22
- return {
23
- objectURLs: [],
24
- };
25
- },
26
- mounted: function () {
27
- const dropCtrl = new SimpleDropzone(
28
- this.$refs.dropEl,
29
- this.$refs.fileInput
30
- );
31
- dropCtrl.on("drop", ({ files }) => {
32
- this.localDrop(files);
33
- });
34
- },
35
- methods: {
36
- createMetadataObjectURLs: function (text, list) {
37
- let content = text;
38
- for (const [key, file] of Object.entries(list)) {
39
- if (content.includes(key)) {
40
- const objectURL = URL.createObjectURL(file);
41
- const re = new RegExp(key, "g");
42
- content = content.replace(re, objectURL);
43
- this.objectURLs.push(objectURL);
44
- }
45
- }
46
- let blob = new Blob([content], { type: "application/json" });
47
- const metaURL = URL.createObjectURL(blob);
48
- this.objectURLs.push(metaURL);
49
- this.$emit("files-drop", { url: metaURL, format : "metadata" } );
50
- },
51
- createGLTFURL: function (content, binary) {
52
- let type = binary ? 'model/gltf+binary' : 'model/gltf+json';
53
- let blob = new Blob([content], { type });
54
- const gltfURL = URL.createObjectURL(blob);
55
- this.objectURLs.push(gltfURL);
56
- this.$emit("files-drop", { url: gltfURL, format : "gltf" });
57
- },
58
- revokeURLs: function () {
59
- this.objectURLs.forEach(objectURL => URL.revokeObjectURL(objectURL));
60
- this.objectURLs = [];
61
- },
62
- localDrop: function (fileMap) {
63
- const dataMaps = {};
64
- let list = {};
65
- let metadata = undefined;
66
- let gltf = undefined;
67
- let binary = false;
68
- const flatarray = Array.from(fileMap);
69
- let rootPath = "";
70
- for (let i = 0; i < flatarray.length; i++) {
71
- if (flatarray[i][1].name.includes("metadata.json")) {
72
- rootPath = flatarray[i][0].replace(flatarray[i][1].name, "");
73
- metadata = { rootPath, file: flatarray[i][1] };
74
- break;
75
- }
76
- if (flatarray[i][1].name.includes(".glb")) {
77
- gltf = { rootPath, file: flatarray[i][1] };
78
- binary = true;
79
- break;
80
- }
81
- if (flatarray[i][1].name.includes(".gltf")) {
82
- gltf = { rootPath, file: flatarray[i][1] };
83
- binary = false;
84
- break;
85
- }
86
- }
87
- if (metadata) {
88
- flatarray.forEach(([filePath, file]) => {
89
- if (file.name.match(/\.(json)$/)) {
90
- const relativePath = path.relative(rootPath, filePath);
91
- list[relativePath] = file;
92
- }
93
- });
94
- const metaFileURL = URL.createObjectURL(metadata.file);
95
- fetch(metaFileURL)
96
- .then((response) => response.text())
97
- .then((text) => this.createMetadataObjectURLs(text, list));
98
- URL.revokeObjectURL(metaFileURL);
99
- }
100
- if (gltf) {
101
- this.createGLTFURL(gltf.file, binary);
102
- }
103
- },
104
- },
105
- };
106
- </script>
107
-
108
- <style scoped lang="scss">
109
- .dropzone {
110
- position: absolute;
111
- width: 100%;
112
- height: 100%;
113
- }
114
- </style>
1
+ <template>
2
+ <div
3
+ ref="dropEl"
4
+ class="dropzone"
5
+ >
6
+ <slot />
7
+ <input
8
+ ref="fileInput"
9
+ type="file"
10
+ >
11
+ </div>
12
+ </template>
13
+
14
+ <script>
15
+ /* eslint-disable no-alert, no-console */
16
+ import { SimpleDropzone } from "simple-dropzone";
17
+ import path from "path";
18
+
19
+ export default {
20
+ name: "DropZone",
21
+ data: function () {
22
+ return {
23
+ objectURLs: [],
24
+ };
25
+ },
26
+ mounted: function () {
27
+ const dropCtrl = new SimpleDropzone(
28
+ this.$refs.dropEl,
29
+ this.$refs.fileInput
30
+ );
31
+ dropCtrl.on("drop", ({ files }) => {
32
+ this.localDrop(files);
33
+ });
34
+ },
35
+ methods: {
36
+ createMetadataObjectURLs: function (text, list) {
37
+ let content = text;
38
+ for (const [key, file] of Object.entries(list)) {
39
+ if (content.includes(key)) {
40
+ const objectURL = URL.createObjectURL(file);
41
+ const re = new RegExp(key, "g");
42
+ content = content.replace(re, objectURL);
43
+ this.objectURLs.push(objectURL);
44
+ }
45
+ }
46
+ let blob = new Blob([content], { type: "application/json" });
47
+ const metaURL = URL.createObjectURL(blob);
48
+ this.objectURLs.push(metaURL);
49
+ this.$emit("files-drop", { url: metaURL, format : "metadata" } );
50
+ },
51
+ createGLTFURL: function (content, binary) {
52
+ let type = binary ? 'model/gltf+binary' : 'model/gltf+json';
53
+ let blob = new Blob([content], { type });
54
+ const gltfURL = URL.createObjectURL(blob);
55
+ this.objectURLs.push(gltfURL);
56
+ this.$emit("files-drop", { url: gltfURL, format : "gltf" });
57
+ },
58
+ revokeURLs: function () {
59
+ this.objectURLs.forEach(objectURL => URL.revokeObjectURL(objectURL));
60
+ this.objectURLs = [];
61
+ },
62
+ localDrop: function (fileMap) {
63
+ const dataMaps = {};
64
+ let list = {};
65
+ let metadata = undefined;
66
+ let gltf = undefined;
67
+ let binary = false;
68
+ const flatarray = Array.from(fileMap);
69
+ let rootPath = "";
70
+ for (let i = 0; i < flatarray.length; i++) {
71
+ if (flatarray[i][1].name.includes("metadata.json")) {
72
+ rootPath = flatarray[i][0].replace(flatarray[i][1].name, "");
73
+ metadata = { rootPath, file: flatarray[i][1] };
74
+ break;
75
+ }
76
+ if (flatarray[i][1].name.includes(".glb")) {
77
+ gltf = { rootPath, file: flatarray[i][1] };
78
+ binary = true;
79
+ break;
80
+ }
81
+ if (flatarray[i][1].name.includes(".gltf")) {
82
+ gltf = { rootPath, file: flatarray[i][1] };
83
+ binary = false;
84
+ break;
85
+ }
86
+ }
87
+ if (metadata) {
88
+ flatarray.forEach(([filePath, file]) => {
89
+ if (file.name.match(/\.(json)$/)) {
90
+ const relativePath = path.relative(rootPath, filePath);
91
+ list[relativePath] = file;
92
+ }
93
+ });
94
+ const metaFileURL = URL.createObjectURL(metadata.file);
95
+ fetch(metaFileURL)
96
+ .then((response) => response.text())
97
+ .then((text) => this.createMetadataObjectURLs(text, list));
98
+ URL.revokeObjectURL(metaFileURL);
99
+ }
100
+ if (gltf) {
101
+ this.createGLTFURL(gltf.file, binary);
102
+ }
103
+ },
104
+ },
105
+ };
106
+ </script>
107
+
108
+ <style scoped lang="scss">
109
+ .dropzone {
110
+ position: absolute;
111
+ width: 100%;
112
+ height: 100%;
113
+ }
114
+ </style>
@@ -1,35 +1,35 @@
1
- const { GoogleSpreadsheet } = require('google-spreadsheet');
2
-
3
- /* eslint-disable no-alert, no-console */
4
- export default {
5
- data: function() {
6
- return {
7
- tableData: [],
8
- };
9
- },
10
- methods: {
11
- createTable: async function(sheetRows, keywords) {
12
- for (let i = 0; i < sheetRows.length; i++) {
13
- let mappedData = {};
14
- for (let j = 0; j < keywords.length; j++) {
15
- let keyword = keywords[j];
16
- mappedData[keyword] = sheetRows[i][keyword];
17
- }
18
- this.tableData.push(mappedData);
19
- }
20
- },
21
- getModelsInformation: async function() {
22
- const doc = new GoogleSpreadsheet(process.env.VUE_APP_GOOGLE_SPREADSHEET_ID);
23
- await doc.useServiceAccountAuth({
24
- client_email: process.env.VUE_APP_GOOGLE_SERVICE_SCAFFOLDVUER_EMAIL,
25
- private_key: process.env.VUE_APP_GOOGLE_PRIVATE_SCAFFOLDVUER_KEY,
26
- });
27
- await doc.loadInfo(); // loads document properties and worksheets
28
- const sheet = doc.sheetsByIndex[0];
29
- const sheetRows = await sheet.getRows();
30
- const keys = ["Organ", "Species", "Note", "Location",
31
- "Last modified","Blackfynn dataset", "Published", "Discover"];
32
- this.createTable(sheetRows, keys);
33
- }
34
- }
35
- }
1
+ const { GoogleSpreadsheet } = require('google-spreadsheet');
2
+
3
+ /* eslint-disable no-alert, no-console */
4
+ export default {
5
+ data: function() {
6
+ return {
7
+ tableData: [],
8
+ };
9
+ },
10
+ methods: {
11
+ createTable: async function(sheetRows, keywords) {
12
+ for (let i = 0; i < sheetRows.length; i++) {
13
+ let mappedData = {};
14
+ for (let j = 0; j < keywords.length; j++) {
15
+ let keyword = keywords[j];
16
+ mappedData[keyword] = sheetRows[i][keyword];
17
+ }
18
+ this.tableData.push(mappedData);
19
+ }
20
+ },
21
+ getModelsInformation: async function() {
22
+ const doc = new GoogleSpreadsheet(process.env.VUE_APP_GOOGLE_SPREADSHEET_ID);
23
+ await doc.useServiceAccountAuth({
24
+ client_email: process.env.VUE_APP_GOOGLE_SERVICE_SCAFFOLDVUER_EMAIL,
25
+ private_key: process.env.VUE_APP_GOOGLE_PRIVATE_SCAFFOLDVUER_KEY,
26
+ });
27
+ await doc.loadInfo(); // loads document properties and worksheets
28
+ const sheet = doc.sheetsByIndex[0];
29
+ const sheetRows = await sheet.getRows();
30
+ const keys = ["Organ", "Species", "Note", "Location",
31
+ "Last modified","Blackfynn dataset", "Published", "Discover"];
32
+ this.createTable(sheetRows, keys);
33
+ }
34
+ }
35
+ }
@@ -1,113 +1,113 @@
1
- <template>
2
- <div>
3
- <el-input
4
- v-model="search"
5
- size="mini"
6
- placeholder="Type to search"
7
- />
8
- <el-table
9
- :data="tableData.filter(
10
- data => !search ||
11
- data.Organ.toLowerCase().includes(search.toLowerCase()) ||
12
- data.Species.toLowerCase().includes(search.toLowerCase()) ||
13
- data.Note.toLowerCase().includes(search.toLowerCase()))"
14
- style="width: 100%;"
15
- height="600"
16
- >
17
- <el-table-column
18
- prop="Organ"
19
- label="Organ"
20
- width="100"
21
- />
22
- <el-table-column
23
- prop="Species"
24
- label="Species"
25
- width="100"
26
- />
27
- <el-table-column
28
- prop="Note"
29
- label="Note"
30
- width="200"
31
- />
32
- <el-table-column
33
- prop="Last modified"
34
- label="Last modified"
35
- width="250"
36
- />
37
- <el-table-column
38
- fixed="right"
39
- label="Action"
40
- width="300"
41
- >
42
- <template slot-scope="scope">
43
- <el-button
44
- size="mini"
45
- @click="handleView(scope.row)"
46
- >
47
- View
48
- </el-button>
49
- <el-button
50
- v-if="scope.row.Discover !== 'Not even'"
51
- size="mini"
52
- @click="handleDiscover(scope.row)"
53
- >
54
- Discover
55
- </el-button>
56
- <el-button
57
- v-if="scope.row['Blackfynn dataset'] !== '/'"
58
- size="mini"
59
- @click="handleBlackfynn(scope.row)"
60
- >
61
- Blackfynn
62
- </el-button>
63
- </template>
64
- </el-table-column>
65
- </el-table>
66
- </div>
67
- </template>
68
-
69
- <script>
70
- /* eslint-disable no-alert, no-console */
71
- import Vue from "vue";
72
- import models from './ModelsInformation'
73
- import { Button, Input, Table, TableColumn } from "element-ui";
74
- import lang from "element-ui/lib/locale/lang/en";
75
- import locale from "element-ui/lib/locale";
76
-
77
- locale.use(lang);
78
- Vue.use(Button);
79
- Vue.use(Input);
80
- Vue.use(Table);
81
- Vue.use(TableColumn);
82
-
83
-
84
- export default {
85
- name: "ModelsTable",
86
- mixins: [models],
87
- data() {
88
- return {
89
- search: '',
90
- }
91
- },
92
- created: function() {
93
- this.getModelsInformation();
94
- },
95
- methods: {
96
- handleView: function(row) {
97
- this.$emit("viewModelClicked", row.Location);
98
- },
99
- handleDiscover: function(row) {
100
- window.open(row.Discover, "_blank");
101
- },
102
- handleBlackfynn: function(row) {
103
- window.open(row['Blackfynn dataset'], "_blank");
104
- },
105
- }
106
- };
107
- </script>
108
-
109
- <style scoped lang="scss">
110
- @import "~element-ui/packages/theme-chalk/src/input";
111
- @import "~element-ui/packages/theme-chalk/src/table";
112
- @import "~element-ui/packages/theme-chalk/src/table-column";
113
- </style>
1
+ <template>
2
+ <div>
3
+ <el-input
4
+ v-model="search"
5
+ size="mini"
6
+ placeholder="Type to search"
7
+ />
8
+ <el-table
9
+ :data="tableData.filter(
10
+ data => !search ||
11
+ data.Organ.toLowerCase().includes(search.toLowerCase()) ||
12
+ data.Species.toLowerCase().includes(search.toLowerCase()) ||
13
+ data.Note.toLowerCase().includes(search.toLowerCase()))"
14
+ style="width: 100%;"
15
+ height="600"
16
+ >
17
+ <el-table-column
18
+ prop="Organ"
19
+ label="Organ"
20
+ width="100"
21
+ />
22
+ <el-table-column
23
+ prop="Species"
24
+ label="Species"
25
+ width="100"
26
+ />
27
+ <el-table-column
28
+ prop="Note"
29
+ label="Note"
30
+ width="200"
31
+ />
32
+ <el-table-column
33
+ prop="Last modified"
34
+ label="Last modified"
35
+ width="250"
36
+ />
37
+ <el-table-column
38
+ fixed="right"
39
+ label="Action"
40
+ width="300"
41
+ >
42
+ <template slot-scope="scope">
43
+ <el-button
44
+ size="mini"
45
+ @click="handleView(scope.row)"
46
+ >
47
+ View
48
+ </el-button>
49
+ <el-button
50
+ v-if="scope.row.Discover !== 'Not even'"
51
+ size="mini"
52
+ @click="handleDiscover(scope.row)"
53
+ >
54
+ Discover
55
+ </el-button>
56
+ <el-button
57
+ v-if="scope.row['Blackfynn dataset'] !== '/'"
58
+ size="mini"
59
+ @click="handleBlackfynn(scope.row)"
60
+ >
61
+ Blackfynn
62
+ </el-button>
63
+ </template>
64
+ </el-table-column>
65
+ </el-table>
66
+ </div>
67
+ </template>
68
+
69
+ <script>
70
+ /* eslint-disable no-alert, no-console */
71
+ import Vue from "vue";
72
+ import models from './ModelsInformation'
73
+ import { Button, Input, Table, TableColumn } from "element-ui";
74
+ import lang from "element-ui/lib/locale/lang/en";
75
+ import locale from "element-ui/lib/locale";
76
+
77
+ locale.use(lang);
78
+ Vue.use(Button);
79
+ Vue.use(Input);
80
+ Vue.use(Table);
81
+ Vue.use(TableColumn);
82
+
83
+
84
+ export default {
85
+ name: "ModelsTable",
86
+ mixins: [models],
87
+ data() {
88
+ return {
89
+ search: '',
90
+ }
91
+ },
92
+ created: function() {
93
+ this.getModelsInformation();
94
+ },
95
+ methods: {
96
+ handleView: function(row) {
97
+ this.$emit("viewModelClicked", row.Location);
98
+ },
99
+ handleDiscover: function(row) {
100
+ window.open(row.Discover, "_blank");
101
+ },
102
+ handleBlackfynn: function(row) {
103
+ window.open(row['Blackfynn dataset'], "_blank");
104
+ },
105
+ }
106
+ };
107
+ </script>
108
+
109
+ <style scoped lang="scss">
110
+ @import "~element-ui/packages/theme-chalk/src/input";
111
+ @import "~element-ui/packages/theme-chalk/src/table";
112
+ @import "~element-ui/packages/theme-chalk/src/table-column";
113
+ </style>
@@ -0,0 +1,114 @@
1
+ import volumeTexture from "zincjs/src/shaders/volumeTexture.js";
2
+
3
+ const getVolumeTexture = (texture) => {
4
+ const myUniforms = volumeTexture.getUniforms();
5
+ myUniforms.volume_scale.value.set(
6
+ texture.size.width / texture.size.depth,
7
+ texture.size.height / texture.size.depth,
8
+ 1
9
+ );
10
+ myUniforms.diffuse.value = texture.impl;
11
+ myUniforms.depth.value = texture.size.depth;
12
+ myUniforms.volume_dims.value = [200, 200, 200];
13
+ const options = {
14
+ fs: volumeTexture.fs,
15
+ vs: volumeTexture.vs,
16
+ uniforms: myUniforms,
17
+ glslVersion: volumeTexture.glslVersion,
18
+ };
19
+ return options;
20
+ };
21
+
22
+ const getTexture = async (scaffoldModule, texture_prefix) => {
23
+ const imgArray = [];
24
+ const texture = new scaffoldModule.Zinc.TextureArray();
25
+ for (let i = 1733; i < 1860; i++) {
26
+ imgArray.push(`${texture_prefix}/foot${i}.jpg`);
27
+ //imgArray.push(`${process.env.VUE_APP_TEXTURE_FOOT_PREFIX}/foot${i}.jpg`);
28
+ }
29
+ await texture.loadFromImages(imgArray);
30
+ return texture;
31
+ };
32
+
33
+ export const testVolume = async (scaffoldVuer, texture_prefix) => {
34
+ const cube = new scaffoldVuer.$module.Zinc.THREE.BoxGeometry(1, 1, 1);
35
+ const zincObject = new scaffoldVuer.$module.Zinc.Geometry();
36
+ zincObject.setName("Texture volume");
37
+ cube.translate(0.5, 0.5, 0.5);
38
+ let meshOptions = {};
39
+ meshOptions.opacity = 1.0;
40
+ meshOptions.localTimeEnabled = false;
41
+ meshOptions.localMorphColour = false;
42
+ const texture = await getTexture(scaffoldVuer.$module, texture_prefix);
43
+ const options = getVolumeTexture(texture);
44
+ const material = texture.getMaterial(options);
45
+ zincObject.createMesh(cube, material, meshOptions);
46
+ scaffoldVuer.addZincObject(zincObject);
47
+ zincObject.morph.matrix.set(
48
+ -100,
49
+ 0,
50
+ 0,
51
+ -60,
52
+ 0,
53
+ -100,
54
+ 0,
55
+ -100,
56
+ 0,
57
+ 0,
58
+ -100,
59
+ 30,
60
+ 0,
61
+ 0,
62
+ 0,
63
+ 1
64
+ );
65
+ //console.log(zincObject.morph.matrix)
66
+ window.texture = zincObject;
67
+ };
68
+
69
+ export const testSlides = async (scaffoldVuer, texture_prefix) => {
70
+ const scaffoldModule = scaffoldVuer.$module;
71
+ const texture = await getTexture(scaffoldModule, texture_prefix);
72
+ const textureSlides = new scaffoldModule.Zinc.TextureSlides(texture);
73
+ textureSlides.setName("Texture slides");
74
+ textureSlides.createSlides([
75
+ {
76
+ direction: "y",
77
+ value: 0.1,
78
+ },
79
+ {
80
+ direction: "y",
81
+ value: 0.3,
82
+ },
83
+ {
84
+ direction: "y",
85
+ value: 0.5,
86
+ },
87
+ {
88
+ direction: "y",
89
+ value: 0.7,
90
+ },
91
+ {
92
+ direction: "y",
93
+ value: 0.9,
94
+ },
95
+ {
96
+ direction: "x",
97
+ value: 0.5,
98
+ },
99
+ {
100
+ direction: "z",
101
+ value: 0.5,
102
+ },
103
+ ]);
104
+ //textureSlides.morph.matrix.set(-100, 0, 0, 0, 0, -100, 0, 0, 0, 0, -100, 0, -60, -100, 30, 1);
105
+ //textureSlides.morph.matrix.set( -100, 0, 0, -60, 0, -100, 0, -100, 0, 0, -100, 30, 0, 0, 0, 1 );
106
+
107
+ const n = textureSlides.morph.matrix.clone();
108
+ n.set(-100, 0, 0, -10, 0, -200, 0, 0, 0, 0, -100, 0, 0, 0, 10, 1);
109
+ textureSlides.morph.applyMatrix4(n);
110
+ scaffoldVuer.addZincObject(textureSlides);
111
+ //scaffoldVuer.fitWindow();
112
+ window.texture = textureSlides;
113
+ };
114
+