/**
* $Id: AdapterDesite.js 9694 2026-01-09 22:05:48Z jochen.hanff $
*/
'use strict'
import { IModelViewer } from "./IModelViewer.js";
import { DESITE_COMMON } from "./AdapterDesite.js";
import { ApiResponse } from "../tools/ApiResponse.js";
/**
* @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));
// console.log("DOMAINS:")
// console.log( this.eDomain )
}
async getSelectedObjectIds(domains) {
let idlist = []
for( const domain of domains ) {
// console.log( `get selected of ${domain}`)
const ids = await desiteAPI.getSelectedElements(domain);
idlist.push(...ids);
}
return new ApiResponse(200, idlist );
}
async getObjectIds(domains) {
let idlist = []
for( const domain of domains ) {
console.log( `get all of ${domain}`)
const ids = await desiteAPI.getAllElements(domain);
idlist.push(...ids);
}
return new ApiResponse(200, idlist );
}
//!ptKeyStr in pname und ptype
async setPropertyValue(objid, ptKeyStr, value) {
// return desiteAPI.setPropertyValue(objid, pname, ptype, value)
return new ApiResponse(200, await desiteAPI.setPropertyValue(objid, ptKeyStr.split('##')[0], ptKeyStr.split('##')[1] , value) );
}
//!ptKeyStr in pname und ptype
async getPropertyValue(objid, ptKeyStr) {
// return desiteAPI.getPropertyValue(objid, pname, ptype)
return new ApiResponse(200, await desiteAPI.getPropertyValue(objid, ptKeyStr.split('##')[0] , ptKeyStr.split('##')[1] ) );
}
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);
})
}
}
// SMART SETS
async createSmartSet( parentId, name, objectIds, options = null) {
console.log( ` ### DESITE 30,32 <createSmartSet( ${parentId} )> `)
console.log("objects: " + JSON.stringify(objectIds) )
console.log( `options: `)
console.log( JSON.stringify(options) )
// {
// "filter": {
// "skip_openings": true,
// "skip_assembly_parts": false,
// "visible_only": false
// },
// "group_by": {
// "propertytypes": [
// "ifcEntity##xs:string",
// "cnVolume##xs:double"
// ],
// "options": {
// "decimal_precision": 4,
// "case_sensitive": true,
// "skip_null_values": true,
// "interval_size": 5.0,
// "interval_offset": 0.0,
// "date_grouping": "week"
// }
// },
const smartset_id = await desiteAPI.createSelectionSet( name, parentId )
let idlist = []
// first get objects from domains if any domain is in objectIds ...
let ids = (await this.getObjectIds(objectIds)).data
idlist = [...idlist , ...ids]
// the get child ids of objects in objjectIds ...
ids = (await this.getChildIds(objectIds)).data
idlist = [...idlist , ...ids]
console.log( `#obj : ${idlist.length}` )
let proplist = []
if( options ) {
let l = options.group_by?.propertytypes
if ( l ) { proplist = l }
}
console.log( `props = ${proplist}` )
let sets = {}
for ( const id of idlist ) {
sets = await this.getSets( id, sets , proplist, 0 , options )
}
// for ( const id of idlist ) {
// // console.log( `-> ID : ${id}`)
// for( const p of proplist ) {
// let propvalue = await desiteAPI.getPropertyValue( id , p.split('##')[0] , p.split('##')[1] , true )
// let set = []
// if( propvalue in sets ) {
// set = sets[propvalue]
// } else {
// set = {
// 'sets' : {},
// 'objects' : []
// }
// sets[propvalue] = set
// console.log( `val = ${propvalue}`)
// }
// set.objects.push( id )
// }
// }
await this.resolveSets( smartset_id , sets )
return new ApiResponse(200, smartset_id );
}
async getSets( id , sets , proplist , idx , options ) {
const p = proplist[idx]
let propvalue = await this.getSetValue( id , p , options )
let set = null
if (propvalue in sets) {
set = sets[propvalue]
} else {
set = {
'name' : propvalue,
'sets' : {},
'objects' : []
}
sets[propvalue] = set
console.log(`val = ${propvalue}`)
}
if ( idx < proplist.length-1 ) {
await this.getSets( id , set.sets , proplist , idx+1 , options )
} else {
set.objects.push( id )
}
return sets
}
async resolveSets( parent_set_id , sets ) {
console.log( '### <resolveSets()> ')
for( const v in sets ) {
let set = sets[v]
// console.log( `resolve set : v = ${v} `)
// console.log( set.name )
const smartset_id_child = await desiteAPI.createSelectionSet( v , parent_set_id )
await this.addObjectsToSmartSet( smartset_id_child , set.objects , false )
await this.resolveSets( smartset_id_child , set.sets )
}
}
async getSetValue( id , prop , options ) {
let propvalue = await desiteAPI.getPropertyValue(id, prop.split('##')[0], prop.split('##')[1], true)
return propvalue
}
async addObjectsToSmartSet(smartSetId, objIds, includeChildren) {
// todo consider param includeChildren ...
let countadded = 0
if ( objIds && objIds.length > 0 ) {
countadded = await desiteAPI.addToSelectionSetGeometry(smartSetId, objIds.join(';'))
}
// console.log( `added : ${countadded} `)
return new ApiResponse(200, countadded );
}
// GEOMETRY
async getPickedPoint() {
const p = await desiteAPI.getPickedPoint()
// console.log( "picked: " + JSON.stringify(p) )
// get model coordinates ...
// const pglobal = p['p']
// const pintern = p['ip']
let picked = {
'intern' : p['ip'],
'coordinates' : p['p']
}
// console.log( "picked: " + JSON.stringify(pglobal) )
return new ApiResponse(200, picked );
}
}
/**
* @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" )
}
}
Source