Including SVG manipulating color or rewrite in MP
Dear all, I have near to zero knowledge about MPgraphics, so I always use SVG files from various sources. I do something like this: \defineoverlay[pic][\externalfigure[form.svg][width=14em]] \defineframed [textcircledA] [ frame=off, strut=yes, rulethickness=0.0pt, background=pic, location=top,] \textcircledA{\externalfigure[icon.svg][width=280px]} The form.svg appears as background of icon.svg. Now I want to change the stroke color in the svg. It is very simple: <?xml version="1.0" encoding="UTF-8"?> <!-- Created with Inkscape (http://www.inkscape.org/) --> <svg width="20.887mm" height="17.613mm" version="1.1" viewBox="0 0 20.887 17.613" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(152.66 -101.94)"> <path d="m-150.94 114.93c-0.5424-1.3121-0.58209-2.9382 0.18256-5.2163 2.3566-7.0175 11.139-8.7098 15.878-3.0594 7.6978 8.7032-11.506 16.052-16.06 8.2756" fill="none" stroke="#99bcdb" stroke-linecap="round" stroke-width="2"/> </g> </svg> I can simply open it in inkscape set the color an save it under a meaningful filename, but I would like to set the color in the context file. I tried to define the overlay pic with \includesvgbuffer but I can't get it to work. \startbuffer[svg] <svg width="20.887mm" height="17.613mm" version="1.1" viewBox="0 0 20.887 17.613" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(152.66 -101.94)"> <path d="m-150.94 114.93c-0.5424-1.3121-0.58209-2.9382 0.18256-5.2163 2.3566-7.0175 11.139-8.7098 15.878-3.0594 7.6978 8.7032-11.506 16.052-16.06 8.2756" fill="none" stroke="MyColor" stroke-linecap="round" stroke-width="2"/> </g> </svg> \stopbuffer \defineoverlay[pic][\includesvgbuffer[svg][offset=1bp]] Nothing happens, no form appears in the overlay. I saw an example with \startstopuseMPgraphic in the Wiki. \startuseMPgraphic{MPtextcircle} path p; p := fullcircle xscaled OverlayWidth yscaled OverlayWidth; setbounds currentpicture to p ; % p:= p shifted (0,StrutDepth/2.7); draw p withpen pencircle scaled 25pt withcolor OverlayLineColor; \stopuseMPgraphic \defineoverlay[OLtextcircle][\useMPgraphic{MPtextcircle}] This works for me. Is it possible to use a svgbuffer in a overlay definition? Or do I have to convert the SVG code to MP? Is there a converter? TIA juh
Hi,
Not sure exactly what you are after, but this could work (I saved your
svg as juh.svg)
/Mikael
\startuseMPgraphic{juh}{juhcolor}
picture juh ;
juh := lmt_svg [
filename = "juh.svg",
origin = true ] ;
draw juh ysized OverlayHeight withcolor \MPvar{juhcolor} ;
\stopuseMPgraphic
\setupMPvariables[juh][juhcolor=darkred]
\defineoverlay[juh][\useMPgraphic{juh}]
\starttext
\framed[align=normal,width=7cm,background=juh]{\samplefile{ward}}
\setupMPvariables[juh][juhcolor=darkblue]
\framed[align=normal,width=7cm,background=juh]{\samplefile{ward}}
\stoptext
On Thu, Dec 12, 2024 at 4:57 PM juh+ntg-context--- via ntg-context
Dear all,
I have near to zero knowledge about MPgraphics, so I always use SVG files from various sources.
I do something like this:
\defineoverlay[pic][\externalfigure[form.svg][width=14em]] \defineframed [textcircledA] [ frame=off, strut=yes, rulethickness=0.0pt, background=pic, location=top,]
\textcircledA{\externalfigure[icon.svg][width=280px]}
The form.svg appears as background of icon.svg.
Now I want to change the stroke color in the svg.
It is very simple:
<?xml version="1.0" encoding="UTF-8"?> <!-- Created with Inkscape (http://www.inkscape.org/) --> <svg width="20.887mm" height="17.613mm" version="1.1" viewBox="0 0 20.887 17.613" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(152.66 -101.94)"> <path d="m-150.94 114.93c-0.5424-1.3121-0.58209-2.9382 0.18256-5.2163 2.3566-7.0175 11.139-8.7098 15.878-3.0594 7.6978 8.7032-11.506 16.052-16.06 8.2756" fill="none" stroke="#99bcdb" stroke-linecap="round" stroke-width="2"/> </g> </svg>
I can simply open it in inkscape set the color an save it under a meaningful filename, but I would like to set the color in the context file.
I tried to define the overlay pic with \includesvgbuffer but I can't get it to work.
\startbuffer[svg] <svg width="20.887mm" height="17.613mm" version="1.1" viewBox="0 0 20.887 17.613" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(152.66 -101.94)"> <path d="m-150.94 114.93c-0.5424-1.3121-0.58209-2.9382 0.18256-5.2163 2.3566-7.0175 11.139-8.7098 15.878-3.0594 7.6978 8.7032-11.506 16.052-16.06 8.2756" fill="none" stroke="MyColor" stroke-linecap="round" stroke-width="2"/> </g> </svg> \stopbuffer
\defineoverlay[pic][\includesvgbuffer[svg][offset=1bp]]
Nothing happens, no form appears in the overlay.
I saw an example with \startstopuseMPgraphic in the Wiki.
\startuseMPgraphic{MPtextcircle} path p; p := fullcircle xscaled OverlayWidth yscaled OverlayWidth; setbounds currentpicture to p ; % p:= p shifted (0,StrutDepth/2.7); draw p withpen pencircle scaled 25pt withcolor OverlayLineColor; \stopuseMPgraphic
\defineoverlay[OLtextcircle][\useMPgraphic{MPtextcircle}]
This works for me.
Is it possible to use a svgbuffer in a overlay definition?
Or do I have to convert the SVG code to MP?
Is there a converter?
TIA juh ___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@ntg.nl / https://mailman.ntg.nl/mailman3/lists/ntg-context.ntg.nl webpage : https://www.pragma-ade.nl / https://context.aanhet.net (mirror) archive : https://github.com/contextgarden/context wiki : https://wiki.contextgarden.net ___________________________________________________________________________________
Thanks a lot. Works for me.
Am 12. Dezember 2024 17:43:44 MEZ schrieb Mikael Sundqvist
Hi,
Not sure exactly what you are after, but this could work (I saved your svg as juh.svg)
/Mikael
\startuseMPgraphic{juh}{juhcolor}
picture juh ;
juh := lmt_svg [ filename = "juh.svg", origin = true ] ;
draw juh ysized OverlayHeight withcolor \MPvar{juhcolor} ;
\stopuseMPgraphic
\setupMPvariables[juh][juhcolor=darkred]
\defineoverlay[juh][\useMPgraphic{juh}]
\starttext
\framed[align=normal,width=7cm,background=juh]{\samplefile{ward}}
\setupMPvariables[juh][juhcolor=darkblue]
\framed[align=normal,width=7cm,background=juh]{\samplefile{ward}}
\stoptext
On Thu, Dec 12, 2024 at 4:57 PM juh+ntg-context--- via ntg-context
wrote: Dear all,
I have near to zero knowledge about MPgraphics, so I always use SVG files from various sources.
I do something like this:
\defineoverlay[pic][\externalfigure[form.svg][width=14em]] \defineframed [textcircledA] [ frame=off, strut=yes, rulethickness=0.0pt, background=pic, location=top,]
\textcircledA{\externalfigure[icon.svg][width=280px]}
The form.svg appears as background of icon.svg.
Now I want to change the stroke color in the svg.
It is very simple:
<?xml version="1.0" encoding="UTF-8"?> <!-- Created with Inkscape (http://www.inkscape.org/) --> <svg width="20.887mm" height="17.613mm" version="1.1" viewBox="0 0 20.887 17.613" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(152.66 -101.94)"> <path d="m-150.94 114.93c-0.5424-1.3121-0.58209-2.9382 0.18256-5.2163 2.3566-7.0175 11.139-8.7098 15.878-3.0594 7.6978 8.7032-11.506 16.052-16.06 8.2756" fill="none" stroke="#99bcdb" stroke-linecap="round" stroke-width="2"/> </g> </svg>
I can simply open it in inkscape set the color an save it under a meaningful filename, but I would like to set the color in the context file.
I tried to define the overlay pic with \includesvgbuffer but I can't get it to work.
\startbuffer[svg] <svg width="20.887mm" height="17.613mm" version="1.1" viewBox="0 0 20.887 17.613" xmlns="http://www.w3.org/2000/svg"> <g transform="translate(152.66 -101.94)"> <path d="m-150.94 114.93c-0.5424-1.3121-0.58209-2.9382 0.18256-5.2163 2.3566-7.0175 11.139-8.7098 15.878-3.0594 7.6978 8.7032-11.506 16.052-16.06 8.2756" fill="none" stroke="MyColor" stroke-linecap="round" stroke-width="2"/> </g> </svg> \stopbuffer
\defineoverlay[pic][\includesvgbuffer[svg][offset=1bp]]
Nothing happens, no form appears in the overlay.
I saw an example with \startstopuseMPgraphic in the Wiki.
\startuseMPgraphic{MPtextcircle} path p; p := fullcircle xscaled OverlayWidth yscaled OverlayWidth; setbounds currentpicture to p ; % p:= p shifted (0,StrutDepth/2.7); draw p withpen pencircle scaled 25pt withcolor OverlayLineColor; \stopuseMPgraphic
\defineoverlay[OLtextcircle][\useMPgraphic{MPtextcircle}]
This works for me.
Is it possible to use a svgbuffer in a overlay definition?
Or do I have to convert the SVG code to MP?
Is there a converter?
TIA juh ___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@ntg.nl / https://mailman.ntg.nl/mailman3/lists/ntg-context.ntg.nl webpage : https://www.pragma-ade.nl / https://context.aanhet.net (mirror) archive : https://github.com/contextgarden/context wiki : https://wiki.contextgarden.net ___________________________________________________________________________________
___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@ntg.nl / https://mailman.ntg.nl/mailman3/lists/ntg-context.ntg.nl webpage : https://www.pragma-ade.nl / https://context.aanhet.net (mirror) archive : https://github.com/contextgarden/context wiki : https://wiki.contextgarden.net ___________________________________________________________________________________
participants (2)
-
juh+ntg-context@mailbox.org
-
Mikael Sundqvist