clickable areas request

This commit is contained in:
Kseninia Mikhaylova 2024-06-26 18:00:36 +03:00
parent 488e70e493
commit e5725ee0c2
2 changed files with 23 additions and 9 deletions

View File

@ -23,6 +23,14 @@ interface model3DType {
modelUrl?: string, modelUrl?: string,
modelFile?: any modelFile?: any
} }
interface clickableAreaType {
description: string;
id: number;
name: string;
object_name: string;
source: number;
target: number;
}
function shadows_and_pos(scene: any) { function shadows_and_pos(scene: any) {
scene.children.forEach((el: any) => { scene.children.forEach((el: any) => {
@ -33,14 +41,18 @@ function shadows_and_pos(scene: any) {
} }
const models = ref<model3DType[]>([]) const models = ref<model3DType[]>([])
const clickable = ref<clickableAreaType[]>([])
const { controls, raycaster, camera, scene } = useTresContext() const { controls, raycaster, camera, scene } = useTresContext()
const loadModels = async () => { const loadModels = async () => {
const res = await fetch(`${SERVER_URL}/api/obj/element/?parent__isnull=True`) const res = await fetch(`${SERVER_URL}/api/obj/element/?parent__isnull=True`)
const data = await res.json() as element3DType[] const data = await res.json() as element3DType[]
if (!controls.value) return
const c = (controls.value as any)
const distance = { const distance = {
min: controls.value.minDistance, min: c.minDistance,
max: controls.value.maxDistance == Infinity ? 1 : controls.value.maxDistance, max: c.maxDistance == Infinity ? 1 : c.maxDistance,
} };
for (let index = 0; index < data.length; index++) { for (let index = 0; index < data.length; index++) {
const element = data[index]; const element = data[index];
const item = {} as model3DType const item = {} as model3DType
@ -62,11 +74,15 @@ const loadModels = async () => {
if (max_size.x > box_size.x) max_size.x = box_size.x if (max_size.x > box_size.x) max_size.x = box_size.x
if (max_size.y > box_size.y) max_size.y = box_size.y if (max_size.y > box_size.y) max_size.y = box_size.y
if (max_size.z > box_size.z) max_size.z = box_size.z if (max_size.z > box_size.z) max_size.z = box_size.z
const res = await fetch(`${SERVER_URL}/api/obj/clickable/?source=${element.id}`)
const clickable_areas = await res.json()
clickable.value.push(...clickable_areas)
} }
controls.value.maxDistance = distance.max (controls.value as any).maxDistance = distance.max;
controls.value.minDistance = distance.min (controls.value as any).minDistance = distance.min;
controls.value._needsUpdate = true (controls.value as any)._needsUpdate = true;
controls.value.update(1) (controls.value as any).update(1)
} }
onMounted(() => { onMounted(() => {
loadModels() loadModels()

View File

@ -22,8 +22,6 @@ const camera = ref()
const cameraPosition = ref([1, 1, 1]) as unknown as Ref<Vector3> const cameraPosition = ref([1, 1, 1]) as unknown as Ref<Vector3>
const controlsState = reactive({ const controlsState = reactive({
// minDistance: 2,
// maxDistance: 30,
maxPolarAngle: (Math.PI / 2) - 0.02, maxPolarAngle: (Math.PI / 2) - 0.02,
enableZoom: false, enableZoom: false,
}) })