@xeokit/xeokit-sdk
Version:
3D BIM IFC Viewer SDK for AEC engineering applications. Open Source JavaScript Toolkit based on pure WebGL for top performance, real-world coordinates and full double precision
155 lines (139 loc) • 6.28 kB
TypeScript
import { Plugin, Viewer } from "../../viewer";
import { TreeViewNode } from "./TreeViewNode";
import { ITreeViewRenderService } from "./renderService";
export declare type TreeViewPluginConfiguration = {
/** DOM element ID to contain the TreeViewPlugin */
containerElementId?: string;
/** DOM element to contain the TreeViewPlugin. */
containerElement?: HTMLElement;
/** When ````true```` (default), will automatically add each model as it's created. Set this ````false```` if you want to manually add models using {@link TreeViewPlugin.addModel} instead. */
autoAddModels?: boolean;
/** Optional depth to which to initially expand the tree. */
autoExpandDepth?: number;
/** How to organize the tree nodes: "containment", "storeys" or "types". See the class documentation for details. */
hierarchy?: "containment" | "storeys" | "types";
/** When true, will sort the children of each node. */
sortNodes?: boolean;
/** When true, will not contain nodes that don't have content in the {@link Scene}. These are nodes whose {@link MetaObject}s don't have {@link Entity}s. */
pruneEmptyNodes?: boolean;
/** Optional {@link ITreeViewRenderService} to use. Defaults to the {@link TreeViewPlugin}'s default {@link RenderService}. */
renderService?: ITreeViewRenderService;
/** When true, will show indeterminate state for checkboxes when some but not all child nodes are checked */
showIndeterminate?: boolean;
/** Optional function to replace the default elevation sort function. The function should take two nodes and return -1, 0 or 1. */
elevationSortFunction?: (node1: TreeViewNode, node2: TreeViewNode) => number;
/** Optional function to replace the default sort function. The function should take two nodes and return -1, 0 or 1. */
defaultSortFunction?: (node1: TreeViewNode, node2: TreeViewNode) => number;
};
/**
* A {@link Viewer} plugin that provides an HTML tree view to navigate the IFC elements in models.
*/
export declare class TreeViewPlugin extends Plugin {
/**
* @constructor
*
* @param {Viewer} viewer The Viewer.
* @param {TreeViewPluginConfiguration} cfg Plugin configuration.
*/
constructor(viewer: Viewer, cfg: TreeViewPluginConfiguration);
/**
* Sets how the nodes are organized within this tree view.
*
* Default value is "containment".
*
* @type {String}
*/
set hierarchy(arg: "containment" | "storeys" | "types");
/**
* Gets how the nodes are organized within this tree view.
*
* @type {String}
*/
get hierarchy(): "containment" | "storeys" | "types";
/**
* Adds a model to this tree view.
*
* The model will be automatically removed when destroyed.
*
* To automatically add each model as it's created, instead of manually calling this method each time,
* provide a ````autoAddModels: true```` to the TreeViewPlugin constructor.
*
* @param {String} modelId ID of a model {@link Entity} in {@link Scene.models}.
* @param {Object} [options] Options for model in the tree view.
* @param {String} [options.rootName] Optional display name for the root node. Ordinary, for "containment"
* and "storeys" hierarchy types, the tree would derive the root node name from the model's "IfcProject" element
* name. This option allows to override that name when it is not suitable as a display name.
*/
addModel(modelId: string, options?: {
rootName?: string;
}): void;
/**
* Removes a model from this tree view.
*
* Does nothing if model not currently in tree view.
*
* @param {String} modelId ID of a model {@link Entity} in {@link Scene.models}.
*/
removeModel(modelId: string): void;
/**
* Highlights the tree view node that represents the given object {@link Entity}.
*
* This causes the tree view to collapse, then expand to reveal the node, then highlight the node.
*
* If a node is previously highlighted, de-highlights that node and collapses the tree first.
*
* Note that if the TreeViewPlugin was configured with ````pruneEmptyNodes: true```` (default configuration), then the
* node won't exist in the tree if it has no Entitys in the {@link Scene}. in that case, nothing will happen.
*
* Within the DOM, the node is represented by an ````<li>```` element. This method will add a ````.highlighted-node```` class to
* the element to make it appear highlighted, removing that class when de-highlighting it again. See the CSS rules
* in the TreeViewPlugin examples for an example of that class.
*
* @param {String} objectId ID of the {@link Entity}.
*/
showNode(objectId: string): void;
/**
* De-highlights the node previously shown with {@link TreeViewPlugin.showNode}.
*
* Does nothing if no node is currently shown.
*
* If the node is currently scrolled into view, keeps the node in view.
*/
unShowNode(): void;
/**
* Expands the tree to the given depth.
*
* Collapses the tree first.
*
* @param {Number} depth Depth to expand to.
*/
expandToDepth(depth: number): void;
/**
* Closes all the nodes in the tree.
*/
collapse(): void;
/**
* Iterates over a subtree of the tree view's {@link TreeViewNode}s, calling the given callback for each
* node in depth-first pre-order.
*
* @param {TreeViewNode} node Root of the subtree.
* @param {Function} callback Callback called at each {@link TreeViewNode}, with the TreeViewNode given as the argument.
*/
withNodeTree(node: TreeViewNode, callback: (node: TreeViewNode) => void): void;
/**
* Destroys this TreeViewPlugin.
*/
destroy(): void;
/**
* Fires on right click to show contextmenu.
* @param {String} event The contextmenu event
* @param {Function} callback Callback fired on the event
*/
on(event: "contextmenu", callback: (data: { event: MouseEvent, viewer: Viewer, treeViewPlugin: TreeViewPlugin, treeViewNode: TreeViewNode }) => void): void;
/**
* Fires when an title is clicked.
* @param {String} event The nodeTitleClicked event
* @param {Function} callback Callback fired on the event
*/
on(event: "nodeTitleClicked", callback: (data: { event: MouseEvent, viewer: Viewer, treeViewPlugin: TreeViewPlugin, treeViewNode: TreeViewNode }) => void): void;
}