-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathindex.ts
76 lines (55 loc) · 3.42 KB
/
index.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import { ComputeSettings, ExpressionComputeResults, QueryResults, Settings, UserQueryOptions } from "./output";
import { engine } from "./engine";
export async function query(model: Autodesk.Viewing.Model, query: string, options?: Partial<Settings>): Promise<QueryResults> {
const lmvQueryOptions = createFilterSettings(options);
const propertyDatabase = model.getPropertyDb();
const nodes = lmvQueryOptions.dbIds.length === 0 ? getModelNodesForSearch(model) : lmvQueryOptions.dbIds;
const code = `function userFunction(pdb, tag) { const engine = ${engine}; return engine().filterElements(pdb, tag); }`;
return propertyDatabase.executeUserFunction<QueryResults, UserQueryOptions>(code, { lmvQuery: query, lmvQueryOptions, nodes });
}
export async function headlessQuery(viewerDocument: Autodesk.Viewing.Document, bubbleNode: Autodesk.Viewing.BubbleNode, queryString: string, options?: Partial<Settings>): Promise<QueryResults> {
const module = await import("./src/headless/modelBuilder");
const model = await module.createModel(viewerDocument, bubbleNode);
return query(model, queryString, options);
}
export async function computeExpressionValue(model: Autodesk.Viewing.Model, dbId: number, queryString: string, options?: Partial<ComputeSettings>): Promise<ExpressionComputeResults> {
console.warn("computeExpressionValue is deprecated, use `query` instead with dbIds provided in options");
const filterSettings: Partial<Settings> = { ...options, dbIds: [dbId] };
const results = await query(model, queryString, filterSettings);
if (results.error)
return { error: results.error, result: undefined };
const value = results.rows[0].values[results.columns[0]];
return { result: value, error: null };
}
const getModelNodesForSearch = (model: Autodesk.Viewing.Model) => {
const nodes: number[] = [];
const instanceTree = model.getInstanceTree();
instanceTree.enumNodeChildren(instanceTree.getRootId(), dbId => { nodes.push(dbId) }, true);
return nodes;
}
const createFilterSettings = (options?: Partial<Settings>): Settings => {
const defaultSettings: Settings = {
tolerance: 1e-3,
stringCaseSensitive: true,
leafNodesOnly: true,
attributesCaseSensitive: true,
displayUnits: "",
displayUnitsPrecision: "",
dbIds: [],
modelBrowserExcludeRoot: true,
modelName: "Model"
}
if (!options)
return defaultSettings;
return {
tolerance: options.tolerance !== undefined ? options.tolerance : defaultSettings.tolerance,
stringCaseSensitive: options.stringCaseSensitive !== undefined ? options.stringCaseSensitive : defaultSettings.stringCaseSensitive,
leafNodesOnly: options.leafNodesOnly !== undefined ? options.leafNodesOnly : defaultSettings.leafNodesOnly,
attributesCaseSensitive: options.attributesCaseSensitive !== undefined ? options.attributesCaseSensitive : defaultSettings.attributesCaseSensitive,
displayUnits: options.displayUnits !== undefined ? options.displayUnits : defaultSettings.displayUnits,
displayUnitsPrecision: options.displayUnitsPrecision !== undefined ? options.displayUnitsPrecision : defaultSettings.displayUnitsPrecision,
dbIds: options.dbIds !== undefined ? options.dbIds : defaultSettings.dbIds,
modelBrowserExcludeRoot: options.modelBrowserExcludeRoot !== undefined ? options.modelBrowserExcludeRoot : defaultSettings.modelBrowserExcludeRoot,
modelName: options.modelName !== undefined ? options.modelName : defaultSettings.modelName
}
}