drawIcon3D

From Bohemia Interactive Community
Revision as of 09:55, 12 February 2021 by Killzone Kid (talk | contribs)
Jump to navigation Jump to search
Hover & click on the images for description

Description

Description:
Description needed
Groups:
Interaction

Syntax

Syntax:
Syntax needed
Parameters:
[texture, color, position, width, height, angle, text, shadow, textSize, font, textAlign, drawSideArrows]: Array
texture: String - icon image
color: Array - icon color in Color (RGBA) format
position: Array - icon world position in PositionAGL format
width: Number - icon width
height: Number - icon height
angle: Number - icon rotation angle
text (Optional): String - text label to display next to icon. Default: "".
shadow (Optional): Number or Boolean - if number: 0 = none, 1 = shadow (not used in this context, used in UI context), 2 = outline; if boolean: true - outline, false - none. Default: none.
textSize (Optional): Number - the size of the text. Default: whatever the default size is set for the system.
font (Optional): String - font class name from CfgFontFamilies. Default: "RobotoCondensed",
textAlign (Optional): String - "left", "center", "right". Default: "center".
drawSideArrows (Optional): Boolean - true to draw arrows and the text label at edge of screen when icon moves off screen. Default: false.
Return Value:
Return value needed

Examples

Example 1:
Icon and text:addMissionEventHandler ["Draw3D", { drawIcon3D ["targetIcon.paa", [1,1,1,1], ASLToAGL getPosASL cursorTarget, 1, 1, 45, "Target", 1, 0.05, "TahomaB"]; }];
Example 2:
Just text: addMissionEventHandler ["Draw3D", { drawIcon3D ["", [1,0,0,1], ASLToAGL getPosASL cursorTarget, 0, 0, 0, "Target", 1, 0.05, "PuristaMedium"]; }];
Example 3:
iconPos = player getPos [10, 0] vectorAdd [0,0,2]; addMissionEventHandler ["draw3D", { drawIcon3D [ "\a3\ui_f\data\IGUI\Cfg\Radar\radar_ca.paa", [0,0,1,1], iconPos, 5, 5, directionVisual player, "COMPASS", 0, 0.3, "PuristaMedium", "center", true ]; }];

Additional Information

See also:
See also needed

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 August 31, 2013
Killzone_Kid
As command syntax indicates, this command expects icon position in format PositionAGL meaning that over the land it expects PositionATL and over the sea PositionASLW.

This command works well with addon textures, however getting it to display mission textures is a bit tricky. Follow this guide.
Posted on April 19, 2014
AgentRev
You should rely exclusively on modelToWorldVisual for a moving object's icon position if you want it to accurately stay at the correct height over the sea. It computes faster than ASLtoAGL.

Width, height, and textSize are proportional to the user's interface size, which can optionally be compensated against via size / (getResolution select 5)

Additionally, width and height are inversely proportional to the fovLeft and fovTop parameters from the user's ArmaProfile, and AFAIK those parameters are not retrievable via scripting. For example, a fovTop higher than the default value of 0.75 will make all 3D icons smaller vertically. I'm not sure if this is a bug or by design, however it is definitely annoying to take into account.
Posted on October 23, 2014 - 02:42 (UTC)
DreadedEntity
drawIcon3D and BIS_fnc_addStackedEventHandler work well together.

Using formatting commands with drawIcon3D will not work, instead, they will be added to the string.
["uniqueID", "onEachFrame", { drawIcon3D["myIcon.jpg", [1,1,1,0.5], getPos player, 1, 1, 0, format["%1\n%2", "Dreaded", "Entity"]]; }] call BIS_fnc_addStackedEventHandler; Shown text will be Dreaded\nEntity. (A3 1.32.127785)

The "text" parameter must be a string. You cannot use Structured_Text.
["uniqueID", "onEachFrame", { drawIcon3D [ "myIcon.jpg", [1,1,1,0.5], getPos player, 1, 1, 0, parseText format["<t size='1.25' font='PuristaLight' color='#ff0000'>%1%2</t>", Dreaded, Entity] ]; }] call BIS_fnc_addStackedEventHandler; (A3 1.32.127785)
Posted on November 13 (2014)
Iceman77
Here's a practical example combining both drawLine3D and drawIcon3D. Note: You may want to use visiblePosition instead of getPos for moving objects. DEADPILOTS = []; { if (getText (configfile >> "CfgVehicles" >> typeOf _x >> "textSingular") == "pilot") then { DEADPILOTS pushBack _x; }; } forEach allDeadMen; addMissionEventHandler ["Draw3D", { if ( { player distance _x <= 15 } count DEADPILOTS > 0 ) then { { _corpsePos = getPos _x; if (player distance _corpsePos <= 15) then { _line1_start = _corpsePos; _line1_end = [(_line1_start select 0), (_line1_start select 1), 0.5]; _line2_start = [(_line1_end select 0), (_line1_end select 1) + 0.5, (_line1_end select 2)]; drawLine3D [_line1_start, _line1_end, [0,0,0,0.5]]; drawLine3D [_line1_end, _line2_start, [0,0,0,0.5]]; drawIcon3D ["\a3\ui_f\data\gui\cfg\hints\BasicLook_ca.paa", [0,0,0,0.5], _line2_start, 0.75, 0.75, 0]; }; } forEach DEADPILOTS; }; }];
Posted on February 11, 2016 - 07:37 (UTC)
Ranwer
You can also use getPosWorld (for X and Y only, but not Z), which works splendid in script performance. Here is an example:
addMissionEventHandler ["Draw3D", {
_pos = getPosWorld player;
drawIcon3D ["a3\ui_f\data\gui\Rsc\RscDisplayArsenal\radio_ca.paa", [1,1,1,1], [(_pos select 0),(_pos select 1), 1], 0.8, 0.8, 0, (name player), 1, 0.0315, "EtelkaMonospacePro"];
}];