forge viewer 设置点,并闪烁,点击点弹出信息框
时间: 2024-03-19 11:42:10 浏览: 210
要在 Forge Viewer 中设置点并使其闪烁,并在点击点时弹出信息框,你可以使用以下代码:
```javascript
// 创建点的材质
const markerMaterial = new THREE.SpriteMaterial({
map: new THREE.TextureLoader().load('https://forgeviewer-2022.oss-cn-beijing.aliyuncs.com/forge-marker.png'),
color: 0xffffff
});
// 创建点的函数
function createMarker(dbId, position) {
const sprite = new THREE.Sprite(markerMaterial);
sprite.position.copy(position);
sprite.scale.set(20, 20, 1);
sprite.name = dbId.toString();
viewer.impl.addOverlay('marker', sprite);
return sprite;
}
// 闪烁点的函数
function blinkMarker(marker, duration) {
const interval = setInterval(() => {
marker.visible = !marker.visible;
}, 500);
setTimeout(() => {
clearInterval(interval);
marker.visible = true;
}, duration);
}
// 添加点的点击事件
viewer.addEventListener(Autodesk.Viewing.MOUSE_CLICK, function (event) {
const raycaster = viewer.impl.raycaster;
const intersects = raycaster.intersectObjects(viewer.impl.overlayScenes.marker.children);
if (intersects.length > 0) {
const marker = intersects[0].object;
// 获取点的属性
const dbId = parseInt(marker.name);
viewer.getProperties(dbId, function (props) {
// 创建信息框
const container = document.createElement('div');
container.innerHTML = `
<div>点 ID: ${dbId}</div>
<div>点名称: ${props.name}</div>
<div>点坐标: (${marker.position.x.toFixed(2)}, ${marker.position.y.toFixed(2)}, ${marker.position.z.toFixed(2)})</div>
`;
// 显示信息框
viewer.container.appendChild(container);
// 设置信息框位置
const screenPoint = viewer.worldToClient(marker.position);
container.style.left = `${screenPoint.x}px`;
container.style.top = `${screenPoint.y}px`;
});
}
});
// 添加两个点
const marker1 = createMarker(1, new THREE.Vector3(-100, -100, 0));
const marker2 = createMarker(2, new THREE.Vector3(100, 100, 0));
// 闪烁点
blinkMarker(marker1, 5000);
blinkMarker(marker2, 8000);
```
在上面的代码中,我们首先创建了一个点的材质 `markerMaterial`,然后定义了一个 `createMarker` 函数,该函数会创建一个包含指定位置的点,并将其添加到 Viewer 中。我们还定义了一个 `blinkMarker` 函数,该函数会使指定的点闪烁。
接下来,我们添加了一个 `Autodesk.Viewing.MOUSE_CLICK` 事件监听器,当用户单击点时,我们会获取该点的属性,并在页面上创建一个信息框,显示该点的属性。我们还使用 `worldToClient` 方法将点的位置转换为屏幕坐标,并将信息框的位置设置为该点的屏幕位置。
最后,我们添加了两个点,并使用 `blinkMarker` 函数使它们闪烁。你可以根据需要修改点的位置、闪烁时间和信息框的内容。
阅读全文