@startuml 'https://plantuml.com/class-diagram interface Vision{ val parent: VisionGroup? fun getPropertyValue(name,inherit,includeStyles,includeDefaults): Value? } interface Solid{ The base for 3D geometry } Vision <-- Solid class VisionGroup{ A group of Visions val children: Map val defaultTarget: String fun content(target): Map fun get(name: Name): Vision? } Vision <-- VisionGroup class VisionBase{ basic vision implementation } Vision <-- VisionBase class SolidLabel Solid <--- SolidLabel class SolidGroup{ var properties: MutableMeta? val children: Map var prototypes: MutableVisionGroup? fun getPrototype(name): Solid? fun prototypes(builder) } Solid <--- SolidGroup VisionGroupBase <-- SolidGroup class SphereLayer Solid <-- SphereLayer class Sphere Solid <-- Sphere class Box Hexagon <-- Box class GenericHexagon Hexagon <-- GenericHexagon class Extruded Solid <-- Extruded class PolyLine Solid <--- PolyLine interface Hexagon Solid <-- Hexagon class ConeSegment Solid <-- ConeSegment class ConeSurface Solid <-- ConeSurface class Convex Solid <--- Convex class Composite Solid <--- Composite interface SolidReference{ val prototype: Solid fun getPropertyValue(name,inherit,includeStyles,includeDefaults): Value? } VisionGroup <---- SolidReference SolidReferenceGroup -- SolidReference class SolidReferenceGroup{ val refName: Name var properties: MutableMeta? val prototype: Solid val children: Map fun getPropertyValue(name,inherit,includeStyles,includeDefaults): Value? } VisionBase <-- SolidReferenceGroup VisionGroup <-- SolidReferenceGroup interface MutableVisionGroup{ fun onStructureChanged(owner, block) fun removeStructureListener(owner) } VisionGroup <---- MutableVisionGroup class VisionGroupBase{ val children: Map fun set(name: Name?, child: Vision?) } VisionBase <-- VisionGroupBase MutableVisionGroup <-- VisionGroupBase class RootVisionGroup VisionGroupBase <-- RootVisionGroup class VisionOfPlotly{ var properties: MutableMeta? val plot: Plot } VisionBase <-- VisionOfPlotly class VisionOfMarkup{ val format: String var content: String? } VisionBase <-- VisionOfMarkup @enduml