Plug-in CT MD.java

From MIPAV
Jump to: navigation, search
Figure 27. PlugInCT_MD.java

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

Figure 28. PlugInDialogImageVOIDisplay.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 }

See also: