123
parent
13c5c1a86f
commit
34f1b1c11f
|
@ -59,31 +59,21 @@ watch(() => props.sceneUrl, val => {
|
||||||
init();
|
init();
|
||||||
loadSence();
|
loadSence();
|
||||||
});
|
});
|
||||||
|
let objArr = [];
|
||||||
|
let objM = [];
|
||||||
// 建筑树点击
|
// 建筑树点击
|
||||||
Bus.on('clickBuild', (isParent) => {
|
Bus.on('clickBuild', (isParent) => {
|
||||||
// Todo
|
// Todo
|
||||||
console.log('clickBuild', isParent);
|
console.log('clickBuild', isParent);
|
||||||
if (!isParent) {// 点击子级
|
if (!isParent) {// 点击子级
|
||||||
var clickName = bimStore().activateTree.clickName;
|
var clickName = bimStore().activateTree.clickName;
|
||||||
console.log(123, clickName);
|
cleanColor();
|
||||||
// 恢复之前被选中模型的材质
|
|
||||||
if (selectedObject && selectedMaterial) {
|
|
||||||
selectedObject.material = selectedMaterial;
|
|
||||||
selectedObject = null;
|
|
||||||
selectedMaterial = null;
|
|
||||||
}
|
|
||||||
var Floor = gltfObj.value.scene.getObjectByName(clickName);
|
var Floor = gltfObj.value.scene.getObjectByName(clickName);
|
||||||
if (Floor.length > 0) {
|
|
||||||
// 储存被选中的模型和材质
|
|
||||||
selectedObject = Floor;
|
|
||||||
selectedMaterial = selectedObject.material;
|
|
||||||
}
|
|
||||||
console.log(1, Floor);
|
|
||||||
Floor.traverse(e => {
|
Floor.traverse(e => {
|
||||||
e.material = new THREE.MeshLambertMaterial({
|
e.material = new THREE.MeshLambertMaterial({
|
||||||
color: 0x00ff00,
|
color: 0x00ff00,
|
||||||
});
|
});
|
||||||
nearCamera(e);
|
|
||||||
})
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -107,6 +97,23 @@ onMounted(() => {
|
||||||
renderScene();
|
renderScene();
|
||||||
document.addEventListener("click", onMouseDown);
|
document.addEventListener("click", onMouseDown);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const cleanColor = () => {
|
||||||
|
|
||||||
|
// 恢复之前被选中模型的材质
|
||||||
|
if (objArr.length > 0 && objM.length > 0) {
|
||||||
|
objArr.forEach((ele, index) => {
|
||||||
|
console.log(objM[index]);
|
||||||
|
ele.material = objM[index]
|
||||||
|
})
|
||||||
|
objArr = [];
|
||||||
|
objM = [];
|
||||||
|
}
|
||||||
|
gltfObj.value.scene.traverse(e => {
|
||||||
|
objArr.push(e);
|
||||||
|
objM.push(e.material);
|
||||||
|
})
|
||||||
|
}
|
||||||
const init = () => {
|
const init = () => {
|
||||||
scene = new THREE.Scene("#00ffff");
|
scene = new THREE.Scene("#00ffff");
|
||||||
const texture = new THREE.TextureLoader().load(homeIcon);
|
const texture = new THREE.TextureLoader().load(homeIcon);
|
||||||
|
@ -127,11 +134,6 @@ const init = () => {
|
||||||
// 将摄像机对准场景的中心
|
// 将摄像机对准场景的中心
|
||||||
camera.position.set(-192.936, 180.990, -28.179);
|
camera.position.set(-192.936, 180.990, -28.179);
|
||||||
camera.lookAt(scene.position);
|
camera.lookAt(scene.position);
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
=======
|
|
||||||
|
|
||||||
>>>>>>> c61eb163e061fb935e88a57641d1dc70e363d7b5
|
|
||||||
// 创建控件对象
|
// 创建控件对象
|
||||||
orbit = new OrbitControls(camera, renderer.domElement);
|
orbit = new OrbitControls(camera, renderer.domElement);
|
||||||
orbit.autoRotate = true;
|
orbit.autoRotate = true;
|
||||||
|
@ -212,12 +214,7 @@ const onMouseDown = (event) => {
|
||||||
mouse.y = -(event.clientY / window.innerHeight) * 2 + 1;
|
mouse.y = -(event.clientY / window.innerHeight) * 2 + 1;
|
||||||
|
|
||||||
var raycaster = new THREE.Raycaster()
|
var raycaster = new THREE.Raycaster()
|
||||||
// 恢复之前被选中模型的材质
|
cleanColor();
|
||||||
if (selectedObject && selectedMaterial) {
|
|
||||||
selectedObject.material = selectedMaterial;
|
|
||||||
selectedObject = null;
|
|
||||||
selectedMaterial = null;
|
|
||||||
}
|
|
||||||
// 更新射线的起点和方向
|
// 更新射线的起点和方向
|
||||||
raycaster.setFromCamera(mouse, camera);
|
raycaster.setFromCamera(mouse, camera);
|
||||||
// 计算射线和场景中所有可点击物体的相交情况
|
// 计算射线和场景中所有可点击物体的相交情况
|
||||||
|
@ -227,7 +224,6 @@ const onMouseDown = (event) => {
|
||||||
const clickedObject = intersects[0].object;
|
const clickedObject = intersects[0].object;
|
||||||
// 储存被选中的模型和材质
|
// 储存被选中的模型和材质
|
||||||
selectedObject = clickedObject;
|
selectedObject = clickedObject;
|
||||||
selectedMaterial = clickedObject.material;
|
|
||||||
// 修改材质为绿色
|
// 修改材质为绿色
|
||||||
selectedObject.material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
|
selectedObject.material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
|
||||||
nearCamera(intersects);
|
nearCamera(intersects);
|
||||||
|
@ -236,6 +232,7 @@ const onMouseDown = (event) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
const nearCamera = (intersects) => {
|
const nearCamera = (intersects) => {
|
||||||
|
console.log(5555, intersects)
|
||||||
// 拉近场景
|
// 拉近场景
|
||||||
if (!intersects[0]) {
|
if (!intersects[0]) {
|
||||||
return;
|
return;
|
||||||
|
@ -252,7 +249,7 @@ const nearCamera = (intersects) => {
|
||||||
initTween(
|
initTween(
|
||||||
positionObj.x,
|
positionObj.x,
|
||||||
positionObj.y,
|
positionObj.y,
|
||||||
positionObj.z+10
|
positionObj.z + 10
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -260,6 +257,7 @@ const nearCamera = (intersects) => {
|
||||||
const toHomeView = () => {
|
const toHomeView = () => {
|
||||||
camera.position.set(-192.936, 180.990, -28.179);
|
camera.position.set(-192.936, 180.990, -28.179);
|
||||||
camera.lookAt(scene.position);
|
camera.lookAt(scene.position);
|
||||||
|
cleanColor();
|
||||||
}
|
}
|
||||||
// 返回主页
|
// 返回主页
|
||||||
const toHomeView1 = () => {
|
const toHomeView1 = () => {
|
||||||
|
|
Loading…
Reference in New Issue