dev #84
|
@ -68,7 +68,7 @@ watch([section_count, extra_section], () => {
|
||||||
<TresCanvas clear-color="#ccc">
|
<TresCanvas clear-color="#ccc">
|
||||||
<TresPerspectiveCamera v-bind="cameraStat" ref="camera" />
|
<TresPerspectiveCamera v-bind="cameraStat" ref="camera" />
|
||||||
<OrbitControls v-bind="controlsState" make-default />
|
<OrbitControls v-bind="controlsState" make-default />
|
||||||
<TresGroup :position-x="Math.min(section_count, max_size) * fence_section * -1">
|
<TresGroup>
|
||||||
<Suspense>
|
<Suspense>
|
||||||
<ModelParametric />
|
<ModelParametric />
|
||||||
</Suspense>
|
</Suspense>
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { BufferGeometry, Matrix4, Vector2, Vector3 } from 'three';
|
import { BufferGeometry, Matrix4, Vector2, Vector3 } from 'three';
|
||||||
|
|
||||||
const props = defineProps(['index', 'models'])
|
const props = defineProps(['index', 'models', 'last_element'])
|
||||||
|
|
||||||
const lamelle_height = use_lamelle_height()
|
const lamelle_height = use_lamelle_height()
|
||||||
const lamelles_count = use_lamelles_count()
|
const lamelles_count = use_lamelles_count()
|
||||||
|
@ -22,12 +22,7 @@ const scale_koef = 1
|
||||||
const show_pillar_one = ref(props.index == 1)
|
const show_pillar_one = ref(props.index == 1)
|
||||||
const show_pillar_two = ref(true)
|
const show_pillar_two = ref(true)
|
||||||
|
|
||||||
const last_element = ref(Math.min((section_count.value + ~~(!!extra_section.value)), max_size.value))
|
const getExtraValue = () => (extra_section.value && props.last_element) ? extra_section.value * 0.001 : false
|
||||||
watch([section_count, fence_section, extra_section], () => {
|
|
||||||
last_element.value = Math.min(section_count.value + ~~(!!extra_section.value), max_size.value)
|
|
||||||
})
|
|
||||||
|
|
||||||
const getExtraValue = () => (extra_section.value && props.index == last_element.value) ? extra_section.value * 0.001 : false
|
|
||||||
const extra = ref(getExtraValue())
|
const extra = ref(getExtraValue())
|
||||||
if (extra.value) {
|
if (extra.value) {
|
||||||
pillar_one_pos.value = (extra.value as number) * -0.5 - 0.015
|
pillar_one_pos.value = (extra.value as number) * -0.5 - 0.015
|
||||||
|
@ -78,7 +73,7 @@ watch([instanced_lamelle, fence_section, extra_section, lamelles_count, extra],
|
||||||
|
|
||||||
watch([section_count, fence_section, extra_section], () => {
|
watch([section_count, fence_section, extra_section], () => {
|
||||||
extra.value = getExtraValue()
|
extra.value = getExtraValue()
|
||||||
if (extra_section.value && props.index == last_element.value) {
|
if (extra_section.value && props.last_element) {
|
||||||
pillar_one_pos.value = (extra.value as number) * -0.5 - 0.015
|
pillar_one_pos.value = (extra.value as number) * -0.5 - 0.015
|
||||||
pillar_two_pos.value = (extra.value as number) * 0.5 + pillar_size + bSize - 0.01
|
pillar_two_pos.value = (extra.value as number) * 0.5 + pillar_size + bSize - 0.01
|
||||||
// translate_to_section.value = make_translate_to_section(extra_section.value * 0.001)
|
// translate_to_section.value = make_translate_to_section(extra_section.value * 0.001)
|
||||||
|
|
|
@ -10,9 +10,9 @@ const rotate = () => {
|
||||||
case 2:
|
case 2:
|
||||||
return degToRad(90)
|
return degToRad(90)
|
||||||
case 3:
|
case 3:
|
||||||
return degToRad(180)
|
|
||||||
case 4:
|
|
||||||
return degToRad(270)
|
return degToRad(270)
|
||||||
|
case 4:
|
||||||
|
return degToRad(180)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const { seekByName } = useSeek()
|
const { seekByName } = useSeek()
|
||||||
|
@ -21,49 +21,41 @@ const { scene } = useTresContext()
|
||||||
const section_count = use_section_count()
|
const section_count = use_section_count()
|
||||||
const extra_section = use_extra_section()
|
const extra_section = use_extra_section()
|
||||||
|
|
||||||
const size = ref(new Vector3())
|
|
||||||
const position = ref(new Vector3())
|
|
||||||
const total = ref((section_count.value + ~~(!!extra_section.value)))
|
const total = ref((section_count.value + ~~(!!extra_section.value)))
|
||||||
|
const position = ref(new Vector3())
|
||||||
const count_pos = () => {
|
const count_pos = () => {
|
||||||
total.value = (section_count.value + ~~(!!extra_section.value))
|
total.value = (section_count.value + ~~(!!extra_section.value))
|
||||||
|
|
||||||
const line = seekByName(scene.value, `line_${props.number}`)
|
const line = seekByName(scene.value, `line_${props.number}`)
|
||||||
const ssize = new Vector3()
|
const line_size = new Vector3()
|
||||||
|
const line_pos = new Vector3()
|
||||||
if (line && line.children.length) {
|
if (line && line.children.length) {
|
||||||
line.updateMatrixWorld()
|
line.updateMatrixWorld()
|
||||||
const bbox = new Box3()
|
new Box3().expandByObject(line).getSize(line_size)
|
||||||
bbox.expandByObject(line)
|
line.getWorldPosition(line_pos)
|
||||||
bbox.getSize(ssize)
|
console.log(`line_${props.number}`, line, line_size, line_pos)
|
||||||
const fence = line.children[0];
|
|
||||||
if (fence) {
|
|
||||||
const box = new Box3();
|
|
||||||
fence.children.forEach(element => {
|
|
||||||
box.expandByObject(element);
|
|
||||||
});
|
|
||||||
box.getSize(size.value)
|
|
||||||
}
|
}
|
||||||
|
const line1 = seekByName(scene.value, `line_1`);
|
||||||
|
const line1_size = new Vector3()
|
||||||
|
const line1_pos = new Vector3()
|
||||||
|
if (line1) {
|
||||||
|
new Box3().expandByObject(line1).getSize(line1_size)
|
||||||
|
line1.getWorldPosition(line1_pos)
|
||||||
|
console.log('first', line1, line1_size, line1_pos)
|
||||||
}
|
}
|
||||||
console.log(`${props.number} ${JSON.stringify(size.value)} ${JSON.stringify(ssize)}`)
|
|
||||||
switch (props.number) {
|
switch (props.number) {
|
||||||
case 1: break;
|
case 1: break;
|
||||||
case 2:
|
case 2:
|
||||||
// position.value.x = size.value.z * props.count
|
// position.value.x = line_size.y
|
||||||
// position.value.z = size.value.z * props.count
|
position.value.z = line1_size.z * -1
|
||||||
position.value.x = ssize.z * -1
|
|
||||||
position.value.z = ssize.z
|
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
// position.value.x = size.value.x * props.count * 3
|
position.value.z = line1_size.x * -1
|
||||||
// position.value.z = size.value.x * props.count * 1 * -1
|
position.value.x = line1_size.x
|
||||||
position.value.x = ssize.x
|
|
||||||
position.value.z = ssize.x * -1
|
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
// position.value.x = size.value.y * props.count * 0.25 * -1
|
position.value.z = line1_size.x * -1
|
||||||
// position.value.z = size.value.y * props.count * 3 * -1
|
position.value.x = line1_size.x
|
||||||
position.value.x = ssize.y
|
|
||||||
position.value.z = ssize.y * -1
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -73,11 +65,13 @@ onMounted(() => {
|
||||||
watch(() => [props.count, section_count.value, extra_section.value], count_pos)
|
watch(() => [props.count, section_count.value, extra_section.value], count_pos)
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<TresGroup :name="`line_${props.number}`" :rotate-y="rotate()" :position-z="position.z" :position-x="position.x">
|
<TresGroup :name="`line_${props.number}`" :rotate-y="rotate()" :position-x="position.x" :position-y="position.y"
|
||||||
|
:position-z="position.z">
|
||||||
<template v-for="i in props.count">
|
<template v-for="i in props.count">
|
||||||
<template v-if="(i + (props.number - 1) * props.count) <= total"
|
<template v-if="(i + (props.number - 1) * props.count) <= total"
|
||||||
:key="(i + (props.number - 1) * props.count)">
|
:key="(i + (props.number - 1) * props.count)">
|
||||||
<ModelFence :index="i + (props.number - 1) * props.count" :models="props.models" />
|
<ModelFence :index="i" :models="props.models"
|
||||||
|
:last_element="(i + (props.number - 1) * props.count) == total" />
|
||||||
</template>
|
</template>
|
||||||
</template>
|
</template>
|
||||||
</TresGroup>
|
</TresGroup>
|
||||||
|
|
Loading…
Reference in New Issue