Grid File Utilities

This command is used to modify and create grid files. The modifications can be done manually on a single grid, on multiple grids in a batch mode, or saved and rerun using the grid macros created with the macro editor. To modify manually, start by picking the Select Grid(s) button. There is an option to use inclusion and exclusion polylines to only modify the grid within/outside these perimeters. With this option active, the program will prompt for inclusion and exclusion polylines when a function is selected. Only grid cells inside the inclusion polylines will be modified. Grid cells inside the exclusion polylines will not be modified. If no inclusion and exclusion polylines are selected, then the entire grid will be modified. Each function is described below.








Export to DTM writes the current grid file to a DTM format text file. The format of this file is the following:

DTM 1.0             Header Line
test.dtm             Name of file
51                     Number of cells in X direction
51                     Number of cells in Y direction
79442.4697         Lower left grid corner Y coordinate
14899.0326         Lower left grid corner X coordinate
0.0                    Lower left grid corner Z coordinate
11.5618             Dimension of cell in X direction
7.0639               Dimension of cell in Y direction
1581.2612          Grid cell values starting from lower left, moving from left to right
1580.8879
1580.3257
etc...

Import from Text File (X, Y, Z) creates a grid file from X Y Z data in any text file. There does not need to be a current grid file loaded since this routine will create a grid file. The text file should consist of one X Y Z coordinate per row with the first coordinate being the lower left grid corner and the last coordinate as the upper right grid corner. There are options for space or comma separated coordinates and for the order of the coordinates as either row (left to right) or column (bottom to top). The prompting will be as follows:
Separation type [<Space>/Comma/FixedWidth]?
Column number for X coordinate <1>:
Column number for Y coordinate <2>:
Column number for Z value <3>:
Import from Triangulation prompts user to select a tin or flt file and allows user to adjust grid position and resolution. The grid file is created with the same name in the same directory as the selected tin/flt file.

Import DEM/ESRI prompts the user to select a DEM, ADF, or ASCII ESRI grid file to be imported. The ESRI grid files can be created from ArcMap using the Raster To ASCII tool. If the file format is recognized, the program reads, and displays information about the source projection of the DEM/ADF/ESRI file, and allows the user to define a target projection for transforming the grid to a local coordinate system. The "Skip every # rows/cols" option allows the user to reduce the size of the imported grid file. In the case of a DEM/ESRI files each pixel of elevation information of the DEM/ADF image data is interpreted as representing an elevated point located in the center of that pixel (not multiple points located on the edges of that pixel). In contrast, the "Import DEM/ADF File Dialog" will output the "Origin" of the DEM/ADF file in terms of the raster pixel extents. The output grid file is created with the same name in the same directory as selected DEM/ADF/ESRI file.


Import Minex ASCII DUMP allows user to import multiple Minex ASCII grids from a single .asc or .csv file. The imported grids will be automatically named according to the header information in the .asc/.csv file. An example File Format is provided below.




Import Mintec allows user to import Mintec GSM Model Dump as grd files. User is prompted to select GSM Model Dump (txt) file, which is then processed to determine minimum northing, easting (lower left corner), resolution and size of the grid. First three columns of the GSM model dump must represent the X, Y and SEAM LEVEL respectively, a base name for the grid files is specified along with name of the quality that each column represents. User can define up to 17 qualities. When the import button is pressed all the imported grids are created with the name "BASE NAME-SEAM LEVEL-BASE ITEM.grd" in the same directory as source dump file.


Import Surfer prompts to select a grd file from Surfer program and creates a grd file.








Macro Editor: The Macro Command Recorder allows you to create a script for grid modification and save these steps to a .gfu file. These macros can be rerun to repeat grid modifications when the source grids are modified, thus saving time on tedious manipulation. Macros can also be reviewed for accuracy, whereas manual manipulation of grid files cannot be checked with as much detail. When writing a macro, you essentially perform the normal grid manipulations using the functions on the left of the dialog. Although the prompts will be slightly different than manual manipulation, the steps will be automatically added to the text window. You can then copy/paste the text as needed to speed up the macro-writing process.

Quick notes on the macro editor:

Surface Macro Launcher Details
The Surface Macro Launcher displays the GFU file name in the upper menu bar. This is an editor, and you can use basic functions like CTRL-X, CTRL-C & CTRL-V for cut, copy, & paste. GFU files also can be edited easily in any text editor, such as Notepad, WordPad or K-Edit. If there are any errors in the GFU during its execution, they will be displayed in the error log section when the macro runs. The Values Drilldown on the right side of the dialog allows you to inspect the calculations/grid variables at an actual Northing-Easting location, which is especially useful for checking that the results are correct. You may screen-pick a location by clicking the Pick button, or you may manually enter the Northing and Easting coordinates. As the macro runs, each variable will be display in the text readout below these options. If the Verbose Output option is disabled, only a summary of the grid variables will be displayed, with each variable updating as the macro runs. If the Verbose Output option is enabled, the results from each line of the macro will be displayed in the text readout.












Submacro in the same macro that calls it. There are two submacros defined at the top, and then they are both called at the bottom, THICK2 and THICK.

SUBMACRO THICK()
A1=LOADFROM($PROJECTPATH\one.grd)
B1=LOADFROM($PROJECTPATH\two.grd)
C1=A1+B1;
SAVEAS(C1,$PROJECTPATH\three.grd)
END SUBMACRO
;---------------------------------------------
SUBMACRO THICK2(A,B,D)
C=A+B;
SAVEAS(C,D);
END SUBMACRO
;---------------------------------------------
A1=LOADFROM($PROJECTPATH\one.grd);
B1=LOADFROM($PROJECTPATH\two.grd);
THICK2(a1,B1,$PROJECTPATH\three_b.grd);
THICK()
---------------------------------------------------------------------------------

Submacro in a different macro that calls it. The first step is to define the submacros in their own gfu, this one contains THICK and THICK2 and is saved as mymacros.gfu.
SUBMACRO THICK()
A1=LOADFROM(C:\downloads\one.grd);
B1=LOADFROM(C:\downloads\two.grd);
C1=A1+B1;
SAVEAS(C1,C:\downloads\three.grd);
END SUBMACRO;
;--------------------------------------
SUBMACRO THICK2(A,B,D)
C=A+B;
SAVEAS(C,D);
END SUBMACRO;
---------------------------------------------------------------------------------

INCLUDE: To include a previously defined macro in another macro, the INCLUDE function is used. Once mymacros.gfu is created, then it can be loaded (with INCLUDE) and referenced in another, separate GFU macro.

INCLUDE($PROJECTPATH\mymacros.gfu);

A1=LOADFROM($PROJECTPATH\one.grd);
B1=LOADFROM($PROJECTPATH\two.grd);
THICK2(a1,B1,$PROJECTPATH\three_b.grd);
THICK();

Here is an example, with comments, where the bottom elevation and the thickness are added together to get the roof, for 6 seams. The Submacro is defined by the equation just once. Then it is called and used 6 times at the bottom of the macro.
;Add the Floor and Thickness to get the seam Roof.
;Coal seams to apply this to are: C1,C2,C3,C4,C5,C6
;------------------------------------------------------
;LOAD THE GRIDS INTO MEMORY
;
C1_KEY_ELV=LOADFROM(C:\Carlson Projects\C1_KEY_ELV.GRD)
C1_KEY_THK=LOADFROM(C:\Carlson Projects\C1_KEY_THK.GRD)
C2_KEY_ELV=LOADFROM(C:\Carlson Projects\C2_KEY_ELV.GRD)
C2_KEY_THK=LOADFROM(C:\Carlson Projects\C2_KEY_THK.GRD)
C3_KEY_ELV=LOADFROM(C:\Carlson Projects\C3_KEY_ELV.GRD)
C3_KEY_THK=LOADFROM(C:\Carlson Projects\C3_KEY_THK.GRD)
C4_KEY_ELV=LOADFROM(C:\Carlson Projects\C4_KEY_ELV.GRD)
C4_KEY_THK=LOADFROM(C:\Carlson Projects\C4_KEY_THK.GRD)
C5_KEY_ELV=LOADFROM(C:\Carlson Projects\C5_KEY_ELV.GRD)
C5_KEY_THK=LOADFROM(C:\Carlson Projects\C5_KEY_THK.GRD)
C6_KEY_ELV=LOADFROM(C:\Carlson Projects\C6_KEY_ELV.GRD)
C6_KEY_THK=LOADFROM(C:\Carlson Projects\C6_KEY_THK.GRD)
;------------------------------------------------------
;DEFINE THE SUBMACRO EQUATION
;
SUBMACRO ROOF(X,Y,Z)
TOP=X+Y
SAVEAS(TOP,Z)
END SUBMACRO
;
;------------------------------------------------------
ROOF(C1_KEY_ELV,C1_KEY_THK,C:\Carlson Projects\C1_KEY_TOP.grd)
ROOF(C2_KEY_ELV,C2_KEY_THK,C:\Carlson Projects\C2_KEY_TOP.grd)
ROOF(C3_KEY_ELV,C3_KEY_THK,C:\Carlson Projects\C3_KEY_TOP.grd)
ROOF(C4_KEY_ELV,C4_KEY_THK,C:\Carlson Projects\C4_KEY_TOP.grd)
ROOF(C5_KEY_ELV,C5_KEY_THK,C:\Carlson Projects\C5_KEY_TOP.grd)
ROOF(C6_KEY_ELV,C6_KEY_THK,C:\Carlson Projects\C6_KEY_TOP.grd)


Variables
Variables in the GFU can be any keywords providing meaningful identification of the data loaded. A variable can be either just a value or constant; or most commonly a surface (Grid or TIN). Individual macro lines typically have one of the following forms:
    Variable1=Variable2
    Variable1=Expression
    Variable1=Function(Expression1,Expression2)

Whenever new variable name is encountered on the left side of the equation, the new variable will be created. The program will use its knowledge of the right side of equation to define a type of the new variable. For example:
    A=1.0                  Variable A will be just a value
    A=LoadFrom(abc.grd)        Variable A is a grid loaded from file
    B=A                               Variable B is same variable type as A
    B=(1+C+A)/D                  Variable B will be 1+C+A, all divided by D. C and D will need to be defined somewhere before this line in the GFU.

Important!: Once a variable is defined, its type (like grid location and resolution) does not change. Therefore, for the existing variable A, the following expression:
    A=Min(B,C)

is interpreted in the following way: for every point of the existing surface A calculate values of surface B and C and use the smaller of the two values to set new value of point elevation on surface A.

The following operators may be used in the expressions:
+, -, *, / - regular arithmetic operators
<, >, =, ! (not) - logic operators
| (or), & (and) - binary operators

Changing the scope of the equation
The scope of any line of the script can be modified by adding one of the following inclusion/exclusion operators:
    A=Min(B,C);INCLU()       - will prompt for inclusion at run-time
    A=Min(B,C);INCLU(handle_here)   - will use AutoCAD entity with specified handle for the inclusion
    A=Min(B,C);EXCLU()   - will prompt for exclusion at run-time
    A=Min(B,C);EXCLU(handle_here)   - will use AutoCAD entity with specified handle for the exclusion
    A=Min(B,C);PERIM()   - will prompt for polyline file with inclusions/exclusions
    A=Min(B,C);PERIM(file_name)   - will use specified file with inclusions/exclusions
Multiple inclusions or exclusions can be appended in this manner. Only points of target surface (A) passing inclusion/exclusion filter will be evaluated.

For custom, user define prompting, the following text should be used:
    PERIM(,Prompt goes here) for user defined interactive inclusion and exclusion selection in CAD
    PERIM(*,Prompt goes here) for file selection dialog with user defined prompts to select a PLN file.

The following script functions are currently defined:


Macro functions (performing operations on the entire surface at once)

LOAD() Prompt user for the file to load. Returns a variable.
LOAD(,Prompt goes here) for user defined prompting
LOADFROM(string) Load surface from file. Grids (GRD) and TINs (FLT, TIN) are supported. Returns a variable.
SAVE(Variable) Saves surface back to original file.
SAVEAS(Variable,FileName) Saves surface into a file with given name.
RELEASE(Variable)  Releases  memory used by a surface and undefines it for further use.
EXTRAP(Variable[,Type])

Micro functions (taking effect on point by point basis as controlled by left side of the equation) Expressions can be complex ones with variables, value and functions

MAX(Expresson1,Expression2) Sets value to larger of two expressions evaluated.
MIN(Expresson1,Expression2) Sets value to smaller of two expressions evaluated.
LESS(Expression1,Expression2,Expression3) If result of Expression1 is less than Expression2 then result is Expression3. Otherwise the source point is not changed. If Expression3 is not specified value is set to NULL.
GREATER(Expression1,Expression2,Expression3) If result of Expression1 is greater than Expression2 then result is Expression3. Otherwise the source point is not changed. If Expression3 is not specified value is set to NULL.
IF(Expression1,Expression2,Expression3) If Expression1 (can be logic expression like (A+B)>C or A=B or A!B 'not equal') not 0 then result is Expression2, otherwise it is Expression3.
POW(Expression1,Expression2) Result is value of Expression1 in power of Expression2
MERGE(Expression1,Expression2) If Expression2 is valid at a point, then result is that value, otherwise it is value of Expression1
SET_NULL(Expression1,Expression2) If Expression1 is valid at a point, then result is that value, otherwise it is value of Expression2
CHANGE_RANGE_VALUE(Expression1, Range1, Range2, Expression2) If Expression1 is a valid point and its value is greater than equal to Range1 and less than equal to Range2, then result is Expression2. If Expression2 is not specified value is set to NULL.
TIN_INTERSECT(Expression1,Expression2) Expects both Expression 1 and Expression 2 to be TIN's. This will add vertices to Expression 1 where Expression 2 has vertices. In this way, one TIN can be made to have vertices at the same XY locations as another TIN. Note that this function does not need to be preceded by "Variable=".

Here is an example of a complex IF statement used for coal recovery based on thickness of the seam:

COALTHK=LoadFrom(C:\Carlson Projects\Grids\C40_THK.GRD);
ROM_COAL=COALTHK
ROM_COAL=if((COALTHK<2)|(COALTHK=2),COALTHK - (COALTHK * 0.50),ROM_COAL)
ROM_COAL=if(((COALTHK<4)|(COALTHK=4))&(COALTHK>2),COALTHK - (COALTHK * 0.10),ROM_COAL)
ROM_COAL=if((COALTHK<7)&(COALTHK>4),COALTHK - (COALTHK * 0.075),COALTHK - (COALTHK * 0.05))
SaveAs(ROM_COAL, C:\Carlson Projects\Grids\C40_ROM_THK.GRD)

Pulldown Menu Location: Surface and Grids
Keyboard Command: GFU
Prerequisite: Make a grid (.GRD) file with the Make 3D Grid File command.

Converted from CHM to HTML with chm2web Standard 2.85 (unicode)