! # $ @ 0xff
A B C D E F G H I J K L O P Q R S T U V X
a b c d e f g  i  k  o  q r s t u v w y z

The eva(extended vector animater) file is made up of many bytes_blocks. Most of the blocks are structured as follows:

'#' nname
byte[0]byte[1]byte[2~(1+n)]
file head: producer's name.
see also: eva head

0xff 0xff
byte[0]byte[1]
file foot.

'b' 'i'0xff0xff'N'00 n ???
byte[0~5]byte[6~9]byte[10~(9+n)]
bigEndian32
Original, the 'O' is extern file, but it can be embed as bin resource.
see also: load file

'X'brush_fill_colorRef_0brush_fill_colorRef_1pen_colorRef
byte[0]byte[1~4]byte[5~8]byte[9~12]
Set the color of ngon.
Each colorRef use windows' define, [0]:r(ed), [1]:g(reen), [2]:b(lue), [3]:a(lpha)

EvaViewer use pen's colorRef.a as [windows api CreatePen() parameter pen_style]
  0≤a≤ 25:PS_SOLID -------
 26≤a≤ 76:PS_DASH - - - -
 77≤a≤127:PS_DASHDOTDOT_.._.._
128≤a≤178:PS_DASHDOT _._._._
179≤a≤229:PS_DOT .......
230≤a≤255:PS_NULL

 see also:
color_polyLine
line_pattern
color_polygon

'$'5enumcolorRef
byte[0]byte[1]byte[2]byte[3~6]
enum is
0:shadow color, 1:box's pen_color.

'P't16
byte[0]byte[1,2] (bigEndian16)
this page maybe display t16 centiSecond.

'L'n M x1 y1 x2 y2 xn yn
byte[0]byte[1]byte[2,3] byte[4,5]byte[6,7] byte[8,9]byte[10,11] byte[4n,4n+1]byte[4n+2,4n+3]
bigEndian16 * (2n+1)
Set the Mth(from the end) ngon to be polyLine.
This polyLine has n points,
the coordinate of them are set to be (x1,y1),(x2,y2),…(xn,yn).

 see also:
color_polyLine
color_polygon
poly_polygon
multiPage_polyPolygon

 note: behind the Animation operation,
this 'L' operation just describe a polyLine path,
do NOT set any ngon.


'R'M E new_x1 new_y1
byte[0]byte[1]byte[2] byte[3,4]byte[5,6]
bigEndian16 * 2
transform from the Mth(from the end) ngon, to the Eth(from the end) ngon with tRanslate(pan) postion.

If the coordinate of points in old Eth ngon are (x1,y1),(x2,y2),…(xn,yn).
  here we declare Δx=new_x1-x1, and Δy=new_y1-y1,
then coordinate of points in new ngon are (x1+Δx, y1+Δy), (x2+Δx, y2+Δy),…(xn+Δx, yn+Δy).
 see also: tRanslate or pan


'G'object_typeM
byte[0]byte[1]byte[2,3] (bigEndian)
move the Mth(from the end) object, Goto next page.
There will be some point's coordinate in following page, just goto them.
This flag is just a placeHolder.
 The object_type:2=ngon, 3=text, 7=displacement_calibration, 14=animation, [6],8,[9],11,12,13=command

 see also: keep_Going for (ngon,text)


'F'ME
byte[0]byte[1]byte[2,3] (bigEndian16)
transform from the Mth(from the end) ngon, to the Eth(from the end) ngon with same(uniForm) postion.

 see also: uniForm

's'M
byte[0]byte[1]
copy an ngon to here, it is same(uniform) as the Mth(from the end) ngon.

 see also: same

'v'version
byte[0]byte[1]
version of this eva file

'V'2version
byte[0]byte[1]byte[2,3] (bigEndian16)
version of this eva file

'I'4widthheight
byte[0]byte[1]byte[2,3]byte[4,5]
bigEndian16 * 2
declare the width and height of this eva Image

'O'nattrobject file name
byte[0]byte[1]byte[2]byte[3~(n+1)]
The extern Object file name has (n-1) bytes,
if n is 0, then no attribute or file name.

  And the attribute of this file is
0: midi file, 1:bmp file, 4:eva file(itself).

see also: load file

'S'nsticker name
byte[0]byte[1]byte[2~(n+1)]
export a Sticker(label).
Sticker's name has n bytes.

  see also: jump, time_jump

'T'10+n M left top right bottomtext string content
byte[0]byte[1]byte[2,3]
bigEndian16
byte[4,5]byte[6,7] byte[8,9]byte[10,11] byte[12~(n+11)]
bigEndian16 * 5
Set the Mth(from the end) text.
 This text has n bytes,
the coordinate of the text's edge are set as above (left,top,right,bottom).

see also: text

'H'11abiuboxheightwidthexternalLeadingkernStruckOut
byte[0]byte[1]byte[2]byte[3]byte[4,5]byte[6,7]byte[8,9]byte[10,11]byte[12]
bigEndian * 4
font Hintng

abiu = align_left?1:(align_right?2:0) + (bold?16:0) + (italic?32:0) + (underline?64:0)
box  = (box_brush?1:0) + (box_pen?8:0) + (text_shadow?16:0) + (box_shadow?33:0)

see also: font Hintng

'U'ME
byte[0]byte[1]byte[2,3] (bigEndian16)
pan from the Mth(from the end), to the Eth(from the end)text, it is same(eqUal) as the original text.

see also: equal

'u'M
byte[0]byte[1]
copy text to here, it is same(equal) as the Mth(from the end) text.
see also: equal

'@'4 M value
byte[0]byte[1]byte[2,3]byte[4,5]
bigEndian16 * 2
set the member value of the Mth(from the end) object15_queue, whose object_type=15.

'C'n 1st8bits2nd8bitsNth8bits
byte[0]byte[1]byte[2~(n+1)]
defining the shape at corners for polyline,
similar to "stroke-linejoin" in svg.
The Mth bit define the corner at the Mth point is round or mite.

'E'n 1st8bits2nd8bitsNth8bits
byte[0]byte[1]byte[2~(n+1)]
The Mth bit define something at the Mth point

'A'33 M cnt base motion
_attr
max_
layer
? ? x1 y1 r wd hd φ θ ψ
byte[0]byte[1]byte[2,3]byte[4]byte[5,6]byte[7]byte[8] byte[9,10] byte[11,12] byte[13,14] byte[15,16] byte[17,18] byte[19,20] byte[21,22] byte[23~26] byte[27~30] byte[31~34]
bigEndian16bigEndian16 bigEndian16 * 7 bigEndian32 * 3
Animation: When a [source page] declare it has datum frame(left,top,right,bottom) and export its page's sticker, then this evaViewer will

  1.Calculate the center coordinate in source page:
xcs=(left+right)/2,   ycs=(top+bottom)/2,   ws=(right-left)/2,   hs=(bottom-top)/2,  (//c means "center", s means "source")

  2.Calculate the center coordinate in this page itself:   xcd=x1+cos(φ)*r,   ycd=y1+sin(φ)*r,  (//c means "center", d means "dest")

  3.Affine transformation:
λ=x*(wd/ws)*cos(φ+θ) + y*(hd/hs)*cos(φ+ψ)
μ=x*(wd/ws)*sin(φ+θ) + y*(hd/hs)*sin(φ+ψ)

  4.Maping every all source page objects' point (xcs+x,   ycs+y)
to dest page objects' point (xcd+λ,   ycd+μ)

see also: nested

'!' 4 M
byte[0]byte[1]byte[2~5]
bigEndian32
set relation for the Mth(from the end) object

'J'nattrname
byte[0]byte[1]byte[2]byte[3~(n+1)]
  The name has (n-1) bytes,

If current obJect is midi, then the name is its file_path.

If current object is text, then the name is font's name, and attr is its charset.
see also: charset and font name.

If current object is animation, then the name is its sticker.
see also: nested

'D'nMlefttoprightbottomcmdpara-
meter
byte[0]byte[1]byte[2,3]byte[4,5]byte[6,7]byte[8,9]byte[10,11]byte[12]byte[13~(n+1)]
bigEndian16 *5
change the Mth(from the end) commanD.
 The cmd can be
 1:    cycle repeat para(bigEndian16) times,  see also: repeat
 2: pendulum repeat para(bigEndian16) times,  see also: repeat
 3: jump(to sticker),                         see also: jump
 4: begin midi[the para(bigEndian16)th file], see also: load file
    //in version 1.7 both evaViewer & acvi.dll, ...
    //...if(15≤n && (byte[15]||byte[16])){play forever;}

 5: stop midi[the para(bigEndian16)th file],  see also: load file
 6: begin sound[the para(bigEndian16)th file],see also: load file
 7: end sound[the para(bigEndian16)th file],  see also: load file
10: new an object, which object_type=12
11: zoom,      see also: zoom
12: current page option
13: timed jump, see also: timed jump
14: cancel Zoom
15: set tick_mode =backGround_begin, see also: back_ground
16: set frame_tick=para(bigEndian16)
17: set tick_mode =backGround_end,   see also: back_ground
18: begin wav(had been obsolete).
19: stop  wav(had been obsolete).
20: button jump,                     see also: button_jump
21: stop play(had been obsolete).
22: load the the para(bigEndian16)th file
    and stretchBlt it in the field [left,top,right,bottom] above
    see also: load file
23: load the the para(bigEndian16)th file
    and tile it in the field [left,top,right,bottom] above
    see also: load file
24: wait midi(had been obsolete).
25: wait wave(had been obsolete).
27: repeat n time
31: pause play(had been obsolete).
33: datum frame, see also: nested

'Q'4n+2M x1 y1 x2 y2 x3 y3 x4 y4 xn yn
byte[0]byte[1]byte[2,3] byte[4,5]byte[6,7] byte[8,9]byte[10,11] byte[12,13]byte[14,15] byte[16,17]byte[18,19] byte[4n,4n+1]byte[4n+2,4n+3]
bigEndian16 * (2n+1)
When an old object change to new object, this displacement_calibration(like color_calibration) describe the degree of change.
see also: displacement

'y'bevy,combination
byte[0]byte[1]
declare which bevy the object belong to


'i'bevy,combination
byte[0]evaViewer:byte[1]
acvi.dll: byte[1,2] (bigEndian)
declare which bevy the object belong to

'g'group,rank
byte[0]byte[1]
declare which group the object belong to.

disappear in evaViewer & acvi.dll(version 1.7),
only show in acvi.dll(version 1.0)

'k'group,rank
byte[0]byte[1,2] (bigEndian)
declare which group the object belong to.

disappear in evaViewer & acvi.dll(version 1.7),
only show in acvi.dll(version 1.0)

't'line_style
byte[0]byte[1]
style=(close_curve?2:0)
  +(begin→end?4:0)+(begin←end?8:0)
  +(ngon[normal brush]?32:0)+(ngon[center brush]?64:0)
  +(bezier_3x0? 1:0)//extend by leisureBamboo
  +(bezier_3x1?16:0)//extend by leisureBamboo

see also: arrow_style
note:
  bezier_3x0 means:
v = x3*a + 3*x2*(1-x)*b + 3*x*(1-x)2*c + (1-x)3*d,
where   v; a, b, c, d are vector. And x is float, 0≤x≤1.

  bezier_3x1 means:
v1 = x3*a + 3*x2*(1-x)*b + 3*x*(1-x)2*c + (1-x)3*d;
v2 = x3*e + 3*x2*(1-x)*f + 3*x*(1-x)2*g + (1-x)3*h;
v = y*v1 +(1-y)*v2;
where   v, a, b, c, d, e, f, g, h are vector.
And x,y are float, 0≤x≤1, 0≤y≤1.

'w'line_wide
byte[0]byte[1]
see also: thickness

'r'M+1
byte[0]byte[1]
reUse Mth(from the end) ngon's line_style and line_wide and color

see also: reUse

'K'8x1 y1 x2 y2
byte[0]byte[1] byte[2,3]byte[4,5]byte[6,7]byte[8,9]
bigEndian16 * 4
Trivert coordinate for GradientFill

see also: arrow_style

'a'itAlic
byte[0]byte[1]
History: set italic of hinting.
Had been obsolete.

'c'n
byte[0]byte[1]
change the byte_count of text(length),it means n in that.

see also: change byte count

'e'extra margin
byte[0]byte[1]
see also: change margin of text

'f'family
byte[0]byte[1]
The following extract is excerpted from winGdi.h.
family=1:FF_ROMAN, 2:FF_SWISS, 3:FF_MODERN,
  4:FF_SCRIPT, 5:FF_DECORATIVE

see also: font family

'o'box
byte[0]byte[1]
If (this eva file's Version ≤3)
  {it can change box of hinting;}
value=1:text_shadow, 2:box_brush, 3:box_shadow, 4:underline.

 But evaViewer maybe NOT display this eva file,
then user can see the file in evaEditer.

'd'direct
byte[0]byte[1]

'q'bevy
byte[0]byte[1]
the bevy of displacement_calibration

'z'hide
byte[0]byte[1]
hide or show object

'B'4??
byte[0]byte[1]byte[2,3]byte[4,5]
bigEndian16 * 2

'B'5brushhatch0
byte[0]byte[1]byte[2,3]byte[4,5]byte[6]
bigEndian16 * 2
Set the brush of ngon.//extend by leisureBamboo

brush = 0:BS_SOLID, 1:BS_NULL, 2:BS_HATCHED, 3:BS_PATTERN, 5:BS_DIB
if  (brush==BS_HATCHED)
    {hatch=0:HS_HORIZONTAL, 1:HS_VERTICAL, 2:HS_FDIAGONAL, 3:HS_BDIAGONAL, 4:HS_CROSS, 5:HS_DIAGCROSS}
elif(brush==BS_PATTERN || brush==BS_DIB)
    {hatch=file_enum;}//begin from 1

see also: brush_pattern

Back to menu