You are on page 1of 44

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

You might also like