autodesk-forge - 变换控制在模型中产生间隙
问题描述
我在这里引用代码来移动模型。然而,我发现了转换网格和我移动的对象之间的距离,即使我使用了边界框。对象越大,变换之间的距离越大。
我的代码
_onControlsChange(ev) {
if (this.selectedModel) {
const posTransform = this._controls.position;
let tr = this.selectedModel.getPlacementTransform();
tr.elements[12] = posTransform.x;
tr.elements[13] = posTransform.y;
tr.elements[14] = posTransform.z;
this.selectedModel.setPlacementTransform(tr);
this._viewer.impl.invalidate(true, true, true);
}
}
_onSelectionChange(ev) {
const selSet = ev.selections;
const firstSel = selSet[0];
if (firstSel) {
const listdbIds = firstSel.dbIdArray;
const dbidItem = listdbIds[0];
const typeModel = dbidItem.toString().slice(0, 3);
if (typeModel !== "500") return;
const model = firstSel.model;
this.selectedModel = model;
let dbIds = firstSel.dbIdArray;
let firstDbId = dbIds[0];
const instanceTree = model.getData().instanceTree;
const fragList = model.getFragmentList();
let bounds = new THREE.Box3();
instanceTree.enumNodeFragments(
firstDbId,
(fragId) => {
let box = new THREE.Box3();
fragList.getWorldBounds(fragId, box);
bounds.union(box);
},
true
);
const position = bounds.getCenter();
this._controls.setPosition(position);
this._controls.visible = true;
} else {
this._controls.visible = false;
this.selectedModel = null;
}
}
解决方案
我已经更新了 GitHub 分支中的转换工具,以便您现在可以将其配置为移动单个对象或整个模型。请参阅提交https://github.com/petrbroz/forge-simple-viewer-nodejs/commit/a72ea8fa3782bf7458ff8e381f8ff578809462e7。
要配置工具以移动整个模型,请像这样初始化扩展:
viewer.loadExtension('TransformExtension', { mode: TransformToolMode.MODEL });
推荐阅读
- api - 使用 API 定位 Salt minions 中的多个颗粒
- maven - Maven 清洁包产生两个罐子
- typescript - 测试本机组件时,TypeScript 与流程冲突
- c# - 无法从 jquery 调用简单的 web api post 方法
- java - 以编程方式添加不相关的视图时,RecyclerView 滚动偏移会被重置
- android - SingleChildScrollView 高度到最大高度,图像背景颤动
- apache-kafka - 卡夫卡主题查看器?
- python - 我需要编辑一些“默认参数”而不是全部,我该怎么做?
- backend - 如何识别应用程序是否使用支持 Win32/UIA 以在具有正确后端设置的 pywinauto 中启动相同的应用程序。?
- c# - 如何使用条形码创建图像