Class Sculptor_WM
- java.lang.Object
- 
- gov.nih.mipav.view.renderer.WildMagic.Render.Sculptor_WM
 
- 
- All Implemented Interfaces:
- java.awt.event.MouseListener,- java.awt.event.MouseMotionListener,- java.util.EventListener
 
 public class Sculptor_WM extends java.lang.Object implements java.awt.event.MouseMotionListener, java.awt.event.MouseListenerVolume Sculpturing allows the user to draw a region on the screen in the volume render view, and to remove the parts of the volume covered by that region. The user outlines a region by holding the left mouse button down and drawing directly on the screen.The user draws an outline on the screen, and defines the cut-away or sculpture region. If the user chooses to apply the sculpture region to the volume, the voxels defined by an extruded volume of the cut-away region are removed. This is done by projecting the voxels in the volume into screen space and determining which voxels fall inside the sculpture region. Voxels that are inside the sculpture region are set to the minimum voxel value, which is rendered as transparent. The user may also undo volume sculpturing, returning the volume data to its original values. Drawing the Sculpt Region on the Screen The VolumeSculptor class implements both MouseListener and MouseMotionListener interfaces. Drawing is done through the mousePressed, mouseReleased, and mouseDragged functions. When sculpting is enabled, the viewing transformations (rotation, scale, translation) are disabled, so the left mouse button can be used for drawing on the screen instead of rotating the volume. Second, the view canvas is captured and stored. When the left mouse button is pressed, the VolumeSculptor class captures and stores all subsequent mouse positions, and draws them directly into the canvas image, connecting the mouse positions by drawing 2D lines on the image. On a mouseReleased event the outline is closed by connecting the first and last recorded mouse positions and the outline region is filled in. The line drawing and polygon filling functions are implemented as 2D scan-conversion algorithms and are drawn directly by the VolumeSculptor onto the canvas image. This implementation allows concave and self-intersecting outlines. Multiple outlines may be drawn on the canvas image before applying the sculpt regions to the volume. Because the sculpt regions are in image space, to apply the sculpt region to the volume, it is simply necessary to project the volume voxels onto the canvas image. Voxels that project onto blue pixels in the canvas image are removed, and voxels that project to non-masked pixels are unaltered. - Author:
- Alexandra Bokinsky, Ph.D. Under contract from GeometricTools, Inc.
 
- 
- 
Field SummaryFields Modifier and Type Field Description private intdrawShapeShape of the drawing rectangle.static intLINESFree-hand sculptingprotected int[]m_aiColorSculptThe sculpt region color.protected int[]m_aiXPointsMouse positions in x,y for drawing the sculpt region:.protected int[]m_aiYPointsMouse positions in x,y for drawing the sculpt region:.protected byte[]m_aucSavedImageBackup imageprotected byte[]m_aucSculptImagem_kSculptImage is a screen shot of the canvas image.private byte[]m_aucTextureImageDataATexture data for ModelImage A in byteprivate byte[]m_aucTextureImageDataBTexture data for ModelImage B in byteprotected booleanm_bMousePressedm_bMousePressed is set to true when the mousePressed callback is activated and the left mouse button is down.protected booleanm_bSculptDrawnTrue when a sculpt region has been drawn.protected booleanm_bSculptEnabledm_bSculptEnabled is turned on when the user presses the "Draw Sculpt Outline" button.protected intm_iFirstXFirst x mouse positionprotected intm_iFirstYFirst y mouse positionprotected intm_iLastXLast x mouse positionprotected intm_iLastYLast y mouse positionprotected intm_iNumberPointsNumber of points in the free-hand line.protected intm_iPreviousXPrevious and first mouse positions:.protected intm_iPreviousYPrevious and first mouse positions:.protected intm_iSculptImageHeightsculpt image heightprotected intm_iSculptImageWidthsculpt image widthprotected intm_iXMaxThe min and max x,y mouse valuesprotected intm_iXMinThe min and max x,y mouse valuesprotected intm_iYMaxThe min and max x,y mouse valuesprotected intm_iYMinThe min and max x,y mouse valuesprotected com.jogamp.opengl.awt.GLCanvasm_kCanvasCanvas reference for drawing :.private ModelImagem_kImageAModelImage Aprivate ModelImagem_kImageBModelImage Bprivate ModelImagem_kImageBackupABackup of ModelImage Aprivate ModelImagem_kImageBackupBBackup of ModelImage Bprivate WildMagic.LibFoundation.Mathematics.Matrix4fm_kWVPMatrixWorld-view-project matrix for applying the sculpt to the volume.static intRECTANGLErectangle sculpt
 - 
Constructor SummaryConstructors Constructor Description Sculptor_WM(com.jogamp.opengl.awt.GLCanvas kCanvas)Constructor.
 - 
Method SummaryAll Methods Instance Methods Concrete Methods Modifier and Type Method Description booleanapplySculpt(int iTSlice)Apply the sculpt region to the volume data.private voidbackupData(ModelImage kImage, ModelImage kImageBackup, int iDataIndex)Backup ModelImage data.private voidbackupSculptImage()Backup the sculpt image.voidclearSculpt()Clears the sculpt image.voiddisposeLocal()Memory cleanup.protected voiddrawRectangleArea()Draw rectangle shape object.voidenableSculpt(boolean bEnabled)Turn sculpt drawing on/off.protected voidfill(int[][] aaiCrossingPoints, int[] aiNumCrossings)fill: fill the sculpt outline drawn by the user.booleangetEnable()Return the sculpt enabled status.private booleangetSculpt(int iX, int iY)Get the sculpt on/off at the position.byte[]getSculptImage()Return sculpt image for display.voidinitVolumeSculptor()Initialize the Mouse listener.voidinvertSculpt()Inverts the sculpt image.private voidinvertSculpt(int iX, int iY, int[] aiColors)Invert the sculpt image at the positionbooleanIsSculptDrawn()Return true if the sculpt image has been drawn.protected voidline(int iX0, int iY0, int iX1, int iY1, int[] aiColors)This function draws a 2D line on the canvas image -- on top of the currently rendered image.voidmouseClicked(java.awt.event.MouseEvent kEvent)voidmouseDragged(java.awt.event.MouseEvent kEvent)Invoked when the mouse is dragged while a button is held down.voidmouseEntered(java.awt.event.MouseEvent kEvent)voidmouseExited(java.awt.event.MouseEvent kEvent)Invoked when the mouse leaves a component.voidmouseMoved(java.awt.event.MouseEvent kEvent)voidmousePressed(java.awt.event.MouseEvent kEvent)Invoked when a mouse button is pressed.voidmouseReleased(java.awt.event.MouseEvent kEvent)Invoked when a mouse button is released.protected voidoutlineRegion(int[][] aaiCrossingPoints, int[] aiNumCrossings)This function computes the set of spans indicated by column crossings for the sculpt outline drawn by the user, by doing a polygon scan conversion in gridded space.protected voidprocessMouseReleased(int iX, int iY)Called when the left mouse button is released, indicating that the sculpt outline is complete, or when the outline is being drawn and the mouse is dragged outside the canvas area.booleansave(FileWriteOptions options, int filterType)Creates save dialog so that the image can be saved // This should be moved to imageModel.save();private voidsculptData(ModelImage kImage, int iDataIndex, int iTextureIndex, byte[] aucTextureImageData)Sculpt the ModelImage and Textures at the index.voidsetDrawingShape(int shape)Set the shape of the drawing sculptor.voidsetImage(ModelImage kImageA, ModelImage kImageB)Set the ModelImage dataprivate voidsetSculpt(int iX, int iY, int[] aiColors)Set the sculpt imagevoidsetSculptDrawn(boolean value)voidsetSculptImage(byte[] abImage)voidsetTextureImageDataA(byte[] data)Set the texture data byte[] for ModelImage AvoidsetTextureImageDataB(byte[] data)Set the texture data byte[] for ModelImage BvoidsetWVPMatrix(WildMagic.LibFoundation.Mathematics.Matrix4f kMatrix)Set the World-view-projection matrix from the renderer.protected voidsortCrossingPoints(int[] aiList, int iNumElements)Sorts the edge crossing points in place.voidundoSculpt(int iTSlice)Undo the sculpt.
 
- 
- 
- 
Field Detail- 
LINESpublic static int LINES Free-hand sculpting
 - 
RECTANGLEpublic static int RECTANGLE rectangle sculpt
 - 
m_aiXPointsprotected int[] m_aiXPoints Mouse positions in x,y for drawing the sculpt region:.
 - 
m_aiYPointsprotected int[] m_aiYPoints Mouse positions in x,y for drawing the sculpt region:.
 - 
m_bMousePressedprotected boolean m_bMousePressed m_bMousePressed is set to true when the mousePressed callback is activated and the left mouse button is down.
 - 
m_bSculptDrawnprotected boolean m_bSculptDrawn True when a sculpt region has been drawn.
 - 
m_bSculptEnabledprotected boolean m_bSculptEnabled m_bSculptEnabled is turned on when the user presses the "Draw Sculpt Outline" button.
 - 
m_aiColorSculptprotected int[] m_aiColorSculpt The sculpt region color.
 - 
m_iFirstXprotected int m_iFirstX First x mouse position
 - 
m_iFirstYprotected int m_iFirstY First y mouse position
 - 
m_iLastXprotected int m_iLastX Last x mouse position
 - 
m_iLastYprotected int m_iLastY Last y mouse position
 - 
m_iNumberPointsprotected int m_iNumberPoints Number of points in the free-hand line.
 - 
m_iPreviousXprotected int m_iPreviousX Previous and first mouse positions:.
 - 
m_iPreviousYprotected int m_iPreviousY Previous and first mouse positions:.
 - 
m_iSculptImageHeightprotected int m_iSculptImageHeight sculpt image height
 - 
m_iSculptImageWidthprotected int m_iSculptImageWidth sculpt image width
 - 
m_iXMaxprotected int m_iXMax The min and max x,y mouse values
 - 
m_iXMinprotected int m_iXMin The min and max x,y mouse values
 - 
m_iYMaxprotected int m_iYMax The min and max x,y mouse values
 - 
m_iYMinprotected int m_iYMin The min and max x,y mouse values
 - 
m_kCanvasprotected com.jogamp.opengl.awt.GLCanvas m_kCanvas Canvas reference for drawing :.
 - 
m_aucSavedImageprotected byte[] m_aucSavedImage Backup image
 - 
m_aucSculptImageprotected byte[] m_aucSculptImage m_kSculptImage is a screen shot of the canvas image. The sculpt region is drawn directly into m_kSculptImage. The outline is filled by alpha-blending the Sculpt region color with the m_kSculptImage backgound image.
 - 
drawShapeprivate int drawShape Shape of the drawing rectangle.
 - 
m_kImageAprivate ModelImage m_kImageA ModelImage A
 - 
m_kImageBackupAprivate ModelImage m_kImageBackupA Backup of ModelImage A
 - 
m_kImageBprivate ModelImage m_kImageB ModelImage B
 - 
m_kImageBackupBprivate ModelImage m_kImageBackupB Backup of ModelImage B
 - 
m_kWVPMatrixprivate WildMagic.LibFoundation.Mathematics.Matrix4f m_kWVPMatrix World-view-project matrix for applying the sculpt to the volume.
 - 
m_aucTextureImageDataAprivate byte[] m_aucTextureImageDataA Texture data for ModelImage A in byte
 - 
m_aucTextureImageDataBprivate byte[] m_aucTextureImageDataB Texture data for ModelImage B in byte
 
- 
 - 
Method Detail- 
applySculptpublic boolean applySculpt(int iTSlice) Apply the sculpt region to the volume data.- Returns:
- true if the volume has changed, false indicates no change.
 
 - 
clearSculptpublic void clearSculpt() Clears the sculpt image.
 - 
disposeLocalpublic void disposeLocal() Memory cleanup.
 - 
enableSculptpublic void enableSculpt(boolean bEnabled) Turn sculpt drawing on/off.- Parameters:
- bEnabled- turns sculpting on/off.
 
 - 
getEnablepublic boolean getEnable() Return the sculpt enabled status.- Returns:
- sculpt enabled status.
 
 - 
getSculptImagepublic byte[] getSculptImage() Return sculpt image for display.- Returns:
- byte[] containing the sculpt image.
 
 - 
initVolumeSculptorpublic void initVolumeSculptor() Initialize the Mouse listener. Note - this function should be called once per instance only, as it sets up the MouseMotionListener and MouseListener.
 - 
invertSculptpublic void invertSculpt() Inverts the sculpt image.
 - 
IsSculptDrawnpublic boolean IsSculptDrawn() Return true if the sculpt image has been drawn.- Returns:
- true if the sculpt image has been drawn.
 
 - 
mouseClickedpublic void mouseClicked(java.awt.event.MouseEvent kEvent) - Specified by:
- mouseClickedin interface- java.awt.event.MouseListener
 
 - 
mouseDraggedpublic void mouseDragged(java.awt.event.MouseEvent kEvent) Invoked when the mouse is dragged while a button is held down. If this occurs while sculpting is enabled, then the mouse positions are stored and the sculpt outline is drawn on the canvas, using the previously recorded mouse position and the current mouse position as the start and end points of a 2D line on the canvas.- Specified by:
- mouseDraggedin interface- java.awt.event.MouseMotionListener
- Parameters:
- kEvent- the mouse event generated by a mouse drag
 
 - 
mouseEnteredpublic void mouseEntered(java.awt.event.MouseEvent kEvent) - Specified by:
- mouseEnteredin interface- java.awt.event.MouseListener
 
 - 
mouseExitedpublic void mouseExited(java.awt.event.MouseEvent kEvent) Invoked when the mouse leaves a component. This function captures the mouseExited event when the button is pressed and the sculpt outline is being drawn, so that the outline is contained within the bounds of the canvas.- Specified by:
- mouseExitedin interface- java.awt.event.MouseListener
- Parameters:
- kEvent- the mouse event generated by a mouse exit
 
 - 
mouseMovedpublic void mouseMoved(java.awt.event.MouseEvent kEvent) - Specified by:
- mouseMovedin interface- java.awt.event.MouseMotionListener
 
 - 
mousePressedpublic void mousePressed(java.awt.event.MouseEvent kEvent) Invoked when a mouse button is pressed. When the left mouse button is pressed, and sculpting is enabled, then the user is beginning to outline the sculpt region. This function initializes the outline drawing, and stores the first point(x,y) so the outline can be closed on mouseReleased. The first and following mouse positions are drawn in outline form using current and previously (last recorded) positions as the start and end points of a 2D line on the canvas.- Specified by:
- mousePressedin interface- java.awt.event.MouseListener
- Parameters:
- kEvent- the mouse event generated by a mouse press
 
 - 
mouseReleasedpublic void mouseReleased(java.awt.event.MouseEvent kEvent) Invoked when a mouse button is released. If this happens while drawing the sculpt outline, the mouse release indicates that the outline is complete. The function closes the outline by connecting the first and last points, and then calls processMouseReleased(), which fills the outline.- Specified by:
- mouseReleasedin interface- java.awt.event.MouseListener
- Parameters:
- kEvent- the mouse event generated by a mouse release
 
 - 
savepublic boolean save(FileWriteOptions options, int filterType) Creates save dialog so that the image can be saved // This should be moved to imageModel.save();- Parameters:
- options- File-write options.
- filterType- only used if >= 0
- Returns:
- true on successful write, false otherwise.
 
 - 
setDrawingShapepublic void setDrawingShape(int shape) Set the shape of the drawing sculptor.- Parameters:
- shape- 0 for LINES, 1 for RECTANGLE
 
 - 
setImagepublic void setImage(ModelImage kImageA, ModelImage kImageB) Set the ModelImage data- Parameters:
- kImageA- ModelImage A
- kImageB- ModelImage B (or null)
 
 - 
setSculptDrawnpublic void setSculptDrawn(boolean value) 
 - 
setSculptImagepublic void setSculptImage(byte[] abImage) 
 - 
setTextureImageDataApublic void setTextureImageDataA(byte[] data) Set the texture data byte[] for ModelImage A- Parameters:
- data- the texture data byte[] for ModelImage A
 
 - 
setTextureImageDataBpublic void setTextureImageDataB(byte[] data) Set the texture data byte[] for ModelImage B- Parameters:
- data- the texture data byte[] for ModelImage B
 
 - 
setWVPMatrixpublic void setWVPMatrix(WildMagic.LibFoundation.Mathematics.Matrix4f kMatrix) Set the World-view-projection matrix from the renderer. Used to apply the sculpt image to the volume data.- Parameters:
- kMatrix- World-view-projection matrix
 
 - 
undoSculptpublic void undoSculpt(int iTSlice) Undo the sculpt.
 - 
backupDataprivate void backupData(ModelImage kImage, ModelImage kImageBackup, int iDataIndex) Backup ModelImage data.- Parameters:
- kImage- original ModelImage
- kImageBackup- backup of ModelImage
- iDataIndex- index of the position in the ModelImage to backup
 
 - 
backupSculptImageprivate void backupSculptImage() Backup the sculpt image.
 - 
getSculptprivate boolean getSculpt(int iX, int iY)Get the sculpt on/off at the position.- Parameters:
- iX- x-position
- iY- y-position
- Returns:
- true if the position should be sculpted, false otherwise.
 
 - 
invertSculptprivate void invertSculpt(int iX, int iY, int[] aiColors)Invert the sculpt image at the position- Parameters:
- iX- x-position
- iY- y-position
- aiColors- sculpt color.
 
 - 
sculptDataprivate void sculptData(ModelImage kImage, int iDataIndex, int iTextureIndex, byte[] aucTextureImageData) Sculpt the ModelImage and Textures at the index.- Parameters:
- kImage- ModelImage
- iDataIndex- index to sculpt
- aucTextureImageData- byte[] Texture
- afTextureImageData- float[] Texture
 
 - 
setSculptprivate void setSculpt(int iX, int iY, int[] aiColors)Set the sculpt image- Parameters:
- iX- x-position
- iY- y-position
- aiColors- sculpt color
 
 - 
drawRectangleAreaprotected void drawRectangleArea() Draw rectangle shape object.
 - 
fillprotected void fill(int[][] aaiCrossingPoints, int[] aiNumCrossings)fill: fill the sculpt outline drawn by the user. Pixels are determined to be inside or outside the sculpt region based on the parameters, aaiCrossingPoints and aiNumCrossings, using a scan-conversion algorithm that traverses each row and column of the bounding box of the sculpt region coloring inside points as it goes.- Parameters:
- aaiCrossingPoints- DOCUMENT ME!
- aiNumCrossings- DOCUMENT ME!
 
 - 
lineprotected void line(int iX0, int iY0, int iX1, int iY1, int[] aiColors)This function draws a 2D line on the canvas image -- on top of the currently rendered image. To implement the line drawing I use the midpoint line algorithm, in Foley and van Dam, originally Bresenham's algorithm. The first part of the function sets up the step sizes for x and y depending on what type of line is being drawn. The second part loops over the line, drawing pixels into the canvas image.- Parameters:
- iX0- mouse x0
- iY0- mouse y0
- iX1- mouse x1
- iY1- mouse y1
- aiColors- line color.
 
 - 
outlineRegionprotected void outlineRegion(int[][] aaiCrossingPoints, int[] aiNumCrossings)This function computes the set of spans indicated by column crossings for the sculpt outline drawn by the user, by doing a polygon scan conversion in gridded space. The outline must be closed with last point = first point.- Parameters:
- aaiCrossingPoints- DOCUMENT ME!
- aiNumCrossings- DOCUMENT ME!
 
 - 
processMouseReleasedprotected void processMouseReleased(int iX, int iY)Called when the left mouse button is released, indicating that the sculpt outline is complete, or when the outline is being drawn and the mouse is dragged outside the canvas area. The function closes the outline, using the first and last recorded mouse positions. It then fills the outline, by blending the fill color with the background data on the canvas. Filling is done as a 2D polygon scan conversion so that any closed loop, including concave and self-intersecting loops, can be processed accurately.- Parameters:
- iX- int, the x position of the mouse recorded when the mouse button was released.
- iY- int, the y position of the mouse recorded when the mouse button was released.
 
 - 
sortCrossingPointsprotected void sortCrossingPoints(int[] aiList, int iNumElements)Sorts the edge crossing points in place.- Parameters:
- aiList- list of positions
- iNumElements- number of positions.
 
 
- 
 
-