'#' | n | name |
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' | 0xff | 0xff | '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_0 | brush_fill_colorRef_1 | pen_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]
see also: color_polyLine line_pattern color_polygon |
'$' | 5 | enum | colorRef |
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_type | M | |
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' | M | E |
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' | 2 | version |
byte[0] | byte[1] | byte[2,3] (bigEndian16) |
version of this eva file |
'I' | 4 | width | height |
byte[0] | byte[1] | byte[2,3] | byte[4,5] |
bigEndian16 * 2 | |||
declare the width and height of this eva Image |
'O' | n | attr | object 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' | n | sticker 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 | bottom | text 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' | 11 | abiu | box | height | width | externalLeading | kern | StruckOut | |
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' | M | E |
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 | 1st8bits | 2nd8bits | … | Nth8bits |
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 | 1st8bits | 2nd8bits | … | Nth8bits |
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] |
bigEndian16 | bigEndian16 | 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' | n | attr | name |
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' | n | M | left | top | right | bottom | cmd | para- 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+2 | M | 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' | 8 | x1 | 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' | 5 | brush | hatch | 0 |
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 |