Visualization module for dataforge
Go to file
2021-08-04 22:09:15 +03:00
.github/workflows Update gradle.yml 2020-02-05 12:53:01 +03:00
demo Update README.md 2021-07-28 16:46:43 +03:00
docs Updated tutorial, some details left 2021-08-04 22:09:15 +03:00
gradle/wrapper Remove global VisionForge object 2021-05-05 15:28:06 +03:00
jupyter/visionforge-gdml-jupyter Move to external RingUI implementation. wrappers-bom 2021-06-29 11:49:41 +03:00
ui Fixed vertical size for demos 2021-06-30 18:33:46 +03:00
visionforge-core Move to external RingUI implementation. wrappers-bom 2021-06-29 11:49:41 +03:00
visionforge-fx Move to external RingUI implementation. wrappers-bom 2021-06-29 11:49:41 +03:00
visionforge-gdml Fix a bug with composite children. Composite is no longer a group. 2021-05-11 11:33:12 +03:00
visionforge-plotly Fix canvas update 2021-06-05 22:31:16 +03:00
visionforge-server Fix canvas update 2021-06-05 22:31:16 +03:00
visionforge-solid Move to external RingUI implementation. wrappers-bom 2021-06-29 11:49:41 +03:00
visionforge-threejs Fixed vertical size for demos 2021-06-30 18:33:46 +03:00
.gitattributes Create .gitattributes 2019-04-05 15:45:59 +03:00
.gitignore Major build update and refactoring 2020-10-02 19:09:25 +03:00
build.gradle.kts Another style update 2021-06-30 15:44:12 +03:00
CHANGELOG.md Clipping implemented 2021-05-11 15:28:05 +03:00
gradle.properties Move to external RingUI implementation. wrappers-bom 2021-06-29 11:49:41 +03:00
gradlew GDML optimization 2020-08-26 10:16:55 +03:00
gradlew.bat GDML optimization 2020-08-26 10:16:55 +03:00
LICENSE Geometry update 2019-07-14 22:08:15 +03:00
README.md Update README.md 2021-07-28 15:56:54 +03:00
settings.gradle.kts Move to external RingUI implementation. wrappers-bom 2021-06-29 11:49:41 +03:00

JetBrains Research DOI

Gradle build

Slack

DataForge Visualization Platform

Table of Contents

Introduction

This repository contains a DataForge-based framework used for visualization in various scientific applications.

The main framework's use case for now is 3D visualization for particle physics experiments. Other applications including 2D plots are planned for the future.

The project is developed as a Kotlin multiplatform application, currently targeting browser JavaScript and JVM.

Requirements

JVM backend requires JDK 11 or later

Features

The main framework's features for now include:

  • 3D visualization of complex experimental set-ups
  • Event display such as particle tracks, etc.
  • Scales up to few hundred thousands of elements
  • Camera move, rotate, zoom-in and zoom-out
  • Scene graph as an object tree with property editor
  • Settings export and import
  • Multiple platform support

About DataForge

DataForge is a software framework for automated scientific data processing. DataForge Visualization Platform uses some of the concepts and modules of DataForge, including: Meta, Configuration, Context, Provider, and some others.

To learn more about DataForge, please consult the following URLs:

Modules contained in this repository

visionforge-core

Contains a general hierarchy of classes and interfaces useful for visualization. This module is not specific to 3D-visualization.

The visionforge-core module also includes configuration editors for JS (in jsMain) and JVM (in jvmMain).

Class diagram:

visionforge-solid

Includes common classes and serializers for 3D visualization, as well as Three.js and JavaFX implementations.

Class diagram:

Prototypes

One of the important features of the framework is support for 3D object prototypes (sometimes also referred to as templates). The idea is that prototype geometry can be rendered once and reused for multiple objects. This helps to significantly decrease memory usage.

The prototypes property tree is defined in SolidGroup class via PrototypeHolder interface, and SolidReference class helps to reuse a template object.

Styles

SolidGroup has a styleSheet property that can optionally define styles at the Group's level. Styles are applied to child (descendant) objects using Vision.styles: List<String> property.

visionforge-gdml

GDML bindings for 3D visualization (to be moved to gdml project).

Visualization for External Systems

The visionforge framework can be used to visualize geometry and events from external, non-Kotlin based systems, such as ROOT. This will require a plugin to convert data model of the external system to that of visionforge. Performing such integration is a work currently in progress.

Demonstrations

The demo module contains several example projects (demonstrations) of using the visionforge framework. They are briefly described in this section, for more details please consult the corresponding per-project README file.

Simple Example - Solid Showcase

Contains a simple demonstration with a grid including a few shapes that you can rotate, move camera, and so on. Some shapes will also periodically change their color and visibility.

More details

Example view:

Full-Stack Application Example - Muon Monitor Visualization

A full-stack application example, showing the Muon Monitor experiment set-up.

More details

Example view:

GDML Example

Visualization example for geometry defined as GDML file.

More details

Example view:

Thanks and references

The original three.js bindings were made by Lars Ivar Hatledal, but the project is discontinued right now.

All other libraries are explicitly shown as dependencies. We would like to express specific thanks to JetBrains Kotlin-JS team for consulting us during the work.