@startuml 'https://plantuml.com/class-diagram interface Vision{ val parent: VisionGroup? fun getProperty(name):TypedMetaItem? fun setProperty(name, item) } interface Solid{ base of 3D geometries } Vision <- Solid class VisionGroup{ a group of visions } Vision <-- VisionGroup class VisionBase{ basic vision implementation } Vision <- VisionBase class SolidLabel Solid <--- SolidLabel class SolidGroup Solid <--- SolidGroup MutableVisionGroup <-- SolidGroup class SphereLayer GeometrySolid <-- SphereLayer class Sphere GeometrySolid <-- Sphere class Box Hexagon <-- Box class GenericHexagon Hexagon <-- GenericHexagon class Extruded GeometrySolid <-- Extruded class PolyLine Solid <--- PolyLine interface GeometrySolid Solid <--- GeometrySolid interface Hexagon GeometrySolid <-- Hexagon class ConeSegment GeometrySolid <-- ConeSegment class ConeSurface GeometrySolid <-- ConeSurface class Convex Solid <--- Convex class Composite Solid <--- Composite interface SolidReference VisionGroup <---- SolidReference interface MutableVisionGroup VisionGroup <---- MutableVisionGroup class SolidReferenceGroup VisionGroup <-- SolidReferenceGroup Solid <-- SolidReferenceGroup VisionBase <-- SolidReferenceGroup SolidReference <-- SolidReferenceGroup class ReferenceChild VisionGroup <-- ReferenceChild Solid <-- ReferenceChild SolidReference <-- ReferenceChild class RootVisionGroup MutableVisionGroup <-- RootVisionGroup class VisionOfPlotly VisionBase <-- VisionOfPlotly @enduml