diff --git a/components/pattern.ts b/components/pattern.ts
index 6b6c070..e8b19ef 100644
--- a/components/pattern.ts
+++ b/components/pattern.ts
@@ -1,10 +1,12 @@
export const patterns = [
- { name: 'no pattern', },
- { name: 'pattern1', filename: 'tile1.png' },
- { name: 'pattern2', filename: 'tile1.png' },
+ { name: 'Без узора', },
+ { name: 'Узор 1', filename: 'tile1.png' },
+ { name: 'Еще раз узор 1', filename: 'tile1.png' },
]
export const getFilename = (name: patternTypes) => {
- return `/pattern/${patterns.find(el => el.name == name)?.filename}`
+ const el = patterns.find(el => el.name == name)
+ if (!el || !el.filename) return undefined
+ return `/pattern/${el?.filename}`
}
export type patternTypes = typeof patterns[number]['name']
\ No newline at end of file
diff --git a/composables/useCalc.ts b/composables/useCalc.ts
index 0af1e4c..22ef575 100644
--- a/composables/useCalc.ts
+++ b/composables/useCalc.ts
@@ -13,7 +13,7 @@ export const use_fence_section = () => useState
('fence_section', () => m
export const use_remove_pillar = () => useState('remove_pillar', () => false)
export const use_pillar_color = () => useState('pillar_color')
export const use_lamelle_color = () => useState('lamelle_color')
-export const use_pattern = () => useState('pattern')
+export const use_pattern = () => useState('pattern', () => 'Без узора')
export const use_section_count = () => useState('section_count', () => n)
export const use_extra_section = () => useState('extra_section', () => 0)
export const use_total_length = () => useState('total_length', () => (((min + 104) * n) + 104) * 0.001)
diff --git a/utils/material.ts b/utils/material.ts
index cd9ce2d..9f68345 100644
--- a/utils/material.ts
+++ b/utils/material.ts
@@ -1,6 +1,6 @@
-import { Color, DoubleSide, MeshBasicMaterial, MeshStandardMaterial, RepeatWrapping, TextureLoader, Vector2 } from "three"
+import { Color, DoubleSide, MeshBasicMaterial, MeshStandardMaterial, RepeatWrapping, Texture, TextureLoader, Vector2 } from "three"
import { useLoader, type TresLoader } from '@tresjs/core'
-import { getFilename, type patternTypes } from "~/components/pattern"
+import { getFilename, patterns, type patternTypes } from "~/components/pattern"
const set_metaril_func = (scene: any, material: any) => {
scene.children.forEach((el: any) => {
@@ -12,13 +12,15 @@ const set_metaril_func = (scene: any, material: any) => {
set_metaril_func(el, material)
})
}
-// const texture = await useLoader(TextureLoader, '/fence_one/svg_tile1.svg');
-// const get_texture = async () => {
-// const texture = await useLoader(TextureLoader, '/fence_one/tile1.png');
-// return texture
-// }
-// const texture = await get_texture()
-// texture.wrapT = RepeatWrapping;
+
+const loaded_patterns: { [key: string]: any } = {}
+for (let index = 0; index < patterns.length; index++) {
+ const element = patterns[index];
+ const filename = getFilename(element.name)
+ if (filename) {
+ loaded_patterns[filename] = useLoader(TextureLoader, filename)
+ }
+}
export const set_material = (scene: any, color: any, pattern: { pattern: patternTypes, count: number } | undefined = undefined) => {
let c = color
@@ -35,14 +37,15 @@ export const set_material = (scene: any, color: any, pattern: { pattern: pattern
if (pattern && pattern.pattern !== undefined) {
const filename = getFilename(pattern.pattern)
- const texture = useLoader(TextureLoader, filename)
- texture.then(res => {
- res.wrapT = RepeatWrapping;
- res.repeat.set(1, pattern.count);
- res.needsUpdate = true
- // return res
- material.alphaMap = res
- })
+ if (filename) {
+ const texture = loaded_patterns[filename]
+ texture.then((res: Texture) => {
+ res.wrapT = RepeatWrapping;
+ res.repeat.set(1, pattern.count);
+ res.needsUpdate = true
+ material.alphaMap = res
+ })
+ }
}
set_metaril_func(scene, material)