import { AbstractViewerNavbarButton } from "../viewerTemplatePlugin"; import { DefaultViewer } from "../../viewer/defaultViewer"; import { EventCallback } from "../templateManager"; import { Tools } from "babylonjs"; export class PrintButtonPlugin extends AbstractViewerNavbarButton { private _currentModelUrl: string; constructor(private _viewer: DefaultViewer) { super("print", "print-button", PrintButtonPlugin.HtmlTemplate); this._viewer.onModelLoadedObservable.add((model) => { this._currentModelUrl = ""; if (model.configuration.url) { let filename = Tools.GetFilename(model.configuration.url) || model.configuration.url; let baseUrl = model.configuration.root || Tools.GetFolderPath(model.configuration.url); //gltf, obj, stl let extension = model.configuration.loader || filename.split(".").pop() || ""; let printable = false; // not using .some sue to IE11 ["gltf", "glb", "obj", "stl"].forEach(ext => { if (extension.indexOf(ext) !== -1) { printable = true; } }) if (printable) { this._currentModelUrl = baseUrl + filename; } } }) } onEvent(event: EventCallback): void { if (this._currentModelUrl) { let printUrl = this._currentModelUrl.replace(/https?:\/\//, "com.microsoft.builder3d://"); window.open(printUrl, "_self"); } } protected static HtmlTemplate: string = ` {{#unless hidePrint}} {{/unless}} `; }