Skip to content

Trees

Compare
Choose a tag to compare
@akevalion akevalion released this 07 Sep 15:58
· 1 commit to master since this release
16e2dc3

Updates

  • Readme file now contains information about the supported Pharo versions, currently from Pharo8 to Pharo 12.
  • new loading group: 'Full-DataFrame'
Metacello new
    baseline: 'Roassal3';
    repository: 'github://ObjectProfile/Roassal3';
    load: 'Full-DataFrame'
  • animations now react to the first time they are running
canvas newAnimation
   delay: 2 seconds;
   repeat;
   when: RSAnimationStartEvent do: [:evt | Transcript clear ] for: self;
   onStep: [:t | t traceCr ].

Now the start event is going to execute in each loop.

  • Update class comments
  • Move baseline settings into calypso settings.
  • RSLine objects can produce BlElements with lines
  • Produced bloc-visualizations now produces interactions similar to Roassal, you can drag, zoom in and zoom out and interact with the popup
  • Fix issue with wrap lines in RSMultilineLabelBuilder
  • RSViolinPlot now accepts categoryBy: with dataframe.
  • Added more examples for density plot
image
  • Horizontal Plots, each plot in Roassal responds to the message horizontal, that transforms the plot into an horizontal plot.
  • New class hierarchy for plots, RSAbstractBandPlot with subclasses: bar plot, violin plot and box plot
  • band plots can be used in cluster charts and in stacked charts.
  • Plots in roassal uses a masterShape to generate copies of that shape when they are going to produce big visualizations
  • Plots work with object models.
data := { 0@1 . 1@3 . 2@3 . 3@5 . 4@6 }.
plot := RSLinePlot new rawData: data x: #x y: #y.
  • Added animation inspector to move the animation with an slider
image

This inspector is useful if you use the transition value t because the slider recomputes it to update the animation

  • RTree for RSCanvas and RSComposite
canvas useRTree.
"canvas useList. is default"  

Roassal containers now uses a shape collection to search for events and know that shapes to draw in a visible rectangle. There are 2 types of shapes collections RSSequenceableCollection and RSRTreeShapeCollection.

Introducing the RSRTreeShapeCollection, or simply 'RTree' for friends, a fundamental data structure within Roassal. This data structure takes the form of a binary balanced tree, designed to maintain balance even as you add or remove shapes from it. The RTree, also known as the 'Rectangle tree,' is built upon the foundation of the RSRNode.

Each RSRNode can take one of two forms:

  1. Branch Node: These nodes serve as branches within the RTree and have children. They encapsulate a rectangle that contains both child nodes and do not hold a reference to a specific shape. Think of them as organizers, managing the spatial relationships between shapes.

  2. Leaf Node: In contrast to branch nodes, leaf nodes lack children but carry a reference to a specific shape. These nodes represent the end points of the RTree structure, associating a shape with a particular location in the tree.

Understanding these two node types and how they interact within the RTree is crucial for harnessing the power of this data structure in your Roassal visualizations.

In previous versions of Roassal, we relied on RSSequenceableCollection for various tasks. With the introduction of the new RTree, we've made significant enhancements to event searching and navigation within visualizations, especially when dealing with a large number of shapes. While rendering the entire visualization may still take some time, you should notice considerable improvements when visualizing specific portions of your data.

There you can see some benchmarks results

When we add shapes into the canvas

image

When we want to draw a frame of the visualization

image

When we move the mouse over the visualization

image
  • clipChildren for RSComposite now works with RTree and ignores events when is out of the composite bounding box.
  • Selection for Roassal
    RSSelectionInCanvasInteraction is present now with RSCanvasController.
    How to use it:
  1. shift+click and you can use an elastic box to select the current shapes.
  2. shift+click over a shape allows you to select/deselect only one shape.
  3. cmd + A or ctrl in windows, allows you to select all the shapes.
  4. Esc deselect all shapes.

You can access the selected shapes with:

canvas selectedShapes

Also you can put some interaction when the selection changes

canvas when: RSSelectionChangedEvent do: [:evt | evt selectedShapes traceCr ] for: self
  • Reworked search field for Roassal, now it opens a text field and it works with selection. Type some text then press enter, press esc to cancel the search field.
  • New visualization for RSEasingInterpolator.
  • Inspector of RSComposite now shows the children of the composite as a table.
  • RSElasticInterpolator now contains a custom presenter to modify the value of the visualization
  • RSPieSlice now produces a correct shadow when is selected
  • RSDraggableCanvasInteraction now includes limits.
  • RSOSMBuilder roassal now has integration with Open Street maps
image

That allows to users to put Roassal elements on top of a map that you can interact.
image