Module imp3d

Class SceneTree

java.lang.Object
de.grogra.imp3d.objects.SceneTree
All Implemented Interfaces:
Visitor, TreeModel
Direct Known Subclasses:
SceneTreeWithShader

public abstract class SceneTree extends Object implements Visitor, TreeModel
A SceneTree is a simplified image of a Graph designed for usage in the context of 3D analysis (e.g., export). The nodes of such a tree are created by invocation of createTree(boolean), this in turn uses the factory methods createInnerNode() and createLeaf(Object, boolean, long).
Author:
Ole Kniemeyer
  • Field Details

  • Constructor Details

    • SceneTree

      public SceneTree(GraphState gs, EdgePattern pattern)
      Creates a new scene tree instance. The nodes are not created by the constructor, this is done in createTree(boolean).
      Parameters:
      gs - the graph state to use for attribute queries
      pattern - the pattern which defines which edges span the tree as subgraph of the complete graph
    • SceneTree

      public SceneTree(View3D view)
      Creates a new scene tree instance. This delegates to SceneTree(GraphState, EdgePattern), where the parameters are obtained from the view.
      Parameters:
      view - view for which the new scene tree is configured
  • Method Details

    • getGraphState

      public GraphState getGraphState()
      Description copied from interface: Visitor
      Returns the graph state within which the visitor is operating.
      Specified by:
      getGraphState in interface Visitor
      Returns:
      graph state of visitor
    • init

      protected void init(SceneTree.Leaf leaf)
      This method has to be invoked whenever a new SceneTree.Leaf is created as a leaf of this tree. The tree may perform some initialization tasks on the leaf.
      Parameters:
      leaf - a newly created Leaf to be initialized
    • createTree

      public SceneTree.Node createTree(boolean simplify)
    • createTree

      public SceneTree.Node createTree(boolean simplify, boolean checkLayer)
      This method creates the nodes of this tree by traversing the original graph using the edge pattern which has been specified in the constructor. It collects all objects of the original graph as leaves for which the method acceptLeaf(Object, boolean) returns true. The leaves are inserted into a hierarchy of SceneTree.InnerNodes corresponding to the hierarchy of the original graph.
      Parameters:
      simplify - simplify structure (may destroy hierarchy)?
      Returns:
      root node of the created tree
      See Also:
    • getRoot

      public Object getRoot()
      Specified by:
      getRoot in interface TreeModel
    • visitEnter

      public Object visitEnter(Path path, boolean node)
      Description copied from interface: Visitor
      Informs this visitor about a node or edge in the graph. path contains the path from the root up to and including the node or, in case an edge is visited, the edge and its terminal node. Later on, Visitor.visitLeave(java.lang.Object, de.grogra.graph.Path, boolean) will be invoked with the returned value of this invocation, path and node as arguments. If this method returns Visitor.STOP, the corresponding visitLeave-method will be invoked immediately after this method, i.e., the visitor does not dive more deeply in the hierarchy. Otherwise, if a node is visited and there are instantiations associated with or edges connected with it (regardless of their direction), their corresponding visitor methods will be invoked inbetween. Likewise, if an edge is visited, its indicent terminal node will be visited next.
      Specified by:
      visitEnter in interface Visitor
      Parameters:
      path - current path
      node - do we enter a node or an edge?
      Returns:
      value to pass to visitLeave, may be Visitor.STOP
    • visitLeave

      public boolean visitLeave(Object o, Path path, boolean node)
      Description copied from interface: Visitor
      Informs this visitor that a node or an edge has been processed completely. The value o is the return value of the corresponding invocation of Visitor.visitEnter(de.grogra.graph.Path, boolean). In case of a node and if this invocation returns false, no further edges of the current level of hierarchy will be passed to this visitor, i.e., the visitLeave methods for the enclosing edge and node will be invoked immediately. Likewise, in case of an edge and a return value false, no further instantiations or edges of the current level of hierarchy will be passed to this visitor, i.e., the visitLeave method for the enclosing node will be invoked immediately.
      Specified by:
      visitLeave in interface Visitor
      Parameters:
      o - returned value of visitEnter
      path - current path to node
      node - do we leave a node or an edge?
      Returns:
      true iff processing of current level shall be continued
    • visitInstanceEnter

      public Object visitInstanceEnter()
      Description copied from interface: Visitor
      Informs this visitor about the beginning of an instantiation. This method invokation is nested immediately within visitEnter/visitLeave of a node. Later on, Visitor.visitInstanceLeave(Object) will be invoked with the returned value of this invocation as argument. If this method returns Visitor.STOP, the visitInstanceLeave-method will be invoked immediately after this method, i.e., the visitor does not dive into the instantiation. Otherwise, the instantiation is performed, starting with an edge.
      Specified by:
      visitInstanceEnter in interface Visitor
      Returns:
      value to pass to visitInstanceLeave, may be Visitor.STOP
    • visitInstanceLeave

      public boolean visitInstanceLeave(Object o)
      Description copied from interface: Visitor
      Informs this visitor that an instantiation has been processed completely. The value o is the return value of the corresponding invocation of Visitor.visitInstanceEnter(). If this invocation returns false, no further instantiations or edges of the current level of hierarchy will be passed to this visitor, i.e., the visitLeave method for the enclosing node will be invoked immediately.
      Specified by:
      visitInstanceLeave in interface Visitor
      Parameters:
      o - returned value of visitInstanceEnter
      Returns:
      true iff processing of current level shall be continued
    • accept

      public void accept(SceneTree.Visitor visitor)
      This method is invoked if one wants to inform the visitor of the complete set of nodes of this tree.
      Parameters:
      visitor - a visitor to visit the nodes of this tree
    • isLeaf

      public boolean isLeaf(Object node)
      Specified by:
      isLeaf in interface TreeModel
    • getChild

      public Object getChild(Object parent, int index)
      Specified by:
      getChild in interface TreeModel
    • getChildCount

      public int getChildCount(Object parent)
      Specified by:
      getChildCount in interface TreeModel
    • getIndexOfChild

      public int getIndexOfChild(Object parent, Object child)
      Specified by:
      getIndexOfChild in interface TreeModel
    • valueForPathChanged

      public void valueForPathChanged(TreePath path, Object newValue)
      Specified by:
      valueForPathChanged in interface TreeModel
    • addTreeModelListener

      public void addTreeModelListener(TreeModelListener l)
      Specified by:
      addTreeModelListener in interface TreeModel
    • removeTreeModelListener

      public void removeTreeModelListener(TreeModelListener l)
      Specified by:
      removeTreeModelListener in interface TreeModel
    • createInnerNode

      protected SceneTree.InnerNode createInnerNode()
      This factory method is used by createTree(boolean) to create an inner node.
      Returns:
      newly created inner node
    • acceptLeaf

      protected abstract boolean acceptLeaf(Object object, boolean asNode)
      This method defines for which objects of the graph a SceneTree.Leaf node shall be created.
      Parameters:
      object - an object of the graph
      asNode - is object a node or an edge?
      Returns:
      true iff a leaf shall be created for the object
    • createLeaf

      protected abstract SceneTree.Leaf createLeaf(Object object, boolean asNode, long id)
      This factory method is used by createTree(boolean) to create a leaf. Note that the implementation has to invoke init(Leaf) on the created leaf.
      Parameters:
      object - object of leaf
      asNode - represents leaf a node or an edge?
      id - id to pass to the leaf constructor
      Returns:
      newly create leaf