@@ -329,50 +329,86 @@ module ChartExtensions =
329329 else
330330 s
331331
332+ let contains3d ch =
333+ ch
334+ |> existsTrace ( fun t ->
335+ match t with
336+ | :? Trace3d -> true
337+ | _ -> false )
338+
332339 charts
333340 |> Seq.mapi ( fun i ch ->
334341 let colI , rowI , index = ( i% col+ 1 ), ( i/ col+ 1 ),( i+ 1 )
335342 let xdomain = ( colWidth * float ( colI-1 ), ( colWidth * float colI) - space )
336343 let ydomain = ( 1. - (( rowWidth * float rowI) - space ), 1. - ( rowWidth * float ( rowI-1 )))
337- let xaxis , yaxis , layout =
338- let layout = GenericChart.getLayout ch
339- let xName , yName = StyleParam.AxisId.X 1 |> StyleParam.AxisId.toString, StyleParam.AxisId.Y 1 |> StyleParam.AxisId.toString
340- match ( layout.TryGetTypedValue< Axis.LinearAxis> xName),( layout.TryGetTypedValue< Axis.LinearAxis> yName) with
341- | Some x, Some y ->
342- // remove axis
343- DynObj.remove layout xName
344- DynObj.remove layout yName
345-
346- x |> Axis.LinearAxis.style( Anchor= StyleParam.AxisAnchorId.Y index, Domain= StyleParam.Range.MinMax xdomain),
347- y |> Axis.LinearAxis.style( Anchor= StyleParam.AxisAnchorId.X index, Domain= StyleParam.Range.MinMax ydomain),
348- layout
349- | Some x, None ->
350- // remove x - axis
351- DynObj.remove layout xName
352- x |> Axis.LinearAxis.style( Anchor= StyleParam.AxisAnchorId.Y index, Domain= StyleParam.Range.MinMax xdomain),
353- Axis.LinearAxis.init( Anchor= StyleParam.AxisAnchorId.X index, Domain= StyleParam.Range.MinMax ydomain),
354- layout
355- | None, Some y ->
356- // remove y - axis
357- DynObj.remove layout yName
358- Axis.LinearAxis.init( Anchor= StyleParam.AxisAnchorId.Y index, Domain= StyleParam.Range.MinMax xdomain),
359- y |> Axis.LinearAxis.style( Anchor= StyleParam.AxisAnchorId.X index, Domain= StyleParam.Range.MinMax ydomain),
360- layout
361- | None, None ->
362- Axis.LinearAxis.init( Anchor= StyleParam.AxisAnchorId.Y index, Domain= StyleParam.Range.MinMax xdomain),
363- Axis.LinearAxis.init( Anchor= StyleParam.AxisAnchorId.X index, Domain= StyleParam.Range.MinMax ydomain),
364- layout
365-
366- ch
367- |> GenericChart.setLayout layout
368- |> Chart.withAxisAnchor( X= index, Y= index)
369- |> Chart.withX_ Axis( xaxis, index)
370- |> Chart.withY_ Axis( yaxis, index)
344+
345+ if contains3d ch then
346+ let sceneName = sprintf " scene%i " ( i+ 1 )
347+
348+ let scene =
349+ Scene.init (
350+ Domain =
351+ Domain.init( X = StyleParam.Range.MinMax xdomain, Y= StyleParam.Range.MinMax ydomain)
352+ )
353+ let layout =
354+ GenericChart.getLayout ch
355+ |> Layout.AddScene (
356+ sceneName,
357+ scene
358+ )
359+ ch
360+ |> mapTrace
361+ ( fun t ->
362+ t?scene <- sceneName
363+ t
364+ )
365+ |> GenericChart.setLayout layout
366+ //|> Chart.withAxisAnchor(X=index,Y=index)
367+ else
368+
369+ let xaxis , yaxis , layout =
370+ let layout = GenericChart.getLayout ch
371+ let xName , yName = StyleParam.AxisId.X 1 |> StyleParam.AxisId.toString, StyleParam.AxisId.Y 1 |> StyleParam.AxisId.toString
372+ match ( layout.TryGetTypedValue< Axis.LinearAxis> xName),( layout.TryGetTypedValue< Axis.LinearAxis> yName) with
373+ | Some x, Some y ->
374+ // remove axis
375+ DynObj.remove layout xName
376+ DynObj.remove layout yName
377+
378+ x |> Axis.LinearAxis.style( Anchor= StyleParam.AxisAnchorId.Y index, Domain= StyleParam.Range.MinMax xdomain),
379+ y |> Axis.LinearAxis.style( Anchor= StyleParam.AxisAnchorId.X index, Domain= StyleParam.Range.MinMax ydomain),
380+ layout
381+ | Some x, None ->
382+ // remove x - axis
383+ DynObj.remove layout xName
384+ x |> Axis.LinearAxis.style( Anchor= StyleParam.AxisAnchorId.Y index, Domain= StyleParam.Range.MinMax xdomain),
385+ Axis.LinearAxis.init( Anchor= StyleParam.AxisAnchorId.X index, Domain= StyleParam.Range.MinMax ydomain),
386+ layout
387+ | None, Some y ->
388+ // remove y - axis
389+ DynObj.remove layout yName
390+ Axis.LinearAxis.init( Anchor= StyleParam.AxisAnchorId.Y index, Domain= StyleParam.Range.MinMax xdomain),
391+ y |> Axis.LinearAxis.style( Anchor= StyleParam.AxisAnchorId.X index, Domain= StyleParam.Range.MinMax ydomain),
392+ layout
393+ | None, None ->
394+ Axis.LinearAxis.init( Anchor= StyleParam.AxisAnchorId.Y index, Domain= StyleParam.Range.MinMax xdomain),
395+ Axis.LinearAxis.init( Anchor= StyleParam.AxisAnchorId.X index, Domain= StyleParam.Range.MinMax ydomain),
396+ layout
397+
398+ ch
399+ |> GenericChart.setLayout layout
400+ |> Chart.withAxisAnchor( X= index, Y= index)
401+ |> Chart.withX_ Axis( xaxis, index)
402+ |> Chart.withY_ Axis( yaxis, index)
371403 )
372404
373405 |> Chart.Combine
374406 )
375-
407+
408+ //static member Stack3D (?Columns:int, ?Space) =
409+ // (fun (charts:#seq<GenericChart>) ->
410+ // ()
411+ // )
376412
377413 /// Save chart as html single page
378414 static member SaveHtmlAs pathName ( ch : GenericChart ,? Verbose ) =
0 commit comments