Also visit the
Annot3D Home Page
Annot3D is 3D annotation system that allows users to add various 3D annotations to 3D volume data from CT scans (DICOM format). Users can then interact with this data (rotate, translate, scale, pick annotations, etc.) via a simple viewing window. The underlying rendering system is the Visualization ToolKit (VTK). Annot3D can be run locally on Windows and Linux. It can also be run as a webserver on Windows.
Annot3d is designed to be a simple and integrated method for annotating and packaging 3D visualizations for educational purposes. Specifically, Annot3D is meant to be used as a tool for human anatomy education.
The current version of Annot3D fulfills the following requirements:
-
Read CT scanned data into a 3d rendering system.
-
Incorporate a set of 3D annotations that have been requested by medical instructors
-
Include an authoring tool for adding 3d annotations to the model.
Annot3D provides the ability to add the following annotations to models: buttons (dots and boxes), lines, boundaries, text, clipping planes, and spheres/boxes that allow a portion of the data volume to be highlighted or visualized by removal of surrounding
data.
The Annot3D authoring system currently consists of XML files generated by hand to contain all information related to a dataset and its annotations.
Annot3D software can be downloaded from the
Annot3D Download
page.
-
Provides a simple and integrated method for annotating and packaging 3D visualizations for educational purposes.
-
Reads CT scanned data in DICOM or VTK format into a 3D rendering system.
-
Provides the ability to add the following annotations to models: buttons, lines, boundaries, text, clipping planes, and spheres/boxes that allow a portion of the data volume to be highlighted or visualized by removal of surrounding
data.
-
Includes an authoring tool for adding 3d annotations to the model. The Annot3D authoring system currently consists of XML files generated by hand to contain all information related to a dataset and its annotations.
-
Has a basic web server built in to allow possibility of remote viewing (this is still under development)
-
Allows complete 3D interaction including rotation, translation, and scaling of the volume. Allows interactive picking of annotations (i.e. you click on an area and an annotation appears).
-
Windows and Unix implementations.
Annot3D uses .xml text to describe the data and annotations that should be
added to a scene (see
Scene Examples
). After a scene has been loaded, .xml text is then used to describe the
commands that should be run on the scene (see
UserEvent Examples
).
The best way to become familiar with using XML to build annotated scenes for use in Annot3D is to follow these steps:
- Visit the XML Introduction page to learn how towrite XML.
- Use the detailed guidelines in sceneTags.txt and userEventTags.txt to help you learn how to modify the XML files.
- Run an example XML demo, such as ~/Annot3D/demo/parserHeadDemo.tcl . Play around with the XML files used in the demo by making changes to them to add your own annotations, change colors, etc (for example, ~/Annot3D/xmlFiles/headScene.xml and pickHeadUserEvent.xml are used by parserHeadDemo.tcl).
If you want to write your own tcl code to make new demos, XML Files are loaded by running the renderFromXMLFile or renderFromXMLString
procedures (see
makeXMLParser.tcl
).
Many of the XML files in the Annot3D File Structure are used in the DEMOS. These demos are updated by changing the XML files they use. Download the XML files here to get the current version of the demos.
Scene Examples
UserEvent Examples
Download Current XML Files
Scene type xml is used to describe everything required to build a scene
namely a renderer (window initiation), data set(s), and annotation objects. The
Annot3D xmlParser passes the scene xml options to the
correct sceneProcedure.
All of the available scene tags (followed by descriptions) are included in /xmlFiles/sceneTags.txt (view here). Just scroll down to find the type of annotation that you want to add, copy the entire tag, and change the names and options to fit your needs.
You may use an annotation type more than once. Just make sure that the name
is different for each occurance.
Annot3D comes with many scene type .xml example files. They are found in the
$env(ANNOT_ROOT)/xmlFiles/
directory. These are used by
the Annot3D DEMOS. The header of each demo file lists which
.xml file(s) it uses. The demos provide good examples of how to use each type
of annotation and how to manage them together.
UserEvent type xml is used to describe interactions with the scene such as moving
objects, taking pictures, and other commands. The Annot3D
xmlParser
passes the userEvent xml options to the correct
userEventProcedure.
All of the available userEvent tags (followed by descriptions) are included in /xmlFiles/userEventTags.txt (view here). Just scroll down to find the type of userEvent that you want to add, copy the entire tag, and change the names and options to fit your needs. You may use a specific useEvent as many times as you want.
Annot3D comes with many userEvent type .xml example files. They are found in the
$env(ANNOT_ROOT)/xmlFiles/
directory. These are used by the Annot3D DEMOS. The header of each demo file lists which .xml file(s) it uses. The demos
provide good examples of how to use each type of userEvent and how to combine them.
These files should be saved in C:/~/Annot3D/xmlFiles/ . You will need to unzip this folder into this location. When you are finished, the files structure should match that of the FILE STURCTURE on this page.
Get XML Files Here
xmlFiles.zip
Annot3D uses vtk procedures to run the src code. The following
procedures are included in the Annot3D package:
includes
sceneProcedures
userEventProcedures
webServerProcedures
xmlParserProcedures
- An exmaple of how to use each procedure can be found at the bottom of the
procedure code following the comment line:
#RUN PROCEDURENAME procedure____________________
This line is also included on this documentation page under
Use for each procedure.
- Another example of how to use all of the procedures together can be found in the
proceduresDemo.tcl.
The includes procedures are used to include all of the source code in Annot3D
(i.e. all other procedures).
libIncludes.tcl
Description
Includes all the source code procedures in the Annotation Project:
Variables
none
Use
source $env(ANNOT_ROOT)/src/includes/libIncludes.tcl
XML Tag used
<renderer>
The sceneProcedures are used by the parser to build a scene with data and
annotations. All sceneProcedures use the environment variable $env(ClientID).
They also add to either $env(MakeObjects) or $env('$IDname'RenderObjects) when
an object is created.
libActorLabel.tcl
libBox.tcl
libClipCube.tcl
libClipPlane.tcl
libClipSphere.tcl
libDot.tcl
libENVset.tcl
libLine.tcl
libPointPicker.tcl
libPointsReader.tcl
libRenderer.tcl
libSurfaceViewer.tcl
libVolumeReader.tcl
makeActorLabel
Description
Creates a prop picker (actorLabelPicker) and displays moving, still, and
general texts (with declared options) for each picked actor. Controlls any
number of actors and all options for when to display text.
Variables
MovingLabel Actor-- This text displays at the location of the mouse when
an actor is picked.
Variable | Type | Description | Example |
Mfont | (text) font size of the moving label.
| 15 |
Mbold | (text) bold option for the moving label. (case
sensitive. Any other text will result in an error.)
| BoldOn or BoldOff |
Mshadow | (text) shadow option for the moving label. (case
sensitive. Any other text will result in an error.)
| ShadowOn or ShadowOff |
Mr | (float) amount of red coloring in the moving label.
| 0.25 |
Mg | (float) amount of green coloring in the moving label.
| 0 |
Mb | (float) amount of blue coloring in the moving label.
| 3.0 |
MnaT | (text) MovingNoActorText-text displayed when
area outside actors is picked.
| "nothing picked here..." |
MdT | (text) MovingDefalutText-text displayed if no
moving text is specified.
| "{default moving statement}" |
MnaO | (text) MovingNoActorOpt- visibility option when
area outside actors is picked. (case sensitive. Any other text will
result in an error.)
| VisibilityOn or VisibilityOff |
StillLabel Actor-- This text displays at a given location (Sh&Sv) when an actor is picked.
Variable | Type | Description | Example |
Sfont | (text) font size of the still label.
| 20.0 |
Sbold | (text) bold option for the still label. (case
sensitive. Any other text will result in an error.)
| BoldOn or BoldOff |
Sshadow | (text) shadow option for the still label. (case
sensitive. Any other text will result in an error.)
| ShadowOn or ShadowOff |
Sr | (float) amount of red coloring in the still label.
| 0.25 |
Sg | (float) amount of green coloring in the still label.
| 0 |
Sb | (float) amount of blue coloring in the still label.
| 3.0 |
Sh | (float) horizontal position of the still label.
(this is the percentage distance from the left-bottom corner of the
screen.)
| .05 |
Sv | (float) verticle position of the still label.
(this is the percentage distance from the left-bottom corner of the
screen.)
| 0.05 |
SnaT | (text) StillNoActorText-text displayed when area
outside actors is picked.
| "Nothing Picked" |
SdT | (text) StillDefalutText-text displayed if no
still text is specified.
| "{default still statement}" |
SnaO | (text) StillNoActorOpt- visibility option when
area outside actors is picked. (case sensitive. Any other text will
result in an error.)
| VisibilityOn or VisibilityOff |
GeneralLabel Actor-- This displays the same text at a given location
(Gh&Gv).
Variable | Type | Description | Example |
Gfont | (text) font size of the general label.
| 18 |
Gbold | (text) bold option for the general label. (case
sensitive. Any other text will result in an error.)
| BoldOn or BoldOff |
Gshadow | (text) shadow option for the gneneral label.
(case sensitive. Any other text will result in an error.)
| ShadowOn or ShadowOff |
Gr | (float) amount of red coloring in the general label.
| 0.25 |
Gg | (float) amount of green coloring in the general label.
| 0 |
Gb | (float) amount of blue coloring in the general label.
| 3.0 |
Gh | (float) horizontal position of the general
label. (this is the percentage distance from the left-bottom corner
of the screen.)
| .05 |
Gv | (float) verticle position of the general label.
(this is the percentage distance from the left-bottom corner of the
screen.)
| 0.95 |
Gtext | (text) GeneralText - text displayed when
general actor is on.
| "I say the same thing. I do not move." |
GaO | (text) GeneralActorOpt- visibility option when
any actor is picked. (case sensitive. Any other text will result in
an error.)
| VisibilityOn or VisibilityOff |
GnaO | (text) GeneralNoActorOpt-visibility option when
area outside actors is picked. (case sensitive. Any other text will
result in an error.)
| VisibilityOn or VisibilityOff |
GnopickOpt | (text) GeneralNoPickOpt- visibility option
when nothing is picked, before picking. (case sensitive. Any other
text will result in an error.)
| VisibilityOn or VisibilityOff |
Actors-- These are the actors and their actions associated with being
picked. At least one actor must be defined. If an actor (or it's text
statements) is not specified here, the default moving and still
statements will display when that actor is picked.
Variable | Type | Description | Example |
Actors | (list) Actors- list of name(s) of the
actor(s) to be picked.
| [list skin dotActor dataoutline] |
MTs | (list) MovingTexts- list of text(s) to be
displayed at the moving label location.
| [list "{I am skin}" "{}" Iamanoutline] |
STs | (list) StillTexts- list of text(s) to be
displayed at the still label location.
| [list "{This is skin}" "{}" Thisisanoutline] |
Cs | (list) Commands- list of command statement(s)
to be caried out in addition to still and moving label display.
| [list {skin VisibilityOff} {} {clipPlaneOn plane1 dataouline}] |
Use
- global ACTors MOVingText STIllText COMmands
- set ACTors [list oneheadData oneheadDataOutline onedemodotActor ]
- set MOVingText [list "{I am a head}" "{head outline}" "{I am a dot}"]
- set STIllText [list Thisisskin "{This is an outline.}" "{This is a dot with a blank moving statement}"]
- set COMmands [list {} {} {onedemodotActor VisibilityOff}]
- makeActorLabel 15 BoldOn ShadowOn 0 1 0 "nothing picked here..." "{default moving statement}" VisibilityOn\
20 BoldOn ShadowOff 0 0 1 .05 .05 "Nothing Picked" "{default still statement}" VisibilityOn\
18 BoldOff ShadowOff 1 0 0 .05 .95 "{I say the same thing. I do not move.}" VisibilityOff VisibilityOn VisibilityOff\
$ACTors $MOVingText $STIllText $COMmands;
Created Object(s)
'$IDname'MovingLabelMapper, '$IDname'MovingLabelActor,
'$IDname'StillLabelMapper, '$IDname'StillLabelActor,
'$IDname'GeneralLabelMapper, '$IDname'GeneralLabelActor,
'$IDname'OutlineLabels, '$IDname'OutlineLabelsMapper, '$IDname'OutlineLabelsActor,
'$IDname'ActorLabelPicker
Created env() variable(s)
'$IDname'LabelOptions
Used env() variable(s)
'$IDname'InteractorOpt, '$IDname'LabelOptions, labelOptions,
actorLabelPicker, movingLabelMapper, movingLabelActor, stillLabelMapper,
stillLabelActor, generalLabelActor, outlineLabels, renWin
XML Tag used
<movingText> <stillText> <generalText> <action>
makeBox
renderBox
Description
Builds a Box (name) with the declared side lengths (xl,yl,&zl).
Variables
Variable | Type | Description | Example |
name | (text) name of the box.
| demobox |
xl | (float) length of the box along the x axis.
| 10.0 |
yl | (float) length of the box along the y axis.
| 10 |
zl | (float) length of the box along the z axis.
| 0 |
Use
makeBox demobox 10 20 10
Created Object(s)
'$name'BoxSource
XML Tag used
<box>
Description
Adds a Box (name) to a renderer ('$IDname'Renderer) with declared angle
rotations (xr,yr,&zr), position (x,y,&z), color (r,g,&b), solid/wire
frame option, and opacity.
Variables
Variable | Type | Description | Example |
name | (text) name of the box. This must be the same
name used in makeBox {name}
| demobox |
xr | (float) rotation in degrees from x axis.
| 90.0 |
yr | (float) rotation in degrees from y axis.
| 30 |
zr | (float) rotation in degrees from z axis.
| 0 |
x | (float) x coordinate of the center of the box.
| 50.0 |
y | (float) y coordinate of the center of the box.
| -50 |
z | (float) z coordinate of the center of the box.
| 0 |
r | (float) amount of red coloring in the box.
| 0.25 |
g | (float) amount of green coloring in the box.
| 0 |
b | (float) amount of blue coloring in the box.
| 3 |
SorW | (text) solid or wire frame option. (note: any
entry other than S will result in a wireframe box.)
| S or W |
opacity | (float) percentage of opacity (see through-ness)
for the box with 1.00 being solid and 0 being transparent.)
| 0.30 |
Use
renderBox demobox 0 0 0 20 0 20 1 0 0 W 1
Created Object(s)
'$IDname$name'BoxMapper, '$IDname$name'Actor
Actor(s) Added to Renderer
'$IDname$name'Actor
XML Tag used
<box>
makeClipCube
renderClipCube
clipCubeOn/Off
Description
Builds a clipping cube (name) through the given actor (actorObjectName)
with declared boundaries (xmin,xmax,ymin,ymax,zmin,&zmax).
Variables
Variable | Type | Description | Example |
name | (text) name of the clippingCube.
| democlipcube |
xmin | (float) x coordinate of the minimum edge of
the cube.
| 0 |
xmax | (float) x coordinate of the maximum edge of
the cube.
| 200.0 |
ymin | (float) y coordinate of the minimum edge of
the cube.
| -100 |
ymax | (float) y coordinate of the maximum edge of
the cube.
| 150 |
zmin | (float) z coordinate of the minimum edge of
the cube
| 25.0 |
zmax | (float) z coordinate of the maximum edge of
the cube
| 125 |
actorObjectName | (text) this specifies the object to be
clipped. (Note that this is not the actor name, it is the object name
usually used to SetInput for the vtkPolyDataMapper).
| skinNormals |
Use
makeClipCube democlipcube 0 200 50 150 25 125 headDataNormals
Created Object(s)
'$name'Cube, '$name'CubeClipper
XML Tag used
<clipCube>
Description
Adds a clipCube (name) to a renderer ('$IDname'Renderer) with declared
inside color (ir,ig,&ib), and outside color (or,og,&ob).
Variables
Variable | Type | Description | Example |
name | (text) name of the clippingCube. This must be
the same name used in makeClipCube {name}
| democlipcube |
ir | (float) this is amount of red coloring on the
inside of the object to be clipped.
| 0.25 |
ig | (float) this is amount of green coloring on the
inside of the object to be clipped.
| 0 |
ib | (float) this is amount of blue coloring on the
inside of the object to be clipped.
| 3 |
or | (float) this is amount of red coloring on the
outside of the object to be clipped.
| 0.5 |
og | (float) this is amount of green coloring on the
outside of the object to be clipped.
| 0.0 |
ob | (float) this is amount of blue coloring on the
outside of the object to be clipped.
| 1 |
Use
renderClipCube democlipcube .25 .5 .25 .25 .25 .5
Created Object(s)
'$IDname$name'CubeMapper, '$IDname$name'CubeProp, '$IDname$name'Actor
Actor(s) Added to Renderer
'$IDname$name'Actor
XML Tag used
<clipCube>
Description
Truns on/off a clipping cube (clipCubeName) that was previously defined
(using makeClipCube) to cut through the declared actor (cutActorName).
Variables
Variable | Type | Description | Example |
cutActorName | (text) name of the actor that the cube
cuts through (IDname will be appended). (Note: this is the full actor
name, NOT the actorObjectName that was used to in makeClipCube)
| skinData |
clipCubeName | (text) name of the clipping cube. This
must be the same name used in makeClipCube {name}
| democlipcube |
Use
clipCubeOn headData democlipcube
clipCubeOff headData democlipcube
XML Tag used
<clipCube>
makeClipPlane
renderClipPlane
clipPlaneOn/Off
Description
Builds a clipping plane (name) through the given actor (actorObjectName)
with the declared location origin (x,y,&z) and normal orientation
(nx,ny,&nz).
Variables
Variable | Type | Description | Example |
name | (text) name of the clippingPlane.
| plane1 |
x | (float) x coordinate of the center of the plane.
| 100.0 |
y | (float) y coordinate of the center of the plane.
| -100 |
z | (float) z coordinate of the center of the plane.
| 0 |
nx | (float) orientation normal of the x axis. (this
orients the plane to display values in the volume with a x-value <= 0)
| -1 |
ny | (float) orientation normal of the y axis. (this
orients the plane to display values in the volume with a y-value >= 0)
| +1 |
nz | (float) orientation normal of the y axis. (this
orients the plane parallel to the z-axis)
| 0 |
actorObjectName | (text) this specifies the object to be
clipped. (Note that this is not the actor name, it is the object name
usually used to SetInput for the vtkPolyDataMapper).
| skinNormals |
Use
makeClipPlane democlipplane 100 100 75 0 1 0 headDataNormals
Created Object(s)
'$name'Plane, '$name'PlaneClipper
XML Tag used
<clipPlane>
Description
Adds a clipPlane (name) to a renderer ('$IDname'Renderer) with declared
inside color (ir,ig,&ib) and outside color (or,og,&ob).
Variables
Variable | Type | Description | Example |
name | (text) name of the clippingPlane. This must
be the same name used in makeClipPlane {name}
| plane1 |
ir | (float) this is amount of red coloring on the
inside of the object to be clipped.
| 0.25 |
ig | (float) this is amount of green coloring on the
inside of the object to be clipped.
| 0 |
ib | (float) this is amount of blue coloring on the
inside of the object to be clipped.
| 3 |
or | (float) this is amount of red coloring on the
outside of the object to be clipped.
| 0.5 |
og | (float) this is amount of green coloring on the
outside of the object to be clipped.
| 0.0 |
ob | (float) this is amount of blue coloring on the
outside of the object to be clipped.
| 1 |
Use
renderClipPlane democlipplane .25 .5 .25 .25 .25 .5
Created Object(s)
'$IDname$name'PlaneMapper, '$IDname$name'PlaneProp, '$IDname$name'Actor
Actor(s) Added to Renderer
'$IDname$name'Actor
XML Tag used
<clipPlane>
Description
Truns on/off a clipping plane (clipPlaneName) that was previously defined
(using makeClipPlane) to cut through the declared actor (cutActorName).
Variables
Variable | Type | Description | Example |
cutActorName | (text) name of the actor that the plane
cuts through (IDname will be appended). (Note: this is the full actor
name, NOT the actorObjectName that was used to in makeClipPlane)
| skinData |
clipPlaneName | (text) name of the clipping plane. This
must be the same name used in makeClipPlane {name}
| plane1 |
Use
clipPlaneOn headData democlipplane
clipPlaneOff headData democlipplane
XML Tag used
<clipPlane>
makeClipSphere
renderClipSphere
clipSphereOn/Off
Description
Builds a clipping sphere (name) through the given actor (actorObjectName)
with the declared location origin (x,y,&z) and radius (r).
Variables
Variable | Type | Description | Example |
name | (text) name of the clippingSphere.
| sphere1 |
x | (float) x coordinate of the center of the sphere.
| 100.0 |
y | (float) y coordinate of the center of the sphere.
| -100 |
z | (float) z coordinate of the center of the sphere.
| 0 |
r | (float) radius of the sphere.
| 50.0 |
actorObjectName | (text) this specifies the object to be
clipped. (Note that this is not the actor name, it is the object name
usually used to SetInput for the vtkPolyDataMapper).
| skinNormals |
Use
makeClipSphere democlipsphere 100 100 75 50 headDataNormals
Created Object(s)
'$name'Sphere, '$name'SphereClipper
XML Tag used
<clipSphere>
Description
Adds a clipSphere (name) to a renderer ('$IDname'Renderer) with declared
inside color (ir,ig,&ib) and outside color (or,og,&ob).
Variables
Variable | Type | Description | Example |
name | (text) name of the clippingSphere. This must
be the same name used in makeClipCube {name}
| sphere1 |
ir | (float) this is amount of red coloring on the
inside of the object to be clipped.
| 0.25 |
ig | (float) this is amount of green coloring on the
inside of the object to be clipped.
| 0 |
ib | (float) this is amount of blue coloring on the
inside of the object to be clipped.
| 3 |
or | (float) this is amount of red coloring on the
outside of the object to be clipped.
| 0.5 |
og | (float) this is amount of green coloring on the
outside of the object to be clipped.
| 0.0 |
ob | (float) this is amount of blue coloring on the
outside of the object to be clipped.
| 1 |
Use
renderClipSphere democlipsphere .25 .5 .25 .25 .25 .5
Created Object(s)
'$IDname$name'SphereMapper, '$IDname$name'SphereProp, '$IDname$name'Actor
Actor(s) Added to Renderer
'$IDname$name'Actor
XML Tag used
<clipSphere>
Description
Truns on/off a clipping sphere (clipSphereName) that was previously
defined (using makeClipSphere) to cut through the declared actor
(cutActorName).
Variables
Variable | Type | Description | Example |
cutActorName | (text) name of the actor that the sphere
cuts through (IDname will be appended). (Note: this is the full actor
name, NOT the actorObjectName that was used to in makeClipSphere)
| skinData |
clipSphereName | (text) name of the clipping sphere. This
must be the same name used in makeClipSphere {name}
| sphere1 |
Use
clipSphereOn headData democlipsphere
clipSphereOff headData democlipsphere
XML Tag used
<clipSphere>
makeDot
renderDot
Description
Builds a Dot (name) with declared radius.
Variables
Variable | Type | Description | Example |
name | (text) name of the dot.
| dot1 |
radius | (float) radius of the dot in world coordinate
values.
| 10.0 |
Use
makeDot demodot 10
Created Object(s)
'$name'DotSource
XML Tag used
<dot>
Description
Adds a Dot (name) to a renderer ('$IDname'Renderer) with declared position
(x,y,&z), color (r,g,&b), and opacity.
Variables
Variable | Type | Description | Example |
name | (text) name of the Dot. This must be the same
name used in makeDot {name}
| dot1 |
x | (float) x coordinate of the center of the dot.
| 50.0 |
y | (float) y coordinate of the center of the dot.
| -50 |
z | (float) z coordinate of the center of the dot.
| 0 |
r | (float) amount of red coloring in the dot.
| 0.25 |
g | (float) amount of green coloring in the dot.
| 0 |
b | (float) amount of blue coloring in the dot.
| 3 |
opacity | (float) percentage of opacity (see through-ness)
for the dot with 1.00 being solid and 0 being transparent
| 0.30 |
Use
renderDot demodot 20 0 0 1 0 0 1
Created Object(s)
'$IDname$name'DotMapper, '$IDname$name'Actor
Actor(s) Added to Renderer
'$IDname$name'Actor
XML Tag used
<dot>
makeEnv
Description
Sets the global variables for the given IDname including env(ClientID).
Variables
Variable | Type | Description | Example |
IDname | (text) name of the current clientID
| one |
Use
makeEnv oneRen
Created env() variable(s)
ClientID, renWin,
actorLabelPicker, movingLabelMapper, movingLabelActor,
stillLabelMapper, stillLabelActor, generalLabelActor,
outlineLabels,
labelOptions
XML Tag used
<scene>
makeLine
renderLine
Description
Builds a line (name) from the declared starting point (sx,sy,&sz) to the
declared finishing point (fx,fy,&fz).
Variables
Variable | Type | Description | Example |
name | (text) name of the line.
| line1 |
sx | (float) x coordinate of the line starting point.
| 10.0 |
sy | (float) y coordinate of the line starting point.
| -10 |
sz | (float) z coordinate of the line starting point.
| 0 |
fx | (float) x coordinate of the line finishing point.
| 10.0 |
fy | (float) y coordinate of the line finishing point.
| -10 |
fz | (float) z coordinate of the line finishing point.
| 0 |
Use
makeLine demoline 0 0 0 150 0 0
Created Object(s)
'$name'LineSource
XML Tag used
<line>
Description
Adds a Line (name) to a renderer ('$IDname'Renderer) with declared color
(r,g,&b).
Variables
Variable | Type | Description | Example |
name | (text) name of the line. This must be the same
name used in makeLine {name}
| line1 |
r | (float) amount of red coloring in the line.
| 0.25 |
g | (float) amount of green coloring in the line.
| 0 |
b | (float) amount of blue coloring in the line.
| 3 |
Use
renderLine demoline 1 0 0
Created Object(s)
'$IDname$name'LineMapper, '$IDname$name'Actor
Actor(s) Added to Renderer
'$IDname$name'Actor
XML Tag used
<line>
makePointPicker
pointPickerCallback
registerPointCallback
pointPickerOn
Description
Creates a pointPicker object to display the coords at a mouse location
when an actor is picked.
Variables
none
Use
makePointPicker
Created Object(s)
PointPkr
Used env() variable(s)
'$IDname'InteractorOpt
XML Tag used
<pointPicker>
Description
This is the callback procedure that is called when a pick event occurs and
the point picker is on. It grabs the position information for the point
selected and feeds it to the text mapper. The cooridinate information is
then displayed in the rendering window.
Variables
none
Use
pointPickerCallback
XML Tag used
<pointPicker>
Description
Registers the pointPickerCallback procedure so that it automatically gets
called when a pick event occurs and the point picker is on. Also creates
a text mapper object that is unique to an individual client so that the
text mapper properties (font, bold, etc.) can be different for each client.
Variables
Variable | Type | Description | Example |
font | (float) size of display font
| 10.0 |
bold | (text) display font bold option (case sensitive)
| BoldOn or BoldOff |
shadow | (text) display font shadow option (case sensitive)
| ShadowOn or ShadowOff |
r | (float) amount of red coloring in the display
font.
| 0.25 |
g | (float) amount of green coloring in the display
font.
| 0 |
b | (float) amount of blue coloring in the display
font
| 3 |
Use
registerPointCallback 10 BoldOff ShadowOff 1 0 0
Created Object(s)
'$IDname'PointTextMapper, '$IDname'PointActor
XML Tag used
<pointPicker>
Description
Turns the point picker on. This must be called before the point picker
can be used.
Variables
none
Use
pointPickerOn
XML Tag used
<pointPicker>
makePointsReader
renderPointsReader
saveSurface
Description
Reads a volume dataset defined in a single .vtk image file with declared
filename. Builds an isosurface representing the data and an ouline of it.
Variables
Variable | Type | Description | Example |
name | (text) name of the vtk data.
| clavicle |
fileName | (text) directory path and name of .vtk file.
| "C:\\Annot\\data\\bosBones\\clav.vtk" or "$env(ANNOT_ROOT)/data/bosBones/clav.vtk" |
dataValue | (float) data contour value used to consturct
an isosurface
| 500 |
Use
makePointsReader clavicle "$env(ANNOT_ROOT)/data/bosBones/clav.vtk" 100
Created Object(s)
'$name'SPReader, '$name'ContFilter,
'$name'OutlineFilter,
'$name'PDCFilter, '$name'PDWriter
XML Tag used
NEEDS MORE
Description
Adds a .vtk data volume and it's outline (if outlineOpt isn't Off) to a
renderer.
Variables
Variable | Type | Description | Example |
name | (text) name of the vtk data. This must be the
same name used in makePointsReader {name}
| clavicle |
r | (float) this is amount of red coloring in the
volume data.
| 0.25 |
g | (float) this is amount of green coloring in the
volume data.
| 0 |
b | (float) this is amount of blue coloring in the
volume data.
| 3 |
outlineOpt | (text) data outline option (note: any entry
other than Off will result in the outline being visible)
| On or Off |
Use
renderPointsReader clavicle 1 1 1 On
Created Object(s)
'$IDname$name'DataMapper, '$IDname$name'Data,
'$IDname$name'DataMapperOutline, '$IDname$name'DataOutlineActor
Actor(s) Added to Renderer
'$IDname$name'Data, '$IDname$name'DataOutlineActor
XML Tag used
NEEDS MORE
Description
Writes a file containing the surface representing the data processed in
makePointsReader.
Variables
Variable | Type | Description | Example |
name | (text) name of the vtk data. This must be
the same name used in makePointsReader {name}
| clavicle |
newFileName | (text) directory path and name of filtered
file to be saved. '.vtk' will be appended to this.
| "C:\\Annot\\data\\surfaces\\clavicleSurf" or "$env(ANNOT_ROOT)/data/surfaces/clavicleSurf" |
Use
saveSurface clavicle "$env(ANNOT_ROOT)/data/surfaces/clavicleSurf"
XML Tag used
not in xml parser
makeRenderer
Description
This is all that is needed to set up a renderer for displaying
any actor. To add an actor use the command (after makeRenderer
is run): '$IDname'Renderer AddActor actorname
Creates the render window ('$IDname'RenWin). Allows the render
window to render images off screen (when '$offScreenOpt' is
"Off").
Creates the interactor ('$IDname'iren) (when '$interactorOpt'
is not "Off"). The interactor enables mouse- and keyboard-based
interaction with the scene.
Prevents the tk window from showing up then start the event loop.
Variables
Variable | Type | Description | Example |
r | (float) amount of red coloring in the background.
| 0.25 |
g | (float) amount of green coloring in the background.
| 0 |
b | (float) amount of blue coloring in the background.
| 3 |
h | (int) horizontal size(expressed in pixels) of
the viewing window.
| 500 |
v | (int) vertical size(expressed in pixels) of
the viewing window.
| 600 |
interactorOpt | (text) Option for turning off the interactor.
The environment variable '$IDname'InteractorOpt is made usable to any
following procedures via $env('$IDname'InteractorOpt). (note: If anything
other than Off is specified, the interactor will remian on.)
| Off or On |
offScreenOpt | (text) Option for running the renderwindow
offScreen. (Hides the window when run)
| Off or On |
Use
MakeRenderer 0.1 0.2 0.4 400 200 On On
Created Object(s)
'$IDname'Renderer, '$IDname'RenWin, '$IDname'Iren
Created env() variable(s)
'$IDname'InteractorOpt, '$IDname'RenderObjects
Used env() variable(s)
'$IDname'InteractorOpt
XML Tag used
<renderer>
makeSurfaceViewer
renderSurfaceViewer
Description
Reads a volume dataset defined in a filtered vtk surface data file with
declared filename. First does mesh simplification, then builds an isosurface
representing the data and an outline of it.
Variables
Variable | Type | Description | Example |
name | (text) name of the surface data.
| clavicleSurf |
fileName | (text) directory path and name of filtered
.vtk surface file.
| "C:\\Annot\\data\\surfaces\\clavicleSruf100.02.vtk" or "$env(ANNOT_ROOT)/data/surfaces/clavicleSurf100.02.vtk" |
Use
makeSurfaceViewer clavicleSurf "$env(ANNOT_ROOT)/data/surfaces/clavicleSurf100.02.vtk"
Created Object(s)
'$name'PDReader, '$name'Deci, '$name'PDNormals,
'$name'SurfOutlineFilter
XML Tag used
<vtkVolume>
Description
Adds a surface data volume and it's outline (if outlineOpt isn't Off) to a
renderer.
Variables
Variable | Type | Description | Example |
name | (text) name of the surface data. This must be
the same name used in makeSurfaceViewer {name}
| clavicleSurf |
r | (float) this is amount of red coloring in the
volume data.
| 0.25 |
g | (float) this is amount of green coloring in the
volume data.
| 0 |
b | (float) this is amount of blue coloring in the
volume data.
| 3 |
x | (float) x coordinate of the center of the data.
| 50.0 |
y | (float) y coordinate of the center of the data.
| -50 |
z | (float) z coordinate of the center of the data.
| 0 |
wrot | (float) rotation in degrees of the world axis.
| 1.0 |
xrot | (float) rotation in degrees from x axis.
| 90.0 |
yrot | (float) rotation in degrees from y axis.
| 30 |
zrot | (float) rotation in degrees from z axis.
| 0 |
outlineOpt | (text) data outline option (note: any entry
other than Off will result in the outline being visible)
| On or Off |
Use
renderSurfaceViewer clavicleSurf 1 1 1 0 0 0 0 0 0 1 On
Created Object(s)
'$IDname$name'DataMapper, '$IDname$name'Actor,
'$IDname$name'DataMapperOutline , '$IDname$name'DataOutlineActor
Actor(s) Added to Renderer
'$IDname$name'Actor, '$IDname$name'DataOutlineActor
XML Tag used
<vtkVolume>
makeVolumeReader
renderVolumeReader
Description
Reads a volume dataset defined in a series of 2D slices/images with declared
filenames (filePrefix,filePattern,startSlice,&endSlice), volume
demensions/settings (pixelSizeX,pixelSizeY,Zspacing,rows,&columns), and
Endianness (endian). Builds an isosurface representing the data and an
ouline of it.
Appropriate values for variables can be found by following the
Dicom2 Instructions to extract data
file information.
Variables
filePrefix, filePattern, startSlice, and endSlice are used to construct
filenames.
To read the files: C:\test-1.raw, C:\test-2.raw, etc... use these variable
examples:
Variable | Type | Description | Example |
name | (text) name of the data volume.
| head |
filePrefix | (text) beginning of filename
| "C:/test-" |
filePattern | (text) end of filename (note: if there is
no postfix as in C:\data\quarter.1, "none" must be used.)
| %s%d.raw or none |
startSlice | (int) first filename number
| 1 |
endSlice | (int) last filename number
| 2 |
| | |
pixelSizeX | (float) data spacing specifier
| 0.664062 |
pixelSizeY | (float) data spacing specifier
| 0.664062 |
Zspacing | (float) data spacing specifier
| 3.0 |
rows | (int) data demension specifier
| 512 |
columns | (int) data demension specifier
| 512 |
endian | (text) endian specification (case sensitive)
| Little or Big |
dataValue | (float) data contour value (used to
construct an isosurface)
| 500 |
Use
makeVolumeReader head "$env(ANNOT_ROOT)/data/headsq/quarter" none 1 93
3.2 3.2 1.5 64 64 Little 500
Created Object(s)
'$name'V16Reader, '$name'DataFilter, '$name'DataNormals,
'$name'DataFilterOutline
XML Tag used
<rawVolume>
Description
Adds a data volume and it's outline (if outlineOpt isn't Off) to a renderer.
Variables
Variable | Type | Description | Example |
name | (text) name of the data volume. This must be
the same name used in makeVolumeReader {name}
| head |
r | (float) this is amount of red coloring in the
volume data.
| 0.25 |
g | (float) this is amount of green coloring in the
volume data.
| 0 |
b | (float) this is amount of blue coloring in the
volume data.
| 3 |
outlineOpt | (text) data outline option (note: any entery
other than Off will result in the outline being visible)
| On or Off |
Use
renderVolumeReader head 1 1 1 On
Created Object(s)
'$IDname$name'DataMapper, '$IDname$name'Data,
'$IDname$name'DataMapperOutline, '$IDname$name'DataOutlineActor
Actor(s) Added to Renderer
'$IDname$name'Actor, '$IDname$name'DataOutlineActor
XML Tag used
<rawVolume>
The userEventProcedures are used by the parser to manipulate a previously
loaded scene. All userEventProcedures use the environment variable $env(ClientID).
They also add to either $env(MakeObjects) or $env('$IDname'RenderObjects) when
an object is created.
libInteractorGUI.tcl
libJPGWriter.tcl
libPan.tcl
libPickActor.tcl
libPNGWriter.tcl
libQuitClient.tcl
libRotate.tcl
libZoom.tcl
makeInteractorGUI
Description
Sets up a callback to bring up the Tcl command GUI when the "keypress-u"
occurs in the rendering window. This allows any command to be executed
interactively without changing the initial source code. This will only
work if InteractorOpt is "On" (set in makeRenderer).
Variables
none
Use
makeInteractorGUI
XML Tag used
<interactorGUI>
makeJPGWriter
writeJPGCallback
writeJPG
registerJPGCallback
Description
Creates vtkJPEGWriter and vtkTimerLog objects for this client ID. These
objects are created once and used by all clients. The vtkJPEGWriter object
can be used to set a jpg writer callback for a user event by using
registerJPGCallback, or just to write a jpg on command by using writeJPG.
This procedure must be executed before registerJPGCallback or writeJPG can
be used. If this procedure is called more than once, the Timer and Writer
objects are not created again in order to avoid variable conflicts.
Variables
none
Use
makeJPGWriter
Created Object(s)
Timer, JPGWriter
Used env() variable(s)
'$IDname'InteractorOpt
XML Tag used
<registerJPGCallback> <writeJPG>
Description
Writes a single JPG file that is a snapshot of the current rendered window
image when the user types 'u' in the render window. This is the callback
function that gets registered by 'registerJPGCallback'.
Variables
Variable | Type | Description | Example |
filePath | (text) Full path to directory where snapshots
are to be stored. (note: if no directory is specified, the current
directory will be used)
| "$env(ANNOT_ROOT)/data/snapshots" |
filePrefix | (text) Prefix to randomly selected filename.
If this is set to anything other than "NONE", the name of the resulting
jpg will be of the form "filePath/filePrefix-x.jpg" where x is the time
(used to differentiate this snapshot from others).
| demo- |
Use
writeJPGCallback "$env(ANNOT_ROOT)/data/snapshots" demo-
XML Tag used
<registerJPGCallback> <writeJPG>
Description
Writes a single JPG file that is a snapshot of the current rendered window
image. This is different from the callback function in that it is called
directly rather than being set as a callback that only gets executed when
a specific user event occurs.
Variables
Variable | Type | Description | Example |
filePath | (text) Full path to directory where snapshots are to
be stored. (note: if no directory is specified, the current directory
will be used)
| "$env(ANNOT_ROOT)/data/snapshots" |
fileName | (text) Specific file name to assign to snapshot.
| demo.jpg |
Use
writeJPG "$env(ANNOT_ROOT)/data/snapshots" demo.jpg
XML Tag used
<registerJPGCallback> <writeJPG>
Description
Sets the callback so that a jpg is produced (by calling writeJPGCallback)
every time the user types "u".
Variables
Variable | Type | Description | Example |
filePath | (text) full path to directory where snapshots
are to be stored. (note: if no directory is specified, the current directory
will be used)
| "C:\\snapshots" or "$env(ANNOT_ROOT)/data/snapshots" |
filePrefix | (text) prefix to randomly selected filename.
The filename will be of the form "filePrefix-x.jpg" where x is the time
(used to differentiate this snapshot from others).
| demo- |
Use
registerJPGCallback "$env(ANNOT_ROOT)/data/snapshots" demo-
XML Tag used
<registerJPGCallback> <writeJPG>
pan
Description
Pans the cammera. Moves the actors left/right and down/up with values
given in screen pixels.
Variables
Variable | Type | Description | Example |
panX | (double) left +/right - movement given in screen
pixels.
| 30 |
panY | (double) down +/up - movement given in screen
pixels.
| 30 |
Use
pan 30 10
XML Tag used
<pan>
pickActor
Description
Picks the actor at the given screen coordinates (pixel distance
from the bottom left corner).
Variables
Variable | Type | Description | Example |
pickX | (float) horizontal picking pixel distance from
left edge of render window.
| 127 |
pickY | (float) vertical picking pixel distance from
bottom edge of render window.
| 409 |
Use
pickActor 127 409
XML Tag used
<pickActor>
makePNGWriter
writePNGCallback
writePNG
registerPNGCallback
Description
Creates vtkPNGWriter and vtkTimerLog objects for this client ID. These
objects are created once and used be all clients. The vtkPNGWriter object
can be used to set a png writer callback for a user event by using
registerPNGCallback, or just to write a png on command by using writePNG.
This procedure must be executed before registerPNGCallback or writePNG can
be used. If this procedure is called more than once, the Timer and PNGWriter
objects are not created again in order to avoid variable conflicts.
Variables
none
Use
makePNGWriter
Created Object(s)
Timer, PNGWriter
Used env() variable(s)
'$IDname'InteractorOpt
XML Tag used
<registerPNGCallback> <writePNG>
Description
Writes a single PNG file that is a snapshot of the current rendered
window image when the user types 'u' in the render window. This is the
callback function that gets registered by 'registerPNGCallback'.
Variables
Variable | Type | Description | Example |
filePath - | (text) Full path to directory where snapshots
are to be stored. (note: if no directory is specified, the current directory
will be used)
| "$env(ANNOT_ROOT)/data/snapshots" |
filePrefix - | (text) Prefix to randomly selected filename.
If this is set to anything other than "NONE", the name of the resulting
png will be of the form "filePath/filePrefix-x.png" where x is the time
(used to differentiate this snapshot from others).
| demo- |
Use
writePNGCallback "$env(ANNOT_ROOT)/data/snapshots" demo-
XML Tag used
<registerPNGCallback> <writePNG>
Description
Writes a single PNG file that is a snapshot of the current rendered window
image. This is different from the callback function in that it is called
directly rather than being set as a callback that only gets executed when
a specific user event occurs.
Variables
Variable | Type | Description | Example |
filePath | (text) Full path to directory where snapshots
are to be stored. (note: if no directory is specified, the current directory
will be used)
| "$env(ANNOT_ROOT)/data/snapshots" |
fileName | (text) Specific file name to assign to
snapshot.
| demo.png |
Use
writePNG "$env(ANNOT_ROOT)/data/snapshots" demo.png
XML Tag used
<registerPNGCallback> <writePNG>
Description
Sets the callback so that a png is produced (by calling writePNGCallback)
every time the user types "u".
Variables
Variable | Type | Description | Example |
filePath | (text) full path to directory where snapshots
are to be stored. (note: if no directory is specified, the current directory
will be used)
| "C:\\snapshots" or "$env(ANNOT_ROOT)/data/snapshots" |
filePrefix | (text) prefix to randomly selected filename.
The filename will be of the form "filePrefix-x.png" where x is the time
(used to differentiate this snapshot from others).
| demo- |
Use
registerPNGCallback "$env(ANNOT_ROOT)/data/snapshots" demo-
XML Tag used
<registerPNGCallback> <writePNG>
quitClient
Description
Deletes all files, objects, and variables used for the current client.
Variables
Variable | Type | Description | Example |
pngVar | (float) A random number generated by the
webServer to create a unique name for the clientID's image.
| 0.673546382074 |
Use
quitClient 0.673546382074
Used env() variable(s)
'$IDname'InteractorOpt, '$IDname'RenderObjects, '$IDname'LabelOptions
XML Tag used
none
rotate
Description
Rotates the camera in x, y, or z directions.
Variables
Variable | Type | Description | Example |
direction | (text) direction to rotate the camera.
X=left/right, Y=down/up, Z=clockwise/counterclockwise (case
sensitive. Any other text entered will default to no rotation occuring)
| X or Y or Z |
degrees | (double) angle in deegrees to rotate by.
| -90 |
Use
rotate Y -45
XML Tag used
<rotate>
zoom
Description
Zooms the camera. Zooms in/out to the actors by zoom given in percentage
of existing display.
Variables
Variable | Type | Description | Example |
zoom | (double) in +/out - amount by percentage of existing
display.
| -10 |
Use
zoom -10
XML Tag used
<zoom>
The webServerProcedures are used to initate the
Tcl Web Server.
libWebServer.tcl
webParserProcedure.tcl
Description
Includes all Annote3D procedures, which allows them to be called by the
httpd server. Creates the env variable MakeObjects which contains a list
of the objects created to make (not render) a scene. Runs the procedure
$env(ANNOT_ROOT)/src/sceneProcedures/libPNGWriter.tcl makePNGWriter so
that the server may writePNG images.
Runs the httpd.tcl code which initiates
the web server. This code allows the codes in webserver\tclhttpd3.4.2\lib\
to be run by typing a corresponding url in the web browser.
For Example: typing http://127.0.0.1:8015/renderer/ will access
webserver\tclhttpd3.4.2\lib\renderer.tcl . The appropriate procedure will
the be run with access to each link (or by adding
"/procedureName?procedureVariable=value" to the URL). These procedures make
calls to /src/webServerProcedures/webParserProcedure.tcl
Variables
none
Use
vtk libWebServer.tcl (run it in vtk)
source $env(ANNOT_ROOT)/src/webServerProcedures/libWebServer.tcl
Created env() variable(s)
MakeObjects
webParserProcedure
Description
Reads an xml file (xmlPath) and creates/manipulates the corresponding scene
(using src/xmlParserProcedures/makeXMLParser.tcl renderFromXML).
Renames the existing png file to a random png file name. Writes a new png
to the file and returns the new pngVar name.
Variables
Variable | Type | Description | Example |
type | (text) type of xml file to be parsed (case sensitive)
| File or String |
xml | (text) name and extension of xml file to be read
(assumes $ANNOT_ROOOT/xmlFiles/ as the path).
| sampleScene.xml |
clientID | (text) IDname to be used for the scene/userEvent.
| one |
pngVar | (float) A random number generated by the
webServer to create a unique name for the clientID's image.
| 0.673546382074 |
Use
webParserProcedure File scene1.xml one 0.673546382074
The xmlParserProcedures are used to parse
XML FILES using the procedures
renderFromXMLFile and
renderFromXMLString.
makeXMLParser.tcl
sceneParser.tcl
userEventParser.tcl
xmlParserLib.tcl
renderFromXMLFile
renderFromXMLString
Description
This script acts as an interface between
XML FILES
and the Annot3D source codes through the renderFromXMLFile and
renderFromXMLString procedures.
This is a non-validating parser, meaning that it does not check to make
sure that the XML file correctly follows its DTD.
This script includes the code from
sceneParser.tcl,
userEventParser.tcl, and
xmlParserLib.tcl (via source commands)
at its beginning.
Description
This procedure acts as an interface interface between
XML FILES
and the Annot3D source codes. Given an XML file name, the procedure
calls other parsing procedures to parse the XML, and then performs
whatever tasks are outlined in the XML (build volume, add annotation,
execute mouse events, etc.)
Variables
Variable | Type | Description | Example |
clientID | (text) IDname to be used for the
scene/userEvent.
| one |
filename | (string) XML filename to be parsed and
executed.
| scene1.xml |
Use
renderFromXMLFile one scene1.xml
Description
This procedure acts as an interface interface between
XML strings
and the Annot3D source codes. Given an XML string, the procedure
calls other parsing procedures to parse the XML, and then performs
whatever tasks are outlined in the XML (build volume, add annotation,
execute mouse events, etc.)
Variables
Variable | Type | Description | Example |
clientID | (text) IDname to be used for the
scene/userEvent.
| one |
string | (string) XML string to be parsed and executed.
| see XML FILES |
Use
renderFromXMLString one string
Description
This script has specific methods for parsing XML files
containing scene data. The procedures in this file use the
general XMl parsing procedures found in
xmlParserLib.tcl. This is a
non-validating parser, meaning that it does not check to make sure
that the XML file correctly follows its DTD.
The scene XML file must adhere to the format
specified in scene.dtd.
Description
This script has specific methods for parsing XML files
containing userEvent data. The procedures in this file use
the general XMl parsing procedures found in
xmlParserLib.tcl. This is a
non-validating parser, meaning that it does not check to make sure
that the XML file correctly follows its DTD.
The userEvent XML file must adhere to the format
specified in userEvent.dtd.
Description
This script has general methods for parsing the XML used to provide
annotation and event information to Annot3D source code.
This is a non-validating parser, meaning that it does not check to make
sure that the XML file correctly follows its DTD.
Annot3D demos are run using vtk. The following demos can be found in the
Annot3D FILE STRUCTURE in the "demo" directory. Most demos require XML files that can be found in the FILE STRUCTURE as well. Current versions can be downloaded separately on this page under XML FILES.
noInteractorDemo.tcl
parserBonesDemo.tcl
parserHeadDemo.tcl
parserHumerusDemo.tcl
parserMultClient.tcl
parserScapulaDemo.tcl
proceduresDemo.tcl
Description
Reads a sample scene XML file and renders the volume along with all
annotations specified in the file. This assumes the volume data is in the
location specified in the XML file. The volume currently being used is the
head data. In this case, the xml file being used has the interactor
turned off, meaning that the user cannot interact with the image once it
is rendered. The head should show up rotated with the head picked. A jpg
matching this image should appear in data/snapshots.
Data Used
$env(ANNOT_ROOT)/data/headsq/quarter. (head example)
XML File(s) Used
$env(ANNOT_ROOT)/xmlFiles/noInteractorScene.xml
$env(ANNOT_ROOT)/xmlFiles/pickHeadUserEvent.xml
Description
Reads and demos the scapula, humerus, and clavicle datasets based the
xml file used. All volume information and annotations
are specified in the XML file. The data files used are .vtk surface files
that have already been through some preprocessing. Some mesh
simplification is done before rendering.
Data Used
$env(ANNOT_ROOT)/data/surfaces/clavicleSurf100.02.vtk (clavicle example)
$env(ANNOT_ROOT)/data/surfaces/scapulaSurf100.02.vtk (scapula example)
$env(ANNOT_ROOT)/data/surfaces/humerusSurf100.03.vtk (humerus example)
XML File(s) Used
$env(ANNOT_ROOT)/xmlFiles/bonesScene.xml
$env(ANNOT_ROOT)/xmlFiles/bonesUserEvent.xml
Description
Reads a sample scene XML file and renders the volume along with all
annotations specified in the file. This assumes the volume data is in the
location specified in the XML file. The volume currently being used is the
head data.
Data Used
$env(ANNOT_ROOT)/data/headsq/quarter. (head example)
XML File(s) Used
$env(ANNOT_ROOT)/xmlFiles/headScene.xml
$env(ANNOT_ROOT)/xmlFiles/pickHeadUserEvent.xml
Description
Reads and demos the humerus dataset based on the xml file used. All volume
information and annotations are specified in the XML file.
The data file used is a .vtk surface file that has already
been through some preprocessing. Some mesh simplification is
done before rendering.
Data Used
$env(ANNOT_ROOT)/data/surfaces/humerusSurf100.03.vtk (humerus example)
XML File(s) Used
$env(ANNOT_ROOT)/xmlFiles/humerusScene.xml
$env(ANNOT_ROOT)/xmlFiles/bonesUserEvent.xml
Description
Reads several sample scene XML files and renders the volumes along with
all annotations specified in the files into separate rendering windows.
This assumes the volume data is in the location specified in the XML file.
The volumes currently being used are head data and clavicle data.
Data Used
$env(ANNOT_ROOT)/data/headsq/quarter. (head example)
$env(ANNOT_ROOT)/data/surfaces/proceduresDemoClavicleSurf.vtk (clavicle example)
XML File(s) Used
$env(ANNOT_ROOT)/xmlFiles/scene1.xml
$env(ANNOT_ROOT)/xmlFiles/scene2.xml
$env(ANNOT_ROOT)/xmlFiles/scene3.xml
$env(ANNOT_ROOT)/xmlFiles/userEvent1.xml
$env(ANNOT_ROOT)/xmlFiles/userEvent2.xml
$env(ANNOT_ROOT)/xmlFiles/userEvent3.xml
Description
Reads and demos the scapula dataset based on the xml file used. All volume
information and annotations are specified in the XML file.
The data file used is a .vtk surface file that has already
been through some preprocessing. Some mesh simplification is
done before rendering.
Data Used
$env(ANNOT_ROOT)/data/surfaces/scapulaSurf100.02.vtk (scapula example)
XML File(s) Used
$env(ANNOT_ROOT)/xmlFiles/scapulaScene.xml
$env(ANNOT_ROOT)/xmlFiles/scapulaUserEvent.xml
Description
Demonstrates how to use all of the Annot3D src procedures.
Includes all of the Annot3D src code via "source"ing libIncludes.tcl .
Sets up renderers "one" and "two" simultaneously using calls to makeEnv.
Sets up renderer "three" alone, only calling makeEnv once.
Sets up renderer "four" using the parser and Quits that client.
Data Used
$env(ANNOT_ROOT)/data/headsq/quarter. (head example)
$env(ANNOT_ROOT)/data/bosBones/clav.vtk (clalvicle example)
$env(ANNOT_ROOT)/data/surfaces/proceduresDemoClavicleSurf.vtk (clavicle example)
XML File(s) Used
$env(ANNOT_ROOT)/xmlFiles/headScene.xml
Annot3D can be used to visualize data in several formats. The following
data sets are used in the Annot3D DEMOS and provide examples
of data that Annot3D can process. They can be found in the Annot3D
FILE STRUCTURE in the "data" directory or they
can be downloaded from the
Downloads and Installation site.
bosBones
headsq
mummyRaw
phantom
surfaces
Description
The bosBones folder contains three data sets in .vtk image format (scapula example, clavicle example, and humerus example). These images were created from CT scan data with 1.3mm resolution. The CT Dicom format was converted to .vtk image file format using code from Gordon Kindleman's collection.
bosBones includes the following data sets:
- scap.vtk (scapula example)
- humer.vtk (humerus example)
- clav.vtk (clavicle example)
Read By
$env(ANNOT_ROOT)/src/sceneProcedures/
libPointsReader.tcl
Description
The headsq folder (head example) contains a single data set composed of a
series of 93 individual 2D slices (named quarter.* ranging from 1-93) in
raw format. This data was included with the vtk4.0 Users Guide.
Read By
$env(ANNOT_ROOT)/src/sceneProcedures/
libVolumeReader.tcl
Description
The mummyRaw folder (mummy example) contains a single data set composed of
a series of 110 individual 2D slices (named mummy-*.raw ranging from 2-111)
in raw format. The DICOM2 Instructions
were used to convert CT dicom data files to raw format.
Read By
$env(ANNOT_ROOT)/src/sceneProcedures/
libVolumeReader.tcl
Description
The phantom folder (smile example) contains a single data set composed of
a series of 4 individual 2D slices (named smile-*.raw ranging from 1-4) in
raw format. The DICOM2 Instructions
were used to convert CT dicom data files to raw format.
Read By
$env(ANNOT_ROOT)/src/sceneProcedures/
libVolumeReader.tcl
Description
The surfaces data sets are single .vtk filtered surface files.
$env(ANNOT_ROOT)/src/sceneProcedures/libPointsReader.tcl
was used to convert .vtk image files (bosBones)
to these .vtk filtered surface files using the commands:
makePointsReader bonename "$env(ANNOT_ROOT)/data/bosBones/bonename.vtk" 100
saveSurface bonename "$env(ANNOT_ROOT)/data/surfaces/filenameSurf"
surfaces includes the following data sets:
- clavicleSurf100.02.vtk (clavicle example)
- humerusSurf100.03.vtk (humerus example)
- scapulaSurf100.02.vtk (scapula example)
- proceduresDemoClavicleSurf.vtk (clavicle example)
Read By
$env(ANNOT_ROOT)/src/sceneProcedures/
libSurfaceViewer.tcl
Annot3D docs are a miscellaneous collection of information. The following
docs can be found in the Annot3D FILE STRUCTURE
in the "docs" directory or they can be viewed/downloaded from this site:
Settings
DICOM2 Instructions
Annot3D has the following FILE STRUCTURE. The local environment variable
ANNOT_ROOT should be set
to correspond to the Annot3D directory.
Annot3D
__________
* = file has a copy on the web under 'webdocs'
- README.txt
- data
- demo
- docs
-
webServer
- *xmlFiles
- scene.dtd
- userEvent.dtd
- *sceneTags.txt
- *userEventTags.txt
- *blank.xml
- bonesScene.xml
- bonesUserEvent.xml
- headScene.xml
- humerusScene.xml
- minScene.xml
- minUserEvent.xml
- noInteractorScene.xml
- pickHeadUserEvent.xml
- scapulaScene.xml
- scapulaUserEvent.xml
- scene1.xml
- scene2.xml
- scene3.xml
- userEvent1.xml
- userEvent2.xml
- userEvent3.xml
- src
Tcl and VTK software need to be installed properly and the environment variables for Annot3D and vtk
(ANNOT_ROOT and VTK_DATA_ROOT) need to be set.
see the Annot3D download and installation page
The larger bone demos require at least 1 G of memory to run interactively.
- Annot3D is still trial software and undoubtedly has problems that need to be fixed.
- Annot3D slows as the dataset size increases and as more datasets are loaded on a single machine. The larger bone demos require at least 1 G of memory to run interactively.
- The web server does not run on Unix, only Windows.
- Annot3D has only been tested once in an academic setting. Usability tests are scheduled to be run in Spring, 2003.
- Vtk off screen rendering does not work on Unix. None of the known "fixes" found in the Vtk archives work.
- When multiple clipping objects are used simultaneously the image can become distorted.
To report a bug, send mail to ...
- Jennifer Simpson at
(simpson@cs.utah.edu)
for source code, interfacing, and parser problems.
- Janna Balling at
(balling@sci.utah.edu)
for source code, web server (windows), and web page problems.
Jennifer Simpson
(simpson@cs.utah.edu)
Scientific Computing and Imaging Institute, University of Utah
Janna Balling
(balling@sci.utah.edu)
Scientific Computing and Imaging Institute, University of Utah
Last modified: Tue Jan 6 15:19:46 MST 2004
by Jenny Simpson