summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/movie15
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2009-03-23 23:56:40 +0000
committerKarl Berry <karl@freefriends.org>2009-03-23 23:56:40 +0000
commitc36a93508014f2ba14a09dec8f70a39577ac6470 (patch)
tree3508ef9b31d96c2c824aff72c23c9eb7e7f78058 /Master/texmf-dist/tex/latex/movie15
parentf3e4da8de0bec75f027ec22af12443c9cfa2a0f6 (diff)
movie15 update (23mar09)
git-svn-id: svn://tug.org/texlive/trunk@12504 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/movie15')
-rw-r--r--Master/texmf-dist/tex/latex/movie15/movie15.sty857
1 files changed, 726 insertions, 131 deletions
diff --git a/Master/texmf-dist/tex/latex/movie15/movie15.sty b/Master/texmf-dist/tex/latex/movie15/movie15.sty
index e4e82b40b81..618772a284f 100644
--- a/Master/texmf-dist/tex/latex/movie15/movie15.sty
+++ b/Master/texmf-dist/tex/latex/movie15/movie15.sty
@@ -9,7 +9,7 @@
%
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{movie15}[2008/10/08]
+\ProvidesPackage{movie15}[2009/03/23]
\RequirePackage{keyval}
\RequirePackage{ifthen}
\RequirePackage{ifpdf}
@@ -83,7 +83,8 @@
%}
\AtBeginDocument{%
- \provideboolean{Hy@colorlinks}% set by hyperref
+ \@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%
@@ -145,8 +146,6 @@
\expandafter\pdfpageref\csname#1\endcsname\space%
\fi%
}%
-\else%
- \PassOptionsToPackage{pdfmark}{hyperref}%
\fi
%counter for absolute number of inclusions,
@@ -259,12 +258,20 @@
\setboolean{@MXV@iiid}{false}%
\gdef\@MXV@aac{30}% aperture angle of camera
\gdef\@MXV@roll{0}% camera roll angle
- \gdef\@MXV@background{}%
+ \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{}%
@@ -279,8 +286,6 @@
\gdef\@MXV@iiidpalindrome{/Subtype/Linear}% forward
\gdef\@MXV@iiidrate{}% animation speed
\global\@MXV@iiidrepeat=-1% repeat count
- \gdef\@MXV@lights{}% default lighting scheme
- \gdef\@MXV@render{}% default render mode scheme
}{}%
}%
@@ -418,12 +423,17 @@
\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\fi% number of embedded resource files
+ \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%
@@ -506,25 +516,25 @@
\FPupn\@MXV@upx{\@MXV@upxprime}%
\FPupn\@MXV@upy{\@MXV@upyprime}%
\FPupn\@MXV@upz{\@MXV@upzprime}%
- %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}%
%translation vector
\FPupn\@MXV@roo{#7 abs}%
- \FPifeq\@MXV@roo{0}\FPupn\@MXV@roo{0.000000000000000001}\fi%
+ \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
+ %macro for parsing one line of 3D views file (old format)
\newcommand{\@MXV@parseline}[6][]{%
- \xdef\@MXV@xname{#1}% name of the view (optional)
+ \pdfstringdef\@MXV@xname{#1}% name of the view (optional)
\ifthenelse{\equal{#2}{}}{%
\xdef\@MXV@coo{0 0 0}%
}{%
@@ -551,18 +561,254 @@
\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
- \edef\@MXV@args{\@MXV@coo\space\@MXV@ctoc\space\@MXV@roo\space\@MXV@roll\space}%
+ %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
- \xdef\@MXV@xname{Default}%
- \@MXV@viewobj% create pdf object of 3D view
- \edef\@MXV@defaultview{\@MXV@@viewobj}%
+ \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}{%
@@ -577,7 +823,7 @@
\expandafter\@MXV@ciiwmatrix\@MXV@args% build C2W matrix
\global\advance\@MXV@viewscount by 1%
\ifthenelse{\equal{\@MXV@xname}{}}{%
- \xdef\@MXV@xname{View \the\@MXV@viewscount}%
+ \pdfstringdef\@MXV@xname{View \the\@MXV@viewscount}%
}{}%
\@MXV@viewobj% create pdf object of 3D view
%append current view obj ref to VA array
@@ -587,6 +833,33 @@
\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
@@ -594,9 +867,12 @@
\ifthenelse{\NOT\boolean{@MXV@defaultviewprovided}%
\AND\boolean{@MXV@viewsprovided}}{%
\xdef\@MXV@defaultview{/3DV /F}%
- }{%
- \xdef\@MXV@defaultview{/3DV \@MXV@defaultview}%
- }%
+ }{}%
+ \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
@@ -618,10 +894,27 @@
\@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{%
@@ -874,11 +1167,61 @@
\@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{%
@@ -1124,7 +1467,7 @@
pdfmark=/PUT,%
Raw={%
{apdict}
- <</BBox [0 0 0.001 0.001]>>
+ <</BBox [0 0 0.001 0.001]>>
}%
}%
\xdef\@MXV@apdict{/AP << /N {apdict}>>}%
@@ -1775,11 +2118,6 @@
%definition of user command `\includemovie'
\newcommand{\includemovie}[4][]{%
- %test for hyperref package
- \ifpdf\else%
- \ifthenelse{\isundefined{\pdfmark}}{\@MXV@missing{hyperref}}{}%
- \fi%
- %
\leavevmode%
\@MXV@reset% all macros and options
\setkeys{MXV@user}{#1}% parse options
@@ -1875,29 +2213,23 @@
\setboolean{@MXV@externalviewer}{true}%
}{}%
%
- %some link attributes (if hyperref not loaded)
- \ifthenelse{\isundefined{\@pdfborder}}{%
- \def\@MXV@urlattr{}%
- \def\@MXV@runattr{}%
- }{%
- \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%
- }%
+ \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
@@ -2015,10 +2347,12 @@
\ifx\@MXV@label\@empty\else%
\@MXV@labeltoaux{@MXV@\@MXV@label.3D}{true}%
\@MXV@newlabel{@MXV@\@MXV@label.3D}{true}%
- \@MXV@labeltoaux{@MXV@\@MXV@label.3Dlights}{\@MXV@lights}%
- \@MXV@newlabel{@MXV@\@MXV@label.3Dlights}{\@MXV@lights}%
- \@MXV@labeltoaux{@MXV@\@MXV@label.3Drender}{\@MXV@render}%
- \@MXV@newlabel{@MXV@\@MXV@label.3Drender}{\@MXV@render}%
+ \@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}%
@@ -2311,9 +2645,6 @@
%for remote control of media
\newcommand\movieref[3][]{%
- \ifpdf\else%
- \ifthenelse{\isundefined{\pdfmark}}{\@MXV@missing{hyperref}}{}%
- \fi%
\leavevmode%
% save text argument
\savebox{\@MXV@textbox}{\ifHy@colorlinks\color{\@linkcolor}\fi#3}%
@@ -2390,22 +2721,28 @@
%
%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}}{%
- \edef\@MXV@lights{}%
+ \gdef\@MXV@defaultlights{}%
}{%
- \edef\@MXV@lights{\@MXV@getlabelvalue{@MXV@\@MXV@label.3Dlights}}%
+ \xdef\@MXV@defaultlights{\@MXV@getlabelvalue{@MXV@\@MXV@label.3Dlights}}%
}%
%retrieve default render mode
\ifthenelse{\equal{\@MXV@getlabelvalue{@MXV@\@MXV@label.3Drender}}{undefined}}{%
- \edef\@MXV@render{}%
+ \gdef\@MXV@defaultrender{Solid}%
}{%
- \edef\@MXV@render{\@MXV@getlabelvalue{@MXV@\@MXV@label.3Drender}}%
+ \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
- \xdef\@MXV@xname{}%
+ \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
@@ -2448,21 +2785,24 @@
\@MXV@linkjscriptiiid
try{
%JavaScript to print the camera settings of the current view
- var camera=annot3D['\@MXV@label'].context3D.scene.cameras.getByIndex(0);%
+ 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
- %{<coo_x> <coo_y> <coo_z>}{<c2c_x> <c2c_y> <c2c_z>}{<roo>}{<aac>}
var spc=String.fromCharCode(32);%
- var res='{';%
- var x = (Math.abs(coo.x) < 1e-18 ? 0 : coo.x);%
- var y = (Math.abs(coo.y) < 1e-18 ? 0 : coo.y);%
- var z = (Math.abs(coo.z) < 1e-18 ? 0 : coo.z);%
+ var nl=String.fromCharCode(10);%
+ var charht=2;%
+ var res='VIEW\%={<insert descriptive name here (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+=util.printf('\%s' + spc + '\%s' + spc + '\%s',%
+ 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 ?%
@@ -2470,13 +2810,14 @@
(Math.abs(z) < 1.001e-6 && Math.abs(z) > 0 ?%
util.printf('\%.18f', z): z)%
);%
+ charht+=2;%
}%
- res+='}{';%
- x = (Math.abs(c2c.x) < 1e-18 ? 0 : c2c.x);%
- y = (Math.abs(c2c.y) < 1e-18 ? 0 : c2c.y);%
- z = (Math.abs(c2c.z) < 1e-18 ? 0 : c2c.z);%
+ 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+=util.printf('\%s' + spc + '\%s' + spc + '\%s',%
+ 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 ?%
@@ -2484,46 +2825,169 @@
(Math.abs(z) < 1.001e-6 && Math.abs(z) > 0 ?%
util.printf('\%.18f', z): z)%
);%
+ charht+=2;%
}%
- res+='}{';%
if(roo > 0.11e-17){%
- res+=util.printf('\%s',%
- (roo < 1.001e-6 ? util.printf('\%.18f', roo): roo)%
+ res+= spc + spc;%
+ res+=util.printf('ROO=\%s' + nl,%
+ (roo < 1.001e-6 ? util.printf('\%.12f', roo): roo)%
);%
+ charht+=2;%
}%
- res+='}{';%
%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);%
- }%
- if(util.printf('\%.5f', roll)!=0){%
- res+=util.printf('\%s', roll);%
+ %%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;%
}%
- res+='}{';%
aac=camera.fov * 180/Math.PI;%
if(util.printf('\%.5f', aac)!=30){%
- res+=util.printf('\%s',%
+ res+=util.printf(spc + spc + 'AAC=\%s' + nl,%
(Math.abs(aac) < 1.001e-6 ? util.printf('\%.18f', aac): aac)%
);%
+ charht+=2;%
}%
- res+='}';%
+ 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:
+ 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;
+ }%
+ res+=spc+spc+'RENDERMODE='+currender+nl;%
+ charht+=2;%
+ for(var i=0;i<scene.meshes.count;i++){%
+ var mesh=scene.meshes.getByIndex(i);%
+ res+=spc+spc+'PART={'+mesh.name+'}'+nl;%
+ res+=spc+spc+spc+spc+'VISIBLE='+mesh.visible+nl;%
+ charht+=4;%
+ if(mesh.visible){%
+ res+=spc+spc+spc+spc+'OPACITY='+mesh.opacity+nl;%
+ charht+=2;%
+ 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!='Default'){%
+ res+=spc+spc+spc+spc+'RENDERMODE='+currender+nl;%
+ charht+=2;%
+ }%
+ }%
+ res+=spc+spc+'END'+nl;%
+ charht+=2;%
+ }%
+ res+='END'+nl;%
+ charht=(charht>40?40:charht);%
%open pop-up displaying the result string
var settings={%
initialize: function(dialog) {%
@@ -2536,16 +3000,19 @@
elements: [%
{%
type: 'static_text',%
- name: 'Add' + spc + 'the' + spc + 'following' + spc + 'line' + spc +%
+ 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 + '3Dviews!)'%
+ '(See' + spc + 'option' + spc + '3Dviews2!)'%
},%
{%
type: 'edit_text',%
item_id: 'text',%
alignment: 'align_fill',%
- readonly: false%
+ multiline: true,%
+ char_width: 80,%
+ char_height: charht,%
+ readonly: true%
},%
{%
type: 'ok',%
@@ -2750,19 +3217,25 @@
};%
%create Miniball object
var mb=new Miniball();%
+ %scene object
+ var scene=annot3D['\@MXV@label'].context3D.scene;%
%aperture angle of the virtual camera
- var aac=\@MXV@calc;%
- %list of mesh nodes
- var meshes=annot3D['\@MXV@label'].context3D.scene.meshes;%
+ 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 mesh nodes in the scene
- for(i=0;i<meshes.count;i++){%
- var mesh=meshes.getByIndex(i);%
+ %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
@@ -2836,15 +3309,22 @@
%result string
var res='';%
var spc=String.fromCharCode(32);%
- if(aac!=30){%
- res+=util.printf('3Daac=\%s,' + spc,%
+ 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){%
- res+=util.printf( '3Dcoo=\%s' + spc + '\%s' + spc + '\%s,'%
- + spc,%
+ 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 ?%
@@ -2853,9 +3333,110 @@
util.printf('\%.18f', coo.z): coo.z)%
);%
}%
- res+=util.printf(%
- '3Droo=\%s,' + spc, (roo < 1.001e-6 ? util.printf('\%.18f', roo): roo)
- );%
+ % 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,'%
+ + nl, 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;
+ case scene.RENDER_MODE_DEFAULT:
+ currender='Default';break;
+ }%
+ if(currender!='Solid'){%
+ charht+=2;multiln=true;
+ res+=util.printf(nl+'3Drender=\%s,', currender);%
+ }%
var settings={%
initialize: function(dialog){%
dialog.load({%
@@ -2876,7 +3457,10 @@
type: 'edit_text',%
item_id: 'text',%
alignment: 'align_fill',%
- readonly: false%
+ multiline: multiln,%
+ char_width: 80,%
+ char_height: charht,%
+ readonly: true%
},%
{%
type: 'ok',%
@@ -3478,6 +4062,7 @@
%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}%
}
@@ -3526,6 +4111,7 @@
\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%
@@ -3535,13 +4121,28 @@
}%
}{\@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}%
}
@@ -3619,7 +4220,7 @@
\setboolean{@MXV@defaultviewprovided}{false}%
}{\@MXV@neediiiD}%
}
-\define@key{MXV@user}{3Dcalculate}[30]{%
+\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}%
@@ -3687,9 +4288,6 @@
%compatibility macros
\providecommand\movie[3][]{%
- \ifpdf\else%
- \ifthenelse{\isundefined{\pdfmark}}{\@MXV@missing{hyperref}}{}%
- \fi%
\leavevmode%
\@MXV@reset%
\def\@MXV@autostart{}\def\@MXV@loop{}\def\@MXV@showcontrols{}%
@@ -3736,9 +4334,6 @@
}
\newcommand\hyperlinkmovie[3][]{%
- \ifpdf\else%
- \ifthenelse{\isundefined{\pdfmark}}{\@MXV@missing{hyperref}}{}%
- \fi%
\leavevmode%
\@MXV@reset%
\def\@MXV@autostart{}\def\@MXV@loop{}\def\@MXV@showcontrols{}%