Plug-in CT MD.java
From MIPAV
PlugInCT_MD.java 1 import plugins.PlugInDialogCT_MT; //associated class file 2 import gov.nih.mipav.plugins.*; //needed to load PlugInAlgorithm / PlugInView / 3 //PlugInFile interface 4 import gov.nih.mipav.view.*; 5 import gov.nih.mipav.model.structures.*; 6 7 import java.awt.*; 8 9 /** 10 * This is a simple plugin for the University of Maryland to simple segment an 11 * imagebased on CT Hounsfield units. 12 * 13 * @see PlugInAlgorithm 14 */ 15 16 //This is an Algorithm type of PlugIn, and therefore must implement PlugInAlgorithm 17 //Implementing the PlugInAlgorithm requires this class to implement the run method 18 //with the correct parameters 19 public class PlugInCT_MD implements PlugInAlgorithm { 20 21 /** 22 * Defines body of run method, which was declared in the interface. 23 * @param UI User Interface 24 * @param parentFrame ParentFrame 25 * @param image Current ModelImage--this is an image already loaded into 26 * MIPAV. Can be null. 27 */ 28 public void run (ViewUserInterface UI, Frame parentFrame, ModelImage image){ 29 30 if (parentFrame instanceof ViewJFrameImage) 31 new PlugInDialogCT_MD (parentFrame,image); 32 33 else 34 MipavUtil.displayError ("PlugIn CT_MD only runs on an image frame."); 35 } 36 } 37 }
|
Plug-in Dialog Image VOI Display.java
PlugInDialogImageVOIDisplay.java 1 import java.awt.*; 2 import java.awt.event.*; 3 import java.util.Vector; 4 5 import javax.swing.*; 6 import gov.nih.mipav.model.file.FileInfoBase; 7 import gov.nih.mipav.model.structures.ModelImage; 8 import gov.nih.mipav.model.structures.ModelLUT; 9 import gov.nih.mipav.model.structures.ModelRGB; 10 import gov.nih.mipav.model.structures.VOI; 11 import gov.nih.mipav.view.*; 12 import gov.nih.mipav.view.dialogs.*; 13 14 15 /** 16 * Plugin example class for creating a simple, self-contained frame that extends ViewJFrame Image 17 * Contains a subset of the VOI functions, as well as the message frame contained within the frame itself 18 * @author linkb 19 * 20 */ 21 public class PlugInDialogImageVOIDisplay extends ViewJFrameImage implements MouseListener, AdjustmentListener {} 22 //~ Constructors --------------------------------------------------------------------------------------------------- 23 24 /** 25 * Default constructor 26 */ 27 public PlugInDialogImageVOIDisplay(ModelImage image) { 28 super(image, null, null, false, false); 29 init(); 30 } 31 32 33 /** 34 * ViewOpenFrameInterface function for opening a model image (result) into a new frame 35 */ 36 public PlugInDialogImageVOIDisplay openFrame(ModelImage image) { 37 return new PlugInDialogImageVOIDisplay(image); 38 //~ Methods -------------------------------------------------------------------------------------------------------- 39 40 // ************************************************************************ 41 // ************************** Event Processing **************************** 42 // ************************************************************************ 43 public void adjustmentValueChanged(AdjustmentEvent e) { 44 updateImages(true); 45 } 46
|
47 /** 48 * Closes dialog box when the OK button is pressed and calls the algorithm. 49 * 50 * @param event Event that triggers function. 51 */ 52 public void actionPerformed(ActionEvent event) { 53 String command = event.getActionCommand(); 54 System.err.println("command: " command); 55 56 //run through toggle buttons to see if a menu selected one (updates the button status) 57 getControls().getTools().setToggleButtonSelected(command); 58 59 if (command.equals("Gaussian blur")) { 60 new JDialogGaussianBlur(this, getActiveImage()); 61 } else if (command.equals("Gradient magnitude")) { 62 new JDialogGradientMagnitude(this, getActiveImage()); 63 } else if (command.equals("Open")) { 64 //ViewUserInterface.getReference().openImageFrame(); 65 } else if (command.equals(CustomUIBuilder.PARAM_VOI_DEFAULT_POINTER)) { 66 componentImage.setCursorMode(ViewJComponentEditImage.DEFAULT); 67 } else if (command.equals(CustomUIBuilder.PARAM_VOI_POINT.getActionCommand())) { 68 69 70 if (!componentImage.getVOIHandler().checkForVOICompatibility(getActiveImage().getVOIs(), VOI.POINT, getControls())) { 71 componentImage.setCursorMode(ViewJComponentEditImage.NEW_VOI); 72 } 73 74 componentImage.setCursorMode(ViewJComponentEditImage.POINT_VOI); 75 } else if (command.equals(CustomUIBuilder.PARAM_VOI_LINE.getActionCommand())) { 76 77 if (!componentImage.getVOIHandler().checkForVOICompatibility(getActiveImage().getVOIs(), VOI.LINE, getControls())) { 78 componentImage.setCursorMode(ViewJComponentEditImage.NEW_VOI); 79 } 80 81 componentImage.setCursorMode(ViewJComponentEditImage.LINE); 82 } else if (command.equals("SplitVOI")) { 83 componentImage.setCursorMode(ViewJComponentEditImage.SPLIT_VOI); 84 } else if (command.equals(CustomUIBuilder.PARAM_VOI_POLY_SLICE.getActionCommand())) { 85 86 if (!componentImage.getVOIHandler().checkForVOICompatibility(getActiveImage().getVOIs(), VOI.POLYLINE_SLICE, getControls())) { 87 componentImage.setCursorMode(ViewJComponentEditImage.NEW_VOI); 88 } 89 90 componentImage.setCursorMode(ViewJComponentEditImage.POLYLINE_SLICE_VOI); 91 } else if (command.equals("protractor")) { 92 93 if (!componentImage.getVOIHandler().checkForVOICompatibility(getActiveImage().getVOIs(), VOI.PROTRACTOR, getControls())) { 94 componentImage.setCursorMode(ViewJComponentEditImage.NEW_VOI); 95 }
|
96 componentImage.setCursorMode(ViewJComponentEditImage.PROTRACTOR); 97 } else if (command.equals("Polyline")) { 98 99 if (!componentImage.getVOIHandler().checkForVOICompatibility(getActiveImage().getVOIs(), VOI.POLYLINE, getControls())) { 100 componentImage.setCursorMode(ViewJComponentEditImage.NEW_VOI); 101 } 102 103 componentImage.setCursorMode(ViewJComponentEditImage.POLYLINE); 104 } else if (command.equals(CustomUIBuilder.PARAM_VOI_TEXT.getActionCommand())) { 105 106 componentImage.setCursorMode(ViewJComponentEditImage.NEW_VOI); 107 108 109 componentImage.setCursorMode(ViewJComponentEditImage.ANNOTATION); 110 } else if (command.equals("RectVOI")) { 111 112 if (!componentImage.getVOIHandler().checkForVOICompatibility(getActiveImage().getVOIs(), VOI.CONTOUR, getControls())) { 113 componentImage.setCursorMode(ViewJComponentEditImage.NEW_VOI); 114 } 115 116 componentImage.setCursorMode(ViewJComponentEditImage.RECTANGLE); 117 } else if (command.equals("EllipseVOI")) { 118 if (!componentImage.getVOIHandler().checkForVOICompatibility(getActiveImage().getVOIs(), VOI.CONTOUR, getControls())) { 119 componentImage.setCursorMode(ViewJComponentEditImage.NEW_VOI); 120 } 121 122 componentImage.setCursorMode(ViewJComponentEditImage.ELLIPSE); 123 } else if (command.equals("LevelSetVOI")) { 124 componentImage.getVOIHandler().checkForVOICompatibility(getActiveImage().getVOIs(), VOI.CONTOUR, getControls()); 125 componentImage.setCursorMode(ViewJComponentEditImage.LEVELSET); 126 } else if (command.equals("Rect3DVOI")) { 127 componentImage.getVOIHandler().checkForVOICompatibility(getActiveImage().getVOIs(), VOI.CONTOUR, getControls()); 128 componentImage.setCursorMode(ViewJComponentEditImage.RECTANGLE3D); 129 } else if (command.equals("LiveWireVOI")) { 130 componentImage.getVOIHandler().checkForVOICompatibility(getActiveImage().getVOIs(), VOI.CONTOUR, getControls()); 131 132 if (componentImage.getVOIHandler().isLivewireNull()) { 133 JDialogLivewire dialog = new JDialogLivewire(this); 134 135 if (!dialog.isCancelled()) { 136 componentImage.getVOIHandler().setModeLivewire(dialog.getSelection()); 137 componentImage.setCursorMode(ViewJComponentEditImage.LIVEWIRE); 138 } 139 } else { 140 componentImage.setCursorMode(ViewJComponentEditImage.LIVEWIRE); 141 } 142 } else if (command.equals("NewVOI")) { 143 componentImage.setCursorMode(ViewJComponentEditImage.NEW_VOI);
|
144 int id = (getActiveImage().getVOIs().size() > 0) 145 ? (((VOI) (getActiveImage().getVOIs().lastElement())).getID() 1) : -1; 146 147 getControls().setVOIColor(id); 148 } else if (command.equals("cutVOI")) { 149 150 if (componentImage.getVOIHandler().copyVOItoClipBrd()) { 151 componentImage.getVOIHandler().deleteSelectedVOI(true); 152 } 153 } else if (command.equals("copyVOI")) { 154 componentImage.getVOIHandler().copyVOItoClipBrd(); 155 } else if (command.equals("pasteVOI")) { 156 componentImage.getVOIHandler().pasteVOI(); 157 } else if (command.equals("selectAllVOIs")) { 158 componentImage.getVOIHandler().selectAllVOIs(true); 159 } else if (event.getActionCommand().equals("voiSelectNone")) { 160 componentImage.getVOIHandler().selectAllVOIs(false); 161 } else if (command.equals("deleteVOI")) { 162 componentImage.getVOIHandler().deleteSelectedVOI(true); 163 } else if (command.equals("BringToFront")) { 164 componentImage.getVOIHandler().changeVOIOrder(false, VOIHandler.FRONT); 165 } else if (command.equals("SendToBack")) { 166 componentImage.getVOIHandler().changeVOIOrder(false, VOIHandler.BACK); 167 } else if (command.equals("BringContourToFront")) { 168 componentImage.getVOIHandler().changeVOIOrder(true, VOIHandler.FRONT); 169 } else if (command.equals("SendContourToBack")) { 170 componentImage.getVOIHandler().changeVOIOrder(false, VOIHandler.BACK); 171 } else if (command.equals("PropVOIUp")) { 172 173 // It appears JButtons don't pass key modifiers 174 // if((event.getModifiers() & ActionEvent.SHIFT_MASK) != 0) {} 175 if (componentImage.getVOIHandler().propVOI(1, false) == true) { 176 incSlice(); 177 } 178 } else if (command.equals("PropVOIDown")) { 179 180 if (componentImage.getVOIHandler().propVOI(-1, false) == true) { 181 decSlice(); 182 } 183 } else if (command.equals("PropVOIActiveUp")) { 184 185 // It appears JButtons don't pass key modifiers 186 // if((event.getModifiers() & ActionEvent.SHIFT_MASK) != 0) {} 187 if (componentImage.getVOIHandler().propVOI(1, true) == true) { 188 incSlice(); 189 } 190 } else if (command.equals("PropVOIActiveDown")) { 191 192 if (componentImage.getVOIHandler().propVOI(-1, true) == true) { 193 decSlice(); 194 } 195 } else if (command.equals("PropVOIAll")) { 196 componentImage.getVOIHandler().propVOIAll(); 197 } else if (command.equals("BringForward")) { 198 componentImage.getVOIHandler().changeVOIOrder(false, VOIHandler.FORWARD); 199 } else if (command.equals("SendBackward")) {
|
200 componentImage.getVOIHandler().changeVOIOrder(false, VOIHandler.BACKWARD); 201 } else if (command.equals("SendContourForward")) { 202 componentImage.getVOIHandler().changeVOIOrder(true, VOIHandler.FORWARD); 203 } else if (command.equals("SendContourBackward")) { 204 componentImage.getVOIHandler().changeVOIOrder(true, VOIHandler.BACKWARD); 205 } else if (command.equals("VOIProperties")) { 206 207 componentImage.getVOIHandler().showVOIProperties(false); 208 209 } else if (command.equals("VOIPropertiesColor")) { 210 211 if (getActiveImage().getVOIs().size() > 0) { 212 213 ViewVOIVector VOIs = getActiveImage().getVOIs(); 214 215 int i; 216 int nVOI = VOIs.size(); 217 218 for (i = 0; i < nVOI; i ) { 219 220 if ((VOIs.VOIAt(i).isActive() == true) && 221 ((VOIs.VOIAt(i).getCurveType() == VOI.CONTOUR) || 222 (VOIs.VOIAt(i).getCurveType() == VOI.POLYLINE) || 223 (VOIs.VOIAt(i).getCurveType() == VOI.POINT) || 224 (VOIs.VOIAt(i).getCurveType() == VOI.LINE) || 225 (VOIs.VOIAt(i).getCurveType() == VOI.PROTRACTOR))) { 226 break; 227 } else if ((VOIs.VOIAt(i).isActive() == true) && (VOIs.VOIAt(i).getCurveType() == VOI.ANNOTATION)) { 228 MipavUtil.displayInfo("Double-click annotation to change properties"); 229 i = -1; 230 231 break; 232 } 233 } 234 235 if (i == nVOI) { 236 MipavUtil.displayError("Please select VOI"); 237 } else if (i == -1) { // there was an annotation selected, do nothing 238 } else { 239 componentImage.getVOIHandler().showVOIProperties(true); 240 } 241 } else { 242 MipavUtil.displayWarning("Image has no VOIs!"); 243 } 244 245 } 246 } 247 248 /** 249 * Can handle actions for the resizing of the frame 250 */ 251 public synchronized void componentResized(ComponentEvent event) { 252 253 } 254
|
255 256 /** 257 * Override MouseListener functions to prevent MouseEvent catching in ViewJFrameImage 258 */ 259 public void mousePressed(MouseEvent e) {} 260 public void mouseReleased(MouseEvent e) {} 261 public void mouseEntered(MouseEvent e) {} 262 public void mouseExited(MouseEvent e) {} 263 public void mouseClicked(MouseEvent e) {} 264 265 266 /** 267 * Initialize the frame using a lut (can be null) 268 * @param LUTa the ModelLUT 269 * @throws OutOfMemoryError 270 */ 271 private void init() throws OutOfMemoryError { 272 273 try { 274 setIconImage(MipavUtil.getIconImage("davinci_32x32.gif")); 275 } catch (Exception error) { 276 Preferences.debug("Exception ocurred while getting <" error.getMessage() 277 ">. Check that this file is available.\n"); 278 } 279 280 setResizable(true); 281 282 // initialize logMagDisplay 283 this.LUTa = initLUT(imageA); 284 285 initResolutions(); 286 initZoom(); 287 288 int[] extents = createBuffers(); 289 290 initComponentImage(extents); 291 initExtentsVariables(imageA); 292 293 // create and build the menus and controls 294 controls = new ViewControlsImage(this); // Build controls used in this frame 295 menuBuilder = new ViewMenuBuilder(this); 296 297 // build the menuBar based on the number of dimensions for imageA 298 menuBarMaker = new ViewMenuBar(menuBuilder); 299 300 //create a custom menu bar using Vectors of UIParams 301 JMenuBar menuBar = new JMenuBar(); 302 303 //add pre-defined UIParams to the vector (will be added to both menu and toolbar) 304 Vector<CustomUIBuilder.UIParams> voiParams = new Vector<CustomUIBuilder.UIParams>(); 305 voiParams.addElement(CustomUIBuilder.PARAM_VOI_DEFAULT_POINTER); 306 voiParams.addElement(CustomUIBuilder.PARAM_VOI_POINT); 307 voiParams.addElement(CustomUIBuilder.PARAM_VOI_ELLIPSE); 308 voiParams.addElement(CustomUIBuilder.PARAM_VOI_RECTANGLE); 309 Vector<CustomUIBuilder.UIParams> algoParams = new Vector<CustomUIBuilder.UIParams>(); 310 algoParams.add(new CustomUIBuilder.UIParams("Gaussian blur", null, null)); 311 algoParams.add(new CustomUIBuilder.UIParams("Gradient magnitude", null, null));
|
312 menuBar.add(menuBarMaker.makeCustomMenu("VOI example", voiParams)); 313 menuBar.add(menuBarMaker.makeCustomMenu("Simple algorithm menu", algoParams)); 314 315 //create a simple toolbar (rather than the default ViewJFrameImage specific toolbar) 316 //buttons will be added to the toolbar with the function call .addCustomToolBar() 317 controls.buildSimpleToolBar(); 318 319 controls.addCustomToolBar(voiParams); 320 321 setTitle(); 322 323 JPanel centerPanel = new JPanel(); 324 centerPanel.add(componentImage, BorderLayout.CENTER); 325 326 // The component image will be displayed in a scrollpane. 327 scrollPane = new JScrollPane(centerPanel, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, 328 JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); 329 330 JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, scrollPane, 331 ViewUserInterface.getReference().getMessageFrame().getTabbedPane()); 332 splitPane.setDividerLocation(350); 333 334 getContentPane().add(splitPane); 335 scrollPane.setBackground(Color.black); 336 337 setBackground(Color.black); 338 339 340 341 // MUST register frame to image models 342 imageA.addImageDisplayListener(this); 343 344 if (imageB != null) { 345 imageB.addImageDisplayListener(this); 346 } 347 348 windowLevel = new JDialogWinLevel[2]; 349 350 this.setLocation(100, 50); 351 352 setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); 353 pack(); 354 355 scrollPane.setPreferredSize(new Dimension(800,800)); 356 scrollPane.getVerticalScrollBar().addAdjustmentListener(this); 357 scrollPane.getHorizontalScrollBar().addAdjustmentListener(this); 358 scrollPane.addComponentListener(this); 359 360 setSize(1000,750); 361 // User interface will have list of frames 362 userInterface.registerFrame(this); 363 this.updateImages(true); 364 addComponentListener(this); 365 366 this.setJMenuBar(menuBar); 367 getContentPane().add(controls, BorderLayout.NORTH);
|
368 this.addWindowListener(new WindowAdapter() { 369 public void windowClosing(WindowEvent we) { 370 System.exit(0); 371 } 372 }); 373 374 setVisible(true); 375 } // end init() 376 377 378 /** 379 * Sets the title of the frame 380 */ 381 public void setTitle() { 382 this.setTitle("Simple Image Frame: " imageA.getImageName()); 383 } 384 385 386 387 }
|