/**
* $Id: AdapterDesite.js 9009 2025-10-15 09:03:33Z alexander.rensch $
*/
'use strict'
import { IModelViewer } from "./IModelViewer.js";
////////////////////////////////////////////////////////
/// DESITE
////////////////////////////////////////////////////////
export const eDomain = Object.freeze({
GEO: "geo",
ACT: "act",
BOQ: "boq",
DOC: "doc",
TYP: "typ",
ISS: "iss",
RES: "res",
BST: "bst",
CST: "cst", // custom
ALL: "all"
});
/**
* @category Model Viewer
* @ignore
* @classdesc Encapsulate functions common for all DESITE versions.
*/
export class DESITE_COMMON extends IModelViewer {
constructor(t, n, v ) {
super(t, n, v )
}
async loginUser(cb , user = null ) {
let url = window.location // .href
let auth_target_ = new URL(url.protocol + url.host + "/cn_login")
console.log(`auth : ${auth_target_}`)
//
// check if user and token are stored in local storage
// if so, return user/token, otherwise forwarrd to
// webpage ./cn_login
let u = window.localStorage.getItem('user')
let t = window.localStorage.getItem('token')
if( user != undefined ) {
if( u != user ) {
t = null
}
u = user
}
if (t == undefined) {
let queryString = window.location.search;
let urlParams = new URLSearchParams(queryString);
urlParams.set('redirect', window.location) // window.location.href ???
if (typeof _default_userid_ != 'undefined') {
urlParams.set('userid', _default_userid_) // window.location.href ???
}
let target = auth_target_
target.search = urlParams.toString()
window.location = target
} else {
return cb({
'status': 200,
'data': {
'userid': u,
'token': t
}
})
}
}
async logoutUser(cb ) {
window.localStorage.removeItem('token')
window.localStorage.removeItem('user')
window.location.reload()
return cb({
'status' : 200
})
}
async restoreProjectContext( cb ) {
return ({
'status' : 501
})
}
saveProjectContext( cb ) {
return ({
'status' : 501
})
}
/**
*
*/
#selectionChanged = {
connect(func) {
return desiteAPI.selectionChanged.connect(func)
},
disconnect(func) {
return desiteAPI.selectionChanged.disconnect(func)
}
}
/**
*
*/
#selectionChangedByDomain = {
connect(func) {
return desiteAPI.selectionChangedByDomain.connect(func)
},
disconnect(func) {
return desiteAPI.selectionChangedByDomain.disconnect(func)
}
}
get modelViewerName() { return "DESITE" }
get selectionChanged() { return this.#selectionChanged; }
get selectionChangedByDomain() { return this.#selectionChangedByDomain; }
showHomeView() {
return desiteAPI.showHomeView()
}
getProjectDirectory() {
return desiteAPI.getProjectDirectory()
}
saveProject() {
return desiteAPI.saveProject()
}
openLink(url, useDesktopService) {
return desiteAPI.openLink(url, useDesktopService)
}
//!ptKeyStr in pname und ptype
colorCodeObjects(objIds, ptKeyStr, intervalSize) {
return desiteAPI.colorCodeObjects(objIds, propertyName, propertyDatatype, intervalSize)
}
resetMaterials(updateUI) {
return desiteAPI.resetMaterials(updateUI)
}
readTextFileAsString(filePath, codec) {
return desiteAPI.readTextFileAsString(filePath, codec)
}
moveFile(fnFrom, nTo) {
return desiteAPI.moveFile(fnFrom, nTo)
}
writeFile(filePath, content, encoding) {
return desiteAPI.writeFile(filePath, content, encoding)
}
}
/**
* @category Model Viewer
* @ignore
* @classdesc Encapsulate functions common for DESITE versions 3.0 and 3.2. Not indended to be importable.
*/
export class DESITE_COMMON_30_32 extends DESITE_COMMON {
constructor(t,n,v) {
super(t,n,v)
desiteAPI.selectionChanged.connect(this.onSelectionChanged.bind(this));
desiteAPI.visibilityChanged.connect(this.onVisibilityChanged.bind(this));
}
getSelectedElements(domain) {
return desiteAPI.getSelectedElements(domain)
}
getAllElements(domain) {
return desiteAPI.getAllElements(domain)
}
//!ptKeyStr in pname und ptype
setPropertyValue(objid, ptKeyStr, value) {
return desiteAPI.setPropertyValue(objid, pname, ptype, value)
}
//!ptKeyStr in pname und ptype
getPropertyValue(objid, ptKeyStr) {
return desiteAPI.getPropertyValue(objid, pname, ptype)
}
getMaterial(matId) {
return desiteAPI.getMaterial(matId)
}
getAsJSON(objId) {
return desiteAPI.getAsJSON(objId)
}
//!ptKeyStr in pname und ptype
getPropertyValuesByObjectList(ptKeyStr, checkInherited, objectIdList, maxValues, domains, getNullValues) {
return desiteAPI.getPropertyValuesByObjectList(propertyName, propertyDatatype, checkInherited, objectIdList, maxValues, domains, getNullValues)
}
getPropertyValuesByObject(objId, filterpattern) {
return desiteAPI.getPropertyValuesByObject(objId, filterpattern)
}
checkRegExp(value, pattern) {
return desiteAPI.checkRegExp(value, pattern)
}
setVisible(objIds, flagOnOff, exclusively) {
let domainPromises = objIds.map(objId => desiteAPI.getDomainByElement(objId));
return Promise.all(domainPromises)
.then(domains => {
let uniqueDomains = [...new Set(domains)];
if (flagOnOff) {
if (exclusively) {
return desiteAPI.showElementsOnly(objIds, uniqueDomains)
} else {
return desiteAPI.showElements(objIds, true, uniqueDomains)
}
} else {
return desiteAPI.hideElements(objIds, true, uniqueDomains)
}
})
}
setSelected(objIds, flagOnOff, exclusively) {
if (exclusively) {
let domainPromises = objIds.map(objId => desiteAPI.getDomainByElement(objId));
return Promise.all(domainPromises)
.then(domains => {
let uniqueDomains = [...new Set(domains)];
return desiteAPI.clearSelection(true, uniqueDomains);
})
.then(() => {
return desiteAPI.selectElements(objIds, flagOnOff, uniqueDomains);
});
} else {
let domainPromises = objIds.map(objId => desiteAPI.getDomainByElement(objId));
return Promise.all(domainPromises)
.then(domains => {
let uniqueDomains = [...new Set(domains)];
return desiteAPI.selectElements(objIds, flagOnOff, uniqueDomains);
})
}
}
}
/**
* @category Model Viewer
* @ignore
* @classdesc Encapsulate functions common for DESITE version 3.4 and VDC-Manager 4.0. Not indended to be importable.
*/
export class DESITE_COMMON_34_40 extends DESITE_COMMON {
constructor(t,n,v) {
super(t,n,v)
}
/**
* Mapping of IDs in Desite versions >= 3.4
*/
getSelectedElements(domain) {
return desiteAPI.getSelectedElements(domain)
.then(objectIdListNotExternal => {
return desiteAPI.mapToExternalIDs(objectIdListNotExternal);
})
.then(mapped => {
return Object.values(mapped);
});
}
getAllElements(domain) {
return desiteAPI.getAllElements(domain)
.then(objectIdListNotExternal => {
return desiteAPI.mapToExternalIDs(objectIdListNotExternal);
})
.then(mapped => {
return Object.values(mapped);
});
}
//!ptKeyStr in pname und ptype
setPropertyValue(objid, ptKeyStr, value) {
return desiteAPI.mapFromExternalIDs(objid)
.then(mapped => {
const objidNotExternalArray = Object.values(mapped)
.flat()
.filter(Boolean);
if (!objidNotExternalArray || objidNotExternalArray.length === 0) {
throw new Error(`No DESITE ID found for external ID: ${objid}`);
}
const objidNotExternal = objidNotExternalArray[0];
return desiteAPI.setPropertyValue(objidNotExternal, pname, ptype, value);
});
}
//!ptKeyStr in pname und ptype
getPropertyValue(objid, ptKeyStr) {
return desiteAPI.mapFromExternalIDs(objid)
.then(mapped => {
const objidNotExternalArray = Object.values(mapped)
.flat()
.filter(Boolean);
if (!objidNotExternalArray || objidNotExternalArray.length === 0) {
throw new Error(`No DESITE ID found for external ID: ${objid}`);
}
const objidNotExternal = objidNotExternalArray[0];
return desiteAPI.getPropertyValue(objidNotExternal, pname, ptype);
});
}
getAsJSON(objid) {
return desiteAPI.mapFromExternalIDs(objid)
.then(mapped => {
const objidNotExternalArray = Object.values(mapped)
.flat()
.filter(Boolean);
if (!objidNotExternalArray || objidNotExternalArray.length === 0) {
throw new Error(`No DESITE ID found for external ID: ${objid}`);
}
const objidNotExternal = objidNotExternalArray[0];
return desiteAPI.getAsJSON(objidNotExternal)
});
}
//!ptKeyStr in pname und ptype
getPropertyValuesByObjectList(ptKeyStr, checkInherited, objectIdList, maxValues, domains, getNullValues) {
return desiteAPI.mapFromExternalIDs(objectIdList)
.then(mapped => {
const objectIdListNotExternal = Object.values(mapped)
.flat()
.filter(Boolean);
if (objectIdListNotExternal.length === 0) {
throw new Error(`No DESITE IDs found for given external IDs: ${JSON.stringify(objectIdList)}`);
}
return desiteAPI.getPropertyValuesByObjectList(
propertyName,
propertyDatatype,
checkInherited,
objectIdListNotExternal,
maxValues,
domains,
getNullValues
);
});
}
getPropertyValuesByObject(objid, filterpattern) {
return desiteAPI.mapFromExternalIDs(objid)
.then(mapped => {
const objidNotExternalArray = Object.values(mapped)
.flat()
.filter(Boolean);
if (!objidNotExternalArray || objidNotExternalArray.length === 0) {
throw new Error(`No DESITE ID found for external ID: ${objid}`);
}
const objidNotExternal = objidNotExternalArray[0];
return desiteAPI.getPropertyValuesByObject(objidNotExternal, filterpattern)
});
}
setAllVisible(repaint, domains) {
return desiteAPI.setAllElementsVisible(true, domains)
}
setVisible(objIds, flagOnOff, exclusively) {
if (exclusively) {
let domainPromises = objIds.map(objId => desiteAPI.getDomainByElement(objId));
return Promise.all(domainPromises)
.then(domains => {
let uniqueDomains = [...new Set(domains)];
return desiteAPI.setAllElementsVisible(false, uniqueDomains);
})
.then(() => {
return desiteAPI.setElementsVisible(true, objIds);
});
} else {
return desiteAPI.setElementsVisible(flagOnOff, objIds);
}
}
setSelected(objIds, flagOnOff, exclusively) {
if (exclusively) {
let domainPromises = objIds.map(objId => desiteAPI.getDomainByElement(objId));
return Promise.all(domainPromises)
.then(domains => {
let uniqueDomains = [...new Set(domains)];
return desiteAPI.setAllElementsSelected(flagOnOff, uniqueDomains);
})
.then(() => {
return desiteAPI.setElementsSelected(flagOnOff, objIds);
});
} else {
return desiteAPI.setElementsSelected(flagOnOff, objIds);
}
}
/**
* Different return JSON than DESITE 3.2
*/
getMaterial(matId) {
return desiteAPI.getMaterialData(matId)
}
checkRegExp(value, pattern) {
try {
const regex = new RegExp(pattern);
return regex.test(value);
} catch (e) {
return false;
}
}
}
/**
* @category Model Viewer
* @classdesc
* Implements the interface to model viewer.
* Overwrites functions for DESITE 3.0.
*
* @extends {IModelViewer}
*
*/
export class AdptDESITE_30 extends DESITE_COMMON_30_32 {
constructor( ctx ){
super( "DESITE_30", "DESITE", "3.0" )
}
}
/**
* @category Model Viewer
*
* @classdesc
* Implements the interface to model viewer.
* Overwrites functions for DESITE 3.2.
*
* @extends {IModelViewer}
*
*/
export class AdptDESITE_32 extends DESITE_COMMON_30_32 {
constructor(){
super( "DESITE_32", "DESITE", "3.2" )
}
}
/**
* @category Model Viewer
*
* @classdesc
* Implements the interface to model viewer.
* Overwrites functions for DESITE 3.4.
*
* @extends {IModelViewer}
*
*/
export class AdptDESITE_34 extends DESITE_COMMON_34_40 {
constructor(){
super( "DESITE_34", "DESITE", "3.4" )
desiteAPI.selectionChanged.connect(this.onSelectionChanged)
desiteAPI.visibilityChanged.connect(this.onVisibilityChanged)
}
}
/**
* @category Model Viewer
*
* @classdesc
* Model Viewer Adapter. <br>
* Implements the interface to model viewer.
* Overwrites functions for VDC 4.0.
*
* @extends {IModelViewer}
*
*/
export class AdptVDC_40 extends DESITE_COMMON_34_40 {
constructor( ){
super( "DESITE_40", "DESITE", "4.0" )
vdcApp.selectionChanged.connect(this.onSelectionChanged)
vdcApp.visibilityChanged.connect(this.onVisibilityChanged)
}
}
// ##########################################################################
/**
*
* @category Model Viewer
*
*/
export class DesiteAdapterServices {
constructor() {
}
/**
* Create instance of correct DESITE version API class
*
* @returns {Promise<IModelViewer>} Adapter instrance
*
*/
static async createAdapter() {
let desiteVersionString = await desiteAPI.getVersionAsString()
this.recognizedModelViewerVersion = desiteVersionString
let parts = desiteVersionString.split('.');
for (let i = 0; i < parts.length; i++) {
if (i === 0) {
parts[i] = parts[i];
} else {
parts[i] = parts[i].padStart(1, '0');
}
}
let desiteVersionNumber = parseInt(parts.join(''));
if (desiteVersionNumber >= 400) {
console.log(`VDC Manager Version:`, desiteVersionNumber)
} else {
console.log(`DESITE Version:`, desiteVersionNumber)
}
if (desiteVersionNumber >= 400) {
const adpt = new AdptVDC_40();
return adpt
} else if (desiteVersionNumber >= 340) {
const adpt = new AdptDESITE_34();
return adpt
} else if (desiteVersionNumber >= 320) {
const adpt = new AdptDESITE_32();
return adpt
} else if (desiteVersionNumber >= 300) {
const adpt = new AdptDESITE_30();
// desiteMD.setFooterVisible(false);
// desiteMD.setHeaderVisible(false);
// desiteAPI.selectionChanged.connect( adpt.onSelectionChanged )
return adpt
}
}
}
Source