1 of 44
Date March 22, 2012
Hilti PS200
Document
Scripting
Scripting for Hilti PROFIS Ferroscan 5.6
Since Version 5.5 for the Hilti PROFIS Ferroscan PC Software and 3.0 for the Map Software there is limited
Scripting Support available. This may help you to automate some tasks.
Scripting is an unsupported option for this Software use it at your own risk!
The scripting engine is based on Lua, to learn more about this language please look at
http://www.lua.org/pil/
As namespace for our defined functions we took host, so all described functions should be called like
host.function() in your script.
2 of 44
Scripting the PC Software
Scripting Docu for: Hilti PROFIS Ferroscan
Version: 1.1.0.0 (2012-03-21 )
Author: Herwig Habenbacher (MESh)
Function:
clearHorizontalCorrection()
Description:
clear and ignore horizontal depth correction values
Return value:
0 indicates success, other values an error
For the Export of Results we can use some correction factors:
Via this function we practically uncheck the use checkbox for the horizontal rebars.
So no correction values are applied for the horizontal rebars.
3 of 44
Function:
clearVerticalCorrection()
Description:
clear and ignore vertical depth correction values
Return value:
0 indicates success, other values an error
This is identical to clearHorizontalCorrection(), but just for the vertical rebars.
Function:
exportToBMP()
Description:
export image to Bitmap
Return value:
0 indicates success, other values an error
This is essential the same as calling via the menu
The Bitmap is saved under the same name as the scan file, but of course with the extension bmp
Function:
exportToCSV()
Description:
export data to CSV (Comma Separated Values, Spreadsheet)
Return value:
0 indicates success, other values an error
The same as calling the function via menu
The File is saved under the same name as the scan file, but of course with the extension csv
4 of 44
Function:
exportToCSV_Corrected()
Description:
export data to CSV (Comma Separated Values, Spreadsheet) applying the correction values
Return value:
0 indicates success, other values an error
Like exportToCSV(), but here the correction values are applied if available and enabled.
Function:
exportToCSV_V4()
Description:
export data to CSV (Comma Separated Values, Spreadsheet) in Ferroscan V4 Format
Return value:
0 indicates success, other values an error
Like exportToCSV(), but the file format follows Ferroscan PC Software V4.x.
We use this for our customers which have written their own evaluation Software for V4.x
and want the new version to be compatible.
Function:
exportToHIFF()
Description:
export data to HIFF (Hilti Interchange File Format, for Map Software)
Return value:
0 indicates success, other values an error
Similar to exportToCSV() from functionality.
We need this format for further processing with the Map Software.
The HIFF has stored the results in a very efficient format, so that we can process even a few
hundrets of scans very comfortable to allow further insights.
Function:
exportToHTML()
Description:
generate Report in HTML Web Format
Return value:
0 indicates success, other values an error
Similar to exportToBMP() from functionality.
Generates an HTML Report for possible further processing.
5 of 44
Function:
exportToJPEG()
Description:
export image to JPEG
Return value:
0 indicates success, other values an error
Similar to exportToBMP() but in JPEG format.
Function:
exportToQSX()
Description:
export data to QSX (Quickscan Export from Ferroscan V4)
Return value:
0 indicates success, other values an error
Like exportToCSV(), but the file format follows Ferroscan PC Software V4.x.
We use this for our customers which have written their own evaluation Software for V4.x
and want the new version to be compatible.
QSX is very close to XML, but was only used for Quickscan Data Exchange.
Function:
exportToX3D()
Description:
export image to 3D Web Format
Return value:
0 indicates success, other values an error
Similar to exportToBMP() but in X3D format.
X3D is a 3D format for the Web (Successor of VRML) and gives you a real world impression
Function:
exportToXML()
Description:
export data to XML (Generic Data Exchange)
Return value:
0 indicates success, other values an error
Like exportToCSV(), but with more details in the standard XML format.
6 of 44
Function:
exportToRST()
Description:
export data to RST (Result Format )
Return value:
0 indicates success, other values an error
Like exportToCSV(), but in a special format for some customers.
Function:
getArchiveDetails()
Description:
update the current archive info and transfer it to Lua
Return value:
0 indicates success, other values an error
The function saves the settings in the Lua archive slot.
You may access them via archive.currentDir or archive.examplesDir
Example:
-- ask host for archive settings
host.getArchiveDetails()
local actPath = archive.examplesDir
-- for default values you may use "or" with a directory
-- local actPath = archive.examplesDir or "C:\\Examples"
-- we are looking into this project
local actFile = actPath .. "\\" .. "Prj99996\\Image_01.XFF"
7 of 44
Function:
getCorrectionValues()
Description:
transfer the depth correction values to Lua
Return value:
0 indicates success, other values an error
The function saves the settings in the Lua correctionValues slot.
Example:
-- local values
local offsetX = 0
local offsetY = 0
local factorX = 1
local factorY = 1
-- ask host for correction values
host.getCorrectionValues()
if correctionValues.horizontal.use then
offsetX = correctionValues.horizontal.offset
factorX = correctionValues.horizontal.factor
end
if correctionValues.vertical.use then
offsetY = correctionValues.vertical.offset
factorY = correctionValues.vertical.factor
end
function correctHorizontal( value )
return ((value * factorX) + offsetX)
end
function correctVertical( value )
return ((value * factorY) + offsetY)
end
8 of 44
Function:
getProjectDetails()
Description:
update the current project info and transfer it to Lua
Return value:
0 indicates success, other values an error
This delivers you the same information as shown in the panel for the Archive Folder:
The function saves the settings in the Lua project slot.
In this example the slots would be:
["subfoldername"] = "Prj99994",
["name"] = "Hilti Examples Map Quick",
["customer"] = "You",
["currentDir"] = "C:\\Hilti\\Profis\\Ferroscan\\Examples\\Prj99994",
["object"] = "Demo Block",
["operator"] = "Hilti Measuring"
Accessible via slot, e.g. project.operator
Function:
getScanDetails()
Description:
update the current scan info and transfer it to Lua
Return value:
0 indicates success, other values an error
This delivers information about the actual viewed scan.
The function saves the settings in the Lua scan slot.
In this example the slots would be:
["kbVersion"] = "2004-07-27",
["currentFile"] = "C:\\Examples\\Prj99996\\Image_04.XFF",
["dateTime"] = "2007-05-10 09:00:11",
["kb"] = "PS200:DIN-488",
["serialNum"] = "21906014",
["typeInfo"] = "PS 200 Imagescan",
["version"] = "5.3.1.2 [ SSW: 3.00.0 SHW: 0001 ]",
["scannerBuildDate"] = "Monday, 7. August 2006"
Accessible via slot, e.g. scan.serialNum
9 of 44
Function:
getScanType()
Description:
returns the type of the current scan: 1=Imagescan, 2=Blockscan, 3=Quickscan, other=Unknown
Return value:
1=Imagescan, 2=Blockscan, 3=Quickscan, other=Unknown
Function:
hideHorizontalBars()
Description:
hide the horizontal bars
Return value:
0 indicates success, other values an error
This is essential the same as unchecking the horizontal bars via the View Results panel.
The horizontal bars are not shown.
Function:
hideLayerGrid()
Description:
hides the grid over the image
Return value:
0 indicates success, other values an error
This is essential the same as unchecking the Grid via the View Layers panel.
The Grid is not shown.
10 of 44
Function:
hideLayerMarker()
Description:
hides the marker over the image
Return value:
0 indicates success, other values an error
This is essential the same as unchecking the Marker via the View Layers panel.
No Markers are shown.
Function:
hideLayerOriginals()
Description:
hide the original variant of the image
Return value:
0 indicates success, other values an error
Similar to the hideLayerMarker() Function.
The original preprocessed Layer is not shown.
Function:
hideLayerResults()
Description:
hide the results of the image
Return value:
0 indicates success, other values an error
Similar to the hideLayerOriginals() Function.
The calculated results Layer is not shown.
Function:
hideNonverifiedBars()
Description:
hide the non-verified bars
Return value:
0 indicates success, other values an error
Similar to the hideLayerOriginals() Function.
The outer bars of a sweep (close to the grid lines) are not shown.
11 of 44
Function:
hideVerticalBars()
Description:
hide the vertical bars
Return value:
0 indicates success, other values an error
Similar to the hideHorizontalBars() Function.
This is essential the same as unchecking the vertical bars via the View Results panel.
The vertical bars are not shown.
Function:
openScan( fileName )
Description:
open scan with the given filename
Return value:
0 indicates success, other values an error
Parameter and Type:
fileName [ string ]
Opens a new scan file (with extension xff) unconditionally.
Function:
performFullAnalysis()
Description:
perform a full analysis of the current scan
Return value:
0 indicates success, other values an error
Performs a full analysis of the actual scan with the given settings.
This should be done before exporting some results.
Please note: if you change the diameter index all results will be deleted, so you have to do the
Analysis again before exporting the results!
Function:
printAll()
Description:
print the current scan
Return value:
0 indicates success, other values an error
Prints the actual report with the given settings starts printing immediately without confirmation.
12 of 44
Function:
printQSStatistics()
Description:
print the statistic for the current Quickscan
Return value:
0 indicates success, other values an error
Prints the actual report with the given settings starts printing immediately without confirmation
Please note that the correction values are NOT taken into account!
Function:
saveBitmap()
Description:
save the current scan as bitmap under actual filename with BMP extension
Return value:
0 indicates success, other values an error
The Bitmap is saved under the same name as the scan file, but of course with the extension bmp
Function:
saveBitmapAs( fileName )
Description:
save the current scan bitmap under a new filename
Return value:
0 indicates success, other values an error
Parameter and Type:
fileName [ string ]
Similar to saveBitmap() but with given filename and the extension bmp
Function:
saveScan()
Description:
save the current scan with the actual filename
Return value:
0 indicates success, other values an error
Function:
saveScanAs( fileName )
Description:
save the current scan under a new filename
Return value:
0 indicates success, other values an error
Parameter and Type:
fileName [ string ]
13 of 44
Function:
setCutOff( depth )
Description:
set the cut-off depth ( in [mm])
Return value:
0 indicates success, other values an error
Parameter and Type:
depth [ integer ]
Sets the cut-off depth in [mm], mainly used with Quickscans.
All bars below this depth are ignored that may be important for statistics.
Function:
setDiameterIndex( index )
Description:
set the diameter index, valid for both directions and Quickscan
Return value:
0 indicates success, other values an error
Parameter and Type:
index [ integer ] // -1 is diameter detection for Imagescans
Set the diameter index for analysis.
The index may be different for the used knowledgebase.
Overview of indexes and diameters:
0 = 6mm / #3 / C10 / D6 / C 8mm
1 = 8mm / #4 / C15 / D10 / C10mm
2 = 10mm / #5 / C20 / D13 / C12mm
3 = 12mm / #6 / C25 / D16 / C14mm
4 = 14mm / #7 / C30 / D19 / C16mm
5 = 16mm / #8 / C35 / D22 / C18mm
6 = 20mm / #9 / - / D25 / C20mm
7 = 25mm / #10 / - / D29 / C22mm
8 = 28mm / #11 / - / D32 / C25mm
9 = 30mm / - / - / D35 / C28mm
10 = 36mm / - / - / D38 / C32mm
11 = - / - / - / - / C36mm
If the diameter should be detected, use the index value -1
Function:
setHorizontalCorrection( factor, offset )
Description:
set and use horizontal depth correction values, corrected depth value = (old depth value) * factor + offset
[mm]
Return value:
0 indicates success, other values an error
Parameter and Type:
factor [ double ] // multiplication factor
offset [ double ] // additional offset in [mm]
Set the correction values for horizontal rebars.
Please Note: this value is only used for CSV Export!
14 of 44
Function:
setHorzontalDiameterIndex( index )
Description:
set the horizontal diameter index, valid for Imagescans
Return value:
0 indicates success, other values an error
Parameter and Type:
index [ integer ]
Similar to setDiameterIndex( index ), but only affects horizontal rebars.
Function:
setImageRulerOff()
Description:
if drawing an image we paint only the image
Return value:
0 indicates success, other values an error
For the savings of the image we use only the image without a dimensioning border (ruler)
It is the same as we select that via menu:
Function:
setImageRulerOn()
Description:
if drawing an image we use a ruler around
Return value:
0 indicates success, other values an error
For the savings of the image we use a dimensioning border (ruler)
It is the same as we select that via menu:
15 of 44
Function:
setInfoComment( aComment )
Description:
set the current info comment
Return value:
0 indicates success, other values an error
Parameter and Type:
aComment [ string ]
Function:
setInfoCustomerName( aName )
Description:
set the current info customer name
Return value:
0 indicates success, other values an error
Parameter and Type:
aName [ string ]
Function:
setInfoLocationName( aName )
Description:
set the current info location name
Return value:
0 indicates success, other values an error
Parameter and Type:
aName [ string ]
Function:
setInfoOperatorName( aName )
Description:
set the current info operator name
Return value:
0 indicates success, other values an error
Parameter and Type:
aName [ string ]
Function:
setInfoProjectName( aName )
Description:
set the current info project name
Return value:
0 indicates success, other values an error
Parameter and Type:
aName [ string ]
16 of 44
Function:
setOverlayIndex( index )
Description:
set the overlay index ( = [mm])
Return value:
0 indicates success, other values an error
Parameter and Type:
index [ integer ]
We use the overlay index, that is the same as checking via the Overlay box in the Settings pane:
Function:
setTrigger1( depth )
Description:
set the trigger depth 1 ( in [mm])
Return value:
0 indicates success, other values an error
Parameter and Type:
depth [ integer ]
Function:
setTrigger2( depth )
Description:
set the trigger depth 2 ( in [mm])
Return value:
0 indicates success, other values an error
Parameter and Type:
depth [ integer ]
Function:
setTrigger3( depth )
Description:
set the trigger depth 3 ( in [mm])
Return value:
0 indicates success, other values an error
Parameter and Type:
depth [ integer ]
17 of 44
Function:
setVerticalCorrection( factor, offset )
Description:
set and use vertical depth correction values, corrected depth value = (old depth value) * factor + offset
[mm]
Return value:
0 indicates success, other values an error
Parameter and Type:
factor [ double ] // multiplication factor
offset [ double ] // additional offset in [mm]
Set the correction values for vertical rebars.
Please Note: this value is only used for CSV Export!
Function:
setVerticalDiameterIndex( index )
Description:
set the vertical diameter index, valid for Imagescans
Return value:
0 indicates success, other values an error
Parameter and Type:
index [ integer ]
Similar to setDiameterIndex( index ), but only affects vertical rebars.
Function:
showHorizontalBars()
Description:
display the horizontal bars
Return value:
0 indicates success, other values an error
The opposite to hideHorizontalBars()
This is essential the same as checking the horizontal bars via the View Results panel.
The horizontal bars are now shown.
Function:
showLayerGrid()
Description:
display the grid over the image for easier orientation
Return value:
0 indicates success, other values an error
The opposite to hideLayerGrid()
The Grid is now shown.
18 of 44
Function:
showLayerMarker()
Description:
display the marker over the image for annotations
Return value:
0 indicates success, other values an error
The opposite to hideLayerMarker()
The Marker are now shown.
Function:
showLayerOriginals()
Description:
display the original variant of the image
Return value:
0 indicates success, other values an error
The opposite to hideLayerOriginals()
The original processed data is now shown.
Function:
showLayerResults()
Description:
display the results of the image
Return value:
0 indicates success, other values an error
The opposite to hideLayerResults()
The fully analyzes results are now shown.
Function:
showNonverifiedBars()
Description:
display the non-verified bars
Return value:
0 indicates success, other values an error
The opposite to hideNonverifiedBars()
The outside bars (close to the grid lines) are now shown.
19 of 44
Function:
showVerticalBars()
Description:
display the vertical bars
Return value:
0 indicates success, other values an error
The opposite to hideVerticalBars()
The vertical bars are now shown.
Function:
terminate()
Description:
terminate the application
Return value:
0 indicates success, other values an error
Terminates the application (PC Software)
This may be useful if you want to perform the script inside a batch processing.
So after termination the batch processing may proceed.
20 of 44
Scripting the Map Software
Scripting Docu for: Hilti PROFIS Ferroscan Map
Version: 1.1.0.0 (2012-03-21 )
Author: Herwig Habenbacher (MESh)
Function:
addToScene( sceneName )
Description:
add current settings to scene with name
Return value:
0 indicates success, other values an error
Parameter and Type:
sceneName [ string ]
This is like adding a scene via the pop-up menu on the virtual wall:
All currently set values for displaying the virtual wall ( color and depth values, zooming, ) are stored
inside the project and can be recalled later.
21 of 44
Function:
clearHorizontalCorrection()
Description:
clear and ignore horizontal depth correction values
Return value:
0 indicates success, other values an error
We can use some correction factors:
Via this function we practically uncheck the use checkbox for the horizontal rebars.
So no correction values are applied for the horizontal rebars.
Function:
clearVerticalCorrection()
Description:
clear and ignore vertical depth correction values
Return value:
0 indicates success, other values an error
Similar to clearHorizontalCorrection(),
22 of 44
Function:
getArchiveDetails()
Description:
update the current archive info and transfer it to Lua
Return value:
0 indicates success, other values an error
The function saves the settings in the Lua archive slot.
You may access them via archive.currentDir or archive.examplesDir
Example:
-- ask host for archive settings
host.getArchiveDetails()
local actPath = archive.examplesDir
-- for default values you may use "or" with a directory
-- local actPath = archive.examplesDir or "C:\\Examples"
Function:
getCorrectionValues()
Description:
transfer the depth correction values to Lua
Return value:
0 indicates success, other values an error
The function saves the settings in the Lua correctionValues slot.
Example:
-- local values
local offsetX = 0
local offsetY = 0
local factorX = 1
local factorY = 1
-- ask host for correction values
host.getCorrectionValues()
if correctionValues.horizontal.use then
offsetX = correctionValues.horizontal.offset
factorX = correctionValues.horizontal.factor
end
if correctionValues.vertical.use then
offsetY = correctionValues.vertical.offset
factorY = correctionValues.vertical.factor
end
function correctHorizontal( value )
return ((value * factorX) + offsetX)
end
function correctVertical( value )
return ((value * factorY) + offsetY)
end
23 of 44
Function:
getProjectInfo()
Description:
update the project info and transfer it to Lua
Return value:
0 indicates success, other values an error
This delivers information about the actual project info as seen at the Info tab.
The function saves the settings in the Lua project slot.
In this example the slots would be:
["actFilename"] = "C:\\Projekte\\HongKong_Small_01_Scenes.hae",
["type"] = "Imagescan",
["info"]
The info slot contains further sub-fields:
["project"] = "Hongkong West Rail",
["customer"] = "KCR ",
["location"] = "CC212 Northern Viaduct Pier TMN5R",
["operator"] = "Siew Simon",
["comment"] = "Example from Bridge in Honkong"
Accessible via slot, e.g. project.type or project.info.customer
Function:
getScanType()
Description:
returns the type of the current project: 1=Imagescan, 2=Quickscan, other=Unknown
Return value:
0 indicates success, other values an error
24 of 44
Function:
getStatistic()
Description:
update the project statistic and transfer it to Lua
Return value:
0 indicates success, other values an error
This delivers information about the actual statistic values as seen at the Statistic tab.
The function saves the settings in the Lua statistics slot.
In this example the slots would be:
["calc"] = {
["c_quant_10"] = 43.42,
["numBars"] = 8916,
["maxVal"] = 99,
["c_quant_5"] = 39.76,
["minVal"] = 8,
["median"] = 55,
["numBarsBelow"] = 126,
["arithMean"] = 57.57,
["std_dev"] = 12.68
},
["calcLimit"] = {
["c_quant_10"] = 43.42,
["numBars"] = 8916,
["maxVal"] = 99,
["c_quant_5"] = 39.76,
["minVal"] = 8,
["upperLimit"] = 125.5,
["median"] = 55,
["numBarsBelow"] = 126,
["arithMean"] = 57.57,
["std_dev"] = 12.68
}
We have two main slots, calc which represents the calculation result and calcLimit which
represents the calculated result with upper limit.
The slots can be accessed like statistics.calc.median or statistics.calcLimit.upperLimit
Function:
hideGrid()
Description:
hides the grid over the image
Return value:
0 indicates success, other values an error
Function:
hideHorizontalBars()
Description:
hide the horizontal bars
Return value:
0 indicates success, other values an error
25 of 44
Function:
hideMarker()
Description:
hides the marker over the image
Return value:
0 indicates success, other values an error
Function:
hideVerticalBars()
Description:
hide the vertical bars
Return value:
0 indicates success, other values an error
Function:
insertImagescan( fileName, row, col )
Description:
insert an imagescan with filename into current project at row and col position
Return value:
0 indicates success, other values an error
Parameter and Type:
fileName [ string ]
row [ integer ]
col [ integer ]
Before inserting an Imagescan a new Image Map must be created via newImagescanMap.
Function:
insertQuickscan( fileName, xPos, yPos, sDir )
Description:
insert a quickscan with filename into current project at xPos and yPos position in [mm] with direction sDir
Return value:
0 indicates success, other values an error
Parameter and Type:
fileName [ string ]
xPos [ double ]
yPos [ double ]
sDir [ integer ] // 0=East, 1=West, 2=South, 3=Nord
Before inserting a Quickscan a new Quickscan Map must be created via newQuickscanMap.
26 of 44
Function:
loadColorScheme( fileName )
Description:
load a color scheme from a filename
Return value:
0 indicates success, other values an error
Parameter and Type:
fileName [ string ]
Function:
loadSceneView( fileName )
Description:
load a scene view from an existing scene view file
Return value:
0 indicates success, other values an error
Parameter and Type:
fileName [ string ]
Function:
newImagescanMap( fileName, rows, cols )
Description:
create a new imagescan map with a filename, number of rows and columns
Return value:
0 indicates success, other values an error
Parameter and Type:
fileName [ string ]
rows [ integer ]
cols [ integer ]
Function:
newQuickscanMap( fileName, width, height, scanWidth )
Description:
create a new quickscan map with a filename, width, height and scanwidth in [mm]
Return value:
0 indicates success, other values an error
Parameter and Type:
fileName [ string ]
width [ double ]
height [ double ]
scanWidth [ double ]
27 of 44
Function:
openProject( fileName )
Description:
open project with the given filename
Return value:
0 indicates success, other values an error
Parameter and Type:
fileName [ string ]
Function:
printAll()
Description:
print the current project
Return value:
0 indicates success, other values an error
Function:
printStatistics()
Description:
print the current statistic report
Return value:
0 indicates success, other values an error
Function:
saveBitmap()
Description:
save the current project as bitmap under actual filename with BMP extension
Return value:
0 indicates success, other values an error
Function:
saveBitmapAs( fileName )
Description:
save the current project bitmap under a new filename
Return value:
0 indicates success, other values an error
Parameter and Type:
fileName [ string ]
28 of 44
Function:
saveColorScheme( fileName )
Description:
save the current color scheme under a new filename
Return value:
0 indicates success, other values an error
Parameter and Type:
fileName [ string ]
Function:
saveProject()
Description:
save the current project with the actual filename
Return value:
0 indicates success, other values an error
Function:
saveProjectAs( fileName )
Description:
save the current project under a new filename
Return value:
0 indicates success, other values an error
Parameter and Type:
fileName [ string ]
Function:
saveScene( fileName )
Description:
save the current scene under a new filename
Return value:
0 indicates success, other values an error
Parameter and Type:
fileName [ string ]
Save the Scene includes the Zooming Parameters.
Function:
saveSceneView( fileName )
Description:
save the current scene view under a new filename
Return value:
0 indicates success, other values an error
Parameter and Type:
fileName [ string ]
Save the Scene View excludes the Zooming Parameters.
29 of 44
Function:
setComment( aComment )
Description:
set the current comment
Return value:
0 indicates success, other values an error
Parameter and Type:
aComment [ string ]
Function:
setCustomerName( aName )
Description:
set the current customer name
Return value:
0 indicates success, other values an error
Parameter and Type:
aName [ string ]
Function:
setCutOffValue( depth )
Description:
set the cut-off value in [mm]
Return value:
0 indicates success, other values an error
Parameter and Type:
depth [ integer ]
Function:
setHorizontalCorrection( factor, offset )
Description:
set and use horizontal depth correction values, corrected depth value = (old depth value) * factor + offset
[mm]
Return value:
0 indicates success, other values an error
Parameter and Type:
factor [ double ]
offset [ double ]
Function:
setLocationName( aName )
Description:
set the current location name
Return value:
0 indicates success, other values an error
Parameter and Type:
aName [ string ]
30 of 44
Function:
setOperatorName( aName )
Description:
set the current operator name
Return value:
0 indicates success, other values an error
Parameter and Type:
aName [ string ]
Function:
setProjectName( aName )
Description:
set the current project name
Return value:
0 indicates success, other values an error
Parameter and Type:
aName [ string ]
Function:
setVerticalCorrection( factor, offset )
Description:
set and use vertical depth correction values, corrected depth value = (old depth value) * factor + offset
[mm]
Return value:
0 indicates success, other values an error
Parameter and Type:
factor [ double ]
offset [ double ]
Function:
setZoomRange( x1, y1, x2, y2 )
Description:
set the zoom range via start- and end-point coordinates in [mm]
Return value:
0 indicates success, other values an error
Parameter and Type:
x1 [ integer ] // x-start
y1 [ integer ] // y-start
x2 [ integer ] // x-end
y2 [ integer ] // y-end
Function:
showGrid()
Description:
display the grid over the image for easier orientation
Return value:
0 indicates success, other values an error
31 of 44
Function:
showHorizontalBars()
Description:
display the horizontal bars
Return value:
0 indicates success, other values an error
Function:
showMarker()
Description:
display the marker over the image for annotations
Return value:
0 indicates success, other values an error
Function:
showOriginals()
Description:
display the original variant of the image
Return value:
0 indicates success, other values an error
This function is in mutual exclusion with showResults().
Function:
showResults()
Description:
display the results of the image
Return value:
0 indicates success, other values an error
This function is in mutual exclusion with showOriginals().
Function:
showVerticalBars()
Description:
display the vertical bars
Return value:
0 indicates success, other values an error
32 of 44
Function:
terminate()
Description:
terminate the application
Return value:
0 indicates success, other values an error
Function:
updateColorScheme()
Description:
the changed colorscheme in the script is updated and displayed at the host
Return value:
0 indicates success, other values an error
Function:
updateScene()
Description:
the changed scene in the script is updated and displayed at the host
Return value:
0 indicates success, other values an error
Function:
useCutOffMode()
Description:
displays the depth range up to the cut-off value
Return value:
0 indicates success, other values an error
This is like the tab selected in the View Settings Pane:
33 of 44
Function:
useRangeMode()
Description:
displays the special depth range mode
Return value:
0 indicates success, other values an error
This is like the tab selected in the View Settings Pane:
Function:
useStandardMode()
Description:
displays the full depth range
Return value:
0 indicates success, other values an error
This is like the tab selected in the View Settings Pane:
34 of 44
Function:
zoomOut()
Description:
leave zoom and display the full area
Return value:
0 indicates success, other values an error
35 of 44
Example Scripting the PC Software
-------------------------------------------------------------------------------
-- This Demo Script is an example batch processing from the Examples Folder
--
-- Demo written by Herwig Habenbacher on 2011-08-10
-- Use it at your own risk!
-------------------------------------------------------------------------------
-- ask host for archive settings, we want the examples dir
host.getArchiveDetails()
local actPath = archive.examplesDir
-- or "C:\\Users\\Public\\Documents\\Hilti\\Profis\\Ferroscan\\Examples"
-- we are looking into this project
local project = "Prj99996"
-- the batch slot has all the processing infos inside
-- look at the batch processing dialog in the PC Software...
batch = {
-- we need the directory here, because later we just use the filenames
dirName = actPath .. "\\" .. project,
-- if we want to change some info values we set them here
-- a nil value lets the original value unchanged
info = {
projectName = nil,
customer = nil,
location = nil,
operator = nil,
comment = nil
},
-- same for diameter values
diameter = {
overlay = nil,
horzBar = nil,
vertBar = nil,
qsBar = nil
},
statistic = {
trigger1 = nil,
trigger2 = nil,
trigger3 = nil,
cutOff = nil
},
-- just for processing we always want to perform a full analysis
processing = {
performFullAnalysis = true,
useImageDimensioning = false,
layerOriginal = true,
layerGrid = true,
layerResults = true,
layerMarker = true,
resISHorizontal = true,
resISVertical = true,
resISNonverified = true
},
36 of 44
-- we just want to export to Bitmaps
exports = {
toCSV = false,
toCSV_V4 = false,
toQSX = false,
toXML = false,
toHIFF = true,
toBMP = true,
toJPEG = false,
toHTML = false,
toX3D = false
}
}
-- list of files to be processed
batchFiles = {
"Image_01.XFF",
"Image_02.XFF",
"Image_03.XFF",
"Image_04.XFF",
"Image_05.XFF",
"Image_06.XFF"
}
-- comments may have more lines and contain also brackets like Lua's definitions
-- to use them we have to make some corrections
if batch.info.comment then
batch.info.comment = correct_brackets( batch.info.comment )
end
-- use the build-in command to process these files
processBatch()
-- should we terminate after processing?
-- host.terminate()
37 of 44
-------------------------------------------
-- how to process a single file with usage of the batch slot
function processSingleBatchFile( fName )
if host.openScan(fName) == 1 then
-- 1=Imagescan, 2=Blockscan, 3=Quickscan, other=Unknown
local sType = host.getScanType()
-- info
if batch.info.projectName then
host.setInfoProjectName(batch.info.projectName)
end
if batch.info.customer then
host.setInfoCustomerName(batch.info.customer)
end
if batch.info.location then
host.setInfoLocationName(batch.info.location)
end
if batch.info.operator then
host.setInfoOperatorName(batch.info.operator)
end
if batch.info.comment then
host.setInfoComment(batch.info.comment)
end
-- diameter
if sType == 3 then
if batch.diameter.qsBar then
host.setDiameterIndex(batch.diameter.qsBar)
end
else
if batch.diameter.horzBar then
host.setHorzontalDiameterIndex(batch.diameter.horzBar)
end
if batch.diameter.vertBar then
host.setVerticalDiameterIndex(batch.diameter.vertBar)
end
end
if batch.diameter.overlay then
host.setOverlayIndex(batch.diameter.overlay)
end
-- statistic values (Quickscan only)
if sType == 3 then
if batch.statistic.trigger1 then
host.setTrigger1(batch.statistic.trigger1)
end
if batch.statistic.trigger2 then
host.setTrigger2(batch.statistic.trigger2)
end
if batch.statistic.trigger3 then
host.setTrigger3(batch.statistic.trigger3)
end
if batch.statistic.cutOff then
host.setCutOff(batch.statistic.cutOff)
end
end
38 of 44
-- processing - if we want to export data we have to process anyway...
if batch.processing.performFullAnalysis
or batch.exports.toCSV
or batch.exports.toCSV_Corr
or batch.exports.toCSV_V4
or batch.exports.toQSX
or batch.exports.toXML
or batch.exports.toHIFF
or batch.exports.toX3D
then
host.performFullAnalysis()
end
if batch.processing.useImageDimensioning then
host.setImageRulerOn()
else
host.setImageRulerOff()
end
if batch.processing.layerOriginal then
host.showLayerOriginals()
else
host.hideLayerOriginals()
end
if batch.processing.layerGrid then
host.showLayerGrid()
else
host.hideLayerGrid()
end
if batch.processing.layerResults then
host.showLayerResults()
else
host.hideLayerResults()
end
if batch.processing.layerMarker then
host.showLayerMarker()
else
host.hideLayerMarker()
end
-- view results for Imagescans
if sType == 1 or sType == 2 then
if batch.processing.resISHorizontal then
host.showHorizontalBars()
else
host.hideHorizontalBars()
end
if batch.processing.resISVertical then
host.showVerticalBars()
else
host.hideVerticalBars()
end
if batch.processing.resISNonverified then
host.showNonverifiedBars()
else
host.hideNonverifiedBars()
end
end
39 of 44
-- exports
if batch.exports.toCSV then
host.exportToCSV()
end
if batch.exports.toCSV_Corr then
host.exportToCSV_Corrected()
end
if batch.exports.toCSV_V4 then
host.exportToCSV_V4()
end
if batch.exports.toQSX then
host.exportToQSX()
end
if batch.exports.toXML then
host.exportToXML()
end
if batch.exports.toHIFF then
host.exportToHIFF()
end
if batch.exports.toBMP then
host.exportToBMP()
end
if batch.exports.toJPEG then
host.exportToJPEG()
end
if batch.exports.toHTML then
host.exportToHTML()
end
if batch.exports.toX3D then
host.exportToX3D()
end
end
end
40 of 44
-------------------------------------------
-- how to process all files
function processBatch()
local oldFileName
local dirType = batch.dirType or 0
-- save old file
host.getScanDetails()
oldFileName = scan.currentFile
if dirType == 1 then
-- archive type
local numFiles = #batchFiles or 0
if numFiles > 0 then
for i, v in ipairs(batchFiles) do
local filename
if batch.dirName then
filename = batch.dirName .."\\" .. v
else
filename = v
end
processSingleBatchFile( filename )
end
end
else
-- directory type
if batch.dirName then
for file in lfs.dir(batch.dirName) do
if string.find( file:lower(), ".xff", 1, true ) then
local filename = batch.dirName .. "\\" .. file
processSingleBatchFile( filename )
end
end
end
end
-- restore old file
if oldFileName then
host.openScan(oldFileName)
end
end
41 of 44
Scripting the Map Software
-------------------------------------------------------------------------------
-- This Demo Script generates an example Imagescan Map from the Examples Folder
--
-- Demo written by Herwig Habenbacher on 2011-08-10
-- Use it at your own risk!
-------------------------------------------------------------------------------
-- we defines the overall size in rows and columns
local rows = 3
local colums = 4
-- a comment can be also set via scripting
local cmt = [[
Welcome to the Examples project generated by scripting!
]]
-- ask host for archive settings
host.getArchiveDetails()
local actPath = archive.examplesDir
-- or "C:\\Users\\Public\\Documents\\Hilti\\Profis\\Ferroscan\\Examples"
-- we are looking into this project
local project = "Prj99995"
host.newImagescanMap( actPath .. "\\" .. project .. "\\" ..
"Example_ImageMap_Script_generated.hae", rows, colums)
host.setProjectName("A Testproject")
host.setCustomerName("A Test Customer")
host.setLocationName("A Test Location")
host.setOperatorName("An integrated Test Script Programmer")
host.setComment(cmt)
--host.loadColorScheme("Bridge_Rusty.cls")
-- full map, a line contains a row
-- if we want to keep an entry empty, we insert nil as value
local aMap = {
{ "FS000091", "FS000092", "FS000095", "FS000096" },
{ "FS000111", nil, "FS000113", "FS000114" },
{ "FS000128", "FS000129", "FS000130", "FS000131" }
}
-- now we read the real files in
for i=1,rows do
for k=1,colums do
if aMap[i][k] then
-- we build the filename from examples path, project directory,
-- name and extension
host.insertImagescan( actPath .. "\\" .. project .. "\\" ..
aMap[i][k] .. ".iff", i, k)
end
end
end
42 of 44
-- we can also prepare our scene view...
host.actScene = {
-- some zoom settings if wanted
zoom = { doZoom = false, startPoint = { x = 500, y = 500 },
endPoint = { x = 2100, y = 1600 } },
-- which elements do we want to see?
view = { original = false, grid = true, marker = true,
horizontal = true, vertical = true, allBars = true },
-- depth and trigger values
display = { cutOff = 100.0, trigger = 30, rangeDepth = 40,
rangeThickness = 10, rangeOnly = false, showType = 0 },
-- colour palette
palette = {
deepBar = { color = { r = 128, g = 64, b = 64 } },
backGround = { color = { r = 0, g = 0, b = 0 } },
rangeSelect = { color = { r = 255, g = 0, b = 0 } },
depthColors = {
{ t = 20, color = { r = 255, g = 255, b = 0 } },
{ t = 25, color = { r = 241, g = 227, b = 0 } },
{ t = 30, color = { r = 227, g = 199, b = 0 } },
{ t = 35, color = { r = 213, g = 171, b = 0 } },
{ t = 45, color = { r = 199, g = 142, b = 0 } },
{ t = 55, color = { r = 185, g = 114, b = 0 } },
{ t = 70, color = { r = 171, g = 86, b = 0 } },
{ t = 85, color = { r = 157, g = 57, b = 0 } },
{ t = 100, color = { r = 143, g = 29, b = 0 } },
{ t = 120, color = { r = 128, g = 0, b = 0 } }
}
}
}
-- set the scene
host.addToScene("generated scene")
-- now we save the newly generated project
host.saveProject()
-- or save it under a new name
-- host.saveProjectAs( actPath .. "\\" .. project .. "\\" ..
-- "Example_IMap_Script_generated_New.hae" )
-- theoretically we can quit now our application -
-- uncomment if you want to try...
-- host.terminate()
43 of 44
Selected Examples Scripting the PC Software
Example 1:
You want to select all Quickscans in a given directory, set the diameter to 16mm (DIN488).
Process the data, export the results to CSV (for Excel), print the standard report and the statistic report.
---------------------------------------------------------------------------
-- some demos to show and explain scripting
--
-- Unsupported stuff - use it at your own risk!
--
-- THIS DEMO STARTS PRINTING WITHOUT QUESTION!
---------------------------------------------------------------------------
-- we use this directory as an example
local dirName =
"C:\\Users\\Public\\Documents\\Hilti\\PROFIS_Ferroscan\\Download\\Prj99998"
-- we check for a single file
function processSingleFile( fName )
if host.openScan(fName) == 1 then
-- 1=Imagescan, 2=Blockscan, 3=Quickscan, other=Unknown
local sType = host.getScanType()
-- we only process Quickscans
if sType == 3 then
-- the diameter index for a 16mm DIN488 rebar is 5
host.setDiameterIndex(5)
-- process the data
host.performFullAnalysis()
-- export results
host.exportToCSV()
-- print out
host.printAll()
host.printQSStatistics()
end
end
end
-- we search in the directory if we can find a scan
-- Ferroscan scans have the file extension "xff"
for file in lfs.dir(dirName) do
if string.find( file:lower(), ".xff", 1, true ) then
local filename = dirName .. "\\" .. file
processSingleFile( filename )
end
end
44 of 44
Example 2:
You want to select all Imagescans in a given directory.
Apply the correction for horizontal and vertical values.
Process the data, export the results to CSV (for Excel).
---------------------------------------------------------------------------
-- some demos to show and explain scripting
--
-- Unsupported stuff - use it at your own risk!
--
-- You want to select all Imagescans in a given directory,
-- Apply correction values for horizontal and vertical rebars.
-- Process the data, export the results to CSV (for Excel),
--
---------------------------------------------------------------------------
-- we use this directory as an example
local dirName =
"C:\\Users\\Public\\Documents\\Hilti\\PROFIS_Ferroscan\\Download\\Prj99996"
-- we check for a single file
function processSingleFile( fName )
if host.openScan(fName) == 1 then
-- 1=Imagescan, 2=Blockscan, 3=Quickscan, other=Unknown
local sType = host.getScanType()
-- we only process Imagescans
if sType == 1 then
-- process the data
host.performFullAnalysis()
-- set correction values (factor, offset [mm] )
host.setHorizontalCorrection( 1.02, 2.0 )
host.setVerticalCorrection( 0.98, -1.0 )
-- export results
host.exportToCSV_Corrected()
end
end
end
-- we search in the directory if we can find a scan
-- Ferroscan scans have the file extension "xff"
for file in lfs.dir(dirName) do
if string.find( file:lower(), ".xff", 1, true ) then
local filename = dirName .. "\\" .. file
processSingleFile( filename )
end
end