Professional Documents
Culture Documents
Installation
After installation, your license key determines which product you are licensed to use. KUBRIX is only
available in 64-bits. After the installation procedure below, two icons, for automatic meshing and,
for interactive meshing (BlockRanger) will be installed in Rhino5.
1. Install the latest version of KUBRIX (64 bit) from the Itasca KUBRIX website.
2. Install Rhino 5 (64bit) from http://www.rhino3d.com/download and start Rhino up.
3. Navigate to C:\ProgramData\ItascaRhinoStuff (if you cannot find ProgramData , this folder may be
hidden on your machine. Simply, start typing C:\ProgramData in the address bar of your folder to
see it), select the following files:
BlockRanger.rhi
ColorizeObjects.rvb
Kubrix15.rui
MakePFCClump.rvb
drag these files over the Rhino graphic screen and drop them. The Rhino Package installer dialog box
opens.
4. Follow the instructions, close the dialog box and exit Rhino. You are done.
5. Create a text file called kubrix_lock.txt and place the encrypted string you received, including any
trailing -, if there is any, on the first line of this file, and save it.
6. Place the kubrix_lock.txt file in your C:\ folder.
Running KUBRIX
You can run KUBRIX in three ways. By clicking on a KUBRIX icon in Rhino, by typing Run Kubrix on
the Rhino command line, or by opening a Command Window and typing kubrix. If you are unable to
run KUBRIX in Rhino or in a command window, please restart your machine. The easiest way to use
KUBRIX is to click on to use the KUBRIX automatic or to use KUBRIX interactive in Rhino.
KUBRIX offers engineers capabilities that cover a wide range of volume grid generation needs.
Beyond FLAC3D and 3DEC, KUBRIX produces meshes in the following file formats:
abaqus, ansys, ensight, flac3d, ideas, marc, nastran, patran, gridpro, and vrml.
Geo
Hex
BR
At times, we will refer to menu items and at other times, the command itself (as in _Shade). In all cases,
whether you click an icon, select a menu item or enter a command, use the Help|Command Help pane
on the right side as a context-sensitive help.
Figure 2: The ColorizeObjects icon and its tooltip in the Kubrix toolbar
Figure 3: The NonManifoldMerge icon and its tooltip in the Kubrix toolbar
F3 Properties
F8 Ortho
F9 Snap
The following shortcuts may be added to Rhino to streamline certain tedious and repetitive tasks:
You can set a shortcut, F4, that does all this. Left-click on the icon marked Options, on the left pane,
under Rhino Options select Keyboard. If the slot in front of F4 is available, type in _AlignMeshVertices
SelectVertices
SplitMeshEdge:
Set F6 to _SplitMeshEdge
Tolerances
Tolerances matter especially when intersecting meshes or doing Boolean operations on meshes. In all
cases, make sure that you move your model in case it is too far away from the origin. Moving objects
closer to the origin improves accuracy in Rhino, KUBRIX and the analysis software.
Thicker lines
The default representation of curves (1 pixel wide) may be too thin and difficult to see when a Rhino
window is projected on a screen. Figure 4, left, shows the default representation. The following
procedure shows how to draw Curves 3 pixels-wide whenever Shaded View is selected (Figure 4, right).
Select the Tools|Options menus item. In the Left pane of the Rhino Options dialog box, under Rhino
Options, select View|Display Models|Shaded|Objects|Curves. In the Curve Settings pane, to the right,
Change the default setting of Curve width from 1 to 3 and click OK (Figure 5).
Figure 6).
KUBRIX Geo fills the interior of a closed manifold or non-manifold triangular surface mesh with
hexahedral or tetrahedral volume elements (zones) and saves the resulting mesh as an ASCII file in
Rhino's Current Working Directory. The closed surface used as input to KUBRIX is prepared in Rhino and
saved as an ASCII STL mesh file.
Geo/Hex Options
A limited number KUBRIX Automeshing options are available from the GUI but all the options are
available through command line. To enter commands through the GUI, enter them through the New
Keywords field.
The BR commands converts selected 4, 5 or 6-sided solids into blocks of high-quality hexahedral (brick)
elements for use with most engineering analysis packages, including Itasca's FLAC3D and 3DEC , and
saves the resulting mesh as an ASCII file in your (Rhino's) Current Working Directory. Tutorial 7 and
Exercise 3 are devoted to the use of the BR command.
If the selected solids are contiguous, BR ensures that the resulting grid maintains grid conformity and
continuity across block corners, edges and faces so that no dangling nodes will result.
All solids successfully processed by BR are saved as grid files in Rhino's Current Working Directory (see
Rhino's SetWorkingDirectory command) as an ASCII file of the form BlockRanger.xyz. Solids that did
not qualify or could not be successfully meshed remain highlighted on your screen. Use the Invert
Selection and Hide Objects of the Hide icon to just make these solids visible and correct them.
Maximum element (zone) edge length in model coordinates. By default, this number is calculated as
one tenth the length of the model.
MinEdgeResolution
Minimum number of elements across each grid block edge. Its default value is 3.
TargetNumElements
Use this option if you want to reduce the maximum element aspect ratio in the grid. BR will Initially
build a grid based on the prescribed MaxEdgeLength and MinEdgeResolution. In a typical block-
structured grid, as BR reduces the maximum aspect ratio, the number of elements (zones) increases. BR
stops when the number of elements exceeds TargetNumElements.
OutputFormat
Format in which the resulting volume grid file should be saved. Choices are: 3DEC, ABAQUS, ANSYS,
CCFD, FLAC3D, I-DEAS, LS-DYNA, MARC, NASTRAN, PATRAN and VRML.
Once a grid has been build using the above global parameters, you can control the local mesh resolution
by manually setting the edge resolution you want. Below is the bathtubSolids.3dm model which you can
find in your Tutorial Files.
Running BlockRanger using the default parameters results in the grid below.
Run BlockRanger again, this time making sure to include the edges as well. This results in the grid
below.
You have created a cylindrical solid. A solid is a closed surface. It has a clear interior and exterior. You
are now going to create a triangular mesh representing the surface of the cylinder. Creating a triangular
surface mesh is a necessary step on the way to creating a volume mesh of the cylinder.
3. Select the File|Save As menu item and save your model as cyl.3dm.
4. Select the cylinder and select the menu item Mesh|From NURBS objects. The Polygon mesh
detailed options dialog box opens. If you see a button in the lower-right corner of the box marked
Simple control, click it to see a simplified version of this dialog box.
5. In the simplified dialog box, slide the horizontal cursor all the way to the right towards More
Polygons and click on Preview to see a preview of the resulting surface mesh. Click on OK to create
a surface mesh (Figure 10).
6. While the original cylindrical surface is still highlighted (seen in light yellow in Figure 10), select it
and hit <DELETE> to keep only the surface mesh.
7. Select the mesh, select the menu item File|Export Selected and when the Export dialog box opens,
enter cyl for the File name and select stereolythography (*.stl) for the Save as type.
8. When the STL Export Options dialog box opens, make sure that ASCII File type and Export open
objects are both checked. Click OK to complete the Save operation.
A triangular surface mesh saved as a formatted STL file serves as input to the Kubrix automatic mesh
generator. Kubrix can be run from Rhino by clicking on the Kubrix icon (Figure 11).
9. Run the Kubrix program by clicking on the Kubrix icon and select the Structured Hexa tab. Click on
Default to set all parameters to their default values then click on the Input File button and select
cyl.stl. Kubrix will use the file cyl.stl as input to generate a hexahedral mesh of the interior.
10. Set the Max Edge Length to 0.5 and click on Compute.
11. Kubrix generates two files: kubrix_out.flac3d and kubrix_out.wrl. You can inspect the resulting
model by launching a new instance of Rhino and importing kubrix_out.wrl to visualize it.
END OF TUTORIAL 1
Figure 13: A FLAC3D model (left) and a 3DEC model (right) of a vertical shaft in a stratified soil
3. Double-click the Perspective viewport title to maximize the Perspective viewport (Figure 15).
4. Double-click the Perspective viewport title to return to a 4-view window and click on the title of the
Top viewport to activate it.
5. Select Solid|Cylinder. Enter 0,0 followed by <ENTER> to specify the coordinates of the center of
the cylinder base (in the x, y coordinate system). Enter 20 followed by <ENTER> for the radius.
Enter 200 followed by <ENTER> to specify the center of the top of the cylinder.
Please note that Rhino accepts both 0,0,200 and 200 as the 3rd parameter of the Cylinder Command.
Since we are in a Top view, Rhino rightly assumes that 200 means 0,0,200.
6. Left-click on the button marked Shaded Viewport to see the box and cylinder (Figure 16).
7. To move the cylinder down by 40 feet, select the cylinder and select the menu item
Transform|Move. Enter 0,0,0 followed by <ENTER>. Enter 0,0,-40 followed by <ENTER> (Figure
17).
8. To excavate the well, we must subtract (in the Boolean algebra sense) the cylinder from the box. To
do so, select the menu item Solid|Difference. First select the box followed by <ENTER>, then select
the cylinder followed by <ENTER> (Figure 18).
Figure 18: The Boolean subtraction of the cylinder from the box represents the excavation
1. Prior to creating a surface mesh based on a solid model, you should save the Rhino model. Select
File|Save As and when the Save dialog box opens, enter t2_0 for the File name and make sure that
the Save as type is set to Rhino 4 3D Models (*.3dm). A file called t2_0.3dm is created in your
current folder.
2. Select the model and select the Mesh|From NURBS objects menu item. The Polygon mesh detailed
options dialog box opens. If you see a button in the lower-right corner of the box marked Simple
control, click it to see a simplified version of this dialog box.
4. Click OK to accept the surface mesh. Note that the original solid is still highlighted (in yellow) while
the mesh is drawn in black.
5. Hit <DELETE> to delete the (highlighted) solid. What is left is the surface mesh.
6. Select the mesh and left-click on the icon marked Check located in the Geometry Fix toolbar. Rhino
responds with information that indicates that the mesh has no naked edges. Naked edges are
edges attached to only one polygon and are symptomatic of a mesh that is not closed.
7. The mesh contains both triangular and quadrilateral polyhedra. As mentioned earlier, we need an
all-triangular surface mesh to proceed. To triangulate the mesh, select the mesh and left-click on
the icon marked Triangulate Mesh.
8. Select the model and select the File|Export selected menu item and when the Export dialog box
opens, enter t2_0 for the File name and select stereolythography (*.stl) for the Save as type.
9. When the STL Export Options dialog box opens, make sure that Ascii File type and Export open
objects are both checked. Click OK to complete the Save.
2. Click on the Default button to revert to default parameters. Please note that the output file type is
.flac3d which is an ASCII file that can be directly read into FLAC3D as a grid file. Click Compute to
launch the computation. The screen output is shown blow.
............................................................................
Copyright (C) 1995-2015 Itasca Consulting Group, Inc. All rights reserved.
............................................................................
PLI123: The input surface will be remeshed ...
PLI001: The input surface name is:
C:/Users/t1_0.stl ...
PLI007: REQUEST: STL input surface (-it stl) ...
PLI002: The output mesh file name is:
kubrix_out ...
PLI065: REQUEST: output type is FLAC3D (-ot flac3d) ...
PLI003: The minimum mesh block resolution is 1 ...
PLI056: The blocking efficiency is 0.50 (-e) ...
PLI042: A block-structured mesh is built (-str 2) ...
PLI044: Correct all negative Jacobian elements ...
ISI002: Finished reading 292 triangles and 148 nodes.
ISI032: Checking for surface self-intersection ...
MGI088: Surface remeshing completed...
MGI096: Remeshed surface contains 922 triangles ...
MGI096: Remeshed surface contains 463 nodes ...
ISI032: Checking for surface self-intersection ...
ISI025: Translating input into an STL file ...
PLI093: STL translation completed.
MGI066: Feature refinement: final triangles count 922 ...
MGI068: Fuzzy-logic block decomposition ...
MGI037: Done. 1/1 iters beta 0.000100, sp 11, st 8.89e+000 ...
MGI001: Block decomposition completed (17) ...
MGI013: Volume decomposed into 17 blocks and 1 material...
MGI018: Final check ........ all Jacobians are positive.
MGI082: Block reduction complete (9)...
MGI012: Output mesh contains 9 hex elements ...
MGI012: Output mesh contains 24 vertices ...
MGI012: Output mesh contains 1 material ...
MGI054: Max. edge offset ... 7.51e+000 u between nodes 19, 20
MGI057: Max. non-dim offset 0.2421 between nodes 19, 20
MGI018: Final check ........ all Jacobians are positive.
MGI021: Max. edge length ... 2.00e+002 u between nodes 1, 10
MGI052: Min. edge length ... 2.52e+001 u between nodes 20, 21
3. KUBRIX generates a file called kubrix_out.flac3d. Run FLAC3D and use File|Import grid to read
kubrix_out.flac3d. FLAC3D will display the zone plot. You can also read the kubrix_out.wrl file in
Rhino to examine the mesh.
4. Hit <i> to see an axonometric perspective view (Figure 21).
Figure 21: View of the grid in FLAC3D containing 9 zones and 24 vertices
By default, KUBRIX produces a coarse mesh. In the KUBRIX screen output, the maximum edge length in
the mesh is reported as 200. To create a finer mesh, you need to specify a smaller maximum edge
length.
5. Go back to the Kubrix application and set Max Edge Length to 10 in the corresponding field. In the
same section, choose a Resolution of 3 to make sure that all details are captured with at least 3
elements across. Click Compute to launch the hexahedral mesh generation.
6. In FLAC3D, click on the Command Window to activate it. Select File|New to remove the existing
model, followed by File|Import Grid. Read kubrix_out.flac3d into FLAC3D and display it (Figure 22).
Figure 23: Highlighted curve representing the shaft rim (top) and the capped shaft (bottom)
Rhino Solids are closed Polysurfaces that have clearly defined interiors. The Polysurfaces defining such
solids are called manifold Polysurfaces. In contrast, consider a solid cut in half. Consider the surface
made up of the surface of the solid and the surface of wall separating the two walls. This surface is
closed but doesnt have a clear interior. To be exact, it has two interiors. Such surfaces are called non-
manifold surfaces.
The addition of the cap creates two separate interior regions: inside the well, and outside the well but
inside the box. The set of surfaces representing this object constitute non-manifold Polysurfaces.
Joining surfaces into a non-manifold Polysurface in Rhino cannot be done with the usual Join command.
It has to be done with a new command, NonManifoldMerge.
3. Select all the surfaces and click on the NonManifoldMerge icon. The resulting polysurface is a non
manifold Polysurface. This can be verified by highlighting the model and pressing <F3> to display
the Properties of the selected surface and clicking on Details.
4. Select File|Save As and when the Save dialog box opens, enter t2_1 for the File name and make
sure that the Save as type is set to Rhino 4 3D Models (*.3dm). A file called t2_1.3dm is created in
your current working folder.
Figure 24: Mesh of the capped model showing the highlighted solid model
7. While the solid model is still selected hit the <DELETE> button to just keep the mesh.
8. Check the mesh by left-clicking on the icon marked Check located in the Geometry Fix toolbar.
Rhino responds with the following message box:
Rhino qualifies this mesh as bad because it contains non-manifold triangles (edges shared by 3 or more
triangles), but this was expected because the solid model itself non-manifold.
9. The mesh contains both triangular and quadrilateral polyhedra. Select the model, select the
File|Export selected menu item, and when the Export dialog box opens, enter t2_1 for the File
name and select stereolythography (*.stl) for the Save as type.
10. When the STL Export Options dialog box opens, make sure that Ascii File type and Export open
objects are both checked. Click OK to complete the Save operation. Please note that even though
4. Select the Polysurface and enter WireCut. Click on the horizontal line and hit <ENTER>. Delete the
horizontal line and note that the model is now split into 2 parts. These are 2 closed non-manifold
Polysurfaces.
5. Select both Polysurfaces and click on left-click on the Explode icon. Edit|Select Objects|Duplicate
Objects (Figure 27).
Figure 27: Perspective view of the lower part of the split model
6. Hit <DELETE> to get rid of the duplicate surface. Select everything and click on the
NonManifoldMerge icon to create a new non-manifold Polysurface. Select a ghosted view
rendering(Figure 28).
7. Prior to creating a surface mesh based on the solid model, you should save the Rhino model. Select
File|Save As and when the Save dialog box opens, enter t2_2 for the File name and make sure that
the Save as type is set to Rhino 4 3D Models (*.3dm). Note that a file named t2_2.3dm is created in
your current folder.
8. Select the model and select the menu item Mesh|From NURBS Objects. If the Polygon Mesh
Detailed Option dialog box comes up, click on the Detailed Controls button to bring up the simpler
Polygon Mesh Options dialog box.
9. Move the slider to the middle of the scale and click OK to create the surface mesh. Delete the solid
model which has remained highlighted (Figure 29).
10. Select the model, select the File|Export Selected menu item and when the Export dialog box opens,
enter t2_2 for the File name and select stereolythography (*.stl) for the Save as type.
11. When the STL Export Options dialog box opens, make sure that Ascii File type and Export open
objects are both checked. Click OK to complete the Save operation
The resulting grid is composed of 3 groups. Group2 represents the shaft interior; Group1 and Group3
represent the exterior of the shaft (Figure 30).
Figure 30: FLAC3D model of the capped shaft in a stratified soil with Group3 masked
Figure 31: 3DEC model of the capped shaft in stratified soil. Note that the default relative offset of 100 result in a coarse
depiction of the shaft periphery.
Figure 32: Octree blocking: left, mesh featuring 5 levels of refinement, right, a balanced octree where adjacent zones are at
most one generation apart.
Figure 33: Octree meshing: left: boundaries are detected in dark blue, right; there are no boundary (joint) regions.
1. Run Kubrix by clicking on the Kubrix icon. Select the Octree Meshing tab (Figure 34).
2. You can use this approach for both 3DEC and FLAC3D model generation. Click on Default, select
FLAC3D for the Output type, select 7 for the Octree level, and click on Compute to create the mesh.
3. Run FLAC3D, import t1_2.flac3d and display it (Figure 35).
Figure 35: Octree model where a portion of the zones have been masked for the sake of clarity
END OF TUTORIAL 2
Figure 36: A FLAC3D hex, tetra and octree grid, and a 3DEC block model of the bifurcating tunnels
1
The commands associated with left or right-clicking on each icon can be seen by moving your mouse over the
icon and leaving it there for a second.
You must now split the smaller cylinder with the larger one and delete a portion of the smaller cylinder
to create the bifurcation.
Figure 39: In the Top view, the highlighted section of the smaller cylinder must be deleted to create the branching
5. In the Top view, select the lower-left and the middle sections of the smaller cylinder (Figure 39) and
delete them. This leaves only one section (upper right) of the smaller cylinder.
6. Select the two remaining polysurfaces, and select Solid|Union to complete the creation of one
single closed solid representing the bifurcation. Click on the button marked Shaded Viewport to
display a shaded view of the completed bifurcation (Figure 40).
Figure 40: Bifurcation resulting from the union of the larger and the remaining section of the smaller cylinder
To create a model of the soil surrounding the tunnels, you must create a cube representing the volume
in which the tunnels are excavated, and subtract the tunnels from it.
1. Prior to creating a surface mesh based on the solid model, you should save the Rhino model. Select
File|Save As and when the Save dialog box opens, enter t2_0 for the File name and make sure that
the Save as type is set to Rhino 4 3D Models (*.3dm). As a result, a file called t2_0.3dm is created
in your current folder.
2. Select the model and select the Mesh|From NURBS objects menu item. The Polygon Mesh Option
dialog box opens. If you see a button in the lower-right corner of the window marked Detailed
controls, click it to see the Polygon Mesh Detailed Option dialog box.
3. Set all parameters to 0 (inactive) except for the Maximum distance, edge to surface which should
be set to 0.1 and Aspect ratio which should be 1. All check buttons should be unchecked except for
Refine mesh (Figure 42). Click OK to create the surface mesh.
4. While the original solid model is still selected, hit the <DELETE> button to delete it so the mesh is
the only remaining object in the model (Figure 43).
5. Select the mesh and left-click on the icon marked Check located in the Geometry Fix toolbar. A
message box opens and provides global information about the mesh indicating that, among other
qualities, the mesh contains no naked edges. Naked or Free edges are edges attached to only one
polygon. The presence of naked edges indicates that the mesh is not closed.
This mesh is closed. It contains both triangular and quadrilateral polyhedra. As mentioned earlier, we
need an all-triangular meshes. Exporting it as an STL file will split quads into triangles automatically.
6. Select the mesh, select the File|Export Selected menu item and when the Export dialog box opens,
enter t3_0 for the File name and select stereolythography (*.stl) for the Save as type.
7. When the STL Export Options dialog box opens, make sure that Ascii File type and Export open
objects are both checked. Click OK to complete the Save operation
2. Click on Compute to create the blocking. Kubrix generates two files: kubrix_out.3dec and
kubrix_out.wrl. You can inspect the resulting model by launching a new instance of Rhino and
importing kubrix_out.wrl to visualize it.
3. You can also run 3DEC and use File|Call to read kubrix_out.3dec and display it (Figure 45).
2. Click Compute to launch the computation. The screen output is shown below.
............................................................................
Copyright (C) 1995-2015 Itasca Consulting Group, Inc. All rights reserved.
............................................................................
PLI001: The input surface name is:
t3_0.stl ...
PLI007: REQUEST: STL input surface (-it stl) ...
PLI002: The output mesh file name is:
kubrix_out ...
PLI065: REQUEST: output type is FLAC3D (-ot flac3d) ...
PLI003: The minimum mesh block resolution is 1 ...
PLI056: The blocking efficiency is 0.50 (-e) ...
PLI043: REQUEST: build a fully structured mesh (-str 3) ...
PLI044: Correct all negative Jacobian elements ...
PLI058: REQUEST: capture fillets (-fillet) ...
ISI002: Finished reading 6300 triangles and 3148 nodes.
ISI032: Checking for surface self-intersection ...
ISI014: Sharpest wedge 161 deg @ (4.785e+001,9.987e+000,-3.523e-001)
MGI066: Feature refinement: final triangles count 6412 ...
MGI068: Fuzzy-logic block decomposition ...
MGI037: Done. 33/1 iters beta 0.000100, sp 15, st 2.16e+001 ...
MGI001: Block decomposition completed (37) ...
MGI013: Volume decomposed into 37 blocks and 1 material...
MGI033: First check ........ 4 elems (10%) need Jacob. correction
MGI018: Final check ........ all Jacobians are positive.
MGI012: Output mesh contains 37 hex elements ...
MGI012: Output mesh contains 96 vertices ...
MGI012: Output mesh contains 1 material ...
MGI054: Max. edge offset ... 5.58e+000 u between nodes 78, 79
MGI057: Max. non-dim offset 0.4097 between nodes 37, 40
MGI018: Final check ........ all Jacobians are positive.
MGI021: Max. edge length ... 1.07e+002 u between nodes 39, 48
MGI052: Min. edge length ... 6.86e-001 u between nodes 47, 48
MGI020: Max. aspect ratio .. 1.56e+002 at element 22
............................................................................
MGI031: Writing a VRML file ...
MGI067: Writing a FLAC3D file ...
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
MGI999: Successful termination of KUBRIX in 4.9 seconds!
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Figure 47: View of the grid in FLAC3D containing 33 zones and 84 vertices
By default, KUBRIX builds a coarse mesh. In the KUBRIX screen output, the maximum edge length in the
mesh is reported as 107. To create a finer mesh, you must specify a smaller maximum edge length.
4. Launch KUBRIX and set Max Edge Length, to 10. Set Resolution to 5 (makes sure that all details are
captured with at least 5 elements across). Set Smoothing to 1000 and click Compute (Figure 48) to
launch the hexahedral mesh generation.
Figure 48: Kubrix Structured Hexa parameter for the fine mesh
5. In FLAC3D, use File |Open to read the kubrix_out.flac3d grid file (Figure 49).
7. Click on the button marked Default, then on Compute to create a tetrahedral grid. Read
kubrix_out.flac3d in FLAC3D to see your grid (Figure 51).
8. To build an unstructured hexahedral grid (tetrahedra split into hexahedra) , use the Tetrahedral tab,
click on default but also check Tetra Split. View the resulting unstructured hexahedral grid in
FLAC3D (Figure 52).
1. Start Rhino. Open t2_0.stl. Run the Kubrix program by clicking on the Kubrix icon. Select the Octree
Meshing tab (Figure 34).
2. You can use octree meshing for both 3DEC and FLAC3D model generation. Click on Default, select
3DEC for the output type and click on Compute to create the blocking.
3. Kubrix generates a file called t3.3dec. Run 3DEC 4.0 and use File|Call to read t3.3dec and display it
(Figure 54).
Figure 54: Coarse octree blocking where blocks intersecting the boundary have been masked
4. To obtain a finer FLAC3D grid, run Kubrix , select the Octree Meshing tab, click on Default, select 7
for the Octree level, select FLAC3D as the output type and click on Compute to create a file called
t3.flac3d
5. Run FLAC3D, import t3.flac3d and display it (Figure 55).
Figure 56: Top view of the branching tunnels (left) and main tunnel, alone, after the Explode and ColorizeAllObjects
command (right)
3. Select Curve|Line|Single Line. Enter -30,30 followed by <ENTER> to define the first point of a
vertical line. Enter -30,-30 followed by <ENTER> to complete the line. This line will be used to split
the main tunnel.
4. Select Edit|Split, select the main tunnel for Objects to Split followed by <RETURN>. Select the
vertical line for the Cutting Object, followed by <RETURN> to finish splitting the main tunnel with
the vertical line. Click on the icon marked ColorizeAllObject to see the two parts of the tunnel
(Figure 57, left).
Figure 57: Top view showing line along which the tunnel will be cut (left) and perspective view of the portion of the main
tunnel after hiding the right portion (right)
6. Delete the line that was used to cut the tunnel. Select Curve|Curve From Objects|Duplicate Edge.
Left-click on the newly cut edge of the tunnel to extract the circle representing that edge (Figure 58,
Left). Select the edge and select Surface|Planar Curves to create the circular surface bounded by
the circle (Figure 58, Center). This surface represents an excavation front dividing the tunnel into
two regions. Right-click on the Icon marked Show Objects, then right-click on the icon marked
Shade All Viewports. When Choose Shade Settings appears on the command line click on the word
DisplayMode and select Ghosted to see a transparent view (Figure 58, Right).
Figure 58: Extracting the circular edge of the cut tunnel (Left), creating a planar wall representing an excavation front
(Center) and the complete model with the internal wall (Right)
Before the addition of the internal wall, the model was composed of one closed volume, namely the
volume comprised between the tunnels and the outer box. The addition of an internal wall did not add
to the number of closed volumes. For Kubrix to treat the interior of the tunnels as groups, you must
7. In the Perspective view, right-click on the label of the Perspective view and select Set
View|Perspective to set the current view to the default axonometric view. Select Curve|Curve
from Object|Duplicate Edge and click on the two visible tunnel openings (Figure 59, Left).
8. Hit the Right Arrow () a few times to rotate the model around the z-axis and expose the tunnel
opening located on the other side of the model, and select it (Figure 59, Center). Hit <ENTER> to
indicate that you have finished extracting the three curves.
9. While the 3 curves are still selected select Surface|Planar Curves to create three circular surfaces
spanning each selected curve (Figure 59, Right).
Figure 59: Extracting the curves representing tunnel openings (Left and Center) and creating the additional surfaces that cap
the tunnels (Right).
10. Select Edit|Select Objects|All Objects to select all the surfaces constituting the model. Click on the
icon marked NonManifoldMerge to create a single closed and non-manifold polysurface. Please
note that by selecting all objects you may have selected a number of curves. This doesnt matter
since the NonManifoldMerge command operates only on surfaces and polysurfaces.
11. Select the model and hit the <F3> button to open the Properties box. Click on the button marked
Details to see a description of your model as:
Geometry:
Valid polysurface.
Please note that your model is now a non-manifold polysurface on account of the many edges where
more than two surfaces meet.
Figure 60: Mesh of the model featuring an internal wall in the main tunnel
15. Run Rhino. Read in t2_1.stl. Click on the Kubrix icons and select the Hexahedral Mesh Generation
tab. In the Mesh parameters section of the dialog box, check the square marked Max Edge Length,
and enter 10 in the corresponding field. In the same section, choose a Resolution of 5 to make sure
that all details are captured with at least 5 elements across. Set Structure of the mesh to 3 to
create a fully-structured mesh and Nb. Of Surface Smoothing Iterations to 500. Click Compute to
launch the hexahedral mesh generation. Make sure that the input file is t2_1.stl.
16. Run FLAC3D, click on the Command Window to activate it. Select File|New to remove the existing
model, followed by File|Import Grid. Read t3.flac3d into FLAC3D and display it (Figure 49).
Figure 61: Flac3D grid containing 36504 zones. The model has now 3 groups. Group 3 has been masked to show that the
tunnel is now zoned and features an internal wall
END OF TUTORIAL 3
Startup and reading, joining and centering the model around the origin
1. Startup Rhino, read Tutorial4.dxf, and double-click the label of the Top view to maximize it.
2. Moving the mouse around the screen and looking at the coordinates in lower-left corner of the
screen (Figure 63) you may note that the model is far from the origin. This is problematic since it
limits the number of significant digits available for all sorts of geometrical calculations. It is good
practice to translate the model and center it on the origin of the coordinate system.
3. Curve|Line|Single Line, enter 10400,90800,0 for the for the Start of line, and 0 for the End of line.
Zoom out in the Perspective view to see the line you have just created. Select the line, left-click on
Degenerate faces are faces made up of 0-length edges, resulting in a null-area face.
Naked edges or free edges are edges attached to a single triangle. The presence of naked edges means
that the volume defined by the surface mesh is not not watertight.
Duplicate faces are just that: extra copies of the same face at exactly the same location. Automatic
mesh generation with Kubrix requires the input surface to be free of duplicate faces.
Non-manifold edges are edges attached to more than two triangles: in other words, more than 3
triangles attached to the same edge. Non-manifold edges may exist by design (for example, when a wall
partitions a tunnel in two) but, in the present example, their presence indicates problems with the
geometry.
We will use a feature of Rhino called Extract Connected Mesh Faces. Given a seed triangle, this feature
extracts all faces connected to the seed triangle and their neighbors through smooth wedges (dihedral
angles less than a specified threshold). In this fashion, it is possible to extract isolated triangles and
delete them.
1. Chose the Top View and click on the icon marked Zoom extents to get a complete view of the mesh.
Click on Shaded viewport. Click on the icon marked Extract Mesh Toolbar, then click on the icon
marked Connected faces.
2. Click on any triangle on the surface of the mesh. The triangle will be highlighted and the Extract
Connected Mesh Faces dialog box will open. The field marked Angle between contains the value 0.
This means that currently all triangles connected to the highlighted triangle through dihedral angles
less or equal to 0 are highlighted. Since there are none, only the selected triangle is highlighted.
3. Left-click in the field marked Angle between and use the up arrow next to it or your mouse wheel to
increase its value. You will notice that as you increase the angle, the patch of candidate triangles
expands in size.
4. Enter 170 for the angle and note that almost the totality of the mesh is highlighted (Figure 65).
Figure 65: Using Extract Connected Mesh Faces to "defeature" the mesh
5. Click OK, select the mesh and click on the icon marked Hide object. Left-click on Zoom Extents to
see the two small slivers remaining in the mesh (Figure 66). These triangles were connected to the
rest of the mesh through angles greater than 170 and clearly represent bad triangles.
6. Zoom away then select all the bits and pieces and delete them. Right-click on the icon marked
Show objects to unhide everything.
7. Select the mesh and use the Check icon to diagnose the mesh:
Mesh has 6 naked edges. Although this does not necessarily mean that the mesh is bad,
naked edges can cause problems if the ultimate goal is STL output.
8. Removing the bad triangles has resulted in several naked edges. Note that using Fill holes is the
reverse of triangle removal and will recreate the triangles you have just removed. Instead, Match
mesh edges will treat all holes as gaps and will close them by joining neighboring edges without
adding triangles. This is what we want.
9. Select the mesh and click on Match mesh edges. In the command line, make sure that
DistanceToAdjust is still 0.1, if not click on the word DistanceToAdjust and set it. Hit <RETURN> to
complete the edge matching.
10. Check and notice that there remain no naked edges.
The preceding steps may be repeated with a smaller angle to remove less and less prominent features
from the model
11. Again, click on the icon marked Extract mesh Toolbar, and then click on the icon marked Connected
faces. Click on a triangle on the mesh and, this time; select an angle of 120.
12. Click on OK to select all the highlighted triangles and click on Hide object to hide them. What is left
is shown in Figure 67.
13. Click on any triangle and note that everything is highlighted. This means that they are all part of a
single mesh. Click on the icon marked Split disjoint mesh in the Mesh tools toolbar. This operation
turns disconnected groups of triangles into independent mesh entities so you can select each group
of triangles individually.
Groups of connected triangles that represent actual features should not be deleted. Only unconnected
isolated triangles need to be deleted.
14. While holding the Shift button click on groups of triangles (in the present case, we have only one big
piece) to select and hide them by clicking on the icon marked Hide object. What are left are the
isolated triangles shown in Figure 68. Delete the triangles that are left.
Figure 68: Selecting large recognizable groups of triangles and living isolated triangles
15. Right-click on the button marked Hide object to unhide everything. Since the complete mesh is now
a collection of several parts (recall that we used Split Disjoint Mesh to separate the mesh into many
parts and hid the main part as well as several large groups of triangles) it is necessary to rejoin all
Mesh has 48 naked edges. Although this does not necessarily mean that the mesh is bad,
naked edges can cause problems if the ultimate goal is STL output.
16. Again, as was done earlier, select the mesh and click on Match mesh edges. In the command line,
make sure that DistanceToAdjust is 0.1, if not click on the word DistanceToAdjust and set it to 0.1.
Hit <RETURN> to complete the edge matching.
17. Check and notice that there are some non-manifold and naked edges.
Mesh has 47 naked edges. Although this does not necessarily mean that the mesh is bad,
naked edges can cause problems if the ultimate goal is STL output.
18. One more time, remove connected faces, this time using a threshold angle of 60, hiding large
pieces of connected triangles. Continue selecting and hiding large connected pieces until what is
left is a collection of isolated triangles (Figure 69). What is left represents islands of triangles
connected to their neighbor by dihedral angles larger than 60, This does not mean that all these
triangles represent noise. Simply, by removing them, we create holes which need to be examined
closely to assess whether they were wanted features or triangulation noise.
Figure 69: Triangles left after all groups of triangles connected through 60 or less have been removed
Please note, this time, that using match mesh edges with a tolerance of 0.1 will not close any of the
gaps because the triangles that have been removed are larger than the tolerance. Increasing the
tolerance may cause distortions in the geometry. It is therefore advisable to close holes manually.
23. Click on Current in the command window to look at one particular naked edge. Zooming and
rotating the view around will give you a good view of what this naked edge looks like (Figure 71).
24. Left-click on the icon marked Fill mesh hole to close the hole. Click on Zoom in the Edge analysis
dialog box, and then click on Current in the command line to see the next available naked edge.
Rotate around and zoom to get a better view (Figure 72, top, left).
One could close this hole automatically but by removing and reconstructing the triangles around the
hole, some of the noisy artifacts can be removed, resulting in a simpler mesh that is less likely to cause
trouble during mesh generation with Kubrix.
Figure 72: top, left, the next naked edge. Top, right, the highlighted triangles will be removed to reconstruct the area of the
hole. Bottom, left, the triangles have been removed. Bottom, right, the triangle have been reconstructed.
After closing each hole, click on zoom (in the Edge analysis dialog box) and click on Current on the
command-line. Continue this hole closure process until the last hole is closed.
Using the Kubrix surface diagnostics to identify and repair mesh self-
intersections.
As the Kubrix tetrahedral mesh generator runs, it opens a command window on your screen showing
the various stages of mesh generation. Kubrix conducts several diagnostics on the input surface, one of
which is the detection of triangle-triangle intersections. Every such intersection is listed with the x, y, z
coordinates of the point of intersection. If there are intersections, you can use these coordinates as a
guide to locate them in the Rhino model.
1. Start Rhino and open the tutorial4.stl. Run the Kubrix program by clicking on the Kubrix icon. Select
the Tetrahedral meshing tab and click on the button marked Default then on Compute.
2. In Rhino, click on the label of the Top view and select the Curve|Polyline|Polyline menu item.
Select and copy one of the x,y,z coordinates from the KUBRIX window and paste it on the Rhino
command line, followed by <ENTER>. This specifies one end-point of a line segment. Left-click
anywhere else outside the model to define a second point of the segment. Hit <ENTER> to
complete the creation of the line segment. The line segments points to the trouble spot.
3. Examine the mesh near the end-point of the segment and repair any anomalies you see.
1. To create a box containing the model, select the menu item Mesh|Polygon mesh primitives|Box.
When Rhino asks for the coordinates of the First corner of the mesh, click on the options XFaces,
YFaces and ZFaces and set them all to 1.
2. Enter -480,220,200 followed by <ENTER> for the coordinates of the first point.
3. Enter -280,320,200 followed by <ENTER> for the coordinates of the second point.
4. Enter 50 for the height followed by <ENTER> to complete the box which a quad mesh with 1
element along each edge. Select the mesh and click on the icon marked Triangulate Mesh (Figure
73).
5. Save the entire Rhino model as tutorial4.3dm (for future reference) and export it as an ASCII STL file
called tutorial4.stl.
The resulting kubrix_out.flac3d file represents a zoning of both the inside and outside of the mine. It
contains 2 materials (inside and outside the tunnels) and 49,647 zones. It can be read into FLAC3D using
the File|Grid|Import (Figure 74).
3. To create a 3DEC block model, launch Kubrix, select the Convex Blocking tab and click on Default.
4. Enter 3dec in the Output type field (Figure 76).
............................................................................
END OF TUTORIAL 4
Figure 78: Simplified model obtained by tracing over contour lines shown (top) and final 3DEC model (bottom)
4. While the floor contour (the innermost) is selected, left click over Hide Objects and select Invert
Selection and Hide Objects (Figure 80). This tool hides everything except for what was highlighted.
Figure 80: Left-clicking and holding over Hide Objects and selecting Invert Selection and Hide Objects
5. Make sure that Object Snap is on by clicking over the word osnap at the bottom of the screen, and
make sure that Near, Point, Mid and Cen are checked (Figure 81). This ensures that while tracing
over contour lines, Polylines can snap to existing points.
Figure 81: Turning on osnap as well as End, Near, Point, Mid & Cen
6. Left-click on Zoom Extents to maximize the floor contour on your screen. Select
Curve|Polyline|Polyline and click on a starting point located preferably at the North-East corner of
the contour line in the Top view (Figure 82).
7. Continue clicking on points, approximating the contour as you go, all the way around. For the last
point, click exactly on the first point to ensure that the resulting Polyline is closed (Figure 83).
Please note that, as you approach the starting Point, and if you have Point checked as objects to snap to
in Osnap, the word Point pops up among all the other options such as End, Int, Knot, etc. When the
word Point pops up, it is an indication that you are over the first Point you created, so you can click it to
close the curve.
Figure 83: Close-up showing the closure of the Polyline by clicking on the starting point (left), and overal view of the
completed polyline representing the floor of the pit (right)
8. Delete the original (light blue) contour line, select the Polyline you just created and select
Surface|Planar Curves to create a surface spanning across the Polyline. Delete the Polyline (Figure
84).
9. Right-click on Show Objects to show all objects (all contour lines), and select the next (next level up)
contour line. While holding the <SHIFT> button down, select the surface representing the bottom of
the pit (Figure 85).
Figure 85: Surface (representing the floor) and the next contour line selected.
10. Left click on Hide Object, hold and select Invert Selection and Hide Object to hide everything except
the surface and the next contour line (Figure 86).
Figure 86: After Invert Selection and Hide Object, the surface and the next contour line remain
12. Delete the original contour line, select the Polyline you just created and select Surface|Planar
Curves to create a surface spanning across the Polyline. Delete the Polyline.
13. Right-click on Show Objects to show all objects (all contour lines), and select the next contour line.
While holding the <SHIFT> button down, select the last surfaces you created. Left click on Hide
Object, hold and select Invert Selection and Hide Object to hide everything except the surface and
the next contour line (Figure 88).
Figure 88: The 2 surfaces that have already been created and the next contour
14. After all the contours have been traced and turned into surfaces, right-click on Show All Objects and
click on the button marked ColorizeAllObjects to show all the planar surfaces representing various
benches of the pit (Figure 89). Save the model as Tutorial5.3dm. 3dm is the native Rhino file
format.
Creating benches
1. Select the Top view, select all surfaces and select Curves|Curves from Objects|Duplicate border to
extract the curves representing the boundaries of all the surfaces you have created. These curves
are essentially the polylines you created by tracing over the contours (Figure 90).
Figure 90: Top view of all the surfaces with all the border curves highlighted
2. To trim the highest bench, zoom in on the South-East corner of the Top view. Left-click on Shaded
Viewport, hold and click on Ghosted Viewport (Figure 91). A ghosted view renders the surfaces
semi transparent making the surfaces beneath visible.
3. Click on the edge of the surface immediately below (where the surface changes color) and select
Curve to highlight the border of the lower surface. While the curve is selected, select Edit|Trim. To
trim off the part of the top surface located inside the curve, click to the left of the highlighted curve
just inside the curve (Figure 92).
Figure 92: Selecting the boundary of the surface below the top surface (left and center) and trimming the top (purple)
surface with it, revealing the pink lower surface (right)
4. Trimming the top surface results in the final form of the top bench shown in Figure 93. The top
bench will have to be later on connected to a flat surface representing the ground.
5. Hide the newly-created top bench and the curve used to trim off the top surface, adopt a Top view
and zoom in somewhere on the South-East corner (Figure 94, right).
Figure 94: Perspective (left), top (middle) and detail view of the South-East corner of the next surface (right) from which the
next bench will be trimmed. The top surface is shown in pink.
6. If the curve (representing the outer border of the surface below) is not selected, select it (as
highlighted in Figure 94, right), select Edit|Trim and click somewhere slightly to the left of the
highlighted curve to trim off the part of the top surface that is inside the curve (Figure 95).
Trimming reveals the surface below which is green.
Figure 95: Top view detail (left), full top view, showing lower surface now visible in green (center) and perspective view of
the newly created bench obtained by trimming off the portion of the purple surface located inside the border of the lower
surface (right)
Figure 96: Perspective (left), top (center) and detail view of the South-East corner of the next surface (right) from which the
next bench will be trimmed. The top surface is shown in green
8. If the curve (representing the outer border of the surface below) is not selected, select it (as
highlighted in Figure 96, right), select Edit|Trim and click somewhere slightly to the left of the
highlighted curve to trim off the part of the top surface that is inside the curve (Figure 97).
Trimming reveals the surface below which is brown.
Figure 97: Top view detail (left), full top view, showing lower surface now visible in brown (center) and perspective view of
the newly created bench obtained by trimming off the portion of the green surface located inside the border of the lower
surface (right)
9. Hide the newly-created bench and the curve used to trim off the surface, adopt a Top view and
zoom in somewhere on the South-East corner and trim the top surface with the curve representing
the border of the surface below.
10. Continue this sequence of operations until you reach the floor of the pit, which is just a solid surface
and doesnt need any trimming (Figure 98). Select File|Incremental Save to save the current model
as Tutorial5 001.3dm. Each incremental save increments the last 3 digits concatenated to the root
name, Tutorial5.
Figure 99: Creating a vertical line joining the outer boundary curve of a bench with the inner boundary curve of the bench
immediately above it (left), and extruding all boundary curves along it (right)
4. In extruding all the curves, we may have inadvertently extruded the outer curve of the topmost
bench. The topmost bench is at the same level as the ground surface and doesnt need to be
Figure 100: Overall view of all the benches and bench faces
5. Select Edit|Select Objects|Surfaces to select all surfaces, press the <SHIFT> key, hold it down, and
select Edit|SelectObjects|Polysurfaces to add all the polysurfaces to the selection. Select Edit|Join
to join all the surface and polysurfaces into a single polysurface (Figure 101). Select
File|Incremental Save to save the current model as Tutorial5 002.3dm.
Figure 101: Joining all surface and polysurfaces into a single polysurface
1. Type in the Rhino command line the command MeshPatch, followed by <RETURN>. Rhino
responds by asking for all the curves and points through which you want the surface to pass.
2. Hide the original contours and select all Polylines resulting from retracing all the contours. Do not
select the original contours, followed by <ENTER>.
3. To the request for a closed inner boundary curve respond by <ENTER>.
4. To the request for a closed outer boundary curve, select the topmost (outermost in a top view)
curve. Rhino will compute an approximate surface passing through all the curves (Figure 102).
Please note that the resulting surface does not properly capture the critical features of pits which are
the bench and bench faces.
3. Right-click on Zoom Extents All Viewports to resize all the windows at once. Click on the label of
the Front view to set it as the current view, select Transform|Align, select the box, then the pit and
4. Select the box and select Edit|Explode to break the box up into 6 surfaces. Select the pit and the
top surface of the box, click on Hide Objects, hold and click on Invert Selection and Hide Objects
(Figure 105). Only the pit and the top surface of the box remain visible.
Figure 105: The pit and the surface representing the top of the box
5. Double-click the label of the Top view to maximize it. Click on the button marked ColorizeAllObjects
to colorize the top patch and the pit in two different colors (Figure 106, left). Select the pit and
select Curve|Curve from Objects|Duplicate Border to extract the curve representing the boundary
of the pit. Hide the pit to just leave the top surface and the pit boundary (Figure 106, center).
Select the curve and select Edit|Trim. Click inside the curve to trim off the interior of the curve
(Figure 106, right).
6. Unhide everything by right-clicking on Show Objects, delete everything other than surfaces and
polysurfaces, select all surfaces and polysurfaces and select Edit|Join to join everything into one
single polysurface representing the pit, the ground, the walls and the bottom of the box (Figure
107). Select File|Incremental Save to save the current model as Tutorial5 003.3dm.
2. Open another Rhino session, or in your current Rhino, hide your model and select File|Import to
open the Import dialog box, select VRML (*.vrml, *.wrl) for Files of Type, and select the file
kubrix_out.WRL which is a VRML 2.0 model of the outer surface of the 3DEC model and which was
generated alongside a 3DEC POLY file called kubrix_out.3dec readily callable by 3DEC 4.0 and
displayed in Figure 109.
2. Click Compute the launch the octree mesh generation. The Octree approach detects two separate
groups in the mesh which are illustrated in Figure 112, top.
Figure 112: Octree mesh of the pit, with (top) and without the group representing the interior of the pit (bottom)
Figure 113: The pit model (left) and the meshed model (right)
3. Select the mesh and select File|Export Selected to open the Export dialog box. Select
Stereolythography (*.stl) for the Save as Type and enter Turorial4_1 in the File name field, then
click OK. When the STL Export Options dialog box opens, check Ascii (this is the only type Kubrix
reads) and click on OK to save an STL file.
4. Click on the button marked Kubrix, click on the Octree Meshing tab and click on Default. Click on
Input File and when the Select an STL File dialog box opens, select Tutorial4_1.stl, and then click on
Open.
5. The values you entered the last time you ran an octree mesh should still be current. If not, enter 6
for the Octree Level, uncheck Intersecting Elements, enter 13100 for Box Center x, -24100 for Box
Center y, -120 for Box Center z, 2000 for Box Dimension x and Box Dimension y and 1000 for Box
Dimension z . Click on Compute to create the octree mesh (Figure 114).
END OF TUTORIAL 5
Fundamentals
3DEC POLY files contain a description of blocks and faces. In Rhino solids may be exported as VRML 2.0
files where the individuality of each solid is preserved as a separate VRML Shape constructs. In other
words, a collection of convex solids in Rhino, can be exported as a VRML 2.0 file which can be translated
into a usable 3DEC POLY file.
Figure 115: Left, this solid is not convex. Middle, during the VRML export process, the solid is facetized but the curve is
discretized with multiple segments and the result is not convex. Right, the facetization is as coarse as possible, (large
Minimum edge length) resulting in a convex VRML representation.
Figure 116: The VRML 2.0 to 3DEC POLY file translation icon. Make sure that the VRML 2.0 file is called a.wrl. The translator
will translate it into a.3dec.
The 3DEC icon launches a script, called VTPT, which reads a VRML 2.0 file. Each Shape statement in the
VRML 2.0 file is interpreted as the start of a new 3DEC bloc. For each Shape, neighboring coplanar
triangles are assembled into polygonal faces. Faces and blocks are then written out to a POLY file
called a.3dec.
The criterion for assembling neighboring triangles into a single face is that the angle made by the
normals of two neighboring triangles should be less than 1. If you wish to change this criterion and use
a different triangle merge criterion, launch the VTPT translator on the Rhino command line. For
instance, to use a merge threshold angle of 5, in the Rhino command window type:
Run VTPT 5
If you prefer to launch VTPT outside of Rhino, open a Command prompt and type
VTPT 5
Running 3DEC
Start 3DEC and call both support.3dec and wall.3dec. Double-click the block plot item to show the
model (Figure 119).
Type New in the 3DEC command window and call the following 3DEC data file (Figure 120) to simulate
the dynamics of the wall under the effect of earthquake. An x-y sinusoidal translation movement
imposed on the support wall causes the wall to collapse (Figure 121).
Figure 120: 3DEC data file for simulating the effect of earthquake on a wall
20. In the Top view, select the horizontal line segments (the first one you created). Select the icon
marked Wire cut (Error! Reference source not found.). Rhino asks for a Surface.
21. While still in the Top view, select the cube. Enter <RETURN> twice to complete the cutting
operation. Left-click on the icon marked Shaded viewport, then click on the icon marked
ColorizeAllObjects (Figure 123).
22. In the Top view, select another line segment (inclined at 22), select Wire cut, and select the top
half of the box then hit <RETURN> twice.
23. While the same line segment is selected, select Wire cut, again, this time select the lower half of the
box then hit <RETURN> twice to cut the lower half in two, as well (Figure 124).
24. Use WireCut repeatedly with the remaining lines and solids, solid and continue splitting until you
obtain 16 pieces (Figure 125).
Figure 125: The cored block has been cut into 16 equal sections using Wire cut
25. Select the 16 solids and use File|Export selected to export the solids as a VRML 2.0 file. In the VRML
Export options window, select version 2.0, and when the Polygon mesh detailed options dialog box
opens, uncheck everything except Simple planes, set all values to 0 except for the Minimum edge
length which should be set to a large number, such as 1000, and click on OK. This will create a file
called a.wrl in your working folder.
26. Click on the icon marked "Create a 3DEC POLY file from solids saved as a VRML2 file named a.wrl",
located in the KUBRIX toolbar (Figure 116) to create a POLY file called a.3dec. Start 3DEC, call the
file a.3dec and double-click the block menu item to see your model (Figure 126).
END OF TUTORIAL 6
Objective
In this tutorial you will learn in detail how to build a quality block-structured hexahedral mesh from a
CAD model described by a DXF file, the reference model. To create a mesh using BR, you must create an
assembly of 6, 5 or 4-sided Rhino solids that conforms to the reference model. The creation of such an
assembly is the objective of this tutorial. The reference model is shown in Figure 127 left. The final
hexahedral mesh is depicted to the right.
Initial steps
1. Start Rhino and select Large Objects, Meters as your template. If Rhino does not ask you for a
template, File|New and select Large Objects, Meters.
2. If you have not already done so during an earlier work session, drag the content of Rhino Toolbars
and Plugins onto your Rhino5 window to install the plug-ins, menu items and icons contained in that
folder in Rhino5. The installation is permanent and you will not need to do this for later sessions.
3. in Rhino, type SetWorkingDirectory and navigate to the your current working directory. In this
fashion Rhino knows where to read, import from and save files.
The curves in the reference model are all Polylines. Some are made of single line segments and the rest
are composed of multiple line segments and may not be used directly to build surfaces. You will need
to retrace them with arcs (Curve|Arc) or higher order curves (Curve|Free-Form|Interpolate Points, for
instance) which are simple curves.
1. Click on Osnap (Object Snap) at the bottom of the screen (Figure 134) to highlight it. Make sure that
End, Near, Point, Mid, Cen, Int, Perp, Tan, Quad, Knot and Vertex are checked, as shown below.
Grid Snap may be turned off.
The first solid you are going to build is shown in gray in Figure 135. The details follow.
2. Select Curve|Arc|Start, Point, End and Zoom in around the curved area and click on the left end of
the left upper eight-circle (Figure 136, left) to set the Start of arc. Note that a bubble saying End,
Int, Knot appears momentarily near the corner vertex, before you click on it.
3. Following along the same curve, click on a second vertex somewhere near the middle of the curve
(Figure 136, center). This sets the 2d point of the arc. For the End point of the arc, click on the
vertex at the upper T junction to finish the arc highlighted in Figure 136, right.
For complex curves, InterpCrv (Curve|Free-form|Interpolate Points) may be used. Essentially, any
curve tool in Rhino is acceptable as long as it produces a single curve, i.e. when exploded, it results in
one curve.
4. Similarly, use Curve|Arc|Start, Point, End to retrace the lower eighth-circle that parallels the curve
you just built (Figure 137).
Figure 138: Building the first surface for the first solid
In order to build the opposite surface you first need to build a couple of construction lines...
6. Select Curve|Line|Single Line. Click on the lower-left corner of the surface you just built to set the
first point of the first construction line (Figure 139, left). Move your cursor over the vertical line
opposite the first point (Figure 139, left). As you move your cursor up and down the vertical line,
stop when a bubble with the word Perp pops up. This is the location on the vertical line where the
line you are building will be perpendicular to it. Click when Perp pops up to set the second point of
the line (Figure 139, right).
7. Select Curve|Line|Single Line and click on the end of the last line, then move your cursor over the
opposite vertical line and click when the bubble Perp appears Figure 140.
You now have what you need to build the opposite surface.
8. To build the rectangular surface opposite the curved face you built earlier, select the two horizontal
lines highlighted in Figure 141 and use Surface|Loft.
Note that the flat rectangular surface could have been created using EdgSrf, PlanarSrf or by Extruding
one of the horizontal lines.
The following sequence of operations builds the solid between the two surfaces and will be used
repeatedly throughout this tutorial.
9. Select both surfaces, then Curve|Curve from Objects|Duplicate Border (Figure 142, left). While the
two borders are highlighted, select the Surface|Loft menu item.
10. Note that Rhino responds with: Drag seam point, and the Loft preview may indicate that Rhino will
connect the red vertex to the green one (Figure 142, left). If this were the case, the lofted surface
Figure 142: Lofting a surface between the borders of two existing surfaces
11. Hit <RETURN> and the Loft Options dialog box opens. Make sure that Straight sections and Do not
simplify are selected (Figure 143, left), and click on OK to complete the loft operation (Figure 143,
right).
12. While the two borders are still highlighted, Delete them. You now have the two initial surfaces and
a polysurface representing the lateral walls of the solid you want to build. Select the two surfaces
and the polysurface and Edit|Join to complete the creation of your first solid (Figure 144).
The last few steps represent essentially the sequence of operations that you will use to build the
remaining 7 six-sided solids
Figure 145: Building a curved surface (left) and additional construction lines
3. Make sure nothing is selected, and select Surface|Loft. Click on the far-right vertical edge of the
Solid and when the Selection Menu appears (Figure 146, left), click on any of the Polysurface edge
items to select the first curve of the Loft operation (right): you have selected one curve of the Loft.
4. Click on the vertical line opposite the highlighted edge to specify the second curve of the Loft. Hit
<ENTER> to bring up the Loft settings dialog box. Click OK to complete the Loft (Figure 147).
5.
Building the solid between the two surfaces follows the procedure used earlier.
6. Select the opposing faces, followed by Curve|Curve from Objects|Duplicate Border, and while the
two borders are highlighted, Surface|Loft.
7. Again, the guide line in the Loft preview indicates that Rhino will connect the wrong corners (Figure
148, left). Click on any of the two white points at the ends of the guide line connecting the two
surfaces, then click on the appropriate corner so that the guide line connects the right corners
(right).
8. Click OK to complete the loft. Delete the borders (which have remained highlighted). Select the
two end faces and the newly created lofted polysurface, and Edit|Join to complete your second
solid (Figure 149, left). Complete the third solid in the same fashion (Figure 149, right).
9. Look below the model and right-click on the Extract Surface icon. On the resulting command line,
click on Copy=No to change it to Copy=Yes. Click on each of the lower surfaces of the 3 solids, then
hit <Enter> to complete the surface extraction process (Figure 150).
10. While the surfaces are highlighted, Solid|Extrude Surface. Drag the cursor down to any of the 4
lower corners of the model (Figure 151, left) and click. Note that after the extrusion is complete the
surfaces remain highlighted (right). Hit <Delete> to delete them.
12. Use Loft to build the vertical surface between the two highlighted horizontal construction lines
shown in Figure 153, left. Use Loft to build an additional vertical surface shown in Figure 153, right.
13. Left-click on the Extract Surface icon and click on the 2 cylindrical surfaces, then hit <Return>.
While the two surfaces are selected, hold the <Shift> button down and select the two small
rectangular surfaces you just built. With these 4 surfaces selected, Edit|Join them into a
Polysurface (Figure 154, left). With the Polysurface selected, select Solid|Cap planar holes to turn
it into a solid (right).
Figure 154: Building a quarter-cylinder solid. Left, the lateral surfaces. Right, the completed solid.
14. Left-click on Extract Surface and click on the larger of the two rectangular surfaces bordering the
remaining empty space (Figure 155, left). Select Solid|Extrude Surface|Along Curve and click on
2. Select all 8 solids (by clicking on them or using Edit|Select Objects|Polysurfaces) , and select
Edit|Object Properties (F3). The Property dialog box indicates that the selected polysurfaces
constitute 8 closed polysurfaces (Figure 157). Again, if any of the polysurfaces is not closed (i.e.
not a Solid), join them into solids.
Now, you can assign solids to various layers so that when the mesh is generated elements belong to
groups with the same names as the layers.
3. Hide all solids and delete everything else (curves, points, etc..). Unhide everything (right-click on
the light bulb icon) to recover all solids. The model now contains only solids.
4. Select the 3 upper solids, then select the Edit|Layers|Change Object Layer menu item. When the
Layer for objects dialog box opens, click on New, enter Upper solids in the New Layer dialog box,
click OK, followed by OK, again in the Layer for objects dialog box to complete the moving of the
selected solids to the Upper solids layer. Similarly, move the remaining lower solids to a new layer
called Lower solids.
5. If the Layer pane is not open, click on the Edit layers icon to open it. Click on the black square next
to the Upper solids layer and when the color chooser pops up, select Gold. Similarly, set the color
of the Lower solids layer to Lavender (Figure 158).
Figure 158: The model after the Upper solids and Lower solids layer have been specified
1. Select All solids, and click on the Hex meshes from solids icon: located in the KUBRIX toolbar
in Rhino5, or just type BR in the command line.
2. Rhino responds with the current BR Parameters. Hit <RETURN> to accept these parameters and to
run BR.
3. If your OutputFormat parameter was set to FLAC3D, Rhino should responds with "8 solids
processed, 0 errors. Flac3d grid file was output to block_ranger.flac3d." If your working directory is
properly set, the resulting mesh file with the appropriate extension should appear in your working
directory. If you have not set it, enter SetWorkingDirectory in the Rhino command line, navigate to
your target and set it.
If a solid does not comply with the 6, 5 or 4-sided work rule or if any of the solid faces is not a 3 or 4-
sided face, the corresponding solids will remain highlighted in your Rhino model.
4. If your OutputFormat parameter was FLAC3D, start FLAC3D and select the File|Import|Grid menu
item in FLAC3D. Select block_ranger.flac3d to view your model in FLAC3D. For other output
formats, run your application and import the grid. Note that Rhino layers become groups (slot 1) in
FLAC3D (Figure 159).
Figure 159: In Rhino, solids organized in layers are processed into FLAC3D groups
6. Selecting all solids, rerunning BR and setting MaxEdgeLength to 0.05 results in the grid below.
7. Rerunning with MinEdgeResolution set to 5 results in the grid shown in Figure 161.
Figure 161: BlockRanger run with a minimum resolution of 5 instead of the default value of 3
Figure 162: Default BlockRanger grid wrl file overlaid on the solids
2. Click on located in the KUBRIX toolbar. This is the DupEdge (Duplicate Edge) icon, a copy of
which has been added to the KUBRIX toolbar for convenience.
3. Click on any slope edge (Figure 163), then hit <ENTER>.
4. While the extracted edge is selected, hit F3 to open its Properties dialog box. Note that the Name
field is empty. Enter 5 in that field, then hit <RETURN> to register it (Figure 164).
5. Delete the wrl mesh you read earlier by selecting Edit|Select Objects|Polygon Meshes and hitting
<DELETE>.
Note the extracted edge in Figure 165. If you select this edge, you will note that in its Property dialog
box (hit F3 if the Property box is not open) the "value" of Name property is 5.
Select all solids, including any edge that you may have extracted and assigned a resolution to, and run
BlockRanger, using default values for everything. Import the resulting grid in FLA3D or simply import
the resulting wrl file into Rhino, and colorize the mesh blocks to see the effect of the assigned new mesh
resolution (Figure 166) .
17. In the Layers window, right-click on the Pit layer and Select Objects from the dropdown menu.
Note that Rhino responds with "6 meshes added to selection". Select the Edit|Join menu item to
join the 6 parts of the pit into a single mesh.
18. Hide the layers representing the faults and close the Layers window by right-clicking the Close
Layers icon in order to maximize the extent of the Perspective window. Left-click the icon marked
Shaded Viewport (Figure 168).
The pit geometry does not cover the entire computational domain. Therefore it is necessary to create a
surface that starts at the edge of the pit and fans away from it. To do so, you will use the curve
representing the outer rim of the pit mesh and expand it away from the pit.
19. Select the Curve|Cruve from Objects|Duplicate Border. Select the mesh representing the pit, then
hit <RETURN> to extract the closed curve representing the boundary of the pit (Figure 169).
Note that in addition to the boundary curve an isolated line segment located in the lower right corner of
Figure 169 is also visible. This shows the existence of an internal free edge in the pit model.
20. Delete the stray curve representing the internal boundary. Select the boundary curve, left-click the
icon marked Hide Objects and hold the left mouse button down. In the Visibility toolbox, left-click
on the icon marked Invert Selections and Hide Objects so as to leave the outer boundary as the only
visible item in the view (Figure 170).
To find a center point from which to expand the curve representing the outer boundary of the pit you
have to first build this curve's bounding box.
21. Select the outer boundary curve, select the Analyze|Bounding Box menu item and hit <ENTER> to
create the bounding box containing the curve.
22. Select the bounding box and select the Analyze|Mass Properties|Volume Centroid menu item.
Delete the bounding box while it is still highlighted.
23. Select the boundary curve and select the Transform|Scale|Scale 2D menu item. Rhino responds
with Origin point (Copy). click on the word Copy (to specify that a copy of your curve is to be scaled
up leaving the original curve unchanged) then click on the point representing the centroid of the
bounding box. For the Scale Factor, enter 5, and hit <RETURN> twice (Figure 172).
24. Delete the the centroid. Select the inner curve and the outer curve by holding the <SHIFT> key
down, and select the Surface|Loft menu item. Hit <RETURN> to open the Loft Options dialog box.
25. Select Straight sections from the dropdown menu in the Style section, and check the Do not
simplify radio button in the Cross-section curve options section, then click OK to create the surface
linking the boundary of the pit with its expanded copy (Figure 173).
28. Hit <DELETE> to delete the surface. Right-click the icon marked show objects to bring the pit pack
into view. Select both the pit and its extension and select Edit|Join to join them into a single mesh.
29. Select the resulting mesh and left-click on the icon marked Show Edges to open the Edge Analysis
dialog box. Make sure that the Naked edges radio button is checked so that only naked edges are
highlighted. Click on the Zoom button to highlight the naked edges of the mesh (Figure 175).
Figure 175: Edge Analysis highlighting naked edges at the junction of the pit and its extension
Note the naked edges at the junction of the pit and its extension. Such gaps were expected since the
extension was meshed separately. You will need to repair these edges.
30. If the Command window is expecting input hit <ESC> to terminate the current command. The Edge
Analysis dialog box remains active; leave it on.
34. Double-click the label of the Perspective view to return to four views. Double click the label of the
Top view to - the Top view. Left-click on the Shaded Viewport Icon.
35. In the Top view, select the Curve|Rectangle|Corner to Corner menu item. Enter -3000,3000
followed by <ENTER> to specify the first corner of a rectangle. Enter 3000,-3000 to specify the
second corner. This rectangle will delineate the computational box
36. Select the rectangle and select the Mesh|Mesh Edit Tools|Mesh Trim menu item. Next, click
outside the rectangle to trim everything outside the rectangle. Note that he trimming tool
continues to remain active so hit <ESC> to end the MeshTrim command (Figure 177).
Figure 177: Before (Left) and after (Right) trimming the mesh
37. Select the File|Save As menu item and Save the present model as t8.3dm making sure that you use
Rhino 4 3D Models (*.3dm) for the Save as type.
38. Double-click the label of the Top view to return to four views. Double-click the label of the
Perspective view to maximize that view on your screen, and left-click the icon marked Zoom
extents. Please note the rectangle at z=0 which was used to trim the surface (Figure 178).
39. Delete the trimming rectangle and select the Curve|Curve from Objects|Duplicate Border menu
item. Select the mesh representing the pit and hit <ENTER> to extract the boundary of the mesh
(Figure 179).
40. Right-click on the label of the Perspective viewport and select Set View|Perspecctive from the
dropdown menu to revert to the standard Perspective view. Double-click the label of the current
view to return to four views. Right-click on the Zoom Extents All Viewports icon, and hit the <F8>
key to activate the Ortho state.
The Ortho state constrains the movement of the mouse to the x, y and z directions. When Ortho is on,
the word Ortho appears in bold letters at the bottom of graphic window near the words Snap, Planar
and Osnap.
41. Select the Curve|Line|Single Line menu item. Make sure that Ortho is on. In the Perspective
viewport, left-click the rightmost point of the boundary of the pit (highlighted in Figure 179). This
specifies the starting point of the line (Figure 180).
42. Move your cursor over to the Right view. Note that the end point of the line you are building
follows the cursor. Move the cursor all the way down in the Right view. Note that a vertical line
follows your mouse. Click somewhere far below the pit to specify the end point of your vertical
line.
43. Select the curve representing the boundary of the pit, select the Surface|Extrude Curve|Along
Curve menu item and click on the vertical line near the starting point (Figure 181).
Please note that where you click on the vertical line matters because it specified the direction in which
you wish to extrude the selected curve.
Figure 181: Extruding the boundary curve along the vertical line segment
44. Delete both curves: the one representing the outer boundary of the pit and the vertical line along
which you extruded the boundary curve. Select the surface resulting from the extrusion and select
the Mesh|From NURBS Object menu item. If the Polygon Mesh Detailed Option dialog box opens,
click on the Simple Controls button. In the Polygon Mesh Options dialog box, slide the cursor all
Figure 182: The model after the extruded surface has been meshed
45. Switch to a full Right view by first double-clicking the view label to go to four views and double-
clicking again on the Right view label. If you are not using a shaded view left-click on the icon
marked Shaded viewport. Left-click again on the icon marked Shaded Viewport but hold the left
button down until the Shade toolbox opens. Left-click on the icon marked Ghosted viewport to
obtain a transparent shaded Right view.
46. While in the Right view, Select the Curve|Line|Single Line menu item. Enter -4000,-2100 for the
Start of Line coordinates. Note that since you are in the Right view, this means that the Start of Line
will be placed at y=-4000 and z=-2100. Enter 4000,-2100 for the End of Line coordinates and right-
click on Zoom Extents All Viewports (Figure 183).
Figure 183: Right ghost view of the model with a horizontal trimming line placed at z=2000
47. Select the horizontal line and select the Mesh|Mesh Edit Tools|Mesh Trim menu item. In the Right
view, click on the mesh representing the vertical walls somewhere below the horizontal line to trim
it. Hit <DELETE> to end the trimming operation, and Delete the trimming line.
48. Switch to a Perspective view and rotate the model slightly so you can look at it from below. Select
the mesh representing the vertical walls and left-click the icon marked Show edges. When the Edge
Analysis dialog box opens, make sure that the Naked Edges radio button is checked and click on the
Zoom button to highlight all the naked edges of this mesh (Figure 184).
Note that there are naked edges both at the top and bottom of the vertical walls. The top naked edges
will be addressed later but, for now, you must close the bottom of the model.
49. To close the bottom of the model, left-click on the icon marked Fill mesh hole and click on any of
the lower naked edges of the mesh representing the vertical walls. Click again on the Zoom button
in the Edge Analysis dialog box ( Figure 185).
Note that the mesh representing the vertical walls and the bottom form a single mesh, distinct from
the mesh representing the pit and its extension. This is the reason why there remains naked edges on
top of the vertical walls at the junction with the pit.
50. Close the Edge Analysis dialog box. Rotate the model so you can see it from above, and select the
meshes representing the vertical walls (which includes the bottom of the model) and the pit (which
includes the extended topography), and select the Edit|Join menu item. Select the joined mesh and
left-click on the icon marked Show edges (Figure 186). Note the free edges at the connection of the
vertical walls and the topography that remain to be closed.
51. Select the mesh and left-click the icon marked Match mesh edges. You will see the default values of
the various parameters used by this command in the Rhino Command window. DistanceToAdjust is
not set to 10, change it by clicking on it, then hit <RETURN> to complete the command.
Note that clicking on the Zoom button again in the Edge analysis dialog box results in the message
"Select objects with naked edges" message which means that the object on which you are checking for
naked edges has no naked edges.
52. Close the Edge Analysis dialog box. Select the mesh representing the pit, its extension, its vertical
wall and bottom. Left-click on the icon marked Edit layers and hold the left mouse button down to
open the Layer toolbox. Left click the icon marked Change Object Layer to open the Layer for
objects dialog box. Double-click the item marked Pit to change the layer of the selected mesh to the
layer called Pit.
53. In the Layers window, select layers Fault1 and Fault2, and click on one of the selected light bulbs to
turn off these two layers. Right-click on the icon marked Close layers to close the Layers window.
Under certain circumstances, a number of triangles in your mesh may appear transparent (Figure 187,
Left). This is most likely due to an incorrect orientation of triangle normals. Rhino's default appearance
setting displays triangles differently depending on whether triangle normals are directed towards to
observer or not. This is referred to as backface culling . Once a mesh has been closed (i.e. has no more
naked edges) you may want to left-click on the icon marked Unify Mesh Normals to reorient normals
(Figure 187, Right).
54. Select the File|Incremental Save menu item. This command saves a model named t8 001.3dm in
your working folder.
Computing intersections
55. Left-click on the icon marked Edit Layers to open the Layers window. Turn all the light bulbs on in
that window to make all 3 layers visible. If you don't see the fault meshes, right-click on the icon
marked Show Objects to unhide any object that may have been inadvertently hidden.
56. Select everything by selecting the Edit|Select Objects|All Objects -3000menu item. Rhino should
respond with the message: " 3 meshes added to selection". Each of the 3 meshes belongs to a
separate layer. If there are any other objects, delete them.
57. While all 3 meshes are selected, left-click the icon marked Mesh Intersect to create all the curves
resulting from the intersections of the 3 meshes. Rhino reports that 4 intersection curves have
been created (Figure 188).
Figure 188: Curves (highlighted) representing the intersection of the 3 meshes of the model
Calculating intersection 1
We will call intersection 1 a group of two curves that seem to represent two pieces of one intersection
(highlighted in Figure 189)
60. While the curve is selected, turn each layer on and off (using the light bulbs) to see which two
meshes are at the origin of the selected intersection curve. Note that, in this case, it is the
intersection of Fault1 with Fault2 that resulted in this curve (Figure 190).
Figure 190: Intersection curve and the two meshes that cause it.
61. Select Fault1 and hide it using the Hide Objects icon. Select the Curve|Curve From
Objects|Duplicate Border menu item and click on Fault2, then hit <RETURN>. Use the Hide Objects
icon to hide Fault2 and select the border (Figure 191).
Note that the intersection curve partially overlaps with the border of Fault2, and here resides the
problem. Fault2 stops very close to Fault1 so the computed intersection curve (in black in Figure 191 )
is incomplete. You will extend Fault2 so it will make a clean cut with Fault1.
62. Delete the intersection curve (in black in Figure 191). Select the border, and select Edit|Explode.
Rhino explodes the border into 17 separate segments.
63. While the segments are highlighted, hold the <CTRL> key down and click on the two segments that
are not going to be extended but which are adjacent to the segments that make up the curve you
want to extend. Clicking on objects with the <CTRL> key down de-selects them (Figure 192).
Figure 192: The exploded border segments after two segments have been de-selected
64. Select the Edit|Join to join all the highlighted segments. Since the highlighted segments are
separated by two unselected ones, Join will result in 2 curves: one curve made up of the 3 edges
you want to extend, and another curve that is no longer needed. Delete all the curves, except the
one that you want to extend. (Figure 193).
Figure 193: Curve which will be extended and which was obtained by pruning the border curve
70. Unhide everything by right-clicking on the icon marked Show Objects (Figure 194).
71. Select the curve to be extended and Fault2, left-click and hold the Hide Objects icon down, then
left-click on Invert Selection and Hide Object to just show the extension curve and Fault2 (Figure
195).
Figure 195: Fault2 and the curve representing its naked edges that must be extended
72. Select Curve|Line|Single Line. Consider one of the naked edges of Fault2 adjacent to the extension
curve. Click on one point not adjacent to the extrusion curve to set the first point of the line
segment (Figure 196)...
Figure 196: Setting the first point of the extrusion guide segment
73. For the second point, click on the other end of the edge; which is the end adjacent to the extrusion
curve (Figure 197).
74.
75. Note that if the movement of the mouse seems constrained it may be because the Ortho state may
be on. If so hit <F8> to deactivate the Ortho state.
Figure 197: Specifying the line segment (highlighted in yellow) along which the extension curve will be extruded
76. Select the extension curve, select the Surface|Extrude Curve|Along Curve, and click near the start
point of the line segment representing the extrusion to complete the operation (Figure 198).
77. Delete both the extrusion segment and the extrusion curve. Select the extrusion Surface and select
the Mesh|From NURBS Objects. In the Polygon Mesh Options dialog box, slide the cursor all the
way to the left and click OK to create a mesh. Delete the surface (Figure 199).
78. Select the extension, left-click the icon marked Edit Layers, hold the button down and in the Layer
toolbox left-click on Change object Layer to open the Layer for object dialog box. Double-click
Fault2 to make this mesh part of the Fault2 layer. Select Fault2 and its extension and Edit|Join
them into one mesh (Figure 200).
Please note that the extension perfectly matches Fault2 and no naked edges are created at the junction.
If the meshes did not perfectly match, you can use the Match Mesh Edges icon to get rid of unwanted
naked edges
80. Select Fault1 and Fault2 and left-click on the icon marked Mesh Intersect to compute the
intersection curve (Figure 202) (Note that this is a new curve that should go all the way through)
81. Select Fault1 and, in the Rhino Command Window, type SplitMeshWithCurve, then click on the
curve. In the Layers window, right-click on the Fault1 layer and select the Select Objects item from
the dropdown menu to select the two pieces of Fault1 resulting from the split. Join them into one
mesh using Edit|Join.
82. Select Fault2 and split it with the curve, then Delete the unwanted part (appearing behind fault1 in
Figure 203). Remember that Fault2 is meant to stop right at Fault1 and any excesses should be
discarded.
Comparing Figure 202 and Figure 203, you may note that new triangles have been added to both Fault1
and Fault2. This is what computing the intersection of the two faults is about: locally modifying Fault1
and Fault2 so that both meshes share common intersection edges.
Note that SplitMeshWithCurve may produce incorrect results such as stray triangles or altogether no
intersection at all. These are most likely caused by errors in the surfaces or round-off errors which are
accentuated when the model center far from the origin, among other factors. Please refer to the
Troubleshooting section of this manual for further details.
SplitMeshWithCurve splits a mesh into two meshes that belong to the same layer the original mesh
belonged to. When the splitting curve crosses a mesh all the way through, the two resulting meshes are
trivially split but when the curve cuts only partially through two non-trivial parts are obtained.
Following every splitting operation, make sure that, for each layer, you join the resulting meshes into a
single mesh. This will prevent the proliferation of meshes in your model.
Calculating intersection 2
84. In the Layers window, turn off all the layer light bulbs and right-click on the icon marked Show
Objects to make all the remaining intersection curves visible. Right-click the icon marked Zoom
Extents All Viewports to bring back into view curves that were outside the viewport (Figure 204).
Calculating intersection 2
85. Select the smaller intersection curve in Figure 204, and use Invert Selection and Hide Objects to
isolate it (Figure 205).
86. One-by-one, turn on or off various layers in the Layers window to find which Layers contributed to
this intersection curve: there should be two meshes. Here, the intersection is the result of the Pit
and Fault2 (Figure 206).
87. Delete the existing intersection curve, select both meshes and left-click on the icon marked Mesh
Intersect to compute a new intersection curve (Figure 207).
88. Select the Pit and enter SplitMeshWithCurve in the Command window to intersect the pit with the
curve. In the Layers window, right-click on Pit and select Select Objects from the dropdown menu.
Note that Rhino responds with "2 meshes added to selection", which confirms that Pit was split into
2 meshes as a result of the split operation. Join the two meshes of the Pit.
89. Similarly, select Fault2 and SplitMeshWithCurve it with the curve. Delete the intersection curve.
Fault2 is split cleanly into 2 parts. Delete the part that falls outside the computation domain and
delete the intersection curve (Figure 208). Note the trace of Fault2 on the pit.
Please note that due to round-off errors and tolerance mismatches SplitMeshWithCurve may produce a
mesh that is split in two parts but incorrectly, in such a way that when attempting to select the part of
Fault2 that falls inside the pit, the entire Fault2 may be selected. Please refer to the troubleshooting
chapter in this manual for further detail on how to circumvent problems with SplitMeshWithCurve.
Calculating intersection 3
90. In the Layers window, turn off all the layer light bulbs and right-click on the icon marked Show
Objects to make all the remaining intersection curves visible (Figure 209). Select the curve on the
right as intersection 1.
91. Select intersection1 and use the Hide objects|Invert Selection and Hide Objects icon to isolate it.
Calculating intersection 4
92. One-by-one, turn on or off various layers in the Layers window to find which Layers contributed to
this intersection curve. Again, please note that there should only be two meshes, no more, no less,
to produce an intersection. Here, the intersection is the result of the Pit and Fault1 (Figure
210Figure 206).
93. Delete the intersection curve and recompute it by selecting Pit and Fault1 and using the Mesh
Intersect icon. SplitMeshWithCurve the Pit and repeat this operation with Fault1. Join the two
parts of the Pit and delete the portion of Fault1 that falls outside the computational domain.
Delete the intersection curve (Figure 211).
Figure 211: Split Pit and Fault1 (the remaining portion of Fault1 is highlighted for clarity)
Calculating intersection 5
94. In the Layers window, turn off all the layer light bulbs and right-click on the icon marked Show
Objects to make all the remaining intersection curves visible (Figure 209). Select the remaining
intersection curve (Figure 212).
96. Delete the intersection curve and recompute it by selecting Pit and Fault1 and using the Mesh
Intersect icon. Note that the Pit and Fault1 intersect along two curves, one of which (intersection 3)
was already dealt with (we are interested in the bottom-left intersection curve in Figure 214).
Figure 214: Calculated new intersections. The one at the bottom-left is what we call intersection 4
97. SplitMeshWithCurve the Pit and Join the two parts of the Pit. SplitMeshWithCurve Fault1 and
delete the portion of Fault1 that falls outside the computational domain (this mesh is extremely
thin and hard to distinguish from the intersection curve itself). Delete the intersection curve (Figure
215).
Feedbacks direct you to modify the input surface. In general a change in the input surface necessitates
redoing Rhino quality checks followed by Kubrix checks, in that order.
Kubrix points you to the x,y,z coordinates of "problem" locations in the model. In general, these
locations are near triangles. Individual coordinates of "problem" areas outputted by Kubrix may be
copied from the Kubrix console window or from kubrix.log, and pasted into a Rhino Curve|Line|Single
Line command to specify the starting point of a guide line pointing to the "problem" location. The end
point of the line could be an arbitrary point clicked somewhere in the background away from the model.
When Kubrix outputs multiple x,y,z coordinates, you can copy several lines of coordinates at once from
kurix.log and paste it in a Rhino Curve|Polyline|Polyline command to create a Polyline connecting all
the "problem" areas. In this fashion, you can easily direct your attention to those locations. Again, for
the last point of the Polyline, you can click somewhere in the background, away from the model.
Skipping face direction check because of positive non manifold edge count.
Mesh has 2 naked edges. Although this does not necessarily mean that the mesh is bad,
naked edges can cause problems if the ultimate goal is STL output.
107. Left-click the icon marked Cull degenerate mesh faces to delete degenerate (null area) faces. A
new click on Check will reveal a substantially greater number of naked edges due to the fact that a
number of triangles have been removed. You will deal with naked edges later on.
108. Make sure the mesh is not selected and enter the command ExtractNonManifoldMeshEdges in
the Command window. Click on the parameter ExtractHangingFaceOnly to turn it from No to Yes,
then select the mesh. Rhino responds with the message "Extracted 1 face".
The command ExtractNonManifoldMeshEdges, by default, extracts every triangle attached to any non-
manifold edge. By setting ExtractHangingFaceOnly to Yes, you extract only those that have free edges.
Setting ExtractHangingFaceOnly to Yes makes the extraction more discriminating, thus avoiding the
removal of perfectly good triangles.
109. Select the mesh and left-click on the icon marked Show Edges to open the Edge Analysis dialog
box (Figure 216).
110. Select the mesh and left-click on the icon marked Match mesh edges. Click on the
DistanceToAdjust parameter and set it to 10, and hit <RETURN>. Clicking again on the Zoom button
of the Edge Analysis dialog box indicates that there are no more naked edges in the mesh of the pit.
A Check confirms that the pit mesh is good.
111. Turn Fault1 and Fault2 on in the Layer window and check their quality using Check. Look for
duplicate or degenerate faces. Both Fault1 and Fault2 should have naked edges because they are
not supposed to be closed.
112. Select the File|Incremental Save menu item. This command saves a model named t8 002.3dm
in your working folder.
the -fault keyword indicates to Kubrix the file t8_faults.stl should be read as an internal surface of
discontinuity into Kubrix. Kubrix will not check for free edges in the file t8_faults.stl. It will generate a
mesh that fits both STL files, t8_outer and t8_faults, and will mark all FLAC3D zone faces or all 3DEC
block faces adjacent to t8_faults as INTERFACES for FLAC3D and joints in the case of 3DEC.
Kubrix stops after indicating that the input surface intersects. Open the kubrix.log file in you working
directory and copy all the lines containing the coordinates of self-intersection points reported by
Kubrix.
-2.240e+002,1.903e+002,-5.192e+002
-2.240e+002,1.903e+002,-5.192e+002
-2.240e+002,1.903e+002,-5.192e+002
-2.240e+002,1.903e+002,-5.192e+002
-2.240e+002,1.903e+002,-5.192e+002
-2.240e+002,1.903e+002,-5.192e+002
-2.240e+002,1.903e+002,-5.192e+002
----------------------------------------------------------------------------
----------------------------------------------------------------------------
115. Please note that all the coordinates are identical and point to the same location. Go back to the
Rhino model, select the Curve|Polyline|Polyline menu item an paste the copied lines into the Rhino
Command window to create a Polyline passing through all these points (Figure 217). For the last
point of the Polyline, click somewhere in the background away from the model.
Figure 217: Polyline passing through all the "problem" points. The last point of the Polyline is an arbitrary point somewhere
away from the model
116. Left-click on the icon marked Zoom Window and draw a small window around the end of the
line segment. Right-click on the Show Objects to unhide every the mesh (Figure 218).
Zooming in on the tip of the line segment without the rest of the mesh visible ensures that the zoom
and rotation centers will be near the tip of the segment and that subsequent rotations of the model will
keep the tip of the segment in the viewport. With the mesh present, Rhino places the center of
rotation at some depth inside the model and as a result in subsequent rotations the tip of the segment,
which is the location of interest, may no longer be in the viewport.
117. This is a case of multiple vertices that are not properly merged. This is most likely caused by
round-off errors in the mesh splitting process. To merge all the vertices, left-click on the icon
marked Align mesh vertices to tolerance. Click on the parameter DistanceToAdjust and set is to a
large value such as 100. Click on the parameter SelectVertices and click on the vertex indicated by
the guide segment. This vertex will be the vertex over which all other picked vertices will collapse.
118. Left-click, hold and drag your mouse across a small rectangle enclosing all possible vertices that
are in the immediate vicinity of the first vertex you chose to select them.
To avoid selecting vertices that appear to be at the same location but far behind the target collapse
vertex, rotate the model slightly, making sure that the picked vertices do no move with it. To unselect
vertices selected inadvertently, left-click on them while holding the <CTRL> key down.
119. Hit <RETURN> to complete the collapse. Rhino responds by indicating that a number of vertices
were adjusted. Check the Pit and the faults individually to make sure that the collapse has not
introduced new errors.
-2.672e+003,2.814e+002,1.580e+002
-2.449e+003,2.600e+002,1.766e+002
-2.404e+003,2.557e+002,1.804e+002
-2.165e+002,1.594e+003,8.164e+001
-2.303e+003,2.450e+002,1.829e+002
-2.157e+002,1.594e+003,8.114e+001
-2.173e+002,1.594e+003,8.208e+001
-2.336e+003,2.496e+002,1.866e+002
-2.335e+003,2.505e+002,1.900e+002
-2.340e+003,2.498e+002,1.863e+002
----------------------------------------------------------------------------
----------------------------------------------------------------------------
Figure 220: Polyline pointing to "problem" locations (Left), details of one of these locations (Center) and close-up (Right)
Zooming in on the detail depicted in Figure 220, Right, you can note that there is no real surface
imperfection. The problem is caused by the cut parameter in Kubrix which, by default is set to 45;
meaning that any surface detail less sharp than 45 is smoothed over. This causes the remeshed surface
to become mangled at this location.
124. Click on the Kubrix Icon, in the Tetrahedral Meshing tab, enter 30 for the Cut angle and click on
Compute.
125. Kubrix successfully terminates with the following message:
-3.932e-006 to 5.353e-006
-1.751e+003,1.608e+002,1.221e+002
-1.789e+003,1.829e+002,9.912e+001
-2.967e+003,3.000e+003,-1.777e+003
-2.961e+003,3.000e+003,-1.768e+003
-1.038e+003,-2.456e+002,-1.684e+003
-1.038e+003,-2.456e+002,-1.684e+003
-9.869e+002,-2.610e+002,-1.729e+003
-9.869e+002,-2.610e+002,-1.729e+003
-9.960e+002,-2.626e+002,-1.715e+003
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Following a successful mesh generation Kubrix lists the FLAC3D zones or 3DEC blocks that have
marginal quality in terms of their tet collapse ratio. This is a non-dimensional number that measure
how close each pair of opposing edges are. In a tetrahedron (Figure 221), for each pair of opposing
edges (there are 3 such pairs) we compute e, the ratio of the distance h between the edges and the
length of the longest of the two edge lengths E1 and E2 as follows:
h
=
max(E1 , E2 )
The tet collapse ratio of a tetrahedron is defined as the smallest of the 3 values of e calculated for each
pair of edges.
= min()
An e of 0 signifies that there is a pair of edges that intersect each other causing, among other things, a
null volume. Kubrix would not generate such a tetrahedron unless the boundary of the computational
domain imposes it. This happens when two input surface, including fault come so close to eachother
that no room is left for a good quality tetrahedron. The knowledge of the spread of tet collapse values
among the 10 worst tetras indicates that there are less than 10 "marginal" tetras. You can copy the 10
lines of the kubrix.log output corresponding to the 10 coordinates and paste it into the Rhino
Curve|Polyline|Polyline command to see where the 10 worse tetrahedra are located (Figure 222).
Figure 222: Location of the centroids of the 10 worst FLAC3D zones or 3DEC blocks
* -app rhino -i "C:/Users/Itasca/outer.stl" -aspect 1.3 -offset 0.1 -cut 45 -mode tetra1 -ot flac3d -it stl -
fault faults.stl
*GRIDPOINTS
..................................................................
*ZONES
..................................................................
*GROUPS
ZGROUP group1
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
..................................................................
145354 145355 145356 145357 145358 145359 145360 145361 145362 145363 145364 145365
*FACES
..................................................................
*Face groups
FGROUP Patch_1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
..................................................................
676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696
706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726
727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747
..................................................................
1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050
NEW
;read geometry;
impgrid tutorial8.flac3d
his unbal
;Separate the faces at patch that is destined to become interfaces. Zones are separated
;at every zone face belonging to face group Patch_1 and a new face group is created called
;slave
def _SeparateFaces
root1 = 'Patch_'
root2 = 'Slave_'
loop _h(1,2)
command
endcommand
endloop
end
_SeparateFaces
;define interfaces
def _interface_props
root1 = 'Patch_'
loop _h(1,2)
command
endcommand
endloop
end
_interface_props
;property assignments....
model elastic
hist unbal
SAVE tutorial8_elas.sav
RET
END OF TUTORIAL 8
Using Rhino and Kubrix quality feedback info to correct the geometry
surface9 is very finely meshed. It needs to be simplified into a coarser mesh using the Rhino drape
command. This simplification will substantially speed up most operations
130. Maximize the Top view and select the Surface|Drape menu item. Among the parameters of the
Drape a window over the area to drape, leave the parameter spacing equal to 5, and draw a
rectangle as large as possible but contained within the boundary of the surface. Don't get too close
to the border as the draping may result in surface artifacts due to missing triangles (Figure 224,
Left).
131. Delete the initial mesh, select the surface you have just created and select Mesh|From NURBS
Control Polygon to extract a mesh from the surface. Delete the surface so the only remaining
object is the mesh (Figure 224, Right).
Figure 224: Drawing a draping rectangle in the top view (Left) and the mesh extracted from the draped
surface
132. Select the mesh you have just created and using File|Export selected export it as
surface9ADraped.stl.
133. Select the mesh you have just created, left-click and hold down the left mouse button on the
icon marked Edit Layers and left-click on the icon marked Change Object Layer to open the Layer
for objects dialog box.
134. In the dialog box, click on New, and in the New layer dialog box enter SurfaceA and click OK.
Click OK in the Layer for objects dialog box.
135. Left-click the icon marked Edit Layer to open the Layers window. In there, click on the light bulb
in front of SurfaceA to turn SurfaceA off.
There are many ways to obtain a surface from contour lines. The most accurate method uses the
MeshPatch command. MeshPatch uses points on the contour lines to generate a Delaunay
triangulation. Delaunay triangulation is the most intuitive triangulation of a cloud of points. Here, we
will limit the number of points in order to speed up the triangulation. To this end, we will first extract
the control points of the contour lines, then ask MeshPatch to triangulate the extracted points.
137. Select all contour lines and select the Curve|Curve From Objects|Extract Points menu item to
extract the control points of the contour lines (Figure 225).
138. While the points are highlighted, enter _MeshPatch in the Rhino command window, followed by
two <RETURN> . Delete the curves and the extracted points leaving only the mesh (Figure 226).
Note how Delaunay triangulation ensures that triangles are formed among points in the most natural
and logical manner to ensure good quality triangles.
Figure 226: Shaded view and detail of the surface mesh generated from Points
139. Switch to the Top view and maximize it. Select the Surface|Drape menu item and draw a
rectangle large enough and contained within the boundaries of the triangulated surface (Figure
226).
140. Select the mesh you have just created and using File|Export selected export it as
surface9BDraped.stl.
141. Select the mesh you have just created, left-click and hold down the left mouse button on the
icon marked Edit Layers and left-click on the icon marked Change Object Layer to open the Layer
for objects dialog box.
142. In the dialog box, click on New, and in the New layer dialog box enter SurfaceB and click OK.
Click OK in the Layer for objects dialog box.
143. If the Layers window is not open left-click the icon marked Edit Layers, and in the Layers
window click on the light bulb in front of SurfaceA to make it visible, and left-click the icon marked
ColorizeAllObjects to see the two surfaces in different colors (Figure 228).
Since you will work an existing FLAC3D model, to view the model in Rhino you must translate the
FLAC3D grid file into a .WRL file. SpaceRanger can do that for you. Rhino does not understand the
concept of volume mesh. Spaceranger will translate the outer surface of the FLAC3D model into a
collection of quadrilaterals and triangles in the VRML 2.0 format (.WRL) which is readable in Rhino.
144. Run Spaceranger in the folder containing the starting FLAC3D grid file, model9.flac3d. Enter -1
to Translate your model into a .WRL file, followed by <RETURN>.
145. Enter 1 to read a FLAC3D model grid, followed by <RETURN>, and enter model9.flac3d,
followed by <RETURN>. Spaceranger creates 3 files: output.flac3d, output.wrl and output.nas.
Rename output.flac3d as model9.wrl.
146. In Rhino, select File|Import to import model9.wrl (Figure 229).
Please note that the surfaces and the upper surface of the FLAC3D model overlap everywhere over the
topography except in places where the surface is inside the FLAC3D model (the dam). You now must
identify the zones of the FLAC3D model that are intersected by the surfaces. The draped surfaces, in
their present form, interact with every zone near the upper surface of the FLAC3D model. You must
trim the surfaces and keep only the part that is inside the dam.
147. In Rhino, hide the surfaces A and B. Select Curve|Line|Single line and build a horizontal line
lying somewhere along the upper part of the downstream face of the dam. Since the grid lines of
the FLAC3D model are horizontal on this face of the dam you can follow the gridlines. Draw an
additional line along the grid lines somewhere below the previous line (Figure 230, Left). Draw two
additional lines along the upstream face (Figure 230).
Figure 230: Two lines along the downstream face of the dam (Left) & 2 additional lines added along the
upstream face (Right)
Figure 231: Recovered upstream and downstream and downstream surfaces of the dam
The 2 surfaces you have created are too small. They need to be enlarged so that their intersections with
surfaces A and B can be computed properly
149. Select the upstream face and select the Transform|Scale|Scale3D menu item. For the Origin,
click on the middle of the higher of the two line segments used to create the upstream face (Figure
232, Left). Enter 5 for the Scale factor and hit <RETURN>.
Figure 232: The middle of the higher of the two upstream lines is used as the origin of the scaling (Left)
and the resulting surface upstream (Right)
150. Similarly, select the downstream face and use Scale3D and the middle of the higher of the two
downstream lines to scale up the downstream face.
Figure 233: Surfaces A and B, and the recovered upstream and downstream faces
Figure 234: Intersections of surface A with the recovered upstream and downstream faces of the dam:
perspective view (Left) and top view (Right).
Figure 235: The 2 relevant intersection curves (Left), connected by a line into one curve (Middle), and the remaining portion
of surface A after splitting
If you experience difficulties obtaining a single curve for use in SplitMeshWithCurve, Explode all curves,
unselect everything, and use Edit|Select Objects|Duplicate Objects to detect and delete all duplicate
line segments, then join everything into a single curve.
156. Select the trimmed surface A and select and export it as an ASCII STL file called
surface9ATrimmed.stl.
157. Now select the recovered upstream and downstream surface meshes along with Surface mesh
B, and left-click the icon marked Mesh Intersect. Rhino responds with "Found 3 intersections"
(Figure 236).
158. Hide everything but the intersection curves, and delete the isolated intersection curve located at
the bottom of Figure 236, Right (Figure 235, Left represents a Top view with the isolated
intersection removed). While in the top view, Select Curve|Line|Single line and draw a line
connecting the top ends of the two remaining intersection curves (Figure 235, Middle).
159. Unhide surface B, select it and select SplitMeshWithCurve in the Rhino Command window.
While in the Top view, split the surface B mesh with the curve. After the intersection is completed,
select the part of the mesh outside the curve and delete it leaving only a trimmed Surface B (Figure
235, Right).
Figure 237: The 2 relevant intersection curves (Left), connected by a line into one curve (Middle), and the remaining portion
of surface A after splitting
160. Select the trimmed surface B and export it as an ASCII STL file called surface9BTrimmed.stl.
The marbled areas indicate overlap. In those areas only one surface should remain, let's say surface A.
You should trim Surface B to limit it to areas of no overlap.
162. While only Surface A and B are visible, select both and left-click on the icon marked Mesh
Intersect. The highlighted intersection curves clearly indicate the extent of the overlap regions
(Figure 239).
163. Hide surface A, zoom in close, click on the button marked Osnap at the bottom of the Rhino
window in order to deactivate object snapping, select the Line|Polyline|Polyline menu item and
create a Polyline delineating the areas of surface B that are clearly outside the overlap zone. Make
sure that you close the Polyline by choosing its starting point as its last point.
Figure 240: Drawing a Polyline delineating the non-overlapping areas of surface B. The Polyline is shown right before closure
(Left) completed (Middle). The Right view represents the trimmed Surface B
165. Delete the trimming curve and select the trimmed surface and export it as an ASCII STL file
called surface9BTrimmed.stl; overwriting the previous surface9BTrimmed.stl file.
You are now going to use SpaceRanger to identify the zones in model9.flac3d that come to within 2 m
of surface9ATrimmed or surface9BTrimmed .
166. Create a text file called spaceranger.dat, and on the first line of this file write
surface9ATrimmed.stl and on the second line surface9BTrimmed.stl.
167. Run Spaceranger in the folder containing the starting FLAC3D grid file, model9.flac3d. Enter 4 so
that Everything intersecting surfaces becomes one group, followed by <RETURN>.
168. Enter 1 to read a FLAC3D model grid, followed by <RETURN>, and enter model9.flac3d, followed
by <RETURN>.
169. For the buffer distance enter 2 followed by <RETURN>. Spaceranger creates 3 files:
output.flac3d, output.wrl and output.nas. Rename output.flac3d as
model9SurfaceIntersection2.flac3d and output.wrl as model9SurfaceIntersection2.wrl.
170. In Rhino, select the File|Import menu item to open the Import dialog box. At the bottom of the
box, for File of type select VRML and for the File name select model9SurfaceIntersection2.wrl and
click Open. Left-click the icon marked ColorizeAllObject to colorize each object in the model
separately (Figure 241, Left).
Figure 241, Left shows the zones of model9.flac3d that intersect with or come close to within 2 meters
of surface9ATrimmed or surface9BTrimmed.
Figure 241: model9SurfaceIntersection1.wrl depicted in Rhino. The complete model (Left) and the
affected zones only (Right)
You must now check to see if surfaces A or B intersect with the core
172. Select Surface B (by right clicking on Layer B in the Layers window and selecting Select Objects
in the dropdown menu). Select the core and left click on the icon marked Mesh Intersect. Rhino
reports that there are no intersections between surface B and the core.
173. Select surface A and the core, and left-click on the icon marked Mesh Intersect. Rhino finds a
number of intersections (Figure 242, Left). Keep the intersection curves highlighted but hide layers
B and core to see surface A with the highlighted intersection curves in the Top view (Figure 242,
Right).
174. While in the Top view with only surface A (layer A) and the intersection curves visible, select the
Curve|Polyline|Polyline menu item, deactivate Osnap and draw a Polyline that traverses the
surface from top to down and passes near the intersection curves (Figure 243, left).
175. Delete the intersection curves. While the Mesh is selected, select the Mesh|Mesh Edit
Tools|Mesh Split menu item and click on the curve. Select the part of the surface to the Right of
the curve and delete it (Figure 243, Middle). Click on the icon marked Delete Mesh Faces and delete
the faces of surface A near the small intersection curve at the bottom of surface A (Figure 243,
Right).
176. Select the core mesh and export is as an ASCII STL file called outer.stl. Similarly Export the
meshes surface9ATrimmed and surface9BTrimmed, both, as one file called inner.stl.
177. left-click on the icon marked Kubrix (Kubrix version 12 or higher) to open the KubrixGui dialog
box. Select the Tetrahedral Meshing tab and click on the Default button. In the Input Surface
section, click on the Input File button and select the outer.stl file. In the Options section, in the
New keywords field enter -fault inner.stl. Click on Compute to launch the calculations (Figure 244).
Please note that the cut angle is 20 instead of the default 45. Using a small cut angle reduces the
chance for self-intersections in the remeshed surface because it forces the remeshed surface to stay
closer to the original. One of the disadvantages of using a low cut angle is an increase in the number of
zones (or blocks in 3DEC) and the risk that noise present in the input surfaces may end up in the final
Kubrix volume mesh.
6.512099726e+003,6.235797141e+004,9.777447081e+002
6.510874023e+003,6.235809956e+004,9.777234065e+002
6.511879086e+003,6.235528237e+004,9.775516903e+002
6.507350556e+003,6.235427734e+004,9.771623761e+002
6.512338711e+003,6.235427734e+004,9.775603322e+002
----------------------------------------------------------------------------
----------------------------------------------------------------------------
179. To correct these self-intersections, once the Kubrix calculation is complete, open the kubrix.log
file created in your working directory, copy the x, y, z coordinates highlighted in the above Kubrix
output. In Rhino, select the Curve|Polyline|Polyline menu item and paste the copied coordinates
into the Rhino command window.
A successful run of Kubrix should include no error or warning messages about self-intersections.
*GRIDPOINTS
..................................................................
*ZONES
..................................................................
*GROUPS
ZGROUP group1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
.......
85755 85756 85757 85758 85759 85760 85761 85762 85763 85764 85765 85766 85767 85768
85769 85770 85771 85772 85773 85774 85775 85776 85777 85778 85779 85780 85781 85782
*FACES
......
*Face groups
FGROUP Patch_1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
..................................................................
3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694
3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711
3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727
184. Start FLAC3D. Use File|Grid|Import to import core.flac3d into FLAC3D (Figure 247, Left). Now,
use File|Grid|Import again to import model9Hex.flac3d (Figure 247, Right).
Figure 247: Tetrahedral mesh of the core alone (Left) and after the addition of nolde9Hex.flac3d (Right)
185. In FLAC3D, use EXPGRID hybrid.flac3d to export the content of the model as hybrid.flac3d.
Please note that by reading core.flac3d first you ensure that the faces mentioned in the face groups,
which use the grid point ID's invoked earlier in the core.flac3d file remain unchanged.
The figure below (Figure 248) shows the various components of this hybrid model. Please note that you
need FLAC3D version 4.1 or higher to utilize face groups. Also, when you export hybrid.flac3d, your
version of FLAC3D may not include the FACE and FACE GROUP information in the grid file. If this is the
case, please use a text editor to open core.flac3d, copy the FACE and FACE GROUP portions of the
model and paste it to the end of hybrid.flac3d file to obtain a valid grid file.
Using SpaceRanger to create separate groups below and above the surface
NOTE: You no longer need to use the KUBRIX SpaceRanger utility to do this. This can be accomplished
entirely using the FLAC3D Geometry Range and Geometry Group commands.
186. Open the spaceranger.dat file created earlier and insert surface9.stl on the first line.
surface9.stl is a translation of the original surface9.dxf into an ASCII STL ile. Run SpaceRanger,
select option 0, enter 1 to read a FLAC3D grid file, enter hybrid.flac3d as the name of the grid file
you want process. SpaceRanger will produce, among other files a file called output.flac3d.
187. Rename output.flac3d, hybridRanged.flac3d. Launch FLAC3D an use File|Grid|Import to
import hybridRanged.flac3d (Figure 249).
Please note that SpaceRanger does not yet transfer FACE and FACE GROUP information. Please make
sure to manually cut and past the FACE and FACE GROUP section of core.flac3d to the end of
hybridRanged.flac3d prior to use in FLAC3D.
END OF TUTORIAL 9
190. _Layer to open the Layers Panel. Select all layers and click on one lit light bulb (in the Layers
Panel) to hide all layers. Select the Toe and Crest layers, click on the light bulb (in the Layers Panel)
to turn these 2 layers on.
193. Edit|Select Objects|Points to select all point, followed by _MeshPatch. Hit <RETURN> to
accept the default options, and hit <ENTER> ,again, to obtain a triangular mesh resulting from the
points. Edit|Select Objects|Points, followed by <DELETE> to get rid of the points which are no
longer needed. Hide the Crest and Toe layers by turning their layer light bulbs off.
194. _Shade and, in the command options, select Display Mode Shaded.
197. Again, if Flat Shading it not on, turn it on to better see the details of the mesh. Zoom in to see
the image below
199. Click New which opens the New Layer dialog box. Enter PitMesh for the name of the new layer
and click OK. Click OK to close the Layer for Objects dialog box. In the Layer Panel, hide PitMesh by
turning off its light bulb.
203. Select the mesh, then _ChangeLayer which opens the Layer for Objects dialog box.
204. Click on New which opens the New Layer dialog box. Enter TopoMesh for the name of the new
layer and click OK. Click OK to close the Layer for Objects dialog box. In the Layer Panel, hide
TopoMesh.
207. Mesh|Mesh Edit Tools|Mesh Trim and click inside the curve to trim off the portion of the mesh
that is inside the curve. Don't forget <ENTER> to complete the Trim operation. Edit|Select
Objects|Curves followed by <DELETE> to get rid of the boundary curve.
Building a single surface extending over the pit and the topography
209. In Top view, select Surface|Drape. Click somewhere at the top, left of the mesh, then drag the
mouse towards lower left corner of the window drawing a rectangle as large as possible while still
contained within the mesh.
225. KUBRIX creates a file called kubrix_out.flac3d. Start FLAC3D, File|Grid|import kubrix_out.flac3d.
his unbal
model elastic
hist unbal
SAVE Tut_elas.sav
RET
230. Click Open to start reading. Once the reading is complete, click on Blocks in the Control Panel
under the List tab to see the model. Type "i" in the graphic window to see an axonometric
perspective. In the Block Attribute, select Color by Region.
232. Surface|Loft. In any of the views click on one curve, then the next, followed by <ENTER>. This
opens the Loft Options.
Assembling the faults and the solid into one non-manifold Polysurface
237. Turn Solid, F1 and F2 on in the Layers Panel. Double-click the label of the Perspective view to
maximize it.
240. _ExtractSrf, (option Copy = No), and click on any portions of the faults sticking outside the
computational domain, followed by <ENTER> to complete the surface extraction.
246. Note that _Check returns information on a number of naked and non-manifold edges.
247. Click Close to close the box. Select the mesh and _ChangeLayer, New, to move the mesh to a
layer called SolidMesh. In the Layers Panel, turn off Solid so that only SolidMesh is visible.
250. Enter _ExtractConnectedMeshFaces. This opens the Extract Connected Mesh Faces dialog box
The Angle between affects the spread of the yellow patch of faces connected to the seed face
through a dihedral angle less or equal to te selected angle. Click on any mesh face (triangle or quad)
at the bottom of the model, and set the Angle between to 1.
252. Click OK to complete the extraction, then _Hide to hide the extracted (and still highlighted)
portion of the mesh. Now the interior of the model and the two intersecting faults are clearly
visible. Zoom in closer.
253. _ExtractConnectedMeshFaces again, and open the Extract Connected Mesh Faces dialog box.
Click on any mesh face on one of the faults, and set the Angle between to 3.
255. Again, _ExtractConnectedMeshFaces, which opens the Extract Connected Mesh Faces dialog
box. Click on any mesh face on the remaining fault, and set the Angle between to 3.
257. The initial mesh is now split into 4 meshes: the bottom and the 2 faults that are hidden, and the
remaining mesh representing the walls and the topography. Unhide all the meshes, select all
meshes and _ColorizeObjects.
261. Select one fault, then File|Export Selected, File name: F1, Save as type, STL. If the STL Export
Options dialog box opens, Check File type Ascii, Export open objects, Always use these settings, then
OK.
262. Select the other fault, then File|Export Selected, File name: F2, Save as type, STL. If the STL
Export Options dialog box opens, Check File type Ascii, Export open objects, Always use these
settings, then OK.
267. KUBRIX creates a file called kubrix_out.flac3d. Start FLAC3D, File|Grid|import kubrix_out.flac3d.
NEW
impgrid kubrix_out.flac3d
gen separate face group "new1" range group "F1.stl"
gen separate face group "new2" range group "F2.stl"
interface 1 face range group "new1"
interface 2 face range group "new2"
interface 1 prop kn 1e10 ks 1e10 cohesion 1.e1 tension 0.0 friction 30
model elastic
prop bulk 37e9 shear 22e9 dens 2700. ;e.g., granite
hist unbal
SOLVE ratio 1e-5
SAVE Tut_elas.sav
RET
271. Show Zone|Displacements|Displacement Magnitudes.
275. KUBRIX creates a 3DEC POLY file called kubrix_out.3dec. Start 3DEC, File|Open Item, check Call
on the right panel.
277. Render the Blocks 99% transparent, then in the List tab, double-click on Joint.
278. Click on the Joint Range icon and in Elements double-click Join ID.
280. Click OK to see a view of the transparent Blocks overlaid with the two joints now appearing as
joints 3 and 4.
End of Tutorial 10
283. Select the Top View, click on the Show Edges icon, check All Edges and note the seam (in pink).
You will split this surface in 3 pieces. This is how you can do that.
285. Perspective view, select all 3 surfaces, click on the ColorizeObjects icon. Note that there are 3
surfaces.
287. Hit <Return> to accept the default values. Start FLAC3D, File|Grid|Import block_ranger.flac3d.
If FLAC3D responds with bad zone geometry messages, move your seams around or increase
MinEdgeResolution or reduce MaxEdgeLength in BR.
290. Select the two highlighted faces (below, left), DupBorder, Loft, delete the border and Join the
lateral surface and the two end surfaces to create a Solid (below, right).
292. To build the last Solid, Extract Faces from the two existing Solids (below, left), and Join them
with the remaining unused face, then Solid|Cap Planar Holes to build a solid. Unhide everything to
bring in the solid representing the cavern itself (below, right).
294. Select all solids and left-click on the BR icon. Run FLAC3D and read the grid in.
Figure 251: A solid model (left) and a 3DEC model (right) of a salt cavern
Figure 252: Clockwise from top left: Contour lines, boundary-fitted all-hex model, Octree model model, and 3DEC model
Preparation
317. Start Rhino and select Large Objects, Meters as your template. If Rhino does not ask you for a
template, File|New and select Large Objects, Meters.
318. If you have not already done so during an earlier work session, drag the content of Rhino5 Stuff
onto your Rhino5 window to install the plug-ins, menu items and icons contained in that folder in
Rhino5. Another installation option is to double-click the BlockRanger.rhi installer file to install the
plug-in and the associated tools. The installation is permanent and you will not need to do this for
later sessions.
319. in Rhino, type SetWorkingDirectory and navigate to the your current working directory. In this
fashion Rhino knows where to read, import from and save files.
Pillar
Reservoir
Tunnel45
Salt Cavern
Civil Tunnel
Summary
BubblePack is a program for the automatic generation of clumps for PFC3D. This program which has
been added to the Kubrix suite of applications uses Delaunay tetrahedralization to create a clump
representation of any shape.
BubblePack approximates the mid surface of any closed surface. The resulting point, radius pairs
represents a clump approximating the given shape.
To use BubblePack one specifies a shape, an input as a triangulated surface represented as a formatted
STL file, and two parameters describing the degree of approximation. The program outputs a ball file
which can be read directly into PFC3D.
Figure 253: A 2D planar curve and its medial axis representation shown with thin lines. The medial axis or skeleton is the
locus of the centers all the internal circles (in blue) tangent to at least two points of the curve
By extension, the mid-surface of a three-dimensional surface S is the locus of the centers of spheres that
are tangent to the surface S in three or more points, where all such spheres are contained in S. Figure
255 illustrates a 3D example in which the mid surface is shown in pink.
Clearly, the definition of mid-surface and the problem of finding clumps approximating a surface are
germane. A mid-surface and the radius of all the spheres it hosts define an infinite collection of balls
perfectly matching a surface. In practice, we are limited to a small number of balls
Using BubblePack
Examples
Input Surface
Input file
Name of the ASCII STL file defining a closed surface in which the clump will be created. Please make
sure the STL grid size is uniform and at most 1/10 of the size of the smallest ball
Meshing Parameters
Min/Max Ball Size Ratio
The size ratio of the smallest to the largest ball. This parameters determines how small details are
resolved
Figure 256: Clump representing a Hershey kiss with 8 balls. The two parameters determining the clump are Min/Max Ball
size ration = RMIN/ RMAX = 0.4 and Amax, the maximum ball-to-ball intersection angle A < 90
Options/New Keywords
This field is reserved for additional command-line keywords
Compute
Launches the mesh generation computation
Reset
Restores the initial set of parameters when KUBRIX was first started. These parameters are read from
the kubrix.log file located in the working folder.
Default
Restores the default KUBRIX parameters for the type of meshing requested.
Cancel
Closes the KUBRIX dialog box
Help
Opens this document
General Guidelines
CAD data is generally either a surface/solid/line (geometrical) model or facetized (discretized polygons).
Solid/Surface/line models are mathematically exact definitions of the geometries they describe whereas
facetized data represent solid/surface models that have been discretized into a collection of points and
polygons.
Surfaces/Solids must be imported as IGES or STEP files into Rhino, triangulated, cleaned-up and
exported as ASCII STL files for processing with KUBRIX.
Facetized (triangulated) data may be imported in the STL, VRML, DXF or 3DS formats into Rhino for
further processing. In Rhino, facetized data will be represented as a mesh. The mesh must be first
cleaned-up, that is checked for quality (no free edges, degenerate or duplicated faces) and defeatured
(see Removal of artifacts due to triangulation noise: de-featuring. Section 0 in Tutorial 3) before being
exported as an ASCII STL file for processing with KUBRIX
Wireframes
Wireframes may be imported as IGES, STEP, VRML 2.0, DXF or DWG files into Rhino. In Rhino, the data
will appear as lines. Lines should be used as a guide to create closed polysurfaces. It is a good practice
not to curves directly but to retrace them by creating Polylines (using points on the curves). Often,
curves produced by AutoCAD contains many degenerate line segments which, if used directly in the
construction of a surface, may result in invalid surfaces. Use the retraced Polylines or curves to create
Points
In Rhino, the points should be used as a guide to create lines and closed polysurfaces. The closed
polysurfaces should be triangulated, cleaned-up and exported as an STL file for processing with KUBRIX
Partitioning by interiority
SpaceRanger tests whether the center of a zone, block or ball is inside (or below, if the surfaces are not
closed) one or several surfaces. The surfaces must be specified and listed in a specific order in a file
called spaceranger.dat. SpaceRanger checks each zone center, block center or ball center and
determines whether it is inside (or below) any of the surfaces and tags that zone, block or ball as being
inside the last surface (in the list) it is inside. For instance, if a zone center is inside the surfaces named
on lines 3, 19, and 14 and outside all the other surfaces in the list, that zone will be tagged as being
inside the surface named on line 19.
SpaceRanger can directly process FLAC3D grid files. For other Itasca products, you can use FISH to
export the x, y, z coordinates, and material or color of entities in a model into a text file. SpaceRanger
sorts through the file and create a new file with updated entity groups, regions or colors which can be
read back into the model using FISH. A number of such FISH functions are provided in the manual
example files.
We will use 3 surfaces to partition this model in multiple groups. These 3 surfaces are stored in 3
separate ASCII STL files called Y0.stl, Y1.stl and Y9.stl. You can think of these surfaces as 3 excavation
surfaces in an open pit mine representing Year0, Year1 and Year2. Figure 258 shows the surfaces in one
Rhino document and in the FLAC3D model where the 3 surfaces have been read as one DXF file
containing each surface in a separate layer.
Figure 258: 3 surfaces used for SpaceRanging the model: Left, in Rhino, Right, imported as DXF in FLAC3D
sphereY0.stl
sphereY1.stl
sphereY2.stl
SpaceRanger option 0: Ignore existing groups. Build new ones based on surfaces
Enter 0, followed by 1 and the name of the flac3d grid file you want to process (which is test5.flac3d).
SpaceRanger reads spaceranger.dat, processes all zones and produces 2 files: output.flac3d and
output.wrl. Read output.fla3d into FLAC3D (Figure 259). Please note that all the existing groups are
now combined as one and called OLD, and 3 new groups are created: New_1, New_2 and New_3.
To understand why the zone located at A (Figure 259) is named New_2 note that location A is below (or
inside) the surface named on line 1 of spaceranger.dat (i.e. Y0.stl), below the surface named on line 2
(Y1.stl) but outside or above the surface named on line 3. Since interiority to surfaces named on higher
line numbers override those on lower ones, (as explained earlier) the zone at location A will be declared
as being inside the surface named on line 2, thus the group name New_2.
The zone located at B is declared as belonging to group OLD because it is not inside or below any of the
surfaces ( note that B is located outside the vertical shadow of all the surfaces).
SpaceRanger option 1: Partition existing groups based on surfaces. (May produce many groups).
Run SpaceRanger and enter 1, followed by 1 and test5.flac3d. Read output.fla3d into FLAC3D (Figure
260).
Zones outside or above the surfaces maintain their old group number. Zones that are inside or below
any of the surfaces are partitioned into new groups along all the surfaces.
Everything inside or below the surfaces are partitioned according to the priority rule described earlier.
Everything outside or above maintains its original group number.
SpaceRanger option 3: Everything outside surfaces becomes separate groups; inside is unchanged
Run SpaceRanger and enter 3, followed by 1 and test5.flac3d. Read output.fla3d into FLAC3D (Figure
262).
Note that zones at location A are considered outside (group New_1) since location A is outside the
vertical shadow of the surfaces.
Please note that if a zone intersects multiple surfaces, it will be tagged as intersecting the surface
appearing at the highest line number in the spaceranger.dat. For instance, if a zone is found to intersect
the surfaces on line 1, line 37, and line 6 of the spaceranger.dat, it will belong to group New_37.
If there are multiple surfaces in spaceranger.dat, inside or below the surfaces means inside or below any
of the surfaces . Read output.fla3d into FLAC3D (Figure 264).
The FISH function WriteZoneCentersAndMaterialIds writes out the x, y, z coordinates of each zone
center and its current property ID into a file called ZoneCentersAndProperties.dat .
The program SpaceRanger.exe reads the ZoneCentersAndProperties.dat file and produces a file called
CalculatedCentersAndProperties.dat in which block property IDs have been updated based on the ray
shooting logic described earlier. The file CalculatedCentersAndProperties.dat can readily be read into
an existing model using the FISH function ReadZoneCentersAndMaterialIds. This will give the model its
new zone prop IDs.
The FISH function WriteBlockCentersAndMaterialIds writes out the x, y, z coordinates of each block
center and its current property ID into a file called BlockCentersAndProperties.dat .
If you check your model, you will see that the block property IDs have now been updated.
To use SpaceRanger in C++, you need to name the various surfaces, input0.stl, input1.stl, input2.stl,
Other examples:
Figure 266: Examples of SpaceRanger use: left, pit excavation sequence in 3DEC. Right: geology in
FLAC3D
This is a security "feature" of Windows. Occasionally, when you replace the license (upgrade or
extension of your license) in C:\Program Files (x86)\Simulation Works\Kubrix, Kubrix continues to use
the ghost copy and your new license won't work. To resolve this problem, delete the copy of
kubrix_lock located in C:\Users\<your name>\AppData\Local\VirtualStore\Program Files
(x86)\Simulation Works\Kubrix and the curse simply evaporates...
In Rhino 5 Beta, the MeshPatch command which builds a Delaunay triangulation out of curves or point
clouds runs way, way faster!
To control how fine the resulting surface mesh will be I suggest not feeding the curves directly to
MeshPatch. Instead, select your contours, then Curve|Point Object|Divide Curve by|Length of
Segments. Specify a segment length that half the vertical distance between consecutive contour lines
(this, to prevent aliasing in the resulting triangulation). Now, select all the points, followed by
MeshPatch and <RETURN>, <RETURN>, et voila!
If the surface mesh is too noisy, just Surface|Drape it in a Top view. To get a nice looking mesh from a
draped surface try Mesh|From NURBS Control Polygon; IMHO way sexier than what "from NURBS
Objets" hands you...
This is caused by the "Joint" radio button not being checked in the Octree Meshing tab of Kubrix. If you
check "Joint", you will avoid this delay and Kubrix will immediately proceed to outputting the mesh after
vertex sorting is complete.
The default settings of Kubrix will be revised in the next release of Kubrix in order to avoid this problem.
1- In Rhino:
+Check objects. A Clean bill of health from the mesh doctor is a necesary condition for a successful run
with Kubrix.
+ExtractMeshFacesByAspectRatio with an aspect ratio of 10,000 or more often points to tolerance
mismatches on the surface. Deleting these faces and using MatchMeshEdges or other means often saves
2- In Kubrix:
+Self-intersection checks before surface remeshing point to the true x,y,z coordinates of trouble spots
+Self-intersection after surface remeshing brings to light situations where two choppy and close surfaces
defining a thin volume (orebody) nearly escape self-intersection but self-intersect after surface
remsehing. To avoid this, reduce the cut angle and/or the offset value. Sometimes, simplifying these thin
volumes is the only way to ensure non-self-intersecting remeshed surfaces even with large cut angles.
This is key to producing 3DEC models with low block counts.
+Coordinates of trouble spots during the mesh generation process
+In Kubrix 12, the coordinates of the center of the 10 worst zoners or blocks are listed which point you
to trouble spots (surfaes that come too close, exceedingly sharp boundary angles, etc...)
In Kubrix 12, the coordinates of the trouble spots are outputted in such a way that they can be copied as
a block and pasted into the Rhino Curve|Polyline|Polyline command to create a polyline pointing to all
the troublespots at once.
This is particularly critical when the model center is far from the origin or when the model is very large.
In all cases, make sure that your model is not too far away from the origin and in case it is move it closer
to the origin. Moving the object closer to the origin also helps with the graphics both in Rhino and in
your engineering analysis software.
When starting a new project, use the initial Rhino template to specify whether the model will be a
"Large object in "meters", "small" object in "feet", etc.., then import DXF, STL or even existing 3dm files
into the new project. In this fashion you control the tolerance and not the default tolerance specified in
the DXF. By default, Option|Document Properties|Units should say an absolute tolerance of 0.01, a
relative tolerance of 1.0. and an angle tolerance of 1.
When preparing a solid, in general you have to join multiple surfaces. Too small a tolerance prevents
successful joining so the default "Large object in meters" is often good for obtaining a single joined
polysurface. However, when intersecting or doing a Boolean operation on polysurfaces or meshes, a
smaller tolerance such as 0.0001 absolute, 0.01 relative and 0.01 in angles may be more appropriate.
Simplifying Complex & Thin Geological Structures for Use with Kubrix?
PROBLEM:
You have a complex geological structure that has a thickness but spans across a wide area. It
really should be modeled as an interface in FLAC3D or a joint in 3DEC but you need to
SOLUTION:
Select the mesh structure, then ExtractPt to extract all its vertices as a cloud of points. While the
points are selected, use MeshPatch to triangulate these points. The result is a triangular mesh that
is extremely choppy (like a waffle), and this is because the triangulation tends to join points
across the thickness of the geological structure connecting points on the foot wall an hanging
wall sides of the structure....But no worries.
Now, select the choppy mesh and Transform|Smooth, check smoothX, Y and Z and Fix
Boundaries. Set the Factor to 1 and OK. repeat several times. As you do this the mesh converges
towards a smooth surface that is an average of the foot wall and the hanging wall. Select the
resulting mesh and use ReduceMesh with 90% reduction to reduce it to a low-count mesh and
you are done!
Rhino5 is the right tool for that because both MeshPatch and ReduceMesh actually work in
there.
Some time Rhino's working folder is different from the folder containing the input STL file. Reading a file
from this folder often suffices to let Rhino know where the working directory is. You can explicitly set
the working folder with the Rhino SetWorkingDirectory command.
You are probably saving both your mesh and the original Rhino model. Select the mesh and use Export
or delete the model, then use save to create the STL file.
Kubrix does not accept naked edges. It is good practice to check the surface mesh created by Rhino
using Check objects before saving it as an STL file. There could be a number of reasons causing this
problem:
327. You forgot to use Edit|Join (for a manifold solid) or NonManifoldMerge (for a non-manifold
solid) prior to creating the surface mesh. As a result, each surface is independently meshed with no
guaranty that naked edges on adjacent surfaces match. Make sure that you use Join (for manifold
surfaces) or NonManifoldMerge (for non-manifold surfaces) before surface meshing.
In the non-manifold polysurfaces resulting from the NonManifoldMerge operation, due to tolerance
issues, after surface meshing, a few naked edges may survive. Highlight naked edges using
Analyze|Edge Tools|Show Edges and manually delete and rebuild the triangles around them to create
proper non-manifold edges.
328. Using MatchMeshEdge takes care of manifold edges but cannot resolve naked edges that
should be non-manifold edges (more than two surfaces meeting at an edge). To remove any
remaining naked edges, get close to a naked edge and use the command AlignMeshVertices|Select
vertices to merge vertices that are close. The first vertex you click on will be the vertex on which
the second vertex you click will collapse.
If this occurs before surface remeshing, it is an indication of true surface self-intersection and it has to
be corrected or else Kubrix wont understand the intended topology. You should inspect the x, y, z
locations reported on the Kubrix terminal output. Copy any reported x, y, z coordinates, go back to the
Rhino model of the STL file you used. Click on the Top View Label to activate it. Select the
Curve|Line|Single Line menu item and for the Start of line coordinates paste the x,y,z coordinates that
you just copied them. For the End of line coordinates, while still in Top View, click somewhere in the
background and away from the model. You have just built an indicator line that points to the location of
trouble in your model.
Double-click the Perspective view label to maximize that view, click on the button marked Shaded View
port, select the indicator line you just created, and use the mouse and the wheel to zoom in to the area
of trouble. By having highlighted the indicator line, you always see its ends as you zoom in.
Poke, hide or delete the various triangles around the problem area to see what is going on. If your
model is too large, you can hide most of the model and focus on the area of interest by clicking on the
icon marked Extract Mesh Toolbar |Face to selected large groups of triangles away from the area of
interest and hid them.
The default offset value you are using is probably too large and the resulting blocks are possibly too
coarse. This happens if your model is small with large features. Reduce the offset by a factor 10, and
rerun.
You may also have to reduce the cut angle. If two highly curved and noisy triangular surfaces come
very close to each other, after remeshing, self-intersecting triangles may be produced. To avoid this
reduce the cut angle to 20 or even 10 or less. This will ensure that Kubrix will remesh the surfaces while
respecting slight dihedral angles on the surfaces thereby preventing self-intersection in the resulting
triangulated surface used for volume meshing.
License error.
I obtained a Kubrix license but I get an error message saying that the license is not valid
Please go through the following license troubleshooting checklist and send the result to
kubrix@itascacg.com:
In all that follows, replace Program Files with Program File (x86) if you have installed Kubrix on a 64 bit
operating system)
Make sure that you are running Kubrix on the machine it was licensed to. Kubrix is node-locked to the
machine for which it is licensed.
C:\Program Files\Itasca\Kubrix
Verify that the file kubrix_lock (or kubrix_lock.txt, the Kubrix license character string key
can be in a file with either name) is located in:
C:\Program Files\itasca\Kubrix
Make sure that kubrix_lock (or kubrix_lock.txt) contains the encrypted Kubrix license key
which was sent to you by email. The encrypted key should look something like:
5D8IK1K-5L7O9IA-8ZT1J5T-78Z
sometimes terminated by a -. This character string is the only thing that should be in the kubrix_lock
file, and it should appear on the first line; not the entire content of the license Email.
To go to the
C:\Program Files\itasca\Kubrix
cd C:\Program Files\itasca\Kubrix.
If you receive the error message ER-ISE028 saying that a Nastran file was not found, it means that the
installation is fine and it is simply looking for a default input file called kubrix_in.nas.
C:\Program Files\itasca\Kubrix
Cut and paste the screen output in an email and send it back to us.
In the same command window, please type the command: ipconfig /all
Cut and paste the screen output in an email and send it back to kubrix@itascacg.com.