@@ -166,6 +166,18 @@ function setup_mesh_property_listeners(
166166 nv . onMeshShaderChanged ( meshIndex , mesh . meshShaderIndex ) ;
167167 }
168168
169+ function node_scale_changed ( ) {
170+ mesh . nodeScale = mmodel . get ( "node_scale" ) ;
171+ mesh . updateMesh ( nv . gl ) ;
172+ nv . updateGLVolume ( ) ;
173+ }
174+
175+ function edge_scale_changed ( ) {
176+ mesh . edgeScale = mmodel . get ( "edge_scale" ) ;
177+ mesh . updateMesh ( nv . gl ) ;
178+ nv . updateGLVolume ( ) ;
179+ }
180+
169181 function fiber_radius_changed ( ) {
170182 mesh . fiberRadius = mmodel . get ( "fiber_radius" ) ;
171183 mesh . updateMesh ( nv . gl ) ;
@@ -221,6 +233,8 @@ function setup_mesh_property_listeners(
221233 colormap_invert_changed ( ) ;
222234 colorbar_visible_changed ( ) ;
223235 mesh_shader_index_changed ( ) ;
236+ edge_scale_changed ( ) ;
237+ node_scale_changed ( ) ;
224238 fiber_radius_changed ( ) ;
225239 fiber_length_changed ( ) ;
226240 fiber_dither_changed ( ) ;
@@ -234,6 +248,8 @@ function setup_mesh_property_listeners(
234248 mmodel . on ( "change:colormap_invert" , colormap_invert_changed ) ;
235249 mmodel . on ( "change:colorbar_visible" , colorbar_visible_changed ) ;
236250 mmodel . on ( "change:mesh_shader_index" , mesh_shader_index_changed ) ;
251+ mmodel . on ( "change:edge_scale" , edge_scale_changed ) ;
252+ mmodel . on ( "change:node_scale" , node_scale_changed ) ;
237253 mmodel . on ( "change:fiber_radius" , fiber_radius_changed ) ;
238254 mmodel . on ( "change:fiber_length" , fiber_length_changed ) ;
239255 mmodel . on ( "change:fiber_dither" , fiber_dither_changed ) ;
@@ -252,6 +268,8 @@ function setup_mesh_property_listeners(
252268 mmodel . off ( "change:colormap_invert" , colormap_invert_changed ) ;
253269 mmodel . off ( "change:colorbar_visible" , colorbar_visible_changed ) ;
254270 mmodel . off ( "change:mesh_shader_index" , mesh_shader_index_changed ) ;
271+ mmodel . off ( "change:edge_scale" , edge_scale_changed ) ;
272+ mmodel . off ( "change:node_scale" , node_scale_changed ) ;
255273 mmodel . off ( "change:fiber_radius" , fiber_radius_changed ) ;
256274 mmodel . off ( "change:fiber_length" , fiber_length_changed ) ;
257275 mmodel . off ( "change:fiber_dither" , fiber_dither_changed ) ;
@@ -290,14 +308,23 @@ export async function create_mesh(
290308 } else if ( path || data ) {
291309 const dataBuffer = path ?. data ?. buffer || data ?. buffer ;
292310 const name = path ?. name || mmodel . get ( "name" ) ;
293- mesh = await niivue . NVMesh . readMesh (
294- dataBuffer as ArrayBuffer ,
295- name ,
296- nv . gl ,
297- mmodel . get ( "opacity" ) ,
298- new Uint8Array ( mmodel . get ( "rgba255" ) ) ,
299- mmodel . get ( "visible" ) ,
300- ) ;
311+ if ( typeof name === "string" && name . toLowerCase ( ) . endsWith ( ".jcon" ) ) {
312+ const decoder = new TextDecoder ( "utf-8" ) ;
313+ const jsonText = decoder . decode ( dataBuffer ) ;
314+ const jsonObj = JSON . parse ( jsonText ) ;
315+ mesh = nv . loadConnectomeAsMesh ( jsonObj ) ;
316+ mmodel . set ( "node_scale" , mesh . nodeScale ) ;
317+ mmodel . set ( "edge_scale" , mesh . edgeScale ) ;
318+ } else {
319+ mesh = await niivue . NVMesh . readMesh (
320+ dataBuffer as ArrayBuffer ,
321+ name ,
322+ nv . gl ,
323+ mmodel . get ( "opacity" ) ,
324+ new Uint8Array ( mmodel . get ( "rgba255" ) ) ,
325+ mmodel . get ( "visible" ) ,
326+ ) ;
327+ }
301328 mesh . id = backendId ;
302329 } else if ( url ) {
303330 mesh = await niivue . NVMesh . loadFromUrl ( {
0 commit comments