Coder Social home page Coder Social logo

bene51 / 3dscript Goto Github PK

View Code? Open in Web Editor NEW
57.0 57.0 12.0 4.2 MB

Create 3D/4D animations using a natural language-based syntax

Home Page: https://bene51.github.io/3Dscript

License: BSD 2-Clause "Simplified" License

Shell 0.02% Java 90.50% C++ 9.29% C 0.04% CMake 0.15%

3dscript's People

Contributors

bene51 avatar mutterer avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

3dscript's Issues

Bug with Quickstart / Interactive Animation: java.lang.RuntimeException: Native exception: Unable to get platform id in /home/bschmid/3D_Animation/3D_Animation_Native/Raycaster.cpp (line 73)

Hi,

I have just installed your great-looking package into ImageJ. I have tried to follow the Quickstart example with T1 Head data, as specified on the ImageJ website for this package:

https://imagej.net/3Dscript

However, when I run Interactive Animation, I get the following exception:

(Fiji Is Just) ImageJ 2.0.0-rc-69/1.52p; Java 1.8.0_172 [64-bit]; Linux 4.15.0-66-generic; 300MB of 39417MB (<1%)

java.lang.RuntimeException: Native exception: Unable to get platform id in /home/bschmid/3D_Animation/3D_Animation_Native/Raycaster.cpp (line 73)
at animation3d.renderer3d.OpenCLRaycaster.initRaycaster16(Native Method)
at animation3d.renderer3d.OpenCLRaycaster.(OpenCLRaycaster.java:85)
at animation3d.renderer3d.Renderer3D.(Renderer3D.java:27)
at animation3d.main.InteractiveRaycaster.run(InteractiveRaycaster.java:151)
at ij.plugin.filter.PlugInFilterRunner.processOneImage(PlugInFilterRunner.java:266)
at ij.plugin.filter.PlugInFilterRunner.(PlugInFilterRunner.java:114)
at ij.IJ.runUserPlugIn(IJ.java:232)
at ij.IJ.runPlugIn(IJ.java:193)
at ij.Executer.runCommand(Executer.java:137)
at ij.Executer.run(Executer.java:66)
at java.lang.Thread.run(Thread.java:748)

The exception provides my runtime environment too.

It seems that the animation3d package has a hard-coded path in it, which obv will not exist on my machine.

Cheers,

Steve J. West

Duplicated frames when rendering timelapse if "change timepoint to 0"

Hello,

I've noticed that if I render a timelapse using the code below (based on the zebrafish example in the gallery), I get many duplicated frames in the resulting animation. In this particular case there were ~30 duplicated frames out of 150 frames.

At frame 0:
- change timepoint to 0

From frame 0 to frame 150 change timepoint to 150

However, if I simply change the timepoint at frame 0 to 1 instead of 0, the resulting animation has no duplicated frames (except for the first one) and works as expected.

At frame 0:
- change timepoint to 1

From frame 0 to frame 150 change timepoint to 150

Not sure if it's a bug, but maybe it is worth mentioning in the wiki or gallery? I ran into this when I tried to compare two different renderings frame-by-frame and could not because there were random duplicated frames in the animations.

Thanks!
Bruno

Crash with Fiji on macOS 10.14

Hi Bene,

just tried running the Fiji plugin, resulted in a crash however:

Thread 35 Crashed:: Java: Interactive Animation
0   libsystem_kernel.dylib        	0x00007fff733a7b86 __pthread_kill + 10
1   libsystem_pthread.dylib       	0x00007fff7345dc50 pthread_kill + 285
2   libsystem_c.dylib             	0x00007fff733111c9 abort + 127
3   libjvm.dylib                  	0x0000000110542a8d os::abort(bool) + 25
4   libjvm.dylib                  	0x000000011066acd2 VMError::report_and_die() + 2304
5   libjvm.dylib                  	0x00000001105446d2 JVM_handle_bsd_signal + 1131
6   libjvm.dylib                  	0x0000000110540917 signalHandler(int, __siginfo*, void*) + 47
7   libsystem_platform.dylib      	0x00007fff73452b3d _sigtramp + 29
8   ???                           	0x0000000110064c20 initialPoolContent + 57360
9   com.apple.opencl              	0x00007fff4ed63413 0x7fff4ed44000 + 128019
10  com.apple.opencl              	0x00007fff4ed46ffb clCreateProgramWithSource + 88
11  libOpenCLRaycaster.jnilib     	0x000000013e0bba4d Raycaster<unsigned short>::setKernel(char const*) + 189
12  libOpenCLRaycaster.jnilib     	0x000000013e0bb93f Raycaster<unsigned short>::init_opencl() + 511
13  libOpenCLRaycaster.jnilib     	0x000000013e0bbdac Raycaster<unsigned short>::Raycaster(int, int, int, int, int, int) + 140
14  libOpenCLRaycaster.jnilib     	0x000000013e0bc213 Raycaster<unsigned short>::Raycaster(int, int, int, int, int, int) + 67
15  libOpenCLRaycaster.jnilib     	0x000000013e0beebb RaycasterJNI<unsigned short>::RaycasterJNI(JNIEnv_*, int, int, int, int, int, int) + 475
16  libOpenCLRaycaster.jnilib     	0x000000013e0bef56 RaycasterJNI<unsigned short>::RaycasterJNI(JNIEnv_*, int, int, int, int, int, int) + 86
17  libOpenCLRaycaster.jnilib     	0x000000013e0bfaf0 Java_animation3d_renderer3d_OpenCLRaycaster_initRaycaster16 + 128
18  ???                           	0x0000000111081667 0 + 4580709991
19  ???                           	0x00000001110712bd 0 + 4580643517
20  ???                           	0x00000001110712bd 0 + 4580643517
21  ???                           	0x00000001110712bd 0 + 4580643517
22  ???                           	0x0000000111071302 0 + 4580643586
23  ???                           	0x00000001110712bd 0 + 4580643517
24  ???                           	0x00000001110712bd 0 + 4580643517
25  ???                           	0x0000000111071040 0 + 4580642880
26  ???                           	0x0000000111071040 0 + 4580642880
27  ???                           	0x00000001110712bd 0 + 4580643517
28  ???                           	0x0000000111071302 0 + 4580643586
29  ???                           	0x00000001110697a7 0 + 4580612007
30  libjvm.dylib                  	0x00000001103a4b3a JavaCalls::call_helper(JavaValue*, methodHandle*, JavaCallArguments*, Thread*) + 1710
31  libjvm.dylib                  	0x00000001103a52de JavaCalls::call_virtual(JavaValue*, KlassHandle, Symbol*, Symbol*, JavaCallArguments*, Thread*) + 356
32  libjvm.dylib                  	0x00000001103a548a JavaCalls::call_virtual(JavaValue*, Handle, KlassHandle, Symbol*, Symbol*, Thread*) + 74
33  libjvm.dylib                  	0x00000001103ffdb1 thread_entry(JavaThread*, Thread*) + 124
34  libjvm.dylib                  	0x0000000110624a2f JavaThread::thread_main_inner() + 155
35  libjvm.dylib                  	0x000000011062612a JavaThread::run() + 450
36  libjvm.dylib                  	0x00000001105432f6 java_start(Thread*) + 246
37  libsystem_pthread.dylib       	0x00007fff7345b33d _pthread_body + 126
38  libsystem_pthread.dylib       	0x00007fff7345e2a7 _pthread_start + 70
39  libsystem_pthread.dylib       	0x00007fff7345a425 thread_start + 13

I started looking around in the repo a bit -- could it be that the OpenCL kernel is missing? I could not find the kernel.cl file referenced by Raycaster.cpp. If that's the case then it's probably the reason for the crash.

Problem with alpha blending and gamma values < 1

OS: MacOS Mojave
Java: 1.8.0

Issue:
When setting the alpha gamma to values below 1, weird things will happen. I found this while trying to completely deactivate transparency (is this even possible) by producing a constant alpha curve.

Head

Alpha Settings

In the Interactive Raycaster, dragging the right blue marker onto the left raises exception

OS: Mac OS Mojave
Java: 1.8.0

Issue: In the contrast tab of the Interactive Raycaster, setting the alpha row to 0.0 -- 2.0 -- 0.0 by dragging the right blue vertical marker onto the left one causes the plugin to throw an exception (see below). I could replicate this with the T1 head example volume.

setBoundingBox(0.0, 0.0, 100.0, 5.0) 0.0, 0.0, 100.0, 5.0 0.0, 0.0, 100.0, 5.0 setBoundingBox(-193.0, 0.0, 193.0, 5.0) -193.0, 0.0, 193.0, 5.0 -193.0, 0.0, 193.0, 5.0 setBoundingBox(0.0, 0.0, 256.0, 5.0) 0.0, 0.0, 256.0, 5.0 0.0, 0.0, 256.0, 5.0 setBoundingBox(0.0, 0.0, 256.0, 5.0) 0.0, 0.0, 256.0, 5.0 0.0, 0.0, 256.0, 5.0 setBoundingBox(0.0, 0.0, 129.0, 5.0) 0.0, 0.0, 129.0, 5.0 0.0, 0.0, 129.0, 5.0 *** changed default scalebar length to 100.0, pwOut = 1.5000015497207642 javax.swing.JPanel[,0,0,402x736,invalid,layout=java.awt.GridBagLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=] javax.swing.JPanel[,0,0,402x736,layout=java.awt.GridBagLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=] javax.swing.JPanel[,0,0,402x736,layout=java.awt.GridBagLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=] javax.swing.JPanel[,0,0,402x736,layout=java.awt.GridBagLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=] javax.swing.JPanel[,0,0,402x736,layout=java.awt.GridBagLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=] javax.swing.JPanel[,0,0,402x736,layout=java.awt.GridBagLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=] javax.swing.JPanel[,0,0,402x736,layout=java.awt.GridBagLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=] closing setBoundingBox(0.0, 0.0, 100.0, 5.0) 0.0, 0.0, 100.0, 5.0 0.0, 0.0, 100.0, 5.0 setBoundingBox(-193.0, 0.0, 193.0, 5.0) -193.0, 0.0, 193.0, 5.0 -193.0, 0.0, 193.0, 5.0 setBoundingBox(0.0, 0.0, 256.0, 5.0) 0.0, 0.0, 256.0, 5.0 0.0, 0.0, 256.0, 5.0 setBoundingBox(0.0, 0.0, 256.0, 5.0) 0.0, 0.0, 256.0, 5.0 0.0, 0.0, 256.0, 5.0 setBoundingBox(0.0, 0.0, 129.0, 5.0) 0.0, 0.0, 129.0, 5.0 0.0, 0.0, 129.0, 5.0 *** changed default scalebar length to 100.0, pwOut = 1.5000015497207642 javax.swing.JPanel[,0,0,402x736,invalid,layout=java.awt.GridBagLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=] closing setBoundingBox(0.0, 0.0, 100.0, 5.0) 0.0, 0.0, 100.0, 5.0 0.0, 0.0, 100.0, 5.0 setBoundingBox(-193.0, 0.0, 193.0, 5.0) -193.0, 0.0, 193.0, 5.0 -193.0, 0.0, 193.0, 5.0 setBoundingBox(0.0, 0.0, 256.0, 5.0) 0.0, 0.0, 256.0, 5.0 0.0, 0.0, 256.0, 5.0 setBoundingBox(0.0, 0.0, 256.0, 5.0) 0.0, 0.0, 256.0, 5.0 0.0, 0.0, 256.0, 5.0 setBoundingBox(0.0, 0.0, 129.0, 5.0) 0.0, 0.0, 129.0, 5.0 0.0, 0.0, 129.0, 5.0 *** changed default scalebar length to 50.0, pwOut = 0.7500007748603821 javax.swing.JPanel[,0,0,402x736,layout=java.awt.GridBagLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=] AutoActivationListener.insertUpdate AutoActivationListener.insertUpdate(): timer restarted AutoActivationListener.actionPerformed() AutoActivationListener.actionPerformed(): last character = f(66) AutoActivationListener.actionPerformed(): calling doCompletion() refreshPopupWindow getAlreadyEnteredText Current line = f *f* alreadyEntered: f getCompletionsImpl getAlreadyEnteredText Current line = f *f* return completions: [From frame ] getAlreadyEnteredText Current line = f *f* alreadyEntered: f AutoActivationListener.insertUpdate AutoActivationListener.insertUpdate(): timer restarted AutoActivationListener.actionPerformed() AutoActivationListener.actionPerformed(): last character = (20) AutoActivationListener.actionPerformed(): calling doCompletion() refreshPopupWindow getAlreadyEnteredText Current line = From frame *From frame * alreadyEntered: EMPTY getCompletionsImpl getAlreadyEnteredText Current line = From frame *From frame * return completions: [0] getAlreadyEnteredText Current line = From frame *From frame * alreadyEntered: EMPTY EditorPane: insertUpdate(): lastCharacter = <(3c) AutoActivationListener.insertUpdate AutoActivationListener.insertUpdate(): timer restarted AutoActivationListener.actionPerformed() AutoActivationListener.actionPerformed(): last character = >(3e) EditorPane: insertUpdate(): lastCharacter = r(72) AutoActivationListener.insertUpdate AutoActivationListener.insertUpdate(): timer restarted AutoActivationListener.actionPerformed() AutoActivationListener.actionPerformed(): last character = r(72) AutoActivationListener.actionPerformed(): calling doCompletion() refreshPopupWindow getAlreadyEnteredText Current line = From frame r *From frame r* alreadyEntered: EMPTY getCompletionsImpl getAlreadyEnteredText Current line = From frame r *From frame r* return completions: [0] getAlreadyEnteredText Current line = From frame r *From frame r* alreadyEntered: EMPTY EditorPane: insertUpdate(): lastCharacter = <(3c) AutoActivationListener.insertUpdate AutoActivationListener.insertUpdate(): timer restarted AutoActivationListener.actionPerformed() AutoActivationListener.actionPerformed(): last character = >(3e) EditorPane: insertUpdate(): lastCharacter = o(6f) AutoActivationListener.insertUpdate AutoActivationListener.insertUpdate(): timer restarted AutoActivationListener.actionPerformed() AutoActivationListener.actionPerformed(): last character = o(6f) AutoActivationListener.actionPerformed(): calling doCompletion() refreshPopupWindow getAlreadyEnteredText Current line = From frame ro *From frame ro* alreadyEntered: EMPTY getCompletionsImpl getAlreadyEnteredText Current line = From frame ro *From frame ro* return completions: [0] getAlreadyEnteredText Current line = From frame ro *From frame ro* alreadyEntered: EMPTY EditorPane: insertUpdate(): lastCharacter = <(3c) AutoActivationListener.insertUpdate AutoActivationListener.insertUpdate(): timer restarted AutoActivationListener.actionPerformed() AutoActivationListener.actionPerformed(): last character = >(3e) EditorPane: insertUpdate(): lastCharacter = m(6d) AutoActivationListener.insertUpdate AutoActivationListener.insertUpdate(): timer restarted AutoActivationListener.actionPerformed() AutoActivationListener.actionPerformed(): last character = m(6d) AutoActivationListener.actionPerformed(): calling doCompletion() refreshPopupWindow getAlreadyEnteredText Current line = From frame rom *From frame rom* alreadyEntered: EMPTY getCompletionsImpl getAlreadyEnteredText Current line = From frame rom *From frame rom* return completions: [0] getAlreadyEnteredText Current line = From frame rom *From frame rom* alreadyEntered: EMPTY EditorPane: insertUpdate(): lastCharacter = <(3c) AutoActivationListener.insertUpdate AutoActivationListener.insertUpdate(): timer restarted AutoActivationListener.actionPerformed() AutoActivationListener.actionPerformed(): last character = >(3e) EditorPane: insertUpdate(): lastCharacter = 1(31) AutoActivationListener.insertUpdate AutoActivationListener.insertUpdate(): timer restarted AutoActivationListener.actionPerformed() AutoActivationListener.actionPerformed(): last character = 1(31) EditorPane: insertUpdate(): lastCharacter = 0(30) AutoActivationListener.insertUpdate AutoActivationListener.insertUpdate(): timer restarted AutoActivationListener.actionPerformed() AutoActivationListener.actionPerformed(): last character = 0(30) EditorPane: insertUpdate(): lastCharacter = (20) AutoActivationListener.insertUpdate AutoActivationListener.insertUpdate(): timer restarted AutoActivationListener.actionPerformed() AutoActivationListener.actionPerformed(): last character = (20) AutoActivationListener.actionPerformed(): calling doCompletion() refreshPopupWindow getAlreadyEnteredText Current line = From frame 0 *From frame 0 * alreadyEntered: getCompletionsImpl getAlreadyEnteredText Current line = From frame 0 *From frame 0 * return completions: [to frame ] getAlreadyEnteredText Current line = From frame 0 *From frame 0 * alreadyEntered: EditorPane: insertUpdate(): lastCharacter = t(74) AutoActivationListener.insertUpdate AutoActivationListener.insertUpdate(): timer restarted AutoActivationListener.actionPerformed() AutoActivationListener.actionPerformed(): last character = (20) AutoActivationListener.actionPerformed(): calling doCompletion() refreshPopupWindow getAlreadyEnteredText Current line = From frame 0 to frame *From frame 0 to frame * alreadyEntered: EMPTY getCompletionsImpl getAlreadyEnteredText Current line = From frame 0 to frame *From frame 0 to frame * return completions: [0] getAlreadyEnteredText Current line = From frame 0 to frame *From frame 0 to frame * alreadyEntered: EMPTY EditorPane: insertUpdate(): lastCharacter = <(3c) AutoActivationListener.insertUpdate AutoActivationListener.insertUpdate(): timer restarted AutoActivationListener.actionPerformed() AutoActivationListener.actionPerformed(): last character = >(3e) EditorPane: insertUpdate(): lastCharacter = 2(32) AutoActivationListener.insertUpdate AutoActivationListener.insertUpdate(): timer restarted AutoActivationListener.actionPerformed() AutoActivationListener.actionPerformed(): last character = 2(32) EditorPane: insertUpdate(): lastCharacter = 0(30) AutoActivationListener.insertUpdate AutoActivationListener.insertUpdate(): timer restarted AutoActivationListener.actionPerformed() AutoActivationListener.actionPerformed(): last character = 0(30) EditorPane: insertUpdate(): lastCharacter = 0(30) AutoActivationListener.insertUpdate AutoActivationListener.insertUpdate(): timer restarted AutoActivationListener.actionPerformed() AutoActivationListener.actionPerformed(): last character = 0(30) EditorPane: insertUpdate(): lastCharacter = (20) AutoActivationListener.insertUpdate AutoActivationListener.insertUpdate(): timer restarted AutoActivationListener.actionPerformed() AutoActivationListener.actionPerformed(): last character = (20) AutoActivationListener.actionPerformed(): calling doCompletion() refreshPopupWindow getAlreadyEnteredText Current line = From frame 0 to frame 200 *From frame 0 to frame 200 * ** alreadyEntered: getCompletionsImpl getAlreadyEnteredText Current line = From frame 0 to frame 200 *From frame 0 to frame 200 * ** return completions: [rotate by , translate , zoom by a factor of , reset transformation , change ] getAlreadyEnteredText Current line = From frame 0 to frame 200 *From frame 0 to frame 200 * ** alreadyEntered: EditorPane: insertUpdate(): lastCharacter = r(72) AutoActivationListener.insertUpdate AutoActivationListener.insertUpdate(): timer restarted AutoActivationListener.actionPerformed() AutoActivationListener.actionPerformed(): last character = (20) AutoActivationListener.actionPerformed(): calling doCompletion() refreshPopupWindow getAlreadyEnteredText Current line = From frame 0 to frame 200 rotate by *From frame 0 to frame 200 rotate by * *rotate by * alreadyEntered: EMPTY getCompletionsImpl getAlreadyEnteredText Current line = From frame 0 to frame 200 rotate by *From frame 0 to frame 200 rotate by * *rotate by * return completions: [0] getAlreadyEnteredText Current line = From frame 0 to frame 200 rotate by *From frame 0 to frame 200 rotate by * *rotate by * alreadyEntered: EMPTY EditorPane: insertUpdate(): lastCharacter = <(3c) AutoActivationListener.insertUpdate AutoActivationListener.insertUpdate(): timer restarted AutoActivationListener.actionPerformed() AutoActivationListener.actionPerformed(): last character = >(3e) EditorPane: insertUpdate(): lastCharacter = 3(33) AutoActivationListener.insertUpdate AutoActivationListener.insertUpdate(): timer restarted AutoActivationListener.actionPerformed() AutoActivationListener.actionPerformed(): last character = 3(33) EditorPane: insertUpdate(): lastCharacter = 6(36) AutoActivationListener.insertUpdate AutoActivationListener.insertUpdate(): timer restarted AutoActivationListener.actionPerformed() AutoActivationListener.actionPerformed(): last character = 6(36) EditorPane: insertUpdate(): lastCharacter = 0(30) AutoActivationListener.insertUpdate AutoActivationListener.insertUpdate(): timer restarted AutoActivationListener.actionPerformed() AutoActivationListener.actionPerformed(): last character = 0(30) EditorPane: insertUpdate(): lastCharacter = (20) AutoActivationListener.insertUpdate AutoActivationListener.insertUpdate(): timer restarted AutoActivationListener.actionPerformed() AutoActivationListener.actionPerformed(): last character = (20) AutoActivationListener.actionPerformed(): calling doCompletion() refreshPopupWindow getAlreadyEnteredText Current line = From frame 0 to frame 200 rotate by 360 *From frame 0 to frame 200 rotate by 360 * *rotate by 360 * alreadyEntered: getCompletionsImpl getAlreadyEnteredText Current line = From frame 0 to frame 200 rotate by 360 *From frame 0 to frame 200 rotate by 360 * *rotate by 360 * return completions: [degrees ] getAlreadyEnteredText Current line = From frame 0 to frame 200 rotate by 360 *From frame 0 to frame 200 rotate by 360 * *rotate by 360 * alreadyEntered: EditorPane: insertUpdate(): lastCharacter = d(64) AutoActivationListener.insertUpdate AutoActivationListener.insertUpdate(): timer restarted AutoActivationListener.actionPerformed() AutoActivationListener.actionPerformed(): last character = (20) AutoActivationListener.actionPerformed(): calling doCompletion() refreshPopupWindow getAlreadyEnteredText Current line = From frame 0 to frame 200 rotate by 360 degrees *From frame 0 to frame 200 rotate by 360 degrees * *rotate by 360 degrees * ** alreadyEntered: getCompletionsImpl getAlreadyEnteredText Current line = From frame 0 to frame 200 rotate by 360 degrees *From frame 0 to frame 200 rotate by 360 degrees * *rotate by 360 degrees * ** return completions: [horizontally , vertically , around ] getAlreadyEnteredText Current line = From frame 0 to frame 200 rotate by 360 degrees *From frame 0 to frame 200 rotate by 360 degrees * *rotate by 360 degrees * ** alreadyEntered: EditorPane: insertUpdate(): lastCharacter = h(68) AutoActivationListener.insertUpdate AutoActivationListener.insertUpdate(): timer restarted AutoActivationListener.actionPerformed() AutoActivationListener.actionPerformed(): last character = (20) AutoActivationListener.actionPerformed(): calling doCompletion() refreshPopupWindow getAlreadyEnteredText Current line = From frame 0 to frame 200 rotate by 360 degrees horizontally *From frame 0 to frame 200 rotate by 360 degrees horizontally * *rotate by 360 degrees horizontally * *horizontally * ** alreadyEntered: getCompletionsImpl getAlreadyEnteredText Current line = From frame 0 to frame 200 rotate by 360 degrees horizontally *From frame 0 to frame 200 rotate by 360 degrees horizontally * *rotate by 360 degrees horizontally * *horizontally * ** return completions: [(none) , linear , ease-in-out , ease-in , ease-out , ease ] refreshPopupWindow getAlreadyEnteredText Current line = From frame 0 to frame 200 rotate by 360 degrees horizontally *From frame 0 to frame 200 rotate by 360 degrees horizontally * *rotate by 360 degrees horizontally * *horizontally * ** alreadyEntered: *From frame 0 to frame 200 rotate by 360 degrees horizontally* *rotate by 360 degrees horizontally* *horizontally* ** setBoundingBox(0.0, 0.0, 100.0, 5.0) 0.0, 0.0, 100.0, 5.0 0.0, 0.0, 100.0, 5.0 javax.swing.JPanel[,0,0,402x736,invalid,layout=java.awt.GridBagLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=] javax.swing.JPanel[,0,0,402x736,layout=java.awt.GridBagLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=] javax.swing.JPanel[,0,0,402x736,layout=java.awt.GridBagLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=] javax.swing.JPanel[,0,0,402x736,invalid,layout=java.awt.GridBagLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=] javax.swing.JPanel[,0,0,402x736,layout=java.awt.GridBagLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=] javax.swing.JPanel[,0,0,402x736,layout=java.awt.GridBagLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=] javax.swing.JPanel[,0,0,402x736,layout=java.awt.GridBagLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=] javax.swing.JPanel[,0,0,402x736,layout=java.awt.GridBagLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=9,maximumSize=,minimumSize=,preferredSize=] Exception in thread "AWT-EventQueue-0" java.lang.ArithmeticException: / by zero at animation3d.gui.ContrastPanel$DoubleSliderCanvas.paintBuffer(ContrastPanel.java:723) at animation3d.gui.DoubleBuffer.paintComponent(DoubleBuffer.java:34) at javax.swing.JComponent.paint(JComponent.java:1056) at javax.swing.JComponent.paintToOffscreen(JComponent.java:5210) at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1579) at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1502) at javax.swing.RepaintManager.paint(RepaintManager.java:1272) at javax.swing.JComponent._paintImmediately(JComponent.java:5158) at javax.swing.JComponent.paintImmediately(JComponent.java:4969) at javax.swing.RepaintManager$4.run(RepaintManager.java:831) at javax.swing.RepaintManager$4.run(RepaintManager.java:814) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74) at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:814) at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:789) at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:738) at javax.swing.RepaintManager.access$1200(RepaintManager.java:64) at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1732) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) at java.awt.EventQueue.access$500(EventQueue.java:97) at java.awt.EventQueue$3.run(EventQueue.java:709) at java.awt.EventQueue$3.run(EventQueue.java:703) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74) at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) Exception in thread "AWT-EventQueue-0" java.lang.ArithmeticException: / by zero at animation3d.gui.ContrastPanel$DoubleSliderCanvas.paintBuffer(ContrastPanel.java:723) at animation3d.gui.DoubleBuffer.paintComponent(DoubleBuffer.java:34) at javax.swing.JComponent.paint(JComponent.java:1056) at javax.swing.JComponent.paintToOffscreen(JComponent.java:5210) at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1579) at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1502) at javax.swing.RepaintManager.paint(RepaintManager.java:1272) at javax.swing.JComponent._paintImmediately(JComponent.java:5158) at javax.swing.JComponent.paintImmediately(JComponent.java:4969) at javax.swing.RepaintManager$4.run(RepaintManager.java:831) at javax.swing.RepaintManager$4.run(RepaintManager.java:814) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74) at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:814) at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:789) at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:738) at javax.swing.RepaintManager.access$1200(RepaintManager.java:64) at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1732) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) at java.awt.EventQueue.access$500(EventQueue.java:97) at java.awt.EventQueue$3.run(EventQueue.java:709) at java.awt.EventQueue$3.run(EventQueue.java:703) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74) at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

Crashes after most recent update

After using 3Dscript successfully about a month ago, it now crashes, either as soon as I enable light, or just upon changing the channel. The plugin freezez and has to be restarted.

Exception in thread "3D-Animation rendering thread" java.lang.RuntimeException: OpenCL error 4294967245: CL_INVALID_ARG_SIZE in H:\fijiplugins\3D_Animation\3D_Animation_Native\Raycaster.cpp (line 436) at animation3d.renderer3d.OpenCLRaycaster.cast(Native Method) at animation3d.renderer3d.OpenCLRaycaster.project(OpenCLRaycaster.java:240) at animation3d.renderer3d.Renderer3D.render(Renderer3D.java:133) at animation3d.gui.RenderingThread.render(RenderingThread.java:115) at animation3d.gui.RenderingThread.loop(RenderingThread.java:65) at animation3d.gui.RenderingThread$1.run(RenderingThread.java:49)

image

I installed 3Dscript on a fresh Fiji from the romulus.oice... update site.

System information:
Win 10 Enterprise (64bit).
Intel Xeon CPU E5-1630 v4 3.70GHz
128GB RAM
Radeon RX 580, 8GB dedicated memory
image

And while I'm here; thanks for creating and sharing this plugin, it's amazing.

Exception - can't open the 3DScript interactive viewer

I try to open a file that I know can be opened in 3DViewer on another computer (much weaker than the one I am currently working on) and it's not working... First I was getting an error about an outdated graphics card error but that got fixed. We have a NVIDIA Quadro K2200 graphics card. The error I get is attached as a picture. Does someone know why this happens? I have obviously updated Fiji.
MVIMG_20200416_211844

Smoothly return to starting position

I'd like to make an animation that will be shown looped.
After cropping, rotating and zooming in to different parts of the sample I'd like to just -reset transformation in a last step of the animation to go back to the starting state.

I couldn't find a way of doing this smootly, e.g. just do

From frame X to frame Y:
  - reset transformation
  - change channel 1 bounding box x to (0.0, 2202.0)
  - change channel 1 bounding box y to (0.0, 1468.0)
  - change channel 1 bounding box z to (0.0, 1054.0)

and have the animation smoothly go back to the starting state.
How can I achieve this?

feature request: manage bookmarks from other plugins

It would be nice if BookmarkPanel.java had methods that could be invoked programmatically from third party plugins for the functions exposed in the GUI as loadBookmarks() and saveBookmarks().
Basically loadBookmarks(String bookmarkPath) and saveBookmarks(String bookmarkPath)
Jerome.

cut off ROI not being applied to all channels

OS: MacOS and Windows 7/10

When cutting off the ROI of a dataset with more than 1 colour not all the channels get cropped, even if the option is ticked (usually it fails to crop the 1st channel).
Also, when trying to cutoff single channels, if channel1 is selected, channel 2 will be cut, if channel 2 is selected then channel 3 is cut. For channel 3 it cuts channel 3

Zooming in and out does not return to same position

I would like to generate a movie which involves some zooming in and out of the dataset.
My goal would be that the sample is shown exactly the same way at the beginning of the animation and at the end of the animation, to facilitate showing the movie in a looped way.

I thought that I can achieve this with the script below [1], e.g. zoom in a bit and zoom out again.

From frame 0 to frame 1:
- zoom by a factor of 1.5

From frame 2 to frame 3:
- zoom by a factor of 0.75

But this doesn't give me the desired result, e.g. frame 0 and frame 3 don't show the sample at the same zoom level.

Montage

How can I achieve to show the sample in exactly the same state at the start and end of the movie?

[1]: My 'real' script involves much more, but this is boiled down to the bare essentials :)

use in own project

the project does not have a pom....
can I still somehow use it in own java projects?

Feature Request: Better alpha mapping

As I understood it, right now, alpha can only be set in the form of a curve that is 0% (no transparency) at some minimal voxel intensitiesand 100% (max. transparency) at some maximum voxel intensities. Additionally, the curve can be made non linear by defining a gamma value.

There seems to be no way to - for example - invert this curve (i.e. make dark stuff transparent and bright stuff opaque) or set it to some fixed value for all voxel intensities. Also, one cannot define a starting and stop value for the transparency.

It would be very nice to have some more flexibility when it comes to alpha LUTs.

As a starting point, an optional definition of alpha_start and alpha_end would be a big help already.

As a second step, a way of defining several nodes for the alpha value with defined interpolation would be great, for example like this:

At frame 0 change all channels' alpha at intensity 500 to 10%
At frame 0 change all channels' alpha at intensity 600 to 20%
At frame 0 change all channels' alpha at intensity 800 to 40%
At frame 0 change all channels' alpha interpolation to linear (cubic, gamma-like, etc.)

The crème de la crème would be a way of additionally defining different colors not only for different channels but for different intensity ranges. That way one could, together with the more flexible alpha mapping, define tissue ranges in 1-channel-only-images and make them look different (i.e. intensities A to B = soft tissue = reddish color, intensities C to D = bone = whitish color, etc.)

OpenCL error: CL_INVALID_ARG_SIZE

Hi Bene,

3Dscript stopped working in one of our Linux workstations. We didn't make any changes to the system except for Fiji updates. CLIJ still works fine with the GPU, so it seems specific to 3Dscript. Maybe it's related to the latest March updates?

The plugin fails with the following error:

(Fiji Is Just) ImageJ 2.9.0/1.53t; Java 1.8.0_322 [64-bit]; Linux 3.10.0-1062.4.3.el7.x86_64; 643MB of 93994MB (<1%)
 
java.lang.RuntimeException: OpenCL error 4294967245: CL_INVALID_ARG_SIZE in /3Dscript/3D_Animation_Native/Raycaster.cpp (line 624)
	at animation3d.renderer3d.OpenCLRaycaster.cast(Native Method)
	at animation3d.renderer3d.OpenCLRaycaster.project(OpenCLRaycaster.java:317)
	at animation3d.renderer3d.Renderer3D.render(Renderer3D.java:151)
	at animation3d.gui.RenderingThread.<init>(RenderingThread.java:38)
	at animation3d.main.InteractiveRaycaster.run(InteractiveRaycaster.java:174)
	at ij.plugin.filter.PlugInFilterRunner.processOneImage(PlugInFilterRunner.java:266)
	at ij.plugin.filter.PlugInFilterRunner.<init>(PlugInFilterRunner.java:114)
	at ij.IJ.runUserPlugIn(IJ.java:239)
	at ij.IJ.runPlugIn(IJ.java:203)
	at ij.Executer.runCommand(Executer.java:152)
	at ij.Executer.run(Executer.java:70)
	at java.lang.Thread.run(Thread.java:750)

And this is the GPU information identified by CLIJ:

Available CL backends:
  * net.haesleinhuepf.clij.clearcl.backend.jocl.ClearCLBackendJOCL@381eec20
    Functional backend:net.haesleinhuepf.clij.clearcl.backend.jocl.ClearCLBackendJOCL@26b54469
    Best backend:net.haesleinhuepf.clij.clearcl.backend.jocl.ClearCLBackendJOCL@32e159e0
Used CL backend: net.haesleinhuepf.clij.clearcl.backend.jocl.ClearCLBackendJOCL@662ed2bf
ClearCL: ClearCLBase [mClearCLBackendInterface=net.haesleinhuepf.clij.clearcl.backend.jocl.ClearCLBackendJOCL@662ed2bf, mPeerPointer=null]
  Number of platforms:1
  [0] NVIDIA CUDA
     Number of devices: 1
     Available devices: 
     [0] GeForce GTX TITAN X 
        NumberOfComputeUnits: 24 
        Clock frequency: 1076 
        Version: 1.2 
        Extensions: cl_khr_global_int32_base_atomics cl_khr_global_int32_extended_atomics cl_khr_local_int32_base_atomics cl_khr_local_int32_extended_atomics cl_khr_fp64 cl_khr_byte_addressable_store cl_khr_icd cl_khr_gl_sharing cl_nv_compiler_options cl_nv_device_attribute_query cl_nv_pragma_unroll cl_nv_copy_opts cl_khr_gl_event cl_nv_create_buffer cl_khr_int64_base_atomics cl_khr_int64_extended_atomics cl_khr_device_uuid 
        GlobalMemorySizeInBytes: 12805668864 
        LocalMemorySizeInBytes: 49152 
        MaxMemoryAllocationSizeInBytes: 3201417216 
        MaxWorkGroupSize: 1024 
        Compatible image types: [SignedNormalizedInt8, SignedNormalizedInt16, UnsignedNormalizedInt8, UnsignedNormalizedInt16, SignedInt8, SignedInt16, SignedInt32, UnsignedInt8, UnsignedInt16, UnsignedInt32, HalfFloat, Float]
Best GPU device for images: GeForce GTX TITAN X
Best largest GPU device: GeForce GTX TITAN X
Best CPU device: GeForce GTX TITAN X

Any hints of what could be the issue?

Thanks!
Bruno

Platform ID error

When trying to open a dataset in 3Dscript, I get the following error in the log:

java.lang.RuntimeException: Native exception: Unable to get platform id in H:\fijiplugins\3D_Animation\3D_Animation_Native\Raycaster.cpp (line 73) at animation3d.renderer3d.OpenCLRaycaster.initRaycaster8(Native Method) at animation3d.renderer3d.OpenCLRaycaster.<init>(OpenCLRaycaster.java:83) at animation3d.renderer3d.Renderer3D.<init>(Renderer3D.java:27) at animation3d.main.InteractiveRaycaster.run(InteractiveRaycaster.java:130) at ij.plugin.filter.PlugInFilterRunner.processOneImage(PlugInFilterRunner.java:266) at ij.plugin.filter.PlugInFilterRunner.<init>(PlugInFilterRunner.java:114) at ij.IJ.runUserPlugIn(IJ.java:230) at ij.IJ.runPlugIn(IJ.java:192) at ij.Executer.runCommand(Executer.java:137) at ij.Executer.run(Executer.java:66) at java.lang.Thread.run(Thread.java:745)

I have a Nvidia Titan RTX, running on windows. Is it just that this GPU is not supported or is there something else I could try to make it work?

During rendering, initial variables (e.g. rotation) are not consistently taken from Raycaster GUI

OS: Windows 7
Java: 1.8.0

When starting a new render process, some variables from the Interactive Raycaster GUI seem to be used during the rending (i.e. the cropping), but some like the initial rotation do not seem to be used. If this is intentional, there should be some sort of indicator which variables have to be manually set for the animation (e.g. via At frame 0 rotateby 90 degrees) and which are taken from the GUI settings.

NVIDIA Quadro RTX 5000

Hello 3Dscript team,

I have trouble starting 3DScript on our Windows machine with NVIDIA Quadro RTX 500.
When I start with a 3D stacj, it gives the following error:
`
(Fiji Is Just) ImageJ 2.1.0/1.53c; Java 1.8.0_172 [64-bit]; Windows Server 2016 10.0; 3603MB of 174537MB (2%)

java.lang.RuntimeException: Native exception: Error building OpenCL kernel. Please start from the command line to see detailed error messages in H:\fijiplugins\3D_Animation\Release_2020-07-20\3Dscript\3D_Animation_Native\Raycaster.cpp (line 528)
at animation3d.renderer3d.OpenCLRaycaster.setKernel(Native Method)
at animation3d.renderer3d.OpenCLRaycaster.(OpenCLRaycaster.java:106)
at animation3d.renderer3d.Renderer3D.(Renderer3D.java:28)
at animation3d.renderer3d.Renderer3D.(Renderer3D.java:24)
at animation3d.main.InteractiveRaycaster.run(InteractiveRaycaster.java:151)
at ij.plugin.filter.PlugInFilterRunner.processOneImage(PlugInFilterRunner.java:265)
at ij.plugin.filter.PlugInFilterRunner.(PlugInFilterRunner.java:114)
at ij.IJ.runUserPlugIn(IJ.java:237)
`

Here is the dump of oclDeviceQuery.exe utility. Any ideas what can be wrong?

oclDeviceQuery.exe Starting...

OpenCL SW Info:

CL_PLATFORM_NAME: NVIDIA CUDA
CL_PLATFORM_VERSION: OpenCL 1.2 CUDA 11.1.70
OpenCL SDK Revision: 7027912

OpenCL Device Info:

1 devices found supporting OpenCL:


Device Quadro RTX 5000

CL_DEVICE_NAME: Quadro RTX 5000
CL_DEVICE_VENDOR: NVIDIA Corporation
CL_DRIVER_VERSION: 456.43
CL_DEVICE_VERSION: OpenCL 1.2 CUDA
CL_DEVICE_OPENCL_C_VERSION: OpenCL C 1.2
CL_DEVICE_TYPE: CL_DEVICE_TYPE_GPU
CL_DEVICE_MAX_COMPUTE_UNITS: 48
CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS: 3
CL_DEVICE_MAX_WORK_ITEM_SIZES: 1024 / 1024 / 64
CL_DEVICE_MAX_WORK_GROUP_SIZE: 1024
CL_DEVICE_MAX_CLOCK_FREQUENCY: 1815 MHz
CL_DEVICE_ADDRESS_BITS: 64
CL_DEVICE_MAX_MEM_ALLOC_SIZE: 4096 MByte
CL_DEVICE_GLOBAL_MEM_SIZE: 16384 MByte
CL_DEVICE_ERROR_CORRECTION_SUPPORT: no
CL_DEVICE_LOCAL_MEM_TYPE: local
CL_DEVICE_LOCAL_MEM_SIZE: 48 KByte
CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE: 64 KByte
CL_DEVICE_QUEUE_PROPERTIES: CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE
CL_DEVICE_QUEUE_PROPERTIES: CL_QUEUE_PROFILING_ENABLE
CL_DEVICE_IMAGE_SUPPORT: 1
CL_DEVICE_MAX_READ_IMAGE_ARGS: 256
CL_DEVICE_MAX_WRITE_IMAGE_ARGS: 32
CL_DEVICE_SINGLE_FP_CONFIG: denorms INF-quietNaNs round-to-nearest round-to-zero round-to-inf fma

CL_DEVICE_IMAGE 2D_MAX_WIDTH 32768
2D_MAX_HEIGHT 32768
3D_MAX_WIDTH 16384
3D_MAX_HEIGHT 16384
3D_MAX_DEPTH 16384

CL_DEVICE_EXTENSIONS: cl_khr_global_int32_base_atomics
cl_khr_global_int32_extended_atomics
cl_khr_local_int32_base_atomics
cl_khr_local_int32_extended_atomics
cl_khr_fp64
cl_khr_byte_addressable_store
cl_khr_icd
cl_khr_gl_sharing
cl_nv_compiler_options
cl_nv_device_attribute_query
cl_nv_pragma_unroll
cl_nv_d3d10_sharing
cl_khr_d3d10_sharing
cl_nv_d3d11_sharing
cl_nv_copy_opts
cl_khr_gl_event
cl_nv_create_buffer
cl_khr_int64_base_atomics
cl_khr_int64_extended_atomics
cl_kernel_attribute_nv

CL_DEVICE_COMPUTE_CAPABILITY_NV: 7.5
NUMBER OF MULTIPROCESSORS: 48
MapSMtoCores SM 7.5 is undefined (please update to the latest SDK)!
NUMBER OF CUDA CORES: 4294967248
CL_DEVICE_REGISTERS_PER_BLOCK_NV: 65536
CL_DEVICE_WARP_SIZE_NV: 32
CL_DEVICE_GPU_OVERLAP_NV: CL_TRUE
CL_DEVICE_KERNEL_EXEC_TIMEOUT_NV: CL_TRUE
CL_DEVICE_INTEGRATED_MEMORY_NV: CL_FALSE
CL_DEVICE_PREFERRED_VECTOR_WIDTH_ CHAR 1, SHORT 1, INT 1, LONG 1, FLOAT 1, DOUBLE 1


2D Image Formats Supported (75)

Channel Order Channel Type

1 CL_R CL_FLOAT
2 CL_R CL_HALF_FLOAT
3 CL_R CL_UNORM_INT8
4 CL_R CL_UNORM_INT16
5 CL_R CL_SNORM_INT16
6 CL_R CL_SIGNED_INT8
7 CL_R CL_SIGNED_INT16
8 CL_R CL_SIGNED_INT32
9 CL_R CL_UNSIGNED_INT8
10 CL_R CL_UNSIGNED_INT16
11 CL_R CL_UNSIGNED_INT32
12 CL_A CL_FLOAT
13 CL_A CL_HALF_FLOAT
14 CL_A CL_UNORM_INT8
15 CL_A CL_UNORM_INT16
16 CL_A CL_SNORM_INT16
17 CL_A CL_SIGNED_INT8
18 CL_A CL_SIGNED_INT16
19 CL_A CL_SIGNED_INT32
20 CL_A CL_UNSIGNED_INT8
21 CL_A CL_UNSIGNED_INT16
22 CL_A CL_UNSIGNED_INT32
23 CL_RG CL_FLOAT
24 CL_RG CL_HALF_FLOAT
25 CL_RG CL_UNORM_INT8
26 CL_RG CL_UNORM_INT16
27 CL_RG CL_SNORM_INT16
28 CL_RG CL_SIGNED_INT8
29 CL_RG CL_SIGNED_INT16
30 CL_RG CL_SIGNED_INT32
31 CL_RG CL_UNSIGNED_INT8
32 CL_RG CL_UNSIGNED_INT16
33 CL_RG CL_UNSIGNED_INT32
34 CL_RA CL_FLOAT
35 CL_RA CL_HALF_FLOAT
36 CL_RA CL_UNORM_INT8
37 CL_RA CL_UNORM_INT16
38 CL_RA CL_SNORM_INT16
39 CL_RA CL_SIGNED_INT8
40 CL_RA CL_SIGNED_INT16
41 CL_RA CL_SIGNED_INT32
42 CL_RA CL_UNSIGNED_INT8
43 CL_RA CL_UNSIGNED_INT16
44 CL_RA CL_UNSIGNED_INT32
45 CL_RGBA CL_FLOAT
46 CL_RGBA CL_HALF_FLOAT
47 CL_RGBA CL_UNORM_INT8
48 CL_RGBA CL_UNORM_INT16
49 CL_RGBA CL_SNORM_INT16
50 CL_RGBA CL_SIGNED_INT8
51 CL_RGBA CL_SIGNED_INT16
52 CL_RGBA CL_SIGNED_INT32
53 CL_RGBA CL_UNSIGNED_INT8
54 CL_RGBA CL_UNSIGNED_INT16
55 CL_RGBA CL_UNSIGNED_INT32
56 CL_BGRA CL_UNORM_INT8
57 CL_BGRA CL_SIGNED_INT8
58 CL_BGRA CL_UNSIGNED_INT8
59 CL_ARGB CL_UNORM_INT8
60 CL_ARGB CL_SIGNED_INT8
61 CL_ARGB CL_UNSIGNED_INT8
62 CL_INTENSITY CL_FLOAT
63 CL_INTENSITY CL_HALF_FLOAT
64 CL_INTENSITY CL_UNORM_INT8
65 CL_INTENSITY CL_UNORM_INT16
66 CL_INTENSITY CL_SNORM_INT16
67 CL_LUMINANCE CL_FLOAT
68 CL_LUMINANCE CL_HALF_FLOAT
69 CL_LUMINANCE CL_UNORM_INT8
70 CL_LUMINANCE CL_UNORM_INT16
71 CL_LUMINANCE CL_SNORM_INT16
72 CL_BGRA CL_SNORM_INT8
73 CL_BGRA CL_SNORM_INT16
74 CL_ARGB CL_SNORM_INT8
75 CL_ARGB CL_SNORM_INT16


3D Image Formats Supported (75)

Channel Order Channel Type

1 CL_R CL_FLOAT
2 CL_R CL_HALF_FLOAT
3 CL_R CL_UNORM_INT8
4 CL_R CL_UNORM_INT16
5 CL_R CL_SNORM_INT16
6 CL_R CL_SIGNED_INT8
7 CL_R CL_SIGNED_INT16
8 CL_R CL_SIGNED_INT32
9 CL_R CL_UNSIGNED_INT8
10 CL_R CL_UNSIGNED_INT16
11 CL_R CL_UNSIGNED_INT32
12 CL_A CL_FLOAT
13 CL_A CL_HALF_FLOAT
14 CL_A CL_UNORM_INT8
15 CL_A CL_UNORM_INT16
16 CL_A CL_SNORM_INT16
17 CL_A CL_SIGNED_INT8
18 CL_A CL_SIGNED_INT16
19 CL_A CL_SIGNED_INT32
20 CL_A CL_UNSIGNED_INT8
21 CL_A CL_UNSIGNED_INT16
22 CL_A CL_UNSIGNED_INT32
23 CL_RG CL_FLOAT
24 CL_RG CL_HALF_FLOAT
25 CL_RG CL_UNORM_INT8
26 CL_RG CL_UNORM_INT16
27 CL_RG CL_SNORM_INT16
28 CL_RG CL_SIGNED_INT8
29 CL_RG CL_SIGNED_INT16
30 CL_RG CL_SIGNED_INT32
31 CL_RG CL_UNSIGNED_INT8
32 CL_RG CL_UNSIGNED_INT16
33 CL_RG CL_UNSIGNED_INT32
34 CL_RA CL_FLOAT
35 CL_RA CL_HALF_FLOAT
36 CL_RA CL_UNORM_INT8
37 CL_RA CL_UNORM_INT16
38 CL_RA CL_SNORM_INT16
39 CL_RA CL_SIGNED_INT8
40 CL_RA CL_SIGNED_INT16
41 CL_RA CL_SIGNED_INT32
42 CL_RA CL_UNSIGNED_INT8
43 CL_RA CL_UNSIGNED_INT16
44 CL_RA CL_UNSIGNED_INT32
45 CL_RGBA CL_FLOAT
46 CL_RGBA CL_HALF_FLOAT
47 CL_RGBA CL_UNORM_INT8
48 CL_RGBA CL_UNORM_INT16
49 CL_RGBA CL_SNORM_INT16
50 CL_RGBA CL_SIGNED_INT8
51 CL_RGBA CL_SIGNED_INT16
52 CL_RGBA CL_SIGNED_INT32
53 CL_RGBA CL_UNSIGNED_INT8
54 CL_RGBA CL_UNSIGNED_INT16
55 CL_RGBA CL_UNSIGNED_INT32
56 CL_BGRA CL_UNORM_INT8
57 CL_BGRA CL_SIGNED_INT8
58 CL_BGRA CL_UNSIGNED_INT8
59 CL_ARGB CL_UNORM_INT8
60 CL_ARGB CL_SIGNED_INT8
61 CL_ARGB CL_UNSIGNED_INT8
62 CL_INTENSITY CL_FLOAT
63 CL_INTENSITY CL_HALF_FLOAT
64 CL_INTENSITY CL_UNORM_INT8
65 CL_INTENSITY CL_UNORM_INT16
66 CL_INTENSITY CL_SNORM_INT16
67 CL_LUMINANCE CL_FLOAT
68 CL_LUMINANCE CL_HALF_FLOAT
69 CL_LUMINANCE CL_UNORM_INT8
70 CL_LUMINANCE CL_UNORM_INT16
71 CL_LUMINANCE CL_SNORM_INT16
72 CL_BGRA CL_SNORM_INT8
73 CL_BGRA CL_SNORM_INT16
74 CL_ARGB CL_SNORM_INT8
75 CL_ARGB CL_SNORM_INT16

oclDeviceQuery, Platform Name = NVIDIA CUDA, Platform Version = OpenCL 1.2 CUDA 11.1.70, SDK Revision = 7027912, NumDevs = 1, Device = Quadro RTX 5000

System Info:

Local Time/Date = 14:17:43, 11/9/2020
CPU Arch: 9
CPU Level: 6

of CPU processors: 40

Windows Build: 9200
Windows Ver: 6.2 (Windows Vista / Windows 7)

[oclDeviceQuery.exe] test results...
PASSED

Thanks in advance for your help,
Eugene

Interactive way to change timepoint?

Hello Bene, is there a way to change the timepoint of the 3D Animation window in the interactive mode?

I often want to check how the contrast and transformations look in earlier or later timepoints, but the only way I managed to do so is to render an animation with the text-based editor using the change timepoint command. Once the rendering is finished that timepoint will be set on the main 3D Animation window, and I can check the parameters.

However, this feels a bit awkward, perhaps there is an easier way? The most intuitive would be a timepoint setting in the Interactive Raycaster gui to quickly set it.

Cheers!
Bruno

Problem with changing the background color

I changed the background color of Fiji as the manual said through Image/Color/Color Picker. However, the background color of 3DScript didn't change at all. My Fiji is updated with version 1.53c. Does anyone know what's wrong? Thanks a lot!

It made ClearVolume crash in Fiji

The 3Dscript installation on Fiji went on smoothly and I could open a 3D dataset easily with it. However, when I tried to open the same dataset with ClearVolume (which was there in my Fiji plugin even before 3Dscript was added), it crashed.

ClearVolume threw an error of authentication
Device name: ClearCLDevice [mClearCLPlatform=ClearCLPlatform [name=NVIDIA CUDA], name=GeForce GTX 1070 Ti]
javax.mail.AuthenticationFailedException: 534-5.7.14 <https://accounts.google.com/signin/continue?sarp=1&scc=1&plt=AKgnsbsw ..... (cutting the log short)

I shall try to re-install both plugins again. Hoping both of them can work together on the same machine.

(I'm using windows 10 PC and using the plugins with Fiji.)

Make 3Dscript available in SciJava Maven

Hello,

is 3Dscript available on the SciJava Maven repository? https://maven.scijava.org/

If I search there for "animation3d", I am unable to find any libraries. Publishing your libraries to the Maven repository would allow other software tools to utilize 3Dscript functions.

Thank you!

PS: If you need any help with the upload to the SciJava Maven, feel free to ask me.

Cannot find any OpenCL capable GPU

Hello,

I am running your script in an Ubuntu (20.04) machine with a "NVIDIA Corporation GP104GL [Quadro P4000]" graphic card. I also have the latest version of the graphic card driver installed. However I keep getting this error:

(Fiji Is Just) ImageJ 2.1.0/1.53c; Java 1.8.0_172 [64-bit]; Linux 5.15.0-46-generic; 33453MB of 381590MB (8%)
 
java.lang.RuntimeException: Native exception: Cannot find any OpenCL capable GPU. Does your graphics card support OpenCL? You might want to try installing the newest drivers. in /3Dscript/3D_Animation_Native/Raycaster.cpp (line 81)
	at animation3d.renderer3d.OpenCLRaycaster.initRaycaster16(Native Method)
	at animation3d.renderer3d.OpenCLRaycaster.<init>(OpenCLRaycaster.java:101)
	at animation3d.renderer3d.Renderer3D.<init>(Renderer3D.java:28)
	at animation3d.renderer3d.Renderer3D.<init>(Renderer3D.java:24)
	at animation3d.main.InteractiveRaycaster.run(InteractiveRaycaster.java:158)
	at ij.plugin.filter.PlugInFilterRunner.processOneImage(PlugInFilterRunner.java:265)
	at ij.plugin.filter.PlugInFilterRunner.<init>(PlugInFilterRunner.java:114)
	at ij.IJ.runUserPlugIn(IJ.java:237)
	at ij.IJ.runPlugIn(IJ.java:198)
	at ij.Executer.runCommand(Executer.java:150)
	at ij.Executer.run(Executer.java:68)
	at java.lang.Thread.run(Thread.java:748)

I also installed nvidia-opencl-dev, but that did not help. Any suggestion on how I can solve this issue?

Thank your for your time.

BigDataViewer

Is it possible to use 3DScript with BigDataViewer files?

Thanks,
Adam

comparing to old 3D Viewer

Is the viewer here different/better/faster than the old one that is shipped with Fiji as "3D Viewer".
Specifically, running below code was sometimes slow (several seconds) for me:

final long start = System.currentTimeMillis();
final Image3DUniverse univ = new Image3DUniverse();
univ.show();
final Content content = univ.addMesh( objectMask, new Color3f( 1.0f, 1.0f, 1.0f ), "object at level " + ll, 250, new boolean[]{ true, true, true }, 1 );
Utils.log( "Computed mesh and created 3D display in " + (System.currentTimeMillis() - start) + " ms" );

I thus wonder whether the code in this repo might be faster?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.