lineIntersectsObjs: Difference between revisions
Jump to navigation
Jump to search
Lou Montana (talk | contribs) m (Text replacement - " " to " ") |
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) |
||
(45 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
{{RV|type=command | {{RV|type=command | ||
| arma3 | |game1= arma3 | ||
|1.10 | |version1= 1.10 | ||
|arg= global | |arg= global | ||
|gr1= Math - Geometry | |gr1= Math - Geometry | ||
| Returns list of objects intersected by | |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] | |||
|p1= begPos: [[Array]] format [[Position#PositionASL|PositionASL]] - virtual line start | |||
|p2= endPos: [[Array]] format [[Position#PositionASL|PositionASL]] - virtual line end | |||
|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 | ||
| [[Array]] | |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> | |||
|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]] | |||
[[ | }} | ||
{{Note | |||
|user= AgentRev | |||
|timestamp= 20160329060700 | |||
|text= Distance sorting is relative to object model center, and not intersect position. | |||
}} | |||
Distance sorting is relative to object model center, and not intersect position. | |||
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.