angular - 如何创建用于将数据从伪造查看器下载为 CSV 格式的按钮
问题描述
我使用 ng2-adsk-forge-viewer ( https://github.com/theNBS/ng2-adsk-forge-viewer ) 为查看器添加扩展。我想通过 svf 进行解析,获取所有具有属性的元素,然后将它们作为 CSV 获取。我使用 angular 作为前端。只想创建可以下载数据查看器并将它们以 csv 格式返回到后端的按钮。您可以在下面看到从 ng-adsk-forge-viewer 添加的 extension.ts 文件。
import { Extension } from 'ng2-adsk-forge-viewer';
declare const THREE: any;
export class ForgeExtension extends Extension {
// Extension must have a name
public static extensionName: string = 'ForgeExtension';
// Toolbar test
private subToolbar: Autodesk.Viewing.UI.ToolBar;
private onToolbarCreatedBinded: any;
public activate() {
return true;
}
public deactivate() {
return true;
}
public load() {
// Called when Forge Viewer loads your extension
console.log('ForgeExtension loaded!');
this.viewer.addEventListener(Autodesk.Viewing.SELECTION_CHANGED_EVENT, (e) => {
if (e.dbIdArray.length) {
const dbId = e.dbIdArray[0];
this.viewer.setThemingColor(dbId, new THREE.Vector4(0, 1, 1, 1));
}
});
// Initialise a toolbar
if (this.viewer.toolbar) {
// Toolbar is already available, create the UI
//this.createUI();
} else {
// Toolbar hasn't been created yet, wait until we get notification of its creation
this.onToolbarCreatedBinded = this.onToolbarCreated.bind(this);
this.viewer.addEventListener(Autodesk.Viewing.TOOLBAR_CREATED_EVENT, this.onToolbarCreatedBinded);
}
// Must return true or extension will fail to load
return true;
}
public unload() {
if (this.subToolbar) {
this.viewer.toolbar.removeControl(this.subToolbar);
this.subToolbar = null;
}
// Called when Forge Viewer unloads your extension
console.log('ForgeExtension unloaded.');
// Must return true or extension will fail to unload
return true;
}
public onToolbarCreated() {
this.viewer.removeEventListener(Autodesk.Viewing.TOOLBAR_CREATED_EVENT, this.onToolbarCreatedBinded);
this.onToolbarCreatedBinded = null;
//this.createUI();
}
private createUI() {
// Button 1
const button1 = new Autodesk.Viewing.UI.Button('my-view-front-button');
button1.onClick = e => this.setViewCube('front');
button1.addClass('my-view-front-button');
button1.setToolTip('View front');
// Button 2
const button2 = new Autodesk.Viewing.UI.Button('my-view-back-button');
button2.onClick = e => this.setViewCube('back');
button2.addClass('my-view-back-button');
button2.setToolTip('View Back');
// SubToolbar
this.subToolbar = new Autodesk.Viewing.UI.ControlGroup('my-custom-view-toolbar');
this.subToolbar.addControl(button1);
this.subToolbar.addControl(button2);
this.viewer.toolbar.addControl(this.subToolbar);
}
private setViewCube(orientation: 'front' | 'back') {
const ext = (this.viewer.getExtension('Autodesk.ViewCubeUi') as any);
ext.setViewCube(orientation);
}
}
解决方案
如您所见,扩展只是普通的 JavaScript 类。无论是使用 React、Angular 还是任何其他 UI 框架,它们都可以在查看器中使用。
现在,如果您需要获取设计中所有元素的所有属性,有几种方法可以做到这一点:
- 从服务器端,使用模型衍生端点https://forge.autodesk.com/en/docs/model-derivative/v2/reference/http/urn-metadata-guid-properties-GET;这将返回一个包含所有属性的 JSON,如果需要,您可以将此输出转换为 CSV
- 从客户端,理想情况下使用executeUserFunction在 Web Worker 中执行您的自定义查询;网上有很多不同的文章将一些结构化数据下载为 CSV,例如:https ://yourblogcoach.com/export-html-table-to-csv-using-javascript/
推荐阅读
- java - Java 语法数组 {1,2,3} vs new int[] {1,2,3}
- c# - 对字符串进行 Lambda 操作以检查数字
- semaphore - 红绿灯旋转
- python - python - 无法使用熊猫将带有架构的表上传到postgres
- mips - Valgrind 安装另一个 fsroot
- vba - 将早期绑定代码转换为后期绑定
- django - 模板标签模板中的 Django 模板块
- python-3.x - numpy unique 无法过滤掉特定列上具有相同值的组
- animation - 如何从外部控制 Flutter 中的动画?
- excel - 带有 InStr 的 VBA 循环用于 .txt 文件