lineIntersectsWith: Difference between revisions

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


| arma2oa |= Game name
|game1= arma2oa
|version1= 1.62


|1.62|= Game version
|game2= tkoh
____________________________________________________________________________________________
|version2= 1.00


| Returns objects intersecting with the virtual line from ''begPos'' to ''endPos''. By default resulting array of intersecting objects is unsorted. To sort by distance set ''sortByDistance'' param to [[true]]. <br><br>'''NOTE:''' Doesn't work under water.|= Description
|game3= arma3
____________________________________________________________________________________________
|version3= 0.50


| '''lineIntersectsWith''' [begPos, endPos, objIgnore1, objIgnore2, sortByDistance] |= Syntax
|arg= global


|p1= begPos: [[PositionASL]] - virtual line start |= Parameter 1
|gr1= Math - Geometry
|p2= endPos: [[PositionASL]] - virtual line end |= Parameter 2
|p3= objIgnore1: (optional) [[Object]] - object to ignore. When testing intersection from an object/unit/vehicle, pass that object here to prevent intersection inside of the object.|=Parameter 3
|p4= objIgnore2: (optional) [[Object]] - another object to ignore. When testing intersection of a line between two objects, pass the second object here to prevent intersection inside of it being reported|= Parameter 4
|p5= sortByDistance: (optional) [[Boolean]] - [[true]]: Sort by distance =&gt; furthermost object first, closest object last; [[false]]: unsorted |= Parameter 5


| [[Array]] - intersecting objects |= Return value
|descr= Returns objects intersecting with the virtual line from ''begPos'' to ''endPos''. By default, the resulting array of intersecting objects is unsorted (see ''[[#Syntax|sortByDistance]]'').
____________________________________________________________________________________________
{{Feature|informative|
* Does not work under water.
* Max hardcoded distance is 1000m.
}}
Since {{GVI|arma3|2.20|size= 0.75}}, there is an alternative syntax that does multiple checks at once, faster than multiple calls.
 
|s1= [[lineIntersectsWith]] [begPos, endPos, objIgnore1, objIgnore2, sortByDistance]
 
|p1= begPos: [[Array]] format [[Position#PositionASL|PositionASL]] - virtual line start
 
|p2= endPos: [[Array]] format [[Position#PositionASL|PositionASL]] - virtual line end


|x1= <code>_objects = [[lineIntersectsWith]] <nowiki>[</nowiki>[[eyePos]] [[player]], [[ATLtoASL]] [[screenToWorld]] [0.5,0.5]];</code> |= Example 1
|p3= objIgnore1: [[Object]] - (Optional) object to ignore. When testing intersections from an object/unit/vehicle, pass that object here to prevent intersections inside of the object.


|x2= Sort by distance: <code>_objects = [[lineIntersectsWith]] <nowiki>[</nowiki>[[eyePos]] [[player]], [[ATLtoASL]] [[screenToWorld]] [0.5,0.5], [[objNull]], [[objNull]], [[true]]];</code> |= Example 2
|p4= objIgnore2: [[Object]] - (Optional) another object to ignore. When testing intersections of a line between two objects, pass the second object here to prevent intersections inside of it being reported


|x3= Ignore objects: <code>_objects = [[lineIntersectsWith]] <nowiki>[</nowiki>[[eyePos]] [[player]], [[aimPos]] chopper, [[player]], chopper];</code> |= Example 3
|p5= sortByDistance: [[Boolean]] - (Optional) [[true]]: sort by '''desc'''ending distance (furthermost object first, closest object last); [[false]]: unsorted
____________________________________________________________________________________________


| [[lineIntersectsObjs]], [[intersect]], [[terrainIntersect]], [[terrainIntersectASL]], [[lineIntersects]] |= See also
|r1= [[Array]] - intersecting objects


}}
|s2= [[lineIntersectsWith]] [element1, element2, ...]
 
|s2since= arma3 2.20
 
|p21= elementN: [[Array]] format [begPos, endPos, objIgnore1, objIgnore2, sortByDistance]
* begPos: [[Array]] format [[Position#PositionASL|PositionASL]] - virtual line start
* endPos: [[Array]] format [[Position#PositionASL|PositionASL]] - virtual line end
* objIgnore1: [[Object]] - (Optional) object to ignore. When testing intersections from an object/unit/vehicle, pass that object here to prevent intersections inside of the object.
* objIgnore2: [[Object]] - (Optional) another object to ignore. When testing intersections of a line between two objects, pass the second object here to prevent intersections inside of it being reported
* sortByDistance: [[Boolean]] - (Optional) [[true]]: sort by '''desc'''ending distance (furthermost object first, closest object last); [[false]]: unsorted
 
|r2= [[Array]] format [result1, result2, ...] - each result is an [[Array]] of intersecting objects for the Nth element


<h3 style="display:none">Notes</h3>
|x1= <sqf>_objects = lineIntersectsWith [eyePos player, AGLToASL screenToWorld [0.5, 0.5]];</sqf>
<dl class="command_description">
<!-- Note Section BEGIN -->


<dd class="notedate">Posted on may 31, 2012 - 10:50 (CEST)
|x2= Sort by distance:
<dt class="note">'''[[User:Lou Montana|Lou Montana]]'''
<sqf>_objects = lineIntersectsWith [eyePos player, AGLToASL screenToWorld [0.5, 0.5], objNull, objNull, true];</sqf>
<dd class="note">Please note the difference :
*terrainIntersect
*terrainIntersectASL
*lineIntersect'''''s'''''
*lineIntersect'''''s'''''With
*lineIntersect'''''s'''''Objs
*intersect


<!-- Note Section END -->
|x3= Ignore objects:
</dl>
<sqf>_objects = lineIntersectsWith [eyePos player, aimPos chopper, player, chopper];</sqf>


<h3 style="display:none">Bottom Section</h3>
|x4= 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 = lineIntersectsWith _enemyDataArray;
</sqf>


[[Category:ArmA 2 OA: New Scripting Commands List|{{uc:{{PAGENAME}}}}]]
|seealso= [[lineIntersectsSurfaces]] [[lineIntersectsObjs]] [[lineIntersects]] [[terrainIntersect]] [[terrainIntersectASL]] [[terrainIntersectAtASL]] [[intersect]] [[cursorObject]] [[cursorTarget]] [[checkVisibility]]
[[Category:Scripting Commands ArmA2|{{uc:{{PAGENAME}}}}]]
}}
[[Category:Scripting Commands Arma 3|{{uc:{{PAGENAME}}}}]]
 
[[Category:Scripting Commands|{{uc:{{PAGENAME}}}}]]
{{Note
|user= Lou Montana
|timestamp= 20120531105000
|text= Please note the difference :
* terrainIntersect
* terrainIntersectASL
* lineIntersect'''''s'''''
* lineIntersect'''''s'''''With
* lineIntersect'''''s'''''Objs
* intersect
}}

Latest revision as of 02:04, 1 December 2024

Hover & click on the images for description

Description

Description:
Returns objects intersecting with the virtual line from begPos to endPos. By default, the resulting array of intersecting objects is unsorted (see sortByDistance).
  • Does not work under water.
  • Max hardcoded distance is 1000m.
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:
lineIntersectsWith [begPos, endPos, objIgnore1, objIgnore2, sortByDistance]
Parameters:
begPos: Array format PositionASL - virtual line start
endPos: Array format PositionASL - virtual line end
objIgnore1: Object - (Optional) object to ignore. When testing intersections from an object/unit/vehicle, pass that object here to prevent intersections inside of the object.
objIgnore2: Object - (Optional) another object to ignore. When testing intersections of a line between two objects, pass the second object here to prevent intersections inside of it being reported
sortByDistance: Boolean - (Optional) true: sort by descending distance (furthermost object first, closest object last); false: unsorted
Return Value:
Array - intersecting objects

Alternative Syntax

Syntax:
lineIntersectsWith [element1, element2, ...]
Parameters:
elementN: Array format [begPos, endPos, objIgnore1, objIgnore2, sortByDistance]
  • begPos: Array format PositionASL - virtual line start
  • endPos: Array format PositionASL - virtual line end
  • objIgnore1: Object - (Optional) object to ignore. When testing intersections from an object/unit/vehicle, pass that object here to prevent intersections inside of the object.
  • objIgnore2: Object - (Optional) another object to ignore. When testing intersections of a line between two objects, pass the second object here to prevent intersections inside of it being reported
  • sortByDistance: Boolean - (Optional) true: sort by descending distance (furthermost object first, closest object last); false: unsorted
Return Value:
Array format [result1, result2, ...] - each result is an Array of intersecting objects for the Nth element

Examples

Example 1:
_objects = lineIntersectsWith [eyePos player, AGLToASL screenToWorld [0.5, 0.5]];
Example 2:
Sort by distance:
_objects = lineIntersectsWith [eyePos player, AGLToASL screenToWorld [0.5, 0.5], objNull, objNull, true];
Example 3:
Ignore objects:
_objects = lineIntersectsWith [eyePos player, aimPos chopper, player, chopper];
Example 4:
Alternative syntax to check intersections in parallel:
private _enemies = units opfor; private _enemyDataArray = _enemies apply { [eyePos player, aimPos _x, player, _x, true] }; private _result = lineIntersectsWith _enemyDataArray;

Additional Information

See also:
lineIntersectsSurfaces lineIntersectsObjs lineIntersects terrainIntersect terrainIntersectASL terrainIntersectAtASL 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
Lou Montana - c
Posted on May 31, 2012 - 10:50 (UTC)
Please note the difference :
  • terrainIntersect
  • terrainIntersectASL
  • lineIntersects
  • lineIntersectsWith
  • lineIntersectsObjs
  • intersect