Merge lp:~ulrika-dreifaldt/forssim/ulrika_new_doc into lp:forssim
- ulrika_new_doc
- Merge into development
Proposed by
Ulrika Dreifaldt
Status: | Merged |
---|---|
Merged at revision: | not available |
Proposed branch: | lp:~ulrika-dreifaldt/forssim/ulrika_new_doc |
Merge into: | lp:forssim |
Diff against target: | None lines |
To merge this branch: | bzr merge lp:~ulrika-dreifaldt/forssim/ulrika_new_doc |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Ulrika Dreifaldt | Approve | ||
Review via email:
|
Commit message
Description of the change
To post a comment you must log in.
Revision history for this message
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
Ulrika Dreifaldt (ulrika-dreifaldt) wrote : | # |
Revision history for this message
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
Ulrika Dreifaldt (ulrika-dreifaldt) wrote : | # |
looks amazing!
review:
Approve
Revision history for this message
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
Jonas Forsslund (jonas.forsslund) wrote : | # |
Well done!
jonas@ubuntu:
lp:~ulrika-dreifaldt/forssim/ulrika_new_doc
jonas@ubuntu:
nice. I try to reply email with command:
+1
2009/7/15 Ulrika Dreifaldt <email address hidden>
> Ulrika Dreifaldt has proposed merging
> lp:~ulrika-dreifaldt/forssim/ulrika_new_doc into lp:forssim.
>
> Requested reviews:
> Forsslund Systems (forsslundsystems)
>
> Changed documentation. Only spelling and grammar changes.
> --
>
> https:/
> Your team Forsslund Systems is subscribed to branch lp:forssim.
>
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'doc/02_Theory_and_user_guide.dox' |
2 | --- doc/02_Theory_and_user_guide.dox 2009-05-18 09:14:14 +0000 |
3 | +++ doc/02_Theory_and_user_guide.dox 2009-07-15 12:38:40 +0000 |
4 | @@ -15,7 +15,7 @@ |
5 | \li Teem |
6 | \li OpenHaptics: (proprietary drivers) |
7 | \li QT: GUI and window-handling. Installed with Ubuntu. |
8 | - \li Pygame: Is needed to get events from the pedals. Install even if the pedal is not used. |
9 | + \li Pygame: Is needed to get events from the pedals, install even if the pedals are not used. |
10 | |
11 | \b H3D |
12 | |
13 | @@ -27,20 +27,19 @@ |
14 | \b H3D - Fields |
15 | |
16 | Fields are the most important building block of the whole API. In its simplest form, a Field is simply |
17 | -an event handling mechanism. The fields are arranged in a network through which data is sent and handled by each field in turn. The connection between the fields is called routes and can be |
18 | -of different types: one-to-one, one-to-many or many-to-many. |
19 | +an event handling mechanism. The fields are arranged in a network through which data is sent and handled by each field in turn. The connection between the fields is called routes and can be of different types: one-to-one, one-to-many or many-to-many. |
20 | |
21 | |
22 | \b H3D - Nodes |
23 | |
24 | -Nodes are the traditional building blocks of a scene graph. Nodes have only one function in H3D, to be containers for fields for easier management. An entire application can be set up without the use of nodes, however such an application would soon become very hard to survey as the application becomes more complex. |
25 | +Nodes are the traditional building blocks of a scene graph. Nodes have only one function in H3D, to be containers for fields for easier management. An entire application can be set up without the use of nodes. However such an application would soon become very hard to survey, as the application becomes more complex. |
26 | |
27 | -More useful information about programming with H3D in H3D API Manual: http://www.h3dapi.org/uploads/api/H3DAPI_20_beta/H3D%20API%20Manual.pdf |
28 | +More useful information about programming with H3D can be found in the H3D API Manual: http://www.h3dapi.org/uploads/api/H3DAPI_20_beta/H3D%20API%20Manual.pdf |
29 | |
30 | |
31 | \b X3D |
32 | |
33 | -X3D is the ISO standard XML-based file format for representing 3D computer graphics, the successor to the Virtual Reality Modeling Language (VRML). The base for every scene is a x3d file containing information about haptic device calibration, stylus (drill graphics), which paths to use and their respective properties including properties of the force feedback calculation and carving . |
34 | +X3D is the ISO standard, XML-based, file format for representing 3D computer graphics, the successor to the Virtual Reality Modeling Language (VRML). The base for every scene is a x3d file containing information about haptic device calibration, stylus (drill graphics), which paths to use and their respective properties including properties of the force feedback calculation and carving. |
35 | |
36 | Read more about X3D: http://en.wikipedia.org/wiki/X3D |
37 | |
38 | @@ -53,14 +52,14 @@ |
39 | |
40 | \b Teem |
41 | |
42 | -Teem is a coordinated group of libraries for representing, processing, and visualizing scientific raster data. Teem includes command-line tools that permit the library functions to be quickly applied to files and streams without having to write any code. The most important and useful libraries in Teem are: nrrd (and the unu command-line tool on top of it) supports a range of operations for transforming N-dimensional raster data (resample, crop, slice, project, histogram, etc.), as well as the NRRD file format for storing arrays and their meta-information. |
43 | +Teem is a coordinated group of libraries for representing, processing, and visualizing scientific raster data. Teem includes command-line tools that permit the library functions to be quickly applied to files and streams without having to write any code. The most important and useful libraries in Teem are: nrrd (and the unu command-line tool on top of it) it supports a range of operations for transforming N-dimensional raster data (resample, crop, slice, project, histogram, etc.), as well as the NRRD file format for storing arrays and their meta-information. |
44 | |
45 | Read more: http://teem.sourceforge.net |
46 | |
47 | |
48 | \b MedX3D |
49 | |
50 | -MedX3D is an implementation of Volume Rendering component of X3D. MedX3D contains nodes for visual rendering of volume data, such as medical data from CT/MRI-scans. A X3D file using X3D volume rendering component nodes must specify a volume data node, a volume style node and the data (NRRD file) for which to apply this style. Forssim project also use the toolkit to include an implemetation of the Marching cubes algorithm.MedX3d requires Teem. |
51 | +MedX3D is an implementation of Volume Rendering component of X3D. MedX3D contains nodes for visual rendering of volume data, such as medical data from CT/MRI-scans. A X3D file using X3D volume rendering component nodes must specify a volume data node, a volume style node and the data (NRRD file) for which to apply this style. Forssim project also use the toolkit to include an implementation of the Marching cubes algorithm.MedX3d requires Teem. |
52 | |
53 | Read more:http://www.h3dapi.org/modules/mediawiki/index.php/MedX3D |
54 | |
55 | @@ -72,16 +71,16 @@ |
56 | \section PolygonBasedModels Polygon Based Models |
57 | The traditional way to render computer graphics is with the use of polygons. A polygon is a flat surface with three or more sides. Usually only triangles are used since they are the simplest possible surface element. Any model is then created by putting lots of polygons together to make up its surface. Each polygon can then be painted in a specific color or with a more complex coloring by the use of textures, which are pictures that are pasted on to the polygon. |
58 | |
59 | -If you only use solid objects, and are never interested in what's below the surface, polygon based models are a very functional simplification. We use polygon based models for the surronding objects that you do not need to drill in. |
60 | +If you only use solid objects, and are never interested in what's below the surface, polygon based models are a very functional simplification. We use polygon based models for the surrounding objects that you do not need to drill in. |
61 | |
62 | |
63 | \section VoxelBasedModels Voxel Based Models |
64 | If you need objects that actually have something on the inside -- either because you want to be able to see partly through them, or if you want to be able to remove arbitrary parts of the model and see what's behind them -- then you need voxel based models instead. |
65 | |
66 | -A voxel based model is built up of voxels instead of polygons. A voxel i a small volume element, and means that the entire volume is modelled and not just its surfaces. This is puts a harder strain on the processor than using polygons, but in some cases the advantages outweigh the costs. We use it for the teeth we drill in for a number of reasons. |
67 | +A voxel based model is built up of voxels instead of polygons. A voxel is a small volume element, and means that the entire volume is modelled and not just its surfaces. This puts a harder strain on the processor than using polygons, but in some cases the advantages outweigh the costs. We use it for the teeth we drill in for a number of reasons. |
68 | |
69 | -# Since we are making an oral surgery simulator, we tend do do a lot of drilling in teeth and bone. This means that we very often remove parts of the surface and bares what lies beneath. |
70 | - -# The original data is taken from a CT-scan and is therefor already in a voxel based format. |
71 | + -# The original data is taken from a CT-scan and is therefore already in a voxel based format. |
72 | -# We want to be able to make different parts of the teeth transparent, to allow the user to see what parts of the tooth (even inside it) that need to be removed. |
73 | |
74 | Our voxel based model has the size 113 x 190 x 131 voxels, which is fairly small. Normal sizes are 256 x 256 x 256, and nowadays even 512 x 512 x 512. |
75 | @@ -94,51 +93,51 @@ |
76 | The Material Segmentation Model Node defines each material expected within the volume under consideration. These include the likes of Air and Tooth Enamel. Using this Node, we can also define the hardness of each material. |
77 | |
78 | \subsection PartitionModel Partition Model |
79 | - The Partition Model is used to specify the parts that make up the volume. Regarding our application, we wish to divide a tooth into two parts, namely the Crown and the Root. It is import to note that the Crown consists of a number of different materials. Likewise, a single material can be found in both the Crown and Root. |
80 | + The Partition Model is used to specify the parts that make up the volume. Regarding our application, we wish to divide a tooth into two parts, namely the Crown and the Root. It is important to note that the Crown consists of a number of different materials. Likewise, a single material can be found in both the Crown and the Root. |
81 | |
82 | \subsection DrillingSteps Drilling Steps |
83 | - The removal of a tooth can be defined in terms of a number of drilling steps. For example, one step might include the removal of the Crown. The drilling steps Node defines each of these steps. This node also contains functionality so that drilling steps can be added or edited. |
84 | + The removal of a tooth can be defined in terms of a number of drilling steps, for example, one step might include the removal of the Crown. The Drilling Steps Node defines each of these steps. This node also contains functionality so that drilling steps can be added or edited. |
85 | |
86 | \subsection VolumeModel Volume Model |
87 | - The Volume Model Node contains data for every voxel contained within our volume. For example, we store here which material and which partition each voxel belongs to. In order to establish such information, a material nrrd file and a partitions nrrd file are passed to the Volume Model Node. Additionally, we pass our Material Segmentation Model and our Partition Model objects as fields to the Volume Model Node. This allows us to confirm that the nrrd files contain information for only those materials and partitions defined previously by the Material Segmentation Model and Partition Model Nodes. |
88 | - |
89 | - Likewise the same idea applies for the drilling steps, with the Volume Model also storing the drilling steps for each voxel. This infomation is again read from a nrrd file. |
90 | - |
91 | - The Volume Model Node also has a field which stores how much material remains for each voxel. This information is updated as we bore within the volume. |
92 | - |
93 | - We also have a field which stores for each voxel the time at which it was completely removed via the drilling process. This information can be saved to nrrd file and used again for such purposes as playback. |
94 | + The Volume Model Node contains data for every voxel contained within our volume, for example; here we store which material and which partition each voxel belongs to. In order to establish such information, a material nrrd file and a partition nrrd file are passed to the Volume Model Node. Additionally, we pass our Material Segmentation Model and our Partition Model objects as fields to the Volume Model Node. This allows us to confirm that the nrrd files contain information for only those materials and partitions defined previously by the Material Segmentation Model and Partition Model Nodes. |
95 | + |
96 | + Likewise, the same idea applies for the drilling steps, with the Volume Model also storing the drilling steps for each voxel. This infomation is again read from a nrrd file. |
97 | + |
98 | + The Volume Model Node also has a field which stores how much material that remains for each voxel. This information is updated as we bore within the volume. |
99 | + |
100 | + We also have a field which stores the time at which it was completely removed via the drilling process, for each voxel. This information can be saved to nrrd file and used again for such purposes as playback. |
101 | |
102 | |
103 | \subsection VibrationNode Vibration Node |
104 | - This node adds a small vibration in all 3 dimensions of the haptic device to mimic the feeling of a activated drill. The drill is activated by a switch. No more functionallity is present in this node, it is purely an X3D node. |
105 | + This node adds a small vibration in all 3 dimensions of the haptic device to mimic the feeling of an activated drill. The drill is activated by a switch. No more functionallity is present in this node, it is purely an X3D node. |
106 | |
107 | |
108 | \subsection StateMachine State Machine |
109 | - The State Machine Node keeps trac of all the stages in an exercise and what requirements needs to be fullfiled in order to advance to the next state. |
110 | -The field of requirements which can be used are: |
111 | + The State Machine Node keeps track of all the stages in an exercise and which requirements that need to be fulfilled in order to advance to the next state. |
112 | +The fields of requirements which can be used are: |
113 | - triggerPointsRequiredField, the points in space to which the distance from the probe is calculated. |
114 | -- distancesRequiredField, the distance between the probe and the trigger point which must be less than. |
115 | +- distancesRequiredField, the distance between the probe and the trigger point which must be less than a predefined value set in a X3D-file. |
116 | - forcesRequiredField, the minimum force which must be exceeded in order to pass to the next state. |
117 | -- deviceShapesRequiredField, the device used e.g drill or elevator. |
118 | -- fractionOfExpertRequiredField, the fraction of how the expert has drilled in comparsion to what the user has done in this drill step. |
119 | +- deviceShapesRequiredField, the device used, e.g. drill or elevator. |
120 | +- fractionOfExpertRequiredField, the fraction of how the expert has drilled in comparison to what the user has done in this drill step. |
121 | - rotationAnglesRequiredField, the minimum angle in radians which the probe must be rotated around its axis to pass the state. |
122 | |
123 | -In addition to the requreiments there are some fields which specify the action taken when the requirements above are all passed. |
124 | -- partitionNamesField, the name of the partition that will be removed during the completion of this state, e.g Crown, Root etc. |
125 | -- drillingStepsField, the drillstep to whitch the current drill is connected. |
126 | +In addition to the requirements there are some fields which specify the action taken when the requirements above are all passed. |
127 | +- partitionNamesField, the name of the partition that will be removed during the completion of this state, e.g. Crown, Root etc. |
128 | +- drillingStepsField, the drill-step to which the current drill is connected. |
129 | - stateField, the current state, should initially be set to 0. |
130 | |
131 | |
132 | \subsection DefaultValues Default Values |
133 | - The default value node contains surtain values which are not directly connected to any other node. The values are premerly used by the UI in order to set parameters for other fields, e.g max drillspeed. The fields curretnly present in the default value node are |
134 | + The default value node contains certain values which are not directly connected to any other node. The values are primly used by the UI in order to set parameters for other fields, e.g. max drill-speed. The fields currently present in the default value node are: |
135 | - scaleFactorField, which are not currently used by anything |
136 | - rotationZoomFactorField, the initial zoom factor of rotational calibration of the model. |
137 | - translationZoomFactorField, the initial zoom factor of translational calibration of the model. |
138 | -- drillSpeedMaxField, the max drillspeed that the user can currently achive by pressing the pedal to the floor. |
139 | +- drillSpeedMaxField, the maximum drill-speed that the user can currently achieve by pressing the pedal to the floor. |
140 | - cutRadiusField, the radius of the drill head |
141 | - objectToMoveField, the index of the initial object to move when using the rotation or translation buttons. |
142 | |
143 | -This node is a pure X3D node and has no implementation, however the node is used by the UI for easy access of initial values. |
144 | +This node is a pure X3D node and has no implementation. However, the node is used by the UI for easy access of initial values. |
145 | |
146 | |
147 | \subsection ADrillableNode ADrillable Node |
148 | @@ -152,7 +151,7 @@ |
149 | \subsection SaveVolume SaveVolume Node |
150 | <em>OBS: This node is depricated! Timestamp is saved using the saveTimeStamps() function in the VolumeModel node.</em> |
151 | |
152 | - The save volume node saves the current timestamp-values, stored in a field (and a multimap whch is used by AVolumePlaybackNode), to a nrrd file with |
153 | + The Save Volume Node saves the current timestamp-values, stored in a field (and a multimap whch is used by AVolumePlaybackNode), to a nrrd file with |
154 | the same size as the image nrrd file. |
155 | |
156 | \subsection AVolumePlaybackNode AVolumePlayback Node |
157 | @@ -162,19 +161,18 @@ |
158 | |
159 | Fields that are set from outside the node (GUI for example): |
160 | - direction: When set time is moved 0.1s in chosen direction. Direction is set by assigning value -1 (back) or 1 (forward) to field. <em>Currently not used in GUI.</em> |
161 | -- directionFastPlayback: When set time is moved 1s in chosen direction. If faster rewind/forward functionality is needed change this value in AVolumePlaybackNode.cpp to another value higher than 1. |
162 | +- directionFastPlayback: When Set Time is moved 1s in chosen direction. If faster rewind/forward functionality is needed change this value in AVolumePlaybackNode.cpp to another value higher than 1. |
163 | Direction is set by assigning value -1 (back) or 1 (forward) to field. |
164 | -- volumeModel: A reference to VolumeModel node. Used for accessing the timestamp_map, a multimap holding all timestamp values and for removing voxels/reseting |
165 | -voxels to original value during playback. |
166 | +- volumeModel: A reference to VolumeModel node. Used for accessing the timestamp_map, a multimap holding all timestamp values and for removing voxels/resetting voxels to original value during playback. |
167 | - isPlay: When set to True the complete saved scenario will be played starting from current playback time. When set to False playback is stopped at |
168 | current playback time. |
169 | -- resetPlaybackTimeField: When set to True playback-time is set to 0 and image is reset to beginning of scenario (before any drilling). |
170 | +- resetPlaybackTimeField: When set to True playback time is set to 0 and the image is reset to beginning of scenario (before any drilling). |
171 | - playbackTimeField: The current playback time which corresponds to image displayed. |
172 | |
173 | Local variables: |
174 | - elapsedTime: Time elapsed since last call to traverseSG(). |
175 | - oldTime: Prevoious playbackTime. |
176 | -- timeStep: The value playbackTime should be changed with when pressing rewind or fast forwad in paus-mode. Either 0.1s or 1s. |
177 | +- timeStep: The value playbackTime should be changed when pressing rewind or fast forward in pause-mode. Either 0.1s or 1s. |
178 | |
179 | |
180 | When playback time is increasing (play-mode or fast forward) the voxels that should be removed are extracted from timestamp_map by using playback time as |
181 | @@ -183,15 +181,14 @@ |
182 | When playback time is decreasing (rewind) the voxels that should be reset are extracted from timestamp_map by using playbackTime as start-key |
183 | and oldTime as end-key. Playback time is decreased by timeStep. |
184 | |
185 | -Reset will cause playbackTimeField to be set to 0 and the image reset to original image (before drilling). Playback will be stopped i.e. |
186 | +Reset will cause playbackTimeField to be set to 0 and the image reset to original image (before drilling). Playback will be stopped, i.e. |
187 | isPlay is set to false.<br> |
188 | -Rewind/fast forward will cause the playback time to in-/decrease with 1s. If playback is currently running (isPlay=true) playback is first stopped before |
189 | -the current playback time is updated. Otherwise playback time would be changed according to elapsedTime. The image is updated according to the new playback |
190 | +Rewind/fast forward will cause the playback time to increase/decrease with 1s. If playback is currently running (isPlay=true) playback is first stopped before |
191 | +the current playback time is updated. Otherwise, playback time would be changed according to elapsedTime. The image is updated according to the new playback |
192 | time and the playback is started again (isPlay=false). This was needed to make it possible to do rewind/fast forward during playback. |
193 | |
194 | -<b>Removing voxels</b> is done by using function setImageValue() in Volumemodel, setting the imagevalue of a particular voxel and corresponding material remaining to 0.<br> |
195 | -<b>Adding a voxel</b> (doing Reset or Rewind) is done by setting the imagevalue of a particular voxel to its original value. This value is fetched from VolumeModel |
196 | -using getOriginalImageValue(). Corresponding material remaining is set to 1.0 using setMaterialRemaining() in VolumeModel. |
197 | +<b>Removing voxels</b> is done by using function setImageValue() in Volumemodel, setting the image-value of a particular voxel and corresponding material remaining to 0.<br> |
198 | +<b>Adding a voxel</b> (doing Reset or Rewind) is done by setting the image-value of a particular voxel to its original value. This value is fetched from VolumeModel using getOriginalImageValue(). Corresponding material remaining is set to 1.0 using setMaterialRemaining() in VolumeModel. |
199 | |
200 | |
201 | |
202 | @@ -199,43 +196,43 @@ |
203 | \section VisualRendering Visual Rendering |
204 | |
205 | \subsection MarchingCubes Marching Cubes |
206 | -Marching cubes is an alorithm that creates a polygonal surface from a volume of voxels. It generates a so called iso-surfaces at a density value in the data. It works by marching through the voxels in cubic groups of eight voxels at a time and checking whether any of them lies on different sides of the iso-value. For each group of eight voxels there are 256 different permutations possible, but due to symmetry it can be reduced to 15. These 15 cases each have a different polygon associated with them which are then combined into a continous surface. |
207 | +Marching Cubes is an algorithm that creates a polygonal surface from a volume of voxels. It generates a so called iso-surface at a density value in the data. It works by marching through the voxels in cubic groups of eight voxels at a time and checking whether any of them lies on different sides of the iso-value. For each group of eight voxels there are 256 different permutations possible, but due to symmetry it can be reduced to 15. Each of these 15 cases have a different polygon associated with them, which are then combined into a continuous surface. |
208 | |
209 | |
210 | \subsection DirectVolumeRendering Direct Volume Rendering |
211 | |
212 | There are a number of different types of volume renderings, but the following steps are common. |
213 | |
214 | -<em>Data traversal</em>. A number of sampling positions are chosen in the volume and is used to discretize the continous volume rendering integral. |
215 | - |
216 | -\em Interpolation. The sampling positions are most oftenly not aligned with the voxel grid. A continous 3D-field needs to be interpolated from the voxel grid to obtain the value for each sample point. The most common reconstruction method is trilinear interpolation, which is simply linerar interpolation in all three dimensions. |
217 | - |
218 | -\em Gradient computation. To enable shading and local illumination a set of normal vectors is needed. These can be obtained my calculating the gradient of the scalar voxel grid. Boundaries between objects in the volume are found where the values change most rapidly, i.e. where the gradient is large. |
219 | - |
220 | -\em Classification. Different sections of the volume can be classified as different materials, and can then be given differing optical properties. This enables you to filter out important regions of data. The transfer functions sets different colors an opacity to each segment. |
221 | +<em>Data traversal</em>. A number of sampling positions are chosen in the volume and is used to discretize the continuous volume rendering integral. |
222 | + |
223 | +\em Interpolation. The sampling positions are most often not aligned with the voxel grid. A continuous 3D-field needs to be interpolated from the voxel grid to obtain the value for each sample point. The most common reconstruction method is trilinear interpolation, which is simply linear interpolation in all three dimensions. |
224 | + |
225 | +\em Gradient computation. To enable shading and local illumination a set of normal vectors is needed. These can be obtained by calculating the gradient of the scalar voxel grid. Boundaries between objects in the volume are found where the values change most rapidly, i.e. where the gradient is large. |
226 | + |
227 | +\em Classification. Different sections of the volume can be classified as different materials, and can then be given differing optical properties. This enables you to filter out important regions of data. The transfer functions set different colors and opacity to each segment. |
228 | |
229 | <em> Shading and illumination</em>. Shading can be used to add a sense of depth in the image. It is applied after the transfer function has set the color of a pixel and changes this color depending on if the pixel is illuminated by a light source, or if it lies in shadow. |
230 | |
231 | -\em Compositing. The discretized volume integral is calculated iterativly by compositing. The volume can be traversed front-to-back or back-to-front. Front -to-back is what is used in this project and cast a set of rays from the eye point of the viewer into te volume. |
232 | +\em Compositing. The discretized volume integral is calculated iteratively by compositing. The volume can be traversed front-to-back or back-to-front. Front -to-back is what is used in this project and cast a set of rays from the eye point of the viewer into the volume. |
233 | |
234 | |
235 | \subsection DVR_TransferFunctions Direct Volume Rendering - Transfer Functions |
236 | -To separate interesting parts of a volume, transfer functions can be used. These transfer function sets different optical properties to each voxel depending on its original value. The simplest case is when only the scalar value of the voxel is used. The scalar value is most often based on the density of the material, and different objects in the volume have different densities. However, since the voxel grid is discrete there are sample errors near the boundaries of objects. The boundaries between enamel and air, for instance, should be quite distinct. However, due to the limited resolution, the voxels which lie directly on the boundary between the two materials get a value which lies somewhere in between. Since some other material, in our case gum, might have the same value as this average value the teeth will look covered by a thin layer of gum. |
237 | +To separate interesting parts of a volume, transfer functions can be used. These transfer functions set different optical properties to each voxel depending on its original value. The simplest case is when only the scalar value of the voxel is used. The scalar value is most often based on the density of the material, and different objects in the volume have different densities. However, since the voxel grid is discrete there are sample errors near the boundaries of objects. The boundaries between enamel and air, for instance, should be quite distinct. However, due to the limited resolution, the voxels which lie directly on the boundary between the two materials get a value which lies somewhere in between. Since some other material, in our case gum, might have the same value as this average value the teeth will look covered by a thin layer of gum. |
238 | |
239 | -These errors can be avoided by using multidimentional transfer functions which also take into account the first and second derivative of the voxel field. Then you can se which voxels that lie in a homogenous surrounding and which lies in areas where values change rapidly. The voxels with a high derivative are most likely on the boundary between two materials and should be classified as either one of the surrounding materials. |
240 | +These errors can be avoided by using multidimensional transfer functions which also take into account the first and second derivative of the voxel field, then you can see which voxels that lie in a homogeneous surrounding and which lies in areas where values change rapidly. The voxels with a high derivative are most likely on the boundary between two materials and should be classified as either one of the surrounding materials. |
241 | |
242 | |
243 | \subsection DVR_UseOfSegments Direct Volume Rendering - Use of segments |
244 | |
245 | Even with the use of multidimensional transfer functions, the result is not perfect. The solution is to manually segment the volume and divide the volume into distinct sections. This can be done by giving each voxel an ID which maps it to a certain material. In our case we've divided the volume into enamel, dentin, jawbone, pulp and air. |
246 | |
247 | -Segmentation can be done in an ordinary image editor by first slicing the volume into 1-voxel thick slices and then simply paint the different segments on each slice. There are a few disadvantages to this method, though. First of all you get quite a large number of images to edit. It is also difficult to see what you did in a preceeding slice, since you open each slice as a new image. Therefor there are programs dedicated to the sole purpose of segmentation where you can inspect the volume from different viewpoints. They also have various helpful tools such as interpolating selections between slices, which means you do not have to edit each slice. |
248 | +Segmentation can be done in an ordinary image editor by first slicing the volume into 1-voxel thick slices and then simply paint the different segments on each slice. There are a few disadvantages to this method, though. First of all you get quite a large number of images to edit. It is also difficult to see what you did in a preceeding slice, since you open each slice as a new image. Therefore there are programs dedicated to the sole purpose of segmentation where you can inspect the volume from different viewpoints. They also have various helpful tools such as interpolating selections between slices, which means you do not have to edit each slice. |
249 | |
250 | -When you have created a segmented volume you can use it as a look-up table, and by combining it with the original data you can render the segmented parts of the volume with different styles to help distinguishing between objects. |
251 | +When you have created a segmented volume you can use it as a look-up table, and by combining it with the original data you can render the segmented parts of the volume with different styles to help distinguish between objects. |
252 | |
253 | |
254 | \section AudioRendering Audio Rendering |
255 | -The Sound Node enables audio rendering. The audio rendering is controlled by the volumeDistributionField, which specifies the volume of each sound in the range [0,1]. The maximum of simulatious audiofiles are limited to 256. By routing the volumeDistribution from ADrillableNode to the sound node it is possible to make sound change depending on the material touched by the drill head. For sounds to be enabled at all drillSpeed must be set to more than 0.05, i.e the drill must be activated. drillPosField enable the possibility for the sound be played from a specific position within the scene. If this is done the order and number of soundfiles should match the materials in the MaterialSegmentationModel node. |
256 | +The Sound Node enables audio rendering. The audio rendering is controlled by the volumeDistributionField, which specifies the volume of each sound in the range [0,1]. The maximum of simultaneous audio-files are limited to 256. By routing the volumeDistribution from ADrillableNode to the sound node it is possible to make sound change depending on the material touched by the drill head. For sounds to be enabled at all, drillSpeed must be set to more than 0.05, i.e. the drill must be activated. drillPosField enables the possibility for the sound be played from a specific position within the scene. If this is done the order and number of sound-files should match the materials in the MaterialSegmentationModel node. |
257 | |
258 | |
259 | |
260 | @@ -246,38 +243,38 @@ |
261 | \section PolygonDeformation Polygon Deformation |
262 | \section ExtraPeripherals Extra peripherals (pedals) |
263 | \section GUI_ GUI |
264 | -The graphical interface is premerily a for easy display and manipulation of fields present within the nodes. It supplies an easy access and runtime manipulation of the scen, state but also recording of new scenarios. The interface is consists of a few parts which are described below. The two main part are the login screen which follows by the main window, where some general settings can be made and formost some of the scenarios are choosen. During the actual exercise there are two modes, user and superuser. The super user mode gives more detailed information about the system and also the ability to calibrate the scene and model. |
265 | +The graphical interface is primary a for easy display and manipulation of fields present within the nodes. It supplies an easy access and run-time manipulation of the scene state as well as recording of new scenarios. The interface consists of a few parts which are described below. The two main parts are the login screen and the main window, where some general settings can be made and foremost some of the scenarios are chosen. During the actual exercise there are two modes, user and superuser. The super user mode gives more detailed information about the system and also the ability to calibrate the scene and model. |
266 | |
267 | \subsection MainWindow Main Window |
268 | \subsubsection LoginScreen Login Screen |
269 | -When first starting the application one ends up in a login screen, this is no a security measurement just to distinguish between different users so that the right files are loaded if for instance the users chooses to run a playback of a performed exercise. |
270 | +When first starting the application one sees a login screen, this is not a security measurement, it's just to distinguish between different users so that the right files are loaded if, for instance, the users chooses to run a playback of a performed exercise. |
271 | \subsubsection Main Select Case |
272 | -From this view the users are allowed to choose between a number of prerecorded exercise scenarios, each of them presenting different aspects of dental surgery. The file will be loaded together with the graphical interface diplaying data related to the scenario, i.e fraction drilled by user vs the prerecorded expert, which state the user currenty have reached etc. |
273 | +From this view the users are allowed to choose between a number of prerecorded exercise scenarios, each of them presenting different aspects of dental surgery. The file will be loaded together with the graphical interface displaying data related to the scenario, i.e. fraction drilled by user vs the prerecorded expert and which state the user currently have reached, etc. |
274 | |
275 | \subsubsection LaunchX3DFile Launch a X3D File |
276 | -Launching a X3D file via the file browser will not load the graphical interface displayed using the select case scene. That UI can only handle specially designed x3D files and since all X3D files can be loaded this way it is better to be safe than sorry. |
277 | +Launching a X3D file via the file browser will not load the graphical interface displayed using the select case scene. That UI can only handle specially designed X3D files and since all X3D files can be loaded this way it is better to be safe than sorry. |
278 | |
279 | \subsubsection Settings Settings |
280 | -There are two settings in the settings tab, mirrored and stereo. Both of them conserning the display of the H3D window. mirrored, i.e the scene is mirrored to be used in a simulator which uses an mirror to display the scene. Stereo to enable real 3D using specially designed glasses. |
281 | +There are two settings in the settings tab, mirrored and stereo. Both of them concerning the display of the H3D window. Mirrored, i.e. the scene is mirrored to be used in a simulator which uses a mirror to display the scene. Stereo to enable real 3D using specially designed glasses. |
282 | |
283 | \subsubsection Output Output |
284 | -Under this tab the standard output from the program is displayed as well as the standard error. This enables the developer team to see more about the core status of the program and easier debuging. |
285 | +Under this tab the standard output from the program is displayed as well as the standard error. This enables the developer team to see more about the core status of the program and easier debugging. |
286 | |
287 | |
288 | \subsection ForssApp Running a Scenario |
289 | -When a scenario is launched from the select scenario view a UI will be displayed which enables maipulation of some key parameters of the current scene. |
290 | +When a scenario is launched from the select scenario view an UI will be displayed which enables manipulation of some key parameters of the current scene. |
291 | |
292 | \subsubsection SuperUserMode Super User Mode |
293 | The super users mode consists of several blocks, each of them dedicated to a specific group of fields specifying the model or the users interaction with it. |
294 | |
295 | -\b Model Configuration |
296 | -Within this block all aspects of the model can be changed, i.e all parts of the model can individually be moved or ortated in any direction. The step size of the movement or rotations is set by the sliders. Pushing the buttons will translate or rotate the selected model part one step in that direction. Holding down the button will auto manipulate it in the decired direction until the button is released. |
297 | +<b> Model Configuration</b> |
298 | +Within this block all aspects of the model can be changed, i.e. all parts of the model can individually be moved or rotated in any direction. The step size of the movement or rotations is set by the sliders. Pushing the buttons will translate or rotate the selected model part one step in that direction. Holding down the button will auto-manipulate it in the desired direction until the button is released. |
299 | |
300 | \b Playback |
301 | -Here the last recorded scenario can be played. Reset will move the indicator to the beginning (which is the time of the first voxel removed by the drill). During play the voxels will be removed and the drill steps, taken as if the user where actually performing the operations once more, but this time without the drill head beeing present. It can be useful to hide the head during playback to enhance the view, see facts about the user mode for more information. |
302 | +Here the last recorded scenario can be played. Reset will move the indicator to the beginning (which is the time of the first voxel removed by the drill). During play the voxels will be removed and the drill steps, taken as if the user where actually performing the operations once more, but this time without the drill-head being present. It can be useful to hide the drill-head during playback to enhance the view, see facts about the user mode for more information. |
303 | |
304 | \b Parameters |
305 | -Here all paramters which will effect the drilling senceation can be set, i.e the diameter of the drilling head. The speed, or consequently the impact of the drill can be adjusted. Also all the hardness of the materials present in the current model can be individually changed to increase the fealing drilling in different materials. The colloring can also be adjusted to show where the expert has drilled, where the user has drilled, forbidden areas and also de difference between user and expert, all in order to guide the student trough the proper procedure. |
306 | +Here all parameters which will effect the drilling sensation can be set, i.e. the diameter of the drilling head, the speed, or consequently the impact of the drill, can be adjusted. Also, all the hardness of the materials present in the current model can be individually changed to increase the feeling of drilling in different materials. The coloring can also be adjusted to show where the expert has drilled, where the user has drilled, forbidden areas and also the difference between user and expert, all in order to guide the student through the proper procedure. |
307 | |
308 | \b Information |
309 | |
310 | |
311 | === modified file 'doc/03_Examples_and_Howtos.dox' |
312 | --- doc/03_Examples_and_Howtos.dox 2009-05-20 23:21:47 +0000 |
313 | +++ doc/03_Examples_and_Howtos.dox 2009-07-15 12:38:40 +0000 |
314 | @@ -13,7 +13,7 @@ |
315 | |
316 | This is a very simple example showing a rotating cube. |
317 | |
318 | -To start it stand in the <tt>forssim/examples/x3d</tt> directory and type |
319 | +To start it; stand in the <tt>forssim/examples/x3d</tt> directory and type |
320 | \code |
321 | QtH3DLoad AnimationExample.x3d |
322 | \endcode |
323 | @@ -21,29 +21,28 @@ |
324 | \section ExampleMouseDrill Drill without a haptic device |
325 | You can use your mouse to control the drill in the example mousedrill_cylinder.x3d |
326 | |
327 | -To start it stand in the <tt>forssim/examples/x3d</tt> directory and type |
328 | +To start it; stand in the <tt>forssim/examples/x3d</tt> directory and type |
329 | \code |
330 | QtH3DLoad mousedrill_cylinder.x3d |
331 | \endcode |
332 | |
333 | -You can now use your mouse to drill into the cylinder. By pressing the left mouse button and moving the mouse the mouse moves in the x- and y-direction. By pressing the middle button the mouse moves in the z-direction when you move the mouse up and down. To make it |
334 | -easier to drill the drill head has been enlarged. |
335 | +You can now use your mouse to drill into the cylinder. When pressing the left mouse button and moving the mouse, it moves in the x- and y-direction. When pressing the middle button, the mouse instead moves in the z-direction, when you move the mouse up and down. To make it easier to drill the drill-head has been enlarged. |
336 | |
337 | \subsection HowtoChangeIntoMouseDevice How to change existing files into using mouse as haptic device |
338 | |
339 | -It is possible to use the system without the access to a haptic device. Then edit the desired .x3d-file. First, add the libCandy.so to the included libraries. Then change the device, i.e AnyDevice, HapticDevice, PhantomDevice etc. to MouseHapticsDevice. Finally, if the MouseManager is present at the bottom of the .x3d-file remove it or comment it out. |
340 | +It is possible to use the system without the access to a haptic device. To do so edit the desired .x3d-file. First, add the libCandy.so to the included libraries, then change the device, i.e. AnyDevice, HapticDevice, PhantomDevice etc. to MouseHapticsDevice and finally, if the MouseManager is present at the bottom of the .x3d-file remove it or comment it out. |
341 | |
342 | TODO: Make into a script. |
343 | |
344 | \section ExampleTouch Touchable cylinder |
345 | -If you have a haptic device you can use touchable_cylinder.x3d to try it out. |
346 | +If you have a haptic device you can use touchable_cylinder.x3d to try it. |
347 | |
348 | -To start it stand in the <tt>forssim/examples/x3d</tt> directory and type |
349 | +To start it; stand in the <tt>forssim/examples/x3d</tt> directory and type |
350 | \code |
351 | QtH3DLoad touchable_cylinder.x3d |
352 | \endcode |
353 | |
354 | -You should now be able to feel the cylinder with the drill head. |
355 | +You should now be able to feel the cylinder with the drill-head. |
356 | |
357 | |
358 | \section ExampleDrill Drillable cylinder |
359 | |
360 | === modified file 'doc/04_Install_GNU.dox' |
361 | --- doc/04_Install_GNU.dox 2009-05-20 23:21:47 +0000 |
362 | +++ doc/04_Install_GNU.dox 2009-07-15 12:38:40 +0000 |
363 | @@ -15,12 +15,12 @@ |
364 | - HapticStation - a computer as above, with IEEE1394 (firewire) port plus a Sensable Omni haptic device |
365 | - Alban - a computer with Core2Quad, Nvidia Quadro 3700, printer port, IEEE1394 (firewire), StereoGraphics emitter and shutter glasses plus Phantom Desktop haptic device |
366 | |
367 | -* *) We only use Nvidia cards ourself, and do not recommend use of ATI/AMD based cards due to infamous driver issues. If you have such card and it does work well for you, please contact us and we will perhaps change the recommendation. |
368 | +* *) We only use Nvidia cards ourselves, and do not recommend use of ATI/AMD based cards due to infamous driver issues. If you have such card and it does work well for you, please contact us and we will perhaps change the recommendation. |
369 | |
370 | \section GNUUbuntu Install Ubuntu 9.04 |
371 | |
372 | Ubuntu 9.04 was released in April 2009 and is our main supported distribution. This is because of its ease of install and large user base. |
373 | -If you have Windows and want to keep it, we recommend using wubi-installer (this is also a great way if you have a Mac an run dualboot already): |
374 | +If you have Windows and want to keep it, we recommend using wubi-installer (this is also a great way if you have a Mac and run dual-boot already): |
375 | |
376 | \subsection UbuntuEmpty Install Ubuntu 9.04 on empty computer |
377 | Install Ubuntu 9.04, preferably on an empty hard disk. Preferably set the partition(s) to 80Gb maximum. Set language to English. |
378 | @@ -30,14 +30,14 @@ |
379 | Go to http://www.wubi-installer.org |
380 | Download wubi.exe |
381 | Run it from a terminal with \c wubi\c .exe \c -\c -32bit (Important!) |
382 | -As of a current bug in wubi, (May 17, 2009) you can't change the language settings in the installer. Since we recommend using the english version of Ubuntu, and if your Windows is configured for another language, do the following: |
383 | +Due to a current bug in wubi, (May 17, 2009) you can't change the language settings in the installer. Since we recommend using the English version of Ubuntu, and if your Windows is configured for another language, do the following: |
384 | |
385 | -# Change windows language to English (US) in control panel. |
386 | -# Start wubi from terminal with \c wubi\c .exe \c -<tt>-32bit</tt> |
387 | -# Default language should now be English. Click install. |
388 | - -# Reboot upon request and choose "Ubuntu" in the Windows bootloader. |
389 | + -# Reboot upon request and choose "Ubuntu" in the Windows boot-loader. |
390 | |
391 | -When it's done, restart computer and choose Ubuntu in the Windows boot loader. |
392 | +When it's done, restart computer and choose Ubuntu in the Windows boot-loader. |
393 | |
394 | \section UbuntuConfigure Configure Ubuntu |
395 | |
396 | @@ -55,13 +55,13 @@ |
397 | |
398 | \section forsdep Install Forssim Dependencies |
399 | |
400 | -Now get forssim dependencies to bootstrap this software stack. To do so, we need bzr. |
401 | +Now get Forssim Dependencies to bootstrap this software stack. To do so, we need bzr. Type the following in the terminal. |
402 | |
403 | \code |
404 | sudo apt-get install bzr |
405 | \endcode |
406 | |
407 | -Then you will need to install some packages, as listed in provided script: DOC_TODO: (make the actual apt-get script be included in doxygen) |
408 | +Then you will need to download our dependencies, where we've also includes some scripts to help with the installation. \c ./setup_ubuntu installs the extra packages we need for the project. DOC_TODO: (make the actual apt-get script be included in doxygen) |
409 | |
410 | \code |
411 | cd Desktop |
412 | @@ -77,25 +77,23 @@ |
413 | |
414 | Then, from \c forssim_dependencies, just run |
415 | \code |
416 | -./make |
417 | +./make |
418 | \endcode |
419 | |
420 | +to build all dependencies and locally install some shaders for the volume rendering. |
421 | HINT: You can build faster by running <tt>./make -j3</tt> for a dualcore and <tt>./make -j5</tt> for a quadcore. |
422 | -You also need to install some shaders. In \c forssim_dependencies do: |
423 | -\code |
424 | -./install_shaders |
425 | -\endcode |
426 | |
427 | That's it. You should now be able to build forssim. |
428 | |
429 | \section GNUCheckoutAndBuild Code checkout & build |
430 | |
431 | -When all dependencies are installed, you need to checkout (branch) our last release, compile, install and test it. |
432 | +When all dependencies are installed, you need to checkout (branch) our latest release, compile, install and test it. |
433 | \code |
434 | cd Desktop |
435 | bzr branch lp:forssim |
436 | cd forssim |
437 | ./makeAll |
438 | +sudo ldconfig |
439 | \endcode |
440 | |
441 | Test now: |
442 | @@ -105,29 +103,48 @@ |
443 | |
444 | That's it! |
445 | |
446 | -\section GNURegular Regular computer |
447 | -If you have a regular computer, you wont have that much fun. However, you can still run one of the examples using your mouse to imitate a haptic device. |
448 | -While standing in directory \c forssim type |
449 | - |
450 | -\code |
451 | -cd examples/x3d/ |
452 | -QtH3DLoad mousedrill_cylinder.x3d |
453 | -\endcode |
454 | - |
455 | -You will find more information on this example, and others in chapter 3. TODO: Should be autoreferenced. |
456 | - |
457 | -If you do not have a haptic device, then installation as described in this chapter is now completed. Refer to the other main chapters in the manual for |
458 | -usage and examples of the forssim package. If you do have a haptic device or a full scale simulator, please continue with section 4.7 or 4.8. |
459 | +\section FsWisdomSettings Editing the settings for FsWisdom |
460 | +You can try some sample test cases in the simulator but to be able to download them, |
461 | + you will need to have obtained a password from Forsslund Systems. |
462 | + |
463 | +At the moment you might need to start the program once to create the settings file. Type |
464 | + |
465 | +\code |
466 | +FsWisdom |
467 | +\endcode |
468 | + |
469 | +from any location in a terminal. |
470 | + |
471 | +Press cancel to exit the program. |
472 | + |
473 | +Open up the settings file |
474 | +\code |
475 | +gedit .config/Forsslund\ Systems\ AB/FsWisdom.conf |
476 | +\endcode |
477 | + |
478 | +and enter the password where it says |
479 | + |
480 | +\code |
481 | +[database] |
482 | +password= |
483 | +\endcode |
484 | + |
485 | +Save and close the settings file. |
486 | + |
487 | +Then you can start \c FsWisdom again. See chapter 10 for a description of the program, or |
488 | +chapter 3 for some simple examples, |
489 | +but make sure to continue the installation first if you need to install a haptic device. |
490 | + |
491 | |
492 | \section GNUOmni HapticStation - Omni |
493 | -If you do not have a Sensable Omni device, ignore this section. |
494 | - |
495 | - |
496 | -If you have a Sensable Phantom Omni or Sensable Phantom Desktop haptic device, you need to install the proprietary OpenHaptics drivers provided from Sensable only (not for redistribution). There are some known issues with proprietary Sensable Phantom drivers, also known as Openhaptics, and IEEE1394 on modern kernels. A forum post on the internal sensable developer site describes the problem: |
497 | +If you do not have a SensAble Phantom device, ignore this section. |
498 | + |
499 | + |
500 | +If you have a SensAble Phantom Omni or SensAble Phantom Desktop haptic device, you need to install the proprietary OpenHaptics drivers provided from SensAble only (not for redistribution). There are some known issues with proprietary SensAble Phantom drivers, also known as OpenHaptics, and IEEE1394 on modern kernels. A forum post on the internal SensAble developer site describes the problem: |
501 | |
502 | "Along with the new version of fedora a kernel upgrade to 2.6.25.x was necessary. Since then, (...) we are not able to continue our research with this device because the driver is too old. It uses a deprecated isochronous transfer mode that was dropped in mid 07 from the kernel." (Housetrek) |
503 | |
504 | -One work-around (until the day openhaptics is open source) is to downgrade the kernel. |
505 | +One work-around (until the day OpenHaptics is open source) is to downgrade the kernel. |
506 | |
507 | \subsection UbuntuKernelDowngrade Ubuntu kernel downgrade |
508 | |
509 | @@ -139,7 +156,7 @@ |
510 | sudo apt-get install linux-image-2.6.22-14-generic linux-headers-2.6.22-14-generic |
511 | \endcode |
512 | |
513 | -The commands above is also provided in a script in the \c forssim_dependencies folder |
514 | +The commands above are also provided in a script in the \c forssim_dependencies folder |
515 | \code |
516 | ./downgrade_kernel |
517 | \endcode |
518 | @@ -156,7 +173,7 @@ |
519 | |
520 | \subsection InOH Install Open Haptics: |
521 | |
522 | -To install the propritary drivers (that you need to aquire directly from Sensable), do the following. |
523 | +To install the proprietary drivers (that you need to acquire directly from Sensable), do the following. |
524 | Put the \c OpenHaptics_AE_LinuxV2.0.zip file in \c forssim_dependencies/ |
525 | |
526 | \code |
527 | @@ -166,15 +183,14 @@ |
528 | ./setup_openhaptics |
529 | \endcode |
530 | |
531 | -That will install \c alien (and \c libstdc++5), which converts the RPM packed drivers to debian packages and installes the drivers. Now all the device driver configuration is completed. We need to recompile the dependencies with |
532 | -to support the new haptic device: |
533 | +That will install \c alien (and \c libstdc++5), which converts the RPM packed drivers to debian packages and installs the drivers. Now all the device driver configuration is completed. We need to recompile the dependencies to support the new haptic device: |
534 | |
535 | \code |
536 | cd forssim_dependencies |
537 | ./make |
538 | \endcode |
539 | |
540 | -You can configure PHANToM device with command: |
541 | +You can configure the PHANToM device with command: |
542 | \code |
543 | PHANToMConfiguration |
544 | \endcode |
545 | @@ -216,14 +232,14 @@ |
546 | If you do not have a Sensable Desktop device, ignore this section. |
547 | |
548 | \subsection Configure Nvidia drivers for Stereo glasses etc |
549 | -Press <tt>Ctrl-Alt-F1</tt> to enter a real console. Then enter following: |
550 | +Press <tt>Ctrl-Alt-F1</tt> to enter a real console, then enter following: |
551 | |
552 | \code |
553 | sudo /etc/init.d/gdm stop |
554 | cd Desktop |
555 | sudo chmod 755 NVIDIA-Linux-x86-180.44.pkg1.run |
556 | ./NVIDIA-Linux-x86-180.44.pkg1.run |
557 | \endcode |
558 | -Answer yes to all questions in the setup program. Then copy in our \c xorg.conf |
559 | +Answer yes to all questions in the setup program,then copy in our \c xorg.conf |
560 | |
561 | \code |
562 | sudo cp forssim_dependencies/xorg/xorg.conf.alban_ubuntu_0904 /etc/X11/xorg.conf |
563 | \endcode |
564 | @@ -234,7 +250,7 @@ |
565 | That should be all that's needed. |
566 | |
567 | \subsubsection InstallPhantomDeviceDrivers Install Phantom Device Drivers with parallel port |
568 | -We will now configure parallell ports to be used with Sensable Phantom Desktop. The first part is to get the parallell port working. After that, the proprietary drivers are installed. |
569 | +We will now configure parallel ports to be used with Sensable Phantom Desktop. The first part is to get the parallel port working. After that, the proprietary drivers are installed. |
570 | |
571 | Add the following line at the end of <tt>/etc/modprobe.d/options</tt> |
572 | \code |
573 | @@ -246,13 +262,13 @@ |
574 | sudo ln -s /dev/parport0 /dev/phnepp |
575 | \endcode |
576 | |
577 | -TODO: <tt>60-symlinks.rules</tt> does not exist in Ubuntu 9.04. Modify udev rules to make this soft link permenantly: add the following line at the end of <tt>/etc/udev/rules.d/60-symlinks.rules</tt>: |
578 | +TODO: <tt>60-symlinks.rules</tt> does not exist in Ubuntu 9.04. Modify udev rules to make this soft link permanently: add the following line at the end of <tt>/etc/udev/rules.d/60-symlinks.rules</tt>: |
579 | \code |
580 | KERNEL=="parport*", SYMLINK+="phnepp" |
581 | \endcode |
582 | |
583 | -Enable any user to access parallel port: add the user to the same group as the port belongs to. |
584 | -First check the permisson on the device (usually \c lp is the group) |
585 | +Enable any user to access the parallel port: add the user to the same group as the port belongs to. |
586 | +First check the permission on the device (usually \c lp is the group) |
587 | \code |
588 | #ls -l /dev/parport0 |
589 | crw-rw---- 1 lp lp 99, 0 2009-01-13 11:04 /dev/parport0 |
590 | @@ -264,7 +280,7 @@ |
591 | You need to logout and login again to enable the new group permission. |
592 | |
593 | |
594 | -To install the propritary drivers (that you need to aquire directly from Sensable), do the following. |
595 | +To install the proprietary drivers (that you need to acquire directly from Sensable), do the following. |
596 | Put the <tt>OpenHaptics_AE_LinuxV2.0.zip</tt> file in \c forssim_dependencies/ |
597 | |
598 | \code |
599 | @@ -274,18 +290,18 @@ |
600 | ./install_openhaptics |
601 | \endcode |
602 | |
603 | -That will install \c alien (and \c libstdc++5), which converts the RPM packed drivers to debian packages and installes the drivers. Now all the device driver configuration is completed. You need to rebuild dependencies (H3D) to support the new haptic device: |
604 | +That will install \c alien (and \c libstdc++5), which converts the RPM packed drivers to debian packages and installs the drivers. Now all the device driver configurations are completed. You need to rebuild dependencies (H3D) to support the new haptic device: |
605 | |
606 | \code |
607 | cd forssim_dependencies |
608 | ./make |
609 | \endcode |
610 | |
611 | -You can configure PHANToM device with command: |
612 | +You can configure PHANToM device with the command: |
613 | \code |
614 | PHANToMConfiguration |
615 | \endcode |
616 | -In the configuration window, choose <tt>Default PHANToM</tt> as hardware, \c Desktop as PHANToM Model and the base adress is set to 0x378. |
617 | +In the configuration window, choose <tt>Default PHANToM</tt> as hardware, \c Desktop as PHANToM Model and the base address is set to 0x378. |
618 | Use \c PHANToMTest to calibrate device and run some box tests. |
619 | |
620 | \code |
621 | |
622 | === modified file 'doc/06_Setup_development_enviroment.dox' |
623 | --- doc/06_Setup_development_enviroment.dox 2009-03-11 14:04:04 +0000 |
624 | +++ doc/06_Setup_development_enviroment.dox 2009-07-15 12:38:40 +0000 |
625 | @@ -3,7 +3,7 @@ |
626 | \section GNUEnvironment GNU Environment |
627 | \subsection EclispeSetup Eclipse |
628 | |
629 | -Ubuntu 8.10 comes with Eclipse 3.2 (if you install it) so we need to install manually. |
630 | +Ubuntu 8.10 doesn't install Eclipse automatically so you need to install Eclipse 3.4.2 manually. |
631 | |
632 | \code |
633 | sudo apt-get remove eclipse |
634 | @@ -29,7 +29,7 @@ |
635 | \subsection EclipseQt Eclipse Qt |
636 | |
637 | <b>Install QT plugin</b>\n |
638 | -1: Download qt-eclipse integrationpackage from: \n |
639 | +1: Download qt-eclipse integration-package from: \n |
640 | http://dist.trolltech.com/developer/download/qt-eclipse-integration-linux.x86-1.4.3.tar.gz \n |
641 | 2: If you have installed Eclipse under your home directory, e.g. /home/daliangwe, unpack the package there: |
642 | \code |
643 | @@ -77,48 +77,48 @@ |
644 | |
645 | Step 2: Install bazaar – eclipse plugin: |
646 | |
647 | - -# Launch eclipse |
648 | - -# Go to *Help* --> *Software updates* |
649 | - -# Click *Available Software* --> *Add Site...* |
650 | - -# In the location field, enter the URL: http://verterok.com.ar/bzr-eclipse/update-site/ |
651 | - -# Click *refresh*, enter "bazaar" |
652 | - -# Select "Eclipse plugin for Bazaar" |
653 | + -# Launch eclipse. |
654 | + -# Go to *Help* --> *Software updates*. |
655 | + -# Click *Available Software* --> *Add Site...*. |
656 | + -# In the location field, enter the URL: http://verterok.com.ar/bzr-eclipse/update-site/. |
657 | + -# Click *refresh*, enter "bazaar". |
658 | + -# Select "Eclipse plugin for Bazaar". |
659 | -# Click *Install*, and this will launch a wizard (license agreement, etc). |
660 | -# Restart Eclipse. |
661 | -# If needed: Go to: Window --> Preferences --> Team --> Bazaar and Enter the path to the bzr executable. The path should be /usr/bin/bzr. |
662 | - -# Click ok, thats it, you should now have an working Eclipse with bazaar-plugin. |
663 | + -# Click OK, that's it, you should now have a working Eclipse with bazaar-plugin. |
664 | |
665 | Optional: |
666 | |
667 | -# To activate icon decorators go to: Preferences --> General --> Appearence --> Label Decorations and check Bazaar. |
668 | - -# To activate text decorators go to: Preferences --> Team --> Bazaar --> Text Decorators |
669 | - -# Customize console output: Preferences --> Team --> Bazaar --> Console |
670 | + -# To activate text decorators go to: Preferences --> Team --> Bazaar --> Text Decorators. |
671 | + -# Customize console output: Preferences --> Team --> Bazaar --> Console. |
672 | |
673 | -Step 3: Start an Eclipse project with bazaar. |
674 | +Step 3: Start an Eclipse project with bazaar: |
675 | |
676 | -# Download the latest source code from Forssim, by typing *bzr branch lp:forssim*. This will create an forssim folder with all the source code inside. |
677 | -# cd forssim |
678 | -# autoreconf -i |
679 | -# ./configure |
680 | - -# Launch eclipse |
681 | - -# During workspace promt, choose the folder where you have your forssim folder, e.g if you have your forssim folder in “Desktop” you choose *Desktop* as your workspace. |
682 | - -# Create a new c++ projekt in eclipse |
683 | - -# Choose *Makefile project --> empty project* |
684 | - -# Type in forssim as project name |
685 | - -# Click on finish |
686 | - -# Click on *Ok* on the prompt about overide |
687 | + -# Launch eclipse. |
688 | + -# During workspace prompt, choose the folder where you have your forssim folder, e.g. if you have your forssim folder in “Desktop” you choose *Desktop* as your workspace. |
689 | + -# Create a new c++ project in eclipse. |
690 | + -# Choose *Makefile project --> empty project*. |
691 | + -# Type in forssim as project name. |
692 | + -# Click on finish. |
693 | + -# Click on *Ok* on the prompt about override. |
694 | |
695 | - -# Now you should have all the files in a new project called forssim in eclipse with bazaar and buidling support |
696 | - -# To verify, try to build the project |
697 | + -# Now you should have all the files in a new project called forssim in eclipse with bazaar and building support. |
698 | + -# To verify, try to build the project. |
699 | -# Also for bazaar commands, right click on the project folder and go to team. This will open up the bazaar syntax view. |
700 | - -# Verify that you can commit and push |
701 | - |
702 | -Step 4: Run X3D files from eclipse |
703 | - |
704 | - -# Open Eclipse |
705 | - -# Select Run > External Tools > External Tools configuration |
706 | - -# Click on Program in the Configurations pane |
707 | - -# Click the New button to create a new configuration |
708 | + -# Verify that you can commit and push. |
709 | + |
710 | +Step 4: Run X3D files from eclipse: |
711 | + |
712 | + -# Open Eclipse. |
713 | + -# Select Run > External Tools > External Tools configuration. |
714 | + -# Click on Program in the Configurations panel. |
715 | + -# Click the New button to create a new configuration. |
716 | -# Fill in the following values: |
717 | |
718 | - Name: H3DLoad |
719 | @@ -128,7 +128,7 @@ |
720 | -# Click Apply and close the External Tools dialog box |
721 | -# Verify that *foot.x3d* is working by running the code from eclipse *H3DLoad* |
722 | |
723 | -NOTE: I've hardcoded in the arguments to run foot.x3d all the time which is not so good. There should be a better way to configure this so that all .x3d files can be run from eclipse. But for now this is the solution. Another issue that I came uppon was that even if you build everything In eclipse you need to run *sudo make install* in the terminal for the changes to go trough to the files. Maybe there is a solution for that also so that eclipse can do the *sudo make install* from some kind of script. |
724 | +NOTE: I've hardcoded in the arguments to run foot.x3d all the time, which is not so good. There should be a better way to configure this so that all .x3d files can be ran from eclipse. But for now this is the solution. Another issue that I came upon was that even if you build everything in eclipse you need to run *sudo make install* in the terminal for the changes to go through to the files. Maybe there is a solution for that also so that eclipse can do the *sudo make install* from some kind of script. |
725 | |
726 | |
727 | \section WindowsEnvironment Windows Environment |
728 | |
729 | === modified file 'doc/07_Join_team.dox' |
730 | --- doc/07_Join_team.dox 2009-03-11 14:04:04 +0000 |
731 | +++ doc/07_Join_team.dox 2009-07-15 12:38:40 +0000 |
732 | @@ -21,7 +21,7 @@ |
733 | ssh-keygen -t rsa |
734 | \endcode |
735 | |
736 | -When prompted, press Enter to accept the default file name for your key. Next, enter then confirm a password to protect your SSH key. Your key pair is stored in ~/.ssh/ as id_rsa.pub (public key) and id_rsa (private key). |
737 | +When prompted, press Enter to accept the default file name for your key. Next, enter and confirm a password to protect your SSH key. Your key pair is stored in ~/.ssh/ as id_rsa.pub (public key) and id_rsa (private key). |
738 | |
739 | Do: |
740 | |
741 | @@ -75,11 +75,12 @@ |
742 | |
743 | \subsection DoxygenML Doxygen mark up language |
744 | |
745 | -And how to use doxygen Doxygen is a source code documentation generator tool for C++, C, Java, Objective-C and Python. To download, install and compile Doxygen on your computer follow the instructions below. You will need GNU tools flex and bison to build the executable. |
746 | +Doxygen is a source code documentation generator tool for C++, C, Java, Objective-C and Python. To download, install and compile Doxygen on your computer follow the instructions below. You will need GNU tools flex and bison to build the executable. |
747 | |
748 | \code |
749 | sudo apt-get install doxygen flex bison |
750 | \endcode |
751 | + |
752 | |
753 | To allow Doxygen to use your comments to generate the documentation you need to comment your code in a specific way. To include a brief comment use three forward slashes instead of the usual two: |
754 | |
755 | |
756 | === modified file 'doc/08_Dev_method.dox' |
757 | --- doc/08_Dev_method.dox 2009-03-11 14:04:04 +0000 |
758 | +++ doc/08_Dev_method.dox 2009-07-15 12:38:40 +0000 |
759 | @@ -1,16 +1,16 @@ |
760 | /** |
761 | \page DevMethod Development method |
762 | -\section VersioningPolicy Versioning policy |
763 | +\section VersioningPolicy Version policy |
764 | (stable, unstable) |
765 | \section DevScrum Scrum |
766 | |
767 | We are using Scrum as a process framework for the development of the Forssim project. Scrum is an iterative incremental process of software development commonly used with agile software development. |
768 | |
769 | -Each sprint is 2 week long and at the end of a sprint cycle a demo is presented to the product owner and a new open source release is uploaded to the Launchpad team site. |
770 | +Each sprint is 2 weeks long and at the end of a sprint cycle a demo is presented to the product owner and a new open source release is uploaded to the Launchpad team site. |
771 | |
772 | Daily scrum meetings at 09.30. |
773 | |
774 | -\b TODO: Tickets/post it notes and how we use them |
775 | +\b TODO: Tickets/post it notes and how we use them. |
776 | |
777 | |
778 | \section GevBzr Bzr |
779 | @@ -22,13 +22,13 @@ |
780 | bzr launchpad-login <username> |
781 | \endcode |
782 | |
783 | -If everything went ok you should see no message. Tell bazaar who you are. |
784 | +If everything went OK you shouldn't see any message. Tell bazaar who you are: |
785 | |
786 | \code |
787 | bzr whoami |
788 | \endcode |
789 | |
790 | -Update the information |
791 | +Update the information: |
792 | |
793 | \code |
794 | bzr whoami "Lucas mylastname <myemail@example.com>" |
795 | @@ -51,7 +51,7 @@ |
796 | sudo make install |
797 | \endcode |
798 | |
799 | -Note, if you'r running a newly installed system it may be necessary to relink the libraries: |
800 | +Note, if you're running a newly installed system it may be necessary to relink the libraries: |
801 | |
802 | \code |
803 | sudo ln -s /usr/local/lib/* /usr/lib/ |
804 | |
805 | === modified file 'doc/09_FAQ.dox' |
806 | --- doc/09_FAQ.dox 2009-04-28 09:21:29 +0000 |
807 | +++ doc/09_FAQ.dox 2009-07-15 12:38:40 +0000 |
808 | @@ -2,7 +2,7 @@ |
809 | \page FAQ FAQ |
810 | |
811 | \section NoHeader The first word is missing from the section title |
812 | -If you've added a \c \\section or \c \\subsection with a title with more than one word, you will notice that the first word after \c \\section is missing. This is because Doxygen sets this word as a label, that you can later refer to with either \c \\ref (which inserts a reference) or \c \\sa (which inserts a "see also" paragraph). If it's just one word Doxygen will use it both as a label and as the title of the section. The solution when using a title with more than one word is to simply add a word -- which needs to be unique -- immediately after the \c \\section tag. E.g.: |
813 | +If you've added a \c \\section or \c \\subsection with a title with more than one word, you will notice that the first word after \c \\section is missing. This is because Doxygen sets this word as a label that you can later refer to with either \c \\ref (which inserts a reference) or \c \\sa (which inserts a "see also" paragraph). If it's just one word Doxygen will use it both as a label and as the title of the section. The solution when using a title with more than one word is to simply add a word -- which needs to be unique -- immediately after the \c \\section tag. E.g.: |
814 | |
815 | \code |
816 | \section ASimpleSection A simple section |
817 | @@ -25,30 +25,30 @@ |
818 | \section PedalIssues Issues when using pedals |
819 | |
820 | \subsection UsePedals How do I get the pedals to work? |
821 | -Since pygame loads some kind of sound manager it causes the simulator to crash since we have to use the downgraded kernel with which the sound doesn't work. Because of that we have commented out all code connected to pygame while we develop. |
822 | +Since pygame loads some kind of sound manager it causes the simulator to crash because we have to use the downgraded kernel with which the sound doesn't work. Because of that we have commented out all code connected to pygame while we develop. |
823 | |
824 | -If however, you have a Phantom Desktop you can use the pedals by simply commenting the code back in. Its the code that starts with \c #pygame.init() and ends at the end of the file. |
825 | +If however, you have a Phantom Desktop you can use the pedals by simply commenting the code back in. It's the code that starts with \c #pygame.init() and ends at the end of the file. |
826 | |
827 | \subsection CalibratePedals Calibrate Pedals |
828 | -If you use the Logitech wheel & pedals you will need to calibrate them. To do this type |
829 | +If you use the Logitech wheel & pedals you will need to calibrate them. To do this type: |
830 | |
831 | \code |
832 | sudo jscal -c /dev/input/js0 |
833 | \endcode |
834 | |
835 | -then complete the following routine: |
836 | +Then complete the following routine: |
837 | |
838 | -- Turn wheel to its LEFTMOST position, press Enter |
839 | -- Turn wheel to its CENTERED position, press Enter |
840 | -- Turn wheel to its RIGHTMOST position, press Enter |
841 | -- Press the RIGHT pedal. When it is FULLY pressed, press Enter |
842 | -- Release the pedal. When NONE of the pedals are pressed, press Enter |
843 | -- Press the LEFT pedal. When it is FULLY pressed, press Enter |
844 | +- Turn wheel to its LEFTMOST position, press Enter. |
845 | +- Turn wheel to its CENTERED position, press Enter. |
846 | +- Turn wheel to its RIGHTMOST position, press Enter. |
847 | +- Press the RIGHT pedal. When it is FULLY pressed, press Enter. |
848 | +- Release the pedal. When NONE of the pedals are pressed, press Enter. |
849 | +- Press the LEFT pedal. When it is FULLY pressed, press Enter. |
850 | |
851 | Your wheel & pedals should now be calibrated. |
852 | |
853 | \section BzrHowTo Bzr how-to |
854 | -The biggest difference between bzr and subversion is that bzr don't need any server, not even a local server. It is just a bunch of meta-files. This means that you can create a new repository extremly quick, and start committing, branching, merging and publish your results immediatley. You can even physically move the repository with a usb stick to a friends computer and continue commiting locally there. Launchpad, our main repository holder, should be more seen as a file area than a revision control server (altough it do have extra features). This how-to or - as put it in swedish/english: lazy dog, explains the commands necessary for our development: |
855 | +The biggest difference between bzr and subversion is that bzr don't need any server, not even a local server. It is just a bunch of meta-files. This means that you can create a new repository extremely quick, and start committing, branching, merging and publish your results immediately. You can even physically move the repository with an usb stick to a friend's computer and continue committing locally there. Launchpad, our main repository holder, should be more seen as a file area than a revision control server (although it do have extra features). This how to put it in Swedish/English: lazy dog, explains the commands necessary for our development: |
856 | |
857 | \b TODO: Describe with images how we do it best |
858 | |
859 | @@ -73,7 +73,7 @@ |
860 | \code |
861 | > bzr branch pelle pelle.hack |
862 | \endcode |
863 | -gives you a directory pelle.hack with a perfect branch of commited files |
864 | +gives you a directory pelle.hack with a perfect branch of committed files |
865 | of pelle repository |
866 | |
867 | |
868 | @@ -148,9 +148,9 @@ |
869 | \subsection BzrSuggestMerge Suggest merge |
870 | |
871 | |
872 | -\section Ubuntufaq Ubuntu FAQ |
873 | +\section Ubuntufaq Ubuntu |
874 | |
875 | -I seem to miss a certain command? For example I get thiss error "make: xelatex: Command not found" |
876 | +I seem to miss a certain command, for example, I get this error "make: xelatex: Command not found" |
877 | \code |
878 | jonas@ubuntu:~/forssim/Doxypaper/latex$ apt-cache search xelatex |
879 | texlive-xetex - TeX Live: XeTeX macros |
880 | @@ -177,7 +177,7 @@ |
881 | \code |
882 | ffmpeg2theora -p preview input_file.dv -o output_file.ogg |
883 | \endcode |
884 | -if lower quality is ok. |
885 | +if lower quality is OK. |
886 | |
887 | |
888 | \section Debian |
889 | @@ -190,6 +190,6 @@ |
890 | \code |
891 | root ALL=(ALL) ALL |
892 | \endcode |
893 | -with username istead of root |
894 | +with username instead of root |
895 | |
896 | */ |
897 | |
898 | === modified file 'doc/10_Demo.dox' |
899 | --- doc/10_Demo.dox 2009-03-05 11:24:37 +0000 |
900 | +++ doc/10_Demo.dox 2009-07-15 12:38:40 +0000 |
901 | @@ -1,7 +1,7 @@ |
902 | /** |
903 | \page DemoDoc Demo |
904 | |
905 | -Detail description of full scale demo |
906 | +Detail description of full-scale demo |
907 | |
908 | |
909 | */ |
910 | |
911 | === modified file 'doc/FsWisdom_quick_install.odt' |
912 | Binary files doc/FsWisdom_quick_install.odt 2009-07-10 13:15:54 +0000 and doc/FsWisdom_quick_install.odt 2009-07-15 12:42:30 +0000 differ |
913 | === modified file 'doc/MainPage.dox' |
914 | --- doc/MainPage.dox 2009-03-05 11:24:37 +0000 |
915 | +++ doc/MainPage.dox 2009-07-15 12:38:40 +0000 |
916 | @@ -2,7 +2,7 @@ |
917 | |
918 | \mainpage Introduction to Forssim |
919 | |
920 | -Forssim is a foss project aiming at being the reference implementation of haptic (force feedback) algorithms for virutal hard material collision handling and data modification. Typical application is surgical simulation of drill-bone interaction. |
921 | +Forssim is a foss project aiming at being the reference implementation of haptic (force feedback) algorithms for virtual hard material collision handling and data modification. Typical application is surgical simulation of drill-bone interaction. |
922 | |
923 | To get involved with development please send an e-mail to the mailinglist, or to jonas@forsslundsystems.se |
924 | |
925 | @@ -13,7 +13,7 @@ |
926 | - Here we add something about oralsim |
927 | - Work in progress is demonstration for liver surgery planning |
928 | |
929 | -\section DevPotentials Future development possibilites and application areas |
930 | +\section DevPotentials Future development possibilities and application areas |
931 | |
932 | */ |
933 | |
934 | |
935 | === modified file 'doc/intro.DEPRECATED' |
936 | --- doc/intro.DEPRECATED 2009-03-11 14:04:04 +0000 |
937 | +++ doc/intro.DEPRECATED 2009-07-15 12:38:40 +0000 |
938 | @@ -1,7 +1,7 @@ |
939 | /** |
940 | |
941 | \page Project_Introduction_Document DEPRECATED Project Introduction Document |
942 | - See 3.5 for an overview of the filestructure in forssim and different models such as oralsim. |
943 | + See 3.5 for an overview of the file-structure in forssim and different models such as oralsim. |
944 | \section Forssim Forssim |
945 | |
946 | About this document... |
947 | @@ -14,7 +14,7 @@ |
948 | \subsection Introduction Introduction |
949 | |
950 | We are using the following general technologies:\n |
951 | -\b TODO: Add about QT? Sort of a general technology for crossplatform GUI development. |
952 | +\b TODO: Add about QT? Sort of a general technology for cross-platform GUI development. |
953 | |
954 | \b H3D |
955 | |
956 | @@ -26,13 +26,12 @@ |
957 | \b H3D - Fields |
958 | |
959 | Fields are the most important building block of the whole API. In its simplest form, a Field is simply |
960 | -an event handling mechanism. The fields are arranged in a network through which data is sent and handled by each field in turn. The connection between the fields is called routes and can be |
961 | -of different types: one-to-one, one-to-many or many-to-many. |
962 | +an event handling mechanism. The fields are arranged in a network through which data is sent and handled by each field in turn. The connection between the fields is called routes and can be of different types: one-to-one, one-to-many or many-to-many. |
963 | |
964 | |
965 | \b H3D - Nodes |
966 | |
967 | -Nodes are the traditional building blocks of a scene graph. Nodes have only one function in H3D, to be containers for fields for easier management. An entire application can be set up without the use of nodes, however such an application would soon become very hard to survey as the application becomes more complex. |
968 | +Nodes are the traditional building blocks of a scene graph. Nodes have only one function in H3D, to be containers for fields for easier management. An entire application can be set up without the use of nodes. However, such an application would soon become very hard to survey as the application becomes more complex. |
969 | |
970 | More useful information about programming with H3D in H3D API Manual: http://www.h3dapi.org/uploads/api/H3DAPI_20_beta/H3D%20API%20Manual.pdf |
971 | |
972 | @@ -58,7 +57,7 @@ |
973 | |
974 | \b MedX3D |
975 | |
976 | -MedX3D is an implementation of Volume Rendering component of X3D. MedX3D contains nodes for visual rendering of volume data, such as medical data from CT/MRI-scans. A X3D file using X3D volume rendering component nodes must specify a volume data node, a volume style node and the data (NRRD file) for which to apply this style. Forssim project also use the toolkit to include an implemetation of the Marching cubes algorithm.MedX3d requires Teem. |
977 | +MedX3D is an implementation of Volume Rendering component of X3D. MedX3D contains nodes for visual rendering of volume data, such as medical data from CT/MRI-scans. A X3D file using X3D volume rendering component nodes must specify a volume data node, a volume style node and the data (NRRD file) for which to apply this style. Forssim project also use the toolkit to include an implementation of the Marching cubes algorithm.MedX3d requires Teem. |
978 | |
979 | Read more:http://www.h3dapi.org/modules/mediawiki/index.php/MedX3D |
980 | |
981 | @@ -68,10 +67,10 @@ |
982 | |
983 | This project uses these projects as dependencies: |
984 | |
985 | - \li SenseGraphics: H3D API, Consist of the libraries: H3DAPI, HAPI and H3DUtil |
986 | - \li SenseGraphics: MedX3D, for visual volume rendering |
987 | - \li Teem |
988 | - \li OpenHaptics: (proprietary drivers) |
989 | + \li SenseGraphics: H3D API, Consist of the libraries: H3DAPI, HAPI and H3DUtil. |
990 | + \li SenseGraphics: MedX3D, for visual volume rendering. |
991 | + \li Teem. |
992 | + \li OpenHaptics: (proprietary drivers). |
993 | \li QT: GUI and window-handling. Installed with Ubuntu. |
994 | \li Pygame: Is needed to get events from the pedals. Install even if the pedal is not used. |
995 | |
996 | @@ -82,7 +81,7 @@ |
997 | \section Section_2 Install and setup dependencies |
998 | |
999 | \subsection Documentation Documentation |
1000 | -Before you do anything else, install Ubuntu 8.10 i386. Then you need to install Bazaar and checkout Forssim to get this document |
1001 | +Before you do anything else, install Ubuntu 8.10 i386, then you need to install Bazaar and checkout Forssim to get this document |
1002 | and related files: |
1003 | \code |
1004 | sudo apt-get install bzr |
1005 | @@ -108,7 +107,7 @@ |
1006 | |
1007 | \subsection Ubuntu Ubuntu Base Packages |
1008 | |
1009 | -Install Ubuntu GNU/Linux 8.10. Then you need to install the following packages: \n |
1010 | +Install Ubuntu GNU/Linux 8.10, then you need to install the following packages: \n |
1011 | bzr cmake gcc g++ libxerces-c28 libxerces-c2-dev ftgl-dev libopenal1 libalut0 |
1012 | libalut-dev libopenal-dev libglew1.5-dev freeglut3 libglut3-dev |
1013 | libcurl4-openssl-dev libaudiofile-dev libfontconfig1-dev libfontconfig1 |
1014 | @@ -125,7 +124,7 @@ |
1015 | ./forssim/dep/setup_ubuntu |
1016 | \endcode |
1017 | |
1018 | -If you have a Sensable Phantom Omni or Sensable Phantom Desktop haptic device, you need to install the proprietary OpenHaptics drivers provided from Sensbale only (not for redistribution). If you don't have a haptic device or trying with for example Novint Falcon, you can skip this step. |
1019 | +If you have a SensAble Phantom Omni or SensAble Phantom Desktop haptic device, you need to install the proprietary OpenHaptics drivers provided from Sensbale only (not for redistribution). If you don't have a haptic device or trying with for example Novint Falcon, you can skip this step. |
1020 | |
1021 | \subsection OpenHaptics Open Haptics |
1022 | |
1023 | @@ -167,13 +166,13 @@ |
1024 | |
1025 | |
1026 | \subsection System System configuration |
1027 | -If you have Omni (developer station) or Phantom (full Simulator station) the setup is diffrent. Follow the right one. |
1028 | +The setup is different if you have Phantom Omni (developer station) or Phantom Desktop (full Simulator station), so make sure you follow the right instructions. |
1029 | |
1030 | \subsection ystem System configuration: Developer station Omni |
1031 | |
1032 | \subsubsection PhantomDeviceDrivers Phantom Device Drivers with IEEE1394 (OmniSetup) |
1033 | |
1034 | -There are some known issues with proprietary Sensable Phantom drivers, also known as Openhaptics, and IEEE1394 on modern kernels. A forum post on the internal sensable developer site describes the problem: |
1035 | +There are some known issues with proprietary SensAble Phantom drivers, also known as Openhaptics, and IEEE1394 on modern kernels. A forum post on the internal SensAble developer site describes the problem: |
1036 | |
1037 | "Along with the new version of fedora a kernel upgrade to 2.6.25.x was necessary. Since then, (...) we are not able to continue our research with this device because the driver is too old. It uses a deprecated isochronous transfer mode that was dropped in mid 07 from the kernel." (Housetrek) |
1038 | |
1039 | @@ -189,20 +188,20 @@ |
1040 | sudo gedit /etc/apt/sources.list |
1041 | \endcode |
1042 | |
1043 | -Add the following line |
1044 | +Add the following line: |
1045 | |
1046 | \code |
1047 | deb http://se.archive.ubuntu.com/ubuntu/ gutsy main |
1048 | \endcode |
1049 | |
1050 | -Then run |
1051 | +Then run: |
1052 | |
1053 | \code |
1054 | sudo apt-get update |
1055 | sudo apt-get install linux-image-2.6.22-14-generic |
1056 | \endcode |
1057 | |
1058 | -And reboot. Choose 2.6.22-14 in the boot loader. It is as easy as that. If you need proprietary graphics drivers (which we do), you probably need to update them too. A suggestion is to use envy: |
1059 | +And reboot. Choose 2.6.22-14 in the boot loader, it is as easy as that. If you need proprietary graphics drivers (which we do), you probably need to update them too. A suggestion is to use envy: |
1060 | |
1061 | \code |
1062 | sudo apt-get install envyng-core |
1063 | @@ -296,7 +295,7 @@ |
1064 | |
1065 | |
1066 | \subsubsection InstallPhantomDeviceDrivers Install Phantom Device Drivers with parallel port |
1067 | -We will now configure parallell ports to be used with Sensable Phantom Desktop. |
1068 | +We will now configure parallel ports to be used with SensAble Phantom Desktop. |
1069 | Add the following line at the end of /etc/modprobe.d/options |
1070 | \code |
1071 | options parport_pc io=0x378 irq=7 |
1072 | @@ -306,18 +305,18 @@ |
1073 | \code |
1074 | ls -l /dev/phnepp |
1075 | \endcode |
1076 | -If there is no /dev/phnepp file, then one must be created and softlinked to /dev/parport0 |
1077 | +If there is no /dev/phnepp file, then one must be created and soft-linked to /dev/parport0 |
1078 | \code |
1079 | sudo ln -s /dev/parport0 /dev/phnepp |
1080 | \endcode |
1081 | |
1082 | -Modify udev rules to make this soft link permenantly: add the following line at the end of /etc/udev/rules.d/60-symlinks.rules: |
1083 | +Modify udev rules to make this soft link permanently: add the following line at the end of /etc/udev/rules.d/60-symlinks.rules: |
1084 | \code |
1085 | KERNEL=="parport*", SYMLINK+="phnepp" |
1086 | \endcode |
1087 | |
1088 | Enable any user to access parallel port: add the user to the same group as the port belongs to. |
1089 | -First check the permisson on the device (usually lp is the group) |
1090 | +First check the permission on the device (usually lp is the group) |
1091 | \code |
1092 | #ls -l /dev/parport0 |
1093 | crw-rw---- 1 lp lp 99, 0 2009-01-13 11:04 /dev/parport0 |
1094 | @@ -332,7 +331,7 @@ |
1095 | \code |
1096 | PHANToMConfiguration |
1097 | \endcode |
1098 | -In the configuration window, choose "Default PHANToM" as hardware, "desktop" as PHANTomModel and the base adress is set to 0x378. |
1099 | +In the configuration window, choose "Default PHANToM" as hardware, "desktop" as PHANTomModel and the base address is set to 0x378. |
1100 | |
1101 | \subsection Test Verify installation |
1102 | Use the following program to verify the driver is installed correctly |
1103 | @@ -374,7 +373,7 @@ |
1104 | sudo ln -s /usr/local/lib /usr/lib |
1105 | \endcode |
1106 | |
1107 | -Test now: |
1108 | +Now test: |
1109 | \code |
1110 | H3DLoad foot.x3d |
1111 | \endcode |
1112 | @@ -393,7 +392,7 @@ |
1113 | \endcode |
1114 | |
1115 | |
1116 | -\subsubsection hapticdevice How to run with phantom haptic device: |
1117 | +\subsubsection hapticdevice How to run with PHANTOM haptic device: |
1118 | |
1119 | \code |
1120 | sudo modprobe raw1394 |
1121 | @@ -412,20 +411,20 @@ |
1122 | PHANToMTest |
1123 | \endcode |
1124 | |
1125 | -\subsubsection Troubleshoot_phantom Troubleshoot erros with haptic device: |
1126 | +\subsubsection Troubleshoot_phantom Troubleshoot errors with haptic device: |
1127 | |
1128 | -# Are you running right kernel? |
1129 | \code |
1130 | jonas@jonas-desktop:~$ uname -a |
1131 | Linux jonas-desktop 2.6.22-14-generic #1 SMP Sun Oct 14 23:05:12 GMT 2007 i686 GNU/Linux |
1132 | \endcode |
1133 | - -# Reboot computer with phantom connected |
1134 | - -# Make sure you run the commands above |
1135 | + -# Reboot computer with phantom connected. |
1136 | + -# Make sure you run the commands above. |
1137 | |
1138 | \section Section_3 Development process |
1139 | \subsection GenerateDocumentation Generate Documentation |
1140 | |
1141 | -And how to use doxygen Doxygen is a source code documentation generator tool for C++, C, Java, Objective-C and Python. To download, install and compile Doxygen on your computer follow the instructions below. You will need GNU tools flex and bison to build the executable. |
1142 | +Doxygen is a source code documentation generator tool for C++, C, Java, Objective-C and Python. To download, install and compile Doxygen on your computer follow the instructions below. You will need GNU tools flex and bison to build the executable. |
1143 | |
1144 | \code |
1145 | sudo apt-get install doxygen flex bison |
1146 | @@ -497,7 +496,7 @@ |
1147 | doxygen doxygenDoc |
1148 | \endcode |
1149 | |
1150 | -A output directory called Doxygen will be generated with the code documentation. |
1151 | +An output directory called Doxygen will be generated with the code documentation. |
1152 | |
1153 | To see the generated html documentation type: |
1154 | |
1155 | @@ -525,7 +524,7 @@ |
1156 | sudo apt-get remove eclipse |
1157 | \endcode |
1158 | |
1159 | -Go to http://www.eclipse.org and download "Eclipse IDE for C/C++ Developers (68 MB)" then, |
1160 | +Go to http://www.eclipse.org and download "Eclipse IDE for C/C++ Developers (68 MB)" then; |
1161 | \code |
1162 | cd ~/Desktop |
1163 | tar -xzvf eclipse-cpp-ganymede-SR1-linux-gtk.tar.gz |
1164 | @@ -541,7 +540,7 @@ |
1165 | \endcode |
1166 | |
1167 | <b>Install QT plugin</b>\n |
1168 | -1: Download qt-eclipse integrationpackage from: \n |
1169 | +1: Download qt-eclipse integration-package from: \n |
1170 | http://dist.trolltech.com/developer/download/qt-eclipse-integration-linux.x86-1.4.3.tar.gz \n |
1171 | 2: If you have installed Eclipse under your home directory, e.g. /home/daliangwe, unpack the package there: |
1172 | \code |
1173 | @@ -579,16 +578,16 @@ |
1174 | |
1175 | Step 2: Install bazaar – eclipse plugin: |
1176 | |
1177 | - -# Launch eclipse |
1178 | + -# Launch eclipse. |
1179 | -# Go to *Help* --> *Software updates* |
1180 | -# Click *Available Software* --> *Add Site...* |
1181 | -# In the location field, enter the URL: http://verterok.com.ar/bzr-eclipse/update-site/ |
1182 | - -# Click *refresh*, enter "bazaar" |
1183 | - -# Select "Eclipse plugin for Bazaar" |
1184 | + -# Click *refresh*, enter "bazaar". |
1185 | + -# Select "Eclipse plugin for Bazaar". |
1186 | -# Click *Install*, and this will launch a wizard (license agreement, etc). |
1187 | -# Restart Eclipse. |
1188 | -# If needed: Go to: Window --> Preferences --> Team --> Bazaar and Enter the path to the bzr executable. The path should be /usr/bin/bzr. |
1189 | - -# Click ok, thats it, you should now have an working Eclipse with bazaar-plugin. |
1190 | + -# Click OK, that's it, you should now have an working Eclipse with bazaar-plugin. |
1191 | |
1192 | Optional: |
1193 | |
1194 | @@ -603,23 +602,23 @@ |
1195 | -# autoreconf -i |
1196 | -# ./configure |
1197 | -# Launch eclipse |
1198 | - -# During workspace promt, choose the folder where you have your forssim folder, e.g if you have your forssim folder in “Desktop” you choose *Desktop* as your workspace. |
1199 | - -# Create a new c++ projekt in eclipse |
1200 | + -# During workspace prompt, choose the folder where you have your forssim folder, e.g. if you have your forssim folder in “Desktop” you choose *Desktop* as your workspace. |
1201 | + -# Create a new c++ project in eclipse |
1202 | -# Choose *Makefile project --> empty project* |
1203 | -# Type in forssim as project name |
1204 | -# Click on finish |
1205 | - -# Click on *Ok* on the prompt about overide |
1206 | + -# Click on *Ok* on the prompt about override |
1207 | |
1208 | - -# Now you should have all the files in a new project called forssim in eclipse with bazaar and buidling support |
1209 | - -# To verify, try to build the project |
1210 | + -# Now you should have all the files in a new project called forssim in eclipse with bazaar and building support. |
1211 | + -# To verify, try to build the project. |
1212 | -# Also for bazaar commands, right click on the project folder and go to team. This will open up the bazaar syntax view. |
1213 | - -# Verify that you can commit and push |
1214 | + -# Verify that you can commit and push. |
1215 | |
1216 | -Step 4: Run X3D files from eclipse |
1217 | +Step 4: Run X3D files from eclipse: |
1218 | |
1219 | -# Open Eclipse |
1220 | -# Select Run > External Tools > External Tools configuration |
1221 | - -# Click on Program in the Configurations pane |
1222 | + -# Click on Program in the Configurations panel |
1223 | -# Click the New button to create a new configuration |
1224 | -# Fill in the following values: |
1225 | |
1226 | @@ -630,7 +629,7 @@ |
1227 | -# Click Apply and close the External Tools dialog box |
1228 | -# Verify that *foot.x3d* is working by running the code from eclipse *H3DLoad* |
1229 | |
1230 | -NOTE: I've hardcoded in the arguments to run foot.x3d all the time which is not so good. There should be a better way to configure this so that all .x3d files can be run from eclipse. But for now this is the solution. Another issue that I came uppon was that even if you build everything In eclipse you need to run *sudo make install* in the terminal for the changes to go trough to the files. Maybe there is a solution for that also so that eclipse can do the *sudo make install* from some kind of script. |
1231 | +NOTE: I've hardcoded in the arguments to run foot.x3d all the time that is not so good. There should be a better way to configure this so that all .x3d files can be ran from eclipse. But for now this is the solution. Another issue that I came uppon was that even if you build everything in eclipse you need to run *sudo make install* in the terminal for the changes to go through to the files. Maybe there is a solution for that also so that eclipse can do the *sudo make install* from some kind of script. |
1232 | |
1233 | |
1234 | |
1235 | @@ -674,7 +673,7 @@ |
1236 | bzr launchpad-login <username> |
1237 | \endcode |
1238 | |
1239 | -If everything went ok you should see no message. Tell bazaar who you are. |
1240 | +If everything went OK you shouldn't see any message. Tell bazaar who you are: |
1241 | |
1242 | \code |
1243 | bzr whoami |
1244 | @@ -703,7 +702,7 @@ |
1245 | sudo make install |
1246 | \endcode |
1247 | |
1248 | -Note, if you'r running a newly installed system it may be necessary to relink the libraries: |
1249 | +Note, if you're running a newly installed system it may be necessary to relink the libraries: |
1250 | |
1251 | \code |
1252 | sudo ln -s /usr/local/lib/* /usr/lib/ |
1253 | @@ -727,7 +726,7 @@ |
1254 | |
1255 | We are using Scrum as a process framework for the development of the Forssim project. Scrum is an iterative incremental process of software development commonly used with agile software development. |
1256 | |
1257 | -Each sprint is 2 week long and at the end of a sprint cycle a demo is presented to the product owner and a new open source release is uploaded to the Launchpad team site. |
1258 | +Each sprint is 2 weeks long and at the end of a sprint cycle a demo is presented to the product owner and a new open source release is uploaded to the Launchpad team site. |
1259 | |
1260 | Daily scrum meetings at 09.00 o'clock. |
1261 | \subsection ComponentImplementation Component implementation and test strategy |
1262 | @@ -883,7 +882,7 @@ |
1263 | |
1264 | \subsection Ubuntufaq Ubuntu FAQ |
1265 | |
1266 | -I seemd to miss a certain command? For example I get thiss error "make: xelatex: Command not found" |
1267 | +I seem to miss a certain command. For example, I get this error "make: xelatex: Command not found" |
1268 | \code |
1269 | jonas@ubuntu:~/forssim/Doxypaper/latex$ apt-cache search xelatex |
1270 | texlive-xetex - TeX Live: XeTeX macros |
Changed documentation. Only spelling and grammar changes.