Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
133 commits
Select commit Hold shift + click to select a range
ac16240
utilize eyetracking in sciview
RuoshanLan Aug 2, 2021
c3bc1b4
a working version and adjust the size of some messages
RuoshanLan Sep 9, 2021
f1f00c7
code clean
RuoshanLan Sep 9, 2021
9eb458e
let the volume show before starting the eye tracking
RuoshanLan Oct 7, 2021
785eb2c
update bionic tracking
RuoshanLan Oct 12, 2021
0c8afc7
solve conflict
RuoshanLan Oct 12, 2021
b4f7188
add headset for cell tracking
RuoshanLan Nov 15, 2021
0d613f6
add test without VR headset
RuoshanLan Nov 29, 2021
3ddfcfc
a working version of utilizing VRHeadset for cell tracking - part of …
RuoshanLan Dec 3, 2021
efe9902
add function of tracking with controllers
RuoshanLan Dec 17, 2021
7370519
replace numerictype with realtype
RuoshanLan May 19, 2022
7e4c128
resolve conflicts
RuoshanLan May 19, 2022
9fb6c22
fix issue in controller version
RuoshanLan Jul 26, 2022
e1c6013
improve the VRHeadsSettTrackingDemo and fix a bug caused by UV coordi…
RuoshanLan Oct 28, 2022
9348a25
add VR interaction to VRHeadSetTrackingDemo and add nodetaggedevent
RuoshanLan Nov 9, 2022
8aa32f4
code clean
RuoshanLan Nov 9, 2022
3eb8741
merge
RuoshanLan Nov 9, 2022
1d59a30
Fix line endings
RuoshanLan Nov 15, 2022
a7057b0
Gradle: Add missing transitive dependencies
RuoshanLan Nov 15, 2022
12cd940
SciView: Revert failed merge for addVolume functions
RuoshanLan Nov 15, 2022
e909c79
clean and add comment
RuoshanLan Dec 19, 2022
954ae8e
Merge branch 'master' into eyetracking-utilization
smlpt Jul 4, 2023
3735f6c
Gradle Build: update to scenery 0.9.0
smlpt Jul 4, 2023
1ecaf0f
Gradle Build: fixing outdated code
smlpt Jul 6, 2023
0a78f66
SciView: bring back openDirTiff and openTrackFile
smlpt Jul 6, 2023
9efcb08
Gradle: fix directories dep issue
smlpt Jul 11, 2023
80aeccd
build: update gradle and make the build compatible with java 21
smlpt Mar 28, 2024
f116a80
Merge branch 'main' into eyetracking-utilization
smlpt Mar 28, 2024
8b2839d
improve volume loading from scene
smlpt Apr 12, 2024
6136a3c
fix filtering for volumes in the scene
smlpt Apr 12, 2024
d883c68
Merge branch 'main' into eyetracking-utilization
smlpt Apr 15, 2024
279a846
Merge remote-tracking branch 'origin/eyetracking-utilization' into ey…
smlpt Apr 15, 2024
a754d09
SciView: fix VR toggling changes to stereo rendering
smlpt May 7, 2024
bbca486
EyeTrackingDemo: catch if no volume is found
smlpt May 7, 2024
6fe0805
HedgehogAnalysis: add docs and comments
smlpt May 7, 2024
da9979a
Add: test object for loading a volume and starting the eye tracking d…
smlpt Aug 23, 2024
6d94bbd
Merge branch 'main' into eyetracking-utilization
smlpt Aug 26, 2024
8c6c93a
Make newest sciview compatible with local scenery (stupid jackson)
smlpt Aug 26, 2024
fc6dd31
Fix toggleVRRendering
smlpt Aug 26, 2024
4b4bd77
Minor changes to fix finding local maxima, adding info logs
smlpt Aug 26, 2024
5e6f99c
Increase volume size for testing dataset
smlpt Aug 27, 2024
f58cb0b
Clean up logging
smlpt Aug 27, 2024
e1fe8a3
Change showMessage to centered, try to fix track instancing
smlpt Aug 27, 2024
8560296
Fix track cylinder radius
smlpt Sep 2, 2024
1d64c4c
EyeTrackingDemo: update sciview API usage
smlpt Sep 3, 2024
7b8031d
Make eye tracking compatible with mastodon bridge
smlpt Sep 6, 2024
153dabf
Change log to logger for consistency
smlpt Sep 10, 2024
b03c042
Add: gaussian smoothing function
smlpt Sep 11, 2024
b5e5eda
Change to sampleRayGridTraversal and add samplePos list to SpineMetadata
smlpt Sep 11, 2024
1d77ea3
HedgehogAnalysis: get spine vertex position from grid traversal
smlpt Sep 13, 2024
34b76f8
Fix: ignore children in AABB intersection
smlpt Sep 17, 2024
7325742
EyeTrackingDemo: fix vertex positions
smlpt Sep 19, 2024
f51de82
Create CellTrackingBase, let other classes inherit most of the (other…
smlpt Oct 8, 2024
8f05cc4
Make sure that cam is not inside volume when tracking
smlpt Oct 9, 2024
9bcafe8
Add names to scene objects to make it easier to find and remove them …
smlpt Oct 9, 2024
e6c8612
CellTrackingBase: moved file to demo/advanced
smlpt Oct 9, 2024
886997a
Refactor the eye tracking logic into EyeTracking, so that EyeTracking…
smlpt Oct 9, 2024
6d93dc0
Add proper eyetracking shutdown handling
smlpt Oct 10, 2024
9cafe64
Unified naming scheme, extracted tracking functionality into separate…
smlpt Oct 11, 2024
f072138
Use lazylogger instead of Logservice
smlpt Oct 11, 2024
7c2f2c3
StartEyeTrackingDirectly: Rename to EyeTrackingCommand
smlpt Oct 14, 2024
d2d2618
SciviewBridge: wrap eyeTracking into a separate thread to fix blank s…
smlpt Nov 6, 2024
317734b
Add TimepointObserver to unify timepoint updates across VR and bridge
smlpt Nov 12, 2024
eb34260
Fix monoscopic render rebuild after disabling VR
smlpt Nov 18, 2024
0263305
SciView: improve VR shutdown handling in toggleVRRendering
smlpt Nov 18, 2024
2c82070
Improve scene cleanup after turning off VR
smlpt Nov 18, 2024
148ceb5
Cleaned up files for PR, removed comments, added documentation
smlpt Nov 19, 2024
09d3e9e
Rename VR controller bindings using TrackerRole and OpenVRButton
smlpt Dec 9, 2024
1501761
Add spot annotation tool, started changing keybindings
smlpt Dec 17, 2024
613375f
chore: adjust configs for local development on new device
smlpt Dec 17, 2024
ead4bec
Clean up VR controllers if they are left in the scene
smlpt Dec 17, 2024
140ec7d
Fix track creation from eyetracking. Add TP animation wrapping
smlpt Dec 20, 2024
59c655a
Add spot selection with controllers
smlpt Jan 6, 2025
72a30cd
EyeTrackingCommand: simplify eyetracking initialisation
smlpt Jan 6, 2025
3cc2cf2
Enable VR launching without eye tracking. Separated run logic into Ce…
smlpt Jan 6, 2025
6867848
CellTrackingBase: disable volume scaling for now (will be done with g…
smlpt Jan 7, 2025
f2eb338
Add dragbehavior via callbacks for spot instances
smlpt Jan 7, 2025
9d3885f
Added VRGrabTheWorld behavior
smlpt Jan 9, 2025
87427d9
Added VR2HandWorldTransform behavior for the volume
smlpt Jan 9, 2025
d1a0289
VR2HandNodeTransform: class rename, and added lockYaxis parameter
smlpt Jan 9, 2025
76e1926
VR2HandNodeTransform: add optional onEndCallback. Using node center a…
smlpt Jan 9, 2025
9c66ab0
Added MultiVRButtonStateManager for handling states where the same VR…
smlpt Jan 10, 2025
f1a8bcd
Extracted MoveInstanceVR behavior into its own class
smlpt Jan 10, 2025
58ce30d
Update grab behaviors to only trigger when their exact button combo i…
smlpt Jan 10, 2025
98fffcc
VR2HandNodeTransform: added changing the position
smlpt Jan 10, 2025
a07dca7
Set up left wrist button menu
smlpt Jan 14, 2025
4238048
CellTrackingBase: improve tool switching behavior
smlpt Jan 16, 2025
da6a9ee
CellTrackingBase: fix tool switching (now remembering the current tool)
smlpt Jan 16, 2025
62f1357
Introduce spot delete button
smlpt Jan 20, 2025
d137ae1
Added controller tracking, track merging
smlpt Jan 21, 2025
13c493d
CellTrackingBase: add Elephant menu and button column toggle
smlpt Jan 31, 2025
aaf2396
Line3D: correct params in overwrite generateBoundingBox method
smlpt Feb 10, 2025
5b0f0fd
VR2HandNodeTransform: fix transformations
smlpt Feb 11, 2025
1ad6291
CellTrackingBase: reset controller tracking once we reach the first t…
smlpt Feb 11, 2025
501b540
bump snakeyaml to 2.3
smlpt Feb 17, 2025
01712a4
Simplified Hedgehog analysis, smooth spine samples, dont use outlier …
smlpt Feb 25, 2025
b219d85
SpineMetadata: make samples nonnullable since they are always at least 0
smlpt Feb 25, 2025
5fcda6e
Unified controller tracking/editing, introduced undo button, improved…
smlpt Feb 28, 2025
411a47a
build: include Mastodon in dependencies
smlpt Mar 12, 2025
d1d8e0c
HedgehogAnalysis: Make Spinemetadata optional in SpineGraphVertex
smlpt Mar 12, 2025
355c248
Controller tracking: accumulate spots first, then send the whole trac…
smlpt Mar 18, 2025
50279b7
CellTrackingBase: start controller track with existing spots, attach …
smlpt Apr 3, 2025
33a4fe9
CellTrackingBase: add link preview toggle button
smlpt Apr 3, 2025
9f5df19
Allow moving track link previews while tracking
smlpt Apr 4, 2025
00b684a
distribute elephant buttons into their own menus (workaround for OOBB…
smlpt Apr 29, 2025
3300fd8
SciView: restore controls and FOV after exiting VR
smlpt May 9, 2025
5abb672
EyeTracking: extract calibration method and added wrist menu for togg…
smlpt May 9, 2025
5b8f9b9
CellTrackingBase: divided menus and introduced new time control menu
smlpt May 9, 2025
53d503b
VRGrabTheWorld: make the grabButtonManager nullable/optional
smlpt May 12, 2025
aeb6fdb
MultiVRButtonStateManager: add overloads and getRegisteredButtons method
smlpt May 12, 2025
b0673af
ConfirmableClickBehaviour: add delayed execution parameter
smlpt May 14, 2025
b91eb10
MultiButtonManager: renamed class, changed two hand state to always t…
smlpt May 16, 2025
5498edb
VR2HandNodeTransform: fix 3D rotation and enable Y axis locking behavior
smlpt May 23, 2025
f0ae3d1
CellTrackingBase: add double button mapping for Y axis locking, add b…
smlpt May 23, 2025
ea1c90d
CellTrackingBase: improve branch deletion hold gesture interaction
smlpt May 26, 2025
fb7161e
CellTrackingBase: add drag selection behavior to quickly paint select…
smlpt May 27, 2025
e79d20e
CellTrackingBase: clean up old commented code
smlpt May 27, 2025
f4e70e4
CellTrackingBase: change default track preview button state to true
smlpt Jun 3, 2025
67942ed
Added CellTrackingButtonMapper
smlpt Jun 10, 2025
323e1de
Merge remote-tracking branch 'origin/controller-tracking' into contro…
smlpt Jun 10, 2025
f78d521
Let CellTrackingButtonMapper handle all keybindings
smlpt Jun 11, 2025
2ed10d8
Fix track merging behavior
smlpt Jun 25, 2025
13fea7b
Fix mapper initialization
smlpt Jun 25, 2025
0b31f37
CellTrackingBase: fix tracking for first timepoint 0
smlpt Jul 2, 2025
8ea654b
Add CursorTool with key mappings and behaviors
smlpt Jul 7, 2025
dd61a18
Merge remote-tracking branch 'origin/controller-tracking' into contro…
smlpt Jul 7, 2025
75bba81
Fix cursor radius values passed to Mastodon
smlpt Jul 8, 2025
85b1b00
Combine cursor and spot scaling behavior, wrapped by AnalogInputWrapper
smlpt Jul 10, 2025
7689954
Lower spot size adjustment speed, defer mastodon updates during drag …
smlpt Jul 10, 2025
d82eb6c
Fix eye tracking menu and add redo button
smlpt Jul 16, 2025
7d6c5fe
Build: remove redundant snakeyaml dep
smlpt Jul 17, 2025
ffa65c8
code cleanup
smlpt Jul 17, 2025
83312d0
EyeTracking: fix playback during tracking
smlpt Jul 17, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 16 additions & 3 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ dependencies {
}

implementation("net.java.dev.jna:jna-platform:5.14.0")
// implementation("net.clearvolume:cleargl")
implementation("org.janelia.saalfeldlab:n5")
implementation("org.janelia.saalfeldlab:n5-imglib2")
implementation("org.apache.logging.log4j:log4j-api:2.20.0")
Expand All @@ -67,9 +68,6 @@ dependencies {

// SciJava dependencies

implementation("org.yaml:snakeyaml") {
version { strictly("1.33") }
}
implementation("org.scijava:scijava-common")
implementation("org.scijava:ui-behaviour")
implementation("org.scijava:script-editor")
Expand Down Expand Up @@ -135,6 +133,8 @@ dependencies {
// OME
implementation("ome:formats-bsd")
implementation("ome:formats-gpl")

implementation("org.mastodon:mastodon:1.0.0-beta-34")
}

//kapt {
Expand All @@ -148,6 +148,19 @@ dependencies {
val isRelease: Boolean
get() = System.getProperty("release") == "true"

//kotlin {
// jvmToolchain(21)
//// compilerOptions {
//// jvmTarget = JvmTarget.JVM_21
//// freeCompilerArgs = listOf("-Xinline-classes", "-opt-in=kotlin.RequiresOptIn")
//// }
//}
//
//java {
// targetCompatibility = JavaVersion.VERSION_21
// sourceCompatibility = JavaVersion.VERSION_21
//}

tasks {
withType<KotlinCompile>().all {
val version = System.getProperty("java.version").substringBefore('.').toInt()
Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
org.gradle.jvmargs=-XX:MaxMetaspaceSize=2g
org.gradle.caching=true
jvmTarget=21
#useLocalScenery=true
useLocalScenery=true
kotlinVersion=1.9.23
dokkaVersion=1.9.10
scijavaParentPOMVersion=37.0.0
Expand Down
85 changes: 85 additions & 0 deletions src/main/java/sc/iview/commands/file/OpenDirofTif.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
/*-
* #%L
* Scenery-backed 3D visualization package for ImageJ.
* %%
* Copyright (C) 2016 - 2021 SciView developers.
* %%
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
* #L%
*/
package sc.iview.commands.file;

import org.scijava.command.Command;
import org.scijava.io.IOService;
import org.scijava.log.LogService;
import org.scijava.plugin.Menu;
import org.scijava.plugin.Parameter;
import org.scijava.plugin.Plugin;
import sc.iview.SciView;

import java.io.File;
import java.io.IOException;

import static sc.iview.commands.MenuWeights.FILE;
import static sc.iview.commands.MenuWeights.FILE_OPEN;

/**
* Command to open a file in SciView
*
* @author Kyle Harrington
*
*/
@Plugin(type = Command.class, menuRoot = "SciView", //
menu = { @Menu(label = "File", weight = FILE), //
@Menu(label = "Open Directory of tif...", weight = FILE_OPEN) })
public class OpenDirofTif implements Command {

@Parameter
private IOService io;

@Parameter
private LogService log;

@Parameter
private SciView sciView;

// TODO: Find a more extensible way than hard-coding the extensions.
@Parameter(style = "directory")
private File file;

@Parameter
private int onlyFirst = 0;

@Override
public void run() {
try {
if(onlyFirst > 0) {
sciView.openDirTiff(file.toPath(), onlyFirst);
} else {
sciView.openDirTiff(file.toPath(), null);
}
}
catch (final IOException | IllegalArgumentException exc) {
log.error( exc );
}
}
}
1 change: 1 addition & 0 deletions src/main/java/sc/iview/commands/file/OpenN5.kt
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,7 @@ class OpenN5 : DynamicCommand() {
DataType.FLOAT64 -> N5Utils.openVolatile<DoubleType>(reader, dataset)
DataType.OBJECT -> TODO()
null -> TODO()
DataType.STRING -> TODO()
}

val wrapped = VolatileViews.wrapAsVolatile(img)
Expand Down
79 changes: 79 additions & 0 deletions src/main/java/sc/iview/commands/file/OpenTrackFile.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
/*-
* #%L
* Scenery-backed 3D visualization package for ImageJ.
* %%
* Copyright (C) 2016 - 2021 SciView developers.
* %%
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
* #L%
*/
package sc.iview.commands.file;

import org.scijava.command.Command;
import org.scijava.io.IOService;
import org.scijava.log.LogService;
import org.scijava.plugin.Menu;
import org.scijava.plugin.Parameter;
import org.scijava.plugin.Plugin;
import sc.iview.SciView;

import java.io.File;
import java.io.IOException;

import static sc.iview.commands.MenuWeights.FILE;
import static sc.iview.commands.MenuWeights.FILE_OPEN;

/**
* Command to open a file in SciView
*
* @author Kyle Harrington
*
*/
@Plugin(type = Command.class, menuRoot = "SciView", //
menu = { @Menu(label = "File", weight = FILE), //
@Menu(label = "Open Track File", weight = FILE_OPEN) })
public class OpenTrackFile implements Command {

@Parameter
private IOService io;

@Parameter
private LogService log;

@Parameter
private SciView sciView;

// TODO: Find a more extensible way than hard-coding the extensions.
@Parameter(style = "open,extensions:csv")
private File file;

@Override
public void run() {
try {
sciView.openTrackFile(file);

}
catch (final IOException | IllegalArgumentException exc) {
log.error( exc );
}
}
}
10 changes: 10 additions & 0 deletions src/main/java/sc/iview/event/NodeTaggedEvent.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package sc.iview.event;

import graphics.scenery.Node;


public class NodeTaggedEvent extends NodeEvent {
public NodeTaggedEvent(final Node node ) {
super( node );
}
}
Loading
Loading