lineIntersectsObjs: Difference between revisions
| Lou Montana (talk | contribs) m (Text replacement - "<code>([^<]*)\[\[([a-zA-Z][a-zA-Z0-9_]+)\]\]([^<]*) *<\/code>" to "<code>$1$2$3</code>") | m (fixed alt syntax and example 4) | ||
| (27 intermediate revisions by 4 users not shown) | |||
| Line 3: | Line 3: | ||
| |game1= arma3 | |game1= arma3 | ||
| |version1= 1.10 | |version1= 1.10 | ||
| |arg= global | |arg= global | ||
| |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 in parallel, faster than multiple calls. | ||
| |s1= [[lineIntersectsObjs]] [begPos, endPos, ignoreObj1, ignoreObj2, sortByDistance, flags] | |s1= [[lineIntersectsObjs]] [begPos, endPos, ignoreObj1, ignoreObj2, sortByDistance, flags] | ||
| |p1= begPos: [[Array]] format [[Position#PositionASL|PositionASL]] - virtual line start | |p1= begPos: [[Array]] format [[Position#PositionASL|PositionASL]] - virtual line start | ||
| |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 | |||
| |p4= ignoreObj2: [[Object]] - object to ignore | |p3= ignoreObj1: [[Object]] - (Optional) - object to ignore | ||
| |p5= sortByDistance: [[Boolean]] - [[true]]: furthest object first, closest object last; [[false]]: unsorted | |||
| |p6= flags: [[Number]] | |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   | * 1 - CF_ONLY_WATER   | ||
| * 2 - CF_NEAREST_CONTACT   | * 2 - CF_NEAREST_CONTACT   | ||
| Line 25: | Line 31: | ||
| Flags can be combined: 2 + 4 = 6 is CF_NEAREST_OBJECT + CF_ONLY_STATIC | Flags can be combined: 2 + 4 = 6 is CF_NEAREST_OBJECT + CF_ONLY_STATIC | ||
| |r1= [[Array]] of [[Object| | |r1= [[Array]] of [[Object]]s - intersecting objects | ||
| |s2= [[lineIntersectsObjs]] <nowiki>[[</nowiki>element1, element2, ...<nowiki>]]</nowiki> | |||
| |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 17:41, 16 May 2025
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 in parallel, faster than multiple calls. 2.20, there is an alternative syntax that does multiple checks in parallel, 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.
 
	