<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 14 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal">Dear VTK Users,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Currently, I’m using the vtkKWFileBrowserDialog class described here:
<a href="http://www.kwwidgets.org/doc/nightly/html/classvtkKWFileBrowserDialog.html#ae6369457df9ac6c20126d86643007361">
http://www.kwwidgets.org/doc/nightly/html/classvtkKWFileBrowserDialog.html#ae6369457df9ac6c20126d86643007361</a><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">At the bottom is my pipeline described in Tcl code. <o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Where it says “___________________INSERT FILE DIRECTORY PATH NAME HERE_________________________________” you can type the file path name, such as c:/folder_name, to render a DICOM image set as a volume.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">How do I use the vtkKWFileBrowserDialog to select a directory path and then retrieve that path name to be used in the DICOM reader?<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Basically, what should I do to retrieve the directory path name from the vtkKWFileBrowserDialog class?
<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">That’s the part that I’m confused with. I don’t know how to retrieve the directory path name and I don’t know how to link it with the DICOM reader.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">What does GetChooseDirectory or GetLastPath do? How I use those commands? Do these commands lead to a solution? Does anybody know or have experience with this?<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">See the code and please help me!<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Thanks,<o:p></o:p></p>
<p class="MsoNormal">Jason<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Here is the code:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># Load the KWWidgets package<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">package require kwwidgets<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># Create the application<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">set app [vtkKWApplication New]<o:p></o:p></p>
<p class="MsoNormal">$app SetName "3d dicom viewer"<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># Set a help link. Can be a remote link (URL), or a local file<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">$app SetHelpDialogStartingPage "<a href="http://www.kwwidgets.org">http://www.kwwidgets.org</a>"<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># Add a window<o:p></o:p></p>
<p class="MsoNormal"># Set 'SupportHelp' to automatically add a menu entry for the help link<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">set win [vtkKWWindow New]<o:p></o:p></p>
<p class="MsoNormal">$win SupportHelpOn<o:p></o:p></p>
<p class="MsoNormal">$app AddWindow $win<o:p></o:p></p>
<p class="MsoNormal">$win Create<o:p></o:p></p>
<p class="MsoNormal">$win SecondaryPanelVisibilityOff<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># Add a render widget, attach it to the view frame, and pack<o:p></o:p></p>
<p class="MsoNormal"># Create the render widget, <o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">set rw [vtkKWRenderWidget New]<o:p></o:p></p>
<p class="MsoNormal">$rw SetParent [$win GetViewFrame]<o:p></o:p></p>
<p class="MsoNormal">$rw Create<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">pack [$rw GetWidgetName] -side top -expand y -fill both -padx 0 -pady 0<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># Create a directory browser dialog that pops up and displays<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">set dir_browser [vtkKWFileBrowserDialog New]<o:p></o:p></p>
<p class="MsoNormal">$dir_browser SetParent [$win GetMainPanelFrame]<o:p></o:p></p>
<p class="MsoNormal">$dir_browser Display<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># Create a volume reader for DICOM images<o:p></o:p></p>
<p class="MsoNormal">vtkDICOMImageReader v16<o:p></o:p></p>
<p class="MsoNormal">v16 SetDirectoryName ___________________INSERT FILE DIRECTORY PATH NAME HERE_________________________________<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">vtkVolumeRayCastCompositeFunction rayCastFunction<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">vtkVolumeRayCastMapper volumeMapper<o:p></o:p></p>
<p class="MsoNormal"> volumeMapper SetInput [v16 GetOutput]<o:p></o:p></p>
<p class="MsoNormal"> volumeMapper SetVolumeRayCastFunction rayCastFunction<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># Use the render window and renderer of the renderwidget<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">set vpw_frame [vtkKWFrameWithScrollbar New]<o:p></o:p></p>
<p class="MsoNormal"> $vpw_frame SetParent [$win GetMainPanelFrame]<o:p></o:p></p>
<p class="MsoNormal"> $vpw_frame Create<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> pack [$vpw_frame GetWidgetName] -side top -fill both -expand y<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal"> # -----------------------------------------------------------------------<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> # Create a volume property widget<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> set vpw [vtkKWVolumePropertyWidget New]<o:p></o:p></p>
<p class="MsoNormal"> $vpw SetParent [$vpw_frame GetFrame] <o:p></o:p></p>
<p class="MsoNormal"> $vpw Create<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> pack [$vpw GetWidgetName] -side top -anchor nw -expand y -padx 2 -pady 2<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> # Create a volume property and assign it<o:p></o:p></p>
<p class="MsoNormal"> # We need color tfuncs opacity and gradient<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> set vpw_vp [vtkVolumeProperty New]<o:p></o:p></p>
<p class="MsoNormal"> $vpw_vp SetIndependentComponents 1<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> set vpw_cfun [vtkColorTransferFunction New]<o:p></o:p></p>
<p class="MsoNormal"> $vpw_cfun SetColorSpaceToRGB<o:p></o:p></p>
<p class="MsoNormal"> $vpw_cfun AddRGBPoint 0 0.0 0.0 0.0<o:p></o:p></p>
<p class="MsoNormal"> $vpw_cfun AddRGBPoint 500 1.0 0.5 0.3<o:p></o:p></p>
<p class="MsoNormal"> $vpw_cfun AddRGBPoint 1000 1.0 0.5 0.3<o:p></o:p></p>
<p class="MsoNormal"> $vpw_cfun AddRGBPoint 1150 1.0 1.0 0.9<o:p></o:p></p>
<p class="MsoNormal"> $vpw_cfun AddRGBPoint 3150 1.0 1.0 0.9<o:p></o:p></p>
<p class="MsoNormal"> #$vpw_cfun AddHSVSegment 0.0 0.2 1.0 1.0 255.0 0.8 1.0 1.0<o:p></o:p></p>
<p class="MsoNormal"> #$vpw_cfun AddHSVSegment 80 0.8 1.0 1.0 130.0 0.1 1.0 1.0<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> set vpw_ofun [vtkPiecewiseFunction New]<o:p></o:p></p>
<p class="MsoNormal"> $vpw_ofun AddSegment 0.0 0.2 255.0 0.8<o:p></o:p></p>
<p class="MsoNormal"> $vpw_ofun AddSegment 40 0.9 120.0 0.1<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal"> set vpw_gfun [vtkPiecewiseFunction New]<o:p></o:p></p>
<p class="MsoNormal"> $vpw_gfun AddSegment 0.0 0.2 60.0 0.4<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal"> $vpw_vp SetColor 0 $vpw_cfun<o:p></o:p></p>
<p class="MsoNormal"> $vpw_vp SetScalarOpacity 0 $vpw_ofun<o:p></o:p></p>
<p class="MsoNormal"> $vpw_vp SetGradientOpacity 0 $vpw_gfun<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"> #$vpw SetVolumeProperty volumeProperty<o:p></o:p></p>
<p class="MsoNormal"> $vpw SetVolumeProperty $vpw_vp<o:p></o:p></p>
<p class="MsoNormal"> $vpw SetWindowLevel 128 128<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># Create volume linked to volume property<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">vtkVolume volume<o:p></o:p></p>
<p class="MsoNormal"> volume SetMapper volumeMapper<o:p></o:p></p>
<p class="MsoNormal">volume SetProperty $vpw_vp<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal"># Render volume<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">set ren [$rw GetRenderer]<o:p></o:p></p>
<p class="MsoNormal">$ren AddViewProp volume<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">$rw ResetCamera<o:p></o:p></p>
<p class="MsoNormal">set camera [$ren GetActiveCamera]<o:p></o:p></p>
<p class="MsoNormal">set c [volume GetCenter]<o:p></o:p></p>
<p class="MsoNormal">$camera SetFocalPoint [lindex $c 0] [lindex $c 1] [lindex $c 2]<o:p></o:p></p>
<p class="MsoNormal">$camera SetPosition [expr [lindex $c 0] + 400] [lindex $c 1] [lindex $c 2]<o:p></o:p></p>
<p class="MsoNormal">$camera SetViewUp 0 0 -1<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># Set command linked to volume property widget <o:p></o:p></p>
<p class="MsoNormal">#used in order to update volume property in real-time<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">$vpw SetVolumePropertyChangedCommand $rw "Render"<o:p></o:p></p>
<p class="MsoNormal">$vpw SetVolumePropertyChangingCommand $rw "Render"<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># Start the application<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">set ret 0<o:p></o:p></p>
<p class="MsoNormal">$win Display<o:p></o:p></p>
<p class="MsoNormal">$app Start<o:p></o:p></p>
<p class="MsoNormal">set ret [$app GetExitStatus]<o:p></o:p></p>
<p class="MsoNormal">$win Close<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># Deallocate and exit<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">$rw Delete<o:p></o:p></p>
<p class="MsoNormal">$win Delete<o:p></o:p></p>
<p class="MsoNormal">$app Delete<o:p></o:p></p>
<p class="MsoNormal">exit $ret<o:p></o:p></p>
</div>
</body>
</html>