Copyright 2004 by Salvatore Caronna of gINT Software. All rights reserved worldwide.
gINT Update README.TXT file
gINT 5 README.TXT
NOTES:
1. Some of the documentation below is in tabular form and requires that you view this document in a fixed font, e.g., Courier New. If in Windows Write, place the cursor at the beginning of the document, hold down the Ctrl and Shift keys and then press the End key. This will highlight the entire document. Or use the Edit menu, Select All. Then use the Character:Font menu item to select a font.
====================
5.1.076 08Nov2004
====================
1. Changes made in 6.1.030 of gINT to support Chinese Windows made version 6 files inaccessible to version 5. This release gives version 5 back the ability to read and write version 6 files.
====================
5.1.075 18Jul2004
====================
1. Fixed problem with output font size under certain conditions. This problem was in both 073 and 074.
====================
5.1.074 23Jun2004
====================
1. Fixed script execution from the command line (or by selecting a .gsc file from Windows Explorer.)
The program was losing the Project: specification and showing an error log message "Please specify a project file."
====================
5.1.073 25May2004
====================
1. Maintainence release not posted to the Web site.
====================
5.1.072 04Feb2004
====================
1. A client convinced us that we had a slight error in our hydrometer calculations when dealing with 151H-type hydrometers. That "fix" was placed in 5.1.071. Further study has shown that our original code was correct and that the "fix" introduced a slight error in the results. We have changed this code back the way it was. This is the only change in this build.
====================
5.1.071 01Feb2004
====================
1. Mainly a maintenance update.
2. In the graph report page properties dialog under the Independent and Dependent data tabs are the properties:
Axis Offset: Minimum Side
Axis Offset: Maximum Side
This will effectively remove the specified dimensions (inches or millimeters, depending on the units of the report page) from the data frame. Use these properties if you wish to offset your plots some distance from the frame edges.
====================
5.1.070 14Jul2003
====================
1. Maintenance release. The following items were fixed:
A. Recent changes to better handle text in site maps could cause an overflow error in site maps.
B. The Variable Legend menu item under the Log and Fence menus in Reports was inadvertently turned off in 068.
C. Import with correspondence didn't work properly if specific boreholes were specified for import.
====================
5.1.069 25Jun2003
====================
1. Maintenance release. 068 had a bug that prevented import from Excel files.
2. The Library data application can be used to store expressions for execution during output. The program will run basic syntax checks (balanced parentheses and token delimiters) in all memo fields in this application where there is an least one matching pair of token delimiters (<<...>>).
====================
5.1.068 20Jun2003
====================
1. In Input, you can now specify a Microsoft ACCESS file as the database template for the File:Import/Export:Export to Database command. This is the optional "Template to create database" property. The program uses this file (can also be a gINT data template, GDT, or project, GPJ) as the basis of the new file to be created in the export.
2. The Override Height and Override Width properties of Discrete Graphics vs Depth entities can now accept expressions. These can be Project, Point, or Depth related, that is, the size of the discrete graphic can vary with depth, if so desired.
3. In the Coordinates dialog that is launched from the polyline properties dialog, you can import coordinates from a CSV file. The file format must be:
X1,Y1
X2,Y2
X3,Y3
etc.
for example:
0.32,0.28
0.37,0.38
0.40,0.39
0.42,0.36
0.44,0.39
====================
5.1.067 03Apr2003
====================
1. Maintenance release. Mainly:
A. Some clients have reported the error "PointID cannot contain a null value" error message on saving in some tables in Input when the PointID was specified in the PointID list at the top of the screen. This was a non-reproducible error which did not occur all the time. We believe we have fixed it (we could not reproduce it ourselves). If anyone is still experiencing this problem. Please contact us.
B. The Cancel Changes command in the Symbols:Bitmap Symbols and :Bitmap Fills applications was not working properly under certain conditions. It now does so you can make modifications and then cancel them to put a symbol back to what it was at the last save.
C. Returning from preview in Input sometimes returned control to the incorrect Input tab.
====================
5.1.066 16Mar2003
====================
1. Maintenance release. Mainly:
A. Huge (>~100MB) exported DXF files crashed the program. Now there is no practical limit on DXF file size.
B. Projects with tables that were children of POINT that had more than 30 child tables broke relationships within the database. Can now have upto 60 children of any table.
C. Under certain conditions, it was possible for continuation text on log output to print twice on the continuation page.
D. Could not removed site map support from a project if the site map had no entities.
2. The main Combo may now be accessed via Keystrokes. Alt+Shift+{Down arrow} drops the list and places focus there. The list may then be navigated using Up and Down Arrows.
Works in any app where the main combo is visible.
The command appears on the Navigation main menu as "Drop List Alt+Shift+Down"
====================
5.1.065 02Mar2003
====================
1. Maintenance release. Mainly:
A. Fixed a problem with some aggregate functions printing on fence posts when some of the specified pointids were removed due to one of the filtering methods.
B. Check boxes in some dialogs were not registering mark/unmark when clicked in a certain manner.
C. Clicking the "Page" button in the print dialog caused a program crash under certain conditions.
====================
5.1.064 24Feb2003
====================
1. Maintenance release. Mainly fixed the inability to enter lab testing records without first entering the depths in the LAB SPECIMEN table.
2. The Symbols:Bitmap Fills/Symbols applications never had the facility to cancel changes, that is, all changes were immediately stored to the library. These applications now work like all other applications in the program. No changes are saved to the library until a save is invoked and changes can be cancelled via the Cancel Changes button at the upper right of the screen.
====================
5.1.063 16Feb2003
====================
1. Hovering over column headers in grid input screens display tool tips appropriate to the current screen. For example: "Click to sort grid. Drag to relocate."
2. The Modify:Build Associated Text command in gIDraw applications that support text, allows you to build the new entity with or without the line component. It prompts you to select the main text, associated text, and line. If you click the Ok button when the command prompts for the line component, no line will be included in the final entity.
====================
5.1.062 29Jan2003
====================
1. In the graph report page properties dialog, under the "Data Representation" tab, we have added the additional color choice "None" in the "Line Color List" property. Setting a color to "None" suppresses that data set line.
2. In our AGS documentation (a separate document sent to clients using the UK AGS data interchange format) we have said that any field with a library table lookup that have the data field "Description" will have the descriptions of the data items automatically inserted into the ABBR group. There is one exception to this rule. The "Field Units" library table (built into the program) has a "Description" field but the descriptions of the data in fields with this look go instead to the UNIT group. Currently the only field with a "Field Units" lookup is CNMT_UNIT.
3. We have moved the DMK!, OS!, and TAB! facilities in the data tool from Data Items to Formatting codes. This arrangement is consistent with the location of these facilities in Input (under the Format menu) and they are truly not data items. Data items retrieve information that is known by the program about either the system or a report. These three items are special formatting for text output.
4. When data are exported to a text file in Input you have the choice to retain gINT formatting codes. The default is to remove them. For the majority of formatting codes, <<B>>, <<I>>, <<TAB!xx>>, etc., the concept is straightforward. They are either put into the final file or not. There are, however, two special cases:
A. Format:Insert Symbol generates <<DMK!xx,yyy>>: This inserts the data marker named "xx" and on text export "yyy" will be substituted in place of the data marker. If the formatting codes are retained, the original code as it appears in Input will be exported. If not, the substituted text ("yyy" in this case) is exported. If replacement text is not specified, for example, <<DMK!xx>>, the program will export "?xx?", that is a question mark, the data marker name, and another question mark.
B. Format:Overstrike Characters <<OS!0,/;dia>>: This overstrikes the characters "0" and "/" and on text export "dia" will be substituted in place of the overstrike characters. If the formatting codes are retained, the original code as it appears in Input will be exported. If not, the substituted text ("dia" in this case) is exported. If replacement text is not specified, for example, <<OS!0,/>>, the program will export "0/", that is, the overstrike characters with no internal commas.
The above behavior also applies to export in Text Table output. For Text Document export, formatting codes are always removed and the removal behavior described above applies.
5. When importing a raster image into gINT, the program shows files of all supported formats. You can limit the displayed list by selecting a specific type in the "Files of type" list.
6. Additional notes on the TotalPage system data item in logs:
With multiple log pages on a sheet, TotalPage returns the physical page number of the current page. For example, let's say you have three logs on a sheet horizontally with eight logs to output:
Logs TotalPage
1, 2, 3 1
4, 5, 6 2
7, 8 3
7. For those using our standard AGS v. 3 report forms, there is an expression that is incorrect. In the AGS3 UK BH form, bring up the properties of the depth text entity under the "Depth" (first) column and change the "Text Expression" property from:
...
<<Format(<<SAMP.Depth>>,0.00)>>,_
...
to:
...
<<Format(<<Depth>>,0.00)>>,_
...
That is, just remove "SAMP." from the field reference. Leave other occurrences of "SAMP." as-is.
This oversight only affected output of SPT results where there was not a corresponding sample defined.
====================
5.1.061 16Dec2002
====================
1. A code enhancement made in 060 caused memo fields to be truncated to 255 characters under certain conditions. This has been fixed.
====================
5.1.060 10Dec2002
====================
1. The support for the <<TAB!xx>> formatting code, introduced in version 5.1.040 (11Mar2002), was not complete. Text wrapping and forced indents (<<N>>) did not account for them. This is now resolved and wrapping and indentations will act properly with embedded tabs.
2. In Utilities:Convert Projects, when converting XBase projects (dBase, Paradox, FoxPro), the program creates a gINT project database and stores the new file in your default projects folder (specified in File:System Properties) with the name of the original XBase folder. The name and location of the new gINT file is giving in the message log:
gINT Project Conversion Log 12/04/2002 12:18:39 PM
Data template: c:\program files\gint\datatmpl\mydt.gdt
Correspondence File: c:\program files\gint\datatmpl\mycf.gci
Conversions:
c:\some program\my xbase project\ Ok: c:\program files\gint\projects\my xbase project.gpj <<===
3. For clarity, the "Apply to Text fields" label under the General tab in the File:System Properties dialog was changed to "Apply Memo Edit box width to Text fields".
====================
5.1.059 26Nov2002
====================
1. A bug introduced in 5.1.057 prevents assigning data templates to reports under certain conditions. This update fixes that problem.
====================
5.1.058 25Nov2002
====================
1. A maintenance release. Mainly:
A. Fixes an "Automation Error" that occurred on in Input with copy project, consolidate project structure, and on returning to input when preview was invoked from the PROJECT table.
B. The Find command in Input could go into an infinite loop and crash the program under certain conditions.
C. If the Page properties were brought up in the print dialog of certain grid dialogs, a crash could occur after attempting to close the original dialog.
2. You are running gINT using an external program that specifies various output specifications to gINT via a script. The final output is to be directed to an Acrobat PDF file. Since the printer cannot currently be specified in the script, you need to set the printer to the Acrobat driver for the report in the appropriate Report application via File:Print:Printer Setup.
This will work but the Acrobat driver will pop up a dialog asking for the name of the file to create. If you want the calling program to specify this parameter, anywhere under the "**Spec" section of the script insert the line:
RedirectToFile=<file drive and path>\<file name with no extension>
For example:
**Operation
OUTPUT
**Command
PRINT
**Properties
Type=Log
Name=MY LOG FORM
**Spec
Project=c:\program files\gint\projects\my project.gpj
Range=B-1
RedirectToFile=c:\my output folder\my file name
The RedirectToFile parameter pokes the specified path and file name into the "Redirect Output to File" text box in the print dialog. Two files will be created, a file with the specified name (which will be 0 bytes in size) and an Acrobat file with the specified name and a ".PDF" extension. If the files exist, they will be overwritten.
====================
5.1.057 19Nov2002
====================
1. gINT License Levels:
A. The logWRITER+ version of gINT showed all the same interface as the full gINT program but clicking on, for example, the Fences tab in Output or Reports informed the user that full gINT was required for this application. We have now hidden all functionality that is not within the license level. This affects logWRITER+ and the new gINT Logs product levels.
B. The Help:License Level menu item allows you to switch between the three gINT product levels: gINT, logWRITER+, and gINT Logs. If you are moving down, for example, you are licensed for gINT and switch to gINT Logs, you will have full functionality of the capabilities that are shown. If you move up, for example, you are licensed for logWRITER+ and switch to gINT, you will be placed in demonstration mode, that is, no changes will be saved, all printing will have the banner "gINT Demonstration" printed across it, and you will not be able to import or export.
If you leave the program before switching back to your actual licensed level, on return your licensed level will be restored.
2. On some systems, with reports that make heavy use of library table lookups, output speed could be quite slow. We have found a way to significantly speed up output on those systems.
3. Double clicking on entities brings up their properties in gIDraw applications. This is generally a nice feature except when you are in the middle of selecting many entities and then, in your enthusiasm, you click a little too fast. The program then clears your selections and brings up the properties of the entity. We have changed the code so that this will not happen. If there are more than one entity marked, the program ignores the double click.
4. In Input, the command File:Import/Export:Export to Database has the ability to create a new, empty database file to receive the data. You must specify a database that has the structure you need, by filling in the "Template to create database" field in the dialog. gINT will copy that file to a new file with the name and path specified in the "Database" field. The copy is an empty database, no data is inserted. Then the export proceeds into the empty copy.
If the file supplied in the "Database" field exists, you will be asked if you wish to overwrite or append to the file. If you select the overwrite option, the supplied data template will be used to overwrite the existing file. If append is selected, the data template is ignored and the export proceeds as it would when a data template is not supplied.
5. Correspondence file field expressions can refer to more than one sequential Source field, for example, with field names such as:
FIELD_ONE1, FIELD_ONE2, ..., FIELD_ONEn
FIELD_TWO1, FIELD_TWO2, ..., FIELD_TWOn
you could write a source expression like:
<<expression(<<FIELD_ONE<<#>>>>...<<FIELD_TWO<<#>>>>...)>>
However, only one reference to each field may appear in an expression. If the expression requires more than one appearance of any such field, it must be written using <<Let(MyVariable = <<FIELD<<#>>>> for each field so referenced, then <<Get(MyVariable)>> is used in the calculation expression to represent the field.
6. The Design Mode Text Display property of text-like entities previously was not shown when printing or previewing or when displaying entities from an internal or drawing library block. This property is now shown everywhere while in design applications.
7. The Mark/Unmark Points command in the Site Layout view in Output:Fences, has been moved from the Fence Spec to the Assist menu.
8. Printing in page list dialogs previously printed with the current printing settings. Now the standard printer dialog appears and you can change the printer settings as in other printing facilities in the program.
9. Clarification of the Interpolate function:
The documentation has always stated that the data must be monotonically increasing or decreasing to succeed. This is not completely accurate. Let's look at the following data from a table call MYTABLE:
Data1 Data2
0 0
1 2
2 3.5
3 5
4 6
5 5
6 3.5
7 2
8 0
Data1 is monotonically increasing. Data2 rises, peaks, and then decreases. If you wanted to find the value of Data2 where Data1 = 2.5:
<<Interpolate(<<MYTABLE.Data2>>,<<MYTABLE.Data1>> = 2.5,a,a)>>
where the trailing ",a,a" indicates that the data field (Data2) and the reference value field (Data1) are both arithmetic. This section is optional since arithmetic is the default.
This will work even though Data2 is not monotonic.
Now let's say you wanted to find the value of Data1 where Data2 = 2.5:
<<Interpolate(<<MYTABLE.Data1>>,<<MYTABLE.Data2>> = 2.5,a,a)>>
This will not work. The function has no way of knowing data relationships and it always sorts by the reference value field (Data2 in this case) before doing the interpolation. Therefore, the data set that it will search will look like:
Data1 Data2
0 0
8 0
1 2
7 2
2 3.5
6 3.5
3 5
5 5
4 6
So it will return the Data1 value of 5.3333 for the Data2 value of 2.5. For this to work, you must tell the function to sort on the data field, not the reference value field:
<<Interpolate(<<MYTABLE.Data1>>,<<MYTABLE.Data2>> = 2.5,aS,a)>>
The "S" in the data field position (upper or lower case) tells the function to sort on Data1. In this case there are two possible values of Data1 where Data2 = 2.5: 1.3333 and 6.67777. The interpolation will return the first found, 1.3333.
Until now all the above documentation applied to the Interpolate function except for the new "S" (sort) attribute.
====================
5.1.056 23Aug2002
====================
1. We have changed our Help file from the previous standard Windows Help format to HTML Help format. You can still use the previous help file. The program first searches for the HTML version (GINT.CHM) and then the previous version (GINT.HLP). The new help file can be downloaded from the Latest Updates page of our Web site. If gINT was shipped to you on or after this date, you already have it.
The HTML format has numerous advantages:
A. This interface is more common today than the Win Help interface.
B. Easier navigation.
C. You can easily print either a topic or all topics in a book. With Win Help could only print one topic at a time.
D. The Help menu now has items for jumping directly to Contents (F1), Index (Alt+F1), and Search (Ctrl+F1). Win Help could only jump to Contents. If you are not using the HTML file, Find and Search will both go to Contents.
Your comments on the new format would be appreciated.
2. For clients that are making heavy use of the Iterate function with embedded Library Table lookups, we have optimized the code so that if you library is on the network, output speed will be accelerated dramatically. The amount of library table use, the data, and the network connection speeds all affect the amount of enhancement but various tests have show an output speed up of a factor of 3, for example, if it was taking a minute to print a log before, it can take around 20 seconds now. You don't have to do anything to realize this improvement.
====================
5.1.055 14Aug2002
====================
1. Maintenance update. Mainly fixes a problem we put in in 054 where the full screen cursor was captured on some systems. To temporarily get around the problem, we had a number of users mark the "Use small drawing cursor" property under the "General" tab in File:System Properties dialog. For those clients, you can now uncheck this property if you wish. Also, merging specific boreholes from another database failed the merge. This has been fixed.
2. We have optimized the code that places site maps. For small to moderate size maps you will probably not notice any difference but for large maps that are clipped to fit inside of the output region, you will notice a huge speed increase in output time.
3. Addendum to Help Topic: How to Guide - General - Breaking Up the Lithology Description into Separate Components
Using the Library Table method of specifying components (Variation #3), the following expressions is what is recommended:
<<Let(Desc = _
<<Iterate(Print Order,_
1,_
<<Max(<<COMPONENT LITHOLOGY.Print Order>>)>>,_
1,_
<<Lookup(<<COMPONENT LITHOLOGY.Separator>>,<<Get(Print Order)>>)>> ,_
<<Lookup(<<COMPONENT LITHOLOGY.Data Expression>>,<<Get(Print Order)>>)>>_
)>>_
)>>_
<<DelimitData(_
,_
<<UCase(<<Mid(<<Get(Desc)>>,1,1)>>)>>_
<<Mid(<<Get(Desc)>>,2)>>,_
._
)>>
The separator expression is:
<<Lookup(<<COMPONENT LITHOLOGY.Separator>>,<<Get(Print Order)>>)>> ,_
that is, add a space to the right of whatever separator is specified in the Separator field. In this way if nothing is specified for the separator, a space is used. Further, a space is always placed right of whatever separator is specified. This method works perfectly except for the case of a carriage return separator (<<cr>>). In this case, the above expression yields results such as the following:
ALLUVIAL DEPOSIT
SANDY SILT .....
Note the second line is indented one space. The way around this is make the separator expression check for a carriage return and suppress the trailing space if it is. We have modified the code so that this is not necessary. The program now automatically suppresses the trailing space if the separator is a carriage return. This works for both the Iterate and IterateLibPreprocess functions.
4. The "Offsets are distances from entity coordinates" property check box under the Border tab in text and text with depth entities says to treat the border Offsets as distances from the text entity coordinates. Without this property marked, the offsets are distances from the extents of the entity. Therefore, marking this property gives you a fix width and height for the border, regardless of the extent of the text, unmarked you have a border that expands and contracts with the entity extents.
====================
5.1.054 04Aug2002
====================
1. Maintenance release. Mainly to fix the Insert Macro and Field Properties commands in Input which were broken in 5.1.053.
====================
5.1.053 29Jul2002
====================
1. Maintenance release. Mainly to fix improper sorting of table output under certain data conditions, problem with the Convert Projects utility, Build Data Template from Databases (Data Design:Project Database) did not append fields properly under certain conditions, and some cosmetic issues with the Input grid.
2. The Scale Multiply and Scale to Reference Distance commands have three properties for rounding scaled values:
Round Dimensions to
Round Coordinates to
Round Font Heights to
"Dimensions" include all scalable properties, including Coordinates and Font Heights. This level of distinction between different scaled values is generally not needed. If you want all the values to be scaled to the same precision, just fill in the the "Round Dimensions to" property and leave the others blank. They will use the value in "Round Dimensions to". In other words, you only need to fill in the "Round Coordiates to" and "Round Font Heights to" if you want one or both of these values to be different than the "Round Dimensions to" value.
3. There are rare occasions in correspondence files where you need to concatenate the data from a series of fields in the source file into one memo field in the target file, each field of source data on separate line. The following expression would be used in a report to do the job:
<<ListBuildSepTrim(<<cr>>,<<field1>>,<<field2>>,...)>>
However, the <<cr>> code becomes embedded in the final text. This is not a problem in output since the gINT output engine inserts a new line for each <<cr>>. If the above is used a correspondence file, the <<cr>> codes will appear and this is probably not what you want. To actually have new paragraphs, use the <<NL>> (new line) formatting code as the separator:
<<ListBuildSepTrim(<<nl>>,<<field1>>,<<field2>>,...)>>
This code is only recognized by the ListBuildSepxxxx family of functions, DelimitData, Iterate, and IterateLibPreprocess. It appears in the data tool under Formatting Codes only in the Utilities:Correspondence Files application.
====================
5.1.052 03Jul2002
====================
1. Maintenance release. Mainly to fix a "No Current Record" error at output time under very specific conditions that was introduced in 5.1.051.
====================
5.1.051 24Jun2002
====================
1. The Modify:Build Associated Text command is found gIDraw applications that support text entities. This command allows you to append an associated text entity and polyline under the associated text entity to a main text entity. When completed, instead of three entities (two text and one polyline) there will be one text entity with the associated text and line properties under the "Associated Text" tab.
The command prompts you to pick the three entities in order of the main text entity, the associated text, and the line. The requirements of the entities are as follows:
MAIN TEXT:
Left aligned horizontally
No column width
Horizontal
ASSOCIATED TEXT:
Have the same vertical alignment as the main text
No column width
Horizontal
Right of the main text
The vertical extent must overlap the vertical extent of the main text
LINE:
Only two points
Horizontal
Completely underneath the associated text
Be within one text height of the associated text
If one of the above conditions is not met, a message will pop up detailing the problem and you can then select another entity or cancel the command.
This is a persistent command, that is, once you complete one set of entities, you can continue to another set. The command continues until:
You invoke another command
Press the Cancel button at the lower right of the screen
Press the Esc key
Right click with the mouse in the drawing area
====================
5.1.050 02Jun2002
====================
1. This is strictly a maintenance release. A bug was introduced in 5.1.049 that prevented deletion of records in the POINT table in Input. This has been fixed.
====================
5.1.049 29May2002
====================
1. On opening a library that has been secured by a gINT administrator (Utilities:Lib Merge/Copy, File:Secure Library), you were warned that it is a secured library each time it was opened. Now the program only warns you the first time you open it. The message that the library is secured still appears each time on the main menu screen but the dialog only appears once.
2. The Help:View README.TXT file menu selection brings up the gINT file that shows version revisions. This file comes with the program and with every update from the Web site.
3. Undo Last Command (gIDraw applications): Previously as soon as you invoked a command that supported undo, the previous undo buffer was cleared, even if you canceled the current command. For example, you erased some entities and then invoked the move entities command and then realized that you actually didn't want to erase the entities. It's was too late at this point. The buffer storing the erased entities was cleared as soon as you invoked the move command in preparation for storing the changes for the new command. Now the behavior is to keep the previous undo buffer until a change as been made in the current command that would require storage into the undo buffer. Therefore, in the above example, you could execute Undo Last Command and the erased entities would be restored.
4. In fence reports, the FenceOffset system field (under the Items list in the datatool when System is set to "Data Items") returns the offset of each borehole from the fence baseline. This is the distance from the borehole perpendicular to the baseline. The FenceOffsetEast system field returns the distance of the borehole east of the intersection of the baseline to the line running through the borehole and perpendicular to the baseline. FenceOffsetNorth returns the offset north of this same intersection. For example, you have a baseline that runs east-west at a north coordinate of 200:
BH East BH North FenceOffsetEast FenceOffsetNorth
100 300 0 100
200 100 0 -100
The second borehole is 100 units below (south) of the baseline and therefore returns a negative north offset.
A baseline that runs south-north at an east coordinate of 150:
BH East BH North FenceOffsetEast FenceOffsetNorth
100 300 -50 0
200 100 50 0
The first borehole is left (west) of the baseline and therefore returns a negative value.
Baselines and baseline segments at skewed angles (not horizontal or vertical) will return non-zero values for both east and north offsets.
5. The gINT spell check capability uses a main dictionary which is shipped with the program and cannot be modified, and a personal dictionary of your choice (usually personal.dic) which can be edited. We ship the file AMERICAN.GDC for use as the main dictionary which covers american english words quite well. Some clients would prefer not having a main dictionary, only a personal dictionary. For example, you mistype "brown" as "brow". The spell check will not flag this since "brow" is a legitimate word but not one that you would probably not use in working with gINT. Since you cannot edit the main dictionary (we can't either; it is encrypted by the company that publishes the spell check code) it would be nice to not have a main dictionary. However, the spell check software does not allow this. Instead, you can change the main dictionary from AMERICAN.GDC to BLANK.GDC. This dictionary only has one word in it ("gINT" of course!). To change this setting: Anywhere in Input, press Shift+F7 (or select the Edit:Spell Check:Spell Check Options menu item), click the browse button [...] right of the Main Dictionary Location field and select BLANK.GDC. It will be located in your main gINT program folder.
====================
5.1.048 20May2002
====================
1. RoundTo function:
<<RoundTo(<value>,#[,+ or -])>>
Returns the value rounded to the nearest #. The option + or - parameter will force a rounding up or down, respectively. For example:
<<RoundTo(57.2,5)>> returns 55
<<RoundTo(57.2,5,+)>> returns 60
<<RoundTo(57.2,5,-)>> returns 55
<<RoundTo(138,20)>> returns 140
<<RoundTo(138,20,+)>> returns 140
<<RoundTo(138,20,-)>> returns 120
<<RoundTo(-11.3,0.5)>> returns -11
<<RoundTo(-11.3,0.5,+)>> returns -11
<<RoundTo(-11.3,0.5,-)>> returns -11.5
Where the round to value is an order of 10 less than 10, e.g., 1, 0.1, 0.01, RoundTo acts like Format:
<<RoundTo(55.33,0.1)>> = <<Format(55.33,0.0)>>
<<RoundTo(55.33,1)>> = <<Format(55.33,0)>>
However, the returned result will not have any trailing 0s or decimal point, for example:
<<RoundTo(55.0,0.1)>> returns 55
whereas:
<<Format(55.0,0.0)>> returns 55.0
and:
<<Format(55.0,0.#)>> returns 55.
If either the expression or # are not numbers, then RoundTo returns the original expression unchanged. Further, # must be a value greater than 0. If not, the original value is returned unchanged. If the optional parameter is not "+" or "-", it is ignored and the value is rounded to the nearest #.
2. If you used an Sql function to determine the count of the number of records in the entire project where a text field had data, you might write something like:
<<Sql(Select Count([TABLE].[Field])
From [TABLE]
)>>
This will return the count of all the fields, whether they have data or not. gINT stores empty text and memo fields in the database as zero length strings. This is considered "data" by ACCESS. To obtain the proper result, you would need to write the expression as:
<<Sql(Select Count([TABLE].[Field])
From [TABLE]
Where (Len([TABLE].[Field]) > 0)
)>>
You only have to be concerned with this if you are writing an Sql with text or memo fields. With the gINT <<Count(..)>> function, we handle this for you.
3. Text columns properties of Text entities (under the Wrap tab)
A. Suppresses blank lines at the top of columns.
B. The program was allowing leaving the "Gap between columns" blank indicating a gap of 0 but was not allowing entry of a 0 gap explicitly. This has been fixed. 0 is now an acceptable value.
4. The system field ExitIterate terminates the Iterate function (does NOT work in the IterateLibPreprocess function). For example, you are running the Iterate function to find data that meets some criteria and only want to return that value. Without the ExitIterate, the function would be structured something like the following:
<<Iterate(Index,1,<max iteration number>,1,,_
<<Let(Data = _
<<IIf(Not <<HasData(<<Get(Data)>>)>> And _
<some criteria>,_
<expression that returns the data>_
)>>_
)>>_
)>>
With the ExitIterate:
<<Iterate(Index,1,<max iteration number>,1,,_
<<IIf(<some criteria>,_
<expression that returns the data>_
<<ExitIterate>>_
)>>_
)>>
This is easier to write and understand and is faster in that it stops processing when the desired value is obtained.
5. gINT supports many soil classification methods and all the classification functions require expressions for extracting the gradation and Atterberg Limits data. Generically the function syntax is:
<<Class_Func(<<Table.Size (mm) Field>>,_
<<Table.% Passing Field>>,_
<<Table.PL>>,_
<<Table.LL>>,_
<<other parameters; depending on function>>_
)>>
The gradation size and percent passing parameters can only be field references (usually <<SV READINGS.Reading>> and <<SV READINGS.Percent_Finer>>) or Union functions (if used, usually <<Union(<<SV READINGS.Reading>>,<<HYD READINGS.Particle_Size>>)>> and <<Union(<<SV READINGS.Percent_Finer>>,<<HYD READINGS.Percent_Finer>>)>>).
The remaining parameters are usually <<TABLE.Field>> but can be expressions. When the classification function is in a repeating text entity on a graph, the syntax is:
<<Class_Func(<<Table.Size (mm) Field>><<#>>,_
<<Table.% Passing Field>>,_
<<Table.PL>>,_
<<Table.LL>>,_
<<other parameters; depending on function>>_
)>>
Note the "<<#>>" after the size parameter. The repeating text entity converts this to 1, 2, etc. This tells the program to use the data for the first, second, etc. records associated with the current graph. When using just <<TABLE.Field>> for the parameters after the size and % passing fields, there is nothing more you need to do. If you have expressions in these positions, you must tell the function to use the appropriate data for the fields. For example:
<<Let(PC Fines = _
<<Lookup(<<Union(<<SV READINGS.Percent_Finer>>,_
<<HYD READINGS.Percent_Finer>>_
)>><<#>>,_
<<Union(<<SV READINGS.Reading>>,_
<<HYD READINGS.Particle_Size>>_
)>> = 0.075_
)>>_
)>>_
<<Let(Dft Limit = _
<<IIf(<<Get(PC Fines)>> < 15,0)>>_
)>>_
<<ASTM_Symbol(<<SV READINGS.Reading>><<#>>,_
<<SV READINGS.Percent_Finer>>,_
<<FirstData(_
<<Lookup(<<ATTERBERG.Plastic_Limit>>,<<DataSetKey(<<#>>)>>)>>,_
<<Get(Dft Limit)>>_
)>>,_
<<FirstData(_
<<Lookup(<<ATTERBERG.Liquid_Limit>>,<<DataSetKey(<<#>>)>>)>>,_
<<Get(Dft Limit)>>_
)>>,_
<<ATTERBERG.Organic>>_
)>>
For each iteration, this expression first obtains the percent fines for the associated test and sets a default Atterberg Limit value of 0 if the fines are less than 15%. In the classification function, the Limits are looked up for the current test (DataSetKey...). If they have data, they are used, otherwise the default limit is used.
Remember that the <<Lookup(<<TABLE.Field>>,<<DataSetKey(<<#>>)>>)>> syntax is only needed if you are using an expression for the parameter for a specific record on the graph. If you are using just <<TABLE.Field>> or there are not multiple records, there is no need.
6. Many operations in gINT end with a message log detailing the results of the operation. For example, Import/Export in Input, field references, field replace. There is a Save As button at the lower right of the message dialog that allows you to save these results to whatever file you wish. Note that many of these operations already generate a file and this capability allows you to save to another location.
====================
5.1.047 07May2002
====================
1. The <<LogFooterHt>> system data item returns the height of the footer on the current log page. This is useful if you have two or more log reports that have common footer entities but are at different footer positions because of different footer heights. This can also be used when the footer height varies between page 1 and page 2 and subsequent pages.
The way this would be used is to set up your entities as if the footer is 0 and then supply the Output Override Y property of:
@<<LogFooterHt>>
Will will raise the entity the amount of the footer height.
2. You have one log form for soil drilling and one for rock. On the rock log you specify some expression in the report page properties Top Depth Expression property (under the Report Structure tab). This would put the depth at the start of the rock log at the top of the log body. You don't like this and you mark the Maintain Scale Position checkbox under the Top Depth Expression property. This maintains the scale that would have printed if you did not have a Top Depth Expression. For example, if the rock form starts at 10 depth units and your pages have 20 depth units on a page, the log would start with 0 at the top of the page and the data would start printing at 10. If the rock data started at 22, the first page would start at a depth of 20.
With the Top Depth Expression set, no data above that value will print. If you wanted certain data to print above the value returned by the Top Depth Expression, mark the "Use Pg Top Depth w/ Maintain Scale" property checkbox in the appropriate log body entity. This will print data between the top of the first page of rock form to print.
3. In the Site Layout view in the Output:Fence application, the baseline is drawn in red to help separate it from any background site map line entities.
====================
5.1.046 28Apr2002
====================
1. This is mainly a maintenace release. Changes in 045 caused: Screen redrawing in gIDraw applications to fail under certain configurations; Convert Projects to go into a loop that converted each project 9 times; Text Macros pasted into the wrong position in the text box.
2. The Field References facility in the Input, Data Design:Project Database, :Library Tables, and :Library Data applications search for two versions of the TABLE.Field, the gINT syntax, <<TABLE.Field>>, and the SQL syntax, [TABLE].[Field]. You can use the syntax TABLE.Field in SQL statements if there are no characters within the table or field that requires the square brackets, but the references facility will not find those instances. Remember that right mouse click on the field Paste button in the data tool inserts the [TABLE].[Field] syntax so it is actually less work to use this syntax in SQL statements than to type TABLE.Field manually.
====================
5.1.045 23Apr2002
====================
1. In the Graph page report properties dialog under Data Representation tab, if the Graph Data Sets property is set to All Data Items. The Sets per Page property is ignored and all data are printed on one page. If you supply a value for Sets per Graph when the Graph Data Sets property is set to All Data Items, you will receive a warning that the Sets per Page property will be ignored.
2. Further notes on IterateLibPreprocess:
Within an IterateLibPreprocess function you can't have functions that are to be evaluated on each iteration. For example:
<<Let(Abbr Sep = "=")>>_
<<IterateLibPreprocess(Position,1,<<Max(<<TEST RESULTS.Position>>)>>,,<<CR>>,_
<<Let(Abbr = <<Lookup(<<TEST RESULTS.Data_Abbr>>,<<Get(Position)>>)>>)>>_
<<Let(Data = <<Lookup(<<TEST RESULTS.Data>>,<<Get(Position)>>)>>)>>_
<<IIf(<<FieldIsBoolean(<<Lookup(<<TEST RESULTS.Data>>,<<Get(Position)>>)>>)>>,_
<<IIf(<<Get(Data)>>,<<Get(Abbr)>>)>>,_
<<Replace(_
<<DelimitData(_
<<DelimitData(,<<Get(Abbr)>>,<<Get(Abbr Sep)>>)>>,_
<<Get(Data)>>,_
<<Lookup(<<TEST RESULTS.Units>>,<<Get(Position)>>)>>_
)>>,_
False,_
False,_
=<<g>>>,_
><<g>>_
)>>_
)>>_
)>>
This will output but will be incorrect so the Iterate function must be used.
What the IterateLibPreprocess does is execute all functions but only the current level of the function, that is, it does not drill down inside any expressions or TABLE.Field references that are returned by the top level functions. So with the following:
<<IterateLibPreprocess(Print Order,_
1,_
<<Max(<<COMBINED COMPONENT LITHOLOGY.Print Order>>)>>,_
,_
<<Lookup(<<COMBINED COMPONENT LITHOLOGY.Separator>>,<<Get(Print Order)>>)>> ,_
<<Lookup(<<COMBINED COMPONENT LITHOLOGY.Data Expression>>,<<Get(Print Order)>>)>>_
)>>
The Max and the two Lookups are executed. The Max returns a number and is only executed once in any case, the first Lookup returns the separators, and the last Lookup returns expressions and TABLE.Field references which are not executed in the preprocessing step. With the more complex expression above that will fail, the Lets, Gets, IIf, FieldIsBoolean, and Replace functions would be executed in the preprocessing which is inappropriate. They need to be executed for each record of data during output.
3. The Left and Right functions allow you to extract parts of a text string. For example, let's save a field called Data in a table called TEST contains the value "Abc Defghi Jkl", then:
<<Left(<<TEST.Data>>,5)>> would return: Abc D
<<Right(<<TEST.Data>>,5)>> would return: i Jkl
These functions are special cases of the more general Mid function:
<<Left(<<TEST.Data>>,5)>> is the same as <<Mid(<<TEST.Data>>,1,5)>>
<<Right(<<TEST.Data>>,5)>> is the same as <<Mid(<<TEST.Data>>,<<Calc(<<Len(<<TEST.Data>>)>> - 4)>>)>>
4. Many of our clients have discovered the power of the Sql and related functions in gINT. Documenting Structured Query Language is beyond the realm of our documentation and our technical support. It is a massive subject and many books have been written on the subject. However, we have provided some examples in the gINT Help file and most user's needs require simple SQL expressions. So, although we cannot commit to providing technical support for SQL expressions, our clients have found it quite useful to look at examples. In this vein, following are more examples. These are meant to be run in the File:Queries facility in the Input application. They can be modified to run within an expression in a report.
A. SUM OF THE THICKNESS OF SOME LAYER FOR ALL BOREHOLES IN A PROJECT
A.1. Typical database structure:
Parameters [Desired Graphic] Text;
Select Sum([Bottom] - [Depth]) As Thickness
From [LITHOLOGY]
Where [Graphic] = [Desired Graphic]
A.2. AGS database structure:
Parameters [Desired Graphic] Text;
Select Sum([GEOL_BASE] - [Depth]) As Thickness
From [GEOL]
Where [GEOL_LEG] = [Desired Graphic]
B. THICKNESS OF SOME LAYER LISTED BY BOREHOLE:
B.1. Typical database structure:
Parameters [Desired Graphic] Text;
Select Distinct [POINT].[PointID],
(Select Sum([LITHOLOGY].[Bottom] - [LITHOLOGY].[Depth])
From [LITHOLOGY]
Where ([LITHOLOGY].[Graphic] = [Desired Graphic])
And ([POINT].[PointID] = [LITHOLOGY].[PointID])
) As Thickness
From [POINT] Inner Join [LITHOLOGY] ON [POINT].[PointID] = [LITHOLOGY].[PointID]
B.2. AGS database structure:
Parameters [Desired Graphic] Text;
Select Distinct [POINT].[PointID],
(Select Sum([GEOL].[GEOL_BASE] - [GEOL].[Depth])
From [GEOL]
Where ([GEOL].[GEOL_LEG] = [Desired Graphic])
And ([POINT].[PointID] = [GEOL].[PointID])
) As Thickness
From [POINT] Inner Join [GEOL] ON [POINT].[PointID] = [GEOL].[PointID]
C. SUM OF THE THICKNESS OF SOME LAYER BELOW FOUNDATION LEVEL FOR ALL BOREHOLES IN A PROJECT:
C.1. Typical database structure:
Parameters [Desired Graphic] Text,[Foundation Elev] IEEEDouble;
Select Sum([LITHOLOGY].[Bottom] - [LITHOLOGY].[Depth] -
IIf(([POINT].[Elevation] - [LITHOLOGY].[Depth] - [Foundation Elev]) > 0,
([POINT].[Elevation] - [LITHOLOGY].[Depth] - [Foundation Elev]),
0
)
) As Thickness
From [POINT] Inner Join [LITHOLOGY] ON [POINT].[PointID] = [LITHOLOGY].[PointID]
Where ([LITHOLOGY].[Graphic] = [Desired Graphic])
And (([POINT].[Elevation] - [LITHOLOGY].[Bottom]) < [Foundation Elev])
And IsNumeric([POINT].[Elevation])
C.2. AGS database structure:
Parameters [Desired Graphic] Text,[Foundation Elev] IEEEDouble;
Select Sum([GEOL].[GEOL_BASE] - [GEOL].[Depth] -
IIf(([POINT].[Elevation] - [GEOL].[Depth] - [Foundation Elev]) > 0,
([POINT].[Elevation] - [GEOL].[Depth] - [Foundation Elev]),
0
)
) As Thickness
From [POINT] Inner Join [GEOL] ON [POINT].[PointID] = [GEOL].[PointID]
Where ([GEOL].[GEOL_LEG] = [Desired Graphic])
And (([POINT].[Elevation] - [GEOL].[GEOL_BASE]) < [Foundation Elev])
And IsNumeric([POINT].[Elevation])
D. THICKNESS OF SOME LAYER BELOW FOUNDATION LEVEL LISTED BY BOREHOLE:
D.1. Typical database structure:
Parameters [Desired Graphic] Text,[Foundation Elev] IEEEDouble;
Select Distinct
[POINT].[PointID],
(Select Sum([LITHOLOGY].[Bottom] - [LITHOLOGY].[Depth] -
IIf(([POINT].[Elevation] - [LITHOLOGY].[Depth] - [Foundation Elev]) > 0,
([POINT].[Elevation] - [LITHOLOGY].[Depth] - [Foundation Elev]),
0
)
)
From [LITHOLOGY]
Where ([LITHOLOGY].[Graphic] = [Desired Graphic])
And (([POINT].[Elevation] - [LITHOLOGY].[Bottom]) < [Foundation Elev])
And [POINT].[PointID] = [LITHOLOGY].[PointID]
) As Thickness
From [POINT] Inner Join [LITHOLOGY] ON [POINT].[PointID] = [LITHOLOGY].[PointID]
Where IsNumeric([POINT].[Elevation])
D.2. AGS database structure:
Parameters [Desired Graphic] Text,[Foundation Elev] IEEEDouble;
Select Distinct
[POINT].[PointID],
(Select Sum([GEOL].[GEOL_BASE] - [GEOL].[Depth] -
IIf(([POINT].[Elevation] - [GEOL].[Depth] - [Foundation Elev]) > 0,
([POINT].[Elevation] - [GEOL].[Depth] - [Foundation Elev]),
0
)
)
From [GEOL]
Where ([GEOL].[GEOL_LEG] = [Desired Graphic])
And (([POINT].[Elevation] - [GEOL].[GEOL_BASE]) < [Foundation Elev])
And [POINT].[PointID] = [GEOL].[PointID]
) As Thickness
From [POINT] Inner Join [GEOL] ON [POINT].[PointID] = [GEOL].[PointID]
Where IsNumeric([POINT].[Elevation])
5. <<ReportKeyList>>:
You have a standard graph showing Atterberg Limits (PI vs. LL) you want have multiple plots showing different groups of data. For example, you might want to group the data by soil unit. You do this by filtering at output time. In addition, you want to show the average for the liquid limit and plasticity index. The gINT <<Avg()>> function will not work. The gINT aggregate functions (Avg, Count, CountN, CountUnique, CountNUnique, Min, Max, StDev, StDevP, Sum, Var, and VarP) have built into them the knowledge of the range of the data. For this type of report, the functions do not know the range, so you have to query the database yourself using the <<Sql()>> (Structured query language) function:
<<Sql(Select Avg(CInt([Liquid_Limit]))
From [ATTERBERG]
Where [PointID] & "," & [Depth] In (<<ReportKeyList>>);_
0_
)>>
The function also formats the result to 0 decimal places.
This expression will return the average of the integer values of the Liquid_Limit field in the range of the data shown on the current graph. The <<ReportKeyList>> (found in the data tool under Items list when the System list is set to Data Items) returns the list of keys for all the data output on the report in a form that can be inserted directly between the parentheses of an SQL "In" clause. ReportKeyList returns all the keys in the output run, not the current page. ReportKeyList is only available in graphs and graph blocks. There is a comparable system data item called FencePointIDList in fence reports.
The CInt function was used above assuming that you will be presenting the data in a table on the graph also formatted to no decimal places. Without the CInt, the average would be taken on the original data (which might have decimal places) and could result in an average that doesn't match the average of the printed data.
All of gINT's aggregate functions are also supported by SQL except CountUnique, CountN, and CountNUnique. Just leave off the gINT function delimiters (<< and >>).
To return the average plasticity index:
<<Sql(Select Avg(CInt([Liquid_Limit]) - CInt([Plastic_Limit]))
From [ATTERBERG]
Where [PointID] & "," & [Depth] In (<<ReportKeyList>>);_
0_
)>>
If you are using a numeric function, like Avg, in an SQL and the field or fields are not numeric types (Integer, Long, Single, Double), you must also add a condition to the Where clause that elimiates the non-numeric data:
<<Sql(Select Avg(CInt([Liquid_Limit]))
From [ATTERBERG]
Where [PointID] & "," & [Depth] In (<<ReportKeyList>>)
And IsNumeric([Liquid_Limit]);_
0_
)>>
With non-numeric fields, the first non-numeric data encountered (including empty fields) will fail the SQL. In the case of our standard ATTERBERG table this is not necessary since the Liquid_Limit is a numeric field.
You must include all the appropriate key fields needed to identify the data between the "Where" and the "In" with each field separated by:
& "," &
Supplying the appropriate key list can get a little tricky. For example, if you wanted the average liquid limit on a graph with multiple grain size curves, the expression would be exactly the same as the above, even though you are plotting PointID,Depth,Reading data. With data from tables where there are extension of the key set beyond the standard gINT keys, these extended keys must be included. For example, following is the same expression when using the AGS database structure supplied by us:
<<Sql(Select Avg(CInt([CLSS_LL]))
From [CLSS]
Where [PointID] & "," &
[SAMP_Depth] & "," &
[SAMP_REF] & "," &
[SAMP_TYPE] & "," &
[Depth] & "," &
[SPEC_REF]
In (<<ReportKeyList>>)
And IsNumeric([CLSS_LL]);_
0_
)>>
Not only must all the appropriate key fields be included, they must in the same order as in the table. Note that in this case, the IsNumeric is required since the AGS field is a text field, not numeric.
If you are not sure of keys and/or order of the keys that will be returned by ReportKeyList, place a text entity on the report in some white space (off the page is good). For the text property just insert <<ReportKeyList>>. Preview the report at output and you will see exactly what ReportKeyList will return.
6. You can override the default horizontal alignment behavior of Associated Text in a Text entity with the "Override Horz Align" property under the Associated Text tab. If left as "Default":
Text is positioned relative to Text Alignment
====================================== ==============
Left, Right of main text, Left of line Left
Middle of line Center
Right of line Right
7. gINT supports many soil classification methods and all the classification functions require expressions for extracting the gradation and Atterberg Limits data. Generically the function syntax is:
<<Class_Func(<<Table.Size (mm) Field>>,_
<<Table.% Passing Field>>,_
<<Table.PL>>,_
<<Table.LL>>_
)>>
The gradation size and percent passing parameters can only be field references (usually <<SV READINGS.Reading>> and <<SV READINGS.Percent_Finer>>) or Union functions (if used, usually <<Union(<<SV READINGS.Reading>>,<<HYD READINGS.Particle_Size>>)>> and <<Union(<<SV READINGS.Percent_Finer>>,<<HYD READINGS.Percent_Finer>>)>>).
The plastic and liquid limit parameters can be either field references (usually <<ATTERBERG.Plastic_Limit>> and <<ATTERBERG.Liquid_Limit>>) or expressions. For example, the ASTM classification scheme requires Atterberg Limits for classification unless there are less than 5% passing the #200 sieve. We have clients that want classifications from these functions but don't want to do Atterberg Limits on obviously non-plastic material but don't want to put in values of 0 for plastic and liquid limits since that would indicate they ran the test. Following is one method of doing this:
<<ASTM_Symbol(<<SV READINGS.Reading>>,_
<<SV READINGS.Percent_Finer>>,_
<<FirstData(<<ATTERBERG.Plastic_Limit>>,0)>>,_
<<FirstData(<<ATTERBERG.Liquid_Limit>>,0)>>,_
<<ATTERBERG.Organic>>_
)>>
That is, if there are no limits, use 0. Following is a slightly more sophisticated variation:
<<Let(Dft Limit = _
<<IIf(<<Lookup(<<SV READINGS.Percent_Finer>>,0.075)>> < 15,0)>>_
)>>_
<<ASTM_Symbol(<<SV READINGS.Reading>>,_
<<SV READINGS.Percent_Finer>>,_
<<FirstData(<<ATTERBERG.Plastic_Limit>>,_
<<Get(Dft Limit)>>_
)>>,_
<<FirstData(<<ATTERBERG.Liquid_Limit>>,_
<<Get(Dft Limit)>>_
)>>,_
<<ATTERBERG.Organic>>_
)>>
that is, if the percent passing the #200 sieve is less than 15%, use 0 for the default limit if there is no limit value. If the percent passing the #200 sieve is greater than or equal to 15%, and there are no limit values, nothing will be used for limits and the function will fail, that is, nothing will be returned.
8. Clicking the References button in the Report Variables dialog in report page properties will generate a list of references to current report variable, if no rows are highlighted, or all the report variables in highlighted rows.
9. A pointer can be attached to a callout line in depth text entities. The properties are set under the Callouts tab in the property dialog:
Pointer (discrete graphic)
Override Height
Override Width
Override Horz Align
Override Vert Align
Angle when line is horizontal
Override Color
Select the pointer from the list of discrete graphics available in your library. This value must be constant, that is, a variable pointer is not supported. The pointer will be rotated appropriately if the callout line is rotated. However, you must specify the base angle of the pointer when the callout line is horizontal. For example, we ship the discrete graphic ARROW1 with all libraries. It is designed so that the arrow points to the right. If your callout line also points to the right, then the "Angle when line is horizontal" property is set to 0 or left blank. If your callout line points to the left it would set to 180. These values are for ARROW1, they could be different for another discrete graphic.
10. The Variable Legend entity is supported in log, fence, and graphic text document reports. On logs and fences it generates the graphics used by the borehole or boreholes printed on the current output. On graphic text documents it prints all the graphics used for the specified field in the entire project. On logs and fences, the Variable Legend entity has the property "Graphics from entire project". If marked, the entity will act like it does in graphic text documents and will generate a legend of all the graphics used in the project.
You would mark this property if:
A. You want a consistent legend on all logs and fences.
B. You have a log report that prints multiple logs on a page. Without marking this property, only the graphics used on the first log will be shown.
11. The Line Spacing property of Text entities (under the Wrap tab) can be variable, that is:
A. If left blank, 1.5 x Height is used.
B. Can be a literal number like 0.1.
C. Can have an expression that will vary the line spacing based on some criteria. If the expression fails or returns nothing, 1.5 x Height will be used.
12. In printing depth text output on logs near the bottom of the page, the program checks to ensure that there is at least one character height of space in which to print. If not, the text is moved to the top of the next page. The character height is set by the Height property of the entity under the Main tab of the Text with Depth entity properties dialog. If you want to leave more space at the bottom of the page, under the Wrap tab, check the "Wrap to next page if less than one line height" property. This requires that there be at least one line height of space. The line height is set by the "Line Spacing" property, also under the Wrap tab. If the "Line Spacing" property is blank, 1.5 x Height property is used.
13. The width of the Edit box for memo fields in grids is adjustable. By default it is the width of the cell being edited. In the System Properties dialog, General tab, you can set "Grid Edit box width (percent of form width or 0 for column width)" to a number between 0 and 100. You can also apply the wide box to Text fields, by chacking the next box, "Apply to Text fields". This latter option only applies to fields Type = Text that do not have lookups associated with them. If the width percentage specified is less than the width of the cell, the width of the cell will be used.
====================
5.1.044 09Apr2002
====================
1. The Interpolate/Extrapolate functions works with Date/Time fields. For example, you have a graph of settlement versus time and you want to know the time when settlement reached 0.1 feet. Let's say the table is called SETTLEMENT and it has a PointID,DateTime key set. The Value field contains the settlement value at each DateTime. The expression would be:
<<Interpolate(<<SETTLEMENT.DateTime>>,<<SETTLEMENT.Value>> = 0.1,A,A,m/d/yyyy hh:nn)>>
The ",A,A" says that both values are to be interpolated along an arithmetic scale (as opposed to a logarithmic scale). Note that DateTime values are actually stored as numbers (number of days from a certain date) so that if you don't set the optionally formatting specification at the end (",m/d/yyyy hh:nn" in this example) you will get a floating point number back. For example, March 2, 2002 at 6:00 am would be returned as 37317.25. This number is in units of days.
Let's say you wanted to know the number of days between a settlement of 0.2 and 0.1 feet:
<<DateDiff(_
d,_
<<Interpolate(<<SETTLEMENT.DateTime>>,_
<<SETTLEMENT.Value>> = 0.1_
)>>,_
<<Interpolate(<<SETTLEMENT.DateTime>>,_
<<SETTLEMENT.Value>> = 0.2_
)>>,_
0.00_
)>>
If you wanted to know the number of days from the start of testing at which 0.1 feet of settlement was achieved:
<<DateDiff(_
d,_
<<RecordItem(<<SETTLEMENT.DateTime>>,1)>>,_
<<Interpolate(<<SETTLEMENT.DateTime>>,_
<<SETTLEMENT.Value>> = 0.1_
)>>,_
0.00_
)>>
<<RecordItem(<<SETTLEMENT.DateTime>>,1)>> returns the first date/time reading in the point.
2. The function IterateLibPreprocess performs the same data manipulations as Iterate but preprocesses iterations whose actual expressions are stored in library tables. This can be an optimization for component descriptions where the component expressions are stored in library tables. For example, following is a typical component description expression executed with the Iterate function:
<<Iterate(Print Order,_
1,_
<<Max(<<COMBINED COMPONENT LITHOLOGY.Print Order>>)>>,_
,_
<<Lookup(<<COMBINED COMPONENT LITHOLOGY.Separator>>,<<Get(Print Order)>>)>> ,_
<<Lookup(<<COMBINED COMPONENT LITHOLOGY.Data Expression>>,<<Get(Print Order)>>)>>_
)>>
The actual expressions that output each of the components of the description are stored in the Data Design:Library Data application under the COMBINED COMPONENT LITHOLOGY table. At output time the Iterate function reads each of the component expressions, performs expression prepreprocessing, and then executes the expressions. The preprocessing step for each description record is what IterateLibPreprocess eliminates. It internally expands the expressions before any output occurs and performs the preprocessing once per output run, whether there is one borehole or one hundred. This can lead to significant decreases in output time. If you already have Iterate functions, to implement the IterateLibPreprocess function, just change the function names. For example, the above expression would become:
<<IterateLibPreprocess(Print Order,_
1,_
<<Max(<<COMBINED COMPONENT LITHOLOGY.Print Order>>)>>,_
,_
<<Lookup(<<COMBINED COMPONENT LITHOLOGY.Separator>>,<<Get(Print Order)>>)>> ,_
<<Lookup(<<COMBINED COMPONENT LITHOLOGY.Data Expression>>,<<Get(Print Order)>>)>>_
)>>
Two warnings on the use of this function:
A. It is only to be used when the expressions are in library tables. Any of the expressions are in the function itself, or in a User System Data item, the expression will fail (no output) or give inproper results. For example:
<<IterateLibPreprocess(Print Order,_
1,_
<<Max(<<COMBINED COMPONENT LITHOLOGY.Print Order>>)>>,_
,_
<<POINT.Component Delimiter>> ,_
<<Lookup(<<COMBINED COMPONENT LITHOLOGY.Data Expression>>,<<Get(Print Order)>>)>>_
)>>
The delimiter parameter of the function above is taken from the POINT table. This will result in an improper delimiter.
If you are not sure if IterateLibPreprocess is appropriate, try it and output a log and compare the results to the original.
B. The time savings will varying significantly depending on expression complexity and the data. We have even found rare cases where this preprocessing actually slows down the output. Therefore, experiment to see if this is a worthwhile change. It is easy to change between the two, just change the function name.
If you decide to implement this function on existing expressions, make sure you check the expressions in the library table referred to by the main Iterate function. There could be other library table iterations within those expressions. You need to change them all to obtain the full benefit of the change.
3. Another example of the data marker override expression properties in graph reports:
You have an Atterberg Limits graph with the standard PI vs. LL plot. For non-plastic soils you input LL = 0 and PL = 0. You want to show these results in a summary table of the data below the graph but don't want to show a data marker for these results. To do so:
A. Move to Symbols:Data Markers and create a new data marker with whatever name you wish, let's use "BLANK" for our example. Draw one Point entity (select the Draw:Point menu item) at X=0, Y=0.
B. In the page properties of your graph report, move to the Override Line/DM Expression tab and insert the following under the Data Marker Expression 1 property:
<<IIf((<<ATTERBERG.Liquid_Limit>> - <<ATTERBERG.Plastic_Limit>>) = 0,BLANK)>>
That is, use the new BLANK data marker if the difference between the liquid and plastic limits is zero.
C. In the summary table below the graph you probably have a legend column with the data markers for each of the data points. It is probably a text entity with repeating properties. If it isn't, create it as one. The properties for a such an entity are:
Text (Main tab): <<DMK!<<#>>>>
Repeat Tab:
Repeat Spacing = The negative value of the vertical spacing between rows, that is, if the vertical spacing is 0.2 inches, you would input -0.2 in this property.
Number of Repetitions = The value of the Sets per Graph property in the graph report page properties, under the Data Representation tab.
Repeat Direction = Y
Repeat Variable Start = 1
Repeat Variable Increment = 1
This will generate the data markers up to the actual number on the page. However, for our case, we don't want the data markers to print when there are non-plastic specimens. Further, without any DM Expressions, the program automatically suppresses the printing of data marker above the number of actual data points you have on page. For example, if you specified 20 sets of points per page and there were only 5 on the page, the above entity will only print 5. With a DM Expression, that safeguard no longer exists since you may want to print a special data marker above the number of printed sets to document special points.
The Text property must be changed to:
<<IIf((<<Lookup(<<ATTERBERG.Liquid_Limit>>,<<DataSetKey(<<#>>)>>)>> - _
<<Lookup(<<ATTERBERG.Plastic_Limit>>,<<DataSetKey(<<#>>)>>)>>_
) > 0,_
<<DMK!<<#>>>>_
)>>
For data points that are plastic, the appropriate data marker will be printed. For non-plastic specimens the above calculation will return 0 and no data marker will be printed. For repetitions above the number of data points on the page, the calculation will fail since there are no plastic or liquid limit values and, again, a data marker will not print.
====================
5.1.043 04Apr2002
====================
1. This is a maintenance release. Fixed some system/configuration-related problems, errors with Find and Replace in some applications, and a bug relating to the second text specification in some configurations of depth text entities introduced in the previous release.
2. Clarification of the File:References to this lookup command in Data Design:Library Data and Lookup Lists:
This command gives the fields that use the current library table or lookup list as a lookup. It asks for project or data template files to search. It also searches library tables since text fields fields in library tables can also use library table or lookup lists. This command will NOT show you where fields in a library table are used in expressions. Use the File:References to current field and :References to all fields commands in Data Design:Library Data or the Tables:References submenu in Data Design:Library Tables for that facility.
====================
5.1.042 01Apr2002
====================
1. Clicking the Page button in the Print dialog caused a program crash. This has been fixed.
2. Let's say your boreholes are named:
B-1
B-2
.
.
B-10
B-11
.
.
B-100
B-101
If you were to output all the logs the order of the output will be:
B-1
B-10
B-100
B-101
B-11
B-12
B-13
.
.
B-2
B-20
B-21
.
.
B-3
B-30
B-31
etc.
This is the order that any program (Excel, ACCESS, etc.) would sort these names. With a lot of logs, it is a painful process of collating them properly. There are three ways around this problem:
A. Right justify the numbers:
B- 1 or B-001
B- 2 or B-002
.
.
B- 10 or B-010
B- 11 or B-011
.
.
B-100
B-101
B. Use just the number portion in the PointID field and the actually borehole name in another field. You would then have to change your reports to use the "name" field instead of the PointID.
C. The recommended solution is to create an integer field in the POINT table with the print order number for each borehole:
PointID Print Order
B-1 1
B-2 2
.
.
B-10 10
B-11 11
.
.
B-100 100
B-101 101
At output time you would specify this field as the primary sort field. To do so easily, click in the Sort 1 field right of the Filter data tool. Set the table and field appropriate in the Filter data tool and click the Paste button above the field list.
The data used to sort the output does not have to be sequential or even a number. There are other uses for this facility. There are two sort fields. You might want to print your boreholes in order of some type of project zone and then by borehole number.
3. Some of our clients prefer to use the ASTM 4318 Method B calculation for liquid limit determinations, regardless of the number of liquid limit points run. By default, gINT will use this calculation method only if there are one or two liquid limit points, otherwise it will use a best-fit line through all the liquid limit points to determine the liquid limit. Note that the one point method only applies to the Casagrande rotating cup method described in ASTM 4318 and not the Cone Penetrometer method which is also supported by gINT.
If you would like to force the use of the one point method with more than two liquid limit points, add the field "One Pt Method" to the ATTERBERG table and make it a Boolean type. The field must be name in this manner exactly (without the quotes) and must be Boolean. We also recommend writing in the Description property of the field to explain its usage. You can take the following and edit it to your liking or create your own description:
If marked, the one point method (ASTM 4318 Method B) of calculation of Liquid Limit will be used, regardless of the number of liquid limit points. Does not apply to the Cone Penetrometer method.
Note that if the one point method is used, either by forcing it by marking the One Pt Method field or if there are less than 3 liquid limit points, a warning message will be shown if any of the blows are less than 20 or greater than 30. This is just a warning. The program saves the data regardless of the blow counts. However, ASTM requires these limits.
4. Project tables can be set up with just a DateTime key set. This is useful for overall project notes or monitoring of some parameters that apply to the entire project and not just specific boreholes.
5. On export to AGS 3 format, gINT automatically builds the ABBR table at the end of the file on fields that have a library table or graphic lookup. It does this by examining the properties of the source field. The vast majority of the time you do not have to concern yourself with the details of this process since most of the time the source expression is just <<TABLE.Field>>. If that field has an appropriate lookup, its abbreviations will be added to ABBR. In the case where the source expression is truly an expression, problems can occur. For example:
<AGS Field>,"<<HasData(<<TABLE.Field1>>,<<TABLE.Field2>>)>>"
The contents of field Field2 will be exported but if Field1 has an appropriate lookup associated with it, gINT thinks that the data are abbreviations and puts them in the ABBR list. You can work around this problem with:
<AGS Field>,"<<Let(Data = <<TABLE.Field2>>)>><<HasData(<<TABLE.Field1>>,<<Get(Data)>>)>>"
In this construction gINT will look at the properties of Field2 and find no lookup and therefore the data will not be added to the ABBR list. A better solution is to use the FieldAbbr() function:
<AGS Field>,"<<FieldAbbr()>><<HasData(<<TABLE.Field1>>,<<TABLE.Field2>>)>>"
This tells gINT that this field has no abbreviations associated with it (nothing within the parentheses). Besides being empty, the function can contain a field reference indicating which field to look at for abbreviations:
<<FieldAbbr(<<Table.DataField>>)>>
The function is only recognized by the AGS export and may be placed anywhere in the source expression. If absent, gINT finds the leftmost field in the expression. If the source database specifies a lookup on this field, the data returned by the expression is assumed to be an abbreviation.
Note that if there is no entry for the datum in the lookup table, AGS specifies no way to report this. gINT will show a message in the report log: "The following abbreviations were not found in library table LOOKUPNAME:" followed by a list of the data values.
6. AGS Export: If an abbreviation entry is an AGS "Combined" entry e.g. IP+CP+RC then the output **ABBR group will list each item separately. There will be not output line for the combined abbreviation.
7. Quotes within function parameters:
gINT functions are passed one or more parameters. Each parameter is delimited with a comma:
<<SomeFunc(parameter1,parameter2,...)>>
If there is an embedded comma within within the parameter (but outside another function), then the parameter must be quoted. For example:
<<SomeFunc(<<TABLE.Field>>,_
"abc,xyz"_
)>>
Without the surrounding quotes, the program will take "abc" as the second parameter. Another example:
<<SomeFunc(<<TABLE.Field>>,_
<<AnotherFunc(<<TABLE2.Field>>,<<Expression>>,Blah Blah)>>_
)>>
The second parameter above is a function. Even though there are commas, since there are within another function, the second parameter does not have to be quoted. However, quotes around a parameter do no harm.
So far, the parameter parsing matches CSV (comma separated values) rules for parsing. Another rule of CSV data is that if there is a quote within a parameter, the quote must be doubled and quotes must surround the parameter. For example:
<<IIf(<<some condition>>,2.5" ID)>>
If the CSV rules were to be strictly followed, the above should be written as:
<<IIf(<<some condition>>,"2.5"" ID")>>
The above will be properly processed by gINT but it is not necessary. For function parameters, internal quotes, or a quote at the end of a parameter, do not require any special handling, so you could write the above expression as the first version. The only time internal quotes would require following CSV rules would be if the parameter actually had a quote at the beginning and end. Therefore, if you needed:
<<IIf(<<some condition>>,"print this in quotes")>>
where you actually wanted the function to return the parameter printed in quotes, you must write it as:
<<IIf(<<some condition>>,"""print this in quotes""")>>
that is, you must double the internal quotes and then surround the parameter in another set of quotes.
Note that gINT behaved somewhat differently in relation to quotes in functions before version 5.1.041, that is, it removed pairs of quotes within parameters whether there were quotes around the parameter or not.
====================
5.1.041 25Mar2002
====================
1. Some Windows '98 users have reported system crashes when moving into gIDraw screens (e.g., Preview) repeatedly. We believe we have fixed this problem. Please let us know if the problem persists after this update.
2. The Ctrl+Down Arrow combination in grid applications now advances one row down. Previously it moved to the bottom of the column. This new behavior is consistent with version 4 and is very handy for copying data down a column:
A. Ctrl+C in a cell that you wish to copy down the column.
B. Ctrl+Down Arrow to move to the cell below.
C. Ctrl+V to paste.
Your finger never leaves the Ctrl key.
3. The ListBuildSepVarb function allows building a list with a variable separator. The syntax is:
<<ListBuildSepVarb(<expression 1>,<separator 1>,<expression 2>,<separator 2>,...)>>
The last separator is not printed. Like the other ListBuildSepxxx functions, the separator is not printed if the corresponding expression does not have data. For example:
<<ListBuildSepVarb(<<UCase(<<LITHOLOGY.Main>>)>>,": ",_
<<LITHOLOGY.Strength>>,", ",_
<<LITHOLOGY.Color>>,", ",_
<<LITHOLOGY.Moisture>>,", "_
)>>
This would result in output like the following:
SILTY SAND: medium dense, brown, dry (all parameters)
SILTY SAND: brown (missing strength and moisture)
brown (only has color)
dry (only has moisture)
The last separator will not be printed. The separator at the end of the Moisture line in the expression is not needed but it doesn't hurt and if you add parameters or shift the order, you won't have to remember to add it.
4. In a recent build, we changed the behavior of lookup lists in grid applications to not drop down when you start typing. This was done to work around a bug in the third party control that causes improper selection in some cases on certain systems. We received a number of requests from users to reinstate the previous behavior of automatically dropping down since they never experienced the problems some of our clients have encountered. We decided to err on the side of proper operation and have left the default behavior to NOT drop down. However, you can override this behavior by marking the "Automatically drop lists in Grids" checkbox in File:System Properties under the "General" tab. Note that if you change this property while in a grid application, you must leave the application and return for the new behavior to go into effect.
5. The ASTM classification functions:
ASTM_Desc
ASTM_Full_Desc
ASTM_Name
ASTM_Symbol
Now have an optional parameter at the end of the parameter list that indicates whether to use the CI classification. This is used mainly in Western Canada and was instituted by the PFRA (Prairie Farm Rehabilitation Administration). In the ASTM classification clays are classified as:
CL - Liquid Limit < 50
CH - Liquid Limit >=50
With the PFRA classification:
CL - Liquid Limit < 30
CI - Liquid Limit >= 30, <50
CH - Liquid Limit >=50
All other classifications are the same. So the new parameter list for these four functions is:
<<ASTM_xxxx(<<Table.Size (mm) Field>>,_
<<Table.% Passing Field>>,_
<<Table.PL>>,_
<<Table.LL>>,_
<<Table.Organic>>,_
<<CI>>_
)>>
The Organic and CI parameters are optional. The CI parameter must be project level field that evaluates to True (-1) or False (0) or a literal True/False or -1/0. For example:
<<ASTM_Full_Desc(<<SV READINGS.Reading>>,_
<<SV READINGS.Percent_Finer>>,_
<<ATTERBERG.Plastic_Limit>>,_
<<ATTERBERG.Liquid_Limit>>,_
<<ATTERBERG.Organic>>,_
<<PROJECT.Use CI>>_
)>>
or:
<<ASTM_Full_Desc(<<SV READINGS.Reading>>,_
<<SV READINGS.Percent_Finer>>,_
<<ATTERBERG.Plastic_Limit>>,_
<<ATTERBERG.Liquid_Limit>>,_
<<ATTERBERG.Organic>>,_
-1_
)>>
The following uses the normal ASTM classification without the CI option:
<<ASTM_Full_Desc(<<SV READINGS.Reading>>,_
<<SV READINGS.Percent_Finer>>,_
<<ATTERBERG.Plastic_Limit>>,_
<<ATTERBERG.Liquid_Limit>>,_
<<ATTERBERG.Organic>>_
)>>
6. In Graph reports page properties the "Set Data Marker color to line color" property under "Data Representation" will force the data marker colors to the same values as the color of the line to which the data markers are associated. This works well in conjunction with the adjacent "Line Color List" property.
7. We have changed the look, but not the functionality, of folder browsers. Examples are in File:System Properties for the location of the project, data template, drawings, and temporary folders. The main change is that we have added the "Network Neighborhood" (or "Network Places" depending on your Windows version) so that you can select by the full UNC path instead of the mapped network drive letter.
8. The system data item <<gINTVersion>> returns the version of the program, for example, "5.1.041". This can be useful if you are writing reports for other offices and you use a capability that was introduced in a certain version that will not work on previous versions. You could have a text entity to prints in the middle of the page that says something like "YOU MUST HAVE VERSION XXXXXX OR LATER TO OUTPUT THIS REPORT PROPERLY". The Output Condition property of the entity would be something like:
<<gINTVersion>> < "5.1.041"
That is, if the version is before 5.1.041, print the message.
This can be pasted from the data tool with the System drop down set to "Data Items" and the Items drop down set to "gINTVersion".
9. Let's say you have the responsibility of maintaining the library for your firm and you want to make sure that all changes go through you. To prevent users from tampering with the library you can lock it so that only you can modify it. To do so:
A. Move to Utilities:Lib Merge/Copy.
B. Select the File:Secure Library menu item.
C. The subsequent dialog has two fields:
File Path
Contact information
Use the browse button [...] right of the File Path field to select or create a file in any folder. That file must then exist for editing to be allowed in the library.
The Contact information is optional. If you are distributing the library to other offices you might want to put your contact information here. That way a remote user will know who to contact if they need changes to the library.
On clicking Ok in the dialog, a message box appears:
"After this process is completed, the current library will not be editable unless the file 'x:\xxx\xxxxxx\yyy.abc' is present."
(Your selected file name and path will be in the message.)
You have a choice of three buttons:
Continue: Completes the process.
Change: Puts you back in the dialog.
Cancel: Cancels the dialog.
As long as the selected file is present, you will have full editing rights to the library. If it is not present, on startup the main gINT screen will have the following message:
"Library is in READ-ONLY mode. No changes to Library Data can be saved.
Project Data Input and Output are fully operational.
This library has been locked by ...."
The last line will only be shown if you supplied contact information.
When the library is locked, the user can move to any library application but any changes will not be saved or execution of utilities is not allowed. These applications are:
A. All Symbol applications.
B. All Report and Report block applications.
C. Drawings:Drawing Library.
D. All Data Design applications except Project Database and Correspondence Files.
E. Utilities:Lib Merge/Copy.
F. Utilities:Repair Compact Databases - Works with drawing, project, and data template files but cannot repair/compact the library. This is not necessary since the library cannot be changed.
What are available to the user in this mode are:
A. Input.
B. All Output applications.
C. Data Design:Project Database.
D. Data Design:Correspondence Files.
E. Drawings:General Drawings.
To unlock the library, move back to Utilities:Lib Merge/Copy and select the File:Secure Library and delete the contents of the File Path field. Of course, you cannot do that unless the library is unlocked to you, that is, the file exists.
This method of securing the library was selected over a password method since a prompt for a password would be requested on every entry to the program. This method does not add any burden on the user. The downside to this method is that anyone with access to your computer could edit the library or see what the file name is and create that file on their system.
Note that while we hid and encrypted the locking information in the library, we did not implement nuclear launch codes level security. A reasonably adept hacker with way too much time on his/her hands and without a life outside breaking rules could unlock the library. However, that person could never say that he/she didn't know you didn't want the file modified!
IMPORTANT NOTE: If you inadvertantly deleted your locking file or moved to a new computer and you forgot the name and location of the file, we can unlock the library. However, there will be a service charge. So please make sure this doesn't happen. Currently the charge is US$50 if you recorded the contact information in the file. If you haven't, we would need to spend the time to make very sure that you are in fact authorized to unlock the library. In this case the charge is US$100. These charges are subject to change without notice.
An alternative method of using the library locking is for you to have two libraries. One that you work on that is not secured. When you are ready to distribute the library, copy it to another folder, make it the current library in gINT, and secure it. That library would be distributed. Then it doesn't matter if you forget the file name.
====================
5.1.040 11Mar2002
====================
1. Very long path names in Recent File menus are now abbreviated by the insertion of ellipses, ensuring that the menu will not overhang the screen hiding the file name at the right side.
2. On export from a gINT project with a correspondence file, there are times when you want to suppress a record if data are missing from one or more of the fields in that record. For example, following is one way:
ABC,XYZ
Field1,<<HasData(<<XYZ.Data1>>,<<XYZ.PointID>>)>>
Field2,<<HasData(<<XYZ.Data1>>,<<XYZ.Depth>>)>>
Field3,<<XYZ.Data1>>
Field4,<<HasData(<<XYZ.Data1>>,<<XYZ.Data2>>)>>
XYZ is the gINT project table, ABC is the corresponding table or group in the export file. The PointID field in gINT corresponds to the Field1 field in the export file, Depth to Field2, Data1 to Field3, and Data2 to Field4. You don't want to export a record if there are no data in the Data1 field in gINT. The above method is awkward. On import, all that you have to do is have the condition on the PointID field and the entire record will not import because PointID is a key field and is required for saving the table. On export to a spreadsheet, CSV, or AGS file, there is no such condition so that is the reason the condition needs to be put on all lines (except the Data1 line were it is not needed; if there is no data it will not export).
Another method is to use the system data item "ExportKey" as follows:
ABC,XYZ
Field1,<<XYZ.PointID>>
Field2,<<XYZ.Depth>>
Field3,<<ExportKey>><<XYZ.Data1>>
Field4,<<XYZ.Data2>>
This says the Field3 field is an "export key", that is, if no data is stored in this field, the export for all data in that record is aborted. <<ExportKey>> can be inserted anywhere in the source expression and can be applied to multiple lines, for example:
ABC,XYZ
Field1,<<XYZ.PointID>>
Field2,<<XYZ.Depth>>
Field3,<<ExportKey>><<XYZ.Data1>>
Field4,<<ExportKey>><<XYZ.Data2>>
This says that both Field3 and Field4 must have data for the record export to occur.
3. There are times when you need to match a color between two applications. For example, you have used a bitmap fill in some other application to draw material graphics columns and they were in color. Now you want to replace those symbols with material composite symbols in gINT. You have created the appropriate symbol but now matching the color is a problem. Many applications (including gINT) allow you to select any color you wish to use but don't allow you to ask what the color is. gINT does allow this capability. In Symbols:Bitmap Symbols or :Bitmap Fills, click anywhere on the displayed symbol. At the top of the application area:
A. A rectangle appears in the color of pixel onto which you clicked.
B. The Pixel Color label (read-only control; that is, you cannot type in it) will show you the Windows color number. If that color is in your library, it will also show you the color name in parentheses.
C. The [Add to Lib] button right of the Pixel Color label will be disabled if the color is already in your library. Otherwise, it is enabled and clicking on it will add the color to your library. You will be asked for the color name. It is required.
4. The property "Does NOT Follow Report Body" appears in Vertical Scale Ticks and Text entities in logs only. If marked, these entities will not be replicated when there are multiple logs per page horizontally. The purpose for this property is so that you can have just one vertical scale on a log where there are multiple log columns on a page.
5. With multiple logs per page horizontally (log columns) you may have a gap at the left of the page before your first column is printed. To show this properly in the design application (Reports:Logs) you can specify the "Left Offset" value in the Report Structure tab of the log report page properties. This only affects the placement of the dashed structure lines shown at design time.
6. You can space data on a line using the Tab formatting code. For example, you want to print a list of water levels at the end of your description column on a log that looks like the following:
Water Levels:
Date Depth
05Mar02 10.5
06Mar02 9.8
07Mar02 11.2
Further, you want the columns to align. Most forms use proportional fonts so using spaces to align the columns doesn't work well. Each character has a different width. Instead, in the description you could write it as follows:
Water Levels:
<<TAB!0.2>>Date<<TAB!1.5;R>>Depth
<<TAB!0.2>>05Mar02<<TAB!1.5;R>>10.5
<<TAB!0.2>>06Mar02<<TAB!1.5;R>>9.8
<<TAB!0.2>>07Mar02<<TAB!1.5;R>>11.2
The Date column of values would be placed 0.2 page units right of the left edge of the text column and the Depth column of values would be placed 1.5 page unit right of the left edge and these values would be right justified.
The full syntax of the tab specification is:
<<TAB!<tab offset[[;<alignment: L,C,R, missing=L][;<position units: in, mm, missing=page units>]]>>
Examples:
<<TAB!2;C;in>> = Offset 2 inches and centered
<<TAB!2;;in>> = Offset 2 inches and left justified
<<TAB!2>> = Offset 2 report page units and left justified
The tab specification and report page units can be different. The program makes the conversion, if necessary.
Any text property can evaluate tabs in reports. So this can be output using Text, Depth Text, Depth Text Table, and Table Text entities as well as by text table and text document reports.
Currently the tab specification will only work in report entities where the text horizontal alignment is Left and the text angle is 0 or blank. If you try using a tab specification in an entity where the horizontal alignment is not left, or the angle is not 0, the treats each tab specification as two spaces.
The tab offset is from the left edge of the beginning of the text entity which is the entity X value plus any internal margin (Depth Text, Table Text entities under the Wrap tab).
You do not have to type the tab specification in Input. You will find the "Insert Tab" command under the Format menu. Place the cursor where you want the specification inserted and invoke the command. A dialog will appear asking for:
Offset from left edge: Supply a number (required)
Horz Align: Pick from the list: Left, Center, Right; default is blank (= left)
Offset Units: Pick from the list: Inches, Millimeters; default is blank (= use report page units)
On clicking Ok, the specification will be pasted where you had placed the cursor in the grid cell.
The Tab specification can also be used in report properties directly. You can type the specification or paste <<TAB!>> from the data tool. You will find it under the Items list when the System list is set to Data Items. When pasted from the data tool, the cursor would be placed after the "!" and you would type the rest of the specification.
Note that we strongly recommend that tabs be used in reports and not in data entry. It is always better to put the formatting intelligence in the report. This makes data entry