summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/movie15
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2012-03-17 23:11:57 +0000
committerKarl Berry <karl@freefriends.org>2012-03-17 23:11:57 +0000
commit5af7debad1f9125b0812d7dd79946f36efa98ce8 (patch)
tree061eec6b3d0fb5128dfcf0f6081780a27cddb511 /Master/texmf-dist/tex/latex/movie15
parent898466bb2939d912a4168e1fb118101ef8a54d93 (diff)
rm movie15, requires acrobat (and replaced by media9)
git-svn-id: svn://tug.org/texlive/trunk@25679 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/movie15')
-rw-r--r--Master/texmf-dist/tex/latex/movie15/movie15.sty4380
1 files changed, 0 insertions, 4380 deletions
diff --git a/Master/texmf-dist/tex/latex/movie15/movie15.sty b/Master/texmf-dist/tex/latex/movie15/movie15.sty
deleted file mode 100644
index ab0b4b538a5..00000000000
--- a/Master/texmf-dist/tex/latex/movie15/movie15.sty
+++ /dev/null
@@ -1,4380 +0,0 @@
-% Copyright 2004--2008 Alexander Grahn
-%
-% This material is subject to the LaTeX Project Public License. See
-% http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html
-% for the details of that license.
-%
-% This package allows inclusion of multimedia content into PDF files
-% following Adobe's PDF-1.5 and 1.6 specifications.
-%
-
-\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{movie15}[2009/07/07]
-\RequirePackage{keyval}
-\RequirePackage{ifthen}
-\RequirePackage{ifpdf}
-\RequirePackage{ifdraft}
-
-\newboolean{@MXV@iiiDfeat} % enable 3D features from PDF-1.6 spec?
-\setboolean{@MXV@iiiDfeat}{false}%
-\newboolean{@MXV@iiid} %set to true if a 3D file is being embedded
-\newboolean{@MXV@draft} %according to global setting
-\newboolean{@MXV@@draft} %per inclusion setting
-
-\ifdraft{%globally set by document class
- \setboolean{@MXV@draft}{true}%
-}{%
- \setboolean{@MXV@draft}{false}%
-}%
-
-%override global setting
-\DeclareOption{draft}{%
- \setboolean{@MXV@draft}{true}%
-}
-\DeclareOption{final}{%
- \setboolean{@MXV@draft}{false}%
-}
-
-\DeclareOption{3D}{%
- \setboolean{@MXV@iiiDfeat}{true}%
-}
-
-\DeclareOption*{%
- \PackageWarning{movie15}{Unknown option \CurrentOption}
-}
-
-\ProcessOptions*\relax
-
-%testing for correct TeX version,
-\ifpdf
- \ifnum\pdftexversion<120
- \PackageError{movie15}{%
- pdfeTeX, version >= 1.20, required
- }{%
- Install a more recent version!
- }%
- \fi
-\fi
-
-\ifx\@undefined\pdfmdfivesum
- \def\pdfmdfivesum file #1{#1}
-\fi
-
-%for conditionals where \ifthenelse doesn't work
-\gdef\@MXV@if#1{\csname if#1\endcsname}%
-
-\newboolean{@MXV@beamer} %set to true if beamer class has been loaded
-%\newboolean{@MXV@powerdot} %the same for
-\newboolean{@MXV@presentation} %used with presentation making package?
-\newboolean{@MXV@hide} %contents hidden on the current slide?
-\@ifclassloaded{beamer}{%
- \setboolean{@MXV@beamer}{true}%
- \setboolean{@MXV@presentation}{true}%
-}{%
- \setboolean{@MXV@beamer}{false}%
- \setboolean{@MXV@presentation}{false}%
-}
-%\@ifclassloaded{powerdot}{%
-% \setboolean{@MXV@powerdot}{true}%
-% \setboolean{@MXV@presentation}{true}%
-%}{%
-% \setboolean{@MXV@powerdot}{false}%
-% \setboolean{@MXV@presentation}{false}%
-%}
-
-\AtBeginDocument{%
- \@ifpackageloaded{hyperref}{}{\@MXV@missing{hyperref}}%
-% \hypersetup{unicode}
- \ifHy@colorlinks% coloured (movieref-)link text instead of link border
- \gdef\@MXV@pdfborder{/Border [0 0 0]}%
- \else%
- \gdef\@MXV@pdfborder{}%
- \fi%
-}
-
-\RequirePackage{everyshi}%
-\newcount\@MXV@page% counter for absolute page number
-\EveryShipout{%
- \global\advance\@MXV@page by 1%
-}
-
-%define our own label making commands
-\def\@MXV@newlabel#1#2{{%
- \expandafter\xdef\csname#1\endcsname{#2}}}%
-
-\def\@MXV@getlabelvalue#1{%
- \expandafter\ifx\csname#1\endcsname\relax%
- undefined%
- \else%
- \csname#1\endcsname%
- \fi%
-}%
-
-%macro for writing labels to external *.aux file
-\def\@MXV@labeltoaux#1#2{%
- \@bsphack\protected@write\@auxout{}{%
- \string\@MXV@newlabel{#1}{#2}%
- \string\@MXV@newlabel{@#1@}{\@MXV@getlabelvalue{#1}}%
- }\@esphack%
- \ifthenelse{%
- \equal{\@MXV@getlabelvalue{#1}}{undefined}\OR%
- %double check that the value hasn't changed
- \NOT\equal{\@MXV@getlabelvalue{#1}}{\@MXV@getlabelvalue{@#1@}}%
- }{%
- \ifthenelse{\isundefined{\@MXV@warning}}{% issue warning only once, at end
- \gdef\@MXV@warning{}% of document
- \AtEndDocument{%
- \PackageWarningNoLine{movie15}{%
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\MessageBreak
- @@ Rerun to get object references right! @@\MessageBreak
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@}%
- }%
- }{}%
- }{}%
-}%
-%
-\ifpdf%
- %for storing pdf object numbers (must be counters)
- \newcount\@MXV@adict%
- \newcount\@MXV@aadict%
- %
- %returns pdf page object number
- \def\@MXV@pdfpageref#1{%
- \expandafter\ifx\csname#1\endcsname\relax%
- 0%
- \else%
- \expandafter\pdfpageref\csname#1\endcsname\space%
- \fi%
- }%
-\fi
-
-%counter for absolute number of inclusions,
-%used for labelling each annotation
-\newcount\@MXV@includes
-
-%counter for absolute number of movie players
-\newcount\@MXV@players
-
-%counter for absolute number of movierefs
-\newcount\@MXV@links
-
-%measuring things
-%textbox
-\newdimen\@MXV@width
-\newdimen\@MXV@height
-\newdimen\@MXV@depth
-\newdimen\@MXV@totalheight
-\newdimen\@MXV@@boxdepth
-%for centring the textbox within display box
-\newdimen\@MXV@traiselen
-\newdimen\@MXV@braiselen
-%for compatibility options
-\newdimen\@MXV@start
-\newdimen\@MXV@end
-
-%stores textbox given as argument to text option
-\newsavebox{\@MXV@textbox}
-
-%some booleans we need
-\newboolean{@MXV@autoplay}
-\newboolean{@MXV@autostop}
-\newboolean{@MXV@autoresume}
-\newboolean{@MXV@autoclose}
-\newboolean{@MXV@autopause}
-\newboolean{@MXV@mouse}%mouse interaction
-\newboolean{@MXV@inline}%inline movie data
-\newboolean{@MXV@attachment}%make embedded file extractable?
-\newboolean{@MXV@externalviewer}%if true, screen annot will be removed
-\newboolean{@MXV@url}
-\newboolean{@MXV@boxopt}%true if text option is set
-\newboolean{@MXV@textoverposter}
-\newboolean{@MXV@runposter}% render poster from movie at runtime
-\newboolean{@MXV@linkplay}% for \movieref command
-\newboolean{@MXV@linkpause}
-\newboolean{@MXV@linkresume}
-\newboolean{@MXV@linkstop}
-\newboolean{@MXV@linkclose}
-\newboolean{@MXV@linkreset}
-\newboolean{@MXV@issound}
-
-%macro to reset all macros and booleans
-\def\@MXV@reset{%
- \setboolean{@MXV@autoplay}{false}%
- \setboolean{@MXV@autostop}{true}%
- \setboolean{@MXV@autoresume}{false}%
- \setboolean{@MXV@autopause}{false}%
- \setboolean{@MXV@autoclose}{false}%
- \setboolean{@MXV@mouse}{false}%
- \setboolean{@MXV@inline}{true}%
- \setboolean{@MXV@attachment}{true}%
- \setboolean{@MXV@externalviewer}{false}%
- \setboolean{@MXV@issound}{false}%
- \setboolean{@MXV@url}{false}%
- \setboolean{@MXV@boxopt}{false}%
- \setboolean{@MXV@textoverposter}{true}%
- \setboolean{@MXV@runposter}{false}%
- \setboolean{@MXV@linkplay}{true}%
- \setboolean{@MXV@linkpause}{false}%
- \setboolean{@MXV@linkresume}{false}%
- \setboolean{@MXV@linkstop}{false}%
- \setboolean{@MXV@linkclose}{false}%
- \setboolean{@MXV@linkreset}{false}%
- \setboolean{@MXV@requirereopen}{false}%
- \ifthenelse{\boolean{@MXV@draft}}{%
- \setboolean{@MXV@@draft}{true}%
- }{%
- \setboolean{@MXV@@draft}{false}%
- }%
- %
- \gdef\@MXV@label{}% for movieref
- \gdef\@MXV@@label{}% for movieref
- \gdef\@MXV@mime{@MXV@auto}%
- \gdef\@MXV@player{}%
- \gdef\@MXV@fsentry{}%
- \gdef\@MXV@repeat{}%
- \gdef\@MXV@@repeat{}%
- \gdef\@MXV@volume{100}%
- \gdef\@MXV@@volume{}%
- \gdef\@MXV@ctrls{}%
- \gdef\@MXV@@ctrls{}%
- \gdef\@MXV@palindrome{}%
- \gdef\@MXV@rate{}%
- \gdef\@MXV@startat{}%
- \gdef\@MXV@@startat{}%
- \gdef\@MXV@endat{}%
- \gdef\@MXV@poevent{}%
- \gdef\@MXV@pcevent{}%
- \gdef\@MXV@box##1##2##3{\raisebox{0pt}[##2][##3]{\makebox[##1]{}}}%
- \setlength{\@MXV@depth}{0pt}%
- \setlength{\@MXV@height}{0pt}%
- \setlength{\@MXV@width}{0pt}%
- \setlength{\@MXV@braiselen}{0pt}%
- \setlength{\@MXV@traiselen}{0pt}%
- \gdef\@MXV@boxdepth{}%
- \gdef\@MXV@boxheight{}%
- \gdef\@MXV@boxwidth{}%
- %
- \ifthenelse{\boolean{@MXV@iiiDfeat}}{%
- \setboolean{@MXV@iiid}{false}%
- \gdef\@MXV@aac{30}% aperture angle of camera
- \gdef\@MXV@roll{0}% camera roll angle
- \gdef\@MXV@defaultbg{1 1 1}%
- \gdef\@MXV@background{/BG<</CS/DeviceRGB/C[1 1 1]>>}%
- \gdef\@MXV@defaultlights{}%
- \gdef\@MXV@lights{}%
- \gdef\@MXV@defaultrender{Solid}%
- \gdef\@MXV@render{/RM <</Subtype/Solid>>}%
- \gdef\@MXV@naentry{}% %takes array of Node dicts
- \gdef\@MXV@saentry{}% %takes array of cross section dicts
- \gdef\@MXV@jscriptiiidfile{}%
- \gdef\@MXV@coo{0 0 0}% centre of orbit
- \gdef\@MXV@ctoc{0 -1 0}% centre of orbit to camera vector
- \gdef\@MXV@roo{0}% radius of orbit
- \gdef\@MXV@viewsfile{}% file containing views of the 3D object
- \gdef\@MXV@viewsfileii{}%file containing views of the 3D object (new format)
- \setboolean{@MXV@viewsprovided}{false}%
- \setboolean{@MXV@defaultviewprovided}{false}%
- \gdef\@MXV@iiidview{}%
- \gdef\@MXV@iiidtoolb{/TB false}% don't show toolbar by default
- \gdef\@MXV@iiidia{}% 3D interactive by default
- \gdef\@MXV@calc{}% camera aperture for coo and roo calculation
- \setboolean{@MXV@iiidgetview}{false}%
- \gdef\@MXV@iiidopt{}% option string to be passed to internal macro
- \setboolean{@MXV@resource}{false}%
- \gdef\@MXV@resourcetree{}% name tree of embedded 3D resources
- \xdef\@MXV@animstyle{}%
- \gdef\@MXV@iiidpalindrome{/Subtype/Linear}% forward
- \gdef\@MXV@iiidrate{}% animation speed
- \global\@MXV@iiidrepeat=-1% repeat count
- }{}%
-}%
-
-%missing package error message
-\def\@MXV@missing#1{%
- \PackageError{movie15}{%
- Package `#1' has not been loaded yet
- }{%
- Put the line `\protect\usepackage{#1}' somewhere after
- `\protect\usepackage{movie15}' to the preamble of your
- document!
- }%
-}
-
-%3D-need-be-enabled error message
-\def\@MXV@neediiiD{%
- \PackageError{movie15}{%
- If you wish to embed 3D objects, enable the\MessageBreak
- 3D feature first by passing option `3D' to movie15!\MessageBreak
- Make sure the `fp' package for fixed point calculus\MessageBreak
- is installed in your TeX system
- }{Package `fp' is available from CTAN.}%
-}
-
-%macro to guess the mime type of the media file
-\def\@MXV@guessmime#1#2{%
- \ifthenelse{\equal{#2}{aiff}\OR\equal{#2}{AIFF}\OR%
- \equal{#2}{aif}\OR\equal{#2}{AIF}\OR%
- \equal{#2}{aifc}\OR\equal{#2}{AIFC}}{%
- \gdef\@MXV@mime{audio/aiff}%
- }{%
- \ifthenelse{\equal{#2}{wav}\OR\equal{#2}{WAV}}{%
- \gdef\@MXV@mime{audio/wav}%
- }{%
- \ifthenelse{\equal{#2}{wma}\OR\equal{#2}{WMA}}{%
- \gdef\@MXV@mime{audio/x-ms-wma}%
- }{%
- \ifthenelse{\equal{#2}{wmv}\OR\equal{#2}{WMV}}{%
- \gdef\@MXV@mime{video/x-ms-wmv}%
- }{%
- \ifthenelse{\equal{#2}{au}\OR\equal{#2}{AU}\OR%
- \equal{#2}{snd}\OR\equal{#2}{SND}}{%
- \gdef\@MXV@mime{audio/basic}%
- }{%
- \ifthenelse{\equal{#2}{mid}\OR\equal{#2}{MID}\OR%
- \equal{#2}{rmi}\OR\equal{#2}{RMI}}{%
- \gdef\@MXV@mime{audio/midi}%
- }{%
- \ifthenelse{\equal{#2}{mov}\OR\equal{#2}{MOV}\OR%
- \equal{#2}{qt}\OR\equal{#2}{QT}}{%
- \gdef\@MXV@mime{video/quicktime}%
- }{%
- \ifthenelse{\equal{#2}{mp3}\OR\equal{#2}{MP3}\OR%
- \equal{#2}{m3u}\OR\equal{#2}{M3U}}{%
- \gdef\@MXV@mime{audio/x-mp3}%
- }{%
- \ifthenelse{\equal{#2}{mp4}\OR\equal{#2}{MP4}}{%
- \gdef\@MXV@mime{video/mp4}%
- }{%
- \ifthenelse{\equal{#2}{avi}\OR\equal{#2}{AVI}}{%
- \gdef\@MXV@mime{video/avi}%
- }{%
- \ifthenelse{\equal{#2}{gif}\OR\equal{#2}{GIF}}{%
- \gdef\@MXV@mime{image/gif}%
- }{%
- \ifthenelse{\equal{#2}{mpeg}\OR\equal{#2}{MPEG}\OR%
- \equal{#2}{mpg}\OR\equal{#2}{MPG}}{%
- \gdef\@MXV@mime{video/mpeg}%
- }{%
- \ifthenelse{\equal{#2}{smil}\OR\equal{#2}{SMIL}}{%
- \gdef\@MXV@mime{application/smil}%
- }{%
- \ifthenelse{\equal{#2}{swf}\OR\equal{#2}{SWF}}{%
- \gdef\@MXV@mime{application/x-shockwave-flash}%
- }{%
- \ifthenelse{\equal{#2}{prc}\OR\equal{#2}{PRC}}{%
- \ifthenelse{\boolean{@MXV@iiiDfeat}}{%
- \setboolean{@MXV@iiid}{true}%
- \gdef\@MXV@mime{model/prc}% (unofficial)
- \gdef\@MXV@iiidsubtype{PRC}%
- }{%
- \@MXV@neediiiD%
- }%
- }{%
- \ifthenelse{\equal{#2}{u3d}\OR\equal{#2}{U3D}}{%
- \ifthenelse{\boolean{@MXV@iiiDfeat}}{%
- \setboolean{@MXV@iiid}{true}%
- \gdef\@MXV@mime{model/u3d}% (unofficial)
- \gdef\@MXV@iiidsubtype{U3D}%
- }{%
- \@MXV@neediiiD%
- }%
- }{%
- \ifthenelse{\equal{#2}{ra}\OR\equal{#2}{RA}}{
- \gdef\@MXV@mime{audio/vnd.rn-realaudio}%
- }{%
- \ifthenelse{%
- \equal{#2}{rv}\OR\equal{#2}{RV}\OR
- \equal{#2}{rm}\OR\equal{#2}{RM}%
- }{%
- \gdef\@MXV@mime{application/vnd.rn-realmedia}%
- }{%
- \PackageError{movie15}{%
- I couldn't determine MIME type of file:\MessageBreak`#1':\MessageBreak
- Unknown file name extension: `#2'
- }{%
- When using media files of unknown type or with a\MessageBreak
- non-standard file name extension, the MIME type must\MessageBreak
- explicitly be specified. Try option `mimetype=<mime type>'!
- }%
- }}}}}}}}}}}}}}}}}}%
-}
-
-%sets @MXV@issound boolean
-\def\@MXV@@issound#1/#2:{% argument: \@MXV@mime.
- \def\@MXV@firstarg{#1}%
- \def\@MXV@audio{audio}%
- \ifx\@MXV@firstarg\@MXV@audio%
- \setboolean{@MXV@issound}{true}%
- \fi%
-}
-
-%draft box
-\def\@MXV@draftbox#1#2#3#4{%width height depth filename
- \edef\@MXV@oldfboxsep{\the\fboxsep}%
- \setlength{\fboxsep}{-\fboxrule}%
- \framebox[#1][l]{%
- \vrule width 0pt height #2 depth #3%
- \edef\@tempa{#4}%
- \raisebox{\depth}[0pt][0pt]{ \ttfamily\expandafter\strip@prefix\meaning\@tempa}%
- }%
- \setlength{\fboxsep}{\@MXV@oldfboxsep}%
-}
-
-\ifthenelse{\boolean{@MXV@iiiDfeat}}{% 3D related definitions and macros
- \RequirePackage{fp}% needed for fixed point calculus
- \newread\@MXV@@viewsfile% file handle for views file
- \newboolean{@MXV@eof}%
- \newcount\@MXV@viewscount%counter for number of 3D views per inclusion
- \newboolean{@MXV@viewsprovided}%3d views file provided?
- \newboolean{@MXV@iiidgetview}% print current 3D settings?
- \newboolean{@MXV@defaultviewprovided}%default 3D view provided?
- \newboolean{@MXV@resource}%3d resource file provided?
- \ifpdf\else
- \newcount\@MXV@rescount% number of embedded resource files
- \newcount\@MXV@nodecount% number of node dicts
- \newcount\@MXV@cscount% number of cross section dicts
- \fi
- \newcount\@MXV@iiidrepeat% play count
- \newcount\@MXV@iiidoncurpage%index of 3D annot on current page
- \global\@MXV@iiidoncurpage=0%
- \gdef\@MXV@oldpage{0}% needed together with previous counter
-
- %macro for building the transformation matrix
- \def\@MXV@ciiwmatrix#1 #2 #3 #4 #5 #6 #7 #8 {%
- % #1,#2,#3 centre of orbit coordinates (coo)
- % #4,#5,#6 centre of orbit to camera direction vector (c2c)
- % #7 orbital radius (roo)
- % #8 camera roll (roll)
- %view vector (opposite to c2c)
- \FPupn\@MXV@viewx{#4 neg}%
- \FPupn\@MXV@viewy{#5 neg}%
- \FPupn\@MXV@viewz{#6 neg}%
- %normalize view vector
- \FPupn\@MXV@modulo{\@MXV@viewx{} copy mul %
- \@MXV@viewy{} copy mul + %
- \@MXV@viewz{} copy mul + 2 swap root%
- }%
- \FPupn\@MXV@viewx{\@MXV@viewx{} \@MXV@modulo{} div}%
- \FPupn\@MXV@viewy{\@MXV@viewy{} \@MXV@modulo{} div}%
- \FPupn\@MXV@viewz{\@MXV@viewz{} \@MXV@modulo{} div}%
- %camera roll
- \FPupn\@MXV@sinroll{#8 180.0 div \FPpi{} mul sin}%
- \FPupn\@MXV@cosroll{#8 180.0 div \FPpi{} mul cos}%
- %
- %top and bottom views
- \FPupn\@MXV@leftx{-1.0}%
- \FPupn\@MXV@lefty{0.0}%
- \FPupn\@MXV@leftz{0.0}%
- %
- \FPifneg\@MXV@viewz% top view
- %up-vector
- \FPupn\@MXV@upx{0.0}%
- \FPupn\@MXV@upy{1.0}%
- \FPupn\@MXV@upz{0.0}%
- \else% bottom view
- %up-vector
- \FPupn\@MXV@upx{0.0}%
- \FPupn\@MXV@upy{-1.0}%
- \FPupn\@MXV@upz{0.0}%
- \fi%
- \FPupn\@MXV@sumxy{\@MXV@viewx{} abs \@MXV@viewy{} abs add}%
- \FPifeq\@MXV@sumxy{0}\else% other views than top and bottom
- %up-vector = up_world - (up_world dot view) view
- \FPupn\@MXV@upx{\@MXV@viewz{} \@MXV@viewx{} mul neg}%
- \FPupn\@MXV@upy{\@MXV@viewz{} \@MXV@viewy{} mul neg}%
- \FPupn\@MXV@upz{\@MXV@viewz{} \@MXV@viewz{} mul neg 1.0 add}%
- %normalize up-vector
- \FPupn\@MXV@modulo{\@MXV@upx{} copy mul \@MXV@upy{} copy %
- mul + \@MXV@upz{} copy mul + 2 swap root}%
- \FPupn\@MXV@upx{\@MXV@upx{} \@MXV@modulo{} div}%
- \FPupn\@MXV@upy{\@MXV@upy{} \@MXV@modulo{} div}%
- \FPupn\@MXV@upz{\@MXV@upz{} \@MXV@modulo{} div}%
- %left vector = up x view
- \FPupn\@MXV@leftx{\@MXV@viewz{} \@MXV@upy{} mul %
- \@MXV@viewy{} \@MXV@upz{} mul sub}%
- \FPupn\@MXV@lefty{\@MXV@viewx{} \@MXV@upz{} mul %
- \@MXV@viewz{} \@MXV@upx{} mul sub}%
- \FPupn\@MXV@leftz{\@MXV@viewy{} \@MXV@upx{} mul %
- \@MXV@viewx{} \@MXV@upy{} mul sub}%
- %normalize left vector
- \FPupn\@MXV@modulo{\@MXV@leftx{} copy mul \@MXV@lefty{} %
- copy mul + \@MXV@leftz{} copy mul + 2 swap root}%
- \FPupn\@MXV@leftx{\@MXV@leftx{} \@MXV@modulo{} div}%
- \FPupn\@MXV@lefty{\@MXV@lefty{} \@MXV@modulo{} div}%
- \FPupn\@MXV@leftz{\@MXV@leftz{} \@MXV@modulo{} div}%
- \fi%
- %apply camera roll
- \FPupn\@MXV@leftxprime{\@MXV@leftx{} \@MXV@cosroll{} mul \@MXV@upx{} \@MXV@sinroll{} mul +}%
- \FPupn\@MXV@leftyprime{\@MXV@lefty{} \@MXV@cosroll{} mul \@MXV@upy{} \@MXV@sinroll{} mul +}%
- \FPupn\@MXV@leftzprime{\@MXV@leftz{} \@MXV@cosroll{} mul \@MXV@upz{} \@MXV@sinroll{} mul +}%
- \FPupn\@MXV@upxprime{\@MXV@upx{} \@MXV@cosroll{} mul \@MXV@leftx{} \@MXV@sinroll{} mul sub}%
- \FPupn\@MXV@upyprime{\@MXV@upy{} \@MXV@cosroll{} mul \@MXV@lefty{} \@MXV@sinroll{} mul sub}%
- \FPupn\@MXV@upzprime{\@MXV@upz{} \@MXV@cosroll{} mul \@MXV@leftz{} \@MXV@sinroll{} mul sub}%
- \FPupn\@MXV@leftx{\@MXV@leftxprime}%
- \FPupn\@MXV@lefty{\@MXV@leftyprime}%
- \FPupn\@MXV@leftz{\@MXV@leftzprime}%
- \FPupn\@MXV@upx{\@MXV@upxprime}%
- \FPupn\@MXV@upy{\@MXV@upyprime}%
- \FPupn\@MXV@upz{\@MXV@upzprime}%
- %translation vector
- \FPupn\@MXV@roo{#7 abs}%
- \FPifeq\@MXV@roo{0}\FPupn\@MXV@roo{0.0000001}\fi%
- \FPupn\@MXV@transx{#1 \@MXV@roo{} \@MXV@viewx{} mul sub}%
- \FPupn\@MXV@transy{#2 \@MXV@roo{} \@MXV@viewy{} mul sub}%
- \FPupn\@MXV@transz{#3 \@MXV@roo{} \@MXV@viewz{} mul sub}%
- %rotation matrix
- \xdef\@MXV@matrix{\@MXV@leftx\space\@MXV@lefty\space\@MXV@leftz\space%
- \@MXV@upx\space\@MXV@upy\space\@MXV@upz\space%
- \@MXV@viewx\space\@MXV@viewy\space\@MXV@viewz}%
- %transformation matrix
- \xdef\@MXV@matrix{%
- \@MXV@matrix\space\@MXV@transx\space\@MXV@transy\space\@MXV@transz%
- }%
- }
-
- %macro for parsing one line of 3D views file (old format)
- \newcommand{\@MXV@parseline}[6][]{%
- \pdfstringdef\@MXV@xname{#1}% name of the view (optional)
- \ifthenelse{\equal{#2}{}}{%
- \xdef\@MXV@coo{0 0 0}%
- }{%
- \xdef\@MXV@coo{#2}%
- }%
- \ifthenelse{\equal{#3}{}}{%
- \xdef\@MXV@ctoc{0 -1 0}%
- }{%
- \xdef\@MXV@ctoc{#3}%
- }%
- \ifthenelse{\equal{#4}{}}{%
- \xdef\@MXV@roo{0}%
- }{%
- \xdef\@MXV@roo{#4}%
- }%
- \ifthenelse{\equal{#5}{}}{%
- \xdef\@MXV@roll{0}%
- }{%
- \xdef\@MXV@roll{#5}%
- }%
- \ifthenelse{\equal{#6}{}}{%
- \xdef\@MXV@aac{30}%
- }{%
- \xdef\@MXV@aac{#6}%
- }%
- }
- %for parsing lines of views file (new format)
- \define@key{MXV@view}{VIEW}[]{%
- \ifnum\@MXV@cursection<\z@\else%
- \PackageError{movie15}{%
- File \@MXV@viewsfileii, line \the\@MXV@inputlineno: %
- A VIEW section cannot be nested into another section%
- }{}%
- \fi%
- \def\@MXV@cursection{0}%
- \pdfstringdef\@MXV@xname{#1}% name of the view (optional)
- %default camera settings
- \gdef\@MXV@coo{0 0 0}%
- \gdef\@MXV@ctoc{0 -1 0}%
- \gdef\@MXV@roo{0}%
- \gdef\@MXV@roll{0}%
- \gdef\@MXV@aac{30}%
- %default background, lights, render mode
- \xdef\@MXV@background{/BG <</CS/DeviceRGB/C [\@MXV@defaultbg]>>}%
- \xdef\@MXV@lights{/LS <</Subtype/\@MXV@defaultlights>>}%
- \gdef\@MXV@render{/RM <</Subtype/\@MXV@defaultrender>>}%
- %initialise array of node dicts
- \gdef\@MXV@naarray{}%
- \ifpdf\else\global\@MXV@nodecount=\z@\fi%
- %initialise array of crosssection dicts
- \gdef\@MXV@saarray{}%
- \ifpdf\else\global\@MXV@cscount=\z@\fi%
- }
- \define@key{MXV@view}{COO}{%
- \ifnum\@MXV@cursection=\z@\else%
- \PackageError{movie15}{%
- File \@MXV@viewsfileii, line \the\@MXV@inputlineno: %
- COO entry not allowed here; must go into a VIEW section%
- }{}%
- \fi%
- \xdef\@MXV@coo{#1}%
- }
- \define@key{MXV@view}{C2C}{%
- \ifnum\@MXV@cursection=\z@\else%
- \PackageError{movie15}{%
- File \@MXV@viewsfileii, line \the\@MXV@inputlineno: %
- C2C entry not allowed here; must go into a VIEW section%
- }{}%
- \fi%
- \xdef\@MXV@ctoc{#1}%
- }
- \define@key{MXV@view}{ROO}{%
- \ifnum\@MXV@cursection=\z@\else%
- \PackageError{movie15}{%
- File \@MXV@viewsfileii, line \the\@MXV@inputlineno: %
- ROO entry not allowed here; must go into a VIEW section%
- }{}%
- \fi%
- \xdef\@MXV@roo{#1}%
- }
- \define@key{MXV@view}{AAC}{%
- \ifnum\@MXV@cursection=\z@\else%
- \PackageError{movie15}{%
- File \@MXV@viewsfileii, line \the\@MXV@inputlineno: %
- AAC entry not allowed here; must go into a VIEW section%
- }{}%
- \fi%
- \xdef\@MXV@aac{#1}%
- }
- \define@key{MXV@view}{ROLL}{%
- \ifnum\@MXV@cursection=\z@\else%
- \PackageError{movie15}{%
- File \@MXV@viewsfileii, line \the\@MXV@inputlineno: %
- ROLL entry not allowed here; must go into a VIEW section%
- }{}%
- \fi%
- \xdef\@MXV@roll{#1}%
- }
- \define@key{MXV@view}{BGCOLOR}{%
- \ifnum\@MXV@cursection=\z@\else%
- \PackageError{movie15}{%
- File \@MXV@viewsfileii, line \the\@MXV@inputlineno: %
- BGCOLOR entry not allowed here; must go into a VIEW section%
- }{}%
- \fi%
- \def\@MXV@background{/BG<</CS/DeviceRGB/C[#1]>>}%
- }
- \define@key{MXV@view}{LIGHTS}{%
- \ifnum\@MXV@cursection=\z@\else%
- \PackageError{movie15}{%
- File \@MXV@viewsfileii, line \the\@MXV@inputlineno: %
- LIGHTS entry not allowed here; must go into a VIEW section%
- }{}%
- \fi%
- \def\@MXV@lights{/LS <</Subtype/#1>>}%
- }
- \define@key{MXV@view}{RENDERMODE}{%
- \ifnum\@MXV@cursection=\z@
- \def\@MXV@render{/RM <</Subtype/#1>>}%
- \else%
- \ifnum\@MXV@cursection=\@ne
- \def\@MXV@nrender{/RM <</Subtype/#1>>}%
- \else%
- \PackageError{movie15}{%
- File \@MXV@viewsfileii, line \the\@MXV@inputlineno: %
- RENDERMODE entry not allowed here; must go into either a VIEW %
- or a PART section%
- }{}%
- \fi%
- \fi%
- }
- \define@key{MXV@view}{PART}[]{%
- \ifnum\@MXV@cursection=\z@\else%
- \PackageError{movie15}{%
- File \@MXV@viewsfileii, line \the\@MXV@inputlineno: %
- PART not allowed here; must be a sub-section of a VIEW section%
- }{}%
- \fi%
- \ifthenelse{\equal{#1}{}}{%
- \PackageError{movie15}{%
- File \@MXV@viewsfileii, line \the\@MXV@inputlineno: %
- You must provide a valid PART name (PART=<part name>), as shown %
- in the model tree of the 3D object (go to `View'->`Navigation %
- Panels'->`Model Tree' in Adobe Reader)%
- }{}%
- }{}%
- \def\@MXV@cursection{1}%
- \pdfstringdef\@MXV@partname{#1}% name of the part
- \gdef\@MXV@nopacity{}%
- \gdef\@MXV@nvisibility{}%
- \gdef\@MXV@nrender{}%
- \gdef\@MXV@ntransform{}%
- }
- \define@key{MXV@view}{CROSSSECT}[]{%
- \ifnum\@MXV@cursection=\z@\else%
- \PackageError{movie15}{%
- File \@MXV@viewsfileii, line \the\@MXV@inputlineno: %
- CROSSSECT not allowed here; must be a sub-section of a VIEW section%
- }{}%
- \fi%
- \ifthenelse{\equal{#1}{}}{}{%
- \PackageWarning{movie15}{%
- File \@MXV@viewsfileii, line \the\@MXV@inputlineno: %
- CROSSECT does not take a value%
- }%
- }%
- \def\@MXV@cursection{2}%
- \gdef\@MXV@cscenter{0 0 0}%
- \gdef\@MXV@csorient{null 0 0}%
- }
- \define@key{MXV@view}{OPACITY}{%
- \ifnum\@MXV@cursection=\@ne\else%
- \PackageError{movie15}{%
- File \@MXV@viewsfileii, line \the\@MXV@inputlineno: %
- OPACITY entry not allowed here; must go into a PART section%
- }{}%
- \fi%
- \gdef\@MXV@nopacity{/O #1}%
- }
- \define@key{MXV@view}{VISIBLE}{%
- \ifnum\@MXV@cursection=\@ne\else%
- \PackageError{movie15}{%
- File \@MXV@viewsfileii, line \the\@MXV@inputlineno: %
- VISIBLE entry not allowed here; must go into a PART section%
- }{}%
- \fi%
- \gdef\@MXV@nvisibility{/V #1}%
- }
- \define@key{MXV@view}{MATRIX}{%
- \ifnum\@MXV@cursection=\@ne\else%
- \PackageError{movie15}{%
- File \@MXV@viewsfileii, line \the\@MXV@inputlineno: %
- MATRIX entry not allowed here; must go into a PART section%
- }{}%
- \fi%
- \gdef\@MXV@ntransform{/M [#1]}%
- }
- \define@key{MXV@view}{CENTER}{%
- \ifnum\@MXV@cursection=2\relax\else%
- \PackageError{movie15}{%
- File \@MXV@viewsfileii, line \the\@MXV@inputlineno: %
- CENTER entry not allowed here; must go into a CROSSECT section%
- }{}%
- \fi%
- \gdef\@MXV@cscenter{#1}%
- }
- \define@key{MXV@view}{ORIENTATION}{%
- \ifnum\@MXV@cursection=2\relax\else%
- \PackageError{movie15}{%
- File \@MXV@viewsfileii, line \the\@MXV@inputlineno: %
- ORIENT entry not allowed here; must go into a CROSSECT section%
- }{}%
- \fi%
- \gdef\@MXV@csorient{#1}%
- }
- \define@key{MXV@view}{END}[]{%
- \ifcase\@MXV@cursection%
- %END VIEW
- \edef\@MXV@args{%
- \@MXV@coo\space\@MXV@ctoc\space\@MXV@roo\space\@MXV@roll\space}%
- \expandafter\@MXV@ciiwmatrix\@MXV@args% build C2W matrix
- \global\advance\@MXV@viewscount by \@ne%
- \ifthenelse{\equal{\@MXV@xname}{}}{% default view name
- \pdfstringdef\@MXV@xname{View \the\@MXV@viewscount}%
- }{}%
- \ifthenelse{\equal{\@MXV@naarray}{}}{}{%
- \gdef\@MXV@naentry{/NR true/NA [\@MXV@naarray]}%
- }%
- \ifthenelse{\equal{\@MXV@saarray}{}}{}{%
- \gdef\@MXV@saentry{/SA [\@MXV@saarray]}%
- }%
- \@MXV@viewobj% create pdf object of 3D view
- %append current view obj ref to VA array
- \xdef\@MXV@varray{\@MXV@varray\space\@MXV@@viewobj}%
- \global\@MXV@viewsprovidedtrue%
- \def\@MXV@cursection{-1}%
- \or%
- %END PART
- \ifpdf\else\global\advance\@MXV@nodecount by \@ne\fi%
- \@MXV@nodeobj% create pdf object of 3D node dict
- %append it to node array
- \xdef\@MXV@naarray{\@MXV@naarray\space\@MXV@@nodeobj}%
- \def\@MXV@cursection{0}%
- \or%
- %END CROSSSECT
- \ifpdf\else\global\advance\@MXV@cscount by \@ne\fi%
- \@MXV@csobj% create pdf object of 3D cross section dict
- %append it to cross section array
- \xdef\@MXV@saarray{\@MXV@saarray\space\@MXV@@csobj}%
- \def\@MXV@cursection{0}%
- \else%
- \PackageError{movie15}{%
- File \@MXV@viewsfileii, line \the\@MXV@inputlineno: %
- There is nothing to be ENDed here%
- }{}%
- \fi%
- }%
-
- %macro for generating an array of 3D views (varray)
- \def\@MXV@procinputline#1{\setkeys{MXV@view}{#1}}
- \newcount\@MXV@inputlineno
- \def\@MXV@buildva{%
- \global\@MXV@viewscount=0%
- \xdef\@MXV@varray{}% empty varray
- %
- %default view (one of the command options 3Dcoo, 3Dc2c, etc. given)
- \edef\@MXV@args{%
- \@MXV@coo\space\@MXV@ctoc\space\@MXV@roo\space\@MXV@roll\space}%
- \expandafter\@MXV@ciiwmatrix\@MXV@args% build C2W matrix
- \pdfstringdef\@MXV@xname{Default}%
- \if@MXV@defaultviewprovided%
- \@MXV@viewobj% create pdf object of 3D view
- \edef\@MXV@defaultview{/3DV \@MXV@@viewobj}%
- \fi%
- %
- %read out 3D views file
- \IfFileExists{\@MXV@viewsfile}{%
- \edef\@MXV@endlinechar{\the\endlinechar}%
- \endlinechar=-1% suppress trailing space at input line end
- \openin\@MXV@@viewsfile=\@MXV@viewsfile%
- \loop%
- \read\@MXV@@viewsfile to \@MXV@inputline%
- \if\@MXV@inputline\relax\else%
- \expandafter\@MXV@parseline\@MXV@inputline%
- \edef\@MXV@args{\@MXV@coo\space\@MXV@ctoc\space\@MXV@roo\space\@MXV@roll\space}%
- \expandafter\@MXV@ciiwmatrix\@MXV@args% build C2W matrix
- \global\advance\@MXV@viewscount by 1%
- \ifthenelse{\equal{\@MXV@xname}{}}{%
- \pdfstringdef\@MXV@xname{View \the\@MXV@viewscount}%
- }{}%
- \@MXV@viewobj% create pdf object of 3D view
- %append current view obj ref to VA array
- \xdef\@MXV@varray{\@MXV@varray\space\@MXV@@viewobj}%
- \setboolean{@MXV@viewsprovided}{true}%
- \repeat%
- \closein\@MXV@@viewsfile%
- \endlinechar=\@MXV@endlinechar% reset endlinechar
- }{}%
- %read out 3D views file (new version)
- \def\@MXV@cursection{-1}% views file is devided in sections
- \IfFileExists{\@MXV@viewsfileii}{%
- \begingroup%
- \endlinechar=-1% suppress trailing space at input line end
-% \catcode`\#=14\relax% make `#' a comment char
-% \catcode`\%=12\relax% make `%' an ordinary char
- \@MXV@inputlineno=\z@%
- \openin\@MXV@@viewsfile=\@MXV@viewsfileii%
- \read\@MXV@@viewsfile to \@MXV@inputline%
- \ifeof\@MXV@@viewsfile\setboolean{@MXV@eof}{true}\else%
- \setboolean{@MXV@eof}{false}\fi%
- \whiledo{\NOT\boolean{@MXV@eof}}{%
- \advance\@MXV@inputlineno by \@ne%
- %process input line
- \edef\@MXV@@inputline{{\@MXV@inputline}}%
- \expandafter\@MXV@procinputline\@MXV@@inputline%
- \read\@MXV@@viewsfile to \@MXV@inputline%
- \ifeof\@MXV@@viewsfile%
- \setboolean{@MXV@eof}{true}%
- \else%
- \setboolean{@MXV@eof}{false}%
- \fi%
- }%
- \closein\@MXV@@viewsfile%
- \endgroup%
- }{}%
- %
- %make the first view in the VA array the default view, if no default one has
- %explicitly been provided, but if the VA array itself is empty too (no
- %additional views provided) use our fallback view (c2c=0 -1 0) as default
- \ifthenelse{\NOT\boolean{@MXV@defaultviewprovided}%
- \AND\boolean{@MXV@viewsprovided}}{%
- \xdef\@MXV@defaultview{/3DV /F}%
- }{}%
- \ifthenelse{\NOT\boolean{@MXV@defaultviewprovided}%
- \AND\NOT\boolean{@MXV@viewsprovided}}{%
- \@MXV@viewobj% create pdf object of 3D view
- \edef\@MXV@defaultview{/3DV \@MXV@@viewobj}%
- }{}%
- }
-
- %following macros, including the 3D inclusion macro have driver specific
- %implementations
- \ifpdf%
- %pdfLaTeX versions
- %macro for creating 3D view object
- \def\@MXV@viewobj{%
- %projection dict
- \pdfobj {<</Subtype/P/FOV \@MXV@aac/PS/Min>>}%
- \pdfrefobj\pdflastobj%
- %
- \pdfobj {<<%
- /MS/M% define the view as C2W matrix
- /CO \@MXV@roo% orbital radius
- /P \the\pdflastobj\space 0 R%
- /C2W [\@MXV@matrix]%
- /XN(\@MXV@xname)% name of the view appearing in the drop down list
- \@MXV@background%
- \@MXV@lights%
- \@MXV@render%
- \@MXV@naentry% node dictionaries
- \@MXV@saentry% node dictionaries
- >>}\pdfrefobj\pdflastobj%
- \xdef\@MXV@@viewobj{\the\pdflastobj\space 0 R}%
- }%
- \def\@MXV@nodeobj{%
- \pdfobj {<<%
- /Type/3DNode%
- /N (\@MXV@partname)%
- \@MXV@nopacity\@MXV@nvisibility\@MXV@ntransform\@MXV@nrender%
- >>}\pdfrefobj\pdflastobj%
- \xdef\@MXV@@nodeobj{\the\pdflastobj\space 0 R}%
- }%
- \def\@MXV@csobj{%
- \pdfobj {<<%
- /Type/3DCrossSection%
- /C [\@MXV@cscenter]%
- /O [\@MXV@csorient]%
- >>}\pdfrefobj\pdflastobj%
- \xdef\@MXV@@csobj{\the\pdflastobj\space 0 R}%
- }%
- %macro for creating resource objects from 3D and image files, to be used
- %in 3D JavaScript
- \def\@MXV@addresource#1{%
- %determine file type
- \filename@parse{#1}%
- \ifthenelse{%
- \equal{\filename@ext}{u3d}\OR%
- \equal{\filename@ext}{U3D}%
- }{%
- \def\@MXV@restype{U3D}%
- }{%
- \def\@MXV@restype{image}%
- }%
- \ifthenelse{\equal{\@MXV@restype}{image}}{%
- %embed the same image file only once
- \ifthenelse{\equal{\@MXV@getlabelvalue{\pdfmdfivesum file {#1}}}{undefined}}{%
- \immediate\pdfximage {#1}%
- \xdef\@MXV@resourcetree{% build name tree for embedded resources
- \@MXV@resourcetree\space (#1) \the\pdflastximage\space 0 R%
- }%
- \@MXV@newlabel{\pdfmdfivesum file {#1}}{\the\pdflastximage}%
- }{%
- \xdef\@MXV@resourcetree{%
- \@MXV@resourcetree\space (#1) \@MXV@getlabelvalue{\pdfmdfivesum file {#1}}\space 0 R%
- }%
- }%
- }{%
- %embed the same 3D file only once
- \ifthenelse{\equal{\@MXV@getlabelvalue{\pdfmdfivesum file {#1}}}{undefined}}{%
- \pdfobj stream %
- attr {%
- /Subtype/\@MXV@restype%
- }%
- file {#1}%
- \pdfrefobj\pdflastobj%
- \xdef\@MXV@resourcetree{%
- \@MXV@resourcetree\space (#1) \the\pdflastobj\space 0 R%
- }%
- \@MXV@newlabel{\pdfmdfivesum file {#1}}{\the\pdflastobj}%
- }{%
- \xdef\@MXV@resourcetree{%
- \@MXV@resourcetree\space (#1) \@MXV@getlabelvalue{\pdfmdfivesum file {#1}}\space 0 R%
- }%
- }%
- }%
- }
-
- %3D inclusion macro
- \newcommand{\@MXV@includeiiid}[5][]{%
- %insert box or poster
- \@MXV@box{#2}{#3}{#4}%
- %
- \if@MXV@externalviewer\else%
- \setkeys{MXV@iiid}{#1}%process deferred options
- \ifnum\@MXV@iiidrepeat=0\else%
- \edef\@MXV@animstyle{% animation style dict
- /AN <<%
- \@MXV@iiidpalindrome\@MXV@iiidrate/PC \the\@MXV@iiidrepeat%
- >>%
- }%
- \fi%
- %java script file, stream object
- \IfFileExists{\@MXV@jscriptiiidfile}{%
- \pdfobj stream file {\@MXV@jscriptiiidfile}%
- \pdfrefobj\pdflastobj%
- \xdef\@MXV@jscriptiiid{/OnInstantiate \the\pdflastobj\space 0 R}%
- }{\xdef\@MXV@jscriptiiid{}}%
- %
- %build the array of 3D views
- \@MXV@buildva%
- \fi%
- %
- %3D stream object
- \if@MXV@inline%
- \ifthenelse{%
- \NOT\boolean{@MXV@presentation}\OR%
- \equal{\@MXV@getlabelvalue{\@MXV@label.3dstream}}{undefined}%
- }{%
- \pdfobj stream%
- attr {%
- /Subtype/\@MXV@iiidsubtype%
- \if@MXV@externalviewer\else%
- /VA [\@MXV@varray]%
- /DV/F% use first entry in VA as default view
- \@MXV@animstyle%
- \@MXV@jscriptiiid%
- \if@MXV@resource%
- /Resources <<%
- /Names [\@MXV@resourcetree]%
- >>%
- \fi%
- \fi%
- }%
- file {#5}%
- \pdfrefobj\pdflastobj%
- \edef\@MXV@iiidstream{\the\pdflastobj}%
- \if@MXV@presentation%
- \@MXV@newlabel{\@MXV@label.3dstream}{\@MXV@iiidstream}%
- \fi%
- }{%
- \edef\@MXV@iiidstream{\@MXV@getlabelvalue{\@MXV@label.3dstream}}%
- }%
- \fi%
- %
- \makebox[0pt][r]{\makebox[#2][l]{%
- %insert FileAttachment annotation
- \ifthenelse{\boolean{@MXV@inline}\AND\boolean{@MXV@externalviewer}%
-% since Reader 7.0.7, we cannot place a file attachment annot behind
-% the 3D annot :-(
-% \OR\boolean{@MXV@attachment}
- }{%
- \pdfannot width #2 height #3 depth #4 {%
- /Subtype /FileAttachment%
- /F 0%
- /T (\@MXV@filename)%
- /Contents (3D Object (\@MXV@mime))%
- \if@MXV@externalviewer%
- /Name/Paperclip%
- /C [1 1 1]%
- \else%
- /AP <</N<<>>/R<<>>/D<<>>>>%
- \fi%
- /FS <<%
- /F(#5)%
- /Type/Filespec%
- /EF << /F \@MXV@iiidstream\space 0 R >>%
- >>%
- }%
- }{%
- \if@MXV@url%
- %insert Link annotation, if 3D file is a URL
- \pdfannot width #2 height #3 depth #4 {%
- /Subtype /Link%
- /F 0%
- \if@MXV@externalviewer%
- \@MXV@urlattr%
- \else%
- /H /N%
- /Border [0 0 0]%
- \fi%
- /A <</URI (#5) /S/URI>>%
- /Contents (3D Object (\@MXV@mime))%
- }%
- \else%
- %else insert Launch action for local external 3D file
- \if@MXV@inline\else%
- \pdfannot width #2 height #3 depth #4 {%
- /Subtype /Link%
- /F 0%
- \if@MXV@externalviewer%
- \@MXV@runattr%
- \else%
- /H /N%
- /Border [0 0 0]%
- \fi%
- /A <<%
- /F (#5)%
- /S /Launch%
- >>%
- /Contents (3D Object (\@MXV@mime))%
- }%
- \fi%
- \fi%
- }%
- %
- \if@MXV@externalviewer\else%
- %appearance dict dummy, to be shared by all 3D annots
- \ifthenelse{\isundefined{\@MXV@apdict}}{%
- \pdfobj stream attr {/BBox [0 0 0.001 0.001]} {}\pdfrefobj\pdflastobj%
- \xdef\@MXV@apdict{/AP << /N \the\pdflastobj\space 0 R >>}%
- }{}%
- %3D reference dict
- \if@MXV@presentation%
- \ifthenelse{%
- \equal{\@MXV@getlabelvalue{\@MXV@label.3dref}}{undefined}%
- }{%
- \pdfobj {<<%
- /Type/3DRef%
- /3DD \@MXV@iiidstream\space 0 R% 3D stream object
- >>}\pdfrefobj\pdflastobj%
- \edef\@MXV@iiidstreamorref{\the\pdflastobj}%
- \@MXV@newlabel{\@MXV@label.3dref}{\the\pdflastobj}%
- }{%
- \edef\@MXV@iiidstreamorref{\@MXV@getlabelvalue{\@MXV@label.3dref}}%
- }%
- \else%
- \edef\@MXV@iiidstreamorref{\@MXV@iiidstream}%
- \fi%
- %annotation object of subtype `3D'
- \pdfannot width #2 height #3 depth #4 {%
- /Subtype/3D%
- /F 4% we cannot put F 5 here; bug in Reader; 3D annot would be
- /T (\@MXV@filename)% disabled even if plugin were available
- /Contents (3D Object (\@MXV@mime))%
- \ifx\@MXV@@label\@empty\else%
- /NM (\@MXV@@label)%
- \fi%
- /P \@MXV@pdfpageref{@MXV@annot\the\@MXV@includes.page} 0 R%
- \@MXV@apdict% /AP <</N<<>>/R<<>>/D<<>>>> doesn't work here
- \@MXV@defaultview%
- \@MXV@iiidia%
- /3DD \@MXV@iiidstreamorref\space 0 R% 3D stream or reference object
- /3DA << \@MXV@activation\@MXV@deactivation\@MXV@iiidtoolb >>%
- }%
- %label for later annot obj number determination, to be used in
- %movieref's
- \ifx\@MXV@@label\@empty\else%
- \@MXV@labeltoaux{@MXV@\@MXV@@label.annot}{\the\pdflastannot}%
- \@MXV@newlabel{@MXV@\@MXV@@label.annot}{\the\pdflastannot}%
- \fi%
- \fi}}%
- }%
- \else%
- %dvips versions
- %macro for creating 3D view object and associated projection dict
- \def\@MXV@viewobj{%
- %projection dict
- \pdfmark{%
- pdfmark=/OBJ,%
- Raw={%
- /_objdef {pdict\the\@MXV@includes_\the\@MXV@viewscount}%
- /type/dict%
- }%
- }%
- \pdfmark{%
- pdfmark=/PUT,%
- Raw={%
- {pdict\the\@MXV@includes_\the\@MXV@viewscount} <<%
- /Subtype/P/FOV \@MXV@aac/PS/Min%
- >>%
- }%
- }%
- %
- \pdfmark{%
- pdfmark=/OBJ,%
- Raw={%
- /type/dict%
- /_objdef {viewobj\the\@MXV@includes_\the\@MXV@viewscount}%
- }%
- }%
- \pdfmark{%
- pdfmark=/PUT,%
- Raw={%
- {viewobj\the\@MXV@includes_\the\@MXV@viewscount} <<%
- /MS/M%
- /CO \@MXV@roo%
- /P {pdict\the\@MXV@includes_\the\@MXV@viewscount}%
- /C2W[\@MXV@matrix]%
- /XN(\@MXV@xname)%
- \@MXV@background%
- \@MXV@lights%
- \@MXV@render%
- \@MXV@naentry%
- \@MXV@saentry%
- >>%
- }%
- }%
- \xdef\@MXV@@viewobj{{viewobj\the\@MXV@includes_\the\@MXV@viewscount}}%
- }%
- %3D node object
- \def\@MXV@nodeobj{%
- \pdfmark{%
- pdfmark=/OBJ,%
- Raw={%
- /type/dict%
- /_objdef {nodeobj\the\@MXV@includes_\the\@MXV@viewscount_%
- \the\@MXV@nodecount}%
- }%
- }%
- \pdfmark{%
- pdfmark=/PUT,%
- Raw={%
- {nodeobj\the\@MXV@includes_\the\@MXV@viewscount_\the\@MXV@nodecount}
- <<%
- /Type/3DNode%
- /N (\@MXV@partname)%
- \@MXV@nopacity\@MXV@nvisibility\@MXV@ntransform%
- >>%
- }%
- }%
- \xdef\@MXV@@nodeobj{%
- {nodeobj\the\@MXV@includes_\the\@MXV@viewscount_\the\@MXV@nodecount}}%
- }%
- %3D cross section object
- \def\@MXV@csobj{%
- \pdfmark{%
- pdfmark=/OBJ,%
- Raw={%
- /type/dict%
- /_objdef {csobj\the\@MXV@includes_\the\@MXV@viewscount_%
- \the\@MXV@cscount}%
- }%
- }%
- \pdfmark{%
- pdfmark=/PUT,%
- Raw={%
- {csobj\the\@MXV@includes_\the\@MXV@viewscount_\the\@MXV@cscount}
- <<%
- /Type/3DCrossSection%
- /C [\@MXV@cscenter]%
- /O [\@MXV@csorient]%
- >>%
- }%
- }%
- \xdef\@MXV@@csobj{%
- {csobj\the\@MXV@includes_\the\@MXV@viewscount_\the\@MXV@cscount}}%
- }%
- %
- %macro for creating resource objects from 3D and image files
- \def\@MXV@addresource#1{%
- %determine file type
- \filename@parse{#1}%
- \ifthenelse{%
- \equal{\filename@ext}{u3d}\OR%
- \equal{\filename@ext}{U3D}%
- }{%
- \def\@MXV@restype{U3D}%
- }{%
- \def\@MXV@restype{image}%
- }%
- \ifthenelse{\equal{\@MXV@restype}{image}}{%
- %embed the same image file only once
- \ifthenelse{\equal{\@MXV@getlabelvalue{\pdfmdfivesum file {#1}}}{undefined}}{%
- %increment counter of embedded resource files
- \global\advance\@MXV@rescount by 1%
- %create Image XObject from next raster image
- \special{ps:% read image resource from file
- [ /_objdef {resource\the\@MXV@rescount} /NI pdfmark
- save gsave
- {
- /showpage {} def
- /setpagedevice /pop load def
- newpath clip
- (#1) run
- } ?pdfmark
- 0 0 1 [1 0 0 1 0 0] {} image %empty dummy, in case #1 is not
- grestore restore %a valid image file
- }%
- \xdef\@MXV@resourcetree{% build name tree for embedded resources
- \@MXV@resourcetree\space (#1) {resource\the\@MXV@rescount}%
- }%
- \@MXV@newlabel{\pdfmdfivesum file {#1}}{resource\the\@MXV@rescount}%
- }{%
- \xdef\@MXV@resourcetree{%
- \@MXV@resourcetree\space (#1) {\@MXV@getlabelvalue{\pdfmdfivesum file {#1}}}%
- }%
- }%
- }{%
- %embed the same 3D file only once
- \ifthenelse{\equal{\@MXV@getlabelvalue{\pdfmdfivesum file {#1}}}{undefined}}{%
- \global\advance\@MXV@rescount by 1%
- \special{ps:
- [ /_objdef {resource\the\@MXV@rescount} /type/stream /OBJ pdfmark
- [ {resource\the\@MXV@rescount} <<%
- /Subtype/\@MXV@restype%
- >> /PUT pdfmark%
- [ {resource\the\@MXV@rescount} (#1) (r) file /PUT pdfmark
- }%
- \xdef\@MXV@resourcetree{%
- \@MXV@resourcetree\space (#1) {resource\the\@MXV@rescount}%
- }%
- \@MXV@newlabel{\pdfmdfivesum file {#1}}{resource\the\@MXV@rescount}%
- }{%
- \xdef\@MXV@resourcetree{%
- \@MXV@resourcetree\space (#1) {\@MXV@getlabelvalue{\pdfmdfivesum file {#1}}}%
- }%
- }%
- }%
- }
- %
- %3D inclusion macro
- \newcommand{\@MXV@includeiiid}[5][]{%
- %
- \if@MXV@externalviewer\else%
- \setkeys{MXV@iiid}{#1}%process deferred options
- \ifnum\@MXV@iiidrepeat=0\else%
- \edef\@MXV@animstyle{% animation style dict
- /AN <<%
- \@MXV@iiidpalindrome\@MXV@iiidrate/PC \the\@MXV@iiidrepeat%
- >>%
- }%
- \fi%
- %java script file, stream object
- \IfFileExists{\@MXV@jscriptiiidfile}{%
- \pdfmark{%
- pdfmark=/OBJ,%
- Raw={%
- /_objdef {jscriptiiid\the\@MXV@includes}%
- /type/stream%
- }%
- }%
- \pdfmark{%
- pdfmark=/PUT,%
- Raw={%
- {jscriptiiid\the\@MXV@includes}%
- (\@MXV@jscriptiiidfile) (r) file%
- }%
- }%
- \xdef\@MXV@jscriptiiid{%
- /OnInstantiate {jscriptiiid\the\@MXV@includes}%
- }%
- }{\def\@MXV@jscriptiiid{}}%
- %
- %build the array of 3D views
- \@MXV@buildva%
- \fi%
- %
- %3D stream object
- \if@MXV@inline%
- \ifthenelse{%
- \NOT\boolean{@MXV@presentation}\OR%
- \equal{\@MXV@getlabelvalue{\@MXV@label.3dstream}}{undefined}%
- }{%
- \pdfmark{%
- pdfmark=/OBJ,%
- Raw={%
- /_objdef {iiiDfile\the\@MXV@includes}%
- /type/stream%
- }%
- }%
- \pdfmark{%
- pdfmark=/PUT,%
- Raw={%
- {iiiDfile\the\@MXV@includes} <<%
- /Subtype/\@MXV@iiidsubtype%
- \if@MXV@externalviewer\else%
- /VA [\@MXV@varray]%
- /DV/F% use first entry in VA as default view
- \@MXV@animstyle%
- \if@MXV@resource%
- /Resources <<%
- /Names [\@MXV@resourcetree]%
- >>%
- \fi%
- \@MXV@jscriptiiid%
- \fi%
- >>%
- }%
- }%
- \pdfmark{%
- pdfmark=/PUT,%
- Raw={%
- {iiiDfile\the\@MXV@includes}%
- (#5) (r) file%
- }%
- }%
- \edef\@MXV@iiidstream{iiiDfile\the\@MXV@includes}%
- \if@MXV@presentation%
- \@MXV@newlabel{\@MXV@label.3dstream}{\@MXV@iiidstream}%
- \fi%
- }{%
- \edef\@MXV@iiidstream{\@MXV@getlabelvalue{\@MXV@label.3dstream}}%
- }%
- \fi%
- %
- %insert FileAttachment annotation
- \ifthenelse{\boolean{@MXV@inline}\AND\boolean{@MXV@externalviewer}%
-% \OR\boolean{@MXV@attachment}
- }{%
- \makebox[0pt][l]{%
- \pdfmark[\phantom{\@MXV@box{#2}{#3}{#4}}]{%
- pdfmark=/ANN,%
- Subtype=/FileAttachment,%
- Raw={%
- /F 0%
- /T (\@MXV@filename)%
- /Contents (3D Object (\@MXV@mime))%
- \if@MXV@externalviewer%
- /Name/Paperclip%
- /C [1 1 1]%
- \else%
- /AP <</N<<>>/R<<>>/D<<>>>>%
- \fi%
- /FS <<%
- /F(#5)%
- /Type/Filespec%
- /EF <</F {\@MXV@iiidstream}>>%
- >>%
- }%
- }%
- }%
- }{%
- \if@MXV@url%
- %insert Link annotation, if 3D file is a URL
- \makebox[0pt][l]{%
- \pdfmark[\phantom{\@MXV@box{#2}{#3}{#4}}]{%
- pdfmark=/ANN,%
- Subtype=/Link,%
- Raw={%
- /F 0%
- \if@MXV@externalviewer%
- /C [\@urlbordercolor]%
- /H \@pdfhighlight%
- \else%
- /H /N%
- /Border [0 0 0]%
- \fi%
- /Action <</URI (#5) /S/URI>>%
- /Contents (3D Object (\@MXV@mime))%
- }%
- }%
- }%
- \else%
- %else insert Launch action for local external 3D file
- \if@MXV@inline\else%
- \makebox[0pt][l]{%
- \pdfmark[\phantom{\@MXV@box{#2}{#3}{#4}}]{%
- pdfmark=/ANN,%
- Subtype=/Link,%
- Raw={%
- /F 0%
- \if@MXV@externalviewer%
- /C [\@urlbordercolor]%
- /H \@pdfhighlight%
- \else%
- /H /N%
- /Border [0 0 0]%
- \fi%
- /Action <<%
- /F (#5)%
- /S /Launch%
- >>%
- /Contents (3D Object (\@MXV@mime))%
- }%
- }%
- }%
- \fi%
- \fi%
- }%
- \if@MXV@externalviewer%
- \phantom{\@MXV@box{#2}{#3}{#4}}%
- \else%
- %appearance dict dummy, to be shared by all 3D annots
- \ifthenelse{\isundefined{\@MXV@apdict}}{%
- \pdfmark{%
- pdfmark=/OBJ,%
- Raw={%
- /_objdef {apdict}%
- /type/stream%
- }%
- }%
- \pdfmark{%
- pdfmark=/PUT,%
- Raw={%
- {apdict}%
- ()%
- }%
- }%
- \pdfmark{%
- pdfmark=/PUT,%
- Raw={%
- {apdict}
- <</BBox [0 0 0.001 0.001]>>
- }%
- }%
- \xdef\@MXV@apdict{/AP << /N {apdict}>>}%
- }{}%
- %3D reference dict
- \if@MXV@presentation%
- \ifthenelse{%
- \equal{\@MXV@getlabelvalue{\@MXV@label.3dref}}{undefined}%
- }{%
- \pdfmark{%
- pdfmark=/OBJ,%
- Raw={%
- /_objdef {iiiDref\the\@MXV@includes}%
- /type/dict%
- }%
- }%
- \pdfmark{%
- pdfmark=/PUT,%
- Raw={%
- {iiiDref\the\@MXV@includes} <<%
- /Type/3DRef%
- /3DD {\@MXV@iiidstream}% 3D stream object
- >>%
- }%
- }%
- \edef\@MXV@iiidstreamorref{iiiDref\the\@MXV@includes}%
- \@MXV@newlabel{\@MXV@label.3dref}{\@MXV@iiidstreamorref}%
- }{%
- \edef\@MXV@iiidstreamorref{\@MXV@getlabelvalue{\@MXV@label.3dref}}%
- }%
- \else%
- \edef\@MXV@iiidstreamorref{\@MXV@iiidstream}%
- \fi%
- %annotation object of subtype `3D'
- \pdfmark[\phantom{\@MXV@box{#2}{#3}{#4}}]{%
- pdfmark=/ANN,%
- Subtype=/3D,%
- Raw={%
- /_objdef {3Dannot\the\@MXV@includes}%
- /F 4%
- /T (\@MXV@filename)%
- \ifx\@MXV@@label\@empty\else%
- /NM (\@MXV@@label)%
- \fi%
- /Contents (3D Object (\@MXV@mime))%
- /P {ThisPage}%
- \@MXV@apdict% /AP <</N<<>>/R<<>>/D<<>>>> doesn't work here
- \@MXV@defaultview%
- \@MXV@iiidia%
- /3DD {\@MXV@iiidstreamorref}% 3D stream or reference object
- /3DA <<\@MXV@activation\@MXV@deactivation\@MXV@iiidtoolb>>%
- }%
- }%
- \ifx\@MXV@@label\@empty\else%
- \@MXV@labeltoaux{@MXV@\@MXV@@label.annot}{\the\@MXV@includes}%
- \@MXV@newlabel{@MXV@\@MXV@@label.annot}{\the\@MXV@includes}%
- \fi%
- \fi%
- }%
- \fi%
-}{}
-
-%settings for newly opened media players
-\def\@MXV@settings#1#2#3#4#5#6#7{%
- var settings={%
- privateData: {%
- paused: false
- },
- autoPlay: false,
- visible: false,
- volume: #7
- #1% showUI (controls)
- #2% palindrome
- #3% repeat
- #4% rate
- #5% startAt
- #6% endAt
- };
-}
-
-%JavaScript event handler routines for 2D media activation
-\def\@MXV@events#1#2#3{% #1: playerid, #2: mouse?, #3: autoplay?
- var events=new app.media.Events({%
- %on focus change from one movie to another, events are fired in the
- %following order: (1) onBlur, (2) onFocus, (3) afterBlur, (4) afterFocus
- onBlur: function (e) {%
- if(focusonplayer > 0){%
- focusonplayer=0;
- }
- },
- afterBlur: function (e) {%
- %only resume if we click outside of any media
- if(focusonplayer==0){%
- try{
- e.target.settings.privateData.paused=false;
- e.target.play();
- }catch(e){}
- }
- },
- onFocus: function (e) {%
- focusonplayer=#1;
- },
- afterFocus: function (e) {%
- if(!e.target.isPlaying){%play on click if paused
- try{
- e.target.settings.privateData.paused=false;
- e.target.play();
- if(!e.target.isPlaying){%still not playing?!
- %sometimes play() fails, in particular if the movie has reached
- %its end before getting the focus; but this works:
- if(
- e.target.settings.startAt.time
- || e.target.settings.startAt.frame
- || e.target.settings.startAt.marker
- || e.target.id == 'vnd.adobe.swname:AAPL_QuickTime'
- ){
- e.target.seek(e.target.settings.startAt);
- }else{
- e.target.stop();
- }
- e.target.play();
- }
- }
- catch (e){}
- }
- \@MXV@if{#2}%
- else{%
- %media can only be paused if mouse option is set
- try{
- e.target.pause();
- e.target.settings.privateData.paused=true;
- }catch (e){}
- }
- \fi%
- \if@MXV@issound\else e.target.visible=true;\fi%
- },
- onPlay: function (e) {%
- e.target.settings.privateData.paused=false;
- },
- onPause: function (e) {%
- e.target.settings.privateData.paused=true;
- },
- afterReady: function (e) {%
- try{
- if(
- e.target.settings.startAt.time
- || e.target.settings.startAt.frame
- || e.target.settings.startAt.marker
- ){
- e.target.play();
- e.target.pause();
- e.target.stop();
- e.target.settings.privateData.paused=false;
- e.target.seek(e.target.settings.startAt);
- }
- \if@MXV@issound\else e.target.visible=true;\fi%
- \@MXV@if{#3}
- e.target.settings.privateData.paused=false;
- e.target.play();
- \fi
- }
- catch (e){}
- }
- });
-}%
-
-%output driver specific implementations of the 2D inclusion macro
-\ifpdf%
- %pdfLaTeX version
- \def\@MXV@includemovie#1#2#3#4{%
- %insert box or poster
- \@MXV@box{#1}{#2}{#3}%
- %
- \if@MXV@externalviewer\else%
- %new action dict
- \pdfobj reserveobjnum%
- \@MXV@adict=\pdflastobj%
- %
- %new additional actions dict
- \pdfobj reserveobjnum%
- \@MXV@aadict=\pdflastobj%
- %
- \fi%
- %embedded file entry `/EF'
- \if@MXV@inline%
- %embed the same media file only once
- \ifthenelse{\equal{\@MXV@getlabelvalue{\pdfmdfivesum file {#4}}}{undefined}}{%
- \pdfobj stream %
- attr {%
- /Type/EmbeddedFile%
- /Subtype (\@MXV@mime)%
- }%
- file {#4}%
- \pdfrefobj\pdflastobj%
- \edef\@MXV@efentry{%
- /EF << /F \the\pdflastobj\space 0 R >>%
- }%
- \@MXV@newlabel{\pdfmdfivesum file {#4}}{\the\pdflastobj}%
- }{%
- \edef\@MXV@efentry{%
- /EF << /F \@MXV@getlabelvalue{\pdfmdfivesum file {#4}}\space 0 R >>%
- }%
- }%
- \else\def\@MXV@efentry{}\fi%
- %
- \ifthenelse{\boolean{@MXV@externalviewer}\AND\NOT\boolean{@MXV@inline}}{}{%
- %new file specification object
- \pdfobj {<<%
- /F(#4)%
- \@MXV@fsentry%
- \@MXV@efentry%
- /Type/Filespec%
- >>}\pdfrefobj\pdflastobj%
- \edef\@MXV@filespec{\the\pdflastobj}%
- }%
- %
- \makebox[0pt][r]{\makebox[#1][l]{%
- %insert FileAttachment annotation
- \ifthenelse{\boolean{@MXV@inline}\AND\boolean{@MXV@externalviewer}\OR%
- \boolean{@MXV@attachment}%
- }{%
- \pdfannot width #1 height #2 depth #3 {%
- /Subtype /FileAttachment%
- /F 0%
- /T (\@MXV@filename)%
- /Contents (Media File (\@MXV@mime))%
- \if@MXV@externalviewer%
- %a coloured border, as with external links, would be much nicer
- /Name/Paperclip%
- /C [1 1 1]%
- \else%
- /AP <</N<<>>/R<<>>/D<<>>>>%
- \fi%
- /FS \@MXV@filespec\space 0 R%
- }%
- }{%
- \if@MXV@url%
- %insert Link annotation, if media file is a URL
- \pdfannot width #1 height #2 depth #3 {%
- /Subtype /Link%
- /F 0%
- \if@MXV@externalviewer%
- \@MXV@urlattr%
- \else%
- /H /N%
- /Border [0 0 0]%
- \fi%
- /A <</URI (#4) /S/URI>>%
- /Contents (Media File (\@MXV@mime))%
- }%
- \else%
- %else insert Launch action for local external media file
- \if@MXV@inline\else%
- \pdfannot width #1 height #2 depth #3 {%
- /Subtype /Link%
- /F 0%
- \if@MXV@externalviewer%
- \@MXV@runattr%
- \else%
- /H /N%
- /Border [0 0 0]%
- \fi%
- /A <<%
- /F (#4)%
- /S /Launch%
- >>%
- /Contents (Media File (\@MXV@mime))%
- }%
- \fi%
- \fi%
- }%
- %
- \if@MXV@externalviewer\else%
- %annotation object of subtype `Screen'
- \pdfannot width #1 height #2 depth #3 {%
- /Subtype /Screen%
- /Border [0 0 0]% no border (PDF-1.1)
- /BS <</S/S/W 0>>% no border (PDF-1.5)
- /F 5% disable annot if multimedia is not available
- /T (\@MXV@filename)%
- /Contents (Media File (\@MXV@mime))%
- /P \@MXV@pdfpageref{@MXV@annot\the\@MXV@includes.page} 0 R%
- /A \the\@MXV@adict\space 0 R%
- /AA \the\@MXV@aadict\space 0 R%
- /AP <</N<<>>/R<<>>/D<<>>>>%
- }\edef\@MXV@screenannot{\the\pdflastannot}%
- %label for later annot obj number determination, to be used in
- %movieref's only
- \ifx\@MXV@@label\@empty\else%
- \@MXV@labeltoaux{@MXV@\@MXV@@label.annot}{\@MXV@screenannot}%
- \@MXV@newlabel{@MXV@\@MXV@@label.annot}{\@MXV@screenannot}%
- \fi%
- %
- %new media clip object of subtype `Media Clip Data' (/S/MCD)
- \pdfobj {<<%
- /D \@MXV@filespec\space 0 R%
- /P <</TF(TEMPACCESS)>>%
- /S/MCD%
- /CT (\@MXV@mime)%
- >>}\pdfrefobj\pdflastobj%
- %
- %new rendition object of subtype `Media Rendition' (/S/MR)
- \pdfobj {<<%
- /C \the\pdflastobj\space 0 R%
- /S/MR%
- /SP <</BE<</O 0.0>>>>%
- /P <<%
- \@MXV@player%
- /BE <<%
- /F 2%
- \@MXV@@repeat\@MXV@@volume\@MXV@@ctrls%
- /D <</S /F>>%
- >>%
- >>%
- >>}\edef\@MXV@mediarendition{\the\pdflastobj}\pdfrefobj\pdflastobj%
- %label for later rendition obj number determination
- \ifx\@MXV@@label\@empty\else%
- \@MXV@labeltoaux{@MXV@\@MXV@@label.rendition}{\@MXV@mediarendition}%
- \@MXV@newlabel{@MXV@\@MXV@@label.rendition}{\@MXV@mediarendition}%
- \fi%
- %
- %action dictionary
- \pdfobj useobjnum \@MXV@adict {<<%
- /R \@MXV@mediarendition\space 0 R%
- /S/Rendition%
- /OP 0% fallback if /JS doesn't work or is empty
- \@MXV@activationjsentry%
- /AN \@MXV@screenannot\space 0 R%
- >>}\pdfrefobj\pdflastobj%
- %
- %create play/stop/resume/pause actions
- \pdfobj {<<%
- /R \@MXV@mediarendition\space 0 R%
- /S/Rendition%
- \@MXV@pageopenopentry% /OP fallback if /JS doesn't work
- \@MXV@pageopenjsentry%
- /AN \@MXV@screenannot\space 0 R%
- >>}\edef\@MXV@pageopenaction{\the\pdflastobj}\pdfrefobj\pdflastobj%
- %
- \pdfobj {<<%
- /R \@MXV@mediarendition\space 0 R%
- /S/Rendition%
- \@MXV@pagecloseopentry%
- \@MXV@pageclosejsentry%
- /AN \@MXV@screenannot\space 0 R%
- >>}\edef\@MXV@pagecloseaction{\the\pdflastobj}\pdfrefobj\pdflastobj%
- %
- %populate additional actions dictionary
- \pdfobj useobjnum \@MXV@aadict {<<%
- /PO \@MXV@pageopenaction\space 0 R%
- /PC \@MXV@pagecloseaction\space 0 R%
- >>}\pdfrefobj\pdflastobj%
- \fi}}%
- }%
-\else%
- %dvips version
- \def\@MXV@includemovie#1#2#3#4{%
- %insert FileAttachment annotation
- \ifthenelse{\boolean{@MXV@inline}\AND\boolean{@MXV@externalviewer}\OR%
- \boolean{@MXV@attachment}%
- }{%
- \makebox[0pt][l]{%
- \pdfmark[\phantom{\@MXV@box{#1}{#2}{#3}}]{%
- pdfmark=/ANN,%
- Subtype=/FileAttachment,%
- Raw={%
- /F 0%
- /T (\@MXV@filename)%
- /Contents (Media File (\@MXV@mime))%
- \if@MXV@externalviewer%
- /Name/Paperclip%
- /C [1 1 1]%
- \else%
- /AP <</N<<>>/R<<>>/D<<>>>>%
- \fi%
- /FS {filespec\the\@MXV@includes}%
- }%
- }%
- }%
- }{%
- \if@MXV@url%
- %insert Link annotation, if media file is a URL
- \makebox[0pt][l]{%
- \pdfmark[\phantom{\@MXV@box{#1}{#2}{#3}}]{%
- pdfmark=/ANN,%
- Subtype=/Link,%
- Raw={%
- /F 0%
- \if@MXV@externalviewer%
- /C [\@urlbordercolor]%
- /H \@pdfhighlight%
- \else%
- /H /N%
- /Border [0 0 0]%
- \fi%
- /Action <</URI (#4) /S/URI>>%
- /Contents (Media File (\@MXV@mime))%
- }%
- }%
- }%
- \else%
- %else insert Launch action for local external media file
- \if@MXV@inline\else%
- \makebox[0pt][l]{%
- \pdfmark[\phantom{\@MXV@box{#1}{#2}{#3}}]{%
- pdfmark=/ANN,%
- Subtype=/Link,%
- Raw={%
- /F 0%
- \if@MXV@externalviewer%
- /C [\@urlbordercolor]%
- /H \@pdfhighlight%
- \else%
- /H /N%
- /Border [0 0 0]%
- \fi%
- /Action <<%
- /F (#4)%
- /S /Launch%
- >>%
- /Contents (Media File (\@MXV@mime))%
- }%
- }%
- }%
- \fi%
- \fi%
- }%
- %
- \if@MXV@externalviewer%
- \@MXV@box{#1}{#2}{#3}%
- \else%
- %annotation object of subtype `Screen'
- \pdfmark[\@MXV@box{#1}{#2}{#3}]{%
- pdfmark=/ANN,%
- Subtype=/Screen,%
- Border={0 0 0},%
- Raw={%
- /_objdef {screenannot\the\@MXV@includes}%
- /F 5%
- /T (\@MXV@filename)%
- /Contents (Media File (\@MXV@mime))%
- /BS <</S/S/W 0>>% no border (PDF-1.5)
- /P {ThisPage}%
- /AA {aadict\the\@MXV@includes}%
- /AP <</N<<>>/R<<>>/D<<>>>>%
- }%
- }%
- \ifx\@MXV@@label\@empty\else%
- \@MXV@labeltoaux{@MXV@\@MXV@@label.annot}{\the\@MXV@includes}%
- \@MXV@newlabel{@MXV@\@MXV@@label.annot}{\the\@MXV@includes}%
- \fi%
- %
- %entire action entry moved outside screen annotation
- \pdfmark{%
- pdfmark=/PUT,%
- Raw={%
- {screenannot\the\@MXV@includes} <<%
- /A <<%
- /R {mediarendition\the\@MXV@includes}%
- /S/Rendition%
- /OP 0% fallback, if /JS doesn't work or is empty
- \@MXV@activationjsentry%
- /AN {screenannot\the\@MXV@includes}%
- >>%
- >>%
- }%
- }%
- %
- %new rendition object of subtype `Media Rendition' (/S/MR)
- \pdfmark{%
- pdfmark=/OBJ,%
- Raw={%
- /type/dict%
- /_objdef {mediarendition\the\@MXV@includes}%
- }%
- }%
- \pdfmark{%
- pdfmark=/PUT,%
- Raw={%
- {mediarendition\the\@MXV@includes} <<%
- /C {mediaclipdata\the\@MXV@includes}%
- /S/MR%
- %screen parameters: fully transparent, hidden if audio mime type
- /SP <</BE<</O 0.0>>>>%
- /P <<%Media Play Parameters
- \@MXV@player%
- /BE <<%Parameters need only be honored by the player in
- %the best effort sense
- /F 2%scale media's width and height to fit the
- %annotation rectangle
- \@MXV@@repeat\@MXV@@volume\@MXV@@ctrls%
- /D <</S /F>>%movie remains opened
- >>%
- >>%
- >>%
- }%
- }%
- %
- %new media clip object of subtype `Media Clip Data' (/S/MCD)
- \pdfmark{%
- pdfmark=/OBJ,%
- Raw={%
- /_objdef {mediaclipdata\the\@MXV@includes}%
- /type/dict%
- }%
- }%
- \pdfmark{%
- pdfmark=/PUT,%
- Raw={%
- {mediaclipdata\the\@MXV@includes} <<%
- /D {filespec\the\@MXV@includes}%
- /P <</TF(TEMPACCESS)>>%
- /S/MCD%
- /CT (\@MXV@mime)% mime type
- >>%
- }%
- }%
- \fi%
- %
- %new file specification object
- \ifthenelse{\boolean{@MXV@externalviewer}\AND\NOT\boolean{@MXV@inline}}{}{%
- \pdfmark{%
- pdfmark=/OBJ,%
- Raw={%
- /_objdef {filespec\the\@MXV@includes}%
- /type/dict%
- }%
- }%
- \pdfmark{%
- pdfmark=/PUT,%
- Raw={%
- {filespec\the\@MXV@includes} <<%
- \@MXV@fsentry
- /F(#4)% file name
- /Type/Filespec%
- >>%
- }%
- }%
- }%
- %
- %embedded file entry `/EF'
- \if@MXV@inline%
- %embed the same media file only once
- \ifthenelse{\equal{\@MXV@getlabelvalue{\pdfmdfivesum file {#4}}}{undefined}}{%
- %new stream object
- \pdfmark{%
- pdfmark=/OBJ,%
- Raw={%
- /_objdef {fstream\the\@MXV@includes}%
- /type/stream%
- }%
- }%
- \pdfmark{%
- pdfmark=/PUT,%
- Raw={%
- {fstream\the\@MXV@includes}%
- (#4) (r) file% read in file contents
- }%
- }%
- \pdfmark{%
- pdfmark=/PUT,%
- Raw={%
- {fstream\the\@MXV@includes} <<%
- /Type/EmbeddedFile%
- /Subtype(\@MXV@mime)%
- >>%
- }%
- }%
- \edef\@MXV@moviestream{fstream\the\@MXV@includes}%
- \@MXV@newlabel{\pdfmdfivesum file {#4}}{fstream\the\@MXV@includes}%
- }{%
- \edef\@MXV@moviestream{\@MXV@getlabelvalue{\pdfmdfivesum file {#4}}}%
- }%
- % put the embedded file entry into file spec object
- \pdfmark{%
- pdfmark=/PUT,%
- Raw={%
- {filespec\the\@MXV@includes} <<%
- /EF << /F {\@MXV@moviestream} >>%
- >>%
- }%
- }%
- \fi%
- %
- \if@MXV@externalviewer\else%
- %create actions for page open/close events
- \pdfmark{%
- pdfmark=/OBJ,%
- Raw={%
- /_objdef {pageopenaction\the\@MXV@includes}%
- /type/dict%
- }%
- }%
- \pdfmark{%
- pdfmark=/PUT,%
- Raw={%
- {pageopenaction\the\@MXV@includes} <<%
- /R {mediarendition\the\@MXV@includes}%
- /S/Rendition%
- \@MXV@pageopenopentry% /OP fallback, if /JS doesn't work
- \@MXV@pageopenjsentry%
- /AN {screenannot\the\@MXV@includes}%
- >>%
- }%
- }%
- \pdfmark{%
- pdfmark=/OBJ,%
- Raw={%
- /_objdef {pagecloseaction\the\@MXV@includes}%
- /type/dict%
- }%
- }%
- \pdfmark{%
- pdfmark=/PUT,%
- Raw={%
- {pagecloseaction\the\@MXV@includes} <<%
- /R {mediarendition\the\@MXV@includes}%
- /S/Rendition%
- \@MXV@pagecloseopentry%
- \@MXV@pageclosejsentry%
- /AN {screenannot\the\@MXV@includes}%
- >>%
- }%
- }%
- %
- %create and populate additional actions dictionary, always add entries
- %for page open/close events
- \pdfmark{%
- pdfmark=/OBJ,%
- Raw={%
- /type/dict%
- /_objdef {aadict\the\@MXV@includes}%
- }%
- }%
- %
- \pdfmark{%
- pdfmark=/PUT,%
- Raw={%
- {aadict\the\@MXV@includes} <<%
- /PO {pageopenaction\the\@MXV@includes}%
- /PC {pagecloseaction\the\@MXV@includes}%
- >>%
- }%
- }%
- \fi%
- }%
-\fi
-
-%definition of user command `\includemovie'
-\newcommand{\includemovie}[4][]{%
- \leavevmode%
- \@MXV@reset% all macros and options
- \setkeys{MXV@user}{#1}% parse options
- %
- %total height of text
- \@MXV@totalheight=\@MXV@height%
- \advance\@MXV@totalheight by \@MXV@depth%
- %traiselen=distance at which text is to be raised to centre it vertically
- %braiselen=vertical centre of media box (auxiliary measure)
- \@MXV@traiselen=0.5\@MXV@height%
- \advance\@MXV@traiselen by -0.5\@MXV@depth%
- %
- \ifthenelse{\equal{#3}{}}{% no height argument
- \@MXV@braiselen=0.5\@MXV@height%
- }{%override height of text, height argument given
- \@MXV@braiselen=#3%
- \@MXV@braiselen=0.5\@MXV@braiselen%
- \setlength{\@MXV@height}{#3}%
- }%
- %
- \ifthenelse{\equal{\@MXV@boxdepth}{}}{% no depth option given
- \ifthenelse{\lengthtest{\@MXV@totalheight>\@MXV@height}}{%
- %depth of text only taken into account, if the total height
- %is smaller than the height of the display box
- \advance\@MXV@braiselen by -0.5\@MXV@depth%
- }{%
- \@MXV@depth=0pt%
- }%
- }{%override depth of text, depth option given
- \setlength{\@MXV@@boxdepth}{\@MXV@boxdepth}%
- \advance\@MXV@braiselen by -0.5\@MXV@@boxdepth%
- \setlength{\@MXV@depth}{\@MXV@boxdepth}%
- }%
- %finally centre text vertically
- \ifthenelse{\NOT\equal{#3}{}\OR\NOT\equal{\@MXV@boxdepth}{}}{%
- \advance\@MXV@traiselen by -\@MXV@braiselen%
- \@MXV@traiselen=-\@MXV@traiselen%
- \savebox{\@MXV@textbox}{\raisebox{\@MXV@traiselen}[0pt][0pt]{%
- \usebox{\@MXV@textbox}}}%
- }{}%
- \ifthenelse{\equal{#2}{}}{}{%override horiz. dimension of text
- \setlength{\@MXV@width}{#2}%
- %centre text horizontally
- \savebox{\@MXV@textbox}{\makebox[\@MXV@width][c]{\usebox{\@MXV@textbox}}}%
- }%
- %
- %find out whether the contents should be hidden or not (for presentations)
- \setboolean{@MXV@hide}{false}%
-% \ifthenelse{\boolean{@MXV@powerdot}}{%
-% \ifthenelse{\boolean{pd@overlay}}{}{%
-% \ifthenelse{\pd@method=2}{}{%
-% \setboolean{@MXV@hide}{true}%
-% }%
-% }%
-% }{}%
- \ifthenelse{\boolean{@MXV@beamer}}{%
- \ifthenelse{\boolean{beamer@anotherslide}}{%
- \setboolean{@MXV@hide}{true}%
- }{}%
- }{}%
- %
- \ifthenelse{\boolean{@MXV@hide}}{%
- %insert whitespace instead of annot
- \phantom{\vrule width \@MXV@width height \@MXV@height depth \@MXV@depth}%
- }{%
- \ifthenelse{\NOT\boolean{@MXV@url}\AND\boolean{@MXV@inline}}{%
- \IfFileExists{#4}{}{%
- \PackageError{movie15}{%
- File `#4' cannot be opened for embedding.\MessageBreak
- Did you forget to set option `url' or `inline=false'?
- }{%
- Try any of the options `url' or `inline=false'!
- }%
- }%
- }{}%
- %
- %guess the mime type based on the filename extension
- \filename@parse{#4}%
- \ifthenelse{\equal{\@MXV@mime}{@MXV@auto}}{%
- \@MXV@guessmime{#4}{\filename@ext}}{}%
- \if\filename@ext\relax%
- \xdef\@MXV@filename{\filename@base}%
- \else%
- \xdef\@MXV@filename{\filename@base.\filename@ext}%
- \fi%
- \expandafter\@MXV@@issound\@MXV@mime:%
- %
- %if 3D object is not embedded inline we must use some external player :(
- \ifthenelse{%
- \boolean{@MXV@iiid}%
- \AND\NOT\boolean{@MXV@inline}%
- }{%
- \setboolean{@MXV@externalviewer}{true}%
- }{}%
- %
- \edef\@MXV@urlattr{%
- \if@MXV@beamer%
- /Border [1 1 1]%
- \else%
- /Border [\@pdfborder]%
- \fi%
- /C [\@urlbordercolor]%
- /H \@pdfhighlight%
- }%
- \edef\@MXV@runattr{%
- \if@MXV@beamer%
- /Border [1 1 1]%
- \else%
- /Border [\@pdfborder]%
- \fi%
- /C [\@runbordercolor]%
- /H \@pdfhighlight%
- }%
- %
- \global\advance\@MXV@includes by 1%increment counter
- %
- %label this annotation for later page number determination
- \@MXV@labeltoaux{@MXV@annot\the\@MXV@includes.page}{%
- \noexpand\the\@MXV@page}%
- %
- %label this annotation for later annot id number determination &
- %check for multiply-defined labels
- % \@MXV@label --> automatic (presentation mode) or user defined label
- % \@MXV@@label = \@MXV@label (non presentation doc classes)
- % \@MXV@@label = \@MXV@label + physical page No. (presentation mode)
- \ifx\@MXV@label\@empty%
- %when used with presentation packages, annots must be labelled,
- %use the media file name, if no label provided
- \ifthenelse{\boolean{@MXV@presentation}}{%
- \xdef\@MXV@label{#4}%
- }{}%
- \fi%
- \ifx\@MXV@label\@empty\else%
- \ifthenelse{\boolean{@MXV@presentation}}{%
- %in presentation mode, the label must be extended by the physical page No.
- \xdef\@MXV@@label{\@MXV@label.\@MXV@getlabelvalue{@MXV@annot\the\@MXV@includes.page}}%
- }{%
- \xdef\@MXV@@label{\@MXV@label}%
- }%
- \fi%
- \ifx\@MXV@@label\@empty\else%
- \ifthenelse{%
- \NOT\equal{\@MXV@getlabelvalue{@MXV@\@MXV@@label.annotid}}{undefined}%
- \AND%
- \NOT\equal{\@MXV@getlabelvalue{@MXV@\@MXV@@label.annotid}}{%
- \the\@MXV@includes}%
- }{%
- \PackageWarning{movie15}{%
- Label `\@MXV@label' multiply defined%
- }%
- \ifthenelse{\isundefined{\@MXV@multiwarning}}{%
- \gdef\@MXV@multiwarning{}%
- \AtEndDocument{%
- \PackageWarningNoLine{movie15}{%
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\MessageBreak
- @@ There were multiply-defined labels! @@\MessageBreak
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@}%
- }%
- }{}%
- }{}%
- \if@MXV@@draft%
- \@MXV@labeltoaux{@MXV@\@MXV@label.draft}{true}%
- \else%
- \@MXV@labeltoaux{@MXV@\@MXV@label.draft}{false}%
- \fi%
- \@MXV@labeltoaux{@MXV@\@MXV@@label.annotid}{\the\@MXV@includes}%
- \if@MXV@presentation\else%
- \@MXV@newlabel{@MXV@\@MXV@@label.annotid}{\the\@MXV@includes}%
- \fi%
- \fi%
- %
- \ifthenelse{\boolean{@MXV@@draft}}{}{%
- \ifthenelse{\boolean{@MXV@externalviewer}}{%
- \ifx\@MXV@label\@empty\else%
- \@MXV@labeltoaux{@MXV@\@MXV@label.externalviewer}{true}%
- \@MXV@newlabel{@MXV@\@MXV@label.externalviewer}{true}%
- \fi%
- }{%
- %what is to be put into movie link annot depends on the following
- \ifx\@MXV@label\@empty\else%
- \@MXV@labeltoaux{@MXV@\@MXV@label.externalviewer}{false}%
- \@MXV@newlabel{@MXV@\@MXV@label.externalviewer}{false}%
- \fi%
- %
- %depending on options do content specific stuff
- \ifthenelse{\boolean{@MXV@iiid}}{%
- % #### 3D ####
- \if@MXV@externalviewer\else%
- \ifthenelse{\equal{\@MXV@iiidpalindrome}{/Subtype/Oscillating}}{%
- \global\multiply\@MXV@iiidrepeat by 2%
- }{}%
- \ifthenelse{\boolean{@MXV@autoplay}\OR\boolean{@MXV@autoresume}}{%
- \def\@MXV@activation{/A/PV/AIS/L}% open 3D object, run animation
- }{%
- \if@MXV@runposter%
- \def\@MXV@activation{/A/PV/AIS/I}%open 3D obj but don't run animation
- \else%
- \def\@MXV@activation{/A/XA}% explicit activation by user
- \fi%
- }%
- \if@MXV@autostop%
- \def\@MXV@deactivation{/D/PI/DIS/I}%
- \else%
- \if@MXV@autopause%
- \def\@MXV@deactivation{/D/PI/DIS/I}%
- \else%
- \if@MXV@autoclose%
- \def\@MXV@deactivation{/D/PI/DIS/U}%
- \else%@MXV@continue
- \def\@MXV@deactivation{/D/PI/DIS/L}%
- \fi%
- \fi%
- \fi%
- %counter for 3D inclusion on current page
- \ifthenelse{%
- \equal{%
- \@MXV@getlabelvalue{@MXV@annot\the\@MXV@includes.page}%
- }{\@MXV@oldpage}%
- }{%
- \global\advance\@MXV@iiidoncurpage by 1%
- }{%
- \global\@MXV@iiidoncurpage=1%
- }%
- \xdef\@MXV@oldpage{\@MXV@getlabelvalue{%
- @MXV@annot\the\@MXV@includes.page}}%
- \fi%
- \ifx\@MXV@label\@empty\else%
- \@MXV@labeltoaux{@MXV@\@MXV@label.3D}{true}%
- \@MXV@newlabel{@MXV@\@MXV@label.3D}{true}%
- \@MXV@labeltoaux{@MXV@\@MXV@label.3Dbg}{\@MXV@defaultbg}%
- \@MXV@newlabel{@MXV@\@MXV@label.3Dbg}{\@MXV@defaultbg}%
- \@MXV@labeltoaux{@MXV@\@MXV@label.3Dlights}{\@MXV@defaultlights}%
- \@MXV@newlabel{@MXV@\@MXV@label.3Dlights}{\@MXV@defaultlights}%
- \@MXV@labeltoaux{@MXV@\@MXV@label.3Drender}{\@MXV@defaultrender}%
- \@MXV@newlabel{@MXV@\@MXV@label.3Drender}{\@MXV@defaultrender}%
- \fi%
- \ifx\@MXV@@label\@empty\else%
- \@MXV@labeltoaux{@MXV@\@MXV@@label.3Doncurpage}{\the\@MXV@iiidoncurpage}%
- \@MXV@newlabel{@MXV@\@MXV@@label.3Doncurpage}{\the\@MXV@iiidoncurpage}%
- \fi%
- }{%#### 2D ####
- %get the player ID
- \if@MXV@presentation%
- \ifthenelse{%
- \equal{\@MXV@getlabelvalue{@MXV@\@MXV@label.playerid}}{undefined}%
- }{%
- \global\advance\@MXV@players by 1%increment counter
- }{%
- \global\@MXV@players=\@MXV@getlabelvalue{@MXV@\@MXV@label.playerid}%
- }%
- \@MXV@labeltoaux{@MXV@\@MXV@label.playerid}{\the\@MXV@players}%
- \@MXV@newlabel{@MXV@\@MXV@label.playerid}{\the\@MXV@players}%
- \edef\@MXV@currplayer{\the\@MXV@players}%
- \else%
- \ifx\@MXV@label\@empty\else%
- \@MXV@labeltoaux{@MXV@\@MXV@label.playerid}{\the\@MXV@includes}%
- \@MXV@newlabel{@MXV@\@MXV@label.playerid}{\the\@MXV@includes}%
- \fi%
- \edef\@MXV@currplayer{\the\@MXV@includes}%
- \fi%
- %
- \ifx\@MXV@startat\@empty% default start position
- \gdef\@MXV@startat{, startAt: 0}%
- \fi%
- %write player settings to aux file
- \ifx\@MXV@label\@empty\else%
- \@MXV@labeltoaux{@MXV@\@MXV@label.mouse}{%
- \if@MXV@mouse true\else false\fi}%
- \@MXV@labeltoaux{@MXV@\@MXV@label.showUI}{\@MXV@ctrls}%
- \@MXV@labeltoaux{@MXV@\@MXV@label.palindrome}{\@MXV@palindrome}%
- \@MXV@labeltoaux{@MXV@\@MXV@label.repeat}{\@MXV@repeat}%
- \@MXV@labeltoaux{@MXV@\@MXV@label.rate}{\@MXV@rate}%
- \@MXV@labeltoaux{@MXV@\@MXV@label.startAt}{\@MXV@startat}%
- \@MXV@labeltoaux{@MXV@\@MXV@label.endAt}{\@MXV@endat}%
- \@MXV@labeltoaux{@MXV@\@MXV@label.volume}{\@MXV@volume}%
- \@MXV@labeltoaux{@MXV@\@MXV@label.autoplay}{%
- \if@MXV@autoplay true\else false\fi}%
- \@MXV@labeltoaux{@MXV@\@MXV@label.3D}{false}%
- \@MXV@labeltoaux{@MXV@\@MXV@label.issound}{%
- \if@MXV@issound true\else false\fi}%
- %
- \@MXV@newlabel{@MXV@\@MXV@label.mouse}{%
- \if@MXV@mouse true\else false\fi}%
- \@MXV@newlabel{@MXV@\@MXV@label.showUI}{\@MXV@ctrls}%
- \@MXV@newlabel{@MXV@\@MXV@label.palindrome}{\@MXV@palindrome}%
- \@MXV@newlabel{@MXV@\@MXV@label.repeat}{\@MXV@repeat}%
- \@MXV@newlabel{@MXV@\@MXV@label.rate}{\@MXV@rate}%
- \@MXV@newlabel{@MXV@\@MXV@label.startAt}{\@MXV@startat}%
- \@MXV@newlabel{@MXV@\@MXV@label.endAt}{\@MXV@endat}%
- \@MXV@newlabel{@MXV@\@MXV@label.volume}{\@MXV@volume}%
- \@MXV@newlabel{@MXV@\@MXV@label.autoplay}{%
- \if@MXV@autoplay true\else false\fi}%
- \@MXV@newlabel{@MXV@\@MXV@label.3D}{false}%
- \@MXV@newlabel{@MXV@\@MXV@label.issound}{%
- \if@MXV@issound true\else false\fi}%
- %
- \fi%
- %
- \ifthenelse{\boolean{@MXV@autoplay}\OR\boolean{@MXV@runposter}}{%
- \xdef\@MXV@pageopenopentry{/OP 4}%
- }{%
- \if@MXV@autoresume%
- \xdef\@MXV@pageopenopentry{/OP 3}%
- \else%
- \xdef\@MXV@pageopenopentry{/OP 2}%
- \fi%
- }%
- %
- \if@MXV@autostop%
- \xdef\@MXV@pagecloseopentry{/OP 1}%
- \else%
- \if@MXV@autopause%
- \xdef\@MXV@pagecloseopentry{/OP 2}%
- \else%
- \if@MXV@autoclose%
- \xdef\@MXV@pagecloseopentry{/OP 1}%
- \else% @MXV@continue
- \xdef\@MXV@pagecloseopentry{/OP 3}%
- \fi%
- \fi%
- \fi%
- %
- %JavaScripts for playback control
- %script for page invisible event
- \if@MXV@autopause%
- \xdef\@MXV@pageclosejsentry{%
- /JS (
- try{%
- if(player\@MXV@currplayer.isPlaying){%
- player\@MXV@currplayer.pause();
- player\@MXV@currplayer.settings.privateData.paused=true;
- }
- focusonplayer=-1; %page change
- player\@MXV@currplayer.visible=false;
- }
- catch(e){}
- )%
- }%
- \else%
- \if@MXV@autostop%
- \xdef\@MXV@pageclosejsentry{%
- /JS (
- try{%
- player\@MXV@currplayer.settings.privateData.paused=false;
- %players tend to be bugged, always stop from playing state
- if(!player\@MXV@currplayer.isPlaying){
- player\@MXV@currplayer.play();
- }
- player\@MXV@currplayer.stop();
- if(
- player\@MXV@currplayer.settings.startAt.time
- || player\@MXV@currplayer.settings.startAt.frame
- || player\@MXV@currplayer.settings.startAt.marker
- || player\@MXV@currplayer.id ==
- 'vnd.adobe.swname:AAPL_QuickTime'
- ){
- player\@MXV@currplayer.seek(%
- player\@MXV@currplayer.settings.startAt);
- }
- focusonplayer=-1;
- player\@MXV@currplayer.visible=false;
- }
- catch(e){}
- )%
- }%
- \else%
- \if@MXV@autoclose%
- \xdef\@MXV@pageclosejsentry{%
- /JS (
- try{%
- player\@MXV@currplayer.close(app.media.closeReason.general);
- focusonplayer=-1; %page change
- player\@MXV@currplayer.visible=false;
- }
- catch(e){}
- )%
- }%
- \else%
- \xdef\@MXV@pageclosejsentry{%@MXV@continue
- /JS (
- try{%
- focusonplayer=-1; %page change
- player\@MXV@currplayer.visible=false;
- }
- catch(e){}
- )%
- }%
- \fi%
- \fi%
- \fi%
- %
- %script for activation/resume on page open event
- \xdef\@MXV@pageopenjsentry{%
- /JS (
- try{%
- if(player\@MXV@currplayer.isOpen){%
- %drag the player on the current slide (presentation mode)
- player\@MXV@currplayer.page=this.pageNum;
- %... and make it visible
- \if@MXV@issound\else player\@MXV@currplayer.visible=true;\fi%
- %
- %start or resume media which have autoplay option set;
- %also resume paused media which have autoresume option set
- \if@MXV@autoplay%
- player\@MXV@currplayer.settings.privateData.paused=false;
- player\@MXV@currplayer.play();
- if(!player\@MXV@currplayer.isPlaying){% still not playing?!
- if(
- player\@MXV@currplayer.settings.startAt.time
- || player\@MXV@currplayer.settings.startAt.frame
- || player\@MXV@currplayer.settings.startAt.marker
- || player\@MXV@currplayer.id=='vnd.adobe.swname:AAPL_QuickTime'
- ){
- player\@MXV@currplayer.seek(
- player\@MXV@currplayer.settings.startAt);
- }else{
- player\@MXV@currplayer.stop();
- }
- player\@MXV@currplayer.play();
- }
- \else%
- \if@MXV@autoresume%
- if(player\@MXV@currplayer.settings.privateData.paused){%
- player\@MXV@currplayer.settings.privateData.paused=false;
- player\@MXV@currplayer.play();
- if(!player\@MXV@currplayer.isPlaying){%
- if(
- player\@MXV@currplayer.settings.startAt.time
- || player\@MXV@currplayer.settings.startAt.frame
- || player\@MXV@currplayer.settings.startAt.marker
- || player\@MXV@currplayer.id ==
- 'vnd.adobe.swname:AAPL_QuickTime'
- ){
- player\@MXV@currplayer.seek(%
- player\@MXV@currplayer.settings.startAt);
- }else{
- player\@MXV@currplayer.stop();%
- }
- player\@MXV@currplayer.play();
- }
- }
- \fi%
- \fi%
- }
- else{%
- throw 'isClosed';
- }
- }
- catch(e){%
- \@MXV@if{\if@MXV@autoplay true\else\if@MXV@runposter true\else %
- false\fi\fi}%
- if(focusonplayer==undefined){%
- var focusonplayer=0; %shared by all annots
- }
- \@MXV@settings{\@MXV@ctrls}{\@MXV@palindrome}{\@MXV@repeat}%
- {\@MXV@rate}{\@MXV@startat}{\@MXV@endat}{\@MXV@volume}%
- \@MXV@events{\@MXV@currplayer}%
- {\if@MXV@mouse true\else false\fi}%
- {\if@MXV@autoplay true\else false\fi}%
- var player\@MXV@currplayer=app.media.openPlayer({%
- settings: settings,
- events: events
- });
- \fi%
- }%
- )
- }%
- %
- %script for normal activation by mouse click
- \xdef\@MXV@activationjsentry{%
- /JS (
- app.focusRect=true;%
- if(focusonplayer==undefined){%
- var focusonplayer=0; %shared by all annots
- }
- \@MXV@settings{\@MXV@ctrls}{\@MXV@palindrome}{\@MXV@repeat}%
- {\@MXV@rate}{\@MXV@startat}{\@MXV@endat}{\@MXV@volume}%
- \@MXV@events{\@MXV@currplayer}{\if@MXV@mouse true\else false\fi}%
- {true}%
- var player\@MXV@currplayer=app.media.openPlayer({%
- settings: settings,
- events: events
- });
- )
- }%
- }%
- }%
- }% draft?
- %
- %insert link target, if media has been labelled
- \ifthenelse{\NOT\equal{\@MXV@@label}{}}{%
- \raisebox{\@MXV@height}{%
- \ifpdf%
- \pdfdest name {@MXV@\@MXV@@label} xyz %
- \else%
- \hypertarget{@MXV@\@MXV@@label}{}%
- \fi%
- }%
- }{}%
- %
- \ifthenelse{\boolean{@MXV@@draft}}{%
- \makebox[0pt][l]{\usebox{\@MXV@textbox}}%
- \@MXV@draftbox{\@MXV@width}{\@MXV@height}{\@MXV@depth}{#4}%
- }{%
- %insert textbox, obscured by poster
- \ifthenelse{\boolean{@MXV@boxopt}\AND\NOT\boolean{@MXV@textoverposter}}{%
- \makebox[0pt][l]{\usebox{\@MXV@textbox}}%
- }{}%
- %
- %insert annotation
- \ifthenelse{\boolean{@MXV@iiid}}{%
- \edef\@MXV@iiidopt{[\@MXV@iiidopt]}%
- \expandafter\@MXV@includeiiid\@MXV@iiidopt{\@MXV@width}{\@MXV@height}{\@MXV@depth}{#4}%
- }{%
- \@MXV@includemovie{\@MXV@width}{\@MXV@height}{\@MXV@depth}{#4}%
- }%
- %
- %insert textbox, overprinting the poster
- \ifthenelse{\boolean{@MXV@boxopt}\AND\boolean{@MXV@textoverposter}}{%
- \makebox[0pt][r]{\usebox{\@MXV@textbox}}%
- }{}%
- }%
- }%
-}
-
-%for remote control of media
-\newcommand\movieref[3][]{%
- \leavevmode%
- % save text argument
- \savebox{\@MXV@textbox}{\ifHy@colorlinks\color{\@linkcolor}\fi#3}%
- %
- %find out whether the contents should be hidden or not (for presentations)
- \setboolean{@MXV@hide}{false}%
-% \ifthenelse{\boolean{@MXV@powerdot}}{%
-% \ifthenelse{\boolean{pd@overlay}}{}{%
-% \ifthenelse{\pd@method=2}{}{%
-% \setboolean{@MXV@hide}{true}%
-% }%
-% }%
-% }{}%
- \ifthenelse{\boolean{@MXV@beamer}}{%
- \ifthenelse{\boolean{beamer@anotherslide}}{%
- \setboolean{@MXV@hide}{true}%
- }{}%
- }{}%
- %
- \ifthenelse{\boolean{@MXV@hide}}{%
- %put whitespace instead of link annot
- \phantom{\usebox{\@MXV@textbox}}%
- }{%
- \@MXV@reset%
- %
- \xdef\@MXV@label{#2}%
- %
- \global\advance\@MXV@links by 1%increment link counter
- %
- %label this link for later page number determination
- \@MXV@labeltoaux{@MXV@link\the\@MXV@links.page}{\noexpand\the\@MXV@page}%
- %
- \ifthenelse{\boolean{@MXV@presentation}}{%
- %in presentation mode the label must be extended by the physical page No.
- \xdef\@MXV@@label{\@MXV@label.\@MXV@getlabelvalue{@MXV@link\the\@MXV@links.page}}%
- }{%
- \xdef\@MXV@@label{\@MXV@label}%
- }%
- %
- %check if label is defined at all
- \ifthenelse{\equal{\@MXV@getlabelvalue{@MXV@\@MXV@@label.annotid}}{undefined}}{%
- \usebox{\@MXV@textbox}% write out text box
- \PackageWarning{movie15}{%
- Reference `\@MXV@label' on page \thepage \space undefined%
- }%
- \ifthenelse{\isundefined{\@MXV@undefwarning}}{%
- \gdef\@MXV@undefwarning{}%
- \AtEndDocument{%
- \PackageWarningNoLine{movie15}{%
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\MessageBreak%
- @@ There were undefined references! @@\MessageBreak%
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@}%
- }%
- }{}%
- }{%
- \ifthenelse{\equal{\@MXV@getlabelvalue{@MXV@\@MXV@label.draft}}{true}}{%
- \setboolean{@MXV@@draft}{true}% if the screen annotation is in draft mode
- }{}%
- \if@MXV@@draft\else%
- \ifthenelse{\equal{\@MXV@getlabelvalue{@MXV@\@MXV@label.externalviewer}}{true}}{%
- \setboolean{@MXV@externalviewer}{true}%
- }{%
- \setboolean{@MXV@externalviewer}{false}%
- }%
- \if@MXV@externalviewer\else%
- %movieref used in 3D context?
- \ifthenelse{\equal{\@MXV@getlabelvalue{@MXV@\@MXV@label.3D}}{true}}{%
- \ifthenelse{\boolean{@MXV@iiiDfeat}}{%
- \setboolean{@MXV@iiid}{true}%
- }{%
- \@MXV@neediiiD%
- }%
- }{}%
- %
- %actions completely different in 3D & 2D context
- \ifthenelse{\boolean{@MXV@iiid}}{% #### 3D ####
- %retrieve default background colour
- \ifthenelse{\equal{\@MXV@getlabelvalue{@MXV@\@MXV@label.3Dbg}}{undefined}}{%
- \gdef\@MXV@defaultbg{1 1 1}%
- }{%
- \xdef\@MXV@defaultbg{\@MXV@getlabelvalue{@MXV@\@MXV@label.3Dbg}}%
- }%
- %retrieve default lighting scheme
- \ifthenelse{\equal{\@MXV@getlabelvalue{@MXV@\@MXV@label.3Dlights}}{undefined}}{%
- \gdef\@MXV@defaultlights{}%
- }{%
- \xdef\@MXV@defaultlights{\@MXV@getlabelvalue{@MXV@\@MXV@label.3Dlights}}%
- }%
- %retrieve default render mode
- \ifthenelse{\equal{\@MXV@getlabelvalue{@MXV@\@MXV@label.3Drender}}{undefined}}{%
- \gdef\@MXV@defaultrender{Solid}%
- }{%
- \xdef\@MXV@defaultrender{\@MXV@getlabelvalue{@MXV@\@MXV@label.3Drender}}%
- }%
- \setkeys{MXV@user}{#1}%
- \if@MXV@defaultviewprovided% define a new view,
- %using any of the coo, c2c, roo, caa options
- \pdfstringdef\@MXV@xname{}%
- \edef\@MXV@args{\@MXV@coo\space\@MXV@ctoc\space\@MXV@roo\space\@MXV@roll\space}%
- \expandafter\@MXV@ciiwmatrix\@MXV@args% build C2W matrix
- \@MXV@viewobj% create pdf object of 3D view
- \edef\@MXV@iiidview{\@MXV@@viewobj}%
- %else use the indexed view specified by option `3Dviewindex'
- \fi%
- %
- %create JavaScript (options 3Djscript, 3Dcalculate, 3Dgetview)
- \ifthenelse{\NOT\equal{\@MXV@jscriptiiidfile}{}%
- \OR\NOT\equal{\@MXV@calc}{}%
- \OR\boolean{@MXV@iiidgetview}%
- }{%
- \edef\@MXV@linkjscriptiiid{%
- try{%
- %fill hash (annot3D) with refs to Annot3D objects
- annot3D['\@MXV@label']=getAnnots3D(%
- \@MXV@getlabelvalue{%
- @MXV@annot\@MXV@getlabelvalue{@MXV@\@MXV@@label.annotid}.page%
- }-1%
- )[\@MXV@getlabelvalue{@MXV@\@MXV@@label.3Doncurpage}-1];%
- annot3D['\@MXV@label'].activated=true;%
- }catch(e){%
- try{%
- annot3D=new Array;%
- annot3D['\@MXV@label']=getAnnots3D(%
- \@MXV@getlabelvalue{%
- @MXV@annot\@MXV@getlabelvalue{@MXV@\@MXV@@label.annotid}.page%
- }-1%
- )[\@MXV@getlabelvalue{@MXV@\@MXV@@label.3Doncurpage}-1];%
- annot3D['\@MXV@label'].activated=true;%
- }catch(e){%
- var spc=String.fromCharCode(32);%
- app.alert('3D' + spc + 'annotation' + spc + 'could' + spc +%
- 'not' + spc + 'be' + spc + 'activated!');%
- }%
- }%
- }%
- \if@MXV@iiidgetview%
- \edef\@MXV@linkjscriptiiid{%
- \@MXV@linkjscriptiiid
- try{
- %JavaScript to print the camera settings of the current view
- var scene=annot3D['\@MXV@label'].context3D.scene;%
- var camera=scene.cameras.getByIndex(0);%
- var coo=camera.targetPosition;%
- var c2c=camera.position.subtract(coo);%
- var roo=c2c.length;%
- c2c.normalize();%
- %
- %assemble result string
- var spc=String.fromCharCode(32);%
- var nl=String.fromCharCode(10);%
- var charht=2;%
- var res='VIEW\%={<insert'+spc+'descriptive'+spc+'name'+spc+
- 'here'+spc+'(optional)>}'+nl;%
- var x = (Math.abs(coo.x) < 1e-12 ? 0 : coo.x);%
- var y = (Math.abs(coo.y) < 1e-12 ? 0 : coo.y);%
- var z = (Math.abs(coo.z) < 1e-12 ? 0 : coo.z);%
- if(Math.sqrt(x*x + y*y + z*z) > 0){%
- res+=spc+spc;%
- res+=util.printf('COO=\%s' + spc + '\%s' + spc + '\%s' +nl,%
- (Math.abs(x) < 1.001e-6 && Math.abs(x) > 0 ?%
- util.printf('\%.18f', x): x),%
- (Math.abs(y) < 1.001e-6 && Math.abs(y) > 0 ?%
- util.printf('\%.18f', y): y),%
- (Math.abs(z) < 1.001e-6 && Math.abs(z) > 0 ?%
- util.printf('\%.18f', z): z)%
- );%
- charht+=2;%
- }%
- x = (Math.abs(c2c.x) < 1e-12 ? 0 : c2c.x);%
- y = (Math.abs(c2c.y) < 1e-12 ? 0 : c2c.y);%
- z = (Math.abs(c2c.z) < 1e-12 ? 0 : c2c.z);%
- if(!(x==0 && y==-1 && z==0)){%
- res += spc + spc;%
- res+=util.printf('C2C=\%s' + spc + '\%s' + spc + '\%s' +nl,%
- (Math.abs(x) < 1.001e-6 && Math.abs(x) > 0 ?%
- util.printf('\%.18f', x): x),%
- (Math.abs(y) < 1.001e-6 && Math.abs(y) > 0 ?%
- util.printf('\%.18f', y): y),%
- (Math.abs(z) < 1.001e-6 && Math.abs(z) > 0 ?%
- util.printf('\%.18f', z): z)%
- );%
- charht+=2;%
- }%
- if(roo > 0.11e-17){%
- res+= spc + spc;%
- res+=util.printf('ROO=\%s' + nl,%
- (roo < 1.001e-6 ? util.printf('\%.12f', roo): roo)%
- );%
- charht+=2;%
- }%
- %determine the camera roll (camera.roll is bugged)
- %%camera up-vector from camera.up, the latter being the positional vector
- %%of the actual camera up-vector tip
- %var up = camera.up.subtract(camera.position);%
- %up.normalize();%
- %%find the camera up-vector up0, that corresponds to zero roll
- %%(Gram-Schmitt orthogonalisation)
- %var worldup=new annot3D['\@MXV@label'].context3D.Vector3();%
- %worldup.set(0,0,1);%
- %var out=c2c.scale(-1);%
- %var up0=worldup.subtract(out.scale(out.dot(worldup)));%
- %up0.normalize();%
- %var up0xup=up0.cross(up);%
- %var roll=0;%
- %if(up0xup.length>0){%
- % up0xup.normalize();%
- % var up0dotup=up.dot(up0);%
- % up0dotup=(Math.abs(up0dotup) > 1 ? Math.round(up0dotup) : up0dotup);%
- % %compute the angle between camera up and up0 vectors
- % roll=Math.acos(up0dotup)*180/Math.PI*out.dot(up0xup);%
- %}%
- var roll = camera.roll*180/Math.PI;%
- if(util.printf('\%.4f', roll)!=0){%
- res+=util.printf(spc +spc + 'ROLL=\%s' + nl, roll);%
- charht+=2;%
- }%
- aac=camera.fov * 180/Math.PI;%
- if(util.printf('\%.5f', aac)!=30){%
- res+=util.printf(spc + spc + 'AAC=\%s' + nl,%
- (Math.abs(aac) < 1.001e-6 ? util.printf('\%.18f', aac): aac)%
- );%
- charht+=2;%
- }%
- rgb=scene.background.getColor();%
- res+=spc + spc;%
- res+=util.printf('BGCOLOR=\%f' + spc + '\%f' + spc + '\%f'%
- + nl, rgb.r, rgb.g, rgb.b);%
- charht+=2;%
- switch(scene.lightScheme){%
- case scene.LIGHT_MODE_FILE:
- curlights='Artwork';break;
- case scene.LIGHT_MODE_NONE:
- curlights='None';break;
- case scene.LIGHT_MODE_WHITE:
- curlights='White';break;
- case scene.LIGHT_MODE_DAY:
- curlights='Day';break;
- case scene.LIGHT_MODE_NIGHT:
- curlights='Night';break;
- case scene.LIGHT_MODE_BRIGHT:
- curlights='Hard';break;
- case scene.LIGHT_MODE_RGB:
- curlights='Primary';break;
- case scene.LIGHT_MODE_BLUE:
- curlights='Blue';break;
- case scene.LIGHT_MODE_RED:
- curlights='Red';break;
- case scene.LIGHT_MODE_CUBE:
- curlights='Cube';break;
- case scene.LIGHT_MODE_CAD:
- curlights='CAD';break;
- case scene.LIGHT_MODE_HEADLAMP:
- curlights='Headlamp';break;
- }%
- res+=spc+spc+'LIGHTS='+curlights+nl;%
- charht+=2;%
- switch(scene.renderMode){%
- case scene.RENDER_MODE_BOUNDING_BOX:
- defaultrender='BoundingBox';break;
- case scene.RENDER_MODE_TRANSPARENT_BOUNDING_BOX:
- defaultrender='TransparentBoundingBox';break;
- case scene.RENDER_MODE_TRANSPARENT_BOUNDING_BOX_OUTLINE:
- defaultrender='TransparentBoundingBoxOutline';break;
- case scene.RENDER_MODE_VERTICES:
- defaultrender='Vertices';break;
- case scene.RENDER_MODE_SHADED_VERTICES:
- defaultrender='ShadedVertices';break;
- case scene.RENDER_MODE_WIREFRAME:
- defaultrender='Wireframe';break;
- case scene.RENDER_MODE_SHADED_WIREFRAME:
- defaultrender='ShadedWireframe';break;
- case scene.RENDER_MODE_SOLID:
- defaultrender='Solid';break;
- case scene.RENDER_MODE_TRANSPARENT:
- defaultrender='Transparent';break;
- case scene.RENDER_MODE_SOLID_WIREFRAME:
- defaultrender='SolidWireframe';break;
- case scene.RENDER_MODE_TRANSPARENT_WIREFRAME:
- defaultrender='TransparentWireframe';break;
- case scene.RENDER_MODE_ILLUSTRATION:
- defaultrender='Illustration';break;
- case scene.RENDER_MODE_SOLID_OUTLINE:
- defaultrender='SolidOutline';break;
- case scene.RENDER_MODE_SHADED_ILLUSTRATION:
- defaultrender='ShadedIllustration';break;
- case scene.RENDER_MODE_HIDDEN_WIREFRAME:
- defaultrender='HiddenWireframe';break;
- }%
- res+=spc+spc+'RENDERMODE='+defaultrender+nl;%
- charht+=2;%
- for(var i=0;i<scene.meshes.count;i++){%
- var mesh=scene.meshes.getByIndex(i);%
- respart=spc+spc+'PART={'+mesh.name+'}'+nl;%
- charhtpart=2;
- defaultvals=true;%
- if(!mesh.visible){%
- respart+=spc+spc+spc+spc+'VISIBLE=false'+nl;%
- charhtpart+=2;%
- defaultvals=false;%
- }
- if(mesh.visible){%
- if(mesh.opacity<1.0){%
- respart+=spc+spc+spc+spc+'OPACITY='+mesh.opacity+nl;%
- charhtpart+=2;%
- defaultvals=false;%
- }%
- currender=defaultrender;%
- switch(mesh.renderMode){%
- case scene.RENDER_MODE_BOUNDING_BOX:
- currender='BoundingBox';break;
- case scene.RENDER_MODE_TRANSPARENT_BOUNDING_BOX:
- currender='TransparentBoundingBox';break;
- case scene.RENDER_MODE_TRANSPARENT_BOUNDING_BOX_OUTLINE:
- currender='TransparentBoundingBoxOutline';break;
- case scene.RENDER_MODE_VERTICES:
- currender='Vertices';break;
- case scene.RENDER_MODE_SHADED_VERTICES:
- currender='ShadedVertices';break;
- case scene.RENDER_MODE_WIREFRAME:
- currender='Wireframe';break;
- case scene.RENDER_MODE_SHADED_WIREFRAME:
- currender='ShadedWireframe';break;
- case scene.RENDER_MODE_SOLID:
- currender='Solid';break;
- case scene.RENDER_MODE_TRANSPARENT:
- currender='Transparent';break;
- case scene.RENDER_MODE_SOLID_WIREFRAME:
- currender='SolidWireframe';break;
- case scene.RENDER_MODE_TRANSPARENT_WIREFRAME:
- currender='TransparentWireframe';break;
- case scene.RENDER_MODE_ILLUSTRATION:
- currender='Illustration';break;
- case scene.RENDER_MODE_SOLID_OUTLINE:
- currender='SolidOutline';break;
- case scene.RENDER_MODE_SHADED_ILLUSTRATION:
- currender='ShadedIllustration';break;
- case scene.RENDER_MODE_HIDDEN_WIREFRAME:
- currender='HiddenWireframe';break;
-% case scene.RENDER_MODE_DEFAULT:
-% currender='Default';break;
- }%
- if(currender!=defaultrender){%
- respart+=spc+spc+spc+spc+'RENDERMODE='+currender+nl;%
- charhtpart+=2;%
- defaultvals=false;%
- }%
- }%
- respart+=spc+spc+'END'+nl;%
- charhtpart+=2;%
- if(!defaultvals){%
- res+=respart;
- charht+=charhtpart;
- }%
- }%
- res+='END'+nl;%
- charht=(charht>40?40:charht);%
- %open pop-up displaying the result string
- var settings={%
- initialize: function(dialog) {%
- dialog.load({%
- 'text': res%
- });%
- },%
- description: {%
- name: 'Current' + spc + '3D' + spc + 'Camera' + spc + 'Settings',%
- elements: [%
- {%
- type: 'static_text',%
- name: 'Add' + spc + 'the' + spc + 'following' + spc + 'VIEW' + spc + 'section' + spc + %
- 'to' + spc + 'a' + spc + 'file' + spc + 'of' + spc +%
- 'predefined' + spc + 'views.' + spc +%
- '(See' + spc + 'option' + spc + '3Dviews2!)'%
- },%
- {%
- type: 'edit_text',%
- item_id: 'text',%
- alignment: 'align_fill',%
- multiline: true,%
- char_width: 80,%
- char_height: charht,%
- readonly: true%
- },%
- {%
- type: 'ok',%
- ok_name: 'Close'%
- }%
- ]%
- }%
- };%
- app.execDialog(settings);%
- }catch(e){%
- var spc=String.fromCharCode(32);%
- app.alert('Error' + spc + 'while' + spc + 'executing' + spc +%
- '3Dgetview:' + spc + e);%
- }%
- }%
- \fi%
- \ifx\@MXV@calc\@empty\else%
- \edef\@MXV@linkjscriptiiid{%
- \@MXV@linkjscriptiiid
- try{
-% console.show();
-% console.clear();
- %constructor for doubly linked list
- function List(){%
- this.first_node=null;%
- this.last_node=new Node(undefined);%
- }%
- List.prototype.push_back=function(x){%
- var new_node=new Node(x);%
- if(this.first_node==null){%
- this.first_node=new_node;%
- new_node.prev=null;%
- }else{%
- new_node.prev=this.last_node.prev;%
- new_node.prev.next=new_node;%
- }%
- new_node.next=this.last_node;%
- this.last_node.prev=new_node;%
- };%
- List.prototype.move_to_front=function(it){%
- var node=it.get();%
- if(node.next!=null && node.prev!=null){%
- node.next.prev=node.prev;%
- node.prev.next=node.next;%
- node.prev=null;%
- node.next=this.first_node;%
- this.first_node.prev=node;%
- this.first_node=node;%
- }%
- };%
- List.prototype.begin=function(){%
- var i=new Iterator();%
- i.target=this.first_node;%
- return(i);%
- };%
- List.prototype.end=function(){%
- var i=new Iterator();%
- i.target=this.last_node;%
- return(i);%
- };%
- function Iterator(it){%
- if( it!=undefined ){%
- this.target=it.target;%
- }else {%
- this.target=null;%
- }%
- }%
- Iterator.prototype.set=function(it){this.target=it.target;};%
- Iterator.prototype.get=function(){return(this.target);};%
- Iterator.prototype.deref=function(){return(this.target.data);};%
- Iterator.prototype.incr=function(){%
- if(this.target.next!=null){this.target=this.target.next;}%
- };%
- %constructor for node objects that populate the linked list
- function Node(x){%
- this.prev=null;%
- this.next=null;%
- this.data=x;%
- }%
- function sqr(r){return(r*r);}%helper function
- %The following code borrows heavily from Bernd Gaertners `Miniball' software,
- %originally written in C++, for computing the smallest enclosing ball of a
- %set of points; see: http://www.inf.ethz.ch/personal/gaertner/miniball.html
- function Basis(){%
- this.m=0;%
- this.q0=new Array(3);%
- this.z=new Array(4);%
- this.f=new Array(4);%
- this.v=new Array(new Array(3), new Array(3), new Array(3), new Array(3));%
- this.a=new Array(new Array(3), new Array(3), new Array(3), new Array(3));%
- this.c=new Array(new Array(3), new Array(3), new Array(3), new Array(3));%
- this.sqr_r=new Array(4);%
- this.current_c=this.c[0];%
- this.current_sqr_r=0;%
- this.reset();%
- }%
- Basis.prototype.center=function(){return(this.current_c);};%
- Basis.prototype.size=function(){return(this.m);};%
- Basis.prototype.pop=function(){--this.m;};%
- Basis.prototype.excess=function(p){%
- var e=-this.current_sqr_r;%
- for(var k=0;k<3;++k){%
- e+=sqr(p[k]-this.current_c[k]);%
- }%
- return(e);%
- };%
- Basis.prototype.reset=function(){%
- this.m=0;%
- for(var j=0;j<3;++j){%
- this.c[0][j]=0;%
- }%
- this.current_c=this.c[0];%
- this.current_sqr_r=-1;%
- };%
- Basis.prototype.push=function(p){%
- var i, j;%
- var eps=1e-32;%
- if(this.m==0){%
- for(i=0;i<3;++i){%
- this.q0[i]=p[i];%
- }%
- for(i=0;i<3;++i){%
- this.c[0][i]=this.q0[i];%
- }%
- this.sqr_r[0]=0;%
- }else {%
- for(i=0;i<3;++i){%
- this.v[this.m][i]=p[i]-this.q0[i];%
- }%
- for(i=1;i<this.m;++i){%
- this.a[this.m][i]=0;%
- for(j=0;j<3;++j){%
- this.a[this.m][i]+=this.v[i][j]*this.v[this.m][j];%
- }%
- this.a[this.m][i]*=(2/this.z[i]);%
- }%
- for(i=1;i<this.m;++i){%
- for(j=0;j<3;++j){%
- this.v[this.m][j]-=this.a[this.m][i]*this.v[i][j];%
- }%
- }%
- this.z[this.m]=0;%
- for(j=0;j<3;++j){%
- this.z[this.m]+=sqr(this.v[this.m][j]);%
- }%
- this.z[this.m]*=2;%
- if(this.z[this.m]<eps*this.current_sqr_r){%
- return(false);%
- }%
- var e=-this.sqr_r[this.m-1];%
- for(i=0;i<3;++i){%
- e+=sqr(p[i]-this.c[this.m-1][i]);%
- }%
- this.f[this.m]=e/this.z[this.m];%
- for(i=0;i<3;++i){%
- this.c[this.m][i]=this.c[this.m-1][i]+this.f[this.m]*this.v[this.m][i];%
- }%
- this.sqr_r[this.m]=this.sqr_r[this.m-1]+e*this.f[this.m]/2;%
- }%
- this.current_c=this.c[this.m];%
- this.current_sqr_r=this.sqr_r[this.m];%
- ++this.m;%
- return(true);%
- };%
- function Miniball(){%
- this.L=new List();%
- this.B=new Basis();%
- this.support_end=new Iterator();%
- }%
- Miniball.prototype.mtf_mb=function(it){%
- var i=new Iterator(it);%
- this.support_end.set(this.L.begin());%
- if((this.B.size())==4){return;}%
- for(var k=new Iterator(this.L.begin());k.get()!=i.get();){%
- var j=new Iterator(k);%
- k.incr();%
- if(this.B.excess(j.deref()) > 0){%
- if(this.B.push(j.deref())){%
- this.mtf_mb(j);%
- this.B.pop();%
- if(this.support_end.get()==j.get()){%
- this.support_end.incr();%
- }%
- this.L.move_to_front(j);%
- }%
- }%
- }%
- };%
- Miniball.prototype.check_in=function(b){%
- this.L.push_back(b);%
- };%
- Miniball.prototype.build=function(){%
- this.B.reset();%
- this.support_end.set(this.L.begin());%
- this.mtf_mb(this.L.end());%
- };%
- Miniball.prototype.center=function(){%
- return(this.B.center());%
- };%
- Miniball.prototype.radius=function(){%
- return(Math.sqrt(this.B.current_sqr_r));%
- };%
- %create Miniball object
- var mb=new Miniball();%
- %scene object
- var scene=annot3D['\@MXV@label'].context3D.scene;%
- %aperture angle of the virtual camera
- var camera=scene.cameras.getByIndex(0);%
- if('\@MXV@calc'=='current'){%
- var aac=camera.fov*180/Math.PI;%
- }else{%
- var aac=\@MXV@calc;%
- }%
- %auxiliary vectors
- var dir=new annot3D['\@MXV@label'].context3D.Vector3();%
- var up=new annot3D['\@MXV@label'].context3D.Vector3();%
- var corner=new annot3D['\@MXV@label'].context3D.Vector3();%
- %auxiliary 4x4 matrix
- var bbox4x4=new annot3D['\@MXV@label'].context3D.Matrix4x4();%
- %iterate over all visible mesh nodes in the scene
- for(i=0;i<scene.meshes.count;i++){%
- var mesh=scene.meshes.getByIndex(i);%
- if(!mesh.visible) continue;
- %get the bbox of the mesh (local coordinates)
- var bbox=mesh.computeBoundingBox();%
- %local to parent transformation matrix
- var trans=mesh.transform.transpose;%
- %build local to world transformation matrix by recursively
- %multiplying the parent's transf. matrix on the left
- var parent=mesh.parent;%
- while(parent.transform){%
- trans=parent.transform.transpose.multiply(trans);%
- parent=parent.parent;%
- }%
- %transform the local bounding box corner coordinates to
- %world coordinates for bounding sphere determination;
- %Matrix4x4 method transformDirection(<Vector3>) seems
- %to be bugged, therefore we must resort to the
- %multiply(<Matrix4x4>) method using an auxiliary matrix
- %which contains the local bounding box corner coordinates
- %
- %auxiliary matrix from bbox.min coordinates
- bbox4x4.setView(bbox.min, dir, up);%
- %transform to world coordinates
- bbox4x4=trans.multiply(bbox4x4.transpose);%
- %extract the transformed coordinates
- corner.set(bbox4x4.transpose.translation);%
- %check-in corner position into Miniball
- mb.check_in(new Array(corner.x, corner.y, corner.z));%
- %the same procedure with bbox.max
- bbox4x4.setView(bbox.max, dir, up);%
- bbox4x4=trans.multiply(bbox4x4.transpose);%
- corner.set(bbox4x4.transpose.translation);%
- mb.check_in(new Array(corner.x, corner.y, corner.z));%
- %and with all remaining 6 bbox corners
- corner.set(bbox.min.x, bbox.max.y, bbox.max.z);%
- bbox4x4.setView(corner, dir, up);%
- bbox4x4=trans.multiply(bbox4x4.transpose);%
- corner.set(bbox4x4.transpose.translation);%
- mb.check_in(new Array(corner.x, corner.y, corner.z));%
- corner.set(bbox.min.x, bbox.min.y, bbox.max.z);%
- bbox4x4.setView(corner, dir, up);%
- bbox4x4=trans.multiply(bbox4x4.transpose);%
- corner.set(bbox4x4.transpose.translation);%
- mb.check_in(new Array(corner.x, corner.y, corner.z));%
- corner.set(bbox.min.x, bbox.max.y, bbox.min.z);%
- bbox4x4.setView(corner, dir, up);%
- bbox4x4=trans.multiply(bbox4x4.transpose);%
- corner.set(bbox4x4.transpose.translation);%
- mb.check_in(new Array(corner.x, corner.y, corner.z));%
- corner.set(bbox.max.x, bbox.min.y, bbox.min.z);%
- bbox4x4.setView(corner, dir, up);%
- bbox4x4=trans.multiply(bbox4x4.transpose);%
- corner.set(bbox4x4.transpose.translation);%
- mb.check_in(new Array(corner.x, corner.y, corner.z));%
- corner.set(bbox.max.x, bbox.min.y, bbox.max.z);%
- bbox4x4.setView(corner, dir, up);%
- bbox4x4=trans.multiply(bbox4x4.transpose);%
- corner.set(bbox4x4.transpose.translation);%
- mb.check_in(new Array(corner.x, corner.y, corner.z));%
- corner.set(bbox.max.x, bbox.max.y, bbox.min.z);%
- bbox4x4.setView(corner, dir, up);%
- bbox4x4=trans.multiply(bbox4x4.transpose);%
- corner.set(bbox4x4.transpose.translation);%
- mb.check_in(new Array(corner.x, corner.y, corner.z));%
- }%
- %compute the smallest enclosing bounding sphere
- mb.build();%
- %bounding sphere centre
- var coo=new annot3D['\@MXV@label'].context3D.Vector3();%
- coo.set((mb.center())[0], (mb.center())[1], (mb.center())[2]);%
- %radius of orbit
- var roo=mb.radius()/ Math.sin(aac * Math.PI/ 360.);%
- %result string
- var res='';%
- var spc=String.fromCharCode(32);%
- var nl=String.fromCharCode(10);%
- var charht=2;%
- var multiln=false;%
- res+=util.printf(%
- '3Droo=\%s,',(roo < 1.001e-6 ? util.printf('\%.18f', roo): roo)
- );%
- if(util.printf('\%.5f', aac)!=30){%
- charht+=2;multiln=true;
- res+=util.printf(nl+'3Daac=\%s,',%
- (Math.abs(aac) < 1.001e-6 && Math.abs(aac) > 0 ?%
- util.printf('\%.18f', aac): aac)%
- );%
- }%
- if(coo.length){%
- charht+=2;multiln=true;
- res+=util.printf(nl+'3Dcoo=\%s' + spc + '\%s' + spc + '\%s,',%
- (Math.abs(coo.x) < 1.001e-6 && Math.abs(coo.x) > 0 ?%
- util.printf('\%.18f', coo.x): coo.x),%
- (Math.abs(coo.y) < 1.001e-6 && Math.abs(coo.y) > 0 ?%
- util.printf('\%.18f', coo.y): coo.y),%
- (Math.abs(coo.z) < 1.001e-6 && Math.abs(coo.z) > 0 ?%
- util.printf('\%.18f', coo.z): coo.z)%
- );%
- }%
- % change camera position and target accordingly
- camera.fov=aac*Math.PI/180;%
- camera.targetPosition.set(coo);%
- var c2c=camera.position.subtract(coo);%
- c2c.normalize();%
- camera.position.set(coo.add(c2c.scale(roo)));%
- %output settings
- var x=(Math.abs(c2c.x) < 1e-12 ? 0 : c2c.x);%
- var y=(Math.abs(c2c.y) < 1e-12 ? 0 : c2c.y);%
- var z=(Math.abs(c2c.z) < 1e-12 ? 0 : c2c.z);%
- if(!(x==0 && y==-1 && z==0)){%
- charht+=2;multiln=true;
- res+=util.printf(nl+'3Dc2c=\%s' + spc + '\%s' + spc + '\%s,',%
- (Math.abs(x) < 1.001e-6 && Math.abs(x) > 0 ?%
- util.printf('\%.18f', x): x),%
- (Math.abs(y) < 1.001e-6 && Math.abs(y) > 0 ?%
- util.printf('\%.18f', y): y),%
- (Math.abs(z) < 1.001e-6 && Math.abs(z) > 0 ?%
- util.printf('\%.18f', z): z)%
- );%
- }%
- %determine the camera roll
- var roll = camera.roll*180/Math.PI;%
- if(util.printf('\%.4f', roll)!=0){%
- charht+=2;multiln=true;
- res+=util.printf(nl+'3Droll=\%s,',roll);%
- }%
- %determine background colour
- rgb=scene.background.getColor();%
- if(rgb.r!=1.0||rgb.g!=1.0||rgb.b!=1.0){%
- charht+=2;multiln=true;
- res+=util.printf(nl+'3Dbg=\%f' + spc + '\%f' + spc + '\%f,',%
- rgb.r, rgb.g, rgb.b);%
- }%
- %determine lighting scheme
- switch(scene.lightScheme){%
- case scene.LIGHT_MODE_FILE:
- curlights='Artwork';break;
- case scene.LIGHT_MODE_NONE:
- curlights='None';break;
- case scene.LIGHT_MODE_WHITE:
- curlights='White';break;
- case scene.LIGHT_MODE_DAY:
- curlights='Day';break;
- case scene.LIGHT_MODE_NIGHT:
- curlights='Night';break;
- case scene.LIGHT_MODE_BRIGHT:
- curlights='Hard';break;
- case scene.LIGHT_MODE_RGB:
- curlights='Primary';break;
- case scene.LIGHT_MODE_BLUE:
- curlights='Blue';break;
- case scene.LIGHT_MODE_RED:
- curlights='Red';break;
- case scene.LIGHT_MODE_CUBE:
- curlights='Cube';break;
- case scene.LIGHT_MODE_CAD:
- curlights='CAD';break;
- case scene.LIGHT_MODE_HEADLAMP:
- curlights='Headlamp';break;
- }%
- if(curlights!='Artwork'){%
- charht+=2;multiln=true;
- res+=util.printf(nl+'3Dlights=\%s,', curlights);%
- }%
- %determine global render mode
- switch(scene.renderMode){%
- case scene.RENDER_MODE_BOUNDING_BOX:
- currender='BoundingBox';break;
- case scene.RENDER_MODE_TRANSPARENT_BOUNDING_BOX:
- currender='TransparentBoundingBox';break;
- case scene.RENDER_MODE_TRANSPARENT_BOUNDING_BOX_OUTLINE:
- currender='TransparentBoundingBoxOutline';break;
- case scene.RENDER_MODE_VERTICES:
- currender='Vertices';break;
- case scene.RENDER_MODE_SHADED_VERTICES:
- currender='ShadedVertices';break;
- case scene.RENDER_MODE_WIREFRAME:
- currender='Wireframe';break;
- case scene.RENDER_MODE_SHADED_WIREFRAME:
- currender='ShadedWireframe';break;
- case scene.RENDER_MODE_SOLID:
- currender='Solid';break;
- case scene.RENDER_MODE_TRANSPARENT:
- currender='Transparent';break;
- case scene.RENDER_MODE_SOLID_WIREFRAME:
- currender='SolidWireframe';break;
- case scene.RENDER_MODE_TRANSPARENT_WIREFRAME:
- currender='TransparentWireframe';break;
- case scene.RENDER_MODE_ILLUSTRATION:
- currender='Illustration';break;
- case scene.RENDER_MODE_SOLID_OUTLINE:
- currender='SolidOutline';break;
- case scene.RENDER_MODE_SHADED_ILLUSTRATION:
- currender='ShadedIllustration';break;
- case scene.RENDER_MODE_HIDDEN_WIREFRAME:
- currender='HiddenWireframe';break;
- }%
- if(currender!='Solid'){%
- charht+=2;multiln=true;
- res+=util.printf(nl+'3Drender=\%s,', currender);%
- }%
- var settings={%
- initialize: function(dialog){%
- dialog.load({%
- 'text': res%
- });%
- },%
- description: {%
- name: '3D' + spc + 'Camera' + spc + 'Settings',%
- elements: [%
- {%
- type: 'static_text',%
- name: 'Copy' + spc + 'and' + spc + 'paste' + spc +%
- 'the' + spc + 'following' + spc + 'to' + spc +%
- 'the' + spc + 'option' + spc + 'list' + spc +%
- 'of' + spc + spc + '\string\\\string\\includemovie!'%
- },%
- {%
- type: 'edit_text',%
- item_id: 'text',%
- alignment: 'align_fill',%
- multiline: multiln,%
- char_width: 80,%
- char_height: charht,%
- readonly: true%
- },%
- {%
- type: 'ok',%
- ok_name: 'Close'%
- }%
- ]%
- }%
- };%
- app.execDialog(settings);%
- }catch(e){%
- var spc=String.fromCharCode(32);%
- app.alert('Error' + spc + 'while' + spc + 'executing' + spc +%
- '3Dcalculate:' + spc + e);%
- }%
- }%
- \fi%
- %create stream from user provided JavaScript file
- \ifx\@MXV@jscriptiiidfile\@empty\else%
- \ifthenelse{% create only once
- \equal{\@MXV@getlabelvalue{\pdfmdfivesum file {\@MXV@jscriptiiidfile}}}{undefined}%
- }{%
- \ifpdf%
- \pdfobj stream file {\@MXV@jscriptiiidfile}%
- \pdfrefobj\pdflastobj%
- \edef\@MXV@userjscriptiiidstream{\the\pdflastobj\space 0 R}%
- \@MXV@newlabel{\pdfmdfivesum file {\@MXV@jscriptiiidfile}}{\the\pdflastobj}%
- \else%
- \pdfmark{%
- pdfmark=/OBJ,%
- Raw={%
- /_objdef {linkuserjscriptiiid\the\@MXV@links}%
- /type/stream%
- }%
- }%
- \pdfmark{%
- pdfmark=/PUT,%
- Raw={%
- {linkuserjscriptiiid\the\@MXV@links}%
- (\@MXV@jscriptiiidfile) (r) file%
- }%
- }%
- \edef\@MXV@userjscriptiiidstream{%
- {linkuserjscriptiiid\the\@MXV@links}%
- }%
- \@MXV@newlabel{\pdfmdfivesum file {\@MXV@jscriptiiidfile}}%
- {linkuserjscriptiiid\the\@MXV@links}%
- \fi%
- }{%
- \ifpdf%
- \edef\@MXV@userjscriptiiidstream{%
- \@MXV@getlabelvalue{\pdfmdfivesum file {\@MXV@jscriptiiidfile}}\space 0 R%
- }%
- \else%
- \edef\@MXV@userjscriptiiidstream{%
- {\@MXV@getlabelvalue{\pdfmdfivesum file {\@MXV@jscriptiiidfile}}}%
- }%
- \fi%
- }%
- \fi%
- \edef\@MXV@jscriptiiidaction{%
- /Next <<%
- /S/JavaScript%
- /JS (\@MXV@linkjscriptiiid)%
- \ifx\@MXV@jscriptiiidfile\@empty\else%
- /Next <<%
- /S/JavaScript%
- /JS \@MXV@userjscriptiiidstream% user provided script
- >>%
- \fi%
- >>%
- }%
- }{\edef\@MXV@jscriptiiidaction{}}%
- }{% #### 2D ####
- \setkeys{MXV@user}{#1}%
- %retrieve original settings
- \ifthenelse{\equal{\@MXV@getlabelvalue{@MXV@\@MXV@label.mouse}}{true}}{%
- \setboolean{@MXV@mouse}{true}%
- }{%
- \setboolean{@MXV@mouse}{false}%
- }%
- \edef\@MXV@ctrls{\@MXV@getlabelvalue{@MXV@\@MXV@label.showUI}}%
- \edef\@MXV@palindrome{\@MXV@getlabelvalue{@MXV@\@MXV@label.palindrome}}%
- \edef\@MXV@repeat{\@MXV@getlabelvalue{@MXV@\@MXV@label.repeat}}%
- \edef\@MXV@rate{\@MXV@getlabelvalue{@MXV@\@MXV@label.rate}}%
- \edef\@MXV@startat{\@MXV@getlabelvalue{@MXV@\@MXV@label.startAt}}%
- \edef\@MXV@endat{\@MXV@getlabelvalue{@MXV@\@MXV@label.endAt}}%
- \edef\@MXV@volume{\@MXV@getlabelvalue{@MXV@\@MXV@label.volume}}%
- \if@MXV@linkreset\else%
- \setkeys{MXV@user}{#1}%override with new settings
- \fi%
- %
- \edef\@MXV@operation{}%
- %
- %get the player ID
- \edef\@MXV@currplayer{\@MXV@getlabelvalue{@MXV@\@MXV@label.playerid}}%
- %
- %see whether a sound inclusion is being referenced
- \ifthenelse{\equal{\@MXV@getlabelvalue{@MXV@\@MXV@label.issound}}{true}}{%
- \setboolean{@MXV@issound}{true}%
- }{%
- \setboolean{@MXV@issound}{false}%
- }%
- %
- %create /OP and /JS entries
- \if@MXV@linkplay%
- \edef\@MXV@operation{%
- /OP 0%
- /JS (%
- if(focusonplayer==undefined){%
- var focusonplayer=0; %shared by all annots
- }%
- \@MXV@settings{\@MXV@ctrls}{\@MXV@palindrome}{\@MXV@repeat}%
- {\@MXV@rate}{\@MXV@startat}{\@MXV@endat}{\@MXV@volume}%
- \@MXV@events{\@MXV@currplayer}%
- {\if@MXV@mouse true\else false\fi}%
- {true}%
- \if@MXV@requirereopen\else
- try{%
- \ifx\@MXV@@startat\@empty
- player\@MXV@currplayer.seek(%
- player\@MXV@currplayer.settings.startAt%
- );
- \else
- player\@MXV@currplayer.seek(\@MXV@@startat);
- \fi
- player\@MXV@currplayer.play();
- \ifx\@MXV@@startat\@empty
- player\@MXV@currplayer.seek(%
- player\@MXV@currplayer.settings.startAt%
- );
- \else
- player\@MXV@currplayer.seek(\@MXV@@startat);
- \fi
- }%
- catch(e)\@charlb%
- \fi%
- try{%
- if(player\@MXV@currplayer.isOpen){%
- player\@MXV@currplayer.close(%
- app.media.closeReason.general);
- player\@MXV@currplayer=null;
- }%
- }%
- catch(e){}%
- %
- try{%
- var player\@MXV@currplayer=app.media.openPlayer({%
- settings: settings,%
- events: events%
- });%
- }%
- catch (e){}%
- \if@MXV@requirereopen\else
- \@charrb%
- \fi%
- )%
- }%
- \fi%
- \if@MXV@linkresume% resume/pause
- \edef\@MXV@operation{%
- /OP 3%
- /JS (%
- try{%
- \if@MXV@issound\else player\@MXV@currplayer.visible=true;\fi%
- if(!player\@MXV@currplayer.isPlaying){%
- player\@MXV@currplayer.settings.privateData.paused=false;
- player\@MXV@currplayer.play();
- if(!player\@MXV@currplayer.isPlaying){%
- %media at end will restart from beginning
- if(
- player\@MXV@currplayer.settings.startAt.time
- || player\@MXV@currplayer.settings.startAt.frame
- || player\@MXV@currplayer.settings.startAt.marker
- || player\@MXV@currplayer.id ==
- 'vnd.adobe.swname:AAPL_QuickTime'
- ){
- player\@MXV@currplayer.seek(
- player\@MXV@currplayer.settings.startAt);
- }else{
- player\@MXV@currplayer.stop();
- }
- player\@MXV@currplayer.play();
- }%
- }%
- else{%
- player\@MXV@currplayer.pause();
- player\@MXV@currplayer.settings.privateData.paused=true;
- }%
- }%
- catch(e){% open new player if not yet open
- if(focusonplayer==undefined){%
- var focusonplayer=0; %shared by all annots
- }%
- \@MXV@settings{\@MXV@ctrls}{\@MXV@palindrome}{\@MXV@repeat}%
- {\@MXV@rate}{\@MXV@startat}{\@MXV@endat}{\@MXV@volume}%
- \@MXV@events{\@MXV@currplayer}%
- {\if@MXV@mouse true\else false\fi}%
- {true}%
- try{%
- var player\@MXV@currplayer=app.media.openPlayer({%
- settings: settings,%
- events: events%
- });
- }%
- catch (e){}%
- }%
- )%
- }%
- \fi%
- \if@MXV@linkstop%
- \edef\@MXV@operation{%
- /OP 1%
- /JS (%
- try{%
- if(!player\@MXV@currplayer.isPlaying){%
- player\@MXV@currplayer.settings.privateData.paused=false;
- player\@MXV@currplayer.play();
- }%
- player\@MXV@currplayer.stop();
- if(
- player\@MXV@currplayer.settings.startAt.time
- || player\@MXV@currplayer.settings.startAt.frame
- || player\@MXV@currplayer.settings.startAt.marker
- || player\@MXV@currplayer.id ==
- 'vnd.adobe.swname:AAPL_QuickTime'
- ){
- player\@MXV@currplayer.seek(%
- player\@MXV@currplayer.settings.startAt);
- }
- }%
- catch(e){}%
- )%
- }%
- \fi%
- \if@MXV@linkpause% pause/resume
- \edef\@MXV@operation{%
- /OP 2%
- /JS (%
- try{%
- \if@MXV@issound\else player\@MXV@currplayer.visible=true;\fi%
- if(!player\@MXV@currplayer.isPlaying){%
- player\@MXV@currplayer.settings.privateData.paused=false;
- player\@MXV@currplayer.play();
- if(!player\@MXV@currplayer.isPlaying){%
- %media at end will restart from beginning
- if(
- player\@MXV@currplayer.settings.startAt.time
- || player\@MXV@currplayer.settings.startAt.frame
- || player\@MXV@currplayer.settings.startAt.marker
- || player\@MXV@currplayer.id ==
- 'vnd.adobe.swname:AAPL_QuickTime'
- ){
- player\@MXV@currplayer.seek(
- player\@MXV@currplayer.settings.startAt);
- }else{
- player\@MXV@currplayer.stop();
- }
- player\@MXV@currplayer.play();
- }%
- }%
- else{%
- player\@MXV@currplayer.pause();
- player\@MXV@currplayer.settings.privateData.paused=true;
- }%
- }%
- catch(e){% open new player if not yet open
- if(focusonplayer==undefined){%
- var focusonplayer=0; %shared by all annots
- }%
- \@MXV@settings{\@MXV@ctrls}{\@MXV@palindrome}{\@MXV@repeat}%
- {\@MXV@rate}{\@MXV@startat}{\@MXV@endat}{\@MXV@volume}%
- \@MXV@events{\@MXV@currplayer}%
- {\if@MXV@mouse true\else false\fi}%
- {true}%
- try{%
- var player\@MXV@currplayer=app.media.openPlayer({%
- settings: settings,%
- events: events%
- });
- }%
- catch (e){}%
- }%
- )%
- }%
- \fi%
- \if@MXV@linkclose%
- \edef\@MXV@operation{%
- /OP 1%
- /JS (%
- try{%
- player\@MXV@currplayer.close(%
- app.media.closeReason.general);
- player\@MXV@currplayer=null;
- }%
- catch(e){}%
- )%
- }%
- \fi%
- }%
- \fi%
- \fi%
- %
- \ifpdf%
- \ifthenelse{\isundefined{\@pdfborder}}{%
- \def\@MXV@linkattr{}%
- }{%
- \edef\@MXV@linkattr{%
- \if@MXV@beamer%
- \@MXV@pdfborder%
- \else%
- /Border [\@pdfborder]%
- \fi%
- /C [\@linkbordercolor]%
- /H \@pdfhighlight%
- }%
- }%
- %
- \pdfstartlink%
- attr{\@MXV@linkattr}%
- user{%
- /Subtype /Link%
- /A <<%
- /S/GoTo%
- /D (@MXV@\@MXV@@label)%
- \if@MXV@@draft\else%
- \if@MXV@externalviewer\else%
- \if@MXV@iiid%
- \ifx\@MXV@iiidview\@empty\else%
- /Next <<%
- /S/GoTo3DView%
- /TA \@MXV@getlabelvalue{@MXV@\@MXV@@label.annot}\space 0 R%
- /V \@MXV@iiidview%
- \fi%
- \@MXV@jscriptiiidaction%
- \ifx\@MXV@iiidview\@empty\else%
- >>%
- \fi%
- \else%
- /Next <<%
- /S/Rendition%
- /R \@MXV@getlabelvalue{@MXV@\@MXV@@label.rendition}\space 0 R%
- /AN \@MXV@getlabelvalue{@MXV@\@MXV@@label.annot}\space 0 R%
- \@MXV@operation%
- >>%
- \fi%
- \fi%
- \fi%
- >>%
- }%
- \usebox{\@MXV@textbox}% write out text box
- \pdfendlink%
- \else%
- \pdfmark[{\usebox{\@MXV@textbox}}]{%
- pdfmark=/ANN,%
- Subtype=/Link,%
- Color=\@linkbordercolor,%
- AcroHighlight=\@pdfhighlight,%
- Raw={%
- \@MXV@pdfborder%
- /_objdef {linkannot\the\@MXV@links}%
- /Action <<%
- /S/GoTo%
- /D/@MXV@\@MXV@@label%
- \if@MXV@@draft\else%
- \if@MXV@externalviewer\else%
- \if@MXV@iiid%
- \ifx\@MXV@iiidview\@empty\else%
- /Next <<%
- /S/GoTo3DView%
- /TA {3Dannot\@MXV@getlabelvalue{@MXV@\@MXV@@label.annot}}%
- /V \@MXV@iiidview%
- \fi%
- \@MXV@jscriptiiidaction%
- \ifx\@MXV@iiidview\@empty\else%
- >>%
- \fi%
- \else%
- /Next <<%
- /S /Rendition%
- /R {mediarendition\@MXV@getlabelvalue{@MXV@\@MXV@@label.annotid}}%
- /AN {screenannot\@MXV@getlabelvalue{@MXV@\@MXV@@label.annot}}%
- \@MXV@operation%
- >>%
- \fi%
- \fi%
- \fi%
- >>%
- }%
- }%
- \fi%
- }%
- }%
-}
-
-%set to true for certain \movieref options, which require the media player to
-%be re-opened
-\newboolean{@MXV@requirereopen}
-
-%standard keys to be processed first
-%key definitions for options to \includemovie
-\define@key{MXV@user}{draft}[true]{%
- \setboolean{@MXV@@draft}{#1}%
-}
-\define@key{MXV@user}{final}[true]{%
- \ifthenelse{\equal{#1}{true}}{%
- \setboolean{@MXV@@draft}{false}%
- }{%
- \setboolean{@MXV@@draft}{true}%
- }%
-}
-\define@key{MXV@user}{label}{%for use with movieref
- \gdef\@MXV@label{#1}%
-}
-\define@key{MXV@user}{controls}[true]{%
- \setboolean{@MXV@requirereopen}{true}%
- \xdef\@MXV@ctrls{, showUI: #1}%
- \xdef\@MXV@@ctrls{/C #1}%
- \ifthenelse{\boolean{@MXV@iiiDfeat}}{%
- \gdef\@MXV@iiidtoolb{/TB #1}%
- }{}%
-}
-\define@key{MXV@user}{toolbar}[true]{%
- \xdef\@MXV@ctrls{, showUI: #1}%
- \xdef\@MXV@@ctrls{/C #1}%
- \ifthenelse{\boolean{@MXV@iiiDfeat}}{%
- \gdef\@MXV@iiidtoolb{/TB #1}%
- }{}%
-}
-\define@key{MXV@user}{volume}{%
- \def\@MXV@@volume{/V #1}%
- \def\@MXV@volume{#1}%
- \setboolean{@MXV@requirereopen}{true}%
-}
-\define@key{MXV@user}{mimetype}{%
- \ifthenelse{\equal{#1}{model/u3d}}{%
- \ifthenelse{\boolean{@MXV@iiiDfeat}}{%
- \setboolean{@MXV@iiid}{true}%
- \xdef\@MXV@iiidsubtype{U3D}%
- }{\@MXV@neediiiD}%
- }{}%
- \def\@MXV@mime{#1}%
-}
-\define@key{MXV@user}{playerid}{%
- \def\@MXV@player{%
- /PL<</MU [<</PID<</U (vnd.adobe.swname:#1)>>>>]>>%
- }%
-}
-\define@key{MXV@user}{autoplay}[true]{%
- \setboolean{@MXV@autoplay}{#1}%
- \if@MXV@autoplay%
- \setboolean{@MXV@autoresume}{false}%
- \fi%
-}
-\define@key{MXV@user}{autostop}[true]{%
- \setboolean{@MXV@autostop}{#1}%
- \if@MXV@autostop%
- \setboolean{@MXV@autopause}{false}%
- \fi%
-}
-\define@key{MXV@user}{autoresume}[true]{%
- \setboolean{@MXV@autoresume}{#1}%
- \if@MXV@autoresume%
- \setboolean{@MXV@autoplay}{false}%
- \setboolean{@MXV@autoclose}{false}%
- \fi%
-}
-\define@key{MXV@user}{autopause}[true]{%
- \setboolean{@MXV@autopause}{#1}%
- \if@MXV@autopause%
- \setboolean{@MXV@autostop}{false}%
- \setboolean{@MXV@autoclose}{false}%
- \fi%
-}
-\define@key{MXV@user}{autoclose}[true]{%
- \setboolean{@MXV@autoclose}{#1}%
- \if@MXV@autoclose%
- \setboolean{@MXV@autostop}{false}%
- \setboolean{@MXV@autopause}{false}%
- \fi%
-}
-\define@key{MXV@user}{continue}[true]{%
- \setboolean{@MXV@autostop}{false}%
- \setboolean{@MXV@autopause}{false}%
- \setboolean{@MXV@autoclose}{false}%
-}
-\define@key{MXV@user}{open}[true]{%
- %no longer supported; once open, media remains loaded
- %to avoid reloading when media is to be played again
-}
-\define@key{MXV@user}{mouse}[true]{%
- \setboolean{@MXV@mouse}{#1}%
- \setboolean{@MXV@requirereopen}{true}%
- \ifthenelse{\equal{false}{#1}\AND\boolean{@MXV@iiiDfeat}}{%
- \def\@MXV@iiidia{/3DI #1}%
- }{}%
-}
-\define@key{MXV@user}{palindrome}[true]{%
- \xdef\@MXV@palindrome{, palindrome: #1}%
- \setboolean{@MXV@requirereopen}{true}%
- \ifthenelse{\boolean{@MXV@iiiDfeat}}{%
- \gdef\@MXV@iiidpalindrome{/Subtype/Oscillating}%
- }{}%
-}
-\define@key{MXV@user}{rate}{%
- \setboolean{@MXV@requirereopen}{true}%
- \xdef\@MXV@rate{, rate: #1}%
- \ifthenelse{\boolean{@MXV@iiiDfeat}}{%
- \gdef\@MXV@iiidrate{/TM #1}%
- }{}%
-}
-\define@key{MXV@user}{repeat}[Infinity]{%
- \setboolean{@MXV@requirereopen}{true}%
- \ifthenelse{%
- \equal{#1}{Infinity}\OR%
- \equal{#1}{0}%
- }{%
- \xdef\@MXV@repeat{, repeat: Infinity}%
- \xdef\@MXV@@repeat{/RC 0}%
- }{%
- \xdef\@MXV@repeat{, repeat: #1}%
- \xdef\@MXV@@repeat{/RC #1}%
- }%
- \ifthenelse{\boolean{@MXV@iiiDfeat}}{%
- \ifthenelse{\equal{#1}{Infinity}}{%
- \global\@MXV@iiidrepeat=-1%
- }{%
- \global\@MXV@iiidrepeat=#1%
- }%
- }{}%
-}
-\define@key{MXV@user}{startat}{%
- \xdef\@MXV@startat{, startAt: {#1}}%
- \xdef\@MXV@@startat{{#1}}%
-}
-\define@key{MXV@user}{endat}{%
- \setboolean{@MXV@requirereopen}{true}%
- \xdef\@MXV@endat{, endAt: {#1}}%
-}
-\define@key{MXV@user}{poster}[true]{%
- \ifthenelse{\equal{#1}{true}}{% option without arg
- \setboolean{@MXV@runposter}{true}%
- }{%
- \def\@MXV@box##1##2##3{%
- \ifpdf%
- \mbox{\pdfximage width ##1 height ##2 depth ##3 {#1}}%
- \pdfrefximage\pdflastximage%
- \else%
- \ifthenelse{\isundefined{\includegraphics}}{\@MXV@missing{graphics}}{}%
- \@MXV@totalheight=##2%
- \advance\@MXV@totalheight by ##3%
- \raisebox{-##3}[##2][##3]{%
- \includegraphics[%
- width=##1,height=##2,totalheight=\@MXV@totalheight,clip]{#1}%
- }%
- \fi%
- }%
- }%
-}
-\define@key{MXV@user}{externalviewer}[true]{%
- \setboolean{@MXV@externalviewer}{#1}%
-}
-\define@key{MXV@user}{inline}[true]{%
- \if@MXV@url%
- \setboolean{@MXV@inline}{false}%
- \else%
- \setboolean{@MXV@inline}{#1}%
- \fi%
- \if@MXV@inline\else%
- \setboolean{@MXV@attachment}{false}%
- \fi%
-}
-\define@key{MXV@user}{url}[true]{%
- \setboolean{@MXV@url}{#1}%
- \if@MXV@url%
- \setboolean{@MXV@inline}{false}%
- \setboolean{@MXV@attachment}{false}%
- \def\@MXV@fsentry{/FS /URL}%
- \fi%
-}
-\define@key{MXV@user}{attach}[true]{%
- \setboolean{@MXV@attachment}{#1}%
- \if@MXV@attachment%
- \setboolean{@MXV@inline}{true}%
- \fi%
-}
-\define@key{MXV@user}{text}{%
- \setboolean{@MXV@boxopt}{true}%
- \savebox{\@MXV@textbox}{#1}%
- \@MXV@width=\wd\@MXV@textbox%
- \@MXV@height=\ht\@MXV@textbox%
- \@MXV@depth=\dp\@MXV@textbox%
-}
-\define@key{MXV@user}{textoverposter}[true]{%
- \setboolean{@MXV@textoverposter}{#1}%
-}
-\define@key{MXV@user}{depth}{%set depth of display area
- \gdef\@MXV@boxdepth{#1}%
-}
-%3D specific options
-\define@key{MXV@user}{3Dbg}{%
- \ifthenelse{\boolean{@MXV@iiiDfeat}}{%
- \def\@MXV@defaultbg{#1}%
- \def\@MXV@background{/BG<</CS/DeviceRGB/C[#1]>>}%
- }{\@MXV@neediiiD}%
-}
-\define@key{MXV@user}{3Djscript}{%
- \ifthenelse{\boolean{@MXV@iiiDfeat}}{%
- \IfFileExists{#1}{%
- \def\@MXV@jscriptiiidfile{#1}%
- }{%
- \PackageError{movie15}{Script file `#1' cannot be opened for embedding%
- }{%
- Make sure file `#1' exists and is readable!%
- }%
- }%
- }{\@MXV@neediiiD}%
-}
-\define@key{MXV@user}{3Dcoo}{%
- \ifthenelse{\boolean{@MXV@iiiDfeat}}{%
- \def\@MXV@coo{#1}%
- \setboolean{@MXV@defaultviewprovided}{true}%
- }{\@MXV@neediiiD}%
-}
-\define@key{MXV@user}{3Dc2c}{%
- \ifthenelse{\boolean{@MXV@iiiDfeat}}{%
- \def\@MXV@ctoc{#1}%
- \setboolean{@MXV@defaultviewprovided}{true}%
- }{\@MXV@neediiiD}%
-}
-\define@key{MXV@user}{3Droo}{%
- \ifthenelse{\boolean{@MXV@iiiDfeat}}{%
- \def\@MXV@roo{#1}%
- \setboolean{@MXV@defaultviewprovided}{true}%
- }{\@MXV@neediiiD}%
-}
-\define@key{MXV@user}{3Daac}{%
- \ifthenelse{\boolean{@MXV@iiiDfeat}}{%
- \def\@MXV@aac{#1}%
- \setboolean{@MXV@defaultviewprovided}{true}%
- }{\@MXV@neediiiD}%
-}
-\define@key{MXV@user}{3Droll}{%
- \ifthenelse{\boolean{@MXV@iiiDfeat}}{%
- \def\@MXV@roll{#1}%
- \setboolean{@MXV@defaultviewprovided}{true}%
- }{\@MXV@neediiiD}%
-}
-\define@key{MXV@user}{3Dviews}{%
- \ifthenelse{\boolean{@MXV@iiiDfeat}}{%
- \IfFileExists{#1}{%
- \def\@MXV@viewsfileii{}%
- \def\@MXV@viewsfile{#1}%
- }{%
- \PackageError{movie15}{3D views file `#1' cannot be opened%
- }{%
- Make sure file `#1' exists and is readable!%
- }%
- }%
- }{\@MXV@neediiiD}%
-}
-\define@key{MXV@user}{3Dviews2}{%
- \ifthenelse{\boolean{@MXV@iiiDfeat}}{%
- \IfFileExists{#1}{%
- \def\@MXV@viewsfile{}%
- \def\@MXV@viewsfileii{#1}%
- }{%
- \PackageError{movie15}{3D views file `#1' cannot be opened%
- }{%
- Make sure file `#1' exists and is readable!%
- }%
- }%
- }{\@MXV@neediiiD}%
-}
-\define@key{MXV@user}{3Dlights}{%
- \ifthenelse{\boolean{@MXV@iiiDfeat}}{%
- \gdef\@MXV@defaultlights{#1}%
- \gdef\@MXV@lights{/LS <</Subtype/#1>>}%
- }{\@MXV@neediiiD}%
-}
-\define@key{MXV@user}{3Drender}{%
- \ifthenelse{\boolean{@MXV@iiiDfeat}}{%
- \gdef\@MXV@defaultrender{#1}%
- \gdef\@MXV@render{/RM <</Subtype/#1>>}%
- }{\@MXV@neediiiD}%
-}
-%options for \movieref command
-\define@key{MXV@user}{play}[true]{%
- \setboolean{@MXV@linkplay}{#1}%
- \if@MXV@linkplay%
- \setboolean{@MXV@linkpause}{false}%
- \setboolean{@MXV@linkresume}{false}%
- \setboolean{@MXV@linkstop}{false}%
- \setboolean{@MXV@linkclose}{false}%
- \fi%
-}
-\define@key{MXV@user}{pause}[true]{%
- \setboolean{@MXV@linkpause}{#1}%
- \if@MXV@linkpause%
- \setboolean{@MXV@linkresume}{false}%
- \setboolean{@MXV@linkstop}{false}%
- \setboolean{@MXV@linkclose}{false}%
- \setboolean{@MXV@linkplay}{false}%
- \fi%
-}
-\define@key{MXV@user}{resume}[true]{%
- \setboolean{@MXV@linkresume}{#1}%
- \if@MXV@linkresume%
- \setboolean{@MXV@linkpause}{false}%
- \setboolean{@MXV@linkstop}{false}%
- \setboolean{@MXV@linkclose}{false}%
- \setboolean{@MXV@linkplay}{false}%
- \fi%
-}
-\define@key{MXV@user}{stop}[true]{%
- \setboolean{@MXV@linkstop}{#1}%
- \if@MXV@linkstop%
- \setboolean{@MXV@linkpause}{false}%
- \setboolean{@MXV@linkresume}{false}%
- \setboolean{@MXV@linkclose}{false}%
- \setboolean{@MXV@linkplay}{false}%
- \fi%
-}
-\define@key{MXV@user}{close}[true]{%
- \setboolean{@MXV@linkclose}{#1}%
- \if@MXV@linkclose%
- \setboolean{@MXV@linkpause}{false}%
- \setboolean{@MXV@linkresume}{false}%
- \setboolean{@MXV@linkstop}{false}%
- \setboolean{@MXV@linkplay}{false}%
- \fi%
-}
-\define@key{MXV@user}{reset}[true]{%
- \setboolean{@MXV@linkreset}{#1}%
- \if@MXV@linkreset%
- \setboolean{@MXV@requirereopen}{true}%
- \fi%
-}
-\define@key{MXV@user}{default}[true]{% synonyme for `reset'
- \setboolean{@MXV@linkreset}{#1}%
- \if@MXV@linkreset%
- \setboolean{@MXV@requirereopen}{true}%
- \fi%
-}
-\define@key{MXV@user}{3Dviewindex}{%
- \ifthenelse{\boolean{@MXV@iiiDfeat}}{%
- \ifthenelse{%
- \equal{#1}{F}%
- \OR\equal{#1}{L}%
- \OR\equal{#1}{N}%
- \OR\equal{#1}{P}%
- \OR\equal{#1}{D}%
- }{%
- \gdef\@MXV@iiidview{/#1}% any of F, L, N, P, D
- }{%
- \gdef\@MXV@iiidview{#1}% number (index)
- }%
- \setboolean{@MXV@defaultviewprovided}{false}%
- }{\@MXV@neediiiD}%
-}
-\define@key{MXV@user}{3Dcalculate}[current]{%
- %calculate optimal 3D settings for roo and coo for a given aac
- \ifthenelse{\boolean{@MXV@iiiDfeat}}{%
- \gdef\@MXV@calc{#1}%
- }{\@MXV@neediiiD}%
-}
-\define@key{MXV@user}{3Dgetview}[true]{%
- %print current 3D camera settings
- \ifthenelse{\boolean{@MXV@iiiDfeat}}{%
- \setboolean{@MXV@iiidgetview}{#1}%
- }{\@MXV@neediiiD}%
-}
-\define@key{MXV@user}{3Dresource}{%
- \ifthenelse{\boolean{@MXV@iiiDfeat}}{%
- \IfFileExists{#1}{%
- \setboolean{@MXV@resource}{true}%
- \xdef\@MXV@iiidopt{3Dresource=#1, \@MXV@iiidopt}%
- }{%
- \PackageError{movie15}{3D resource file `#1' cannot be opened%
- }{%
- Make sure file `#1' exists and is readable!%
- }%
- }%
- }{\@MXV@neediiiD}%
-}
-
-%compatibility options for \movie and \hyperlinkmovie commands
-\define@key{MXV@user}{borderwidth}{%
- %ignored; acroread doesn't draw borders around screen annots anyway
-}
-\define@key{MXV@user}{height}{%set height of display area
- \gdef\@MXV@boxheight{#1}%
-}
-\define@key{MXV@user}{width}{%set width of display area
- \gdef\@MXV@boxwidth{#1}%
-}
-\define@key{MXV@user}{autostart}[true]{%
- \xdef\@MXV@autostart{, autoplay=#1}%
-}
-\define@key{MXV@user}{loop}[Infinity]{%
- \xdef\@MXV@loop{, repeat=#1}%
-}
-\define@key{MXV@user}{once}[]{%
- \xdef\@MXV@loop{, repeat=1}%
-}
-\define@key{MXV@user}{showcontrols}[true]{%
- \xdef\@MXV@showcontrols{, controls=#1}%
-}
-\define@key{MXV@user}{start}{%
- \gdef\@MXV@starttime##1s{%
- \global\@MXV@start=##1pt%
- }%
- \@MXV@starttime #1%
-}
-\define@key{MXV@user}{duration}{%
- \gdef\@MXV@durationtime##1s{%
- \global\@MXV@end=##1pt%
- }%
- \@MXV@durationtime #1%
-}
-
-%options to be passed to internal macro \@MXV@includeiiid
-\define@key{MXV@iiid}{3Dresource}{%
- \@MXV@addresource{#1}%
-}
-
-%compatibility macros
-\providecommand\movie[3][]{%
- \leavevmode%
- \@MXV@reset%
- \def\@MXV@autostart{}\def\@MXV@loop{}\def\@MXV@showcontrols{}%
- \def\@MXV@starttime{}\def\@MXV@durationtime{}%
- \setkeys{MXV@user}{#1}%
- %
- %sanity checks
- \if@MXV@boxopt%
- \PackageError{movie15}{%
- Option `text' cannot be used with command `\string\movie'.\MessageBreak
- Instead, put text into the 1st argument of `\string\movie'
- }{}%
- \fi%
- %
- \ifx\@MXV@durationtime\@empty\else\ifx\@MXV@startat\@empty\else%
- \PackageError{movie15}{%
- Options `startat' and `duration' cannot be used\MessageBreak
- together.\MessageBreak
- Possible combinations are `startat'/`endat',\MessageBreak
- `start'/`endat' or `start'/`duration'
- }{}%
- \fi\fi%
- %
- %option list
- \edef\@MXV@movieoptions{#1\@MXV@autostart\@MXV@loop\@MXV@showcontrols}%
- %
- %determine playback section
- \ifx\@MXV@starttime\@empty\else%
- \edef\@MXV@movieoptions{\@MXV@movieoptions, %
- startat=time:\strip@pt\@MXV@start}%
- \fi%
- \ifx\@MXV@durationtime\@empty\else%
- \advance\@MXV@end by \@MXV@start%
- \edef\@MXV@movieoptions{\@MXV@movieoptions, %
- endat=time:\strip@pt\@MXV@end}%
- \fi%
- %
- %text option from 2nd argument
- \savebox{\@MXV@textbox}{#2}%
- \edef\@MXV@movieoptions{[\@MXV@movieoptions, text={\noexpand\usebox{%
- \noexpand\@MXV@textbox}}]}%
- \expandafter%
- \includemovie\@MXV@movieoptions{\@MXV@boxwidth}{\@MXV@boxheight}{#3}%
-}
-
-\newcommand\hyperlinkmovie[3][]{%
- \leavevmode%
- \@MXV@reset%
- \def\@MXV@autostart{}\def\@MXV@loop{}\def\@MXV@showcontrols{}%
- \def\@MXV@starttime{}\def\@MXV@durationtime{}%
- \setkeys{MXV@user}{#1}%
- %
- %sanity check
- \ifx\@MXV@durationtime\@empty\else\ifx\@MXV@startat\@empty\else%
- \PackageError{movie15}{%
- Options `startat' and `duration' cannot be used\MessageBreak
- together.\MessageBreak
- Possible combinations are `startat'/`endat',\MessageBreak
- `start'/`endat' or `start'/`duration'
- }{}%
- \fi\fi%
- %
- %option list
- \edef\@MXV@movieoptions{#1\@MXV@autostart\@MXV@loop\@MXV@showcontrols}%
- %
- %determine playback section
- \ifx\@MXV@starttime\@empty\else%
- \edef\@MXV@movieoptions{\@MXV@movieoptions, %
- startat=time:\strip@pt\@MXV@start}%
- \fi%
- \ifx\@MXV@durationtime\@empty\else%
- \advance\@MXV@end by \@MXV@start%
- \edef\@MXV@movieoptions{\@MXV@movieoptions, %
- endat=time:\strip@pt\@MXV@end}%
- \fi%
- %
- \edef\@MXV@movieoptions{[\@MXV@movieoptions]}%
- \expandafter\movieref\@MXV@movieoptions{#2}{#3}%
-}