lineIntersectsObjs: Difference between revisions

From Bohemia Interactive Community
Jump to navigation Jump to search
m (Some wiki formatting)
(Add alternative syntax for running multiple intersections in parallel. Minor typo corrections. Reordered see also commands to be grouped and consistent across lineIntersects pages)
 
(One intermediate revision by one other user not shown)
Line 8: Line 8:
|gr1= Math - Geometry
|gr1= Math - Geometry


|descr= Returns a list of objects intersected by the line from ''begPos'' to ''endPos''.
|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.


|s1= [[lineIntersectsObjs]] [begPos, endPos, ignoreObj1, ignoreObj2, sortByDistance, flags]
|s1= [[lineIntersectsObjs]] [begPos, endPos, ignoreObj1, ignoreObj2, sortByDistance, flags]
Line 16: Line 16:
|p2= endPos: [[Array]] format [[Position#PositionASL|PositionASL]] - virtual line end
|p2= endPos: [[Array]] format [[Position#PositionASL|PositionASL]] - virtual line end


|p3= ignoreObj1: [[Object]] - object to ignore
|p3= ignoreObj1: [[Object]] - (Optional) - object to ignore


|p4= ignoreObj2: [[Object]] - object to ignore
|p4= ignoreObj2: [[Object]] - (Optional) - object to ignore


|p5= sortByDistance: [[Boolean]] - [[true]]: furthest object first, closest object last; [[false]]: unsorted
|p5= sortByDistance: [[Boolean]] - (Optional) - [[true]]: furthest object first, closest object last; [[false]]: unsorted


|p6= flags: [[Number]]
|p6= flags: [[Number]] - (Optional)
* 1 - CF_ONLY_WATER  
* 1 - CF_ONLY_WATER  
* 2 - CF_NEAREST_CONTACT  
* 2 - CF_NEAREST_CONTACT  
Line 32: Line 32:


|r1= [[Array]] of [[Object]]s - intersecting objects
|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>
|x1= <sqf>
Line 48: Line 69:
</sqf>
</sqf>


|seealso= [[lineIntersectsSurfaces]] [[lineIntersectsWith]] [[terrainIntersect]] [[terrainIntersectASL]] [[terrainIntersectAtASL]] [[lineIntersects]] [[intersect]] [[cursorObject]] [[cursorTarget]] [[checkVisibility]]
|x2= Alternative syntax to check intersections in parallel:
<sqf>
private _enemies = units opfor;
private _enemyDataArray = _enemies apply { [eyePos player, aimPos _x, player, _x, true] };
private _result = lineIntersectsObjs _enemyDataArray;
</sqf>
 
|seealso= [[lineIntersectsSurfaces]] [[lineIntersectsWith]] [[lineIntersects]] [[terrainIntersectASL]] [[terrainIntersectAtASL]] [[terrainIntersect]] [[intersect]] [[cursorObject]] [[cursorTarget]] [[checkVisibility]]
}}
}}



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.