BaseEntity.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. /**
  2. * BaseEntity.js
  3. *
  4. * @author realor
  5. */
  6. const IFC_SCHEMAS = {}
  7. const IFC_HELPERS = {}
  8. class BaseEntity {
  9. get helper() {
  10. if (this._helper === undefined) {
  11. let ifcClass = this.constructor
  12. while (ifcClass) {
  13. let helperClass = IFC_HELPERS[ifcClass.name + 'Helper']
  14. if (helperClass) {
  15. this._helper = new helperClass(this)
  16. break
  17. }
  18. let ifcSuperClass = ifcClass.__proto__
  19. ifcClass = ifcSuperClass.name ? ifcClass.schema[ifcSuperClass.name] : null
  20. }
  21. }
  22. return this._helper
  23. }
  24. toJSON() {
  25. let names = Object.getOwnPropertyNames(this)
  26. let json = { ifcClassName: this.constructor.name }
  27. for (let name of names) {
  28. if (name !== '_helper' && name !== '_loader') {
  29. json[name] = this[name]
  30. }
  31. }
  32. return json
  33. }
  34. }
  35. function registerIfcClass(ifcClass) {
  36. const schemaName = ifcClass.schemaName
  37. let schema = IFC_SCHEMAS[schemaName]
  38. if (schema === undefined) {
  39. schema = {}
  40. IFC_SCHEMAS[schemaName] = schema
  41. }
  42. ifcClass.schema = schema
  43. const ifcClassName = ifcClass.name
  44. schema[ifcClassName] = ifcClass
  45. schema[ifcClassName.toUpperCase()] = ifcClass
  46. }
  47. function registerIfcHelperClass(ifcHelperClass) {
  48. IFC_HELPERS[ifcHelperClass.name] = ifcHelperClass
  49. }
  50. export { IFC_SCHEMAS, IFC_HELPERS, BaseEntity, registerIfcClass, registerIfcHelperClass }