Class JPanelGeodesic

All Implemented Interfaces:
ActionListener, FocusListener, ItemListener, KeyListener, ImageObserver, MenuContainer, Serializable, EventListener, Accessible

public class JPanelGeodesic extends JPanelRendererJ3D

Title: JPanelGeodesic

Description: Geodesic drawing interface. Drawing the Geodesic curve on the surfaces. Depending on the type of surface displayed: either the SurfaceRender or the FlythruRenderer.

This file also includes the interface for cutting the mesh along the geodesic curve. The mesh can be cut along an open curve (which replaces the original mesh in the scene graph) or the mesh can be cut along a closed curve (which replaces the original mesh with two or more new meshes in the scene graph.

The interface for drawing geodesics with a "livewire" interface. When livewire mode is selected, by checking the "Livewire Mode" checkbox, then when the user selects points along the geodesic curve with the mouse, the Dijkstra's version of the geodesic is calculated and displayed as the mouse moves.

The user may display the geodesic in one of three ways: (1) the smoothed geodesic curve, which is based on a re-triangulation of the surface along Dijkstra's path and a smoothed version of Dijkstra's path. (2) Dijkstra's path along the original mesh vertices and triangle edges. (3) The straight-line distance between points -- Euclidian distance. Of the three display modes the Euclidian path is the only path *NOT* constrained to lie on the surface of the triangle mesh.

Distances for all three path types, for the total path lenths and the most recent point-pairs are displayed in the interface as well.

Author:
Alexandra Bokinsky, Ph.D.
See Also:
  • Field Details

    • serialVersionUID

      private static final long serialVersionUID
      Use serialVersionUID for interoperability.
      See Also:
    • drawLabel

      private JLabel drawLabel
      Geodesic line draw control label.
    • flythruGeodesic

      private Geodesic flythruGeodesic
      DOCUMENT ME!
    • flythruRender

      private FlythruRender flythruRender
      FlythruRender reference.
    • m_bPickSetFlyThru

      private boolean m_bPickSetFlyThru
      Initialzied to true when the the Geodesic.setPickCanvas funtion is called.
    • m_bPickSetSurface

      private boolean m_bPickSetSurface
      DOCUMENT ME!
    • m_fDijkstraCurrent

      private float m_fDijkstraCurrent
      DOCUMENT ME!
    • m_fDijkstraPrevious

      private float m_fDijkstraPrevious
      DOCUMENT ME!
    • m_fDijkstraTotal

      private float m_fDijkstraTotal
      DOCUMENT ME!
    • m_fEuclidianCurrent

      private float m_fEuclidianCurrent
      Values for the current path length between the last two selected points:
    • m_fEuclidianPrevious

      private float m_fEuclidianPrevious
      Values for the previous current path length between the last two selected points:
    • m_fEuclidianTotal

      private float m_fEuclidianTotal
      Values for the total path lengths:.
    • m_fGeodesicSmoothCurrent

      private float m_fGeodesicSmoothCurrent
      DOCUMENT ME!
    • m_fGeodesicSmoothPrevious

      private float m_fGeodesicSmoothPrevious
      DOCUMENT ME!
    • m_fGeodesicSmoothTotal

      private float m_fGeodesicSmoothTotal
      DOCUMENT ME!
    • m_kCheckLivewire

      private JCheckBox m_kCheckLivewire
      Toggle between LiveWire Interaction and point invalid input: '&' click interaction:.
    • m_kClearAllCutsButton

      private JButton m_kClearAllCutsButton
      DOCUMENT ME!
    • m_kClearAllGeodesicButton

      private JButton m_kClearAllGeodesicButton
      DOCUMENT ME!
    • m_kClearLastCutButton

      private JButton m_kClearLastCutButton
      DOCUMENT ME!
    • m_kClearLastGeodesicButton

      private JButton m_kClearLastGeodesicButton
      Button for deleting the geodesic.
    • m_kCutGeodesicButton

      private JButton m_kCutGeodesicButton
      Button for cutting the mesh along the geodesic:.
    • m_kDijkstraDistance

      private JLabel m_kDijkstraDistance
      DOCUMENT ME!
    • m_kDijkstraDistanceValueLast

      private JLabel m_kDijkstraDistanceValueLast
      DOCUMENT ME!
    • m_kDijkstraDistanceValueTotal

      private JLabel m_kDijkstraDistanceValueTotal
      DOCUMENT ME!
    • m_kDisplayButtonGroup

      private ButtonGroup m_kDisplayButtonGroup
      DOCUMENT ME!
    • m_kDisplayDijkstra

      private JRadioButton m_kDisplayDijkstra
      DOCUMENT ME!
    • m_kDisplayEuclidian

      private JRadioButton m_kDisplayEuclidian
      DOCUMENT ME!
    • m_kDisplayGeodesic

      private JRadioButton m_kDisplayGeodesic
      Radio buttons for displaying the smoothed geodesic, dijkstra's path, or the euclidian path:.
    • m_kDrawGeodesicButton

      private JToggleButton m_kDrawGeodesicButton
      Geodesic drawing interface Toggle button is down while points are added to the curve:.
    • m_kEuclidianDistance

      private JLabel m_kEuclidianDistance
      Labels to indicate the path length between the picked points, in Euclidian distance, geodesic smoothed distance, and Dijkstra's path mesh distance. Two labels each, one for the distances between the last two points picked, and one for the total length of the curve, from starting point to end point:
    • m_kEuclidianDistanceValueLast

      private JLabel m_kEuclidianDistanceValueLast
      DOCUMENT ME!
    • m_kEuclidianDistanceValueTotal

      private JLabel m_kEuclidianDistanceValueTotal
      DOCUMENT ME!
    • m_kFinishClosedGeodesicButton

      private JButton m_kFinishClosedGeodesicButton
      DOCUMENT ME!
    • m_kFinishOpenGeodesicButton

      private JButton m_kFinishOpenGeodesicButton
      DOCUMENT ME!
    • m_kGeodesicSmoothDistance

      private JLabel m_kGeodesicSmoothDistance
      DOCUMENT ME!
    • m_kGeodesicSmoothDistanceValueLast

      private JLabel m_kGeodesicSmoothDistanceValueLast
      DOCUMENT ME!
    • m_kGeodesicSmoothDistanceValueTotal

      private JLabel m_kGeodesicSmoothDistanceValueTotal
      DOCUMENT ME!
    • m_kGeodesicToggleWireframe

      private JToggleButton m_kGeodesicToggleWireframe
      DOCUMENT ME!
    • mainPanel

      private JPanel mainPanel
      the main control panel.
    • scroller

      private JScrollPane scroller
      The scroll pane holding the panel content. Useful when the screen is small.
    • scrollPanel

      private JPanelGeodesic.DrawingPanel scrollPanel
      Scroll panel that holding the all the control components.
    • surfaceGeodesic

      private Geodesic surfaceGeodesic
      Geodesic reference.
    • surPickLabel

      private JLabel surPickLabel
      Label to indicate that enable Surface pickable before drawing geodesic line.
    • surRender

      private SurfaceRender surRender
      SurfaceRender reference.
  • Constructor Details

    • JPanelGeodesic

      public JPanelGeodesic(RenderViewBase parent)
      Contructor to initialize the geodesic control panel and create geodesic image scene graph.
      Parameters:
      parent - RenderViewBase
  • Method Details

    • actionPerformed

      public void actionPerformed(ActionEvent e)
      Command processor to handle the geodesic button events.
      Specified by:
      actionPerformed in interface ActionListener
      Specified by:
      actionPerformed in class JPanelRendererBase
      Parameters:
      e - ActionEvent
    • addMesh

      public void addMesh(ModelTriangleMesh kOld, ModelTriangleMesh kNew, String kName)
      Add new mesh to the volume rendering.
      Parameters:
      kOld - ModelTriangleMesh old surface mesh
      kNew - ModelTriangleMesh new surface mesh
      kName - String name
    • clearGeodesic

      public void clearGeodesic(boolean bAll)
      clearGeodesic: called when the "Clear Geodesic" Button is pressed.
      Parameters:
      bAll - when true deletes all geodesic curves drawn on the surfaces, when false, deletes the last point drawn
    • disposeLocal

      public void disposeLocal(boolean flag)
      Sets all variables to null, disposes, and garbage collects.
      Parameters:
      flag - dispose super or not, not used now.
    • drawGeodesic

      public void drawGeodesic()
      Enables picking points and drawing the Geodesic curve on the surfaces. Depending on the type of surface displayed: either the SurfaceRender or the FlythruRenderer.

      For the Geodesic object to perform picking and drawing the pickCanvas, GeodesicGroup, and triangle mesh (Surface) objects must be defined, either through the constructor, or as shown here, by the individual access functions.

    • enableClearLast

      public void enableClearLast(boolean bEnable)
      When a new line segment is added to the geodesic curve, the Geodesic object enables removing the last point added.
      Parameters:
      bEnable - enable the remove button or not.
    • enableClearLastCut

      public void enableClearLastCut(boolean bEnable)
      When a new line segment is added to the geodesic curve, the Geodesic object enables removing the last point added.
      Parameters:
      bEnable - enable the last cut button or not.
    • enableCut

      public void enableCut(boolean bEnable)
      The Geodesic object enables cutting the mesh when the line segments are finished, either finished open or finished closed.
      Parameters:
      bEnable - enable the last button or not.
    • finishGeodesic

      public void finishGeodesic(boolean bOpen)
      finishGeodesic, called when the "Finish Closed" or "Finish Open" buttons are pressed, finish the current geodesic polyline.
      Parameters:
      bOpen - bOpen when true leaves the curve open, if false, then closes the curve by connecting the last and first points.
    • getMainPanel

      public JPanel getMainPanel()
      Get the main control panel.
      Specified by:
      getMainPanel in class JPanelRendererBase
      Returns:
      mainPanel main control panel
    • init

      public void init()
      Initilize the mainPanel with the geodesic drawing buttons.
    • isGeodesicEnable

      public boolean isGeodesicEnable()
      Check whether the Geodesic drawing is enabled or not.
      Returns:
      boolean true Geodesic drawing enabled, false Geodesic disable.
    • replaceMesh

      public void replaceMesh(ModelTriangleMesh kOld, ModelTriangleMesh kNew)
      When the Geodesic object cuts the mesh along an open curve, the old mesh changes, but does not need to be deleted and no new mesh needs to be added. This function allows the Geodesic object to replace the original mesh with the sliced mesh in the surface renderer. ReplaceMesh is also used to undo cutting operations.
      Parameters:
      kOld - ModelTriangleMesh old surface mesh
      kNew - ModelTriangleMesh new surface mesh
    • resizePanel

      public void resizePanel(int panelWidth, int frameHeight)
      Resizig the control panel with ViewJFrameVolumeView's frame width and height.
      Overrides:
      resizePanel in class JPanelRendererBase
      Parameters:
      panelWidth - int width
      frameHeight - int height
    • setDijkstra

      public void setDijkstra(float fValue)
      Displays the Geodesic (dijkstra's along the mesh) distance between the last two points picked in the Geodesic class, as well as the running total for the current curve.
      Parameters:
      fValue - dijkstra's current value.
    • setEnabled

      public void setEnabled(boolean flag)
      Since geodesic line only apply to the texture render surface, all the buttons are enabled only if the suface vector size is greater than 0. The method is called from the surfacePanel when add or remove surfaces.
      Overrides:
      setEnabled in class JComponent
      Parameters:
      flag - boolean
    • setEuclidian

      public void setEuclidian(float fValue)
      Displays the Euclidian distance between the last two points picked in the Geodesic class, as well as the running total for the current curve.
      Parameters:
      fValue - current Eclidian value.
    • setFlythruRender

      public void setFlythruRender(FlythruRender _flythruRender)
      Set the flythru render reference.
      Parameters:
      _flythruRender - FlythruRender
    • setGeodesicSmooth

      public void setGeodesicSmooth(float fValue)
      Displays the Geodesic (smoothed) distance between the last two points picked in the Geodesic class, as well as the running total for the current curve.
      Parameters:
      fValue - the current geodesic smooth value.
    • toggleLivewire

      public void toggleLivewire()
      Toggles between live wire mode and point and click mode for drawing geodesics on the surfaces. When live wire is active, then the use clicks to add the first point in a curve and then moves the mouse to see Dijkstra's path drawn between that point and the Mesh vertex that is nearest the mouse. When the user clicks again the point is drawn, and the displaay is between the last point clicked and the current mouse point.
    • togglePathDisplay

      public void togglePathDisplay(int which)
      Causes the Geodesic class to switch between displaying the Smoothed Geodesic, Dijkst'ra path along the mesh, or the straight-line Euclidian path between the selected endpoints. Both the Geodesic and Dijkstr'a paths are constrained to lie on the surface of the mesh, whereas the straight-line distance may penetrate the mesh or be through space.
      Parameters:
      which - path index.
    • toggleWireframe

      public void toggleWireframe()
      Toggles between wireframe and filled polygon drawing for the surfaces. Useful for testing the Geodesic curves:
    • finalize

      protected void finalize() throws Throwable
      Calls disposeLocal.
      Overrides:
      finalize in class JPanelRendererBase
      Throws:
      Throwable - DOCUMENT ME!
    • clearAllCuts

      private void clearAllCuts()
      Undoes all cuts and replaces the cut mesh with the original mesh.
    • clearLastCut

      private void clearLastCut()
      Undoes the last cut operation.
    • cutGeodesic

      private void cutGeodesic()
      Calls the Geodesic cut function to cut the triangle mesh along the geodesic curves.