SvgSetDocumentXML: Difference between revisions

From Multi Theft Auto: Wiki
Jump to navigation Jump to search
No edit summary
mNo edit summary
Line 12: Line 12:


==Example==
==Example==
The example below shows how you can load an SVG from raw data (or path), manipulate the underlying XML document and then draw it with dxDrawImage via onClientRender.
The example below shows how you can load an SVG from raw data (or path), manipulate the underlying XML document and then draw it with [[dxDrawImage]] via [[onClientRender]].


'''IMPORTANT''': Depending on your implementation, callback usage may be necessary to ensure the SVG texture and XML document are ready.
'''IMPORTANT''': Depending on your implementation, callback usage may be necessary to ensure the SVG texture and XML document are ready.

Revision as of 18:21, 26 September 2021

Sets the underlying XML document of an SVG element.

Syntax

bool svgSetDocumentXML ( svg svgElement, xmlnode xmlDocument [, function callback ( bool didLoad ) ] )

Required Arguments

  • svgElement: The svg element you want to set the XML document of
  • xmlDocument: An xmlnode containing the data to be set on the SVG document

Returns

  • Returns true if successful, false otherwise

Example

The example below shows how you can load an SVG from raw data (or path), manipulate the underlying XML document and then draw it with dxDrawImage via onClientRender.

IMPORTANT: Depending on your implementation, callback usage may be necessary to ensure the SVG texture and XML document are ready.

-- This could also be a file, with the path provided to svgCreate
local rawSvgData = [[
    <svg viewBox="0 0 500 500" xmlns="http://www.w3.org/2000/svg">
        <circle cx="250" cy="250" r="250" fill="#0fc0fc" />
    </svg>
]]

local svg

function init()
    -- Create an SVG containing a circle, using the raw XML data above
    svg = svgCreate(500, 500, rawSvgData, function(didLoad)
        if (not didLoad) then -- SVG failed to load, so don't continue
            return 
        end

        onSvgLoad(svg)
    end)
end
addEventHandler("onClientResourceStart", resourceRoot, init)


-- Implement a callback for SVG load, to manipulate the underlying XML document
function onSvgLoad(svg)
    -- Get the XML document from our SVG
    local svgXML = svgGetDocumentXML(svg)
    
    -- Add a rect SVG node, positioned center of the document
    local rect = xmlCreateChild(svgXML, "rect")
    xmlNodeSetAttribute(rect, "x", "25%")
    xmlNodeSetAttribute(rect, "y", "25%")
    xmlNodeSetAttribute(rect, "width", "50%")
    xmlNodeSetAttribute(rect, "height", "50%")
    xmlNodeSetAttribute(rect, "fill", "#00749b")
    
    -- Apply our XML to the SVG, and start drawing via callback
    return svgSetDocumentXML(svg, svgXML, function()
        addEventHandler("onClientRender", root, render)
    end)
end

function render()
    local width, height = svgGetSize(svg)
    dxDrawImage(0, 0, width, height, svg, 0, 0, 0, tocolor(255, 255, 255), false)
end

Requirements

This template will be deleted.

See Also