|
||
|
VTK Programs:
Bonemat Programs:
OS: |
Windows,
Unix, Linux |
CC
tags: |
-LANG:std |
Requirements: |
|
Description: |
Converts
an Amira TetMesh or Surface output (hypermesh ascii format) to dyna3d .d
format. |
Programming
Notes: |
|
OS: |
Windows,
Unix, Linux |
CC
tags: |
-LANG:std |
Requirements: |
|
Description: |
Converts
an Amira TetMesh or Surface output (hypermesh ascii format) to .k format. |
Programming
Notes: |
Converts
*nodes to *NODEs and *tetras to *ELEMENT_SOLIDs. |
OS: |
Windows,
Unix, Linux |
CC
tags: |
-LANG:std |
Requirements: |
|
Description: |
Converts
an Amira TetMesh or Surface output (hypermesh ascii format) to .off format. |
Programming
Notes: |
Lists
*nodes first followed by *tetras (with -1 offset for connectivity set. Ex:
tetra(10,6,3,4,5) is printed as 6 2 3 4. |
OS: |
Windows,
Unix, Linux |
CC
tags: |
-LANG:std |
Requirements: |
|
Description: |
Changes
property values (numbering and material values) of a .k file and outputs in
tabbed format. |
Programming
Notes: |
Since
each of these changes are optional, a series of if statements control the
output while reading and printing each line. Also, since .k files may
have multiple occurrences and various orders of NODEs, ELEMENT_SOLIDs, and
ELEMENT_SHELLs, boolean variables are set to distinguish the current
line. |
OS: |
Windows,
Unix, Linux |
CC
tags: |
-LANG:std |
Requirements: |
|
Description: |
Changes
normals for all Elelment Shells and their Thicknesses given in a .k file. |
Programming
Notes: |
A
shell with connectivity 1 2 3 3 will be printed with connectivity 3 2 1 1. |
OS: |
Windows,
Unix, Linux |
CC
tags: |
-LANG:std |
Requirements: |
|
Description: |
Changes
shell property values of a .k file for an input list of shell indexes (output
of truegrid). |
Programming
Notes: |
Since
the input shell indexes can be in two overlapping groups of numerical order,
the file is repeatedly scanned until all indexes are found. |
OS: |
Windows,
Unix, Linux |
CC
tags: |
-LANG:std |
Requirements: |
|
Description: |
Extracts
the elements of given nodes (output of truegrid) from a .k file |
Programming
Notes: |
Since
the elements can include nodes that aren’t on the surface, an additional
origin node is printed and used in the connectivity. |
OS: |
Windows,
Unix, Linux |
CC
tags: |
-LANG:std |
Requirements: |
findMaxNode.cpp |
Description: |
Finds
the number of surface nodes (largest node number) used in the given shells of
a .k file. |
Programming
Notes: |
|
OS: |
Windows,
Unix, Linux |
CC
tags: |
-LANG:std |
Requirements: |
circleMapper.h,
circleMapper.cpp |
Description: |
Converts
a 2D 8-bit image into a 2D mapped .k image. |
Programming
Notes: |
|
OS: |
Windows,
Unix, Linux |
CC
tags: |
-LANG:std |
Requirements: |
|
Description: |
Converts
.k file to .nike format. |
Programming
Notes: |
Converts
*NODEs from index, xcord, ycord, zcord, part#, part# to index, part#, xcord,
ycord, zcord, part#. Since original NODES may be separated by either
commas or spaces, boolean variables are used to distinguish the inputs. |
OS: |
Windows,
Unix, Linux |
CC
tags: |
-LANG:std |
Requirements: |
|
Description: |
Makes new shells for an input list of shell indexes (output of truegrid) by copying connectivity of existing shells of a .k file. New shells will have new numbering, material values (part #s), and thickness values as specified. |
Programming
Notes: |
Assumes input shell indexes are in numerical
order. |
OS: |
Windows,
Unix, Linux |
CC
tags: |
-LANG:std |
Requirements: |
|
Description: |
Prints the contents of two files into one. |
Programming
Notes: |
|
OS: |
Windows
,Unix, Linux |
CC
tags: |
-LANG:std
–lm (the
–lm tag needs to be at the end of the compile command, after all other tags
and arguments) |
Requirements: |
Mesh.h,
Mesh.cpp, ImageSet.h, ImageSet.cpp |
Description: |
The Bonemat program serves
the same function as the modulus program and works much better. This code calculates intensity by averaging
the 9 nearest voxels to each node whereas the Bonemat code uses a more
effective element volume integration algorithm. This program is no longer maintained or
recommended for use. The raw data input should
be in little endian format (use ImageJ to change). Computes the elastic
modulus of shells in a .k file using the raw data. Prints findModulus.log containing the
calculated EMs and statistics. Also
prints a .k file with new elements using the connectivity from the given
shells. Specifications about the data
and .k file are needed. |
Programming
Notes: |
Wow,
this is crazy! Ok, first modulus.cpp gets info from the user and manages calls to the
ImageSet and Mesh class member functions. The ImageSet
class keeps track of the raw data.
Nothing too tricky here, just scan in the data and save variables for
x, y, z dimensions and slice thickness.
It should be noted that the imageSet will be read in with little endian
format, not Big endian. It makes a
difference!!! The Mesh
class does all the work. ReadMesh
saves the node coordinates from the .k file.
FindModulus calculates the EM for every node (saved in
ReadMesh). It finds the intensity of a
node and its 8 nearest neighbors (from the ImageSet), takes the average, then
calculates the Hosenfield Units, Apparent Density, and Elastic Modulus. Checks are made to ensure that there are 8
neighbors. A default EM is assigned if
the node is on the mesh surface, the Average intensity is too small
(<802), or the AD is negative. A
log file (findModulus.log) is written with statistics on all EMs other than
the assigned cases. LabelElements
calculates the EM for each ELEMENT_SOLID in the .k file. It uses the average EM (calculated in
FindModulus) of the 4 element vertices.
The shell material value (part #) is assigned by dividing the total EM
range by 10. Each sub-range is
assigned a different material value. PrintElements
prints a .k file with new ELEMENT_SOLIDs having index specified by the user, material value (from
LabelElements) and connectivity nodes
(taken from original .k shells). |
OS: |
Windows,
Unix, Linux |
CC
tags: |
-LANG:std |
Requirements: |
|
Description: |
The nodeReader class reads
a node index file (output of truegrid) and returns each integer when getNext
is called. It expands integers when
necessary (Ex: 4:6 expands to 4 5 6).
0 is returned at the end of the list.
Since there can be multiple groups of node lists in a file, it ignores
anything other than integers. This is
used by many other programs. |
Programming
Notes: |
The
function setFile opens the node file for reading and scans through
‘till the nodes are found. The
function getNext expands semicolons by keeping track of the stopnode. If using in code, it should look something
like this: #include
"path/nodeReader/nodeReader.cpp" //some
code FILE
*fileName=fopen("file.nodes","rt"); nodeReader
name; name.setFile(fileName); int nextNode;
//some more code nextNode=name.getNext(); nextNode=name.getNext(); |
OS: |
Windows,
Unix, Linux |
CC
tags: |
-LANG:std |
Requirements: |
|
Description: |
Converts
a file in .off format to .byu format. |
Programming
Notes: |
When
printing triangles, values are offset by +1 and the sign of the third node is
reversed. Ex. 3 0 1 2163 (.off) is
converted to 1 2 -2164 (.byu) |
OS: |
Windows,
Unix, Linux |
CC
tags: |
-LANG:std |
Requirements: |
|
Description: |
Converts normals.vtk files (output from
normals.tcl) into a format listing only the normals values. The values are output to a new file. |
Programming
Notes: |
|
OS: |
Windows,
Unix, Linux |
CC
tags: |
-LANG:std |
Requirements: |
|
Description: |
Expands and prints a node index file (output of
truegrid) to a new file with 8 nodes per line. (Ex: 4:6 expands to 4, 5, 6). |
Programming
Notes: |
Uses
a nodeReader to get each node. |
OS: |
Windows,
Unix, Linux |
CC
tags: |
-LANG:std
–lm (the
–lm tag needs to be at the end of the compile command, after all other tags
and arguments) |
Requirements: |
nodeReader, sphereFit.cpp, sphereMapper.h,
sphereMapper.cpp |
Description: |
Converts
a .k file of a hemisphere into a 2D mapped .k image. |
Programming
Notes: |
The
Least Squares sphere fitting algorithm was taken mostly from LeastSquaresFitting.pdf |
OS: |
Windows,
Unix, Linux |
CC
tags: |
-LANG:std |
Requirements: |
|
Description: |
Converts
an Amira surface output (HxSurface ascii format) to .byu format. |
Programming
Notes: |
When
printing triangles, the sign of the third node is reversed. Ex. 4 3 2 (.surf) is converted to 4 3 -2
(.byu). Since the number of triangles must
be printed in the .byu header, the vertex values are stored to a temporary
file (buffer.txt) until the .byu header is complete. The number of edges in the .byu file is
calculated by multiplying the number of triangles by 3. |
OS: |
Windows,
Unix, Linux |
CC
tags: |
-LANG:std |
Requirements: |
|
Description: |
Converts
an Amira surface output (HxSurface ascii format) to .off format. |
Programming
Notes: |
When
printing triangles, values are preceded by the part number and offset by
-1. Ex. 4 3 2 (.surf) is converted to
3 3 2 1 (.off). Since the number of
triangles must be printed in the .off header, the vertex values are stored to
a temporary file (buffer.txt) until the .off header is complete. The number of edges in the .off file is
calculated by multiplying the number of triangles by 3. |
OS: |
Windows,
Unix, Linux |
CC
tags: |
-LANG:std |
Requirements: |
|
Description: |
Creates new element layers
around existing shells of a .k file for given shell indexes (file output of
truegrid) using given normal values (.vtk file output of
normals.tcl)\n"); Requires input
of the number of existing nodes to use (most often, only the surface nodes
are needed). Allows up to 3 new
element layers to be created with a specified total thickness (in mm) for all
new layers. |
Programming
Notes: |
The main
function gets info from the user and manages calls to the other functions. The oldNodes
structure is used to store the coordinates (from .k file) and normal values
(from .vtk file) of existing nodes. A
boolean variable is used to track which nodes are used in actually making the
new element layers. The newCords
structure is used to store node coordinate values for the new elements. One array of newCords is used for each new
element layer. The storeNodes
function reads the .k file and stores the node coordinates in an oldNodes
array. The array index corresponds to
one less than the original node number.
Ex. Original node #1 has array index 0. The storeNormals
function reads the normals.vtk file and stores the node normals in an
oldNodes array. Three consecutive
values in the normals.vtk file correspond to the x, y, and z components of a
node. The computeElements
function computes the node values and connectivity of the new element
layers. The original element shells
are obtained by reading the .k file and finding the given shell indexes in
the truegrid file. The node numbers in
the original element connectivity are looked up in the oldNodes array. If the node has not been encountered yet,
new node coordinates for the new element shells are computed (using the
oldNodes’ normal values and the given layer thickness) and stored in the
newCords arrays. A new element is then
printed for each layer according to the following: number
– the first element number is specified by the user. Element number is then incremented by 1
with the order in which it is printed. part
# - specified by user and constant for all layers. node
connectivity – The eight values are printed in the reverse order of the
original elements. The first four
represent the lower boundary of the layer, while the last four represent the
upper boundary. Ex. If the old shell
was 1 2 1 2 3 3, then a new element in the first layer would use the original
element for the lower boundary and the new first layer element for the upper
giving something like 1 2 3 2 1 1 13 12 10 10 . The
printNodes function computes the
index for the new nodes and prints them.
A list of the original nodes that were used is also printed to a log
file followed by a count of the number changed. For each layer generated the new node is
computed according to the following: index
– found by adding the total number of original nodes multiplied by the layer
number to the original index number. This
ensures that no node index is repeated even though some node indexes may be
skipped (due to their never being used in the new element connectivities). coordinates
– calculated during the
computeElements function by adding the layer thickness multiplied by the x y
or z components of the node normals to the x y or z coordinates respectively. |
OS: |
Windows |
Requirements: |
ANN
software |
Description: |
Calculates the thickness between Amira cortical and
trabecular surfaces (HxSurface ascii format) for all nodes of an Amira
TetMesh (hypermesh ascii format) along the given cortical normals (.vtk file
output of normals.tcl). A log of the
thickness and angle values found is written to an ans (.log) file. A log of the calculations is written to a
table (.log) file. |
Programming
Notes: |
All of the program functions are contained
in newthickness.cpp. The other
files contain code for the ANN software. The main
function gets info from the user and manages calls to the other functions. The parse_mesh_file
and parse_surf_file functions get
and store the vertex coordinates of the mesh, cortical, and trabecular files
in an AnnTableWrap structure. The parse_norm_file
function gets and stores the normal values from the cortical normals file
into an ANNpoint array. The calculate_and_print
function does the computations and prints the results. It takes the mesh vertices and finds the
nearest neighbor cortical vertices using the program ANN (University of Maryland).
The cortical vertices are used because the geometry is much more
representative of the CT data than the mesh vertices. Next, the 400 (defined as NNB at beginning)
nearest neighbor trabecular vertices (to the cortical vertices) are
found. A normalized vector is
calculated by taking the differences between these cortical vertices and
trabecular vertices. The angle theta
between the cortical normals and the normalized vector is calculated and
sorted. The length of the vector from
the cortical to the trabecular points is also calculated. The angle theta and the length are then
each given a weight factor. In the
lengths sorting, the length based upon the angle is normally taken. However, if the length based on the angle
is 1.5 greater than the length (tested in lenPtToSurf function) based solely on the length then the program
replaces the length based on the angle by the shortest length found. We found that this method solved most of
the problems that the program was encountering with sharp edges. Finally, the distance between the cortical
bone and the trabecular bone is reported as the thickness of the bone. This distance is written out to a new .k
file. Thus a nodal dependent cortical bone thickness is defined for each
shell element node. |
OS: |
Windows,
Unix, Linux |
Requirements: |
VTK,
Tcl, colors.tcl, vtkInt.tcl, vtkImageInclude.tcl |
Description: |
Gets
the data normals from an Amira Surface output (hypermesh ascii format). It also visualizes the surface in a VTK
window. |
Programming
Notes: |
The
first lines (all beginning with set) need to be set for the specific paths
when installed. |
Created by Janna Balling j.balling@utah.edu |
|
For |