lineIntersectsObjs: Difference between revisions

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


| arma3 |= Game name
|game1= arma3
|1.10|= Game version
|version1= 1.10
|arg= global|= Arguments in MP
____________________________________________________________________________________________


| Returns list of objects intersected by given line from ''begPos'' to ''endPos''. |DESCRIPTION=
|arg= global
____________________________________________________________________________________________


| '''lineIntersectsObjs''' [begPos, endPos, withObj, ignoreObj, sortByDistance, flags] |SYNTAX=
|gr1= Math - Geometry


|p1= begPos: [[PositionASL]] - virtual line start |PARAMETER1=
|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.
|p2= endPos: [[PositionASL]] - virtual line end |PARAMETER2=
|p3= withObj: [[Object]] |PARAMETER3=
|p4= ignoreObj: [[Object]] |PARAMETER4=
|p5= sortByDistance: [[Boolean]] - [[true]]: furthest object first, closest object last; [[false]]: unsorted |PARAMETER5=
|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 is CF_NEAREST_OBJECT + CF_ONLY_STATIC|PARAMETER6=


| [[Array]] of [[Object|Objects]] - intersecting objects |RETURNVALUE=
|s1= [[lineIntersectsObjs]] [begPos, endPos, ignoreObj1, ignoreObj2, sortByDistance, flags]
____________________________________________________________________________________________
 
|x1= <code>Sto = [];
|p1= begPos: [[Array]] format [[Position#PositionASL|PositionASL]] - virtual line start
Fn = {
 
  {
|p2= endPos: [[Array]] format [[Position#PositionASL|PositionASL]] - virtual line end
    Sto [[set]] [_foreachindex,[[lineIntersectsObjs]] [([[eyePos]] [[player]]),([[ATLtoASL]] [[screenToWorld]] [0.5,0.5]),[[objNull]],[[objNull]],[[false]],_x]];
 
  } [[forEach]] [1,2,4,8,16,32];
|p3= ignoreObj1: [[Object]] - (Optional) - object to ignore
  [[hintSilent]] [[format]] ["
 
  ONLY_WATER: %1,
|p4= ignoreObj2: [[Object]] - (Optional) - object to ignore
  NEAREST_CONTACT: %2,
 
  ONLY_STATIC: %3,
|p5= sortByDistance: [[Boolean]] - (Optional) - [[true]]: furthest object first, closest object last; [[false]]: unsorted
  ONLY_DYNAMIC: %4,
 
  FIRST_CONTACT: %5,
|p6= flags: [[Number]] - (Optional)
  ALL_OBJECTS: %6",
* 1 - CF_ONLY_WATER
  Sto [[select]] 0,Sto [[select]] 1,Sto [[select]] 2,Sto [[select]] 3,Sto [[select]] 4,Sto [[select]] 5];
* 2 - CF_NEAREST_CONTACT
};
* 4 - CF_ONLY_STATIC
["sample_id","onEachFrame","Fn"] [[call]] [[BIS_fnc_addStackedEventHandler]];
* 8 - CF_ONLY_DYNAMIC
//Example display objects' array in the middle of the screen sorted by 6 flags</code>|EXAMPLE1=  
* 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


| [[lineIntersectsSurfaces]], [[lineIntersectsWith]], [[terrainIntersect]], [[terrainIntersectASL]], [[terrainIntersectAtASL]], [[lineIntersects]], [[intersect]], [[cursorObject]], [[cursorTarget]], [[checkVisibility]] |SEEALSO=
|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];
};


<h3 style="display:none">Bottom Section</h3>
["sample_id", "onEachFrame", "displayFunction"] call BIS_fnc_addStackedEventHandler;
// example display objects' array in the middle of the screen sorted by 6 flags
</sqf>


[[Category:Scripting Commands Arma 3|{{uc:{{PAGENAME}}}}]]
|x2= Alternative syntax to check intersections in parallel:
[[Category:Scripting Commands|{{uc:{{PAGENAME}}}}]]
<sqf>
private _enemies = units opfor;
private _enemyDataArray = _enemies apply { [eyePos player, aimPos _x, player, _x, true] };
private _result = lineIntersectsObjs _enemyDataArray;
</sqf>


<!-- CONTINUE Notes -->
|seealso= [[lineIntersectsSurfaces]] [[lineIntersectsWith]] [[lineIntersects]] [[terrainIntersectASL]] [[terrainIntersectAtASL]] [[terrainIntersect]] [[intersect]] [[cursorObject]] [[cursorTarget]] [[checkVisibility]]
<dl class="command_description">
}}
<dd class="notedate">Posted on March 29, 2016 - 05:07 (UTC)</dd>
 
<dt class="note">[[User:AgentRevolution|AgentRev]]</dt>
{{Note
<dd class="note">
|user= AgentRev
Distance sorting is relative to object model center, and not intersect position.
|timestamp= 20160329060700
</dd>
|text= Distance sorting is relative to object model center, and not intersect position.
</dl>
}}
<!-- DISCONTINUE Notes -->

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.