从数据库加载文本标记时,文本标记会根据查看器的当前缩放比例以不同的大小显示。无论缩放如何,如何使文本标记以静态大小显示?
function saveFreeformMarkup(markup){
let markupObject = {
x: markup.position.x,
y: markup.position.y,
width: markup.size.x,
height:markup.size.y,
type: TEXT_MARKUP_TYPE,
text: $(`#freeText`).val(),
urn_id: urn[`id`],
active: ACTIVE
};
$.ajax({
... send markupObject to database ...
});
}
function loadSingleMarkup(markup, markupTool){
let MarkupsCore = Autodesk.Viewing.Extensions.Markups.Core;
let text = new MarkupsCore.MarkupText(markup.id + ID_INCREMENT, markupTool, markup.text);
markupTool.addMarkup(text);
text.setSize({ x: markup.x, y: markup.y}, markup.width, markup.height);
text.setText(markup.text);
text.updateStyle(true);
}
答案 0 :(得分:0)
这是因为在发生导航(缩放/平移)时,摄像机更改事件附带有一个处理程序,该处理程序会根据当前视图的更新边界来调整SVG的viewbox
。
要解决此问题,您可以搭载MarkupCore扩展的onCameraChange
处理程序(确保在进入进入编辑模式之前将事件绑定到上层链之前执行此操作),并将缩放比例应用于基于SVG的当前的相机枢轴值以及添加标记时记录的值:
MarkupsCore.originalOnCameraChange = MarkupsCore.onCameraChange;
MarkupsCore.onCameraChange = function(event){
let scaleString = calculateScale(originalPivot, viewer.autocam.pivot);
this.svg.setAttribute('transform', scaleString);
this.originalOnCameraChange(event)
}
有关SVG转换的详细信息,请参见here。
将由您自己来执行计算,甚至更好的方法来转换标记以响应导航。
答案 1 :(得分:0)
我可以通过将loadSingleMarkup()
函数更改为以下
const FONT_SIZE_SCALE = 90;
function loadSingleMarkup(markup, markupTool){
let MarkupsCore = Autodesk.Viewing.Extensions.Markups.Core;
let text = new MarkupsCore.MarkupText(markup.id + ID_INCREMENT, markupTool, markup.text);
markupTool.addMarkup(text);
text.setSize({ x: markup.x, y: markup.y}, markup.width, markup.height);
text.setText(markup.text);
text.style[`font-size`] = 12 / FONT_SIZE_SCALE;
text.updateStyle(true);
}
(添加text.style[`font-size`] = 12 / FONT_SIZE_SCALE;
)