.PS
# InclepsDPV.m4 : Illustrating one way to import and overwrite jpg in svg
# A bit messy, but it works. This file has to be processed
# by m4 in the usual way and then twice by dpic, eg
# m4 svg.m4 DPVconfig.m4 InclepsDPV.m4 > InclepsDPV.pic
# dpic -v InclepsDPV.pic > InclepsDPV.svg
# dpic -v InclepsDPV.pic > InclepsDPV.svg
# The second requirement is that the result has to be inserted
# into the html document using the object class, e.g.,
#
# This is handled by the cfig macro in examples.htmx
# The double processing is needed because svg coordinates are to the right
# and down. We have to store the coordinates of the nw corner and use them
# on the second pass.
divert(-1)
######################################################################
# Macros to simplify inclusion and positioning of raster image files such
# as png or jpg or files with mime type of "image/svg+xml"
`svg_init_include([Unique_name])
Put this (once) before all drawing commands
in the diagram. It opens a [] block for the
total diagram and creates the file
Unique_name.dim (default DPVinsertTemp.dim).'
define(`svg_init_include',
`define(`M4IP_uniq',`ifelse(`$1',,DPVinsertTemp,`$1')')dnl
M4IP_NW: (0,0); m4IP_nw = 0; m4IP_lth = lthick
sh "touch M4IP_uniq.dim"
copy "M4IP_uniq.dim"
[ M4IP_NW: M4IP_NW; { move to M4IP_NW } ')
`svg_include(filename, wid, ht, [position],[attrib])
Insert bitmap at specified position; also create
an invis box of the same size and location.
arg1= path to image file
arg2= picture width in drawing units
arg3= picture height in drawing units
arg4= position attribute e.g.
Pic: svg_include(Incl.jpg,2,3, with .sw at (1,4))
arg5= additional svg image attributes in the sprintf
string, e.g.
clip-path=\"polygon(5%% 0%%, 100%% 0%%, 100%% 100%%, 5%% 100%%)\" (distances
in percent to top-left, top-right, bottom-right, bottom-left clip corners,
or in pixels) '
define(`svg_include',`box invis wid `$2' ht `$3' `$4'
define(`m4xpx',`(last box.w.x-M4IP_NW.x+m4IP_lth/2)/(1px__)')dnl
define(`m4ypx',`(M4IP_NW.y-last box.n.y+m4IP_lth/2)/(1px__)')dnl
define(`m4wdpx',`(`$2')/(1px__)')dnl
define(`m4htpx',`(`$3')/(1px__)')dnl
if m4IP_nw then { command sprintf(\
"", m4xpx,m4ypx,m4wdpx,m4htpx) } ')
`svg_end_include
Put this before .PE after all drawing commands.
It closes the [] block and writes to Unique_name.dim'
define(`svg_end_include',`] with .M4IP_NW at M4IP_NW
print sprintf("m4IP_nw=1; m4IP_lth=%g; M4IP_NW:(%g,%g)",lthick,\
last [].w.x+3*m4IP_lth/2, last [].n.y+3*m4IP_lth/2) > "M4IP_uniq.dim"
undefine(`M4IP_uniq') ')
######################################################################
divert(0)dnl
darrow_init
svg_init_include
# This jpg is 242 px x 321 px
Picture: svg_include(Incl.jpg, 242px__, 321px__, with .w at (1,0))
define(`backarrow',`darrow(`$1',,,2pt__,6pt__,6pt__,<-|)')
thinlines_
backarrow( from boxcoord(Picture,0.4,0.95) up 0.4 right 0.7 )
"Basket" wid 0.45 with .w at Here+(2bp__,0)
backarrow( from boxcoord(Picture,0.9,0.41) up 0.2 right 0.5 )
"Ball" wid 0.3 with .w at Here+(2bp__,0)
backarrow( from boxcoord(Picture,0.85,0.32) up 0.2 right 0.5 )
"Star" wid 0.3 with .w at Here+(2bp__,0)
"Player" wid 0.43 with .w at last "".w+(0,-0.15)
#for i=3 to 1 by -1 do {
# Picture: svg_include(Incl.jpg, i/4*242px__, i/4*321px__,
# with .nw at last box.nw+(0.125,-0.25)) }
# P2: svg_include(Incl.jpg, 242px__, 321px__,
# with .w at Picture.e+(1.25,0),
# clip-path=\"polygon(30 0, 100%% 0%%, 100%% 100%%, 30 321)\" )
svg_end_include
.PE