lineIntersectsObjs: Difference between revisions

From Bohemia Interactive Community
Jump to navigation Jump to search
mNo edit summary
(Add alternative syntax for running multiple intersections in parallel. Minor typo corrections. Reordered see also commands to be grouped and consistent across lineIntersects pages)
 
(76 intermediate revisions by 13 users not shown)
Line 1: Line 1:
{{Command|= Comments
{{RV|type=command
____________________________________________________________________________________________


| arma3 |= Game name
|game1= arma3
|version1= 1.10


|1.10|= Game version
|arg= global
____________________________________________________________________________________________


| Returns list of objects intersected by given line from ''begPos'' to ''endPos''. |= Description
|gr1= Math - Geometry
____________________________________________________________________________________________


| '''lineIntersectsObj'''s [begPos, endPos, withObj, ignoreObj, sortByDist, flags] |= Syntax
|descr= Returns a list of objects intersected by the line from ''begPos'' to ''endPos''. Since {{GVI|arma3|2.20|size= 0.75}}, there is an alternative syntax that does multiple checks at once, faster than multiple calls.


|p1= begPos: [[PositionASL]] - virtual line start |= Parameter 1
|s1= [[lineIntersectsObjs]] [begPos, endPos, ignoreObj1, ignoreObj2, sortByDistance, flags]
|p2= endPos: [[PositionASL]] - virtual line end |= Parameter 2
|p3= withObj: [[Object]] |=Parameter 3
|p4= ignoreObj: [[Object]] |= Parameter 4
|p5=  sortByDist: [[Boolean]] |= Parameter 5
|p6=  flags: [[Number]]:
<br/>1 - CF_ONLY_WATER
<br/>2 - CF_NEAREST_CONTACT
<br/>4 - CF_ONLY_STATIC
<br/>8 - CF_ONLY_DYNAMIC
<br/>16 - CF_FIRST_CONTACT
<br/>32 - CF_ALL_OBJECTS (Usable only with CF_FIRST_CONTACT and it will check one contact per object)
<br/>Flags can be combined: 2 + 4 = 6 - CF_NEAREST_OBJECT + CF_ONLY_STATIC|= Parameter 6


| [[Array]] - intersecting objects |= Return value
|p1= begPos: [[Array]] format [[Position#PositionASL|PositionASL]] - virtual line start
____________________________________________________________________________________________


____________________________________________________________________________________________
|p2= endPos: [[Array]] format [[Position#PositionASL|PositionASL]] - virtual line end


| [[lineIntersectsWith]], [[terrainIntersect]], [[lineIntersects]], [[intersect]]|= See also
|p3= ignoreObj1: [[Object]] - (Optional) - object to ignore


}}
|p4= ignoreObj2: [[Object]] - (Optional) - object to ignore
 
|p5= sortByDistance: [[Boolean]] - (Optional) - [[true]]: furthest object first, closest object last; [[false]]: unsorted
 
|p6= flags: [[Number]] - (Optional)
* 1 - CF_ONLY_WATER
* 2 - CF_NEAREST_CONTACT
* 4 - CF_ONLY_STATIC
* 8 - CF_ONLY_DYNAMIC
* 16 - CF_FIRST_CONTACT
* 32 - CF_ALL_OBJECTS (Usable only with CF_FIRST_CONTACT and it will check one contact per object)
Flags can be combined: 2 + 4 = 6 is CF_NEAREST_OBJECT + CF_ONLY_STATIC
 
|r1= [[Array]] of [[Object]]s - intersecting objects
 
|s2= [[lineIntersectsObjs]] [element1, element2, ...]
 
|s2since= arma3 2.20
 
|p21= elementN: [[Array]] format [begPos, endPos, ignoreObj1, ignoreObj2, sortByDistance, flags]
* begPos: [[Array]] format [[Position#PositionASL|PositionASL]] - virtual line start
* endPos: [[Array]] format [[Position#PositionASL|PositionASL]] - virtual line end
* ignoreObj1: [[Object]] - (Optional) - object to ignore
* ignoreObj2: [[Object]] - (Optional) - object to ignore
* sortByDistance: [[Boolean]] - (Optional) - [[true]]: furthest object first, closest object last; [[false]]: unsorted
* flags: [[Number]] - (Optional)
** 1 - CF_ONLY_WATER
** 2 - CF_NEAREST_CONTACT
** 4 - CF_ONLY_STATIC
** 8 - CF_ONLY_DYNAMIC
** 16 - CF_FIRST_CONTACT
** 32 - CF_ALL_OBJECTS (Usable only with CF_FIRST_CONTACT and it will check one contact per object)
Flags can be combined: 2 + 4 = 6 is CF_NEAREST_OBJECT + CF_ONLY_STATIC
 
|r2= [[Array]] format [result1, result2, ...] - each result is an [[Array]] of intersecting objects for the Nth element
 
|x1= <sqf>
data = [];
displayFunction = {
{
data set [_foreachindex, lineIntersectsObjs [eyePos player, ATLToASL screenToWorld [0.5, 0.5], objNull, objNull, false, _x]];
} forEach [1, 2, 4, 8, 16, 32];
 
hintSilent format ["ONLY_WATER: %1\nNEAREST_CONTACT: %2\nONLY_STATIC: %3\nONLY_DYNAMIC: %4\nFIRST_CONTACT: %5\nALL_OBJECTS: %6",
data select 0, data select 1, data select 2, data select 3, data select 4, data select 5];
};
 
["sample_id", "onEachFrame", "displayFunction"] call BIS_fnc_addStackedEventHandler;
// example display objects' array in the middle of the screen sorted by 6 flags
</sqf>


<h3 style="display:none">Notes</h3>
|x2= Alternative syntax to check intersections in parallel:
<dl class="command_description">
<sqf>
<!-- Note Section BEGIN -->
private _enemies = units opfor;
<!-- Note Section END -->
private _enemyDataArray = _enemies apply { [eyePos player, aimPos _x, player, _x, true] };
</dl>
private _result = lineIntersectsObjs _enemyDataArray;
</sqf>


<h3 style="display:none">Bottom Section</h3>
|seealso= [[lineIntersectsSurfaces]] [[lineIntersectsWith]] [[lineIntersects]] [[terrainIntersectASL]] [[terrainIntersectAtASL]] [[terrainIntersect]] [[intersect]] [[cursorObject]] [[cursorTarget]] [[checkVisibility]]
}}


[[Category:Scripting Commands Arma 3|{{uc:{{PAGENAME}}}}]]
{{Note
[[Category:Scripting Commands|{{uc:{{PAGENAME}}}}]]
|user= AgentRev
|timestamp= 20160329060700
|text= Distance sorting is relative to object model center, and not intersect position.
}}

Latest revision as of 02:07, 1 December 2024

Hover & click on the images for description

Description

Description:
Returns a list of objects intersected by the line from begPos to endPos. Since Arma 3 logo black.png2.20, there is an alternative syntax that does multiple checks at once, faster than multiple calls.
Groups:
Math - Geometry

Syntax

Syntax:
lineIntersectsObjs [begPos, endPos, ignoreObj1, ignoreObj2, sortByDistance, flags]
Parameters:
begPos: Array format PositionASL - virtual line start
endPos: Array format PositionASL - virtual line end
ignoreObj1: Object - (Optional) - object to ignore
ignoreObj2: Object - (Optional) - object to ignore
sortByDistance: Boolean - (Optional) - true: furthest object first, closest object last; false: unsorted
flags: Number - (Optional)
  • 1 - CF_ONLY_WATER
  • 2 - CF_NEAREST_CONTACT
  • 4 - CF_ONLY_STATIC
  • 8 - CF_ONLY_DYNAMIC
  • 16 - CF_FIRST_CONTACT
  • 32 - CF_ALL_OBJECTS (Usable only with CF_FIRST_CONTACT and it will check one contact per object)
Flags can be combined: 2 + 4 = 6 is CF_NEAREST_OBJECT + CF_ONLY_STATIC
Return Value:
Array of Objects - intersecting objects

Alternative Syntax

Syntax:
lineIntersectsObjs [element1, element2, ...]
Parameters:
elementN: Array format [begPos, endPos, ignoreObj1, ignoreObj2, sortByDistance, flags]
  • begPos: Array format PositionASL - virtual line start
  • endPos: Array format PositionASL - virtual line end
  • ignoreObj1: Object - (Optional) - object to ignore
  • ignoreObj2: Object - (Optional) - object to ignore
  • sortByDistance: Boolean - (Optional) - true: furthest object first, closest object last; false: unsorted
  • flags: Number - (Optional)
    • 1 - CF_ONLY_WATER
    • 2 - CF_NEAREST_CONTACT
    • 4 - CF_ONLY_STATIC
    • 8 - CF_ONLY_DYNAMIC
    • 16 - CF_FIRST_CONTACT
    • 32 - CF_ALL_OBJECTS (Usable only with CF_FIRST_CONTACT and it will check one contact per object)
Flags can be combined: 2 + 4 = 6 is CF_NEAREST_OBJECT + CF_ONLY_STATIC
Return Value:
Array format [result1, result2, ...] - each result is an Array of intersecting objects for the Nth element

Examples

Example 1:
data = []; displayFunction = { { data set [_foreachindex, lineIntersectsObjs [eyePos player, ATLToASL screenToWorld [0.5, 0.5], objNull, objNull, false, _x]]; } forEach [1, 2, 4, 8, 16, 32]; hintSilent format ["ONLY_WATER: %1\nNEAREST_CONTACT: %2\nONLY_STATIC: %3\nONLY_DYNAMIC: %4\nFIRST_CONTACT: %5\nALL_OBJECTS: %6", data select 0, data select 1, data select 2, data select 3, data select 4, data select 5]; }; ["sample_id", "onEachFrame", "displayFunction"] call BIS_fnc_addStackedEventHandler; // example display objects' array in the middle of the screen sorted by 6 flags
Example 2:
Alternative syntax to check intersections in parallel:
private _enemies = units opfor; private _enemyDataArray = _enemies apply { [eyePos player, aimPos _x, player, _x, true] }; private _result = lineIntersectsObjs _enemyDataArray;

Additional Information

See also:
lineIntersectsSurfaces lineIntersectsWith lineIntersects terrainIntersectASL terrainIntersectAtASL terrainIntersect intersect cursorObject cursorTarget checkVisibility

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
AgentRev - c
Posted on Mar 29, 2016 - 06:07 (UTC)
Distance sorting is relative to object model center, and not intersect position.