diff --git a/firebird-ng/src/app/app-config.service.spec.ts b/firebird-ng/src/app/app-config.service.spec.ts
new file mode 100644
index 0000000..ee08175
--- /dev/null
+++ b/firebird-ng/src/app/app-config.service.spec.ts
@@ -0,0 +1,16 @@
+import { TestBed } from '@angular/core/testing';
+
+import { AppConfigService } from './app-config.service';
+
+describe('AppConfigService', () => {
+ let service: AppConfigService;
+
+ beforeEach(() => {
+ TestBed.configureTestingModule({});
+ service = TestBed.inject(AppConfigService);
+ });
+
+ it('should be created', () => {
+ expect(service).toBeTruthy();
+ });
+});
diff --git a/firebird-ng/src/app/app-config.service.ts b/firebird-ng/src/app/app-config.service.ts
new file mode 100644
index 0000000..0e9d145
--- /dev/null
+++ b/firebird-ng/src/app/app-config.service.ts
@@ -0,0 +1,9 @@
+import { Injectable } from '@angular/core';
+
+@Injectable({
+ providedIn: 'root'
+})
+export class AppConfigService {
+
+ constructor() { }
+}
diff --git a/firebird-ng/src/app/app.routes.ts b/firebird-ng/src/app/app.routes.ts
index 2a73356..c103874 100644
--- a/firebird-ng/src/app/app.routes.ts
+++ b/firebird-ng/src/app/app.routes.ts
@@ -1,12 +1,17 @@
import { Routes } from '@angular/router';
import {MainDisplayComponent} from "./main-display/main-display.component";
import {FileBrowserComponent} from "./file-browser/file-browser.component";
+import {InputConfigComponent} from "./input-config/input-config.component";
export const routes: Routes = [
+ { path: '', redirectTo: '/config', pathMatch: 'full' },
+ { path: 'config', component: InputConfigComponent },
{
path: 'display',
loadComponent: () => import('./main-display/main-display.component').then(m => m.MainDisplayComponent)
},
- { path: '', component: FileBrowserComponent }
-
+ {
+ path: 'files',
+ loadComponent: () => import('./file-browser/file-browser.component').then(m => m.FileBrowserComponent)
+ },
];
diff --git a/firebird-ng/src/app/geometry.service.ts b/firebird-ng/src/app/geometry.service.ts
index 77d0b3e..ac4bd27 100644
--- a/firebird-ng/src/app/geometry.service.ts
+++ b/firebird-ng/src/app/geometry.service.ts
@@ -174,7 +174,7 @@ export class GeometryService {
//
console.time('Build geometry');
- let rootObject3d = build(rootGeoManager, { numfaces: 500000000, numnodes: 50000000, dflt_colors: false, vislevel: 100, doubleside:true, transparency:false});
+ let rootObject3d = build(rootGeoManager, { numfaces: 500000000, numnodes: 50000000, instancing:1, dflt_colors: false, vislevel: 100, doubleside:false, transparency:true});
console.timeEnd('Build geometry');
// >oO console.log(geo);
diff --git a/firebird-ng/src/app/input-config/input-config.component.html b/firebird-ng/src/app/input-config/input-config.component.html
new file mode 100644
index 0000000..68e6b98
--- /dev/null
+++ b/firebird-ng/src/app/input-config/input-config.component.html
@@ -0,0 +1,74 @@
+
+
+
Event display source control
+
+
+
diff --git a/firebird-ng/src/app/input-config/input-config.component.scss b/firebird-ng/src/app/input-config/input-config.component.scss
new file mode 100644
index 0000000..e69de29
diff --git a/firebird-ng/src/app/input-config/input-config.component.spec.ts b/firebird-ng/src/app/input-config/input-config.component.spec.ts
new file mode 100644
index 0000000..b5f19fe
--- /dev/null
+++ b/firebird-ng/src/app/input-config/input-config.component.spec.ts
@@ -0,0 +1,26 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { BrowserModule } from '@angular/platform-browser';
+import { ReactiveFormsModule } from '@angular/forms';
+import { InputConfigComponent } from './input-config.component';
+
+
+
+describe('InputConfigComponent', () => {
+ let component: InputConfigComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ imports: [InputConfigComponent]
+ })
+ .compileComponents();
+
+ fixture = TestBed.createComponent(InputConfigComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/firebird-ng/src/app/input-config/input-config.component.ts b/firebird-ng/src/app/input-config/input-config.component.ts
new file mode 100644
index 0000000..16e3f1f
--- /dev/null
+++ b/firebird-ng/src/app/input-config/input-config.component.ts
@@ -0,0 +1,40 @@
+// event-display-source.component.ts
+import { Component, OnInit } from '@angular/core';
+import { FormBuilder, FormGroup } from '@angular/forms';
+import { GeometryService } from '../geometry.service';
+import { ReactiveFormsModule } from '@angular/forms';
+import {RouterLink} from '@angular/router';
+
+@Component({
+ selector: 'app-input-config',
+ standalone: true,
+ imports: [ReactiveFormsModule, RouterLink],
+ templateUrl: './input-config.component.html',
+ styleUrl: './input-config.component.scss'
+})
+export class InputConfigComponent implements OnInit {
+
+ geoForm: FormGroup;
+
+ constructor(private fb: FormBuilder, private geometryService: GeometryService) {
+ this.geoForm = this.fb.group({
+ selectedGeometry: ['eic geometry'],
+ geoOptEnabled: [false],
+ selectedGeoCutoff: ['Central detector'],
+ geoPostEnabled: [false]
+ });
+
+ this.geoForm.valueChanges.subscribe(value => {
+ //this.geometryService.save(value);
+ console.log(value);
+ });
+ }
+
+ ngOnInit(): void {
+ // const savedSettings = this.geometryService.load();
+ // if (savedSettings) {
+ // this.geoForm.setValue(savedSettings);
+ // }
+ }
+
+}
diff --git a/firebird-ng/src/app/main-display/main-display.component.ts b/firebird-ng/src/app/main-display/main-display.component.ts
index 4a07979..f3b7ce8 100644
--- a/firebird-ng/src/app/main-display/main-display.component.ts
+++ b/firebird-ng/src/app/main-display/main-display.component.ts
@@ -1,13 +1,29 @@
import { Component, OnInit } from '@angular/core';
import { EventDisplayService } from 'phoenix-ui-components';
import { Configuration, PhoenixLoader, PresetView, ClippingSetting, PhoenixMenuNode } from 'phoenix-event-display';
-import { Color, DoubleSide, Mesh, LineSegments, LineBasicMaterial, MeshPhongMaterial, Material, ObjectLoader, FrontSide, Vector3, Matrix4, REVISION, } from "three";
+import {
+ Color,
+ DoubleSide,
+ Mesh,
+ LineSegments,
+ LineBasicMaterial,
+ MeshPhongMaterial,
+ Material,
+ ObjectLoader,
+ FrontSide,
+ Vector3,
+ Matrix4,
+ REVISION,
+ MeshPhysicalMaterial,
+} from "three";
import { PhoenixUIModule } from 'phoenix-ui-components';
import { GeometryService} from '../geometry.service';
import { Edm4hepRootEventLoader } from '../edm4hep-root-event-loader';
import { ActivatedRoute } from '@angular/router';
import {color} from "three/examples/jsm/nodes/shadernode/ShaderNode";
import {getGeoNodesByLevel} from "../utils/cern-root.utils";
+import {produceRenderOrder} from "jsrootdi/geom";
+import {wildCardCheck} from "../utils/wildcard";
interface Colorable {
color: Color;
@@ -72,6 +88,7 @@ export class MainDisplayComponent implements OnInit {
rootObject3d.scale.setScalar(scale);
}
sceneGeometry.add(rootObject3d);
+ console.log("CERN ROOT converted to Object3d: ", rootObject3d);
//rootGeometry.visible = initiallyVisible;
//sceneGeometry.add(rootGeometry);
@@ -93,6 +110,20 @@ export class MainDisplayComponent implements OnInit {
}
}
+ let renderer = openThreeManager.rendererManager;
+
+ const glassMaterial = new MeshPhysicalMaterial({
+ color: 0xffff00, // Yellow color
+ metalness: 0,
+ roughness: 0,
+ transmission: 0.7, // High transparency
+ opacity: 1,
+ transparent: true,
+ reflectivity: 0.5
+ });
+
+
+
// Now we want to change the materials
sceneGeometry.traverse( (child: any) => {
@@ -128,6 +159,26 @@ export class MainDisplayComponent implements OnInit {
clipShadows: false
});
+ // Material
+ let name:string = child.name;
+
+
+ if(name.startsWith("bar_") || name.startsWith("prism_")) {
+ child.material = glassMaterial;
+ }
+
+ if(! child.material?.clippingPlanes !== undefined) {
+ child.material.clippingPlanes = openThreeManager.clipPlanes;
+ }
+
+ if(! child.material?.clipIntersection !== undefined) {
+ child.material.clipIntersection = true;
+ }
+
+ if(! child.material?.clipShadows !== undefined) {
+ child.material.clipShadows = false;
+ }
+
// if (!(child instanceof Mesh)) {
// return;
// }
@@ -156,6 +207,10 @@ export class MainDisplayComponent implements OnInit {
// child.material.clipShadows = false;
});
+ let scene = threeManager.getSceneManager().getScene();
+ let camera = openThreeManager.controlsManager.getMainCamera();
+ produceRenderOrder(scene, camera.position, 'dflt');
+
}
ngOnInit() {