Autodesk forge 屏幕截图中的Autodesk标记定位错误
下面是我生成屏幕截图和标记的代码Autodesk forge 屏幕截图中的Autodesk标记定位错误,autodesk-forge,autodesk-viewer,autodesk,Autodesk Forge,Autodesk Viewer,Autodesk,下面是我生成屏幕截图和标记的代码 函数生成带有标记的快照(ncrNo、luName、keyRef、MarkupStringData){ 让屏幕截图=新图像(); const mimeType='image/png'; screenshot.onload=异步函数(){ const markupCore=await createdViewer.loadExtension('Autodesk.Viewing.markupCore'); markupCore.show(); markupCore.lo
函数生成带有标记的快照(ncrNo、luName、keyRef、MarkupStringData){
让屏幕截图=新图像();
const mimeType='image/png';
screenshot.onload=异步函数(){
const markupCore=await createdViewer.loadExtension('Autodesk.Viewing.markupCore');
markupCore.show();
markupCore.loadMarkups(MarkupStringData,“layer1”);
让canvas=document.createElement('canvas');
canvas.width=createdViewer.container.clientWidth;
canvas.height=createdViewer.container.clientHeight;
设ctx=canvas.getContext('2d');
clearRect(0,0,canvas.width,canvas.height);
ctx.drawImage(屏幕截图,0,0,canvas.width,canvas.height);
renderToCanvas(ctx,函数(){
//将画布转换为Blob,然后将Blob转换为ArrayBuffer。
canvas.toBlob((blob)=>{
创建并连接带有blob的媒体(ncrNo、luName、keyRef、blob);
markupCore.leveEditMode();
markupCore.hide();
},mimeType);
},假);
};
getScreenShot(createdViewer.container.clientWidth,createdViewer.container.clientHeight,函数(blobURL){
screenshot.src=blobURL;
});
}
原始标记是
但是对于我得到的截图
这是随机的,但我确实注意到有时在移动模型(或使用“平移”移动视图)时(特别是沿着X轴),会发生这种情况
当我绘制画布或其他东西时,是否有什么问题???好的,我想我可能已经发现我的代码丢失了什么,所以我在加载标记之前添加了以下代码 缺少的一点是“国家”
var viewerstatepsist=markUp.viewer.getState()
然后在加载标记之前添加它
markup.viewer.restoreState(viewerstatepsist);
所以我的最终代码是这样的
函数生成带有标记的快照(ncrNo、luName、keyRef、MarkupStringData、viewerStatePersist){
让屏幕截图=新图像();
const mimeType='image/png';
screenshot.onload=异步函数(){
const markupCore=await createdViewer.loadExtension('Autodesk.Viewing.markupCore');
markup.viewer.restoreState(viewerstatepsist);
markupCore.show();
markupCore.loadMarkups(MarkupStringData,“layer1”);
让canvas=document.createElement('canvas');
canvas.width=createdViewer.container.clientWidth;
canvas.height=createdViewer.container.clientHeight;
设ctx=canvas.getContext('2d');
clearRect(0,0,canvas.width,canvas.height);
ctx.drawImage(屏幕截图,0,0,canvas.width,canvas.height);
renderToCanvas(ctx,函数(){
//将画布转换为Blob,然后将Blob转换为ArrayBuffer。
canvas.toBlob((blob)=>{
创建并连接带有blob的媒体(ncrNo、luName、keyRef、blob);
markupCore.leveEditMode();
markupCore.hide();
},mimeType);
},假);
};
getScreenShot(createdViewer.container.clientWidth,createdViewer.container.clientHeight,函数(blobURL){
screenshot.src=blobURL;
});
}
不确定这是否是真正的解决方案,但对我有效…添加到的答案:
以下是标记如何与查看器相机保持同步:
- 每当相机发生变化时,
扩展就会调用自己的方法MarkupsCore
,以相应地同步其标记的位置和比例onCameraChange
方法调用扩展对象的另一个名为onCameraChange
的方法来计算查看器画布所有四个角的“世界坐标”getSvgViewBox
- 然后使用世界坐标指定SVG元素的属性
onCameraChange
方法,否则标记应该始终保持同步。尝试向方法中添加断点,以查看是否按预期调用了该方法