getPos: Difference between revisions

From Bohemia Interactive Community
Jump to navigation Jump to search
mNo edit summary
mNo edit summary
(8 intermediate revisions by the same user not shown)
Line 28: Line 28:
|descr= Returns object or location position. If the argument is the object, the return value is in format [[PositionAGLS]]. Z value is height over the surface underneath.<br>
|descr= Returns object or location position. If the argument is the object, the return value is in format [[PositionAGLS]]. Z value is height over the surface underneath.<br>
The alternative syntax gets the position given distance and heading away from provided object or position - the equivalent of [[BIS_fnc_relPos]].
The alternative syntax gets the position given distance and heading away from provided object or position - the equivalent of [[BIS_fnc_relPos]].
{{Feature | Important | Do not use this command to get an object's position in 3D format, as the Z value from this command is '''relative''' to the surface underneath, and there is not compatible setter command to use with it. Therefore the commonly misused {{ic|_obj1 setPos getPos _obj2}} code is '''absolutely wrong'''.}}
{{Feature | Important | Do not use this command to get an object's position in 3D format, as the Z value from this command is '''relative''' to the surface underneath, and there is no compatible setter command to use it with. Therefore the commonly misused code: {{ic|_obj1 [[setPos]] [[getPos]] _obj2}} is '''absolutely wrong'''.}}
{{Feature | Informative | The only '''correct''' use case for this command is to determine the placement height of an object. For example, to determine if a free-falling unit is close enough to the surface (including buildings) to deploy the parachute:
{{Feature | Informative | The only '''correct''' use case for this command is to determine the placement height of an object. For example, to determine if a free-falling unit is close enough to the surface (including buildings) to deploy the parachute:
<code>waitUntil {(getPos _parachute) select 2 < 200}; {{cc|deploy the parachute now!}}</code>}}
<code>[[waitUntil]] {([[getPos]] _parachute) [[select]] 2 [[a_less_b|<]] 200}; {{cc|deploy the parachute now!}}</code>}}
{{Feature | Important | This command is significantly '''slower''' than other position commands, because it has to calculate the surface below a position. See [[Code_Optimisation#getPos.2A_and_setPos.2A|this page]] for more details.}}  
{{Feature | Important | This command is significantly '''slower''' than other position commands, because it has to calculate the surface below a position. See [[Code_Optimisation#getPos.2A_and_setPos.2A|this page]] for more details.}}  
|s1= [[getPos]] object
|s1= [[getPos]] object
Line 58: Line 58:
|x1= <code>[[hintSilent]] [[str]] [[getPos]] [[player]];</code>
|x1= <code>[[hintSilent]] [[str]] [[getPos]] [[player]];</code>


|x2= [[getPos]] vs. other methods (over sea)
|x2= [[getPos]] vs. other methods (over sea). Pay attention to Z values:
<code>[[getPos]] ship; {{cc|[2412.01, 6036.33, -0.839965]}}
<code>[[getPos]] ship; {{cc|[2412.01, 6036.33, -0.839965]}}
[[getPosATL]] ship; {{cc|[2412.01, 6036.33, 19.4266]}}
[[getPosATL]] ship; {{cc|[2412.01, 6036.33, 19.4266]}}
Line 67: Line 67:
[[position]] ship; {{cc|[2412.01, 6036.33, -0.839965]}}</code>
[[position]] ship; {{cc|[2412.01, 6036.33, -0.839965]}}</code>


|x3= [[getPos]] vs. other methods (over land)
|x3= [[getPos]] vs. other methods (over land, on top of a 100m high building). Pay attention to Z values:
<code>[[getPos]] car; {{cc|[2508.64, 5681.47, 0.0609589]}}
<code>[[getPos]] car; {{cc|[2508.64, 5681.47, 0.0609589]}}
[[getPosATL]] car; {{cc|[2508.64, 5681.47, 0.0356369]}}
[[getPosATL]] car; {{cc|[2508.64, 5681.47, 100.0356369]}}
[[getPosASL]] car; {{cc|[2508.64, 5681.47, 71.718]}}
[[getPosASL]] car; {{cc|[2508.64, 5681.47, 171.718]}}
[[getPosASLW]] car; {{cc|[2508.64, 5681.47, 71.718]}}
[[getPosASLW]] car; {{cc|[2508.64, 5681.47, 171.718]}}
[[visiblePosition]] car; {{cc|[2508.64, 5681.47, 0.0609512]}}
[[visiblePosition]] car; {{cc|[2508.64, 5681.47, 0.0609512]}}
[[visiblePositionASL]] car; {{cc|[2508.64, 5681.47, 71.718]}}
[[visiblePositionASL]] car; {{cc|[2508.64, 5681.47, 171.718]}}
[[position]] car; {{cc|[2508.64, 5681.47, 0.0609589]}}</code>
[[position]] car; {{cc|[2508.64, 5681.47, 0.0609589]}}</code>


Line 88: Line 88:
<dd class="note">
<dd class="note">
<code>[[getPos]] obj [[select]] 2</code>
<code>[[getPos]] obj [[select]] 2</code>
might return the vertical position above ground level, but for a stacked object, it returns the vertical position above the object beneath it. The same problem exists for [[getPosASL]]. There was a {{ExternalLink|link= http://www.flashpoint1985.com/cgi-bin/ikonboard311/ikonboard.cgi?s=e587356595b907e91f96b8817d7f8a26;act=ST;f=71;t=57918|text= discussion}} thread in the BIS forums which suggested the use of the command [[modelToWorld]] instead to get around this issue where an absolute vertical position is required. ArmA Ver '''1.02'''.
might return the vertical position above ground level, but for a stacked object, it returns the vertical position above the object beneath it. The same problem existed for [[getPosASL]] ('''pre-Arma 2 games only'''). There was a {{ExternalLink|link= http://www.flashpoint1985.com/cgi-bin/ikonboard311/ikonboard.cgi?s=e587356595b907e91f96b8817d7f8a26;act=ST;f=71;t=57918|text= discussion}} thread in the BIS forums which suggested the use of the command [[modelToWorld]] instead to get around this issue where an absolute vertical position is required. ArmA Ver '''1.02'''.
</dd>
</dd>



Revision as of 13:23, 11 August 2021

Hover & click on the images for description

Description

Description:
Returns object or location position. If the argument is the object, the return value is in format PositionAGLS. Z value is height over the surface underneath.
The alternative syntax gets the position given distance and heading away from provided object or position - the equivalent of BIS_fnc_relPos.
Do not use this command to get an object's position in 3D format, as the Z value from this command is relative to the surface underneath, and there is no compatible setter command to use it with. Therefore the commonly misused code: _obj1 setPos getPos _obj2 is absolutely wrong.
The only correct use case for this command is to determine the placement height of an object. For example, to determine if a free-falling unit is close enough to the surface (including buildings) to deploy the parachute: waitUntil {(getPos _parachute) select 2 < 200}; // deploy the parachute now!
This command is significantly slower than other position commands, because it has to calculate the surface below a position. See this page for more details.
Groups:
Positions

Syntax 1

Syntax:
getPos object
Parameters:
object: Object
Return Value:
Array - format PositionAGLS

Syntax 2

Syntax:
getPos location
Parameters:
location: Location
Return Value:
Array - format [x,y,z], where z is -1 * getTerrainHeightASL at the location

Syntax 3

Syntax:
origin getPos [distance, heading]
Parameters:
origin: Object, Position2D or Position3D
distance: Number - distance from position
heading: Number - in which compass direction
Return Value:
Array - format [x,y,z], where z is land surface position in format PositionAGL

Examples

Example 1:
hintSilent str getPos player;
Example 2:
getPos vs. other methods (over sea). Pay attention to Z values: getPos ship; // [2412.01, 6036.33, -0.839965] getPosATL ship; // [2412.01, 6036.33, 19.4266] getPosASL ship; // [2412.01, 6036.33, -0.920066] getPosASLW ship; // [2412.01, 6036.33, -0.865981] visiblePosition ship; // [2412.02, 6036.33, -0.837952] visiblePositionASL ship; // [2412.02, 6036.33, -0.91798] position ship; // [2412.01, 6036.33, -0.839965]
Example 3:
getPos vs. other methods (over land, on top of a 100m high building). Pay attention to Z values: getPos car; // [2508.64, 5681.47, 0.0609589] getPosATL car; // [2508.64, 5681.47, 100.0356369] getPosASL car; // [2508.64, 5681.47, 171.718] getPosASLW car; // [2508.64, 5681.47, 171.718] visiblePosition car; // [2508.64, 5681.47, 0.0609512] visiblePositionASL car; // [2508.64, 5681.47, 171.718] position car; // [2508.64, 5681.47, 0.0609589]
Example 4:
Find position 100 metres and 45 degrees from player position:player getPos [100, 45];

Additional Information

See also:
getPosVisualgetRelPossetPossetPosAGLSpositiongetPosATLgetPosASLgetPosASLWvisiblePositionvisiblePositionASLgetMarkerPos

Notes

Report bugs on the Feedback Tracker and/or discuss them on the Arma Discord or on the Forums.
Only post proven facts here! Add Note
Posted on 16 Feb, 2007
Dr_Eyeball
getPos obj select 2 might return the vertical position above ground level, but for a stacked object, it returns the vertical position above the object beneath it. The same problem existed for getPosASL (pre-Arma 2 games only). There was a discussion (dead link) thread in the BIS forums which suggested the use of the command modelToWorld instead to get around this issue where an absolute vertical position is required. ArmA Ver 1.02.
Posted on 23 Nov, 2011
Tankbuster
You can use getPos and setPos on triggers.