lineIntersectsObjs: Difference between revisions
Jump to navigation
Jump to search
Pabstmirror (talk | contribs) m (add optional tags) |
Pennyworth (talk | contribs) (Add alternative syntax for running multiple intersections in parallel. Minor typo corrections. Reordered see also commands to be grouped and consistent across lineIntersects pages) |
||
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 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]] [[ | |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
Description
- Description:
- Returns a list of objects intersected by the line from begPos to endPos. Since 2.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)
- 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)
- 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:
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
- Posted on Mar 29, 2016 - 06:07 (UTC)
- Distance sorting is relative to object model center, and not intersect position.